#!/usr/bin/env bash # # Copyright (C) 2011-2020 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=b55196ce43decc94d5f7c0f3785e1b89 # 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 m`Rnqѩ5/~UlQUW|Qkыjz\?zA?Zy›? Te%8ך)zV{U֫D}:^w鸺o9i焁zĥu<("5-w ndQbsVAYIJuLwU˿%;+,ӚZBt%uS,]gmp>f>wXmZ8$8lA׌,BSyę4 `V8k db;e @X>DKsZP`!0 `\q?4cPiz\}Z܋%>hDn e!>, z@P4$`!6M ǧ b,SM"2-FC-4>y^ Qu{$%gS"HTוF iWGXV`j?p$) |5ɀ}U ޸+/*P@=JVPTفdpNQgrOV?eFM*wƽ ǣ@2וN-_If%{%y44BDVətzNX#"O]$*GJnA&p}X۾j_'%GPg*cU"AI\F厤@aB+mm69 ܟIOh4_e_t6 210i0QLr})A%$FQ( * H*|!;ϵHeP ̦SYnjqTP:Oq}/#8"fD׹ ϖBh|3\k{ 1s>8Ԛ`t> Oq솘SCOhF%+&9čbb!#L͓@ə[Iz$ |L<u>w^!^c^ZGG^P^6k)Z.+"m*JXKV6dUD'J3{x1q!׷9<0B ~BKLRs+I 0v$ ]]AfDuJ`eJ ʔqN3/Ki2 0 f6N0欐/X  ER &qֈ!%6z q)az,2iZuD@ "Oy$KLxƏQBLה˹i?_8:Yh27P( ”/)3nb5"MCMbZL^c?u!~wg@/hܲW,80ů8ǹeϱ0C XF,QI{2a:y)__(?5X)hT0$k([-h\|3̀+f@<%3 z$}73$ŀTib]ٞ5Yq UC>-^P-TM-6½*Ô06țbQB ѐڮ\ ii֎e2걐| LY(%L@c٘Se$F믤,Cql H-Z}/@v@D92"Î >i慤ET'$H*g{n4]<" ttOF'酖&%ig`ρ1 [ŤK[I}eUM_8JgBh$j46)e 9n_T 6Н5Ks 3 . Q888(@X`%a@xJ&5|]y1,|xJ8KկEr Ҏrkۣ EIɬbpkj6WDkSgK-/koAEK]wK-RÅi;byJ*$`fIk]GC (W -epTL'iQx3C;ϢM9x%'Caq3Jx酋N%Me[&D,rmBl,";jf̯bYf~A/"A4+V*jaD{EEp:?Ax)BڑQ;+Xgp5l1vY,u' }2?6 H /,c"k O6M1Ӧwb 6LD-WIq-"-M*X4OQT')K:IUR!VyyA6k}nFpN+V3+O.; |֠_\G$COwFgs"bRI"/^58N:}gaZx 0,ޙ<{U8F@qKG&\ˀlar6~Cn|ĺx0:'ФBH6F"JL ">h$D*\Z1 (-zچ|WYWƗiALြN 5@m/T;W7R|Z@R^Ϡ& : S1OW[Q &m,\[7(z Mf:Wo5Zŵ;;;;;;;;;;wX)ʂSymos񡼜/EikÑ)BvRt_k>P d$nW5LDɀU[yK'MZUf;)W 0hK>cjL R f Ld:' sxuOQSZO4?q?o$#ŗ"ޜ|Ι*@^ G#a_- k-hC,;#zk[lFffHAhYOVaHb.<|öO %TBjwO֬ =iぼ(a=c7OBg;~UhJ20M3/mSmȊMDJ9oٞ18TX$X0qhfm?8ɗ?砸 u/F<^>JTM{Ͻ=Yoy!߽h?{\h.>\ C> #( q'?=~0X(Q`'{>E37qL R`zoLO?ٟ=Tދx} YV9mdKޮg,cu5.:Zߺp̥O2<R Pm Gңn$gFR90n篸v?ngv?ޗqd_"am cN$o#5X[<VkW̽މSUN{?_jAijl5QI[<,Rִ旐C(O_Q5.LF?Ű )Zfh=ۊ^Oqbj\ &X&6Jl1P 5d! ypjI0Dla.6,ʬь6sxm ϸY/@{!e&XF(ͮHڍ`G1gtH1k$LJ:I{;F Bq'oe_tZGpw 'X -ZFGoE@2ݕ:2:Ѳ{22q !7Cl/MA,N;JyJ)dr t( >!y;JZijWTqIOR} ;Ck5RCe4e KVn U( >TWn*JS?%{[0a wSAYBdl:e=-Fm7,}7 5Ah}#T4~K XNq4b E,H\Gd !ؤ1P4p +QHM~fȅWGQRcҥTߊ䦁ʊV ,ʍm؉*2OR@U.M LC3< *" BtE}M5܌ȝe5w$ F.*Hbq̇DzS5U{ LdP jZ$w?g,+4|Uq41wUml!<Ϲ+F[@&H>0b,F6U&i*ԬiSSw6aPM`NZ!>2K˒Z~iEW/#J4?=`0 *)4{^h^N|oDX[f+ՠi@''65kbu3SFM`r˳dx8rjؔ"tMlʰZ]71dP#Nҏ^Z4_|{Oۑ… -90`닀^L-룋][άZEU$%]t!Wt h8J Y\]k)9klm ^ό8c̕xAdtW(>a$=jɫI-WzQ`ֽ_zXM͋[_Z hQy r0;''z?^^v{t$ ւ *ӨRcVQ ]ji[47ʙ𛡘ZKKWU"ƛA/?LF PK\!hCЩ,&=ًY:5#^L`FrF?@uz: Vm[n/Q6:̵dJjfB"-̆B1~湾;:2آmB帝VXnrxfq$_U,Ih+?s9Pr) &hgC 5H{!27bzo=u#^.YJNj.uPÈDHNjBW0혤,Sn"VfNp`UB,TJtR'lJNw =h*HEݚ$* vn*!Z#i7b{o p"\C}$/PTsMJOJ7}ĄjAgKL.8/[WU0X~[8fbgzcۺVJ޺='?8 ]RUQ84";Aiu~֖ε _#zU֢aإ板p UVc>Y an<+PX}j>3]hku!d3pg8Y:GȆ#(H5zC>Q%,ؖEYZ k5z\4{$i]9{ # ~ @*h=n%}o*d\dHKFݓŚwNO[)}k t&#wZUvOamJ([(\1K@e>LAi)*_TgTpR?G*_};髯!w.tYcg̿dPYV4X\Qږ5󩡁s49t@c8p yZMTʥ G-'YH/I7ŲzXACr0%miRH]xoڰ]1'k'o@GBBFQ醾jr n@T.zB_EL駖 kV[!m}jϷ1[Uo=+v8A-e4tinodւFLDy~Lj nCo?{$&*ͭVE ^GoY|uB{/)2P_ս*sUwi !$O_5NRRu?Y yh$m`WzwZ.(>p?qT4[n?(a{FhiQ"cʬyʫ]oRZʦupEo66nx2 G.q=4̭cԋ ţFpQXpvt0@G.mw4S#Rw2rr4gC< :M雱Cc,p/̕;{fӳ#h[6p8rEgbH*5+sh19:!e7ᑈmFʶ U.NT½ cKAG(03 T1Yac ^(oބ[80+tW7m"J%]mY+)j帺_N7\fTd{w^WEN$D{E4$ۣW1?kŰ<:HFq?ÿ4Iݣ(,P%XLKUڄuy[(a9#fp/KuF)Sp($h{#Җ\ω;+x{5 1BדBi]n*0>Qхُ@xt-#ϱY<,Tr/VUpJpU}%/2ƣf_,4%l[KXsnh.,5ϛVY 2sX5 ϵ!Оk`#e܂V6';͛:.pDXQep|K*|9]y'ϣ{17/Ņ7uyiu V$u59@K3!S&CyXcm嫳uwDr}rvGlva:Ԍ2mZ͐+͢u4fP,NuL&RuִtZe5QeߤѶ?gjSLT¨I;ɫl۶2U,-j}˶Ы-mRQnKo@qKc&FT·3hXXw\KGr˴?۲ӐWfP0XF"x;Kk\^U,zAAz|mFizbm/RFD/U@w #苜9Eȵ/j^hpUXH CH ;Uy,S'^/O=i#ŋ@M؋S$e>MG.?#/夎m.NgK37mQ9ZgU4hP#Շl2U8ϓ&GWdx%FCo䥧5RW RPPR\kp3aTv$F9{?XlwxHpmÙ")X}4[7ލ-+>O{ =_eΞA9pU~.LptE@3 PG̅-^44"P|Ré+m褝FC*[we2qϕKS@A /" Rj⻧aX./ŠAMظ߻Q[vLme(8&~V#r޺(tvr/e)[(5}&ה> ت,g2`7ށL ʚn<3aG> .w)%2BaRxl[#ZMhf\{zDPqOAMM{dž1+wۄ غ-aBD8XI"dEU-2A$ z2d&W KYళUӊeuR,xϼSB9D'qdܜ|6{-4r ~ugvUMǷZfcxWV ł|Dv> }1"DzmdiFt3 R78ѫaAlQ Q 5:l6?&-0&yFk~pb?"ϝTxDdQzHԇx@V[B'\? @,5K谓6BAnۤo&W8 %+2F0,ͬo|DFe ޷#}҈Cm|NQqS`Peq|R}8GL&^,.b7>`p觅/ÜqRhcnneenJ  Ґ*4դ)|Obp>^GD&42@ec̏/]~8- N |_ԡܖgt=;v_ bۤΠrtwlLnv\q\&Px 8R4x, }ok*AF)•3ئS"zK0X4V^a+ >,t!\c,l XFIRbUɁClIsrpXOW \(iBQ RFšhBq'.d@vҦF{ %SYQ¤w*@y>[cE nÁb=;4GrC!6z(^3!ahF O~)RrdϔMϨ8ENGp,Ol/Z\\./ӁTzc1|.\@vVkZ-K7)bO_{/m2,kzW~ w-g 3?M=מ8,vd85UJ Qԟƛ.*E~9GV0m.B:斊iA2:s7UXK-kUqGs{R_݄clD"BI`% WObgTjMb4x^"Q@ĺVR(C;Qc9o&K(H/˒1 4:͍$KF9npQKk)MwL@H` $UztHTP:cː:ݚ/KUkI98;oyVꖞq`:3yӿ{IPD A-uJeĐN5x*GY615=\}>ݮc .e}ͣ.YEǃnkbsi]zmie\?kt[C}] fnlbZX/=h PWZvѸ{ė!nlp 8Fj^sZ0 Mr411!u[34&pNb;|vTF[iR-5y(I{2H; "bMgyk$GoSsBo%œQx#U./R$땤w6eNMMRVF&zuښYS| Vf E&3aNP5oa?Jw-Gk<O L@ԻDgiZ<M:ǨZÀV7ti̅)ٰ&䑨8 F|d"`7rPCўjGOyՍ(*q]M*vƾAv̷'r/:UVA {gOA͈sVu&"oAlqΞңCqs2@GCB[)Cv3˟A)&a9RIa5*v6XBMU Tu*LLsNU>x-8F,v}wf#jQg#7&Zm{"!Oj(Kv3iFlʣZ*'1hŝ7)%N߭ZZP*p!ۻٳG}rv|tӞ!oWMY[AÄ .'2rퟞ#m`$ŷw\z⋵D&Wۄ\ſ3vtcFu]CtWy|aEXijlf+_ZJyxkhEw;P0݄?N{ۅ9PZ)o'{PլgPe;qf:C|n`uToelVJeA["t%Q{r[*k-h^PIV*.,%SWZA5Rʔlbu) PpEf5W [’jPעu9٩P(+rLU|LA``ņˬ]+Sկ(VR޻4" eEvm"O[{Vm M[mhx'~}4IoI~q(݁)Y?2mt;Mp-#9glE+7ci QJUX"0J@GRmQx똙@ U0H6NKmwA|`8߅6w_۽R%| 5MN -OʥpΕ}Nyv"q•ٲ"=(X*Z||fYFh!WQڀB)s\G4Uop#g zx ]Єk||?o[]Lmpɳʯ"o@L#e,Ey>!hT^s2z}9t? QY |,x+16C4{]'+Jgn"r֊A+[Ca4E֖-W[‡ ֻ10O`Zl#|k&pKP叆>-pr=-uZp&|}`xلs-m5JIp$s^__wW߉ENRLHi;Z;b+"N'bC 8m_-VWh&h-%\wG2(J!FO&Wsox]'4f]-Aǯ+p&++Wמ?I/z3M{޸8O?O?xhavUaG?7bᓇoYCV~zU Yr\JC& lzi7~N_=Tb ̑7\Fst爓6cR@;ǯvٝ~w>N:yMS*hVT50ρLf1Èe;Ғv^vt_k4b:wY?;̻a|f`2wB5c9bpiB/$h0x qWi%0;gp@fZGv* 3q ֑\X0nx 'u|~nNjzPffl_7^R>Ӧdnpb5]7ME09.ANV.r#;~wQHB: wBEC^F:БTu_7"h P=8>R 63,Q ޣ"een䰑 G]8A&0:-o{BkDwwhUk`y/39k_O ң'VvhȤKMW"}>Bh-~)9a{7Ok_bD RQԼ'$%DHg}{q-zV 8me7RC$TH&^@*8ZڻWh@Ӟ»&b+nIXPحP9iLE3Eq;<+SZ[]j5VˤKRrEQ]0:YvV> BgW%r73>N>f/8|!7DvpW؁8OJt5)9ݹU{ienmy74]dĢ +k5oE| }404g+XWv N#M:xD$a[iJ* DIX"5Z"$z;2?3{=g3Wgn v~p!€%4w9;z;}}"?V䤅mRM @5)53bJ_VxSkXOnJ%cƜJ:7D7ꍒN>,,Qꊋjѽ\^[BQ%~3 Y3I=~w~]gJIk{CAQ2qG_ƍJbZ@+k*'?B~}T;#\V/HMQ@t+ U[O ?KpѴ{}9l /4Q0(٪$eãTJuMSD]x4AC4_/ -$0:$͗B&7J G ^t %~cj5bs "m`qqӨ]M^cMbƵ3H4D>BXhUyxS)n 4ac+XaQ}H[f3;1F(qIPkrVLY"gmJ6A0 Ah~R#Sc jCpxԃ#6nA!&2;lpy+|« 4!73my!:Nw˽]7B\'K5i{{e+2 rC%VҞAy2sKletW*QywvpM&{`Q-]cw+zkYL/zdNZ#U|F_n$Xq"V]ٽosR;عHi/l ^L=5|CQe;/>(w/*kAOi)<},Ȟ-JHZ (z-YJy(iVvL{q_Lj */1?{pGMWMA]hpu8*xNWȕ}c%'IY2Yag`?7`QQMP%,NZ*##E&W[% 1=J$#I菇]*nU{j I,}Xu2hcj)0bcϢ@?1긡ow6-Lւ~ Д4\0VYJĈѽF"'lE;CCda;M/G Of p0 Q@:KsT DAsl-:¨KD\zjBO5C/o'PW^oM; 9+g:"}0ՀL:jREc/ӭ8!@U{]$GVJ^f/ ,ni促Q-:ʽiHs}^~o4=q`b-bҎ9K6 +L m1<Ӣ 6ǘ BWM1Mtŕc:BFuSbmqe^h(Als$ Y 7nhI` d0Ľ0J;`4FXcn&F MeKf&1 yҜa/7vq;gx1qȅKjKo{+8fYdbqcTQob Djp2#qEU'KG* -('~̷- 5::ֈ!f'\ ]ÓT͜~2ODє Nc6hO⣓'G JE{O+}A>i~Ř]hg֥N[2/avIfJp2YK B[:LIw'2bu]= %EYyfQqLO[/ΈAr%sT66N دZG $Ij)yg$d0QU(l6f1=S܃PPc7Gs]׭!q'J q GbQ-cFN2 :C: tZt[#/ɳ=oӝG̹'fؠ*&=BUsLUp~^zuaA]~JS3Lq/dVgJ!`#@xj`Fo T0zק?Ӹu!,_hܧˊ'Vs:m|qzD~chhe@*'ޥ_'2]36sXS79:! 8( ϊ3 )R 3҆)EnuQ[_C!M Ȏ |p%4K>̥ڡ'" ~pYFߓqWVe#i,r) x2h[[FV3Xǯ #AZR_[i0%!|J`8tȧ34ApM8/CS/U7L[D.{K[TlHe̴kJL2n6đHf 5wJW7g~r~oLW6WkOVf_?:{= k~ϢgQ߳Y,{'D}/TLxnjQeB10VM*20l46(3+з4cs;8?*A]Q'#pqǨ(KqZԂ#>̰qfrCO$P}iɷwȔ 0F5" ,аq5R~2&tEfh]t߹z{9TfH~ .IbW bdYQi\9U-'iH#_0*02NtKKStw@8\{57E%d{D1 cluWqVn_X3_gF`:,3K0_-ybx@NzIk*H}'fTC8Tُ>'qPOڊğzu\HG/lj A7K@>V#P8bQWJ|sPl|x*9ۏqI?_ڧXS@z4$* R dHcnx@p+ц~i0=]^aYW_..b(dnT⺷$.=fZfn}#\aU| \YݕL,࣊T`H9,{on Ĩ1db$Ϗq?B;بF-AA AѨ Zk?3H,TP‘(}t(oНL͞n\E& Y囑b 3ؒ|j` ؓ9,QK6(!d T&jڑ3Wb?Vp.&VVbal~h V*w!8)Lh%ڈŽCy)ZWN!)Mﵐ8ﵐzYo1r&C䢠eA 8P`<,p!%T|g*OaXQ6{1$]%z?tϼ1F9~jk(D ͜ ^8,#[F14N(41OEl?Av/_oOP ] tmuՔ:!w)7hcM2* U+3̶.NBSr inz0LZnxu,"z'0: 84OO/`8Vets_$]B"Pe4|7H'#(7 hu]{ҝ5,)tuܻ]\s0\-4F-K>uUve>]PZ@P׺WD4<輪 lτ sb_ӳmX1XU#LEVLÚ'ҘF@f', !؇(G9XD 6PS }p Ї쌛!*޳| FխكkV1?v939a0Fnx|QЁ\Jh\XrW_F(B0k>pt%x,RBT4bt@ck~7Bg f(N>P-i#Az[l6jqtЦ+_C X9FQP7wj?b,at1Ukջ ̱(*u6D|pKE*Tf-}V4-'*VvQy8t^WR X>*s=u/אүD19 A^]eJ.r, ©8H=xEPf8F e-:::0H|L[KCߙ=NEE*?ƕol袨dѧ a<&j4۪ɿ|б@^?h]@ܗ+ȴ_y <˗FɒD9`C@>Fxz42\_,xYE{BVV{ ݙi@# 0DwRpq0u}UPA,T {Mt)lܐ::i:i\`%Qd_ݝ RTʶG@ ;3~]%.~VqF1#%ܿ'@Avr/^{;zk<@N+rpВ)u`!rY;:TB 5fх3ԐetPM(K ƉE2ZZۆh`OX?K?^p@ WJPQe98ERC\řQ8voXwˉȵ \+ESl9jIo2P.bL1)^^YSH/UF{,ǭNZSFѓ4 ff:c/܉2tfY_"_vTǭˆVWc O"2Lڵ)>´qҎL 2XVeps=?\ (kKFp${z9l|4 BfY=] !N#r Nvvo׸J9I*bHp1j% U,geZ$Dl^ůW9`_ 6KNjq)\nEyEB]VhH@^xҫa,*2՟j 꺓d }q'4x{{/gPʵ$l2wMUy~ 6? 6]\JwG/)BB6UCV*ְe˓\{E*х٧FCDjFECl]nE$ʡK}ޞ'Ky+[O V'h Hl^n*g"'~P0m1Ĝ0'!{b":Gz}*c_࿩E;m(Ι"2ĭ? XG]^rT\qS9҅>xk!ͷ:dY2`/\eo\}xW|JNqS{M]HuN:s ͡xqC}t#?ڽd2' W=zHVt Dc;H~JM~5Q:.$yH[(C_~9 LJl yu.2e0H4zo7pBc BI00f,:0*Ϭ'>і{L E6A.Ehceu%pk.Q +DT].т!/}6NzOtCF7S &{/dpKsփ+oK< .vN3rY TW)c. VY>~aaݬ͔FM`U.;PkF[Tj$u|g>;<=G>z^f2CХX/iEKp_EK !E騡]~w" i<{攞+E!.]-\D @;0)i~k6cqpF^ 6h%@&zWDo _ÿ/!1߽eth5 nk9O#ibPn\mTOa뚎aB\/qP F\ ڑ;iUXWvHT@eBȞOChjR `8/oq(;zL}&/ݟ%HEh.h%juAz0a8JAJc\CvwV,H]s>(Ϥ왔=gRLʞIٷ#67jMјF ; ZA[9.j8DR/Ӄqx[CE;MP?]YέE;׺Uμ7g{LVgǧo#>tvW H'˪bhAAzS<0Bp QIK^>EO MYnTģ' l";B$=e\T⮔ijȝ{+8fD [9"u,(!rٚtG8%EHKd/[/s_seYp.@( rӭ%%<q1nÕCW%dҺZxq?VVy֟?_GXąlͭVg'@M o1:T.Y.g4u[˽uCeOcgg3 N0