#!/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=0f9e6789de056e2f59fb57b913c46c80 # 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 P^7WG߰?$3Mr$sϋ 6֏qp{֠z;f)_Bob7 pi%#Є<=~q0 sCm΂%&8̃Ѝ"WI};oI*E\Ɯy ҔlG?;7q@\FyQ8($8l3"-2X`&uVDΣ{2!$QxA–{e`Ro+ &,H$#7@C L* yS7S#ܔǁLrɓ S"(28F䡻Hٖ9#HH8ٜ!CmhZE)gBX`> (,['4 ie,Ys h|1W( -I+ž2,fM.ך3=5'7PЩd4.lv5 ubxc4gĴ˟4 [eɌtƶ[f_v` 8FƵa=] ^scdoi lhl14Mgtb `p(Y~mf]iQW@3y=Md*;ׁN|d0< @ q 1uӜMmc2n_tN I̓12L6O̷eAzW:(Y@r3 W6/Gƥ>?A< Ko  Lf. uQ6LHC i6$<-f3vċu!rٴ&3s; ~\{7iLm+kcMclf_Pl0AN1i}\q2>s4[Mܨ}f wє5󙚧 R37xk*/EES;˧7(?zu+ç!;#ʞ_;_}x߸6߮~{U_տ~O#Wg_'ϟIs|}|Jk:|7 <&|yB~3ֺzYý`B2f p<&{!//e^RjyTQ:٫'5qċ`B͜65ͺvޜ8:@DR5OD^fY,ۄ1|hɨ馐9׺fAyָnEF %FⲄcCh@7[aњ $B=l637~dN_7l5c}Qݘ Zѝkـ-58;,I㍗ {x1wSމR>+jVvkѺO&1cAjgntn;-DЯśqSQIdSXdF)%ZBpSϷ;FJbydX,adQ DrQp}O)㫎xᆜ*EObXnJKަwg / Yki~^&^"{Ajl/&9NO^ DXs5LAQ\e߂y*W)Nd7"9S9Ve nmMfa s|V ^OySȝ6v~|vMdec?x|MEi,C՟$31o*Q8νD@ \Wjy>!o¨ U]pM+ɳIᚾ]\F\lQzmAD݉";}q.HGPyz;my`LЇ,}MYc@t zw,ۍQ3'tc<>?=VU hL9ڞ2CH^iaGej`G 5?j@?p~|7~}?{{GG/KD"AINmIP\QG¼}YO&sqz1zBnopcaǞ!WY7%dHXI%m$rf } /m}/a[mY 6_.Kd>'G{ ͌25[`C= ~ע6eQ9޾;6ȉ'?[bH}=XbW $wW7V*ރu g.$}qFBC/v(ӹ._7bY"-"_7ʊϺ.W+u'J%IϏK6 qʯ#,2( AdފgChW,h3=R!BA:Rkn6YfРUDox貔0Ō|X#":+T\hSmznG[W<ßg+\6N:"B 83ق{wKE]kl_R+]ں'" -`-7 w>/8X.~MzF'>-I{`)c&SۀH ѽс?_$5vtd(^cQе,|5c-6qWKTs#]x䝗u L{Gu-%Ƕe+q?l6rBH"zȮ4jUV^-r@G$RD:mF B?h=]^9ye0vԒAu&r*"LȀ>l: ŽNxh7VxmZʄKH>E`ۜ{ya | ŏ6k2B' e ,t,=g(\>~$'q\>< %e_Xp~A=?+ULFͶ8D-D `x|,!Hdu-] ۈɣtg$(٤@KWXZpc%H]v |/<9lds$ۤZp;j7n8jch,Tts*$Vv%/B8 qֽ_v} Q=p:2/H*[U* IaᇻĀo{xb˯}d.9lA [ (OW4,a@^d c {7_"Do7K7u!ЍsӸFيJ\JysV6Ix)[qԩ65m@Vۍ=-fb5K}R(|nEPQ.´E.WzwLcp}|M֭-݆A2EFԛ ,Ui$VG UQBR]j ;[ۦ~Vm߆wF֒2#3gCymXX{d쵣ʫbļ GwjG@(]i@_v-]!k!q3iNSwƵ6`=S =dR½'YJr0zF8S\?*kYpfXD%L% ]Ȥ$1LKD *${9Ac C>/*oṾbT=~䃬obb](:{uuU}/ Oϋqt mRC|`2鴏Óg!#)4qs ixŇ@0\w67x$)u4>#ՆE/HKN:&wft 154AN6L~saK|*#EwW_ݾlw4;ć@%N]h"r'=!lǵL2ᰃű@<:Xک v;:H/,#ty,m&G=&쐼~KvtU200 .;Lp  o% +Sd| Gk Mzyt?[do q~K !e3RIZDE^Zvzm@]5ledJp~ߠ|\Ch)9D%&Q"f, @-?% ϡ0l(1OOP(GŞ>*rQ=w*>isW, ,s+~cSn5Gc} ^y.Do2Rx@d )- $Gu:paO0Gð PϤ%tpE[K`*i6|{j7k]clc"ˎfQ06KM=¶fGh`~9<8n;ɾmZMӺ0:D&mgõN< b^n^Mggy/"mU6}M8tƎU̚*" 0h"2dqD [3Tm|5 #,lTC\GPp~,? '0j]~Tff#]~Vx`'ߌ`lqG}L(Hi15?CҰ9Jy|Ponw- e6b9b;[LN#3csڣsHҎG C9K\Í{wm鵈8,[_ӝ:A\8"iuPZ*>FVLzG+402*d';]%Z T;^8G4G4G0-,25PXٲ>R1eA5 T˗2`ݲ0MV%cJNhm΄ KfRWbelc+~\x>\s nna]SCv5^vpk#&CMW?(cUcY^iXKkW7Ō%o &t.#l4n ae8,8aGʿ(b$u:ӟzx(@c0HڼqPp3M-5#+EuNrsw;g_u}>=yz/#>_!@X2\#cx#¼E~s'7"}#1DiTZ٘pѸ2g#ovu^S22Ben5$[ƚЖ}"QH(uVĭE!g b$mTbd$ ^,6'lO E U[^Ql+[_gcuMG7f2[;<5Fc1f>F9T;>G65 )Ԯ]ڋ 6'(/Sk+U`i[j m#Pζ_S,,i G֠߭QQx_/iΏvb嗙i[fRu"`Mѯy4A<+oXwx=)zxD"ٯxW]c cN$F+[ƪF*O @jE 7zF㛒gJ\DzڱeF™M14AR=DC=`.B@ܖ .;]t2W]FI})'b-gdvq2vWQ@r4M%M֡@0~@-x˙}/[Gz@Fo9]NN< (Amlthj^nTަNJ}` X:g`A継\k8bHٳgY}?! '~)˝L.sxM,tWE>^yYm* $fCS}WK-D?aGsTryk3r6nIdr.t3l>!LxghJd{8|lb"vԣӹ<^a@6h[ڴ%РKUUǀYTɿz? 5[lnmMCN*lSg5YC#.PQNKxˆ~v_'&$@'PQR:VERQzUT=l#$M%$%NuTN-w)!UwɦV-奝VY0C[IEp1m{:϶~eDj'S4HPlwV)OH]MQs\(5T:Hwi)@a(VI>{J* F3ԉ"KRH uKcխb-}jܵ􃫇 èy%6?\ bu4IKDGы`⁳qt~)dw2mEia uc%APtYDָ*7f !mYz}g~ Fql`j&Ma%hNqfў`l6b뎏YB3?7k!CSՈxG䩩^n\ PQC"je '96l Φ)ZBvB7" 3 3g<3z.5xϣyxl4q횋N,|X/⨗qfIwʊ݇;+5"uSDz P\BGO*> kGm{d ͎7RAgS+n$yh!2X1)' Kx\7־X!{^>>[{`q]\npۜqAc1z4tpM!i}M"J7F9Fp6'࿱YɈa%ja cIk1X4^QeA<;(]v0IN:dh¥GWkbn o;J-r [u瑭3KnvVB(E5T = 5B0,xV% D#r>ǽ 3rg r;8bn'(xާ0?CD1q,Ko6<@skFL,NYf0ccNȲ|MNו.g,vY9x4Zs &\^^0؝2`&=Ǣ(l(G1[œp҉p#bKʨsJ/bJ^aMoYf8lwޕicJ2dgm`Vx'YT Rxr:h]D( C#A1e/BFzzj&PGґCwuEWAd,Rvt"έ Ta` z.NsdP1 3Pd6+bn@F(v:{s4$aDsa% XۊUrL#f\nYk 7N,REyq%2BkܤdPR,ͳg0 dR(E$*ks6jI{k|"`&ĸ/$#/M֙YHY̒-ǎgӬh ف`-K#M%UO*j}yU;biTO*ёc@y F()uoƿ2h#+nӼNvwZ[%R;bnJ'MޕUUm#`럢d)umeMo;r"z}x&q3o,%}a|eS#ce1lEQ^åjc̏}]E,X; d⧳ 5Id ۹ߝ8$rEߋeq~Ͱs#a)m0)Z`O00[w@{m#H="gh:*8/p-Z ̀9|JtBs sJ2[&e}Ca>}Ustr$="#̜2Ҥܰ?*u1{Mro3"0v'7%D)vf$ճ*5Y8[7EcHo/~LEjZ84M‘\Q"lJaeeFV k3^B(:R zF…錵<#e^~!\^j*_*>e;I;e<ρ[i^?H0.a)3)hC*™TrR*q*2=,(Gۨ cQ}R[%F 9a|{T=24z<)yp88ƒ8l<ڕh !y@&6b>J$'kE|u1ը aaN"ԓpԷ.VY^x9,hs%kz [ߖ֊ 0(,]ҞQ˳o`,C MIݳmX΂+1OJa9AZO3,0q}ᚢmCV4#MtRPLժrvFH"k_2X#y5jHp78g)Y\Nk('peiNcZV_ڰ*g1k$8Rh06׆ŋEf̺R 5Ϻ҃ldcˤOq~Pd]IE1f|̯ȱwd}OH\_+Œ ߎ?2E?(:`wMnb~P\S08Eo١-XX6<*ʊn 4'6wi{rwbY>P3ѹ[ 59Saߊiwr g'`z "`])dGkì\XCkQ OPu1[le#%s|Te;.Nh%xrK|خ|H !1kcp0$IYg^,sF_DђۏRFݓ3$XhsTd=d-ɇÕ4 nMQ4qU?XV\Z+t97^@˗egj~’吙xfIW)=߳n-qq|(-:2OuDs6*hs*/$9lc*b-~I < ><6n0{ox&[ۛVQDTVHkxNF93NWb `9ƽ~4\ EGA7 U{+9;$MNX( eȾzyi ego퉿6F# ?9t|&c`BLS,×l@#Θ$C)57)ūσi#n(ʊDkN,e |c`J#Sa@HHt\bĚ:ul%{讈68b%wz;aL i"}w |9zz2GOB>nCn_N H\ C>#BYТ&_5} /(jERـ焮#ka a1ZN"Sر<(XH"FzlDn3/.2Yw ]RqUaYLwH)|Ju=.6@%po@p_ 0m)&WJ ӵLߵm_6/ NY=Y0/wTqnL?'NzvA/mU }5f`sjIJoׯZR~Owq@ <{;';jpG=>:xǭ.V^5^Wig76R躋j2%Ee ٨G_Tɸ~@)d0B}Lx Yύē U_QGRuAqYj:&!0, Օ$_p:%dth!+لoi.C32F3劺 (dgIC(TýUg k5A :x%n14 #CƫMpM -*ȭ*h+q,8 K?+'!Tv1VChM^(Xf d/صWXlMabGNDrbclrg@3鄧Ć׻ y\gK2j$9QX~" [!L<|$+ݰgZ8GRTV%H#}:m G H;ϦɉD%\ aX>W̖;.Ƒ.{i' Vt>ɛO "Kh{?A/hIlɌmƣ*9js|MTC#5d();07oeރ#u[p ĝ$N&nМzRAQfǡYh!`+gR#9< NٚGкQǀ\X@)>dn~@n(nTB'1ZpeB,OC@B/:a5Hw4P݃o \ "v2VʒҪ%++9^(t002j2"L/ z7p8nQݢ_L&\HԽ.[;n[ cǜץlyB8zMn|g qGh/uH# D`z5_m8I Xy CqJ Ofẍw)3IzЂ oNf*HK5-د .LhWe^\G'd>x^|u` BZ_gЯa0yCjX.FmY$ٳ#L}i%%4eE Mf0$uyЭ/IdT~,Rԧe &:;Qul2౨k0bYFRҬ]6:Rf4N2t0^e G&t3M\9s)11 Tw[bھ/ɮɿ*\6EOO_n\ۭI6 ? G@`o;TդHиpR Zw {|-Ň GuA ::bѯUUZw_+|ӵg^G|d'o%/SFdA|Aޗ0_iʇA8QłSQ ۦ*L~DTʔ @+SNf1r*ѦTɫ?\v\4vQ>:T@_9 N/ܗXR6=_}fƘxS_^4v:N^wJT|^2_ +$N|hӾipڄ Ui%fe3cPxخ"oM0~0 mMC"]$0Ri m(:BPbBеV5 CءAMOjK&!PN]`z'-[eR|i&n**Ȭ-: :9* >aX;B(R1cUYYf1;"rѹKǝ πNI**I 81| |{~g"p$߸H̭#5[v0N ǭNٓWb鿴Ёt7t%T-ZX냒3wZwGg(4`ݰpvZmNB>Y-b K8X(%gئU-{ds&Jo[c<ʟ;i^ )/H%e-i+:[\I{iZybXencV<6>B6/mI&&^ȓj R!UaZlb+(Tկa!( )n[ɖ߭GmXZx)@lg]De"dnp%i2)JsԄNry=v?$"S6nU#y(yqd!(&L*!+rr$]JX?sɶhuC-X̙"}I3amCIEJagiU;8FKEǰ "/I$xsšFH*%͂@{:h! 6 {an~jvCܘIycuV@mfY'#'ѢH˼ ,dd`=əLgh Ac[~~LRf)YeR$>*Ttbd20EhYzdcV(7Ɋ ,@Lf<ܦԐ"D% G|گ+2.G/x=1Eי@ 8)צ8 Sh@x . mYqֆ"t# {EԚPti3~`B)(vٓ39:K#-=iꁩB6QfQ0'q:%pZ6t(~\1HwCkt_`1 O193P/"xrAy.^nzn.yX l0%;Tfr^RNt>H6(9 WkdC)g2פ3Ȧ ?&1'ٱ"V:.ye} t|cAio)ToTsiPPWoƠeQ%26#őyeޕ3Uam8 _diA,CΓ!\aj δmEyܜyy(]alaf[lBD, YyE3r C&{EM\E/8ʲY`ocd?,a>B CuFcaKe}G(ɞXsI}MaU0pG|\k}~c!e&D(Ǐ2UrY@'2W _q2'(9Io)O[OF;^xg&~aQ`I;lNxQ\0Na$>$5锵ƀ ݯctTT|$t9fdqHT=2p$$#qG %tZ$vH9Š֣`'9DN5C&M30#">UZ,shRH{c;좼}0=%W=t!o<9cZZFW:AF⨇' yd25!ДcU`"zWxRٺi8' v$e_Yh: 8„cj'3- _KS ΏN*:1ߨ,' '1@]iBeSLFL)TU GIlQAX8ٜDbPH.%z΋ Zےhkh!Qoݝ&"dlCLWDL-92H?l9f"p6[@%`qBy*9+`/{%S >#"1%rCG ɾpk+[XP CI·cg,( -N ;dT+Im1u8 /iS6v-6 3!7v)3A S` 7] 'VX1!JHзbpg2`J;'|FK&';1e%KĂX;Ć=ǿ"bLBj~&z>Sa\m eYu̓Kz'y uCekw,6]Iy&lM_~Rr=zMwzEZ=qT?sV^9m74Lw;ߎ"WbD7M&NM1,ܵ2$Q~뫎ۯKx3j8-SH5WӰo$h)m"Ob@Q2ɟWTDh6U̚)>xe.csO~qf,>d֦c[\T{?zٕ(ýk8/_]vsSR1JN.q5<_H™mL$!9ƥm6CR(&OeqE#_&K[i¾[HbU x8Hq̪\~c?VEU= 5`6~9rfTC7Ma?QxT'dcSB:bF&@狙b[f +E1\͏PDi=mg-i$P!KR ot(fᏍĭ*OdE‘Y*ӻg4T+GEGdHNqQ|ݦ?!Kv@džy6LYU3֥0D2 N68;;hnq>g@0IڭBW0[Hg"Iќ_ܲ+v6*HHBl]A,ȋ`lz1PfUm# Y[;DXʾ[I#vj [# @3 [yŀE N^74-Z-5 2B UK^yی&Cbh6bRz|ҸuQ`hպx}Yp'%$36ݾn Mʷ@7cKT3n'G0\dIi7S]=.P3XZR8 {/P.>٨{"e;61Qol@$BX"V(Dr/np$ՂkVflm1-\Ym,9.:KDj=tX$R^)!A>hݨѸR(W`м:)c_mVP IhZ4}R\δb8n!Lr2CW?9~!bE9kdJioq-EN[D{oO!dS7cY;}s;4َ Ub<N;zǬTK@8SNI$clG,zם3qp; T`6ƴ R@J7Zz"LK+P(-j+t$$'굡.ى#6l3Y3a#-U=9`]/`©bI%~<, 7drٹoqa[YڂH[q:?Cnh ԩi[c))axH<8ni; Ө ލdJcKs),'pnmt0=¬fAqFS3W:ԯ\lE ZWShW(TV]+DI] \ݣ^ cκ@V|-sP0 j c > Y:( {G7")B jƬFIWֵ]Su+*=lֈǍ# M4cW>%)P0nlDZc,_өh yr1B `Eq0 5/KDG9w1eUfSQ:|$޺5Y2+J-h#^{}̢(8VF$MiuyW$"Gb0:IFb.RMMo| D{AlHO#Gz 5~@5h]MQ`i 3l6N *J#I_ySH\^,[%ɧWJrR c!T8A_Z@s22@dn9A# : &2D5:jCLdz0y c>{`}|?/*:r,S!dFm\L3P:F2h 9H~x(6Fʹ8(!IPY՘YymV%J®vct kcrhR#*S3֤*UPI*fV*ń`ˆ,cjf6(Kn|0> D ֺp^ڻI xAj%0 l5}ܨ1DctJкXHX ز!!H:ޝ)vb#4m#(;c:JmplR:?XD]yJ֣̥* .E)vl0@ǿ ݦxac%'FjeU*^WHbHz7kj MWaO&Y?}ev3˔p6šYNUll:¦d-v5ǝ7򃙏@khQ#L1xN%XPyDx Ta }AfgA[ @03 $ Y’H>^FJ#b&cIFUp3wm&]ھzXQ\S.ypcTcm()gZU`Tc;^ 'Hn!edoVp=6^[ -=y!Lnt̙& U!& 1s؃?ӛ !>T0(lzULJMQ;QG'`lf OV߶O^u]FiBp ;F"++)VS遷%䝌8aֱO32yK:ohT*Ic"|XIbOpbh +' xqɲ <"15{SR$@'X]5+mA>o搻';mizSS;6 q<cS^X0;6iuEa*N]H!tQ~"/VO <yVy3e4ox:{_.]ֽkc5\bT+[20_ײŒtS 3oFfBM?[ob0_?Y!?2뿚?/1+ ȵg@0/sODvfa%]FmX"mH]s&8E+1hnEӞ:m,NL| o9ңiC*M "XTǯG"crl˕+^%%Rt65ц1P22Z+8oWDƳ`ir)>FJes"Zd`@{{1" ߈=h.'mgiD"w#qHA{[s;D.\'7?п˺l{Hq) 0ns8C$BH2Me"ؕ #_bsiI1lǠcis;ChsCGNSgO^żg|B C(M}ԝN11.^0сw%ˁQ#1`8p5@gvPVayUdܷ AUy`qH1os$t^jߕKO'Tg=|~z-6%ͨ) FnϹla*;Li/!BmA0A\z@6ĽQ 3@O4>6D5Cx"ɡT!{,ݺ,EE23J?yĕ; Wr*hZoNDEnc]DA:X+cii,9_fSu}nlOpY ~$0T1Z7Rڗ,GZOFS}c+#AZKF ڙfǤk(̨ N:]A{f9>촷1;-axw i6:nPEOʑru<L`RoS8A&]b282ԖQxF N-&L#&5JT|̸n`c¡z9$C?&k]rDhBTz5I9f!6ٖ+`3`g^r-x'|A_ 1 N$}Yۖ6v*H v,ԝ,L o81? vӍtg_ 4+ޘ֣i:>ת0^Ǯ'xZbf4I9Ng ++YTi!IJDXLfzyͻb\~4K#a8L iZ%c䄅M4[h[!!&71k7rJ2wsѸb(,4e(6fO.ġ(tC?Β/BŎ'P @AT=FK 2h=ǘbj:`%t $8<4i tњ34bIG^K B[n ԟVǥ'Xh% lCr|aD)f6&Ra1w1#j Jj\(0兔ʸN NĺW`h8fv)G + D-jFnf"ZZZ{~e8.m%iKϞ΍B~<2s מF<eH,?[Ϣ.;GGp\~dW %F @d\5 ޳1x1F@l b kx2.JK1#&=EsW0 6Xj5[7jws]Z뢇D'FN' MZxzGPȈF``N_[cy ̒a@!)A,n`(&ʇ\gx")ÊMQQzs@)FF;H .0 &cWiUp0LCwƸQ~ }xs 8cpoj>QrLކEz0Msh k6<;i(hCc#{1<>Pٚp7ذK aC>p~;Ͷi@ūޞ;]lAs^5`EOf^|ۆEAU ݄. ܍i(/N}2UZ:I'>}}<>9nׇ;F'{Mwئ;i7h0;:uA ̓FurāC֡ΙaqݨoKVhmŠKXLX2_ux|8n`Clm(5Xy !t{BsM;!ο,p殪KyvSo>(&D߾0WDf<-fp}lI3jKr\}eeW(>4 F2V5~{^U}GwwɳUnPUKm|OewwWћ5]'j֩է;v] S =Foxx_m2\o௟`p׻{6a]g4/.u}~nPwzϨhTWvTvXOxZOjlW󖡱ӮgZhOЪ>xN;C߿~J;a/Y}6wW}@*JթvhszFʩG0Tb}lgbsۨٮ Ytʛk# szɕ\(},8ky)Jߔkԁ _CTmq|ިOS+N=2q&tǪ?ND@…uz+$W)`fgW? qREbKS+}?W("p#oMLn瘤]D6;lya2Ò ɄZnom[0T|[XSlmo¸X@j};[r鹿sG&H? P^Ox p٧g1*m',; BRHU6]bIa.%6Q  .҅iTbST^sMU)|Zթ>E(jIJkX??Qĝu?mιSWiΎzhM|zsGa#ܣ.3 s-/|V>YUՓRzrXrgZO^ܧ$/EI!/ICU>A=Ս+ wTgOЊ3USZ8 >xPͷث+,Ԧ@\֛P, jtFH O1-~9FYc?ϰlNJQ T!`u0ۤ< Cp1N^\]]G8:_#^yY+̃BB!T`>숦[~6}>Ϟ?IkOR׳ 5-,dz,va뎟B!2 RIע-hBb1{85Dg"L7Qї!gNg5t]+ ;bzt.ԯ%;1 59$e.# +scr#|C[!9vdcA5bKyMa¿!#S~Q 1( Dee& { *$Ũ az[a`Q_(V׾$ >3)%or7x;|5'(3-|ƌ20a#HGD@"gtvp5PUUcg k7;cf35ULb:n8 gJ8Ӛܐ>0DWzSZ$?/ 5A*ƺ=mtpߊd_'S^pgZ뎫կ tΫ>ONg1[jv^T5m__GQHA!9<:$IG2ތoFٲZ{V[}j'/z\ n jN6GwӜBNqQo` G3n77I0^S~|F&UUE.XU~S2R4md Uzg1܊*m;e`W,V+jJD}ofCSU4g&뎖2$g}fˉaH!Jrq2T+śW*<( &cYMJ]!H0Hݦ.C.E xP 7{FT\agMU+~dƃۜCF(#(,썣@>b,Yb% eޠk2;] 'T,D2V!+ t#1 LX^ffT3&l?Z# w^Trqu#Y9^.d!'mw2CZRp EHT `,H">NSH6ꚾ"CKYV"cM%HIeiا0HpB#QϘѦ+J}*i-5M`wA.+77͟2?o _uڨv#KZKqL(4[I @U/SaQ)s˭ħ 3 3>iFO;8Pf,^q {ߊ= \FLVɽi t3X9ֵ;Qʶe k~z$M w@fc٠7-럟w$M_;[_jWFݖh_L!\֓/zENF=W# lP$U"8S3ȫv<֭%!a=gVp(շ+TfS;Q 6MSb= ͞3 ' K\őWLɯ T##@<;S0/})0E0wDP*E U2zDG/#b*)A,1BAl%i<0tpWG=Y4YH˂}8ԯZ3%r"j)*feOf p6" Ma9gN$^_t^72㈶g,T~;S tӰgVH=Ĺ׼#X&M 3Ժ% 5ILeɢ.h8&']U|{o]>\JNc mzl߰LoDC2I7fhui 'ƍ)orf# ^RxhPnVNFd$щ>xU*Ø)u>*ƌ (04)4K;sg!|edAUZxb8Q"nf]ls=;0gQoa%ΐTP' ܭe@INjз'' orB#ͧk"ڀHUU}m4J^&-t+{OqmWFxsMHedx€@b-\ |` "Fqg@FhKVzw3D9m"G`^!фƚ4[:nEHݓ8~ &|>h\Vo_/H mz&{?(. m}>&x1~ w8 wݣ~X0!c tȭ|^C/r 8|eB>B~~Ç_(/n 7|ebQ( ȦWCU(pz~S#:oV傠o) (vZMXNsT?~_r}\R{Qk\h>FX(8ο~Leɏ_]uUT{[zHo^\YVe|t%/w{oGXiLTegʮ2^%DVDqJ71 w(ת<#Wh7)ljKp/NKfKG1&&zsr]IX<.+R^PIEwJ/K p-]j3Wu:kjHn)TuLo