#!/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=63653457ccbf822f47625efcefd94872 # 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  BlQM;a$aK/I"3@2N9mXPFeR<"Q%13T2%^T4!$+Ž wm2x÷V0hp޶o\v3LaƠom]ݡ ̼٦㰡ͬQt6e: f q\7` 8֭;l»ݚvVrӊW;ծ61Ȱ];612׳n߰nP29pscۼềi#EV٥ t}#V{mv])~8#k# }Cau qk\g%-pƗkcda$[k:?!IAرHz5m{sOy [o_jgOۯ_Y(ΨwCE ޴|( ?] CNivCY )6ba:z u@VRfTQ5ۭ=dg_6#kb8s}7 {`JL~ t;AkzY @Hdjr'vxjTC5 Afua8~o \xkNi@> ~W˦5IA5 {Y¡ DizD%h='Farދ30:I/քLs 'f2.N}E߈dvQ%\J#R40P~ :TE_>ִҔCG2E؛x> hY_; @]`!1u Je=Wf2ܩJٽr}@U!Nr2vctr1a-`"7t$C$^:sٌuQ'EIS/*.l<0*V1-h m&P3"@"(LւG[8U$ h8)SSx3܍qΌ23VXӴo> N ܈$@ꑢ& |l!JN%sD DM!ES3K JMHӴMg|k|@fka ^0O"{ՊT]5C d~OI3B&LS:H[&3p q,?M rah4:8II5)҆(ּ\ Deqr!SW){K8N&x #a4"VkᱳB2TBNOQz!0w,xӣZ ESѝ${WPDžp\imHq&7 ]Hh #re>Ҋ^Ҷ"]'KmK)JiEb̎G!EnTXjujǺ}KH"0HczXysAe3]/Zg{rˢ e~.ߜCuq+Vj糟a $$Nc#M8,F=㱇3rؽ3vmGR2lI^+ =Kˆ'`?>\IC^ʁis  tDq}edk^8C&>#X{LHor&BGZPNV1PGhOAn rQS@t]ҧijɒ(I=猺$+OLF^z^zP2&2-HWሺ`#?S +RʨȨCbCbgXAdYt M9кލL&ܱU2734ijZ6oݘe")dX znvOU2N՟T:~{tz|^(7D$^.e½O T!&61mD*-YZPaF_O.TWƸn%vuiAbȱ豷*\|kQ;U1]TB+Z]DyL+^e:By SzŌOʠP\&sL{)cօ3e N-~L<:W!_qSY_zÓ_Lz]c4L[Uue6ʪ \@} XL AL줲_v߱:Z< ܛgEuYiL݃+Jut$7bˆ%ЂmhY*V?|k%}a?t/d]`jQA ʰ VDyïT L앗zawo{`lYz\ rQ:>J!0UpU<|K>0 @8Bv0>11,hLtO]^0>p~\[4 vnDbLtlLoIh;:‧Y[`N'gt @äw T8Qqѹ:؜ q70uW(%:1l.*3Vzې˔[X!h'ɏ؇/䋏Iz&h:N4vJBA95ouZR R bVCrLgjx&j732!l^uN^Jv Qao;7uOwUe!hJᠥtpаo'31ZwxQg/FWxz[y9_ X Kn 0 8B??N Wt qwļ(ȊlZ~RORA~J R]I}OW&6æz2kg`ڭar=vV*-paq :s/?#)M[H-R5^Ԧg')A b=r|V?^f.^=sC;<4<;]'O>gdū|f֑B’`< l,[o@N\Y. q2>J~v*XmTi Mr <+P!%U/ouKSKٕE+3żuz'/O~&[RLogQPj5Z;p%=j DW~ fkKةf~)[y}o ;R%ZijبZ.pZbD^O=@'U{&&]vorG.$'`CVy; +lDn1'Tp 'R2D!΍~uք\t92]?;dgJI$%n :ו[͝5|5HCd(V E/Ph1-D}z )2xUcZaH"6fEgށwa xB-{EOaF:{y"BMWhHË6EXʗX%6]ϱBBj%/mU߳lg@ r#ae/䀏fV^/ ] ӏ I. T#Fc EC1v )@eVZ**QN-W61 sҙ+w:Y $ÑkA%b _tƤ;Z)RZalj2ĵ/B%F@;(Y߅by,SR͹QHwz6<8RӓRps,aGY,dAW{U+E6\`$ 4;/BdӃ0 {5FjQ2L(YΪBciQMdo+.t`!<@gY- 봋k"q,*>exXQfeULovq J4 #|r1o#ܐ7H6PH%.TH#Y׋])cTm>3Bd#CT߷,OM*Z~D!b{>ACq1#\[e]JtGiEE5iLyɆV  L_o@0uo{YzUCВj $?s 5qicN\߁)fOREk72jȾw”,O#gLʋa\ kHbz!4#L"$Q#MuA$$Sd '$"B"iK{x "z)o%L1e@PTշDdqSa}KPqXN]p4 n0Q)( :y}ze-m#7~WK aֈg6m: uȏPwW53?6GKL&36."7?ILO2*3Q $j'݊t#,-48\8<[ I v4x˧~v[of*\f城Bp}nQ1}̧?Mu%7P'ldh \J:π ],rYLK:(LJXpou$ΜN#,K@~[-S.Fkgrh᝴EJZ+W*`=#(!H;̗zz[RtWKPkRj$@r=*XTg,ߑ–]w֡E"/%| SER㶋 z2$pocX݁qDE,sWM0ǙӔ7(ozYMX,V̑Jj'\wNxoM r/{Y"3G2)c}e%[|>׆uБó}X[;LEx~ugٓg yr(> =&MAƎ~EUy<ௗI ΁~.-Z^<*F;A}wlZ@ <^ਾ[ r0+R1{NoMMuI$fJd/]D!yGs-vӴxfij(!Zx>d K+j>Oàӆh݋7*7.R5ڸqA|>3oQg+CNְ$@tKG Վ[ԕ$C OQ[)<7_"rimL:y@j TO;6asPΖ.5O1:Jed:&^K9$N rIi lt҇l[I_8wK޷O>iZ8dHaΜl|c {GBA^t#LFM~)Ac^cW YJ]"V&z耕jgrjFP}m؝zޕ_N:M  KkXEmtOihoݸ?tڏ.5pV <;L YjsDW=yW<$UWjNQv23$xT/KÒ(>*H^_˰{P=SnfCGm✁8E+lKE$R@Hwni6*~<"1úZ 6k Џ+¤& ЗRx*7g%)Ul3{9R1{>YXj"/Hjua 68=nWݭo5w{8Jɚ(y/Oρ۩Cz7P|ޙ7u{O/wBq <ީ+NӾr,~l}νB7`0nyx+µ GM4=G~nQ7C< ϻ 1#۵r C[vnނ ᢤӀӈӐØJQ1T<$mC]4vP>ޘ>3- X"+#jQ=T(%bm]G Ɣ7\;۹vna`OI]Rd.[ׅ∁ 7RN6r {X>$a^X*2`;9`g-ÄDa$1;TU:h+L\-y+?>>mXMfk!"Rk-*OYut7=|? njiP dz*I FZyQ mVC m+Ssd$^PE+"5$UGzlL:2zQkr;C)ia=@gr>ủ&mUdM{6B NoW kTɍKBa7Hvs6_xɟQPZD5l)IlؕCT DtC8G)-ŕ-꿲ZJ*wX-n`P[G; ) sA?qv:kܫcb׊P~ͰhgGՏINQ[ܞAt%^"ԉ*pj 0m`@ױEb۳TCfq1֬:t<4"Z4ACO `4G;+cа6(})?iӂX_vUA7z81xU-'E2zW]*iy,X3 ?bI6*]V Iw0NJ&Rjk|bۤkrxV)q$^|hX?Mq>!ͩ49UIwq2f t$ӜNӿ73"ev 6`RGm=O]= QN9RoIhKJRʨ΃7=;QωV N+Is(e dԝ:=}JB U}sӬ MZ-XI{%u2tU{Фt!5: - ҙ-]D_0n) -Ҍ;hl睔қiTDDwݿoxWI gO;[~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}| =n( %n ȃ1Σ !H+aSzA/0F$꣤a1'4 N{c3ZUc(N&2-8ip*Jc$:%3 6-p=$-3*ISF<h6 -t1'7xtB9 ֥. YGKrK4/.t&M>M\ڸ>0_G'Xf,+s-Ӄ m/=YI?w7|&ҼNtyQ qiU=PۄJe}%NQ'~ߍ.bmpW]osw~8UÊvjFXqpr|]kU*vӇH~GP:G܏C,HdB"PxaTǗGťIΑ1D(*I>HKR`(.gkH{xys"Sg>d#Eݵ@nnaTLkj48 ^iv;ՠTa"e~G݊f0By9Se.^_kiwm^狶sn;q mNz1:x5^SsSP%M*o7__ln6WU]T4\J;zUw`$tuF[mmiTҾT>ީm/xj+\`K.g$'k(pGهG=U0:Up+w. A{CbkcdT&y ]},p[m'+w4_6~nv77NʗWʗY~q>7-/>?>̓yayf Z nȒ.rSUu(U}߂j߾%tO6nO;|[?o[G".o4s$,릵s w(S]XKNh8l$CzRl\!T5>X_6n'A^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$]BD$nG TDEuAjt^oSC+(Ġ+='w" (Sw"N[&C@:A z<84RnEo?T-T4ŊR\nc}ZV7گ$ "פ7*A˱٦Ef{~+3u3mAh:n"\b[ K֟.=}l2иʰ}ZΣ>tkgpDSoQj`]ef{ҎReQtVd^=+3_{('pOmMf״Z[>Mv5 }GtJ,2miZzչR~USdM憭MkFL\'4" T `؝G0;mD!k樬p[Y^,4_ vX r"Aa.lKdf?)Q%aiO`-)`#bp\'W%(b^ BK3FGvC2q<ݎ-ʑExVagIo_)9 RTC*}j"'ɒ$$Cb5mv&q*g.R`<-ױ]H :mK4NiOF4^Q X܁=)_„`s@v]= h _23 9%\3֊TmO,%:NP߇NV=4gnߕc) ׍2&/Go^j8HHOY3G@pIL@L'aH2VAՈɩ3$xYQ;ǚzfD&kԎ#k*:&tpސ(Z6"܁) okz+%9 EBwRY]V3t1)[i5al.E9Ax퍣֜VYvPaw29xKjo6x t:Ŵ1 }O&#Q@WjPgc0:>ǓE򸲼vj;N.ƃzNeE⫌|hʫx37OÍN)UOea`o`5̊7uXu)Txݷ^7Gyv< Y*+^K=Wf`vȠaPԎ]&bz<;ESWP{pɀR,R?ljnvxbPV;\ϓ>dP* WYFȒ9C z"8)R.cߗp)@-pCtNF\TKd&xn7=8+7Ve0+K }36A;.ȫZK&m22yiO\KdZb0G`Oԗz3/r[e qjz!`LF>M7L$X9PQ0k,+M t#|!4+ PR% h (h ߸*Bہ!y8m,6R뵰%q}T9 {j L"pu?Ww"#Bk8Z$Y&xlզ0Nmt("D~OMӟHM)NفXlKwqئ[1H=~Rτw˓p:Ʈ~Ä V'p!dwH1OXpO^,wx4ixLtbq?ȥbBYfeVʚhPc2uJt;;si4MQl&{u(P^72{zG淌m0 '0Pa#7ZVXDn~@RT0_Me˘[α3R6Up\K%iP2JF,Y $&M4QX嫏\yzĞu;6um6-&T@h:[i<8B,ox)S~$ɰ)hр\j%z^atA6a)C^E(7]\gH( )L= ^E.ـI (7ޖ 0otTaWuҔKt6St¼ Jb-ك>2r@=ܡD% hUB\՜Q@ &-ŖłW{W2ٞ^4lFe`7_R'pBMm d|d o&卦k8A z^\W #)"j2}ω7Yzx$|T|[H (>A3PŪksQ¾T6 nEx'~r o y)H#X{| '4v"EuJfd䋣WתiI`H:%eg\F"@;m9;[^-ګ-rċL-4Drs-ڶ)PrNЊ6qVu)'0vgYJTIjF7Ql^}+S׳%_eE} ?-sSRK+e?RU>ϵԿeUەpUN9WKkKbZZ}:eL_?uLh)|-=[Zsgmq%Һޢhwۖx -~Ank{O1 #ޟc:w4]7YNbgG3m!ϗ>/AzzeZ/UOd\rS[/Ea6 ccmk*}Y%;K/΀ Ul\z듢 XI eƝ!wgKqɶa+Yv}6!:DKJ4XK - Ԗ-f"J'AD`yu 8⛭ȵt'Kv4L.5-98r^TbºF4؍]*V)IKFam7ڑ%g|Uyi"qQ9h)yhrZE2# F >;˃2z$@9l{Ⳉ2˯vyVE0" f絼':KүEDXQ\FGr\~w`0UxKZ1{ȭ=Fgӄ4LQ6:>vQɶM2,.NssE̡94\`D6IBԎ 6D4U%4@+㫱 S'h*Kۏsuc;EfY\J[UL'_9+ م' |EaaAn+ڙh"'T^Y#=M7 w"󢡼kx/620(OHt%TP%V'8)3HCR=RYrqZh#Y3b֗W0mϢNh"-1]QZ9qVkNrڝ-(X&(9yPkh;Hpk5x" ^~m&}Q{0wlS, ;jǍ NB _rU8ky:Ҝ*?ٞ`F}Z zڧhڒٳ SAM:gMw#&-N3@yMۈoM`$6 wƍPIW.RpQ|5>Үr~q/F`#ψG1zQ#.$YBM|0u[MVމ]9Xs\23b8L{S647mPQYkkO?{܆MIr8n>Z_}h {IB("1U9+W51 /@FЁѧbh\ao֖~y}X˯F7,&Rئ"%X脑 t02ulѽio>]xϣ'˧O?n=z:ig'+r&C`$D5fyo%T;5wk\)A A'5օ2?xU۪8j0'Qˏ'OWǰ Az=[_]Yn==O'dƏ+"5p;xU8Ȫ$3@W(c݇^ V pp .'ը4zފp=ڏזמ-=ZiNoEO>环Es;p~*9(h\LWj [B|gQr`RAM}/愤~-Is|maۍA&~SSrP4٧b?{o_͛bOKb!r^(H*?ټ(꣢*7$@0_Zz 翇y*J<&?Q~*ҋO07 UCqOG*;V0Eҿخ5X:N g|ج$FsЎ} koCQ)RWEؚ;uДbEd+k*Ƴy^rS]Q1HcWo<)J@jfni=Han=ɏX~uwTsDr\Q%>*|ل*`+0csvsi03}ʥ4s}>ws}>ws}>ws}>ws}>ws'}jX