summaryrefslogtreecommitdiff
path: root/scripts/config
blob: 026aeb4f32ee3fa056e57c84c1283e2d04181f15 (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
#!/bin/bash
# Manipulate options in a .config file from the command line

myname=${0##*/}

# If no prefix forced, use the default CONFIG_
CONFIG_="${CONFIG_-CONFIG_}"

usage() {
	cat >&2 <<EOL
Manipulate options in a .config file from the command line.
Usage:
$myname options command ...
commands:
	--enable|-e option   Enable option
	--disable|-d option  Disable option
	--module|-m option   Turn option into a module
	--set-str option string
	                     Set option to "string"
	--set-val option value
	                     Set option to value
	--undefine|-u option Undefine option
	--state|-s option    Print state of option (n,y,m,undef)

	--enable-after|-E beforeopt option
                             Enable option directly after other option
	--disable-after|-D beforeopt option
                             Disable option directly after other option
	--module-after|-M beforeopt option
                             Turn option into module directly after other option

	commands can be repeated multiple times

options:
	--file config-file   .config file to change (default .config)
	--keep-case|-k       Keep next symbols' case (dont' upper-case it)

$myname doesn't check the validity of the .config file. This is done at next
make time.

By default, $myname will upper-case the given symbol. Use --keep-case to keep
the case of all following symbols unchanged.

$myname uses 'CONFIG_' as the default symbol prefix. Set the environment
variable CONFIG_ to the prefix to use. Eg.: CONFIG_="FOO_" $myname ...
EOL
	exit 1
}

checkarg() {
	ARG="$1"
	if [ "$ARG" = "" ] ; then
		usage
	fi
	case "$ARG" in
	${CONFIG_}*)
		ARG="${ARG/${CONFIG_}/}"
		;;
	esac
	if [ "$MUNGE_CASE" = "yes" ] ; then
		ARG="`echo $ARG | tr a-z A-Z`"
	fi
}

txt_append() {
	local anchor="$1"
	local insert="$2"
	local infile="$3"
	local tmpfile="$infile.swp"

	# sed append cmd: 'a\' + newline + text + newline
	cmd="$(printf "a\\%b$insert" "\n")"

	sed -e "/$anchor/$cmd" "$infile" >"$tmpfile"
	# replace original file with the edited one
	mv "$tmpfile" "$infile"
}

txt_subst() {
	local before="$1"
	local after="$2"
	local infile="$3"
	local tmpfile="$infile.swp"

	sed -e "s:$before:$after:" "$infile" >"$tmpfile"
	# replace original file with the edited one
	mv "$tmpfile" "$infile"
}

txt_delete() {
	local text="$1"
	local infile="$2"
	local tmpfile="$infile.swp"

	sed -e "/$text/d" "$infile" >"$tmpfile"
	# replace original file with the edited one
	mv "$tmpfile" "$infile"
}

set_var() {
	local name=$1 new=$2 before=$3

	name_re="^($name=|# $name is not set)"
	before_re="^($before=|# $before is not set)"
	if test -n "$before" && grep -Eq "$before_re" "$FN"; then
		txt_append "^$before=" "$new" "$FN"
		txt_append "^# $before is not set" "$new" "$FN"
	elif grep -Eq "$name_re" "$FN"; then
		txt_subst "^$name=.*" "$new" "$FN"
		txt_subst "^# $name is not set" "$new" "$FN"
	else
		echo "$new" >>"$FN"
	fi
}

undef_var() {
	local name=$1

	txt_delete "^$name=" "$FN"
	txt_delete "^# $name is not set" "$FN"
}

if [ "$1" = "--file" ]; then
	FN="$2"
	if [ "$FN" = "" ] ; then
		usage
	fi
	shift 2
else
	FN=.config
fi

if [ "$1" = "" ] ; then
	usage
fi

MUNGE_CASE=yes
while [ "$1" != "" ] ; do
	CMD="$1"
	shift
	case "$CMD" in
	--keep-case|-k)
		MUNGE_CASE=no
		continue
		;;
	--refresh)
		;;
	--*-after|-E|-D|-M)
		checkarg "$1"
		A=$ARG
		checkarg "$2"
		B=$ARG
		shift 2
		;;
	-*)
		checkarg "$1"
		shift
		;;
	esac
	case "$CMD" in
	--enable|-e)
		set_var "${CONFIG_}$ARG" "${CONFIG_}$ARG=y"
		;;

	--disable|-d)
		set_var "${CONFIG_}$ARG" "# ${CONFIG_}$ARG is not set"
		;;

	--module|-m)
		set_var "${CONFIG_}$ARG" "${CONFIG_}$ARG=m"
		;;

	--set-str)
		# sed swallows one level of escaping, so we need double-escaping
		set_var "${CONFIG_}$ARG" "${CONFIG_}$ARG=\"${1//\"/\\\\\"}\""
		shift
		;;

	--set-val)
		set_var "${CONFIG_}$ARG" "${CONFIG_}$ARG=$1"
		shift
		;;
	--undefine|-u)
		undef_var "${CONFIG_}$ARG"
		;;

	--state|-s)
		if grep -q "# ${CONFIG_}$ARG is not set" $FN ; then
			echo n
		else
			V="$(grep "^${CONFIG_}$ARG=" $FN)"
			if [ $? != 0 ] ; then
				echo undef
			else
				V="${V/#${CONFIG_}$ARG=/}"
				V="${V/#\"/}"
				V="${V/%\"/}"
				V="${V//\\\"/\"}"
				echo "${V}"
			fi
		fi
		;;

	--enable-after|-E)
		set_var "${CONFIG_}$B" "${CONFIG_}$B=y" "${CONFIG_}$A"
		;;

	--disable-after|-D)
		set_var "${CONFIG_}$B" "# ${CONFIG_}$B is not set" "${CONFIG_}$A"
		;;

	--module-after|-M)
		set_var "${CONFIG_}$B" "${CONFIG_}$B=m" "${CONFIG_}$A"
		;;

	# undocumented because it ignores --file (fixme)
	--refresh)
		yes "" | make oldconfig
		;;

	*)
		usage
		;;
	esac
done
Cm3U @.6;f a\`<,| <a=LlI`bN+nC0ƇX/@CWllW Z/_5\ @w@|ۤ2 FY6x$gfoP<IsjJ]p@!0 @F+hGC'*/K慎FHA(x2 0= .9+-<}6``/p>x&AC.CL'7]SCKؕx s!f Қ:_.b:O;|O]hSd>.HAPz _DD]}_D!2.,(Æv??<26]8{/ƒ3#7*bÓy`>λ)<ӟGR秎4+"\h A~uūE )cCyo7 T]dΪBeg^jqDqwꍍp=Ztst^//螩E㦦Z:%0-w1q95z qZ/ 5;I[c:Ͻ%}\6vn nHZB$ _Բ'bgr<.x zFc{n]pyzv {u:7õ)*]ݚchrl7Mp!@5tSvn--$9ĉ~{㻛uk֢}N&+;z%˟nRܳ^vxZh-mK1=<YfHp?r{ǐ;wW41Kj盤5_V(n&M[vN5}Vʖg7lz:?,>W?x_״A(  \ C d`o MwAhҴ}̋Ǖ1' р+&\ K*pH) 2t_~yqu% ٷ iz&eyt&:\:0<=FU{Q0 {T˶s1]c<|s93Ŏ0pLnxƎ>=?ۇLr-nx8A L9呤dR_qI|1/o\/iͼ#j;)1A=(:LH&Ly傾S2<-iyfD%W>E/ݑ0;pSQ(ZZ_MW[y9&28'D[?~>рM~+z3>(2kgnxJϕ`kAE3j#28XHϼ5FU,H9; 5EJsd( o$B3x~`]~^vw"zy UV[БxU!3LKśBOO4z6JWl᫟< #^ak݃_@pùodwHApp7,xs䰟B1t#j NLkR?3Qv3Xc@!9_c8zA! =z8*ЌDT}qdg@vKj >c*'ՉT%^)Mp#Y-D]oS H']B.YnJX֨"X?Npc}v[՜2fMMߵb\S>Z b]Zb(ZPjByH߱ޟU6bԭ`aQ~Y,1* 4X2t~ #Jx] aMS?_5G Q2xt cTA~<Y{%|{';xaH LIG] Ftv}vBjcGtb~uyxov~=!DJv[aru=*ZG’Sy{t0H2jXKA탰26)aOJ 7s*m>yKk]|;k!74—v zwu(4_捻|>hub7ƒzt kgvgdsiV|Aw6N\ȸ 5u9`I/AP^48/nC} P~$i.t ^& ujJjo˙R['rD `ذh8G']!}oRoypy 00wt4dH=Pv@ ׇ&4=.F趹KD#=}涞mϺ<Ίq.V0:6t Yڐa9laæpHepÖ:;lS35\GP2=@;OqZ]~Xѳ +sYA%FtpТ'E@w轥 UB=t>:ŖI'^5'g |+[hT02B[[faV^#7IO?^."OöOO7 ;lQ#" lPP 2e'~npya fEtT@p{ m#"Bk6]"]2o܈gWLRSzϗ~b(W'0}zwfpTao:bCd**!$\B=Ѡp:{Y460k3a%ʍ bp`v )f1+*ABǝcr *m@HFZ)|U='s5-j3vD#ogaQs |>ϊ4+g!V3(5oԷ:z=o' K{F6{K$wG5Z%LDyhΈ#զJ`*[Ի=|[mb9*,1[D.d @ #ZavT}ׇ@ԆT[ZM EC#ᢀvr /8}.睓~KLD*#+X?QچVx{kq}v~;>DOZ9[ CJ"V@E@"K@yvOMBތe@pk snA-s|iI} $a귳<6Q2!DMSS. ;/{~B͆h=z8v#pl}Zi{[uph:JO/}glb/wG"?cjUK[[Epj+f_X`˷7pahu*0%C,F }lԵ:S~ۯ.;1@`A0IDvOAywΛ8tP*uP/!gȥV+hsV+0ZPm~xݸ0;QfNy}L KHXxv?Z*Bax" cb8?[Ðץ2y1T~ ?eS P_VRAF=1Y9vӂ i}-|z ѿUXNx9S_tc" ͌Z:\XVm {j>;CItf3cAդqO^W4Qt ~Hf2QM(`DL x@:Zƴa EJfe~s=@<Y*aAq pG4sy~xm0ҙHϧKib1#>< tH )H,ΝFv=( JE &Cg8У%j`:$=;\V abN:ėDfgUȋD؛wgjPx5w]B&-3'$=Ta6ƒUJ( $s6<] Љ/{j7$5x aC ^,c!ax }.ڊ1(uMS):|w^"g{ݴ*E"e~@oWϠ5t ͷD? {v9r[%ηN+w\&zJ:(D~:C .wyے4=9Ⱥ1DQI2zp, aۿuSONT㑷{v=(ս GmB6 P;lLB Yuy#8j8 98-_63@txw W6rjW"yGs(:*<>C8]MQsǃqk pRKE ,U񇧭NϨuq;Άt"gRWnvc\ f8y$phXk@:oG7*u;PZԤa̍ZLl_uk/:)T̅$ ӯ-t Zx נU\0!+i4)*mr5 EƊ->|t(`_C.W?^.X.F H2 [?< ^nDwxӂke{RT*U'<3@6qF `٫ߎaE ' Dwg* S;0#Q!S$V jjݝVg- =ŧ;٬, rzK~V8zx~kpu9uvύ0BZв6E *h0> {`|忣s reb9lγ:飭lvh % =-UDcjGo)`h g7zىY򳛖l ̩K(w'k5o*šA/ oZ@z j:⹵9!7 .Qoa-IZPFۃCӸ/̇60es"7vbJUrpF?;wÅ7 DtYg>ngbϣm."U\Hh3gDvVDq5Eg&:(9̾c|2nv֫ ͔%ı}kNPع# _}=Sf\j`AnT{w BV@?Q1=ֲrٜż>(d:qNEsvaLӜԙ\(:{tiN5- NᩉN*׬iߔ+ O`^ZuJ:635J\|GjiCXϺ_\%5u=ֽUN>&=] E( vfL;eLg`C:3J)xI Ɣg,5Y %&"+-/%|L17Y EF.s:ɅYc(I(H)ldkM~*adg\.?8?^<ູ1fǥ tY&5$eg"`-^@U[K3N{wIo{>xo[3퓈L`z9jN884|.Ha#Fʜ$<'Lzf?BOAwh Ē.ֆcx_lmyX45tL :æu99L 3"v):!WӤʴ_'o"P1˹ sc5'4Ąiϻ<{b Z[LQr?aٷݑr$UT2@W)R{Yی_99k9IkKe>-[xp&1MAFn Yٗ@tH'vix"ulđjyF˦~?^/D3Obyf+Ű+.vq A@9g _@&ԅ<ʘY0OT4 AV(?>1U3=je=u.rd$TTV3WY]޽"Dd# =fJ5q[ ҈` KL_:TDOJAaIT"y֛V#EPQI>=ImaB9 ,>B;.XP/E 04`XIcaJ )!-a4t@> +]abcUqs3kT[+Ei3:Id"(q#e% دas  ppV>BcYlD !R>b}G=r2nMK!P.(At?gkԕUG qSFȆg2 ߦ cx\(5k"m0! 2(~Y+PtbK0'$NeF뷼߃e1j( \Qt0|^[eӿDl#tޞklƚua(v^*(AΝ?>-#Gd~%جܜISD= ;yzW/r#nR{QzY#ND똛52( i oPPz3~_du$W/KT=I"tCg@8pfNV^Am%x-A UiR-4fHܞy Z {N8ӖuD2{U?GuMX"DQ GGpG9_T]|ȹhwZ3t%$螐&?{|fO1,@>@&+2*Nc`de /͂cn}_]G9zF/(~%Wѿ‚ZzU ߥ D= #VwJ4N,fw)rpͻjW{@WNJw;K5`898WXn50g##hp\%"l€@7? 80e_/=_t~|7,d vwisReX=+fKs80F\D9e)q@ &FPSÞ` U0T!.dPm],5cq9cy=[Xn|]4K&X`lT) 6nO='<ԋ"=}/m5VK֧V^wd^T]P 0DVPGP+H?-C[ƨ7 5}=4WL"'ly0X5a?&NJxID2¢~G;C+-|iĨFJrI+oYF?_1x4,;F =z,} W9空 LQK:7=˕ഞe()^}tz#s~'xߘzstwصя{8ͥԪ:3t{$ p>>N)xߤp_j:r6v ^)d X:wZ{!8̀U{kq< [J=fB:g Nj]({ 61okM=A,AzBڳG5.z!$d#u'6D}Zq}iQrMhҔ,'W*p /-Ԫ!i6:aĈ1bEvXX3}{B_hM -Fģ$ ʋ$\dL87ZaxrL/Kz@LL? ơy#I|e9 Ck0l,߇_/y,4,5iu49.Y[;(+}<+ڧ=7 ,w;6UJ禶AYSNlբ[]t!n2ho 䳆n's-~m Zow냷^+xkpYo)d}Yw(`0-6uٗf'tmr(9^9ȁn m9=zwWf˭UUGфgt:u7R?'YfAmi90Dv\ W-:;IP,d$u36%玩 s`"(fOpTBki= @KCTjsU$6q 3_uBDmqXlzEgSb.J5;V5, yѴ9ѽ>+yg0 gAWUߌ {vwŤۄ]@ B{|]($:w[h\2H-L.aڂr@$O Y)~/9Ƈ:W5ɝMS rzf5&g=]%Vzv$8Jm'n⃥$ #ۆF6Ez[<8ȏjT9͹fz0*K~ĩc5z9Z]c\@ӕҿL ̷+@\ \.pCV , /vz:a `OH[%lzE-Th|Ԫ∴78+Y ~D;)7ؤ(^j1Jiڵ-}Icu[u?w"P0Ra#*#hRQBJ乧og7ۭ"|>}$.HYKQqc)q]}bvOT?XU_`MGrNjd|ŮxIf&2ę b)?%J?ra:+1ʞV} +&"Pbfq[a~q;.Rhmh_sF=vRQdZNG2ld3uh.Cʰ,H&("G\aXz1ͥ˅xfAd@REE8c Ϙ8ٰvBuhV1焈s;0Pik0Ctrv$U0^MAQ>NO۞ۺZR 3W}JDMkɂćBl`F]{nXrň]Oc7n_Y?D<2dU %Kmw2k|filkTPFcA:p rJQx_q&lQ ӿά]pWqxxc[]-3m)M#ޣu w N^#ോ#Z[@FSw 3sK8 ,?*.f=LCuR#u="Bh((z*/̤f(hib皙+=T@ԒirA>笃F3Y$tR-XT*U EJƴ/mck8x!=kc#e<,Q.('屧pbүj,bSÑ(5&`O{9Ds d8} ~8?f?`X28ͼJ-VR~qoB=aa_A7e"N+7BW%w$!#x;wau߷d1:6J`tO )BHoی!W7"H5U!5+v]:TJ$yZ&xXU쐠B^[ >Q| nT.A>*n:q0g:MM$c,Z1j&܃mAo jJV?4Gl^ΧLMzudSGs'n!jDG!կnC Xe=-˶ty˩}tiG|}W8#Yƃ؝K;|8D"}Tx%',&mIa"hoO.4lzzMR̙֒#U-i} ˱q$I>Cж3 xբ閭Wڏp\`Yl`FϬrێ+(\ Q2~YWap +98c kjJF0K(3pi=Qw">ÐHy8GDΧ_3]|͜<3X%=pC,(A(I"&Aa+]nC~5 Z}.|(Hs[5b L{e|;K[, ,k~7jEeM D5Zϗcay}?Q ,2}d 7 ,"(ѽZ ON,sec{(o'JKOM~6xyV*ZF=0V]:~niH8H_4V_uj-כq|Kynq >Hle/?|G(={(NYZ'+vI_6Dý%yGpiY]㑳:ϤI'.$H{bv7[%XQ)|<39^) X({v8Ls:]GlL͌ywV@z{56Z8hg'Rzo9 C}dֶQs/әD0fñt*PA-L ')SJ<1sfδ.i{8X ,ݓo{9: s"$T ? ZB5b8Pq?FcCH1{gмD󠛓Q4]oS="51U0&uHmKԬE#xf%'ڄ񿿃:-`t(m3up$uVQ!f`1ݏ7вQ Uh!tN |`7ڻj9JVqHT?Ӿ91!DY&+rq-HJ1KQ:H+uև-S@/~7PS9A+fȏ1 -$;vS &1ȥR")JFb*=ۊ:Hxߦh;zjB?cR[arLvVHX\3ʡ~<Q+׃2LT` 1dINn7In3pM\"]$Oݿs]lhgk`T'lnMazwj`99pdn0^ifu.` \tXR{Kt(G\2S֪&lM:̆KBA}mA]t M$'=A7L>/xW͙0)AZfޅ8)o%bьB# qM"ַݖLhz)i#7+Z߃0O{8{8f01D'G`xdGb=o -.Eyhi@uֲX/b"3Wh0 l{GUiGUBA!83YYW+ˆ:*4D@џD[բ~#W/k0zT3.H_^NVmWjhCBSdd/#7×"BzAZ>lXԠo\ː'1v39"rѵ͇($ptIg8~b'(0p뼜1D|<11+o;ΦG 3|ݸ('H"I'5˪[=PFa`%HA(tPY4-9)Ұ1CԫܶlTf#H(bPOqh\>hwM9и0F_D{(/$,H)6M+%~/\MmèeG8ʐyqz}׆6r]~+e/g=~Jm?U.'#miY9I{ ;1UtӨO2R˛'Z"((;X{9MxCшr^"uƒ撉4VK&^ߢtLRj\Hg@q=G2k!(fl79ߜ T]*.}; Bm)SzRGN4%^t >>^.9c&NߏzeөӋr ;peDJ=1,X!|ۙbC6HdiPRh;qcAA] JȌ &G&0h lb",DAE~9/nqi\(0ȶi+te8ǖOiy߳"(nmua=K_Gqldiyd`6QΜ= X&d1kYGCl:ŃQ.#ۈ[A F^ 'ySo5iu7\rWU掗osUk-Ɩ:>Gu+n!kjIkѪe50@?N=:^?2;= @ĂI0ޜ)C?S2eOvsa$#NE ek֦i[bl"1=9 ޞx#oRWb(S*h|UlbXZT|rnXg"cLtO3W '-K*s[:)'Th͈\FH1p[,BB 5uD#bDaҰ~_Sh]lh Ԛ v N?DM"$EWTv-)҅6lY>ZF,AQf q'XSjX?uYӾSʯ 7>R##40m Ņ,Nn GيM2v[YD GQz v]Dz(qY.^u_Ci !Ӝ@29pW8T2y(@V'%p5 ,_#yd*|l}W8aK 7'yzK/EOo]1ߝάP\rnP/0o;oF\ x櫠N'zth6 wHӜL1.j0D*-3Ǧ2ƇIʣAK[Ѥ1C&!6K?.{ (#&p RasKF1  |2$ 'rLJ>k|[KG軶>+ $LC ~eLy!oH4>mbAmQi r~,{(He ZMBd,>OUkE kb ڿlɱ,J$GQV ZWpԝi}x4VBc:Kd1Zx)F9}g,K;5PęƢpe䑳>"XJIVE #x2.4h39.1sOmbhn#S^\SI7yŬ'w+T,H4ܛz*g]H~}Y^[ )ٙS\-o"?4Di TƟ&fr)YmV6 ;SkA;䓟z )G+̏B[xmó$x{ >ao 9e%L@Vs@ǀկ<5w3ʱzuuJgwa4E׭q Bz&IԘ:]:1D,ſS1 mChvXy2 12a蜪wm:Sa|^9DX[J߅xҺM=:)1zCksYE~;<`(;8iGw3N&IpF13[u5zZ#55~gù1@ Xu/rk2jx@J%F~m>ov`=eDwsߥ]C}/!: 珺,%] JNU&N!Dň f xQ);F+".&N_,%Ӊ9IcUr4& ĈV08-z>h@rc``rt 0blUPjfxtYtbZŕ{? ky/06wOwG0„&cCiR-̓_--nHg(=ZsnoOy.K Qgm@x\Ǔ)E(H$ |Td+au_DD \lv)lT3iږC_pm[* @1f_=Sz{m^7Q+QҲ YbKpm,"|=[̨/$0^88!Of꤄#'2bߗwVp?'f@Fbǚ@=`)RyDHc^/@M;4q#t_`/Bے0 ̡8m&C+П? ֩eRo*LM*pey=Ѫ!Gߘ>\ ~v5hԩ.|s(Pc{Hw5H.WTI|&9,Z?e{=<4;xC,F*`Qdb:E}O͕g:FH5NW_ߘq3o)H}'K$2^8"#q H3nz"vgGs1>x]-|Nܔό/T܌W{DBy_$_]c/~u8\SxeiW:1:'q{ X4%x sa|#xgG-}d^EKiwE 96zD}B_>:Ja_f,l얞Si gx-%'Ns_JFI =`Җ *2w1J9.!!A.9\r_qX<yVҀЉZ͠xeLdnAqmI:>DXK.coj){sXr[;yr{|Jv^3~xȅAP (pO :hFHuДw-&q%(T2MηwzOQv"]! RF f|U{QyL$[&N?O?GxBE}p_>yzq~`Ha,E`81IJ44Ck$vsr673Hv63*LRş^@_J76|~[OFD:j Xn E(A0AEF3|<]Rqjd bx7&Vg@pRe ynK{R,jYJ*;^vW: Lo]ph=}ZoRI}L]b͆6=Б0qH<̨D&Y1{cM(3:ѩdIɫCkJ9",gBâ `u;n(8%:٨#D` p] *~CB133 +Bibp[ç^1 bJFO0{}nAc3rm篙ܫǞDjs4 &<Gxo㕗feTaP'$1/wys+MԔRhGZ's"yR_\R̠tōNPC @+`$ +d^Df(m%s8:N>1bCA?:bwNfo <>/&}.@vCƩFH ` Ąt,D5{0|d#Zlhi4`t~k/ٚ!ϼ\Ð2M_򨏟ʊ0_+ јc:!GqҘy@43z(^_tff, 7^ˠ>3mFhfYƒ#nԍ()?d(JtH*FgT1s@;kҨQ~# ןc N(wz-'m]V}<qQ"ߗcL, <=S`wPW L| a"ćva3MTꓸz(D&Iޟ_ۍDުQGR!Lg?(a쀒F%-_@BG$Q[ti(\Cr:>s}$[|wv(Nu1au B)DsԸM{ɿ賄Ws ‰2˭u>e|KK$0Oé,)XЮG9rG'Q^U_<}~˓7\ˏAA1@b{C9"_3j[gJL`ByP[Kj@l }>/fՊѰ^Dv9N"2(澻 'HHI\h(o~@$> g׿1>ݹJKUl/{yyQ;(*K"#iu볇>Վm.3 vßrqIDr*HńA g-tY8 D9 ;yxw|/,z@.PtVR/SNNP1b>7ӣ;ec2JHoBSG,`9 >rAߨu.8(n`[hAWq=Nsn/Δ̀^@`ZŌ{*'a}?mai#Ǟzwj Z+p̭R 5,vt)F6o!B/ŢN !q#la@ǘ.lc~~X*>:ϙ%QyBdܠb9^˽\ghL\(6 Gz UZbI?^M8M$e4BmhsgwT`Ntvr< 3"avh >\t4%^*={\f/z8PV`}B -owk\bwkgQXf?6PNbB!Tx$/ ~jpX;kCTLpgK=-ϦγZam.xS߸1)Q;ݭp:[]+]C'F"ΥW\oTS"Y˾](6XƒcoC^.l!xDC !2vȂ!8o ~,jL "+̏ۚ7'"',WیE'g8/Qqd4qFw+<ޘju(ɒ!ZX*3T J29}^_[7ޞRzkP^+˜q'FwE:UD8\mcRe^ ^$ξ븥.k.k扜GqN,xV=Vs[ng$YN&WM L6p/{ݥrn9q V׾quoP\` 67sJ jk29NtsoRԕ@g<\`8ZB"1!dD0rZp9O"4i_e]') hhUUCuYOWԹ(J8tL|EANӜjX/JR'׼C7)~q,6{Kkg#A{,M*f ^#!lQ>c]؁r/MUw.1l:!b "Nc u\ECy,csm *mi0sӬ qa+ZGE+ݙ9ۜ>9Oz~<ǝ_`BLQ ;;}bh,y9뎸S&4nWks/liɔ'TFw36Lѡ=[5mePqvi:GcГhx! 5٘"qR/e:3޸YgGKA[݉qǂb!hgfLѴo/1;+tor[%R$=ƤЌfr^DcK̚xy\/E Rw0D`ziQ¥m >4Rն5y6IN*;wXxDaoaC4{<٢\psnk}y5!f3dcL2G.ǥ=_VqŽu]urqFj>v>T<v@KȞb~<𯍷W u1v20V b jir03l|^ G:j{CP Fw(V\eD_Y , V61ZCi16ە{ii1QXZOxvl,)6pp\pk3F^rFmT"DF4YsN5a{]j) J rkMogmw;Sa97zPOoSѺ&guӒpɤ11·j߬qNy'ׇA ;KЋ+:) ~7ZȜ7Ĝv 郞k;?'=+LY;j>64o`kN?6˻60ڪi kHݶ"&{ pc~ye8~] YZ0vmm.\4e19J"̰KBXU>34#(՝hrh1fAx^WIuɄEV-l>_-QCw.Dd#ݽ3:HmI+Kj<>sλ8{7#KPmmοNuH#/_+yqg+#3zgcKak+3~(_t~n!b\~Qًne;J0ZE_# O)?|"=ɟs;8pjG?a+'?:p\-wD<.J XG K@/ ^@+)ʯ^^1wuLN/-4ap8#] Oqܴ]t"tB~ozָ8׈G!q:*{2ֺCUl\n?yi.J'CT_f` ! 7R)̵bĥrLve NѪ^lc><θo?ש0Wcj{"9od; e@ϵڍa/IºHvUP]Q1iy;ߛL3rw NsgDe[55vŷ^nRo@R@/Zm#B}Dayq:l;Q\!$-, QQ5H'OʙVEJ4u MH]K :;06e^bM\ꈿ,QehD3|?ͮìxXvG6LtTMOdg׶oUj}jW\t3 ޫ>ͶެƓN}>Z~t~s.=qx>}.u9n yr*q)(ٙR>VI@3ʼ.wFk6D<!{T^ (5# eUr uv^ȏ>Z(:H@QE2$b6 $th"G9gdU8l(@JŅZ uL<UBn7HvtuP_cfPP:H@ن0ndf@ |ߢ"-^?:]p P\C=䣶]! e ]j>W&WM41Q'P;p;^N0 "$@P+\n4&+8B Gg #,0+TX{Pv\#j~uG G2hɜhVPFu`uX#i}6o\?y( \fk!xcU+@XCX2z[!z\;&4>7\0͜?D|t *4/կ*Gx4׬u.p#ؘ RMq qO5\njv#74޾F0e2~B)6;=k'ZZ|\lM鿟: \Vn[Ԯ!akƙv9.!QШK ͗','U \u̜C1񼢯<}oU0ɖezenWZEeሒL7AF X;aEp:2>#%]A0~o}]D=Ciٚ2Wkh^h2jI+Yr5׋)*d816A#8e1R(ēNr[kBJϺm3]YmyfPȆ^api⮸b8RSb!U}gM^"`r𞦌d v K2(96–1sy)\ZNK3h0=VIV$dX"FCgog7*]ɺW5`|{eO%p\Yn)e'ǾٚOFȝ]UIj]boS}.\k)!9m;Jp/LE`aJu^ G7S1jPit,$v1fBfwUM;'_\Ԫ|p{@k}9`P9_x>.c+pLcݣ@ݍ_}7EHAɯyG {h $8bߏgVם;󞍿7?p )P ~]~~mFn,Cc pB)%( *=)Bo p{S0K}4ϕt,:j>xciH0P8@fns~Co4] ^9f,eJ,!@zM@ֽϬ'!ȏ 0 isq`@ }e0PtqUwݤ^0TÞ7_l9z&5t]Fۼ:?_>y9jweݾ{ s]1/31y}u}%cn],S*@foItqWsopX.HPC01kn p/SoV/cu[wn7ٺH>U0*0`SQɩ~$@l'EBM8_D0>&3̉}=b'ۂ熘zЏ1i|Bjc+@N`=?s=>`6Ty>NG+Ř@ /[}Vz?ը9vԋ8LD+5oW XFIfh@+ۋ}ӵQ\iGCEyd|"Q(Ȉs~MtլYobADAe$si/' Z=[Jǧë^eqgT?ϯW:]#_kݣ2|fڥ|Mc0^z+Pv }ûuy^smz}@o\>oRfM#]|L_˛|,xW;Ryty_.ϲ=p|9&74u'l>{G5ϫ ~fcb|)Ĝ s 5j_6*>+)_:'|7k/Z*ಽ^<|^d~2Y 7i^ T}E!A yg>No O+%:3p`RҜR?Ď|(ECDr(jGyĀ_h(- y۹НL|ky ֙=n8s[-%(U;u²Qպ?~nFpMV!qdZHXSkG @.Aϼu \ .~Zn¼܂c:[^DfNYNC$d,.z#K qns]?HB, Aw`r\@W-ُ>t,iԮ,X&1!=s)ʔf.r)i@,v~]mymEe z˿6(d+6twXő缳S|HQrwވtSC|Ҫ~<t-1 1i-['s_D:I7C 7~JxEx]mG٪lpPxF%>߿;0ÙyD{~m` [ p>Ǜol=&ណ d'- =8 ]1/u`&M6ɒa 2r}'0(^DNVݰM.BX y@d''֊Rx|Aռys׾ѣ~Bwf/<?К<x^=^_ $& (M^Aqݨ_ qiM:q[zsэxN*#g0nd'gN}8ңW [?$9Ya |\(dΌR"7@c"6:7ew8!p) "jnZ"ě*Y5뿗|3'QݑMh+C! &ݵ@ԒozLhc,W %tȼZ8V8; &8 Y?娂]KlZ `@b(.v^ZY689'n,J?*ҹ!oВkư,/ ADDF)P1WKw?7z0 WH7, v <gRm'op4"5n`D!D[Ddfo$"Bmܥlf; U"wh:}@6cw= σ:omӻBaGֳB-מCQ7 DB rY }ĬQD}|V8qt6|ˤȶEumԧ!ϱj{=l_F}D,B+-- "tpR8c 6#8;Wz{cz7ܭ;N>h+u,(D-i}[SuSCEFxe5h_YfuP^G3>EdG 0zz1c+_hr973Sx #͔ әx;+H j]]Jl~=w" :t6\PMaokWBmpj#TvTRշ|'uNۍ6 $#fo=;=Ch5@l׊Z c!`eۊt/l\wURx]a({L)-T <@h1xFI[Tw=AXرNRi4.<s6L"ED}؏#9u*uJΫڶ  ZdqS죣W47mON6=N '&ǦQ~0mYBeQ7P+B9`{l v"M*JXdtdޙpɓ" Z͟qY;b jjNTU A:?"RbIV&gwei¯ et({2lsmjtZ4Wr2Lɇ %~Q :$?"O88 vh٘.KkAGR-$${ň>T7|xV:Lxk'L-,8ӴAփ5&D 7>]i7lg.:Iޙ!9n/o"7>Yrs 5=~yKZ߉㞈=Fs_&jyj\cNdnJ+ޢ_x;INŕѵO+lr ݫq`w}W6k ]*DPv$ Z?kއ|6 ?_NeM-o| 1DycC/gLd-ՙ+0\_7}ָ?A h,H2P?=NSlDQ m&mh@&Ed: %qɛ֋fd$Pci~8hԡO M/8:X{N=z&n&$)ܑV`E΂ِ6Zܪ$eh.DUEV`@ nks{N%2jm>}ob6n &߳lXnԹm$mnnk |$sd,H-I"Q $*ВFP1$1m mg $!yg. rN,!HI!GvϞϖY[׾=} > ϗV}<7y}Oo .]?j'{8؄H~牺wK?% 9XZ!1J[f8!|c-jE]5j8M\n6ĥno_o ASh٣~!*TWM&eVjL[lvB~B*uVq;8={vIwOl19Llz+L'~`t`kEZ"dxT.e(BUK-Qsie\ҿrRJgf:(n"5rSk-LtTqq#6CD3-0H|4 ,4fMPlY`P[m (֙Y]7x@{VJW~Vruj{^'3kL]- 35>A =)e7y*ֳx}}x y. )Phܹjpl(ȑ@4'bBN9e H jtMbyCUȷ1 B |2cfB9~>ܳu`)(X;Z3g+s AgG /'z;Jm`_~7-շǰ8j!3~lAwE&o d2\<6w."wa 7*( AaĒHy2{FxOW_w`|5+W KbnYicTD<26\Q1r*[;IW=_U|'c1_tKºwo#gf-o[Tط'J7>,!WK{d O6WBEfF)[>a!Az.(KG2p$l_H^; I q%9W*P0P??AOGPK)>>'yQ=<ގvg*Aϩ>K|_q?` {а $qئġ&!7c% 2Nh%"[;m* ήMp^J@'AQhz> ;ʥ#b F+`xrBm&ISyLCn !+&hlφ.OmV(57;#MZ* 6`;vʧU"Oh %IEMd lp*:I `N&OX`@G`C:wQ$4@rx.Io<jn+! /A˄/ CtiQ 3Nd2@Eu5Ȉlsᵂ7.s2ub49wܚzuɯZy^BZJ$$(d((((j(j(j(j( Z"(<^n-yc4j% r 3 !of:D]h':X-T dȠ#B@Ԇ<5u&1JzA-)uϞ\óu2+k<] v]9Ds3tǪ::^*iT0fߒtE//{>BfQU?ڷzx !Wׇ:_J5Eas;/=<#f:`=]XE_ 'Aa35>^|$#\Y  R~[0iJ  r.q*hQfbD$>}\.1/_%yBZ6Cp^8H lP:2a 2x8>NTC}]VMPijAT>NљyO| a2|m):ybQ ƌ$lI1ٙ/R$ _! ^,ڏ Wo6=_S?.}%Nny q>q!9  ' [ǽBI\/7 g$>=5圓34 sI$8\K+SMEڇ&Hu۱D*Z(.f8r9#uz5/1fe7{3B %+H!4*:E*F%(3PhC\ H H0u]."%]!MV^ԋҬ@@BXZ!r"k-0U1# o8($?3J)dR,II&*;teoxhxfKg>>?>p%S&QQ G5a2ʯx( Qܓ鎋/I%@hNze_)sМʴ 鏮||~ u[_N!:/ב~:@9 eM\9a <0JD&U7Hphbd)X;D6ɢPr*JCD B6Lϗ65m4!mxZG5":⥳Ԛe{~z>'ZCxECЇg?݇=\;貏Dvן{XYG -.:Qj*JpblOծ!N9q# WoKr?yHwe[;f>6=Cx:|hV=]3n>˵Ţ?D7zQ*Q-3 [A)$)m *[}+(^]G?G X%Db?rb,.&(t#@PB;dk T;2F}~v8GSM3od`ї%ѣU ~l7<}sc؎җ03"Ѕ m6%,ȉ<8P0UcKc-b>//^؁$nl8NR+bPI& 7$}w*aVR*Kz0C(cy*j[+gօI[4EߞS~=>z] ւDB*?o??D?ޛ+jUr>3ָ/EOʓ{o>]5?UtŎƎuҎm_݅pzӝ\* wxជ~^-0MYqm7B }?r'>}Ev_Ӈ͗?V_?P $eaTЄ@Ecot7mp6!#zG UA="IWI %ɂ u~'XN/ecRw0!$ɱ?Ϟv?d9tszygLͯCz^t$[WףZDu]Ɵ|ey; j{|.'!hW#,v` ImҘEc_ƵQ׮Q9/c*s0ä,%$62Gnx I `F F#M%TFܷdq:[m%U/ BSFp=|*1D 1s}ܞ%(iTJ6ov.\̹}W#֧&jٙFRNτr$gЮh /J !B}q"Pt|̑U]ٝI&ƍ!$nQ̻ɼps=OkLl|a] o?9t雈8ϳ2wSİ~_ tGY[ФPr%Es褣e(7Thax%0jUrvI%AF%SD=?ivDDMmUYz5bOU""B-Xi]`d'CpIFhːf4 Sec*J´/ |㕊eR>!^%d)^.EqEW>way 2u`1T@ 3=U-!j*_sc響cz&ۂUY Gׄu}ѵkmVH%LQĄ[?Ҙ7o$oIJG6Re[2͐ `g)3WDkK,uޙu)_sXr~@O^CrY!K;a򐚤n=YOsCΟ3k ".k–rD5޿EpPOzv  og/ټ&X)-=hZ|zfKg4 8aH(OhAr\0d>0--AZdD|J& {b# is <][C%} "M%d>,(Fe놄@mTķNp"ZJ+lv'*Yۍ`Ex<>:5i5P=I3/`0WEfط Vɤ^pގE‰?KL춂 !(PA2v!2^~=ynR N̗EXk>er>v|>ξP~^Z!YΠ[&ѐ@Y{+y8ZMO;%&Ö/{qm1 $E: %$Bau~jEà2Ec. gg\}﹉ȵ|\~ 6g'ygLH29MoF%:JGMD{'q9xo!iXDo3#dHGIJxo"DH?f+3Db:zf3}߬5׷\ Pk6̌y y*onnZĉHBEO-9T}q ۹ 2 AL~}e6M`ɂZF)܁yqIKͫmڟ:|ެO;%B d >q> +ɸ~}ԏE\?vs_O=c9BFpaR>-=_@ fm-ܣ3 /?C!({>` @a殞z/@;.jHE&J1@(:XmfK'hU-LYd9FY||^dEM#3 ڑ=7׫`i=ߍ']8o߫uxqQVࢯ|:t}kJ.1Q BVS:AKf;暤Ȓ$#wTnEyN<\$0~Ǿy'-DskpQ( F7š(e TR/A/7`4i@vSݧPYkhWQ6VM(\F׼xIT[k~8su:rHYAnh[rV?c UKJ ,a M$6'TAeu3͐[ A"4f @=wc?'oN~Y7_Zм^Rrw.u @Hǣ,@f(G б`TsA $[:m˛-seoVIn'!!/R ނD3!s ^HjǼtUDy|$_T EˏFvk/YT4| Р2@vPGտHrfa'J DD1_9`0fk Iur3Nw]If. y1RXf}N<6fLD6YTu挧nN{s]"!(Ae/8HtIUM5 AA¯<[ C7TuZ^ӂdT׼TC0c7]_d9H[9\>'*.VOAnә>\B@PT\Rj`ʢn]!hBR)3 MȂ0[uW)<얨At0IPp>ebh4Oo/&f̙ mt`h:js}./L' N7lmפGI1SzFxfĊϗ#QzAIK";"?Z0$R=PB7h#RVxqXW@3l, Q:qZrGa L0Mph#P Q""lZ:Z迅ז4 D~oSb^fefqFDEqdd?٥N;nx&IBb7UcYx\`,%ms h _!\Zj"Χ""cW9q5ѓIZZrtOd-MoYZYI)ٍLgqqc/Gd{-LZ 7c&=%P*`=K">:K&n=;Cna?\n҄cɄ3OB~}q-՚fpm u-:}NgH>#x",`MBC9oGѳ^lfӲ7Gx$k㉞+xW-#(%HkRPT UK)Z^86eԱ9Ba(.ϡ\M;_uCq|+BiB-O'zV N= z,kα|X:yO8xp0VNYܷƱBJdb\W3)1dele5}/W* 6U%0ҹU`BY@.G/e#vs'v({gS &I,H!~lOB{l,IQD"!L>kB~?/W pD]GN'x؃“Wb܌P @׌g5VO!9EV|h$w{ ]yoK"'}