#!/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=87ec4ea88b8f924717ae1defaa00918e # 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 5aj5O^pT?zuv5JDvbvh3kˇțcVlX^^3#2 *k>E\莻U aDy;2;pY"8&$r8}x=i-D}9 #7Lb]o9숳%^s-s%1?{9az8HiӔ&'t/X0@+'6)Ƃ0^`>C09^bo(@Qu!pE")!q_@`7tb;UZ BKv#E.yR4*̤,Gx`/8ReF@ރB6$0@p4$`(dՐ]ݴXׁi}(- PS7S,7q=Э23zc. @^0Ƶ1~od v+:7a0=v7N Zh- Fo V2N(L̺jun"slwuDFv So ec  8j A#봮[`Iɀz#SFAPg~$n;[?n",I鴆-B@@fGA3zC4G@A:@g wH2L6eAz(W:|7Q$ɵ#ye=k\꽶}ްͰAGueu#.ZqZw!X2]J y')yXԼb`4̶>ifi;kV4C+jѳAkxoŎn @Jp`5.N(1dgRQk4S;!nh3Xe5@]v>ΒU"IiI[d1;UsW/_ND/?W%O/6_?iԿb :7.dÅt#[iT(ZJmHJ찦=L69=[7+ }mRT?o( w}> ?,x[,j;rh<] g+ Kc03vW n݌A{lA)U(Pu~2S//O?ڭ^PouC"T(4W'ǚk9s&8䁲%z#-RHtOv @#d/oN dB7Ɍ_Bo"ǍSߞ t#aXvGD657XxтR|b`[mTc?XDPM<CGԊe [>T 3^U:KgPCV5(K 'ȝ xa (PvEqF\C lnߡFhY%d粌i}P5"nq87`ӈJmS)uJCrۮJ ="]vqHă bH RsF䏛Sz@)kWpC( @(E*x ;p*2&)GuMRy[GI?^ŴfP03Ij Gn0C=->8~ĩH|4u!.R*” m8iKu8{bqCH ^g21Ӣ$Ff])ĊV /}S\҂WŔYe1eL>"̏1< kEHHL4k/D+dOR$cwLE2L 0y҃;'G,Dt<xp5ԯ߼9Xx9(͞ޅAqPw7G'''#iWPʗf4xsiݭ@8zBnb-[F RK<L?_F_e路4'?Կ?{! _~MC{'F}ǎ/;`|5 EQzk82uLByO5dJTgSd vTŒ|nO4 dNk$iSO4~;qt') Dǰ j١D0a=XwǞb۪Zm?)8Wۈ-sl uu^{N_4|рF>@|Em%S5%xgƀr+7^}_&[o X+A8P1W<.D~itXIƸe]R%ky/f6;c@:B57w]w,B6zp0qyu?8:c͝0ZY^!DNr2vcG( r1a]퀉XQ=HJ}Ȫ Z=,,sE8@,)Ȣ*{F0ͼ;˘HmMRW>J8ɓ0VË؝'8qbShsjc3g<\э޻VWmMRmT:kWr*#'20l 6 3 -/3uPVx!nnu ~g^YE"{sZAjZMnbң{U~=woJIOXR#-c:A_RRohm @'2.JSlc({4v8NFgd39Oo a4`iY y|= +p0S Pg!;Y;>?fù;rvfOKا0>]^?uMwON@ިUg!N(ATN b{6:7Ԅ4U`7;b3O'#ЇJ'@3@]_1_7.jLgiLksݛx [ Yeţ %5WFS!{C BxdWc(‰ XFXSgԂ*dBPQ`n&xjDgf)!%-*(0Ui:QHhǖics2TK>/l8`A2*Ջ6]G:&w2AvG"J?hyOY̦JE/y)yxΨ[udSR2$+QB^|"cQQRZEHބC-ڸdA> ar9Z&'$LWw=@I$ T;8錪}!6vbe@L..^Kl./u-kt5@PdY@Y| qİ2wy`XieU K ]˾,~M0ft8uL;C 9-|({Vwm@zySou\_?c|8Qo6|GMYbVzS2Aߧge7![ڛhx{:t`模OhHыjeyI) F n0$K^@њJsUM;<1?;-;g26D×zՙsG3dX^-A!;tTx2tzx2+ 'rvA "uDJ@J1e2r=˧ޚ$Xfx20$<_Вd?OjAk i+k*hqM]88Վ0롕F ʹ>p_ ~% Vi 7T^,P&!IHV*hࢦpWvxiln>.iIڐYp" ٳg]z\,H3d'Y;VFF _x}D]iPF̋ԩ̳o< yR![՝M#?!|RVH*JElb 3/?8-p] *A;9ctݳI.Jj#T]pDh`rSh$XEt!HotZw0\THdTa`Q%n?%Ԣ<%"2;tӠٗm&&Fge)DM 0jd,Ha" _T%>k&VaW= WZʽIVh4^ocu R.*NCJ;)&֦;M}(;KX@?8}Ƴ=Ś*[YՑ7+sV!2vUۡ׫]r R'`DerUf@NQm #`!5 "_2<( 沴|W*.JHʿve'8[jOó@;޳F_)֫'+_iAF8?_|?3]*^+id@HOc L@v9$Zl]Z:v6ssRJޭ@N}Ewdzٗ2h/Wo^%!D'l$nAahVP^]NsX^HN]c$,5V0vq5Lx=\*];fծ8lFqL׍4{"q5vnH`?jR:R%1+A:@#d8E`M_b\U! qS)"ԵC{~seYxmǚ*!KD'8TDy(A(PyM!t u^7c['d֞WV7~r2盧(*+-zoV֞ͨD|t/;Qk>/;| yqԃ} |zn]WGMx)@!IN[2{ :(" T!YMN9Ļ Y໼lڪ֚.cݹ4va OFDǿue+H|{yO^'}ɠU U^F PC , lOE$KeJZ ;qs=0"//ˀ[UxVhU( -L)T9*kt3:xk<)#a+/)-_|ͯLh%:+\?^1LE ތ5iuFɰ[ 3SwLcs Sj U\,'FZSxY*f5bϋʠ5+uHnh8o<̥Bz:ĆsSoUrS֎2gaw>}ݻ`ɢxsؐ};+ӕpOYH2PYa<) G#{9Scr%8kfey?DE4B X*8h?DyiiK%s.f! tkl$OgaBJihpVA8ɟH"l2.5}Ep4t@SwJ4gND"<t\H|+9b'' F&/Z؈sKLPN u9 .!塛 k#XLY,գ]:tvd\KT18_%+<+.YG}hPb2sIHzYK#̤eDJZ0V/=*_)3` J=J|`)rQ3CIO>PJ s8}DJZ• {Ï 8E.C.#W6m.0pu팕r}YZߕ.IYX6Y/޷aHbˑ 08U.vm#oZt7a͏~CnHЏGzD9V( y\ዙ4?6@3,} |@2 7}`Hfc2@)Stj]U uDBsX-91Ұ~oCͰjN5unTtER3Do-h$P|',#Hb4$=͊2nZ{0hKc a$Svx} >[,k<A?` 2)șXcua#^j.r"%2|cw9ac9uQKʖEʾ29VfBVR7X tt#En_C4 m]ʁ*5W{jxl!(rˀ.;k~vqe7hB*#$.XT  uC)`A$h0@Q  G@,FπlqZ!3 1 P2)i#|$mEV=%mhݦC}(ZbE+YXg*#NRlO` $D7pr^QRP]Xɝ 5J?iFwIQ}- WYS'pgP'mT7*='VYQ]=\'S9[L }Yj40F>ic}]LO/gtxizJ~[g~Oj==OM{{r O)3JuhC>Z*m\Qv-mLd͵?ӲfDܓ͎&BGZC/[}_R%BezAlHDJɎ}PZA;+D`#"Sə44 Y{}S+ V8 2+|?.vn^>Gj}ki "Y[_VԺ&Fe }\Dda^4ִ]؅HG+VB/x =\ {JŔ9*Cu9@,F=wqb̯"*G"5m<Y/r;oHs^uMOQ ZHjKEf9PS׊H >y{znk2Z+Ɛ%cK$h.&W:(˥]Cc`o?謌(vvhX# 9 y^d\Hq%^`r^{"&: \Ey/@a5JJp%-wэ9a +9D /i%Bx@ႋ"bDXfENU&uZ2`hԃ18T\(KlB b -qHQ\~b0 kbEXGAY:8"H$]>_%Vv aY7ZoaI_QeEXt&90=儦%?2rn/րxbwb N$u^0fib)㘛QaĂӄ̒Plq;2gJK{$66rd~u^u+_\׎&S,$:%LD1fk"Bp!ȗv'!J.2iddyDPor갉D"?96S2di>B;krs7edZTeI8 Tcxrƃ2W |O )֊#@"u[KD6 YxfZk(=\%~raN{DhlOw V$xçjY-CW6y@SKD|$êbČH/3Ayћ&u+Xצߢ!@?s|s/ĝyBj:!*{ @A[V̡`1.W'hG-Gh]$^AMT͌+D.,9.Z aLwlRծ5Whϋ5\jL*MɘE}䬩K1 jI( h5ڒݴMq_{[1mnqU6ZMHZeTw3߭ IRj7DHj (IUa2-{!TʻEmF ح.q,e!Ռք@ѺuFBړAmܙ2T:dem F$дR;#6r EAm,m>OFtNҋ ֟KU6V[wِ] Re <ަ-A"/֞nv74|b2nlciY?={A'"5 ^/&j,f ؀ p k:FhZ0Oי}PebZFѯG _Wc$mx(:Ko:ia5bw\ހbDF^Pd{1[ <: ,2 .4xٛl=wfvwዳ6_|vN}8] _}ygegf8;ݠ{b]8߽ΞgϞ}vv SGF\YIM`pNB .ObK=aoV~mX ~Sr èeh`ЦH$%X`q#I@])\]Kǽ7<[_]{zγgi7t-\\-bH ::o\\)NA=5W訥eav+wͳ ӗks8G=6\_[< Vd/A(o}/}{g7A%r 4B#] h_ijay\:/6;Fw͍ՍV7u:w[͹cE語0W: 9 ͛ <=p]rS,x%uFvd>iřD 0a+lH.쎃,7M=tK=1:{d2KA' duJba,.Q({Y+m71՝7!eP? ^ |z2͇K}piǓa9gC뱫7B0 ɬ,Dؙ ˬWe=˙|0hA2Ld 3zW:SɏoԫR[Y(b1ME-50[=nHe(PPuYEO7f[ '"\F"Y{_UmF-&Lg) )7o!vO k]aX\~9}ߚ} ֟ΌNAq(W 5iJs;? |& :Cs$\nGqj~%{n{>Fߠ=_\8<o;؞yO^g*& lے1kj1H:$B^R ʄ?v)nw.zՓG#׿~pu[Y m mӬOr_pSs>os^ck퉒ov[FL1xI*0UWl{IaiJԂM:9lgkҗ;<*T5p[BM OuQ}G[ovKs DgJ>wöNnCm`Qx;]' g,dAdZpX-z*f'#vv vkI+z$'߻șN.|k$t쎅Rwoemh7:%.B Bpϼԫܛ Kw$zԀ f .kC-}r=tT Р5fv'廣uԛ!̻ }%D[Wه7E`-& Ў) [ !H!iB]3 Ivf 8ΖACQ.?o%?o>!/mZjcDkԁlLdxzpv<\}8|{1:WޏlK̮3g~Vn}5~v,.f$Cl bG(Dh0:AmH& tC)O>c* xCA* NU _؍(FQsܡo1:H?Yxge ? JӠ3eu:A7;S o3M1UV&Q0Kra9E'N0fn2<=8;ٯjF2{7%)Ćc3./G\#XbǽZmwkZaioqV`לZFq0Xـ"pa.=4POII$^Jw߉)ltVŒz,Y7><:`SHg0:yʯD²kJˊF\FQݫn5j5(.9h QV]j"*S^"*߶.zC" rh.>C0)K!R$UBb11%(^/8|N-HEްg0zu†{ɀSCRXG8g{24d,Ki~hGs"9 FRh Ѻg4ǥ8]9v Cpe/V l EJ3nQ Arp0&O!^i|Vxoo^%4YL@#3KnVM:4K$̶4D,53џ5-s'C>G2PzWo, 蹦 X~4T]~0WqLp TAdF?fsVLS1>[X x?rKJmtX=G y( 4ݙz.86 z9ߺ#wMj,(kB#7NOtQ1 2?®obu䷃WCcLvgsQRiBiFiJaNE3 Vb FQaTbJ"(!#S!v?appt25Om٭͝/P(XQ}X/xm[E`mmя__T?lVwaUV?|m%MתޯR1+:Ȑi=dw67V!oDf0*|[`1V_6kR1@gnbq `|Y ^ l_OIcKD#2]K{z?g[˨vi@o ^%]`W;=fҰ@ߘ*:SpӖ+sGHMT:2W\.WQ9B.\ oXK\{?Gbg[`Au?dBz!f_q`1 fK$5ZXk-uh׫Ěw[t(l, Vhuj{shEdZXl;U1eHz4O.G0Tl׎w.כl'ȫ`&1P۞ -jϓI\:MC^!} @HNo "?QY>( X5|ziJY6A~q2R%dKYb) wΨ[VMn Y"ţІ*{Lb49~MaKE ׼y 8QqNKJdL®M ̑ϓbn\18PG7( 9lfGSU~jWH(@8$Lp2GBT,bКF Fb?M0\]j,i9*ju5T@v-bDzWب9 dM} +cc,jؒrOu.N6J;Tf, Ab֋R1zxè1w@ uUlt24뮓 uN/*dfBI. L[5hyP.C9|ޠ>舺pJBlc>NT7J9<'Ѥ 4¨*p>9J/m/BT|0TÁc#| Or.rg3/6TN4bZs\| |^“eU,裋yO{*6 xcE6X.L86XwD+чX{hfr:hpZ(ꈁCQ YL!> @9\=`q׈=ffk=~(,;ߡO {3S/=:}b.|rцX g%4GE:li6FN&qc Vfp]% ER5K9 |{vt>,1\_<1)Әf~V m7?1G0L=XLF^ (ŋA8 iЫ򌽧\XOIݱ%%IvI$/w11Br ecGi*(i2hokwN=9a#d֖޴t|-HQB 5B2֑hI/Ѓxu>0yM4OA61)´ʋ׋ȁe2Kcq$zRȰ]U QjֶE A_QZ6˷ Bt`bP1EɒlstdH#8eNuu ?N'@2'DUJrUi Kp $(>r4 qKؖ}xMib{C .uC K$巹1+lN,i&D`ݘNôzNbaz|K6xTCiǘ˝ \DvɁ,zHRR!Ơ UH]?bu#3JQX.jSo!Tȴ(OB8)A>!mkZS̤TG߰j6-EM(,ssrswL.N.?m"*0+Ja4r-Ed ե  Lam p#WI@NH YK|2R2FD&ʹ9hh ""**KI1%;w^fizIdɈ&:|c$S6}/!4@s;E䲁@=V}0RX`岑eFI+O{lf@%;9`͌֍n1o{G5l=,ZGx0tb]4,sO. bL<7:,|RY]ܻh 1N;h4b^x3y$.$Wň%Sc !'w$=w@ۓX)ueolN79Ǵ6R(zD!\QyF1E&ZLƪNrj,s2,ra"Ɠiy+19@sո7)"Y]͡>wMl9L:HqbF9L`4m3b1?:퇔s+E"5#5v.L6xG Pe"\2yeM3A9m)Q[=%ʿ gi3 n#I/3h '"2]lΝ=i{Ԁ?9xf9K'uZ7 D3qIE[__^pp kMgԹNs8;1G7>È s/ f £{TD\!pi$v]r|ōƔ<ϯ#5EsˋH=(HjɎQ>c7 @cE NJ}ѻ4OHoΆyQ3].QRj}~1&F4uMk4lȝN7/Ӏ0} ߣewriT{á$a?@$9k(95%i>3,*{[4\懆Dmd",dh" g15b2R>EHw5h Llӿt't`IYY>!E^h:Ң%%&{,@b^F=n?i;|4YsI$Qg<](c4!fB9lԆ)8vGGQwGB E`vXМ*adNOٯ=vBv? J0B:? vbE'3g"k }ʤpHm3vhNI%M³?W/ݫ ~ G8a,.gu~F\[[T4T1f;:$l=Ei>`}V=ExpeB$$]f/*>Bqd04^"OHc9%u(]iEhjkޜ.GNɣK' ֎ė=~&_;?)~F*Xa ә;$XIӶ| E卷wL ZkXtd&t$p-'\ 3>%:&9`N ):F$_K]+$3C'K4{v37]2=y§3nih6k#O,kpY;TnyLT%n<+Pe%ݟ }0G`$6L.R7DX[Rר\G %]\41)_[aCq-Q*jԚj`,`(`a#dٞ ³匋 $a&wѾRdjRFdȚ"",>u~Ofҗ)c%Bv?/懊+Bob%0O]UXMq2+GOge ̳sYْ*ӱN/n6{ QMW_c`3yi: wx&im'KZf хJi_pNVd`ê>J7%>Gx5fJg\b7@ Kl&=Et"߷h}frjNszqҬ, Z&FM: x+$T| z1ʐ2 DNQd␌Rڸe{?#Ayok /FjâpwNU~^~]EU=sɀwہ@[Z ` cWUIٿ<h4FG%D L,yMo'm 50y!BMjr[ =K\.fEY,7:pIj_`ѓVKtȖaaܾ^UxÕ;Y2%Z=n?::31 4,KbI0B0aOu`k;n.^EQ^_\D#H-]Lik X+Q+lE)gu_9eҪ3QkɋWM_%c鵧;kE `K#wv>& 8Cw^X[MxWw@zPL KyH Zesm)ߒT/;K&^Ry[EOeu GdTOZGftKy {K RvǏ+7}K ?{|}gU~g>SaNO{@Y!Uz+3q:'PИ7gd Ӂ1Ǝg!@Svj fu{{k O( |uCo ~ls|w¿^/WUQ^D{0(6 F("ρ,1YLCO<\a$:.sA>f1Ta<{f S8@{a}Vjvm#8ioSo(Wr)KM/!nxNc 8:>vZXk\MOM(ߪӸXBզvoՋuЭBGp ) l%V+1솨F@Adi@b)=Wք mQx{^%0;"? }T5 A/˜%zS)h Hia(`II Zmb3fKv5[SIع 16֊x1/)[e҃ug]-9+s 2t\qs"PCSÒR RWafShU.U\kW"G7캷.aUH 2:`B:0sF; e}aUbmhjOq2uꦤX&۪nZt/8aI ӺTӟ5TI)XΨ/4}ڮ6@YA)921` AwYe+U z䚄RR&h.n$jc,`.XMsh9`f4ޞu;Lw.&KL> Lt?Թ 0Ko3y7Y/0af P%\ Utj,SJOc`m2=Mis+] ?'>fX #b4k>y>:$vs=:9lG; ~t-(qM"Xt 8kƥd/RŪl/6z@ο}sL'%Jw):wOtkAE_jQN/fˉmH. k~A2`5qRʌ_9#CVpsthe/|ӻ}N͚ ٠l&vs{-V;wo]ߥIzc*{S|`@w;q|]_+(w/25aB}zi&:f4]ĉh[$[|՟|+P?[kLq֠mVefGehi]BYnrMV%T -m̥yo厏uQzy2cfP,UaY l+iCACp t5,?z:i[s}ppǶ뒢?'bc ő $ fP3h-bG7a?F 1eӄc v^HH9#ZvXqg[8NIkΠa_w66Y-R82%.0$ʛ0%C+뼣I* $ *ARxE"ø-By7G|8{E>ś M|h[54QOmH%_j| e%²қ-I8D2;u:Tf@o!WnإVbe `V[)qy$HJ:}x C #[_5,D( O;v۵ >EM5nzlb.CzmMֆ;JyVo`B9FX^፬A!U[ִ$A֑ |Dz0VkԛU|qV\N_F-&|I= "6(UcRtOyLG̓cF(F?'ǐ=.mѹ@+&0e/32+0m",GHmQ;PȬ3 &/DR-| o6G%{7̤R (qQYɹ ޒׇef6`3z݅f43b7sNKӒmk?}Q/ ֱ9-M!8MkDXEJFӄSgZ6|޻p\@ Mj 홏)S]EjH oB(D^岪I;ǸٻMjǻER etŋQy6"Njjm"1yL Qߊ&M#iRQ(ģAx1fmN#gScLZX-QaYrZ4͠#wl,sVI][0I&po$lRtjGkdEuO, r 9T)-JJ}05US:Dk SWe>^pڞ.^B"7*N#]P9OTce(ɦvHHcYCԨ#f+i!6{35MUj[u⳧;_$!c6pE$ R tG/'Bz":vce]H8K!Rv?p &FV/{Ӡ-1㗩s2b]p'zwkoN7dNm#0!E7u.^I.dT$!!\rcb3@F!H͢9U_ f#`T:=dtu%);V٪P-̵cɏ˱C 1Eΰ yj 5}L?@*7LZwt: ZEt!mq٢2QL%6 rg;8j8J"aSyxYY, K+A]LZQzWm%iFkAppX1j{G`7E2P:ľ m+sՉ>0<=T {  c'l 點zr!YHp&:zx )?!x m@T ;%jb=[||D`x\9<4,0M^0m kk-OM% X pMT5-ij䄸u91s1 `ئH/K}yɯσ #ۯbU.x >  ķ"փҶ#bFf̣<w ɭkj6|:6vM |NL2C7gjzK2>O蠫`9|wZ٦~r֘<2%l=rlqDe<1%%ɥ !,rNȈ6 ,Ж.l W }DmRShz*\I'F! NP8hj *c,7u"Vuj[rX+OV.rj|:k C#|f{h&M| ۀ9F3f I": +O^SڠTr3I֋փN0*ՓwCRr8,!zSIJFbQi V)9 σ&؋Izʑ dc"5NhuLh.:=OW% }OHKd6_FNDqA;p4cc[Nͤ/ FqUXs\}<> I a  FWl8mfo`7Q!23Vg'Z O: AJ7Z!ciߢXEp^ލ~ޮ  wD>1vݤ${xhjP~pih?kro/L"-%e;ny ?K>I9~'ê(f/i= P7ݐfn9vv`- ?;ҿ;#׳Սd_CT<'4ܠ[X^_8bb!GAOhF阪QSC(݋.66m$R~=ȕYZov>@WAx$L4uv!C$B#h͂Y a\],frqhuevB ^0m\x-w;$WAOlkO8>>ߜhk9K xYҪl=vGO0SOmHE @JBPmLD!We(B-, mSx|ZY65,x74#;!?TezƹozuvCvB;c(7>O v-B~Wq5q.;wl]n(z."5<9&zѳP 8(bpWcrMN\GxE\tbFs}HHj]'tUǁ3um8h7b]u0Œ;FM4=ÿM1'HDJx)a* 42P'UE2]_eX7UtYfDLy=k]T6B =Ql+!unѢE"޾¬w^vW8ȡ]@ULE? k-Db(0 3;* Fx7`n\6w@9s7Lǖ-߃k`c"tIG h+(-4A~4)NfA<-TzZ-,NtJI2Z2AïjGڐRxIؐ ˯`{^Beg0Q2"mL䛮q6ǟsΉDefc#pֻ/'߾xzU$7nhqR<="+8 h'k_mj ƕq8,+E8IHE3 DZNQs9iD6N ʘcR&)|slkxX m8?sfGH̄y WT&$AW9*E1m;)qIF(0F$±Uej )ƀ.0&q*VPk 0VxҸX'Qu#8%G}FSMgJ28]/̺ ؚ]iyJ0u 1Ń#p8N)?ܶ@dۀ* hEf, %=}T(;=f BmNϴs;~@M9Jl0ѧ-fK4쇳írKʐ%0Kg7*%<7۳9):ll\[2vW}"##ljl)䒡*3ˢhfR8|ibh3`cLMEI=ݦuJVJ.m"y^RKg$ֶjn|nFvvعFC qqԙÛq`z bITc.K)3VT6`/$ k|K'09+]@pP3 pl \M{V,<<6hT{xFj+`a@ f[g)U/p6׉Y'Mo±1XJt`0EQaTX}CQژi^zBh\,=69- q;') 4[I݊"`IN1AlW`)vF':1"rF6uo=cF{CGtV'ϐEo.0A߉:!'#Xyp H]j .;sOq"f8;s-!Ľ.4Y Y kkk s1lMI$+݆ ~i6^$=B,xt2SxC ~[7̣'9xP;YYa8 jgXh0n|f3>Y1KpK<,..PFF.&}] 宱ܶ&n4O fiQxYwJ$mrco8R=fn1.jAGY$"6GZ֖;lU-).Ҏ6Dks|Tbp 8@.n$hr18,ddym$"@<Ey^ΰ~[9O}KϨ#>")5Ertyļ+` ٧6$٥ {8^M}ctX1#+f*iC>w2s1#fòo@yS ^gwK/^9v@m@אgfJx'=vHGf(H ΩRsd"΢8g[i= /sȊl R%2.|x&N9+nswĄVrhrq52nDť tF>E&o3"ڝ@1x6!`T,/'۽=ʝZ=s|ZtE/*Ͳz—Bࡔ\/bKɁPHs`E~_}fy<8 !s2r+Dglt-pa.!`\ӄ] qyIܪ.TfD>n(@yS0lE2J4 ,W?(AIbҤq-V0X8s!ev ^}+5HBТP20P8%ފܔieldy 7R!s%f[5y>Evh1CƊFUB"VQM :ԥS+'&ِH+tM8팦2)E(]el2QT#3"3B|Uݑ=G8c(:fXڶTtlp:9TaO7EN`/ X/BMBK8>s| &j}aQ|\_5 .*jEp(>JU|*@7BF&|ry Uј6H^vsE>@ަy`Mͥ6W}rc$6э-R-ȔQy'x 7ʆa6FA;؝§'\R# SLGh͵D'L\I>C\+_+o66_X}G|L_Uإ0/˰ |_yDţ5 cFc>5]0"@rc`]bAFCh* Eoպ.ݔ\xUy'#1*g-6 pHz?L6ktJyN&Xn9M|3VQbXA1:yrD([ wCP$hÓ`OcDo.̮;턿8n;L1P>IT[ ,'@F6λ$*: {&TR)vܨE#-D{V%(~FQ#խBObn0P&X# lJ'6pS8㰃 jD٤qӻzS5޴)Nj{Ovj߾kwG{FSU!g9K&\OqlbnZSzzتך%U??٫-)h@~ނbR;MWSGoA~V_뭟h oC tVNѪWq|ԬqZ{DOѻ̿0ksިpB.qm_j?`:O<٬ jz ӛ(+'TJ4O^7[IR7kutUGMZf=%|Mb5qOuZa I}e1V!MV6k@_xW \PZ*.AVlþa[a~m xMެUQob:w }r@G0*RwRߨ:[ 7rRhvrW(]~.l'< qїn[ݎb_hB`5f=}776S6qGdQAy̮,cpx˝aE=o+c+}\jB<0Xˡ p6?|Np 2ޥrLn!e!7-awO{l:Hul^r7kXUnf'RxJrT930VCꥤLpx %a46*aެR*M`&dȧ]֜PC-㺈%J$O)S"Ӧ'LQJ *{l2FV.wW4V5z$3tGCߦiB!)W(7:;# C$oCRKQ^QNvNp%I3}G^oLp't0fZ2Ć5gVYm~^vt̍13Ĩr^A6Vfd.\br-VZ}iaaloczm(*.B:6G{''M6 x>*^܉>zAQ-O+`#03M4D{:9!4xPok?m!F#PA蛷|Ӏ;ٜƴ*@"k(|DV1DO(s G(a1'jL؄t*Μ1wW79 zZ5j(Mwoud|m*0og.|tΥ֞ܦY='٦}v5zjvR\&#!7,Y/,+\࿇bůLabQ4CB뷍CC#YNtkR+o (Tukb3 EQ #] /6V{XݿX(iG`mHo_׍uryho4>xP}\E #D71Km8-=Wέp_&rY( i:g҉%u°*p~m @pϠ%rTX\Z$d/-R.7 C"/吐sEiT P2;uId0ki2gV rsu}3 M8kJh:8K1Jßu^W4M1 nQ'c9^S]\r!St{͕"}:8kk&q6Gt6,ciIaBe=UWF]F6هMۋsʶݨ/b Ao'@aez hr qQrnol#OQ^]BD+ k(KïjOk>7娨NeD,2؞)&D3# h(*j/bgv;EopJc!HC\K`6;'[kߍ>>頝rʫ]N=:D=`Covw+h2ܭx;GKb[T[Pj(*@Y zHvƂ#Ϛ찳#C[ݸ+_(h-lAn sL9bcװVfX.eO'k(m"QN-YEZK4joDOA4*V~,! քOUzQ) z J [{潳u=yly5<:X#Bɴ(,nO݀# ¡-9y^_#UdA%f39D>"rHHr)Y\JDcɼZOEQD-,.ߚQV.8<,U5s(YCǺ|ǵAIqN=; fV G}R?@%IDIԻw_C at%Z90/wYzs/b)C{X_f A@js5@ĖpKtm`#Ih4όԃVFW!cY_,k="<Q2% 87,U90H46Hw~g'6|;E2&00&ЮZtdG&HƜGG5 1KB;E bR/n-=aFY[<9Fh[Tʭs;mor\nm=E)+ˋ A k[Yi e*"cr8Gc{d+0]A7/W_>] =$T=u*ZdiO왂I i}4R-ZFe 1dq/gɱ2s:P0>cR)rRG[e@fEiR+WZw%" 鬛 8Ap7"Hruت)8sH= }@ym?&mc4*h2+̾'X3WokWY{6)ٯnziE?,W~>yL$W_ll9(7OR~qw=Ool>x#>{ZCF,UVjuu}X=ĻkцwQ;UϳLgt/w;+d~^Z>m/IJ;̇p_$͇|y2p%^b"M V?ev+eF K"3@#&6KQ @( #4dA~@J*Va?XO1+^CekFݐ _AZIlO<8AhE"6/m 8f˭Q}8LmP dmP ېX'pWh'A}A:3 ~ ppQYۆEtŗ]]*~-4LkIʷ&Ϻ^褱[Kn.$9GTvҽTT@Eg ,x/TzyωpaԓMHoWOJ8鬐8* ~6W+>tWVPJŷ16VLVYwЮ-PiEph:{o]ǯ i8?}}lYޝuWyRo)|>{EK_)(tع Yy&]r3̇U1 :0 " wk[d290듟\"Ԗf\躸ȱt46K)GO(7\W~e:7{1L$>0L4%m<´Pn%Z@4)Nڢŧ4zDa:=m.d*c}$2ϱGHAdq?(a/._~qƘ6CmGFꌩr.0c2,z [9.Dz(nɄ.wdzDLSO_%'ix%L3:wFe3Y/z&Jȟ3$?/U~.<,ѩmzs-ΦGKtDIPfƙy<|>y<|>y<|>y<|>y<|>_X