* @license GNU General Public License, version 2 (GPL-2.0) * * For full copyright and license information, please see * the docs/CREDITS.txt file. * */ namespace phpbb\log; /** * This class is used to add entries into the log table. */ class log implements \phpbb\log\log_interface { /** * If set, administrative user profile links will be returned and messages * will not be censored. * @var bool */ protected $is_in_admin; /** * An array with the disabled log types. Logs of such types will not be * added when add_log() is called. * @var array */ protected $disabled_types; /** * Keeps the total log count of the last call to get_logs() * @var int */ protected $entry_count; /** * Keeps the offset of the last valid page of the last call to get_logs() * @var int */ protected $last_page_offset; /** * The table we use to store our logs. * @var string */ protected $log_table; /** * Database object * @var \phpbb\db\driver\driver */ protected $db; /** * User object * @var \phpbb\user */ protected $user; /** * Auth object * @var \phpbb\auth\auth */ protected $auth; /** * Event dispatcher object * @var \phpbb\event\dispatcher_interface */ protected $dispatcher; /** * phpBB root path * @var string */ protected $phpbb_root_path; /** * Admin root path * @var string */ protected $phpbb_admin_path; /** * PHP Extension * @var string */ protected $php_ext; /** * Constructor * * @param \phpbb\db\driver\driver_interface $db Database object * @param \phpbb\user $user User object * @param \phpbb\auth\auth $auth Auth object * @param \phpbb\event\dispatcher_interface $phpbb_dispatcher Event dispatcher * @param string $phpbb_root_path Root path * @param string $relative_admin_path Relative admin root path * @param string $php_ext PHP Extension * @param string $log_table Name of the table we use to store our logs */ public function __construct($db, $user, $auth, $phpbb_dispatcher, $phpbb_root_path, $relative_admin_path, $php_ext, $log_table) { $this->db = $db; $this->user = $user; $this->auth = $auth; $this->dispatcher = $phpbb_dispatcher; $this->phpbb_root_path = $phpbb_root_path; $this->phpbb_admin_path = $this->phpbb_root_path . $relative_admin_path; $this->php_ext = $php_ext; $this->log_table = $log_table; /* * IN_ADMIN is set after the session is created, * so we need to take ADMIN_START into account as well, otherwise * it will not work for the \phpbb\log\log object we create in common.php */ $this->set_is_admin((defined('ADMIN_START') && ADMIN_START) || (defined('IN_ADMIN') && IN_ADMIN)); $this->enable(); } /** * Set is_in_admin in order to return administrative user profile links * in get_logs() * * @param bool $is_in_admin Are we called from within the acp? * @return null */ public function set_is_admin($is_in_admin) { $this->is_in_admin = (bool) $is_in_admin; } /** * Returns the is_in_admin option * * @return bool */ public function get_is_admin() { return $this->is_in_admin; } /** * Set table name * * @param string $log_table Can overwrite the table to use for the logs * @return null */ public function set_log_table($log_table) { $this->log_table = $log_table; } /** * {@inheritDoc} */ public function is_enabled($type = '') { if ($type == '' || $type == 'all') { return !isset($this->disabled_types['all']); } return !isset($this->disabled_types[$type]) && !isset($this->disabled_types['all']); } /** * {@inheritDoc} */ public function disable($type = '') { if (is_array($type)) { foreach ($type as $disable_type) { $this->disable($disable_type); } return; } // Empty string is an equivalent for all types. if ($type == '') { $type = 'all'; } $this->disabled_types[$type] = true; } /** * {@inheritDoc} */ public function enable($type = '') { if (is_array($type)) { foreach ($type as $enable_type) { $this->enable($enable_type); } return; } if ($type == '' || $type == 'all') { $this->disabled_types = array(); return; } unset($this->disabled_types[$type]); } /** * {@inheritDoc} */ public function add($mode, $user_id, $log_ip, $log_operation, $log_time = false, $additional_data = array()) { if (!$this->is_enabled($mode)) { return false; } if ($log_time == false) { $log_time = time(); } $sql_ary = array( 'user_id' => $user_id, 'log_ip' => $log_ip, 'log_time' => $log_time, 'log_operation' => $log_operation, ); switch ($mode) { case 'admin': $sql_ary += array( 'log_type' => LOG_ADMIN, 'log_data' => (!empty($additional_data)) ? serialize($additional_data) : '', ); break; case 'mod': $forum_id = isset($additional_data['forum_id']) ? (int) $additional_data['forum_id'] : 0; unset($additional_data['forum_id']); $topic_id = isset($additional_data['topic_id']) ? (int) $additional_data['topic_id'] : 0; unset($additional_data['topic_id']); $sql_ary += array( 'log_type' => LOG_MOD, 'forum_id' => $forum_id, 'topic_id' => $topic_id, 'log_data' => (!empty($additional_data)) ? serialize($additional_data) : '', ); break; case 'user': $reportee_id = (int) $additional_data['reportee_id']; unset($additional_data['reportee_id']); $sql_ary += array( 'log_type' => LOG_USERS, 'reportee_id' => $reportee_id, 'log_data' => (!empty($additional_data)) ? serialize($additional_data) : '', ); break; case 'critical': $sql_ary += array( 'log_type' => LOG_CRITICAL, 'log_data' => (!empty($additional_data)) ? serialize($additional_data) : '', ); break; } /** * Allows to modify log data before we add it to the database * * NOTE: if sql_ary does not contain a log_type value, the entry will * not be stored in the database. So ensure to set it, if needed. * * @event core.add_log * @var string mode Mode of the entry we log * @var int user_id ID of the user who triggered the log * @var string log_ip IP of the user who triggered the log * @var string log_operation Language key of the log operation * @var int log_time Timestamp, when the log was added * @var array additional_data Array with additional log data * @var array sql_ary Array with log data we insert into the * database. If sql_ary[log_type] is not set, * we won't add the entry to the database. * @since 3.1.0-a1 */ $vars = array( 'mode', 'user_id', 'log_ip', 'log_operation', 'log_time', 'additional_data', 'sql_ary', ); extract($this->dispatcher->trigger_event('core.add_log', compact($vars))); // We didn't find a log_type, so we don't save it in the database. if (!isset($sql_ary['log_type'])) { return false; } $this->db->sql_query('INSERT INTO ' . $this->log_table . ' ' . $this->db->sql_build_array('INSERT', $sql_ary)); return $this->db->sql_nextid(); } /** * {@inheritDoc} */ public function delete($mode, $conditions = array()) { switch ($mode) { case 'admin': $log_type = LOG_ADMIN; break; case 'mod': $log_type = LOG_MOD; break; case 'user': $log_type = LOG_USERS; break; case 'users': $log_type = LOG_USERS; break; case 'critical': $log_type = LOG_CRITICAL; break; default: $log_type = false; } /** * Allows to modify log data before we delete it from the database * * NOTE: if sql_ary does not contain a log_type value, the entry will * not be deleted in the database. So ensure to set it, if needed. * * @event core.delete_log * @var string mode Mode of the entry we log * @var string log_type Type ID of the log (should be different than false) * @var array conditions An array of conditions, 3 different forms are accepted * 1) => transformed into 'AND = ' (value should be an integer) * 2) => array(, ) transformed into 'AND ' (values can't be an array) * 3) => array('IN' => array()) transformed into 'AND IN ' * A special field, keywords, can also be defined. In this case only the log entries that have the keywords in log_operation or log_data will be deleted. * @since 3.1.0-b4 */ $vars = array( 'mode', 'log_type', 'conditions', ); extract($this->dispatcher->trigger_event('core.delete_log', compact($vars))); if ($log_type === false) { return; } $sql_where = 'WHERE log_type = ' . $log_type; if (isset($conditions['keywords'])) { $sql_where .= $this->generate_sql_keyword($conditions['keywords'], ''); unset($conditions['keywords']); } foreach ($conditions as $field => $field_value) { $sql_where .= ' AND '; if (is_array($field_value) && sizeof($field_value) == 2 && !is_array($field_value[1])) { $sql_where .= $field . ' ' . $field_value[0] . ' ' . $field_value[1]; } else if (is_array($field_value) && isset($field_value['IN']) && is_array($field_value['IN'])) { $sql_where .= $this->db->sql_in_set($field, $field_value['IN']); } else { $sql_where .= $field . ' = ' . $field_value; } } $sql = 'DELETE FROM ' . LOG_TABLE . " $sql_where"; $this->db->sql_query($sql); $this->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_CLEAR_' . strtoupper($mode)); } /** * {@inheritDoc} */ public function get_logs($mode, $count_logs = true, $limit = 0, $offset = 0, $forum_id = 0, $topic_id = 0, $user_id = 0, $log_time = 0, $sort_by = 'l.log_time DESC', $keywords = '') { $this->entry_count = 0; $this->last_page_offset = $offset; $topic_id_list = $reportee_id_list = array(); $profile_url = ($this->get_is_admin() && $this->phpbb_admin_path) ? append_sid("{$this->phpbb_admin_path}index.{$this->php_ext}", 'i=users&mode=overview') : append_sid("{$this->phpbb_root_path}memberlist.{$this->php_ext}", 'mode=viewprofile'); switch ($mode) { case 'admin': $log_type = LOG_ADMIN; $sql_additional = ''; break; case 'mod': $log_type = LOG_MOD; $sql_additional = ''; if ($topic_id) { $sql_additional = 'AND l.topic_id = ' . (int) $topic_id; } else if (is_array($forum_id)) { $sql_additional = 'AND ' . $this->db->sql_in_set('l.forum_id', array_map('intval', $forum_id)); } else if ($forum_id) { $sql_additional = 'AND l.forum_id = ' . (int) $forum_id; } break; case 'user': $log_type = LOG_USERS; $sql_additional = 'AND l.reportee_id = ' . (int) $user_id; break; case 'users': $log_type = LOG_USERS; $sql_additional = ''; break; case 'critical': $log_type = LOG_CRITICAL; $sql_additional = ''; break; default: $log_type = false; $sql_additional = ''; } /** * Overwrite log type and limitations before we count and get the logs * * NOTE: if log_type is false, no entries will be returned. * * @event core.get_logs_modify_type * @var string mode Mode of the entries we display * @var bool count_logs Do we count all matching entries? * @var int limit Limit the number of entries * @var int offset Offset when fetching the entries * @var mixed forum_id Limit entries to the forum_id, * can also be an array of forum_ids * @var int topic_id Limit entries to the topic_id * @var int user_id Limit entries to the user_id * @var int log_time Limit maximum age of log entries * @var string sort_by SQL order option * @var string keywords Will only return entries that have the * keywords in log_operation or log_data * @var string profile_url URL to the users profile * @var int log_type Limit logs to a certain type. If log_type * is false, no entries will be returned. * @var string sql_additional Additional conditions for the entries, * e.g.: 'AND l.forum_id = 1' * @since 3.1.0-a1 */ $vars = array( 'mode', 'count_logs', 'limit', 'offset', 'forum_id', 'topic_id', 'user_id', 'log_time', 'sort_by', 'keywords', 'profile_url', 'log_type', 'sql_additional', ); extract($this->dispatcher->trigger_event('core.get_logs_modify_type', compact($vars))); if ($log_type === false) { $this->last_page_offset = 0; return array(); } $sql_keywords = ''; if (!empty($keywords)) { // Get the SQL condition for our keywords $sql_keywords = $this->generate_sql_keyword($keywords); } $get_logs_sql_ary = array( 'SELECT' => 'l.*, u.username, u.username_clean, u.user_colour', 'FROM' => array( $this->log_table => 'l', USERS_TABLE => 'u', ), 'WHERE' => 'l.log_type = ' . (int) $log_type . " AND l.user_id = u.user_id $sql_keywords $sql_additional", 'ORDER_BY' => $sort_by, ); if ($log_time) { $get_logs_sql_ary['WHERE'] = 'l.log_time >= ' . (int) $log_time . ' AND ' . $get_logs_sql_ary['WHERE']; } /** * Modify the query to obtain the logs data * * @event core.get_logs_main_query_before * @var array get_logs_sql_ary The array in the format of the query builder with the query * to get the log count and the log list * @var string mode Mode of the entries we display * @var bool count_logs Do we count all matching entries? * @var int limit Limit the number of entries * @var int offset Offset when fetching the entries * @var mixed forum_id Limit entries to the forum_id, * can also be an array of forum_ids * @var int topic_id Limit entries to the topic_id * @var int user_id Limit entries to the user_id * @var int log_time Limit maximum age of log entries * @var string sort_by SQL order option * @var string keywords Will only return entries that have the * keywords in log_operation or log_data * @var string profile_url URL to the users profile * @var int log_type Limit logs to a certain type. If log_type * is false, no entries will be returned. * @var string sql_additional Additional conditions for the entries, * e.g.: 'AND l.forum_id = 1' * @since 3.1.5-RC1 */ $vars = array( 'get_logs_sql_ary', 'mode', 'count_logs', 'limit', 'offset', 'forum_id', 'topic_id', 'user_id', 'log_time', 'sort_by', 'keywords', 'profile_url', 'log_type', 'sql_additional', ); extract($this->dispatcher->trigger_event('core.get_logs_main_query_before', compact($vars))); if ($count_logs) { $count_logs_sql_ary = $get_logs_sql_ary; $count_logs_sql_ary['SELECT'] = 'COUNT(l.log_id) AS total_entries'; unset($count_logs_sql_ary['ORDER_BY']); $sql = $this->db->sql_build_query('SELECT', $count_logs_sql_ary); $result = $this->db->sql_query($sql); $this->entry_count = (int) $this->db->sql_fetchfield('total_entries'); $this->db->sql_freeresult($result); if ($this->entry_count == 0) { // Save the queries, because there are no logs to display $this->last_page_offset = 0; return array(); } // Return the user to the last page that is valid while ($this->last_page_offset >= $this->entry_count) { $this->last_page_offset = max(0, $this->last_page_offset - $limit); } } $sql = $this->db->sql_build_query('SELECT', $get_logs_sql_ary); $result = $this->db->sql_query_limit($sql, $limit, $this->last_page_offset); $i = 0; $log = array(); while ($row = $this->db->sql_fetchrow($result)) { $row['forum_id'] = (int) $row['forum_id']; if ($row['topic_id']) { $topic_id_list[] = (int) $row['topic_id']; } if ($row['reportee_id']) { $reportee_id_list[] = (int) $row['reportee_id']; } $log_entry_data = array( 'id' => (int) $row['log_id'], 'reportee_id' => (int) $row['reportee_id'], 'reportee_username' => '', 'reportee_username_full'=> '', 'user_id' => (int) $row['user_id'], 'username' => $row['username'], 'username_full' => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour'], false, $profile_url), 'ip' => $row['log_ip'], 'time' => (int) $row['log_time'], 'forum_id' => (int) $row['forum_id'], 'topic_id' => (int) $row['topic_id'], 'viewforum' => ($row['forum_id'] && $this->auth->acl_get('f_read', $row['forum_id'])) ? append_sid("{$this->phpbb_root_path}viewforum.{$this->php_ext}", 'f=' . $row['forum_id']) : false, 'action' => (isset($this->user->lang[$row['log_operation']])) ? $row['log_operation'] : '{' . ucfirst(str_replace('_', ' ', $row['log_operation'])) . '}', ); /** * Modify the entry's data before it is returned * * @event core.get_logs_modify_entry_data * @var array row Entry data from the database * @var array log_entry_data Entry's data which is returned * @since 3.1.0-a1 */ $vars = array('row', 'log_entry_data'); extract($this->dispatcher->trigger_event('core.get_logs_modify_entry_data', compact($vars))); $log[$i] = $log_entry_data; if (!empty($row['log_data'])) { $log_data_ary = unserialize($row['log_data']); $log_data_ary = ($log_data_ary !== false) ? $log_data_ary : array(); if (isset($this->user->lang[$row['log_operation']])) { // Check if there are more occurrences of % than // arguments, if there are we fill out the arguments // array. It doesn't matter if we add more arguments than // placeholders. $num_args = 0; if (!is_array($this->user->lang[$row['log_operation']])) { $num_args = substr_count($this->user->lang[$row['log_operation']], '%'); } else { foreach ($this->user->lang[$row['log_operation']] as $case => $plural_string) { $num_args = max($num_args, substr_count($plural_string, '%')); } } if (($num_args - sizeof($log_data_ary)) > 0) { $log_data_ary = array_merge($log_data_ary, array_fill(0, $num_args - sizeof($log_data_ary), '')); } $lang_arguments = array_merge(array($log[$i]['action']), $log_data_ary); $log[$i]['action'] = call_user_func_array(array($this->user, 'lang'), $lang_arguments); // If within the admin panel we do not censor text out if ($this->get_is_admin()) { $log[$i]['action'] = bbcode_nl2br($log[$i]['action']); } else { $log[$i]['action'] = bbcode_nl2br(censor_text($log[$i]['action'])); } } else if (!empty($log_data_ary)) { $log[$i]['action'] .= '
' . implode('', $log_data_ary); } /* Apply make_clickable... has to be seen if it is for good. :/ // Seems to be not for the moment, reconsider later... $log[$i]['action'] = make_clickable($log[$i]['action']); */ } else { $log[$i]['action'] = $this->user->lang($log[$i]['action']); } $i++; } $this->db->sql_freeresult($result); /** * Get some additional data after we got all log entries * * @event core.get_logs_get_additional_data * @var array log Array with all our log entries * @var array topic_id_list Array of topic ids, for which we * get the permission data * @var array reportee_id_list Array of additional user IDs we * get the username strings for * @since 3.1.0-a1 */ $vars = array('log', 'topic_id_list', 'reportee_id_list'); extract($this->dispatcher->trigger_event('core.get_logs_get_additional_data', compact($vars))); if (sizeof($topic_id_list)) { $topic_auth = $this->get_topic_auth($topic_id_list); foreach ($log as $key => $row) { $log[$key]['viewtopic'] = (isset($topic_auth['f_read'][$row['topic_id']])) ? append_sid("{$this->phpbb_root_path}viewtopic.{$this->php_ext}", 'f=' . $topic_auth['f_read'][$row['topic_id']] . '&t=' . $row['topic_id']) : false; $log[$key]['viewlogs'] = (isset($topic_auth['m_'][$row['topic_id']])) ? append_sid("{$this->phpbb_root_path}mcp.{$this->php_ext}", 'i=logs&mode=topic_logs&t=' . $row['topic_id'], true, $this->user->session_id) : false; } } if (sizeof($reportee_id_list)) { $reportee_data_list = $this->get_reportee_data($reportee_id_list); foreach ($log as $key => $row) { if (!isset($reportee_data_list[$row['reportee_id']])) { continue; } $log[$key]['reportee_username'] = $reportee_data_list[$row['reportee_id']]['username']; $log[$key]['reportee_username_full'] = get_username_string('full', $row['reportee_id'], $reportee_data_list[$row['reportee_id']]['username'], $reportee_data_list[$row['reportee_id']]['user_colour'], false, $profile_url); } } /** * Allow modifying or execute extra final filter on log entries * * @event core.get_logs_after * @var array log Array with all our log entries * @var array topic_id_list Array of topic ids, for which we * get the permission data * @var array reportee_id_list Array of additional user IDs we * get the username strings for * @var string mode Mode of the entries we display * @var bool count_logs Do we count all matching entries? * @var int limit Limit the number of entries * @var int offset Offset when fetching the entries * @var mixed forum_id Limit entries to the forum_id, * can also be an array of forum_ids * @var int topic_id Limit entries to the topic_id * @var int user_id Limit entries to the user_id * @var int log_time Limit maximum age of log entries * @var string sort_by SQL order option * @var string keywords Will only return entries that have the * keywords in log_operation or log_data * @var string profile_url URL to the users profile * @var int log_type The type of logs it was filtered * @since 3.1.3-RC1 */ $vars = array( 'log', 'topic_id_list', 'reportee_id_list', 'mode', 'count_logs', 'limit', 'offset', 'forum_id', 'topic_id', 'user_id', 'log_time', 'sort_by', 'keywords', 'profile_url', 'log_type', ); extract($this->dispatcher->trigger_event('core.get_logs_after', compact($vars))); return $log; } /** * Generates a sql condition for the specified keywords * * @param string $keywords The keywords the user specified to search for * @param string $table_alias The alias of the logs' table ('l.' by default) * @param string $statement_operator The operator used to prefix the statement ('AND' by default) * * @return string Returns the SQL condition searching for the keywords */ protected function generate_sql_keyword($keywords, $table_alias = 'l.', $statement_operator = 'AND') { // Use no preg_quote for $keywords because this would lead to sole // backslashes being added. We also use an OR connection here for // spaces and the | string. Currently, regex is not supported for // searching (but may come later). $keywords = preg_split('#[\s|]+#u', utf8_strtolower($keywords), 0, PREG_SPLIT_NO_EMPTY); $sql_keywords = ''; if (!empty($keywords)) { $keywords_pattern = array(); // Build pattern and keywords... for ($i = 0, $num_keywords = sizeof($keywords); $i < $num_keywords; $i++) { $keywords_pattern[] = preg_quote($keywords[$i], '#'); $keywords[$i] = $this->db->sql_like_expression($this->db->get_any_char() . $keywords[$i] . $this->db->get_any_char()); } $keywords_pattern = '#' . implode('|', $keywords_pattern) . '#ui'; $operations = array(); foreach ($this->user->lang as $key => $value) { if (substr($key, 0, 4) == 'LOG_') { if (is_array($value)) { foreach ($value as $plural_value) { if (preg_match($keywords_pattern, $plural_value)) { $operations[] = $key; break; } } } else if (preg_match($keywords_pattern, $value)) { $operations[] = $key; } } } $sql_keywords = ' ' . $statement_operator . ' ('; if (!empty($operations)) { $sql_keywords .= $this->db->sql_in_set($table_alias . 'log_operation', $operations) . ' OR '; } $sql_lower = $this->db->sql_lower_text($table_alias . 'log_data'); $sql_keywords .= " $sql_lower " . implode(" OR $sql_lower ", $keywords) . ')'; } return $sql_keywords; } /** * Determine whether the user is allowed to read and/or moderate the forum of the topic * * @param array $topic_ids Array with the topic ids * * @return array Returns an array with two keys 'm_' and 'read_f' which are also an array of topic_id => forum_id sets when the permissions are given. Sample: * array( * 'permission' => array( * topic_id => forum_id * ), * ), */ protected function get_topic_auth(array $topic_ids) { $forum_auth = array('f_read' => array(), 'm_' => array()); $topic_ids = array_unique($topic_ids); $sql = 'SELECT topic_id, forum_id FROM ' . TOPICS_TABLE . ' WHERE ' . $this->db->sql_in_set('topic_id', array_map('intval', $topic_ids)); $result = $this->db->sql_query($sql); while ($row = $this->db->sql_fetchrow($result)) { $row['topic_id'] = (int) $row['topic_id']; $row['forum_id'] = (int) $row['forum_id']; if ($this->auth->acl_get('f_read', $row['forum_id'])) { $forum_auth['f_read'][$row['topic_id']] = $row['forum_id']; } if ($this->auth->acl_gets('a_', 'm_', $row['forum_id'])) { $forum_auth['m_'][$row['topic_id']] = $row['forum_id']; } } $this->db->sql_freeresult($result); return $forum_auth; } /** * Get the data for all reportee from the database * * @param array $reportee_ids Array with the user ids of the reportees * * @return array Returns an array with the reportee data */ protected function get_reportee_data(array $reportee_ids) { $reportee_ids = array_unique($reportee_ids); $reportee_data_list = array(); $sql = 'SELECT user_id, username, user_colour FROM ' . USERS_TABLE . ' WHERE ' . $this->db->sql_in_set('user_id', $reportee_ids); $result = $this->db->sql_query($sql); while ($row = $this->db->sql_fetchrow($result)) { $reportee_data_list[$row['user_id']] = $row; } $this->db->sql_freeresult($result); return $reportee_data_list; } /** * {@inheritDoc} */ public function get_log_count() { return ($this->entry_count) ? $this->entry_count : 0; } /** * {@inheritDoc} */ public function get_valid_offset() { return ($this->last_page_offset) ? $this->last_page_offset : 0; } } E@ 0Kŗwǻ0J'jȄ5E3j@OGg膗27_Ȱ C~w*sEBi+ffkK"UYM =g< dZ sIxRDum7{ZvʺɡF0/bhK PObO{|Y~kiE]D=RF E Woy[COhIH~oݏ`2S[!Y#( 0gYƁbӌH` P<~b6u2?;EMaeQwi6I1&Sӽh)?LE@p3:uf aFkyj~I(9ZXHPWf+"TWKm]sA UxyUvs5h].[SQ=t{$B`ޖJ”،7o*3}* WF կ(KόcL $B*v;3(7?7&{92+:_5Te+ n*Qv0\;;ӆU="ipiv־ -ψ>4 -i_.cZj|En=w=̤2Q\`A/zb Ta@?Ql Sqq`yDLPPъqikN \mX#ɨ>;E%[P֗*{X@uVEv3[來:+:Jj V,hJ9nځҲrH:!@7 b:I>3rdYhRtsJ^^v:xe:ǮpGSĥ`K30˷sӱO/AQU$.¼?jz᝕D i'y XTBrYqdMN?30 PwۈWB@.6B( *I$d[?=4֫#0T'IzZaZc͵dYP"\a-12cT:pkGRL=gu ^>Ň%d"+`G^ej&oK2n9${$j^|7&=>T H/&{+D%[؊oj+z:=%Gz%0_Ш2v.J<'IR/"aTk'+#NJ$nd@\tz~Vgb; $~33(m /'sg-p·/m ҍU!\8_&وߤ8dj,§s+13҄"ʨk֣y|Mi!la_xdrG R?b~<0%BH g#{A #{2:C4Ks_ƗDۆc&+N}mRQ$Ok]!kRwך69u?3x P]UVsj 8R2Ē0১{@pJb&W. #FfDYS 3)~fK.BNdKIㆨh2x"1{#de̳m(o1ܨK_)#uwM i1acT k,t~EFz#[T(P1[%wGbc(J42߫>f\S7ͧ;2HȰSw=Q+ u L$㨉fߪ%~aPàHl^RPZ9Os[l$sTIpPk|P) {\Ho/:**|*G˜K!:ȼ=YSޢDftܱA*w;P|@>vF$<谭$m EpĈoLYo݂7:/\J臱3*], e\6HgEk&bޛ:cf2s6H$iXxXotGᕖ(OU@;RV#]Fp;֍ 5d3Ks{j,sy=繼%!-uitY)giRUߔ'=^ Ȭ8jQݶ2;Ckba@ą˱"SpYSE yi^wxI fC8X BN6"/|d̃Q*cn/(M!(abhÓ]$C\MGVG\]3݄3Q{@m al=念6;UhJ]okLa\a} ,= Y>G`P7$S.B;/\6q3x'x g/*zoVD3HKxIzڿ)ɂuO<¼t!, 9KvWFi b5`""2x9wk$=̐JHbi-탳O=vD˱wq ׇR^»#X YwP Q6ESP\@81FHLeԥV^O:qE_T$&2Kmx P{/:8ql`I(Bا]~cwݥ )w52wPE մཱི d2]ynٜNcG[mNzQ -EQ N9~*vI$4Lij[YڂqC֩Q򷗠NҀjo{'`IYZ2ڞKy٪ϟLa}_4SRzw$ j59stHT |uKq:\B0A0jgŸ_s= *r> "r~2o"zh1 @`) h1vJɭcF]Xb=ȢzƖ$<3Ȟֺ,ӗ@i 2)T G>XQAuwj~q(kP ֱGb\:B^>/ID/0 {I5 YcYSv]~ҫsYNv)Q=nTn57-]/aQ͍VhI /2v!IoNJoJunI KDRS=t Gtwd2pB5j&e8wTUK'WOym~QJ8(t`/%7ippq]1!͉FDL uӓUq|Y^Whd7ϸO,SCg錎iEo)dp&p[LKWQ#]X |JYseЖtfXUN{8CSU%Tme;84g(v<{NH6U  1<ٍsכ5QAR7plϭ[rr01)c̾O ;W/-Y_S-aq)ӥKQ1n0ܰ‚J~ .؁jT]F>eL12,d3)TwVG>}Q'ks& L"0y>I-gҌѻ" J߰}@7yLʺ#8FyP[VJ .v[7]}e ]B*mE,F9ľ7i-AK8ҼkX\Z@92Q(RP)M'P2ۘb 3hd)$*y֑.] oCp(3%@(X䵿Kl?og˩]`X^Atm!fB^,1D=PҴ_/ҧ3[g$p^UELמl ndFAG8U'^XD"Y6D":P:#aq%7K^*r2 6Z= \=3go3#޼gvOcxPys PĈ|Cs/zk>[%r 8}YA0du|A4]mg`jm}E%bND>uM8$N8F| 9+Ϧu; ҌtH 6CdT>FAH|e7W$V1ÉopW<{ϻ|)dA ^j`o/LwEyP#PnUSma?-MFAH׺SFԙFӄA;s1ƷE9ծ)sck:\8om:湺8ml(tUхbK PiV^ &lgjKknY O%Q ~ic~.ʜ7.+>CSOmzWw!#ZQNiKvȎ D&8|sO`,к,8ë́V}9Ȋ䈩%poio݈- 0D_dBGwĖ@}7F\tv][ojn$sefhiu`/3/0[f"T /Mc[ ^2CN IAi ,}z2#GFYg[-V;%".Z d,B <%ם Eݧh1˦@4-V/2/1P1g͗ r$}LSaF~V wy;pU=uqJQCB6!Z3A ԇ+]$M( FoF dtJ&%VB:h6|KXHJ֝hzk>"@gBo"GjF)bii?q+?#CzMօo{KȤ| ZLRb-n2kdqBKA,m$*˥%&oZn,n G4lhZ%y^oYщ&9cd2чU f[njbbէ\W"*(à½H@|3Yeep{ePl(rۂnJ%j*ĩOak5ߘSv~0[d{*E8 $rR1#e&'@ <#HWad Lu!y}~+Hշl9Ҧ!b>j%q/r&.^I4\'-6oo,Q`wB!>: LFnBT^P}qNq*z}c|x =ck%@O8J%YWLt/SE˿c\㤈\)4,]E< S>wU1 wfF˅UO/ne{DJP:MhRB8Rįl {.ȁT45 0rq63s,#w4rJT a[YR= .l/vEsTl1g4U;6sm"a؁gK:>O ɰÈ Ϫ@UqIw:B. qe%Ql#R3MP5`zM|Ϗ-l/hvfS9x#Ora˘ƖHBKWˮ "lf28HYCIf4c]˞\}e{kJJ]eT# }IVo* >M<4ŝ3"ݱ߫xdr{"" %jgzaq { IbrN]Ar7v&jEʅspnW~.S\FՙJZ{FXU'Ziʱ|"3i'.}&qrXq1D0ѯ0*و.[ߌDm6dBqô; ị?.{wyh-;EwmjhI[ZܧF9&)Vbԣ61s%R!"O@=e0n̈́^C&&opXx9CnҼX+i%FN+AAqGBe(8^0%PnSaCYe0 B{edgeQ F~:Meau." nZqyn,ںXm-9 kY{8/@Cb&,'H2oOઘsc}i%[+tnjK1oqn ;;c3,Q2A@E @x-ƸѫhZH QI)Zٻ%#.2-"b$5JY2Z9K`(7%,Z/owQR5%3IE-5;c\,u ̋^Kt&ҿ ,;Qls3b*F)Oly9BDQ'1A Eø+9+EVbf1!&[j9 g\{-Na7,?C` &W2d1'8 } ېsI-nȭj=N7 hnC*''Ze^6RQu.n|e@%<>rӦ'To#Z5Qbd;ڜo`\CM^7t,D"k NZe7 K|$ I,P棞VUm(-n0`%f ;#3)WO'hhUTΒged)y:TpZ3!};ͅ!Ixq4xS%\ɸKLp[v,UK9x12}ϳH?DPfhcO"S{WU@!2[AݿNJZW*4C!ȍw \lbB1ƫ"wAj'*O1'}`8{ X\tgb &|/#Y"ub6&g~p;P~ hh14V"jYOQK EDpfoz@VO}WݶhtA]OC.viُ5"cqs ip?"L}ml ~ 5FA=BR~ҾJGefnahCPCӫOSC8xzIntNVD^~&s&:!(@ uӷr-1C4NP۲dŀ(m}.)M<@lR!E_[-Mu;?BU8ѓzqYG rHR9nxC i-p0Mde`CAn$.D%Ux0f)[]jup _xM"ǷFB:#PyN!oY~NWv} tcvV韧 J- !|m H:7Fp. p9ڴq΁>:>%Y|DSJnk _C4滙@7bM|ԎZ;'1`y%C)]EWzYXlo7*%WxIí4N{Ae8m\ZNnM!rccn`-{ '՟ak .zZ ~o$bz=g56)򏺕w!Kλ1T/ھljU7_)WACe3"@;qy< Ek03uci2R/J4FU},@+FQ/d0{XqyBNAIޗL- &~PuuR1͜D,{O=%h6v4B6T#Vu?&{UCXCDގhdCKN~aP'ȫϩɷ,s_` !Z!A @j϶=W&-RowT K\i K6aNT)3]L{fדD 9$Tamω.:w)4W1d-% $!)`M]ۥq&R! HynTk);ӲznE$"烘 sktSKEBh~Wؔ##:s%_-B KaJF>h XG"Ѹt#` TP!8ʸodB'@d 2ɕML d.)ī`]"#Uy.7LBKӞ/ ^dy~ꍳ>9\Z!0NI>Aᾱ>(e 2垄*كQ=\Y;ΖetvK{nCec ugkFN5ȵ0| 1VwD{f}k{ˣp̧h.R#=B Yf?{KFG1G$L͙[A:;gMwvxY}XR}'‡toG82vUH\d]e OD-<=I;5!̚3LFQ 6ql4sa_K{U(8XyPŕ<*6ꒉmֿ{LEj6RS_-ʞhc~p61=euUCEQ{ re1<]N?-VX7*[Oԫr ĸwX/y!(Ґ۳M\Ǵyj[q/5N k_qxq_-IWKY&> M.)Ho84ybwi|F4aQ0Sjfg\S)]>aRK1}Hǰy(0-KSsgֲty'~%)G>P{+:sX |\v>}lq@ظbGY\#G !ɥOAxg,VMs(#fz̔ iZRJ2HL:>OF&D#Xx^6G nPf0ѽJ7ύ~8ENݮp]h{ǁ^wIY(`ivBm}]^\B}vxxa3IJo:b N3:~3C(DݔT.j Sd O].>DO>jO??Jأ(> 4+^?R؛gKtƌŒId;oj%٧ _EhBZ{7u!›Jfǰ]@D5X锚E?ܥ{<1Oc;KUF^hB?%DuXBnwU}EF .5:O]?ceK'`pm3#<+b1x<$)w֐y?Ɉ,~r Yr({`S%^ ,FtS6:=@`*Xd/QP sf#_Ux0},Oy(`i0\Aʀ=)Ω C(hC"&&>,x\T2TP'iXGAZ3p 3Ⱦ_0ϕ!R;F 37dֲ5`?,KxBӜtX} H!~“~CGI"8#Ӑ_/SY2Y IxNYW3y +0wT(FAAQ2q6 -4Dž8%$lu*$ƷzkuJڴ7˯E$$U~AGu鸐;ŐaGņ1Tu5jC~U}R5W|6T ]eq<^,sf30Ҽa(6x- h݈GCn qME<1aL`Ui=(ecfUY3LbUt <űl+ơq?8[U+eqafMۃ&mR70Bn\22`hK)Ut}|1ٶl,9C3 yk-|d_c@68Q#&Byp~%i= y#t6Y:7'桚Zl ,ٍ1Żgޒo&ݲPmwXLa}@{#_m< Q>^f-ҷQsԑ;BUpA+]Cᓐ3Hra+@SG=儛W>ihתp0Wt]xr\~vCZ1t(؃1q뫊 Pw`j1w܊g/͸ow%%Ruajam&*"7՚H7.y5yzٶ$b[j{MZi>NIZL'hOx@&奣yqARW)I/&wiSYuPl ~ wSKyK&t. (B/Uܑ30Hm0X82uE@z[蝀5kRh{>y<cKn -fK,8f?>z6 ON=N<^#M+0|AJoע5d}Rz = bb][i1SC$ 9M[)++s<ܞF.壟Dz0ƐJnk y-GGEt1*GJkH-BF\AF_ !D)9yG$ّ3E抉 ʥ5.t'/?AGɖ)d۟/`gՅY777Znn0 :>i`}7ziDV͞-&UǠho;H o|PxM?Pc#wIU;6'7ߌܔG21y۟$AKt #՗pReyԴٍ]T!B8$αHŪ{"Ij UDP QD*#):!T5<1چѓޑ4e0`fv SX?RmD\('(g7]mKD#EV b^yĄ ]jTa:Gj:H32dFٱ.͌TT?G6o(RY|}f.TM%݁n3CZY ~{s`h>ê"9ƶ0h9boy<,&ԛ  ݶv#G!%W7ocgeQ:8=(1I/{ b^Axc lQG&сuW7W)p%k=WGBgZu fԪdTw^R.i'7H:z3 ׫6P4V'҈!5Po(#kp./ oK4aHlCFN3ow5a@T|4KۧRR,1B;)q!DU`MwlD>Z1T3a A&Zq_I1}ȫ+{7v피Fzً3(߁D}).I. dze ,̥God1Ջy%G#E'$ă]]AQ~fT[@(j +z߲7|@+q׺';h-בp\{~H!L5OzUnHP\)l{\n {)jcdCAyD,'/Ŋ&>M9*q;r]6 B!":bf F[xp<6Rw^Eʬ;x71O֔2{]C4׷X\XF lSaN PċX{4k@]$j}0S%eqD!{n.m؎x5`]7X}t./҄;$>uw!˃,sO-%8]37A!ibPs"$30-R|B6D'TuKhBdh"@6~ҝ8~"O[K lZQF>;öXjǘlHzGeV?>nԟ,I7K0 9 ]bø  D!WeZ lܻƓf5eC,kYe RY"B˵_%1GN5$t^ƺc@a5Oʁủ8邛ư1m0lƲjZCYʌPxmKwf? '^OA 6ybꍴ<}ZNxP@"+ p.U7Fܼu~p`h.J\c6^b7zP6p)46+4ZlYcW7 TڄztFLU8)f6c;v|/Wq3cn&Ixny`mW+}%+!晛뮍k6'*|=:V,QL ylo^Ҽ݈`Րa%x^Dj˄J~0G`7ŊG_P >|Ro_L nUnz[QAC8!azQf؃e6ysJSxCf 4E&w):nht_wHH"{ Q[l`:?A -S?~3)ko]M?xAHJ:J0)Y1 4]635tO\ S< 2#rZQ\hJaZӧ Ei nk78(Y Cd @GGl 9S쏢~fjn((X2k`P9@:oo]ڒꖄ S1y6hYq iߴ$E[8a+ij8{8M)}M&TcV6F1Je$}{\+| BKd GҐ17 lA{r!y -shj3Qmxg>=gH@ xry %h5#MUt!J v-%T"8Jcm m`DF -Kc@ C1yR77zeR b ʏU`؍>1UTf$RaI1Y5ZX nZqGHίgԷk5wB:8 ;^&D6ˆXjކJ[["+QyYsG 0rR-Nߺ{#Sv1MP#O-F5W#H"qzdE-hQWD\P*RtCS^[qa6`ʠ !"*e|S ABh!ttRR84q.N}WmmE7M3R ڵjΞ}Dvhb߻7GW |(֐R I"\ZJ6c+ǡm 6X꧔fR`1Z&|#AlG ns^4E O$ƙI8Bs=@s2q5dw3xoX\$My*p|^T1=Ga@x xz$\$08P\L-UQy ՐȘ؎Ya#:Sk ݫpzQ\uh@ -e߲SiHh,1B[)lTQU m]')Tq,|}ݳEJW{, @/ŰV_3+5sXM!\TwW 5Yʄ@@z9=r76e:f0XXc&HẸTAIo:;>Iptgzc?h d+/ Pf;.焩D9oyAUr^dE`HCb-z 1bsj#7P/v}\CcTHytv'D )9_d~ o$AB8K c8ˇd+b_'%`DE+וzj r. W`ǵ{F$ڦκ~ @G3&45 [Fa,2l 楦s})Z\Ѧܮ@v'_m~Q~_Bؑ⡋(C+dn.\KgXCcB<0h¤kRMd t 5!3*L(44Ӳ jI Hz b çVM~y rf_ʕL׽Ck߀tZ8(@{4B =țaWL[eIv,c>fd" ۆP<瘗כūh82Պ yہ럁``\Wr \UpK@xqwy (T̖NjA೛gk96><#g1ktf*2S1Z>:fE-q*~ࠍ"a*u,~v3Rx0}߀}%!@\#w߸h~V9>GuEO#xWso^uyPj55rdKBquEZkjLQ^ }쨏-Ru2';D .15X_rAx>) 9ʼKm+;8jM<@<%,7Wb3/lS3'/Pil4\25Os a+i2EAZ6dZj z'6]!҉Lۡ^?<3Y"ok͓W88SI."\Z~SHtbf,4܃)'<2v(o.M vV˙=O;5 ;cH, 0 gߖ "l=;%{?i?X+Dzd?gGZbQߎg&9!i7 o"S0X齶 UtϚrY EiJo<=xVZ:@s =7QZsWYzL0HDUޏ`FKJyv,vхr߮%Vd_JuDoemDn o?0;"[2ICj~ЫGt<.Qk(,*Tf1q*E09ެWL[B.fƛ*. )}`S~5~>'89X̎C \c'E1sh(,5ҲT Tk\(D4}C{r^whC ps\YawB!t$%=ԘF7[MO Ysws`)|F~ȇ # N!B/ x8eP,ktbG|CDq:@*I+D!^1G&/VI'{ڃ]ِ9oD:צ;! ̿Di@I]?EI8-b6;a"3 0*"a y'{K]+O\.Z0h;Bhm)/Dc0Rq 2>UDJUfv#7Ԟ1h|v kYPG*f <ƍ KIε!" @2{CBqj,x!tH,^[r>!*MO" Ar5Yq&Qe*j52 boJ'b4ف 4z1coyި)M `6wSVzԟ5$_K"Z}H.>~SEH-;d=v3.- ìol|fU'(˲!Zz+J{cOTzL#OAf(v|n[eu\Q2-_8ۍwL'WJQvicN9c6YNJxiӵKȭ[.W}Ԯ>phRORs);&jG"-q1x}y_XgNwAAh$12[}C15\6&Pٶ !RiCc;w~{Z_}, 3 zm49<Ylnw |4&%QsrT fyE s)11? #W#b"&U|"pЄt8U9?#+N N^bؙqA֯ Bnt݃]V_ &J*M}#5V5 KϞs;cӁ]!G 2G7o`YfFVZ=Y}GB^Q}Ac߷))ϣN}tGvM5$1q521+zCWB 4d$9qT^nԓ8ߕ*z\F*唈`ِMUs*H߅yOG<1,]֩]~ZSr4mѪ3`;o1[sG$T/4y4ҤbۂhnU#2:`3^5WKFtO5/90ܸ6 }썐73)m@8poutI:@ rIC;I &0$[CάЊHiKпb]R:-Z[.eܘ E?YT}:VVc?@[@@ѭ)4 ua?[_$DhT+w=@ճ 6{Zzwnv=@\5XSJ=D2K< }roVV9*i 3οي(->'S\?vRQ>Dd}ycĉs]y/č۶)v?a.ג`S"_3"ܺ-If 7O%~lvߊy.MM7I+_%j-dIXѵAJĸ-Q1&Ky@s!MLOS}c4ԌlΨz.o6S}v Q1wZ'pfqߵst n}XuqX"+qϏ9 |!;5SIz@}) nCπSSDm˕2Óc ;2| ZtH6nNO롍 "N18M_;B r)uއbeސh7\Lo6a87i(XKK(7dlRU >LՃZ $w~ OEnqA٢ }m;=隹r?ǚss>7O&1C:E8Vߴd'i4Uk; {K4Q%ER1V^ ՝7/lHGgŽor(ЭJY]V ˥8sGU#Vb;HUEݧJݴk*aB$w[ID q2hf*r,mQBr $̒ce5P惹D(:1BDX=5k܁b9a#];m6}čڹ hK@Jyu\hdU ,x&mz$ [dLP{V<.7EBQz?h(e>~Y@h@p)$V@mؿcx0MczVwh_x>#Ëץn^ 4'gڲIO7ϰm5H[]׋3/d[`WAcJ?_C"m0P"r8Ճn`iN1MpX'*6d_o+\8vL1TAٌm!+"r :l(̒F|Çfް#]>[WKPgEh|>EL=K}JKkgqF`<#k^AO'LJou[H5>D"4Eιkdӑo6q׹2= -nUMZ!E7Ʀ.x O)] Xb hZtˍ,M!FF}2qҬ$}myc%ү`fI3s I#O W@*+Tyxz>ƺ#Gȯ/AVTMHV:Wk||{D4.'yi 8M5zb>MO n~b)-BY#>[I/vfQ:ׂI ɤ5 _.luJػERrU7!Q+V5hiVGo$瞘$bֻoqto H!N.' mv z{sbL> %Y =o0ʂ"ҖӿZ ;fzg.eLO/-8QR4~ Me|>TbD?;1sT3? K^m4w+֎tc[OYZULԕ\=u[ZhʶftsP1$*E+k]S|Y Tr~O|@=Պ۶yxthkۚϱ n]IϠaHRC5UpS?f7*.#/ɦ>'<}h[ joE[;:0+1$];Ftv1T_Ƭax CW3/u*4X ҟ]=ȱVSZn@pe&USЯ4 C埾' C֬ɕA)1\hhPeh^V3ߎv8ӳyԞYbbC4)6= y1PxYF=͔׈Fa1P`[[)ޗ=`Nrbp|1Z"TCK)xiˢ 7Z5YMіAQnw/,ަ=PNv2xM4xL?7uBezo7tʠZP8/ڠH}{T4\IcjK!FjQ%T@k#K^$-tsnZk@CqY}zVY//R(]bIEylJ7"$5{xܟ ژ fj|S;Ce[PS(LUpS̠F fJX"C9s)nT@5#|8\%`z:%ZڍrYT;ǁs>$11u[b-rH=#@IN!su4ZIhwF8,K* ,rȣil fR c h.1 %r\]f |TT SjY0+s6aNϷ dC$\:bM(fs@{8 ON,&4pq:9>2c*tU@/,Yϣ:ݰF os?]1Ek9go{՞U9d14j#1;U'FGHYuÛhBJwF=/T1nW+ =eCF+SNaӗ?U>Y^9j-3t)&㨙(؛\4U!@q%!䞹mVav`o! (:Tm4{F~.S~ۡMW<Tc\ґ4|EW[z?^)[()pNOi}#JE{[94mJU:S8ܣymu싂/xlXt{(hf3->—|8!tU RŃz*xzGoF ( #D*H6s :F[' t @KSND]. N&w1@QI}X) V&ח$ƐvvܬW쾦&k`o*=Ij 9:EN q dYZ!#E''K~/sE`\|:iypZMND% sl:2=[ž\l"۾ljm˪D¾ cP}?9Z m))cY(ǥip k$tBۖ`𨜮P4}qfeIݖ\7GC f|Wк`4ZGC6z$̱ ɜW7S"H'|K\H'c`mI}bne6OHB\ѥH W'bv^@cZ M&ol& ;I)rjE;ݎ2#x;p n'bwwE<ʇ4=y.A3g|Ak r,@\]DTg;dQ =uEQ0 ($\4YjNaHȔnHo˨ >5՛U@[߮! EkV:IPXHEг^[Iq>vӫ$\C#t!Pu&~L 8BGUdvSo=fVRZT4Q\YPP:]pZI0;h`ʀEsIKWM>|Wz̚rTuxXԊ(o._Y?_dZ :-jD\(8nAmy8EV#zh_C:M5'hhy[CĜPa\(5IϕoAm7s =ybǑ+ƣ#??PTx1s,9ώ5XM s8%}b <%QeB姹 Ȅu7Q5=- O#h̍~3E=l3G:èн>GaՇa+ȏIS%=<XO.)NzsΚsS-ϲfW75[Y=&@_x,)0 2uA2]41=#UAg-:o;S6d E~(V _`fk=2fA y@4 DVLpT{9?s%ÙS< 僵5;$_;G 8FPe6WuZLs9*,ޙ: 睃pRӶhRaB<qY&1m$p<[U^!IKk6 geuАw'#51ˆ!EC N֋4;z<"hC ] OH2::pퟚ fɚN}_5IaU^eR&"ՇvBp*xPeB^jb6M$2C% P H2sk}inQdvf4(S㡇=jݵx]e$ ]7R%RVLyg󇑫 (h9tFup)I3oYvصR;U ܕ3p1t-g󱺗O_!Wr>D|/cE:oKKZoqG=o/j#@rLVRK*Eַ]cFTy8-cB++͏v NuvJ::W@&3ؗǛ&;J9,+°%'wf3E5ݻ^%ߠܹPbj_a2UƺHݳ.?  ~-a*^|Tgp`nd#lЪF `uq6\8}\WR4%8)>roPذwN0Od3g*zMa0h$Xaێ ]A;W~DiVFWWF\I^$4Y}Y<7ژjJ+[nAL tBٳ4loѓٰ%3$sbgl`|zoKm'Nxg);lls՜*N!@Y*.g( j&gv*Ew!ifnÃU$u'̝#-PՙQ38ч,0-2зq ,ݙnX?Z. GtѼa+65[w}UeNP0Xb.X%r)4Kǿ0xM8jH*kS[OnvF{ k]f: E.SD_[m]LJ@Y}nlPSy*mKh1bc_Aido&vYhf:epth #1ؖj=D"| k$os<7 "A1r_ (YI59B6+Q[Agk9ռ>8REP'z@WVUjvjc?LQ h"t2Dwn86K ]SQizV^'nS[}?7 ªvh@*-g 1NG{.jS&rYQ}ss7Yd 'b}CNU+mR,GlTcq6~%oT mNIIm!4 ҾC3(ƙD*6.g8*QxzG'atmR,7 eiܘw& AzM5˅Ff PiW~)ntX ͛>[s?2OC_@FVH?H=6,)!4<*P5#tҵhCMd|J=e BQ;|ttٸ' GԄ4{9|L(@zP-O1S`EV^u]UGy2\M޽̈́Sm႖A*虿7c5xJ~H,ռLTxvC00G18L SqM+ `ZDؼuy;Ae%@w*nb(JȤL]u~NpbA17__eΛyet. --!9ṴFkʘ܆!  o7AJ`1`-ϊ\s@[x1K 0džIb^WBQ-ע#veU5~Ojzg9BgCgegIܢxNJz4Z6۞$.h5ES‘Ͳ| ֲ}CzRmZ/Oa90[KMdeևh~rb*ٱ~qm;)cB'2gYy֝ YU.k3X}br|Ioj{W`+? p@8z)9o|߮o}NBFeC1k V .U9l2(dAWb:Hb EKڡ2ˏ =+ZD!5 JT?܁LZ>4K~ C̮5g 5^Ëd=@\>m,@oCVu(!B&%R;JHw>%焤,纶WXlJCZoɐXXE{ҽ? NVތRd"Gh>FZl+2--P k5f!ה}!/4ӂ|?B~0")u'+d{qx39F^򙐾(AV X9RdO>D=jjC}NmYB:331-%2pf ܤE7՜P=?χцg߅sU')-&#N$Zi f 9"}_32BMK}!bb)>wͳ$?O"[dT0ؖmB[6A`,j . 2B~{ZCz~sWingŲoZG ncT,s;֒>* Y8LUtyځo%Jk= U=a)jhH+UрU ~#hky<3 FHS|֮?tl@2i&=<)ϓ %gAOLl,PFDJ(:1$:Ô௑bAkϸ 4K\_3!#t^n N/ )^tb-#]KĦ^R;^_|}NqJF,*0KY2zK}ČH "ѽ#Z>Џ`ȟ eՓc2Ҧ#l)FėgJq EqO8P#>6ɳ#B0tM{F^b<\M1դ>_Ρ~`?9 C|"y*P={LPӜymڹoz & en8:%0ڸCQ9Px >VMٺ6}?:>^+.re>y61ᓯp`Q'}Dkf~z}$uF)q1z宄jRDx,UBEVn(IHd4oȖRpd-2(r1.fumk?iƮ/RcyV+uѻ| +%+A,/׷`6(IǞ8rS-rղ%y-҇Zَ_!#OEI5^F3,{̞T{: Rm[=߆zg<~E0N@P߮fˆ*%^fo%N]Y8sAH[c*V8 mk~RH6ī 3{m[b8M~(7,QzY*c>3k5Vݠ"B#D| |/r,F>nd.Q0jxKTjYL:/35QM yp` J𛂺Vgl,BkL@HA Ǜ#Mx+#kp`Əe!y4EV;FawN-le᥿{h ^tUa*:sÜélU.%Hḅ\,y-Ts2*{cc]i@VyhÑ A'8?k ۞ Q@g/dz2Y0Fצ YC XeA=Tgup!lr :Boaw\gL8No.c:oS,&R8(vEbO h/X xbB͐*\E+%O)>~09_,8Ct': 7QC{R:J=cUvv1R,q;G2S%LFc vGF'9, 84 !R@9RʱLF+m*1GV &9̸jF,ad&By0k@8㸔qQxvgoUQR&d]\ԈsP陪&\(`NS3icGw]i|G{i7@?[ ;HA]F+PycBJ*-hos,lDNY EN1j?|}7?>H@MM q=gLFk֭$%.ڜ yϛ ft );!3j ձsfB@=܌͘U=.9P9+M\s`D@Qg_hb1#2:Vgvw +Z&^yO(L5J*¡1Ey9v';7K: ⯔ybLz)B;|k)RfS< yds~g6ԋ@ɫ!L#L}($k=ND:O uύP uR#fz 2: zʳ凇1ʽġM(8(38~Xū;!o<%49Uvd]Z4z!vLC[\ؒ3ٷbC[r8D_.?7t@yTaCJ 4ߪECܭt: I+4hvw'#J2y)nSwit{Sj]~MjHJ% {BK_" KAOC45Lj`VzHZD Fhds{p8W<(__O|ⲶA?5(ksfqW:4wpSV\l}  Rݫz Qy>Qcm#Xz6ޥ*:3 |;HtFI{WXH>-Rz>bU l oEl3a?L ?jHM WmID_*2 $Sx"ۜ|,~qN< 2}m>B+GIuo/[vǾK~%˞ e`RG;栅ŌN r1FFz~fC"6/ `۰ } Du_PfʻW½w]ٟ!&Ά[RpmYeWUa]B+cu=K6TFޡ 0·{|4l׳{A Z;0֡pIO ftBwX|:P )mVCG?4qpLJ0oI0PI5W=慡F.eQ;= 45n㰖wj@v b->w/Rc?svKF>@-F`hA$_Ψ 9fɜHqu" BŕCMq@ *ttf-7&(Ws08fs )z`y.nOQ%ɉԹhsxi3>`W 7]+h?hu+ɾ'R9<˳cB.LF~yxtH(Bi_JĜ;E`ўlqĶWz.eO8Rc-ɿčJmJ.Ǒnv m:K#L'H톅`]wkq!Tp'O +j-R@p(0IՀ3(Czv-@Xp sBh?UOxO;*O1a&]r˒8Qok?QILxU$Yz+uw TVͤMN /Ju VD Ý/}C'ߔg{Q2KwY+0QgB.)BYq kQkYFg9386$Ԝ>, 2W{i<YE v1~'Xt: w:-;vKYPT~{jŔYzJ)6;b=`ޙ!֮b[vZB-#N xV3ܟUHy姍0]jCY&jm|2{6F|nM0a-^Udy3"A)p= W×O_HIMX5}w] TK")Sy?sO~Y)Vdk}Yņ[-Q90r. }RIpg/memhPi_Aunjw>5/~UG&,;tËKSúGayKgDdiXt`|U ] 4`l w`]Ab '>]Eqg##@ITH  Sh?g* ހ+Nz(mQj_MIb蠻;dXp=bXs\x ̞*xE)8;O&Q*hm9[Nm.iQ1v)3*S}x!1k/o _h8t7O85aH9B'a ƯT7j*"-ں}5gb#CgL΋D,)a_*RD )"(5GʥVZNۚ%U CLH4lB~iIO՚JT w摂s>Lz 1;]b.)d2 {VvwK'FKRy9d<-8eǣy Y-vYDZBre`#yENqd6t_Ф\gJWYACtU#ݟ7AᾷishA ~\'$7l CEA fBgɲ)+pTDth?TKXObtLo%ZOdQ 8&g~r8!A:餑=1ZI`5C??](ǯđOϵ&aH#-P)`{&jt$@"`fio͸*=Q h5)xv:ڽ++HPnkKVgVIL+Ul$eRF|Wvk4*|O6d<;d 1JױrEDD wΓv7}@}9 i4?tSfuԛÜ*Bԇ9#oѬX3j/M.2-D%4l'|DpP<*rkհմ&%:R98cZԓ~4|4` "W^}|;N.Qo85V ɬpeiNOHz.L ݸ6>Jp3)[֛.Z7p)]&m t34T 9Ԗ,/HeF=Q8Ea;g٬W-Mf콅*y~(! |_qH$q?4tt8u5Y"+%+6X(RMm 1KRܚhc_C9 YF;e<]R79ք>ti0dYCKOݾe:57OK`ͧ*M!:q+'p?pX[:qQ5ToL>K5L.L@9urzx=T?h5#HHN0MŵMiͳz|sEbfU7^sP>E < WYl;ia2^묩gZlnNNn/.fd[ nim%dӗ3vl%DĄ連Xݽ>$P0Lz6o9kTyf?[z_TZd|&v Ab%v"mq Y(.sj` %SN  N+" /3/^4y[Kr<72dcǹN[tO|:處q,z6d[﫰N)ʹ|ZA4| Nv_QG_qt*zKt-_KxZ[EG}q! hFVyz܁$`O8#rHW1?+ntnGߵ7I&z^ٷˀ^zx"ѴBǛ%rY]Gcq6KMTJ c\&̔iM ( lL/cinAp7ۊKE`$Pʋ 5ІbX̓ <~Nӑ,PObG{aÔ|Wn`SJc&Fy,e _l$9kSyMVͺ` 1] Ό3@*v>;!n\J]fc\2 gkXE,Qy.i_db(u&ݻnl彇ZÉU+K-Лe HmoWI)H"zoF3 wGg1hwKjwґi$ևCز|y>x ].6pOK;k!zhcT`C ¾$HJ~6^@*NfչNg-;r7\vzbF`> wX.i !ګOڷ/PŜ9K1A~fekAю*LdAVWq橋iQT{DcE@O7n*ki1LtMWmxDxSH adLŢr[enePFw?W0jj%Pc%P]0"Z& c |AaWs$8Ȼ"wN%#cets3Rs(sXR7UQBSZ~c!>DXD(_|۳o7"jJy<|ۥ̙WV*ca eYP[v 8KCP|jmEr0c?+j 8/W\_D!MeMQ<2ʪCOof!@4*Fz0b3\]XqĞMo62%$5kѹ𠲟RRm6E\b%U&8Ìnjx1Vjf[_8ۑF~XpBz[@d|m|`$OBSPFִ 뻀_X2?79~jȏm9$钇a{(ՇIP?|IJ˾!oA`9e mq=Vey:eo1OtrL 芫]65"w^>MqA-ѽFEs`1R_n\KKfpB5b\b8λYg G].KIXp)3{73J9"뼗P_n{+`0C\҃;aC mGHoiql:F%4h"&U; -܊тvѵDE4ou?EYCZ y9_(;x?W*мXcW{~=-8 Cp /3m#9J(:ܔ|Pʗ7 PE,VJ-FSXHHm fkK1Z.F8pwMl&;A|tx^cV#N`r=AJF0-j'f䮀X- ijzEEh|š7d֚V2:b_pȔsB^"F WM L?P22tAl!jhO1.J5c"%#m2N(%vsP~L_LYF Fia))*}w8R*^ lᾎ8%g7aKk=oo$o nr8Bz%EX9u q3Y͓gb`hdf<ⲣr'!V np-#uGqGre,dEqWQ6C3̻x񦾅V ;sByP&N"pv?$ָ8{VjBHAu4o}r([VXw_I^R햻HO-LmHq,Aί8H@z5S#&$,!P9w 3=$z2c)#,3z6>6&u@ \:zf_$E@"{2m>;IT W3+TyF[9J-%8K փGuXY?;EeFq+2g21 ,^,hT> 'M4XtsD5(>+ƒcdLycŢ;ʔWВ8kKSJ7ϩŻG(#Rza˛mͅ%L9%sqG7֟^g%Qeǐߖ7ie\^[jSUYn>gPs¶ݬ\TOh>Q-!m9yGT_wWܙSHI) |#Pdbq"08jS2?@FXe \!uNlEkHLhu-j?9_B|H~$w%P?c8&G}05{|vFڼSpe yz3T{5@pfTκRLiMBz\-"x ܸl]RAӱT+DG~sB9,76:pPtQԘfm{_9Rqr7%r{9&Ez+jqI:xȄ<.p?ⴱD6SnzIlQ*#tm_Qy/T@zv ?N|16ߊ& }0C-"B,Ю[&"r+}L>v+c\G! yi;qI+ Yc  os_Z?+GwYLGuIZG#};wLHic"@KV@$Q*N٨Y0Ph٥x]:0,&ޕ^#ƥ HCh>Ff)s`m5C<Pu8vMy/ގ%qvF2[=A<oxe`M${&!6FL]Κl;CbSv aly=u2t̤vLx>|ahBϫ&N ܹea_֪xPfއzDUuJX4{{}y+T8 tsFD]kPlWPs?Ž֓bfBeNMa] i&f0K659gKn^OO3 Z^O`#,H+Q*O|0m@YY0 wchk d#h{)e؏&^̢DG[v sS"q?g#Rn)Kuobx0J7{ pj\8FD SD]@V^1nn ƉH|Ly]d[_K-3hAUO^VdE^1g( ˡ*J1Z sS:U JΣ}M`H|Y=U!27zD<6# |F< b[VE Cyk}-#P Pደ}_v ה3tkW$d S _C;B3}{s~)%`|٠gghG2IF@ÏHd(ݵE9]k6PwmMח,L!п#(ȒN!?,ɩcoeGQΆkbXq}[$B@IoK::8K])mCA`cvLsӭS &1`-' O_T-ThQ8D_Eˋ;ꭸl`8$W? OjUT|8=l2}/9Ƈd]¨uS jl\//`j }I!* &J+~DPf ]R.JdR@wB83Up ?$w ;Bt&MLLVY#H#ٻe&+yڙ+D(a_emMסӊ{qï>d@6eo,` ]'LN/v]KỾxj»VswUOm'JrD&=>MýhOF2)$qQbHߺ&@Ӊ?kb^DzR*eL| 6&~1=f8O ԉ}`hmJ|A!u+x68jJ:cH ` e$Pz~RitzՐoD2cҥ ‘~5l'x) Md%“52?=!aKhYmr>5r"O!S9yALBnAδ(i^;5\aMG4V06KvBI@[}ؔ{s*&t[ GF&aފ8 cW>:"Hg~P챹@֎NŜg}uDF&Y^Bfb5)xK7 NXwMwKA0\*Sp‡,l3¶v &qJRj3 ץo1AO7a:?,S+[ԧ;S[XIz m*$ RbO~1D«J~B}bT2lE/>2m:q9m{KQ=]8pPS<`B3ǝ/F?d0}ϖsb pv8}awl#[f| ʇG^ݓ{?u1T\3E~fM5 N ֩v`+:b9zn]DvcD^3Y":Zټ#10J/(0ly.Џ8&(mKaS-HHKScӈKcAi܇%7 L{Ӱ{WE5 -=Wע])5LT9kຊ>A5 WůZ+'wJDhuy( FC\%S'~Nk~FL`ȑrpQv"azpV:t^i4W}8Wd=!$6ZP;iоJ~Gn׀sWlh>m3pgo3u^?֬e}̪V*'2D0 HiΏk 0_Tqj!:~)U %݋.u |^Z ] ^3~ver_Kأ5]MsU |}Dx~p6ɽfD(\Hη׹EH2U6O .tv A@?], qEdޅ Ïjj.9!?Jl! A?VRM=KXc2:o.7? ZV(hݓBOnk~Aǂ!! R5 %1 kZ-+;\yC{npAp\q* l;J v䦞`[ ⊖f".N 9&|C#9iR FkB.'|JC2!>i&Ơ}UrچnS?=mHLqVXg]U%π%PgG.@Ce=C#9b;Z̒ˎ8Φőڤ7k^ WHU`Hg@$bJ!ͩJH3Nywa9a ձFk-}W=X!y~B uf:V#w|fG kِ7+,%]MATMϒY&OJy^)Z)VGg61r @;Id:3vL- zF2'Bn:7صGqDf8~w^M!I?)o<n9^nnYX=)I"q$PJj+brL/CM<0DXFYf 706mŲo!iϳ?y([ hD}2HfḴi\XU :BwXU+%}pam-png3Pi_Ƥ!zڷ4-rH_e 4z:/8 {&Fԛ$D[7A\^_|H<'ҪRPw4'ٗ3KA'}osywoHh3-K0Çfx'WbITefmi*ΝU:YkHUHBy&h(F@>[Cgӭ>+N I+;`g GU ߓ\+ӔؕO]_䈟N+O' %5tҷpYf1d6&տ25K5$~y "mNd['{){ByNjvi/ڸp)(\/+J A\J7J$"VN=bdQ1ʷ:ߠHOz5Xܴx=Zj6,"O#u6Jqϥ^ Z HW#d)pѻG*>8w2Դ2{jҜpa՟U1c^ La5xo}AT G"Prh96]T0? a$0doIqďGB#ҿ`Icz0o<cZc̼\F!l/Y\c R!Czں q2͍8 B m]КM'Fm#I:p ywPV!SyS[c/cj1LpiRquo-cftJo9_C'2vrR7z3k/ G!~VQޕfY{ w"8]v42ѣf(N̉6XF ؎MػXa$6x:I(Z[{Z{j`lx;'7%1j@'R v5!rİ7&MNZ"AęFJ7M<Г9 ;#@*89G?.+88'uVxׯse1E?OWsqYuOTBbg"E5n DQr"Ϝ=vl8BppVbrQ̞()j3cPPwcjp+rj)itV->$.X.N[l?s\#Nt=&vPq9"} |5mP6ǠYׇ6q|#*~JCc\^C<9ȕ@ .aYa!W)]Y _Jގk#A38WGtI}k`R?Y~ZMjZҧgxiq}f %ߜX} 5B6a٩vPjոT-\`v'P^QFFְ͆ÖT 9=ڽ^j\RNke܂t t>0m[~=`ERܼ\_WI(DU>@6IEV1rw??c%[,r;Oy~[upO˲DuGÕU Թy΄,[G1W(?LX13hSܭYPTc9^ROcg-)C ?$AA@ug]D*:rm=L$:P.):~pf<,JͩgKd̓ލd)99jh7;ekl!тeT.D?&3c8bǪ[Rޏ`Br#I iOB>"a g:%><"E r`7+L)ӻ _[dzAw':E.KUU"o_u2KSgne}.hj*nC٘l,Uh^0K7thSp(Nq7 b' :4ܡWX:Jm{ϻ}ғ~ng"}G=t ^]ߚO3lE2 &J竓{skRwMD&@"[$?*i=v~ծ2bkJFeiez~h>N 3i0.%~Awr!ݧN:>HGSouQTj19\RWthEwo $eA.Wa d/5|@5xjIFto%w8_/ErqzJ-NrЏk&f;H_U>X5(:-O=#UL얢g1M]/ziKRkd&r*o8ryn|\M:KU#!f2ɃrpT(2a}1*Lh(:.MxM=<Ki]l u >3}}WǕ)?asbBKc.Pf`,{M/(㏄3|c^d'CfnF*&wWl4Ẉ~‡3챇~@ )3'2TLPZ$@kQ/I\LO}ÉNBbna=ty@вeg-6CsJw |`sY%W??PŦډu/#7R T:|.^k?,K:GCsXbsdFkFYQiꡳGބ_+=oȇzEAL('I.`vJns @pL3Tشo BM0طO Knx65zGbd5cv+hZ+X; qQJۣ,z+B .bG8-Chaґk3N>I#3!x>ֹV0TJ532Lw aؤqP*,;6x<5?"ğ:ǔ5&4{QaσP4ի޲)lH;ȿfV({k5 B]plɏCs$ EsdN#aWmîkfvf(qf#JqNƗ}+n[''6Gjݿm+pXbnlW]m{8Il֌RsC~iF9]D&2eR6Փx`-%9!VN,w}ObLt6qZ]>kvb,(‹gR|,3;L`]O}Ou4F*'^O5*F+0)%tol"qxbR Bby_ 5aox5ܒԎ6o}P5nPV|s/0E 5v2Tb197X!Kk45{<0AXRe49&nG B-dmG 3ӃBSTSk57֯aX[ʹqTŏ ) $r&~9 Q$4#AרuZa1+*.-{ WNJZ+P&B3GCpBk,0I"<!f.)\~2FaߨR! ՜ :|9-Ԭ)R!'&RC@D6JTؐPݷd௠0JŰ8cHOm(rҷȠb3,iHr-p@K6ޮZԧuofWف>oi^>4_R8y-B*&8,ǫV֌u ]ϱh#omrϤ8# :?d97*?u=d;ZD&-:7.~L+=[>t¯#d\^U˔0ݎ6SW@`;,%/7$#@0ѯ2]Oi[:gbɧ1KEъaeFAq63b3G^)\{*g/7镜U;KOY؄`+*HKJ7+@ܗ#nbQ #2OW9'0 ]RIѻ]c5fAS`Ѹ;Q]H=oyM !+LZ +s[5 Hg؂ yL4989fd fw#`$ʮ{ZF&#h܋bd5nL;+FZ|Mu:1V'to'a#{ 8$QRwA=; *9)+;8_#T]1qBC.Pq@s]z]1De%&š$ ͒^φpZ?$]ǧF*] B"oA[d1P؄>DAҞSH ؾQ-7VgBM8գcCTKMIwO۰3#NNج9 ]˞3p'-; 0uZE>O҇Tm "~] K02\{qnkU`n6ā &uB~|( 6V҂|D4lsD^ @* L}ADN<ՂfN']cЃr18.h]XŐn o%,2edthdZP x'F-M.jO Wڄ JJ8'Y橼X@GόHk4MnZJr (ʏ& YqWKB  -I0,xyW|1-?cCJ5uvPf䯴rp~M:sڒ=aON:bP mTOAi#ځy;$xSt [ug,g= Ҥ7a]㷐=}(KX„N!>}[)ouf 6nbdQ4sQߺ8I)QpƻGmNAC-4N#X{:k2gbYj+ƍ\ԎW}xQ?Sшږ_GJ;e:5>)[aMI!ri /^`#pwY;՜BX k0sRs(/.#7Y^EGI|(h): 1nxDJ,|)fr? tyTfr7$=DbU26Lq-(3zn]plNNd]aȴޟ3 q7bcGkRxeǹ"O]#*o>&tX {%FBpN]A5I$dGosQIǸ+%ik}|g{:&H99%\ү[mXJ[+6LY|MAx,"xy_aVow ߜW{شjN^oAةf'D4*Iⷠ^w/,GNtjʘIoD[M#*&7IDY3}ğZL /:0x!HG!DSJ:flp߮l mvw &g  d{ffeGD耿Ykr3S"Plm$OoMe9;|v4ahnMP>o@Y%?/eh,f2KbO˵g\~olI=p2Dw#GkfOZVl 2wNV/R&j+W8Fs52TS:I\4bɝ*!\/Di%ֲt+/d}ta %#cK oa ; ïpOڏB o_@2EIU Q%>C~# &&)UTgH_}K?Gd(^ O֍ʒgɄy=F ,yIFgx{Ri|)xQ`Mkgu"ͽp@j]>?Y\= l>)s}vHupWiODk& U"a&݁}mV}HÒ*}"\ޭcG2r %㻍 U"c7毎$ DlQ?1iFqW8*½: <j(~^7*s'?:f^ ݷ@ޥ(J%>&6uL]zn#z H=Fi "P7Q_]^OXp_ٲ[KV ݹŷbѭthf@ hY(Ҷ:$(> P= ]v2(<-A E\n|anM}ue&/߬".?%$޴(%PW75j1nq$=$HUOXw*3I[xbvDQIJ<řS|C:s<͠z}_3oPնr*% »RP2餔5X(uYL 1A},O ܎L.7;JVE? $ZSoFmih䊃!Ru:aaЭP1G}aӿjfq'r@jQBbI&ŏ뀱@*EѬkbGC"`w .Z 5:=H}t`hcL>̏m"AC%v sA]Kr\nxUڲ$@t(sMyK;Y|=L6շ'64)7jdAEDAҖݱpu@yę`Hmt>bah.G;R;Xʆ,|쯐uf*)09pж^D/Rt4@T YvHoZ|>5-}@79p=2H5cG9o2Ga"fa<)[uHFeh.s. m_}Ğ_7>GR7WOn28se7Q44q$ 2l')*J GT$h ^ZQ@ΗPjkǎzz41,1TzQ!Q嘉%BC <"r3qzYBOW8( 2B-1޾^g) cj{,6^ޙgj&AcWNdJ4` 2ר$lXQsVa\&;@i*;FT]51 tsfN**&( CuZ<0lR@`!j8@`DH}z ]?殮i a(COu7N%@w6IToUYOaT2M,tKٕZOCgMGٷW/ٝ|d0}GS@U[뵺cx++ޅ TAeƞ+Ʃ0Y٫)3MLof{eegb ](-xkċ˩R\L=4~q08X,vHj V v=FLΖ^Z!q˄ oxfRA6Mj_wx[ vZj৚-xTPV⬭h}S{tQK[E 8ۣw;Qnu~eG2E^ :޸w[hFp/  Eʶ3<]YLHÎ;TgDڿ;YB͔~^ZDT0Eaۘڊ9zrr!Iz vazHz |h-.I_,0I9x  󽹇1(IэF+^C2) 96`DGg6LJ}.Tդ'dTYRMami}) ,ăhvU("S=/[w4{}U֥=[jMq5Z.KC+ljݢAԏUD|?,>b-fpk ~jI{K{'O$A_i#3hK:3L3!)l@E9Y j/$RXԉ{4ltŕ;1E}x @FĀZjS:MSy~uYOY~P\}HJ¶rB5%"{'2HPR/ϻ܋x/Q>/Y^mKㆻ #+M24a4b|Ȟq{EWf?[@^ODϘohP@Ks nS<> $/Dzvt_ƇLCyا\3_ؕ,o]њ-x"QXDWHqeKy"j5BJGZ!ѣwFqy(j|qY(F8wqxh﷿/H ^¬ŇxQʃ;Z[FM]37|CB|PC /`r9t|6Y8r8,]T7IB_`|қZ|U\svmJCXm lқs nc94{UGӡ;fx|$_ ѻ]6VI"Yߪ]AFq`xaXƗ|n edJkHFN;`$ 䐯i0>̯ջ!X|vHvDS2xR &#G n)\1M*6d#Q0r Z0:M|mj2m1!eva%nTzrF229Mg Nf { D8t )R2yfFMĪ9}EJSyq€qw vЦP I>`2a q6-ߐAC/ۙuP{(!* U@2Bi ۥ!Z.KeKEru@kē]{HktYMq*͘Yw_d9۟x3wLWP#[ ͉#rN%ж ErwrWl߫_zW}EWXRֻtc%Hwt׸ k~+p!~ӓ#{c [Á:tct?ʞW>V.y<,+Y9a:l>+#kƕR=<[ސ'gHc6 qM#ss޾$Kƌ;a y@9O/",o?9|oE`ag|@7EI%AjL]0iZΏ7i5ڂ* ՈCBS/ /+_ƹx'[=#m=ic A֡ ʩ@ N#G8EY0LC}Ibb=nmu1m! pg*|,(ydPg@b{2> E~Յ=ȶ%j8qU6ӺMOSh Cc%=+&F@ ypymW Ty?6C"JպуG"/qUsFb7ix)weV>g%ySG-El87HUiя٪f,ֱ>{g*|l+*A>FlΙMY=}ZؖR/t +J[Z`N*oZϵtu tO),#oF٤e'^_<$~qA/?&,1]KZ'~hb=C\kNF: ;۾8a*_ږ:-qzgu;.U"[bÀ$3[o3Ƣ|F/,$80qYjhaޱh7MRW]!>bӈѐ81Sl M(DN }vg;%Oq+k~ ;VgMvsIso$ZC趸@[8;ˆMj@,|X|lb5 oܢ{a @* {/*d $ov^$כ{*RYu5~ipKs qv}83Oa׸֞d!u S}ǥP.y&&1ǝlQ*y!.ܜ7nDj"J#S 8cAo}͂x)`1 9~9 p +^K!5ύ q""/2ʈ[pڙ ; 9@pmFLG̭t'mGIDxK6:OIeW!?#DcL)byOtlVWkH|RTx ]ְ(Q\{D-hxNe:uP+|p[˧jF'+ּ<:*z"󂲗] >063DmO }…R%T fi؆y5g8(.O*rICsǍnI^QOs|) HHJzwv-U`aZSaΝ)ٳ OoP@|!"|kGB2{}h(Q9v~YW#cc7$PejJCf^r bSlklۼ>.<]g8TB` 6 xCYB2FlV]m/S_ϠC;0>7^k*.`{}zM{~EK)p.a'5,{KjĨ)`pOt#d1$[D ǰRi7pQ1%AZ{5f襯^U} 5[Βm&!"U,sCMO9] }}漢3QH;Y X@[$[9<*0)C#O7\-+g 9s0C܁mm4'jw)P zWmTKϧ_P z*)TU\3Ԝ8%!P%)FJ*#MuO)_鐣zHa^v\q净}?di>l5Y F2D(\f$'K9P?d hh;f\+Š2J"°q"'$L^'(g+3=f )@ui۝NmÄz㮣TGZcO|}fd|x~pds]RXVqMd4Z2 Ϙ*ܰ1VJ|m/\ˀ A0Ȇdv"I˘L2aPU_$$Kf?Iw3'Iz+ڛa6kuRXBTڽu ^-e?A+<"Kf q=PCk (k kO u^\A ᯙ{t-Oryj:?mKs8#dNsJzKnARv7 _,SłL.?dqb^ ެ̀ջ6nB"q )ڕ= tON-zLe_ B0V&{4g~֢Kؒ5!d S}8g.ɽidJepR+h($NT 91ޛnMu=oa53v{wU?+Vm֛ .1 ؎<؋7jJ@ys ױ?tCBAcy0 @-3)+}N $27]5~T+x(Ŀ2˞{`bMOc*t4S?i }QZx Ɏd@+/[ _Pk<{70f:}l0xx7 ԾD%[W`' kZ&$h9*)eqZv`Z:ڊ@">qy/uߋ%: Tc=qנQy 5ƙ#W\T T:T3l!Ќ6HȊnЩTz!DhE٫ _G iM2  D)?|;8t ĭFL::v%6B d3PZ!egѬ!7@{ @,}5`m3># w3{nބfq\eS\nߎjfMb&nMEz+W;T\k LXC!jDct<툞o鄬pqX7\'Y D~!Ss=0?%$ wT-22&70- F/adÆ[Ţ.26JCQ):Ф%Cc|)e釂Y=g kD:OPB(%}Rϻڙ#VzV2s7n?ka*?#;.z`9c"?i,2yMi0Q D-"|Ė5\~uŒ'C83ڛg6Q망߾F2?KI2\F9Ɍ1Y{ =4Ң.yPHAv>NIrDeP9[䝔![:^S|7`zρ}'s>Kk[,w pʖ!;#~&NXcϬku:x !4eUMNb(L,V")ل>f_ s0F(+O{Y "opU![i"^cp۫S|K`:+ ~8\dUM(^e;qgltTΒ2~> EhE_p" z3Fre_wty A[p)q.oy jaq&~=KY9J28G&I~^?W{)"F$'?ZR GV枻Mjq.\ d˩G<[kěg 1,;7ur^ڂ1CxbI{x 2=NAJZNM,~x8ehAB` oSX"/.WToQo"}1F> vp!?L8i)X{@~5T1$C|/Jh!Xfu?)HzًI`X|{+YrOjB!.:xjR7$XܰFi#rlZHIrJ\EԜ)şBNp:^7W XS!/7tg)7bŷ|UDDC}!a4A5L?Q@`DU1zeM~qfaN񥖏Hx eѣ=ED 1+@XMj`jR',:= Zb{82B֪. B,#\AnO߿axi6j#3w{rF4Yo v N/Yzd#`ՇZ4U'Fck4G4m=d*OF2G`dSqY#A"0BPgg(ϱ 57G^%~U VIR1 qJ5;J;L8rH3iDzsumCi^ lx& #qJt'96Ԇ~ {M -nkv,)¥qx(OznpE|tCsH7nǖb@8F/i )'9tq|%m!Cr /70kc9j6Ȃ[Ꞩu?R8PrھaӹI4}rsQ03^N$PIPF$pd"Zr85J/u̵Ű66@ slB!!Gaχ$fbچ44Z]U-Xn0}ۼ>#+[[gg)&Dl|;uOكk՛ΉKZÅo*k=f[)&0rrG4F`KbsSdK%IQ{)#>pqܣ]UruJ\pЯ t}UJ 䵶ޫڦyJg@(I@[3NX.r{7 P6(mKmlKaWK3Fd[5{{}B"h -+i ~'{?)׃Cf^P~?Rn?}#7;TCI Cp Yy @;vgx['TNJP0P?- Xp(^X`>QJt򦧖U3ZȶiID4})qJjE1fk$d<[;ƻRxGnPbWh&'kF?\ǦZ ʙdzئ*i?6]oA+%]'uʜݙt֑gQUDfpwdHX-WͧawEL 0# cLd\rKf6p #IZ۫S^3Λ"k Vuyb>="1݅ؿuIhK7 l`n:~s J F9]Iu+YQ#];w1crBb= ,ɲ7-%{]8bEh.m坰(c1֮_Z7ߌDkӘbQ<`:W{Xp/Diwrja0ҍ4)|2zwYMLd@H]ꕢȡ~rI9%\9 UAKgs&bӷ驍@yYBm1C;ޓ uᐑ+:R$5aFUŅDf'jD5DW,gX1S_FaGZTRO Y]pEw#`s`Ch68o9zπtqX]l!+F+Zׇ#2]%џ%a~N8": V.f_OFI2v騷>UVOҵn7qcDC'x_K1 MsR%%gXG~!EU4BɢMׁ5xWjYSlʭlx"Ily%[`EIò6 reX}Vr&W5ְ8t8,xGI+Ur*E LV|9>ƒ[ΫOX-{ѠC悶(MwBQV͟F~lR" qpb` nY㽖?JMSbg0]B=@ }Q^ot=*S,\\ӹΒ^%FNn Q|>6Xv%G~D;2lOa7GQPL1VL#WW:Ҁq=&]ne3Q!"Skϼ08qRG]qh,2Zp)&mQPa`f!Ȯ'*8Ӭ[nʶL{7kn|^M땖XUր+kX^@>,pECwӁ$Џ@#8B].l7Φ\l8y U>Mк, 9܄)/փogg,}=\ŏLZpć $]syQE SsÊ1zbCXim!W[*DDtGPq,X/tS!BƄ>+f21j[k%i";yOWGU^S7z-awB(|Sߟə)a7:tHMJGrZD}>"mT'XMfRKڽZ鬆'5,I.ЂW=z)e,6 R޽$,ӗ杴Xai 0?ģd~2p\Po .z2EúB˔YCc}b|u- "yp씾)H`$Bf$7Eknm>&nAv{6hCҕnf~)>Pf{{bCA0-v}J^?T?犦a>zmt*/ü630>`O(^*Ry`FRK~vEmV[5|ы[mA @>jO'G#leqj\B/hGY /9j:Q싺U\ќ>1[~u4Hט(\0(v}7mB fM~>b4ҋ \rӆ\}Ԡȓf`8p,A!/##Qfa,W ]}`zc#2eެZ&D/M_cҥԤhLO>m-GǦ[{]kCC'-lVt$Rw\&z|#vU=Q#vf`dD嗙LWT z \&TS׈T>ֿO$B5lݩ]B bV̧ gٰhRFp(xoQ6{ӐxiV  *ݔ7rg~AvPFl`qmďbsJ3sg~pIz5'c{KtukgSʵ 8~,H֞}'iF_"nj_=BxKae) uEVS5. }70ӶM|UN\y]kX~njS8).Zzr1~閿|62,yً 0x(zQQSW@-ƓzPN2Z$ +l+cY>Te!.n,'9"|F/!tg7ٺYֻZ_Xeol#IsZ^ ˝Z PߋSVDf%c=aK QV~G KSҏ,4v֪+8F4/5't,`r^A&&z< G/d{HdP *MƗ$:&NXz8t)@, pBrRdh4އoĈ5_Pxt>DE\dt*['˸ w{y5.yi05đ }t\M\K[}ɺ*7~;>ۡf 143ۡ Qgreb0jf*Q/jl!qx"G )yvN!519:}~]6೒y*K֗HID;S:XV#${te1 f5HIDh/rj8uFR6.)B[fNSHצxQF ~7hLxO@&6U&>HHS+T>E^ShE$]V90QLH+SH82#|o+mwlosLʆ*a!MI=`uN2H kѭ4EXկm&" :]4dϹ<$J< ZªD`HhzHQޏϋ{^.@悍fr@寄QVV P9eJi|iQ[TqlGqB\ oLHmyZ5cQIɼjgz#rN:vM5rɿwIgj3ߋ%k|옺NU`auYXM2H\SQ'*}V\;so$e>6q'j2nAiBM܍fy8'7p o(q̧HK&*Ѡi O~ޠۡkJoI^CGzKcv\ v o5][YI ͕g\-1rI܀q;V=4]1$^o}N2ށDF_QZyNP~9HT lqPx?hwte]avJ)6Ona/9zwn;]s20q{&5^7rXūbɡo_D6] )h G`TG ??s @%11fN9`W 芄a (eMus|]QNQ-|R4$;>>r=yRUJdzH×#ҚiMibe雰]ved9p>Pl,K.PEp 4쓝ٖRt꙰ES sjYѥ!W ;Idu3 DEw9lgjÐsD0qD2j4vHcI8P5.w볟A04O]!XےfCB!^0tqöM |S̳&$QkHYcOXE$ (P5A(8#L߲ȼ:ߢB+JM.=RL9 Er\].&SvE.{DT!}9,Ϗ?|$f@XN9`A!&'|Z5.8拲d:܌$Y2\ Tş'T0в ԽKU5?Egǟhg󕿷iFy5e9,SLt!Fe͔cH7CaPHWK|~o JFF;(c{[sosV?̮o|/fK& 8VCAil)I d3w8 % CI_WmǀWJ%1AI3+hxH(JCz_ \cN 2N*qhĀ53b>X7sۡs4݆TN s\4jMJ,hNgȠ#u^O R_zvc AQ0 m2LE0]:~B9"p\XfNPЊ[옾+e`Dh83;EP"m*tZVe0pdnP]gPOE06Je}cpYq)5>!W#uCf@%cNt~hDcf.=f[H9NpzXlxȌt/0fg3ԯ-Kg(Yuߎ 隹~ 6rjag<>c S8܏z "Z-`kЅBcU?n* @VWO MC}4;l׳:cu>)ȡzV:r$2>0~n>ǍʁI%Fywkܿ7O:g#mލ>N HߞC{%/_((R,mek=9;>ۺ8 G-熻*W./|#Z<=kh?V[WݡfkZ'B2-XD UVd>n:j,Y`udGߑMNҊc+ ='M_v%᤽F/i8]탯_"qtZqXGҟ륦@ 9||ڶw3݃?=~50h5ȵǥ?rIˌp]9,3LJ*'3GǽL YzE8;E!_0#Wڐc LPˊrY(o}1|X^܈#!M:r X R@(6:~ "հmFk~kc=2LYCVsI@Ä s kki$֘!-];\bvI̾ʝhٙk-։$K{5K-T)jf^?Qy?ʹQ ?Xxt8#ƨVo7ZG2mTٵH_ kQ|XIMQXQY\GI7un \ } >4oQQeb1U8~o}0I'XZԫ LlUa 8Yb*[H%& ?X٫|= 8R+^wKSrݥX9x/yc*Dsnlc}dq }; ϰB7*v1VLNe$(X`뎖bވx 5_4>H` ^$&bE `ufQ`8gqF.9HAVw@(W0&6WQ(@1Q\̍mF~ [^Ik!||p<\Ab|B8>ԭ9e6qIۼjεN9]Ss=u:^R[y~jMF-, VnMg:50,{lSz#v{1+th|9/QWR4`Q աf(lS~8Nᫎ׈, hq̊df#MZv#@TEazx,FenZl3e6(nZ"_s#Zj= $\ӿo,ȏrcRDeH_Eg{Buk&Y(#x!#V 8#4ܸĪkr4k94q>fc-Q,M#3wHDl sd 6]|N=sP ri)0ib^(Ll_GKiΜ,#c?VCmԊVeg۪|q/fٴ/ݎFS'e#Lpl#\ѹP%2阶w$6Ҝ̷fj&W;Fگ{41Ϧ=|EùzvC1xm$ꞺRa7V$>3zzB[< qB -  lԖ{aҬϟ g,Q$Y%+#._sq;ݿ4'lf;pZKe>;ѣˎܲHGr+&d˲. 6l8]FJz[wqz_>&X T19kGQY AnjTQR O@O98QX'v6MT9rNEML<AJ\ kW ܥt葛)12"9h#$ U;Wj!y aiU<c!s8hse4jZ|q#90ڞ=1!+&U ),ZGxRž/Cytq],I 'pG'a}s嘞~Ef,QK ]߆vVn0u m6:G!s; a0U1jN&Y"ﹳ L`\eCsD:Cnq)1yi>5H T%ָ3v|GX eY-/;rq9($50X*)K 9c8MEXkˡi!YpDjw`%yP胬~Eܔwg(஠#fC}U-XK#wj:u->CՓ-< /j/h~HESPIPK@pbW{P#$E_0,GW&Ar`-Ƕs3 6bCAlNH9ĢuPV@\k[X<\y7^YF_EvF]m.<8%'t]jG}ŝY1S-w#%h[#>%fPSYBvܧڨY'-Z{L ^c.LjbTfy(52ٲVH跺茂c+𪺫 ~=v<`I=8o1"*/JFɶ4w)07Om/Y hKXSk*RnXAmM;dQήa9yZw؝NpN.r"nƹxh ?w3{{̒5lr~fV\@Gz:gS0.ʁ6.~B@u(9d(]xFT:'] \bMg#A H/na^ߵѰ|)qܖP.RGh }lكq*ً|aX9=4OV˧7Q*&?LGgz(87OqHibށ5#hT`+}؉tQ EBOgr.?$Jk5f-/.ZE] ueX,9]Klx.?bfݲ A3!W E`vщyRr|%pT< ZC(^x],Y6ayEjV<ĨƉFqRq8g.wC k$=7ZS\f =K"^K8P$^rotVD5p49s:.ju3I6v>iVP \2cHI[3>!CSu!lQ#yl[^"QᕎϪbVQ!};BN@{{R'xm'xj4(O3f|QȭpȽ%)X£w+YC]$.F<6āA `m] )A=ǧ\ĖuQ/5YRN2@ I,Goj6jD`H~&騣2 ǰ߽\yv.n@-Tz0'>p0k۹T$(2GQD;v`xl<㛜C[2®Ҳ <3CiråhBPz8HϜw`!qإz'|mP~nØg7wNm~.-yҡڝ1-7GDQ*@)~uL V& \t& ~3)y:Mp8BC=P5Ƽ:"yTVy[,u50aKvZJGJ;d7Xl?U [H:Y"7#G(1dٻl[,R0KH" Qq% =Xjjf҆Q@HwC\93QlE 1Oț':4 E1RP$|A'ȋ{u.v[0u/~ۜgV%ěOy;\! {ٯfSV{cܯk$t|lìdZ%(s02Ehw@d)>kٛvg%×Ɠ3x} 41W`쑵T.rőNb E>'7ˊNg)u:G zW M +մk/N7]SxTB]ئfba6OU OD p]ס,(p]OIO9l?+ : HTʡ{#r|bu̇CSt)BCiL(3 _#]pKW#_a=u:e&$|75  7Ǥͺ>FPZvMeA,\;%"wІ8%[ SZCKF~F!ZUNr؝a?3YɠMEK~Y.쭖ӘK*{8b$b De.Q1\FPo=EZmɷyh/ouqT9f J$=;}|!z{e?LVWi{^ē q>/R$*jc3x1e!qvhi@corZܕ7^2 tπA.R+8Fýņ-sԆ֥dnFc;i'w/OWRN+oaFo_aP)y/lm*hi'X\i_`,.2Gx/V%tGnQ(C$9MMwܠ&?M)tm>p:߳AN9T/G~MMڳ16m $o =k6 c1p>.֭ MG /lX pnb߭`Xjwq~}d8\0@9f2ol[q޿/?JX{nFAZb2AKM}34s)c@nu;5QɓZz5wb7fCz(V" 8ɑl4:μK/`uyUA>npڎo1 qS {a]J]̱sN}['tE5eĥVԴGlՉ \Cn(Sl?!m ^^"(׏99p_SXb6J ^ GU{ X@I1nRUڦ^k$H֭}^UMpilVE+c FPĖ/?x෧ Od&L%S,47z3YȾhQ!."<D0h{-KG$Q%A6(ؚ^Chkr B]>I`̶VYсbIʌP5y$:$;$btcM Wy{c