summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Ritz <daniel.ritz@gmx.ch>2005-09-22 00:47:11 -0700
committerLinus Torvalds <torvalds@g5.osdl.org>2005-09-22 07:58:24 -0700
commit4c898c7f2f286b204fefc5dddb568f755d195d0c (patch)
tree026fead9aef220a5fd994e2eaa269ed598651d39
parent0b50f81d5a63428f131ff20596f4e3d473e5b94f (diff)
downloadlinux-4c898c7f2f286b204fefc5dddb568f755d195d0c.tar.gz
linux-4c898c7f2f286b204fefc5dddb568f755d195d0c.tar.bz2
linux-4c898c7f2f286b204fefc5dddb568f755d195d0c.zip
[PATCH] Driver Core: fis bus rescan devices race
bus_rescan_devices_helper() does not hold the dev->sem when it checks for !dev->driver(). device_attach() holds the sem, but calls again device_bind_driver() even when dev->driver is set. What happens is that a first device_attach() call (module insertion time) is on the way binding the device to a driver. Another thread calls bus_rescan_devices(). Now when bus_rescan_devices_helper() checks for dev->driver it is still NULL 'cos the the prior device_attach() is not yet finished. But as soon as the first one releases the dev->sem the second device_attach() tries to rebind the already bound device again. device_bind_driver() does this blindly which leads to a corrupt driver->klist_devices list (the device links itself, the head points to the device). Later a call to device_release_driver() sets dev->driver to NULL and breaks the link it has to itself on knode_driver. Rmmoding the driver later calls driver_detach() which leads to an endless loop 'cos the list head in klist_devices still points to the device. And since dev->driver is NULL it's stuck with the same device forever. Boom. And rmmod hangs. Very easy to reproduce with new-style pcmcia and a 16bit card. Just loop modprobe <pcmcia-modules> ;cardctl eject; rmmod <card driver, pcmcia modules>. Easiest fix is to check if the device is already bound to a driver in device_bind_driver(). This avoids the double binding. Signed-off-by: Daniel Ritz <daniel.ritz@gmx.ch> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--drivers/base/dd.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/base/dd.c b/drivers/base/dd.c
index d5bbce38282f..3565e9795301 100644
--- a/drivers/base/dd.c
+++ b/drivers/base/dd.c
@@ -40,6 +40,9 @@
*/
void device_bind_driver(struct device * dev)
{
+ if (klist_node_attached(&dev->knode_driver))
+ return;
+
pr_debug("bound device '%s' to driver '%s'\n",
dev->bus_id, dev->driver->name);
klist_add_tail(&dev->knode_driver, &dev->driver->klist_devices);
Α9,SKto佛6ulmBq\/\چ=RD/cK6F-jAShРF#$ycjn>![O2~Uu]vUW?Ӷui [ɊsY9𽚯μV$:/ӹNo .ZiT*,質'T')uA2-j_{ B*Yc4d{-=-nc.s=Ze|1[Ya ~M{^\.}w$*۾*jdҜc'&׷=iKэؔFh o>G^s:BԡerJBt~O|l{z-Q}CZ z7v=K{gPg/-1O^jm5#ófsDqZc_%)m3x8c9>5'oij75\zLz6=j2W/M5F: 1]ϩZ0/B/z*Pת3*Eλv3l̇ 6(+i8JW9f/vmskTc .`;`CQJ"1hxgJ-]Ćw- \ĕ)H! :V*?FB 14`;ww&W}Z,ƭz\}@q}Z{sP钟a~ps}9ؽO^pXf4Ҍ(! 7vhPVH(>r4#Ρ T<s4DTm̔LZ<:۫y0\VJV,Lm84+ ɔ7a#]."O>F\n*Rʏ*Fe3&A1ncYxU!H~ix~G'exwr׺]K4 mpBhR_U*_+c4yᯯ|;ql"%Cd]G&9f Nt)9 M]6s [7Z7^TneO&1s 8k jV_0H$ {'f(d%-ۜvsCXu ]bqpucg^nƸ=*B9 ;˒D0|)="bpqP=3v P*,nJs59]HA$g){ _>s/5ꕕ_/vmay{,?=/Snw?DN7+4:FѴ__~t{>|=L*d,Cؠx_"QP@y]m8n1{t*NV")X/D |lT1A\Y~#јa93PD?Li  V Y[ b(c5! @R 4ҦFفJU'.R~̶:rť I)b?md)ywLb* L<#3;-78"j1bB U 'OP tg6|O_W;js_m 014n2|_c5PKjMXg~oXȽqϠs˯lCY<kңSox7=i|{T׹ߡ/XqsI]f& ]eA2+oj<>FׇY* 'RO3vSgG<~3˺CPk5<c6sSV_g?inըۯݚ 5vϟ /-]f/kݪWsV6G*,\t.Ff{n=k:^ZS\!Mz>Uұ⽎ח]U^;eTN:ҮWll̰f r^unsG'M>1!4:mQx|W5Giy>%WKI`!*S]ޮEBg:k.3nNK")nh+|?@/K{xk|7ihh Fpw CًͿ4Bw U Vru:0a)wDgW `p6N~von? D몯mq5^P~BGn7R«exZ®9TKJnUF׭"uILP*?gNW5k1[az_:gWɛɥ<ͻAt?m~vO.q=8XËx]1:#evZJl<;18C5Y/62'Ւb[CJ(XcEպQ˹zO[;W9qP]/{iYqtdkΫ({u ` bG * AUOW,.ng{;Qg)ʉ!0&z٪rU<!OfWunșs+TC:C"?bA8Y0daG59=L1C]˒}>ebąʻ K*.F_%+1~CCa̴i0VH_vmyݶ? ǢF* qVX#"ƬEX#xpcDb*`,qFcfQFʻjmmUUmv!$b-43m}NE[0<an2$1)A8,M+ -@Ǯg @k F+֬h( :G} /}`݄$ߨGJRB3?=>8 +>)Kʒ=,Iݾܹ6WϠgK *AD -ڨD(I$z@~5rC6DIN̼EOw4}AYСE7tI F10(<~ߔ 6dkbk'>(2/`Ƿu;qH0\3%4c=/G48s ]S\uQ}AV爌$N=x<%78YuN38= ;v$1"ɡ*DZn[7CJ}bR9DO%= J^_.B -γ}Bd?[ bՑHv5?~?}Dϐ*EhcE;Ҋw8؇8BrǑM鐙qԯL۞#E|^4r"і8Ch|Qv}{zDy[ b'vnGcfM\K+xFl%-l::ﭲh[#lU1֙5k|uQʿp|zƉQU2tWǰV[Zx=5;ACC9g&!<9s5L`}=Ӭg4?A2 op{5[69#"f y>ф*"VZ=&w&@&A`z8+FKdWc+z=zFL AxloW5 x-E-{FΪdGfxC|OEΖ*=V<`.Oqm͗rꔁ}>|,xb gK=o[ao*E-=I=)MjڮMj6t9(*j}Ձ9M"/ޏ*gpNf:o n^<Q㣚^Uܫ*ibz9tC??ïc:ܔ>aеw/ovqőQ# B׿sd ±qIƤ\=R >ݟ^yi۷! <,fCxܛR83 >,! ew_{Àll̆{h~g ) B &mW FT-*:UN#a军2yhL EMy{֨$MFD3, x/)}@"5#5UE^s" +m7a, _c>18|fClp;l:)^-m5{IA?*;fef9Mc4>n"D=twG7e7>K2C_vbʪЭL!(ޗ,J{sX ^֙΀;~ܜ8/$kyS0P!;wC7tT)z妚#۝b\ZMutq媘u?<mx &CP/ߕR:;e+]*qwEnOO*t%-ǧ@9sΈ'ɢseXũ_tʋK,﫭ʹn=_NGuƠe p+57]R:$~]:nPM` '0.7zeijy-&Qtòm:ttxt׌;9PawOntBJ5o:M" ;WݖKy9gw2 g)h9'\"5pS흘sFzժt?'g jl\0h+m!fνsN >R(C ɾ\eE T]MvYńj /.=ra,iÏSGg7*AnjgV4Dذuzh4OTieх==ϟhcjvU4ݾ1c Pq_Ԟ,s:Y[3]:v>%Є4rI`t igC:i@z]}$9AʠO@$($f)~ώ;WbY:؈۪AײX] 덵BV&ڳ å9<\Zhm1Z`b=҇cQ zd .YTq7ViۓǥSm(OjVD|ch6u*[jc H|^dвJ3ײ7k-LE`_"e*S /]}ю"`)Z<#8TzSLm1TKhooh I=.㇯v*@  Iv[I!p  +Kpe`UA?OvSWVgW6sbxQYyQP. R?U?0pxq[ui";(Д{ ʷpK&]E:5/頁u*?`{yuX>V8aϡǛj>C4nSTi' j^Κw~y=pP絣ռh0th<ko.W)6sԼyzrtcpɡrqz'ɐGm׿`,SoUJGxisz쇙Åf`=VQrDKj,]U‡ gm²(T$SEU2I2EzOGlgc8);N;1G@F?R&I¤ćmDH’ZUlTڇC V=>O<=xкdf/[(RjnGr|D[Gٶ~tӊ<(. c6kmѤ1cJ}+>NNb,ņ8*$ 2vX+޺䳩Dؗn=u.G3ۋ髫}O]"* !!&ݘn6|qpv`Ȁ ut2BG5[sŪ.мP@KGQ>>HѸr(zj2nq: fy:DzH <j[mȬ oBSlW}_Ul挜0ŹF,**",QDS^R@mv>z``Z&ox&/|Kbuu WD#FrEDB 9{>0(6C}z|^<*Q#dT(FY F!_IU@0 tT̈́t*֓iQx!\9UT?@=>\cͬ zft(2ɵcW㹑iR őOCdBJxcSC;u>c %VJlbNu觋`䔳__Oի`n!`J_ObBlv1/g`0Qk B;P+bPyJʹLBU^] EHh@}zt|7 ꡒ:K7:YZHIaDA'" WA$Y*.ڲve4{ B7.X螂uBOӒTGc4i,NmCn d旦>DoA U_]F'Ł>c(*2AW-R|X%WhZCjry<X˪Sm3čyr |:<uߦ˅+k Ar\Py 5;T*YY|9mSM?R}cZMޮmckT&+(ߗSĊ&P 򀧧;67AFk'b~anÞWAxV _~lȺ -I㺍 HCs?.WfNxu{rgW5abF[x:ai|5Ә*֐59ڈS%W5o0%uI*?W݄Y֟3fXSJؕ'̿˖k.@ AI~L f<3^'Gι(o4OF~>m!~r>EYL):w}cyXڑ-uωJ°QZ`BDnŮ)X6 1c$ˑ-PBxf Zt0E5zj楷!'|jiQ1b 't0 w+ֳR1а+^d^@pЮ!W9f {B<~z0ޱ(ڠCz-^qe#5PG<Xd5 1@C^;X/svqt7Ɉ5rzJS+3"lNA8O}K3dXæ2v#jtT/N|+;Cx""d7U6 FD0zB<_>R׭Gh:#5&D緟g`a@@ ~1>7FB j1h҂Fx:r_N%_pb; NG %\G[iW<:a[YU?2o? 8)t& /|L`8٦{垩*r-[Qyġ(!%!>%Ժ : {';[XL٢ S9mm:$ ݎAӤa0tB@}. h}P3"AMDc[E~$r }WdeAW=Bz_tV>n㌋êڮz. Pr }u7M1֦4r!VB=34>xp'sPa]W5YC_GՆ>Xb P%R -g/rQ/2f_q<$Z؄d@IAՇ >mDuˣWJ`"CIcП^hAA@3oCodd㡀 kT16Ef4 P%v / smm[!Yr~U bAt uΧ`X@8ZE(Ox_x=\)@;Z#0|K( uh=ո.0n`KM YМ8yFA<;|.Ϲ7wS`7,pɝj:W`#Prە@q ؂q^pdEBA*&x(T7㖑H"UIow _/р\T+w@0W+m*wKHZ1#FVzGdp `e^= [\\3܃\Cϗ.H #VXa)GAFFcjA[;mlc<1O=֎gFZq ́c,| "W I)ih M̔PIQ?ēSv$E$>kg~{YR5KIvh/GJ.|vsOR*6yQ%Uժ*=.;-.qR^|ᦓ*BKY#nhӌx>LaCZA;Lzz~ĴyَOǞ0(qiNJ @2;*5+*q{%Ι}վ;"(F%^\O@%;}ۭFAP"7H VۍĞnzU-%7VB}G/eGPw|rnE$fybuXͅC3jӎ`l*J;[nQ_FAz[)Wm7¨?'|<ڸo;:{'~YvyGkޚ`ktܟ4p " bB2RI"7p|Y`|*x|$j`^㒠Up3{RE1^˰P ESޏ`_R DJF.]Mi\kf|1zzcǿ=J$BL<߽:֑ U1,ZsH>]~\B:S~M=pWjNj#p?LX"|\vMz<+y=_!B0e _v3 ʸ#%Jx>T5 ;ar2#2TЎ.V[ V`YiBZWHc.B9jX 6b/sR1))JK Wo@3>7o ,8:g0f4ԨC1$GG\30Wz3{y7vE>(V,LM@⭢H>) HbѯRhGxc9$CرXahmdf^#5t$Tqp.w_/?P#,0mJ A@:v06s1HuC9g.+0c x 0ӎ  u1 b + $XG`]V@'Y<;WS]4#9C"5LJN3+YU;+{"r[τa3KD*O] F;RaSi|Wܾ6G\c|r$[£ rs=.z8C?lCuVXqxתa<۠!`s ;cӻA3B"3XSi[b%E"ժR0F0SNF{;DϋxZ#r\4!HtK4N؈EX.CiXB*/3X J*)'ܾ^TﺼT cǰhHC!e8.?`|rY|*a ʾⰀLpwȡjcʰsd8Ʀ\҈SEYKpe4EG髐043O80n10 HGԎGWЁ!˺ _XVo!\j,4$ŽP}waU==Sw/q1sT'ߪG:0F>\WtiYW*Uxy@,;Ej=Ew{jd}Pսyyoƴ4ٲFG^EkFKoJ?GW. {X} ;{]V>޻z}sޔZAG\'q` @pA\g"M:6Nz5̥*lƩ}\ Ǐ{^zn^h(FSL)JqPyQijN7M4}MV_j'ʼ;5êh֪լ&ƒ 7ߓ҃QxV~+։,‰LGLzQߖg2 6!{Ńqaƣ^.Bd|EDT~3%8=}j./Xq@D'Mq*gâ/סdOs-u7U 80O/6K[; nj\Mn~QL::]>mu;6%Uz#&>GN.9ۨD-2M:K*k />k kѰ 4*Iio{П"AN;D8PNkc%_UI1-6a=qcq$0_nML4`ͭL }?*!FW pU K(;S\`X=g`Nxx2(?5r1X=-ր(^dnp}_@p/_@|0Ou:hs "c95A쾼C^> eW159]z`1r14o'3ժ6K)ZS=6ж-)Q>`vUC->+[ow<'X]6=h1aZ©řl+]3+Zy qcԬ)5Ą>.7-yrbֱˆj+Յː.1F 2 N$L43 b<d0=] ]1\ɧR=eсJF 5\j3NToL' d2>?LcAXaROƷN*4BYX#yg74)R٫qM%K2:9@x*.h hv+吣E UA6*5}: CQjjXVRH\)*@xGPm yXoq" t;1 e1=ӆXcCz ;XAy }ʮ1pTMQ %[w jp 浃$}|%*'2\K0ը~٘TҨX4H׸SwH]I_2T H{\hsvf X+y jT swfBTYr~?Kd x%Sv2BIGI&d)yvG,Y)XC vib|m׆v%GWE?{mIxwIό< ]AgnI6^HA!KU ~֪u AK*{JҴСI3uE% u@8n)0MJWTJm^0"@ lC[3` Pb`͙ni2>) t5~1pPƵ~1_\StQsY"u^jiilxsFUQ ر  @^T`ChFe" .0 ؊ s?Ow<[|xFYxv$e 76җx?O<$fY =u V_Qk7ͻf]qƴT䅾I@@p@`!\Azzdܱ,uhկC"iblgN4C+4*QLZIH(jVE` )K+4WxUOV6j6|aП3S90׹@0 ""0dM?}ĺ~MiΈL9GbP(E(x(S)1>m71‚T l AyS&ǒV>o*Ba.((.R@ ab~6?9=s|)@Z{HƷzi/vd2"o mH ]'T]ǝ9gg%aKvN)ɐ" @6Ko` `o\_ul1^(CEmff!䩵mʷa<-@?kyy=mi440?eqRu߶9NgBgG dРS~iԒCD2zRsgF3mx񺍴?sg/>,\i&~ZJhA|8G1$J6I5uP JK'Ƨ?EH Ze6.id|0a$^p ė`r̀,ex"qjEkt'%ڋ!P:'?鳝x:t ܓVo/4U -@]1*5(@B\s Ȋ/|lPF&c ²)-ӅAD [BNΧ(\q:}x0׽jwC 4GSsZ[ujĹ.Y[K9@0EYɃf耵mxSs$}wV *\4;~wk6"ss8뛼 ́y;ċ-Ct'|/:$:of:4ܹUF@xV`\ql 75<759k}5-t)UtɯH"̧s\'D{p h ऊm՟FNQX\'W5Ek~_w#bHx;lRQgX_E&XL[5]EK&| ɲ;o|rq73:@N XRUAEIʀ(a}]B) ^Z-\,n1`(3dEMQΚU*Mb +P"iTS [T.NAҩ@q|`w8=ǣ?{o>?<]-v7+txWg?qxkbތ S:U^'kFLVy[턅I@f_@B>/F37@>dtoӥJQ$W[9T#%; N-O١T]Inr#|%{K\Pj t d nb[)˼G\Fr8`iZGWiͫȀp>I=8Q (g('"[K/NGDpDFRLBHXW`Zc .YƊjŰs2$ɇsWuz7W{pcR HZk"$rF̹LXRQw:&<6~ЀY+ݐ1 wN98K[ԫ, uҋN׽-pDn $ @ uHVr#-UB+$,aXOm#@sv_{#汱uGIĩ  W8$7r~.ϻ<ػe*V !"JvүZN-e@,f%g叧U:-g~ {P!~?n,NAH^rW_ӷKoTB؇)! =r}e0N D ۽ee!'&OyQ]U z(saYAs^1JL5 97$̠1?*L=#F2#k#U,#Gө-iOp;BQM<++9仪(nN7Alx#a\ѡ aR$f+#'2LRiN?-?tS@^>ȑ?M;zq.A13ͬ2DNq cz;9m3Eه` ~.deHum.giX)0w#1UÛ y,wF.|+}UG2)H?+(|hkt|Vnd Y3bix8S@vnڹ}]N,TbT 760g*7ai?,mm _'JK}>4k.fGl"twNaϰt952 \K E]k,x͂wTVŒTG ȲQr$`%Y>~ *5A@']\Nqycpo ,l7>y W ΔDR+ |\P(s)ʍ}ԝ:DZ-4ˇa/6CA "F1sf>Q1@o?Sh8uo/FjІ .$}iD♂\Wמ?8Xc<=x*C%Co{HG!6ޒ-_GkVI]Hqa&LbۇoY.(hqqWu[㜆N`_ՅhIN9lN 0͚.F_NNp"dn>NyIC2eD&8ܯWxd]H"77'u|;Z#U~+ 9oQCL}#U]9'ֆqE ^dr/ WF2,iSkHsg H2d$08q|Ks+Am#8k(y![0ld}/9^}Hjwڀt+~(O6kX2 }s/Da,rg29w81Bsx:v3!h ib$ G6.gm,Zꑇ;N.1hY[`'04GCN|AԻ`w˽ :h<ҋ8# ]нt\bzjXWȠU΂1Y*V P)R-, q2l!1tvj)3a+N=|>͓rv 3`U8Ú"`f nuU%L_nL.@Ē1XM#_fB0=WO Y 3.@A ,\m (_8+_gYД|wpy0ś} u^O'\t!\ID>tn:S\芚 *pEDpihHj|_5Gs0e)o[[di8 ?vI"D4<("&3 l|3h 3}g @YnCq!GwxJrξ G\ClF}PQPUT(f! :6K @ۍڷ&9|u+2,~(.ףF[bxc*/G6ĨhTpdXčGrՠ62kS":Dp!k#Q^mLgrfoC(EywOA1MwgvrSwvk{@NX!I,{ 1ͽsnk'=ݐG=,.cvmQo/m0x *.ԪYwv7lg[ >uR!MJGYCt PzqF1:p\!HXQ|7D} a}*>6".`|8cF(8VCcU$Vyڻo:>Xo2lL`);@̲X#½n.0 FJvU *He 1P I+9/oygׂUKhO)* ԩyHv,ꋠ!w/]FQ"?EF-v3-jazˮx!5o2[C̆:"0eb;!uQO6HEXCveRb[ABA(D: P1o\1'!|-I"O*hd,ȎH?c,Y@ lغ֌\ՍJ@M8eצr ,YN+ dCQiml2^v ^M7hGu8&9ELqh 1"=*<+6[.H{T'm= /'H /RqplJb+w7ڎlHl3W옓howl{@PBI.:KCS}1>pn+,xZ+&gc)jMR 1j<Φ}SZ\( CjzMj|5+򰖔 aܥt&ڹ$9k@m-{->~f:$`;%*([cgQ[XDʢQZ-z'hۍAMOGY/# dk:g u-;3&=8fȥ>Hq`qw[KNU/WK&MBbJ> 9)o( >5qxvyR-]/`o02鳪j^^܂АIl-V%9N@9!1~iP:=j\ qUj0ck2PGX"K\&iTGGɓ\+g*לI6ݼM~216/^/,dlK,sz]8_sMթ |{~E`,JB$;Ms^`H~IaNc6Nb*{5p͇vҹu3\=49֕^J8\'1%P!^#64, kN^# .X`c_\J hoQ2B)N #8ctA$G9Jvkzwq!-r jD-LgN)Sχ⺨sR[EާP 8 d!B( }.oH5.=@o [pV@6YH&/zg;DHW `q$,Ar\T}FrB2P܄ D\0 }> N5}~ޑXK{QY\ʢ5PƑc_>LU[T; Y^8$tagSBNJ|5{{@ 0Ɩ_mO,vk+1xT "+[u]nۮ#A#[yk:#f*`<< g̬bF(GDhXvWyvDlaѨ*9D^$P@bG" ~7`0__}l9-!-_}wP'}NnW_V1ﳏu>_44+\+6]ZD~.{\f@>qVSqH4{]sD"ߢB;.)G3`oPf!a(Cϱ@.) okPEˑh(#=ntm=)jZ;ظ/VqU+3K5[0bMl~Y_Sz.v.)Pl` oUBΫHB",f`A`WnŽ!~c@X_}hRagbjOUDeM&a+ ,mUk;:}iiE0Mwna' M3iSq^þFjX_m-Vua!<};L[_F?R|9l']EjG{1h½d<ԈTngZYXt:PyE~_~#U(Y.s%yٔs`G0#gFS*[e?; (6Y#q1 ~T3{jsUki!"Q͎cbul~8YLؑslw:cӯl`!54@J !!کJ-"Nu 8AF}f .LHkj)[t(_3om[<8qNMkM@%j!OW=J|;9qGa>-qv* u2 \U rRHdg&jcIt5dE_t!\f!Ʉ()Hj. MU'@ך:ↀ"[ӁT2S,[*kڣ)@ӰE.REi.6'žHlvNxLE"3Zd nlfd"2ӚB5t.HGׇB$!:O OkzNl䳏fJf(CA 塧ø߈⾉&R:E Znd3ɉjqGDQC.3уv@I Y2vrc=`GXx0y/sj@*p|a$@j~YmOGP/h"Tv5SQ&tW [ !>'j~/؈>=&efb( P£Sc0gw8mRH5_},4(dž rH6#UőPS 4Uf.sO5;F R\W/1OcAit+d)%Q.3 H#SQ$w*9v62C֨^94n1 mjTEFdB ަgc9E߅]LQb{豁tD;!8(e+wM'򂚔a~C?r'nLlc C\eO&hɻV$0q,b?(%A WcC3|c |fzN_c|K,]R8QM/}yg}:Ed7Yhi")n#- GY7Dh=ҹUZuNNj%@!u# y?P?3`X3E?ıۖòCç ,0թ$/< MpB?(Hehb0ko| F+mRWإ" APs<4-uLR؄|8A+m>R{sǮX N& U Xʷ*(kcC)UNE$\-~uT1;jʨ'UKM aA`bGR/W0ea5z5~cߏ` 6`'~p_koE0뗰iz}cu)j.C;<O/g׫~7(M*ŵrt-( -W5л낸C* ٰzy%1 fdR b AGi*q's|O8lLG%Q FקYމ]&8A&B*l qZ*xTB猍 7&NA Gh-XMod)F&͉,h\"*};4;h<[WuszkM <ӄcư~tqՃq"u!zO9Su(RBB}Ty udt"A)" |msV숡RE`?MNsGd h륺AE$6ңB ;Z۫99UIx\@PgA&(kW"5 ?Ck`M#nཱིmZd9kaw-ʽ >fqƊ%ްk}Wl{=77Bpi"Ii`C`ϋ:lTWe AF kl1/G' ݀V48(|%ZU8x%nS^6xdDV.@(@mj6;Yı Qg\W3{ L(?t"GXFpvw8_{;%f9#bAyx` ޑ_⩰"X#8y狸#u Ӳ #esJ qK H F9N>>Si*:!Lg!Pa |f*_U`B"]3穿uDs]<䜁~>27 Du˃[ .(2¸]:+TKĝ5t5AXz-L~jDž 3 1b~&]w!A-E-yuf-`{>്ˌ>cx  qbh͚CX"#dJBIO**W䠸wf=\d)Zd 5╍^;W'~O u/;'?Ч@XVyT#ZM9sKS^?]WNЧ+B*!N.{˚p)>=H7ԉn|`1zL[ j :0iBdbʼ효e n0Fr6# 1L9,5"(f 93YC3Xz[q@QG0|D",pU3"u eT9&u26V!$`[~\ʼn0\X[Z0 [~(nsuб__2-G6 krK%-}U D@OП~aDN"N n / 'ebΎ&֬NA" jA ҇' [~r2@RӠ<_sп }uz2a?H| #퓉LEn#c8KL"H+Ck>P(/"2 /ܹt* IR4 e\\0yuҚFH;vS_sx\>e YmPv]B0R}ӀU3QCN˼PvᘂŘFRC?fs)|}dWzHF29 vaW^RE*BQὕ3!2|1K]V!.lXL ͫď1+aeF4vnWRh"igF"e _ĘYz@QaЂ0x$K  ftVJL99ߛYG~  asX O9D@: ﭅ ZQnUiq:u6hCn-G9u<ό<zKۥTҵ@(*? GqOVX?@*fUp@-Wk3 ~-S@uA 0 dx}r;@t5KQ7>&$o5u'&~ T#L DgS"@?4`IpBûQ W_ٕze+WA,e`~h~Oϻ^"gG5uՊa> 0mBk~3'9XG$[H"BpXR>I28Beuca]z0v('1dxS ,-+Zݏk Z{MQ9/"?Gu]RKiq4BU-1*M !_ve8+_[tX=[@-CU7Щ!p]a&BABryR[d-2o' Ief~!wz$[7 ;ezL')iÿG+Ɨ$٠vʕ2]̡q|M {]]{%U!k޺-TdU=-ZqP J)\87:Uk]V@a?_"!..SC h; mzF-ʲJͻrR1GVwq9O"$3:cPBͲB/KTbcȶY#7\٥*ĞJ6z,~oeoTl=ШMŽ+I(K4Cn+Z&[ȥݷ˥` jgT\('C{Bk͜TOywm|"LWˍ"+Nf?{DDĜ}w_v,e9_K?n=Pmב5YDX/t8T3%갎(Uz.\&KDTTSKZ|pIL}y6.^g"f:d,3 9׺ߢoraы]@}򚅲ȒH^Z+l*8y;֧2œTr޽u-R#`s4b=+ Asuv=~Ո΢7v$#)ȗ"zegʧ0Xַs 82_YDҨ DcAg 5G^Qa_zU >@nC2 (fF&'`TvU)221t* }{OIq cW6zVt'% ;gvݤ> Jv o{J֪U~Q~q?]2 $H?t=øѐYh*( d>t]&O5zG؛7/Gsć q)K = K=ۅhB?kO#iκu,5ݨ$al]!i_fߓ>[=^8 L:b}Pܯ%=r | Tt5!g4~=Gf;kOvz96MQ/>"v.Fÿ'kWCq/t!RS-ۭ" ŋnwgf1 HP:icH^T"` gŇj 6*^;:~X̬rWdEGu\<Վ(ZQ C "r;`5xx1P gpNk* Ɛq?Zvy[.!ݡas([hug"N"u|[jHW8GdF<8,ksy\q\L qi-=DMKx$Iq/"j܀,>F^v Nt-sEZ 9_q8pjqBLvR<,0xV囉[!TtVE7ȱuyg!nx&Pvyd =T)p7.qPw)]bXE2eC୼n2>Dt&`8'r,%GDO{.Zyx43̓s?6օHbEDxW]ԃ!ݹ t!"e>S u-(B/XpS)4\[F._M} C-w9C 'Q%$r@(26P mzQ] &bSr@::x3ϊ!AYyJyb]ENZB1D y scc.AþK@݉5 NÙ6Ϩe_8m6U=1,48>1`8qxM3 ?X G },µ7l:\٠$FӵHYp z.^B-xHìg[NgtӣZFīH9ʦd|$ :g1M;+qD7+zֹd`J{WUb0 iSi4rk[ȾC'gyA| .7ΡL\kS"&VQFc.{#y'y#2CMeJ  GϪfTo[ !EXfcGO}>l.=ā\lr˩rsa0g1]"m߮q\X0E!ND X@'Ҹp őZS]NsGΐG=܅5!'v8Tl^*eq#urX`UhqÇ|g8|vh> ˎ⏴tp ]o[ TEA0s]I1wSt޼CLoR`GT({ǘHLS7#{4վ'Ur@ymEӇE D0X-C ͡x鷌>Jm >@axdáPīoUvA98w=@--jrBDGLŘd\&Pe:bZ%U͖h@ F8'-zo4}$^٬ %jr\o)8 tl4QO8"}VuFl"ˍE^?K{zis~h z-fEWA@1s0Zwqp.}Jc2R@__._~Uz@- l"~I^EDjU$#_~` rn1UϱDQɜMn 2cE2=cH Ӈ_.6Icآ "˸?CΡڐe/.!4LPQ`o,L6h?$;(YMb ,S{򓏦~j5#2h0iܳ9 ZTg)<#%ԵjtH \Ur(u5mBN -* .o=G >69[cr,V8^񼱓 ^3#+3p=~%agR){ưGjoyͬœ:Iy= cKF }~BM aW90JDT IYYPimoaTí5jVe.Z"`,~*(vJPZUR8u2A3_^~+VaQ돯QE*UnE , F?^o|=3Ue.!`;͉>ݑ;U&h }_МGIj~Q,0kX TdwE͜d XPG"Ih2WL,|5g0D|[9q?}/{ĨlCXw|ӮgqnGHwm+9ڮ-CPBUS<0=ȨGR3h>‘ `9,;9 ۜƂJ=` ~"etE>F#=ޣtL7M>tdK4AC [zmS5#~v>/s7;p^׀W󾁍g*?p@(!9A`O.%'>C+TR"3kŞ+bτ#;u=e(s<ۢaܨ>8ʁuCA+1BTHP#صU<C*V!&o:U=+v( mwu+U;1UAߩEIeSII Es!꾉  (B60ނAT`*ksK糖j0]Z}u -*rΤ!(y(,o਽Zj ]sr d-e TBG@Tq `ܕ8-BJAJԴR+GiEow3nex`/BMC*_EUd-UX Z;ZX' " riuo@ǧ S gD>V9Ɖj|uUZ -+sf_GǥW"ϭQbpDK=$m9iDz@&}em,j[ZBB"G q!RR2al6J( N&#T/% "cv)`?/*@ >\\rZ1gq;^xD>$8Cô0& IS @OCIu,a%q_,}=&F?|a{oJ9rsAʁd~Ts!#w}o*0̒b%E_euk[wl DVfd?ۦj&اlTە{md952Fthd 6U4uP;lS܀[kPWm6v=dj(4I FJ늁wz8JyUZL7 * wz D$K2,c඄n \`>$0)U.xA(Epl0 e-\f D1x}@lLn\RtDQqufË=W!#A[Ʃ#fmo9YAr'& }lG)`l (Q{p5 Kft4X̣S&huUt|K) 0BɈa4\"J#eЦ("_ %oJ &bZXȀRj+0ʴ k[FA.X33 d8~}pqaVyg#ITkj)runV\wozj0@ل07*rb_)CT)\D3 a ?@_<#Aq65B,V:[kN|mhykWMk3ZD"p_oTZ\~Cm;4O۱[m1Jqw{=s"3B4 jQD*֌~x-t'^I[XჍ<T6p؈ Ϳ_M^r_bwkR*AuW ;q&cZ˔+|.͟j;[ZΩ_f4;[Sû*E Л~ϰpʂO\H?D+eB70 }X41ak<r"5]Ι16ՏFRK#1;>ug'b? PQ3c"( uvA':bjjjbR iI P9!@b(c[lUCQbf*$!? @VÖB|˜\0!s0 dPy;|:Pb|  '=>V`It:WYu~6~:~7qd:_g ="ʫ[c P}8]d̟=W~FJHuo ԍ񦤒+E.̼w: Rxv~f٘^.7W:QwMm? ULtyY^}'GQI$PA~/ӂ]0$@l*HJA' IUKs?o&<8Ukr$xw?T4`TCOg2V,QT3'\,[v\!N?<*ud_m@*E$X,(լ i7'̏_ ָKȹYGQ}vP_TFRޟZ@dyvO _o8 Z-l2X9E )Za ՟Ԁ]($?52T혟@G@AoRP'tK@ ْ#u`T$I?IhV_" " i? =~o~K#}+EsN2 X\Pt3(V^Cݮ=$I\xe3?cN\c O5y_uO_h]^دǹNZN Xv(eJ}ϯe}- 棢zBW~|ء|pu~4MQ!*GwA$<l\mb$'d6i")?~mw_=F:+ynG>-?}b?5gU+~B6{=~G 0 ouowڶߥtfܺ YʊX+1V$/utS qr5 ]Ø}4f~nw}.yە>A=C?RBXѹB_Xq???!2ءV'^%??j!4XpPGyr^GY*_^%p 7:3,A{,v|]`h~o|%'/{fþ)R6<[pf}({6R >Kk`Y~ ¦){#?Y$.V㧙߄#:l29U~K%͋Z s/T}]Be"O#o׶_'..[J!wr"^ok}6o.qU "RP<9.*1p(QO.wWhKu|?^f7:_Y]BYC߫myc=?ʧyb;4'tAzr)-Z}pc,Ei=?y<1գUEuKT* ea# Μ=\dAo>:Gu~_7WgyH-6ka;x5Gs`;񼮽cZ{tb!Ng :tF.muo׍ӇohQ='8MDw4Gwx=Fnr]q[Ξ>+jݚK{iӮ=pn!b+s;SPvn[,\Hr, 3!Ӫ_I9p[I?on.WҴ;NdiQ)7T)pǿm+4l^%5O+<…ʧA8#-5VFU<[m`C <9#H[(o6GTdvEǁ[DHQ1L"3. |jd!QyY⶯XV`aJd̋u~w±-E$+pGHfD'u}{nwi0JVڟ=d|ԴSPʹH `׬]|f'?a8(GY)ǖ/"O@"0Y8S^T~ko_{0[T|q!qm|:u;:%% _ct~4GK_w%r2b4YJ9'vb< G/A,SJieRyV3 +k"Z%何}bD UR"7jgr>*+7+ﹾ~{}&O/0?;?*@.),"L461zbx 3۷G l1yް`N};ZE̢߅Tf?hc?dzudm0rdK7e7ٿuRDdTCճ1+B%a/9AŝcUy@B ߠ}7tm Zӎ};.0.gϻ"~:宮o<>Z O6HDI,&lIո\>a^ ` ٺ_vtqP%h6Ook۶\?G\>Kj/(V Gͦ\DF4l*7 p Z|Ph{Zqà ?65X$dղ@όSKDi ,/ԨABIi>ٷg2Mx .3UbyJTw|7cL1O : x8Cf̀;UGTWI}EfwM c,6s,9eZP\>ʉ>Bg WVGYKa t*&2H gmzGM/TǞp Ajl88$a~J#ǟNڦS4ҁ1h) 0kd,UG0╂ .δ٨bןynK4Win[ /k&@XPX(mPZ&);P@܎P2Ñ /b i]2#8"$Ap%>c ŒQ'Jۛ$CG ؝W%>n.nK޾0$  H]/`\7&+ ov*kK_?V3J6Vh~(@7X"?¸UEQ0qb _xWzU??џ$ SG/D(@ a{5^oR.9(HP_%Q2dhm!,qw1McފԸ޷1۩W CgTYc"w3ܔ E9G'a^Aq+DK0r16|$;RunuiXH#'ѫplڡ l!XYqal+s^\\,Y;a{qiĸe& evCt%goboN: DS8;LH:RO'Xͼ+GWwY:^AQ)4u4vtQ Ӛ+~owwsL&n  V.uD ~a}A}?M|E;bS7*2dDu4@ ͼT&&uS?o0;TK詃9J"T`!H=qb>n?lb=z WxY[l[M6=DZyhPԸi)~/}EtU(r撝"_j-}]\"1-x_Q,h$ql7RI<CS\Sus0JG_^t;ce_~F+R5bӈHGYg4@gW t6ႌkUK6,ʜAQg<#g 8<՗q*9x q݇yrE)rݵ'1.8eAX6 =ERAN~3I![~r |f~Cs?ƛoK~WɬtaѕuDgCHm{UVl]tO]Y+9pXj5_$7~ige',ף{d}Dw51]D/FEEuOK9IO,&pV1vN}˨Į f5!7 gF6^RNvz:aTA'P*.MG𵜕XXA!DU?vcѓ3hpAȢHHOXӴU|?J'MQq0fW2'ϔҥx=vY$dx"rs!شӵDUV¤S>a*p;.!͝Y3ki:i"Dg/O2/[< O">8~i#l̀ V*%+`"t ^E{ҭk[<j+&)\zF1`i?juy],Ўlz 1ڛѱɩ1o$c7.^>۫ۏo쓮rfC s0r)^~pl6w~ՠZ&Ԛj.`L?Q,0\XSz:wμľc?<:Z"~Y팯Y'ĤB?-ORȄMa1_y*h#>-{Ѐ:- B! Hʻ.OKkʥ !R'@pbYW% |>}w.q~F0il>x:!_$!*4\{F*Y;CZ∀AL5@a=總=B,X4°m`C3I9;fsG_ # jrb~Xz;9leƄQO]ۧyH"HJ}!0ٟ7?(9$ͤ?mk q&ލB:[xџRiJV8%"7eh S9Ba(,mn2,EORTDH0[kUFpM®p׆(t>,<$M孠5 $H=MJ"'V vEQDacsdݻ ' c[;3q&Or98 'Uճ|ړ>~AZW?;yh{>>+ڿ'e8t`?*f znSOgCCkb/vv{m7d 硝 ~Vod<7luWH(HCQO:BF8eդ3E}\nuZ֩ߋ2,ѡ֐|!s⹻x~ߩ/$z}oHT2/^aק8ݛICrϪqfoQ@[3Pd9i{Ćh ѱ4p͝A8q 6x]bj6`*TIAF"V[X;Y4vCNCI-2l%+0f mrX`>Yn,XWcoN;1Iqq^`o+x(pOAy 8/&&ART5 uF֓r@y=>a ה-Tt"wylO3[.i֜{CE7['7v=@%G` 隵8`54n7E|3F78͈ʆ|p/t တ%S=TAR~+V] ٯS_ (Ŋ +^EHv QiUo"t+փIЂXEzԹ|yON˹۳״S @Q!c P{& p`4[K N_∉RrRv!ugp"Ja I&a@ggvk0uF7lDuGޛ1a U t $^~{m?0L}4GHsc3h@N1gsdaVHT,t5- Af=-~ؽs쓅TVtDid= hզ̇Qd G:#Y,rM/51GE"wq#;<B5e3T[,JhP 4*D){\N%4 @ 8}Yo}.߭2z=P=N2+/o8|N7~Y-[|'rD<AWLA~/=]}7jx[nɞ9@F8Lx^c69Q4HT2`xI\ ]&Nd4C33U?Z}ߴũ`,0@ِv+`@ٓ x_" ƚK8-ׅY 鍘i\4 EPP ruzڹѮs`>NmÞykXNUs)IejéDŽxصGmSѧc(ܱ |Y.8FjezkvWc"̝(R U58_FRЀ f_+񺺻~=VѪ(ؚi78V6Mh])Zvkrh)L*I g®8]7g]x~_xăV/t.$T tl0H)@6$Qw.[؇ԒNc #rFIQDM)fG-L Y)S$s0!Ds>%TBс~>j}_wdS~gs9s_p_D uTHq &ǁ-HWŐ63<TJ_ֻv*( , ,ڈ /FݝB\4=Qqlm?ez+ eU_*{Ҟ@5ҪFLlt;BBH˛ Lqyb>apdKd?E[3߷,y)^`z0LYṵ{v@<ޯ0oHx&/#~U qJM4T'*{jdU,o#P~%3xԡ\#T52^1 ǟz<jnCbi᧜ r9', $-,i(&>oϗ?P^!p P X Qd1T8 12)bnDA[=T&+0}f:/}gW,bJo欸@A!A#8VDAJ5 ')J>8 f6qm -c1Cr, : w˩N@ l_^@G}i\`p{xTN" LnlIU N[?{{''fr܊-,Xw%e%n쮕^uiijEֵEZQ8}]9Ovu' 8bs@ 9['-A%QE%QE%QE E5E5E!TQCTQCTQH4PP4PP "UUDE*v}>A{:f Eː$|ixނA,Xl@]C 瞫AOYuOn?LîQ7{?g\IL~6:5*HL˒B\iv[ػX@֙ a7xߓD@]MX_l& p^ .9j!jꅉ_U UY"I6lPsC۬=;wCA!dPJg@}=o!c> ۞= n$'$!g(zl;dx32|FHIM=/]țæs&.vK)D(JYEnԘ $҈7XU\QÖUNrGg澔pkޯz-8}Y $l*B iB j̉*LB4JP(L!J"q` *t@Ba?ؗ2 EUUUTEWp~+J*~Z@ uI kǝkB_R$ $b*S"Jd jJBQM 8U5U*Ph`hX6yn1~oʥ1(i)(Ji&iޠ*}z:  A5m~c RsBh@ NzTUUUW#+{ %f@H *C cm,#@.HUýooE_=I 8GjX\$!  r zp2y)M+z<d źj_CF˅f b#\3h[mߚ6ܶ/,E>YL!'7DC8$hHɴdSR Q@К"dE38-YVZM=򪪜5x^J-BIBU+n#PTՒb1[cFd/1|A<; fVf@ m3zKSV̇,6Go^8ZAȅ']j¹mA},d 20ĤG׆= ˶GuGBpfN;Rpa&aM$lu.epW5wmo*D#Ĥx0Te({G>[;xÆtoV1oq$"݉g\VǒBIE  2PST`2-,Hp"geP*A^{BClca0ӮR@N/:^ ջˡ9u~,H,ihރx7(pm aYIGПnD @$Au+JbרqsF @BPhGn63WAssˮ1F_G䰪Us}6Nx!ŌvYծ-sS_ng Ϣ;_vI<&cK-)Ռ7e8yThk|mךBr35 jyG]|:a}W7i/K)YdGE(O5?ƙ׻Wǭko{~T%W\Wx`P!U TzXű&owr[xHL_0HН5s"aׂ#;W?ο_g> 3舻(t+KM#AD &|,nB9F4(1kҤ^R_v!$g4PBX :\ݫ\l D0 qv> `>,?$=7 IEOwM9SA`"'۹J8|7)ADT7'3ӓN҈nHq@M0hhiiCm 1bZtAڄ=?-Fu94aDW { bN B0gfdOY[Ϟjr 3hڀ=Hz^<N`e~@t>ZT33*y$y|pJNUq"PXܷ ~P,Is^+{P6d0`w&F Ѱ2yQv>װgQ\{f<e|>vKmS|cBS pB`\!dyWu> .9cYRKk0uK6 xk ^fH ^\M(2Eb}w{xxXo[gU7_/޿\6-@xkZah{B9JBFqĸ]UXddzآN g6hB $K