#!/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=c367d25d595cd354eecbe943102c1943 # 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 9b ϋ ֍W$Xܧ֭IՄgVFUxiGGCF%\GUas?iLȼgkY17 R4 gqBu H̃`^ي' MVI{)MƟhfq8IisM,4I=zL cQ3@!|]bo(Xtz'G ф}hEzɣӛv H–^ʓ E.y0Th<و<)Q#` Riaæ |xQger& xDBTٳ6V2/ECw_vYׯ^S:=ҟe㿋nħ[y35PQD7-ȏyrjף~}tBkv娳w{A~lAjF<BUgvkO=Y/yMȚl\Mn/` 1C$8ݬ8@:"G%CU+P<5~H2zFMnMÁ$r=NdM Y#yL\hT*y皃GCA"RAzZ)\<Pd@Y]3N[6ޚm{ղi y`PA)%dp(Qhv mk/ZQq5 =728;{qR5a=ӜB"IYAeSf7"]T@p BcH#M:L *d>;H3m54eb;&O,lа|K!EEų:>X\" {l 9d,^G@"XDkM7)r"n_zmzg_%WT̾ϩZhm6?XH{$o]CNa {5N#f0 wc3s 4['S$67>,.zh GSaSHwԿqdǟxR%<4mߚ2лD)ٯ_%SҌIG>=V>I iBˏySu\7Z c'{RqMJ5,W.Qpgi\Htx$Uk3d ^ HFȫgxЁ>PSTh'8 ^{)j 5HTt(ƕ'q!>Bp[=oM>C@/Ҁ6}h.-H\ل⩗- +d@>bReAxDGe0{Uɜ:xWR(n#%>Vvz\{ѻ2 >&KP"Pd$diAqĆF|?Pi\㾻UJ>v9v6K8z8anklc{G""rLFeCSTtQ 5jv1x9Ek <5L3>)>@q1rY>ϔ=/xǎ_;F^Sg근3םOsg9>?U7<Τ5F$_e`h]WmZ4஠T"jN*ke;PȽy]]W=N:uZz?Τ=tZgJGr#+X -Ff΃Z{D'zF ~uU[gV^B=NgܜTq^ T/s |B& M2n×ؿ^2<ۧNutO^Kh:ɮZ0G5( eXo{b+M~WVMg_ &@Kΰ7ރ=c{@0t6,deV.TpLK \wTB*tC>@%xrׄR~  !e;]EAħ.Nvk8?Wuw;7dEP &:67$]4q۬c0t'ؓc?xaһoO(\MlN8VNE+x6DmHXveJP 4GzPC$=Vfn`d`@nta \A%!Ԡ:RV-)?V!v935M p6/i:'MP%f; A7c:移 Lt4pR:8ChXdo-ҍ;T+<~q=-<I/{uqO H~ـyyDGY'+:b^JIxFdEi-}' ?.^Zn+ laӋV=30V}{ 0r;+gyjʟP &-)Tn/umjSQݔ l y9FßH/T3{v!] m^.C'RS2UI>3Hwp!SaIl0PfxԆD6p-7 '.,j8C z%B?;[^k^f,w H64ڍO&](͒*HSեڥJS͢b:'?-)7Z3(j~e{Pkk(W5-8ؒx"+cm5%[3 - L m)]d45lTS]V`-d-P[@1"/@ *=Bx[\.;7#~HsrAvba$! 2+_"(  >z]*ҿ1-0`{T3@0 h!"~I#wo=7tnțy$vt(Eoy*,EVKC1t *{zu!![&Jf VuQZl ˘GKi}.-2H. :4 mJ&_כhG',;a r[tiOwRcT2/5|~NGH+hB2zUo)jƢ Y˓hwS;!07)qv؇D6c.X:7ߕ$|y$(ˬwx݃!uhрK~ {T"^a Aw`Ez^V)nz|a)2s$;]S=z$÷\^dF?Ȍouk:>"!Qk u :%L~jǭ ʂM!(-GkȥțO8B6 *or<>%ܮ1Js}}DI UW4Ftq侯~=$4 cWZދcUk mC``՜߁5t'o7_ |EfDR. t`EOIe.bΗwp "؄ r;Zg`^:hX;ܫSUGP]B"nmB>X8S;IO 5bSqfKp"\E^}dɌFkI[]ytXyEuIAzZW^0 $USo5ԪmN-51H~F'&m&֤ K#=P)@aVqT&OL(EwN^1Fq74Fpvmi1HcY_6:qRQUg,L ^BIaR)JGR;suNz р`jX G"D:.pg"3 wn3 [_`F6 Xy3 ]{fAOB#7T6I&U< Uv5KJw(gKL˜M }%22B\mGWゥLr4V 6:kCʤj%JyLۃ'4-N2dgN61x…=d~E# jC/uLvy&vHaIȱ+T,.Jl=tJ39 ] #>6oqSmۭQ:boʯ}[PS_& ↥5 6Ŵv{4nܟlpz:G^8 ,EI_@ռ+BqOm(;s_Y<*LaBt$[{ꯁe=)736bqec""Yd;7 OyBe? a]n?G5χ\aR J]K)< w*HLo YL=]bn=A,c,5Z D$5:ޫַC %dMM!=faE(m̛=gɸY]\}'O i_9i>^d07[ImҀ5eu<8As \L/>48TkcJժ8Z3:YQiN\U߁tE2߆^Fl0VJ)⿌.( P$4%%)eTA֨D+F92V{2aNW>sM׀>ٹiֿN&-Ж?$X: =hRfˈՌ`VCYx dLЖIv/RBiFÝ 46NJ4*q^h"x _V@7vJ}W;q€H * bj+a;oݨe{#[Ȫ Z*1f\ q=Igj{Lrf!H22 "&j*W~?S&e%a1<|1MY-,؂ЇW{w{_+ Q3)DGaX <b&CyΥ T~h+<<{#$+!fbb*O^E\5 +?)ӨĮ-6觴Y:˴ގ0瓪7\?+mzY;<{֡u*5_y'۶뷽:;N v?mXą)DžT)ocF*YM]435_|g*,7T6:Oe~2Jf: ow;O{t!7r|d@MueK$u֯:z`p1<uR4bv -:No1NIw1H0@wtxN&n@}*n`R|kN yV3>f883;EG.A%ƿ uw~Hfڻ :ؑ/=ۺ3-cY]pz&=`[{ /y #N78_CV_7p34r-T\M,& lYb3l(}'arf}`^klq\$heTa=4ESQi9$} i/ '!|h~JN[`9nl+e!xdB"B%FY)*QQΣP̙UJ?~{&\'BL~`?Fa>\ w H=N% s~|i02!f$-qd%5LΚ(v$`K*sرe91uOFBvVs% kI0#™#{I Yfrg݂CwqaƢ-4ss7~n6JLͶz13)!ZaUYM^H+wYYdS|Mm$@"boA+'UIH^Xuhc-_Wk6RSȱ29Т?HqND %{Pdf!cfetVϜ_4p'O6 W< Ju8MX; St],T |2ik!fq{^PSñ%\sŐTυ "F̴2fH^_h!&qBW.ϡOiX$4Q|xzq5.ІH/R~6#^O\my%0ͦ{Ik 0W6Yش?x$?PnmRnii9=W05< ΌFaZ80|xF1R+K(^S$3ARȀj+̸d0I Zע s3LwO3f֍[&D(JAE]:ҟ;2}A(n Eb« q-K4 +YX ×=rw*rdF|xuzŹ)t³obmE}4uYG*ƒ&b:S;v$f=11m _u\.~-m8Xcr1FR-WV,dwOc͔k ̨ N'=eh yMs ;-i+o Ԕd:~N%0EQ:{[vY Z6})Rx)c3mDL:?V-wsQ)>1ݰ&xΫ+ASS Uu6L7> BIE9Ch^Qh J),}Ύ VJTzdf (0XSh֤$[PFg:")CmO;i"]7 ]}4JT^ϠU-rYc|NN,”]{2e*)p#@8(0 ߉F  ۪;6FQ K9YP2ѐ ~݃OЫS|#Ef6_9zG Q/\ p;5RBu(f>CIܳ^ R%l$z|uq^#뗌 dIBk6aTS'nj}PZdt:Z|ͬ(眴P2 $Sa|6%OqA+Fd̯H ƩRsA2LgR50{lB3܇&P.F'j]& NFzjs9h||&Νa!oRkoXC:Y(@IL_wx"P18ҋt1/`Tk/{•KYuKSs&冗ҡ(IC^O#Ьgx/x(z Rsy4.PKnJEf0h^$%&)z9*tOt"^H\n #HMc1 |.q`h* "! ZZp, 087K$''q.00Ё[τBkxHBbh(v& l<7}𖵎vJƀ^7sb%f2sxG ]1rN|G<U !2jW ƷZtK V&YX&ڡѩU91Jd42?,eZEh9K+)0%jJRm +tPUUa/WEΌac\Bq4C m T9ۧ!}z0~qV3WӴOBZ GPe+/} f)qKV/Pl= Xg@(+!P@nIG:=1AHeKʓ|aIƗęV gaB1YnL\Y#Lܡ)|.E:BP9ttMv&xtfN? >.oݐ}m}5rM>'%25!{% = BOGI '||) >g\' jjyZu{7L|_Wamw^ۯ_Ju?ﵟj{R1>>oO˝3~P/U%y_vF9f'.%)mNc$ A8}UθW ,)gutM,T@b+Iq ݧwwJ/(Uh.KU'P :ih6\M8c0&5kz*5J}TRx҇" `P0I%uJCCA9^~v6T\9q2jEdCY3v9HԅW!B7*@jq4rȢ DJ\@0}kUf/Tu-oגZU{VTa+TSq?M^;3Fx$_"eSA<)K^|qI:@!5^LW(,_K: n6F КGzdmT<;,WH7ϙI2A枠~ap'؞HM 06pIaU6u/@\6 ~mTpj% @͔kB%'%˺RrBOBIP]94ôbJͪ[\.fV;6]fj="D);Ov-":edjKuA<%N)lHj&LF:xcS84p^"16 J"t+9=w/jʭ { Ovi-̤VZ';\'bq_G1%CIn0Kx 5$H1u7^S)؈ii8N]t.K2k=7S)bo0[vkES\6nKwd:ꈅA7NJ] vb('"4H0s )U΢N¾"RR&_ =61c]&3kBj9qZ)i#\u{:}I-q v׸a $e,*xTŌ͸0{Hy֘˳~$ٙ#VШ9 w|MuѺoHYvc36{/>Zfݍ o0Jז] GpfJq8g'TDɭqi|r,B6 CjOg?;Ϸ|hsq6~ޡQrNnϽYsF" NEٍNMQo:܉(ğ)>>\>ViȴDG^w/_7 ȫ{V- |FDD it4HGCq b!=EqQ A\ʌםWɲ:LrTSƠȂP4F8j9a jX$Q$0ѓs4/m # /.3$SϳbДQHOO(_od؞PR~n2^5$&.ވ{cH{R|b@gsMq낂.l|pPG.c#΢4Qω|(g TX<3E8jXZc\u7l a? yTr #_(Ƞum÷%>@"èppQc'^Lmlӫ,kwip {2g,)eۃxz] <*BtK{m_# ,E}Vm2j_w7,oh<uN>WDH-X&_/Ce~qB}vk_֏܇?6z /BА-G_#! ÉhLM/v`|YCPuR' #L)@uϝ3rmfRSї$Zϣ~+lhƪok2iNl54KF HIUuM6 ~.t~d&ElY[BY-?_Xh)OL>\@~x G=<㐇'j 7Atja!X [ 'Ax3p L%ϢֆwFkhpDW\myq ۋs6&HT ) $m*ɨy ű!=$&k5|#A 6E" B*?>^(gSDP-0E\2̀\ ɔ80"vϫ^tDU*(KIl0$m!a'^F׉:|GJe['SHܤLv`Lu,**Sy|}bE'fC-k12V(xp!Q0c*:%q?za:@ Q$]2\0.:IψEV;>LM<+_+FJ=vHod QmQCl>ZnAQ.Ioa7t)wBj19I^(PQOS9C)SUveR|P;b8{b]Y?\&%5!6p؆4ϜuyOGM`Mlu┉ a°1\mC +G Wȴ)"eJdSu!` g%@5Ub*Y) 0;;J85U@C2ngQZDI3+A ĵf`hpW|)7-5RÂ/p?F9<#O/;lrcIȟ Ɂm(օ/>z(qkt3)=b'a, N;-+y#!qI&'0i$7tvN?{D\Ifmf%u23}2I5PxhOc0w^gӂ$N#,5f)F)n܍wė7tg:nXƜ (K3kKأۡȏaԹK-2c{p,CpA Ymkߚ @m ;cxT@0O**|DVQ9@lG ΰD]0=%G~ =%xqK }6Z1F_/1oIIqGXoI. -!YF!'@G~[:Fˈ.)(s0X].9ܯ"Jၶ9Siy /2$'̂{>td.ǒ%LYTb,hX͒SZk@.̫d`)SY*Cٷϣi$MlX;iHcV +IɌ}p:;})~ع6mnS9ܘ{ULJ)~!RL($CS2dE$Xj pNj:sN;sGV9̡4,NIbQ7TːJ/^9>5iR0y<w 5` *Y"QZsƜ GL_2Cm&eBt=飻v'v~$UqFMEg$:Lvi#zؑRh Ek0ʚzh^ !q'1?iE'̉(ڰ kx+d]~' mfE 0e1B9gʞmš]RHvuNQ?0zp[of&n40sOFuZs lҍFsQ>k??)O'WX몌۟&LyyaQZJG=e@nbtEgBPvl|2˘R%V@;h&`Cin,UM9ނUvU%_'8KQ1^drWh[c쯣T$z;I?Do7Zc ay~,Pep_hk|ż:=nvX[&wwx!n8xH 04tMONR5T>z'G@^7RzMVO+{à%17$'%t7ONAshN76ԉN#х4z^VR /i40d4lN1wbV,Fu¬4Α*L3j@3~?^aSVs?$[[-ѫ$E=`"L}5, L7=D´wW 7 ۨb*A"֨Q$pUֵ&CLGO P[_jֱZ@`>PF4#xsfmmAPqv2'Ӳ4ۄ;L4;ځ֪ÇPq{tqs67mWSϹQ8l֫kS;8~cg#ů2lp,8 Hl۫vJ\hЩ'!Vsoj5R%86XH/Q}] Y%6$3|sN5c.+&O<'9tEg#1]xdNFPNϩڥ vo?쟥Ƶě4tZ 9&cEtDS]hOfotW*hgRhԏz*IV'bAJ n_4N*P?@aP{'Z)boնEԾ0oT u@c#?jZJu`34toR̈́ߍF@g+nau56z$F?>0L#$$L·EÑv) cXp^:h O i=!jF NxoMh+)p;,zSIJFb7QQVKE-`M:1I #ȵDf$6u,9St@ţyQ_% ǡyIş 2/#M'&לZrGl$XGqct rqԎG@1F򲺯ۙE.?}[ &)v_W웙ڔMiwkpm ]f:ʃr0bV1]F8.y@0ֶԎ?,no[E}?QjXVi)?FMMu _sx{< 70.jTBNn:c30/k@EՔ_Db,úu3|yܠA&@~e*PF9I{@%o´Z 6`aS r[pTnvLڿO+m"φ@h^%𿞬=NLQg!,e ǒ[=KYO\B3F,fEIA,r@Ce?c$b%=A}59`/2JZ\M3C`Ɖ7lU`YpB2rd7ƣ1Q'9 \]hB`æ`Ѭvvߋ1rw5UךzW"LJ˅[/ Mz='gԯ;A+U꓊Ws2nS -!`maEXdkGc" nK~NU>`ho%Yӷ}F$vx?(b?\}~rxJoLZQ{ Óia@zgz'Iac".ĻaJ%b>ZEba!>Q ֈm{ZoOV~awh~m (E&)-dgyx!CSl9XnxT1n bA׀ N/)@@@yŶ漢5l͸,<BoDzQ~au܄9aHjF,4gVsvfDӈU{4[4LSSπwޔ?aeG˃o=Q gb*99E]$o=`)똶upѤFXݏ/^pQLA gEXA@ ߊ5BׁhI?^-co%jWwa O2,6KlS[V9NZM 9R2[N wgUrԢpTh%n L[Ptۄd]yAɤA(ƥ5a (f8u"@\"a;mV[iʤSM:՗*ua{SMT|4 =KBNKagw/+qlƗ8DoޙRjli[HE/k1`=taUќ7!]ayIܼX7$ o` N6?t /kClwk>|V'QCp ҹɘ#`w]y46 zaCX׉'\}Z+40K v>  {QEm;G4R)E޲Ο1G^ mA|D23]?d(0+J ƘC::=v,r ĤǀD^4čCݮ~$.n!$׆Ӌ RN&XA* >_˘l9D\Q拁JdVw}l#Rgd_wZN9X l]sPj['<!3)k}ϢH>KH,ͯr/3jn5 Dzq1 X$6du(5#YBYT % X;;-kТ}΍wF19]5H*f|/S ٰ'FN 6!rwWRQаfx9tkޱ e75FvDњg &y :S_ᏻKk>sB ɹ8u>_*H<&u`f'v|60s\< Ł5@C/jE35b0r[8`P1NX5 cJ}9 EB}HE|mbc98vZpAOZo$1Ȓz3)-`48=D}I2.ր2J7iA%2곑xfYqٗʤV(W M{\X#IqeX`Sk dϋopNAxGj_sÕMܹ$N:1d31y*0Oi2R{ ߩ%QGlQ|%n 'KحacoE=AN( B18jڍE`tX󨜢;Uɜ6%"AdW#$u݅64& ě4|)7}f/wfu3JAj=6A52B~z ŜJ|'9f{Tg,$wLfG[Ş.g(͖S/gx3gfbMFϨo DWIUfٹr2ԝ F%Vm-szhiIVc)%ͥnY/#:M[C:,f][L喧 uMqO:Ek>McEL(@\P˨gMˮӦM>p~K_z$~;‰{9Wxܼ!2(♠m?S&R%%-+$m?_{YS /};|ĕ0>:I ѻ˘Ȥ} 1.+SgU3%O'Ca䡙2$F(N5 ڮ?rE@%%!X47stɫ ?A~Gl(=} gxz>!][iCqJffx )Zwwgs2,O O(+GUXUcngYAyX_>S$:_I#(|X}z_2ݢ/^HdқtiQCz˽7Ḃq" V=h{W^̛|4^4#P̶F/1Q2Y+KF&A>fO]SKR() k{Dk6~WD(BLϴ>_ЊV@(zxĄlbfzP΢ڊ< -spHJHTdyW=wNl;sjQ*l5Ep6a% k+%xªDW(Pr+Jjw&tA)=dmUUI'O @呎ELfA՟).F%wIFX%2_AH}}X"VohV2xaPT oyL{ W{ܿ r% /{4`E7nlE>$g{۽*_Ї|_;uWgz0mB MP!7`GI^bMusL)f֜@M-=br^E7Ds$9G Q}8c]xv;1 /~9E47P{p| =r ^D^&v.?dߥA./0麗8=- yh)ǩ|M$V c 9]6f 2emF:M!{χDrێPJuM )X)d'k`}6}Q+Gz-9 =Ry!ĕM<4Å{Q<@w<w%@tMHftVZfɌ>uW4f'.ݨk'}4P8LeZpLU ItJf48lZb9?zӻ{ &HZf>T8!31&G/Vqh+_\6 }n年q{{}`6bOBYWpZ?3ڸ%?Y3ߗpt84ؠ#,FO&WV*+ytz:_nt#&h󿺲||wUZQ+@zp:#_W9wZ=g| ]?_a(Α*?vK/u;'D!Y^QqdsdGp .{6Jz_=,~:?㗍G|%U% #@D?~(orK6dv}pjXY[-C*T|JUn_Z/z _v'AuGTUwkt9HM_wݴ|uVv*˙K8|ީG՝us[z >P M+>1SqVG+ƍ#ȫIO˫!Y>;V̭wwM[}+DEr4%6uE\HF;ê.͔˪ZT<;۝*kS*jQ^N:=;1w4 1. HKӢr/:cqm fFs*u$6oDs+ 4v#N04e?l`.Chqct3Ц6VƜIНѵ'Cö brkKhgJ DNf[=¤@?9|Eq?h S0B("La1f/Cgz1E0Jodp?!*>梅SqzSowÚ)vm[Y7;p޶"$ )PY~:85ԡwwT5Js]{]RP?R;;/kjڭn՗ԑW=l4VUãNP7j9v!yjok{Gn8(s/kMD`Զp@-;NI5j[uS S=: 8>%'|AjhX\Z}\$YdA̽$N %ZٝE:v)0Am) ;Ɉ+};'>K0WqA3NS G]a AfVA<6'$4;" `2T*H19p昤8k7jXSόhSVU:wdQzzZEUÄ:E&"U$;0EAmMo%Ӱ3HYA*+J{b70}N=&e+F5Å95(ϢqtÚ**N&g|Y{IP>}޿A|s_6]d$5JMU>pL7['xVWQCmx0T @|WVMypi)! YN .EЫ(n7!Kvkɸʬn4 A1?ڱkqUv[Lgǝhjc9PJE-<R OY,ʪqy҇ j`Q%5#Y2rVOD2QSe 8n)׈jD of^geFתve}ofߦ>h?yuZkɤ Bp\F@E|iF7>:5K'hJ4;pq NX.G nK筋-<@ dF9[lf͑̈цu;a5&VL]x#Iu^if#ae:*1g/ KELgh+am`4%-ĸmz 5uHv1RTx .i3KɤAFpڨ%DGTKpLGI{)}:Fc)ǽ ;f ф w~Jbdȉ(!v΂/AﰠL}$b 62DIs`1O#hǢs+<yd*) 泵 }Yu/q$֝5Y {;K5,3A'}R&|04R_ٰ.}'fnƽ6\ߤJbMG~K]z :#BX /%yJӏ$6- RmDo+bVn5(&,eHޫ񦋫c_ 5eҚ޿!ܫ%@#?$ے@!!}捎 ;LNҵct_fNXW0\5AI]4%{G¡C8^;HӁ<[3JHDSݱزXs5u` {^F?k&ͨYÿ] Nȟ 4D8ͤtm'4Uϋ c2rD>:EQĝPP91TFp@2+[$cQro>z뻃79e݇1hX#U~mT5j^ؗʆ-VpמZ.~x5!/#%vko$0FN֠CUu,|qZ!3 1[KH${->ggkѫE{ExEݒ(r\nSE6Jn闵Z&ܳ.4#ƮL@>Kjy?Ǘ 'e ׅ/#AFG>׫b}bzjz$Ug|]S%nT_T/}Wji[֘WL }^nt4`TC6jimu ]LKOɶ紴i-G~Kkl-=N~S[Z[rn/a/ b yo`s5Fa3}Lg9!sG|֓d܎ɥVB4%BU΋JL]XѵKŕ*#eC%E5in!ؒ9t"S: f4RP|["ZۆPd\h~|5v>aJmQe)VvQtоN_t,t(,KUb+qi8jZ.ܜ bjatYI65^hG,Gq+%y" ŵT[ő :<"ѽ']Jg-/7_BS2Q5Z43lըY+BoYMC[<{{rj6ICnUw$q\^޷Ir#/:cI}̞SF`θWxJ=E >OqGUy pVR`q:F>`p$Kȼi/n3;1K0kKfFUCxGIbo&6Qz|f_:V7-UԶ@9ęt`M]eV\?n;D-M #i}yye7~!fyR~R <% /I=xGiDm۹娋 ЮڥՅ{;%`:er3W[h_ӵnd~P;wLշL9&?gRfh^.K՝=8Hoơ_t&RDB:ɥN:ӵ">>R[-g6.*09yM)A*'OV/?[tr?^Lly==][~|jVONx&%A> r I,akW8vl kFhYnn56Kv̴ЍT_Y R2?-wIM_9ԵwJ8<YdFvX b{ ЋaR~ê.󤵾F[Z{gQڳG+։郣Zh ac\%'7S?xza,`M+qv Nt ;I3%zt)\qgCvP`,ṩc).z8"jL3#YBw0(e,NQ({mW⍛3ݝ7@BZ;'K_ >yh*3|Re5;?_"Wl]]&Q wMqWϳ@UE E̓+TǗB%2d^`b zq!;rk?/ШB i^^!z3(++d1{o׋OZW}6b/~6f/T)ޛ0{w{Y^uK^D fUz2н3{id{{ |%|/.TW}/\.&qN, ڝbNH24'a殹8jTlB?5%E}Z)vk=Iռ)k$|.e2y٩͋>* Amo*|C Y_w{L =4Sai姲.sBP1tOn+VG=X_&M]W*N0gDZ!A0ֲ!_2uQ,6'Ǐ$@zw#~S( HwG@ZCbR.g˧s)Gĭ/Wlk, 5, J9Z}JwVۓ讄t#FlճIP)Pu2̡:`m4:z{3,k&Sq&*Hss`ø^귆S 1U#iRdL @qrs lzx5x#d(/ \'}S5@W;]9!e4 02hhl`MOhl>8f:~\VԖ yLI`zQ{LGsҷq7L{'$ wB❐x'$[ S/: #L܏Y?aPp<%l*dCws}>ws}>ws}>ws}>wg~X