#!/usr/bin/env bash # # Copyright (C) 2011-2019 Intel Corporation. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # * Neither the name of Intel Corporation nor the names of its # contributors may be used to endorse or promote products derived # from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # set -e PKG_NAME="Intel SGX Driver" if test $(id -u) -ne 0; then echo "Root privilege is required to install $PKG_NAME." exit 4 fi # Check if dkms is installed. dkms --version &> /dev/null || { echo "Package dkms is required. Try to install dkms first." exit 4 } # Check if the kernel module is in use. /sbin/modinfo intel_sgx &> /dev/null && { /sbin/modprobe -r intel_sgx || { echo "$PKG_NAME can't be reinstalled because the kernel module is in use." exit 4 } } DRIVER_INSTALL_PATH=/opt/intel/sgxdriver [[ -x $DRIVER_INSTALL_PATH/uninstall.sh ]] && $DRIVER_INSTALL_PATH/uninstall.sh &> /dev/null PATH=/usr/bin:/bin umask 022 DRIVERPKG=`mktemp -t sgx-driver-pkg.XXXXXX` DRIVER_TEMP_FOLDER=`mktemp -d sgx-driver-XXXXXX -p /tmp` trap "rm -fr $DRIVERPKG $DRIVER_TEMP_FOLDER 2>/dev/null; /bin/sed -i '/^intel_sgx$/d' /etc/modules; exit 3" HUP INT QUIT TERM EXIT # The number of lines in this script (plus 1). Using this number to # calculate the start address of the payload. NR_SCRIPT_LINES=118 # Run /usr/bin/md5sum on the binary payload to get the MD5 check sum. CHKSUM=7f88136f2b1b95ed7504d2c02da2db8f # Get the install payload from this shell script. echo -n "Unpacking $PKG_NAME ..." tail -n +$NR_SCRIPT_LINES "$0" > $DRIVERPKG echo " done." echo -n "Verifying the integrity of the install package ..." if test $(md5sum $DRIVERPKG | awk '{print $1}') != $CHKSUM; then echo " The install package appears to be corrupted." exit 1 fi echo " done." echo "Installing $PKG_NAME ..." tar zxf $DRIVERPKG -C $DRIVER_TEMP_FOLDER >/dev/null 2>&1 retcode=$? # Save the return code # Clean-up the temporary tarball. rm -f $DRIVERPKG 2>/dev/null if test $retcode -ne 0; then echo " failed." exit 2 fi pushd $DRIVER_TEMP_FOLDER if [ ! -f package/dkms.conf ]; then echo "File dkms.conf does not exist." exit 1 fi source scripts/installConfig make install popd ${SGX_PACKAGES_PATH}/${DRIVER_PKG_NAME}/scripts/install.sh rm -fr ${DRIVER_TEMP_FOLDER} trap - EXIT exit 0 ;ksFJY:Z>%YYQ*I8u(P0".$߾=|ȏ䜪3T%3==~}O)+^mEwv{ߵ;헝Xk] z c߉}! oRVkl403JzyxiGMM@Kea i^-yQ0b"^$>06az~E HfqNB3/lΓY<`$ Ioq@3q8H6k"5'M~,X0z@+;R2!$Eq`Sh{D gALXHF0,C L DR/SZ COf^ʓЛIaЩXF#țqlÌ%#LB lHq"vѐ(V643),cTX&-#IMBYs/A󊤡 !Y,Ιi3{x,^]ˎBe9lʹAZeef ui̸Ymg:oi4:3zo5u(`7tuxs ag=yK3g;ZGc#rL},6[m0dkzO3F ̸0ϴ^oW@3|30,d*;6Ngdj״ Aw:H=2tnA&pYo muv V?)P>>Ƕc:c`a$nօ! m6h49 mgò#j7 S]p C-"FY͙J$(l`F$r Ӟyj ti5Pi#IS)cbNVNje Ӻ&lS N?SP.?]~S #өG\cK7ZGsϿy-sY[.,4jװ0Z+ZWWj }r9o1QV.k,g:ȖƟF)m|rYXWjf&y/1۞ᵞCk]LX|"5u:@ܽl od5zfm5XX2T}-IŪW k`,ghp6fGܾ n^AO1$a?2,M)|*x|[Ebxq.(m$"smGcfא~3VC"f0Z" y]sX})f@IĽ|C,`i-3ћ.+l!XC3X8Q5&Eq84L՞ݴjQ SZV{ a.0-rWYϚlb U͝? H›p =Ap;c>{H!wZ&(sly*~R>=G9k?RT> u &iɕגQ,JYQG.*e\i4$?0hճ&G+0ve_Weg}h[jF}v 8R;)Y_oۻօ J]b7.9 BÔ*?ʠh^9 y_ט/6o?\k |JzyF,~3/.HakB vybJo.V+j T mT7ǖBSn7*P- ۤp؝$< ir@*'wUEi@ Bci`:tN{ 7 o8Fkm}V~ @~ 4~0]b֗S#>T#'eCGaz\& !dpfCbin@뛺7C í#Vɔ*)S}~1uȭ)\$ׂK$,]VV !]?'G+Lz.Wq|xGW'-vzZ 2ʹWS-`}eanyWS%bGƅ 0Wy8>](.918zN,=j9U'שd IRБX(p5u U UbDwOӸteX}etݾf>]*`5lodXq.qI25DZ6Dy>}ikR}n<M|$ta]JC>4a?VbtXsxīKGo-0W:W7 2*ĻҽV1Nh cr jt|XkȖ[[_/ow[rŷ߿₂pmg1-w;U%r%,2yC1m`B SNMƺ#ڠn._Lċi@1 "a e$<~BYYjK>s0紝\V[I9E76YD~'aσ_ԾpcC Pk;o n (&Nnl%qB/O&b^RYm+X羹j)(Hxl:vM*rE5qW=ݩӑ%Y*u@݅%T`StNR- M2rIZbm֍ツP[ oY/<5Ww):Kz=> ɖ7Xh`fwuD>-e4k##%<wZnI@9^b6X[*o@N\y. ?!s/? % -ҷ*o)$Z>`~0Oě߀oB+-=2ff~ǼEz'OrY-EZ0n2mhUg]\ww;"=bDrr,qKUW:8{8k;J,/T=kTq - >#yOޫ@ \<ý^:2@D i҅uXCxKx 8E`a Rǜ*WwՖ% ϴ 5n2Ƴ0'#ӅC C\pP2OmohC!pȲkP|u1|Hp*‰$.d(V a*cV)9d^M{  AT}ћ9y. Ad]姺 _Ȣ lHwxX8"#j}ܡa8<\!3i,N<XgX%j1෾T:U͸'8-CsMnU;_4YYq˿J_敂)fE5v`rmBUs@mVXN45^!uqyN uZ؀{قtt;pB19&T"^0g>`]OyC|> La4 2p!ոuJDc9 B2)~T.7dlܨ`[$"Ԧ͸@2@)~{w[tK)97 izG6zU (J"-wA$$1@dpHYTH@"]V=w_.rWrCfFlK1lj3G:ZC(n$1(KU)5}esae? BiCc^FbӴך_Tۣi91χg~pF{azMenS2BfwVшg>SDOY}^8@F \|vkF0LO@*JFmnB\֝\Xǫ[jGйYft}iU:7fd@,2X2.'M$ GB'q*5_*yR̓+Q+\SC_cHơC.vn6:=q%TG6q}չv{ d5 WhT־r?2';ֻ/h6ܝm3%%ʶF!DԕsHvdHbqeKzɡwC0 uisG{@QYEMjlho :0+?0.Alrwh2./jb>yԱЛzn;!ⰦpsB%Y~ 9Ja :y}ze-ZH8}7~Wc5bęMQGaq3}Me~}E0g}do]"o.$ YMbzRȨhD2*3I槍O8)c)4]ų;9a|ᱷ4L+0c]>'aM~z6(eO }9;Wvo?Ou%7PgzX!5Hh2p,JbS/BXAX!%%xٍL7 +CZ-exS΅UNm6Zx^U'I{UrSFG"+m,|a}O1_$~Vj@r=*1R=# `Л˚*׈h1I,ڄTGŀc~Fsdc.0F 4LrBѢGםԱDL-%0N|$#zL4tQwfOf4C/6 :)믊?{ ,r; }IEg7=;TTo4HNe T=0ut.tηEvrc{w<'@h+9,%i,^Ewy'egW{¿y %rv2tI[ )HC4-NJ4*q^[w+ SZmQ@?ldo}"VY8j mGhr8+PWlo~|:m]pF?U"E5'ސQpV*~B:CT 0*-gj_SwX,)]}DT&zm<Uif7:Dw|"dЩ2Wf*g>bWm%x v8#Aˏ#w4 4C1Y< sjVUsTʉrSUx%' F+,nA9X`6mф)"µOdSP A&O]= ôT!迎xX7 (Pp><=|(NoF#C/pXm;OqjtB\G1||65'̱U18jG 8''Wx>V(ev&q5t8P(QS x`p!-O ۀ"dDi&] Z!әhT:Gp UU}3b7m;cב\̽Њ%F@l&֜BU/ /\&Ɠ, :.GdƠ+(Oŭ$C>$EP%(݌nGC][RxHW_U[D`֭Wh5ͧFs %/Jjm45}J{[{@4umu (%C-<S Uko(C*z! &'_qxq!KT[I'WU7aUJ&dmNZh c)gՋf<\Q>45:ho[3*\z~>lLΘG_Ola O IXofTtQFDHShQAΡ#1ǕwIih4mTXyc ߺ֫7*a !y8},6P{g<rS a p;'}dl?">1V$m̠P]Ʃjٶ&p蟪U UFcVN4)83}*cyz-cލ.O^YNe&´^&gI9 #!Rx 9 IڋUouB5Fyp8 ɤ\߭\,TZfe߽)[֤@IPO8\iB^J0^%ULex?VrY4BÒPzPZO?K|BϑEQE`-Y} +W*,G/0TWQU"W5u ^H5pyMZ_*8U^4(\~e/.@bv:n܎:uf]9!S*o}siЛEc* CL٪Gxl@ ,/sU 赢cYwbOz*gK"0[XAJÀ7A$W+b#wFgߺ ojCQ+\P1l$3JrӻAEɌmaW{nmхCcCnKF8,{ĬlY8DE@T / K((,YICyh%' ԡ}3fCvz) F>"b 5&.O R2i(1lvđs"2ڨs%:3b(lܧ@Vhkl3Vyk͝j?݋A 8R6Z+"6f iZm۬9"-1|&u-R '+PzBl"Gf`6f%o+|sgE.hvwroόC M?.InVw\Yzy.cZUzn1UӶU'\2Y02U7JtĤԝ3*TyIވǎkJяoqрZf'j^abKKVҏaH#kʔ5S/}7e !w89)ۄ60otTjad7{{D/Z3uBx +cqq؃?2n33#jD)t\vXxV3JHXAݱA`&x)GW_ \z^&/$hȥ X5:_|5KD|Ơt4 r璦cik0Fz^֫AF:GIĝP1}=Ar 4`VN 0>Ɖ_\22Ʌ7ׄ CC3-Oc':w8DMɘے+^]9u&͂!!.#\H" w I֢WjClpK-=> )=E6W Y$κܳ4/Ƭr@>KrGL!e /#AF⯚M{^*F'S*~ ?ZJ΍J?|kVzh~JI6e߬o#`R²Ӈ6jisc]LKOsd[::紴Ƴ%ZJZɖ6}[N~][J7/a r?j¨aK%{_76OW?ou31r_tЎ{Wp⏓? %som<9C΁"9pT|I{`x BXT Fb?0Gg^V$cBmuH 4IW ZF2ٻ]tu酑e Q@"c314(rPפ/ ͋{MV5Γ AD愳;C+lAˣۣRzTtߡ_Dw݀&_r"y&jL[}s)k@RbEW` fa+reƾU+G >NyDsXzVM,y˙kv|FsWzD唳S+J= THO/8v[GV1T/I{E)4SzXND)V KՔ//od3qҥ )<v7jS=F:܉fJۨ6Z-gz`?9NĉJl[g{ݵBw'VI>pѩ$ )ytwأ>SQM ?oYLw&/9=l7F)\*t ONbm=WЂL@uI˥7]D4c^y=wgӛgpB:9*RZ+)l` .`on 9Ә#PGⱭ;?"߰ȿ قC7قm=y .yc KGIwZĀuVM2^15O4#m1O,7!׉>|ȭ~=(UwTJ([o7RSkNg (S a׊^M$|Hmk @ P>^t|b:D l89NH;LX4S"+EIΘv2}Kߝ*> ksFQ4x gv1*x*W7:Dn8) f YAe 5YN ֵv3rÇHbO :Ɨ2c#Qrb5RVOhBw> c:v6,g$:~IAkB'R*q2\pj: #$P Bz`5tm@^^t_LSa\dM@vih>2 dQ:#3Ft-T\,wҖi-FZR~~^Fe|\EZJM5ܡKj0T]?<_tQsIe%z b<זVkǷfD?K~uZW_Pm43@sD9I>2=8ҳnA!(qq! :Р" aWgO"c+C_>ҷU- %t@Jq~3+zf3)23)h,%~hP*RGqbULā-Mh (Qu2,Q_鯅%ݣ+(S-&\ m$1E Qp0s::\C1Ұ,Ivi aorS eI;;\];kmaG=qOL4'-\\)¦]SAvH¯wA߇~D_<=jCgi\f?ϒJcOv:pdF|xu58zY(*;cd,#3 þCd7!e80:9Ҵoj" ~80m! iPTSZ}֢އ5#Cn$ޒz%חpCo~k`re7N0NzД(s;<õKI3NfԔ9!t)B:iP5Vt? Je5esJY@s(y>iͨw9RzxS,I@bI*R,wQ(knX[M\=YC˷AS9j g^O+mԶ6` Gi&C97|x^dBcCX >*ٱީ0Ը(!&LCnj%l9hJhIe<"wjΓQӸȕLӸ5O=u9so_ iJwNv~D6뉁CR3nQ_* vvjB^k?uTg9~h +dG>Asz Hƣ%w5sOwuDP/D*QNkBL $)i'fsv|]sb V@r 5 C& ͷlQW^$_52=qQߐNh{IAORI,GJy=-@g ĶD q{!4_U@F* (y/ дѴPTbEAłьo]I !L('{I7qo.6iOSEJö*D.yR``Lwԋ.2 mq]+ YZáb`X{q2OZgV˶A(d BVUNgoh5fsҮ~!7s\Q^tyrU_6:P]15GGyf}G]Z\rE'c M2L-rp<[aU 5tpҝJeo"]GmP#Q7v ϊHݴ\v'mK#V?UB~w.k}R9{)ʴYjO\m+ tż.>G%yN? ōMj.5 vp} Pxwiw -="RNHYKMtDU!圮{!O}LPx21\@ npcJ'{evaL: &J*p ?Z֑_k0f}z%tcG峵8uq"Cm*ibMuzltS SO W\tT^h9Ό=Od"Τ8gkaHcjq>lO4VЅ C-xN EXh"3Pm.ǸMg7g&3<`%BȋߥJ` iNwPE*8x"P18?|1ϣ`T//=ƅ+uKSs&喗ҡ(wI}^O#Ьgx/x(W Rsy0+yTٗ;DݔdIMo s" C%& ;=!CB0B*pnq`w{7"fRL&I`!|8 Chx ^~ b !d&ipcs¿gJ8^Z#$gEC8EkB`*rJ1냷u=[T<7n91x#%f2sx K>+9$F]BLAPu4ؤwD$ D#ͭ)B:{D1,>Mh9KÜ^χS0 K֕&bck餮)8L+1r̗u,Kc5 }g>/^@8>4BgWӴOB <V^-fc*y+-[XsE6ENh,X&ɛz}p>c7TɷrKbm>3!Rߪ:ILtb?w_xrw N2$LwZPM<-XJBpp|,JA~Lfr.РaMw)ʩ}kݵG4 Ģ;lLw_=-&i_ͮg{׶on7lLZq8j>&bxӣJbRh01P{/1Yp7^:b3f:,kR2p!ܞJ<+=TS$4s71^ w! jqw`hxend;IНdTwTb.lrT(vM;ZqHlBJLKN5BU'n<'b6FO07j<=(`ކ7WCjpjQ joՏ:FG{ͣW:h6;Ps\)bKuh̓fuesm :ͽӃzKNۍ"kTLP344:~p'eEYq`Vc` ǵO{MéU\gS(?!mN iqa&ڧ/ڝfӼ:>ާn7Zo4_FZ+;TN8m7iښGNO:u|}XWi~h0CǭwX)MupBi8mS ۆ 8cTGWW 57XfQVV: Ag+E\I|om) nN){-]4h&򠄣.%cBC& s>0@i&s٫S .!%PRB2%MUBt ݂`pP_*H&65@\'` ATy+I'ݮO!8-fYRLum'v;K?9%>}F9%! ՘DdNwJ7ʅanW4-fY]cb4}sīnɌT,gIH0*0A{$,jnmo>xkwϟo[ MbrxxKR\Pr[j<_!sSnѸ7R tG an2} +I@}/Лeq(_x~ A;"g˦(ZԇK'"Zf(n}h:wJ i^t̓WRFWϢ$ ',cF(TV"L{j=zvzivy3Œh3^kh7`Vg~1d>J@rW͎v[@Uv99^zIjӼDlgf3_K,Nqyԉzi zŎ<.6_j~/)r/It,SgyG3VӐIs&ꙠL/v HIUESGaO_JΔ%v 6. ɝ> %"q48&t RMC/,@qanY2MPE+ut6]QI&jȜ17FtRb˶Cxs/u Ż:=*&vɆ5%Z׮H$ }H--(3"*0q |Psy &SNmYd^=⁻{JNCp1`Fq)1 l^qEfs1ݸ_Rz? A {m #|0Ī -;9/n9̗kdCKCB?0 VX+3;ƾN|-1BBD!Ug_ {}&r.\vu.9p>4b!HD8> s<+'IGe` "\岒GT{yIrl>ZF٦q7gn{31tN(L4^aKYP'[|K!3|?r9Cx}.QR C8{b C"dM2:Op!Ll̳ i./uyց.&:{c9g"󐕝L h#mܹS"=o\]? $ =E x:1qL m&NRBŖ(?@?#KJ4D\:mz6Yw%;)5gdϗ3br $p%-Y7oljjnXIj'3`©玑D!p1@3}cI(2:} '[x[ح]&!(F1jଂ",ZhG_[qe wy+/ IFxmW{|hGLe/1қ9[6a\H¬IݗIlxs+-D>Kiyet;ջ"m-֖Q]⓳xfT;<ex %-v*Gh= \זbvJDS]jy#FY @xz_& ,Z!Jx$Ah/  BEQ1o>@Olo0yc=:WLJazʎ0Ö(* s# x1 z!'؞>bEI$Hwַ* vT##K¨-4ToOgs;.7u &uOq LPP$rAvRy߽fhacɒi&KN \*–4 SfiZZ_YpEc@e e_ ճ}=C6d${(+ҘjT(fU}9>ٔD?X \6Of4s7^i+/Y*Ҝ4UvfXDF/O$8>9~4t̝N4Z|K%$Utoq!yYcY&e1CoO"K5t$-9౏d"GF, /@*Ψ^Lt*W 3JFMb:WѺ0W=4f/SA 8M'~t:iZQm36,Y>2 &`X FS;C=R2lFٓ8cJ(QoW^U5zkoͰhXe8:b>܎(ҟAIMV*NN Z%/."$YK?](sF-H|įCETא$ɕb!,WUC9ރ UqW%ܘWV'hx:,e3Z磑VX ޢc 2b%Bt:'x< /94$`Ź{C6u-l3 Hm:8Q* Tp<'_-NikNE~`Zk6 Zew2DLySQӽ Lf,Wo?NtEݓoRW0Bq2^Yvy5uVX鼯ߜ=\5@U$P,Y(]Uv y,눴sDʕ {]<Ž]t'Gl@ˎF^U V=&ShRumOݔDJu^>0+H2/W.`<aggcq _7] 6V 73pv>=|0?DگF{ay/Qep_ik;Cn~ۺe}ONCˉ}$$)\ 攊V?Wzw9"[o;K5q6 ;rT˸GXi>FY$8G#0҅4}^TQ+pڴ)ѼiδCh^{¶a>~J9ܷBȲ\O(mi2ؤ{c`Իzv؁ as}j"lA} X#xsz.:h$Iv '8YNK\5m4'ZGK?i p |m7p26&<֯+h} Mq:am77г_nW?Y0۳1wTU8r;}G)\hY[P;ᤛ؊uHY%6%ޮ~;}L^q^1K$,蠣`y&9tEg/X#_xdNF,Jbj6حأ!obi%Kr}aNYwa])TaM|t(FFF^$FlfAIhmމV [oџ JShkwZ{dr+hYަ񱿻^lhTܰ>hk8jlH*4W}`ƉH$$L·Ev) cRr^:h OJi=!VFF Ahus}㈕yK^RѾMT.'cthE#aAx5012r-1'pu,9t&.#T(*\8 dF*~ tl:1闬vx";b$&g:nË{7}.,tv*n7|fS "|]ofjSvY-e_c.3`Tvwl8.y@0ֶ?&nU8N&Ytyz;7` :QT~#IOY5:sdo(OWs5ixqTӮ*':-7DVuWgf0MRxٽa?:&USMiI ^`ѭMT=rz$͞8Kބi=m'aS r-8s*7'{jlǡGǴ{nA}&5?_[7ַ7#+_;?ʀSy;Ӈ܈q4"u}^I!I-d=kNØLÙ-jټڒvԊRY@N0|ۅBavQ ĥn{~Rz淃|9 _7_ֿno!KL6E6%dMvX&a)% c"`gc}c)l=nki7@B=GJ>(Ч]ʿj#$s­5w9]ڑFms? ֗H"u8wTïԈl"%vB>!As6HP+uJMkvjLxl?lC:< 97=bEu2[8O]1Ah{M"RNvgl:u eSp8<~P9&0v3.QMc\gz3ԢaQ$?G[g-ƈ1N?}?{iױL" wI{9F pE<DJݫO(CpдPb} Җ0lKAG*)=]Gq?w LgVylNI~w1ՎC뻷KLn$ɪ*-`^kKi uZ&HW7UT=TƖ^u Q6AsWv(7&Mu͂ םW>?0fiQ/qɏA4{HȾ3bs2dL)_aGsܧ1e8(?h;7zikxe/G r*e#jQ2eJ0! jK%8F,jĸ /^yńlgX΀dvNt H,vpץ{$? 93l]Ruvx" [2X@b s4o bcNr*I *ڞy() F'.7u^Op]]k]NWXOvLJ˝TyN+PvA]Aä,/N@v"ߥ&c\Cx^ݏ,Q"a)M1ݠw۩ cKCehYMkcKѶ*«p2.`S--\ouҰXdkGc"oKݝ<}]Ð.I4|^eD"8t$Wޏ(z{HmRBWؽ[OB49}tRmL|p2=3<+krBT,G+~(x6uaX4"\"#ܮ)9W+6yĿ@kwAt}6h7BfB#^Д')iwãcG-p7܍[Q򝍳d*ZqE| ?-:rKoFi#net\8 G@EVm&fGxxtD. 4H!8 S,Peƚs; nf.hu{gRF87RwZ4u4BΛ㼣Éj#LxFPN\MW %$7d? `Ywr! 05(B$XGۡ*b3az*%,ɷ!ul:ZQ>Qݘ;p:UoLؤ-ˠ]tŚJ`6Y,U9QXC{DAJ UӐl9X"UG9xc\K5fVG֥8A!vAK!n L`P54sACِړ(ǁtN\5.̸G`l]FTuE7xň|j8ߚBF|~:AK$(RK@tgM٩n " ]$qO`]&&AMM\itk/ͣWƳc_Y]D ]e2ij:9vŞGwd_Qb",:0*Z1 ;aqRNTxqGˤh p`zbYۭ븀`} L7OD٦=n0k ]*tGC^W}buA!eyhCXJ.n!$>}$^5v"5n =04 | _R9"D\Q拁+y+ }{h3[ ZL_'i"!6}Z١+r j^u£IB@YTҧ,㴄"a|?vN1pY3E&}`Tsߝ?f$K(+ʊ>wgn".UJ4hў?һX {3`<%21aOP[/vxK #G"gHqMu- /z27!x3x:Fk1 |J}Ն?/QS `K' 9w*I1AtorC7"ttˢ5@lkO;c+icn:gt/TB˹/$LmE?h F7t[㝾h]w1u<%_엓 pkr|0H e&.h%h.PIÍ<٩e?325@z+S}&ԪeWBƑHݥ-xz|6 rtwy] 25@A+[x^!~ް53^ӝ ՂoT]b dfR^v"Q#M:qز?ILz(Z#0HUw?4L'Z+Glݜ8URަ$˞LcA[xG*/.isI#uc\,gb:\iU }[f_h Qx/^|#; r4u8]^?^>|]k0!F N^ ǘM{=1NI;F^"0:,yѝ*dNO'p l K+dW  m8Beltiz4|>3:tGj =.A52R0H .:aJ|8݋x:Srw00dZUThjv`mQjYٱIn!g,R> k˘ ٢b&P5Cg*<-&^ Tj,984F\Ĵb|.zVԺU|EAG#su'A}-oF=ը ٤_X/$)̌nYtBNAe-@B=WV@$?wD>D&EOu4Xb+"ӎ>/#VQx:HJ)3ZBtMqY㭠Jߏ2p+7Jڅ;d#Dd>\G {9SŮhvmq , Te}zu9ZD3;BeyeпRD ZDSĒO@Q/Tja>㣽3rq &NQP⸫ ΈVs*"Y |N SМ¯解Ϳ㻶,|&ϩ wAa5t9uOt:Oo_§>K(4M(g[(AӕL_%> h<e6Fil{- jJzrL*B|@Y_MI 3OrV̰<:ԇUjΦhNL&lǏ ;YQ\Xu=srHBZZu*?ܨ>^wpՄ;`p̩[D LaUAW +Q\@V%R:,֠طBR(ڝ=Lң77T\WTx tE]N5 ,҃[;,oQ.~jxW~1;uzuu? \X=/v*UǞFpXɎ,AMXEv/(++33A3V:\W?/\Q#/d3*6kKLPih̬ 9Ěj/Rͬ9{&G AG(w+t!'"#A9J?ѱ܇8#u'Neou>^osDzՇ'NW,$"Bt0w_z}|H7 oWZq8oHHS+Y,V C 9]6Tk gA3Drێ"4զM)X)$-Id3? wm`/)W~ l5OaEC+W+iWSt8Vac,K9ٝ?P{Uٵ)`>3H^1Gby7"ɵS<.ӯ7# 0㥞ojtiG B766S+sY ^?wŀiJ|hp4g̸{>xg()pn vї0HAR,?=y Pyu[ɵk%9+])z^*_Wn]x="~Hka&uw6? w 6x܁ςbLsCdA \ꌖ-g:q+"15 8t3+FLLqj 1׳BڽJƜRXX\"eJ}އ))evJn\ci6\쨕 m|YJ`?˶҃>@AhcARYڼzϠ3r-l&[Lz#-|çfNG0atѱXLG30O``} 86Lu>X!;1a-Sl(<i /O\' gq܅,0rM8FU)zòxr%aݐ1%#D`_Aׯ1%-&:opYu JvvosYY?Ũ+M}w_tM3boLv & 7c?ُfJ UC)^욄bM(E=ML~5ұXV7&XU3r-hosKk$MH3W )9y:sv^xHygN$v;sªpe?!uMINR6YI|iLPn8߆΁շϛ{$ڠ-f ߖkvYQ)LCeP9>Z[j׽b{֌*nx$NZows[d:Q: 7I}ޛKe>+XsPO{;a1\ f3v[jcuYDm\MJ KY)N#iH/Zh20W]£N=TxgyNO.B";)Bv»|v)*Z@l+|AMzVh߰ 2ζZvuYvntu˜[gw V˼?ceZy)=[-\16\X!"|Of"?$iU@;4]w}Gh병Ef^D1ΰk I|9ֹ!vd :]0c{'ߩJY`99{RTDegq[9%ȿ Gʃ G W7SC׸чaٲhu-4b$>֫5-Xۏ*ͧ ?MOOgOy1RUq@TZ 5--;iBZ(t^T%sH =:SZJsk!Qd&Ϧxe2wHLNrRU!ѓ^h@_%=\!;!mK\QU$8x1"$͊k!^vC؇-H|NdlxHb`rݷ '3萞r&p0~ DnTx: )")nW0I©Cwn cHQG Ue$o9N0{o`7[WEr2䉌;!n*Ŀ@}o'!`޻]?)֬j(&`keeRR%IL*!'Cp~E-(ަc;.Y0 'q3sѕ0ZRq~]=Rє ɃנmGNi=@@Ə5Fvm%zkOG#LQAy܍pVI>N2v: ,DC%B'3)29~$bJ]9o&`SL sPNl,)R]LG'w䠫V E@QB+ڣsjyŽ·,[rȕI!Sd N_칠T#LHq1ݡk@hMBBʼnN"X˅4%lY,:QGbg;L8J+dN/!ԿA4`9喜솣9m d_ %Q +?^8=4 )@ST"ӮxGQj-@`IXX+tBu'ǒm.] FIξP$)o:q>fa̧B˥o_p ΧO_,,8ۉ.">7mL5H{ؙ虄|-EpFCi!C;\Qa@ I!XPpc"NXZ*މeE2 z 'NQl&oqw5kjOpV§ wlWA)'m SC2"Mǽl!pȇV#L ̥ZFUAW4XÇ 0@Y2h02qm}xD& @H/h@C"AZ~*]fxgu9)d~ll(}(:&~/V9VjN/N:lA?cBgsGZNc r#4Cdϙ~2eAu`lh92 B~r@5h*S2s.JURyH .qD.I"T%"HutVI9,h8;IY]Ab7[1KJX+uppcqc@d\}8=gq`nn DNbfRm\+)pPhi#P}YƓi4$ x7-|7 #q U3Uճh{2!+oE5&xAqZsJR>2Ld0oLwjN~y}j~qV5^[}lc8c߈ +0T.zy^ZǭnzkhIyx(xBGqFbR.Or~UXJS3 "H~K`VDt ULJ%L/@)Šz1A.\QJ%֙r|\MoYp5μ'q).AY.L9!]19<4]R;=6z18HB7R/:)t{{)i[۝$f{Gw$)rp!}xJ.^\+ɳaɻRUL>6puNTo~ “'k[g[΂pm}F?xz}6Ο$(:1Y`iO2܄AGq@{DS*kTPz 2  #}sXgfZ-0G㔌hpGYEaڨ+h 3 5A hb ?v]71(MPx-ZGރq8!o6<ˬΖ:CD-=ia>:>j-'4 .y|3nno?{l ^OΟo=y<= ?{[?977A?=z݇MI~6om<~l XG7C'Xs-b?)Ix&# C'# Ŏe0EȘ0kӞȔԼd n _gc4h3-E=40m\V{??󭧏{zgzV^>Fbc8/d6tL.j";>h].&ua?{m.\9j;|{zgOpvbd%_ZP)@hԟBD{4J2#;#\,D|!là;0sp| .'4x 7kp? [[k6zgOt.:sHr/v'"=Qr 3'OVbL\R;X^,JzCtkϧMqf/Bd4Qf4R ?n?XI28 `w9EԘfΌ8>K; xG}L Hf8E1*D%XmcMdIw$8 ݉eYEמl>G9+~G}souOWϢj8`×oNUڣ*IrT46>54:#T:Hc0:PRC%&Dʈf Lg{P 6 g;-ERnΕ>JNĦ ?ɜP% (t=ۮmQɿQ4̈ ٟ/DZH +MXE=Aut̚yFC<1.PIo6"72] ;mHgO1K0YȞxQ!?0(iokp;m>~y[o5|ƾz~lw`j><=괚/N;ǭ6ԲRoû+Sjp}'M-:4j~UEA u4(9PKuh̓f9^::ͽӃzKN o9~ zDTu 9V(0wE8  ujupLL tO{MsҀ[*RkS(?!EnXV;ӁNs }qњwq&;uj*9n5Q(kpoavuxyL{qz\:T x™Ta:n1h&GeǪG{ yl7ʰl6hRӰS8. erWhYUib8lvS Mkx: bq5!H +O~4#򧵕rQHa|Ҝ\V殻tOϡ0}L>RWݣa~}|k+ӪXVE^U>ReOa\C-UTTU|! xyOgӘd;Js }&y*V=:w "oS]e~r[8P"` }l K}MBd $US}W<( X tfK~80߱8J98asE>=z(8 c EWpTu7QiΊ?L^-mwq?+J-jv1ioj" 0N(,%0"-vzߕY*]}u6JB6Y跺bje l.KfWݘ}8 S:MQ-7PB;ػOo vsTiG֍%3b`KzlɣV̮'dvoys8?-?^ʮx8z7˩}%咧 2S0L4`4=~BQ򚏬X.?_嵯WyU^*I^;F~S)v}^VQB8lo^Sp>DBNA_[b#r]·>2l蒇smMBu_WVO?9}Lݼթ~o+?N*yL`o2 Dh>Rub1=U? HcF<9/ylw3x7񬸬tVLtfW#