summaryrefslogtreecommitdiffstats
path: root/server/monitor
diff options
context:
space:
mode:
authorStephen Gallagher <sgallagh@redhat.com>2010-01-26 09:37:32 -0500
committerStephen Gallagher <sgallagh@redhat.com>2010-02-01 08:50:57 -0500
commit3994ec2219ab7c7d5afbea4dad189d6920f94bbc (patch)
tree0a3067bd3b2ffee161722c472050165bcd07905c /server/monitor
parent4db27bb50ae891e6a9d99cce5f80ff73fd9d618f (diff)
downloadsssd-3994ec2219ab7c7d5afbea4dad189d6920f94bbc.tar.gz
sssd-3994ec2219ab7c7d5afbea4dad189d6920f94bbc.tar.xz
sssd-3994ec2219ab7c7d5afbea4dad189d6920f94bbc.zip
Force offline operation with SIGUSR1
If the monitor receives SIGUSR1, it will instruct all providers to enter offline operation. If any individual provider receives SIGUSR1, it alone will enter offline operation.
Diffstat (limited to 'server/monitor')
-rw-r--r--server/monitor/monitor.c36
-rw-r--r--server/monitor/monitor_interfaces.h1
2 files changed, 37 insertions, 0 deletions
diff --git a/server/monitor/monitor.c b/server/monitor/monitor.c
index b3174bdab..85f69c113 100644
--- a/server/monitor/monitor.c
+++ b/server/monitor/monitor.c
@@ -858,6 +858,10 @@ static int service_signal_dns_reload(struct mt_svc *svc)
{
return service_signal(svc, MON_CLI_METHOD_RES_INIT);
}
+static int service_signal_offline(struct mt_svc *svc)
+{
+ return service_signal(svc, MON_CLI_METHOD_OFFLINE);
+}
static int check_domain_ranges(struct sss_domain_info *domains)
{
@@ -1489,6 +1493,7 @@ static void monitor_quit(struct tevent_context *ev,
void *siginfo,
void *private_data)
{
+ DEBUG(8, ("Received shutdown command\n"));
monitor_cleanup();
#if HAVE_GETPGRP
@@ -1501,6 +1506,29 @@ static void monitor_quit(struct tevent_context *ev,
exit(0);
}
+static void signal_offline(struct tevent_context *ev,
+ struct tevent_signal *se,
+ int signum,
+ int count,
+ void *siginfo,
+ void *private_data)
+{
+ struct mt_ctx *monitor;
+ struct mt_svc *cur_svc;
+
+ monitor = talloc_get_type(private_data, struct mt_ctx);
+
+ DEBUG(8, ("Signaling providers to go offline immediately.\n"));
+
+ /* Signal all providers to immediately go offline */
+ for(cur_svc = monitor->svc_list; cur_svc; cur_svc = cur_svc->next) {
+ /* Don't signal services, only providers */
+ if (cur_svc->provider) {
+ service_signal_offline(cur_svc);
+ }
+ }
+}
+
int read_config_file(const char *config_file)
{
int ret;
@@ -2098,6 +2126,14 @@ int monitor_process_init(struct mt_ctx *ctx,
return EIO;
}
+ /* Handle SIGUSR1 (tell all providers to go offline) */
+ BlockSignals(false, SIGUSR1);
+ tes = tevent_add_signal(ctx->ev, ctx, SIGUSR1, 0,
+ signal_offline, ctx);
+ if (tes == NULL) {
+ return EIO;
+ }
+
return EOK;
}
diff --git a/server/monitor/monitor_interfaces.h b/server/monitor/monitor_interfaces.h
index 1835718f0..c6361fa2d 100644
--- a/server/monitor/monitor_interfaces.h
+++ b/server/monitor/monitor_interfaces.h
@@ -41,6 +41,7 @@
#define MON_CLI_METHOD_RELOAD "reloadConfig"
#define MON_CLI_METHOD_SHUTDOWN "shutDown"
#define MON_CLI_METHOD_RES_INIT "resInit"
+#define MON_CLI_METHOD_OFFLINE "goOffline" /* Applicable only to providers */
#define SSSD_SERVICE_PIPE "private/sbus-monitor"
S*" WSЎ$l+R@<s.sMq{)=dWP 7Tg#@tͤj΍<0Is Rlhܱ7x6R!ѩ v Ϙ!ک)Lc٢D_&Y.۠c߸JV5ɓ1rCSOV3Cpgʍhjti39*M؎7̜[^  ,kuM`9SNύ2.VphR1Ξ{M1WzH50^(M*IHmL4U\"F1|"7Q׬Ղ6edCj]mKeɶˤ]<IsG/n[} a: {69 L!8nZɛ<큎6k24C#ιf3k e^ ̊8&)[+775Ze?^𼏒{"YJ;ɕ1NJ&p0]P򜝀>x^N$'=k]->RҶ~wjNcy|=v^ &*WḃF20=wCaڳތ1IB)U樲s(IaցPp Zq|a<6Ӱ6vma䝫@Xң'/S/Ԅu,1JUKYsJ13iݠ#lDכխI}O gTx"խEx KS.d~ Q森"%!+wlB5 .54ոW.=c-8,hpQ ]:=h ʊxcT V/C.0ׯN{ MÁrQyy!V?f  ,\7;™M^-1ck#N尋"q1@-Koh iE>ULlXdg)s0GvG(] rȇybfsP#شOxނa "-89ȋxh\Ѣ:Ie| ~vMrÜq'G.,꘡Z݄ 9Keyb(N4U@hz9XW|tCPi\5eõ!6'N3"غ]4|RÍOUOc*MT=';ժ_;tV#&X*ʮd i`0-W74 WXxc!쨵gM:ٷìS0P&DTAK8}3<2lil>bbHzaBYB ,pjA6ԃ-f>=WGo\7&V0ē"D SxRb Ri[N?7LZNpԷj.EA,w&4xx'仈Y,BS7u%wZZo2|,b.~˥+Z5 g)V喬wUxz%y]MPEnIp0|&)tU* W0 W%Qڭ:w+p Fh%]CIRFriMީL]33ᔜ.tR6OѮ_?TB(~(а 'ڢPiA:SyhY_PZC"Êus |8J-+]eMYFD&`^^w?S4sh+`:-va*|ec/mdѩLUOܫITKB'w43URG3Z4v+U'EP|dh8UAhQU^sy$-yIsrIkڇe|][τwʳƄ:b "2NF ɨE, GZB\O닐8(n;t,lJ"N}0 F0T.Ɇ5 Ԍh4iX+.FE =я Hm Ka s4$(V205HG2^KW{t^4/d^Sb~VԢiƯ~ hXJ˓a_yUuO v%@X=q˄e[bpnH`!yR|\QPx1(&ƧA(SGvhJjrdž79)˜"fKmK߀(ΖRkQ\lB&=(pK"bԒq븻ezH bl߰C%n¿Pͣ4Df&uoU64~Vã,\S{A⌼ӝ^X/' ˏN#LAlB'ǧy jZ$/فR:@>((P-[`0,k 3a]=+JRhlGB0-T?$ԗuZ=Z-/s jHxUZK炱s"w[KdOEa3h%w[8j^|vU ($=lτGQMY+m@RnOs몘_L߷.WPđ|)OmkCݽ_g/hA#'Eݯ ۦOG`A*a i1,CStBF_,4а.X `F#!qؙS)+B1[UٝMf[kqÆG8]&ZUhfvU*,{OdayhWg_>N ªst)8[HVptQ_jƾB^/ϫ+M[Q`|03m\QeOtn譁 &:_P /326GZ4hI@[蝂ϦFa5|{*Bm3ǃQŃKUQeś6 O~Xt0Wo|oxa qjYpɭBrZJ,61ґ$WUxpMQߡ%F(1bG!l4i3 o>d(o22e-\- u`8`{ 5' l8K%f2B T⸝a6͜0=|YUZۣoy}GUEa_S+=0g~gde}kL!N?;NRB7K`6ȴ~0pOb4n=eҁA3rDPs25j,4rU9-4͉1h=DHA~%9?DĆ`PDc=~y`y(ڱ1,?{s@) 0g:$?فX̒aӢO-o@qDPxVMd0qګyd@(EwJ_WfWf2j`eHBʇ(71`S~sEC1!a%˶4s9.;1 >揩Ňe@tutȱtW6"/ʝ'V .uo7~k>=:vp [k}D^m:@2fqU6IW"4o.L BmvE[%#ZҶ2WӜ)-Havj!V'Ii/~5S`_ WpɿȢ^>19`Չ^ `iYXӏZbXR(xPh#s@W"ձTsW -1M=b˙>ui6ܧܹ =i1/jC\i}Q[6#!G7Jjf͈܂dn%ʷ'x"hSzNrl8/d `kvH(Xs'@"nr]By Q.)rPLD(_+Kjړa,=䄦8Q$^&mc{yԗPlNqF[6`D~s SܮSBBJ@#ȮG6T}Vf`TkdgK(pYX[bWz©`l,`_N2P[o7uu@u3,T\x_2 A ׀ EαePmZ{D 9k!_x޾(6^2Lxg(xG? 0)h ;+E߲ ωIJhĥw] :Lvp8 4S+N$@w/^$9LdVfS[+bxJG{7ZߙNH]C]F NQ`y:2t3cp ɭ#!cNnb "pZg_$ $! %bV˒x'Kg Հe/ٯ W>X`).ZB%R6[hmhRKf?¸XD5U +DeW-UZ&5܇3tJHݏ;԰:fUzZ._hFȏo9$"XLJ;62z{MUMM?-w vRrk QfΣuƋXNj@ SK\7KUHSxȿPnj>CZQ5zu 4eֹ|HS uDHelGаw;R~vEw^ь&T7!ף.͛qyw_ǃ P y[}hiwLS)il,ԓ~-r=pdeLxEG .(L~yJL*>Eƿ)a18i¬hDfaXa`Ć?S5~3nU1I6W7OsԊ2ª,@[#Jg b=oL\=ύA#  إѢRc:+_Jy3,bmfelKl+`Y1F3Z۟مk'd#V` jN\{!&WTqHnlE1& 8f RJyD:60tSZWɍӬIȯ9\dK!Y7Ð9iXTm d+)1Z}>5*7YsXK$̽B^Iͷ-) z9*$K},ffl Q?FSoǵsܷv¬O I'F8^/"cU՜H؜:ߩ"Zȯ{4O_tởga[E!tpYB7%HC1q8%IZ*$:KK@X[@{]O#\BYG@#4<'2T͇! }eHޖl0;ut!5fE(yVZb|g-R údIn]?#aPt>_IlsGJΝ@( *[ڲl$f(4jt13SrJJu;l* _qIM?Ej{|8Tʯ.2W?~COY`B $Z8# $?f7gY5@D4`ωQ8W]㫏[ipW' rdٷs3ՂnI+X¨٥GM3}I_ f#w#p[$l7" ;p:'E67pz l~W"RgZr։pE? C:M!mogeP;[VP';hf%T8t!t&ʀ~-P6̺]D4w.@*iL~>#xT!IVn($U+ءٰ+}]0+KV;u.!a Q}"{$#fGzׅ%EBZ (P*>ջPηrvP+<Ƕf-Jf03h(Z3M%CŔ^/$OS͓ v#e#'ufZMU 0e:7;'q6Mb1`ۿw};._VѧM3(vH^=\ǷC*ei[mזV+ZJd'@Šwd#G+L^ΖPd,_)Ӊ%#k77mDPFlIV\])HWd+QMH^A.M2GT!Hyc Y_cD}݃1s>lӔԫvuIצ:Mplj MEi'ZԦ3A\ Xx{ C}X& #ؤK% ?>v _e!m2jl~K*w/A\}HY`QvX}.'V$kc̛jpGb)HzAܥHgnE~v !NX,䊬N-:`r:p\3(Ț\ī+lxGaG5tSX  )w+Ռ'0vE$HΜ)6p% &Y7k9DŽ\op=4]` Oc0HVSAUG{b),V(* d{1c`=FBs,;NiFA?2szƘ^s6 Ĕ@Y*%8Yj0V;B v"DqX Z^3m|xJ( wR䑚0O!F}x'1y'kA˨9{dki` {ObA:`\E )5DPȗYN.T̑ HOO 3T[X*qjQ [)t uA,=_ C^Һ)$慲<,4EfLU@S5E/mO>c"0 9u;!oQCC-(_ X&|?^YcVryHu`5viϽi8Z|lA_KtW( v?F$EڽH kcV EޢN}bZ^] 傐ZT(tͿOߴIθ'j/d$D=w`ʵ0AEߖ5/C~f4I[i{g !?fqG@4Xo'=$JUa5u͐J]ĩ+IxKK&t`Z JJ@'߃vXŔCVQF~V^Qr-QW v*{)(V;^_ w%\!RԻ׈%CEiWkMOj5;.B;l8Jy fy1AwJI } ٱk+@x8RC309u-u7Dة4`|4T5ynͭIׂYY8\bME:X+t$.Go K / S%^n-WµP,ml)uٜ>,}վ{Ƿ n 1Z27IA cAɒrMCS+Q1qd Z ΄09ӓɚ8?=ywar2ĘDs<_EQ">s+n_6 )˸1_7DX?VlEwnrm?޹ӥ@xDՠ\[?,Yh| nLRţ18_cpN VugٷB-Guljy`5$@,5L-cj{ xA 6-q*O,Gˊh.OM,l¤Y~ԩ,?)/Ђ>2rvK~n^7 nH >mE;$wЭ:HRNLTar JX"C T yT^Dξ}tGөځG)}5G&J nja+tS(\ MD.1z5ƲܓSP~ Pg9۝M/bqc͔JN^[(C0ʥvau1eQg_ ek^j<:0f7& Ss8⣑@dCt~ 8kVOY`b|l "$e/f_Dd0+dD(>#f.yx+Sqy@d Kְy;I00"<4cJh$$(=GbZk[>)Qf?Om"b'*i\`2,خC S/t] jZӶdjP$X:?> PXm0#HeW >sKbLz7%3(,Trs* ߶=#Wi0CHZ=B%3w c e/vSg#l7.0=9X t!6td>]E/ U:]4^l\'}}DŠX#Kd<>p)> 0:RW%psFY?~.3:0?j qdjDl5I(t ]h6ڶc% A].MӋo,SV6JB' xtv7 <ؕ#ն"s ϯ%u3`Hx}(zNqeQz]풙?}QR|,j 6f oZf]0J@mbpavfe[joNC;5-R찒93c:Ա*Gn;wgo-˘c]!,i4}9(ǞXA2ml~>k^w]H# /iv@yfAC=^3-y\9 +)3 5)t}"XyܚD $;%YԳEN(b?ATxKɳ+el JF\;.;矕 > +vCUNAL!=2Op.L0'5 |1ɤ{ Ou,~V 5 ؝&p4x`_έAĪAys|*[O ,8;~WҿD8Wt3ooB'Rf"PWWE$LԯvEP9AiO·Rg2n]ŴJ0DžWCe:3]:Y\0%7d"g;,"驒ϊt`ٷYsmUy:G*f]7;l*ԸnCwSM ? ei{!u'x?| 3>C^~n"ib8gɥ=W ]%(o,l"21R'% RqM%Š=#aezKGQhSjvG}5]%R-w[,mJP4,ptc(no &]B"aDe Ť<դv'2M`KxW-s֕ NQNVX$HEk7+/D]'zrӁGu &5c[)Tӂƍ;\ U͇=:/G S:2So3kf2Cs}Q### J]'Ox%!oϩcqM$ܜ+ VDB{>]p9BOW# ~K >vg͏9oS &t3_'p׋ 0P5:nfqBͥ2TI',5Άp\ 1H~IjXJ~,jRk`mK⧼Uz ܩͻ26t:ΎB*?,Se=4tIԡeA=xčɆi5v,gfV(ԏ=nތ#Ye~aHE.K^XO-fI¿+r߬3˵ `&6\e.s<7'czzf?b䲴-'[Ce} S31I-Ŕ;Y[6 d1#'-X{~(tBI$J.%Iff&gOہ_0̛iáh*W,R PW۬T;-%Ȏ,3en?בp:{du IQHFuP;(.!jI_ղYؽQg=8'U\f'0 $y(SZ# PvK nl M] KE Vx<>96ӇK<1EDHSՄT>߉S5h̭Pz#lo&(+NrQl>Q{O=U6IRp|[!怴;Ef_?4ۢm뉿}i[P[l~IDٍmx⓾|e 7*N,_(RPc}vOY(a FvS`pkjڹ$iъӥtZ?t }mC ϔ;H-vC_코ta:r7"W!E3 7̭@r.YKgd0f$wC7<+e+FŖe0L=KV.Hӕ PAAe&Z@Ո9l ;F9';vڎm>"/љ@'i|crۖ֙`M$_J:Ө!(轒s\2C<5o!Qj$ ˸}DD[2f'mΉLZ\h3̲Q`V4)eya]AT3nZaX3c%(QQYCJ .oZq&VE5aShyYE]5>"bq-#ʋm& {^ tMX ->,wPbC[]ͥ*#H)|tsa(Tiȶ.RR nn){"X/Ī2/RzM}hBD}})iI!gX1Nj^#C7< t|2>sh2^|{\)fsH 7~S:hZ̾+N[4/tG`nU`21}ĔA[ ̀1~‚ l:kNR˄zyI9C\6gqC3lO1E-e)J&$+ȕ<]%<1U rukr9%3<;,ʷ nû84>-YGuC܁nL# jMNqZ60$ek! RIH߈xF%W.:76WƝ/0:K>4U9;MOy-Z6{"㧡UF ٚm\;9>,Ja)&2fܞ0X(#w#cj-?\97Z0GՙZ"1–HUܚLm8,2 5v^Aui?*PQz_߉F+]jz? ++:lI<͠>vP}J6͌Vgb0oP꿌(G]hxٯ ٴHN[#צ+ <}YLL6 RV:Wc$,k, 1Jl o%9k;Es4}YffG3cjB׻ 4]۩x{ Ie!I5Ja^1lHds\`IH \>Gm?qIJgU&ѵoǣj25YM[p'~U1ۑі }u/"=ϵlRgLax N/ܼN72h!<,AO<) lPΆɨ53kѯDLf/I٣͔.-CUӘQ+f]9A&R.Ŏ'(H-V^?DVXOt<.7AJr/+k=pa6 KBZS<9~N\ͬ~ ex'an OJ\x(TXZz>1*.'?q/Gxkm62.z;2+qg?z{m"%5UOJ7e"\+B=i&ȲBؕsL|{K". ??~b9. nZ;7UX!df\ظc vN))'++P0Cm4-?ߋ?.v EbI4Ԕ"ǯW$u&[ӵXH馨*c'ۃ=k{zFs<T+ I67܇h]D)CDj Kd b|h˻&!g8` '9Xrd;;FL[:Škz0eFۣt=4x@gFr"x`(bQpd6;X;'ӯaĒuv9YV؄IOe8o1JޥG'+f1Ѹ$!.-@cFɢ1_xo+ku K *ifjJ `#p)h&߻6a;xU%?Cq@l4|SKO_/v`ާщkL06D6mF >|Ŝ#grUˮ^n!1yǗ WBW4IZ@hz$Nm(frV/f0i]IJnHiI/75O<˨\e|s᧬rr圐8FI_.`DP M{foys\9 RobxXσe 4/ZN̖ %Fk"Hk*#=6Tl_ؤ!+1!Fqg-P猗s[\U +0hiXqO:8CkSWhG ;B bd&:R]?%jl0-%M̙ Rcʤ.NC =vKs@sq78W[(>Z#bbA&^-ePm Kn YّjhмZWL-r(s%#R+Ƌ iׄQe8i:?P#<+л;M  ЙttЫfy. w6dEi3xpQB(\206JLQ6o *5/wBH- rjR[]o"ݬX! {e&߽)U-#d'.YGJ4"Nh$<窈c>f`M׉LK(l%ia,Y!h `xǴ @_{fzæqB\e68>@Aou0Igt9Q$u2;u%ȧAj;"~KИ::4IJLVFl&4I/&>Ycϣ=N/xYo,.A^$ va?Vݺ'j7i?V`h%B˦VseF$^G7L~_5F$WȥZf8* zYߠD 1ONGRоIesHpuDwo`Be?KE3 /Py-H[quUUIc4=avu0dsJ#t;tPg5|R_ȳ$0"Q7pSrʾ{ϟ]+T@!Xg}hhY| 5q gT `xl>p=_6V}OEĶ|VPNrI7Ԫ7Ib0 ^eRɱy؇"iK0\BӲ`'*{gP"s@Z:h~tr2TH5ݣ47핐my*%Ah>g.- 5v.ǢhfFHИOᴯx^ܰ1R ڠ`;="Dhv{7.c1ӶÁIiXMX k?>gAnOl \9A" %._x|ׇVmd|ȕ^\FxӉ8]r:{ !LmC-$އF0L^f7ĎO9J r0WIeYe@N|%*'S$txb`~`heB\ jS.Zd8:QԔ}P΍d{>/jE*>{ŠhUX92 =.X${@"dEk'yHק?=9*ܮ1$[+ֵ%ۣ;K@fqY13t7myGNZvysw0-"tf_wpWj$=SSRПi [lj^I"qNEI MS-FR&*$j[qnG4e^܊];+-fs C;mD# 䚇IHᠹ@(U} F^M9HRE[1PJxoFh)*L5[\$y[NIW6 l Kx/7`-s=qX؊>%`ߖ@y- ¡ dy%\Y3:U^#R$= ޯsY,-4pا6oU68tҐrv9y\*gr aU&/2/cQ{ $<}e=rUX;"܍̬B_[: 6z!l˒Z9 K*v2\+7nߨt3Z SRIJ3'lEe|c_vf\i[a^ݳtIh-nX2[+WimU,ĩFXar%%POpY|2Jo2JoK7bM,~?IVV9QL!Zm|w;`tI?Xa g0 , m{MAS|'lČ"IĢ Kh%1B{X~䡒~ao IJh D(jz_6iuey \4U@[akIb$(1)?I@8ZHcڄO$X Bjg23- ˅&Aaz쨯5~o4;Au#l_& r طWP"0s*(ާïIF+g/= Q{`l#b.y-qfusCB 3\fz SX["NNPۄn5xNq^?=B#vvD\)0Jw 캆j\Ĭ1vg^`qcY0{Ͼ"b0m3=5ߎ ߒ^YfbSܯ<͝u/{I8I^<O\ec e(xgw9gI7RЏ88\i7 _Q~qu'!lG ^ؖ<Wہ)!**K~uNȱeWm~kn!a 9Řn-KLZmy)k>'O^/ Pe-ƫ*Vw8H8EuKoG1VD"^P+%|']{XY%ъOp)ͦYɣA-^w\ =oԞHc@r8j>!ؓt:S2?(@BFdkgMZ7|BDC7 7:SHS:U;v^pxC!"&%4Os8̬@ udݍva% Ab%#qO0$ ̢<@2ctQ ubwkd(\l/LH#ܝzWu9) mt,'*3zYW^YxA&Ȭ&ӿCoNJ}8]pG5~@ ~{]v8Qڟ]9K l E#rM];~ S`M~z#(&zB&~HGVEύL_evK(K^QU"Z~?AAi@Z:iV/#4$paocıBx{MI܉:ޙy>j+xFɶB1jnd\b{#mn1l6n[q)t&dK'e}tdתuBܴ`]CM1K{XV]J2(}ͯ:$ )?t/'?q'y;o922ēzL yN{WBaT[J,01X*h}L"OY0b bȽpEGvr[C\a`~8? |+Z,ukLG崍qD. NOG3~y6:n&ot@ xOH2(NS4H)g R\=%ĵ!"nYaSه >/z niȋBqQ(b5Ǣ7*%) ?GySA}4ᐞINY*uL8b5` '׈6W) Ј?-ġ&/׎>/-.Aaӂ@-32e]n0zy=WL!?YpmP@M|u6d$eb[7yд^fTmyv4&r1fYY:3X]:/ɁgDbᦩFZY{| Gjݷ4~JŰ%̑)/`*]T~oI ^䢦KB/bB Ӆw|Щ9 vt"!_q crN9gd`rjJ})ݫPld=E֣mߢS;1Y7ؑfʺl,YihtX& Xn^KQ7}$[0aŲ..zuhK*jU r˷A7לkjr/_XJ 5Nh$Ev;! Ѕ X!16&Y!8봕 t:@g4K|7k#ҞHOy/gxhЈKǯ!V+ekODt vޮ7xR(7t4{ ;G8.UdJz7%% wD 0 @``l lkŒhgvt:˔k.]_Bf!j oe\GWd!=K.<ѯ"Eon}p-7Hh=Akl=lĚ5kXU2PH+ޠ`ca6O7rV1*?e|l(90|A/Q=IFpGc.+h'wܻ ] 6㘧 - :Qe7!2ѠQոOμ//tYx2C/*'!S$u$7.R ?o!IJ <)IBg53F][E<p~ië=5xVFN6@=Znp v6=v_-V,5rj4KM%<^ !U ;mze_0W%;@PڙClۺ@3i)7|z9xf)I3\*4[ZxJ0V!R2k?*U4!>%)<mŁi Z>%bi:ɯYkpD& Xsd],Q f 2R+e%yq2Zq,uӆZ}`xN짠NP |U4+ԿADi@Jԕsѐ\/Da߽ )dYxǷ.z6`Cfn0;҆՘ sͯxfFny̤TAи50lƝ7۠ɖעh%S1 \;4uԷ9lTۧ,pXrx0X-lF yqu"T%yy$לm)Z_ j(i]+mR ;+xJWT(p8j+5)ә[QoC TyфTZiRS<za$u~Q>"{45AgVHJY|k3KQh8\n%vWU»UUƽQ25/)Q7Ldń3(1J~d;jmỆwx0,c뜿KP{,wO8p?2;m#?VҥGUnjX TX:HY6l"DgCen(b-C/όv-09:6 ,?Jf[Sa{Gw/ג=UнɼN FgNkg}"'(={D}ATC\w !#JO,$գ߻ѝ2UR[b+u(pJۓ53fo\6y=1#A( { ”ntNCJRhy"R1^Lo1,[JU`o doU+֛еHf\?GLF֘f5 2mǞ,sXB-PPbkdt#SA;2%E許iQ:nun&~jfᤊ߱wT(I )}}"KaMRqW1E_bF? Zl%iؤȅm' F1ҭ77i fI3.?.\ Yr/nLhqF($̅TŧRI?Bffm4'S Ï쵮Yo71&/'c[OvA6(݀' qL=\Tk)ݲ˱(|̡5H5@KLgaS]_kyqusAS^>QߒKʻD:2Ni'4Afa\*zx)JCnvL403Ld}jΡa@T8yz3G3[z3j0S$'t7Q_.zl1t [ L+F>`NÆT*|Jja ~E, !' Eʎ/x7Cr^SrŜTӋ0вi:Gg V)+O-ˋ]*   CY; `q[NUa^ŷ?yg&Go:vݿ~FZ*[K+D}׳@E\נ}A `,oww>6]mY=iQ06[ @O_"1WArɑƾ1t9_aqIUxyB`oNMlol|hU%MqD6rqIol)ƨ3χv_A8jHnf [4@ֶª7ЀP}$|shNR #` uʹ9Di_ zfX"k4Yqm.ﺣ}Ra\8us)uWz7ۥx7`Oj)_}5dvPRʾTM[?FvQ6lexd2  S E5#kӲ[Ai{ Xu<%|ܪԢ/G~v#pGیJY3 fDLJJ鐧$sL#78EzuG[x^ѵnXWs7ؽ8n=02"r3-eWEEbA߃=%f$@8X'Ē:Y9ޟÑqW#[I ?)v~\DI?%5G*֘q,]6,Wď l;Ǣ_"1O ;|)|2Sm)+~s#Е,eY~~!4r''anqفMeP)(זT黵>؝kU#rGHM8ojy ,N.3+L]H>|HK.bG[L0G\P F٭;>cy=#!+Wgy ~N X{ _3:ad_6A+hR&=BI T3S.fz ̝މʋtkb8\Hi.dXWwmx2r-$!H\A3bӸy6JR 79 E6-LqtȲ:~S׷PX2kyr)u7儜B}|/*\QGNkdX:Kb`2yPC:|:S0/6!sB;z)J惸X ۓ1Q D| 8W^ݞSsGBҸz|D?)FU9sg L&?X`2ADĵ6m%A$&EC\yQ]CT}/V`mz%ҒSef@%о, 4J‚δuf;o_z19S}M(ӷ!4D ,}m.?㳧-oʹfA#I!@<dFnr6*.OQ4+v`ڠu9p6䞬 5gj!b6>#;ӊ;S10ֵoFftrGnv ڂ..DjX3QF:׳3*_:ba &G5ЎQ2YtGx rJdO䓱[>~i!8kt`W۞tjj"c5[8i:u,kq} *:#xt58E8%8V.\ DK5'b\ACORzXRԽ;HڗPJpbbā%V_[+$J2nhc.qz/B(nf1eV&{ぁC\1M ;S;8^wbbj 9 g.Ed @033nC Z"Zt1l夽KkwN#QϽ'ob`CJs% y$밞zǛMX|{ vBŸDj2@4@a{e*a+ PF3Βr(:6~g&>#i­gMKe1*YToK$"4ݷڽ'gsT xdfW%ND1f sgXݾ՛ntw*iGoY]QB wm^OWb,ͷSc^Dڱ789 C5>L3`u@El0~Mۧ'kD}~r36G Zp~NҲQpg@m>_*~]n9i}6V?I)p$It?\6cbNM}S9,wxD7DWЯ䒘g]At{m~򛱦f\Q:l}kS,-a~=vy/DNlQ ei?x;X(]"LA/^3D  T@34gn`!~&"=T1a}"M~Q%JsY?S6Z l#3B_C]_Q='lm)fg\BC:Zc81֮07(1S*fSOCovŨa֖3MzMuU@8݈Hd7ܸ?V XlIoF"J(X_38i 9+Vkv~ozoI1k^5n A~\`l?MJ͟#\J~tUǧ )Zf{$-𹾳wۅ\phWa3En` P#  MI lؼ1SLqV% @&fW̥N#ORA7SbU/ #h]~2gq-V-R rF$ѸøLEaG[rn1|sxiZՕ*e;4b$L1|d5h(dnS^e6C6'j.ڎ`;^"c6*tKzQ(1y!&̷dBFw?89P["enD *eMr D)Tum^YKh 2om-HnyW 80xw]X?Pr +C*(`*Ò׹̰3+!joѪ'b.IN|Ȩt* MT*!ȃxoR-/43Dp2f J^BXfwWDH ˤfHΪ_+pJ%hof$7O<"eExV/Kݲgx, ,NB>= ώP:YÜrryӽ!)c{qv,wri&l;Ǜ}zU_Dv{zJ~bˬ]o:{ `1b|2c5]U5~N s+@!*rmXBbT}YHOTƜX Po5 %@~5m^\lN_=j; 1n f=_'rdGiA2Zȝ&!r#\L@1yυQ| Пgɰ`(#5"idmJܪ}kz^$ zQ %nD%]Qm=8u :ygd!||"&)5,vBxiՖg4-TwfPbx8q ڬ`MTGA5 %i„Qʣ;*}#Iu<0 #Y5)G@U|;Ǻ]ۈڻx>=Ti@3 ag8!?/%KI ʻ)0loiaLIc]'GEdY0Kh`T*9otl%&:^mi ]i׶`Jf<ؾqR;@!X6dpzfc%h6Q` h މ 0 e%e6wYZ3zqO3vV]faDxORj dInkܡC$T;)N1cy=S#+⬠8D/Gݜ=#)dkzbq=(2jLÆ"4ӷ^p7=bdV~^1;bHCy)zZ?kml2UV88A#-_pj 18~szPq#4Sx[*6)RqƁcpEn%Oo4Qc2yyF=7#5&6~LhcFka=sq` A ȤiE*@(+Cw\D<UP?A5έC fi Q Kj1XĝBu[4oN%,AI`6`i|˛xӹb)R|~7*m>x ';?k q2܈wRtC-GrzV6݈ófzp<"A[Enwfu5">q)= 3Wjߓ )k @nwBb4dޥz -oϚlbE]ZAx@y("奅(A.Eֻ>jܴ8lY V&vu0[Jͤg7%h/8A˫ʍ-2ůiAx]r'Biׂ0lHF\Ј3+N.|V5\8[J|H{ݵ@ nb2:)?rH̴2Fw{l;ru6>a>/=} *?{`l< J4Ox cү4lV/wz&ͩ*,췧/n vQA\M70`ǔ XU/^k1J|] k~Lռ,MU>#ȞH@־vg$`ʱIE;@=EMm*E~Xh<3-üٺ 0?v:+P1$UKf$jKh@۫ ?=>YɼeRYҞuEq#Ridq|.cׯQI}y* edǥ Hw-!*TMI:ћ>޹]vW+\# ؊=_덌qccuZL,k\ X:E2Ϟl(VHE+EX!͝*1z)pas)wVTə/vnGwT0, 9E5"Pݶ"̷JMWoZ$)@ϫ0s-^8ucH/H Gg?!~=iG`Ⱦn{a&_xny8?mCն8xBEot:Rhra_n1O_bIy v/w] ~M%9F7lOԭnVǺ=z`,{)g5}l>" <)k>d(fm3‰I&w(j "1R@ƅuuv8< WbCȪr& _DUX^Ҕ9m|X{6fͳ h!cH!/D q Rze~~%LvHB2]F|.PFσyƳb|n%(yls T w*²{a"i !ƅ^Ee^L aO#)T*ޒ=ǥ+ќk4;aJ %~MfJ$: תR]\Bqu쒥V[@gbJ4;hz,7=o tڣoZ%Eм}vr*4X)`sI.hLw*1{G P/QJysV,ֹ@TO` D 癅Vq@C|wع/q`}9@:^m&V$_QEnO<vcḠ$D6.un q#)u@5dj~tB6S^]%KE]^e/g 28ON M `uF5@Y";pqխX I BҜ1< @J OS )TU_oW &z2ݕ*Z9L~ v_6Fú̈́& Ƞb wj5 rU}HAlCb/=6mߢ 9:fh?d~i#aWQX;C/~ßy/mKZ >zE_(Be);,W{'2D JᢘExCDL*w-m,>>A;(fmKh-4Z $V& lvNМZW}"YRws:X 7-1yָ.RMOCZv*9w?+̦DM{Zt{&@hQCq oABKzOլD\TPhҜ@zU""C^])0xOL hi' ҕUcT^!-jk6~n@cT3" ]61k]+vQ<6(ќf컢P[Չ)#"a0ZU̒zYAY-L3WZ4uE$+c r~'&=3q4q0\] Fwo|)/ಙJNaXI3e:pĨ#sөw1 _YۢnhHeD<$!,,fz57Zx"D]9:ʺfU gy騋zW@g5^Bchp~{oWv_@JYl?7t_\l+Po\2қL&ON侢x~I\Z ƧD"0'VA^'GZݱ B{.ăFV:j*x[+&eJECβLkP庬^ρ¶j6^?v/^ +6,zqCD=mփ1 'Hr *Lh7l!J7VUAt PafY\Nr11 󥗂c CMo*);|~(,{@c]NU %|O7`{FLK~O@Y 2k#u^%MyDMk;ţDy|倦[^uaa}|࿃ʂ mBjdYƒdw|8f1wxt>е4f]Ls 9B$PwSvt2ݎ>dH;,{4dq]X[OyXFIGӳcs56pLt/ҥ3Paq'D{X/ [\)k,!4aʞ=839ܠ_%!qO@p}M:=d2:$DK=t&}knFF=:BtK5@p0}mya%AIw؏5ئ izad"~FWBڏ=pw,JuRr յR2ٓuYFvv\ƚѐ<"4g ?Euf{0ODTƐ*M~7yA; +PEXy7bB-X7s #6 OP{m:`7oVp"ܦXQtݒ5MxKH))ڶ?oe+8^F@Slu%Ozx,t[{Z'6fW D.n)4Q&3q.l[}N7o&eŷwl]֡l. W|=&<-َY5sM7pZrΰ6?>4Fon~$#y`PfKm6bDT'$#۽xAP)JqZhIpsTol#e  LuBd*Ơ^!?q-"1/,&,&~ _%e-<2BGaTU-ҝ1ʾW6xFWW\{V6 {u|mQQKPԽ O5ة/i?UNO:+!,{w4+(oK 3t3h+MCGёr.jڥny<"wpIlG9B&GYe4LCWeN)78|Ku?+X􍝪j0ufp/(V . c<2J4-*w݆ͪ9c(KMHp .r%!F!?4;65stOx WO"RlLVULS1C]Tnm+ +\W&zӮA~ʃKk>6_ >kMc?/ҽAϰ)I6Ehk,LiT:D+ T}nR l_$(P2Zooo{ocjKlxQC*a6~ )}654&-ȭX.FEYY4 P~l"Ҿ XiG[?9֯ݘXo~ Aj+ćsoL~woZ4vˏ/ޘtWOa,b>vp͓rOgS)ޒevy'\|*XWV.K݋}>Ct gO7h57:|P'pZY *b :Ep1FZ`ImK@=yA|"vW0'UqAI%΍v E#?WGJv:H5w4|˔ 7Dخ鶈Y*NkFd2\XNaFvk,I7.lVDίʥ t3¨'~rm'R@5x8sA`|@PI$[ם ҉<ͪGoyG".L1t1EHs-+H!= 4{*7 /.H"3((b[ΥlNDP~>H|Ӆ3R>;jp8I/s`Mh?8uQs)SNY}ԢQ)\k> }:{؝ R,ڱoYYqېr0`ãn#DQȺ^tkq4i8y!iA%~U km  >\z pۧݞ*aLr\E:V@IL4werF \Ɋ~M#ssv۪gF^<&99l?T[C`b \c@NFB1?jHN Mu.}9Ԓqnڐ+B2r* x4c X2zzYw7ѐ~Y#ːw  ŘYRb)&; ,nK,2WI譭jW+gíʉRy_ 3 L<8ݙ#΋8MN悔4ղ`Rj}:s+`t0 r¨z֎#3zi,hԪI4@g7N6~ۜΐm4\P} lA] rdDd4H7"ԃQDLVűmx} Y/񂇍xN="tML((W#RNgyᅘ'*n'#c@[tn!gې7idPǺ;m.ʦij{暈Yo> aHXe~yyGͫ| )RI\Xǰ2Fi!`}k1ܺmA3V>o6 }!vGΰkqjU7LfU!hqa94FSY-UG|Rijbi sϝ߈h'CJ*:p\;G颚]q~B(|Ss"`XJd1.X2f+Kk*c]3cgCM[4Eˇ!B۟T׶[rR^ө?qoJ\|9۠,yZ΁a=>3i@֕pߢ@3Nyyuco~r +llzRDOͲ.6ߢZd$\^S