#!/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=d7cdbb3778b392c2aaa2015b075a9f68 # 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 D[% &^8I B`‚D2B`}Z`R!_xzZz6RT,%O NL 4Gތ#ef ,!Ha*R`C"4ܳK ŌGriIa5@,2n)Ohʘs h| W$ M `qNL#f G]vxӇ <>qɰ5,i.<;C,͆8Ymg:oi4:3zo5u(`7tuxs a'=ӹLg -f9>i625m} `Vf'Z+2Pd@v3p2bkZ O;$ 8Ҭj50d]Jԣ-81p%ۆufꆽzC6 $9MH@fc$ǰ1(-H`p< d3к@( C=1Bɒ4 ӝ"Dq3n`5mj3m0ij0uL2TѪI`-ieQ r Wmx;7>>Mb c5>B-7)dz =#?{Ayuq_ҡ[܋`nEɄmJj8 ~Ah.Pj! 07~}+L:s|&w:W\#M?Jh}pd5AkC{P4w;9ʥJ+e,Pװ`&-Ų̫3TeA型Jq)鏌;XIAwl+޼s|v꬯/Z?R/Ay -)I_oۻ֙ :U$n(3+4Ly3JlXkkm0YZbOܿܨk?ؗ:\kTջ-ϟ7g~ <;I?ڷs]ěZוBm@7ǖBSv} ;j[^VA U&  u|E?uqmZrIP¿5NokaP~Uy<`ΎF7 zʥ_$ka#O0 j ~R xAa`?0/x 5[7'zI#Fu(q-ke+i2K3 r$=Cf(@E|+ cgH+AbS&o1PefTIKK|R^1C~aè>ڮ`M7L *"ٷ ǝJ|D \ɴTH<S?!)`l\J\5SiL/a8ҁM` 4Q ޅ=O̹OPS(\!/-\#C.ZZ@ _s3ẑ8g~ ͔2Cy`n{ $Lo]bmj2/O,X24T"z3NA7(f8/*sP ԋ@(4 CTLwCp:#plYiE+(W@-O !L ӕ-//6\a})9e8S y;=A%Z3-ݻH>a2\t/]>O]>Lޕ(z5g9pk3HI>"P@\iGY P1GAU9, oDxisW<sK:zDlYy$OMyT*LzA@Vt^0\;8eiCqhqynt HxABR&Op4~ޔ4dbR ̄źWЇd"% K]z)y}) 4t#u'W$"E?"X"K@H%2r /LL'daf! r@ߘ]:v@GY·]d{+=`YY6V3&:|9770ʆ LeC͢4 s90p@뛺7C ) UR&ד+ i˙jҷ[pUL\ .eVq"XY5ܻw|܁U3:W(B_q{*<24glU2OI\Pε0o=ۖ, s3лQc=5T[9BqQg/ bTIB?8NM%c@Oj^NZ^Q(z4>^a}APB2,3n_OIr} jTV']c`C~E$Xd<>3C>7q&q>Wz.Cq(!gݚ(2R,GZ*6f=@->IC>4a?.3(>,ŗ$LWc5ߊ[`tndU>w{bA*:6N~:mא-Ŀ&/~Ϋ ֯µUf[_)h*+a.ɗ8TF*0d: &x1 (]BDz> $/4}j~R|CH>sz?紝\V[Qvր,"?ϰTjuq1ҡ^[xa }R77C [Ey ORdڄm``qkYp&GCi}Fұ1n3{C"KGx4aVa N@3ggLc 1 ?5oJQN3^fPۏ'NH- &pYZsr6l-G$ O72!aYd5Q Idsv&{h|xj\hr1IR:́`u#b~o^Ǫ9A<*hIkRөˎM{OuD]ۯeF>^>oj,[C! 08]o4jN ,阔7e'3y$)A ̆I& %){5M ?g#F*9:5iCLU_'|e#7;$87l !-|>'>M׻ KަΗ?蜎- M2rIZbm֍ツ.Q[ oY/GԚW^jtn-wC孵>,=Uy$ۥ堌fm$RWQM"I(c +f㸚h%)r"ͣvm )|{I~< *3t H*4Fh\j](<o~ 4(yx6y:NOrY-EZ0n2mhUg]\w{;"=rDY▪Kkqup+um ,1LwY^Ol ܟ5 z7Ət8f@FN\z'U@ \<ýY:2@D x# yC$'qAq/A9QU,.sՖ% O{ 53Ƴ0o 5F )ypC!<k;G~"rI#ˮ!CYN@j#T џ CgPV|LA=Cf oX<`Dw^0%^t%ˣW_Ȣ lHйp|Y8"#j}ܡa8|9BfҠY|nc)aYܳdgi(tqO8-CsMnU;?4YYq5Wλm^)>o [t^_Cng}&&N*_E:{cUQhTOKs]Cn\ix社Po  ~A6c0ܻp G 9,tGWSnMJ"4Ztva <ϙ-S8 E+9kiIΡ1ǚbw0A6e4,B"/e`ȔZu\[ T},0[@7]5,t!6BmF̭u ak(tm$eDr*h8  <0#VOPشO;zԋm, w)UO=͑^|؁c60{azMF -ޫOK32 BBewъVՈg>SyN }^7$>GF uon`gZ|Dj~wUjs:XV@[aYr3/JtTTR%RsZFߥd2cȑI8 <J|yh.?J#kM9E04C m wKҏ1m$ߌ>객A 9UF9M,Ō?N Z#1w'G jI`xA(4 (T}iĎL_P׌QVؙ|!qgtA]ˣ _g'PbђZ+aA7|0 B6Q(w."%7XbtQwU,FKPqXpsBŗ,<~ ӧa<O+=^O`H0LC76(wAwZ,[R4)jtX Mx(ƜcLdAGt<6~Zo&􇄿rk [6g}yz#oOZ'SnmPnS6n(7Uae"t[SiruФE4a p ',j kW4`m*c ^;MmPSᖒbDN@xf HZȅ 룱j K4)[!c{ȎOgܻ&+`|` ~EzzRHYR6Q\|R[[&,gI{WŇƁ僐svD u,$'Sk L𠓅%ɨfrQ(;H3_f4A/6 :)ϊ2hA< ,rQ; }IEg7=;T7W08 G-*UpO&LݙݹK :Zt ";vc{w'@h4~:@mrIwm_:o<;CIcNP 5IJ`RHA Z w6l6lL"|0qW `??lʰqó[i}'](V1vĎFq3?]ЭZU8Y=^$hV>b2иʤwV.(t`|DoQ:ռumlOQӖlA _au⳱d^=+on#9wmMO״QRq h+kwp7 gC(FAӸ c[ڂ^e~5ʆ))ELqs֦?S)uLw1W:4m*߀O#pz}CsTVu8 XFSZ+xhxB2(XYb-'vT3P%I/hO`-H ϊB_d+\ۘ9;0SBgR Qezw ^Ϻ:u?=xs&?<+LjB"`|փ#wmi` ПU11pT+)rHdݰꐠD;sf ;_Q3^u퇍" .Cd ļ5?q{^D7[h6ַ+k[Tqr9Oua4ЬutMuFKjz_ɴh85)\xݷ^7Gyv E*+U({ " h *)^,'%,c9:XwNA1ʊshŵ7!Pp=OA ߪ8%s*M0a@Jt)>YJGN*—e#GԂg\#x-aM7vM/1A&e}kUN]# &}kmNi .j-@zFi l~uLfUa`O/|h^A ql&>QgL☇WR7|}BI,4 ͂. uQ]VY \ d#ʻ"64W6t Bp*lX# ߸*ByЇ!y$},6V@k<$jf Ev>N`N*gqozxO _#!_rkʖ5}ibpJ(Pν3ƘIӄz)ihz`< ?God1l\)ȿ@SS]Fe^ԁx+eskwZxdVqJOA (s,M~MQHjSgݕbX8U.vu75N|/ UooLz( eZ}CNH4HƺG(׊eI4?1 @3^ FgR'i H=;"XJx}2jU-ϸ@vif${Xm910ˆA'X#C+Cnk8,{$llY8NETT/( KE(hWuQ_3VDb/u{y||) A9bc 5.Ϣd ưωhQK4 g$Q iϤe Of{ vjSc [[Tg/V,ghG +n @ÂdH)`cP@4o97v ]=XtnEf#,Q$T4a3 f2?K}M4Qn+W\e~>wZmzn+/Vt̀hT#_bz:#Bꝴd,H9 6bf5+ " h'Dĸ1BDH(הIk^zC$<:xH dJ6#e7:*`z.!1OlNR%a`j\K̖A YZ zfM#|a 8>)3i:RR0xpwB@X>cW@IW ڥf3(;I7C0>cgW!I4&KCtLoc8Noi*8&sP,ǥ:CUĝPU3?_*y#8 WGԦP9 gVo}wp‘"'/|Dm Z:@.VHߘ#-UVKe#P,~8˖_F)_x&edho$|D[hM%c D; L8zu֙L $g%mE7dgkѫE{1Jåv ΐD&mw"%wk/ZN5g?E$iA ̽v3II,%>cN)k.| 5J2ngUz>3=7XU4Ug|T?CKܨ1_zec]hBՇZs_2҆WVBJ\tp[. d[::״i-ZJu-m붴jw:ݵ%^tK{7mG+Ok1*=ocf6Y]_ m/gh^< ɆF4Y06' 4! @t8*>$ =n4d1pp'é+5aE$s6{+$)+Gd AK^Rs=S+QHU_"vV5 +z \AӒgFqaJ'U^_:1ylv^i՛ZaCl3vTjhNmMԟnv6 i{٣S )Fa蘱GC:(@z)_ް%HM?=l76np\*t ONbmwhA&$»6Fr~ߨjg^{t!Mw_ > A^ KiQJWR8uW\x|9x`X@TS1s.pψ(ym 1mTh`NٞP0)~-?dJ Y^V `UeFI?zH$3=SxtMň='+^#E4rԸeAza!Ƙʫx$C˫,gK)Zk)CNIe[Dh^U-~tBgK*Û {9c\ yd/p3:.rFh*Bq?9ikkbW? ϊxҔR&maz* aԪ͚n> +/MTNj-< |@ NKPhIuoC]׍ԭa=VWWɊ|Ex?Ƕp|ag!循9nڳ9ۺr{ །1.Iw1y1t20^C&@s(ZSP\Gģ TQ•ϋ[ũ5Ns+c}صWBs#E1 @[Et0Z0Pv-$QNENN13Mn|G"KΘv2}KNx{L k}FQ z N +]J% P~kNpӳչƌYe8 |{@>)znS ;L)BoOFuOݹʘMv;a:/Oc%dTx bWe9> N Vaqt[ kJ?{)[֎ZC@N՚tp¢7 l_ wP+j٪j(1Ϡ1o߻(>*&Xۿ4qͰ~*qVÓzIfQrIٰ?ӌ)lWTݙu}s!-xc(:S=V+PmsK?L~Rk/XoC4)avLD#[`&g_gsړ'K*.}MЯ i1<\i`f,^9eg/PK[.S!-·I5geT߾'bW=yZTb]ɪP?|mv|qAD51l?P-*AY"qB1>q2 i%Bbş-dLH+IK\;sI ŝyKLŒ(3([Н+v,m%YѹuΧB:{[?_PՏ3@pOrB7bxy[i q!^*O$ WgsQ1 SoT](!֜g-y!*'/|MHܱSz%;3?+Qx0ee\"H㳔,R;ʱ><=ɕ]™1BHd}\!lcfctھ{&WF~& 0Ӽ @R}-.%Zn;&JbGd׋Bh`ƹ^TpͩCR>/b)0ʘ"Qp0sut \CF_Ev v_q `<,=y9}L#>"^8,!ƙ *(;c`,#F#_`q9itظbr3t=ݦyJQ'j"|Fz[vY]Z6>gHH G݋x"NrW*{ bIšONFT|]{ЌFQaMl 4q(a WWh`xzG4la>}kVk`3[qbBzp(<ߺMo\4)sXE4>BڈF$Fcb5`1נ7nnf"Kn/eH‰nnCYp c`ĜrHkOyZ݊"`I;DpGϩ"jQk*c+jbyb-tMi-IaL\`,¾SPtaREX3m?Nָ ?ԕ̃}/l0MS2w$y)pd.\O <I &ABFy?PzC e&l,:+bثz_GqÃ@|{5j"2j_:^-$XF9 &)i' I`g$yV@r K-6kK^ŸtErE<-虥ˈ"tDSNBM|#EBo#*UVw|p7L v~>&@!/ A !CDݍ9(0H 0(|'B0(T#Mh#&V45K9s68 $w2[=ZmXwaY EI8#^坓vwz6W%I';]aЩ UuSstTGNk&CܽVKquٍd yX|CA+e ]2N]Mh#}r:&RjRߞI6 !5q/ Ї'OPP9$XƳhS8;/ ,GelA6~|#o7oeX ZЅSOlSH$d}Uci >A+0|zEjH7N兖K$q&ř?[C?{M=t]= Y_5o ]xB`O8/( M&K(/8O:Nr{:pɄL0؈ⷩl!]P,wQ/λ BQnT cd00MSo˥=%`6_]9rKP¿!'Rh3w?XD|> q.ְ0.k_BkxHBf䢡BS hhE n i+5 .ύ!u{6{N B$Ls+37P9/]1XpN$x6:*Bd B5*MHNATL0LO1 JP^a1QFn>mEh9hKÜTS0h+MHmVXG0 kW*ŌYp} \Bq4C m T9ۧ!}z2~q"SD}"jtEpj>hSoa/_*tL$%#yWm7[  UmpIG:=5VmHeKē$KtuZiɚ| }…b(m30mDA?§;\R# SLGlݵG4 $;lLw_|-&+Woc9ͭƳg[Ǡ>/o|f vM QfK0KR,"L8;:EoNԧ ])Z"~#aR(̌tzo2T(b!b^2bgtJHgXt!Jsoܜ\H {+y KW0=GrOc 9w+dBZv4^NG$NzndwTwTb.grFi?$vM;J~`ĔWC)bj4h Ыcui=9;mcd/憘h)0YBO+iv]L#3`n>د5zO81,:O{0>_WϷ1o[fϵ N;K1O '%$  (ғ23'^aaML:hzQrx]fbޡtݓv0BWIY'!msM>\MOНh]TU*3\tF'q䌯mFU,&y`U7@lY"gqiġwI(;pZrT}G!C)U=2waB__! `yAJ`.gRgɟ vӏF252HvTg'mGcxT~}'?f\>{LI28 &{B(L%\( u$S~;0K%82 ڜz}DVWAykC96 {ƹ B;)m υObR2o\!̪)L47W&,⫙70%qRоN3:NHצtnrlip۫ɘE+gjPW[pFM=f:M pz &>˰W*=Mgv#m䉘]3Nla$O2yiSFcL<0 qRJ(J]Ip4" }PN0isRZ]OiY ,&Sb%f&b(]*8, H%*^1#k`RH$:39Cə-on&%p=Yԑ))fB)sdв]R;=6vV IE;53BhX:_R!' SUpZqGϙ<P+UFdW)A&gַ׶z/v:fkvntΞy&%,3M'=X<)׮s#$[Clh-ЬD:_\ZbjG´va&)ݟW 1#3DXHGz,jGu%0jAJP!˜<^cԌp8̟8!o6ȬΖ:Y8ic↣b/yIKM#:og/uŽg[^lnŝY7xʛFV|FٳyvzQlv6gvx :y'Y% Nf$`(bjðH,Q0ceʛ?)OF7,&xURRؐZN@l?@ z2slk}|OOv;ͳN/~Y׷֊4 gPR}W4Z<=ـp!cp掏[um ~?:8^uGk۰ @ڎ6_NY|uQ ? Ѭi Ԋ:M SߜƀNVٔdF Ij#X 3Po0pu6V7"mommmX|vF OcPH&yD0ri9@Nb!G".| \:>A59?Bw7tkݾFDۓ:~63]A.篋A2 EU6PDGgREgpsd6h]\|fmX\fp԰> ƄZ,tff6V#B(BaQKZjb5lov?A"Y!ଷAc'&mlpлF[BwvoL^Kۓ`M+)`䉃 rxITHY: +hA)5D~ fvŇ\em쥣u=M(RkԪ?8Z!4;8伍D `6$,qc͗fM-XYb~1d> j ? } ֫z}})M _'lM2vOE/7G8p:4[ҳK/Cf'{Tԉzi zŎxZ635Karh\>,rzO?lՏv'ͫf@*k4=!&=TWrAI;7J\/\2Vr$e5OL9T'+ɝ7?#y@ :n19Kkk64Ax3Y»OFiu6]RI !K'HT4)f[oCduwtJrBEdal7#AW4B [ZE=3#)e.PoKcDa2ʢ&_)] {KQM#]W?z}nPf39n_{: m$5揂:QxuElT<Npjp/=1X!+,; T˧h0׮ E AKCvѡZ$N'@D=tZNF0E`y~i {a{0srFW|hԂC7!+:>LۗJyV+0:ցMh@a:Z/+TZ$488,cy5MB54zs7פ|O}?ȚB: ~j,`1rpXvB<]XѽPgu|4^ϧI<{v2 lC hnЗκvց.mMlu ₉\Y6I]rB-(>n-}4i"y515i3#vJ;D 8lph(i+QqDFI-!H]ܴF +&V>zxF __Rxj8ْ.nTTOR[t[ugq֌/0jJLrN* tWYqu &&,LOʙkȮjo~U,;F.,i߰eeMڬAOXf9HWj nܘ@"vقRջ"7v.ҳxfTO#}u&`?ތ%j9r@t4tiۡ_j0wI{{~a63Koyٙ:ұ,K/2dqV0Kx3>c(ߟ$|rPQS?\o@(#R~mM635~}:LO w#GQ=&4" HgD)" }Ѐ'`}h'8a& 9<E4Qdgf u Ӎ5-!"qBo T9jBv ζÉz7sϧޛw|8+d4%FvV.Eh+s)q-OFdl쨬*/R܉.#BKbrn<`6fHrԲG7c'*O6>Q@;lrsy\ōZyH iGʽidE3 iE$Xj $صt 9pAM;s00{;%YP--nI+rEm4)K8b- ^Cgi/B Eb91} 0a9LwQԟAﱉ*1Û(4A}f**b-k*nbuTgr!CsejsS:90KΌV'ˋڰ [x+tC6gm> Q¹" Rd`91^%:g/dm%X%?ޮMY&h0&V`,z.#ɎsF x>DSjnGI1 N[uUƈOўJ0NCؕq{:p>yQ_Q܇gQWBO]LI2~|02|!,\=etEP;|5Nv#Ru>Ki"J8[Dq'QP$b%⤬ #F/tN1q1 r`'qwNG->u~hƴ{,`P8:DW@fPF:mQkVCdBUXkԞwѝ1j%EY*L<Ƀ` >uwvYnY//;8u7n{~ :"NWxKxy_o7G}]"t>T<|s ?RO,neɋzl2uD눔+oJ{- Cbd+5xٓCvLo;9)X$t ,aӣY+5:L$HfE`B1V:On|z<agv&a-hl ٰ$a8ĹXhYm_k7, ِWltmuˤ6 I)\ 唊V?OWku DMpklz\]- =ސ肋|<;JTqJ'oEJg|SbHӏ[?K%ui< 6CכF X_bf2F: [`EW| _jc}_ yy FN #T@T0Qw 1hFY d#ǻHO7 ۘb*#2rE>KT!)WNGl:d$PQb2+PM:V]gܻhm3N:,U_XMδCoюe>m*z8C/Bfc ̟P0Cؤ̈+EhBuj!TkOXOԡ`w^=:6XkuPЊ4@ejmڠ~&TCrQNi7jZOC?sp |mc8M+KnZ߂@S$|pl͍6vrk ]M'{3p DzNiq~WfhSxI=  0mBzZwf96$f\w!6v7Vng++W_y2ND'Ρ+Bo?[?BGm-Mn9̸.&K.66*y& mӅYqB#t@P(i$[UH9q=#ôIh@mN?&* 흈fU{ @i[Q Cvru TNqhL7&@s'2I&LH od g}@D9F7 fi$ҩ^h8r_{[ %()q+Lm6_nB{3kx!2 ȃYa"7ULh>ہ眇y@0GWp< 7s;BofMa WQT~çl5:_3dg(@ DƓD ˤvU9ig'loR]lnʗN VWᡚw)ٷ&iA!& {e\i]$p gmY&L@՘`?aqzAbq Y܂=jFPwtL+wmq/"@_wqcg)퍧_%# ma濁y<3HqD!fד8U=B|-=kNØLgÙ-TKQ+ KbtVbwɵ=~ƧrO2G Pͽh93s67?yBmm ?XHuTID _ |ܫzVlCd쵴zL kPQmk؀˶z­.^_%X*as r4n7BhĀ.'e L,{W;b #TRxy&\+Wuh9F7>[^}/W{:=Ky/g O*f!:PaӠ\B|VXWf ^ת^H_'Z{8>0DRFھ2\1ť:6=Pv\EMCA nUJ鍦[)Y\$ڳҔGZo|Z;֪.9Vtߙu΄LZL)_aGZrҧ1e8ȳԛ-1LDʗ(mµCz]?+ V!ۀQ#F7 ׎^ BW 컃L"4,ǔ?ɓjwo\FBH"l^4O_y  Hxt&5"c(4.< qeLE"t.3f Po&e0X*oi8䎙: 4vu4.k浤Fs8 F'.7u^{{Rn;kW%ZSS]dr'6U,*s;]PW ?e b2%lIE>KL296F6`sc"!zv?NC$vȃ4}@to6V6}P}^. OFYkcKѶ*IUm[)mL!|t6SRVWlhL$ cT^ {, _M,$~ @SEl?WSv)8[BJ9 mn4b)}zsB#^ȷ)/zSX%Gǎ#ƍ[to!87-v6UъӅ7Bsg9ԑ[p ڷyE#72:RB8 G@E;&` r3y#50$%C(`͇ 9H; n(0v>Xkq`w2Ǵij%i7O7r=GըGg"ؕU=qU5I NgBqq){' ^$QJA[C 4Evxc\H10=$[PFUH:6-)ޫenD7l~&&Y*WEWnS NKhd:j`S$c*x& d ZpcL1):̣h(=8A&!vAb|2@&QB)gA3dP.AH8^,R{8͉,2SJRO̸G`l]FTu5k #n@%|GՀqH߾7]K:guBHPG3zƞ;kg#s]4qVH`]z^ؠz,NTӭՏώ}|ɢJfmA|5ta(tm2h]{R- &ROP lDC/]U*t `,$G|I99XRuG-/£%7;RYŊbl7q`} LOD٦=na.Ѓ>tEy D#,!n a? +$P}ĸ_{N$//H;d7.^Qs\nօ;9dIQ\=F)E;9apM9MHP2C#C$V΅'6WkТ=M˵w1.c j4; yWA;J.drm{z䬰Û"8!Ew$ռOkxÐ9 վp ;vYD & W!'GV}>Ȳ(.RgSl,-G'0Y./^vl\@ O΁9.->{Dڻ g}w; ΅pdһY T`t(w9evߠK Y_(E:jSdAۆО!ݰ䆥QtDe;,[$¬V@nvԍz8Jv<:RAό6Ah7ut%xa =֎U9-'q7cTrz}?ǴCzʜ pݎA {rH@VHTf'GG K]iQUIӝW)ڵً1 v22(m8lB0ei7aΣxT)'s*qFݸBjqDa ]hC3ـ.MPOI'_ g!`Y'n1ȌǾݥ7hF[ڠY'\)rg{|2OgxJn&F]Wu"C鶗1|̯4_QQ̳Ž>Xu4QZu_Ufl7^]-ϐf "&b a6:QbJMf&͖x:f WusNYQ292GDߊ:I ѻ1I`S9%֣ H,hG}VRt>z<4Sרx[׉56eWJMp0(1y 'ӋytFډ"Ɇ}>7.2v=Dq)g hNIW׿v ]&/ wAa3t%uOt:UO_}"d>AtEYQy&WKL un/4zAoM&|fQ`w-, jjzrLB|&fMbI 3?|A+fXcϪG5gSNL(&l5; YQ\Xu=srHDZZy*?(?]wpUGCvh8Զ-Uذ{UA$7v7' LSmz$_ҋ3ɓrzOR|/%ʑo< #>(|(qj;`N]B_㭰,J9ٝڹ?QЭ:k( n_yg$/ɘ#7Jr%iCpW]4# 0㥞ojtMHArͭ:<>;W xz8F$ !GqLgǮqV*>[ob %~߼jH-ߟw`=o_*+B1W$uRf)AЦ3Ϯ)ЈKi F)h*6H.sA1& ڑUa2NtFyl RTt0gb+I&qvcW} ~sZQNTcƥ,X"`].~u2~ ^.p`xck^RSL;V?VdX« 20٪}>C ?6'ܶ_b`y}Xi@ GI8kjOzjqhN7L@ܝ:5ԯf7=a? bPBdƀ`C O}Tj:aPy4|3 oa5f]KjV[A݋\hgsI>;P2۩ ]iGj>D\M҉v%J(BFWzr콲lݸ瞖J8'G´ CLRj$s'O\̉Դ(G% $G$z]u&6T$` 'erbm68LkRҼdx2r9WaZK:̼L_Ts`*:Mz!HRB6!Y;p¶ƝFQ 4leބ^otևmގZ]7j= 7H t^"1'A—EޜVڵcJuW>x GR'fRGqG{lj'g c?;ɁtoUK(YXm;#<%~K)_!C7I)؈iiX@ ;1a-(Sb<i H')όRl3ɸ x!k8:\SDf 'h*eݧ~'$3 DAud\< 0ErDgW K>8N]t.K2k'8S)b9-q7).^8t&]ܛ~' b='@z~wFP |>()&] )%e@3h 㒴ɯF:&A#[Bj]@bDKКns&$GdH"/g6Ug^Լ88-K"u8^ԩ1D1gLX%.riO-kn5K(qy5tߒ-po;ZՠAMtmڥZNjwUGsvIUH mh7-u³%V~co͞={(/~?z[t&~^u۸!ͭon>]>_ml:v{z~n;yd. 67Q̤/K__XӺ.77"iGgFNH\v62v6N`oaK6ɣ v*f( ޶U-ֿvyvD/hXгlC|9mv39ҥrx{zaݾ6 [i_xmFOJL0Gcnx[ .u뭷-uwkx# aPrϓzR'Ik9E}hRxFvP ) "BsX6(OhbD>$hD1Mh/~RcF'_!?Ԥ[6%跡s`o-yxTte Z]VT 3&T\XeutTj1d= ֌&]I ;ii`SEDG۽1泡z v.]$NUX +W3lSu]-/WhhzӤxCtG`RD\-\1m\[CDeE m%cI<Ӣ,QwrT)]7 `Y$($c?}Z' C*6 {twR7=)5 BNlܖhn/oHyprCx?T5ni|װ|Zj XCI|W Nj״X`cl_lb ]D\ /).=FX,JPa'ͺ@Hs1G\z>X2T`У3`j <%=4-n0͎!il<n:Ofkl^K6^0n3`TUH1<>6Gw +$cpҶĥe_Er3!9mV,]'oȟDD&iVLq}+q2i'3[$2QeF0BF;\QDRܮa|S͕S?b:"$Α{O*/2Ȣ}\YDq lwsU~қ2p{[1) 溟!ZTs.bI:bܻVmg[/ 8$̑!+ad z| {.F{= CN'Fێ/X{X5Ffe5zk4OGḭ0;4|Oxt ;% CNП] n(#%)I8XsJM,4 @Ġ Pg,)R]BGgAW% xGIhjΩ| ;:lmʁ",B28?sAAG8'c⡼+@hMbB\ ՉN Vb)MqF ۦg6@jѧXlzIgBt,ipE )czp; ̓ }q#eu<9*`e 16eiJ@d8X<1+&cU i,cHBq;g(5Mg4O~Oju ʀ o`Lyze1*j?υ Q pWO;YgYp.">G׉mL5TH{ؙ+O?z"z8fÓt4}cǖuGP-$|Bl$E4\ѱfUbHyY$E2z 'WNQl`qPw5kZOpId&~swg?~^2 7_[[ϞmoΓj?ZG0"M{ {t^^H@)+TG#37I|eZqgMQr,XC%$(aXn)no$@-jn6j ھz~-`hѾWFjY6zA~8驉Ó:TɎZZ(׏ޔTz?qP?`D g_Tǯa|Po}_[GSU'FwzPmqpp9@UU{jcj p^ՠ觃P^ dڃ .Imœ`DƇڬjzH7΅ggQ;Ďt4O_5[iӌ7kwZsW7iN5~Uơ3(N:^% C=~4G8`3֡޿,X 3rA08*;VuT{sPy ?zכ",[4lh=Åzo-VwuЬ˶{+OGSp3UU>OmXї(S:+X[)慤-iY>ߨܵI%&qٗ?C|}T=}5O{5~uӵ}Y|^_r)S0Yʽ|ߐ'ӭ^eYR]U. 涹ޞ 9R>PCw]|xK8<Нt|.ϧ֙c[kc+?^R=d 9P~~N@T*Tsy3/1 j֍Sl /YaP*'y~VD%ʯ9yd=Bdl݋ht.iF10'AԦƼ'zSC/iLX Cm2P{.nXW4$. 9+(dƓdksm&EDY;G ڊ')[jtOyA픔~٫`ܪ`o2 D|2E)M#RYe2.LO(ߠo2fIB#Pϣd⊴fI Io\cϏ+cڲ2:$6i-27Vh5m׿?mzvʕJUmهM3Oe~AUg,/WǓӧ|bkh?s?s?s?s?s?X