From f00e44b1caa50888bf0526af77214e7d398a673d Mon Sep 17 00:00:00 2001 From: lars Date: Sun, 15 Jan 2006 22:37:23 +0000 Subject: [PATCH] Mail::Ezmlm release 0.07 finished --- Ezmlm/tags/Ezmlm-0.07/Changes | 3 + Ezmlm/tags/Ezmlm-0.07/Ezmlm.pm | 100 +++++++++++++++++++++----- Ezmlm/tags/Ezmlm-0.07/Makefile.PL | 28 ++++---- Ezmlm/tags/packages/Ezmlm-0.07.tar.gz | Bin 14854 -> 15391 bytes 4 files changed, 99 insertions(+), 32 deletions(-) diff --git a/Ezmlm/tags/Ezmlm-0.07/Changes b/Ezmlm/tags/Ezmlm-0.07/Changes index 69bdf62..fb48afd 100644 --- a/Ezmlm/tags/Ezmlm-0.07/Changes +++ b/Ezmlm/tags/Ezmlm-0.07/Changes @@ -38,4 +38,7 @@ Revision history for Perl extension Mail::Ezmlm. 0.07 Mon Jan 2 22:12:32 CET 2006 - new functions for text management (idx >= 5.0) - new functions for language setting (idx >= 5.0) + - new functions for charset setting (idx >= 5.0) - new functions for config directory setting (idx >= 5.0) + - look for ezmlm-make at run-time + - requires Text::ParseWords diff --git a/Ezmlm/tags/Ezmlm-0.07/Ezmlm.pm b/Ezmlm/tags/Ezmlm-0.07/Ezmlm.pm index 28c6a98..6c04e4b 100644 --- a/Ezmlm/tags/Ezmlm-0.07/Ezmlm.pm +++ b/Ezmlm/tags/Ezmlm-0.07/Ezmlm.pm @@ -41,6 +41,7 @@ package Mail::Ezmlm; use strict; use vars qw($QMAIL_BASE $EZMLM_BASE $MYSQL_BASE $VERSION @ISA @EXPORT @EXPORT_OK); use Carp; +use Text::ParseWords; require Exporter; @@ -61,7 +62,13 @@ $QMAIL_BASE = '/var/qmail'; #Autoinserted by Makefile.PL $MYSQL_BASE = ''; #Autoinserted by Makefile.PL # == End site dependant variables == -use Carp; +# == check the ezmlm-make path == +$EZMLM_BASE = '/usr/local/bin/ezmlm' unless (-e "$EZMLM_BASE/ezmlm-make"); +$EZMLM_BASE = '/usr/local/bin/ezmlm-idx' unless (-e "$EZMLM_BASE/ezmlm-make"); +$EZMLM_BASE = '/usr/local/bin' unless (-e "$EZMLM_BASE/ezmlm-make"); +$EZMLM_BASE = '/usr/bin/ezmlm' unless (-e "$EZMLM_BASE/ezmlm-make"); +$EZMLM_BASE = '/usr/bin/ezmlm-idx' unless (-e "$EZMLM_BASE/ezmlm-make"); +$EZMLM_BASE = '/usr/bin' unless (-e "$EZMLM_BASE/ezmlm-make"); # == clean up the path for taint checking == local $ENV{'PATH'} = $EZMLM_BASE; @@ -134,14 +141,25 @@ sub update { # Do we have the command line switches ($self->_seterror(-1, 'nothing to update()') && return 0) unless(defined($switches)); $switches = '-e' . $switches; - my @switches; + my @switch_list; # UGLY! - foreach (split(/["'](.+?)["']|(-\w+)/, $switches)) { - next if (!defined($_) or !$_ or $_ eq ' '); + #foreach (split(/["'](.+?)["']|(-\w+)/, $switches)) { + # next if (!defined($_)); + # # untaint input + # $_ =~ m/^([\w _\/,\.\@:'"-]*)$/; + # push @switches, $1; + #} + foreach ("ewords('\s+', 1, $switches)) { + next if (!defined($_)); # untaint input + $_ =~ s/['"]//g; $_ =~ m/^([\w _\/,\.\@:'"-]*)$/; - push @switches, $1; + if ($_ eq '') { + push @switch_list, " "; + } else { + push @switch_list, $1; + } } # can we actually alter this list; @@ -162,9 +180,9 @@ sub update { } # Attempt to update the list if we can. - system("$EZMLM_BASE/ezmlm-make", @switches, $self->{'LIST_NAME'}) == 0 + system("$EZMLM_BASE/ezmlm-make", @switch_list, $self->{'LIST_NAME'}) == 0 || ($self->_seterror($?) && return undef); - + # Sort out the DIR/inlocal problem if necessary if(defined($inlocal)) { open(INLOCAL, ">$self->{'LIST_NAME'}/inlocal") || ($self->_seterror(-1, 'unable to write inlocal in update()') && return 0); @@ -410,8 +428,10 @@ sub getpart { ($part ne 'conf-etc') && ($part ne 'conf-lang')); if (open(PART, "<$filename")) { while() { - chomp($contents[$#contents++] = $_); - $content .= $_; + unless ( /^#/ ) { + chomp($contents[$#contents++] = $_); + $content .= $_; + } } close PART; if(wantarray) { @@ -511,7 +531,7 @@ sub get_lang { sub set_lang { my ($self, $lang) = @_; return (0==0) if (get_version() < 5); - if ($lang eq 'default') { + if (($lang eq 'default') || ($lang eq '')) { return 1 if (unlink "$self->{'LIST_NAME'}/conf-lang"); } else { return 1 if ($self->setpart('conf-lang', "$lang")); @@ -520,6 +540,42 @@ sub set_lang { } +# == get the selected charset of the list (idx >= 5.0) == +# return empty string for idx < 5.0 +sub get_charset { + my ($self) = shift; + my $charset; + return '' if (get_version() < 5); + chomp($charset = $self->getpart('charset')); + # default if no 'charset' file exists + $charset = 'us-ascii' if ($charset eq ''); + return $charset; +} + + +# == set the selected charset of the list (idx >= 5.0) == +# return without error for idx < 5.0 +# remove list' specific charset file, if the default charset of the current language +# was chosen +sub set_charset { + my ($self, $charset) = @_; + return (0==0) if (get_version() < 5); + # first: remove current charset + unlink "$self->{'LIST_NAME'}/charset"; + # second: get default value of the current language + my $default_charset = $self->getpart('charset'); + # last: create new charset file only if the selected charset is not the default anyway + if (($charset eq $default_charset) || ($charset !~ /\S/)) { + # do not write the specific charset, as the default charset of the language is + # sufficient + return 1; + } else { + return 1 if ($self->setpart('charset', "$charset")); + } + return 0; +} + + # == get list of available text files == sub get_available_text_files { my ($self) = shift; @@ -769,12 +825,14 @@ sub _getconfig_idx5 { 'owner', '5', 'sql', '6', 'modpost', '7', - 'modsub', '8'); - # "-9" seems to be ignored - this is a good change (tm) + 'modsub', '8', + 'remote', '9'); while (($file, $opt_num) = each(%optionfiles)) { if (-e "$self->{'LIST_NAME'}/$file") { chomp($temp = $self->getpart($file)); - $options .= " -$opt_num '$temp'" if ($temp ne ''); + $temp =~ m/^(.*)$/m; # take only the first line + $temp = $1; + $options .= " -$opt_num '$temp'" if ($temp =~ /\S/); } } @@ -880,7 +938,7 @@ the ezmlm mailing list manager software. See the ezmlm web page (http://www.ezmlm.org/) for a complete description of the software. This version of the module is designed to work with ezmlm version 0.53. -It is fully compatible with ezmlm's IDX extensions (version 0.40). Both +It is fully compatible with ezmlm's IDX extensions (version 0.4xx and 5.0 ). Both of these can be obtained via anon ftp from ftp://ftp.ezmlm.org/pub/patches/ =head1 DESCRIPTION @@ -1061,11 +1119,14 @@ static function always returns the default configuration directory of ezmlm-idx $list->get_available_languages; $list->get_lang; $list->set_lang('de'); + $list->get_charset; + $list->set_charset('iso-8859-1:Q'); These functions allow you to change the language of the text files, that are used -for automatic replies of ezmlm-idx (v5.0 or higher, the configured language is stored +for automatic replies of ezmlm-idx (since v5.0 the configured language is stored in 'conf-lang' within the mailing list's directory). Customized files (in the 'text' -directory of a mailing list directory) override the default language setting. +directory of a mailing list directory) override the default language files. +Empty strings for set_lang() and set_charset() reset the setting to its default value. =head2 Get the installed version of ezmlm @@ -1129,12 +1190,14 @@ that they know about nothing :) =head1 AUTHOR Guy Antony Halse + Lars Kruse =head1 BUGS - May have problems with newer versions of Perl. + There are no known bugs. - Please report bugs to the author. + Please report bugs to the author or use the bug tracking system at + https://systemausfall.org/trac/ezmlm-web. =head1 SEE ALSO @@ -1142,6 +1205,7 @@ that they know about nothing :) ezmlm-unsub(1), ezmlm-list(1), ezmlm-issub(1) http://rucus.ru.ac.za/~guy/ezmlm/ + https://systemausfall.org/toolforge/ezmlm-web http://www.ezmlm.org/ http://www.qmail.org/ diff --git a/Ezmlm/tags/Ezmlm-0.07/Makefile.PL b/Ezmlm/tags/Ezmlm-0.07/Makefile.PL index dde0885..d28f315 100644 --- a/Ezmlm/tags/Ezmlm-0.07/Makefile.PL +++ b/Ezmlm/tags/Ezmlm-0.07/Makefile.PL @@ -37,21 +37,21 @@ EOM # guess default $ezmlm_path = '/usr/local/bin/ezmlm'; - $ezmlm_path = '/usr/local/bin' unless (-x "$ezmlm_path/ezmlm-make"); - $ezmlm_path = '/usr/local/bin/ezmlm-idx' unless (-x "$ezmlm_path/ezmlm-make"); - $ezmlm_path = '/usr/bin' unless (-x "$ezmlm_path/ezmlm-make"); - $ezmlm_path = '/usr/bin/ezmlm' unless (-x "$ezmlm_path/ezmlm-make"); - $ezmlm_path = '/usr/bin/ezmlm-idx' unless (-x "$ezmlm_path/ezmlm-make"); + $ezmlm_path = '/usr/local/bin/ezmlm-idx' unless (-e "$ezmlm_path/ezmlm-make"); + $ezmlm_path = '/usr/local/bin' unless (-e "$ezmlm_path/ezmlm-make"); + $ezmlm_path = '/usr/bin/ezmlm' unless (-e "$ezmlm_path/ezmlm-make"); + $ezmlm_path = '/usr/bin/ezmlm-idx' unless (-e "$ezmlm_path/ezmlm-make"); + $ezmlm_path = '/usr/bin' unless (-e "$ezmlm_path/ezmlm-make"); # return to default, if nothing can be found - $ezmlm_path = '/usr/local/bin/ezmlm' unless (-x "$ezmlm_path/ezmlm-make"); + $ezmlm_path = '/usr/local/bin/ezmlm' unless (-e "$ezmlm_path/ezmlm-make"); foreach (1..10) { $ezmlm_path = prompt('Ezmlm binary directory?', "$ezmlm_path"); - last if (-x "$ezmlm_path/ezmlm-make"); + last if (-e "$ezmlm_path/ezmlm-make"); print "I can't find $ezmlm_path/ezmlm-make. Please try again\n"; } - if (! -e "$ezmlm_path/ezmlm-make") { - print STDERR "Warning: No correct input after $_ attempts. Continue with warnings ...\n"; + unless (-e "$ezmlm_path/ezmlm-make") { + print STDERR "Warning: No correct input after $_ attempts. Continuing with warnings ...\n"; } print << 'EOM'; @@ -64,7 +64,7 @@ EOM foreach (1..10) { $qmail_path = prompt('Qmail base directory?', '/var/qmail'); - last if (-d "$qmail_path/control"); + last if (-e "$qmail_path/control"); print "I can't find $qmail_path/control. Please try again\n"; } if (! -e "$qmail_path/control") { @@ -85,17 +85,17 @@ Mail::Ezmlm module. EOM $mysql_path = '/usr/bin'; - $mysql_path = '/usr/local/bin' unless (-x "$mysql_path/mysql"); + $mysql_path = '/usr/local/bin' unless (-e "$mysql_path/mysql"); # return to default - if nothing works - $mysql_path = '/usr/bin' unless (-x "$mysql_path/mysql"); + $mysql_path = '/usr/bin' unless (-e "$mysql_path/mysql"); foreach (1..10) { $mysql_path = prompt('MySQL binary directory?', "$mysql_path"); - last if (-x "$mysql_path/mysql" || $mysql_path eq ''); + last if (-e "$mysql_path/mysql" || $mysql_path eq ''); print "I can't find $mysql_path/mysql. Please enter the full path\n"; print "or leave this option blank if you don't want to use MySQL\n"; } - unless ((-x "$mysql_path/mysql") || ($mysql_path eq '')) { + unless ((-e "$mysql_path/mysql") || ($mysql_path eq '')) { print STDERR "Warning: No correct input after $_ attempts. Continuing with warnings ...\n"; } diff --git a/Ezmlm/tags/packages/Ezmlm-0.07.tar.gz b/Ezmlm/tags/packages/Ezmlm-0.07.tar.gz index 0bf6657f368b04ef6b6debaace06563547c4a958..a237493f1f6069a5d89c98ab6f2358a1e702aad6 100644 GIT binary patch literal 15391 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 J?!^G`008*u2P6Oh literal 14854 zcmV+hI{C#PiwFR$Xv9MR1MFOTSKG$6@4xn^m>8ehZvBFUbQKaB118bBU{l*9%`GVr z_5eDuC0CLmZp!)W_qX@V=-~&DK-$%HE~{y5X=cA>zxR;lAEV)@Qm@v3sD1Obe(L!7 zVSSzd#?S2E{CTzh_~~l>>65kfC*RapSJ&1aeRuhxHf{5U%Q)yGe9{*Tx2TGStwjKx3y<>$X5 z^44HOB+kBkDORhG1x{eSR)1WpuZz_u8>{OZYjtrxnTqDevB+n$lR)BQcoaIrU}J-} z(;t5`yCS+$ilK8_Gp}pW+v<2E&OBcXWN71s@Xo}AcO^nkIPTeSBHg~k{_sMIzUPM0 z4S5NDH}v6)9SSE9SH2TsMK${dAEbF*%nJMzcG|5y>*Z0WS)i}ax5V+cfecT^c6bq# z)sj}@K)n@uN#Ot_ZEUbT6!fCk%}&>9w@&st?Sld@;@4oKP!=oV%y9>S$m>;V%dXY! z#jv9-2I9a8!W7z1VyAs@*lBjVy!iYNXAIcgqrE-r7yYCluJ!KzP}*)GwR_LnZ>p`5 z@Pwl=mS;2sFGb*uh(}-upu3k+c$x~u zWmQ;(;ZTJBR6rbJ1a-^u79fzrp>qx*VI49EWFRUe5KEjBFQM?A^9wLA#?e8b|AxB( zU04YILg@==Genym``&0A0*%>;ha)Jt=blGaY>zc%#x_OJ#jYy7gXdF#T0n7BiNT&#Q) zxx~_1%t)?uI~={-8GO7a#QW0}v;RPFK9j2zV`b1HeO_hKb=PCdVO2SmP{#?><&Fn= zN9+U+YA)^mg($98tE=_cv!u}|{VEm`dOZ~bhpff(r$52DCedil@H4bwCFIF&6+`4% za%>%iknKY(-cuEa+Iq=%oZF6@a9V`!k*LV!2qPxvJm?$ScOmo*(efg1;JD*SDC{$G zEcp}o7Pzi)7*vJWK|FQb3C!Aol&;j?Kvb*M1Uc6?xXu=w#zG(RGsP1qM&JzKK4#r! z@4~D&B_U*^gCK8D?#FZ4r(In*IN2~>?YL!50(@`CJ|;RsIH@cLI7p(V-Jkah?}@||jR{S%K+kwAZ9gDYL4I*b;cPTU z`Zf@}Uj&me$9e4Zls;WbKX9O2NC#C4hDe!(*9l0EG_z$=(8b}MQ%DBgA37APi=%1q z`>@2}jw|7B8*wM^ebl0$;5X6XUF}JpV(moQ6A~Pzrm4@sa(d zz#IEhf?DjG;|;N4&AI0}dc>c9rf|vMMWK+~ztA>k!9DJvkCG(T9NRRF*qb% z2^I0iA?fIhrVu)#C{#5u^J!?;*-XaBdzrwA!{R)PB<)Nl^8m47xhu$IlqXmc8hRJR zFPMc<0s`bkY%1e)p&KKc#S#)N?wNBw@u{ARt%A~5?2euJirBXMAH-xVsHUSQ-dMWD z=Kmh-AHYdJi;A$4pkflqYVJr`AaKx9VOB6~C?_i1{39iC2Gu(_gsyFwWmS|-)qFm; z2worCLwtg?n4B0AViqdSXH3=>&Ou8Cus4+(?+-l)g1@Veywnt0yPiO_aTpK0Xb?K# zgakFm@78DXOQo?~$ndkfFihgQfn7k_icLKD^xJWs2}Lp2Z5{{TJ;$G43%PgI?|-7d z@NM(@Q*sTtnM52ZY>Jh}B=j6NkbVfyeL78cBd#}-n0`KJSo^nNiq|lvIDp=YNhDDn zyoH(0q53X`Dqh2=V&l9kDy1=6Ell*kNp0XI92i?}_8`^UL=l|5&fcm2lj#2$m=E4# zy0QPaT7UZV=@ah%)z==^pVl9LQ(s+sy1w@R{lCBBXGJ`JxS#Aw?1?H-&IaXrg0E{& zYxVWoTD|@_tDBByEq5GO>$5G#Rs5G|Ij&$^`}E%w%SJN1@CE^UJE<}&7&!&7p%a7w zFWvFRQ|`Tp;!a7d{`ljM6@p(DF9ETE#L}ILSN1TFWzj&$>d?|abR-P+QVyzspmTvh zB2_q@oWr_QM}{n^ z7(lAzKtp0d^ZD?`1o?`kmUMWRYmeldih*2}P10MIxQ$m_&k+#M59oyKDRobvBLh`a z4Dei%I#Al|AqPb+%*dseSS*!F;~Ar2dzp0#td-{_DT zA9W7fh|t8|uGQVyZ&(M-UF51QU=_{R%~nrzUr_^^PyF0y+>n~qwQ|b>K*l(;$^$N%OrQ3o!8b*v%4ww+g%pcQMXwJj$VV1 z6A(xWukm^NsB4kT=-^sC)D1_6J*(X+;h5h*D&W6?&ATk#c8eK?fZCn61ePSh(l3iQ zubOy{Q*J5VdYuM|q6^vW^pXpK6Qb-TI2Ent%Y6$1-)Yj@HoA)F;kRXNYT?I98M&ses&;)8!18F=t9l{r$P24`mhnmhIsH=ty z5TU%9HKJiwc|ZX^Bk3W-r!={ckkNV-83n$R0*P&TPO%-e7x+NUHK3Z`RCobaWM_(? znWoOoB|~NvhaM<)fh#B@v=$p6<2r^Wp1SM4rbaUR(!O>sdRzFc@gNESy^l?xqN=SVv69z$PIgNf@QrT>#sP*FnXD5B%^NW?$vM6v? zt4I))fx}6t&Bs_Q6s?9#Hj3l8=UUw}n<6~ZI#hKO_C&&NaC6g#Yk z1b;;EjDpgkIegiJ{rY5#vzG&CT(sc1Fw~vPPzR3zblq_wq6G>^8wn%pg|ZI7SdDt! z>2;(QNo&dA2_^HqIlc0EyfD(0hU&1ARk5v-w_>vfTd=skjRahGeTx+-(r3&_)DW$h zOZdm+aIie9r%4F$SACrE110zPyOs)hqB`}GxzRj(>iM6NhdOZ~+8L27(G*s7R+m$$ zHD*A{vQSkRA{-^juS@ZpvH%hs66~7es_20-2xd3pVTSBOd?*~#$IU0Jk9mpm!O{7V zDlDa)Rw?394Z{CiI(|3-2_!PXFPCv*ls=6wt+AH`hF;7msP4IEGTgkiTKnxCsw8q- zsWUbbF~fm{JWSG!T_eOBPCyS6G*&UgL3PH(D{aDqoSqe^o~7O$ALtx)kq#w;;!ISH z>>&=8N8r`OOn?REaj!-QUH(qO*sF{|CgW`pn>@1ClOC)Y4 zY!ptJn%g~ML|}>23;m75sbpcBM>RSEuqdR zO9{?}*yoYkorTU|KNa?^ZtsNe>?zAzQ5h>|uqYQUuWYC*ElN@*v16S}Q*O^h62`sAu1s?A8M(zha{%Mi7oN@51Dp+y zS?_o_>4=&$#63*JOfeA$%9oNFD5f*6?k1>_$+Fl9wN_3d89vi7Q$f+E)8R?6GAP=` z(|S6D+q?_c=$VzcDJJAc8r+D$q0&COn^=Jpt=4&ImANb^;vh#VC&j<*X;_`uI{4HjXr6BchEQ3*3Ra*_Na*aSsAJ^dw!O z+0rQ}Mc~?RdmEJ^$7%gEMLtE%j3Jd)7mo*}4TN}v*}3)A=OQO6`BhQKuN87?XIA}D z`lisQb9hv^{uGI!tAcSwoeSHA>9)xE0I$q_uSz$z5+_{qWj7T z4Y~156!Ib$pX8(N<|EC`5_Q!CNF#VN_NZ(qs`w&zVKke2HFq*Ty(2cbj=pfE=RD?D z7ZzC>iIu<47+P@QoQ0eBHvO);Kpvq^b(J&;I(3@Klv6DvzSpnzL=6eNNXtH(jpH)PpQHAA$^ZkEaxtB6Muw2=Y&a}ofno$v6!a2R>HJSn4gM$w6OMKXptE8vu-+S+E(XZ#a0)5z8TVyZ;%CpqDt9HKC%-1%zN1K0JAP3sX~6o;t*z`i z2f%!OVF%%!w*G}?zO*H97t=PqBO@?TOsWKjS?&|*6EWm-qeL%E2%DBKFBw5=Zb=VB zlT?oAP=zDaV~PAh+`T_N6T1I;HWzWZfW3QgcZY0oHPJqGgBd@;mxyfRAB5_ny7zDq zy!pSvNoY?0Ic`D|{10&yOzmIjDpWxId%T6=^^X4Ho;-e@&*({L&(($G3yx#yjZt{p zexg7bm}DcFWH`ZHe8^v6*fioHVqoCv0}XvY+t_*MJ&Zkh^`+Zv?KV49vi}WEKr`}n zoj{sTD&6%8wgXnSqCOQKJ{6an2Cs5&@dG7M6Km^FOX3j>r1XW>{56PP+zww%?49~f z3^_JVD~K&`>;=@3qg&(Bx2gTW7ZP`yhn?n5qu1QspqS5ARpC)taN$jc188_iQ#UpC z;@;(W?0cx*X&_))cSHMJ+cm%wriESN&on6w>dS|9x5{g&K5NuDID$p8j4Q3bK%6t4 z@*dK>kB_>aFe!d5k)<#B{<=LFIjU{@Rph9#Jb)Y(q`yOs3UgA9yX46uN%EBhTYR97 zya~1sFUf&)rw<`Vg7bGsk?`IoLzhMw-qo#AWNF1KX+k`_vZsOm#n1uGc|02JP?cY z(yX9yFW*y640s8in#UFCdN)s1GIZoluUNzTS8XjjYBTPORvRCS}!hh{c4R&5lbF zo09DEcqggCnt`NJ{$G2~+TFHsWxg7}Vl1gk(jg&|5~Y~3y_PM-RgY!+SWeoWC~+VX zl30@fLy(r_)cx&yU-JUMhaXMP_6WO;MPQzH?#$fx{R$A)PD-pLDuOsG1F^w$JuHLc zT6@%d_^`>`r4MRo*tw6g0(6i)){U+)K3Rm)RzT7FXfPxS9M7j&1UHnb>Yn{|>tsPA)%Wya=KMyO4W{wPll(vItooH?~q8<_%3)Ui!CFQmk{@IHZY>y~hjYMM0v-m{d%_7!O<=chm9QP=w z<<46yVE0C)GXEqnpq+cnVq0t8F-zUgIbtov;`zC7jfzlwxx02s`4h}(Ne(h|S|b#Gr*a>)d8Hh3R9qi&du({=lqUUxV{ys0 z)|zQ@z)~fHNe^;GjAbHAX1)PaS;YPCAlc#Tn=WRWio4<)P$Es@T$ex`4+Pd)iG~pWGn8B zGO5EmJbV^hM?MnGzqKq?Qc4fxw~#Xwr>aX5FqZ>ONsJ%&TBd-g_PTb2bqg6it={)n zLEJJNL1HCyIOXa&MmHk&H(bT)bTW%Eb_)~2W;0GCd;^sh2`?{-9@>)Q$|dSrOw^e& zCe-KWA8FMV(u$=79FvhgzM+ohJ;roO8igx;36SRzxKM92J3g4m{wz! zU>NDdIFzlcJ6rf(8fb}SOZVq{-P7#bYKX4cBv0gt%&Ea0Rew6|pN8!3gH>=Q3oD@Oo?po~ zbD~l;ZzZ=}y3smu0w}l`37@%V_C-4FqmvwIURq3A3Kg_&mKDxlyqYct7jU#XL`r8b zaNOwJR-30`q2Xq+VOZVLhPU^EQawtuND;XRY;g1`#~Q}q*ay)xq5$<%jxhrx)xk6H z-iSO?J61(!zYWU{i@7ROj>2uMbae=J3gcxXGn=+y|Do4wI(e7Zr52Q_HsTZ;vpK)# z9`gS-4KBrkBDSLD@fzAaP>@r~Fd{T|V3SlRctYhgySG_mt_3>zZK&NIYsTRXKS(GE zj1~a@pk+0wv$6~T)<Yj1+k1O8K)6*%77%$?rA$M053h_U8mBP{xnDuKvV-v0zYtWlkRpy-j8#Vv9y& zAw$WJ9Bq(TvP%@Q3+}`1WDeR-RM;~B#Z==5!Pi48XNr5 zKwATeL6q?pu|GJcNQok8#?NH<)1~ZV6dHovY{@NW%}8^| zB4>?9g)lmcCu_kS7nrCQ08B?uK;l8++-p|q_y#-1c&70LUvBZsX*Pu$9O`HIa+_ZQ zMa_je{2LB&{I$cs#4;D(?3y>w9lrQZhap;P++TxpPC}3Z0mA_b`Z{OqC3z>v? zmXDeAo>d^_J39l!@2A6IG|7fhc3D?;uW!KUfCWdAEA9`bDgH6Y2PwI_Ooyb1#5gis zj0S-}r9Pbf$h!I+;Yy+f5FO+E=Q{j@8Sa|9ySvy6NkprM2S;ySzMdO4gu9#2y;rym$_@CIezzRbJ@z5Xb8A#$w>Gjc`4yVMWYIROap-06w8k>ahKIG&m za}G$380sK@C90@}`wK%QW2|$M#&|XROKOV!Wue~rl6rhV7wcVcJqw|KDIrl&w9q)c zx|eOLLao7)-UhH5*Jaatx1{3PFzUU-y+*l@7MnsB8XwM`3%{Z13`?dnS~4o_R8gpy ztkPp#(&Kp9a#3LCVu!!Y?GU3k17?);HCfV^Smzh&Wy_(0-Vud*(O;)nwy=&fxg&HhO0v;x!ixHtPCg z-{(VmmKfU+-Q6@zvBVkNVHl_wJs+}ngE5@dOdacTRm`aX$9tt0zyDCF1&*p%Rq>n& zLsj`8CLZo&X1yxh7KZArasvc|jlrgzsScfnZwIv+-o`?zO)1G7MW#|$KvQ8-5aGZ$ zmqdBQB=n&~0{}4&(2-Hiec8a+7Lyyy!xebpqvv1!-@9DIA<=;p7%C%sdLAh zNTfM7!bHDyEpf4&2_Q|H&>s)zYO)c^b*{oq37E=Z^0H67phS)O_2a>wLpbTmt5Qx{$wQE1?XrcO7YA@|+%zxdHs9&b4sG1T z62N)wu93h7K(|s=GGh-uEsn2Hu1;j-2hxiTr>NwO3ridI7+?u}-`lr`FAm z>m$l)BJbK58jW0JXJd)D&+E$T)a4v& z1zb}Lux;+QYGo5PRlJGE%_cELKnJA6GUG8I<9UkADWzVd47k*kP0KClGfoHSIuXGD zRbaZbv65Hn>6y&j#)QC|1cu!@_mfnUOfrF9{epr(Gu9 z1b!5+I>r4M1D12hatRxtW4lu}`#|@+`(|P;kj!P>v^KE0J-+b@84zR;hSX4zlqOuJ0;rgu1x7)!F$EegYv~ zqfv2+3ru*D1;zlQPN~=Fo1KJFu9#w>yL=qX&i`FKy~kNRYjeNU(OxyV;kD((BAZ*9 zF0Yv}xiHbxBrqMtrS@aX(b@$DY$fnw)La>2fd?^~a4wdYMqf7)+$yDjjKii~tVTt* zHn*0NG?T6iXpVSLNz${lfAbj5cQ{MK4^hQ~F&A=T0xbH7`l^&n_5ul~U_ef4Q4Etw zZjMH1Yj7N?J~H@IQReNZAQv#wy&dY-J_O?w>%NQ-n>V0d#Nd+_k*$f!kUr2$s1HvW ztwcBHE$%^j1voE&askFX90D@~c^bXLgc}MO2{MQ_@TFua8k)4nNBIzFE0uEVz}cuvgsV2lFFQ~HN1ZdFr_31m_*>=qx>z2mt>`GnPJY9 z;g<{PT_ax-NnR+3MGD`LB!+Kx`P`3KgFeEy+$SAD8$OR-eV{et3=LY3YjH3#3LKpy zD3c^X`G|kCAQKAL6Xes@@KThd=13>~cw*h)Fv)Na8r`F`HFcd>274wz;Q5dOO{aGB zeZ=W)GCzT~UTh$O(#z?{6ILe{u#M>b^q z`QX}%$_^+KL|&2olds4bIxsSBvLWf9F6dA?c_SaVA{KCJLmklZMQk2pp)lsGiL($f zX+8#-OO%)88X>L{vyovOCu96oZ2@9oNMLORU6U-(CGYWK!ev>uTF7C)Svu09Gie3J=&{2Z0LV5ITTFwZFz|g$UOUXp6`?ar<+!XX4q_&!rA|Eph2;LA zqB^iOUnUv^bmdBLewq;+FpwlIsCdCdwvcQLAl^c zV}r4@WNmUoC%P}(AV(5LoA&0}4QZZbW&v&?C$@VbD++!mC0|ah537xwAcJ5eyH#(( zUX)a(oDh>`0<3q2FS7kIv;Qd5PDb01%&DhjxLQS&3*e?BGpK%i0T&-9I%cG0KJF}K zyo3%+LTNx8Ir1Ec2Ssw*=PpF+v6p{Ifx6sxtU&PJAw}cAAyQ{AAPSWeAD?3q0h7Cu z?L+V)PiHV@Shm?j``E?8F5v2GOJ&sx1`Y*#88Is8nsr5jqo(9Q!L0urC0@%Y)LGaN?a-1(85_0;quTqGuZTm?J$6N(cHtT<&0#> z{m!;4l{$A<;{%Bb)HDSuzX~uHXL+5=a_Z;b2{aZvPLZ%lFAunf{pVXhaeXdxCv2(9>|U;n>p)aR!mWTuB@ zU^Ym)Sh_pL*I|$!NR7n~S>0azLX|MD-_-rTzmYHCh44B{2_W`UYlI0k{Mkfdkk5?X-8mOA4i&;caO}YX!#dE21(V4 zlF}fuw^Bq(9Z|tVk+LC1v>%vzXu2*)EJ@6!gqF5F4wvTAlp414BCx=bZvYZh?VxMn z{M~E9kK`f4F$#Q`kQ-^GAD7HOw<&wh!sUV)%-x^?X<`Z+)SZ>8`WvL~U3_lj1VAM~ zGk6tf)i8$+pxbK6f&iWK)FP?4oJ*YwIdumf&?EmowCyP5?$KRp74=-~90Uh5B*-`45LDL9h=v zCXk*0+XeS>CaPwP1J3LU*(iJdbfKcd&dLgqnb1TcFnXk$ms3<@F7j(A2SAJ=rbV0R z*Tu~xN^Xe%3m!G`SVIR3(oqrsGNKJ@mTGc45I9lB$=ZV(}jm1bF#K{)!wsLb?$2UXp;%UmW&Pel*n zbz)SkhRmXx^@7$5M)N&kK3b-r{4k>91(z-(c_?jl{78<`8dV9!v<vkbf}*q&i9y2|l9(olug9qWw+=i8 z-c`*dS+QKrv+5ZnIh+sl7;k9)C}II}8>bP5A-0slDW2I_{$4aImYcEcXcR|@(->aA zxbJ6Er86IQYu11UQ?R~<>$_qxO?&n%t;AV;lhW;9_>upd;$>WCpZ!n8edZrrwhu zo}t~(am1t5V!+HW=>R%8@#tbin;fJLUtxL?JbcIz>}+;n5+QLuMtiQE93HCu=O-_r z5{;tTsnz`>Q~yN8SqpwiLC)1cZ){R1=O-(KTS&r-r4G+;G7F<#_#xW-7tCBDlb9mD zF^~6}gvk6lc-WgwgKxg#!^BrJZ0>Fz@4qt40Xc{8)$;)5j^TJ193Q^f4{t`puZoGc&wt`^_rI*_SMOul{@>ni=lB2i zPWyKM{}Io+zG;{|Y>jM?K)9c$>GWnC z-@SWR8D>|wP^qEY_)f{nmf4vJMG*3|A#yqNByoyr?dKd)e1YR-E4L? zn_HXBj%sap;s4va3Mf|CDPy$}1h3=w1KJ(1_f5QPGKn`f-mYi_2yVbG;7(6wiFygl z%vMXa+TG4~-PVq3-M@by8PWzYyn~AY+Kg!tpfP$m0}h~lox#xf|Jq@TnrtieSNQxF z;LF-Os=3?k-0!xU>SX`q4NjrS?e6!{>cdf;YI{emcoN~7u*Frax2@acM0Jx9rY<>6 z>N+z=-NYxUNq6`*CQHORTeQ_hA?sN|a~3ksxSj-Z@D}xGb~J2&;~Kx!m17o1ysZ=9 zT1LU^+4nhXntK+Vqogb$L9nqCs2dvrY2Y~OYnGjiuaT*f6dqM010d-f3omLeutgkb zqsQc>s$|peME9WO+)~GYI4AK~wE^#1-R=8bSk~NXvgbTWmc{B;uWWF~{py*Xpe;;H zLF}|uQx0TBCt))4-8Yh4HoktvlVV z@65or+=06yF_s`2+FDijll~;WQm>+sdT<>j$>8zD5QCRs{~;_?7|kBl+}1P*s?kL> zNGLjwSjrO)ArQu}EpJp6*kHBOZ0`Z;T+GtPSv-L)JiKF@> zBms^}j7ebL()>H>B$~oh;1KQL&fea2w_(Q}F)>#?Y|5(o7l7x}bcW_Q z>cKGX|07Kv^FKIb9|#6L0h}cZ&2#T`c3XSuc{It?lSvfMsNFOE>+xtDUz6;?YnQNq zlDK2zM*2`a>7~=DdV(j&gX|3cd3=#(XgW7(pnYZ3r?q-SSaKXe(GyfwXE37&Bl!7v znv4hG+2DiU8(UnG^_S=VMK*fal=bc68MQjCj@LqjvJRZOhf`FvwY%G@h04hZcz%vj zrIGdoL?L4*;;r3sOQwlYphnPluvF`Uim+L zk$>jn(0{_+fBild(|@h)_RcQSe{ezp_1D}Y`fs~+OaJ{55Bk4;wI^6tf<&;9td}2< zY7My6H=Fl2=_+4WM0HBhQmV80U3aVLP@U@>(K4F>m&aOGNBOo6pP#1V8z3Ps;T(8c zBf7F)5INV8JX5c+RHk0XcnzW{-?|nWXEB_#cx1BlIFpliG$Laqbn4DYthGd!MnJqU zTof0RhzzsgQu~Jp@2BFBIvL2Zf;u)7mzlWcxgaibzPruIKE#=Wg?t+g-okiT|$Hx&YBcIj?wXCmT=BT(sQm$3%K@`Q0<@N z9iMO1R43{fuA^U(j?ws134--`4{!tu_p{jY(IrlSGT@@P81&dV7tMCjpA;~NO!9&a zR@86|ui(kyv!fU4ceU|PP7}-()>>hBA2U9wkHO)K1ND1VYJK}H`cq3G3XlCxwNBAx zTc?E{ra(>i_dW&%$5Q#kvF4?T=P6m&c6B>@i>7;+5XtIHF+`X4qXck!%IaLQ744-! z&!5F;*HRTao{c@lS#u3L+ggLF)m}OQR2`=Yjsl2BGp8+>5*ySJxy7g`ic}(9E@ufA z!&t`JKt{T*bpx9G)2sd-{qa3OuG{^7kn|A7{hBpnwQl%MiiG1#E5sS}kp@6s@#JFX0p0auYV;)bkeKm0AJU zx0m4h_7@Gx#;1*vzN33*eD}Tb=j>o-BD((SJGrxDcAYN=x$8ykde!m^2?XHHcb?O# z`yE3#+>Fv$<`k);5n?v=E3M!vjsSFCPyot*sZAcjscmkv0KT0i;M@5k@QFZ1W2=d= zxx@)w zaE$g#d`&Eq_|k640zQ4W1fRb9GJKkALrB2Ez(Vq&X6H~aA9RDX%LLq*?U>?JqK^7w zzpsA!D~ms^&TUC-7&c(1xGteme@F6D_heYA48~qJBQUTi!VuwmpT89#BW@)k_p^rB zvh`HevHvc2-jKMO7_rHA*J}D>x#L5m)m*rocNQ*YPX~G_4tTi_$=Xy}kz^CdU#vP& zyjx1D=VsnoJoDBU%zSX}XQvrOlXom;bUY{unb69XvLu(3Q(~^K3r7#j&1f;rd&ixU z8~E7)8B^7FJ{F+1ChcRGx^dk9c`g!bLE@r}a4W)Lp)1cPLy7r8nO}bL284_0yBrA1 zp|rIEl+0Ey&0hPN@WLct)ZSa2lXkIJN!5UH-K}O4z&Uf;UIw?tBGlcb5TlF>$;SKzEA(MK(wz zmvRhQ+UYdWpYZC>)D_y(^BYZilF7f6Dy6?plM|NiozI4<+ovlOZ=l`n72!(Iel5br}#8vw7W8KK|){HDqAuPdV|(tis>3|&(+V{|!H=mbQ1o=F^KDce7=6{iHUfMJlA z&j=5kEY!+A_Wc2pC_r}`PH7+!rFs!64F?<+3V7Rd@vyUTuXvtkgCs($E12Rz+M|dM ze1Va3of@ZP@iL00rqjtRp^5g>p6}>LdN3RaI=cjx@gJZM`LVeA998-}nQ2;AM=(E} z9s4q&wq-Dq#2^>5VT5)+7!V0fSV&F@4Ec-rDiAA=Ox&f;DHwW!kyX?g>em!|V`{5l zSoqL*=ZMb=*`f^2Hp$Idg07OY9cwH{(T%vj0We|ojTKyfv?BG9bNk#rx6kc!``kXa&+T*j+&;I@?Q{FwK40PaKe>t)vjFe_0OaD%VE_OC