summaryrefslogtreecommitdiff
path: root/include/linux/posix_acl.h
blob: bf1046d0397bbbde8806459faa3833d8bbf2d79f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/*
  File: linux/posix_acl.h

  (C) 2002 Andreas Gruenbacher, <a.gruenbacher@computer.org>
*/


#ifndef __LINUX_POSIX_ACL_H
#define __LINUX_POSIX_ACL_H

#include <linux/bug.h>
#include <linux/slab.h>
#include <linux/rcupdate.h>

#define ACL_UNDEFINED_ID	(-1)

/* a_type field in acl_user_posix_entry_t */
#define ACL_TYPE_ACCESS		(0x8000)
#define ACL_TYPE_DEFAULT	(0x4000)

/* e_tag entry in struct posix_acl_entry */
#define ACL_USER_OBJ		(0x01)
#define ACL_USER		(0x02)
#define ACL_GROUP_OBJ		(0x04)
#define ACL_GROUP		(0x08)
#define ACL_MASK		(0x10)
#define ACL_OTHER		(0x20)

/* permissions in the e_perm field */
#define ACL_READ		(0x04)
#define ACL_WRITE		(0x02)
#define ACL_EXECUTE		(0x01)
//#define ACL_ADD		(0x08)
//#define ACL_DELETE		(0x10)

struct posix_acl_entry {
	short			e_tag;
	unsigned short		e_perm;
	union {
		kuid_t		e_uid;
		kgid_t		e_gid;
	};
};

struct posix_acl {
	atomic_t		a_refcount;
	struct rcu_head		a_rcu;
	unsigned int		a_count;
	struct posix_acl_entry	a_entries[0];
};

#define FOREACH_ACL_ENTRY(pa, acl, pe) \
	for(pa=(acl)->a_entries, pe=pa+(acl)->a_count; pa<pe; pa++)


/*
 * Duplicate an ACL handle.
 */
static inline struct posix_acl *
posix_acl_dup(struct posix_acl *acl)
{
	if (acl)
		atomic_inc(&acl->a_refcount);
	return acl;
}

/*
 * Free an ACL handle.
 */
static inline void
posix_acl_release(struct posix_acl *acl)
{
	if (acl && atomic_dec_and_test(&acl->a_refcount))
		kfree_rcu(acl, a_rcu);
}


/* posix_acl.c */

extern void posix_acl_init(struct posix_acl *, int);
extern struct posix_acl *posix_acl_alloc(int, gfp_t);
extern int posix_acl_valid(struct user_namespace *, const struct posix_acl *);
extern int posix_acl_permission(struct inode *, const struct posix_acl *, int);
extern struct posix_acl *posix_acl_from_mode(umode_t, gfp_t);
extern int posix_acl_equiv_mode(const struct posix_acl *, umode_t *);
extern int __posix_acl_create(struct posix_acl **, gfp_t, umode_t *);
extern int __posix_acl_chmod(struct posix_acl **, gfp_t, umode_t);

extern struct posix_acl *get_posix_acl(struct inode *, int);
extern int set_posix_acl(struct inode *, int, struct posix_acl *);

#ifdef CONFIG_FS_POSIX_ACL
extern int posix_acl_chmod(struct inode *, umode_t);
extern int posix_acl_create(struct inode *, umode_t *, struct posix_acl **,
		struct posix_acl **);
extern int posix_acl_update_mode(struct inode *, umode_t *, struct posix_acl **);

extern int simple_set_acl(struct inode *, struct posix_acl *, int);
extern int simple_acl_create(struct inode *, struct inode *);

struct posix_acl *get_cached_acl(struct inode *inode, int type);
struct posix_acl *get_cached_acl_rcu(struct inode *inode, int type);
void set_cached_acl(struct inode *inode, int type, struct posix_acl *acl);
void forget_cached_acl(struct inode *inode, int type);
void forget_all_cached_acls(struct inode *inode);

static inline void cache_no_acl(struct inode *inode)
{
	inode->i_acl = NULL;
	inode->i_default_acl = NULL;
}
#else
static inline int posix_acl_chmod(struct inode *inode, umode_t mode)
{
	return 0;
}

#define simple_set_acl		NULL

static inline int simple_acl_create(struct inode *dir, struct inode *inode)
{
	return 0;
}
static inline void cache_no_acl(struct inode *inode)
{
}

static inline int posix_acl_create(struct inode *inode, umode_t *mode,
		struct posix_acl **default_acl, struct posix_acl **acl)
{
	*default_acl = *acl = NULL;
	return 0;
}

static inline void forget_all_cached_acls(struct inode *inode)
{
}
#endif /* CONFIG_FS_POSIX_ACL */

struct posix_acl *get_acl(struct inode *inode, int type);

#endif  /* __LINUX_POSIX_ACL_H */
'kLzU>~ws]]\c)|>=qEqX]qPtIcqW׮s6b"fb\nzhU?,CHezEtJ-!T>4rq>O_ep3qۧhhL0u`) CH] I'BDM$%%^5GpNe:>5cK.&`j2ܾz$~jIlxu0aWo =6}xɖ2d6$@k!/K !4NsO{JU?_nn `)=.RF[ʂ"Gb,iRY߶gô(;Y! o<5Z6鷣gGfޕ~Aˆ.w>i(Q/]oK6ӈL=8y, [Yw>nHH4:Z?=Sh7?ޓukKo+[o]ϧ /=: 0l;]*>Vn-߈igUX|e6xzt瑯No8eֺ?Gs5\⽮缿﷮6eUD-+m͡;Y~3ߧxk^FY74x#fGW[/涼yK\1KYb!8P(t,-{aT@ܜw|(΢9`LW ,:}-w4Q1Ͷa{rqy(jkWqQg;3l~R>ο,*0m/­FKn&`6cJ?^;=nz=ާ%|\#d7.^nz'\(=~5XmSk+_Vظ<1cameu/ 8S5/tU=tWlgĸX]iRu#$]Z.7m+スi.tsk FS:Sj+W8i#⇬慁;z3p՝td><ϋݏMMjy] ?6@9SVڶUm;sm*MUmF[`UUR!ƨ!!@ f%(oeW$"u5 &s']EgntCNU:_-lX!: m/F{Uk? =jI$I%ٷпgxߖ\|uRK0v)Wӏ_Gi\tuWAɬiPWGNqB3qwsݶ,<Hw04 SʀbEF Ìpc$F3 BAacjL^A2 (j; ٝpmR% >?qR)~d0rXhW'Ɂ$ˌAk>0~N~BBX\=~{b@<|<TcC<ڻO4A1LR [K3^MMaȞ/IМ zp^PsvB McX福/M=QE򵴏knO #ؕ"]Vv|)rkƟ9_cYX&JŚnEГ&CYq;/`NAE#⛘?+ϥ&XaOe@T+0ш}H7}(ѓJ!PEC])ih$=P@CPqKAE1 BR9PVGNXفyAp^ >6OM~~|(+{9$>* >BَIm-%9X-AdšT|+Ds,|c>]_֎4ٔ-Q<_+aLgf1 I  +xf=Et6zA`WdQu3pVHeTz~x`>6Ti;1>M'l^" .H|q d{En&}`h;6C{W{E3)V pBH$n/]R*5a3d>WJk#!y,aErGO 5:Z ?c}$`:ݾ%z" FϾ[H+͞q6 [C.1!:OlCsr_(>Lo`g9x!˃]V:CRE!V1Ա6j.kBlկ%`/*'N%L?n$#芐ɱ}<:P[~ᘿvhG}O^ o9>D*+6UNmr/մ6ksA"DAx'.LzVLXo"2Hՠ! :R%ږ-D{a sWnM+k6,| _Σ GoE`L8rL3ww&}gnBH?'/0}! bGYDCXz=NCʫ?}d.%6{7|,/?^p@jmn1}UMg- Ia$/P_ @'P|UJ2΀vU1H~Zn?teq{IQ^>[H_}=נԝ `'^-pډ-j($ټ u`Ր^͒P9^"Ҵ(WJs7vE9K-:\` F "l/K9QD2^﵏IEʉÎRQ?R'@ |:z:-f\L.v*'_}(.KJ{x--RϨ?7H뷺g*[?cjkaN[g!NN6'nI$/`d=@hR03|O5/HZ]ߩ['loSb?#K2T :@ "$ q v*5K%aU$ǰ0FNlƩ0&c٩X$vutČ\0;H8PM<88FJJ08L Ậdç.k)/@u=A 컢zqutũf^=t2a'\y sQ츧&A@1v>Q<씣~p+(r<__SӪ1vsi|{o.F\ )=9U_0% }S9N3\{~^wfJª+w0> .]rpof^lT5#f=!oXNz.>iG?3UMWhGʽGԎ,;dsuX tK{;SUۚ 0uwg߀m)[p=]lV:;ʗW_>ފZ/v;YѵΝgIaʬ/@ `v7 B"7SstطaΌBs5sB}>#S4w^j<2:3d2Ng/sGD]svHZڗDt6,fa Az4=~;{cݫuY1Sk&ֽ}XsC1|{]y9`e'ի)[m}vgfοchBM[i>q҆yj{FeHlzBi cU'_=9Ң3$];9ppR8FIJݠߪ0j:4^8X :k]t[֘}n{m\ؘX{V:;V>.8㋵XrչTXAv5 !56ݘk.`-Dw&M[~N5}Vʖg7'ց`@PPrpWX݊#vF_5$C)q9G/2x"?'- {/@XTSNyi˨fLPwsdQaLf>*PͲS$͆X -.ɡcԩZb ̠H3 )_{fpaLa;W6YޕH໰7?:dML,r*:!٩?tgbn7 -Vk3Gp :aqFE(u]_@mN ߝ t+nh31̣IXQV7D@8LHȥ8硃F˺?–v &s6^mQ_0 Xnsλ x[}s4(,sv´{f&`o+^ZK>݄XLp!2H?DZ)ojkV{cԹu9MS>P+C.1coUI<\]UhOf6ы-JY/Dh&AUXM!v9ܣ7l8!KJ;ɧ?9G,u1=5pz'"{LMc_Pifp;y3foQh q Ե^ۀpמ!\ CChn &hʉOd]8C*" ` G'qϡva v.eJtd)OU+ 4ExoVE& toW,OtT'b 0J9OTy5O$S'nD6ʪHv}ojxzZխw PF/fsy}DMQ~lR&ܣ$T{ #)뿦*=~ٜ?~}^XE^-v vH>7~NX] ma+|ff˨P{h x Eb-B+'y ,xQ.ͳ+<:ae#\B_]pu]lm{h"K82s䰟:,seu^mN"Ǡ12ۓ~=Ic:Xxjn c@|2m $- A*'쓄ipQ, z)z/ܾ`m#su8CrP eu=T~Hԕ;mG h_[B xvq} hyHG( cԶx@9KPIpn'[06l 9/em RFMiy\FU:9y|ֺvqB o~jJ^Y+(ߋG~7#1u ,2xw?`V}tiTkHȼ{/ՙe۫/ۈ ;,udb2"Mkf\B/o/G{(-!#!kbNϡLA[sG"}f@$I jaoǒ>N" clX T ;Isv[W=10!Ѥ"艀-vT4zc};XΡ%䲣@sK:ȧ' G^yrxAqMO8?erPUIM3̂h1lXԱ88آOt. ~$ut N5L)+\?zep}5b?Ӑ>B;H|mN}sESZ v. oY[yyJ=>U^v=/cWK^+?s?Rq-7U巾uPpjP Uv>GH|Wz?:rliߋ?We䈈ύҤ YFٵVˆ}Rz5G}b tί=oz@sXhx ]׷WDmT}Gt66QYټFgט? ǹ?@Xu;x!,6 m2f, b֞gnWTN"wyJ|鲢vF~h~tաYN @$FEyH_¥:)FfB>hKPi׊>,4w_4N'O,ZYH\H<Xۧk!Zz #$&*﷍օ": AXO4|yEȝj^Kd<αuz]|g-1{:Mo^K韒2Gm[F3h ëo_F厝RN_#$c%=S6@+iObfb?^# wDt|,}}Bj&/nG?p.N:.H+T?lQVeB =j>i*x'p^ޏ=Ư W.LF/𪑍!L߳ۯpwǥKڧREp+dbzHS>_vasM?!v(ڪL.Vap8ep8 dԗY xL=:C7Xfs-DaAݒA{A@qi'u~Ze̴Y@h,Ǯvcp37-;#!>w7*$rU1A+'uXxCt$ PM#^b?B5۫ "2(LB'O=΀qVX!n[`(@7j9w\ߙAR<'i@yj^~ oF5ۓ6LM9` #>oWD->_ uIo273FieuDIn= .7i]Qw?'SmHwj5ɼ]E\;_a[_]%7}ᘵA`^n>nњ$n;X8$n[IETYsXP4=/_sm Jm:ɯrz?=p>O3 ĆXD.mcY#[q=+JABC+]j_hu~cgj6Z@eU$PTTL?ʅiMA\/ Svd0$7tbHG\7￧ǣ59 (!0]NH9b?:[c ;l }%Yf2X( (*1E¡Aju *C Kzo.ޅyìdpynUofD9DV uѲ6mEF V4H,P٭z?kfPKV>q^o=x咪T!6yܧQ-47{ze@;}p OV;~k70x x( ٻYl\nD@}%Ȍn=us[d+#dE oK]#%Z`*[Ի ,OŐ[ef3khK" "0֕Խ/G;}}`7Z̸os/U/bW7S$?$HO W +WL1<:<q˓VC7 b0 9*[<=WKg{5 Ax(@K~+|$qsrN|@9Z`Q:?HK""@1Bͬ1:d6UryK ku-;v n0']dLC C{xa;C &u|E$G8T3;[NjnBW*:-}dpՠ9Il]x _kɜkCy)q[&1aA~}Z^>gfo#8|Ӏutu;J+SDw.r (DJ Ow6`Ϋ9Sl0G^-"8 \f+ؿHgnGI[1Y/MO0i/_|ڔ^0S.aO@%6[3o Ǡ5!R]]~ך9!\Blkk ̠bJ?git0{K}=&g`8"P*=`-_7,,']$qdaղ miTR,w{VAtKJR'i,!ӏ}[\HKo@oݺܭD 7^3!>3XRd/.xl?;2S!Ɂ us4_ozYcYC`JPw~ <aխ3DA݁G7u+_Q Mf]49vD"`3#>=Q8uyOS_L4S+ZVH`Q 돺ΡK*FG@n nS〻#g`)-k"b,(n:CI Nʆ]:q8h^/!ߞs7GtgH@IbOs.;[ [kz=PZȅF:z2Abݵ;F DbI1~Wi'ym@R4A ~$". ϚLg}a)99e1nqy3g;J¾WwY>T ވu4x5L4R͞B|2TB'`+İdWPEBe߇iYog6T?炻iCgM)~UoוZ DA?ݟ[m;vL32fƢ`} tCνxFmQ@ _ #;IgKkBy11[E:m>vn}DlX  zig9ܕP T9sj\cR)-$Bz^<;Y a/8+&T#M -L Ǡޜ) NF:PJ~Gssy^БC, 9eqMK㞾˩z(j1D=C`6g]:GWW;cee'$qgXÖ.drϕ_V{q0NLWtr{Qp"dg>E6DPbc4G`Sx<ϼ 8c5&g=w`}hIC[hr 1wv]=6wՃljI(3)mOE˃)Ti E<.["?kǰ114SK{5;pNIɘ%\wBY US[R=21ކ]ՆI٩/njp~Σ1?a~T#(-Ui6HGx,6N{.޺] yNOLf: 2H«P@܏.ۨU\Í0!+.Y #@Y(PB7\)e$(qGwpOk܂CP?E3;#[قbrGKG2" ;k@ThX(x!6uz][Zu>. w<.";]ܟPNsի/V;0#` [A$[%n|nGwkr]$>'v-MsC/m=˨N^]d_GCsA҈ .rցe,O ,Wl-yvcpLjCmN:C/ EO%^D,^uP,`y ziW^V$4jfTXJOvOuoe-xmru|j@^Tm&r\cLǪcgl@]P1AvA2亿k;cͣZkԃR /ޥs|WMj J׉7fd{A(#.m[װ 61BLi0p77W PЬnl<SC=,6.Nڪ KĶC^6qSƯMh\ 8֎{gKlM_Ap,_a0eow3:`dͩ{Ԙ}O+f\;Gdz ^{>Q/[F峧5LuO "~F\yvl߬c>Q<;7?`s4-/ R` K<դEv-Y7:K6B[uU^4`] (g"0ߤ!-e"&l2(HVwR0^X)ESBGx%Vb $ZT܊MOa ,B'nȩʨ(|zU-1ϥk5IlHj1 nIKBj)kurbMBuuH vs0gW_sB,c)!-iS:n];݁ee"ҔcJy@?w񣍈}M6puݜeQR=f+D=S{u * x(Oսx<_,,]->8:+o4̢%(W(` ?0 } 躓Q-9+]I{;_+]Ap[b\-8Ya i X3Q6ΌQohr5s`m;ڷ2p˥΃rڻ\3rރ'6Lh4PZ6mL̈́`t `rj^0xjC%t6C{ڛ/d|YLp3OR )ӉA;.c^4᝜ L"s<u$ua=#tw~sW@?LbxeTOp~G xuX?:Pb]!spa n7ݩ_>k~ѯTE(^W<"ߟhD|`#Сd byT}'%a5<&lG#-|5z%0tPsvVsf$28szO".g0g5}Ưf|ά.'GwqAEq'K9ě 4."k:퇫wKD=$ Vi{n# DB@YV)A*gPnNe,}y?83]C䪂=l=QϢ]O"peE±ax + C}wh:!2dN&7=tb6KL& wҗ*{T\-`Cz3PVN.!f4摁(UQ5ZDZ#21jUGj0c4hDdeuSO#If9rըǣXMa43ٛ]̎4cCaN\&f)CacHua3V`*qC47l%[j&66/iێymnɕ$YZl 0؉Rpo}Ehؚ qTTl]~׏N?(M12#Hcz 7G۲G ?l FLT8E}\o8设~NRcaj |Zā]J<]2A D=%?o# ӻC5 A/j㔲ַ|;4~#c15ZX$FBiз%'cMz P E*I@ߟK;C׺fgK&#JA =]G;Ѵxkhy#d@CTP7[M]Z'@m> ZP9qW4 C԰ᾌЦInA ;^pNtH6As0r%6- >ؐzh\r5_lu dV|ΐ]N-Ggog_9T kL%ͥ1m3wa3JKD)3E'0'>o+ªjB^߃em$"hOrVc`8Š=bp^dḪ(1`CO !ߺڨl ޚYF!d 6M@>S"e\FWkTH[6h};h.%6F`#v8a(I¶cUޡNՎnrraQv&!+d‰CVfBQQ.dG"M7s3o|op~m|2a=E?)3Ժ=>Nf5۷6aŽθ0_JP/ {m,.*xc!xNn(2POhW`؆4|~^}@آȞ5 ,`` N;1Z@| 6QzK_3ǫ GniB\z5~o]%<vk9b!QJBdm&K'F^Q\#oBy}N8{-rOB.0篖0/VGH8EYOTb<~sv0n߼]6Pz`1["7we ҋ`m)%sڶ2(~)as؊1&B: d7vX7\4) d,[zj/ U +xP g's=n"Ȭt-HL @Xy^ޣ .ku _(#S QR3⛡pPy>g:qԻdz$8dţ+<9\m_K\+>/W:[#=mwڽGJ`E?2Z`A>hLu;MeROFs 36FB5K;SC:mOubUK̨rl“K7go~\$PСQGK o1g=aÇHwM'tw(F(bz'p/f`pOĩ7X7+%ҭ]R [m)УYp85ƌ')C/׶ ؾǠSLeU$e: 9 ]rb~lh%4F)+uȲ:a1-'ᣇ 137-+,1Z2'˝C(q;dʈ&X?lc]gm]U51d.^›EvZª583D6PR6qP-v[՜K'hc\X >oׯ- 6n(0S';B } (LpX Y%!ik}*Hq JbD# dK5ipX2I[@"PZqw72>qc:gt=t-:Gv\ҐxsalW\ڎÚSO[aG?x?j%mP-v~ewE=s'S* h(2(8+~;7N e`/AP z0sw7L<ȿ#Q3G04Y߾Q-; {iXƌ! wB֟_4}T<{qIcW#vQnhӂğYrzKi(-9$&XD)a)8Bu;gJdN~X눂ȿd>>=6S> ҇tte`J·̠Uլ}JoV5@% M?UPl(Si,N[N4S >2WžXu2j?]|[;F-K =evv O+Jq?yxcڹVU]J窶AYѩSVmפ:/:Bd"4>M)':^ѣV0;#P(.!B1g9l„^ëڵ}"T‡c.[9v"GO싘h8Az6Y5{8ͷ.lOF]6> x y3 ӺO#fApu&5+ϖ?7:D;i;$B?c3`dOriB,:7B|A2J%b ,~*$>CU#1W(јp⿳򺺰ۀr` lQEH$rph/[WjWs~AټSemZ K;h#'vnxGjQA~|_,ĺwPZڈK:gtuW6̓/կo28sXaKV-/mV@80ŌQ ^-~ /  НW$ 6P5\ ТZDJ>*]4Xn22'|)<-#A_o%+x-K RUqʍu^/9BX'e9_fJ%e9x M^$sQDdQI*<Jz{)}7jm rCW3@{Sk>9F.P7E}an Dƌł=>/I,a"CȷT{i* RjHfHQaXx#9 QgDưVK|d+nw X(O䒌5;7v8>,$փ^kihWT 's!r𯺵]coaFcErj#jt`:njIq/b>qփ,gyYsگ+9Y?nm=gF _]Z]ϸm7d/.b09M(& \n'}no}_H5&}.sn}5KYu!aJ/a[}DC) ޫEKuYpL !# Ce%SF {d0gecMyȗ ` o]c`yI|ʤnKT/tݛ? qώ֡차Uxo.ڂW/^4yV}/GyS>8ojOЧ珕;2n(FRGkF"d0?M([Kё.G+zi3aGӨϫ$MO HvonƞC1" z#_yhv,]^>h-LaxXkX:j;_rp}*U0EIDDɤ;fTJ##b*X:>B#Z$GTM 7);k_^r@~z@_ڞ -$Gk*"QSE7_h%" 0m^i. ;(9&6낂- jr H!3A!5WOT`MvTy% uTX<6Q@.gk}]:/e`4?BXC51$ Ewn,XB7=9+Pҍ|_|_ݘyMbOZ+SrBUf;CmlXǽ<}BrK5a!Yyv 5 f(5i GȥKߏY#%3O"dyܡdȊ>);33s-YLbsaϩ9L<Qe)G%b?:@P2_A淿V8=g|Lzavy(BK ch3ٳֺ=y]q58ys߇G? U/AfZcMi} 4r&^Nf7t)i]?:ۃ\0PǦ˧E DìAnAm[^Dq(y^j/\5+̠o=SRmr̂.tp|$3ŪX/_e?YC? D@G e"Fud*Gۃ}OG]%X-ňw YMDI0pE8x'I?w\#1jtV $g&/,J?A.!트 tF](bδv_ -Qc:b!Vd! tV,wQpN g4AsSےH칃ܾߨqӶ5WWkЅ. -T#b(`jta"1!1#BB-ye9YzB[v|GՋuƦmD1gqeSm<tLǏt.x$#r&dvh'wÛ'#iHw )(4bu>ߦ)XoEPm@Y$akE^(Eou⊂>tR$'ElBGDW 4d̕)=kֻ¹$8 +:qnO(z3l#h&xS){|E9vsɥr9ȵ6z^c1n~ \ڃļ#@n>WŤhD%8n`U$ k_)[kN蹢PA \XF; qcZ qѺS;sƑbd߳Կ,s{c{E|^z:Pֺv/a%BŤ{>}ƎG >UP.;[x}'8XBe=yݺ52KR"RZ2P, &'HuKzѮ>'|k0G9vB/G;X0A"뷏/Õ+˺3l滂VA$HnI#3h<Sn$X5I>0`H?jwV,dxR7p ;1Q-z&96xQy2r$??A٥ t+ցa C7eodv2JCmM^92j~:OɜL1D)s^gtPXfPj%\iO}6Ʊʖ'x>-ק5˓U{bCd!Řj4XEOGFT=6[-@N^Ĵ*q\RJTB # :]kEzk֗<7q >`31jl&v3?0xbiDqnDCjzffwcQ [! ,caB(^S(4 tu AA]v>}b{uG% ߨXRژB?oԷ@+6|?Ta+qVuhT@OK|4׹X{u|e82G˵Ff.Ft-g>QQZl}BȘ>*OQ{vG\wt&!*vX6@(A{>J< n! 6跦:ȠO\)9cԍ}X9)~&ouͶte- Gv/so݁K$>qvgߐ&N oi:8.ZA{`$_h(̨Me`!bt6}BXঽ|_CE9c*v|wʉq3Шt8 ՚j2k3$$3\_9NSZ^֚{L4&ۈaC7ĂEw}Yl2"w=m[FZ2Ce:Qs.bK7^wnKvL}e+[]\ N7z4oZAΔ>sE8cm^6s"<^k4ޙ}N1`8wYqŋ aRaPe?>>4 {̗5J7xjVJҭ|KȾ<D8)+!=U1?&t [y%$<+LJzD~:֩LFf틷mZԫvC>(KmT:l 7ٗ$h9$/W#5uU1$pq SUMFa-m/_oHW1g\ !؇̒#UY.fr9r Msu @n2"`"OH-ߪ%$桿93)X(:c/tLjW4ej2ߌxЙv9 K":o)+N(b{5tMIp&[.0k"-$#ƯP+>w%Nb:onix&c~(ģ9kfkAgXsGEf:!'g?l#㿆X#kG6 hlS -&&8vvcGяUl[t<$'c|Ξ~쎨i"yGcg E +y Bvf䓗.6AymݓŒDjgZڞE% `G54yi]x({<~BȀ^7j:Qc~D?8B渜ُ:9s>iPéFcJ n DtW|ӯ`aOߖ\rqOxڗ@52s2|~iu㲚*Cӄii@p[bwWZ koܺo5}b1S٫|WLLFc,"x/Jx?򻞈3i3#-gwX]#䙱L݂_cw:q_b`VƳKGE[Xf+9[W-EGT""~׋#sK7 =3ą`l,!N?]# j⣔pVDqE~ @1n;fV~Y $S 6H`Pel]\$`xs݄͒}!Q *_+ ǩcrg=/qRsz>j! bDu&g^12ncuJ0zOz}8Ƶ}RИ3-rnHEw Zյ \!@玅х' M>vcA!VIMme*,/j t\Gҫe\J y;ej0?<Hj0:$0n [nED#S l޿1 ̾]nzM讱h޳lX@ΟE?3Nz`p/WYj >||_[Z,zClkxе6T.JQ?)at,ڲڶoc?Y2ۖ;Y~uNG4"֜ay @h8r͇u-N i|u"V^96GӫAG2Zڵ3130"IcnYe+5N3!/gҔy)u^ 1䠃M'}v;%`ЪSxN~1({rCNG95)l[Gv>tr8o'0~39]SniEsfwze鰔x" !2r9;8vnzf{\׫wYh$2SHNvߘYw8 C#dwsXt;D">?[" }R^?$U!|ҎO0y>n:YTeـvfFb=H8j|">J%{ٴqY|735< GͯO~gKCȠgaъ|P~"S:ADDlKËAB(Pn OOْkAppuqiz<m*A8<z_/ⴝ,9tww3MkS#BIN60h/:.c\:ѿ[^ P!J)sm`<ԥB1!K,Iq*0e>a?Hv7嗿~Aq_[?7PAI脄7okq8icBI~*3guI# %8gӝhJGC곦IG^֔i#Z`l:-wP XgWD#f@,d#r/`fnuH~ %;#+ZBV?EЄ2Mg(_>ï1 |!"yQ[2F=A⁈סO#QIj *=)PAc9>N #R@e5|Y1 `XeɨԒ=cZ ڂUa ʬ{(-lE("sϣ񤯽eWew[@\@ {?cZIƑ(aĩw6s>, ṭRl!4!ϑ{uҍ_Ƥdͳ=3{F)h{Q{!Ga2#6C9ZoG{~/T;/! gTyIP.xrWb  e|2o~v%w[F.HɹVg)l}4SU>֨D4Ţ 3Hԥт z֥ J4{Y\x \i ZLbzeCpD< gpSB=- @yCŀ+d8 l#_y7؇B5c6 !翐!o-MǛo<.x3O>jmBxQY;8.Ҁm6-]pO]jǛ"t/nJw_/23q@^/}!>.cfi@ԵmrƬ|FM~0Ý꼾umz:1L |-jG}5H3!&Cl*: (6ͽ>(ѦR/xC,meB y83ufk{aVڪ ;FO6,V"v*f-pFŨCȺsaPX5~ qp/&=fN>CAADCG|_÷j.n T,VRXuDiXnTPУuxg\Dbh>uy2̓( {zTrA8k:8َǰFEeԐ57v2 !Cq7 lrmp r(*_JDb8IQs@;z#FZ*!trt{\f/zp&YGtNXA ^'ܤBoqCz}L ˪Bv"2dQId #y)A!P/{ݽl`vvVwjlvĥEik-w`qgQsS"?r$pTD!`zrŏ87OO.V6a-R#HĽ[ъDw7Т$/^r7|ˇv'e\;@QoxY˃JZ #.a"b)jqwjSfzhUF2D\DWצwwnFXQFMﱈsA{rNiB]?889Rҿp>`geٓ/2p揾31O/)%KDY'F'˷ߧ 5ό[ԬAT(MpbNtTѪn3}>3v.߆Wz3YfַZpW5vg$ۭp&맃g$&0tq;ʩƫMpIdAc8 dstߟsg^q.:a]TWYpli/=uirw۲@onf<7X94煯6F; ^c1\(ùFq&ԫb(QCE ૿^회q(0Igg)wLtE$ƩđEo]h̓im%s&Sr@ʋy8OZlKA$uUwFM,lG֢mM b1lλRJ_kn+t7(LHi`X(js281S3sY87Ygoqlcr_{YA7f@?)ǃK}WvsT1Rt"mVn,k`tUl!$[11}܏4 ٢ lJzܼɂ=H{︑vsH~mlpkaa.ק5F9L :Ci( OlEG;cHԟ Oq/L|qne3ED7VqMGm {gwvoAhm˴&Fd\E60h)^=Zۊܷw.Q|c ;z2+ 1dㆦ`ĚM7y=CU'T1w)L&LuC;r^|8[`y)_ޡ FyBp C8gS<3QWbBL~X80c]"ygnϕ!p܊cKD|C3F(a_̻<~^0/Q{CCiX<5S@ðr:}0Ϡ(ᅱ+}}c*W8q@tM_Uq>]e3>J 3[5YvxgL:>(0ʖw^%xMwִAYuf&*37–ZJγۃ H%dL qq/Ǵ}'0(Nɏzff|CcZN(̘3ۦ3!|]wN({諳}s@fdWfbi+3@k̉~5CGdGnԺQ󸠳!9zBS2{:x~T~<lڰ(Pt8_vWa Vx7ի 5:u'g`G<9rZ.768 fߐW)ˑ̿/ Iʙ4_jVSpgg.U8'3N"=p\ Db=:GpVe:Z'h*/'Z.:BvхGzZ S Ggɣy^Pr Qi?- w4+pu] i˜ C&H $#Hr!S\V>'Q0#"yJ8`bjap^*[y󑐇PuxYcC "Nn9}igF;wƷe:Qe R:i]w!Rl@.8ݰsSAF6B0*:;đ1%4E 5@"$%k#p%콿| ! (G(Tt~=^zS7)ZAjVɬND{0LV^NW)Z} 9ӇdzghB|ނ6cùNԸ/to$P:Y3PBqBڃ6rN24Q a#'_š`)D-z;VqNU:DDJ|7cfvlYp Ex BhO}]FP)!'AJ߶׵^ln3Gڠ"G j\d/m7(.q'JjLSHKصكtmI[뀠" G)vύ郦4,_HdU֧ͽ|>2zcPiՖ [!(nZlA⣄V]Eӟ_TKFP#`Cz}J̦X(ĸQ`D E64t&[|z00qER(=zg?:Kc|#(2+0rXX7&V=}VaCM~N7fϲp|V25U&)u˓ J؛ T;v?gg=>~1<W?W3w<#Nj:XIjB~״ęݸy2Ի&'&,ĖF/A\2J:;`9̿"8b6<`ՅxD k Ǧ#DkW^hg|"m`a{s[J|eS36Oj8ľ%0͎M=˵f49~(% Vv/o6"Å X!3s6cI{T^=RÁ=jua\y%!r! }NWO+/:sOoWMM;3 |Tw2O;EAIa؏h+H@W_f8 }Vm_·ԭ5A8Iԋ>`MTrz<],͌(l?JMH9^ڐ?CӖ_|,[玕Ї ,?o. A_Pȃ߫ D ^=/NC#ZV!(%DZAԈQ1 !\=) & &}sQ7\p%솟iWp\@d'>sgݏi5c|FB#dz g :5:ܗS'c*Wv#}vY(n=m[&өOF~)gz?zY6=OD1 L E?I/i FЙ e5@ri0b&EX|*`cb=^< -0=To0W H%% z*D\ rW,'^ola{k>"@y<ɧf_hv:]?a4~tuiOE_#56]no9^] -vku[]ZCxmvޚ@W !p(ʏ6{+k=49tpa/od^)9/\2؝wY}5_"<%P} bl1 +-/ɨOXKȚ<}c,L4}gYL!@r6VbHV^㞦zb:~ \خ=zч.>ZYTzi8ݿ X)Ǝ-Lf٢5eƺ;di#%hWDڄu?o1M\G@M۳fgI؉"HbB|jc+Eef ?\"3{Nޟ VI6C ~Ɍ_`?W}~/oPq@mvz4G&=6,~wXkO WѠ"#%C/8DG$C9r"$.ykTUZ^o\T ~9ʚţ~oWWWfjղ&XQ]n&`=0sC rO Bø\8ZȶQdP\ib`ovh0p]M;Y9-D6θC*ܖ{u?]#ު?vτe3RqOrn[`3w˓,E{"Y~+GLvap>e>}F>8mjl|ǦaigT}_ـ׫on}!|{"|qOɯe'0Z,?`g/wmz}@o\>V_9'k߮/ߓ|,x7;PA_ֽr߮Րx؞ F a/,WV?نph\~rܱ9);LBul^Ed'9 YwW1AhYu{)tZ fl suf";ikˡ/oԈz<ӟ}?5|o JV3k~[w*5XFUȂ\s=OvrB[~%uQJ,NƹD z*zvR|zlLqpł7:Qюfqw[+%}[k郍;ԣið+ULO5iQuw3&qqA8Չ&.un62~8b8p^{ůȧ=_DQY1M 6oEeGn9FpOt}fJ S'AgpZze?9j@aȩ.өFe `b0vrI\c|\n_{g 40XM'`J`Y}Ys{vѿ1qF]o/pv({5Ca*`jtƢ)%1lYU}P[NJ|yt%ҲyO@aA`)K2&^ 8g*lkn3#c0Q>ff$`Lt= wQtו%o=uOӷL`$-kFyMEKYgj7$;tApW+V;:8DX v9F0S=J?EqCcvvc׳^g֞>/|%1aY}Γ)NTtuz7S$b!j=9vsooQf-J..(d˧sڳPQW\v?ho}m #8U6B9:bO_*h ףhb=\V]KZC }~~_Խ~I4Nf=,֩ʩ vxF%ߚ~߿̓;jQW ǀcޣZxL _o~roP=CF?G>Se989$}g#ů`zI ܻhT?ϖUgvDٴh%kk`BN0f6uVD)d4v0rN7c$ }o<98Υzv;7"ڴo'Ch8s{/ Q\4n^B"Ql3Z%4:(vsA!meDt/ `G>v> ,?v,擄@H !jÏ ĄV<)L`!q+㿶85"k]aO]ڡ 5 D^`A.$ h ;xRIϷ[S}.5xah,3h>ٮ O_]!)9oڥTaQCJ]f#Pt{g}ɘywWg=ӞYzh4^ rdv`4("&|:V@!rIȤqATz(+m%+P.ds凉o%pͲmSWl=P^iҽaJAQ-61nE=tXv2^cj{E,Y=V^Ņn}c5rP_QMs`ԻX`bSOBRaCR:3Mafj&M*Wwz?Tt.1A!D$ rEKQ'ͱݐ2U ;[l~ajLИAmٕĮ܅6?wu3E28|U';$ϔ]2>kAH5*Heoc5c~{Qe!8 '{pbX ͮRdefLJRj6Pp׍[4KJU󶧷 ע6=N '&vGgX~Ny(5 `^!N9y6"ٱa{PAu57ى3ŶNHJV5>y7}:1!Yf;5r:K$ '툁;SaW1@hxszN/P ;yciE˃s2l],+: (V'h~x̞SDZ廍Α/BE98o{qfv T)NgA(DulM><+;l&;s*>}}DMRb9Oc=KOdLƪUˌ|[{*SsJY$ܙw@;:. [.(zTd|2{!fW/TzȯHgew֔s ]]e +t5[-_՟y&R#){yZV\t%÷w9_q9nup*6n<;8ty:,O/OPdqqw{U/A;u8$U c{rj\΢^L99/P *l@wKЎCǩ-o#F&kAoPFG"]ZU*:J/;O.@X;d'CzfrF#gSog<>ǩw>u'Z.$W1zIJvؤW>Z0gG?ZÎ $k<π@:¬g K('qe)_B)E@(mtf[@̙ ǵ\c<`1[1K-s>Jp;t[H0*9<0|SR1hm\1pX: +A_'΄O`9@O_/p1 B7uvZPGDoA?w ^@OKa8'Hq?㟲^\=&lBl(%E_gָ^nZ4t-P%GHl0IiY~I-RF3v 40C!.>IVc$()d^9z$18zq3p "rZ Í-Sِ6Zh+X5贳hy\E(ð}6N8 iq?&|}/Yxقݦ~^.F2ImtGƅ? bW (rƼ)B>!#9-,UF.h%2@N2HkąA~ 9I$(sVhSh)_-{1a%!$=?^ZwŶo`cZϝk^ '(z ~7/soyz?$@=?A۫/>W ց(&lG\]s耒b@ 6I.˰,Ed&,yI$BV6Q+Qz H5iLOj5c`"◝kcV^ɤCޙK @pv770:0`!|F??Q Rd=̤ȽVP}&;pQs\Y/'[tYɎاv&8뜖?_>{vyƤs 0مՉL18]{`Gg|xй)s 3'vg>RCةٻfRv߬ ޵Z$kZ~L\&딚BA%d:zh$`a8ڭZlk! 㕖eIf 187j޷\68MիlbʛcٔŸ>(`>=_W+D/uh!=h֫D u ZQ1]8g@(D14i8Staia:aukUxqȉJl>->\y%9߼RVH\ryI-o-^|(W>^U?"x{߃ְ P 5&3! !UjY)L`l;kna}B$ѩp:^m^f#B#t2e4ڑtmdZO.5B-]2;ocf LtHn: 3!HQnKn u(.X#StF{ ˕UYB6' W@H> N0;$SL.u9ȎAnE !þ h_PVcPoM5Fm˦Vݓ5x=en׆`-O֚#cf9kڶYgWц,H-a4o#'}VH/D@ < "V.+ݬ`0TA6`ׯtщb-K3s~v +055!`\ U7; 與g"jQ~s)mdB5C!n%o0& mM0M5aYҒ#%hK:]nZ0`n:`Da \1VB[F (h . ߦߎok3 t.;Iʔllg:Ga< {vHh37ݢR]a.piV:F%:|,>jv΋&>U-&D ɾ7N=G0nN|B2e&)Ԇ*[lai)$3Kޣ‰aeR4Շ[xYtD:׼rӌʗ5e*F0L05H@qF xVZ5! AsƵvɥH@3[zG䭴 D׾]' '8D,3~fbJ{9QK=N9ɱYRR3 s57iŃ=`QAgg+é&:ht9'C!!<w;Þ^eLc'}v4 JH8T;RaK1{kkAo Ř."ah Ag)[T**>FUMN6ҴEcy;GG+j(2zM8m)@Q6TI"M`/@ b91nhR*Jzj}A };>zsSNxcl dgW,-dFE$"jzNۿudZ,t~Tgr얺fj[U>pڇ"*|P ΀޽ $(ɮM"kguk~Mzz5 _P[Z[""TO\2٭%͸'j=f~k~z 9 JXznWH VȆᕼ9{j:g 4qa^'iz%~CC\!>Cef(~ ;LOpj=8j&ǯ,0/dÉbDj6O@C \B%鄤Hp` `.Ǵ&Igjz1 l.D@ v'~ i6#u%- haH>vkN !?`r4:{pP $yݻzZ.bdgߍlzImڕDlM HQ Μ&ǝt9XyIZn! +'@+B"}_fGwRېN,^As(XfVD߱2 I4"E1lC\$R]I #8N V(l'U\{8 !qi|wN8?mלAW๸-X )ACpCҠ )C& #݁ 7r st8"840S$\Mn~U1рP9Jjwr5:H|:.˗Y{?1MB8%f;䳓CɆ@TLhqn#"rHyl&D2VX.foWP&&3VrA:nru݀ɵvCH+k(|o ѓP"U!&憲A!50{ 5$0jw2Z[\* * lf@QNj! 9dq ᧥\=Mc2i#n3=. ?.z=a?^j>zߡԟ@7 AT|]_G21{>2wuov83!>3լ8`6N z;`((#F6AхjPjOD^judH 6 -n**L,RVGv@dHf,m_=n@ 0uPx`k 8^7w> Ԃ@']&N< < I~HOg zxow3U͚<$1DbUaS4m*^2I4 hGzhlÿx>o5OtPDwU+?'3?sol*Mg )Pa ,Bh 8%Dli7n5Z9H ɘmxZG":⥳ԚeS3$DAc>lU1>]> t3jeFfg`:ZA]pQ*yYʹֻ7,,pt[( _% Fw0NFҊFǦ#}غO5!?(K/w!.\٢7o͏6koM:~ .&c\(& ,Ko2X_ +$m))mL(Рa)e{&-, hi,Udӧ)&.jnVzT<$ψ/*&XO7$b* x!F r] >e]bavTaUOeSR^Om<'#H3IS :eǷmT}>x5ǣc8[Pnn0Pu{ ϔ@E`gF(rz2=o=LP_Ǖ@qKQxzhekY}VR9~Vm֏I01]Dhr"!1rQ-(9DG+1~g m`^nx1{.]V5u.Ow#\/?l{Gvؾ fHWi?lʵ* S^op!> (C}9|lo__gۿfT~goWywwJǙfng/F=^2/r*( O?[P?r_3lH* A312$iBW*Bix僧F cQej_f0WGWx\, bGO*@cFļ PmBgru) BSȫ5Hw0AO FhzFݱϥoϣ0:y{!- ,tY??݃|굮+W1:d 7)1'fx)b初umE{)i[UB\!#k?~yS|ڸu"C1f0 Ǽ#I,#gP3%6*KݼD]ir>}{ =qۮ#]I "G/82qƔGĥ4`?@2q'Do~xa` &ӺmJ{}#-LEDk+|[oO L HyD{^f;IWTURd̳3G)'w5GD69n÷Rnu>Y~;t fs5$BA l{1B6W7:y8!tqagE4zft0sϾOQōԐ Pƛ=e%2K,-OUgx6Qa@Q[ ,})[؟ :y?"%Βx|.sݮ p~k}ͯtaփAk^@3!?(1zyf{>T|I凤>B[#W': +*icvQj`:sީ\ʨx,3!02 ѵEУO7v EƗ.p ?QHs(n|%jRjSs?ֵ4[)UJ.sޡ05u|phc|ԱD9\3CvQϵydO[, ~f} ur'z78I xgH%2n:U6V>0iS$Xhuݹ$(0qAr@6u''v&ԋ:vʈlrńbe[Vدe@PHiQPrUY) A2<}cݭPHZB  `-f\wf! *swGLWS>V ӰB͠pt(>}F T44]MP2fG"GWYŗHD t:0",K kԷJa(*+l}©yC^sLjCR?V3tnç-;BCؐ*H=GwW ]6&w* JE߬/ vr<{ř̰zWv/[Lw|<7u\i 2(|-_(Nϊ&yN&/RNl~o}q@V=|E ٣';ƁͺUЧ{ d0l :ܿD"|{~ aKCAu$ȭ]R!DŽֳ"?gena%:GLo&WãL$TI$.B=6Ky ᮃ&㿢, >fgibQIv~VZ|1(Q@^P+dG9Dt*c +;I-$YUuT~Mw}Fax N2dBU,Ss.