#!/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=d0a644173a50b4e653f5922893e90ae1 # 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 -*b;NFW7cӄ} daZq6&@0wFcf\^ 63o / @h0ƥ1Q^FR>kZܘ qtUw<1zAw̮㫑3\0{qwXpOW3<ǸVٙxv:.F[c7=O= 8hJ4aGM[B50de6H8t_"@szfNtѨO76D#*K 糩iDWc4la]'2a}4AH :6I1R(ER@ޤ8 VB򽲡~10.aOlz 0qAK+S8`u^f6+3Ym r80iH!>I“(4^)h؉UyL̛7h:9Ǖs4{cjbf94&pN>} 0Hk/\%4XZ9R+S?i[/*j6]>SFSِOlꐚabU1ybN*fqz:y?_W}x?)?B'w?dw?nlwo?u`Z׾Ebn|Y(s߃3v݋y`՚ŵ}}[۞;-av[6-16f3Fa੃̀{Zij|A(< ld;okQ7W=|d`pl܇ slMA:^Xf^|9Mh ٛFAuOˮ3;=eZ-;h!Tbn\l[lq>ف|F3jWJy,lᡲX>1l1vs3iP##ΧsJ/o!1BIҶ@j$Z}b`]_ZJHRiaMEYՇ,<1EV&R숏gg < 29 WPSkq:אy-Ge&͆`]`T'Y &U+y <];m"ǒ؊U\D55AM-RbߖťnЄkm m"'D{/"n ԓT8EBvtc[Enӹzw3!_|_1Y%$/ll'"s M;`Q a֭vz2)< UGb\t%YϛjFYK;]y娯8:3&ƟMDh(g .W>i嘉@@ĘOeqXש%_C/ h5FFZ'CxU͊D*MN5@eF-f>{41\ˆ2F=XZDCS݀Ilb'ڥ^;7PuS؉][" >#a-f2`c ;ΤL)Hc1>vqaxWL7aCt5q52/(!ᾧ =bYRElH0ǂ- z0Ҥ> zl9l|x(Xr0NiXgz2oow@/'٪ N `ހ0[Z8rڹQWؑ5W]@!Jp!kUN,T ѕI-GC٩ g3PGy#YkF.=y(L.e}kV|6`uN];ҠHKVn4dxvh bD6pSE`b[}m6g ؘoEп轖L|ԞIi,j~`?l5!]ֻ2{XMB%y*玀~Q #8$bAza  GXGP k=eHCQorsSXb?-x~̏ zN{i{@G=e‚K&VVI[Gy< BՈ:Ic֦EKX蹨o$ PmG((HGaUK4 p'rfŕꄙoʤl{w3 !_^s o01RC<߯>qE. (΂-9\Tՙ0\4K [^gC,yR]v}a@," \GQ~䝭 }2sZVf f# &d,ۡ6 Db^W-\H-=ے;K;V7r+GH:",t}J(/FP!h4q& ϗ!RE/C*2;%N֯ƭ-'Mj{+u6~~!좰5 O,ϟw3 L f[-QZ(HSg_״ SO,,-/0L1|]lx%ۙ359V+2=Ro$U+V]ʿ}c־&[%-=BZ7uvPP5kG-Qтev-Lm)󽈷!1vsc.F7piC-]RBrٮ:u`K4xSrXcYWB-|gVԲf hb`JE+m'{`[,{4@x10?wtC|b6,,v(y1'Wqs})Dm:r \05`wW^9W#Xi.F]I!,Nءkl -'.,!*tJ\tovsGcļ ̹p Rh<6,+$ϫY{-)USK7V֐̙y1Hf쵒P^eRS8TRpatq6pA0Z26D^%{fڔ W4h>^1 S_C,-bq&,o-d}iRD%,x9v tr2tf}RT8;Dp*@eI2qAÃ8DʎE~ \YHno5ýJ犩B$%??u_a)*w.\al9^Kj{'x>E3/W_ش.y/P] I.`QrB YI5$E '|> kaz0o,Տ)|1k5lW8X" }Q/$QJi#VhX7'ļ1ENFJRE~xhl*t7tAZI !9O+W,MY/>zDW߼ξBchGM_:O/7U ô`鋡WwUR$/g /FS3u+lp3ȲUP%HiV\%6^N{Uom&zmp;X %@DN~~,ٯ2-NJKBF#RDGD˻&1xt] LTyMܞĸsDy!?5$ҕ".'F:a N鐓P1 K.;yfsw r,cIf6Z8kgƅhO]^0%^; ۅ W\_f))uQ~T`.) ն[To&#PBV׼*yMFMV˗AG/lHl(N|Jw^s]ܛbe(AP1 xXFdMRkkji20Tܼ;%]L ?`.7 =r$@0xk1vsGRJby(F `nc@a߃ÂNzҿCPb -` l ;Kg]T :F<ژ+Ƴn@DI>8t,Dt D3?]$;Ε.£szOk.^G:d ng~iʶw G_[QssmMjjuFl'52-d-^Q_u2F xH+Е8f-4+*h[$ IQi"! mN %e?8 $I0U&@e~VЋxKtLgL$}ET2<ĉuKTJXǫ1? EA VwÃf}bLj lAm #xsz : 7UJ? ~|'jo4ٝ ^=zyM'ωm,$0Nd mL ^yLATE|hGAi:в ;(޾ }68 Qtr%ZFi1~gۆjh{f1X̽Hz:a8xKAx3Ż\7>ovoξO_cW\W?*d  ֟w-,g#s`rzI.-mEe"5KIU'/J^i67#,B[5+ӟP %=G~ +UaK:1 5, zHM@F?6 -mjU{&@:sX+WV)z}:=h%T7sd *hnYޤb37S_q6 |oFWs@ XH": &#O^ʠC+<+$-LvCRUZz ~pU!+)9p3,zSIJFbQi>쥬0 AAa鹖'ThuL$6AԽr~?+ݹɔTP3>#tb/Y~aF w%Q7dm:.q70\ܫyC׌¤OWn&y8 "z!p]%f&eEqZN0#|^~4"u+BEjTL`kW}g"ӡ77w*ҪJҺeO9p'۱Q0wE>=g)΁!v>=Ƿ@; @wǓX ˤ3rr󟎗Yn ;;A!5v43;a~zӫAb~ _KUc0,?<=s2n^)"@h/ :WqomVKn%# @;-qﵚΫN' 9o*y!Į,wQx 6 .64ɫPFC̷l0z~#}ՅIOK!K[[zou ȣuR_xN&Lkm9 mS_:LGѿ9/Ư@I]y'psTe1t3 q=7?  m'kO6d/("j9dBglCaQȓώi)yK\#O+®9CJgXƻ1 2=>m3L:vi;V?0;0t 4S;*ucIYce QT:$A5ЌTJ s= slSZP(^6f FӃBteA'XL9%甭Ck,4AG'֊Qxbՠg aY+B]ASƵfRO7Kű&(5iECvf6Tr A hk@Цh,cFJӄ3&ǩ:Ȫ);D =w)dcR= %j꒱^q;b1(N0TW/ IaM &16ak׊~hCq3|&_;sfzFq?RpfIG\Nqχ8dھƁX3`:*4l 'oZɼ@Iܠ &U  7:=C/MǢciq 9jM1:P:!x_ A '*ij34~FZFRԼ=, tav!;;YچR,N=#fߌ@: nFW()$}F3+SK,h9Б˷7l`NQ!E3<c]y@wԢo' F]HwԟX)!I+mi8D.VgsD#x.r_bD͊@r1~X*v<; ЛE]_$sTu'Eok]<)rMv:tPM|δ TYxx'ms0G'MD{lύLbi8;(xC7"ꜗHq2"`ĹHFzQM18lmou#Z\D7rs3 uMp;D,2pb5ЁKy]yzsUH _ќl'#u& aU= >5 C;^h}͕n2^X;/t,9i۞flLC祑WiߘutrhŒ=ۙx6 Y>=~BF/ɑFc$R)0LcSC 'mrn7sFΓLҏ6uدF/ytr1XN=n`QNns n MPeهx`5 lG-xk(3 nMSN0vK0:Ru2A-fa4ՀtjІ>wBs[,X2nגiN8KL&dz]D#VS[1LE˕)9ca3AvAY;Cgsk$@,M]Ec&\ f`p&J; 7A3?KOyf#s֞&WQ2j~:tk.a%N.~k7tLB:k"t[`SirM"O9%Hf,Xp~d7 HH1q$_spw֨DN@xjHvZȅtjq'G4(д!{:O&3Ws35ƕ| U͹)kh~[=N]n{{_Trd 5{99+VY_y =ꍪ`)EZ}tAIǻ.hƕܛTPWD6`HbsNj$In~+sH;rbQIuh-,)^EzijD+vLSERCA4|7¹h" ˹yc{ZK)7(ۤmzZ%iMfn,jfK|Yr'UYo>ؠmk/ ~dړ;߯Z(z$۳6]rOT6K]O{8ܻ{CǠx`Fg8Jx&:K /#mށԛ2͒>-i~91`UHf!G"> aDQo06zdT $m{Q0.^Vc1 ,;=i|DЋVYR/3"LP7jD$L$Kc">o4_Bw̓^1h sC҂4P2 Zk)}džKhV'nsƖTV o&Y͏0?;^d͏K5 $#[Cqߦ*&|ɺ<>нZ)^A~n(rflA"(T*DHS)u$zD ?)CIK"$H]A s^M'QbF2t">j9x99.f#$p6SNGM}x&QQۄiC{8f3LV_+Xo;4%&HkD 5)8I8*2]1vxx~{>$`l$[Gnw232K7`#?b1Xat)[UkW&wAP0+3Plge8pwiXL~Hp`Db%O8}:1{1ܭ  {\9&f883:E7rn|ZOw;TRC~, lgwxm٩&1@}RcsN $kl1˥=41vx60q1<y lgQV#΅p8x)8@EC|Sb7x3pLa"P r*q<=.FJqͩ:p`>nwi抲d &+‚G+;Ě"Ҁn  *81ClR›a?a ि-R}bnL0s\섬b.)☐xvq7 f-D)T5@vή#3- t-Ϡ:|">&ow1ǃ-p$NY aNt+ !0&UwQ~mлXq֐\mja.G@1FPᥴ E.ZuKt4iE8ZBݲ\{ZBP(/kʬjOc$+=u u(|bTH92~CJgPq1iȻQ7fcPQ46oFa}*lW}<:NVu}6h|{?ݎE6sŖ̘fk 1t+LV|%+ʖEmᖄ7,9 qH@Y]~Vs9oVGsG(UN. [´y4ƨ|A@,e.=r=`"42}]|'`Lnx;xuR#jiYĕ$;g16K-YvX+ǔ+p̀tCWYE7r#=&5 6\$;t)N$0EF{.U-y|,qP.)Q2Qw ?LPcňO1%^fNK$Իsmdm ^H'-*=`mW4p mR;qióαPe0a2>p5,9s8ogBcϷ,SW=̶Cx}ۉE¥Gc:jTKX 3Qjس4dsU7MvߩÑ&1ʘiYz@<9 nYXt81k'BTC+~y+%5>0t!BEv{!/ '+nSlEMn<Ti4 䙲㛉 EDQSwt_tǩWSK]<&iJNb Grȵ| 0;l @ȭyC( y6=b<)r,=( P~zfF}>7Z $Hʢ%񹿈9LۚfMDPT,VOڋBcVCyt)+B\.*sb\w@xwxP\9Yk]ȠD,u\D)CmK9I"M71|(Q8b/|Y|qpohkXK6g_ 4 m$]2b cCC )ݭ-&YiHV.l.54# G0A C'h96[#0\I,k:~|I)o!9dG/s׹Hqץ0*H8Z+ h)#JllQi.kdbi6Yl8è~,#0''FVҋ#^坝duzAK*#t~骯MxWm1UG[yDed}?j "'sĺ} Ǎdg M3nIɫbR)k Emo"Gm=^7RdG0&`-аĵ ~s)۝M.y0CgGy-ŞJO+::J20CmɸŖwd8@/ цh|  D''ɍMJ.&'1  Xp:s.߽6d=>c#.s+G |@ZjB3&\9AqxDŽш90{Q/dW ?֎6sG{)c>̀ }a)GЅ~P= p=:!V41NAWu==.Q|"V`.EjHVN酖؎a8⌟-C?6wn+P[fQ,P >'E݅O\h,t4Y@>cG{cfdr4qM3nvv-= <`%Bȓߡ tNw^E"os":ݳP1|1/CY_N^{; { GE:S`VZrC+mlxP'gRhSNN9V$!;FNuf 點*~Cq/g"p X&kB:˧!}|`7xulhܥEA\((k _(UTFS ^ uj0HW1bLu?:>P!g$SKcLO̥2Wyr1`h~ue31ӭ&aj=sR/ ''4N^wck 'pJ''N3hĢ'uvv҉pФw/:n?YK?w_S} H.E$Pfb SAʓ؆Bq"+ #H_p"djWh72Q)XY&w7m^>L0YH|Oeg4[H"(GYVkߏwЇV#=,ڹrz NLb{FqXUσiTՀ^/&j\F]UNoA ܹF Ê2唄MI$1orU-FFf7y{f`R1zKQ'>D˸gni)cY#@&wL`0I7F#I;DMOMm;Jlk1/xNq:KAL?556Wih&אqnV^I"w8Z< f/}NxsXel%!{HZ@'a^J,m}[\%\oV!,@v.8ιsI{ffQT Ed3jJo Dk{bN!?!Xw1d|NŹ@+Є%?k+?o+NY8nRn.mKz?A_ ]| m 0"vXp~ZWŒz{ 1晗*{wBEu< ʍ-(ǽwԊ.rgGPXQy eAaςʁF gXtWp0N*.;7f;VTs3|:.|~ 8k" U̦9z[ MR$&(-va^k5/w23\E _MI2s4{ XL~<VV0FK%z5~0%ؒ"!,uDVQLϘ@J^0pĮ@ l+^ mORR\fzj$Dq05|cžnn9#f@!Q\zk]~2A@[ TDHW}ߎS]oo`H¸ ʒ춣Y:y6GZ7 Օ",VM2H;1oL\E?{o@UHUukjyhb)`$EJ89D9\^ jeLS5]P8j+rre X &*F;M2ǻ j6DoxP.)r P*G1*JXt(yS1 @1."$%!JH,$~+fI5ZAT ^FY}/Aǝ~cvWȻק˦z\EM|0 :>P2a24YyGW)'283"4*B )wEcbbP\t'Zx]XhIqK'|erg2gRI2T% 6GhZvuOssjn7^6Mju Ge,fyR~uVa)]Nx|vllx nuݵ'>'NC'mpX& {ĀƇlPt7V"/p"XzjՖiπ<'dt\ ba 9* E;Z+ᇰ c}B0TR$/a#G4A u;" OBY5>Bh4ZԧF>=hX@%c{h]N݊& d<puwn*\9j3XV[>=W'Ckk0Ux-S 4ǻȸf]X@@YdzF MbCXX 0P×񻿠yX Ogp 񳠷luq=?NQYKOFA@z%(՘c@4Εr]7hۛENqf/߅jc%nK`esד.d.4C=dva{ 4'Dq;zLbI4r({w 28VXQ/fhtzU 7udx\[j?kYAVbmm^j+beW?{VRZU6j+W˝__vzr|Wr> X,0ꏳFp"+U/DS}6<s>dG>`܎B` |ſj _l5^Ku|yKo7-7~>iJM|wʿG?g?s:#دDwApAXZTzJ XèLFxq%A& 0 F], ֣vIn$ %l 'a7/)!nf.|.c(}]@$KҘCb,V!cҪ\M$j)r\@oK#e 0JHz~8Q3a-#԰ef1'Sb@puaUpLzt+l&Cl(#R] ;!(_dj$T40(tCk}$Q=Υ\瘬 X\kEWar iI,4y&V#9%/ q/ B9)Lp@ $Ya-t5![ gz\l *PDmljwEPDEk>:Mv_X]Ph TMIa?* R-"SVJNvP{8C`FRD.\f.NӢEc78fp 5ʼnfb%nʛ*/šQb9p_xbH^ހ ȍA'a!LNw2U.NV5q2c\~~ǺD=.pN޽QGN]x9%.cپHh|ʙ

"i0lvRpÐRuw!|I)Dʨ.8Y>|%jg%~bK+M&x4s 8ȶb>sFj<#QCљ lgzVHu,(qMJ#@#Я['z[Ⳬ`Mm:fN-&?@t=&'*-L4MhU7ulj0ͷuur>P@<(4Nid O..ㄹ%gꁀJyq*Ju[H&BA7z*֟-=Oд7 E3K/u,fs>;~Eq~K%0z3qP(2m;-nH8s9hP%(R*TCqF1XVڤԝTV\%:C)BY&fd:`2:X09|/v p*4TB-¼l6}мɉ$mRC1=dP/N}'>TnHqAw]BɆ2͢:,]KgŸ`1G{ t0e!qz7V;8FуJ,~THAVlaQXC @},9Z ]q N<LuHƄ-= n4=vcNſYљ gDBΏwF;`j[ `QcO]ma|VSVdEVT? (hfONZf.?jܮnԛ4n\ݚ-Xk8d5{2hӅH Y]f^\7t`ٔ| fޢ,jU v;~TNC(%17DU=n&h+:L\;6ⷿ1ycyxX݅QYX4YeR0:a\A?@xm5x|U>ݟw#j702o;6b%hGuuR"p4Dy'GI}g:Wy@V{T. X%X '~q*KmcnOnl jkL䗳 f3jׇ꨽\0/.7FEniP<&]~/p^Aр U(n Y]x㌊Y-DOo0rCtH J!S_9!ѫZƴB "t1Ox0cYTDŽg.عvNJT$?4F@bK7.TbE|>'XAjJˈM,Hj(k \,"HWCnƾ\)8_Dpc` V{ WрH^#WxZ}l2иʤw^s|ٽCG]憓A<%11iEhzyD*ͅůo"`8-Jj8qm|p5ՀuAd]M ckڀ^?p$jWUc_=$N6J5?m?Zt]~BG0Lx,U=E& y'VF~Jl=E"iR")&y઴&˯?Rp.mLPll&T:"p}Fvv]Ab6)7](I'P{aqppyT*sT|IP-EM@FϢ.vюp Yӓ LQ4t ' HD3Ʀ6H|ij + n5^ 6(}>MU%^c]gbB>F|yr؄g ѧӷVtF P [íאmAV܎Zl@Cƃ-Wp%6]%N&2cC;;@fDeBG^mEQ|~dz LX OE. ;O(:tᳪ4."`:wd̸+#*ZBy;.“n+֜VY*lvT ! |^{8 ialD@Y!Aô'd!h"3:XUmOj/a B)+-`֍Jm F49)M : :@Iԇ$} zn.>jKyv Y**^ڸfwaNȠ>_ `e!=Exv\9ꍶBPئ3 06t@~[`>M}v:6(5&aQuA@K|SU ă @c'̤44Und nBPz}q!w4'|j/_p?p Ax'q*:='x<L1Omt"q Y<썣@g(/\3~~zJ.'U,shLzdxC%xji6D[PE˜S9e塍9Jt&DtD IҝdQkHBCJc^mD,@ˮC-UM_.xfl&|)<t 984\X= I3%'b+Jh+u9 .!硋 m-sXDEMC3t yXbP{>WV߿ke|,YsG3CBpz=o;ci4Lh:˄W4KTf{OW#T0M9t!Ebaha5DV(Xe#$r"[D F$[ƲrƵ;QʍSS |NG+!.GΈ3' cT[C(\e/ySbtgSHc08*2eU-p~Cva9(sփU "-wb͏|#i;"2˟m  CQ-FkYD-'׻]<Y#aE$h"4"FFI=6fXAs50fBj=$P:FUdM |AƘqTdOg8~GD 5Z 1`/T[Bew0RTX3ox*4) Cb(Ipڨ糩Ř„hjzOCASox( ;Yf ф mBK0g_,;Hmŕa (ϰ{2$R腸+j("F/Alr7Fq`sYOQ-U)܊՚܌譗~#) d}ϜODIé4MTY'.wk}Gb;H/daϵq*mE<~B܃`]:v&t,_ʼnkiْH[¡C&9pk| a:&PxCaHV S7{ 0;~{Hs5y{`O {~ Aڥf1)gs|U.e0&sMlTHoZc@Z. ˨HЭsE5S%92$jH2VT]ӞK휜H(>A3PŪKQT6 lni"Kz;~tqf7DŽdFJfZ)Ch)`F$n?jTPGQO_HfuՍjIB#{)V]:D⸺=AFUy^['SYԟ$Uf~?&lT7*='TՔuShLL5yi_6 F}`R¢ӆu.UZ]LMkOtxOiڳ%jJ~[~Mh~ٚ65hM{[mk)L֔5ں!+r%8Sנd񤶾||5/v0MP؎0Qz F!͂ĘMʄAn:̬qxSd$JzXJ/Ich΃vӬc8}z?AݣÓѾ օScx例19 t6(jP@*򞟇C,^`yX ~g@3E;Iп7uq`N>O^t)Єx`Zܨm2r6iXT"Y`~$ӎR,Z޽Ƌa>nlB%0Eޑzܱ "X| aSdw@x8Uo`kD4 $[/ ςmsvĨE\ eCehq0(!PH"dyuE:1{rŋ(uX +s<)P&q1H#rAHHnb%4Y(**0 jT1#,}6"#f`X(}Kdʡ-la&N¸d 5OEcVQanBln"oYX(U9]L榠S8@h-D5 !N eG{ICDJ}%* ʰTǀ$zxјo8u2O; Mg#Zh exhǥ%Jhdt*)A8:\E+P9DltVSRG%"K;7r}I݉“X@%,9 peY1<;ռ?SU4ƍTx3p*, "e/tݻq·P1HhQ^ da@fg"y4$ЏdejXR|XV|-AnA wAa#ֶ)Wx),'?Nxۙ)]$bBfBؖ)6( ׅA(<i->hd37hh tNu8n2X%⨤)`DăT ,hz%I2Mhs"Dru<(F< 'r a[Vɋa8 l&aq& ex1 &M;ҵ t1B eG i踪C?wgRL`u'3L+[%CA,aA~ ( I[Ǧ%e@ zRo<ނK|z|j`®2 !>L_d믪U9>Sbd GJeao̾{@dr-P<o3ʺ mT gC;Jcgg[ `yP c ._J k6tG*ead^I]krv2uhyN`|f>T;WoLS)!0_4p+QIUEKts6ɕ% T3̢>rɎ'Nc{KC@%n2`kiUA[\9'$Gz 4%``*(Z!S(y읷I'}H;gțSd/Ia*8vI0JyY$bŲΟз;Gq6xL%:q(m~ ۴u%΢ A&sxf@vBC?v|L7~> t~s@NH)[Pl ӍW\ɞˍG|,#` sDYlqE2_%º.}2S4^-oTGqIْ|,cP$sۧ{Kl,XCG<_q;>^ `ΙsgݺPtKH:t˂1egzV XlWcϐJ9vɚi-4ib89ԴhﻃQ:Lr1F,H;"iBYJb'ՙxnӭXC'7IrcFa$~GN*lu/Hydf989+Dmԕؽ!2lE>YkԊSՖ&X -ފ&,B4.;VǨ  AX,:?wмuEx KShzo=x $yQy2].UcX gKc YX&KYKf,j&))}-ʿg gg@ !l)*mDڑz[؇.6Ν#iW'³G,g'I8t-7K ^'xD1]to<0@bVOONlTܮʂ G9w]@6> Nv Rqc4Ěcrv@KasёδH-i׆3<0ߖ{Kj+#9cXttBwrO*p&CnL%gYl1dy.yAdee; 5lV(#u(BJ*{oO"Kʌ{e6?~$\J^\gtϫr.sYv&b6hF3 6nAdR[t4`<|=J/deƬE' ?8Hi -/\N [ Lԣi uɂ/n{#f -5IAr˭w#S9$;Fpî5&[]Zt]b'g#V}+h"gڨG;G{Cn4t-9yM@%s[H#fz2 Gn@,&[ 5PG|XgBTtU+foc^a!-b;cX֨ʬJM_Rqh䉓FoYQh;;AhhCGeiL6ܔ.BHDVЯan;VYRzT r8!RMߝ̪Ru"")!㷌 Bg+bwu20 hPH ps4JWW3uC#GM5/ bO>L Xt 5&P,+{lmZtKI4ㅭID )ݛGeINƃ~\ }_F OK[T4T122;z:,|=UEi}Q=śxqs-f^3˔ٱAV۸ݹ/燊+Bmb%4껞*~CrRAF\ge*̳ E*Bt#ӪuaO!v:W][BDyP? I/NE -]3hahD&~y\tY3oWC"TUǞލ`ۖnF7A#=0;sE I CvByQ&h\%}5sUTf*g!qL 5:5x/#g|NWѕf s<#dأQ۝&=;g$r{nǒO~#ntOO:/ݼ?9t^;tGp&@Št)CBZI>{R4->yaučZUAK58V=5Z i\'fQ OV~&L|3EW|:zeK^wVZQW+ _ZF:S̱[asYt[s_VO~]d1yFQ7HA)~i]p-yRKuݿsG? \Q c&#}מl_ј19t+#ᗫc1gmqj7W~ZSi:F%yy1T@d%AI>xqÃZX`NfKgg!urd\xp4nIPf%6";i;X4D@8shq"a LI9Z)x =6 Ѯ7m5' k>L[XCYcu.(Y,lӘ[24u-Lw:z$32 ~Ѫ -A՗TB! L\RQw+'ufVp әmn 6-2Sy^4Q";#;KZB r+|D) gi20𫔗Q=s/l+hnŏ/;ȳk PPōȜ>;zM|7;n~JojEMi)63VAjv&%f|eu{p}SnꗍrS9KTlg{[[ Kumy:lSM\up(pu> =|'S "zX`Xt*PV'8 =_#o(8fIY> d&r! 38SӊchSvN$rLјp_VÁ=Q8T\f[ @0gqj.,iURqxh OX& i@dQ_(6zNWOg&IROq6Te5'(-'Ch*oXI.\αY̾̋=CKƐRttPOqƶs+ ?bGU؝-.ޣh6*~ɳILNw yy7l(a0 BE$m*6c0ҧ2lEE]E!QDA h큦cd+9]_3k6UrQf Μ2ݱJi}V;+50$x:(\ ǦdNOj}C"-i ^vVfY1 [{MN/HӖ4 9A\|bR2r):e?M4짜ق$i~lFQe4 <TC E}:u\0,2lҍxNeGF]1Z3d=c//ە jsXQ(!Fn՘kirK8q4!xdHG"d4%.},_.)N/a0ڼXd*+sj=M\2I\(.9M_BVWA6\d4uF?uNh:ŗn_V#K0R$v!e)*"O,,p13>8crq9֪X`X,u  #a}-kY}\ǶV2Qa\QG#nlu\?vJГ^8% l,C&C-3>=2EBb x,\\]Db5KKV/X^q ba@a$1)39;ɒe1{^Ufij~?Yֱo$7U;qUcou#,ĉy π\z?I}~RsM fUtu#SAǜ@'E$Bâ^@o,qlsHX4_4 y|K}tm쬩AR1~K{zU >^?5]=`G:G{o ^`W=9sÑԘ|Vz$|"*]U'c0ye<}?20upo Q].}fco+_CdnE"MkӉBc!4ILh<(X h?ۭO41PxwTkF@e F@z3up(qw=z%AqP ``/=ۉJ~EHwEmxhl*nqsK,tz*Y+Qlg7pQz9'UJ);mWͶj8ySo5|'=kN^5/W'^V=EHr'G`ކ+y|Q?VFyp߄ޠI.&*/K [D_.B:0;zʷ+żoi>jNcVƮ>O^@brz g}~$;e~} g]1ti^Hʾ;D{7J@*ʽU>__H`R>+MevOc%UPЩG]:#4 &j}#me^sbY}?U ]}+E:EҫVxRg9-sk/Jge4Zrmb,J#ƳI/d[It>z`矄6+1nw@/Q>=";_5 r(QIjy ;Ko|Gρ9 MCq}ˈ<l-L$34Y蛿] `kV1=Faiu~Ҭ%l;py@nĐ("yenͅ+G!¹)iD0pA뫳oJH4;!NHD)C 3~[背0+(DB#{ꭴ^^8>q@C7 ʧ>2)aC96Mnю|Z~ic-G#MrȝOΙ+? "3D 3D4 [,zC+^Ɍ?.wdzLBPL_V$'yxG$L-3 0G#Z:/Y~*? XBnygyy'b=5CK Be܃,񩉅mjmr|D]{+DIPfOr_?Wk)ύͻR+Jz,JfAU.ϧ4;dd6rs}>ws}>ws}>ws}>ws}>wLYX