summaryrefslogtreecommitdiff
path: root/drivers/dma
diff options
context:
space:
mode:
authorShuai Xue <xueshuai@linux.alibaba.com>2025-04-04 20:02:15 +0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2025-05-22 14:29:52 +0200
commit017d4012dc05972ce95c2f487725a7a38e24552a (patch)
tree2bb2a40448759733637dd000bc3e7f54c1e67cf7 /drivers/dma
parent868dbce755ec92855362d213f47e045a8388361a (diff)
downloadlinux-017d4012dc05972ce95c2f487725a7a38e24552a.tar.gz
linux-017d4012dc05972ce95c2f487725a7a38e24552a.tar.bz2
linux-017d4012dc05972ce95c2f487725a7a38e24552a.zip
dmaengine: idxd: fix memory leak in error handling path of idxd_pci_probe
commit 90022b3a6981ec234902be5dbf0f983a12c759fc upstream. Memory allocated for idxd is not freed if an error occurs during idxd_pci_probe(). To fix it, free the allocated memory in the reverse order of allocation before exiting the function in case of an error. Fixes: bfe1d56091c1 ("dmaengine: idxd: Init and probe for Intel data accelerators") Cc: stable@vger.kernel.org Signed-off-by: Shuai Xue <xueshuai@linux.alibaba.com> Reviewed-by: Dave Jiang <dave.jiang@intel.com> Reviewed-by: Fenghua Yu <fenghuay@nvidia.com> Link: https://lore.kernel.org/r/20250404120217.48772-8-xueshuai@linux.alibaba.com Signed-off-by: Vinod Koul <vkoul@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/dma')
-rw-r--r--drivers/dma/idxd/init.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/dma/idxd/init.c b/drivers/dma/idxd/init.c
index 34d4682d91ef..bd3952d90ced 100644
--- a/drivers/dma/idxd/init.c
+++ b/drivers/dma/idxd/init.c
@@ -585,6 +585,17 @@ static void idxd_read_caps(struct idxd_device *idxd)
idxd->hw.iaa_cap.bits = ioread64(idxd->reg_base + IDXD_IAACAP_OFFSET);
}
+static void idxd_free(struct idxd_device *idxd)
+{
+ if (!idxd)
+ return;
+
+ put_device(idxd_confdev(idxd));
+ bitmap_free(idxd->opcap_bmap);
+ ida_free(&idxd_ida, idxd->id);
+ kfree(idxd);
+}
+
static struct idxd_device *idxd_alloc(struct pci_dev *pdev, struct idxd_driver_data *data)
{
struct device *dev = &pdev->dev;
@@ -857,7 +868,7 @@ static int idxd_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
err:
pci_iounmap(pdev, idxd->reg_base);
err_iomap:
- put_device(idxd_confdev(idxd));
+ idxd_free(idxd);
err_idxd_alloc:
pci_disable_device(pdev);
return rc;
2qFe4:59ahSA3s& m{H֯J,'յӈvmZ) ߊ'7CnRt -{OMzL?m|X=84>Kzx8(JF 2y+;d+t![*,]|"uH{7( ݶ $ -SECC ܹ$'51^ɳbސi/ /~ڬAboѐeyQ${^dۡ%Z.lo_LĨ ;^<ڠ- $z@MS/gzAv5rAjL5EB.eag#蠶=|;䲼Ehe9bk^j7z2UmթfK jRjLҦ*=5rGڪ^W2FnVJ0 ,2R>HyZ%M=K?+0?rUdz`3w8bNe]fWUwue)Mr5nvHl/F Ri[U^0#`ڪ3$7^ $lroX`3P<"uΆ RhؾCyi%Y#15G|xITo{%yЀT'%ZӨT;W+ݒH/0VM/m5j`6sPԠT"o y^}%̽C2wM3@f(~rB^$ks4v_t]٩>a 'E_t_"x?_M񿼫mTޡHgJb:Ћ`ۂbLsȋ=lSIA 㿰e!}g|7>@gÙ4 hQ]֧UZ@ "i(p(H!Bi( a:0G 9Ud>ѺYݼ  4kRQ!N>ρ~ĤnL7$R@/jxf{$n~*s jeQyI$_l"GZ7;g&;7\XAIA_ItNnH>OlyTFW2MB^tz]?uά,5y vi}?.0|0t" TH@.*? PO5~Cz}pCOF2ddv4БS-JQC祝wݭ7v`1C{jRl7D&l 1wbl޸կ5NK M2FׂB|$@ۊ,x9TWL3e&lj}e肕fCӮU}WL:Dfo~ZH.J粩pC߸~)$ʤf5ԥ0{zXؒOz\'s%vu86Xf7o#YntfG-K<ƽ=fTy2J#&iG7o&MY{Ԏ=#s@'tW+'7]@m' N(&MYjfY/H94N =ylX,MWԡWC*^ڃ/R-eL?m4'-'AFPP̺=$a\O@+Fժa.}a+ ?uAǫuZX{26{.z]|7яW]]w&EN'Kil&L@DCCAYo,{Ҭ˝<[[5ܻx"4ūqG0l}=߀5~+M9Z+L0x07tC՞L11nN;NDNyWzaO;RZ53Nc|w$!l:-ѻ^]>qgh|߳2}hSauƈaC]^,qEFτ ma[>ɺmLqK 0ɑ %vPgΆUy6kd?!'Taݲr 3Z7_/fH<Dɮ_r n=$uWܾv=X9oB1$)%gwA?2M3A r!&Gk[;\ ^_$$N-_ii?$hhzESOjzl7x#)bpjXU.G ]`VX9yx 7X iM tjIV:$TD,cH# MSd_ηV Pz%8 i=6I-̤IC5vs'M2x!mdd2SYY VuP2fRWQIJ_W$EI3U*d FRԁ:s8L4ba&K:D IG.bQ}9 Cs"Z➷";ٻb{[jfI$}=t]~btC1[$C!p~xT`#*5$SCa UdLȇ 2! hVGġ-:V枭v4(|K1o7=;hؙ;ϾodȎ_ˆp^т BBHivegAGYf&ɺ|'sEeCHELYxT$TŻ9說^_6Nɰ(D!BISx-O3n.--2TKG2#< l/ +gA~ wp8ˊ!ھ,=eFF.oZx)]x,FZjUFNU@>eeZ`Aciuy^L^%jKA FiZ] PHcμ<JpSr7£%+v.4(H^#dntK8\ܙ<:* ,`6Qd3:{0| [2/Viy{.޵8dY0w@E`Olpc^)ޑ3Ū=;43ic$pGCܥhm63JrrȾKrK|Yyi[Tٜ=~5h*zu4gk9<~s!&fkP#Rn+pL?WM-`3C]k Tiڍgs'Eg`%!X*hCK$0=~=}0>-HO٬++}jgWVa<\cLib{I S4|}HSOK$B=.)•ûK9 d2vGb e!/gNŒ`¥tD#nBp_LRs^tr. >_=r̮Cԯ\!@m50X~cr!*/9~B5O!ЭF#F\d皿lU^&!v'A|(R(՚F8¹s/Qe>2Z1aDgb"vg- ;BIi29hf; bzɂۆ'.hr;'A-s':{fJN~,Μ+Axf= # oSPW}(Nկ 9"զƣJd@vOv}XWΘv:mSI X_Dz8 8apwHbXPom5>ˋ/x+1rSro]U<^yGH~j?$I6EY22B IXZ]K43Fі| Otw' y3*a_Ҕt:Mxs\HqENm6^`3W5ʆZZtWy+ m684wb`blO>3>I;#2l㋅/t'4gY"3 //)W5[;(=N,[@S78#cVڨLs@ ,FDvV-p6/zc:Bl㽵-ҖZ@%8(ǡjq8Q2"(zh瞸ޮ[jf?{wv>xⲠz#bjl9= AdM]Y@t03 =n8- ٤4J ҳtRƎ美^-d ytӓ1H Tj80i@OjT`gTaV6pfvT#}՝RLgķ 8FiwwSᇐ RGRppn.r`Ȥb|^S ,Sm P# 4{. h"=qFX.l\l;DT~#ЦǢ~ћ0mhSރ$Y\ܭJzcFTgEsbsؐcKΡ1C1LHnVP/d)`#А@/\ڇ9c NO_Vfa(w RV-3a ;.Y-%1 EJ8fy#QG20H ,Vhf ٫0W@`s>LG!UTJM~,Xk vjPE9+'C^Ӹ?UC+|y,b!OӥQ.5x<ӆ4Mf@8Gf[i/Dpq4e@煴v.'m@{ى-W?爗Fhbj|IVPG CHq4]xm5,)rB~7ڎ܈ػP,*X#ԖZP?YQBɁk' $WW'b2P!+GlZ)$К8ޝ2W(= \m^cPSf{P jUi*$:QJg(}ѡuB0;q!1 $8f3lr[Kx֎Qi VAT}Et:1pg-. _DЍw A,/_N?0<6*G~~O+r$kNu{?'٬ DcDԨMA!k fjAfs΋a,2y5{h̀xm{:gf㍟ABi8G=oS(ƥ._)s*[· Ӊ(7ڐ ;~KE`7@gteFVΨ^uj8ۨ. '(HGv0RHNXO[>zO&DvDbzB~Y}3犪 {x| ݸP n'Qx0~[>ve HQM?ΆL*j&6ʸ ,Ǒ ,ʵM 0b ݍ i֥d1/!Pk< ˌ"t{wDFҀ @>- V6݌ɻ2F0݇̊m|w?RAQf'?!6DH5?v]KN I=olUƠ2ZtTY]jV`S`I+%5c_BǽBf6Ia BQJP`[P#20Z?^3!m&Ieϱ wz:0WUNFdN+*KExvMO0۩m*(e<ۚ_h)d~"Ė;'uFgf>_ g|RoBsTxzRvjiӚ:򈇟o+yT\};rF\.)n c4`DZ, ߻hkcڊW*!/X16ZO6zH.0k 1IQH YKfHMU5-wA^Uū ݘ?G./8~8YGƝzkGlp-Sw{e%Ǝ L;y rITlJt=S)5#skݰ8b3,6;k۱OE֏'[-ƒwZٝ% Oo 5 >`p3L0OCgo~Y<,r䤈$|&^\7^!26@pih1D㲋govn4)gDANs(S5K8ͧ.nz aiL Lo׆q䒿tk6e[K6A_ꡯ~M8)p?kZ t"EF!)ꂄH_"οr+HB~[I%g_>UnUgvް P#>tv`뽈H.D>W}~Pk5C< YM)$:ҝJk$O)냯.)f6 X!sɧev%WlEM1ydTf fВOYN'iFmUeÿ !G}D)j7'F_poγp! '5}&K˻Ef?8s=wp pgokF/n@"d: ִfx,Bzjp;=?v_PN3]O( Ls_d>/[U5+V*uNAfvk 7u_j@0AgvJgBe< ٴWQIG^RO,U9#tX:k&OR8R\JѤ2<QRsU{)kLA[쾭1 OgԶ'a퓺@G>2@'9qE wsp?pׂ"U.+ZD+lG(dً10l]ż}m`QQ$) vjb,YYȰWFMⰶ ;udB|tI5C/j<g߻ o5Es}@I5~zȱ#QVjv;(⮌@1VbI2EΦDQ>`=ZF%vM?9૖ Y(cBO>7v]%z9*R>m%ԗ[[u,рLO!smf\=$z<q0޹3Y-f3 ,"7_^+ʐ_iNj]GUH.;(/$-=qj̼o#x͠Xi$GPǪk/aQ+clJR3+?U~TnR2=e];?80GL]mGrP:WcЂf;MA<`ks b{K=lL>U*iM-|ܹM``Kʆ>;;PmݚjZNvsg ӸJd֔ZSß̝|+Bej n]O>h"#>H~7aޗgqj{,9G.<G;xu9>^ .-{[.hЅuaXsEw!=3@ OWj\,qOx%U'Ux$Wkݖx <]$.Rf'`ϠcCfN e-QWqcc>orx}]`0{`B~hdx,TmPBPUBV!O={c8CwmH9/1js8. Ρ8 ^@/J!d"."*?鷞^.Ϟ6/fd;'q0%s->dJKjΨFyjLjKmR.uRHiG8T:Sكhr^RE_IqǴ`5o%6bt] 'Q3p-?=r&7bVFЄpgh&92t~B@x@JU,6vQ 䏴A2gF ;폥Q6+dK*ךU4 )UZ2i3N9*Ý 0[`ma[;w(ߕ G5͞yf(_Iߛ^ dGlP{P{c-G.-"ꭻakվ[<̢x6H I5> - +:&TQzRQEB_Xo2%ޮ_}oE;#N6еrz'|8IRotn|<ݾ;'jhi׭r,t\)2Oyc1V\7.Wq D>)&,n:vwRj9-f'AE0$r}{ ^g >g4cw5}fEp6@cvrU4 8ԯP)뗇_f_'xu4 KJ|b ],@y\;+k9fmLTz4i|u?us*Z {( N?E ^T,{A} \ `[aHzxLE>wt8Ԭ͹])vz\`@ps\=)>Tw;-C1>|r-22bp~Č&nŚ&1Lv衉6fhhK,zS;FQ<Hp0l?O4'gXJyRs;Gݣ)h&nh"&͈O(sG ?_멳3V?_A <]Ҥas u\02NoYor,+UGjFVYu 6@ujjAP6 ATEԨP֔v/+OZnU~M=u1G'ښ?v 9 |rbU,"Ghu{ a|qR%ᆌ>ZAloYqƅ.blQշz9z 9{ek{݂IU'FU\ԡ7/tw79te`i/Zw3uF 2]ήUtۆCdEgťdISJK1li꘤P^mյʎw5'EWHHғl5ۅ&x8 i& 5c ,҉lG1_Qkir5hYPمZVErASK(ӷMwknmv`F_Hj~EoPjHtg8'Kc؛|"^8_PO+~[c-atqmF|j%z )Hu$jß7rm+ݛrlD4-1~0I9to> tE ["WhxvMv*m.ĕ _mmZ.Ht5ͦ UjoiޛKZ"\Ox7){:*NR?a"%ŁnK@+?jxS4!-KfVSϥzAJ=I(.8D05ajohDK[Ň>UpSR?3h)7̔K\^tb!*rxܒ|]'ޫJD=jTCΘ[U^`,7Tsl AON*jYUd GU-^!R= p \hq:#$焏Kby n#(9HTL3JP=<7 lpK~Z"5 .9LLc,SJ9(j@O/0K Ѹ=!YA@2ӤPv,wVL9j!YRu[bD3ݼ=}pgw)> `L?Kr - 6aU٤hb(Cd+lgkݷ@a?d؆t29&;Wsgy/U'%wDo%pfV0OŘ "Md[Skm,xm^9ѫlH4nIXLRiV DSIɋnAIC0i=ڿ<}+r)$EO0-yﰨdZ~^ےOdPt?R:NòkԻ>niD2yN_-usLYKʹS<+rF @]Iv 80ER{,2ѹ}0qbZ`{$QMUT܄xU9FnK!;7,m6 pߠ WKsP#DUrp$tx6R%Na37u˛9u#h9r:m?%[=Cᝢ]2{Uk^GgtW@)J#{JRg 殒#t=)3麁bCw:mV&Weׄ_P#{fYl4h3)N&ÂMgWjf\ayM)W 1Tf鹠$?<{i!uȣj:E3?>;X7,I$)FSGSUw哑,>tG7(h*{_@4˯1jineYi+'i[+дʕVQoװ9 6 Fb_Y9t'& d}h6`hꘙ3>&8zGincU ŃMJOQBm+7k+sOȰ8Īy+{h~gա& J&Q _ww1ELv֖ٴw?WNxpݥMI,|UiV Z-Vʲ_~ ,R.Ԡۑ6(tI tp~{i\Õ,dz`4d:3&A?3 yeŤ$Ty8{5~ >I ˝& >57A."I㢔cjUVAJFRrni 8c-9!u 4!GL\qvX%Պ] utx?@\Z.rIݥOayvt1uSMRc1`R!ȷl y Z=sV+k^PiqY QSj5V j;-+"V\o [ڪ%δ&w[d xuThXw[9jMƙbcKu~52>dc*eVe72:-V(˖GFkS#V6ƴY.mKR+U4nVT`BagpW*usIXX:JKPa S'H^K U14Z}`>zޮk|' >t\$Il9/s+G"gcǂH|aacgI{1JwP,1SK.J8pn7 \v?t^P[uxm'QA7a_Q&Y{hjUjGh473N&=inF**[d=G^l.)Ao6|м?Ӎw5'񘃴0P?=>vi!bsU X[wIa5Cv,IҨK)-@PF n4SUjVīFRgAX7d:{t* P_;'?n޴aVPFb(f9VG֨FS>YP!vj\6AV^P8mi, ]"߽W+դS=wʳZm)ƃ ҃=@\"}'-0sSE&pA7؏lƕUSwvo-wLAfb&ӹ^>h[M;uFMȼn :C!4M;V统)<JawZ;=8 ݬWOɌ/rp;=ŨEGtXrU>VLTv!&hCL& 5c_S:9Jsp~l/Kf$GFpܞ@W}Of~ݭ?'ljܟ[[ANXkC ƯUI-Qcoo-_=-l{ѣF$ vNat4jg*uĞH4&W?foރRq' 2}n3-ڪ#buϓ\ӚTfIë2_!΂@\FOhWjt.鹵;ʐ@<ҢFS<+;x^9iyV 2UpS$"l\{4B{X 3?gjRzh,/}':eAAz6R:6zA[,٦wMH IХQV<Cg ֭D 1SJ} |h|*O#sn%MRb$pĬCr$S;xsGpһh4*dA@KZS7hY>G_('RC3Éd )gs4M:?g2v!!%zXyDMq?Cf*7pqۻ `v}Jnn?l4g৽=Ou#KB9\nWoO8VDot3+iι?h"sAG2Y,e5(u-5*9d}1&A I17sy0w]stM ]JV6>_[e[,%k )06IXk EI][]/ΎUZ$k*dOcznfvAͣڐ^BH^ZM,tOX#BrVPPҿ%˧S7Bd dǤ˪Z 0x{=+}wZ-p$B<@eh"[Sąl'#6[}v%t30D\}NBZnm2~rVOzoUG;͵?|UF6 T'bc6t7S -uT/bJ6.וr=@-AebӺg?<ĺ~tR~6'ݭvq`3Ø47/ ҸRej1 l7HzCכ!0uz^:`2+@?)|R)#fn1΂/ 8cUh^ժ7uҨJ78{kN33@F1{j >Uiqc\T>"XٮL+=9,U$5o7)g䃑v+e53,{Ӑ-#~yi;COCo5yRVjL05 RNƤ\F,Mͥ8hO]rkа'?MGۮ7GAd8*F߇j:( ҬϾI2 [M!9l7";1̑ln|.ug$/6*4a.QM[_&#X|tl:fR1ge)l>ӈyt.Ɯ2ߺuG/^K:YM Yo'3Mיw#=/g7a VZ:;:caŧr|Dϕ٧JƝZpЋ?ȗ=<Хp!B@"J&r ,sшdPK ; ^"!b*U3IRVZ҅_%,﷎c KF;b9IJƓxvWQw_+) fsWamuȘT|cdaWI4px -(jkYIt26C[{ _Pi=[rڮKpէx $ّ~w[BΪ1Θn1gm30z[C~P>u ܄cPI.abe彠a5l˻#ѩe}z 7;B&m̰lkBrzWA34&<'"4k4j e{MvKK ~)Hg/!܌dqxOd]Bi$ )w>;{  ɋׄg/M Tb>ٱOӑd:/]{g6g#f`q=\Mi)N0May=~3騆O+urEnP:>d;>k8;mrxT]ԥfq,uGb!$uQ%T}HC q9kFO7&gڵ&Ǜپ5hdr#`fRM^"ENN*Q+T4jPA-dv.SDP,;/]ɭ4)!<&PvҔPn_QBl*ԃSH 74mԯl^N^RmPJE^׎fw]Ƞև$wh6ΐ0C0&WFJ۪WE?Uar=Ms~*t\v}=Q/,]bW-7b$r_Cvhe06=ŧ9WvM/5 >nÜi6afpUnB=^s[wa:iU-g њOdaa/Jߙ(I4KQCV  %,GI"sqP^_2$yD&%F+?u/$xVRQzr dy3fݧ ™B Ԇ8yx7|FZK:>y;Y}VID3c:wO.ϰg룰2M%')∜ΆFK7^ܴ 9$XA[Ф !WIgYg7zh)Jw5#i~dCW|$}w?$#/tCL'Nfrk/I[ZCv$ςV7ճ;Ҥc-27@¹sTJM3ĨC YDӲ\$!2g\Zn t'p JPwcÝ^+3}L.!* )/i0>_fѥQu궚^ĒB*|=+A W),$p=8qm#m3)!(;nNj6 ~Y%7 HфG`40کJPaF d_-i ~:3g3ߍ|GZa^.ו~P|;,w/@0oU tay>( Y4DuE懩53$$l͒Y=Rq>D@3aXMzC N]2uǐ\HlfTC})IGZ43[3-ײQE=! rMVvڀ`%N(t dUO10Z%eP}ߵΡI%,mvCdr[K{lX{]sͣ]ɬrp㏃G 6LOޥqN by&nݝ1Auaބ!}}KXn鹙,sό' /$ǥ[*ş; d=Sͯo+%+ӊlFȈL%Y/1D5uL\1D 766j 4XKƵueym5&6f2$_uo6:_i!)/c|kqs4LbmrfX29A"tϼYut-X@Qq+XH'7k{MbPH*{- Ð>`R9ZCG {,H&ؠE ù ~dQm}{&Gk˭vX` G@%5\e?麝zoJ>Hjn`WUjr $KvHj6)V$NwQr,& n`%@;wkl;czgn&Fl00>-U/ka^h,LNvmLu@=LKjtzK,4B[Nvth^IgK}Zo/CRXʈN5l jTbxV}ivSfvE S-Eg(W~A>vU tϩG`QěOYrv7G1\=!4ds\H^iSZLZ\3 b]ɦ_+u@ac8 %N&̶z]Qtc {{d l[ƙ^XjT&=k2*-|T0,LA[G{c}&@IkuuG$T'y|#ܤ1Y0)f@>}1"]iۮK$Go5h F3XŽ\^9 RDyES?Djfme`VT|I7&ƦeE (1_\Tj-ߒqT23;ZkM"8aπP}.~VIkVf=*%A[@C=Li,/v/ Ƽ\"^~1@_Ѽ_w( '?9LuԟO/EI "ԟ*l5떐RRe٘L?Xsyqs*Q]4ΚCuEKŐ,},s7V_+* Zt* /&&!Z%Ozk詄Mхn3N $t0}A[Fʵ=aцN|9JT4hE"ThoG_gj:KAD7DvLmZK$|ܬ6k!rmw*p Z$ -;$,'C ? #- LoESMBGreTׯ9K_iQ𺮗P16/(Ow=گdʣ3x}wyi5݉:p,'v˵iSR߅bDP4.]ҭhWTYg PsK/1ԍ~o g;] 0Xe4dhAB\2^Okߺi۵=w !3!D&=3[/*L?"J& tCpr@'w؜TI?CUkI 8/D;|$2@W'@?3F=GlmUouBH>6wh ϻ!*g{f׵W-O|a(=Eɸɔ±Ur7C(13ge\&i~gMu7+6f\bP׍1s?]zM=-֣lꮎg\v<3H2^h<"6~ H]Z< b@3k'zIF6k6UO:akTUNTgi[J> SR~|.gu r)r 55+ mTSzEp?(6ش.A:jKʪS=2kJj8VbU|UE '\ZGA^UxpO#~Lt7tc|[ZQS`J (dԏ%3f+_ ['N4 bgW \\zu>TWˋҘpw+;Ӥ>jO9ͯdt7+]qC-jPu+]h.zjlv[i/`5q㼛c:pIAAҳ6gd^W|{ppNj9!'7m eG",gtj6,BBeZ󠤯\ 5`Xd`] 9")!bZU?*H/ v'k)v`snt65 F a=O wd֒\hpv =/ "$OٌD;!_܀l 2z,ABBk=z.cy 9깱:4|<2<4j+彸t#ȣ g/sMJ6w@,=K42,v}u{Vr#n+!_ВN EZMrZTHgPP?u^]'ݙ&oNT4Й( e/.YظtV,@`YOP;B H$ 渠rҮyR8Q'ky,ۗs]RrIsK}XW:";o:q{W7617_wɦ.9 pCXo")߯Taf۸mU'˭*u2dVUm2:Hj:QWS2,,_ϓ-6Ad_wj?y…$[V?GЃfAv@G8K]z`eR.&CoP#|e gAO1Gۛ~JD1<Gq?~?TkFB0j"1E]}\ dG7:!6f:lC*h0gԘpTu"uHla=HNAB.JKq~Q P/ba2x0uo#kK[>=] IE ~-E-fm #Ie黿{SJg iմW"NHUΏhL7)k7j{{ Gj{@Ȱ 9^kn2ݣk|[p|翵'2+q\sE(v.Adť?! ]W6[$T CC }y+'I[j .l'~:P42CD$Nx 8HcAuC!ג O4I@ b2U꣤ Zjf'6@KZ=g,=vmYiRqLv}^r P.3>3]ڢs.Uniʯp/u'ШsXOYMHm Ux s}p|I_haۇܟ !^q/nfK@~vm]IzJa[ן+.4z 5 \-TibO`چ^?8(d 0Flgȶ A{n_a&ˀgp;c(te'Ro n+vtާ1g*m0 jUIi2*zF:x6Αٓ15(4N[Э冪IÎTWQ^͆"}yd; L+dvF SIy6bvr2l *oy%Sc߻zx/k?e76eK?•Eh7FAeqi@;D=Wy)5- omp^ Y#|ũٯ 7@ m/)_͔ø4<%!K-rAp՟މ$ȵ(֏1453˅%ZF"R)r)^:pmgpxKqk vXicݞz:'uo/#lnْ:1eGYcaD/04ewoôݛŝ0`-$В-$bQa0 n]l'9dV`GG;à n9aנZqБ Nʦ08p jT\H΋{_`w0<_}DblQ:9Zk1dHl*cJ'Ck=JK2TCsQ3$԰$y<{]!2. ɿwV4+@圣N~q?hlG[[.΃d81^ ~)c"ȏ~@F6`(W:g-Z޻W [~d" J8((-[7JgP8:ldcWqƊų@_|aKQ3YL3e4$IPkָoT2 .ȩ4@K86B|Kr4&3 (YM4 - &svzRFQhSLjzآ(Ŀ)w~cGkJTd|ҽoȶ^>V?roY+t".>|Թog<5k^]#'52Zz]5dZ: zYu@V{ g(auNFi`~>rq@ ٳΠR~!=94a<{YViHy96*?5 8;D\ gr2#B^+%uBГ'@"{3`B.ႲŶf4H~3ǝd,gʞ,uiR+5,nJ,@׉gH46In6(~31j4"LJ;@c ^͍+B8׬+"xNg6 0JHTZ/a d?,3"Ֆ,`n [BFЉCi̒RMިYU?kLM&66p~t`s 5AL5K\r< p&R>|ց|m2 T\JvBl!Ƀ;&[ebƖ#r S/-^{JZfkY9 (Me@ 0 d^w)tvUÞ庒t!'|mzo~Iu6RH^0I3*sr` khp鶫N`oC坂*s²9wO^}qw0hsD.jY'k@+N]9Bs S=<=b.! qaʊ܍G {8wXq`H30hMLLU qп;=~o < ?8Z5%cٰ;2o;L0y3TTj,ihC <;FL]ɡ؇7wWL3MvPsfÛ_GҷiBܳ&4`uõkplr'M2OJr_'G(K(&T#yʄ2_D eff$eK>0+d5∁_L[^\^Lzcl R$vT%ìhq{/GKQYQh)˽?$0#G?wIEī%mmou韯jd>K 0b"=AzU(r~3)ՌVD'F8ѐ@(yX&W藕A3Ai@g's(ZΓҤdNy&mN #XGJ>352%l(x@U<&:$|f !$wEOOP?Ǥ3e(:%DlXb0CS_dK'AC&ҥ{rHf櫺o&uACƁ4p1 ݟ .mԸc X7i (ޓ>ZO4It/T.C=x ĉ';}xX7teƖ ƻ\sLZ8iAMM?Ȥa\3HlP@I}&KޒpO%_˽my4YBm $23n4$FK;V!qvwC.Ѳg }T ՓjKlVDYWןo"'&WTS O-l2a7RWvmI92礌2n5bW7sL}"3V,%8n⡃Ʉe],֖dDDFc)-[n|I#MZVmOxk{eWw"X,skVLW: p@ "" Kqk"yoЧYDDКΞ,ܐvHsţiq.m¹n7gd՚B#(eP-fCm?%%B|w2=%fluDA]Oh'^#mB40 e$lg:[}7̞ ;쐓CkksODrWv 8p+b"gp|"tRa]n4QeΓL>.xqkNֳ rmb{-j),⸼*IC Rz =#,JhN upXI)"]Ru`v;/h]괞cݸE"K6ځijP@\&S=V*mZmѩe7KARّ4f< U-ۥAc5@k&*3tTmUTH.4gw0ʖ,RSwɄwkRjV07Λ3IЬZX0Я+eF=zqc8eɒOr QI {ѱnr6>%CȖ)Jm C: h4|Sa"J?hx@u<-lojZ UO'Qb-$JB(K㇊uUX3L ?t{d+tufrg/B׷(1ut~v+C] jsvdgZDh M̰IzA*tzҘe,¹.},ӖV )(颀; WApNpϖ@ CH&\ii:7C<C|F4Km(V_.%_,1`4dhݟ0MǚaP&8rB6$y%ng_ h6iLD@H.]t\l|kr~ԍ6zS#&I!6"2\ynI] Qt xb= 4Ӵ Prcы Vn,x%T̂4g#!'.F1 jKAz=SHZ|Ҷ$1QHB6㢑GT,D}ܛL2ۛ`Xȟ+-c+6ZZPctkh(mr;i4ˍ|7kGW9K6,Dwzan){xsR+GUժnlҁȴ.قF~YVx{{qIh|Q@5;2sQ!ҐI"5o,Ϊ 'P ]>viNPj`코ޠ2|ueNRyl7܎sG[ƸQY$/%OV^7ͯ(=ôDLcd8Û69Bp_? LILy9]s4؄'A=1] 9Ao<cO̧WIL 'QUT_KSn Xz˘1A,Vēnnx%j`ՙt Zy ." ȼ,9zQq|~[]䓝ӛKH ?>.{ACկ IYCհ=ծHU 7vA@!dYA˨80p8J 5q֓Dgr61Vl>`4 $BWJޗ\\g"oFUZR+_kkMf E*IEͥwבc9ka˃%َ,k`údwjxCn*q%._8qL!z*_ta+aRQp;PUhU{!h^>k<~@y"ʤ9a8E`H.6uOҿT8T0=?j7}( ME)gdJk$nA mɄchwAiǓޱS D dV Q 'X,a>;:ka:B G)BÍ4\yāFǾZUfլWڌs`m%9H88ZўɁ 6Bn\[Gyi3p2v[rayG 0%D% h#}yY6h! oww/O9 3=@|FCbZ*HjcR. :="G}4w.\Nq*gK_KluF`Ƽ i+J1ԧۓْ{ NP0(+Zj/܈ b>,6ʝf[.%z63z5}fF p" Z|^&сj)`{FRW`=_ߪJf8MPF! l.M T—bbj*:H)؅[s?hIOV6ۅڞS][{aϗ01K@v0=ԥ9 x ǔh_I۬Ai0^&"eBNէ|j2FWL )FOIlJI#uנ=NyRm.'E-l1% zQfdƞZ] xZCp-~X%Cr):V^W*p?hXT߫$Oh|!ki0$":L}qL|.QO;6̊_JzasprC٬RLQJMU|(֖gYWk)nכޘ. b5T~:Im#9m0'瀩]9NBh'fhBA&9> Mpo$֓TȀmCp^ HI/ L?AxFI q&[Cm5PKH@_s@_l3Lrp*{|+F>T;'J:"<іޙvJJGF1hh`]TD;V w*ueAʠlR: U6$H5v()fNӠ`Ymڽ4*CUkV'!]tdd75hW=3Nds`:WӜfKqofq<n7ovO?^.uo 9p9>^'*m;٥s鷤þ,T >s2fH5LXzv.6R{~I Ez§S(;u7Dq)Nb!J]DTֱⰒ{$˙^u, * ҔۥU/&R|@ohݹ:ibKHO&R9w~{+dCְ:.7kjlkjIhA򛖃`jU5 { g("R5ebiPœgT- p:'@Q:0WPʰRԊF p kbDox͕n.m_' 08 U׽Qcס/ T[n&}Ⱦ~AE.ʤp45$^Vr^X}(4vwԌ<pDN蓩h6'&䯯Ca˗FQP/*UOӌ9Z& `\7e=I,uGA0C g,z z$Y*-3BU@'񝄹f;ft'}=ɣ@^]ƵntU⎮2_SaiwŠwL6֠GnY7_Ow:uVJ}v ̉J:Q>Ā-c@ wJp339|3(Z>wᖁ`>/S4{f:%.%ߩojN]rGɕsBl;9NS,pA[H|(>\+9Q:uA.d;-0]o8s  V67e6s ެM,1<}}A~*al0aVbS!m6:6.i^VDU$DO:tl.&J<kkv*Un*#7pE>9!Y؃fp)Yǐaw16Oc{ ښd{^f|}FۂmQK'=<\#b 5.haL'ڴY:R.엞69Krފz/Ț5JsIdapV+ ME-S⦣3`CƶILUҮ4 ER ,U>t?/'c91ߠdN粠/JXӬՓ Wf_t-gwb,'+Vfp3|Ď߶>);i&e 4K/;V+ۆB.- MdkCws>{dVZaG `U =ެ!uc y,ak0rDX Jva4f 8lY:-_LHleH]o4oW'JtI 8 t.6q6a>L3 'T"7ѓ56n} pd 1yB8C؆}8aK6קggrrPɭZQfHBV|{~H m4I+J\l\X£>3PS{x Ȥ BDu_c?  hR#p|\6$睆6<o_0L ۳/+pNmV:sM%~p|Z9g%))[i㠎g%CM'QSiŏUa] "ܴRJ!ּ)66wIFKMtyOyԥGȇ&KW;'0]~Soa)j7Psg|=}6 S҅\-Y;˰^XzYtupH4GQ롨97Td#Bә4QlT35|Di˥R=R֮ΰHU*% y\'FL/Q܎hhuE}Jү>R$d<z/^҇o^ϊrK79҇їX}n"Xaz^I jSr ׄ@J)BoNHl~W^@COƾ ZrgRUj5@Q85^Y'VH> [#tn}28()E_2ew +Z̓?fVf2C !ҧ t#.*I.ӷ/F|e+ff|cLhg"LlzRJql D t&f0cزA\%- $ m~uŢyQuC=AXf0YPۚsiD> TK.F?wi$b'ݭ (4oǬT}YlH"}JLgْ ӻy;PrkĈbO{gy\R6) Y~?yFiMB}2 nEWa"Bz}6ВyA5nufǖU?@ K:Sf!9 uD(iE o'lMTM#퓶5I#JQWvG]+;S6Ᾰ'_ڮ*%iYwl05u*> Y}{SPV+",А}{u{ZQo 2Kz/s7"{ehX+ժ}4mȢGqQfTD[j2=>Wk؀gRJerZƠSk6F4tz +@$jmUo&;u3NaŋLTxnq18)} 1B>9Nщ16 '1( ElA]ņ<nqМQ`T]-u7Dz)ޡ-]zόevO nw薵t=fK?Ɖm [ lo]wȖ=6tw` zfN',2KO)=hnG ڎ vA(GzwEFRl+`ؑi?-<ۣ*pL\-GrnPjM9T㲪2V!&Z#5 Ѕ<uqͱXʃwЏmbh}D ̱ $[;Ķ+{w^[FVg@YvK c6(Z:\Rf#~CCZ< =6i陽C$&]' |(K\p&ΓW2AZ/]$m0rX_咸 Y[AFI6}ug14S$tcw=7w=_Wɕ/!,}wq1>[VFGNogg?"L[ ‚B:A [7sDڻax9o#w` }0@5s'6)%x T>mf~e".t.v BEL{Z 7wNr~#q[kZ=f'כ23VAi_;Chc.98/: y+mⵃb"ʝsi/y)~]\.Nno7xW[Ztך$ *I#.2#s  SN;ɞ7vtAR KMVl]Q!FjwYS6e Hɨ%bgnb&Y{ȁ=wem]Ld~j9HcbGƜzg%&ǺO=l6TŢt%h]\Qp/J< ~E&/a_pqyp8_Kq؏gwz%OI6z<| c:•x*Gx(]\yh.zI o2nꟊzuO y jO0qYLEۇG\rB*K'M݃Pyovie] S;.fii9[ U@sJ@"*q:d) RjtHJ??݆[")jdWox/d8h6%M؛N%¥+1s6k߃*Sht9=2tŕ+CXUƖ>_o{a A(/͏Lz"j|%ٵm]}O9'EOe8 Y$7w' u1$CdfAFhr}-_%d^"4.yעZHh.oE7@< /Jm .j)_\+#]ϒ StIX"DbХ /}?|`/hk}:EU%'Fb"G܍/mzOtA6/ΣArA'J$ƨ W"F<߹`,ZnHGIj/ up^h9eछXx178Cs2ꪙW{W I=ЁJR+2XTGE yӺPyVd[7zZ]-5پS:3{H]z2'|]_Tڏޑn;Dp1z"TX97a觋w=H*I<*!+睍|>V6юFMAŽ/K7$ z[ R;yUTaRn:!ݍ#7+04( Ҿ!$i&[ɩNn1ei@v/|K'b"3a\(t#QEܘaŶt}A ? ^`PudOx <O^Ddoˈ9ŝo,RZQo=̼L4R ԃCsmu_S+قywd:({ojzs],1e8ap)t;?ccʍgAI ]F(ȟ>rۀI'$L0;5׀&K&hK4yÄ!. Vܣh"nJ4o +òi]Y[#0pAǬ]n(x0J%_]abnc00LGZMky/<>3!%LBAK9 Q$g3vzBEi hK瀎P7L&}i|ib#);Ժ 4%$ j뱲9NB ,{䝣jx^cx׬қOӟ湵qڍhv~q/vr!VZ9^޿$~En~S7{ic06qhҨxu>ugoDdVVI Ԝ={ddd\ސqH>2Òl+?sqs_Qu )욊OI@e'|,@-a0$f,DJ4CJٙsp#`5]:zrx*9ku|$v597,HZ?<GV&F|lmLfeH&EB E _*]h-a.80!w%^}Uh=bΆz.LammqQF//R4OUxj٫v~2?nJ^vShͭ' Zb>{ zxb^Etġp'B ƮVgY.ՐE?G`}z8!  [{[NQJ|N,.{,Thyԧ {i ngme)kpZi@z: vfb5('fS]A0_X@<)t ,%OӼ[HTe9K_BOFу Z7e>32wcֽqFЬJO@wN3{A:>+BTCW! E:WU^tGgIB;XIz֜꼌,)"?S%OSQ}mwZ\!4?k"@6@m^n,lhU9 le;G cTcԢ谠HYptPLślf7*Bb~Q5ݚPU9bTX57COo_D4mV6`P(W0ՔEJ8 Tu6M8x3k:бژ*=*Qڸ<*c2 [#qMx` J3x wekWǸ'R2U_ϏeQ?=?㣃tрQխ&Z1QD ƀ-L{s7A\4#WH|#]26^{*ZV ӀviS019lDY Z: ow\a)S FMo,_>$Nȭ*fj n<(|+%VO<=y<d$ժMğ'w?L~6Dƌ͍z})8❯F!}}@gIƊ~);? >FTOj8TT @n;чjax5'-K%gR3=l9D:1^VK_B>;01dJCLsↆIhb`yPssdAie t?^ `nʭm^LeHWAÉ|׽D@yk7#yd pfQM#>MN:J.t ^|bD-Ͱ(3і@Qs@@ !Ij :Y|>%{+-,s<rXW]19 {3AyUŤ"VjqFyR(7e8U^\t0ȫ%&)‰xP DŽH=܍3ߦ6J eW兎8t Zs*w5am3,b@>n]#WuP]ܢ;,VePFm!TJ rtFK DZ o%T9to>L…qRG1$"wUZ(nO _F Ve{, z<&}Եc^ =nBW4"6b|$O{[4$PemٽKV#M޸З%fH8 >VdP;ӘjZ"b;4FvwH]~y&Hfa\SNͲ9$)%yg 0(&`Z{!9c榋y{fc }ώ>c#W㏧\z6E:~&_,,U,ӛGtmL? `nd%.V}RvH@*FD)uE%; U!2 qL^\xK4%v{Oa]%A1 z(-,V~o^xȌ@[Dn[ˊ!k$ݙj愡Q)u ʙBTgcC˅xS4ԡS/ϞhxA{vki$ $4 3ɻ̎8AQ}ne@|XY$/"ZG3,OrМҡzRK㎼9s;C,SI Ho^U``! A!Z*?ZUVYRM\MSeT㔼Jqxwx7~1;|u cbSJPl3pi٫ejV_o1xf=@zceK %`76vvC5b܇YPξa,@,zD䞬W7*^(h|"X"%w045Fo Dt釁RsT aSo$ЏP8_  CQaf ~y`="q~A>M1SV4i />FT1K/U)hVK " H#V֍`L[FhrC F{A"3 ;t{?uƽx."yr Ҳ.2Dc ǣbGBҸV 03K?xK D:Q;LB-JӶ "X =!8] `EB]uyT80Un[6+1曐6:9nF~=03çvzVAvAsic_[Vמm~ V;̷伿:IVwff`( dECQ5jr99#W[ @|U^$lCt$48L@N<'`Si3,cml}[pRwj*鬾L1_Pb'6H$}$WƁhaEiS)V߻H)WskpA5?$ э`nAl-Y(|?׈V0T|X-ʛ` i 5& kfÛ#7-"mKp'i<`gBٴUieW5t`Hcy͹T:u]r_[(3llT[i@.KtUwM?C8v+αDk/7?{8>9oxsxO{FiX+tp6Xez^+Y#HNuzmP۝{7tV&ƣ2:\kЖR Hxk_׵tc bX&3[ _$$#H"&(f\(' ; TGNmEFJ8+g Dhc__ՋZ; :L^Vb[񡺝yuCE5b8Dm{(V5|n󋖶Vm|b!M36|<clI9N[mrie/n$쉎;^${g1&PŖqځdRh~ϋA\{Bpzl*eL}Le'燚7ntҿTGGd1X:HS1dD8' Gn Q_۟?lLmc>d{^=TϪA,~x{PYPfEݷ{MV2ksgE Z=+ տnr48m ,o O]wl* [<ث&i\+0f,mJ+NxQZ`dԙ { [%fPѿѦR/j&/hvQڪ?`ze)F]Jo~fW0n\l"M,)"m/cbl5h }IE5/-o>maiҾ%Fx/6"$A6dELwj^߄wmscXB^ ]IT|Ӕ6|pbc㖶d ,VقeFX񲷒x򋳁,%|DHdaT5{@fk .۬ Y)=4^}N]UÁY$nUTc<]?`o|Oze`#;@繱6 ڥaZlXqV2M J LS*Q{YV@cW|$ H[1ưUDUwv\yoD_}~M_zΣMOjwv&xZO >p]5ri1H> K-nm![A$KN'TS-x0YtF_seLru8*\Zc #h35%\:CFNك-%#b_s>4!eE<-1-Q&4O\f?/qH%c.xhxb ޶ ND1."g )hѾc(Db>~8/1n`/e?$K3 ?1GxB8BA2r췹A~E`/rHJ"u#~De b?7\%OyJ5]*fo41pt):n}+f4ى/b4&냏W7͒R sfaJ5(|=VOr\_3!SDDb\~A)p/ p;k6ku8v}h ,i9kcuB"Z%D!K.[60vbٍ wcѼET_Sqkrca4erq(8Q Ep?9\VE #ճ@Om0wmnf"n VfjJSW@4l/d1e .^ /W#T[P L9@&pVB?q0>}K'K7%u`HñcBNBvBP#=Y;ywT9NN Ɗzt2yIp Vk3/kY92pi!S]'8?QsѥMjܗ_I'<.eg- osقS\rʾJGha9:{gg.#jXE?HVcQ]‘\S;MUШ cuFf Hb]CLe!-Q[o%Mkc&[O?"t%*9}ҸNbӣrP!VbN쬗[>+>۱\&f@؂:p{+^f |QOm2%HEܷJ x!3o[x:%&:W츠ߗ4vV0 oۘkkϞxx+DIU_ਭWi p$2u |ggdil &#S5]4ߙ͊_%GW`Aj=^X $ˑ 5_H<sX$GCUW22a>Y]`DA o і$o~aYG#]V3umX&еhF Y{:Z>4axu n2ycHu'-zvr:ڥ/!!{r|FUOkC>lUY?֞mNyOɮN!wNR-tU "wXYץR) i}xfoe0búDV5þ1NY 4п1JhH.e_$#vtT mbf͝#Z>$W ;`B*ᤚ߾ /M]!0YXY4! $=pBBӨaX #9=9 ZJ$)g kzʪJ3{mۤY~fGQB8N,ZHk_ H ;v\kVV