summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Abbott <abbotti@mev.co.uk>2019-04-15 12:43:01 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-04-27 09:37:39 +0200
commit16b235e81d9d7b502fa72e579cc7796828090111 (patch)
tree1e931d8c6bf34263e1d0e2f19f3ee0db527d67ce
parenta47fd7121627d66d75f401f9a610685355996330 (diff)
downloadlinux-16b235e81d9d7b502fa72e579cc7796828090111.tar.gz
linux-16b235e81d9d7b502fa72e579cc7796828090111.tar.bz2
linux-16b235e81d9d7b502fa72e579cc7796828090111.zip
staging: comedi: ni_usb6501: Fix use of uninitialized mutex
commit 660cf4ce9d0f3497cc7456eaa6d74c8b71d6282c upstream. If `ni6501_auto_attach()` returns an error, the core comedi module code will call `ni6501_detach()` to clean up. If `ni6501_auto_attach()` successfully allocated the comedi device private data, `ni6501_detach()` assumes that a `struct mutex mut` contained in the private data has been initialized and uses it. Unfortunately, there are a couple of places where `ni6501_auto_attach()` can return an error after allocating the device private data but before initializing the mutex, so this assumption is invalid. Fix it by initializing the mutex just after allocating the private data in `ni6501_auto_attach()` before any other errors can be retturned. Also move the call to `usb_set_intfdata()` just to keep the code a bit neater (either position for the call is fine). I believe this was the cause of the following syzbot crash report <https://syzkaller.appspot.com/bug?extid=cf4f2b6c24aff0a3edf6>: usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0 usb 1-1: config 0 descriptor?? usb 1-1: string descriptor 0 read error: -71 comedi comedi0: Wrong number of endpoints ni6501 1-1:0.233: driver 'ni6501' failed to auto-configure device. INFO: trying to register non-static key. the code is fine but needs lockdep annotation. turning off the locking correctness validator. CPU: 0 PID: 585 Comm: kworker/0:3 Not tainted 5.1.0-rc4-319354-g9a33b36 #3 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 Workqueue: usb_hub_wq hub_event Call Trace: __dump_stack lib/dump_stack.c:77 [inline] dump_stack+0xe8/0x16e lib/dump_stack.c:113 assign_lock_key kernel/locking/lockdep.c:786 [inline] register_lock_class+0x11b8/0x1250 kernel/locking/lockdep.c:1095 __lock_acquire+0xfb/0x37c0 kernel/locking/lockdep.c:3582 lock_acquire+0x10d/0x2f0 kernel/locking/lockdep.c:4211 __mutex_lock_common kernel/locking/mutex.c:925 [inline] __mutex_lock+0xfe/0x12b0 kernel/locking/mutex.c:1072 ni6501_detach+0x5b/0x110 drivers/staging/comedi/drivers/ni_usb6501.c:567 comedi_device_detach+0xed/0x800 drivers/staging/comedi/drivers.c:204 comedi_device_cleanup.part.0+0x68/0x140 drivers/staging/comedi/comedi_fops.c:156 comedi_device_cleanup drivers/staging/comedi/comedi_fops.c:187 [inline] comedi_free_board_dev.part.0+0x16/0x90 drivers/staging/comedi/comedi_fops.c:190 comedi_free_board_dev drivers/staging/comedi/comedi_fops.c:189 [inline] comedi_release_hardware_device+0x111/0x140 drivers/staging/comedi/comedi_fops.c:2880 comedi_auto_config.cold+0x124/0x1b0 drivers/staging/comedi/drivers.c:1068 usb_probe_interface+0x31d/0x820 drivers/usb/core/driver.c:361 really_probe+0x2da/0xb10 drivers/base/dd.c:509 driver_probe_device+0x21d/0x350 drivers/base/dd.c:671 __device_attach_driver+0x1d8/0x290 drivers/base/dd.c:778 bus_for_each_drv+0x163/0x1e0 drivers/base/bus.c:454 __device_attach+0x223/0x3a0 drivers/base/dd.c:844 bus_probe_device+0x1f1/0x2a0 drivers/base/bus.c:514 device_add+0xad2/0x16e0 drivers/base/core.c:2106 usb_set_configuration+0xdf7/0x1740 drivers/usb/core/message.c:2021 generic_probe+0xa2/0xda drivers/usb/core/generic.c:210 usb_probe_device+0xc0/0x150 drivers/usb/core/driver.c:266 really_probe+0x2da/0xb10 drivers/base/dd.c:509 driver_probe_device+0x21d/0x350 drivers/base/dd.c:671 __device_attach_driver+0x1d8/0x290 drivers/base/dd.c:778 bus_for_each_drv+0x163/0x1e0 drivers/base/bus.c:454 __device_attach+0x223/0x3a0 drivers/base/dd.c:844 bus_probe_device+0x1f1/0x2a0 drivers/base/bus.c:514 device_add+0xad2/0x16e0 drivers/base/core.c:2106 usb_new_device.cold+0x537/0xccf drivers/usb/core/hub.c:2534 hub_port_connect drivers/usb/core/hub.c:5089 [inline] hub_port_connect_change drivers/usb/core/hub.c:5204 [inline] port_event drivers/usb/core/hub.c:5350 [inline] hub_event+0x138e/0x3b00 drivers/usb/core/hub.c:5432 process_one_work+0x90f/0x1580 kernel/workqueue.c:2269 worker_thread+0x9b/0xe20 kernel/workqueue.c:2415 kthread+0x313/0x420 kernel/kthread.c:253 ret_from_fork+0x3a/0x50 arch/x86/entry/entry_64.S:352 Reported-by: syzbot+cf4f2b6c24aff0a3edf6@syzkaller.appspotmail.com Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Cc: stable <stable@vger.kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/staging/comedi/drivers/ni_usb6501.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/staging/comedi/drivers/ni_usb6501.c b/drivers/staging/comedi/drivers/ni_usb6501.c
index 808ed92ed66f..ed5e42655821 100644
--- a/drivers/staging/comedi/drivers/ni_usb6501.c
+++ b/drivers/staging/comedi/drivers/ni_usb6501.c
@@ -518,6 +518,9 @@ static int ni6501_auto_attach(struct comedi_device *dev,
if (!devpriv)
return -ENOMEM;
+ mutex_init(&devpriv->mut);
+ usb_set_intfdata(intf, devpriv);
+
ret = ni6501_find_endpoints(dev);
if (ret)
return ret;
@@ -526,9 +529,6 @@ static int ni6501_auto_attach(struct comedi_device *dev,
if (ret)
return ret;
- mutex_init(&devpriv->mut);
- usb_set_intfdata(intf, devpriv);
-
ret = comedi_alloc_subdevices(dev, 2);
if (ret)
return ret;
[C\#>-YGcR./01&-RnHV} |~&^9vlPr]IL%rݳrգ±1/xѭtΕ0~Jmx'{JŪ"/?,esiK>GL YÝ%I ]NYG|mHFpoȄ fZMe[I3Uh 23,|Wd*@l9pB3 59Gi:TXE_` w 6޷FTj㰿7Gn;UN6sa$pHP蹈.إaA x[|C6zbLuK{=Lz1Tb;1x>iU _&F>qk/r fwX@!~"wءW1Je!6Уgm@׼Zz w#Ȟ>Oɱ_IH]HDi(NS4uea aE" =6| ,~ҥ2 :;Zq׌H4rq b]r=K3 t{?ȝf*dV1'.HHZ^JFNLH(]Th a OE)%oת`De+ثՍYY[0p-Zӫ| f SsMoʸ75:!-˅qбIQ].f7ѝF4: T߱r!OE7m"'GgăA(bα` vDv2nT/6=] %Zrx+3F*wӚ3PcQp ]1M T=*O+;ӾnD,(HVL)/1 $YsWb3d߈,qThydXU$GeYoFC~ 8d5嚡PE}],UMO %c^q%ģ[ˁP%md{‰ Q&K+7`Վ_&!zƺFԴ&W'?j _N1[}ox8okƦrPi[ňzȗ\VCGR80B:2w!15G3DpY_T)ӗbf,TVҼ.J3LO$Dw2T?$ᠾ}n%H0o:i&%LMWiC6l 2Q)"h,^jW_)g 5> y{su. s֡KF98hLEVmIiDQuJcDuDa7ۉLgsCH:\.]sSAjCP KwӹMvUoϻ>a ԗT'3ot q_GkD@='5RՍutB͚SS 9}\ ɣsF5bCO1>H4nIVV&!'-cD3*RONkȵ䢑sTUFHWTi*rKNs"19mPoɸهlQKPs~̵FoHfdT虔IB]_oAn#>Ee2Ќ{1o yzEh7J!l2TGr4<9Qե2[*JtSuO4ldžU3`$'&DVvͺqHo;EwS];O6|1mj4'scY|gM'Għ:ۣT93vڄ0T"/g]V҉CA@X@$q KeSb*N7id۳n@1?(˽T>rAx-Aoa\i&dL72B:>s@=E!|Ht-h&9kُ_ g^-%K06Aɯvmң(!p^`pO@BÌ.UђfL ?m)PC:qK48gkIp Ra_3=/uk(4VEH/3}j{U݆n/UT x7qI޼#dWxpO\ՅˮqA\59oؕ7`s%O^ϪRy%ccr>CpKS"`Cc@1ڒ?8e*mĆPfUVF,[xQQ<͗ <ϾHᗙԛn`k12#YYάKwxpKBr2$Kϩr.\Kw$Z=>iNUHM)U~K/P*9IZWLʞ.16 tLJՔ=:!2~V+]ŗ]e֕SQ|w+(:rHwɊ0ȳpmt)Z۸03,ݮB\V[3e+#=F &1{ASN.ݍ Y).ڳbkmwCר:79wC \J1\7TÊH/%aMsJ '坎C-Po^ʄwE`n Nu_+q^$=4g7*5 Y_ޑXAtkўԆ^unjƅ$3ud>Fj#ZЗ+Fց<ǿ'ZTۃLL9rH2낛qI {H9ai\3ImU& YCOUt0t爪K 6| }^ĉ=m7ҥ{AG9pE١lڽ 74k|js8|f%^jijS'&0YNCӐTe]c󙉊MQ.xFۄt`~]Ռ3iO_}LޝK |]2PS"Ưe`:{UN`\$pUBtyEze^?,khc}NO,CCS32!MדEC-)h"2#YNvVpu%s i杬 %4]rYMgx0 +}=eD4ӜiZ@"FI!jpHt! ( -@thGkKӛ;Hܯq]\u†@ցH@^-I58hHU|ͮQ>gvݝ]ȑ`%$%H-_y9ĩu=x ?Ob]suǿěDP9{ÒѠQK3. hWG^Q𪼕` x=i_,&-֠+5ܚ "V y&S^gM.&c^*g;;1݉MZ#81$E"h-țI^MHRg/~_%>oL.ih v-.?bzq2/xA4JۓXR|PRVܗ%H7%յMZjvOOqqdžRC3)tnK6jҪ  Cl% 5w3nI{1uñV :䰚#ЈvVr.$tuޙ_ n7I9S. r _l 6 '{rt (Tk77 kjY|F&r,(߬y$їk\aʙy/yGsJksF}r=r`{,q W& }MkM`A/.rA/?U 5FUtk)ԔN"*#ptƂ+q[37xG]]>&\ 4,"\R&jK{# #ЪJuae=%L#V;Sk ]kܞf#{o&ҽ0zk>,g2Jd%H բv2CR!Iv\$2iu,M[%1"Jp"eVOV- ;eY;*ز9G_yKيfI׃{h}~?- %d[;̡ʒ3!v]],Ǡ! G`AhyR) ϩr9Zy.܆8"3Rxs⎫%t>vHS%x 7x^/\{{KTJ-0d>݈<DF{N 66,nakz巛>8`tߌU¥tn;^c%oo֮b zhuh$G9C]i0h Zb\Irzɺ֌zvzS)%ٵ^Ԑ]068P7Ud8gghr{µt~((Է+ xy̋e?4!q\>ffI8KZ; ŒcFJuTV>Ԩ`@+wɂSOΖJ4m ګKR=&ŌE,K7i"rvk5nezhZR+N60 H@\PxDPBnI'IWeKS_\^:6s &4~0ImT9u jpQoaۜ~3֕v uJfő6W>Fҝ]EZdӟߢp.7O+q@p>d 9v uY-f~X- KζF=7-acnDoqS'<7]>:< H#P5Nc2>;IhMvd3"u.;l#Ak?[KvxpIjB”\O[.01INԛ~*f("tN]a?ztwn6-bh=%D"FMf(Q! H$Z3܁jҖsQѿ! mL3*=wr6?|^]'GGGWuw`htDoWuTF^QvfDE?wsz4~p}~zzgGGNa*)->eP;:=ү=:ÓO^+ꗊ̍)~/O+8 @8Nس]?6Ŀ|)tNryh&wL?P;i)Ix2~i?<=G'B*{B UK-V; ڤVl31a4)k%l#i,ng dI(r%'PRp8*'p%jF`e^N iAK$9)$[z\e>@$>@'QiaMZ? uVaC_㣣G\f}.)JZs+ӣ?:9} ~4t/xi&Ynh=@6t{<]ROTj;tSMY˃H{~ZPό0RXax;uDDTD\:&WpIE:|ף,Wi, e:i߹o0xX0 g2O<},%9rδT8bם̩V)W ~Q*fer:[HZ-+[’ CnNܸ0qcqO9L}̯uKoRôգ>#ԎNlW\^Ęٷ#R%]SPjhWɰ4|YY2F7xp\f{˙:NNtR#B!Ç]9{,.@c5!p҇TBg|Zr-Nq> R1kY5=YH /4q:97UXX3&UZB(4JI]I&E:/{:+VGϑ(Q4o.wQ]$J"]+C~hэ~cm$׎{4 d&kٲ4q=JM=$4s4M^fէ=>G "6"*>)ڿاGZ?-mHfI,JV$3b+3̷|ùb4BEg47鄉Cya,zɍ^žAd:Ü[{n26 HCh,DgUr8g,YzM 矔@W:QqMK"GVerVTkFM\j:UE6 Lo3Z';(l,zzJD,=p;q?[:ӦZ:F]E~aH k~,KreV82u3pݭ{~f(m!r^1DDSoޏDxOG$q#jړwZeଷj>KuBWŕ鷲d;XW6s^t{jEgrPN?#aU5Q]Sj4QR^ ex]5FC xCuN@Dggɜ%eƤMW~FlnI~Pvne8p)Jls˒u>*ɋ*ޭ6 n:M5nƪ[JUjNEX K&TŨ ZN2,&/ E*4Z G]54^P>(5z>RdXfoU%)vCC=_I"ZYAHـ)<8y|?] ZB5AV)`& u.m6Wկu~kC#ޓßqw2ϗF$+]jTu=Tm̆wH)s1<VDkQE$co* ֘؇yda u'ci'm*=ӠGrjiy'Rh?5ZaI`B!,QK4aUiֺoK I VK%̒)cT"LEn$Π;4ʬSo6UۜFVW! fO2Ӣ+.Inr_=Rzbчo/+jsͼ]+ǟOl._iQA+/#2ãӃ@?6z7mGB4#O Y=28"wMFŲ זG^FjN1Ž\sOLjy^W9IGʟ֝푒EF:GnO~&tJjyWzm~H$c CX"9@H>i. Wɚhуbd"ՎذnN jp=?q9 ӽjkvV>Z^gO$SC K8{+E:-_z[)&VStndf:Ĭ.\Koxz AM&a>_Rkx=^_ldH=o/uMU8<:׈=Q?~73MG7]&lLm)kx0EZh6[ʜ`1k)0P[km2p9xr L x^H -leKaGDBhujY4\Z2V\'KjkCYӠ$_NюeWP0*~B/pu,qt'ZI|>pCMo',mXZ:Fyd=9p>b=ٓT!̪{ b ~|w'2`o}~>a$ jݒI!tS9䱽Q8u*2ɖUb%ah,ٛ[mAJ.y&R}=-kzHէbz{`Vbʞ'7'/q.nZ*_ݐE'_=WǕs?fj[FYJ]Rm*0飗^ZZ ,r=Mgsf\c<>lQ.uJK|蚆 }"ҒAc3'=rH!myO;ذcW7'x^YGfva}kCجu%ޜ? lV1xGF)fexL?#OKT La.c̛t#*ɤVt#{B X &||yCu VY5Mr?}/YAIchgT.dF/M. شngiw=O ?R#k&uuS Hؼs7e`-@'jJTNS&]_ȫ]Ȯ$w}v˜~gxG>4qTiJ 3S vGSKyS\p-=e^V[]:DurA8 Ɨ{~M[<*~̀w-լTZ`ds Y9uޯقz>igx$ޖVH3b->?VٮuUsWsg栆 R|dLRmU\R4 u&?d+age'o ;^굚O}ag[Qx[ľ*ת7K_?ٻxf聚^z79n°zmS `bQXK*j}Q4Qӻ?~4 s1'Cl}gc&&˃Q1uC/t .Gr[G{0 /LٶRc{aD&PwI,厯\'q,j_/ 82ށ?ӽuƓU';` (`b҆y '%[A3؝tUՆf 0v@/6DxT٪֊V[+fHK Kt)t/$FZJ&IL=jVi vKuj2Ru1X4U[hd ExU.NjMEν'z2oZzFhy*τ&2C-<˭2 :ZjAvb+3'tHj!;χw$s^hlh@ <>Zd'|4G#-~T> ߼#Y+~aZIW*iޫ+PRarMOzytJ0KaأVqtP.g4d(*$nJ$y GBnH6GkxJeI<-pY^RBg8[[Fv.EcPt!iMt}/@{=;R9_`BИåx_k]vYS?۞#A+QHZGDaj XEH5ģ )X_|۪߄QñBה@ždRucDzOS\yZR"hua-` 4)ق̪ a "Wg}7b?$މK?Dmt$FdGNԙ{Eޕ8/JR t8cK\:J&kq'-|No/Nb\̬nEjvMq&8gFVZU'5^KlVn߄41-֐ ٯ~. nW=ҁS٧(wE';1NDBe׋g0]kmf=k;tm|Nrh}0ˤR!b911.-l) kfДc]puU~1!f6n/UP%U*M.] ;4;͢CTQ#jkx:9`24;.g~b=Fs2“ zcjY[tA 0nmm4b2(hY:o8{? ]C}"e=Yu' KJO 薟c'bߝZ.Q8wP5C bf<?$%*_I+(ϳMC=tѯ;ԻwVHK"Ⲉe^Gv,N-3Mԋ>aU>gZv& Q{"$qE0<^J۹?D:k{E8+ V-x'Pq@(@,'4,:NïBµDtgҞokA=l)4m6|CAkcTEF=Z(\p /+8=u84 _>%;7O{4ᴟ:d LB =NW*PWElώqk #&$ĵīT9d`_zfG;g@TkZIRPպF\:mĪntxHB>&Q~ W???dE1^e5`тr*qń@e=8t` +fi!q#n ykCeOfq|=r `k} FÂFQFrW̖o./ِxL+l-MI ņ.GVNhM񽜗E#kF NFILyJ0L ZF~ڹ"yT?ܡڨ6Fv]i3ә H @XO'T,)McvuBhooyHVSM+whӘ*><$IX?ii@ut<2+v2 ?(+2֙q}fW3Ә5>&=BMfMN_NcPKIA91eͰ9Sw08-{M /Sl-5)fH!yŅ_Rκu%"YVp++r4y v4UE; UngsM-N7w<mۇP.la= HӳxwQ ?ZM`}+@x;H`9G4ыN%9'NJ}*h; ΤuHQdEv~8/rdȐNI3Ob^=Y*>Cl P@7Ur*2h9s^}nTF!pF§=9{' mk`wG>]ͺɂ>;iIsa>쯊5nfѬvTBr0YғاoC Gtc$dqOj6w7GmeNjM&]ӧFfA] KXKCN-U=b1TuW;vb$Sлr4 I ,/3Rc_ۀ*2t."R!7 (͒,aAn`=st@IXWbIж%*7</sRCY/\/9WU%I8g ?|^5FUCǂ#+tOЂJ y\r^ Sb||Č|e%Z}+j|p0L  3dX7XcTi}L<=| |x>5^ BǕl}IT*W&w`֎A:b:OŞLpcg EAym>g9"ޫH_cnX%<.@̴C: XuZc\:ΊcTD<5ςVi-u[{Cͦ/Y90}Y ,IJGIrh ce=Z*70m1) I]R(;TFhXT9I3QZwFDk@ & n& . ?4BKOƳ8V|?d2BV\4k56!bH3@_ IjL'~fǃOl&3>C Y4l8 5ڴ ֺuvsʍ Cdw$Mܥn% >OH/g6oJ>WHPP"GjKxfӢ'N\[#zy{ .?։r a [F+K~#o-Q@Yʖ+.8TuC%nr-Ğ}]g tgZܐj >ȉce5 g?X\)Ngi!4Gk(H$KzN`YE$Sbdr+XMǴ^5hq]dV!!`͛g'.Zqar0FڵQ94hSE2@n5?VjP㆚t԰ 0q)Dsj# YL':a8paېZ\S)leIkڒqǚtEb2qZc2*δbZ&%m1__pTʗ#lzjE#q-Z}CR);䂌Gң 9 e.s>Wh`Uu?ZGfcH'_t [2{oNVLeF^|bυFol ƣtz\6~PMp+ϰN*F?O3'ˏ2hА21qP6؇g][ȑ{k-OFuQ2Wļ+9XQ }]Zü+sGCSLկY_# ,䮃^>gh- [2(*:wF>m,ۊ<S#c601gqwςn 6.Itm2+"ߊfJaek ZՌ2ts?ȉD"7Ucn!-:D|0} vlW ks+8̧OMO+FJw/` #KC'5a?% }RGZl΄E/PI1Ƣƨid0[&[;"hh:zMi]H^?!`Q VH]mgZR/{qlA[06Vd[`o|uִ2OxCof ˸ilQRf=㧣a9+F]#ȾX.} > <={OVZ\^#0]ԐX/4_ĞwzbiWFSE#uWtazяI4̔yȰ$ Ѹq ̩1$[U-[_vIuɫ]&e6z1o[+bo)h͛:j6~OntTٞ(?;jclVL';pKa;Vu Zu ּy8[ +k2w!4+H߬h܊9y+l.m\kހGJ%5A/e}yY2^N'cZksƚOm,HN;[kYQ84@@OҧBK i/ 6%.*-q+ $ %$1L>'h wge% OH*IFm{m1Yx}Dyf)Iƛ#llFg/7F5W{"7"rw.hI ' -{ΑPnh?sn+<{0~iת6GOH]_k`,2Pѓ-Om&XdG:Ƕ 8{_3>mފ&e+Zi(4@6\!{9brZ+d/s m]҃ߒ9u`/AbHfW+PnHpk y. _PڼI=Hmm^#j*KP/6i@ .dT6zbF Є`-nQ6͆jL Y-R(Wh;yc#I^oWU.8gyw\~4?TG'^4$` 3(&l4!mPR8#]9lm}b4\HGܲd&4EߖMζ 6%Xe//%EZz<KhRW*ezC`13Ydؖ2ͦ*cia9JjP'sQ׊]ZpJ`MR"**vAcm@&1H[? f p @\)gN@#R^9˚ԶSuc*TСSݠXZp[B~{ӖN$<~EMsS8+>@fF$6>%dqq kjw@Tm@ s q 㺰0h1Wf# Ntiw5dƌxby g DVފD"[^* :EyPJ~R'&"6la0:[& fe/1jJr/|c= h ;# ஍0JužZPBjf^N}#0<ξ?f|8T0z7؂2r㽡6T:CL@*YqD7ֹe] 0]wKuj`u<[+WEqK ո ~_5IUIu^sʅ.ᯱ*i_ U /i6aixIMi7O?uiBi0dH]@LPXpq-- M+ zK &H&^Dڧ4# 5ώ|,UmV,W=[QIWIINY&7qoJOtO9Fj-5_@꬧KT`2?wsZW[E :XzJRL Qc+'&Kk6윈}gNMuB *Y2`x /GƘV;)BsKKXdQEK$kp kFSN+W.FgeSa|Zky\M6=U;q* 6WOOHsBPl7TWfsg7DqIsmv6 K@AĠbP|\emVG>NԨUuԡAw[(8 һnW|k;/:%ں/q[{ۿ ESZ 0,j GZ kO%̛Hh^]zO^g6--\Rtak&-zVmȦeG͔R" ]8iAߜ #*rqKhl]iQU\{6S\-%F`+eL-J,e j$;]mu=Z1q6ƝLVIGFXbb Z35sQ!M'rf=PPhc+` RBJvW10IM}Z[j`rl<(6ۣ*iӠ+.9[/nOQEXan{ItR<_F nρƓtLVqTB/dwv~ SDCU86T.5%kcIHn Jrqc\$CZwYBSoa.@JHlL7$PR Zka5JBW-?YNxdW( rxoтZN(;d H?n%&Vx)옵PUP^DlCm.LTS/fã&#)%|C]#K %.@na=>&-jҐRm${Ȋ%޷4'6?7텇4y<~8m'dA ji{˳Mu8kdV9cQAM4GTkkyp4:ޫW}w],zAxƎ|z'4XESp֘tOSd9-MC4p6c6F@?Ά"\¥m:p,_]ذ8axHw<ժrWBŧ;gf,Wt9c6w0@Zrc%;+?"1 3CsU7N{|%&oLS̠xLye.<|ŋŰ_.2f޿GmR'Y YhK*w)vMlf>J)֝VO5`# 8NvF 4?8]NVjN['m6du5"B>h2kp5Vj2&ws~IjkvC=_xcAt>ny$yc䴹& 1bV, z P1hR8WRo 1"w> >p>41SVvmΡD­"Ót+܌팻2׻:l%6=mOY=|ycIUT{- ČM\.7p7ͨlaS篙Vy`#nV`ʈ )m1&Mσ -6JW;d\i=M3v5j}B2ۨ8@oT8䗃29u82؃Ztϕs !ԳXsi(]2̺dYt(WAT!p3 ְ_֬4uh'xEAYz^/Ε$Áv ,,PSJӱfl~54KQD w 8SȀ0yM"ug49!YP՝% Mw2gjr]zR#ߠLT{tHZwf"i&zAY6#7yvώ$xu1",¨}l8Ps-`A]=mg5vv6L{b{= ⪘VKBNsbL06ـly]wۇ᥊2\䙞zܡf26`C"xW3vPgd5{Fۡ[l2YISߚh7i`G) h\H5.O3o?ei(n#7B&YZZz]=W0DvQxa 摅Zvba?RBXVJH8oK޺0JL ?Qm_kOfꩁU ^}p}p*mZ|{Ԙ 5i֪:8nVJ5)qW(\nāz~.  >O\/~1JUv8%|)eK+h8(H^oOIf}ӯI^?;u9k3sb]^8W2gDsf98>-#o\A4ȳ&7aXCS`GZ0BµZoCU8X l"m1Mwp ݷ­<+V>)`g3uV'l 8J"]TqII6}@g>/-2A>e\xNҟ$g7tP]a 3g$T åE}ތne}mGBH#ҍid,DҚ̝V;HeA@E'J7f%KO(kLt(aW϶v6zF)]n {=Jg`'\Pz탓ҎVDV$ .;',cP(6]f=f`l=RSpI\I.ph/Хgji ;y#fmU&wxI,vnf}k_R?u{ّ#jʮ3E+];T:-)w~?,'.Ei9qf3Iօ,%[5Zv-My>?L+YW0cGj7$*rx3+JQX-۫L(@nJ^U\>#iO 怒-l6wO@$9j)57?ItPv~+Qi1(1 *Oi7dmP!͓#ȵތ1O}qd5 "U I ۀpVa)%v;B-$NaY;irUUGEJz+u&֬.Iܡ7JPVs(X;aȮ1ͫ3$ aLEp&E6&ѥXr]$`K4N7k\cĥB:KQ;ʲ2Pg68qc.CU׉ҵ$8ِև"M7WdQfSXKlҤ ?$ꚵϘ / u{E $4yÇyS΁EAr%=Zuո{۳C6֗FfUE]V;pXt&_2-oIΪ4#sgG{E ɟôfDgFI^8Hۄ  Q9ȹT4iEAGM]njy]zƻ|*E5S#T: >(L_pt}Us(H0.uMRl`!ZR ʐ`ﬓS6|w-Bo7u.eFK=1XIz Jb?gK(kd{\h;a}\??\/0wz8#A6fJMW֫E%/{^L*&:Qb޿Ҁ˭Z^}~cw-:N+WfVRZ, QRI'<_QHhV{+q唞wzAPm|8zـr8i#xOۑ.wy(M2yzxk}֓A 0Vԍ3/lC UUux>XFZy+넞&-:b2)Qs]"_TjvCʵ|4͜MO]kQk=ekȹO9.^^p&Ơ%A€Ruf?@k:xf~&ڿ1#$j>]Z(f,>c נ$~'<;8(;ň[>^#.7$cfcbO>S[:um"׹>Tj.3 *p4 @Ύ1ǀ%n殤 .>z}ÞDZV>)L$z ?YV&tŹ~B'꙯xE8d[?qրZd)qɊ+!4(oIh;ͭ1~97jܬTfmTpԤ= KXP=/sDIV/܁TLI%KZT 0S!޹¬Gkk`hH`dY6>o;8l'BœI nj[[ĿG;6Hi'ֈxNhk{;~ԭҶиFX6pI%+u;HQѮ]) fu>V>-ƪ٩vItjЦ+.9ùzv|iEAXv5Vc([.혩kxz"yNvzka& ,![?ԓcP>&_qkf%z9NN(0n:m~D̋o%!<)0e=P6o!w:Z{ҬA̽-DAL]CU}:>F^p8CҺT~;daQ6uYѐԽFw3Tv r5Zi!wH. KXǞ`=ΟZ꿟VkWz[\O}5w<ʍvr4b-8Y)tI}'2/i)VE1̥.V{= oq^LNHh#$kK`Ix;: \p;zGxtS.7f_IH co V(lijR#m6?UF kW $%;.Lp``uZV$G(͆)G{k q#d#8Qaҝ%;pJ x=_Mhfqdl >WzDf9$a%~paaz@|,v 0y%f / >8BrR5EL P5N;XGi1ΡnS UYr3|FdC+*qXP[ HO]yWw͗m|96;46IE(ᒞ]嫰jjȫ>mǒsP]? EOHMF ?}*MZ9*H Cfm#Hny?2(zY';-퀴f5B""CBBpZ?Æ-AǺۦ;" kTУajye.$0vL;G+5e'QFM\DeFԓCc {E+HfYtNRߓ׮>~.ɄA` *yޚ~µE\Ӌ;a!#V\ xL4g̉B|kL4Q_ƥ G7V/ځ:0¥uٜOό\PIVS-Ip)F,{snER!-Y0}.V>, He8p4P2? dݵhjsv^lw5PE(KjEO4ЂUh2>лbDZp;%}m|v!wi!&U-4 +fpO-:ȫI}RH +Is|mO-dw%5Nmy"I~#&)ZЭ|o"͗!w7g 6){ipYs!v CߴOg 6V=dee{6/ax HQ6f[7ɉy'N1jN?|[Vqm)_)Z[uAC,Ba'QbkN"G!FfQ$0f^[oY*[K%"}1!-fl:{?yGOPOrϠ JY<9%@MMhҸ*R/PG^@1 3>c0 cmmL#J mVM;&imGw;ZzX:96+:8$z( qm5+/DGUPF0fMrb%XH?ʗ-*E.7I3r=\0$նF(|0RsxSWAM)CV,c@)_>_{f8z'A`/ޯ,|ŞnYnl&ojП-B"M ߂jfл= qN[}hr``U4{~f>ݤP3G"-/8Vr#T;c?Nj۩ [:8{u:?j>,Kj,&uR⁏oʬ}ZIqmo$ -݅"'gPQ9"aUҔRא\,ϣ4|>aEId"r]FNM\;{gd#pچ`)ÏaY: 8~tt -\ב}/)J˩]֭|axF"Ĭ;ճ_OowH+;TI:_dl4DJIrcS֚h9t^1:~ Y ?(!ª5;RF$VFQYai",we¹Ү hSF9iEQj6H/ bڏHTWZgGVsǭ][Ƒ#.t̡ՑA dפM7Ỽ1:~-cƮZ6~= AElN\5ԿB/竏M%Hk{=&/D9 (t;a'KTFj!#Z`Jݓ&LGT^APvb>f%"Ǖ3o,6h L[ WZzh݌lX>:L熌jI KvckRs>c9;vڣƈA[-E";bՈ̱R@aFuI]E까I{׈hE#|=A=juU[jFX>YtJVLx#o;Tp߀Kd%~$_\a89t.4=n|Ywa9?i}MNS袯#)dDC\  tY6ʃY3n$#||F'0*"9%9mҳV2}>OQo=7OVEN'c905n^IZ+N2t<U@x ɢFMҘu*ak-'BaXa 4[I͚htz ~MJIjZ K} ̼(IĈ/4*JGuU<3g EЏNit?Q9D9|o =֓%÷KnAw}McbV$xf;%0!c~=cϻ# @gVϖ`&x|pCdЯx0#y*d3hOFJR;P5-ordHm[f[^ c*1J)Dh'8! 1WߢES7'EiT`Lf۰':R@Osg &\{Ցנ u|nTy>P(鄸»qq3z|1ɔu!LaOcIT] ǣ)kݚ"QY`Umn & )|9pl(aRj5C{qڋ ?gi%E[Y6L.?]5CQ;,[Jp}RQfb`9| Ъ郠ǪP$=xqC#J["4ȨT,Lrb/8Ky0[.oA<#qv?!Z&w ВY2, 1^GTY gȬℒu*j?@wQ7HKM,㌓$X ~Lee6IE%0RW5Mûb}:a #Rѥ>֮UkQ$YIӲ0ñ&?$ BS #*"M+w=km[t{yPY-%Q.0>\M375`7Έp[yCRgŐj$5 e>z!I[yb]-zqsHƚd7 oW{$#ɧ:?#XD樨~<5^ڑ:p㥅&. 9X/b@_Z_YkZsޛy@A#&^?IПɀ΋J= 8 ;w%U ?l4٪VmQ,qUu'ݮ"I?o6QMp_vO4C7~ NP}Åo&Zb) "7~ s*|{ᶐ&{IAɴ`I+Y5x!Y\frג.h (Sus\X.'%/gT[h&bGTK 6hR[cX WDJ"$kjhUD# d@\Ir}[4is#a77UҖE^NHi8Fŷǐ`졤Gnm4-՘۪;Od8jkL԰Itm54I z#m,BZ2 WR d^HoQ}J/[󹥇NZܐ ^]5c(*7X0X9(kLkFa")ʼn$?[CQ:4Uǥ K w^^rx|IjqÜ ᳳ%f[tu!osluck>ʭe^@pd̎T~Kί>iy cy 6$H`Qwjp|%u=j8}5| bQ>tGГoPÎ;jwBD ̒!W kܯp\5O(b'n¡M¹˭ <9[p?ɍa[ϒ:_Z' LTxn؋Wo FpBwg&VW;-fiհB&^%0oW.1ؒER$H2!?g/Ԇ?dRl^͡A҃.<6+cN gH MjGQmsH )5&X!IDV@αtd+6v\p_B'}~Pw0S"nف<Fq rz |!Z.\:Ύ ~u;EETy4 Z7}F ^4_\emV*!^UY@Z^mb2yo(M:GgOj;8Mѕk5'm& 5ܒ[]0j%Njnh$]/ѳ3'o흣U'\wٮCuCԻTU@U&]7' W(\,Zp=zϑxR7=R|ft4)={D*6suZ{Rwt*SLzp:֡;3dG?b4cQ]Tٲsn%p$)ri=lJ1/͚liajhLzRhc]tٞt%x5~ԋ^cxÛb1tC!ZNHy]}۹T@ ,d+٧d9ID,H 99S0K;Tc=`SuzsD|C%b0'pX4Ft;fFX8?As2j2I V:X‹~׹đ١\tE1ȃn3ET<ؓ.qr#I oghh,l*Hc7\B%53!Aw'7mKYffVM p> wI[f WmwD^ .|=Y.)kKDPȪEn'h9ݭIThJ ;j0I?R0jTՁP+ZR77Ò=ӪF6[oV_xTd@W>GVZZ$L+9{%V oX3|w&(؃=:,&Z3FvWk 3Rc֐(<^7i"%Ԛ+' 1CASj ْ^`?vPhŭF7}^g2_fE:h)b0t&-C Y-:d(2L h4.H1Zpou!?Nnc!YT{(] _EiCjY!ސPf녓TYgZex l,Ԕ;9gNmɈ8w9c2kBoJvee+!sumbЭ\)]ؙh$Iy#u$on.T4s,*&'@El6/t"ET]; #^u.B.q\3q-~KT"suȍ's~L2x?+aʁ}Zm~^Iv> Ss`wA_]0G$c9&GZ/uR@}5Zv7_ O0W glW+Q O6~ꤷOߖ%^nrCep5?9(&Y-`=Y=L_?Xxgثꂂ])74h5Yu5BTCɉѵN%|_;٪t91[g1-.7:j"5NZq4DWfgȥx&tM!ɲc)-`bC8;־kv!2"AʒA7i(ť|p_sA9_遶bڻ!$)mYVd 9Bd08A(p| Pkdl7`3VN֝>tT3saEґOpNp:Y|&9q9 ȸ><2[00/J2tWn,1-LȻQܯ 4Ym ^cuz%EX^]/P%ǣqt^Knt?&BgMz/$ %zkrɜ%=&ҕujU,8;*.k b|#D |EĎo`tΆtV)DK3CItNĹ}:F9L@C4m8!pKCV\ 05eB. ƍz]D$+ Cʝr#AfXGX 7$c }l [E!X =ؗ"׋WM(iI71uvg݅B["d{-=g>hN1֤uKՀy$n'U6=tkq%KGi#̇6F#䝑4Idn}v#]Wz 8y&DپamZ7j4>76Ɏ"[yjEх-:h C}+|7qˋ~lՋ>V$e);\]l6T5 I5` W\MW98q]MM@RrZd  Te![ŸP1@ϸd Cw"3q?2 λL2 ۘڊU*3VW|븧G+c/>CAFxo-ґ8:KD=r.K#2~r鬲`xKabuI5Ԕ{ȣ ݍtI`9IO|ߎojMOk{ZncơU ]?1#;V 3ݣ->6A˜,c$/LaլvhTlYKINwš N&xr!ʆ{~|ΔTWzB* 4tGO.}Kg#]-ISNH&ڎu8!4bu# ;.\D!Hn^@^ΰILAy@r-4xME_'4d߈>RO+hI (9T Cﮊܷs O&?;`=֧ [olSCJW}vZ3gIiAؾ\:3%90&uTl2`N fGCfE!~C >UVss|2_l>ГFQ~Ji'iɓ^~O '>X$Al%T;Cș'>0 \&ju5qPVʋh :yai,lù =is>đyYZGA؏vΎT~3# [iUkv99HDpdGÖjq?5j eٶ0pɸt);l=8Ru/ 1"z}%{FzHv3/pIUY[j| H~F>;894^/PR(M Tʦ_i!g0-Bvw=&\ =>Et9=g9=UV*˦;2 ahvӊh< R\Uv> )H{f_R2ͽMtm]& v: Y\ Y Y!̉ CFJ%t6:"XQ-K < ӑP]y]ɩ, 2:CRlI IWu;j0BWmzLj*Z晄/8z҄[g8*R1iGS^ڊ,)' |O-=ϓ=4*;(Bk+zWY~4US*)7HF7 1έG 5bL3捭 <m8edxO%dZa?ϝky{786;$RZR/<)irv6չYۛ"u8c>QNH=[$Q7\kl`&gyY];3۸ R"i[T ZM3Km)4 pq.lR%m52nm%^J[r>ȝFv:{jݬ7i'Ц2Vu3N9vLS 7Gi RC\^O4aTL4qF'ty"^Pv{G:hRq 2|"ME:l+.or5,l8b30+u ڿWrl$٨p$cms:zE(;sӵ "ߨP-U k /FdrRiю 1|ZsJI@[')~bQm[9RAf9qc&V#z+<(avbdNT+Mi`A.6~{r@n ْzzŅO]znK ʓ"@`}GJ ]n[kR]8 W;ߥLr7+W(}=5FV|rbL)k];űs QHM'uhhSxu$NfcIE/x]{HysaɽL]K5nM4Q&xk:#Uz_ALF\mTF4&'NM/ˎ>↔oDQp^` Б7{/z vYFfټ9{k yQˎU~W2f_ VMfoNjH{w*!DY}Sj3!VU+H174zKm& w7o&i_X9,%qX+wwK7OeYv~=c(o>@[Hc/ȟVrw㩴=dDr0/~kmd .טMZK ^ITӭ֪zDo +ڂYgHd{݃L"fqD*H^R y6,/Sl3 2@ ^;a^lpKgD!Astgl'#04 s ƤV -6+h%yO#g?-2HKç3˥7 [xr5,dBkKŎ$I$bltkPM.N=)#G2sW:4ŐLW2Eo%vDOУ[r62H ̣r [M-)מ/V(Oi1B1Ym 6k1M}4U9~5zUk.5X#)sYO}%QD|.p,E(SE%$O.I`h)=>ο띗9z#r'nV2Y yWY3[5-LÔlHA ke:Z3x}uFIyW8}.O\cLa5I!YA2BV}',ߣ4սlٴ/iI+m~c(yGKh֮P.a|x#ΖPBx4X!ͪٽsy*hn>!,lGDz%L`_(oQlB{(:VK=zt,*hpg!ܬ<ؒDXip8R#kumEjgΥSžx^pfn5=ֶ&Y/ 0u2_9GyL % :GK`4cLz}I5'&LsBubogȨl^ZK]UUNդFx^ }+ }#*:>BKprvd8n՛t$뤈kjuHwFUuA W(\“q7PN?tq8QqE^0D}q:*/?̯fSQx4VԣSAe&wr%?+K"$AQ5 +w!_ K4HJu0%-#ш:ʛϽ2UZ+%Em/Nl<hJBkߨI7-j?(+j}~= cOIN;\oy D5^\1.rQ(;^ IW!8^j ofϺcHqmȎ9HZ&99-d/xHZ{̥M_Njs,j o=,JKǮ4x$lfu%^>&U%¬C+(@N&q qsΠˑh\ԕө5w#6u|(NGKXx8ҳ.<T3jΛ4ϡjT\f6pr61^7^E[=p 4 ԿA _^\Fpa#p܈)yoGC .7]雞~L2F}+?8&<5gY=1=%ljF&xYs\grYyCl1n iZq&L<; kECNIކHg`䏌4x.p3JMǫyƔ2c4=Ԥ%aX+Ԧ)xRiZzIhbz06ʤ _sP~&Z;O+u-]%=O"ڂץ c:YYFNy5l~)`]%\I'(| 126e}7PhvdOBp=~ڣ1t'iU(P%%i(j~ a>̀WOQ1_qyr< +MF'tK6k7ϡl"$_Iig_T.VS~s4CJnFX ƖS\SSfgA쭐uǔ2Hi}^j#>gq!͌Of åUzt|mrP)쮠+'ED>G tDsMa/MXYA8V<"4vUiXly;ؔ]떞!O#cha=CZϱ;2j^@J3CZI*^hBY.-'KMknoYK4_9.@bT:) 6QǓO޻x"3W.QW(~dFUՓ\wQF(P7nG"-kq87<D[2a/H66>- 38'ىB.ooJ'ɈդȹȳK~ iV'?f_jwGc=R !Ib2$ ';qW jҨ Enɒ̣qbG>]W0yRBBSJn0.Ȕh.ǔ]b\X/It$iλKZ 4SÒx{G{z\B_1\nꅺ)G7w(n얤77Ra6Rc 93')b/Zs=g+N^]^ҺPÝ)b}ggmoIF!UҀ\H-V/(a&^ֻd-.Ip}<4K:ܡ, '.gCgt!rh3gGU +Z+ml;V6&r8kDTwRixFoaNEBcR_ȐrAf T:= pRt9Y #f'0ۅ@8 Nr+Hs`bpw Dޡ,hĔҤ^L89Ef]\5Ľhz.I> ԟpAxD$Vo{;;7 +_)˒Fޒ2Ïޅ!~hNWFRg{5]~ y?zwHW)JJJ^I'?|X=Aѻ(`6D/  N\#[LU^n=߬$Y} Rw9ݎ ']TQ}V4DM"^JU#ޣTYI+9Oi1d 9k6'`j< e0LQ!V4ߏTw?m /GUB`otdn$W+GJIcex 2\z:vڟ\uZ|D`6AZXE.X$D}}!u7dǰH[o{ώwU{1hiHJ_a:3n_Jl& pMi /я:Jޣ; d8"Rrr QMq/='C:GKȕXu;/x dxL]^3H̤(v AH[|~)Y@'h ֎BN# 4i&w~WfY3'6#َGL5>Σ^9}n%>zpW XqZIM>sŷiB~г#9@1!+ ǔ bۿ8AU/%<ƜXu5(E{m{`oYĜRP>!g0Il]'' QZjO+/_nhtYkW^}aW@K}9I* |R>Nd88ҪzzQjc){vfJhʼ6AzDXZJn;g%2G<70eQC/Z,?LVtݡjPra܀Jҩ!wg 6L JXàMH&ySY9ݒ*jD_##vrN8V+0:Oǐ[J _Jn0ZiCY.M|u/. @_E My@ХF6a>TtUG2l-wOO9|W: }L/`\Е_Pcv4 |hKZ uI^xc>F(]IB=2zV7GsGs5f՞EK[6YLqk@$ZS:Bᒂw3F>OtbT`tU+/qNfx[\q5)I{{޶rq*WV /׊7gdu.4̵YtQc}R6%m#-|p7"5x琸D^tskA?vLQC"5RXZ T6#FÓѯCPI^TYfDӟՑe^ۦE_dq@8c:6$!rD.fU;"BZtCwwYq_<`7Jm!+¸y'wlȺSf[nFŔᥰ=RKqFaH:I;"%R&mw\rQ)i, %DR G(-= Ӝ4%R+K}`ZUDYۺ!W^:Sba}&/w~0$qh MrTo<ՌFrb"_^Zt ~-/* &BzQ›Efqn̓n~)s^LDҙu頽3u+*- JdSI]'|qa.~E-o(-Ĭ4qfOh Z5ju';fNpßH7˺wIM `+Xz>e$9[mU$6G+.pYӒۂ+ OGv^\N"99ȴC'\8!ǠK95HDMcI$mJ%Kfj(Omm)CC 0>slzvٶ*Ŵ _X `[zALPgףEhO{?[NcJIj&0[+'bXXM,a\^ J2&^ڐN OW=`1%. .-fCo~sVK-Couy><+zd v0TC w:֨# t0YJj oQ2ۭ}:C) +OY,.|)fR@m8 p zߕdi&p!]I +;/%勳,) jH H*gW*)s*tkkqrQ9?r!:BM2wnY B~?1GPn[Aj4 {&hͳScv"7X u rozOrzipb*z1b->:?\E[V~lGj\oٯP4#5 $;tNSpDO73l4Ԩ&,JW$0HO0O.'l; 3%99>ʊMJkeӊ RqǍX,*28uNͺ^?hMv@;GvifWَ |/ўd;I)33u'V0% Y!{m:)Ɣ=Τ lRckx,{=Z t 0m%L7#D9tO}C}:F:7{bv#miBhF15!.m ZYUd7(4 W.6d$ U.ᏜYY|VbFqe@5]&gjQh'?yϏQRW=T>$=ZqwA7 ov  fvM"uf _ߋ iYlQz;M#*)CAC8ĸLdeV@.X YEXl3('sd߮v`ty'Abn g: Ƿ+|~\ɔF4'`G4P1UAR9٥@| PەJ|X^#qFL#qFW~:L# 2_` hY~g?Gz -pngBS]彅g4㖖h>+R%} ےw|b+R-mdQZAIYA*aԁ [p~??t9ÂSb$7ļ:n"r5IK.