#!/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=2ee888fa9f1c64ff2825b41107818ea7 # 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 K_DK앉Ix `q -0Ă~mVri a5@,IJn!$Z$d=42h^0$ڰ5_iԜC}.@Ӹd4Mi!mӸ,,'ozj&&3n#~Sۆnu1fCc|a'67 CodKvkx.a/ {]NLf`6L6Ӊ3dnhXf}fe>uFe^X7"B:C6QXS}`Oi曎j90dCF[J3 fm3[gWɐ$n1Эhbf 5[ 2HzMs6ɸ ~:5<$1O0ٌ>1 b^]ndIb "Dr^XWxc2, j3,0hj0uF2Teو;Vf\2mxk  2ِR )/ir3A.fӚ́\2qz;޴1Ym60r}[Cݲ@:İSq1ʐkϭm5sJM/FSwl_lgj*H^̪|bL,KuQE xWO5;9$*{C;}x߸6_~U_տ~O?U_٩׉txsߪ|Jk:|7 <&|yB~sֺzYý`B2f pq/yL<UBL_4^6˼tW[Oj"93mj8u>;qut!탁21akm#t@͊5Xw c"*ђQ#M!rnt͂$qdKDe dž?Eр$nd׶>cњ $B=l637~d濾o* dkr188v;S {ͯZjXqvX/bb6}Vլ֢u}Mvc6Ɔ^- ,v4[+v_7㦢&,hȌbwSK((yЧow(,y$ɰ2KX}7uɢv8Li7SJUWkT 9eUܱ#aIݢob >{^4q;xSJt#"̫!:c^L/iDvu~I,6$.v(A#=aMҦLg+) ʳ#l-vp =DOGZa & ù`'g7qFӧ Y 57{|vhg},\Z}mBʏp?E>wVl@ٵ :4vldefݘFOZ\-<%Z/wL;LJ/c5Zw ! |աYAI6^6F<|&@3ϧ=rL=U?sp&O2Ng ncлǜem䭌93GT0ٶJFgft{t C<#}:YsYׇMͶ|4~Ҁ^>@|6)?ػyzUSλ{V_!޳KD!Fx} ͜TaB RN #[eգ _>,}27K׃VjpR3sMs9Ό!zÏvsij&ݝrم3ҵFoR &)5<~EĈSFJu6^_=AYb" $L$((a^,'98jX=t_!7ƷұcO~ǐ,$,ˤ._9z3_{q"gi!ۄ+7ydjc.`8],U%ԀYS.D]N1iW&1C%@F8pKfGq(΅)e0 x.Ulx]Hy;oX@-2U~)z:őF@|TFoBo\$V\d2fcѶ6VA%| ́&\_\u KJK},Kc *I(R|0Eo0qhZR,k1wY ڨ*Wdm8rʖNV]H(XG0}RAŃxNYyn$y!3"+MsU+PT~A*. uخ9B0SǫltfQ٭hhpPg}V ɶUW_*0K,z(T*Eu_*húӥz<Мi݁Xa~yP]ᾅ>҇W氭6rʬO.hv/%y2yfFSIך-X`Y T?kxo_ēT-K1$ᾞp,{{ +WFF}H\>`^N]߃wZZIi\Mz/jrT/Feg]RҫzG%$q D|Z [KkfͲ|Գv{6M^)de!m֡T'dEkObqEJיl KIs4_y@b$ s7A OJ$q<]u?[$ bRrN+PTQq5KL풔@tZNߐB2X"ֵ;>ك8Pf( LjP~H!Sn fxObU | ,҇e6eWɃoC I C9H(6~V)N9Dp?nj%8d KE` ]ⳡe4+Y F)!Cd n)57|T,3h*7z?#b"/kT#g5i,adj]W`~i!w0:K|FNU_Le8\@nǐ@$2Nź㇆mDQ3ElRե [~,-1ɮ}QZF QVT\UYSL9r]R&3zWx-7T`14n* Q^+d!u~bޯyba;;Dg8 }fik$ZԭΪrRg׌L0MQ]b@=e>2UWLJnנƭCç+TC0 /Vԯ"wV9i ыlj%. }+P8T6 zV Tmc3ǥ|ly* [fqTk0mG $G܇z_ey=~uc ddDQd0&ft)KUUQjl~TWڅBֶ)~`gUx :phALH jЩnֻ{hm1or4?'Qe{b]e+鱄c'Тz-)eCl2'$2L1} ~ٕ$"q|n\TQ'v8vmvtXx+9u' n+d-Ӗ99c 8 pw޸,zsw*PA#yY^$+QIC]oHt+_E>{G6h8c)PNuN@{,gH k`Jj4I} w}fg`!*ϩ&a^B'.!^e~xW?(D0.VwVFt{gUQF+zXpg4 ܑj7*hfATTPۅL Lcʔ4AĠBy?70<{dzóE <77C T`XGSϔ|ML첫.QeZn%/~Hr@EV-lWy?Ҧ,4|>cMCTP:/Q1J=<[4oJP@1X~ATwX*Y?JU>[ .),5/˺o]-XTyw~*(X}&K*l 7)16M" mlHQ9^w@+$zgIyo{oƑ- _b!Ȗ 'IES %JIELD,^[JH {B) 38q̇ D"(6՚ˬOĶR Ez(4C&WZs%" wּLm@8T@0[γ9.;4g`!q'17}FciR܌[!⟔b}sa{Փ7-ReKI R/G2?>{k|mu#4 [zrVEnga0qӽ.Oa}{}ߋ}j8i6OGK[o!>p䴚GR{ڑx]฾_r$xŇ@0\67gx$.4>#цE.HKF:"wf 154AVfՍ_|>#JEr:/Ɩ wh}@AyMc֤PS"%kGvڿGHF!?P5K@?A%T(4j=mշkZ!?l 0NSB#ʾ&Y!*P[߫qޫ̋J]w許LT s.ς3Swì:t@_P1.`ó,ݣ/AmTɡȃpʵ>6LnsaK|*#EwW^>Ė'v SS/nvI CHW 0D4CS:njNQ$3AWoԪ;և@7lNz_oar,vcn!K [o[Ѹ=m6H,"sty)lƛC{t M"HIHr*0)0O:.=TV  { +Rx| Gk Mryt?[doV!$RCd"Ds'QRzNkqPFyM3[Y&EG_7(Y=VZ(t fоb"3l2ϡpl.QRca'Ep\`?=1;%eccVhB+x;YW(M4(r~pwp0/fNEq⟀f}4&Ht}4WJ;ل.4_;VRvG#~9<8;XɾZM3 <uG]*$錳A֫,% */#:fMq»w(;5[R<|`ХDdJ-@An5\Gcfm5܅̙@aiEq~\^ 30:k%|$=>O|H Џ*3*rhLyz&#w^ۘc9U$-dKovk~pP2-)NC+3 јM]p\fwol s 1H[-%jWh?:Ls?>]Kk}@&9dz{Zw2^wȯbhefo&ь[d$ڥH;Gͨ<wPskEv*{R$DFuT<؁!J8a}oD^d'ߨI&BcH"P,-NI09(njpwcs#b 9qe SU\_rjGAq,}Uwvҏч]dڡɡp<3sv߼"sjjq:pnN^Ꭽ`c@hQ) 4#Yfv^ Y;lO5`6iQMFmnlYsߋG-˗B+ps\sh8NAޡ^ݫމxUޒ/e*) 419;9y1<-=)ODu_ F  8lG52ytyalz~N/Փ RѷPJ )iy R%TAcA1JC,`U=Տ%0 I^O+#]J\;;)m[P6jjGiG-xIh)XzB֚{l39=ѨW Qo8J.6D2Z۲G'c;|:e&*#MfܛNÛJ'295XFΙMQe4oҾD#U\z:`"t%CHQˏyeM@^lX㙃2M%pSa<Z@( J0׹Hs rވlS БPg,yDbN^xA[I] @P4a/7*P1@CVٴכӹm3-λ}'yG|'tp䗲MxM?-dWy?D^Yimpj<:$Մ fW3 NŭL b-i׌sQnfP t₩ 0 j$ y,l)fPNg+xwIB gRx#na^+kӊ@Ƶ+rVUh^U14Dou jTmІӳ*X[W'(TkMOnm@]&F9SHAGFzC*[z[m೒c<&$u(/LEp`PHnS]"Y /RTh\^iI(5I4Iw7\$NBx˗&EqRԛZêunbwWj s"R Jwk)a8FA>7%W 6qXy ĭ,'R%)uX[X5 g/<3z7ԈϣYȺoņ5%_ Y}^ ghFip}`Bn<(a/K(\9ڶCvx!xEFh1~b*phnEtv:PydUޜuX*[-v*Љd| &Eh[.Ks؟>ӘfK"L"^gc-A*H"")4tјب+\cE_P3(! Z<~')h1JW)oǠߦۻN$[ z1[M8 D34XG|Kjy#Vx-Gy`K9á.nHi%mq$^":8]fb78a=r[/ۦćW4N^kObLx8? %!6wT$0{Ҏoa>*C5DuՍ$ @kZV/SKgjvܒ}xfqW -nqKZ渌ctd&HL鄫a SyȂVl aXb_OCF9w9 ޛG}W4]A!PWTHgH xvNN1b }9Ɲxr㹍Jx14 y[[2 @a(DUף ʲjO H/?l?`B5/i᪥0ms*%mLcק—lFR A\!GUde,jhc53z /rCƄͿ') VDd1kfk [uFܼ܋dIᄫ,3.T1q 0]ÔNۣ!kx² (u$#wOb -9cesga-L֕jAfI=ȏud@ӧM΀ݴ&CѠc)֦28ed?GficSftd[9fHھUS%+DXoz&;21eۭ$2<51` e4!-`UR2/T"1gX0JLv1{ _9OnP+Jr r #P:HjUW%VDnG W>%oE/DzPL3rFXfF~" [cۦ#]6~V}#T}HҢLniCW>WZ(qe/_"ZLw숶h^SS?JHD?RZliV.uտǎ}Pm*xǍ.XV/^5޶]g7(JJ r)\X. .Rd^ TTɨE,zƤ\76@b[=|}D*2*JUEe"[eY CIN{9r=Ȝl:b`?(xtEz 5%u:>U1 5bwR?5TX9,vyJϸK8-Z #;^C[x9QPbEGfrIm2R U&_2FtAd.Gt 6V Kv[SIؾt1. ' ;xV4NT3cCL48d ̣"=d p 1Hr:A]zD PA5B-:rbInرOK% ȣFa\TH;}:Gi_ = ;N'D*\1l@KL)E_U6[:7"q;gBsqK1:x,MdaWG#$dFs6A*"CFw(mg%E&`(j`-ѹ$$pEZ[G&wFGxDǭ>=09?תKTnӐR;MߍvM[PF. @.K4$!֍qk 9 JAd`:`,kALfiRR˾bS%'b:Laiy*J:&xXRe~`^$D2Tmm>}R/č1< Е~׿ xG˷P7?,I!߇Pa%?#~j:5;FVY[,Ʃ^* M%x^) 0dHαm̈(3Q /;fiJx,/',Q,\xnQ rOk$Ƚ@'(΂_"a<1{m!U`.~+ƫ;Pj烖 j3?ZH d8hRI $6͂Mw&nn}I%u Kw(d"x)<: s(cRR&i umo>1aS]5g pF5A"j֌ftWى3<9` 9+ȷI%4s&ftϡ ĀPsgĞqISش'r$*qE:w:},\V$dsL$dlPʿ?x# sjyf#y.4)Ν(H]bpC6'ǿaA *(zNWwZ}NIs|;lOTy\H6~|ӜoJy|/0ٷE]% W+;g$bàwTtθ!/rVIGպ&PL1TVxD]Pe#ڔᙪW7Q$W;:yK7kl n:5ZG' Pg녣exҢ ;5<.SN{;W'[t60+9Y_SvlS೴QB0][@$ás>bcD٪/`؁SD`[N0F1/R|6s8ژ[Y*];|@'1,f2%%ԡ7inEQ@SwnԎ#w}6T9&iY8>ϞǑ k'{hEpዽ±Y!jQɎ4iQߚw0a]yHzsU{W?=nq{D_ʲ2qB}N 7ZVvTyR_SӘÍz2L)yFkpɫqQ6fMlS.( jݼ޾ՍE%{_;Ȁy!T}WAB]g\'Y;Nd:*Qu+%k  da֬5~%N;=ܰ{Vhcu=^S˿g(1,/Krg$Q.޶RĄ)*IUvB6Gqqo:w80QyVoL&78)&q zY Z:Ȕ)>\Zcޤ7BSzz+aDQ{p/dGWK":'=(c . Ő8{N[Xi3FԑrQH}s3Ih2CaKÝJurPAL3q+ʣQ(k,l=El@ngzmuamFG _q8[Ce: Iڴs0ke?O>\xi 2/l s| /{'hk^Dr(ޘ6$=u4am\qDw YwRD_nƢ^ Dbn`3m Y|yS >&iБ%"Uj;15C‡nw8Ca--CI a9iه0`zJ.¾!(S;s>퐥@SQچȝ􄃄1ĒRr 06z\U@)B%jJN96k6Fތ2[(wɌlYCOy'u?1"蝕O- eAyU1kkWS9d> ^09/b,l] jG7^ChjQsi$1#e҄Z;2H68#b'aiыѰ.}N趌UZzӱL:kdq87{ٍD16jqDp.NB8liәD 舴R(O!T^q8 x@*ʗ88BgcܤNJg%p8XMmUnCCvYQphZ+X5-.TQ:$Xl%))aCbAWH{:}WDJ@+:]n ˰ښ1BHIfBdIhSmc9n+[va_p&"qopOL1`2)l"춣255"N1_)p:6U)#wGm*iDXQ PiI3fCO %CTYwZ?45QTbarZ.Ƃr<+hM€$np Iӵ"ppibsO6$+! 2r+#kI<Ć${d@L!?`>ƥ1|ͳmte~1=7}W\ >>Rߓ{ʻ[ۡ-p,eɲ$" βf5ekxYSJΆjƒcTԂ%oNDVe@~+q#,MGu6o%ݵ2ĭY$$w;hM20Xٍ~}#EL,& zշLEH jSaˬ[;B_CL"$J;9nlZq @&Ud8Xɫ= =me-%Q=^Yhf2h*FiPldI8LogkP` }PF!0dL-O%^C;4D'N.s/j (>6,0Qk µ4ѵudusw.Z%Ed}H>k܋G.X,ME ygwUhuG)̹7$ ;m"JEɌcþf;4 1c -RQE9dfmg-i0^|_ޯ(:/tAi' 6^p`&/ 6i=os)ǸVzPɡ&qQ ݦ? vjMY.LafU3ZGr N:8 &[hS߮>i@87qBWP[gAQь?*-ؕ ~KII"Gt+6 +qQ QĘh :׊"4u[[sӣ}=#Nuc,7҆8<3[4YU F@;~`-4e,RC,ibry^98p}v?!ޅ gsNaiIon.~:s{0dhzڃFAz㳐u=`!҉MrS-,AzFl܉Ûos# 3|5hyb<ўK{ⳑVZtM)᠃2fss:fKǪm"!X7Ɨ:i>مV.Uf{'oZDN$cU+,c$U{i!`΃ <tsP-bDJ(4PE@h ep✪qbOS8 "@8o\R` ?Ђ9.,UP n:pU%̢W?st"|!HTI9di{do0)+]Pw i/='q_ch[Dz'RF1 N)%c>[=FV T:~:i(3g6|[i[4qƋ).]Q׷ݮX ]w=+[^Zz͑Q[:^0m2Uk7GRVXsWst݂K貝u&й~};6'?Z9)Jy-bN_ɋ[qoJ~uU=/9\I\b13tN9 ZbG亢Au6E0A䓟A50019yK%! wƛ$Le9^1h$f3Lc@^o19^\@̚k'N!Eh 8Tlpq^8':߄I֘chہ0#ֳ߿I=X}wn^\$Pwb{.x@L@qͅ=\+/wN'Ϟ k|>c9%p/ ygtA K34+o܀ɠn⼉Fpl0y*Ro';pqg ruF CvL*ю)%q:IwUuG| EͤVi0vjm&^LҸ^B*uZr3S FZ?nIzn!.}t', {1!)cKy @F8tK|ydtEM 24L,n:ܤZ큉_ ?XC\m[%7)qaREnep{:SXRC9bN"ev^F݁af-DhZ852 jߨ8/$- @Aha1dgVPYG)F ۘ9.O{JY]qcywbc.{ (RE0mv##6 h8r\_g93"18xX$1-;Pɦj /0)80 ݓ$3{I97ςqJ.jfOW嵭X=">2ODh pc Z,x"Vơ=-G'lכm%ݘ~oW%8`0k".'ѠʜZzh;51y=nO-?WUr f o|ӂwðp!1Ӗđ}4^N y%"H%> ]/ydZb“=0; :6p:8))Y"ꟍq3TYh\NM*`"epC%D](RݺJU։epŇ$}cCeFjۨs̰4JZEK eWm[#"g",B nOE!OFhJXΐ@+^pGĠtp[3 o[#mGۉZD```21Y Źȵ?x (BO?mt;}pK2K'0ҼNF$q3vt(IrN䱍 9#SblZC߸j;Dj|wmO=o0.Ǟk[+()PKHdՔ`5i:EB59_lɻD$ˠ&v'0`l}ttvƘ>~C͋﹈XF []2l8.z)H-ȯ__zC3В2_N+w#g@j 0Y٣?:w@we WhjXCO)G M[ohe e+vmM0J!˸eOh& 2 jGyA \3{IBSAAc]rE*+J}EX 8uB!>5 SUy]@B۾[ƊHul0K?AP]Eэy8R!&ŘJgh ҍ"#;n> 'WtPi[..Q9 _b40Z|.DK|r!\Nw4ʲ3'I-Z'-:Q 1l.2[N(q~ 1=<\"pTĶf@tX3FkqH8r %Ydq!n,ؙ8āW(m@adZ)g\.g8K\cf8DY`? xpBcbxP;GԬg8.yNAtH),ewd48 pd4RtLݨ *jUXȊEXsZDõcq% j?8Q(PgAtAFAf>NAI%Vszɿ %Pp  mHwQeσ.NVy 4딤Ii_\24Ѩܣ2%f^h2qxFX F[!/JQ"Y37HB pϽ) MLa {&>#! LRXMl^,?B1 &0s 6}a?EAZ#_9#?hڶ\V~S{gEۋ=GZS&(t-F3N_ =ǃ6{jf؀RPtA*;8{aq% <1r{_#ߨrN*ђ+GT4^I?2' Jn8Wp!OEv@[=:a.(09ٷh:+/c fqT#)$%-gvkѾ&+DfeOޫܱDğ:r0#W8jW1vJr> 1\aXB < @ggL@$YeME*ČI Q`D^v)2O],>iZCqy)f avt[q<_^#->XN!;|k(iU}t}g.$//6آ qi|: B/˜:.Bξ2DZ褪:CtNg3 "a?8 Je1% B Wm9IDt47Rjf:ػ F͜An=N><خ-X!J'Ѓc+aOT﯋D#)bR%gzz~~{c_c`Q3I]cu[w?s3퇠8Kt5^f'ZrA'6j [} IAKqSyS=CR'Q3_E%I(|VZo_^&8 mZ'VXԱ@#f򃙏kh D:L!+ulB>ݢcN-K׆"kWirϬL(N*x$);EʼnVx4~,GbW <V嬶0D&рl<`! |EqD.-.PtŒˢSr5Y#3tOgi1oudg[A;CzOGkb7&H((ԃ{z]E8H*$ C74)'f Utx?lf{c$rJop7?j(O{%KZp(+<,}tqa6MSPk$,]3ʙ-*ۻMG6u#s;24B8ԙ(zOi+>n7# {\S,whQ_])yMFA\Z*s$)\zU?. @4=K3ؠfi_'!}Z)7ȭgFO^᯽+*%خВd=Nl=1+ UqBmUQN ͻK,4՗WX_eH9߳g o}cc5>++|S}RIz $*P[b:܇D'V[ڭ z? !ICBj4*e! l 38Ҍ^ q IVVvn)Rh[}V~bRf &S=[Uh4ʐ5Xbx}4b2^25a 5V,z6J$DbN|r3yYD.? 뇓24EV6e\!e$SSn5V`oK|]C7jf Efۙ !vj؞b(@oIvMݠgN8d{>ft*8+I%{glv8(ITa +6 x42AR3Qr Eԛy{ ;٩W˚><ñzsSk4(ƴ&66r!;j LS?ګC{fINvK P^}~ %Ku:M!6lؐ)N)(jv8{U FJa lwo۰0ȽR5Զ֥$6kyک# W6iQDZÒ4O^5'5p]67aYT= %PJtҬk|VΙav (ojKVhmŠKXLX<_uP{W{fWob\ 7턐;D껪k/uZ7XT)pD6};jV,3srSƞ&jF?oϕF_!8P3دmn)}W{ɳU߮QUKmDewwWћ5]'jVէ;v]⾫qT'|Fox,P/öoqOg8] r֬a]g4덟/.uu>]רwzϨhjTWv3jئۯf-Cm{Y]ϚiOЪ>vtD+vz^y@dؠi@*JU;GzFʩG0T1=i,r)0v;#CNy8^l< fR>eš/ǜ󿶖>kk<;?yO?]kZHR1@ FZz+;$PQP(_a+$RV+Da]ŕib胸Ŗ.& MW0Y\}Tp_j[7b<5AY'ߦ?^z"|X^MKc]unS3P0/UTۻ{^m+_seETy% }ْ0cW3 ˿\?1E+MMTڪ2tHU+~Wr\+|4_[-#|>kR'?_Bߚǵ|%eSb]K;s>{,Q>Ώ^z8<9ʓUj߹Gt}>k)9n&$|N?fipSN{BIPlqkv7*#0qS=9>4{{[0琖Z?)A)h\One. Ͽ01?yco~0rMG_OQBF ErQnH s)JȠVNlpb\VՊmON=wzP_|&]+a-sO=zzw֡8:՟'Ҝ1\9Zsӧ+̵_#ZyY͂B\!T`}M7j՝Z}̦|נ7+|rD㎪]|<{h[:lR-w-J .$ӷSC'tC[)n j-&nv e]? w"@3)to-IMQWI|ծGÈN,|?`dbP%.cX.lsDX 5Vt\>_cgv洎5eUcg k֎[ckU":n8 gJub-&!J!X 2٨ 4$CwP&.LxWɺ=eTbN;WyYwQ,t:=.+.عKCP9LM |C czۆ+Wt&A#doFNNtY=>Q{MFH={Bѹ .n$ӌp+xN3 9īG0h܍BsU`)ڵ_6,]ƠjVoѴ3rRF@W^SZ>}_Fh},yG>u7Ӿ}z׳U(!0tJ8aΨvL>:Aɩa!TrhMq\$N9*V{W5+uHUKL+wzV=F7*Mar SpKU%:46FBCzwӫMOWQأ?e!(|&G9LjLS/2[F(ZSB&FxǶ6[?l:v;g^|#'Qu{4TRZ("vP*4N92'"S:uaq!+;49@ gJɴsC&Ǚbv"= ;NXI>#F&/*u-JY= &\m;+r]BC7$Fq L,[Lj075CcF Z?w,g_=TV7yV?5Wۏ$sIt_[k 0;Pv0`hg/)8Tp[Z.Ûr :" 1Qоae#KdE4]AU,hc".d Mk!c,X_wVJ].\DPEEn`mPtR"ˍ'3K@Gpאg)`2xGT̄kfWSz@ksQ2T6nئ[{z| ?k2ƛkB*#&K4k"Hhb>t~kg |ǿ)(tduw7a>kPo~@HVb73"XmQ`Z^Ld槝qE3sh%Gem?TβaCC$lt"OcŶQ&l04͆>KO+3(#iGU꣨4ߞo?5д* 7MAk5>}>jo2&u̮h]='X_A MPOQ@oM?uް~h}sQEn>&(T_> $Z6fhӧIdPOs?B4T/h=Y]?f5>` En'vN}1>0SHFTy0va}x ~ZS@ǂNOu [LM~?KtӇ)B.C[9֊CGB;#n5_ Jϸ̭40)iaZ;Q~%1v?/)<׾@kŊ.f(&<^*Sc{r]D&l岌-3{vQܒ9hvق Ɣh>\&K<*=<]H١a K]b\sp7_Ư}׾koڝ5Te@O<1S=A|k.Q@hUC[D[C 3v0ռk}\}v@%(֨z&C"X AK둠p! s +Dg]{e:D??ݍ=-ʝ4ŝLQ\&ךCz)W솴aF Qrx9L~,~cWLґ :5ئ׺mWΦyQU? K>s??I|lk|X^WjЍ,*3oނw!01Xrvke80n%$q;ηϷϷϷϷϷϷϷϷϷϷϷϷϷϷϷW0