From 192754b95c3768294b80cfbb3bdac9fb247d085c Mon Sep 17 00:00:00 2001 From: alejandro Date: Mon, 17 Oct 2022 14:16:59 +0200 Subject: [PATCH 01/23] adding 1st version plugin google sheets --- .../google_sheets/pandora_googlesheet.py | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 pandora_plugins/google_sheets/pandora_googlesheet.py diff --git a/pandora_plugins/google_sheets/pandora_googlesheet.py b/pandora_plugins/google_sheets/pandora_googlesheet.py new file mode 100644 index 0000000000..a6e599b429 --- /dev/null +++ b/pandora_plugins/google_sheets/pandora_googlesheet.py @@ -0,0 +1,47 @@ +import gspread +import argparse +from oauth2client.service_account import ServiceAccountCredentials +from pprint import pprint + +__author__ = "Alejandro Sánchez Carrion" +__copyright__ = "Copyright 2022, PandoraFMS" +__maintainer__ = "Operations department" +__status__ = "Production" +__version__= '1.0' + +info = f""" +Pandora FMS Google Sheets +Version = {__version__} + +Manual execution + +python3 pandora_googlesheets.py --cred --row --column + +""" + +parser = argparse.ArgumentParser(description= info, formatter_class=argparse.RawTextHelpFormatter) +parser.add_argument('--cred', help='') +parser.add_argument('--name', help='') +parser.add_argument('--row', help='',type=int) +parser.add_argument('--column', help='',type=int) + +args = parser.parse_args() + +scope = ["https://spreadsheets.google.com/feeds",'https://www.googleapis.com/auth/spreadsheets',"https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive"] +creds = ServiceAccountCredentials.from_json_keyfile_name(args.cred, scope) + +client = gspread.authorize(creds) + +sheet = client.open(args.name).sheet1 # Open the spreadhseet + +data = sheet.get_all_records() # Get a list of all records + +if args.row is not None and args.column==None: + row = sheet.row_values(args.row) # Get a specific row + print(row) +elif args.row ==None and args.column is not None: + col = sheet.col_values(args.column) # Get a specific column + print(col) +elif args.row is not None and args.column is not None: + cell = sheet.cell(args.row,args.column).value # Get the value of a specific cell + print(cell) From 33c10f3c1a61d749bde670cc4ba625f5357525d6 Mon Sep 17 00:00:00 2001 From: Pablo Aragon Date: Mon, 12 Dec 2022 11:22:28 +0100 Subject: [PATCH 02/23] #9059 Change sizes search --- pandora_console/godmode/groups/group_list.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pandora_console/godmode/groups/group_list.php b/pandora_console/godmode/groups/group_list.php index 7856f68665..954e1f2e7b 100644 --- a/pandora_console/godmode/groups/group_list.php +++ b/pandora_console/godmode/groups/group_list.php @@ -782,18 +782,18 @@ if ($tab == 'tree') { $form = "
"; $form .= ""; - $form .= ''; + $form .= ''; $form .= '
'.__('Search').' '; + $form .= '
'.__('Search').'   '; $form .= html_print_input_text( 'search', $search, '', - 100, - 100, + 30, + 30, true ); - $form .= ''; + $form .= ''; $form .= ""; - $form .= '
'; $form .= '
'; From 030c50e533bea479621fb4ada89674043acccd95 Mon Sep 17 00:00:00 2001 From: Pablo Aragon Date: Mon, 12 Dec 2022 18:53:11 +0100 Subject: [PATCH 03/23] 9052 Edit styles of Manage agents / Modules --- .../godmode/agentes/module_manager.php | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/pandora_console/godmode/agentes/module_manager.php b/pandora_console/godmode/agentes/module_manager.php index dd497da13d..a472d39ba7 100644 --- a/pandora_console/godmode/agentes/module_manager.php +++ b/pandora_console/godmode/agentes/module_manager.php @@ -52,13 +52,13 @@ if (!isset($policy_page)) { echo '
'; echo ''; -echo "'; echo "'; -echo ""; echo ''; // Check if there is at least one server of each type available to assign that // kind of modules. If not, do not show server type in combo. @@ -179,7 +178,7 @@ if (($policy_page) || (isset($agent))) { // Create module/type combo. echo ''; if (!$policy_page) { - echo ''; } - echo ''; - echo ''; echo ''; From ad39ca397edf0bc41f15162d81274274cef52080 Mon Sep 17 00:00:00 2001 From: Luis Date: Tue, 13 Dec 2022 20:08:04 +0100 Subject: [PATCH 04/23] Fi browser console reporting errors --- .../operation/snmpconsole/snmp_browser.php | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/pandora_console/operation/snmpconsole/snmp_browser.php b/pandora_console/operation/snmpconsole/snmp_browser.php index d8e8b9e497..35878370da 100644 --- a/pandora_console/operation/snmpconsole/snmp_browser.php +++ b/pandora_console/operation/snmpconsole/snmp_browser.php @@ -678,13 +678,16 @@ function show_add_module() { //Submit form to agent module url. $("#snmp_create_module").attr( "action", - "index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente="+id_agent+"&tab=module&edit_module=1"); + "index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente=" + +id_agent+ + "&tab=module&edit_module=1" + ); $('#snmp_create_module').submit(); - - - //Close dialog. - $('#dialog_create_module').dialog("close"); + }, + onDeny: function () { + $("#dialog_create_module").dialog("close"); + return false; } }); } From 897bca7807071552713d91259bef69239531e050 Mon Sep 17 00:00:00 2001 From: Luis Date: Wed, 14 Dec 2022 09:11:29 +0100 Subject: [PATCH 05/23] SO filter on policy --- pandora_console/godmode/groups/group_list.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pandora_console/godmode/groups/group_list.php b/pandora_console/godmode/groups/group_list.php index 7856f68665..1de2ed88ec 100644 --- a/pandora_console/godmode/groups/group_list.php +++ b/pandora_console/godmode/groups/group_list.php @@ -92,6 +92,7 @@ if (is_ajax() === true) { if ($get_group_agents === true) { ob_clean(); $id_group = (int) get_parameter('id_group'); + $id_os = (int) get_parameter('id_os', 0); $disabled = (int) get_parameter('disabled', 0); $search = (string) get_parameter('search', ''); $recursion = (int) get_parameter('recursion', 0); @@ -151,6 +152,10 @@ if (is_ajax() === true) { $filter['status'] = $status_agents; } + if ($id_os !== 0) { + $filter['id_os'] = $id_os; + } + $_sql_post = ' 1=1 '; if ($show_void_agents == 0) { $_sql_post .= ' AND id_agente IN (SELECT a.id_agente FROM tagente a, tagente_modulo b WHERE a.id_agente=b.id_agente AND b.delete_pending=0) AND \'1\''; From 4ea10b5a5bb8c255456ac2eeced9447ae7bbda55 Mon Sep 17 00:00:00 2001 From: "alejandro.campos@artica.es" Date: Thu, 15 Dec 2022 13:24:51 +0100 Subject: [PATCH 06/23] changed user password hashing --- pandora_console/extras/mr/60.sql | 2 ++ pandora_console/include/auth/mysql.php | 20 +++++++++++++------- pandora_console/pandoradb.sql | 2 +- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/pandora_console/extras/mr/60.sql b/pandora_console/extras/mr/60.sql index 638c4b3031..622e73c173 100644 --- a/pandora_console/extras/mr/60.sql +++ b/pandora_console/extras/mr/60.sql @@ -8,4 +8,6 @@ ALTER TABLE `tagent_custom_fields` ADD `is_link_enabled` TINYINT(1) NOT NULL DEF ALTER TABLE `tevent_filter` ADD COLUMN `owner_user` TEXT; ALTER TABLE `tevent_filter` ADD COLUMN `not_search` INT NOT NULL DEFAULT 0; +ALTER TABLE `tusuario` MODIFY COLUMN `password` VARCHAR(60) DEFAULT NULL; + COMMIT; diff --git a/pandora_console/include/auth/mysql.php b/pandora_console/include/auth/mysql.php index 8725f0f819..8d222a2504 100644 --- a/pandora_console/include/auth/mysql.php +++ b/pandora_console/include/auth/mysql.php @@ -213,10 +213,16 @@ function process_user_login_local($login, $pass, $api=false) $row = db_get_row_sql($sql); - // Check that row exists, that password is not empty and that password is the same hash - if ($row !== false && $row['password'] !== md5('') - && $row['password'] == md5($pass) - ) { + // Perform password check whether it is MD5-hashed (old hashing) or Bcrypt-hashed. + if (strlen($row['password']) === 32) { + // MD5. + $credentials_check = $row !== false && $row['password'] !== md5('') && $row['password'] == md5($pass); + } else { + // Bcrypt. + $credentials_check = password_verify($pass, $row['password']); + } + + if ($credentials_check === true) { // Login OK // Nick could be uppercase or lowercase (select in MySQL // is not case sensitive) @@ -656,7 +662,7 @@ function create_user($id_user, $password, $user_info) { $values = $user_info; $values['id_user'] = $id_user; - $values['password'] = md5($password); + $values['password'] = password_hash($password, PASSWORD_BCRYPT); $values['last_connect'] = 0; $values['registered'] = get_system_time(); @@ -766,7 +772,7 @@ function update_user_password(string $user, string $password_new) if (isset($config['auth']) === true && $config['auth'] === 'pandora') { $sql = sprintf( - "UPDATE tusuario SET password = '".md5($password_new)."', last_pass_change = '".date('Y-m-d H:i:s', get_system_time())."' WHERE id_user = '".$user."'" + "UPDATE tusuario SET password = '".password_hash($password_new, PASSWORD_BCRYPT)."', last_pass_change = '".date('Y-m-d H:i:s', get_system_time())."' WHERE id_user = '".$user."'" ); $connection = mysql_connect_db( @@ -786,7 +792,7 @@ function update_user_password(string $user, string $password_new) return db_process_sql_update( 'tusuario', [ - 'password' => md5($password_new), + 'password' => password_hash($password_new, PASSWORD_BCRYPT), 'last_pass_change' => date('Y/m/d H:i:s', get_system_time()), ], ['id_user' => $user] diff --git a/pandora_console/pandoradb.sql b/pandora_console/pandoradb.sql index f135db927e..c9f77702c0 100644 --- a/pandora_console/pandoradb.sql +++ b/pandora_console/pandoradb.sql @@ -1275,7 +1275,7 @@ CREATE TABLE IF NOT EXISTS `tusuario` ( `firstname` VARCHAR(255) NOT NULL, `lastname` VARCHAR(255) NOT NULL, `middlename` VARCHAR(255) NOT NULL, - `password` VARCHAR(45) DEFAULT NULL, + `password` VARCHAR(60) DEFAULT NULL, `comments` VARCHAR(200) DEFAULT NULL, `last_connect` BIGINT NOT NULL DEFAULT 0, `registered` BIGINT NOT NULL DEFAULT 0, From 7e507d454ba0a149699546fece77b2c9916ce867 Mon Sep 17 00:00:00 2001 From: "alejandro.campos@artica.es" Date: Fri, 16 Dec 2022 12:12:11 +0100 Subject: [PATCH 07/23] change password field length --- pandora_console/extras/mr/60.sql | 2 +- pandora_console/pandoradb.sql | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pandora_console/extras/mr/60.sql b/pandora_console/extras/mr/60.sql index 622e73c173..73948ea8d8 100644 --- a/pandora_console/extras/mr/60.sql +++ b/pandora_console/extras/mr/60.sql @@ -8,6 +8,6 @@ ALTER TABLE `tagent_custom_fields` ADD `is_link_enabled` TINYINT(1) NOT NULL DEF ALTER TABLE `tevent_filter` ADD COLUMN `owner_user` TEXT; ALTER TABLE `tevent_filter` ADD COLUMN `not_search` INT NOT NULL DEFAULT 0; -ALTER TABLE `tusuario` MODIFY COLUMN `password` VARCHAR(60) DEFAULT NULL; +ALTER TABLE `tusuario` MODIFY COLUMN `password` VARCHAR(72) DEFAULT NULL; COMMIT; diff --git a/pandora_console/pandoradb.sql b/pandora_console/pandoradb.sql index c9f77702c0..c16b075c4b 100644 --- a/pandora_console/pandoradb.sql +++ b/pandora_console/pandoradb.sql @@ -1275,7 +1275,7 @@ CREATE TABLE IF NOT EXISTS `tusuario` ( `firstname` VARCHAR(255) NOT NULL, `lastname` VARCHAR(255) NOT NULL, `middlename` VARCHAR(255) NOT NULL, - `password` VARCHAR(60) DEFAULT NULL, + `password` VARCHAR(72) DEFAULT NULL, `comments` VARCHAR(200) DEFAULT NULL, `last_connect` BIGINT NOT NULL DEFAULT 0, `registered` BIGINT NOT NULL DEFAULT 0, From bd7480a1e1c0a4cbc7732a78aba21e318893231c Mon Sep 17 00:00:00 2001 From: "alejandro.campos@artica.es" Date: Tue, 20 Dec 2022 12:22:43 +0100 Subject: [PATCH 08/23] bcrypt implementation --- pandora_console/include/auth/mysql.php | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/pandora_console/include/auth/mysql.php b/pandora_console/include/auth/mysql.php index 8d222a2504..618696069b 100644 --- a/pandora_console/include/auth/mysql.php +++ b/pandora_console/include/auth/mysql.php @@ -237,6 +237,11 @@ function process_user_login_local($login, $pass, $api=false) return false; } + // Override password to use Bcrypt encryption. + if (strlen($row['password']) === 32) { + update_user_password($login, $pass); + } + return $row['id_user']; } else { if (!user_can_login($login)) { @@ -753,7 +758,7 @@ function delete_user(string $id_user) /** - * Update the password in MD5 for user pass as id_user with + * Update the password using BCRYPT algorithm for specific id_user passing * password in plain text. * * @param string $user User ID. @@ -1056,7 +1061,7 @@ function create_user_and_permisions_ldap( $values['id_user'] = $id_user; if ($config['ldap_save_password'] || $config['ad_save_password']) { - $values['password'] = md5($password); + $values['password'] = password_hash($password, PASSWORD_BCRYPT); } $values['last_connect'] = 0; @@ -1488,9 +1493,9 @@ function change_local_user_pass_ldap($id_user, $password) $local_user_pass = db_get_value_filter('password', 'tusuario', ['id_user' => $id_user]); $return = false; - if (md5($password) !== $local_user_pass) { + if (password_hash($password, PASSWORD_BCRYPT) !== $local_user_pass) { $values_update = []; - $values_update['password'] = md5($password); + $values_update['password'] = password_hash($password, PASSWORD_BCRYPT); $return = db_process_sql_update('tusuario', $values_update, ['id_user' => $id_user]); } From 22b63222c9aab67b0533f60c341238d0ddcd1b4d Mon Sep 17 00:00:00 2001 From: "alejandro.campos@artica.es" Date: Tue, 20 Dec 2022 12:27:58 +0100 Subject: [PATCH 09/23] bcrypt implementation --- pandora_console/extras/mr/60.sql | 2 +- pandora_console/pandoradb.sql | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pandora_console/extras/mr/60.sql b/pandora_console/extras/mr/60.sql index 73948ea8d8..622e73c173 100644 --- a/pandora_console/extras/mr/60.sql +++ b/pandora_console/extras/mr/60.sql @@ -8,6 +8,6 @@ ALTER TABLE `tagent_custom_fields` ADD `is_link_enabled` TINYINT(1) NOT NULL DEF ALTER TABLE `tevent_filter` ADD COLUMN `owner_user` TEXT; ALTER TABLE `tevent_filter` ADD COLUMN `not_search` INT NOT NULL DEFAULT 0; -ALTER TABLE `tusuario` MODIFY COLUMN `password` VARCHAR(72) DEFAULT NULL; +ALTER TABLE `tusuario` MODIFY COLUMN `password` VARCHAR(60) DEFAULT NULL; COMMIT; diff --git a/pandora_console/pandoradb.sql b/pandora_console/pandoradb.sql index c16b075c4b..c9f77702c0 100644 --- a/pandora_console/pandoradb.sql +++ b/pandora_console/pandoradb.sql @@ -1275,7 +1275,7 @@ CREATE TABLE IF NOT EXISTS `tusuario` ( `firstname` VARCHAR(255) NOT NULL, `lastname` VARCHAR(255) NOT NULL, `middlename` VARCHAR(255) NOT NULL, - `password` VARCHAR(72) DEFAULT NULL, + `password` VARCHAR(60) DEFAULT NULL, `comments` VARCHAR(200) DEFAULT NULL, `last_connect` BIGINT NOT NULL DEFAULT 0, `registered` BIGINT NOT NULL DEFAULT 0, From 380c7150e1165e9537b9fb6d66e07d82c36c768e Mon Sep 17 00:00:00 2001 From: Ramon Novoa Date: Tue, 20 Dec 2022 11:44:08 +0100 Subject: [PATCH 10/23] Add support for thread stats. ProducerConsumerServer generates per-thread statistics that are collected as part of the Pandora FMS's self-monitoring. --- pandora_server/bin/pandora_server | 10 + pandora_server/lib/PandoraFMS/Core.pm | 64 +++++++ .../lib/PandoraFMS/ProducerConsumerServer.pm | 171 +++++++++++------- pandora_server/lib/PandoraFMS/Server.pm | 68 ++++++- 4 files changed, 250 insertions(+), 63 deletions(-) diff --git a/pandora_server/bin/pandora_server b/pandora_server/bin/pandora_server index e6ec7ed6dc..45800de908 100755 --- a/pandora_server/bin/pandora_server +++ b/pandora_server/bin/pandora_server @@ -855,6 +855,7 @@ sub main() { # Main loop my $time_ref = time (); + my $thr_time_ref = 0; my $test_remote_interval = ($Config{'keepalive'}/$Config{'server_threshold'}); my $test_remote = 0; while ($RUN == 1) { @@ -870,6 +871,15 @@ sub main() { # Make sure all server threads are running. die("Server thread crashed.") unless (check_server_threads() == 1); + # Monitor server threads. + if (defined($Config{"self_monitoring"}) + && $Config{"self_monitoring"} == 1 + && !is_metaconsole(\%Config) + && time() - $thr_time_ref > $Config{'self_monitoring_interval'}) { + $thr_time_ref = time(); + pandora_thread_monitoring (\%Config, $DBH, \@Servers); + } + db_do ($DBH, "UPDATE tserver SET status = -1 WHERE UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(keepalive) > 2*server_keepalive diff --git a/pandora_server/lib/PandoraFMS/Core.pm b/pandora_server/lib/PandoraFMS/Core.pm index e4bf6eeaae..18db0d3b64 100644 --- a/pandora_server/lib/PandoraFMS/Core.pm +++ b/pandora_server/lib/PandoraFMS/Core.pm @@ -98,6 +98,8 @@ Exported Functions: =item * C +=item * C + =item * C =back @@ -258,6 +260,7 @@ our @EXPORT = qw( pandora_group_statistics pandora_server_statistics pandora_self_monitoring + pandora_thread_monitoring pandora_sample_agent pandora_process_policy_queue pandora_sync_agents_integria @@ -6064,6 +6067,67 @@ sub pandora_self_monitoring ($$) { print XMLFILE $xml_output; close (XMLFILE); } + +########################################################################## +=head2 C<< pandora_thread_monitoring (I<$pa_config>, I<$dbh>, I<$servers>) >> + +Generate stats for Pandora FMS threads. + +=cut +########################################################################## + +sub pandora_thread_monitoring ($$$) { + my ($pa_config, $dbh, $servers) = @_; + my $utimestamp = time (); + my $timestamp = strftime ("%Y-%m-%d %H:%M:%S", localtime()); + + my $xml_output = ""; + + $xml_output = "{'version'} . "' agent_name='".$pa_config->{'servername'} . "' agent_alias='".$pa_config->{'servername'} . "' interval='".$pa_config->{"self_monitoring_interval"}."' timestamp='".$timestamp."' >"; + foreach my $server (@{$servers}) { + while (my ($tid, $stats) = each(%{$server->getProducerStats()})) { + $xml_output .=" "; + $xml_output .=" " . uc($ServerTypes[$server->{'_server_type'}]) . " Producer Status"; + $xml_output .=" generic_proc"; + $xml_output .=" " . (time() - $stats->{'tstamp'} < 2 * $pa_config->{"self_monitoring_interval"} ? 1 : 0) . ""; + $xml_output .=" "; + + $xml_output .=" "; + $xml_output .=" " . uc($ServerTypes[$server->{'_server_type'}]) . " Producer Processing Rate"; + $xml_output .=" generic_data"; + $xml_output .=" " . $stats->{'rate'} . ""; + $xml_output .=" tasks/second"; + $xml_output .=" "; + } + + my $idx = 0; + my $consumer_stats = $server->getConsumerStats(); + foreach my $tid (sort(keys(%{$consumer_stats}))) { + my $stats = $consumer_stats->{$tid}; + + $idx += 1; + $xml_output .=" "; + $xml_output .=" " . uc($ServerTypes[$server->{'_server_type'}]) . " Consumer #$idx Status"; + $xml_output .=" generic_proc"; + $xml_output .=" " . (time() - $stats->{'tstamp'} < 2 * $pa_config->{"self_monitoring_interval"} ? 1 : 0) . ""; + $xml_output .=" "; + + $xml_output .=" "; + $xml_output .=" " . uc($ServerTypes[$server->{'_server_type'}]) . " Consumer #$idx Processing Rate"; + $xml_output .=" generic_data"; + $xml_output .=" " . $stats->{'rate'} . ""; + $xml_output .=" tasks/second"; + $xml_output .=" "; + } + } + $xml_output .= ""; + + my $filename = $pa_config->{"incomingdir"}."/".$pa_config->{'servername'}.".threads.".$utimestamp.".data"; + open (XMLFILE, ">", $filename) or die "[FATAL] Could not write to the thread monitoring XML file '$filename'"; + print XMLFILE $xml_output; + close (XMLFILE); +} + ########################################################################## =head2 C<< xml_module_template (I<$module_name>, I<$module_type>, I<$module_data>) >> diff --git a/pandora_server/lib/PandoraFMS/ProducerConsumerServer.pm b/pandora_server/lib/PandoraFMS/ProducerConsumerServer.pm index 11026ae0b2..770bc06522 100644 --- a/pandora_server/lib/PandoraFMS/ProducerConsumerServer.pm +++ b/pandora_server/lib/PandoraFMS/ProducerConsumerServer.pm @@ -89,6 +89,15 @@ sub run ($$$$$) { # Launch consumer threads for (1..$self->getNumThreads ()) { + + # Enable consumer stats + my $consumer_stats = shared_clone({ + 'tstamp' => time(), + 'rate' => 0, + 'rate_count' => 0, + 'rate_tstamp' => time() + }); + my $thr = threads->create ({'exit' => 'thread_only'}, sub { my ($self, $task_queue, $pending_tasks, $sem, $task_sem) = @_; @@ -98,13 +107,29 @@ sub run ($$$$$) { $sem->up(); exit 0; }; + + # Make consumer stats reachable from the thread + $self->{'_consumer_stats'}->{threads->tid()} = $consumer_stats; + PandoraFMS::ProducerConsumerServer::data_consumer->(@_); }, $self, $task_queue, $pending_tasks, $sem, $task_sem ); return unless defined ($thr); $self->addThread ($thr->tid ()); + + # Make consumer stats reachable from the main program + $self->{'_consumer_stats'}->{$thr->tid()} = $consumer_stats; } + + # Enable producer stats + my $producer_stats = shared_clone({ + 'tstamp' => time(), + 'rate' => 0, + 'rate_count' => 0, + 'rate_tstamp' => time() + }); + # Launch producer thread my $thr = threads->create ({'exit' => 'thread_only'}, sub { @@ -115,11 +140,18 @@ sub run ($$$$$) { $sem->up(); exit 0; }; + + # Make producer stats reachable from the thread + $self->{'_producer_stats'}->{threads->tid()} = $producer_stats; + PandoraFMS::ProducerConsumerServer::data_producer->(@_); }, $self, $task_queue, $pending_tasks, $sem, $task_sem ); return unless defined ($thr); $self->addThread ($thr->tid ()); + + # Make producer stats reachable from the main program + $self->{'_producer_stats'}->{$thr->tid()} = $producer_stats; } ############################################################################### @@ -130,46 +162,50 @@ sub data_producer ($$$$$) { my $pa_config = $self->getConfig (); my $dbh; - eval { - # Connect to the DB - $dbh = db_connect ($pa_config->{'dbengine'}, $pa_config->{'dbname'}, $pa_config->{'dbhost'}, $pa_config->{'dbport'}, - $pa_config->{'dbuser'}, $pa_config->{'dbpass'}); - $self->setDBH ($dbh); + while ($RUN == 1) { + eval { + # Connect to the DB + $dbh = db_connect ($pa_config->{'dbengine'}, $pa_config->{'dbname'}, $pa_config->{'dbhost'}, $pa_config->{'dbport'}, + $pa_config->{'dbuser'}, $pa_config->{'dbpass'}); + $self->setDBH ($dbh); - while ($RUN == 1) { + while ($RUN == 1) { - # Get pending tasks - $self->logThread('[PRODUCER] Queuing tasks.'); - my @tasks = &{$self->{'_producer'}}($self); - - foreach my $task (@tasks) { - $sem->down; + # Get pending tasks + $self->logThread('[PRODUCER] Queuing tasks.'); + my @tasks = &{$self->{'_producer'}}($self); - last if ($RUN == 0); - if (defined $pending_tasks->{$task}) { - $sem->up; - next; - } + foreach my $task (@tasks) { + $sem->down; - # Queue task and signal consumers - $pending_tasks->{$task} = 0; - push (@{$task_queue}, $task); - $task_sem->up; - - $sem->up; + last if ($RUN == 0); + if (defined $pending_tasks->{$task}) { + $sem->up; + next; + } + + # Queue task and signal consumers + $pending_tasks->{$task} = 0; + push (@{$task_queue}, $task); + $task_sem->up; + + $sem->up; + } + + last if ($RUN == 0); + + # Update queue size and thread stats + $self->setQueueSize (scalar @{$task_queue}); + $self->updateProducerStats(scalar(@tasks)); + + threads->yield; + usleep (int(1e6 * $self->getPeriod())); } - - last if ($RUN == 0); - # Update queue size for statistics - $self->setQueueSize (scalar @{$task_queue}); - - threads->yield; - usleep (int(1e6 * $self->getPeriod())); + }; + + if ($@) { + print STDERR $@; } - }; - - if ($@) { - $self->setErrStr ($@); } $task_sem->up($self->getNumThreads ()); @@ -185,40 +221,51 @@ sub data_consumer ($$$$$) { my $pa_config = $self->getConfig (); my $dbh; - eval { - # Connect to the DB - $dbh = db_connect ($pa_config->{'dbengine'}, $pa_config->{'dbname'}, $pa_config->{'dbhost'}, $pa_config->{'dbport'}, - $pa_config->{'dbuser'}, $pa_config->{'dbpass'}); - $self->setDBH ($dbh); + my $sem_timeout = $pa_config->{'self_monitoring_interval'} > 0 ? + $pa_config->{'self_monitoring_interval'} : + 300; + while ($RUN == 1) { + eval { + # Connect to the DB + $dbh = db_connect ($pa_config->{'dbengine'}, $pa_config->{'dbname'}, $pa_config->{'dbhost'}, $pa_config->{'dbport'}, + $pa_config->{'dbuser'}, $pa_config->{'dbpass'}); + $self->setDBH ($dbh); - while ($RUN == 1) { - # Wait for data - $self->logThread('[CONSUMER] Waiting for data.'); - $task_sem->down; + while ($RUN == 1) { + # Wait for data + $self->logThread('[CONSUMER] Waiting for data.'); + while (!$task_sem->down_timed($sem_timeout)) { + $self->updateConsumerStats(0); + } - $sem->down; - last if ($RUN == 0); - my $task = shift (@{$task_queue}); - $sem->up; + last if ($RUN == 0); - # The consumer was waiting for data when the producer exited - last if ($RUN == 0); - - # Execute task - $self->logThread("[CONSUMER] Executing task: $task"); - &{$self->{'_consumer'}}($self, $task); + $sem->down; + my $task = shift (@{$task_queue}); + $sem->up; - # Update task status - $sem->down; - delete ($pending_tasks->{$task}); - $sem->up; + # The consumer was waiting for data when the producer exited + last if ($RUN == 0); + + # Execute task + $self->logThread("[CONSUMER] Executing task: $task"); + &{$self->{'_consumer'}}($self, $task); - threads->yield; + # Update thread stats + $self->updateConsumerStats(1); + + # Update task status + $sem->down; + delete ($pending_tasks->{$task}); + $sem->up; + + threads->yield; + } + }; + + if ($@) { + print STDERR $@; } - }; - - if ($@) { - $self->setErrStr ($@); } db_disconnect ($dbh); diff --git a/pandora_server/lib/PandoraFMS/Server.pm b/pandora_server/lib/PandoraFMS/Server.pm index 41a07b1418..9009c2bbf3 100644 --- a/pandora_server/lib/PandoraFMS/Server.pm +++ b/pandora_server/lib/PandoraFMS/Server.pm @@ -47,7 +47,9 @@ sub new ($$$;$) { _threads => [], _queue_size => 0, _errstr => '', - _period => 0 + _period => 0, + _producer_stats => {}, + _consumer_stats => {}, }; # Share variables that may be set from different threads @@ -176,6 +178,24 @@ sub getServerType ($) { return $self->{'_server_type'}; } +######################################################################################## +# Return consumer stats. +######################################################################################## +sub getConsumerStats ($) { + my $self = shift; + + return $self->{'_consumer_stats'}; +} + +######################################################################################## +# Return producer stats. +######################################################################################## +sub getProducerStats ($) { + my $self = shift; + + return $self->{'_producer_stats'}; +} + ######################################################################################## # Set error string. ######################################################################################## @@ -337,6 +357,52 @@ sub stop ($) { } } +######################################################################################## +# Update stats for the current thread. +######################################################################################## +sub updateStats ($$$) { + my ($self, $dest, $inc) = @_; + my $tid = threads->tid(); + my $curr_time = time(); + + # Stats disabled for this thread. + if (!defined($dest->{$tid})) { + return; + } + + # Update the timestamp and count. + $dest->{$tid}->{'tstamp'} = time(); + $dest->{$tid}->{'rate_count'} += $inc; + + # Compute the processing rate. + my $elapsed = $curr_time - $dest->{$tid}->{'rate_tstamp'}; + if ($elapsed >= $self->{'_pa_config'}->{'self_monitoring_interval'}) { + $dest->{$tid}->{'rate'} = $dest->{$tid}->{'rate_count'} / $elapsed; + $dest->{$tid}->{'rate_count'} = 0; + $dest->{$tid}->{'rate_tstamp'} = $curr_time; + return; + } +} + + +######################################################################################## +# Update producer stats. +######################################################################################## +sub updateProducerStats ($$) { + my ($self, $queued_tasks) = @_; + + $self->updateStats($self->{'_producer_stats'}, $queued_tasks); +} + +######################################################################################## +# Update consumer stats. +######################################################################################## +sub updateConsumerStats ($$) { + my ($self, $processed_tasks) = @_; + + $self->updateStats($self->{'_consumer_stats'}, $processed_tasks); +} + # End of function declaration # End of defined Code From 90e5205b168d97267890fb2038ab747b452d92c1 Mon Sep 17 00:00:00 2001 From: "alejandro.campos@artica.es" Date: Tue, 20 Dec 2022 13:41:25 +0100 Subject: [PATCH 11/23] changed admin pass encryption --- pandora_console/pandoradb_data.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandora_console/pandoradb_data.sql b/pandora_console/pandoradb_data.sql index 8e00936d8a..3534609c3c 100644 --- a/pandora_console/pandoradb_data.sql +++ b/pandora_console/pandoradb_data.sql @@ -345,7 +345,7 @@ INSERT INTO `tmodule_inventory` (`id_module_inventory`, `id_os`, `name`, `descri -- Dumping data for table `tusuario` -- INSERT INTO `tusuario` (`id_user`, `fullname`, `firstname`, `lastname`, `middlename`, `password`, `comments`, `last_connect`, `registered`, `email`, `phone`, `is_admin`, `language`, `block_size`, `section`, `data_section`, `metaconsole_access`, `local_user`) VALUES -('admin', 'Pandora', 'Pandora', 'Admin', '', '1da7ee7d45b96d0e1f45ee4ee23da560', 'Admin Pandora', 1232642121, 0, 'admin@example.com', '555-555-5555', 1, 'default', 0, 'Default', '', 'advanced', 1); +('admin', 'Pandora', 'Pandora', 'Admin', '', '$2y$10$Wv/xoxjI2VAkthJhk/PzeeGIhBKYU/K.TMgUdmW7fEP2NQkdWlB9K', 'Admin Pandora', 1232642121, 0, 'admin@example.com', '555-555-5555', 1, 'default', 0, 'Default', '', 'advanced', 1); -- -- Dumping data for table `tusuario_perfil` From 78c4f15c1656fae015b5eb33c3ecd5eec68098aa Mon Sep 17 00:00:00 2001 From: Pablo Aragon Date: Wed, 21 Dec 2022 12:56:26 +0100 Subject: [PATCH 12/23] 9994 Add trigger to id_module_group --- pandora_console/include/javascript/pandora_modules.js | 1 + 1 file changed, 1 insertion(+) diff --git a/pandora_console/include/javascript/pandora_modules.js b/pandora_console/include/javascript/pandora_modules.js index b626a8f969..7a0915b6ee 100644 --- a/pandora_console/include/javascript/pandora_modules.js +++ b/pandora_console/include/javascript/pandora_modules.js @@ -380,6 +380,7 @@ function configure_modules_form() { $("#text-snmp_oid").val(js_html_entity_decode(data["snmp_oid"])); $("#oid, img#edit_oid").hide(); $("#id_module_group").val(data["id_module_group"]); + $("#id_module_group").trigger("change"); $("#max_timeout").attr("value", data["max_timeout"]); $("#max_retries").attr("value", data["max_retries"]); if (data["id_plugin"] != undefined) { From b2f82807f115d934099189337f587bcff3a14a62 Mon Sep 17 00:00:00 2001 From: daniel Date: Wed, 21 Dec 2022 13:11:24 +0100 Subject: [PATCH 13/23] translates pandora_enterprise#10050 --- pandora_console/include/languages/es.mo | Bin 791740 -> 793210 bytes pandora_console/include/languages/es.po | 15425 ++--- pandora_console/include/languages/fr.mo | Bin 814787 -> 816398 bytes pandora_console/include/languages/fr.po | 15441 ++--- pandora_console/include/languages/index.pot | 54596 ++++++++++-------- 5 files changed, 45665 insertions(+), 39797 deletions(-) diff --git a/pandora_console/include/languages/es.mo b/pandora_console/include/languages/es.mo index ee52593bb6bb0114aa4a0d661dcf78295f1a37f0..15d6b5a89dba1e27557f20acd7e269d953c984c9 100644 GIT binary patch delta 199566 zcmXWkcfgL-|G@Fv^E|Q%+3T_Q%8cwyMp>a@L^MbdUyWN?4Uv$HtcHq685K!V8d8+e z(o}XyB?{m7`#$IQ&+D9XUDr9E^Eu~S*ByQPZGN%Nxpj4t2Mc7(P4IuC%O?^g@!1kt z60K?{5;Yp7*_^2JXIdf~*2O${1?IyJm;?LbB{&El$KjY0&ti7W_$w`u74u+)EQv%x zEI_^S->K)4i7php@fvJ_1JD5%Vhwx-YvE^D8ZV*)ls=P|D1=q98n(c^cuQ>mA6`a% zCYHfxu`q7O3ivfvOe87&6B;T-yI_5q?}$E!Rj7Z3xiI}~2smG~DAuFBELOta*dFgi zC-N>j2$sUTumsME^_S5-^l|hs zI+3jZh35;S6Q~kx@n2dp)nOkRym45(aU42>htaiOgr;~!y#95(egd6I;(S=+oal4a z(C3=PddKJhbO}eI6PR#5nU*L^;VBxN>6`J!U1&f*pquaybTgH?5C*D`Ew~8J z_IUl_=%VNvG=Obb6nCMg3ltGCI&OG&A?2&&|OlOmGQ0PK#{miQ?D|*?Y;v2nr538h!8{^v2nE zCoV@fX`$?4z*6XamCz+?j&9Ctuo&KiX72vzEOh42Mqfn(+lo0n{~xCciNs#C!|%`+ z&1v+(0y)A1ndm^(W4&3lBf2+wqDwOz>)>QGgX^&;9zgd*jhvys26&0*za@psu>-nx z6Yv3?iawA%SIAI)bf6NkUI!hp3A!YG(98@$`?&|5&@}W|E{yfpkrheo#H5>R7X{zp zU!Vhiji&tP*nT{EI<}ufQ<#=Jmr(! z=#K7%zG#PoV*4%8JJCQVpaVUCF42_eY;=HS(Pz6>cQv|%}r96 zOko*L!b%0w6I1XdoP%`=vPSqGzJu*93j<~=6avhNZm#@Tg_I1%+o;bdnx1Hg|6&Kc zyjZADz_QfWqT?k$r!bsC-{R?sYl(O(n!;kG(i8o$B%0!J=z~+x&*uuPi9693%{eqv z1xtseDTVH>vgk}J$M$;BM#!d3CYn+(l^sJv;_6tx0e$f1*nSr}(~0QXe-S-^F5Nfi z()^0{_ZxbQ|3L#TQYJl-iC3a8pzE=uxgAd-wHD}1m*F?K2A%Qr%=E;)xEjY{^|E12 zpTXnQ=ax%P+=maA4*?`9gn+W6{T4)zZ5j0ISs&e7ZLy$h+l7KDyb%pxJeI?$=$q_C z^qsvK`DK>)9Gz);#qdJPg}!=Aq4(882keY~#BN023wNLaJcI`D6eew05-+TYzKy<+ zK1E-}X_bQc(GD}w0qde2cR&Nb5xxI*^z(WzdjA3}gDYeE$LRe>DsldO;7n||q;go> z%h1#nMc1+dnu(gxmhpN|bf!0=6B&cyOmtH&M8|m!GjSc7slAnx;eq2c*wLAI zAvb5q2g{=m)o>&ua5Ug?=&N{AY=0abXi0PfdfzALeP1Rin4(|M0nVWB z?3`6Y0Hx8us-T%@hR(1(xs!$YeTeRz&(Vn`zm6A`#@He>VXAgoIJWOOF0(V4u72EGH`6JKNMD~e{IK=rU^s$wSf7D#(CF_41C zY#iF*e6+*o&<KcF-C1D$b}8esxC(d&iK_DX1GYNP$OMK|Zwsdmoa zC<>-(GMa&T=x22~j=(MPdX<{tMbZ=vY#^G_G3aymqi?*2(c?T5ef7S8zHoj=Q=h9= z*sKMyu;;%#1v_ej&ZsTgQBQOx{m=n#K{Iqe+TkPUOrDGF@1oCt8a;?UcLL2|mfB&W z`OrYhVbT;;qu}wWhyKE86YIUv>qF5DjYL!V0J^46qCdG_j`baAKL?{H(fco;fflS2 zCR7(4r*$39zi+x;G#Jr1bigF~hI$Ci#7wks;x*yHpFIXObM>p|hb;Eu2 z(SF-tBfJXh;^exVe=lsH!BoGEuH|RwOuj}x9>>tlbLr(Fm8H-(V0E;;6}s!Yp+B{T zp(&q)F2O8xz~`_Y?njq0SF&Du>YsXxppo}QJGuw$Xf_(yE9e97U_1OITCjfjCiFuG zdKm5JY4lXRg9h>wI+0VcUbsP6(qsh+u3;mzgR9XD3`GaN1D)XmXh$>9y|5^@uR+&x zGaBG7tcqWu_hmE;&lf@82Nlr%+aUcX6Wu6y+-{5)?m^dfDjLvStcfq80qsWvIgBpR z-_c7Nh3kdUfGeZV*GB{Ch(0#}4PZp-I_GZ;1v`Ey-Y_4lQ(u8y@N+bvGL6HM)Ita7 zf}VnF(Fu$~19~)GUx)_q0-E8?=zC!wy6JzzYM%cBSA_H242|$w^ub~1z!T8T_At8p zm!NxO9oq3ubcVm6ft`(B(j+WRLA2kB==1f^{ySpQwY!dj$8RKh?CwT8z7L(*JTybE zMYm&R>U*&!o=0b1y=ll$Q*@wf(Fxp+74cp)z~yLvYnpQYjbv+V_yP^+P^_OpJI;P( zuqb-YtDyH?jt+fME^)IgE{M*4_G??OyX5qo&XiBS~ z*PEi(JEH*)L}xMv)A0fHzA5MnYYrN~0`ye8fcCd8x&!U!t0V%x$h^^>e`8r-d9j|9^5&BOSr{DmU(T*C#3vJQJ zuSPq*KDOT(+mq-TK8g;o2;JT5(Bt(9n(_naeTUKh&&KxbEmQSmq9}#bOwkn8M>EnP z+>jWAzWeV$JDhND0rbcI^*u> z0|U^t9FBH0GS=@!H{pZm+E0(yA4daRjK1ks z8wGcFe>Ac?(DS+yo#}3L;ICu-H>^SZEc%hE)IKa(8#Hs*qZzve-8 zy6rjt&hTv-T)U6rjl0qIpQFE_0h~i$RCzmuJx~}8q!#)@8h~bG5)Q{F;`M*gK&o^M z?}KJom-?WN$q@N$8jR>=bf69BZvF_3_$RD|XVKJF=@dS@W3UeOXVHN7qI=?dG=o2* z8P3@`WU??;p`M8b+$l-Hfk&gMn}9wr4NckX*#0~^^ViT#xd}br@1OyGgFgQUnt_Yx zn&<5jPEQ$hNt&VkcR_y-B>PhEfqT&oAC2|r(ZJS6x5V}x=z#lhA|6L~{q0wU!0tl> znS?Ist@s31^Pm4O#0yn>gs)joti}xwpn5w!kE2;M?dP*dF~9Jw0Ecd*bI4b0b`0H2`Fo}(uE8tN%{m=j!cFKBZ^s7sIl5_c^y2*c3#JJLQ+hR; z^1IQ^^AbAXCUj<>#QFhrZI7ZeJQe*nnzeWM-H;Dmy6WijZP3lv4b5c#-tqhor@@Zy zLIb%EGjTZ@`MYRF_MqqZ7j(1!i*ClkeZm{C2DYa@6g@qw&_LftkKOy|QvHVI@y|Y- zf8St5`-VsxpdEKbXFeQ_d;&V~6f`pn(9Eqw2ik_dFZQA{J{i5_+Hikq^pw;_XWjzc zoL!R?{E78Hw1c_P)##7J9cZLS@j=YnF9bLX4QLgb(s$5~KSB4>*XU_Ej0Tw2KkS)8 zXr`}3pG&r<;AXf6GjS3+!)MWm*Q1$u5AA4wtRF>RNdKXq=ZpdIbf6iigHEU;n$baM z!1tm{It$Bq{+CiP@~!AG*@Z^92i?8j#QGuh!Qap|ynu9&NWU%wS|07E9vW~fbRs>` zCA&Y+tl{|zBC&CpZO3O)C|qxYbxUWTUlO*EiS zqhFy*bqL)XC(wzW!=xQ1ZVV4zhHi?gXnO7nSc=qYsIGw3EwyD1D* z0Nrdg&>45YZrB~|XK`$Q79DTZP03JrBR0H`ru=hkhZoVcYd18^;3{>Pr+SV?wJGVeaF$glXG~eS4B5@2Q>9JAxoT0jHY1fCZHLZj6dTO=nTh=2oFq0ug^y_ zwgMO9t7srs-;$mfgoDwUZ%2>cJ~ZV=(1CwL-!uPV>hJ#&w}!RKiFQ;DD`7o!6ZS_R z7=pF&X7v2dLpSfs=zVXX18zeD+>7@2ee_f`?Y1!Cf>_k^Uy6dMYKW$;H=6pp&<>tN z2Uvlw-7DyQJJ8G>!ql4)ePLZdmni-A&`&|EOuZpi!yE8fd>E4+k6I(c&*=Nm-TV@| z`PQOq`UyJIAJ73$pdFn-11~o!Y`#{}0r)HJW3dHZe@A-i->7&RucW>QD`LLUoPRrL zFgiUk3VUHK+>Y+n(`e**?+owyhUg2V4_3u{&L25595gQc_1#}+ z1|Auoo*0iGVQT_x^S|^&E9z5|6T)Ws06k`(qicN}P5oc!uFr8#n0XOwM*Yg@1ax=5 zjxOC6G~oB5d(jLXLif(!(LDEtJ(R3K!3?xUI~a@(I08K`?f~mb5o%s{E2^XSk+V}pDq1!O^K0s$Y z9o>vipaCqxhWHX1@DJDlPou}NDNAkO?a@u|PrrhG|DU5!n}#>AE*`-;SYl%MHGCC1 zqlxIAn2+w>7tn9TE^L73(A{0~O6A8|%3r3^OZ(-d`8(s0I35cXZDTL{mK``Usk-rD#Aeq0g_!)ZhQT8yh}HJNyBi z=_&NwCnklxkQ;rl7&>5OG|2hk7o*Ruo|K+Ut?4_lVIR82 zN6?vEKp!kHIdoJOZLf_kNgH%mUx%*!UFiGbC9Hybuq^(IPNdY7kb$b`Qq-TqS{q?g z8cbQI=#7|3eJuJNe-iCrHF_%EL}$1IUE43wUHv24-%&Ksf6&dEduo_@0kofTI1y_l zDL9ign28@?bv%N80}4$GZ^Xt}gZj;A$8&HvzJR{z@;?;rtB&5+AI-=#Y>Hd(YCMN# z*dgILKXDBp3&>kes4xI zF&^#req^bWiRrOn89K8yXo}yBeipBPi_Y{IdQ7uE8Ukp9-rphG3(e>tw7&`Hi)se? z17sC?|A&~}^S_URpUv;k&Gs|8MyJs=zK9;1{L@2wNwlLXXr|hsFR+`?H{L|_`K9RQ zT!p@f-bMFVuE)aeFN;|{|Me|k6ZFBB@rJ9=U3w#$>S5Rk@5WlV6`jd%=m7s=b8I^! zJux3A;eA+YW_qG4F2rtlB-;3K&VLUYrcuxXSQD$x3cI;4nvomP8IMHQ^3mA72%X_d z?1$UX`$|3$W_Sg9oUcMBFbG|e(P+O@p5Xj@eCEU(oI)e-79w;~` z+*dkU3!O=Gw4biA-WR=p7`jJBqZ4}^9cLc;+=?UxBin$PxE(#8htN%xZEgslJi2)r zqaUAcSOv$RGkqHEaDA+AN0;Us^#0SaUhK(me;xFcBs)^D<3Z?v%Y=l??rOK@+z zFm_RhFo||J9UWi}nxUuBJ@NuNqmR&;e}kEL0^Rj_pAMO+f^Ooj==H%^11Dk9P4o%{ zJNgn$?J+cU7tl=PUL5Kr&=*xz^uF3y7h9trn=xo+R-zxT_purtLHEpMOF|%Z(TulW z62JfbX|SVF=vpqr+W3BK{~PO2ud+03)_#~teH6NjA4fZU5uNE30NK!EJsc44_Fca6r`e$fH4q;Wy`E2O8K033`u|5v%=P~q!vkct>Tccm0 z6ZjJiIM;LG{$wQz-q-{ks294%|3lwcN%W016`lE$v3)hVN7kcz8dt&_%I-x(& zz;Zkv>ZQ=kT#h`KOmvJ5ebEkYN6+g$=sBH+Mm`7Kw^w(dSO0d*MGckU}fM zz*W%Wb|o5Ud-Qs5Eav$i9xptI&U6-f%$A{ntcvZg$NC5848A}+I*JBx9&2K*7s7kt z3amxFFBm6~4%84$X`k3W zG}gzWOEnpNugpdJT@l+ip%dM?lJjrJhiEW`f1vfms$d>;35ufwRYLD;fOgm>w)c$= zLpvUe{;By4bf&MOOSKaX=sPrXr&e+PZOHL*xUmEpc>}b)ee_y%z+2D&?vGAKmu>+X z;488HZFGQ7&^>hsoycFYo@I5Y=TA~dtrhz5X%y={(M@~xeh}Kx$k?7lXFdmg@CEce@fsS?0dz0? zjb^OyD`DU&Xg_t(09(a+-{|nro=p6YLN{)hi4Jry-tY%H)AY4r_vS-ip>@#H&=pPb z9cTa#p)al%(68lcG=Pn020w@%h#tn&_x~RX&Lr=v;ei_H`D}(h*bCh}H=(cKaj|_F zW>8;?zF;<>8Qh9y>XX=h09}e7(ZG(P_npQ|lN1uKg#q)UU#BWq8LviX@IP#bkDxPt z2My>;G!w_s%;j4bHeq=*Q{;d#q0ag01rj~iPv*&2+tQqGgfH>=igM_^W9YXA8gNtedY6rye>d3>8jN^UyzpSG zFF;fIGI~ruLIeC6Q)`F@o_Ia%{?ceabrcjN- z#CXF>bifbLuhu?v;8W;(BG=|HP$t?z{aC*SoyaiszOiUOkKh1&3Jvg2^hK2Yt@K21 zzyD<^81XoC?H)lpS{Umup&e~PJNOVi@86bwk7ma1--9nv^#qLkXWA->+`U< z-~WviO#L1-^6z5(Pqd>fZ--12!qnPE+n}lKgK2nMbQGH6JJIt#89o1xp-VOw9dDWK zjGtId!L`~DZ`g~b{0Fpyf6+iPwuUtvy05 zPeNbSv)|$T8_|3k?C=@%!PV$YUPG_%LI*w&>p!Cdoe!(HtVP#)J9^(fG=o2& zfuF>;@gFo3uWt`a`Zl_xA0#Q*@i*8VkHvb^_rmV(j1DviJ#J&r$e+L(xEg&yeI5NL zUN7{17@#hi@^^|3NcT z@`JDhP0;7sp?jzcx}?L<=jWmsSd2M6|F2MRMw`%qKSp0fpGSX2ANUKaW3~^&AFtIz zXZ{JA!SB(}@o#8g1wIOUs3Dq>?r3JO#|C&O7We$WK*7!SF8aIv8+1)Cpi5HX<1oY8 z=uEoe<#;ce$~Ce50JM(=Nr z+?PxYqhO@d&`iuj*Jvf$!ESWm!{|&dpabXJ7iL}+2UBl~J#aBPk>AiwnR9=bc`0

j!TTT(D({m=*RLI<3I2KFqvBnt^5~44qQ|KN`lh@V?O-ta(HVozD2d)b4IOwk zI*}L9wcir`IJO_aq%WM46nyZ~ufohq;u7lB(G-4+c6bmM;c0Y<9{)OA-+;baKSWc! z2My?ZG_!}%jHP`O#>tN^b*XPS|3+4q1|Mi1Z)lIM{Wa*!M?@!}OY&%}FGM?9g$B44 z4P-BR?hm4y?I$#I>EDLElLx)8#h^KG-Fx6k4uOSR2{vq4PK8u&~a9y8Axu44Li^Q_oFHQCAOc5X8R$exCr`c zu7L*H4(+gKygmfY%y_iFNAL=qk8Z}#aR44cmMocQ_hX2>KN`_!G~x+Z4X2?UzKSlz zcJz4d!s>Vg{fHI%DSRa_M`zw6)`z2eWGcFu7odCPWz6sS-$ua>zQBC^kUxc8sb~2m ze5Jah8Mz-T;7oL8>(GwhjqXPSJB9{)$*bIf<_AC5J=36k2b94s;b(!5gq9PD7VwJ*IwFpqcvyeP8^7ZpKrX`uqR06l&0r z<4BlULv*d$p-V9UJ@3O~eFmD5h3ML^if%@iY$slhXV4|Bb~I$59=c>5up!=cH2sFu zPo|e>@I~|qR>t4Zj*1)$=e2co5PF^`;{90?iKXaIt}-XWCTorU^tu-tr?+ZRll zi{EI;#PjIEE`2ieToIjWTl9_5A2adB*gi4VpG4PaBYNK#=+wSMQ}H9Z$fwa?quG87 z*DLi?a^ho?FlXcB38di}hd8`;Mdi{f$l}-|xY~=&me< z238~5;P+&Fx6)t-?a_{Vpu1}jx*h+A?vB~<`eLk0eGR%>eu(Wy&`ohJn(b8BZI_|1 z&~oVaxfXgHx+W<&(D3NQc*9fZdDw{VqMc}lzQKB!^N;XqY>v+CZgj>|(0B24ZU}JQN zTBDii5Zk+>ndyg)GYrWH|B7R5xGyv$9zr+e9CXc>qYti+Zj0AHMKkm*n%Y0mCA@$R zko~VPfr4ngBpPUC^!}!p+gDtNRDsV}bP&4vMxq@~jO~wLGwSou4)&q}{t)YbqJbv< z4$tL5PfroFy=H80f=;k4=JyqM4Fx;ADc*1g+VKQ5;>XanT^4-->v6!>#Optu37hr| z`ds#ZLS{-}Q|filJ$4&9@MLt!pTN}r#Q9YU&Uh2LSw2BG)#qsHevF=o?f;>TlCZPi@ zimt;<>O0Zbv(S&u>*(g&hb^&iS_YrTB>&Jx!GR{A z9ZZQXKvT3P`ab$<{T2=IESl0>=^3fDFO5Fm9BuE3F6FRTe*iP7&q4Rldd$K2iER{| z;Z8L5d(nu0KnJ{t9?KFL;l8ryK-JIzTA-=zkM4y#(ZHvopXH~~rFs)<;b*aa5tDXM zC~JtU4*KBL=tpNb*2VGBm(V@&4YtBdFUd$9w`YKq72TxC1r+S?W%T^MhtA|!yrF2m5J+|OftKj`?uiCE z7&GxfbOO)d6}Samx_{7#6uLBwQw_~nYvlf9;yMc6Fb;iSI@5BlRZ?z0efRLpR4O=mVdkf&GNO z`4R;~fHlyWUWEoS70uvMbZy^9pZgZ=_gri*cv+ZOHB9{{4qH+%(r#!9Z$UepfW9d5@=`~?j(Tgi;nA6u70Cv+{^J|3^Z*;o&MiS5Np zg{5qeq~O~2#M*cV`hr-B{v!GS-5Yz*7tu-dzCxwLOxvL|y(_vLy}lb8W0o?Zzb2ST zeK4B(Nq7k+=Tq=JFGY{x8Z=eg;|<@UDgPP$O8yf~&kXH((T`WTXm#|y`sf~M5xoZe zWi%A+?{4HPm`prE!3XA{U%%z(_kA_G%QvH+%O9`-o{aShWy5Z-8|@Vxhd#dm?e7J2 zV(ZX;K8)@Au!!gXM+&Co92(iB<-&|Apb^(Z18g4cgm%;my?;<_AB&mPC!zx{Lo@Jl zbSrxQ=jhk0B|M{~gh* z8_;7s6|3Mg@%m0Q1BcQ6&!Q7as~VO#f0BZc)kAk}3pC=cXrzPCNJpag-5uK>L_3;^ zKDRi!3Qhf+Xy7~1&HYoXpGEJ#v|3o&WN8Ynb**SC^tkjwGcf`U=q|LQY3K{-X*5G` zpi8wI4d^)f+`s4=XRRKVs5F|nR_J}hkiC^mjHTdLZ3?;vo(UHchhzIc=q@f?BdlpD zv|a_xOl@?=jnK{737uiTc>QKHbEDAb?upkQ#MHmy@OZpoWxTL4`W_nT=jcp-jP2*p zjAgGG1}uTzR~;R=Nwgz6aG!X6Fq+xX@%mIu{qz4E3a-`j=s<6w1MEe2@nLj;)94J- zYK4Icpr;`dO?f4Blhuh{fdEJWW5kTGjs+6(2ho< zFOnzG2j9k;cm$nMk@{igwa`t~0iDQo=(l46`es~&_3&-9-_vM7MH__c$>tPn7=%7J z4ejVfY>7M2lxJ@kW>y=$uM^hBTd@`{MBk7fp_%&+n_#gCS+ig15vbOLqJrMwpH?-oq` zCr%%r;AUEkMz$^151}{aXc8jNMAxbJ+3FB=VN=GrWyR9 z2md&a5AgdV@gjvxtbS$a_$u@~_eOX9jnVOF0JG2lRz}xhR_brX`nzZbcA^3NfCh95 zJ-!#wlXVIAtT z(WTvv8F&_**oEet|85kDv9!57|^_F3ib;Xv{A3|sL zA)3K`xCFmP1D@C_{LG()PUM4D$?#7q`)P2~wQd~(=#QDy$Dpa6i>7!n+VQjKZeERc z{0TavgJ_D+pn<2g3D+~x4Aw=LqA~haZJ&&V{?Uqjz)D~X>J`zY9g3d+vFPr95q)k`tS9$Sa0Wl4ugt$N6Z5wVDZU)7_lotgXdv^@ zz@9?~dKKL(+v4?I=tRDW?Z?n#cm^}EbofW~2f7q8p1Y)j~|2|8*3~(6Ad_qf_W!_y=A4OFM>{ z6hrqw6?Epc(EFRB1Gh#q(+hoWF#1Zr6;1gA=$?2A-9sBN^*?diN}((bJJCQ+dI9rx z3NtB=)+?eZts89_+q#m%C*QS5B z5b*-^6}%J;>|ONd^{41J;tXbD$?jp#G(%I~6+Hz5qNC6ynG~HH+gG3y-Gl@1z3!ZU zk6GCsq2q>VYWku93`W;*B$|oIvHekW)6R?SE3gvv)#y^}jn{uf`}rf*FT{G@tHblf zlN1b~8oDc6#QL?demnX`oQiIurC0+uVjKJ!)3M4mA;22wTGvC5bz?N3PUy`0pqq1G ztS3jrhP%+2-y1JXi}hLPW?F=Hyc|vS3LK7`&;cs+4DEH%wQq+Gcx`krHlltT`sREV z`JIqVyi37d`8}Gd|Io;@_X=xU3|-60Xn`~L0uAJ4Eav&#K*96>8QQ@gXa{M1!h>bdRMtcTX@sc^U>WLtWBWKXkjdy?nU8MD zSI|AQA6>dr=$^^im-BCma!@b>CD7EALkFmfE=k*1?-8#LL1%PlbYgS{rqR9#&Eyia z-xcVLSECu*i1zzIU(UageL;f}pF|_fdTp3VF|=MQ+B&xP!PKi2Q?FJupr^1NK93Ic z6`HYQXomkmH(&97;rbQ*IRCCmXBs?yL(z!u$Cfw+JLCK4Hz9xjFi=%=sT!d(=@9EZ zqeG&1p__IRn%Nn#{&cLrkfh)eY>XE^L^t0T@rJL^wLcQ;r_q7a2850aple(D^{ zhh};jx+KeyU){;X8VaW9bF|}wvHpAXU*yKbCD(_45~_yQdtntEkA7B{#rC(+_sLJ_ zH{&AOe}x;uz_rngT#2dwiDMTErfw)2;XPMc7hkz^ z=mbU%45w!zx(R2a_dkn`aV@%Mj$$Ft|KAikV(vlVGussjnou30I)0e;3^wpP>DJ7wdl}W5XrGLTXE(9o0euXo3#h zD%QK9sqBp|$?fR-;sNxPJq-a75T+m2rmWzXOF#F6_hJcm^wD z*IUB*9*e%a7o+d)t>`!7JIuth=%y`xYuFo2&;fg+OFI%>vb(VoPQ$9W8dLu-&JIv$ zO2Y*-g-vb?DesD@44^X`f@Wqo+VPm^y=W#TqcfiwU4lNh23?|c=xKQ~`XOfb{2!p; z8vlUq;*;p6$+$fPlot)8EIN~F==G-P0PWDd(iz>1SEB>oh~768eHD*FCpsO?=m(gr zMd2s~e-IQK8D>}tJ(g9`z*?f;^{(iEJqXEG%b^3+i}fz?`gQ0;ZbmbEKi0rG z=>6}Eir@b)X|TgT(Eu)@5oW(5%rsB5M6@b8^G0aqT48D_(1ALm=X@ZV!LjJxc@W*K zGq3@!PEv4J{)}#pT%*G#DvqhOMk8&C2G%pyuR{YKgUvCCO>hei!L!&8ufH?=3CKpg zpL*ZB!aq0c!+WSFi;v0RU%BDUg+AD3Z1{u56=(;0@k*?HH=8O8zu%E_o49ja_;*0E zj1PZ;(gruvz8YV`TmP4l_#YOYkdgXVJRZkZ)DPfrEPhW$;uFvRBnpFRxcc6V#9Ca3 z*Ws}HG7>xRUA!J2y+0!{8INEu9Ldt%=yiMm%TElMcn;GE^k-~A`{4(|1gbokk$98( zP_#XBlJ_TBBMKd8Sc2{GSG)#mO%5r306kvQ(KVcnZq_BSeFeHitI;)oAHDBu%*0=D z0cM{Pj^#7x(!GeOfB$D41=n^9x`}qg8+M`{?MDar2_4{H^fP+t)Nnd#;kVT5qW9;U z7B+1OypwuWbV7@;3;u>}$xzdWIREa>i4TW}9zzFsD%M}ddemRXs(2h5Vc|!@tGOH6 z@i?r2A7Kyt4R6Pmk7gu($JO{KE}5Q@`Y#Jse=H;Q$9@YRM)J(M;u^$>#BfQZqva zYM?KkM(B&92l`IG88dNQtUrYY_5ym}me{@*oxmYA2N|=&T9-thuZ9ND5Pg5NL^s>jvHd#qxnbx8 zlJ`^avpNTz`D^HmcA|UXC$!^#Vm)I{s24+*q9U51M(C;NfNilmHp4ks7Wbe7|A{`A zdu~ep6PFaq&`<~cZPx>h{8n^N+>1Ui1mKaWOSU|z^fHT1qV=qtNNbR1Ttz8Guc2UrXL!J1h4 zsqoS1jb`{kG{Xy(@e{97aCd%)X5uGwNz&(sb6yVJwJp)F<@M-pzZK2Q{bCgeNf@9c+FvuYy*qmUKs1oC=-SUimu7V`Hf%$0{1Oe|B&N>y($HQqS{LoO zJ=#HEbno1XF2NM^IKG1RvlX53K6K!p&~eV8$1|C4SyG9t9|_x}|9jW-qDOb=t~g@k_PUc*~( zH@fSud?tK!x}yOu$Da5mcEP;QhTYvCeGyH->+x-DpM_Wbb761X^t?YrIDa!J+{g`Q z(A4!^5hA=99pElBkVj+ti|Bpp(PQ);X5t|joyw07(X$I zg1^_FMAvi?cEndO1J9zn`2w24DlZ1>pw}Bmo1vSsHP*)-XaG~t<2n<4!!AZM{RXD~ z{%<=4AN&G+;74>VkE3gq{!-XP`Oy1Hq5)S!JFXLLfd<$O{Z-rteGl|UpBsYinbGL; zlV0Ndcc<_$4bJ3Cw8MkZ6KF>MLwE6|D?{X^(7>w1di_{$fezFK-IV>%%{LaE@l>>* zS?D;6S0=-ZU#7uGH^v*cMn8@>?n56u6x;uZo<}!p_EllGS4IbF8|{wHxIY@$ZLxg< z`pTY?q+o=L(V4D619=yn;ZAhdA3&Gp7<%6SLI=wCa=5QJ8epYpJ#@g9=zZN{dq1?F zVdzpN@1Wp~RN=qWUiW#})V zRmg;siPu6Qu>*bAe~osSWlfwR`ap3sBW2NJR1?iu8+2FqMW4G9y>B8`!RhGUT94K6 zP3(t9&>x-oAT;vPXyo^!9Ztj4k4#)n{dpXRoz{j_z7zcreSSBV$Af4f zX|IM;RUHkyHKzU(2Yo2m@n|%F$>@M{&?Q-lH{)9L*c5v$1Y8E)3zg7}v_xOgebDD` zMKdxE&A=3N%^yK`{}Y%@tqBD?UWM-FSJ4M{qXF$hH_b0-hrgpUyb!PFS{JUDKm(|V z_S+=3w?hN!jxOZ@G~mJOIRAbm#?xSAbI}2xMgw{|`WhP08)!#c(EC4%^*!iw2hjje zq5=Gel`-4;Fyq>2Mw_FV>%N}z?~F&#U_=ka8y2Gvu8HmY(UhG)2l@|dW9|*%9AAmf zyf?a(x1jyrhu*&k9e5R*$+yt{b|fjdd-uf)r_cxgML#;lH-_tt(aqQsE8ull10O(V zx*8ke8<<)mG*cJQfO5Vb0w{$pT`jbqWK#;Jav-`Zhhqc07wz~}bl|tpj^9UT^aUFD z&*;o9#_N~95#D&E(Shoq&ox8)>w@;z2l+-M6F0^ihQu32qba&Kwok>H)aRfx+7{b) zp#yw_)$s^=U!gZc2HRjY>VwftJ{H?oqJeyrlJD={*zi5p;=-|5FTN=ZSP@NOUG%}W z(eCIb?T-dB5M9&T(Y;&4;Su_KeYz_loif*p* zXh)6F`#Pe>sW*E6b!b1s&>u8+qNipLx&-^t&+;MUhfv}OCSChu@xp1egEQ#N(%%XX zx!n^X+8VBy(wS*KfrM zYtkL|nBnIA@%>;igU!ENEUWO;OtG)3DxCn*?d zfArkniaz)VIeWUF|?>miV;5@n{ zmwXuRYl~j*fljdhhs@uG8)>lP5m*(+U`1Sv2DTkD@kgwH=^ur6eid{N^ukJb7uLoF z=zSl>`fpgCdYO+ye{HZb^+6wV{@tAq(_reCqV+Xs3g1U(_!XL&U(f;n!^T)*XXvmO z`rMu9T0e|V=t=bXW#|&UjBd{L=y>lZDYzT=qA59q-gp!r!#~hXGx3w~*KYICnQcZh z^#eMyT)Q$7gRnNbbhFTYmc;rBG{E)f#CD=foBW2T$pzUa8j-YFw{j(5AesqtOK_}7_%}B3cGBJ>X$Kf_~fXUIPV*9FC-;OT9 zfmlC@nbgyEhv&+p{WOa8?$IGwkM?osrd^5Nw*{;E&;R=D~Cmff?=&tRGZShg` zfzR+>JdD0jhJGG)^Efnf51;`)gr0`QXofaL-$j@DWAyp2@iNc<2?{=t_C*Mw47y3` zqifU-Jtdvc`+B0M;tq5Z%|KKBGo3IX8_)r_#P;pzUfF|Y=s3E>r_mQvwtbv`Q&DnX z7`PVtqp}s6f$PxJ-;Q=L1>H>3(M|gTI^dV+vHLE191Z+zynX>4IAee4zbM*Yz5Sej zQ`Urr2G}+_A>Qx`I`fT~iEl^0M~_{W1K~wd5q4TwI7BCdN&%- zq$CB`W?pnPx~A`;Gyej;@i=;H5?_TS$c?79IND)-^uAW{dT(q(eF&Pd#aIpBL^FN} z&2aJz1v|?Ab!aGu-cS!+igxI+8HfgU7rOZ#L^sh=bl|tp`*veJ{285C(Qm>;YNLU6 zi1tFBOC|=z8^)p?KZZuO65VW@(HF-@=uCdXig*#duj02M;D%^G9nnk;MFSX(2L2G* z-#m1J&tWak|3(Tv@Jqb#2Rf6CgW-W9Xh#*%K(37TM%Q#C8p!?V05hXcqXDgq*FT8u zU!s})6;uC-qqOhB%u1tyG(m4@k9IsLUcWP5pMj=wL9DNc_1DmVwxXH(EVduVn$*vt zo3!%xVYBze)PMiuF$(VTCo#2I(3!r8X5w=+<-f%C+&_eYDx#@u5bY4#`=No4Kr=D{ zozO#Qzt5o0ZT^AtZ^JGcOx3UGX3Y38+)x@l1$EGwbwtuj`x`I!2+pfh|04fJ*N`5kD7U!kwopU};G z6n*~hSWo{Y)bk+|q0U`up>tI&Z5pnGE|nyDn(@d9*4E6~7RMfc2` z=-%3c{{6x+G$SX`aV}s_&wuV;!%PRF0}R8eI1%mmrRaLJgRSW9{S3{}kC+7yqkG{f znt_wC{ufrDeiofr>BFJlYMA=_{{|F{xCI(nU$mp4=zt?){eS2T??VTef~I^rdf!|$ z;OFA?SJ2FEL^HSnkAU3CdJGwbnVNKkMsT88W^)8?p zD0MUhR306u8roldbZ@jk`?&@UU|4k2QO>`+d^`=#>|u1xXT|zbbd6t#u8-HZp-ZqE z4d^FypwrPyj)i(LtU`MYbe!I3|HIJd#vbGR+tCyn{6#V^URV{~jQ%p(iSCUb(Ln!0 zpUXHN1}cnRuZpg58@v&_qf5F5%i>$;z~7+(|CXfS$0hAV`1%!#Hp1Do_eOX75v+w7 zCqruMp&c|w2fiB3)UD`V8jl9}I2zFMczrdx6q{l_`6&fc@(udnF*L&T-@?bDAl9JX z2J7G**btYY0~|mHIEuc4|3>#lf!{+wb+IY+=IA&R(2PEejFU_(2?hRBYGDc9Mmzoj zU9(@%nVpICj8mbbLg*%|fG%BaG$U=%P1YA3aA0g7g}x6SjO`0k?VSIYD7cH?LXX|M zXoNe^0lq~8IE>EpuUOCWM;ItC8gLQxdQ~*=2I$(iM^8nsc>M;n-&<^F{KVLJLo(j* zFgk;|=#7hG`-`!@9^DIDF|~<{tBm~06Jhz^m-#Su-52q?~Ubf1iB>C(Y>(X zFV4Ta_B9&p@KbcgKcL6%cl6zz>+f(n>Y(>^LqhGSm8|D!25@IZz8)R;UUa52FcY6a zmuP!*KYFT;qW7P{)c^h`$NBK{x;(l|JE1eb4NcV;bgdpmH_;L-kDJk%e2;c`1P$=t zSkHPP)Qg~jltlxqk7lG3rvCe%{V14$o6)tNh<>dWpbu`wdiW{&VEVo=pv@gB6_sc2@GqVJi_7dihHzM`Qy{)2YZh!?UQbwOt~5Dn&C`n%{J*^BNa{u9etQy+)_uqO>!GP0&VF1^tJCZioMLC^Ch zG&A3$ft`r;w5*{$AKG3LO?h4P`OavDhoJ$D4ki;5DcIpm^n5Qum*6Gzyly}zDEZx)G3h4ykb+;O@6Z7*qBG5t zBh*WxZ@OyeuI+>#$3b`vPQpywhwhOxSQSg=4E?l62keaoI2c{pJ9F~?;z{dp106&= zK7n@pSG?f@I-}fq!hI#t>(wzG>!aU{#@Gx8;FUNZ8{$5!hI#Ua_QvQx`;En}m|R5R zdJ0Ez0Cvn5X7Vh$312}|xe+hN5712gi@v(6Uz#;B1v{bleTp8p@6mIA25Vx${8>}K zj9Q`Zl@Unb$;4y|?P*wnZo-r30C@|988pYH)W@PTTN~>qW4&6ztf~J9#m(p@U54(7 zt>{wjLkB#Jl`;LYa9XOT*fd;q>>)?f0 zuU$B#_C|D|sc7m~$M!GLQ;{f=HTCxm)iCwH{~JufwI7deqKW9*PDj`NaZJOd=;nDQ zUVj;Vhp&y-cSUzczd*mL`_auO(=qc4_z=w=&<9-DFT z`h&6k5j4=*v3(x8nU|meua4K(M%SbLyn)`gy(s5Db?#}{M8mh}gY%1pwOfQd{5E@wW2@0;oB6KDz z(Ixl=UE3pQM<>t>oWmNJt8@sUF*<>c=nMyRx29jw6jTc@)GqMg1WIH<0UbLfw=yQL?>)9)Y%oIZhtch;g zE6}fEdvpSm(G1Q&C%U|1G8A5-p%D$Q#tTQ$HT(ljRhdfRg;5vHNP9G}-e{o1(A3|J zF4c5&pn2%ATZsm?3(eeD=r5%|lN8*|#VUv0+6G^uKI;E8-FKkR)&IcpOSx7QN*U$a zd(UKN%g)N)Tge{vk*uVMiV77%8GS=hs3=qEUGDz{Bn<6IwBf(e25u}Dj>;lvBs!qi??D&W7&N3)(Gb6kX}A@g`{U?T{EE#n zL-|nN2Ja%@4_W_gGZL=G&FDzpK}WD34e2*%NYhma72J&GOJiZIkIrd-w4Pz;+>b^_ zo{0HJ(E6W5JG>l|zyJSwys#@?_#9mv-^cR5(2=B84CX^ua|N`bTIgD6g-*c$^rP4` zv}4QBj=h5J{|#sa_g7^6R&Ej>;kA`Oyy4LQlpvXoWq{kPeOcG0~~fxoAC$ zV}2DH$xUdacA*0~9P_^>NH{0ytHciA?d0?0aO{Yc@qP3lxr85JzN+DK!gt6vN-0$> z?1nzrpZpdqfwxr;?}#Q?iTq$JiHp(2o7hdl8_#2L%v~d_;yT!nd{6X&6=(zcijKT@?F`9Z<=BHSlfQ~ba8;eqp(%AUq%0@D5|^Z7|240d zf$#g!K>ZBKf1&)~o#Ct6cd<1$=4zNB`Tywk#k}0N6LaHLZv+%*AF&g@@=qi2zUG1CE{r^ey zG}_RWc>U()p(Eunjq(oYIWiWD;M1{uD<+(y<0J}V`WE5FB51xLy6*>|t9TMt#W`q& zJFy&oi>{3vcZH5rL7#7fF5dgmqjx3F#COptZQ7Fk?;JkbG6VlX1Q&1?=4q87`45Jd zVLS5WT89T7LbvPt=%W1t9no!V!ieugSM^}L1LvXF_o4S+Ko6+AZNsPL8g1GChO`3( zhHyBVe+0ep#h8C5dKf*RenF4k^zFj^#n6G&K_fH@9pTGphkrtM&8_XjE^CfPcZLUlwdz87ui!RWJ?M*a=-EqNF{+0LMg^l$XJ8#;yv7C=wZ+UVkLi>|4j z$bG#3Ln7s2^o*X5-nbO)@mjP4d(fB2DRiViVkZ0-Z6IT(&~UzJDYX3dm~V+jq8nOI z-()%aZzu^zJ`o+k^H>qzK)9jf8GTCg99*Ym(Zd6(Gf00x9JO53U{N6?*d+nH{BB=k{6xxvX~j0paW=& z)-xhrABRrC6PWz>KPyT2)_M(H_1nz@o+AB2J z8=d1NSOVWdJ9;YS|HiW93-u1~k~ZiXnuxBU#7iVfllTxlq5g;#>J#R?HTpV!7Jcw2 zw!mxqhBLoSbQC)Br=v^J0jxwLwi(@ByV0pRfh^JlfAc9UzQ53(r|%a+e+yb+F*MZW zV*U=af;-U=w?`M#2=pYKf-bT}=yPk(2yH>9_7J*#zry72|6e9yMY;Ni9+pFQK_j%{ zzUcNFgI4eyx?5JDBYZXbE_(l`Xva^XYwJh69sfoTxXJ@U2kT<;`~U4oxazy2`*$AN zp;xd5?m|cQFWRx(1H=BVf{wHf+Hl*L?~88Vv1sULqaA(*jmV04{WVN}{lANZBRPyd za29>wFHFPqgF*)iqvdy?9c+w_s5iPjhoc`@=A(;i8@eb@;t1=0u9+LG_=pf8`hx}ZbKL0r|1E7E}DLLXeb|AaX~cX714(4q7Ai2Bhd#9 z{qT@aq)a5?1JltFEkH;5a=0PoHMB$9(2nkp`NL>~=dcw1jb*UNh)`c!^exyEN8(^C zhsV$eX1UjPc>m@jVFwDMJ*yb46U$qm4|Iv;L(q|pi}^><$SsQHYtW9qgLd$PSbhW@ z;7{mR$La55yZinxNWu}`fp(-NreRk!F8j%iYgnMH0_kRbH@L;(w`Z#*yTC~D9qPx)ueSxllQ)q|(!DLA94~sY-dY~1G z`A+BndZ5pZLeGym_p|?NQ?U!y$Xebjp^4#b?Er!lrrC8n+9YN=KeH7ZU zM7+K*=2u}^%HKiX_vg{jUq3bs@a6;w_jgIO!Sd+hsf$+FG};TD^YJl1C+1f~x1jax zLkDsY?f6l&-qSJv2Rha1#$`xZ%}JIhK*9)oFg`qRDEbZh;CXazuf}}#2_b)5v^;uW zJ+#3#=-TOqj&uMTxe@5mJq?}8=a6<2DKC?7b-saC^kMWUI^uKDtLV1LF)`d%0gY5W z^!aA!{oP{uedvKR0Uh8p^u8z1NUgwP?*CUvcz}G0o>c#!JWP7wz~`O#b`-RV3UNJ1xLt(Ld2uo8y6CIkdtS zXsA1&+pIVG{L|>}c@>SsUUaU%j`^!-=yN<6B2fSnRVke&LzD9u~+m7bnM|*kz zowL(uhki#poc*CtVQzGr=0~5af_Atb`g|MoHQqm#4~gXy(GJZ`kg$QL&<_$T&^cR; zPQh+Wh8i8wcjzakt7wN)riKPHqR-tN^HtGR-w3U@9r|2HbmU#ojwSk$=s;p{^c{4h zH$5B{QF(L`-ieO17Z$+r=!h4g`+5c1&{lK`-$5Jt5{<}dbn*UycI-dodH#$0X<@P4 zf?g<%j;sbcr*+Y_(H4!=J?KaW$LllE)&5L$9eV!`T#X;0ksLKW{DRXX*oyp#WS;$B zW=81wl;|`xG_%k-dJG-G0<;6m(MW7Sr{*JcWCzj3bsW9_hgg0YjnuU>!}S}`>$hR@ z{a=oR6*Wb-Uz?ck9rJ_H1}35pPQ$_YWGw$TnrT+pRyoo8YoPTuKs(kv+BudFz~t}$ zjffW}qa&P+zE+>XlDHj>$eDQkC$xbp=*TiW60YY!=R7yMh6ZYb5(QQ?AKkx8(K&kyt>^%H-w){Arkfoikp-RmylCXgp&h7;cCb0x@ZB-r8*OK3 zblhzAzdd@G0w0`@KClEw;4A3r&+}-wuNr#25xT$I#r!}t#G_+=Dms9j=Tc;K$Ga*=!kox5x5_%X9haLr_uYDp^cxSYIv@aU5QRwS0ZeS8H_jcSbul8Li;a=tA_q*Q=oeXo3m%bsG})v;#V#URVrApgn&IZTOYwcC>*5=vn_Q+QF;n^O@%d zZ$=v`imr)r=+x9f2hd_Z``;tB4+Slt^K5T?HJ{cl#4?6e5 z(77Ltj&u_G+@olRpN-|4(Mat<+x;v-!a4drUbu`locdI_@m6%Plte>!CwhMybZYv= z>l0#r0osAp*aEkp9lQ4F@O)Nu-`|3^lPE``2#H2m35Q@^T!NMH1P;d>3p1pQ!UPt@ zi|A_3vnaeyE1?xXge7nxR>gO*9R7(8py)GUaaTgtP9mi_2}9K%4b5mw&V4L@91Ycy znExL-hwq>r_%Qly^a{F|Z+te?R{)JbX>`$6LL=A^Z}RhhXA*{D1RCn;=#9^#yWll+ zksZN$cn-a<)N`TZ4bckQquX~N8i^Uv#nBDueIKCP`?%%q|KCZ}#w?4&4NcJwbVDl| zfiALX=*Z_ppGGTs0ljYv8p-|W8aRO!@q8>Vuq1ptzZ^QSahPyqOGy}_SJ4r?fiA8? z=v4d=^Ow*DvMmh_=2Pgw^9we_OXxsr zFAoFllps-xf`M2X=VKbajZV$i=!kzs=Pc)n(6QUm5p+P0;DP9UQ_&HwK-bDf^hDi` zMq+2YegJJR@ihrYn)Rh{Lvb{;Rb##ZdNQ^_*T`rz#$;%hA`-0qj6` z!G3grU&Z`oY(PHCYS#$+uO$h4-Wy$|_o9nwD%z1nXalcA--zx+@86F;|4l6a1%2)c zI@j4=4$l`yJ5m|l&aKt`--(2aq$k?YAan$y(e3jPCigj3CBFrIsr($x`bxN70&Sok z+Hf~?AYjTYr;pT#^?z9p(7fHHv9-$@k+Gg+t5(& zLQm2|G5-@9nSaoaVp-OPdJqw#BWSNw;bgxUWW zMpOlTupwGuo0#t!uMdolLpwARy>A}++;eEhR-xxbViO5N^#$6I@8b>WUkeXhk3NtO zJyJ`=d@XcsG(#KehOX-VF+UtVF~?$C+=D|g&xZJ+7U@tTWhDtiz9AH(e27Ni5Zd4$ z(aak|M{h;vv@Ck^)j{X73)-O(=yMODYw9WV{&na;-$n@(J3}(`bh-V+r?v*4N|Qq7O7g zD{O;>a2UGi=AsR*Lo3)3J&1Pj6uLeCL_3)4jZjY-8mU_7bDhu*4#MR7|9%qo?BVDl zw8!f(IRY$C{u8u;|Ih~WZw}9uM?2gQ4S6s0quF@89iKpV#a?s(N72Q7elz>u3jc{W zF zcO+vdu%TIKs1~6OZbV-?JJ5)HfQI&~=#S|Am!i4e3i)zqea)~qc0r$i2<`Ynw4RlT znAnIu@Gjc$fmr?(dM^Bkj^tN#sxG4k&-Giw^_$S^dC`#-K_k)_9pC`8!3mg#Gthby zt4R3ZTJ)vy23qj}bgsTYL-qsO!PITxdTul_`O&E=jK#2gEboZc(;Xd9Uo-+E(J7ya zoEwRh6(sE0I&?1I3KvqoM??DycEl{(!>`TuMn||FN8kbU`MPh1MS2(dexHoF)AMx# zIt5?68#?$enlHM;$guxfk|;|-FZ85(9LwQJG(^|$3>~=<-G=4S@|Nf#Ylq1ZqUXa% zG;)*CPfqjDk#9mf`Vo5nVe{_))3M+;baAA-7jC>BeK0>7iAv}cwT#yXqEj$BIw_V< zjm|}GME768)y&vjtjtRF@ClVgP_r(h{u^#y+u|6I`E4q1CSWE@cimIS<-yqrw z=aat&9r<~*!#Q?`MOPY)z+LF)i7va@|Bh@Z1$Jacyzo5UMgBE(_5O=SCdZyoK^k5| zzAXCksfb3RX0(2^Df(P%^u8X^f#}QXzCG-Jdo-Q`ogQzPAAJrT=?Zl9Z$Ka18OuLH z8#sbS;taY5F2?-7=q||eL5ScDXgzt+dP^lp_&^ObBzK|>bU-`Q9bIHYZ~;z2AH4p< zQ1PwkeTAbHqP5X_o1>BGfY#eBmiI%SOWaGs3MZp;H5*;ME6@tIpdEV;ec({^TXZD9 zpwIt@KA-KQF!#mL1E>W$g+rqcqLF$6sW*|bgoHhN6`iBaXv6QK+iWk|p#w4h9UAg; zXv3G#=TrBF`?I4V&xLnm9&CXl&`7+6c3=mVcmID(VmAd>(Gk7BFEsdh^eo!oKWIZ) zKMob;isnVH7et@05Uq#qsy1lk2FCKy=s>4o4)_0KB;4oEV^Mq^JtB{xpZ_nRJ-&H= zXs9q6kxJ3V==1l){C#Lgr^WI)=TZXnx#5_P-S`p`aALhGp?M z7RM}~#iJKp#Vygf?1e7A;pm)CLK}V*t#286{~PGke2DIjuhEn7Z!ChhCO!{6Y=EAG zqtOx0MMty&yW#$5=|dqu3q6`oV|Oh6MQ}R${3-Og)WczF`=TSBf@!!Cy)UtcggyTO z?RmN*;RD7^(NdU3d0q7F*9%=M527P@4z2iIbcEldYbE7qxIYgXf$C`eEzyDYM(RnV zOeWzcnrEWx(J6Qjox2NY#f85N4b?_F(ia`!LuiM-ir24T3GxMxh4+1PbZSSU^(;m^ z_y!ht|9?Wl9{v^0c05F+FdCwoXa~EaBfdXgUx;>OeRN+e{{h`q=}v@Qk|$aNT@#(q zh!4U1?*E5K*rTOr&o`r?I*B&?do=S`Ap*Cd4L3wP*az*{^mzRhG$IGEDxSycSorI3 zUsrV3Ou>X9d4+@>cpqK$C(wvwI2n4J5A9Gn^!^6u5#0@a4G%;QoT2EuViX#I>1aom zpxgB=beq4AK6mIO``jt=xsw8K}?4(3dJ7v{1EdUQ5GZ|sBid@$O;#F(Ff9my}m0r)dk z!49XxZ@JCJLFE5I&yW7!hfl>1VQccQ;T%kNCQNbSaT4};1$w4$LRaZ$m>$1JJ8%x2 zqCaB(U(7&0%h^zV1G*;ipmSRUovIS(^HtI3>&JZaU?Qa>2_NW#Q*Z!!w4Om5_#@`8 zpb^S^E_^mDiB8d2wBaYBi_zV%3M=3~bWvYL>n-|2h)iY7=KgO@!VYv#7H~45J-!$1 z@ucW9bj}__7t!-*2UekLV<);c_Mj2`0`1s2bSi&GBc0*L(2<)ktNXt&3Aaaibnb7D z`Fhdj=ytpt4e1bc5sgE)*&H-7E6}y@J{H5j(T3B03inq;^NrDZI$@$9iGCy;@eJ&R z^U+XUL?1|ZKA012s4%*!??e|__vi$4TRnx2^kpGyC7rt@=4c zU@h9<8)y&rpdI-&7yQEhH?b)e z975;rPc*cde+?rkh<2=Ev_ULyAMJ}CsiV-TT7q_bBYM{FKu_2s=+S)v)A0Jlg|Mh9 zpba!YZ)lJ9d}J)2gf6Z*=*XXo<*%b7+KqnH`ULI3zc>(Y{4L}sqxH|n#<(0^Lx~?q zSiyhjRAjmsR&6%4p@& zOTr$X#B=y3-f8~#@Xezle}sP<-UB~R$L9p}>>u%0c>BGCF3Jzk=g!9RGM6%>{6)Ss zuE8dMhaYTS#L?s{U-qYA?7!6{N>gwF+u*HN!rY9&`sC;09r!8wy3O`a7;y!(ycT-a zkHE`!BL7LuS4fwd(vSRTwEQSGz?$h(QxZP-0EvdU1M6YxHQ|OP zSdskf=r*iC{%3Um7PvMw`Du0(79qb7jo3D{qyM5))ht7}Zwh)|tiTfZZiduE@^8AF zqrg>PEHyRxnXV!JkNk^hgY7cXbKXV|qapk*b87OxU@Dg-HMuK3MI&(%UEOI}LjwcR zT`&)w+DkYOn_ZWhJSV=qE|HoHuG`ybH= zHOLu8)(f4oNANk^AM-W07ds%Erz7@K-7UNy`H5!33x1=Wj@7HE%eQ#m` z_kX55p~ofABlj-!4DW~EVFJsgBcC@^xFBB$;YoC{U6VgF*a+Rmv(Rn130*tC#(cqB zQZ508ZWLNtV1u{ZvR zhP-83$d5-y{v{U2ztDjdC>SDL6O;RYIEma`cm+K`cA$$VrBJA_BMu?^5LU*Y&^b*j zoSOX3Mk};~&!QuK8|~OH*cA&D2_v6`Uf+Uk@Ej(rux8QJ0EOHH0s z&9Mdf>1bp=#bx*_mc#|c!_;g?7jc#nsmZ^7+ZJ8zuc2Qfeva;@%b12`O0xf5)h$bg ziiV;OJcUJY3wr%TynY2;d__y8CSOkN(2x#8Up_O@hF(A;vKwpT510!}lnxQCg-+$b z(uvTMnG|@Wu0}iX6b8jR_Bo_%f;=j-b^Op-Ft${w+AARsqbi^Cbj(&_j|0{Z5w(_CD%IN)F(ekP2 z>wI-A--$k#I7h+|r&b6dDS|f8FxnHHhd=IqZDOeXb;vaYsefyoO7S=}X>S5Qk zN4MovbcFxIH2f_3JKjzHrW)bMAA+~he##~iPQhoGh8M6K=Da=3*}dooj7QK8?Tr3` zK3AeC3Eu&4;1oQM9>pVSr6#}PnSs8f z7NHM*i_Y;4wL_$;V@>j1&=Ed~o-60jbK}-JVQL1WFSVz!F@9Bt{h!>=b;F`+hn|3A z(J6Qx-EN1`kp36T3)KtvH$*!!2)%DEx>z^I@^8?^nyG$xz6@G#>zE%|KM^iG882)` zSM5=>;tUN!#bu&*qibby%)f*#&X3W^TtpXH!8=2}J)=|6j=h9-;FIWuL`>vr7#^sK z-q1PbC!!-*f;O}R{cLy!t6;%K;d;mDL^M)M(Ry~E&z*|-%#B07G+J+>EeT%=W6%#8 zE76niD&B>an}kSAiLOFJy+8UVIaUr^0&tP+`&@9|H30c$${;EZI zT^_||+;B(p(6j02iTE-a+WqM3^&fQP#ao0$)eV!o1MT=uw82a0^Y!lv9U6eO$j^)U zkFme||1T2GS@)J<@jZt|yNrHvYTG7E!OPKo zXvcm*pDWrnoF@~pll%WI65f!rU1~~SY>J+IYtf4T!v@%~eQNR#kvxNzU&6N7`tA^k z7jYo@{pbLybqFWlK=eF#1|8@J=$c6F$o_Y(%8;<2Bf1?YV>0yUBHADGzoM_%n>vO4 zUJgBi2V)bQg(L9*-j5ABhk9PeWJJ+jm9Y%2a81v! zt!ki0=>6y_Uxqi~N0=K=qDSyw=txTS3a`<&=yn=`uJZZliFg9r;4QsVQ$9^cr0{w2 zck~TYaV$Z?w^N>e;mB=)>A0~kzKs3*hn`+PFm$XZ`fiwuhWsb=y1)u> z5xZmgw>XD<-N9iO?Zd^?pZJS}+vUlj;WOO{tWJK)u<)613r-+kaCq3B&*56~r_r@D ze?)5X8w=ZTAo-7RJXXCo)xYnPvL0Q``R)r59)V8zY8>qTze>VIGjL>BG)JR%-JhEL zh2wW{BG)UAN=^Q}e|_}U(cx3^930B^ztDR6jtLDPiZ&P<%3no0RB&7v*yA`jx&KMH zk9&^~Z>v4%9Ojx3wpkA}La*Z;_%9|uHBSt?W&|cbh+spmZ^ROK30*4%Cxz{IH(LHM z`q67G7I6Q6Na8L$hn{fNCWpn-8yk~fjIQ=mF`xQC*!L~5F6Gao=fl_NIa27s@bSGf zZXmxH2{r%Rj!(hN`J4DO`H!ct|KB0e@1gkFZ)$4tk4!W~7uPDZr@x>to$DSB`Nn9+ z`{GJGh23%XwD1jvv*>}-YpxZlj2K&DkiRv@L1B=jAy9d4D6uMt; zoEZ+H@tBkRvzP&gEQuf=!KigsZ({3Ln;vy=Z3?cinf3y zA6mhEcmsOf{JfZd9+MqG?|&EVz&`Z8FVTk2p#!^uHh9DAP+kPhS3^6HXimb=bw@|u zAFX%9~=neAu?4xphvj!x~5vHT+1k^f?O=DBQRAIL$X zG~OC*hK6WNbRqh-dlL=mNi;Io%nSRwB)Z)?qDS>uwB8G7gICe1&Gw^p&;N<7FvI+C{cfB? zzSn&AzYm71uy3 zY>mDn2BK3l4gJJ48@=y^=w@{F?~k5DraqDK8wnpwSsX%>ir$zL4QUZ{4$GqFLM?R7 zG((^36wAA#i*pFtfydAeFOT`n=wkdhdKi;G|NDl7BmV`9W4;UG$OK1dgJ|7OCG&Iz=N86wS8i?Mv0PWa|Xooh(^4*yH_rIT$u*ct`C)#NEZ>DT^gTMqzo8NN2R#{cEepG#7#i6I=zXo1CBoZghkP(1?7C4&b+VJ;#c$Yx1EHt(+j? z(b_b6FP0$xG&)!Bp!<41dO#gSL-!?G!CAC}SJ8&kzZ5=d-G~*)H$fvd9=qTRX#JPb z`V)m$h6*d85vYeQmM-Y0-FwlqeN8Oii-z_aG!mE4ZJ2&lnDb2N(VGM9@QvsI@}pCc zhDNM1vX~Pob>oFD=#9hB(B6lRbW+Sef_CIdOv6ps5)WZ1EWA2|x)r+JhNHV`F1p4x zpo{Q5v?GTxhaY2qAYlmqL3@_&|?MNkb`_)6|_MYgFczq%oky&Vc^U=sG zL{HEqXhc?^yJIaT|Nh_WCMb9xJy&}cM* z(_{V#bSjsjpwo%o?sR7x^)01z(^K{EN^~ z1D)H(=%Q;G%kM=a_y8K2Ik9{R8u2w~1h*te_>%bq4b>0v!XNlH`RiT_+j1{j;df}m z7tuLQw;{~=&FJ&R(J81Dt%Kg*9G%+EXyk^Y9ZAe2;oLkKZ&-~kuI*^YK91MVq7D8N z^Eo$$?_d-|%ln}XO++i66@3cr&@!}x>(PVi&5-Bk|FPf;OrB`y16R=zXWkSlz6Fbr zFNT)4KpVa%dS7%#yuKK%XARomW=z8m(T@IrH@g2Xk#LT(y&hKiZRkl@0-dA!XhogT z{o4=i=rD9d51}8i=Adh7b-cbGjpQlxxr^w*a|P{q_BW`P_EU|SL;`O8Gh)-i%yog<}(Ps9)+v|A}4e&j5WT{(1 z#re=47e_l(6Fs8q$Lo#IBe^Xmw<$V+r_e>V4twGrG?K;N3{z1D9ax(;+5aYb#S8bv z3scbpXFj?(7su=Wi}{`Cb6-TikL7>jG|IEQ6{c`*bT!(s9hink(KT`TE%v`5y>4q5 z`OWB!Wzaclh?VdjbT>SP9zd(nQ18Y%_*pE^xh*y20Qm}NJ?XZGcR?Psp4-s1&=$Sk zB|*ZGjzmW~37yNi_yMj#r)Koq;eEatoy)V)Kcm;a6Q(LBI)z2i-BJ@hVSAzxdk|~m zg*bTQtOQIdGiPyXT?;&9ihoC*1f@>YI0kh!sNbFM)QT5?Ws!Ot{!uk+8ubXphH76KF(cpd(y@cJzPo`W7_g@1XU3 z9LiB-^XoYX05AH@od=Onb zC(uY-L?f2zgV3=8Xva&S_t%X1MreJV5+tm!AKKu3@q*>vFbA#R8T7t2Xh%1ryJ0U{ z@u%qaJC1JCD`=>5e;B^ydK+5*UFfIcu4p}p2T6Dm%||PE1zk)Zq7QtF-gp5GVTO;w z6x@W4xH7s8o1z`=k50w?=+sR?J3c*Le*#?_OOf*?k+PaZH42WRtNDh#!GdUmmC%YC zpcS=7UqW5c5%$FTI1mTo%h(lj>`P6Vgu~H;?HrcFydS5gyoJrMn}7fR+Wn!&y*~*R z--|Xl3JvX)=%eUbcsk}^Mn|#P>7Wg0rDWHCAgYtfLuiAMB2baC%T z?>~=5{J%r&e{ab8MYxa~y-))0#42b+#-scC9du-0pdC7mcI0nN!|M)*#alL72VJbK z(GImo53KI!Njo4x!tF8~ouf(d!o%o@W}^>2i#EI>x)Hs9Cq9KA;Y93pB$OXRr{WYk zz`xOUu00y+$%&o=iGm~?K|^#zop1mS#nI_lR9K9BlVf2qjleYWqtSEYsaU=aZD=F< zE_fTu;g?tzGanD%^{$R~d>}HQM9RG+CR6Yrj>Icy=!c(3P5xuj*Ki~qY4}x$$QxgW z5$r}ocnEFyI6C4p=*RG@=vpXzGK{_%E6<82|K)3sKr@4Owi83Ub z;d9s!Poqa?sqe!+U5OpZH#-wL@B-dT{<^c_=Y*57CHeQU1LiyzzR5fYyOZCKPHCAR z!gtZ{LyzPSeqjIaB=I)|^Kjdbsr=S5Uq=5Fer$g0`S5M_5m=b=tymGiMnj+D=McHN z=xXkOPSJS0j1OTNPW~mh1YH|%V`=>EmqhqF|At?~4K>h;x|nCuCu4E)OD=@+U08+u zSu|3&{uVxR^+6*z8GRe>Mqk6H&?)>E{oqpVV%Pwgk<;4;?1 zqJM|E?}v{3bsUVx&1s^8=A+E)iS3-v_quV(5KVcvRaW(mN*b}dy*SlU# zP1)#v89?G83iAFNPOQaPm;7FIYO?+pI#wIqMw77}?nL+XO`K<)F+X~ejzLe-S=b8~ zqvya?^xcv^UB=`AlpV9seo8(QSPVTHD@JdR)<@^G8K&U?WNoI*#0>Zdy6Wem9aw}e zwl&cY(T<+M8}Mhm2LHq4&;PDTpD{Vd*Q0N_Qs{wHKiUbiksppeI0>yNf$olZ=px&K zM(BI=zB1Q@j#WTMemh#;2z{wFyN17il%7O;3LJSybTRcnJ2Dmv;A7|r*P&cJzI8gdd|FJ&e}#J=%fu=o-0{AYo6g%aAd7rsqdTULP&* z9P@+F4kgh2`zX3CUyAv6(FlBru8E(}`+q|__AlD8)YQ#+p+L~auHsBXN_91D|g zi&iuS?a(B2#PiXH7NTq9Wi$fspd;LeM(VRzeh8hyZ{zj!8ACmpgNc;vB58?J?pya6T~L`U8O?eKkQ!;{gD&qYK03>txDXa`rItNvB2h#S$4p2pQ+PY}ynxa$F7YpJp;Nf_E85+qg zXv6!^sr@`bq6Ud0=)TU8EmT|@Jvi<_d)^#f#jVi}4?`Px5bwYxXatW&PoWK+kNH2) zi2R3!K2!FL$zSzMWF=vbYoHA^LPyj*+ACfki+1Q?G&1vJ{spu{uc8g^KCBy zo*c&_m~wrHR8i#qL`pRhhO!R&Kr3{Px<&h-BOes=)1!}~A$$UB;#26_IDoE&AJOMB z-w+~I4C^wNjnGI;&*AoE|36N`xp@%{;p^yHcn6=s-RSD=l`}jz481-E8&lzA^!fL4 zh35~W4Sa*G@Q0Yc{l<*RkM#|(66IqtjrLPsCSd~~p{x1}EQ{yS-I4F6P+lFKnpS8i z`=KL#1S{YQbQ>PRqL?ms#^gt@;#iq{EA;x*=z2{4{QpZ5_V_FsfeUyiUcpjW_vVbr z-+mc_PSH;EEqDOk4d>8<==XR%^DSZ5+>EZRJm@wphCbI69cb@c*#BM_PeB?!i>~Ue z=sx}uec-ovJ!_sY@-pZmYa8u|cBCu1b_QS_9EL`A4Z0>aqY*q5{V@;w--2{`L&G4advG&n1Xvi0$bG;26@d0#opGG^HIbY~_A@shQG2aTkJ^4e=s$&R>e|Mc2j!^d)uOtzn=AunPIAF`pPh!uRu( z=nFW3{JSw<^S03NJ?PvIKsz)Vcj6=17Vjz$BDNG;rsH{Zq}dCG=Wj(jR1%${hR9U& z_kT$gqhK%^vU%v@Sb>goD;kl{(fhterzo{hxW6!Ze|2=Xv_hwJ2)Zk#pwGV+%eSGC zJcwJ;v;V##;Q_R;Xc*xtY()NbG%{DvwUDn^sHisXV}wo7(B4!c9Hk}DUDN^HMLp2P zJP4htnK&JvM^DP4CAr`IUzUVDuZBjT9eSh=Ku0z{Iybr!or3M?+#f_o_%+(_4`@ez zM_)=;F%7eq3ip*qBTy5QfB&a332*FyR&XyG!U_8XK33T876!TfihBc7~T?3WS z`&%P3k}?$S!0_m3G!m20MK>+xXUFRc%Ci5x;aLjo*>W^A>*I}Yp)Z;DVtx;L-vRW# zW9aMj4BCMo(7F97`a2rYe_}qhT*zlf@4F>I!jmiwZKxW<)bT?W- zM@%lZm>(3q5AEo9w4)El^10~!3*+^~i}AwR=q9wmZD>R9;PoVSV0$inTAnpQzG$V4 z$=_gXRXLnwv(Sci;0*j27vtSkGNvrW3%C;JRn3_EFJ7xx%b4=M`~O`MHaNX{n7din zgZx~aNl1RivE;|zkumwr==0cwe2rQeli&BBf}Wf^(T309LpY*##*{Hs{3}}jfO;8| z|HySPx@`|)ao_)^NtC1@Tm6j5AB|Q=7u^^%R146lS%NOE7t!6a8lAc~Ojr>k@ z_neCUjoyEKgRrgB(Cd|Oi2J`O3Fm4fx=PVZRi113GHZI^u%j|j&J~aP))|-_yih>H?a_Y)QtUKjl_8h+=fM(hl&#m=*XXm<*%SqwIxBq&;3W@ z4Zoo$;x#S9Np~CCf$C@lP0*9EGa8YB=;D149ocI1{`b+2eIC7tK9{pqxLy#wKT(l{ zp=gQDS#NZNm~W0Y*dLv`v1rA!(1xCl`E_U{wqhCFi$>}ax(f=mwLHPd zN%*#!h*rEFt@s@@5}%?Ke}^74SI{+*)-H^s4jPdjSQuwxMO=?Y_9R-*@91{S*gjYQ zlRy8jPQnISMEjs4o`7~_MsyK6(pS(mvISlJpP?f>i>{@c?hcE&JQ{(!umX0&S@;;H zVeSs>|N11VlW;#yKqIgiosxCvw%mp;rd@aseus{%ZpUzNwMPfg0}J99%!&)q4lYMK zz6D(~yV3i8?#TW(ls9w=Q&0}elJA3V$9b6S2s)B&=x4%xXoaWI#dZi zXhw7{dJZf?52_c?wX!Nf!Uy-FBmFx1bMz{fr~JBm!t1sc8tSp=8hH#G;Ir5iPoR-0 z)-}{y1?_lKbbwvZDZf9KCpM9=1G~_W9F6(k(K*l5Eo_(K=*Zil5gUXasneso(1tQ} z&zSsozq!%59)RBeI2OY-n1%JVix=u4fzrD#5#j^>}RxsbVEZ(bD~pM9$h;vFbxNzk(rHlbSWCqjc7f)u!8&l z2nl7L|<}m zVedR+v4?$=>4f<di#FI3ZD$#5usj}%37w+HupWMd z?J(;!_P=x4gG3L!7Y*Tl^q|N&J%sWWbn%o%*F+=qdYhQ<810RoAH&co8Hq-02D-Q( zN6(M7*a_3mVE-GsduD{MV1}S0Scs1FBW#P8(TLnNGjw1EI;T%yeO!+2mec6e@yKm>tS*L!YaOJ~s%B`22W%d4hzYeFqKE(Rkr6Y(PHOqv2rch&Hqw4gEW4 zq;{d(>k=A)Yv+V7ENY_l^+4CwWXy@1Ff;DKVwm`pgi~+{-7c9P3nyT4^oFMBYP}bW z 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

lviWjXU6B)JJHhHg#91wBx!v) zE2pj#Ve5WE_x$lhAYJWA(<#z73PlUyR(mFBaUZ&Vvt?mWh{!uL|F=b!f%_*gT!nyY zXp_ka`r$9?U!CTgLI1?DCclKEr4sn~`Wz+msrPD_j+;>}^_LmPKv}S4AsR_TqLiGp z8s@czTZIF&^bDZZ=`2HgS(k>uf~7Ind&t-(9GQ#*>-4kusddgVybT47QBaH

"; -echo __('Search').' '.html_print_input_text( +echo "
"; +echo __('Search').''.html_print_input_text( 'search_string', $search_string, '', - 15, - 255, + 5, + 5, true ); html_print_input_hidden('search', 1); @@ -73,7 +73,6 @@ echo '"; html_print_submit_button(__('Filter'), 'filter', false, 'class="sub search"'); echo '
'; + echo ''; echo __('Show in hierachy mode'); if ($checked == 'true') { $checked = true; @@ -198,8 +197,8 @@ if (($policy_page) || (isset($agent))) { echo ''; - echo __('

Type

'); + echo '
'; + echo __('Type').''; html_print_select( $modules, 'moduletype', @@ -216,7 +215,7 @@ if (($policy_page) || (isset($agent))) { ); html_print_input_hidden('edit_module', 1); echo ''; + echo ''; echo ''; echo '