From 192c0f5dea648097c6c2191e67f2622ba2acb6a2 Mon Sep 17 00:00:00 2001 From: Lee Rowlands <lee.rowlands@previousnext.com.au> Date: Fri, 22 Mar 2024 10:21:02 +1000 Subject: [PATCH] Revert "Issue #3370946 by kunal.sachdev, lauriii, tim.plunkett, omkar.podey, alexpott, ckrina, smustgrave, larowlan, rkoller, hooroomoo, duadua: Page title should contextualize the local navigation" This reverts commit ad606a8fb7eed1c59f5b28af8cc19e14cf6fb5ed. --- core/core.services.yml | 8 - core/includes/theme.inc | 30 +-- .../Block/Plugin/Block/PageTitleBlock.php | 145 +---------- .../Controller/BaseRouteTitleResolver.php | 68 ----- .../lib/Drupal/Core/Menu/LocalTaskManager.php | 133 ++++------ .../Core/Menu/LocalTaskManagerInterface.php | 11 - .../Drupal/Core/Utility/RequestGenerator.php | 77 ------ core/modules/block/block.post_update.php | 19 -- .../src/Functional/PageTitleBlockTest.php | 175 ------------- .../Update/BlockTitleUpdateTest.php | 57 ----- .../src/Functional/BlockContentListTest.php | 2 +- .../Functional/BlockContentListViewsTest.php | 2 +- .../tests/src/Functional/FieldUIRouteTest.php | 10 +- .../src/Functional/LayoutBuilderTest.php | 6 +- .../system/config/schema/system.schema.yml | 8 - .../system/src/PathBasedBreadcrumbBuilder.php | 133 ++++++---- core/modules/system/system.services.yml | 2 +- .../src/Functional/Module/UninstallTest.php | 4 +- .../PathBasedBreadcrumbBuilderTest.php | 55 ++--- .../install/block.block.umami_page_title.yml | 1 - .../install/block.block.stark_page_title.yml | 1 - ...sting_theme_optional_blocks_page_title.yml | 1 - .../KernelTests/Config/Schema/MappingTest.php | 3 - .../Core/Utility/RequestGeneratorTest.php | 163 ------------ .../config_install/multilingual.tar.gz | 233 ++++++++---------- .../testing_config_install.tar.gz | 4 +- .../optional/block.block.claro_page_title.yml | 1 - .../block.block.olivero_page_title.yml | 1 - 28 files changed, 286 insertions(+), 1067 deletions(-) delete mode 100644 core/lib/Drupal/Core/Controller/BaseRouteTitleResolver.php delete mode 100644 core/lib/Drupal/Core/Utility/RequestGenerator.php delete mode 100644 core/modules/block/tests/src/Functional/PageTitleBlockTest.php delete mode 100644 core/modules/block/tests/src/Functional/Update/BlockTitleUpdateTest.php delete mode 100644 core/tests/Drupal/Tests/Core/Utility/RequestGeneratorTest.php diff --git a/core/core.services.yml b/core/core.services.yml index 1272400dbfe9..d5482e4fa1c9 100644 --- a/core/core.services.yml +++ b/core/core.services.yml @@ -1077,14 +1077,6 @@ services: class: Drupal\Core\Utility\LinkGenerator arguments: ['@url_generator', '@module_handler', '@renderer'] Drupal\Core\Utility\LinkGeneratorInterface: '@link_generator' - request_generator: - class: Drupal\Core\Utility\RequestGenerator - arguments: ['@path_processor_manager', '@path.current', '@router'] - Drupal\Core\Utility\RequestGenerator: '@request_generator' - base_route_title_resolver: - class: Drupal\Core\Controller\BaseRouteTitleResolver - arguments: ['@url_generator', '@title_resolver', '@plugin.manager.menu.local_task', '@router.route_provider', '@request_generator'] - Drupal\Core\Utility\BaseRouteTitleResolver: '@base_route_title_resolver' router: class: Drupal\Core\Routing\AccessAwareRouter arguments: ['@router.no_access_checks', '@access_manager', '@current_user'] diff --git a/core/includes/theme.inc b/core/includes/theme.inc index bb5c1388bf1c..f9a6f37adeb7 100644 --- a/core/includes/theme.inc +++ b/core/includes/theme.inc @@ -1319,31 +1319,11 @@ function template_preprocess_html(&$variables) { $variables['page']['#title'] = (string) \Drupal::service('renderer')->render($variables['page']['#title']); } if (!empty($variables['page']['#title'])) { - $head_title = []; - - // Marking the title as safe since it has had the tags stripped. - $head_title['title'] = Markup::create(trim(strip_tags($variables['page']['#title']))); - - $maintenance_mode = defined('MAINTENANCE_MODE') || \Drupal::state()->get('system.maintenance_mode'); - $is_admin_route = (bool) \Drupal::routeMatch()->getRouteObject()?->getOption('_admin_route'); - if (!$maintenance_mode && $is_admin_route) { - $base_route_title = \Drupal::service('base_route_title_resolver')->getTitle(\Drupal::requestStack()->getCurrentRequest(), \Drupal::routeMatch()->getRouteObject()); - if (is_array($base_route_title)) { - $base_route_title = (string) \Drupal::service('renderer')->render($base_route_title); - } - if ($base_route_title) { - // Marking the title as safe since it has had the tags stripped. - $base_route_title = Markup::create(trim(strip_tags($base_route_title))); - - // If the base route title is not the same as the current title, append it - // to the head title. - if ((string) $base_route_title !== (string) $head_title['title']) { - $head_title['base_route_title'] = $base_route_title; - } - } - } - - $head_title['name'] = $site_config->get('name'); + $head_title = [ + // Marking the title as safe since it has had the tags stripped. + 'title' => Markup::create(trim(strip_tags($variables['page']['#title']))), + 'name' => $site_config->get('name'), + ]; } // @todo Remove once views is not bypassing the view subscriber anymore. // @see https://www.drupal.org/node/2068471 diff --git a/core/lib/Drupal/Core/Block/Plugin/Block/PageTitleBlock.php b/core/lib/Drupal/Core/Block/Plugin/Block/PageTitleBlock.php index 1b5cc9a010ea..2689acae4a3a 100644 --- a/core/lib/Drupal/Core/Block/Plugin/Block/PageTitleBlock.php +++ b/core/lib/Drupal/Core/Block/Plugin/Block/PageTitleBlock.php @@ -2,15 +2,9 @@ namespace Drupal\Core\Block\Plugin\Block; -use Symfony\Component\DependencyInjection\ContainerInterface; use Drupal\Core\Block\Attribute\Block; use Drupal\Core\Block\BlockBase; use Drupal\Core\Block\TitleBlockPluginInterface; -use Drupal\Core\Controller\TitleResolverInterface; -use Drupal\Core\Form\FormStateInterface; -use Drupal\Core\Plugin\ContainerFactoryPluginInterface; -use Drupal\Core\Routing\RouteMatchInterface; -use Symfony\Component\HttpFoundation\RequestStack; use Drupal\Core\StringTranslation\TranslatableMarkup; /** @@ -23,7 +17,7 @@ 'settings_tray' => FALSE, ] )] -class PageTitleBlock extends BlockBase implements TitleBlockPluginInterface, ContainerFactoryPluginInterface { +class PageTitleBlock extends BlockBase implements TitleBlockPluginInterface { /** * The page title: a string (plain title) or a render array (formatted title). @@ -32,58 +26,6 @@ class PageTitleBlock extends BlockBase implements TitleBlockPluginInterface, Con */ protected $title = ''; - /** - * Constructs a new PageTitleBlock. - * - * @param array $configuration - * A configuration array containing information about the plugin instance. - * @param string $plugin_id - * The plugin ID for the plugin instance. - * @param mixed $plugin_definition - * The plugin implementation definition. - * @param \Drupal\Core\Controller\TitleResolverInterface|null $titleResolver - * The title resolver. - * @param \Drupal\Core\Routing\RouteMatchInterface|null $routeMatch - * The route match. - * @param \Symfony\Component\HttpFoundation\RequestStack|null $requestStack - * The request stack. - * @param \Drupal\Core\Controller\TitleResolverInterface|null $baseRouteTitleResolver - * The base route title resolver. - */ - public function __construct( - array $configuration, - $plugin_id, - $plugin_definition, - protected ?TitleResolverInterface $titleResolver, - protected ?RouteMatchInterface $routeMatch, - protected ?RequestStack $requestStack, - protected ?TitleResolverInterface $baseRouteTitleResolver, - ) { - parent::__construct($configuration, $plugin_id, $plugin_definition); - if (!$this->titleResolver || !$this->routeMatch || !$this->requestStack || !$this->baseRouteTitleResolver) { - @trigger_error('Calling PageTitleBlock::__construct() without the $titleResolver, $routeMatch, $requestStack, and $baseRouteTitleResolver arguments is deprecated in drupal:10.3.0 and will be required in drupal:11.0.0. See https://www.drupal.org/node/3397210', E_USER_DEPRECATED); - $this->titleResolver = \Drupal::service('title_resolver'); - $this->routeMatch = \Drupal::service('current_route_match'); - $this->requestStack = \Drupal::service('request_stack'); - $this->baseRouteTitleResolver = \Drupal::service('base_route_title_resolver'); - } - } - - /** - * {@inheritdoc} - */ - public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition): static { - return new static( - $configuration, - $plugin_id, - $plugin_definition, - $container->get('title_resolver'), - $container->get('current_route_match'), - $container->get('request_stack'), - $container->get('base_route_title_resolver'), - ); - } - /** * {@inheritdoc} */ @@ -96,98 +38,17 @@ public function setTitle($title) { * {@inheritdoc} */ public function defaultConfiguration() { - return [ - 'label_display' => FALSE, - 'base_route_title' => FALSE, - ]; + return ['label_display' => FALSE]; } /** * {@inheritdoc} */ public function build() { - $title = $this->title; - if ($this->configuration['base_route_title']) { - $base_route_title = $this->getTitleBasedOnBaseRoute(); - if (!is_null($base_route_title)) { - $title = $base_route_title; - } - } return [ '#type' => 'page_title', - '#title' => $title, - ]; - } - - /** - * {@inheritdoc} - */ - public function blockForm($form, FormStateInterface $form_state) : array { - $form['base_route_title'] = [ - '#type' => 'radios', - '#title' => $this->t('Title to be displayed'), - '#options' => [ - 0 => $this->t('Current page title'), - 1 => $this->t('Section page title'), - ], - '#default_value' => (int) $this->configuration['base_route_title'], - '#description' => $this->t('Choose whether to display the title of the current page or the current section. The section page title is preferred if the title is displayed before local tasks and if it is displayed after local tasks then the current page title is preferred.'), + '#title' => $this->title, ]; - return $form; - } - - /** - * {@inheritdoc} - */ - public function blockSubmit($form, FormStateInterface $form_state) : void { - $this->configuration['base_route_title'] = (bool) $form_state->getValue('base_route_title'); - } - - /** - * Gets title based on base route. - * - * @return array|string|null|\Stringable - * The title based on base route. - */ - private function getTitleBasedOnBaseRoute(): array|string|null|\Stringable { - $controller_title = $this->titleResolver->getTitle($this->requestStack->getCurrentRequest(), $this->routeMatch->getRouteObject()); - - // Controller render arrays using `#title` take precedent over the title - // resolvers. - if ((string) $this->titleToString($controller_title) !== (string) $this->titleToString($this->title)) { - return $this->title; - } - - $base_route_title = $this->baseRouteTitleResolver->getTitle($this->requestStack->getCurrentRequest(), $this->routeMatch->getRouteObject()); - if (!is_null($base_route_title)) { - // If the titles are equal, return the original title. - if ((string) $this->titleToString($base_route_title) === (string) $this->titleToString($this->title)) { - return $this->title; - } - - return $this->t('@section_title<span class="visually-hidden">: @current_title</span>', [ - '@section_title' => $this->titleToString($base_route_title), - '@current_title' => $this->titleToString($this->title), - ]); - } - - return $this->title; - } - - /** - * Converts title to string. - * - * @param array|string|null|\Stringable $title - * A title that could be an array, string or stringable object. - * - * @return string|\Stringable - */ - private function titleToString(array|string|null|\Stringable $title): string|\Stringable { - if (is_array($title)) { - $title = \Drupal::service('renderer')->render($title); - } - - return $title ?? ''; } } diff --git a/core/lib/Drupal/Core/Controller/BaseRouteTitleResolver.php b/core/lib/Drupal/Core/Controller/BaseRouteTitleResolver.php deleted file mode 100644 index 495f7daadf97..000000000000 --- a/core/lib/Drupal/Core/Controller/BaseRouteTitleResolver.php +++ /dev/null @@ -1,68 +0,0 @@ -<?php - -namespace Drupal\Core\Controller; - -use Drupal\Core\Menu\LocalTaskManager; -use Drupal\Core\Routing\RouteMatch; -use Drupal\Core\Routing\RouteProviderInterface; -use Drupal\Core\Routing\UrlGeneratorInterface; -use Drupal\Core\Utility\RequestGenerator; -use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Routing\Exception\InvalidParameterException; -use Symfony\Component\Routing\Exception\RouteNotFoundException; -use Symfony\Component\Routing\Route; - -/** - * Provides a class which gets the title from the current local-task base route. - */ -class BaseRouteTitleResolver implements TitleResolverInterface { - - /** - * Constructs a RequestGenerator object. - * - * @param \Drupal\Core\Routing\UrlGeneratorInterface $urlGenerator - * The url generator. - * @param \Drupal\Core\Controller\TitleResolverInterface $titleResolver - * The title resolver. - * @param \Drupal\Core\Menu\LocalTaskManager $localTaskManager - * The local task manager. - * @param \Drupal\Core\Routing\RouteProviderInterface $routeProvider - * The route provider. - * @param \Drupal\Core\Utility\RequestGenerator $requestGenerator - * The request generator. - */ - public function __construct( - protected UrlGeneratorInterface $urlGenerator, - protected TitleResolverInterface $titleResolver, - protected LocalTaskManager $localTaskManager, - protected RouteProviderInterface $routeProvider, - protected RequestGenerator $requestGenerator, - ) { - } - - /** - * {@inheritdoc} - */ - public function getTitle(Request $request, Route $route) : array|string|\Stringable|null { - $route_match = RouteMatch::createFromRequest($request); - $base_route_names = $this->localTaskManager->getBaseRouteNames($route_match->getRouteName()); - $title = NULL; - if ($base_route_names) { - $base_route_name = reset($base_route_names); - if ($base_route_name !== $route_match->getRouteName()) { - try { - $path = $this->urlGenerator->getPathFromRoute($base_route_name, $route_match->getRawParameters()->all()); - } - catch (RouteNotFoundException | InvalidParameterException) { - return NULL; - } - $route_request = $this->requestGenerator->generateRequestForPath($path, []); - if ($route_request) { - $title = $this->titleResolver->getTitle($route_request, $this->routeProvider->getRouteByName($base_route_name)); - } - } - } - return $title; - } - -} diff --git a/core/lib/Drupal/Core/Menu/LocalTaskManager.php b/core/lib/Drupal/Core/Menu/LocalTaskManager.php index ec49720e0bd8..6fb8bdfe935b 100644 --- a/core/lib/Drupal/Core/Menu/LocalTaskManager.php +++ b/core/lib/Drupal/Core/Menu/LocalTaskManager.php @@ -197,11 +197,58 @@ public function getDefinitions() { public function getLocalTasksForRoute($route_name) { if (!isset($this->instances[$route_name])) { $this->instances[$route_name] = []; - $data = $this->getLocalTasksDataForRoute($route_name); - $base_routes = $data['base_routes']; - $children = $data['children']; - $parents = $data['parents']; - + if ($cache = $this->cacheBackend->get($this->cacheKey . ':' . $route_name)) { + $base_routes = $cache->data['base_routes']; + $parents = $cache->data['parents']; + $children = $cache->data['children']; + } + else { + $definitions = $this->getDefinitions(); + // We build the hierarchy by finding all tabs that should + // appear on the current route. + $base_routes = []; + $parents = []; + $children = []; + foreach ($definitions as $plugin_id => $task_info) { + // Fill in the base_route from the parent to insure consistency. + if (!empty($task_info['parent_id']) && !empty($definitions[$task_info['parent_id']])) { + $task_info['base_route'] = $definitions[$task_info['parent_id']]['base_route']; + // Populate the definitions we use in the next loop. Using a + // reference like &$task_info causes bugs. + $definitions[$plugin_id]['base_route'] = $definitions[$task_info['parent_id']]['base_route']; + } + if ($route_name == $task_info['route_name']) { + if (!empty($task_info['base_route'])) { + $base_routes[$task_info['base_route']] = $task_info['base_route']; + } + // Tabs that link to the current route are viable parents + // and their parent and children should be visible also. + // @todo - this only works for 2 levels of tabs. + // instead need to iterate up. + $parents[$plugin_id] = TRUE; + if (!empty($task_info['parent_id'])) { + $parents[$task_info['parent_id']] = TRUE; + } + } + } + if ($base_routes) { + // Find all the plugins with the same root and that are at the top + // level or that have a visible parent. + foreach ($definitions as $plugin_id => $task_info) { + if (!empty($base_routes[$task_info['base_route']]) && (empty($task_info['parent_id']) || !empty($parents[$task_info['parent_id']]))) { + // Concat '> ' with root ID for the parent of top-level tabs. + $parent = empty($task_info['parent_id']) ? '> ' . $task_info['base_route'] : $task_info['parent_id']; + $children[$parent][$plugin_id] = $task_info; + } + } + } + $data = [ + 'base_routes' => $base_routes, + 'parents' => $parents, + 'children' => $children, + ]; + $this->cacheBackend->set($this->cacheKey . ':' . $route_name, $data, Cache::PERMANENT, $this->cacheTags); + } // Create a plugin instance for each element of the hierarchy. foreach ($base_routes as $base_route) { // Convert the tree keyed by plugin IDs into a simple one with @@ -364,80 +411,4 @@ protected function isRouteActive($current_route_name, $route_name, $route_parame return $active; } - /** - * {@inheritdoc} - */ - public function getBaseRouteNames(string $route_name): array { - $data = $this->getLocalTasksDataForRoute($route_name); - return $data['base_routes'] ?? []; - } - - /** - * Gets the local task data for the given route. - * - * @param string $route_name - * The route name. - * - * @return array - * The local task data with the following keys: - * - base_routes: An array of base route names of the given route. - * - children: An array of the route's child local task definitions keyed by - * local task ID. - * - parents: An array of the route's parent local task definitions. - */ - protected function getLocalTasksDataForRoute(string $route_name): array { - if ($cache = $this->cacheBackend->get($this->cacheKey . ':' . $route_name)) { - $data = $cache->data; - } - else { - $definitions = $this->getDefinitions(); - // We build the hierarchy by finding all tabs that should - // appear on the current route. - $base_routes = []; - $parents = []; - $children = []; - foreach ($definitions as $plugin_id => $task_info) { - // Fill in the base_route from the parent to insure consistency. - if (!empty($task_info['parent_id']) && !empty($definitions[$task_info['parent_id']])) { - $task_info['base_route'] = $definitions[$task_info['parent_id']]['base_route']; - // Populate the definitions we use in the next loop. Using a - // reference like &$task_info causes bugs. - $definitions[$plugin_id]['base_route'] = $definitions[$task_info['parent_id']]['base_route']; - } - if ($route_name == $task_info['route_name']) { - if (!empty($task_info['base_route'])) { - $base_routes[$task_info['base_route']] = $task_info['base_route']; - } - // Tabs that link to the current route are viable parents - // and their parent and children should be visible also. - // @todo - this only works for 2 levels of tabs. - // instead need to iterate up. - $parents[$plugin_id] = TRUE; - if (!empty($task_info['parent_id'])) { - $parents[$task_info['parent_id']] = TRUE; - } - } - } - if ($base_routes) { - // Find all the plugins with the same root and that are at the top - // level or that have a visible parent. - foreach ($definitions as $plugin_id => $task_info) { - if (!empty($base_routes[$task_info['base_route']]) && (empty($task_info['parent_id']) || !empty($parents[$task_info['parent_id']]))) { - // Concat '> ' with root ID for the parent of top-level tabs. - $parent = empty($task_info['parent_id']) ? '> ' . $task_info['base_route'] : $task_info['parent_id']; - $children[$parent][$plugin_id] = $task_info; - } - } - } - $data = [ - 'base_routes' => $base_routes, - 'parents' => $parents, - 'children' => $children, - ]; - $this->cacheBackend->set($this->cacheKey . ':' . $route_name, $data, Cache::PERMANENT, $this->cacheTags); - } - - return $data; - } - } diff --git a/core/lib/Drupal/Core/Menu/LocalTaskManagerInterface.php b/core/lib/Drupal/Core/Menu/LocalTaskManagerInterface.php index dc0f2ea6578b..9352e4011bc8 100644 --- a/core/lib/Drupal/Core/Menu/LocalTaskManagerInterface.php +++ b/core/lib/Drupal/Core/Menu/LocalTaskManagerInterface.php @@ -70,15 +70,4 @@ public function getTasksBuild($current_route_name, RefinableCacheableDependencyI */ public function getLocalTasks($route_name, $level = 0); - /** - * Gets base route names for the given route. - * - * @param string $route_name - * The route name. - * - * @return string[] - * The base route names. - */ - public function getBaseRouteNames(string $route_name): array; - } diff --git a/core/lib/Drupal/Core/Utility/RequestGenerator.php b/core/lib/Drupal/Core/Utility/RequestGenerator.php deleted file mode 100644 index e1efb14f036e..000000000000 --- a/core/lib/Drupal/Core/Utility/RequestGenerator.php +++ /dev/null @@ -1,77 +0,0 @@ -<?php - -namespace Drupal\Core\Utility; - -use Drupal\Core\ParamConverter\ParamNotConvertedException; -use Drupal\Core\Path\CurrentPathStack; -use Drupal\Core\PathProcessor\InboundPathProcessorInterface; -use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; -use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Exception\MethodNotAllowedException; -use Symfony\Component\Routing\Exception\ResourceNotFoundException; -use Symfony\Component\Routing\Matcher\RequestMatcherInterface; - -/** - * Provides a class which generates a request. - * - * @internal - */ -final class RequestGenerator { - - /** - * Constructs a RequestGenerator object. - * - * @param \Drupal\Core\PathProcessor\InboundPathProcessorInterface $pathProcessor - * The inbound path processor. - * @param \Drupal\Core\Path\CurrentPathStack $currentPath - * The current path. - * @param \Symfony\Component\Routing\Matcher\RequestMatcherInterface $router - * The dynamic router service. - */ - public function __construct( - protected InboundPathProcessorInterface $pathProcessor, - protected CurrentPathStack $currentPath, - protected RequestMatcherInterface $router, - ) { - } - - /** - * Generates a request by matching a path in the router. - * - * @param string $path - * The request path with a leading slash. - * @param array $exclude - * An array of paths or system paths to skip. - * - * @return \Symfony\Component\HttpFoundation\Request|null - * A populated request object or NULL if the path couldn't be matched. - */ - public function generateRequestForPath(string $path, array $exclude): ?Request { - if (!empty($exclude[$path])) { - return NULL; - } - - $request = Request::create($path); - // Performance optimization: set a short accept header to reduce overhead in - // AcceptHeaderMatcher when matching the request. - $request->headers->set('Accept', 'text/html'); - // Find the system path by resolving aliases, language prefix, etc. - $processed = $this->pathProcessor->processInbound($path, $request); - if (empty($processed) || !empty($exclude[$processed])) { - // This resolves to the front page, which we already add. - return NULL; - } - $this->currentPath->setPath($processed, $request); - - // Attempt to match this path to provide a fully built request. - try { - $request->attributes->add($this->router->matchRequest($request)); - return $request; - } - catch (ParamNotConvertedException | ResourceNotFoundException | MethodNotAllowedException | AccessDeniedHttpException | NotFoundHttpException) { - return NULL; - } - } - -} diff --git a/core/modules/block/block.post_update.php b/core/modules/block/block.post_update.php index e825577447a1..b14275c7897e 100644 --- a/core/modules/block/block.post_update.php +++ b/core/modules/block/block.post_update.php @@ -5,9 +5,6 @@ * Post update functions for Block. */ -use Drupal\block\BlockInterface; -use Drupal\Core\Config\Entity\ConfigEntityUpdater; - /** * Implements hook_removed_post_updates(). */ @@ -19,19 +16,3 @@ function block_removed_post_updates() { 'block_post_update_replace_node_type_condition' => '10.0.0', ]; } - -/** - * Add 'base_route_title' setting for page title blocks. - */ -function block_post_update_add_base_route_title_page_title(&$sandbox = NULL): void { - \Drupal::classResolver(ConfigEntityUpdater::class) - ->update($sandbox, 'block', function (BlockInterface $block) { - if ($block->get('plugin') === 'page_title_block') { - $settings = $block->get('settings'); - $settings['base_route_title'] = $block->get('theme') === 'claro'; - $block->set('settings', $settings); - return TRUE; - } - return FALSE; - }); -} diff --git a/core/modules/block/tests/src/Functional/PageTitleBlockTest.php b/core/modules/block/tests/src/Functional/PageTitleBlockTest.php deleted file mode 100644 index f6ef4d17a37f..000000000000 --- a/core/modules/block/tests/src/Functional/PageTitleBlockTest.php +++ /dev/null @@ -1,175 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Drupal\Tests\block\Functional; - -use Drupal\Tests\BrowserTestBase; - -/** - * Tests page title block. - * - * @group Block - */ -class PageTitleBlockTest extends BrowserTestBase { - /** - * Modules to install. - * - * @var array - */ - protected static $modules = ['block', 'update', 'node']; - - /** - * {@inheritdoc} - */ - protected $defaultTheme = 'stark'; - - /** - * {@inheritdoc} - */ - protected function setUp(): void { - parent::setUp(); - - // Add the page title block to the page. - $this->drupalPlaceBlock('page_title_block', ['id' => 'stark_page_title']); - - // Create node type. - $this->drupalCreateContentType([ - 'type' => 'article', - 'name' => 'Article', - ]); - - // Create administrative user. - $admin_user = $this->drupalCreateUser([ - 'administer blocks', - 'administer themes', - 'administer software updates', - 'administer nodes', - 'administer modules', - 'create article content', - 'edit any article content', - 'delete any article content', - 'delete any article content', - ]); - $this->drupalLogin($admin_user); - } - - /** - * Check if the contextualized title is displayed. - */ - public function testContextualizeTitle(): void { - $edit['admin_theme'] = $this->defaultTheme; - $this->drupalGet('admin/appearance'); - $this->submitForm($edit, 'Save configuration'); - - // Make sure the title shown is non-contextualized. - $this->drupalGet('admin/modules/update'); - $this->assertSession()->elementTextEquals('css', 'h1', 'Update'); - - // Checking if the title block is configured for showing - // contextualized title and if it's not then configure it. - $this->drupalGet('admin/structure/block/manage/' . $this->defaultTheme . '_page_title'); - // In stark theme it's not configured to show contextualized title - // therefore the value of the configuration will be 1 otherwise 0. - // @see \Drupal\Core\Block\Plugin\Block\PageTitleBlock::blockForm() - $this->assertSession()->fieldValueEquals('settings[base_route_title]', 0); - $this->submitForm(['settings[base_route_title]' => 1], 'Save block'); - - // Make sure the title shown is contextualized. - $this->drupalGet('admin/modules/update'); - $this->assertSession()->elementTextEquals('css', 'h1', 'Extend: Update'); - $title = $this->assertSession()->elementExists('xpath', '//h1'); - $this->assertSession()->elementExists('xpath', '/span[@class="visually-hidden"]', $title); - $this->assertSession()->elementTextEquals('xpath', '//h1/span', ': Update'); - - } - - /** - * Tests the contextualized title if base route is not accessible. - */ - public function testContextualizeTitleWhenBaseRouteIsNotAccessible(): void { - // Create administrative user with access to 'admin/modules/update' but no - // access to base route 'admin/modules'. - $admin_user = $this->drupalCreateUser([ - 'administer blocks', - 'administer software updates', - ]); - $this->drupalLogin($admin_user); - - $non_contextualized_title = 'Update'; - // Make sure the title shown is non-contextualized. - $this->drupalGet('admin/modules/update'); - $this->assertSession()->elementTextEquals('css', 'h1', $non_contextualized_title); - - // Configure title block to show contextualized title. - $this->drupalGet('admin/structure/block/manage/' . $this->defaultTheme . '_page_title'); - $this->assertSession()->fieldValueEquals('settings[base_route_title]', 0); - $this->submitForm(['settings[base_route_title]' => 1], 'Save block'); - - // Make sure the title shown is non-contextualized because the base route is - // not accessible. - // @see \Drupal\Core\Block\Plugin\Block\PageTitleBlock::getTitleBasedOnBaseRoute() - $this->drupalGet('admin/modules/update'); - $this->assertSession()->elementTextEquals('css', 'h1', $non_contextualized_title); - } - - /** - * Data provider for testContextualizeTitleOnNodeOperationPages(). - * - * @return array[][] - * The test cases. - */ - public function providerTestContextualizeTitleOnNodeOperationPages() : array { - return [ - 'node with random title' => [$this->randomMachineName(8)], - 'node with title set to 0' => ['0'], - ]; - } - - /** - * Tests if contextualized title displayed on all node operation pages. - * - * @dataProvider providerTestContextualizeTitleOnNodeOperationPages - */ - public function testContextualizeTitleOnNodeOperationPages($node_title): void { - $settings = [ - 'type' => 'article', - 'title' => $node_title, - ]; - $node = $this->drupalCreateNode($settings); - - // Make sure the non-contextualized title is shown on all node operation - // pages. - $this->drupalGet('node/' . $node->id()); - $this->assertSession()->elementTextEquals('xpath', '//h1', $node_title); - - $this->drupalGet('node/' . $node->id() . '/edit'); - $this->assertSession()->elementTextEquals('xpath', '//h1', "Edit Article $node_title"); - - $this->drupalGet('node/' . $node->id() . '/delete'); - $this->assertSession()->elementTextEquals('xpath', '//h1', "Are you sure you want to delete the content item $node_title?"); - - $this->drupalGet('node/' . $node->id() . '/revisions'); - $this->assertSession()->elementTextEquals('xpath', '//h1', "Revisions for $node_title"); - - // Configure title block to show contextualized title. - $this->drupalGet('admin/structure/block/manage/' . $this->defaultTheme . '_page_title'); - $this->submitForm(['settings[base_route_title]' => 1], 'Save block'); - - // Make sure the contextualized title is shown on all node operation pages. On all pages the title is same as before - // because we don't change the title if it's already overridden. - // @see \Drupal\Core\Block\Plugin\Block\PageTitleBlock::getTitleBasedOnBaseRoute() - $this->drupalGet('node/' . $node->id()); - $this->assertSession()->elementTextEquals('xpath', '//h1', $node_title); - - $this->drupalGet('node/' . $node->id() . '/edit'); - $this->assertSession()->elementTextEquals('xpath', '//h1', "Edit Article $node_title"); - - $this->drupalGet('node/' . $node->id() . '/delete'); - $this->assertSession()->elementTextEquals('xpath', '//h1', "Are you sure you want to delete the content item $node_title?"); - - $this->drupalGet('node/' . $node->id() . '/revisions'); - $this->assertSession()->elementTextEquals('xpath', '//h1', "Revisions for $node_title"); - } - -} diff --git a/core/modules/block/tests/src/Functional/Update/BlockTitleUpdateTest.php b/core/modules/block/tests/src/Functional/Update/BlockTitleUpdateTest.php deleted file mode 100644 index 3d57a0c96b87..000000000000 --- a/core/modules/block/tests/src/Functional/Update/BlockTitleUpdateTest.php +++ /dev/null @@ -1,57 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Drupal\Tests\block\Functional\Update; - -use Drupal\FunctionalTests\Update\UpdatePathTestBase; - -/** - * Tests the update path for block title. - * - * @group Update - * @group legacy - */ -class BlockTitleUpdateTest extends UpdatePathTestBase { - - /** - * {@inheritdoc} - */ - protected function setDatabaseDumpFiles() { - $this->databaseDumpFiles = [ - __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-9.4.0.filled.standard.php.gz', - ]; - } - - /** - * Data provider for testPostUpdateAddContextualizePageTitle(). - * - * @return array[][] - * The test cases. - */ - public function providerTestPostUpdateAddContextualizePageTitle() : array { - return [ - 'Stark theme' => ['stark', FALSE], - // For claro the 'base_route_title' configuration is enabled by default. - 'Claro theme' => ['claro', TRUE], - 'Olivero theme' => ['olivero', FALSE], - ]; - } - - /** - * Tests that title block is configured properly after update. - * - * @dataProvider providerTestPostUpdateAddContextualizePageTitle - */ - public function testPostUpdateAddContextualizePageTitle(string $theme, bool $contextual_title_enabled): void { - $block_settings = $this->config('block.block.' . $theme . '_page_title')->get('settings'); - $this->assertArrayNotHasKey('base_route_title', $block_settings); - - $this->runUpdates(); - - $block_settings = $this->config('block.block.' . $theme . '_page_title')->get('settings'); - $this->assertArrayHasKey('base_route_title', $block_settings); - $this->assertSame($block_settings['base_route_title'], $contextual_title_enabled); - } - -} diff --git a/core/modules/block_content/tests/src/Functional/BlockContentListTest.php b/core/modules/block_content/tests/src/Functional/BlockContentListTest.php index 15b5a3c49a78..9e7930a380a7 100644 --- a/core/modules/block_content/tests/src/Functional/BlockContentListTest.php +++ b/core/modules/block_content/tests/src/Functional/BlockContentListTest.php @@ -154,7 +154,7 @@ public function testListing() { $this->assertSession()->linkByHrefExists('admin/content/block/' . $block->id() . '/delete'); $this->clickLink('Delete'); $this->assertSession()->statusCodeEquals(200); - $this->assertSession()->titleEquals("Are you sure you want to delete the content block $new_label? | $new_label | Drupal"); + $this->assertSession()->titleEquals("Are you sure you want to delete the content block $new_label? | Drupal"); $this->submitForm([], 'Delete'); // Verify that the text of the label and machine name does not appear in diff --git a/core/modules/block_content/tests/src/Functional/BlockContentListViewsTest.php b/core/modules/block_content/tests/src/Functional/BlockContentListViewsTest.php index f00a8147252b..666a8e5fcddc 100644 --- a/core/modules/block_content/tests/src/Functional/BlockContentListViewsTest.php +++ b/core/modules/block_content/tests/src/Functional/BlockContentListViewsTest.php @@ -148,7 +148,7 @@ public function testListing() { $this->assertSession()->linkByHrefExists('admin/content/block/' . $block->id() . '/delete'); $this->clickLink('Delete'); $this->assertSession()->statusCodeEquals(200); - $this->assertSession()->titleEquals("Are you sure you want to delete the content block $new_label? | $new_label | Drupal"); + $this->assertSession()->titleEquals("Are you sure you want to delete the content block $new_label? | Drupal"); $this->submitForm([], 'Delete'); // Verify that the text of the label and machine name does not appear in diff --git a/core/modules/field_ui/tests/src/Functional/FieldUIRouteTest.php b/core/modules/field_ui/tests/src/Functional/FieldUIRouteTest.php index 9f93f2143a00..e75e5714cc91 100644 --- a/core/modules/field_ui/tests/src/Functional/FieldUIRouteTest.php +++ b/core/modules/field_ui/tests/src/Functional/FieldUIRouteTest.php @@ -45,7 +45,7 @@ public function testFieldUIRoutes() { $this->assertSession()->pageTextContains('No fields are present yet.'); $this->drupalGet('admin/config/people/accounts/fields'); - $this->assertSession()->titleEquals('Manage fields | Account settings | Drupal'); + $this->assertSession()->titleEquals('Manage fields | Drupal'); $this->assertLocalTasks(); // Test manage display tabs and titles. @@ -53,13 +53,13 @@ public function testFieldUIRoutes() { $this->assertSession()->statusCodeEquals(403); $this->drupalGet('admin/config/people/accounts/display'); - $this->assertSession()->titleEquals('Manage display | Account settings | Drupal'); + $this->assertSession()->titleEquals('Manage display | Drupal'); $this->assertLocalTasks(); $edit = ['display_modes_custom[compact]' => TRUE]; $this->submitForm($edit, 'Save'); $this->drupalGet('admin/config/people/accounts/display/compact'); - $this->assertSession()->titleEquals('Manage display | Account settings | Drupal'); + $this->assertSession()->titleEquals('Manage display | Drupal'); $this->assertLocalTasks(); // Test manage form display tabs and titles. @@ -67,14 +67,14 @@ public function testFieldUIRoutes() { $this->assertSession()->statusCodeEquals(403); $this->drupalGet('admin/config/people/accounts/form-display'); - $this->assertSession()->titleEquals('Manage form display | Account settings | Drupal'); + $this->assertSession()->titleEquals('Manage form display | Drupal'); $this->assertLocalTasks(); $edit = ['display_modes_custom[register]' => TRUE]; $this->submitForm($edit, 'Save'); $this->assertSession()->statusCodeEquals(200); $this->drupalGet('admin/config/people/accounts/form-display/register'); - $this->assertSession()->titleEquals('Manage form display | Account settings | Drupal'); + $this->assertSession()->titleEquals('Manage form display | Drupal'); $this->assertLocalTasks(); // Test that default secondary tab is in first position. $this->assertSession()->elementsCount('xpath', "//ul/li[1]/a[contains(text(), 'Default')]", 1); diff --git a/core/modules/layout_builder/tests/src/Functional/LayoutBuilderTest.php b/core/modules/layout_builder/tests/src/Functional/LayoutBuilderTest.php index ac6b40b4e6f3..631159a8b3ef 100644 --- a/core/modules/layout_builder/tests/src/Functional/LayoutBuilderTest.php +++ b/core/modules/layout_builder/tests/src/Functional/LayoutBuilderTest.php @@ -531,10 +531,10 @@ public function testPendingRevision() { // The original node title is available when viewing the node, but the // pending title is visible within the Layout Builder UI. $this->drupalGet('node/1'); - $assert_session->elementTextContains('css', 'body', 'The first node title'); + $assert_session->pageTextContains('The first node title'); $page->clickLink('Layout'); - $assert_session->elementTextNotContains('css', 'body', 'The first node title'); - $assert_session->elementTextContains('css', 'body', 'The pending title of the first node'); + $assert_session->pageTextNotContains('The first node title'); + $assert_session->pageTextContains('The pending title of the first node'); } /** diff --git a/core/modules/system/config/schema/system.schema.yml b/core/modules/system/config/schema/system.schema.yml index 75fb5f2ff0f1..d26ab68f91e0 100644 --- a/core/modules/system/config/schema/system.schema.yml +++ b/core/modules/system/config/schema/system.schema.yml @@ -376,14 +376,6 @@ system.advisories: type: integer label: 'How often to check for security advisories, in hours' -block.settings.page_title_block: - type: block_settings - label: 'Page title block' - mapping: - base_route_title: - type: boolean - label: 'Display section title instead of current title' - block.settings.system_branding_block: type: block_settings label: 'Branding block' diff --git a/core/modules/system/src/PathBasedBreadcrumbBuilder.php b/core/modules/system/src/PathBasedBreadcrumbBuilder.php index 2dd5048e87a0..749dad24f7c9 100644 --- a/core/modules/system/src/PathBasedBreadcrumbBuilder.php +++ b/core/modules/system/src/PathBasedBreadcrumbBuilder.php @@ -8,8 +8,9 @@ use Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface; use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\Controller\TitleResolverInterface; -use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait; use Drupal\Core\Link; +use Drupal\Core\ParamConverter\ParamNotConvertedException; +use Drupal\Core\Path\CurrentPathStack; use Drupal\Core\Path\PathMatcherInterface; use Drupal\Core\PathProcessor\InboundPathProcessorInterface; use Drupal\Core\Routing\RequestContext; @@ -18,7 +19,11 @@ use Drupal\Core\Session\AccountInterface; use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\Core\Url; -use Drupal\Core\Utility\RequestGenerator; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; +use Symfony\Component\Routing\Exception\MethodNotAllowedException; +use Symfony\Component\Routing\Exception\ResourceNotFoundException; use Symfony\Component\Routing\Matcher\RequestMatcherInterface; /** @@ -27,20 +32,7 @@ * @see \Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface */ class PathBasedBreadcrumbBuilder implements BreadcrumbBuilderInterface { - use StringTranslationTrait; - use DeprecatedServicePropertyTrait; - - /** - * Defines deprecated injected properties. - * - * @var array - */ - protected array $deprecatedProperties = [ - 'router' => 'router', - 'pathProcessor' => 'path_processor_manager', - 'currentPath' => 'path.current', - ]; /** * The router request context. @@ -56,6 +48,20 @@ class PathBasedBreadcrumbBuilder implements BreadcrumbBuilderInterface { */ protected $accessManager; + /** + * The dynamic router service. + * + * @var \Symfony\Component\Routing\Matcher\RequestMatcherInterface + */ + protected $router; + + /** + * The inbound path processor. + * + * @var \Drupal\Core\PathProcessor\InboundPathProcessorInterface + */ + protected $pathProcessor; + /** * Site config object. * @@ -78,18 +84,18 @@ class PathBasedBreadcrumbBuilder implements BreadcrumbBuilderInterface { protected $currentUser; /** - * The patch matcher service. + * The current path service. * - * @var \Drupal\Core\Path\PathMatcherInterface + * @var \Drupal\Core\Path\CurrentPathStack */ - protected $pathMatcher; + protected $currentPath; /** - * The request generator. + * The patch matcher service. * - * @var \Drupal\Core\Utility\RequestGenerator + * @var \Drupal\Core\Path\PathMatcherInterface */ - protected $requestGenerator; + protected $pathMatcher; /** * Constructs the PathBasedBreadcrumbBuilder. @@ -98,44 +104,31 @@ class PathBasedBreadcrumbBuilder implements BreadcrumbBuilderInterface { * The router request context. * @param \Drupal\Core\Access\AccessManagerInterface $access_manager * The access check service. - * @param \Drupal\Core\Config\ConfigFactoryInterface|\Symfony\Component\Routing\Matcher\RequestMatcherInterface $config_factory + * @param \Symfony\Component\Routing\Matcher\RequestMatcherInterface $router + * The dynamic router service. + * @param \Drupal\Core\PathProcessor\InboundPathProcessorInterface $path_processor + * The inbound path processor. + * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory * The config factory service. - * @param \Drupal\Core\Controller\TitleResolverInterface|\Drupal\Core\PathProcessor\InboundPathProcessorInterface $title_resolver + * @param \Drupal\Core\Controller\TitleResolverInterface $title_resolver * The title resolver service. - * @param \Drupal\Core\Session\AccountInterface|\Drupal\Core\Config\ConfigFactoryInterface $current_user + * @param \Drupal\Core\Session\AccountInterface $current_user * The current user object. - * @param \Drupal\Core\Path\PathMatcherInterface|\Drupal\Core\Controller\TitleResolverInterface $path_matcher + * @param \Drupal\Core\Path\CurrentPathStack $current_path + * The current path. + * @param \Drupal\Core\Path\PathMatcherInterface $path_matcher * The path matcher service. - * @param \Drupal\Core\Utility\RequestGenerator|\Drupal\Core\Session\AccountInterface $request_generator - * The request generator. */ - public function __construct( - RequestContext $context, - AccessManagerInterface $access_manager, - ConfigFactoryInterface|RequestMatcherInterface $config_factory, - TitleResolverInterface|InboundPathProcessorInterface $title_resolver, - AccountInterface|ConfigFactoryInterface $current_user, - PathMatcherInterface|TitleResolverInterface $path_matcher, - RequestGenerator|AccountInterface $request_generator, - ) { + public function __construct(RequestContext $context, AccessManagerInterface $access_manager, RequestMatcherInterface $router, InboundPathProcessorInterface $path_processor, ConfigFactoryInterface $config_factory, TitleResolverInterface $title_resolver, AccountInterface $current_user, CurrentPathStack $current_path, PathMatcherInterface $path_matcher = NULL) { $this->context = $context; $this->accessManager = $access_manager; - if ($config_factory instanceof RequestMatcherInterface) { - @trigger_error('Calling PathBasedBreadcrumbBuilder::__construct() with the $router, $path_processor, $current_path arguments is deprecated in drupal:10.3.0 and is removed from drupal:11.0.0. See https://www.drupal.org/node/3397213', E_USER_DEPRECATED); - @trigger_error('Calling PathBasedBreadcrumbBuilder::__construct() without the $request_generator argument is deprecated in drupal:10.3.0 and will be required in drupal:11.0.0. See https://www.drupal.org/node/3397213', E_USER_DEPRECATED); - $config_factory = $current_user; - $this->titleResolver = $path_matcher; - $this->currentUser = $request_generator; - $this->requestGenerator = \Drupal::service('request_generator'); - $this->pathMatcher = func_get_arg(8) ?: \Drupal::service('path.matcher'); - } - else { - $this->titleResolver = $title_resolver; - $this->currentUser = $current_user; - $this->requestGenerator = $request_generator; - $this->pathMatcher = $path_matcher; - } + $this->router = $router; + $this->pathProcessor = $path_processor; $this->config = $config_factory->get('system.site'); + $this->titleResolver = $title_resolver; + $this->currentUser = $current_user; + $this->currentPath = $current_path; + $this->pathMatcher = $path_matcher ?: \Drupal::service('path.matcher'); } /** @@ -176,7 +169,7 @@ public function build(RouteMatchInterface $route_match) { while (count($path_elements) > 1) { array_pop($path_elements); // Copy the path elements for up-casting. - $route_request = $this->requestGenerator->generateRequestForPath('/' . implode('/', $path_elements), $exclude); + $route_request = $this->getRequestForPath('/' . implode('/', $path_elements), $exclude); if ($route_request) { $route_match = RouteMatch::createFromRequest($route_request); $access = $this->accessManager->check($route_match, $this->currentUser, NULL, TRUE); @@ -202,4 +195,40 @@ public function build(RouteMatchInterface $route_match) { return $breadcrumb->setLinks(array_reverse($links)); } + /** + * Matches a path in the router. + * + * @param string $path + * The request path with a leading slash. + * @param array $exclude + * An array of paths or system paths to skip. + * + * @return \Symfony\Component\HttpFoundation\Request + * A populated request object or NULL if the path couldn't be matched. + */ + protected function getRequestForPath($path, array $exclude) { + if (!empty($exclude[$path])) { + return NULL; + } + $request = Request::create($path); + // Performance optimization: set a short accept header to reduce overhead in + // AcceptHeaderMatcher when matching the request. + $request->headers->set('Accept', 'text/html'); + // Find the system path by resolving aliases, language prefix, etc. + $processed = $this->pathProcessor->processInbound($path, $request); + if (empty($processed) || !empty($exclude[$processed])) { + // This resolves to the front page, which we already add. + return NULL; + } + $this->currentPath->setPath($processed, $request); + // Attempt to match this path to provide a fully built request. + try { + $request->attributes->add($this->router->matchRequest($request)); + return $request; + } + catch (ParamNotConvertedException | ResourceNotFoundException | MethodNotAllowedException | AccessDeniedHttpException | NotFoundHttpException $e) { + return NULL; + } + } + } diff --git a/core/modules/system/system.services.yml b/core/modules/system/system.services.yml index 8b02ea0640ae..b56f401f9f05 100644 --- a/core/modules/system/system.services.yml +++ b/core/modules/system/system.services.yml @@ -25,7 +25,7 @@ services: Drupal\system\SystemManager: '@system.manager' system.breadcrumb.default: class: Drupal\system\PathBasedBreadcrumbBuilder - arguments: ['@router.request_context', '@access_manager', '@config.factory', '@title_resolver', '@current_user', '@path.matcher', '@request_generator'] + arguments: ['@router.request_context', '@access_manager', '@router', '@path_processor_manager', '@config.factory', '@title_resolver', '@current_user', '@path.current', '@path.matcher'] tags: - { name: breadcrumb_builder, priority: 0 } path_processor.files: diff --git a/core/modules/system/tests/src/Functional/Module/UninstallTest.php b/core/modules/system/tests/src/Functional/Module/UninstallTest.php index 5905214acb35..f7a126a2ad0c 100644 --- a/core/modules/system/tests/src/Functional/Module/UninstallTest.php +++ b/core/modules/system/tests/src/Functional/Module/UninstallTest.php @@ -72,7 +72,7 @@ public function testUninstallPage() { $this->rebuildAll(); $this->drupalGet('admin/modules/uninstall'); - $this->assertSession()->titleEquals('Uninstall | Extend | Drupal'); + $this->assertSession()->titleEquals('Uninstall | Drupal'); // Check that the experimental module link was rendered correctly. $this->assertSession()->elementExists('xpath', "//a[contains(@aria-label, 'View information on the Experimental status of the module Experimental Test')]"); @@ -177,7 +177,7 @@ public function testUninstallPage() { // Make sure confirmation page is accessible only during uninstall process. $this->drupalGet('admin/modules/uninstall/confirm'); $this->assertSession()->addressEquals('admin/modules/uninstall'); - $this->assertSession()->titleEquals('Uninstall | Extend | Drupal'); + $this->assertSession()->titleEquals('Uninstall | Drupal'); // Make sure the correct error is shown when no modules are selected. $edit = []; diff --git a/core/modules/system/tests/src/Unit/Breadcrumbs/PathBasedBreadcrumbBuilderTest.php b/core/modules/system/tests/src/Unit/Breadcrumbs/PathBasedBreadcrumbBuilderTest.php index f044a84de760..d0fc897a1173 100644 --- a/core/modules/system/tests/src/Unit/Breadcrumbs/PathBasedBreadcrumbBuilderTest.php +++ b/core/modules/system/tests/src/Unit/Breadcrumbs/PathBasedBreadcrumbBuilderTest.php @@ -4,28 +4,20 @@ namespace Drupal\Tests\system\Unit\Breadcrumbs; -use Drupal\Core\Access\AccessManagerInterface; use Drupal\Core\Access\AccessResult; use Drupal\Core\Cache\Cache; -use Drupal\Core\Controller\TitleResolverInterface; use Drupal\Core\Link; use Drupal\Core\Access\AccessResultAllowed; use Drupal\Core\Path\PathMatcherInterface; -use Drupal\Core\PathProcessor\InboundPathProcessorInterface; -use Drupal\Core\Routing\RequestContext; -use Drupal\Core\Session\AccountInterface; use Drupal\Core\StringTranslation\TranslationInterface; use Drupal\Core\Url; use Drupal\Core\Utility\LinkGeneratorInterface; -use Drupal\Core\Utility\RequestGenerator; use Drupal\system\PathBasedBreadcrumbBuilder; use Drupal\Tests\UnitTestCase; use Drupal\Core\Routing\RouteObjectInterface; -use PHPUnit\Framework\MockObject\MockObject; use Symfony\Component\DependencyInjection\Container; use Symfony\Component\HttpFoundation\InputBag; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpFoundation\RequestMatcherInterface; use Symfony\Component\Routing\Route; /** @@ -39,63 +31,63 @@ class PathBasedBreadcrumbBuilderTest extends UnitTestCase { * * @var \Drupal\system\PathBasedBreadcrumbBuilder */ - protected PathBasedBreadcrumbBuilder $builder; + protected $builder; /** * The mocked title resolver. * * @var \Drupal\Core\Controller\TitleResolverInterface|\PHPUnit\Framework\MockObject\MockObject */ - protected TitleResolverInterface|MockObject $titleResolver; + protected $titleResolver; /** * The mocked access manager. * * @var \Drupal\Core\Access\AccessManagerInterface|\PHPUnit\Framework\MockObject\MockObject */ - protected AccessManagerInterface|MockObject $accessManager; + protected $accessManager; /** * The request matching mock object. * * @var \Symfony\Component\Routing\Matcher\RequestMatcherInterface|\PHPUnit\Framework\MockObject\MockObject */ - protected RequestMatcherInterface|MockObject $requestMatcher; + protected $requestMatcher; /** * The mocked route request context. * * @var \Drupal\Core\Routing\RequestContext|\PHPUnit\Framework\MockObject\MockObject */ - protected RequestContext|MockObject $context; + protected $context; /** * The mocked current user. * * @var \Drupal\Core\Session\AccountInterface|\PHPUnit\Framework\MockObject\MockObject */ - protected AccountInterface|MockObject $currentUser; + protected $currentUser; /** * The mocked path processor. * * @var \Drupal\Core\PathProcessor\InboundPathProcessorInterface|\PHPUnit\Framework\MockObject\MockObject */ - protected InboundPathProcessorInterface|MockObject $pathProcessor; + protected $pathProcessor; /** - * The mocked path matcher service. + * The mocked current path. * - * @var \Drupal\Core\Path\PathMatcherInterface|\PHPUnit\Framework\MockObject\MockObject + * @var \Drupal\Core\Path\CurrentPathStack|\PHPUnit\Framework\MockObject\MockObject */ - protected PathMatcherInterface|MockObject $pathMatcher; + protected $currentPath; /** - * The request generator service. + * The mocked path matcher service. * - * @var \Drupal\Core\Utility\RequestGenerator|\PHPUnit\Framework\MockObject\MockObject + * @var \Drupal\Core\Path\PathMatcherInterface|\PHPUnit\Framework\MockObject\MockObject */ - protected RequestGenerator|MockObject $requestGenerator; + protected $pathMatcher; /** * {@inheritdoc} @@ -115,24 +107,22 @@ protected function setUp(): void { $this->accessManager = $this->createMock('\Drupal\Core\Access\AccessManagerInterface'); $this->titleResolver = $this->createMock('\Drupal\Core\Controller\TitleResolverInterface'); $this->currentUser = $this->createMock('Drupal\Core\Session\AccountInterface'); + $this->currentPath = $this->getMockBuilder('Drupal\Core\Path\CurrentPathStack') + ->disableOriginalConstructor() + ->getMock(); $this->pathMatcher = $this->createMock(PathMatcherInterface::class); - $this->requestGenerator = new RequestGenerator( - $this->pathProcessor, - $this->getMockBuilder('Drupal\Core\Path\CurrentPathStack') - ->disableOriginalConstructor() - ->getMock(), - $this->requestMatcher - ); $this->builder = new TestPathBasedBreadcrumbBuilder( $this->context, $this->accessManager, + $this->requestMatcher, + $this->pathProcessor, $config_factory, $this->titleResolver, $this->currentUser, - $this->pathMatcher, - $this->requestGenerator, + $this->currentPath, + $this->pathMatcher ); $this->builder->setStringTranslation($this->getStringTranslationStub()); @@ -184,6 +174,7 @@ public function testBuildWithOnePathElement() { * Tests the build method with two path elements. * * @covers ::build + * @covers ::getRequestForPath */ public function testBuildWithTwoPathElements() { $this->context->expects($this->once()) @@ -222,6 +213,7 @@ public function testBuildWithTwoPathElements() { * Tests the build method with three path elements. * * @covers ::build + * @covers ::getRequestForPath */ public function testBuildWithThreePathElements() { $this->context->expects($this->once()) @@ -277,6 +269,7 @@ public function testBuildWithThreePathElements() { * Tests that exceptions during request matching are caught. * * @covers ::build + * @covers ::getRequestForPath * * @dataProvider providerTestBuildWithException */ @@ -319,6 +312,7 @@ public static function providerTestBuildWithException() { * Tests the build method with a non processed path. * * @covers ::build + * @covers ::getRequestForPath */ public function testBuildWithNonProcessedPath() { $this->context->expects($this->once()) @@ -355,6 +349,7 @@ public function testApplies() { * Tests the breadcrumb for a user path. * * @covers ::build + * @covers ::getRequestForPath */ public function testBuildWithUserPath() { $this->context->expects($this->once()) diff --git a/core/profiles/demo_umami/config/install/block.block.umami_page_title.yml b/core/profiles/demo_umami/config/install/block.block.umami_page_title.yml index b5ac4d8191db..048f9a690651 100644 --- a/core/profiles/demo_umami/config/install/block.block.umami_page_title.yml +++ b/core/profiles/demo_umami/config/install/block.block.umami_page_title.yml @@ -16,7 +16,6 @@ settings: label: 'Page title' label_display: '0' provider: core - base_route_title: false visibility: request_path: id: request_path diff --git a/core/profiles/minimal/config/install/block.block.stark_page_title.yml b/core/profiles/minimal/config/install/block.block.stark_page_title.yml index bb95d0b64a94..7b7f098bbd36 100644 --- a/core/profiles/minimal/config/install/block.block.stark_page_title.yml +++ b/core/profiles/minimal/config/install/block.block.stark_page_title.yml @@ -14,5 +14,4 @@ settings: label: 'Page title' label_display: '0' provider: core - base_route_title: false visibility: { } diff --git a/core/profiles/testing_themes_blocks/themes/testing_theme_optional_blocks/config/optional/block.block.testing_theme_optional_blocks_page_title.yml b/core/profiles/testing_themes_blocks/themes/testing_theme_optional_blocks/config/optional/block.block.testing_theme_optional_blocks_page_title.yml index 104e2726cd1a..1620400e4489 100644 --- a/core/profiles/testing_themes_blocks/themes/testing_theme_optional_blocks/config/optional/block.block.testing_theme_optional_blocks_page_title.yml +++ b/core/profiles/testing_themes_blocks/themes/testing_theme_optional_blocks/config/optional/block.block.testing_theme_optional_blocks_page_title.yml @@ -14,5 +14,4 @@ settings: label: 'Page title' label_display: '0' provider: core - base_route_title: false visibility: { } diff --git a/core/tests/Drupal/KernelTests/Config/Schema/MappingTest.php b/core/tests/Drupal/KernelTests/Config/Schema/MappingTest.php index abe08cb9a2e2..c2cf6c65644c 100644 --- a/core/tests/Drupal/KernelTests/Config/Schema/MappingTest.php +++ b/core/tests/Drupal/KernelTests/Config/Schema/MappingTest.php @@ -183,9 +183,6 @@ public static function providerMappingInterpretation(): \Generator { 'block.settings.extra_field_block:*:*:*' => [ 'formatter', ], - 'block.settings.page_title_block' => [ - 'base_route_title', - ], 'block.settings.system_branding_block' => [ 'use_site_logo', 'use_site_name', diff --git a/core/tests/Drupal/Tests/Core/Utility/RequestGeneratorTest.php b/core/tests/Drupal/Tests/Core/Utility/RequestGeneratorTest.php deleted file mode 100644 index 573fbcb1b6a7..000000000000 --- a/core/tests/Drupal/Tests/Core/Utility/RequestGeneratorTest.php +++ /dev/null @@ -1,163 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Drupal\Tests\Core\Utility; - -use Drupal\Core\ParamConverter\ParamNotConvertedException; -use Drupal\Core\Path\CurrentPathStack; -use Drupal\Core\PathProcessor\InboundPathProcessorInterface; -use Drupal\Core\Routing\RouteObjectInterface; -use Drupal\Core\Utility\RequestGenerator; -use Drupal\Tests\UnitTestCase; -use Prophecy\Argument; -use Prophecy\Prophecy\ObjectProphecy; -use Symfony\Component\HttpFoundation\InputBag; -use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; -use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Exception\MethodNotAllowedException; -use Symfony\Component\Routing\Exception\ResourceNotFoundException; -use Symfony\Component\Routing\Matcher\RequestMatcherInterface; -use Symfony\Component\Routing\Route; - -/** - * @coversDefaultClass \Drupal\Core\Utility\RequestGenerator - * @group Utility - */ -class RequestGeneratorTest extends UnitTestCase { - - /** - * The request generator. - * - * @var \Drupal\Core\Utility\RequestGenerator - */ - protected RequestGenerator $requestGenerator; - - /** - * The mocked path processor. - * - * @var \Drupal\Core\PathProcessor\InboundPathProcessorInterface - */ - protected InboundPathProcessorInterface|ObjectProphecy $pathProcessor; - - /** - * The mocked current path. - * - * @var \Drupal\Core\Path\CurrentPathStack - */ - protected CurrentPathStack|ObjectProphecy $currentPath; - - /** - * The request matching mock object. - * - * @var \Symfony\Component\Routing\Matcher\RequestMatcherInterface - */ - protected RequestMatcherInterface|ObjectProphecy $requestMatcher; - - /** - * {@inheritdoc} - */ - protected function setUp(): void { - parent::setUp(); - - $this->pathProcessor = $this->prophesize(InboundPathProcessorInterface::class); - $this->currentPath = $this->prophesize(CurrentPathStack::class); - $this->requestMatcher = $this->prophesize(RequestMatcherInterface::class); - $this->requestGenerator = new RequestGenerator( - $this->pathProcessor->reveal(), - $this->currentPath->reveal(), - $this->requestMatcher->reveal(), - ); - } - - /** - * Data provider for testGenerateRequestForPath(). - * - * @return \Generator - * The test cases. - */ - public function providerTestGenerateRequestForPath(): \Generator { - $path = '/any/path'; - - yield 'request for a path with no paths to skip' => [ - $path, - [], - ['processInbound' => 1, 'matchRequest' => 1], - TRUE, - ]; - - yield 'request for a path which needs to be skipped' => [ - $path, - [$path => TRUE], - ['processInbound' => 0, 'matchRequest' => 0], - FALSE, - ]; - - yield 'request for a path with other path which needs to be skipped' => [ - $path, - ['/other/path' => TRUE], - ['processInbound' => 1, 'matchRequest' => 1], - TRUE, - ]; - } - - /** - * Tests generateRequestForPath(). - * - * @dataProvider providerTestGenerateRequestForPath - * @covers ::generateRequestForPath - */ - public function testGenerateRequestForPath($path, $exclude, $methods_called, $request_generated): void { - $route = new Route($path); - $this->pathProcessor->processInbound($path, Argument::type(Request::class))->willReturnArgument(); - $this->requestMatcher->matchRequest(Argument::type(Request::class))->will(function ($arguments) use ($route, $path) { - [$request] = $arguments; - if ($request->getPathInfo() == $path) { - return [ - RouteObjectInterface::ROUTE_NAME => 'User Example', - RouteObjectInterface::ROUTE_OBJECT => $route, - '_raw_variables' => new InputBag([]), - ]; - } - }); - $request = $this->requestGenerator->generateRequestForPath($path, $exclude); - if ($request_generated) { - $this->assertNotNull($request); - $this->assertSame($request->getPathInfo(), $path); - } - else { - $this->assertNull($request); - } - } - - /** - * Data provider for testGenerateRequestForPathWithException(). - * - * @return \Generator - * The test cases. - */ - public function providerTestGenerateRequestForPathWithException(): \Generator { - yield 'ParamNotConvertedException' => [ParamNotConvertedException::class, '']; - yield 'ResourceNotFoundException' => [ResourceNotFoundException::class, '']; - yield 'MethodNotAllowedException' => [MethodNotAllowedException::class, []]; - yield 'AccessDeniedHttpException' => [AccessDeniedHttpException::class, '']; - yield 'NotFoundHttpException' => [NotFoundHttpException::class, '']; - } - - /** - * Tests generateRequestForPath() with exceptions during request matching. - * - * @dataProvider providerTestGenerateRequestForPathWithException - * @covers ::generateRequestForPath - */ - public function testGenerateRequestForPathWithException($exception_class, $exception_argument): void { - $path = '/example'; - $exclude = []; - $this->pathProcessor->processInbound($path, Argument::type(Request::class))->willReturnArgument(); - $this->requestMatcher->matchRequest(Argument::type(Request::class))->willThrow(new $exception_class($exception_argument)); - $request = $this->requestGenerator->generateRequestForPath($path, $exclude); - $this->assertNull($request); - } - -} diff --git a/core/tests/fixtures/config_install/multilingual.tar.gz b/core/tests/fixtures/config_install/multilingual.tar.gz index 7ea550dcba0e..adf60af587f8 100644 --- a/core/tests/fixtures/config_install/multilingual.tar.gz +++ b/core/tests/fixtures/config_install/multilingual.tar.gz @@ -1,129 +1,106 @@ -‹¤Fe�multilingual.tar�ì½irãJv(Ü¿¹ -Úñ9dw\H˜A*Úýš%•æ¹4<¿@$€ (�¤DõíˆÞW`ûŸ—Ò+ùr�@ R‘”ª„t»®˜™ÈùyòëXzâQÒ4ÿWÐ>ûß$ýAQ•UUT”¯I2ÿ‡º²ü¡ýáƒ0A½þÏ1§Ö›Uþ“¦õ¡ŸÃuüïú3ˆÌ®åwÖG=w}à VeyÂþËŠ"kéþ+’ø^4MýC_à&¦/¾ÿƒcmÖ,joBÎn(' ‰3`r¼ Z’d6Þj.ð:¦oÁÍ:ôjhÕ¢A¸Y‚¬Y°=z¦ÃÍZ½Þóñ_õ:W·×ïÄBÔtÓH©m0p#ôÛ³ŽÞaw³þÀG/û/w²÷xp¥[¡Ù»59a¼Q§ýxЂßÎÀóý¡=úÆ×ðØ“C‹Æg@w³~“üŽGQ'14§9¾·Y_»€&ô¢:X½Ãt`¸V‹@ÕB=þ8mdÚtq—ŽU³œ°ï‚Qft¾xHqù×Ó#'ÂíµKŠúî ãxùÏú~èбò¹º>™AHûª×ãVËçC«1§Ôëžu¯3Î cŽ³3¹ñ -ÐågÇkP¬@Áu>.÷`¦°øƒ¾ú¨Eòw¦X=ÇÓãíÛG‡!SF×FÇ#4¨ú½LYüÅÚZ&¾˜î�ŸQ¸av�À`tœ¥Gð%ŠÏq¶fçÚF<BÝu¼Çbûh¨ ê¾�F軃¨d@x¬¨¸eeDÛmB=ì£ÃIÝé&:•…µFƒœžþÜu"H¾/ûM¾0Ø °œh‘ÑluÓaX(êÐv^ -ÙáÀ.ËFh¶‹}z®heìÝ…^/*Ÿ+yöK7üg`T²uÐu~è„%E=„y&n`Z¨—o~Z\ºÓ!ZttÂA§t·ðŽ”îb�JÂøC¦ÍnÔ+9Ð…=í14å\o˜“¦¤”�δÏi…²]gjø.FQ“ø€~ƒØäž’*ÓúJÉ®S°×FÌÇ]Ç‚z\PZ_…_,#ßQÌPú5Âý,êÄä`œÃŽqI†zŒ3ƒ5sSÏàLD¦1”d;LÈä~»m23k–œó -m’T¡ÍbñOƒ6§`¼Å!Mf‘—3Ùî–Š2s…p'±h3Éî,ùf¹´LÄæBݽl»ñW—ÅáT˜”¾Â¤&0é‚1i=‡ŽØÏÉ<‹óÞ‚_™úÅœ^å‡ñÞK}…Ti§Rj…T' ÕÈéA„‰zýîL -Þ„@K>Z.µ@T™¶ó¹¥ƒ¯0h…A+ºp¶ã Ýöƒ@Ç#ìúA”)¤ï6z®NnXg¾"PÍeÇÏX,RŽ³ß‚’‹Ÿ,!ã÷N½ØküÙq¡`uȹ�÷1Ä’ym ÜŠv.Ü Ø€CtÌ6þúW,¯®ÿío?úF£Ž×¿0òO‹Ëõ'CæÅ'S‚Ë‹glT>WV˜¼¾bLž�èF¬ìpˆàÁÉŒl4FÈXÕ#¤÷ƒ"bf¾ËcåAî•ì}H®ƒ–‚~FTO -eåCÉ`sR¡ˆÅ¯™Ö*þš¾â¯+þºÂÊÇʦë˜zˆ¸3<ùAÍ~Ü\•1’cߪBEŽ× 7‹ðù:Ń…)ÂÔY¶-Í_ëõ¿Jÿ¹¸jt#€sωòÐE|ÛaiI€_ÚBh–ÛNâó– ÕÚG'>!ìƒ�D~[ 8mçoõì†RêúÎ$ÝÒ9Äyo¹Ÿ0õWq9ñÑé§)ÛiYYEßèà+úVÑ·Š¾-”¾õÑ-=ƒAè´&sÒ,Fç™d• -ÔãÌ¥w!°ÉCç|ˆA¯+gQt{¡Ž—÷ŒîÝÙ6"?.)@+â \—Áí¹º€¥©9Þÿøû£ÿ±§qèøX_þÿ/ô¿fíû!̷ñx¼ó5R¤¿³ë(›¬êÚ´O’E¯)¿Õþ·ºˆþ«ðó|ƒ¶²·N®«·\·Îå{I6³Ø"-I¾>%¿jÙu³ˆD‘==sÚñ â@tcEÒv|6s4w›®ÈãÂdhp<²ìè0˦³¿D¿êÆhP‘²vý”MÊ@h&Í´B“-ÅÆ Iq¦åÀD4.dWmPoÚâàr,$×C´«õX2˜Üf²Íæˆezº2¬!ý´ - `Y'œGˆ„^PöŸn0åÃñS'~κ¢†Àqñ˜Ö'pZ壙Àßû^„òÜÝDþ#ôœW5Ã6^ÒŸ^S9†‡öÎåö„YÖv½#Úƒ®8èï€P¤ùEDÜÔ�ÈüÙµ †`A‰YÝOlCÜ@|èE�ß|œ¬¡�¹ï•ßë6ëBÙ²ÜCÉ&%}éÉZ! -Q¶‹Œò¾áeM·ò{Œ.¼úx%$-+ë1¹‘ê!bŽLÚÍä–P]|ÉdÖŸ€ñ9‹Ø)ðiàe×W\Öƒ=£óÇW×¾[T'†.Ú.dt&QÇî5÷“ŠŽÚ¨G¸“5†þÇgM8¹óìÍƔ݃œP'§¥lÆô(;žíÏÄÓ6?»äL%@ ø´@ð"¹0ÑÝž°ÜoÛ¦„™Ž!¤•ã™b}ÜIáÅKƒù(¦ô§V¢FÿI ç3àždþðO‰R÷¢pФž—…‡JvºÂE.ú!\DY!ú}f«Ç‡¼u2¶,ckÕëB¶BÜÂE‚à¯iÒ(6aføÏ©Ìã¯%ÍÕÿö·:ú3F YŒÌ‡ÎœÊ¸sK“˜P—AS¶›a43è»$㉳\ÃX5±T¯p¬$S¢ã?Õ²/›±Èš:'&ìÌÀ‹€Qb=ŽpN&ò¢u¶ŒJŒ’'†âA&7í>Ú{gˆoããuãzÐr½Â’³£»¥ƒe 'ûž½v[0w¯^ñ¬\ÿ¹üÀüð¼Àgš{mÊO©€?áŒJŽ_©ñ»fö¹Î`‰ -^~VŸù²Ï!ŒÞJ~"?éÁc_W<¢üyñ -œËDZz%/á ×#Mù÷ 2– ÌeÌW9[†h:ËYPW(qæÓ�#¶/ê¤hB* ëõ¨Ô.7'ă×Ã'Wà3Z©’‰ J‘ã™%Boü@‰Xãbí“>geøžìÍ-3ÆAQø7x›ðo°á£55]üW~O1Ã0aÕHÓÜؽP½Žß}0 fÙUߘ¬Ä—~'ö,,֗ѶރÀ:kÉöÀGø,.¹€‰íKVÜÊÕ×°‡¤y;JþÒcÉîÚŒjªØÀ„ÙŠƒÀÍÿZ§g�0[€uí0Ì<ÛçNJ?Åãx±û «È8':cóÏDéc·DB®"#ÓV8yÐ/Ñ9þuwà£Ý|ML9ÿo 0»Å/ØýÛÿo‚,ójêÿM–dìÿMå+ÿo+IÔÿ›a7,»ih(6'7€ä9¾i© U0¡ärÿo5³à¨C·Äv÷¶ëÛâs¦÷P+ëþ'‚€’„¼Ë8\VÃÖq~sïÕ{=Ùºýö8x囧Û`ë\¸;½<¸»{¸ºã¯¶ú'ߥ›CaúÊHŽyâ0®ÿLüÅ‘Îó<~´ŽñÈouc„FëEÝõØc\â¶-ë6·‘Õ}Îzó>÷¸c<w”,L‚cÏqyÔý±ÊÂDelA¥©ñ«jj´ú}7ÿn‘UÔ(òÒËÕÔ`/:ª¨Áð9¥: - U4²9ŒN@"Äg€-Î.^/X<8®#Ãâ—KxŠÊÙ¤´%W6q8“-¯žPì½TE.ð.HdÊhó“ÏÆ -ì®é#Ю ˜©ñþ½,odÚ0k\Þ@BúAü2‹r‹eBJ±sëL¨œ½RQÏìBú–®êzq–’OôDøð’ÛÚxü,M¦i¢0¥Hr$¾Øh¾±©ÆÄ"7•w–5ìCÓ±ë\Çtñ3£*¨ÆĬ!sÂhî;NUáÃù¡¹ðiæ ¾ïBPòð¼&¬åàŒ¼¢ñ˜,_.¾J.êi7å¾™uMòß±²%Ÿ~(ò-OfÃ’›zOÓ ÈìÚÿøÇ£ÖÉÞukoGgE¨lmsv•â©(ÕF((FÏRG` Þüô<¿þAáaz9jó‡U8˜üÝjT:ñ —«3PúΟ½°Ž§üö—þ·=è#`‰’{’’÷‚µØ8cµiãL¥X팅ܿäC¶äó ÜDŽ»F¹„nbþu†÷*×вvÃõÍG]tâŒZv)bÖrå -qŽ‘–Ì)s¯øþ_€ï;sÿÃüû›qT²i¯™Ydôç³Øåk¡�"UË`�ú»¼åÉMœþ?¶ó¼×Åbò_qÇ>úæãÒúyÉ8çZÇƱË!Æ:$n»~ðApúûÏK -Žÿ$Ȳ¦H‚¤ý• -²T½ÿ"Åï(hñU®a45NV”&×h�›³•¦iH¢Öy0oü' -QÓ_ì”ï}ð|žíœm?ú§ò]ÿðWíÝSÑê8ûßì«Wç zv{×/&y±+ÉäñníÛÕñQý.."lÄZ ³N©a�Â^ØÀf½ÇY_Ð'¤õp"¦c½wÑÿqšÿ‚"0ð/J‚RÁÿ*Òt8 î:‘6èžûLô:àD¿¿>ÛŒöåCk‡½n¨×£“K÷õÐß©¥4<û¨]ïwû:>Zä}δ¾A.šëô_Ø+ï†Ä³à_ÓXú/«‚\Áÿ*¥ÿˆü[‚ÕP8¾!Kœ,‹ -×¢ÉÉš -ƒ—$Uáßÿ1¯þ“è ÖÉѪ±ê>´úuaoœ‹ãFâeûÔy8²¶îºsûrÞ|[ÐûVcør²Óµ½—Û{³ñp×ýöÖâW¨ä€×hgq7ìPé‚cA]ð‰?©Ú3t:]¢¹Òü¡CD]Ä+HrK[£C×ñätC›¤ñµZÖë‘òO¬96|Ž‡zIT„Ð%.t¨EÔxéŠÅJ3Y ~âÓ¾ôg}ŽXKïâ¤)ÇuÒGþ‰ü?ÕpZ˜ÉÿK,ü+èVð¿ŠDá_6¦&�ž“4øKDðo59‹W-ËvÔEòÿ÷Úá`ûúùX¿±®N†G¦ïFƒ[IoX\È5vï¯NÔÃÎÉó.Çü?æø~¢¸6‰ß¿ãz×1+ÅðO3ÞSǤŠøãJ´~˜ÉÿK2{ÿ—”Šÿ_Iš‹ÙºÓZ×|t͇=çôYºiŸûwÇ·5â8ýør·c<^_Ý#$`;ž“•-~ôܪ4;eïÿXÓxæŠõÿýçyþ¿)Tð¿Š4ƒN+Ç·ŽìjÚÞN«óÂï«ÎÍUãù2zØÜ5¶ÚÍÓ`àÛ7W<{¦¯ý…8sº9èEî¨>ÀOõì«ß@6bàZuÖ `>Ò(îh½~ÕÞc}äðSþ/V™Žˆ¿[«p̦õ òˆ»ž\W–!œMÿYþ_Ô´Êþg%i:ü{üUë|ëÕ=ñvoûš±¿sv´çð[wO÷Ã3kÇÓ¶»ö�ÝAê¶'ÕCâ›Ná+ðüì)¥ÿT½‚¾£ö†ë„ÝXåâ‡QÂ,øG€ÏÀ¿ªªZÿ«Hôþ¯É–Ý0å&g«–îÿ&Oå¦*+vCmð–©½AþWbÌ7ϸáù£áËÞÃ=w®û{‡Ûg{·{7»7»Â¾vÞï´Ô5óÂoy@É)Mg4{l“Q=JÅv±b_¾‰XÏŽlĪ2¿öU¦þÞB1ÀLøG—}æþ/Jÿ¿’Dá¿©‰°)Ù -'�Kýe,ÿNUKáWq™ðßÙ;¿u.ÃþóžË»£ÓKõYÿ¶}ÖîµÎÚ¦óÔ>9Ú}¾9Yߣý1ü³§4Å�×IÁ\8€mækaõD kø†ýþ_%öÿ¹û?ÏWú?+IÓáÒzò»OßCxrp2Üyý»ÃÃñvO÷¯Û/w]G‰§W'çgz£†MkÞ‹Z}ùì(ó™XÙ/9ƒ"Ò¦<Øñ#$ê¾l«éP½ÞÔL5©ÄuÈ3Y¶÷éâ -©X6—³Ñ¼±À‚¾Á<W»·ÿ±ü¿àèLš~¯ââ„™ôŸÇô¿ùË"ú…ùÒÿ[MŠùSj@�œ$ò*'›’͈\ˆ¶a¨©à-ïÿyú?‡MؾlúÑə٨mõa_Þ?q…ÃÖÕ#èöàèzwkçªu3 êÁ#{:²¿ÿd ®h|œrÀ¯Æ‘�©}<ÿGo¦IðŸñβüû?"ö1üŠ¦`øWÔŠÿ_I¢ð/Ú<B¹På4ćq²\ÓlN�Ø*›–Ö\&ÿüÚ|º „Çë»C¾÷pÑÚk‡r{©ž £{Q†ž®yVÄõG7PNùÿÄwP¢<C͆~2œ -úã”óÿÕqý0ÁhÁ—€éð/ñ’6öÿ¥þF¨ôÿV’býÓVTÓ’8U'óÐâ@βjÓ–UQ¬÷ûÿÊ*�âW¿r17³¾ê»þñ«¶Ý=ùaw$_·ÝGèÝžG«ë[¿»Ó~¸ù¾5øŸ ‹äT'˜b/ùý‡_.ÄJE?¿Ç¯Øðyl&FzaŒBIæ;ì@Ùï>Ô™;˜Ù!¯˜/ª˜—tðUÌË*æeórÁ1YäN1}Œv1E§â]æ»<ÚÍ»q^�Öä}8ç±.3”ÙH·5ˆº¹¨@Ö¥ƒ¯°n…u+¬»`¬›øEÀ8LÏá*³‹n7%Ž-iö;˜áâ—ëز0œÙ¸yí„Q}ЧFÕ™–+M_¡è -EW(zI(º,àYÖ¦rœ2¶‹›u´Xùpl4³ž«Ä êêAw±À÷±«;Ö»àôçîR·ÛfÛNŠK£ð؃hdÚüye·ÞÅêðlXŸ>Bße•AÇg«æÜ ‹L!Â@€0ª Šøh7ð’š=/•øßTnà+7ðÙßë>›SânðK -“1G’£�¬¿BÖÍé"ü²'<qXøw„…j¥~ “ÒÍzv«XW†¬—Öå8,Ä).bÐp²“£no½çG¨sÄЮ•44qÉëQaÄgrÞ4½(0»•£qéÂõŸsE"»!^˜À²ûj N¸¯³¥_ÂëzÑ¿öD¯ë•ÓõÊéúœ§¥rº^9]ÿ²N×\}A.×q* °ó3,Û51¦y"½-s¦žèØÆŠg©À¿’Uœ$xrPÝ7ÇžÜT‰húÝ-(Hoi<䉑{gEâ-=‡É±¢´4Tϖ㹎W„ŠIóŸ$´ú%õ§õç <“yYFL`À¾�¿'*0¦Æà¼äÎÇçN°‚X´‹q`¢MÜ3n̳¹µìÚÅøº•–çJ}5/žÓ±y©¬1wØæ”5²Bº¤¬’dÌ)ÉXFä…O*ÉÈsŒÌÁ•|qL‚ -d8K„ê¿×׊ý•KFýG›¨¤#ï‘Ž||L‹´4ÓLÊŠ²"Á8\D6L>V]ˆø½´ó/K˜–Ycj`¥GÖHÔã]„Þ HïB/s<Žü‡è–šú«Mrˆ3GzkŠUï“žƒ,·úEÏÓG[_||ûÿÃÖ”=^¹ÿ?¥`ÿ¯Vö¿«IÔþGB%K‘4Žobÿ¿VSà’ªr†š KêÿWîòÚ|µ:"ܘ[âÞÙÓíáåñ¹ýé^^\žÊmãfWkíÒøô\&<»ôW^ÈwIÜÆœÊ":U!ãø£Wûó¥ŒÿzQX_¼Yð/Š¬ÿIQ*ÿ+I±ý¯ÜTx -œ›úšôäšM`Æ"Z2œ`ÿ7 þIT0ØË>ðœ°[³œ yìp£ u¯/¤PJ9Ü^”/”rö¿D-šJúÐï»ò<þUAÓ¤±ý¯(bÿÿªZÁÿJ…Kà Ùg–ÅɆÂs†&pJC††`ªš-7–éÿÃ{�÷Nçx¸%ƒ¾(ìvôèÜ<èÞtî¶÷N¹y¯Gú‰z±Ï§þ?r5A4gôWbÙ;(ºØu<«Ðÿ÷€‡¨^~_'7,èò:õg'êRGÃØwñ4£ß‚mVÖêwði¬~“1]šÇZ“%5î#£ ?äJ‹BP²EÑçÄÏ–-eŒÔ2RΉCJÚÜBe•ÑCeôP=TF¿œ5ðÒ1íš_‡oå>ª/|…x+Ä[!Þ•¿MŸz6Z.|ù¡ˆyšŽöÔ|YЯ3|…˜+Ä\!æ%!æ¢ÁH¹p¢;CmoKŠôØ*—Œc³¾E%ÎS*âálÖ[fäÇÃ"Šï:/½¨UÉ—Ó ªÏIÄ䯗@+X‘;¦ÄN’É®>|…ô+¤_!ýeqãYK˜¬åo%J3€ÄЈAÁqö{Xôâ§Ê£‡3‡Ëžcbn„IY%¼®°v…µóEÖ^…ÇtüÙû$_60•û°ÉWšà½†u§±Ü÷Ї—J -£™×¡ý°"y¨ÈC¾¨"ŸŸ<”¹:›ÛÑÙBAÝ,°†_‘ŽK&Œ"•(ýäãô]âj¥£JÜt••U4¾¢ M¨hÂÂi‚±Ïƒ2óÕ¶GeÐ0Î{ÇÎ|÷¡ü:3–9¸õRYÇ -Wظ^aãe`ãIÃûѱé:æ#ujJ2mR‡n.žxjÕ®"R&¾à €`ÕImfK'}øÏÅű =v2À -ÊÜÐ’�Ñ(ó0FËm'ñ9K'ñÁo{ú*‘[„ò—Š˜é ïŒw;Ûx©‹{q¶\wÊJÎKòºS^;AÿÁN•X5v©¼ö¿ÿWý,þ™¯D–Õøßÿ¬ïâ?œM¶…J±þ÷òä±rÊü§Ì8= �aT6ëÍZv5ãªy—8*Í1aY_Í\W͘tB´.”‡M=ÃY3EÝi1 =ÖX)º™ò"MLÿŠ\ó”—«ˆRÞçŠÇ{GèÆOŒ¸ÀñØxjëÙ"ÿzÎ+ƒ¨Gë´Ú×~MÆÆNYÒB¥½s¹=Ç–»ß¤Ë’u´Yì}¢ëÖœŒ.„hŸ“Ï ->M¿g`×Kì¦Ñì¹Ï{±þry±¿±³X|¬““Ä%’×Ø1Lð…Ëò‘³\áÆÃA”¦tkO@¢ÀW:¾ü†/ÆQî„,Ëa..ŸÚe.ªŠNá¨Gù'†¿ˆšqÂ}æ*Tnu'¿Ç.N¬ñ,N\ÓqV^øóuMŠÚ¼7ÙÿžíïmnáßõXqЀÓYZ+¬ÿ—@lÌöÏÀk[–ùq[ÉòþüøYuÍH]0êðã(‡bšJa'qb?eêùów”9%_Ga¼49¡T¼&e¢µaRf&ð‘Ø` ¸uFçËB²;›_ÅVÁÒA.Ÿ«¤K[âô=*>}Y²xl\òFVúá -°WÑ-'N†ÃÆÙ€¾ÎÊÖiQHlrïËÂ_¥Û^a± -‹�‹%½L -®Å–—c´éWâ)m|èåxʸVsM.¼¢{r4¾v ¬ -7M,~n ûA�žY|g¿Í?ý8E_oЃ“}¿Ì@Ö?•`ü®9Å£ÑEm§’+ö¢_aœ -ãü -‡¾WÒï3[2>~“v-×Hnã„l…O̯4^ã<t²“͉Ï$‰?Ù2é529ùë@ò^_ò²œ*gMäú±`{Ô‹mòg~׿Ÿ(§Œÿ..QYÏEè˜ìU•ŒÓu:Eø˜0QóKꊇšèÐôÑ9p†ì£ñ;¢¦Aš3:4ù¨2âÚO3“~àøX·sýçÂ1Ÿ8¡²V?ýŒJtjò³šs›,ø™fU´*þ&5F‹ŸgLLüSÂEîó^ÍÅXÍ´4+Äê/ßÔÃÛ2ý™m„òd³°añ5ñM‡‡É!nÛBä?Iruà>ãhnå…Ô°ÿ—{ŠÄû{>°)Y¦9ñÛ^\dª¹?Ž»™‹ì0~ „i¢Ðý‰{}Ò0pÅ°€ÅÓ4ý¬Í»e‰Éùxƒê¶nàkf²y%âÖâáá;ÁxÍã58Ë^ÍÞ!i) ß ¥ñæÈðÓ‚ø€eŽ6i1Þæ´pw¹øìDŽéøñáÁ$ÚxQø}þL0s¢Jæ0c¿"‘øë80Ç: òI-è×±q–wAl±¿ˆ03ã¿©ÿIø*þËJÿb¢!òŠÈAÞ‚œ,K -€¥pŠ¡€†�LMm˜‹Œÿöðbo»Ï÷û·û–9<v8îæѼiï]÷O÷w¤ËžxrqïîvH¼—Ü‘Lb½¬}»:>ª·ã\&Ò[‡Ï 0b¸ãzœõWß6ÍðtŠ-•O%ðW-2Üìølü7tù -þW‘âøú?É9“'[ É59I3M»)J’¥Îÿiøo¹¯p4ŠZ}o«ó²¿×ü&^·îBi{¯Ù¸PGaû°ç÷Ï-ÿäH¦pGG¢¹u¨'@ný½ kã‘Cþì—¤4þ+ òNãéw�^Mãðï?€fÁ¿¬òyøQ}±‚ÿU$ -ÿ†%4 $Ž×D‹“£Á5xYæ,M -å¦Ñ€ïŽÿFDìÓñÛ>nö†û{Aãò¹DÜ`ûT¾´Ñòý,hŸ½Ü™àùÑ8´ÔG‚&žÒG£ÂÄF°žTZ«%×4¢ä8¹-:ÄA{)ù%#FÇôŸ\CÃó‰iü#nŸÿŠþWÁÿ*Òt¸ì‰{ߟáºuú}pÒyh¼ð‘bŸž úÃósýõåÈîHØ:Þ¹®ÞÀĘ^Šikôoå'ŽÐÛ1©…;µz&ù±ZýÓM3‰òwr5Žù&HjÑ7=>‘ e%e€ë€ØŸ%xôo*’Àáû2ý‹ˆE7ë-Ç¢ËN²*ÂØŸ<»‹‹kò|-êBú¶†Ï™}?ðé$æhäÃðÊúYóõ0ò/ãºá[£"‚™ð/Jþ¿¢ÿ«I1ÿ߀¢ª)&'©˜ÿ×ÄÿC[å›×ͦڌþÓ?1¸Í`v¶®}íéôæ 8÷à\¿Øn†Gwʾß>ìw/%y¨iß÷¿]¶¶{ßïRV€ØUÔ¢’;’‘Sœ"£ˆÕ&°›,ÕL¤é5Æ}M>–7³0A`9Â&Ø:]¨EðBdd´/é=¨ƒÐ ãî<_-GiÕ8ÒH{I+Ýÿõ <Éõd–Aþg¿ «ü£Ã¨Uð¿Š4·á³¡i[§‡’nÏÂ~£ßÐ:†ÉK'ÃÞ¶ÒÙ:z=sµî÷V-}v¥0•ú8SqüèYViR*‘ÿ!,äÀ|\.˜-ÿ—øWøJþ·šDé¿mò¼eKSLÅ@ô_S9Cã-NxØTš‚%¨ê"åÚ£{©ìßÜϯßÁYÿî~·ªÏæKãZÜÝn5éÔ¢«p8Rùr$ÓëýnœA¤qஉ/�íßê•pBZß ×²¥2�3é¿$²ô_Ó” -þW‘¦Ã)l4$°‘ð¼„#˽»VòÙýéÉö¥}1âÛÑã}óðõ›¡4jXe8vÈH.Ä=³*Í“Rù?ÑíX÷?‡ü¿ðþ'Jrõþ¿’4ãntէצéÚ£‹ÝémN;ѽЄ§î“µ«¾îK}môäçÙƒ˜PKÅrÙR%ô49`6Ž7› U´AÓ6µ½°g…aÔgѾù|½¾×M¿W¥Ti“¸ôDÖy)V)’y9þË|¬C·EzèÇ«Q=,ÔF˜‘ÞóÇ ¨Pl룓'„¾j#U<«Þ¬%¤õD¤ºNÅ%ë¯//Ƴßÿòºÿ¯&Q@›†%+<ωª 9YlÈ\ÓR4h¼Á›ª�ÉÿKÊ6´oï8£ÈìHÀ„//¯úÞÕpð¼ÿpgé÷Wf¯wÁE·ôýÉ”õ?ñ£:è½aÃ…k5Ë +=7 -j‰BŸ”¿ |ô:Ö”Ò§‡q@ÇZ0›ÿgåÿ_ÑÿÕ¤üÿÉ-øf?\_u¿Á]Þ>ú·£³£‹àðnï¥óíâáôbx%ï*Áyí¡;úÓ kJr?C*Òÿ·h0“þËZþËÕûßJR¬ÿ«ª*¯Z -'+ ‘“ ¾ÉÀ78Qš(È芦 ‹¤ÿ¯¨îÑöaÜ5$oû¸+òÇ#ŽãF¼th8»î°Á‹íÃííþ°Cè?:“9úö¡‰-ȉä_¬Èÿ\)¥ÿDa9€Ùï,ýe¢ÿ+IÓáTuÏåäö¸9 -GÆñ¹zòzð [‘s.XÇÓ»«oÔ\ ?>Ò+6¹§òD¦‚½ÏœÖ7ˆºÓ:þw=Ö—ÔFEÿYÑûŸÈËRáýO¨äÿ«I”þCÀ[’Ö€¯¢ÿ -à¹Ùä ªXªÄóÀàEèÿïEÓQÎÝÓý‰˜ÚmûÜÜ5÷=³ñüø:�ßzÛÊÝÐ ºW½¶€àJ=®ÑèÙ3›r äg=5´KTzÈ`ò–ƒùªëkµtROm5„01¸&ªÂP¤,ÖYô«–ØûŽç6¶PMÚ#–‹yÕvIQ¢œýll¨ÊO3T[-,-e]×ÓÚÓkˆgfò&Ì\!^ö»e{Ãb¼·ä}í±ƒyoÄÅ€;5ºâ´@ŠL@À’H‹iDÀbÙûâöU‘ù>Yd¾8ÜÜÄ€{¹Ý£A}ƽrm™]„ÀKBÑìw@{ñË…÷âp>â« «4UAV‹ÅUÕ¯ŠÊ粊íÙƒÝëë ã—!ý*Êꢢ¬†~ÆáœQVÙÀ¢©û“EÆÍlõûî(Sœ›Yt¤ô%âf’ÙÍŒ¨™ã³'¿Š¥™ELÙXš‰ÑìÓüÊœæòcizG,MÄO 0…,óX›uqEC—¡³�v;³eïØÓ Ÿ¯xc³´ñˆþggxÞ/u“\ùÞÏ–Wž°¿¼'lj¸]ìcr™äb{L¥ -Ócz$j¥¨ÅÉ:˜.ñοöÇ?þñ¨u²wÝÚÛÑY/r¨lmsv• -IýjHª -k”r¹è«Ôù>ñIçf=k®Æ$;EF‚'ÀåF†eù¾¾ˆÃà,AÈŒqPŒ:(‹þ9“ –õƒ»_Bj”N†ú ¶<óƒMÐÚB} Oò<ŽëRâ�¹¹&eï"¾1Y?àç˜KˆÝJ\´fƒô ïˆ/Vr–ð…õ‰ý`–ËcâU'ëó8ΨeW&>7W¼'iɼn¿îš´nÆ*Ò$ÿ¿‹òý‹Ólý_Öÿ¯"Vúÿ«ITÿ§Ñ4Ù� Nh*'‹¦ÅE•8!BÑ°U ‚¹ýÿÍ£ÿ{¬žóîñZR»#¥ß´‚ØÛÚrºÝë¶p:<좌ó¦tŸñÿ[ôý{5Íï/qø[ûÏH©þ¯ëwè|Œý?«ÿ'ñb¥ÿ¿’4Nç=„¯nSÜ/Áö±óÄÚæCË6M|^¯„Ó¦õ¢‚V ¾^Ã!†OüZÞORøÇaÖ#ßwïd&ý×XûI©üÿ¯&Qú¯6ðÏñ´8¹É®)6DNš¦ª‰–-ÈÒ"éÿÖö17ü.¼¾^€£o'BÃzj]èÛƒ½Ó‡Fk÷`xõ¢mºzcÏ|1 ý'ç2¡ýWäG^0uÃ~àZärþV÷mt“@÷jZuck$‡k•U“Ö7ÈpþK6hКÕùÿø‚ÿ_Y… -þW‘ÿÿ -´›&§ ÿªøÛ²8MÑ l³ ·øÿŽ½þÖèE;K`’ˆ:yZýHè’\b=4‘´oZ[Ú7в[0hõFW-ñSŸ^sÐôø3óð{¿p܉LIæ€Ç{ãnØ!˜$DŒ‹ª¡”Z -Ø™ïÐ!"*oຩóð5:t ¢~Iãkµ¬‚.y&™X3½·ðo'Œ¨Ãñ$,A:¡C¾ŽG“.]Ìx d¥ú‰Þ#|éÏÒ±»áX¬MEw¤)‡šjYG•Š©ÌþkÑàtü/í¿Q•UV%Ìÿ©Råÿe%‰âËV Ülδ±ÿGQ²¸‰ÁSÃóÇ*`÷·Ù ·oîööÚ~ë–‹v-á`'ØjD÷G—//’{ÀÛ¾?øvú¦±%gí¿æp;þ9ÅÞ‹ y÷«~%K@3Y{/2•ÒˆÔ©TYàîÌB_Á&~õÍ«²ï—i¥1¶û'R_ªÞ2ê®Ø¾¾æþ-Ò’‹´Ä”÷ž“ÿìc 6óc™Ãz+FuäËÊ’«²äʯkeɵJK.µ~-C.z¬õ¼™rŒãÀ�±È®Ú\`’òÞ´N+c¯8¿²,{z%DßJ©T’ù.O%óJW9r—SJaÉÓèlr×*(†}mV -¯®ž[ÅøVÊìzÁ¦ãm&*ïâe -ŸÎÞÞËBo_{{ ßw!ÈjÆ—cJª¶´Y/»%E±œNƱY¿öúÃuÂ.£L¯Œ‡´Y?+Ô\mÛr]\÷-Fü‹Ÿ³ÔÚzæIËhÉ%1‰³ÅñÉÉÕb¹_Ô×+bÓ‹è°Gˆšä2™›ÕaÊçìR·ÛfÛ†>¡¥f èp¢Aió/DérÜz31kLõ>¢îe•AÇg«ælE¦qIˆ&Q£ÒjºÁ*™ã>.)‡»"°•~±\CÜbK{Ž?=-+«î°tðÕ¶ºÃVwØ…Ó>‹¥C[gÊJ½d؃ŒIU™Ð‰ÛÒ±%v›(ÊYœÍ8ÎP²À@NMžèÑ=Aÿ©ÿãïÿ]€Ø¡ãã'¨µüý¿êgñOÖx>À·ÎµÿýÏú.þ“5U$…Gè?õÿýŸ¤l‘N<v‰=}ŽÔd½x0[òxÔý!ÂÓŒÞ<>ߎå:Ù ®4²r›9]5|IGŽ…×”±±0^bàäXªØgCnÓl¡Yü<Ëšqz–)}[”MtiŸË²ŒfwâSG£ªè Žz”Hðì=Œµˆx1W¡2 žXü>ÿ_îÉÒ@<}V¦z{(•Ó/ -+¡1N@JP†Jú^rÊïÅ/‹›*·é —µ–ýžð¡¸kÚEQö>ÃÖš°,¦ªÜ¿Lá±dQ+vK¶"œU؃OŒµ²Ø…ÙÄYÈ%}F‰'ü>dS²X??ÂaöB`3RµÎâSÔxÊA“¦R�ÅIœØÕ¤²ù;ˬÊó×=-“LF:<*uQxuRÏˬ%{ò‰q+©Zq„IúLºŒ#\¥CÔOá½tJù!˜¥Lº¸¹uÒNsÙZ˜Rf*”zh#ŸiwÞÙÅ»Ü06“íR -\´ÅSbï¸4z:£J–^\ÊX¦D¥Dyí¶…öÓ£F>ÉŸ¹0‚q•Ì|¥Àï'oã¿™yÆJŹ¦áãŠ,"«Éæ,8×éÑU^-£¯j‰Še™nD�Ã>:IΰDƒÂ“Þü Æ8>RÙ‡{‰ù˜‰0òºŸu¬h~e}–‰ôÇÇJ2œë?—Áö/°9%ºt?ÓþŒqèOyî -|ßáÿóÓ¦_a:c:úóÏ«ŽU„û]˜‹/êá ×#jSùk;@91AÙ¦üj³ ¹«õ@;Ý‘ì;†]ÄêÆbÏ:ù-ýç ‰êÏJ|ƒnþ×:u‚N˜-X†ÛV¬é”õÚJײ«—øÁk -ÞO -à²5Ñí$[º/êF†ƒÇþIØS½£|(Çó/57Ÿ,(H|©pÂXë‹8C¡W˜Ä3LîTd@]³óL†ça½c÷mãšààÃÎyå>æçMeþ¿Š"P´O0³üÿ©¼ÊúÿUT¾òÿ²ŠDý¿ðv¾ÓhpJÃR8Ù ×Ô,‹3š¢ *¼5Kyƒÿ—7»ñjŒúQÛVo‚Û8‚ÃëWÙ;S†v mE/çOÛ[Çžãu¿‹ûB'ãÆk|NË}y%®aRT.ñ“üx›¢¾¹ -î» -2›˜~¢µZÁgÔ{ÅËð™¼oo$$e -šÑVëÿ‰ç%I+øÿT” -þW‘bÿš¢ðÐ8 -'7eª(r͆¦*?ófÓX¤ÿOwë¶Ý·Úg·çQ`_œwõøáâà`ggtwé_ðÀ´†ßŽÂتQªÄ¿ÓŽ×ÁÓ5ÝTâ77 -RçSŸôšòÑËûéSìÿ?~dÂŒŸÞC{LØÁulö±�d0þeADð/«èÿMPü«¢$Wð¿ŠDᘪ¨H¼Á)ªÀs²€é¿ÙÐ8ÕÔLÙh4[›@ÿ)˜Íá�n:BØqƒhß{Ù{¸·´=�úÊiÓãm»{âþË®3Œ:}; kÉk'9ži@€]ôc|‹c/¡Ôbo‡œò«ñK*56ùÊ΀Sÿ߀`Sz $¶¡Tè¦Çù?‚f¿"2ô_SÄŠÿ_IŠãHš`<϶lprCå9”8^–e`ËM@õÇü?NÿðÔՃˑdïõo‡üÍ݉ªwŸtÕ‚¡1_ûÂhøüKNiŠŽQQjcE« 0†û„íŸÔÜ ˆÍ#aÇþ‰°Øy]XÔŸqšÿC.øÿ—… -þW’lÇ…Q�¼Ð†žj^»ñt}U%+l˯gÁÈÝéì^<^˜§®m†·7ÏöþÕëC[6„ÇËîü¢ óK$–þŸJ4²ùsäúÏÞÿ5™—*ø_E¢ô_švÓ2ÎP€øÿ¦Æ5d[àCmC6ä&x¿ÿç9œ>·G£þë•}Õ½øÝÝógNj6ŸÎìãèhto;çÁáÙ÷°×ò¨ÓçòSš’þK!cÝRh‘/þ5ü·„ cJ¸€ } & ÿÇ:tôþOž|° !‡àY‚™ðOü¿“û¿È‹Øÿ»&H•üo%)–ÿAÄý«’À©Í&ºÿ«‚Æ5%tÿ·LI‘dÍ�Í7Éÿßÿ¶{Û½2ûŠ2:2G#íþè´{¶w¸wï÷çÖck÷ûÍwé(„Î`?…ÿôtÖRWñïÙ—2¤êòÿ‡œü߃?rÀÓ{6ÍŽÿÉÒYP«ø?+I3âÿíÀ³ý«ýfô]½yzí…W†vlŸm;Êèìæöò¥u"¼À#ón÷Ü8®…(l—�ô`”˜á‹"﹆ÕÒ6T!.¿¨×Zâ~+±žcÅüž�±¾å÷°3Ò -k8Ú¥óúI…N“Í×…ïY)åÿÍ`Ñ`Ÿ¦Yð/Š¬üO”¤Šÿ_Išÿ¼rÍ{‚Þxýv÷ú²³{yó0ú¶}38u-ø*õ^Wû·ŽÇË;µ¨‹=7ú.ÑkŒu ‰Û"ý±²4±Áól1 Š -E¾©¢Ò^‘¯•Ö7(/å»p=5@\0˜Íÿ³ñe^¨â®$Qþ_ U%™kò¼ÅɆ&r@Ó$®iš¦%(+ ¹È÷ÿåõèøÔ:ØzÚæãá¥u•kh<öƒƒFGwo¿=uíþÁ«ÿLøýôd¦WüV’CxùµŒ€R}åäm2£·ˆÇñè¾vˆð$þ[¢ïôñ¿¥ ÿ'ñJÅÿ¯$Íàÿï¿…GA»/\uOù‹á ÿíÐ<{=:}ÞÀ—žÒ8¸ºúvÒöµ‘Y›¤u>:}=¾kSˆŸ\=t:À.¦“ÌC®ÝÄêX–CMlj9…“÷¬!ðLÄï M’‰¤*xã"„ -ˆj…#0¿úåÚ%^Eá3±ŠÇάóÞQñÀsf¥.´Ÿ»Oþ0¯ÏÍÖ3uûF¡î:C¨Çý¦}¥NH©4ðF‰Q‡£^x£µ às€ï9±‹Y‚á,g¸YoïÇËÙhü—gô£+lÖ¿aîˆþÀž·»úCÂÈè쩵« ?ü‡ŠþPñÕl³~†C@ô¿í´Ú;5ì-ß'¼ÝÓÓ+’´˜Xñ¾uqµ¿}´ƒ»OT´.w¶¯öOñ @H|Z—ûírê"à¸hÚ;Wý£K”E±O;šÞ::Ý><¿F=à±0eîîï]_àtD쇴Þj·/v.ñÇ”>mŸ’Æû¸ö©:h¨ß[xœ!1:¾lãi=hC·°y¡bR/¯.NOöðô6ë;ÇdØýéÎVÅ1UöOpWO›õsüúâ'¦ ëôˆ-“�̼ÿ ‹ÿÂÿ+IÓñÿ®söp,ÝX[ºv[Ú–zuôì9úµyoôࣲ'¢õr¾½´j¹0Ó0�ç9ñ¡[‹Q1&Kë™]ßû,ùè…ø¢i’þ'¹®\ÿSáe‰êª•þçJ½ÿ5aXMÕæÅjbý/™3¤†Êi†iJвÁÞ¯ÿ9ÇPï|!Ž»‡ž÷ý2h÷Ͷ¼}vôÝþ©Ðµ-½>¾F{ÝãñPNÿóå`Çäþ`>ýÏê ˆ¤Tþ„K¹ûá4[þËÞÿD‘¯ÞW’¦ƒå•ûM;9y”Õ~×~½Ëkû¹#lówO`/¼Þ†mÙmœ{çnû:R߆)EÙ¬£†í£h€A¯aïtiçypýèUù:)óþÛýþRn�3ß•¢þ§RÉW’f˜eß@ín Ÿ+°Í\Û'ƒóÖÍÞÖðîúäþlßñ^£èô䲶Í:>¸5Ï_Û¬{¾ãK@Äõ± þ+VíräCò‹‹ž“ZÌu™ŒžÏd˜XÀ›Ïñ˜VÓavÃqÎG/ö'L¥ö±ÏŸEè~â4“ÿ—Ù÷U®ì¿W“â÷Ù4ÛF\¿ÑP8ÙV$®iC™ãMÅRt@{´Lûûþ¡-º]%º{£Æà^èâñö ¹Û>–_:Ú¸>¸Þ1÷Çö¹SšÞÚ$wü¸Sbõ±Fo»›¹6q•µ¯¡ô™IeþПÀ—eÜÀ,øW%VÿC•êþ¿’ÛÉbÓ2›SLIE÷`rM69Ó´ ªI†eCm™þÎl»wε¶._•h÷á¦÷=¼ÐN`8ðÚÞŽ3ú}ïÀÛzp‡';ÿ¹s:§a¢ˆ\k¼@”ÕÉ8‚ìŒúªÇµ>¹OˆRú?ðÐàzþ¢X€™ô_eåÿš(W÷ÿ•¤Xÿ»)5 ¡iœÐÐN-“k‚ÉÉšj�Mj(M8·ÿ‡÷Ðÿƒ~ôàÙƒÓã(´GG÷öÅ?íÀÓí«ãèüÅ}õ<ï3·3öŸì)MY€Øó‡cûOÕÂÿ ?±—Ɇ …¿�3Ëÿ3¤×{Ðr½JfÞÿU–þËŠ¬Uð¿ŠDáßn@* -àšJSDô68`7Ž×x¨ˆjSnZÕÿò^‹å“‡Ûý[½qå^©ƒÝÖ ©InÏ~ì}{t¶9Ñi-Jïé‘ÌðøÔ!Í&AÒ×Ç/}áˆÔ¸òoõÞ†µq‡0Ñ·M§’-æSJÿ±oÃõøýdÕúŸBAÿKÓ*ùßJRlÿ UI6Â5 `p2h�®¡@‹3EhŠ¢%›ª´Pø?Ö·º ÁÛ£ësùù;¿×¹ÖO¬“§Ç×ㆽ<€mk÷¡ÙóbýOz.KûˆWNöÅïûª¥¾w¡U|bŠ©:â¹—Âm|Ñ7À²û†!ö6º(40óþ¯ü?ŠJEÿW’(ük@„͆eq*¯Xˆëe®¡€•Ày¹)i/½ßþ“˜÷ˆ”ãëQ²ûLJ/úËËÖ•ù*^ BûH¾Ý¹¾)—onc+¼³vÃVF,ßr‰@×ét],€VFi|‚L€=mq‚T ¼ÖX.@cÖ“ò9$ñ’@&PÂÿ»¾×Y(0ûý¯`ÿ)Jbÿ«HþMMK59£ÉcÿOr“3lCãxLhK²*Ì ÿóпÓon»[ƒoÆÑñ³´í;[;÷§ËQwwk·g×7úó‘iŸ~ÊݼNûÇ™3x÷·únýá·zÅüOJ±ý×2Í?f¿&ôÔŠÿ_Mš§üøÜ==æ÷on¿_ß·_5Y¾3uç´+i÷Ý;£ÕxÜ;í^öŽóè!Ë0µÔª aàØ#½œ$ çG(wob£—öŽC¤Åv}†Ï~€ B+0ÎŽC冞VÌy„æÓ^²‰‰8Æ…À\{i±çë 4põB Œ´FƒŒÒªq¤Ç Èbµ´^-ž~F]?ñoçQn"¿:ûâЂ4T™çÇ¥a@¯ƒ<ÌyŸ!úÿðcá_”öߪXñÿ+I3ü²ísÂmçù(jvï.¼P×̆p©J¢¥t§ÛÃP¶»ì©;¹x-W_"b©„yÞød -b£æ˜´uãìã >x ôæ’C¹+UJ;ËM1ý·]ß·>LÿWâYøG ‚ÿU¤éð}g¿Â3á²ñpØkž]_lÍ;?vxrÉI†)Þ\žœÜnß„5t‘Ð}ÏM .¾ëú*<þñìx–ÿ¼Y—°“Bà’bú+)…ÊÄêR*ÿ·Ûþ ÿ/‚VôÿÂWð¿’4þ…àõÀN÷åF7tå0 --/zhƒÓæõÖ·Û¼tÞ×’]DÇ߃¡îB`·/bšˆ÷ó>zæUÂ)çÿ%œ~…ïÿôYùŸ*Tö¿+IñûJ²`Zœ¥�™“Õ†Ê5DÛäU³¡Öl–¹Ðø/Ö$¶O.”'õöû}k/|o÷®°˜»Çý³çÃàúô´4oîdŽ}Àds?0Båf®Ã?–É,‹ýŸÿšªHü(¯‚ÿU¤f¹òtqê%ñtçipq·wd¼H—}«½7xziºúëAt2tºOÖv'q–À ŒtÕÇ`¿ÛÓ:4:.ñènûAýÿâ#¹?Žq8Þæÿ«ƒ¨þ±GÇMò¿–¾…î¿sä=±ä“ßj¤¤•6ùq—õ‘?« ™Ö ½zXég¶qçPé¨îùÏ¥M ñÓËíÿW7FuÓuÌGÄíÔ£®b豎fgúýÎÄÁGû Äb·ºÕ´jþ3žM-33Ú+‡Úÿ4ûäôjg³~Õ…ùeôíüÈP¿ž¡% tDäéçWéˆàKß `ˆúGÓ€uM}ÕÅ#{v\-Q!øºc“Ò&Ñ°¬¸1Ž«gAÐc–ùpÑ6™ÄcMÝõ;¨ëŒ¿%2¢’Œtø#GM/ßbwm‡¥¼Y Ìηí|߸ÑXÉv &ÄsŒ„û#û‡9qÜ.D –:)"y¸¼$d$Éš¬×÷£ôh�;‚Á|§cm¾Ã1AêžGU¤GI¬ñz\ ݨxç~ähàϘŽò‘Ó0¹ïõ_þ(Ä+EAüN¯ñù˜4ºÇ±²='‹9<ÎÆ�h°04^|#¤½àùÒ�Ëtêd¨g®¸³M¼Þã¾ç9d¥o7¥$)vGµxtÕh—ð2ᦓ‘‘“Ç.Õiú짩ðÆ·€“Tÿ׸ÕÄv(nûß–uÄÜ…‹oN ÅÍ`6tÌA ꌎ@:°xHëõS|œ•¤E0»s4!Öµ˜R †ø‚AnZÀñÈ1Í|`øÔ:ðéFÿV<9¿‘cG›‹W¦wlX|-üèm#ëGvZ̬gáZND¡´ðê½)$»÷–³v—å–JÈ%=É8¿Ëô‘˜-ÞîG0£;±Ã7öެ˜³·;ÇdU>2Ÿ¤µ…O(ixÊŒ–rÿ/ÿ5ðl¶ý'ëÿEÓ*ûÏÕ¤ØþÛ4,(¨gÂfƒ“`rP!©Á†&ÀeÆÿ¹<¯oÃéÂlXÂHêÀçWÐ:¼ - žoo%[;ºò´G~ÿ«ä”Ž DhÙc€•µø‹Û€&þ¿ñ¿ëÏ]_ñ#¾ã-2ètø$Udáa„Jÿ{%‰Â¿i™bÓ0L®!Y†ž*B4Ô¦iò‚m[Ë„ÿpпwÀóÉݳì~À+;ßo¥Wépd·ÛWwxyÜh6ügj -ó7]m-¬Ó\Ê!¬Õâ¡ÐAämÄ.Ñ#$‚X„aBb*ÎéùaD.1ä”1é5׉ü¸uoÐ3°tÌÎÕZÇ.';›Élk¡a–%Ô©ÿnD€’ߨбOê™Õ¢K‰gž4˜õ+9n·]R” ·ìg}?tèð¹º>Y˜0ñm·š_Öµ¸Œ6Z'‹7þE‡Šó2Y“f?®/ó1âÃë:}l¨ïe;?è럓¿3eT¶˜œŽµLIìí6C -eåc¡Ë©“éX«1I¥ý¼˜îÀ‚y÷ðdhØåvv½â,â-¹XAŽQo0e…À}w•ôS¯<º_{Fe ë:ýÐ ËÊÂA:¶ÒRTØ+ËïF=·˜{¨=¿Lq‘é‚0œPF ¦¦|L+ÌnÂôÝœOÿ|ç�³ƒi%U¦u•"9\†Åîz}lÓ•û¶ëXP -‹‡³õWøÅ2ò==ñ×Lgãc®gŽ3¾ÒfŽ ú™ãÎà’eÛD ŸÏ‚:võ©ãÁMÏžñ “>}Ìv„PžcNë ]ÕzN¤ƒ(ÂÛÕê÷ÝQ)`-ø¤”]’l©žF‡Dy9ؤ£ý -S,q‰~ÕÑZ¡"©§#`ÂZüÌ“"šI+ÐdK1åIŠÛ0-§ìâ`M…ikƒË7SõB¼úU¦ÃdàÔ±1Ó.äB³”¡gJŽOZˆ÷ÆI7“ä÷XüΖq=a-‹~ʇK@öœ]Þg9ÔÄZ!¨±+"÷AƒÎHEyJÇbª¸ží/ò¡ç¼2ؘ³ÌÚ2¯(É}Í,|ù¡T³0šÌ`ƒ½,F¡ÕÞ¹Ü.À\ž@– )ž?j�ý”tCzMtà \ûÚ¢O::O%4RFf×b&˜ÙEšûž],|9ÿ’>Í,¹áû.^¦pܦoÂ{*°æÔô}ðúÁϤ‰Õr±„*vëôÞí”!è\Ý0ÊreKýç_+ì_žCt¼pôÀK!/ÙzNPð7ˆmóè(¥Ÿçt”�Ö´c£÷Ý8J!ü Ë’ZþþÖ¢¤Ï!|8¬P@äùäö‡å¹ôA StgÕ»�]Ñ\Ü&NøEŸpBëùŽPÃúxñ'ŸÞI3Y$à4·¥¡4Kv—õpÌ©Ò)ôêôÝÒKCòŽÕ‚Ãü>Öóʘ¬n&SulÊ"‹z^é‚à„:9qåxC(~Aœ‡B°¾å'í‹Ìhô±c€îTŽÕÁ\0ÝÖ7¯jYYraˆ¡¬åº“‹õq'…Ã/ ñ¾Ÿ- £‘[àñEœºiÌ&i‘¨ì3þsé(k¦¼üB’"s©Âàr#CÓWDŠ7I¥qf.P[Rƒp¤4†Û´I“ -èªØëQ07?'Ä„GÇÁàâðkŵph9Ï,¹Ë¼»hŸô²Yê,Ê—Ä!Ùjã–ÃTTDFµ4wnÞ¼P}¹y¡» àéÜø_¨(®”%OâÔenR¤BÒ¾8a;l€y‰d1!åÈå–Kè_lí’95\}- ¥n&é©rùôjªØÀ„ÙŠD3;£¶^K60sD²’Pút;–ËjÙéOð±âÃñÇcá¡«É�Q’ÍRlÓXVJ·*ꂈÙJ×ïtUv¼t§íV-é¦dB?׶®Pþ?)þvˆºB˜]éû„f¾ÿÊZÿK°/p^乊ÿ¾’ûÿ±L£ÑLÎäMN†¶Æ52ÏɆ¬)š%4…Æÿ?óÄÿšÃ°º·}zÎ=œ‰†e|k)w7çªqÕض÷Œ§`ëîðôr[¿½“w¤ûãÔpþx¦Ï@—$7¦,cw_Té¬?˜+8ñ—–êdbã.Úhü|!þ—TùÿYQš–†h†aðÀ¹§½ÖÕ¾aÁ®½ýdoïv¾_ðOÛÖËËM÷ù ˆ‡[ßÏk©È™<ÔbúªúÊ×L*Ðé#ö7ð‰x'¹t^1cI~Øè^®Ë¼Œk¦¡•SO@島ñëÿú6£—è÷¾×ù½ãØ¿?ôáÿéüŽ:øý!üÝ1ýßÃgûwÛþnvœß €*º¿[®û;|¿ƒ°ÿoÿ߆ƒÉqü8§Þ@ “‹j¦‡ÆMfôoÿ±±«ÓWµ?ýSûtûêîl‡düùOñ¿ˆÿóŸCõg4þú‰Õwñ£ÛŸ6hæŸ6h¬2†ªÎÔ@¿þÔÿ36å‰ÍTÿs}qTÿç¿à¡ýsýP£ -WÇ -dD°˜ˆ!â#þ´ÑGÓf7È`Öjs,5:õ.~tFÿD]„+»>æþE¥)ò•÷…/”Jü?±�ÎX•ÿWIbý?*•ÿÇ¥Øÿ»Æ[� †Ï–�äd ª0± TMÙU`ÌÿiûïÓs7º>?ëuLõú\ÌùÖÑ]¸½sð þê‚DkpÉ]=v/=’)—÷íêø¨ÞÎ9$CI}?Þq=Ϊ٬´¾AbÚ,ÕÜLÿZÊÿ)¼Æ“øïjåÿa%i:œ==7úó};ËË(/.nöš<ÙS‡WÚn÷iW7”íÓ³½GÊÿa„Ä52…Æ(�^ˆ}°ëÐë¸n’^ÀÐKã.¢¤ßÆþäDcàˆñäÈfÆŒÙj ±ö/ˆçÁ:þÜ¿‹gß[ÿ—4Àiß_Ë|D(}ì,¶EýÍ ;ê¯[Á Üu?èOtáFf0áÆ¿WuIO³»ôQÇÊÎköYc\Š¸¼\˜mô y&Â$l¿dQHup0ƒˆFŽ Âxb%#Æcpz}¬ˆ’g«Kõ=ô×B‘Àý_ë¬ÿY¨ôW“bý_¹¡ÙÀR8�l‰“¡hs͆Øà4£aªMô'oñËÔÿ}}px]ŽGß÷µ-Op¯Ûð~4:Ý¿‡ÖÍð©w õKÇ?ÛÏèÿ¢ƒÊ*ÿ¢¬9t~A*‡Æz¼èì "¤×,H¬Ã=]^²JñóH¥È[)òVŠ¼•"oQ‘W‰Ë*=Þqéõx™'ÅÐàÍ)~äõN3žV’Dè?Í~’/~ú¡x¾8œUêž{¯”O+åÓŸ_ùtÁº§BSã9^@ÿ+S=eƱPÅSöÔ¼]ep~ÕЂBártB™n>>h¥Ñ9±xi•Ž$Õ‘ÌÒ_[!*Ä c)CœQËNt’<`éz¨'J3X»/#à µ0¾éòuB®½ûù_©ÿ—Ø{ë‚Ü¿ÌÖÿ+øÿGTú+ITþ�o‹šes -�'KØÿoÛœ`ñ²¢¼š`™ò_o5]Ç}ÝöDãá´œ{»íþVK³¶¶®.»——‘zrɵ¯Çþ_Š§4•oS'½ï/‰|wª˜’v]'0$þW„#�Qå„ŒÑu�cÃŽÍÒÿxÁ¿Âk¢¦)2yÿÑ´*þ×J…ž7-ÅPyÊŠÂÉ*´¸F³is† [5MMsÃÿ<ú'û‡[‘úø¬Îº'ûüSt!¶½[ë]žvZçÖ‹vÞ”/nóZü°{†&±à^«Ñ³ºYֱ߾–‘”Ð?ut%ñûcŽ(›K™›4ð.-"™¹âŒq´`RœNø•¸U‚#†ôa¡ÇLÙ;úå„é=·Ð#Êûñæ$P¸I= å¦Ua\~ò”òè7Àa ~ŒÕ+M3õÿTöý_Õ -ÿ¯$Qüß4šÍ¦©!¬/ -<'[bƒk6T„ÿ-(ËÀTm¾i.ÿŸ‹@z°ýýï¼-]>¼Üª‚1º8ßý¾Õ2ú¯wíóSçŽ{ô|êïŸË”¹;Æ„ÀC§CØ1Öžã;t©l8} Á^òO•Rø'a`?&þ›(±ñŸDI+ø_Eš§‘Üèl_7Û¯wöƒ!Óý§oG¯Ý#~»»åÞvU]ÙRÎF~3jtjÀuýgÝñè ¨ú®¬Œ…X¬ugv!æçúÃuÌ:y}?�Ž -ýâô=j/RÅ€\UZß Ò³uú/†…G¨Wê£ <þU™¥ÿŠVÙ®&%ñßd©!Ù64ˆî¶%p Ùhp¦ H¼ÌÀVÄ7È"ã±ø‡œ©ü€Éñªaì¸wJxØ븚Üïw®nšÒN$s;»£çúþØhÜÕâWîü9Ñ.ãΰëÌÄòÚôrȉ|m|ò®›J~2mŦòÙëî³X#}ŸºF˜üÒ¿øqÜ^’áôˆ -W²ž¼ýspˆxÃqT‘c©ûŸÓÿµ´`ÄÎ*õ5øÿUDUT…—©þoÅÿ¯$Åöß²`V³É‰‚ÖädE\4œ K†,Io€ -Û ˜â` ˆu¦VŠ :%VåsK˜owvý–°³}ðzx"ï{í§§‹óSÎw£ÁÕ{xîíܵÃÆ€J˜SPH®»iF¢^LÀ<t¹n‚t0à÷|,xŽ|Å78›š¨PŒ¤Oì}:}bF‹8ûtWª–h2Ïàsª%¢†Üôô.(¬»pˆ·¤+gÕ&¹!%½cÿ0¤ dtüoò—{÷ˆ"ïÚ úOýÿï¼JA?€C‡º·úÇßÿ«~ÿdÕĬıö¿ÿYßŲ(¤ø<ûßÿ)*,æGÃβ¨w¯‘ªíãl¬qH6fmÚ'©bášòZÆßê"ú¯ÂÏóŽ.s*S; ‡U$ꣲŸ‡ R’|}Êz«{�‚K6ëÍZv5+-ÖŸF‹5òUüЖjöÍðM{âgèJJzÆQeâ°…#ÿÉ6þ¼ëã[:¡Guêøäßÿñ³À{üçz7€ö¿ÿ3¶ƒ776žŸŸ³†p–o†$X°ÞA<Ü€Þ†ƒˆþ±ÿç?c¥‹ú.ùÓø3&z˜±BÇwà¸V -)¶§ÉìP©·Ü:¥ƒ.Ñêè̈R -5ŠŸò¹}Ÿúå²Õ3™!eNÅÔaÍ{8(ef–ŠdÎ lí%ÃÓÛüP*1A×ô{$–œ'F®ùX8K4·üüÌPšf>\ññaõ°™ÑLÕÃ^¼ú{¡ÿ ŠºoµB˜¹ «7B˜º_Ç!¾ä°;g¿c'‹_~èN‡3¤ÆÊß%þšç5yx—b{¥×^éµÿ -zío5lšƒDO³kšAO?À®i9Е -ï˜eMòß±°%Ÿ~(®.Of¿íìRlí÷1·²küãZ'{×½UGek›³«T˜ÿWÃü¸k`–tPÑ„‰Å³uÊŠÇS^¶ïz,±½'ãJ¡ÄÔjâ§MŒµÖ¦3}ðÀ¢!0¶ß¬Ì³’‘¬Ì<«Üv'p×éÜе(̶@¬z¥ÄW)Ô<Þ·šlÙZY‹-ú»–z,ëØ…1bßpì¤`ü€#æ*2'dùÑßJa6ÈØ¿^'B™b)Š,G²O3†0•ƒÉÀ鸙élÔCª½þÒK°"RaU²«7–½aãS)lÆÿM³“Ç¿dÂ+ƒÅ÷xFéqÏÌŒ9îg ¿Æ÷~RðF³Äi{”ò–??JyÃû^ÿ{Ž[µþ·¦ˆ¢ëˆ‚¤¨Dÿ»òÿ½šDõ?ͶE[Ô8‹—$NnX×Ð`“³š’dˆMàüþ_k¬¢>UµñÑ¡¨Ñ{p§}plÆyÔùÞT[ƒ3xÏñNplê§@½íŠ×Ò!â"©j89³©’ù‘(hŽóÔa×ñ,À¹<übFOü}â!›V¶rÊögSÆ s§Y¬W74XöâÇ?Î)›í¸43åqæ²ïúé±É••e¶7·]'/ݹ1Ì}åÍòæ¶"on©ËÚXÒü·Ãfá»ÐÂxfCéIþƒÅy]¤ùES€7ö¬›ÿbDcÖ2 —2Ù ÂÛ&ºo÷Ñ¿¥@‹»ÓMD^ -EZîb¿øûRT㧔H“ðlK!„¨²ÙNÑeS8°Ë²©æH!ÛsE£\^R£Q>WòC˜°‡8‰‰[˜êåÛŸ—îõûl+{CÈ´Y¡àÏ„‚qHIÇ|¤ºthòƒš=þg‘oŠêÈY)`ÐIßeKÙ®¤4ðŸ‹`A7T¢žZP&ƒ¡%ÄîÇË$δœ¨¡êTÝ”Ad²ñÖ†°ˆ¨>Sžæ¡ùžÝú@úÎxGóã¥ë9å„翇Ð1ß}8¡cÆ3‡sáãýãr¶–ãe¸¢w4}~zWxž“»BQEí*j÷Ãî£ v- -"Áj¸%Xç¿K3ß}8–fÆ3K_æ?¨Ð3|…ž+ô\¡çe¢ç¦z›:Üt´\øêC‘ò4õºI(¹ ÌW!e2ø -)WH¹BÊKBÊE]_Ö7M‰_‚i_Rýéd›õ«ÄûÍ”ªx@›õ3ˆCsc_I·ÚÐL'«7 ™J¦ÐL’©\Cľ¦’ªT¢¢ù¢ŠB,‘BDN"v¶—E„å4"i{³Þƒ–3ÈŠí窱`ƒ:{Eð],@t*rú¬:{®-´?¦|Î.u˱m¶í4žhñ#â2ˆ°+¸´Í¿$!Lë]虌 -Œ¾Â¨¬2èølÕœá¢È"„#ÚoÖÕ1’0»Àë”KšýfrYøìcÉea8sËmúQE/+zYÑËŠ^Vô²¼Ë¯J/q˜ŒµÄ™hå ÌW&¤‰ù$O'ójœY2æ¶y.O"Þ 'ëì(½†ˆÎ9ÞÇP¹Q™ÓFl m'‹¸ñ׿Ⅹÿío¬è`EM:ˆ}¡3°Ôb:S”Wõ2óõ\Sí¬ìàcI"‘A‰)p®TÇg[ÞýÓ?Ž‡€¡~|¹õlìí>ÜŸŸ´îĦ`xçsï¥{'~Í´¢¸-µ7DøÏI³–ë Rù$Þ +ŸŽïóé¸Hï»ã84UîS÷„ ©ûCDG2V‡?«Ç™.çq¯HVãâa¤Î©_¹ì„çt™õµ-?(™É"ùÔ»æÅ2‰;5v짰Ä|–ß”DN÷û¹JSBf‹r£’¬Ûó²ü©”ìȧöª‚ª¢3;êQRÊ©ø¢Y—‚¯<¯L,~Ÿ7®¯¿ÿÓ «r‹‚Eb¬²Î—‰±˜M©0V&Ukaþ…I¬8ÊV˜êâ®Ô*mA芎d²*hq. -O•÷º,,UXí_GUžîÒA~€§;‚©Ò¼Õø¹K,Ws£¶‹ŽC2÷Ùò{FÊ?–õÔð¨ÌDg¢¸ÔÈeÁ±ºG‰jDò¶UxšJ]j¿)žaÆ£ -«$4¥äm/ €˜ý€œl'à:âñÏ‹xÙ2*†N‘Ëú`ØGGÆŸ@ˤùÉÀêSÏ…½ªü4s鎟g¹’7î2뼟ob®ÿ\Û?%MœT‰Zv~Vsî”?žJtæ~Þ¹°úù™üg€°œ>pJYÅQN -M‡ƒ=™¿€á”ï© Ê8²¹]nRGdqæ/éÎ6ÿ‰}¬aYvè–¬åOî*™=§ùG‘°‹øĸIP=Wøù|ø21ÈÞê—3ÿ«ÜKçbýœ’ bŸÝ~Øç)E_Œ+YöÁ‘ñÍœ_ïœgg—¬Z9*›Çal‰Wrt¡7(¹ÄsŠ'ß“àÅcÅܼN¯\diA éç¿2`‰`åÝ]g+{"æ�ª©~³'µ[t¹KîèÑdà%[6p&¨SNør¹!Ú&tµCJ³ìDe@@_)NVŠ“•âäÂ'éáðõ8¸þO”Á¶8ïmX–ùb¹Ø5Œ�¢2-ŠZ+?q‚l…`Wƒ`³¾ûiÂHŠæ¾ ‹¾ù0<z;Nˆ&ŒÃPÓQUè´B§:ÍUèt èt5v”‹Æ¥SM)éX*ZaÐ -ƒæ‹*ú«˜J²}̲•ÛHþ{~d?m¤PÙFþܶ‘hJ-ÑÒ6>ñ«]î,"qpž-M°ˆÕ~×<?B HÃÅ@úü–[ùXW0ªžä%H§î<JI})Êkˆæ?b=£Þ–ˆÞ!F<hPÕÿú×ñÞ®}D¤óŒë¤ëøK—#©V‚_Ƈ¨€¾ˆ -Iù7$@^)Žu.¬ÁX…em"¸,Ž#ßÿ4UÄÓb%jßÖ½@uB–ÁI<©¤z?´‡lŸ}DSì‘ŽŽ„crò¸ŒÁcI�Z†c´ãN:ŽICz™q-Yì�Äu²ã@mæ3CÔ¢q*UWÎlåX¡¾uÒNsãZ?ºrî vÒ+f:ê¼Ì?„ÅX³ˆ'tUÔ"žôHLÖögPîdoÌóËO3iÚ·E‰h~Z?…î`AOõçÕ‡Ì}þ“©@–»J(ªj•^£b!Ÿ+uå3ÇZ|ù|Š¯™L<f6k²VXªéÂäf¼°ÕcºS–ž_\ñ¬TÁréÚh±;±!õVÕ<ÿë½J^ûˤõ {=ãËp‹¿ôg ~züwž—$ÿ]eM‘ô7/("*®â¿¯ Ñøï0mI3-Nlð<'ƒF“3xCäØh4›@áå¦:oüw -ÀÓƒ¼?¶å›Ðÿ®?ïv†â°³/÷ÌVk÷rÿ5AA=¾ZÏ×ê?Úw$È{z$“@ïkß®Žê7(gæúæcŠd2ÄâýÍú÷77™•Ö7ÂQˆîÙëNaõEA|>Í‚ATøeE«ài:œZƒàæ8„[àI¶š7}G¾xznµ„Ó݆}Ó;t¿õOD¹†é>â µ«»Ÿ&M¢ÿ#‚ÕÑ¥Hÿ¥ -þW‘(ýW€Àkª(p¼%œÌCžk(gÉ@VK” ÍZ$ý?}€Îùà¶ya|?õÆÃé·£¦|ѹ;‚gO·Úsß>Ùë˜ç¯Áã˜þã#™§ÿw(gý_»[«ÐÐì´¾á¡-]O|¯/…˜Iÿe¥ÿªTÁÿJÒt8Oo·/ÍÛëӣ˻ýv“ëwNå'Iõ<ßœ\»í—§û×=Ẇ½ôP©HÔ…½TÊôѬÒÔ´¾a`ü¹NÿÅ°ð¨»~Çñˆ fÁ¿*±ü¿¬(jÿ«Hñýß4yÕ&yÙædI´9 ó"g¢!Ù¦"ÈPœ—þ×ò/&TÚ‡þ¤X!Î#m“ Ÿ»—ÞÍ–ùòrx¼¿{qÜ~üpùhö¥“‡½Ž÷=09wäۯŠ-àÉáÅ(ˆvÀ‘§†Ž 趄QmlWÛü¡Cž3¼ëÖÛP<nÚœN £– P‚;,TÈ©IuR´–äê±»<úD:î™,)p\'UçXþþ§÷²bë×7€»`.`ü+¼ÌÀ¿¤Iü¯$MÁfк–Ï<Þ:ƒó§VçáÕ5s÷^l…êëP_‡WîöV£fƒ¡cRå섉>›©ÒÆгÖ{Žø¡oGë¸V-§¸;= ÌD¤Ïè·Øà 8èb÷:¼¾câ‚ôq%W8„cc'xNFW2aòs¾L[”gA€KêçâGïá¤þ©nÔ:Y„–z~c}©Æ³à_VXøW5„*ø_A¢ôŸ7Ħ%¨6×°!¢ÿ¢ªpMË694¡$‹¼Æ7µwÓ|¤fúþ¢½uõäÊÖ¡"÷eÿF|à/÷nF¦õmÔ:º†ÍcîÔî7š×„Ô—œÒT2pF³/þõȯÛÿ{W·Ü¶‘¬÷ZOò’*“@€”TÙÔʶ,{7rlY²“ìn±†À„ bhüP¦R©:/p^àÜù2u*©\÷nù&çIÎôþZ!Yœ®J¢€øéîéîéþÚ¥‡‰ Q&}§h¡/»½À 5ÈÝ”Œå@EÚÌ»ö@mü¯'ç×£ùo‚¸üï£á>ƃAkÉ-Í”÷Zhoo¯¥éû:•}UÇÊÞuÆÿ<4=²Ô“gûó—ÏÎúoFÏ^«³sóe÷ñ+ã©üº3<œŸ!óð;™É;‡¹‰:¢$Hµ ©Ù”‰ô3,ùÈ{ÇŠi¼\œð¦Çý¶P™ÿ?p‘ÕMÅÿ©ØâÿUÈÄåßÐö‡ªNWýŽ©Qù©ü«ªÑRµž<0õ®jèÃ+¯ÿ|¹J`xú·ž?ÜWÎ?<ž¼»|tº÷ÓC]uŸ¼L°:òÉ�[Q ¥"�û–8\]½÷Ïß:¾YE ü¬$ðÊ¢–HôkI(€Ãl'¯x½¸Ï|‘Èc‰rô¯üQžŒ"ÿfµ`B¼þÃàf¶ÿë×%Ÿÿ£vaÿ7BËðõþyàþ ¿8“õçoþvLµÄñ›—g§Ç{3ãÒ2/ÞNç½7„ì°¨Zß®–wXz1¯Îˆ}eê=ÇxÓÇ—LñƒŸ×2ÆœÃr¸ØϦåÆWòúä:b·áŠîÿ‡…€>ÙŸÀ†`¸+ˆ\cÜ·¨nÿ°†n¨õÿU•Ê¿Ö¥ÿ(]jÐ_{‘ÿ×ñõ©r·«íuZêpOoi{ªÚBÃn·eš!V5½ÓT¬ÿ\ìÖ�_?þuÖ?¾|xzÔº˜ž>ë¨óú3}ÿÃqמš�Æq� Þ±ûÿŠ”ØÁÝ|>5/‡ç¸ZgI$€78ÜFÏ ý Êè~°±gp_¯”JLþ5EU`/@VEîüIÒ7öF)ÚrùOÍ?ö6ÄW˜]QÅü7AÙùg`ìmøwûùÆØ$רYÿUµ“ÿQS@äÿ6Bá²y ×´óá´ìxè-ö$ÀØ F"ýËĶä2@5—Ð6ôdSýNºd)*jA\8>É"1W�,×>8UÔ•ªUrˆ?†ÊâªJgÔê I9†}B?SD ˆ‹fØDIX¾´5<ïÌš&÷÷†²ÓdZrâlŒQ|˜žµY%ç…ž|Q®9OxÚ¹GgÌJÍÐuŠ§}•Üàh<‡6RRž]Ã×½q¸âIS:¿ÓÅG� Y8#…qFLRŽ…‘êsMÙåM€¢Ï.ï -¾Zp—¤~¯èñÍ +‹������ì]ÙrÛº²Í³¾‚oª:µ©II~:žã8ž¶ím;/,ˆ%ÚÉp°-ﻫÎoÝû9çK.’"@Hò ÉNBT*‰0è^h4ÖçO+ -L¯ðòNßß»Ôø¥j„ŽBô%í¯+¹úLÑ€Ý9Ó›8æt&(Ä„¯¡L—êϺºÐ’:ÏÛePÆïeò³äÚ”LMcæÏ)Šœ‡¶Ì -¿9ª\ÿÁ‹²f׬Yÿ•býÞë‰üßF(ÚSc³Mr«?SËtÕåªÆ2É}¦ç'L—ljå_…©³�Ù(Y[¹n²FEîæ.¶}õ¬ÉMäC›¼gØt_¡½¿pÊêÿêZ0j?xý+îÕÅ厚ÕÿªÒQ…þo„bpO$äP+Am•(žÚÊÊ1ªz× -«•ÿéuu!ÿMP:¡!ÔO±ër{yBÜqZeýŸPó¼Áý_YÍÿJ¯+Öÿf(ZÿO°'Öý-¤¬üG¹àнäMÄèrŸ—ÿ®¬‹üïF(Úˆvÿ)„öüÅG ;Ò±˜[Àúñ¤ ᓶôŠ*F.ž(ììb´!ÔkXˆ‡W¼@š"ØÄ¡GÚB¿Ü.*•ÿL-X0°-o¼N-X½ÿ¯åý!ÿ Q\5ÓlБˆc½BR·jå?pÖÖ�µò¯wóò¯©"ÿ³ŠäÿÐ l:6’¦\Öâ‡å\p‡©Äÿ/ä‚3¸^ƒL¨ç_Å�¨÷ÿå¼ü+šÿF(”ÿG|v‰ð-£UäŸ%Ûû؈ýŸ¯ÿRåž.ê?¡$g�Ðû…øoUælâyÈo>ÿ›ûùü¯®*ìÿf(Jͤ³Íò‰kÀ=DƒÅ¯>u ˆ7 –Oêæ×—ä^/~ó;IGH•>|’dBcÊïØ,9owñ?¶oMD ¡�ÙÖ%÷DZƒ hÈ÷‘1f8^åf‡æÛ€Ç -ihéŸrp7yK¤à¦¥²9*ßÿ, !!þ ¾Õîÿ(yüß.l ýß�Åñ_ÃN¬‰²ëÀ‘m±ÙOØ’2 y=I„†¾PÊÊôwè¶ñµ�‚vüGÑ{šØÿi„Bù?ò¦hñ;±…oUú•W©M1™Úkd‚ÔÈGÏûª,‹øO3”-'õ -ë¾Ð¥ÀÅÒ\Q« -I%D&ÖZÝ#ýã}�Fu¦þârÀY„œfl®N(~c~4ï32öö»œ“x{‡/Oš Ïš¥\° -gr÷9™\f+ü ’KBL”âEGô3]ošÎºMˆç\ö Ê’dÒgÈ*QÙMöòü©€[B]#Ç®èÃÅÈ/wtO,L?‚@SúãLGdPC¯ì#B÷˜ð3RŸÍ»Eç=Ç5 -YÈÌç:øƒÏÐÔF+—¾Íº¼SÏ,x4»ÿ÷_ÿ’¤73�¨¢gü祮5Á.ÉþN¹ÚO}æþm×}û&Š¢•Ç•&ËYµø8>B¯s]¡)ª.\*¾–AXŠ^&¼ûj±w• ÆWÀ„åÛ%+ù±rʉ"'µòô¢Œ»ÄÆ^Ÿ£õ³}o—ŒÏ)IÚ¯&íUW¼ø» zÀœ÷}&z“ÅGo31—ï¬ì˜_ÿ> òïSµ–ä_â˜?’£VqŸÏ}'>Ê<ù1\¼/*DZ&ÿßS‘^׬õÿ -øÏÝ®Àl†²õ4€gËVl‰% ÕÌ“?J-ééõ%q¸ eT›ÿ7Aï j@ãÝüj9€Ÿ]ÿ§ªª&ú¿4B‘üSS’ZgoéPˆŒ¿m¢šõŸ:¡ö�뵂¯—ÿüþOUþ[#¯ÿl¾!$ ™)Àªy¼)²…¸ËTºþC%Xƒýe%ßÿYÓþs3Ä <v*éBÌ·–ïÿ^~X÷=¢úýßBþŸÒû¿P -±ä®Åz¿=´\þÇlBþ;…ü/Eä5CI£"¨ðŸbƒµMu… -تÌÿá…û.6è6êÿwµþO§+âPv§ëQø‹a×7Àqk“ÏÙ‰EØn¶¦Z¤_¯�À‡MS¨ÛñþcnCõ„o¨®�¸ºÙù_ÿ`í×Q�õö¾ÿcOëü¿F(…§ÄE�lû¨ºþã:?9ÕÖhùþz·'ä¿*Ãü¬¬ý§ÎJe¼´¥ïˆGWklcGB‹ß‘i¹’ `a‹?Ì€þ!tÊ¥:üßëè_¿ÿ—_ÿ»=QÿÛ•àÿ&-ÔYf´Ý»Luþõ_¥àÿweUäÿ5B1þOèº@è/.¡9oYÅôB -%psÉ+ñÃWE¨hܶ¬ÀˆI%;E§¬$°‘j‡ Øòå%%!jcêiÕðq½Kêì;_ºq›‹!6j*öwˋʲo5ⳬ<c‰H¥eÉ -TS¶±Ë/`ì)ôÂ,\©£(`œªk9*$8nž½Ú<3-2A›©¸È+Öe•ùsWªÏ¤_ÕùŒÿ3l¬þW–õ|ýG¯§‰þP‰ÿ·.<›~OA›¡üuC?Œêó?ñßž&ò?¡ÈÞpFöâWÑîiëheü×a`ÛWTõù_ùþ²&ò¿›¡hÍO2?�èÛƾ°Ü·‚V«ÿ\§úó -ùŸªÒ“…ýßÅõ_¬öS¸íÛFËäŸc(±5ŽvÅ0µòß-ôÑEýG3ÉAãJÈŽÒ:$CšH íÀ^�2E:Ç]¢jû¶LRý_\<²¼«×çú¿tTQÿÝÅ[Y0»î6!_ÊÊ?—tbã6rˆ3Ÿà:2@ëíÿBþ‡*‹üÏF(ZÿC4 9€¦7À–ÐÊýß6ÿëâ]ÿk„âøC6ÌÀÚÞô« j€jã&õü|¼Nûç«Äÿ»šXÿ¡´ØšXŽnÒÿÙ%²Ž -¨ÿú¿kQÿÝUË?ØКg�ñÖ?–!ƒ»E5õßlZÁdÓõ_½<þ[Wäÿ4DYüg˜näT"@?¾/ è»EÕõßÈ0Hp-`uò¯èEü§®¨ÿj„â–0ØY|bµÅ@@y=¸‹mí²–ÔXˆ/N6k…!tÅ-¥šõß&Îhm P»þkù×±þ7BÙõßFî(·úßô -Ú(•ìÿE%!׆�]¿ÿ¯åóÿe]øÿP¼Ï{ †[Bä·ˆ*÷ÿôÜ´ÿßÉûÿ=ª„ü7A…ýÿÀçÓ.6�¶‚J䂬«îô—Sü÷49Ÿÿ£$œÿhŠ<fŸ\@°ÞRÓŸê„SŒ'Ð_”ðà?s y³Üx3�þò°ÇN‘‹¤¿„p-�Rù§„éïÐRä€ý/`"ˆ9?î•œ|ÿî?øç˜j¢äÞ.N�7X´AÓxxñ;‹WxA žŒÇAl9à ʽB;zÈá`/§Ž>ˆ²Bô9c¸Pe[Ü€>ÓÿBôƒu Z‹ôw›°>£è0k>é Q%êDÏâKÜ<Õ–MF–Ó -\ûŸÑ G©û{p'þ^ô*)ð�Þ" C2×|0ò¯;—l,Ù6ž!wñQBìäxï†8n—B°dÛÒ#d¥7 ¿r„?:׋߽»ÃHŒÀu-x€gI¡‡W‹‡³Õ’¤#[Âïƒ$5æ÷v¢â°«xª?qÂrçN -fˆŽL%œ~}8¿l�¨àb󪼕{ -¬X»ÐÜýêß–^°AEŒ®ÀA~¾5ìC¹r€ÅÈ.ð1á—jŠÞäqŠ*ϾoFog )º”Jä/ž‰äSÙÚÒ0ðŠ`ôâ*4æ>•›I8ãQòôéUæm2\þé£éÔ%3dSIOvó\üûȶ9f¦e›kÓǀ̈́xiþj.r=œ×t×Ç è–ñg‰‚+aPo9tJ'ÕrF1›Vsç籦ô»3ƒñ¦¢w„°!ýðŒZýúšY™e:~`òÅ)–-ÄÀÍ&ìÍè„ÒY«zÓ¶tòô£yh+ðSL:ë�}?`LF|·²ÕxÖ ò̬±øcBòlr¿šÃ(WÃ#`&ø”|îJšŸh¾´ÞÎéfVŸ¾ìzÚΪlZ>“¥{;4Œ%ÍŠ¶Â:Î6Y•E_ŶeÑ@àìÃÞÑL>朙'ÓUµï»/ÂÂ$“}᪊˜~%}á¨k»½Š*Î\p?|^xïUtqà[`þ§UpNñ†{ÜXgŸy ýHWŠ|¤œË]YÅìj&ö -Ü:àÅ™&º6vï¸¢Æ ?Í@ŽAá5 -"¿ãuJbtÇU?í¦=ð›¥ÚúïÀY»¼>ÿ+ÿ *ÿ¥Jõÿˆðí£Jüï‹1é{}âØ–³n/àùWånÿJ„ü7@Yü‡”oÊgº¾siϦ€l~ÖãÃaNmº3qè/ñx -´ùèÅÅ<jORÂY|8gÉ'Ô†È<>¼js�ã»/kñ«ú‹ñ×®}{Û”=EsIN˜ÚOöâ7£jàhjcoUÔæ~›]•CèÎ2й3fŒF-7Nd2 ’¸(tç12úÅ$šÓ§ºÒŒzŸ$ã‚€kºøoÂ|™øãÆÔÜM£—ÓY‰9)?R‡©pÀmN Ò_øŸñÐa´¢QLkMê2Ö«àÚèp~$©Ò1@©qf÷wR’œ”Ä#à ¼ì}«^ð¦õ• 륕ñ=jã>—šÏ3êíÿ|ý—Úýÿš¡”ýï#ºlAp�Ýa·/Ô(|Ê™ö G‹OU-¦À„¾´JÿO8°ÙþŸùüÏž¦ùo„²ùߢè¶QÿïпÖN«‘EîEø/]M×:PÿÑÑDþw#ÉlïKN€g…¢¯Èã2îòÂX|ÆýϹùqnMž|ôöëºðS{¾9~YÓïòOùL—O/ágwIÜ•|¾ì(òS!|DÜù¦ -‹eâ.PíþßN[�ø³ëÿU¥'ú?6C1þß5ÿï+ïëPÃ_)ÅžÚ‚Ÿ„¡x(+ÿ<�Ü?º¶X+¯gÖ×ÿäóÿ{JWÔÿ4B¬Õ©´{F'™ -¸å„mFE¤wK¨ÿc‚ÖnüR-þ‡’¯ÿÓ©(ä¿ ŠÖÿç,›0Lît-Ç°¦È®‚þ`9ƒo œøwBe|TÿºÄñ¡ûçÆã?ª"wòø‘ÿÑEò6Ž1þ²‚FL’ië+1PÈË|NW -ŪcÁž/¯ûxʾkBÝŸB?´×M01lÌ^ ·^]re8}dÛñ]Z›VöB2B+< ’®mt‰&0(díhÙmMx9\|rÂ2ŤϱœÏ�]P.ÛÒ7÷[Ê7ÀÞß ÊZîû¾×P}ùîž4vñðÏ÷ƾ?õ<¸¸¸h›n�|OÜhR“¼œºO9ÏdÊÕrLüí¨Ýûö8€ªÊNÖ7з<kÚ ” .! “%Æøn`±tø(†}f¡©{$Oé¤Îø—¡|aÙÓÁ®ˆ<>BÏpq”Ý"+\¡ÿøM«0AkPõúoA=Rö¿¦êEû_øÿÍP¨r]cÙ–¹uÿaàANÈ<UèEõRxîæösâ·áG‡¶ÍÔ -¬Éâ)å~/±Ìœ9±JÏÜ=ƒb“g'G»™Ó=ë²ìô34A‹ßIü/ˆ)9ñˆí¼¤WËT‡õ„x˜%\½úCdSA:ƒ$GÙKΤ˨^L9`Ðħ¦Êéó_Ê÷öBÂÀ2S=ìŒj®™ÓÒõ¹†©K¡nªìÂsVH†ãSoÈj»ûf׈†]Éï·ÅêzNXÎl¤&˜¬ÇÀzR™i\&ÓËr“Zêð9Y)Îý²[•(‚¢t/¹A,ñKl¥]:å2xa*McêCxK5!„à’§õ"{–Zþ¬sð°Lfhj¶ÐË/**ß0;”{‰ú£?›ÈLÞ|>Ö¾PòÉÏO†žê›À.½ädñý‰]V‰“ôÑ)f{Y„od¡–ØçÖ«%êï�Ãú5³"a`n(dî2<ö+ïëÿäYIˆÎJJŽ=îýüsòÔ5¥_~ñÅ Ð*ùŸ¿ÛlþgÿOëˆø#é‰WxÀÿ"tËhùŸct•¶¿1ÕË>þOå_àÿ5B‘üRçVHÿöQVþYªg›ÿäâ]ŸÁ©lÿWëûÿˆõ¿JG§"]ð,í)tÂ¥Úþkwÿ[¥ÿ_7Ÿÿ)ÁBþ xÿ¦™åö¦[�fQ@EÀ»GKúÁ–ϵl�Öçÿåñ_ô®"ò¡hÿ/Þßca¹ê¼?ö�¼Ô~ À -8¨/–>ÿ'±|žV¨Ïÿϯÿª"êš¡»ç¿Ó2°@xØ2ªµÿ=4[ËøÿÓ*òŸ‹ÿ©rGøP$ÿÇrÍ´í/„+¨½!™OSükùõ_é*ºðÿ¡ °ÌIèû2ÒQËD†ÜÒ´ŽÒt;Z«§÷†Hí(i½X(ÊvB@è òѨ·�@ñØ1,̉鎖,µÓÓ2•'HÿßZ£þyãé|ÿ©7õ.¿û`\t§?MN‘ñuçƒ1žŸ<o½ÁÚðÅÀ}óæéñhÞ7Ï¥;ñ6&Àw‡©H»;,ù„?j#|nݤ.>€vwøàÑ€Óó³$ý²*°½Ìæw½kÉ�®“ÿNä_ëÒ”ž¬0ù—…ü7B\þå¡ÒA¹ÓÚhTþ½5ÝÖ@Ùïö;²ªèÃrùg™«ë+€™ýã¥Ûr§êpÿùÉ´õÒv5ïÉ[ûýéûÖ¾<1ˆÞBÃïž_<rÏc�ì þé«W¹˜•~V²qÄ8û,Ñ2Æ8T\7=ú7OÅ?–JÆrµ®« `Jþå^·Çå^ÕbùïjÿÓµžJU†ýÿžª4,ÿïèJáQæ0ñ¬ä<zÚpØÄ5K¡ü›jWSööZúž©·4CÁýži¶ûª¢êò�÷Lý3ÖŒ'±ô3®ªÿ½ùÔ<ì¾qø€çxv~©9/ôÙÐí=ô?¼|ÿèá‰c9ã×곿*|ýÏsêbø,ÈÚ;Øý©Õ‘w O` SeØvl$·â¨½;é}Qxbá„d»ôý‰'7îFGûQa„´+³*ªø©0ôÀ�y¸ï’ÀÇQÖ.W¤3˳– ʶX ‚ $H A‚ $H A‚ $hôÿi¼ØL�Ø� \ No newline at end of file +Ý®ŽÿU»ºRþ7ŸTMošjºâ»Mù$é«ïÚ§Oiœ€H’>ù®57ߢôŸ4´>ß»ð!ná¿[ ±Fv0lMÆÞÛÀlhÚŒù×t]ëó¯wÚŸµÓíŸ$e‰}˜~óùOS×Þ€ÖîvÊNOïÈšÚëÈ؃²¢v§cõŠ£6<àÀ†ôhÔ’4Þ’(… †Ð·¡o¹0ÞhHÒ8°SâÿI’,Ù/fÿOc5L+ˆHª z úí;îÐx´!Ý*ÉãÁãæß}½0íØ_[wG²züÉpçîë&ür +¾:“/J÷='ZÔ¿ô6¤«üwÖ‰8êclEn˜¸¿!5ÿ„ô uLÃ8C7 ¢¤fc�bh&`€µ“HÇ…nÒµ¶‡˜”>ƒ~/îRA~gùÌÄMp};‚¤ÐK‡®ÏƒØ¥}U˜¼ù‚˜¶%IYâï¡YHŸ‹’äÉÈõ‡ÓÚç,º›�¾it6Õüô�éÜÈ qºK‰Ã(HC3™„¨FòÿR°Ç®ofÓw€ˆ¡”FÇÆÄ=´«ãRZV¢Ù,ÅÁGËK1:À‹Ë�^£òGgQf“ŒŽË‰4š©6¸ƒ¦çúwÕúQWA2ª”�ƒ8ðÒDÐ!ÜWÔ¾<QZÑt[ÐŒCôw<«9ÓBTYkÔùÈ›#7¤¼¨8úøJg£Êp¢AF_kZˆãJRAÇ}¬DÇ©#ŠF0;„Õ6}¯=ˆDƒGÓƒþªÂ¤<‘m‚Ô·A4Lô<7ŒÝX4FÈ3s‹DS<ùE²p¦c4èˆÂÁP8[xF„³A‰÷0+ÈÕ9JÆê€#nϸ‰%ÿ,)›0—e¦<•0μâ4ƒhÖ¹‡!jV"†˜Åf·”g™×V±Là<"f€ã0™p…G® Í,A˜ß|‚QPM#å(2K#ìç¡/Ó~ᘦ”ViärP“ùôf¢esI¹Á|™<ØÁ&Ç1PS@ç5l’PÃf5ù§Í9ˆ·<ÐäyÕ˜É7·RÈd‹á=ŒÜdÂÃfÿì”Y-€Ž…Ä\hú`\®7+u^íN¤¤ó5’ÖHZ#é’‘Tbàˆ/N¾“ÃX÷|åò¿—pzÁvãµ›úTi£5¨Ö ZƒêPMÜ1DH4+Ø™'¼@…V‹¢6H’é[#(í| 5‚Öºt±céÑ òˆGA””é¹Éäaº…1ó ±*cñ œE¿’«EVÈø¼Ó¬¶š;ª$¬œ+|Ÿq,ù®Ï[ÑÌÅŸÉ|†÷ˆÌ>ÿý7ÖWKÿüóSÁ7êu6þ•žX,ן̫G¦Ë«4ö(Ÿ•5’KkFòœAïAäb`å»C&sºÑ±©GL-&0öƒ*0såXTN™S²×2] -FLO*i⮔Мd¨¢ø%W[-_“Î×òu-_ר¼tT¶<׺3c$áOÇèëïÇd™‚VÃ$qýa¼Qå¯$0)VZ¤€;«±r*š¿%éŸJj<TG͆^1Ý„å.š8N…)>i‹¡]<šî¸QŒé#€êÍ£›ÑCC$ˆ˜ÊâÐtþ!•'”®^ tgÙž–æ–C÷’ý —›“�Q?m¤º²ˆÒêõv¾^ßêõ^ß–º¾…h—^BúYÉÜ"Š³y&Q‚…Uäú¹Ì6ZòßcÖieˆNà86ñðà–Ѿ»\G$À# hDüÔó8lgò~Mõ yÿ÷?ÿ‡þðÔxïØ^þ¿ÿù_ô‡AÖ0ˆ![ßÅ*y³9 +Ð?ÀÑŠ&£ÚœW$T©©ÿ!©ÊRý«+Ï)ƒ¦Rˆ³s”¥MÏ“d¶•|2«5Ò”¼ô ùÕ(›M4Š<õ@ìZóÈ'NH1i’`NÛs1m2k0n6O®l‘§‰y×þ„Óž•{‡E¶¸øúsôKLš•ŒT´CðMÒ@låÕlÆŸŠ/7äÉ;°HZãb~tÐç NÇ:ARXŠÑ¬J™f0︬ä«eË‚ºJ¢!eý"ˆ àE'G ³bì?ÿ6Âœ‚K’§Žæv…îëá>µfHZâÞÌï?A üìf’àúî „Ø¦CúÓ[*gü°³{¾½�0EuçÒ;Z{Ðý?â?(cRv‘4•â’¥]‡ ÏJÜè~hc*øã +ÊìC7xçã–/ +ýžx_·!©¢!ä¥Á$åm™ùX¡B4‹œñÞᕯn±sŒ6¼æô#+H‘&j±èÙ‘š1Ž,ÚÌìšP^¼ÉäÆSÀ”Îþ"ø#u#Ñö§áx BþlëzUsÒi1´Ñö 'ˆ šH“îÜ*ó“ÏŠHm2&ÒI“[ÿ3ÚBœï~gc§¢}›„ZD_LIÙõà9L<oòËCÎ%ÑT.’ íÃý²iÊ…éŒC6¹‘K6§Th(,Gq©?µ5ú'瞀=ù÷ÏÀQ÷²0hVË«Â!ÁL×XTcÑ›°ˆŠB´|iª§D¾y<½YÆç’$µœ!N&^e#AðkÞ…TŠ¯0󎂇Bçñ÷ߤ:éŸ$ôßœ8s€|0J+’9Õq3C“_¡\‚¦b7'h–à[Ì’Ù‡óRÃÔ4QhW85’ظdGµüÉf¦²æ•Îùv®ãUÆÜÇxî°Ê¬jO££üˆ¡JÈd§¢¹wïñ®5r<nòÚn:®9ß0ÚÑuPTq>ïåm· ™}õš¿ÊÄóæïé³ømûIxü€_$ ?¡ñ«¾ìcÑ ÀýªL‚üqg·Â~ÈOJxüéãš{ÄÒK€�+r7c$êÝ Nât<&Mìùé˳€Hø‹ehMç%ê +%‹ü‘ÂhÂç êE“$Í“@H4`ã1ÕÚ1½qcÜy3þá™|@#%ø”)q}K ôÆ”H4®&Ð6éqVIî)ïÜJ}L«Ê¿ôeÊ¿tÊ?Îjj¾úO¼O±â8ÕHÕòÔ½$ás̨eq5.*÷¥ƒÏ‰}«õ¦©DµmŽa°ÍZ>„cð(9KÎ7 DcûXV·ÊR{HJÉÙQþ?3Óì6dsQ®È,gL#ýÕ¢4�¢a\N@ƒÚÂJ{7ŽKÇö¥„ŽãÁsQ‘sNtÊÇ瞉ŠS·D*“‘ã‘y#œèlŽÝxo7_3ãÿ DÖAü’Ý¿-ðÿ¦jšbþß´Ž†ý¿Jíÿm-ú8=Ûé;ôtGÖz= ƒ.Td¥o=Cµ`hbÿošypÔ¡[î�»{keö¶˜ÎÌ1ª¥åã¿è’ÀºŒÃi)o-ðwô÷Ÿü§ãë/wé“Ò?Ù[gêÍÉù×››Û‹åb+<þ«suè#„¡§Œ„Ìs‡q›ÙÏÜ_iœ•)ð¡u†#Hƒ ꟌZ™Ç¸Üm[Ùm®£lû\öç8ïqGøs¼I>09fžãXè~_c u¦±F9¡¶ÔøU-56ÃÐcÏ-ʆUYzµ–üFç] 589Gh£¡RaÕD£ÃÙX$J|ŽÙ²èêö‚ÇÁi†«%WpÅÜ)Ö&mfwfß´^¾yBµu¡‰à§ÈuÊhòóbS~ÖÌ ‘IÖ®XÊñú¹W2o¸1W/ý ;ËÔÌ`Y®ØÌ8“U΄¾PÕ³8‘ž%£Úª~åŒC…¼ˆ™+™©ÍúϯÉ4ÌT¦T—œŽR”l®†1¿‘[è»*ÇÐr$ºÏµüR¯*¦1™hÈQ}UU +>Ÿ›+EK„6ÁÁsSm2|FNÑ” +OŠÏ—«§’Ë:Ú-¤on\óøWŒ¬ 軂¯ ?¥ ËwêežgAÀŒló_ÿú×·ÍãýËÍý]“W ´æÆâ,UªZ#T£™#ð^|ôü|ûƒÊÁôjÌ*×Þjp0»Ü-j›¬“«µžó—7¬ÓO~ùIÿËô³d·’¹û$‚ó‚fv9£Vs^?6ûS%÷/yÆPNùx +÷·èq›D‘KÖM,_£Æð\1=C×>ðëÎT§ +,¢QŠL´ÜÂILB®Î)ÏÔ¹×rÿ/ ÷¿\¸³üþbŒb8›¶ZúŠ’ý|]~/ ZµÐß"�xÉ‘[{û¿mŸs^—©ÉÅ{ïS˜÷Ïät¦äœ«…/Ç”C‚uLÜv½ñ@pþùŸ¢ttüþ“ªi]½£vºŸPªªuêó¿u„ìü ¾!÷ý®¬éz_îõ€#;zßtÚÝž¦€ç¾ÿD9jþ‰þWŽ¢ÃÓÝÓí»àD» Or±³wÒ¶‡îÁçâÉýš<xãËG‹œØUI2?¼k~¹8ú&ÝdIDŒh6°èT\@è…ÝlHcÙþ}Fh}Ž'1:ZcàzË>øÏÂ"þWu•ãÿvGÕkþ_G˜Ï§ÑÍ0馣Sàœ¶ý!86¿_žî¥“íÐÞUž.{FïéÛñ¹÷tì6Š5¼|¨-…£ÐĤUsÞÇÏd£Ù¢c^À^/^",âÿn—_ÿ5CÕjþ_G ë?ZþmÕîé²ÒÓ:²¦µu¹Ú–¬u-h”NÇЕ¼ÿÈšÿäôÓ!oîCs ÉŽ§±˜Û'îí7{K•/‡×g} ì¨fh÷îwGΑÿxýÝêÝÞŒ¾ÜÆì*'ðm,k&‚Cª]pm8@|âOªñ�ÝáˆX®„QpïUñ +’ïÒš´ë&þ8“ðЩ¼Ù({Ý"Zþ™9§Ÿ³Á¡^`r!´‰‹]z#jÚ‰bÄ2£•P˜ûô!ðmbÏ‘)cé^œTåznqÈ?Sþ§NËÁ€…ò‡ç‘`Íÿë”ÿ5ËîwU Èn·‡ä»øßî˶bضœžêË”ÿ¿wÓíˇ#óʾ8¾ÿf^’^wÌž-ÇroïûÝűq8<~ØSàÑTþ§ŠAFî'†k³äýy\K‹BÆÿœñœºE(â+·Bx£0°Pþïhüþ¿£×òÿZ‚·˜í›î楒\ÊgñíØ=yè\õ¼5‘eóè|o8øqxyqs„@Àq}·¬[|ïo«ÃâPÞÿcKà[k¶ÿGë¿¢püäMµæÿu„ë´~tí:Ñ^·»¿»9|TöÏ÷ê¢÷pžÜî¥7½þI”ÎÕÅ×+Ó›ÿ&ÄÜX²Ò(‚~âM¤1He‚“® ~6"õli�¥°îè+Þ¤%]Œ€'M‚uá±ÉtâB\®YcÌCë39ÄmåÛ•U¨�¯ÿ¼üßîvëû?k óùßÿz§\lžm=yÇÞ†#÷ËAwp°{úmßU¶n~|¿?µwýîöÈIÑ9†Ðàû¤fL|ÓéJÍž=ë?5¯ ç¨a:ðÜx”™\¼ñ?b|Žÿ ÃèÖü¿Ž@÷ÿ]Ívz–Ö—ÃvÐþßR¨þÏ24Ýé=Ŷº/Ðÿ .óÍÇ/>»šû]>3ƒýÃíÓýëý«½Û«=õ {7±œô#ëÏ`“èTZ(Niôô>LÉô¨PÛe†}l™íYe¦2¿öVFÈÿ©¿TXÈÿh³ÏíÿÛZþ_K üßï¶a¿ãè² +¬õ×°þOÈFÛ°uEWCo¯’ÿ‡ûg×îy>ì{Š7997Ì/Û§áýþæéŽåþØ9þ¶÷pu2±ÿJ¦üÏSi�—y³0€¯æ÷BÖçÜ«E|þ‡üoûÿÌþ_QjûŸµ„ù|iÿÒ½ÅðøëñýîmÜ>\ïäà"Ý~¼¹Ú¤}rq|vjöøªqó{ժΘ’ÄÆ~Ë (x«òá0H\›ûòµRСv½Å5Õ<“<µQ ÇdåÖçÄŠK`åXÙAßô®ÚágÕû~óŸéÿ+ވͤŒCŠoÅ„…ë¿‚×|毵Ñ/,ÿwkû¿õ„Lþ·:=¨@î´CÖ¬Ž#Ûr´`×�/9ÿg×ÿgxðèªÛ监ùíøԦƎq{ {êáæÅáärok÷bójzÔƒG™:óe;ûÉ_¸¢ïã쿘¾HïÇÓþ¿÷$¼c˜Åÿ%ï,«ßÿ£Å>ãUïê˜ÿu£–ÿ×(ÿ·A.4ä.’ÃdÍ1rßQÙ��8Ðúv·¿Jùÿè©ÿã*Rï.o•ñퟛû;q¤_Ÿ§÷É÷¶}³ëÛ‰N® VÈÿ¹ï Üx†þZÌý¤;5÷gñÿ5ô‚8ÑdÉ›€ùüßQ:Ý©ÿ/]Åü¡¶ÿ[KÈìÿ-G7,»#05Ú2èA ÛvÏè;šÑîªöëý• �ñ©Ÿ!ž-,ÄOæ^pô¤ƒmo_»Ý›h—;Þô¯Ï’áÅåu0Úݹ½úk+ý¢€€ENÕ9Rìç¿_àð˃بèç÷ø•]|ž^#p—BIä+îòåÞՙߙÅO:_p%ê7/içë7/ë7/ë7/—ü¦3ïÜ>BŸÁ.^㹸˕ca—uã¼ÔMYÎ,êr]Yº›i2b^ªQ—v¾FÝukÔ]2êæ~0†™VY#´»8¶¤Ñ¯†«%ß×±e¥;‹±¹ù ĉ”†ôRu©æ¢Içkˆ®!º†èA´èÁ³òÊi(Ý]ÜÐ`±Ï±Ñ˜M&Ï4¨©'ÄÝÕ„ À®îxï‚ó|v“¦í:_w~P,|…ÇI“4*ÕùorÊ|<i„Íáùg}BߢÌ`ðYwÂm.!b ÄŒFïí¾c”é¥v¿ Lí¾v_®ñµnàË1wƒ¿¥2K$Ì +Àû+äÝœ.Ã_!Oá¹ÃÂW¸#¬dú%ÌS7¤òTñ®y/«qXˆC–ÄÁp>“œ î�O½$¨q$Ð6Íü†üô¨Òâ3™õM7 +)·˜5®ØCxÁ“” e7Æ‚˜�/°ü¼"$<ŠHérêoáu½ê_{¦×õÚézítý™ÔR;]¯®ÿ¶N×—ó¸ú’\®ã |`=“gx±kæ›æ¹öV æ,<Ññ•Ui©"¿’Qœ÷HðìGu_üÞð쪪éW׶¤Gz…ï!Ï|¹wÑK¼B:ÌÉŠ®¥™¢ªJ[®ï¹~•+f}ÿ,¥Õ/騿ÈÿÜÇ€ +/«xð'À¯y¯Æà<2ôññ'XÃ[´Ëq`’}:ٖܘ—cå±Ëðz³HgRs{5À&?Ó±¹P×ÈÛ3u¼’.O«5ÏÔd¬âå…ªÉ`%FŽpÚ:›œ-A•e¸¼Iÿ#5«í‰5#©Oÿ‡_›¨µ#¯ÑŽ¼ÿ›Ej©šBåU‚Ùsåg"0Y ’Laã¿í´š—5æ>¬³ò—5 +õl¡ŸV×;ÓaÎ>qŸ-ˆv©…¿Ú<†8s¤»¦Ìô>o9*K«¿)=½÷í‹÷Sÿøv×îÿO¯Üÿ7êû¿ë ôþOm”l½Ó••>öÿk÷U¹×1y ÄVÏêÿ·;‰¼+ý©ÿdÛp+µ¶Úû§?®ÏÎœ/}ïüÏómgpµ×ÝÜ£ïPºÌ/ðìÑ_¬’Ì$'ElªbÎ7ð{öÇ%ÿt£ÐZ¾Eüßnóþ:º^ûÿ[KÈîÿj}]Q *k°ßAA±>€r¿ØÓÛ¶gÜÿ›ÅÿäU8çØóøn<jØn”vxIT¸×W.¥î{Êo˜û¿Ä,šjB„Þ’<ÿ?{W¶œºŽ®ïy +ÎUªº¶‰g›Tª&!ó<®$uª(y€81˜˜!«ý>ýÝ}·e?ÉÑ`[²•„•HÝ{ÅX²é$ýÿ÷O§]2eâÿ+Ëÿ_×9ý¯$úw$ÑR ¶å8‚ji¢`š†$h¦êZ’MÕ\&þGç<zÓᶠ+º²´×jô/í£§‡£ý3O>jáÕIãL¿:üÌDÍù{öXH€=¯ã”ü¯ :Pê•Éóe¼A]VùÍë? a„]<Íé—ñÍJ{ýÖÆë7^“Î!÷hO`Ü¥ÖÀ¡ô¢ã‚L.» Š;‚Ýú,|lÙ{ ”“Zj—³°Jñ;·awzàNÜé;=|9oà¥sÚ_t¾í!¾•yˆ3^RyÎx9ãåŒweÁ?gO=›-3O~*cžf£]Àš¯‹pΘqå9c挙3æ%1fÖa$ß 8¶!¾·9YÈ+×c«¼Mvœ§DÕÙ*×ì¾7œT¾7y5X«J*;_N4ˆù<+"ŠŸ^‚¬ ·Dè:Å~’ÔmÎôIå9ÓçLŸ3ýeiãiO˜´å)#J;t±£Å‚£ÛQÑÙG?UGg«3dÏ)v7B¢Œo^s®Í¹v6‹síU ö4@+˜°aÙPÄ”a“-T€^CÃiDN,øîGäó䧊¦6󺑹xà⋇lë/ò Îæ:+fvüBŒt’S 0X)‘ûÈçÙ»DÅrkÃtååq™@*Ïe— \&,\&8.Â<Ès_m#TŠ £{ÑØ©ç>U_§ê2‡¶ž«¢Sýȹ1çÆeΗÁ‹ª÷Ù±í{ö5%€L[ÐÑâ1RkƒŠH”x �sÕ¢w¦s‹ž ƒ7¶s×ïƒF2 2yð$'t‡Phä!Œ‘ü¦öÐ<èå0OŒÁ {r*‘é„ü“ŠH5@×›Œvúå¹'ÍA +l¹pÊZ%ùWá”7ÎàªÌpÕRyãï?ÿ]¾ˆ~fáî‡%þúWy]R<ÙÅúë¿YñÈA™?ÊŒÒë�`Ee«\-¥{s1PÍ{¨4£„¥±š)ºþ&PÍHôz°_ˆWzX3aÝI6]€%zd±ÂltSù¬]ÿXyʃË5DÉÿfÄŠâ½CvÄN\`ulÔ´JúýàÅíxï ˆÖI±ï}šŒœÒ¢…K}÷zg͇ß$Ý’Úd¿^ÝšÙ£ë¹pœãÇÌc;h[z‰4r{îùΖ_î4g¿7‹EÓx™¸!yƒ®C.G΂ª%MîО¶g$CH\Iý²¾ Ü‚Š,0—"—µ†Ì…Eá,·‰þDéÑ´ƒ-ŽµÏL«[˜ýX]”hçY” + iñvVvóçûº°Ö¼)˜ìÿMïç`á?Àõèí %€“Y[cúÿ[06jøgð5Æ—e~Þ–Ó½¿?£z]¢o$”9ü¤ò©˜¤\ZFI.üNžyþüJÍ’ïc°?éšÌ¦TÔ'y[kâ¤T/è‘È‘` ¼uÆÇ—ÅdCº5_”Åò` I%—¯U’®n8úÞgÇ&X–4›äü$Ë}pÜ‹…åDéÓxؤ:ìë"¯ŸÅÄŠ¿¾,þ•;윋q.¶.¥(¸ŸÏѦ/‰§¼ãSÇS굚e2sj¼Fëd†4¾w ,Λ +³?Æ›p}‚7šßD·?ÂfØG?Ïз3h»¡—>¿LQÖÿäpì¨yìÔhÖÚ)g‰½h†#rŽÃ9ÎWà8ä¼’<Ÿ’Éô«ÕK™—dNJX›`~¹ñú(ðÐbÍÂc’O6o÷o2yÙå@|^Ÿs²œg°.rý8°;Å6¾ÌŽztcã”É5ÛEy_f©£U×Ó÷Z,}L‹›ùÅuì¤Æ64]8¼!}hü¨„Iæ” M6êߧ´ƒ=AûmZÒ ½�Ù6~ðÆLóÂå½uí[”cS“mÕœÃä¸ëÔ*Ö«ø4jÂקN)Nü[ÒEæñ^ÍÄXM½iVˆÕ/ßÔîõµeú3ý¢“YTÇöž ^´Px˜L¢!_ˆì#ñÝðßP4·üLâX.£ìO£¿g»á¬A˜VšcÜv¶“‰åþ$îf2-ÒÕø…¦±A÷öZÓ0plX@v6MŸkóYìr…Þ$¶›h™^N€¸¨zhM0éó¨N&ÏÒK³„Cˆß‡o¤Üxs¸úIF4ÁRSÖ”·9-Ü]&~ÝSR4yˆ~ïr<ün`jFå´aF¾"áø•M˜£‚ƒ|ú +rÎBû].òØ_D˜™ñßt‰Šÿ¤K"ÿ²’Dâ¿Ø–lÉ¢&®è¸‚ª*š�€£ š¥S¶¡›ö"ã¿=š;þÛãáÕý¡cOÃ]Aøñb?Žêû·wÁùá®rÝ–Ï®ý½Á.Ž÷’™’q¬—ƒ›Ó“r=ºKEzë¢ð¹!bB[pþïæ`ËÛêoðØRÙ”CÿPp…ýEÆ€›ÿ‘Žÿg Èé)Šÿ(Áÿ)¶,Ø"0ÕU¡ +€*(†m7«²¢8úÜñŸæ¡ÿšÿîŽÇýšyØÙn÷«òmý衧ììWÍÇg}|Õ«·}ëñ†éOÉ„î£èHän™êÉ›P{ÓÙ|€â’?§ýœ”Ä%AÞI<]0è¥iþýÂ,úWu1Kÿ2,/sú_E"ôo9’é*@DCvU³LÁUUpIº«V-Óýpü7¼Å>øõÓj{x¸_˜×ofØ;çêuhŒïµ»‹°~1z°ÁÛ‹uìè/˜ÎÒ„GœÂÌØG°Ú(ÅËX£xXü.RÅA¡”|ɈёüÇËÐÞ¯‘yašEÿPÛ§ã¿Âÿsú_EšN—myÿîU’nkçwƒ³Ö³9ûZóôübðÜ^^6ÞG'ðÇÒöéîmiBôÆdQLÞF®x?¾Ã¶gwâõŒïGfäÒOnbŒ|/£_ âRäLOŒ÷†R/Å€2À÷@„g@¹&[è +—ÉÞÝ*K$m]¶â^ñ ‡@Žøø0Ø÷P]|TRKý'—œ¡ù„[ß Òˆ9^òi|¥²‰û¼Òë! +º±bÎxŒ`&ýË +£ÿsù¿šéÿ¦+ë†fŠŽôÂú¿ÛÔ Åæud»ª›ê¯Ér‰Èm†*°»}¯ç?^÷.W;ÕÞɃvÔ»O׊:4Œ»ÃƒëÚNûî!Qð„-C-²s‡od§p-"³ 3€v5ãÝô_‡ÅÕÍ®,l:^rä.•ú!èô|>ñ`OŒ’uP× {^/ú\'hDž£¤hi$¢½ø+ÿÊ&jd%î€eˆÿ™ô/©:Eÿp2œþW‘¦ãö‹ûfÆÕöù±Ò�÷§½®Ù5–e‹ÊÙ°½£µ¶OÞ/|ãé®VJŽ] M%g:ŽŸÝJžŠRÎþäB¾ì—…ñ‚Ùûÿ*EÿšÈ÷ÿV“ˆüoÚ¢è4WÐlÍ‚òßÐËA‘D·ªU%GÒõEîÿ/þµvøã>|{¿Ý‡Ç½ZO³Gæ¼·'ÝÊy3ìßô†ƒ!Ùÿ§d²¼ß‹nàÝ¿(pWá @ý2ß,H•M¼,[ª0Sþ+2-ÿ Cãô¿Š4N]ÓTÀ~/ìKo{aoìø·š©^<žŸí\7¯Æb½ÿòX=~?°4³„L†#@F¼ þì–ñ4OJöÿ±mÇ2´ÿ9öÿ™ó?YQùùÿJÒŒsºñMµgžßڶ߬\í6¼ööøü´Õ”ªî¹ÿêìéï‡J׿Yõ R+tÉÑÑ>‚êè +üǵ`W%A´«¦.7Aµi%²`?Mo†Ì$l}óOwÚ]ßØA»Ôƒ’ +£Mé «ŠJdR¤ŠjtÕdC·‰¶ô6á#^§Dì°à;ºÀî7ÚÁ$°1�Š|}Øå ²¯ã¤ŠZõÙƒµ„TÙŒ·T+d»¤ò>-˜Ì>ÿgöÿ ¾þ_M"„*W-GÕDQuÛTÙT…ª£0DK´uH�,RÿW´·ùÃê¼oÜ·[ +°ÝÑè½±3¼>?8ǻݾú÷äüÎÉDõ?úeÐÅvÖïn”/Œ½ôü~XŠ ú”ìjà³ûy]S"ÿ½6â-g :ÀlýŸÞÿWD.ÿW“fèÿg÷à ùrtt{ótàî‰áKp?¾8¹ +öGƒ«çó«áº§…—¥ç®Ûj¼¢qCã$÷;$Vþ:‹æ3å¿j0ò_åç+I‘ý¯®ë¢îh‚ª™² ZbU�@4Y†,©p‰fH‹”ÿ¯èþÉÎq<˜JgçôIOÇ‚ ŒEåØòöü¡)Êõãî°…å?œ“ùßëº6ò w +Å¿ÌÅÿ\)‘ÿØ~a9�³Ïÿhù/«—ÿ+IÓéT÷/5íìþ´:îÓKýìýèYuúÞ¥äÔ^ÎFN¨…°ñòB–ØxžxÈcSN{ëœ*›ØÜ©‚þDö’ ÈQáŸÿÉ¢ª0çßÿ_M"òߢ£¦+ˆ†e@ù¯ÁR«UÁÕ5GWDX¢µûŒ^4å<¼>ži¡mÜ×/í=û°c›o/ïppÔÞц^øtÓ®Û!oôÓ‰^ž³‰–p…–G»Ø¤W&ë9˜-ZÙ(õA+Aj+Y çÆ×ØT8……ó"›ÅŽç”bßIÛ&ªñû°çbÖEµž“['§›8ªŠÓU£·2]@rièzR:åz± ›©{퟈:~nÙhXzKk®ÌG#.þr�ܩѧR¤æDZL"²y‹ÛÇ#óYd¾(Ü\aÀ½Ìè‘ AÃzeÞe?AžâˆÜþ�µ³O~*½³Õù4ŠçAVIâAVÙldõ»²ò¹ƒ¬"v¨`·» Ð +ò˜>²º¨(«½ D8g”U:°h²È¸™µnק²³a3Y ¥o7?L¯hfDÍœ¼0=óy,Í4cJÇÒŒf%˜æwÖ4—K“ùúbiB}j€$dbm⊄.ƒs)ôp¦ó>0¦¯x`Ó�Ú¨Æþìäý\˜dŽ½ŸÎçHØß ›8nçû(ò1“|Bl©RazLØÌ"—µxi€étþüã'µ³ýÛÚþnƒF‘ƒy[³‹p&õÕ˜k”Tr¹ì+|cÒùidÍÕ�ðGq@ÒM¤vBP„LÍÐÞCö[ß08-Ru°‘@yÑ?gÊ Á¢~"rrBHÍ!‚²ÕII¨Ö¢ Ïlec¶¶PäÓ"äI\—�ä'àeRz-}êÖ/à±°[ Dk:H|c±â¹„dðÛˆèfAcT4æqt£”î™tøÜLF|žl%9óÂß>ÿlÛŒU¤"üßEaÿ¢4Ûþ—ÆÿÕdnÿ¿šDì̪e©0É”tA•mG�š®†)»²ÕÔæÆÿ›Çþ÷Ô¿zöÃË¢?]µnÕ k`{Û{zºKçãÁó¼qYUSø¿,öïÍ4Ü_øËýg¤Äþ×ZP@´>ÇÿŸ¶ÿSD™Ûÿ¯$M§Ó"tž{ï~UÞ£çpçÔ{Çuû¹Ö´‘!¿Iï7ÒyÕé VrÃ-¯Ý!¢OtÊIï7H ý£°•~ø‹‡�™)ÿ Úÿ_Ñ8þÿj‘ÿºii@tDA”\GP«"ª²)†TµuCvš’ª,Rþoïœ +Ã;éýý +œœI¦óZ»jìöÏŸÍÚÞÑðfdlû sßÙXþãyËþü#»1u‹Â~ RxqÙû£4áJ®«×)[ãÈ"¹·Á½‚¨TÙÄ+ +ù;l 5«Ãÿ”DÿWÕd‰Óÿ*RŒÿ¯¹ÍªY4Ë„ô¯7¡þßtÁÐWM»êZ?ƒÿ¡þ–ÈB;-`âˆ:YRþH@tñ]ì=4‘ÔÔ¶PkÖŽÜ°ÖߘÛò± ¿Ž<{Píˆöñ]· +™JIj‚Gˆ½ÑgB·…9I*.‰…RâM(!0ß¡‡·¨:ßOÀÃ7HÕ8hÁ=Æ/ß(¥ tñ1IaÉd뽆~{½>ïOvІ^Ï#_'µIº.R¼$ÜSÝØîÑuAÇi ¸áh[›lÝáWyÄUûÛìuðĦ<ÿ¯E+€Óù¿*I"òÿÖd]•tUWþ§+ÿe%‰ð§©¹jµ +»‰ðeÅL B¶&YVÌÿ‰áî?çÿ5Ü>þñ°¿_j÷BÏ‘ŽvÃm³ÿxr=)þ‘Ø‚Á]¯Õµm5íÿ+‡;ÑÏ)þ^tÈ»¯æøw¹Iû{á¦äF¤Nl òw§:‚=+|êg,¯òž_¦—Æ<Öîkd>¾T?½e:ÕÝÐßúžã·HO.ü&z*À{™ ÙÇ>×a3[—9¼·"V‡Ÿäž\Ü“+ۯܓk•ž\4ký^Ž\dZ7²FD¸ÉƒDâ†PEvI¯Í%�ŠŒ÷¦}”;{E ãÊÒê-hçI´*éM•’ÔsY)™5ºÊˆ»ŒQ +-Îw5Æ0ì{«R¨w™^ŒV¥Ô¨3>?ç¢ò!]†ytöð^3_ûÞÃkï‚´e|>§$fK[eÆÙ-ΊÜà¸[åÛNw`ù^ï‰2¦ÎFUÚ*_0%WàÛ¶\ȃۮCÙ‘óy–x[Ïœi)+¹8&q:;š9™R´ö¿õÕt6Nö>”&™›Ô¡šÕ¢òçüdÃñšMúÝnÍÐ\·89ýA˜zç?±Ñåøå'¤ÄlPÅ»Pºç€.šñI”©L¨%AMGJrˆëmdŽfø$'ŸîXbË}b¹Ž¸Åæ~9zô</¯aIåù–¯aùvá²ÏÁAi£ÐÖ©¼\”Œæ åR•‡Ï�Zѻȓ» Õ4Ϧ€3´41àY“¥'2uÏàŸòßþ‡¡Ø¡ #¨¿ÿüwù"úI;χhÕ¹ñ׿Ê{è’vUÄ™'ðOù¯ÿÆy‹ñØÃþôQ“Fñ †ä;‚x”ƒ!ä)׌hk€Û±\ ¥‘Þ·™ªá[92§)gaÔÅÀ˨TfC¦Ó|¡iþ<ËWjz—É=[”Otî7—åMÄZ;Gâp¢ŽÛDHˆô:L¬ðöb¦�w .Ìþþ÷;²´ NŸ¡•©h¹ûô‹âJ°ŽL©ð�uaÜ)çÛKcNÙ±ø²¼‰Ã>$•\6×Zöy§ò®iGìÞû¬ iYJU>¾sX²(ŽÁ’ˆg1c°Æ\+Í]¨AœÅ\’c”¨Ác69õû3j,$úFbÖÉEM:!Ÿ4IÊ%P”äÂOÍÿ±”ÀâÈ_?‰üµL]0®i>xÂVuQ|µèËËâ¬9c²Æ¼åaœÖ‰Açi„«D]ôÒ–òK4Kv0É`¤èfRåÚY=¹K—B’2U ¡ w|꽫@g‹ ï2}@ù\û;$˜Ýh‹šD¯qIôtÊ”,Y¸ä©L±KŽñmŽg‡8ùÄ— ùnߊ¤~d…A7>ã˜\S파.ض&áãØ +²ÌªØ%à{-–]eÍ +é<rª›XæÙF„n¯g’7Ì1ã 7áñׂ0âœL©ôA ÈœÄ|NC¨ýºßµ´h¶y/[—†tC/@F2‚¼åÑöœ[º5Åq×i|&<ô·œwŒÞ7aø_¢=Ùôš3‘£¿k)@è9,Ý÷à‚é…=Qï Úml6•]¶ã +ä3ä-`ò—6BÈ]-ít Ù�Âöž ª½!ëd‡ôÀAcÓŸ•`ƒ†~öW…Àƒ°ÕKg,¶Y:¥Q[ÉïRº÷â ¾xã…vïÆ€lm;ñnFº™Òà> =«7"v&å¤ý¹îæÅ1–Š M¬¾0 +YÂÄÈ0™Y‘zü4Ýθzdwìÿ\½ +@�>P]>Ï9|Ìï›òð¿0‹ÂT´$˜Yøº¨Óø¿š.rü—U$‚ÿ":|Ç4Ít4Aµ%W¨Ž#XUY’5Ñr Gû ü—Ÿ†ñ2ÇÝ~½©ÿïGîØÞ¾«mØíþèòugû´ãužîäÃ#©•‚ñšÌÓ|,¯&aåŠX„ã5yÁæb໘©ÃM$?pÖF‰Áì"õ“¯¢nX'ôÊf,R*d£þY-þ“(*ŠÁàj§ÿU¤ÿÏÐ4Ñ�†Ðt%CP«ª$�]–…ªièäÏ¢]µ‰ÿéoß×»Nýâþ²6oŽ.ŸBýôùêèhwwüp\‰Àv†'½nD|¨b|§ÝNL—¸R‰Îü~˜¸˜�|’eÊgwïÚ§ÿ?:dBŠ_£ Ç«ƒäö±�f0‹þUI†ô¯êð?É4Hÿº¬¨œþW‘ý[—5E´M—DA•ü·MCÐmÃV-ÓÔšFü'd6�Üt†ðÿì=io«Ê’óÙ¿‚oyO:ä²c"ÍHNì$N¼$±³>]¡CŒÁ¼j~üô°çžã8wîqˆâî¦×ªêªîZ^7ýùÅë‹¥^�0¾’»šÏ¢³Yp.„æüÜÆŸ‹/»Ñ°’¾vðÌœ£+)®,„R‹½òþê%•›üÎ΀3ÿ߀PS*ÛPzé¦'ù¿B¶â¿,”ÎUüÿ^RÿCTyƒç8Ö°%ƒ•ª +Ç¢,Àr’$[Ò�•_óÿø1úG]CP®zѾ?§wÜãsGÑöÛ«®X|85¦áp9æÀeè¿J3bÐFE™‚hÀ +ïS¶ÿ½vèà&abù¾âXá?¹,v—;‹ú³J[ãHkþÿ%þ€ÿ{I¶ëÁ8~dÃPÏ4/ˆlü1Ê.ÑŠªmiy.¼Æàünxgv=ÛŒžgv³¿|Kæ+?¼³ìÁ?uþ©|þŸJ4²ùwÇÿ'Îÿ²ü¯JœxÀÿ}$zþ¼fk–Á³†lÄÿk*[•lžå E° É4ðóþŸ?áô¹¾XŒ—}»ï<ñÜùùíŒ5ííÆnÖ"tž·áõÍC4ªWÔéóf(ÍŽþßB&º¥Ð"_ü+úwÊ1¥\À;ýL@QþÇ:tTþ'O>ø"‡ðY‚øOü¿ù_àìÿ]åÅÃýß^Rrÿ÷¯ˆ<«h’ÿ^e5Éÿ–)Ê¢¤@ûK÷ÿÿmïÉé›cY^´ÌÅB}iu›‹ë‹—Àx¹½²†µó‡Ç±AwÒÌð?ƒÎJæ*#ù½]ø'C:ÿÿU¸ÿ÷á ˆ]ðëç}9mÿY>ÿ%^9ÄÿÙKÚÿ¯ošý¦?(oËQÔ7Ô¶}sæÊ‹›Ç§Þ¼Öáç°e>ŸßíJ‰rÀ Ñy ÁÆ©±(Âñž+X-mbCâò‹zݪ¤î·Rë¸RÁï ëXÁ;óØXáGÛ¡ç¼¾"R‘ÃT¢ù}ñ{[Êø3Ü5ÚgiþBùþOÅÿ¿—ô1þsò=çózuyù¼œ7Î{¯‹Ë³ÇÉÕ±àR�Ê‹úÍ'×ç¤F%v°çÆÀ#z‰.!q[¤Ï@è+^ªW.&CQ¡Ài +*ýîù½Òñ”— +<xœ î˜lçÿËñ%Ž?ÄÿÜK¢ü¿$Š,ˆ«qœÅJ†*°@UEV3MÓ€"”d íòýÿU^¶Ú]ëêôíŒ3ÚÓž;ò=4†ãðê´:Ð…ó§Ë7Ç_-ƒá÷3ÈÌDüZšCxù£œ€Q}åôm2§·ˆÇÖ=ÐýÞ!ÂÓøo©¾Ó7Äÿæå5ý?‘“üÿ^Òþÿå2j…õ1ßwºÜÝt2¾¼6o–îâaúç#¹zÕï_vêº0+ïiGCw¬'²6ÅÈèÍÓ#wàìb:Íœ¸D<pR«`Y.5'ænÑs0°¦À7¿¿nh’N$SÁ[!R@|Tã(˜€¹øÕ¯Ð.ñ* +gÄ*;³.zGÅ/˜}lt¡=s ž0‚iQŸ›çêo‘î¹S¨'ýf}eNH©4ð©QG€£^ø‹ +µ á,ÄrNâb–P8Ëž0õæ^Î1@ãïÝÔ:è‡ÃŸ0—ØpÀÐ?Øó¶#¢Dü„þÁžZý#ãô‚E³æÿ†€è/^6jõÆ]{ˈ€wÞíöIÑbbÅûÚ]¿yÖjàîS^ã¬ßìâA€ˆøÔzÍzƒ@]\mA½Ñ¯5[=”E.bß&v4}Úêž]ßÞ£pø2ež7/îïp‘û!ejõú]£‡?¦çÓY—4>ƵoHÕ)@C}¨áqFÄè¸Wkãi ´!ק،<Š‘„˜Ô^ÿ®Û¹À{0:am2Hìþ´Ñª 8¦J³ƒ»z;anñgè‹ÿÇ'Èñľò�Ø*ÿñ|™þóêþï%}LÿÏݛ׶øhêz89¯©§J¿5ó]ýÞ|1Fp(_H†`Ío›ñ¼VAdÍ3€9ÌÂ� šçúćn%!uĘ,«g:»òYòÝñ›¦÷ô?‰T¸wýO™“Dªÿ©ô?÷’¨ü§A Xšb³†liXÿKb ±ª°ªaš"´,™7øŸ×ÿüÄÐè¶yŽÇóëÈè…Z{lÖ¥³>¸jèçã._[Ô-½ —ñ…Ó^=�ô?ïQvLL>§ÿyx")»ÿ £/‘ýpÚ~ÿ[–ÿ;¼ÿî%}Œ–}ïRít†’2vìù„õîíÙ€?ãžßÀEtë’§]Ýú·^ý¾H2߆ىr ÃöQ4À ÏU°÷z´ó"º~÷ªü>)÷þ;ãñ—H�[ßåuýOùpÿ»—´Å,£ýÕç‰t+Ã:Û¹·;“ÛÚãÅéôù¾órÓtýe܈»Þ(ª›>¸#?8:a|ËßXˆÙ1¶Á_b•Q‡E(‘_l<K3h1ëK£ ”aâÞbŽ_j5”2L'Zå|÷bÿ ÓFûÄçÏ.t?qÚÊÿKå÷E:Øï'%ï?’Á«¶¸~£*³’-‹¬fC‰åLÙ’e$ =úJû—9÷Zç¯=GŽ_ÀÅÕ¢:éÂ;]hŸM´óz[šÔ>¸¿ºoÃæÊþ£�¥™P'¹«Ç VGTÚ=)4p‚«ýJŸ¹´Éÿúxɲì‚؆ÿŠXÖÿPù ÿï%%ö_’ Y¦YÙ$ÿ“ÕL¨±¦iAE ˆêWú¸±íÑ-[;í-åøüõqôÝ©Müºßp§Ó`ì_ù§¯^õºÓÈù(Àé']@ðﺀ(´öŽˆMurŽ Bû#£¾˜¤ÖßÜ'ÄÆóâ£Á‚]±�[Ï¥|ÿ¯ +ÒAþßKJô¿5± + UeùªÊ³’`™l•çMVR¨bUÖà§ý?üÌùu:Ž_}{ÒmÇ‘u½½§yÐÀîY¿ßνábôêû¯¬y–³ÿ,CiÆÜÁQ0]ÙÚ¨þƒþÅ^\Þ7]kð7`’ûÿ\�éã´ÜÉh‡·�[å¥|þK²¤ð‰â¿]…”eÀj²& óVY`Wy–S9(Š&iÖNõ¿üeK¶8Aê¼>5Ÿôjßë+“óÚDSEodG—CïêŒ\-¬Ñóž‚dŽÇ§îi6 ’~Trü21ŽH+ÿ`FX<#Jtyâî‹);ÿ±oÃãäýdßúŸüšþ—ªîÿö’ûO¨ˆ’ d¶ +yƒ•@°UZ¬)@S,ÉTÄâ[?uª|Õ÷·Òì»Üëë´ó6\¶«jÔš¿‚3ëüUù‰þ'…Ë}Ä+gùů…}ÕRß»Ðb âSñ“ÂKaJ6~Ó7ÀMòÿFö6º+2°Uþ—×ü? +òáüßK¢ø¯jUËbN¶×/HlU�+s’&ª<'þ¼ý'=`~æZ@nw¬¡hÛ×s}>?í›K¡Ïóõ–ôÔ¸ç/åÞàÒ«žFÏÖyTË]¤à»ùFÀqŽ‡/ •SçN€=kñ[͵V÷4V!“–âF Y²=Ü làÿ½Àì”Øþþ·fÿ)ˆÂÿ÷‘(þóª4K1YCã°ÿ'Ic ÛPYŽçxÚ¢¤ðŸÆÿÏœÿÁ =>9§“K£Õž‰g{Úxy¼õÎùéùÈ4îõYË´;FP¡÷nþ`ûÇ™[xïsμþ`Ìÿ{)±ÿúJóø¯Škú?ÊÿßOúOCi8sºm®ùøôо©/UIz6y¥ÑuDõÅy6jÕáE×éZÃ"yÈÅ2Ì,µ*SºöB7 è1ÊÁÝ›Ø(ã½ãi‰ÄDÑ,±¡C„c&ÙI¨<ÂÐÓÀŠÅ£H²|ÚK¾ u"‘ĸ0CXh/+öŒñ <}-PFV“A„FYÕ¤FZŽãƒDn„‰‰ZV¯’Lc'HýÛ$y”›(.„ŽÃ¾´ UEâ¸Ui‡Ðà�Ÿ”gˆþ?ü^ü¤5ûoE8ðÿ{I[ü²·š,ÿ4˜µbÍy¾ó#]5«|OK¹r¬·§ëHšÖ.”FA�¯dñ +á<&–J˜çM “ª×¤µ¨ç�ñÁùƒJÊ?p¥ƒÒÎצäü·½ °¾MÿWäÊø(Àÿ÷‘>Æÿûg»½„7|¯úz=ÒnzÓ¹ú·XG+¦ðØëtžNo£ +$ôÀ÷2ƒKw¬'º¾2‡Ì\ß +f'Œˆ<.-¦¿Òr?xØ_Êîÿ-׶¿Éÿ¯®ûáø¿—ô1þóÀ†3Ô§íª._Ç‘åǯÕ6èj÷§—OÎë(œx=¶+iÈ.¢ãïÃH÷ °ˆÛ!ËŠCÄû'yß=óC©àÿ%œ~ïÿõË÷ +°ÿÝKJÞÿP’xÓb-H¬¤T¶*Ø&Ë+ª UM3,s§ñ_¬+®%Ô;½WùMyzx©]D“‡úøª½À<›7³ëð¾Û‡Õgªï[€Ì•˜|nÉðó©”à?¾“ù*öþ«Š,–ðŸGyüßGÚb–+]‰wÝ`* +ÝÆÛäîù¢eÌÅÞت_LÞ暧/¯âÎÔuÞ¬³A‘<”®óð ÜÄxE¢>FÛäÝžÖ¡Ñq‰G8ÅŒ„Ì0Hž$c,Ž·ù'bæ?Ø£ã ù‰_ËŒÀB²Æÿ²ä=qÃ'?*¤¤–5I—Ì"˜¬ÔÐLBŸ–ú9¦m<Tº`ü`¶± 4~úÑ$ôX#t¡ý'c,ÓsÍ!âv˜Øq#Ì 4;3/p&>:¾vcܘq}4>Òª3<›Jnf´Wµÿ'Íîtû¦ïÀâ2vqd¨_?ˆÑLa¹:äéçýlDp>vC¡þÑ4 c¡iâ‘¡¯<²™ëyh‰ÆˆÀ3®MJ›Dò’ÆX–É/C0*]X!à¢m2‰Çƨ뜿/2¢’Žtø+ ¦€—o·;Ž6ƒÅ·¼,Y Üί¶í<ƒ%n4V²è‡ ñ“áþÈþaN÷„Ë�Q‚¥NŠHn/ Iº&ÇL3Î@Ø1?GŸŽwnÝ‹d§Šô¨"‰5Î$µÐ�²JvîW@Vê¨Ø†÷û>þǃB²R’w‚bäcÒ<ê{ÄÊ÷œ.æjð8# =ÁÀÐx±DH{Áó¥–éÔÉPÏ\Ig'x½W}È6¾Ýl<’wT»'A} ]ÂË„›NGF ¡H]Ðôw‡¦µ7¾@ó¯¤ÕÔv(iûß_b!îÂÃ’Szâæ(s†ètF ,Ò1ÓÅÀàæNIZó;Bb]K€O +´ÓDÒ®OÀ4wà#˜ æÀgýcr~°£Í%«‹€é'6,¿{ÛÈú‘]€ViŽóø +-7¦Xºö꽓)¤»÷W`í9Ï-m8.)X¤ãüMX¦ï¤lÉ^°¿BáJº;®¤±Ÿ†L²*ÁVÒîG<fYåc'óI[Ûù„Ò†?˜Ñ—ÈÿãMüF�ÛnÿYöÿ¢ªûÏý¤ÄþÛ4,È+kBÊJ20Y(…À€ÀTaUåáWÆÿéÝD÷OÑxgV-~!àl j×€GHôÅìéI´ÕVßW‡Ü*þ×(]ˆÐ²¿lS‹ÿpÐÔÿ7þ{<s=Âø®¿Ë0 ã?/*BÿE8èï%Qü7-SÐÃd«¢eaüçX r BCÑL“ãmÛúJü&õè¡=�³§à6–B{dÙã“OâR¼^Øõzÿy�{íªV%øŸÔçàè(bh.åŽ*ÉPè Š6b=$qD„B‹0|ÐFø猂(&B‘r†cCp8ˆÇø“‘oÇìBcìrrp’ζb€ê1fùèP"úï¶@h!ù +]+õ¤ž[-º”xæiƒy¿â±ãvëŠRò–ÿlD.]®P7 ¥¾Í“V‹Ëz”’ÑfU²x«_t¨8/—õÞìW5’%(}GŒøðÀwŒ õý|á &cÒsò®ŒÞ-¦Ðq”+I¼Ý掵²Íc¡Ë©“éD«1Mû™›ÞÄ‚E÷ðdhØåv~½’,â-y½:Â(£K0› +Þ$ÞÐÃ+x$_û›*@ÏsÇ‘m*‹b„-lKQáhS¾¼õüÄC}²èÅeJŠLDÑ;eÔ`êƒi…íM˜Wðé_¬3ñevøQGi•ºÊˆ®£õîFclÓUøÖq-¨'k‹‡³õ%ƒõ2ò…žäëRg+0×sàŒEÚÒJQ÷= Y¶MÔð¹<ªcWŸ:^Ü$ñì™:aÐÀ|Gˆä¹æG=!Qmäƺ1‰c¼]µñØ[ˆÖ‚OKËK’/Õ³è(¯€›ttQÆQF%zèc,ŽÖ*’z:B&¬Å_Z`R"3m¥™åR|ò¤Åu˜•S „òâ`M…Ö—Ÿdêäð‡V™ŽÒSÇÆ¥v"¯5KÚd¦|²* D¼7&Hº‰˜¤`T¦ïåòuZOXËuÿÁ‡_@ìs4{sŸ›±&Ñ +AõɽtîV”£çXr*çû‹ƒ!ôÝe‰0Ëmiã“%¹?sf®}ù§æÚhr{€ öò…bT½Ñ;[ùâ¹iHÉüQÃx�èÿpCç ¦¯“‰Aü‰Bb_A´ãéÂÁ„ÆSÉ㔑۵„ .í"Íý™]\ûòóK¾öinÉ ð ðs…SàMðùÆ•¡kN}¼"?ø™4µZ^/¡ŠÝ:•»ÝMºP7Š«|@ŽMKý?ÿ}´¶EÑõ×cækyéÖ³¼Œ¿AlcT¬@§@OúÏ@ÇÄúlôÕ^"‰c#†·�¾h•âЊò[}.ÑàÃa…BrŸO¤?|ŸK°‘0U`@2Û‚q�Ñ<Ü>œð‹>á„Ž‹¡†õÕ⿽ïÍdW˜€Ó‡´-¥¹apÙÇœÚ8…âOݱ·QhH¿Ó±ZpTÜG¦¨ŒYÖÍ,U]™–‰STº(Wp#@Üfº1¿ ~æ„(û–omÊÄŒF[cLåZÌÓmýË«º©,,«yÞûÅúª“5`I–†xßÏ—FñÂ[ã± F î#f“´HTöK…Ál£”Ž5W¾Y ÉO±$Tá °…‘!†¬ÔW˜FŠ[5Io%þ½+]nGÒÿõêŠÐLGS")ŠÕ5í»\>å³\ÑžeJ¤II>Ú1ï³O°»ÿæQæIO:ì’dËDGµ€@ 3Ä—™af&P[TíHq·IƒFÀQ±×Ã[ÀÌøì� +ƒÃ¯ågÔ€¡åúzÁYÞ7ѽ{¾�·‰Û©O–UÙ’0$[)ys«Šp‚¬çμ7ÏU_ìŽ<×ܘðäÝøXW¸%âÔ¥>ܸH…¨!xp‚vØ*ÜKDRn™Hþ…Ö.©UÔ+Q(…`-úK‰Áå“«Ù –o©º™®ˆÙ)Øz)šÀÔIkBñÕm¢+Ì—•Òß à#Õ‡ÉÉòËÔ$ˆ(Ê&%6¤i¨+ÅS5è¨b*·ÝRÙîÇ8i¶ÂhD3Zi]¢þ\ü/赘ª¯wL¤/¿šzÿ+Haü/ƒ¾ÀYžåÿ}))ôÿcèZ³Y×mÊŒ`ZÓl +,#h‚ÔNæšcüÿÌÿkÀâîæq‹éžð§š¡}Yo\_µDí¼¹iíj·þÆõþñÙ¦òíZØ®?Œ�g—g| t†rCÉ’¸û 3o8Sp0ÔãŸ"8XŒÿHÅÆ·!ÐúçØ\ü¯:õÿ³¤4™,5^¿Ë8ǽõó=Í0;Öæµ¹Ó¾<eo7ûû«ÎÝÊïo\¶J±Ê]”Bùª ùÊ–t¬ÐñÀö×w‘z':´áÆý°À¹\XÖŒC+Çž€0”O¥ögõoÿXÜž¼~û©m[O]ÏüGû 4ðÔ žlÝ} +î¬'Ë=émûISAEçÉpœ'óÞ|RïïÿU³¡8/ç”äÅ5ðbtP¯é~£ýýÏZ VÇ·Z•O¿lož_Ÿl£ŒÏŸÂÁVüó'´¡úú_>råxéö©†3?Õpչϩà×'ï34å ÍTÀþçâô üáصå;UX°:!ÅØDŒÀ>âSÍ/ǯ¡ÎTJÝ>5Xõ¼tÿ:€Wv\¸ûç2ÏRï?Q*ðÿˆÔ0cYþ_ëuÒÿcƒú\R +ý¿K¬¡ª`ÃgÕU“$SdT‚�M±)/ªÚÌñŸf±ÿÞ>n9ƒ‹ÖI¯‹-Þ׿ +ßlÅ17·¿vC›=?e8Þž1ç7h»/Éx—÷åü𠼕qþˆºû~¼fzŒAÙ´T¡˜6õ�7Õÿ£ïÿ¬Ä¢øï"õÿ°”4™NnïšÞzkÏò…àôlð§§W»²d튣Ósi§s»£hÍã“ݼÿƒ‘kdL_íлböÛŽ _‰Œ]u¤âCá.V¢Äφþ䆃1ôaÄx´dS}†Ûl Qùö<ãÏ|DÏn¿ú1p깕ÔCx¥$Îb;ƒ·V«Y¯jøCOuª®ßFžè‚Zª3Aí#rUµT›Þ¤ +¢8Øék¤ìò25ÂmÛÐCâ)“ ý’¡>ƒ7ˆ çÐP ¨…+è1ìƒÝó %».ÄÿöÁ_seSð¿€ÖIÿGñ¿ËI!þWhJ–j4UµêŒ`ò#7ù&#iM]”ÁŸ¬Á.ÿûصY…«>\îîK}ι8Ü2¿?<ï}7«Ñw}a*g¶{²—Âÿ‚…J‚AÖ˜_5ÖCC/xúH‡…ð1ËDÖáïË‹¾Rx=B¼ÈK¼È›ò6Â2ŠãMJˆã%®�Á›~dq§)O+QBòg¿„Éç}U>ŸïÎ2±§ùÖ)ø”‚OW|:gì)'K,Ãrà¿"è)ѹOÉUó|ÈàìÐÐ p1˜P¢™7‹¥ˆÎ±ÅCtRŒ$ÆHféûb@—hÂŒRz ãôÇý–°Ìüat_J‡kA~ÓF:ä‹H®ÖܽŠþ¯ÐÿKè½uNî_¦ãÿrþÿÁÿ·”„õ¿ªÊZ¼dXLCåTF¨Cÿ¬e1œÁ + Qc UV©ÿíüYÛ±ÇQ׺Dzßêïlyë’±±qÑ=ëœ Ä£3fë"ñÿ’_¥±6x;éÍy‰ô»½À¼÷ý:Añ¿0�fŽÎïhþc9@ÿ Vâ%©! ûI¢ñ¿–’0ý³¬n44‘eL¡Ñ`Ñ4˜¦,[ŒÆ›š%êº$ª3Óÿ,ø£½ýxs§O:G{ìíà”ßêŸZRï츽Þ2,œív¿iRx±{&²à®”ðZ]+'‹5ñûÏ–Ršü§Ž$®—ìˆÒ¹xsÞÅE(33B˜‘DFÅQàh¿¾mÁÁ†EõÌ\‹©²´Ëp“[úN®E÷ã#Ìh à+•(”›Dø¬xŠ÷à7„a ~l«W˜¦âÿDòþ¿Î‹”ÿ/%aþ/k²,ëàú<Ç2‚Á7¹)þo˜‚ ê¢ÅÊú<ù‹?Uë]ËÝ»¼aúY÷þë7‘ÓN[;—ëš÷x½Õ:¶¯™›¾‹ý}Áuoî¡ è«#»¶c¤=Çtè`ÝrúÁ×þäo*ÅôÂÀ¾Nü7¾NÆâëœ@éi2„f{óBÞz¼¶ºZ][?Þ»ýrðØ9`7;ηŽ¨46'®<h¶Kªã¸wŠÝ¤7ôMeè9®j¤,ÄBÔÞ1á~ÎjŽ—ÀÊó\_õaTè{»7ìa{rY©ZCÚ³*þÒ‚à•Ê@ n惞Fÿ¢@Êÿ†Dí?—“¢øoB½Y·,F•Lpþ³Ži +Z“ѹFXMµü3ô?Dã¡ú©)ûaEMÛvN¯Á~¯íÜH‚çµÏ¯äúö@`¶¿î<Ùßµæ×ëRxË]§%ÜdØtý÷¡¾6>2<[JNBý¡ãÄšŸÔ»BSùôñ¶™¯ßO«ZýR"Ä_xט´¿�Ê°{Â…¬GwÿI¯ÙŽ9:ÿü¯åƒ†Üá,ÿ+IÈÿoƒNl°ÆÿÒýÿRRhÿ-pgÈ2Ãs’Ì QedµÙd8¡®5TÃEõgÐ?¦íˆLp0à‡X„‰•¦Š/t +¬ÊgÖ0ÛÞq×¹íͯûß„K¯¿u{{Ú:f\g0¼6zÝîhwûzk?h±†9&…èرgDðbÔâ¢Ëq"¦ ¿çBÅóÀÅQà"gScÅð¥ãðÄý7‡'&PÄé«»BX¢5L]ƒÏK/²û褧tpDaÅ1GpJ:B^0Î )jú‡Ay4²¿Ñu\æþ½€¼•#ð¿òþõ¿YHç›#»·úÏ¿þ§|þ$ab>qTþýßåø'‰@A…ÈçÙ¿ÿ/XÌö†ewÃ…ö`6D¢‰©Lz$V¿Ïø[™ÿo°³<£€CÀJÕŽ;È@ˆD™! áz(@È ’èécÒ[ÝíPE¼d,—Ò_“¢XWÅWùYüÐ"û¦ø¦=rSr%=IT™0láƒ9¨~ÒüÚçžÒ‘<ú¤–±ã“ß?€ý¬Ú¿ùPîø¦õûh¬ÕjwwwiC8ÃÕ,Xiƒ=ƒY3û5ý{d/þá3]”waɧšú +=¸±Ëwh;F +)´§IÍP¡·Ü2–ƒBµbA„V)¹ù‰÷™yŸøä¢á™D—R«bb·f]X2Ÿ +eÎLdíÓÑÚìTƒ˜LGw{(–œ&�¾®~“[K8·xýLM.yù8l¢7qØó‡¿çÚÔ}®ÂÔiX¾ÂÄyøyŒÂC9“aöf2ÿä«Îd¾;“I*økžÕäáEÀvŠk§¸ö÷€k®aÓ"z’]Óyú +vM‹¡®XyG|Ö(ÿ¶àÑWåÕýIÍW„Î.äÖv~3_¶ò믿¬í^¬ïn+$”UÖ¦W¡œÿ½q~øc¨4@eÂØâ¹Ù:¥ÕÖÉí»KhïI¸R(0µª`þ´¹VeR?ã¨RûMjžõdiæYŶ;¾SÅcÇ¢ ýdÕƒ$%<J×ÃÙy®É–ešFÚbÿ.¥‡ê:vÌ‘w8VT\àð™ŠÄ +Y|ô·BšõS¶ÇϡױT‡†XÈ"èÍÓ”.LÜÁ¤è4yÍd6ì¡Ô®Þ÷"®•TPGÍjŠÅ„/KŸ°áªäÖÂÿÇÙÑå_4à¥ÐÁ|–{8¢x¹§FF,÷“h¿F.w/*x¦Yâ¤9Š÷–«ÏRžqÿŸÅ@ÏqËÆK ž—BüÏÕ"ÂSÿßËIÿ¡I–Å[¼Äl½ÎM£Î4%Sf¹^×xÙTÍÙý¿–H \U¥déNjl©»æöÖ×C]ÓZƒö¥,®OÌïkû‡ºr¬Šß;üE}ì"14Ù¤~D� ÔpV:ìØ}pî©}xc†Wü<ò+0†õÖÀxì8‹ôê:Küaÿ“œ¢Ñ&¥©!'™‹>ëÇË&SVØ•éÞÜvì¬><tçFlî©77êÍmIÞÜb—µ9²ÄùϧÍÜs¯L ¹þL§Ò£ìóóºˆósŠ&oèY7ûÄ$Š†[Ki\Št'€oëà¼í‰6§è@¼ä& +´r×>~áó…¬ÆÉÏ/Ð&ÁÑR‚²YvÞeS0´Š²1r$—ÝwxX§ÞÇF£l¦ä‡8aì$ÆNa\¨O\\8×/c²{ù#3|x'eÁo‰Ã’¶~ƒ±t`ðÃ=Rþ§™oÌêÐZÉqÐqÏ¥KÉ®¨ÔwïòÀ0Š5êYRÁE:\â›Ðýx‘Æ—#ª‚á¦d ¤“ §60=©êSåq˜™ßÊé¹ÁDªg'3š}9üt=»XÐÁü—:â¹WtDfp.|¸w¸ÖÖb¼Sy‡ÓÛ—w¹ë™DÜ动´£Òî‡ÝG#îšcZHa¸\æ¿„KϽ:—&ú3KŸe ìwž²gÊž){^${ÎpªçÁá&³åÜS¯Ê”'ÁëƱä˜2eÔyÊ”)S¦LyAL9õ%}ãáù%Ì™öEE¡ÑŸ‚ú±V>¼ßL¨ +;´V>1ahnèË"ªõ\šÉ‚aù4%ÃDšq:•äqÙ×P +•TBd‹¨„X „Ø=lg{iFX,#R‘¶×Ê=Ó°‡YA²ýL5’l@c€¾ó@N l„³gÞæ§M”ÏؤbØ–E¾;Ž'š_Ç@¸Ð\üÎ?¢¦åŽÙ× /}ƒ¢ÊjÛ%«fy¢ð Ñ~,&LBï¨ýv¸ÄÙÏ—¹Ç^W\æº3ƒ¸ÜÄQyIå%•—T^RyYÜäÏ*/a˜Œœ´„™cdå0ÈWF¢‰x$+'³0δ˜2Ó<“'‘þ°gúvÚÙQ|2€œ³û¯#år4d}hLµÐ@4ÚŽ>bí¯¿à‡)ÿóŸTR9Håàû”ƒÐ'˜1Ý +-¦SEY¨—n÷ ™W3¯J¡³Ò5‰€Gú¦À™R®9hy÷Ë/šÝÄP><Û¸Óvwºß[Gë×¼ÌiýV[ß½ï\ó—ÙŽæI4G·…ö†€ÿÙqÖb½A6Þˆ7HêÓñe>çé½q'‰€ƒuß»oDÛ²;r$eu¸ª^§º\œÅ½"ú"êHµØØy!ö+—ðŒ.³~nË,fÒL>ö.÷b©‚ÈN…ìûÇ)¤0Ÿæ7%ÂÀ)®—©”2%$†1/7*Ñ"[^”?•‚yÓ^U@U°fzX”B*\¤`Ô…à©ç•±Å/óÆõsã÷W†][Ì“c5¾HŽEL +åX©D9ÖÜü¾À$Ž’&º¸+´J›»Â=ìr(Îyñ©âVÅ¥r_ûÝò(êé.îä+xºCœ*Î[ŽŸ»Èr5Ók+ï8$už->gÄûÇb¡™è$!ŠH-@€¸G4"ºÛÊ]MÅ.µòÏä×0áQõÕõ#™Rp·@L©~ÔŒn&Õ±ÛùåŸUñ’eX "µí›–Œ=Ê_i#²ƒÉ‘Õ›yTY™±x¾íÂëY¦àŽ»È:oõæ¸wE´½’T4vP°ìì¨fœ)Ã|}z*ÀÌîXH<Cv$+±Örœêé}»À‘Uå$÷ê`Øñ'³Ôâ9ÕÕ¢ÙÌ.7±#²0ó]º³ë¿akP—]FØ’JæåÑY%5çø¥ZöR$è€}bøJP=Søö|ø1Èžë—3û«ØKç|ýœ¢ "¯Ý~Øç)f_„+Yò‘ðÍœ&÷·ÎÓ£‹¾Z1+›Åal€+ZºfXpˆKròÇŸ£àÅ 0¾^ÁG.Ô‡¸ $øñ÷LX<AXYw×iÂJ¯ˆˆj¢ßìqïÍ»Ü5wxiô’.C8cà”cž\lˆ¶1†Om£Òôv‚ ÎSà$NRàäÜ“xq¸J\ƒ Jp[˜÷<.K<±XîTHDE&Z˜µR?q”ÁRKìrlÚw?NIáÜçqÑÜ3¯ÆGOͶ€Ã0Ô¸W”RvJÙi¶ˆ²Ó°ÓåØQΛ—N4¥Ä}¡”rPÊA³E”ƒ¾SI²i¶’‰äïÙž€m$Gm#WÛ6M¡%ZüŽ7|k—Yóˆ�†œ§K#n¦†°ßJß�’¢ŒØŘøú-óåC¬´J@=ÑM‚ÝyŠ|S”Eˆf"=£äî–î2Ð)È‚Êý•Ìm5ï#"gX'þŽ÷fá爪ð—dåØ‚?ƒäÊés™Û$–iT´è2ßlû“ :`OAÔ®¥�yêä'ò¤ã~pé6= S¬, ÛP‹!äaÁÇ¢�´ÄŽÑRmgÜrŒ^¤×¢í›*Øu|´%ûޙ͌QóÆ©®œšÊP¿~´ç†µV®œ¹‚w‹÷:«óay5Öt�ñ˜¦ò(âq—ÄèÛ®¸“<m×/+3ŽIèÛ¼F4;¬•Àæpª«‹‡Ì<¾bÈbW y¨Vá1*Ü d3CPW63Añeó1¿&2aŸÉ¬ñ¨°éB䦼ÕC¹S”‰žw<+X.ºûˆê-+ªyö×KA^¯û§IÕŒÆ]Mù2¬Bõ—rgš7óŠ?9þ;ËÖë0þ;'R£Î¿Y®Áƒbÿ} Ç—TݪKºÁðM–eµ)3«ñŒf6›²¬6XAgÿŽ xr÷»ý-á*p/•»öˆµ÷„ž¾¾¾s¶÷è?˜œôpóhÜùýuïƺFAÞã%z¯|9?<(_œJÉqõ›˜ÉfÕûkåkæÏ«+ÊG¦¥j-xÀ9»j÷�WŸÅgÓ4úçx‘ ^hH”þ—‘&Ó©1ô¯¾¨ûæ†z+ò•g§·wë[]îxhm™žÞÿ:ì\ôöx¡éÞÀ µmƒ’ÝʤqòÿÁTýåÉÿF^þ×)ý/#aùßP9VyŽa AcÖd™f£ÙdADÎàM2æ)ÿ»æÝ~“OµË¯4»Ç_6dá´}}`žÜ~“î<ëh··ý›DþÃ%™•ÿ× gœü¯\W(šžªµ>˜Òjä{}!€©ò_àHù/Ö)ý/%M¦SþøðÛæ™þíâøàìzoKf¼N÷X¸‹ý~_=¼:ºp¶î·o¿?îr%è¥kE³k™^{€4MLÕšùgÿiáFqܶݟ#'˜FÿbÜÿ†Hé)<ÿë:+ZªÎ˜¬`1B·U`yÆÐxné N0ùYå){c‚µ}àOÌÂ<´Ð¦l„–sÖ¿ÚÐïï÷÷vN›6T»g7ºW?êî¶û—¾Î8ýÖ—½R�o)dA¸ßl#}j`¦¦úŠeûÁ ”ØÕz¾;²ÑuFè8¥È6ö¿NAÔQJ( æ*d`’~U¢\%ÔâB—¯H“–ÑGB¶cÇpŽÅÏ|þG_¬Úv\Mu漘Fÿ V è¿.Õ)ý/%M&AÙ_¿Nn†’y¸ÑºW‡Ûõv÷ÑÑm}ç;¿ˆÛªø8:w67š%KÙ:Ï@'LøÚi•j£¾QíÙºï®5¨ÂZ¥pwèG8 ¸‰ˆ¯Ño±LÅADºÿPáy¶âË•LáÈôm:Á³SXɨ‡Ño¸ó%Þ…÷,€pÑEýŒ]|í9ü‘Ó?ÆFUÑ7l©çÌ/õÃÜ`ý ’þE °JÿKHXþ³/œh1MËòŸŒlX:£©²YxVbeéÅò.©)¢þˆ=ÝÚ8¿µ÷cß=<Á½â»ìÙîÕƒn|yX?¸0åCæØòšòõ«4ÖœàìÈ‹yà–-ÿÿÛ»ºå¶d½×z +”o”T™4‚¤¤Ê¦V¶eÙ»‘ãÈ’gw‹5†$lC„d)•ª}}sçËÔ©\¤ru|î–oržätÏàÿ‡ E’Åùª’( ~gº{º{úþAÃH,x§p¡/º›x=ß $ÈÝ”Œø‹Š4¹ýví>€Jÿ_¯•]ÿõ¶*ù¿þß%Ã]JƒÆîi5t³µÓ ;;; ½³ÛÞ×:TݹNÿŸG¦–öæñ!{¶{ñó“þëѳWÚÙ©ùC÷ñKãiëU{¸qBÌýïZœßE™›°#J\©952‘üñŒ*3â½ãÉ4^ÆOxÓã~[Pdÿ\â`ö@]þ`ûœÿ¿Iþ¯‚ÿ }w¨u`Õo›:ðÿpü¯iFCÓ{ÙéjFgxåõ_,0Wñ�ÿöãó‡»êé‡ÇgGï.ïüôÐ#çÃGÝ'ïªfl@öÈ×€|‹�¢\]µõ/Þ:ºY‰ ø¬ØðÒM$üµÀ ÊlǯZ\Üç¶Hh±DGEõ¯ìQN&¡}³œ3!Zÿqp=ÛÿÕë¿šÿÑÚªÔÿkÁb|µ{ê»?j‡/NZç¯ÿvRâðõïŸj'LJ;gÆ¥ež¿^ô^3¶Å½j}©ºµÅËEvFd+ƒõuâM?ð]6¥~ò]ËrÒá"%<–])ò7ΉëÈ݆+"Øÿ°úd‚‚Á® qqßÙþaÙPiÿkð¿Þ…Ô.èðk¯-ãÿjXÿ‰ÖêvõvCîtúŽ¦5È°Ûm˜f{H5½Óî JÖÁv+;�†¯žÿzÖ?¼|x|Ð8Ÿ?wHûÕ[g<8øþÇî}vl¶}bo"@Š<#óÿ%?¨ðƒÛ[Ùxj‘/êjÄž�Ñàp-ƒæƒ0¢ûÁÚž!tüN)ÿ8ÿ몦â^@KUÕVûOJgmo”À†óbþ©·&¸ÂüwTMÎHÏ?/ÆÞÄ7ÏÉÌ›ì:œ�뿦µ³þ?Pdüo-–ÍCŸ¸¦5ÿ˜u§QÇ#o©§` Pá/“ڊ˪¹ØÀ’M(ô[É”¥0©ýsñjÌXºsIåÊ'’º¹J›1³¸,Sëh,N‡£¸O8K%‘‡â’3j’8W,›ÚœwbMãû¡yä4™œø„c†ó07«à¼àÃã/Ê4ç N;õ`ƬøѼºNþ´ï1“Û€Ž +gª¤gW×áˆòÞD¹æ)S˜ßéü# Y¶pF¢Æ 3Yq-ŒDŸk —K2Ab?»¸+ørÀ]–ø½¤Ç7O(4R½Â‹;}ï‚òbF!üˆ‚ö×¥T‰}¦Ç仢7iDéœQ˜ƒ#^39B©.ÕŸuu®%u–¶‹( ˆÞ‹øgÁµ žšFÄŸ/ m˜~s(]ÿÑŠ²Î®Å%X±þ«ùüŸN¯'ãkA¸§Æg›eV.–aÕ¢Æ2Ù}.ç'\–¬kå^…‹3ŸØ%U²6rÝÚçŠÜõ-\|û"ìY“™È‡6{ϰɾ6RzáHËÿò\0мþ÷ˆªü¿¶––ÿšÚÖ¤ü¯Q4Oâ€ÄU0·J&OmÒüŸÁ¬ÞU³Â*ù_ÏùzÝŽäÿ:hdÁSêºB_!ž”wˬÿPÿÇkÜÿmi™õ_íuåú_ÂõÿˆzrÝß@¤ù?Œ'XÝË!ŽQ‡ÿ–û,ÿw[ÿ]Âeû/B¨Po6ÿ¨PG™îó~<�¿0O™0á8i*/0©‚áaâÒ ÝÎ.õX]½†E„{Åó•)ÁM8Ò”òåv¡ÿS¹`þÀ¶¼ñ*¹`Õö¿žµÿ%ÿׄ(k +§Ù€‘ˆ|½’S7•üï;+K€Jþït³ü¯k2þ³„ü¿ïø6ŒƒM”©†5ÿÃá1R"ÜaØÿ¹Xp^®×`ÐâfWQ�ªíÿV–ÿU]ò-øÿ‘˜]&9|ðÿó`û%(Ö¢ÿgó¿´V¯#ó?kA3€Õû%ûoJã¿F6ó<â^¬?þ”ýlüWW“ú=C3a¶y<qe�±‡d0ÿu&zé"Á²AÝâú‚Øëùo3ߎÃQKB¥÷ý‹#¡Œ1Ð;5ÎÛžÿ—=³&DEÈ'¶u)l €Vc�™Íˆ1æu¼Š#ÌöÍ·¾øŽ%ÂÐ’?e>ËÝd),æ‚›æÊúP¼ÿƒµ€†ŒÍ®¨ðeP¹ÿ£fëÿvqKXÊÿù-Š8‘$J¯¶Åæ[<AKÊØ=äYp’t }¡Hóøw`6éµÿlÿÚéérÿ§üàMÉüwfK6Þ0”Ú¼.ªÈR›R6µWˆ©àÿv'kÿi–ôÿÔƒt:©—[÷ –—*Ê´zL$UL¼µºÇøã½JÁóLgóOÄAcc>¸^°¾<¡èÅѬÍÈÉwàÛï26Nlíí§¬<eB<ë,a‚•“ÛÏÙdàr]Éo_ÔDÉ_t�¿˜É|ÓdÔmsÙ7€$Ù¤Ï+«„i7é˳§bÝ0Œ¦p…§.%³bC÷È¢ð{˜ÂwŒSM‰Š^ÑGæ1g$>[t‹ÎZŽ+$ ó>©Ïu臯¦6òy2¸òmÚäºôÌbXfûÿþõ?Ê>’£çâc†ªàŒÿü·òµ&Ôeéߪg‰ÏüÏÿ¦›ÃßuÛ¾Ž¤è\æ±Üd9Ë&‡ÌÇà:×¥èšqáûZãN*ºˆ!E÷Õ|#î2F®À ˶KV³"á”aEôô<»Ì¦^_T+ê§ûÞ.Ÿc·_Û«.yñ~Aø +XSpÂ\ÚŸqÖ›Ì?zëñ¹|g¥Çüú àqd}Ÿ²µ$û‡âÁåó¬ˆûb~àÄ(‹àÇ`=ð¾¨ÇŠøo,½ª Xiÿåê?w»²þc=HçÿØ�ž/[‘&7T3L¼QÊÓ=ëK¢p‰E¨Œÿ›wÐxwqµÀÏÎÿÓ4M—ý_jAÈÿ J‚vö†BFüm*Ö0Bí1Vk_ÍÿÙýÿž¦Êúoµ Zÿù|£K@rU€góxSbK)p—Q¸þc&Xý[j¶ÿ³Þ‘õŸëh$ðØõÓ%›oïÿ^~X¥î{ˆêýß\üŸÚ“û¿µ Q’ðà®Måz¿9XÌÿ¾cÖÁÿí\ü—*ã¿êAܨ3ü§ÔàmS])6¥ñAyá¾K øÏZíÿ®ž«ÿÓîJÿ_-Hït= +QÙõ5pÜÚàs~b¾l7ß B-’¯—+À¹MU·£ýÇ̆ê‘ØP]¢àêzç™ú_XÖ~Pÿgû?öô¶¬ÿWBVxÊ\"€mÊó?®£ò§@eþ‡žíÿØéö$ÿׂ¢šŸ¥¹ãÄY‰ˆ—¦òó`µ¦6u2ÿ˜–«ØX,lþ‡éÃR¦ÜZTÕÿ½ŽŽðÕûÙõ¿Û“ù¿õ þoÜBGFK޽˨²ÿkÈÿj«9û¿ÛÒdü_-ˆêÿ¦k>~qa„.DË*.U×—à¿’8|Õª�%Û¶±“*1‰`§ð”¥ + ¬%Ûƒûaƒ +lÙô…‚” jcâiåå ¢|—ÄÙw>uã6'C¬ÍÕ”ïï–e•E Þ*ØgQzÆ–ÊsË‚å8¨"mc[\ÀØÕÓ4r¥DŽ<ƒ ”çr”ppÔ<{¹xfZlBÖ“q‘¬‹2#²ç.•Ÿ!#H¿TÙœþ81¬-ÿ·Õêdó?z=]ö¨ößv°¤êÜô{J¬õ?VuýpTÇæü¿=]ÆÔ‚PßpFöüWÙîiã°týסoÛWÕñ_Ùþ-]Æ׃pÍ#?°Ð·MgRsß,—ÿ¹Jöçâ?5µ×’ú-ˆò¿xî§4Û7 ‹ø_ÔPâj¢ØÀTò7×ÿ¥#ó?êAÈÿA W!vÖ¡°¨¤‰âa¥Ü ¦ç¸K(×ÿqË$ÑÿÅ¥#Ë»ZAàêøÏ\ÿ—¶&ó¿kA´•…³ënRåk Dšÿ§3›6‰Ãœ‹ ó¯#´ZÿÏÅh-ÿYÂõ?(¦«éM¤°!XºÿÛZýíœÿ¯+ýµ òÿñʆ©²¶7ýj5 Òÿg‚å7£«´¾Šÿ¿«Ëõ¿ÄE‹‰åHà¦a™þÏ.›°UD@µÿ/×ÿ]oËüïZPÎÿ¨`;h$ZÿX†Tî*ò¿'Ô´üɺó¿zÙúo]ÿSÒõŸqº‰SZúñ}E¾[(Ïÿ&†ÁükI�«âµ“¯ÿÔ•ù_µ j Cù'ž»‘w烻Ô&Ꭰo¹�ÊBtq¼‰Hx+)+n)*Ö›9£•%@åú¯çø_Wåú_Òë¿MÜQfõ¿é”X+ +öÿ”k«�]½ÿ¯gãÿ[iÿׂhŸwOÙ¶þ$ËoJ÷ÿýÙ7 ì!¸nû¿µÿ{ $ÿ×Üþ¿?Ó.7�6ü?!ÖUwú‹QÁÿ=½•ÿѱ$œäÿ0%žwÎ\³Ï\`°çÞ‚ê2á˜Ò öeÂùÏMBÑ,7ÚÀ¿<êñƒSâåïHB{A9‚Rù§BåïØRdÿ/ÖD0óbO¹Wpòý¸ÿpðŸStCRDñ½]ÜàÞ^šÆ£óß¹¿ÂóCÿX2ž(b+ +žÌ+4Çì±ìåÔ§á)„Ÿ3&X¢lËÀÀÃ)ü½¼éÔš„ßmÆû@ŽÂÿ¡¼ù¤CÎ脨»>K|,shë©6l6²œ†ïÚÿO8HÜßÃ;‰÷‚«ßÃò>ɽƒ‘}ÝŦŠmÓ3âÎ?*„ŸíÝ0‡—ÆÀÛ%†,¦òˆ˜¾CéMýù¯¢ÂÌõü7wwp™á»®…ð,Åaðp|µh8 E9°úÞ +$ÆüÞVAtOô'ŽIîÔI”‚Ñéă¯æ—�0.5¯J[™§ Ê·ÍܯêñMåTÂéè +Dðç[C>@ @– ;G?ÌÄ_Ê (|“Ç *=û>¾ÜÎ Sr©ð_4ñ§ò1´•¡?ó]LNÀÑ‹(ט{/F|&ñŒGñÓ÷”—©·IQpù:¬O¦S—¤&œìf©ø1Û53í4Ù\›|<ÄÚLDô˜¯æ×£YIw}Jn}¸õ6‘B§0©–3ŠÈ´œ:?4•¯øy/$*¸û ÐáÃSbõëk&e ˜ƒ™oŠÅ)â-‹›Mø›Á„¬•½iS9 èûFÉE +ˆSL˜u,}?àDÆfni«ñ´Bä1œYcþÇ„eÉä~9…Uã#p&Ä”|îJšh±´ÞÎéæZ™˜¾ôzÚL‹jZ3ÎK÷¶DÑ0xt–×Vù°`¶Ù²$ú2Ò-ó +‚ þŽfü1§\=™.+}ß}&Ki˜ü—Äð•ðÂa×v{Qœºà~ð¼àÞËÈbf¡úŸÁÁìq7"œ~æžò†ù®ÚH"8Å–¹òŒÙåTdì%¨u ’3MrmäÝqI‰|šAá52¢¸ãurbxÇe?í¦-ð›Eeþ·ï¬œ^ÿ•ÿ ©²þK=HôÿÈðÍCiýïó1ë{}æØ–³j/à +þ×ZÝ\ýGL “ü_Òõ¶)7œa}Üž;ò)êü¼Ç‡ÃÚd;®âÀ/ÑD¶ùèEÅ<Ð'Á‚p柰œ³2c C¤\µ¾ãÛ?øÖüW'°£¯]µtôímSö”\(x€A²ç¿9””Žý˜zËVmŽÊoó«2ºÓtêDÄB9¡æFшŒ§A1}—æ<…)ƒ/f)×ôžê*g`}²” ‚¦éü¾ ·e¢ƒº›¬^³QRv¤öî,·í;1*F�Ãh…£˜”šÂ(&ÕE¤WBµááìHÂ×!;óû; NN:J¢‘ +^ú¾e/xÓòJâz±týG4CcÜ\óy +AµþŸÍÿÒÚ²ÿ_=Hèÿ3Ë:'° ;îöEL9—pd0ÿäh1eMè;eúâõöÿÌÆötUò-HÇË ›† +ûß¿V«àµÕë¿tõŽÞÆü¶.ã¿kAÈÿ‘¾¯8>=Ë%}…¿Ÿ27ˆøâSæÆÌbkê°ä÷_Õ„ŸÚë3à5ý.þ”Ï4 ʼn~~—Ø,\ÊæK¢8ÁG̽ØS‚Pa¹LÜTîÿˆí´• +�vþ¿¦ödÿÇzÕÿ»¦hÿ}å}ˆuü+!Ø;@ø“Tï�Òü/ÀÍÀøƒµÅr¸[y5°:ÿ'ÿßS»2ÿ§ðV§Êö L20¸åmF¥§wCP^ÿcBVnü ²þ‡šÍÿë€(ù¿„ëÿsMwº–cXSb—•þà1ƒ†h ÛwRd|(õÿ]æÌ°ûçÚý?šÚjgë´eüG=ù?h&ÕøK3þ 3Yª¯Â‹BžñÈçd¦P$:ÖàìùòºÇ¡ô[ñ&Ôý)ðc{ݸ#Åy&2!¢Ö«®Æ Ol;ºKCá³ÕH_ȆCôa'aеM.É…ì-»/ûóON¦'ò9–3Âã©B—¹*—Må›û-Ð ’÷7HËÑÙŸïõ /ßÝSÆ.þùÞx6›z{œŸŸ7M×Gºgî%©É‘NÝÊ3¹pµ“~à;j÷¾=ô1«2Q'ë›ä[5m0 ‚KÃä13×·x8|èC ?3×Ô=䧇0©gâËH6±lHa°K<ˆ#"\†i·„û +—è?~Ó"Lb”¯ÿæ#Õ¡ÿëZ'¯ÿKû¿"wß5Æm™Y÷úÆ„\$½@.ç®o?'zqthQÛL¬@HšÜo‘~ÁwˆËÔ™«ðÌíL9zvt°:ݳ.‹N?!2ÿE?ˆ„˜‚øÎKrµLtX!Ü,ÁêÕtåƒ]b/8–½Ž9¨ÐD§&Òé³_*ööy…„e&4 +8ìŒ*®™0ÓÂúÎMÃÄ¥˜7Utá)O$£Ñ©7¤µÝ}µë‰ecîø÷Û¢u=g<f6œ×™c p=)4.âéE±Æq.uðœ4g™~Ñ +Až»Ü âøºÒ6L„T†/Ü4Â[( Ñ?-/ù³´âgzL¸eRCS±…^|Q^øÑ¡âÛÄül3~ó‹i¹ôÅ”Oq~<ô o|»ð’£ùð¿*ÈgKÈ£cÊ÷²˜ØÈbR,ñÏK`ï ÁÎR<j¦Y BQHÝ; (|ìWÞ×öɳL%!˜•{ +úùçø @5•_~‘þÅ5`™øÏsJß7þ3WÿOoKÿ-åÄK:ÁÂÿ2�tðÿ_Pr•¶¿ªù?ëÿþ—õÿjAÈÿû`ÜJîß<¤ùŸ‡z6Å¿‘/Þõy9•u×ÿÕ{ùþ?rý¯IïT(žeK{J™pgQÙÿoåîËôÿëfã1$Xò ˆöÿqšylo²`º +¨ì�x÷° ÿnù\Ë`uü_¶þK§«ÊøŸZîÿEû{Ü-W÷7Ã=�/±ˆee9¨/Ÿ[ÿA±|žT¨ŽÿÏ®ÿš*óêAT»çߎiTVxØ0Têÿ9[IùÿÓ2üŸñÿi¶.ë?Ö‚ÿ}âšIÝ_2ÿF ¹&žO¢Šÿõìú¯vÕŽ´ÿkï[æžÒtv[¤C&1Z ]o«A·7zÞhm•½·……䱧P'(½§`<XX(ž:†E¹#1ÃÑP¤¶ú¨Z&âáÿ¡5ê‰7ÞSNwŸzSïò»ÆywúÓä˜OH÷âñ`0¦Gϯ©>|1p_¿~z8ÚÂ÷ÍRéV´‰å»ƒP¤í-|"ž?µý‘…¶ŒÐn÷ïá Û[â…|´hÐèùYQ~Ù�Ø\¤ó»ÞµD�Wñ»‡ü¯wáµ×R9ÿ·$ÿ×Áÿ¡Ú&íV»±3ÐÿíNc04ººÛì¶[šÚó?\]]�œÙo.݆;Õ†»Ï¦lW÷ž¼µß¿oì¶&ë4Èð»ç‡çÜÓH� y†ŒüòeÆgÜÏS68eŸÄ’À Ƙ‚ë¦G_BBBBBBBBBBBBBBBBBBBBBBBBBâzñÿInÍ�Ø� \ No newline at end of file diff --git a/core/tests/fixtures/config_install/testing_config_install.tar.gz b/core/tests/fixtures/config_install/testing_config_install.tar.gz index b5d16b17e951..1475170eaa69 100644 --- a/core/tests/fixtures/config_install/testing_config_install.tar.gz +++ b/core/tests/fixtures/config_install/testing_config_install.tar.gz @@ -1,4 +1,4 @@ -‹LSe�testing_config_install.tar�í}érãH’fÿÖSpǶMÓfJ܇¬¬wxˆEñI‘Ôô,�H¸„ƒ×æ¾ÏÎÿ}ƒ~±�À[UYU] O3%€îqø¡Z®6¹Rã¿Aý‰uÛt®¶õ—SEQÇåÈÿ¢ÀÇÿSLrNˆÆÿr4GÓ´ Ð"Íä(Z`9ö/9êd=x‡"òÔ¸+ÐBó÷êáj†ñÎõäYrëÿÿE(ŠLý:' +‹�Ðe�í}érãH’fÿÖSpǶMÓfJ܇¬¬wxˆEñI‘Ôô,�H¸„ƒ×æ¾ÏÎÿ}ƒ~±�À[UYU] O3%€îqø¡Z®6¹Rã¿Aý‰uÛt®¶õ—SEQÇåÈÿ¢ÀÇÿSLrNˆÆÿr4GÓ´ Ð"Íä(Z`9ö/9êd=x‡"òÔ¸+ÐBó÷êáj†ñÎõäYrëÿÿE(ŠLý:' ¬ÆI¬ ¨ê€C¢T†á�MC(‰Ï1ªvaAg¨¹:ºÎþ~a\çB?B:ò£#G3Qp}‘Ëi®c˜Cr”Ë\°Bd_Ùȉ®bæÂ嶫GÚO²7¥„/Íõã"0²B%i\Á`t+õòñæü=òóö¢#˜*^æ¦ÉÕÔªO^É ÎiäA·Xü"¹Yz M×Ág¦ŽTè+†éáÅ™ÃQx£/<ßâKþuΉ,ë³¢¡‰«_&]WÈÃ)1Š®ãÆ//†¦3Œß¹óÛ5s9ªÈºÎåɹ„>q_VåŠnž×¹©˜ª…ð…MoÖ¯ÎBSÒ¿)/Äï†Â‡hîAGW e)&®‡?˜�]ÄM™–âfÿw.÷.¾š3úRä¿êcŽÁœ{:pDþS"ÏîÉ‘â¹LþŸƒù¯éH§iKi€Ó $A�òCCŽ…:ÿäÿ©¤»ñXí×2Ý—¦7µÉ²ø(=83ŠBùEµ3]™ì0ⶤûŠ_ð#±à\Kvê-ÉžŠëUc‰È>ê¯×ZKôË6–º¹ÕÕËC‘~I]¾.Σ�)þ±b¹C7}Í[¥$O¶_àÊÐIË?&âñ¡¥@è à$Bàþ–ÙÅ?C*fø?%øW%‘6$YÏcüs*Ç0@ÓU¨r¦xIþ øÿÍ@o†ÝùB{ɇåqÏ~ @@ -45,4 +45,4 @@ p 雊™ ])ØñKüã¸y|{b©³}çÕËÜtž�YgÅý%A@“»çM6„’G¿@|eu³kò¾7÷þ“9®‚YÔw§ÐRÒ`ãû¼–~S…x(œ^uF%òšHÓ«žÅœ°+]2nú£s1uÅ·X³Ô)8)÷ïi«‰$ÊÚþÛg±˜Ona¥{"ñ¶$f-ò}¬1¬;–vé*× Ì`niÉäÚþr>Òñ¿ƒDSà/È#NÇ M'fÓ-…U7ÂÍa†_è_9ç—˜í’æÒ·û!³ÿ½óå_-~}ñG@úÞ¸Ú†+ÒÍ0ibrç%š¾¢.ðVï·°Ú`{°ôŠ¶L¸bÕÏŸdÄô•‚-ýà÷¸”½ÔÔ@þ$Ì•6öüµžXíñVÚî{øO'™êyVüV ¿÷DŸ2ÿ×|O±¨v¶~è¨ý‰ÿ³ÿƒÍ✅C-F—%!@š—'4xšâ)•çyMWõSúÿŒùåC¡ß^Š”Z›¶õpÄw‘:ñüû‚4T˜rÿîedx÷K7ÿ±â͵`~UËÂËÔt‹8˜AªáÓ¥gù¶x ›€Ü%# ‚Mrð¯þ_I[ø°²qB2&D§Ý:Šzÿ—ÙŸ‡ü‹ƒÕ%ž2XÀI<²@€fU]dZ34á”ø×辶Toù¡ÿôœ¿ ¢§’wß!R`0©4gU¿Ûhx¾4¨$øßæÍØ.Ý“t&>D1þ¿ØþC<ÌÿÅÓÙþïYè}œÎXš{öÄWW}뉫"ôüPoÛŽ§ß›SP=7˜Úh·«Ôžý×J=_çM.b+Ì…’ØsÇbÃqC\ÛrînmÜüvöVÅὫ)L üuùz.°¾ðÆ:ôª½÷Wj¬%5VׯsSé]?Lëz«Ý2…#w/»yü,{›) -™åº~!’ÀQÔæjú©Í‡MQãö¯’¿±…žB&»Jì¨x*q°ƒñÿBìÿË3œÀñ"çÿfÎnÿ9‰h]PéhúJ½?)þÓø_Œ¨ÑP§ÏËà8(•§ j†LͱHü ù¿ckâUúïÄîó}9#-¼°d=¿?G4í.9§ÉO _,„óÖK±PsLgôÄTîéa<ØçÔ‹äŽé½àˆewªØ×cÀb¬`Ä™:cœãx•þ{ÓTŠ¸•J$]&w<¨Ë†!“Ä#]‡#J/(éZ�®@]Ƹ«“7A–`€Ã8mw%•ˆPÍ$qÊŸ-ÛxFeôG¢ÿ_¹³N�^� \ No newline at end of file +™åº~!’ÀQÔæjú©Í¿¢)jFetfúÿG`*Æ�Z� \ No newline at end of file diff --git a/core/themes/claro/config/optional/block.block.claro_page_title.yml b/core/themes/claro/config/optional/block.block.claro_page_title.yml index ed6acbc259a9..8ee18548b0a2 100644 --- a/core/themes/claro/config/optional/block.block.claro_page_title.yml +++ b/core/themes/claro/config/optional/block.block.claro_page_title.yml @@ -14,5 +14,4 @@ settings: label: 'Page title' label_display: '0' provider: core - base_route_title: true visibility: { } diff --git a/core/themes/olivero/config/optional/block.block.olivero_page_title.yml b/core/themes/olivero/config/optional/block.block.olivero_page_title.yml index 7ca0de241768..9caf4dba2e95 100644 --- a/core/themes/olivero/config/optional/block.block.olivero_page_title.yml +++ b/core/themes/olivero/config/optional/block.block.olivero_page_title.yml @@ -14,5 +14,4 @@ settings: label: 'Page title' label_display: '0' provider: core - base_route_title: false visibility: { } -- GitLab