From 9bf26ed4b065b12826fc2980ff277a2f3be25c1d Mon Sep 17 00:00:00 2001
From: ivan useradd -d $dir -m -s $shell -u $uid $username
is the default. If this option is set but empty, cp -pr /etc/skel $dir; chown -R $uid.$gid $dir
is the default instead. Otherwise the value is evaluated as a double-quoted perl string, with the following variables available: $username
, $uid
, $gid
, $dir
, and $shell
.',
+ 'section' => 'deprecated',
+ 'description' => 'DEPRECATED, add a cp export instead. This option used to contain command(s) to run on shellmachine when an account is created. If the shellmachine option is set but this option is not, useradd -d $dir -m -s $shell -u $uid $username
is the default. If this option is set but empty, cp -pr /etc/skel $dir; chown -R $uid.$gid $dir
is the default instead. Otherwise the value is evaluated as a double-quoted perl string, with the following variables available: $username
, $uid
, $gid
, $dir
, and $shell
.',
'type' => [qw( checkbox text )],
},
{
'key' => 'shellmachine-userdel',
- 'section' => 'shell',
- 'description' => 'The command(s) to run on shellmachine when an account is deleted. If the shellmachine option is set but this option is not, userdel $username
is the default. If this option is set but empty, rm -rf $dir
is the default instead. Otherwise the value is evaluated as a double-quoted perl string, with the following variables available: $username
and $dir
.',
+ 'section' => 'deprecated',
+ 'description' => 'DEPRECATED, add a cp export instead. This option used to contain command(s) to run on shellmachine when an account is deleted. If the shellmachine option is set but this option is not, userdel $username
is the default. If this option is set but empty, rm -rf $dir
is the default instead. Otherwise the value is evaluated as a double-quoted perl string, with the following variables available: $username
and $dir
.',
'type' => [qw( checkbox text )],
},
{
'key' => 'shellmachine-usermod',
- 'section' => 'shell',
- 'description' => 'The command(s) to run on shellmachine when an account is modified. If the shellmachine option is set but this option is empty, [ -d $old_dir ] && mv $old_dir $new_dir || ( chmod u+t $old_dir; mkdir $new_dir; cd $old_dir; find . -depth -print | cpio -pdm $new_dir; chmod u-t $new_dir; chown -R $uid.$gid $new_dir; rm -rf $old_dir )
is the default. Otherwise the contents of the file are treated as a double-quoted perl string, with the following variables available: $old_dir
, $new_dir
, $uid
and $gid
.',
+ 'section' => 'deprecated',
+ 'description' => 'DEPRECATED, add a cp export instead. This option used to contain command(s) to run on shellmachine when an account is modified. If the shellmachine option is set but this option is empty, [ -d $old_dir ] && mv $old_dir $new_dir || ( chmod u+t $old_dir; mkdir $new_dir; cd $old_dir; find . -depth -print | cpio -pdm $new_dir; chmod u-t $new_dir; chown -R $uid.$gid $new_dir; rm -rf $old_dir )
is the default. Otherwise the contents of the file are treated as a double-quoted perl string, with the following variables available: $old_dir
, $new_dir
, $uid
and $gid
.',
#'type' => [qw( checkbox text )],
'type' => 'text',
},
diff --git a/FS/FS/part_export.pm b/FS/FS/part_export.pm
index 7ae00f00c..82503c4ee 100644
--- a/FS/FS/part_export.pm
+++ b/FS/FS/part_export.pm
@@ -489,14 +489,37 @@ sub exporttype2svcdb {
# 'Batch export of /etc/global/passwd and /etc/global/shadow for NIS ',
# 'options' => {},
# },
- 'bsdshell' => {
- 'desc' =>
- 'Batch export of /etc/passwd and /etc/master.passwd files (BSD)',
- 'options' => {},
- },
'textradius' => {
'desc' => 'Batch export of a text /etc/raddb/users file (Livingston, Cistron)',
},
+
+ 'shellcommands' => {
+ 'desc' => 'Real-time export via arbitrary commands on a remote machine (i.e. useradd, userdel, etc.)',
+ 'options' => {
+ 'machine' => { label=>'Remote machine' },
+ 'user' => { label=>'Remote username', default=>'root' },
+ 'useradd' => { label=>'Insert command',
+ default=>'useradd -d $dir -m -s $shell -u $uid $username'
+ #default=>'cp -pr /etc/skel $dir; chown -R $uid.$gid $dir'
+ },
+ 'userdel' => { label=>'Delete command',
+ default=>'userdel $username',
+ #default=>'rm -rf $dir',
+ },
+ 'usermod' => { label=>'Modify command',
+ default=>'usermod -d $new_dir -l $new_username -s $new_shell -u $new_uid $old_username',
+ #default=>'[ -d $old_dir ] && mv $old_dir $new_dir || ( '.
+ # 'chmod u+t $old_dir; mkdir $new_dir; cd $old_dir; '.
+ # 'find . -depth -print | cpio -pdm $new_dir; '.
+ # 'chmod u-t $new_dir; chown -R $uid.$gid $new_dir; '.
+ # 'rm -rf $old_dir'.
+ #')'
+ },
+ },
+ 'nodomain' => 'Y',
+ 'notes' => 'shellcommandsnotes... (this one is the nodomain one)',
+ },
+
'sqlradius' => {
'desc' => 'Real-time export to SQL-backed RADIUS (ICRADIUS, FreeRADIUS)',
'options' => {
@@ -507,9 +530,18 @@ sub exporttype2svcdb {
'nodomain' => 'Y',
'notes' => 'Real-time export of radcheck, radreply and usergroup tables to any SQL database for FreeRADIUS or ICRADIUS. Use freeside-sqlradius-reset to delete and repopulate the tables from the Freeside database.',
},
+
'cyrus' => {
'desc' => 'Real-time export to Cyrus IMAP server',
+ 'options' => {
+ 'server' => { label=>'IMAP server' },
+ 'username' => { label=>'Admin username' },
+ 'password' => { label=>'Admin password' },
+ },
+ 'nodomain' => 'Y',
+ 'notes' => 'Integration with Cyrus IMAP Server. Cyrus::IMAP::Admin should be installed locally and the connection to the server secured. svc_acct.quota is used to set the Cyrus quota if available. '
},
+
'cp' => {
'desc' => 'Real-time export to Critical Path Account Provisioning Protocol',
'options' => {
@@ -522,6 +554,7 @@ sub exporttype2svcdb {
},
'notes' => 'Real-time export to Critial Path Account Provisioning Protocol. Requires installation of Net::APP from CPAN.',
},
+
'infostreet' => {
'desc' => 'Real-time export to InfoStreet streetSmartAPI',
'options' => {
@@ -532,7 +565,8 @@ sub exporttype2svcdb {
},
'nodomain' => 'Y',
'notes' => 'Real-time export to InfoStreet streetSmartAPI. Requires installation of Frontier::Client from CPAN.',
- }
+ },
+
},
'svc_domain' => {},
diff --git a/FS/FS/part_export/cp.pm b/FS/FS/part_export/cp.pm
index 58ac85e8a..d998c1d95 100644
--- a/FS/FS/part_export/cp.pm
+++ b/FS/FS/part_export/cp.pm
@@ -69,22 +69,17 @@ sub cp_command { #subroutine, not method
);
}
+ my $other = 'F';
if ( $new_password =~ /^\*SUSPENDED\* (.*)$/ ) {
$new_password = $1;
- cp_command($host, $port, $username, $password, 'set_mailbox_status',
- Domain => $domain,
- Mailbox => $new_username,
- Other => 'T',
- Other_Bounce => 'T',
- );
- } else {
- cp_command($host, $port, $username, $password, 'set_mailbox_status',
- Domain => $domain,
- Mailbox => $new_username,
- Other => 'F',
- Other_Bounce => 'F',
- );
+ $other = 'T';
}
+ cp_command($host, $port, $username, $password, 'set_mailbox_status',
+ Domain => $domain,
+ Mailbox => $new_username,
+ Other => $other,
+ Other_Bounce => $other,
+ );
if ( $old_password ne $new_password ) {
cp_command($host, $port, $username, $password, 'change_mailbox',
diff --git a/FS/FS/part_export/cyrus.pm b/FS/FS/part_export/cyrus.pm
new file mode 100644
index 000000000..110ff198f
--- /dev/null
+++ b/FS/FS/part_export/cyrus.pm
@@ -0,0 +1,98 @@
+package FS::part_export::cyrus;
+
+use vars qw(@ISA);
+use FS::part_export;
+
+@ISA = qw(FS::part_export);
+
+sub rebless { shift; }
+
+sub _export_insert {
+ my($self, $svc_acct) = (shift, shift);
+ $self->cyrus_queue( $svc_acct->svcnum, 'insert',
+ $svc_acct->username, $svc_acct->quota );
+}
+
+sub _export_replace {
+ my( $self, $new, $old ) = (shift, shift, shift);
+ return "can't change username using Cyrus"
+ if $old->username ne $new->username;
+ return '';
+# #return '' unless $old->_password ne $new->_password;
+# $self->cyrus_queue( $new->svcnum,
+# 'replace', $new->username, $new->_password );
+}
+
+sub _export_delete {
+ my( $self, $svc_acct ) = (shift, shift);
+ $self->cyrus_queue( $svc_acct->svcnum, 'delete',
+ $svc_acct->username );
+}
+
+#a good idea to queue anything that could fail or take any time
+sub cyrus_queue {
+ my( $self, $svcnum, $method ) = (shift, shift, shift);
+ my $queue = new FS::queue {
+ 'svcnum' => $svcnum,
+ 'job' => "FS::part_export::cyrus::cyrus_$method",
+ };
+ $queue->insert(
+ $self->option('server'),
+ $self->option('username'),
+ $self->option('password'),
+ @_
+ );
+}
+
+sub cyrus_insert { #subroutine, not method
+ my $client = cyrus_connect(shift, shift, shift);
+ my( $username, $quota ) = @_;
+ my $rc = $client->create("user.$username");
+ my $error = $client->error;
+ die "creating user.$username: $error" if $error;
+
+ $rc = $client->setacl("user.$username", $username => 'all' );
+ $error = $client->error;
+ die "setacl user.$username: $error" if $error;
+
+ if ( $quota ) {
+ $rc = $client->setquota("user.$username", 'STORAGE' => $quota );
+ $error = $client->error;
+ die "setquota user.$username: $error" if $error;
+ }
+
+}
+
+sub cyrus_delete { #subroutine, not method
+ my ( $server, $admin_username, $password_username, $username ) = @_;
+ my $client = cyrus_connect($server, $admin_username, $password_username);
+
+ my $rc = $client->setacl("user.$username", $admin_username => 'all' );
+ my $error = $client->error;
+ die $error if $error;
+
+ $rc = $client->delete("user.$username");
+ $error = $client->error;
+ die $error if $error;
+}
+
+sub cyrus_connect {
+
+ my( $server, $admin_username, $admin_password ) = @_;
+
+ eval "use Cyrus::IMAP::Admin;";
+
+ my $client = Cyrus::IMAP::Admin->new($server);
+ $client->authenticate(
+ -user => $admin_username,
+ -mechanism => "login",
+ -password => $admin_password,
+ );
+ $client;
+
+}
+
+#sub cyrus_replace { #subroutine, not method
+#}
+
+
diff --git a/FS/FS/part_export/infostreet.pm b/FS/FS/part_export/infostreet.pm
index c2386adb7..e86e82a66 100644
--- a/FS/FS/part_export/infostreet.pm
+++ b/FS/FS/part_export/infostreet.pm
@@ -10,7 +10,7 @@ sub rebless { shift; }
sub _export_insert {
my( $self, $svc_acct ) = (shift, shift);
$self->infostreet_queue( $svc_acct->svcnum,
- 'createUser', $svc_acct->username, $svc_acct->password );
+ 'createUser', $svc_acct->username, $svc_acct->_password );
}
sub _export_replace {
@@ -19,7 +19,7 @@ sub _export_replace {
if $old->username ne $new->username;
return '' unless $old->_password ne $new->_password;
$self->infostreet_queue( $new->svcnum,
- 'passwd', $new->username, $new->password );
+ 'passwd', $new->username, $new->_password );
}
sub _export_delete {
diff --git a/FS/FS/part_export/shellcommands.pm b/FS/FS/part_export/shellcommands.pm
new file mode 100644
index 000000000..e99c382a4
--- /dev/null
+++ b/FS/FS/part_export/shellcommands.pm
@@ -0,0 +1,59 @@
+package FS::part_export::shellcommands;
+
+use vars qw(@ISA);
+use FS::part_export;
+
+@ISA = qw(FS::part_export);
+
+sub rebless { shift; }
+
+sub _export_insert {
+ my($self) = shift;
+ $self->_export_command($self, 'useradd', @_);
+}
+
+sub _export_delete {
+ my($self) = shift;
+ $self->_export_command($self, 'userdel', @_);
+}
+
+sub _export_command {
+ my ( $self, $action, $svc_acct) = (shift, shift, shift);
+ my $command = $self->option($action);
+ no strict 'refs';
+ ${$_} = $svc_acct->getfield($_) foreach $svc_acct->fields;
+ $self->shellcommands_queue(
+ $self->options('user')||'root'. "\@". $self->options('machine'),
+ eval(qq("$command"))
+ );
+}
+
+sub _export_replace {
+ my($self, $new, $old ) = (shift, shift, shift);
+ my $command = $self->option('usermod');
+ no strict 'refs';
+ ${"old_$_"} = $old->getfield($_) foreach $old->fields;
+ ${"new_$_"} = $new->getfield($_) foreach $new->fields;
+ $self->shellcommands_queue(
+ $self->options('user')||'root'. "\@". $self->options('machine'),
+ eval(qq("$command"))
+ );
+}
+
+#a good idea to queue anything that could fail or take any time
+sub shellcommands_queue {
+ my( $self, $svcnum ) = (shift, shift);
+ my $queue = new FS::queue {
+ 'svcnum' => $svcnum,
+ 'job' => "Net::SSH::ssh_cmd", #freeside-queued pre-uses...
+ };
+ $queue->insert( @_ );
+}
+
+#sub shellcommands_insert { #subroutine, not method
+#}
+#sub shellcommands_replace { #subroutine, not method
+#}
+#sub shellcommands_delete { #subroutine, not method
+#}
+
diff --git a/FS/FS/part_export/vpopmail.pm b/FS/FS/part_export/vpopmail.pm
new file mode 100644
index 000000000..7a59f3259
--- /dev/null
+++ b/FS/FS/part_export/vpopmail.pm
@@ -0,0 +1,47 @@
+package FS::part_export::myexport;
+
+use vars qw(@ISA);
+use FS::part_export;
+
+@ISA = qw(FS::part_export);
+
+sub rebless { shift; }
+
+sub _export_insert {
+ my($self, $svc_acct) = (shift, shift);
+ $self->myexport_queue( $svc_acct->svcnum, 'insert',
+ $svc_acct->username, $svc_acct->_password );
+}
+
+sub _export_replace {
+ my( $self, $new, $old ) = (shift, shift, shift);
+ #return "can't change username with myexport"
+ # if $old->username ne $new->username;
+ #return '' unless $old->_password ne $new->_password;
+ $self->myexport_queue( $new->svcnum,
+ 'replace', $new->username, $new->_password );
+}
+
+sub _export_delete {
+ my( $self, $svc_acct ) = (shift, shift);
+ $self->myexport_queue( $svc_acct->svcnum,
+ 'delete', $svc_acct->username );
+}
+
+#a good idea to queue anything that could fail or take any time
+sub myexport_queue {
+ my( $self, $svcnum, $method ) = (shift, shift, shift);
+ my $queue = new FS::queue {
+ 'svcnum' => $svcnum,
+ 'job' => "FS::part_export::myexport::myexport_$method",
+ };
+ $queue->insert( @_ );
+}
+
+sub myexport_insert { #subroutine, not method
+}
+sub myexport_replace { #subroutine, not method
+}
+sub myexport_delete { #subroutine, not method
+}
+
diff --git a/FS/FS/svc_acct.pm b/FS/FS/svc_acct.pm
index 1e1cbb019..ea1107823 100644
--- a/FS/FS/svc_acct.pm
+++ b/FS/FS/svc_acct.pm
@@ -6,8 +6,7 @@ use vars qw( @ISA $nossh_hack $noexport_hack $conf
$usernamemax $passwordmin $passwordmax
$username_ampersand $username_letter $username_letterfirst
$username_noperiod $username_uppercase
- $shellmachine $useradd $usermod $userdel $mydomain
- $cyrus_server $cyrus_admin_user $cyrus_admin_pass
+ $mydomain
$dirhash
@saltset @pw_set
$rsync $ssh $exportdir $vpopdir);
@@ -38,47 +37,16 @@ $FS::UID::callback{'FS::svc_acct'} = sub {
$conf = new FS::Conf;
$dir_prefix = $conf->config('home');
@shells = $conf->config('shells');
- $shellmachine = $conf->config('shellmachine');
$usernamemin = $conf->config('usernamemin') || 2;
$usernamemax = $conf->config('usernamemax');
$passwordmin = $conf->config('passwordmin') || 6;
$passwordmax = $conf->config('passwordmax') || 8;
- if ( $shellmachine ) {
- if ( $conf->exists('shellmachine-useradd') ) {
- $useradd = join("\n", $conf->config('shellmachine-useradd') )
- || 'cp -pr /etc/skel $dir; chown -R $uid.$gid $dir';
- } else {
- $useradd = 'useradd -d $dir -m -s $shell -u $uid $username';
- }
- if ( $conf->exists('shellmachine-userdel') ) {
- $userdel = join("\n", $conf->config('shellmachine-userdel') )
- || 'rm -rf $dir';
- } else {
- $userdel = 'userdel $username';
- }
- $usermod = join("\n", $conf->config('shellmachine-usermod') )
- || '[ -d $old_dir ] && mv $old_dir $new_dir || ( '.
- 'chmod u+t $old_dir; mkdir $new_dir; cd $old_dir; '.
- 'find . -depth -print | cpio -pdm $new_dir; '.
- 'chmod u-t $new_dir; chown -R $uid.$gid $new_dir; '.
- 'rm -rf $old_dir'.
- ')';
- }
$username_letter = $conf->exists('username-letter');
$username_letterfirst = $conf->exists('username-letterfirst');
$username_noperiod = $conf->exists('username-noperiod');
$username_uppercase = $conf->exists('username-uppercase');
$username_ampersand = $conf->exists('username-ampersand');
$mydomain = $conf->config('domain');
- if ( $conf->exists('cyrus') ) {
- ($cyrus_server, $cyrus_admin_user, $cyrus_admin_pass) =
- $conf->config('cyrus');
- eval "use Cyrus::IMAP::Admin;"
- } else {
- $cyrus_server = '';
- $cyrus_admin_user = '';
- $cyrus_admin_pass = '';
- }
$dirhash = $conf->config('dirhash') || 0;
$exportdir = "/usr/local/etc/freeside/export." . datasrc;
@@ -94,8 +62,6 @@ $FS::UID::callback{'FS::svc_acct'} = sub {
@saltset = ( 'a'..'z' , 'A'..'Z' , '0'..'9' , '.' , '/' );
@pw_set = ( 'a'..'z', 'A'..'Z', '0'..'9', '(', ')', '#', '!', '.', ',' );
-#not needed in 5.004 #srand($$|time);
-
sub _cache {
my $self = shift;
my ( $hashref, $cache ) = @_;
@@ -228,7 +194,7 @@ is the default instead. Otherwise the contents of the file are treated as
a double-quoted perl string, with the following variables available:
$username, $uid, $gid, $dir, and $shell.
-(TODOC: cyrus config file, L
0ngD&+h&6-8 z^*}iz6KS>^ll%eLPAjbW*uR14-f9!UJcZkDOe1Xb%O~{Z;!typ&^EzDR2PAfhag8? zk9EhF|0T|`%pX3gEm*$G`ca__JbP@?7eiblT-a_*@JWhWBiQ7gcza-xYJQZ(%TPs9 zH@spR;XSsIK;$Q)=%}P9qUg?P)gU<fxdr42??pznaAsjQ@q)#=8Q(ReX( zE38(^ZSFkJTm^AF6KRR8)L-(WjXupK4#S$%K1jmzEC%nr0f#0RR!HS#9mzxl(p4<> zLmH7wu){1|2FFJgCXR?PI;lR$rSVE{=D2gR-TudTG7_!T$km1{3XqUF*#`@smIaVe zDYP `!Y7@4$|xY(>jdyNJJ!iDLhET z^ ewD^uDU9LSkD{YcS^CWWw^;o2PCY`slpA@>*+NP$20NyhbIR|OJCXLx835D> z6gS6xh m(xeAGG0mOXY{xczsE}>ptA3&!f zKK}y+!40`7NP(A)fSEX+j_Qwty19jN&j$ANl1o|(4w9kIY*x^A63R!wCvqo|nIdF* zpG 6SB0U2*EYIy?l8T4189}bVWv0zwBI_^9)*`I)6gCeD zjr~$^^@fm!T&XN!HPofe&^sW>z(&S(@C|lU;yMXG|3NU8k2Bc3uydR#pYY_F?b5hB zydIXRBhM-g-y3y-n`_$w?OD(s1qpU2upHb&uSbM+;jOspm>LoZy_a91sp9UjixBmU zwg>X?%24HOs5n6 Ve)xl4ha<_!DZ6_gOG*(!LB5hW7Fc3EoVKO zM9fU`l9DJ>S*3-w38EL5;CO0O_>T~Co1+sUMC6$Is9}ZN&=e9A>r7O_qynX8K6q6M zowqUWQ+?(>3Xw$u>mVA}$GCvT_c6N0@ugiXYdbFU;pfW}ax2i&RnRR(;Ng!&CktzY zE>t43L|#_v`k~PC*n8s }Ac8^SU*j+a$aL}86;(HssjKb~`A)zKo0b_x>s%IABIs&&R2 zdiD|1nuKy(=3_t%KNjvV_F0e+G#2bg;Cva`>!$)UDzw1>5>wR%ZeeV$3$eK26mL{Z zcq-V5b6DS80_I%QVB&6n?VY^kF{k8KWxV)J28HPb28HfsmE_`Z`%@J~^Zj-O`^JW& zqQ2){_2;eU^Be0_0<0bCZYd9O+{GPA-{Z8aA-`X~t3l4Q;|r|NhqzF;9stD(;uz}? zND9^AT=2``>ZMDtDU#?B-Bn{b46rzQ75gqvb3>sP 4vNPFLJoNs(nP@)S zat$*=HuPlY4A3`=lVqLrM0&*Wp#F222F;Z0MFck3lE&k}ng{(}`;5f|o7!sEU^3PF zX|rNfbX*K@aqR{S5_ouoB*}rXUmEkhIppOo8Eiw)xe7+`Z55{S+A$IGLymm#fL2Qm_ zbg+}h*>FWL^0Mo69~ApBQW5Lx1Wr~jskBswD=N=0pIZTR%%_;om$2;c)!2Z!I;*By z{ESozMdou7OV`QOhq2Qq0ja7<20vC ~(ziH2mRAYL9+i2mF^OV)HdOF1W3V zR8MfupHV4iy=typKbCUtfvnS<6O6!o=qV7wb%h!fw**?9SpJ$biNiUY8MomYGD)kK zZhI|i+O*MBIPcKD{duHIb^01dG?zxs8uAdW-MOz<9^_N0m;8C+*1W9!LnH+WJy}z~ z4Z`KqL8vM+A8oBIdu<~-pR6X2p9LNLRAVT%4UQG9;E;1;SvIn0!b3CW{mn4aB3v=D zG_DPf%HwT9zP#(;zwa8o`&y_;aKYPxRKNx(D+ywJgUSV%Wa>-pX_5M>URr+cZMrF} z6Z89ld#_gg%_RHEPm9`{(n>>n1P*PD1KGp#Y#jpji|Gj!|H7#rE(l8IsotasgD?c) z&MQ>TZ9Mnfve4c?Dk?9Za$)Dgd83j5U~HS09h)C^UgK)}e47_38_L5{!bEMER6cv~ z<~E711~`;4It% jes$Cv zbMfm ({=wh*UG$ylue(EtcHq^exK~7Jjw~T=!VEIe4*`$ zA*?EY(Tu95(Tti{{%GYcY<%jBbUyXPyRSm(;J$Q842?A;+8)XsW}lIo=T@fwK?)Qh z`Y7N4;h6VMB^#NH^IIs3N`Li-;E@)c2a4X^gBDn5JIp2Hf>N 4ds)O<_XB%e}u7RA#Gpg|HV{%7n@3QGpsps@87agBL*VH$?6sOnLS3CAn)js z`$sP0@6L0KwG;OW#1G*c;~!?;i3i2aa=LFP+*?)7i^ZqGS6sP|j#Ztk2_nYGq{}{) zo}8#wO>tVSEhN;yZQrXD_HCEH ^lPXILgW49*Zvc7T)IO z&)x3cvPOx1z>Qqi2g^I+w_wBfAXqrqpXW4>?tl8eH*#@p+i+LN$M(=$dYL}aDZYUT zU`Hw>CS>lbg1ynGq)dTyjnf3ezwIdcVDqgdO$ig!XMKu2Uod>K;ii z*e+52ZqZLM2{b#NbUr(h2L!?BHEzSOoCRW|8Y&e7nq1|$*d4-`D|WHi_TS1Q$EX*5 zd($3#pOsvhQWn!DhtVZ79d$CL>Cg~sFEym)#Y7a#!z7+93%l;>HBbjyfVTnLpK|eW zK3W3zE^&$2AN$^&;mo)YQ>xDSlR*hCtZfH4lji}8-?)tdD0&oXP?k_ncsy0Vtd^Mz z(U=}6r-HU;WAQ$=I%>gb6)B^Zi=Wc7VA4aZlvChhLiX;0UB36caQ#=%zH41W_P*wG zENa2{e7BAUt&W4I_YTL4Xdhvtcc|PVyJWJT8)VWsJM=-Jjhy0*?frl$fyDd!jP-ZF z=hMBOd1mLyFvg}FbXKo_cuZ^KuOCUSaosQV|C3zq|B}35!cD&csKeBL-Rqu0gxwPD zn5mslWIV^}J(8vV1IO3k32a!c^JDK}=vkoV _x$U;%7P{RLqwy`SA$X< zia;s&i#=kSnl|gwEOxjKH1qZjjTHu;d#I8XK@Iv&lD3rdF3ZRyi&EB+GYQ|-5;wu2 zcZ^vA=Z$yVD+;Ecex+#`#QiEGUsDfF#>Owu*JiUr)o3cYF4^NMb*j`|-pq~Lg?m~M z69b+&^627PQo08yd;i^)GL0J~3gL#a@G-j@$~Re41$<6pme~I0X`}z4@IU%6Xn{Bq z5skQCHq4xmL _OyqJ na{c)hWN8z!=Vn}hA5X{9F z@jawV)&D;6e$*nl1RaBoJRTeFyDYDVQrxwMjQNB(CleRlM{gBMe^O$86fyNLIFo)G zyB>qzh?B?J3fN|DsSuvzmO| 85qb1tl8~3&9%2Xe(@gKNd|blFydu}r|7!|A4r~^ru)W*yOt&jA z7B_h$qcNFrw;**=8EIkvaXmRu$2lCJ%hfwv3E>&mxj(Y%imq^UQX;hYOx$3^|2vfk zV$vuO(e=vuW0$P$d)+5T3s&M|o }ONHoSJ52oVg_H2|g*nd};>LFPCiHK2VRSv{?d`{oPeJ=j zqtBz+)1!@G5QvnsN{1mSemN;zg(#Z2AET6BnH4-sRK`w<5l+4K&Tf|N3Rafp+1%Jk zr(Y^jLe=V0wKa!dM%I!h9)1w7pw6ywXJ>+-G0O;;;&~g%YKUE_(1CT+y;_sCnJ)7x zuQI}sX;RzdJk>tKl$VwJeU*36MrIYmGlmq_9>Y so(9v^Tbky18R|2Ui;V4j*L zX=a*yvJtL1iT5JuU^Su(&-Yf=GsqIcb=n+5jZ*6#@m(>el}5M>Uj|f&KexY(g8D^l z>lOvy qOY3$qECzh`W8M^9Lf>{c`?amM*sdZ1NH8<@2bCRj8M_NiF9iYkm z>kD`aQL-Qp-(Jx!^b-Y0|6`idkqK5!W|c9Ms3e@)4+omFWE8}z+=?3WY >SHxqFTRq z9C)WWbJyC};f{R$c5`hi>gsVg*<{(yK-v2C=NV0&s_d*Hfxu~IhmMk9ZA_*Mdt~L0 zuCN%un!TjMY9595Bv0P <$h)dj4 zFxA3nu*eV_`)s5f2LCR-S#N$|rkX7AV==PHA6fE88Wxkv!+@VSawGewvrO9HI6 cYmKQCGsT~3sfuXtNz4JO zb?+AL$D$t+``jyom~~gfZ%RpHzU7*XZVl2yM-i67MbsL3cD$+CT*UPf$Z12JnN?>F z{-9 1GdUFto%m(FH2Q>bRm(eBzHc+UsjdlC3!AHU7K$wf%~5e}PX0MHe6&j_kT9N}|@}4|r31a#n0RLQ=X5!??p|!g>sFMlnRz zfpCX`ZkKx3BRCFOG5TXI{cY?CiS(jKGdj~k8b-(iajR}MGexWEj8huZG_$cR={WHP zA`~it4yEkH!od^pKD{(Su6c33xJM~D&Q-Z>5)gsv%=@e TCQ6}#24&zqLR-;lew#12$~)DHo_7v5A`VQOEn z c=y#XL#KsJsU=N$;<6C#q~9GM?Y8?_N$3mw?X7BSS2)HfZ2ROsZ0}_M*L8nn zKz(jVY3-SmBMlV#h )L&n&5X!VE`c^PYx5pZvER?X|0;(#UGo+*4p2}PIv$yJ1nA? z8WpD8(;{2~`=m|Fh_O1H6N5N)5QBsUpF(fjmY byz;XNRNMERTfU%8CTJ zGM?Q=$N9u0lS0L<7Qc>Y=Iq)OqwX>PmapB=1UMS?ax{bJn~O-Tq%Nf?HH$6Mm5;~h zag}ihTXBeU_ydd%4_NeA6owHUb-S0`#fA3QJ^ljvCI|6mNre9llKRkmKM8Mtoshw> znAK}E?_}al^39wy`+TJ2{i1xp1+cw@QDCxyoR!V#lu~A}2D-|SuaHWAo@YYTzbQEt zh_7J?t-$`$3C=GFN7Icf^CF6o(63}@lxD?mIolaqYiCOeM>VjQZ)Y*g;&vXcNp~Iy zKYwtjTQ*~ErWn+5%J8WYXqf5lTM+!aSu+zL1FsA3tIw0hbb09NsqLnpf**J>fW`|h zyEq@8T-OawmQau*OwJNJW$!m*7gAT0fzXXbm##5P1>FJUuL>*qd-)tnFf6t aP#H6MyYOVS`Wilcmlt6bb4?O~#qu&0|rRN~@*I`o@}E zT+7E=lD@m*R-ue^&yvS1rA)+1FLfqkR--pXeG022#%f}pSJs{IkL1WXG9;;Nf^@y; z#=5moz$jV4dR84}FOzwiJF}U49OSh7JH6+VWT(-I)>_N)F9EwaAvHrY-txUMwFu~4 z0~Zc>|BycON4@xqmu~BZvB|BE2HFLdm}I#6TdhB@_3=)c`p%!-#mx0U(wr@$J)91~ zlP&Bs$0x |~{!dxm(D*^w`Iz`^jm?Ss==f4(54u-D4rO979_qAD z2G7I_{|F6!%40Y|56aKSBptYM-WYKbO=@XO%J*8*y{jZzrhXEj&tg%;$xn8~r~jmm z!*rsrfg{2|zd5$K&vW2DuF82OTf0!!J(4Fde3ce4GR_0dV{g&P4gxhRrsbVhuRjIa z+6)8mcBidl(qjj8u!i=_i9}D56Er${Xafm7R)t!Oa23j&sM1&VSjnYbQi!C&)2wZy znQWT%Wiq3M7i`b&+Yg12ojkh|m<^LeE>gYBIG3XPXtcX#8?jp9x9odzH~0(dJoS6` z^Lx@CezbL>c9{H%Yl_HVMiAzsd$4Z9nGbFcNSvsxHL4IhHy}0c@OqXSO5CMNa)Iji z(+z0LuU&BCNOj6}t@p5P!)sGhvis@I5;=ukj;>@m@q u}yA49#EHEBOO*K%itw4qY1mRbh(kOeI|74zuTB@uDf6Le>Qx zqi(+~q>FtFv!?jv*)Iu$;FCrEK2}xVtZJv!RVh^|akw-+soMDLg)S#=&`Y`W7vwVo zEscKDuAtv0da%hb3T-Ny< B zjr=%-qBvdrU{BtbfgiEE#o(GW48jnqx}(&AK_FYLpqfGu(Hp5RT!kPlIq%Q7-^w@O zsd}X$CJPczoTGbk=XhdIqDQhd?xWH=B=V{?j#faWedX0AK+cVFgY}=Q>bj*z<4HSb zw^MFEhu)Bp5&AT41_486Q)pL_>DzBZf^r!RYKxn-v0q*@A%d%C;eU&2S3(@o@w*8O zB}ZWl+b$il80y5 zjI0I#W|uan6q9zX@O8I{w+=~c)G@ |bIu->@6HcIE^@8XO5D9VQ)ZXtXOA{yO(0)n8@Hm2?jY<_C}8U;PhZ zgIu TGssHc<@VW( z>6i;$ms0T~)BcVZ;@d-Mnkd8UVcCDVi+2jE{p52-L0U4}eb?}1EULA@t#oH;F{O@7 zY;AP0WS2s0ZFbQjO%4b?&eOk*NbfaY73K4qENUsSj~L?!AA7463m^MQ@p&H?GoCUG zCErCGXMsI@EJ R=G|MxNJ6$1YDJL1;;MzI2lBh*9`z_|RdM7pT|Kv0>n# z=D794$<^X3yhB> B zc4EdbOE7li1DEMSJa+tQa`%X73ih}J-hQou`%>a5XhgJ{=!gKA7M5#nTpbQ;*r)Sn zkbsPV-!4n*DM}#J>KpWZNE{JJP4Cy$KN@ucrW*9AWOO1W@~p<}3RQoTkn2i{wLzRY zel1q1nT?_c^IV7#94J+u!Bcr^YXjWQKjL%$g G#`d|x>_Zglq9Tx3$DdSchkXfLC*6l~iHBeFj_=c5>M zzI7MD= 2A#I$vaikdR+S!n7 z5bL`U&rOKw%R^{bKH(8*ECTPCC)rFxAQ?e=vV#03mc9o0_j=`k|GiJA>#fBv%&$un zGf;Nsn_ri$YFu9d(Jem!OfEhxZ8vYtc|IL+iS+Dd-~GMm0i9%wuG$?sL JMvI}o)CurZQ7WVqt!drb@-MJ7<5F_SX>V^7f=e29RlrEgtFg`RF^IUj= z)g%d~!Ot%*CdP6#?i3D2ph^!K>6IEp$~r&PbbAqP;Z(M3x{(=;WotpNHY;StZPzbd zs?AsKDl%qE`}7NEh3jp_>(LBa0NdLn` BZ@Ojj H@KFB)mbB{Q literal 0 HcmV?d00001 diff --git a/httemplate/docs/schema.html b/httemplate/docs/schema.html index 6ed96d229..07fcb908e 100644 --- a/httemplate/docs/schema.html +++ b/httemplate/docs/schema.html @@ -3,6 +3,7 @@ Schema reference
+ Schema diagram: as a giant .png or dia source (dia homepage).
- agent - Agents are resellers of your service. Agents may be limited to a subset of your full offerings (via their agent type).
diff --git a/httemplate/docs/schema.png b/httemplate/docs/schema.png new file mode 100644 index 0000000000000000000000000000000000000000..b3f00375ed466fd31dc84e15bf4c6a8042c2bd16 GIT binary patch literal 446146 zcmeFZ_dD0`8$bMN5|Kor5T$Hc$(E69*;~ub-djb95JFZ)_AGlVk!-TE%idcy_j$d% zKgaRCkNdcf
-gUFUV4kMr?(T(38Z@{$C26nGd6hCu4RxDp0))&YaT zdw_c!esbe9?p^rfgsrHQ3N9}0z+Z(w7|d0Sl=xj0r gyBykN44 yvJK4;;QhQ-6@C66|)}NOVthyBFO2NJ5@84ga3;OTM&;Ah0T%NA;UnF<`EsO;o zr_b-sR3Avmah~hR9%$uXy5dN}Mg2ycc9Dp&rZJ3ZKUEn$F$YDo$l7MA@cvBNr$9e` zy!d99_31AbLuDnO;*ZHiam~! zT*(Qz;Hoxl@cl}d7W)h}*)tf;<}!2_@ldqq+CMWFM+Cn<)72>c;2zZt__>H5+J9at zjW2jao^Z^e&0C=Hf8Y1>=*j}|nb0654xSqfcJxZat63h2xhcav_7~n0i?ZZ4WAKJ_ zH5-+E>bTA&3&~z(l{k=T%ZMqKAI`BUCot5_XGKri{*97`u_o~w@x@Vh3#njTQcaCK z8y~IJ=~9{bI-^TTOyZjt1a;0lIuVxD<2hp=rPU-P^TA#Q_cB}_PxlTx4#kF`WO%SH zuh~FQ1=EP;gii)3x#@7iW%*iy9tJPIjnIvRr#%e4-%m2$WzUz+w*R%uNEh1B-0R~) zZ|P)U)Pqt_+EbK{ye=luv^q&Us@fE(>F%=a649M}r>Z0?aDIP0T>Iy1L*~a?O|i+J zj9$`ahA~zAcyx5B2=>zOoR4#jnyGif9OHtrau_|&RM3R{_L{uzqUHZvCA}wyf~ErR zDfR;6E7@a&@XV_o8~TwJKl}%s*Dk{p=q?o~3e&wh#ih^UW_Sxb@hVr#QHp(^*lwZP z@?@iItK3&_)sjl#gt07(?eKrUbLZ%HSS!0?OEYw9^sa^7h?MQI*UxD#Z*_ZMCQN+X ztDu7Op3DcjqlG7JWrg%CA``Kt;m*fUkgh6dAfftqZj_XYO7RS%n^xxXa-NEl6ATd3 z@&?61{HccW85J7M%gPga*`ANp*nf#V4J7Sl)pTAe^L|LNFmsGFO} DFGkn^K$iD~>9YnQ47uHdRqw+fsp`s434?d|PxA3+MS#u43478*2Y3g4e#^L)d9(bz(%nsU1v7jBUj z>h0ct3=>Z-bDh}wHHIrI?qEGN^rix&jm9jo*MtK_=KhdDT2o{rSI4Li?<~^8MP4_) z-+lhS=VMM`7bz;Akdp7&P?>#e4Da_>1pfRN $^M(3^09;?4haGX9^qfIeEBHkhxH&}*`G9qp9@tD`-WMp7!1 z+VGTPsrxBMq(`*oYw2)D6M_8|1NV3zp~VXG=f5MrYIAh*!zCiuuqk@kQ%NSH;jAY9 zmzm5+%O`k6v|QQy0>7xudgj)<2OA?NG|krtgYRG0+6p>ZTX#}V-CFJs0ej92CEOzZ z{C%{#c#H+r5}*6~WhLB33s ^uCT$m2RadXxo{Y{^ z%hsy)a2G7+c+OLMQg5y#y{5uGvEKY-3aS`hJJ>YoCOSOCotLB5`oe5I#LYr#rD=Pn zCgcf|%mBxaPAkT#sbf)zEzvw|Iwi{;lGN_&9g=a*laWzTQTzV}atlb9E;tz;PDFiO zyW!fM?yM`BbtP=A6V(Qy@(gT|VU*zztL^?VsLr4@8cLCE&Z$;26}@puP&TbQireg9 zuKK|2=Q|qRGCSU-inX2`UDqB>qsqP2rh#Hh&y8+%*Ud#;(YPDS_u7-Hxn-Bo?9gGi zS$jcu*|&QxCqh;itwp1hljEH%D^`BY_vIV4ecXpiNqG78eDug3lz+}mDEB2}ev+Zl zUv1A3JlnfO5sF>Kt8%DVD*9F64~G%mTY1o(YOa^eo!g1$o?&xM;GbXr)aj__6HO6^ zZHIepaA$qDl{z-h?WQL`-j>2W%N>`fWNzJ9);V9vJ)JM@XyJk|aGDi%?G8ijPb)4C zlhPOwl-OLH;T*Y`5$ej2XujjYNmiZD$Iw;LQxr*{oQtp8>i!_FS C(Zq#Ahw`N*Sk4Tq#XHc*5RPPj(=Sdw06GlucT(t*uz-9JyAMYNnc8 zET8?4x8#R=Q^G-l|9;D`mX2?Y1&ugQ#a^}$zu+Y9tQ#FM=)9tB)y@5ZnD1?gDfSiV zpJS1@7l%f^Var=`PK)aOf5|ctAFXQ6RBzR>$qTI1Lgdv^lA+a7)JOAy!AKWB`u+-5 zXT)Q70skWN)~|>vyT#I}k9NPL2&^ft2E_L~*+9Q%9C-xoyZVaE2No+ghX*XH_p5dn zFW-9jm8WVYV8Eh08 W;dhcmT5iqgVO5j zv60>3&3?F-)t6&L2`MRt!xhfOFo+mlTYy(98@ZnQ5!HJJBUSEWf%w<~h#Y|$mX22h zmmy*0L7-dKc%Qk y;@uo@ONz&Rn`R>c2VSdH5+v$YpJ^ zrFh6;V75Cmw|uee`3amKloV(@?f0?Bu=%>y0~0_4w7~#Tefw hJuD zP|MYGUnuOYg0U*6%I~j6R1d;POFq4PR@XdG+F9O51$T Zw`vn=P7xV7N{Jgno zYB8ZTaGZgyV!5Wx^I+}7IRUHb_5>!itdiM`%wdQFm~Qi~v - FJqlw%R-$mo;tV4kzzfoC
2g0PK4<@wT~ELuxShLQwtYyF^^c4s;`AS6 z8wH{5@jy!cAC$T>=LK5~d*0l+!&YV(?Bjg%@Yf B567;`?(%-sM-V+dUU>b)>u_PrY$t543bF{1$ad3 zt>sLOI-Xh0iRdj`9@(-Mz2 9_%Q* z)6w~CJ-H%v-XN@tZ(H&`S4@`Oa0ovGi!BO&uaLq(R3zgab|H!0#i3lU!Ds7A@6Lgk zgn>} e4u#FZ;OrVtgTqqqmghYo|`-;lb`X!S!}%tfpFH%N-W_ zJ3dM3+cePK{OI%;tteptk&RL;$5i69RJ!~HCyO?p{@d%aAHq(mr54TXtY*TaF%)qK zX2mBGT)OoK`Xx7bDFxn%_XL-3lk}O^`kr5#YV%xc;elxxi2wWGi}al>1~W_2se2ts zC|~yKd+xK>U+JuL-GsD#IRE?07)$ZsDs0C=i09NekFvdt8wt#pg}8ao7wZ@+ ~D?;FSe)UXKAJ> zHa=*$;3Ot{;Oxp&bvQcE!|?0~F=%3&9>!L$V{M~i_mrM1Jy5pmDcP9GxW5szK&OjBpX57s9`63) zSMToXdJB7WHZxZU8ecLty}?}lYN8s*`Kv_~LT+1-+=e+gGgot-rbhU6-lR>I&Kpi4 z?RUIhW Fl(RCSjtAR;~~~sM5ig|m-VD0*01nMeIP6XU*V%}e71^P#_jQALBbw; zTPv@x*!VWrq|lkMwrEq~Ee(*cKPQ_l?Gc*0wx)g6Y;Za^Y|t{YIi#Y~Rre(icEP${ zqdJs^J2RdEpE`ds&;2?5rM~ `8Fla z%-U6#($$?cABvSO^4Q;jIr3Z_EJc@_nVQ}UyyE=r6xrJ=ym{Ki7S^xt&EU!L(=|WT z 5VV-RIcN}l2p#)!9Mt8RBp@PP<%iks#^A8D?oU7nj)OC)KoQ&ATp}cP@Zn- zXLk%0dVt7FED`plK{^MI2Cc|sw549rGtH&pO8mkQol{({(L9!VC036ZvrRh^C19`4 z{S3a=28F76f5CELpg4%1uklk)zMQ`am9#XmX}IKMn8US}$$x0QDWcFc`rd_`8MVel zM(U7?ez;>j>Up^7DGbzx&uZpr!Yf;Ghud*+02D4W$$I_BH|b1Sw@_^p+I^O*R|&h} z-%IMfKajXbVBW_916MPRY!tpzmSO82mJSp-TeaO{X&5FOeS3kYdb_2 }ci@d6iy?N=YpZg#kqPY}NJltlFA+iOvBqUNT=C|@ z&DJk-)h0zX7)7h0W{rwPjbyuhyl_;u$b zO4gV(S(L4>8UjKUUTfy8huvT|-CpwKSX2TEq|w?p_++fI5hS6HH)<~^$ilq=zA#lu z>0Q44OryfdnlW`Y5_aZXcJa=}91m;&Wd*^FD6<^$TMtF%dJeeInqXA;JnK(lygr~B zx&$a_ydiXq@Fax}Z7?nkP_HE?OwNZijKhEMoBT>b`)N+euBr=g1Ru;H4z=6ots5rV zMbDfek?8?!g>I2WyJ#K)a<5+a;0vHvYLBhIFLBNtbOd?W{eJWsl16&Y=J8tk;QQju z105G!XH6}9riIX07_r2wZ|A>-f!wMc$OTnpy5$bm^`idadZ*gn>m9agU2DsVk-hP0 z;MW!m3Ih6uTvWl+hL8$Uya^eo24WX(%DX}2`#n?A)va{fUR7aKWlS}#^CN{DQ39}o zoQEb@2S&QTySdbpt?h1s6XiE(mpI+PX*p1#4xL!55+j$i#U;A8+GZZAF74Arnxq_K z2yq(|V*yf(Ve^NM6uD@~eGJf8O6W9wCt$ZoP+f*@j&!FvN|VkxG)GB&O)pW$Vg5I} zSx**IZiUUvujKRHHfzZTJH6HNuv9Dc)NEbXBV~mk&Y0A5biO>UYYbx1uc|<>YG(tX z(B;41+xV9%j-5EY4o!go&k2I`=Qn;$izhaxbCelcIB7;pOr(?<28IkcH;mo$r9w1a zd}J` pCvVEf zY&CPXiSuYyx@@Rd?{vEh-!|<^6LQ}{xNmo{+;aaVPTqK|rLFQO3Zubazl+d@Gd9G| z$1`|FA(V|yd485fk*JD6vEaN$vFGj|OwFVF81qHTZY8#fn)|=ywOpgECn&fMENSte zO%nu~zWYWuZS){S9$;R#NeEUbg@B*PI+I|-0lv@@tnuDsbU4no;NaKymQhtH_5CN& zUHpsG8szmYXRnUp)@VtUp}ZA!@d)xlMWlja2CE&w|1O2)F+2aLcM9#m#f*0YswvY& zg@MtG&Du9z2Jb1({a|#KVNT>pgJEZ 8pK`|_akO{cVb8)2B(3Q&@FXk(g_?f?9 z2FjVlKLYMhUqtiEo9>5Ti*e~>YpmrrFZoANHV_+mpL;xt+_csvQ!olYu}>@ z9eCNn&YbJNdCjMx0Irvd1}t3v`jE*BZgkPwrY3205Jioi)XQAIu1Wudfp*d^P(^I; zfzBA3JFasFqOhDRPE)atKv^%(D0uRrb$l8)i07kLZe~6}r1Xeu(s!lNy@us)&Sg!2 zSDstnsjJ|Dy*joni{(ptX8S5tD%BqQXbxdNUQiJD(o=!QpvL8WgXej#a?c)h@UQpH zeY>}c4OeCq>4LPW8)~B8p-s;varATzXkj2V_N6PQLeA;8A$#ese>q2Cpn}%LtUY;R zT_m6=%s*D1QTa6?<&S{Nn>%y43LgbZp>X r36w$_-m}_^7`AEY7*mdpFDu5w2V;|GoA^m^xydN ekbFYE z{)&6`#uXkdz9iqaoQ{vT(DJ`rB?C>)x4z7N&gI`cxg$x7I6IC6X_-ozx!R+IgHNwn z^HkN2tA&q#5A- yj&j8z_!D;@0gZajd`)Hv? zC$Qld1nJ!l(%K@u*JPGiZ_b4qvQA?GJgB %rB2Z*8)Sn>s8ia?tT`o_lxKf~tKux6^x@F0q7eEe@ zL^5+fuJt{Ie{s#;*&xZgq+(1H?O!%ClHWf*)I_vGfG5IwTl*-5B&RnPWUZoAqF$U zmAeEygNnUsH)DWkxEa$ ZaXsILBl4{UzQ_~P0=8J% z>N| X$ONsRul9vd*Q&QVoY3ttUpAt#QS|ZWE zfX3*IMKMlx!1~HX-)_ZwcJfV7_l#-Tt>A }uECv_)ji6=N;>r~#&N$Y@n`OFM(K6&DD4o<>Yk#6E^?tA|7$LTI|b&` zY=Mn?kI_6DiyqY}AwYZx!a*iYl!zf#O)Uzj_E)8Ur$ofU^hcxS^!>~>@qXh_D{{_I z#=rib+LKjIe^^4P!t1{qygEz13bYlZ{H8GHhstM|rW>vhoPSC_aZh`j{X~m)_5~BZ znVU=G4svG1grpa26E2(;lWHi3J78G6vDmleyyTS?AluDHsstg&W)EJAneBU2_Igla zI_o)w(VKp)JMDH73P}XLw{vMzH? _g_;hnBgP z^1f}j7Nfir3yo3sC&*R0Dy`Yd&B;4I`F^sQbqMAQBs#CyHxhG-nD|BBSGLD9w+bsZ z?;(kB{K4ex(zdVlrYh=ZLp$RxnWS&bUVfD#o-T`uQgbgV@FFtpd`OjupMbW9LcnRc z#s^<`DUcI@#*r6bv$U;_QpPsC&`NJwX>q`}W?E)LlRL;F+L5<9M~vsqSb^8YM4^1O z;0e0sZu?k2d|eQ~So7Mn!dCR8x3HPO_zYIev*sK1y>^jR=Mq+Igl8V<`J-G oW}mY*W^*;o214%?93Yp zn_YvA1RpQI?xPn<=7+~ofr@}IJ`Ep`a;~_4fu5TvFzKX7^t^g6`nEY9O_p{s>!Jwu z$|zp!6Z3 mwxosIr>l(OtJ*Ohm zxM~L7w^0|h9V@)P3@uS^V^jkG265xdWNl8F}r*$X8P}%3zr}N2yj#genq5y zI;fc@z9Y$S*LVImUvk^+);)c*=75W0u~FlOH+f`@(QR8Iu_OYC{%(ISBX3>CC5KHK z(R?Yd6OGA=Hs*`njZ%pLfu+YMgudfBhoB4O{Esg9bT7aK+Eaaql9J=TbIb{Y)-u|~ z^4tsu7yU{{XoI+$%hRRo21H5yW;g+OK5j(-*Cm6yU(`M^&Nf(qW5;~a|NS&|O-hK? zu`uQx>IaL}dDET==hZLRZ#y)ZYr8d1#PVMI@B%%QBJSv+5TXLx *CPxaZUzQd;O6s2Db!h8E~@0jzg zB+8Rt5-EK;DK~j=S=M7!rE1W#PC~Dx?0suS^X_fSfx(k4qU;gOoT^-F_G<5Zs^;+w z{4ZuG=X^%xM2iq@IK{i58mxg;!33IQYn)%T?|G={>C6@cEPp5^=qj0-U!HZ8R~DbD zvx|<-CoT8AMf=e<+uWbJSoGtG0{RApj6(Sa^-oP}YE8_|+PsNV{YwIIPle7qQanf~ zc#SPCTt|<2MMzl&6f|~6h|JQFcOJWEpwB7qru3;WJ4oX+3UrLuBv!{!c_&WG4m}`j zzD*cXnvHVatnH2xxw1d)Z4xQ<`_yGB#yIbP402o#wtlK-+n;oOloy+}M6O|lu&{}N zk%NEGix)z-@q@aoXDBtKkg`wBO?~4`mX7o7j=Pg`dyJ)1E JrZfmL* @Wy$fLCzx(+x~!u9w}C@6k8|<| z>!yz (y7jgs+^7X%4Rj^&}X3Z`JPzyo4Ng%DR=tA zS`~}UG_5wBaHN-N^UI74&Wz0IwzQwA!H(;X`wayHD#F&V+ZW??H1*cNGFHvyl($B5 zrmnn}58v>r=95|~Q~9wUYDzk`f14%X-y0R*>0NUZg`?z;T`+6nH?^8Zv8274fl{ zpITh&`oPYWtrICe{`@ULs)=Coj(^oi_&+YM8%ZnGSJBI8;bJd*(+aW)uwsZ{0Cm|Q zedB|$*TrOSyTp=^cf{M{dM(*HX4>ciin~YdmDS(wn?sTT6!t&`AI_>*XLwpdDs+W^ z&5fK>d;mTEc}Lv#brM_gXJRopQH!@Mr!*fVGd}HUW^8c9pSkAPbeR|3?=Cj2WZ8nO zV+KiJYh}!_-z3$=!Ttxi(R;e ;=M9!)z&B!uHB?idB*J5K!Rsh&>R!#n=r(cFw*Z%FIE}I;!CExu4+gT zx`)Q&b?;BS2oPC1=KTfRL5EvGX1SHOp`ym`<%PuMDftk`kw|*2{EWVEk!9{~VOl-* zd3UhSlei2~muJv~C;^c8z3zoIpLY}|W!z+N#)gl KH7~PG zgp*WrDlblIYy{ofPqe=6%lPQ1{8OkLEvV@V_2CM&`|dw?=rUY37bzW?F^YyW0TGG$ zS$VBQ&F-<9H2LPkZ!^~uyfrP&D9fI9up3b=M>v)=bLBps{rwXaviJ%tZVAg#&(*sb zYxfJ}J-GWZFODYZXN{FnoA194a-O`_e=nj}i-oBsL^&eyNh{0SG)4MXT39Ti$brJK z{p8!rJd5Gl7Mh@+qsodt1$UsLdMRuze?Qloqr3a}HT5eZ(A@-qiZ_aLzpW|+9NJ}z z5}L5T?7*Y?vz8e{lB7X|qT8JI2p<^9gupdMR09zf#5bFU@)V6XVyzF>;;6Zd6*Ja= z^H_*~Nf>q8TnqOvkcRw!yiNeP4JqSt+gh%2-yH_kkH(vSvE&IbX25@%&i-mo5DU69 z>I;0O50M3cuCYM=#nmRZb2QHYngDln1(r+raJ!ADM%Qu39@NNGm*2p>QiEC<$!TOU zP{iWByjgwdzA{<|y9b}9tE($%kuWO!J0brwU_W_=?3CgCMLOU8e5j868JO90th0{5 zVC+W#v|Atyngvk_0@t+h^~5<9b@e#c#Znq?5Z$&4d-Znzp7Y#FW^*^$S)UoJ4;lf9 z4AI_1qTroFc?%?rfJ^M7Fy@k(lxRe}0~HA%d>>?=`SyhGX%9X*fOdCIXzL-24#ZFI z_8i@EVC UDw;6dw7FYQQsK=SyXUtuq5`&H(TLNNs}Efn>P|q>B(-e^d6uGH}0VDftRA zGECv2a0le&LG3e0t+3AK(CZ*du`5+*10+x`?^{4ff}lkObO4~6dSH_Em6ba|B>l0w zceNhc#Do2j!~GZdtj17s2ftuMl0((dz7!$fwsga^*FJ+;3scu~Mol)76QFg5@o1G; z{f)o-QXb?pq|jUcAV(^twq>QNs_F*J-3lo1 1Up$`$b zgos7&0C ikBFD4kFGaD8<0e!f4I|&h>TB?LBJ=k zp_qqPCRNw@V%QP|H)Znv{J72!s@$d#g!O2hfAva$rQ7bnhzC%DpfgslPj`%ccoLYN zks*B}G+pp(ynKp6oCj E%OFTaoRDNj_7@#tfEF%sNzhU)!WJe2*UQ1~67=V7)xbEzLiWMxKdCzA_ZbWw zung*|sw`Rs)7w*VOGD+GzUQwU9BfvD=CX|p5oo2wX@UBctU$~UFw4LuBPtR!>5Zk4 z!?&ERxHMTHmd3gN3#O9P0}>jC(ykqO5s+>Q#y61@Abk-?q9Tn^e1SYgUWU^^+i6ue zt;9MGM@k!1O-7j=EQ}m1fG7q{ALLl1*?>x`#O*l$du6-LQ>bvM19?XvKvPyTMRAeP zmnt6{#n-&}PK AdKj>G+paz)gV-DD`%38L|>V zh^wUN;{HX;2kcag%f1hrTLL5$kh}?K_R#ZSwv3uT1eX;6{|*fp&jIBFUadk?`;|Jf z!%?#8wDffF?SUxZJFLqMf{V(1w=8*g1n#(a1Idng{mO )` -^N~^V71FZwX2J_^#MO$OM|x}r*XeymrOr_d-Ody>+(VnO1raD|Ly!nijf8dG zPEY+<1{?w;JAQ-4_d!BCX_g~ZfUBzk=MeIazk_nN0h4lBz{v_X0sae^0cjpsk?M~g zEN5Ol#wIE<5V+*`6@7^K92Y^KLcS&_AFqf|Qw}i*^Dy@FT98iO(+0?qU>aJ5EeMEu z5>kikbz(_MdzCmL_s8Wp6rfs~BPtb=)+*$2?qp2++ld=2b*wz*^qJQ=FEfDdv-4n9 z9^XLDAmIO|`$&Abege~noHQVr>RQ*4rWb=T<5_n`Hxg5cYM^=Nx1Z&D_WLuDC_Lmg zFtf1v#Rz$?dt1Rf0QFw_n##raZEz>?Jfua)xMyhGCYbcM7c4!IRnCV<2KEB#(2# zdsef*kOJAO>j*oN-uo6fT!t%M;~?v&Pr|0%1l%UHGyQ36(Tihi(XqN5HZa5m6Cgh? z;$)6+8~n8@i)m|_P@afPW q ghcQ}4ic)LNtBgDlW z-tiw~F)&CdRPN^&Km)7z_`0R)1bgm5crdRrCtz L=FNU#3<(92yt5u=7Hr# zrraxnE(L|Mn5eY%6gfI-T#d9xc5NWQb*r*RKS-9IEm%+
~sgI*aaI8j{b(2>x1L-~FPelRG;XJ`aq zS 1$7^)a8-req8k3s-~$ly$aIHARYPI(a6L^37;QKduiV%5yM?!DZj zZHY+TAD^{L^1&al(W`$5ZT>|VGSN%%SNEv+VxOrX>FqO;-n=P$OJJxN7G!XYN&@Wh zrxyUqX4NK)#+A+cmc?KRQ%=b!*j@-}t~mUD1SoeDSVSdmBnZR0rrw@>uE8~ApVeik zj_R1Ix~_c_OK}n&I2PS!(^D5=f@!=_ae%|Q}PeHBWoAug@llU%{=f5@FTZasG`GZRlB;5?e!w_5eU9(K`2$^xR# z21gsz&XJtb$tc(;;NZ>&v<#*xVMwjYp0yBsE@cOh>Ja3pCu8$oZrJ#2Sk%R31%>Yf zPKsU-7)%i20H{SS>IC2jMzjN*c9vFQ2GlrI#bJE+f~bayEk`uQ%qP*k%;0h0Z6ODg zhR`Vk$C?erP05=Zu3CaP(gtK b8mZQwlEoT#nRF6@kpDk^du8ezX0#acJe^FqimECBC7&J2n!AHjpcH~1+p@@{ z)9~AiQ}9-IptFlwd|(!Kb<=aUc$x0qtMdK4XMXK_dtl2i0R&d`td9et4b?qJn$X_- zY~dLhg!u-XffCfg^Iilfch_e)A(Q}(-d@ze&_@Gab^=QSGUO}atlm~<*^Bsv*AZWR zS$%S90D=L~ACl^}mj42@f %iD8D|rLNf )-J9BTaFkm$dDeeCmshDp6Q4B$OiQlT7?3Rh+D_J@FEIv zG)h&TVU c&0N|AMQcpEl#@ 6;>T$1k-bCYgbNfB zXl7g?O}!?9;({0fy-Js4)=JRip#VFAJ|u<<6A;MRm~ze1P_<{Sf`i}WuM8#2-ajTq z+Tcr26~GIFo#X8Ebj{BX@0!Ni|4NdAhgU*Wh~oN_v3Wp?gv$7b@7XF4Vp|Asf`JY? z4e%g&Jtp08M_BpDw$q3RT1Z0O&`B%Z#GpC`wxvVpI!Q&hz=Dn3P}I=cSl9nnA>}jv zRB*UHQWKG %{?`ga`v_ks$2kqi?f#e+G{@ zB;Od1of#T$2n^sM#-PRiZQrXq7WifRe)7`Kq36(*zaoN=;RK=wTrg0vSiP4aAlwgk zN2&o-i{dJP;~kv8BQA5 yM zL==>f>f)GnWVT0^VF(i_+5ym5VBgkI0%raca>SzbKj*Rhl1LO<1hgMpEIsnU{ZHc! zm>;>r5NI4^zwOx}dGeyI*TV^8t&Yj=vla=Z((YVf+#Q8A2T)2X>I8cmY 2Sz&5gJ(%sM>!n zz-`~)gO>mp6GChU2x$ulJ0;u%7#X~GFC-B}f0R7A9yGc+lWyOAJyCRpiPc^=gJCH? znLs72Sj&<|S1)xaB @K()N%wEPD$26itV02#*BG?Wbl zb&^!52Y^?|n+%XN ^9wi!af##UeMZj$ASa+$nafjuLu3+|Y#EeOY9Y}mGQi+^ zESp+pBB)_3UOzx{kEhGX$?^E}90%EwiE1Fy5U2DXM@Hj~XedW00Dz=M1A{p-xy#cI zoaO(Hbw>>z62*B8h`gK(R2>&_hMw)>>~$s;ChY*`;QPRkuzFiTLjh-pMu60y@kZSd zzW!DX9D!Ip;yQD5$SvO)SOaB^0uy3E4^e~f*K^(ImgY3m9 Hymd2MOUJt0XAuz3=Lu7;O z#B@uva=`@oriR(+;}#k3xy4s@ACM|%)0_^F&+)6;9~`E*Uu&cOoj}?fOO=2>>d^Dw zq5x~7>B`s^xroREox7(<&Tr}{i8W0amKvE_L~8qKY27fCC^blANH$C{Sd7x_IajEp zU7J_N8YyKOb@}mP;tRaQt4+;IL8Wq?%;z}2H^*oSEeS9BI~T3RMzRtL=(n1@0~ai) z( dx}(p}9>OG|@P z4^`=o!~6%L#{lXa7YE6O+)9XQdVAGv#5JV0J>E2u?A!WRmaLp2IIUXMoBX+VkhPvb zYkp)x+rIGe6OEr|{A<3ly1Ba})S;5CrHYIAbbwV75)x- ngI9*xG+aEKjq%1m5q&kC=P3D zYw*@I-f6&92Av!EHxyKA6IPQQ9CEl{cJ1JJ)wr^GpMxfUUX#XPrw!0r2e8z3Z65`F zh=4i)Vk-jnX^uM%Sdae!{b6We(9oLp6b_sL5*2d&mo iJvvB zusPd ^_sic$%E>)t;&BshVy4=d>MuIGn`oy_Kz`F00p;Jsm%n4Xx>C4Zfh-2 zH1YBA4UD+p(7-2ft6sl;{U;$frHJ=~?wyv|;`O~-pEe%X!d&s9Ha+`o@4fL03`fgZ zn5J>eOS>Psb?6iwmjB$P5qEJx=aVD@uP}J0X%)^w0h5kkW#PXXlRA$7SJUHe{m_cd zdOTs->!;2 @%i)TqQ2npfRk>80L7F# zzb!Bf%2^KvgcB1oI&Oy%j}nI0UlR6kQ&a1K`s+;uh(X56$_g}%g7PE 5P&7`RIt32O^P)+qsW><|=Pup4%E_tx_%rMW_x+9De$8`7&w|H2yv(SE z`BR3JPbw;*XTNXJh(k>L>g?QH7*PKL-pkUfadXWc<9t%jCdX4nni|Kpx3;* u9 zBn`7pi6ZWKO3Hm;!XXRFlrwR0shDz=(Bkj%g)7u0S$TcSdA#Hu$^X@ `_0sr%CXKD~pB5)31>iIPsjdSI0 z@4 5Jx z)ItI`Z{B2Qe}MZ13bUu@A>;yHyIKU5r#n71G&KC54_4l8fTPgE^eimdK&wN%^!4=} zJ9ccUEpBsd>@o+l!CIapp`d!T{L{Rc@%XzN#bo?`V;^6rvSqd8o)(b3f8UoV5&C*? zoBu9%%q1EH&JbClV3R`Pc=7V(!W}g$t7W7S17rfmU-{rj@rRfGd@&y;J~W2U-V_|R zz-*F;ic3hKGwUGA5#ZtyiMHpy5F_tpXqKyaDm9b(`-v=7{H- AkV@JyO(lW6>?cW9;pQ*3RG;T9&uDv`x4p?o9WPOh*9hrN5H=Fjc$3u6d{%!% zAgEDlps9scM8;{w%gYPV==}vIK0ZDUAU%6k&PcEQ7>MP3_w5)RbuTL!yR+Pa0YP}? z?M=l?` T Z*A=D@(eW>EAl`c}X7(#B7@;@0#=fT2%O!aiOp{i`i4ji)a*RvDTKBg|75a zqQ?-Ga7uL-^coqPZx24*BfWUh1Nu@2JY0;IAn(ExrG~?TuX-mmB@Wk;?z&3xzx$S| z9O`NEP{;L`IZsvAMDR0DwWA%r_!2sZ- j0~4%EfoN}HHqjJ}!6_~@MMnq}R+Q)jn!cA!41;j%-M2^MGl-HmTAaZ;iE zTAzMkmaCSblFl>YW(y*DX=$lL5KQ6AWg6-Fc Ljt`jC5_5ppI=6YCg;J8n`)1+Eer_$Dm z6Z;qBs6M$F$Pj*J$#02Z;hm_7oFMx vM%m X6(02Ikmt pE V>*$PDbb2<{h`jajHm3()_URa!zv1|;PBs3=CZtC+6? >I+wae_%iD;Ram~P%og%<|e6S%6V`M2=>2vovx z?+#o%`&k1Q8Rl|Ljck1Q_q%t_x(J+Z!i{<+M1IcvZ^;j`;$`x%cNYH`hU)Ca=6-3d zwm j99SuC z8u2hjRphIQjn%DkbM7mJmn?xVToC^E`-!M;Nl6JXlZ50P<4^}heW4j^2t19!=meU} zG3=;fhxqk7G(3Oo7l$jEyrE=TK6~~oT`9Ss`d{oF>&H-Zo=Tp;d`(YGOawdPd4LR; zE@>z#DgqgbfQX>08k)HOKD{-f&oLE0Aw}?kDhVbF_~MsOP<7yIsUpz(HjIvr0%cPH zL=`}I9k3$-QTyo8BT-*aBywSMLzo6r5@9OfTU6>pLPHHwy~NT~82ipwL}+D)Qyy*D z5^B NjX#*tt6ZWRpTt7St9r=ec z2;;xBR0#?>G_+bkr~`XmP*4yb9}mCJD}4QbOW?(9M~HC>eDUH1V9hf$;jFq^pY9PX z$X 4qT^hE@5V+)YrcPH;jIG5316pS z?%`2I^cap118PI6aP6B5lvl8aSO#TPR8-vDD&Qf}eb6|=X<=;4Y~i2>C4K&E1zkLd z`ilS&sELTIVBvgyar+V=EfN8gbA!Wt7l?_0O}E(AgdV)#7GQwfkewPlrwk6XQ=TVA z?=mP4EexpTynPH9o=-~YP$4mxh|z2O&?a2Jc~cTMI4mse-MeMzK~1?RXin~f4{{zX zSDMg^3OlbR72Z63^5j`60gZtcFbn9&%F05c4`F)c9TM2EpRavzQ!9Ib)l0ygK+5s= z^J7%c0fqZ7)FhnKryE-#0C6(lD=fgD0phh qA)V zzt7cUFbk|O-48(m7WMTbWqS4cHF$@+fG%;M$6y3T)@M3_`32L@ZuWJumCa3Rj;Fpv zv^Q@~LB@hS*4W%!pe*vg+hL3VpL``<7^xQK;^Mk}TMhRCP&p8}uV1}tMEgS>$c`QF zGZ(-E_beha4CoVxRCuLaozlE}pJw3jJe=a|HZ9a;J;E9SVbaMVD2@ElM{iGqsDEfm zS-jKKbBB?nu{g+!;$rz8IvWhJ?6J2Z>8g8+nOPP$K`ql2zG4MBU20(u9oz>R8pgSE z*w#UjxqD=Aan#~H-1zIu2arq|;j4d;NIo$+iATezlGa{kZ-%|E5;$)>fpP@e-eRO_ zXJ-fa&VOK`1U)H^2#D#6=m0pdE$)(VFAS#S_^c58v3v_E>Q6g}N6_Mc_`s!sZ*_PV z7RGHccn5`+7wXF37 R!PmUhxnlCR`LP;7Ic!f`krQa|4$B*o!%h@oHjJPH6^` z90*{7o6PL-O6j0qYNpCl($s>6gN{VQS~qsQMD^Nh^H%TAFAGW+Eeaw_R~5h1|Gv^3 zGB+T*Jz96rp3VO?B%&^)gQbE*0?EB6U{UUThlCEZ!|i$CMuXZN;4~?TiD~%(fzto@ z!2X1Tg9G}^@#ed*gB&(yRTr)UcHW)<6*88W4{m~Sy4^BTa4vhH{gT~F*`AkYi=z3P zLt+{)xA+t<-wHMAvr4pO&EX&3QYtdI_2Ej>pIgzkFjA*m09vomv#~9$PBe-7#>B)x zWK@7En|A?bgz4nz)ACTcp&2nP?2jCS=7fQkRunflI(h(d7WhbcZSBy*mv8MXTyfP^ zc4UYi&{ESK9K1(4Hf7u$%FX+(lEii8|KjOO;Hhl8?oUKgN`)e0qReH=Sfa>O<{@L| zWDaRUMT)45X(A%?n9P!pA)$z*9zujfrNQ`L*XjNK=lA`-=Y8LL&bjaFzOKF3T6^t% z+u5kaycat?l6!u_{p>9MeieDjQAH3%2L=WZeytfmo}Pl8O#cQ5D7y!O26 #* zIY{<-_`|JRMMC~S{Q#7|pOhpaK+OmNw>J8_{4~8;eA-$-(Pxa)=#_IGhhxI##5pWn zusaTCK{1(qC4W+#K_B%?aE=M6lJNvY^uGG U?@>;IUYN^_Sa(W%8d!jr%T+AVVj>3=kkWW#rp!_XGw8;$S7ooG{tH|H7nb3f5Eg z3IL*2xsM}aDhLO;`aP26lF9w)Q8QVg9u=JTms-c}K1$vf-ne#0J^tA1JhoqK7gY76 zGvk>kq%!gyE%mTU*I_4tCior`hja$O0#0K**KkluYAV)$uk$NTzIvb_DVSBex{OHd zz%AVCb= H|H;6r2UyPeUS+yi9#$Ep#Myw+hqyLAH7AeaLeS}}MdJp7%TYdH)&!kG 8bD)01y>%>f!S_p;VkXE5HuAq?m2@TZ}n z7$jOikPp>oP5s%5)gw8KF(m}C2KI8-l1b`>jsanvyfNp3hCdJXhE8lrI^h$M%I yGNY wLA;3h6SmSM>{+Oq3X;$Q4l=5s9A_7y!S*& 5ysH>@YlWZI;L2Qd;k^Sw@ZwK+Mwi4LJTUy%N zZ63RHA}WS5lShGQim!7dPaw|@j~MIF-qI4yRnLeTxDVpNuc;3rw>qg`N50bRI<86$ zMp^i13x9cfY}>YtdR2KN5OB$$pv|IYyoy&?TQD!{#*JNp3juuf7(nzf*J96Cg(mV1 zl+g||b$^{V{R$YAOPM6BjW1-Uu<%jj2e{!wm~mrTy1J29uTt-#ECVE5+_G#J)N6lc z3m7)iAccUDL@=x7nzTkyaRK?-ehQwqD#LEzD*PL+J#DMkuTS6t>@9nYv`40i;NB9r z>e)~(L_R!KB6XA$xv{{CfeU4mdgMFEr#3C~RyoV`QI1F_I72pU*g)n|K|aKtK8_%p zhvfw97&x6e+S+TFnBwj=_<#BG1tHX c2_hCOSVvjktR>UiPS1Ko2V-LxCCgH!x1CBJRCvY6<`|0wlEn zHLR)*1 KpsI*+Q_cLe{6kaw+ez6 zB5&HSi9dh-5Zv?gwKje;?he^r!4|lR`^?)E6wZL@;0HXM-W54wSmHV?G8bagK+rj` zn1QwI?Cjug%&LgFBLJOvfH5Rl1zZH9AksbZbkU_=bJ*1gKO)G(|DUM@KQgcpt9@TW zNJvOYX#t9f>XosvvD#V{>biuXnP5L8l7CzH9;_fv0D=&sRImISF&9Pm_WzFOv=dI# zbz?m}FNl(S2i~OXV$$WVGe2FZ-?R#)#@DzGXr6qER~A7s8TdH%cqsjI0kr(vw86}( zVBB$90*YAj;2s3Xfb^uGC3$J-pBTEus@j!rlhoaU;?X6{c!FEj1gR&Ut6u+~0s#-5 z4PQN4atsU&9d}?`QU(f*)L(w>4%#V{b6k8&bK b@uJ{P_A;&CNIQ3%Dw1-prq{x|km=?==uSNhN+tG5(Q0 zk=%>XkxSN#VbOKBoqj7#8B4vc_NKR)_{G7K^Yp`jWem{~OwYa{As8U0_9R69EC3;X zjVKmXVpzs37%Fzk??AT3@&l;1uKVP5_3BmZSPv*a%%8BKaA)b{R|6ztVosO!MEX;9 z%3q3)+nXipp*5&1#^wo37kmH@;fS7@+0GD5wRh>s`v9eedPCOExFI4~p89rwl6T$a z4I3U9WOljE?npWZ`W^WBB{g?XtMm!SHL_@2bNqdRCU{fX(Qfr}hU@~<2O1}Q=#)dN z1>21ST^2%To?-EVkxpu>!LCL2?yZ5U!VxJbDd__?4VO7JPzBs0M><1q5alO4Ce3r_ z&iP~e;1FeG?BuHlUJ_9RC%mtA*7Uu6^@^!vTCekh*+$~M`I6;D#|qCfF_zHp;K(m? zt{S^v9 i#B+2%c`Ewm!L0@eWSbI`lKO$|i?cs+>LM8aHXfcN zQssj64At(UV!3wwsj;xJwe?2~%3x<@jY~`vB0ulZo(Kx-Wj+@pn>cB@+En-|M~IOJ zolyQw=jXqdqZeWxDE5>Ek6c{d;ggZ{e_nu%oy3cABMRFmo{WhBfEpPc)zHxR2GI%s zh59%>$w(@QAFJa3t7Y!JUrgxO;ZE7KwXY;M zYnHbD2^c)HCUAupzxZoS$t%Zv?h7x93AiQn{ff<1XgzM|THZuV6O=Wb?Ua7C{rmT~ z-Ii&;r *~tj_&opPMI)(Cdu&rJ=Oz}vBp62i z<_LOW*qe5)V*kPJvcjwzEyLw?+!E &VzqKc}0i5nO?hX{u0}x7t+scS11l0%_?6_$9g~i`xikQ#*;mJ4mtW% zss?VgUN!Ra^T++#*38=0yKzBsG`OI&S(MjMub}da0~#7sT%dOiIYt?7Y3R(cTnB1u zYip6mp}tx$6hg8CePUx_p{joxg%9=8{+{jIc+#-W?CkzyU7?cq4I2JjtdKYQ*=~Gm z;2-=c;}A9p77-Q}ZfR}Zq`H xgfA9uJWLk4%4~-YLXs4zU&?s%=1pM3 zg@H@!@uhsg!qCV9?CesQKSB0tfBBMnsCpc`?J%!ML+I2kt+Mf$=KKid-Yk)S$jB55 zgqJ*I@I=K^;xU}~$=}2djg}n V1K6 z-g{adELsCtLJbm@^6V;YOyZtX4xJjPU2)<_Iiesushk^#&=EWV0jVq`CnpE$2ztLY z7-mR2DTnkSLc}P94Ceuc0c*x^)w4!&$|F9<0LikdT2}aK`s2DRBc3cjG|1HXm8Ro= zYwhQJ$y2wU-K?;`_UNgkTy<}Aq3BDY98tFwUXQ`@Q9H8-2#ZhhK{@5djT^nay`XuD z;#=@jl%4~) zAq;#rq-LNV{-!k)OwZKb(&ZjN&I<>wS*VD6nq_cMmF6Ww7z z4w>&b&e$6qeJUjdFBecmeh5~kTe mef>ROLRW6ub|~nx>X7-`wl `}b=g zQL~91&FFR|A@kpr3)8Rp$nLfWMfcn&=PK G2^nn9%y zL$?+oy8ih68%# 3Q)&BefIwUX6MZYR|?M zxcEVz3Tr&Mp)WJ;@!A&6M(v?Q#m)d9!6DY)*EWBU+Vl8(+1w~2yP;a*-KLgdk>uqY zLOHmEVRD;ykLGg2^o#ud{P}Z7XKV(qC!q3Gh{FqPy~2Cfc?8L%cwQuJ9gGKX4#K;KeFB zIv|E5lzl)Z`1tsuqDH5FZeAg6t+-y{cF-p4w}-I1z35)r(e);(r#3e=p*&0mWI!`$ zjT6~HO=%9u{Rs1IFJGeLv}jV)BM1LY?ebdvOd|-IS(8Nd4GuHRG}^s;cZ{I!nNL@D z_*N$YNs!#g=nPPzjM@}h0JU6PG7Rl1Rt~+p#o}Zt{8vfmiS7pneKtmFh=!V{>Tuf^Gz=dM=Q0hdZ06VguCUWV_K@9_ zZ>tUQ@5rrKLr3FZ5Clv6e?dV&=h*v*FxgbGNZc8z)Z5z|Y!3yY*n16|IAQ+CE&UjN z?HY?J3oGmYRIj`fXt#mfQ8dXyQR+vgy4C*C5gs`k_@(esJT)bXav8J`GAiof!-tTI zV2*LUKJ()Tnm(q{`6=pYvf9&%jnK^LqeeNw(eN~Q!qAJpl!wPY5CK>U$Qa{r%g)TY z3Y++YjG&Mr8d4Uxcm_KLVdE`Ia}Wt@52EZlGBVP9ct!2=-3iySg@lFs;9Y?*f+8(2 zVGq_0r34~_fK%<=yL`0&k`Gn>TZ3|lTPc)Wa3GUxldmZAEQn%_lHJfQPe#UJOP6SW zcqXo@s*0irHxJK$)n`uy1qHqHrqudD5Bmnz6?=~+_z{7%sIiJE(k(&9u0+`a`yIkk zE~-s<=K^RIx{D2A3z>NqOQJ8u3?h#0nv$bvP#VLuZ9@1Uc`V4`*Y$GHhMEDd1KPnG zAfY-s&+H@!5kko$gG}(@LU7wZe*zGQYgqwGrXV9h&Io>l G0da|qloarg zBQX6o;qKi9G}Q0Rmk0gs92;}Vre|EUrnRYQmw7Kv3T0ph+w=+STiAZDU~W-URdt|7 z%B?ucI7I1oj;H!8G+ I-mS81~dKeJtP*xHAhOH z*Z`4Zs%r_gdOf{mZvzj_fG07^U}qs;g)*b(@c|j6WgCZr=^1#S@I>Oc>ZKa$>w$ER z<5{R)nVfXPqT>?=KhHcQTo@k=|5 +2UFmOu#BJ#?s`iaL^u@)mL544`c_nZbZ7 zqaqqFZG?ia=+%Vv+F{j<8A2?MPzm!V4C{r0sjaSl`QI&_$4&=cw+Grm03-nlwyxr$ zA~>SSjV14=efNcukX$8~u9apWr!u=IJ8w0Xkeu{}*49=al_X|6xCd~IP}!z(y|V1y zUNd2n!_(;CTS-T^h*DkAB}50iTa{@{Dx)Z4&dkgpAaG)80s`{V{C~@2$~0_F1le*i z36?edmLB?6O>bdz=H Ug@+2>J9x^+2+Ce0%5N6EDsP>zPC#z7la!x0B zYdOY0BTL@~g2W;D`ST|((Grs`(4BhxV^#U2i(X2{_rgg2n&T(b#x-PmQ^dBeHl*YK z;1A^fb)U50`d!=&a+lkNggZQK^b>Jm1?;RM$y;D@L9Vl?^v|8-#Y4T%%gZ}}c^C6g z?C@aNkh)M*Ie|;Z!QD=zy (c~i|W9-i?@fsnHuO3#uiSBG1U{Qi3mJKG`{7# #aZ6;z%bW<)N$W)` z!8@At*+b<6cY|c5<0rpIez@#y^@9%C(2F18I0)WbJzz~++W`avI1v7HBV-1D05(1~ z-gWhA&fR>h0J6SWsmDF?3>U7K&&9eY6nUk#y_BgAS8n`l8*j GSQ z29A5YspB*#E`np+y)|$3*~O$DRhbT2BpTE4mWT3LX|!BkD{%bUJK4OY868a$6{Lhs zYWE?dvuxT_eCnGu-vJ~`M *NwW+jx@$CS#P~BktTwR5)(F=_9s?CP*>Q@kG 9vHRY4j-?*MFyvAE{oWl|h{d(rUoAxqjdQR<^AiAQrkVk7|=ESx0e z$gd$GAs}($2nDE-7NtIW^|NRG&C+sRfZdKuw7x9<<~|ktV O%5DVj^gWpjIdl3(x;Pefg=! z*{cT4dE55xUBa@UJ_TTujTm*F%)hCcRz=B8RZWfTyjr%#(jO(3gL`+E2nRfZh=L8~ z1VV hlwl*=i#^ha{iEH ovU)E zT-64R9<>Mc3NP;YJ~LB}HG!Ic>EcByBAB*@5$-SCXAX~`$D=I4z!$}>+y{&RsfY;m z)7Jjxde;Rv4UjGYB=@UVu3U+Xj0_KNX=*~{?gS*>#RW4>S}$&mg&!~WW#Tp!jB*C7 z;EF2@S`M_aA)VKtPufJ|&>1i_o#qDG9mB)< lfLv`tZ`2`%aburVsX%5I~)EiFIw3?pc07F$=MnG^DXNx28D!%;*}{X z47(v^0|yfAY?_UpN5b!`$fEEQ0iOMl`!a8foKzfrlM@(ut-XDE7iq-9!vO&$a2|Ck z(8L`A0wDLsipo@BD}Y<@OQ>m6d;4!Vk1$&Xe;Y>BZ6xM5fGHup&p-Y2?N{6q8`mPO zuf^IkMvbNEpdU4DsasoZBc6#*t$#2KuOH?>U4Q@v=5xfKZ40Ru!%_AHVuvzbEJCVK zO7YF>;~RNSG3}i=8o(8^>dpdXQg4o5^7Ia+S{Rklc)jEa=P3zp7?Ok?k0925J*+_i zE;=F(J)&4@7cPr}&b$@Ed8UX$3Fgkr$Z&zU0%1oEa+|O3V{&}VT9OAHrb-Xf(}@nz zvIM?y_wk^dw20MM;RcRdiHodnY;0LaqlRDI>oa`i*SAeX3#dNhN762LcJGl}Y=J9F zz8!0MVNp}qyFqM0+IrHDqM@y+X%6fMw8(*;A>>aa6XP5+egB=M5ZEHIzYYAU`lA3E zXSk<`+zYEBal?^E?AoUl6Zo_xx+d1R@+F$#STii1Sp(f{<>8S~q| tDPmo&@{|E^TgUnZx@qOmob (> z06=J)m#HR&&I*n^|M~lM!bS2bwN$$iaZ;SHvxB=(oGACd9u!`iycH~!(LD|;H{83s zagLz0O<>8$OfgJ Nw*$j6A6eyRk0ifexTi0Qb=88kZHvDRV2o5=cS=YQ&wrY+T_cQMK&Ysdo~Vi z!``_Q9UYyJutSkS)BvOGK(`<*?85|r|BJ#DSy&zWVQb)!aqU744>fHv_XhL_PK1 )nc_%`^o0Yo;q(aPKKRV5fd@x z?N)f)S$52HKyrov^r+JXzA`XoB4WJ38Q30z=5SjtuL3+UrO2bXZvzRi-n=YmXl4dB zKZoNvN8WS- hcI#afrBs!n|OJ;mM9?eqR5}6_uwK`Ix5h|$wPb84n?{g z6W~d{dc*?qz7(R3;*1dgx=z!pS8S@-UWi_;uV`xRArmx5+4e!uC5A1Wz4LHp*VNSD zfe{}nvb5tUVZxN(=p~#Q$C?1pA!{ihGA+$%;SanNQCk3@O}IxRizxz!AkSb0K(xGc zftc7-4;(n4b8FXrI1TO#Dl0F7BW+M!xpHOGtM3vh=JjJH6oP3?Obqt;8(7nTR(~9) zW+JVN;jI0yu`er5eOto3gSNZ!F=QS`aAm}`YdTa<@{_G-?fn&j%bp$U YEi()w5)BQNk`Bkqwn6(^51_p{%m|9We|2SLWbZ_o}h(7xW7^Pzk^m3{NsQ3 zdIYG^Lul8oX`Ekp)^3o^PVr}EXKz-$z^#(n2~DwPx^4|_I$uBaGL=7C?@#UIM7Myv zJpP@a!-o%pL;Hd96E}CZiP*bNvWB&(01t}I?d?bya|klnbI^0`sT|&x2g?YW-`duO zuI|T^q6PP0%fg1+xM>qmggD`Q!C{p+k}#k`!@+1dZ|rJh48)#O;Em@}Nd1JeYUU;v zrN9Ub+t>Fe*r^Zk2Vn~bE5j^8Pfss-Gj0{y9f3d~J1L?=7M4e17{b1+ @-lScgdt5ZQ;WEaM4~iLRPQNF)1V(6ISfdF!R4aZ?YTSr1)Ojy|ibu_zno?RJSf zF3%-x`Tn@)Zu5%QQ;uvRa)$x~mj<7Q{a!|Un<1VN4jF+D81K;Z-*&R%!J^1*<793e zG`-VV7WJxNbXyGP!k)D9_#hL-jY;yscXm_DxRpoWH&F7>^Tq>AaKkMv8% zHzH(0m>eT-d Q7l|)hBqARz zcLW$8xO6h|`tGvWXC3s}JB43# ~ZT&Hpxy+Ng>&o><;i9YU#QHm-m1}6om26PqQ zjy_|Eb!6xbL^$lZ;8f@eME-|q%_|4eMVWR(xOq-hJ@D;g8w{qchA@Vl=JSJ6usKpa z27Z$J_X9^fiN6-C4G$yVsxm$<&hhJ>({Wm8;ACcDF~WO?V0Aab$|BN$Jwha9TC*k_ zc;e6@5)u$vftP|%BwRcRg3igt=8yPC3J?%#fi9vVB8n&8%u3U*p?l3P8FrBN0WUbc zoSfMprR3;&45q-OV_X(k7|9f<1438A43z=EIY>h5$*eS3Uk rlGPMNEe8@ zL&yp7$VgS%$kAobnF4Or)v10>>a5%#Y+`*dwG*%B+q-=`VZVfvbFB(K2uU03nPrnw z;WH9Gbquo<&@3}zio&A=(g3QRz$KvSU|}aPssZgh3V!1umoJ-OCy?vCo-ZjSg$tY~ z9RRS@mKMVOOlAziJda03-m42Cz8KoPz?oNU1;;qHkJjrQGX8%0mfP7DlSP?(zif9@ z6$qFcZ72x8e*K68^#h3i*a8X ^`V&TDkjv*`Y10!IqC4)0R8>t-tonB}Q27?C5Xs z%fIX&@l0*RJF;EoPo2}8e&l}|G2fD#--s!x&snVhoo0~9Ax)fumr$i-;Di0H#4j7W z40ilS0NEHFI@R%jHfR&nJ_ 9hrk?93&Ne zRn73D1esc3N(; AB7Cu~iG)Rmc;nOF^LG@Skt+!h>-)_gq0Jv$G7+4mA) z=@%5Jy^tM=wGr-wG_B?KkLO>=_$@Be?puBK8xxJB(Rjw$ =q3c5gEAcmB?vCyUlTp;_4N*jYFK#p z{<7U~=%`_wk|A^;CwO<#zM!ZpS1>qa0jMM~kGe^=#3v 7lQ58%DeXQgIqTi>lrj`m`i!loTdb-%@ zMEO^^HC2p?9ggR-XV1> M=p zbLH-&q$Ct_7ZF`U!@`isBc@bQMn!0YzU_%%i*@$%^&MVL6gdSJ4xiEI;bCS~z)e7H zAPuIqYjGSfW!9lH9{R2#WI?>O`KCOD(hZ$b3NyV>dvJDk=7Ii;N|dauEbIy2fBZ-l z^rSupO0Yuk71mwPTU#-oRU1#$v4RA%8>#`G(My7P4pQcCDTmMt*a0tldNxIH^-4e| z8l>cPVX2u{Pa5kv(p=zGR8*9anZ@s7^QWxgT(<+*phc{}OcWPbI1oElG}e1K4#N8B zpJN+jjzT5K4^X;4Ew*VBQIsE`><5zXf&pXv57I!YV5Ay_*leT>KvV7i^|lJH%iElH zsA1fZKEAEbjF*|rFT?}JxR$JWgB6slh}IEOXd?o|xUq@JFOYW>RWZ_Z7~2i2xP&AG z1AyZBIp4Lbz)bMbTjlkRW8CQU>A(0Tki@TpgBQ+$uBm)bX<9uVidno@K1i(c!xElE zqC{Hfv!Tnn@M6eYj ZFk jq9mG5s}an?m}TvQ8L>Sy9+OT=|g?V%IX6m{t|{*5VW**ttFH% z& eYSX4o*smC~ga7aPthxCrqyD?z z-X`zK41i7mE^CbZ+O{nvCr78uT3b6CPtzzT3-Q5EX?3#ExxGO+u}I&ae9A%ekVPv` zj;@Q#C-3|Oi{4&rV<~ >-B596bA|=F*ZJ)Tfx@_x)~r|$PKa@ud~q-ix`AL zbW>ZKz_#{wX4PJ|Ut~1vI!^f02n7X=!w?A ZhZP=mw8DaC MIF*^0>&6_v#vlG9mp%$G+r*Sf2 z&BM;W!dwJ90OSX)uYRBES7U7d_^VR7WIdyG^y{}%(jGqCE+-d&1u`lNH*k!4g6M{W zjz^qQXDqFxtlXZoZy8S;xfBDW1F&T9;B|F$+)$(56Yh#eb92U;-{1bT!M{VCLsL_) ze8q6PTKgx@RE&K{X!$%FQ(^tRLaD7%rt*#9C4&`N69_&4 EsiYU2obB;$ zZF&A&{1;N=MFWPp=v%zOkr+U*^I>E__(jr%Mc&Fa9~=s93b&6{?8j(s-0XTPRF`UA zIAqb;7`LcgcXL uU *hmU*oQwv(8eZtkF Cl`?zk%|%U^rrMgk4U4|1*1TVp44N2r zn|qx~)3aw6n7@NmLzuRz3eazC_NBNmth|_$Bbv#V1z?O_F*nuM*Z1q!uc+k>ZTje0 z7JBZ|W)NeHM1_W1p51l_a5?NbxmpMu+=~8g-rj}x?|;Or*SkU6pbX;x6~CK=r4zB* z^z96$uYpx=nTax=o%o|Ctt(*u1lw%O s{WDGEhr;5RJ^};9w^%9Z?6R z>4+~!lLIl!Zoo?}<(<%=4>+{BIs5rjw6wI?Byf5jwXhIzwoS3#k-ZZr%L>dmsr~o# zG_ EU|KMV0KV#i^BK63viZzk8Wu9y>L!{Mdod;nNND`;SmuiV1eUH zNl6{QeRWY62r#wInAqQcM{8MFoP}Kj!i5>eJ|MJUKvNm`Y6Xu0Rg9ph%<|gNg&XMW z??$x&sv2}FmcPQd;qYxvZ#SKPSmSg&cih8fs*)nJnUxhWyC>z~n)Ed*93N(8va_&Y zI+Ys9>pgGZI#q1bV{~+MG;-DQ*(JO#?D^2lSS3(KcxXmQD ms$PHp}i;Ke?LgC?rpvLMaKk!n(8Nfm)cIogF6WwfpiR8`6z%Uf-YF<-@U| zQ&Gp~Y5Vpk`(FmognPk%1Y9(zvBm{*7Eb?>BSdC-bz3Ili%)VCEH;{4*M#A8P*l9L zbc8#i0c<2%VM`nm%!Ld4@118XpPwG2m2v6@<_r;;uqq126cJ_A$WfSLRwZvtVPV U7`;>NczYo*pS1Dh%$uF(Axy3U$kg4m!&!4_$&z@C1 zq^f!`J6q( UHa;Fm&KeNpR6wgeSOK|9cwbX=hjGE5^GA&(dI3>fHAc z?YL8!SX*~@_q59ylV1r89RJMU6^S7yK#N>^&yi^pb#b%O<_G_xLWP_+G&Ce5Esgil zR)7xzejp284h=0d%RxIe&gyH=L4;Z0WzEBfpA;3Pc#^U()V>mr4|7N#-{)6q>57gS zI(`b@yTd3q*EoA4yN#B3(?Lgz7{{ju^Co{oY2q+$t`dV(ZdS}i-APQu;dV8$@%ElU z9LMp*j{7n-l_w&_#l>Z1Wu>gFtkX=@qA0=oIV!J~Ae_LBfCydN&_G8$d<~hRE}>`T z^_~K==o%UpLxMx m-A6zty zmKV0Lus{;2_{*>so;h6%V8f}Z30&05&FpCwZh>Zocb~;2C3!kH{6wGh+AX_+nI$nN zv!Gy?Y7+uk)=Se3s{hJj8Nxq|$5Vf$rd-^TNo(G@X &1(9Ac7!_;O>KTV|B#z R_qr&eJUU@T?XVsh;rjS@s{xa& Fl8yAY#g^=L`+OfTU#4_ zm#_i6xXzOgK_1}Sc&Y)3v8Sh0)=zNz_5}bXQcr-w2yta>>zn!l=&CM7=1AtopGzOA zm;Icbjm$cN?@+!@8b+~FQG9lEKDgbK{QTvq4~pYY;EkX(9TGSE(%H^!W?xcewMs<- zWhNw4JRbWB<_u?q0p<-Gym6DL)JR!H^a+WG%zqz=7!EK39g&xp|9Rfe&+i^Sckgm? zaot-&@72)wc=+SH8P|FCVIEA9ocA_RyQ4p_b%9ULgJU2yzkF+=ja7puw71lghwmZA zxFEAXDJ zayE#Z;H}-RAR`+rdiUPFOP4O;yAIRk9^gM94btt4qtMhujK&MN2F6_SA|W^@u-tez z#tTp#z !xmnJ)y}bquSyK}jS$VSDGP6_U0Z0$Vwl&WpEh}+j zj%I4A+NN4b1aK_(o;{@qHOtpkrJSkDp8S%zkVgIwnq|>6hHX+uvM^=#>hL|W!Hd23 z?zp;#8Ql-cni*P(i(}N=ip6@00OaN-`X*GR`oKsw?2ibpm~_=kXt_vM(4TXG0D`^O z0%MVK#?$Q`rDbHke*N0en3`f{VPRjNFb*YH4qf7qxB#CrWkB!lL!!WNo0l(N-pbXr zM!JAid&`Cm&+H0eC4d1@YkYJ&DujraqC!ICb#E~8UpwLsLV~H4Fr@7)8$Y8y$)Ni^ zIC6 sngc2vP(tacQ`DQ~C*g11KLmc4&+T7(opHG<@`>)v4Is&Fx{7hNH8yMp}QeESfTK zL;^weP{KB}zl0EuT8A(8J9P6)!XLCTVT1&_Yu6l#-vP01QS=ursR6@-ho5uZi 3%)0Ns;lu(-I0LWI}c&*R5B!k2!ZgCGT690RDxqAo9; zA3XDS$q%+XZ1YAa$ar^>FD?ajcFm}*rh#3YSDrk1QgmwY2ZHWjqkdrwQ8ldxUpZg{ zS~nA*bc`lPOHfcS>*pgL$}LG$Ujb32tmuM;715E2sX~c)G?ZH*I%~Tufv}Jr&!0Po zQE7XIv$2=6(pr+EuW1VYmCg3BF;~}6*}mo>QdCQGGkWH2Zi%lPuSPLj_paPcX4HpM zU;XGnbFDVlb)ZRP$=Gy$fJyvQfjh3cT3PU-Df7CpO`M!nkjlWjTy^22L*5{ErtSzP zctD_xe?wG&7=zHi>2vl )rVT?F(VJwtdp1i_XKrmRFODVj z2sr3GiRtO&XC3To(bKn)`H<3~(0ihuyq;T$mvPI>OKnc5yF7tFhEQ}CZ8+EpGd)T4 zciQ5;J47$2@G30Cxd=~SYuX(X6;H@UICgSUcenI4P#xqzI^4Q-E0Cb<9jjGI)Bzim zhpM9Vu2TRIG#6|^T>d8{&XR_7G^6!Ewi+KB+hw&TgN7|afSIAHstWSV<}F*AeB~K2 zBWyd#`2^wo*Mmtb*n=3F0Aa?@a38ZOoGf5_{*W&q&2LaeC|Cu=gW?eme8w=>o4a@K z;y+cLnT4`60qKA=sn?8r`xXRK2U`TpHknx3=9)GP+eGBS*t-KOX0zn#vnX3er>5}o zj2Y6-1fc;cjN~uqw>Zcju ei4p&96t>|?KJItm_@)e|@NH^!8V+t~f^+3mKXqwHD_ z(dH_I1P*p~-TO+X(H(G$8w5T%@a9apbAJde9b&>(7>ppVBhLU&Co7nV5|sfkpS)jg zZZAUz$%F&3X19d}1O$-VYw{6mx@Izv|8Wk-(*rYJ;tZfDdJc1(#1pg`3X6-8ZTk=t z$LEiTMk2z16D`8q1I~{DDm+R71=G36CZ6w#LYY5(`-WoWw5vN**<$1eoF5 _?%q@sNB3ain39DR7xIy3b7!R8V2Z`V#6)v|D3--Cb#>nnC`v)pYCl@h&urZ6U- zMiBtT4|bl?t5mf&b4VYW?~49CNZh;>%>(<5gxw9<0db*w;?F<@2ZQv^dxJ@$rVVvN zUxK{&5z>wy9x^7I2FeHu2&6&s1$cbj)ARJ)UmrxuP*1=|LiGy@I^Mnei=uMI)Flh3 z%EMlAplAuFn(?R@_(a)GpaOuCjiM3B4zTRJVcjp|;^Lymp4q~I`~=uqxYh(z-pGih z Xf5~wN3M+1~T zqM;UpC@~2=uaCBrGK6wi&(ok~T=p!U(mMYg%nT^29#k`ew!eG#&7 ddi(mc zxURRneQVOZ>JtqI&4mGkC}2tWPP%RrO7PJ0C03Fq1>ERIfGM=t7eemydY^`XeNDKT95r*3kSod$97C(rK@>~bEvqu7_WiT z!Ne?h@otH)8ou1-WP!(EZZ6~AXXHwILFLAsJ9qf_ka~f=Ft(zqs=u~2xaH_-HPbpe zjDYo%>!LC*zspxxo5msk 1)`4d*^EI>zhHxn3< ZG{`_Cg=VqXvrIOb|xhPpad2?Yl(HcmbVC}JS#nNy8_&n*G_f)R|E z w-b;PFeGQuhzk*$o!| X`)vJj%j5URUeAizqDwQn7?r 2= xv)OA|tD-svgo85cKGn8}cO^WJzxgN|YhY zNbAi% j@xVcGbZJaw~Tw zg=GgnKdD}>W%B}1L%j@MY!pn|uvMRFsW8Ft*9emuF~R@-w%N)Cx`#O=;3GNL(97p= zCH&0QB(D-<0|U|p04EI`m#SATUv4BXxR9{ *x0Y<;VX1?f+$=H~q+w&AK+#FoD9#gZ%^~2sj3LETxkSTSnSNp%ow7&- 83OTp%zQ;Es!Gx=8>+0gVJwa(zR8$b<&YV$* zO9h5}@GUz(Um`IzC4NNaD{lt9ctRzv01JT?R|TpiGcOawEIyM`$8o=};EhnnAxxA! zc>-U^Q<%gA-`WD_aIVuhazp|zUobT-rLP?DDTihYJ{_x3?Hc~M-2e99Zy}zV_x2uf zE65m+cHAZGs#~&6!@$BM`;h#U>0`=mA%^Ub4%S@_jg1(NQuqG-`<|ZPc<0s@cLrA# zL&F$_l=ySnyvz FhSRCj(fRnJ~;N=Yf{3taUy={RiGO`a ?jJ#ZBUrwU7RQ zmMF2{PRo1BQhbk?n6B@3;lWxXm{orMegFwEW7S9leJYHWbx8*^HYT<21KtB#+8eZ_ z!?1hTu3L~CFevoaTyAR)vLkRJs&0Mn-!Fr10Gez#;e{eUD%h?U=6)E_qIs_r2fDQM zlzXeOskEkGb3zK&LFcyY7_Ad2^drq9V|n!R#$)HAY8f1t^7$lCfJ1TsAb{)&&FJZk zA{u$1J}S_Wg$0A{Y{ZKpNEZTEG1D4)1ZL6?&IB0!)RI0GI>t)rVsEyW&wN1}ebU(U zZCMd-jah>5ovSrQVQR4om+b>6$&mP8&-^_nd*=i00qL}Bas|pAdOmfAG`hOFmKSLB zcGt~lOe_uW+r8Txg-85yu*)C1oPpCO$GPtMi_|aKX=#q0o=4KG ziR}lhi{XtCs=Z|j^fD)*jU&y^!VJV0;&S{rnNEi{0J@(2bT>Z!Elk@W;@aA+)6-tf z?~Y?8FUFuBVPMDh#*BN{s#G) UBp)a@2bmzPD9aOP`4Yp2xs-Y B+*z73HFMAg*D$abA?Mj`kzOm5OjN_Ux&{C9&skV@yhS#@35oQUMg$M>waR}QWy zNt=eD86b$?vlFJy&ZD4O-2oZ^6#&I}A54Z-wQHo{L8I2yldhUuWV0s4H=G}-ll76f zletK vk{zLWrdO^+uKN%@dfgFSi_3aP7ztM8ZyvQxL zNcZY1cQL<5fIkdnMQaU^$aW|yR)Wd=9}%kst?{4gKMnZ}VH%A18Im>+;1O^(3OL6Dh~SxNCWm&XaJ|EA2>Ymaeda*bS3l13X0ZY z$;R!!%4i