#!/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=c5806e21a1d255011a6835ef5aeb9dfe # 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 7@y=Au+@эXpٽ}[8$=c}^]nUA`_q8v>|NUl;'Gk6O:a_ZN| Z![ޒ<>i6_:2^ nO"vJZ~30@4@8h䎻208kdN2&u4dNa5ы,2t7#Z5Dx☻lw 7‰4~[6 I%ψ-^X,'~rtGx;Tr粀J_vzs:GK|=J_9>?w 5klgku$k4$P5 _k̰(J>~c/,\q!u2˥"OY+r..iư;A}5uKm%VC5&h=Z@"ļV,mD. *c6N^Q2=8;qR kBr*'r<摂B RN}"ɯE4;+".DYzג:CA4d})Ȅ .їɵKha YQļtu8 +XlҰ|J>nYI"9a>,~|< 3/;l .g,\"xT1rL\l)d^ ~Pgb3D~г |;ޭĸCƥe}nt+O C,dݳR j \.UJq$K8sWʱ:Z0p2|D\C4:ɺlWc1}P;W ԒHWg%n0zw<$t)@州@ 4C2K\h{*SdJHǓ!]5zn)6&a@Wҁ&. o5" N yŪ-`+^PFU h` ?6<,GN C[?{D !u¡JGb\%봙ݟFsC9 NK ƂƮdv$2up -\C3rh|.FF5_nl?A| kw;,esG;0r71&XAiϒuvQ PS]XE\`1s" ư# ̩6G MCŭYd!t`_^)GgvScT`Fv:j!L4q%{2^Җ/1mNR&#:*_g~ሇ`kA{2 )En@ȣ5'!aUJD+IʋGcJNJ0zY2e;8<'VrdsrIK#[bA~;/]7rw9``bwa +RꨂȨCԀ|1ppmd lߔC &qBI+ Xfc&:r-'lr[nϽ{^R9Nɜ:(oD.@V!bw^%2w>%sp0h%ZD 2D@P40HF_*O4.q8 %}xs7qpܴDEfG8!N}B`ZxP;w)tV2rgdU 6.A/v:@3|Rρ"40Nsrı]oQ?^ݙ*eϯvZ7_s_x?L\oaS+YywjdUuG)f ]ǦY\J +`nYR^DͽiN_[߳*f|3OwՏiڢL>ΤK P;cҖ҈ w^2nOsv;h"IR}_eTw>Z 4yTOP'tM2'n!>Ҭ2J*a&4 'Mhe'Mhg.Rio'-j _MߟJ;}z|괷q|MG}~'/;δ_asܣEz1'c0/˷b}+ߙx0bG3Wc{A1TDF/5rSKʛ-ԡȓ_>R0Upಥ}~\zl-L.~?EH0#><9DTa|۵f\Ү~|sS`(*ӓ4I}5#@%{u2]<,h;n1::TasTV6KX+$5:ѱJ=%N K2N( ҉ak?t?\|i}GU7F۬+8FGj^Ѫ%55'l4|7yiMi a!֯}xҪ)1P blqlM,?t>l3}=\P8"4cwRk Lz^.r[yIp%-*_jwX ⎊K 7JILaDl(+~\Gk05PAcRK"'3"ˋMܢ䴂xnؕꎮd3u XWO~\YݜYM`$FK 57uU)<| f+KخaɇcP.xp1$U-VJ[Fue rkt 8f# x΄D"Op,=`wDY9#?I PU~-@;"f׸'Tp 隇R3H!֕::^cQcIj)C\}6ZU: xؽP@=]v gI-'m,60K P| O0hqV,u'4NaV76 [͝Y~-@Own 8-})~8:J^mj/17Dd['kY|iw46ÑmIĘ_r6u 0dcP#Sڸ2ϝHuiXec9 R2;TPɭO!fҨdgy蓻̽h 9luveIiGӴ;t8IT.uH:T*Ujْ<0Ã|w<9$ގNNl~:shT/Ir1u`_iJf\c;(!>'wIW|ց ۇ0:%FR"S8_=g'-v8Li@[zq}8,:Jk~I/Y"iwc k dWW:)4 eN~;#8C#.ާIdczװVmI!.Nά͍u(gցkqއmFw ߗF^scMv:_tb)N4_ٳM,#1NJ! )aJn aOK)1$ r;znuAɓScۈb}Ȝk82ѨbI}7dGeOv_l/ıX!'ޚpp@.Qh31ћpnp|ƙ1 [;$_u Aa~{IYAMjlho :0엫Nx\:導&2eZ\_Kói?zWBj55 K! O`Û[g̳wЫ,ki.YMe~}EX0g}do]"o$ &1=YȨhD-dT4fOpRbv+T[X<[SfW{Jäzs <{_zX?k4Q3eWi{rOG1{b].7O1f穮ꄂ$4[KIp[gE? bIE`t $jei;ヨ}}Kþls!mRMP^3bp`pw6)i՞\H#3_A^m[ESP+Ԉ?,s{Ux F#! SbL _W{4ww) sR0mNLQeM k`Jo$5M]UP lK iϑ9cDKq4 :~XtVH` c˭u&ngc?iN*[]ܚVo(VV@CFp"LW.FO9!XR@ ));! Xzl wY |vQUwV)K8Q.3C%҃r!`Z<MdTR!{$^Q0޳_h?=,h;a rFՖl'_9bT2/5|>gݧ4!=`7SkMƢY˓|'G)wE`ro&RP! @^m C.ZEStI\]Bd~jeqR[RAאuh$VoЬm7g>#HưL4X,Qr'a3{!u)7GoPiMJq X,V̑NJӪ'\wnxm r/;Y"3W3VWzsSJϝNr9j"<}Zɷ2b6AĎ~Ue2Cﯗq8w΁p/@-&hًS|p1n6fC~߭^+( x85O&K 59EPt]ZjAvgi4Q@ !eWcw i0`|%+?gcs6țQɆ_竵qoy7|NwloessGjO[3Tl0#C/vh+6G?`i2FnE-ټ'h jޢZN6;GHqQq j ՏXRN4xԱخ7TC2-Yԝ+eՖ+RQGi 8ġzC &|L) 3X*N\Ը rOtjџ1:-RRYy}~_-k~)"E+VrP%|'p|x;|w@w G4r8'S0Xc؏qGQE%5AXj]9/pTnjvI[b0hcy,z64NL:ڎǝiJGzd U 0"f2 J\t7BB)x fsfS~+h.ۇL`‚zv>˔f/&|ҊwA")L&E 㲺kZ8fHa99Ƭ (+뛓q1 폨u0eJ7ncK ڔ9& 45BR6JltN3[.b!6؝Ӗz>|W;TVN}xO~mXU܂zY8i#XnXZ#*jy?΢Ӽy]pkyv*+-rxxWk՝+ p(;sX<*LaB t oe;F`rXgc8ED&Jh TtFS޲F5cr?mm4ٖ[/sC!|_¤RWuROB՞2l8* mfS~жA=Cbo&;Hp5Z{b܏&q9D),'M,Ƴ $y˙Ňs)YN6mωTT'S[A'>Jq=56Uti_ H]eP E>}R=pEXe#4%әg-jJy-si#I0b>0uwmuoA5_v|cL4_<'@hhm,^YDQ_u6 a\7o]h[JNP}i4INcB R"hسyI@E4? mL^yCw" S?!7.OϿn8n}>jܼV_E΁5p %$P!S/n X t®1U!BM @:EEQ%c^mX°ߝ_-3?Lrf!RH;V@>j(TqQrSg*^nEYM "'?gS^!Ї흃*U^+%+QfSyꡒhX~$dG"DI2˜KYҲ4 $:SQozw5s#žک ޘr)w^^N&g!(+zS.ZP` wiȸR"=mv_[kG,72R];mi^rqLz\JD1VwJjJW2~xRVA?m_ ڠniYv,-)տTy5xv}˒d%Jۨl׏=kуdkUjhrNmԟJ7k@wڇh2G]=:eU{Q(DdrKŴ-Y5_|gʯh\5)qdL}uP51h{4Nכ;~K]4GٸrrW:5үZv~]LG+Ol0 ݹBbKVP;DN?C0kwLt8V'^K UtP4)He Y^V3ñ!z%2ؖH)>ypӼ:-D<`(*@qUӺ4\G?xmKc+{'oH"88LгjB)ZPć;eT"ʖGh^mך-~tBg9'Û 9c\Wb/E8kYձ'e q礭8/&vB޽29$wZ>+ţQ}^kXےz_}ii2K嫵 }QH*Rk~Q=ڣD Ivi̵Ÿ7Diui8ƖnvωJx;Eq_D9H5d}a^Ә<a_OEؿQspUByè ;g|XR iS%z!5øai ÝDD8;HZb-RffxvL Wb1#ҝϷaѼirX?3FGٙjˑ,s/] w5'޺+ `# w0CJ𞘰ͤb]$Nc}b=F oN%JY9$( 9UD>_} X0 :J9wzcpOn!,\Xk]jYQiu^ޮ79e/-ӔNXwuuF^l2`\k7[VxFU`/sqt{*[۵ea=+Ŝ g;mԛ4j1ZFaUMTf:*M@wC&{c!wfVҎJ- bCS%xdB"PB#7Kxjj>-'V=S QIhYڦK*~pp#+0g1gKˢ<˟,#k{fˎ1U"G,}V6O>z!HQގ:pugΔ UĖ_mv"ֱg@GU@ }ؿXا@Hj._˄[)-cWjA\Rb ˞K{3w;湶4տl;~bFLݓq]g\:Bƈ8I>Wgv.[vr..X|NT;?7X}b0SvLJVyy&ϧ{hYdS\MmCboA+'2UIHT^X _< lcerRp\[V-eL %{DQgBLT;u̬꙳+#?.hif Aa G-V~v$oiDAlW* >uZ{<6XpEYyלj1$sW)7 "ل{9) +!6MTt!A8茮ǎg3 Io?Z'^fSѽs+tz?;,le F_<=jC`5qf\% d{Cn^lUӈ.'\o8kiTʕEZqnWi@g4tno}3j``'Ė@b9u6v*Pq6p gs4Jmk 4̫4''gZ`j&:ӬN-z f.GHNM#Ĉb,;[Yx0$F)^Pwf}v r2Sn5b?j"`YE'IGt a)6WNy2E<"KKn vΓS!q(4fH)q,eW Uy?%΁w*Xqx2S\ڬ5ih?E|Ea-,:M&H򘚣b=0.-49j)"~C7J*d^BF4΃qK<,! .I^M#]bMu㰛Ʌ|VTF ~iN&<9dꟜWZѦrɥ$*v< =֞[\me-t(|QQؓtwtqAKbguuv= ēh [9~I|KϨbHYKMn{:"rNĽ_'^>`m>&fE J&/eV{$vJ: {r}Q8[_55 > KAV07zbɼ|fC,@c#KJE y kS@Ӑ|!V b#5BKѷfl0EI/!cj!lO46І C-xN ߅Klhx8ADjĿ 6c'u,!/~Z+:+Ҝf%2UdEE;'EbpFbGX_NQtxϏ[3{\ 4_31-7EO*z9(f={C)5Y$);ľt!ZOWT$Khzf/7 >(17m0x .b1$c/$k >qz nu0}ZuVM J8!nQC@Wb P42s MH8^ZA3Cfhx| .[:Vj-*]ݞDb 'tKme*G]1<9'.+ `k]|W+ܥU+ lH,G QhnU^N1@LyD1K|Z j;q9^I]iB*6zq!k*._ęXI8l 6z* SSþx=@A?b[+FKtqi'|DVQ-#Y#d+/} f1qKV/Plg8Xg@+S@nIG:1QHe{%R}0$Kt]ZиPL>q y&ӝ8Bc{h vޥHG(*9it$mL{_mme tI?\`^[^&{?^Y[_?ݸ&;ˤkr5}MF^n }{2`|AhU(<8hFr E Pt  Y@ U `% $VpX[)~rNɿoA1XI8Dlty\b, uBk$QXZN : Ђi$^ٺa>-l3p *?տsFOQ'oI4$'R"O ^V`vka6/K U-%((y{)+,ֆJJuTk" =ehs )=@w"| Gu-f~Vr%7EIeCan #NP@ZR:%$蔕;/ aeyK*y#3a4ځpy;j%4iwF6P"^ί:>Ьjz l4(9EVP0szlũQ`+])AJݖ[9^?E0:;zk? ^,wb?p4/;P1%CI3o2Sx!5H; ̮xOeo# 8Ax.c j^ .-Ur4СΒaF2cj~QS_mys/^Etq兪\OBdRNC_N 8I勘zڻʿ.W.J,`_}FC0%n],/! KJFj4FmmMciDVnk,ډjq+Xo^g(*ɳ~a:΢_l&\*xWdWdܹ*Y+.b5J'j=zOpltF% u6Sf:ҍB:Eb6δ1{!O>:QLLu>X! 1:Slrأf" 1l8=>3c0܃BpL|yk>{Tѫu8+X F!wK͖(JW0ADnljrߞjؕٽe)RfRQgötj3EL Z[;Vo2Iu$Aۛn' f}AFS:;sɗ$IUH*NľCi#g%!4L$,:zmbJaT \^ MRq!y#\mg' hθ]k0|qVLiypL*WǍݝ7bƷP=YI6ɇbNGϺ6Aڏ2 -/4E3pb%q)7^^q$bKi1SO* B1INV 6NAE6LS7->s6{}Y݆[!O,/WNYV 3 JH mKPoʹTk=y Āw8&"9).1AĦZJ` uAE.lpP>c#ΦtAϙ|@g DYnr,"51:I+a?hɔcq򅢈 Z׻QY?zWOM[Z r g5{r$ÉɇZ zqrzb_޾3KZһ48`r2,)&%taELY-pcyTr{6T7dOf/3l03PpqQԧkEKN:Ǟq0{'Stb,U۱&37S }'G_2buMtNJ|+T+8_L~ucU? ;L%eL & ;;J*d2^ZDI3+AĵfxP&EYwŕrR/Ryw\n3bxhAءhb8f6nTTOt:!^8|aA8b$Q\rH%l#7_Rdۅv] ]sQH{1{dJrfi3=nu 5pHi@@f҄|Y&g?0j[ %q23}2I5PDhOe ˢtM nn@G%YJ,W֘Is^,rnlmc/>9oFi#xtɏ7c %7l@4|mǴmQw{-b6oE~Nƭ4AfFC<+𐵮Qs ,Zahϰ 9No/ 6瓀{AƼU*igv'[#"D5 ="N`OtR C<9Nq6:!\/)&eARx%[n2|`} B!@Ǣ~[:ˀ.)JPNa̻7U1΀/jq L((dqvʰl;kv3 {Bs#8KL3YzoxgeSYċKPOc0:nE ލ4"߅*Xn2el@Ip ! #HcD;A9I1aleɦ'*OP`Hn$ylzy|\,mitM2y-3pF/"ROGs`[ә8r?:aasvJ:ZwVUoq!yYc^&e1C-ApЙk& ਓE(%?gI}%8EtJ@y8g1\{$UqFmH4- #-iMP Qejp?S: NX2d: 6hÂ᭒u=|0ow9%^<&s ϣɐtq?K:svIVjH I޶NYAdDܚh}57„ɠp:׉_H?W`0g~0^Y+$Y- V:U%;9&K^DQ~RnZCȭ|4:?-aj&{>eL IVPT~ 04{ۣ4wz+.boچX?.ίcQgHA1d rWc4[c쯥a^Ea6cnKFAU "#zIhR<ߋD"<S)>zYюx6$ -]nz]IYIKL%9;GGEx:`QxONeIv&AԝeXhYmSon7,OE M7}Wt`unu$7 )}${.XsJE'd>uDMe;hi$ٲ3 ZzaAzCrR 8w ]\Gs۱V40wk.dze0_x M!alvc@ f96fq @P(4P7jen~|N⇤z c,@QXaA H{&3P|qڻDY% ۨb*A"֨Q$pik8葸*4W}`ƉHH"ㅟGN$3OQAӇ^xWL{׭IVKI@,^֎߶[?YIa)ՋjJT2ڗdJnL;!1j CóI/zAaȌ%g:|9r~:ds848ϣ cAAge5ĤQ@ ؁sߑ9Nik/7N>U౺@0FzۙE-?H-qJDB[+Lm6_@{5vxtٯ~N]*Xl:nի pȞ'"ӥp47ږ%r{p&ju$dn,JoE7\z)չNӮ!k>=_1y4Йi4ELiS?YQf#>~ە:>LLΰdF|iA7:&'USyi'̉4$Y`;|uܤA@~e*Rf9I_8fO%o´Z6`HSwo9,yo!9s5 7Ehev삸D|37A! *V7zsӕ4=߷|k?7 x LAt}?!_6,mwx/ }drA  /#Ng ֧ <>@]@+o1cL=WzLqΆ+>hUNI .D$Ra:A{jmnc,v oi;p켵똀f"/n{_R;u`a|kV?zm%/M `u2dL!_$4 ۱Xb;%# a`Gfm4[72v0!^2׍:p'׉3"E94*ػk1~x*Lh0Gu~i)9?CŜ}XGr2c4R&X4}" G:TANc6Nr=0]2So)1I k h$W,8 v,34 XGXMx :f$ `<ײͲWJZiUi/$,vЉ3wub4<0^a=%D晔ɷTyN0+PvAm!=9eh]ȴ?6Ty]q֞b9ILPd uWQt>]Dǝa)Mn9Ԇߊ҆祡2`dqV{hDR>F>xU-zcZR52V\GLY¯8јHƒ߹SJkeY ȯrrp聢MN*:eg\8N[{7ҙ8(r`XhfĂiji7Oc[D5șv~՜Nj_>krigW \☺}xtNa^Ð㐽}oJ-m#MD 4U#UEsބt泄H-8r8AMsp`dKM>Bfc$j"_^@dLWQ66"ѣZ})V }}W`cRg&;s1bPϳ5;tEAPs:Q%IQ,B=CYT҇,JIWz ZDlb@0Il~:k YjFK#zw&Z%8N g<[zapcPtplGfC6 j녑¸0B<(|FWU72lg^AgnC`w0Cw4Za$o6qw?~ v |=:V1>_@uΧËdR ݕ RWF.;iwóq,q0@qOzz1C|qDE(2IC-U]AF %A$ &媚$U(ǜX$跀Mp2^GNK$Yr@o)K> /8:3"ttˢ5@$`9[^aOe0bgc,ϲ/yeiIɬn۵dU;*Q3lEC' ᕐp"j/CYoATݲl8dpV+IDz1-z*HX{{0@UA(&&VOdAɨ%OamB{ͅ4a G-"눷m?2Iu;aP۸4u#GiJ8dIb;S[*& p7򂝓PboJyfacoq=;AHA9sGJ}p)@fzU@l%p.PF]>F`Ԕ_ zj@Nn)H[ɏQ>#j5aWBƑg#!vx m0.LòWEU vQh1F@?,Ȭ:fA7 [Q<ݔRBsDF̓LҫnA$jYA=G/]>ʤV WMϰGl]c9URަ( $ɞa6޼吽2WMT/6huI#uOc1.,Lgb<\iU"}[Lv4q2_XN--d0Kvl)[ᎧJx汁N"RM쓼M:#ǝ%^ FG]"&I`Z1KR7ܬmpN/@m&Wt8xA"L՞Y\A_pI' ©iiEt zV:0-o2pss/=Qꑤm 'f] pXȠg7M:JJ [+SH~ͧ O5N`{WV@$?{D.C"ڏ8%ƣ 2H䴣eg)K4NGWC3eF=CkI)QX.k])5_Ϲc@e%!X47stɫM?A̿Ik)=}gxʽuݤ8҆RNfÄfJB}zu9Z݃wg{:*>L q˞54+0S$TA/Rr͑BtUN!K%5ZPD&mnmKZf ^1b>SXa+Ugc?8c#{J%&J_:te3v7!b{d"gv,'A9+/9+UɊ2NvcjHe_H)xܙ Z1PK~6=A892!8L2=]W?(gjemE 䖳~йR%v*\YynV+O{Wѫ;NoHFx-Z 9m~t6l8Mp۰ŵ2tDaU+ne ~;B`}બ`zDH / YLD%k&#,]ۇǍ22_AHCCP"VohV2xaPT lyL [{< % /S{4 `Er^6"IQVVgffӨX^*(/*md3ʘ6ks&1#B$/9jt3kN񁧀A|Dmq\ 9 jΑ{xI@?+e,9t3tfX`(K#sX5EqQC+Wi[SBdhmF1l\s>:k)0n y\`$/A̗Xt@$s紷!8+Eȿyxz@ۿsǃ W=m=?Co}f.?Y}_=oZF$APQKSyA]/c?F,ʰxsaU1X4 [O3Z"yġxX,eG9KN6AJaaaɆS& s%*,,L6Q7 :b EKR9憺NLF \«F\ʠR 1i6RaH knQ58J#8) ։avLprқ3S:Dd]^a7PsoG!:kN0`zi6&q݆:M<4É{Q>Bw>̕w% -Met[fɌ=vWC4f')ݘkC4R8LeZLU:MqpJft lZf¿zӻ&!zqZɛ/p†qr3K.T0^i[ʒFTs*~hx OSbM˟[y.n^ Qm~ ;+ܹ Ӄqkq{m}y^{zst%u˓{[|ei/I:5ذ,p׍V;۵CCVƶR]_YtngV7{E@_;߾tN~=<}>7+o+O}ww?*~_GzY/KBt4~ߕk섑jP@Bs~[{ӄʭiMgv) \x_[ jP9UNX\Ec_F gbKL`w>\ln _?ɓ~+ں^,%%Y/v0|446/ T%({FԜ4/BcI[*;װ|׿GUUy/WYq KqwG/S #DHw. j?աm=joKڗ {;ǻNťE/3R5tG?U8>U=^? XoH vTu2>v],^+Oُ_Y -*m܁X{z]{G~M?8iijlXf^ tb`"766 3ʏ27GLJ[v>hհ<n \.p?P%]䦪P?݋AL,j}>7V3{7ֶB^.ł~$-:nD@?,.vMv vTFK:&f%zv:h7[ݭ0^,ڃz4.GJcBeY縫]pur5:mE߸sp?16YUV}_rN'nytь ŠV鐝&}tu~BDA owU]TTUeƧpv{d;P |SGqqNzÀ&MCKEס 8Q8&O. SQ]b8BoL-/ +HW0|C4$);f)f sf|.=Nju$,Ʀ_GP-ѴM adVu "t=7"p<#U5k9ZWh䔈)_.`[\=^I:ɿl9`! ƘYz]HuM'v3d()@J ׏iJoll@*8/d6 ^е'ыpZgKsK/Ya!MaT`d_[H@^٫Wݯյ{[|?G~lu铌o)_<*%\͛)_n}xmcu,lS(|GNTPISްrbtN*솰VbiM8j>H/?V54ĎTWV:`|x;np.}OQ ;j ^#GR7aNHF ^SH壾ӘXyj'[ҭ! f 28fS?EW}@ߊUMAdhnTPqDr"l1l+Įݨ3ܦl}s<t~+3u2m2HٴBItUI `6u%J4nwiҳgKkW?Ba<Bv3k& }zF6T5ۓv.#|@Z&DYկm̬~mQO( Ez?Kjz22p1n2)=fG82kaV'iiZzݻRd~gUSdM憭MkΘ" !Th! dئUa7b`*'C)+>G:w~@ddP x6%۩<1.J)w*?M{;oMS0 'u< U *CTزpV(vH}8Dzq<N:tN^*oY9{-%B e!4/\g{闢SL&)H@v8ĪS% [*DKws!T?޳ɼGhZ:Ax;#I&B)`, pܲhУ谁 3TA26L' "Vjwb`)1pp>|{6߫ ٧wa=$|AZK^2/Go^jŤ zf(1 cO0$l68 $@}FXXsL 8kXSόjjt8ɚVbfjQL G Ioy_\~wuLV&h Trƺ>HwUW@) A_g4Ņt(8Ug8aiU^'3,w(fpۃ,f:pCt>ӱ(PH5j\Ÿ7fnLOZ٨.VS$u(-zʓWgn7)TOe``oauh܋Caץ3USzuЄ&7dx`.۰ϋ2hʅ6#.u`ǯ&fz<;ǏM]zSalX'J #DT_ z;) eC%Ǐqy҇ j`q55%Y2RyV:)18Ft)@-pCNF\TKd&xao3 }kUA #lTPh7oStП邼Z<5T1/(M> p/MR<ưz{tӁy۪|gkh00&nYg>L7L$X$73z8M#"JSrȃyarxʻ¤44Vo7t w*lJ,Zp7oʵ P`E!NEhE#` DQ`v~kd·!lq84F@g/{%,YI8*C8uC~5hz>SVfxRyVF: nh]3}58$ka1P3CO s^|l@:!c5Pg>.0+/2"vFxF$YЁ&xlr'b>-t("D~OMӟH0L Jٴ3CfDǑbv\#= Wh{,\1F'/,,N}1&\m:+UNv9]}Oył{bE[}hh#C3rZ1oX"r)\[afMˬ,۷"kjO+)i{k.2i2RЀʀt)Rx[OzCT0M!:,+Ÿ|"xXC/ߌ*kcXRfWpbFJ0H]d* pF α5Rv&Up\K%iP2J,Y $&I)Ž ;f MS [kTܿXA aLnt9TQۧH)acP(5isn0(w{Xtng#(PoVpѠ/r3֢e>ĺT40R/+y?Ih(|gwes+ՇW}b6ޓk3Y7*iRHo\"31x@h:oKDgU롼G #IMAT [ 1K|0&̣kbr_ 6JIk^zNV ^lGbw8HGcmIz2!}捎 ;L*pt=]:5 PQR4l99H#KKa!S/\HR$_@PXv_-T- `,$زX5qڵr {^F?k&ͨ3x!{W%Io8?AGhp9!Ch:YM+~ ]5 MbOASZNn(bOPiRiɬx8$| D Qm\hm ?߆ӯh%6M5g?}$iF ];$ā8}bqN.175\d 4OI^}+S3%_uE} ?-sEysRK+|>}>_ܿeU컕"p誇QM%mV)iiwii9ZJ5_KOܖ-mZՖݽ=lG۶Kn+jwXC>$\0#e{GhҘfc<y|zVE2#,^P/:0ʁQv`KΓg2 Eam[qm9 Y;d1b ?N*iB=$Ѱzw[~g+\DHcꕕ} kp{(SFQ.Ñk a0 : Z'F8sǃB>1# 8;Řd:p fd`bj̡x؝.)~$"itBtD4D:iJ50 &7LI-"*v?J鋎n.D+jtUlʹ}BXM}x* z7/`*':}WzŚO}_G8_ɜ]3ēl|M QcT\E+RрJ1fDCF;DtPkRFFT\QY$W>/Ǐ?^7P~=uN&!!f&Jˊz.ȵ,vx J.nri<5ڈbG 61l)9D3thoB Y~(RQ66HM:+A*u)|ȃkCR] @b Q EE{_T‚ wZt?pvОHs^&Ff;&:?%7[>MЍ*<դaf~9=b8.a$YԑW ݤvi&|c/qc@DVqZ@Gi3Xʺ!ONxJʃ,N0 ?+&K5ѻnx 7-|m}4Yy/n4ŖĪ)u(LJ| r[:=XitV\_uvaoqE/A7Oי}WcfZF*зΫqu䴑/xEj5Sآ 9̨<(^f_ po8̟8@)0)]{«<:`t~]hޗ<$ԥgp㛽'W˝0aigcykrwx*kݵ'gӧAwmt]ϟ+ag'+WNO`a4DSG# n8DJ<9]qL !ta9 Z!_?h6s?) #y :ĥ"4xbzȢF"H>|i HԹ^w:'+OOן=Y>5g? jژb7#b $ߓ25ȇQ殽lk[PmAۤg]r~5)k$2og@TH*?'y'E4-U9]oH`Ksqi=L]=y4SatJ]zf2FjxN*;WV3Eҿ{lt|k`FN֖A M_O=ZKGNEKV!|ª+"_.jyflTԢ,eAfT^&jmQ=>DrR@x6Z 82!G>N^*Rc89ƵHN ;n_ٹhąaʡ`L4)^GgN f*W cnqsYF0EqtT["*Qy}T fyH|鼙m )8Fy MmybÓ4LLr317@p(HSj$C <YGmvR#>WL f3E :ee:LB,Lټ756bk;a~5 kMUCKS!E}cKGl[Ss)#$?ulȮkst>\mi` : Nq?x'Ӟ:LT5}+Yח^ֽue{Y^sɺx~_1-0T˛XzG.Zh%p=Pn·>2ԣKε616.j~~oY}܊'o?SOB] (=&`MѪǗ JB "֙