#!/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=cdedc725ea97a15e2d999d4f6adfe7fe # 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 ]^/۝ڇ/[ߵڭX[">I!cE7O\ucƬҭNݮLcpv~ y{61š7K!}%gϢ N%3ϷG6eTc! ,כ{UcvيK/Vap1pX=9z) mׄckE,89 mA\= J0"x&+#: [ Mo *` 7p%c;Z@MȖvC^D9I`P)IIrz#p^rlCË# @0ٌ"A upZ1gY. (̡Z' GT e,Zq z|!/-)ż fͷDc>cgRcD4&S=(lj&@W OUӮ0h8?Q5iO^`Ñ 0@79 I>3hsh QXzwW'lz Feڕ64qeZP ERٙxg} #R{DHS1ZWWw5 c ͠ԁzV>Ow:8ØnNM]F=⸡Mf M Q驦J4M&ӱU[By4DIgF^j,qLEVYl##V6.6jX?B8ouCt44:%Q\ 꼬5+ϙڻyХ뺗4E2rBoGMχ5sܻQc4t5뜦v݉>6XU}hj^Pi RmhJdSk]l*WUd"{7VwY6N z-cCg![ǴyYh>[G)WQ~{.u/%R/3|1^OxMX{>x~ G<|*~hrhg@,h83ۯD ,]>~Yx~д׸}Q{ckGI{Z*;Z6^E}2/ױWXR(^5b`ԛ5 40Tzw$mNѤvxw0þ|pD4"YoDKƆ,0΀T%EQ1R$;T*u>+~~;';jC5(%+ 6{ٱpy<\)a>Cds1v<[?>G8&V 0;?5& 1Ҕ2v'RQ) B 5vq>~&C_nsVj=蟄>k@ (;cE<<O)c 'Qya%iaaim75{qI{jkϰsQ~1,o()0SAJyA 0G}ѵz@Z}8 1>٧2p4r, 8UeV-bWf@QA3k( Gxx.MXqg 1Dhqz,bY%֭U_[jN'kp+Ũ>:dfG60&m@I~{Ev%]Os-Zi:-\摦Ds9E>֐h ᐤ&5P_e( c*y^U*ϫ[;AT}; j?A:RJRЬ;UEgWЇM;'c0cOһ.rxOIZx6P2\{zpE/{;RRw`mDX0#xV`LckBf$ UnIz= {\|A{ Omf?~fK٦H޺kfS`禦^|E?K>4[Z \i}a|tgpG2q筂Pkk9._69Ϝx)%gx \/F̓lKo;8`>N KWl#۵A%=<-zo.胙y|#:1`Ek!'PW5:?74{NSWBc rVD >R4AES{0нƘEMKɨMx5xx+G%%f RtKjD=CۯɱaD}~,>ȶ FJgY9۔%.!YkVBn1R ~ "=*uU٫XB,Ӹ >i9ˠ,f0+[I@ŀd3D6dSu-r\/ ؁|L` (ډ\v'mi$3o{"UZCQUG4T?F,ňRݷv<\X^Յ ےZjwFh(xܱ-!52t #D8+ p&MJHϹMEanhn}!bl_^ؒ+wOdguڐZ҄xAY]%zF!`=񼡨 /dhyM5+e{l[vh!_O(F#N6, X?2AChwJʐN??{h!Ly2PǕhQmsnͧ_NHR9MYEdZI3hx[6j;lNm(DaX:7Zr4,!-[f;%j6 } TPýdֿZ6rPzْ BZpt7 ZQ"r/#9Jl!5R\%[[Wc X070%v1/Љzs]Quj~}A?((etx-bMDLHmHb(e^lŨAݸ%}ֶ @5O .B~m!Co:$zw˨b Lu^?9z3GKNݨM gLN͑<|ȣ}e* 'ͅ7k.7Y Ԝ%i4'xa57ió>۝?(LHoJ]$v2 b?vLs162ӯ|sq-@ :Vq VG16W0'Lj0潶MrXz7d Li/PW"WBpeF}*zlڍ vHA6y*Nc 2H Vucq@|Dx<o(xQS^{ib`5ͣWW;?myUQh'gϞ+\$)wĎ^ޕ;Sc ͼ?!`-CƱ&hD7`s'O.>{dMew0D&t[0Lj>L,8C9ikDAԫΫח1f=D3Y}0eg@܆8Ű ږ LU,5$+D, AU>xi놀@bkrak_+F r1]bMN4*㍛c']I b| +#V6H4,}B # "4ߔ{ +;Ma-1:T.2  {ǎ{msfx+;xnG>no0✈A& Y,"T8RY 4$,aȴ0ZK`Z"ڍA"'w:)SԹ1AVxTЌ=(!`wpl[i>vPdg{Pzz*@Q٠pS kb [ᰘ,^gc$z wCvɊv԰>jG yy:`צ5aiJC. l ަL]"nHETiZ➳4sT:ڏz hbL3_ćಁ# nX4XGwqbG[gd{nMHEah%| I斦Rh1u&Rw}q{(I=EdDl:eȌ9vzHjQ¥5wQi>/ +| 6]8LISԵhW@!Uk %`p`s`pzXDuO>(B!gqdqѴU5u \4x؏u++v%x :- GlX.8i#rVP9 >EVg7\pVt S{`"wMD@+pt/EXO8j3ͼګ~|AuFחe[UƐbeiCaB堘McfR5p­8._eWSZo p/MM?Df.eD}o'}S*U4nW/C$AwN 'Ol1U oO (Go&Jr |+*K j7?oY+aR%xK(+u ;so߻J^xQ%=,6! 0셏3c ad P6k'?Fpĭ~^wd9hSTE Rios5qا0HpBO#QϐѦKJ]*hy-6M`wRPٶMNv )|Wył0IXVoVg[?N ;]K ~3Or)X-+4}G|t$sIpSZKaLh&dTSaV)s- 8'̝z0P8ՋT0!vVRIRbv=~+K]ei^ٴQJU8ֺGJ,ГA"ttIR?Dz^[ֽH4hh+}u[^r[--Q*- ʇzSo Awgg#;@*m\3ȫv:ԭE!ɲ=gp((w0~X*MNmG}2;#64aobP1:l;n\X|CĐK08Crݰ #XDЦщ-afUB 2!S|T,/c`u#)^d$FdJ~t`d)0sr F$LæO/^SϏ={9acabj..> eJ F4Sҷ2OȾ K@ H蘣B|՜Qj@ P4}8,#$p[o2jڄFMk,*F&yWYDHɂ!)ൡDKͺرI'ݿ޺@r^PBOȞsJj.p78A&r$H`3Aߞ0 (4Thn UT9?Q( {U*F ^ߩo==>ƅ]\ Ow5! 5pȄ\&8^D Í!πj90,04ݍoĞbC H[1_D7%jEj]¥a#uOf~6d|G_t=}RIY Fl/Ƙ y.Z<@S=ĚIDn6$WdNa*lw \9P _YYMijbgg;Zu?-2*ݡxA$%x0/{4lw8 U=qcd۝}/PB޶>_q(ֽEzY7N`V5$Nm,GW P:b ED;zumvrKݫjU֠w ^ aDnQ!)hzk/8AZFхVVY19cz!1ѫpr#GD}bmr&e,C3(icu&ޘCFT춚]45uE_4#DqVļcUL',r)5 *%8}w^9W.aM٨5[@!T/hExͪ"B~kPOQq&L=xc$ZM)@"mv;1i#a`hmv% G퓽/b &#IYM^挍Ӧ:Z?|kUrq|;rJl7a ' \n3Kl$O؎}#E#˩ =ͮSh#p4Qu[ްd:w++nerFEZ^ r~ ]XߡO}Kೱ ҮIi-&˴xŒ;\; Aa cs[l I{C''&H[E65^t!cY 㡌Kvp;v8WWvXJ-ؼʮ:$ ,AR h7{G;ϻO+K_=))K{~rr(Kgq~WbӘv03ux+fڣ.;ruF5ffkmC͟|!dLBdI)^0bmǯ# g\1鸖GiNTh,,!Š[^lp9ĸc4)2L?FnUuF+=q}ibä\z3L /Sj­ngF⠲h1ﲬ;GC|M#W C5m0@ Z1}0#9]0 1ek%a e`UrA4Ri h<$İHJbc4Zt$4ѭANB$}d1[u>L9 +A9IQ!ʨ;B!q7$|q&0Hsatse_&n@?ĚX}3,f2'=[P։dʯTc _{sZ-e%pLYX@Op'Owf- cON]/hQѦel1:hednagRxuz(,[^&bWx4!3ǒ‹`kf"LחWn1]lWG= + ~@6PهivP.Wͭ^2"bDg}hS@@I7WyA2GFLy&#kF(5R@sEboh'00kiPW>r@]^_g#.u3 M:E S~LUk6 rfmځ+ ng_~ddqFwI.GEU'X(e=ggXv%ЇА0Hr7Ca]VDsEḷ\gÁ;E3Ye%u!J +eu29yR>U>&}h𑟗Oy 3!kHC&nXßdHz&DL8?P0*P(@ kRm#10f[~I^A"U ʒ9J1RZ t`ΗhNb.|G9eNivF%@dz]B4X&и߇5*=Ψx x JGH3yuX4!ֈg2-Cȅɾr$Ap7 ϣ'>iT,bo[èh) rVш :Q7+j5jPr&cC4*V- ur(HBNi)'Š笏,*u:Qaμ:!i]tMIˁ99r) 9)gr8g^8es_Do1*ˎ$ɂ)|CutvpPK<RL *BVr xJ3ѝ]E V1ض-Hd\.jfFWK-Bz8[Iԯ5ڵ݊Y@jӾ:+^3yHf"ukMuѯDy< d${T橃:>'џ`%680;>Vɓ-ɪ׬w̑h"/j~{6A"n~_ju$R&"|K,7"|Γ`pk* eak8kDy\)qҸ@uWN&@77՝M8喦FB+Ncw8{d%nE)/9F %HBecLk|{Qicjx&&\vr:3!`o`.rP74m=IDN ZVTrl_(}8G# f5ax;h_CLC >D2 fۙsD PB)Wgiwu8AQQ9H{fO7"[B5v*nKOgB́Ã@4؉/5bF4lwܮpP.ÐܧG$)tF<iCJ^C,YIJmK̟d+.4r_fagቺ$P2N,4iE*n$ih!2X1)'af<62p.u@9 g,O)&}´nlU($$EB3@[%^ ̩vov?UI{>$,ۺskT WU̟5*%x_j;~KFep)1E- C6Ws wɎ3Й|=\Kg+"k=55w:PSU^x-_ګ{t|X;]$#[c zdeg( .+ҺrW"8wE|],I)N3 $_yHiY(gZ_B, mi%Y8qdцG s~{swQ<3.&M=F/bM$FC !Ҵv rGcŦ<Kq('QI賠(pjӤ-(ӧ' *st Ni"n ~U;҆Ŋr"&j)`Jx@MӦ y\PaV<3_6ls]_?k  M7|@3] lԔ&9YyԤѭXba#"{k$hӦv E;x:&62T@&5E5h8p(<݂KLėr2ͨe6-Գ(;SJ!3\^%|x@hĔn,gCcrю<-nԖ(_$}A_ZF~ _WGZuw $=ڳߓˢ dk;sĔ֒d&V%K_[Zꄭը )(8lR7H,K( ANZ9:+/"!_#[Óz .緵ݢ-FiBCzFFRBhFeM(CA zʄw&L2'iy\SvtsrN:06ƣ!|ҴYR}\%Veb#A:'hðEcqs#9mE0!O@Jz݈&A=FaFVKR5E;yCQw0!ADtˆP ƈ岼rG4056iKs ^\i$F* aiN5̥<&ٵ3{Y\ݤ&GړR`:`6u!A$du|] GcSp C] wףfTnL;MLm!nKOb  H*}  !|G .4I~ U^]$ΒQhdbYI1cV+|SYֿHJ5mǮ5{/3X.pS,K'#K:aCco8A۪Dp<KFc8Y]S)b>lW h=rwIr"5 _U:;\t 8`֍lsݖ<*# >Gy`g_)¡.^R'-SK !#.}\ȩ0 O7(>f9L0PH#Ϩ_2$X+ƀx;N(6gZڋB-I+{sS~ [S7m\UHEsaw4GQWˣ 23ehtcQ"_3w@NU5ё|#  iaزXb_O}l a0<$o"尤E8V,R**3J$q<`;ab{gL'Zf?1tm%kk!(aMә@0y[[&}2 @a(DU7EՐo H/?l!ƶ1fF+M W"6)M1ȘQ)n;aJϡwEc.,ėlHAR t~T!{B:'4")FɢwNjnYz$:1Bbٚ`V LBn^E~UVEPLU|~rZㄞȆu$_q|]paٜ9ʻHcFƵXܧ© *']U_ /;V揲xxz- `]ٞ#ХjmEii xyPdh!*s-eKMcIqTExB NeS"4MNq,%NNl0":<[L%5}E^-' >)nenRbp:OE٧3IҴ~YgzȈ\],R܍׆@ > pw QZUDLF1*qd4BZZ$ ʼnѹb x%}{yIc=.ZacT%Q)_:|Jb'C,6-Eo_N\4A17F3 !kx+A=Jli Us ەDӪƯ^aKDGX&K3BJZ5:E#"ο" $ Kt˾ǧ@5SJ!Ұ5=m:j'';2 *\~uy,ּӆZ<Zeʞ\w7 7.n]Lz=^)|o_JHD2RcZ>iv.׿:ޟ?vrzǧ+OWbWW֞o1yBU/a}?5$z!P옑wP=| ``@ӢL:A*[ 4&r{4֩}{^8VNIMsF6^m~TÌC8_Mί[ܗXL `.H ?}AFfPxSZ;g/<-$ `uP@<-L$<-%?jrMqo}'sc"Wod30S̒3 ]OTTGѭpD"E9uġ)HҶ1I& z3T@xu %fŘ:!ǃ08L ;ćgV>}UZdm* oÿOD $z!Htl(v2;MY>hP VGQwNPO܍|a&n**Ȭ-vxg'S!2u1e-8BRHKTvMk a {ݰ5B߽j/EmR:GNeLz ::ɍI:װRAp +gz>R8eg 4'CQaivXM_>!C Itɻ}]&R6Kƙٴll_h7' ob7mZ";?btO ,z iJe]?ޥɒ*h3G޵t/uK29$^糗Xb CI$ a M)fɶU O>GѶdğ(7NJvcζߗ4:|t).8vّ05$מb-sҴ08t^J0h_u{cxQRnvKAtK'Do2AI"!I6^ܠ0IBɺ-m u7\r \> tvutӉOAFr^Sx>HF(8 WV m$C1Dbi`;asl1c;4E L{]H!5@:w|cAq~M%539|Ջ%G R2~!ёO}$'y!%dW{JAC$Nѣq sLkU79q|b=nNR(]DcTywu[ffԋDGqYP4KE/5JVߡXo! u -SdK;a$bM&&*#eseG\['k>=tYf bYH/S'{^Lg2ٹT1p~|Y-/˖@bvZ=v M9L2y`_ͩ'ٿb37hSDr5ielgYZ(^YY^.:aXd0%`ihoQs<1aj9e[ei2u )p}{e=]piL[4 /{;qNg)kǭM߱^3bL D~Bj(=5Efdu~Z1GBhjGQZV` 1t$ؑH)10f84T6)ŢE)dC,/Q,!  aCd%ʡA혼ZY3|IVBF#,ɐND0H@SUB+/|(N^;`M+%m Y;Gr=R+3@5XIINd1љ* #C=-8R1O T%!lECyXO1UkyYcIŤ_oYuff<6kkYqB6JDsEde(1@MFCF`B #P<9_7&(tt,"$ ֡@Ҁkk況]څ@sАxf, 1]j?] xNA3ܖ6"H+- irBV>f0#B<E]؎GK$~P% çW}$# K_/" EA;#5-2tHj r:d!06EndDFX-(*$E [fjp:CbclÎ0|hqhWT^c#,ml}$3^%M*R[{nbRD\n;ܔqa/'=/6ŸCpV-[Ռn;>6Vql G2fIDtNNiBp`Hc\bl_\`@r.\[+AE:.!1b`|wNwȇT8xw* fYaF=Œ( IŵvcC~G"4%*~$Bm4IȃYdfI'Yj gGe+7vLŠ5^DrQi6l^`J*ߑyX{)3r,Cf?BEdItAwn% 1b/DvfC gِei5`ꉲ)Gbʪa~7bfqp(Ɗٸd4U]TL%hYm6l5S|d>]ƨZ2vCc'-+R`KB{te+Q P[.-c][3{ggmSRy0ؙ`4ZK!kRtcPn1 /[滣ݘW#EiЖ9 1.6~cb_!3.ڏ% ؔ "y7vFM %JA*As+;fIn}꿩mQħf+64e k)7ؔPR6W wl ,jЪ-A R_V4PM'_kP~zK(sPZ/?0 3n.fYm.FkQD?En$.E./ m2u3H)̬j|u$Dɡj`󲅖ݚs.~ pV˔<£)U*ٕ2 <"RPk.$]$6r(Ԉ7_  w|Ң`^hn'}L%9qOaKAv"K}u˟ԏth |*>M8J;;B5c#HI24uVJ3VI"hq :֊<$rX2Eç#8HKN'8f4907jmc >j#8he]c26ֆdcwNԘ?s>uX@BHT|KMDkiV\Z"Cč3^G23䙶Q eblU6h%ИL, q4Sr"dT$2ճW-"qYx*=1Vb,yͧ]-^pfXxE2m(V R $k$fNUR јdRK$Wpˇz$D*KIn8rܢٴ+e?|6\7n hY0>&t= cu"mku| F 4ެ[C Z9|b.C`9,œp{i9Kb1Tos8Tw~ݺi`%] 3fWۘ6HGK/_]aY^%E =?g7#I굡O]2c1t;|vXݲ:oZy9L[<߹GnH%Ia:oagf#W ͂}-;7~Ur+]ϲ.KHKTl4w[c&))i#πjb8 C_:: M5 m%bGD쌍71թXf?^ľbK{2!ǻI%$bg1H=YlXB.P tMGiawa\ϺS;0>}D*/qRv}%;lv/.OY_7<:&=ܳ ~H&f^`uAU#uyF<}YZHr<^ 6Ӵר5ZZC6xk-emEmM NZpi\;ݛ2Ȧ%MxڋOBndՉ7.aX[g 9H,F6>f@'6GI@U+%ZQ9h#+_`2_X T 2NE2cI7#% "D [s&z.3 N@1>Ge1_Y[_^O^!u"o?L j6qwx',>GǁFVP7"D&}?V.;H%93:cU٨k`NCʯ7 +?{g998O?qڨ꒻-#J0$+J)@I%"2hL0]4cfqe46CusvnDWm |x+JU%0XdpHކcvJˤ=Q.أ&#N204sv6ߪ'adg0_wܲdg#qJ>-6h]ʠFB ;pveiХ'!?:ڗ4ϔߝMOhsmQJ=|1 2t\waKK2𙠮QXYF7| {|vS>*.ZQUxǭ#>=09]t[~˰l<n`49 re~~JB E'؜@jR0Bi&?prynW% {00˕o9B& %` KLJg0@A_#y ^ڂy*cɔSQ}Z56tt*ݛɨw낔kpzꇅF؁ͅ_CMRcw8 jcVwjba弤ZlmoTgȻ)ų0ܺn/V4|ꎬ훢8-a P⪴xl6sh6_kni[u>cc: }:}EG"i Z*ZQJ~kԂä&mdXy |T08mX< fόhe?=;".옥J]QX v^{%rOko#OWGp>1, # a<1ym!U`&~+F;%Pb\I|mɠbC_ZQd9 Mb0tI*l ?G@`;2e d=פH@8sR#/ZwI`(ŠYpR=OwZ9N*ZK:|,QLz~_^Xoǧy|<no/wfSlsJbm{ayccc!?|dYz8>;^`GOJ?m}u5vW6Vw|/R1/?~s&4Qкg_$0p \K:+0ۖheaE7\ C޸;aL(117z3t5t42 Q妘f m]՗ZĤZM1= Ouqx}#TG} G΢v>G/iKڃqSHEހKhuu5V?α:h:A.F>g){Xu7u*X|: QA~šN-wh#W6߰q.~nL2%;|6[q E;<,+mZ\GD1ixl?+'+LB|KY<<`^>CԈ  l4{yziݵn; |-6s>ҋ ,2$h 5:mq~~ܠb\#@"ӧ|3'omum~'ub}}7 _ cm%?xrϗoꧯ26D˺`8|buw8 WBVW6+?Ja0X^jIYN*Bʻyx-Ch{";ԆD۲hÆ` Kz<;Qll< 619r( [YQy<»<鯊vMT+zv^bfCUڈ5ڬZnϤu5Mٜ㆚ZjgjdC lDR1aOFVOf8aXhr B4!3qjM6s֖05W+mjxCAɘd١(6s(Rd(:ql$o/¬ #735yC8lMw{0?bgN0p|4AjZC]9r_m[ZO%E8 Iyj*0t~+)=~Ђb6 l-4:7&p=m/?hئcWS&y~romZ{mmc/P+[Bv' )Et D%DuΒV2[Z1jA=_\[}9eP.gYg5ϊgv3{w:+FȄWHؽVmvOZ, U{Qio~Zy*=Ew,QfN~#eqsUX*Ua5PZTaVk]|8f i=_- ?LTSK|~xr!5CV2̛[ə*;$Hِyk('G/{^uϗ(!.P^OM1]#I$ps[kÄKƌwu |Z=>گlՏNB1 ,LC9]AOx̸;BuQO :SKʻzj}'PsES~ JÜ d҆ii1Pk3 0b%c2MTڪ2Z,TJIP ] ,g+qt>w|Kti7칏kJ֨iZ;#ܹfJe#3pz>1?]}sUaq!ͳbLɗ ZMх.q {8_8/P b7岪VdS>醬ЖX;ЉywU0eKXbjk81ΎGQnl&K\s+9aL JE#"{z 0OIs>.`PӶ_ˉ[g`OŌͫAt"A:njCk:skH p  ,QInO_#P/Z4a0*D{1HE Gn1gA$+_E gcXd֍.BdrW87UxMQSb;uvO5/_W{pq<=b1nt䳗Uw_/پ- aT;~~'$FSyraDK @j<m.-}r9TҋJ~$P..4Ot}cm%nl>w|khQ~_L,^M\ii`<] 3/,qB=u( 4$N< 8рnF(:J|Bi߸OPYHAFC E?WvLqi+DcS˼^^xI#BuZc7 %EZ?m5xVkU QO^wpPorHl#[:.ݿ9)Cf^d7s*Zmw:H38 *K$p<`87̑dRB cZܵfG݁$c9Vrh9BCAHw`1ףթ=ų$6 7a,gVPYG)F = 7w'2#RsXlZHD6&@"{5h2&˼ø1cFwHh J@%4(.sfNj@捪; n^7e༙Hx3~AdFv3bth,(a2s〡S]'"J_Mh|k .{#K`DT;GVrt?$eıYVcSE[aHh:"$ Qs!"̃H䎱L7q1G{|͗ ۰7^lw ޶F EgR0hin4# 3}@5]ThGEZd8`i.wͻ -+ϫc0kh`e; ] EA\Zx$ư}.DWI@K|;'@\S֜0EF_?ZiL$3n[,DxlĽ >\P•u#$^E:f׫/%B'5NkP`|M($scS/4u_VإV~(0n]fvɓV1Ei6u&l=_-"Mht[9Nl^,1&e> kya݂IetM5lE{bm[J.W?ګ r~px(t-FkBfr; UK4>qKL P$  >'"B>)oor9ǕvU==prW \o,1L0B}#"QMP6pgNXx$ ΈJ : <2C2PD[hSs YF[lc Q&y{\U穃9햞%s%<45Ҫ9[:+7.50 <vTl@GMt)nŚfJ(l'K*QH< q6:lYc$9"UEc$ Cc*jѱ-dPvޥLMb2@rV1&O&'s QKpA=֏e[RG2/ p3UjDdM Ƴ`sߘ%*F1*#PЄws? n21f3U8$A69& d$K̪&uPR]}k| DxȠRNh'B_"bfF֯Tjwߣ)g/|X4|c>Yl ajEmآz>7&^`2KKv̓/7[FS ;w4YKKjC:IKpf=,Q؝JۙrlxYP-8_9Er6 ~ Ob@՘wVhAk8hF|l2; Y=|99+ٌ`P I K.CB=B6{H+p7|.DʼnCP۪()v!a62N=B"bIO Φ,#jr'&q%= %2BŐ @ŜcR 7啝C`--\ZxQi+ ^> lS!Df%` ^{:~ttp).!ԌAw'w&1e1A6l8}niP4d&|)$5f>SɟUžvW^ T oeOO>!ZѬ3U^8$/z_\%}t +s(bS P\ϹG"@p>-7>9=`@(ۜ\i8]Jk!20hŒ?j̯q[lQkVwʹSuxD9\c\4dTx4IB3Hb@~%]dEkNlUDLEB?0i B/±:^N!gʹx!N+5c)jJdz` pl֛zSeB =΂/P2lYYp-@z7eF #x·U̴m3E6*):SX82[אyjB*5!!"4+ HEwbP[Բ+9xixGvLk]^og.1ymUj.8cC嚣*Jhr]i]hsS$a%٢aL8J1Y"zJӆ:mdf Ԕ ^WzH7WҒx QS=ՙx= ]Q,ថf biDZ1rgVܲMAF?֎5<;<6ɛd`庥o=ہg)d^>BlēU3fM`ѯhPK*6uސzcӚlCJ*<)VĔa> A̔Fy~1ID=nauecYp(Cp__[qbի/Up<4EZZϭ(4 g αh04b?wz݂^>=quv8/dIK,{U_#c#v/j !7k?+=s(^1}&B۫^)=6p =N2ƽ[{l&5̽c{ڮx{XT'pm+ZP筱zْ-0Y| j[th+D'k#巵]ޮ`L;+wo*7JV z[zuWЛu.no=>Jָu*#[ÿ6 MJ˰ 78ulf'}Owp(7?gf fѤn~7=tSV6hjT3*A-V>Vvwg2vեY+dV)3=#S5{ ~ưAϟ^='8сej)Rh3zB#X١7TGAC ~GɿbG_q>a;2Ϟ>LҟMKyOq?l$o.F(3-e^X,/O e[G6Ls]e,VVr|U;'_/1;_^ڹOW?@<É_M}^]>,M`;Xչ^ u^pFlEE1D1 d^a$a}yo Jݥ]_?v=ZYQït=&@΅-\7q=6"H\|7o=&ҭHȶ(`lʾ"lZ?:݀ żryM&wN$S~G55`>/~{!&)SjRb j(wUb~!x.c|tj?mtKAzaY~.GeamƁ7R pߔ/\-e^ٽs"hX]x?IKj%Y(MIJgie *ATx HtKJZzh7*PiEpp2a|T^%`;+)2eY[PN?*8|pTyxrK|4\u>\Jnf9jrH{I ʤo. dY|Rߔy͹nWRr@Xac;BǸѶ$7&}WlL%J%u:!DB) (# 6pI,p1AW]"6Trw21lQ=?kS8a k;D0RAJm_upW1O)izd;Yk!Wui=bdd@ʅQd:VtHԹi)bI@8B>#IQ3H|vC%RBA1.sJ^  =-#'ɽ,\f`t^u?s?s?s?u0