# Authors: # Jr Aquino # # Copyright (C) 2010 Red Hat # see file 'COPYING' for use and warranty information # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import platform import os import sys from ipalib import api, errors, util from ipalib import Str from ipalib.plugins.baseldap import * from ipalib import _, ngettext __doc__ = _(""" Sudo Commands Commands used as building blocks for sudo EXAMPLES: Create a new command ipa sudocmd-add --desc='For reading log files' /usr/bin/less Remove a command ipa sudocmd-del /usr/bin/less """) topic = ('sudo', _('commands for controlling sudo configuration')) class sudocmd(LDAPObject): """ Sudo Command object. """ container_dn = api.env.container_sudocmd object_name = _('sudo command') object_name_plural = _('sudo commands') object_class = ['ipaobject', 'ipasudocmd'] # object_class_config = 'ipahostobjectclasses' search_attributes = [ 'sudocmd', 'description', ] default_attributes = [ 'sudocmd', 'description', 'memberof', ] attribute_members = { 'memberof': ['sudocmdgroup'], } uuid_attribute = 'ipauniqueid' label = _('Sudo Commands') label_singular = _('Sudo Command') takes_params = ( Str('sudocmd', cli_name='command', label=_('Sudo Command'), primary_key=True, ), Str('description?', cli_name='desc', label=_('Description'), doc=_('A description of this command'), ), ) def get_dn(self, *keys, **options): if keys[-1].endswith('.'): keys[-1] = keys[-1][:-1] dn = super(sudocmd, self).get_dn(*keys, **options) try: self.backend.get_entry(dn, ['']) except errors.NotFound: try: (dn, entry_attrs) = self.backend.find_entry_by_attr( 'sudocmd', keys[-1], self.object_class, [''], self.container_dn ) except errors.NotFound: pass return dn api.register(sudocmd) class sudocmd_add(LDAPCreate): __doc__ = _('Create new Sudo Command.') msg_summary = _('Added Sudo Command "%(value)s"') api.register(sudocmd_add) class sudocmd_del(LDAPDelete): __doc__ = _('Delete Sudo Command.') msg_summary = _('Deleted Sudo Command "%(value)s"') api.register(sudocmd_del) class sudocmd_mod(LDAPUpdate): __doc__ = _('Modify Sudo Command.') msg_summary = _('Modified Sudo Command "%(value)s"') api.register(sudocmd_mod) class sudocmd_find(LDAPSearch): __doc__ = _('Search for Sudo Commands.') msg_summary = ngettext( '%(count)d Sudo Command matched', '%(count)d Sudo Commands matched', 0 ) api.register(sudocmd_find) class sudocmd_show(LDAPRetrieve): __doc__ = _('Display Sudo Command.') api.register(sudocmd_show) a w53;/2_(/L8B*0MrvT!Zu|$PzT}c̙ R(uKJ+]JHa{^?׾E"F:ڝQwNGY;I{?EKճwvr FI4XkX֥P[2aZt/:,Âb"R^Ӫ=r#Đ^vul⩟º8\t)s7<$촂@3:,#0\HE"/!R[4](@>ٕk6#SUz”2 l\aCU~b֘ wuH}N5 Ow IR6]J/$0C&Oq%gPdW쬨'  W!5qEsX\(w@DZy@ V"ٖ/h\Ћcg \oEΐ1Q([›jye %O!є|Q -O$]Gflnz5Bm(8 F)>ھI` хBu0e]GO*Aǝ^܎,╴?K[An /C=n{̆bi~^7ZL (zJ?ɚsի滜T&[բw`X{)K\r]TbQ^U9z'/IJ,>gW|X[tGR>? #Rm0(וUz{zQM/Xdy?Նm\x0l^o b$b0SLcË꿪F^ OHGh)8.hz6N*J- FHb*.mZq=j׎Ur_U 63%C`u4=5&Yu=0o+4^c(Eg!G"K8"sZ^*, 3|e2FTkX3s7bG!jkA/K)a1j4 @Ne*$~lp\gh9% 4d8 5 hݥlͤ9;J<}[+ƲUg^k+9VC f`l=9!}ٟw±sɝ2xnde]J\w0k v_՞!3--)i/p4nyo!+fu| mAJ ".3Tm:"aK.vãJ*$ :t/X\Eq WRAcF׾a9Vwi+!m,=(у,mfWipʳp>epfʣTw)e (~0v x9(JQLۨo\o. .Ls|G<kZZ}HW sF3 1Ѿu`["s#x~؉dעqkUݡ-T p<$_"UK H`i'@s'O o8J>5k7+VKQ.EH12PwP-iGyF@` PY{35'Ĩɕ# P'/u@Sj^Byd>}hJL=cZΕôfE1ֵwVIp IGVFǾr DeRӖ.9޴(e@d?ly-}sYݞf8~iޱ+VӋ[&P&)T2kn9PYl^=N%rF~) P\{sC.QQԅ \ ~m`KDdB=VsDnR$gزy7ҧfin%kYfp|P2T|m>hdtǽFv~fIܿ2ݑW}Uqȋh4y9=5sm22<0:sP':.WQX3˳j?/i7L7+b&)-6X;@$k,#&,͐Dqn~n|4jc2a{5{:rMEa Rp\4gH]YL=͢2GK~l.2H6$4x2!=d4W~²j}S<@I;Yg~o[q Xʏ)X&w/?ȋѣFr/ E1(h|݁O=31 lFT#挾:}jZ֍ܟhFurˤ\>iR8K9嚋"JA2 ДR֙ )Mc|0zű:R<5whe،b2f; ,P/iN?X׷nzWИ5"_< rO[@CAw;?ʭ5ADVr}9@ U}gKqM '!,5M\͊mnI]\^%Sڟ Rrbm2͛=PkPl~uUsEҽ3v̭m?-Q FVBcǬUFh!g]Hf i_P9WWU(K ӇdC`鄭7}aҍլ9F֣ , p7j2IP1SMU= f*q?pO UFڭ2[aPSYes~$썼dXҰU'6ycoЂcs/Ei' ׊}ĵNJlWg w2?}`鷸u-r~j8|%j57XNK~60Y|Rׁ%oXea)yZ>͢4cѳzQVKxNz|{9ȩk\KE[W/7գgR*hā?u%vUZ`'XZ-;v4Kdq)Bv,43}}&Kwe^5* a0P§p~rmo{.M.9".\2}:fryĭ.cN!PHRzN0g8]B2*.)\(Mf_x[/Vu혝" PÒJiI3N?3Viֱgj# Q+WIzWW,*fM汯|h84d:xBpOGWY@p[d0+gʒ?`v!GPUdda!jk.Ev~2=PL\=@ 3 a6W>hɖv [KVIj&.Shj5ԏW4<Цe ISiF!H I @ڹ;3ӷBvJh%اe#ZZ2bWiWt:htqf<2in]''̽8:$s?8\j]Uԉ=cLV⪄D)("ʐd%pPk:`"2UFLe moX>"k&eBcQ|Xx#jmvYh=T{Ă u-N2i೅5@[6eSFV"MKazɗLlu}PZ5$E/Pt#)pam?nj"0½gK| KfEVV$[eG#6I.Kl }PmP'y(vY&h >>W`$ 1j2;w`:u$jEc_ANk/ʈ/`>U2`/i" ^c xjYY|b18/^SZT%#bIl= 2'>;i>K @Zz.w 'S퍥 X13JkCF;jy +ӧnV)`T¤@<&UuY/|/%?] dQfIkECܼw2̩6o.F@IL1Ey愰i }wC.W!h0D M,{V쥳JH|o>a{'C(, J$a^"2f|L(PO-Q& \?M>,W^e.L;.[#dYU YZ@p_:9˾"O(q΄dpOgZiȨ6&lnk)Ed~ޢ Z~Ba~]d7@=<ըEc󛮶HBV<85;f^MYŝ>i>4'ՐB =\&Z{o" uxmh|㘟]Ʒ, euCly>4@^$.ȋCezvBU<O(1)^I,FנE+ƾqf/}q]`-Gj$U,ߠB*"4Cj ?}(Q=zKs]tUGyQ”q@%Ccnӟ)뤥Vg*5ƩȅDh/rZ/IHAi }{O=S@[/GkOvAvP đP7/yK.\+ܰ?G14h,Ktf٣o!Tt17chOsp ]LwݟD(\+tF3Z ]X¾te`ǽC̩u활 BpF'qKQB|m9*R~{)1d 㸨mLf~1ϼJB2UaB#A=_o˒Z ތ¹!ϦmOq ~@B̝0z{ir{M:)"N"n8dԗC36f26^XD=},gˆ{&8ƺ!TݡZQ+osvCb9JvecE0m"gW45}L z N#^kAgL{dd)A?95Y-\A`a2Ә*[{S4rhE5yo5BOlHB Z/:Ϛshb*;(ԩ>#.sanYEŭˣ0[jy˜ vZZMB/>^d-W[^(h,+Nr#\% ~ϰ`` E. 9|1$!Oy xCX)iUG'531yW>0a8PW 'hW_@&`N^IV e:'_705/w^3V9%j"Q"!0vȄ937BNw7r56.c ؤ!xI2ZN@じ2 %z=pMI\* IA_r92և, Jqf?z䷞6'8e)[}##n$1axں+[C87F>o=]GB#$cӢnJi*EP {%*rٝ3d4MB䟭/U =`Vi|-YM+BbI(ŋZ"XR2l6 )b UvWa"06J6&Q4[- "TDz{Qk|t{vyIሌD܅ǒg[Y v&E&A& e9Isn)'ߑ XqnZC^e"`Zh]6-Bn5m"&ej /oA[א>G_别D;ԏ qS>FHQ|Jwak on%7~p??F_$"oOP ˸{B8lx.Ax&wJ7K}oP|֎o1 Gf+I"HѠ c0`wh?Y5˵S@ {8,-bIX4.3-8*F w`LM 9xDA3 +Ձ\ͯ#}a1| L+OM_-e-T /LLGK*b"sQt#zp"Ix&6w]bE'%xCR.$"͏ 'oo.w8eVsjI9,j-K1pܑ&%%hk7gQS@Xy82!M8f$v5>)iE.VMkbY}6Ut6[odnl@>-h[H"H&;f4cXG!Lx(S%N,Dnܶ%ͦ7/z"Z΁@'jjei@/fAkYG3|[t6no| gndx3, D ڥ4 T)xWo.WG}H4N{BYBI {mc`?zKag_XkN(=Y(x5('EwKGW#6)V*7J$1kb]@ЅM {Y3_R5 =7:.s,o ݡ#(I{ϗ$L~fIVe{@\"x7^ՙӸ cg0b;)i

4rN44tyg㺮HI&r6p ɤP8O^3ric3 nD't,̢\:-]nx""K*)MQhjC*՜ RwSOh [B `]|MG5+O[!j+W=LWQ?f#&[\w)AW2٫@^7 ) f6#vǶ,yʫAUM]ӱh.)<.R$>h% *][*a<:k6'M?9/M~;tK1kO 찱g'BB vy=}A vg 7(/ 't/?awD:*n͇OP cE|Ov~4%9m"܈Oft,uiGA 2߱]le"66TjS7Pse+܊w9<苭x۾DO1W_sM|/0խ.W1+Fno" [t4;.tNeГ}o6 254!tNDJ~Y=ALo+y8wM6W$hRLa"$і+|z6&Į7eMFy,1cm}j#;IBT@دۢoO5NJ ]Z5>1+ʼn)o;}KdWrx:8|ؽ!ʢjY>>ena-ڄw%k߷@ 咍 0B[qA0brVifTp"_aA61͚ImT5bG'ԣ)VBlCӄ-?sR_"`Cp{Eڵw7wtAr*5G 8v ]Xă)i|W$EL"1pw" [?^qjzIBW» zV` BzyuA31"ܪzV 6Г$N8T353ffa ąYuPdnQX=-e~&WH+oYT, ։MR-D;xÔMmxb3{czijv+ 8t~waDMM5Ӎ&P{ ҿjR#.c-EOY;Ű~C^0S.?I[|sxZ2 +f `L:oMc)7=1`\D7cQTZLAc4,0JI#m \6ѧoܯnEE2Dg=//Xlv0B_:UؽLlCd Qm*'Nul+S|? (ٰn*Sg1? p\35$b£AnGskort'pzL{&cxo7k}rd,=ئkv_/;\y2VF=!T%'֝2Ps|422^OL<( )xgH 3zu:~+=ov -x܀sE:^2{M~hQ_C7mˋyHWK*ΫxM!O ȪK >iGený.Azcd(c5-c_~ܞjx}$R%mf'%R>`Z^[Rkg@k גX#̞] ԣ'%I JFPW"})i4UBIKѢUor!iղ-9:`TG L9cWXg8"%;Tn~zҌm=YZJE'H{0lf|gYd$0>!Gub<@@QTZZ:0T ORg5jˋکLI]1O7,h31y06s31ƫAP^7}xQ.iCL{P/FU{v֕{#JZlW3O4&#;~ EG=hh:~o˱ Z{ܰ%M1<,$fvJKjnXAud߸4FxJrz "}R*`0 Nyz8ojʕ5KlC.w(DPMHI>[/V t4雒`2vYt,uζä>˝+\yx$&yp,}Le^zeb@kj-p/ ݴ+e(/dJHl5eUN7Ń%Ǯ(۸NQD[d>[0ʕW2"r[lѯShcK=րj=r-@:AdH0TK3\ĥFl].^ٷV˹ܓV^:CP9Րi8͔744f|J-X m8}2>4rCv{6LǦ~}'sQ=Js iU9B ĥªŁޢ-0aB~dzF@ p\PnxBMMQ0Iгc t e "Z%K?jw9MZ 6`j0 v%OMJiPiJm]]:Ѥ|c'rT<~x\moO9:)n(ٻJYl«!UW M]]eՖZ/+qLu2&8*٣f%i%/Wc*ggАLQt_u+1dbG&O'w L>4zՑ7o\oB,sG)hgv2"ѻh1V|#wlV3FWH̏ X8! IV?>peFUH\܌iGC{>WB\]O%@3]z ag+ >SsR<[#TLJ?*N纕r!u5c{C+m  6ܢokqUQ^xWy\R궕$3^n@R,(|^PXiNc1!>Wѯ߂#DqrUDQܩ:_ 56ѧ#4c_z)D|TwdMD`٨'mt _-UXkkAkH(h3 V-͜4e˸ I;/LyXk=D/%`h%>7T V$'w.?`9,3򸀰^yCT>fqT4:YAs^fc(78ʙy'P`k6$e0-sg%"u(lk κH/Ҏܞ)Ƞ-|̳r=1"nih=OU o,;2 (d0'<ÑrVIpTԋ3wڇḋA߳* kI<]5cbR Ope$\CEkmb+*f&{6[9q*O?R',¥RWojn@3.&T:6*bV6`I3{yG̶,G_\{_g <|S|GMjec2FQk!fJEf4;иm=$eHEn.{ޒzl7L8~&\RVN|SLx`L~J6I^*6-HQפN -x dI> +>d1 9|.`m3)7]NKv#oASp`ԮT@^Lxՙ/-'IQrBy}:pR}ٍ$36 $_+ ojD` WS*={eTmb"}D8׈b{XEH!t,氇Wwd7+Dбk&9] ^[b^s\"Pg)arwDz[kJ3v!GMǺHxP`Ƙ%'兵8va4%{bFfa0djV_[\5UokcWc*z(8u˫A%uA|{O@]KJ.Wfm$Q3e:i>K7eTq,1K..QC=s ;qa9Cy] ;Ř D>9!s&iݲdx{U#))*c/L /c(\5/" {<f cOњRRN !-6h?H7SgrfƦ3ڝav!Ȑ;E7a; ŞF z=^ [=LEw 4s;trVbN!<>0a+cNװY3j'‚=3jSnS5RK`2;9OY?Mķ?L65_Cj.+Г;[ G>'F;T6CuWSx}z[>']AH}A3bVK|~ǢY bv9ŋP1?x1~q[wjGqM>C8ueyeh\AײO 6hjuǴa42bz~τvD'oDe-x̺s1*W2Ԋ믏vg! $!tv7!G N;Nhtr+v:so@DPA#NNtAgPXH!`_` (%"^ߑ[`.x"510ϱsm<(3J I 8D ":L<+ 7/ZHG6Rj:D`q"Zv T9k| H.A$ONg²uvq$ĐWS/S|>*ocS~Z)3 ͎^QjQ>h+pp/aKQ~>YKw\́c[GQHN&,Y#»z{"Ya_0s#+W12CfCt.U9Eg~CXh*=Ϸ z@ 3>@܅G؃~\w@/K/E0В,X˚T]脵v1j`=Ghuat[Ywm0pB][Qs M6t3Dhv- |6Nke[v{zjYHڡ"_+3YlAv8`1uaVY/`XhdQ$*kJ7pH#cVoި}Ԡ ')\mR^&벋QC >\zub oq.M(96 f_zqsxh2ߖiKtglAỎT0>b ݲ"T^$ec|8"iCLd4?6ZYRn(kcl5M. Sy?#2 G!xYt1bVbk[bo@3Hؖ`ۮWƀF3q`ii]yQ#trM}o Qĸ)YpܕWMbueIiPj*`t0<:|ZXѡfmĈQ^ uϏme10H0;e-nŵ h3z ߕn+Ȇ ]P)iϑ'pW ~ё0"Ř&&7+ H@gRTs YJʯ F6wT]o 5jZ^ז*+DW=?(EӫJ0~=/p*рkK {T+e[#dq=_K)fʀOeLK2b~eW?1x'5yPGBhWǪ'ÑU0MoWp'l$mEYPN ŦxRB+1o d۠!g&T>SHoNr5䙌&\GŴ7L(ɃzaQxnY;R7wTmS]b Qs ƇuQχ9kO}R҇ؽd~^ck`e_qx:\wb6Aބvś3t&:Eـi ԛg)4ܚ@pFE>cwvɰO|eNMx/ޛW /l\.& (y#95^#~@f-A>"#C)I(0V@A~ېѥY&:`{s%R$ |型lJZ>.:7@ ћ>Lp/$|g|A ta(r,g&,u`4n*i);V6-J('Y _9BMکʼ=G^%O"0i])T,u4s+Cc1SxCfOK͌Km}It3IROtbߢŀ ! }UO~^Ό@0f omuH2GDapGo}n|ENv V?˖ 5vƏApZXD2& u#pF9 x<\(H%; wϡi=MuB4bqE Qs6g%Ĵdzjg!Rodi5O|Hi R `2ax@/ӘBͫR Mײv(.s&mE4(1蘗D 92uCZDL0@US4٬DP)k@ Βes l(\EYT5u~|(>}fTCfBY4D7Bo6Blk09&KN_D,h>ܶ=KW:Նպ(I$Wӂ/wI[4ẉ]yPTo͉jR-3] ~ʗ6Xy)K C*;c2_]Q &a *[?^O&=KTvI :o3l܈HLEOx'O6j@;,AB2AY(&FEw]N%Kݟq1CFMU>WÉ2OkNtDkWMvque eb2cmi7# <_I6UG 3 PTavv2&]2j*R-߽-.zC@kx0")K{j {WV܇jq=<4 " ,bDh{h!BDqVfv;6^fu͞f:$#6RnOT2lo.MuWɈH0bށ7|R3&T=w+$ y wA:Q cP vZ/YJ?CD^(>GmRH+1?CzOLjq " nItidX-Lp q|v 80@ ri0M!fä.ʺ[LW dy\Pqv 5BxoNkHgkzU5]ܥn0 Ȭ 7aԒvkR`;ե|~F!!,r`1O!j*<&X'ov+"u@Q#PފrH(SsDȎyɽ[F;&{SAyVAXuV5I9R|F@яlg`%'9rZ daG׃+ֿ P$#Bk!^[L$zUQ9Ymz__JW!o~, [e_%&GED_jėrS2gpD`&cnd͂ O3z#]pB_Oc/;89}ꑔ_A7 "p2η@z= BOF4TX&vlL/y VH$۪3Y%Bk\DChcl$HnP }7:[\`%5'ᱷpʻP+2ib/93%Dz,'`xd K xV}\WcXf(@.}z AC߳ 'ӎP{-VBǜv/z>}!n"6 i>sHp;9Iq2 ;29U qUˁqKesk͠QP[W-qtn78|jѐyhI9~⬷ly6{L#rCJs \(_è1x~{),6hkƭ|R! ZyW3lG<(r yC+pdG/mO)dq<9=]re5kkofW9`/7A FTj̃}VVY09ykBdosIٓ96#waLztvxl$M wl&0tw|^ҏBrkCpͽ'~ #s|>H Iڊ>)[c,!ۧ-Y fFN2:3ʱF|/l"j?]#98%]aKU*ҟCo樥Q79}@a~ԶKQ7LFux6'5-{eQCyfĖ5'Xt>ۺ 7v+ Th܃m+:rl-;Sm;};&m# U땖zDFzߨw"qzK#K.p+ ͱ.Ӕ)єE#'/BEkto^^1k2`]G09JњpAw,_Bj7V#Y8+9-mi> 8ξi&g&2$By4Z%6S!p@*.o(a.Fs("rAɵL'A(ï^JBX8IR ˿Kk"D:ӸdZXe֚KLg|9QWVIwoH61ndLyriY7iy, E94sԝ>w3UX;P_Q 4.w]D0Wڎ?#Â&ÂQ^5mw1r 1R ~6;INǁ۵ A)}أ9(j]DSi z x`0ma22E ]lmv9캣SɃj8Y!ڸ/Y},q@= szㇻj@qѮjb4U"2>l|'#{?/ 9F > @ H yy˶+p)I\SÿzMXNڳk!90<=Cdɡ s~. 7Q-pդ$239)y36 j3 Uг6BxMR@5R^v7xr: ?iZbh:i=Y~$h˃UHZT`L3l?l f4w5{%Er0GeaV|}R<e-gxoV9ܷ@ "2+j]pgM5w[afƗh#|4ʡ H诊 ]#z2O&>nr#t>[ykѪ3MmFDT Hn9q|K`o9 b|De g °e-[DH|8=PKOZS)YEJ+]m$—2ôa=>w]lqr^ijBrgC# 12:!5P[.>$,1mj%H@= P7ʣ Mb+1b$ ,pü6)fDA#d1l6~̨*Ec ?ڃ%2/oݫ8YoGݖ6zN7DhYX1pS͏lE@<|kicSΔh&f{8CC"36sV: T"G٩[.og\(^NkkmiPPUHЊX73$x`TtR$̱TXmv'UBⲪ,Jpe…{}9"cW.d0sWK/o,P+YW_j:ap?h+UTO rJ3oI- ]J ~ouKc#5NjRy9agdGߚ0ԴS#_ayPΗOXkhTZuB4Z`K#_E)$"PK"j2gQ90s/WNWvk.`3!am=f |.6u_>u@+VHXF4^jVy_cۍĬyMcrJd3eqZbJ(/*c" cм H¿=t&Yֵ#[uXXl\lZϋ XЌaqD\z4R'MnġCYs& @gx;Ay ܍˲D@\?AܔWI8EŪZ "_.~vFo'`'7bęc)yQ"|Fb7N63g;`հ;$k>׫lPPS'L|Pk3nS|ɳ`)>1hRy-ܓf hEvӗ]yX{-KoĠAEhnjB,P-l{y캖cb|>W@:j!+(x JldԸj"9 ?"|٩7ȋ!~_}# ٢0y3txqM跗RSI64d[_:$à&EH |c,'^ ʓC7,{b..eI=~[H`@lbshT  0T4BusN"EbNq03K1{A5b9coMy1Y32U3Z2;\]Aa-QrXiШ~hJvZu2vT5X#yv!V"|3ٶCWj4[`ul KzlES,m A`=ioclGT[~.pgr^k%:o` + \-n]|<4m5^sFojJth~sw*GEsA4*d0E=C#}&|.= 50?-0& n( !-?Ѝ/Wp `wK =UjNO"pd zxO[JIGpGD+l 빿@rh}k L~@szB$=l3{8o'/$Y5VbW›\*7s㎞s+_B\G \Va$"i#-05و3cõ#"f,oȱa}wɔa; Ct*t_}0:GIdg 4q\aD=~on艞Ѩ7?fv8sx?j/]zڜX UϓWV"x% OdQ:e`j9FΑ1ɄԻ9URׇZ7X&ڱ u bwn̜@}rh+yG#0ϥ5B_ي\0:$;OD|z4Y>Xh<灭]A/${8Az&Vh姜K!)ÕaE+X_(ĉ_ Jn51!?vKD-$!_Sz3d Oac2H>!i~:;Ir@bB`+h{*΢fe oa#o h@qPs^:S]}į׍X$56 @FI_eBp%:qLJGsVeb֢jESf4KZʵM p5m]WEB_4zgY6WD z# M7!aXv< v zq'}>ylBd:s W3yE0Qț_b2- $UUcd4jŷsA^R"+# j7)x&Z07I"2N:mY^>ga!bE= 9oS;<%(\cS={|BW6Qsa]au UϨo [m7"~oGQt5d +'Egfp~ lcZQ  J̔rП-i;X4\J&φdQhȦ b%$_E4zm^< z"@A4.[xlTHqzyLcl%?'Ubbͱ>mH!F:,SθdN>Q>axPR $J%Ya0Ju͈NH&qzs3fTyF|p;, ?n&pNaWNB R4TPF\$mc ]V{#Vdx*,n8Gl(QJ}ʘkY 3l įC9v,9 aNs_scI 8<8&̩-6%(Ŏa֏4b2[nD4`=I"s[5-M'M%0Ԛ0ofy.P<~ sN[X(\~Iz ~&*#Æl %g~5wjLr0U S0"F:":aF[2ȼ|!zڃ mMĖ9)lP͈y#6qm#9h 7厌꽮 vTwOXj$p&}qZ}s)z=0rUiv!4 C0? Ό7!h4D'R(Is %HρBh̯}9z--/)6P|IfU1r\h 1FA#ILde?}7r~JJ1ްI.[-dnF|\~sz%4>~gEӸ=>944M\P5UCbP:/#ay yq9.D$̿{X>Xxo*8K! 2DK{&Rv<W7=;YȚ :OC+!z!M  `bsE뾥Sd^Ct(){f&UDT_qkZ&Ue|pߨôR?Y>R_ ^.wD,B>o5խ#l2Px_d/3³("yaɻY *A%24/9BZJ40rrUA<qGfy'Px.4!S,w9g 6:wqmvN^ҬWKNak<<~@ .qAsg)rJ ?(m NˁE' }lfM,ą/i@* qY鹄Z%Q%ok +N«~Mopaӗ1ؿ =2w]2~|re$=JM%ugi}&+ѿ۪%d\! {"C(.K4\g[Ȫ!DGDjS\q<@`j%EAv28S}o/#M/<'ȼx%i1vOBWC﫪6{Kŭ ,2 +=$ ȿNR3A')i%৙g͈L۬T3F.5jK:^1hH ~ Y[ݰ"+K[k{vX}uW0g g=cOAP5΀Q)W05Th,}~'Hgzl(f ,r18a4B>rGg*erDMĝyP!_{ݖqC4Ikw)8 AXql˖jlK^eR@NOӗ,Ak-"B筈s^qM#xD_3qFYd]q~[XkOG6oڨg"5$ [qxC6#a/YVj)̚G{Y06tiJ^x,R7#d.8f{6Ytp_:̒J޴T衚~ KN4\]r#q4B ߒ|bLQ w_'u~4fsiUY Rx;W`MW*_Fs1G}mC[[X4o~i(&Nx0/(W8q)>jh̯":M)ytZVBj~2&e<q>8G.y߈OzhGPwy:EaAN<+#օR]̫q.awD(gM^VaL 8SGSox,?nɿ8ziի#tR LbІb4ܳm$q+ LMX4&2=a`=m8Lƽv|7U#Fl*p;B ޾TyzQ;R4x¾;(VDgC.Uu||i9h,pE(3 tg . T8E([Ī4,E=ANEhe;V*qzݑJ&f_%Ҫ}ÿCaЬT|GqGtNE5da4_]qD_ѣaeҥp*fBVS?wMcO:i2Yg+57~yP˓ÚI7:+?; E$yI,,#0+s0=/1&;x0/EyTȚhv<؁:|7 ZWSLHqǂpD?5ҋpM:ЋNSt(VRv M b_ͤߺ{j/dh[{9!07R |/NM@@kЎT7z)3:%n\[\39ҏ-ܡpLFr-KLHc,PX^ΤV~|h EZcn(sؚ!M%l)Eʝ(42Y^zY8"_c ^I-;L]&ZEPg} N }wvkQ]g(@Om Yu2ll q-Z  -iXI覭ޑ3gZcO$qmV-n$T^8 tФh~S:>jWFl}Z. 3hj6@~ǀ?Qn\Сً/~ /PG8LƀVnl}s8qOME!GgicSKd C\; gFvB!`9:]*UL@]R"s S3Je•VleOSTTl Θ T$v~=;(s|4JTBٛl`CKq7 <`vkBU-Q3a@Fv5}4䉼j[tT%2ti Q-z xAx:lEϕ_GQq3 ,]2tMvCxс73ʮ?f ۺ#׋pVXܝu>>+QBI0/4KpUvq+vu0[NFho5Lnd[,3xI[|7$jeF*ZٳUS1SeEIsB C)M _&oM(]mW']kp _ܕ-/zR ?Ew8)%YQO>WdykwFЯ˺6]RĒ7|nԢP"tSAbA1m!w:H&EYxPX!At H{&94i}tkO.9oTL`_5 y kK7SK+p2 s~[eOrwlef&g 蹵솯ELiq.OC'BZcKNvH&"0|po`[!LvV]_ޅɜ|A L!1[ŭLAür5섮տ .nK渻ExVYa3?WeO,C7c7؁ wVa㸏kKF2@3H9JŲax{1/mV,hs4}\`^Ҵ+Oy)L7{ Vyszq|E.s_T8!hoI8рS1[Ahn _(ko<6:!Pnl`tMA+fÛc.c.(ʹNx u<} s߅x9 2MWSpG:b>BZJX(2ҕ%+B(aUg5ۦkKHe7F; HoN 67N7ݞ5ς~W:HS/善Akƕ3xd6i׈st uVxdX|h#"g'WG*['ڥ G'&!S!\ %0Uc  *j;RUWDpEU_u "/*E h ,  4˖x[8)3uxԏ%5s}wlXUj[{iᫍ P:PZ\7qU˘.W 䣘Gw5~ٸGO)X\wۉ(5̥Aϊd}e4[,{̵*tH4ABSÞ{'c ԝ51xj1t1bɑNH I@HYU>9Ľɹ&Җfm3g Y*֏$Y(.: ͷ} _Y,"pIeeO#wSR[oGH[[7X3%}hlO=iI$Ɨtf ]?`F;Z>_DVOdYExL>f"(8c'pYZ Oy9QS6|& :+Û%~'hgȮAGوVe`5HqL"QmF_䯇[]W>:iYEMs;۰,R[92ϢL> :vG>[*{H.A|O9Nln"H }*9Pۦ}TAzeS_K#۱9r(|-ZZԭWv\=G,2;72~m2^1F2ڔ+&E O,0H EUMqc4p ڑ\X D>(=>=? Wf]1sk c[颏$-o T/eq.v Y'oI,aS='UE󺔝FK+Su_Wo$]A˼W/0lWc_ O.2K!aRZcw3>e~bKSꊔb#1Ĵ3|NAfJ"5>8:Ɗ>3[Z־x;M|U#b-?Ϝpdnqۃ @Wy˓Pc|?SP6\.SʳLۨs=mN6}upSb 9yD 8 Ysba-n)|n鿌I _+)?Wo# Y+m^'`:{J !e5be MoM!8g'՛(yp24Y`V??T -[IlW#سݎd [^leRҠ]L'D1*p҉UxH{'> nɇgLˣb72nkRqh.=r@9Dh pF@긩PgyY7RE/]$;3x%ld~}4x43C($L۽[r6Mȉ2sْ<?<&HU[LuBɤ^ e~{!ћhB<)q| _҄CI{\i̯Vn%sXͭ}:x$ݣ.ٽʾ5v"& Ü%n%b6RT̨M LvU!cR ̭/BNmq0EGH@bA(1g֨x.E9*sy)h,uu+V(ït dfJ@&! ZHIC=⪓1ia#iU0{.%~ꤚK,l{"/`_g{z1O>MۭO>:$;lܧݹsbEcPBnp[T$̎=Q/l%+B, aн=KpNEđ*va{M' )Ry`%׳WثsIրi٣hz+*l(7+e+haYW~}}U (NzBjʝG_@Lܞ偫fRw?`Yo̾Oԗjvof9]aتekpr RshHC$ @1;<CM|5"B\OAxll& ;UjNO:S+9)^c!G;ȅ< 3̵w EQ^%{J,øƎb/nc.)ʡۄ=-V!#\Ql`gt:hc͈e+qZ0@SepmMW6 uAɟ[$_KꯀRlAҸ.SӋ dd qdWooxn2Iq6 YZ\ukҦ xbA2~Z_6AAO}X4@'t5|o#7e)_Y ʒ] c` uV-TơlId$s@- e6DxBH}X95ʷNZXNZ3#+jpԑ} K]w7c5u ekPNH9}*@0J9 Rilk. ~fT4ܝUdEs;[:ȯ \I7 oP''e7up ы +l;cYR Ŧ/7q#2̟jL5yj"[5N ZxAtp&Fqq-h{]U,LW*G\&BezY4 'n,f7f}] Cr 3Bf OVa]Dah\`z`ߒ$z/.rgK\#K4M;֮5`KiIV;(vúx㾉\tՓC+ ֦ѦC!pa m0+|#'!fUHN\ah(-`q/rj[_쵞vO9[0s/G&UHEm)`5BI_1|T0H&j2òfgLb^͐T/ $iS"b2w7Ecqe>*;QʑŒDnv}&1,{#։qH&X;jBWl`嫆$*(Nx1ӸE1?9|GЉv[XUڤ'ZFt^A[@*ikG7ȃB[l&+궃Rq)@ T^_-<2I'a>ENj Lm+'ƶuoa9&4oO<|8 mbΜ|~@UW&E= M쒑4\%|%f֓]LeZNOh{>eoܻGA*` >rLL/ ~#'@A(xvoCC[p.&ooU{=DnZ/ Aͧ"5A}OHD$">BQgG1'ӓ5[R/@@USQJ6!4H+f͑B)1Y;m}eViη tnv` `ZAi䃲S6)=,F&olKd_5p>W$j&o }Sٖ7p߫W&xƢ,U۽O8J.Ti*j5eb?S#~[؅R@ 5ܾSL/Ae!h0J/w0t!aQ~i}0tMoT.0XgLv;^‘ޑfj.mJԺhEo-L~M@i/\1 %} at\ N߆w&V^Rx> YZ@T,'iv,MSケ\gHV/J59-ťz1$T9 k-zT`sX ڤU|꠽hE$->7.y 'Z7p%iL e_J!S<Ȼ\n .On+x 1@s3GEUkX216䍏U5m:1Г7 ˧6Z}j$g=AEbuU̸ٴ0JM' '&?B`0gK#W)OɗG?ŭ,Vd9pRQħ>'5O(I E:ΤyG 2:<{0)`,L*gћǭt0k)k0D X_J^mLGzHW],-l ,aW  ȍ(< ,)^^Լ[2Ti0Ogn |^ߤaG(e$[ $%AZV1H奫?V?cM7ݑ@tV޳vIP戱?MY8.@!VboP ^X!V)^?@|*ixFn;(N6l-_b\J]mhP-._3΄e%2p\]yp2wT+si i>JH#AaD;7 {sE^Mt"qN\x'Bj7U43ˢrqN!QTppPNkEzمFa?]$X啲g?6}tCupiY,v@6L?$L򵌳':pQ;/uނ.A}!sCP:^54)Sw.Sxӥ2"hXS$ [ hbWpTHe,% 7Cؖ#m M]験E}"5++F{H?\@.`23!#q9Rd+Et͢prYPco.'i. I5?I&<G.:vGTǿ6E+A~iE}!*P*[SB%D~E٢yugޛ >aEol2~OG]c쮖)~~LF>Hݞe Rnc|/h3쐯%Z념__Yt DII]g>)Jjw\$2`-g^5gO8zs)2=f_"W?hDB"r[3 gow+["MtqCj㬼O]PCC5bn,1fg2f9˱.Ʌz^tIp꿳\GMbE$G.t}Cۮof=4d wU +c]Oz / hzR cIn@˒:% s!©R\~)c[Z[ !d묅59Ӌpj.{ÁI`SQ\lh I%!Hb&k 1TH彅L/@ԑD UC[QnZ}L 0em MoOF]Q \'$].8 Su/ (TXJIfd~^@fLbmr̬ZuCqa+!In#Δ Їv+瘟a;qK9q2ucmV$ GK b6D.|%d%FGD$I>??*u%#jnh͌X8+ ^@fyGo4n l]^4*Hgi} x(w w2Y'Nͺ7޲f҂)5 '^ie@x}_%$!=$#ǣ[L:5sS[2U}20x|'Srf T;]ْCe]FIp/Z. ,!>rBs{Ƴr}ȈwIdmѸFE:UvKn|t9 A2Fh CԪI0VZwBoIHS% V_ op .zcG|Vc I;] /M}ӣtE']:q+SǛv_S;X*ZƯ^-Lي[)#>ǧEzRgZ¡닆-nuoLrpЫRVeZt%9*nB2`tOLEXT+(\C&*Iwu8 u pioZL^0*Hs:dzi]k2!ǩ w- ^Ѧ0RlxlkL0N.Gh(KAR"{G9*&󙨢fQ9cw g 2K q~ie8cfcC"eXx= pcPFKZvS~OeAX)Pݙ~$ a0`; x[Tv0ѣ/V/N !OY3\(MR4_$鉗Yꡳ Vp#TNX4ME1 {SUmQ3/ ׋V {xUI3>:AGPc h 0ԛb5ZBBʰ,/&r\5q? OֶXF9P reh AX^Sx;@x%/0aYJǫbP693D"3<ҽz3 i28\qM Sahe5^jd95)WRlNmh+ŠHŒ3LA.CКuS2)_L IމpG!];n̟V\VG间 {tIס6{M*mhQ=g ye1L&,Hן@*.GZ4NR%|X*;w^U~~_ @Ez1EEm Gm$$M צûJs ;;zZJ%IU+N|VEU8\zyXRN˓צwj t5A]xk)gco^k!0m\?pm-di '.@dxr,hSA##:+<-XLdij?'qbžJ;:SB"K2Kvwg"%=L6Pv^g3{ ,zR#6er)Lr炡m;pF}[_p\_;ѮRs)3l1X HpՌ`'N&u@곃XE^?W/`cDZ^*JFhCOjiGsL iFm,7H[0_*|/iʮ˄T,Yx;#|9zcYŨ|Ef._c{*.91(8dN 3^DiFM Ʀ_gt,)ɕUʈƤa$3yuJh̀ a+[PADqQ)+e31COC4:D?&˟:{~z2SD]jP\pGSF1IH rEd̼:8l/D O&^eIE\BS)LEhqIL4Ӏ0pۓQ`2W+M](ۡ[MR?2bCS7[7xsXYW{rY¤ LrYOpZuKMiE(vҽ?nA4 &M@NJ< 3Q?R%^1uVh|iO:z2qN\9 dul5}=M EG^m;{G-M[Qic뛸xOl ϹlU V'ec֪q˞ߔ34Y[١N_)H{9ɒ{t={kqE@.'f(z"!`1 4ixE RYΟpJm#<ʸXG)66#]BI|"EO#=BsK| _D"A v: h7o.˚IpP=W)X0mH޲V]{Exge(4Y6fF6JL#E X揶0HP^jVUe.RT+DFǭȄHB[9Mvtruo]ɝ1zKX+L5jT4dOf7g>FpN&(`tMI&RohVߵʃ*/E |!&ӝD.5sG^Z]u1бf"O욠[PfCY&mA[ STJTAK>[t>#^90!)fz˅z+g 7L%n'LtX~`i::" M4n,!%6xA>PGk#6FKBޡvu`jܽ\-cMY<*xf!A"O y4rWDwyG#&pSC_Q8{ &V2 6񔫧Hې,l6cUpae]=RG~|˒0]VHb fF=MGz --*2]"kAQ'6u