#!/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=7f637e9276cac189a8ab058351587618 # 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 Rb̍σ;~sr|[o9miOO޴:'oZGoE%}#{iUƫ$Xܥ֭QՄgVFUxiGCFSK=~ $q""gADNfLK[%}Cz0a?тp lsB%Y\ &WM{RB2$8rT$ (f<-GqʙdhȂ2*(s<}@PZĊP`iʗzERфr3tydY=.>ɺۺv3mu1vPb8/4d >0vdÆ6nF} |45=kp` .[7 a6^Ȇƴոvv9FZq߰hlɐtucؕ́˜kߤ L (.LӸ蛸ڳl"MS(] '&Pd c 7X{3 6oq`3p\&{qǴY]1m예Jp `<_g \Ӷ# Ӏ=bpΘCF^ m,q@V8[;#V60֕98>D8-Ǭ,'X5:&Q\ rS$Vf]2BtPRjC^+Ɠ)TA4 ), V8 "a؍yVK2V쳷Uk[#ѯj8pkg:.(H0^Tco3[fʘ~r]~]W:m&yoSN!{{"??-e㿋oOdN J~=Z7[?gԻmoZ>ծFf!4Qg-hOba:z u@VRfTQ4ۭdW _6#kb87۳su; ;`JL~ i߷x8z*CNAQ@fg'L|&gI> P6Y!sY>#,\\V$ 0.BhPtzIDL'~2}]HJS&q$co\Tœ oiBȣEzw^l9`=-!V!oi~'$,N.[ayex;=^ӧP;ŗB ճ$>* Ͼ*fP}IвF l `!!uJyDWf/ܩJٝṘ>*q%9J9s_ұcvr1a-NDn"H&(C8^:sٌu}O$0`Y;W\<0*V1-h(!GS"ׂG[8U$ h8)SSx38'FC 4;'SDqxP=P4GRIaSHҿr0Ў?SKxiڦ31e>D)/z- &~`IdOcZVzL?|M٭_5S֌pV|&)z$QI iBˏySu\[C c'2)&Y %ޚ+7䏨0qrgiKpx$Ukힳ09N&x #a4"Vkᱳ2\NOaz@v,xӣZhN= +O(F8}4vumHq&7 rʁ._YM\4n BN qS/i[VzGU.6~8`ReAxDGe0mJ|vLdiHEOx 7ܡ4v/Œ]T;?8@5]wvϒs3s5|mɹl:>grL>'G `+# ]3? E90Jb\2=4AG K .թu Aߕr<Ԏ@*ِ-xumj||o\9Ol=XDx@v,f2`P'a`Ay<^]C,!@3LypB//v3/`t;ܜLh+l2 :{Sl[!MBEM^ia2T6 O@%MSsE/*yxΰ+IRD4I4J<{AMCiʘh̷m# {F~S +RC ؀gXAdYt M9кM &Jl' L8bj&'l2/-{7#@Y ԂބOT;pϧ*SO*m$?h:`=>]/"kzu"gD|{\LTlDB 'J[6likѓsƥ1cwI(cnfsMmlJ r(2z,a )!`b UT掽~Iw'CNpFWZ Ff΃Z;D'zF ~u- @ ;t{ǞXFph|pJwV/s|A- .3j×ؿ^2<ǝNuzutO^t/d]`jQAia_Y5 C*~z3X+/;^{v=$wGcڹpSM0V.u(pukfU*4xKW5:n3OÚPhC!l 3Hf4H 3n ʕ9Nv,@*yD&;##xzu {r6{xL4Lz@S?~;o Xc5ĩSw/<༒?cņeX$ j= A>H}޻Ag ā#tFTB ʩ~#hՒR`kr`b>QÛ8PI_ 'uNMP%f;2AlͰ7c:g۪ Lt4pR:8Chdo,ҍ[?TWK<~u5-:CǗF=VuR@GLqBlz]*ҿ1-0`{T3@񻰄 h!"I#o=9 ` p<'}=ᅭoPnb0bH'OoJn,(ѬABt %&X. tPF()H9FXv=Hj9$K=[_\HO6צ 18 ;ij_BUz$GGQBv/|i踉R֤H>,s{Ux C)fgqO7V;4vO sR0MVmMPeM k`Jo$@uM]Ep=p-g=G6b^<;׌8CEl̤]n5aFp㬭?Md4Iu2ֹrb[Sn˭ m^­ +SVV!kA \v $)rLX/AA !); Xy ng"^:MSSᖒkq`] ^V)nz|a)25s$;]W==y$÷\^dF?Ȍ?qxϋ\[Kmat֎S_YYA$u5C{IaGQsS8uB?$K +&~uyNqT?h,$}V;8װb/T̞[Sda]RRyqKeH\ 4-n!Z9 _)༪a*$t0`4@ŊڣS09ZFsͨ !o}6?!6h!ό[VF~ʐӨ5:v&Q?Hue&SVƣhE5r'!w9[[k~xP=~~$'o +]] T#rW?TygK+AEֱWߩ4j.!L+j@7RWBml@Yw9pC51`SRˠ\n!46a@9\Z3 TXR_5ڹ*<_r.HrpU!C,T~ ݫ'nݚz~3Ǜ%8hFn">dFQt5$-э~\ݭ<9ռȺ Q}K=Xr*ܫ7Noj]H6F $Ny `n#6Qk%o(YDuFS߲O Eq'&"h;KTGI a+Sqy[~w1/SJ~8xK /0%#D)֥$=]wh@0Q  P5,#N"\b o\u}h; b˭B j H0vvm.='|[!O MW\Z$Np*%ӎM\ FqMSG&aLƦľ@nŶףqR&h\Rm+![Ve5N% pҼBoEᨉBo3jf蜇_y!FydVahn[0 \CCCCSt[+ 3GBCڝb>3 :Rbnvʇ9A[G6stfBKVbEt$X/?p}g A[)z>a1eq:v[.X{8d5{Ku8b ȍS\f&IX5؎g;Y0(r "mL-=հwUw)ڊ*&f+K|dO[VӄY'TZKʬ _s}ߓ?? njiP dz*I FZyQ mVC ]+SsͳXV/g"ސ#=)^}ԚPJqn\m"!sI{[UY4jSMЂjիF$륾lF1:hrP AŜ2=͗ ^A.a64Q.[Jve+ݐ&QJ 9lqeҨʝV4X$14^&~ \O뽛ص_b)u{3Z@jdcRSg2]C`=.mH/u ?EPvul}c+%Ր~\s5k.;ݶF& 釲 cS,4 #x@8J.5vcsO$ļ9V?kUЍN}4^igh iIyQ07Lޕ"bW! mZ^3 ֌BoeBq5O3D=F/m>ER Q!I)DqYJmmOl4`MYn*E#N2ӋM)'9ژ;'R*.NL3NB$zbtS4iuwf&]Q _QR|/-~ੋ$)G; }IIJyg59Jz=si%iŰULsǻպO\hA5Ovbc{I k8 6~j2r5#3мru޼`B'o1u;BA:k -EpgMRz3 h~^?q _'yՍq|9_aXNe/$(q]?tSyOoCl"'y1 %@4VQ(VxST[ ީaCG}(ۓ:BV5o"vuT17JIh(1QS Ù4ׯ(+  D䳭)l* mi>:h;(GUNwL\)XQO% 8" /ǢH3Z@s.eMֶӸolFA*rEF*E,jās#Ͷmŭ3b-gʽW7<%RႧS+ lΞ)i~!o!Bh೒#Iɳ7Ai2qi&O-r *+P.TSjPó:IRh~JLݨY;S> J}C67cgz`ߟ^RCwmk~+ݬc4N bӆeO\\HO@:f V%HM?=l7vD#u6t*GH/PXEB &Wn>!{'^N.*}l"3א z y;O}(Q}5w;WqBDaXKԗUKSn %Sg|X雥 "iQ%r.5햎X]0{^K̖C4ꯁ9 ʍ0W,&w0@S?51].gwR0;Sm{yp\ƈ\@v#ڋ` <,@#TNj:~p>@&l̒}96;.#xTgp2by#uk=hFP++O+kȏRz`GP{l'vguv֛mݿƖ3mt;ݨgJL|$s1W\8z\1gt`rqANt *Dao(=s2(s`;_]'P3S؄mnuőS;Aކ=FOU,hB 6 cDG#Kiםn9ԏFCZ^oLnUm Gc;qPu]j(uѻNvKӫUEQ'->Zug6ם+x)0> y‘ȀS8 7Qb4Au Y}DåȵPq5Գe!LuϰqVzAQreGgQMu`Fn5栒7L' (>+9UlY~}R/hi~Ʉ,E2 .q+xjj>-+ySـMY+]Tq菃_.?ly8[@6Sa/ l/egOP3[rv>"e賲R}1+E;*E 9S*TǏ oW~D}:¨B?Ӈwaa'3Xթ~i!bߏ-w[&̕%TCյE9K 2w \[ZIߚSwb.mYk5_A1"9"ϜEwovG_{v-H;yf,:AA=8pcʞqgQO087=fj5ÎI :jBZV"Hk23SdMKT%!QB|wy~bY$e4^0|]H L "@x+ŹҷZ87gRJ1CQjY=sL|egRX ?,\4(Q?mŪށ-Mh (eRQ_O_ 1Cݣսk(S-z}._6`1E:B `6ryxJò$٥ɎN~#֋{m6%pxFZ} zj =+i6݋OZ[B¦]UA=#)2'F BK_Z (83[ii?ôMM`ƨKu\/Mxi"N̄Iez UW*O0d'I2hu7_n* /m0b=~HY7opp*)qvtK`@#I2'2Mc 6~VƵ8.,da!v_Ƚ͛ȑj7kp-CҒb,:v( Ϟ¾]!_y I~g=+Ⴃ_"#Lpu`ƴ)iוrY~ʻ`ŐI^9Z=~wl.h)Q0NzД(v>Z <ӎW%dA+&)tXGGKa jFu,<\A^[flL>AsS)f|3ۈtD3`2[BW!N-4FS|vcaMl 4q(a WWh`x xR*5gW U?'΃w *Xq= x2S\)Yk| - ԋxUZ(#3KgE 锡ܝ4J>%g*1gr} \m5t_K0ku= |x17L&J %) ? b wQBȶNh_LQR|Ԇ G4$r |y09߈j{*D.xQ``Bwԋ&2 mq]+ Y{ȀbCxId?_E]ܲ%D{qК wIdۼڰo_5V>Yb%]t_3k69'- |:MA>8;7M]ZS%y= :#<8-M ؃T7lzgv7z&ER(wtM SQviwmvva}=S>| -HƏuKy xƬRPߩ5fv@^Plܒ0lSH$dm) "hh!8Zj3c>H)L3yM=t]=Jy`WЅ C- Xi8"|Vֈ_ϗPm.Ǹoӹ3V"ļMjkHp7 (]"oPTDuV*Gz3.j{~؞co\r) @㯮|ijĴy)r1T7?rP zRw-;GBȾt!ZOWT$Khf+<^nEA| QbnKD'oaUvMp?4U9! TaDg}Jd"N8/[yK0K[·zeSрxhq}įsFz\$X&:D<ϗd|I+&,.OE6o'΅E?§;\R# SLG4kigmLw_mog tI?MR976kdR4Bxd<@ d/ǝA:`<Pd/%ry@kdi[ެ_5O:~=`c))I@ <{)~{w#ߏ_޽//qUܢy^53\;ĥ9qMi2(ຯ Aw uV E@]} Hl%0nC%ej\' f[{~ b,]bMQO&C 8JAOP&IcrBih713˟߲wmŽܦ+P"YX-H`< сtqw#kn8' *"@&X%H9&QYPH >F:y St  , ㅪUB3ZR+j/ؚ*ea w" ϫv{kv*Hq'Evɋ/".ɛ_(ĻFҋ ՛MIVG:ЂZX]lݸ힖J8GDžQQ9sU=I&/ l0iQ.)L Ҧ%&[V@mBU?%7bMxUWJZ\)CX( 1#VfR,WpzYu˅1 Ax`¦ CG$/yGɾE$@Lmy?藑籤) I ބH 0CN %X~,yjˠdO)H*NʏJRzܺy0xdLj9hU<_2~&N8' %p.P2t/u;.;@X RN4s[w0 ?6S`V;.TјbNzKRa^JRSg)/Vgq<ͯ=WqLyy(uKq^J?c+#|;MGs3~G7 x7Q >LI![?)7=|I)Pƨ-?t}ڬ62r8s\巣ib:Eb641si0ğy2b2uhZLQLu>X!ۋ1*SlrܡF" 1h8=>3F#ݛBpL|yk.;T˟u8+X F>w;H̖(W%` "7Lt49OmYu %vE;\"e,zoJRD`ךlܖ8t& 0mo0%LOPNDh`B"]A tmڥpD.'?aGsvQUH64 L㻗f1oR:k%m\_6V?6i=ocXiLz~%& 퀜5=g${Tl!-rvlq*u ?cvHALAti}ou_g%"7n4:99JN4ڐHGCi?t4`,SIϥxző,-$GN5>ea ,Mc.]Š^AE2L3=AjƠ/0b2SpHS4 #1<+M%.pI %( 7V+5n_C"i07''t}?H=wgZ ]A.( Uzq;8i,JKsݍ x|.{ʰ@5j; 3S@ 5Uwˆ`00ɰG/)0" ZqQ;~[KM[9 2 g%{9vfa ;z`̏ٽf{'#! f׷H)LWӃ-2%j QwڠS kg/;m]Z(cZɨ]~i޲8Dx9ǫR^k:r+`_Vl~1d> jJ? >?ܭ=|Y?qhQ A#lBC~D}H^* ']3%b7=[4r\ei AI(70יZꞮ]]Ys钢N)(Boz̉x sS!4@*xX$%džT,p|ְ6u6@d&vdS l˟NA q6>Bsy3&SN,@-?{="w`j!,wM{W?xu wv p$(滲~zMKj0%qCm8 i.C9"6Z"x_?)„acۆW9Wȴ)"eJdSu!` g%@-Mb*Y) 0;;J85U@C2~gQZDI3+A ĵfx`hpW|)7-5RÂ/p?{çW6:_ ']lۍ MZ|OCH7$R{]NΒ BJcUŁ gD~τR@A6w—?Q`5W@ƔG 'Hc蝁ەjqӘC@f҄ xI93L-Ͼc".s$6:,Ӟ e`0c.̝ٴ28D>Kiet{ʫwE֖QxfT7L@m%`oـitiۡʟ>SkPຶ$O=ں*hF"3}=8+նQ ,Z!JO PQj3񤡢‡N1o呝c a)?a&9p` l@:<܇SrǰcQqg0c4-D7~tV䢁 "B%a>rdy$귕hԾ("p Ւ&\ݡhÁ0vr)Cp,SMM;>r,Y2d᝕Ke/2\au,9塥~m4`¼J62R?}2ꞗϢ+ xfߌ %V܏`4fXI NG 'Riz Kk6y\Zqz\,kiM2y:%JfX9~4t̝Jt*5ZVʹx, H.ٖ k51H4SpT"Ғ3T>bAjct4,7bIݵ;QwLRgԑ,]xF"c]1d6'X-龊MP ejpw!ݱN`Vpœhی BֵkxxhV@;ISJx!^!~,:svIVj%QoW^5koM Aa=dn]DapEG#*Ha0%1zXD> %MɸkfE[`BjuIJ&]o^b:,,vlV35.5" L-{%Iv&ޠ=N>ϱ8ѲƛjMsA'nX Tܗ=nZ~_1yz7oI?=;m5R,{ #iSb)-?돟s!j烝^g#Փ0hILe% I.8SS:Ӎ u9SFt!o*)ԕK8m$ 7 S;9 7i,Q0+sd|JC̺ЌCWgI#V .e"BQXDaA H{ӍF)0U,MliB6,EeJ5e&B+϶ppHɸ շ?^ss>qRCe m2I4~_ ڷIǕud;|CS+՜Cb ٥}+RpJ.-Ͷ?fڤ.@|i.Ў{¶a>ar9 !dY|O㿢a`eRs2ia3SSoJj2$zz󉃶QA vw?W+:V BvpʈrwwN]۬x:*NFuwZ_apGfcV;Z;x__G]9C_MH++n Z߄@S\zɨ[o7ՍuDګ3]MWkf{6_8@$Uw;}G_t.nyYy0)nV,_.cCkV 30 g21O蠣`9p]z٪~ kL3 vi9Ը֖8OMJ^i2_DGI<9e݅taoVF?ME kڋ&}{F)59Fߪ7ȫ‘du(F1挑E[4S: w""Vm[DH{pF%yT= 489>9hT78CAs',Nwj&n7:c_q> |}#U6T'f!!d-3OQÂAӇ^xWH{םI֋6NnU/;o'?XI1-a)ՋJJT2E?Nv`ZP"jk҉A NbP@F%&2$Ecəʦ..;*\8 pL*DP}~xx l:1闬v(";b$:;4mv<J1WWC,tT"o4AD/DN+%bԦl(N[e󯱣÷u4wD(ʵˆӓZtOwLs"AXJ;BҺEoDn;_sC`NZEWQT~çl5:9pRr6NWs:ixMt|0LDLi+P?:Qf#>~z>M;wTVv:&US~&šiI ެ[i@?$}iq zk1&؀Oކ5O}~3QLo!S>[xf1f>wh![M3sd?zQ}$??K{2 SPDOH{@z~AT>hYޠy2$a'd²CzU?*Wm蘒RhD% B*VT l$0au| :CX@%X/ea>Y?#s  %MDEȩџ xcG|I'("*[*isM6 'RBC߰U.`fKɰˑiDDTpfvU5ZRz9 %VtEک;C/tTa^k"xX]zJ<0)i/o+PvA]ўt^8drze'bpݏGY}̤ʦ^OzA]5~о!ɨ5q4<4.y;5᷂a44]f?pRFITwWO*^m˸޻kN`lfrIZJJc$3Lݝ<}]n*K,ȧo>I88~ @QS8ؿ *,4ݛ{J&Fi-{ |(ۆɴQׁ0 =3B0бX{FݰR"bg ;k6H=g' AJx+MOTwh~m (E&)-egEx!,BSl9XnxT1n B1 k@Py AkTė~d b[s^H6v>.5OЛw^_xX0G5 I{xD. 4B83GR,PfƚAs; n2͙\a:4b-ͱkԔ3`ĝ7Oc`p:L vw5_% ǷD\Z|,evN5c5 =:H ޶R\K1h=[_FQH:0-)ޫenD7i\GCve&z-#>t bK>*ɜݪI":GJfKtID"cSZ.*Zč{^ГNUKq0"(8hŸ41fb# E ǠNKP$l3jK2 P6}IW.q`ɘ]0"FgT z)e#:VWT\u;UJmqm 0m )ha-&☀ް'.*Z&7#,?"Bx3c] ɶne~y~mǂ$jA::tr쮋=#:fwDP+u"W -̒O8)9^{pxҤcQMQq=`zgm:^k-H&pGuptlq"fEScHG.e[.cx]^!Hˆq{կt;@-pzqyA)$K8P^_}iik-3Gb+=|1_Ҟ,}Jws~R pD̖+Niq;!6}١+rj/CuGc"8z9eSY4c E±U~F|`fbV/.&斌Н0f$K(Kr1!wT ~/x ZOڹq.*&ǾF?#[Ō8ej!@Yaf_!DRq>J*q3 /27.bT;F&W4Za$oAs6qw~ v |;>U1t_@.'+;Y7'َ/Ffz!Kx==8p(2wECT|AuF #@n LU3IaL9GHo_X!=XEtN&V \I 90ތ` | e? κq+'"tEtˢ5҃MZzk+,tIฎFmb$YV\8vYZR27Oa*]8dRw@!\lMKhvFH{?! bC6`dҳ,,p,콁 ,kͽ.jMWmYnX=R$?UmW؆%7# cȦG]ˠRqiF@=l7 b9A;JR aZ:ּ4])t3#M`p֙'K k6~i>s?81pS祒sǿkm0}L3Y^? 1sDQa2 sCx,QCǫdWewc^>k_-sw$ &,+icn[z5i9gsK!Ia;S[1*BQu<򂝓Pbƅi3Lj;jŰa:$X9 z6 ;Q+lrMRyM): O4HMw qnr;1iY4&Ҙ z&F>ϕV[>\TQx/^r#;r4-3j]<}"ޭd7v񭨇4HW %}Ah1fpVGmBpstJ9Ӧ!C;BjqЕ$ІFd]xO>妶L`ެN`FXi17HǾݥ7F[hOOڠYS\)rǺ{d8_<%{;geIvQnuYHoP=#O᣿xnGuF0r@rgdvuX{ly=%z7cJoyl`vh1(&d&@|1tPe6\\**cM`4\kElֲ9ᩨwhL?$os(κmH|q1TΗ U#m%P ч-MhQ wmtfhRTD ,p,iˈ]Fq/lH??{iY$Wr~}||)ɦØm\; '{2ZUThjv`_m0,Z0:.2oy:W:I ѻȤ} (1.+SgU35O'Ca䡙2^,F(N5 ڮre@%%!X4QM 6NIVuQ~3+0gd5U@P'Cw \6ire=__8,ޗLhCd+]Z24^r/t:U^}">&{i$M KL uV/oC BD4YASvRT''+J~,(ǚ 4$:9ʾ>S3bС.K~&=^<921!ط^[w3hmOCrK9??\)R?R3Y-=s^=U'#<-ǜ&EtvMQCFMXZ :^*Q aڳZb?Ihw0]PJ>XWqtSR0u|;$gycӁYzqg,oQn.n jNxc$v!!ua,+K74+G7rat0UvwSׇ?eߥA.0鶗8=- yh)é|M,V c 9]6f 2emF:M!DrێPJuM )X)d'k`}[6}Q+Gz-9!=Ry!ĕM24Å{QuW#4f'.ݨk'}4P8LeZpLU: ItNf48lZb9?zӻ &HZf>T8!31&G/(áalgH\7zZT.aFV\{k }1Fsf:}?o?p㿩·=ժZ2ș˷9T0b EYtTwXz9$ ʷD.¨/+gN#;cuًQ\ /I+ھm&w6+ѷ6DG7ڦ;}1bL) tnWk6nm +ZTm嫿8<=ީmn(Gp-5eT快#$㭫75hkGOߖ^m;mW;;w9#9YCE8>=ѹZ\8sYoH TejDU+^W&2TmxncܸOeIm{;$|i-|| 'Os3ʛrӣ^BWhc>9*~@>-މT6ρn~;ܩNett9c G;ӓA㤺|zQDGJ!sqP'f=/`e|3ۘk#ȫIO!Y>;V̭wwM[}+DEr4%uE\HFG{ú.͔˪ZT<;۝*kS*jQ^:=;1w4 1. HKӢr/:cqm fFs*u$6oDsk 4v#04e?l`.Chqct3Ц6ֳƜIНѵ'Cö brk+hgJ DNfۨ¤@?9rEq?h S0B("La1f/Cgz1E0Jodp?!*>梅SqzSo᫓w㚂)nmWYãߜ7{p"$ )P=Y~::5աw~pR5J~w[?x]RP:8@~rzRSwiZcK6hNpR-PLVc ;QiCm9|}«44T㟱RRݛȳib"Q+8/ ;u[^ tx|erџT9ܬ]07L1*0A#dתJژ8_8.Zz޵XXvT갑۾'.TN۴s浐O^bݑLCRvnd5iP[w%[^Ɯ$ϗU\?!I@3Zɼ9DX wH q8u2POo4=s{NnCLpF oR܉(L 8un N<m+ DrJis{tPPDk+Jr]jYhd'@W׈\ި/L.fcOeU̴}ė^ Պ#z+0pun*>^|gO@*y1۹Э3oFE%t^tI;J}ؔMF}X\Zev{r7̬~  Uz?5=]z n7Vɷv'")d<˰:MhUFuVM )gg6y1qMP+"2lS:T~awG> nd{Hh-|#_sJ|`)ȉ\Ha>8֎}bL vGLm ?=d Yr^kC%z"00 -mOq6ݣxE5`Mpħ|J=9Haibv+:,|=*椗FpTbX+Ry> 8Az|./?/ڣ;^y8tU8O onlt<1AA>zxj7ABU|Κ>CfǠOb2b:+Gb4 RFLNCd,9&;ڍ93#ڔU7YvҬ^VQ0ㆣGⴉ0G 'LQP}[[4 &.i=,R: 5}ʊ襁Ҟ LƠDIJQo cp!-ri ijhoݰj _;^R3G|{qţo.ӁhƠ+Y?DF_iCftlOړ;i8&At2)6o> 7:W=90+pIbaץSUStzu؀&7dx®x-`_5ށ}^8/"A93Z;v-/Bz"xsM]ZCa;'J #Lǃ^߻2z޹)eCY2p=OA ?&_qd!KTR1tꉈ_@8jJa_65 9qqS-Hwz_bVWeFvemofߦ>h?yuZkɤ Bp\F@h4 |~ik~eVQK NzEn #9b^M<I]ȧi|`ؠ0ʭ0zyMe)n }^09q]aRAO*wzw!8m6z%Cb8i|.-yjwS/>b!e; ɣ))qZ1p;kG}Gp`=E">}ݹ`ɢ dZH. l[Jȧr9M(PWk` TZ К'ɂ,48;`06q"?mӦSD'[jDrnHqIJfln^#6݊FzV/wr}&]q8ŶV6v5&\m:+ ,'#D |ł{bY[}4LËd⠻!\/V[*2+oeMm}1:%:{4L(6KI@=:?(a y^n%9Q-cLBba(-'%>TXHͨ">+%#*/9Lu9ꗥ2{eSG82Vskkj }uIR?DzQKֹi3Gr;șqwNxmۃ:Ux˛GQk2A7pr -"eAukEHpĚ~ T>E|iF7>:5KghJ4;pq X.G nK筫-<@ dF9[lf͑̈цu;a5&VL]x#Iu^if#ae:*1g/ KELh+am`4%-ĸmz 5uHv1RTx i3KɤAFpڨ%DGTKpLGI{)}:Fc)ǽ ;f ф w~Nbdȉ(!v΂/AﰠL}$b 62DIs`1O#hǢs+<yd*) 泵 }Yw/q$֝5Y {;K5.3A'}R&|04R_ٰ.}gfiJHoRL[1 T#_@tFZ:α^JI2l Z4 lކWŬjPMXʐW!%MW/)kʤ5S/C@'+WQK6G8H#ͧ%"BB"vrU4k/ԑ;0``jifK ,-CLqPp+#!w(| yrCa?}P%W5g*8cm me jUpd+~.M6Q/9#x!W!I??AGhp9!7q:Y? ÛIy NPoid`y}u;Ltsb&4dV^-I4U<|fw'7_(>A3PŪksQ¾T6 nC'~r o y)H#X{| '4v"EuwJfl䋣WתiI`H:%eg\F"@;m9;[^-ګ-rċL-4Drs-ڶ)PrNЊ6qVu)'0vgYJTYjF7Ql^}+毧g+ʚ_AR ZF؏Eߧ|*k~> }>kˤ rK^ٷkFGF5>Nos6WŴtʘlK,NK֟-RZz췴ғTKߵME--[m ֐ Fժ}gZd.98nTqr2EgO6`% #K3Yw \6&ۆf5?ٴ.+Ѭ/c.1`w`O$S[o(=l5E#o.'gdo#z"0J&״@ȣeQ `7uw:[~' .i hG6"X<5v\dTŒzOl捧Gދ\?F6!<@jAc`Ɍ}Eh({jszQ="'rT' Sg6J4mֶ ~=OhDg1zg3R` 2Hcl3)`2.hFfpawpKq^}DVW)/i!JxsǣM05FP\)F%ۂc4g4"HFcS; 9[2^vzJpA &Q Q;/tKDkTzߏoƎ'LI-,n?鋎^Eer*]leW9N3,x|f&,EVvYԺ7hgcQ㊜Puze͏K4![PG,މd΋YֿD8à>>"ѕDpPBAG얄[㤴wtΤO# .wHml He!k^dm+ψ/\?_P~=:ICCFĬwRDiQY99ʑkw:`KcG@Q .9`7 8xɶC$ӏOF #5ڃV -7gZfAfء]V{nlpMZ:Qʰu}ȃoCq.E Vq$HNg+Htoy ,h.&@g&xmƾYס='LTV1L~G;5֊Dox[>EЖ,Ϟ5^ jaP?k[1 @WnmvȋΘnRF}k:'q\Qh%3n}OrS=gvC?#x)638(XhF<ѳj<w 2oZ$KhN㒙kQ=iŲ_/Or~UXJS3$%c(Ubr-t;W1u1mQpwo}lVG8Lΐsjz˛ [m0ji)DŽt~@ %ucXɾ8D ݖSX'IGqvV3݇Ǫ2~ks߹`leX"T4O)_B?HkOV7Om>>;6l&ގo>9kZg{&%A~ rY^, :#)nZql ״?(|(8< -'4 .y|3^X_{jk3[Qɳgk?،VgSVhoߌ={ͨq~QgOڰ}?[7?^{v~C`P'H n(FJ8UpL !t`) Zd"acR䠠q}dyfO/,\EI^{%uNd6iƙDN?+l. <7{,ݥ]G]DiP{2KAt%tr@)JP9 eϖ cP^qxUl?~<^}*?ҟs^+WH6{6?C>< 2Gg? &mW/Jw^Gs5ZS[..#0%E 0;{nINBb0콐x/$ B⽐o%$"O*|[而0)r?V[d^؇pB}NCK|#F]p͵NSvP*Wqn~x;ŋ[sbX (=&LѪG[B70RJ޼LrE`G^X(ɄEE\wD6^**óWiŌbqo\w%%%_1xmY SS۴Zw}D꜐ O[ eiȍIX+;1/ړL'?#ϝT_ ǪR8M2y3V{.n c&s?s?s?s?s?s?X