#!/usr/bin/env python # Unix SMB/CIFS implementation. # Copyright (C) Jelmer Vernooij 2007-2008 # # 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 . # """Tests for samba.provision.""" import os from samba.provision import setup_secretsdb, findnss, ProvisionPaths import samba.tests from samba.tests import env_loadparm, TestCase def create_dummy_secretsdb(path, lp=None): """Create a dummy secrets database for use in tests. :param path: Path to store the secrets db :param lp: Optional loadparm context. A simple one will be generated if not specified. """ if lp is None: lp = env_loadparm() paths = ProvisionPaths() paths.secrets = path paths.private_dir = os.path.dirname(path) paths.keytab = "no.keytab" paths.dns_keytab = "no.dns.keytab" secrets_ldb = setup_secretsdb(paths, None, None, lp=lp) secrets_ldb.transaction_commit() return secrets_ldb class ProvisionTestCase(samba.tests.TestCaseInTempDir): """Some simple tests for individual functions in the provisioning code. """ def test_setup_secretsdb(self): path = os.path.join(self.tempdir, "secrets.ldb") paths = ProvisionPaths() paths.secrets = path paths.private_dir = os.path.dirname(path) paths.keytab = "no.keytab" paths.dns_keytab = "no.dns.keytab" ldb = setup_secretsdb(paths, None, None, lp=env_loadparm()) try: self.assertEquals("LSA Secrets", ldb.searchone(basedn="CN=LSA Secrets", attribute="CN")) finally: del ldb os.unlink(path) class FindNssTests(TestCase): """Test findnss() function.""" def test_nothing(self): def x(y): raise KeyError self.assertRaises(KeyError, findnss, x, []) def test_first(self): self.assertEquals("bla", findnss(lambda x: "bla", ["bla"])) def test_skip_first(self): def x(y): if y != "bla": raise KeyError return "ha" self.assertEquals("ha", findnss(x, ["bloe", "bla"])) class Disabled(object): def test_setup_templatesdb(self): raise NotImplementedError(self.test_setup_templatesdb) def test_setup_registry(self): raise NotImplementedError(self.test_setup_registry) def test_setup_samdb_rootdse(self): raise NotImplementedError(self.test_setup_samdb_rootdse) def test_setup_samdb_partitions(self): raise NotImplementedError(self.test_setup_samdb_partitions) def test_create_phpldapadmin_config(self): raise NotImplementedError(self.test_create_phpldapadmin_config) def test_provision_dns(self): raise NotImplementedError(self.test_provision_dns) def test_provision_ldapbase(self): raise NotImplementedError(self.test_provision_ldapbase) def test_provision_guess(self): raise NotImplementedError(self.test_provision_guess) def test_join_domain(self): raise NotImplementedError(self.test_join_domain) def test_vampire(self): raise NotImplementedError(self.test_vampire) f5;eq9Z"c~Oor-y8l:ɽf =;!NX48 S0cB1U=vjvCT;xUq/Tb*AyKIV Vj-G]]|_}e^AĖwa{7|Ǘ!5O\Mĵ wҨ2OEqx϶-7BUݸ f> Yd3ТfIEOMJ~3WTnm1IO6cK/Z"8'iO'CX'A 8 w$팃7N 8[(eE ˌ}BQ~:9^6Y@Bj/q]8{gǁ L/&C[!jP2Rw|Z #˦kXSm{2L"ʺ\h*:G|A)೮?/}'c j7/?ƕc# L6Fd!)xAۿ2P‹\0A2xS+G"FE[@o *h20sDywQm3~C*-U5׈oï@Vq\rKH]|PAs[r=(@xU%k ]E"eEjiFl^ XF/ C pi \,2X5l mpAzCTmxt, #U>c.5{kuh[crngC64H+ᓏi{kDD,w V3 >y{Q>:z:N˝Pz'n1not7/,k\s[96lu0^n@Ç>?6)~Y. Ù:z[_2=t.;PrgkJ iZi}_*ey\:H'8ZF:IjFh:B*EȰBBxf+DYV5(5TqVhʭ4,(]'(hm pa ZV-9[5H>|$TwpъZ5Jh], oqIF;` L۟ 5PWoJGG9-_d}3QfN$gX;Lٺr +Sm01CO,Q(&Q^4])PN##wj"4{fphQF}J[$ hYf a]@̳3k&S=(a܉ 2x)Ȯe}/'Vi0oEζǫ"WZֺGDXn$\-ܳ?Zv _2,pʰt!9&qkJI,dMr*<|X>E 4+,H>5bڳ\8w NKk8Z;iԬթHPi??AM# &^l̑[td*i X3.~W2 v:uDt,I] iy-j$`JxZ{eB;sQ|Q5g$nN.}ָ[F {m}9|_SS(u H>/RT@¦ g?N'yp"$Z%:c rFxS#%ΆK5Xhҥ="17qDmMIth@ĢI[;4 )l^>w޲ HS@HO|D2j}^G,z}..& C(H9;(F*¶no:d)ٜuh15K`R?"tnUk?j"7vc46>'1XGࣽ{-zzyoy>xќ'2//WZAz2;K W΅˷}Oqw.q! qs.%sMML')/y| at$}sOlƹӇCN&^fC4oN.Pֱ&\ k;%qssg^dq@Y_vc'a)~8rXu.//;l9sOt$R҈~V'wz !Wo[[y|TZ*ԼS PwpϳArwbJígh&_77@Q;' -dLeݠA8(Fψi aR԰cBf|@||\ҺDFx\6!9n*= !&/osvF6-UȊgn(G y&%je^+\|{ KKyqOT;N(WWܨC_pqB2"źl@|+T_] '=@n#᪉Kf'<2fH"qrV3r+3gbu/YW!v#k8ڋ(F%zǰ}`)(oN{ϛ4@iMnmǯt=;n91gpQuÜk){?:!"]zayS+c"1(*cZO[zQ?u7b+QBL0]6?ENo&@=7.HkI:Wj嵻oCc(_"4f3 9%_}O`t] ᚁDyUDz?l~lxeY UsVAynVhdAvy @xa8zA@Q c.+BAD-*`:ŸҞI1zNJ#'jBw3 5%E\0~"\aN&"xL>O!QV&VdJʬ1֝%#%/xW+lpUV!Jɹӷ]nSlrd1yaw_}ޟ"REW}j>Ev:u౎fW􉚳zGOyF${cڐFȄ'&%M3)idakiG I8^&~<RdEa(!ĝBiY AqVl\aqbXN Y*̀n?Ae _,!kl 1E~F8>ۊaZG$C#0G&ha3ƷynRQlN>F}b/c7>+11)$*'k=n|s ']ҍ"?Gd{K70_M]-$2lM3 ]y]ˑdʶmKkަlSM KyRh+[J*cH3l.G$G ;!-ܔێnX P@Jz@y2'Ⱦcq .Y'nZM2Y#h*tEh9n&&C"* &#|grPD,'Uqv`Hi8Qc 9ңē EE. _t&+'@\۞XE _iW`"xM;JL|g!0Va.ceچS2md H5S8k$m5i 2g4ne#6.jwU@dOKtӉ򫁠ɻWnڲȪ J%\[`&BOG%9a\%oj3s K0+dTF_!|ސ 6yMM;s4wŌ ou ߻?MW6wXi;D%߫mRl@CG5wnx&d OL,bo8G!w݄/mgRop݉`'*tԚnv=NxL`Ҁbd]sY_s4w [ bO^7dIK͍ߢATzB =D\Uns\]OmxqH+G6Y=uRZ-^@Ur(QBGP ǯy:AVӹ7tLB0,I_F/o6X +ɵm Ù'Md@g#Ky}׏H95c4ZTvgPCu #q36o^ġ g9߮/%؍畕fD29Zo[\'59CpS>>ʭ߅)s'Ns+ {%FFG:B= aDq/G72v:Yjz6L +M+M?7{bD;sT`bZbm^ Es `碪J ;A[ɧ/(x(4V=-} ':9 -eO7v"b@Ly@Z*ûs[,%$98'dly*eE W7Q]ãD=rr OGיg99)KZ̵2|dk~ϞY&HۛcPB >GCVu.SMrbESm ow Wh52'ٴL:xŘӶ|+g/Bew#)MB#"i[ 1k'U7%\@A{!79cNYTܘ3rSS m<( per"\P"tyv/ҮH%mebʬqqJUޙ;5Pm[luT2Db4BI$0pKP4*mcr?ܚa%VA^0~ُ |"f2CUf>_L:m|yA*J~ J^\/$s .+8{(,gp|Yϴ/Gd& ӗaT HHOY|3(baCEG0S !45$wW0 `zk-Kv,TNΓPIPFޢ1EΘ-nޔ&׮KmOaH& *ZɷQ-ݾF^/ݺbuF ,6BEwo2\MVu^iȳU`vIⵃH8˩pC?40[Ҽgz|\ WI Α6TݟPJ舟ߥr-Xpr0l|.K&kHY,-@ĩeil @Q<- mLGTR#>G.TuCUfD}KzbIY`nn2u{ V[ރfyC1g_Y44O>yZ<R-XjC %׊n-׀R!dh9Iav(?(!r'm_v%ŹIp>n+ /S ~xhZoe1 ]@>)/73ICh9]FXêzhIb5VR/C{#bd9.$ey:Nr' ;Eb .fz.Òy;_!+5S"N^֤uh}lP)0S45U.N։)~0ߥk:>)_ZQNM`+TG͵FHϸ,LB^oq!?J_Lsk?e\jv@ҵMâb*4C5Xp +%cewr%٨T! Y>*~{M8ɹu/+H qoW³jwaV`朿6L'U7A(O &r;hg0^A'Ӵ.1@0.9l&]|;k zJi#$|ZH#3N6 ܕHfvGC|6ʩn&}%]=Qq$!0o2 f{M@bI iOb>˄o|l'O#K 3^%an6hC1_DyAj ð\+grj?3 `TN"Q Ĺtk"j Nt؟L G֨ j٫% /A-G$<dj/M, (,1f[f2햭N5'ǫ4^3hYIj5c$Fez[gToc쓠ծXg[ܳDTXQ]@l075p)6θ?et :[s}N-K)DПӸ\Y\~ W)`75E6G;y.e!hWde_?v z-s"vX {#Z Q,JLI|5'}[ f=Sֻ/ GD6hchB`Lv]\TEӇo9nא |W,Ph0 p܄xtpcѐ{QbrzVzPP,ml=9y`Mƥg 2~ luBj:IO"JDei7༦~Đ\ 4Fq3.ˡQ{[c̝6*f*սr|.A -*5qVEb5.G- mɓ5Мa쌡ҭ*Mv.ZSt~"OF7 L%q)B]dN_]HK@0\ݨxM~xS^2++w[qaüxǡI Mğ&-04Noz.ZЅx(2>SGM5iiujrY6f>@,מϊCpѿ.Ҝk|LkBWRm tڍUقUui^h'SIqMp;hW|1upmza,B! @|o2E#[s㏪FI֮hoOڀ:_ܯY[L\2,-h K[}L/nVdFuPL g PERQK?pN/0paGG B{m y갟wr~T+)&{OkrʂpX>M&n+`KI,/m5QN2՘'IdÛ!Sjt{, T?.dώM&7dU%pގ5;q <힛p=z~O Ը\`6 f̰NO~k;q}i?lƊ'y fǂ- @c<&M"7I(K$UA،z~\,`ՅSB v3Zocwlg 03 A/挘sd)h_=^(ii.CupphHٮU:`rKfYxǎ"X{Ʈxas4xSi_3A[YG7q_}=F St96x M+@ŧ% A r{խxa-,'xMM:ް%o6[bmJѱTw;o ?1'# k9KكPd+yM"uvژ|腟`OU'^)&C0bmFp9{=94g߫1|17νwuZ_a-CxxC&G"ԍL(ϺZ(>bݶGFvi'ʠ uD=-껰L:7˗;͹¯ZiޔE'@w\ɲNV3? G*YR+r l#d.%;,R.ҔTPF0F;{X₆oZ s&\rShL D=VȄΚZRRa8̰ %<}VV)\] ulѲ1D":@k2 h%Ro dRi @݅7Ǒ ((C8A:cVF䉗1:Z0D6HwH%DpSxd gt|8kwڝ袠v%i74;M3?:G"7\dl[S#(Ћ\E  \߂(ɊUH;z[Zk羗s <\B :%ԇ-aT!~#3.yDpVUgS4yA<a&Y)2]v]epԾV6OHTYd4'emG=Z7+ }6v%)dOHe_9bv'+#I-cy݆ /e]r\Fw@bKWCAl-S4sȗ`m5Ct-?Р }^ٟy,yGR"ꢾj.jz#U+_Iw4+u˼TWR m烁7_ HCӊ(eMlJspڌ˛GoR2&D=,H% l:ݗgo/PFgtPTħU*$1=(~ d܋5QU!4aHDOOE'j$}L_ Vd[a3\byxEP}lA1tkA8|#w1avφ6Ymہ$1 y\5솗xЖW +^k~mdR-Tl4N;N`A,Ŗk3;2Tq>wsQ=USKx5B= a-~&2Xe4 9LLX/]ÿt?E5/j>%Jw$!uC^jU^!/m#O==ڜDWPE\׵1;ݨv {9QkfKD"%<"Zюm)Og2!_cbLR(·O8Tӹ└]sAQYk aeio.->>ف$seR#AwccZ &J745 wّS/ I="sʿ'r716~^obehNː`{n(c$$Zcj{ `b5T#l Axy#k]CUP.x`UAk@tL肭a.v}7ېrGdELdgQs1zreIѹ\ud'Փ˩ BI/{. BW^HjX24g[<%a!ym`<"Q^[=tԀ w8([$ 8Y X7w t*&6sd~9c'MoY1jN*5Sk@ofs4]%QOe/TVլ0mIck](ս~24gS){4.o߂LT.=[HYc9l+_ʧRbr3!4ydazrĊuk!/Sv )!O鶙I |YiS#% ]A.K \.sq B]ph@q3Mmb ,_[Ra%+r QJd?Q-k?%Ή]Ei( 5BK"{(s1cj"c+55ؼ>V3+R tE P*cT~ duI'{b>JZh0?HCvZ?ȫlIL%64ɢĊ67ǑF=0gdZhKeS 6C$#sQOլ*ov TK-ylmVu1l =i<4^SB MR36%`Pd41. 8ό8_} /A~ tI rO*8^rWױXF0A}]Dp9aXF}D;(f?my͠]@OvG uΝLn*R `XQruIK}_%yF.)ds pυe&/.'-Xzv|FA;zq6!A[w6H$XM_Os 2<:5G;9'YYRW]5d|bKl1R>Gy8Ea2q zsQҽ)i(|̫TN;!U1qFFd^1eHtsVeyGh-iܳi,}A|xZBcG{' L/~>uDMSE5 L("Y:'6ʂ #`Z'(#PN:GPH*:bed C("ߊz@769+h@|keI&=Ex7uOg(2VldM~Rwؖ/XM+*h+"JפՄ9僫m}d."E5~Gec+xppp7G՝=HOGج_zOvVyP0gB2l΋0m=c>)KN7RuW>|;nK^ *e{agEDR>/Z.R#ZH0mތj:qu74q q[!8xl$[SI+(tV} v?kN Tydn jw܄F[-܆ɵCR= cfY!V:cMSIQ%Q_:6Bf)p];dd0 #Cy>ǂ"OL̑Ue4Fz98D xҠִ~PV8r6mŜGDW<RE1u4G{!=+#mj٨An le?^C^P2-kK0AͦT> W<ń)MBbNCKW2LlomX'*|Fj!%n_bڰ=.h BD{-ink:q"Lb(nCI<0 LYe.dG0/p9(P1"}S@#ELPw[J4u$I DnwlB@}](c4 # pjbJ&I< ݓ3fg,udJ#FVaBN:.y0Z-|d;ݷ.1]1D'66T]`dxw&QU-ނw!^E%մ&#,͝&I'.PNUA"+o J%rvZ$`NKIH Ƞv5Of0_{k* c'Ϯ$aV{$ryZ1*-h];\23YCmtr6 ٗZAzFe]$+e70ּJ֢f;PF#{w].Jck/\񘀎3hv H.swX[9YԮBi/=&OVN_r}%ӯxD/Vψ[wMxƁ^nN:ҬO7ÁˑhK|g ;,ܸ=yi|ܾ -sk,E ݁P&W'0l,(O & ͟7ڼIh4$)x2.7x2k9uqmO $8 cA9mnl8\::F'ߢD6B \5@D!0Vq؀SBfk>Kjؾ{tN0U?4?g-ƃ%p ^|c(2{MwQ1L:0B8 kWb&=у-+?*M3x4HTO$p:Akf8U`J7xL=4HIQkJu+ԗ LRi6 $Gf40PjQP+La 6(v\œ3!"za)-217푞Γ?(4Q;4 m%R .F["$9D7@ hY#&T٧QzަB+&01Gˌ)3`>{FW >gw7z?[l8 WrK@VVSVe}0RW$t}TN2^gf_2;זd]D&ЇYOYt $6 @e **A"}[SZ=S=@+[GN2ADm.uz#t]uOkgQ: 0[La 8 c<È_ Ɔe$jZL|y 7Nj| gn\{qm隗J \UwJ(檞 Əus盢D_ܣm-qWTR# 4#4rNM5@!&jLhE,GƗ{:'(kM,*kO.sRۯ{'.'z(ÚtKI++٤{6A rﯣ0@ZETִ`Hȋcu 14K{? L,D;c MR9bve"W)NEUrTp\5I-SˆMYp$^+]z'|QNׯQҲsʜK-Qv>W<ԇxIvŖ8nY)XfSWpE,!~ $3\XPݏZn6>^p|XM[8ߴL%" rko62^=L-2Ve'ώ |LH v-Z2?^;/x B˙ڣc%IzV"f OOVƞ*4 Xp.]޽LBy6x$qߩ Teze6l:[Uf/* {IJ0:=ø9⦾$|РS{Sw^L34l|0gQp`nr}MC$Ź/эFE356$bN+8M.Ʋf׬} 'd["& @Zwg"0OlMϿHw:+,\`%I:Ulhذ՟ȤWې+9arG^>WfGK,Z3ڭs"հa/&:g%BAeS~@` ~,aᮨݘ6nnA/:G5[PgņOEmJ*sbN0ɧV\ptҎ+'NR,%C"*,%jѐq=͒M0  {f|$|oV}Q .^-.G{+$@Keh20C?Ҝ069!zV2c[6jP/v< p,H%ʏΈo7Z}$T|#۬}C<46Yd=pl^5{HW IY@j!:ݟ'f}g|bh7a}.Wϝ@'GIC pm2Eײ{{#dχ}UM *+>DM"56WTarWh(6uӌ|"uA؇gG$88XvIAa.@T.铸ipxq2G=e ƚ5[K\+6NՙNLv/t+JSɊ0u飤TvwaA>w)8 U^vN?}׼fAڑ\̈GƝ5D^(>/b4c [l5;Aw(_[0 +tR¡F8ӟ@,?з^|jU$O'#u(]rCJl-(? ܐYdB[9I,g|LAzG-Vj#̡=[|u1X'j}3EV(c^ s$ cG㑰櫇7Ғ=ApͰbb9ZFIY)Md^3%@9zmav5O,k7W~)+Cz]#jg2\V0n.{%@ȼ0̺O[sR7+!IH"\_##rbTUVRׂ_h9 w,o3`g = M[թיYb2VL9u]T1V=:=c1lf4-C#?y?C c~ RǬs ^Q>-*:Kb|kȁ8bSޖYB\[F  ?A@UCkȎkN=}X`;*1):VɜZ5eOY] o]|!36B+!&H5K>L.,vs61\j[wALm,c#>'1S)|eqRРJ%_^xeM^R]G:UŎ5([˛is8R'3`0ĈSS2\;[GC@n[w1cPO#&pfF5P7W6+}qLK.v٪\~6*˚d+Ԗ́1" ?^\R_VP{bs,Ѩ YvGY$>?hbB#1&DJ`'EQq'+:LE*z|؅`-V:UDhOS +Z>\)AWEZw)ۭʦ=\o^*4,Z0 V;hAΤMڐt/9U [bRKCk@)׏/> MW?<=O̬j'OyӭՋpZ[oŰS^7qk h2ב-cԡKy#Դ;]<Hevj#Սp~Ug@@mV71=SWerР6 iüO^B4NZ; 7I 1SHP5kC@ð"uiɨ7fnM kHYB]T,֋>#U~x<?趝JC"|s27KB>+ֲ&YIpl~htq+=z$:q+ v ((eEcxrS[ǭK;Qg Ҳ\Ͳ]DG`PJPY=CXxr%W }A5]UYҷͥ 6w$G&K􆛽A*|.CKBF ח?$٧߭#~"7{?;K8/H oN5ZT䥲7Bbx.@kLI MgfYۮ7KU():ʲ i"M&/,v@uvlʇ %1:T @_+?5p^'^ c"5& ug9na?g4Y=Wl#%{Fźu[\ɏu49p>`(v̌rȀ޶Ѭ&G,n+L6p)'uGQ-ɤR74r@Ī#BgHC3mНJևX~Y_DUXcb3ă6Y#Pp0-Pdvv$@ ۸qIxߟOqmof Zŧ- |)ֻ o lͮ;LB"@o. iY<~D5]ho,#EAT'U.4)O %u#v+k$ya@.w${A6H=P%"hSYJ!4.nEfy9d%o< /KQtJ̉.-i~YDʅhhs!^׈NxIo82i@}//rBpo"7_eHrV\n^w2JNxLa~WLgpǥE\(~2XNƪ‡k߈ -4ḄI5+ g1RW׬e|Qq@9͜8s&܋i9<\KaŲh#~,Esm$a(uxj|=+!ϜJ@4'4 [ B(w[nd?CW LuݞG oYp\'[R-Nk[| @PqȊ`eX`GSXaLTBU9FWUtEg*sk'ǀ[(y.X+ TJ Mhԑ(cb{dϵvXx^̻'s]9:տ-d{v {j ZTβ>,FLƉK;WqmQCGI$1st}T /iĚ Ùtw|w2yYxɉFfKEC{Z<:ȕ|-]'BuggrD kQ>L/Ct[vv?N\5f-oĐh=9ŤfĻx=P* W+V賂yM+#g'fm@rneۻ7y6tNv!*?iñ Q;N+zK-B۹OY-z'\khJ oZ 7Ao#=aKs@A7t2NVt#5I1qv5{C@%9e!zDZ= 8g?dq!GY],Fː:n귢gmrmUZEœ#MQvQ[?˯Kh V$;MDrsyF:6 7>')1 >zLHt=;W/ u|e#V(ӭ,IW^Y3@ī6K5{,A|:QNe90a!iY7)lݳ]Xoz4:_&µM"uQVF޺'bY;D^+=+8 l?fѤxMN઎+"Vv3i6(ǚ^ByLۄSRZ?'}BcN:U?$"=BE!l4M 'CD-@mhڰUb,56 u{Gd1VQ8YsVvCd-s7I|W#fVS a "$etD[?EeML~Q 'a ݸ+ƿ0 ?vH#W/* q4mpԴ1B8&$1iG}qD d}w&x $4zP]w @ dkDB+nYSǷBzn+"SmI^;>4DqWęjtjq.ReI""ch ΅Tnިi 0J /TWT0y;߉."'3L 5l$68y50U-8E}*Dی3{J'ՁcHH si<{gxhai#%ToӢ:jJ.̮{{- B#;Sޔ }1L3|޿: 7 p_?F`t?5c̤L϶!9K/;Iu? D;-Ecc̹}VEE;X$rrf֏V1lN6}΃R-S 8˽[o2Wx5JaOkP_Ш !lM4]!u` q4mw)sDrϊMdw:N癆]G]țV>>@ Dh؃GrtG0@+gԯ aNeq}Y?$ӑ#aWx U#J#?N4\N+F `}d݀h榭Նy^QȊkrx̅[lvyg۷:Gxo< Tۣ?z07W˪ Wgkzڒh@vTG +֍E8Wu=O "sij>ˍJ@eNwRq<<:ia'dY;@$EBWL;np~%ީ|"ij)Ç4jb:z76 m.A.=\p g A}jJ< aBɃ<'| >ZH~GQ-➀]S^J+שmha'"C1f*{\>3JlHqf, ᕌ{^̠ӻR]ȴi< Ь+3u= J:H`&~{oB\$o~l,\ W.5&&9R{"*mdTѪ,-nZAw]'m0kNniee'h>wѭjpO!¦i 䥸_niIɍ~! ;'5Dd;Ι,F"0eq\߷TKP:sS4+b(5,vyyg iN&rbY3p;$ i/nQܠTbUgR:*FuRv>k 0 n "NؓtL_VUMSkA X-EK&nϳzٖ]2 5ˆA<6Cx+k}t6ia0:Nމ~x|xέzN`l;B 02c53@DVTFav9ۗ⍨bp ;?Zk[;knVyk[D0!E{^P12z.iշ~G8TT>@`8M~HPz)ΙM#n҂_<:a@u>ooΐJ)ش?}H g:(u5v;  .uC8\=`[5uHVd=ZVįԌ,2T|U]^<- zn]Y]Q 12<`-|f?Jsaê H#dC q*AF4;)qΏiMuܾ wT+,tbh` BGj룺kiRCk(PGh!jk}Ăqf <P8;~Z˷}6aS3]M YӉ (+#Ȑ(B;vk%ދ<=-) Lg`tG3ū1# 3@7l&lȂ~Bc sw>#S%bfS`0sp!Fq|K $U[TtF4n hjsNآ?3;Pp?SӅhF``u}j;2.GTس{K|.CmyآyWQN;Ԗ,MZ4-^,mF[l@?8OУv{V|n%Zq *LJ%$3p=l,NhQRF vEڐ Y5͚9dQ;*gj3pQK^>N`ajvD`4OGP\D[45yc?2QʾEpaM42DW뱾5wsLpoFv\6?=ui˄=0~"_wK Y40Z  ^u /l(A( e2V&~ͮ'6WV8}X5^hGE-E0=A{/ Fa9l+vRe+8RiY}zGb,]P_]ӎK 4;*;0m FK]5v#U~k"|.ݡr0rv\ ޴9̸W~ّ2!2.r=4Ÿh4 "T+LɸX#Ag]oqQ8VE& 6ְK4iH{a{8•P3ىx ?Ζrn&,"3nWS@跩LCg/N7z% r/Ed5}a) W&n˶ڰ LPޔxUWԆUezoc~EȡJ7Be1e+%\eQPx`ՠ`Bs[O)Qc"u͌ٚa}v`:nn%%(蝺|-AY"8XV?*NTޏqV hSZٕOFE~nlnNN BЩT;D%}љ V!u$yAJ$e>'F08* aɝT֭/M1D A/K1@>.Ә 94 vUXP<`RzAyv섰-yWM<=2\ckΥ=O4`F9Uu&C |(_AQjf z.*Fb6)oi%U^'Yy+ v{HBoPod10 XߦVA w[#́u]S.ݙoM"J { p4_\ Ρ?M[+VYQ-y#h3lZZq n O+saSYteYeauf  XBQ @Ab8lWi:щ=HC 6· *KB=fS33OH~[gJ&% *NY@KAA2?4H`l,GfF&B֋"bqG,iiZ&)aз{zUh)D.sFe B+Iͬd Cal`^ACXL46Y^HԳ}w25z4ce\0k&ľ30~zκ oݵ?5M<+bM!4'˷3.<C'~AJ8o 3@6sm\Ƹĺ¶ƀja}6?JVbx yhEéń*ոCs=Ys*wfCe pF#N3~quo_)Djk-/!'1c8 21IɴOG&i+ Z7I]3R m)"a?ϲ%J>Mh!$lT.<bŹF7H~Q ]@Q~ LAh@JX*Npr(%!Kxg D*h{89DoiҰ"οKÃH(Vs̛کܽS6;ßavЍ.L *ȡ-9?cúoq|52SnD}^hHW~nyZj< O\~5BIAwxկyj:y\Mp@6Mw /V{ixnSER\6xxt/?41Qӣ*^^>nC}$ ׏*;pW X]a[Mu8O~Tϧ<ĐCܞ+3 iJ:rc=zGE+DEk547,oW|W_8'D{"fWQBKHú,mGuv#3 &W!"bcc FoA(o%mћ()n?+i6zָ&IqBAR s=9 Z>S>z]/W{6;MJFʼjH.txsW$c8W u'%btg-\0tcHl0i-sGS SɕHEH.g6}Y'̭?MoQ2"XL7lkxh~ [s92kn4OE浊&][0"дNJ3 0^xBtkNjuƊ84# II/%~=EH*i)n|R/y .™ Ot8 Oi y[Ճ&C)1`;/! n?RTc}7]?UYX??+ v2MǮW~}K`9)lr[{.31"K\z啄:I]PM̆Ոd?{P2kr9vzD+>_ <+`^.Zby6pvmƌKr Ón3IxR^j/**q3Nb ma0})&BI wMѴ#X[c@Yih_b)PԄey귫lvYm>mPE\wSR}q3X w#:j4V{~sr)g4[ RF:[ i@0Ɠ-Mͳ,ʫ'KI ༝l>R߰ä]mv3Bj<_.bIdJacu]EɛpI.Kdp= mHv17 :.Zy4X'IGp"?&i`Fn6S~ea:q wDd}DCf$|CƩ #W{Q|jD؄f9%׼Pohf_uX,b~/ӯH{rf1{I5;aEtT8[Dvm QJ=`$7{`BL)^vt4g? tB0Иq!Zd?׽ 8U%όG?n-EpxkpxX|A ^ ++rڀ1۱v gP"N%KbbVEt+7.dd꾸D6U륪iriL_"{;ybu/1[fCwRⷁ{fhidV0oQJD j#R98~$+ 8,x6W3'X5I z8dCh'f3;I: 17ՈuiB, 緔GER2p XK.⃰AfNY nʦjw.8(2˚\'>ުn}\&ӔVuo-aI03\Pםj94>7Aρ; $rSL,$[C [k_sFn1.uͅg X9C쫀t,l*1[b|^sǺC[xIA$#2Y]w|^8L>;ݱb\a?#g7.tM0Q A7/$mjՏ7@܄_rz`b3{xN潋kOuQ(Lr$0*V</V>ddEƙo?eg?0+-GSS8ٿ޶/(,t5¬0!Q7ݾ A77e!р&?чab\R`tI oMy-5}d _rT.tf%©hg'ThU=[ۨj%מXfyØ~@`]f7ϧQJxj^Y9N&jrl +qM›JS Gj/fT)d鶲?[{l,:"^?EAV* 1(qGYs @׀?+t~ Xj7Lb9.* &Ө}HⴭV*<A]-FVvloԏx,P_]U[[&u:Ù n t_MY֪{2@/`4Utiޭw)OY"vcE!t&T tq\JCdG)4̉I3kC8`{9I"XFҤ`/gQOR~0Âc%X:IuV~%:ۭNB6;a5u Rv̹hw1dTЫwvl n'!.JF1PTٌu\PCH݊ude;3Ro\>PSɑLOi/8lcݓћ'P vW41%cBT _sH4)dއT>dt;hНj͇Gt%W\Ju;b[LT10xj8}m ϏJ9ܡfJ^Δ"_ tKkUs\a h}ڐ"sҮz(y~S_72hN*B-.B;g.. T(xOtΫŏh Nvgt*bN۽*X-\h~ͱRxFtS1CGUൡ2k"/o\7/_q 7=C%Iqbhzp{(nS%WXLNȊVV6+Cmnw~ϼK_$z#@pu0yG0쭎+ƕ^ fr]DDAo<$7s_vIc9ʨeKx➩aXPW!aZY~pwgohL9hk{Il=AX s(i6x{8ihMRW,,F՘4b?Ĝ~DӲ'&tG[cz,~ 7l>o?ĐYV*4:DJf4 bbr7\X<~-ga4(.NC _6~_'LAnV>O,ab n{!#E7JCH;΁[Kn+`@D6Hc\f9{sRK9DɱS@kX*^|v_?`>CK5{7[+OM Q1 K4d%X_er^De~6B RMH8w/הk,l|I'ha1:3 1QdG = w}f6@uQQ\ -%_8pLEq"$WId2!'P6nFQ"EY5p(#t?'0БWe-T tˉPyUa"y1: a5cRp{aAwT?J<, @+̷%Q9(F^ :1lj+ׄ!UBkMzvmDdZ]++ = IΙh1CJc)} #ڑqǐiO;#DFێ"ɖ/h\UaT/Fm$ZLK'pe\9üMJ ڝ g F"4Zp]ǤoM"ҹv$&TpҲsMK^(`mgXlٙc8vvl~7Vro[ҕ @#տ.\L=uzVN"xARR8 agqyubnf~`sQ:$}¾sA 71;5 a1K#XқRC 6zF~!]+f$a{cB1.<5"VvpP|ӣޥ^DDC0'¾1*s4_:W4RZ;it0؈?2ͷhf ⹵6{9R}樅j 2xL`F>T:hxX$B}FA׉@^DZ'9HjݞkgWn"̉kFquwH^PRlaaoi~X[:G[H®g X٣ P x#Fxbq(k2HvflLUB6B䬸$$fc\)afKx\79 Cco+h?/G2MX+y&bOcp1mA D}n7L*$ ) ;y!~Fs/EctR=brAPG.aوT ? ~Ӎ}&SGxNw^!rfߌk 2xB;=ƶ2]>9]WLP"zbCUq#.j҂]'\"\w vpPH݇ըHxQԪciDuY1o0rׅSZHYYxہi:]} !%b-up,GPt@Zg6ηL%7*klo ѷڟ.R[Y ٦7j_< b]hf9{<ŀOyCN0#Ci(POL DFs8=5?v:'UF=̪uszZYՌޜ?ڨ"\l'cJUz*37+9)j6y'n9p}q-G—,9@هT="΋9~I3Cxj30O~1SY&vxQR~)Jv0[i!dF z%jdkH Ї!vߓ5iGu F&FWv&V"mwy騖l{z5Ix'-Įsg~i!JH78*!)B4X- %t*T=]/}v2Rw(LæJc!'+xJ~_^ǸHzb:r?#7m=%B 'J|A x*Xr7{4GeQ+3pҪ5t}}ܻ@vǝ܅]ɥ41?%+4v ,@\FqDd->B,7}}h9 YRNw0õ/#ec,j[l޹|kdCdD;\/Ȩ"Sg }(u3,A<-1%١٠'xEDeK@<$<[> '~G|>Ԟ䐙,lk5^{+' WJй協PwƬvt6nBL3` ^B8]r %Oʵ6,O_:: Mj͉P%n΄I8n# ~o%Y.r;R/ng/DXf՝U8J^ݷTOQNe? t/[u1vOq^0Z?Gz&^v aT@˨~>][&u2ǀ19$+"('mc1k*^WV ,CnSyǪ 5,5TܵY/Ϗ뻧.)#$0SR"PNlCI=:Q\%繆i'}Ld,k)N 쵘'uywE,Ҳ<PaYT TĘ{d֚mc"yԅ#\x@>߸NQ+j͵XIOzǙ%*_lSZY7i騑APo`yzB$~Fނihf"/$G C W]M҃7n{*`=V( 6l~B7e X|X|P3@jm}&aIk9qrӤ3R@sʚ@ܤ=ɵ'i6 t ˢ>Jf˷5߸>sAaZ.,Rjke#,hǀ/h"Xj#ڟJAdlQqɜBF#tD|&>S h0VړsKx9gUڽU1K/mտVQ0:<~;@y%`EMqkLB+"Aj:|Bt'{2a8S)/߹۰ӓqw4ۼ,SyP=c}yđ$Q.!hRfi8a/TK&OWtb:SaҲ$hW5{T*ΕQpiVN(4͑w#__?7?5K"͛>+!n$'kfA0V׋KчwPK<)䞚bO񹯼[_sR)Ss_ZB M$?h\J pqk}jsB0[q3Tk1$%,p#rPqf3SL鐛!$l,J=18J20P ms C<+3qݎjojP `BN|'[o{]1fځNu`Ω#M]%,UJ("䚗;4YH94f$Sj #0IoyFT=u#m1@ws)ȑ!H '3fYg#-}(g2`5e^[y@ƲFk}DM gUɘo*R:V⧌fYG٭Ǡ؅^D2_<=xxjEvb]%i'4ގ@Z B~{ ǿ[")Qj*7/TdZ2f;ij(C:c8p w~DUvr]{ 4&ns H6 t.5d4-s-X_Bnjo ,`haedI^wF\q {AC{:ri)ZܢFhQ5/4՛ }]ɱ2,I4S3DڗY@aFi>:НI!ci0( Ж߼2 ~k`=J!D .b鄟"en=yx}.R,56B]6Gyx~ ̀K%gY#(M%8PvCGKTl7BD)J)vxmQ4a/+ G{ vF~Z^A/t!kxd>QLf$)BCq @Ύт̭@z]4 \zuE+ ON#amʪ2O[A[{N:X[Y;Rʟ15dy6КtjiL?x% tFPrWal% :kv9xP_2wiЕx6Bh?Oe ~UǮy{+<>8?[>Eϳ $̡D0Yx5\_b%8ka]cF{x[§J#7 V1g^^ruFz+;ɐ<* fmNۑyЁqv~VFJo]Uf@\^Qo6MP`SvJ$ -0$Y+1;ž ֽe3x&= fY̌a&,cGsQ@w|[cL@ W]L ZpXOػBp7yFtN\ f^q" lYwvn&U ͪ@MAL=>28|d̪WMLSk]sdm)seؗl~//,G|N}wE&V! A` &HeN*yv;aT ATS!vw54=T)oq,߇+fӭ8rvr (>l{/-[|޴)M6ߥ~ҙvgJWЃG3hL}E0gg_ vFG{p X7bq4f)) }/>z}Wc ĒHM:W9^YwM]t ֧Ȝ@&;UuiB&duWT.8A5#f0V3QDZnK?]X??9BևwR0~jH'!OFSM]YOœˈ4>Գvc$Tc 045@è|V;= ]'wPcN~y)0b9@Nt- zY1(De~Iv.?z~ e*f!Hσ\f:p W ~-2l]AZmޒ,ڹ}}fhN a%Q3Ypf)̀'b rJtOY=0E6iR>$f3d$ą\i])}T+lǖ AhxFDn/D=n>\t3pG +N;0km@ChJyCԡח;l.m_K'tfWQ}ZI#`'*fd꛵?(95#êL`DI^r{ a.4UlL=;=Y'WaoFdL{_[ F0V`N8>^D:to,X u|}ir  ?{B3S+2Oj #a_:a&*.0Ί =c#K%\,̙.;9$hL!LAKP`$pK{e@HQj=3R_a4+1_rƪ4g@NH;)DԦ'jQMڌHjnS_CK0l*B榰DຂQ\~`>%_H+73,@G!€&4贫{D=qurjv(GEq~ :ox=2\jw2H8KT5y7bWnY%\ׁkBC)Qil:{F5C_B\MXjc6ڄzzIAش8,9^$|h9TVAmbWԙs-ʰX 8=9q(5uҢ4LKjbkܗJT' G<8IG6FW.S+g_"ao7y>:(NK=MS?э%C!ܨvѡuWuJ G;, Gsxf=t@1SGgïЌ[ސQVDCJ-GczRi72vi&cn҃Ǖ2@_v¥jHl'bpAҁI3rΰGL|\DD*'W&QOdv~̥PwvG49u?CYĢ7xvvd ޕZN=w;L_)~:؁ y@843&f/#omutT-IB$ OK@V`lr0\x{lXc$?bی$F%xŁ(/l}#0BAͺ6=b=,9ظ wu$QܾX$q74hf?Ll)s: ]5j^egg{KJqkL͉xbz؆Yɻ\xEd @p:A.xGcB\Lrϴ`UNe9/rq|^e+os u,:U<60!ٝ Xnɿ}dK,hmK{SKwEXhλtP=ϹO+1D`0KoA1N!O$9kI+uBk9K\d;⧴whnDmmB)K_a6?r`; a<-RdSkMbDNA6>J#G4Ј?/sA(Z{ ,.c?]Y v|Z@@9&nPtJ̳0Zb<:._F&LW5QEƺ |[ 1 g cabJ{'%xY 0"9 &fJu'GanL5Hp'5i,d Xp咓]{&R.rIuy?ye#@A_OyJ~}VT` c۰1.4Hڝ cº<$mG,K^ f]]Kˢ9ѩ[(fWo𥉉lbm2SQ 4*ЋqhHCN1fD~!T{uq?i ktt60\^?,>Q9feԔ h,o<*fFڨ^R?I cEz'~HDQ27h%qY{rFmڧGpPΐx7Jͭ%c[ygrɕ=Rł=6V/hy&x(ǜaE\uѾBx*-,*pj`l/cJQKpn DiTOQ.VB':Q}tfALƳ+/4,|Ϛi Xowv-g/@5, @KN l߃aN jtޙ}C@Hɩ ]mjAÃKΧ|y;0TVM,ِ"V xo1RyѯzM {nֵXF8qV4(e3% zP+]-'7Ob jbj.\k`@fZQI g+`@ƾ7s [Y1"N6RgJ?ݲk6U@ *p^`O&fKF!rBJqSbNU?wummRq$bJHlQ%AƝԭ˂4i[7&Nb"QYɶ_c,RBjmS sJWdk%Oq&Ή8?R[guS|:E5ugEa&Ffb nwE'MgB+CK⵾T^[yX19LU5h-rWk?)@k j=kycwxb"#RC] e_,kW) 0洀*E>1%ύNi7āݧ-ځ|.iޤ_u>, gг_>vz٠ hXpn]3v˖$i|h ؛&| tV| _t^(3Aى -y KV59kj'i|YEeGh_գ Y%ߪ?է֒VƏ_)eKfjy#O}v_ Yrഢ_@),BgWǨJvgʾMЎ pY"u!OJ8 r@lgrj-W/Ԓnw+AMHC5 5F"5cM&&,uCX kN˧ad,4Q(lVt:V+o1R}2 ,ýeR}}C <5~23$z7qGRǠ-o2aQxg4C2h_3eH)*/PAryG`qސ./ ,,!TJx1ҦOYfFٸ\u}Ou-_9/.84̡\Y!OvG?X t?憢pv ~>.Ȍ+opU ~ eySǗa^{gɃy g jOTgo`{>UqzefQqʰR͎IgJP{yk1'Z dAj.=FPL\U,ż7i_6c4oLfxBIRnNk^z̺" zкy!K{Ըx%B0*Y$*0ٳŮG,eC》^@P'JHztvP*W^ƃIa_ۋ!U?@G6r';) V$ Q=5ʨj{;A4z_,t+ 4$p\HV|U$& o\TΖ>YΒ$(s6а U-Zz4"}RjD4Ul'h6K0x*qb -F/97~tkA,:=k=hLO.l YVޭ.^\Jn1va{-6t**^2b0P&B- |VJV1?\ܬ iΚè^I^*8ιrQKf|{ncuNO-ˑ{Ml;}h=EP;㘜]㵗<+ޏmݫúY]?nQAt4Ʇ:#R,naw t7yZ46fkĶ>=s1 G`9U>(3-=om m33s~9i)ˤu v0 sbNp;SRնZӎ6KKTmw|Cģ!* akO+=ݢDRSr5`}KYv;b#WI`M\l qsQbIpA+7wF sHϻ~=ÁGؤ6L]^ϕ UWeqz)sQm@k/wݏͣf 4fg<LYZ$D/bNgxTF)e+vdZxs-tCHp)fslr6a/{sɰ^oBJh3l D1p? BiNjloxMefE̗.$I-OM+r:]ChZbt?2QjN4@3-oŎp +n8 >f3,kfk0ÄZ׸36`ۿu4dPlk4(ݰܔ+ k>F~ rJmpflja.Ω5Uo1gR5<.O4xQRD)[fWr}%#^u}?>LQf42"y;ݧ!>uj"U=Is8jhq1 0RAh2kE=p#Y_>n^M,Hں'R^0ckkf*ZX'\Ni?rڡa"+4sjdMgoMqSp+RLSFY9N[3f$Lrdy"ZK)؏]S9xG1dAި3D6H9%#íw ..#heɄ˕)(L`t<&Hm#CŽϺ{:XA*i4:^U o8c9z|xᚓsRObV0UF¥bSgXeO-i :\q;G(,h_ec; |%o"g qv}(1?\%hRN٩$'IJOˑ׵ޓEҾ$xªĸCȄEX Ŷu f͖;JAՔx}øoVmow_pa}ւ[ 6zxLQ k};aj.gƤ$[_i K٧`iym q]:Lo\a,zdwO;NM-"H'QUvao4]ޭH BL3B<7a0<=RimVMEgI mxs7Iٳv^{9݉,%'&m,4Ҧ&[lssX>@AGTDOiB[L9iVCN)a7> U)1`_u kdU{lAZ7MuO`,=|S7S,㧯Umf Jk|*!rSeDˣB BȔ ^譲".axl9 Xǫ1:^ދK 6[HP!hKLaw#dB#k R6հeBWKoI;ia/\U8anG;~(hSf-H)#Zcw/~}sѿHG"Ӓ؜ IYf`hQJ/${ƣ ZoiV#0Lz&A/Uȳ)|[`m ۝" (PGH;xux`ba$.}x#q_>J%h+P"/t9ASFқZ~p1dGfʤ-A֪"<': & jӌ:-4G('N@B+D궺)Zz:էvTŦYudQìOQA:|-sQk%s A+'v1yw!KZn]Bpj2uПX+Ǥ;JqנzumkhuDf[ s4{+ɘA/<΄njU{djҙigRh]|D"wB+{Hӌ >1H"wVP4~lP.,LTK^bl:T >K.?uXg< և!QqælqަGG,A2D:A -ll0fo,ac4M8x4&CBCEA}y{â*P+ !zda ӱU^sV=mp`"ma/1S1^_ӿF{m4P/Pp_T4F5 yk5%6ShI f#ȏ}lcRJŌd]u74,sNѤ> t EV]ζc~lGԑq5+s0n;Lٙ(`D,|-ݱAjuvʹKe N1_RC I㲵IBE웏Z]6O Zx7Q]f 뜫o:ԅN>O/ŷ̵L}m͸# erskzI!ۑ]%{`48o_W++c=)e%{\Qv/ϊ0MrT|E۳p/4?W=6t-2 qh_*Tft=͓9hirwM=hZ+N݈Dy'ugA1؄ڽc o`ިiϰ.LmyKm ~ȵAi@,"x u#{nB)(eht󙆖h\WyZRzt˯_ YҖO[NqM Bl,7cp3Vָ*4%3n $Cp)8[CQHXֈΫ6'E6($sUxD)'#^`k?O(  D.ޙ/ɣaHMe(INoS.ʒCM7.s;5k{k>.9-p.zEXK餶}4 tL}ӆIthG4