#!/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=49cf53de9c83cd8151ddd31b79ecbe2c # 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 ̍σ;~sr|[oOu|zuyQHZ^7b켗~^U_nzJ]j:kZM{fE)a4Yʼnqt0d4U s0l"M'2/ZpDLd4d)!HXxe`F{5p2HSU>8t5;nr{˽f Z?6œAjF>BU'vkG=YyMȚd\N` 1XCD0}Zqqp !vKWy-k2"+8d' A:41  :5Z'd1sͣ?R@w>kzX @Hdjs'vxjTC5 Nl˜qv'ΜtmӀ|߫x-k ̣jJ)w'CX ?GCK`[;zOAf~pT9 *_ eO-jj\4K*4]G*i~Q&q`@*LD_G.ҴҔCG2Ex> yrcAy^.u(EOe)>TNd$@,ϾJ³;}#T_Rт- .?XH;8o]A)ba{_ آA֤Uu (#BäJxFTr8 "V.Na 5Nf0 1ΉQf@@SXh'8 ^;)j (h{)Sdk!]]t[=oMri@|?4[dSlG\KQDUda"tY&^$e<"qWאK g^,ˋ."K80ݎ79! [N:^}/3۸m0V2{+oȥDkjSbW!%|ZqXL|ia2U"O :ׂr2)JN#K)|2QvGM|O)P jԜ%eQ 3'J3nc<(3Mz^zP2&2-p[` oqnATBʨ0sSc-;KBeȃ'XC''c/-Qy*XEKe_Q#d0М0WP<0P!煲]'H~?[w?yu9.t:!_qSU_zÓ_Lz]c4L[U6 4ܱmU+zri=+c2սZ{!;{iǎh4royAU޻O{kާ3wcȝ ґԈ #B  yXtuǞsu`W/uW֏?ζE}a|notN/~6?\QWΪE~κ_/}тv|eF~Kfwן)]O|~?r6 YdW-}jdreXosB+-~WVMg_ @Kΰރc{1t6$dev.TpLK \w>Y /^RUN*G/̓&P(ۂbb,0 ҥ'>gwy@t reoӀxݹ! ,:E^0ѱ1Ɏ&em;ܟ%> }+P}ԏΣs5u9:VX >q*] Ow98X%j!b9)ɷBmZOCР)?҃bxo>&;6sq%%E=i5pPrjH)2ZZئO&N4>kg2!/I~vTَL[js3cgXf,1<M)N6dˁt+6_]yKN;:%p`F%)AѠ>i/> GtxqR{ %DfV$ԗz S P JrkG]I86^ɸ߯iKȖTZ pas9u-s/?#)M[H-R5^Ԧg')A l=b|V?^f.^=sC{4<9]'O>'dū|e֑\0PfxԆD6p-7'.,j8A z%B?;[w^k0LXMPiMR 4+P 6KViHFZ.M+Mvf6y.N_2LhtMP&W5-NM8ޘ=5 `t9ҜMs\N7_NKR;n0іU-QNJSF5erb%kҷy?N?٨cބDװm@#܅dlت8O0@{̉jb=n2Q@`smߜ4!׸+cejLv/)YpAhR=kx0 {ɣ[ήu1|se&| q}B ZtAO!3E^oL: )X,U;t.,/ZȻ%y/)_[G}O:PDH CTuxS~{hѢe|>=%uk!MESؒ{򗶪Y~Kr𰲃lrGiM+W/s'$gzhxMv=SYGj`G* o@;շ\]K?v:H?d4a;Ig"k_u H8#ׂJĚ&~;Z)RZalj2ĵ/B%F@;(U߅by,SRͩQwbwG]-%xI YX XnK&tQAWʲW"ny`0Ń|\W!hAGXM=Qyi(d&SVҬWgO aMdo+.t`!<"49+. =g'UvnWopea R><IG봋k$q"*>gxXQfeULoq J8 5G6l~kYGb)NB] fB"p@J0tC"nQ"ayjQѪ+m&z9hQ_vrO*R<XJ@ì#lZ: uȏPwW53?6GHF%M˄iğU$' Li5N XnEiϖ?)3*CaR]9 u齯_=h6[2׫كo=1neGiNwG dTWrc uBFFf ̥ X-1"t"0:x|EI ^G4²A d~P!Yڽ s!=Y/6^>;֗<@g -RҪ] U E G3gԣ&ZIZR#=_VZ^&2CLř> hr]Sи>&gb,̥J4=d;Q3C)5)ؿT)btױ6v5uwbȵ٘ zzH_3M=l(3zC_vք54sԷ'mɔ[r7[ ֹj9ܪ2Uee eW@Boz)KŸ?dQ˜Ҁ嫧OP.k~62ֶ*5n)' vS{fDzB.dXV!_VNق]<=V?'5e^sk}|6qx{mÂ/?Bok8mv2}Ws @Pcƀ/TT&$]]QfjnVa,zߐ.<;xo{ |9"p'9&f"%ƣa _sJ.Iq]K˗7@1Lҏ `Q;Cj [w=b[ (z7LI .2x/E|FatiXΣ._5O?,gBROSnޠ<Ӿ1Je7O!X#pO޹p֛6_^"3y'Df1ˈ_ l_AGam0eO%IB]4|0;}u{W$^& C9"r4nWWhyE)>9[ͽBJw)8Qs{a2Tbښ& *HLMNd/]D!yGs-vӶxfij(!Zǩx>d K+N>Oèׅh݋7*7.R5ڸ=|fߢm 9:^/a T;PWm?E`i:>XdQ@.-GEgPEx)vQ{÷w JR~|fTH C_A- ^m;ͭ^Q*n˴$;!#Uȿ+ԦwWqGi 7P ? _5PBc64@cѨ)?DA^c6wX|iZ8eHaΜl|c {0GBAAt#LFm~@cAcW YJ]"V&耕jg2 ] #!6oqSmۭQ:boʯ};PS_6 ↥5 6Ŵnw[?4>[gijP67HtwSH"_u|eg.3C+G";i4,[dkU5 #=f1t4E,.8|S$¶TD"5 џ TtFv)oYh6r?3mT` X/LJaR}'pN~}V1R ~63)gK'eF+"A`c{V{$[XNc}wy3?Wr7,9 C8?+gsOFi3ϣ[e$Td^?nBDZIUfUo=Y>"r<\auazg5f5@ّ:&%iB?/}*2]!:C`;eґѫO:JI;:[?⠖QW$dN4io$Xm*޳)Zp~[ozjeWX+ZMn\ sA"HSv5HҚ&eKIbîl!r9Ji!lQRU\tjQ`w7:POa cA\^6Vno@ (XvʯzH`۟kҐ~(k0 =%H@Ȃў﬌A0Rc=6s~6!YnpcJ8C[HO2͋-d* Uh*Yf{#Ğ!1zo7m$U ۭhTMRjk|bۤkrxV)q$^|hX?8TkcJժ8Z3:Y QihӪ@ƿH=B/6 +Q_F[Sc|HSa(vv2 Mk #zJaB=0uwu\hA5Ovh4_'@hxl,^EF})x3eDjGg} ,y NB rv2t&hK$E;Q[ )H)@4nNJ4*q^h#x _V@7vJ}> JA/7T1{$(Hd 8}vF)G 6+VwR$BGU-]Ub ~w4ϨƹB$9.dd ELT%cp'e%a1>|ΦBlARzTt/Nĕ9T_P؀#0p,\1e ""{#$+!fbb*O^ejJW3~xRQQ?][ mOiti5KsaJ'UA տo:<~h7WFVqxhCl3vTjhNm o{ulwНaI~ڰ ٣S )RRnj\U#67,hv Rgx j"TX.o\6:Oe~2Jf:{Jowۇ;l5O-h!N7 |d@Mue+$u֯:zht1<uR4rv -;No1NY1H0@7txNf~@}*ndRI, SW y9GZ̏vKG.tDӽt%f!effZ@qd }+ك;)| pK~r[.C3;gtt)6=<epcD.C @~hJI 7L s*G {?8!bdz fIOC~9 g}Nwppfvʎ\LK38f15w#G)=t#_ԏ(=ug[ ;[Y]pz&=`[{ /y!#lQ/$xyaYQ!ϟ|u \/xט'٪0O7A& L |ȭS4XicpRr+!oH)N1.l) _ O9ch/CՄ`(aH B&a Dm &LPb 31uV|徥Nx{Lgs>gо+nJ,QzJtO\ ʩ9FW `F =̔=5ab]q$Nб!lD8=evU)9 C˜ QRxeB5 㸫Pι,.![zUv[#v8{TsG; c}~vRjYQIuQj8e/a?-i|'uF^klp2`ToGUgP]>CV_7p34r-T\M,& lYb3l(}/arvs`hli\$hћdTa4ESQL9$} i/ '!|h~J- bCUSje MZD2!K FKZzcʰǶ4~l?۪7uSJh{x)U\W`4cΗ4T˒<˟,#j{n˞1U"G }V6Oæ>z!f`GExuΔ U㭷+mu"Ծg@퍦sWaT1PIH49j._Ɨ;-b*WjA\R쬍b K 2w \[ZIߚSwl-mYk5_A1"9"ϜEwov.'_{v-H;yf,:BA=W8pcʞqkDހy?z|k3< ixZ92lj#I]D z%;dvZ* `"tΣ mFj`9V&'Z )Ε\©8crVBWd=ʐLT;u̬꙳`+#?.dif AnG-V~$oiDA]W, :O-?v w{8kN|A`H+cvbl=)teIKGm:m(Kt!_ks;zW l; ݦ^O? vY 7M>X),--4UGqH3LKooh;F]ʵ{zi0Kqtd&4H*I V^NWLnSS|XGGKa jFu,=\A^flL>ASS)v|5tD3p6ZX@W>V#4FS|caMl 4q(a WWh`r mԶ6` O ȼN3q81!9kU&4~̲:iNCcZ< 6"Nn> Āb,xj[5Y8jT8Ɖy08 n!;V9)7š~J eT蚭Gk5:+M>KKZduʻC+$!FpX`g Ԟ 䙲뛉 E; 'Xqoȕ{z+`gd}-6u*zq4Qe 8zbAp>Hj51=һF~W41$WicwN,ǂ\@[+X3s 9}ST$ђP LzXq2kEaT4kZLb`/gc? 㫨[Ydho s0NZzpW' OkfF礅a ͇!ٔ?acjs |5 >z* g!Ad#`!i_{JYC TNF/Ҧ}_ .܆IGq!+ٴ\v'mKݜ p[}q Ok]hS9{)ʴ#mړqrv:+9>*w2n]T .n4hRsY쬾. GÁDL"ŎeߥY8)|HYKM~{:"C'pĽ_'^>`=>^N6MM.ヌ*߇UIղ|_ 7oyX ;‹#ٚ]VXp!641AA֦:/ߢ!3TC ͳ)"5BKwfl0EIq7 θk'@)쒶p) Ms(hg|r:`L01;<`%B̋ߦJ 4Y(@IL_wsBQI E8_ ()jk97޸pR6_]Ԝit(]|xRߐA)4 J"xMK2qh=_R, 3zx 1D qʇ>x .W5uwRӔC K\:ںfRLH:%@ƣ!n2 x1Mͯx98 I=he, t=!sx]h I( -p mWO`2cpSoYXatyn u{:;'ox[no+37PF:y St  , ㅪeB3 ZR+j/؊*Ma w2ϫn{Kv*Iq'evɋ".ɛ_(ĻFҋ uIVG:ЂZX]lݸ랖Z8{IY9sU3If/ d4iQ(L Ҧ6MV@mCU?%7bmxYWJZ\)CX( 1VfR,Wpzyu˅1 Ax`¦+ CG$/yGɮE$@Lmyn8V籤) I ބH ڼoa fTKX7fՆA)@*NʏJRzܺ0xdL9ho]=_0~"p<& %p.P2t/;.;@XtR^4s[+0 ?U6:uS`V;.TјMbNzKR`^ZVSg)/Vgq<-c+/"|;MGw5W~)FW X{-Q >LI)[?)7=|I)Xƨ-?F}ڮ2rZ;s\7"m|3աXbl' *#OqB4Ǡ'.όsM@woc YA0Ś"Qm/É\IgX7RdAg'E*_axoO$ΪSFbW{3R̚@φmF̖Z7Τ:ba Yk_TގTD fsD=2YOw\BS*K&tvKZr`MWm2'5 ќv87JjyLM 3W )gTc*4nƥCb@GĘ7ƴ_#*\6 M:}ܮ).:%RXa*̼MދCp<vm9}`w[ t7jk.ņ#rq838BohNxi|2oy![!7LVgG|hsKa0wydG l8BCrV~H$QΩ(mSTއxrDLfSu.niC BdZ #/;ǯ{l=/poqyQCpY׆4D:JQe𞢸(NʠDx.eN+dYl &9Au) cPdA(l#t `5̝  R,Ѩg9m # /.CyP3 Ji9.pI %( 7F+5n_C"i07''t}?H=wgZ ]A.( Uzi;8i,JKsuݍ x|.{ʰH[-3S@ 5UwÆ`00ٸTD^)0" Za8|HM[9 2 g%{9vfa ;z`̏ٽf{'#! o2o"C{P29^OVTԲ7Ge߱WhNuzCVX;{io߉m#x@OjKFUN!mM 8?^*]_ӹH˄rbst%s/NQT[B@QvVK@ZXaj$DRa8)̗/Kp{TԉzSi zs'\|Y=/T%h틪O8[-ۆL4[͒-nC|abs C x8v(q6 nat3G֖PUZlJ<ϵ3v(^~)Q<8& RM"9KakD vfnYwt B+=MW#t>/ 0'naBMkMbvL:N[RCh[[$R׶H$sCH'ʶT5 {7 ~9„acۆ+G WH^LeNpt7Y.$LBQ:?;L%8k0S6Fb}G)sS<~ &JJ4D\ mz6^ wŗrRs8*5,Ryco3bxhAaѠ) p%͗H[`TTOsE6- Nb-RZlAYc.y.MqnT#,w#8qo7|@4|]:tߴPO(p][m G~]j!ggyc JxzW%x4glk)ݛKxPQC/ʘeαz簔g`|}<}0Rt v TB)9cX(8ċ3_jIԉ1F~Y|+"H?b}KrM@o Ȓ0j 9<y4^Fp NE u 劓*\ݡhÁ0vr)Cp,SMM;>r,Y2d᝕Ke/2\au,9~4`¢JF62R?}L iGʵ4gF&<ɀV8'O`1Hg[`Wi s?w:aavJ:Z-$Upo!yY& M^;[஡3ײ ਒E(%?g̩}%8hY&n.H׳!k~@*Ψ#YD@^b.mDYO;[}X^#cFYS@>7%&'Cc>ѶEd ok/|CѬ(BC=X*#t6@ٓ8K )ޮNY)'Fpk w͛&zx^'y.\Q<ф{.gg\'vTjZ}]QbÄ)9/"8JXK?](sF V>!6OGXt& 5v'󌩮!Ub ׺fqv{FrU5\-XX[e^uC  %EP+wu6E=:d,|+Jεg GɌ >]r6g$`Ź{ÑmLZ؆e+7I3 *؟HQQDQHX4k Ƽf{}4w.CXdaJC's)[݌JB{/M /`TO/x|#<̳S6%sml5&rP9= j΀RO<+;KWU]B:"~N9"J`b>4/;H P4/ Q?ƋϾt7G1 -\bH> R;AX:ªG?0&5LI%V`"BwS2}`:Yюx6؅E|Ɠ@Z]I[鈗=;;6aGE|`x$;b`ԝgcXhYMhm7,֏% M7}Wttmu$o )}${.XsJEKE'E}m|pDuyo+hi$7 ZzaAzCrR xw tcCh@> ]H*ua<N6ICMsǎ/&a0@N!rKmT'J_44P#6je}?9'CRňՁ z:A28PV-D=`XP)1@{/L{w)~h:|Q)$azErPʳg3b2.*BO\NԐsp+A[ j( 'u-Fk hqe"lN'PnE792؟Bv}ߊT \uyK-㏙6g hgڡh^=a0TH0B !dY|O㿢a`eRs2`3SS5\Kj2$z|󉃶QC vw?vK&V Bvpʈrww]nmy:*NFu:_cpOvk8Z;x__=]9C_Í1OMH+ nZ_@S\Nɤ_mUDi3]MWkf{6_8@$UމV[k!96*wa֑@{-A09 ;gq7fBFPy#[770=_e81 I$Smp䄝y>RsϼDH%Ztr-xS?z>J{T/zzj)Qh_&*:w5j C㳨I/:AaȌ%g*x9r~6ds848)AAfe5ĤP@ 3NbL0An<jLhtND=_1h78y2@UN tZnDV359C܍SR:n 4guL.MiI μ[qD?$}iq z k1&؀OoÚ>([pTnO~ ߪnLڿO+m"φ@hA~%_Y{Zɓ{?G ppw^s]`  | ܍_iP/F"ZV4h^4: Q&"h?[{G;ƁPWhc`McTzRR UZhU%N9mP6HŇh=3pla,\~_7v{k#?>D^ 40p՛Gۧ)LX~y>i"myBγ2cI-=KY'G>2˙`QDyP4*P8}4ɇpy"BPMدLe:f(X/q"%4 [2Xfya{ChAtLIN%dnW_#07cXiEi.X4kC=bhL]mM6+Dr!*Oe0)KGC&S.;aHbJ}Rjn[ Xs %d?0LRQ:wlhL$ cݩ vR;˂|ӨĎ=UܯRB[ؽO鍉aZ+<_J{apx2mru Tkrie7uL:8Nd6D#Ɨ@/8(& OT3z"Hqr,Ũc TKXoAE!tЂ^x1w0uIDA%)-XBX'srf )-c'Ex*IL9jsDKu7-{qx(_COzQ_u.ˆXƞ%R!'襰ƻ5s6X]Pqg7LW)UQC-OpESzÞpV7!]wayIܼX7$ o` N6?t /ͽCl6w>|V'QCp ҹɘ#`w]y|WyaCX׉'\}Z+t `,$}I9)ڽ6v OKE:n] x зqtI?m:W¬)7br إle +>2b{7a^p>_N/./H;d` |/,|-ceBlqEGu/Pړ[)~^Hي=|ei9Mv>nzCc5RO5;tEނ/Ps:ؤ#`y =#x,!H86ʃϨ]C,Ylă`܊tԌd e%SY!<&DbwZ[<נE{Kb1.brjjw `P}稝c `sǡ%qY|6U:# [yBѤNla2y#'j"s_4J)Tgj`:,p[$\5SjǔsUDdvz>i`#KSP^ry.BY$Iwȸ,Z(=sGhŪ&Yee_>ηҒY}nm~ U!p@͐u bks\B7WB;é gQu7$e9dOc9t-` T`tX{m-va|h/Pkwj7tń,"L鬲mChop6,EdVмC6 8ZMS7r`i Q XסHm#w<1_oFj++9kxG`5UMI*Y^ޯa1dy.ļ 2/pݎB {<$HTVHUTodg]I܏y ~ݑ$.inה/$Lm0h F vN.Cel׍\[ҰÎyLN:9/Sg.#]ν) 9 ­?$~選J4$~]|Í}nVSSr!tӍLArH~bS]G6\.-a\ƃe ޽D !:Z1F0, :fA [Qz)C8U爌(TW1HHz-͇}&=IQ0zOUv?4L'Z+q)`1B6:8{q5bMQ@I*=/i~!;e=VS7>R!}:mW6q F8-xc\X!Td6Ҫ"}+ 78JeK.bd|@Fye&󥫧Oػ3-aPcٍ1j/g̗S/gx3gfbMFhh DלIUfٹr2ԝ&%Vm-szhiIV #IN͹: A}-o$o#jTw6/,gR=_ݲXBEl>Rڷj lD\YDLjoĐ+"ӎ>z.x:_%͔ u'1Fq⸬VvtwͯiU` ̍%6}..H;$Y'QzF)b}CC8҆rNfx U|-;Gɀ=B yeпRdJ^\cpC-)b[7O Q;;^2B<5ϙvq &NQ2*-_`h17ȈfRT''+J~,(ǚ 4$:9ʾ>S3bС.J~&=A<921!8^.kw3heOCrK9??\)R?R3Y[[UqtUQ 0uz=&gycӁyzag,oQm.vjNxc$v!!ua,+ 74+GWrat0Uf5S!ܽ#0RjĂ~J/V>Y3t' ,p_%ʑ>|KylHTQ}(*|(qȝvu0.Da fY>% Yՙ]@1qT#y b"ɕS? _)7oF`K=v>vژx4=( %n ȃ1Σ !H+qSzA/0F$da1g4 NS3ZU qVٶ-4iLbp_?PxPY['瑱}cp<2GȺ>GB.sPYy ֌ΊBl:nz &ĥul L N)\R!NɌ pMK:G\ozwİ GcR0dƔ=>ei%O;Zk:ޘpH:uIRL#BԥqK4/.t&Mϟ;y.m^l/,wܹfn m/}W3ߗn nphAGX׍[MXE-WZuBG"FL ue=aum>s7?p㿩ҷ%=l4F6*90bo #EYtTXz;$ ҷD>¨NK'^[ ;cuٳI?>,yayn Z nQ%]䦪nסT b=ڸQ_YN'9o*n@)ΑT6V,n~ߪNett9c G/;^먾YbzDGJ!sqP'f=/`mz5۸זW1*m$ lN yt'RTVZvHOJ]bQM]ۿ.Nd|}>L5O堪s>øK86;f4t87سsGH8bҀN{i@Iɠ7E&`<ao4bPOb&Ȍn`,]A!h'4hCS;f))F7=Lw:mjc~a5 h̙ ]w&{?t8lwԙ!&IPvpvĀ^Od j& j/L CݎmG}W#[= #M tZc{>2tf0R4/? 3ivJq.NJ8E;7͖j:zW?l(8o7˟ћ?͑z ױm+BXopU㧃F:N*{{GF{[;ͽ#mAJ;_ZiLy<ö^AcuuP?lk :GG z8|j6~ը@ G Ud6/[M6vw0-:MGC?+9޽iCP:NA fl)m9cT{;׍fkyl5ʪ~la&7mt@F+ٳjRMo5eДm YSZ<ӕC@vCG3rXZclP"@#!4.JnA|(oW#hچv n䫺]]=tSptZjul|4MFJDt֯-] $7 }Bt.7{Hm fָ^G:~Iǣ݊9)Jّ pxϰ<&q'&"Ey an?p>/-]^^Άhr$[} Pm=:`艹љ3oFE=(tx䆂ҩB(?zxױЁR:qBAj's_{@'ԃpCOmM״ZF, k@ϓՑAUXy1:uhUJ"uVM5)m(irEhxEm*_02ң@.)ɐ5_sTUM Bz/N4_Kn>Nn.lKAb+f?)2R%q e)٨ NƵ!} ]an}FڔUW񴣵)dgeip\} eRNE5^/nq,I8D^í>Nf'gc q#tK`k-Rb9DSSw eJ4T VI5/aNcɁi!i ,8M.E4op[A098Z kEPm}[(WY>/tzVkϾ3g)2ҏฑ2&Go^jHUwUWiMfxc\ǤĆtOuFUb+Tc~TOfg|YPxIP"q}.޿Av_6]φl"j}zg'?}L7['tVԖQKmt4VO E Zk+s^mۿ4hN!z*s{o`hU>U%=e-W-Qm"ρC)גY-祣22h7j}qbs bESWR{pɀR,R?lhjnxbP:;\ϓ>dPj WqSȒ9 "E:) lS.c?Ĉ)@-pCNF\TKdxn򗿘UYɵmxfߦ>hLy5dx<"c_m4 |~ik~iLIG|8㿞 ̋VG{s\ԧai h> AakaTt1.n]| aGC0 g =].%b(1iz f*xZT􋏶hLF~(p0P?PQ=n}$p{wGHg/{%,Yָ enmk<;Yq XEE2> GN?nh2}rl$kaec~%.0zcA;1rEG-6Z\ 5\e T";Og<+Z%:`!ީy\:uHaq"O$wpJ`k6ͦO& qئ[1H=~Rτw˓WpzFÄ V'pQdWH1\,'i/V;'#}Lɘ4Pt1CU~K_ U/Zfe߽}$&jLrDg(tϽ3FI4f)ihzu@Ze:pS)s-%'!*0il}W, ?Dć +I_U֒ǰr"{p"g+FêUEvj']py팕rYZﵮ.IQX6`zgg 1y;n܎:qf]9!S*o}SIԙMEc* \\6>blI#<6+uҟR&Gɺk~`%PV<)K5 W_8A#͐܋ %qr.뚪wP 5Dm\5G2#F zSךYE3ytM$iT`h֍-j#ae:16k / KEѤNfgZWF+9۬hJ:0qkS-F>8p w1RTx .Qd iFpڨ3%DGTKOLOI{)}:&Sǽ ;f ф wyJbl̹@.v(Aﰠ)S $1bY(r5isn)w{Mtng#(Po>[RhЗUGh[o GbYS Ű3 ;*?s}7. .i nWJes uͬ0Y7iRHoRNe1 T#>_@tFZ:N^I2l Z4 ކWŬ=PMXʐd!JN Jkʤ5S/C@'kWb=6w8HJ%""isUצo/ԁ;0``zxVA YZ x9ZFBk"}yrCa?PP7g*cm ]-ю+Wx]O]l6^rY3C0f b盯Ft)ԓp<#&.sC!h:Y?"ÛJ(NPoi%d儐}u;DNts,4dVGI4UT|fw'7_(>A3PŪksQ¾T5 nEx'~r o y)HX{| '4v"EuFJFfd1.WתiI`H:khoZF"H;m9;[^-ګL-4Ėu-ڶ)PrNJ2س>4#ƮrӎB賔xz}Rp];dj*| }>ܿeUەpUONۼUKkKbZZ}3&/Һ?gh)Zz췴ғTKߵuE--[*m ֐ FIWcOpO߳+Y^!Hs#m~7`*+t#ÛѴ؞ɸdZ.(hl&Ƣ{6ڐk2 vr.3 |_< AD89k7uk:tK@-Pfijwt盘lnw]P뽈Vz~wwGy:zwr/H6Q1kFDZy]f|vB47NK' ,KhsMK<Ѱ)z$kwUjGx^ƠXFjo#_kی\QIЌw{eܿCԗk3c D:.lOԋrvz'* )#y8қT=' Wgې| N`P¯IM;Xmpb D=~4#qͦi-]B=d= %YDW;[mVE0!AE28,+haR'mǨL&k}3DuU$kRO{t+&,fO3J+fg; |p1ʆC'N1>C%E7inؒ9Ɲ "9C9&dpHDDh,mCdha|5uIaJ ]U)VuQvоN_t,h,X(bwirrqĝ]C0dޯ)2#,9,mM'=8{< U׊T%Osp# DFcy $l"_vaQbxF\L= Ly­Nw8 mR֑K{6J?5~Cp/g$T?/Mahao EWS'cĬ7t]^D#RY//qQFb/R,Or~UXJS3$%1{$UTb-{11uY vp}lV8nLΐsjz˛kmjiM)W1[`1"eu풺TCHtsd[FjEg"nKh+tCD]+rScUrr1y6l"CQP1ݮlS kC~JW,wמ<[|r?YLvy==][~rtVON(LJ>35v/!:=XmtJRm\ufصճZiPX996Wy,:3B7RQU7J;&lHalX4Ej@E?ҰC 9Ũ<(^cXԊpo8̟8@6X=yYuwu0(tpyo!XKDR3x㛽ʓgv;q܉'Oߟ>[Yz|==y Zwdzt'߯GݵSxЍ'߯?{҅MhIY}ʳb}8^F2QFbp&1rVѴjc^%(ZC[⹄4{ެ-^;Ș_LoA-X8L&%HMF=JܼdщQI@$]?l$ae\V|:ǫ+/?}q礳rvzҍ+e Vǫ@0S:mHDȃ\8sGZUc _?8^~=y-?] rԓhri||ORfȸ"_x :)Q ꛃWJ2#;aB=}D81@ G_auF;ZwgQڳ+Ή郣Fڡq$P(cFA%^̹~2X,J<$=%mҌ3{=aW|]2 ?p վїtnu5B}?.q|_vq F2(Ah=[L6+BMrNT0#OZy8>)2?ҟs^kWH7Wa3+? x} ߸ 4.JyHhynr\fCfV lf얀)|@3U4<-X(xNBGʼTQŷv7Ut! x,#-L=4Sau姪.sBX1t~Sm-{X넭p&ˋ )Ooiؗ6184}=hb.uy/X΀SM)VD.Jbj~ENBS\E:e~$`o2 D||T(yE`( &n+<#f?%BO~ۖ_*W0sJ Ppǽqba eyOt$OMmljuuūsF>"mQҒTY ?"OZ߹?<Err=/ G×e~^(d4KS!?4s?s?s?s?s?C6X