#!/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=c0780a23841fc17f2f85ebe61f8f0d0c # 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 :_=ks8Uέe,;%f,HN.bQ$dB:r ov㹭bh Bs6 ٿ0?ҕӁg8vaw8t:ޠ}3xads;d9kK?<~Fա|gK<^d{x%?~ ⓱O7fڋۿ}\D1j^݃ŋ `6\0А4rKvqv(p[$gq<`''!~}Y9"f@Ɇk'M6!1#?95|vSHۚFnj-B^X y|`@^oI!!#Ǣ-pB>Dekw03A-0D}k^dƃCK@fDtTlQ 8=sM)' R#x'Kz6h3ڏ(kcXV2nF]4\+f>٥24d4Ss&cYՈ4۩*' }j/}š;"JDt_"k-LGX ә8&ʅ>k1dvJ.dut_eSE"ә x$2T]-&J u>dm4 y*/Nsi2 hfWSYEN&2cU(Si '-A'2H$Z& l<B/qP8tE_29L㚬^*#YLfSBK8 |>Yh Ӟ2eU]ue6m`_vO :gSٌ~xpk!H;__" ?9?3ْ,}?;ݽdjK_Ks<6ݛ8BԋCc8Oz+{kJw{}ha9:y5,VQ6ܫ'cWʳ iva=[ VAGQ𳋬GoVbpأvMXuH~HKKͥ3ٸ%mǵ jۀh%@q!2IHkK= EV^tUr$ ezH u?'A LA4ȿWf#IK1ReI?5x}HgE(ZW ϼP3͝(Xn%ZӶnTwګxN&놤z]*W idIMSY̌sM#(/yî=?4f0kahHh,j7hXj'fJJ-6p8!G(bV:ZXpd-pw_1dП4[7r6.߲; /cZ+LOg)OkƯE% h-##`#LT_:W.xU|gl&zXAg߹+4i7c0 I=&WyL*XX5'7gcRgl8*%pD,DŽwݰܽ>aBdfB0_KTav)ƨh1 yy?~Zn 'X(07^p\K7{SmMXV ?0;ەe|@ye!ī6=/ɫ)O$V[.ȉv QJOT=;$\kOhrΒ1{rQyNdp[ t^^C= o! ^ kQ l縦"ais'w C@zrA>=8:ԣǙypo,#B -ZHi:'(:he]CEoȞ|*-&:@`ֵ0tAk=<<Hni6\+ vOaɾkk|`/pXⶣÛwlbTAIӃbMvg;+땊Jg5Gm|& {ݗx^K#xY/Cêt{qn^*Ø~*KB1k1pH ;5EQw'nBmIyk(la:tz%:ݘNNJІJKn7 aܳX9[ T)ժݟ*h2zR 02 M5C<y8M~w.i:턪F)>G'uOK;OO;&;F~R,K}?Cw/=^QKϗs]G{6B~7 .-҉(h2@lN<:ߺ6^7Il\ӂ7PϞI::Ϟ=W>{A ej+ƥ mqbLd+T0#:KL<ۑf-7"tcOgw&q#1 -Du3D%Hrq)nӨ W`G&Okg'،x'5t=-6ۥX#'Oiժ'%^He+@8#[omMz V-'o(4$wU8h 8t-P5Es';je7vi`#.ܚc.]v &Rl;1O@3G~J=.$|dh8iqG#gTi!.a% J  C7 TzLfo[+KƋB34?e?GcVH]F´:K5XR4M"+]#?`w9? O74\Ã`oY[Ha6qB.7ə:n&9sE S׍/b3-(6BOv1_xAO48A% |8ؓ{{+G1|޸ B+Du`nn !1\/Fl3э8'l[*D>gY˯>n暒q\kv Ӟ8Acʇ`X&◢5eld2J8ʢsB庲 =RG ,>h $?]!៤UW@icPk:E!zה3߭5@wJMs0"D됲;ގ:Hv.{&uTqEUwuIB̕)ܕ4%C`/!iҼärELɝAz_k -R( VUY<|lcL+ %Aqfӻ;k] u?B'CDB:VkL>d:}V|D&=YnW+^3SD'օkj[E%M.)m^A;G~7#TtT):g vG (z 2T?xI#2o2ŷT G}0p 2jzG-~ (#$gҘ\W`u7,Fܥ{aD7 P,| Eg0 54e{-.".^nkyBU4"gYY@;;t "[24aص|JItVFA}$%5 D|I_>a!mbOGI;M7=JCaxФ6cR tp;f@OfUB\#4ۨ .,8KkTłk>LUNݒZ>yq|!K[+V8{uNN)xI{ea3fAg@4; ^>fH*Mb7eu_B2սgYC(8۬k2^4D>xhLx5Yib)E0S8q7{8u&1Gs':e*~IL#̷_y2יr2(c7)T s.q R&-,'42qc;oC$bL^lXFZ%UGqpg3$,Cd ʲYsG 0h܉bKO yV"A|޺f RBKi'U@/85/h,쏲Zŗz;`R*wʩTMAA-<fC$YcI8Ovlr!x>1 c18ZV^IQm(1.3I8|HbjI(<@ZFpR+m$6~%%Mb*eS$?L:࠹*px] ~)UAR+YVc]zhUN{+{彣QNs>$T5]V"b#]@#3.Deѻ [<!DL%kIH"M9&OSl|Pr [)"X~r Y<H7;FWԕJ7S3%BN듖j$vARYr,xΆBʼ; XC[tD-kHx`?kXP4/U|=R 2~s~ Zw}u([Vcd,EwS`(}&H2,l$4Ƥ7PJ놤m4;OόzH-%˛ DRHQbEl1im4P{u2+~JXͲY`#htCvE}fy9m3'셲g4,$.$(QXZm,G㬐} bM]saÝweKM R39σss< 3f*ͅxmuUwnHxxl+ret\i0q^a8^EA!j]p5 /sWx/,*Lq9:==%~q^7¹.EVu,-piaKۨJ+P̦@{o-4 & O9`hȩҫ[ȅA/Ka+U.5 Zp(&cj.Xz Bcf0^S=~3bK/a(ÍQ- {ć^2WFZ)!apՎL}./OXSÌG :=0A৻裹rީ&T(`[k+oAX>Ww߻khX΃!ƈȱD-)hìo`it>t> h<*q]\kFQ6vk"}I_WAGC hn)8 2wo=8Ek!/]$J9(<-ZET!FVÙ) #0B <]ɺZ ? E=/%POH Џ{*撩滒3*rhL=MF('@1)[UbR`?V;A𨁓6P'OxP[@4zSFk9f5Gg/+πS~5\gO i_0%,}y_]4 c5x~THDt(*?,)0 ڭObAޤ$߭w:m{tt09=I=Y=id >CVLePm h7`.xYĹzWtV6˨ut MPnI4\(`PoSk9,6 nj37Y}_\;=5Dfwp$Y^Ni&B kW7E%/} Dq&l[MHRdk_&8A;yB+PzHw?ȿm@{汦Ac;"gAv6m/gZhk>2˘SOtlߠ՝zˣc4u /OVk;*%|!݊eS;5Rw&Wx2,|>umuB~zfx? DHjK)-߻؎حb23β7#Ѭ]dפڡH3If4lM` RS$%:R)8YA"omv N{:而pI8#c@pL6W=͇㫥wCtdp{2QU-W< ꬺې}䜑H&rfCr3͔Fdd+ߺ& ZsTj(Q:n5` [[{$ѢAtllJG*%c(gzr^XlS].cv,9?qmўcVǸCoátY=\2 0Ek$m/QnQMG-nlYe_,Hk/7;+>GcMHoCWY߭șO /2YRNP׾VV&='B_f~d+H^ KJmZ?4Fvy)oD΁u)%b-=׺<^di@F '=Ǡ: kRߩ~T?[&c/#$Yqȑ.b#mávw2Pn6R˫,6vv-IZ ^B֚G'l.36=ѨypDž7Gtcua"NjYI}f 2 *R'MV\MJRV&arnjjE5T R͞DILS׋R!&B)a= *,ʠbıcl×:mrQ_(oX똃2M%pG= < :wiΙ@U7"ܔ²tT 53^P^aB4Pp EjˍF6IL!יz3:7;bqga#]X@ !U_3[<<%}iB5<];wr@i:N7UM7wHZmzÂ^{TVS٫A'rƲb]ۙ/=bGڭR!Y%uѹ ϶2rlc:KKqXf jIp` b`ē< Ωa,miK`<t9<*rQE񔁇jʵ:%Lf3*eІ3*m[W D5E͊Ā'v@U&r5 u͍ lQMCqJ"qs('ҸT #M($l/~i)*4.'c$:~/ LK$ۤyiJ2"B=YNyb!45Q# }#y]1bӧF/Y.( Pj]'Q-H6k -JeXtޙޣb;G1rF/@Us)E톔(]X^NĝM:gav q^p<1vQPu9PN!c ó-ǡwRQCpkKcTEXiU"ކ Y'zɟ4ʷ0^.7.E޼:!yjAVsn r,:#\tcev5_ Z+n7lѾ0r z@Re2WqBc/9DА{iWUD>ђ3ifЮɥF,`p wܮpP.ÐtF>qiĞ J,+Dȫcm$q -86W12k_v#uk9p#a?NC 1ƊHy8I4C]#`;NS2mU3bV)ݠY#e\LgVBK>*pm t7I)4V^IMp1 1\zU8AC&b|뒚[Nn||P,HdHmwDt+C$H1tx;.EχvYfǯN48pIj!}2='m>zQC*쭱# 53ڑc :BB3`2l $62 <#;"FFHN &K"3,Ne732ꏼV("kɎlzg_M,w/0cfhzDWh }Vq޶dC˨ӈU2mtGZfͤeR-K@qA"UR wG_6u/?Opl0ESkjSH" ~Q;Ձ)KuKBd˯}L8@4^ge-(n #: 菫6oߜ6E`(ieUHMAp|0 G!Y3t>f8Qf-Z-O7WАG;uD$z2%nE<k9&6[>++/+kHߜA=ؘ[8Zf[lԴ_2F: ߲7rL41rJ0RR?@] /[QhF-p~xqƻَ䪏"U3 5>M7<@7:m1pnXE{HYaf yc.&=m[p%֠]} @4!NįʵNhIhNg_ܡW6Wk[G,dШN1us!Lz. ôK0=K:nW/5O'µi^ԊrjılO݈S651K8 SG0N s#JR;Y0b,tT7(a&=LADyz[cqiQ -UTIᅨ¿y4;2K-^OFLIe4y\Ϡ}vΒC:ДF.w),XoDKZ"L>L1iM\r oN]5 BNl)Q`7˂ֱu4ORiK~I]ڔK8fg)v#?5W`-`0!y,{H=8(ch**8?nZJS#H=^O!ǖY$;Y5p5"`8ό2d~wPha\gX35O D $fh67Ͼ)S|yA5)(//Dk M[,@nJ {Voj8D8>*(UPo Jm[Yʭ,U"QB* 㤋aF=_k[i5.{Df+\K*}#V8eMh5 `.D'HPf^?Wi16T Y&[D~8Z*nU\P5FXJq }u! ҹr /BpTK.|i6UF' }KKڗmKY0W-fW^4& _%on&Puhj$S!d]Yʫ+bG?R~ []@d #" bSˌ3M`$\MDI{tp[ #LFSXЯ;ߩ@RoR݀؆qM{\%Pn2jU_|dPNt ;gؒ^zMᚇB) ^4q-zT9`𯌪/x_ މS' uTq}˖NJt%FjXrU:CS` 3JhOa R1ˋ;#=DGZ.Ksd~MW6+\Ñ3l3pGݡmx΀ю,~~__C?1)1\VXZ׫תk 4\ǟ{Yz_}Ӑ9}<b_ov~*oqҨ;(oW"i1۹A?RQ . !A!Z# C|{i d{$d7@bK<~{L 2*BT#lҟ Y08A)7{y昭a42 Jw: dEzTeK*rQCih4|6oDP9Ha1Y3 `>aqzB6)lRkDp m!YkuDc.G=~)뼠8 1댄CчI 2(tAdJLJf x/ص7XlMAbŸd7,ZQ7fT: Wd> `<*ApsI{CLN*QW(^?8Հ偭(#ԖG K iy|(EQ%/R( Karg8>s}T-IiϹP/(>FX2?Ă95?%QnJy־jU5JD0۶99O|T(q!rlZDKL)\UL^fhWc *K /ňB*T*4OdT]nVؒ  eIHapVR 5Z}aTIik&{p6ju.BwCgy{zAԑ21@peGZO^;ØS @aɿ~D? (5ߺ# oJE( ɜs @^/PZ7BaPVT"cy\ \6"d2N&5K66DL”` Kr*J:&IUxX,_~ƫ^8@2Sb* mu~Y\Gg7>}C~wDPO㦍r^%*Z]W !'nqAWpF{6eL`ϔ:F`\mLxՓwp[|~R#0,GA7ͼ^WXG}±y# ;ŋWqhB ҭtZ5kKqB<)X!Zzi5L /j?*X}Tr8ԂfY0Ţ˾9m6V\!Nŧ#9g LY ̓EܛyP|MDT2zvyodߘϲjj@!<DF ]6폠I9K@뱐I4qI(vŠ\-8XtD*i2J EYh W2DϷ~@n*N D.2 &J3͙R]KOb Ӈ.ě~5J-㯠{K GgvDdPp=!@,0"=/2L4!ӄvßM̷ is0@cY@xÑ+Vtg%E#eJ`-Q-=x&-C=-%FnVFĨaz99F!2y'$В)G+%Iq"ՍD[YH[TpfE)y{r׈%:U"6< d> "9 J5JqtB)ŊBH> \d{5Q6!sQz " `ջo"@x3ʘNҁC"OlZ0}avencYBc#Cn7(uOP+R̀@P(!\50*ƓZHf/DUjbK \gX"ѽ@ -k/OM E.lXo(Dfm ]qɼIYK4kPppˊ]PI\GLu5Mq')b9YZou%(Wu>jo1]R=~y\y >0NRI`P48yM G@#1QX:;"S٫.yw^qsJ/wUy0WJ=*Q0yRVZCWh?'Ax־PrP 3?]Y1݅7"=^(2Z 4 <9+YHI*t Ucc߷3iZLʿU83S)YVV R%O2Ocϭ3b%}fGGd .B5fJnpZ^T)ObVDd*P7JGE.IśP_t=_Ady1~!Ґ86{V[Xi@'l(`~̹DLJFYȆە.i&i>1M5vGFUf7[44z[!]Xբ㋵ qhQaMoa5[M1oN#sf0-BM׀ >Ő񢨹}28Of/1 <{oSG%,Gu*K/KYq3uޞj !wԍeJhMInV*;b Ie2)b;'Ð4PsOٻɠG9 -9:%4@}erҀ`\1AC A9(` X=\Q3qJca{+NFz1ĒRr$ 06z\aʧpB%*C 3+706%ɐ9p,S:>bդ?țђ1zMf+ 39љw7dSJïn[|,5nx{򙏢\ c,zK#j@W"7+ ),/APf/"^$`S%4>Xظ: ʂ6n&ljMkifIbFni~Jik8'#Wj_eND<͉-vAsw:Ɓve %ULh3}gw=֟zrMV@4NMPt!F0J*=c޴;Yf,jv( /G~"vG3:Zt60&.%:"-PUO!Tm^`0Tلx@*L,*q+x:#=&Ub8QljӬv o˂=E#TZnu'ZTCuq,%V^rRXR^N_+#C%zm.t7, `LI_]$dvadIhSma#n+S.` ?pl&EΖᾟ`䤰`mE8`ְ瓞Rwd^iD8Q 'ֱ9PMi 8*lRI&*U}JC1kzNR"VNcAITDSE!o%FOAm~F%k 񤌠U %$O׈ŹA8}OLR?Oe R".]Hh}>! b i_thc\_Y,VϧLj~jt+qbdIb = amVhòLN%q\p]6)eN (*] ^ŽR}'R $}u:efuZ5*s2&X^H0bdęF][K/Cܚ7J83j8kӝ OH9zo~RĄiO`Q ̞S}DWth*D ̘)xm.^b7I+/edo[6ѯ} xEjKB%jI{ZRKO,ixqTRz񐷓pgs2MI@iepQ/=B/;"NRq2,iذ/LE*ʿ(aܴwi {E.ʯ5Pmiʼ`Ѷ\bfV5|:[p䡃j`eCKNMxN¹Qf @8U74 OTTiήd/`@#&EyEoz-r10D9mAs̥-\Qaw8%AY C~t3h]pBA&gfe hU2'A`%L h~v,s ŀAn?pda >-%q ̦Obs-6Mb321F y$ 'q\rNh>Mݨ8irh_@Om.ˍ8E'Mo}tƎ`j F~s{y2.E34MZ>pWGJ-OH}YXZқk&_0>"ܾ?!jRw<9cp#!YHh:F4AtInrߡѷtL>=Gy% _ROs_i,1r hO %=H)v tpW =ۙ9q KǨm"!n,$/uuq(u| VݯfAIƪWX'XI"RuRB"@?AyPVZr#RbEN*jF)N(gU%{IU=l!/M%H v+@j: q9d%֨DŜq3(,IL-r妽ƶ| Ɋ$HC Ge{ 3jrq69G$?jމ~L cn1ߍ##W*ɏS}:my:R|̘ ߖvc'#-8 Vȫ]QWݞ.@zWpշrjeh靋C6GZvox9lvDNWYHci]vе ,IGvֽdb릿mیdjlȦ,V";}Y'/Jnž)]Uip%q ƴkLyX#ĊOuEP}tnsULO M%ɏ[v҆;cV)('C׍x{A#N6 a}ls/G;'iE{{qkߜ6R箳KP @`q3Ot c(ف0#ֳ߿I=}n^l$5Ww퀲2b`,x> {W};xx5E3=kVE*B. [8[AL[GTj0{耤g_"EIߛ}i/B(tGzqAk!nMI(/TlS䌹Ï߅kϨk*jrΒ,tR0KiMrϔ=w )/[ݭ;4x@"|1Ib EJ8ߓL45DR%6iGC\L eW҆ MY"Y#XE[҅"k%q>E w@ <7te9GabP*M-Sn(_Sq΍d<rVT)HYDab*}Gv,C9#e+)V )iu2_/ QEW+f4 ĩhN 7+򌭷 k?BʎbUBNi[!9 5.Nϛu֙lOEZ˱Tk4 +S5埰務7I <>L M^%b96=<7q *mDmwO#Nh!mgd )RFF4"aKGRKA$}A* #:- 6je<]+*J7#B6ϻwY9n]%M`aJ4 %];9cq*+4z8P3"|eZiN(ZYlM4Jґ|[Hp99<:v0\u~iNcôf΋%JC^Q@6hq/K<ɨ'!"nMe8X 2%YMI Tn8& Aۺ.΂]JTAQ("Z <.䥲pwu캣JVvϱKv~;e{'D3o[G aQLn I({OU' 3 vh~fF.ę Q;8z_'5 e(c'S>r}!0iLg{feFV>MDgGB>T7*=R\.k8Vp#5LsDĿDg{ X{0!^#-I+гC2U#TΑ[ +J))1PD3Lq>D2*yi\b9Ȇ:9=j8`02a$Fp<֜Rp̀\ cO7NaDǏ.BưOPi8ShPcdpI6 kTqc5MSeLt6H5㮸j;]t.L=Sp6NIv5]'J*Q6X~X M2 :a+bFEE)3(f;v^aW2QAILҰ1!%=e|mM+k`37`g^J25Sx)KtP }JA/#@'&Bn {Dk塼*d{ʒ^M'\DA$@Maą4}pGD7-oE@=vӌS xWCJCñV2qF!d/.]z8օVI||[gilƑ+L0Vcњpqwև$U=$eG!a6瀒JIMV 8Q'MgWIDg199]ޓآϢu9B]Z-r+SC$FcҲ W0%-v6 Z SNDAP@NE*ڱ]-.:]P'" 8Z GR$twzYH 9<3Fy9kV2MgOclx8o$-x4D) Ւ3-iY;D x$8/Й$* T+uL!## p|er~t@C^e2M0: ~+I(1R $tqD2\;p>b OC*2xVՔ dmg_rʨ( :(53(f{3GLCN $&>8:ܩhϔ!NˌŒs+ ^9-GŤ2yO:vFQSEI]ٲ)N T[$ɒ4~x~qk 7ڥ(=- 6d@@2M}ׯϻ :1 Db4O&!VY=>QL p 2NdRǖ~ꏌY f.B6H8''WdYkg &蓙vMmJr~0 wˍ&fI }y&_Fo7ڊy{g8BFq sY8!VI Idqڻ+-7eI\[/o\a*̩AeF@"rc\ԘXղ4zXSa*#ԲpON k%xȨP־TfS1Xw.$3/fD<Lc竍F'rW,$̖rֶG:h"hwO%h?zj<}ת{:@:D,Q_KbTmx'?<\?¶Lmҕ9+w$`0O8\&MKJ|;!}pqKm 3xL)+XjYY4.@ze AFo2jOXﻵ[愒yZ,N0hieؼެ(>IBi]ԛ"l^:nOii%]Qu,ЬKy'W_Q̭Xtf-@ԧ_>m"o++ ?!8\I~q ~|%mz}FV_j{*G_QYoQo*VoZ}kC및5nJ}6uGN%2츖z I_ѿop(ӿ{/k|GŸ/q@5jŞYoJr;quM|ƬʮnRոո}y3mj;֌~I{V9 ]{Z/kTI{{ VTJ}ܥ]_57V=7jF~|P^VGqL=}]lk< _Q{![< exmcPݝإ|y]ll--_R~22@q5~zfkk/6Rgk> w ,랭#JM!z=1!z9,Mv.W?xʵaBSL鞋yD~pC&U۾㩙 ̀"'=m@N0wc '~y>/8}jvNPutն9X+򎚁8yAۯmzG|.߫?VIl^ȅ>)LɶGaG,/W.azJtG&*-QG*`$*˕V+ ..?ÓID_=?kk k< =̒m I`{;F|i)K@;尺M)Oj6󥷍<9 V ̟ɼۗ/>5~zfVBUΏHvX=хϩWR]-)oN'R@?KvkM}hj*Bڳ#+TzzrT?lT7Aϡ$j}/@yƶ-nY_`{>V/>U~zfϞ'<\__ъQ!MÈ#'wb9CtFE*"r% aJ ߻Ίt/b2\Պm)Ojl}|jbz(X?YO>4_>fps$g6*N#ƍy0ork.Mgӗ;(oܽeLgܽ]e~2 , O9ϤL~2.']dpontfl!g Oa gT|aKE xo<{|gu𸧞zRb<9 bLڼa[Ԯma >1⨙۾=&FjBmPqҩ#a 45hՐ֓Bt5)R *:Kn܈ۮr])dug//;" BZc⡭bǚF貨35k'^gF75%t`XBsC2+:G(鎍D摉:@#`<%D5uʂ/PG8LX>&>έɵE!\(cuAgs,rϽnp9;i?CH`R_a@Aw, $A[t..fxl2Ofe?i Gbe* }gՌ ĕKws2x҆E_COQպۢ]1 KI0]89(" JQ w͕Y^!gydyYU5!q iq+cN,+S:-DXpU(.XZ?<)*kT,U`^jt_Uh.pυ7:+lMAk[4iVP픖IDaKZ_Cs$K3WBqk\팥,^)K8aJrf I#'95a(U˅ +eRٕu7H0YYWInSO!8jT4;sSoDL`r S$6CT.G2c Acl>Վ|`49Ne^vWdQf7HhHM.T{t_J0 zOYeTD`H?QF'hS.ec)%Hm:+T|Z,|Xxq>g s#'Tkk l(AzeDI+ :uaq!ODw^jP|.RBd|LIng} s.ɺIrĒvgh%\A 疘&\m;+r ]BC5ߕH ZQjQVJ;w`h^{'z(Dz }fV,qTkd&PLPZ(2" W4 R3 ;Q2j DK#b*`\-upͶQ>:d99,Ed \ŚZ3PVsr"*7 Ӕ=K$1V8YΞYP;k )+fG!xPP4"1/T~[S#ʩJ"I`&Q5o TqajF}U-1\˒EUPshLOp+*MГTQx:%Ƕcļaŧ7CN -nbPVڪ(_! N@$.`?Рy75aLC%%itdIafU"4vB0bJ 1@{FgoJд/u%T;g=Bh=@m ,IS>úa`36.^G)zrr]\,?P|"R DH@M$u\)y #\iŕ7^_2b2ta@cF.d N߃mj;pa3ZB4'sB4|H[?@e kycզĭ"Xmy[lIO w#EF"yk蕿4?<<+dx_<qA??rPOk_Y3_\#MF!|F" aKWgQ Bsvx"A.]rl_>Lvɭ|AKn)~AKnK]r+_!\>~$(Iq2\>(JoA[>~䖏&%\.r r9Nao nHG