summaryrefslogtreecommitdiff
path: root/usr
diff options
context:
space:
mode:
authorMichal Nazarewicz <mina86@mina86.com>2013-11-12 15:08:41 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2013-11-13 12:09:12 +0900
commitc725ee54c30b34427cb8fa68d1fe8804aca6d400 (patch)
treeb455af08fbecb6a3f7ddf027cbc4b36d3865bf9e /usr
parent0ca43435188b9f911c8efcdf10731f726142dda1 (diff)
downloadlinux-c725ee54c30b34427cb8fa68d1fe8804aca6d400.tar.gz
linux-c725ee54c30b34427cb8fa68d1fe8804aca6d400.tar.bz2
linux-c725ee54c30b34427cb8fa68d1fe8804aca6d400.zip
gen_init_cpio: avoid NULL pointer dereference and rework env expanding
getenv() may return NULL if given environment variable does not exist which leads to NULL dereference when calling strncat. Besides that, the environment variable name was copied to a temporary env_var buffer, but this copying can be avoided by simply using the input string. Lastly, the whole loop can be greatly simplified by using the snprintf function instead of the playing with strncat. By the way, the current implementation allows a recursive variable expansion, as in: $ echo 'out ${A} out ' | A='a ${B} a' B=b /tmp/a out a b a out I'm assuming this is just a side effect and not a conscious decision (especially as this may lead to infinite loop), but I didn't want to change this behaviour without consulting. If the current behaviour is deamed incorrect, I'll be happy to send a patch without recursive processing. Signed-off-by: Michal Nazarewicz <mina86@mina86.com> Cc: Kees Cook <keescook@chromium.org> Cc: Jiri Kosina <jkosina@suse.cz> Cc: Jesper Juhl <jj@codesealer.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'usr')
-rw-r--r--usr/gen_init_cpio.c27
1 files changed, 9 insertions, 18 deletions
diff --git a/usr/gen_init_cpio.c b/usr/gen_init_cpio.c
index af8c925e93eb..225ad244cf88 100644
--- a/usr/gen_init_cpio.c
+++ b/usr/gen_init_cpio.c
@@ -382,24 +382,15 @@ error:
static char *cpio_replace_env(char *new_location)
{
char expanded[PATH_MAX + 1];
- char env_var[PATH_MAX + 1];
- char *start;
- char *end;
-
- for (start = NULL; (start = strstr(new_location, "${")); ) {
- end = strchr(start, '}');
- if (start < end) {
- *env_var = *expanded = '\0';
- strncat(env_var, start + 2, end - start - 2);
- strncat(expanded, new_location, start - new_location);
- strncat(expanded, getenv(env_var),
- PATH_MAX - strlen(expanded));
- strncat(expanded, end + 1,
- PATH_MAX - strlen(expanded));
- strncpy(new_location, expanded, PATH_MAX);
- new_location[PATH_MAX] = 0;
- } else
- break;
+ char *start, *end, *var;
+
+ while ((start = strstr(new_location, "${")) &&
+ (end = strchr(start + 2, '}'))) {
+ *start = *end = 0;
+ var = getenv(start + 2);
+ snprintf(expanded, sizeof expanded, "%s%s%s",
+ new_location, var ? var : "", end + 1);
+ strcpy(new_location, expanded);
}
return new_location;
&/*a0&eޢf<NozY6hux'/ʾ\3ٛƅDoWW(HGߨd5vVhɝ~Ld5PM!!~!xPMKDThEM?LhiP'^?/|!Q RSbeH7y&bT9Lb#)x7=8e Њ }` HYT18v/gg)mBaݒ5sao '!Q+--k[cyX7#o32ړ_5ߛ+\s/qÜb1p߯QGŵFOGYWQF_ꖐ|5^mrϪ%~.F|'mL2u^-oj<>FׇY(͍lOABGd`,0T:ego頰Xb@aq fg9~QBK69&" ׏`UvyRt;Z7G&1mw"LI iby /M _12| x[fٓϞ$Qm|G[>fDG}">VHH4:Z=Sh7?oIj~xu]b~+^@jP]1aYUwNYo4seh|a,?$r6׻з>I=Ds˨۴?&:K-'Zڗ~>I[*ZKU =rht,-{9׭</GO/PB񺉠!ùxy[ϋـl;5b44#]jFV5w--v:0a}T36\(i8;K/B.پț1/] ( \!{#do/?5qWOG+|mܝd"K?.&kwK[Us풟>m#_.s?J`2#LeWz*93^OT(eBe!T y7@wn **ݯAxY: n Ïp`ɌÊ1g`2> Iv{.I+$,NJ K*.F_3x+^ԊD$?@ztq ovI$I2;,<*b7] F*5`U,j*AHvV?,qFcu?j[jUVmrI$$B ! AP=Fwh*Mbu-]ԃ5hI%7&+q弮l93&XII+c)YͶWl M֥w#UV#v~~d)Ο m)u\t#1{_"ѣpZY`?Qi&5̟}3Ǧ%U}wZ=b?jV e":tX?E`nB\,s=ȓȣqƃV+(4pQZ7[+o߮9Y', )~V4rʝ@#>i/}`݄$qR*[F{Eu{JW%&6G NWO)M|Rc ${)տe0sl-A*"|ӈ䓄 %R%Y&H" Q(Vp.Μ)Xx&pۿ f6uXo @UQ?5A4Z ?ϚmI M N JBSq`{%Fw8b?LN'x DĽ D* Smm_{.6\J~/ I\@Bq; bPt1e u'? PmHEAּR$zX s:Dt >i!ߏc>;"u f@clZ??wAeB2|z@M6֐p vg3Cۊ̆dYX'zc)HXN:"/\˼Q  <}iPiDL.{$3rq zkؖIcsU.hzNc;C,>u;x\ 8q~˼zJsd'(hG ¾,~"(1(Ss`5ttbb:z_hݫmS;Bٸɬ`Ec:j"$[͈E>t|l=V@`d:ƞj=Zn_Yeb?aW5T'GF覯nY cwe׭Oe!_'@Azf3ؑjհ{eB".?l7 (;p)MYzN"&# e ,v+p]h"6Z=&c:M'pMjp^xi/$ּ͔kپ$lG$w.UՅ-ڻcoU#NYm~@_'W4K+]pero!!?d3>64h0H#lnkGDIt^~\]'D^J"\}9hïX<,{!{l0bxiGIY֣Y3) PE ٹW_MM|͵b5v0uW@'rdwC^J'6A.U) ~ˈ;QBR.CZ_nGE5$(g1}s(2.fCV!bjqf~&.}uIi$}pt QZD^y4|԰=r)cįԚ~_E8*)f~8ߔ5|糘ÿJO募(}9|\6 chp@2 ǫ+xfF#X`5*^<@^!;7=hgzp5rm{gn896=t)K#B0Qx֤"ïp`3ǣ9ds`13#Yp( K t IƨzkH(v|WºmۈD߯C١P58 ]M{MUWq|! iӗ PfC ){ ~Ή\`I3zgnK-OۚNaUjrr h (!(im%s 3txZYU* >D=x`m:! ̭;^I(2E}8* MY^;a`)_~>]A'&Ml3y!WT-1C欄n~}/ o?jgo@>7_kY ,3+rкkܠvLB<ý| 0tY a`0-nqH5>F, Jݽɂ;T"{B3xm pBF8#s9WP=X%yM׷>o/Lwh,3s\>yn0u$t~M[z̈́}>_.^\?IƸ3<wv/,9ܺmS0P!;C7U(S߂-k离$;nC,߳g_ǯ.}Y_KmOd@7>n|xo? ^bh'wv֣AqxOsDGAo\GTݕw[ ,c`iLXy[_g!˘(v9aDRk@4iY6 Uv`OiK'UAy0.Z&\N|%v҉ <_8C;f 'aU @UpA&&8>yxi 5G $R6$vF5փa#VpX5I1A(@1۱4gzdN P)bH&ա?'&BE5/:m`3@Rί w`].lpI䓀[EeJ)H4rh@ޚH;6wB]ϔu|rG&HtA- [FDp }F.8 cIH$fvVY[7ke:&pjs2rW=Vltmzu#hO0K YO(KM`P'Obazˬ{EoQ)n롉P=;;=ԣ`4<9]v1Ĭa3 M_ee㮯X[,?>g;?WǖA+Zh@<xTv2:':1/_ /Um5.٨#w"hsPs6yyGӧPҪ9HsU27^KDF~}: BmQj~:ղim 5so@*g~2EIU\I!jNPAvν7<.`l,kϯ0] !=sm%D:j]=:pG]f_[o4E5 Jr}Pf&5AWP@qI Zw4:<| F_# .}R7'. ޸DH~NW!HjZr4&<"h9>#e@VhJ- @;9$|#x~&sQ~TPP(I<~QØ0Q ٝ)]a`)^J`|ϛUlt{jPHg_-W-,Wɵ?gA`ۥӳJ ?gmBg3)B'gS#§}.m;~vZd -tDn \,,oFWy&4j :8#IyٶᦜM+1(w?Ԉ9L&?G6}kOCgc:ѩ.Bs*vKH]d*[@.9ML-mǷlw!bg0t$FSp@.rXј?/_0k~T5QdB۾w 7CpQ e.Z҆_bssW];G?n0 =`_Ov23RgSzSpuJD@S +[,u:;OFvI pL#Hѱ%_,Xl퇆pPt9*;qz=L4Ktpv<[.L8#$y5:Beypt եeȣRFm9vB)@uz!y=\g_{5\:A[u87v+g^-]wkAOTioDG[N<-.USs7Gz Bd|kUO!o%] P8DZDN߬^=sbDnT wV*Rqf;}L#J"z=#f׿7Z\V䰉s6/^@ ?FLm $&cm!`/e)Xݥ,+W+]|")bzbz i~ctzJ:ܘYWS|;ǝm^ ;zH3! XX{}xFOE[,ƹ|SuB£0ErcFKyA N*ǝôe|e;=)|lHQKvjb3[Jʼn+(i ~z,΅NON:y}ȜݠĎ!5t}=K{-, `2d CQm9a7:h>O I;;~号~'*i !i2g cNJ'-D/ꗙ@oTK{5㾾d@_[i{ sLjL{9/ɢy(<. U T]Yux$LxmQQ5],?QwQGآaF4 Gm=O릱&{8&O=!YPЖwZ2->xu,{g>k*,;74c6s}Fc ΗM}'\.n!Er[LWnCwcMl }L1=.ǿ0X>V`qS#wۼὃ1psuۼGp aE9/%+FGxO%Rp)睘kɴ筘>yOugm8YGx}nڻ!쏲XFg'O]Ϸ=9PfUcdpqXkǎcz2fjA|!9nzSbQV$"=~ʹr  M7ڷ6NLvJ"F?_] d ǫۖ!)C,H#]f(z}'/|Txs#,Zo@?A{Y/G@RA;}wF Hol Ϻl^󹈮fਐ$1v"z/BΨ% &5'Xf(vsz\sTEln: esiϓmD]:p.P~+c-_ G|l}.٨zAjdzv8AI9zSE:A|- |@ǒ0Bm;XrpQ\(5G(c:X7 LXit_1 ~ l>-/W(㚪%EM2 x^Ͷl-˨3K0N)QWw"(JhEQ`]ՠ+~45-R5ޏsiTԆtc'Ow;x(Jt̓ b*uBw 9z!F8skQ5腸^# }G=x#;WoLY{/9y3AۿHݛN{.*[ y GclI ,1][h PI∃TUDOmWk,4 B8.8,'։oC_34-NE[A^˄\XmaUŌnݝ$xJ+n{.jZ߹a\zw f7_9mHݟ mQm{ofŇ&4!ri]l~,A^yRe_kgGmjuf~L9=\G %NUgw󘰠~-(@(5OgmCmvo z%b~aâW`z,qpw+{K PcvOFWqYo;Ф8XK042(;GzT:̞t7equ?[ NKKs>_\zu5 P#" :yEKzT xwaw?_p`xy4*8k?9{~mahJ!$ FZ@gCG @uEQ.uO=YaMXu(s-|%]wv-qKX8O2TL t  [ݎ{H}>4$9}O@%u ̲ [uYZi).\B<ڭfE SQᅻO<@-#~OqXݔXm(PϺ#ӇA^Lơ GXl{wHw3LA?E?mRo^w+b528er4 < iY(.x֔HfnTfCt=0Jֈp2 0`5@"2! ؈ᇔrjh[$;@#ߩgp]1|?/]Hzif5A[@Fy#2(7 nLS .(1e<)%X *یnlb)oYF0=ν0b]{ 9vݮ|)*s吱1(o@b HtFhX`l:Z=F0{}e& |>&ElgXa뾄90C#IF>6Û}^"gcô.:DaG"/9+LAA@|8}׾ux=:90$ 7lWt^7q r/юb>crtpxoz>u6\! H ugWbZ@9-KH@Jܿ {8sTw4E0/}PK( ==-g]U -438<_ϐ=—%wkPbۉ.GETkjRa"foج"c䪯c-sg\BsAϻ+@q ܂r^dFR;=V;%>"Sv<*L PBVoF/рܮl,۸@0g `ꫬ}+(=O x̌^t^ug8p0=~Cd{"qf^j fi=bТ`CdwːQ%F3Rbti mm;;bֻ:A^E)-3 C "$Δ2SWaỵED?pgboP,BV;{~LtB+Ʀ͇}LIe9r[]r^G ?b<ȋPa[6Y0 32讣f,/ ȿI\Q  B=&怎=yvZ~oT'8g c4vqzz;W80U HIC<50W50Be7Vw豽,*lWU I*~ {:ucܛ{Ô ٪OG?dX"|.G[&}ޯ'n/O?rn:S =*,v϶!W!/hJY"Ҹ#^ s|uNoX\ xB&mvЍܬTE۟1վyRλ|EG<-Vkb8%P| PL -i8Ag|k 8U%dWP"$mWtZLޥcj! 1pd\P l%fDO"_MC%Q"U!k L?[DW} >Rx/6^ 7;;3[qK=Fe?Zf8^U^~4G8X`hGh@nT($uww@g<ѡ&ric9\rNk+]}^Θc^䖙;dDΎ 0ǹހ'zЙ_[MtЍ0uLJN3+YU;+{\ h& H"6Rf$D@"]'$D*O? >x#ԀC^7?w/|_-ܱHLYSDꃇ\p(uxXη8a(oY/#Ty`2>8&]<%=ɮ#܇zC&s}~e屆XQptkz(/Q o;h?)&>ʼnI|FA ԇ[`RD ]nb+(&\nB5Ш!אQQI<vJN{Լ2F.ǰ$ZqN; BVy@!y ;ÔD*ί;p(l*M&Rx23Ū"& 3kXeBJrJ=9!k&@ PAWǏJ CA8pÏoll:,>cMOuM;p] sȪ@_'\ w\$vnc"@ϥn0 jݢq,E,c#BDE<T:U[#@_%KXR̈́GS1!%|qAR%{T~<0BMܾ[#> Հ_ ~V8Adzrja36 ӷo?pwz=wހ'ǩrz%Ew\pgG^:Y+B6P~W'40Pqf7"TG .7QY>kZKή|w#Tlnߌsj)XQꤟ0椞49*lO ֬>qsy"7mua$1sTzq&o]Xb t1?ɼ]h\ns2[ /΢@<7ef嘂jޏ LsiP 8?_+ hOcsRCSX3ԍŁF߭Q}쎊AvZ,sĘ9QIs/X>F* h8%G CMTT28aZ BZFm;"6kM `kdPi O_8wouy  wEY۽\g#sxÍI,P( xN1͸>֊2K,BczZhڭ&}ѺfuYtѭRVțE@"oCAvlgyʹ5Ji?5M<~fR@ GdXoնy/aqq  ~O^ apSnBd| "%,P Jz*$X/C.1I ܴx) €Y.)W2^2 |Pqmc\(@A~\ '>2:=z`; o0Nت)'nb46IPRf"f J'ݴ\ssPƍ6Xkz$V_>6p6ׯG$ Lp*Q*"JK%UB);Ռb"2-&c-E5*A ÝvT5) ٿw1za{~gƲovWL<L '>p(BYFK-jLtLd Jg#v.:Br >sZXvKk /NqR< (WK ])y= oP{G5hʡ @9g 8utT|[3q";~l <[ 4 in ١,#4+‡\@a55XXeH^)Yy#6-88zpV7gc]lav0xaO^+ @p#@M0$JG e Ys2G߯Y˂PH}Os%ꤳ kAjpU#QoY 1xt?uH_DT'rnU/ch䶗)f .]Uuv 9plsvd/k늑.;h |A<4ICI[PS̘Kٜ[vrx: rp4t@g_n CI4`)BIF PSB%Ixp{Ͷ?vurӹ/Z<íȻO}"dGngZYW.ѷ $/$f)N>9> OX=WHe==3J$Kw2y_BW=J7\K^o/I-40U,S?Ed˲Mۏ57+\AQ)Q9ʒDA#ȢVg 1(w7U ^U"^* 㟬j+)H_cࡍ;׳ 7ilv QIT !V-u*;z:{qY.˗ aX : ypl=m/0,Fd9 ֹۖH/ $=Q<95i_xz~8G l=ӝ!G%3*{Ycow=Yq \ $g:Z!'J* ԅF]͑ Z}2=q¢$EZtPKjzgFVQ]BB@X%&(~HޱY+O;w%+.ͪ ^qޭON߶͏Sc"dF㘈#}/>RQx%Mn>ﲇ ^fj ^ Y[њ Cٙ#{a17P%rQ9 ce?qKKE| \¬JPC_x9HNOd/gU?Smӊbp8(?4 Ŧvbi ̋f$ǍS[]K]Ouu' m1d ?~t>5;Y6?Q8GQdF+_TnY 6!WiwR$-I7V0j"~S75"'n&ہ7t:P pflX A*0v#he" 0 ڊ >=FS[cyk-jij I!T}Ѫ xiK<ԟmD܊E//{7ImTJ9@~oVQl7]&=ks F;d@ n 7y7nR]t ~ x(T>~헱C%~x8$ÊnBƶLq[&D\IB\BxIl?|@-<}CFsf?3::jlFX(:\+7:8Ѷ[j3H}*ȰfD3e6}?"{ĺ~XiΘyW b>m)mq EL^CV)zc8C=1=Z "$D8 QRX1#jfe  4=<ိ_lU}ႿT^NhJo\zG'{x:[oR9;j h`~ (6 }u#<$U 2ӻRN9Mg%m@u!IA2zRsgBqN‹0Z&&\tA79RO%ɯ?{Z']wg@SW9$C;j7\Sa VW$WW]PA.m/4)3\Ur"N}4^$2xx0}wF- Y!"BY!}O"/3O}dr.s;#z7nK2dbb88 T aJIf9* /$ x6#GjhZW\w]ؚG׾% >]ڢ;|WEYm,8cx5R\g ܃("@wvAD%IxQcNt)|<ܷ߳Ptz#~ҭQ.u-'qo?ck&+;=aN}pk5ҰhBi d@~Nrxpg3\IÄ0)yG<-E sWd"Dek~)%Үdr_0[TOt"GzrP"+$QnZfA3?Z_ ,iY-= x^uh उ5Hr[ ;|ٮ-\_A6 V~b*EYhg^^ 3= z `-eyzЊQ(c8Ud/|3 UN/C_H Mm@(}eDRA<B0 HMTTyT{&(5@*Fi-P\ꃥR#Y"L!+a(%=0;/Cެz46ٛ\eef'=W-[ѝyVJyiJYSM٦ˡ!n2g,Џ9g5|M&}M:gk~2kIXs}r(@|g(ӫ]OY%xBXk4+ Ž@]Ôt[ZF˰c2>Nwpe B܂ǓS}!eExl#w0u[.WudjmlwVB3jhڱ"ueW R\s˂|kY>Em:beB!JÛx`!- ĶM?OZu"#s&i{K5gc(U`*~G|!NYm$Hi"XA"8}d3)b4 gtb;mXEi'n( A+jah_,^lh[eSԉts0PĎ=BFx>M"N=3USdafS~G$)Q @"6kY:^6/lZb$5*řQ "|%奦{:qуnqRzqPP$OHkhnìСuZ4 ,Lӧ;3Uf1#`|= |8a;Y)MG\SW<(0.w~z}Ӗl b@['\hQ~<ѲB-D ೸/s!*ne!U;}+{_6"wtF]Crapm:T0[IT="Ń:׻ pzEt6#>wqe!" M0zR]xɨls[ts),ܱK-a@ݘAnk->b3U| }-Y2| Le;DSOza 5C,Ȁs_Fuɳx$Ь@Oɇd4<;uZ)c'umC#c? yt|\LpARee:ťQ$Ds9C Hsz ݶ 9 Hw+J(͇A>wy:ߒӘt/۷ǷK$#l=N?-tcǨ=1f*#gRBmƆ,x'x3Tk1nXLh2,( bR6'7㶎{|x廑LPKZ"M"LGiu|PM5ίJ`z!<s_9 TxFmƵ'>Fdh!#n@<-͓iI |öʃhfheN_;:j^}"JMvxÊeQ3x"uE\^sڐ{t.4<3פ{E>`=V_Gyt8u 0#9&yARDZƵLp.8I TrCuZ<ԶaZ|ѰqLIe/YMB4 2f0D6e+]~©pM^5߅F@MA72EL]Y `.J3X&]f76߷ҒO8 ۱Q*~E_ $·G7$Gϛ3"y*@-[QŎ3:n&TQ~1T!oμ|s H";AP/Ĕyeֳ͘Yͯb ?g OdV%?Lփ&Ba5 [˜rdYCͰ^,P}`N|_Lz=8rDu_FBB ~,3p @W\(U @g| tMIY!Éjhu\Rf+75WםӝOaf1A:+EU6)TerXwYLWZ8U O!$MA''=> 7Ҵ~U a"ߕ1;?3:!cjZe>`#׃#yH2,R<+gX-$[1r}nk?;ǣkL~/JpJ:E|/9PhUG5'wV|4>>7߁;'Cֆ#36'8 dr/gfg"ʦv/!-S_~CH_rA6Q p$da!.,uK+ ![x{7 ky{CS:Hi>OGWѭkAtO8y"w3.> y ^}qWv$;aӆ%i ӂVQl-[h\8χ霒%ꑟL#60?DÚO'pVTpђ#z 1H4d `)} B^#9MB 08# ]v?g Q&.&_ٜ7¾IWשfs]E`` 0f'5R*#ھ.A}czKP#3Q(3c,ٛP_lmщ>EHMT@Tջ 8*~$״{B'{qcxTZ9İRqXH?:^DٸCU |el[X/&,_+_9E N'̷z]" 0 l?)f_N\yoIfHbv9y{*>G't.q m/LETT",b(MS}.]r&okՀM>YY:c.!H?Ha qQ>bb6XƿrBT; 6k`)eCXꑂŏe".p CMq袈7jM%ZeV(~Af~gc֎نEBi%fd]{qXa`Co)!4_2jV>s )*Q\GH5 Bij3n~>F>8zY=.p ~H!eC};DTX"Yb*_7zjNzeh[_;*\ۮ6SC'C bT1y%[bUU ʡɎ %Pid Eg@g_=BTKEv%*m*f A!]|GmT2"Nh[9hTKdȊ5;I2&'l%2IfD;f}z %/ej•|X+#Tc>rW_Y+449@?u_{5sQ(CϬHޥ, ˖BCDIPcĢ 6 ͺkΘIiu>A F?ۂqdLuAhNG}9l| L nNgꃉcwI@f,Ds|uFeU!ʣMޘ"À}mRsckgkʣqqbEYÈ4M4s:D!y˩㑑jCiRJ +1Ⱥϥ8y8?uRuP=5fۇ]ψQWBTs79F{z' .h"!]|N]7V8 LHo \+3:cqr̠ wp޼VBkWÆֲ>~# iq} ?ǖz(X-Jq;ӍjG|3DM l$bF+YYh湅hDvPddnܙlpQh@ӥWoi!"?!/.xg՘Au@dJf9zÜPte?va{Y:j! x/!K\7<*2̫ a MT9<B1 _(Q7VB/!~ash<*ڮw$A$}{Du'A@/ kPՅ ֦2֢t;A[&!4J~jGHUj pɊ0TI }\ Y/&3#@l{~?S,JB$UVSD~?Qs&9mq)ADO{vpi(5T.~.$'TS>Lһ ]rjTXk8_%rg$VHLH#Zr85%ڞԳpԈAYIuBzbC}&DN9cuq,&[OxHwSh6O'W?t'A-z l+aM[R~cjKx(;"b&0dQP"/0{9n!„%cj^{wV?3T8WG3L=o TE_Ơz- ʷ5_k>o9~"?z7ufݳD\; n j\=b9İ9~q,0-@@oN#&E#(s]rW>8GGAhheิ_2>Ui[mțgOrȢ= &gt+,Z?7mՋj8+C2ٸجk~+#[}-uc(E*? #Gcg6gv/'}:]i~=%4IC$UnbHE+9c8e߾6ÝpEt QyB;@^8×9xWY:v/tfдBCbu0d"E+"rHz[T.s d!,RبG^}p#{?:jZhd}=C*B␼ C Mb ̚t65-[\rW5X|:ezLIX-?]bzP F*ޣX"u;S)WX1V HDU7ݦ.A5ՎKhuE^PABD̊P! iSv+Fe+J-"+ctY@>TМ9r&afPI|/6yh hBOB)ck@v_P%hZl. /&]LĿyg?>R"0`H} - s!E]kNGCJ *FQZ?dZ~_*aԀ+?+D^ၘRYg7VewN'(4cɍou3ҴϥEUsb1a?]ә#f?ktǧ^CT"J]T܁>9|$"{\8fe0mR;P4Tnvc;>B͜~̛g,Gu0s|1e@2Hy*b^TB2h. 8f|ߌD/" a:jUҌmF_ {2d]Blx3.$j8V2Ys붇˹%Y n1i&\:v>Q5Tg"j?kvNNqC@N a22S,[*k֣z@3b.K,uIq|[DNp:`ga[&@k+B#-9 ^i1nQ%yx`eB{[CVDpYfC!com =TqEDZr"lNӀSŰ!=*m6lBtN Dzr)#4AwBBLf0^=C݆u.LO9R?ů5 ` BB5^YmOWRZQ>YF:y+ -K 9Gܺ\iCn%Hp`PeGNCN|sײk[-,6t(熋 rH6#VqNxDb/1:~⏟t2~J\&.P=Tef]@1O]ЬDE/&T>;!"$nӴQ@Bˆ}@X)ۑ5WNJ,xҌVd{RB!nCIō~Q}U. >P$ޮiGu/y{~- G]>qz۱f`$JFA8u?/"*cvR f NpW 3 }hߟh+zlH^q7KJ@@J#a@}EƏD݅ Zzv@)IRXg (9}zL E76A  zj.w=Hx FH0EJ#RE zj[5ܷ''aĎd[E[,14ơ+ǘp t{ 1Z:%x06*ZGĠqc RPKs[ЂqP3>͙7{@RhOȑ\a[-'7\+ @[J86΋q(ptyJcc= fdˢ NG,} ?j $D'N /E uG-8::۴}y{bh^aG"Z]1O%]^BD ['c4HK-Mw: LDħ6KzDBVwS(X`ҎԸrIf GJ@,P+),\0Xu3WG?G1m{\sr)B $$,ۯq yO`J1.)&]B+jP}81ˣolB5EZ@`)̵s۹8T^dT¥UY+Aƃ >v}}{xPSϠAPf^~:kkF M fD͡Ic6;Q Nv<@DKG;t8Kı ?F/顟j!>i$Hls G;6`m)/DፄT@.B_04&NplDȏ<89Y dT~|D7 ˰ܛ!k]: AT"l^DCGAqKD>&|ofQ+am/kgyz=|#`}\LQ 8qwu$@ ^Qx0g\$밎F jOMW=&tƒƊ0 \ڥKD(N&ԥ [tru{x3xyQڕGETR"4z-j7O\8(.=ǝ6UI)[U._! q֙/hj٤nel_kQ.)qpDB6t1qeKSn_mppTJ^N{˚p)O=Hs]9ƿ6hlok rhػ)`.)L$P,p f]X/֧7z5*Og,-?9`a?TC_[;By]Xz5Oa\Jd(qZDAA^} C?)Ax~8$AUJQvU@4 sG޺b @Kk>sȨU!W?iTm:ZX|dN@s} na8S.Cb b,e21_1=< !2+$# 0*@ly82'f8!@(!-"̗m=S:Eڻwp愺a3Zo\&~)[pC*e@mΐ+$A7c:1% le͝0-JFGb ˿Q;D9@,-An9PtVZ#0i4hvx?b];[n%A! 'JtϽ.tuÄ!P[Ǖ:G=_.u8=!n4=ϫ/Y(]6{"GHy93O  k ;ت)AՋ\(@_frqw[[µG!Yn_fhoW=FN^̔ gdDu3$(i]cm#-َLQӁxh}) S'r#4hj>3s[̜ri 2 ⿫i! #2Huʐk6NnIƣ8!\9/*ت|BKȅw A@Eb@yE}|f(v ~?s/#=JrϩpMŖ:cA3Mv ݐ i:LoS~ %C۳WPp2rJJhڞ}T=5ЅMptwoy|NzSQyV@Է`25! IpV! A-Pe&x}[{BE,~ Mzwq9[+,>fFY흾'|s}e=m2 ﷭k[EsQW2Mw}rV˰!AF(k`,8‘<é<;d88}`$MzXvCq/ngM#^{!9((X?;YAK+cpᎲ^cj/aCi{7kMV,OK: >fd`~YoI\F;$M^ _8P'A:o0:fM˟OƐ`ߔF8A}|#r0#ztL-`| u?A'a/#lBBr]Ӄy#g;ƚF+"h@W; ⴈz9 S~C_w.S{cxYU^dvrg :V2%gKؒQx:n}?i:|iqkg64)!lV~}dAa'=;?ׯ]6Mz( fhZ0RK 8XT?A !8xxym L,7a5aqP#Z>oH_`Ze+b& lJ^  .|mfCC5 ةx">PWGgOQ{j̈4#N9˓G½ȤywŲr2ʄXɺ)Db!;gBYUigZsD > np(2 cݽ9Ƥ0Ux:˲g"n1Z;|~^ˁn2!%\7D&Jo7x5"AwܨP.`F1bᳳ'#rNhp}ÑeBxֳ9BNq[on P=Q0xV6049l"8jn"m9K5 v6@)ĸtxqP.O[ݮFG#8*6#Az|H9K:} X4L:..#zqBs`q%GD×-<3KCͅ#[9LI K0sNg8tN-hWnO:_SjYȂ͵| {.7Ypt&-5ꝑD8A>4LX5ݎ~.ֱO0 (m"K*NY g>ю=iݱ  QyTs\'Ճ2UD RpͱB re`vMrG\y[)4[! "/C5/|5FFתă5:LT4^8C |/TV7xC8Djr㪌ѽJae#gl3:$k[GstU> ˟[v,6{kၑ"cWBCI߬X-6`%650T[CΙ`1燃C0,?9a9q PbF eqOok480qt/m@um(B$8Y֠S?y\熥6eiRѸ}j+^.[w:s/NJH$P"dmb^=D[z"։*t,=bSpZ$ΣcC }DA(!okK0QhCw;^͈ ckc˵p*Go:vOȦk@;QޕcHf+g(I]zb@M%HAymoS#':}"!Xa,Ϛ4L,8ú40 =qUufQh.9N"\5X -\ld(mT/L9qm91D36zO62NM0(F1@8O/c0SՍ3(MY;spèo?/Dc]3v+3p1unu{w#cKi%t 4L, l87%R,|n',E3N<` -JNڸj[J3OX<r@Zn"%wrdi>BKtdb922>o6ac,S29ژwUS?p=DaHi"A/yx1p}=S7VA#gc S[ #To ӛkh#OK~@;6oF]Nq:qƴGTQ> 2x T5ts4a\X0E!ND X@'Ҹp .,SipTT3QGΐG{Zi`l'p!*DtB;Y/ņV08wsf`Bq<;(|텆sl*XZ0spf /+{8T$9L[Iχ( ޠzO]Zs*7Ld7j/4ᢅ2;0R*n]po~Jm >̀+kK݁յ:jjB2R v$=4AmoO m3k'>nG\_7^Cn0>z f|N>CجC6;yQz.ܯ}͗O|Y ,MvK=["y'F]EP'kj |;Md-:?/ OK{zks~0 6I̫Bl2,zA@7Րg"7 ئ3-y WFv`P 6Dc N,F؄f /T@~0?^x\U$#_a&&ƮLDG?R Qv_LhZi0}8xn&!X((ܹȭsui&E|w蘴$ss,@7U& NGĎЈbl4UE8?)8ѩ}x;xh-*uRy'$8GK솼Wlu8qA!DSnT7QnL srŠz,xV  ıybox -7՗Vưg0tYN)y%k2 ҄q\/b\%{ڴ Y~_;Ziip2X C&qV(f.J^D%{Pz+@9VڰqZdg8W w!^LTY<""_7p3Ue ;XXp2c #_q_c yae/N p!GIjGU!R #D0hu؊uDB<c9&M9gQ`~ǣA夙O!@ i8QVvbH{k8n> 8T>>rq36wy믧ݿuؗDQ q7@h z3b„ aCA"Tf=or,=QƏiN'~>2p߾(oD- 57@W#ry(Uֱ6A5^t* җ$pO]M' !Ia `s;MI WNX5WQK`cWٔn15?뚠]0^ `/^n- Ru:orgI鐫r}Ȣ##7+9ʡ% 'k! v0}18k~,X:^ADam7T9QEԲԠF"9Jd+XaJ&Wqv0R70QKlruC" ku>^9ïc^Ult^\u3Y}ֲ'/[Kb~rVkM8m&3/ J$SA8-K/Kt>~NNPhwhkAvH hyECxs$"vR8I ('#>1H˙jBP2vկ˝3h̕}9!\?KzܯVӚf6ߪװGF>T%yԔvПj7Chha_ 7r3G4%0$8*TOCxjdEPxwI ] =l̀)Kݞ臣ƒ(imSwj嗒p'1X2T8g"E7Uraa0W^Aq`lLݟ%7Eƫ.`@LR_z`K p^HG{i#Xzp5%ȴQq}ӭltS0i a oMZ5pF ;!{7kO̵=x;K1ĆpPq~T?G(BWo 0W<édHkŞ+b)pz\@<<[Q "CD@q *Po>>1]p7(x,A+r ;Gjy+ :,T(CakW:^ڣ,ca3jhHM,@m%l5>`è٫UHor 1pP1RC0Qs%ͦf#~6l[NzQqA}J? 8^ec { U?/B;̜5 :P8HC/{ o0섪mbp{A(n@Xb˛lԓdP0N*RPړ b;ZZ' "%?P-uSz=9l<[O}6&Ф5MPtVqGelTaEM~tࢇÏ |_t=vdNX=Βo6/Qzb= tTɗeuBPJ 9tԔ'!>,E: 8>PP! kþ|O#,x$T?Dȑ9M8&ږy@%Cl}PYgK*ÏLf#E^aJ[p3-t߾:F`ǗOE,QY]d8G*48 8C Vc_kJ VYa4{!Cx_][F"X t[Fʥe*yyϢhTDSkؒ,_ Zt,SIU8]XиB-Tr0@GʍZUo}8au#~N"~Qw!'䇓dpH9&ƨEYkt坝h+P0>f=L5Ҩ=sijcvϒf6/QNEl^'teR@/Џi4`8cmqz^w|>IGgأ=ӀUIXhEu'w_QynxVi_O›}IwUV2wͲͰI5gFf2 >h< iZant&3;kcwV u0t&ꟊ1><2Ih#iEKOxG)@v' iƷMb b5'Ǚٔ?L*0Xg =A.D\ZO=;cvWớ?.jI~wg[g)\h Jy(@uk~ǀ f&Kv2 ? M%GB"?( I갗S fb~2)O߳)hO_ė] RI5 "+{HHi>uW_?b+o6xY9&}ii0 (}fQ.{c=Ck<p"p//~EE4g%'K: qOgUÀ]s ?sIѮ{p|KJ:#LJf3CaRaz>ٺCOZTFtrxc?0G??Kf#ܠ|L!V͹9a!4JHiXkw91-݈A`kw >}9l76i6~r17oݜ>MOo⢝q%d+ьh^Bg.t쵧=VX1WbsAN^jEnӃ'A? XX䣳wDz2p;ͻ'A0+3M2CO3ksߙA\(KGTAdAa.^fg>w:}W~z8AѤ=\ߪAyYE,zxlMf-~e׼~]#[gRGkP"@wFO,*v~HZT)9}iߧ'i@A+d:'=n[',>4Hms:2mfOMNJ9 npaCPg',4} (9;Ė?qR(֪`!Jx.}%@_ z-Pޝ}=cfr_<"Gї?<}8>>N%P ~+qw^9fĔAcw7d Յ_},_ѺTp3Wgif}5˨K LSIװLIn/vL)9xնkCs@~ƻv?w> RЏQwH G8i3ڷ@r -ƛ'ryl[=BGgF<^Μ>[tQPgՎgggXq`ls28,7t\ y22c̭=ޱVCV{l7YgGP-9{ axpuNѲ:al&p[|Yb/xׯl{-!_{y9);wz0NΣXbbީMs/:n~\HGI9߇|>hLo،#l^iR5B,8/NɘyǛ[W,/kW0% W?v/ܵ 뗁?ýr+>s:t|_QY {>,ǚ h56VH `״s럸Ui2qn@|`j!xu\?U2Wf1Zyg?.|\\4/vΦK+\_^| Y>'F鬰 hӮҌh?+6/%K|~Z KF.$aHz ˏ qD. p,ԏXl';o˞RJ=5`#LܵCTȢs*e1ae@^. +ۻQ K@)G}!;pX4;J*i:gHkJ"͟.Wm3#[SA'=mcm-FPں&1P\͹GTṬ|5K}ҝbj/rG1ǵXgs-oVĊ%eDE[a;צX;:Ȩz]OgKG 0ſsx{^ϻΕ &D=;GnŢ>~0R+翖oϹ7<}W<Gw vy^ .>G\dz\I=lˬ@pv3:/H]b.tFU[&C  PpAǩ_#f#Ed@D?uQÖ#_zj=P$SvSnñ.HQ D2MޟH9ן(o峒$=>Hp}' ?7`N=R*Is:"ښ*1Co v7m9@ {{gP ;i8]~t;z;_O:\Z Q0AZH,}!V4RA׾7(>l9й+yQȇ뗇nN"K@d*Z;ĸlt3(Ϣ$#@r9ъ2ET=H"zC 6Vx;A!Pm!!0Ioח>7r.n`\@BQ!slE:D@HZs;|'*0pִ y QŜeS`Gw1k^)ZXc;mΉ?Na2Y fżUG6(vuq8@01MLdjoXo4B&r1N;Dz@5n!xAtvj$ԣ#K`A@X" Ylxrv>~=w:sSZhK#21\RS{7 AK= oRoVJFYۥȋvٍkSr(HX(mp&) ;u:xr$8,A-8\~K#!!id(g+ڲilwiF&=cT^%f:c_GVNu\߶h[} HVo,Q U]q =\rH.=`;g%9(!Cc]ܿt48N՜8j:aAw+sxď;{C xzrVSNj:C"Uٱ|"v;:=Kz3qzYr]qZXb!J#sLY<)?Q:6jI!yVб/m,ts"]}ʉYwKŎ&O7ĸL@C9_Q8X)LCD1 I<`>[ cj G%U0xc Q)4K z脍ة\L>h' D,% V:쟈a5`ι?G;Oc8"OZ)q4Q-1sل]I+?$éغ|X<~}񛨡3g:C3?20tա3$AR>-3Uz W7ضnKRG9ƎgR{^? 簪5 \v ,P(1tm 7?hO?L(A$!T۴\] #d|?6dE?}e$m&]-Sg/0 P FI8>j8n9u "Bx;z/B c&`x=v5\-ؿ~N;Rhs:ؗ%7Tz/h6 $ 5䴈Nٽ=gW_44eҲ4t!~SqaUi;kMֆ]\"1ZrgԢX"(I}l75cK$J8_)Mg4SDž7}#S[/Y:zI}3P|V V)m[2gkKR $Y#CMD, 3zvsc6-A H\UahckgP@YFౌ3w_mꅗq*:x q9)r4 vrE)rho0 W;n4xq3V/.DIqVޠӏBQOj4fM~,Jj[ͮtLԏt{$S>;9gYbʏz ,8ғpK<&;" yݵW?hì+qPMr͂zXE  A4'NGptPF3O//^: I$cߺq55|u^0:zOƛY6G4U&o0kK͔$&VFbmvW'>mgGq$j;o9Z}n`'<;vNc%bz{~Gj/pc|+[!uN7=M'&GzYA'4P*_ALotN)EHiP߅}*jGFN4F;+6l6Ys]9ed|_dCT(=3fW2DxyU^mDCr(^j:'CӏGbNb> ^Q\=KǍw D4v3Ps{?" G!5Wܹ]&u9m 㓁,10e=߾;;xQu\O>Fs݃FXt)͋jdNRHb"po?^:?/qt!@g*w;%=q@D!/eɽO eBn쪊' 3%3ųuS" g~4HKhTqTSPv+{xs帣Eӿ`)] B!#,Gkݍ3Q 8+".AAY/4 p&umA5'6sjF[,zp{ WLo*KH+hx=Wm 2\Z|cqs'϶(Hwz/,ۃuM̽uQ6dpaHjn6\3&Pr8 ɣg'/FJU)}|gfy/-=VD㐟GxY]v )!_2ClD#%s4ϖs%rjJ_+r^?R]3L- GOm]eGC@O"U" 2ď |PUF2_<𩏛CNS?.IMk6X*Iy(;2}P=>q~`=ח0UzU+COPLb7XJRMUZϰPq_% }VWzNw@苬)nv5! P~.:nj&M\WP&~_Klo[{ үc~!y4J_tfv;o o/^V [eٟz?~wsGeS沚 p DmL۬CGH@:$:l=iOd~<1(\+Zjc=CS%'u3rC%4tc(34ۮ]@R;7 < SҐg[[}"o/eMB xҴ ߜ׀ҷ>׵x̵}Hqxq\݋S)x~ߩ/`kUU P[ɋd#L0IkoS)Y! b\(+E^Ŏ҈)MNsVu!̬;6՞ ֵ@:h;\͟9_w>r\4k&6óAjr}6 -cC. a6HނZ`H 5`& BI@8S@l\kFW 86)H(gdL]&" qjىv;P~sk$EP嚖[$,{0'f"( 6~x?Pq=MrqŀK]]n<hl´fDilU¿CIկ]c22ay6 XQiB\+gFtݎ9<8yu x{h!mA'""[Yos+Ģ&Eh(%JP|(N575*+;ϔe=;z7!7oHy*2>߅>˛쿵}eAf;V>g7튍;Qt8 A`4[fVAi]mGeY` tfXd%HBY@P .#!oYˡLE*Y _0oB 'B|➌@ɬz̜rIKjIX=_Sס9O]!i%R5iE믗$Ps>PEڣ]ֽwr׹Ѵ'>e=>^YK^=NPS7me{[-)silC]X׫^QSK^G-zњsߋ꫹emNn}X)HD*Ѥ0׈Owhoۧەi=[-۞74e7q m_\оSgf\=)eչKg>XMڻ٬L.Wrq^88bCyqSC=.nBCǞ~>Z(oKC Pwd(/ړ؁$%Ac>Gm&E'A8!L6ZhdsRJ7AQA6kԜ>~^>("oOUYnFAxe?_704: raO"ꠟ,m;:~UWh~۷ώAS6Of7v?ayPK0DM Cbj DDD@ӿw` yόf&ǚۆ JY[pe*̿*|qtHL}x@@)t}\:?zOF Lu~%N]q9`hzL6`yq`OAՈNh^aO88h[VK{mO[~bqUP-rz ko\PGG9GBc^1 9y5^5:PGu70@Zt=Р p@ےHBvc|CP'2C8s$`ꎑʐ/dِ%-|Y\5뿷ݾ $㷚[0M%ZG $DN2CoBg@ _55i!d z0F#ј u` JXh<"XA#S<Hz~9'j(iv{wg¹?)TRg5\li~`{*W3|Wj 8i:-]2kكo^3a?pW >lmtU&EZ(]J.i_vNg>1|A<; fVf@ m3zKSĢ&d9a8~ 9ү .YO,?jnf{HjCGC㱉0;*Q^sj>l!a:3#']äO}=/y'f8rf~zXTB<$Ņ?;Cppf};xÆLB$&1$wQ<}w(v]ݟ *"O;0臇iB񅷇V: 2%J;! P_=+yӞ?*RkI/J A&bjѳ0b*{`> hlV@,Օ5㞘@fDm@AP׻0tzӋ>AZ|fhIOUQW獵>y80#v6Xc_Ox .qoQ=N&SNQ 50tçuhe{|odp`7nО- oOh9}R8c8TZンӆPuoO?*?J X y:Np!6;>/Է'} oLà[؆D=L a_s(&s.%łVՇjn(y?J#G)5 R *({4<{< b YCBBi9tJ%S˩F^<7|~0&7-fb8Pf[4aNKmW~ŗ#_ @$B1S0HG_ IDxO’kc(q|8ʷaIB6e7;/vbC]ZWfWɞ%34Έ"xfY;Z|:!o.kvpZ a ϥHB9O]}k\ש_*i_3Ӳu7 IE0gXD#׼-X`FVq)sMn?pNUB-',ُf?d>^'d[|zWnM`vTBQ2Ox=8ս842O>n}U~-B6ps~/ X0͆,A 7 -Pd@58ɧ/x[ 騄v[Bxⴡ/ėc1s\+> mwi۳(#LHCH#<W L^u