# rodc related commands # # Copyright Andrew Tridgell 2010 # # 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 . # from samba.netcmd import Command, CommandError, Option, SuperCommand import samba.getopt as options from samba.samdb import SamDB from samba.auth import system_session import ldb from samba.dcerpc import misc, drsuapi from samba.drs_utils import drs_Replicate class cmd_rodc_preload(Command): """Preload one account for an RODC""" synopsis = "%prog (||) [options]" takes_optiongroups = { "sambaopts": options.SambaOptions, "versionopts": options.VersionOptions, "credopts": options.CredentialsOptions, } takes_options = [ Option("--server", help="DC to use", type=str), ] takes_args = ["account"] def get_dn(self, samdb, account): '''work out what DN they meant''' # we accept the account in SID, accountname or DN form if account[0:2] == 'S-': res = samdb.search(base="" % account, expression="objectclass=user", scope=ldb.SCOPE_BASE, attrs=[]) elif account.find('=') >= 0: res = samdb.search(base=account, expression="objectclass=user", scope=ldb.SCOPE_BASE, attrs=[]) else: res = samdb.search(expression="(&(samAccountName=%s)(objectclass=user))" % ldb.binary_encode(account), scope=ldb.SCOPE_SUBTREE, attrs=[]) if len(res) != 1: raise Exception("Failed to find account '%s'" % account) return str(res[0]["dn"]) def run(self, account, sambaopts=None, credopts=None, versionopts=None, server=None): if server is None: raise Exception("You must supply a server") lp = sambaopts.get_loadparm() creds = credopts.get_credentials(lp, fallback_machine=True) # connect to the remote and local SAMs samdb = SamDB(url="ldap://%s" % server, session_info=system_session(), credentials=creds, lp=lp) local_samdb = SamDB(url=None, session_info=system_session(), credentials=creds, lp=lp) # work out the source and destination GUIDs dc_ntds_dn = samdb.get_dsServiceName() res = samdb.search(base=dc_ntds_dn, scope=ldb.SCOPE_BASE, attrs=["invocationId"]) source_dsa_invocation_id = misc.GUID(local_samdb.schema_format_value("objectGUID", res[0]["invocationId"][0])) dn = self.get_dn(samdb, account) self.outf.write("Replicating DN %s\n" % dn) destination_dsa_guid = misc.GUID(local_samdb.get_ntds_GUID()) local_samdb.transaction_start() repl = drs_Replicate("ncacn_ip_tcp:%s[seal,print]" % server, lp, creds, local_samdb) try: repl.replicate(dn, source_dsa_invocation_id, destination_dsa_guid, exop=drsuapi.DRSUAPI_EXOP_REPL_SECRET, rodc=True) except Exception, e: raise CommandError("Error replicating DN %s" % dn, e) local_samdb.transaction_commit() class cmd_rodc(SuperCommand): """Read-Only Domain Controller (RODC) management""" subcommands = {} subcommands["preload"] = cmd_rodc_preload() *4֞nt#( )UE?2B|lsxO۾eУt2|Zf];+x3SaKW m$];=0]o]0E !\. `fjJ콍\>;94Ōna4v|K$ APo ;<^,` F̣ijFq.ⳇ"Z6Nۭ{FbM7NMLF} ZcV^tiLGWɽYLϵ!#&r[7{koy@rz&C8ؚ DG0*9'a1y{1H=B3xN,'`e*G{*^ne@:9T /9;9$@"뿟CIs1G&vo$._ܫ)̑0@?ht,뢘Ӄp @9^NCuy ,NB߽.jJ̈2L$Q5 g&_o.s %.=yy߂D&؟ 2XO=n-ҤLOe+lj[Ow#˿>tDUF[m"jt6=}X3.LN%’#\.\"vxtRFNF3Ay* tݴ}}Be^FM͐u+uUmg'͂@O߻[r?J ciMbign{nm>$-ݝՖCMݙ}}l:217Ҩ'>c~ս<^bVD2ƶ]b잢 }RZ55Ad~@l+`Д`5mSp O,ۇi@2g'Bj\UzU2Z"3:;=pulų` \Ls6/Єo}v8@k]4j$@Ɂ*&$uBF Jco#*:H!+b\b+K1';O$6$XfGOۿ3x [f#z{8Ulڃ^CHJ wfIuj)Z/f9!K Twֳ`5uw?j?m Mko,u oW8DuV O3 Ra#3-<_1(Qn(=̾vY7/0S#`c0QqFAAKlkT7p*p3;uU/)IfgHKw}$+b}Zj݂F#dȗǒh_ %.DDžsUx ˧. s~ 3 !CA$ ==)N<|/zٲ }-V F9[=+ay=V=+OJ6(J#m攑pAZQmV i0ȎX:ҾՎ`&Xx)ZVi'8_Z|2 Q9e䪮шǚ$ܭEdĔ5EH"]}!yo'+(E{ xe }' 8UMHLW`?f:*döŎ}i{:)Cu yU%ٕ +ȿysgJy'l3oTY"6AL;`|a7]Z%{Vb*8=hC¼D}6P %pvf$AXJQfh;Tg$ؾHa@.C|6_8zWaH/?×!aKuO'ً5RlF4-jl)y^OՅ%r'9܊"CJRX#O~jn"|rUM T'$a FqT^&`]4&pd;!2JO\"(y;Gsn"-G~;Q kiPeQ Dn%܉{8"y.Iz,QÎaf'9V|-b-e*>bTt>NlvN{%wͅR@ص)7OiY6׍^R%6sN܎LL)Ku䷧8 V֕޵8X^B[Qg>w21Ii`wMorZe!/( Q85*X Ց%^҆a {]h 6ᆗ(py,Nbih)؃ޥv1/GEø5лE]bO^2gC.TvHt%J#&SC>#q&i w6#ixqBvu:SD`ye qh.65{澟|\z}8lg>Lfܣĥt*Op>M0J%}-25C 2/8  [OŠ\y"iUx5gS?ˉ j%rz¤`p6[TJ޷5]GzfB9<(|]h#MܔT/% dK[R5w?$sqMMx]sSV:]]7<[|$W|I3‰֤zSh>b*v\V>bgx8D0aHAH@sRY@];ww hFBIiƈC%6C0\ y c8!;%^*|e2U%23$RLpr(?o3at:?7m6̽5QTt?Q7wηR_dܼyi-}6SVb" ! :(00U.,}N巷FLEL#:w$A悃׍ imoش\nGܻ6(Y\cR S. 6+RdJUOa_P LC Ձd^A~@]~B"e|%>J}~W>9H"C 1kgF1 TS'/pY?C^ SD S[7yu²23Auͯ#bW#}sg4wOh%Fހ 6Zo>̚V.q3vxKpCXeUy\xvk^5 }./LUP K'ܹ#w|6e}O)b4xܢګD~Ꞷ Bf)D"e2c«/Pwl~/yɈ{^ptNT7Q,=@-%SabpdWH+lBV &F5Al:hR0Y%~},Ńe:/xeLQS9m;+{&m+Ma036U8PBA9?BB-J ~i ˍ2Hjd$,MV)j)˧:CGb~[l8?U{+ -6 { ApYU&QA=!3ixaaҰo 9Q7@-Gk';i$ɈgjR/O:ꪫTŠ&v lۧjCBgO\.! ɭ4 *K6:vpFuXOA_~g-m&ޥ1=Z[E.x >dDk7As35BQ{P6NQ靘9T%rS7gb:h^Yg0=\A5ָ7kŝ&ݏ~@h΋ȘCfs 6vSC='2,gSD}d~CyǠ$Z}n0bRqhiQ?[v @Wְ~}opd!_U)r"ʗ) ^ uLW-bd+T3pGI[Kq?ixemDp!hVQY\;Me=(8|nRy$0a{ Qhi`Pc#ZBNo૑9't5@"Ћ 㸚v؄vS"ݫB^XOMn"8y+%N7gC\AT|5֝ɲr:bJ[݁7){I 0),sP!A(qa. |[\6 f6 vE Hcځݛ.еl-xydإ= ̳nmFfKN@XxGt}&W2~KK%]՚ 5^w#E}uRmLm&vv wPŃ._17 GN7Z_o27+oP<[44NS 3C+gqLL*)';ţCܳ6DymEt۾[lRS.C̰D^Bk85˜EF#aa#OA;>_DSt F>b,U;9xdU!V.Zl u!3n}=WIm晴ǬP\$xHz/^`GY , !yfgǭip)QCnd#G}/>衬7 B$@W7:׿AW;ѕaXQy : i`ʬ*eV!K= fZIO`s x_)@bD`>]%hސ~utX0z(E_| 8W== @P`*EL QkZ"-O}ۤip0IjDgq.UtHǓ6rɚVVfH|j4hֈϣgEm(l[t3-ݩW 0!wGA{5ԕg,jDK~ٴspSNA JKsmZQ_&;ל%ٝ#rp"Rn!b y2x[pX5wyy$ftUm^ߚQ|.ʖkn"q-\D:MV<~φh{n:t7Iaػ*qAJuHYi{=͚fND76S/@A6= {6nv("jբoz/0 Ȉmmg2Ɂ_{2Wz 4]g/aZ6~#S٩@!ч@s^Wsd m4 ^LH2mNo]Oc!(m`yx(qs*, ^Uī%atO xIʝ"&4b \1՟Y,nԠ`Pv+1YP_ᇲ"U3F&~WK͠ժLHUQ9 ʐ2E{Ļ&=tMמG̶gI5oٞ9c?[x| nИu@1 LD8n 5w]'QMQ11]wE20֨o^׻6_ojZ(l}rx}hM'u< Ԭj;քg})mBdY!Dd,?^ -xRy '6j53 F5 'Sޭr@"'S1  %_4{OD,-?'?sr). {A2pJ-[*&{J}Xp*'im1~uN`K]-٭?p a(S8>lGQ G <i] |"P7. h|=?}0<Xs5UPUFtnxn-|\6-f}MEƚg ֔qb]u,BOp:V8;gg(^rB;@KnXo&țQEd/E.4=Ɏ=PصU\yUr8[S?SIg{|{A{ usz^: l#|kw *.Uz]8Uj b_:XUߓ\a^eD@/xҍ_VlB_):*vgt8p/1:FQ%+⒱.=vgE+O"(&q,R~?C*$)WCs%N-m>@asu]E:8-{x;'^MQs(Zw1#j,H) 1*S :_,Փ}u3,O2;y%HtDBF{{DgUq"{Moڨ$X3C SD]DY smt[ \nhM5H! gȎQb4wKl[GLK=4B)qKGf{&' v5#s~)}܀FC#&msB%ASCAE TJ:kgWkQOLc@$rWE쌡 h[ʵȿL6` jz $]݈h\;(Ec]A|x$yGٟUXI+KpH`+U">_A,-}&nڌ]%Z2w\9-Q5Iç?xj5@m)w<,~2(m*0V?4Q01 7b5/wm[S]2T7<_|h,7Q^e)(pLPDsƣsd+G*_s h*B/1Xs[M_L#ʿwxYdޡkYgƞ"rmB45/f (4AL-jXBOesc |1h-6 |o.c&4՛al<˛ @u3% ,Iگ cYDUʜs_50GF")mFF{ta|1Oabbb(7KXf&R |ty*PKqQQh"K-{>8.g^uqD!߮3oɻɪ|on)qG6lXk1͖Y,ƞ0YP'>Xh?U_ XJ?Tn v c "20et1ί~l,c @ 72qy3pK\s&ًk|مC#c}`'g+3A-baqHkL~&u}2E bBj(4 +1 xqJBϽ@y|ڿ{x2@Lg'Mm Za)5ԛQdu\ݻG+Ho͖t:$ *]z7 ̓VyTuu| \L)aq+EK\a\. '0I6)7UYgTX&&@JgO0pkx`ʚ$/-O2uS-nFϾUty֓\o"2tʇROʯ1ŮRI5b7efw|&+7ԊkAZhCԥdFwA ۆO_A) ҪU{ňe~켣ih[?U(R56:2[-ٗ#]7)Ԇ6)t#&q0z*I͟|"I3y8z (UMMrCԚŠ( Lc^{`[iaZ'nq]+B<"1J"[wYL-U xF]i%t}@jVq29c%nfեy@&+ȉ]VGjS0<w4V%G01b]w:^pwx5X*l=OLN*it aK\E D@ yE(8$\rȢ\iݸ~Z+ٓws#%fg A]}],\biT>õ9Pw7$ƛ-wa i8gd7,ϐ8-oS_I#dTM]$.-Tھl"zNX Lb(C}d߉=fq՝"tY@yϛ%8aZS_Hc5X̢*w<l{]s}* Y2?5#$gL[b@3.Rw/wSsDjX?73 )&?̖dv~&`Fw-#4Ŗx%bCN*2.glDGB<4&=BBu5Q][eHN6U~=-oAax#ԋ%Й_gycNg!#X'<*P~liJ]-9s| E=ދqfЀ1$,̀ "&LK^zv zĩ=\O{Ѱy,/`:wMqmǐS~VnŭxhQ$,E7gO U1"OWcK'D:tRIRX ǴCoH~0ŞU 䙸Oc9ӋyCvX @FP"+BW?KӁDH:ODlgtKp#^\Ow8B)8 O9RʂdЂd7gJ$!"k8 D|eh 1?]+ ͘:7n)ֈh,'dPZ{pP-xѵ\U/z, ݍ{MRTiP-{.̓̎@B PX~z/ڟEDTM3M/w-y=Ke|%\y/Sjy{m60up$hǼ+ δA %C-ȚP" ^^CbQ@]ƜyN~Fn 쒢U[\L9_MƷڃ^͔$Qgu<RyP-;aNZC(̿}^iΞDƁD;r˛|KJB&"-/5ڪďL(pkFI6T@gHaZmWPҴ\},6fq@*vl#**]GQShV-^閒"/Ҍ0ȅMG Gr',G_V5Adu$[ rpTRJiaJ-lJ #zV+iJ-٫0ɎK 0~-!Iƙ_XۡOԬM1G:cms4͠GGScƮ ޅ3]OwƤ0S}] zuF_:,(x%%=3hK#0x,k2-x)d*mrd1opy]sTƂYO"5Ra)_5 8e8%hHidϪմ+ Vq>%^|:!{'R/w8)"%v{_(%ȩF, zGqx"`+Y /ݏ?܄)FկrY.6Ɇ[۩N"낐ްDE:I @WGRz5X -I=QlHTM^8d }elW%^(K2f&OPF!ģȢ7z܄IFLc2$zchޱr9x2SG`dhjF0,."y=Alj;mh3 ȓ̀k_9|[oy4O?*44D@r;d0̃RbS+p߾1&}\:2[:8KiVAC+^' JDcUf+eoH#T'quXQo%`&lr4%K:*T?,(0&U&Q3E'Rv"F5$*[aL|(EmqtI~q{6@6Z :b; "km~qrA:~ӁAZ/{TjQΊ~ Sq<>溲˽U7;;|GQ֑lRڜM5nVm؍ B"7md &&aOf Jŏ3p6m&K# wN)GXQiE D$L9lƶ[P>~~dK\8a:Ta')5=&gɑ,!E*;=w<]~L薱SU&GQ0kM? 7 Sv|(f*,5 2J B}Mxr.)dO(EJWdK|?/c[KšCl Qn1X.͓H"'\CS.o2!) Bz%Y‹H+\vs;]Uٚh6<`缘P1ȓWu ',UBX IB?aPFǘVۈE*]$n iKHj5䳁$,0-~aFdh~;-9|"F.qOؚk%\$F"-ř⹘$bP4lnp[9 Iv+><sO|o`^kN WHN"m!1m_8 huiJ |# _cgpo܏?<Nl+6eәYh h24H[$c ,$%aWSUґlgҪAF#i!%a ws(qkR6WuP鸵 eԖ6t i,禬I%/k6 @ iI4АVVTD,~x[HhVeu] F<" r! ibH%z?\HP24X˰%0^:40e,%o:aRhPrB |q~g {fE 7;CLk> iyX8]0JD$ةeMnhmk3+'0G'{wFy,~7A jFS,_fůt] &_u}d9k>%M nVq W^EvF"Dg<oбnL-IVJMux=ڞ5_K+v>3pEl48'YLKL "i&(31+y9۳0ɫf- '2yH~k̛)?M^Z݃?ةS.j{Jnce~L!@ B{HMJVFT%@M >R8{m QˊJS[,k\Y-.bHSQZȔ,dO^?8e^G/fX`(_ʴDNP k_bv.֪wΒEVu:(iek> ÁEp>: Z daAђ.>"ł>gO-MPyȠ;za ,)s9; DEtmd.QWnZJޮXoF8\Va19d_w⪔T-1e]v77RV6u,Y0/- # 2f#LY2s]2"j/NPu|9=Z8 S|HHZC ңSrv܉FX@۝Rumnk]oB=, A~JӮɪ,#'6~J!Eo5ΐﺮS_Y'Zvgtɘ IoH{ r q2Ld"Wr̖3? oEi_BG4`2mD98+lIEˀaws^4STjn 7 xhNSjfD>Sb7&j|?G6Ii2D7):_'D%D  ѳ^9潨,݌Mr}.m%ЦwXJIy'iҚ+H6i$ #nrzEHO|v>ܵV*ik\׈{S?8h _%)_ULA4EMhf\8Ԯfnm56T[U'ϭΟuW$K/qsi~Dy492n*5="sx7}jݹpkMD.>.dlī'E5ʏ~5ûm;v.QmQHNO3tdg=(h',J:wO#ty":zWEmB^PS FM0e,n]Y&nQ23$ΉgR|9oq%/r6TDm²霝0q<9g$ާ rЧp@Z^#5&b;8;O\*u4Y[cbPzSs/6Ȗ{@ w)Kг/,J(j<]8y 7}ŞWJ͉ԏ ]h@4+ʕIg' LD+^Ϊf4OdHB% HDXҲE㋧'Y2^y989W[^ iZK ~<&hx#d%QϓՎ/ˁYlڮ̌qa -y̠!N0奔 4K:`Z,%...ՠ0ܠBRXGtIگz\k=z 4yᣪ晝Qv"Ԝ yX&eoz՛4XO>?&SؒjN4!cHy2. {Lݾq"A2@yrF>(D2 rrĆd9d.cё;C%4g("8h8&ܞBk\&Y&vd.k v#|ќ+tG W~A-#%~=o{]GJp'*; %4c5 hx6WRQRK:#7-4S>;/x!_9l|¼ _9pTZGT6sjG(Ml RܲvĒC˯^*/ϚU3|^HMpvpY-l~9ެ ޠOɔLq @V[>,8G:^T"Uw)jQ8F0h>y)d]']fQ Bu 1[|Iڽ7Ƴ9PRìy\VթV0LMhK;Ѣ|]| i@$QPGI{-^rnӞŢpO:$W s&(xԅ:1Ġlqn·ن\M)g/Vv.)o򯲦Jхr Q:x<=W_ `'>Sʬ}/:ЂvLIT:v@|qM@uhʁ~SJmȄʵl5T{3`1|ӲKR1>yLwzޝ7| #q'07$ _0V.F4mpP?K`еk,k@WVwO;`^ 2 2=I8{ḷUO/I{њ+fi|H%]mj{A!"5kUgnOns( T b4 !Eӟq37@恮tN6\0Cln]$p7K>^)IQ{!:z 8Pn).r B[1Lt7l w)٧ushvHb 8+7!\Kh21/wA avACld0D]Ԅpm8zF?5adgMSH=$ɯX1H [?kS(5g>j )W> &.Tƙ ǟM`4r^6CY+b_[h'%@*rƷ1dQOb\$N9L$ʇÂ10 iFdH/QiJ?l)f IkmSnj Z4Kb<ԯ+qn'ax*KNNa/I4O9yţ m1_c2;cp´ՓTapν$&)EQ4>/m(˻ё1uQսL^%3ɛyݕ.R;}I;̬5 (^Hws!@jnN U*ǂ-/ݎ*!KqԴ\n SljT,М927Z7Z}i| 1Xi~FT„R`Z|ل3(#=zl-+<#xVt$YW3{̙Y} 8 u˞o?'UkJirxIt0N9gr&ǽEv``UuY*#SљMy[S"!D_BX@JG9I+-j&y#zQTB2X~ë$=F47Y9v_H;:}mzlDm؆pbi6vYnMnʢ; 1iB|@?hٜ^&X [kmlb> ∪M?qgo4h{ %Nr[ītoi0AvR:Ђ|Hs22-CZroijHRI dFm$)=Y&\pč6 RENZNnC)Tģp.[8j$qDlO3TESڙ'^yZ`&X~cM!)$o8Pse"3Hg2ij?zXANf!5 F;zr1Idz6"ykX.tQ*>Â0x["0Ŀ?SH7{A5>~?7 lI-EQ6~]M<\WG?i* mojq]++3v셉xt\-{޶Kd$uŶur%86~1z:4eb<z:]+$| N$ܼ޴K*{ R~UV5<88_K$2+5לle:5\lx{TrN%z/H|gege+YADBVe8z#w@$TܺY-jPMMec>w%O6Y0RÎz?21>Sј >xKgSL CmܿuĻ:ң렣MBn2wd!Z[8p war&铯/7Юq@qC <ݎ.nJz\W9 &Kre{{:YؽW)ȯeF 횾wOyka3gH!";r%gQoTدϥ iJވ_]"RU=k]?-h,/ ͵hѾĒ E^ŝu@cGvͯZ(^b_4ӇzUg>/Bk'o@wV+l[j`7SnBI~zvu&):ټw;@׻:}In]Kfqn}BN v4I5L#8,1Zcs\fi<)}pw0)6sk:bA $r>xW5?xꠠ|#6$]10􃤱13 6aSSf-j[nbDn?!e!5֎7lR+W]/ FwHk,/E9I$6fsvv.^+>  ulT#4B| zK*X*PB>80 /޶1_f}x9qe+=O%~X]9?#7~Y:= F" cVޤ0U{mY_ُ"ڦ7iFBkyr.Qx*@ :+Rq/0]6`GR-9g/ ѭ ]+=LY4K}xuka-/8sFNdҩAJG/l @Ut,>0醐F)Z(A^bfIVw lf T"p\>RNj6ou.8w̲R8AfG?G$w" }߼SBWэC&2Pr5ǦB_<<9oϩUrOX%6E͵NT8UWO}:L E`oArG~s1|6"G׶\"^fTy8mB$$!ڟ٭FۜFP>M/j>xˉ$8Cn-FWC"^ XBH0h!̅Du3Er_;]U55V| DOqu $x$MrGĴL)O'w@[!)O2 YՑZ@J &(Q61ʇ UӰVm,&ۚ\\5!3o+R 1.'kakins zN%S)cɧ |Z1Ƃ /E5PtCctL~ е B$]ʧ(g?eۙY1:f l gD2qO~[H#.M-eer (]! 2 絴䒛vXc*M&8z"F"9y#km&֘̑g+q2-^MWYoԼT#}='e{n~]Ӥ@$'vXlb?= A1BpC-ώ$) n@g(ӿ[Ody \,㗟iYp.s`+k/4B.Ҍs1Y/#b0tF8mD1E?AobkMj|o>05O_YcWLM,> G]oi''9nS3s1t]Ԭ9v3Br 2ɬj8/#7Dzw/&s, pK$ }ok0q9ڽ}F$'c @S,rUFc6T.P0!νAV'HeyHzMgw'e7:i"ScU U:N܎ܖd sgs`/5p1+g]% BzTҏ`fwȓtP0`BTfRȄt-tFS~ 5u/vKTwyC#ƛTtL}@fy`I2Ժ?e 0o\*[>17EE8_FJ78W$kϗUT{f듀Bnۭ AyelZs;t.}缼jg 9>|Ep3b&jOўA>lO޻8ceqXb~\(<)ƌ])1.yj']npŢ ~+ t&5P jP}ꀱr=J9&/}=hwnueBQ^EZݙ@^ A\9u=sf7n WٶJ[,^݁rfݶOɀ=\cۇVw:'b-N>r#}G`8-yuEq4Nɾgԙu"FT\U#%_ Ǚ WDtxWc##3(XZ2aGe<{iV|$[/hHP {!_/ѫr},>"kJk8݋ SȂ LWnZ%R0 bF |og+IXYC+xyUM"vɰTw[ ,@{r coq0#Jg?c` 9RM R,q^b8AKuxTH/gYóg?1ijAZMr>B=AHr xÙeJ~QFf?/_*|yrC`~D,7! L A@U+EaMj+|ǓL ͚2J\ tFq8k3*y~ ..NSsUKB!Pc$# Cfd}z5zN[)rH.*wvqE <=|#ǭcK9\m3wwݫJ^UHdf=U[5Ohn^ҺL+TAǶZDv}Xŵ&uu$~v7(>}<hF{*s+$~݄WN"ISQ ȿyEĥZ)9-";Ӣ$\b$xɫ@""}FZh_jUa!J61 ]_;]45hDKFJ{?C!v٦a1}>yuh>|b.0B]b`FؤDp֤yZ"b*#gpFrT涋I=~z\ b9Nc 6ln:JAa.s*ri)2Tur?;UvF|1 Rn~lG 0J`?9Vγ$]cL5^28N 1:Ss#%6Ԭ廪Wl'.r!d5[ \ y|.Ƽ5NJIP$*I"g6Um|X*Hy7|ְ8]8m1[զ {N8@wm]\A"|/}!wH余mz4UPR".I"ƹ9}5iUN7Qe`VjHV'~!1rlʲ3:+Jcl-!` J t!csOWTy?*-F!3cW.C,P_Iiќ"":Gn8y~g:͛UNj"bs}'T߸ynW5\~A]##A\H1pL}D|@ 73Ѕ=J iG89ً,pcD' DVjT׈D$;KYB:H7b1Aj& |B9)_e:`8Ȑ(j6HuT 09jwDzcfOG3.@U8^8+=sǔfSct]"vE乲tط]({^nq\ eHSccҙ'IK7Z,qU Vq\5D9MGiw'>)HOr!0t7C-9J5G{-x*k5lHK6$ HegH|>J6$_{Cz_>z=jI٭wJn(]cafޗ傤mC쟨5$~Fi`)!;n9~2lӟ:SAv։>k͎La:QiX}F/J>_?*7A.${<`:ꞝywʼ{kYMSFm'QC^*]0=ʎEfCV-U$Z3WuŲLDBe>K";H'@@)6 _-ֳq 5Tו[h;fiԩP}AJfˍ5~+,7uSDHe`"bsBKbsYlms(XsdMPDqM{K`kiˋZЕK*oA7.bJX̋g cMET=>tFԗJ:[B,ٙliՈ [.j&:RXx.s6P*yj6j!PJ˗czUm[@/5그Ů^wgr{tYeQ_y^zo! ^NLqJ3!:ZG9QUXq?0}=ISAˏlfн R1O#@{93+SaeL۴f% هzQZ jPEɾ[iFgOG]7_/~{ыvA ߘQZ^OܤjJ\w@T1cx\\+in^V5Gsd e@O[8uu-z x݃Z,Ҵu[;ess$GKq#UBIrJS=ȖB1pѝs5G2LxЎ ey)Ran:%\ KS8Ħ8oj %,E!gla. X"<S<?6Ea80Q Yi ?cx< uFU!LR #YE?fc 0O.V68Oea.p7*^2AE3Dm+|sHyƑj.*_0Fz i]]Wa;[.$Z$lb@(;|v6!z & e wkc&JU=['\nkf>^%:?Dzmʫʢq헾n!?0~XK־#v5'6NK67ć&hRwu>IzS \_92*BH]uyGTnZGuB5pQ u)q㵌,ŷP5MeQ];X ~賨.vv e![)1ݞ~ԣwz~kj7S b |;I8 ,Q RqoYr:SpJT"@WO$lu 9~h sHsBP9#"qD5]z3sDb7p*n󬁝5U̔yyٵ\IWFi͉哰 Q _Z>&3'۝C2Drt:i*E芗@v Nsю޹IsX;8 r7àW?&HQE D}tѴ>F}=!MIaM"F +*jžx %S@*^@YrO̹0T f @`tVʃmg܉]$}fq5E7Z"'}F`DhB+ʹŢ?~LpF_Uɍ28;__e6ٓ:'ZowTXV!M5ViXO?:(0e\*?ke D(0?b'O|Oęiܨp۝O5-Qm뺨=µ Pq*)ى(_88rjê2Su&W߱;/4 _gj D.b@ (1̾qG)%zRWZ;l M9CT f~ەzh>,4!&5nQ#[QQ9sZ7_*=Љ5_ODYz/z멊Aq6R7oC݅PJ`˄ț‹0D9tpq(œ&>'{U&lЯ˽륋iϽwDh~<a|u2 +z.kX욒@`DjIQ*uj~iu _VldSs67)3)7̸ -?J6mFCv۾wZqp`&97(״qOqW[^%?ީy>3gIDO>% ʕcy7 :E  ;QDؒ6Upy `w$ۈ!4z-ĹonXhǧ@aHM{ԺjŠ`*[a"7,yLWs=%Tk bQp6n.8><>_445QXӚ[*1xSR%}]!ENzhȽ^wxtWfї͔0CX(ɬ.XQs|xB])%v$qo6,PJfCTy]]*mΣzEO@0>]&k77YsL_e-1tUCi̹]k\ F .Gې`<*Z2E5ACR1{u '8rF_5DžJ##*E9oqdjo"kodJ v@D.ɼq/mށs5>D1)G԰K=I[q>~pz jeaSQ)=M"Z'xUIע~0 |) >5A`hڄE?oJVZ r !\_"ZuU?؇*ԏjF޸u2{  ns %C'y]8P2m{y]2k3^X\c5bB~21#UëW'< Isxd'1[Bբ2vҐP!78xz[*Vn `UeJ}#*p뎛o.X $d.SWe>j~8s^D2qIݘrl9>w,K>N&X)2\ Mv>RF Y+L-_̶կEG4 q?H=r+)R )"< r |֠7&R|r(GQ }$ G(H꣼^xFi|.å4eg,Ե9;:8v8M O]Y(溙`!t#J-GC'av*> W/Jhq/^pTX{+$:~PMykYDl=bv9t2$1-#8"7P| dp޴Kt UG"u^L̲ׅJ-ͥ轔E5X6hydpEOmSԽɢ6bg6- <8mtDb0E] t4:&_qP\ մ8zG>V'R&qbQ*)6'Xx+ޫ͈:@G5uN:o$i ) _|#|ÏNIDRosM0XHΧgPYSي~(GyViתlpj,{HK^"VP'k%52^|O Qʑ_ɇ~&a=BngnʩaVs~W՚nD =-TXxkX\ tgG#iBȭ'q52id觭pmU^Y+ø[`ͮěs~>"O|Yـ\yd41~ 8AU1E0ܜ voUݭj~kgỞW(!``}-@Exv,ŘzOe0TԷ>I Rx#;OdiE&@5]l'BF\ }Nk>uY)B} OVXد7aA0 VTo66uVq V _g:E|V ,N݊/ @@T 叜AoZ9`EKҤFajgPRr%q!L!$_>cN A(/a'$ PArfmJK`WJh^7 ,'(*&{lU, E$i8%\z?(V؈i -Gj #爷GEϗdTT'bs1WOQ#xvz? Zx-qI*v&]F,eѡ.f Uu'uTlx9fNįZ%MR0J(ƈx#_.JNAfSg]CWtc9$b XliUv%m%1Aߎ쫏 ~dv e+ *xa&#OweE_2)vԪ[5 Џ3BQH'=Ht0 V-JWDM6dnڕL:S2)Y\EEi%Fr-&R(0:h3SHUeׂ(c\z%8m22;LhzfE/U_))$ '6\dS/o R'q=EtϿOv(,cc@#Vұ p8ow_ĠXzU,Tz^,xokmtiGWH6|/,'@H! nΰ ǫAPxPQC͓ )%zGFz7ɸm%[R9p61`w&.8 4)oS`yc_7̀a y LghuX>3.P*I9L IehM!C:1^'Gӡq\g~}O>r>Px襛_EɊu>V\V0Y^|mStDWT Jj<\QL߾ ƯɌel2S%qM RG8B L@Zp|Llǻ5 -kǚ3:lnIxXHKQxT|/ji*cb\{*(0 Qvצ6D(áLd4, $:8ʆj#_Jz4't^W&\$BϕSZ^xN6mt#`ь1q} #HhNG='}OSkp8{ إ@ƍ̽&8W&*[Q:ۣɃ_^ҠI5k,1 #+[[-*t 5T9@"BZܵDOC:-q#y_8q'^E'THSqTngk4SfKW -i Q1RW"pch]W=>⇆okͽ 1MJ+><_ |\׍ڊskSIZ&r+6i=c/e.p'qSEZ/1xZLM,KQ$jPX8z`Ȑgqӊ~egRA& s͂O܊Ce ՜/X11ꭒjzP TKqTեW% n,!6D= -aXY?948 * =Ք2{^%oaԹ&"`ElI @Zل)h ?~((x HL% q5;nQ[87 4#4 m|?YIk  n4Zk4ݡa3GyX"8d=/R2%y*[ M;@F05-rb??w}E5SGwL?v"HpX1: zAJ.UDkM^>4,fʧ.I)є,6L{o09Y2qSIU]BϘsf2N{^|Z9`f@'=z| gp W7i]i(L$ڹo,䆡jvOjMn^ag Yit했 @h sXTJ/*Hc VI RlŪɔ[ɮ{Q~U*m0b^+í3SOiYc!P<WoO# VpR&Ts Z,ta9|Rn nCnvظL}4 =.MV"*M5/ d;K5~ T5E}9n׉)Z=@t)g۫%C! I u xY?soFXzK6xxC\JrvV6CiPe{%UA91K /n dɑ!8?U<1N,iX_eg*,J̓EMUxAdbM26i߃ʵ^X=,=ѳW;Wȗ݉P?jL A]$*,F!hMd@QxS,}HEpiDT$IT`J5 4•Cq{s5y+#뾴ܒτDEjk6SB}ls8ݾ a> J4K 3D:\r~P-x(h8A+Y^o{c\KHbi􈗼eTG KM^r{neް+pNdpU/:*2,⌎ޔN L^;'#el h):5(F{.Q:ŶTڼ,vf(0yK|tݱid6d*yK;yQ60{+%d}pO"kPt90Ǧ|归+ޕkܦ6);+\ #+ޘA"O_tKtD>G `ˆV]m=!W& |O@,\r.8Dm\_ƽxX0o33UA~b`uP"V9=6,&'no>ҲeUT'ތ]EH^1}g40L/;a{11S UɫcF qK(|C jN=JaXAx\ץ񄑸 Rc\=pa^+0mV["~L' ]A8LSk!~Ӫ'ug3HubDZ@/E '^t|C1F{L5dt.ӷXμq̘5 70ɻGu kLtFs FcYL^MqbG/AFf`GZu<@ 0hXfqEmnXћBKlEҙ ΠN>CE> y4gt1VQ&l(P<2V)#DR݉|_n-ywo7KgU<3"IO]37%{ѓI7.orBdq'v iYTO@apUÎTtSZeFNV%lԹce7 Iv!HPeӵ*Q#i~mѢ3lG;ߊr04z3$[tQcT98>sҁ GB*EXƇla LCBv^@ ,R&hR NpGt0X Lz lZ]8ݎ儌vátU(WOpJ ܢ&0hh!k.g_/G?M4!^֯l&A~0+:Z'ڀZ<勾X1X̩ːGG0fIIsA%B!0p`?g kk{uAFVuT tS(\3pЍ!хrKG+HG=> YȮM2dmI#BN}9hTA ͑;Z'5 $К9"M574iE~ŤInZSf8DJ} @7P!t~Û+hvyQ %:sV>~yo/ۋr53.bxtM&GRr_=&00 xXo66[A~#U k_/|8UNYJ`$ޞ9 j%O$h?1D}* 3femmf#49DbFCЈcKFW\#OKӊ;R3*.wa-n_\:+- hL G8r'sx*9XGZ D@qnXd  O#ŘHʌ%Gw(E}Hfd+70D<'LvЄu{CֹÓabzjJ;:{g=5f8XSD&VD"8vVf%I*6~vPڐ !J}}?X)8]Wn- y|#4!o}IJ;]<,#H`ّ-$("hVm(NŹ&;\jcA[`*& `~i =ς $gqOl yqI\KQ4^MfLhÏ+QK\rŒz;V, δal}E15KC-g *Eΐ~";sN+<,-ɴ8 ă.7R_cՖSH8? M$::$0a0FWDdo rwp SB-\NE;h_=)w޽*55;|׺XM5ÖD)y֥̅  H@reMy!Wk顨0EY{z0dg҇Uiu3V;!xZC?"P (cT>A LIJɩ1_A@ 1)}vt| sLTD+{؏iRs$N,KpD[Qެ+ʞHk*>ݤ|tmg>4)slM%K#)HNt>jʠjBbWGS~ZC{KqoRhg/{sjz 75.0b`itx,LV~o?UhL[(B| \O1?-Oٟ'ñX"W KӦjV1CLdi}޿Enx(qbH2219"6K0;bK.;riHWY @!`0Lט<\qoJ(a|R~Efy/y꾙(j T($Enqk9oh|B/BɜIAtGHyÇ*2JMcy%eqڤb vXAέ6D嫧۳DOVN_@$O^#%0&P2*v]O@Ys1͹FZGh+({uR 5ىoT ;c&(?~U@YWn)*!|?_x1nOR, ~Fe&nY3o}M=hGF){uHĦOٻjEfWkU ?ZT1Wx1?d,QpgZV²A^M^:'(TpYhΊ=BJZҜ ~%; !El1)' Gʒu+3Z~;sS߼vSo{E1P k:X+!> Y5vzZdwP!SDžϾdBf~Zek"a4ֶ8;NHclc}^1:ktިԓY߰"KͦX#.Ӧ//Mj >+)./@x$ȕKOCKb%qFP<%1-"fѯ_c7k`!o&MDSR*( uoCʛH%lͰT9ul3l|;zzZl*PЧBΠFud,ZY$ ىJW`_ ThsH]x C3]zw\NO1nc^֮@wGҊ/py G`ZFh4MW(ĭ)f S %n|/XMxBN6nBezqȒd6لnUPE\%.|u|Z0Z<񄶪AvҍEI"wm%-Ifh!#_ k lS#=ug&yCdHp2MΨF܎"k ,׌_}7II0kѥ#M  P^_AezY%lG(,T_ޣ H#Oͼhڳ ):u[!ǣhNGKMRqRt)Obn <\N%8`6-WяC9b6@g[NA%eRIkDDj~;m̻O ŏ,Gni!Ej]c]Տs(՟.512w@V? pf#"Pdgrfo03xaqL_G,vD 6lqw-:9ܔ:604⇀qu=]R^׬[nUs9M_>1OiO<{GVߙGu9}ep|DW'Zpd&}Z4F}5AP1"[&`Dʘi =?zFhar@!eü$40@g4A>JM\~[]"s&v!78 BrtR='==G}D~Ma 'P3cqmGJu(1 [/p]ªTa^nrqҫ/Ri=*}M˹c3I3s߉$<.N۞ .i&#͡|0yj x{4ㇸSIzJ!? Na̓6W f1tiY`h{Ϊ ;>X&c0Ji![Mv:.bőeyd vժ9ƋtSxs w? %Y34. dK6sCp>(*AS_UpEuԃvN^tdT߂#^5.F]$ .G\Omc}h9I?g5P_6R4X T?$+hGubvY-7<3/gt,:՝UϹfH8ξSRvNcf4$YgDwĠwKʰc˴Q#)޽qsXqg{@݁,&sQxM/Yuro(yK檡9(7V?EQgD =:w8|\I7VV]hU=+Q!a %⣝[%@k\ӣjD S1F2p q[zK##6w~&ڣVRW1/xw(&c Yhnv\'ZƱ.8xHᶊLz`p$0˜ L֙>iAst)O7Kn1DȖjb*^+>*畂#5w\Ck[ y ߓC еb 7TGZ,;`Y0N*YO%LWS[WAjpiƇ–oC+]n ~t*SR bMTqDž8R㦫 lOG<3~bSW*KŚ!qd`ז$3GSp08Co8@ L)qL嬦Z8x蛍pP/vxESi' .7l F{5+so邢P:A u_/s.zm(_JɣczC[7797{1LUe/O D*N RәS/fP'"dXG^ޛpF\"m6'I`Ù@E y1v # {OҴ",җCxOna`ߏV [8HffG/9s.,?A8Gn6ŝ?*"G}҂N!IZɸe &wt@WuS;!ywL)Ub[i /̳ĖP\OI2Dq70m('I`=X10FZwR{]$֕Q)Ƶ  ]mbWT_`#`/e$5MA4" Up">qh΄V`bĎO vǰЦ^{DT >sm .dYDƭ!jr7Vz_ ۇ=p n=LX8&}Pn|m $S0r@Ah{-'>\,R ~I_Z5~V48Ո֞%Um"bzե'!9'j揿0>4T>d:!_?U FJC?0] ȺQ4["(z~tYkE10{B{?ӷ8~lהF4K 5 N #Yt'Я-jyCzl]m*x-!](4F[rE#"<zץJP[0j_u+t5ró|FJퟻZaw3;GaQqƈy6t tEXqZD%nnO-\s m9naRɚ_Tdw} $L6U78G?L\l;j|;^T`H07q)/0.e~вfe [7ѷ>{y} U%2Na+uN/0TMtTU$2@şʕ{JvkΘKg#[!w5gm(L _Vjg!vz{~tbY7V@t@cDo{'SjVwEbPr鶄4^^Z%6l3RR`iuONȍaM> e8b ] gtEJ^א`2|Ĵ3ܵ{^!e)u~9c̈ i,Lu#jm|f.e* (L{/RHnmX֘iҾߑ2w!2({?Ôio 5.d?r թ*T4Y#1{3 ӏ= >Ug<-m7Gu# ErDϙn$e:fߔ[IduE΁BFއ;=@݇甍GA@C7deOrw/E|dU?X-QU'eђ3e!퇎Yy҄a1crr`Q#!ygY+()W.gGcxVacA3Q1,0E#D~}/wx'uB}oޛ2jbQx#/uk7[=#&hg.E,QLC0 MoӅ3iPTL%CT#eoK]$7*j$ItވLnkS ,QI65Osff"OtK[zy^shuv^_! v@ E%wm$2ʪJdJ!SwtZH(^_oZVXwZk_v]t3 Xz ,4^QGVSt"M,(Ydra#g!n(( GV< La=˜EJZngSg} !Y V~aج&r!l7f=uCio` Z§1ѝ%ݽ}Lcq0fn-|p]V;2S0+s:<$'rD>L>r{2g騔m$fsJw@C%@@.4ʲH8eN6'{*cŪR1pD(Wr]r'7 IXIt'(ac~ϯfnJs(#CLqSCZf>tK& i"% |Ya%rK)rIQҙ Wdkwɤ߭mg2,9SD`"P q TB5O:OWSR'n2ψƥJTkhT8qDS3؄ TD%,RK~Dad++OzP ~ٙT"G8*] qpr\'l@o  ('H[90i1kVIS+ xh8o2.^Dn>Ur*ٍ/ F<Ǒb+VĶL _@F3SewAH!ݯҧx7Œ3%0494$2d;dEd$ fFApt#Q8j"ؑ$ׂ4HCmD\0I"#9!iaeuXqCmXBW1ϖT%A3Zf3HJO!RNYY2-O@|a s[MLgdDf0.o&_Wkjef3$|Ed yڷ7N ]~lOT<H:67R%o;G}n%Aj>?D;T|c ^sf+Hv 钁8a[&y" ݭ.%EdfnjA|ENwmsۙV]H9Lڊ+g;uz||lcA4Zq#򥿼L8FopKFZYl f0AZxR''w5`y˔-_ԓ8D p^%J^GHASϔYj:n NkR%3`@,4|Ӽ9MJ-S]΅ ^ŷq3̱K83-Octo*V.y ~xe#gv[BR'"Q&zX3BF4ZYpZ6,X<'/3| {ai[C9uXk6quoN4#lI.I7WO$Jj*mi;3[A]JObM>ո̅jKAEj$o2(_H^vhF' )ANz3 O`as'pIA(OZLSwf4ܔ锖 )FZΛ x͟Q;~ƀo4K̍; ;[҉]Ě,q:;sb*X!-zOn$e.9-I.캙&j8ެcy7NC?ȼ; Ȇ(7Z*:-v^SQն [ ADw8rڥYpӑ22GTi{݀. 8^ |0~׈V H6]8O 'Hk kw¸(bQ'YC9ӪZn B%X2hBG#hgnߘ Qҩ9Ws t;ܝO\!Ywy;o; &`c}^@6=]PM+&d)Q* Kutm4i.B[͛ooϜѵF4|_ZxCzzaωBiChE*@"u;-W?Y2XQN.4Va_Kce΄N|I _~  5~Σ+CӶ?3XSXefQud-TTug妁x*~oz+Պ G/jz#uq[7P1E~3~vvdC̴ܻj1C 'Y P!}@4"!I`wΒ&L$+>_X7 :9EDjp7u%^FS>y֌ j վpBnWf 9e ksǕG,DV 9C&!`)^0}}