summaryrefslogtreecommitdiff
path: root/ipc
diff options
context:
space:
mode:
authorChristian Brauner <christian.brauner@ubuntu.com>2020-05-05 16:04:30 +0200
committerChristian Brauner <christian.brauner@ubuntu.com>2020-05-09 13:57:12 +0200
commitf2a8d52e0a4db968c346c4332630a71cba377567 (patch)
treea5f50de02d68b5fd4599b5f12f584cf955edc5cf /ipc
parent0e698dfa282211e414076f9dc7e83c1c288314fd (diff)
downloadlinux-f2a8d52e0a4db968c346c4332630a71cba377567.tar.gz
linux-f2a8d52e0a4db968c346c4332630a71cba377567.tar.bz2
linux-f2a8d52e0a4db968c346c4332630a71cba377567.zip
nsproxy: add struct nsset
Add a simple struct nsset. It holds all necessary pieces to switch to a new set of namespaces without leaving a task in a half-switched state which we will make use of in the next patch. This patch switches the existing setns logic over without causing a change in setns() behavior. This brings setns() closer to how unshare() works(). The prepare_ns() function is responsible to prepare all necessary information. This has two reasons. First it minimizes dependencies between individual namespaces, i.e. all install handler can expect that all fields are properly initialized independent in what order they are called in. Second, this makes the code easier to maintain and easier to follow if it needs to be changed. The prepare_ns() helper will only be switched over to use a flags argument in the next patch. Here it will still use nstype as a simple integer argument which was argued would be clearer. I'm not particularly opinionated about this if it really helps or not. The struct nsset itself already contains the flags field since its name already indicates that it can contain information required by different namespaces. None of this should have functional consequences. Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com> Reviewed-by: Serge Hallyn <serge@hallyn.com> Cc: Eric W. Biederman <ebiederm@xmission.com> Cc: Serge Hallyn <serge@hallyn.com> Cc: Jann Horn <jannh@google.com> Cc: Michael Kerrisk <mtk.manpages@gmail.com> Cc: Aleksa Sarai <cyphar@cyphar.com> Link: https://lore.kernel.org/r/20200505140432.181565-2-christian.brauner@ubuntu.com
Diffstat (limited to 'ipc')
-rw-r--r--ipc/namespace.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/ipc/namespace.c b/ipc/namespace.c
index b3ca1476ca51..fdc3b5f3f53a 100644
--- a/ipc/namespace.c
+++ b/ipc/namespace.c
@@ -177,15 +177,14 @@ static void ipcns_put(struct ns_common *ns)
return put_ipc_ns(to_ipc_ns(ns));
}
-static int ipcns_install(struct nsproxy *nsproxy, struct ns_common *new)
+static int ipcns_install(struct nsset *nsset, struct ns_common *new)
{
+ struct nsproxy *nsproxy = nsset->nsproxy;
struct ipc_namespace *ns = to_ipc_ns(new);
if (!ns_capable(ns->user_ns, CAP_SYS_ADMIN) ||
- !ns_capable(current_user_ns(), CAP_SYS_ADMIN))
+ !ns_capable(nsset->cred->user_ns, CAP_SYS_ADMIN))
return -EPERM;
- /* Ditch state from the old ipc namespace */
- exit_sem(current);
put_ipc_ns(nsproxy->ipc_ns);
nsproxy->ipc_ns = get_ipc_ns(ns);
return 0;
|b0~Xn$?mC?[%^`Z/^G1HqtB#nMG')甿*`EmvP.W$G:6bsk,1ke=Z l̡+]`*02L1pG6Rٗ\%X${҇ΞաHïLe'! A>X~C]塌wֿph.NmGbVhv&30ٰQگc1bd1 }Y0ytxՇMtaJ4FΌ~OP{Dc0 ( )TW Y4t4<,J{R}%ўpqؖ#z> glՎIOgO]! F0XW#NBom@xֱ=}y7ԸSo#e:oi; 6,ϝgȉh6?UVaըH`J|T3bu@!-F2x3Ϗ;,OzSJ. oNoFq6r7y(ȑs꫗u@NܕC'o>wi슬 ]Y>\ϳVjlyϫGY5+_$PM q%[)1P//qq$kԕ f IGOϥӹqqٸa7YIsWN-Z葰;|_f "X\N 'u^ t5NS^^vEz=vP!?%Qs&݆Gn)?„_F^/_wi (O7{Nkoox%dAx$ @ 7oK5ԗ `_Ay3rE 1q+ \I=5Ok+}UCȽƲ \ZdmLWbB`~7[E|ql˙U)QV\^vLT;F>(^]HԶѳwajץ;;ޮuCaW>sa^`zآt.VDV' |ji2Gjt[ z^[M[7RqڳHuZͩ Mr9QAf[^|NƓu:L_K3i-;D@aszt P@3Z4 z>Xo]e>VZN_)^|od72Sl+ ]lNLyg 'Y͇ջŘ?H-aA[uǴ&VH1)dRsU䧺 LH˟q{/Gpx8dtkaSjDIڂjR7(eN1gSc6hhW48k/}a'K?B,t0SAH%ɇd@ϴhZDK-v<c&Fmퟄz:P[ <\mIcML\0I:Q)P8|ׅ=(ZdX-(h0&?-\_ɧlWY*I- 3**b9k}E.vY!?uf " z }1`}lW-^4cHCljKK)(΋*r* ! exDl\!tnYSUx74͚n5ߎ)81ٰSˡ<6k_< _<wimxmnO~.t*jyRTSt}̣މE% 49Z m{g.k3ndkGVQⲢ$N̦瑅sh*qߠ] G8>'WG/[晑θshq׮Y`XuS/6f=vib9ZIb%i8B.*7+Zڣ?> y%Fx^xʿM,ٖ1 xʢ춛?[Kw7֎ЪVai Yu:<?ģ02}T+κf}lLj܀쐒6U.V4GZc5^OCחJ4uz}a肞,Jkv(!t٭o~H>K4nPe'/+_HuV}Vz{AZ62YU7}ì{fI鞫>3c );nEsnƗd+. Ѭ`.<^%l@zGcp}=-&ḴH,C[(|Uk)e]g/'xM` _P~$70[Z5㙞βtTu֦3+MazjJF; "$0k:$KK!@:|>F6'IѬ(h^BE 2wdB+LeT~> q\8O`JB ٵl-4Qq r-ݒLzIYn$Q5>#SwJ+urNg%^[Ts5xhe9AMU7ҏ&h}ٯ : #x`y1̕$u}k>|PdmmB %@]Z 0l!ܗ|XӁq59s` =|9w{l4A6kg|&d2^&gLL(Kf3pRCBHםfG3)#5)2aBB!R[{+ b .]֗ 9HX0#Y3 7<:j/ !ȼ3N1[eclqrcKBxMұ{Z/'_SP̶1f]r#'|̜rUu`UZj7&ƒO_FM5 0M Xc<)\ t!x-Q14r:Tvqst#VPfMX|yϼt9N[<.ST*WiAƒѮ::J_B9;#Ynp^x/a2^"ԹNBmB5((#>v󱽲R5Py@@CEUY*gs>sDhvsY]׻}~؆ҥ.`6Iddw7>ԗH!_0 @.]jj:RLϳY`Ib+ 瞬>HB H(˛ I9VD_Ӳ8.>>s՚mU{ bwը Zdڪ.,Z[]լ$T4JޣU.G ՟x Ѩo}̶vP.u𑔁/<+uO6w{fSm%Ty<E/TrɊ-} 7>1p4f" ŢUsSjoU,w"Wןm5 : arކ#GCSwmˇʉA2'q zsWfzO2>qUWd}ukTMvŴ>kn S^(2eٵ۪e΢T\Qfܥ] s/LɱQ ɶHhnOe(OC5V*Q<ѵu$w4$?UZ Qq9 y_=$- -6jhI3cT0ev.\L Q1(nwbDiL:@ͼ>\n[fϴ,tF{j,..O/(x@8,:?;8+F&![yfdLE5v4+m+0 OQ"J,yzyYr>U aB-zXb7tB &jT!O!@ִmnOrhOs\ !ZGWG'RjF?[`x+$(=bqG_,1.lU7[H,t#{C$n0)Bk5[M#*Q<1VWp6mխCj̖jLGZF-ER&$Uv7P8t:Uf]idcϛLsXcvD]qyu ),2Ci#_[_I \{|QI"ϼa }K7gwE6g7I\jiCxt]`Kw+m8=5*t}C Ij gh CVD)~OHahF=ZJCGġG,q#{2Idޮ|v,(8K>x%z!ٷl,% '߉-{MxO"|c>:i:ݡqZQx:|V:Y(8js\}#Ȅ$[fV]v"f $REoK˄ᖮZFj4[N,1(}Z* 4p"7Lkq=DN埢/q숊HI(bL ɉԯ-٠.z9:?ZYۀFd)/\D ܙT'Ftrݖ9b$;<{4 /+'DCvBgӌU4X14ĵX]xLȶ٨uߤy9Egj4ֳqD }]w&h {vrh5HZ PkN8 MI'$dC/Tb"{+&]YYĔč,b~u{7ǽH8DOը+^QWCZ0&7+%HXwUkQpHx>׮ývcp %(6ZdME;v-ϓCC `48`21i;#)w嬽p8xn\N5aqR(HZ`R"}G8R\&V_e1*ɹ^ ,m/༺w i 1 3Q)Jա57i}NQ8qqi:GkLoAh4ǗTa ᐬ`Z{OKB.ЋWLdMOs%Z].F$ShʇKEp߲!7ސڝNgh0Gkt'U^ߥ?Nk7P8Ec'šGt ^Gb{2H"`K '3:uŕWʟbŊb|99tES,$ ΙFH_o^GUY1TGbх3)֒ށrGF^q7u/~1Jwёb-$ p ^Syj ʂwqQBHL^ Wz#)~uy5Y :]<[}lZdžuBloնBz]^VČtq,CE'fzGjѽb"4[CTͩB@qza['v.5J].IZ31²F `hU{*kMZߟap9V`I4)?0<.>:(9XjVf~PQ3q(MK+!{ӧ`{_ffr.˥ tc[-"c)1doae6W1jBvddNNs?ݡPvO"&&Lcibl#Z%9?^)NэaT,rO72W^0It-ZyQ'piEݹ;Dw:$:~f}sGx?(nMiJOg$L"$/A;68 @3"t"+SgD0αng#יԪg(pġ8x?ykF4;OP֌^ 2{,X3ZC/ЧzfH5u> &5$ѽY3޺Gh7 Ad$"011koކd|O4,.<ǞUT-.|g~\6H{p\@X.l\c9aUBM3t]^t HK1Y8篐j>r_B[2D|*z깤)Z>Š$ԧ <xz2GlWQي|i|깓Umy Tit2vpCӨX-]q҅vBPټzGI:̭vnSJfIVxcr_,EIcH"NƼJz^k8kƤIoUYԭ٬`ĬwT{8j*p dZroDK־5`ZF ?'zyS[r-Poz7Psj$ېHcmO}xWJ 55X\]5X+xacM7%.y:ٴ7"ղel6f,ÇX!? R9)[<#PVZWL_HHtQxAJ  n23$,y/C \eT &W:EKaf9BW$.9NzKcVU5 f O窭r22(Y<<ز}i}j<#΀:cPݔ3z|ЖRgEjQ`X`sUa=k%3?%Ej떟e/[/Al 9E j{1DT5Xatg< *xt-]kUTD4+O#k-rjܽ&0Hfj"\n$O%#++Tn֖M^U-̃jK/Cqg27:j7լӛF?QN} :SmPR Si;1#xViZ/ }Xt6觩@aZ(혤fs_xt =5<;9B`#$.BM"P E8"rǩ*#G! 1w"$(8u&5qOw~RK8hEdw-gK@r7w˲' [og ]_b$ 9a|w"zxwBucWIKq*21Kh丼By{mﲀ8,ܺ4ܒ .΃Z+jky &թ_0FIjmXQïF-r5wbp,_5XN 3 9-qwrڲ;1]9AK\':%S$r2/MCuϽ6UFeB4+!7K/B~n2QAE  5D[|Ww۵iaI<b t_+R?9~ù3F^kw 1]M|ا3zEw~ VRds {xaPίnwb2꫷Yr>0v mLPsxHBtEljvtL |gw^$ ;W- )6<r6Ua}ekEP,hw ] z9QގQ"Šؔ''=K9kEod'nϐCQ>j1DcZ"e1͗8u6;^o\C< A1A=ޝo6&dxEكw`ZSMCvKM[jS>P힠ЩSęӮ.sφ./;ӂ]QMW<-L)jJMd3_dj+3h1 \$lx4z(3ʴS-^Tڳzn-VpMBvΜduIq3Ro:% T(J5^4u#k3!S55/T&Ρ^zbO6wIV kw1$ Yniz@O)٭ 56F &rcqk 3=In1rcbqeՊM,=|dlHiJaHtB Ѯ^~uIwM'Xt Hdnz&exTejLTZ'\c9"Ce/Ex3!pk%nHL—. hNqU'CCjpWՃ]ZO*l5ժ7럯͵6b0x`0|jeaxaw@Pхf dFUڤIDp(Ƌ[z`,dB.?᎗蒡r Iݝ!ʹگA}uq?R³jI⒪FwBwPvXD4qq<[51W\ΜoN|eGvlm Mp^N4ǍYzNζ)Wܕ)8jXftN2Ձl"=, r qOj9 ϘߵTg6cfԏ⼼|ouZ4 %Fx'zR@H ;ѩڍs p6N aBz1dr[L5,H`ظFdď?'1BJm%jEi CPBΫA;ڼIj,d,,ژT i" w\ @@tMOo%fF#-Py|=ky{\#p `qV բHі0~+D|b7!Hd[)鄋KIXqMRHdU7:ү[~𗞿QB_/'WQxLȼ7rN$R"C7uq%JV~8O5.|H ' yNwADWhRfj){-=]K;ksrfNQu4k.Ɨ5MHX3hS vEkdH#&рD2/x6%l /KZh؞y<k Z2Fwpua|(5tdI16w&EYԸ#N#65Q:_&{,6]IJ9o|R@9#Q!}[̤'ߧxiUڑI)S}6BaFC&0h*ջ# sHu'ryE R6(ܶa&2L?8F$橽(2 .bȷwY낦:0BE[VAXQ}oB詗Fم\XSIGkLUt?:ԎlɲFl/v*7j_j[4jAr"~ z 5׶b0/]gB š*0aq + =+"XN)~y!>nǣ FITdZOɓ } RMwOJoP'=s.!\+WP*D'U@$4pGEÈ&zE4[ )W<r?"q$5%F}V:U;*S)FpU!9H0hQ8!>BǒF,C vBEaF%`ҩ//EZzv%BdY|BVSjE²UF4:sڒ͸,l'aֈgcAE]/IZkKdHJ%6Ghb =u k`6ɐ5hwu"[_?Wލ#= R4Զc_eUޱiyl4o[ɆnKHW>n&=r+YOh[<w-egPrq>OyG}vw4j!4Gz#>X#)} BdefR\C"8УJKܾ6\h[&w ݽ3 LKi٢qH||C>Uu5)AI3pGH/T. ._*0֠"_; Ɖ:bCǍ4SFKvAƉA*dUܘ]rklBWs)ai~~A,xxޅ()mۈ[.dx3r49$ ՠ!JˊdMAE7L¶sgFZuvI5iatUpSg4@ߙyHi^h0&#%i6 -:M SG 9,{vL/ײMF -6~s[z:I:a͔(M_&кnLiên6SF2EZՑ4}:2`把 ^hQ"q%PJa0,3zw_?6r{jEGZ}] OA੫GkHvfڍ&>,1jD/|e= c8魌(¸3E8O<fvN}W}a ug_v$4ݩ &yB[c ,X=. t0?D&uvŇnK$nDY ɦ_Ep:!+,pMgnǔD|(1PM۠~U$XRtY]@RY jVp?{䩤8ه5m jE+w,&GړU8qYG `)VE;Ja+2t葏qX+XL 5I8Hl+A|M9 i&EX <0K/ԼZ+Mꡔ,{T3 ?X"PT__- ƾ3}BPL.3٘Jz4v]Z9 U,{k0sbz($?}yрFݭⴄΝTmEg+p JruCfEPpY~x5HzUO?MiC8@k_,=Hc.j|y}(C+?:PzLiz1K,M<\[eÆ7 U}{n4e87 iӨ5~%¶O,x5q@|\.D`sL:2? F>-HlbF-ˌ :J"ЖۙnXԙ{N(†u-t * *N԰h`B-w)6 PQj'yVN^omem=_.&7'3.z04}XG3'c6Ls鲢eBm 1h'F;⩙i@n 6VIv~*Sv{2Ò4M5xB RA:\A &'j32]Uh9l-&=xW8y99nz+o7` fHJ u A6X&^VEQ@+p4 D}ЎҚh:}fpR95qIf"w|bXp cFs^ult2zwgDrp x3frU7[rԇ@UO8*l23ʸĉr^&ލ=A\ j9nLRfd5d-֛dING*2*N{4B SNA8Z+PKٯ]YFbkO-[< /R(;UsRlY1}ʳqem!l%xL?+Vl02<Ćb"fg f dZZf%ִc3iY  6YCy 5D`&A-3؈'K,4ns b{de>\ 3qYYơeI\Wo%jlbjHj6E2`"bi8 Ή3fRi_![i "ChVŒKڡmf;ót".F%ЎCEl(*xvq~|W%ӊj:)e?NBYhRP`m mnQK ɩPŴv3GBv'W2Zi|p4_u}*YٔR3ѷpY@B}C32c]>\kpq#MMp9$*j膳`}Nhl}.IW0 4q빏.~۽.`PM߫RIH\^b41E~4pfPII葶9W%|ĪC ^')9*me~/5qo:Wˤ4&9 ̼oAWM'Z\6*=Ӯ>@U CI5rCe}n1.8{#k˥ Y15M3pOƪT><8m(\V[5TRǿE̺zorWjiX0oSZ}(#iiÏȆ[65T4qK*åv ̨dЩp]ߋ-cU}^!t¦+KYs4YeevbX'U5}!Ow~R'90N)= VkXJ 帾 >-o V#jb^pjdEeh}ao2*L8Og$FFՑkӠT.^Ev޺(PE؞%g,:KΆml,X.[sܝs>J/4yB֍rbf[q¯h7;u$S|"2džHJv@l|`EA vkOjk&/$;T?|@TIƙTkD6X*PQˎ{}]-ƞ%k)Ae flE6,#ߛ8^,Ӫ1*͉2A%vuچ5;[9UN=l` @Ww\aif#qSM%Ĉ䈑r7#x$X1Z!=G , Nk`:+٦?̾d4=Y%;M)4&T)v(:&)B|=/'#^ ssZ-d8$pTǺZ5zpPN]:Zjc!`\p-M*~tb lj;l4@^ G\6[3"I!pNclaOJQP .69J[FwV7$xTFjT6 (|eUCI GL~+L!^}ryokz5h]EyUJd@5\b%y,N;kHHiV!dS53TKU.I/enP_4t"/%ASSVf&[L֒:^*?A\#H!-d].0]PӢk٨aFaL"]|CNh&2ܙATsFM[eC:uDՔ-aWpwD)q$Lj.slQ`glf^?\T`Q<\b88Ԯk90d8ծiw;$hEIIg2ɀ|R8_cQ+CMŊThϫ]+QY)`gپ F08RÓ*-:IWmMAkcMn{Qj4lpTo<)p /gYQR xZ1`yqjzQ>s^|ܢCh+__h#ꮳ C8tP^O?kG %H 6g>);vB`X.Ƶ&֬Ή®WJP^"'(as|1RgkOK9TsfhG)rrT#[~xx\N/ h9U0,|%Jm ףX<&Ly G.EH9hmdݰ9dC!)OW#$U!!MeW$Lqn!%p]ZcaҔ 1'NltTtdwϓ-oa><:ZԸ;w"Jr(igVe%C(-(>u:,4|::Yz=TSH< Uջrb"FGlw:D-NH\q_P$P~YX%$۶~#`rDA_^`~$Kz}qnesZX_ͼ~t2!u,b}h bCP0?XM2Iқ<KB{VOJFbD_PO & W|nU"ˠnqWCʢJف2;j4dN4EIxEMf/W|lӃYr?>#6 ,RǢ EFVVsrX߀E:,*̯ɾHuFH!{Uy c/Vڬ35U}Nz>XƈYE&#@OS` \v7TY[UF$ +t;>YpxjkwmVm6d@$!O8֐cen4^'b #oO}Ux;זiJ+)6ҁ9߀<)QU@sq H?E'SImSS ]j|'%'< ?ʹNL3o?X;? @|=&:*ڰ_ γnUmw6j:R&JJՁEE3jTS%i鹼]3ԙ> gHuM񙓚;[KΨ 7.i*#$H%2f['(.vuY#SJϊLqh0Tܟe,$[=WZA)>F3,sZhL~oFp# CJVveRףz+''JDƦ2+iď<$Hr-0 H_"+R"I#AŠ'>ɃsX0nNU4#;$ ڽzDoF]'8Cᔓy?''.p,Z8'!Dn4MޞC!$/pI| ҽ3ƴ-!_ ώ7M(b q L] x .'jW+i;`HIh;:G\Cfe?Z.홚 | )@!%r=Q4BtaB]Cr] @9[-a {$p)x#FjcG/ժoo޼j[`^\ݑlZFu |VxC`+Gz@sĖLC DzvowFAEsn.J;v8<:QФLБ5 ?Y?D͞LoL "fxn] Agc;g&"5\ َґO;F/]c4%v|ws2|qWs 37<-@YM3-ל)af5dAvigm@4 U{z_T0Y6p@Sxܝ G4|~ Ґ|QK{W/:pX?[WKO,VQe- ]Xg`Kw=dyƽeOe"_;6w6"da|HHn5fGXh@UJÊsν#EGEm{9)tHi/Q7I׊ |[IO_&Y_ȗ[q=" R~]{lvA<LV.w2zd9^ؓFad\bk3K}},* ie"hSŎwi 'I#{*"3&q,%#5eڬvH_8ʏJalP#U€rHVy- M֋XSD" nSof!ɍ\&3+bV6 Ҵɜ~RR\^좪83*%`l/ԑjީި!a,zvIW3ᑆ(nk )H1N|#Z ^⼤ͯX?O~v?F%TzƟ߽ƕHk4&-iU5&%\l@[^J&[ˋQ0җ4.o1Hɴw!RqUqNk5%  k[euJl;9)hmϔc5=(0$~F@Da'L+NEp\\OaIiT: OG#- źxQI*}N'䣡tP,\81҂#:K8MK6w)p_vчzj'"-Q|-Ũ^-'yM (mʁ1̂W h:'瘟N4!=xZ/H5G;+2xe1KNpj:#TOrW4CY{o&`H~5= XŬӉ`7XeӸqk 5gp Zq#T"5]z;lq1|9F/RO,o 6cAU%+UaVmd[ͷwEAck3 Ԛs8Hxjb4Fޯ 3\>&[/^ 6;Nu3.<Չ273FM2]ƛN g2˰` ;vo krY q))S~.T{:߫OGCKkxQqX-ob,S(ji>3>+!xrf#eyyn+iIZͶ"%g2%B K%48iɶv#EIҨ\*/Pw 04,9V""Zi~~ř gD(ph!%rrーsogQ; =A$)~b%; )ڰ}Ԡ&5Π, Bih:Zni6kŤ;[+g+i{ QAMsVHkW*,P9rğǣ<ŔMRc'9wojF$,+Z|7xZiꆫ4h'Hrg[m T7WvsCT %$HY4h *+KkIT}AY@'Y^vglw5OBbk#$X):u_'YN0NR`nxҘ-(|\*?l®||d'5s*R{enQ6~{T1䕕5+$O5yғTOcF 8k;1&r54-'-RH,qf' ŷ-RltJy]9z/Cbʧ^wҚ[H&'t9UjS8hGk#pfO:$%4xe S$1Jz ވ@8!jW eWHZت=TBAZKxGoq{ @%ͽρ'l v;7վEytxwF/F 7%z>N#~~I܌q^ݛHЮ\>XK 3@J-, e<[h{ԜB6@RV3faf-@%^v1T2Zt>!J!FևuOI9 %5i:qy.֐d)<$t֙O'Kا/_]JA15$#Yj6gDx0jv*O%< CX`-tJ:M/it?19dQ"eJhvS=3 2 }.LJ8եzB?(&÷h&K3YA A^qrT;zh ,Q ڮDx^&Rzu' L=W蛲%^`fآ% >~&R t=J۫ G=Y++z@n L#h9MAiP5dGrWdl:fI & )$2Y h8 ȝ6A)-N5?+M)$sl[_##EVX& k;p1³.l2$]X‰M38)E"9;-!h&7CW0BH!k}<]2oHXlWnնBA;zҘW4%K Ecv~O*^C]mٽë=b O I2nkz]{'~ˣFI/kjxI^I?Ҥ@S9;>SybEvmEz>X{Fi~67J "s\I>Id[]v;PcSuUf\uJ($HוcEb6'ˎCPcmrjԋq eo;[_MZX!hPeYv1Awt]&QUIn%H^Pvi885vR ]cBuMŐ?̦u1x݄4*2pA}{Y,`R߸OĤ˿Jlb 2qfK;ۻߧ(c Y=]/z!I[E~mW١{St*lQ4e/ K}tU~ "v.M\tg%SrE_uAOT1,K"=]%xg@PlzVPލrnZڒ@=m V_ fbJYX=BV M-b++!@ lN+RxޑVe̹>L6wEf9G7ȍ^-^Ke3h8to}'$8'ً$s7&QٰLƓ LdQoUzNÐ p8^ֱC >n襷G?vduEQjf]l W8޺rsCM&n#k|XXkUZFjRc YJ2Dv;9SXwv>u",]T,BR%@:+ GK+}Y-R7NvG]jtu.f_ 7w+컀zF% A,A =G9e׿;71`\[{GT't{x'3$><{i)/m҂Ldt=oK<$v ϐ(oPwʤbkI,<;2QAg/Y?kJLD/mR{ ,Mm0~WsPHjW!'4J ;:Y,PXuZR'@:L Shle65rMLu}[y{L>QæUg,^<S!AunȽFuL:fnLZtu2Rf#՘ ۪9~LڴEg(]('.*rc5~'H+uZ|iH*4ꤚ)˒Jp)0Tl.!u~b+yf5XEIL Pr1R&O 'QNJid}i6v{J~d6z;!=!1"Mhk} st)xBOԋ~@epbq9<>i}lHG#X1C=W5w,68cI"] ɪa9~q?Fκ:%̷b3r!OnĨb2*i˾+6i]J 'NlTbn.d' ڈlKX ~']?[0wGԹuƧT-ş gG4w6h^Djq'-b+-vأq ̰  o'SD#¸*MMއv-b`ZkCʶa77,6n/F=t4=mQrOzԩ>9^aqH[q@R$pcO&>@>YT6u=5֬7(kC5 Gh) $5]j\Ѳ> 2fnlx }$y u=oIsle\W4)5DV0kGio(Clt5cªl 0#w8qh N M!M,|5eeb\CW+)FIH=Zfli$${A*_!Fsd+#n53:ZlzQ %3]lhN1<3]ΑO+cȌ^9O&ɲխi_;PQ +j:ECuʹ8 ^E6 [z:ۺ&my=3g8׹׊)T!ʒmP(6Ź|pjHF$!}']I(5zT%(@X -&ɥh>)0s]3a9ifL)8׮Bhgv}=/t"@A:OUWKH\dv)D?5;(DYVhz8;%Qm1ZROQEyaʡ_Xb6syCsa]q҇Bb6 Njl1ӽeGp}~3`<S:*ܥ]6'7 :Uv\f T\lOD,' eK;VW{8ώ}(HoѵR@ӬVsl8IMP~<-BӍ%Fޡ YD3]PbeRUKոݣBl!J7옭)>h^ :rNR?;2$0oTj4ɜv=\RJz]P*!ofv!`m,TuA)gR=ty57AE:D1F)A9(^!iF#ELznkS&u4%d.Rj2mCxD Ș't>owpH74BVLI,6C`}톩总PoZH yG+k|n9,7N{8h$ u,B}/kʁh[P~E|~V·~+׃H0,tc?E-=Z']үݪo77]#^^'Ά-sjŸ _MPp;ծWP旷gՅRuD{88Rd/! C,R?M WXmtTO˰] :vߧEFR8 K,,YF|Π%ކ{Hvp9AoŬBBU(EbCvOw 7! `OƠRoIqeΉ솤kf%;Ćykv<~칉9|͝'GB VLhYlJꉧr:78 H\$a٩Ka"/ q`t5GlpH=좺YU6fi-%7ɼ.6<M9Nտjt>Bu²a0/73_I74<i[>mY3e!% -a]h]FF^ɉg}(r2SOZh$uՁ6HɊ;^ο.DF>;-]-]e|zc퉿Aqo$. (& m{9%n ? s*!;˃B=8pJ֥3ZJ Ś@ǰrb*_"{U/DԮѠ˶| I aels}ZviKPl,c Cv|l.@K}a6pG91iCٜS-7[l!}<#=}U-%(Tc{M]R,5 jsѓRAU]D[ Y5㐞j:n]y{q9wTmmlz#]]v"z8<5>n6n4{~Byp|င |[z^22}SMN˃ݩ?"s+ģ^#Dp2Ts"|k lӇMq&UYk7w)<`37C@+QTvO'QluUwU)F%6IgOI 0tU&-l* 4HY:HlHQ&@3ѷNɇ%˵#8k{5b м4cEA;~鬐k=?:.߂9D9O޸ *!ƱyZol7g>  E.qaHx)<`kGM9ws9^û^FLc S,%rby_Gz_Q ZI"X.z^PlpzSc>r.w|v9Zm8VazL3m.T3 ^)_hcΏeN6M=s(A33QjTsHd$+1{>1`NVyҧX\ђ5P61b\8 ei*[G4<.2) ?[)p\U6aI"؉PYXm rv(ڲ(w?X8q ҏN _yY A5q|GU^j]9unBnA}8{xh x|#? wY܁dD3AaoW# YN(ad>YGCA=Q ,lDGD!A&dFjaiT ဌ-1|Რe5)w5l5W7i,G=wJlR 66B=@:7/bnƝf{RޔptnR~T{Ҫ>ړP Sx2 ^?g|=.T4Z(6On^f%C3۳'L;W- 6כԣf[HsFʒ= A띷% *HȞpI B^ YS bC(O{t&N"O\=VK]cahIv|ҠQVVV¶;ƾ|[k1 j;<"=H[1^5I!%]j~5^< ͂OV$pԸRVFW&0)/p۔bkQ5#7B3CF+HWvP|3uIYle+nD?$:AbnջIB&gelx[$6M)hY$}tIwpE_F)-Vp ճBC%K ׫W$U@kZN鈤]Jr#*p`[Ұ=T/̦ݤ׮ܗ=鍻zA` 7iLUw#&fCx=0# ͩq-rP[&4$ST%=01a GqVu K\=gI E I ]@"_M(ۃ5i}-V΀PeTw $y˸#˾['%,DS*Cr*v%RɞLY@hy@ӈ;h$J'4$Ζ貓w ^Y!&˵!K+j@٠S&k6 bk`P|44P\kw]:u| wKXeOՌ_^p+.htZjs0jVL!bEM=<>\v49 ½Uǥ \u@֢a+ÄNbIh%dM'/wM?tyj&YO|0klYyG9!f?OosAL^G#\%GO&;RL}xvog; kj"ጵS3:QuqH1ͳfM4bi }B<+; uw\i,OAqS}v?eqy 56'EcmWBA7%㣶W/藵& Tޕ'oliKte :9gTQ׉ pz^o:hX >k)幢Q^8,_'#\֗{eeAvohQAċ!1ONpdw>ڥ/R-Bܫ;k[ xzqg,<".pϨ4X} ~YcHf)A,).kl\]5M>FGuB>Ӂ/dfk9 k4N U|o#)+Queud/8Lg$CD43>5 Z _>@MBz%T>+要x%huRE(ò:眛"^ xjfC8<"!wؖnw-qwO'cha=(RK:m۱'\M >_Qy{y;˯w2KTx•p{W𺓥&2iʷ idQi]6 $DFO>y&:{l6ޢ`]y ==*RjrEQNK]}rV8Q|c "]h[XkO Vz\RmZhV(ouE1둌X |vXLJcOV9햱#49ކ," '^LPq DvAfD.{ 䣊 |"=}ΆJs[ϴi l)[W$N:Ѱ8HMRsi›g®"$BG[LBDM&.洂Ș̂Kk>k=&F*wuI]D[}U!*OYJ$k*lq7YY_OrMM/PD) Fa* A`sBRI%~E:_Q=qJmH`Ӛ_"ګfc:d:Q_nIeI LehGF(CيV'P˖~a^F}P*QƏdH{>-*i8ᒨz<ΣmqLAʑ 养n(J-'e#z*b9슯 >l553HqPHfdk4"߄  h+`^R*]TIA}YGÈ0Rp!8_[{VeuQS*EjoƁ-iG+R7 vgVͦo[;ݻoE=Wdr_J! ie4[ڸ2}qco j jNԬA1m >da2$nkń;~׫nNsu gw̦ ϋd =3gNzd,ItS2Slnt1hI K+L93fKm9Y!b ה9aSkD; '43`EDP&xVnEنԂy7_ΧJ`)rZ;O'3~S[u0{P,!۬!E5y?w٣Mkp@I 7Z?oG3<{>5U-Ue},@y³V;!<~#18rt-P( 3D: VnɒO$lRbpMdIzwq6IEt|0X*B- %t)mJ\߱]-H,)*= ȣ"3e%x.P[Y V3+  nx^H aX%r7}vG$fC]g8V"ε|97/hw:}i_DF@"[hoÏc_tSWZ{5`G\/G|Kl>KN`ҷ)<@pꧼO< B1HoOm^NዳyevR}&-%  fBE'؀= y Jlf4PM0C#7¦ɗg"MV5 IeJQlুSTaZ5\ucFO:_/TݨyX5 [(} 7j@#So\9ǝNNgwݙ0r=ZS,UGՃIX+ytTnQʓhE&!2uBvOv#D' r/b32HW&r>Vh#EIakvib 􅫳D:ZOJO!͊4&Hp/yȹ6RBWZ~urvI}ditz.a%+.ԜQd~ Zma5Ds?1B@ PxPʆD}(`"H qfuT=S& 9'}t~`m$U1OiK~+"o#)e4@F V;}f:]2zxXMXfMp)%7[!Z^6r]v-.gRWpcU O4)~k"*-wgAV,;V )IoCӎCq EF,#\}dxv3] ZQCV&d8(ڈtז *|Dcl0Z%=!wFĺ1-#u{٬ץMKiU+O'} 踺,Y+vgj=Wg\j?dFC< 4P`|pE$!X4ȱ4j GZ}++p  mMAC o:'w>0`Nqv*Nw;OXb,u &xG$ ^C}_<IOw`J^I*Tʖƌ1IM_'7J zAZ#IczjDvV-mmx|F12+KCcI Rë_(Q:^<+Yzd -}Bߌ:j"y:\g0iY2Ľ: }1oxK$(=WM3V ^GcRs?A |țOY1_Oi#=K Uh*g*EN!^6cj^4f9;Z 1:gܱR/@ QȦUɩƏYUvd*0Ii);[@p\o@]x;D Y#nসSij<ȎϔZMÖNԴrAXhL'j6V $T{tLdBI?7_ZѴnԤt6*֧$0_H<0%O(t$| 91oN*//,l:˴b4 \PMICܪT{+":5Ӗd N5Xo[a Uݹhb)CR+H04S^8NEGd)k(:DYM5=؎ *ȯI}=E1O~B ":l+'cVz-śf.;qV恎6,w0rNӣ|!"#-.=mʺ}"u: `F4jCbyΟZ1eqM6<·jQ1?E '}RVm )ӞzU:]VG^ @m5@!$*i/TdE$r~nF4,ΨƗ>MzBgfp&Sv@(V1jBbr=t.[}ۅ7; 0( Z9D˔ ;ӖNOjZ[hܜlfjw{jH귧4T)p ]ݍ~ǵ0&fVUǷ8e68'܁fAgJף[w#aC`=Wyo.+r2ϡM Dh/vZjOlŪ-X+nu֭N!Vpoښ)<-ݼzAɌ-ѷkHd<2lӒKs!gkhMuDj.#h{~+7<$VU[Sm|"|֢00E<^\O:퍢/b͊]Z >=kb1 gi&gm)ǃqo=\*x)k=4: 0fuU2Vg2}S+vvV%`m>2+,%|m4*֨D:>wH;:x8͆";#[3nfM#ieeӧ炒i@dU>NB oѿd6ϘB[/<ڜSeU!)}CWL[t HfQ~dŊotS nEBO+\҉R{ڝv 3 h:<0e4֊q9>(p1Jx iz'k&BM!^ܨgv) V-/x~O}&vL  Ld>zf dxG9_gAƸ8,mk_#?OF/ <^ׂJF0JYvR#B"C E=@;xd~v ¥¸LkleOz<\L4MH[+Xȋ}xB~pO57&Y!3v؂L%$j1K!@}nwnߦ)Y'dh1$Ԭ!9WW}ML~`azTC*xT9GX̿J""Gty5݊nУ4(>$'V d_R .kp28:<Ԙx;":[ԋ-mH(S&Vw<$;OU}FJxwmYR}v)jb(pi-|7]Mig4oFP `s,?9d5Qe?MN"IY@H}GaSJA,]V=1Rv{sWoB2JGɕK,h:\TעndN]|U`Wﯯ 8=~RWG]w¹Rl\*5+H5 ֖ c2z&; Q.paB }UD%YI}$$H'y]~cQm "}|OdpY,NdEW̤֬Zl&#;}z=2gvS}U{2lqYpJq:m]=lQ9ٽd7 >N=ɸ ~}_QMEMЀཐԮB;$۹!}8r8:3=s_yZzۃ wP/'ZF&&o\N\E=&p@`hOzBZ[ ,wCk꘽Fi$oAB]lXh⧧:`9Cϯ ?t:' b+ٖ K_ІZO2½mgT6,/o.F2?:9 aH?F;\&0"+U($ل2UJ"JdP>=Be(iP+tǡq=do0؛AJ*HW3tDJ6/Mg_q]X;7 _F uhޱj3'YcI-h@4C{wRozrݑ-D.xv,XE))! 3!!a4xy|J٢4u dmvuX:a(ʕOTAD}q9X'R?V5ܺgY`'qS(J/.r O82oj-z4EC2q7fuPPB8dfuJp:o6$ Jz" 's#S] u&5܇Iۮ v7Pݔ;dwϥ3'?>)2w|:|A֩OPjJ X[t("îPGꆔ4RG-a|!k]fV!-$ҧKLd|+y 2I(-*"}VEbT%ץse(x-OS # ?D=<+i:8kR`b.jz,D+5>,prwz޲Z#uA00Ig56zau>$o_Q\JZ2f\n!XIV=Qxb)TR Q p~'
y]e_B*2BxBN"v` 0nDIE8#id{F9%6t$kh6H9rtjPE?#7Pi !صVfm StрwCQzm@)oMp {`]6 z* XeJi8}6+)9~!  ;jG.Ru~+6̵k.rv޺B8YjqT;dlhQoaDT/}K/ތ<]ٮ$nj$szƓvA&vG8 |;$Av﬎%BCRx;JAB+1dtF[&gl,+}]\X^opWI@='\&J=6 (azSG~dR&΂4Ȉd,-<Xv_18:jlܴwAʽ>}L ҝÐaO.ٲϹN 9(VM_3wtF)t-SGRDWz NU.{q\E>Y D|tI0ҰGɊ)2 pIhWޒխxgTi_7 ͻ~5` 4N g{a 7 ,qɄ}ڱd{3H-?7͒ KGĖThC)Ȝ_]΋8"Tfg`CB7S XSn|jjdO& vp쎁2ߙm@i0u.G4^?~:rfu${gf0tjLVG/;Ijud>z5 j;#^:zIBOaOLmbpasMův  ^Ozt2p>+%%)в}ge?9@'~|˟V,E-.G7b^?/C >\g+- o+{iԟ-+;rp朓3ҾZz V]Uz5yڪ**b\Ek?dh䍃6⹅Zۈ _K*ci.79Y@=tbMCxQ~BSt}$i%}`+z+R#Bm`sCn1"/{f" /0 Eܟ玣Ο_W*[+V+^GOT?W^@˽۪uh8əg!H릠7]3+bDKRb #[Jff+t~Q:gMsuAq}$rZ搲KP/.s~<9^nz`7i7xZ ׎r_*e(Vgك/MǢ_qݘwoݿ??Mݧeji,^VnunMݬzf\W篼jrwm;͖4;nC퍆٬oK;D'KO_KƆ$'UtZo t?|zڤ: ]`ϯ ^{՛ QK7;wYn4M+Ŏ{혝ߤ&޾-Y1Y+aHK>5i҉]Famԙ(z@>)ɂ$N|< Lb_y"qE\Mm[raiyT٣<+ k}/d"FZWn)'٫!zq Ώ1B @2}.[G*F Q8q!͊ R+KOYgp-S{ɈHGA˳Gh4+zY~fe>t$Q0/H+܃M~kk ,۬wt}eXLhVtlS`MXx7߽DPt!Z>ÔyLw֣>Hzet*0J ev(wťЅ@g:>w`p` RlbO9GL/t-BK2wɜl' \,i,owqlL j pTdO|T{58QGhGb.Y(RjU%UE.c@/3E(=a. }X"_i㢼QzGIVMޤy/z&2N_X y/jF\F^TvD5[+ +&%Xfl&Q8k?DGٺp,E d; )ՓX{@G?:* R'2 Jk2c^қ4꣮p]T +O$8 Ro@+xV^Tu鍥楒Bp`+ϐ]tdl0柖RqQ[Bߑ<7%ޕ~06%oe%}JftgX"34 [\1]V,}Q[ӣ, 'WתZJ>ow2;fo}a//of i}h fjc|OT1N:jTyL_o)q1RAXUc?BH CMjiZHRVCqnFDb՞4%eD]$d{_9{^`HK6a耜QTGʄA'}P0^ `Ӆ_Zfay5(AݚY41"a@vmϐ2autwkWjj5ߪyB  v 5`TA&(IKM@4J=Ǽےw v) Ӭh~G/=LG^`ɉXWO{RG*\܁+d*.(aa֞cu ]]Ӻts=;zzrEfaJo*vsaT2ep([mW}Y/XOYAD@{t_nNJvWe8R0n;0owq{;Q?}O;U?ǣisiCA . <{8Laok#߿)a挡ٴS.۰]U==h&Lq9ֻVDddJB]+]YƾXFlo^!Llӆw\}_w;GĩV޻œCwռy5 ޣ:u^WSJƒfo~qݜK{ZT*~wnĨ:uTn]hV4Oeo] *  n ;~gSB{J;m޼ArZ# 6t9-@iCGd* ǂ.4jEC05~6/ xY+a/-a|yiJR,&Wm=gNa3DHpg6_ z^T3uԄc8\* C$Ve#zY+j HA"SCN44\VVwվ|L n|Z.xeiVDY=%="g>ݜzRZy9gX$a@?Xzwc)PyHɉ=L! )Zgnza^bR=/peҬ0_]B ) x>HI/(xx#ӢCoGJMt]XFSP<6Ho?lL6~^km 7ynm-8xYqM9xsMd#ʭ0sۃ4_>b=^|w${nDsyyl^ûIo3nKW7y+dI-w!'b:W2"yhē')&hFh<$)Ko(\r%+#8R~-]İXw~Eoy1 ֵXSyKD|Z41+iQZKf]HrDa[}uR ruKC-X]yƴ"rYr̤sКaKKoBr@0l}7E h+Q.4OqTiv KNHE`Dg2D3*_jAs+vx4xsiĚFG)Z(Kz@Z`F-t̤oS] }.NਭBNVϵ8}bZ7Z`Fx**In+ kՃO7ߝ55U~_j$&oB/IL H։q,*"^ 6N!9J,$0TgR$85LW{1@c hDȿf%p$ I7R5.Y'C$%xr)حX>D zj5 ֞$rGf:PXf K󷍩]Z .)4Bv;)Un5[DM/ff8]l4;yeSYIF3\ʁgk,FlѬᆑwӨ$NHwsj*#Ϲ 674S?GOX,S70E<)}7/?~A[sC4S8i&E>ΪU;Oqi!R 0DP9AHxX5t<]~{I$b$7V%.Mx 43:ߴd.t%?~M!}RNH ^Щ$qSx۳}zeY|[{M7=a/׹o+%EC?3lgmm},gQ}Mxc+Xo 2)#Pďzup1<`SgCJR.%i+6]:R5(/hM2! F!2p8}AdTTBwԶĈK5Po?t lCZp&wUVЖ%^B#ԣUJ Q*[: ղEn?B2T] 1糊.60$}XUmb5fz&J_n&- $&UO8 g\*5:6q25ciւ9!yS EwiWVWl1Wtɵ*اP$8,<ֻ4%,*|q\GĂ׵q7iDpS)`=~#KP7і }\Թ76cy!+IPd]VO޽ccN~65jq]J."jLieSǕ3I ҋ]l뿑I?Ж>Cq7$ ?=I.IeHUV0F}?E!Zs/D*31YHxS8і]Ҙnzԁ9ݭֹ.`<}#ܦ}=cnӾDŸML..2iAg ^D-74T1[u2YF.]xY֬kgblwJVi ROF[ƲҒK:%qȃMM9qy^zm7HfhŠ> 1 V@n!|k! Z{ƌ3︕4}{zlhz&[H#"9[#=|&$zi֤ zr0ARNhE F4CdXaMGrBj ` |PG(׋Gv]cpLK}'ҥKut.[Pk]iva`wo @+5j/v8awxm|/}>DJELN~D@S^ n}w%'K@$i)§3 <6"e͘%:٤{Vw;k?V2DxڣEQȹԠ}c`?)cy1-cYhl7O-M@NYS!&2IA#h!1#w22bIFKKW÷-Xf 34K&.ЧF&U~d8 mG:\&t, pKAк'^?1aM `u=ъ`SOja<@UuT=*/7Ǿިk8:P7'Y"eeHuّQZ3hHK֕rh>e 6G2i}X= FOuҦOv_}{Z0:5uF%)ilSjxٔH E&8*@j6W~.UD !-@AN&Ui-&Ʉ$g&[aZ.`aCs#gMW},AtH%k٧# rX. P%$C5=M+~>1syͮR<hP~K26 g65/zi_>RZ'G lQ,"4,\YErh0a< &Ʈݬw1}Δ\Gf8$3 |?X{CbdN" kv=|lîx=:aҁ46W4g2=