#!/usr/bin/env bash # # Copyright (C) 2011-2021 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 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 '/^isgx$/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=93 # Run /usr/bin/md5sum on the binary payload to get the MD5 check sum. CHKSUM=56816f1f0abf25b8b6e604d9a9b9ad60 # 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 source scripts/installConfig make install popd ${SGX_PACKAGES_PATH}/${DRIVER_PKG_NAME}/scripts/install.sh rm -fr ${DRIVER_TEMP_FOLDER} trap - EXIT exit 0 ]$[ϙu%UvWN,~ \FW*xWU~V \_T&Sѵ#;Ak5i{Ϻ,ZZݮUjU8a֛XS&mԻfYDjZ~Y1§r.<=/OV0%\ӚXU"Gɜz3+I{k!ƶOsM 1-\\6[![|N" X&ЁWD[ u⸁e@X>Ye⥙[30A0ux!0]c1NGŒGfz@=Kنd )L$bZl5"wEVXB?D bpdLѐ@ PDŽQ6<܀,Fc L`w''4ʈ?,<4/sQLQ;^Jw9I4{rz6$gvKD`;(ǣaoW k_){E7 JVHݡ"%tQK鞖 p2a.$ґ32bOaG"}i0T4 ѠSeµٖ*@rwH3N hz]y$E%2)e$Dm)9D@`]TiO`*n6|Jf .> ,ӘPAsa ("Q+S۔qx.U.¶)*(4P1q3ܨضH T%4YxvDr {7U`mFN*e מ>C&q/qcN_=: ux`튀z3֮# ΜvG:EcTD!d|V CjԜ8qʃ,4Iبsʻa' Lv$TgX*5 ^5vxtӝ٦&S(UFJa 3nb&;nc:y{7Trwb[Bopgq˱'ֻ'Xi~خ%΍,~TjFuC#|%@c@gĭQ 4GvGװ p3!t4-s{!5IC7mR@>) yF) zN)yV) zv4/o2y~мL%XH 8G9/]£PiNugqgdwMy `Ml \CY@&X 9Rss|aםoe#5^#+,᧯t3(SIm`(gȼ)8M'A2oҷq.>ݟ877c<> ܺIšJ<)@$'Lng8Z] o`(/>j--ȣA`MH{)z98>w7 f#b,< >L>s*7` g 9%p'D)5n8=X:(dH,/tY"HePH27\.59 7ڈdw7x猛y@|(Ũ !?MMzmb>󈨧4xm%KÈ#T6_yԦO_pm;Wk^K&oFÅRT)#/ߺvXg==*~njdְ "@Y?΁5 3`(l`Fɛ7(0L‹@ޓ<~+icxĖ|m_!EZ"1)fL,qFjHF*+t!kP}8TD\`-'+g-,b?$Gȶ YCNQ{u{}H2VU&@짩 D>Y %%,|'WUekk$MVh49Nz>c{Gnzϥ0X"w2i["p\8FO@!T6drLa_\lp2'%"0YNI+*[$EYa,c0iT!\Pw1"2E2EL[n!*1 ߯n)?7 `PG*j5`B z"&9cgO E|! 3.K:>W|RUpϢStc~_`)OABavp1tDkh=Eq(ņ`EmO[3(ñDI@=[x,n!gy#s CH@%Vbw\a Y[ M2‹4~(pq-] ƽmskZ‹ d*LB,c,18KtY\+-7ﯬ^?i:Rj5HHƵhme-Xztr 90IH֣cg6 C¹3~ 1ɕ&5r ź63Ϣ(l!bS¥Éa, [X %IN/9UJVZO3j ! s8nC DžܕYRC?,hkc\1['҆ut!)nj^➬q ?I~OcJJ_ 5iM]H^9+luZS3 NjZ]=pp%{3-fm/Wxw.w$8|l,h\TvR=W uDV7f^Z^FZQ2HpS;]~._uRk'j~9u]=jfںDcd!TER,̭uPf1F!c EzE5#\o2-R$3=HM[4:?MӃִBAӰQFMM+b_}Qy9Bo)6J;6$z$U C>{[BΠo c+1 ߃‰^b1֛:. @ Ab;ϜW~_mF.);d]sEV:o#[T&F%꿢H! y\Qxd#ɨLޝs6IԦZ8pMwOMY7>CJ""a/Cp]ȁF4^mb̨$G`R*4D71%8ntӁ%TBZ-'Yk&=pdM RbYsk` +O(V;WCש!0ǽ+'Ia1%18⨅+3a 7|x9.csc9eN}{Z9<ʾ(Ե_Ǿq՗󖝜T*R#-$7@Z.i*GIpvnMUWi/.$>ot␐:NT,"Ğh;x(jaU;rP̀5ШUh5ōσC!:+<>G>`č:7Lt#˓fX$L7^AzQ{F1.6:~bZ**ܲ+9bf|"_Wˬ?O Udnk8JrfX|B0x ӻ8EJRZ8fRKVnY-3}Z2Jˑ5m`6tX8u\u;fRyz mm\[+8!1I414`;$ZH `p~״]%act_)OTa.oli+۲~o0Rkjtwy>grr9xw>ZqŁ!G}ldy~̠oL?Ckl<2~gCh1J(GU>w0n\y:twƺf8R_ ߇nl_k33L;3L;; ILVWD@7[& (bJPz4=>}eW6)\}QF~ʇx[eRKEke9o-e&v:lJN[:t:>+>ؑ} !B8Ż#8 ~FFY*%093 ] tsEjh$Ta\fj6R^;K4ɼ?\D( L>1C/f¢dgiea^щT%D-1#x-Fҽ<ă [3㴰D>ݑPZ:<\Vk$j .ҐQ4Tf(d9Ւ$%KP6LA@{Nx6& 2N؃jTZ DFeV$ ҅=T^Xr&/ feJj Z1PSLHT*PVPE`ڥ'TCm#JeBT=^wz' 5[?J_EJ* 4$X9M f?Go #*4X ]vNwc ^`іA*NIS#` *S '79 IchFRw r5|+lu1y(CXo"4U-hht| -'=I@I&kΆx]-kZvY ÄIg&2,ƨb_Qj3馚F̧-I5ς- 4,k5xEoV:2&ȴE\LB0HhwBpz(A!&{Z&Dp€Sl*De q𑭳g767^MSӜM }+Oh׍IF<0N08i},Kw2alh8دO>kɋMY"B  9OQxQv#] 6]fR\] ]ˢ4F@KSCRڀ{8 O>dAf^iޛ0Z=^Z(_e+QHNVyDU,acR$jO`6AG?Џh > 2 EopZT2{:Ut`$ i6 F#u UuXqنOD.Pl:%p3Dk}jojn`sͦńOtufu7A㉋(| 6ma:l@5΍_#wYϙPZRO3va,xCRx<\'k尗hYB!HaqpuzL(=FD?C?ŐEa$$?u^m7y/=բpaw1D(+Ş;??!{rLJUM_F]GJ _mUvOڔ$L/t֙c-:S6O(|}RPƤ7 w>S4;oIwBm=cQ$_]_rY鏏j9q@c08& Si;wAP9c4anouB{.sU~ ލ>2V̻FmQ핔U'z' iIPbºpK,㱼?, ݧ y;ײtDyǨoECQSٌ)ddf?ȶa}i "n۝UȎLN9&l\ZZncC5/5)pK恹uzɰA~ c4uT%g55|?e$ АK. et-r,u's %2(CcƬ6s#/̕;Oa-N(q "_S$4_Z;nmN2siAP:#[U.FT CnKAC 9Qd))x#ОMcI )o%h(Y> 7a>?kgZ%9 0pRvm+UU~^GeiV+n7^WT7?ϩT9*_FMRM;ȪPqNab`RߕBpZVwC[D.5T\{,JdrMc_:aNFx;KkT^Ujz mV$$T~}u$iz>6tgLw6NK% CCEF%x2K#[5\35adgӌT )*(Sӝ'Z /mh-ưd3 o av٥OӐn)r1!9tzdhvSrȜMJrrJwUovcN1?htid\b?}#+=-h핢X x/^8ZdH47YBpϗ1/N4@pGH-~4ZB zoEWA؅ׁ/2GcϨ_8*SO^Q &;` DPGԅXB':3D9kxsED /C; <&u+o߁=*=W.Mp ip3<E%ԢwO}.\/q w-ӣxfm^AidFq6f5DUL=r޺(4vr/e([(5}&ה@U]e  _T J?7K Ù# #c0)~WTman4•pX1"yv[kWڀ%1BRHG+5Y &Wyw[E\f2GĹ,op*jiEg <}3Խi/^BY=ܜ|6 8  5P^%Z\`t|;@mbC脚$D&fecBqQ!$V7~ApH*ه6ms6i !5l~BMk<˚ D D_7B%X1‰ ,w:S*Lv^%M3SZimi'rҋO^W{h_F/`=Go{h/ .J& '/tSˍMR%Jnkihe=Ɩy }o}"dy*!n -%ON1jxeT/UVtd b@q tW&`:ތQv [L7dZX[BzH58BMoݵ  nxlX^$dG}x, G9!nOղk-4A9eeHKC 5eJN Z(@Q"@SO)kČiOwIbҼ`r4V^3Վ߻. .oC'd| eY1c {n63Y.v+ [ g#N%Z优L!EM&u #4l~!-f~MW>'E-^SSB7qʨ?"D0Id67M0;! ?!"TuK?qtBM鳺%bL6rO,c xh^NN$^} A k4/'WghŎDYР9_E SnaGJB^?L"j@B@7+RU"(3[FCD=~x^ B7^o֢dJ웤|s\/=Tap+ͽ_ǡW[dD9~UIMXytCm1te9Ux=By6*rx ݓ+3!RY{0)Uh&,?own%s ;:F' ,R4ɼ6\0a9;\f$IRU :(ԈWV,;y\Šk{5>JiIS淁kNfinK41 ];FYEfw1Mhh2~L@%Yd3>7͠ ϒ̎?\r1l綍kjB4G6K1E. ͎Pe* ;]EolBS~hqCUCUME-ϳ] 6s41&NA˗zu/C$f-Hdljr[1 /k&PL-6P jIMpqwWaSV\[A9yDR”lbq(). P 27eA)N,9x)Xg?; Yҹt :g- jۧ1MO_Y .~E'$\%bgEQc'?ڣf_3g3f?1]w:6%=k ER0atJ 0/[CVoK]n >z2T8;ҊYWJ/;'uU!^G`Pɓ$VjErH(VC=uە4:OuR/Q `n?ckǶCj$)RwY&G>8 =93QK^.y:7[4}m8"XL+e+0|6#V.I> -=iNsj#?K"a'aI0*bPJê݁iε-ڬ#ؘ1]@^~JC\K[TVL{c7FiMBy|XQ]|xlWȨqrt0;ȁR |)[6sl+ТGH&x6Y=[ w{6kNHYxHaK\"Y }gNH%l;%jl\,0H],/%#RN`v<-[TO 5Wv< a'G'Ʉu;}(RV ]zZc10A JD=Ljp% 񡉬ZdLcQsj![VeHm<|P*ky2/>{sƚpntY8گbuLb?ǟS6'BY#h=1-Oy:{zٕJZPɃТOH܊7&V |lamM)S-d: u7KVNF&Gl[~H:ƯZq$v2.^罖}^kУl0h Hsd5Bj0W۳du8L(Y|-=x,#9Yg*.Iإ\L|K[&ӣa9a At4Je6wLB) oOiiʃW6഼+1DR-_PD"2kf1?^TͲP1Pu'0@)J:7@-;RX1#HƖm%\z;fO2b~n U(86:Sqoh.v(P;0HZN]-y)o(_4e>HG1Z*O_Egsb wq\{ٌ֪­Z{ v]v '4/@}p79=<1k{R TdlnD Z#Q*rB`%ڰzTcrN]u #ѫ*$2q; NQ}Yu -&A֒ gE ="# YC,KLL/t4r'K[p=28X[uF^HKE (v~6gԱi!#ЀoFhRgńIJQ5nڤ5&c Ѝ樍:Xz)p[&,Dg9ZU՝"aHarF;O=("u6ő6/W-~`ˢ~ T< oZ*hZJT-pQa#ҡ|K#zG&٧0ʺH@/~F۾-LqNzk6ǃ!^Fd|$-CB,\Q3ĕ412.jAX9~snSߙ-gt>XE5pj0dʋ,@N>|<[EN3y4S*`jc@UZF|б^?h]@ܗ+ȴ_x 4FD:d`P(}H?]hn+1j#(Z H~'R\ъ*p ɀ0qޝ97O}1W(P`pI71E4֠@g!ajdnKM_B1#߂߲]~& k+Սg3{f=gߡ7qwz Mw`ۤ8/RBl%Za'f1pagfwBbL//j,5㶄aмtF6> YZ[77K`Xʠ||xokz-;k8/GXVXMUZ+wSeX5ʰf2ԧʰn2<Ӱ1ҟ(plK}KWOK1o:|ma\κ㎥YbikJVV-3|R;Pr.]-pXђ鈊 ܩrR% ZJ?A/=k*,R/htǑbWEqJ@[ *+58gFGӠ6-ݒhPYrĄ|19PժtZFD']e/_6dJJ7 ƟvcVkC]I}*O9~~UKFw;FzNorb0xr9ftZŤk' )-M*k^oQ(y;i^Տ]O;Mqc cOO5[&؈Au+#z¡:;hA=@ LE:sݩ:W56&dl ?vvNM^}z%r^^H^WDiфOOl.(>lPn[;Ͷ2M3.H>wEc@b{Duy? Uk|a`tbO)qn*;1۱"wi{ƭucˉ ` Sp/zj)k DŽgݺ#:р^6xquT7x f_qͭ}bve}f%>3of7f3j7uN%.>5OtZ?!{ܤq{V]5cP8=8KwxG8IVv oqٺ# B-֦*H2%+&`P'R9-N?Ew9k+\w dt:F&$ Z]su2kRh̋qI [rd̢;xxԽ.b( 6aFs6{'* OҮplG^Jgr]ty?f~AOZuc.^86@Aƨ;DӆF)CY^`W # Zbe &T;Wʽr#~}PANLXm7Qpq+[DmqkB™Ut$BS]ʖTy"c+`q&&L- f#C8 c. 6IE!:&~? { IǏPڙ۩@\8hH`BwcՃ\S!P1շ(~O(_5f\7.r1H,*uZ'K:& * :ԑ=h>PxL@ڠҺP@ ʲeasp7ɦ0VRIబTA2j*pwg69|e9M,jk'ϩ3FP^8$50tc#ژMWSȻ6:<^/|!)4dm\|6CD^f59#{k”`^MQKi\2!*rKdQD.Cq!k\ \"JmryIY4ͳ Lz y!d^\Rrܘ'FšhއUz|vH"ЏvO%ab9v19݃ҼjsewTN1`d9@#safo8~N4Ǻuf\g;Db FRgd1\ 64F#d pByxM Ez;4E">SJmwB1TGQS=Fd%#NdŴcx24oS+yE;|i|NM,Sf֋ī[:e/q,]HGN*;Eeb 0\doȨؔ4, Ug4 P>Mț3-Y DlE*V0-hu7InC7q)͹'CL}U/.}bITOKpw(n-Q$Ka2dǥ=d暢d&c'rh " qبͼWMn$0'V37uO:lTxƶrbZ*JIr}KVKn*!빇dג틋l E>H0:)s]]!qQjY%r&YkSxI/xḑkv+}+fu#M喞k=EJ43 ںhۙϗf?3g3fw ^hְG7֚ưL1ߢFߎ!O{~ ĿGFG`t7pڎU @Q,\b/ߎ.Q{տjKM;t~{O*Os>[V!fi{b7 )mGrn'^9:wpEg7ܥ%+`j+sQs e`QE5ƹ\R^$a%K02,BjeTV?^NηW3QX6=rwOw^x|=  rfj\`|D|(CC7"!Z LGN-aQ<(p-Lѳ;G_}?p6;^"^/2W7J2$ :KVn~呾WA{U{տ蝟4jG2 WfK "tz>HwF-=:sZӗ&6jмl&$B/*17MZ_HDOUߎpى'`!g_(˭6ƞ|՘ k 6b+9 6ĶZ"Xm\=:;0ڌ{UV+YV|/-l*i274,Zﺛ J8`ʧtƂ_,ab2qR͆s[ jIXY0F_C2(?sV:mXBIpI~~s<<: /ڐ 59p$q~ѢBoo3}+ Ïg0Dq}ͯ*>|EMZjho-5`r*] *<%jon4e(]% k Wyw@zqbr2@e VZoNS{o͊?7BDoI++p3LGpq9f%F $e(ha;|ƛdq1x,(o`jޑV%q^1=Co`5YhM/nk̻Arvr h0TNn޽y\ @Z笁R*p?) Ւ#WYɺ(`x bqF+vzk?6*kOn]\Cln5pz\QTkW[=rfgdd^XE/q!lpqS!J'UٜD{ :PN΅/J O*6kghR&#ɍ5709o ʇE| >lmS,u+w`]&<z7_IAT K$&TKZC-1 >!!ԣܽ.A1qftV1 Hgˑ?pxsl,i_٬)ޫZTeB.3Z=C,`NEA ߌqWE_8W$pAøL6aq;ܞed6cwV?<\ֳ^vcuf%>3{f=g31F."RL Y fY` 2 WT*ɬbܝ*Ƌ7&Ht1/5?ɛ -T0pH vsjI$h&ORXSk)HOnrAa!rCDyިqԆiKwq285FѸKҫKdSh2BuJG÷ q\O쟦@_yMF{{ļ(CV#kqoW:„Ttm OX"%%av+)t I }{UZ,`9c"QiB(TIU".hN46aCyodeDlI.҂<4@ocqo^c-*^5Y7_Ķ%3@][Dp5y$~(֮ץ3?57n'ҷPQM*P%L9IOSB W!!oY1\L)> BOrlÊz,U[j2BqȳȠNuMè|o ̓ y܈e2)D'](FLמ<.⣥B. 5\#]],cS4  p<5(ua3Zw(kfmPXjJ03 |S5^ to(5GxCH{ ΜOX5*Oy: ʤjkH T: B7Q;"}[xVT& p5ggDVʛ{nŁp "0UunxnM͖QDAߢ\O+E;x iv:aNR50ެ._;L -An:\PR_j<-H KkG(_7VR4 L敎dl&>A DA8nvmvk~c0Ľ0:4zXn:Ѯ#4!DI}9Vny =8h\Zu$cL80S169q}T^ol1Djpf8c,*=]'Ϸv-5:ֈ!fB\Bm㮡IʁfN?'HJ 7:Ǡc ֘U?>L};Zal>^"euoEzde>j~.3NipIFfJ+*w&0n๢I\C4>y(-5 -VÌbĸ%6 b7K-2!3b8À$sT:6F i+?;8'Y$8DeWg"w.))/AFd6Zj,?2hk!6=v`Yw/=1ݨ%O@E&ow/TPuFƀPh"%z[tcS32?0{{dM{Ц c~>YL*][<.OQI?w{f9D稪8|.m @]Â;F5Ba5y$q6 h,hYFl>[A欃iqI.4퓏EEeY#%N=nu - (],+B£KᦍL]<8|]wVu&<"g&q-An]HBH(T9.Rb9-NÖ0s#i q9D)m qo|6`R*~+\4@B]Q~yV^Jl#>ߒE&e@F>rrk͈ xKؕ{P-זzZ. .6$Sq<<83hAwJѳᛗJ^oT De"r)][Z eCb=ѷJBL,$ q8c>Ѣ#޻ +/꯮:|lưS uo|ڀ?3/g3{=^6AҝI=vS :ic.gQ?Q~6 rfu\κ]K cq|vh40jy1ʙjz5Ě:}wWGXAǜxC~9gK~{E?dE?ǟG;}yJߟw^ԶW88;{PѬv~JzиSvMo$ZE$sT9@lZ7RkT UoXQ;4.AE=[Ljgᤂ 8ǘ+_yk'Z; C^:(kq׹ͯs߯o.jiucq$}3U"dڽzHf@WLs$+GqS]L}k·&}k7%Nɀ~?WՃ |ZYF`3cm&`[f`IA-M=A 5Ik249o,(3tJfMVƈ P͸ЦD%g;\I+U'Yv)\UX=LTh?Nѷ*̚~MW6TN/nW")ȭŨpyRuj‰U%rjxҡAٞ0כ,/x&g%w6h9@-Ϸ>|I~F5ΠquU~`? >?{`]κ||(7.i7VVV#ڍd00Q!jT(<߅Qw`@qt^mAMOUt܏9h9߁]8߁)8ߍ~7v)7ߑn6ߑf(6`+SRA6jh}2W- IO4v{EwcmHL׷ }XOIvAwrxYt2Uڇeo+^O怦.0ed[:,o/jMdPal~ؤ˘K*ϖXtw+p)\ë#\b?M`?-*Kԅѭ\|cIaԶ n8CKٸ}Zqa=չ-]̚dM7Se7aUģqEAĂNvwm6fFjr?^̬XP edIHN1ǹ&i'@W^pa 27j@N&+wzN00 6&m/a/4eA׆ Nr8n/,䯄f{TA_<%omN_^me}x5#jҀکRө-s$QR4ܼoɃQ2 C% 7x'Yy}q7V'I7OGg$yk<M뇟O?I t x|C@^XΩ6UZ X1r4c\AGwV$B"]sML?>+0?íP~Ui=c!b:<Ɠ QWEn Hɐi^%.W}N)НAG ƌ C tn lءȍ8G"2޿@SEs+Xstwo~kɛD( S&KǨMV@3cOZRRKaG*T2E2,  ݑ.БLA{ ^eTyN6"{챗大S_Sފyʹ2c Rw5(IwCN\ٿ+:W;WuyR3hS-7]\˜yL8|{|K_i]/T(΋ۙK|dC jme|s)Jڶ zpi.(Ir?b Jؙٓrf;p}fo]0