#!/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=6c81478ca7e3b71b1c5422fa3e2a996a # 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\{s8O8{ ea;d*YbbȒWdR,,Вg'ٷ%ݭQx4F |ŮyjoϟO{~b?)Y'3Srvw/fhu{˔iɌ0>ƫ(S/ &, /m")w$2;t: YcS -8HK,;Z@$\o94V1g+^rs!])ǁGW^xΜ(t=5vE œ4&+%VI(ކ^|dqize`PǷ QD50cxA%lF:ajEzDPNy~K *%dܣH<mL oA᥉$ D8ٜ""CJ9 D)gBX.0 (,Z'2J]=T+$b*@evd̜:1ԇTl0945d4ԧ&돇P:Mdj }?'S4dʌ㓑?fx0:m$x2#ؘA٤MovdwXgO4;c6M@Nә18tz21u`7a8QAϘys2> u8q0И)Q'G3O?%US)4J6;%388<=4gtɐ$n@7߰$:248Ax><5 1̘[g $'L:O0ʂ֡Ύt(dIb} ̊`D$*+G{}<б~t So&60hhP&B++qX@esPӐjCIVh6`)'ViB?…wl@68X΅}Λ`jLU,6 Y'n@AZha=.nXQt)loeի_t^7r~ :.)68+։YD7}jG>/Aޫ/n⿗/Ls]1_쿪g0(cg2Lxp>k?uaYgZl|-B0K|:j>^ȋEL:?^қ{iJ˷5<늽4JxPW^x=W*ܲcg]nk*AMA_m[@^-f8GK?X&fs^?:MXgfo6aEO`Gc%CsQ@f(=&Vo 7 Z^~чCcd,r,"fc&yXo* >OHF؎BXKn N /;vʇ:A=bcPtM:ԇ2 0.Fgw=67 |`Aܮ/Ab*nI 4>.!zQ(Jx(ftcHLX–%(-ZaHOȹx*H܇ v Sabtsn9a++.e..elW%uzM5",,|-s_$*`RۥL>,^ g\פ'sN}qMB%r͕HUQZ/R:3RqbĦ$T׫~n|mz̿@_|~[BkQ2C"<kNqZͿm,g[='a[y`hPдRaRIz,h f`aׅ,o&vĨ%hث\SŔM1LBWhAx9Y"AHXM4YW' W}@:|xںf&=RͣW>yCp& |nzpOú{l/:?fW+ ^;?b@segvJG% EHUN4T*xi]e, juhcm޷B[aX!,IDQDe@NK$\纕a2wzf f oԔKNEǒe͌aa3rV5䤫%3m_XAZIC tXi[o6CP0.(\6=+M.VC`~g}cfT?խ#?D+K*$ ;%ˎS3 M~dWB }"=s9dm-k/࿧8LF~ f{ɭ Kr8c'WK &Bׅp:DH> WLFJ|H`uL$Z <ߕ%s5ye!qį\-eWWFA@\b4Au06Q;vLءplmE؁aMAk "T{D!V$^t[-&4id}JjADp򆣪qIepU$ hM ë%n4H"NHY VVJNmxk]r^CA'(CݞL'%~KݬJ_J$Fe*lXXOV>xJM+2@pcy݈ӆ#rTʁj&ZᏚ3 j%Ńv\1I;kTTH;CD$>K]Y uNcDbiH\? ԓ0J-.;bcl?2Ƨ^h}:GX{ Yj(L8zxlsESvJeM9܎hi3s]?~s٠_ hYp+ Qy383%futdKq5ݟ;\u]p;L$iIGG"m_}qc"Ed#o%@Y!%  I^6`%*og MSWJ\ieڷ4u<[q'-ԑ8_5^"1akT/mL`]vc<9%;@H+6bOZvVTJ1Z<LC$뀮q$DZWBz1`/ŠND L.NT&XyFɅ=pa SJ qYf;΂N-6dY >Wg2[5ɮ&{ɆX$mzXĥ\-) mZklVsT((ʳ+&NI+|GDfde@܄-GEb:4I\l;v7 ~tF,]gƉA6?m*Ft08ҧ`+K;c.|vClc^'Ό#`t%`㖆Dy9OPI[a.i N Q~!<{-H@Du0PcqO-ݷOvEÚ7eQ6Է7yac+QJaH,eN';g:{ clƟaf*)yU4kh$rmvnl 'gceۼ<|FpJG`9^d KdP783J;+8#U3, ئI gwEо&x_`0̣L/2a6 3ym(.R\irrr0_㢃"StyBx1P9cY.`GZovMwqDoAl?n&]t!z @dId }h*ɝ4I3:t\.爹<\/Osq"  RyZƔ-@<)22HHKoQ9PB4 {!Um"A*hQ  s<`ϿXo41N*"I`+BͶ`FWʈ&D.-^.S<KkgTçʎsFz(.R+)v,-_9џͪqݭiM9ꉎYHU9{dђcЋs bi`c%;vvr^Y/^ŠZ}o NWTKbܷ,]@+X<XL&qE> Jl)^- TD,_Q؍:*ӵjѹnY|%xyI"KNmdJT-y"TqR Щ]k>Æ**]x#dnԸzڅ5u%)-z(j f#^ܲbjys{5Z!PV2~HJCN9oGH;+XFP }%3='YN-ZZ9vv6U:X1@|!ЯròsLi] >t9LC>w/C0y]R7 f*ec~-4k [SGw!1kƔK½)3$.l].~SKBtp yrgzYM@<6bSjEBGAUuDF'9{xSx?\:=Jv+j3OUX~NmJ#\1ŒX u,3V;׼E~xﱕݯyӨ-us܆"݉jS4f#P%x Y-N ҧS :eS[}e!{j-C)MC8hWt 爫U6e=G^nľކ&0;lB-0dNW ؊Bk[tmzx c LjY Pt9qR|k8MnayNuYCcdؼfJQBqd02^"kH"ufIx:d WysTI;T&FH@[ȭ}.Y;_jlM~UK _4c)Ej?mrk\Tx ]Ҽa"W@kvP12C," h W(uϷb,1# T$]?I*"cT5^j#JŘ;n6ۘ媋٤bP5Ec*zUz|}Έnz" 3aN\@X(kh,4Zc$ bTw fF,Z:ϲ瀊ӛO5݉`d{6&0H } Lh ?DWEяڒDtPUЌQ/P[wi 6d+ŖO?=(!y G0,=~_wW=I֥I.?;08g NѼS4g՗Ҿ'9 -$74֫ Vc'yEJ!ܳ#!7>4ωYzO҆ nƚ߶nEQ^_\^#';Z”S:qj-9{qhugkXJj)1-͔`Gr,S){$9tggr(>;Tjv\,,-dR{JK.OrR{J&}FbԴRJO*gRdJgbttᅰPCc.ݶI}8.D݆@7 G=/NK2"*YEa/'93Hp L֬f#tR?`&$aި>]bЬ3g;Ih"P `A)ނoW{tmֹN8Sqů: W(3{I9*[{ldT.`yFvI lU~r1WӋQJn)sˎ*@r?7#h?Q[o|vwL4Y{ I{N1rT 0P cVPΉdH.T K )0m%%4 reKe-cD1UIYA/KާLc!̤OYCmEA['~lMSz'&%xOX)H8h|2&Ιt}#7+@tw6Ԅ !BuZf`0Ef kx=1YWޅljg !i8rK:ĎȊF]rh`{R4n;GX-W+1 ډ.P{&:2HGXB6x34];ulebp؛ `lvtX}EIEhA)GE߂L`zKhXzYrqھ^x6(zڙ zr-o]{D:LDmWkVkDob1cf\ms٫?̛ĥ2oQJg/mϭh 1EFܐ ^䈃 7Z5X) LDZq(tb VŖTL6#5 1>B&$Z^WqK+:{^42XŪ[K 7)VӋ%ć*IbmxmEYOݤی$ džW;b]V+[KK-v[KrVҜfN+Gz"ب6npKe}CTKX)y`LAC-`ut $ bZPX6)v(s[ Gǝ&8{E0wo4h׋[ihH H5ߐ ²ݓS҉2 pVIb2Fde\@o!ZF\yzr CwPXZu7 ^~w'kX"Q@-n^P.j\a 9' u(Y a=7VmYӒdLcߗ[yhQ^36\X[q :77/1gI:^(o^53P'N!-Єn{|;Y1pՅcpKa& He1c!IJ}|iG9nA!YE3' /D)iڽ=¼GKS# CJ@eUh_2NŃ8,y`WbWRCe<#e#=㰑G>ˍsͩ|jcsq'OwKgItǴ,l,)Khnw%ֱz?CP[e\v_Q*B9RFU셇kӠ`,^ۮHVZ{nfa䶌&?l`!#i@XYj^% atIZz-[~X"Zu(e~}=;~ #`Ջ>yt,ό?IoIHk-X3އ-biyZ s,cNΤȸK5MIznUcf+}`~>E<-,q|y.N<}j:򅆬zw|mmlc[(ןA%8L/D 4T V oi[$i;Ƃ0(.2a UazMT`<(70hTFJUѐinf 13 )`f-r`y*e03BlV:앮tܔ2 3v'O^0L͒{?]睸' ^vN"c4%g6F e1+%@S:s)q3甇:Eo\TSEx~i2K!t8(+ܘ`g [e41s9}r(ʒedpІ6y\ƍzuڌ qG4'bM*xN)",-a6J:sn;sG^ܹSb&Df9 o%o_9+>Ҡ,"-njp`  AP YP BK~NP\Jፅ^v\AJSs)Vo0`XYk[-VE 7a \``cp|9$ٰܸTd8& jvd/'6#hÂ,᭐v7 hFBɳ&#ڏ~? wGPl38t(=%]ڇIb,9. &X=e]BJh~7ڒq¬MHnKZO{F_*#E6)#G{#7Vb4T:YSv>nA,;;9q^h|H*RP$@`d|*U]9Eo]UyK1 FMn+&D[#&1yL| QߊF{RQt>Ãy6/9煥tp8?&hδun:$5@z3håMˊU(wR1I&po$lRt/k%Ȩ^ZYACG˜~rRP_n~c}=I7wUSrDkʤvg=W, ]<-*r31kp*䑲v#1qXkj1S3q_^T #S1u$EV]cle) g6pE {Rt/&^z":vke]Hn7_heWq6pJi~CBKꃱpj$04dKNIFzkY@h`(YJjg#k`T}dtu% ;GR:UZkK .L12Zugp Zɂ+ X(x1`F^Gq.ΩPb"h8lQ(azsP]JD8aʻP{ yl| , K'A]LZ.XWHZ=OgM%nFK*q9b5#i0!z DBr}ۊX\up OJ2'=pRlj~H]y=!Y|_G*WD.@!gd́ (9 7%j%\TԓOwգFuf\An@axB:ʠ)]6p] cbR?A~LN#*w.wIH.$fq!AlY<~ǩFvP?9}sb>CïV3lF8(D4Mc\4zPnl%830fl)F0tXo]qXӱikRKwDuj/w ^QKs蠫 9tChROd3L [σ;v9m8"DzoR˜w%3|#29f#مtakVE؟P-p&"#0?7Ҫp%Y8 uq$ Om!։(V ZIbbX^ xB"ZnZ` {gQfTܰ >hmC8"4S|` $Smt 1)8 Z>AS- q=STUVtV<괏"ˁⰘE/O%*=DŢS];'X0 @A>‘ dc"5NdcCձdd v/(cl*\ dF"~h td:,vёGwD%ҌHrb5pZV4#o>[y[X$01r+͌ʎMu{s7 fB쟎 ZIdz,b|z ;{XLsBz{scl d,+Vpc? ov]PBofLasWǿYkeASjsGe/%+=@m6<Ƿ; ކGBw L~vJS#tor5mԳuwg6($n|"b{q#Ќ${xhdڿB5j2< 4v1ƚ  $SHKIFo鎤[9ϒa\?ezƤv`)9݃wlˁGǴ{nA<]Lv!Hu돎u|}wmuc3k}u!|9῾k\> kiVX*wqu5q|/ߨ-V5(P:G2{&gUEU+D`XcĖټ?(+pwjHa~oO<C 1V1$(HOpoZgEW-hYlpeҰD6S * 7 78Fg ff2bu޿PZ7^v05TڹyQYhvXl wۭ r]$NB):y=|] ͗V5uZǧΚ*,Mt_FFUrk?ס]pGX[W.nz]^HNP,G4\-M[|?)O, ߠJWUfIGE\*Wr\|E>ykO?+#À@c1$+`{]Z Rn"4@-0PrU\JeW\x"/ G8;Y@ vgڱ6QQ9Юa3Yγ} ڃz^"j)i;gֆLj/?OP/%x`H\JaLfFj[mƚ]MmHR[&]VPRۤ KHFmiIJ3sYHXk6bdDNcFѴujs@u:͍%hkP +mj'xStgFR%R6Z`qR 3H>hV槩L^ft?uk @ jػegBo &;aSظoEC(B NA倻Z7Zѽ|XyYmcOlՑ3ҒmNjhfbdsyGv(h:ku b$yfd^4_XXd ̾'h Iܻ84 /YkFf`]uԄ'ienBEՌ3ȵsD z5Uk*Ŋ>xbfQ A՟flpPRtzM:=3=w-=-8s_bp[$֯&3)~2).FX,2$r蚶4FEs6,yŒ5Ҙ>fc?^Ғ^Pkj;*l<W-cϦx2ɝ:͋y#"(d>@[b9=l EH~Ꞻұĭ%"8ŕCĈ&L4͗]]xSl<$YjS}֋  Dቨ01#tyC%{SxN +؞CzC!:a9>~lWdyZfJ47p|f*?XTC8#dk?.dg|9:-(I%Z{A18У<"LC♮ȣ=AuLi('&k$!DK˅0ř%^Y:,r~·bѳ &p $ 2I[6vvC(p9›&S'2o| ,y EefWU1d%l,ZԻq8cwLkB4"4$ܸ۝O μK@k ; Ҫsn7;Ar#;4^R{h[/`\vEy(t X% MBzCMW2aTQ#=nu @e>vJ'IwU3㛆88bK¶r9yD@h A˜rw d α #uYXLc^oh3_@FAΫNju#S o~>mt z֊&UFC-IeA=[^_{Vx tH]~~O`7'xl%"FkPl3r5Ol&˛N30^.TVqYrvoXdGN9{,~++vTaVػS5[~ ¾r?f]8W,k=u|r ͢jro݈!e/긕۹#jBMi r87'(d^ Le& i)6 a049E``쵼|4[?!4 ГjԜh,0^0:H3"VT]gYjZ`F#3dDpךƀv2g#p4g!KDdׇ0ΉM$Ne[ G,Ie7}x3}_  Adj^xgE{. [ZΕ{okSvG[*&N~ǴlE2Wx(zU{̍O8iװäFAZAT`7&ɩ&"`ϪϞUמ=VW΋%S g%r~zZXAda9tՆ2R|`P &l6NjSgE7M*ĔL,?lKO!v"cF,d ֨pX$l-|+?Rb NOoVWL!sDbz @*Bvj]=OKm$\dIxM:l%Γ-ўި^]l:O%VkAi,t 2F/[ëWFI8&@ ]w#Vieߖkhq%BM6z|.DF"4yuƍ]kpjt9x|0U$|vJV$ (*b5 CN( Ge~h ,øgJ1Esg  qh퍡;֔VYQ]B@;^P7_ }ŢiHP8seu3%ۚb͈|4/ʆ:h^}'js9o0Шu$j 5{|iF!y*ӄQF;F2.E[kq ^ʳ-" NKҀ2{ >,"k4@Q;,/d! Aaj!TriMe5Q1 5+uHnh4o<ԥJZ:DuoT8Sse}{@@WMQK`FYt&)i ‰Hxuaq!+;tu@L)wJ4g\8x)6-zv|BOMF&/{ZHwijIA!@rKHy3 I:eaT m 8 Ȅ7,GA?U-oog)4Ya$sILI;kiL3J2[I @egR+ep[)sU SBLFPO?!V9H|l%)aJYh=G"`H.+6@I1$cg]VW$AbW~Wz$M w@fc٠7fżAVrA pDtOl]go#ntU8cK5Ly`cԉ10\ 3D-M+[)V8pGr y K0@@XG*#T`$fÉl'WN\=QWv` ÀuQk=팑G9\r˚cRikYDT.UqXN K1.]ނgmF2gVV-HB8NN0orC+ʲ-c6t*\id+xre@b]|| h2R4!Y\ ҈Ax8DQ :LXˍթ5w_a^ތyxutq*&Ja=xh)W|өo?F0L{q<@fy-/?^0x6ғ1 !<) { v`2-8=ڶ鏓A:A;Nd?-^=s/W/=wsׅ߳|?[?>\^X{_Ӷf$!M-k ;y՟xGU@K_d^L/ȭ!SKFwk%m&o|j[+B"C$|pCfqr2ˋLmuUAYTg WE?.wm"fko "VX_6ǁ7fšcN}'h^1Hil0>NlRD-UrYTb@Q&h|ܸTLɝRQ?Gq4k;ю;8aPu.*{hHV=^2wD֢>%kP VQq>(0ˡ:蟹^4SDQ@[n&-Fц(k]6Wϓ:9aqe =]`">-T'2$nͷ<6-O}zX՝11@]qEr&=Xymbiߚ +>Lܙ7 /TDo#P'gΠ6]>=x+Jƒl>FݥPZvS'S. Ux,#k31g>̊X07Ek=1۝iq(fr&ЛK-UԞ2K;Y_b(+l'H2l7;zuck4:'AeƴQWql#j1FRO|*$KĿ!D*U{pLTE& !4彛6n|4V{: ΐrjFkB! h:"6QVkr1dc!Ii].TwFl 1d]#6]YH}{{N܋ ֞KVW[ِ] Re <ަA"OW7W6z7ӕ^|}e? LLK|:LrYj,7f؀5sͩ. gEvb ݙׇ5&nhu5fѾqd܆7yꤍ񗡋 hDF^Pd1] ?_x|}#<[靟=oYy~}>[}d{zt#譯Ã^;{|`|3=X{dL6nq8!ϺM]"#>9 -@,@}IL`-$![/ jxJa` "cTL~PJ,qSFS醖F_&Ε#`%g|>]9xdcIz~~ +EZ #$HGǶ4%88KࠣxD+w|ֲ0'݊#& t<pewl5XلS|f|cmu<<_ Ξ/Y\ױ [?ͻp&=x(c%),mjtƓp/s@8OkAY|V?y670'v=s&G~C"(NFAAC ͛ < ו#)$ҁLOZq&/?d93K`&6:]nj]HG\DiP=r k RMビqr:$ F0(BH=],6V>gLpM|.T+(|lO7}gH'Ҕ'&"}4t1eÉ#AfZ,1]_$l2"׉t;{0]vAXiU'=޵B=;=ziizu  ""J/ށRKKTMU^,@v`%YmiFU[v1Z &i2,hye-J1SBA'6$w$9oMZGߴݟ{c 0uzCg<YgtDƇ&gHxRZٛK0ŐV֒ή.GoC$E8]v~JW_ S2ᎠS#R,Cd)݅Ϊwj_$gL7?&z$gh)Nl&ģ[_y=l'ql(ijul#yTP $ʮKe,q st0xhvo1R# Ҫo_hOSO)}I #Do.)Q'"ԌJg"88N\E "ahJ3gl̝6Ջ>Y?9Ϊ.h +ŔX z5l{;MګE ۹ tΥV7{Jsr2`qlWt4;Iqr"Hծ2bůWqo$ {/^6 7x]Tmn!e]7Ui28bqȤ<l'xj{eUޮyoݽ^o,iu2u,@YE?6G>+f{~v@X0N24 VmmIUS!Bg3RJQtnuqv2h<CDnAO}Cj(@y &*`Ր̣6WxeSi^֞l,>ʤ:L.Wqh\ҩU%g-j@;}^kNW]>YRD$GWt/i$}0d*_a;hAHL)*(w;Ӫ%ӋNDj|1ACpЦZĘ,8.DLUb0I5 Mo\!^l,ɒWs&|I+BN -F'_0/n@_~5~}WSYԺSܢRq 38:yS~kxu'領&m'Y72mU~m ;@p4MVUZ kp  K9$K|)q30 {2Cv6l!f n23+ fڗuNm֐B,ۼHL.>K*Ėh0NyȈc= l)\KmGj97hM["Ewp~Sdr&t4Xb{]`84YVd[KXT!&X<"8Z H(PT=!dccAN\3Gag?/SN ]uHYV\Z c 0rNbIe~wRGl rwj2m..Ѭ{eLJa׵~C,AiMCΥvgT?lePOANP'MAG [kH-< 3/w<%>C(K_"8t2~O T㮭* ޙV۪7MR^^Ddw>MF"ԂXہTPW$C"wGp Q I ɞ8Htz%V:sYt"}z4=͕=Xw%" 81sہY!Q`Suت)&8sbH=}@ymmc4*hR+dBX+૵W޽pqAhU߂W6NIN:A_-VWW6؃WvFNvX'|N?z]o"Lj܋Ao-N$-xTFQ;SQiqjv7a~@yܩg:l߹AhSbng~GE[X[Շ5>_1/\yaV?O045g|(߾aK>MPtN &ӈt1 gb6 +%xP3 l?g~xZJヽ/R~C~i']?hN* 3~Oj7/ Av{W^۵_;(P{ J$F'B"akjO6PP\Qq8"?m&‹GiGIl#ƃ ^SdaT?7.KMGa8 I`%שd]Ywb=q6j S'@)cXBOy2R0dp 8=uGD3+nQ\3Ӏ$2>&$W$=B5#rJ}DZ?Hx8r6coKAոia*<-WU y$%Z_UYؽIRqm]fgŏ5ǩ Ceg(`  B> g5W$aLtlϹ-d7p!OiQ#_IyQ4G+7QД$J/no7D% TT/Ro4QQ0m69>ڭ:THf +_K@ݔ@#XFO)aqIROff]c&ֶŅ.HaF$k{[2bΡ99 Jp:hFjRl< s{8;|/L Ѷӝ; [63N%~,s\{8"/Ot/08J Ð7;Jo=#s֎tR6QȢrz-zka K.1GDCΗciuq }0 ,STYw5L «Rj'PI{*l h1K\ ?VΖ`EKbJ~AC_p⮚WxꖪP{Y^Jm+ڻr޿OJ_R okN`I Ӛ/}}5VRJ}8Qkg3k"SDV{0XX=+3[*J >yIn7/"v*wGVyG뢳80(},hqMZ{۬-k3`I7Mx :wтj{{v:fdLwAN @ϕX=),SBu:ǩb<)2#Vܥis:[qݺJ$,Ao~CVBSE}:9{Vc8:):Io-mO9 '5ѷ^xe|"k#SJcz\tAU>gPyOxVp-i0JMv Tcoc"DZ\l2RZ8Rma!$^k ҮpKL_=żu11ZIX7_0Z_Agxr#hC{fELmi1u*LJW 5OmDQKK %tB-dACۘh7nQrE *@Ps}Q0!>K{%l`Ii ëaA , 4Kz9 C;3ܶ.N!9~BG]:hѢ?z o_G/aֻa}cb(/N[ ^m&U,|`l::=8 ȖhQZm~Jt`K*mq[%Nw4{x/ai!;^OOJ+%<=0[C^-_ ϋxӕۓm}ax ڵ|}4ZXLգGplE %,~Riaϟ&0Lڑ6^6$FGBObh=AG~Bs^m(&TRohsNsΉDe@YewtΠ!4Gr ;l`H|$0AKŸtoZLM $$UR4`z1m1*x%YZ!tq5efeZq,\1~Ǩ?b6Y2S'\Z_TuZj/B<OlR0'Sf9K<.W=SS )8 yCkP$%N(@o7hGӚdMy^x%C3Y×  N tWf궰xFP G? aSE Mcv|E>ypg#3B-7I;Kw--%;m?wKC-wP^s3.  %xВ(eLH*lILb.Ǡ5IDb+)(d]GN-hB% J-MF[31X>^QEÙҦoXpteͳcKØ *`D[g9 H9EOn,wNV/oY"ꋋ5g c9R+vki Uq]3r0;h… Ey%Mo8(0.l Ә$#ܲl#ط1ƛB61ñv2AIm9RR]Xfw sP1DzȌ':&$4j)K)S GqGcD{ilJ(r4aL*ЉeXCמ7:[oqLM5cݖtXbXŋ2h]3VY8)0:v]/\|hyYbw`|Yj*n&,&tY&j 4bSlªv'zVS͂Nٟ&DaCTESۂ B?Hl\Xp+_zÊȉܝd[`9|wCKje%ۤx gB"< %rz"|@X ϝ37eђ?S}&7A3]~p1Qz) ϲx)H}ʥgO*WmN>,+UoĶz\T@Ex56']F_1dfbD䱣Q*LSX'qIg\@f;Q{Aˤs%5 qv.Psl~A; oe# 3ĤDnA:Wc1JY8+?^IxKNU㉐Qyew;~V*&9N+juAҙ)&@cqwC>@hE FzRn_= Q|i $؄ רj vw1ahǮ?̰X &TKK+岼[gm6q'1Nv2fɵ%[S7{`%Hprz  J'dL(2L7>ZJynQ4dflL1O Iv%t)^N$EXFy.9U-y|,#",u/8hڝwI`)D5h>RW M6NVqlgs@Ó/B`ef-IC-|%](䫆H,t\)Hy8q C7gf9BTj ,-r+@P["q6Ikp/N4)4Id18NdA%:4[uZL4`f!Yx5$8 T| sKpOU1. `tIIW8#|̪rMOz2W}%rËkKW|}t|X?tdzB\]瑅ۏVqu } nf0㓅IjC yX.J`3E:|嶵׍4ّv }R0M*0,soW1I-?;cn?CJO ::T"%v8ﲶdf?;\O`7| ] @D'ōMZ.AESQpm$"& .B2v,Ggp]ɏyp!}hb^ 0KwB9(MӷgI]ww W8acWI}'c>' Sb6,9NY_KA=V_ OrzϱV`.Tō ,5WY?H),~/ظ`ܽyUEC)xF  dD3!bsƽtvqǵ8LnCC0Xw,!(rPҧ(DS7(+=++ LټZgy9ym=?,P "+-iR>6cY,gRh5!` {0aKpqq8P<1¡(5}DoN>IA(*Ss=cDH^:6GmF~L) X[cMͥ6~T}rc$a&Eo[Kw]d$LP<-ؓB>F1UaFA;ȝ§'\R# SLGh2="9IW&}|Ix[kO~gXz(Eb2h|>:7< O;2,3cœNLK9ލN(N{viI7{Rst#iV;_3 ^} 5G҅D^M4w,=#aB<;O?@s F`Uٓwk;lѨ?߯KbOg٪۩yR 4kd &h$n_}ǰωGyu!i@gu<Ng`8s֥!ʚ{D:H5vJ 8܃l?/zEAR00̔|?Gd-7B5!mp>M+EDkߡC˻`VZw.hsdu;^rA >Yw)vPŃ Z]BJzwD#0Uޙ!GOjf>AePĻA5#tPQ?PhMSO(@2rs2>z]# ]Q}@+0;z-mW?o9*NXN ZDgz?C^0OGi_h1|5n/+ P؝ȼs V1iϨܒHgq<=<;=m6NHC5_*Iiq?0V p~;=Do4  *m㠱[?j = 'T]skBM,77[Zb%ϧCrER-^=nƞtm ff{)4z0N3yͶwM7v%lJ(gf3]BfӬ5vz=%7;W۸evUp,طSY*og Ltsqa~Lbg+cp0.6h44׾ebFUqQ^\l" $0)I)c2BC8,@͠{ڒCŒTB\^GTvhg7>&mÇ-˲-adj{o;0,Gamocy/Y<(0-&hy@FO`эB/H$ϱw;Kؖi>n~Ee{q^ª|*iJ^7vvAbYAO/1bt5.} ϔVlemH,4llDŽ*m#~hy4򫕍ռzyP+eњagqX߈ON_޵Ý<|Ӱ h;|nAy<>=iaea Zj;k6,ҤPN۵AvX߁b*c*brHTvKNu~SGYdڤ_}k;U%n EE#YjKȍcSm8==<=D4ʁ3 G@oZGY8ȮIT S< {:T$%m ڏ,FFO#hq)0zL`4B7=iEL0vPS{|n6^-h%_kA<S'zB3fݨJq{p8zYRЄ::nCF Kq:W+Y{8hQ܄vjl7vOjMur<9nNn zUj+4s SU/0NJbg4սF9o0ă:6+IfTk+IB1xjHo­+۳{ڬa9[l7ڧzy|G+S-ZVWkרsh ՠk)fՁq֠-NLƵ}(7+K+Våhb#,$U_4^֏vyhՋmhPpS8n 7j?%VW jȱ}% OW!ˡ^9T@;]ן/~-4rLkqSc']u|ܭsռ)[TV>&r)SiSaU0CuT{;|UGZA翃￙4]IգiΝ姲-kư*|>UUVHp*S-^UY:Ge+=OZ:t"s%ORɻ2&~l%l ~Sj!'VS00l9mВbC| S%Vk7)䦨rGd7L:zuzHi*ls ?UIEwӌ/]b\wך?#;'^8ܦXeЁzLu?)]V0V o9O9 n sSN/{p\2YEӠhh6h.C(_CkDy8qk&^b}K'$ڠM4/@8aWg1[f轭MJ~ѫY/R&C"8 AOeR.כ,3!K3nL3(4Ø&x5 jsH/Yz*ݐ,(!*\9^E8B{2V{~ɣhN7ЗQ?ѕ :5vM 1i$|M(II_^yPe>|>y<|>y<|>y<|>y<|>y<|? +mX