#!/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=78a0ce386a05d79d12fa9480c1e71dd9 # 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  BlQM;a$aK/I"3@2N9mXPFeR<"Q%13T2%^T4!$+Ž wm2x÷V0hp޶o\v3LaƠom]ݡ ̼٦㰡ͬQt6e: f q\7` 8֭;l»ݚvVrӊW;ծ61Ȱ];612׳n߰nP29pscۼềi#EV٥ t}#V{mv])~8#k# }Cau qk\g%-pƗkcda$[k:?!IAرHz5m{TMˇrc\lP:f7@9ް~b#f//Pd%emFYSOVqƋ`Ae1&s;;?8w "w &I9N7+.3ij4zP 2`M_d^"pC[p ɼrOYe@pBH?%AFG9]Bڋ}bTl ,8(H́ ^TbMX4砐H}(hlVP!sYԧ>;Y8Hf\…X:R}/H 5N+RLe[u|cM+M9t)+X䎽sS'4,@ȣEzQl9`>-!V!oi~'",^)[aNEex3=ZM rۗo@F%WxU1}'2oDs5Zdۅ[P*T~J\6s|e,s+{ȝJܿT@{/Xe+$')cgK>@'(gF"&rIG2=4AR< X,x"X4ʚ4XbcaR%<#/d-xSeAp2:n`,>(@[gbv>@2J4F8҄òid?{9-w(݋0c~$.*#PfzŽrݳ$xQ0xJeۙ4莟> ?}MON@GWF6g~ r*5x  e {Oǟy?iyg9>?U7<Τ5F$_e`h]WmZ4஠T"jN*ke;PȽy]]W=N:uZz?Τ=tZgJGr#+X -Ff΃Z{D'zF ~uU[gV^B=NgܜTq^ T/s |B& M2n×ؿ^2<ۧNC>ɋ~ MB8U &澾<@ m@lIԏ7ʪI@}LUЛ^yv{gp&׸;[̽ʅj)8uC}TxSW5:nOPdC!lȂ4H n ʵ9Nn,@*yD&;##xzu {r6{xL4Lz@S?)@бjpéSwR/<࢒?c 1LIjz}H}Ag ́#,ZԍN#k7$SVGJQЪ% 5'j5.4|iyC=.c8_u l@!3q3YtWU ZJ'x v2@q~bt/G%;p;)AѠ>i/> =(+pqE2 @K)ψ6嗹/$ K˭t%!mb=lzѪ'~vݪoO&#[ng҂,P=R3j`/ t/\SeMm xvR8ryad V0__?ڞ3/hujf37$߼sAͳKZaDsvJP*gf .d*, ʬКQEE'cHC$8^ggK{ ˌnFƟ@)$ EBYY"Vi4U]iY2Q[q>g%F~Eͯlojm eF[ŽS[[S @z{̑`ͱd:oᗲv݀a-Zj Jz (FeQZoB~k"ke&wd@ izB.N26TlUx'K мAsXO}"%LWgM5KXY#ӅS C\|ZTL^֠ky]e:)yYcA ',_DQ/@5mt?P?t30igPTfE(Tru-!>9 ` p<'}=ᅭop7ݮ`x@1T"M7gLEț"av~&CJ\ R),^n^!]?*w2)ۜl$l~Gg̃(<=in)7>K=nfpr[ IjtpWYd- Fx@S*D[;M6=|?qyXc4/%bZ)46M|1xNw &l΃x*ҪJ#)y (PsvH|/[eOF ,~_p Sc t6i(ܰNX)&IR?SAa1ڎ hF1Pˬ^%fWG̀DP0'= y-ٯjʛv |MI[α3 t}?2|Zƕ aۼF/֡zk [:ޛqdU`P8j.$2Eo]b61=It1-̿AYMbzQјZȨh$V?VT?al)aBqj4Lj+0c]>z5SYz6{-t' s(!c>i+:`##D VRҁ,HbcbXA<>Ģ{#qtaY 2?{,RpoGr!=^/6^>;֗<@ -RҪ] U F G1gԣ&ZJZR#=_VZ^&2CLř>`t]QиR>&gb,̥J4d[Q5A)5)ؿT)btױ6vuwb٘zzH_3=l(3zC_vք54sԷ'mɔ[r7[ ֹj9ܪ2eee eW@Boz)K_?dQ˜Ҁ嫧OS6k~62ֶ*5n)' vS{fDzB.dXV!_VNق]iz`Nk"ʼ 5zm(s',^Bok8mv2}Ws @Pcƀ/O٩3~MHF|*"ZX!]0kyyw{ |9"p'9&f"%݆~ _6]2d/o9c"%6:cu"{5Ķ-Q~i/{o*]d^Ћ8 {2#R/bG3jʟ(Y>ԥAynߧ}c4*Mo/L?ObbWVC?y½w{[od~y݋m>M++iGw6a*#=˞Gˈ~^Ua7u + wj<[r Yӎ?@_D?vܚ,$x }ȼ\Z#dΠ!Sbkk4 ۇo@Pa!EjD@ꇿуJ"Jc,mp`f2jMP$> %(.\h 4vi>A0nĄR-zte3jw(x_As>ld 7{=.`זs o4eJo'U~vi %T&Ę(:W礧 &!:aPx$IR q-8 q6^`%X@pAm fń7p|ޅgo*=}IIJKkdR "PeW_Xzq ;ptܨd ުL[=M~I$C Kvd'\,oNP8 ?Q>`d7nbK kM_RR6CT )[a[*"O*@s@O,Q\`Jy\|Pȅ~,_&0U]PqL>+N`Ŕ3%ʎ2RyX}@DRSK1qn}[?PMD{yz,дNcvξYμCzx!NM]wcfsOq54ϣ[e8j鹐?ïv:aE~eQٮk괛tLx<%utFttT4]-@VŒAѨǐv' oΰd'gǰ!t.pѭY/hP(XVG,;h8%8Rԕo0,$ RYa;k9&%U#eܡA=E[Qd5}o_-ז`V?ij0] Xk)UUZzcxIg|I?vSK9UI 0պ0=γhhbHnoc}D@XAݜ&%iB?/}*2]!:C`;eґѫZJI;:[?ࠖAW$dN4io Xm*޳)Zp~[mzըeWX+ZMn\ sA"HSg5HҚ&eKIbîl!r9Ji!-lQRU\tjQ`w7X:POa cA\^V,no@ (=4/ 榐лRD*dVM˫`fQL(ж{G8L*T'ozPHqR6Q~R[[& XS[dzJQ$=Ci iN6ΉTJ5L𠓅%ɸuZuIW)meTc"?*hyb,rʑz;NBn_RRFu$azNo^\pZIC1,cU('qS:Zt ꓝ;fkhmN+ڃ&o\ a54\7o.Ih[LNPm隤h'*qK!)hf4@c<樂L"&иecǓMe;{M>/0,'}_oIo 7hۻ:Ms%$}iQ39˙H !r@4\JLW L"bwv6er` B^5ң*W~q",Dͨ\cQOfz$LT -g9&HkSi\76iNL}UC*Ew5@hv‘d[6V1X3v|Fs WzpS٩~W=!cJ/Dzl0_[慎{HRcDڻLzS\'^N.*}l#3א z y;O} Q}5w;qBDaXKԗUKSn %Sg|X雥 "iQ%r.5햎X]0{^K̖C4ꯁ9 ʍ0W,&w0@S?51].gwR0;SmzypnLj\@v#ڳ` <,@#Tj:w:@&l̒}96[.#xTgp2by#uk=hFPKKO++ȏRz`GP{l'vguv֛mݿ3mt;ݨgJL|$s1W\8z\c <XqUzWP{fPNv02$ gO5pf ۰#va'zL_ߟX)[JYm *FL/;.rmνޘdq 9ҫv㠚8PwJWˊNZ|˵V9m.; V~{)0> y‘ȀS8 WQb4Au Y}DåȵPq5Գe!LuϰqV݃zAQreGgQMu`Fn5栒7L' (+9UlY~}R/ho! Yd@6 ]ޗԒ|;[V=cVVB .K ѯ i6<-i o㩰y6}ݧ\-{T9B;2Y?Dl;!f`GE8Cr3gJV*qmʯv|r3S{qUUupu.1,TR z:/E%Nw˄ĕjC?`v|29k}bpC./bזVkǷfD>9 auZ(l'_P!$lg3')dSǛמv AŅP@p%ܘgs(ѧspڏ35a̤hWg5y!=O+gVfMm$723SdLNKT%!QB|{y~bY$y4^0|]H L "@x#ŹҷZ85gRJ1CQjY=sL|egRX ?,\4(Q?7qbULg@&K4NuŲP)ɨ鯅!zANc^TpͩCR>/l 0ʘ"z~XD0sut ]v_Ƚͫȑjkp-C‚b,:v( Ϟ¾] _i I~g=KႣ_<#Lpu`ƴ)iוrY~ʻ`ŐI^9Z=~wF6S)03`8)3Q4y3|xns -˂>WLnSS鰎:iPFX﹂of7j٘2# h}HH S0jy3 fd8X5}ZhF ltÚhA:NM)T <i{Ukx@w_ĉ əX1[k)UOsb汈{ttF!C pfēPت!Ȃ^_7NCYp 1qohNgQ3)t[0L4l %Jb zE13+IpDCt9;B\*X)wKPL/`MZ[lQW^ӯ"@Y8(oH M= tWR$t=w(Qx=Vq{<&׷VCg99D Sv]‡c|˔m]r b^+|'%TlD$EqL^..gAmpDC!wRz* g!Agd#`!i_{JYCQPNF/Ҥ}_ .܆IGq!+ٴ\v'mKݜ p[~q +mhR9{)ʴ #mړq-4rv:+49>*w2n]T .n4hRsQ쬾. GÁDL"ŎKwoS qS)RtDNAOᮉ{!O}{@}09mm]}gA}T?*g d*n^ހ1볰C‹#ٚ ][pCm*ibMu^=%z!3TC ͓1"5BKwfl0EIq7 θks'@)쒶pR"w;gP/8;u`b:wyJI` f%2Udqޝ hN @H/żQ6vx3{ W.ehb/M͙^Jg' y=Bࡔ],bK΁Ѹ@+/wջ)ɒ>gC,8KPԃƹX@n?Rpj ! M3CB &[:Vj^-*]{Ή^薄 TnJ)tc9AlTu,T]%j.(X9d}b!?`hbFV#f+]Mi.χS0h+MHƶU+ AUqSpV嫿\93Mq;p X&SOl‡YLJZ ϰ^_M> %j'A%-[X@)x4 @c),Z@%6v\^'# N.+Oy'_g[-ҟ gQ Z`2s!dя0q|׻ErB>5}iWB8]lhһ7WJtC47|vL*F(O#`03=]&q,83JL$@9r,le`km0 ]ůRz l~y(C~:I`g=o/w~AT˻%~9:[[4/#WکFvaF~}0 ?4R8܂\Rt\Ua8H:\. h|Q7OP$-tR߽>b(TU<,U@-1Ls {o4V?Ø֠K)d(S>HI]@$)eL^( A1~xkNOؑ۴_Rq" B E #:0;8ndحd WP^^Cd5Q$!)AsG2U'aNTAPdPձLhBz]KjV%[Qq:#SN{R4ayⱢx|ٵ蔑;/2<x;!0Qr^9LЬjy l0(S>Э~oǣfR޽^).-Ur4&أޒFgR/h ƙ8}\0O+Uz#rZb mneRρNQ9\M_/y)֞MT$ýSR|/Mx_RJ7T'1j n$q6 D~L\ca夤N\†#4>t; gM$0:e7:7Ee=|Gs'f2h hpvOXl"bxy\n<~+d#YIȇ|NC-ͺ6A$Pڏ" -/E1pR%s)3^w^q$bK0SOY" Ba pWam0WbF=GOAм17.غ͂@xLq>ϊASD"-'?= | \a{B JBMxM`אH x#}"I}R] 6řV+sWP bBU^hu%h;ҜGmvw#?'fu˞2l jJ? >߮=^Y?rhQ A#lBC~D}H^* ']3%b7=[4ہr\ei AI(70יZꎮ]]Ys钢N)(Bo/z̉x sS!4@*xX$%džT,p|ְ6u6@d&vx]sl˟NA q6>Bsy3&SN,@ ?{="w`j!,wM{W{sEm>D>55 {; ~S&2 s 1ӯ!l7\!ӊf.LLQ+}MՅ}4Q( QWqg `*f(^씾(ET՟FiG$ͬ)ײBM,nW]ܴJ &TX>] ib8fn-nHm*{'ZEa $!^:CbtrIW*N8%ˍ%} &' n[Bĭ0􈝄=_08YDC Tܮ}Wc d&M?3äX?89!q&w,dϜ 0^& k@㡍?1뒏y~M ~n 8K䳔.[P֘IzY䦸r7_BrߌʻӑF 7c s6@.ov-b6nJ#?ZQ.Ȍew~1J%u>(t:[yw1,lPlř/5(jM~ #,%$ō]b%h& ÷dIYm</#JȢΝ`ur$Ww(p L)(\nʐl;cv3 {A#8KL3YrzoxgRYċ h1Wb7KNyh)_ 0MLee>;7WcdChcI~#غ"Y-$!V'3Qdɦ'jR`ڰMal?WpcVm4#KZ3y| ANɀV8#O`1H'9I9p΁M[s0Ұx;%EP-Cv+ɿz[^buZ2Jlrt09EYF k{+Qkh:M wC۱,ckHX-h܃ѳ\V5{ 6VVtx~ g/ŸG x}]M,oQb 1ߊs황Bh4!dЋ IXTq~L=6u-ln3 HӤ nOHml QsMw̨D$e,õcZнP>;Xv!m,{j0Nxa!#պnu㔭vr{|oDZ`&uQ 0^ݩe<^NS&%sm&rP9={ j΀RO<+;*.!eScHjIZ$(ȗՆjRg7%CvLo;9bC Xt4ZNOoI S{HPݔlX}`V% v!t?(Vhy<%b|&a5Q\,WdGlr ړ$qc-k64k-t@}yڣ馯7cndㆸP!Ų70ҽ6 >9K!֜RBql_[?zݬ6~J5q6ZZ=I, _[ސ|<;}.9P';@oD2{[I]/ӦMyӰy.;ܱIX= SrR 8GW :0ͬyWzuMZkOITo1o^DN "U0QO԰1h o ]E"(6&n"_TfpX^F\"Tl ʫP}eA=W'5\0 jpV(4J+,Gɠ}]I<t\Y[G74"X͛ZϜCO!oErZIżٖL3[39ڱO6 g=P.fCYS(mi2X٤TLZ cT[ג 1-_q6*(Cn}[jAh@P Զ#OCɨN:l2ljZ:2C?6np mB ^yL_p:">rKFnY"N叵_nZ0۳±, n);"OjsqC2XͽHytxb!tGwf>6Ļfl>a;}Lλ ?)d: 6Pt9ay0C9=j6؍#dzobi%+r}O`NYw=]؛O_QÚvIQJMNQ? p$Y8q*59c$~;M@N?@clC흈jUR:üQ C/E5k) !PJ?3ӽI5b7a|>>q*t3D2u  GNؙ(ayC/<+=NZREA'72;㽭7ͣk{aﰔEOO%%*DŢSC;NFY-an|5 ^R'1(\ #qҢױLeaZTOFQl.y8&"(쾌|?<6sV_sbjA`yQӝr6͟Q;Uj%flg}q*n7|fS "|]ofjS6Y-2 fڛu4wD(ʥˆZtOwDs"AXR;DҺyoDn;_sC`NZEWQT~çl5:7)pRr6NWs:iMtt0LDLi#P?:Qf#>~z>M;wTVv:&US~&šiI ά[q@?$}iq zk1&؀Oކ5O}~3QLo!S>[xf1f>wh>[M3sd?zQnz8d׷|k/8e<ڡ.0Kgzb.R eyHe"7p/Lwtcu&ԶM*U).չQŋf]Qro3FI eT|F>N}Oޓ9 bu#m돼6RcL$n Sj+]~qV.p˨3{qCǂ|߬NBL勸#v; :_c0eew#aZU}Fp\B;CJK 3Ex4 ڣkQ僰}*&і'`<a)9D^”}(LG1`1,J.fS"*?P&.9OQDU~hUBl93Na] >/̂s7a/#Ӽ1-:ɩk浤FsK6 fSw^ 锻¼DԻzhy`R^.R WTۡ삺&գ=ehpNCԙIMUʋk}E2_QQkyi1xJ{iD7jvjoi@yih>8~XnmRTۖqw֜h l;+"[;<IpX2{wwvC]|>/β 4&1EiO`+6vSzcbt֒0W޻mL|Dp҃=;)=Oxgt! P/!ъ/" xFl3ޣ~z{D CksA)2?/Li!4e6>Ch abXBpãb7q#f8F΍(ӝ ewOE|IZLʻ-5$acoeqpz0 ҋ &̑` CR3?{OY\yF(@gsHX!u6\ugM9K34['RF5٢9v``| s,;Zx9z9ݭ]MWy<-"Ѹ&Vvx8KYǴD&}4~| cbRtg3EW]!ztR[EeG?LB/~GXI8&7 g " H歐8̸ؠ&yW;mt[xYnf[೺ >$oεNt5bȣηYЛjźN=Z9Y`I'`0kt,j)<*?5LQ/u88lo A(~ tE.ȅYQjo0ƔK'eٖ^W}$&e< !n?v+$P}tq !16^\^5v 5-z'7Tf_XZd$D0_ W' R߽/g:%{r|Ωjtfkv芜/Ps:ؤ!`NY{ GXBbpl~{Qp+XY ؠՋ"%#w'' #0GR\(yL9i}h ^vn-0ɱ FV1;~lȆ=@m0rrVFEτj\tL4Ë>͡ X#-f( 0; )^O8f/P+,rP7aorՌqƪagSCQ(C-k+ }z# GЛ1Lo'I7}$\HqYQz0PI\o z. ѨUij4ˊ˾9|<.KKJf~U5LV忳 5C_4~q N_ ioǢ2D[lssܐLz?е7P!tWc؅@v K v' _Pd"ʂ C۰䆢u[Av ٴ70 ∺kT6n7MAZ,'hG)sZ ;b!L_#ezfd :t~w eV1Wr׆ݏST9'q'n*Trw~ i&>w!y!pvjث) !0@"G~#? tн|*Uݘ,ZWl~I1 rژyMyZBHqV a`>`2XϛV)~cvcu~9f'?4p)h'rHian>g&kEURA n%#DuZgW& nd ҖCcϐZJ88r4OXoφqa].о.xbhnDkE'@ hŐð/@=_7ԚM uoT#2dcR^v "Q#M q>i6P&BMWb0hmBbMtp,kTJ\T {^%~SCvz\S7>R]Btm%ApZ<80&CѤsUyO%n4q2轗\8N-- #IN͹: A}-o$o#jTw6+)/nYt^!i"6ZxOO݁`{6 I"]D&EO7`Hdv^Ҏ>:.x:_%͔ u'1Fq⸬Vvtw_-*) K^m ;`#Dd>\G go>ԋ]A6HSz0&0S ULQ2s ;a~*Tx8x@y^9OSWLC Kk ȠE4E,Ywi6/3jgKZUݽ9+ Bk%8_ ȈVs8 *"tMН%>N)D;u}搥~@~B"_mKZf ^Žb>SXAKUgc?8b5z]]M5zDp6F06}Z*Ԝ*dEITXï%X&𳾚D'>Gg*4V̰:EϤGՋ#4P&&d6etNErViHn)+EWBj"gΫpmHG|togۡS䷈@W`î)^ +QX[)ANjV%B:[yVRP3) J'k*J*>Z,t,b:0KR={if8o >,0NkcJF7 hjDG*0%"#A9OXwI:eko7܁i~) A݃#N["Bt0w . rxH׽ oQ;E6N;N囗,h:X$'R4gXܶ1+nULA/k386בn {>$7v7ƀRSmzXOJ'^>Y~߰b^9ۇo)aʫy%\Ӯ&ԅȰ8Vac,J9s!:k(1nryc$/A̖X@$s紳!8+ENRO6福E6f?.?Z}|[|P薀<<@2&!8E ǝA2 cD">JzK?V=_qBÀ{76C_Q#٣pa)S,?]rj6)dG28̕oF:6-,<^Gٔ:bYKPi*aȾ{Zme\̠4RB{Lƴ@T-bT} `ܛtE>N*N(f%ܜHKrnyUcIFkr#Tu=Dv\|U'ml MX'9T5%T։y`l:qפ.A%dн(\%k`oB5b2Nf􁮛 7;qF];1d"(ӂf >hHS29aכ1A2ј 1etO18z~iZɓopBsrI.0>i]BuD!D_2Mait+ϥۋ_~e΂;2=xl ړhy_‰`?63 $=j^y[Z?~ݏ>E_*_[M>}n?*|_`XNڨK =NVa8+|3J.vɯ0PJHq~I,}_H@/t2t9#8|Q=C\/ɇi~Ij?0W\l u/b1Pḋl-L]ڀʝiMgv+ \X_W}Ԕ*\# WQX7[ Q(O;gޫk0m^Q|vm{g}_`#V yCm;_ةC Ɣ@ﶕfvjq `I+Xí*ʿFqw4?Kqg[/*.rv?֠-=jwSڗ ;b^m ld (FjNbE!/Rqo1sUYzm,^$OS_2n?d}ύfIZZ*Q "ˏ?f7ׇy2;>85,ϬAkӭف[!YEnj*/[P-}ƍrsPU~{|N?qyS#a)_7m,iUErf0_wGQugg3'=փBg O{կ_jq?p?ytwErHαsp:&s+]VhD QQEj"=* t 46F]4uo:W8)Q b3岪V<*v'ڔ`d⸗N?bNM"ECK9h%G-{~`tќ!B "3="t͇lHE Mm0%P&s0 l'1gt'`tzAkz'Au١:Q7-h*jO0)u;b>tQ\l!Z'n0J'Ak}aЙ`LѼ0Gc+v;)-Ol;{*x]oJ]V/VGojjk7G6\ǪI3Ã|oE ?T~Vk;uzkmo^TN}~ŎK9l4vk[oke}~3uUhzUAuS=TLJZ]ob^&mޑj[?8N;tF-'0#k zSRVTT.F?5 'We `&P8mFm}P; F-UK;TN\\|_wj졡8tT;O onlt<1AA>zxjWABU|ʚ>CfǠOb2b:+Gl4 RFLNCd,9&;ڍ93#ڔU7YvԬ^VQ0ㆣGⴉ0G 'LQP}[[4 &.i=,R: 5}ʊ襁Ҟ LƠDIJQo cp!-ri ijhoݰj _;^R3G|{qţo\(AW8~2@*:$R`:+̈́ɤ?,ǕusPqr1 u(+-:=_e땕GS^m#|ntJ!z*s{aVᨓ®Kѧ辵j?ʳM9oR=]Z22kp[D rPgϥvZ\|ՅD6q,.ڃXwNF`a Tv{e|sSˆEz!XTIM82B̩bAL pԔrl$k&Njs5Z"3soWYѵ*]Y*(_0ٷtA^Z2i51/(M?}_$d9{tדy*|o`W3co4ia-0'6(=4́r-.iE^SdYiJ)HLy\yWT톞.]NE^@ENʹ^Vq 4;ĩlc Cm@-ؾx8i"IԾ\tdQg-T~qJd)],bɸPhػtaXE(X쳵>ȧr9M(PWk`3T.Z К'ɂ,48;`06q"?mӦSD'{jDrnHqIJfln^#6݊FzV/wr}&]q8ŶV6v5&\m:+ ,'#D |ł{bY[}4LËd⠻KA.K77-VxG+S߹ޙK̤ib44`|#C2~9-%'>*0elIW, ?Dć +I_4U֒ǰr"{Wp"€.GUFvl(']pym r}YZ.IQX6j`:gg 1y;wn܎ނKkg R2i'ѣo@06w ycb(4g^ r@qN+C`j4}k흪?rbd}b&JKc;,h'Sm" XA QjҼ%aSfڱ G',ʢxBl"HA_VfEoK|ugM.h0Rn.y?Ih(|*dw-_}r+=b6Kɵl{qo $7)ҭ*ERHP9byKI#IMAT- [ K*2DyŘ>CB9epMfod%*t; h ٜ~!.~ j // xz 㒛jz8- Y|k[U!*ɵ\r}q9 ݨbeֳXmJZ%F `g(4 ;8[ML [ji !]"VY__6/]bnH0lYG6Q:%= z&j&C͋8F0 ,ONleG;8YE0arMiGS5:EntRq%tJEHOT]4bkюmDx(9kl8Ϩ%tO{7*YmFCLyCԂ(IzтQNv{@?EdEЖ,Ϟ5^ jaP?k[1 @WnmvȋΘnRF}k:'qTQh%3n}OrS=gvC?#x)638(XhF<ѳj<w 2oZ$KhN㒙kQ=[Ylm=>Yn<OYyvz?]yqkikz^[;=}d6lgOqkG+VNO`LDY Ix0d5>EDuE{{b_~52%a`0@ _6E9( E'$Etاɗse XN{@|.]hqѣIkt?;YW֗4#!4S~W(Q4aq[J b :p. VQ|?Y?8^~>y-?] rhri|`_j0gp;2J8D#GSr@4ʞ-A&j+x&9Lw' lO= w}NϿW+$+OW<^w(czt;}&Ѹ+eY Ǐ"âAqyW}2/Tby[wTz5HhTj!4/LTCxmJ]@Zō'B-ث>pi? ayjMP,h%h/fa{m`{S3[B=^нgvPKW* >B.r 8hlb Έx|1'$?lO`\nsn5Go6럚A>-};5|[jӵ}Z Y>2]FGʼTEQ7Ut! x,;=[&ߞSU0S~^|!e{:RYP)ⶖ=`vUuV8f'7vKX}zL,B'|ܩ+"[Y%U1ZpAzs|HqHUY?+]Uac;r1]z)K ת?"'np;bXW #OObC4|0pz1Ktg^rf*WrcfV4#u[L0E s4wI~򫫿۠z#fYVMRJǣIlLr5cn*@Q (Hx ($:WL "ߛbeyҷ.NLl^וOrٵa}MCHS!SƖ~lxS I~K] |r!t1`B :Z/Op{q*pOV!^Suld;YNֽud+Y !&EUjy h NDivBY@yo}d2ؖ١Kε67~Վ|zjsS_>Bnot uIqׁd Zա2A)KADy2Mr\znQAN+<#f?%T-|^V(!&\^|_ʞ__{ЖQ?ё >5Mu NEIKRf6?3?)k6n8g Gΐw9;އU0p/[exfr{.n. cO?}>ws}>ws}>ws}>ws}>ws}>+RX