#!/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=18a93d371b6f711b375a86ee6a6adfe1 # 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 :=lwlc_ZN| \![ޒmnO&/揇x1\//X'\=D|JZ~30@4 qwearqM89@b єӓ8RG/^0: fޔp՘qҋcUy. '?~ leKY,&X8Kh. fbhE$!%Xޔ`'L$ N}cC I$!u@C UPpNKNG#[:1<Ia0IXsV#YrlˌlË lHa$6hHPxS64-Ø3),Fؿx` xD8?I(+cbŧhdCмihBHV}mX\o5Sgp?4oe`Pgi\]zŴ~mӸ(,X~;4ub7ÞmCjwzѿ1`ÆF%5|.a#Glhl4 Gp` V7zV6^oW3xMd *ЁN#2bkzFH5;܂LtH3TKLAn+`Iɀz:#SAA² {dj0-|cttGX$#)]9YIۺi1WAoA:@$A&; =k(Y@r;? 0 Wׯzƕ8>@8o K 'LqTP4L1x5 2ِ:J L5DJ1U,rw`ek02;3yжjml-x?- zb 2% Kl௦?jj!o咺cux6 s+VX҃E\O0~op:5 wrt|c64ƚu3=;[W s ?HA⢱րNc:"%CS+0w~g' +}|kK7HhE 8!k$71㎩k\o+<1Gi,sxq'ս nfls'XuQ7=v/71 *_XWHd>1,,uǮQY..~-y q!;4@׉A듣Lh?S]%FSdq̊,cLX& ˧4<^-RֳrSZ+>YSFrQAy^.^Ou$GO@dk*w?ANeHH^2~Sg"3D~г |;|o.!qec?jD`&ܧJA.# *33T†pWwJ1$#)egJ>v̎A &?̢ gK:1PIl?XLX$ +Uy b溹wBM`6.| p*kAΓ]YE+"vkt)씺-{.Cm2f}|hnh= ܀$0GjCj҄s JN%sDD M` Wy@vטju,/cKnFD^:V`z5&Dz%ijh %7)틽?GgՉ}~ϧCOXR<@Z*ِDz6Xu:!͆1@d\"%%귆-{4v88%8,=Gz38 bFcl 摎0E5؃˰DO~( Hq GAH `H(A3$D EK1$WPGD8 blMa 'jd6CwIhdt•OH+VoY2]FKm(If8r1QFJd?d}Bb!.oǍ}şq0tvۭV +厁iB73o5O~ȕI0%a!#K/Z=r]lCN;\4ӬNj(\*"Bk99?\6IM6偉ni h39#S^etdaPz=d?"x憐:PBl 1\|uN`#څ'[vkvcWt2;b }8h8// _+ѽQi ׽y5dnŝ6xnhF91Ĵ+C!YA®[B#B:pR+ ;|,NAv9;IU0$$+88;x 4g;uV_ ߣVM]}纊՜>w=^=/?Z&aS+YywhxUuG4̮fLlL. `򮼂J~`J{5Bj ;{ni,]*W?Ok O3|<^g/&C4OK[r#+ܱ zj,g|;p"qP_fXw>Z 4y @'0eGt2džn!>]֬2JUB9^g'-hf OZOZ\&7ON4]|I\?Wwus7~_}fM~!qӜ4-ҋ9Mh0\ 1¿|k*wz),Xz/v4s=1CId!pdt]0:hC<Ս]0TfX*zGO Y|p҉>h?12`CA@G[z,$x^ 0>F~)]}_i`?ݹ)_RAU IZ˚ܽI:{Eb.w4tz@ c7d j9*q|%d~'jC: j=>tbؽfG$=9s`%5/Fo5z%)H Z͚̚昆O&M4:3pk qiLKC!-tG5YhT 큥 -  R17ndKbxWäޒK|EaQE;*.yT(( &0 q*(׸B{BK),6rzsS j°+]87@yz vh_ MR ,Y͓m;j`@vonoͶMjSIT7a9}Aq\/FWu<2 Uŕ٭aH>ykׂE'G澟CU"[v$B88GaI(+i!Л" ȉ89XVʐQIplKkbDӋea1)$ E`aY- 6R44U9HYNj0~K >YM`$FKOC^hkc4;5hc†Ԍ w9X*_|8EO=GN)mlTW]-MaD6M_:&-35ŀ: d|O"iyBOx>oUEKqI~Uz"8uvC)eZZka(_5Qkva!M.>ժg=^vke҆3B斓6z]%@]d(Ve'J+JD SduU$ ,`3g_t:Г[BN0%/e_OjE`Ѧ}CDu:C=dТex>9,K'wIW|ց ۇ0:%FR"(_=g'Uww#z^l2 GN޻q{U "i d'KZВ`I{~6 EKWSUWuW#$;YoZ㈦s?kfK qIwrfo@<]C>.@tn34*oQU5J}KvM̞kf &0pR IH 箘'WE4 uW{ZRN }!IGss|wNd*HF~#_Ϭv8@\CqFKj!?.|Slf} 9ZtQB ބp{oDŽ$3Dզ׌QVؚ|!Cu!u9ZFsQͨYdC|ڸz}=/wlous_sG%5o'ޭv*z^ngk ;Sy#`ܟx<#7YĢl^usFYoQh|Jjz{YZŝw`JPਸ㋋H5 `ꇿуj,JcRzj'XLml!aaլ߁iN2jKsj)4_P}!.* @-ΊyC_.N-"3FE*X*ׯ?֏%|T/4PhWêP`v!~6N]R\2F>d k qXX :ם(  X+r*m4[7ڎC 6rK mL#QoQɃI_3mBH7,zFSLVqT&OH(wA^,|lq8}e) <][^*,%3_6{a\U5cV,L ~LIa2)JgysN׏b .!:cPAxdIR y`Xu}h[R-BjDiFmA9v8Mӻ̂-Ǹo>)<7_" iil:yDj TO7asPΖ.5L˜O JrrM!6] e8-PզRYKgUC Pku.QVcz?9m~I4C 7fOGYYߜa D-}?})Yຍ/eh,R8hS+ yJ+EM ;dnX4XL~cwƏ[^^P}Ŀw[k;=q`Uq jYCgᤍ`ai_[?>*'ATҠVdED6 lNY d,4Y pvnu~U;7MKtSD+2CPudwY]mܙQca#j?].I[SEY4fK?҂SZիfR]bj Z`bD5a֝zc5H ۻ^}gjR`W6Q%ˉƶ9Jbdj}ϽqMk+?_Fz[~B'7njs`'7/!>C (T"s!kLU"qH6ASC(;>DQuѠEiT n0wiWˌOo4SYĎ2: U\Ԩ\jÙ <[QVf0>+E$)c_Վw[ڻ\4J(ת@ ;8WMBJO4ǡKAS--+ގc?ד*ώѿoY2~ld^i5Qg-z4wzJ WΉr^f-NuTX GSb q~O3 PRnް%K{8٠+OLR͐s&%ә o۽Q&>:Y]czpGo(WUNJR&qVU.яq婃-5;WHl zb׉q4'sǀ=`΁dw T޷^՜&c)^! XwܪBЍyЁ<_OP ;3%G;nU EB5ڣ(jZƓk1/Mabtqgs/ IGgzVM# Ek0yLJDݫZOYnS^,G{x3a5tJ}'hg-8:6tBT!񜴵'ĮB1VӻoӔRF=G[sNgx8kMk[R `ߠ:M=MTz|a4JIEj2QϪG{2!)>ޮ< v6pQY(mp<n_9rrQ o((g{ Lг/˺}G"߻":bN}J(:oUaG^:K}{C]b0mB^1fU:, a}^K̶E49 ڎ4W,&s7PSO7500M.gwR0;Sm9ypn\@@ShBI%,@ocT[:~paƈ6l"̒}9­ g}NwppfvJ\LK38ꮬFj0{΍UW= a~<@wqRwfE>9߰_H wC7مu[XȾgSYmQ?#.3œ/?/:k9*c|7\8z\f,-qd%5L(v$,K:sK1ϵe9xi3eE:k/h6F5G|IYľ8s9g݂Csqamt2nL%gq(s0Gm tfRB̫K4y>G+"Hjoel#r| bg^?JB?8J:6{tuf#0E+Jzjh/Xeb)#:fcfetVϜ_4pGO6W< J8w[8j*s yK%Jdb%PiɨBah`mڲc/ʻT!ND2fHAoX !&ܳ|W.ϡOiX Ii Agt] v8v<#`Hz̎8=4'-\gaӮBC!N ˅兪_Zw/(8s[ii?M`턨K\'M<9iNBn '6z:36>ӣyZtS] ĭ8}?g$ݬAm8P8s<;|?w'P$p }« wո% q,,=wyX}VM#>ºre\Q (W$S7v! î;"ckٴ 0˚Ⴃ_<#LpӐv`ƴ)iוJE~rw[t{ջp&bȍ[B/-Y} \c˔+f\| 24e<7G ɴryYgmjJ_pv 5LAm֨Ň+(`+{ӬVSjdqP)ia ƹ^."o 8fջ}]ͨnX[M\q(4fH)q,eW Uy?%΁w*Xqx2S\ڬ5ih?E|Ea-,:M&H򘚣b=0.-49j)"~C7J*d^BF4΃qK<,! .I^M#]bMu㰛Ʌ|VTF ~iN&<9dꟜWZѦrɥ$*v< -iO-זG: (`AtqR;ѠI%`;OI4-$cgTD|@ |Ԭ&=AUv9k^/}/@06Pap%2pp`{;%vat]=S>|-HƏuCpYS]xB=d^>[  B1%M"MLE Fi >A+H_ҍSy[3d"֤XG k'@em5=5=P Sw;fP8w{ɵDzsG0A;<`%Bȋߦ֊ 4Y(@IL_ws|QI%(_(:)jakf|Or•KYuKSs&冗ҡ(I}^O#Ьgx/x( $x`RTؗ;DݔdIMo ^$%& Q{B=`UvMp?4cC,0JPԃƹX@{n/ )kCk8HByfh1 m4So:6>x+ZJ?Esc]ۓHnI@rH+9qųQӱP"S~`ok% `ea a=ͭ)V:/(ai:BA]ZYAmwS0 K4+MHƶ]/"aMqSpUŕ\83Vv: McBO>}j rC gA,{kŨ>z.~5M/*Ep$kl,&n MK u`%?x -[#R?:ILtbD<d|In_ '΢tudgCHalM׻ErB>5CYi﫭l!54+|r/ ++_s_[߫k紐2\|M_2>`SDB^{:C/X'_هqJ>/-vmș+sֳ-r~V&>kwVJポ/|wOxvw3r`G=~?~y/.Er1rͫk'f$;NǑKp:hDT8 eP/n\PGQܛAVјgsTЏ#u *$N*Ga'77J3*U.KUP :6ʹ$ŽXg Љ$ZMGp<:FtEת*i\*ː\=Q2CWc2Nc:}ʁ gUP"EX-a<u(&E39z BViBb>hU(<8hFr E Pt  Y@ U `%$Vp?__-~rNɿoA1XI8Dlty\b, uBk$QXN : Ђi$^ٺa>-l3p *??sFOQ'oI4$'R"O ^V`vKa6/K U-%((y{)+,ֆJOJVtTk" =ehs )=@w"| Gu-f~Vr%7EIeCan #NP@ZR:%$蔕;/ aeyK*y#3a4ځpy;j%4iwF6P"^ί:>Ьjz l4(9E^VP0szlũQ`+])AJݖ[9^?E0:;zk? /wb?p4;P1%CI3o2Sx!5H; ̮xOeo# 8Ax.c j^ .-Ur4СΒaF2cj~QS_mys/^Etq\OBdRNC_Ls 8I勘zڻʿ,W,J,`_}FC0%n],/! KJ Fj4FmmMciDVnk,jq+Xo^g(*ɳ~a:΢_l&T*xWdWdܹ*Y+.b5I'j=zOpltF% u6Sf:ҍB:Eb6δ1{!O>:QLLu>X! 1:Slrأf" 1l8=>3c0܃BpL|yk>{T˟u8+X F!wK͖(JW0ADnljr?jؕٽe)RfRQgötj3EL Z[;Vo2Iu$Aۛn' f}AFS:;Sɗ$IUH*kI?b!RV&_u61[LM. քp&sr^h zC4`zgܮnݵnAIY8+ +U1y3(su8"ƼJjL&~dٙ#Vи{e\7K,TީYxd -3s t7jk.ņcrqj|, 5!7yyryc̛߽EO^01ۋ:/ .Օ{}>k+{|hsKNA=?s } h|I~hdSQyST/vǽxDԳLga Sa>6.axiCbBX8&N~1[PT׬$IyƍV'#Gg] RhhG{81帔{]8g4L)Ƨ܏AJ pimrR "Z&{Ë9@nƋhԗ+',%N$6pF%( 7fZ*5ݞDb;Iow ybSi%R{"]o6^X O^ݱ]{gSZ NTW s3TO"լo79Lև֘P$0]YٟLGE4d18BQ^{ެ&V-fwz-9F=9vfa8K=/mȍ%{-]09}cy|}sxE]V <*=Bt'K _X((S˵% cOfC8Lƽ):1q~Z XH֛@>_/Ce~OyJ<;ة?xhl6IV$16#?Z&ϯFB&/5ӡؑ-^|Y!y4 gNGLSL-[K-߳b {H98LU_s }1gqM3V{[I@3j E5=_@Mr| KI:|Q*m2uCt3g֖XQ+lJ<ϵ3v(^A!{!OT7AtFR-}TI- ] -t s$0 j(vu F+>L.+Gd򼔃/bx$bnʇF_[EgKIciǦT,p|lҰv5' 6df _'#ˆTtK\ǒ" J`#*:!0z]Xi1BчpL!Ҁ*֜ig X_ұgq@%K={f}ڧtUo0`dIp:gE BҨiؤo .GT[Ҽ$<2~h%Л~7̸&#윐kD: kywQ#w(eLOpjAgORc_ zIFq?ΆM<ېYnyn|$NRt=Gc)g"}plL5ba +])>nN&ՅA\4чWa$$x`}G)sS,?#KtPܮ _Z{Dal\fRz^G0YD@Lj[]tC "nZ74!7{<)gI#>~swLe¬dIi߰ db2c!9(_dӂ$y|&5fWo#܄3[[nXOQ9wxLj3wXBɍ9P( _1m[TmKrأeqq.M吳=~1J)޴6ǒ%LYTӘ-L%EhiQCw# wᢊ#LY*/PAr\q&4jlm~;0+X%юtP*nR}s:[})9?$غ6k??)wUPV*v'Gpɋ8 b`WZQkhzF%,ZaC tddz!Ub5 ׺fqv{NrEեC\mXP%^u CL>i<9ƓVjb1x{'XV4kLB?G$ <.ՃS\q~L=4u-l2 HФ nLImwV&s;Qft"2oc&f{4w6C&X2C`US˓+3}NtEݓoRWP}}^ah){}GjHb"7=}~߀ Ǐ*P\|engw*IJScHjX{-͋M+jSu%]vLo;9.di$tX :ªG+9ԉ&5: L$#z1=qIgC%)+9tEDtX3߱{x$q _׈s ډ@ngjir:(KC69 ?-?D˚oj7zsay,Rep_hk|żzvnD[&w`x)n8ԸO 7t&%s)ĚS*Z\=~H[@^k͟SzM VO-;à%17$'ź`z9u4nEspBUfWV+ pڴI2o6f;|1 r AnXk:aV NL0jk@3~?^~SV&$~H:pA/W'Hgz/ jX@c~07]%",i?m4MHFES F"\(c.*BO\D֘+A[ j(-'Qv5x04鸲Tlo0"X͛ZyȜCBv]ߊT \uⰏy˳-㏙6[𴃏39I.EH0THu97BȲ#~EiH2IJI.IL1NOհs-IwNe(ݍ\k,7X-M ^0uP(#*9GwNrtr<^ݨ!n_"/~M,l 'dV{Niq~rWjpRxI=e Hyspvb1t^x3]Jxm6Ihf>k/ ?)d: I<Ρ+Bo}#sI ]`7c,YjĖx&N+q_T" iRjtc(,iDT+Ma9;BC0XutrhT7:CAs+,N&Ռ*od &}@H[,WcGl\'f#!dj~R97=]]{=|m?7 x LAt}?!_6,mwx/ }drA  /#Ng ֧ <>@]@+o1cL=WzLqΆ+.]a@"yIu0 =~O 561oʹ~8vLuL@3B=/L:0wFzMS䒗AoҦm~S|:}L2m /XG,1򃝿`ʒʰ#6-a;/ҫ~LaZlɈBtƓ"jXTT?<Oi`b4 :?ɇl^b>Y?D 'MdEȩ‘UПdaM1g(" q[JLRB;3 Nda] ~/̂s7Qo(cӼ1/:ɩky浬F앒oZA I6 C=tbL]*kmLWXO6y&%F-U *;]PcȤzONY:Z2ME>U^DpeN#-YsE]U~Խ"OQqgjyjAxJ{)ty;ᷢa@yih0>F^F0QԷQO*^n˄Volfr#txf7SV: E4&膱dwTl+ZywV8y?zhSy0JNY$cSV)g-ލt&ز0'zcmL|p2=38)O:xKUgt! P!ъ" xvHX4"K8SCě4#%GҖh3~Gh~m (/q치I_N`!44MIXwãa'qcf8F΍(4FY_#2YE|J4 DmDOۺFհ72Y\s.o{K E元s搷;OZ\y(@gsP*X!u6\ug%ڝO#%83ٲ=`-a|FMXv<ֳ8Qzr&]$s5_5"נD\®,8nj<@@/80$ONz#Hy|,E1!z*%,ʷҿ!52-+ީev-D7j^#ve.:[J`ȞU 맸#u:a&F(04 . ;{Y[>^w1"4^Pqg7LW)eQC´mHzĞpVZhΛ.[|yIܼ=XW<6iV,lV^Glw\Y]D ]a2hj:9 vƞGd;g"PKu"") ;bqR{ʽ~զcQIq# >`zwۍx&!>"n6M]\U !]t^W},b) #%C"|WzqBb|%ԭI0˽7B4kZj3Gc+=|1g-mЇ9{)Q8&uf+A iq9!6 4[CW|߆ *IbfΚ>dѰ$WBH$$Ϩ]E d3IbFyhO\K`R3%Le_(ջ37(QtL?iһX { `sѱB xs>^$U:>!ue4v7<dp G3NT"s4R)KTkj`Z,Dr[X`Q NX5BJ}9EB~ *cp@<==uzhHb0ș% )l~8 h1)BY Iȸ,ZTMH s5?$p\.V}6,+.Rgq]GA]OV忳 5C^4~qIް^ i '2D-[sMg"t,>*Ӣk{NН7ɽ. 41κ_diAbnbDJZVYж!_]HHcp"x+hގ!#DQMS7raa;jLF)Z ;f!L_G#ezfd :~w dԉ b =sU%'q+6^*[g z}{4C;zȼu[ 5S aZ#UVqn:j^ɪ~ Vgkl~$Ęet=mM_߹NSs6D,3bR0w#/9 %KGnfͱK;1:lG@Lڳ s9|0H d&kUVR'^ n%cDKM񕠧 D3Vv%d$8bwi'6 4>,\}]]`%VLq A0CntÂZ<a~ް5M*(ĩ:GdT<ɤ*DFUn+}%m>3Lj(zjEa:$XYzĶ ;Q+mMRyM+Y!sO4Hoqn3\[1iY4&„ z&!ϕV.ҷ4Y|aGSG)㽌{E2(#Ըs|ɲwFe jW;0!Ʒ ݍ ^ ǘMYA:b w]F^"0:,yNѝ*dNOGp d dW %u ݅64. ę4|>3:A!5vޠoSV?={bjgfbqm>(O>{Jvo]&}F]E^NHoa_M#M_i0ۣ:#g9 3f2;Z,vi<[^O뮨Xo<[`2CU ZƄL:2gʺXSw%Vm-szhiIV 7keD絼XTxXAf镜v|գ,euu*yh̨gh; 56e+ 97Z TVE3p37Jڄ;Dډ Ɋ}>7O|܋]A1iM#m(`6Lh/WW e=xg)pwTp9x@y^9OS6WLCKkϠE4E,Yvi6/3jgKZ]ݽ8+ Bk%iḪ_J ʈ>q6U3E|MȞ"%?)_OG]P2]/^HdқƫfehfA8#C8uZ߽+ [O}L>ÀȚN/#PʶF/1Q2ԡ+KFߛ&A>f9 r]|AYRONV @urk6x~WD(BLδ>_ЊG$dĆl0t\_ekU%x[AJjکJe{U~Vy#^uqzC7³m`p̩m[D LaUA{iSf8g>,d1NkcJF7x xjD1GQՐϑF};$NwS; Mф Bq0Гo:~{_x|}TpA wbt{I7{Q X`=BNgY=bzYEl~B"{nGzCa (ZզI)X)d',; 7E1^R\靣qH- J\ZN:U"Ck0Za$>%Yՙ]t5O1qT#y bҦ"ɕS=M_)7oF`K=v>WXlW6_z3ue4+l{ׯAO[㿢VA- e7 z8=T=E^P؏2l ,\XU|c )  %Hq(=6Kb>хgSMsXXXhI"|@\f kƅ'b%r)sC]'&k#}wZ}eU\)ePZSNJ4}yX[Q$ K%eilDbً0;&89Al)"2.0n(蹷#5qhab}gk=Pɇ\4iB8 sUjn]m|JGƦ{Mx=(~H;U}JݻVB  f&2B:k-d`ً+Xqn5!c)V&2-Yi&qJ`88%3 \6- _ph~;C1)2cyW=?8DGhYa؍8NjSQ*i-eZ*;nwFse4])Oӭ<7oo/~n36gy ܄fx8ڸt^{zst5u7cyӿ$Dr`Ö}lg H\7FZlZYtjucuѹVGs!}6p>U>?mu#mcu>W|soÿEN+pT߭ךRT(D' N׫Q]V_)N)ɯ)z SqqI/[~_M2.-L{n,G$|Q=#l_,:<8j-Bal2ϥ堔s#t?jWMܚhpf0; pߩSU4%arfϷ; QO{gk0ٺ`հ2n \.pQe]䦪P?݋AL,j.??s?Co}n9m.?:]He[bM{ymJ_u+],ԛ݃FduLNuoj[aX@h\Bǖ+>RqW/jeڸ^*zs8+?Ɛd{VY[ N(* AIj!;! uM 6N9ׅI^k 6SZ19ʌO(ɸw25^#; 04MBXiC#-ptp$,Ʀ_EP-ѴM adt "t=7"p<#U5k9ZWh䔈)_.`w\=^I:?o9`! ƘYz]HuM'v3d()@J ׏i?Joll@*8/d6 ^е'pZgs/Ya!MaT`d_GH@^٫W/{k|?G/~lmɽWH/S֯@ba>wOuI4 [ ߐ%U!q;TgҴ7,ke7ĻSv01J9t?#!l"nD7Dwx =J݄9 A5DxL!%"OcNgcpl]L:KJ'|")SSbME_*~-V5 RBa];n_ȲFvfpVBMK @MeUʴ}L#e> &]ЭV%=Z4XQ\v) BgϞ-} и{Z*σ!tk7:f7ߨhdN5XY=iG(:‡lIl/ZNٞU]կ?ApϒϮi \~ h+kJoQ1>̚qXIZڀ^Y_GoYuY"xvƸakڟ3 HH:bwH| *?DM`C>j PʊN|-=/(@ !;ޅav*'Of ?)ݣJ.OӞ[nS FI|OAk,!kl?#JvRN'Qfmρn6ݺӃWEyV`zg@K,HC٧#%xD WY8^bv` R5&*T }֠ `w{Gc)"EF2NNHeƫ };p 2˃A0$!,"jjv/:l|=$U! %Hf!ڝXJ &\=aZ~8tVXO)I#pжRW1 [ãWE1# JxLL&I1;G cu6#e )$P2v9F:3ڨ;ofծXYhqQ8C[^mW;W$1Eym]o%Ӱ2IgA'"󻜤RE]U:2q CcydlY/ ccq! DYt4nXsZC/  /\`.Gߠ_6]φt, 5T)!q&W1Y/1ӭp2]RO+jT;a|1FAWAWFuqΫp37r2G070:Lx4šR*)om:hvyT<`W~NYm^ 4B?:kiUvLgǝd՛jc:PJ%GRx R *i, py҇ j`q55%Y2RyV:)18Ft)@-pCNF\TKd&xnooUwtqVo|*hamW *Mfm3]WZ]F 2yiŧi<^qVoOz:0/r[qt"md-̇i|`ؠЀfFUOiD^SdYiJRQy>#Ly\yWT톞.]NE@ENʹ^Va* 4;ĩ`hrl?9L1Ώ{MLy_?;GQ"ܞhLe%K:iGBEznۯfMOQا**V,O*ϪÈZǣ sOz-,1EQ|*wn@XpȈ͓dAx WaOЩC-5M"0a $R+Ūf6 Gms;.^r}ƼmԳ8ŮV6udpxP{sJW9eE|iF64>:Q[N -m`HkD@bS|r9Tp[Zo]UU련(j$3DA@Xs$3baޠG9DL]xcVPWYB:ff=bV6"'+Ad`Kx~+n%lI($]3fj2]lI2[0L,V/%q|D ,F.!:?ZzB`2 6L.O'xbRJqN+Ch…;8%:e&/VlPB9ۡ4]jüv2U)@JeԻ! lM3~;:A;[Ź,(ԛ/U)\4˚܌護~#)b$5 ; ?s}7. .inJcecĥL Jڸ0@nL0P)@tFZ:αqiM?dh@.H 0Y1աP'ocA<!&(7ː`D>fwod*{$v4F￉ޖ (`訰äͯ7L\%:|QC{:aa^ %u1K̖?2r@=!E% huBB͜Q@ Nb[-1[ïۭ]+_e?iٌz91k;|UK)|4wr?޴е(QßT=/;1t)" %vO.*WC(Mp@ϬFMNo|DYu :/V@U^#UZKPt+kOpg-\暐t;MǷp8r<Z;`u,1|q&CZgR-b79eRF"y$읶컜]R^-ګr L-4Drs-ڶ)P|NЊ6qV)'0vgYUI80Rp]=dj*|{O8UE^6d^PE;C=[UWJϹXIHw"󃑼kx/0rV0*rKHuE*8P 얈[chgٜHNjm]AʒSCJ"ӱ= +W0x}ODSg#hFHYoh{Ҳޝ!rf(K`(ނ\)'8j67QM'߀'fJL?1%A7irs6edTԮ goSxJƃ l] !PmT1h$HBgkhߧ=3tVo)E: Ҝ󄗉*َpN}z z+O4t#lknr%O5i-yέj ˭t>;IuUoB7#]ol#0pk+֮nr/F`L ǵ zRc.$^FM|0u[9MVމslf$j c<^3)CZqQ;ŕ+uVdTU;$RLrwP.2+pn;Sծ[mouF +9ӣVo$-|,,wW95xN^G{\E*&bwAHy]z;}׮S6,Oy&g9q5͍!k֓`D=).3%L >@MԦVB`|$7R/Z)t[ϡשm!+rЙcUJ1y6lyCQP #۔ϡRxtFwON'ӕnt}IY;9}P43uN/&u{ 謸RL'N |%_T-n~31Kv̴ЍToEG)ݝW:ǥi#^4Hk: E7xQGsQax@QZGކq?qS`2S~Wlثq# uz_$PF:o&kOZw >=}tOOA7l~W#SFPtK R)EhH-;)E+,Et<se $ֳ݇'O6<^[Y}rƓǝI7d5\X)dF-z7xIc՛{u  xgࠥua_շӍ Õ'ݓg؅+ G= ֿX[]<; OWhƏ+"6)\V 9|U8Ȫ$3AWHcAЎFq兆UJ].,~wW?>>X_Y~ejs}'~UOǜXFP) ;pg4J'O3n~6t`!;XeW!_k lfK S.Ί쒡v?Xs[SmEԘfG.a ?IALq( '$YXQvl 29^ʓ3nC{_^=?&d9?z>:,Uk#_=<9dxƟ>~ i{(?S'o_;>Y*{MᯧO3Vy1)|2yV+ټ@UUC ZխR*q2dJLn}FD8nzu/hTj!:oMCl#oNsl=RK6gmzأ9gRY{n&QLڃ(ٴ=6i{R3c%QJdR;=MޣnjQL߃ NBPJ Q,1oWK!9 F>,v0wf}Xkق¯jK&=Rה{~yp|]WM1]ۧeY,LQU#e^EVAtTt ! x/Gon{i|=Od"BUv7/fح&Vo:f/ U=`%-yzLoBNUM)VD2]TwWL f3E :ee:LB,Lټ756bk;a~5 kMUCKS!E}cKGl[Ss)#$?elȮkst>\mi` : Nq?x'Ӟ:LT5}+Yח^ֽue{Y^sɺx|[1-0T+XzG.Zh%p=Pn·>2ԣKε616.j~WկZ}܊'o?SOB] (=&`MѪ JB "֙^_]ܡN'xЪهM%01_jo*XBR&̟R{p?s?s?sA