[PATCH] user: Add a Dynamic Loader section.
chrisj at rtems.org
chrisj at rtems.org
Tue Feb 19 03:38:03 UTC 2019
From: Chris Johns <chrisj at rtems.org>
---
images/user/libdl-load.png | Bin 0 -> 38044 bytes
images/user/libdl-load.puml | 39 ++
images/user/libdl.ditaa | 42 ++
images/user/libdl.png | Bin 0 -> 26974 bytes
user/exe/executables.rst | 2 +
user/exe/execution.rst | 2 +
user/exe/index.rst | 5 +-
user/exe/loader.rst | 864 ++++++++++++++++++++++++++++++++
user/installation/developer.rst | 3 +-
user/tools/exeinfo.rst | 2 +
user/tools/linker.rst | 2 +
user/tools/symbols.rst | 2 +
12 files changed, 960 insertions(+), 3 deletions(-)
create mode 100644 images/user/libdl-load.png
create mode 100644 images/user/libdl-load.puml
create mode 100644 images/user/libdl.ditaa
create mode 100644 images/user/libdl.png
create mode 100644 user/exe/loader.rst
diff --git a/images/user/libdl-load.png b/images/user/libdl-load.png
new file mode 100644
index 0000000000000000000000000000000000000000..10aafcfe65f44599760f1c01ec0d37df9c42e947
GIT binary patch
literal 38044
zcmZsDWmuJ6x3wrGsWeiO(rmgzK)PF6y1P?AP(qNB?nVLW1`+8lX^`&j{?>-)dCz&T
z at BCnc_g?o}bM=^Gj%l!hoH#1d3#3Pn9-&G~h$=mL^!O$CSwwscp4j$W9)n*rPH!}v
z3~lY)t&B~a9*G;<7(2XkGB$c?;QrFg$;pm~iOJ6DosE;TwH2eGt at U#VHzBBj!9zvE
z>EGv%9=Rn4M$0=+L7uhkB`)x8KSzUn;UL;1e1TzxfD|n=W4F_J`eL*jgS at N4>#CT7
zK;}+H9&u-6WO`on?2rA at rqn6k2g(~^B?)gK=W)Z^H0q4BJ?1+!C8Hn$KO6y+pF4^d
zkJWkU;dK#%M;mJLcdx0WLI>4fWU?SCVrQb at 20r1r3aUlkjN(XE;8mC+m7o_Peveh#
zb=H(Foge#}AwuIlziPr)4hx5(bu-xw3rz`<XDDjg`SVWNk-SETImN0lDrdtfqxf;3
z*=UIdDEv9%zKY3Se;Fw8-G-CA6o_i<7X9#H2ZxLdeI&>v5!qUr<wG!;gw#QFnRE&!
zY7to%s}us!PJ;3HB~w6M*<SC)XxrT$%p-c~zp{=^<(>Tj^{0MO?<-6taElk;Ebuqh
z+1u4UX^gF|e4i41<0m{wUmKJ6Cu?}s>h9HvBE9pgV-l+hGZTqwp=I2U#wh~F6Z}tq
z9qA85(Vf-3ZGHYZr{JfN6KkrB_|n-;46nu*hD|P{Nzx{-%Lu9b%_Ure{?E&_)Ny at h
zYljcQ8m6LZSG8ypAtc-l=X;gEU{lwJidNI6Q8n_jAeySb-xpOSh5ntLUI?%|rbRLK
z+o8I&GA#b!uUJ?Ty<rqDI|t!0T9g at ycGjTWA9^W}?RXmF(yzeT8rSB*EREaR%8+E(
zWw}8uQp|r2t2?ql at 2$-^nMmx==Zb}g?Mac_pX`-z^LUIy<D`K!Kl;(5_m3n+U#qxH
zZKoh;E3031JjZ&bpeXcOyGYZ1^s<neR<)&QOjBL!TV*({vkD=$-S{6xY*<%1ThjOO
zqA#u91SvtxG}LZ*Guf+N;A+BRVUM2O{hpr7HG1YE>@z=bv0pngW54^9Z=UaLCfRUb
z5G?O>c!&@t`2AiVd<a3n$4fl$@yH(re6)a{`!60L!h=6ypZxQMPF_XD@%h2h(Q2Qg
zgTv-Nys4?FtLs_xEBQ=&=<E3urKP24XlU at XFITd2ax!A?A8IU?x$I~L9GXr1SeR?{
z9MXP<^5~IScXuouD%)z3ZBwn=L8d5KS5J at U?KQV1I at E#{yISpl5Pc(~<((Y{EF?)*
zrGkp|^hb$)`oMDffmHsj!Hj^{a2qqVj!sTa78bNycoh^-Gw;YCkim4N?{CY+UOxK~
z{u<*6=*!RMcrJT`6<Ah><<7r<_5U!hM?fq3t5;z at lI!5_zLw(p`0-<5Vd2cItU%!m
zQL>iLEYOZG3u_pI4lUSm`T6;2GjfuW`bioLrb5kEQH3yQR-_*X${L80MXJ!g at e~GQ
zxQ|;^RTYaVv(}$N<4W2B3kMhY at nc?Yt`r4E#Ve?JzRX_d``u65$Hrnimf+yw9k>Vu
z($bQX>2X4b?(4m7YY9N0dlf(SO<e>6Z782YP;h=~sxH%|w7MD{6*W*FI;IL8U?Aye
z at zBxH=LlZnL5&?{Hf%@f+hH*urf6qeU;YRkDZ-GDkoGYAtYDq?2$F#rLh|~*%*N2d
z-D`_&p`kbo7Q at -WiMDEtI(0E;oZ0wZLl|K6-ycRwPzY!2cSe#suJ&&HDbgx8>FY%e
ztHWor9{JTiG-SW<D=?<uhif}ty?*|E<J}(*(Yu9}l$GHgzqYf3bdgV3(v7E+xZa?p
z685Grw=?2xKh#XhFOj44huJ9d<p2Xk{L6tpKL^+bKOD0sDC6j0rrwKTVPX9U4-OAs
zEuNS3fBLpDmRwvx;aNf8A)X8uJSZUq7lrqSSvUh?(-A=t|3kL^+~LE=kI|YK7#I*^
z7U&pb|B=zvO%)~MCU_?2FL`{${T8iTQ<Us^K_G`vGcvS9tfcYpNE(XxqZzJJ!e#7k
zO$i1G?T7VyCT|k0Pn_H>rhLCATA-ilu`$cIh0nvTzd?7$dnCKDI4!%knJN%>^EI0w
zLJ`c at ppXK7s>JRGEi^+ya;Eq#1adO#ju;&5tl)=g?Ng{evOAM@{P6F(m`bwcp&qd&
zc!2<|t=sWN9LAmU*YFAat8g4S`P1bWr+I<m32}p5_v<WmJcsFms^2KaE|j#ag%R~K
z#qN4hbpEXwK6D-nyEh7S!!+X^ES48Rql5JK at 5E+qRl5brh3PELC1BWaqs(62KSl>u
zu=-2lZwBpp- at lCdR^9hWf<BqnXR$K@=)jBxegD=xB!nU36<1(}3M~_}fBfg>dgdD#
z7xfClJ$B{O_``~^*onCQ^X**`Ht1XVwp}0DPE~TJ+vCxemPz2hMLT@&s5r7j=j*L`
ze+CCSxn8A7;TKt&Le*)KS>bkfj8%<Hz at Z~pvG(=lUtOf?%oP`uwQbzp<8q9vVf+%J
zecoo5rLKi?H&kQv>>OF`*XF2m<iMD8Prk?*?x8bQq!r2jG$k)z)u at w8=Wvdgs9#}p
z^)5kLXe;c5 at ApQab4EnY#K1W-9O%zg at J6~pDYxOAmEU^NYtnH*?|Yn7PW&@Ws9lfH
zSs6dPMG1F}S8yU%<lXu8mC#k*p|^|O2P2q*i3vR%dQ43995q}^Oe-42E%N47%rMGa
zth8Qeljj|OK`hlk>43Jj^M-BDQ&%MK`iPn59qy{`Ta9wkcTWUxkpk^dzz7X05$o0T
zv#+0hTl3H<MOH4}o}wWj*YAMgf(KTZ(X6Rm60sABa{Jjl&CP}clogYcFa$?L;0B9g
z1ZRU|Z;uLE30dZJm~;}CUiJ2`n3#9v;T8C;D-M_#7!Hn(IZ8B9(0!QBz*m3u#d2_O
z3Pw-|tM{Ukpy2TJ>(>hl3k3xQ2BmnC_txML8|!A`dGiKkxohZ^8svWL!0mOoI&~pa
zl+bw^)F2Uyemsl&;>8OR5_w6mm5Aq*p;cqg2qwrfU+N;M<H9*gKNE^w^QtH3;?j8e
z3^7o+Kqcf13-m<@qROCRouJRhQSRDBf${X=RcZfPH|Fnp&BU at vi4pj$W~;sSA^y)p
zvx3m~=Cgxq14IxQ&k$C})QY}WS-lmuOysoX at x9Gn8yH~O+MAP2=5ZDc#p#=>EI&Eb
zZLw+auJ^3Au^o9WaO<{QZfeSgCG%ws2km3)+EH|LbejS5Lz}GrGz@(nYbmE&f4ncw
z?Wcyac*DX_dJuy+)~8O2Y?~5d)9$3bu5}%c+9xM7!dN{{HV>z5nK^BK5C6)QMK)jg
zrat)u{#d)=d`Ub)PNxoQsMfJQ9#7E35Er*&-dE7&%H^^7>R`snGw7J+ulaL3Qgu#E
zMbZDd=CPT%GKO_Lwfd1`9F5B)+S@%@{_491bF{sf#)O=SvFHa*^8g$N$Jz>J&x%G*
ze$&1e16IjVhnVFKC!4jqyCbB~xl|Z{6R}CZ4!Ch1$}~5IC4Y8)ygn2>`<^9MUI4$1
zi=6dnUyod6m5{V#P}pdh at yU}XQURafQC|#}efvgUesFQ*b&80LBNGI at FNAIe^sTHC
z)z#snQ;4SOD*Hg^jQbzopKgtqC<Qsnc~t})^lsN&pZPK>(A!%wS_ at Un1mX=lP7 at Lm
zOpI^F5Ju{&TR#(&Vn`A)Sk0`9(djkyIyiW^PL>Vq&PsdizigZLZB69|cNlc3innw&
zvHGU&txxFmDI2L5BWmjqG0^wcIc?aT at 8fXLOg6YP7iC<V%r!(zAhhnz$zE at lmojKo
zrL(y1iVlM+z(Iek0*R$N?9UH&;0+?bBJK^^d8nI**hD)W&wEYd6C={<Wd?s)hJn|q
zF!Zhz+H&*Q5@<6E8Lgv^2PaGyEG8b}eIKnw_4&yR+c9(qWx1Vav{Pp#5Fd74g3a_V
z`Z*>BoQ<zK`M<oP{bovS9-2{#w~4=-u2ZdsbtKm(QBA70LAW=oBCaBsjwaasP`nH+
zhbgj1{IE`b at xbljC0*zp at D@eR>9QspBJv70dZS9|Ym?RfszWUd3=Cc|33R(N4No|M
zvw~txUhg`gc*Ui*%<|P_An%5yl%BANh$JN54h33_-JI8#s^hm4-jM>upj>4GZCAJb
zS<DKf9BU_IOw$)l2}nE({(V7%Qm&1>*5{{L60G>FU#}A|b5vbwDG@*Iu*sRk1xveS
zh<7rQl9C>tb>!c|!NIwakm5ah|A#bIismU7F)=>3VcSry2z5*cuMAhUL*M83-maJ;
zdpUM=iZ<d1x(Ac)yg|yfvwMWdwLWGMW^;!U(+esjx6 at 0t#99e6f!i48 at S1WG66uM`
zH)(>t;b+gGHW3{k=#fQ!63sk6KPSJ1SwL<ufR~H&9{-)LH;dyFP5O?}u|~RirO~ev
z+0!v>Q-)pq at -dk63arcXw79reIH7^U at 0^_2+HBrFyXz7(8owncaB&#lTejXWwo5q4
z?O8^S=-!rI at zk4}6KNPE|E`&@Cew^O_W5f;s)|-2>lon%^r9a`?NBfgg5js8rv7XD
zm`?7?+E-5UO<T0 at XcLJFMfo-=A`|!5Q>vjTnIeFHZf;!BYzi`KD#`jKMHKP+B at D@%
z?>B|mGcNzTGzEsFjg1XJos>wA{oWh!G%t2GA)60IG!G@|5h)PmQ>l;?Vvl{cK&*#e
z4zrFjuV4GA(B@$I3D+u6XUC^%+lODBN9%`Q5lR)K<)f)!7NU=ZY>Kge&;fh(J(^`u
z8EnXE4C5y{ITt&ur&O;fq_qF3HvisU-rksAbUEWJntO0TOL-A!0ZV>I`yLAU9&4Yh
z;AnrP#+K2Ys!by87!<v~`-5IZ at kUk|;&pT)2W<;)Nr#3EJ$w=MVU86a;1be$LU!kV
zr|F>fdyIW()I0IhmhEL-9|9+rJw?2w=ec+v!pN_zUTHHza5_Drl|LxD%8nkj?;*1m
z8+yFLDBcJE>iCwB0lIgERD)gPX&rm<Tunrm&s}r11 at Zh$?&~d-n42Lql-9t+b=nhw
z!Y2L?>^^Cw(kfe}>vQ**b*eMI)bF`WO%7e%8Ca-~@;Ty*eQ53XWL{f>(R_a?1p0OL
zs=P8ow2DyHpPS#hl0!vIu$&rtWLhuRT&Wn$dGgb!d)MCgdya83lpieS%8Z%th2)!G
zDLxh=#&Ys+HG0CCA^BJPXu#USK1S|cOWo%F*NXHdQe_sC%+Oa|hR8dz<+O!RV{5$X
zHRy{s at Z+H7Y-j3)bDu1DSro&bSr-zD80;S$l$MuU&el~5z0_B0Z*O<mnHu}`>sMRb
z%2cIg$eyr=hexx|jf||U`5ACNR6ESa3bBjwmcod5Pj7FoEc!dwj;5<^Z7nV94Li`t
z$;nMtHb(M at h=}@nd+VIHa7aj?z*rww#{nhq%6aP#Ha2!!TU({|^w&Q#jh at wS%T2Hb
zk&%%b8yYUp_ViYD(gQT!zKv852 at M@1{J7E;{mOE at Sf|P=p^#y3rq<BhJRvGdNkQR<
zQ5S|7B!ZZKbF$o2POd)`+*4$cjg2=WdGZh4WDU=-yW5^*HL0~<YNw>6eE$47xmcL~
zpTUyPFWAXOI-8$IMn)DF7l$M$BrFa7x;)vUk!5CM%T^bUATF}#+27xPib(~r?4%3R
z&&<q3x$O%?#)Yoe?M&A2$UR<WPR_hR`32oZeb~n>Ki;)s!6~nD<;kb*4(IfoY>i7x
zOLyUHGlpmd1qRX}1+j5Btq&sIL_$}<)DPr0rBWXaPp%T<@o;g|3W^=aY7Mbk`8`9w
z=jWUCC9)UVL<R;0l?8tqUZS9+bl#i00Zx_g^})yT^70ogkm^pk6rML!T6In|<aj)x
zm6esv&Azp+?a+&|XqB<@C7w%09c)%UBWkDw)~^{+i?MEtGn)t`ZZYPWyS+U*pG#HM
zSH7B>n)6NGpFe+I;l1b~Tmudpt4VLVF#^KJSUUB>=O_$zwKHHTOioStT<uf?XHj35
z-*FWsp{uty%q4>XdIqb_;E%MTtgiHY|NT2aOe|<1Ev=~A(b!qy^=p_F8N-h7qM2Q=
z6w at zvqQ0IwHv90)$QqO62lzLc`ZradA at TBV{VB30BWp<L8y<N=NK~Jckl?a)>Y_bE
z%ziaI5Ea$S?I at 5fjJ#q3nXY00-P|0^VE1Iyto5$1Z}je|v|Jl1iP36s*B`gq)>!jA
zi;A&nB~~a+T at KqA>0mQAkgKn-waqIe;;_<yIGO38?!~srzD*z^qzsp-^<E4chUv>@
zHdlAGPrJ1*!I|3vOO4eWiIS)J=9B;miC$Cqm14mv2ldmBGolk`YrJJA=j8KFBu!KO
zu61Vo?wyC#_HLE6)==U{botZmNp4==82^*W@)oQ=X?)KMr{Y`)Sxp8nPmb6d-mLBl
zG^W2~Absb1v?{wdFK?pe;nB}X%fryjbR)(1wrZR8RP=Bff}o-~ux=&@0NVAn-e|>>
zk4HLZyF_EQtvq7-oWiZleZPIgomOn`um0a#!*O|eULr8N-Nh-JtvNz}mo_)^-I78Z
zBgbk=yFzg at J3DoZi9Pv!Q%fx71-$Ea=bJT;1n|lpAJLlA(00eYmF#|ZMy9UFcyjin
z{>da}mu)Mdf;m5vUU)j88GvkFw=RdDheH&JT at IH?Wo>d-YCM%%4-vd at YK;fFykB#Z
zDvoC=We1xAXY(r)IIb!tQ)--`Kszry_|rZy$M>{EA1r`Qv1+;~L#iWGcCPw3%LUH=
z-k1*btEfOI(A6N at j2jy;I(1GpE(~?q6w%i$siiV&sE$H8C)o~1CfCI}bR7{SGo^+E
z7ha(ZL_8HuPBg+I^>!Wo=qM=54z*98KCP{-RVq*^WnI1PvYLvLxyN0j%)Qpdtskp9
z&l>5Ff;h^ns`#AD8ol7tP4v3C0c0<UXUwmC<Ffc0=0eM8n=v>Tq26^*V$1jLCcfN}
z>BL`AQ{KIA at Y`{@1Nvi#3pda0x4(b?zJLGz%a<?f>t>M>u;4g59%Vit$H{l?Woo{j
zskY at bToN<p*<67WLB_{_jWyrbD>Hxmij&cG9vpMSrx7H1=EGg{g|Vu at OF2xrJ{)lE
zi)a4Yzy5dd-Aebs7_yi-KREkjdr)7n{U|TLy}f!PMc_yKCE77tyZ(c$hD7ka+t1=q
zUY4b^YBo#~kQuDgN#|$#lY!;Y`zCS#H_SI8MVj6l7WOb&U6NrTsd|$_SIMX^^>qt#
zr4=r8UT_u80}L%D8KIX$`0Ik__m?{tJlQ{gdAs(u?QzUYFIb4w5)rwznXc{Ng>$G-
zc^(wfPC>8jpUgK3F<&44UavQVO*;EfJWIS?8M{=PAO)aF9c{}<oH7?$LQ at 0U*1kNT
zJ`Rvt7VH2fq_em;;4J((($dn>g_nT0Fgg;_;wTXXH&RE7uGXlPp}xLCl4>S=h6(ft
zrYg*bB8f+Y<T$~iU0q$rPx<-ylJ#8oIox`JsOQ#;Ob9S!tkr^Fd`Jw06_Hg5-e?2G
z-#77!kwt1ZxJ4S6Sy)&&%-YX%r2RUuPZP1IB5fHpiOqkV|5gGrDjFN#03~xkACQoc
zs6C`|l#sF(>&SVzq&V(OB(Um(dRD-G9{K(ILqi$3(lkYob#-+)I5+^npK10LEKjJc
zWG~`mWhG!Sk`NPvFIU?5>f_^cdU{$h+}hgO+4+gTr+%+#y2gG9oYNOqSFChryR$u3
zwKlUnQ&EZe7|P^O<dBXX^R#1`kB$zyycQQ1eaX_TQv00Wym at 19Z*M(a6+3_Pe_npV
zRT^bRPt60=1U!yE5q^!1K3Z%;mQs_Tl}{6B^gOcx+-7uC)N=LrOKd2wlaB2l92Vx}
z?94y_gNl;M at 7YeT+^?vlB#gW at USd02cQPNX6RuWi?B;g<;VEW3`!co|fuf?Kac*;i
z-NIvQZlCLO7A+_ at s2~q~IK&`Sf?R4mm&uu#WGsiv;|;*PX*c^cR#e1Twd`ir7;9+6
zXX;BBihM+4aKwS)tj%)$crBxhj0`KXOcer2Ny*uISKs}=EhN6z3)|b@#UQ;5Wy*PS
z*f=;)5^o4TrEO|zYJUC>V2JJ0Z3dPpjOtF%i>9YR64KIJ)72%VrOcCLz;7?$&~5Z!
z2b`g%i=CZDtwYX>mchqyJ=WvJDMdv))$=~nnQxF+$5>7Kza;eb_Rh)pn)g#N?@U+c
zF}Q9|z(7%+H>M1#BES+ReTk)p9e<MO{GkXmy!BwYD>{KK5F=&Y=L*#yiu+E!MqLZD
zFKFDVQbUQC|8Qt*gljn|_4p1b_odQV0KxNoBFuo0oFv?qNH)BJNLf<_<=%x;kTjUT
zmC)ypB5Vy>+PeC6P8Gm1TeWeSb5Fj-X-{EvS`IP|yBwp+5e6=4pXq3~-d5~WA7R{k
zZ9*&VI+s!7c0%!OgP(9(jg=)i)=8$_4}+V^H(MU6=tzE1E6VYvv`xXJcrp96o~|Gs
z%tOnn#CIN_F>u=%AAftk at U_*c(G%*&J+da9x_u%BdFm}tg7CnwnIXqj!QRHUOoSEw
z=Sf+yPZkVT_)@)05hpGj7`68psdIH{X`ZpdMn$nTj3d;9X{l9p9P(1*P)6<EFCDc)
zBmFEp;57YW<Q<=5wNy!WDREk=p6C9%b~xyoC{$*M`Z+NnhdIwjcYV7-V}r|KRp(<i
z!0`HKBbH53>@;(7xn9l4z!V>i&Qj$QpS5utK5j3Zk_^mBp{d`t)I|?a{DDn#oUE2l
z7R)ibDx}yt*&@85rwqhbciBOyc3NO3RAA8i4J~{r4N$k8^tfG5MmA34iB!Vj;=r-;
zQZof}wpXbxZ7dEJ7N74e;r-O^LzaZ&+y1(JeENnHV<DD>a?4WQq4i%*O<trU#$8va
zK;L3F;W6}B#pWC6iKrkV+S`A3kfJ;oJnV27;QlYY_C3Q8kX3b?J*wpKj&wIrgvKw<
zX3JWVp?rIR_er#`u`EmW;|J7pZE7rw-FQrI)6#Gn at _0hmv=L=K`%sie3Tf_M3p{X5
zdi>+9WSc#)I=lrLWUhpRGtA at YVuOrfhRbl#N0pom^ZcpMCB4b|4;Pm<nDNCSjc(}$
zH_?Teq?cEN1Vxkt1 at N9Xr>iRR&+{ks+nK-X<JF5+C#A3W;z3bbp=kBROTaOni$q5)
zA6`Uq7}jXp0I$-<rdWlRfit+vX}aCZoz=6H9)^d1GT`E5m;()plLnxio&PMDr!OC=
zR<5T$k81xf&aP&LVpVaKvMutlo0#0xOe548D1 at Q9o(*3RB2L6&VP;oP-)kBi96UdF
zlQK9wJnXh!#`G3g<0Sk!75KHX;eM^EJdx=DOQZPm=TuW;iUgL at Mooi3n+$pc6C1bH
zH#N1jful+_NHr|XsCKfgD=Y#6GVJ3F1?pI-9&4lAZ+cB;?)Us~zM%g*+(Jc&>i6<t
zVN^=Yunv<`#spC^n(D~OVxP%A=GNP(`Fjh$w2ZpEgT-8~4QyT5zqnprHY(NlF3D?J
zXT5a8k6v-=3U&V8^E?aFAY}J)yQ7lrB_iaps}+QloNkPa{rvg!_wO3O7ruR)(c2x0
z+qyoUE8Eu*hR^1>%GJjj&!F{nuqEj~EMeK=#lpuNa4uGqS>$ep8CSiFa6hwI94#Q%
ztT6injx&IjO_opza0X8+99sOl<kL(>EA%IdeY*84n(xPFv`Sw}y1dTCdn?J-WM%CR
zgQR(UrorCDg}NR!aKrnmfydcGI!O@(ivF8UWXF{$(be&}Vpwhetf4tkVNOaH0rSK|
zio*V|z9&u5o?tb;MAvwvyDe1E=XiZINBVgRZ*^$!K~FEAm8q%si3NpDXM|uezmJ!m
zEOO8%Pty>q!Cq2ifKi`-tu&gd-=B(FRbh3w82ITex98~xY&w&#lZQps+W=*9J at Ade
zS1RqFJ at p)0J_PO<>3;sSzx!v$S`CuTmg8*LpI?LO*gK=mIF?Y<HP at J0Zt_{sHGDin
zWQ*4o!*T})KeB!%?zFLt91pZ61TmI<`9L!2NN%*fN(;+`lOm^Pg>cvy?FYrgq;;ak
z`2Nsh)MS%&Y*FxNX-JHA{4nzqX?0xhZX-#NFKdybmzkX0bqGF2_&ES#>Bj2n;vVb}
zyOF;wjR<I75ygvLnC}=6SLGU>wVphA^fDgF2ol3TC?)kaBy?a<svAWvnM<g7YJ#m~
z4kc*kTHQme4FNXZ(8Tm(m5ue$rfSvj7A?I at 8lQW7-rBb2GnCZ;sL`93`h<i$-!&<>
z0=QkQ(h?HP)zql5>Asl&){$Dnc79im=5e6s6u2Y*!*D8Q2*l4d64}grij`P2d$%OU
z`KE=MKZ~}d!7E{9`FOX?IBm8*?)dNPkmkD}eosD{qRF}waCKtdUb8w6Q;e51-(ub0
zSI#telb?R6!xk5Z<KUP8AkO9GhJ1zPP;P?b;_}DFM!C*)uk(Xv$VqtkEZqUt<Z55&
z#^0E%-lVf3KwQTNG<`n~lY(pIdviKzYN%CZ_1buMCOA7GPo7n+Bvm>Am1sFDLfh<f
zkbf;vYos^2NvjL=^zU8(*FcDeYj~hO9-eIXiHN6>NZa{#AoT7f1b2(PV#FfVa)xB>
zk9W~B5I;XCUX6+P=^@%4MhQJ(j<Gm>zCDLNHTz&TclOwFT%Gdm{>MvUS*OvN1l~ny
zXd`Tkx>27Vr%{|g!piJY=+=%Xx__ZNxQW$}Cya&xr-jTyYB62j-G$seLmUb=2eGJ5
zZ#HX*aTL><_Hl~W?kP{~7x$d!I{Rd3^^#aZp^_6h^Y_VTx*Z2GO&@}SqV#Fm7Vw}<
zouzJEQy38>bbRn>IE`}1UUG=H>Em%Pi0vM!l%50#6(Y$dpn#+AIE8MFQS>CKWrj|~
z7e)DS05GJ)1MEb<ul{`81~EV~Utbw|99%3cDD$R(rc}VjNylrkIF5w?%+62|OH0%7
zIWYCuEp*l<e^s1=yyvOc&gf^GzVhJ%tdw4UTdJThloAr+9{gw at EJ}tEoLRjiIOYEM
zO)DbZco at EPG0BwUnnowMX05+Y5BaHkxy*$xjGnq1a*d;%=Y%EoaN<*YQcpTF4hVj^
z=QcHir=*UK?`b>s<9B>aO!D+N$brAs*VhNfrqR$Z{KuUTS;tFsu~Ww&bLW8#DOVB<
zMp(J?0GRiTvWyChN{y-|<}pD>Km4MD`ItN9m!*Qj7b~ld%4sg*qyWC^QO&2RP07FP
zJC9c?-IXS}t_i9fuTK$fWq-~C*@vY<l1l%*&vLzl7by|*<;yc-;(o6Wd5Ap)Z~Pmp
zl(^7Nr+yVEuNQ7i6~N^a<+JC@(waj3jYqfkVIVBu*C#70n-j4Em`*bKW}F4<{am}=
z`Sre%|NE7HxK8wKER8^6(l-;!n#(m2f`Lm*0w1Hcu<9)8Tr6NL5G+tFqPr)dqw<I{
zF=JpGOKYRGz6PfYEj-gM854uD_ at BxPGw(rg1!4+v2XqKt5-x>6U6oYDD7}0t!k%WN
z2Z#n!eCdG9C>;~D)KKBbDH8trK6b7GWj!A!DS}(R^`I!L3lN}Ep&|Ftl}EIa+tVaZ
zzl%p1PS|;Q>*38CDdbLb=rprId%hVZt at YR)_43VBcvDMomR<5zQ>f)c8Z>a`e;<F(
z=PQxcJA8qLSdRB%$e_k*rVIYYkXK${$W at KM=AnvsW%4+MmsA~)Cj_rhFApzU5bv?w
z`@+NXam$z*h|6=0&xqB8xm*8Y$Dvaah`;3ekvsnb6Dp)tQ$e|3g3 at lH@}DPPoKFZ)
z)9nc7jV&5$p_J#N3jYsHdY#0|y1U2^Ly?mFqV&rz`&ECiW5LdPG$s~)g<gghkHdI;
zRLF$;0JNvJqn36r0OC822|Q`P=R3^;bpQpLAsjB5c8y&msaGye7P-8#qH3=xd2jen
zM(*#1!&J3Hm%mr0+YCx~d7vKhBZe~Mt#~~F&6ihmIaeIB&i8Fj8OM1n-3tRM`Wa(g
zWXu&0`o0)yvW(vc=%>u$LU>kvq|`34N+hP4K@|PVz3CG<h2a at 7E9w!AkGCSrVD9=p
znnm3Ev4a-%`SvI|^pgEYwYFlAPzzpxvN5xwvU{(7$|jB_JUFF>Zy_M(ovd~Z>Lv3N
zNJrC+qUh1W;;a|ax~6LJ?xNDk?(dv?!dY43u_4W9E=r0bcm0p>r{zxXvNJ{AY`emO
z-n>s-bl&J0QC3r|Xe_fd&4G&+ at TDYL==2=<1>d)rz;h%E&-|RP*T76PbRjCe1|hGk
zvQS}H*v0*_ga3Xq#+mbQy+p2p!jf_E at H#<wb}=Gn=bF1|pf`)E|2jx+IbLFV2riD&
z%oJL at LuG;y1e{u0T0nFNL}-SFhR7l%Xk%~PPfUuhiuZFF`C4zmSlHbM)$}@kqv|OD
z4S`F>?>CB&Uh*EN39WZDG$J!VYw!~~heGmQecj=NEaD;^ozsC0ATl$_Q1;=&%#5}g
zgkGM)6>O5q<)mxqMjE9xDAkDnN_=qp-GL~}441?EIZ_}G|KR-ujiJANjoI<@{?t%G
zDHE;@_q(5me4l?GHX9DFwLW}bZD>&MD=H`=J^)pxJd`8u_;8Xe<-)yv{!}th5qTRL
z+Yw^tqB7<b=NO%++X48N5bdLn67iFJ5=B9^!w5k<Qs2O5f&?5+YeyTVUS50;Z>bWI
zhs%(*Ts!RBK}iV*mK&^K(I59Suex#?%zCflIGC59z_^d)yf6GE1ECMT$`L|)`1j`X
zFtk2>C~5{WCg?o{{K0z`dChqP+;l<^=l53EWLPnmy4m&{&rsg$Zwf(ja)_y^Pih89
zE)=6-PR78{f|t_MM|1RTKJ*rp0961~as!vc2qz-g#q4F67xpCMWZU!8zvW8xH9C at K
zP8_{oNWy{r_7V>(rVcl(m$`+dgTnJ_oB(JBK+&wS<LyZn$bP_-psoD at C#&h{j~|fT
zKYevJTIqVte*|y2>NY!Soh?iK{90z~^(+_a)pW)+oLffGJN`$H;- at c=fAi({iky?(
z50CS~#(qIP5lAI{yvN`8Z%s4)Js3IuUDCX+tjl<01h83+{<TgUJ?MhlR)&Tq=H at IG
zqtmbCebnw)@R&+q(tK}=Ic9$P>09VQ>UQIy0iz- at z}4gSHe#BR-^*FZ%U(mK=;EvA
zt3beZ7o+Q!;GMS1_C$wayVG}H|F<<i&f at e={q>L4pcT~gE8~H{QlwbUp)9;{owbNY
zfPRHKq}sM;QAO>KRhw_;^|f&*?wR>`v3a=(m0^cVgU=0}2|vRKBkBvh3fuYZY1?@w
znu}K`?jC4(d^JUZf%X!eAH*YO%w4B~FtXf_JotSYk|#}0HvL3CR#^`Ju5nz$IXD=>
z5{W9bwwcrB@;IKZ7;b6l9(S!7-lvUayjYI5iTPY<WzOMf5^;4FSB7npu9Dl!czP-u
zPI4Fjma1o%!`*$?qEK;_MYS?&II&Z&AZ`BB*_>sU+R_v|r${UOcu9SM`Gw%EhG;Vj
z!w=6h#2khnmg9C7j;!Tk0q~X2gPYRXuTDR2&&>wS{yki|5EDa<Hyo~{*V&ZNN=)L+
zG)xuXcf4}JwfK at NE4$k7z1J41x=rcn#x-Q(w5i*unUm|2yTDFcB+q~-ro+6Q<{_Hy
z7|vboz&Y^4x8kOTAepN!L^|n-8!EyeG!}<w`7G=dDd>2xK=}wvYjUbUdA?cTwKV3d
zCJ~sF$0P*?lVv_wZzn#9tXv$aCM4)NZBOt~oAD6 at Sy}h_UKqnSiZ+Ln%m*8EUmQ8o
z=#p?jXjvSP%2C^7Gxm at C{a2DWP;-C&J}(H<kFjC3(@%;J-1S)N$0&94%gRa_-j}jZ
zWBD=ftLL=TuD%S<L2$K67mFYEqJ_FhETKnbOsdf0m+nRYg0!qmm_}uZ4sT~$PUGcQ
zR~H*rb0u7)E%g${^^p#>QaDDP%Q8iB5sXKTvByD-dUFv&*iQp09~0S)=2uVV=C1pm
zZqrYh{Q2(MMY4>22rK!i_ at FZqeX=i+lT%jeGG?>fxaS$qi$>%`?X2O;(F<0SI<A15
zZ>CH at 1U0nt3h}%6Fy($>Bah>N+nnGphg4sg_X;zQQ%7ssg>8L)qGqpn(WO8=46L
zk{y<sgX0>tk8UbQ5gkDg^)uEU5YNEg at mcBiYD;3^b*W+L!Fp#-z*C>8k5!!^($z77
z`AR?$rG$c5vx@>or9UM}q<J{+Rtj*^sw+&&s&oYf!Pl{JDVstGNLd%BJ4p^)OJju5
z*}_|0jJ=m1U?~}d<TABI53DnL?!ca^*kA6FqWjj~tJSOB)1Tt2Lw*rZrbIQA&EoA*
zt@<r_nHBHUEM{x)6})V*qN?|%8U)-Mb?fn>d9^IORY^ay4W2fd0_w^y9=^q_UVlP3
zP2P2n_?_9rdxO5N=rnxlm(OH!`_=;(ymNDZwtUb2?T;z~1LHeeATOC<V>J4{(KGkh
zM!>t!m{LUy5;9HkO1}CB#3Vw*UY5CGm;;sIMOib;l at gMYIhf<ZYvV!-N_O_h=HZEn
z0<7IM0UgOIvp>DrKkNc84V99<*}~9PtaL`&p6psn<4d}n>TNt<iOkJK-J88iEY4S@
zJ6c?{#Y#$KLAh8ONS$@;ifY<6IrOFlCxLdkNqW$DeuaQDT|5XKJkT3Jl^7`jC}*d|
zw6oV!+^1smipp#ICdE*=<Rl4^ao=K)zWg9ZgP0H`9A%J(nm|r(HJs+lNbc+AiJoPa
ziB~jg1c}8ATg697sT0OW$*~FJD)=O-XGVs1(W5dYWnn?)n-i1rWsW*6{n)=Kwb1Zu
zmwrsuBdzsL6-g;?B&4t9oaoiIt{L)A=Dn7(k9QQ9 at Z<+zq*&t}N}zM00Gus9aIX!l
zy?XUZ5Af(wcsdt%#=8-U!CR-y&}cT%v);ZW<c`l<5^3oqd>WVg8CSPAS=4pRY3qX5
zKUf=`HiqM{uvl0G^7PX9-b#`r6R<%fWUgbrjtrYrSdOa{=;seM_4ivdYR8Lz<ae`U
zn?_LPZW%0#j`ptghU_)Zf9;ok7rudw$A7uwaHUTrzsq93$V(BsHQxM!<GV;8Y*u0H
z=xDag{>i>w=Af;~pHCOtCAaa}A8C{cM=O4o8j_5_6r@(%_}=jrE0VW@^SM_#BZH*M
z%3N$OrQrn79ice6F=c~!AtXL_=EJ|^Hv(wRUW|?A+1N%ZVzkasXHkgJ#%?O83zFmc
zjUhrq{B at BnqHkpJ1sX(-R&$SG%3W=z(|n0LzUP^hdASQpnNja5bRwds{r;Z!Y@{%@
zwzO37?zX7;wyuP><%{~v%<V{(wQ`6o*34vHCoKbBh(VTES1Q at oa9hZx&=v{5gSwYn
z9EFkf>_mHe*zjYHTM&4Kv&0|`Jl~zQKHVjHtJsonL8;0PIKiGc<Ak>f2XHDx%D3D+
zIr5SG-gORJe==gC*==UNY)S^_UTeTtRjqD2!eV3h7OKi+b0Q-zLC=04<-!?D73DM@
zER?t&%KuXJg8B76*@hecA*dq^G?Sl9o`uQHk&Ogn5b+0weX_4+V~P>^vLPZ&rJv10
z9P!FG4mhXk<9Flb_2@^AC3AuaI*ydNt)g`wMn=@eXK2<jQrA|<HH9IUl<}<}U+ueL
zZj5-loLY5r;Lx9=S7ZRRcQ8 at fIyTqzbQ<t%DslS2-}f~qSObF4UR>o(S#FEX<mKxX
zRXs+Xmt?PCmG9sj_vXe&a-DO2=g1~ef!p?7YOU~4c6=g7MJ0Pga6(9KzE}%@6RR~>
z5M4=!R3D$6c1wh7o2QR=bL=dO{}oOAf!bEQJ9+YL?Gn>FuPgD}!lR*vzL;cEA7HFQ
zC<<JT4crm+k&;uAeM693f(>2Tb>#J>vs@#+llhujF}DQ|b*}-U*w}}AH1q-&s!oA~
zwv?u{^J6{T{HD1qoxw$FJV9?!_nWCXXEjPH2XL(?CQ%B&_ZS)`rP;FBmYb#3WLGm8
zgHv|e!I`9-dnXL|;!AzpTp*3YV9<~(!o9lKoSB*N;CRjsn`P)<Fn!?kO?S<M9M9T~
zd^1{KSHRQ0VLT7;9Ufj<GP3UoF_%hpC@{wIg7Zo7tZ`-b=Bn;)_B3W$LK1nth1eUr
zyoS%R^{?IZj1RX1YBS=gz%IimZGp8!v=H9j@!FOdC<p}b4q%#?Cef*I8KBJ+-1&9d
zu^)y&Y at d)7`Xopg;`|aX2eUdqaZ_Z2o(9Z=@ke8$riqfSYsNyc1Qm7ysan=h6*Cju
z6KAy-OIWUo&gO-T88Q=NM!NW at c~*+-k`Yw4A9Q73DPy->uad~sgZLtd2<0!+>-Dia
zAkAJy_oLz=wT$}d$H>iOS`?zImS at LYnBCX!mF~oWC2N9Hu-?mPvH9H{KI^!1GjCXt
z$2+`Ghb_76%@_rLV#9L}_7oXaSVxcUvUoJZ;~B=@@}AK!5Q%iGo%wL at I~1rC3IgG%
zGE56K(Wyos&^DP!Dl*~a)Kj1M6;3L!CA`hfWUW^T)yInXzM#UB*h`mn5yMbOwK25(
zdGOnY5iLVJ&@i{s&kZ<fJ#A44c6S|K=*OHmn8`;yc@^xZPx~-L37aBg&%SKJWjW#I
z2q>_k%R)!S$t2F=dDvp)n6 at x}OAK#G*y at sEVPdv;G^cP$ZgfF~J`mguHgP^aZDCaT
zAl*>&8U6?BmI6kWNI9_(L^HC5I%QKt^~>h;cyXq`BG2>C|FJi}pq#cPX7bHOWKSb(
z&d6H+)SKv+#U at dyAxOD%@~@Q5TY!97VfV;zXL>qVG}ia0Ra-~`F|nRmjr{{*z9j|0
zZE)>2`7`PG@?RM&QR2xX|AH}rf9G8F%L~D#k>Q;1fmH7-cWq_%=b^*@8L at vY7>iVu
zUC&&dq*bjq!}vWWGptP7vfk>%5{uJ&6Fs?dx^EevPpgRFdG!^0cIE5K_nHAmJ7_w|
z(3Vs|2W#GpfhqA<vDh@#sncM$GRr at vVach_PyF;|!-_hwmtJWoL1%RIZLEIxcIIYh
zA(fLNIUZ;V at 3*S#zfGO!LSm_7pP^JfsT2c|=)`zv<?8;gUk{~i7+Huz4D3hu7jBZ+
zm|gAGf3DpAY?#W6*k*Rc#9Z>Z at h~zDWT9iyMaj}j;$SBMnvLFsr5Gf!jUfq$Ruz2)
zdtVY~ilFcC(VA(`=)&&o?*e7<3bUc_I=ou8d)U3-s%>A%Bys$jngX$6j-er+3X{X-
zcUIN&yR*a({**os{tmW`xw+bSv90$}-*=$xSX?>-V7k8_&A8hAlFe{lphPZZYS=_&
z&OPs@&RI{uC)wqA9cZaU-n8WNym*=mfM)Xzj^mOTJ%iO$g+db=VCB*A1|1I;BS`pp
zoHvw2*ZOx146b#XdN-%5r<1u!qCAWBBJ5q$!cm}GTmh02#`tt~ds1Jzhl)w}Q+#Z>
zsk}z1fk^_xyhqRN;mRjgQ-A7&mw^zv4nW2$LJGsh{GTFEcYP0gAmlH2mRB9jnNB-B
z&pi4Q*;9K(3x)v&Y!?a*d at 3k7DM23l$wv^UOvJ`$c^!69Yo`AWWO-`1)J#k%FL at FC
zTc``6ekJqG2o_w{rWr+iZ*Qxwccs7@;)ZAwT4ZGXI#vwEe>iu|$wp7{W8ma^FvJ(4
z?5k>D_w^?5)6<95JC_${YyzQL{H at L;vAK24W+BREj_Q-ZG2z)w+JFqNKsBXqC2e}?
zmpo2p-ay}RIo6)*E(=)t?-dUW{B?$kF$Bccp(GfhSinHuOfVXn8ahecxb}(4)7+3q
zT>k=2f6{kcTuvI5QhzKRwkHHwSx3HqSD;l>>nqlNj)jv8rR05uDe(R`B~Ou2h%R<u
z7N+lU=2Bx%u0|G|75JH8c6n?6(D-ZgNPW*&Z<jsY;Q$1h+gpOu?E{MWAKnmv%jHRA
z0O-8Cn*VHU1q*u2LyyN!j;~HR>fw%hetqO>S+P16+cNs=XYVr^9sW0BWcJR^6+a+b
z!#S-Bty&X#Uy|6%fndbNF=-f#83sxb--BrRM%hRzLd^ev%aj{LZ)wT~1PG?fjFD*_
z*W at VrI-8muw$8I9iy1W84C`(Zbf_`Qs%<CJUq9h{0}qVZ?EV$l*nC}v3&?}fVEu{=
zkZrU%!>ucuwjy?(#H496f!6Zg0XEC2#z(ca`P+*_oiUFbkuth)Pd%#d)I_t5GtB!5
zJgf?|Stdf~NT}QLD-nV?LoMbx0RdyXv*g{4Z`5{wo{#Y!-T_Q09^sQzkXo{5SLJc2
zs>FKdKm6y9(Y3EN at mli~Ty&gE_-SJjUSXe0q{QM2P7e3;eIwbl^>I#-HoNOn5lA{A
zINOW$#`gCLgS^x$b;rJJZ?fX$WYt@;z~8Ft-OvRnI-iE1ZSQT*m<(q#VvQH;>I~*Z
z6jAvr3POBN!mkA%d_$=s3LGXorwV0SJoY0dYHMrR_Pg;Z``Z)8AJQ3LMzVu1f>4ny
z7PRx?iWgpRt9lqHAd2aM5%?j^{xAX?9_%7z-*Ceg*LPop`!O-$v743*{=B8Y)_hqH
z*}}vS7!rkSBD9yZN8W8TMwbi(W2R9fiQQZyhZGepoZo5k_WQ~ruCA2hzQYM9$1VA#
z(5*t|DZ9|bPwWq~f+)6OcViLctInPpJA7ghWTei7*ETfEPWVJm7h=(`o8fn}!F8Br
zrD!%H3Rwx)($*orQ$7J3Csr+ at DC+V87fVa4_2913J^3y%-j3dyjEeBe^cVB)G4?Z*
zd>QyGlk+pAr(%6ywvF2x)sv-bde_uYJASJ7>c^xu3O~7u>(XCV{!oaRTPJoq&KID_
ze&=ssX~}ild>V12H>*q~{;u1IHqV4{<psC>*%g?SYXQ8rh08INJ6+P2eEg`!-kLLG
zFj!8mvh6>aMi8<#x3P&P(iWFuXwX7Z2vwiUu!mpoEgR|Ckc1`v$5 at x-yB8R}K<oz6
zZ-Do!nzj?=s`j$HM}w0wj^Np|_Y0S=xxv+_-CVdZ4-(2$Matsv&zgY0AHG}Mg?A1b
zyl+PDmYD%Hjf_qmGRAc%*fyz{Wi*!cWSBtwO2A`TH&@DHRZn4RDlzP?q;lzc{EI%K
zq&_{-!d;ckn0!6fJU8}`4a$H8-kzzPnHlv{c+7B+_7$L%CgpS-v)U)i-0zF}GzjQ^
zQ^yB4BC_trT8rb><w)#g5e}+$bB_Z@{b{0M0GRDrXvK7E2#(n at G9AcGwrcUe(+5+5
z+1q2vWN_90vSVG97zAe|G#qggbec{`>j8f0oF~cRpr at vO4?VGRiNAWDH9<XlN=EA`
zwzmy6^6wUq!jAMD{Yh<RYw!hkEqPRg(+W<S2GSTI&cEWyI@)=>ejZ&#mP-F6FyjXK
zf5W&1Dwo$6j`zq<0ix}z3MZ2GhY~}wJBVL=M|=b(YdWG|w_#K4XH$J}23ELb#Y{L_
z!(#c73re2Yfba#9j$H1vR2|#fP{m!Ao&a2o?y0~=ZYqr6e467|-hg|Pf)v6B6$Z8x
zsH9|4weJc0>30VT6s at hS42A!yIQ~SL6n=aYGw$|fo7Lxr)=7~s4}S*E62J0`V!RKo
z1;1u^csLGH;3(oK)@5{)5adJ~Qb_!#FeQUj at nw7&(2s2d at Nu5o{TOIUAJgI{PAY(P
zw<*ZL;Pd9z5eD%ic2}ggZ_l2XuBHCGyCpp5gz?41!V)dZkp3eNh+1r%utcUY at _^UC
zCg(5-3MmN*M09jhfhA?c)lod4L)*Xr0VO*N+&bzywmP9YnL3R+qnirA)k4YBAV7)&
z5d{F~qoXR9+Dy+7sbP;SQRd)n>tJuiY<+fwao at y=;Y!3w;!4MTPjdmlkP5HOerXJ4
zw8UxK>0-U4YvRzN{qxx|A;is23;1R%dPxe7p)%&N-Gowo*j=`{U4hhSQW2R0{_hBt
z6%<~^N^Njqxq~QF;NRsJOCSoR^9zXCx+;-%uykJNywsu6q1P$%0ouHRR1~odp&O|V
zxwwd)#4v^ulNmQHts_03gx7h08qmeeV`GS=Hb4t%yMfe1F~n~M;K)nxFBRll;sj<x
zEyK3;C*8p6P+Xh}WDH^a%&3qy_P9mmh at p(-$q60Nc*^JdN_}R|Ws~65E28zxV at C-K
zdmrk{e-T3rEMSihW+wq at hin1*01Q~bZ>sYY^Ag0d6Kd)9)f~XUkO0Z2)Hjt?1&d+{
zA68jL(T((D>U(_jXvII0gj4rM=qAK4ucyOUw*9NRpiM&|u_rr_Vp3j+m~)*71u}}-
zD|letuiBS*E6P;mOYPrC^7S?*HV&WbMVGFOg%RjI1)NUQbp~6qhfp-KB0KfX_9VZK
z&NR6TG!qp}qFX*_r|-YV>0AmC3=f!q=mG?`+GnZ(!~Yb16!s?QF_dY)2RQ$@N?=kR
zd?rAN16yD~wE_OnQvdY_b-=@m1u$UUth)pK5v+3g;2rjj>(CwEP2RzyK~_NIL+gIv
z(Jc`l;;Dm!LXVCyE|>CrVJ^kLNKio8{K9Au{kYtwdWN_ at ANJ&Z>TBQA;|}?|$Hx(1
zc>oP|i^?ky2%*3j62$ZVwDct1bTEzo=3u1x(G58WegSQne}UX`-ZOc4p#f^vMm`Wi
zh~Lb1Sw%+>;vJgBUww!r7Ji1R+x#PavG1eK{{|zGsF-$UK-|lW3>xgAZN=<L0pTvF
z<VeIN<0R)z+dp4)0d*Hk_&d0xzba_+PS7wU8&nwdDE1$vlT#A9joqRI#6WOYQQ1_}
zEyn%n=ld*+75B)v0qa3Q^S=!eNs7zZO$X^9X7uXPEBxz&!i&(?m8XEx{-?Hy%(~&M
zK$8#Tao>F`Mzt2(elrapAuRb<VqNCF2Il=H>5Kt2dHlKy=HR`CN2roCu{z<ojOfw3
ze^WEuM#h*hL2 at X~eR61e<1!HM`LbwLOU2A`Vf1d8e{=pebwV at m52OeyUzT=TPZP36
zg=;r^0>Oj3U%!7ZgJgq4<jS)&D}{tRW032Bx)aqnu>^7otGjpb`X`xYHu7v#ul^I1
zd?v%~(q(_<al?a<<I?>t>ia`f5fR>Hh^OQFaOm-*>zg=RQ!0$Hq69avCJIHrsTEP@
zYH4WvlU=cbwAvPm3vwE4hqIsVj5T?C{(spOC99nkCLQ5KKz|A{C35seMn<kqwoEN7
zq_zSA0uoTYyu7xzw>7J67 at i@H5()w#Ev>$#r8I&HIo`w at X~O8gO|q^;U^*1sQ~BJ5
zpZiXh8LuEwQBk#n1dxNJj_pK{4{-wWC|<q#I75yREI|x(rmD_HhadCuUKM2<hp?-u
zsV&DYE*e~*n9SDwkA79v`5Ne|Ic(?nXlM%3)AhTeC<|eq)ZYjCoZF%47U~e7_3Z>Q
z)^!Is$CYkuDOnr_O{e2^MKKDXK!v|s{S}B at 7%tNj80g#Aj)#xGvAJ3378=HHxYYhx
zT1qO0IBhr%SXdqe;MxQnG}kqsRW40nHb*)RXj|jHepMnQ0owmse^Q^j8&^F&y^uX3
zUYG3U06u1?bp_N2`uR4pXNVIghyL&4`uh4dwxuHUiuLv5K<sHaa}neoRlM^tLxg{i
z6de;Y3Z%6N=)~6t9VGqz{V$M$#=?LK_$FK8HS+E4?V)SC3enp+5};)r98|ba2AFQ+
zU=ncj=rn*$ldF$^Nc1?~1xXU@>YNs*nl(s$L{Ppdce?7|5b~q+=mw7y3y|-Q)j>o^
zs8+095Uh_z$R*U0|2hEP#l;0E#!S>wxgCS(4NOeLn1+T%32S>r49v~Vy{}H$IXJ%V
zEi;kh<#gPoZOZu+_33O@>x*VSTZK0P4u8F?r%FF_Oc}^zvd<h?>%HbYi)Mui4AU9R
zj#8MtJN1F at C?&%uq3V5mZ52q^noa*sRwu&wimRajd2(egxP0o!Rh8f0-Q%c#Oh?<?
zs;>XD+6RCCD1kO*%=+sKQy^{!sWw2xPew&x)Yzy#G5NOI#v1eaLSOMr)9mbA6UZhy
zS|2|?ek9(pYhsc+Th~a0TmA8m0!4~|w at ftEs%`3YmEmbf at WIy92?H`RD=w~hDVLN0
zoA1?*I>;$aV0U+arBz|3rsAZz5m^A#V%dgMQ<{oIz@>ECEYfP$EnCK19Rpb))Cq2f
zqMh1sDRJQ=xw7Aumq~CL5>0I8YCO-v<Cw&M#MN3)D@~<~eEhRr`K=ZyN4+lwXzNgj
zrqo+KjY~1(@_Og+W)HILdfpA~P=T<E5$ik~p`Ed~#L6u^NEpFt1^FWK1aKnkt^2R3
zsq3^bJY;FlSZiLi{8w5?DIGt*DJz;A at Kgp;Q_9OlXc|)a31t3c>=O~~h#znY-r=5}
zyY5nOSem?!qNbKOI!qjC_C>!K^g1%(YqRHJDmpmQV)s0SRTa-&VzZr#!SL^h7?B_d
z at mJ(y#}7rjJvN6YPl}}zG%fL86wqk{bVF`#I|6!fj&b2MU@#_7B|KFYK76=w8ooM<
z9 at 7h4EJ*mZ;3Yn%q+K$~{G37CVtqhp+f@{Fq!wAZ7Dxer651($M!sJLpC#?qw`6<j
zt$E82PG6|Ibs+rvdp2Uv_pq=T)m6WZqqU0|ScOa>ZkV*@6iM7)t&QSgb_OmP0c;kd
zU$`H8I(ChXMWVeyZuI2M&b?J1i=^?!7xaNR60&>&Q73s><3Ha4B$#jVh`s6O-Lakd
z#NcQS5_3Iw%*_SS3D1e^VN(3x60 at 2psKk_9epB$UpuM>~;c`FxLRCHGFk`$yb=GKp
zT^wC2_C$jdq^o{5W7fvNQm+*Z_|_!8{?c`ExKa at k^G<Ok|7%Sg>ihnKy5p4%ns43C
zC~#7M|JW{T(4VmG?IU1){?-TN&14;~qEk}VyA)C2gXm&V83IOtN6TQxwPdumBxyxs
zB6%DgUYjy&%1-v at rH(V%<n_#nw!;pR4r+dbuYtm7NpYRXCdcc36d;Nsd@!m4<sLSa
zJ_NZuCAu-z*MAw;Bl}6v#Ua+!X!@W5{szATP_2wL^h2q5P at xu^bJ%CuBal877`UOU
z>&S-N3rK=Lf4+W1D~h}8WhB|!P`&J$)6QHfdCOYe+efLHK5H&5#m-@^nZMcz<nbZf
zQnryasfn`WAOSoo`PwiLwsnS#*M3nbLCdJHSa_p=eL&}�#5{knq{FXFy>_M8p8H
z@|DczE-cMSd|Ek)e_Ia9>+_dk-2Z0*>|60Q3&^9qRBTS)ii%XX{%{Bg(6Qs9#D;~v
zG+omL8`qXN-bUvCRrZx(RdsE*sDLP-f*=jjC0)`;cZYN%jnWNnLXeV at lJ4#<Hy|C-
z4T7Ykr1Y74<MV#c_g?46Ie)k|JJworuDR}c#~9<bI@!~|I(3+xSoCR?Z1MQQsklx2
z<};8DF$eJxNgQ^BjxBZTh>FVDo)6c_#<0|;h>;~?rOoUJ;K*+{n(~~*>ID?2jAGc^
zhnpMWNb6t$6k&zzUfNUy!5*{PcY9Sa*p`G~`FXBryPMR3eKR88XLY)g4WzC9Z00&?
zz2<Uj{G at Sr@p+ at z=TD!KlKLJ7t_H6Rs_EMXwDiEh5|+=(U%!x*iE#D#+`_#E(5=#;
zFzU~m70rzCEm&lnLkJIeDS4VSs++~eRh47mFzkm=m`M7=@L`d^<QV7w&}9C;@@;VZ
zOOyGf{y#JsTQy!llhLYy!8-DcyVAzA@=ak!0N)NZI86CoJ?qz8W6#H_^59 at D<BHPt
z-2S5s>1f=RsLc&+VJ)j3=}SToSenbt!VqO+`NsZj01YjWs*sxF2Z6k7K-m1WtXwwv
zxuICRJrMos>WaPrhl7=agQG4z-SF>^%3&N}059=MeDwJ7`qteh^o5F9IfCY`8hpTa
z<njFTR_ruGJSQgynHoA)1s^KWKYSVX=)}atB2>cD-??>;bL)!p>VAk0+f(Hqcg4a0
z?-SkD#6)!z1T+W;PTTPi$lZ^Q%K0&}<P%60ewik0PJyB<t!AdCnp#?{eQ`|sfGK14
z866F+sj11 at +FGl|y58r;+d2Eg2MOTZJY&?6Y_+eSb6NDN1-#5;9;buT(_D_5Q=c0y
z?@Lz)hv~T(;K}ss30 at tk0Ivp+NWXmfg8B4mLabv3Dh}fd-G-wOrWS*VPuz(dRwrAf
zt#tgX<t}@AJXGUvfL}lnp9sGT2x=c?&d$z&Z_;mXVUZsk+ at t?Wk&}GA0dP6%>gsB2
zW-EY!<_Bn8;lBUHBJD=UI!_hw!UwtG<>iAvzl~2EUG^3zZ92NTaGpJjDhDLhp`zTU
z{2nLUr;9$d)z#UDBZ&aJ4K#hU$0Ijif^4yZv@}^JlV*iKqRNF05?G8v$0&h_Utg$D
z0p3kp5rqOXeP%{RZ-0^$UJu|}(zI%VeDZLnM9;%2O;OQ~APn+&-Hqqqt{H`YMG1VS
zqpQ2ASoIw^Q~KU#V&jp3V?@hk6fS}chw}N>pa!-zXJ=D3zF at +2#&K|P5Jx_s2d?Rd
zM??j#p3>5uUS3kj!0&m%$VkPKha;<~_&rN1S`u#A;1WGTU5Fx6Q&WIx3aGhmZf+Kg
z at l8#9R#sL%K0Z_`N at Hlv(t^O3alGWPnuw_v6GyG$wc)m!DB5eekRONypR7>Nk@<ne
z(LfqcE)hO8GgD(b?+!@2iKu}u9o9ktX*D5XI?0V~z+&M2z5CZGNh2_lQok9HCem$m
z&PLbK(J9ewR2OIN0CGs^=;%G-mf`&raH>wh?o|0b5P=~e at I1#&V}nGdMyQnAV<#2^
z=_e41t&#l2O{z2AhAOT at 2nZk+Q-O)u06S|)NUqOafm+POK-cMki~y1- at zOxtB{$S~
zs+a#|Y&#cG%w`R`9Y9rqbI<{C05c$Lu)#?(_oG8;wZnTZGiMOa!C3%cTo6F2rr@}p
z%^_b!BM*jD;ZYJ)kGU$ks>A`hLRTXaIQn;WH80t-KaHdLTEX|$Sf7>?ZJqo+_QP<k
zg<aK5K>-AWEgzHDqTj4wO^jjBUmyT|Dx2e0%d-sAx^If&%)sGD^B at 8GRcXZqa?BZS
zNqA6Eb`l_W15WQ(Q@{yr+WZywfU2brt4RU=TQwU9Dc}_a(Zw~+;p~A)fxOaI^D_X`
zd2)5S2o|<`%dv-Q{o~ozQ|Nt?Kj-HQ4Nj>4jMq<;EP=&1u(-ImvC+fYdRt8CWYd(_
zXW)sLxcFca*U-$2`|ss%U`4pjA|O;hKwcVmgAxjQf58&2N9FB#g?DgxD8*+pQw12o
z9lZAu@;I1LN^MaC53pG!04<I|(C7Ng2v)Bdqh1pYW-!oJie8<nu}O-J#g6F8L^o%f
z!QCT6NE27$K-u$C;l}mXm_>5fnc?WwrC}n~1~N)OXh}Ilkw#WhGAKM8X4Lv#wU+3&
zrqo14MC1;b8_ysm0%J+j)!?OL_GH0>dhkFFT)+fs;AVR+(gb5n_4h<1ARzMP<?m4i
z!K>ZIy_c|T5EdpTD}a0f+cRudWW29;7r`=o&a}~0{06Pf!|4smqU#edP-m!#iHYN{
zv3x*mt9a504tBINJNaYrXm@^gXo!iKnfV9$#pxc1%7R;41-Ec1SOE4ivnns%YQwSU
zg8FV!WCdvv{-Y;Tp*+Jb&$Pq~k$&#(UV~dQDhvc^^2ylQ$3{j*gz!KuB6}{NZ*@dL
z+7$UQF(06_y%+lW68Q=o51+F9W}C}+&$|tcHEKT<4?aVqnE*dFH+R$QCay_?)pD`h
zh+Kg8^6ihuf|oyj{;c#k-34O?xV&f+5xmDcl8ryb at etD1>f$Jj?k}x!;o~l#`R!Xa
z8 at zb&0!V9_zpr>=XJ_Yk at VeRk7+7S9#NYe-Wwo`Zz$Aa6f~$q?hl2 at v^eSX2)BuPv
zL3X`}o}h92X+8-S1)5rP8q7doYZ|cMbL5gHiZqQ)O{;;erwUG=2Z}xmN(e#&k&V_k
zf3Xx>z6M}3Nw8C=qNY|z=Bd_!g1XtxtX(T**9+~MP}X>0Q~#|v)|3h6RAgd&G3_Sl
zm1}MWhocZP&}PG7)JY2fXm at +@dVtt_y97pF2JU9P!#a$#IXM{zW9)byM8AH~$@|b(
z;1j4FKs1tL;!mE^n5O`yS_xg6NP@~dDiCjR>yI;#WR3~Xs||^a98MSc0Agj>l!Bnr
zXCHchVPOG4P2I)98 at XnuOHx;1=;Ps_tgI|RJY<0^+1Iy!c&tH=8}%@v>+tY!w#q_f
zZ=qSE=r!OHJ^~pNuS%JdWwle~Iwxh at uD65UOY(wS1$T3EU*r>Yfz{P?JfV%{N`G}3
zqYPC{QS^Y2eo0Oi5f;XU67soz9~_j=*9Gzk;z=x!cMc8&Y-VVyFo^8ASsbCu&}6B@
zQ4N3%6zFv+b}%t8sObn=jAQ}Yk>!wqr8YCryqTDo03g+s2NmCdM#Ifv>P>fHwo;}z
zU_+vzqf<5#3V6B#@;#vF>(<+^f{m;dl!P1)?jba8BpF9_dPx;W)_L-Jm6a?{_NzU}
z(QozckHd1(X7&e417KtEzWgoGs{}OXx(Vski{g2leo?1-Rseo$1<fA1NnEP;xdoVA
zpvkZR*2daEl9!j)?|4>(vJhe(s(0Ib)4q3iXJdE*1rjg*{F$1buC|@mdj5o&-q_f<
z(Rs(x&~Rya*&dhzEjHV^mnWHghq0o8q#}XL^ot&Q{Mo!~>+9N at nk)p-sj{-NSVIKY
z$t2{sy?18*5upg at d4g6Bl<@$qGm=}9dbY;KI7KWcwO`}(Y5}%XxE<C!uZ}1CWvZru
z3f*rp8K6$_GAGoS=KE-_gS|M|j=)bW2Ee9H+t~@<_TAmwj`tSzy^ujBhJ?ybsUZ^|
zTDDF!Q}I-7Pg>OImU0V_U7ufQDsw>q&P(v-(xKLNUeb}o>j*>B-%^S!J(ZZ47^toQ
zt-<R*KO;1XwZ!Oq*cZJ{=LeH{9~1HTryC*o>K;w8IK=V<-sR_Y`<vw;BO?<J#f287
z>l1KTine_hWtMgUshg9g8<z6)h5(xx4&XMK4FI$73vg)-;($<AOyWykUKRIoP_F|C
zm8PqcS&&sH@%}^VpdDJ>cd|44nDFJ-^+T2^N`x|*<7XeEVyF55U#;$s?07`}^-Fx7
zKq86&W}t782GGnUs?6vFoT>mX!HfC%^XGnPt<N}U9{vkC4Ao-H+i$NZ&_<AZ+Gl4y
z`aUxxaoQLi;8LZh>swGZQ`q4EO*|l%kqS{-#TA2=xikQi1FS^*0$HZ$3Q$i>oFk*J
z%nS>YQ&z?-J~}v12E%%W=ax5U8+o<2_%u9{?H*WRWWez``TcwPH?kR_sg at KIi$b_z
z8w<E){5YY?T{I8Ze0)yFM at y~s`OBTQ)DI*Q<h|XXc{2cDNe;vei?wSPs;%Piq2^-L
zg3%r3tfs8RS#jp~WE0SQy=MTZv~n~z0wBS at v}povet++O=O;9$3u3Wtj13Jror?~e
zJ*2FQ7XOvasH#c at xi&*fOW7@$ss-o%iJsw`H=sf-C+c5ogyh;pve8siqwYvZPTtOH
z6m*;0;K>gO$$U-tEyWQS|0)>}=}jBc6%#uUW>3DZzm9JZrq7X8A4B5^6D1?{2@)lf
zR*70ogUzTYLE0h`!d1U+M&=cb^ZNQtTM4WX`ZvA6m<rMh2e8yfi<YWmqE3bN^c(A<
z)1xnP^cH7OKP*5gTZskKtd+_zr>&M3FJvRa=I3i{3R&O8Nh`e8;*^rV{{8!B6{U;-
z0Gk1R9Vjh7Z^y>Ua&sHlTx`AXA?tFwS;hJv2 at 7>K{<W7MC-dr!mvf5xABAH|<je`Y
z6W{bT8;P$fY^+nbsmpbN7^>hM+^3|Wz$_;`q6ZWIsSZK$<`ZJ4vZOQ~kBApVvnMx1
z;DSkuJ#1)kFo=THUL&Dga4>a!6yyijRh}7{n at d`WM-X>+x<5SXulTER!5h*nb*phf
zcBawZ<}4r2?2oOD2lfBp5rMnZQIt*u9+mDdA>mR4Y+HbJiG{sdSm56O4y#m2q|3h+
zKYc0Q%&3+8oCXkaybs{X0eTbu_D1J|h%7F<&b^sx`^!I2BHo&Gc&gBRk##mJ_ddWj
zF3nVLL`BK6elIh;!fF%&$|cjs(ibuyl at Pay!R_w&0U!FwyB8a+-X8!J-M5QtSSRy>
z4JukrvL<*(?A%vA^HZN9t@?}VhDb+JrKHm^=>zxGqLLQ|+z0e1rF=Y)m_0xH@#-N1
zAy1Xwb-TCGGIV#IccC@)@?x*+OR@(oHkw1o_WlyX!7~71T6;F#6aAr^P$o`Z!zrYw
zjM-}-vHl~FhxzjI>l~SiS~F|%<u-?<dEBSS!@KwHCD^5{udUH}b=L$63xY`XyIa at x
zVk at AG_#vYMDt_yYH%28ZIeAc9RYC%7v#5F+2a~=TOsL{BAh#CjoYjMk>TESG_2Oj5
z%z93;C0aksAdir{q8LD7w6zNX-~sSebE=|KomID2?8bWwygYbwqV?5|<A2gLciQi?
z5p6w#ry-sT20jDlN4T+<ZQDS?Ut at 7nBNmj;Bs2vwE<B|VtUy8l#&n?h0HXgt7!K8=
zEYZ}DjSncKc>$<pm>3 at U`)Zp2z98mpluyJd(RYYzQ;C|?0>u2(^n+j#gFCvI_{$tB
zI1S^7XpMLBt!y<sz(#nPBMyHTfl!4U9 at YwF8#8*>o&haK`QDw4uk- at Ec3p3O72Hig
zZOzYsQ$iHiahn;{D&f2hIwJC^CTho>6QHt17%`v<`O9I`;Uw&Xao9$DV#l at dN}muu
zqGo5W%D6p4^?!nTk_A{$UyY&}1~Ds}eC9j=*1C<gH5wY)$?m*%7&R+9yXqmGE{85}
zHA1zB*bc1V;mgwn#K-^*`5X5GEBpoIX-AIBu!ZeJu(>m7Rprenh(eSO>DZ3RU_YVE
z!GVQiU{I<9Qm;p0VSSq0-1?KoPAGJ#i^Qks<Y}bASd-Sbd>oimlHw+=ngiwp`!rOk
z;sKXPM!Y_-X<hwx;)&_{KIfac;Y7TN2?^ZX+>}&QBZ);tFMzg@*-sGZ6A%!v^;Lz$
z#l-;|4$S}Q-r`WvT%${Ab2ESO(f&R&E32|f7 at d4G3Ty-u>A36{N1M?}NiwJ)qP77$
z0dThr4M}@4eQvI+Sb<DzZ|}$HimIwHP-rQop-qZ)(;dF4b)kBz6mvs@^Mp_66~;Gu
zju(#`yn{bV(BaeJTP)<eWlIqUn?2Ohyz<Fkdhg<F{}A<V$QOt&Sx~)>*_EogJp+;y
zg?A8jeCv%%a^l2%vZ1r4!E1rN$-`xi{=u{4`8|&mH|Nyc3RVGu7T`Vi|Js?UmXVSo
zeN&`UAB8x&p$vOc5S+;3^YUmkG&Ic2)YM|@>$wvGC76M#hjET}wWU}eh<6$q8`&Is
zdwXF8LJ+`RQsT1u=NO=XIWnV?D|{F at 4*@ZH4-AY2VnJE-h;BN1dM?|!Zay+{P at Yj%
zRyNP6t>ua^n36DAA?1U|(@**ZA*4VV1gsB<wzu!z0qzSX8yg5678Y7$;uu?6TKFJ_
zzl8YRkJ18aZDwJZ9R%MTM%*t*uuF!OJP{C#G72uADU7IkVZ+ZXbpN5V6dfZ?71h8<
zXr%_^>1_e<XsIUSWkECjPu%e=%{oD{nT6tp14a<>g8P=z!7UqHg(nhj7;U!T!P};d
z)^{>BgR1~je?=%)bbTIWpFK8lY%jzo_a*TcB at 3SHQ`717zsFryIu<D?m6S~;pKV}n
zm!?9GkK1N%jZA^p2g%3|!<=Fm+hvpSpoAoqMf(O=@KXxe<iBX at ouRyb7cFaS4OdkY
z3hm&(LMD%o(O9s^8i32e24Upn0{}+u at 31O2xSj<|hV?Hl5@{*6^r0hhFEW@(HD4bb
zU+g<XrSTc};Xc14T%C-0V{QJac~o<;(Hkb at fgqwz^l_QBf?ptHhda_ua=b%k*@11y
z>(A=Is32TErBw^-T4LF~RX(4t?N_YID4+Mtk>(PYN2&Cc^a#bVe#tlFFPcB3d<abT
z94F#h=Dc>>6~bG21dHkq=xy+#CzY$=G{gD2Vj6kp#KOyoiG42G+H1|&!wn_khbjfO
z$t at d=`~ds+`jE8YnhZ9p>=x2&gW at xFigziig{XB_p(F{^)XgGpd^XT7AP)nwG~h{t
zY0ddYC*}HlEW?ldetO*7*JTiiFO!lRSK;tJtP%U67)X2N7>~8!r*Rw;tZdx_^C2`g
z$HWj(L!#hZukCsF;K^%wc`Y&)he5RPsJ_+2aN0fr{W6)h=<}hHd312=LrJEWhuRZ)
z<5EKcI33;9pBeJA8g(}T3s4*`<(xRgBhGNV?zYRvF at PEYG+M+5eSGM$ijFcTyWR$t
ztY+*vn=;*-Z5jI&-{z-uL<iQ^n2%*3mz=(!J3bgCF87<sU4c1!-1!I*TzAjXP)qN0
zyCM+ne*${v0U%8WLAQ2VoqrpW4ze|4sXQZoR7M{11tBsIz@>GF$<_wrMK8W*IHI>O
zUJGz`h?b-P;xZuR2WF at sHh$DWz|1>0p;1_KlKXs_aBcBW8^)gVjda*Mmy?zPHws;C
zLu1hE&jTb7%mYis%FnOM7+0un)LSuBc#QJIY>jZjGYFal)9~}%Fkt;rJ%w=1e%{Aa
zE-!xt^qsss`OuTnJdQSAL?dzOK|dwY`d&AleDL?DprBBs%&DqU<!F2NNF_$kjc<W1
zmL`eCX}AfNm=?Vs9R(K7rG?}1FYdm$p}dkomO4zd>gp0*-U8d)g(fGpUlMoF{y1s_
zmb5C}KyNP{9i4L6e)c^K>to8CK7Srd_!AMP#;lSPdVRhX at r&%$WTe5bV#SRZh~^FV
zMT~5^VxD-s%`c6IITuz=WAM}BXB%{e5sYlx4JM<$iFv!JEZgX8<6tjr{yrnagtyVz
z!a~2Wcq%`72S>li-qEqFx;n?FR9}$OtHJ8xWI}=8wAHxl!V(hM7twV7>j$UJ3*ZFM
zMtVY<+;_A_Lh(w7c%}eoG9>t{Fx~vCueT!wgVt*_{3AjK1eM%y!-%&-DaRbPpC9#i
zbyfP@<XT+!Cl~`3&HIE_i&16w;PAJbBl#}7U!F0>3zZH4GU=`2uYJ7^L$|ex&pZcQ
zZlhDnFM-_xOWV)T;Z#H4OA>hOJ1<zjU+lGJ*FU4&A{Eh7q*=B&9};x1a0g&#Q&Z}}
z)Cl*rgj^$ImrCuzlEKZ%(#iWI{Y*@P37^V_Mk>^7ZM)k)aDy8PDukkDbT2}WkG>Q)
zyu<u at eFY*zmp8<77G9z`PL=)d>+8 at ik0(VjaV>!2dra${-a&z}dWR1Xh`Cn0{LaSk
zRUjtX>==pJnvMkAJbleW6!|vq)!{I7?0tQ<U`;6`#~d?}uzBej941E~j;wmJbC at W&
zm^?p|!1n6sm*0KXwebK{eQM)Kw3(Xfu?EwcqhI64Z2>flQ1kg04hGg<R_%eccuvXu
z1QV5S;+B_<-TBCV;-J0D3bB8kTooy^wPXoXX)=D&A4%Q_Qsd&M7h01UeAhoCmiiqX
ztC$!p%*>?Y<Kw>r72bQ(#ZuY4QmWe at Q@v`eCyL%xeay`CTQkdF7RG*#it4bIfSdWS
z7&6?Tx%L&dUfwY3^28>boZeV>1jT)L<P~YAJkak8={Y>g{>EsF3W0BF1CV+r`oqoK
z#+Iv-6-M1{+XcQ7HD+t#++QdRC+n&8S_EeSlLmP$!ZO$UB0uIEd(TwYCFQT9sDQ{s
zmI}Ifp+UUxI)~FQK;;ZT#*%#}{H$T?K0wF_BUPFYXKjw^S{U_2(e@)o7!V8ezjOBX
z2G0*AB`ue2me<8jPP0d|DuK-T$xgj(az!}>%R8T~2?nsfyTz>uU?Oef$RdX}HpNVO
zF;U2Xo12f^j$#JZDTu!x&@-nD*gpuQlhv+iasjKE#3xH3f%Uxkbb&q1fSDL<BM=Na
z+<ZrB?RV)qdq2K2&}=M%jkiUN^Ua`tIMJ+1y8B}baW##V(BaJcTAJ0nqq*zpB1t#r
zu|4CNF+g{t)~ppvD8Q0*VnRKc*JXb{er;ppD+(2vk;h~Sk({jTSc at 1~V_HZK>w}x<
z1PeLQ8DXuz15q7rMS1hIp=obpt;+B8E<&vjVD7_ at 2ev8K!OF_-jF?r^^=U87N-GNE
zlP_Q{vnzyG!zVXJR1>q{d+BA>CR?__<rUn?lbC at XAI-%o26$6C6iB?5(15uqRnN6A
z>#N%11q<yBP<2s}cFI=Y25(`)KT?b$%LGN=bIi8yrSzsf=M3--m3rDj&sw4OS0n37
zk=!VDlg}OA)~_XLV6KK|@TNp*#1firA(LUBz-LJcAd03le+(1K$&ugvXyd9#)ugH?
z;9R#O*)zJU>ILNcNTF}h;i~wFJP`#XojgO2t#;A6#$N9}OMSV#pV(n9I at MyAcP?xR
z`yyOF<LeD$%9YeF_786AfhV{n%HE9XGgcW{t7T;hE>XG=KR>n9h at RDhj~^ex29c5m
zyf#5<jq`J9X=RBNd<8W;PZ!N<zCYw_R at t>3{hCHUF;Dh%Lv=4nL`K2(q3V^6yU^+b
zb0>VM)3ogX_Aa`|sD}6x-wxRSGm`sy68f0DnsZ;W)KSQdJYUrcz4?|rTlx)|eeBL9
z{*I6BdbmFeYTJuIy4D!J^PMugE6v8T$6YkGSp3D~Finc at W9iy^BO}W7Iw>Fz{`Be7
z3d61RNL1ls at v@&iT&tL7yj1;Ono}oNS<hG>j_wLW(k(t>i-j(W507dAbS3QGcYW98
zrX2nHRmfB!oWvIW^^IHF<k~sYtIA2m5ww)%oL46$+aG+Q6~6A?yY~5c%7umZ at v&IG
zIJ}^_?{93vstKG;6B7!DcKI{*G*Xm<1z{<+ZVw0FmuW8**=eZ$>-$&_#lU at ZcjuYU
zlF3%?&0Ru&HI+jY!`?19jluYc<`EY9#|L78%OXkz!*D)5-%>nC^JHX at HSp)MC&tE#
zov~MwzHB(umQIv#@s6hZzx>2}5^X+Rg(_Ry$xY-FfunzvnchA|{ol*E3!sR=(~-<i
z9kV8U1Jk&IRboJNBciD09YSqU&~huGk#-NMkpdeBODo#UqH~%a8hq>jp1;*rA~fCV
zeJRdi at r*e1V~tB;Nz<*;L>l$)Az4tz`5({r(f{&n|HQ`pZ_k$KzdYOa{b%izIfIcl
zy79YI(f1i8of8)&Z~bD7ca{yc6$HjAZ^W6YJ4<NzaFJl%If9}#9cpQXbFh#4G{q<`
z+_^w_LjJosmlYyKusSUH&pW+2-cPd)GI+!6{^RYMs<hVIr!D&nj1n9N!;bZwM_Hm-
zMvBd6fDwj81iq|&n++c2z;?FwZ4iPcp0d8)o2p%-agCK at 5Qhkl0KOVH1G{}*Nw+ at 6
z9wEL1k5)wA#7RUP<b5(`&7~uXu76i5oKC~QfGv;+T9Uvf-?=f5du<Azq+VyCju8Hi
z<W9y~JjGCPSRX7YjSw`+7&deJYKGCBH>crXH}*#dGNBbr;2WWQR*brfufW at NDdg)>
zaAD at oJn(NbkYNWhh at 0WbSr&{N?J6~DNC+;&pDu%k%W1<?0evi|wu|X>G9dBP+DSuD
zRR-OHuP}C2a5+ at Y+ZFLR3utTvZF#Hj9^dSVSNo{7P=6V*^^3c!|A0vOohPj60K)P6
zHo at KU2W!9H;7qW5D3&PK!*Gb)dlUd3r8EIo)vNt6cBbB79Ix6fhInH;w~=SU`d=_u
z?3L=qyCr8e9&3jibZUiLZ)Ko_=K9b62>8Wl635#b3!DD$FA1Z0d^m~;_?*jITU$lR
zq@*SLr>?z5^0F~(be7%aqT+dEY;@@vX%Z!wVJ4V4)EKu>lFAj-IDngqbpL)=M at P3w
z1 at LqQAC_EhRO?%EF*coj$~%$!2A at jvcd~Qw**x5V)u?JZ>`3jNrU{%L9Ape$mj&h?
zwK+fFx320_YBa%dukibDrD{~SZ#OKx5+-mrxX9qOE&WGSXDR&sIJja4JFa~_A3Zsn
z(bOeAQKkh>&3RO8?Dz(cRv>IHY)R=+-l4&>BEGhtuq_?`zFs1_mAEi)?aJ!+gQr56
ztBf-)<TF}He=Y(Oeygkj#`Z{%D>-T{{e7h*U8t4;T!07dM|>6ko!*j8frAGiy at 7&~
z)~XuuSBj(9*xoOk#^dMBvJfbS0Oj&4IY~)h_zCigjaP;(V%Qak`C?L1QW6uTeN0*L
zZsjy=>OWuJqa1LEay?t5!FmYS$UtbPkQ2M?d5C>`R?$Ru40>Q|eX}0GpE)?v7KG%u
zB$LsDusa7{rm%%v%azmdJ-Ia~#*!H`jmkwMU8N8(83+&-T+ at owSR#2Y0>>$%Jj44R
zU~}|DHhS$({A#E{UiT>x><#cegvWdQC}0gvQI6P~EIZi2T(C5xacaIq2+Q^%$<H6_
zHy7c>E&d6Qa$30*ZV+Kl6VG2mg`|@B?nL at 6nQ)ePRWpGY?QTMTsBs%ZV2b8G448uO
zYfc?YrPG8klP;cs`oP at VX;s%>5<ACDu<6^|8ccE)ClEZ<r5Ct^2k>j2<hEe+J2d+E
zs1>#)hCovfYq7Uu21%!Exo*RYRTwhpvtzK}BlP3tc#EOgAj`a7BjFQ;`U(S&w{_o`
z6KVPcB7Wo@>@WDC6e?jQ at C_x0hWaQB2yi&@%i$K}!}dd5?D1F^VC{m#E3=%9W6>uE
zK1l9#Qt}Q+n2h~Vi|U_R^`VP+N}?vncU;G5{3*v9+yMh?LV_kmH-ZJ9XNO;@H}xG*
zAB&T|u*?cOFxWn5rJgOs?ZVBvJvsp;Eo;p<&zz at u*0DMJUZK*vSJ0VNAN<8S@~$r_
zjrk{XSFmxSMArDkV#r=rj(%?{m0Ha%EV!|}HVYzj&{l$}Yx(k=6?)-8C2e$voAk+X
z9|IS_AC?tRx at P20A956hsnW3<0qdh2g{c<2^P7iqK!uGnXy>cw>rB|4C!-v4=n at n}
zlE6>|c at mgI^~5A at 4tom(Y#DTuM)w9^>}Rza at s_EKs!v21!?31>8l|Aj6#Mxzz9O at k
znHjjow3O|r_03}t-GBUg at J21%kVpitwV^@F;W~y^<?`wZUC$4;k(Y(!5k<4Udmy$4
zH>~m;p`e~jpu-GuvAsh>u;{)_CfcFD{6R=85xT4G_^)_yo}Ib+O5h~|rM5`v?EZcL
zWbwW_*VNRkudCB(a134p#qRRyMOAh6ioys&?x=*b<q#%I-SVcUIRGisto!p at K?M)Q
z6L#Q<1K5D=ogH}E2xf*mcW|YTV8tqK^4mlh`#MNFfhr<+#6cnJ;N*mu&z0E+-R!IH
z9a(hot&e<=;W;}{tpm;k2v7l76&99*<1EM5R`Ud6UIDyp{HA)bmYSLxh{)?38dx1R
z^Z_~rGw=!2TsKmJ+43U$S4d+cFI#R=5v*YZZmcfN)^Dco83Ets8wEG2K6Vp{bPWa0
zkBme`2~fHhLqJK9yVanoL=u2inAxy@;}w8QU;<AH^Grj?TWHzSK+Mpb2E=CxFXAnb
zHphCLLCo2}BhEHlsnGB@*(N}i`LP=Ssss4QRJ4Z&2N@|T1I)Yy)^&-YWf9%oQm&%N
z2+TFq#$mO{hx>+u<;M3xq`$W)m>F%%{`BhR+O{y)XS&AS2qZgK9#@Ndt3lru<Kp96
z+Sx4v(D7AYvm4@}AUi0d;(uq1;eRvaY&F^$HKGEDk)R}-;C=5t4}iv0fB^XC&r?>m
zP3M%)<rS9vhHd*%QCRB80s<)j4|BQS{_V(4yz|r#nSZh(8)@J%+9g-z*Kndem)*H^
z8JxzvJfgc+%-Xdj6}7cH)0L==A7{e-3DFu~4U7)EPb8X-=45AzbC2in=afL1&h8*A
z7dLivY&*Zhd#&dkmF#f1_8Ujfm5PhYzhWQ6o-w6%i-Sh`#YKE#n;syfvX(zR(2``c
zIPVN&*VeW==uPI$RVySX at v2&xC<ZHzACyHgX at G9TG&VM#l+=CDBjDm<FW-_E)1G-7
zxjH3$P1EYLukQ`$YxYB5e3a$)=)@W_QKUq!uFUoOT<yw?snEOnJ;{sG;OP?jDY8T&
zkxy+irgPozx+IJ>j{KP^6 at z%UJ&1y5rgl2|3onlRq2To&qJn_<#Ke&=zkhzH;7*qP
zDl3!C3t;JaXF;J}cP9$eLhe5{5k?eIH_&r(AaGvkW~?T9z>Vwdr==iqSj2&<_6^A6
zi05+Nbjz3U99vT at 5<LWq6`v&H{&%m`iXpMZoy&yZy|IY;i`Bck<b;F`N~?Z+>1R4L
zY@?+LsVQ-c-&EC1ReAv;^^=*0l<L?c=ava%Y?(gw#Nypc2&r2cWO&nH3f+>QXrOXJ
zC+*D;<NA=q102~w4?V1%@2 at H|x%T*51euxsbZ3)Wh;@0VZI@~S`(nPd{6`jMCRf4@
zF>OCQ;ygM9lb-lzEh$3HZYP3>7l`cbgSl<JPJHS4M at Gwm=P+pdd-_1Zvtb1wpH;E4
z!lXtLx#{@NyiXnw+zHi%bTOWsp2qzv9i|h;5{P*ZJSa~}jUN$C3As&obYwZKKf1X-
zwKrSa9DN^Cr(J6+#T1DhU#dEg%=<nEBv$I3clb)acpt2sg7gUJeWONjcKoD&qPUR9
zsbXh1v(l2h_19_R|ExR9fJe`nm{jX at DW38{Adt(;OAw418yT6f!ZtHz?=FfkeY!GY
zzYP8PfNf!HcrdimJ=7!j){7uKUj@{3E=l|(Ob~pj{B;<Idb>jjDp6qXmyO4PgyS_y
z2W;mif6q!pNKOooWq$ta^-JVzdANV at 12=}J99E<;#|%F^yAfcLiViB!3HjYx=WqcM
zc;!T|Pbwax8Ntu4O6Zp%!UFGEA{6~L^ysjel;j-I&F;bL8}3+;hC<han3XCyH?n$!
z;XYamt}sOXiB0zW`Ev>iQ9(GkGiNEjsL0>ne}DgN10Im1M|*O|gjYK8)k4xVH;}h3
zPfpeaAQ at 0^fAf_nAu;h+`7^O#BQcE3x=pw~;dfO+^5`Cbi`q2f1NlcCM1LFQN5)UD
zdmcFt{($-cB&F>>QKZ4q>yQl5@{Ay*xg%mdn4x5U&_#pw5vW}yjF^Jn90e%<iLTlQ
zH)m`2Kx)kNzkdi9JO at 8iRaI5YctJ;(5lV}5r~Z{h%)NKWB!<^S?B-9{6mcyAudmLx
zN&)!*&_#B(w>`I~SQ0@~DuByqf8n{*h6MU_m?f(JJ~^qWtlXL^{|VrH at d;qDY|T{D
z55RQ5ft4fvAfc4;TB(D^*8Oo9Y*QAxmzKbO9}V|YYO2E1$x{8=ni|k=rw+6R=`jXE
z;Ov!ux2KARh6b^aXFjG<tL6hFYU=6$djSeX$(qf;D$>%@t^@+GWRyXNLpUttV9$cJ
z<p9{ogaoj~tgWq?;1feZ at hKv~7W5}!AOUod-QB@{T6%gv1K386co=8U{Ui}W3NWeh
z3GBsmxX!2m&p<%{kDY{=Irzv5i;Cs|d;2gb6mY6R4JbVUAb>!oha at uc!+sEK>V=qZ
zPy&NOLIAyl<Uu<i$c$vm^!EeGhlj at nkS_=Lx&xHJ{Cme6!+y^eYHUCo2{8V|27|Zo
zONOz%z;wXLXb8Ulzi*}?6RQb|J^`U!;A0*Z0A#z8R`R6MxeI(;Pe^`=UIYY^VWkw#
zZ6|>EkHFiveMmiF8Op!@O>b>Qe1XR0B5-9I1P}7YJ$zj#^uZhew2+%Hvvk)VrsrLR
zr&oH6aqS=q0Ru=&!<A(&GFEo+M1|?Tg+7ARdz|{!F1Qc&_Gb9pJR&<YXx$f<@VS}v
zXA(45j4N%y*Y8W75FrE{>tWExa%*ytZF>{-ftXFrbQw-<cuD at J)6khW_rvq)TE9iJ
ztLcM|knyd8Vo^O_7c&b at o3tss5+V=8seg}&5dP9+E*M?L34OJT`KOdt<1OMt<Z#+4
z%KW;t?}_X(Y=e3a<Y9s=rg*$HlfAL>{Z+N6pWF^paK<x(k at KP80Ck9m2Yn}tUR-xL
zaIZdU9U<zeTp^Bj5CMOY&}Od_mK9id87XmCNWTYKaD_G)d}i=)>xqhc9`7D>4^d?Z
zvQ(erj+zt9OI3a&+sR@*@<K}B>4MSgnlAM!F!8 at 23Cz&+>Ba9mDKkd>g;Z1n?nh<U
zN23}A1y!C?K$bIGL%WufgtI6~w#IjDdr@#=csN}5M_YhPf4}TQ)J4;%z5=y-7E&@Y
zhb>+<3d!z$U0vB$lbiq+=z6h(10<HZ*3yo*k}b+X#$C at nU&Z~L(9BzDxL33Ce0I7T
zfMbuf?f6eG_6q$4$wv9)2iVlY?oGCAm;;ZaN0uI|&-`peSz#@n%Nm!*a!kdse~52X
zfYcDVvfr+iAvbJPmS>UQLx%&2%~)K}dD8JKUlJXYezVax-`o^SE1P*pO^?6oA9B`W
z((E%mJrVKH4O>%F48lvENo);W>!miFx{^}MrH9WaBlCzECKEo#x{Y}9a1tav3&CkU
zTD&P44h7P-s}CPd?pppyZr%KGq-deyAbV}O$jr7LZ(FMSC at A+imi6ODwYcJcYlh-7
z=xg&XR&@@oK0dn6CwK3EaDM-O*ODn&u(e}uF2-KeboC-3!LC at 7E$FN+ig~J|-2FK1
z-Om)WXjIb=Y;V>^Sr69*6=(ySg!4Z{#WXjYnr~1zmxJ!DIay6o4@?i&BCD#Gmt)ye
zF~1}wwU at RswtAlF_O`M!C^BnBs1)aYdvB%B2T4bZjpZoKFdBH18kSbnYqGx7-YAza
z@}a`!6?Ejzy=|lkgDP9ggOxX35kBW5l#d^xip5s26`GJjhVhjX6(R-Q>=|`UQ|L<?
zaEFf77<BHe at L-N-uJWk3oGzH;IIJ(^#QU7B)@^K9Tyo%6TlHcSlD;3;Y7GV`_1<1f
z<?#HHCVCbpdB-o5)dVsaC{_ZZAT=;;(V~>{0#StoVrYfnSewTgEfB4W(=()>bp}mg
z>x!hZUDUI(nx*5rMCYuxUKB`7$iWhE>2-YCd&%qJeB-qBMa|BBx_G!*(DZ4&C#~sv
zoA6_^wdu-`4gCTV6b!V<clMOzDPF%(%w}s^<##&6)Yxx&V@)Zr6M=NWVRV$)1FX=s
zoOmy#7PB=K<gBqGH*wh2e_}oCG33yDSN*N7gh|`=ZnqP~_ON~OCR1yZ%psGWrvz9(
zq!0|;*Ts+rj~>}V!nrwJNs~Q{ZZu`(7;i&DAa)x%2uY_ynjcWIG)rLvR4h3MynIJG
zn=pYDRq~zz-R}M at kA8qJi;HPm- at DPumH+Ir=bd(TnQVz!W$Mg}iqrCy7?UA~F7&}u
zLQY%4#6+G(HwP7Gs&TQ6PaB;2Kfn_1>WK|?J^2P8W at GWIwAdrgszZ^OB_%e at +d1JR
zsiU&@cxaa(!)UZ at i$i<W_@#9-Mmm#m41BO#cVb>Y$j)F>laLU+<}jo6P~5<v`e7%4
z0fSN>Dd{V!Xj&|g^8A?dJU$8w at 8S#dZ4mp at 3e@R-=`c^06sHY2h<3yP(M7q`Uqrl}
zdHg at s85|cS>H}@B=;$WO6eK-8b!bGq_TN`djP)>q0tl&=6|*Bjp#*y1`b#%UX06lJ
zAK$|V1X!o<dPDQZ4Wgo}Ck?)Q;hCht<-t`^dD^?_?jxtkmSuUdT)&*iaHv&Us)a6Y
zg-{>v&#zU&wpswq6I0NDqM#M2L;qY{+($$NEoVVn-|Nf6A=O|DG6t5BlTublu#a=1
z5+^9NIWgik%yY6>0GxDEtzGFrcl^beiVX)+bo@()EB80&{iCeFqz=!`RW*5X94bq8
zXN41Kk3LgngS>?T-OH$52<@oX?*N%3&S(9`=NfvO0`D^Jt<tWQUxNq~)!J`~TfW4k
zqq;O-<w7>)@`Y4(+5S9>vHJmPU=A&kLefNBc&h#G*Z0X_mgk#KfrSL6LSG4Hc7BTy
zHb=?zAtq8 at AVV2(ojr=dh+9mmHjgueJ&6 at Mu~n#52U~yz5`9iN><)kSZ3VBY{;bIj
z`Q7hgvthOz9?e7-mo%s+j#Q!ybW;?MjR!77&gj?>in!&LWeh0X$$IgTWe)j(1qKAs
z{qDQC?eSB~K|$2*-1k|@QDw0}%|V*b at v!im+|t8C1}BbKM_*|b2lP1`j7cmmdZFi8
z{`2=whpE!D!7tOLA|KS9or~A|-vN$H807DunGO(F>n4f^01NPBhd?{iphQPgygqha
z+eCF_bp2 at 4c($pY_JV=6I4L8v$!s7^ui2W$whA<o#!3bYL8QR!Q3-tsEpG9o#t!ea
z*1dm5yMp~V!UuE;`-~-q6JqgIB_xFyf`JJhIsitchzH2v?(XiRBgX*YVNt|PkP*R?
z#gN=!n-5ZW3K>>mK33cy{!}6Kc7JPQq?aZHTDsTAGz%Icb##uaXo8k5zf at T3b!_t@
zcAB at iU~meS;F^vT*JQG{mYvAM#H2|3-WJ at 5#{Q7}0<Bh?*^Lt2S#!>t4BS^Ne~zzq
zYF9z)9QiNtqcNbu^=ogv7MX%~;IWkeqH!>O0ii87pXr|{h%V+sCPZTjh{be8JuutW
z+m0(nnJ)sHTUM~?=~2s%HB?g}z+s48uaEvM-Mi1dE^xUr64!W(!pLCwCpVM9FZ|E|
zs<%keECA3J&`T4Enm-N&_`=Mcz=1>hw!wSI6=VP^{9TSoxD#{Sv&K6+i^?SYy&^2G
z>0d$g{Tr}8G1SQeTzX--LmHZ}*UZ^?Z^(<pJC0LaRj2}xe>KcSQD=uGDB$c)MJa3=
z0WgM|s_OnF-!n-5V<>I`iPQV!@hu=XR72bLTSj#Dsd=-Qc=zx}io4Y~vLIh&66fDi
zy2v2#ep_E~b*O-FdZgNMXL-%0duT|509kwIPNF)?#?hzZ;D_S55jw^gvP7#Gz&p!F
zh4M9>{@9SQljaTWG%i193N<#Gyy!Mz9k=xc<H6aE+7DXVo|%7wX2~45eLepgseQCv
z`kr{sCQ6RMB<YMWC>D-*`HdMX>#Rv>Jqi)TDw&AYsTlQ~V6imnKAdy2OvE9MgvpL0
zl3PL*k11!otvgp-K5Y?{@lyf8=)69%>RoA&zoY#?>bi}q#<J2}>z7kX!jBH!I0*{%
zNyDlRs7F5gfiIEOIjnf}I?k$P=J90pqx_8X#&g|9z2dE5O;O(0;cFK5#d;EvOASwi
z7p!$Kez=ndD>Aow7WNxaT3}L~BfqFGY^F3DB)w=+-zlkTIIwjMF$^_+&9d_1R7pU2
zi~B*?Wy1sUZXw!&RE3gP0(G4j7_9goOSbF>G at gb|kg5ef+5zIYg4ZcfG!CAS?)!a8
zymHs{R{QU)>KOe$aS>=B)-6bqVfE)*6dHRpkbdL(;}W+?hCHB09w`|W6$L0QAs;{H
zVLHq?Asvzr%wf-N+N}|gFyEvs;v+yesBlT|WtX8Iq8+3=5n{a0Oy8(t9O4{D%;e4j
zJu>$4h!HdvI|K2P#a8 at Q^HOrY(p%+q at 9UtD+Hsa(nARazVk8*=CqA^yopRQgLD|zU
zE`B|S(0$FRhKsuaq8d!gf1G)+oXA}{f5$%o?Gf1bBi4XHDs)T3ayCqPB~TSkPWF}^
zD|updIw#SfDtyq$)Kn=ovogr7jBtE(MYEZatlfdsziGNoJZ1^MU)&l}57Y#lm at alC
zyzTa*sz<bq1pJ96KhUxC$D<CP*!H$$>~yj~K-nc<|4;x?<xq&$k}EdR&+}~<IhhGN
zmhR;0v{@Jg<Fy~lkBt{b#4jX{+1=DjL%LB)p(rFufp3 at zKxt)dGu86)`ZaJlq2$Y0
z2nZOPQlhU^O<Av64Nk5v?27eUg}TjnohtZU7 at O{>c(xONRp5<z481({#>2v*h?TCa
zsEB95 at xES3@<CSfm<x#T9=MRxWfn%3R=V=EBwF!%Ll}uKAu?>NTXM$nFfb=Mxp86&
z**Fg at D1q1EGw=oVbK<RT5dI=;MY)j&%Q4F~EZHrUT7jfs26iYh#>Px_W=Y{C{u#e+
zh_6CzeptPtu3Ma!D3#4k!NR}JW{-XV<p>Y at G_2^T3s&$GsA2&=mwdf#sz6PZexknm
znx+JpZO<~o>d_Ug=J3wqf34$J%yL=CnI8-`=)PB at 9L*HDVNB;-&#>?PbYYgO?dXsN
z;tZ6?eHOhq!k7OS7!8ks?*aYKThNS-ygUlq;d(0h#$t^P!~9%e^YMh}5=Z<%lEz5q
zEXcPF@~Z4E3bwCZF}1v2-Pizf4g=K^<E8-DK&{|x=u%}p9jaDnR=A_PRsWU<!NVU!
zt4RX$)m|Q3xhWNk<v+dF#;qo!%=+K%e20Qw$=b60wux*2c~LW92Xdy>IA~x?tUB46
z2go7zV*8EnTZV?wo6mT;T+%Z$=SQ+{+6=hmPK1N>na9Vu0W<sjhu_)iD)m#$6HTp}
z-T`#OI6%fZx`oi>e#_&#u#Sij&^lPWF(VXc0)$T0Is*{P3^BEK=(P|^JOvn((18n)
zz@{|Cj>3|X28n7 at P^||U2)Cc&_;QPlr}xgD^Im-V)u6N9=7i9XaeelNamVPt0X~AB
z at jq9_e1<cmR#Mv9UW5Fklae1PDC>+AT9C(ORLY=;E7H=s*>#3`JGRahYbRmTBhNJ)
z3xHcv0lOuz_Sc;`0|1C)26QJ%TW_wlEoDyN7 at Ry3Z<MTAH>y3AgqOdummtAGQ-e+T
z*wp~HnyU%@gj_{TP$@BBN+pNCx>b0&%P}rLwNn<brBnCFm%HuK^Fi^ql*tw^y~Fj!
z=!Cosas0wj36qWlq}1U;oLVH9$$j{-{DC;#{MnpC^K^ovi=frS%fvKG#Q8q$*O$iu
z+f`Miv>c;5f{iN&t8D(LfyI_9s{zWKZ;%duM%=K6neQq&By5=Lui?(k1==h$Dcel`
zov9H{3l~*Va=?-?2O=Bq*+++m(@SOzf|mVXI8HJ>gN`{oR?=xKY#j7MpKa7?e>P4t
zF4lqn))gtU6soxM-b^`mbys(l!E-1 at H!8X{%V%eM2CoLWy{6e}KGW>NQ%#L?AUI;t
z%68$hb`cX@*)P3UI*!p9B&IGzahM1>;sJCWPn{W*VL;{iDA*SlQ6*KQ;CBraaOoW8
zc}yF{jFzt_inZ5P{1wZqt6N-^+_%(oA|j~2MUU_^OgFlm$|ZfiK5fN|$#Jsub30pY
ziDT-b#rn<uyN8-M5x|oqiuDn+8=Z;W!s+l58z<Zu`R;!uTmp!$!NH+YJ^tJ*iq+1r
zD!bPCDwk56vp^fLOyhiJ43N<_PUl at x^QKW?*R{Di8IPDL(bZY4L&Oo^dBDIby%keh
zT%>inIeG}Pt=qMq07H_;W%tJt%fRsPd#Tfyt^1E0$9`&?r24c#IOWGfzJ)9r6e3w3
zd~cADgI=x+Mml<3T?&l5D{Bn}Y$2$&{s$@KcCpjbe~MC~$IoNhyK%BpoM7f-hF$Q$
zX=i4*qod>bA{i`M1@?Ouc_{lxR2+`9+S7uKF>e(htit2LSyb})HO6Z0W%?==2}<WD
zh=u5Ux5F`Xu$p&#;Nd1$%9{(ViwqoAg!l64-}y{S+9%v46AKH)g(M%JY_kt}2vxPy
zqxkq7I9~6qa+q`k?W(IkgF;JD-G;`LVQx;WZUiAJ3u~jQ#yV*6gFh~e_URP+cd=G=
zo!g<SF3Dj;MB~Q?Q(mC#8E=5E!F8bHRpziG?^G##9=1N+GSRXTfF_h?MKdO!uvJ$7
zNXo`(;OoJu!I1o6)BO&<Cdk)QYK8Tis;Qo6hs{t&_o1}PKI+cBhFB?$T<{=qB%M0#
z`m)le$r1E{+dk25n5tE+WVF`rgh7hyg*Y125V^kTms~jH><mBQVvCvn(cSyczjI&}
z<n}vEX+4$-GWg?Brjfkn{y50Z6^V3D;d<~!%7O!V(HG+8y7$U|JP4HXz9+o%i`$6H
zkx6m>V1RZRR8;OrJ~VotS0i<2+YIR>Z>Z9%nCKc6&sS(tF)xL6$k5^V3Pg>h{8NSU
z4$bg^d^)A}S-<i2E*;19Y=89fGYj6m at L<!gEIr$&r13l!D>yz}2Yg;-R`bcf%mR)G
zhFZM_VyI0J?(z$#yZ7>a7@)+h);pR;LD`1t?FgHD{p)I{$DQy4(w#-9B#gUPkeN0Q
z`G7AJb#GCaIS@;h{Fiu2?qlbY`Fz`&PVb**wWS<MlP?k86Q?U~A*cSGa?ZPV!5lO`
z(OSG`M6CDf$3=ARq0e|J`9nObv=fM%>J at Xz>5572X7>TQn)HxltaHK-(nv{=tsiUH
z`e1N`Bl{DarSSGF>XNO$`DP~*5B&e at zK)}yZ2s%o-|s1;4Bn_Ak+1NpctD>#ym>j(
z<^#Gxm6YDt*ZvV5Q?WIyF>Y&li~<9E<-q`7V?BEY-@`opE-55c#j5u1lpp`nmw`UX
zUH2xOm^-U&UnKoG=`boIYv&@>XK1K>qIeuImcebpifHT#O(Sqa5x3sE!*cpd-vj0q
zKOeMU<VHS at cc=dr42|5;jd4D6q at Jb(nzqMhxVlgn6f8#`(a&~;6t^7Qz_~)79V8K*
zW=~4PWsj<SFc;>BrK7 at 2{M;772Uf=X`lz#4*v2?FUEdu6FHKD!ME0O{?qg_Bc_A(q
zmg8jUR#)_H9Kcu4<TQV149`XHJbK%wTfSSdc)isnOhfvy{(tHXEF=`;8Z`0K#8$Lr
zy<6jhVyr%1uiv6r;hZeR%Ti^cro%v8__YRT<4EdW&UR`;{NkCo%?2CZ^?-M*&gZmj
zGS)jpac>dLiX)WhA at R580mAred>R!;BI2+nOY;E$KL}7HCZ?vtlxep|gPD))cc|jy
zEHP^v>ROnNH0JBqU(vPiPWZ at Eez&T8Df4}s1MB^dX)93=|K5XPoIA6p=RT*+H;aF+
z<bYgBPvG4_Q&1lPrcn{U*+7*D)F^;sOh!(g&}c0Uxno4x?SU%x9010IG9kj!@3Z%n
zKhch1y=4R?5fD818KFT8i82*wfF})<s5S?+=wg*I(QxPulbjV1+W=^6AusKdvH@)q
zmdQg7q%VDpPeQLDn={n|!<lSqynpB!j#oB0bPeLx5;GA{HcNa?Z6|T`xASIja`W>a
zj53i<hWj5SFx8Mgs6xJv1W|I51=VFGB at CMn_WHn_Q9@PA?H$)^vEFC$wo2KkDoWCp
zVd*_&4M>EK3ao?7>PbgZ-9#%QBq2$cD=yn2%i*>c)a#`JT!NQxaWB~HOIk*)w%PQp
zMKIqYfinyj;58KI97&u`+LuQGa2nYs98b}I#&Bu*-r$!svlg#E&PaCsgc1Ux^Q54c
zyM94Fv*6LzaHfrrFYnMl7hD$(4rh at yrZmFd>)>y2jS)J*n2zXdQNsPu_v`NY&*dDI
zhE|6+4AX5h4M>L`JS9XAZm+|fpZHe!E>sQ>pm(N}7)>gWgb~S`WE{rfr&K8XbeJdb
zYCMEeMsImB@~gn%H*SjeYroUrx5QW#lE70vw9+#ar3!M+L~J>^@{pxpBVVkr5Z=!p
zk2b`dgCzBv-K(<;`O at +s&vJCBuTFebzlSqDo@>I@@Qgu9w29Btm8*9xJlq+y2N_pm
z)@o#5$43$}aJj-^Y&vw6-FsBf)idtm9_F<cVk3FC<mdapI~gaGeHB9b;2-6@&{p36
z==hP-;zl9dc9;R}X#Up=Sj7YoYC-)0Hio}1mY;!F(#dGCDBxW=9p)EDchVy6c;Rl4
zV}QCn;uEw%3>d}@$UFe8%)xFzCkhS*_=Vs15pW-!%MMeA2<SfyxC?=Db1Fes*4Ibn
zKC9AY4~ZZke0}mgH&{UBs3&7c11u&)KL_g!Ncwprct#cO&f5gsLqNOZmAJtsmipq{
z6M#L0nO}BM(czAlx2W7f2o$pMbwNR1pAtnHr9nPN{u<QfDsd2C5ULI;mWl)gy>`DT
z<i<5_88MD&260)-5Mis47XvRnC||-a7(s{xV6^})4!0|hO0EKRp!9z*iaqj&cwJ>u
z(cAWQ<NMYT#hoq{uqx6R$(uDVd|LsEoLQ^5d&{&IdNTyxQ}&2*F{Y^>!1w_^E!AVv
zPFfZ at S3!r!hATX34YYm*i43a8 at o!?NQDJqt=BV#>RM~xwTnafdoBl1MAiBTpJ2v)N
zUnE+s>qU_HmXYTz+lCzt<1;y4V~3*)SOi|6XpMj$$aW}Tiulx&t&`>!wrGw^%ylei
z>$}M|0Lv=@3@!5WoGuFK#4{`B+XLf9tw2L)EX<hZVPz|T7hyi&b5ZV$sUZ>Z0Z=uV
z?Lt66GmGO>C<TyYc{y#H4!9~&+MVqK0I0#XmrcB2P5ci+kt65TJJ?XoaX}|6Dg0Ld
zH4^Qg?V$uV?6<#yZnyDJLDi<$QdjE7<Kf6fA(5E?C)vwF)UbXy$d0{C_jOlCm}XkE
zaRL1vs3&3VyzYb77n^h)on$pn&cK|5P#L&KO1HQj85<%Iwa<XkBE>YI7EU>8Sr>mx
z(F at vc`-z*=i)qL~m(%D0=sXxUx}vtQQZqt_DGo<hhn!w?&3<&eUNrek=*KF&_9Lig
z-7(5p%3JA1GA5)JOrDurJOBckUz=b!rqN7Z{rPl&Q@`PsQh`V`#|YUiZo$_Oj$5o!
zi+Rd)Zab;Xta_2o;4i?-UDW3q++)D0pWEmrJ{zWj*s0Qn?UvpE<l6 at AC}Cp?`o{7v
ze1HUb1YvRmXU2d&b|Qdf8aFhnzk4+-3V{K6d<_ZPr^HyH<TNxOGsX1s<x46majIyL
z?V=@9j=nyAre at wY@IiF8kplx11p(&m8%utv+r|p+1f%M^VJx)6*wuoAUVuamN7ow@
zy~T_^J8-a%p8t&E7+L_DmtRMuZvrWW%S%tt+p8A)8vw-tWu#lOT at V}rAdBBxC*EZ~
z6Hwd&HaI*@3HW^(dsYE?^0$rG2C`<l_}|yK3oN%?wE|uK16_1D%FaLHGP&dhJ!bxX
z_)hjRjf>WT82 at ERR$Cqt9Bld(AzW(qY1+2sHhC(@l=}LDcEQI$Q4qF*XLzW%Hc%)B
zrkEay0`a~NA4V5}_QXG*i4!M_OC7F2MK(7#0rCDwgDM&d$Ec2dw(1d79O0u5j=KpH
zPQS%9GRuyrcBB?5-nnIjW=TCQhX9<HWa2GU`Sx#EK*kiBbRw9J7=EQcGVe?MjnoKJ
zVfRF6fLZFPnCn02RkPhobz!{d-Cnyd-C|2jSd;)L4y#ckd`IyGM+J3e at CWvE045;#
zg8+^IEF<^>{{Vof!AscJ;UC<72ewpiKlp$6u~5;aAP(hw)>A3nO7JrTDKUA`5 at 7?#
F{{i_LmBIi3
literal 0
HcmV?d00001
diff --git a/images/user/libdl-load.puml b/images/user/libdl-load.puml
new file mode 100644
index 0000000..b9ae20d
--- /dev/null
+++ b/images/user/libdl-load.puml
@@ -0,0 +1,39 @@
+'
+' Libdl Load Executable Object file
+'
+' Copyright (c) 2019 Chris Johns <chrisj at rtems.org>
+' All rights reserved.
+'
+ at startuml
+ start
+ :dlopen;
+
+ if (check libraries ?) then (changed)
+ :load libraries;
+ else (no change)
+ endif
+ :load object;
+ floating note left
+ Searching of unreolved symbols
+ continues until the remain symbols
+ cannot be found in the global symbol
+ table or libraries.
+ end note
+ while (unresolved symbols?) is (unresolved)
+ if (search globals) then (found)
+ :fix relocations;
+ else (not found)
+ endif
+ if (search libraries ?) then (found)
+ :load library object;
+ floating note left
+ If a symbol is found the library object file
+ is load adding the symbol to the global
+ symbol table and potentially adding more
+ unresolved symbols.
+ end note
+ else (not found)
+ endif
+ endwhile (all searched)
+ stop
+ at enduml
diff --git a/images/user/libdl.ditaa b/images/user/libdl.ditaa
new file mode 100644
index 0000000..c317dd1
--- /dev/null
+++ b/images/user/libdl.ditaa
@@ -0,0 +1,42 @@
+'
+' Executable debugging : QEMU
+'
+' Copyright (c) 2018 Chris Johns <chrisj at rtems.org>
+' All rights reserved.
+'
+ at startditaa
+
+ +----------------------------------------+
+ /--------------------------\ | RTL (libdl) |
+ | RTEMS File System | | |
+ | | | +----------+ /---------------\ |
+ | | /------->| archives |<--->| lib symbols | |
+ | +---------------------+ | | | +----------+ \---------------/ |
+ | | /etc/libdl.conf |-----+ | ^ |
+ | +---------------------+ | | | | |
+ | | | | | |
+ | +---------------------+ | | | V |
+ | | /lib/librtemscpu.a | | | | +-------------+ /-------------\ |
+ | | /lib/librtemsbsp.a |-----/ /----->| link editor |<--->| symbols | |
+ | | /lib/libc.a | | | | +-------------+ \-------------/ |
+ | | /lib/libm.a | | | | ^ ^ |
+ | | /lib/libgcc.a | | | | | | |
+ | +---------------------+ | | | | V |
+ | | | | | /---------------\ |
+ | +---------------------+ | | | +----->| objects | |
+ | | /app/foo.o |-------/ | | \---------------/ |
+ | +---------------------+ | | | ^ |
+ \--------------------------/ | | | |
+ | | | |
+ | | /------+--------\ |
+ | +----->| unresolved | |
+ | | | symbols | |
+ | | \---------------/ |
+ | | |
+ +---------|------------------------------+
+ |
+ V
+ /----------------------------------\
+ | target memory |
+ \----------------------------------/
+ at endditaa
diff --git a/images/user/libdl.png b/images/user/libdl.png
new file mode 100644
index 0000000000000000000000000000000000000000..f1446dde068a422fd93cece4ddc93de81228726e
GIT binary patch
literal 26974
zcmd43XH-;M*ENWua#fV8C`b|&$pQib0#cx$WRNUbl4Ou9p}+_tCbHz5qfiA%R0)!E
zERrIUOL8F;q1OR#c;5H<di3ZYJ=!r;C=ONo?6db;bIm!|_P?zpee4MB5fT!TW3n<*
zsw5<&@OS^AKlZ~b9hcY-l8{(3%Sv5We}J2daaUK at s!ac0bLr$E-Iuh9$&x~^J5nZO
zr4@|Zd(d$#%6a!>uV|x0ljE9LEh|`V4W4n*O>*?F(@UC=wQ+d)ylx*8gV)jh=RfV+
zcV6+p!2>F?yfVC9?p1 at H!^<<Ow@>LvXe^?A@~=wb3)@DjD%RX4q`eQpFdm-$$aHES
zd_jUEL;iJ5L;LK0QAUa<h3_SZ$g3o~Uz1=ckgwZO$iM%`A7Ci{fAxzGTUpPY`+9<e
zWKi0JA8z2|sZK4`KS(6(eF^(W7?^kOTSEFU$wT-y9!)}G!MOX<fBp8ZEESiI=`YnQ
zLPEv<l&s!_0dw3D0|NsVgT%0yn4FY_t+mmp!rF<6iNlmE^&30e^E<f{*LF6S`PP4Z
ze-p(&z#YUK8n-s;Q`K|ob9J?u<M!ryHwx#sJCYSCJf&sV?CN~^^6SW<LUZK+fvU|V
zd8|cGriN|G-Bzl#`B5HD;>JdAZ?9_rAv7f9>eZ|D(e_naVel~Ep~NRWjZH`MX=`ex
zviK}VjXDPrUeWO1(%cUBS*NyrZTY^igmAdfye&+4XR~cb0qz#=wO!=~MGq>$ZGME0
z=FFLX8l2nW*iEdXm6esQao@~%zESlyestS*WvZjKwRL-YJI-hO17W$ew6u7{qv^|+
zFV)p1Gu;`CKAR3 at xU|-*gxNmjw5}7R7L2f*oI~0vvGXGpo>ogg!VQ0t<B1E^6lRL7
ztZ5q?8^<l<@*gaY#d&X7_T}nZEv-y<Sv at mr3TsHdI$AvHt$X|SIjjC$!jB(6GF*&J
zO#Jult}79_DF<BI at ZjXkOk`MCFAZ)DXPws&sf=1r{-)rB$<xX+aQiu=;<SJNe$&>c
zhbhN*Iy*Zn(Zt4a#_a_%ta?lXe-2tvQE?`DqH24#>LjT}T#L2gty{M&EYhp0s_3__
z?I+o}N_kH5=AAotyuDEj%n#pVEMcPQuRUmgpcr5gSDInB`D>A(2W4+RPvw7AL_|<f
z(0gmO&uW$ty%MOy at fnv(IQ;YHPd=v~jiEIpIP*aqH60x%(@@<jy28T357zr6&f8u;
z?l<C1w6$dL_xE=WA*t(hootQq*+}yV+99q?FV|8V-su at YF)}jRZfO_Zi)cqR_^z81
zQNO;D8k67)jqsf8?17SrPoEyRKpL-coIzxKa#Bl8O;Y;s-AlIcC^gbPnX+YMW)_qX
zY;l<BPe1YemGxOlG^qZY2KbRmlP|B~3B?_=9`!v&cSBP0 at KF-V0|yT_e1v__o{7oP
zF1*zexUY5$m!|&+KNVd5Ifz-_dt*9nxXdj}w&9JA(R63Z%&p_Hh57mI(b6Izw1nxd
zNqEf2-B#mRziaF1(Hrf%`#46_jetpF!ca8#p<<MT?tUbRSe{CH6BZsGm51i4Z)vf0
z36N_dx6kBXKFF<GY<G;D+}Y8Q7UlJ8XI*?pn&@t8i(mTDR8d|&G(4Q95K(|8y7G?>
znr~wG;?aV>^go9xJj3%zE<Yl-hg(WXIxt1Gy%b)B`6VY!orF$d5*Ch_ks#XW5~qgt
z;h4q6N88%oygnJP+g{l~Y+#LZmOnJ&G0QcuQSQE+eiT_=`997fF at AnzyJ5kP;6le`
z_osuCQ`A+5G4nWdYR=amKg`BzZ3YGgaz>0h)07#%ujCn2WHJ+dcIJ0_CUzFz_;gRi
ziMrY0FqWib$3sr(>FfI)XV at 6s9`xboU*;0rdTU5!f8CGo9%{BXM{VHeVf&(4OWLQf
z|0`&4<|#PyUj+}0+G54HdcE?=8p&HOUAm+YCGPf9&jc^(^()^)O&vBSEMGgjpD^F7
z%CR;|6R*N`ZWBc!c`+2nZV*Wxj*#OEt?<DO1qFNp>rtbdbz`{6i3v>=mGk`e!=))B
z>)khqEQ*mAgLx`eI-i)0T%kxpGqjw+`5j6???y%KGQ!~*u9-)V9)<OwT!a=0_(8J?
z9M<~B4urg-_R3FB$eNPN%82lPR#q0HDiJ3(==SyFBX+gamHAOaFX!fWyt+j;ma{ZM
zT{Oh4d7r$>w2WlUt4<Ryzfpgw+9C|Tef#ziDVd0<=o?xAE7&E^o;~C9flbAgd)vC!
z?t;Bqnvw>O<}V1Dr2F^NGcf$nl74e`Yo$whYio;vp8nR$Gw+=ym2{2}k3!V$_z=aH
z=DGGWL-xBCr&u!K=FOW8qlQ~ES}rawPYxXm+7XBNONC=iH2L+caddM+h|z1|k$?F2
zYcB~E#Ghq+>?k)FLT9HccG|KlRX{+1hSf~OBqAchDlkaL=-cOKGtY>ttE(Or2I$oF
z`aq^cJ9zwz-oL&Tm^F1r=EUOpV}w%BkNch6-PfJk#L`&ID%D3fR%d(4R$GKg<>ZZg
z_K~z#p3Ow#D$u#Pxt5le5IZEjiG!m>cQU)C&w9 at Bu21@Gx9za|NWY?GPVBltG^Ipu
ztXKwie|$t5 at ZyDnd1a4cR69!cw(V4#&vv1X$6P<}>N3B1>lyp>;g{@dw8D<bn}%v?
zNtK1kL)=VEk~us at TDNbvUobPlTMOCC5o=H>mE>wy-IvBkj~RS{rMf+jIYpp`te)f~
zWTrGmNk(zjMgx6z!p2ZTBUI!>O8*C^wD*LqEyg~{o%OgK?eeb6@|>F47Jb^U!Xw)&
zzkhjCylS&lwKZ6UE#>N>33&BN!|5a?rGR|dgT=&4nYp=wUbLk?JKOyCnq}nVtmKKf
zmZ(mYg9Wy-KS77Xn>|=7SC6-X>GvRJr*W(k&c6eo>b%7ISOCwZTy(MhsHVLo<K?>_
zw}@-HJ*b-y4L&$cO1<emvh&?%lcLGWP(k74#<!otWuoeOwr1HG8Poo(v2TTsQeAq-
zZ~j^&CS!|(iwmC;Zm_ht*l|EfP6B;@_|D!~Y^$!|n_64L8k)j+lF)NJkn^P{M=FJf
zD?GLI<5vg-O#|cWu#2<|+;5g`Sl%F>!kN_Wz&^KcvWjy(uc7+j;SFm66Ikbg!mnSy
zhTORHMuB!`0d^%!)a|O4=H?LL`HD3IU26BiMmn5y8$c~stGW`zrvlc!>B4k^Hu)t4
z8sltq6>)fednHXgB{lWM*@g{RS_zj<2dMg*UdK~v<{5AWZ*8mwynbB?^SL_P2Oxm)
z)G5<nC!CKt at uhZ6W8^=M*)lUTTW#Y9izRQ|P>K<8neFAm|7?IQ*4xw5po;$x2GP+{
zHlp=k!?;D1GCV|n=A6 at 6^ooik*-SeV!wow-J83M>wQHNxX>o+b#S=*<oq~L}k=Qnh
zUW-|e5HcigZ@&pozDArYgaoIgq@*mi+C7_BwcR2#iYYzM&rd}~)jRh7<jos5K0{31
z+}xz6r}sjm;n8NTC)SUCes;8?qQY}^hFRR}`zs+_%Rd8>6k1;GGvxds;yC_C%60h!
za}p8+t<44FaJbq4YWd5X5ZG;Iv2D)uyAR8c at W?jlY(4Dp7!-Qrjrg|AqjuFPn%(e6
z8vp$+vguGFZX_bdf3I`0f4%s3<REQV?KdPL!Mtf at co_D1dp|%T=bt2)5Hj<*{`bQL
z!w(-ml>T^9Miyr=XJ%^p)Yo@|Nc4R0;PxBASKaY7MtAPKBMiG at -h3i|7`A^WCEDkZ
ze0(K`w!Xf;uCA`3;b?caDdoQVV>O2zo+(BN{umz*2 at h98e)sOZdlQ59RbqEPKK%9T
zS7c<Q-Qk;iZ}XTiP(?U>`t<MzC+V~<|ILQ`)>~LZRn;*(9{ug}!OXVStIkvH?Fo|1
z=WZTY^*~EXN;*05<G$QIBq5&=-GK_Q9K~AqEiEm*2neX%gk+IjMG*h>^+|jC?U`2Y
zh%1(=Qc_Rf8ER`s(EB}KPe7C3Bf*?%q`?=yBcvoJ>s5GYH0NP3E8APdUPI#b>(}AY
zCH<T`=};NLZ+_3*och$M=j#m)GT|``lEgF3Bo^!zaa-1gdV10C3^g at 1jf{+L-h8&&
zSLx^XrNVP9U9{{XFRw$*^Ai~v8N$NC#dgD)+1WNWHd4QTm+{Um;%j<g1O{U;nAyI(
z9SHK>C}$=>gv+pJ_p5GJ=H?#9n_MQ1PwA(FoppH!b at q_=QLE7eNx#+@(KP_vJCG-A
zE#s8ZJn`5*5iFslD(5Y(*rc(kNncM-DfU`KNJvO%sD`R)r`cLm;_e-XaC4QuH~DhU
z)U<!>Bcz8m`LMG-n~P)ypCYk5=g)s?Ys*tJ(e2s((G;GOL(o-^o|dIMQm?eNUj4-s
zVvdx)hldADPWZ6>3j*)EeeJ5Hn5hE*YwPP}Fl};}yo3a!+83wMM1lsk>matutceQH
zg{a5Ml;O at spL{s?aEU`w(@&wBd()twgMLA6 at E`%uR4k^Aif0MN^^!rfH{YN%mGI=r
zlbkeyV&5fPU&dOLLHPq-9-h4Na{AwMQb@>{7eFu8QpX4_ at Z8Cl7z_&tXnMzMB4|I7
z?J|VRhdgj at NA&8|xzQ at a2}V&@8$c#OLRwmV8ER=P%*-^o;x_&H45F^jIb<I%4N{12
z=Jz-_4-}ZqG;6|>)S+c$%yT at +z>qTm`1gKe2s?ygHz%jya@*ljY;LX+mz<*FvBQUH
zuHKI?EL=`kNz%;K(^gkEb-)L_d>KMtlpd0sjcy3diN*(egpbjRd0 at JqS5@r*Ajiq&
z<dh=lfM;6fwuYu=rU1a6tQTW7{*-*|pHdIrk&t+plw at -EZv2(E`em*SRLm&pmuD6s
zG!@ksO}~UJuNZqxTaZKCXQ_czD at R8|L!)QLPDgOO*}tLMkHTlQM{6eIc#M+Y-UFJ`
zBc4h~NXT*BprZdZJ3C8BNjW?`%-r()`5)Cr_VsViM+w?Ove4ik^_&-r7yxKTV_n<d
z+0_-!t#4IQxiArBFXs!ZGK-~l^5vHf>%QEKlrpz at O?gA~sz$`h(vqs(+Rw82#__M8
zo|sWW336g5Shk}DD#6G|+SS9jB<VMejj#obv&I6cx+_0_{){~Fo|&mJT%5R%w|QUX
zO^ouL@(1rtH8|82V}+gSuCi0QgolQvc>h}b!k86G&8^24JTfwJ?AWnL!r_xTCq3K5
z)}kXr*3Hb!=3z!RN3*ne7BBMiv&^srlO7_MQBvY&XLp~7FgJA^DskZ0f6T3G?7aCs
zg%<=_1=k;4KP(uZ(2#JYL}8T|mY3yaWTxgGiC?@Z)k!bzUH&bd-8U`fEhjg(W^svs
z0EU^Y;IW8d5R|xlRSw_lG+oZKvB|(pjPK0MSP2OUMQna&++hob{T+m--4<kFxs~Ed
zm>XzrR#>efuNX6 at s;VchPsU~Oj?iM1BiyLFw<WFOe)U2<(G&gfAxQ+k(dPr-lNI`6
z_&x+ONjL6bvDlfbQiYr;=;OzaUohhPU^grh+8u5P$bp*2Ks{L0?dKI%6IcTrb(rsA
zB_&rwKgWuB>dd9qO17#hhbJMMoG_}&$HxcN4S+_)mo2WoY%1#NA+==NH8nNUU1^@~
z?yEnCbqB-J($c=A3qM%6YrECoe+Szt&4}&}qrXPzH?iUq7dOngRPB^in(wpYjs1+I
zU;JR&_Riqw_PvtxCKs5P02hvHM|D;C?9lMv^IC2Z3Zpe1_1Qsxw=NrgUgK`wU1^4G
z8ywWt^?~`|`_j?z9zx+w)zsOau+Xi%RaJvnHeiYIb)&dGj=z=2Ij6)DJUu<F^YmRX
zFIS!GTz^8?NV&V3sA#{j5Z779-G_!Vr|Q&hVq+8Yc6D_PAD-{5Feg5K{8%bMM}OU@
zE;KRm0yQ<Ytm)6852`_YlTb^l_m$&HQ}pTBi){ycbLn9 at RAUG|y}d7t8>7Xyrj at Na
z5a3G1AnrZ1P#(YwQ|vXJ67J>Yg;5Q%8LjdeRh68BP^f#Yp+g@&>d6z)Bm!41T9q2N
zQFyNf;GIIBzLV23rSi4&PE?ofTsCi|UpMbgSHV$)5-bOMFg&cR(kyv;A38G$*ig7F
z)cSZZ)d}ltG!=y~lJ-dO)^R~WCxu;wD!-cL;rfd04QU2(9*>qKk8eVaqplmcsQju#
z((kxH4!X9scBZtSGp~GU0mu5(&#x)^`jbN$U9Y5H)2l3F1Ih!axcDllVN)P5jIOb<
zvEb{Ux`2&ShPZI7NGJ|d%G}~Esm~hbYELK~EOp7^<2N at qUzcV<Dw)Q2i#H7pKP=*2
z(z!O?jsm&}hIWij5K=$Rt;4eZPqU4d3JT$c$sa#pF(}6jre|mCRe4vq9<Q!Bda3&f
zEuTSSJ6ly_ef^yR(*{!OQHZGV_;~>GJu$==Jy}{!3Ju=?m}O>VF&B4qbU+e;WS^3f
za{m1JH03y|W2c2ZCu7{Y+aN at 7p=ug=>)xK1EHxnBdQCr&fgPoJ<1BM=%30(vxq$mj
zH~aTwTu#~2lB1TER_NoW0{{Tw9u!O!#5%uy`xY1!bb(Iw%`xnTj9;zfal9lE$`C at J
zia0lSE~~|8XNvsb7JXMW#pe6>@1fR%jaFG%3BP9*4GhU=*oN?&Aw)tBeQEf$^E{s4
z>)JBDc+~EF!V at wI6hOd&^N{h<Vm)R6xG5_sX$ElXm0Y$Txh5_y9=Z-d9o6hk-6ffQ
zrh0RIxlEN9#$z~g5Np3kT_PnVC398Q>=+};3&<hclwP}Gr~oq at f8p(Ytm!$RJc5$q
z#f!)*mO&nm0)UnAr!Ki8_}AlL6y~n-T+2mM55v?ntLs)a;zA{}v*XX6pP9qGdGlue
z8#eCk+xP=Nr#g~qE+X98%21f`n(h78XyFM at E?i%&qz&Md`}gms^;WJcvkzF~`+9n~
z49f2ieuh_VrVw21j8E>)77D>d`14^n`$rz9<Fc}5fuhPYtQs*PEx=&9J33D6U4=Ub
zAEH8ZRnpW1W`o*r8ko^`6z&|UIBt!x<im$h0DW$*vU++$kQ>%ncyMG;2psA_Vdll(
zT{Z$tObs~6bhy+-S$qp)F}l7yd6NhLZg2G^MR!!jW}&TnvpYuk$q7=h%}N};8=zNv
zAfwcM`C?e=%q}iom6*7HZ!j1Nk95M1i3yJf57OH at 9*e#AT(bkR(sr;2lKiFf=f5?E
zavnT*5V9r0&^;t1pxY&}%760zs^#%M!N35(Rh}8Q4<f65#cEh#p%buR>gwGM!K{!l
z3kwPWRjzu7;ml2*L~NWo_i*(b?|>|q8GvOmIpV#x*kP_ghAS3-8rhrx!p2sGSVK6@
zh`Q#z`C!#nJKqJ0;<Z`B9S`6$<Isc%BZ-kRw>$*i74qW0m(XV~kW0h3TwJi^XQAK*
zmLuAs_=BE?y80<7cuY+%GBYDspX3^ws)wqtYLIHIzAIyo<b{@^^78Wh{LB3O{KCTP
za|4B6UNcahxb|S-+-a*MnPJ&ubu~55m(fIgG30Mf4vwIQHWn5LVfxUo2Q_^g!emm{
zwA8lgAJ>UC+*%iYLNWE>!-sGlLnQ@;Yey+wgv5p<gd~TUhYw4yzO7G)#0){=A1QH=
zY*xPX4XJ)+vhv2Z_qkX(rN0pM+4j0|;|AbvP0ikxD53e`vb4V0sHiA-+!SApu*%1o
zmw#h(+}4UH&ivVjpvCy?Y=sqluOBl#Ss4rQGSjj&a<X#nt^;UwD&cReK^$cEV`Kmw
zpk|hpmj}vXKK(Y`%^4-D%VJ_%evIC1moA-3g9PLq9y22ex0UaNmzR|d>`+3Gyt)WA
zrftGeLraS_sq&qitgJuzrq2_yn{vvHx8+nD3!8o>c|3 at WiefJAeBc8V-(azQlL16D
zu{FlqX at Y*4SEt_|J#r*j at P~z-m1c8glhSGeu*Ur#2oQ(;5$w at ml%hD)_LP8)fB#<P
z7P`U!Y76!!HDV8LC$A)vr(8_AmZENJarY#v1u(2RIXStxnnvfA<euT!RNc64yyuLe
zfQ9?96*~{q$_&?n{(6fvCXfG+_f5)cY&taC!*%D+{BZ-}<}CDyHjB&4<BhJeva;-#
zE+x~G%$2;kNi0<)0?22ld*$!XTY)QeneC=~VmDN>NaBwWKTB=j--zc<M8(>KM at Q3#
zMnEjTcIQag4<J&IeASU>DBe&FwQ4)+z)`&C83<BmX=r4H5pF#0hc?C{Fd!hnAa9-=
z-*vLs1P?IjcErF3CsuRfpO-N6=PfNP76^o&<y!8fB)C2&Y~K6#9bH|^Kz7@?wUD)=
zs%sRjBNVMibM?#A?^SLQbTJg4ZV=A~0b=QiFDNWzKL(NtzVPB?TU<ETEotej28gXn
z5qv37>q9keQulJ8)Wup~Kc<;c+}kVQP4$68hce^n_h9_lvuA-%0<KIEC>8++r&a>o
z+$BCf$G^FHA_3nOl$n?3Gn-Qk+1ymJAQYm&wTFa=dMnt~;|;-Pl~0~j2P>mKSoLJW
zA1e3YSFfS+sI9$OwDir7F%!v4TypoC!niCLA3r0AT?P!D$qoduZ|AP&Ab*mIiX~AE
z$i<y1SeXT at Knen&8ine0Q<<eU7*^Jx$l%(D=X^sn?A<vWR{mrlBe#Ajrl+Q*17);0
zRx1(%$a&amsX2oGH~)V|7xs^lQ9`<rG`3Aj6V^R at 0B{v=qoegyRhOFi+v>+528JwI
zxqAZOVzvh`t`WSrxHvNjxNzJC8L0LF;h`WCrJi`;AlUxgo#ZoPPLSY$H4E86c+kqu
z3Wx8vuvY-9x>TCC#oB5RA-KVeaXL-3#o3EE at MCwy1R&G at 5fgkIZetU~H@{I>SvosA
z`(a>okf^#}TT`X$o8St~--H!x>c#8;v7{-FeS8C1ByFltdW|j&xf>f_Fx!s=+_3ZP
z?6Sd8{r&yYxO04b1seD+ at 1+iD#t5Y$1^hCB(CdxzB-liJpPK6L?oJlte{VY|h+P at 0
z4PfX*QEK;4;rri9wtR43PIaA8kzarR<*b_g^73+zD*K-p<v)%e_paIaQ&E~|69|Cx
zOs~nEJ7 at m-*lX9ymE%w|2L>0ve>tY?5V0)d$D$DV3L9Dyft&pPJ!#9UH(Q$p!vmbz
zCrsPbEZl3Pwz7IX7yq7M$!;y*foesDf3x(ci>86(@q=Yc{7FD+4HOdA*Vhk{k!9`d
z;V&x}1RT*Bj%$d!{|MDmVBP*m?f&Hr<IY`bcOko>bj|wa<|{E8-vi3WgzBi>k<f^r
zwE-~wN_nV}myVefnI(#VQl(Ph`)ykxESf1*d2b!3zj_<CLU=f<>*-Ucl4BeCi|ylP
zo*grs%Z|1G)Apn!a0|`5z)LpEKWbgZZ&NR=OV-M2sXIf>>YxMPs>~O+Q8a5}?@uNM
zF67Z+rA00-0yzLNFUwq8=UV3 at _*@G^bAI<FQxklYxDV>Dp~x5j%`cTeZhjWh%7A&C
zi<_I9qoc=6Mw)@o*6R4UDgHFaQEG0W4Z{p&Sw<gxKPIpP@$A#5PfL`5#ql|8bugm+
z;m at Bx|M*d2U}NE1HLUrpEj at CZ^`##mAQqhOC;$?xBnj82sfnd7QHZ=ETk)}WbaeFB
zL2k&@pha*%Qpy=gWv_U2<yIpZ2}I4aFMyu{P9A4GhRhhj&vh-I*HQh}`kt}}zcg?d
z6gykX(W5-&692r)n+|Lz;G%f+_z{q5k>DyptUoRA2WX$Wn1C<j^zK_A0wIT__P+KT
z$TMn3CGQJO$R at E!KrTZD)p%Qz1alkH_7EVr*#5hUC1qu9L4=lAF*-bH;}H`4><1jH
z`u|Md5^hWmY#nU8?1AiymRpjdxG(YhNi5=QPa(-4LOVzsP-_6(Xxr~BbkgtStCPVe
zBd9hdIB;YzEL>j~RynT^3S+>{4Q#+A_NYJnd28%;qKdKV1+_6syrdZ$Cy5Rl&OBl)
z9rTIJ%%DYVa`N~@OOy}kl-<SS%(Tob%zVtK4wSlY!T$JXiRdu)*L8KbXtaS&Gc!w3
zN-HC4AC{q)yCSC`XDa8Fh)yRrJ1BAVCh^jMk-!eCBFXS8s#isP7^pHi5Kh-<-^%l_
z$AlAfd*8&PSIAcq|M_}%E}ied+=`K!9fbcFsDNv3lh~V9h at w+8djlqu`0|Lb&+H)b
zEJ>W{Eg0YL+q;^93 at 2@a5Y&F~vkv}0|KER*0-tI9TWQ?grSXOkir;I%A}%K1xb{U6
zhKG+YXldWBl8huJN^Zl-q0Hq~{2(mVvVUE^b=h%T2KEQ9$)UadfebcI|GiQ5Art&y
zm5=zpUsbttr~mW%(9jTM7dD#RwHE(ff;jgoKK`5}{^+q|DGC6VJ-J^aR4YmLVSia9
z7|^=@9I`y)>EPfHau_tlw%YSmTQnad- at eO+w}GSwI3h34-pc9*vAt4h42FkLZLO1d
z{BV1_M8xjel?b;oR8i>w2@)i|`nY$yd+02v-<r5$uXRT`Qe+2_l<E*6Hv??f($l*%
z0TSvHnEaS8KrV(LeCTc3-7V4HgJUIKfa<MwQ%+ufezfWha+M#w7NGleB2n$s-c`qN
zu-929U~OsuY*tZ0!bwb{bzVgg&=-yS_CE0X|0X<PEA?g6eE9-0o$B$w-pXyNJ;7<R
z6}_{yCcgcP3E8j619M3u#9VV%^*%#MxeUBzlQ<GJBJDj2tW~W)A>d~V2O;)j`fl}r
ze4<EQ;>`d(J-ro=ikng`1sMo@`|HiLZxLzf=)}at487NXxN0=hs}$N;?fw{6AhHap
zx+<3^+nVwcladC-&Zn{X9iyY7p%M02v4E1<2WSo=!9~>yw*eK!QWYQx1W}Du8$vm0
z_2d75WOS~$%&21%0EZknZ~)Zv#=Od3V*z^%- at pl`TV4P{ajt40X5YAR=r}!_Hb{is
zP_#gv#iRhT2c9m{&(9Bbc5-w`i0Q=7`dentfXmHnz+kRmk0M3{U5&!KpZ41-L+NT-
z1w^RLnV)b|WV?67a1IpJ?zF_j&k8D(R6GXRUDK}fBRMQ>(ZXFc85yU2$!Q8e1_U{f
z(wsPgUek}@f3Wa%Wn~4R#q*tp<a%u<r@~b9XV62LP5v7LcUk*GYU-^Jr3rd55A_;e
zU_KPAflsxP1TiS~(o9#{8 at 8m2%u%|f&KVJ9Nf>(|V<xQQZlTd=W8=iKva)Q(6DN>`
zgBVe8eMWdn-lf&m7-6SW;o{K at S>9x*Ju-#&?c2v^{`u+Qn7~M#>-6%nrn)#c5Ph_z
zCv1jFR9e7PpfVdR=Be3*3RF=MsXkQ+K9Y!X(B>kCK-p8cckf=N?E8w(pKnwbZ~(^_
zM~nszQnxQ#aqe|zC7=WGhXi&gW60HZqXDvOXGtJ5F9nNv65jDx0S$?3>zU+XU|@)f
zjJy;ZsbjS8^;7CR9)v)2 at -fKd0(j54_g}g<jQy-K&crIDrlry4X7|m4l8-sHu{JLb
z$kx7cz3#pwcqUYIapuNuXC;WBAOZ)%y*@o$RvgBxtgMVt<^=}qEc2b1;;K{?vdec{
zWEcjf9)t%5o}i_jnV-+&E|gfifIavA6ctriT-+PNKpNqhpWoVam$c}0v)AeCzkXSW
z#|c=6B at EmV#A?Q^U+zV;%PiqYyCMn8xUko$XsE0B+<!Elmc*+~?ihGXGdH~JJqcj*
z{?0a9kyr$LSr{RrKZXhy9u#D(Lwxb#1?(l$XFzYvIEzFqgHoB<9FLCHnjP!>+Hi5!
z-VEWPdwPJtgc7!MvR}#~=BmSuYbIT(ik)=fi2O7By8FhS{KG}62&f$DT-IllxISCl
z<m4nZJ^fH`7xtb(SdV&LK?XJx4Wfws?1g#Q#FrA$w7+>R`MpxS$JfC9$LVFBC9AS!
z5KfxL^SoC%1=bN3;~4>a^;m|158Ly;%%f94o!x}W5JRD3YvvgLV6v4#SnAYzZ~|`Q
zduDQS&EOyrXbAPV(-&fjUS2(^e&Ml4MP)+5^}2IVJ7SfGdy8PBANP;UH*GjMtp`MA
z5{q(-h}mK{4zbn{GJ1 at SjWH2fT6tl@pjC?A|N79`9sca`TQjL2k6Rjo>@6cx54`Km
zrEv*hxJCkRA_fUN^)QIPn!|Q%A98ll+uP=-52AdATbgsy(JtflfvH$!!VQ9q7}JHp
zPA_VRXYHuVc4kn>2P;X6a8LUr&lhZ$Y<zt}0Yq<xXqH)Lvh0ZyCyc#eqWJP(fWRe~
zhc=e4 at L1*Z67`SB(+j-)$KNIs&}v1QutgZ<6>E_B9bd8y2Bp}SFZxFMz-k7+M=!8n
zo$h~wym2zoL00Lw<%t%6+fMiIFTlP8s|T<?VUL)kUmqYNYx0G~p at V)TuUqCcKO!dE
z2(=&p`_NF}U+(D;yN90!g*4uJ at Sp^D077sA`tDGps;X+PK?TPI>z7<mc8j-5f|#79
zsnSKWZq^n2TXK8<^q}&u1oUtc8umUVs}e^2`5i%lsPCUfP{WdkF2W9d(rRZ03Dely
z at ukjg`Z3ya`0?%Ad9v#6n4X|_ at 2(oxJn!!Aj*gB7rws@$U|UK=3;NhIA}9|hoo7sz
zGY6OzN>OEb`7-aV(i{vQM{DE<S9~O}YE<fDQy{h?anvHN!V>Wb0IPwH8hUY>v$;ym
z&!E;$C*rpRCy?6=5?o1v<Nuc6j6Zqa>Zr8qMXk15fRHBa_8n_27^awWaG0oQFa*4$
zp|^KsTwL66+($a7a>18XOwmR$z~yWZ+}zNhqTd3BC7t0g4K(9Wv}V}bx91)WXP6gg
z=;>E_ePFd7m8?tFc*SSM7G5u_tjxp4mj6{O$-+>`dK9*g)C_R-f2BY}YNjW>aJP5^
z;@`U6Pwa2qZiY!RCI`)tTVyi;a;zVLLCj+%&u42kMLzsuE7yZIHe6o}uCKp;YI=Ho
zsfnkU?*7EnBr`Qwo0Yk&92{0aG>Tm(p5iHAxB*pcs72iB6<HH}VP<9hre;`RAjGsg
z)wJ`GB}a}Q|5;aZgLvt*)=X?i05#9Vj~_r5CZP%OXw{^ptf{G~xEAjpa;B!^z-7k7
z#DJ0k`a_>=hUF{>vGqH^*(zUKlnUT!KzM;rinG_Qnl*-ic3bx0133TgfyW4*nN=XL
zs5TamJ7MX7S79lOr}CFEY at vdivaX=bf&(w3Xc(5po-Ic%?A9w<tm6+ke9jg8#JZ8U
zb at StcM=@e94i14^xN`SGqmm?a%%^$pwKB*CEA)6ZL(?ECqi5zsj3(17t)ZJbk1lP1
z&rf&jgQ-RZLm_Zwab8QZSyB8QD&2j3Rja+aC=^PSw$rknN--Kw2gHUhI*?vaA@<rp
zPmjh%7;BuDBT$6!$9C0{xHdoEt;tgHDmYjzAlubUPc}DOiin$u_Sqqh$}1&Ta&U6?
zL_+<pu`cc~Rzv#o+=TP$!~xkd6S=;X5kCq>gq`bFV-Se}nvo2D^ytyxdNq4N!R3QZ
zFyUb{qZOXTk=L9i6wH%THO~M%PF0KojHgI%gzy<NvlSr5fSMO*r_Yk67}Yy8lr5lR
zgvVin-cQDQDk(N at 78DeKpVJVnFZo$VGdCkcCC>Mn$4dH3GRGR8RIJSapVQLj<tl+!
z<T8+z!8K9fEhTjT*XMrm;>8D^p1S#Ng@^HKATJb^ejm<7e~z-RWOrAam!}^4{#`d4
z90ZvA-)^iMZp1-^!GPC>;n@`pGY-CXa9T7z+#;cNH&fT-=~MVmu}_X$7vCk45!%3A
zzVP{Ij;1s9mmY+KN9F3=O>}B)Y_wWDqH$WLlj6#iE6&abc+;|kSY_1TMVwVD&0eFz
z2bUDgQI1&{7F))xxb1N!SE`N*Zg2O4p;ClN0DB`2g$|J_>glm!G#>;hI})n3q~5?M
zf;k<Hch4!-Uw*~|&eh4C&64N&VAP6eZf;f&?kr6nwQ+fF#o0!&tn2jF1XZ0^fv^d$
zi<l232fuptYOAcGtJkl8Yjab|D at T#ILBMCVJ~K5p&+ at W*rB9jRzC6(&4y0J*iK36r
z(&wqt?a;((#_jkp;LY6Bk<8r962`5cIZ;zvOXJO3-h;~F*BO|M^T~Do1gfLPZR#%?
zM-|*!8^=LRVc+TN?ad^$X~`A2@)$GN6Gd~8qglaxFxAr at lQ)Rr0fr_(kiYD%@S)DX
z*%&rI9F?+S&N;t{)cLf)>!mrBx6ltH1#n-^dMf0Mj+vZs9I`JdFvwe5TIy7t8m-!S
zNyA^cK0&v;0Bo_Yzu}D~0c1z{-mb2$SPakAtG`aner#xvo#A9=uDy_Rm5GVz%9U=Y
z`)j7GpFI}@B3?U+VEIZ2l*k`y8;_{WHBWV#;&5-LU*AZU+NwgRp-RDMuv6k#5V3G#
z2oVbxyENl^X>#Vk93fO$H26w}b84)_>d|!TIwCq&k{jVZeS}~}j%{l`kvyC`(tJ+E
z=$^<R1oyRb$Jno3(|dgl^W>yc>0L0O;wM4k<2yy&l-fHJlT)XUN5~_J(3jIwUj~xP
zd_X6>Xrg06x98GoX;`k_EIR0TdunX#0%voKs8(86Lo~IaSKyn%fdid|O;=e1!6<DT
z(-)x25cTBo<C?7Og$sFt>^YShc*<Ip$(ixX8AU}!J;x$`vc1Ft6P1&MOS8RER(QK9
zfARUqK+YWaLAhebr*aF?juw5Z4rVX?TY(tS9==+6_tRrxr-^#;q+72%zMiOY)*9_N
z#~Wx1snPSTFBoK5Z3`sz^A|r@;|m~KTVn%&=0<}(iyAE5C-7ZtoSeGvji2dcqM8Qn
zVi_ljxsG4xnWZ>5&7%J0it`lE92 at N5x+O(_m)GgdMvp0+^tP?|IIw|L*1QVV%o#Eq
zpLiETEveqPz|Vk}d84xZ#V%X9M|HFn6<_rpbqOHI2HFi2r09+{9;k~c%y*g9G`qKF
z8$%@%usuEE_upb7k<rfHkyO><EwUdS=@`rkzoebmHGT0`&o~%1F2(BTc2wDqqOdxU
zJO!PA{NPJ7tnwy1PM at Be+uGC=%q<GS{IEn<!Yy4L9omy89XD2{$Ht7OuZ+4+GH749
z|Mep{uU(gsh}4T3I6A=O^2Z%*?TlBv7IC3WVSm!nT1l=E8s3?1Y?TTopqF-F`*54&
z9A4%hR;j<7%`NS{HtfbHSWJ|W&O!&4>KdMes^9~fSma at q41UM5?9hf2;HCIWv3%vw
zv%f25xozjyg=bK(HGZ&&=pF{;-#>R`^PHs+vf%pO`(BKRUkUP6eiF6L_iT?K16}c3
zwI66F#r&$)SpgyU4NLAP6c-oIjP6luprf^+h}lprB`<fYDOYT7%r-PMQ1n{x{H;Ke
zk&%G`3t+mHpXP2B8 at xg6&bd*LD#roqJLMrkTR8Cqz@?%@^q2_V`+kEaMj3HE>LhS2
zL!zpWF9VW*hlfX-g9+>xJ~ld#a{>|*6Tvx~Jks)Qe%^j;m|nlPQ3?fY at n|THm3g3I
zcQI<8prT6ULmUDGqg-n2V2>M{46a2GDc$4GH>hmG4&*w`7^c{=J at r1%<EJH#m244G
zBz9Zr9?aam8TL^n>>EuM&UCVuBBHsF1#Ee9F+|ZfXT{{C640)myLc^b6*J0hf(V*r
z>=iGDF$Lf!`TF&%(kss8IHQ8h5|Ed55iiN~uAq6y9x3CHzn<+VkJCCd4k-y|8(sIT
zbHLOdX1!@?nUR#lgfoxBrJbb(C1tuDEvO$%d-)tV#M&Mbu2TnxhJq8nR!d|~jR-vu
z<6~oqeY0E_tilwJoq5}i at -@$|(gd at Mrh$Rdur?P=ER_EfQRS}bXo&2wv9XX49LqTF
zy-wE_6u2t^ybUV9NmJ11^HZQrZ at XzW0d)}zod6vO-w=S9{^4E||8G%{dj at a_h@I&_
zbP#JEFd)QNh<>cCH3J`Vl#spPOY*%B)QMQlzt=*G53Rjx3k at 7^=!AauXc+>wv+(lT
zgmAdDybS6fGD(%7Cc*+*{jADwm=9&M@%wGW`rZKIf%7dZq>%S;nt;0H;-{4rXQz$l
zu%~Kjq*l4`;3m at HAw3BXyQ4At?a+{(aB`o4+7ZoXFY6(54Hnso0`>!QWGJWBkt0Wd
z%W6kO^`Uq at V5tJwkGx#yDxL<Dav&g0Q%^6uGW3ei_9odM0|3l4t0KVDg8+5T!jm-|
z-irZ-Qqt1JtITFo9+3JFAG^8vWPW~rdU|>=t1=4<%RSKM;-Tj5fRCt5PQF-e9~{NB
zSGogS%0V093NmWz>N10UkiG?B(F+d3=nZEumqA%%t>p=<kY%;&wR5r`SJ?2gxm%#?
zwlm!w28wquk>HPKKzZGH-PU7n^@(<>FK-lq#~N9hXlRJ>z3u|4erc%)Qagg1R1X*B
zTG;~T4Dj=LqpW)`K?l-Zt4Kn_w|HS`R&H+Yf+Zj&Tts4;-ND9YyC{0kB8~wH>T*4o
z at 7tPxvB&iZ!%#d at JX}4$dI8Jia#6tSlV`q2D9k)a<*@nzVvLWE1HE at v)Kx(W>bEEA
z7D5+(@L>O>q-5G6KtqWq9w$I!%A8J1OS?PkpqhXEde?U86L*tUpDNco9S4W^BHNxI
zSiCG89$UuFC_efOxvmF00c>C*QX`qO!xNK}lXG-(;xVj at e)sMHRW?Nibp}HQQwICd
zktaPF^(VX$`FbBvaBo}n$iM$f9ma8`e-{6*>ady3O{7PG+n}6n)_%0ILNbx%l6HYq
zS{HtxP+Boo#HDd8<1nIey>YHjY;2Shei165+fxamxA)dYMw+B)3+&;n6d0f%=w8!{
zO^uD?&keK35IOlSTBbq<FT)_KsJ(DDoBJxr$sSPsI|M)($f=c^oRWfui2i%3-p0mm
zS5t at snerkWas50_+i0(}>#79eb8V(azSRG?KMwkVE?l^<pOiEvI@*_lu at XX8tBj%p
zRO&F9po#zkT1{PoX-AzG6x2NFuv;Y`qoC08PuiWq6Eib2rZ!Y at Y>-L6t=s?S at LE$L
zkvno~o)@bID~lOVu3=Ryks`gz?)qtO&`7Rdf7Jb4DJ>XxLbUj625J|lojZ3I9D`xB
z!(36ch-AAuXK!MX^s)u`i-H1G-$$PRe1a@`p#3c?sso&`;Lg?8&)Kgq9(n|SD|u7*
zX|Nf{(6g<ch;akcw)suF<3O*Url?P`!ykpQe<Irs(L2n8iPq1OlapbBRF6xH_oqz8
zqp8|as~2s4m$Jmu`c0{ab{~Yxa}Y74Z{0#Jgn=2(UedwTgRGj at rz_QcX?L*jhA43J
z0hxw0udqF=zYYbYriG0Su#H~pKf(t!c%2Z&cHb^nz;J<^TS;spE+$6Nk|YqJskwxG
zw#zp;L_{{s3k^S<{NKDR(ni4v-VCO5=RS6H at Ls;W5WrK}kF^fZp8opvGSC5FIO(p*
z<pSF%@$1XKeWNyKxDoEx6={jGS_0=u!j-+Tg*|=t%>M at XF*a=oN5jA+_MhY_JD#!^
z3>Jq`YeP;}st65Uv9nE_VPXXC2mjOLZ-#U8A}pZO2$NHmoSE6!(xT{c%G=xf)E|Ee
z!_=)ATG-hU{-!*!tHN05rGv05N0ho?ZDnQZ2u_(yMIfxh#djv9uRjG2Ch|ie=+wS(
zL8Jhm3i%21qxQd4+=cs-6!r$bqYOT~O;a$KP6R{(jvy=#6q+~DOG|%AO=Ss4OU2CZ
zs;IhN5lmuY`ij6h6k**uoq>$}`Qt}VnVWr%n5TzFqA{`t!Xc|v-(NU>^yokD{@}p_
zsE9DjwiC}0u7t1*JzF#{BF)s)aA`StmWE17uN4eFIM!kiXZMGalKLaS?DtGN at 0#<*
z18kA^&68>C0^eKpC*9W^T*UJ#=NzHY%N7q*)6wI{?PjNS_<5SF!WFrqbfmF)wbK%-
z8xr4sEq<TbzXE3PT?w^NE1B~_&2um@${l)64>Lj3E)%l at MVsNIfKfvbGYIW41G{o4
zl`{St7SIj2nY?EL1HmQtPY4-chWsITwj3dX8unJ&&L at Z^Ahp4x?>?^roeOus!UfLU
z;NY%3C3BD_L#&)|*s+9#9lXZBHa2{Lq37BQnm*$b6R1ww&iCpX8Y-yW-7xB-rw+7e
zV#+PIzxGSS8$xmwuZoIF2*vI)*tI6PKCY_r(S5SECtvO^dW01R!4P>HF$H3`WF9Xs
z at 5IonzMopodm(_4^rYEAspCIh60{ZmCsKjU{brwk!Tt+=j<<-HlKu-cK|s=>i;YK~
z)9-oWW5j(7yiYSQY!wdV>G{8W38X#-n)voC%p&YqUtizToY1NC3zmQabY1|-G9x$$
zJ`9W5-!6 at U$AEmZgF&ijO$2C?FHz>#_b+V1vHOYkyH9(Uo&aJIQuwcdIqFM1;7Nll
zFjAq57=lyzRgY3ogv+|Qt$}6 at eowIIK{wXgh^I0O^b8hS_i+yxdw6Uh#y)-1$9tG$
zAaPR=cAE*Z+Yar03M1b7zihBO*90OmD&H^G(b=b`0O=ysT?uu=>gigrqZRkFQwB7j
zzj(1`fzAO54df#d;~>jX;KD;fE{elmdb6H5fyd`;dHrK at Z79glFS&nRb_D#i$zhpq
zsw|N<$U)<S$0!4In4v2GDia9m&?V5DO8`5)u?_NMzaEo19*-s at p}~j<Jy0F3#Su(a
zKo{ZK%v&PO($Q23T<6bUpY8)<zPl4z1~jqCx}WY4UsBVksjCAhy};S_ucFhw1W~)5
z2>mGxE`_MyE`{P%=bVUeGwf^vm4f2E%%j+yS)Z*uaD0Lrb{u at A#$JKNIXA`W(4|@x
zX1A|;Z<drQi6QkLVpKX){-}N*rY#qvtS>lRiT3o9QUs%?zf#&DOhV)}mzj`SwXU<%
z4^}#)Z&DvQdK5akdd31 at LrX^Hq~LgQXlN)64NZ`GS%8j(p at BhcssDX&z!Xd%?P99`
z{s3=`Jrs99TXS%5%)CuUj6INcFJEqNXt4aX at D1AC@GrYD)FnV6K^3GN!FN+r?M9Jh
z7mIDoZz}o-AS<qs&d%OMDqI@(5&1)VtvIy;8g+;efHzq<bO9Vn#E!~66M>GEbFqz8
z9X;T>X&jge?z6*1pyKaF63-et=Wk%6*jeJ)2?`EQ>YEJ?4hA;TY(7;XBJnKaZg1}I
zYYQnM$D=l;l6Xz(t_ll7asG-?d>i~$PS7fF;TbF+3GGKW5vq;J_A)pv8p#kLc6Usq
zqDEkcu(dP<v)>OS#UZ;LI(=g9!^@g6d4P at pZ=`r37bDsx6cLQwoF=-LP3p+y4*l~s
zWyaOM$Les!;EDT>moEV3d$tTC0&Y=-58it>%7C4X4t%)2IBHs2xrlglkqSNZ4SF2-
z7<u2#O`3R{21Ah at 0a=EY01y!bX`DHKEd(l++qd5a1_p+NIKxUN1yevxf>csXvQ%mf
zD>x(K(RVeVI~97^DjV0!D=O${Y1t?-ZTDUz0fq!LE+n)DOa at Sb=KD(N{3ZQw`OEq%
z93A0(f;a%ejA0+iA&yxkOBjzjJ;0gl?CkV(nOg&(vZVgY7;!QVEE-P;kFX9??dMa_
zz)*x7!kNq0s(>e0LxcIdwXAFd_z-sv{ZC5+j;!|<FcU!HS5=AMd_)+y<8Vb#u(3X~
zZ<dpj(?w)h?0?!SV76}<K#vWym#G}Lh*NaE)3PH=DdCoM(?t0U4oN{aArJ|n>S^4E
zPpaM at pAwI*IRs)nm>)2wFmL*iMyumTq3O{4oFLMBSiS#W<_CDxh(7}HSs<qkAodYh
z7E at Q-QN~XSkPGwozNx;~P+$MYv16-iYikP&4-VMSWPE}Z43*F3rWe>gq$iIfCW+gc
zJI_ESdCmzHB0KO2<>i~^`DV$7z$7~AO~mgbJp_V#ACTUCeL?~P9bj<Tbz*pUXhUB;
z>?&X!_8ArMLu)l~KkZ<tKXJXnV6?sc?ji+k0&+*Y1`Q*5uZ2%!;E9t7(&w}6OosZ8
zw+a|x=!)PKhry5`cO}`zl@%W!4=LYB#?}AoC>Y%!g at CKF2I<e5+kOf~-Cu*Y9sBmp
z0i+}H25wme1$tg%DY!&QsWnHp7>I5<Iyy@*- at uf%OE$?7{tzqBf+}?4`*)|m8>j+C
z!OZ;oc0PJHT0t8Uw6t0<Lg!goNlElIcRpAmoSa#p`fYwhau10wG_dtQsA1s~1_BYf
zAqR^IVqlyMS_j%=^O4r&V0hjcT4T_%R6QXlTfjg`84UGkY^=fU+lWZ|`!4%K35TH}
z5c(kz6bs(u?bSS=3g_vdaquQTrh0+67sv>y=odg!K)Dv1fe!oJyKDLcoKXcOHsk_#
zcVVtmyM`nn8M^yQVe(CraMY(y3qY8F^-M<Q_m4K<ixYy*rTY5%jwESOQBfk1I6qk2
z_LLeNTL1JZ(Ln=hZ;tNl%*@~3fm7i&c5q+;@K$_INXu~}|K-cKC(=?=eV;xh2Zvda
zs8x45)aO*EPiv<Upv?W1l~<{%>;kU)ziu^$z>bhUGjHu%aID<S13-RCI66AQPUCO8
z#uWU$?v+|@YPJ&6%`=Asb4t%R6!$tkmEb<pVu4oM=-60qD8d%SBTltJE)GjU7zG9B
zp*IIn1`uLFE0V)S2EmS!gfj42nNn#0g1;3UOyOL*_hN9Yojf?C at hyOW^hARJivq$Y
zxPB?Yyb$#E?Ojfsmb&`IlPm*WE6~BCgs+F*m at 8ScJz0H7!_ASu%ma11o`FytoJ-Kt
z`R?7BP#k1(u)6|c%o^{H4k$- at pkMbJAR3n8_-Q;iAfhcs!Ef>$BJ)IIB;~*C-xiFR
z7eS<Swbj*392||B7#^tp%sc at NS+zp+!FG8 at _PBd`T8l at Bc@{N0I6K?GvQ9wjSk+10
zx at 9FVzA?q*gaKO at H04;bLle1A-AkHLujOM9{0EdB7VKE_KmSCmKXB{>u)~#=1|lA%
z{Fpa|XxkV(z~k1ow&H}!Er7!ulb|*EM>6%AWup<;pnR_-vL}pSnUTT&%$9uuU_-N4
z@^|o3Li2l&jXvi$2n0h_K8(A`<YDVfD{v`)8NzEer&=M?wB13Zh%#s#@%244I5YT)
zXX!=RJEuT5SUoJ<OWaV`J<tU=wAC~M9?G3T0cVLF=labipXcN}`uCgfS&dlri{3HX
z$4SHHGr`kA at AmYXpzaP61Mpa|H<7Mq3ZpaPo$nE`eP7MNUFKH at oos@zy#s*QK{u~|
zl<3Uxcl$_zGYC>MfyZUjpywajzk at Wyhrk*sCk)=!7IrQ!XwU;{2jh(DTrOX36)kXv
zW_`y6e|U-(j1uN9=6q+6zRyzo>1Xc5YcS>5_DU#Ti#@NJZt>iQmeIW~44*8X`~DE%
z{w<$lM~gQ0hyRw!HNF3q%1v#j_ZmpdGGIXw_ETRswF8MAN?m|7K?e{PH^LoW08Iz1
zqq22-J;K({fN(&t329kpC0L|+#iwmSu-hAyWduE+sSNlfDCP%i7fk29w`L937QB&8
z4OslaKNTv_1{J;`aL9-x at s!g<Gw)7LIRRG;I%&F}EvzNQU3k at wiWe<phLr at 4H2A1I
zenS1W2-)f!9y)XkeYRX&W)0es|8DNcPPB%m`Q&d51u?I_O>A#Yii<DSP{IQa76unU
zbzD1YmUZ`335rmNdZ^2B+1Zz%s;UGdsrJpje2WgG5ew3WKu4Y}H{jOcxpI)hL=Ixw
zG)uhJmq343p~19`?e&Os#q~4)&6`>nu2~xblaZD-*~C*dB#>ZV@&P<j?06z!(0=+<
zJ4*Nbp3t05jx%>)QFwPBnu9ke|7jzMD<u=*;Xxp4sWkE80p?FrQx at w!pB^8?%^m`i
z0_?9s_vL#zQ&{O0keuLn1^nFH-26NuE^uYIYF!@ElaY}LppF2^;${w0^$d8$d#v}z
zf{<I?cK}n?{qA)xg+-hth`^&jQ<1^_UuumMu*R&Ne<Ic~G;|Fd_*&2!3A!~Hv!TJQ
zv8`?L6&c)?g&}lJ|GFI at YWsH=rkO5SHheYHD(jg1*pa5nVDr{!UZ-bNQG>w9FAktq
zRoh{oUSws3dgI!1Grup-L4k_DhH&!aNx)a4^OqU$vkhk8N|=S-r-%sIaAWg&i>V1@
z&ldr~BFpFq$2>sUl$pr^fxHhaeSYWm#7!HQ43YDFW3wW4aibBJjUGpEV)~=s6KH()
zvqAVI9(X&QQnx-owE at 0)i46<?J2astCMNLY@`C at PZ{~|JS^edeUR`@(QBl8V&p^5Z
zryd{Fr;u(-O77(Kb=~Nw%<V<ESV^*=`{0K!1>YfXrC94cV90$n!N0gyLe()23ckM)
z&_ZJ!M>z2lXzp}jA^VZ;)^m{tR^@IC`ivs7NEaUCdo<8^_nO~9tJh;doH2g=BcPl7
zxU0)h at Hhu)RYKa0vov!y<_g=$MH`@M0BaI}17s8n3-_n>x*LRr*<jHH)*vnVUDKwm
zz!0V9zNNK_`<utGj`KfFF4UJvU=a7#Yk|%^<?d)YAv=r2dmb5!BQDP9uQrHD*o6lS
zPr%zlCl}-mkYj*k7IU3 at _Z+BLGKz<`7hG5cz_iFDmQ3ynX)d^<2-K8>ghv1kT(Ex|
z$a`j24!mb}x$X+?$2y$3*RkT^tdF=OzES+k7xFNal+^CW!W+ktjFns}oI1R^Z`bad
zb>sD0sIpUzhMK5Pe at V9A+yLTrV<xM_=RTFqF%1WV%7EppsMyljSPC%*icYXYk{3Yg
z%#+8?LpliRhEq;@Ora$6uw8=h0Rs2s8Rn5^JR=;I54+Sc?QE>H%bZMPw;Ma9GEOfn
zEXeFiUxW~LwU><37S@(W at z!o=38)tu8;>aef)WGi;om&R$~p=5Mc}~T5CwgXeil_X
z)hA#o5Z_#ogv@$%3p%Rt+v>moy}}iHtj-uzcmM>T86l at Wb7l&_((Ei9^m$y#eYV@(
zapA%ZO{cvha)74C#zh%?df=2}HQKiG;74P!Y;ZTH*5=mMD`?p3RYeZ}5ZD_}CU9zD
z-&J`@Eu|gvIhNcYgbn#D2;~c?*TN$MH@%E4*x53)c|FU-dw at kwA{;z$Kq2~S$L4Bi
zkJ$FF?-WHhq=kS3<scO+%&s{M9J-aYHB33oQ|)P>kA6PdeZXw1>3y>|rvRsVK3+~h
z_oky6ew at dGb6kSRmPJ-5ag(y2R%aN2r-+>#UgRu;ZmX31{I`yX5xXc8srX<qJ&L$w
zSa}Wn$h$9FfJNycc+Ck4l9Eq~i`V+!o3I~&Jq(su92uCi&DtysKR36wre68WnjX&=
z5;}a6mNpY(-x4VhatL506ccz-aC{di??wL*WX-9ZL(mf*XhY<wp$4Ffis{fr78X?&
zczym;fJuA&^*1DUD8aW8lZ*y+AvNhhV`CBY*ZUgn{7FT1D*~+Xm3|zr0X9HrdHM1s
z(8FEOJWld&r#TI7z_2mX+!1`#V3&ivRb1?*{ObT0?ASZ>uulH7;q2dq8Xu;xDnz60
zA|GGpug4NLHkX(sp*}iG4_#Jp+5&*Qq&Xnx)&5mN`YZdo62c2+A`m;x9U|aV<pyMo
zWNBcV2KAz at FDNJoRI%-2 at nwNmLo7nxh17@qGPN-GVb41IoSumFAm%}Be~@QCSna>R
zNJ5&rG<Tc2GP<UJ?)%4)e=?37KgVO%L#kbDr>{%l4dG4&h0I!l#kO)JNhuu{?cRNV
z8JnLU4I@;56D5QK!S at dZRd~>FSX1K*k^RWz=R1M&=85Cno(3cQ%pd7!(QXv<l*cGZ
z-ywPT6{=)lG?IT`-d2RQ2j46Fd3x~SVTd3T%@J_wRmf?V1JFWXJqjrZJRow&FS=C`
zhXMFbu{|nCe7(!1Hnp^@E-XOFaE^~ehZ&A}7#u818$SB!vaGg>v;=-Ifp8cwE<Ffc
zp!fhleNI903bKVIgQH$IsrXdQU)QA(4nxcY%7Cj<=U98SgQH_4ugNVrxg!kBw>7&@
z?DAJ6B;>)!sNi%r<Qy~!_=H_wzl5}`_C6Ra95PpZ(d-~{_1>ko;ph8EE-R>NN-)5(
zCiw`T_Fpgj{hr9rkx?hXp-sOh0P#3GhlHH|fBaVe?ZV&h`Txc64+9qlwKKG+0Q7zH
zkc&y+%%6Y4t^zBs at -7X~j%u8#`XA?~?2s3|{NLxN0NV*v{%(Qxkg&Q^z`@SGNFY?+
z|F-|LsX4ufvjyZ6SfRg-tqC7KMC_KNz?`fO75ui323{;P{g-_dQl+ss5*|o^0m_>U
z(|{9|z)x`bVwqI5JuEvo1qy8M#@<j~yZU^FbqoXoTbAJB!a|AL{8?YqaEK$X&+uM=
zpF;|ODip{+(87Pe<5Yqfv***Z1DucxK^X-p$4f^C2P}N;JXEVl93zS6yDM&nh1Lu>
zK>|bZU%ZswcM<C*oZzRb`KDir1*$F2^(8Y*+m$x)o$|SDXneF=41sLXt-B&<)8Ae}
zWOIM+?=K6PaMv7J;<JO=t+&+=&B^WBAh~pl;2lSyq6XYhWl-uo4Vf0Q(eE+m3*ptk
z<w{LOm53J8{;QASZ{H%o8z524KBBP7=$u*DL;6W*=meNKSs1AxFR$i~oac2+(Yin1
z2vqR5J%B=MN>PvnO-^&NvAx}agS|kw;aUDaxEN<x;ot;Nd7%1nc6B}bPgB5wByeRY
z$Ii{naL9 at QJOR7|5uUHN5-PR~wPYB+m8F+gd83!JGbYmH0tLVnq_-LHO$Y%fO|$uI
zX(DtfZ-N&fBTd9vgyF9_(IlP%GlIQKJ#>Ep;EA at xQ;t9#(a;9o|DNQlVc(8O`jQV|
zEY-j~5xI^W{?YtT_v4WKZ at -`(axNDWQp5-516qS>IG{R%@x}he#Q%V_9G-H0<k)$5
zYYtWf0#`wYx0YFFQ<Hp-%>{}`0Xe0b>re{;P`4HPZv?<?8Xy4FxI^E*Z9j+;f{yF1
z-D4D78o5M8b#wBe)v@|C at RUh0E@dvWVG6Xlh-J^)1$f5YLpu6ne}x&{Lp*d80M>Us
zbQz&*a|0$`fkOY~sE>ZTvo-t8-i+`3)eDKyutdx at Qbg~~MQJ3clc*oU^HU3y4zj`C
z2C}p_9{om)@Gi2stxbzFTerCN{xg^?Ys<R2x+1JJ at TeXYBXG0-K1st@eCWN2pWF=a
z9#*Y@$zEaYceb~zreTx(eF{gf-C3#Bo*i&jsLAS=KiKWa2Qs8F)3cQT9f<)Z*iy$y
zOG6Otvv6q<y|3tmbb3(LUoO376t{cuqV<eJcDR8@!<R48g9Cd^fFbc4a7>-X0ICda
zZF8WPwR!#j>g>wnq1^ZI$c;{1?#XGxq2-{GbVAnfX}2aiWC)2NTaF}QD4q5rYca`o
zv`}VTBTHqik7J!tAr0AXb~7f)6cg_APJQmV_uP9vpL?&rn$NuR&ii}c-~4{h_xV20
zQ%lC&t!3NL)g0_cuR*(qkkXS#z!IYdys^#_{&fu}0HO{uCpuvQgp5UW<xE?CYriY9
z2rsl7^A?OjeQbHG9LYyu<2F>INQCv#-2~*pVzfE7cmZSpk=i#`-AI(&^zIjI2mm#0
zF!I1>)x!5L&J$=r570$ZOIU5L<`fnBITlPyI5kGZ?tyJDD>It72Z|BT4{4WR=Kw)a
zd4k>))%$}eZc%K(?r3CW1i^VgPX#^wsrOX8ObroFu{7<wH4Hy%C6C;c+a1pci{zuD
z{;|QLwFO<CA;K^9F2v+lPe&eMe1}*A+7QCG5q}S*mE%rfYolE{Rp5y3KZw@<90(zj
zW4YFwLM-1W<xGgETzUyy at KVZI`;K+mJ?4AVwW%4B6MNVDi&R%Z>xEZ{27u^REd5gZ
zm(kQGd1ONo(~qYdzUe*$e<}0!E|_uIz>lQU4W_Z{)PH-0%P+}j;g#i25WPqe3DEK%
z{wH9>rGSvcYtb8=H~|vaKC^(&IGj_+FM&d0Bk}^KE9YnVo;v`bu!Q at t00Zwi+`I`}
zN4S3j^bnv;zy8Z#dWVNstXT08X)7=}H$uQ!U48hoxcaEnvBas*MYcw2VjBt#uM`@3
zd<a#z?@(fdB}>(%>xF$W0gCa%F)(jf%=0~mMPF7{*6b}RXlS@$QvqmmDfXjn1lsnQ
zSWt=Bh=yC}WrwLS1;u4(FaZu4{Y&TlT@*~Km=DtBR#b}BZ;iy=^h}plBSeouFat2?
zm450DeYs9*9idUf9VZY<7L^`HqvgJ~c#sQXy~frv2pH_sw6bd at oUh4dEJl(*Ur+Di
zPxbxKZ5^;B>|+r5jWR^`qAbCsMJP at jSYIt#6sIqzY8f{lW74<`^YNt@$I?qd#MmIL
z_Ez4ritEEuVR+s=h1Dp7GSD&7?TN^~o{oFV+GlQl89t_YBwW<n2#J_Pori>DJ6exM
z_=)bL4X}5I$S+;|Pk!ld6cp~i?7_N04x1db;&I)ikk3e{DuMq`Urk`nMDe<OEuBs%
zS4~(wwA-^ZP^M%=k?r~O#-CN1Ov@<Nh0A at IHOn98tlqsO=DFwP<dwf at nM-@D4WO}i
zx&KP~y0}kTI#A{CneW9`+j4hqQvddY#lxlK%!%omsPsFset&JuzS_bc`XM|-j~B_)
zpMCM-I`?rjexcA&8bjCn!+xMfOoey*tnVJjV!-qO*$O+xH94$+4CMoyp_wCw4g#8`
zsy;L-;WgYusUZJ8!f@=_gPvUL48lZh=SOFjmC`u6!ZuZ5oiS6EBxz3BC1BlwBN8R|
zhAiivxYUG%UmBWvdR(pRIH^q)G|hJqNxLH2W+eT7d7a^q=#!*g)B3!+iuvcTE1 at U`
z+h0&#PWAKSmVf9 at j6t>9C39g1-K~f$E-wDV0ki8TLPEMd1ecJA=;`KW>TaF34Wy#b
z$>4n$6;WZ%Huz*)_lxiU<>VvK(z}NCofGmadunUFphCb>ohrELxP5!{Xd&=Msb*yX
z*Qp}n6!12Z=`u2U#AS`%B2Um#NJ<7NJtejYYh+=>>BgH5sob at Ah~g at RYlMv0YBw9P
z<ix~DHPJ2DyOMIdo?F<-1KSjI2 at t?mvp8CGc+z2ea-;Fo{s=%3cn9${YwG625YY$j
z$3vMTN%BxGoVlC9dur0;tt}xbX+dZ-%milsiBu0|lI?l!<ZH)~V1xT@=Btm|A~y!s
znvjrU55fTB(Nk4L3SY;OJe_pr0^0{YM+EtNlYm$?6}oGs3o{?A4>KQFlemz$Egl&|
zY#-1)jArfg*Y(oaSOU;h97HN$QW6?b=w?gH$S^M?P)U1Nh7RY!nF+(n%&3!hJ-F0h
zgF|F8IUs;h?S>Q$omAG-r%$<A#1%@U8>+8Ai;P4sq{hX at +F8iE6&!@8k;msF2M3Ls
z^o$Htixh47&dyH%tqNZ*c!+K8qlw0efdQEst1)PZG-Kpa0<$V at 3u~QiaS96$=Y<&l
z<KTwAz=QOcAm2YL?ojNa&-Ya|WOr{;GWv at Xoi=M~?z_Q<%K(z5Wmh~AujB3>y)B6=
zZrV_F+zTLB$H1TiqW6xD4FhV|0s%Zwy*;V?#;sz%t}~=}7*}4NwtNiW$0(0i#PNgD
z>&wTpy#@mHpeRA7`?jp5s-3^TKTLL505^PZQtz);;&$jz7slV&(Q#`8k}K``17Du&
zja1}gcJgc`(5i-gW=Ryhb}>=Y-%iFn>O(RGi&FUd1}1k<qdCWSE|>Tz)frPx&<Auu
z+M#=3U|^uF{T=;TdwctpX|n*shYJTn9&r4YyhnkY{wxAFKaScoDxq#edlK>H5%1NG
zdSlWmVan1fC3AsTujyBmg>l3jl1Xy2Ct;%9k}h0eiW+bI(>#2TWZJM<9g`0eqiON)
z-xk>5S}>;<{*{;xdN$FHV#Hh}=Dz!)-yi({pNqJhs<L3%ST|NhZA0Rj?x)N(CXJ*s
zQSpkbI$)e;f!HdvV{w(Z9vqB+oW>KyAn at -0^ny4W2EY|3hW=l^;Or5IovtOL42iz~
zs`SUTlVbSb>D@^98S>!}&HX`foQxFn5qT?&R}ttS0+=*O5?9<&5W?%AaXtW!X{{u_
z)w==I3x$H6p*BUD7=ZR|I^CZ<ITHM+ukWy`=tT5OSFRjyt^nV<Sx)qsXJAvi3iClv
z(TLHSo`p^YvdaUL=YIOh($ezFQ7uGx8k3JT%R`=cHqX$i-*}CRWyDgPxRx6_Tel*p
z6?yL~7mB`l9Er3*r0z1Jqf4;|BYt3zxG^NmA0k>G*GJrF{1fLR5jS7-5J<$G`&c=H
zz^#)29pDAq$Ci`c8Zr6U=?zw|&bod396rS|fDT1*0<+XgHL=ZSR_^prJhif-Vy^3C
z&z~1BMs2)OLE*TbB23m8mG>U}p(Z?fbiHgiX(w`v5Ny10*_EF%S(Mb2lt6<t;-G4v
zV&;)r8KqHDDFXCv-MM2vjY=x!>Q(dUcq%D#As7*`_I*FfoW7#ngFfga@=a+h%KA#g
zi#d&cWr8sT#34zC#~Z*g7LJY_u%h_0Qf)!A>B9N*s%mQZ{iJ+=NUG|rBIzX75s(9D
ztbrlJ at Ah44R#$);)_<;erjGr6omHz=nV8H2jPA}ZKu)Be-_IC1Q&tzr=w{SFvaheY
zgLuiJhid%;11qJ^Lyla?0in1Zca|f`l<jD$Kru!*-(c1rUxJWL3^I<oN|?#w5(!I)
zf&se;aRl979go06Ilw$P`27QZ-Q|lH;|35Ia#926<{$zOv9phdRfQuc#d8{4rq|Zg
zfd{d%&6sD<U}Ke&0}I(sM8iJ^4Sr9#2aUP0zirXdLJNUk`UU}&YMqv5W(A$RLg$#H
z9)<7rp#`5DgXh`N-tJ&8oWsruCL3)1LwUf_Pw*RdMfLk6haPdV*tf5z^hY8g^V8T_
zS>qH~JdKPZifBgQYneOkmE`4Z$B>+rGv5X4NGYF1qk^&k2{L-<TP%8_ at qP@?pkN}v
zEQ{E at gr&B2c3pB_2zLj4j~&vd&*@mXij*ho^5w;58GxA9jTN%SA5Gck&z%E10w`z^
zQ}1|m?cJ7BG0lQp8#zQ5_kprT3P2XS;T<+uG>Z>f!<1pOy^p+UBCJFJl;4<uN(G{A
zI1v$Eb&$P#*RI^FH}&PRpXY2P;B$@!krKoP5Z}Azcx|ed5PFL5gpqU8UiB4obCH-w
zb;h6M@)-f$Wsde2uU-vluE10~<YT4*Rvo0z^>g_ZGxx|r2+97yg^Pokr|D%P<Z2ad
z2fI(s%FOJ2#B2r@@$+k%-Gd93)F;HiY$bI1agC3PDFp{xUn17!L{Sk8@<mVDU8ATq
zv_;nvY^#F8A|jmICKZmARhN&;7xJOxNT3qAv7#w5$KYZ<cY+Xr>e;`fYcQ;Dit%_n
zsF|=6w9fz=_ at sfo$WdYV*>X-If at 7gW0dk(k8Y;s1<qm1r((O!aU0pT3!2i6~)f-aj
ze)UpD$tdS#B~%pTCCbWCHMEP6^yZ#G?(NWJHVTCC6QZYBs={n`FF>3^T>=U+gy`2L
zpb9fDuh8f5UpXs$ze3t)E&2~WX22}r0thdk%swno2!FBv+>NoILs^t9w0=L-y5Tvj
zQ<rp$i(nSdof-&ZHyMARExOzC(7k4{BVqG~2BqN=K=*ji=ect-0xGwbFm+hdG~!?G
z=P~^_Oip3`-Mh6Y<d;<lI(!Qe`w54<%bT{+dYjbACHcO-TCV-q*3hQc at E>sH(Cucv
z#^x%*sgA#$7D;UzTroph69xw<Qy0R3=@4_wSe2?GbUrpxiWc_3kB{hd4MbgaI2m*!
zhC*N6$vE=U$Kl}|XLG1`5l1|8q?G3HMs<fj+oG(So?8+;JT-&zn9a7Hl88TgY$Sz7
z#UcXfhrjug{gH8x6+b`1Z)GkV0V4;V3BHuza<w<;d!jiBFn}&le7c>LR=6NnHZYzC
zIrrX#bvimf6j=uaF at 4hjg!U+%+G&q0)$rl03ofXLFak%$uU3>EZgQwN at oSAmIiuXW
zL`f;KMmCUksz`3hlGZyg89$kg5v^V1#I!V)SF4rqX)UtK##e}LbIJ$n4C7h0AwR`Z
zHI)T_4fvEzx&Z*&t*uFFu{8lD_)j<**V)s_12eb0v4 at xn4o7}qok93F-3f^TcUwk~
z-eEHP-fk*BRLP=zoBrm_fk-33-)l1lWMawr`I at 4^lVY^wV-Q&sVFB4vjP>0 at GTn$R
z7Ko at dX(_2UhNr|#eL*AIkjV{i6iFYJ*P=nD$sux6IPI at rTVktT#_f9CJ~drJ>J2sk
zDTfRf8eF>|9PI2`UcA_%r?;1Y8!%3zNz_)7xuEI~a4p8|eMYed0`r at 2OB)-rk0|vP
zY+Tj|DGh)e?iylwp^Jvk;pg2)Ab at 01fUixZZV8a6mYtp5b~1gzTT5sSAYF%uig4o!
z at 0K8&se>1S)#E|cA46G^(IxH_laF*yvq?yQk%3U{UI0{%BtYER%!Sx7 at dZE`2%xcz
z49YV>P#4IpKG(&hP>G^Oa4rhc=V8&vejbWdw7c6Sl{FY_fNkv=TP_la9eJ8TNxC#k
z#6w_LL!@ucpL)$a@{_5R48}MpE+E@?oxSK#XiSMPtgc1mwUSO=Py`=;TyD}w2;hA_
zHS$SDXFCS4I|0EeN=isb^rx(<l<T(LH-)YE?fiO^>9j~FC4z&4y}kEd{RriK`InJ3
zeqBW=tj~`IHYg!a5=WOD$lS89N~=^b<Me5GCjmS{|3u)8KY|~m-{TY!#{Ew~<=>7J
zopKdw*55;#e?IbUi5K`7k~XoOe?~)@OXtNH5{i%GH>}%$cSvTttamcDyG8#U<DHMz
literal 0
HcmV?d00001
diff --git a/user/exe/executables.rst b/user/exe/executables.rst
index be57fed..772c28e 100644
--- a/user/exe/executables.rst
+++ b/user/exe/executables.rst
@@ -77,6 +77,8 @@ built with ``make``, ``autotools``, ``cmake``, ``waf`` and more. User should
select a build system that meets their project, system, corporate or personal
needs.
+.. _MachineFlagsandABI:
+
Machine Flags and ABI
---------------------
.. index:: Machine flags
diff --git a/user/exe/execution.rst b/user/exe/execution.rst
index e05f788..281cb5d 100644
--- a/user/exe/execution.rst
+++ b/user/exe/execution.rst
@@ -2,6 +2,8 @@
.. Copyright (C) 2018 Chris Johns <chrisj at rtems.org>
+.. _TargetExecution:
+
Target Execution
================
.. index:: Target Execution
diff --git a/user/exe/index.rst b/user/exe/index.rst
index 136a410..02dab19 100644
--- a/user/exe/index.rst
+++ b/user/exe/index.rst
@@ -11,10 +11,11 @@ Executables
This section discusses what an RTEMS executable is and what happens when you
execute it in a target. The section discusses how an application executable is
-created, what happens when an executable is loaded and run as well as
-debugging an execiutable.
+created, what happens when an executable is loaded and run, debugging an
+execiutable, and creating and dynamically loading code.
.. include:: executables.rst
.. include:: execution.rst
.. include:: initialization.rst
.. include:: debugging.rst
+.. include:: loader.rst
diff --git a/user/exe/loader.rst b/user/exe/loader.rst
new file mode 100644
index 0000000..c5654c7
--- /dev/null
+++ b/user/exe/loader.rst
@@ -0,0 +1,864 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2019 Chris Johns <chrisj at rtems.org>
+
+.. index:: Dynamic Loader
+
+Dynamic Loader
+==============
+.. index:: Dynamic Loader
+.. index:: Run-time Loader
+.. index:: RTL
+.. index:: Libdl
+
+RTEMS supports dynamically loading of executable code and data in the form of
+object files into a running system where the run-time loaded code can be
+executed and data accessed
+
+This section describes RTEMS loader, preparing and loading executable code into
+a running system, the supported architectures and any limitation that may exist
+with an architecture.
+
+The RTEMS operating system contains a link editor that runs on the target. The
+link editor supports loading Extendable Linker Format (ELF) relocatable
+executable object files locating the code and data in the target's address space
+as it is loaded. An executable object file's external references to function
+identifiers and data object identifiers are resolved and any external symbols
+can be made available in the global symbol table. The executing performance of
+dynamically loaded code is similar to the same code statically linked into an
+executable. This is a core requirement of the RTEMS link editor.
+
+.. _fig-dl-libdl:
+
+.. figure:: ../../images/user/libdl.png
+ :width: 95%
+ :alt: Run Time Loader (libdl)
+ :figclass: align-center
+
+ Run Time Loader (libdl)
+
+The RTEMS operating system's dynamic loader is not the same as the dynamic
+shared library support Unix or Windows have. Those operating systems use dynamic
+loading to share code between processes and this is an important feature in
+their design. RTEMS is a single address space operating system and that means
+there is no ability to share code at run-time. As a result code is loaded in a
+similar manner to static linking removing the need for any overheads sharing
+code may have.
+
+To load an executable object file it must be resident on a target and accessible
+by RTEMS's file system. The executable object file can be a single file or a
+collection in a library stored using the Unix standard archive format. The RTEMS
+loader supports the extended GNU format for long file names in archives.
+
+The RTEMS developers do not see dynamically loading of code as a real-time
+activity. A system should not respond to real-time external events by loading
+code. The loading of code should happen before a system is considered available
+and the activity the system is experiencing is low and stable.
+
+.. index: base image
+
+The statically linked executable that is loaded and run after reset is called
+the *base image*. The *base image* contains your base application that is used
+to dynamically load code, a global symbol table, the parts of the RTEMS
+operating system code used in the base image as well as functions and data from
+the tool suite libraries and packages you are using. Only the software
+referenced is used to create the base image. The parts of the libraries not
+referenced are not part of the executable or present in the global symbol table.
+
+Application software can locate a symbol by name and call the address or
+reference the data at that address. A function identifier located by a symbol
+does not have it's signatures checked, it is the responsibility of the caller to
+make sure the function is called with the correct arguments. It is the same for
+data objects, there is no type checking. Symbol versioning is not supported and
+supporting it does not make sense within the RTEMS operating system. An RTEMS
+target system is closed to normal users and software needs to be built from the
+same tool set and header files used to the build the base image.
+
+An executable object file's text or code has to be built for the target's
+architecture it is loaded on and it must be built with the same ABI flags the
+base image is built with. See :ref:`MachineFlagsandABI`.
+
+System Design
+-------------
+
+The use of dynamic loading in a project is a system design decision. Some
+systems will have strict requirements where loading code into a live system is
+not allowed while other projects will benefit from the system level flexibility
+dynamically loading code provides.
+
+Code loaded at run time needs to be resident or accessible to the target via
+RTEMS's file system. Targets that have suitable media or a network interface to
+NFS servers to hold the executable object and library files are best suited.
+
+Dynamically loading code uses more memory than statically linking the same code
+into the base image. The link editor maintains symbol tables where each symbol
+is a string, an address, and some additional data. The executable object files
+resident in memory each have data to manage them, the memory they use, and any
+dependencies they might have. The link editor is designed to minimize the memory
+overheads however only statically linked executables have no memory overhead.
+
+The link editor relocates the code and data into RAM fixing it to the load
+address as it is loaded. A target needs to have suitably configured memory
+available for the executable object file to reside in. The memory must be able
+to support read, write and executable type access. Fine control of the memory
+and it's modes can be supported using a customer allocator. Examples are systems
+that have a custom memory map, specialized memory for the execution of code or a
+requirement for read-only executable sections.
+
+The load address of an executable object file is determined by the load order
+and the allocator used. The default allocator for the link editor is the system
+heap which means the location a specific executable object file is loaded at
+depends on the memory allocated before it is loaded and when in the load order
+it is loaded. A statically linked executable's address map is fixed and this is
+considered important in some systems. A dynamically loaded system can be loaded
+in a repeatable manner if the load order is the same and the initialization
+sequence of the system is controlled. A custom allocator may also help.
+
+Management of dynamically loadable object files and libraries adds to the
+configuration management of the hosts in a project. The loadable files need to
+be released and tracked in a suitable configuration management process just like
+the base image is. Executable object files and libraries are specific to a
+version of RTEMS and cannot be mixed or moved and this needs to be carefully
+managed. Currently there are no checks an executable object file matches the
+version of the base image it is being loaded on. These extra configuration
+controlled items add to the overheads of a project and need to be considered.
+
+Dynamically loadable systems have a number of features that benefit some systems
+and products. Systems can be built on a base of trusted or *golden* modules. A
+number of projects using a common base of hardware can make use of proven
+modules reducing the testing and qualification overhead for each new release. A
+tested base image with libraries for common and available boards provides a
+simple and fast way for new users to trial and use RTEMS.
+
+A project can use dynamic loading during development, shipping statically linked
+executables in production. Hardware used by a development team can have more
+memory, extra media for disk drives, or a network interface.
+
+Loader Interface
+----------------
+.. index:: Loader Interface
+.. index:: Loading object files
+.. index:: dlfcn.h
+
+Run-time executable object file loading and management is via the standard's
+based calls provided by the header file ``<dlfcn.h>``. The details of the calls
+follow.
+
+.. _dlopen:
+.. index:: dlopen
+``void* dlopen(const char* path, int mode);``
+ The ``dlopen()`` function makes the symbols (function identifiers and data
+ object identifiers) in the executable object file specified by `file`
+ available to the calling program.
+
+ The executable object files eligible for this operation are in the ELF
+ format.
+
+ The link loader may load embedded dependencies in executable object files. In
+ such cases, a ``dlopen()`` operation may load those dependencies in addition
+ to the executable object file specified by `file`.
+
+ A successful ``dlopen()`` returns a `handle` which the caller may use on
+ subsequent calls to ``dlsym()``, ``dlinfo()`` and ``dlclose()``.
+
+ The value of the `handle` should not be interpreted in any way by the caller.
+
+ Subsequent calls to ``dlopen()`` for the same executable object file increases
+ the references to it.
+
+ The `file` argument is used to construct a pathname to the executable object
+ file or archive library of executable object files. If the `file` argument
+ contains a colon (``:``) the name of the executable object file in the library
+ follows and this file name may optionally end with ``@`` followed by a number
+ which is the absolute offset in the library file where the executable object
+ file starts. If an executable object file is not detected at the offset the
+ archive library's file table is searched.
+
+ If `file` is a null pointer, ``dlopen()`` returns a global symbol table
+ handle. This `handle` provides access to the global symbols from an ordered
+ set of executable object files consisting of the original base image file, the
+ set of executable object files loaded using ``dlopen()`` operations with the
+ ``RTLD_GLOBAL`` flag, and any dependencies loaded. As the latter sets of
+ executable object files can change during execution, the set of symbols made
+ available by this `handle` can also change dynamically.
+
+ Only a single copy of an executable object file is brought into the address
+ space, even if ``dlopen()`` is invoked multiple times in reference to the
+ executable object file, and even if different pathnames are used to reference
+ the executable object file.
+
+ Unresolved external symbols do not cause an error to be returned allowing the
+ loading of jointly dependent executable object files.
+
+ If ``dlopen()`` fails, it returns a null pointer, and sets an error condition
+ which may be interrogated with ``dlerror()``.
+
+ The `mode` parameter describes how ``dlopen()`` operates upon `file` with
+ respect to the processing of relocations and the scope of visibility of the
+ symbols provided within `file`. When an executable object file is brought into
+ the address space, it may contain references to symbols whose addresses are
+ not known until the executable object file is loaded.
+
+ If a loaded executable object file and any dependent executable object files
+ loaded with it contain any initialiser functions, they are called in the order
+ loaded before ``dlopen()`` returns.
+
+ The modes ``RTLD_LAZY`` and ``RTLD_NOW`` do not effect the type of relocation
+ performed, it is same for both modes. All relocations of an executable object
+ file and any dependent executable object files loaded with it are completed
+ before the ``dlopen()`` call returns. The execution performance of the code
+ loaded can be considered deterministic once ``dlopen()`` has returned.
+
+ Any executable object file loaded by ``dlopen()`` can reference global symbols
+ in the base image, any executable object files loaded included in the same
+ ``dlopen()`` invocation, and any executable object files that were loaded in
+ any ``dlopen()`` invocation and which specified the ``RTLD_GLOBAL`` flag. To
+ determine the scope of visibility for the symbols loaded with a ``dlopen()``
+ invocation, the `mode` parameter should be a bitwise-inclusive ``OR`` with one
+ of the following values:
+
+ ``RTLD_GLOBAL``
+ The executable object file's symbols are made available for relocation
+ processing of any other executable object file. In addition, symbol lookup
+ using ``dlopen(NULL,mode)`` and an associated ``dlsym()`` allows
+ executable object files loaded with this mode to be searched.
+
+ ``RTLD_LOCAL``
+ The executable object file's symbols shall not be made available for
+ relocation processing of any other executable object files.
+
+ If neither ``RTLD_GLOBAL`` nor ``RTLD_LOCAL`` is specified, the default
+ behavior is unspecified.
+
+ If ``RTLD_GLOBAL`` has been specified, the executable object file maintains
+ it's ``RTLD_GLOBAL`` status regardless of any previous or future specification
+ of ``RTLD_LOCAL``, as long as the executable object file remains in the
+ address space.
+
+ Symbols introduced through calls to ``dlopen()`` may be used in relocation
+ activities. Symbols that duplicate symbols already defined by the base image
+ or previous ``dlopen()`` calls are treated as an error and the object file is
+ not loaded. Symbols introduced through loading dependent executable object
+ files are ignored or not loaded depending on the method used to build the
+ executable object files.
+
+ The symbols introduced by ``dlopen()`` operations and available through
+ ``dlsym()`` are at a minimum those which are exported as identifiers of global
+ scope by the executable object file. Typically, such identifiers shall be
+ those that were specified in (for example) C source code as having ``extern``
+ linkage.
+
+.. _dlclose:
+.. index:: dlclose
+``int dlclose(void* handle);``
+ Releases a reference to the executable object file referenced by `handle`. If
+ the reference count drops to ``0``, the executable object file's global symbol
+ table is made unavailable. When all references to the global symbols the
+ executable object file provided have been removed the object file is removed
+ from the address space.
+
+ If the executable object being removed has any termination routines in it they
+ are called.
+
+.. _dlsym:
+.. index:: dlsym
+``void* dlsym(void* handle, const char* symbol);``
+ The ``dlsym()`` function obtains the address of a symbol (a function identifier
+ or a data object identifier) defined in the symbol table identified by the
+ handle argument. The handle argument is a symbol table handle returned from a
+ call to ``dlopen()`` (and which has not since been released by a call to
+ ``dlclose()``), and name is the symbol's name as a character string. The return
+ value from ``dlsym()``, cast to a pointer to the type of the named symbol, can
+ be used to call (in the case of a function) or access the contents of (in the
+ case of a data object) the named symbol.
+
+ The ``dlsym()`` function searches for the named symbol in the symbol table
+ referenced by handle and returns the address of the code or data location
+ specified by the null-terminated character string symbol. Which libraries and
+ objects are searched depends on the `handle` parameter.
+
+ Upon successful completion, if name names a function identifier, ``dlsym()``
+ returns the address of the function converted from type pointer to function to
+ type pointer to ``void``; otherwise, ``dlsym()`` shall return the address of
+ the data object associated with the data object identifier named by name
+ converted from a pointer to the type of the data object to a pointer to
+ ``void``. If `handle` does not refer to a valid symbol table handle or if the
+ symbol named by name cannot be found in the symbol table associated with
+ `handle`, ``dlsym()`` shall return a null pointer.
+
+.. _dlinfo:
+.. index:: dlinfo
+``int dlinfo(void* handle, int request, void* args);``
+
+ The ``dlinfo()`` function provides information about dynamically loaded object.
+ The action taken by ``dlinfo()`` and exact meaning and type of the argument
+ `args` depend on value of the `request` argument provided by the caller.
+
+ ``RTLD_DI_UNRESOLVED``
+ Return ``1`` in an indexer value pointed to by `args` if the symbol table
+ handle has unresolved relocation records to symbols. If the `handle` is the
+ global symbol table handle or ``RTLD_SELF`` return ``1`` if any unresolved
+ relocation records to symbols are present in any loaded executable object
+ files..
+
+.. _dlerror:
+.. index:: dlerror
+``const char *dlerror(void);``
+ The ``dlerror()`` function returns a null-terminated character string (with no
+ trailing ``<newline>``) that describes the last error that occurred during
+ dynamic linking processing. If no dynamic linking errors have occurred since
+ the last invocation of ``dlerror()``, ``dlerror()`` returns ``NULL``. Thus,
+ invoking ``dlerror()`` a second time, immediately following a prior
+ invocation, results in ``NULL`` being returned.
+
+This example opens an object file, checks for any unresolved symbols the object
+file may have, locates a global symbol in the object file, calls it then closes
+the object file:
+
+.. code-block:: c
+
+ #include <stdbool.h>
+ #include <stdio.h>
+ #include <dlfcn.h>
+
+ typedef int (*call_sig)(void);
+
+ bool load_object (void)
+ {
+ void* handle;
+ call_sig call;
+ int unresolved;
+
+ handle = dlopen ("/code.o", RTLD_NOW | RTLD_GLOBAL);
+ if (handle == NULL)
+ {
+ printf ("dlopen failed: %s\n", dlerror ());
+ return false;
+ }
+
+ if (dlinfo (handle, RTLD_DI_UNRESOLVED, &unresolved) < 0)
+ {
+ printf ("dlinfo failed: %s\n", dlerror ());
+ dlclose (handle);
+ return false;
+ }
+
+ if (unresolved != 0)
+ {
+ printf ("object.o has unresolved external symbols\n");
+ dlclose (handle);
+ return false;
+ }
+
+ call = dlsym (handle, "foo");
+ if (call == NULL)
+ {
+ printf("dlsym failed: symbol 'foo' not found\n");
+ dlclose (handle);
+ return false;
+ }
+
+ printf ("'foo()' returns: %i\n", call ());
+
+ if (dlclose (handle) < 0)
+ {
+ printf("dlclose failed: %s\n", dlerror());
+ return false;
+ }
+
+ return true;
+ }
+
+Symbols
+-------
+.. index:: symbol
+.. index:: global symbol
+.. index:: function identifier
+.. index:: data object identifier
+
+The RTEMS link editor manages the symbols for the base image and all resident
+executable object files. A symbol is an identifier string and a pointer value to
+a function identifier or a data object identifier. The symbols held in the
+symbol tables are used in the relocation of executable object files or they can
+be accessed by application code using the :ref:`dlsym() <dlsym>` call.
+
+.. index:: orphaned object file
+
+An executable object file's symbols are removed from the global symbol table
+when it is closed or orphaned. An executale object file cannot be unloaded if a
+symbol it provides is referenced by another object and that object is still
+resident. An executable object file that has no references to any of its symbols
+and was not explicitly loaded using the :ref:`dlopen() <dlopen>` call is
+orphaned and automatically removed from the address space.
+
+Base Image Symbols
+^^^^^^^^^^^^^^^^^^
+.. index:: base image symbols
+
+The base image symbol table provides access to the function and data objects
+statically linked into the base image. Loaded executable object files can be
+directly linked to the code and data resident in the base image.
+
+A statically linked RTEMS executable does not contain a symbol table, it has to
+be generated and either embedded into the executable or loaded as a specially
+created executable object file.
+
+The base image symbol table is dependent on the contents of the base image and
+this is not known until it has been linked. This means the base image symbol
+table needs to be constructed after the base image executable has been linked
+and the list of global symbols is known.
+
+The RTEMS Tools command :program:`rtems-syms` (see :ref:`RTEMSSymbols`) extracts
+the global and weak symbols from an RTEMS static executable file, creates a C
+file and compiles it creating a relocatable executable object file. This file
+can be linked with the static executable's object files and libraries to create
+a static executables with an embedded symbol table or the executable file can be
+loaded dynamically at run-time. The following needs to be observed:
+
+#. The option ``-e`` or ``--embedded`` to :program:`rtems-syms` creates an
+ executable object file to be embedded in the base image and not providing
+ either of these options creates a symbols executable object file that is
+ loaded at run-time. The same executable object file cannot be used to
+ embedded or load.
+
+#. The target C compiler and machine options need to be provided to make sure
+ the correct ABI for the target is used. See :ref:`MachineFlagsandABI`.
+
+.. index:: embedded symbol table
+.. _EmbbeddedSymbolTable:
+
+**Embedded Symbol Table**
+ An embedded symbol table is *embedded* within the base image executable file
+ and loaded when the static executable is loaded into memory by the
+ bootloader. The symbol table is automatically added to the link editor's global
+ symbol table when the first executable object file is loaded.
+
+ The process to embed the symbol table requires linking the base image twice.
+ The first link is to create a static executable that collects together the
+ symbols to make the symbol table. The RTEMS Tools command `rtems-syms` extracts
+ the global and weak symbols from the static executable ELF file, creates a C
+ file and compiles it to create an executable object file. The base image is
+ linked a second time and this time the symbol table executable object file is
+ added to the list of object files.
+
+ Embedding the symbol table means the chances of the symbol table and base image
+ not matching is low, however it also means the symbol table is always present
+ in the kernel image when dynamic loading may be optional. A project's build
+ system is made more complex as it needs to have extra steps to link a second
+ time.
+
+ This example shows creating an embedded symbol table object file and linking
+ it into the base image.
+
+ .. code-block:: shell
+
+ $ sparc-rtems5-gcc -mcpu=cypress foo.o -lrtemsbsp -lrtemscpu -o foo.pre
+ $ rtems-syms -e -C sparc-rtems5-gcc -c "-mcpu=cypress" -o foo-sym.o foo.pre
+ $ sparc-rtems5-gcc -mcpu=cypress foo.o foo-sym.o -lrtemsbsp -lrtemscpu -o foo.exe
+
+ The link command line steps in this example are not complete.
+
+.. _LoadableSymbolTable:
+
+**Loadable Symbol Table**
+
+ A run-time loaded symbol table is the default for the command
+ :program:`rtems-syms`. The symbol table executable object file is packaged with
+ the other files to be dynamically loaded at run-time and placed on the target's
+ file system. It needs to be loaded before any other executable object file are
+ loaded or unresolved symbols can occur that will not be resolved.
+
+ A run-time loaded symbol table does not consume any target resources until it
+ is loaded. This is useful in a system that optionally needs to dynamically load
+ code, for example as a development environment. The symbol table executable
+ needs to exactly match the base image loading it or the behavior is
+ unpredictable. No checks are made.
+
+ The example shows creating and loading a symbol table executable object
+ file. First create the symbol table's executable object file:
+
+ .. code-block:: shell
+
+ $ sparc-rtems5-gcc -mcpu=cypress foo.o -lrtemsbsp -lrtemscpu -o foo.exe
+ $ rtems-syms -C sparc-rtems5-gcc -c "-mcpu=cypress" -o foo-sym.o foo.exe
+
+ The link command line steps in this example are not complete.
+
+ Load the symbol table:
+
+ .. code-block:: c
+
+ #include <stdbool.h>
+ #include <stdio.h>
+ #include <dlfcn.h>
+
+ bool load (void)
+ {
+ void* handle = dlopen ("/foo-sym.o", RTLD_NOW | RTLD_GLOBAL);
+ if (handle == NULL)
+ {
+ printf ("failed to load the symbol table: %s\n", dlerror ());
+ return false;
+ }
+ return true;
+ }
+
+Unresolved Symbols
+------------------
+
+The RTEMS link editor does not return an error when an executable object file is
+loaded with unresolved symbols. This allows dependent object files to be
+loaded. For example an executable object file :file:`foo.o` contains the
+function ``foo()`` and that function calls ``bar()`` and an executable object
+file :file:`bar.o` contains a function ``bar()`` that calls the function
+``foo()``. Either of these executable object files can be loaded first as long
+both are loaded before any symbols are accessed.
+
+The link editor defers the resolution of unresolved symbols until the symbol is
+available in the global symbol table. Executing code or accessing data in a
+loaded executable object file with unresolved external symbols results in
+unpredictable behavior.
+
+All unresolved symbols are checked after an executable object file has been
+loaded. If a symbol is found and resolved any relocations that reference the
+symbol are fixed. If valid library files have been configured the symbol table's
+of each library are searched and if the symbol is found the dependent executable
+object file is loaded. This process repeats until no more symbols can be
+resolved.
+
+The ``dlinfo()`` call can be used to see if a loaded executable object file has
+any unresolved symbols:
+
+.. code-block:: c
+
+ #include <stdbool.h>
+ #include <stdio.h>
+ #include <dlfcn.h>
+
+ bool has_unresolved(void* handle)
+ {
+ int unresolved;
+ if (dlinfo (handle, RTLD_DI_UNRESOLVED, &unresolved) < 0)
+ {
+ printf ("dlinfo failed: %s\n", dlerror ());
+ return false;
+ }
+ return unresolved != 0;
+ }
+
+The handle ``RTLD_SELF`` checks for any unresolved symbols in all resident
+object files:
+
+.. code-block:: c
+
+ if (has_unresolved(RTLD_SELF))
+ printf("system has unsolved symbols\n");
+
+Libraries
+---------
+
+The RTEMS link editor supports loading executable object files from
+libraries. Executable object files can be explicitly loaded from a library using
+a specific path to :ref:`dlopen() <dlopen>` and treated the same as loading a
+stand alone executable object file. Libraries can be searched and an executable
+object file containing the search symbol can be loaded automatically as a
+dependent executable object file. A dependent executable object file loaded from
+a library with no symbol references to it's symbols is orphaned and
+automatically unloaded and removed from the address space.
+
+.. _fig-dl-libs:
+
+.. figure:: ../../images/user/libdl-load.png
+ :width: 65%
+ :alt: Loading Executable Object Files
+ :figclass: align-center
+
+ Loading Executable Object Files
+
+A library is an archive format file created using the RTEMS architecture
+prefixed :program:`ar` command. The RTEMS tool suite provides the :program:`ar`
+program and system libraries such as :file:`libc.a` and :file:`libm.a` for each
+architecture and ABI. Libraries used by the RTEMS link editor for searching must
+contain a symbol table created by the :program:`ranlib` program from the RTEMS
+tool suite.
+
+Searching a library's symbol table and loading an executable object file
+containing the symbol is called *dependent loading*. Dependent loading provides
+a simple way to manage the dependencies when loading an executable object
+file. If code in an executable object file references functions or data objects
+that are part of a library and the symbols are not part of the base image those
+symbols will not resolve unless the library is on the target and available for
+searching and loading. Dependent loading from libraries on the target provides a
+simple and understandable way to manage the dependency issue between the base
+image, loaded code and the system libraries.
+
+The RTEMS link editor checks for the configuration file :file:`/etc/libdl.conf`
+on each call to :ref:`dlopen() <dlopen>`. If the file has changed since the last
+check it is loaded again and the contents processed. The file format is:
+
+#. Comments start with the ``#`` character.
+#. A line is a wildcard path of libraries to search for. The wildcard search
+ uses the ``fnmatch()`` call. The ``fnmatch()`` function matches patterns
+ according to the rules used by a shell.
+
+Files that match the search pattern are verified as a library and if a symbol
+table is found it is loaded and the symbols it contains made search-able.
+
+A call to :ref:`dlopen() <dlopen>` checks the global symbols table and any
+references to relocation symbols not found are *unresolved* and added to the
+unresolved symbol table. Once the executable object file is loaded the link
+editor attempts to resolve any unresolved symbols. The unresolved symbol
+resolver checks each unresolved symbol against the global symbol table and if
+not found the available library symbol tables are searched. If a symbol is found
+in a library the dependent executable object file is loaded. The process repeats
+until all unresolved symbols have been resolved and the remaining unresolved
+symbols are not in the global symbol table or any libraries. The loading of a
+library executable object file will resolve at least one symbol and it may add
+more unresolved symbols requiring further searching of the libraries.
+
+.. index:: strip library
+
+A library of executable object files built by the RTEMS Tool suite can contain
+debug information and this should be stripped before loading on to the
+target. The tool suite's command :program:`strip` can strip all the object files
+in a library with a single command.
+
+.. code-block:: shell
+
+ $ sparc-rtems5-strip libc.a
+
+Large Memory
+------------
+
+The RTEMS link editor supports large memory relocations. Some architectures have
+instructions where the relative branch or jump offset from the instruction to
+the target address is limited. These instructions provide improved performance
+because less code generated compared to larger instructions which contain full
+address space references. The compact code helps lower cache pressure as well
+and providing improved performance for localalized functions and loops. The
+compiler defaults to generating the smaller instruction and as the final address
+map not known when generating the code, linkers need to provide glue code to
+extend the small address range to the enitre address space. This is called a
+trampoline. A trampoline is transparent to the execution of the code.
+
+The link editor parses an executable object file's relocation records to
+determine the number of trampolines needed. Added to this value are all
+unresolved symbols present in an executable object file after it is
+loaded. There is a slot allocated even if the symbol ends up being within range
+as there is no way to determine a symbol's address until it is loaded and the
+range calculated.
+
+The trampoline table is allocated a separate block of memory to the executable
+object file's text, data and constants memory. The trampoline parsing requires
+the executable object file's instructions (text) be in memory as the
+instructions are inspected by the architecture specific relocation support to
+determine an instruction's range. As a result the allocation for the trampoline
+table has to occur after the text memory has been allocated. Most instructions
+have relative offsets and the trampoline table is allocated at one end limiting
+the size of an object to half the maximum range.
+
+Trampolines support is available for the ARM and PowerPC architectures. The
+SPARC and Intel x86 architectures do not need trampolines and MIPS needs support
+added.
+
+Allocator
+---------
+
+The RTEMS link editor supports custom allocators. A custom allocator lets you
+manage the memory used by the RTEMS link editor as it runs. Allocators could
+provide:
+
+#. Support for the various types of memory that can be allocated allowing
+ specialised target support for specific use cases.
+#. Locking of read-only memory. The link editor unlocks read-only memory when it
+ needs to write to it.
+#. Separation of memory holding code and data from the heap.
+
+The allocator can be hooked using the ``rtems_rtl_alloc_hook`` call before any
+calls to :ref:`dlopen() <dlopen>` are made. The hook call returns the current
+allocate allowing the allocators to be chained.
+
+The default allocator uses the heap.
+
+.. _rtems_rtl_alloc_tags:
+.. index:: rtems_rtl_alloc_tags
+
+The allocator tags specify the type of memory the allocator is handling. The tag
+used to allocate memory at an address must be used when making allocator
+calls. The ``rtems_rtl_alloc_tags`` are:
+
+ .. index:: RTEMS_RTL_ALLOC_OBJECT
+ ``RTEMS_RTL_ALLOC_OBJECT``
+ Allocate a generic object. The link editor uses this memory for data
+ structures it uses to manage the linking process and resident executable
+ object files.
+
+ .. index:: RTEMS_RTL_ALLOC_SYMBOL
+ ``RTEMS_RTL_ALLOC_SYMBOL``
+ Allocate memory to hold symbol data.
+
+ .. index:: RTEMS_RTL_ALLOC_EXTERNAL
+ ``RTEMS_RTL_ALLOC_EXTERNAL``
+ Allocate memory for unresolved external symbols.
+
+ .. index:: RTEMS_RTL_ALLOC_READ
+ ``RTEMS_RTL_ALLOC_READ``
+ Allocate memory for read-only data such as constants and exception tables.
+
+ .. index:: RTEMS_RTL_ALLOC_READ_WRITE
+ ``RTEMS_RTL_ALLOC_READ_WRITE``
+ Allocate memory for read-write data such as a initialised, uninitialized and
+ common variables.
+
+ .. index:: RTEMS_RTL_ALLOC_READ_EXEC
+ ``RTEMS_RTL_ALLOC_READ_EXEC``
+ Allocate memory for code to be executed in. The address space is configure for
+ read and execute.
+
+.. _rtems_rtl_alloc_cmd:
+.. index:: rtems_rtl_alloc_cmd
+
+The commands are used to control the action the allocator performs. The
+``rtems_rtl_alloc_cmd`` are:
+
+ .. index:: RTEMS_RTL_ALLOC_NEW
+ ``RTEMS_RTL_ALLOC_NEW``
+ Allocate memory of the ``tag`` type. Returns ``NULL`` if the allocation fails.
+
+ .. index:: RTEMS_RTL_ALLOC_DEL
+ ``RTEMS_RTL_ALLOC_DEL``
+ Delete a previous allocation freeing the memory. The ``tag`` has to match
+ address of the memory being deleted.
+
+ .. index:: RTEMS_RTL_ALLOC_WR_ENABLE
+ ``RTEMS_RTL_ALLOC_WR_ENABLE``
+ Enable writes to a region of memory previously allocated. The ``tag`` has to
+ match the address of the memory being write enabled. The link editor may call
+ issue this command for memory that is already write enabled.
+
+ .. index:: RTEMS_RTL_ALLOC_WR_DISABLE
+ ``RTEMS_RTL_ALLOC_WR_DISABLE``
+ Disable writes to a region of memory previously allocated. The ``tag`` has to
+ match address of the memory being write disabled. The link editor may call
+ issue this command for memory that is writable and not to be write
+ disabled. The allocator need to manage this case.
+
+.. _rtems_rtl_allocator:
+.. index:: rtems_rtl_allocator
+
+The allocator handler is a single call to handle all allocator requests. The
+handler called on evey allocation action made by the link editor. The type of
+the function you need is:
+
+.. code-block:: c
+
+ typedef void (*rtems_rtl_allocator)(rtems_rtl_alloc_cmd cmd,
+ rtems_rtl_alloc_tag tag,
+ void** address,
+ size_t size);
+
+
+The arguments are:
+
+``cmd``
+ The command to action. See :ref:`_rtems_rtl_alloc_cmd`.
+
+``tag``
+ The type of memory the command is for. The ``tag`` must match the address for
+ commands other than ``RTEMS_RTL_ALLOC_OBJECT``.
+
+``address``
+ Pointer to the address. This is set of the ``RTEMS_RTL_ALLOC_OBJECT`` command
+ and read for the other commands. The ``tag`` must match the address for
+ commands that read the address from the pointer.
+
+``size``
+ The size of the memory to allocate. This is only valid for the
+ ``RTEMS_RTL_ALLOC_OBJECT`` command.
+
+The call to hook the allocator is:
+
+.. code-block:: c
+
+ rtems_rtl_allocator rtems_rtl_alloc_hook (rtems_rtl_allocator handler);
+
+The current allocator is returned. You can provide a full allocator or you can
+filter commands.
+
+Languages
+---------
+
+C is supported.
+
+C++ is supported. Initializer functions are called when an object is loaded and
+finalizer functions are called before it is unloaded and removed. Static
+constructions are initializer functions and static destructors are finalizer
+functions.
+
+C++ exceptions are handled across modules. The compiler generated exception
+tables present in an executable object file are registered with the architecture
+specific mechanism when loaded and deregistered when unloaded. An exception
+thrown in loaded code can be caught in the base image or another loaded
+module. If you are using C++ and exceptions it is recommended some exception
+code is added to the base image to place the architecture specific support in
+the base image.
+
+Thread Local Storage
+--------------------
+
+Thread local storage (TLS) is currenly not supported by the RTEMS link
+editor. The RTEMS executive needs to have a special allocator added to manage
+dynamically allocating TLS variables in a thread.
+
+If you need TLS support in dynamically loaded code please consider the RTEMS
+support options.
+
+Architectures
+-------------
+
+The following architectures are supported:
+
+ - ARM
+ - Blackfin
+ - H8300
+ - Intel x86 (i386)
+ - LM32
+ - M68K
+ - MIPS
+ - Moxie
+ - PowerPC
+ - SPARC
+ - V850
+
+ARM
+^^^
+
+The ARM relocation backend supports veneers which is trampolines.
+
+The veneer implementation is a single instruction and a 32bit target address
+making the overhead 8 bytes for each veneer. The performance overhead is a
+single instruction.
+
+PowerPC
+^^^^^^^
+
+The PowerPC relocation backend support trampolines and small data.
+
+The trampoline is four instructions and uses register 12 which the PowerPC ABI
+reserves for scratch use. The implementation loads the counter register and
+branches to the address it contains. The trampoline size is 16 bytes. The
+performance overhead is four instructions.
+
+The PowerPC relocation backend also supports small data. The sections of an
+executable object file are parsed and small data are tagged as needing
+architecture specific allocations. These sections are not allocated as part of
+the standard section allocation. Small data sections are allocated in the global
+small data region of memory. The size of this region is defined in the BSP's
+linker command file by setting ``bsp_section_small_data_area_size`` variable:
+
+.. code-block:: c
+
+ bsp_section_small_data_area_size = 65536;
+
+The maximum size of the small data region is 65536 bytes. It is recommended code
+built for loading uses the same settings for small base as the base image.
diff --git a/user/installation/developer.rst b/user/installation/developer.rst
index 70d676e..90912cc 100644
--- a/user/installation/developer.rst
+++ b/user/installation/developer.rst
@@ -90,6 +90,8 @@ requires:
If you are unsure how to specify the build set for the architecture you wish to
build, just ask the tool:
+.. code-block:: shell
+
$ ../source-builder/sb-set-builder --list-bsets <1>
RTEMS Source Builder - Set Builder, v4.11.0
Examining: config
@@ -750,4 +752,3 @@ Install the kernel to our prefix:
make[1]: Leaving directory '/c/opt/rtems/kernel/pc686'
/c/opt/rtems/kernel/pc686
$
-
diff --git a/user/tools/exeinfo.rst b/user/tools/exeinfo.rst
index 5e5948c..1913986 100644
--- a/user/tools/exeinfo.rst
+++ b/user/tools/exeinfo.rst
@@ -2,6 +2,8 @@
.. Copyright (C) 2017 Chris Johns <chrisj at rtems.org>
+.. _RTEMSExecutableInfomation:
+
RTEMS Executable Infomation
===========================
diff --git a/user/tools/linker.rst b/user/tools/linker.rst
index 73c892b..474f3c9 100644
--- a/user/tools/linker.rst
+++ b/user/tools/linker.rst
@@ -2,6 +2,8 @@
.. Copyright (C) 2017 Chris Johns <chrisj at rtems.org>
+.. _RTEMSLinker:
+
RTEMS Linker
============
diff --git a/user/tools/symbols.rst b/user/tools/symbols.rst
index 869baf2..16e04ee 100644
--- a/user/tools/symbols.rst
+++ b/user/tools/symbols.rst
@@ -2,6 +2,8 @@
.. Copyright (C) 2017 Chris Johns <chrisj at rtems.org>
+.. _RTEMSSymbols:
+
RTEMS Symbols
=============
--
2.19.1
More information about the devel
mailing list