#!/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=44c7f673d0e707179ef3fd5082d8507f # 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 \{s8Ox2Cvs:DǬ%(K( CˇM_wK#;MmL@uS璯<~s{}?x٫?<g??)ɒԉ!tg/ M]S :AWf)mb'Ϩkb/{m1K/IcoaGK%y!K,v9,Љo*Dg^fQL,"AVKs̉98Ҕ/&%K &3ɜLFCcfx<:OfP[0v^~:3,Mf 'clƘ> aO hfIc}T`FP$JUƻ |?A:et`L ;45zFrgPU#iYy_Md^vCLi6T(幀%: Qe NJN\)ew];}eEy֦}e,My,[+F0ť8-WEÅc+8wP* #_e!@p~^0\Z`ٴ(b]X%)-޽T l@N^ذcˈ6WmEx:$ f֡~pӓqFuO-a⛜E uBFqTR#e#}谘?f”a[X 쥓:B`Nxkoh葅Zߍr6]_<Ѵȥ<ȧ>3w٣yY?U,79p%hR?{p:ԫ1,.fclَq|BUFDqvnPzqԅܽG1VpK<7ڕuDpf֓NrMX)-yNجUbIs5E)% mҲ]faivMScPZl&ȐDN)25QoBѸE? ُL!͖֔Zc#)ciѲިWB @;./Jh"K.NyH'[+5 &!`z8 C8/`FwoF+ɑVGRD U$Ο_c*$yrFu? j+T|x(m87ϪLa];XL.C/2߉aA(,{,nX*#1LK)]K1_A@HR50b',d8#ȟDp$ h$ƒtyBzh1fp iEJ/$ޒK${T@5'ʋ2U֐>n6EY#!GxpO$AgQ+>;]zXMLi]]ZUS/ ́UL9uy{FB _JB%x>)"hˇrUjUBx5!/"Ұ =3?Rs7ՂN=m,jBUM&gUB]Xȵ%%;baeWP IEJث :PNQU]ŒJI'a u=mPT'1 @Wz)iĒMh)Wvp[-?'J3sjn,!2`G)p? 6xaBKl]gx7wn/IDt$*b/xzMH s1%z)/tc-[(af"jIdt6>tv Y"VvsٶY#I񜮾gb4}Z~_8}C!޼jvKQߑ`޲楥.ϭTqH$_ Gb)iٚ^cu /paMer;IrnѥIt6=X67[>z.xAv^.VYg=WgyvJʄ:'%_ߗCc}of`Gq*&/2rFd& @K ' X5 qR bw.M;x0B9c4vR}k@N#rx bȯU vpbX 8fg 65]IMau^$ B^R2# "=:57fE@EE2o@򘵊);RyRPde ѢoY0B4.>kvU9"l"AjP  s=`Ͽ鱙Xot1Q2IakB͎^!](9\Z<\U,QĂ]+Ӡ!")vb}H ť] xEeiIX<ݪ{wS2C-lӨ*?A`SҺKIv;zQ ^:m:soa yDy쯬*=yRrӉ(]\{~u+!6hqD{W|UߐKS $k1zQ(Yـ V{X_kDz-ꇹeM3=LUrލ[MH vL*r uPXP6]AR6}|ӾNL؜'+'syɏPFc58{M > zr} SaxHU=a/{Ii[pw̭-Oأ{AA1c ZtW#8ؗ.'wg\"w"i{ Q xAHC(,^M@ (2ڈE,Q9jl6<(UWnn ѩQ%8S[_T;J#љ|0xڔF,pb7bm+,Nl^*fq*E"!)={-Ҩ-u? M7?/ \rӘ[)*MY(tJ;mGUM6f3 u.J巗_;y4]}%C﹛LV\l 됪=؆ZUWF\y/$ :t YTKd(q0(tCj( s njY 0t9qRQ|n:;NjBS=%`6/sj0]b/6(NY%Z ^ 67_D݄k9(&jc,^wߨJ̷woK}k |WS-l&w+&U<|"ˑN@V̔tdekV eR8W+x>Zx$;d'ho$jGg 9M/QWEUF%-amuW./ ܳbw)9)GR77 7TXG!2jחD[i^[tNr-e2m^A(BCq?wc,g2L+ H>D .Ґ[Q{ OatCvzu WSu^8)]YΕjαvɀt&ERgo?ZK;H7{ƑE^px$Ku"َ=4ݍhB,e&nZoə$2V}Uݯı/+rzR"}ӝݴt1ꍓ7heg$^|NpzvyV;\{N[NrVx K[Xxy\GDI&q}z)|5kCyJ'f= W^3uJN)~\K\*WWHCQ2lģzPyzSs1؈Yl&ݞ*b˙MrfWa_"s:f7֑ 8svt2;”:2n:vCEE'ḋpn"&C>iF"g ⣅fϹ`q&aJ^(d4ew-r$>*tA5ɴ!2pz1LԼjU⬚pXNjH$Z6h2~6IDh5CzMe'Ii[>T>slABMT6nߠ FPf]i< 35H]("IjU^6 *Κ83y#mھbn@M>:L صO#QhK"UiW^ NoT^ųuHfCMIqst,%Qњpr{}ބeSW#FQϸUϸY|a[ٹ+ge_RkvRyߥkطSZAEtQO,hЈ9]x.X=i ef&n,p0ԆE^t}\eU9@cUtf*OQ}t8LS5FS.#udr>iW1f;"%4ZGœqh<OlHh]ceL~{t@z~?a &9pL雷gyϋt; I&iN`8u6T^$?ޥ kڗaԮȪU7l|6hL$$=7ztk8VUlzD$9XI0>-6g7#7w;޼^;wNW +q*/}09c9]hcōZ?5 ㇾ nB[HP~˭ y B,&$_t+!=ʑwQO&@_ngyc tݷz^O?6N"}5# {L@wHܽߏlT*qO&KsCAMyAl./a6$~?)pF ӐV5I66oO.ߏ3`]on؅`aߠ%L>f8ܕ,,ސn:I#PH~ أ`]P`Ft.:9 Ÿ`eUwVR@gwRn'g!]f,RJXl&2d9|1o[i_! ci/ RQ}-\0Gy|g%E˷jGk+bt@i%%PE(uMܛa@'+ϋr4rlGZ(2smw} ',>ݟN{yJ,?؎ŜeϲOv Ț (HM.wVo1@H۹uG.Eh03vE G_' ޻/W-ɻ|1n]Z!=)Lc j~g}ljژ. t1}R4 (a1R5| ^CߏK_Ks<e|%u0j<5KKu2=].|y{?)$ .~v}^#9= pDS{>QP=ps3!QqUe1̴PUWHp#ye9/З_^9VCi_qol7[?sX,7J<;5j χc>n\2wJ1 KT \ @djM˫L[/3%|d hwM*lTuk3ϋNeקIƷ*' W,ܩV/G Reu8jUB)(Mu1 ^!؂RQj8q{w@}u:3y,"ùтr}Vˉ: Nϳ[ ?ŊZXKL7sUwG{lh[aFkpn}<{PZF3|qϖ[7]\?/nE,&}N,m]jFraxvݯXno} ^ԝ&QNsըCXs[|s] ;=$8ۇ-qA csP\IQH l}7҃ƷFBLd@!{b4 _΢=ʉMXQKvMa웛_}hj4_1Fu|~r4cd^g_uqlpRW_L5]m=O5SL[ڞ D/H:pzWxryċΫ=yݟ.':&^u <}U糶<<~)n*,}"&9ƣ69dc]nd5b8@j i/ier'_|f_qB=hk9'ihK`$Һ?JCŕ!nV",gv2z ɷX"`K dlNMegHK,t˒r@Vx0@n% ֨C{9P D~hP^D3]>"BG ,kA8Ap a.- Č0Wh^aTL@jX5pXjzduU j=|Ӭm&#`Mn:Ȑy(G,$%L8P"5)mR`\CCsmnWCI^OO]߳WKeZg'¼ Lw"WzK`c1krHË2*}JART\Ӑ^5bOMٵ!1TTiO wtkʥƁˉyaJRi0/i Xj9 @Dux`njf[KR/ >8BJR*_0S!xi n>aIt(w?M?-:UcN\x> G7YS޹iC p`&O$)|SgRJc2SATe.ʹ}R+%ꃒj -vT~ď2;rp|Lg"pU.B/1 [19"u{SF\KmT=%6tb*w@зL@B5q;cSe.'&rqdY' )dG~³b@ߴ e8?Yˋ9s,z2_=+FpDޤ1[#."qjĪŔ5;yDS&87e`"a:7Z|{"AU+̮Sa>ʑV,'v9F`q_uq5jJcR ѳK2fCQ h|^ČE˓ `r:5G1sM$v mHx04O))&j:O<5w B2OgTKѣ{kw:qw-GΌ.^S" ! dg"\=k$:7]O#E_x(U 2C˖wclNiڀ<\W*)Sgmuq'q>]SL9 5Ewɐ㊈k^7hpv1rZL:eRlȑEnQ4v]q[AI'J_h&|:u-pwo;Ld *V7Lj$[K.(zcI0pN8 O?[p1f6]$a?~gI~o#v}ܤ{ZǏoZWcV'''m|OxZ?i#8 Ōwi!VެyVB'X;l;N0 Ȳd~P6iOuaᮢ?)/a`.dFz;7:aeqM6Gy<<~S2*B9kK ʹMquDb^429Cl"6w>~ݢmneiLH(H}܃Ka *?Y,ڹ$(NAiəHw /x`sP$(Ɖ!Ad.] PO)2i @d.Hm:k>7򭗝n]i6eoN2a`P _`2eNL|(-&vx-@BzM 8*}cGZ& }7`M@;C"r»b!hPΜH{1Dso k >$ŗӹa :PSuqxcMZI>1T3py<9P;l1P9L >LP ϒuE3W1諒WjǨacm`4W3S${US^zTU Pb.n stb|ȥ;iDZ(tVTu%0`B4I hlo[]0C~i͑u_>OT&%I$=Wm:[$>2E(4#=8ˆꞢŴԀې%. m":EHW dfГUL i P-_ 75+pVg:F`<Y(g3Ғ9dǙ_ҍ*`LhkP;T@wNN1t+0` ca@5<-50o9q|nm6xa7-d'J on<ɻ+5ɞ0]$'t>%K4 ?C>+(jÝ lͪtgZ\&^R#e6\|dR1Rx~('\/Kަ 0nsg 'Q3 єdH51B}z {%Fkyrq<פmGAi'6#@|w~ ؘb+dY^LАƓ>Xb){m(i4  +p4_ n/e&]|R8r D/7Y5mqFLO0 {b%$AhpbcAtbg0*Q0C`w;ܘbx7d %+$4>1)2GUҪp+DL] 'yW@Ob&WUgH BFbxѽӟ h b5-. ѐK`sv">}P fMM-cp^DqMOq؞\E[O{b9=(D N+^=2YBl5 ^ BsRb"NX*M|ebrGEK "0G0,)/ $[֌ l%LK+( um)dϭw_gm[C[G"1<2ł.x@WO=PeS)ܖ6nm>PeyҸU [aV6m*l fmοwo=NyuJ7W?6S l*#-QX7 o11io쿶97~@aw#9.r^R_iwkY)i5u`ݸqTPlg2 4m8?[`v>Hy2rmoX8^OY/Jt::Lx*I$KX JjSE55'IqU܉8)1/.Q"EPvӑ vL:*42YJy '~٥/FEmq]qܚb cDTɃ%}h^Au+huK[唱o iqoм07%Co?RM׋g[[s ^8/N_W+6]ܓw;4j0V*Wz1冩o}wzg4d=K *& <է%cB.GKCm牼96W׿H#Q&?ۥxD7& ""Eͧ'9q䩹ۜK^A潹ovlbtLj1BtR_͆}6-!Ӕy7q3ê҇Q6 V~RGy\IwQ?K-ľg{C?Vx J>|RŇ=m%',`KkJsa/Yf KY$zV{l@1{jf1sGU92(aw:xRϟ>`{vnXrʑaqETy5Pu 3{= &C]"xH꿃,$|53Jn{2tNv_z ^wpY l"{9='@˟,Y‘}h8CƘ׽ fiz׀.7o1ӠSp-'n'(k([ 1H)iBÅ92>N*olM5O⠖hIAmu0t l8 88f+_&|dW%{+EðCL4d%Nnm|QS( ɦ3 E6Wz)-ߜni/lO,`OfYZq3=#k>ܼNw4̞LƘhQ ;Zql1IHǍb0"$]Edazdгx`CatG4pSz;h,4qBU8juTxHrɡh^SWM8>yn|U#S=xzm^vJ5W~N5ߞZ'-h Zo׏fZh:zYQZa u=t5u+Y:hu@[#k:zj{NN'ǝftjA lLU s8zwM&/^ltqB[`#<h&L~W)r濟B!xZZ\iyՊ LmuOMx@-w:OquiVn V)iE`l)707c|h;la@߼j6 UGtbS v9˃K8clM,z-Mp@F0*JWRU}u -a;-)+wM図1e =5"8c1΋tA6L35xyt^ .!%%2ūmpᴧڟK,7u" H!,SfYgvj&'%pttnhE\)bR 㕤 A) `[Lh<0N:NHH1R`J2پ%/)5%!~HH6 ~Jb°{1^ Izv>~X,(ۃ |-Gd_%8 M9~>nogwY3+tK/6p ڸC>hnGQ[JKgL%8bBB25q_undprl >2T R”TġDWWS ̞byWK0!ՔV@29"ϱD(E@Aաi`QΣNXE6.[Ul։1aZsդ4:oX$.tz^zhV荫9:>lbSk8"{X\kߪ,xYmi٨KQkZo{vEuibZwJ\qT'$V{լZ_BԔeSz@TemQ\HÛRk+Z*@0$-wBKT 7+%ǐ@UC[[-Ԫڋ s,'CFvRS0'HD@!)L|'CfsDnG1Y>,@͐!ט {4ǥ]b: Mj/qZ€\rkܪ2(k r8ͯLA|W;/ M-5t>9_9Cdz5+JB`n pܙq64$6];DN3aִ, 6:kCVVe1<` g*4Xc;:d{ +Ӓ';})f}.4n')6+]&!ۄ.*|OԾcSϻad~>n Cy:v lPÀP?5XE8(V"nN^HK^JoP-1t) .]9fVuk6C@HJ o@_,am7 CW-CcouwGVw::ndH| >(ݹzrl6B׎Αd/S?Xgb)P1x)e!{̏+X+tC/ˠ;h2zB41abPCj?NV\kG7/+m{4{4{4{0j ( 1 sa]vؽoRS !&ǘ!Kh7QE#X:;^T%+CzLmmŏ2<\m[X{8ȚK`åW_1!( @XiAREҗ@Ї#~4.{aPSʔW"5O9xuZW!3 udc(yR G }1P:,1s jLjkZBbƩQ `#6k {@69d.-ṯٽfGk.4'p/șigdUeqrp3Q=(R- +ZeBM(LC> #$c V$E6i-K+>I>x f/6ru!9|^s O`,xիg=:*Uʼq{~RgrhhE>aPѵDu:rZS@#% #σ)4ī9^+3.sP~w<*&N{1@:c {mzKyͽ.BDFRYUm6 dņC՝B݆x;.8>(&'<򴏱9KfTe *oFpTx! '+dS89$93CMQJ |4|o{%hyCe0 tvM:'7Rc%iTFƠ*y@,_!^]0Z=Y48mQHH<'i6~#ZWui_ڴ>=|MWGScD.w4[0rB.IFN9⁻Wp?Q[JyJ؋]R5++(*h46[i(;#]nd''ZciIjUncU#"4=L0-\aDTi̒YjS}:67,u_ D~޵K\ %84/Ɔ-8d2̡yG%vho97s#EF|#0(ej$]#AXpqnaCfs~7 Q'}Rݻ/dM M.U;犑s;Wһ1Bm41"/쿧=c(8qކ)!˟R{6_mNk2<^\:}ܒ+G WH^T#7Y,$t(T7C" '@c{p,?*4(}ߑ}RIxwjz 0%Z6XϫP!a#3=Mr͙|jcs;SVnSlx>ķa$KZ{[+nd֡{b$4g`$:ZOqjGNܚNxeA/x9I,1^GdLX2̖D'ҡ m +m>|$i%{lhJ##a:IJp8!#I 4:*3G:=`$.QZ{&! l=[o~ |cx~~$"VԊ U ?f~Z%ɧ1]L^c)Ω5Wː'|R2lYywxBiٙ }If)~ (PBN  ]۴f s h;# ST;lQ;/rj#zWD0& 3S4S-G"~[ 9- Mfsw oHrAe?9*%(QKNxn {ӱ۴KM3ZrFohgbY e Ќ\fe9@O+~c]⩍fCe!%|{2WiEdm pnJau\<^sI>'R<9b`ڰl^i;A/$Y*W,FJ"!#( a9߭DܯBb&^n=8cf{ [K;NqO4)˛exBKz-rv^ d'-Pꛩ \*DBTBV#В;ڌ"z1XNw QI_h2> F`\8d{oa&@ae=Vk%Ԧ[r38 jQ{)U1ʩ( qRd:zRP 藒EfmX%5ҮQ`r/#dZy@\&ps Ӆ˲{o07׵u쑇C1áγ}|t#B,9g}5Nǀ^wG\!@ryyo$f2bAFC|R xwr;;Ϯ )B]4d")U`K9-FdDfp rE?P-p{#?Ҫ&HG"ô 0hj >*c;,u"V5BRJSh:tۧ@{-!#+*2J&L4Sx#[`87lgZy%6z&F?y`&x +|[4sB0f%AC+<+%-LuCRͲh˃QU{CyK^4xj VH_&*}:wUjC‹0 8(@f9&R67ZS3Zu&C/06Wt.y6'?džL/2K_(#;"wi(ǶCc0}&xq&l}Qo7| I a n 63){̊Ӗ3 \Ao~ 7I$ =1IfG΄=K/`ontV;7a|XJ ,è\ǧ,R({)Y;ʡasCRtf/Ʉ@LjiFS#tox6ـs9Eۜ- i< 1+a`nd H @IFoَ;9ϒ7aRfc2;0 }XԷwE~[u3σhcZ[Qb7A C _1&h1DGw(*W&c( t# ifqv,??=kAӘEL࿲Z KQ+ KyN :}?P|+sviԏH;8~×S|~hIb1N;$ ( mk%֩@Ӣ9nr?cWxIIsvtNi*Bs۬kֺi?}Z8pk Qӿ\LbmH3JJŊ@a{I$S2g[5 d+HƆJ9CjRDC$ o mP :qXŚܿR[1b_rBx ~՟k[Q=©'*Hiyw ِbC2Alsxvl7_7Ui;j\RȢ9YixLc EsJGӹ6C1,xjN$9D=%}Y秧4i-•r)+ϪGccjSj(}: EEM4j(ǶmPbٖԓTW%6ח$$Jv`2\ɳYEM| ¸Lleu!ʐnvɍTQ^z'/\^uY~>ۏ?nl=Oޥvf}"D}^9@Uu)~N ܄ڣԦ5'E ?_6f#t, =WL[T'4x0lC;ݫM·c5Q,xmL'Oֶ6'Uq%f^oԶ7`PIRf{ҎRexN샐H9-ۋSgM7hi[P!WMĶpyKhb&J;mp7݀٧2a UaulO:[ GZSnBsYŽ_q ŞC| , k߇;E{y6ky`Bnߍ#lb f裷GiFpbhU~ɀE4]̔ Mo"ffcM#3}jΛ [f1!dS[^5#/ڹ!dE'LNnEP2N}(,w@W!)ş;c[6Q)*,cMiU!:[\eCubS>G}bهIƠ+Y.ލVL͐"3:=[LU񨶾WL=&?*v#}n6Tyq5dwSkʴab`MhEC8LK'Ļj:KyuQD~O`W.7`e$P(SТv @Y]5m՛u (%*OljX|x eCY'U&ڊUqP%U^FВ9m{b $((\p~t S{⌧&l"9.@hJ-&zQa_`vuQ/VU Cۮ* TTZPjTNצ1HvR5x1k6"a+߶S pͯ-h-k\?^^ME #н0Su+gSrj<=v?IvLeO>IƺBU͑^V(<Ȣ44"ɢuSO!dbHKbC ߸ޫ*Bu4)'CxMgԝNGCpBsv7O`Fljp0a8aɲh>glHOk;jfpOUH*NdJh68Nɕ[B%*o{sA!R+FI'XpDZj.P| {Z-ȗGK`NQ&کi‰Hd:ua+;XC.RJi|{p8Sm[8p!䈅3h\jvíӄ V' u79;Rɮ 塛 c#ϹXpO^7xGSR?>FBF'0 KLR~sPU??k'5e809JLrAb:ށfd@1IWM/ '(`BxX5hT %?a0LJ+dN_$)Qǰp,{Lǁ= 8j0J[U$*PU + ؁kzʹx$Vy@I ,s, ưdË .FG(3H3ƣ;f, w!lb2/6,gph@ + ,Fz2U)@4:K$͛6̍\2& $ G(Po>۪0RdMGk[o}HǤ;KJut3w|)U?S>M8QemKWw]iH:bxvmunTa`\߸Lj1P>C@%p:sq<5\_Q2lEtA;mx͊ыژ >ю/ykϐW'H(,j޿!`~0I0dGb:g;`1\'Q. 0䑽3OElN\pĊu`jc/3׏?&z"|hoJD;uSƍflMT.33G9!:9FN|Qw }F~Ds"Ft\%Ωz%x3^$8xV]t( DqQ c _0j/Xlh ؙ36N$g_w?Tp[,FէwzpPzG{W1^;(|tΥ6Qp6d~>6NX(VG9]z_@\+5_SGjVBދACM;Yvt ^N:yMZ<52_ *OE3)COƳ\(.k%F*!Y%c-86>&(?Fl1qofo;/~2*o7Im=)+ =?8T?%(Kgq ̅$Oꓲl@XC%:e }kd @P(A~+3Jq#uIWv(kE9A!;tN > SoUj=D^!xh3dƑ4^7>RumtCRɅ*`.<>te3zΌ$UM]Sd90YJuׅm _h@F_1 ʯin[lhE kBơݐ)EX"0`uPllSD6[. 68ҲAĿ ,mt_~΍7ip`9X,e=?v* Y:3' JQ ;i|D;d.h7_b 7ofFu,Ou%8-mPL􀅂*ɇ݌g0ԳtUU8j"Cɫg˫kD3#|6@&Ro跘 L~_#U$yČp&ećl3BJDcUHh ̫+ ,zL=IbtnNq\VqxYu=45s(Ӭc]>uU=P|qI=:JfV(-~jIy+igb$ѥg FAX. tVRcJ90/xи:$i* K=[ᣟr.GFk'z& 0#gpwRPBUv&>]<w uVWuXH,GG֡AF8fMAJ`c7:# `i]X;XJ@jh4$@ElM}SW~<ОlљW6tj ܔꖈI ,/Zk’̍$sѴ'Ir7 嶹f&")z {"-HCBr{a+р:(cIz *<` ;bhzsڤ{?;m=SX"9iA2FœȠlA3,I+s<}29k+%&cG K!Oرqrcc>J}RJ,2Hsv*_Dn( ޙV۪7KR^M2۞x"ТHJ *D+R!ͦRX)m$oe._ެs&'!>XTg.ˎ–]wޡG[_] bHBpvp̂h}͞)51DB6rlY0MǙKMcnGoPmzYMfSR s$=|;]J'ַȻiԏ=X>},}ݾ#>kk`zţHpc#d=/g&1f|NtɮLNNEI?9A?yOWq!+a_ yOybHB }'@%1^XnhѿS2#-;6÷S Ln|5¥oK g"?hUUsǨ{"azxPb29 W.#v^"<]zxԨgϜ dw樔U59sbZ,IN9t,7"-Kf/JE;[[!Qe ̥!vy0h/O~̔+۪Z5rS%{;}Vu#ms:ZȽ=>#@%/?N 瀬.sYƗ-4ՙ$U뜨mj0JkUWUKB㲨faw3^ SWnʆfF7c>JYy+ \i:fml7vu5_y'۶L ['M& wm$-"TS %AC5yY5u.v"%a/^0?.޴[&mm6ʷأyp]#s[ut&ENx*Nm+@X\C]) tQ\W]@=w]5 O= YML3|*Z*wز5Jm uC&7sf*WCrׇuEɸxY/z,`Ein͒^O&2.B|- /{h?zo_4[G/M=SC^-&,~$pňl::=칈UzK[QY#gu_üj/CJӽ\Tf is/JK46ϠM&)q&)| pOIf_TL-+]Z%K3I昅md*&dz@HpPܜ`j ql@IL\{%C3NKhI ?mn 'jmI,Ŕq|/cvjExp_Holdقݿ t=s pަpնLBt1(id4WI;eg-Gdbku2\8z\ZQ, p(Fo  ky&X4Fth`X۳vHPLSꄿ-Vi)⡨a;lvC[KߝPGLEޚSxz˔?kG_P{_Q^FN kL3iF )>&os膿'=uoC/.|:3Q6ddty4Ű)Kbd'sicD!Ue>G48apDz @caqhnm:X;j=DP:h4;qf,Ӓ-Kf-ђ2h}8sVY8)0{n,} b#yY"S:GSj*n&, tYh&a(kdoB:<9h5;M5+ cDacTESQ;6mH{o$(b!D{q8o]\+&~~Ho" idB豋 %!i#JʆհzgO nȪ<]Dq+MnvfL9rNpGYg0.ݗbVK{rۖ`PYy_ճ]}"EeTā^csOd*Ϸ&.j3u#BS-*ɲJ()Y$s BE2-EU'n4ڹ$&C ³E{+03JMJsŁe\[F[I{?\=U#:E4(ejnB ֱsB]$F@҈&1fA Ȼc 6H۫P3ܠm[(7`KZ dTn8JryR9n@ZIKot#莃Z3WjrN o-ad 푦 YO)\Xtџ̟&(W5tE 6wB 9{ 9sQbl3 rf3)24p{zYvLФP=/vq֢ULg@&M4 a52,IׂAzAA륣QTTS+zc.eV6b`ʘ"I+z:e] CQҴ,Jvq#|lpܟ]hCYǎ!Ԃ7Z[:o$(LQ|[+tzx,luom$%W7eqdC=u a5JqmPӔV?IR"]O G& vUo:Q&ϣ{za" (|#M;cqwC>I:_f4]iGT9FL)4UF h f"^.!{*[ϖҢ!I<'*ڊ1؄W+Ri Ng4 Y!)pxFlxt*re,er 3(kuDbc@ /g3B⻉M&nkႣ]mGN!3)fiR+Z}Ӣ>13.wX"ɎT,d+~\;g+qʎ̀t CUfEQfQ!;^)/1P;2 dz1>5&٥t)=RON v&(44jVt3w Ւw./ɂw9bx)I2NQ ?fU4cKR"ŌKE4,FYt> 8B5@hڀNʶgc0` 9٤B&HPl'=>N̢#n(\:XdJW {\xtK77Sb=.cK\;:h ;H0_`&n|<30k]7'QMrJݚ"`EM0 8%DF!jk7Nu Ɋ y? -&Qx_'Ss 9ϭVIP#IY$>a3(򵦳x3L;eSxiLMr=c7+߲kD2?'N8s ͏sRB`f-IC-|%](䫆,v\)Hy8I$C71]ϬrY[,W|p} \mM4hcBxq)Lf1SSAvD@P`Q`2XdZL47Crash?BkHp3t;$xGy49"jEEj훯U4zjL1(z\"uf[ܤV=cCVcQIxL{6Qink$b3PYݖ0~d؞FF+NbkfFE]޴UorE?1p~銯NLOS1uGGyd1f,tHofu&߻ьOA8[a5t%tx֋g67ryR(=^7dObM&I,-ఄZYTv'iL*>?痵tDd ϫڒq>T8/ Նh=|JD'ōMZ.՗w86~cxcwimhC3xmHO9HJML&wN!&X{ƀqxO(F#6iܳa%;~U ?e 㫥 \hʘωf@nj F}֗RPWr.<:>pC`{+N`ʄNF1 ufגCTt:Ri:"=KHs .J5~ͱJH?|6/CX^N^{ϳݥ=ƅ+ħJIWcLKvJ!h/x(WRsy0/Xmx@W濾'Khf:)< ɭ"4, ciGQB*p&nʒb)w{78.pХz;f嵸q.x606M[(=XDŽ4b q g2]B| :WtCkxТP20P8%ފܔiewfQYEz9ysw3}[ހ<";f4G9P0Q׾PF@CQMJa:ԥS+'&لH&:sn2)E?LLF#3Bh9(K(h)CYc%jJ"Rѱ5 tRlp3skg9铈x{y_FZ||7?NGw߭-hl8Y '01e6*5(F%+3u&|ha9tvxҋC[8 8c;Ve6$Ib?U!_|r9ч!j2m=V3$ g6ʆvF&2>9@k>R 5ȴJf~tjf:L~;:V`_`P@/f K1Bsdt6F icadm%h=XE!5:bhyv)7Q01g ҊaHǑ]aAա@YOqWw[k*~>~keS5O޵[/_uիヽfG{n8;JuWUj=i7; ~{ o׏fZtu ut܅6Z.WtEu+Y:huQ܆v:9mw 'H,zUͣ꼪sf58wEYqh{v9o tN|4aFi)j~X ,XiyptN_ti^19T }qviP:u̠?z-L>=G8a3;laAPQo^5y!K#(:F-= qVvyhclM,ò:XE]V^Oi\02\}WhYUk_^pR6B%ۆ@x%P,ӪX4ڭnVtO0#rQP~ehJAyϋŽv `t{'](L?*ӳ/kEwT?l~:ǧFb/kbX&THN_WWϪ:UMp?^_+kkʟϦ3'O sgj(lQ0S+pT#S('L{kAa-Z¸6XXUO;bׄHk$#0c+ak8L? { {|ϟw6E4]!3í*j[ĢEU($ ym+QG"cHvIε6)wYՎ|Fo[Y_Q?1qV# ˨Ojw_(( f q.y̐2=<[:nx[&4$%^pcs9"K^*70KJ XtGquN(01CJJQwЗQБ :5M-1n6Ow+EIJRe6ws}>ws}>ws}>ws}>ws}>hX