summaryrefslogtreecommitdiff
path: root/drivers/char
diff options
context:
space:
mode:
authorXiongfeng Wang <wangxiongfeng2@huawei.com>2022-12-02 21:22:34 +0800
committerHerbert Xu <herbert@gondor.apana.org.au>2022-12-09 18:45:00 +0800
commit9f6ec8dc574efb7f4f3d7ee9cd59ae307e78f445 (patch)
tree94b4679d2377ba1b5d3fb23c25d6ba82080a09e1 /drivers/char
parentecadb5b0111ea19fc7c240bb25d424a94471eb7d (diff)
downloadlinux-9f6ec8dc574efb7f4f3d7ee9cd59ae307e78f445.tar.gz
linux-9f6ec8dc574efb7f4f3d7ee9cd59ae307e78f445.tar.bz2
linux-9f6ec8dc574efb7f4f3d7ee9cd59ae307e78f445.zip
hwrng: geode - Fix PCI device refcount leak
for_each_pci_dev() is implemented by pci_get_device(). The comment of pci_get_device() says that it will increase the reference count for the returned pci_dev and also decrease the reference count for the input pci_dev @from if it is not NULL. If we break for_each_pci_dev() loop with pdev not NULL, we need to call pci_dev_put() to decrease the reference count. We add a new struct 'amd_geode_priv' to record pointer of the pci_dev and membase, and then add missing pci_dev_put() for the normal and error path. Fixes: ef5d862734b8 ("[PATCH] Add Geode HW RNG driver") Signed-off-by: Xiongfeng Wang <wangxiongfeng2@huawei.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/char')
-rw-r--r--drivers/char/hw_random/geode-rng.c36
1 files changed, 28 insertions, 8 deletions
diff --git a/drivers/char/hw_random/geode-rng.c b/drivers/char/hw_random/geode-rng.c
index 138ce434f86b..12fbe8091831 100644
--- a/drivers/char/hw_random/geode-rng.c
+++ b/drivers/char/hw_random/geode-rng.c
@@ -51,6 +51,10 @@ static const struct pci_device_id pci_tbl[] = {
};
MODULE_DEVICE_TABLE(pci, pci_tbl);
+struct amd_geode_priv {
+ struct pci_dev *pcidev;
+ void __iomem *membase;
+};
static int geode_rng_data_read(struct hwrng *rng, u32 *data)
{
@@ -90,6 +94,7 @@ static int __init geode_rng_init(void)
const struct pci_device_id *ent;
void __iomem *mem;
unsigned long rng_base;
+ struct amd_geode_priv *priv;
for_each_pci_dev(pdev) {
ent = pci_match_id(pci_tbl, pdev);
@@ -97,17 +102,26 @@ static int __init geode_rng_init(void)
goto found;
}
/* Device not found. */
- goto out;
+ return err;
found:
+ priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+ if (!priv) {
+ err = -ENOMEM;
+ goto put_dev;
+ }
+
rng_base = pci_resource_start(pdev, 0);
if (rng_base == 0)
- goto out;
+ goto free_priv;
err = -ENOMEM;
mem = ioremap(rng_base, 0x58);
if (!mem)
- goto out;
- geode_rng.priv = (unsigned long)mem;
+ goto free_priv;
+
+ geode_rng.priv = (unsigned long)priv;
+ priv->membase = mem;
+ priv->pcidev = pdev;
pr_info("AMD Geode RNG detected\n");
err = hwrng_register(&geode_rng);
@@ -116,20 +130,26 @@ found:
err);
goto err_unmap;
}
-out:
return err;
err_unmap:
iounmap(mem);
- goto out;
+free_priv:
+ kfree(priv);
+put_dev:
+ pci_dev_put(pdev);
+ return err;
}
static void __exit geode_rng_exit(void)
{
- void __iomem *mem = (void __iomem *)geode_rng.priv;
+ struct amd_geode_priv *priv;
+ priv = (struct amd_geode_priv *)geode_rng.priv;
hwrng_unregister(&geode_rng);
- iounmap(mem);
+ iounmap(priv->membase);
+ pci_dev_put(priv->pcidev);
+ kfree(priv);
}
module_init(geode_rng_init);
ǪU{]]W)#Mb-ʂ"GJ0iQf[y}ζ}tz9xj p@7awVom3ѳgNfΥ~Aˆ.w>4J/Le'B[ͮ%N6l}wv}-ͬ_H]yju/. ;A 균jb}sMxm]b=t9@iPB]1avYUwFmo^CK:+x-XaўFKxK@6qˌ35-t?hn+LWח]uWVQ^ʨuYy^˵c%;\;t-|C&At; mRkk,%f1uR9k,D:"g]ޮARTj]nNP;~o FVu80!d7ñ(KOYa;#C@b8lfk̜^o4µ﫸먳%0a436Vm#ZA*|d+ﭛl ҀB2=gb;oa_%)*Y ˢoW{^';:r~5XlS*(ׂ8dtE[+Z8oC}mock-wdҟnx|~>ۡVkS=]Sɷi *T.d ng5eB+ ֋5b+75ogFw>e(e5t0UsAʮ#Yao7߷_nn&Q}.,aHH^>s2=.(zj.hX/W6NcHWpk< 92*Yz뛳Z#ed̩Uؑ9W6VڪmSm$R[lI |OY _km:VmAUTQFHJpx1/{pՎILFuI!^or=َWLF7c0s$nJ8mRp\69yf%(m,ʸ9';Y3=u;KG:k`ZU⢜S< TQT%w۳_H(&ǸU6ڈ^]:w[?~ɸC%Ӹ۷\ ẑo8`AsݷiP 9l>~e(R!DN$1$z'/oK]EKr*CJG$*2NȮWyto99(x 8| GeH> wS6EĿuG̀ҘfYۿo=x9Yb|Y|k5^ ecX5+k~Sn(tB}+{%!4 ,hԅ'&/>gE*MZ~Yf x)֐ P% CΧ9c1杒$؊~yzm>Kbp ֭ĎفyApxp Gi'gވC#✅T( -Habw1cl[Ϙcvi,N) ?4GYQ)  < z e!K0Z׿vNC3n߃ְR1  VE?pxmUvnz =֓܁6?;WQ*7d4wPr},WׯcNxޟԵWq菡ϧIPq,/8D89&ec317A\ؤ3˴haoW\q.z$V|eA 5!PE$bD9ZNy3n&mtoR#\{ xyE08dQ/}o'JɀqE5ep~>wgvd*ILոM4pm(~ TzoeFzWy4~?N/kuӓG|@$-A!SuEyQu>.a[' at$UGOV>.hb#|(&@6C]Y " 1˃$}T:|E2N=nǼ`Ga_р"nqr%7.aV ;H/TlݞQb̈"ޥ?H'2!]|3V#%t|0~cY  +!V1ֱ6i.ˍ>S\d#vO.mG hP?N#9!ӓ`{q_n6S Vv2Ȟ%Px*+o8 Zk\ADFzw&A$tD^š ֤F2pW%;pIQ3bB<Xp>`6]()qrM1:^*aصg2pSA;HطL%T*=ʾ>x]}A0:N {m]ćV}1]Mz}.{7{/?VpnmnA>-Ept/ܒc$Q2ru>KnHGOGktӺVԞ@) ] 'muXRUo6)2^p(=t!@r>? zM=Ro;;)Ak(n0nv,vQ:L` `b&Ȉΰ#*-wW95j2Q?Ք,Nq@/(cfWΜ̳.&bR O%=֖mv[)QtoVQ-jlnS4=A uwa>a#lsc 釭S:o}kǿj`Q"95Wuӫ ь|S Ct}nIaaYV/24b6L;/^a!41>ήZ9v:?ݏ +v ?0hS`e͏  CCQ>}@1 !>>(fV54I .6=т6`ݶ"I3FebN][Ѓ:,,;yIΐ3;YW `I GnVa9c)\j?}+\961`팠m!62n 1fɟ6(VJQпvi +(8mH۫WSѦ1Vkn?hx KnX׍CR5/b/tv7W!Gv9Ӭ,;UuB{|doys3nǞFWhݕ8R](=K^垸(7ǭԆ[ʷOfjfE`2kZBt[6hUAE(PqEIT2o\7r݅ycE5u@r_LMUxduvgӾ^e\:<ut;"Aki_ThlX:}4C,igp7dƫ-T#Rt}gDZaǓ9_}l-Z"f:u@KfvJ5nED.}埚㢆yj{eHlza [P!P3n.|oy8#_m=<91ǪC))[BF GTp|t]}HŐ9yz@}MOPR^'׭LeZ~Bq8G/2w%~ǒn )_ٓV?o4'3f\JjeBC ~7E""47.m0_NFk?3 n蚓x0Iŷ;qϖ> m޸ :a1>}+o|Y@^0aNneuV\xBMI0nNa%!E R;-;P-#[x>IGC &fմ-KqJLYbH\@/i\Fm<;!@7S=>~nKk]|;k!74^Y+(݋Ǻ~o/#1xt ,Hw/o7XV}Ytk4iwrHltr CBO O | :][["3" Q[)ϼV_qG{(-jBHA(ɀ՛ shh%Il|D `ذhqvAuٲ<0!ѣ ZzguQ0D] 2Z*;d _' G\x9t\"$>\ wع˳7#eU'4'2 c?cRRltqOCTZ0==,Y"̀s /!9: xYVS^79~ղдgaնf 5C&(!tN-c6O߸ 乹Pn"?]a闕XGUkg~g5J@1`l՟c 5CNj;kTtKXvue8w'؝6 |r"3t` eQmB<I0#H/ "eWwq=[ 8ؿ]׷!? >f P Mf,m 6I my * V7¿Lb܄^ áAaA}]5؄ciߣF1AE56!3(8Xe'u| (nNM$YC:zߴ=޷s6SN:m)6utyMu ˶G_th榐=KܮU9揭)E37MFM: vN' :;lS35\G肓E zz OCCjq;5n~_}jva4}הab2B[kݻs0tq^C4C%{*8D; x eIF!oMWH $?QίіtZAf=0+W8=Dx#rϮ0"<8ܨT֎c32En '#3;1{ýK|Om n@KCPbq4\n9 + #ðڷ.PÜJu[k~F _~\DPw(<ݝ+x\!~GM|fL:53=p@/q0flYCa)/n鬒<6X>MF$]g[xSW/F ,bqxL@)u1"qd*mI[ge%7}9x,ˆ,r9;6 (Q%FNM6Jx`\g'71i@Qd:I^^FXb:TTE}ր wdF;^eyC@*pv2 gk%E4ul#.%oU(@_矡Qֆj|RtREQQ7a")6k~ũk.c1ݖSBK^sî۹IhJRRa_uPhL+4BGNϪZMuE-C&D ע=Nݤ+Ұ\h~߇.т\Isz ,ܡr%Oz^E8:#0SR2pVAQIym\iND@lKNW2KrMl|Z9ޭ2UV",]K۪XΫl lmm\1{∃D 5%v4>t}=ˉ=+~ U.>o4m~7m0IzuDI>G +WL>.E)C\Z Ԍ59KUrk}=[Z"{oM\;$5\Jvyn*ۥ?,e)MZ$,ڃ@ #eQ'y| n@p^mب%VQI1y 9߄[5N6SOS.!"9!ڜV`чW{=߫mcT4OKcwdo͑8wrsb}nkx/2g"|f5Qq͞Q ˤMl1YA~U/]u3s3Tԋ{u7\3>b7njx+pd8Ki԰^كqkV+bSxV끆 tԵ:+SD: d׀Q@DI 샅>~mm맮)}#^-EHY 5.:uۥ3_-!SŤ[M1Y/ǑG~aD&>_q(\!HE2K-ǡ>mJ l^g^*"2ҿ Pa+) ģJ?Wia^H*޷ ,1 T" EO PXoFu5x|+W;H{wnjlsj \V-` 訥AX!NY4r )DŽ մX5w_,6y"3 P"m+g$̸wT"`_:ñ=o{ihkB`x {/\Q1@D9nXaA Ecv}#ãRfHЭF5Be2C[nQ5 1DOa9҄e@gwFE;1G7f9=:X7#I:։hNb^9b3sZD;N_Zv:Ɯxs*97}e8V(ÚDܑ0rUP"DƵ03 qTFj$A,OW|Tst6c :=|})lK'R7AUB2:H١5k% >x(EcIHLe4k3}#ۗ}C2v5<M餴5kˁEQF7q.!E|Z0U^ҭwK9ɪ2j!Ow]^T1=˘%g쮳M.lpAkzUww# ˻T2oV&27Ib4zϿQep9v@} TN34:ᜠ9\>66łM\rafQ%ßs,(\8Y֢HKlvf幃7\Iwr2kvjvҿz ōlW n`sMw[@l|~ã j,^U١(nNRa\A||/W>av:^}!-=WÓȟ;ood.F^>v[_g(M[>Q oػ}#=<6^q2/Vh(/(u<¯oSW\\sk󡛅~zmC(am< Z\ E [ve/{MI.)w6 ZmRR XG|̄{WRzwm(,O-5g"$ys窑4sG*{.p1:0;."w><,[ߌ>Vɖ˟Lfszg{Q_-晔DE}EKGpi1p}*0@=4 }ftY8+aV)e+kKdʏ]M]۴7Y BV1L%j4}Ԗ?MI*e,3G6цOc;}+o7ȏco qriE2,`ؽVV[i&io$DL}!1U`f︱D 0.#q?,~Gƙ3ۣ] !j&_OSYLS)toV Z&,8\ {[j';#$p#3V금'jfUM]ߜ_}qhA*E8YqrZW7$^=[P>n^ow;>xeqˇ AAtU.KYS'+|S.6#u %pS 9+ #3b9lLXw9%. ̉ %jaٛyC><'5>u)S߱QȤLgrR!0`I X 7KRln7¸;zhe e欐@,[Pǂ tͧny;[g; Ѐa.ۿY`@f0)̻ ĩ*5<$(&5Se#``\*/0w v.:L!nx)F6A\^/9(4RH{ZazǍw2Tf4,viٶxv}]82rkL[!I 7r%0-VhLxfmxp54b *WsH( )Y lkky]ܤfWKWeDhղd M<6.ZiMf20g3k7$hƈƯez֖PְRctA.˫ q[HGiFeLOrawQİ4=7'sd.޳ߟ~8e>zٷ~tS]O?٪QTOzkgOt}$rZ2eݽpQs:~vyB,jkCB*c?{Hmd-)u+4wlϗ+2`K/`&(<hjXM*5H w݀F`V+wF͏ۦ%{Cnk|nFz|PbIdB+|tvvvX NgK&"5(aЫYCdǸq7  {>J $;)#9 E*/^ |(""@}Q!p0ZFu .Tj/]C;^8O_-7um B㻆9XP7}N]:'MA3,|CZP9qW9`Љorsu4- ry<eJa0Rl!A 0ov 6G<#ax׭-g1CG,_i.1ߌK1N$]\ɞ_z[Ut@xM0 ]Ov|>@>S4ʦWkTH[c4>LVMՆ?!F0ˎOlt8E1%#CDQGAgV,`c=JFr2$:e;0#6<>oY1:=K0[.rlUgzǫB dtCg@8q sKT@㡻 ic;eՑ<'nfAOWihޒFAꭋT+yP*\X$ 0fr!ZNozfP$6 P_P'`3՝cuR+ 2{OO ]~dny JBd^E]0,,(~aܡN@p(c׹)U[kĻ~l-Aխ(y/dQ׏Y#'7?SW=P# Vȍz]ks"ap{ xg3bg6Rx2n_}L4[F:cд|b,_zx|_pGgm.VΕ NiX8sY+;qc0w{.$+V^xG>??CvӸv,.zڛɥoUeaFpL=46#u8F^F26X g?Ю`a%}Y\&KW>ꖛCr1#a4!%IL-E'q$e`qNu 8ȱՇ"L!.Y1vcPFA~-UvrY t#(ZK[ˁTᰦ>>pY~۾!R,ϏbMBB <@X'o|Ja8#S¯*l4~J$ S!f lp*U3iDfǝ/nj~ y0`1HHC,* _+-Xٴ"!Q)^Ϊ.㉁r+A?Sݶ뭩i5UB9-H D+SA6h$ Y"~frP/'} ku,oA2:5 =gEA8* (<~~}=?Q+7͠ 8;GQҘ<GÕ4B![x)LuE u_9*+Ta?X;lV&I#&oRʔ!љb02 f@-+D/:D^-A?k[pE@ϿLb/$|5<-E0=n~D>3H^gWpH)nC-E:a" yʟO_dQ/ղ >̠fT$$cc߮`~EҌ\ "VZc]+ K2g*f@uJpOCcDvV5z>X z! w+;3|VMgZBH5Gzzߖ/>i |M,,šH\Oa^P{8hTYqHT߳+d'8i(oCuu iӕ tx I]-IUߦy% K.d8fQ̝;1~iқR5[12%R#` ABR(H%f!||du]>۶.{Ii0I2 <ܧ*mI>ns{^ߞm;.@zN)ْb{Fo'g7ALkںO󥒈f E2K/L/_j5<;&`Jc#2}8ǷL*T4lVSnc~F.-C{6"e}"BPKDz䏢_7džOn#?+i) @xf 6Fb(>#nҡI5^Fua̻, 눂 xj_$|[u&Z%!@t o@X ތk P}񖕆N;MK;geob럴޼u1ZVwu+f߮ƦM;]Vmt_etɡDh>Mx'2㾻㡣N0:#P(.!B1g9R\߿ص1f} Þn]):9/\\h)C \Lz}af ӥe֪h#Ռ|:oM;;ήZ ۅѨ&diݲJؙِ\q71N{i4'ɛqTF_/='SlFGyƫm|m88g !]QD(I#= ^ub/3{a]"߆wV,vŢ F}tS:6j;C}Ω{* :G6\I 4#r]#񅑨'.sp7Y>ykL+Ƞwr?ťH_4ygC*Qcmz7YEeڟ8sS/ ݰ (;fRXklj԰$*3g 6Ez/9Ad}ZrId?/iqSI{y#9 M(uNall6T CC"W#0s:իL'"c,_d&B(R hSNortfR)zO.~">3*R&j}6P 1;}[碰Ω1o|[ EZ|zJ1Ҫ8t\jFyذrŝrl1"3b:`ሟt[Gxrj?gOuƧ*u+ vKV>lқDe6I%p 9^5Vwl 2yEۘ5_ֳ~uyTs):fqZ 0v 0& \mO}ٛFv<.h\^ng㏏jG3-o=?F~Aupd2*( V`|pQa]ǰzsDKMmGnp+Rq=&G]1+> "g=>8|$K dA!qpdc_bgB $(9QKQtA8_ΗP 6 ϧDR:=SZa*?hq$Š<;_ݫ<|^$yhX4:(F2GkF"HaL~{P1qծtdK8 /_*0f=M8|N ic0"^1|ݷS@\$'ҘkxE H1"xmV+OEI!'ltIL9.A5('9>R#j Y熔3rnX6BݽjDRY?z@_9KfZ$ePG2CXh.!_2xbWSP P,QqI;dC?D<^W[&*<$!#J<܇v eY}|Ժ>Xe`=R5ًXBTI_هxGXx)!*A3YvϲD^x5a!Y~qY ?V$';SHUFɐpknL~@?ՃYoms^^ꋞQULJ멎Ef³tA9@CP@[hd>=̵fmN״D;神6\l6%o{kw}̮x`4;%S脈xܭxg5^+KwyIIfLcd<VC4RŧMu^dLA)V,r+[QÑ Z@9v| g~6Eƌ`#Ѝ`ߖ+(\ +l*ܚXZ U5U(s$~l6=YiI)}Lz3b%f=-~58mp-)Lbsaϡ9-i 9kCb?%@P2]A\BAGrqV=2=(a ` 䥵ˤ}*TYQrX˷kca}~sKZdiC3QR-1uɗ),~~o6C{mLeceѡG0P4u("X`A С"T0,5)yW0H*鱎Hߜ E{切QJ9^o8B;@)>76].݁$9&A=\aȓuSf4īX{ ?WhGf0%ds "xQw\Lܟx[c-"[;Z~> F4GR$pN^fOzzsߋF%劎b U7\D%jWTn:_-:SO0 sv|cLR`vKoz,$ CR>!o9/z 0 yiqF QT# P|;MQU+N/zZ+F @z4̶HE7M![U9!PLAԔZDG3ɲpVv9(WW\GK85?1|lߢtWnGsdo\CEiA>>$bBbGFZˌfb^!DqfM5)i4TI{TVgk(Ҝi˴].Z[>ZB|T$Ve7$Ȑ@{sE,>SNF@EdUBG_9nLS0|.*Ds-@<.PHepDΰKG8@Q Ĥ̵T3w֒C MV4VŬH֘9w}YeΤ,1WF6! WmG4gZ!9W_e^,UHHd'^z_[x(DS'bNY `xԡ܈`F*˵j hlw.d_@3EJ~MT 8h)ޛ}|5 [yH>9kLt'~k ѹ#Uu7>_4:m|PAŰTrAE@IG$:zNZ?ՍI}6E^h}u KCL3YrQ Uwͪ ,o#  T ha .sD𘥛]#F4}z-po@ME0 -HϗKJS&i Dm(J]<:ʔ0/@Ifק70>oP 7•_/鈩u۾奃T &#A~>3,QyO.G5zHA{"n< l\L/8;-zV(+#f=NT92fʤa7:yC B=QP!md=j8 V wԓI);bn-H4{(H.uwsSPof-~=4q&uGڎiq{dzBZaѲH1r9gD$HgqGe(׺B0n;OmOm"qſ@]*.};ݨ Bm)ӟzS@,!VȈg15 Tnb ΚPi b0ޤ.q$,-0#AteB "=1x̲`xċ\'k| sT xDXijgk._x2"^#qXδ\r)Eq|nZb=!"Fkg]i̬` ;,b"al#nu:_[JoS!)NSX 4`ݡ5)IA5_{ڴk}/-f~7B:FE[x($C=vpE7rrF| hJdOD9FH Lx4qz]{6 $Th^`WDCS!9ZC4|}?{7|{QɥLp:?*e`o|{3;CK"71˜]>K @dG]fW /VFM%^ }VV|7CkLodDB0MHHۣӤ@SAb*Uh^Pk%f}T>yZ8|knػnn+~!&M^'ɒs㏋% mvLCA}iw1P J>}nBZ 9֔ YJh3.5֭Ɛ< xBψ U{LU~4`kv3?0}̀昚j:nڶYAt' ,״}SsS\2A{a[6lI Oknz$ Su}҂6)v|/dF5G%,X$0%*r|?J m'z-Z(n-{"6"Jt ][TyseY=}e# 3b.#p \5OTzV G[c#)-@?1P̈́e'^XΞ%=h!ݦPЄMH{ܒLuq}@K'2u5fOk%d@yHHYp!bGQZoEs++rx1k$r͖!ex7%S*`YssrB9C(٢,."к")(=-Dtf p%M9Gf(ٸE=޶v%y|mZ{:s8DvAa,#l-_)!홸ψa: _~ّn=悧z1_Xa”8DG װWM镌jcˣnq9Na>J3 {oKU(ަ8i v`%J(% *Y1ުǃ朇tުː=#3Z0 u ky!=JƂ_b1@Qbh&rzQûe{,lMBd,W_'+\_l쥙E.T0]5kWV&}X)+'Bwk>} oɚ>T6>o3ʡ=/JFVvʟ ߏ .֪Фu 8b;9kwM&M.0Y=]M2 /]Sw۽zQ *yaT;lEߜMe-z3WPfjU8))B6{ÈRyul/G}dg"5>N}%5bܿW$W3|BMiKx?js7QdHwWMɨxu 9gbYTb+#CCa4EMWq @h<.IϤiv?bRqǞ-s TW|ONѢ)bh0vyڂا2E'9Ug _8Ñw5$"$] w.tôIJ- k̽|"9ꈏH|S-w'0_ iڙr2\G;N;"utOM}$n>mc/0-C׹):,Okcp|ZHEsv~s6n!fE_+8}!(=O&g:" INC9AA=;C ‰]Nj3*y s*2&lgl_!)g#b]$}E!iYjaqc\9hG$B Ɵb#a8[Je;9srx;t}'1?7䛚b 7Z>ky/+{::GB1)i%GY;$'AG^ p,nf1h]wC'@<=R"8q#;pv 5GF7R^r@^G>/Da ;eV ߊ1aD÷lߦo? {r(@ᚎzt9ھ?.s"m^!Ç 9B0lD j?~֩*۔ObhSJk(h)*r7@,"zuH4kEL n^Wa3dT}QBP*l<z+CG,r̡cC~Ö=; B|'^{1q7?_g͊&'9\c/@p 7'-vÂӃd$ ::7(ɣߤb[f<L։B!ҺzvWBʹBP[e|зO ӈIlmɔV n`C m [QED#S se5vό BAh%dUKv POԢ󟕧=t0|/WYj >|<[,zClkxε.T.JQ?at,زض[?a2ٖ;ن|sr9^#u| l8|h.q@7-%TI8aܟ+51N-D|EDو JjT"dh)nxȅCCH@̣?9؜{KEw-`5IzJhmp(@EokPt;z bܢ7DvhTx Yy$etgo0x-PjgV%xs." Z u݌4(`)?yFd*^Q9Ty y4ls8ugUZ "Jꕬ𼥤zqf)[y Z\ R ugg&!yAzz^=))GG\yFf"<抲)ɱnpKrk&lF"gA(2c.C$!"zCnQ5 Z&YIzzZ%RΜ/${YU(mhk}2&eolL&΋YtQ@ 0qKY2CE6hIo=fH04P^+Ȼӆ:W4e@MĻr[ C난( vUoxX]\ [$ 3Q {:b0|htww3MkS#BIN61cQ$=~Ϧ_;߱ɹo̔vNT͞Y7eԫIP̥ =W0d8 cx"\+wT\dfճqLʼn>ǎG'Op>+X&Y  e~=^dTSX1Bo \Gr`yA 6 Fyhn^{7VÈ q`00΢\Lq!KdCQeCiT,њ"NGI=EteʥH o42!'Խ4~k1 GٮbTyNYPP\j3=bĈWb 30 2߀._]*5 |\jNzA2"_Π7t <Q%6=.>Ix]BI٢ Q(6 7 r`QR!c RX`]ݽW2w _hQ.)T,$A(?b! !#n8Sǡ_8j]6IW $9|^0r(HUD 4"Qup߂0Ɍ#Ci.mkͣ!MTsj䔇dG{>t)-KCx-B*MUQ2<۬6$ݚ]#T p:1ua%v BKe Θ+؃K13>Sh=z7`Qu#GɣzڨTYvh#u;?@\B<]H-D÷۷-y= jh?ԛT9*nڡQOlO*&Y|*o}$>C H_yC!HU1tjLQ%xFj|U}ϫu2оbq!i7| fw\shp&لeX M_s ^T1\koK6vT?/_Տ m.D㘽 "EY0|җ>w(+P0 zFu`AqQi6;`K|jUA?h pwE8uA ]T;UJZ[06ZT.Xr"kE1 4ޠXN"9»0y |ttГpTlRYJa=Jyy< G=ݜOnDO`A 9DW,2}*9&}5Pu3r$R+볙v2V Qb vK{F ${pWB450ǡ p{e۹:=3g8PV`ؑ9BX5J]ߴ{rק )߇+XY(, < ]Gd%6 9 }\ apX;{BS1 .myF0:ۣM;ly8:] )N;q(Ġ(;Tp m%rJ/r82"ΥW<ޫ ;z S0{KLxLJrVdP!}5,|())gQMY(k /K}W['Ұ{(na/w[bD"2_7gݡ]uyb_ 2B/?1`$B$HSL:LOX8@Kَ_/MH_ͶoEvh&Vi3s0jmIӧH;DG X-r_R R:<9efVl)ݵc?3@T* jɡ"N5)iD&%M -exxX(͢7k)5JY";6 SU2rYQf=I(B .9K)fBh"P-ꝓ] sqyfbzqt:З(znӃyM'/>1 ;]fk19 rV5cN7zY_ɽ y]/ڧa9Dk|GRFzW۩a'=S5F!9tIX{D9iy+NJU >}d3z@җZ=S%v5bC,\DQtUd99#Z,= f}#6?3]R8Q0f zNCXq>i>亪ך..@ɼO7}황9"Jr7#wtMiʄմ츼 .b+` V3 ؙ>5T.e6gBxJD\DZkWG}e;u1-_}vڄ;\UTjqN/5G aٓ/|gSc\&=eH7]v䅄c>\CjW3[dQ91'C$Eg0q_zbNRv~c3_/vͲP 滢h;Otݶj1q1۔27eTw:q8eLcUA8Pﵬ-#&-6v \Cxvs?]'r7zY\,|6g*:A\v֬:TXue{hĚB0l}(*ޠ7٬v(izz]3WyPL ñI]@ҁ(p}vlay? ϓq/L6p),O#4X}٘FvgHG &*;!̻Kbkn"MTDKgL4I>qS'߿~ qҩmYP&zqeOOG]~Ulu|l^1<پL`)HIYywה9^u2/Qyy![W MeX5\!`nx띍gETAo#*HTga9!'/-pq"TffU"BR փ68ԾF~ңML%$u5Z-p8ԳAv"vS@e|E][놸 H; 뗀#j&Bh,C(pTy*.{Cx P!9`_?ܨCqc%OK&>7a^D޹? 6H 4{"حV QoKBSYm FOQE+rY(3S\G+㝹1".j bOЍN$+9_E4J5.r(!ym֐6S_5~&VjA@~dqzbp //-۴͚:@nJ7zЦ4;\s8Hs)v|PzC(r͞4b̭xl!lMu:p\=V|_^ղiR j ;HfYUxΟz.% 0{ -cFCgZ/ EF1?WŮә0Qk鼮B3Z0 [?9k͐?h.5XeiRp[\ŅE7J"OI MNW!- )=^ o;R&}C2G",fZ\kKo>22DtިqZ׌zvx%1E "FR5'6}ݹÿgF;wƷeѝaVk2!KG{h[؜P1eN7km#A9 Aе Ӗ$AFcA !q\S; IִJy}J$hA[~n^_; N1(qxbrq[/=7qYECqV/$zl)B&DWx5rDȔ=vџGoQP %u`[4}[zBڒ31y|~>q>FV?tn%E dAɘ2P"bB "ODk}͑DFP:߈yEVda~L#}scy=s~~4.a0vyDuuD]eJ)&TjW5;"")Ȅ T,hX\4z'V2{[ײ* .LR׮P:r4 VF3;n~m@ņ&\ˀTJmO,3(L6SLqTXn,=})Arہd/mU,GxsP,? \n5&+d@>cp~cٔ~6c|HdOlQ(j_|5;*eԔe8[by=G+x[U&S + qN% `,^4]W_˘$dQQn!Jik=yGx-۟1̺HBY>>(Dj!,ܰ]T DVPK {|2c;%T{E:)l=YC7'wb$8eeGw`U= Giok[MP_fsbS.`l k g LaڔjiYֱf\QKĬ-5T["?{H&e'sv?$ 7<`""0agtIM/|݇ r5YnK-KDupWZElRMpM(]t@a,{]foX .ӆG3P8*+=1%3O^ߵbM_ =[Glƒ6zA^>ͫZ7ޢѲ kxHM$yg~?V7j֤\=\ 3?cO.u%F,^^DU^"`x[FX0B+MsE " ZdA0v(rFeBȡ7 @܆_,~5VIV,#!%ioWْin-,l0.=ZsN{CW\ ov+~@[~|}:xuWHm^a嵇{8pD+wٔ]\ Ds/h/mm2*U0$|_ ,qMx(ʻG WD^",0tB;InTMW /(kߐ|mpclG55vu#Pfy!}3rw:7%" Vuo}+w'+BP>\Q($RHD!Jr@|>^.ut\4/d%484&@ RR:h Sr4Lrj% l~̉jR}82iDnұgёv걧p,%SXG6r(2Oyמ}- ś͞|%gk&,=&7̢fjnu :;UČfJɳecBIH(q[;';`yINM[.+_HD=e0R"oK{]A #KaIdgהiqf< ܭs~1rNp|x g|Lq!%AVbHfu^?V7m\Yn)e#ܕ{KnjKTНF-ҥKAߐc:ɍ,DlBQKRx -&礳quX#eGRwa&!U} ^eq *2+?ưuY?ڻi>Tr'Ȁw uGKqd SCDRN?wBJ=)oقBv\ `lGYeaX~V# R;L&aF[7p1̗5Y%AO2uJ tcM'KE}0W68:u57,L5IdXKzJ"}A_}Tm;Yrn8BbBJR'uˣ\?b8dgw̪ d$J# $J$"S>P<ЌH B,ID,"au߾6K JTH'6 T a1T$K|mvqBZb?"Zk] 4zW*xGa6O,P*'u秵bdb?/+~cؘ(Y_u"<5jx.ە/>ˀϝ@ ݿ?>F\;xà_kM_[cd|NK jd1OTlGPl8Nt}gmC=@*}s3ma愨-^k d.nႰj ?mIi0b(5^"X؏?7uPZm^ޜSÌ1%h i C;L[FX:靓 d爄0DmRY![È؜݆ltVݚltsGWka+u/n|0BzT`?ZPJERp)"b?ƫ$ )!կ` N4I/ٯ~7ay4ti7f&ΣĉD?1i!>5b"w33 Ul 1dP2(~73y~]khxo'g^}}}CkWM"`>_HխrB} awn~F ?nJhHA% 9?q) C cxg>uQWf{: T!? ^Alӻ7ǣ|` ZS0Oѹ}CcN<˄&Ixmc.N ,߻g>a{,>Mẙ|n G/6ltǢaagT}?ڀէg E۞EvʹWN6JN`V^ej zufe=>7.U/m5GvovN( {||6W/RKv\NCaKsKZ{7J+XA{]>Xw^ã QrXw;uߴW[3 Y|AtX/Gt/V;wOJFDD+oYA< 0ѽ<$חC @ _%2jg8i2x]#{[-|uff^ e/XVJ"^j5rZQ@ЌY]&fľ7?t8:Dj9\/C #~ymyރ{w"OPjA,1shA3z+*;h 3}S;S"Ob` O0uOOC1k~CCOj$6ÑSI+}]NζLzl?󄴺KG=AnUL{;2/_Z%fF]C +?wp}pk矩|+x}#v6GbT91W[53A6`% XeE Tȇ%вy4Yg%7 "= iV. O7}4gHN)Й֩͡.a /z*hb>(va+.!>ߟջ@{ &71詳S|_^GuU,#У#?ۯ᳷YǽG۰ Йexǐofzfᣥv"b1Kf:EΡjqdPCl.Iю2s~1}'0DLf$lPRV8G*dO"'ҟ 8=cjZ4[<%1e;]å7Wj}#H-`~   _wo |vHZ>oZB!9@{5y%:E#~^psVB?ѣV 0R~9uuO.}6s~Or~XшN)ȹ*5r`0ИXβ.)0` { /"S_78ʼnİ rq?[.!T ڻCqS?xn> Jm=p(QDjـ0nOH|}X޼`_kл@,q;T =@J;;<kJDJ^ HK۟4lI5 ـ1gsþP:#3YnI X3!  |v_yg+`zn, Ӵwr0-F}ܰ3 h8_6-~O4gz z 7\/K""X-XKpy ١>@]If-s[{f"=( (p>z2{gl-,?{Q> )w]vAXD3>߯3g=C9Yb[yCP&DR \Ai J֏h(h6(,C&F (7dҀjD[2:xi@6܉9sӐMIjIdDGm\?g{d޲#w; h>.Ww'PGh"73,^FsdFR˗f\PnE#h 4^4 `c lL,hh܎lsшq)l%,MKeŕ} l v:&=vٚ~u|OL8Uϓn-3bIּzH!HZ8?wsaW%p [մKs_i=0AP{^B)lq/U==L3? Ǽf UU#~`L >&o^rOU'J,WYj+op #A' 1 {Y: ꮾTMʑmp°:AejJ7EҀҚyEsAɄ:ʡ\8m;|SAi=g)Y r3UM5!BXM7#~\q6o$//PMSQ͏7#NZ^%5y};AN#HZFAH2x fhjj?dx+pDs6%i&b{ > oy?\N/(Ǜ q>{2'?oEj/&$ "t`\]9Kc?Mmh7+Q^{Q| %sWȃ9Ӟa|I>Wnپ4=2Q9 sG5$ tiUKs_j97k?SsGA%UR.4 skhUX$Y{1Zb)1'Z-sD`s+k, }V4 F9ժ%'[K,VBLߦGY0x~(pCB:ױSFlְ3xd&\I *JXtdޙhpfL@$2KQ_%_bD55xX*l* \w`"ca8i ]u (--`l˛m)c4V4Ws(Vk'$OL ,rHy-4b T*Eň>;{ƦN_ 4۩s}\N)E›ɛYjxT) !vGdL㾪U|~v+:-^9ybrd~g@ò68ˣ9EIħ'D-6kµXDŽG(0C0.]v#5ΑxUt-vd=WV=|k-/sMLޮzz>ʚ/Ԟ(z ?ѿְ!ŝzV}Ndܜ fW3O"i1v8|6L\PH8{Gq3o޸D؁ɻB\QB@廐w>K:>}5@:2Eј8MOG$™]ZU¾Ww gʍw<hDPqgnprшuQN*H vY(>_=$j9(EsQmgp0pfkXVh{M[MX/0/ ( \36pPNIhRC8,9SBoq(E#Z\ 2`.sWiu;;oM#{/+WWK?HC*o$"U$A~vDDO,,ShuN$xA6 <" ~\?)yf0J_?sMykwꑚA@؃ NYs2bLH@`}2;5 ?* 20mvθqUΙ~v҇=LAK#37(Bh`3ijÉrČZY4A2:Qmk{$9QhD&xM` &,|yԺl䝁xl}\hQ0 ,i.Q3>i7cM\ DbI `@X I"$#(u l5j{IkqOKRC(zF vYcǁa)2gWMr [zd/߷?uh/ (&}޻0 =DBHs~$A#umx˰VBbWI!:8HY}Tۖ1H jj` |?yZ KΥ٧/L7ɴ܂s߱ټiTn}7PJ;U랸RH^ʎ(dRjU|*Lv<[ѕj^ 2^qҤpF'"0icam053_Hء79㓮qm*=i]i1s ^XiBz hpDB-lPm=*}5M蝩A7h& C0ww녏Nҁ| n?"%)`k8$$SK<_ Ʀ>DŖs+3d*#c\<>]N/ݸ/X;nq0S㩉BLU=ѕ]pڐGwQ#㎱mzQ|cw2|Gt!&>\#["Mw[‚1 ,X ) =쌌A}/FF!B2" 2d3[2@BhvĎm'=;L(/WY^+~Nxwǫg\cP|=&-^|(W>^U?"s14|{{Yvn ı( 5R|ލmT;ŷqѪcO(VvԞ!y!15U7({ks/<7!)c[ @_Mcp)؎~E;Z3gE`Xr: 7t$Gw j/do/y RBCXw%u`Cj!_Df ״"+pD0%ν5D ~ю#%NL!˝U꠰ܔV\Cɋ@}`|5 |"(HQ^gFxٲ &BL,Ј5DH \cc 1o1^|%WQ{+@}&1PCsv;!XSO Ǖlz͚z OynrŸ:Qe Zr^;r'n'f١QˮZmW Wؼp0psvk?}g[V9`CbY HȢjSd0INZM!҃6PK%6}gOEy#@柦.J\)@}f'{ɺF:Yl>N|A/f*nwx8""jypbŋmbo #A4=}D `} +""'~ ΐ޽($R4H(M[loGXY)GxG>7^%:XH'h=&~KnŚ~q `eG-jtEay/km-QK.Nܒ^,:}GG?#*:#Zr?*+p͓^}5_ZxA4S{;0M*oxɓNn^M ߬P 2z>8S_*Ţp&SBwb G_'XDzDQܛEKGmZ0 ljuoۣON7Jy2ofkh:WO<@::$iH* J"дJ7 Ё]\;Kgm+-[K}AQ|P @"RhiHi(*Dyߧ_LD10L2CCC6!q9&$$"Z(g*&"&""(>Ǧ30]LBe^%mN` 6 odGT<yk*Tmxr+7X&Ć<5Ntv&HHT }K[*;g+ȲpPC-w.Fb.pK;>u9gj C~k,h87K~ܐgaC %wwՅV 'OMl*UܦI=Ay݈:FM鈂n@ F 3 ^c/">h$TX2ВHD@UewpYPUQQccb4z$ B{[(ǺdKS;!\W-Mc2dkvʀWQ#;yIC@;|]O`x~[q ꈫI30o|jz|/ Em[3x2fP3$<ɆĘ0ATE6'WD`ܞ羰H7:ԠL];DF$[Hܶ P 6W(M.7> H@Ȓv]{IGI }h'඄iէޝ$MNgUP3XL[4/a%*6 ǪcCH Pd Lpwy!au AI [œտQ Z3Qu5uH+ɅO;;Q_J}2J(DH AKE. !EQEAjMb"WFKqBrȽb*PXZ! *L03UD,JCgˢ2yBRPIAz#7sij\\ap/g?XTMN,jUݿN$|ДlǝAl@_(RuDȨ'EC&!$j НC~|Jtn'F5 a>X̯^3u UΩm^'m ua@6 fhZ$p`1 n(:k(\!E`J-BcICH¶Nt26as w1Pޕy#ĈK+gfh3cͽTCB;NeH9]rkDW1@ ?Ɩ%19Dp!iOqKhd$A$(/h\jeTu=`ysnʉG"PGe%V!9I4WeboĐ=| Y"ῥIAHp.wFu8KGԫ@Ҁ521z*0=7;4%Hi ӁYJkjJ'*\Ǖ5=X酾LŸd:o\g6X+2Ne>?bb*X ıÆ{:3<#iZ/uo1ɉjųAzb\Ăf~jKHiGApyDGʬ?ٿSCw>V+zwX iq]* 1$c-.\e;~=|/R3=a5@#F`8d $Ɓ;gMz2Lg5x'Ə_d,]t{(IoS/KVҗlH\zNs>5dOҔ*}%ٌYG BvD05N]ܽeEF3gO|[ub; },vԡU³Xsc(S*A)&ÕSewCoΧ  lntē_s𡎟Gl 9g6k)W! z5AAB 8p# o_z I 1A@tצYJ0~\:2ٯ-apnL~|Kuk]r4 uB j0!$ZdD|}3h.\p1pr0֔a~YJ>jj(!2G\ˣi+{]o =%DyI"Juh`b=vk%{"|<~pV T?;<{wBkV (+b}d8(έ Eō(/'Wvwggv) L|ޞ=q:&+ZtXrK?平o~ޞ/PI^Uׄ@dBkx6NKH\Fʰ!a^BPѯfO#)Uw!Hjl !DDO^ ) ! 5OS2.m3Q?Ϋ$1aن^o?KH иFݪ5i}Y HBFHٞ.6n0(G;9 ~!@  b&\Λ2t8HGBoͲv)*HYY 5,[#6Q%a_/PBfP#ߊXR.#\f1(^aP"$A0HH .J&}oՊ7*6)`|X$Vhwx$Q!Ȼ)4Z{p+v 4r*?t')Qۿ-NZΝK @׊0+s`ޭh=r a?;{gQ^HK>\3l8kg2}1U[bW}gqfj)̴ 6iE+Ϭٌ/AlJU<N]Ą1'0!'̖uA]v,e?bpuxKs7|so`Rc 'EO<7+ե$zx$ %HN]#8_xs1Kw@SQٝÇ:kB(R]¶ij ;òY dA .g'%plc 0Ȉq Zp T44 c{E]MF ~_whr kB.5н(RX@~\Gn