#!/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=eb2a657a08d269a7401f734466574c53 # 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 qAbPQه"iP@~̓sV#J^(GkcS<f*YIYQEylvԓU*G|dlLnN& *11DRӧwYPGhd|?B&/CF/oҡɍi8dWn'։ѲI 8!k$ kͰJ4o]sb7HB #@U++?ǣVl5 c{k؝;sҵMVZ68 9(X@~=e`}/J#.mD>1*cNAQ@gg'N|&gWH> P6+(Ԑ,uqs,\V$ .BhPtzI DL'~-:v:┕Y,rੂœ o ";ȿx@0Ֆ4W|Dx0]H`S rۗo@F%WxU1}'2oDK5Zdۅ[WP*T~N\6K|e"s+;ȝJ?T@y/Xe+$')cgK>v@'(gF"&rIG2=4AR< XOYXD"h5i*yŅ F*ƺ äJxF(_%ZsWy+q0{ 'eju 3pY|1ΙQf@'' `+# ]3? E9Jb\2=4AG K Nթu Aߕr<Ԏ@*ِ-xumj||o\9Ol=XDx@v,f2`P'a`Ay<^]C,!3BypB//v3/ `t;ܜLh+j2 :{Sl[)!MBT= ]/)Ӫ:d3T6 O |eƭ~Kfwן)CH'/%4 YdW-}jdr29&Q?B+&y3UůBo {ރbbgb :D^hl2~@+nijtsԥwOR!eL\t!r<ُkB)?-Lv." Z ]zsvW@D'`1+W: ۝QXӛh.ꎀ8]11]<0ݷ'N!;:<:WSSc5"LJNLt?JU6$,;2%VVi?GzPC$=Vfn`d`zOnta \A%!Ԡ7:RV-)?V!95I p6/i:G& fıdmUYb&xR8h)!4,2L7-Wl*٫%lvtCǗF=V:R@GLqBl.RYmZ/s_I*O)@A*[;JB0{UO~LUߜ4LFJY.,.Z'{g$B?_@t _ ?p]pT79|A`p~9g^'8 ŕݫgnHyoF'P̡xU:TX'Y5%K ȉ4?;NƐ‡^IpVŝ ҷ*?vSIge>`iƋ[݁oTRvfF1oIKfxɖ?n5z1moNolHOAـOw#lc `;uL9/eK=CtG[JWD9Y+M TX9n/Y P'd xބD"׸m@#܅dlت8OqAy=H D5 N]]HJf($0׹6oNkܕVS5G r,lV5< ؽѭASgruR>Ƃ@cOX  :fEzO!3E^oL: )X,U;t.L/ZȻ%y/)_[G}O:PDH CTuxS~{hѤe|>=%uk!MESؒ{򗶪Y~Kr𰲃lrGiM+W/s'$zhxI;ۆ2+H-(XE hk YyL?l9Ldy|v,ȵ/}l0!oV' *q-K${Q6z=rdw!X%ԧlsnT-^2N}+ܻ/)w7 k~m)$.}ЭÕ^JgM#|"om ӡj#J|Y橐F#Z!R.9 %}fԅFoXT*J^Cl/2Z}Ekp .cG,NS&*nd }9:)YF&:Y+øaW:}P 4#L"$Q#MuA$$Sd '$"B"iK{x "z)o%L1e@PTշDdq:.Fyeh`83RQt:m5**Z"Go]O_$@ì#lu7'<# ҡ̯kg~IlLEMLgl]&EL oVe,dT4f2*3IO8)c!?GX<[hJqPqx,*  i+XO}Ap@T^|?v/? 3>bH'OoJn,N(ѬABt %&X. tPF()H9FXv=Hj9$K=[_\H׋צ 18 :;ijWBUz$GGQBv/|a踉R֤H>,s{Ux C)fgqO7]W;4v sR0MVmMPeM k`Jo$@uM]Ep9p-'=G6l^<;׌8CEl̤]n5aFp㬬>Md4Iu2V zCu.$:dy*LYYY`rЛx1EbY%t0촃4`T᳻z4JM[J.EljvԞ* {AȗiSCFt+؟A295B>D8=>`A KC?N[nLzu1X~1K4Sv*?B_y@.ߨ ~3HV0oHZ^Dt_HI9ɽHC({E>$z#v()M%˛m H&G}Xf#-ŻHt CD_ZKme>#Hư +ԋX,Q猯'a3{!u)7GoPiMJqӛ O!X#pO޹p֛&_^"3y'Df|eů|SJmmy[|>׆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&?xouދ> JA/7T1g{$Id 8}v)G 6U+V¤w*PQ$BGU]Ub ͦn{4ϨƙB$9ed ELT%cu?M+Jcx&;dc ; 9C[X Q+8W fS~Ab.Cñ'3=x&*L3PKY4. x '\ѾQnzz;q 4\;mEuq+~,y˙re;M>#@I{h) [@Ӑ1"=M6/-Dw=|VRy$)yF1HV"C&n=T.b!VejJW3RRQ7][ mOiti5KsaJ'UA տo:<~h7WFFvxhCl3vTjhNm o{ulwНaA~ڰ ٣S )RRnj\U#67,hv Rgx j"TX.oƩ>WYmud}uv_6kU1{wX?񟵟j[9C8]o>SȀp*9U]Ig_ub2 x\`iBM[tbD5.FXc`90HL:6. T"VݪCxꕸ%~GO>ڑhZ"`g{(Mj^9 Y(^1KZ); ]RRRy*eFh^mUG=.βo7PsLǸ.k/xP|g:Z17Pfu\bdz6Qie)Bq?9ij%n VJW;uoӔRF5G[O9:m.6k;j7NSE)^Pc0@RLeO^1$GӸ1Un* t ׉ӜfwLqڿ-g/'vr6k=ܼۧ>~(¾{M!"A0 _%K*qé 7)G3B>I,SW y9GZ̏vKG.x@ӽt%f!eff@qd }+ك;)| pK~r[.C3;ctt)6=<epcD.C @~`LI Os*G5{; bdzfIO}>לL­ g}Nwppfv\LK38f15w#G)=t#_ԏ{(=ug[ ; i:PMB{v_c ^6@sGnԳqD%&xYgm yy.s]c.kh>g<X F01ė#N`ExMuȭpo|v#8ps]8FxS2%?Y猡V#ać!) p%'MXsжZ'$!3 ;ηCyD${-Θa[;U1->1gt`rvANt *Dao(=s]3(s`;_]'P3S؄mnuőS;A^=F OU,hB 6 cDG#Kiϗn9ԏFCZ^oLnUm Gc;qPe]j(uѻNvKӫeEQ'->Zuk6+[WӔNwdHdlUj(1Ϡ}oRgiZ`YL@ٲ&xźgPN8N֠T(H2 3ʨzh:0NsPI^&~OCwgVюܕ*,sK?LپWN՗C47iɄ,E2 .qKxjj>-+zSـlMY+텇y%U\W`4cΖ4T˂<> YFS.̖=c!DHlM}"6ÇRTG{ݡ@3%B~86qWM>N墳8~**:}:q* )zq=UJ"{'`ڻeB\IZJM5ܡKj0T];>5Qc1pI8!TckX+Isp_õ[3cnڅ:kK/(`6F3G)ki ŒE[( hnL39`m9 8Gm cfRB̫γVx+Ȧ6Z_HE߂ؙWO&%(v!Z<ӎW9eA+&)tXGGKa jFu,\A^flL>ASS)f|5ۈtD3`2[@W>V-4FS|caMl 4q a WWh`x xR*5j/rXnCGݤ8fvrՃQ Elc.EG%nN F-8當Vt4DeLжEɸՖ_t^9;B_•_;@7.N*xG74(vV_У@ "&brߥY8)|HYKM~{:"C'pĽ_'^>`=>^N6MM.ヌ*߇IU|_ 7oYX ZAlft ȑyl͆.-8ӏ!641AA֦:/ѐ|!Vɘ_qҍSy;3d"Τ8gka؄CgܵMvI[ ]xB`O8ԂO) M3(hW|r۝:`L01;<`%B̋ߤ tJwPE*8N EE4['bp?b^@X_NQ_;͙=ƅ+41͗LL /CQn3Ɠ GJY^PJ.@xh\ٗ;DݔdI` #t (8H!JLS>sTpD- ܮGb<]55U6CEBY0(7Ytd=aX ċqo~ų!IO(OA\,ca` )85ׅ𐄦wPNQ LXx n -k+5~/.ύwٽnb /tKme*7%b1 x6:*Bd ծomrNAL>0LC1S rbz.&id~XʴrPVRP)Ga4K֕&bc۪V頪)8Li_æǸpiP@'rOUCa?CngX/ٯiYEV^R-^z{<?πP-VCܒXuzb.ZKD'sH'¼/3ӭt„Ņb(m-0ĹGCS?>c]t"9rjFw>Mll!64|\+%!jw[|>;O&O#Jdj0 BKz.8sOR }ΜTYO6206[o[)_N\JS)HnA.r)q .0$qQXl R4訛 Y'V O^P^1^RQ*\Nu l7p+aLpk%Tj2qE@. `K2&W/ ?s5y''m/rV m! e"CMw7fVs2+ r!BnUԚ(iE Aat0UM' (2^X[&4!=Q߮%8nVp=_[)~jwNɿgNXIBaii-rz U\l v(l1zD hRwTZDtƝ~yyK RؐM(9tB}phVIˏEpc6^m)E^VPr?sz\ʼnQqo3])z^JՔ[7F"ZI;Ow OĀ'oc=J%.cݦ3r+PaЗAjIfcnn|f#VRx Z{6c jV*9QIoI #3VTx4jx>.rr=I9-1N7~2K@plyo騜v&/ꗼkv&*އ))dvk&/)`O"P&VrRRk'z.fo^g(*s~a*V+/:"vZWEg%e˷PژQxvZ'P m66Hs᯶fLGڃatѱMG3M\ 'z |.E3S%`vb̰J2.w(Hy .N8xtf>9ƻ%DoS)"_vyNJ"V?ú"=p8) U t &  MN78||"qV7ݛ\"e,zoJ6RD`׊lܖ8t& 0mo0LOPNDh`>\>ViȴDG^w/_7 ȫ{V- |FDD it4HGCq b!=EqQ A\ʌםWɲ:LrTSƠȂP4F8j9a jX$Q$0ѓs4/m # /.3$SϳbДQHOO(_od؞PR~n2^5$&.ވ{cH{R|b@gsMq낂.l|pPG.c#΢4Qω|(g TX<3E8jXZc\u7l a? yTr #_(Ƞum÷%>@"èppQc'^Lmlӫ,kwip {2g,)eۃxz] <*BtK{m_# ,E}Vm2j_w7,oh<uN>WDH-X&_/Ce~qB}vk_֏܇?6z /BА-G_#! ÉhLM/v`|YCPuR' #L)@uϝ3rmfRSї$Zϣ~+lhƪok2iNl54KF HIUuM6 ~.t~d&ElY[BY-?_Xh)OL>\@~x G=<㐇'j 7Atja!X [ 'Ax3p L%ϢֆwFkhpDW\myq ۋs6&HT ) $m*ɨy ű!=$&k5|#A 6E" B*?>^(gSDP-0E\2̀\ ɔ80"vϫ^tDU*(KIl0$m!a'^F׉:|GJe['SHܤLv`Lu,**Sy|}bE'fC-k12V(xp!Q0c*:%q?za:@ Q$]2\0.:IψEV;>LM<+_+FJ=vHod QmQCl>ZnAQ.Ioa7t)wBj19I^(PQOS9C)SUveR|P;b8{b]Y?\&%5!6p؆4ϜuyOGM`Mlu┉ a°1\mC +G Wȴ)"eJdSu!` g%@5Ub*Y) 0;;J85U@C2ngQZDI3+A ĵf`hpW|)7-5RÂ/p?F9<#O/;lrcIȟ Ɂm(օ/>z(qkt3)=b'a, N;-+y#!qI&'0i$7tvN?{D\Ifmf%u23}2I5PxhOc0w^gӂ$N#,5f)F)n܍wė7tg:nXƜ (K3kKأۡȏaԹK-2c{p,CpA Ymkߚ @m ;cxT@0O**|DVQ9@lG ΰD]0=%G~ =%xqK }6Z1F_/1oIIqGXoI. -!YF!'@G~[:Fˈ.)(s0X].9ܯ"Jၶ9Siy /2$'̂{>td.ǒ%LYTb,hX͒SZk@.̫d`)SY*Cٷϣi$MlX;iHcV +IɌ}p:;})~ع6mnS9ܘ{ULJ)~!RL($CS2dE$Xj pNj:sN;sGV9̡4,NIbQ7TːJ/^9>5iR0y<w 5` *Y"QZsƜ GL_2Cm&eBt=飻v'v~$UqFMEg$:Lvi#zؑRh Ek0ʚzh^ !q'1?iE'̉(ڰ kx+d]~' mfE 0e1B9gʞmš]RHvuNQ?0zp[of&n40sOFuZs lҍFsQ>k??)O'WX몌۟&LyyaQZJG=e@nbtEgBPvl|2˘R%V@;h&`Cin,UM9ނUvU%_'8KQ1^drWh[c쯣T$z;I?Do7Zc ay~,Pep_hk|ż:=nvX[&wwx!n8xH 04tMONR5T>z'G@^7RzMVO+{à%17$'%t7ONAshN76ԉN#х4z^VR /i40d4lN1wbV,Fu¬4Α*L3j@3~?^aSVs?$[[-ѫ$E=`"L}5, L7=D´wW 7 ۨb*A"֨Q$pUֵ&CLGO P[_jֱZ@`>PF4#xsfmmAPqv2'Ӳ4ۄ;L4;ځ֪ÇPq{tqs67mWSϹQ8l֫kS;8~cg#ů2lp,8 Hl۫vJ\hЩ'!Vsoj5R%86XH/Q}] Y%6$3|sN5c.+&O<'9tEg#1]xdNFPNϩڥ vo?쟥Ƶě4tZ 9&cEtDS]hOfotW*hgRhԏz*IV'bAJ n_4N*P?@aP{'Z)boնEԾ0oT u@c#?jZJu`34toR̈́ߍF@g+nau56z$F?>0L#$$L·EÑv) cXp^:h O i=!jF NxoMh+)p;,zSIJFb7QQVKE-`M:1I #ȵDf$6u,9St@ţyQ_% ǡyIş 2/#M'&לZrGl$XGqct rqԎG@1F򲺯ۙE.?}[ &)v_W웙ڔMiwkpm ]f:ʃr0bV1]F8.y@0ֶԎ?,no[E}?QjXVi)?FMMu _sx{< 70.jTBNn:c30/k@EՔ_Db,úu3|yܠA&@~e*PF9I{@%o´Z 6`aS r[pTnvLڿO+m"φ@h^%𿞬=N Xaz) Sɢ1KTHvhL(i"<(ENt\C{>CLBHbJ}Rjn[ Xs %d3LRR:OlhL$ cݩ vR;˂|ӨĎ=UܯRBSؽO鍉aZK<_9J{apx2mru HLPt bK>*ɜ\I":GJfKtID,cSZ.*Rč{^ГNUKq0"(8hŸ41fb# E ǠNKP$l3jK2 P6}IW.q`ɘ]0"FgT z)e#2VT\u;UJmqm 0m )ha-&☀ް'.*&7#,?o#Bx3c] ɦneynmǂ$jA::tr쮋=#:fCo"l:ăOkfɂANr'ar?jұm8_ 0E[3v:^k-H&puptlq"fEScHG.e[.cx]^!Hߋq{կt;@-pzqyA)$K8P^_}aak-3Gb+=|1_Ҟ,|JϷs~R pD̖+Niq;!6}١+rj/CuGc"8z9eSY4c E±U~F­|`fbV/.&斌sߝ0f$K(Kr1!wT ~/x ZOڹq."&Ǿ+F?#[Ō8ej!@Yaf_!DRq>J*q3 /27.bT;F&W4Za$oAs6qw~ v |9,܅DQa2 sCx,QCǫdWewc^>k_-sw$ &,+icn[5i9gs !Ia;S[1*BQu<򂝓PbCjղ+1HnOƅiϕV[>\TQx/^r#;r4-3j/]=}$ޭd 7v񭨇4HW %}Ah1fpVGmBpStJ9Ӧ!C;BjqЕ$ІFd]xO>妶L`άN`FXi17HǾݦ7F[hOOڠYS\)rǺ{d8_<%;[7.. N:¡t{FFguG$l`ΘsELzJ\E ozݕ bPLMThc2l09;WUƚh4d׊ؼesNSQИ#"Ipߊ]d#\&c:iwȖrxJ*gx@jUQف}IgD¸kHãȼIn!gR> 7keDi yHSLk`Wt 8xA"N՞YA_vpIv §ii jiu`ڴuU8}T$oG8qo7O7B@<gQ=٤_Xꯤ$z06ey z/|jo?U?uـB'$zw=ހ!$&VEzeJ;lPvDd: ~<4Sf3֝蚂?ʼn[AەR'Sn~H$ffn.y's肍A|r'o OS/v=D+0gd5U@P'Cw \:ireka]C_K[ LzSu.-jhY/xFPp:NV@d`w/VRy=4Ӌ?{%&J_: te#v7!b{d"gv )kjPPsVԓ%ePamvcjHe_Hx Z1 P%?U/МBML/5;YZ^[Q!t_ ,W9õ#U铿mcNm"j]e: z]#&Dam/RX _nYI-C~ΤP;[.(G8*i?:<ұ,=H3B7QŨn7Kq}5A:&vw8Gn ~?6~z4#]'0E!88o^X`Jt̞a1rƬV1]H^G>)dHpۑPJN}bAp?+e,zdr ڣR|/zHo<6G*>>rN:S"j0Za(lgV^̮mxZǸ}eS1[bqoJ)ӯ;mF`K=vw>rژhI'ҭ%;6-y7 y8ie0LBp@C; eƈD6U}>"z0ㄆiol_ ʓG GRX~palRH9 {e?p+ߌVqaam5ulZXx)['ulˡT^}TQaAi H,[$i;) Յ[Ĩ%k7;|HU{Q''J9!*򜫸?hǒEFLg z;؉XR xNl4FN8¯sjW=JPtI1\d]h}ǃJ\{QJ( D,,߄DkFIgYe6]7[qE=KnvҍvGc DP'.QE}LѐDdFs8Qæ%V#7beC1)2cxcq2Ӵ'5fᾅ?7&/N5B](a|Һ%:uCnwFe.adӧVKA>f (6,ywezٺ?70_'+)->4/á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_YN;|[?o[G".o4s$,릵s w(S]XKNh8l$CzRl\!T5>X_6n'w[| [$?-:d[9c2]5mFQU-@@ccESavs"5_ 6S.jS9O0nwΪMLF-{9#$X4ĸ4 -NFZQҾxѲ *X&Oͩ"ԑؼyl?ϭ 2#2KW|&Q<$Z4:ԖY` Q h9>mӝ@ژ[vs&AwFמ&ɩwT-*1 u;قz;Jn P#xA5@Oy{ҋ0ǘ  s4FOLls*aFNюMUk ۵mgu~>~slu{ۊD0s>Hn8m gXBIAM߼R°SA@~8ϗ.//+gIe0:[#YzQڅs$$?B&a[_GeM>9b EK^Oһv jQ7rrߑх=i~{üً{C;rUʮ{ a#@b5Jcr⢪KG6$ hzTYY)7Qkq`tI!"g*" :֠5tN:]`щCmڈ!\ \b;;^ܭ\Wb! ǠMt~={HN)"qz*zbE\.>Q-rh kɠl"rw3t=̕ 4CvAZxAo f1-QB^ԇvKO>]Z[}ih\e>-r[Q38sf"wߩdN50֋2=iG(Kln/ZNٞ]կ=FBuHo򧶦GkZ--&J;[nA>@ܣ\:%GqVǶ-\)Qvʪ)&Eps֦?M#&p }w@Dm*_0#pڝ6Ȑ5sTVu8-y/ikyNz;,9 0x6և%QOT3ɰM'l1Y8IqܫpmD/TQ%Ytm!Z{tnVDH"<+O3$/u)a>pcjqdI!1H6;83TJ|kBt0wdwX֮[H\Z''#JgB /a\I9i @;MU.uE4[؜J kE6''(^WE{xV+zOJ@ZFCXH䣷Gv5$$ `ZE# J8}}nv $&C pFP j?D™cnݨcM=3MYUppy5jG5jU:n8 oHz|-NsT~շ5LlΜ"e; Zj+a :A06"֠L< kNv;;eC%5CpķY'ԨRC+5 V`1LnLɢZy\Y^W;G 'P=^'ޢUF^Yy4F<™ͧF2070f:I,} {[[@ǕwIi?n܅TXo\LkwAnOSC~6 )`ML9L1 Ԃy_;;+ܞ(DEg K5h {BEznݭdNNaܥ*Q-O+jAL\ ZXY䀒8>[|*wNs~ Eq&:Cɟ;`YQix5P^y,BCS6jS'b6m:uHaq"O$w&p@,k6%;K8RlӭkqarG ?)g»K8KSlkecWCaBMΐrKy;B@ϧ\,'i/;G |4O&kiQ 8R~[n~32+oeMm}1:%:{4L(6KI@=:?(a J=Rr飂[6zPZO?K|BϑEQE`-Y} +WJ,G|Ul7?_ )r* r/K]edʦ2pḙ ؙP)G*8%^i4(\~evsvM~Hj#gݕbX8U.ַm8U-ojE^1R%Hfʖb$JR-8/%q|B=Dj^NxQ-=&vЎBL3}& 8 ^+d2 F.ܷީ)!'F/Vl9 ۾4]NjÂv2U)@%;E&x΍^GiyNnGuZǠlbUT9?Pը{a_*Rt~آ[]{z?ke7ׄ th =b x Zv;[^U%x2BsѫkUΤZ0$o3.n#| 읶E9EvtKf|`qNm~( _^KlhE8+kp~Hӌv3Iq,%$_"65\r5Oj{^>>WTUuM}Qc~Q)_ꊲjoBZc_2ҪWzઃQ Eۜ%w1->2&/Һ?gsk-8ՒOmi{osumKrF[{75'S{1Zgm}.|['1䳣Ё^◠V =2m 2.֭ڢ01z·Z\%g@Ѝ*6NZf=I[bb v2KW8d۰ج>%b%es,%sj˖umqSѓmfb0Լc]VvZO^s;Z&Z 䚖yT9/*1ua]StF.WBgTԏ$A%A#F3XRM׼{˸Ҝf4Ĕ<49A-hy "Pq/-eOtN\/jT@SDVHΓd̦bCcږI;R;\ Di ~v#LiQB=d= YDW;[<+\EDT_R Z%I"",{(S .QT#9I;oOJXB<%=V qxwiA( x;Ũd[p& fdIrhlj"`KavԋNO.|0"C$J!jGCnhm"C}q]Vq)EXGѹC:}ѱH,].W*i/oēʎ԰ Z7cLz q4v\N_s}&cꈅ;yP5C<H`GݧQ$N*R(ݒpuΙi,8d-\ދMw1bAJgQ'ix4ՈuW(-ʜ85'G9rNC,~ril<5 $5l`</?6rdd>R=jrs6edZLe'x/I [<6R$ RmGDnt@DWrl{fvZk*~siN{DhlwUgHw eS4 mYsʩ٠&f&߻Uqy{f'&mKXڷc0{wOe^;^J(+)(>siW9?8o#ZIy0ߎgģ=ƃz ,!ETﺭό&+Č.9.V as&)p{Gћն W(ZVdTQ&drgҕ5u)Ysv86B'lwjkЧ".=ãH8[,XIY֯ Krj&7$u̾ULn".&@.jVSr|\MoysaM׺ FBޓAܙ2V2zHy].Uwzl 7V~љH} $;(NntH\o\|v;gL ۸HP*6KzlX׽$OYܪQyqᘄ y CV# Sd1Ax.Q^7kK>,~W#SFP tI R)ElSdOYtHRIۍ}I{|:W7?~ʓ=jVNNO񳓕xe}H!0A<7xjEcǻ5 vxgnHpmU5W(퓧+c؅ G=֞,Ƨe2G׍T\8MVwRV*HdU ce+m1C/jIJ8 Γjz=[oke8EkkϖZ'ڷ"jis׋ǃL98vL ?p4O,oL\酅w(5r}N)8с&8\rŝ %C~3vӣ㨋1{\f>.c_@H4r8E *Ddr^ʋ7nCtw*A ip,}6ѣI _IB뿲wew|G7?y;7^)?9~T)M4ڮP_ xȼsy͋/JUȭAz@R )ReO6/(ʧ Ld嗖294tʯ$Ow )CPӑ2?sb[`P<7"`v^:aÜIajg@XˆDcFASl__؟t?Gx%Z˫7x׏] N\.<#Uf~h 1V:K.Z̥bhC_n *gGxp.0l*ynh%)YmOҍU&@!@0ĂWW84̣ lL ͥ΁ {!N 7#WCh)J5939,<o21˵1om񦣸(pYL)[]\vm دzr $<€_Yo4>w^Gs5ZS[..#0%E {0;{nIVBb0읐x'$ wB❐o%$"O*|_而0)r?Vd^ЇpB}NCK|#F]p͵NSvP*Wqn߾x;ŋ[SObX (=&LѪG[\70RJ޼LrE`G[(o s s󊄹4mO &7UT&g/_W53J&sǽqy|~>'eyOt$OMmljūsBΖwT=| ,Ja,&7 X\.\ Lfs)}>ws}>ws}>ws}>ws}>ws}>%X