summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/init.c
blob: 17f22c9d6241005be8fef2700b7a80526261e3c6 (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
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
/*
 * Guillaume Cottenceau (gc@mandrakesoft.com)
 *
 * Copyright 2000 MandrakeSoft
 *
 * This software may be freely redistributed under the terms of the GNU
 * public license.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 */

/*
 * Portions from Erik Troan (ewt@redhat.com)
 *
 * Copyright 1996 Red Hat Software 
 *
 */

#ifndef INIT_HEADERS
#include "init-libc-headers.h"
#else
#include INIT_HEADERS
#endif

#include "config-stage1.h"

#if defined(__powerpc__)
#define TIOCSCTTY     0x540E
#endif

char * env[] = {
	"PATH=/usr/bin:/bin:/sbin:/usr/sbin:/mnt/sbin:/mnt/usr/sbin:/mnt/bin:/mnt/usr/bin",
	"LD_LIBRARY_PATH=/lib:/usr/lib:/mnt/lib:/mnt/usr/lib:/usr/X11R6/lib:/mnt/usr/X11R6/lib"
#if defined(__x86_64__) || defined(__ppc64__)
	":/lib64:/usr/lib64:/usr/X11R6/lib64:/mnt/lib64:/mnt/usr/lib64:/mnt/usr/X11R6/lib64"
#endif
	,
	"HOME=/",
	"TERM=linux",
	"TERMINFO=/etc/terminfo",
	NULL
};


/* 
 * this needs to handle the following cases:
 *
 *	1) run from a CD root filesystem
 *	2) run from a read only nfs rooted filesystem
 *      3) run from a floppy
 *	4) run from a floppy that's been loaded into a ramdisk 
 *
 */

int testing;
int klog_pid;


void fatal_error(char *msg)
{
	printf("FATAL ERROR IN INIT: %s\n\nI can't recover from this, please reboot manually and send bugreport.\n", msg);
	while (1);
}

void print_error(char *msg)
{
	printf("E: %s\n", msg);
}

void print_warning(char *msg)
{
	printf("W: %s\n", msg);
}

void print_int_init(int fd, int i)
{
	char buf[10];
	char * chptr = buf + 9;
	int j = 0;
	
	if (i < 0)
	{
		write(1, "-", 1);
		i = -1 * i;
	}
	
	while (i)
	{
		*chptr-- = '0' + (i % 10);
		j++;
		i = i / 10;
	}
	
	write(fd, chptr + 1, j);
}

void print_str_init(int fd, char * string)
{
	write(fd, string, strlen(string));
}

/* fork to:
 *   (1) watch /proc/kmsg and copy the stuff to /dev/tty4
 *   (2) listens to /dev/log and copy also this stuff (log from programs)
 */
void doklog()
{
	fd_set readset, unixs;
	int in, out, i;
	int log;
	int s;
	int sock = -1;
	struct sockaddr_un sockaddr;
	char buf[1024];
	int readfd;

	/* open kernel message logger */
	in = open("/proc/kmsg", O_RDONLY,0);
	if (in < 0) {
		print_error("could not open /proc/kmsg");
		return;
	}

        mkdir("/tmp", 0755);
	if ((log = open("/tmp/syslog", O_WRONLY | O_CREAT, 0644)) < 0) {
		print_error("error opening /tmp/syslog");
		sleep(5);
		return;
	}

	if ((klog_pid = fork())) {
		close(in);
		close(log);
		return;
	} else {
		close(0); 
		close(1);
		close(2);
	}
	
	out = open("/dev/tty4", O_WRONLY, 0);
	if (out < 0) 
		print_warning("couldn't open tty for syslog -- still using /tmp/syslog\n");

	/* now open the syslog socket */
// ############# LINUX 2.4 /dev/log IS BUGGED! --> apparently the syslogs can't reach me, and it's full up after a while
//	  sockaddr.sun_family = AF_UNIX;
//	  strncpy(sockaddr.sun_path, "/dev/log", UNIX_PATH_MAX);
//	  sock = socket(AF_UNIX, SOCK_STREAM, 0);
//	  if (sock < 0) {
//		  printf("error creating socket: %d\n", errno);
//		  sleep(5);
//	  }
//
//	  print_str_init(log, "] got socket\n");
//	  if (bind(sock, (struct sockaddr *) &sockaddr, sizeof(sockaddr.sun_family) + strlen(sockaddr.sun_path)))	{
//		  print_str_init(log, "] bind error: ");
//		  print_int_init(log, errno);
//		  print_str_init(log, "\n");
//		  sleep(//	  }
//
//	  print_str_init(log, "] bound socket\n");
//	  chmod("/dev/log", 0666);
//	  if (listen(sock, 5)) {
//		  print_str_init(log, "] listen error: ");
//		  print_int_init(log, errno);
//		  print_str_init(log, "\n");
//		  sleep(5);
//	  }

	/* disable on-console syslog output */
	syslog(8, NULL, 1);

	print_str_init(log, "] kernel/system logger ok\n");
	FD_ZERO(&unixs);
	while (1) {
		memcpy(&readset, &unixs, sizeof(unixs));

		if (sock >= 0)
			FD_SET(sock, &readset);
		FD_SET(in, &readset);
		
		i = select(20, &readset, NULL, NULL, NULL);
		if (i <= 0)
			continue;

		/* has /proc/kmsg things to tell us? */
		if (FD_ISSET(in, &readset)) {
			i = read(in, buf, sizeof(buf));
			if (i > 0) {
				if (out >= 0)
					write(out, buf, i);
				write(log, buf, i);
			}
		} 

		/* examine some fd's in the hope to find some syslog outputs from programs */
		for (readfd = 0; readfd < 20; ++readfd) {
			if (FD_ISSET(readfd, &readset) && FD_ISSET(readfd, &unixs)) {
				i = read(readfd, buf, sizeof(buf));
				if (i > 0) {
					/* grep out the output of RPM telling that it installed/removed some packages */
					if (!strstr(buf, "mdk installed") && !strstr(buf, "mdk removed")) {
						if (out >= 0)
							write(out, buf, i);
						write(log, buf, i);
					}
				} else if (i == 0) {
					/* socket closed */
					close(readfd);
					FD_CLR(readfd, &unixs);
				}
			}
		}

		/* the socket has moved, new stuff to do */
		if (sock >= 0 && FD_ISSET(sock, &readset)) {
			s = sizeof(sockaddr);
			readfd = accept(sock, (struct sockaddr *) &sockaddr, &s);
			if (readfd < 0) {
				char * msg_error = "] error in accept\n";
				if (out >= 0)
					write(out, msg_error, strlen(msg_error));
				write(log, msg_error, strlen(msg_error));
				close(sock);
				sock = -1;
			}
			else
				FD_SET(readfd, &unixs);
		}
	}
}


#define LOOP_CLR_FD	0x4C01

void del_loop(char *device) 
{
	int fd;
	if ((fd = open(device, O_RDONLY, 0)) < 0) {
		printf("del_loop open failed\n");
		return;
	}

	if (ioctl(fd, LOOP_CLR_FD, 0) < 0) {
		printf("del_loop ioctl failed");
		return;
	}

	close(fd);
}

struct filesystem
{
	char * dev;
	char * name;
	char * fs;
	int mounted;
};

/* attempt to unmount all filesystems in /proc/mounts */
void unmount_filesystems(void)
{
	int fd, size;
	char buf[65535];			/* this should be big enough */
	char *p;
	struct filesystem fs[500];
	int numfs = 0;
	int i, nb;
	
	printf("unmounting filesystems...\n"); 
	
	fd = open("/proc/mounts", O_RDONLY, 0);
	if (fd < 1) {
		print_error("failed to open /proc/mounts");
		sleep(2);
		return;
	}

	size = read(fd, buf, sizeof(buf) - 1);
	buf[size] = '\0';

	close(fd);

	p = buf;
	while (*p) {
		fs[numfs].mounted = 1;
		fs[numfs].dev = p;
		while (*p != ' ') p++;
		*p++ = '\0';
		fs[numfs].name = p;
		while (*p != ' ') p++;
		*p++ = '\0';
		fs[numfs].fs = p;
		while (*p != ' ') p++;
		*p++ = '\0';
		while (*p != '\n') p++;
		p++;
		if (strcmp(fs[numfs].name, "/") != 0) numfs++; /* skip if root, no need to take initrd root in account */
	}

	/* Pixel's ultra-optimized sorting algorithm:
	   multiple passes trying to umount everything until nothing moves
	   anymore (a.k.a holy shotgun method) */
	do {
		nb = 0;
		for (i = 0; i < numfs; i++) {
			/*printf("trying with %s\n", fs[i].name);*/
			if (fs[i].mounted && umount(fs[i].name) == 0) { 
				if (strncmp(fs[i].dev + sizeof("/dev/") - 1, "loop",
					    sizeof("loop") - 1) == 0)
					del_loop(fs[i].dev);
				
				printf("\t%s\n", fs[i].name);
				fs[i].mounted = 0;
				nb++;
			}
		}
	} while (nb);
	
	for (i = nb = 0; i < numfs; i++)
		if (fs[i].mounted) {
			printf("\t%s umount failed\n", fs[i].name);
			if (strcmp(fs[i].fs, "ext2") == 0) nb++; /* don't count not-ext2 umount failed */
		}
	
	if (nb) {
		printf("failed to umount some filesystems\n");
		while (1);
	}
}

int exit_value_proceed = 66;

int main(int argc __attribute__ ((unused)), char **argv __attribute__ ((unused)))
{
	pid_t installpid, childpid;
	int wait_status;
	int fd;
	int abnormal_termination = 0;
	int end_stage2 = 0;

	/* getpid() != 1 should work, by linuxrc tends to get a larger pid */
	testing = (getpid() > 50);

	if (!testing) {
		/* turn off screen blanking */
		printf("\033[9;0]");
		printf("\033[8]");
	}
	else
		printf("*** TESTING MODE *** (pid is %d)\n", getpid());


	if (!testing) {
                mkdir("/proc", 0755);
		if (mount("/proc", "/proc", "proc", 0, NULL))
			fatal_error("Unable to mount proc filesystem");
	}
	

	/* ignore Control-C and keyboard stop signals */
	signal(SIGINT, SIG_IGN);
	signal(SIGTSTP, SIG_IGN);


	if (!testing) {
		fd = open("/dev/console", O_RDWR, 0);
		if (fd < 0)
			fatal_error("failed to open /dev/console");
		
		dup2(fd, 0);
		dup2(fd, 1);
		dup2(fd, 2);
		close(fd);
	}
		

	/* I set me up as session leader (probably not necessary?) */
	setsid();
//	if (ioctl(0, TIOCSCTTY, NULL))
//		print_error("could not set new controlling tty");

	if (!testing) {
		char my_hostname[] = "localhost.localdomain";
		sethostname(my_hostname, sizeof(my_hostname));
		/* the default domainname (as of 2.0.35) is "(none)", which confuses 
		   glibc */
		setdomainname("", 0);
	}

	if (!testing) 
		doklog();

	/* Go into normal init mode - keep going, and then do a orderly shutdown
	   when:
	   
	   1) install exits
	   2) we receive a SIGHUP 
	*/

	printf("init: running %s\n", BINARY); 
	
	if (!(installpid = fork())) {
		/* child */
		char * child_argv[2];
		child_argv[0] = BINARY;
		child_argv[1] = NULL;

		execve(child_argv[0], child_argv, env);
		printf("error in exec of %s :-( [%d]\n", BINARY, errno);
		return 0;
	}

	while (!end_stage2) {
		childpid = wait4(-1, &wait_status, 0, NULL);
		if (childpid == installpid)
			end_stage2 = 1;
	}

	if (!WIFEXITED(wait_status) || (WEXITSTATUS(wait_status) != 0 && WEXITSTATUS(wait_status) != exit_value_proceed)) {
		printf("exited abnormally :-( ");
		if (WIFSIGNALED(wait_status))
			printf("-- received signal %d", WTERMSIG(wait_status));
		printf("\n");
		abnormal_termination = 1;
	} else if (WIFEXITED(wait_status) && WEXITSTATUS(wait_status) == exit_value_proceed) {
		kill(klog_pid, 9);
		printf("exiting init -- proceeding\n");
		return 0;
        } else
		printf("install succeeded\n");

	if (testing)
		return 0;

	sync(); sync();

        while (1);

	printf("sending termination signals...");
	kill(-1, 15);
	sleep(2);
	printf("done\n");

	printf("sending kill signals...");
	kill(-1, 9);
	sleep(2);
	printf("done\n");

	unmount_filesystems();

	if (!abnormal_termination) {
		printf("rebooting system\n");
		sleep(2);
		reboot(0xfee1dead, 672274793, 0x01234567);
	} else {
		printf("you may safely reboot your system\n");
		while (1);
	}

	return 0;
}
 uyLP@xh( Δ_v,CHMz纺iTTߠ " }zr) 1BiO#z"WD}`hƣZ7o^22s`BVd!  S+d;% Ϊv윰Iꋦ3cİ<# kۢz-8utx5i-ƀK|]awUvw䶛ywjt }Ex}ң)iʜ)Ahأ+b0Eۚ[ɼ]O 6/ye3CڰLl)Kä:CƠJ(ϝil#DA[F9} ,a[y["~mLK􌞎EG_7C|umƠjDspys}|qݨZOq0=S%XN\CIp47eRe 7stf8yQ4k<@)Vؤ&l2qNS oP/IGV }#"l [&-'@NPS N֞pqOr R?PkfEGLG}ӞF3 AW&cӷܶXZES&;l. 3w`Y:z'+D=_@j9먦j5r"!@Ӂ,ɡtJCg-mqKX̠Q `(>=6{H^ODẊε,;k57y5$gǜ9Ouir˅ #*,<񆻺]%_)[ qwe5HrZ"3];p$A3 ȈN~ MCwˤ# s"R>2᧳겅6Ah67~ 2OXxE?d- ȱ;H|la+V${uT\jM;+{H2bH9!r7TTɋL)kۇH 7" wIfXd¡ ~B,Dā\K)/.e7> !`5"ww3~DpWd~8IDK"[}U54a/C6xuf4X{{L*qjVŧ8I8쪄m7 lU2!G=$ah|Kh#{ 5;`Dl/gR0ߜ?y,zY0uhD/=qI5Uބ*lcTw '@8X/-ki,^^ruyEVt܌,qJ4!ɼA߫i9q콇6\q qJ?*_| D2~6! 6ʯ`JQR-`{LK&˽u%ƄwO&[* SB=_~k'UO1߼ӒMn~Hp'ư6~ @ I*IY偲@'Q#~l.m9޺LSu7>zqEAcj1^ƪgsaEӴ܊ s"53m7 l {Vط.տT,rB|6w=@Lpsj[lUYttJFWcnm sx]0RRBH?K-wL|« DL^woz㯜 ([Au7$Q>ue/B˧jJp`?f]j2"'u |դ0fYxe qՓ!,zx1&^B{֜ xmos\BJ@.9[H|H\<]AJwwP aվa<μѐ90I-plX8t yDzO+XgR]tY#[Pt}h;`+-}\2Vrxd&_~i9Mdj@ +#*5ºdƱ>bIJ~7 ?^4='Cs.mO=P֗>ct՟oiZ[1-'eby1?7dՔx1k[$fa~pES/ntLB,#N'9YYyO,4[1O pNAMY0 =8 zK̿[]sbazh?!"FŒE}W0aij-+Xq~) ܟ }Riɣ.C!^ zS@B!UH46kmↁ@ܢͶ-sx[MRz./{Bc c4 F=v:\HNذZ߰B3opgqʢy~MTFF\ẋC"T\E}arI$ڱg=*62b<u8/ؑ~g@f6nynyRĖ&#ɣ&W `x`tp-R' VwpUy7?ʖtO`Ա5 f\~;YAd?~1rA. ^zWismrMo28f~JzeO9mSH'ÿtDRѷ0/P~6:}m,g'wu9<ޭQλF5nODDu놢leϋi0r>/N%Y9as63Ӫ7eJ٠TbApaRW`S="Ђ,Ct+[81,#7 DF?ՋkR&ԛbcdCyгAʺ#B'r-wjLUX'LS+2k6kh P%,VϸAV.d&rc _C=yWV|?9pZ2~]V%& !1I섓.*y'e\lMz AGbeVvGhvf{'0*/㻢țsh!YJ@^FĬ$w~0sm] Pbм@þ?l,t~?V-7x=N)qU> /U9ǚNJ9DN]1fYhy"j}9JbeS9ܒ8sDQ}`uAET쮶Y@$nd{'Rlг<zĥFE7c "({`VOLՐ#2_PC߃ ι]rAk|H{ylh_g QoC0 XsF)[d_Xm&e I͌~CZ<2\IVBIF`̼HIݙ\m;W.~짫'#U^y3#|lEU8`ۧjB4$$ZX"\ ɚ3ЫeCL 0!Ѷ$,~1۹Uj115(/a8i`]V`M.Q39kjѢ!`zԌ:/U ^7DJf/ ushbȒGtm^?^-т4^_~ B5o!=P/>owAG)͏ αhow?R*'UQ;]51_*qZcGm"["s\$穠Y2!h8E*(qE҇9IQSz%+-PWmfx@2h|Y#(y7Y?Ymt%GBPPcvj2bntNĉ8r@1> V,E9TvD67g}iyheuE-&S:TͤȢlNHzIx׿x48iؿ1,אyjeύf):礆ޙHp)S& .BvD; "3Z΀f>qj9- Cq8.6d_aRfSH_یP/KK5qgI(߃˻_]{s6,vD畱6m#4~u9)QNE^3xQנ9sXZ VFZՎk\ Fr@9YV CVdIw޳R8xJƳ6&%|ֿlّ3wQ*``آԩI7 1QN;fM%+A&D%^@7gn$fwU.`nZILxDڈl3wIrf0L@i6AkLYiH[h={'}%}` ǀR>.Nq4!/P01|zĒ&񹾯2C68`|bTAQ (A4IF34 ˜T~u|H>G-n>Πc[f=3{".]ģOd*Є2M))+p̶B1'\KD/Ke"qcQM{x8n;V8_.VlM8,+R7쵥`TbNPg0u>]|%W־PNz,g 2Y-ggAs''4,kr놪יOiEN5pɝ\M'V1Q mw̚7w<8rNBk-ϛ|ѯ~S:+t m%qnM}^;YK ̺ϜM2g^ AQ/.(ʇYMå?h^uC-f^#ݾeR.UzIlѳéƇ 6)Z7@ǕSht9 Hghr؉Ecjfm5pVG|_ÖDtfCU ;%m%¦үVy3m3f}CRy]!8o2  ӳPJyA-vx<QjUwyFos%;+-] H_kRξ0 7dYpה>ݙL4)@: yw\Yod,%z\{m${^4e$E0ˇ:V[bc M:MMCcΓz<:"+u^V@ :bH6}D4cg>KF&,)S} wO-ocf}7ynݞ&so۞݁;;ew+9`5:/* f)H86C߉/YasixaU[Xܙ9=fsи6eO`=0G6iMy7O:s;J.b ؂y[ kA_LQ: C {ߧn|#g1`ʆ.~k>LLpp5&DfGA9b},AL/nBJP_`X1MU/trweg%M~˽^P]=Ϩ )LÚ|hP$nE/ N`vZ]ډѵ 'TPEܟxT-ܱ [4+WQ2Em׹= >idyFh1=zQ6~X!hXgTG3 4CES9ʤScN6݈V@^M;~tB"6'?m ~Wc"NwE!WD9j^wm14oʑG)]c4!W?ȾyqSu^ H)EnɖyEiXr:nĠIm^%1kJChiRښ.> 0μ@G'֫SnwGsːp9Et kޘĜ`{"˦ڀP! qh%:6z"h̖WkH,{d;XN}@N|ZUE+=ZɜCISkZo/7 $аt&D4b/5x0{t]w'GҾ-(O3MYu ɦ$]IM DX @Vv5yȑFo|"qP\#xNZB@)7nEvbJjX6XTYߊ<eVnN`!mhH?/ ,䐓_˴ƅ?9XR/FFp{;zV+ bYθ:1'> ^٧ d$tƽm(idlN5#1蟫!>dK%2nEPMwFkĉZIf2Sʔ;>zBḲ^>WS\9LiP`a2aJ C J N'x %6Ԭ7 5Tb :\'᧰ ]@zDIq17:Aq`ԕ<W ~"N͊S?E(;%HV6KUC)HYR>w_ a:0˚bɕ!?kK z$ {ﱿ Kn7eJ4 h\1(z@0%x_AI8]2Ʃ @FAPߗHƘk7rBrCf5%r!мJu,`sl5Yb>8δ6RPsoSI^$!RdiE$~Scˠ+!r*p /~qNvr=gD^$6L.Jmz4GäkfS L*bBG!{ri)q: A?'6|xF=0{b zg_orifغ7_֛]>ƪr %tظQ4^YQ؀b(Hx5Ɖxyl\ɼkNFN"B?n(u(WVa2G̅ƍPIWGCgOߔꪚW!p _ߢXPYy\{-8%a¾Aթgg;f)=ȑuaV! `"G'9(YXB?^|/ֆ=% _T|iۊS_Pk ,Mз:sS^\DԮBBJ}|we5ּLdKNW˲<aU~̬c"ok} ] [zZmvéJii9RnHaz/DO*̡wοiߟ/Ac. JKx/3KFH-rbL# 0+_}O?ȟ_1:hn?}9b5AH2%r vrzq Vyrk[WQĖ7Xc/}#$3AV8N$VwEBןC;QSڡ˜hrbV#Щm}jg2V5Ŋi҂{p|ۍ_ oRa9N68Rra&,Ӌ/2hL~ұM r{#T-&gS}[Χ!;K}s6dA܊`dӈq~r@=p(EfJ|~bQ=lfJzoZ Q*/ /6&F$1A'"^Sąiҥ{#}Տ"\ׄxUe몑L%Hw|'-: sA*ըΓy=L&ۜ]%R/`zbCf{- t_^%qGzo.+1)e[,TMlG^ӭ"cl'/%a#˲.нGS 6z3[&kPΤ$>҄̔o`x7&#TC/yEM$&PYHPaŬj 0Qw@dFJLݍdؙ+a9p+#)@i?T_6lzf-&ߦU!٢:8n;2d8Vu 8ɿ#d1b1V'c8h6ʌLq >|1p$ RPe?ft%-WEz0 2 ܄RovV9p/sVgnVB DnǙے.h^h48t;4p@.eCpv dX)U]B+2O.H?'ģm'\@s"+n2>\]ː&{Rɀb8 mQRcĹcX{`Ģ3mĞf&Z*:2x汈~ܽp#ڲvqL;ݎO]IvA+(`=I,! a@Ji1N ܩ( ,? ڦ6/rz~ odl0p `hm{ޤ 7x'g}JS{9,e񌍪ImC(uq#m+(@ifO<Uj>⼯[BKE4ф:F}= :`d8mQ9L\ąPED]~H~BKXvc[b fUH"ێowظ~-Nr7j~ZbӪx3-)1lf.ذ`矵\#zǛt6U3a{KМ/$tp*jKu@O֗1EZ[;xKHDdn1<qBjppIM"I .#cFjP|n+RZz7ubU›x| :7':kgEqQq=e?~dK̻å`Vt8 zbWnwæ('8 WLϖ/9?F 0_~ǚjV,B% =qAm CbUk qK}UW3 (H^bߪmWPn 6Rzʡ0<97ľ*RlM4٤>6LfٞxϣID+vTj"dWc825%- BK#<%-F[ibe ðdKFz^0`wq8йP4m4Rb.t% P3*G5SY#`gƛkL+ktO+*zľU\Hv!2k!BW+ s4WfluVT/ҧS$WPJKL> 2)n,&7czZ_8ۮ[ymSXJ_m]1zA gY}Cz8/kjy¡E>M3| /²rBg`tv;`E} Ṕf9nSa2ͮk˸b% ETe.u.O2l*;gqt?KP"_衒Tʼ"Fr[2 3uٟ*HRk J.w~$RjSi2K ˱J#ydȩn &8mGi|HYKIA v[!μIo "$/ggnGۀonv߳ND 6[yhp؛2<@L^; ? Ga'{,DBu쳃e1q‡mK9/ڝXW?"asJjN&-;[캲bԣZ1}YH*Kq{U"n*. Ox:'%ݹ%ΞCOM{&xJ^P CNeܪ&>xee94nŨ*t8x  OjA8j@ |1r9G=U84!veʟ ֊6~Vi1F+"Nl9$Xd] r԰BR"5NIUm3"eHbNMx` 6=^.hQO'{ݐ03y)2FUvҖ{Bʍjֵڬğu?S/d\`.d6=hϋv1]$.lpV;t~|&j\,BN{mE`0-BeCFfD{^4x2fJQFB*E\c/4FOiTb` )-ՈXh Oⲽ(Æs&ʵ SqߵbtP\&+9]Ouܔ'کi}k`豒fg N-ijR۞5z-/Gڸoyb9 Xic{8^y4t_cM$%>{ Ϊz^axԶ90HKZ+粒]|xNU W J2,K_~9dQa3$`b: UW! #C WPPڜ?[BzF?XVXkƽN\(! pZ*__riXנzR,6Э2]E٥R~٭4mupIY@b/x-ݏ(>o?J SΎf?Lt\O=DË0Iri3-JSiZ(cN[9`⚄} $3PKy!,[musa/T9zq,i#UZ6{5 $KfYs rKk96{N-?D6{JK40! w^.a{7_׵oNв# <;MѪ6sm#CIH-ZDeMbԣ䪛|7KIFk?V heX ;+!=Ng |0#/i&fYxPoP2rcBf)q eʘʗvi>gu0dyma;7|^Q WB<:P;q8L֢my}Coh*5b @ظN> ٫,ess}x/sa믅g5|gɑ0;s wsK}nĈzR+s" zpǑʿ6MI91BHp,/K:&I+:m7'.L)e'ʮ0"_!$Ixhwnkҕ{E Z`,j~/ٳݝ7:Y3Zk<7~vkrAZ͐z{IU?$|ZƀSZpW-9Žso%ni'#kNk˯MNxa@~%̾RfFZi/itV^ [P *MWAJN"9vbGXr|e7cב S {a%ɣB½fXz7DwJs£xi(k||V335@Q~$; -owz)uDԘڛǨH~q_X죄qQߺz>p2"P[O䨥Ǣԏk !UAt>k(]zTweVZa4Xh +"í'ᷜnTXXXɬyRqu<ԅ铈U yb&ضex F`BQ:diؙYG5X穭d-v7).(Go*My "GY'|@+}wCE D+S VJ=Gbѕ!pVm s P<mjdP}=11ucK$Ћ%E(bp۠U{͏G7;6)GOBmǏ4 !**PG$..Ѡ:.uA*?N-|~#vN-SE"j^Kp [8tyZTɂr+Դfr.ɤL)0,CfAov/մͭ4*]:*0u74ɑ,i)"Y\c/Aԃ !ZJ!Kh@oY şq|n]IOctHQؔ:kx] H "jsYy ^7܋^NKۙO(FpEa/AJ hfPYe#ɴM;pd6WoA 67qhQz4՗ A[nP> io+śTB8HXc%ljCGd pݢ n۵!4`x @GjR+/Zw-z}3xfn{~U؀D=V$R=e.qO]JoC;+wy,$^vcIS>ii^]‡! %X)^ߗ_duL4{ "/R^flrBC;jxN=L[ZG{DvҜpdaL}\>|<,HG̟݃ZL"ނ чtHiѫҭ`2n5uww(?51n#k4[7_ln&VQbʺ<)!KpZ1pvXGxK>KhN^ƜrsTi#ki弆yF濒PR~C&wy[Zp)b3V9?F7SPp-osAk )TWQ1l4 I/86VՈ%F.dɞPm𞃅 t45^[$35.d3=H ̜pP"'n2h6ο`X֕ YRL19cWUsTlҔ XJ#g€=6N>L u_";mM|wohV} eGҙu$S͓$~[je,h" L1h0y} tQf$v9׼םH~ јr›uT6?QKpۤl@@mGÚk/k't"EY|_Ds+En`\ޖ껊7㛙@JX_x/Y۲ˈgJmg}.Ɵ8jMٱٰ0`6('aQjUcR?t޿`Rȅ.My9@KbAoĜ¢y\s[1$U? lA?6#wKn%?7HF*y}TefC5P:tQORZ^ϳ.-ܛM4ҸU8U. SfT6}R)?~+D໸Yl9G쯉G;ٺ-EtEljsoh{*7d ÷ݞClԹh%zh_MQ /=[?FB1F=\9~gO8@LzhC9mTVNUy|nޓiSD]ewcsemmӵj ճ Nek"^ݳGW1EĢēcDk-QI&JmP L_Qܼ˦"Tj Qi( ̪|&1o59Yաnj|$K_s/i{KԜfNZ0_j{k( 4|<iE0ob*>?\Iz{_CXL˯XAXL6$]g>"Zt F'݃w'EѰM"pOaLxh#ctį1ƽJ?;m'&8 M9}zbVp8alfz$ᩄϗQ#Qǘim9 e`/v;^?ĩbʡ-p_q|}bdp̕}>rMZ7Q6`e ŵl>7-]c:Qɿj4\}6N$ &7(؃luܯE%!o0e ,.;j.ZbV]E`%rXG~`@r"xBVCT"@rm|  +R.^(fN#><ʣb^{0AJ+l$447;2ga>|n6t#?wceL/}L)m6}7kd~",l5|͞96~\Ě/:>s-[_EFGч pM䩒lb"iXˈU-] vQrr ]^R| ´"vw$ ["_"sU7֬zWգWm-=7K8ؘsڽHe<4+2UE?;vVNua#l D2_9/)&_-eсֲN2LcXFzk߅z_i m؉r7F_`w\c}/ݶEW- %ҟ۹ d>}񊶑)O~!ںF Sr"H"j)ek#ICRѯsz@0CM}_W)/ 8źti9y,H*E;K0R]ˍ9-9|F5aE>.ZM{яA3Pp5)*` ozB%7ݻ=}~HUvt&˽2 ~-7n~h:ZΫ[i3jql}Vw9j1_]wώZ|%I!qbl CKzl>>rsDN Wa=S kU#!fj8P{S^ bxvy/J6v{ 6伓lU, ,MU[;ЦhX&18M6VbܪҔ_Z`[$`Ha"$)=A,BJ;%Ǒ Qrqҿ8u頚h}0b{k{OCrZ,Do+nS!Sy䐺$ -47}U^3Aږ^op9iįlT|JPak/S9`qeO7$UHo$G 5-h NE3>p,a}IpbD(>g.$Gd[5 &\9> C i#)@f9-D$zkUr/(/nN#a`>s ښHݵ=eT G1.jf8*~-qQNfiϬpGV1=b!,2Ύ/D<u`AH~.2x0RN93?-ȹrbka@H1u s_*EM!;WKo* 7MD.jKEzb춸̘G `V ʫмE, ]@--12__r Ht63`zT]c"Ƌ@X>E=)N`ys^ifתHAjU/ AكrlXJ$uPڻb\VW1;pBP09, 0(Y)qG,[ _8 v:2- %N{$Y%:W]-ZL0TLR,3z7h!?;%#Pa;|"#,!ҊwE):[g#;^ tVmd=kZG lՋu:J!ka9r^ HP鮆n{Hj_]ԡ=į,/?Fӎ(҅lʼnh_$e#2=pN+CyTĔZREEmȏקNIyY֏J"m} "'7'R'r/i"VR&J*+1g1Y 7OCl@b@pB)ڲ₧+ 5G*V}C& _yxXH{ơXųQ_F^-en6G sv/Bյ#کpؤ Y?c8fK'z-meNUDgM}I*Ri]_߆+Uݭsiб?w t` +pK:ij*ES$mEn`ثiﹱf\&ͽ.|DEBE9WdX^I)=m!" d(6x\BW$+"+`jk76c;E$쬅@WrOQ5ZaQe WS׬[B7~'ek3T̝Soq>hnWf8R3 nCxpB8Nڄ9WTU5QϗӯeM9z@q}t`8RF!vE3|*bB7  CbSÕg" sL::YʇjVlHv^(VTr̬+UQU{pnh!%}#,ϹGxf}"{OFe>sUṒ5Xbصᒀ=@1Y"vupiQLQ?/x{nm쟦9O^*&&g*F [L*AʸGLάKS3dr[k-YN 9;-cn/aXUgunmDh '`!0LIk*~rƺ[;;Ao#N?=:- $+I K̤7PGtH=91Fh'瀳ViȒ) &k(F z,э$6JjJRUF+jj.!:blRWѽM~%V$(,e.[i;p$/ɾO5ǖ| QO[ͼО,9 }]Q&Z'š=s[q;o=Řc&C+D/Ǯ7 eVB/ +ղD;pv{hro˕hnħyX-ؠ H/ _izU*hl?=N}$}=-hL:sЭ6lЧ;T-i9}"5U.$4 Oqb2@iXypLP˩* LB9R[hw'J {9 Y3qKl! ͈ c2ǝ~ȌELQf`wѕ[S_&uC~6es, gT&т ~b829-CS2dhk9Aj#2y|RiMá%AU= )4!.) 94+":caqh%;n"HR:t94;p,35l$~J !~][@`CXT!IJ hLYn~[8J92=XmԌ_m6]-ZGjQep9͟,C>pk~in#3A!<5 7t.KB]ؼ~z_.&_gM8 B27#a_"$@_Bkb8i#C↞m&r @&$IrR(E-,^i-B+wcs/⎌_z:o!|;&eEpD Ĥ*pHX&DxXQ,;]nߖր]~&)jRV403Ml=wl<+J;QG02ЬjZC9bԄ #wl [o5F7Z Pǫ'V鵠0<'hdfb}w 1b^\ O6ۯ_䁈A 5w ǥZwT;i=$R@Ph[("l|W tk'a;'=u &t&0G{xaJ!n=VҷA4Hf1b,o׹w}=ސb!G;w40S؄&R%1/{xJh ᑀomy4" NKpQq7 :` 'q&_L{EN豮#s °HZQrR,~gnj{*%lGbaE/(p)m0GQ cHZv_{_^ $H|q-epR݀uhiS9?QGJ#;O!AE/X獿FYmĴr]#ALoWýtHK^SnK瓽ęE!BTAX]w, 65A}dUj r@(o,h?뒎 .T6 dR!HIө>ZmrȗV:!#8A4Frm3uvWf^):~~9yf8,mf*52eNItM^}o[na,b!nsBa2# '.I&yteL٢׀dQG)3ҀkvLjࠆ+F&wqa|/p nmnD0#tũRװ CEz cG@̆h1|%{]=d?u=c%8mK#x0tc/{ ChDcA\gL'U+]? *&: sxrKu.m:iuIn:PGnmyUC&!$nWq7U (AE/f=v/<^op)-*̤e}k>2&YtU]%C-m hh;C`{L ~{8{RvIQcVrݼΤ*jWLa%%JBsԍM)Sڅ oXfI5~$G= sc*q]:Aܗ)4sCL85!?EAd?':6,Xni.KMy̷4o /RXP) (< }F ,D9ߺXw?+: ܍r{,6u=Gf]fˌXW~n 嚧׾ u\Awi;}>BbAW̍ֆHC y?ZZۗn}3) j΢Yz#b\s筐Zn}gpo=dZ|{ЩԈ ɀ@}B  nhws $xTN$\>K^kWQeb!uо}6wưz,tV4ဪ}!tM6 sE|C־1IQ= / 178|rȋ)!BЪ~N ~T/vbEpy&O:/E0/qZx=6VPK?(l1zn337Au!  ,ڰ3xўYNgoHCzH2C )D6>ą^ ȅlw'yg]+l{6槜 C3i+RQ0.?+ߦqua;i ˄ ʢf bl{L: >HMbg"^h%I} l65G !KOSOqcPIZ+9dUoPwߊ6XEpF^(@r+d(/ʟD)tx(#\ de 'L lβ6sg#TzV-Hѭ h}QQB3F~Ǐ'[xq,o'eL'qHVQ[_F9~W d%pa:FQ4+V(軭嗩،D) 5gCz-e?&=VkA3E; 0A ɒЪ. TX 9%]!l1)]r ٤e£ruՏmsM7,6 T'hӶTяaϞFU'^@Nm*4asv`w B ra<&dLj7.y8Dd yh >H?I4AID(bN& xud9HuZ&0ݷƒؙ ˵t{(Qg(@-ߦوbYv>9 k{ufF`"7i{4Y1%[%}.類{R̝H̅e =% +b =վrw=Z۾_<|#4Rg̲:LaLc*@um>Rwydr652eeMiAwv жwDZT\3 N؅win[F wNd$i+m*t$UMedܢ˱Oz VLy לe$sC9):}E`dκS6ʻ\Z؇ Se0h`~"smVs(䵪2Ԇ 6NNԢ$5AZx.KL{^&j 'Km$L\tàf}?kĻt K.-M2wq$)\=f(_=\` -Ya94඼?q\Y-z_^4'#βЋULJuqvBz+9 %r!x At#zMjRF>wl<;|Giov)kP gf)d vg8jt|dBBBE&k|6"٠/6/Q"\i /^FGŕ>>? Ou/PiW& p7^)\?d+/쇒|Nclc2Քy4 ?3q%͗N@KEj"lwg>-ȇs"JA7f[ -YR]iꓽ2]}#|z^ Bġ͞KFwz7۠ av*!Lь,UOF؉# 6+f@+l7sV!Z#ڳ# uY.k1gX0t=epL^ԂErVBk^ sO8T)A>y5:&N@fQfj: r]67˥hk''t]6uTf=IGMF): y :#_0y/@r?9QσKd}z<$1faX@^&n`^5b1%Y*#8g_b^fj@`˄%;Cz8ܡv q7~D%i]E}%@ خ^jZ/]kY]E,/8 Mޙ~A/aQ7FU8cUL)Pil[g7x'W%c297hjfO.wbB&UH*yles5HcU YP$>gQME!O5W1(n;gL9#SU`M!.ײ&WBd+yKWdC)"M҆\f%S[htΦ3Bwm+ׇi;X0bO6<"Q[ܳ}d)Ĕ\ ~Cm;B[͋huP5FoxRiu[[Z@.{89*8PjlUb@QSR]W. >M"ԟ$?dB6iL(@KP{٢Tl5fK`~"3(qYujc@{xCGX:ΰ M@wp8ѡf = Fy+j>ЉjJ%xB6},(:j3#<@ݩ讕ةs-]2²C)(PO@M,U*V:As t+xKu,W1EB_WI ,ܽ+ oE4ˮzǯ-?Îp\OezKQ Ir]&4 iˁpN#ޙӱ (x'iBx>;m%d 'M+q_KN9^1X^ n0Iҙ_:82{)}';aEEܧ7T48UtR7yAZ`^2ȆcMPteЪf م^m7OUHRh#D8_0dHQ{igEX?>RyX& Bc#+ "O1 1'71 }7+H,/tvU!^[ Qwڋ9rڈ|l-ʜhmd#mAo!7u~Q֝᠖F1PQdb|=QPGJudëI!bzmN0'$c=[nL*[FZ4Q l&3!l)$/ZCif=Vsm_RY{@tt;+MK [X }P#ZHF{/wHs$/Gno 83j`~~4fjnPے.Y!^?=q^+h1Wi*Թ^4|NY =M?O5 OWI/ > zX%*ZuzG): 'A7vA{ MÇjr6-S]2~-'d~<7Wa~I%S-X͗Qxv 9='hQY8N~`5XRE\hOWJBZ0db_Kǡ!J.Rpd|~V.9M*p))Ȁ5md@_-WV _<)_31bnzy*rcJf-v~ L]{4=z@_ ˊ ] JFBwɶt_I`13vQ2ȩҰfSJzQz'Tc%#l(l.8ILZie*q6J57S@QvG.9';'2~GDD [N{Do(쵌Ml0A6 WMiPf'SQ'gM ;#$C"&Gq&@l(f[4AO/%oL15H4?IcjjX.6ʛ~ѼMZ󔌑>uV>`b< AkClMDmlpa˴Rߡ%g=~"j.a7|Y-Pg]{y8)RZRk_x̆p"׍`f08F4qOF0!#e"?G6 A2bW`|h>l p T]CipBܿ#k*칈ړLڽ{ sT}1#ȃ|M9ҴPU?%5$z#r5*{8N*MfF s#_ν1B%R@>>yĔ|틇>s!y#n>Ӛ9fMj~b}#_.iޝsh3h*9MZr݁q].-ľ:6UdZpSfc Ldf(61?rnws7z4.kw/e+!VU ,&2\ tzĸg3KnM7ۄ|alJ\븆 fw &qx 1eڇisa5%0fI@^}8.dהj^x.L[hG{gԚ*w!pdƯ0GubEXSʖP.0Ajkn|/4W kJmEL vͬzQً=ߋ:SZF4x_皳%K>ȺOR):U&|\P Ģuԓ:˳/WLoCnlvokwJ 뽆7@>gϔKRN}S/p>@[ϚOMZ#ivNR#ȗUC)-B*ij  ?KRC5,HrW?K[EiaJ*P5^P} Ϻtf~rbA}K% Oz;@,\&ߤR9C5 &m"mNzh dI"=,FlRI۪VT&<1_)oٍkCKzk1O qCTY|u6Op+`A7Drxc]Ы?~0NT hĕL*JЇ!vO?(e-FBE4vtOpys~уGK=f+`4 (TZ!L|vutqCᅂlk#( ؇"`aײyPL5+)..Nk!` ;2QzɿcG#]aSdU&$NȹɊ.ƒpʓ!S w*A~bz(5_iY41kE?6XqO'>Re!B Rs+~%`2stG=,=,FA1-R1$?9xL;huD)IWqCo'Ε;QRx]{&wo0`P !\3ưY7n \dʼn0b r]6bX*7ޟ=Կ|<[I S gqA >o_c({#);,&ܭJϬM4R|'nn5[ B;##MDWe2g8;ʦ?Ĩ8*bQ`K%<|uإb{f8;Oll5vS^(Mhs R ]KR< և>(3fjmWiez6NJ֔7J%z)'{ܱ)]lB@;|a'FNQ dLP<91`t-Npdc22@Ϙq9F:e^lu2E} ,1G"ϒX>  [g}d4fS8{W+E2P) W %bY5\4hbo">|E3^-\f(qtNc!,r:$cv=t0۶$&mtT#.BB1B00W0ҼXW9U"CTe63w,V?xh7.>#C{W8g|.{L.j#}RA UNνr'uv{Xr% .B  /]0XW>۝ Œ2_G> ~иI_= dy:2{0ޘ.uּO2,C=[h=aC 1|$jĄpsT夰KNn(/%1SI$ iwOqx T;!A^jf7A:XI/|&T]Z29ZL!=sSVηJ'C!晋tD,$G/+K2N6)RJ}SY1dygT NZrog|68>,el!h+PG@ `&?ΐ3h8L~j1aFIc%(dyw" ٫ `,1ٿ{SQ2KNFh#W!5]C;ae3;IAH`gă8P}fR}`,s,yhv!~ThnfxAk@H~'=bpNtCEYsN>N$L FOKI^$FS'd|Qx S"[VyJ&8iR?q&yxjb5tZS}$c ~D"wl*i77M$o'},?%[;!":@Fkm3ϋT_' dS~uP'MY=U$]%(W7RMqXEKUl'I|~.S&Ҧ"nnr.v5¡)5~6mހ·zYf8,fW0'iy(n&f2E߰G+A""_.{oa^%1џ)oyg!AebW$SEu.䈐@2_{%j]OYh 'X/~ReFku&n,_Qngyw$TudHr{F7oigv `4.R }] -ϰ$楡ǹ~ֻ3Ȼ6~cdpB$*|jEG){IXoRhw+WG1N ">~$EmFIطug^.%[$!NC +~wd8;U/|MM.AHt(sT9uLM\H(x[$T뒑l|r*WXnE´ʅrȲ;78/m{zKàJQAGJQbhc_h&#uq; uV8?*!l =nj-((.'|Yj'|MyKX05nhL MR$s:*Sց1Jɺx7=%rHTIR+TÒ-aIy#A}XI be];!@'Ö}r~n3]D4iQҏ>b!+3V @]LiSԉOis{l۾D-~v&qD#jTX]dP߁ m0yXH HܢZuGh27:$Βj`7|']-b?l]i?_$dR`0 \q)7$"i$_>X87֒01ChC+*,K0[c!<c_%}ɖbaI" 6k4xƕQ{6'@,aPF{9cl2dV4^?6? x`5cLRd'j H;X ZYQ VŎ#䇈FPG(,%KaZV"r7M1YbxfQzjU8ٓ)pͬ >b1kUF/IQ\$A(ПJ\댑Z_RڈGw:*c!94Yl o} jc,Gf]4zҺ躑ծ}4tAjuo%R:7Bp hBtfv_tIK`,;>{]n8XB Cw>Jz Br08̴ɭEG8! &Xj,!`#%Û퉥ɄUgYN&_|jFƤSli|ýHRwӢ=Z{g̚&zPX~v䅩!UZ`TFyb4w Ls-,1'vz 9ײ1} ;I;ש;>:]<xƎ?}:8t{Ts.X7]nN+hL/+ڔܪFjo͌]@..kI:9=4t R fV\\8C֊J68Ir.|v1_C}8k;H`>a j3KUjaуĉ&T>=7~  nm sQM/Y{R4濚j:o5KR\ytܵo`M=]\z\Jm4A(Q y!u7 qnS8iEweMņuYk~bc!9L+"bxYvf;P`bkwKoS{ۀa3cّh 9ӗ#\5D4.S̺#pxg<3ĴPĭ!U%e5o,[=X5M~J8X;P@kD(8\(ϰSJᏧ } 'F b*k'{ ֙TCk vm [ޮ3^31^9@F*΢a;9TT @?(X X-MLޢUJ[wsnp~YcfoNlNP# _$߱JRt( C2srڌKAlFdn-d> HaV *F?z+V-˙K?8|GC짪J|p_)];nDwGAfv+7)K20wDgIwihJUaEc3~_ps?nvzz)6"}g-SPјn*KoˆTPO+sj350;YZ2OK }m\-I~ M LTCͱ4"8XȺX7i@Uc1y' }p;$o!j' W m; V`E"Oӫ{.Atz: Hi~6W9,}GeO>Np_*V eRB uHr`zd; A߇=D׵QY;DN,xU,$Ot3N{S#n(m&Ҹ|^\զ%!Dt7@Gw<ߊYޓ+4%Z1=MX[OU4WcZ|TFKSL~g mU[Dy& e !S4c}RfmG!'2烂=K</|#La?c%5c;h$UK{V e+,ߋ`⬶(ȡݸ!=,q^;,+[Gl`ɽWq4ezn:&>z'_QIH>*#U]~GkK%$:"2 m 8%ys.dCɢȞ(Gj7Afa^]!l0V(h%K$'7M.m/\]H-nnp, (eGVeQ-]f8hsBk_=lZUSxeXr݁:Bu1ᨨ ]G|Zyf5aR܁n 钠o .^|]crʯz_wsw0; kin(,W^V x[tXVtUzLXoB?NxP-Uv^JCJ)&M%@f6̠7ϽvyjasbwK0w1"a)eQ- }=Mota/ŞFWG~*a|.bh^*6벤3SJ1KK~?"tk"WX.Y8&j7.@ JOǥ6S\Q:?& [C(kP $z1%$~-l_iq S Fp= .r0 w]_ҏ{9^N W M#/.] :1`‘3n"+U)2`a-6J_RsZw<dI᷑7M '>I?/L;%J%0 72c~xx$4+%Opf˜U~Me {  x5Y854"ULP+V bAT}ߵBV+}e$(1m oٱf}^LSϩeVw*OqD5(/Vၢ=0AP>$WKD#V*cx,'Ȝo`\ƻ`F9R\Cx(E9?;ehDcb*apFY84l(>T*9bSzx qc>8w!ŵ5z]觊 Q\dL iςM'/r ƒMpu&L8V5\B7 e0mY^=v^rrdk5Zp}LĂhx(žpDL1P@7sYQU[<g= a›̰ͷҩo:b Ł%R[nD ?|̼#P#1/Nұy\شs(ۄ}e]Ҳ Z|6+ 8g-Yk}$?H#^\my=,+ ^!=Ue.Cr!= QEUE#x j$@11Y >j4 !Cޤ0lqw <[-wsy~ vAq3 oM3ΝŶʟsXѴ-6I;ħ>g9}iw=mRXܔ"q3{4nM =+^×ȩNBN4,XU4Kqq>|CEK1-6K9GM)$ZU-{" $ 45.Ts, A^\ ;L? WyHhmp@67rI_hg#P|X9WT$ )z B&y"Αo te8/}:f hOc08Zם^s+r1Z+aINbc0H;lBlu  y.38(]1$8{\*ъ p&m5`G+I=:9Ϸ!T8ukG"_tɨR yB P}2kdK[NŽ.oR0%f7x%_>Үs 8epcgkӊZ6@?Ъ aԅ;W#{m#H^7sy9 j{gױ5ojHdP}|ol(k>Eg=X+l!|WBSiԉ hlj&ɓ7D[ϼ-.\a;J`2 _4&nvl<'Sr̦9VzD+@-M=ey,C$W=AK`nIiId?6|qRf>~s[׮q3DrsYC,Vh'R I\R[^HPF #ˠ ʈpmH3UJ}^7k|~NVNW65FL W,'I7Ąf SizpE3rdC 1ĬM$ ,B޻@qɗ@*,PT96Y}.%@ESNâf媒e#hp[ضbaCRwtu<bMlӂ{5 I1vlBbNIGyB8*a)$f^Dwo0Hi8ZWx : Z-^҇2iϓ̘Lk~$q^Dw.jo1Xi viH1ZȚ#1uwlp@5\8 m\ HMY.I~|SګPMRj)Y}Nr( S7BCn漄,kEM-QS8p=, oX/&҃>zh4+zR 0]92re3JYiVC8%/x~)+_>+Dc^ O?"VHIWsQҗbTf~0u1Ȅ| 6_cq 24|[wZW@hi{y 0;jtq^fD*O:<$rO-`I){fM-.Rjgdj!=ۃb F@ĶR ^R>}e #iu[*Nͯu 3OOG [3bz2싒;r.h,PL˩7l uIl 9ղסڧcLd7 A΢Yk|=rX&.+2z_$2Ю#6O'-iDit*wPB{79zqWbOk*8sB_Hun&¨'] WQɝj&Vw"nG| dJU~%0WZ<ܤ[6F`[Q!ZT?}GD+(>W*RƩ i۸i~zvi.!i\ >=m]#Ae0"2 dy{EsZ:~1瘏s`>(dFŕ#B+k3a&R wl5Yw偕5Nm8m5*SQ0|.A`D*FX@052w:{oԡUbDT6ۥ c;O p{hDd]/kPAZ޳ dDTpϺoxgÊihl}TN߼#B/?Dtӂr[uI S.Nr(SWR~7|4Af(-Q"͑Ofz6ilV0 ,OO i`pqL~;nx ղ8N3i6H4|V7F0՟jl%F8MKzDRw^_@qEr6zc=!Ay"<1 S!@=i lq}d8pw%"]N"zX:ېBE5]\3YU#VQ(L^h~i. \j2;-ocxdlS 1W"}M"hH(r><Lݹo2PC7!ua aO1zr3|cɟ:x(H0ӳ>8^EӌО& I|0Mj0y -jI)6nO%ڀ>S'T0\;Ȫh\:0!cdwYÚJw`Pnyd-}[Ax{qQt^bh67!\ |Kگ$|82 FGб#!Q> V]uq>MVߝ_Az9A^9 36"VIEGiQIyfyUf[ !Ŵ-`U[| >JX_g (8V<~xΦJ{ҎӘI$)hjY+@wXQgr_\1!5r3Hۼ[F$Ƙ0C'wgh ` !CV Xq~t몾C3" zsP4m6_"+ۣ` Z dCom7%lB܆_f2X{MGIv$EȑDʦWAB8騨"̤ci$6z"[PjVZ۬Ry6ы?2Wxma%M5?gAHXhD@EJìYP88;Y-徘D|{F>ZԡQ؃WJ')tN?m%o! .\[QQ_4{"ERV.ě̶gI|: Xln᳁_lשe&v W ŠV?MKF13\V7QleKPRW[վevg(8wStdoMG!A𶙽x.8 IN_`Ln%,7gL0hO`ya㲁 weG{Uqտt=Ja0nt;!>tcyzЧ eݔig[QMZ^_C5 FTF,ܢuk=iԉR$2.v1X lbƍUJbB5gkMn"Fx5{3C{#JRC-{6)8OC~7AKW*B4SY 0DӴ!ż 偞NiE`_]Wm5f%0C%Z_@-6^7R3ǯkn<\\5n*Ӣaxy $I6I㎷)OE9:iԭȤa5ٜ^1b;KR.R1y|*NPLkNm"R=(0/ҦӲ cA01LB#?N⶚oi/b73l^Br_z .^(%"/^ (P%X#o΁<?]U*DK# +l>iz+Ee'T'%y " WIy@j"tŅw,#—Is0˱Y, #܇̭QdRSi\YOU'⽪ A mU! *@HX lI"m=7@ &H)'5 mOtB$Y|su &iC\fZhogrcƎD4p1x Z0% y"οt.(4mH>{4]Wl}^IB((wfy obf;* 1[I]556 ɸTv{Vfo_$!4pccͭ h?iNsB"jًVɖEHDSwzw{r&GKB@&,HZ|vQ9]͙P^U3(:Yix<~Ii,wyǮ;,ԣ<^YR1SREC W5$q.dk$(B,#6HtJX(z FW0pRQ{/Ҩ+^Ĉ!p$Di)n\iZ$}_s>mG3߿FOكM +(8ij2Dù4sAEiU8Sv/_$Ť>v֖oՏf'@kuK;fr/&0$cm>x.Ȱȱ8]sAd6uV cYcd=RraTy;B9ZGjB|dx{[߄ SKw7B#dh\:c\~c<|:O-oN i~L2~<(w@΢xA4W Ish;ͫ:'q\Iׂ8ml h3(?*ZJ}ْ[&S%Zs\_$BLڵkg'/cxD]NjUD ׎Nijy&WkC џrKr`mǫyjŪ́5$h_|2ʄ{ lh^ָW ñ#Ov#V *Z=v~+m_GJ?/~efyjPz`ģv(