#!/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 sudo apt-get install dkms." 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=bf959d3161a0c8da0d65cf6a83398ed0 # 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 `^;iwH~E#܀/>A8fqgRacg:߽hCNtw|ZVVyMg΂~ 5u-G'k'Q j'H[% 4}B nP߫+Vws5*Aܐ._y:[%łi@jWcDm'}gƁtm(q\xkߢe긦Gf Ή: KvfpS Cj86'\U䝜/`W?zy-O?g,!ZϏ8KG$.T$\s1BiQ7UB.6 /=pDx [&wޚr,E  @^B׃@DIb9O99ϸn|s|JhHL7I4e"w8BHd+x'!`EB.K}p=HFᬰ1dwlF ex˽ tD*soEy>T~tahy^ D0C~ P!A(QI{Ayj/ϒL'B:Ql>!S`* 0O˕zl<=] ϓ/gId)sF:_3I<=k0ϓ6r=G̷Es *}̉$oZV`_Q҄R5%;lg3Td.BC:j؀ RkV`A7U+՜X|%o_r Ѵ67$X)r.u-fn=؁:I7l/O(Y,IW5*OA}ԐFkN C"N;'a ^\›47*5ۚ![Ӷu`#yBxkn=3X\SR=C2yB|7 ֏x؇\ g\)K d Gf 7_J[A'&G`LGr> mmȌBHoHESշFہG@W_(=ytQ|<©def]at=RK'JJoY~PTxq>+b)OTs(z `.G_4_O c+2ڷrE ؑZ^dAنN?Ha'Q9iCx+cMbcB م $a]Xyl_ :-›1|7Xf]' wg;bj V!|5]jOYX2dN3 Ύv6Efq(xg EIV<ÿ2Iki'Zӿb  Ϧ &fRfLD3eF^fi2r*q5¼ }vm3a'=ѫ ﰞك P`"-$⊆Vf>JӶm} nZ]yٶN&&0Tf!C%w ȅK@jpoRUov6~\-h V pʎX f,sw%#+aUbE֙: 'cM3zܕ2{hi`:B#êLy1!ܿs"u=}֏,PG@߭S7-M;[mԞ`)0n@kR|oY?11?[ba,8B W) L 3ASG@)^ յ?28 29|[W&l+K9_tEF{>Yi sGpa.WKCdҰTHxT-qInHBN27LqLD'rguc.|^9-ZL!d8dXss2e31h,fX|1DQΈLny>1[cnE x̆w# baކ$7kDm?x7'}W + 58mHfH@!. #TD2ghXRvf pblM~'Q ,%W,:{ !`eZh q? `0D,Eghj79#6`hچRQ>XരED]P9ʗ*h 8"5ݜ]^tY56)rZ)9V,K+jnLf0w[W+1CR'#0Z7EXXĖEA?Kŋqz7 a}Y,yL=(\6`IovʃqX@W[Lm"U0؍bGKV3YvfYR$^Z$+[}%ԆAʐH`}T]ʣ=|>ٛg(^$XfM+$:StvO@RS6D*: q)6Q#Ȼ!$Q%;<9 p&6|6x<2F[aV,Q e,n?V5eۃAE_{C2euh. `2o=_]s ,,*x)e CJ4eTA<}n'x-Tj9,ba-QWa:/s-7KbDebuf&ZD%Hfh͍w A8?Q_3 SP1MI#٬O oy|2w5(Td!z ;/ĴvcOZa+G16Cx /1+(#Ĝ(pFE3+30Đܜ/={NDn¤j0ifiJXP֐ĀDwV4>'xn|];<|?⇗>?cwzQ^oIӝ[s;^ hvԗq1Lʍ'Cg'|u\;o|ue^z^z^F8/ ? ,ĝTKc[c} z%Ȼ:L MZɢ?^ޤA`Yju֫ #DxgN  PsO Ϋ6rfe#>XT9dB @I M06BEї+%<~G:L%edI!;;2%e.ܲ:/F](+GHP[G ᝒh]lOO&([(Ƈjr}WT{"..<-vwk<^Y]'p73~KdwȷyvJ ;F갣wqw2N"a"ZIH}Tyv'AH+dJ{H;rb-@\gK=K)]T  &4 $2rHXb kq`rs[myH #[Rqr k*n+Q$5M@]S/pg(V*'Ky'2 ^o((qJ2%tP+nlb +h p);Jݘqnj`QÐk,`qD ߘ5 Dma6H>iS7& \{ :WXK1`('/&A ;c\^D{_'j WdxLi(pe`^8 qLC0ǜcK20t[VP(xLW@6Y|T{׵6dQ n Kn0^KaF>n!FVI\9?Xr%UY0gfRDFFFFdDF4(嬕QovӜjQKLDŽ:\`Av\\`oto0cXڊ3[{ʭ%ˉX~yiV^+L:S24¤bR8yUVbĠ[3h7ON-aͽr0"4XGTm|PMyr@;%Ax!QNmxa?rP{(yki8'<4TD!ٶ *+SMG 7>2}Kk?Iۦp#/g"Dxҹ61Vb3oО[6Ǝ*9V^?kC^xpһmȆ  #xx053g(:lw _$@ BWW մk71E˧d9sOZ?34ds.4=]KD:wI {OԆ,8ɖr_0Q/3~sV3Apـ s8?/\6:n3,AK 4nUL8zE=r"7B#MTwJp'"$) !)'RC&`؂%[5;7"LlUg4q&'1b>%dAcK{M疔6$j))-kGvꊬ%bf+[Y&ܝbanvt=}7"G!zG{в喖TY{H|V5Փ^Bd =X H\HҦl&= E-<ݫU5n iNj|CDp]<n"! FY0E7a˒@8B/htm g-a- 7B1fsNYM`I9Dd1F$rM R@}R[˚Roj\UȽ_PD$~ilrIKiԫ|ȀTC:nГ*ne*4A"_\xJb9-1>.5a0ֶ_O~}?@eկT'2LY.$u$GDw*Y8~NQAnl'͕}ɘXrg^+_*ΞIB 1( -Pg{)o1o;oըJ=>oo7Eպ _ ;?`TCпE}im-"O|x+d'7Uő~sWp߽w}`۠;UB]z^ޔ7Tvp{+[V~gUnJ z[fhڗ ;.4 wnAP~{/mn >AݭLw]R/zTjm<MƬʮlP󊮱CowLBCugVYU/iN i6^Ќ iL7eizItE +s*U_,LƪG4P~Co*֩T&7L Q!gk\Z o?W[{|sz:0ik_>/=K/=K/?\疕!EG?S>.`_tG y뎥T1?|`e Z*[ Rd2Qxoqѣ"Ū&^ \G -7e/X%%"Q} ЍW`*okA^ P7qU+8_Zk6Kgkox֬qoZXtfMiBY52E'5l{}:Mkע?AOITOTOTOTO[߭'|臉8{w;o4:cL|AD*ìfAoeEss=-w&̶R0_Lbl+o*G*g/]`!T9VUlVvw6Wk}Yw߾9/9~W>=/ǛgyR b;[?wOɠh) ||~qظ[W"o~#2sKJueb´!KbaNU^~Nʛ^v* r{"WoF \huނjxFYhߍw-p| 2ӍC^X!W߻o\H M?p`)Oଢ଼ūMoa@Ap2>i`݅svNߚIZ e y(%ú, 0u?!0\o 30$R33Oi¤q263> ڶ$1`1tPܾ3.xS9RJ>`TAApMN7^0C:v3-K`z\ڗܷsJװ."pDTK#n_̶ qmb;y':b /o9.qGFVbفnuX>+]X:VLRGqjhIl%j4yѷPBʅ:Vňɪ|[x"by>ROjI?'tdfj)Od/WcaeՏG{\a[i4Q(aKY+&IѬaFD7h~4ނjzWށBXXuX{_UX 1b}(*VS}džOegrP?;8axyǚccy~V^1X/e'FC=ܕ"\dm5"˵u+$ECX">|ϩ:\D$R:41l8G SD)4Lt H&FQТ,|ڲӿJҥ((X.B|e苐ܡG#(g&uibC71{Tt"B-_m|& }ڀA]C'}KYoi>.@\<of<=qf: i <*=A2]ZQ.@ \Ǻ%p9@.@Gl 1Gf$y Uspf 3 h.@| 44 ǻA3q隇 / ?jYd?.]PEubA0lV*/2b.xKNU+yӺ'L`|}2dewL} b]{,:$4lUzBkv`Ϟ6uM O;-784ԶIl0z }bN=);K(3Zog2kΚJMLvD f2ϭw'o]hwz*E`*u2yxz~D1PU躼ק[{.S1>ն1nhe]q2Փws,wNPv6x"ѽY4Ȓk yUoz7Mo a 5$D~~w}BLwqo\Z-/X*ՁԾ rLWQQ^MITOTOTOTO?8#_g™=` / ~0/_5+C0p=v>vL)1jG i}7aL6As ]/C}3#{Qg^YCs^ap^fp#NvuFlm%v8]ѐ^J}}X"а6'(Qh*LB`!ݦɕ8n"+՚!~bFD" rEܣgكHy(pxyP=9{J݊:qܙBYW؝ªPš1-Ttk'GzfuZ=' 8}ਸ਼<o,r*EX-k肹A=7щ2\yw~Owv9kd( ]r[M$WP$y3vh!M;hLJ;FH RV6[IVT=Ne yf% AA߶Dg' %|)ZE{=(劯'@WLX),SFwnkpQTh -SP)ׯ(d1(Tyћ1t5nMlo q(|I9$`3ݜD% d]/ephE]าޯ!uQ^|\}Gu+sؓrWkq~nRÚD@>p+g.[j9g-2._D̵HWPN6Q No56I8.ZPUB1@1>"Vv3FtH5厴\6hp ZirP#o^;-V@؅F\Ÿ_m%ѣ8Q3sPAnKetv"*2OX3ĀT@5u*(ؒLDmkS l ,߀^'C2I]HnP=$Ln8 hA GA~~[7]o)|P,+fN7\)JKeqs6ACUYbžT]`IXc[6T$qZׂԈ+%o++'&رGl3 DE3N=*) djŖJ5̏$yZ 2(`1\ /%;&#֛1z|'BmlGŸdUb)K<仌"3,r2 ӕN)H.DszX'\Y<,p54-fvx$ AI-E*G5/kEь~@E$`N=kqxrC~lERh;#[`۫ԥ|v 1F-%K% 6{x,;f?g_7}M KSl6|;#b[u=kOtG)+4έ 併`?o;:^1M\ִ3 Od[`x +4`koU)wSdޭLX(vO k':Cьa Ght0AO4p;la舼ሺqmlf!wHpX1@lF=2)Yr佅'*FfC,m Pcs Xv(*8\@,N?jxOQ&=&Q^p#/'!J)0ET<`ׁOѭ`&pDS bB.$ ԊDcܧZنB Y0dgI~\=\"%H`ޓm6a2 :d6 lwhT)*Lজ k)c72l'x8f-$̵-."WʵZ)oym]yee{Ԏٳm~^F3t ~J`CLp۞u 3آ O }0zhGǰg^;uMxE=Zu0EO1_[I){dkLth@jGTyp))F%Dh%N5|nZ<:l2qEQPTGԝ`]Z NSWl((m׊^ `q@ݔ:|ӕ,Bv{@쾖K~a"l\8 A(N4s6 n%2xӈI1?8"拯L"ͮr` j({l}$І՛AҨHmp:GT+4H}ć&=1qg,b0 Ng59++ qIo䏋љs[^o{﫧G8^VWMB٩/z9o :݊ .PXZqҭe|BLAnèFnPR[ U8mv $ mcĵ@{TXX?~-7 hyG=۲P )X+o)~"&W2d|}BW+@'!Y8j F?4w ઁe( na-J@އ#A\^C?F$;^l^09+f..VIOƝ _|˰0 )$BNy-E`Oyd1˿z- ,Ti=i'7.8dJ-޺`u"I'* ˷f$$ˣxkj(ne' 0dcJMD k#ݶ'\vp{ϊ8wгU,`d79 4"<ZאռmI$G:qgPO͝f>'Z&֌QD 2n Gvȱ}* HT t_׶wwqU =fImv0e/gÙzB{Mozcwх>00\ܡ~XCWݠT&0'#f>]/B]-fG wX0f M)k;AjOxr3 Z5c9sBGكR,O|^r3%<|8􏎅\3_rsCAse t+V(`ⲴVapٿC}7=jոmS[׼ކ(RjZ4*U: M 8"@pm|gۖEKד v 5r5-Onbe˸brԳ]6+^捺zORu8>R^bۄ3Qn[ѯ]aF8A in@0F:E{lCu(zܔe;bt%% (Щ^1./EA pjT|jM)O qa}`!#3W{SUhq^ ۯrtl{{{zIߦW˂.Yj@4@4MVgOO!'R^37R'tK2̗y~i#%IzZ~Np߾eHyV8%b%ʍdS0_LÈnlfXy95 f΍qs1D:tc߿z3[Fk.#C МGj7H9%Z9:` ]Tb`"N,~N(Xc8 ݠBLoeC3lf[2#g(l'tO4cYEݤ+"⹴3x o>N/{DqT ,jrDq\Q<'PƉt"z,f}žVUFӸTV OHxQ5_۽H8æCn$XG <(mm>wͫq,h-p ! DS¿"oo@VtԓZO.f 7Om -\o0N.1^~-x]6<~&f`TQczajT&6x4D<6Y D@#Zjg$_bD ݹD*2=dK 7N~bt~Jdc{! ~jnc&(=9t/ 3Wӣ))|n+g;'Qmf4^2lv[ب!`{)\^?(yl`44 NN\# +`lp<Rwd3/k5A!w>xUTkh-uwH\mVu 2]+G/rSI&tL~ ̥ Nhnrk~hS$W>TS ԣq.\ '>cYAnAt U۟5~ 3v%zIkۍڷ2 ]/r^3 5uW O` m>IH:=7ZA eKu Rydb; ה o^]<}7&:O6/㿟V+R Z~߿LJB@VߎÖWŸdtIFm;efI&]=1Ό[eE0wPS_$S9fG/E㓥(V BSֶ, x\.htUwQy40x'GǛ-Eѩ=R65#G[EϹhn./K2V- ͗8M@MSρ#~W$27>@V}\k٫N.JBZn_.|/++A;->^t&mLMd%ɓdgNaRJxMhCu87^u^vzxQ=[xoT^IZCjtwPjI~ kcӑ0H4|0q{\KK{"0YZ_ZRmU5(%zT%CI +bUJh6B"-F9V1Hp-}ԼrI%TO)K1}I xP 8JM}k /M+xPQ4P!7a>Z kDŤq5%育l]c`kd܊l|Qq8Fdf< ;VpPvi? 6cJQNEv& 60\X“cz tr!%C.֜2m\jG =uw40gm'pn/~xN%Bw>?q M\ ņj:j, Xm3b\[Jm*`*2 MZ<;gMz GLjG|% 1@a k:,{Agbx{x<b\[Aap80PbԦ7a '1KN(`(^3}{/D1Es< Q`Q>a}48124dv2a1b̢E^br^]P{T[K8u)ZX4Gun0rȌfT5E9~{ %̗#XDLla@0( seAO;2]6>^xzFB`^y4X,!(e>,9(,Y-jdyVl *['1@ℚh*.Ck8ExR.yI4y,"W'#.:gu2 y3,(hKh onn+*H{yYK,Ȑ4K`QG푵40]wn[# uP'ژj6&V?xgq>yZp~糧s8ϋkr>/>&2>/&a$בy+e.>:3cz~8!<_K ACdy}'zXXܶ`X;!wXy/@l9njyog* }\~YGp  Y:ցo etR)ߠrF݁/+-0%/ŰqNU}9>& D/6R{|B; ofù\@hg. M=G(P NꠜiBBǪ ~9A1VB+J5dR+@yz8hP?"4h]1WhD;W8]PyYTzv(Wm`0ZպjxBY:/?#eU0%/n1{n{EAZ= X<+S^RzlV. {h,]6h[Av wss0B{KAJ1F륐\(/t9oI|i[0j!obp0WedNAbSŒRLLMIMOq&5c]!u.&y[dW\<πAq SW]q;ʦ5oR=!j (ҾpI6@l"z 63 X+|Yd¡nk33;N /73~%"SI5d" FSN>89["ETȺ+pk|-L0TZڊiAUΨH<'G2+R\q8Hr2}|"1Ǣ-FW|V0>H|ZXˎIKS]v&a8eٳNK|Z665N\]H)/}5,a'8i}G ζմ.7Z"Rk5GLIer=\M`;CIbJ&/Y:Ldsˑ\3` .$P9~̩S!3{jHڧ^hD)gC71lҊi"# iN0gߩx ^ $&&0? a1t"F aa+q)m/lE`h0[73,mfF.`su^ggdơ(ta!QC5Dc [Evē޲QavB0a#6'*0j$Y8Ivm AT(w<v 䨶H"/ 94g dj b7S V#kEѯc=cVp4[7Nk.J(Lrufk.fW!ڟVo|RnWH*یH7r gi vn}Z #~:GLn fsr{'0ndvw~!ʭ / R͎}:-P9A5D(Ѕ=̞zLZM҆w֙L/]ky]>W_W_WW^arI=<1}rL"NJ3T.^.w.zVDEq*+8塉kb$+҉L*[2g,1HT .2$ՆJD΁G :%BТخJ{3!7NQ*'ƀ0_ iTJG'5K2i9P0o,aNz>pr:9ޭz=vOs @uN'OB7" }"+js#b=1⎖xjm Qq8tZ6A%6wWtv>(;pZ{HѓmY:n&&4]$0 AK!ExOlM .yWG(N-/ _>F$GaйL 8MB8ɷsG ((aTrc24B†U\ޞ|g"PF-UQ( 6E4O3h4&y##>e%2)L>Xˢ}ןطչ8R_d˞"D23˛8V2*U/=D6}5=.q^ Dz`[kp1۶/vd*dlB`ߠ)Wwyj{\G6S-d#o/K웳}8y{A5ZVkN~2$Z昵!'2[:Q^98^…,Z?a< mQ/h! Q4ͽ)j,+er;dvذ9Ϣ2AF8ds֊Ih0%(KQgK:yN>鯗⯷%]c>,qաȕ4%|ZZ6NY9rI5MѻbzMd(>rDY ~a)i6W( "[hf.'a_=T>oEzC]~+/Jr" ]:0iC=jMתnvӪKe?ҷVoRYT>Kyv _ŝ5Of%9A; ݫ ^ `>/1Ex(Ju.1IC#zI,cldDtbZ9QS1?63VEQQ( H1ёV*UsKaГ;G G҉!=³gϸ}=w"0*.9MP+yhiteZ ͨe|dArM|xģhq7ʙلꃔԏr$%0bNx9MI%P. ,q"L:.;Lz&%G'LcQ:O HE= c)<'q_qCHȓ鹝8SY([8Z- #t}p\m  #6/jzK21/^8UyMٷ|&<'5yrB܆ͩadNx=s|mcdp?۫U9FdGxpi-fU}*$f&NJD1KSpZI^vư'/ ڽ[OWyCp!B e1z1 z!G"D)pE7hAAV1@J)65TT}V)'!xLAB~(⯘`>0=fAE^Awtd  fhB;{& e-Lဂ  /ZFI4D7n6m/fmy-OmPTߊrR︞%? 5)<{|ZLECwx}>sػ=D-I%c4l$l:ps˸=t> '#OEDc ѭ\֦oFEO!^!hQ͋4GK-NG;4#kXʈ*JUse=Ÿ I?4xOVB &1h ɾGz]H~s0unDތ-yH_{+y؂P'leԁnQm񙡆Bc IX.n>X"IS╦'Mr 67B,X?)RȎLf^l0LFs.yX4䉫 JAx`̸W?ԫ2pL IHv->h>ea)"r|؀vo&=w"sCa`y.3]郊8*Ki䁃snpk{>P"3.5Vg2JZ@ Nu0ti–ׯnۖ#t ?7}:cNjD@NK7 ;ΰA/`ʼc %yZh7W 2 Mɠ> '[NBgsPSg^^XS2F/l'4]|9m* 41ݓӪ1(ςU^@dAkϳ ZB/h;>qjK,9$ g_4 "NfL\P3!PH^D- $eXu\>HgnbN+zHS7ȯzITlfXY]$dxEiP[̈JOC}x ƹGՁ\UvY<`(a%%dOF2o)~PE& *)Cn;čђ&zvGv/)ȇ#`;xl:&$QF{Á-vRG_ŤQPg  mӗA-G9:2 |fݽDGc-Z[2?Ӈ*Խ`vw sAOdKL/"U[Rtfæb^qoie!q\N-˜ޝOlZWN_kUǬ*0榼}^x{QND 6QMiGV?T-EZo`H\!׹Wk*he;hU 97]A'Ue[xٳrvh(= tQ;_2cP7<->g gþ`mc_…>ԛ#7:O.QE mc'o-R__̔ :6cm7Q YAT7&d[T||g6e-*jQ{X%r5icE/'+q|D`35\V(12c#Űt5>y^.G_'Moz7?>*^h:^YCWu6rRщEww*'\t]M,Wԁ&U!**ْlOp[1?x^^yyϿ%P\:R8O_|&yŋxdyA^z7y#.fX\2*8?;F3,3I9Te/:/VQlm{ŋU S?~аOM aPgKQP|܌MbűWf/?U6[?y)v&ٸ,q\^)B0V*D$*jjU<+mqhWVT{9-90:ro[[ޝr~݃Uiͺ1^؋+f|)Zz9"=xċLr|2jW, /^'>u!BY4`ح)xB>)QzqO&w W}''7kƻm^a/vbio>=tWlR3 ti_ZzYp .=E}4bocciw 0)=K?BىJ艹4z54֚~8uxͼ< ﳻky6NU3d=4UgF3~͇O'zL0 +0t `8y I /xIn7FOk CǦ6iu{zMTKTKT{.rmy ,NqNp6.s9{&a]Be>Nh$,)#>Vϟ #{lqGms_w&WGu 8=H0AM/;HP$&+Z̪h0,;bb$&KTX(isMnHL(!,(٬AAK[9*~[([ J}i Q= Us 8ΓBR򋬾dc>aZ2?k#WN߀|Ge0p J}VK߳Ir0vRO~OI?'~OI?'~OI?'~OI?'9~U