#!/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=e93bc22d0b6f281accb7e5c2520e3696 # 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 IdB+2Dmrg,l<i$eudixA A8̘[|̊YZ^<0¤"Grߚ1l͌P%7$RC yX!@0VF6<͂PZ̢1J,Sꉂi|G&! 9pKyТHXFtRjaBokm8C;mmhkcko4Oǣ@,ޥ>a0 CлPtP@:;WQ@?BpW8?6lGT裏>0P#5C ֍VGջZ U.wjS/{ڐȋ v4"EmC5"w-T Q1Z:ޢN4H~T$VC1a'ծzVj5j]baO>48\6[q 664bTNOdžεFp8~}A>UjH`n3Z.<(pN!ikL%U(Q$RVi\4Kj8mA:'T\p.&h V@m_ļGC0ti6\uwR|)ˮo{ zy>LkԽ*x3 N}c]ꃑ6˱3:@;y^mk cDb#C9L1 ?vW km eMøQKdt VA6F{V9يtM1f#orvYE$ͫWt0{L_{<AY[w S ڰuZGS1)p?37Qpt)5L]DX7cl/r=F.n"Ek>4yh=Ns]Gj|h` {7@e6'iE ?JC|9ϯ8'^SC=Oiz/FU^?W8Q= 5* &rEh> Tx\rQ6\?3@VZZDT {@u}_Q(@`&"џpRHfkÚ h! G%ҵ0KZ̤Qo݀c"!C E#lb4X:0YpVsqqRq `^ !0ˈ6G: 04DR+^VqPlD\|j<(/ޯpsp K%Ƀ 烔 2n#*8g#lDĺ0|.2NwM lǺ?*ec0OX;\Q T/LYfɬk_Ō2Qلq̍glv5]F" IAZɊQ܇|ޖ(Dm(RKA.$d?Y*jTk45Z$f5k RE;f4&Q2UD)H#t8KFĄ:S>+*!#\<&\P%5k(/^0hc6IFhIo5UkbFupڜ(p0Iuq ?mdRzfl ۮH/k33LVD_/1N>wx'$()CdV Q;'Osŗl#N"\Y]|Y|ُ 3&R0.|y5SybM<  &dfL>Myk,4̲T>,/sn8NɌb( `RzD1?茗.6Bi1WʽUs39'\=x\tp~{jW;G6r鉬uL!ő?{{RkUt7GRٖ슓78N<[)Q_c=,XT)ӱ>'z~9)] Ddš_k|a? /W{?~kZJV6Tm,f=]9XLhA~c}͜UR+_*ZbӃUez_`wrd(wS:F!֘$B}-*yXB8lFRB<+`e3݊ 6S(yE ڼ Yei7[E6%%f"żPٙaQ ""-BfYH TzWș 1]a@TZ"_RW٫ omYfyOmFc#k[ _@:~^tPQ]x""R6"e5}D۞M,xU85bQVt5j_NZ^wffތhwU~聲~,F6hilKr3 S6K2K/74PXQӐW)\Ux84#QV DG^oX:JqMe*/+M sd'm9++s / 4{0h2~WL3{#s|7ޙ9\.w)$rk5 ]&nZ}hjG'r[oO@C6WL,#壑{*9+ 52Lthh9Y_PFe;T[\bĮ oTc@qׄj!\cBY?H*%򹋮Z]Q2ᕮ).gOl Tϔ,\y4xWHYRΙu3g7 Y&t ]SRėaqxF{sZ5VN,.) ;>i􏜃_/c;ryZ1*>=yY6qݱo"'eh|?|, o82#d6;yg'k+Α։)ڨxNa;iאS|!GB_BWQswHC1U/7oȋ+j &_h dD _#qȯ$!+y$.حY|DeS^ֶHBx~xP>brvs9`t֢d듃X\F{Ԥ,=}|3ډЩIӹu,OqPQ{OptoĿ!.OK#>3Zk598wR~83R)^ޕe1s$,ٽ `ӽtq"oȯ6Y pş/maɍ~skxP,SJ,~y{6$_}%VqDWI(kN }e_8 $H1u&@eo][D/t@R]ݷ*S@晇8q"ᙺNKOOf ~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 grԳ?1s^Fg(>K?e?4W-#* bxu]{Ok' 1Hr gK_?;첉7K>Q?1 _Mzuڬ,٤!h:Z!$>֏gey LYF =6j[;qE!=0, T-OkRb36-C4u#L_I}bgY4\ Pr{ƩphD-y?͙,Zu!{-^HI~qAu:-4<"L+kz$;ǀ. ŐH`g;KaH-_͇t꧔na3GqضBNCbgCb] .ōȜ>;zM|7R;n~JojEMm)UZq2Fnoj]m2α.KTlgGk`i^WXzbd튽Y*u4ᇧ#?H5SϑBWx"h*)Ey@;Kh _?و2OIŶÎAa58vD:{0q:Hqcx?QS8lS7DjvMPZV6g{ʝNk*~9#%'qdz]oPYo֙г~q%NKE%,Wl> y5կ^//3R+pas'[VҬQKm8twJފƒ1n )*Tc\!-hs'\쐰svgh#h>)~ltDf <7lt>D(2ui3X.I+4c+`CPJ7]4Ɍjg7݉-JgEr#I NJ'ɛhcNdb8V* A=q1Zщ*c7DuUIqJ(0ҧؾ]Gc+#P{O*(ì븚Gq Y`}[%e /!{ÓJiwVja:HNlh%Mٜ[9)޹d vN`iV4r_44-I'&e]%\ Dye$/$yiOc0+xI%]Y06 OBv=?خnȆQҮY;Nˎ:Ᏹp r=c|Uà% {c2ZViHh$yv|ay ]RF .nh& aɳ Md&?pB&Ii+36t>bDYZ! J4";9.k#H^\U y4'*qf?BME,-Yw495Ϧu.J dN`{`0D[7y˾uNh?x$|: %Q MzUv N>EQSTU;!.ay[ҳq8Ao=>8c0JBW&'nw9hN4@'(e>)Y7ЉdrC ɋmD=OUB8 7KTkt0O_(AK1MI^7LTWX[] 3est)c+Ϩ{@Ra@ I!E`Ν0HL;K GҒUq.c{&<.")e#f QmP aLNd-"8Q'8v[-ןon%67)/z{߫tu:V>2pwڧ:’NxSOFv*h=u,+O0 t]z6Rz6_O`/&xlroO-F8)wp>v5N,>0YA}֚vU@qo_+`l=OWtjv ,~rjwklF-Z‹2ػSuaN6l2l oLoMG`ω|}s;ykNg1( }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 rrhjJXLn=?;{а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׷O<ceC(v:5 o6t + 1`[ؖewQ٦ Z+;[o𩂗op֞z]o16" Dd|ϖ6ֲ[_g c ( :Q4Vs$UO6"IsOf*ߴw{nU#aʐ@Qgۛ @OcX 8(: {~"QWwqղ~eekS `ϺB2\"UEOLƢ&6ŨY L2 vxתHwE0*U xG_~HSX]\D2|0;Hʑfu6U>ūO/Q^L ބ#KcQl wP6kH.`R{'e` lC:dTYCs5^׮"$^=NVLdu_3~*ɽGՋc$MpJ8KO}g4Bf(B ӿwU>OAyZ\~MT-3"TݝITT% |tvn%J -ɛK5pr"yʁAJZΰbB/D8 H6aΎMݏF| DʤOPxGM<(s~$;Oƕ7{.3\%2a 9,6&Hw/FbT-9Nnwd6!a0%B5̌:ʸ \1Ɂaqnx0v4  x+B`2լ*8s039 {F(BFơY&D:$$`2!aԜШ$U% TƓ.~CVd%ZɃeu7|lHBF[N6ɠ5!uPi ܰsHG'D_j2L-2]-i<}h8,ұ%W}sy&ij-׿ОT.1h'44 tL>N|F;"❔4j:T"U`4}E%$8verUr%^ _ ߨh2b!ܫ+xN*JeV{/׈\mUo)V~2 jeF|\nxx8)%S|[Q]~z,f*`ky =9)8+GvVh 1ݛ6>5 B6ǓN N^zUt:GFI \<ߨd$Pe3??gy=B{"GofoS,ds:Bn8Nr9Y xTD&|6A%cO˔fIDjH+io--eosBg mr:>4jrres.zOx"4?٫S8Z(4xzϥJ{!O%kTfH-J06 P1CU9*&Crx@{ٌM?S )wyc s{t7.D )vJ ᖪj_! d(g ~Ϥb8W`K,3RifG ;d'[AmڴELV7-f[Gg$)r p ]m6֟^<>{=7gzV^>F0($7ȏVBנYo%D :&Yy5}. ɛ^Q0\XֶalX_9vcסDP!8C{ꛓ7e-fUb#XXW}*ߍ$PphxO."A5=1 Hf8D4Dkm7s M q.:n|]pg|G#t{v xD V.EbƦ3FGhAS﬩,ecZҦ=[c}D3*3X,G ?@$ D0$Tb;ŮC)K;Dr{ ݥ>rx e5 '\7z szpP\_/Rv!rqqB|,q1Tn덣f],ܗ^7E(38CؔC"@=1Cd*gaet MăoCfB5OW+ٕw;QWoq je vPDdя L雛AG>Ϸ鰍[QD G #Q!n«`Y<ši H b,4Cbuҭ4F[껵i\J'. 1ߒgq1x!NOJU/3!SYy%*-Z3 Ft)жq-Cճ oybIUW}X;)LyURbixb݄ёy-D֑2ϧQ/5ÇP SBNѦwLRBНW̢$)Si\Inf>2@0qZ:3h1<rM6 6a;mIxJsrP~$u J#xAR >D*;X;c.y,>dޭvM3JФ5gVWI~jd .ì:^ EbWtLBA66/$EQ )H1pf4yL 'C#Rkm߉#olmnOUbZF6}jρ%2j tc#7]H(jCB^"b!]J5rA Iծ ƄaN zii0vCh:HDk&22e,#IhyW6VQ*Ṷ1cj"a#ւ\҇`DVf^:td ܆O<@NeoQ{,"A:O_hQx5:={BQ'ِ6& ˉ/QhD49oM1u¡H1x_D+/9 RFwɳ\й&nMLHGm[&yK;#sE9A1ޖ~ eHP<i6מoyjj8qjٸL拭Rq Ve&m|0t͌C~B3^U,5C2 Z|4k Myj "% 1/r:L(HL%Q\rdՓȆSnwr=HQ>can^U8' W=[_Znzm=it.-|&_;s;++|bp)/(xlf(VҒ{r2AA$ھe5앪~fҏ#B!CC3 k^S2AmY4nMw-BD9zXD߷ZCRR8Đ*(ޫɓdqI8H(*{ Gh#e`i{86Z|v10"kbu׾Y)Ũbԟפj45w`Kx楀!5?؎i"YR)c$wꋒ=;z ^DA4hkDDy+3Rq!uI7Kv(gAM9!!;O =T!xTބ Ax'*3F\ERFjzWx]qkIJ4Bvw0 n:t A*-; 0*bf c!ALx=*k _ B'ob!u0ꢕr0`HBעo' FV]Dl=|89+]3dI!.KG~ ֲgTObRNz",Ppb]t}"ʼn,abm'X;$|2+ð;Hh|Bi+ a^D77~6$o*զ좏l}[9yS~(xMg頚&Y7B;M'89{v$F_q| =>7FO1 D 9/e^q JՃ1:۝`7>F[Kp=}a[ Bnmlen3:huEXC 62A\W2'?aƒ\G="E ѻ7NJkM~.n5EoDcl3ԹC ƴ~IЋ6;(6|g) ->QTF<; 1z\+M οwz@w}7Vޫ"YmnB\ҍ\X[(PEńss'F^}cMz8`ؙh:%H2DP-lKX$><9h,0>Tӑ:f1$ANsͦvN6}_']m_^>;3 d1tghT$-A`0lAq,9qV6FȬu%'{n0Vvڂn72;WS7IO9Y6/nH9}j1+l*iO 0sNb|Qm!Sv-I)B?Iri61[)x޹_|~~ɇgԳtVhU8j$g;W?Wc5bęMQGar3|2&M~o 9p$ E[& NDL w_ "1-YJh@-T4f̫+|YL/EL0rYqf0M1j ԃamg1k?Y_,c{Ux^bi&MQ%슂Cnlo-FcHk$`iBWCD̮'Miϑ9ǘKేg"_GN7KA5̤,/=Zsš̅"rє'yJ(trqK-N`pοf,B 6V(]IL1KN!%"0yHA`(V0cJ0kH>X{M{A>Ȩ{NUTUvM8QK:V3E%r!hZ ѳ24&4mH^2s6Q0>cRO x'st8x1mS(mo^/T2˯  |JkWh^wcVU./&@0o.<7x |9dq%9v"%!ѻM'cXXIm$oeɞ_Н9(t;|ev7xՃ!vфrL΄1U$%8. #fCp8ZC${]0j(i>άġ^<1Ji5w!IX-o WY}ӣw~m˳M=A_ϓKx򣔝`6f:ȆQ_`r/ C*ۻ#H1:taZV7r^ޢŬ ذ}iՎZO;8@ (;!wmDzC=ZkKh\Ӗ'Rh֦dZ(3kD E]샶*Qd0"qnp6if>dK=-[+ҜI71"Z-d U"MUXkAĀIE4Wx .dOXPdẁ> z>QZԼ@ 'Ra|gORΨn]wI= 6^?t.'JlvbAvY|UoɮoB&#=F(/NQUcߋ܇xl T`FU{4im o*MLV3;f؋n:vWc'~ W8?#\+NȘlϊGm̕4LrjC+F x*UTRd4/ ynRNbIR_vW;Lf54b ume|,Epw /]Ϟ?Ö9YϞ$gd/8P-I&G8Z=^aE7*~^fvWx՗DfBLlvl6S!JGW_=!;*RfXw.ڹYS(3XlhRJ:f}µC)]}qv( O1ۡX*PtvuϠPNFvu퉑q{nrRn5ޮJ ߮'*]}Aw B **Z{I3/ -RAH_~i>kNc ºjwNjw 1Y }L>WIvQYk6u$ӥ}^vP")_΁*2"?.Gq}o {* IWW_LeO1UPЩG]:+3, jΛJ?RQU?؛$qkKψc2S71{­u[<'*hLXA  @=Y_&_V{OBz<v2hH &x]2jĤ'EU*)`|\VNO=mPC v=S%lQU^tȕdB!1 z~m=RRO7\T0Yt'm*gTqr}gTJb*EG/;:F #V=GԾZLgL -y<|>y<|>y<|>y<|>y<|>y<|IMHX