summaryrefslogtreecommitdiff
path: root/drivers/i2c/i2c-core-of.c
blob: bce6b796e04c2ca0523bf1fc83117b13b4bc2c43 (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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * Linux I2C core OF support code
 *
 * Copyright (C) 2008 Jochen Friedrich <jochen@scram.de>
 * based on a previous patch from Jon Smirl <jonsmirl@gmail.com>
 *
 * Copyright (C) 2013, 2018 Wolfram Sang <wsa@kernel.org>
 */

#include <dt-bindings/i2c/i2c.h>
#include <linux/device.h>
#include <linux/err.h>
#include <linux/i2c.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_device.h>
#include <linux/sysfs.h>

#include "i2c-core.h"

int of_i2c_get_board_info(struct device *dev, struct device_node *node,
			  struct i2c_board_info *info)
{
	u32 addr;
	int ret;

	memset(info, 0, sizeof(*info));

	if (of_modalias_node(node, info->type, sizeof(info->type)) < 0) {
		dev_err(dev, "of_i2c: modalias failure on %pOF\n", node);
		return -EINVAL;
	}

	ret = of_property_read_u32(node, "reg", &addr);
	if (ret) {
		dev_err(dev, "of_i2c: invalid reg on %pOF\n", node);
		return ret;
	}

	if (addr & I2C_TEN_BIT_ADDRESS) {
		addr &= ~I2C_TEN_BIT_ADDRESS;
		info->flags |= I2C_CLIENT_TEN;
	}

	if (addr & I2C_OWN_SLAVE_ADDRESS) {
		addr &= ~I2C_OWN_SLAVE_ADDRESS;
		info->flags |= I2C_CLIENT_SLAVE;
	}

	info->addr = addr;
	info->of_node = node;
	info->fwnode = of_fwnode_handle(node);

	if (of_property_read_bool(node, "host-notify"))
		info->flags |= I2C_CLIENT_HOST_NOTIFY;

	if (of_get_property(node, "wakeup-source", NULL))
		info->flags |= I2C_CLIENT_WAKE;

	return 0;
}
EXPORT_SYMBOL_GPL(of_i2c_get_board_info);

static struct i2c_client *of_i2c_register_device(struct i2c_adapter *adap,
						 struct device_node *node)
{
	struct i2c_client *client;
	struct i2c_board_info info;
	int ret;

	dev_dbg(&adap->dev, "of_i2c: register %pOF\n", node);

	ret = of_i2c_get_board_info(&adap->dev, node, &info);
	if (ret)
		return ERR_PTR(ret);

	client = i2c_new_client_device(adap, &info);
	if (IS_ERR(client))
		dev_err(&adap->dev, "of_i2c: Failure registering %pOF\n", node);

	return client;
}

void of_i2c_register_devices(struct i2c_adapter *adap)
{
	struct device_node *bus, *node;
	struct i2c_client *client;

	/* Only register child devices if the adapter has a node pointer set */
	if (!adap->dev.of_node)
		return;

	dev_dbg(&adap->dev, "of_i2c: walking child nodes\n");

	bus = of_get_child_by_name(adap->dev.of_node, "i2c-bus");
	if (!bus)
		bus = of_node_get(adap->dev.of_node);

	for_each_available_child_of_node(bus, node) {
		if (of_node_test_and_set_flag(node, OF_POPULATED))
			continue;

		client = of_i2c_register_device(adap, node);
		if (IS_ERR(client)) {
			dev_err(&adap->dev,
				 "Failed to create I2C device for %pOF\n",
				 node);
			of_node_clear_flag(node, OF_POPULATED);
		}
	}

	of_node_put(bus);
}

static const struct of_device_id*
i2c_of_match_device_sysfs(const struct of_device_id *matches,
				  struct i2c_client *client)
{
	const char *name;

	for (; matches->compatible[0]; matches++) {
		/*
		 * Adding devices through the i2c sysfs interface provides us
		 * a string to match which may be compatible with the device
		 * tree compatible strings, however with no actual of_node the
		 * of_match_device() will not match
		 */
		if (sysfs_streq(client->name, matches->compatible))
			return matches;

		name = strchr(matches->compatible, ',');
		if (!name)
			name = matches->compatible;
		else
			name++;

		if (sysfs_streq(client->name, name))
			return matches;
	}

	return NULL;
}

const struct of_device_id
*i2c_of_match_device(const struct of_device_id *matches,
		     struct i2c_client *client)
{
	const struct of_device_id *match;

	if (!(client && matches))
		return NULL;

	match = of_match_device(matches, &client->dev);
	if (match)
		return match;

	return i2c_of_match_device_sysfs(matches, client);
}
EXPORT_SYMBOL_GPL(i2c_of_match_device);

#if IS_ENABLED(CONFIG_OF_DYNAMIC)
static int of_i2c_notify(struct notifier_block *nb, unsigned long action,
			 void *arg)
{
	struct of_reconfig_data *rd = arg;
	struct i2c_adapter *adap;
	struct i2c_client *client;

	switch (of_reconfig_get_state_change(action, rd)) {
	case OF_RECONFIG_CHANGE_ADD:
		adap = of_find_i2c_adapter_by_node(rd->dn->parent);
		if (adap == NULL)
			return NOTIFY_OK;	/* not for us */

		if (of_node_test_and_set_flag(rd->dn, OF_POPULATED)) {
			put_device(&adap->dev);
			return NOTIFY_OK;
		}

		client = of_i2c_register_device(adap, rd->dn);
		if (IS_ERR(client)) {
			dev_err(&adap->dev, "failed to create client for '%pOF'\n",
				 rd->dn);
			put_device(&adap->dev);
			of_node_clear_flag(rd->dn, OF_POPULATED);
			return notifier_from_errno(PTR_ERR(client));
		}
		put_device(&adap->dev);
		break;
	case OF_RECONFIG_CHANGE_REMOVE:
		/* already depopulated? */
		if (!of_node_check_flag(rd->dn, OF_POPULATED))
			return NOTIFY_OK;

		/* find our device by node */
		client = of_find_i2c_device_by_node(rd->dn);
		if (client == NULL)
			return NOTIFY_OK;	/* no? not meant for us */

		/* unregister takes one ref away */
		i2c_unregister_device(client);

		/* and put the reference of the find */
		put_device(&client->dev);
		break;
	}

	return NOTIFY_OK;
}

struct notifier_block i2c_of_notifier = {
	.notifier_call = of_i2c_notify,
};
#endif /* CONFIG_OF_DYNAMIC */
AM K;"zIGt%h=:sĖ~(:(4'"6{#BcbMaD 'w]%#$a8\Oc `$ (.靷r*PR~.ᘎTm\qEPBgVה:La`3pw) QADD}9D?uInhXo$ G?GK=a$tv/KX7@{<*^ŧDc EK8獐#zcϴxTqf_sy/);GEj|oz0aۿ%yżϪ9+,(ˎ\{xݖ~4Eypr88r&9/jWFO1) ɢuJȇ?sٝNwH* -_ RMZ[nH0mx:>;<XG R$7C]]P;!c\f|C]׎&[htP>IL7ҺvvY;ɮUǣVw Nkh׆wZ?dNӳyx;8BARHտVOrrrxep!Ӻ(X*<]_?,>v7H9ܿa>tUBBQd>Ҿ*F+5}]v&.=n-lJ :KFPrQx$'Ę)]b"F#xHw|ngۖo}UOv$d3Etoi4A9 @T)CC]DՌ36^^chR& ~0~n#KFѡJq&/5 cF#;EO4T Ӧg$ [|2.'a$`P,F-?\/GQ0(5<. SK|Fla䈜 *j7Yfs7̕ժ8`mȮ@*GQ&meDJ%,V`f䏄1{~p;E-eH#\7zul'ޱAV^0k} ,Bln:a7%l3ਫ਼A &Ⓓ~%v@G;#aQ V\\ђ\. w4A`璘&cР"kzei!c$@UB/^4 y@p` ,?G ao۳]Z'OLq^woG%C>>>Cx8u@AA\ ӕ ]bO>52{0A\N)^; H nM[EГH| ]I>k,4}9G=*7b:a˪ |&(WL ?}%ng;?[<=0沢Kc7A@2Sv>RzEanQ?@EB-xNְg@ < zJGPͿv^KǠwI9u]ۼ"Q!/o}\egB W͡NU޺%К+'BѾ=T-P9.mW>>o.[O.u{<}X\[h'uR E+eTFOV\%ߩtI}u,͈)9;xi>-K sWۦRir&VxAV܏H tRዦQ't6 j?:ȌWu]&SG/˜fzGgoṕ࡯G |m= ڟ})0fh32A^u⊀D@t󪋀:6/*2nsxc ߋ@=:rfNm5кBj[IP ;Eڼ*~@6:yjovJ>B~^9'c|Ub7\PAb7K" -kN_+ 9l%tpdU*1i9a*ׯ5rd SXQQo |V#VJAk&̖D]Ɍ); L`lu~BX*rrYQR\>n@vWݮ(%J_?´m3nx>kl<5CGy4F&xlխM4rcMDO6rFqkww- h߆3ihN/uT1= ? oƨ[A uz @UrM.@<{ນ&.!8VΏ=OXP/fEQ6 0 5nr7&f=4_>J ި{f+ǣom; Y؍ Y7NCVU-sZ燪3TE躎R{.wqW\( @e 7U-D6D¦`!Xէuӱ)7cA^P#g0 Pb&rVriLcH,fNZZiWYW8nI!qW0j9 A=gK^e.w%H>?E)@%jPN3bh?8ٴ2A]cz-OoGTVQ?_#@w?̈7cB5g :k+>88y\Qt9<(9YZ2~G L)9 Qڼ/mL -Zƒ QR}99=o{APDD@7(1Ug$,ޗLo ٻu8jQBd <)QL `"ݫ9bH[d61%k 1gc0 Fjx(R\D_* ]yV Ĝu/ۛ5G|6QX `  sgBB׹U'|/D0Va|ՏF~:0AGjP~&ӍKpt12o!by,9zo ^y$Ma͖wx~g0i ǩSb E.Zj4oD:auq lDEɻl;hG?HthJ$/. }r @-w@:{6ɧW0l0̔,rQ+HRۺ`RͣP^olo6) #v~q]>K ' F${9k(9aOU=]` cd:]Mzϵ.0`2Qh)#KoTNL|${j@P );G ^XnT#f;D3{ຕDQ"$GxՈ$omףNHnʉKLS- ^ >LEuרc2uzb-ب/p Ly>8"F_6$:1x#\oe:M_ipC3bD-nIἸLNܚ {q'I߀Z+ɵ=X`5= StYȴ׌dn XTED`֟VCϠ jm8 W-f@|s_g-qtH5B) ;q٦NF@3(~{CB8Rj㪁b6nF DjV1>:춖i FnDek; Y:C hDӽxUm%†!7|Z%ɪ6yn9#hF'QVOfM|aOV\ I3lbx%>@vjN$>fƸ, q1͂nb#ڽv 90.ۈbkh]sBRǚT Cp-70#>x]4t ,؅ xA7/b:ΘF3\// Ü7rmrg㪧;1l>}ِW}X5^x2Znkaܶ8DJR'Gk˶ypbkd_x&s,mv(0ݎlm-9W:)Ro hwwm#\(>߼rxhu56Wc<p1)xθ(r[q2`;?0R|AyfE[`4'/z_eo]Ե9 c ׆V;H`QpAdށa]<6ozY);qk#ꈛ;66`hk D V S[;j|~%[ 8x%jqjE7{^ )WcmvdD;E3O&(Nfܽ dQf(>pcK^.3oSPK\Y8\ƃHpG]+s0 pn0?!GQGhq@:[#;io8~ ~o՞ h?,^Kg1kP Y,۸isB ?hJ-?8rm޾}uoQGpXZ:,$ty 8.D>"ɹ?SjNe(b=D"PY$] Jz:oH0t`m0ke=]vkӋ_ ^FbnE–}[.KX RCOgoΒlccub kKmȋ[|L 0zXDE#ME|;@hYலi$:RX{Zuk n_g-Bn<~|q!:jlQjrh\P jxU faJaB!VGPݾr1\'FrtU g˽)"(r#m% jG޼4`r^>-q|RBYKVoXzLOT*ig;F!L_#{ߡ* 3, Cy^\0djcҙyXs73(\dʏٯ|v8pzB)I] K+JdCciD[:AZvoUpງI*ݷ yxֹ.Dh K#pbr5C2+L~ =|h Zh &1az/n H8e\?\]u+Mx ϫ@KUR;LHYqNnJm ڛb2mMp@|#rz}9=>+Qp[["ԇ7n*߿CԌbM>opzL6AQ+%"Tv顁OMx\] D'oVOߥ{ZG K=1Jgl PJLch^oY)}G(CQ9/nLKdq+\%a0"RcJaZSaX"FVV0qh44- 11_fY%wlB#p]⥐ XڤF 4vhc@u'{t e^CT3m%nȵlFPmWE9OdRq䳋.VYۅ*37`5YpUMzvwF]>s# 1 \ ޸"|5G39$͚45pk"LY6E%)I vők+h<~d9B!kHb~< T1辖X)mW E8qв i[g6KWz͎VQ5{q"z$"d:Z8m]{CTWxVN7 `@69{S x osjZ^ɋ%jx+6)͈P|T)QKL'mQ7+/uda+J Z9+0bFfj |VO m-QE SYgXÌӪ*;P1Eaj.i-@a'\nAc<`^*5~˓DBj6^(v5;z P[9Zm%P')E  &g##MѤC;bqDa/F0NgD-S6Ε,o~SIvBԇ9ϐs"CHiJZ+|XP 0fW*_Gݫ6]ľ뮎w"?~z(YIp ^dHS,Ʈ):dvfs&vUXV\UV]y;_J4Y4,R,XLc8@?8n\D,>KRT%L1Ճ[& O|6Ez<;bU_߅cd#< 311{J1)IOt鲅Ixj$:G}KO3ԡ|VQ>o_JF.!߃x60 I bc]a!0bg`Û*UAM4 U]/?ؙx,&`s1Qy7BcPת$zbGfcek 4@sfaYf>!K:yxp?@=o/z5`$c$6! f#H='@=[ZE0o vJ-P8/z[ovߓV\~N2yO&r/r8DY6`]QR;t\鏾QmTE1+^ʜdU}vd%de_΁JRLf?^bOtwlC.˓N%I'הinh9mx9j. eQd 5jӈ5|GH"$|4x~UqaMu5FXhE 1 &Y`$fȋ(q.|ro 5x67E!ݮŽw{y![[K~^;dk0Jl- 2 DKd:(lBֹH(=ZDke{ҺOAah-bMdeRrXKhwcggMI ? <#5Ud^5eHͷ4 /i&: )ktOیr/K`>H%. ^ˍH CPx_9iAbjHXÅw3c<F>9tQ·'Ua/+H޵4!e|&vG#(pmV:j KERi$S4nЯq2Г8>`82a`4Ƀe!$GFI %CřSWsq&s8OǗJt}o\ 4D\X^,`|% $3lv}xRW%vn)J&d^Sma( wQղ۟ҦѵE\..B dv ( } 7,YPhP镟vV,LNџbmpdYXA| qMVSf~ma(w|u2](͵=;]+ϟz1=G$*xQ'yNvN5%+rȾ6 ! |K 3c4Col1;n2d<4X=0 4h)3k `քA U@5s(\srƇkg48܆7T)9kq,ldފ)CU 6 6n8*}Ih_] ;vL >!"N t+ㆽn3`_&e~6t`x6;kNiXjnUqko(*H-ew=l+_!\0=nZ1{<<}oR qt^fMN;`oRu]cmV Cw=glCg" 9F(/nz}ǿG_SGVSӝJOsדSצ֪]ҹ魐}nCSNlբ[]t!n2ho 䳃B>9V:t]Ӻ:tWtQ_ٜ~ r|C#<kǏK V36c˒ʃ 6 dKv۞|4]\ kҩZ@ ښ0 2=n 3Ff뮛VVs4A[xt;[NH a.IԴl) ʷsUism Oq*\GWTh{ =gNlUHqK$xd3XjIReP(V^#>VNvF',pߑ [bSWEZg +[i[Mϡ11Is=mn5Q뱜@[mT((zFîl4M,[!G.`0di푃c+t7iP}YkgP!'=qCwO|I8G:Ehb`zX١{5^5?z:tYzt&u,Pv sdDvX 1';Aqum5d%Јg?C7i$sW s7ڏ_w|MB8#8 tZDF1Aj=4 `@k78+Y !Q'<jGAW&.:#n9E ~nNs^h>iς- E[֤M ceM L I]tZְVB|BAآ+}@T V)_2ȢcOOsyu;la+(: 2I;t!1z7G&1Y9Oqݓ־:rozլ)i80.`-m6 8}#/]DrԮX9>m ]/(*v> + 029¾"c\qsՈ}CK^H < }TCi;wNǃkrUDY9" 9~up v735צDϤ-s@)#5v7v3)gkƝ+F#=F岶dQ0( x BLCȶ:5N@Vg]ͪH)W͆<2U3pgQfl ^sAsST(#M`Y,#ێɆrT)S %KʹkXZL$e XW Bilpu71`(^G}ai-I\)(ԚJoDUGtJcr[g4,&u\Nu4bb8đ/?qw1h SFA]Y.8ȫ)|l(_FDt:Q@dvY$; xMt]{(D;r # ;sճU |߄)DVeSj8QDCXlDwfC_7|/ҊF\O3[ACWK {Ť$N,umw/ӈnh=B@(f\pD:%n/4>Q&q(K3-3RAzF,EƚD+~"_l".dG-*\g[T;W="Xc Ҏ,K(rhBߵ O1]d lfҌ.p M|p&o))B#jGY7(Vc`zŸGu/0D)}ƃԑ[' ~P=͛{)U}gywg8(k)Oa+w5% HT)Rjl×%Cs_!ތЍ[oqGnfBvgYYS]oq/ھpSs ckuc>WOgv>j`qhw-wXc{(w3%at>u ?;hWV7W{,=O["&wZF"C n0qĚ8t:Xz dm8z"haW\#$OO_e׎mG-y p8XEFiVj ` 0WSLVVѝnSliTKpc[כ=}{uۚ,R>͜1 }!]b|SIm 6w0o@u@AφԹ~D2l˓'5L%(,awt<0v׶ ʊű/e 'Ge\i͡q*ڞs1b)\s8?fi}}M+rE·f(λ^elΊFsdm}|k0DU%u[.5Gj8gmrg1gz|{̰~ cPޫ` F$$|[5lU ѕNcǷl9Ә9ߟ;YoPaRY-N( 2 Ô~#R.b#R& b‹9\;|=~OjA?*.JܰjUȃ'xfO6o"Z9B\gUE hR$aHIz,i5YY\+h|^?ojNUlş;"s~L?8]UkzRf to4yӇN(L!:zHzG0^2aB09ьtL8SaI.q=BBY4fn`j79fꤸ㌠5R0y} 4|\RP[h(C8>1% RF:^}++_o#kL> &sZ!0FBL Գ9t?Q$86-gHKqI;AF~^oL_=wR^}tTwquANRV Q$׋G+=1wur9J8'r`'htQGK DF(L_Pm HqTJ g&\ &f(X33EJ#,Q>w8.SSe{թG2L pK5=!On͔fCjGN 8Zp.w_@% Q3W#6-  r*:c508X1eŔ° &=ފKr!>y`M,`QuE]M_12$}R$@NtޞS_/gYk&3?}8_41oE~\jeCËt+'ri.pikki*mDL&*cNC6Oa X L} # Rw"93".Z',s(6Q$iU #*+zuUy"C8=o4H=bRVT"9s%?`Fcl c䛘A?s 8Q@e~MJGRiO /SJw@:DS 7Dz"Ɗ.qL߿W'\㕜{ W%m^Ӛ@:2YVm^M\o?W˕; In&suz/lrC{G1yEo|6[j^"dI֢iVg逎`&us ɪ&"De!tf'yYS ,m6]x|$˖-8lڼze] pwj}ξeY.({CЯd ( lQܙ!94R8r# lP9T"dYy;[LN>?pt2`R4E]&O1 &!2}y C7(0i=N>ϼUTvUɛ.[}\L;b6^/)5"v98oi;g'!N^_sޠ2/y$7Gg{9 $+Ti"٨Kk= @DuM%Qn-T>4" !Rp>} ~]3Ayg?l}|b\Iɥ!ҦpQĔ7^;vǥ5f?JZk X; i$!E)"Pv'we! BþkDU_{.wi)OfPAanI!/0B?D{}Ŀ0كV"Vkv:^<DAKby"T*>=8^]<.j*r<9{5uJu>Y߸ YXTy*Ws$1XeGGKA6x5?ѣs*6"SڝehAA!:9:Hw8vZ߆_}u5ɾߥg>Mڣ1FXl)@5'%ZEH&>fr#G℟LD((I )!#=c[A(Ъ5%6逸L$X0˾3%`B8,RBu3ɯ,";n_UjtX}}@{c!b&")DAs аHHa5+1%R w2uAbYV:[!@Ayo[$ys͗|}-~$B+R¼ux[4gfܬnZ=a\z1 ÅEkn̹-\Hylޥz{U5zGvnń.߲Bozfvx%@⠜2t3"Ă4n%Q8z-C۶y|x Ol(k`>Wԏ_.)1TdY+@ k 9L?OpsPwq6×aRFj;Ftj~Ic&Ys!Op5Jv~9T;a5ob{)Ԙ1G(a`E^@MQ* jkW_a ٚn?3.Uch\ɆV2v3y,$C:V6b27 0AcHhۻͨAhɘ?|o!"H|5Hg,̞3sp fߢqjwrdw!C2va~RF pn@-`t>AXe_>tKh:byMh4X#/ ^.#NfaD  G̯e)ԨܷLenQhm}qU2_clt>Q*_hDS7uT۟V?˷?H|][foW28{<~)ċCIvK0ܭ ֢}Ҵ5`UU 2oU(%ICA:_PqޅA^MUh.MPE5VgKL}yoA[Y/WI Cp1 #}`d#g)ϱۭ:LH:<՜112&c4d -X${c)Cʐ$]>({©5o<eu%ݬGL8Wxؤ***aӤQ{z&?/3Jȟ둙pH |6h,`p&ViH? U2.(++T.*3#$Pז*C[m9"I}Xz(crsh&*J#XsZszwSmoj.Uuom2CSdG*cv%c?{.U']U4G?_a.+_Yxجܚ1C+еI'[uI,ub9j_9 m;5|qoW&7^䴡ՐQ`#}*WU]7[[b*G2Rr4/ۗzDqA!OPtMg 3MFMP lW~7tM-MGI\wjX4:3mظ?(eּX-&wp)98M4N`)sɷb(rޑQûߌd(}.u < .zc ;]'z#>Wm~8^y1ʪ1urȌtҢӝh2:H!U7E5q-*Z8qAsAS2g ʨ0qw+Ai7EER&S]c'$ ko~} eךst@dSYN' ,Աʞ ;q,F*d#IO׼xpP'g2䦔uyӣf_]O&S":-0S~=OD-LbY [9ma'$+VwNN勆|h+9 ǭL 6'P((<_1SL hx Q̷=Ti>^HLk$~L8`$|XDB+|vJX]j-SD~.Η-.{]+nuUu8}R/Cq0`ۃ߅-Ks/="2~o3mt_U:ڐc]?R;$ûKMʧӧ7(b^E)EߥQS}K 8x2 9+p{-<0jU b **6D뭰'tPvizU ;3xH;0LJ{ .ITsݦ/ZUN{&|2 8'e8'NbOQזard=DYN'V64+.R'1GR퍟['P) g~1Dy#\j0pP+/@;,~h yB㭒^MKBJB)\_FYnhvŃ&L7؟]"lvH eT9۱[GLNQ[- û\vGxr{-XRcRl?m@{-F̗8}$z^=4akP-C,%{u'7)⪰>PtW3dl=׵/;l $g0ʃD{7ݐzS4Kǭ_7 <+4guĬԨN1r8*5q#U4@°H N"D&8wr>]o,#jM^5y枵]z ,->x'29ަm]la%U:-,'hpKVw:ɿ/a=52\o,=OR6(鏸mdYe`";7tKYڨPT7hiY6! :IF/SGܖW$RWLtց!OSe !/x}墮(%w:ngV^e LTÏ$yL΀^ * 0 {&r{4ia%(kӵT8 (G、`RL(r?!r)B^ȣqV!fX?sʝNƬh>0Q<@8av"Ѥ͓߉c2j=GNԤa!ݘCi+g֛'sW0xD QO:QFJ" |qwj#aRla),4DyNw0Yݑlpu/ED9~G<(~jSzRgbIk;J{{ [p^]՟M}dRXSyY-)ѕVQ0ݦ|J?|ŽF~g G1p%J]> gK2gcPŽ?fJ>YCI,͛Wo5>}!5+_e4su=gc(dڰ]%=2ὼ4avI >z"3w!/)|CMDʿzmϲ3hNHa1F,Ez+qo[ ~7侹e~*RewՏF9.Ŝ95 j[cU DDFF~v枴hBԹѢw#Bdz'`v\tfPoߺZ=2ghC pa\ bcGm$vq}dd؅IRra,Ű) s cCG^6DP^"l"yC0+-7|-CP[i n8%}9G ;pd粿p[~JԬv\Z@ehL1z O ""&[m߂Fh?]Noߴs CUgCmIj9s̟Le2&69ʠM(G)2V$oKaNvBC뎱zFb8d#T(j)9P Z<_Q#2r'9r;k8 ^)6 s_j~qpV=H<){CaOOָ -Fbtw<^Chs^b?p]r=aXRá60FT%_n<~1ٔZ]yHx6t&Z,Np"Jg{1f0o19.6^_>a R"`ah0\bsI?L|Wha=z%dK%,J q"Χ|]psLͩu\<3+qx/ V)nI3cRv6Y;ѭ:wiv3.ra)߇礱o a]Jv}o\ z";@ֈq-1$gb n>.x& .V- c1$z32OT,½ȔD/cp3c3M͒t6:k<0QkY6d~Na˅-m lD_<~MG{E$$IWĮNK328ur}9OM(GUfDkoY9Dw}:$F7PtduJd~c5oXs M'J6xw:kxI9yrpձߍH%Ṿqs"Y%dK[T>R0@d/+fxw]i(OL؞-kZكSL=fz=x r{v_770je|F\ɑoq(=,no(睜62ha7[KbczV7R;>kwpw6SoR5#EC2j[Ȃz(O퐠Z|2J% yve~YkK6'NʨXy`}X(qN{^6PiZ'ucy\N[sdw/½T~1o̮y-yi Uo|]y4ǃIW0(P/Xt/Ow0:0QOh~\|-gc[U8! wLJcZg 9Q(gF/^lYEsgF9rhy[.:fj8"/1,G!Sb~{6u@,I=%FԶb{6rf/4Mp2zr/4AI2>#;D n8].2"ʇ1 PrإInɥǩឈ1Nsn7X&f߈( 4rp7; %NqyDKm`؆%s\~yq-}{gT@",X_+^PN沱ȃn6l&: xw4xNE{ԊN:{…(KK<\A %UPKPsEIBrSpZ+›,Ly-mP[!-{`]8o5g Q5L!]%|L^+*Zg5"nF9~X [1 A.3@z;gI0ek.[\C<].3+_8|"7y}1̊*HYx12mIAH2Q|URIx{ AM+`|T2j24:Jv~2CHP5糽)J%mzGJ1eۨ8b2dlٵEaeݏ l&[kfY"+ۙbʉz52)}yVΉvaU=O:xW.,ٕ06 $G񰃿?< ԛ`SXgّć\$1D4ڔ^ * w@-˲V}#PT1tA&_A Q:vcBloQK>ow ~F7>qyH R%s=rLE1$]c;2s1V$Tu>\'@4HU.QGw,ƸD1 ..o"=q莗ޮK>+ቡajh.jޚhkcxjq_ɗ1fF#A80Pjl48!D]Ff,9{2RR8;4<9zνz3iX D:jMA,DJap&m SnL.N[,+\ZE\@줝 eA246n|p^ε ?!p\biܦdO?"qf 1BFB7B-ZEQbܾ8^;*Iqn5;E(Yr(5{s`b](P0z!J(|R1Pa`,O- >*^{J5…Jn37@3¯ =m sSb]p=O][t-KO9Y?N=g0笚y궥ZI` +')6u=W-׃R>C8kͽ܍(OPN8kϬr2>юc^"ቀ'sΜ>wJcs!TN޽s["ty<Zn'H:M[7$CTks-%&Ï*{!/>"Ǚo5~#6#>-#俷] >ӔE$?qP鱤\O83B3ь[ΔCҔ7'cd$?/^{j .ߌl3`m%oOTR}>K!;/(4/w7{0@^iqGn~^H]3Y(Pr=D1KhC7Prt"2>P )}7;@% ]=_LRLoP)B(NCִr=Uv J5TYwʄl$Y׵I?CTp[* od~$'D $D(کF6vsk &bazr*q#%OwTh@"BdNJDǰ J:OI@02@=?%e70_yd$7O.ЀnMi~H7|md/K?R%vM9bNvyaz~Z]M F FVP;60ɏ3,m9|<29h/v?F;hóx^1?6ѯ~?zd2d?T}m7lZMS SaWMQO֋N]KK,iM$w`Sk~xmi$i`;0b~e,eC ŧ2T[O/gYOSDN;Ոo"?2Ó^6|m }ۻ׏Ta>*óo6zKK}.cͽKG kxovuo ʋ;mQrA Pn5y9ww8V4y/Oh#Uwў1{X_7Hgbq;<{>v݁Hxˏ |qjzv8t5ޞ?tkֿT7\2䷾7~ 1(019r{ص.gb<,N{GGf}ryvjn߻~cq*:D|^Z{D?fO*5@67`pUG,]AQ,J&nDK!ɐ0Il>mD YEX%J %\ @_>8stS.]UR8bF,#@dj|] zCh9:}'O_<=jT,xfF?Vu8iMq4atCQ2jW7U2I h޼g4dRsQVX7i@xQWGTAe\@ "PX4'k>,Mz??(le tA #Q}nv.#BR<"!_0JMZ˅<_Gsg*I3-֍۽يCWkLt/ZbAw[1f뽗r mvRm.րfMU|f/;7XǎWIھp{lֽs߮Ӑ6 {`6J+ϸ|S=Wҋ#ˊF26nZ \ݘ?=$[F|Wx2<=E0$m|m>O{}D}N\K<'㸠JL :$<}D:P 7vc }bXu|={/4d6aGKVu|auwƯE=\& /F4DvJF* epODDAKld,|7O8^^!; />Es0Zwme tqd){e|WX>oOt}gb*h{ɛ l? wv1f] Buvb Ttjv)#@*ݲ]\lӜu$8~+wٰ'=ccR9\_ʬ-A}V<6Ftyc -q ˜J 2N_w]T{u.ǶB3B9TY]']MO ? r~%UC~+ 0 :W8,2X5|zgl[ls? Kh1"f\z:^$rryg ʽA ~~류`_I gr 7YDQohw@y<qGћbMEUj@kjǒ%l~4%FL,Ə?`d} xnBv0vw?lI&cD6W_GAręlw瀥aG3~,>>! 5]{F߇K gӤro h(3ЂzBc=k@b*=ߞrռ\pTBL xQAl 9rbP'V٢M%V۠?@B'J|'ky&?dSg ? [B]QLƮrn nxG0JlGLT2l;9V gY& J+[Gt +)Ý B'sj[¤qW$߱_HidH//"^#MAr[ @G\X?8xx+hn*[#g *#5 LuBe>~Rp|V&uou`Ets z@{o0J&S!=; sYKg՞ǷO|kՅT^dKQ)L+'QY@umpsDAcҟ.Drb@nerw) _`eQ~dKvl۫l&cp }c ϳyXLDkil B~Vy3xS076mȶ6q}MߧBz|p^^u0՞rAC3JȰj T#`&܂ \zMY ɭBGP*g]>?b *Q:l3j%{](,B K@&v$DqDO0ᶣ]Nkwl=MVcrB"IM,NLxaw?+O#$N<2sbj9ClYLX"ͯu\G96q)] b|ti{;&?pw(˃? Z/k[ѪZO}D)畎+9:*Lvj{F.qs:/[$xHVNx4tS[[O/,EPm3&`Y*P5Y?b'_ӻN!Lqw 8#~ bT+#uw0˜̪CU-@ *n \!,P)ː *; 7np`@Qt|ص#B Gƶ" !rx2O[׮'7DM6ɯ_!:H|4jޖ|c|=Zx?36bNGm /%v3y򎇉\45^pX+N2&xAG3j nYwfxJtu6Xui*po`q+{i%%arCgcXm|7ǎ;JZ+yW6`FGkH;f2To[jauW{?s 9`#U_V,e}\Xt?kg6@FȺf%岔MZy=x=`T碎VUOU}:nyly"F,5 O^@@*IA6| ,b`u/5UU$UF hUFK6HڸtC 70yq)81 ,EJ;r@z,}r_M6x =eL䜪(ũ]ZkK]S; "[cKuopñDlyx>]iԁ#i'_siԬ䉸E67+UWQ8a#!D^WZyY\+/?} X zЊX\4\`o  0tj{#)rۮ%ʻ rXz0Bux%U%)mJ0C0l(f+N2P$OPτJ(խx$N]ω80&'飀\|Ooi \u~s=9T~ S-YT|q]ssp,ݹD`'@2Zƽ5Sk88X9(w\T( ťӍm鍯S)'@ɺ?g_+VPTM?ET8J SS܌5*['r$ҬOGFMinwBD ZkRӄŜ83,S~TŅA۾.G2+}Ohq9C4C?&Oj 'yjݳ}>)pMlrQggS+4#ɢ#ɏkW!S y|2o a f=<_MZ/T9Fm/CY8.}>bcҸ-=Û?gl# _̓X{|!Yv5F>7WvqRt/}]հ@W@T o׈AE:]"}nlԸ$HB .(oӽ^Y=5YgFAMtnx\ud3lV1i >UVmk2.|g f]}$vLruK!]ޮ}W{V;k_} \nWxt(QN*ᦹT*U0-5!jg椺ks$" u]kGAg5 Dfҟ 00TR((ejT R_3p-W m!ȵTh)bY-sU0:{E'4WwYߊޓINR&`?h2r4{ś}|9#SЫ*KP@/,}2OTj鐘$yN!K~7\jON 7PQAR:I !H_Qh`BC-(L}_}Pab*܀{y DFI^KA |RH"2kCq_hf7V9jo{^z c\[ Clj Rssd)%"a 0 aUQL$,p4C?jHDjݯNI DEG]j_vZkYj-֏zQemAmsNWX8]k WѩnMrdg.Sftn}!Oc+TX2Y&% ma]0Y94P6ڰKcEs FdD>,cr9g@_T: cpme_SlZg񚺎yS763Ǧ%-?:)eW'%J-Mٳtq!C uq b2m{V  0U#!:;\Vp=[ QD4AS#|6%B%d"-l75. |1k]qvVNTceDIo[qc &-16u5<""x K2rOoGxzN|.{q 1`v8$[I6طyKHdgi1 U"Al͒;q0t<+nfݓhI . .()fݼf2@^:D p: z]#fi#)# sso~bo]e9d?(ݫ*;.wjBwL -6?ax;{u'󋯰 \ j5֢ML&BCDԖ嫷v':G]der`&,@Lcdb=ӖNX;\`)[PP8C9,~롸&Ljax Kb 5$ Z ]4@&)j& PqD]ay}4 tTtrsij=,zҒs_I/ hv[׭8->emNn}YH2B!V\Wш$r C+ p*Yh}mm r;J]w($8-p͝Aa T;?3R=yן37}5=Ez0Y45 $] ( }@Ǵ' AGOx =K aUO(ߞ"8oJ˷fO~L/KޅTMzGMTz. a=LZM{e՗bV?)(mT}gj/3wwf&"X$BB<[uA>?.KOj!TPf2Wct$;U@CBIn +w΋:b身oݍG&4Rb= dg}pҋ?䑆::!AVe 68? oDva5ՏoՕlqI>ޢW=V?BF$/$ R 7y!D(j %ꁰꩠ =ƕ_7 !"!,1&W l,C0S+62 uJV)׎~F/E% !r ٷBN4 4 IQ㽄:oߴRL$to"a^de$(d(d(j(j(j))UUDE*v\s3'gՏ^%t{|kb`3Ϥ1|>cLrYR яM!m8IjnID[+Cni/ۮ&iI| 6D :W" E wNbDխR ۻvAs৿}ʄ4Ӹt[w[Q_ u^ DPX$)JDfJ(((VF"hh J 7wߣyj"Bd &&qhVbYT?,h%h )" bJ"J^b$"( B( Z*0;#b"jbDQ7&[:C-zS[ T],n7ct4ݙF՛Ӷq!֊aN4rM•2q+GmFYb@ݢ#T)̃(Y͍xH#uqMr]+C`5sbV/Ty cɕn#C{4|݂ų`XsBDE[Ud9RkY5&#Zwnez(K9^ DC*%\L 9ɯOMҘ2RRQVKm 0Bvvf@9!5B.sÏC0JcV\zNs@`(Vjו"յ@ @MK%ASjT#ONZiUD\9WIYuԵ0xglED:hgK_~YL|K".%OJ7}6{=Z>>dd8|\02Vof:6fP5~Pn@0B! +%u2jn5*[wG#Vm!z<_cBkߖ;gDXT(y*Tu@ R tҸ BDĀPPJ3Рs42fP?0MRLUA"$)8Ezh ؈r) iJ^4ĢCLR*輕C3vA%U7ɘr?mP)YU&TU' Z!k{_8+tU/jҋ%G)X[^6;o0e|7kk^vBۻ{}2$kCTc]cf@d4ߖ:itn_ϲ}%̿!_U_38SçcJËN<1aaڐ1 eytru*Ox1WwWsޜprfk2!Gyk"#F2͎C# H LHRH,HIBBs#qĸ,@8fܳPئP% Yænqhk۞]ZIO(5>6!j ERX+ԣC+3l?PWu#k]]+(\!EdJ-BgIBVWa2`0ك# dWOgnbD%w>=Cy4xNEH;#rӕa6h ^TQYAm{PT"'~O-4 Rl:] 9l'EWTR1ҭWY6J>䘳>5/~G TӓEoMޟ/?jeR.~|'Τ>]f9.sCi= 'vAvq8-B RDZ@^E?_} A S@({9Qsnlغp8@ Anj𥒰C-L9W(ԸH.psn– c6x-̾֎5gQVi̞\L7(``a~xJ2tsfkn?7W5o'?)> Gԅ[<[t?)OKWUFw'tj;t㖓?ᷛN3ի:e\-ca7(O ~:rk9z6[.;uQ usVltq?'c s5{<P"OAU*!B/vf4kC5@0f@[l:r^:;vg _ϱGwH0 |=|FO 9wcGwY)9D^ݡ331Bj?x St ʉGT>(X"X*6vՅgkYmiޏz??¸P$3gf醭;Dvݑ*3(I! HY/zzeEq{TX48! i|\m2Qj!&``%EQE)l1=v`sҶJ fA#WџaGD5kfPxGvD2@̏s>dt4uzn =tmI@UA*9%m@'U|^ɠNsSIki\|b4gCw~<_5U9am*.`!n1+HUnv;.Z2+Hux@0X[ ^oKa]'a4o= 㤷̳\ÿz{;bw5N+0]V{|MfD.VwXbL(@^hb@ %LcQaܻF%0]rqG|:9 >4};8̉,Y8HW6/͍1mHݗ%? JR>5O*݅%ٔXL)axJ03l{+ZwάD@Td_̉y_6̸9SjLM$` ?i⳾_Mҿ? yO|U5^8 'N27Jlmΰ1#B|ܛ8w$X>l/a%G"Zty+6·V0xŐI쨊!]C_"H8;\-{=ܔ6x/9ßnPt:HBvnSyUΦ88ݎ1!@FD/E(2*'߿nr\E_BPŦWl~2TL LR]{4P) d' | Tgݸg x@}>wOaTxzv'mTU4}}E`WW@swUt/Ot:,[۩J/|F$|V6AnjI  PbeMF~7K4IS{:9D % W4 j2c yo4E]mH,|J y}ܞwF#![:=nQgmQ]GXX~}7ݜ~%a'6b묿Er8R(Q/% oJÁ/0v]}4prX:[9z8}JՄCk-ߘ`GA2s0M0t) Ġجܡwz@5 @he^=c y& H,"˞vEAAq%$T0@+M qu]}@گswWX$Kǒt2a(:I#ܿ]a);mjwk#%ۃ<)h>NW}򳇞`7|1=[vNCzGВbsk/l",R V%GoNsŧz!Ïć i mӟL)GYs7$p"P9 RyⵎTNP)5|o),Cz7V+rA]ݏR3{[meO #*kbB:f %ZKx= }WBg'4sG\vؾ@e>!eLH@TwfA|l]`h$AM nk(=>&\NtJmyxYsƱQ꺈#tȚW :Nu^aE-~,aOPJqHࢦP2޽LܾՏyun>! 4v`}`#7Ձ)BĦkC؊Bm{_ʹ#q |9dA1^#M7qk{cF/J}C) l<}o(=?JKw1*&0bZs&5\DMQ6*#xN(U'6W"h%l;2Ү%@A*iy1.W: ѥIdY(ż^#uPG2.-mY 6p}ڮ_ܲ+A+7h])^}0#mo rE3t99B/˥pTcΈZa&+ߠ* dtJ0AT0)!aE>^Ng#euyxx@-s_XÖc10V޾ixΌ"ف4w?YL