#!/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=c76ff383964241084099238fcb9fea54 # 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 ;ksȲ~,I,`'K֧l H:>Ҁl={ 񲳏s*4陞'>u=|9;=ſׯj];}M9y]U;=j㯎kǯ_/T"BƾpO>X+XBwvbǵZ~= AhEnWY r{TcWD;Yb3ġͩeVb 2{p;7#@2wD̬nq-u%" \w\$ Al1r5i“8 DhIp]J'1?\|fMd ڞyX=h$aub`Dp;s?= ܊xZXk  AVDwi4"9GvXC=H( DxX GG}Z9 4"Τ`QaBT2&F'.:_KGBXF׺Cs1x fScP~ 쵡7QhBӀj>2f0 L::fokFVg{We(X?p/݁ɺڰu >K}Cj!iAs8[Nsoh kFԻZ Uz#f\7;MYMCOYQم|6/:#QPkP[ ,vʀh-^A'H~,+1A'k7+f1Pf5hfIcMTk`@Ree=_i}A7M7@' @uL34ɬLd{W܆T׺Vϻ)H> ;xK dxh H|^s]?/5cR:  Hq+9L0o ~7RO௔;|jy%_#SoⰔm=^Jȶ9=z$6嘽T~u*6~ ^}I/_~u³mӄVXh!$6+(Luqcϋ"ߋn@q!" )MːXEtAt(ӌNs-aR>8Ͷp#-bV:}0 )X<٠nJg]#'sxV]xBm-ASMcߖ~x:Y)a#S"$(rFnF*u3H}@BM#P>sj8յɓ Z R ٽ8q" "TYB0x-v.6VXE{l(UZNJn$ȗhs; †DGOa/"&o  4 #a#K axL?m H⟬qzCa$0v,x>G7$D GC1&۸0.,T?rB+iLa _ҧtIx+&鄫9 x%ъt…6x2 )YVX/ rP0aN9a'4  6 ɦ&:6olxq#غr-QA-IBF9mdwˑ[%RyaoCA,hOҼUydiyVb֨iA$ZV{4d$%gQ CC;^Sac"QP44$6k[gM<9q)w:qwSO*_RGEDF7$V8{H h|IDE kc,v M8,L"#S4iBiޡg$X^ސ]xAZHf[Q-dN7?tncfv S$0D,/JD"'Dl-'W7Y"#zJ-~7rRy֚+CqwFRrv':GmBA[޴hvXc4LĐ J. QS#gr$*^KCR1Q :jdF'۠ (I^pHw1'i3ÄcG/@lZ|W{}rU999ߟOF}ng]1ۭ6uUgݔԚPY%[8yB|V/zQ ZzRYdo^Կa%qkFAҩЩ%t꿞i}R9҈x+D ,V=4u ^5}ᆱ5N Jk %5<#6_>^7??;m:C5 T.ʜ}sNgnA>}Xjy-^dA?'x>s'G"GϋC=JX:Įf;`7 Eފ9]"͠?XX́)Q;`gy)L/> Ѱi gԺ% j6 ^FN8BIbdmaraRh{U>_KUێl+eI wMyU>xO{a/~0vډY'H0u ɺwj%jdsE_!07 9W6T sU){ 3eiCڬ&ЮjaEXS.㳤Oct⧞OZOy~= t-{]/۸soFbE=k s#+܈2 L_ңbi?Ò+/l zehhuw^g?Z^A`CbO~l8ÆN{,Ez'dK4G?>\ȏ _(V9[L VBtNWx8ka#R On{H;Kw".d)˟YT$b$ֳ+Y3x6dF YR:HzT8^d ڒTOyΖ.ްX/?)Ӆ^j Lb4 ,ӯ-K眺s9Arxn+oZZT /[PfE"Sff {+q)a%s)=w@ kq0vdJL9Y% zor'qW:zg-&\N 2P!iH1Wܩ*H`9`+tXQ%Z.lCQ'Am* HJd@tG9"^&Dd \fA1| W 0뾹2Цmv_xu#Zu쁋yLjdT\n+ln RC/90^GMun GŲ5@mhlEf.] K| ZVHJ#@K*aU+;S(s~1I4ZVV%0IΉVMPbZ5X/M&exiOQAAp U:Sw/ʷky[P0pҀ _3PIq[ /8q81|ꓔт bm llZb,&ev2It`s@6lDy9 j *vyR~Ej",o{oD W)6*OӜuz: %ʰUTL8~Oq״,CUUFZk_L`;Ӷ܁6@BcNRYYAgطjk(Uo! u[׭3AKn#*h[̧#И6K~_v#ߋ˯63աXb >1frd'Ҁ\hd8?3e K8E)oc! aΠTT#9OnȘfg#; ] 4 &:;ovyG: n$v;7ӹ4EJ͙o_Ҩ1'Mq;).p8I5&Y][Z~#gtl7Yb>CI<;d/cNGh\VozV`l !4tJJ\\fd;buh< քpES^GsP:"h/$]dM#G ))JE̩> !suأ)1i+nȑ I(~MEٲXUp\t%RX`;]tՙYR9m8 o8H]@irIpJ8 ΏgYX9Ln1t.u̿\_͸ٸ3>_il& w.A0̺h2/'(be6/9+eܹ Az3~p|Ob]ALILRB:.4uꇀ(2^h10V+(kV^eWONNh1xyuV%Pנ٢FȗjGLJCj.,wtM8:T)lC1T.i 5UtXy%?6Ҡ/-}Y5=k0%'|pR{dL_yzΌɊK%=: η"Dl7K -oŠB zY[3wo |RX+9n ^k7ԭ眝;[p1WrS󂂘?/Eu_ z!uexa/ <>@edDH)h ~j j0nCj7.1!c+buyT4>H񕈗}px_|^oj6w 4IۿNBӞCT7# /r25۹C+cvfmr垏 ;i BZ|Ym:{|=CQn jQn/U ]0ɡ ~.=/f7H=%P s15W x[sisy9m/7r9]ӹ:cfpDGV)F+E?mHhn^B젅Vs˧.!hB߷Uoy/ 9qs&Ypr!{F{X *Qhu<":m,p| )?$-fQI A]H2W.%te_ZX/F Z6Rh,qɼK L4[undҕuø#$-;x p’0{Pc@ Boa[FxӨj*g)sm'<Ō!N7tYlPX,:*3 vᘰH죁x 5DW>[80GA9ӀoUT2f2@X=V7b}Aza ~޵S{9`ԧh`:0b!۵x+ !FIzͳ<~6= ;鍌A>CT[Ѽ$a82'ǭ87[nGrN`ݔqM:!=}~!s}.~o XнWG\^}<*ijA{ !W ZIQ?ނ.!T7sG]D}^3s5i þ,H{6sah; "yu$ ] d/hϕS7akqb*aW]A3l0(Ry/yOk"3z}X}KV FDhDײFBzGT?RnRjΔSg&T<3g%F9<%Shb8VJtDK ,^IT,Զ츊d3w (x`:LI6rbIȞ ȁ]Hm SrqHёz QED"iI4[^M="f74!}ľ)i$w2jӵ6,Ӿaaz~y\-z|cVꓒg_ȧ)LYc.ݞ6ܵrY0%gqM3)Mq)%yi0VkR.`!>C_%M *~ XBO'(lФ.KuaX FgXad LJO9Dt!J6vr |Ï#}QI1'p7(" ͂!Yx pc ˑ*AԥjgSE2/*^qG7GTjBV'0|~S5KkSqKL3YrZoxgRYe hFe0:neX q0tZ Y⑍Hi7AMuKgΉ\B ߻/q'tEZX 8F n' !sY}(^X 4ow`wu6+Q5|~!T7dd]` s( )"3:2usDL"</H]M86w6Dg;2셿o%{g_D9+/},zdR-PAμ 2behԕ DiID"F]􎦈H=1̢_7o9ȥP-,D@^b"6'!dME>;)}HoLآ$aJ@ IEv'̉(0!kx)/ O67C$^<&Kq:]-/< @ѡDvut\3fEa:zԫ ^κכmQm_'/k"7J}{:Y%WVڜƪɢJIcYC\G$L L}WBlg73H P"_U;~L=uwG0@4Yp4:F Ӎ%1+5:= L$eLXO$d\gu3l-'qvb3uJ dW$OF<ŴYYld[xX8ꆯkDԸ]H&D{ع瘜hY1]q<p3 ݅NSпέk` x3{`(чIY𲠜O,Jl(1ø++PI KQzv6^fg ڑs8 ͛jϜ]W~!=mEp:q'f|~em8T=pzC^Oy=!a(mi ɰ2y Sp m"BDV2?;he`uY9:Wu,&/2  ^x@m]{];jy:n*sR ci E=[D\5nj'>dOR?/m,$0NxmL ^yL_qWP&U1Q??d8+(]7|dv[Fi1~gۆjp{f1X̽Hz:a8n{K1VM]Jx}m>kzle|A[s E1[xdNzQN/ڥvm?ȱ쟧Ƶw7ir)oBOP4Pl&fj1 00,_tsH,^ 8Sx^! [ՉQ6T" kl4S/c(,7u"VZDHrz% LXdkZBu`s4toRd;Ya|>ַ}=U6L'Hΰ·I='ȓ8d2h OI=T^trxyP=={nT;b%,{%T/zx Qh_"*|:gAX^!us-15Nlc18\粇)Foҝ QmRǂgtb/Y~-1F w%Qwdm: c_A7cucUu_3s>Y}[& vWlXmio;@{1fg 枼DYbiV6MV#xN^8]~SE΀c\@{qx `5vl,0IYs͢T:^RϻoƸ{>c7/J(qN͟/W`PB=Pwv&|jƉA7i:cvx&)=GYixu0|~ڤN@~eCi(-ۑt6gY"L#vbLf>avzAbv ] UctL3w&cA!?^|:nhq n?& /ȴ3z֔1烉lbmeL2M;CW}?eiiіRW=)g- NKKɗ/_[*mb ;mM ,NFvCHkxmì/=#p|螌v,H+cqF-ԣdBv$jnEl_NԁZ=\NW6&N EÑ#nzURT2F26TݯOPyx+O43 pں.EzbJn@uZ[1b_r\B< 93<̿7u)-\A ֖7r=Ql(fȔmnsA];9 @g$m1Lj]A7(қp{4hcanne8' EDzS[d$rH_ `~Зv1CU8$K-ftHCxfe$Ov̒l_!Pan)BG&l}c9keНŶ1` Ql|7F}6ܕO~2*o׽IM/7z⑗\8c;R;!-ō-ܩO N ;䤦ч~@Hٷq3)"CB"o%qF8D\.;If 6Y|f ٦}buth# )~C" hN"Og\XDRԿ?* 6rv7<.dgqxs#KېQ9wugt]56#jŐ nCxإR!]B_`Aˁ\aKCfa`0>!jd}~;Y0eGuΠĊL!S{&06i|}ۓkC U2aX1c $X])eHq"<#i*[(m&2"/__|].OҦku nP]tOncI&ةTN*ޭmѳ- NekwO6_T=438X.ࡶ m`8OZuDûσLI83xON"ꜗHq2% JbaۢAIOⰵm.LkF.sfb!7W7N nK"-s!X ̓ߨw.9W~H0bA\'ϱE 1&cAlFRBnB`cz{ڗ+O=ffֹC ItmZMTnfzSO$%0'bJJEzh#ۡ\%|-Eˋ J6* ^.V@4d 0,{'ӍuWR sxyc|:oCpH`yU&#?/α.@8zKGNn YTVeldp5 lG-xk(3 nMSNa—Ow 4O dZhZԠ ݘ,X%dݮ%Ӵ8IkvF%pqs2Rb" ֔UO~)3v{TL>leՏ?'-LNߚF.+9"g%]J Ӭc>g"uZ왹ݑO73W~Nsg ㇨y'f Y+DImܻbS/B:XAX!%%bz$]w~V²4 j^9KvO){3Bb!js5 \GJZuAXNِ{w{IgnP:K= A'w?YYƞXH- sz't[ ^`m_]; ( $Irs5ZLf &ԮZzu/Ƚ ?#91@ïm|eRNMPWLbӭu0'\8kO+(Myk~:tn}tr~CMNIwZ` [Yn l*PNMnSN F˜(:Je [2}u*8Q&3E%r!zgZ ѵ24&4mHce7( $59FFAt;a p3 m.=m/^T2o  J+,կ<IqWoT{L)-*E f-/M:Ew/G*$LĠBڼ"u?$zh@3R&Ir[Cˇ79 peLӗyHmaI*ҫMClP#\٥[g|*]IP h>LfMqb4X,^猭a3ka^<1Ji5fBX3[k WY})8Yަ[S?W?˓O?66돷6U=2}RZ_2'^N!j_% m:d&6:A]]B˟<9PuBTRղgqJs>F|vk+$F-6H{CF]P0EMê0/w$iO 3=, A8έa.EtISȌ($v?b8ha,6JqcXz1Pv˭Lʴ~vhuwԡxz%Aq, p/v ۉrnvo$RQnÑMDsztd/QsK̚_Sh Z)IMjoʴ^՛yڨ)N&`}j㓷W-`h><=bcx\mBUO@m~AQ^kUG/ PG-uP? Y븘J uX~VꭷԐ*jU;=6iYaMv/ՏN d[2ͬ>?q]zo{0vƒjs Sm-f?O!TCUwڨBDyUoj> 5e4^ZjhUj`#64luwl|zX4GU[,ǀ{84RU&^Iu>˃^ [s7kUmԛվB0P/:kÙT͖0ͺW2e!J{̥tO+3nG]tcYZGB]Dڛ8R4#\<:U/aM'PEI/nN^`M}ZDvf Y5r 8#bW6Ǭg۵&'&PiC˛7+=Iow }B*7#1 pQrɭ intf);RSX<1-LxgBN)3 oR ;t;8QؿPx9+?/(WsV!l/)Qu]o!h_xx-o£;OT*_\:Y;uL,ǻl7^~NZ,wzRZ^+o-{:;ZBh?furo2*З / ?E-\Dխܜƹhq|z`yV zoG?=$䦢kPp߂D%rZ|:5x(7VE-Y:^znno0yvh+n#|l e35n'3rydgxJ5u'XŽNT=!_?j2CA9  -2{f-P0M57GhAVsbujW H7vRr@`5=B0oɱॳaI}R*Ck|\HăfWz } )XbJ*f6Zq[<ֆt~vQeDNĴvckx*l_ժt)EaF 07@fGi'JGn D{fCcE51E mn0ōiE!%WŃ]01.IO6?Rt#RS;?T`*!"9@(N:8NU oб j PLx'E Wehq0F)NB |WڸyKKc$Ip9ŽOfQuDt~VD&?~5 iDPK~K2Au)s@h%7ْ7+a^@k#4M!1w?/"tHR''MmC3? ڈqց!> oQw:ɱe 't6MڝE:mH|W0(rˇ07Cst/2\E\Z鏧nN޼G ;CGKO&ν<"Vf FQ~u5rĩ&;(89ʇ88Avfnmn|*j H^P? p~ @[8zPzcUȲ=+ ¾TΦ~{|oԪ g|rtcoU)b>M!;vYQ-?p3immN8m`rdq`V' t Gq ͞0es$^YQUc4Q%bzT^[+c 9xt2H"K_ 6˟Oɹ7dAw&=2l[=8ŵ:p11T/LJfc,bnI_|sa,l. jCd"ղv)'F0L"-*d:X_UobF/5526"`*C>8;gJt2*Qnx!xqhv8h :_8<*x 9JEŢFx Lփ;DCÙ3P!) ‰rxB 'W}#n4y}B OwJjG8O@a(.e]6v*U-@>4r)B; DZ6U ar5gÕm=iQ ѧw<Ł>>1B(ouzOcdl:Yr;j; C>xaH]DX0 ) gɺ:eƴ9ȚVU8톽𺤗<3h.>ڹ t/?R2;%2 KB6RMo⳪A  hjkh3=fE$j /Kijۊ5URJ>^aC9UU1}`2NΆ4 t)M;#Et3fuz6N+jmZMWXmm[Io}}nD`tO++4c5GXSOTWO͵ /7dx`]f`[d8 24ʋ>,'reVʊ)Zk#،ugg@*aV6d4HTGW¬罋@ ++8M%P91őe,])01VC:)˹, )Gw)@)t%2nW flsN_Tw|uQ/V%0eWJO閨ҹ RmdU[<51Й7> pWqT(ʌot`2r]%8D<{0avaj_B4:> *5&aQEPW!"JU1w@<Ȑ Ǖ¤44od nBPX!:Ćq~SUR]& +536S a& aw">wի`ʂD䚱 SWugpOIXMJOŦƃ*+T\ ZXYa?fn[^1auEr T`g!''xJ霱&x,f0N{%i@"L2_j&hp.rJi|=:݂Dz V/JXI9>c^.O^Q9bW+9ҌM*>BEAdg9"Z>`5Ik(hlz^Evq_=KLJ?ʡkn~52+oeM hPc2sH(3FIÄfz*iØDA{ix=ܔl*Yo )DBZPRO?K|BϑERE`)i} +W,CF?_ )a.ÒUBvd@4X)G*د .wuJ΀R?ǴAwh 1~;n܆$9#ΜSno}sMQЙN #@_! IEXn$/sփU "VwbO|?* 'K">7K#W oD prDBoo%N \WuYU;(jyFŠH2##5t bafͩU1GV3u^ ةf#fe:aՐ5Ad`2 `s~!h%cmP]2fj؉[,Y(eHct!J& b  h$ ZzڨS^%:'^=y$O4>JDue[r+E[2Hk3X7핒{Jf@hWԉ^[*A1߯&=VNZ#Y/GqҀ\j#zabASxMAц9eҚ*?!b <"xϑqD_GŲ7* ԷcIt,WQRki٢H[¡C&9]fI=!8|a8|J(,p sUGI 8YvsBׄ_ՏZ\ U[L:.M6ф vs|.e7O'&.sMh8Y?71tmƨ4Uwc<2tEw@V͜t YZx$+Fi "gw;''үC-ʺc 6|*lh=J- d,~83#O9&$3R2İM\8!*2j5"AmhU%#(2 ٵCgR-F"F7)j#|$읾9;[-Zb L)6ߞoO+_yM} ŸusC}QcިoTZy}MguTg֜-&kZҾ^7>ղxv մ^A{S}555m}Z@Moȯi?DM?MF-5&kBaغAnCY.m\Q6%rՍ;?An8y%HRxayLteg#a1Z L3 a06qO^(`Ҧ3v-6 rh $2ڪ&Z*`m|bjc7ٸSɷ0!}=3i).ꔮ U%>塰^W/^ wy3q4&+B""9/Qe<&&ĄLx:][Z '/o^+=;(FSNb2wY/h6GV@/c.iM]fp5`2:3`И7ehVW4LFK8kq)~E, yp}NPTE굎A7F:;K@UnHR"=mv7Bo#|VTHRP4a&GHRHD>9W% JJj%5Sj׏Cח藤[zܚL*MgW=B2bJ˨l fz`^PCebi݅OZjrGS $[g brW N㙽5?Q#d4L̕ՠ6G/bČ`ԙ*<*Qok^a5:kNWq@])1JYQ8k:kt{Y ]Mke04AI[p@^cDk'fZh[зNWL7`-WmOweXê"f|`B.Wfj_=14P/(,ޚ){1甴xS]*Ǣ=E&}^^K :SMy~|kEڞ p3Y@ʖ>R R6Oʈ"n͖GiKyl̈́=:c\Vs N>A]q(h.L͎Kx4f?*q{ q(PGT,X{yZaԪM1_Pg')/ T*zJ?)"WwTJI -7#e?sIĐ Kď˞0rt#pND(`3G9·5}YA%"7c$p2Y0oS<F(-=Gpp(^\%EAξT`IQ8|}&t"-zy-p0e*\.UnU' =t!efd@ѱ b2@F}gW,&3[&t)5>%5N.!ɝ;:Tdige8pgB0I,.]uaQ<P\O5MO=kR(Y]^92A`ɦΌNKiI4/C]-a~AU*OddE6O vCw-;>$__gHK_%Zofl1g췑M'tK]8~Dtx8E& vn^2!G|u/x֘Κ O4=E;|RR>|Ap`-@.!yӍT[jl _e/99Q[@ C=/t%>$7Xqf(l[0–#όVÞ&3t1#6 !Q"IeXΐk:ߐ+g'dw\=ťgV'-]0K&(r}w:Lώ+g iA e&+M26线ĞqAֹGa6o`2jY8ى;wQIK$VF_H0UVc#ۣ;A5Xo5@0& o XjUduV۫5cc؜ZvKj,cLKH+wgkʬjc&_Y8]`\m7[V-)3S]F#*z |@ ۿ[sMJS8mEڤT "lX( U4^gbM%/H{gxa(SO39SlYM? L~R//рߤ]$)Yz஥[i`ޫO&zйhÇJHsc+0g1KKhԋxʼ<=KQFK.5{( |~U?>!B2*E=ʝ;R2+T /W~䋋z*[ r9"kQe MqI#aUg0h2Y\QjBM1ܡK3T\7<^Qun>$,}Waǖ$}_=FtgQ7}w򋊪ϴ/(0$!.{)Fot>F{t,HyU졀ru*=n}z 8LͿ b̥x :jr<2lK"_+x+u7Aب ~6=/RV y~dH< Nbn)e[iNv+깪skĢ. dB6:fVF`b+#IA`7yii^f0@R=#N~y[z6$/i+X6T |RYk!fv`h aҹV%Κs*ŐT "F̬4fHAo \$&NYG.\R,Ivix3ӂHg(12܆x-q^+i6݊/Z[uSOEmBqt,C:Lx1\T֜V?*Je8y83N.iFvĕ$oɹiht/6z Cbm/iE #&uCIE / l¥F)3A exDx]sbN:FZa{u{j {"hVԆS<Ěn1bOU ,yyⲔA(n Abl«/R NZg4+YX )pdFlxu^8̴siIPA٠&1Ƚn'.C8gxؕ|Sp2L AFQD 'B1ajˮ7,gX 6%_tTW^z7~M;]X21J3%זݓwvn1e5#̨ N'9dxeQ4x3h)v^q^:1:5%Qg6 5Lڨ:{.U-y|,q#"-LqlaQU k:X5c^-kDMM5%PՃ5t^YY 5#Q36BιOGM;}2،>pq5,9 ֪vsLh֙u x㪇9c`i#b/]b5Lٷ_xjflUyVCMb1a Do3G6 fa͋~J !O -+ Qc>s*Zd{J8P㊣G037 䙲㛉 EDQSwu_Ƚ)z+`Sd3ۚYavhXN㍘*m04C%n烤\#]q뫀`D!NJ~2ISX0$@.v~0l7gCP#IY$>Q3)r[l鵙h JH<ʙmk/ NXI2G4nfŗ EeN읾HE8լ~%km֚4tE|E%^~I\@k 6%ژ۳ 9`A;!;e1yB~4T@1\jj( `.WdA'>ĭ=cQ)qn>V$r 7ԀcVٗ9Ovf\RQ}h5Z1de0FKDVʴgc; 㫠Kc0lhzuvpha_h=fAZ+d%]t[3{msvoduzA勓6w/s^xڡS&&}LVqYYvB&ɹ{ 7cIŰOMinC㖤y. .,_FF/&}_ >bu#En< fݢ K\97_1IbڪgWym9?,wM$*6GYі\lY- %is|`0 :9@ Nn4hRrAY}]@'O(v~{ɻgD^">RjR_ 6 !ib^> 'OPP zIɟ؄7mQ 8[_9mB|)30Vw}a)j c3; ϞG{K^9V@- m=U%r׶8S8s etma_'.$4Z.`.JQTr<*[2mV*mLϕ!u{2{Nt\LVf orOm3bdc>a(QվP"Sg U5,Rt`` n=YT&l& GHR:oBA]Ƥ~=13DmYIB*wl{B8TW]_OeПחu,Kc= |gT>d/@Oۃ864Bb*I'|MRQz)Wr)O: sK U~hDE#y]m7[ cF9%46\*G'# vNҢĘV0Ӝ9)GQ F`'ۈBv5O+V^HGȓ ٙi4 l̟0uNφ& 1wukz wcTVQʱD "m=3?rG&erd!Vퟟl9{6z73Z8f=Lzf{w#YV;녟+~"@* dXB{FNú$rԙf(4>re L9E'q^$`{FqXU 3>qem__z]+׈Ω3;cErJBƦ\e;7 9Zh C8ڡ4!_nWkޫFڂw;Sթ43Scd)_ 8#!〯uX~(kjl&?JG[c -O<y{?2 !^8 Q||)c-B(!_\dGb}aѮW7/@jfiZ3 9{?M*QI)_? l-<HC ^Yk|*F^$" 2t$TNkW~S~ zv[Xb~Feo䇱e ;F Xzdt(;7[6:11CIhUۥZyR?ʧ+=j1` 9P]XYa)yx.8l0;MI/G0LO$ڕ5jǯkٞrq5Oe~:Y/E#F,$ )ZhϝbL3DoB A3Gc<>srYQiŐ.]JӁMGPr*%v\a]0ECZdzVkHYƭO nGDH@PX IJlyq[x*T( ?Apy vI7i`F7 E*Dшr$\l3b& 0,.9}c耩i'H;*riЍAJr'a5:bN}tjӶ35LP0#֎o93IjŲeo7vBN61z`\h:Q8@i\ȁiPz]LJƐ](ᐢ N C6cYzq BOp ep4(58ȹn@0GC>&F-d+ EAFb OgvdOXJef' /Psy!ssL[w u A~M;IseZְ!MꂅGrIPnD҄*,I.9 ԭ5*_go1 p:86#ߊaӑbO^9+fp,F0#V1d YCeռ kdڛx3-.Cq;K:/EkhΥ^> "_ O6+.٫|wiJZn{գdU8V8C͐80ϴv~@62SA#,g'8t-74Famנ@jh睯AQ8cK =*nWYeAˆ׿w*p+,S:jRM}E>wJ妩Εn4m/%\NXWC;ihlˌ2AK6y_t /}v:c86@6|"M}drۿ>m0mL2Y^;LT 9+FvَB [0$VKUI7d%b*,8BU+s-+\KyUyZR$Ⱍ*DQy:B|/gMgGwrsX;1DK7Y+ &\ȏ Kpx"Yrn ;*L _ܨG蚘M-5IAriȧ{72ɛCck`v1RsKBAIJޯCVg&5Z1F@>eo3yM@%XHC *qݨYL. A$ja=_͇u&-A-2\.R-/HGEzM7Fhۆn ݵ:! 2R?EXW5 h䉓Fo٦YЫ;q F8)xvYEh:Ҫe@%L. 12h'm*cB#VAԹ|zUZ _A(~uK1DPpې6c}W;ruqϧ ҋ/ͩFUa.;Lja$F\9|lB/Xhɗ >?H+ IeemMkP 7)*t_ҥAs[F48Sd6Nt#}<*LJfu%odtV^m<(|`̘}سETzB\Eoz͕YH WhEQa;GkFQ4èer`4D&EOu4(jdv̨G!ڢ108+Yh&Q/,D|m'/}?qZ@!#p37Jځ (3:o=t(Ru(?xy6.^iCaF -= F;ߙF0ÅYE5jVjmf e88~(pu,n9cyA G`yCJQgЇpP.MV4i>_ΎVg̿*ίEc(Vs8Tgd5U@PcwӭM5)?NG_f6k ~v?(R˞I/Z;ݬ@ Ḃpj"V=iyg^,7es$s/7MIMM1D8LJC뭶urfrjNKzpҢ *x[Mk}4މ}ΐSYGZ/t+CjTpuJ:Hdd @5; ½\[/m ) b_)"¢pS'+?X/=9 vh08f׶9Qh*ؽc'+^sc /[yjn) \ EУO7U|* t:"*cAQ(ԃT['OQm%,{'"Pxa$6>>5~(+K6V>ɁeiaWdVOEA:tx5J4nS Y8ݝ\|.9iexdxMr>{UpJ gϋYG*Lb2 P~hĬ8 9dbMu&Pɬ9{ KAX>Bk'O+J3 jy2Ѩ}؉]'DdcmꧧxjhBkÓV|{[<(cmޟo>$:RBwA g 0w.[?HHS|/ܓ-yauCYgXr.F҇Dr׆[PJuM3'+q?IFRH&t!uIc ܌ryI~^~H- _ZF:S6̱[asYt۷s̮xZF2qK#yX@$$.8<g?yLCnw5tkkk w?P jc7@ۯm!|HiG M)$b$~&Iwmc,$c##l/f?N$ Z!I_jX ч+艄Σ$ aхd/$dBp'[4Cv}(J7L f/Cq3HFt3ÔD>0/F1ZuVr#Om76Wi!,Fo('ڦ]˵.Az:aԂ Za^GHOD:,Zi7D|8- ofP!5j3VG5P3Fro3mRZ](;/'q]\&zxz'Ǡ"GRBʤ7?.[R*0k]0)j4oD.J,è:Sz8 F Mt(WZÓ.ĥ>XM{$oVNcg (]NmJy|JYtV3N8X/6TQf:X1#O?vWY*eiihF!A#so!b_sEzU(wpj'0+ P~ Wg0FLς(*M€rc JqZс^A츙J *G{!5,(. ]P~ +.82ΕF=x|ccY'*8 cE'( 3v?9RF?9{B=mu6"[HLP0; /D^EfIٛ!"r7dhqh`1%ޢI y0]t{X0BF;[r]S3]Db";Jt1E.PϘ@J^0p87<–@ގ7p*#m x+B`M2TdqL01|cž 5H p=qp cEڪ$ ;u3Z؊.ףi+`wC`|u?q $YmG9u[}ЫО~rU:JtIFvv}#uìCXT&P_@* SCK]CD} %T2~KE)-bM'vVCPg" 5]omj(-~:÷\<<ޯ.nmm-oG?=$zo* reD?,faky ]\㰂`?hsv&LbуS#Wb6xҁDL N^LkjFAjJF1.pcTa}G Jp7itC,8gޓA2шR˔3{ 8B^NK՝=afrD#H{-XKD9maʻZyc{L ۸ EN .gϛoRxxmkutY?^]O7V:cTֈb@|tr1 y$q[{*!2)Gt?"Myי}}XefZM0Ghؿ-3@bޡ"ˡh_-e҇1\-S%-Ά*KA" QGiJx]poZ pA?Wr@G<;OSO@jBA$.1< 5s&wW;a ӵO76ó٣p6gǛᓵ:kO:79<ݳǛO>ηG֞AzP1!R#Ĝ-"O 4Fe*8b[ 2f,LyV,9yodJad|A* Fʴl?, = H}o HԹF~dskkϣյǫOmnu=u7Ϻӳpms@|V 7q{jGZa)>p䎏[ZEm CoanuϞ[ WA 6nvc\cϞj_6kzjAd!8yQ8Ȫ$3 B$;0Fla%%]}?qgs=< nv*lGOՍGkΙ7V%88w(ɴ9TK<\r됸9@4u҈3{y"3Dîp v'đ&a1e2s q|^ +#$"bI,F2E%XmcYLoCTw¥4$|:G]}G߳Qo~_=҄u`ܺ3>b#Vk\x^=8hUkhfJ ]ar}8j9)䧗r]Mm%?_|qջg|~WQ7,/s?~ѽU~{ӬU`0ienhtiZ1T:G2Ao2jE˃B#̈́*r8ed&!oĝѰKlW `A8٦f)wFyۨ|RHUգ}Eo秭FJY6!2UO@ouŽAģV,~eQAe-H:.R:5^Aj|Qoam/PNUTANN'͚כs\@vRW}by ډqXuuިO 44Oj{u cRUoRj ^!*6jpn[ n<>ާ[:8nҠ6kؔjJC!0fOu:*e'j  iôfjǍX0CQyU Y*EFn&a WvWXΛzVi71ARqe8Q/E\iUuY64t{di+ _8QPH>^mݿ`uY].䄤w/i4l1 \_~Op_ticYM2]ڗܐ/rR$3^QU#e2;E~t1FQxswF'wF*akA ZKO,f"hTϴ%U#+ L9ꋻ>+ 1y`=@7gZ`a{(=O.4Imk\4+P8xU; 3$D%)j!_&TX,L@rK~Z<2%ptچ"dmthMd 87bsavɮczTh̤Y}Kf-[o-ީ x;/÷): -Ϭ9Qua(DT1݃S\ NfӡUid;YNֽud;Y]E_4/ӂ* C@{-782誉r=Pfr=ͧ>2lhͱ13vlw@e[l1_rȝO8,Щbdu(=AphU\$,3#,aȝwreF)7w;i7K`ZfيG#Δo7Wi̜r98KeDB6uY m S ZwMdi2-QҒXzwy}>ws}>ws}>ws}>ws}>wss??ZX