#!/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=9fabba744713d9a263b463dc43f833e5 # 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 `DZ^7b$sG?//X7^m`qZ'VYQCMVqA1#  pU@I0]# "gADNfLK6l'K` ) Y~0fVy g+,4>[%CCz4aő$HpڒDc/K 5MX`&VDMR2!$Eqx Bhum`YK ,HDk UXg%ROo1G # [z)O/i`P!(2Yf#[rlG#HB lHq" rT$`(f<-GqʙhĂ2*,s<*/A !Y,0gx3lzf]Auu}㲛ag3=x;pmrmp`_hg6 mfݎ1p-i0k{ ]ѷn-aޝȆWִ7ոVv5FZq߰hlɐtukXó˜ L(.MӸ웸ڳl"OS$] A&&pd c`[=+؞6op3t\&{$qǴZ] mHJp Z/ǎEҳik uw Ӏ=p ΘC="FY>4ػ(Yp@r]+ W60ֵ98>D<,ǬöYX4:&q2ܨm%nж2AK {OP,\$X8 fa7ZuckN ~ZyOނWm\GVsUk'#ý鯵鸠 xbi}4Dc.M)~~=[Y[իUϽuqVk,[g Qd3[fʔ|rU~]WufL^zu(O9;{߫ߓ(W6?I#>6'o%GOΫ?NgԻkoZ>ծGf!4Qg,h1PՌ0y\=~Y: +)k3(Ϛ֞z3^/51ĹT_@c0Q%&?HqYqqt !uDKWy-k2"+8dˍ ܚIE{b-F @QT ;L5,zD 2 WR^;yہ"oD2. %Mב {Gt@Td}vZ\? f*ۢkkZi̡#NY"wM< *X<٠aB-g tYm } ~KsE (8gA4J\ s*>/*śYD) ֚nR#`3Dݾ|+2@,ϾJƳ;}#RSт .l~H޺Ry SM+g]GTrfEދ|>*['9I;s_:YG900H: R/|lWx:(fa_ ĢQ֤6PG(G|p&kAƣ]E}*k4)t Gea<8gFf+iZFOHln}Y\ Hj>6ُp%9""Cæ@"Ǚ%Ȏ?SKxiڦ35e>w3RV{yxO0/A'=jEZs}_K!T|&)z|F8JŅ8o BO$iC dkY\?8)I֫=g'@ꑍ0W 5YK}*BOq@ R;]/"k/zuZ2'D|{ RJUlD~6"_,-(0t#Ո/'\*+cw\P`;:4} G mmlh1@Xd[@R.C>{5T}B`Xب{yh.*VҕU-.]<&/zm缆)bF'e(.9P1癲}'~?[w?ysZtC>ǿ 'ޙhr3: 4ܱmU+4[S߱v]ADZIe촿c'ux 7ϼ몧i\NKיW1N WHnzKP yXtuϚsu`W/_uW֏?wj QJ9 ]ֱ'i#9_l1*ҫE~λ_4O}фv> |Uƭ~Kfן)'/%4 YdW-}jdr2=&Q?B+&y3UůBo {ރbbgݛbý :D^hl2~D+nijtsԥOR!eL\t!rO<9kB)?OLv." Z ]zSvW@D'O`5+: ǻQXӛh.ꎀ8m11]<0ݷ'Nswt{t6xAj "LJNLt?JU6$,;2%VVio#=(!zc c370ZpGh}S7:ݠjPNM[)EAԀŸXՐަ uL{u& vvıd]UYb&xR8h)!4,2L_Tl*ًlvtCǗF=V:R@[GLqBl=%uɆMs쵐ЩZl=K[,Y?%PgxX 69#z|ٶEBWCCB F@}8XBiBu P} vpS}յC缃6ğ1!oV' *q-K${Q6z=rdw!X%ԧlsnT-|2N}//)7 k~m)$.}ЭÕ^JgMgoeQ{QQEچ~o%`zU2 G^֮^U;d)onƣ5A&Io9\@oܯugw`tēTZōd0/G0% 1Y"keW!l!X^rꭁ@oiM8|*BK(5TDB95AJv˾pH(b*$ T-VSf%KU}.HD'?S9b /k+\6f 3#*A3VBޡ-XxfOj 11̦MQGaq3}C9R N&qφQtip&e[Ĵ0gU6BFEc&j!1d~ZM?[Qz.ų另 o0uׯw LeUQȞn70;#tꄂ$4[KI [bE?bIE`t ęiei׃C{Ký=uʅxxmZ_^3HIv*TGpt^%iXRZv[jj)jMJH2|'ZGj9xh8D 1bvgԋ{uECJmg0*toEX֤`NPF FI t_ڄUԑ~BsdcFNγ!}h0:~XVaL1:Xl71JFS Y'Sn˭.PnM~7[r+ABCFpʔEZ&+]I 遧S/V, @ePBGqcN;H.?}L۬A>Ȩ[NSTRt(iO홡A a7Z-|i[F:e >dtqO鱂9( X/Mۣt̝x Q:dW^1*CD?e#4!=`7Spk ctII;)hDܛ8TPWdCw1b,pRtI\mBd~eq;R[RA:h@D[aHJpv{A/Z0m ˠ;"Hru)f8Rzr}TZ/7 0?Ŋ9_ wZ .ߩmi[.u/2#BdƷh_F\:7dV~gڰ:rxokЯ,{,!OBŧޤ0ݹ*Gq2{9ppEOGy85RSHG wkXAF}E*f魩i.L)82$hnLy@7X/Sp^U0l:0xbE)|t-#{QfWݐEF7? 6hg-y#?leivdN;} qkod)JzKQ4"ri9;[O5k\+luQB7..]\F*<+Bؕ֠"oةoB~X%X5w q WBm,_AYw9pC51`SRˠ\n 46a@9\FV*X,ׯ?j;E|T/9TPH[Ū>*~7vMT\@#WWY2(nF?njj^Qd]Rc֕W9IG7C$`SKzML#aɃI_ɨ5iBH7,pq )oU\UøIJӥADlQ܍$}e)<][Z-l=vV)%NTTU<٥ PERTcN\;H4 h|lBHH'K1\H :>4xL{`W$QB;6Vތ{uzY'&+UD.MrIU'8@]͒~ai&` p�&cB`b_ P'bո`)4i\.6Z-x2knr`6'M ),ٙ o:pa9z@H(ZЋnD)]躉/%h,Rkr 4~!KKR*DR-LNBu 3|Towv#wTǻk}ߩԗCgaii1M4<Njg羂i! QmnҗG5D9Sm)\fWJEv>x#`iX2'@ޫk`vGzLch4X3pzYHomDj?΍=S޲FepُG~9fX[+sC!|_¤RWuR OBŝ2d8  mfS~ p3 :Rbnvʇ9AG2stfBKVbEt$[[-E[젭H=SW~Af8kg;-L=p2ɚKQW| P1Fj)U.vg3`$ KEfl3pPPHV9b6qjؿ[mEXk%eGw\[ނYYTק i¬v#DD*`TeVui/빾'Yw?O!?ZJRp=HѯօqeFCeGr{# D7Y,I3T H IՑ)^}ԚPJqnm"!sI{[UY4jSMЂjsիF(륾lZ1:hrP AŜ2=͗ ^A.`64Q.[Jve#ݐ&QJ 9lqeҨʝV4X$14N&~ \O뽝ص_b)u{3Z@jdcRSg2]C`=*H/u ?EPvul}c#%Ր~\s5k;ݶF& 釲 cS,4 #x@8J.5vcsO ļ9V?kUЍN}4^igh iIyQ07Lޕ"bW! mZ^3 ֌BodBq5v3D=B/fR D8yՃBR26i:UrG I9.dOSOHs1MwNDjU]Lf,(I4hӪL@ƿHoC/6 +Q_F[|Sc|HSa(vv2 Mks#zJaB=0uwuҹЂk@Uh4_'@hpl,^I ]4)x3eDjFgy ,ysNB bv2t&hK$E;Q[ )H!@4y'f8/4]/+ ;|>Un.̟O;[~bOwM7g _$ f=f(!r'Nb8aQ$McbG1E07nԇ=dU-b{WG|i۞?3?q&g9 $Ds胆B5+@Xݟ)O{IDlN>٘ΦBlABzTt/Nĕ_P؀#0p,L 1e N8rlkF]܊:#qr{yNp}.PR*^/.xJ9;¡慎4dL)HO & y @]pTIJx H{[O31xj1XHU_"vpRiMbזBS,eZoGqRIUPw_Of當QѬ=ی:گm[^ftyptX6,{BBz 1#W@, .]v>3KśqUVl2?%3txWZU|֏jgVq=:GT>2 ܦh~%{W:YWdw0 ׁ:Xc)nPS1sQ|m Ѥ;$C ;:kwLt{pӼ-yHWLҸG?mCc+/?{'oH"88Lгԃ}DD٦ZW[ƑG?eiKÿ́=1 >E a Yl~TZY&kG܏xNZիw>N4嶔h“bNiA۬ oN06Eu~ TDe *Tk)~L4/5zED Iv4nLճŸ7Diu4SoocK3}E%"oͽ}$p2AO!7o$&n"^Sp0 +WtR `ip`dOK}:}Ud0-B^ѥ ;t krHF5Pt3D1& C_dhzJw>ܒᇵ`:] fgMO4σt.ܭn c_{6S,xĜQ^Nل^Yv5'ӆp{eor]3# Ӓ _Y ?on jiieQJwxmݙ}1BZ.8=zО]B=s ܑnlQ/$xynY217C?3j \/xט'٪0O7A&L |ȭS4XicpmSr+!oH)N1\Q6L O9ch/CՈ`(aH B&a Dm FLjPtb 31uV|徥Nx{Lg}>gо+nJ*QzJtO\ ʩ9FW ` =̔=6ab]q$Nб!lD8=evU)9 C˜ QRxeB5㸭Pֹ,.![zUv[#8{TsG; c]~RjYQIuVڪ58e'ao4e:]#56Y80~6GգZ*J3.c!/pT{*&Xz, ^60B9j{S5h68J.2̨T>E~xUc?w%- b7CSje MZ?D2!K FKZOzcʰǶԶ~l6?۪3vSJh{CޥIׁ8!3昇% Dmc< ϦBv =eϘ*G`#R>+aS a#Ĭ쨨^w(PnLɪP?νM\nO}&?{jo0 uN~܅;JB `\`U}? n3WRS 2w U׎O&gMoX \Nw%EX2JWp֌蘺'gv!lZ 5$=~$,bxs9ڳnA!Ȼ0c 9S{?7X%tcxNcf[=옙0&/i,,DV&W6 w1 vfi$$ ]o/Z,:F 斯5)XTho8WqU FYY ]"=t(C2j3Q12:gBL  ~y+`:\&ZHd)X*>438=Z/(Xݩv؋ 9bHBm#fZ[\/f~N+P4,K]>Bt 7I"\D_iz vՆӸ%,,y9}VM#>ºa Se\XPE:S7붢>㶼9 Dc:ffiG~cI1\p ynN̘6/R.O^y?]61r#+G+c|\_2'݈1f5fT| 24e<9ory{YGmjJ2QQ'j"ڨQ =WP-;WY-SfdqP)ia Ʊ_ 6"o ؟ gջU ͨnX[M\mԶ6` OȼN3q81!9kU9&4~kM:iNCcZ<z6"Nn> Āb,xj[5YkT8Ɖy08 n!;V9 )7š~J eT蚭G+%58M>KKZduʻCK$!FpX`g Ԟ 䙲뛉 E; 'Xqoȕ{z+`gd}Mm0 T"6il"Eq|tkb$:wbq tC9cHR5!d4Y!(qW} qÃ@|{5j",j0n:^M$_T̢!Q(4fa%hn>gW U?%΃w *Xq= x2S\)Yk| - ԋxUZ(#3KgE 锡ܝ4J>%g*nqj1>''Ha׮z@boxMBKSA~@ kD m՝hqр?D?˅ݥ, hH?A')v{w `r"w3oUt@=գMe.AW)!VFEv͡$Y/ i)JA6=eKƉ2$n50 ya߾j(|PJ  -flsNZ(0u>' }LQq9wofVO%,$lL<4KbR)kް9 E>K%Q7)(\ dE`B7KmrɣSCvn/NyM*g/%Q6amQ{2nrGyN? ōMj.hw8>~Iqwimjs֣3Nxu>_ >RjRߞ) !5q/b8r&MӾmӴ ,GelA6~|#W_k0f}zV]xB=rd^>[r  c#M"MLC Ds4djy2W\tT^h9Όm 3)x=6wmD(]VCރP#SJ.|zB`} 'ZU#~=_@vg4Xv>LL0X7!R,wQ/λSBQIEpP05֗Sasf|qʥ,M@9rKP¿!'Rh3qz nu0uЅjuV- J8 }YeGb_s%p}ʓz8X-gB Nu5<$ifh1]4SThz6>xZJ Esc]v91x ݒp3}[9M#~L9'>#`[x[-ܥS+O, PԪbl b2"ԥp QtMu ضjp:*n _ڪ|"gư1nc8\!Ԅ6z*SUþx=@A?и[+AKtqi'|DVQ-#񲕗%| ^6Eh,3 E( $#~Kub$2щ%R}0$Kt]0aq|,JA~[ L?q.,&>z"HN`:]Op{ᯫVJ/|wOG=)l֏~?*~y/GU]rsbW;Nt#Hr^ā6F ?[ˠ\n˾* Ig܁+C[B::&u * $øSTW TG4s4FB4iAp&Šgt5E= %>x*u$oI/&+s%YK#@ hM#`u=u{Z*f@FEUU$ sOP0dlOE0*H:dB{b.6*n?X UTJXfJ 5|e])j9r mc(.ĜPXawtaZK\mf-.[x3i+ .Gp3x pB"ڿ'22q祺_F^ǒo6$5x&J#Pkv1)URm8/cܘ̓W%{JԀϜWqxT~LwW޻k5օ=Q'fRqG+}y.1v8/#ۘltq}{Iy TmGu٘ۺ_UlĴ4'ޠڹwJd{t[U*"r8Ma~8^ i~幪\cdRNKCӍ_Rj9[yi:*ɰK>%/es8]}daJ ݚ//1 KJj4Fmm3$f/k,ډ*i㛗>z_ j Ȇb."+"UY gv-6fԸ*5dV {c5ͤ7\-_m%7ӑ C:]t,fL0C '!F(_6EmtTc3<& a$@#<3a4ݽO.d :kȗCi^ϰnskl9N}U] "rDgC &HUĮhgf:H5KEҩ17-q;).;No2Iu Lۛ~' f}ASz;S1$9UȔ*gQ?arsbM))/nұ.jun5!\ɜ8_hmsCktθ]k0|qL1A Ħ8J`e uAA_`6>X NݱM{gQZn NWs3TQjp,"5160]YO<*|N9/Ed:6kZjbuovaT88(˱_N/&6k {@6`]}of~t5ۻ48=ycY|}cAxE<=Xт.SRP}^ : Ya쥽}G >qL6U˯;q4:'tbx#X*«t}Mg"Yn,ي/̡28]ӿGRM G>۵/G =jc!vMhȏ󣯑KDkDgf;0_K,Y!: :SNR{VLA)K-QU_p[4cշ54'h %[_$$*:&v?p:|Q m2u]"6f-/,4ؔP'x&kg. ?QF]yq5 :lH5R0, ۙaҒgQkû{[5@k+ up6]RI8WE9q$`n*F_[oCdrotؐE5FΑHy_"!kom3)"y".fGh.odIEHb_Uv/GL-I`Ow`{ `Rs:"r*IեYU$UH6 Ր0_u/D#c%Ҳc)$nRk&;0Z:>35Dj@+<8(D^Uj8şa= X0Ek(q.\vu.CIyEWޤgĂ]k"^wT&Ŧh/Ne`u;m72yIҡyd6 -N[pޠf 7ǰnzӛqM:;!A$|/~(d^)Wܡ*2)O]z1=I1^LFI{v8lC hngκvۼͧց&&:|ocqD0aؘb.Ķ!t#+dZL唂2jop@3 E jx*n1LLPŋH*3P(-W ZVh3Cm4J+Qaėw}ç6:_ ']lۍ MZ|OCH7$R{]NΒ BJcUŁ gD~τR@A6w—V=V`5W@ƔG 'Hc蝁ەjqӸ̤ SǓrf4:G;=d".s$6:̿Ӿac$} (`<'p]1;/ϳi dpy|e 3Wo#?[[F;KHQywx:߈3f,{cHץCMUZ׵%y[P}G0ܥ=sv!8Yɠ5oM` Q}}m ͶR۝1t* ' >tyX(KwKy 6ׇNg`"O.t#?C8>Eɯa䗘ŷ$K,ַ$ d, ѐ #Q-GeD YйS.\W@s< Mmunf=zo:h2aGcɒi&KN \*x1 4 Sf)-5k{|U2@Q|]q&6jlm,~[W1$JrTpd>J8>ٔDMy?X \6) М n֪̽zd\Ks&oo!)P2 gi",5d8' v599I|cPoSe_a%^{ Qr4)KzeLu EVPT~ п4{ݡ47z˪&boƪP;*ϯPcuX(/wZc-J1Q c![Qp=3U8& zCQ=8!+j>؏I?ƴmmfXrc4S͠ 4m85~nNE~`[k6jGs2dEyOM /,4xZ׭nXn/b{-ZYz lؤ>0Fԫ;;7ixѤdm]"Dn:*6|OWUꉇ\\pe~gtUe%䱬#sj)W3p_>A }bEP-Cjᦻd<ŽMt'GlhF^U V=) 4aJb|/}Jqײ̊ij..3r꒔M"tXٙ؄=Â?"S|aڻHYFӄmYL1 k(U 8Wm8qQyo",t㤆Dm e0TFiw(8+i7ZA+Kav:VyS+s sI/dHUU+42i~fkvqz8G;R ۆBpl!{ # P+\I a,B~ZR!&ѣ勇'Fe(\ۭ/5vX-M ^0uP(#9Cwvwx8;ՁiYC|QmSvZ@PkUCx߸=]o9C_MH+ nZ_@S\zɨ[m6յUDک3]MWkf{6_8@$Uw;}G_t.nyY7)nV,[.džx׬^g`9lϚy'ebAGs"U ֘.<2'l#f(Tѷ{xRZ[M\l:}TUN1":O ). {7i+ `XN43J p4ZA^$G1 Q7g/]cIhm|Qj"Bj[s7*wa֑@{-A0 [gfq7fBFPy#[37χ0=_eNUqbHxۢ ;1,8/@4}'^qy݉TKjh#Zfrzycm8R驤D%}Xcth (% ՍϢ& B$ dZb"3N@Z:l: Q뼃(ͅ<ǤOݗ~jkNB-#6H#81qSN8jǣ XmzyY׌̢O>N-qJDB[+Lm&_@{5vp?.3ATXy|T.Y#xN^< hk[jYZ7"wq ` 5vn,I4oMT:^JVNۆ9yNC< nI5mrrG'loR]bnʗNSVj/DXS" 1Ua:ڙukN}Oޓ9 bu#m돼6RcL$n Sj+]~qV.p˨3{qCǂ|߬NBL勸#v; :_c0eew#aZU}Fp\B;CJK 3Ex4 ڣkQ僰}*&і'`<a)9D^”}(LG1`1,J.fS"*?P&.9OQDU~hUBl93Na] >/̂s7a/#Ӽ1-:ɩk浤FsK6 fSw^ 锻¼DԻzhy`R^.R WTۡ삺&գ=ehpNCԙIMUʋk}E2_QQkyi1xJ{iD7jvjoi@yih>8~XnmRTۖqw֜h l;+"[;<IpX2{wwvC]|>/β 4&1EiO`+6vSzcbt֒0W޻mL|Dp҃=;)=Oxgt! P/!ъ/" xFl3ޣ~z{D CksA)2?/Li!4e6>Ch abXBpãb7q#f8F΍(ӝ ewOE|IZLʻ-5$acoeqpz0 ҋ &̑` CR3?{OY\yF(@gsHX!u6\ugM9K34['RF5٢9v``| s,;Zx9z9ݭ]MWy<-"Ѹ&Vvx8KYǴD&}4~| cbRtg3EW]!ztR[EeG?LB/~GXI8&7 g " H歐8̸ؠ&yW;mt[xYnf[೺ >$oεNt5bȣηYЛjźN=Z9Y`I'`0kt,j)<*?5LQ/u88lo A(~ tE.ȅYQjo0ƔK'eٖ^W}$&e< !n?v+$P}tq !16^\^5v 5-z'7Tf_XZd$D0_ W' R߽/g:%{r|Ωjtfkv芜/Ps:ؤ!`NY{ GXBbpl~{Qp+XY ؠՋ"%#w'' #0GR\(yL9i}h ^vn-0ɱ FV1;~lȆ=@m0rrVFEτj\tL4Ë>͡ X#-f( 0; )^O8f/P+,rP7aorՌqƪagSCQ(C-k+ }z# GЛ1Lo'I7}$\HqYQz0PI\o z. ѨUij4ˊ˾9|<.KKJf~U5LV忳 5C_4~q N_ ioǢ2D[lssܐLz?е7P!tWc؅@v K v' _Pd"ʂ C۰䆢u[Av ٴ70 ∺kT6n7MAZ,'hG)sZ ;b!L_#ezfd :t~w eV1Wr׆ݏST9'q'n*Trw~ i&>w!y!pvjث) !0@"G~#? tн|*Uݘ,ZWl~I1 rژyMyZBHqV a`>`2XϛV)~cvcu~9f'?4p)h'rHian>g&kEURA n%#DuZgW& nd ҖCcϐZJ88r4OXoφqa].о.xbhnDkE'@ hŐð/@=_7ԚM uoT#2dcR^v "Q#M q>i6P&BMWb0hmBbMtp,kTJ\T {^%~SCvz\S7>R]Btm%ApZ<80&CѤsUyO%n4q2轗\8N-- #IN͹: A}-o$o#jTw6+)/nYt^!i"6ZxOO݁`{6 I"]D&EO7`Hdv^Ҏ>:.x:_%͔ u'1Fq⸬Vvtw_-*) K^m ;`#Dd>\G go>ԋ]A6HSz0&0S ULQ2s ;a~*Tx8x@y^9OSWLC Kk ȠE4E,Ywi6/3jgKZUݽ9+ Bk%8_ ȈVs8 *"tMН%>N)D;u}搥~@~B"_mKZf ^Žb>SXAKUgc?8b5z]]M5zDp6F06}Z*Ԝ*dEITXï%X&𳾚D'>Gg*4V̰:EϤGՋ#4P&&d6etNErViHn)+EWBj"gΫpmHG|togۡS䷈@W`î)^ +QX[)ANjV%B:[yVRP3) J'k*J*>Z,t,b:0KR={if8o >,0NkcJF7 hjDG*0%"#A9OXwI:eko7܁i~) A݃#N["Bt0w . rxH׽ oQ;E6N;N囗,h:X$'R4gXܶ1+nULA/k386בn {>$7v7ƀRSmzXOJ'^>Y~߰b^9ۇo)aʫy%\Ӯ&ԅȰ8Vac,J9s!:k(1nryc$/A̖X@$s紳!8+ENRO6福E6f?.?Z}||->tkGIN(MtK@te AZ " x1"MU%%/8au!sư)\Xx.95RN2^J7U\XX[MhlI%r(40d=U~TX.fP?R!b=&IcZ F*|¿~u1wZ0Mf"D'Rm'^?ɉGnNgtHxw<*ڱ$59tѿ*Yv"և;ԃB>ު6&QU*kT<06kr FYZ2WexJ5K07!њQYwVhM'3@V\Q҄tCp2iI3KTQjS4$)NTiUM iPhL ̘2'ǘ`=| 4xGkYo9 NjSPi.u:"D@][]ѯ|qwp04YmiEЯ??2 }gA^k4/áalgH\7zZooU6aFRY_{k }w1F7Օtյջ?p㿫=ԪZo2ș9T0b EYtTXz9$ D.¨/K'N#;cuٳQ\lェ /I}+ڼm&w6+6lE7ڦ;}1bL) tn[k6l} KZTn嫿?>ܪmn{iwG?w2?Ix"lc Өv7}}S_*.V]HNPxmzat-V.\**-U37QJɨL4le?_Y.#۸__[OO8~qT:I+_bZ _:*_2Dd܌&\p`3Of5h-p:;p <"KMUסT =ڸQ_YNGw7T~D^uF ӏD\iq}HX *~Mk@Z7oUQl2:ٱ#̗~}qT_I>l"9?B3gk|2mhkOA^HZ^]9rNdnk \!*H['@.ƨ.^ 'E2j>QVuAl\VՊrPa$UYRLU3ZrGىI$hqi@Z:}eoTL07S1D#y#~[AdFGd0MxIht-fs Ds|;61?4L=\?:=hMS$^[B;8;Tb@^'&v5vZE&nG.-Dk F a:c1=lx:)hxn4pUz;%ø AWqp'yO%ӛzC5_M kMMm|XHنXU!`}x6MHϪa@]}`CozQR뒂 ک֏~)f_Snp |ԏ~a[:շw`Qᰶ A̫MU{[;R7pljwG{Yn"umAwJqP۪j0ϥ٨1vufTalv G㣚zMSݨojgAuܨj *`؉Ǎ:Mj_;c^ݦߣ r!N(T3uöa1V {7jEU=7@}W6a:]\#RWR_:v[ 7ShʶtW(^I!x٨Q;͡P׃ s,1Q kx {5w䤋IT"*!,%q;'>S7TK4mCk7U݂.p@ )8yH{s:cCkkz>&# %a v:r~WWN>!: 3k\Csn4}Jّ pxuϰ/-]^^V`t${Z3ZOyԇn Μ}w-*S U"RlwHWJ6yK& gyUVV4&IEWxfk1 PLp'@OmMf״Z[*A0 'nELr' )d7˰:uhUJuVVM5)#Q{4"Ni(?= |*?1oeFH{h-|'_sJ| Z$`¾wac}Xr%ĨM5I* >M{;oM:ǽ ׆(7KB ``Xr0:6xmGoveQ"!lscF%1xG\#u6LX( &!^wgka˪JΛQ;jVX.UTu8L(!-)8QEB x!okz+%9 EBwdRY]Vڳ 41) i5j hsIkw5A7nXs eA/ r/")ظϢ7.Ӂ`Ơ+Y?D D3Xۃjt3au|2'jqey]5v\Cx & xN/zeєWgn7Rȫkm8$R*)omovyT<OaWqo>/Aàys_uag!=M`qv⢩Zk=8ud@)axK5gWWO;g454IFKɨ%_ D}'="UW1/gƤ.it4Z`>OlPzhZU=] 3$ڕzr a@0 ' =]6mԜNʹ^Vqt3ijwS/>b!ei; Ƀ))qZ1p;k}Gp`Ӹ=E">}ٹ,aɢcPH6 l[Rލ.O^Y8b[+˺6Xnr$]BCW"z>b=I{>PkEDyR]K?f% r eYYwo+kjvO@)s%ၝ(6KI@=:?(a J=Rr飂36zPZO?K|BϑEQE`-Y} +WJ,G|Pl7?_ )r*r/K]edʦ2pe ؙP)ǘ*8%^i4(\~evϟDӃ߹Ar;șqwNxmۃ:NUx˛GQk2Awpr 󀙲%-eţkEHfĚ~ T>E|iF7>:RX3K Ŏ8Qy"j E-O?PC$QN51Ys$3baNC^U1GH>&AfrW4tHX8N6 \Y 0Rx0*]J}h%CI &1n1`an#]L!U>ނKkqg R2i1m;rNWr»\JD2;`ݖ>rfF#L rڶ SB "]o;$g$UeN)"æEjA͖mxYJ+eڄ I^4tob7ϏPJ\Szx :Yɽ:])k$t8rz[(" 2Qa]9?^ .QL &(P)|di)2d݀jk y;LȒ ޗ*9TLķ2kZh)0W[G;t_et=vIٌz X5{/ ѥPO:2E|4 r- yq5AnL& WU֧[(O>JNfedl9 SUNSgVo}wpC&'7>*_Crʯ͑F% RrC }Y/#/&ed ܎Cc-F MR Rۉz)xœG+^]9u&͂!!f댊qD>N}֢Wj"S0;%3>a%HSi6m ;܆/kIu5g?D]$i^ Y;X#ā8}cOK6—ܑ STitSUvG1>1=5=[UVG *jВ?7*~/*>+RY]QQ-UUQ\kL+]&][Zʾ]Y/7:\u)azs.էSd[esZZǴl#5w6ܖZr-{3Z%LڹA!-kpIC6fG$*Q:"'qN?_r)iJ䭥8:Q$lkoOJX5FP\)F݂c4g4$HFcS;9T[2ǣ^vzJC\&YEv4_&lC萦 Jj8” R\}Xk뢉(ʒHėT,f~.h}Ώ@QkYz֧̩fr4$t0 oA'69#Z@A\\co@pm3!ROFqq Bh92 2Î/&qcmjYWKD|#?R$fUl2>،rU8ky:Ҝ:Sٞ`F}Z zhڒ3 SAM:gSw#&|{/g'\&mKXF`$6 wƍPIW.RpQ|5>Ү~Wq/F`#oG1zFR#΀$YBM|0u[#MVމðdfĚq,'sϙ$l"lk5GoU.,_h%Z}yREm $AAIW|eV\?vƉZAF6o;5zQo$-B,,wWt95 7$u̾ULʅn".&@.jVވӘr|\MoyseM׺ BޓA2Y2Hy].Uwzl ٷX~љH $;(XŠtFH\o\|v;gL ۸HP*6KZzuZ9];=iNV"MƏBY5~ CU!JvXk$8U@@N:Ek.# e~Uq_aOO8ODˏa.8Z{zz.G'O(̌WD~k_7joSq4#J][}w#qUIfdi/m1tC/jIKJ8 Γjz=[oke8EkkϖZ'ڷ"ji}YǃL>8vL ?ptO,oL\w(5r}_Oة:@&8\%C~3v/ŔרZ䨋1{\>.c_@"H4r8E *Ddr^;nC~w*䍴v8Nfh}Tg˄kvJzEί$_!_=6QDxMqWϳ@UE E̓+TǗB%2d^`b/ zq!;rk?/ШB j^^!z3(++d1{o׋OZW}6b/~6f/T)ޛ0{w{Y^uK^D fUz2н3{id{{ |%|/.TW}/\.:qN, ڝbNH241a殹8jTlB?5%E}Z)vk=Iռ)k$|.e2y٩͋>* mo*|C Y_w{L =4Sa⑿姲.sBP1tOn+VG=X_&9O]W*N0gDZ!A0ֲ!_2uQ,6'Ǐ$@zw#~S( HwG@ZC5bR.g s)i7ut:µV=pPbn'-s_]֫U:fYVbM,UR+xV`øvYU\DRBS:MQdh׏9v|uAZ/VDo780\'}F2sub0RcZ.sHW[iheezүAlF6Nƃ>0 ˩ рr!t1̩B BZ/Op{Y'pyMV,ϟ;yN^;yN^Q4듢*cAa{}'bN;BNo}d2סKε6ѿ{Վ|zjsS_>Boow{:e!J$8ACŬ3덈RL7/wf2sgR YvYn^,,4)J{laF 1r7.PX܃,񩩍mZxuNtҽ-J~eXwqΟrr7]y.7qr.sG×7βy~ @U~2ͥp̴=zs}>ws}>ws}>ws}>ws}>w`X