#!/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=ead077686bb22ae34afdec13123fc5c2 # 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 =flkf&EJds5a% 4&Z7lgx=8ƻ77]{?4޾kcz?'S^? ?zQ|M *~ t/b.s?0#j.pٵ"0 gC2p<8o8,`P;'?~!o;S0s̜(b6ֱ&6#`u;ǻlXtYa-d6¢d"y%Ŀ.)#b B8!,Bk:3` f$0cdyxA AؾϘvQ>03#8.%Av2 gqfF8%ׇ)NC yX!|`ly!,FEcX-LBZsfP/ 򄡅 b}Ї0읎.ԁxւKԠ_#kn [~2CRR8Ļ%hm8N#:?P#]*wqK)(!G8)@BG4?z%xD7@<*HoA7Ԁ&҇ͶwV 9@k ?v~w4TDC>ՓFT[@khN˻& Yl+gך:ޢL4:T$֡cNh 'X*TOs<:8c8>xYjs rRG*'HPf'ΥwG`0^ʾ@ *nq14an3ZopII\ \|а}@SIC\sC(Hrmj#<P!4R󉓺3RiވVOAmļGClR(rc8(u˭:~7oE^,27dG :]D. Ň }hjPٝĎk?/;F uxm ol6# 91y]B/Nnp)p>`,!jĦŷH3 B{2?"(MqIMh}8Pt0&Q(ؽF\ !J5 M*[SAX=B BpQ!{J >, T(wB4ajMbNe:!?=ve Hay= n֖B@檴\`"Tͭѡ/y]/ŞjAJ‰a&-W4G @ն ^bGPpY9vmjeQ^rV8W6+eNF3 w׎:'H9/͞8*4.C\kE Y8,.im"3Fw FT:6s; , -eȋ8#kd ZkSI5lyo,\YT\RݼHiR3-Ȱ汁^LxQ^W3PBiOA~B@]7BA*(o2xʮG9؈!.6]46("YTqOvB:q0;qOʒ87COfL\^*fd 2&fNH>g{_]إl$>DX&}mN1$-B y_ riɜJ(QEJVUh/'0Nj@2v\N[KCM$e ?gsTP{pK qԦ}% C]xY2 :]HkZR^b8 l{0jÎrc$!7tQy_I陱,Ы,$}gDR)nHCh$+Mj+Y"G0Iu i&2$Jxg㝝Kg|.,#Ȍ!ϩtP<3'.{.oC,@gu8>c[ɦ8w ȉ֐L8$-!5kfFuanm晠4PNq ޜ2ZN*嘛W/̯[ASwlA; y)Rҧ( %Ȭs]@ނw o!D.-O#ºy˲];~)H v| [!&Iw['57W.4TVg1kƹe,J1^<$Lm(/WJ?,4ocrJb$˥Dzz21GJ8*(oҏ.F-'ovqpy̷TTǣc#+[ _@2~^t ]x""R6" k=ˈY*+(ꪚ@|{|-]Mrٽ|7#mTj=P/bH-m)WnFf M}?VTli4`,UB(S HQG_.;hzikEe+Jk<nQfViK//64T@HjH]1Z->zgilE#~ m;^mZ?;\>P0TN6G#&QY93̅52Bdh`νY_PFe;TY\bĮ9 oTc@qטj\cY?H*)(]Q<ᕮ).6Dۙ !1Y,y̼mr+B1BeF&%eX\?ޱߞhz g-+'eWod?-#`.=v{m:uȬ87~L2k4>>wf7T^N i~FiZ9=:1@ω3Lav6RYJ/xDZK(AҐjLhUZ kR|" _#qȯ$!+y$.̀|D&eS^HBx~yP>b}2vs9`t֢d푃KÐX|}AYz&O!f׹Sɓ8sX%0p&=(f3o=P%u߈C\Gޟ3\58(sR~3)Zn֕giγ8b/IoLʼnп!dYc2&3 iO)ZIL7QW__\.m\IJ∮ GQi "! ל%ʾpH(bLV6޷^[ɋL9doU3q"DCOf ~W2b8Fkpd%N(HO#R/({ 4&y]^92A`wɦΌNɑKiI4񟆺+e=uKXiDP/ȏ0 vʯc[vj}I>{HK_%Zofl1g 9-QYBk0kQf251L|q'%aa^QV#G' y8x%ۣ2T-ԧ)ũ<{pecB>>\QAÞҤhS[XpM>I$J|`4ZZ"1,`gi ;[p* ^czӰh(ǨF[xpJ=5yX+g'dwlȩ _n0ja-@rJ&0KejM ir+B,a8-zv1yg($b[H \Pn>s?fg {(EEBm @ɣ$ = Y;Gs[#94jCM<؛ v YF: .audj( RsS%y}S^j{{^bv5Ђ[Uc 1^BZ!ᅢeLkʬj/cua‘ZծOAl42)G_}J >C*.&3-z>>Dj[4jė cTa#\bFxޒ== a(F3f8G3+,s|WN՗ho* IPK 9=ҭ|H@<`}i?j@^/RS^M$RhW`4c.4q+,ңBV k.Se !-ʇA5{eo_>PQE{.dV~2qWL>ޯyGh2 wB%<30MLT@aawU%Kw"{AbRjA\zbw޹H:%z s5~s[I{|{\uvugwlJq575Fśwu e݈.uGi 6 dw\= ~nm ;\8f/36IڅB <=rrB6%M w1 v֑@Vټ_"b_h+}km+tz?{,,5/m$&;)K&SaC:*˅եQYsG(UN. [ʴytlaV~%0q[QYҊRG#L4.R_l…hcoWSݟ9ʶP7NGe|=3}P[WA뷢lDH>r ՆS/֝LoR#I2' ڊ1؄W_~Qʵ8iW@=r7Si5 pȵs OvP!9QcwYܮ'p~_EkbPUMp..#Lp  RJ"kEz6֌L |Lv2fɵ%[.7a5HrzL N'9dxeQgm|;)4tflL1NMI^Q\]OwhYC畕@Q9^M/Kg-;Ǡ/rd^}]- L97|yU`BcϷrkrv'JB^sOavg9(t^OCqôl7s@r,ZNj|l6L4,Ab唶z2^Sҫ\Y_%.@Y|;}ű΁h~w' 5_AɅʡZ׷@_5Ee$zf"Nh[IAhix,GJ{E⋃{  G[;Q@Ph<6#[BsRlu&wP/xC10&;jE}DgE˸.QѬ=FJL5Z1de0FKDVʴgc; `KFq:b6L7'fIZ+d%]t[3{mTpv?M\.7'\c_S&⪸nf2㳅inC㖤y|]A*`ѴΊ%mo"d*1ݮ"uvI>+u*4,qx~\v'mKcD\^)O|ׇg՞Vtt(=Deډжm|7#rޟB(/qm>GEy? F&%\PLzw86~&^]Z%Q)sɓԄ!d|QT= !a: g>xw_mwg 㫦 Ѿ1f@ ̆o@EX Zwߩg{K^9VD߆3[U8;Y_yX]*2OTD L=H )R{d$Π8gKn=4Ɲǰ< uo ]xB`K8ԂȰ M坎 (Whބ%T6 M͎ۮ0h`!PmEoXC],䠤WQ'o5PWD{V*[zy Fr{}пǞpZ3c`[2%]Qc3ƃ %;Шx/x(F Try0+Xu'ի)ɒܚN3Gh ZQ$ nC3l*tKt܆.^_. #HM3v1 |.qn\ 5tV(&&I0M'c&i eI*D_K pPԝƱX@g™%.ks ^}+P5\]4 LETN":7ei+U(,*+rxәM7<-q7ӧ[Sdی' #7V7j*@d 9T U=,Rt``{&hЀ|Fs!uֳDA{4,*ԥp PtXڲԆYGZFxeџE:åBMBKX>|j C Awia0*I'|xVQ)bC(5W )OŌ: CſR~h Ce#y_ mF9%46\*['# )RY c&1fׄ:L`N>>D1Qf1РavMW)©~vc" l̟0uU:?'|4@u grxgDc'8~P}ϗhSj\obQwE>4(d# (.qulH&ޤ.sWGT0P5A.itdbpk!sNO`Z?J𚟕510 rg}fP-`m{R{_pl ?M2,NJt8&P)>Km&],3d ԍ21N~q' ]ffhr5@F$Z>:H5gh2GԵZܪx"%A ̷bX0E_ׯE $J(v C" Pa8>],Z!|q4aR^F]*ћc :&#%ua$Xl.7"sT T4xHO)25;kVAjv&_ǹVy^vltq[;ǚT?,Q#zN/qy^cejmN+f|l;nd:܎sX#%lHO9@6Ch*oYI.bF-Q){+KƐRûa6PIqƶCpCU؝M. 8tn)Hj0oܰ0J֥`$B'A>C)w@8$31ߌv'()$Y|LX+Ffg$oW9IHp:n[/JǑLShYD'xAn %?0bk!FG;Hf!:-;6J?Ƃ1ȵC | ̏cVu 4['@h5v[fv&iT#Aviz<8x/XtI!^/DkBGS%"Xt(& s,#'t6I@%``rrO6j~(c\lPwWp& q\eik}dwL**Ѱ@;Ll yzqMWќ`pxc8'ƙDK0 iKX6=XdB {<ֹdG_(.9MO mq(.ނ9u=t_?$NƶU>j0.Q5V">} -X7&qxĶV2Qa\Ucnlu&?vœ^R Bp-ز?aK#S)$) 9w,"1,5KKVű/X^D(a@)dDAƿ6)39;ɒsD NkO؅o]|O|a;^ӱ:IM>mqt ܼŗ@@z6J.KVA%MeQXxp-x/a7%lֳg]׳qz:{5;me{ϧxb$h4iFH󹰫ubAj֬ ~"=U^A{d,yVӨmn`9|Wk[c3j-7^ޝ2 wʰa3afxczek? N- ۩ Ng1( }k^( (rw #=H~ip(/Ύ0kPRCw|nS1?WrLr,>+}HPJyo<YpI?->>'{V}8>j*G^݄,"ׂKKj B>οOw~S^ٿ t|DT Ģ 5¬4Ѫ>a.g1]6I%lqIgI4fH4\,z+]}GSRPk#pt~"Q<<~_FJ!ox*9dE1`) !w㡑PهeD}B'v#r=vUK ME}W{ "X$7~7[\f&^hKg,,#uZжrWmuPȫgXd(rN"6(=1,闟r_Y-SV\ܸ9NU9'T<4cad db(Gu6Lϻ"F뇡IAخu$ / Y!z?ZdD꺭/{3ޭ/;QxrwCq 0-wx=f7KnpmLܺKouTαބ: Gn>^᜸Kqdj Rq7ZU1BA 2PYգתY]vUu"HP~b!}rsB#w)K`&_G#FO]p7BpI_#'+wHȔ/;MȄp:PߝĒ SЀBQMźYU$Ft'#!$IbhƝF,0w)Ar GɅ|-SL8ئ"wƫTLv"2e5ҝN!t0 q?'P9(!:<͇4mN`É N.$u41Xlݬ}OH  ]1O>1{Fa(wrJd &z.5mrW>RLMEUO_($m5Jٽx,H`LȤu05`\9HeI4Z:5)pƒHA@ψLVIp *p%v4sʺj4AGloƓQX.fsbSĮv8;(ۡqFQx5@3 eX\#lZN͢b)MKlu@}}WT( H?ApLҥ CB%~ M,/zI3ixfظ{xGx+&덣&j6}{@+omhOL_9aӘ7* i PKO8CjwvE}Ia*s4Ȋ>d7IXِ#-ފ۰J0(iA6?1,VQ:Uhc.Y}@L\D;[1č&]OCe*nm[/'Y8&2H`$q7 l@\7APTeQ+3$⊴eʊqhpR6^i q2 P$;K>/줣CfS4 aH fΜ;S֝b  `0xwר4g}?!k.'>(gnZx HPSe$eX:ظ^>D`[,ˍ! 4:A+Y#H-^9+fC0kV1dBŸZa;c^<Mx.3{pUt8晋AL'-aR[77XΙ`Py稃B `1fTb>U2Gj}ԕhVazyK"80"."3pi^aJP{+ 휸c5L!ަSz҃ Aw@0UF3kaA[suM\s00} WPy2x,Z6(Ѽ{eacH5JC踖͊˺d6R?jvǝ^l*.Nu+fH2fA[ i2LDy w=}jtf9?֡kcTd:o(9@U_|cD:zJv}`WNt;A.'h{xF ;c!L_MKCe[f ѵkÙgwGKj?^1z _e+I> cSp2p?9m0mL2Y^;b^of(԰U; LB`o)do V!_"I01ײ1yri_U#*O˹_ʒD3YE0_1_F^qrJhϚ)~-,*617'^\ѿ=#?*,e yEJ iy8Wi3UWI=e],5S5Nc%hI [AC~?)H\L $+@Vⷖ{X Fv(\ ٻ1b,&ŵ2"1V@>e3yM@%Xw/yk/C@ŎHUr-~irBxOiaI eP?B Қm~h#}Ez&Ō#@qeU~)2o1X-y[*/+m;q F8)xdc\XEh>Ҫe@L. 12h'mVWAm#^~zqW*zq]=!zHxE܁ aq|RF] z8SeHR⸋}4JW0:.Lja@P$ @%f&K6?hs!~Ƿ)S5p IeemOkP -'fWuolq6N5"/>{Ϣhآ:%9 932;z:,v螪X^O뾨XoǒϚD<*A3Q/9XSw6u*@¥>er`4̸GgB8략#ƥ z6>@pR@ in Vҫ P*o;1KZ2bP*)vdtCyRXKrU>YJ,< Icr @_&V1{4{M:k\z N2/txO aN۵ 4ZD69L@}US:/$T$NnF sW} 30@5ѣ+ax+]o8eyT$nG8qO7KĒnX&c)y"y T慀FJ--HYkY>EP?}#X ٞM++ 4ȟAw!I`SE-־.Rz|3#-kjMW2bΦ|0QF1)I)Fw]g ZihձN9+7USsZԃ%ePam76Hۚ/h2^It"}ΐSYGZ/t+CfT#DR$1"t)p7l7?r}.Qf5vB8H)+U_:YFG|eqc7½`p̮p.TX{UNUx]riұ"=H٬HITrV1*{~䴱_*4F=V=f=ce`_a20߫PWOEA:t|9J4n;s Y4}\|.iexdxMҟ*8WOڅ3 mxE]syU9SU|4aGI2:sL(d֜⣌¥K rG,'UuGCG<{}o {4jsvlɟ9#{߯u;ܦ~zB%WcDz3ON۝Zǣ’ݼ߷~<ӓt^JݑnF1KX` IlaeRXIB{KtȖa| EdժO+Xr!F҇Dr׆[PJuM3'+q?IFRH&t!{ѕ$ߵnF$^zk8Azղ‡WѮs/V\l$m}WSfv=n-#Ǹ}.sxF, |}_}:e{zKy#O_jg=|nh&0Աqc$)bcYRIv|9MX(O+UxuO Rj0L[5E$&RBPq>^F[Tɤ;PzwS`d~lBae}wV@؋uczV]_/SQ?8gsw"."ɹYt 1F#BX n0c8yx1<}H\6rg8N24Đ;E`vg_wa~ ɠІoA!}z#?HFRUB?'HMiPQŋlאַW'9[&UbY ޫC%t;tN]<$93f*>A`D4Mokyd ƫlVGnX}busqi_*.14`rDoQ׫[Шzt c'(u%G..dܚE)˳^X6j12_ؒ-.iFV Ƃm{j@hrr [fIb漫 dSމpqҦOCS Am ߀Olޠte! 0FՀܥ+o8\F~v J!zՠ}zdAWŃl8a9R\Χ=R?њB.X-$]Q8oY8ri Q3`$ ;H: %6&z7 vg]A$[(5o?s 4:Egk'p&OQ/;hGB *6}W%CRBSh졦aD]â!tC$Ed"Z,)=՛Ga* U  T* ]Z>ddlAo@p$2Ea;k++;A{6/zOzuyJF| m,'Fcz0RO"+gl죘}6N21-mwMS,9qE0<7ƪvZg[S$ U6Yfi^U4Fl.%Ѻ &T~RK8RLŎh΂6$lY2 `3c $06+ &B< OXsZu8P2ڇ  1}Ţ(AG8f2MU' aWABw#Et3fuz6+j}-Ɨ -RW`(=ߪ?|=rȮ4'WQ6}w*Ÿ|"aUPa#7RVYDX.~<@RdW8D :pmٽ)t`;ڝ*VR`VwSRp9 z#Vxpp6$1ܕqwdLTp{veU7%FAw> }U8aĒ}L٪Go?!;P`0z=1@+]Y 5]Sgx00 &l>c23QuTUy|AdF`Tj͑цQ,hͭ<:"̉3u+ޠIԩf#fe:BcE/ KITbsD pfax waÞi3H-S@|D$JR)87VO%q@W`|FQ%0yxjbEk=i9OgA43&%zeP+MpZ{(ϧ _,X4!E@ Cxeޓ" TA QjҼgKP;_^#xEVxsYOQ-U)4hˆ܌譗>#3ΚRL=n܍+<}'N Niʺw-_v"u㈘ `rWI^b ߸p4 Tc_~Iz :#BG xۜÃ$Lh$1O RmSY̊by)Ո߻`tpBtP2ϐp`rS&rxY- Cs$C&(xX)h{80ïjɡ=3wEmNᄉy+b5bAv#eoY x8Fz"|6 &?&Ûjf( c\n[] b_51⢜ ] {~ a&hvs|U.ed0ɞ 4DzGNVO͸j6 c[.* ˈr}GQPU3?O*֪#XJS5=99~ oQ}hf U%PfKKE;bJ xG;~tqf7DŽdFJ)A[XAF$nd4BUu,E@ѳkU4ϤZ0$Ĭo I3iH>N-E.ƨ.k2mw+j/ZN5f!$#^;a$ā8b/:0dj*y]on7}n0^uIl7|`?֫6G5MXo~KI&6׷FO`R’ӆ:T*ڻ6^ttʗԴijJ~[M6}kN]k{r [OaO rrhjJXLnl??;{аiP=y/7Y/͌!t3B/vB ~(&bwHi&Pl0m Y_\Ư#B~}8>}9>"N;>=jG KK6yC7ouEHt 8?Rn`MR%Wm?}[|uKeI#]ZH 6TDd#jC6qM*jvF:;$'ni# #zP w0_mdf_DqNؿ8Qf+ItOdE<ѻ}N8MVhsCPxpo[ӯɿ)~l$3N5N}q %6 2P, w/;B **„)7>x_(] ec|h,1Byх C1qqdtWJ:";3ڧ_.!"Pg%ustܬp5n8=n\m9dۉ/F-6sM= eli:wfTZKձ;cA谘}1`ۍ B.0EC} :-a9n@V]gr}Y]a<# GDعdTupuDo1vf\uۭ?̛Ԧ2oQF{ypx_zhoohXNQHE2 D$ @4aFNOM2V3G~JZ9qJ(tXކ/)@";S'|YS rMNjEv+VxOke ,9 [,!fvInBx̀iq|#I5&=VQk;KK ɝ%9Z~En;K'ǭ᫘@M8iW(3<-E. ;0B,IEq^\!V]qǶ겢?B'R&@ȉ 9d,Mu47%۠juݠ%j| A#&6i+D"T+ nK%syCT^F^ qɼK L&L:sԟvR\@ UNa p)݇Pezh^t^2=*IA87.n8UQn.'8{֭^Ƨa/&Þ|[c ĘA1Q c!׷=TE).x2 /&F!4N_q{m+ӺÖ DOـQ79\dkʜᮃu_4s{. hOc2dT{b ?JCta~Hr{7/]7}Wtk+?%<̻ޠG}"4>+yuzFpԜ97xXY;_X4YT6 y,kt15 Sq_해&cfIWkjWuշ⳧)N88 #zL+5r'c⥭'2|`ѮX6؉IΓt;:%+]ogb,vmd[xX8/~ V7B1>S+~%eʵB(ع瘜hY]f7LE* ~V]4խܺf}ON[bCg)fu#A)\攒៍gt} D-I5q42z\YMit$!9) |<;\|p/+W^è 7IwP:C%ix+,nG廳I連4E|G#Fav9/fZ3@!_HOo[(p.eNzdԃS;cEu*zBpB7ḛu" Tagd#S@T7e*1ճ˧NsBhacubAh.@X#AϝS X׏ڞ!I8O蠭 9tAhg5Y#_xdNz,PNQ˱n9Ը.6M.E.L(q`|oDGopcʺ m֬NB%ܫp4FC^CpZ)~-eapaY^ BvZ^ZPL@*hYަbw373_q6 |o?FW觹O ,$Laof{Nؑ'/iejTLZ쎇ZU%A''ӣw#VR9p3,zSMJFbQi>쥬00mQ'M$lGOۜgɋ0Ǐ؁^1:ԗWE~ ɯn;U# vtL3w&( EH?K@_Yksן*N`L,-!E4^7[q Z𚍓6Za{7P@IT;m;nG]^NT+A˃Q_lmQ^\ޟӴ 79/i7iln(wSwe@a1dygKҾ9^Be ~ӝL:ʰ]򬭫5$hnV v'-\FyW3SFOcf*;L%Rx7is`4EOfJtdči4ro\@C&Cv5vcn.@ Ϯu)keOC-cE!&""8NU&9^j]%C h!r8̰ +)_ehq R$Wœ7~yK,fѿ `,G k.?_n !SOPc_Qm31%Oq"^Kn%oV(<֢l~e7-D3A vd$64;3É[9QpfB)ډk繽6Yň\x$s&St~&ڵSWC~v8‡vѾz(o>Jqjp+P9ʘłV BWIza! 'Z@|$ekLYǃ2u%Pz }F;>zx ,IҮ1x}8x,[#!)T@,6"r8jfyBU  y-(y\|Pȅ~,? RTjN@?TuLp TEdZ?d.^gX\<@wXQVVHI# xT;luGM }1%2=(]!=fb6oLod+L)EW̮6Ga 3?Ole+Xd\'bLNw:G;/;oiޡ+'+e~#erЩ/#+kut>u%icqACGKOQ[/ 3 qKPu7F)ڠnq?qH+ޙbJo"2wp e9fxqV}]ޚҍbkw ;5d%(EJ3NdP1DFj`3k4K峅m0TdQ;^ۙ s Pܥ4ngWm螺0qˍZ}m?|k5M{N^Rˉ¬ C>~wbֳͭhqUqԸ/*kYofZAbPRڬtIMHb7apxS(H@]mXMjUO),5EJ$m2k8am, u HoIښa584i#LGEU|t:0-"`iJ5TMB$ ػZ#R@)n}4$H7b0vA7zכw?&Kxz%Aqm&@\@R0mИ1aO"0&}nr]tքn<د7[ %8Sr,Zs/jG?'ĴʦqxrЀ fݨʪqwp8z[VP::na VΦߨzsn4?RC4GXNjvcT'͓V8WaG[jֻ,C3㺠f}`젅e:5K:t\2[=DR_ {#:}j7[> 5r teQ-V 5ke|E`vO[ 68) A?@ku #t 1/>&(T #va0m~Wc)zI՚&hpjP' ԋsΚ-p&U㍪o`%1~!+l wUҷЃw# +H!dRa,#.DoA(lBT ATX8!' .{-x՛oYhڮmtqT-`D`46ulfB7_L!G ֟ h㙤㮡OnAPox55W!աtڭBҽp['L;IDa7$"pl[gK ;th?[ŀ; ~W%cK1*0@g$?.:n׷SkX1JN i 8::7 guL1"eo]T)ʎ|%z8;gDo[sf\#stԂ س !}0Ff+ M1CVv8C:޵*R]@9Jd旻!"RV2?<NA689Frd1F*Y _'rӋmԀ.:g7Xiz,r"ԢM1ҳ؇E'b=y:!l2GxMFb~׵dWφU8S4Y׫ƌJr/*Q,tGapRn9RǓxcY šÂ]zU*Si^>1r UwglUfa@wIB/G [@ o~R Hr`R3XP$;};~HgR }bc>{_=~2'#Qg- A=Ǔq W8iL"BX++wCf) 9. z7aKN FwX'LdE{PM(32gnr %o~{]< x1FC'J)P.FsL5"L}FNcž УQ6:q @ID0Ic0 LH594*IUIC#10qU$YmG9u`uk7(ҽPVM2hx CH~"uìhjAa<7- ײ SC{Wed *tlq\^ ,}K6o,'dk;g0 1>x'ڨo("HM``e 1aY܁a\I "He7<̧X SᬻeR5;W[kUoo ծzrgQ2_-moo/[?4JIT/Vcy|z^9% Z^Axhp~l 좝8(BcOBE}M$- S@@U#5NdG@u755#TPU d\u@)P^6#BOThy$rX ,ō QB]s2BH933Xf*ˌEfّ+;7qP[6mmQv O$-XIYYt9b<$p"~:\E ~E5 $ 1V%֙rμ]Mkyq* gޓP,ZU&B*)ub,Br$3:)t{k)M iϩIHWTe֫ku88glF " EA z SVyuT ϟom6_n=;; 7C4&[/kgnwܣ0d1UN>Our:? R5a VtuWꟺ`%s,`E$pd@33kF)#<$!J`3eFeLPP4 I uaLTI ?_r_ڨܠ(^cE{;x@[=~ s3rgy.XKD#xclusc}峗Vv2|Vx=wYey}Xl{67}x zgϷ^n`|Ƴg_Ϡd|3c%nIj9 y ЂL ߑbG&x.,LyGY8es>)92g4UHR EhH-Yᙅl?, = H>^$au\YVx{bk{{ ϳk϶ϞuϺY/|yoh0Ϫ I->!5h[u| Q$@IE^M8rm ixWu@o0 ׶{g/փmXk Gm/6׺/a-8{ݷgǘ@u1iNqG+ŞMYFYdzFxx4(@ߺw#prt%8ϻ[AErn`?{66_m>[vϼO^ȖIߋ&Qp.c?`=Qr 3;wo~.D:&ec, K8تHI#% yv쒡n;XD|N|7&,uUB@HPqOLCRe, e.Aj#x&9HDSng¥e?[7o$ןo=3>_l#{wDD=A;P͙iԙLK,#녟 H~"*pHnbסTԝPL`=A p9H<aTQ2lUUE.Z͛VM{KoL9=8(f)Q\u8Mg!>j*N.K"Vd!ln!tz!X02цq&xB3k CWקouʻ +7K8H;( x"HMn#t-(e"U_]FDj(ff7L0A,܏~t д_i$1P!:Y -O4.xw?oI`ѳFi'YKH'DpV-ς Dysh[͖vR >d&A*J{)ePZJu$ ֡q !/G.% jnnc0Jz ;Ȏ!Q4 TZZ5} [B]<+K@+֨P*qAV}ݘ z@x5NA GkAi_DDz0"+3/Nbun'X_` 2sʷ(=D |c(Z=(YluOя(4"Ci צEP$H}mflZPI? FFBQw!~sUy{و^|е<5TRP@ha &z$(.9^ }X2IdI;b(N0TW/Ji/O- [{g6tޞ4y:a>9vzΝؕX8` Ҕ<6N``aiI{s=9Em_JU?3pבIQb}~ɐ!~̋[vHvj{,DN7Dr&ŻRĖ_! uM[-!)RbHcz_tUɎY8THmo` }Bϣ`ze4\-a>DF5ͺk߬bN|J1kR5;I%FORA2R#?Qk3'n )D'=adY8B.QgXVDðun}VPc>aX|w$Jryhw4>x\oN0 Ap^uz}|s?d7jIevmz]<)rMq&tPMv|ά]E&C^˜ IH8>pN ZOقdk"ꜗHH/8dsLYak{#%[>0ѭ\fnb!6Nn :"ms!DqEQ ]r+՟H0bAʣp"ݎd'5&?kǚRyq1[ZLapFIYtcZM$]xOi>糔Y(}R*KUD#Zބ\iqyqx.֕ɦP_\ۻU= ;>MBU67\I!.F.,e( Ab‚99ГK#Ҿ1&=UUCGlmX`y~Lv OHh$TR%,bi4E*EAHc3C 'fS;'/ΓLҏ6uدF/yt2r:|4Xs IU ͠8bsw8JgY eT#bdVPU}7+PH`;RmAN7ě\Gagm,—`H7\M >f6ҴVzçmF|'d1>(a ϶)wL$[Lz_Dk4ͭ?`GAGv3htZ:+*Z5m3髟ga 11̦娣0>NF&HRo?tz~mTS-D^"/Te,T4fR*3HF ,"HoctvNr83ZVj̦f5ɵԛ Z왹QL73{qAso'6(<ՕX(vh ᵕ9{w]ׂ.&9e<%pWc-:S L7 +CjΒS)li{XxlZIpg)iաLu xY23Awg鰶Ԉ@r=*g5K+L4/Ov*{hQ7KZ^DtwMNr{; Qjݦ1I6M2dO/XteIuhR[XRA[;hBp{g|*]D3!ہY!̽.[54gBPORnG/PۏIMJrӚ n,્͖W޾p޻]|a{qkI?z%jGpR }tw6]bn!{iI^i`)Q{k|J-ۉusw{yR"K.A[(2gW7ҁ|8L43_%ɞ-ziiN닛AE-* `xA,5؀|ߠSxXb$"ٌADS|2ӧg,f;f@ms (-j^V@R0>A tdz')gT.廊ȿgd: Ai6LJ{ XKJV,vB7d7k~#W|1A_CeD6n*t0#*=̴67&w}3E7ū1gKPSni.s'udLgEݶaw&95urʼnz JԄJ<**UƗ̈́<7)u'SpU /y;+&O&ÔNzQ3ouES p߼x@z=I\4 BbzK w1:n׶2n?gw"A.g͟a˜xgr?|?Q|j(g3>yWA=flbph2{95ACQ^84s U#='&e5=)RLzwzHi*l *.a4;U(gE$S Qлkv/&B2%28iWF8;U*gaTs3>Xw-BF/ul}=Z]z)7McDȺJօ3DyIUơZۥZ[n9lD`96U88 󮄧S k!Γ}c;?~VzJ--vژ8y+-܏2r'S}RM x;C 8Aj@uRЋ%Or'㝹LeF)p?ipW!44pbr%~l[B~AZ \A 7N)CrrA#iKXئֆ9YG˴DIKRa+k~:nXNlnm?)CZO^][.kI*XBJSju21}*$4y<|>y<|>y<|>y<|>y<|>'}+vDX