web/lib/Zend/Controller/Plugin/ErrorHandler.php
author Thibaut Cavalié <thibaut.cavalie@iri.centrepompidou.fr>
Tue, 05 Nov 2013 11:57:19 +0100
changeset 981 5378e8a44db1
parent 807 877f952ae2bd
child 1230 68c69c656a2c
permissions -rw-r--r--
Added tag V02.44 for changeset 4f24f8a3f4ee
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     1
<?php
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     2
/**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     3
 * Zend Framework
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     4
 *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     5
 * LICENSE
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     6
 *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     7
 * This source file is subject to the new BSD license that is bundled
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     8
 * with this package in the file LICENSE.txt.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     9
 * It is also available through the world-wide-web at this URL:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    10
 * http://framework.zend.com/license/new-bsd
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    11
 * If you did not receive a copy of the license and are unable to
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    12
 * obtain it through the world-wide-web, please send an email
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    13
 * to license@zend.com so we can send you a copy immediately.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    14
 *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    15
 * @category   Zend
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    16
 * @package    Zend_Controller
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    17
 * @subpackage Plugins
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
    18
 * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    19
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    20
 */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    21
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    22
/** Zend_Controller_Plugin_Abstract */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    23
require_once 'Zend/Controller/Plugin/Abstract.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    24
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    25
/**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    26
 * Handle exceptions that bubble up based on missing controllers, actions, or
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    27
 * application errors, and forward to an error handler.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    28
 *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    29
 * @uses       Zend_Controller_Plugin_Abstract
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    30
 * @category   Zend
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    31
 * @package    Zend_Controller
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    32
 * @subpackage Plugins
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
    33
 * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    34
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
    35
 * @version    $Id: ErrorHandler.php 24593 2012-01-05 20:35:02Z matthew $
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    36
 */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    37
class Zend_Controller_Plugin_ErrorHandler extends Zend_Controller_Plugin_Abstract
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    38
{
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    39
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    40
     * Const - No controller exception; controller does not exist
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    41
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    42
    const EXCEPTION_NO_CONTROLLER = 'EXCEPTION_NO_CONTROLLER';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    43
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    44
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    45
     * Const - No action exception; controller exists, but action does not
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    46
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    47
    const EXCEPTION_NO_ACTION = 'EXCEPTION_NO_ACTION';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    48
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    49
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    50
     * Const - No route exception; no routing was possible
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    51
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    52
    const EXCEPTION_NO_ROUTE = 'EXCEPTION_NO_ROUTE';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    53
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    54
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    55
     * Const - Other Exception; exceptions thrown by application controllers
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    56
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    57
    const EXCEPTION_OTHER = 'EXCEPTION_OTHER';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    58
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    59
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    60
     * Module to use for errors; defaults to default module in dispatcher
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    61
     * @var string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    62
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    63
    protected $_errorModule;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    64
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    65
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    66
     * Controller to use for errors; defaults to 'error'
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    67
     * @var string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    68
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    69
    protected $_errorController = 'error';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    70
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    71
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    72
     * Action to use for errors; defaults to 'error'
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    73
     * @var string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    74
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    75
    protected $_errorAction = 'error';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    76
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    77
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    78
     * Flag; are we already inside the error handler loop?
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    79
     * @var bool
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    80
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    81
    protected $_isInsideErrorHandlerLoop = false;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    82
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    83
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    84
     * Exception count logged at first invocation of plugin
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    85
     * @var int
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    86
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    87
    protected $_exceptionCountAtFirstEncounter = 0;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    88
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    89
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    90
     * Constructor
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    91
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    92
     * Options may include:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    93
     * - module
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    94
     * - controller
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    95
     * - action
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    96
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    97
     * @param  Array $options
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    98
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    99
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   100
    public function __construct(Array $options = array())
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   101
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   102
        $this->setErrorHandler($options);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   103
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   104
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   105
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   106
     * setErrorHandler() - setup the error handling options
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   107
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   108
     * @param  array $options
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   109
     * @return Zend_Controller_Plugin_ErrorHandler
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   110
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   111
    public function setErrorHandler(Array $options = array())
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   112
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   113
        if (isset($options['module'])) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   114
            $this->setErrorHandlerModule($options['module']);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   115
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   116
        if (isset($options['controller'])) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   117
            $this->setErrorHandlerController($options['controller']);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   118
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   119
        if (isset($options['action'])) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   120
            $this->setErrorHandlerAction($options['action']);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   121
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   122
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   123
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   124
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   125
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   126
     * Set the module name for the error handler
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   127
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   128
     * @param  string $module
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   129
     * @return Zend_Controller_Plugin_ErrorHandler
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   130
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   131
    public function setErrorHandlerModule($module)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   132
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   133
        $this->_errorModule = (string) $module;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   134
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   135
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   136
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   137
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   138
     * Retrieve the current error handler module
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   139
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   140
     * @return string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   141
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   142
    public function getErrorHandlerModule()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   143
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   144
        if (null === $this->_errorModule) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   145
            $this->_errorModule = Zend_Controller_Front::getInstance()->getDispatcher()->getDefaultModule();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   146
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   147
        return $this->_errorModule;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   148
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   149
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   150
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   151
     * Set the controller name for the error handler
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   152
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   153
     * @param  string $controller
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   154
     * @return Zend_Controller_Plugin_ErrorHandler
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   155
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   156
    public function setErrorHandlerController($controller)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   157
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   158
        $this->_errorController = (string) $controller;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   159
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   160
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   161
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   162
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   163
     * Retrieve the current error handler controller
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   164
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   165
     * @return string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   166
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   167
    public function getErrorHandlerController()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   168
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   169
        return $this->_errorController;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   170
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   171
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   172
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   173
     * Set the action name for the error handler
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   174
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   175
     * @param  string $action
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   176
     * @return Zend_Controller_Plugin_ErrorHandler
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   177
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   178
    public function setErrorHandlerAction($action)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   179
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   180
        $this->_errorAction = (string) $action;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   181
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   182
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   183
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   184
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   185
     * Retrieve the current error handler action
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   186
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   187
     * @return string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   188
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   189
    public function getErrorHandlerAction()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   190
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   191
        return $this->_errorAction;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   192
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   193
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   194
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   195
     * Route shutdown hook -- Ccheck for router exceptions
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   196
     *
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   197
     * @param Zend_Controller_Request_Abstract $request
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   198
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   199
    public function routeShutdown(Zend_Controller_Request_Abstract $request)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   200
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   201
        $this->_handleError($request);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   202
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   203
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   204
    /**
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   205
     * Pre dispatch hook -- check for exceptions and dispatch error handler if
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   206
     * necessary
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   207
     *
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   208
     * @param Zend_Controller_Request_Abstract $request
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   209
     */
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   210
    public function preDispatch(Zend_Controller_Request_Abstract $request)
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   211
    {
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   212
        $this->_handleError($request);
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   213
    }
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   214
	
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   215
    /**
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   216
     * Post dispatch hook -- check for exceptions and dispatch error handler if
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   217
     * necessary
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   218
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   219
     * @param Zend_Controller_Request_Abstract $request
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   220
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   221
    public function postDispatch(Zend_Controller_Request_Abstract $request)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   222
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   223
        $this->_handleError($request);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   224
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   225
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   226
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   227
     * Handle errors and exceptions
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   228
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   229
     * If the 'noErrorHandler' front controller flag has been set,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   230
     * returns early.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   231
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   232
     * @param  Zend_Controller_Request_Abstract $request
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   233
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   234
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   235
    protected function _handleError(Zend_Controller_Request_Abstract $request)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   236
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   237
        $frontController = Zend_Controller_Front::getInstance();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   238
        if ($frontController->getParam('noErrorHandler')) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   239
            return;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   240
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   241
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   242
        $response = $this->getResponse();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   243
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   244
        if ($this->_isInsideErrorHandlerLoop) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   245
            $exceptions = $response->getException();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   246
            if (count($exceptions) > $this->_exceptionCountAtFirstEncounter) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   247
                // Exception thrown by error handler; tell the front controller to throw it
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   248
                $frontController->throwExceptions(true);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   249
                throw array_pop($exceptions);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   250
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   251
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   252
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   253
        // check for an exception AND allow the error handler controller the option to forward
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   254
        if (($response->isException()) && (!$this->_isInsideErrorHandlerLoop)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   255
            $this->_isInsideErrorHandlerLoop = true;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   256
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   257
            // Get exception information
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   258
            $error            = new ArrayObject(array(), ArrayObject::ARRAY_AS_PROPS);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   259
            $exceptions       = $response->getException();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   260
            $exception        = $exceptions[0];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   261
            $exceptionType    = get_class($exception);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   262
            $error->exception = $exception;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   263
            switch ($exceptionType) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   264
                case 'Zend_Controller_Router_Exception':
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   265
                    if (404 == $exception->getCode()) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   266
                        $error->type = self::EXCEPTION_NO_ROUTE;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   267
                    } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   268
                        $error->type = self::EXCEPTION_OTHER;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   269
                    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   270
                    break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   271
                case 'Zend_Controller_Dispatcher_Exception':
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   272
                    $error->type = self::EXCEPTION_NO_CONTROLLER;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   273
                    break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   274
                case 'Zend_Controller_Action_Exception':
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   275
                    if (404 == $exception->getCode()) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   276
                        $error->type = self::EXCEPTION_NO_ACTION;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   277
                    } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   278
                        $error->type = self::EXCEPTION_OTHER;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   279
                    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   280
                    break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   281
                default:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   282
                    $error->type = self::EXCEPTION_OTHER;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   283
                    break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   284
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   285
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   286
            // Keep a copy of the original request
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   287
            $error->request = clone $request;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   288
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   289
            // get a count of the number of exceptions encountered
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   290
            $this->_exceptionCountAtFirstEncounter = count($exceptions);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   291
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   292
            // Forward to the error handler
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   293
            $request->setParam('error_handler', $error)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   294
                    ->setModuleName($this->getErrorHandlerModule())
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   295
                    ->setControllerName($this->getErrorHandlerController())
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   296
                    ->setActionName($this->getErrorHandlerAction())
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   297
                    ->setDispatched(false);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   298
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   299
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   300
}
=gYtcaXc4ĉ,*TabA@[!H[IƚpZlɛ7en٫ʲffVae 8a44XYIe# aaɉe,ƑbҴ.-K.DԨflhd$ K61&*XRʖvw/-Kmv[o6ٶic0Zѐ2BmJ4`+T] *j0a \0K*_q7=huLdQH+з'^{=`UX*#P9`bA3G;\[_s(S䂃NO@劯|0 1I[unjc$!Oq8K(rLFO`GzlEa) (~W}+06jB{S[2ĶxQؠyCH C\!IP 4QYhb}N Ca6#QW1?SD>b=Gȣ $T䅔IPF:<;=aSuNʔ`7DV DH""J\QMV#<˷ ( 8w9\mz˻ACf*/?ytLWԬ*Ua'B3lL 64pumi44IevF%K$[-MIKd C@G2is}>79u %I ɑKIg*zT7,7,&*rmsS dV U? Р|ZCH@b@#Ȃ,R*mk Wf6I Sfh5m-Xl@i ؄B0<*mPĐ!Ie$ JRʠfͶҩ\*Hi;+>? S<`?HRÅD(Az~2Y ) , ϙ, #+̒+ H"yOZc1 B$ wVȬ_Ql$"20`${L?*I$(Y(!"H{PA/`XYB)  t_` "l WI%ZH@8jg1,p#x~/A760a B+IJ:?NB.Q.[hE41*i5<~*I@EDOq  ?:HYbTQp!H<0aدϧUP]Y$K ^!,X*-Y,&f8UMF}^p" 4Ƙ-m4y88 'p"i06CSrM,Tn? ??H CQ=*J , RA?c)D(cMv\f-v6ں5&lkfRkZfiꝇaK_MaA AdB @btSA??4?~F\)CÈ_.]hnU!&Cv`NH/pɊ?kc DJKI\w\M'r@0u(ae \I,u~(f^5K \¥"N"i颫oFLeFhgZhfhRmie,Ԧ7}>͚vf!&v(ijj_mwy=wyw S1REeٖh f:z="h8ܢlp䰘6`P\5jA/FSuunݺfue3&RhX֥TCQEFm 1 B@ UJmJj2ɶٕK+iٖfM2ŶԖ5T26eU,͚iڥ$M,SVfTԴ,bյ%Q3m̬ERdiT5TJU*ULͱV[YX,[clbmjV̲T2iSl2R"J(Y R,Hp bslh V@rh88D j;бՊ`*P6y&DCW_g>p PcheҰ`zYWx dD`D&MK~߼`FR`rߎX1 $P<ׯ^][IRhmi0IH"A&Ԣ JmmmIJfArZo{,{LAP-]=oSfFtÃ˺P}JQEJF sb>?[cOxra1i rnҀMGDh!hqB8mi܄l/͛2_ܤwr1p7;X Q1C^t$O)IbDXXd!NX.*ܸr%Ĉ 4^H>QwxO݅?C?_1^ǘz#/#O 2E $)UUUERC DbJUX)R))e-RJYIIeY)-Z-eRiDG$L%o[ҵ^Y%DL2#+&6Remm%6{m/J--bA$'cdćt:n6wB36u ebjŵvmYhmw\!Bc(\Nt8TcX0[@\l]!t.l`ͭftVfn&\یsXٹmlL͌(wLr5P% ;pH3[t!4֘8 :l1(t80 \:Pgp gHBÙ0 ڇ:t.Bfe \8t.p.6á@Tќ!¨\:-6$bApC26pT !p: 8PM *puqˇCP6 8p݊͘Cif!C:B$eP$!11@@f")Є(P68tm$T.fp@ZСÆl|+ºAF*b(:k$À**,Ah`ּ{1TndmLnCÆlpK:Q$ʦ&`%7%h\h-%Ch0FQɰ؀[B:TjPF6Pd`B"N;`#g,ClU~ F`={i'1>_nfK{ \_xY4Ôa缐 OACة ;>CЧӅ8=zZS'mTvy;OhR{"?g(}i6h8yV{8{8N[08}.mErWj{ Šy }` B @r |Pꆢj:n=COG8 @DXXc04=mV1aZm ::1lB1 !B'P !yEk$yyy1G2ƹ'H!>6Ib>#~*M))(ilmAK={Ϸ[֍ʌ)[P<cc=\Em<ӓNsJ6>aCS`f7ݔ47 -D-7ilf0f JfnNйoDPEh:Ue{\679/FvՀnBz|AMm ͙g|;:|j雡/1[W3/]cVUɝ(J^:5]߮Ɨ!̹AWBn箃뺲!*;}+;'.gwxg}2*ƈj|M ߰Ϟ>3`MwhgAɴz}lX9Qͱz]g<&XQ][{7$Wn_}}w=AKTgMOϖI5ϻKnt^4 :9)麾K_a8n6tP:4R/fw{׳2>dm6IWWogF]`>A1Vpk+YHɾQC7 =腂溙i![6T9ڹ'VI~mɇZ;XpZBۛ'$'-iGlDN452{x31O.݉\rͥ51öojV7nu`*5vV&ZP&[QHHi:YEUYcnI5w# T(؄44N@,֦$$*xƫtm;RY'%qAB]L͘PjHvrZ¾y27`SR)f+γC2x%e4ݱr]M=X8h=N,}(QB*Mmӊ\]M0Ψ[j.{y2 $H|0kͻ MwR)!n^*M/$tqi$T*U*I i" jZ]XPr%RVC1JjxHD ɤr@ Qw({3ɶ8@z$Yb=T976xyI/7DnN D5 ֵ;`5IrԞI[om<[BJiet)v7- 0$/Kac,03bL@iRj@@g>|Z-4_O`'vHn 7Fv7 덆-qzmaSmNq4W͵CZk>4 d@ @K{%r\ԅ>^>zBUT ;M,Z\]s\, e:\ڐBh)Uqw=>D `40$lo1͝;xnr$[jk1;b6xn roeo H(QE1h@:Ȣ `:(QC{qDP)"(^R$KwӧCF= YҘ`wU.ZW['v=Q;ϻԎZB 8Rr/aA*m"Αkm`;%)smL{5і`1F,;z}yuPP_l@$-[H6V ;;p]X9t mZzIʼn*-ۧY/wTҁ@ig[Azrدn8ݢhӳ>ҏm@:փ&EQsek(/0}in6C*Ҩg*bZt(T6v YUY4P QjV휀usYZm0 ԭf=5rV/Ucr@ \vB樲Kla/b5;[1ֶFMThԦX*3SuXΚ Jl;K9jN2@n!%ѠNd @<{6,DAY| @jم ,; RI/8ݷNN(z9O$TlҶiGZ4%G]]24_\T|ϻ[e5m[MڶnwCm *SBl-L; Mx/| PJJ#:ޏ^P}:4=(id)P~zhQ4!&O4Ce=@ jʞhM=OS4 h$JHC 15MQyG A4@ɐ"DA& hhM0ji/_KCdt)W{m6Xw4JĜuaSX/\4)SGhxs|x:8pë|\ʶ=J'X +UDuCij tGA;Rج=n!Ol|ᶟ$a= +EF(_Aʎ>6zc1XDhԪ< <rU%UT)dϺ$JRJI%URJ)U>PG̭*"cxm$<7O>ЉoF9mj(}Gvv<\/y]Uvpӣ޶<rY=m1[.MnK:#sOX911<ѷ۩U]V#[ÖPGEFjcL&)m mV2Ji)1[cjҍ6VͶW  h*UU&UѷGf0i1]譞iJp8v;pM)96ÆSJQtprGl*8Vʩ:RLmN+ŐXÁ6V*qC%_uM)m%hU2)'k%{OY^ =lWp<U)ܘu|͞'y{=cG{㑥4zQ~F?#gշx&-'y'WfZ!SW.h%WFV*pz͜86J*19^%tcjLVKF4SG 4ɬ&8a**TI),1UV0uSJJNNSz88G 4?Z)TQUTvSlbTLTC,Rdpcͧή]OX4Oޕz^JܯOCS}#cmo=G|1H芚4V)X|6O/r 0)ClM+1[pvM (phNN\*"ˣ$WEb1TJU_2pۇQOQ]sIO1D&1h=xrV+ aap U DUFEURbbUdWNʍ'CO]_Ϳx$W>uHҿkhzJyٌV1y4W cm0U>o֨ǁGOG ОN_C4lMR:w0GQ{llv7,)7d@QTH F(F"dAU8S0'a/ySɏ|UWa8p</$x=.G̮:Fi$ۇ ͤy1'bX}';settviI =4A$vzS!G&ߒH-4mKm+uȈ}o'M4m0! ",Ȉ,Ȉ̊lH)"$DI$DDDDDDȒ""""")")"""""(JD2H$II2""IdK&"dM$RLL"&E$I$III$ɲi$DDDDDҙ2&DDQ$ond[jm}j[6ԒIE%eS$&d%$IdZRd4*I-+5&SRlRKZE5%&DERD*jMUIE)""I$R"%"""UxC|'CF$>yIcJjQh("JDDDDE+ZZTRVYDDE[JKZ"'DDDDDDIȒDDL")"R'o+ABP "Y,OF+kηǨ|.{6>Wpz+N\in2jr2li?\?KGpkqka3rxC}3cwVѦǓO.'|Sz;>t}ʴEJUk_ꝫsP1۰I 8ɖ<26!nZhS1D`X,Q+@Ŧ*R4S  cbEI iCca܋ml~+&[>oȘp%"b{Gu@AĀ F440qէm p`0gJ&9ť#L(ō=2N>'ANX9#.!l8<_0DԂccjᦛh`10N]~K_ӑ))͖H"""""")"""""HDDE2""))*R")))))"")""%ZjժO\{OyWuܐ d)JF"DY$E+!`?94`--+Q)jիTi1u/Êwt6\c*G%UvW^mOF*D-[.aKAaԭKGt&Ӡ6$M4r}n<: ~ u$̞'&yGv, ЇP\(Ð͌c57 d W^|o~Z;9y j>y=^E!c#v<̝ozr9x moc|gsG؉؉e{#=>>'{ hbg!{JlGXG[8JRȑ&<,rKl!$7acPKt=[;2i;?/p<׽ 9>^֞ɷ{8d:#=?62`A wOw{^$)Ϻ=gi=d貚<yя_^Dt~?}LB4?FDۭ9t: w݆-[ <_ojudOW"ѳw3=Gy>O_ϖg{ܜnqg()9Z.i!PUEWhw'x?+Kō=A,)ݎ66xC9ÓiO7uc<nׇSYӁ̣4K'TGShx<}&b>/`2;CMIUHÓXq42[P*=51W|cWW'=KOSɏ˷{~=|X~owr~s{e ^y(5cIO"(GLe}Fo{WO}Ct;O&q^RKn#h;=&5}(j1s + r8ێnTvhy::\&YT-7k-`<EУl:<-06ptu5!&G,gCJpIQPI @ܰՁO;= ^CH ?YoOכ4t|_pX}O=o.3 ^-h Iv9|VBlװ<9{r̜ht8Ə=<Z~o7wiw;iӡSO'tzxQ[}f` |F8 ؜h~GF0ilůC̄BIՏ0i^Ww(XknNݟbmC uͼ&OQp ~gnx[PgMFgqM KB,37wJR]&B(ɧp0 fFKtVҥTO'K̇3ԖW#Cd} hyU3*ToFXYJA"p68:s5àӻ^:QCY+O\h}u$̄}d{T`$PP(+F]+ o I/{(o99$I81Mlie--7xJDdc  ^~i꒪LX{\ ^<2nZ|N bsp#4cg,chqa47iٌ\/ =%svz rutq sƳ68rjg$шÌ:(ˎv`m 0NjM;G{ Xm7e {a], ixafrΎh&rNn7mﶝWV8 C ͏wVƜ4e2`у]l\iNc&zwRS{2006v\86lLhnSSۼ{6Ӡ`,?A}ݍ-;k8}d/}΃zĎGvOsN(-~^,y&oB5dw<a1¸i~ܚ41nuTxuxqуJX&t6~?}i׋n~:A Lc698d}N]4$9pIfܾp{jR4 g$%Fw9>5yn8?Bl:;㱷 :orJ*X'bޮ+RD4{_{⚽~Oi89xcw*'(-74˦66 BG0pG6ӂaF!c50h V\uc@eay:,uctP<!GAe>HWFMlPm~Oqaէ'\h NG-n(6սx$}ItWKF=iF|c\<+e8;=]|twcLsYan[z=`yyQy yv:GĬkd4j,}EN=PB;UOx5C!=ýۨgSL˻P}qr:g0Re"D'6''3JV$òhO*1oXv=7Cߵ㥷vJs99;p< bZyrqyQмUT#CxQ6i8lst{do]BǠw[mz.|RɮyAAOM;{_7qC- _{7"B Gw8i'<pre /R/=6fV=ta!-dbS6?L*:&o]]xh{ݚ{Nj>0rOCD>IhYmy4G5!M0`Aq{C(ᾱ.͉O>J{' l'6lxR>:u}n>oS?[x6Ґii!ۿIU>ӡ)nxZ|F}N%AO'.'o7 H<-r4v= lS~-ŏM M=1Vk/~]M;?qzP_:Jզ4v;:k=F+ >l XxÞsGFнCQ#i8[;۝z gO,NOIZ#7a̖א96`c+=dx @4##oh=X~L}W@j%P؃0@5'v?lrޜ}7fu{K0KBVAm#50p5r^cz[ն14F[mgNX;?²[2]16r3Ԡ,ah( `e J,PD]zCUQ9/e:u7v~:ͻ c}聤B7 rL.< m6l0ƚtCggGR42im:FƝYZputu7]4H3߻F`CjŏΜ6:nl s{:?[nk{8==/>וN^Hz^oOx<8=11;Zƛ OcFB0}I`ʇ/ 5+"4~o&]Y j^78y3V>p|iouz1ю6<ʦ.ɿؠw7m9<^nt~$!:xtB1c8V3Lܢ#oL4_8F}1ٌ:;;z{֘4n. :#{/O;[JL&S蝐}óC/Wޝ;:01ck̽[tmѠƫ|\L"ۗjoxlz?9gC2=n&m:3]Vy{ll" O#>JiS}Gz4${:4mv4wQ.K]7xs9rB00EL>zYkimSC,pixV 0e6Uov"a2YEU|koAæ55xZtè -m:6.f&u(B@ D(ןu *r ajQZh?6(0Q["$#1nn;`8ǯ6pƨYÄڵeJx@AԬuv>D)CN&0x1nX17{JBoenS-bj{XΦ^o6{ѹ%4?ٸi.gj|g/ql{[Pq =^`ӄJ-t,Q١; (ɌcpgTfϧ~'jkcgmݶHq.Sz x:CoЇ;<]X9[oboݶC(.wx SѿADqp~}tpNZ42JC|FWϜ‡~$:NV9 !m/FiF@,⇐6ƛBiGA|x1GM>#=ncjpx3@j=K d>nZ"Lw_B<@&X:;CtC49ӱcvqsO(K!ӵ^Sc%+miv}.l{mSa<=/UϛO.9ZӋ#N9ë,ևV+Pvo{ď6tx;9꣦=䐄~#0BLߪuIL;u&p=cö;Ӹ\tф}2LIzd)?a3:s7ywG=*tCXF@N3-E0O1 u4FQ=ލ^.5y]bGǴx'x?dW1׹ۆD×=Ovlw4|5ј~-1r5|CO4<)ƦU:P_CrMV1^R um?1A#Yna=\Z ъ"ry'6><.<.A|z:ðѤva {FHqc^{vw,{y~ `WO";yp ^&+gעڇ@x:8}r{]>Oy',ǵ_oh?}c<6> r8>n!=,zOG,uxD&DZGcR1KZegini[빦P#'NOv} 1mœ );8UmUU<@Mvu#!F^ :8o1óp꜁Y y,y3˖<]mܶT52Q&hurq7t5-ݱjk`hGc!2Xmt3g-1NË Mٓci9VZ܃m lcaNX:!Y4{M+2crmvWA `4ۆT[fi$70hXl8QГWBSS A$x6VS 4l!py<MGMWmB9C([2>ޖn1wtf1mWcfsrݵc8;;cwlT=Y`g^{1%M)ü9C[oipbZkMMv$7GjCWV:AH59iՁNGh:÷['6{ MNG&<+d^{=6=65lYۗŎ+chcOGwGGWfهsϭlp0r{ u цB8vu :TF @ԥaaK|¦ +ZoiGu1|c/GwRBWٶԦ&J,S(18 C7Ŷ ~nagi(lJz7؞OV=#raddw}!re1gR&cpë1;!mMFXU[pIc@ѢJaNr8 \/4sm[рh5l)#M4If×!Z??M:]:mo-^9a9ddі)827omHRY"{1k10Io#8^,Z*RPܽChцY_ ɛ!F>gkE1ޛk;Y?"jcxJ|\,Zb e 6>f F[iC=J${hAZFACA}CȑY%1G yJ 7laR5U*VgϗZ.۩F&'ky٬C(p@6kd ͻ/и͠ݎ޵=iD|NP1R9rHvtt|:6{GFxW#AX8Bxn4Sྒྷ=0ٷ\i6釃ɞ^ΎH͖qi47L[ilrrll k ``F ;iǫ2;zL9--m Hwx1p4`Xmp[ppx<65S25CM;6S>8CCe˗Y^򩲪-"=Fsn'BV˴n[=mGWV0m<>W~C}DFȳK=yC{SG=]zhO@qNs"w:hqS,6Ιmn~0āț9MzrcMR'D&ڄP);H_aHò4 !gb21L .YMFҰVč4+Cc^q"MvZX̹j[XZcl0:  rAD=GS /t :?}8mSu~vȚ4M}Om$ Զ1@Hs1z'¯u+ +"Qv;H 妃%@HJJl] B?*I-Ig_:,'i6W ܼϙj_½^Wҽ\Z^V꼿AŌK'"p'hK wzGTd[H!hkKkFnsz~LBr'岮W1qbP}>" ~}Ig\-~ >vң%şoazk3U?z?YjT,>V ARPYYC,a`;'gi4n<+.ܓxKŽ*m|RLQtӞA"S8/]LZ5Aќ6FѲ4QkWpmnJH! 饾"WLZ{ogDLsQ1^L>XA 0v ϲR V@~߁׸rϏ@]UoG#Spv(5 Ï O\QmuT+ŸT{]ĜTTdtO[n9sK=MA=ŲҸk-'l,4ydIie;yBM9J.RRP`vcW{ðS7`?N6]Ԣ7KMbM(4Q+Z<]PWݓvCzCb޸(8TLA4Iv>}:Rf<|=D5ATE"RP 1 ^[g8IG]o3; :ҵ(S?J$vo?|>Kh=[ul;V0D&`T7C[ )g~߻[byr=}&#߃[;c_zOQE`@ uNR|.cP4E0V@hdvX™ o+ȑ] 'uE6iy9Dbs w7~Yk:D"dzk Sp4@ K" ەuqd4CntU`8pT$%TEw` '>5O -P£+8@)aGŮWN8 9/o@ρ=܅naLX/ɗ3O=,@vaI.릔ߚ>Ȭ$^n!:x*^%,;NN/"D̚%٢RAŹf4/:S55R&*mHLoIG}|Veۥd#=N:מxiHNȈo?c("YB(с,ŤA (bB4dcs*DL@l"H$ XI ) I(  [2o/nHz*'8U6]=?^uO^ퟗcCiD?m ;!rCo7"BɃ6}A]=DQ"5? :;cv:ccv;cv;c@ @R (PBB (Q (PBBB (RB (PB,!B (R (PB,P!B (R t(PB(PB (R (PBBEAȄAE*!A$I5@ !.I$!RI$ %$T$h`L $BItMI,I6%PI$܄$I&II7@TI& bI$%$ $$ $В]$RK $MTI7! $I$M$IXI5@IrI& & $I4$@I$Ԓ $bU$MBI$]! $ԓtI$l$MP\III0M %I5$I$ؕ@I$rI$@ I&I6$M@$$@ & $hI.$RKI$I$ܠ$I%PI77$M%$P .I$II0$KI$ԒI&ĨI7( $`t:cwDmo7'I,*֊m*0XEYREEd$D[EXJ",HR"T T"*APbDF U AVQb*AR !JY$PIPEI dY Q!DPF1R(`*B)* Y*I`EA`TAI!HY"Y,I!a)(Y"RE*E$,EI"ȒYMM֚k-6ijMTlͦԋ U$Y"BAE6&fZkhMVeVeJԛjȊB laUZVBI6BXI5BKI4`L!$KI&BI$ؕBI$/{d $MЩB (P@(PB )@ (RB @ (RPBB (RPF (RPA (AKAj%T4~R2, ~~$q:y^8$Rݟ4߻;^. ve"?^y1:Q 2 GHD@ݑ~=yn_}w){ ;={u/]C$d~^$/}C#vRdJgb@Q){D%/}t뮡/}tɗϗ/}@LuO2<׾^$ 瀐_NR߻ J_~d^oòw߾{yL ^de{~x^y!d!`B /k;t{{ _>^Cv2޺J^d›t/N`e$ {9d{^uXe_闾F^u ۩{~;dq{I d{BnLҗ^^ώ2J^By݀Bܗ? ݐ~=v2 >Ӂ}Rw} ߞI$/ǾHI%/%/;D BJH_?>x2C^w@J~yWu$ _ӊ^ S0}wD/tC&2wFDt@H2y{?/}˻=wwC KHOpIK۰%/}$^{׾ { /}Ԑ0^LFRwa$ {e_^^uHqGĄ!){/}q{^}t{{q=_=җ~= @ߞ2RHsqx䀀L$wd{/no:" e{=$IH"3/;/}M/v_o7qINnoLԾݺR!){ B~y(]ۯ;R/}ё .ĽR@=>~%/2]{nϥ@/n5uL|8 :S{2Dp "/n2ݒiKۊ!&DJ_=ْ2tn2 %7"a OÈ_~ȄR~)>FRB 3J_~/n \LwJRH/<9:YH,Iko*1`b#ΊkmO!w=m?>Á_i}r]\=.gZ<!V3V[cw!Ql9Y}rizUs^ !js ?H1g|m^hk.EZnA뒩EnG[ y DF!mj(g jRn9o?X>{xP1u}Ug~~Cnd4DQƇq4CooU{^~8\Х}8];y_wnqݹ!hb:t(e; #jqyVeWa3 ݩ=v0f|;EtGL(Nj]~ -8@=Xٿwָk^+2+o't= 5?1=*bTIEn𭪾:QЏm&46%K,"He~ojA:?3.{tǹ2V}6 #~~tɕB͟aymR9}'CHZ΁@vU ?9Z)oLrקV\b`ڝ'_?d~h#,C#2ȑбqEbD͸ G@0mZUj%&j9T=bv>\pG0q.ib&´8!T{ۃߒN_!r,=S rqoSu 'a `7 +x:FFAcŶx:!)pѷc NNҌ"Ϗ/ZrcRuvrc(@OnKdTM6ےhjmI$j$=yyxQ-I%-iK)9n!N*LT˒Il&J3.}$r)(VvQ4ܙmuUUVQlDvKm$jlTo~ UU^H{ޥ> It-{?~B|ϑҨPs YtR z_Cȑ3h@H.lclh?SJN5ck'|t/7[nVn3C!o@I>3<x2a4^Ni4hdñ6*Uc) c \ ߏiǝh>?Oáp>$ɼ Œ-j|vA<>TcO{hee9|u飝M ~`pL,P]s ,&]@@aO%PQ-nD!t;pmӬgq z 6q8n@eK-ʃQ:Jlf v̮Xl3'j@BJ2>_j FG>"3|E ύUF *ɃnFҟ NYJD>+p~^cFKfUeŐ"jPu A :vՈ}Uw P¨x!0c@2 ##2w${'ˇGA/^,EcYGNl&1wW:8IHN?8d[nM%Kʮi=gWffUzn=j3!MG zQÙ.Mn L̓|o>՜ q hOütdi8@(rPXIVSTؕ~Zs_ëUd@9DWޞBݴQ=ag?BfDŽjYb+Ǚ:\],% ):j\Pg%%JRK*T?1nЁCki-CC,>$bwYQ^g'q}s n]L77)`D&pcXڌdfG- ,(hk3?W5/M3q6{c@a)!]R4N7z<צǫs.+i! M'o) &.[mۿ;ܻCࢨxѦ=4Nlj!Nt*CDixq`}4LcL u:ԲjL^'8>G/Պ7'=^!tco75p;GUsާCg9)x>էW/89r.{]zzAmꓗzWq{_v|ӡĢ M?I{OQc#! ‚j1 8/mmw}n{=gBBW{z;y D B】P8"`} grƘ۶9i~WƛWwEiޥW94zg!ˈQ+ݯO{*coGLG_wĖI:ӕr[ƌH?ܗU3,Tr A_ .c.yr/'vn]P?1ƹn1B,H֋k ]#m>c/NK-ts6BZkx,Y({r7À9,G'4rm{4A=PiRy${>M ү\uoqPg쟛BCQR`}Xyx9[&bݦo1"?HaP/AA{Sr+~EqƱ8 !Q[UDvI<Ge7&kT՘5"I& رbj)MT\RMBI$I$ov{f$$&$Oa¸vgoT]d=̮޾؂VQ#xd3 ;FAV,M{*]}GgeK7Zs;pҸ~7˭;\'riy.mtή\8Wv4 RՇ׮ׯW:t 9cX\k`YBG0߄UgDC y'vAH 5ڀR\pݼzgk=!|mBѼ5gC,"Ҫ!eHj|yӏDUc\'M= d{4 (\P% a1kLpl@}8`/Ps=F@|[u@<aő}lagUEF i:}&2ļ #M/\:e5|ٷff G-b OLJkHӎł#X"UDz\Vqz}& Hg6]d48IӣL>xºJbw9'-6_#Ld^-Ɯ!9|9K.f/ft, 2Bm/filD'CѮ rwz8|-y儌KT)u=4@xWAF ^_Zm ja}]!KYT-@6jSom"^j~{HDŰ{ጕ[Yd 0}ƕ|0e6^ ^VՕeWւ6ZˏaƂ*kJ ^Ijrә1Ĕq/6R,G.RوMSƌOy_W \zv]݄ڛ'S~_:o-~KJLa9:}n,N=5Ye¡~/kWN:PIQ;vA6cQ6Gs<;~9iw4{M;ͷ±WG 쪮{ +Nupm<\ُ7gU=NQw9/=j{7ѷGtJ,-cVYinCO<phӽg_9ezU+i b.{ᶵimrͧ*Y,;brG/U9W~i't!Ԇ5w8v.ꦓ$孟wWV}BCc f|+;[ RCK0 "T pƹl3(۫uHVglJ0In0cV_`Ͳ~WC(>nj"/ݟ]{ud۷g^cvm,-q4xCn_ 5^ѬP6מT-'^vWޗMn u H֔\G-uq]y{-1ڃ訔q`W>Pf"VJ*T&(404G#7$MƦYZE<dzLM)Аa7zBaՒTy?' 34P¹eC'ٯFJ`w2QG8k-sh^ԙnZ Xb"!Yr-"Ȍcn鎱ݮMag |p٬0eQ풨n},"(DSX]73+|~"=3rGۦ@J(z[cZ*ê 8j+ƘTTp~: z[k |"P\G 2gixj8!Ըp=FӀ mr[zB*OZ4Ps\k8N{ VPeQEN#\:gʗ5lg|ffsQ Nkw~ytp`\'UY=TY^|8v|q>[d $ S=}##;t?G Gpt 3*[} 3oPJ~{{Gp8iaWl1(-qiV.˨}~jݰ`8pn Ӌ~UUBF ^߿iyzc oh˲?ْ, D$\*z8w`\DzRfwU!~?'c?1<Փ}G&_*Rz+yg]]4Z c?9O18ץn mp7tWl [Gzq"3 FÆ0ϣU_ih90xHuC p֘@ C**~˷Ar/{J0Ъ]AJ0 FzTG[G1rvIÅ`?s~*1#WA/׮IBQ4⏕=<6 }6[vaT}z:LJ{ۮ; Nxi༎yz/E_IӰ"i}%0fPxg:޽3/wΙ?!B~RJXRHi4VZ[jlʦiMSSmjVb[6-&Tz$h`RWY2moUeLjf1BdQ)ɍ"Rky)FI U",M)&ю4#42 XHc0i]n*Ū"["K cFRm+q)&!0*X RPM#*v۲JYDRM. &h`-"8B! .&!X ХS)/#҅Lj$nZݳM&"wfwr- l(1a JYQ&ט-KۥiZ2Lav%jda-F12Ӄ h3f)KaCH2߾ySMUtڣۛk\m_tm]WvA(PBu&  r8viެGz")JUQU*Rz[;NQ!Bȕ4Y \.tW.#kEWm" Ec>=>wk_sp;ÇӁ^gqOÿ!n)~W;y(duZ&;/xχo?E~cRo9A|}"W#UUQDO3HFAO@đXD$d=o$ (}WKp۹}}c,}6"M,5/&.X5F}qN^L_S ׄr }' 1$ǭ<޳TObLU~5m,:Q*WgC1caV*ýZWz>g9pc?󫇓a/NjW|k:rre6?I9vo%gaI٥g>+}Qo $z? ?KM ==~s9zЇ=7U _xy׏^Z ~/{^ '|nGsEhfidYSO>Lq##Q9_b{hz}Gy2?qqL:4T\>czGG#oȑC(;wE|FԄQEN}C(c }cz+N'X; U.1g0fgt?3W,_,zFn\C ӽ``!N~8Cy|^[zO=iz *$C8},z;]A8C8:;}8~]kNr|ߊ`وcFp|_G{[xy! :4rafrCZc6@4N2R`WɢL{=(,|:Q8ĤԄO`m{t\ŽMHxt LaD7^iN`kqy5UMGw}ʶyl`ms2wXep.ܽ4}%qu݆ fӷ8CC" & uH_ǔ'`$AC(f|Y`6lVEH!spx϶rYu"njFEj ^Wl[@7hxitY_J9?zN$s) !}Nq~|4ǚT }T\_{Jx ~VV iX.!&uՇFyqa| T_ZMuN+u\Uv(ry#j4%˳v[STaKFN2.UݔΎ7*zʶݛW.]˝bq\Y˼{F$d9vy^q\݊Z8zqs-Vg&QskȦ&ǡTy|-ccbdFN1Qתnsw'fLۮfLӻ&M.R|e٬Bd꥝uØu \bl7skx\َtw8%oSt3[fjo^K55|uo5vF#ZluczGw jqGq-Mfeitt),R2!$zhމEn5=ChTs+ Z鐕j#k5]F3gYk*gfylXE݋:bnẎy;@&A- Jw'+2Rݓ=Tº0+7=W&_mmtޤu=]/fNY]lrvif ٚ+˺ۛS37{sh 05kef9 gVnhJQh]2RYKvu9ʽ]y{1au'iUZõݗ,o\^aRP䅵ԯ$+ƺhIN%VN(Zv14tGwO_XL֜r&fk]mAwSFf]^ٳgk]ªh;2%L+Rr^W^tJ۩SS&qM)`Hmdӹxs.*}%9[9-#5QUuS@޾wJ̩uH͚&nsk$Ыrx>naYrs:s;236]'oVImZQ-\8R%WVRQ.eÍH7[B-ה]Oh% 1'jq.7C$dwl'w8{JNNzuLxۇ6o_;3vsj}xFK5iUz:=a_+{flgn@Ѯ$m9(!*VUIn=ӧfhưꝙI`Ś*Y;LK3oM 3{[)[%H+!+ ɼySRD,6''pb+vW}N#891ULW3c`mBʹ a .2G {D59Ѱ!$k3[vW a0mP03$̄ÆRswĎB'Cؑ'*+2rbt̎FyL>[Rk 9v L(W*%oMNEӍ:A+{3"l\gM7%zE\M61 0\vHܩ7ogdneX6ݢlHr Ýz͋Lhw ᩡ{ΗBwNөn K*d;5$m[ln3EcGROnsCu|7w,S:sTrw؝AJ꬐Fudf;Hg; wlQc_r*HuRe=o͹wYWZn+Bf\g G2&_LF豳ffm<=bݸȠ1] ]թev%8B7Ml宜.wvvgNf{@0?q@Dy7MUvҹJeyɥ(=t3sV/0wK{%-Sǎ(TL%BaUd*n1>wgvo @>fY+h_>r:XSNR']ENf[ƅ ;5rfo*Κu71qrɜ̻Yǟ鞺Ŧ 8,3^W^̬#Jy3K Q0yum57fqޙ+M7,yޗqr W)Viryvs`n^ ˧g*()̶Q!m!0๾C.}xTOxy1VN~?B}0(^ _@}#م1Gu?Hr/YUͿܿUX9H4aUl*L*XOgru>>٤<>dyJ> Ǘ5D\̚ 5yG'Ip0A\|J(Vr@+$O?|_rͯC]W*Ϊ/vPХ."^Mj-nxlrnjU}V˺5gm4 5ofv oJ^5>UzMpG*#/QJf#;zo!ѳdFY`9a^pʌ12,⫏{Z"hE@|G`t=2D7zwnd}|Hd{ɧ~qgԚUzR0@z)zy>r{ti?e‚=x[WɁTཝt1֨UT٭)Jc߁/N ?.m2<řL9x(P +:4*_>>p&I)UhBwV%Su0գ#>K? T GrbۭI(/b`O{U][g+O2NTj0PɸTF6pl1[ @#qVhzx @?0銢:YmE ⩯2ڣud/L\ XC&Ì Bj7ʐu ;~uTh0]b;Q ya@Sz(ϧ2R3ZK[h&V~L[ʂ{Q5yQClH}C;JMk^SZjn>x1P4l.3W6jgk5!{v=2X";a SdmݭQg (-j9{eq{2iE34=("CQP6Z?⬾&σx_~ w9wiGrM9&iJٛMp~p'EiUOG],- 0V[Ep\KV[tD"Ttuߞx?+⽾ U;wHy . "GzWUu9KK.h -(*Lk[whLvUuEGWVɈ~QnQ]*:onpcaAl?Afh,EHM3LͲ"b;0GܔO8R[Q"l3( OetCs'O7OzN#?wT">>~--!2bP]o8x ɩ"R 1 (:o3uHb$ L-LT !$=NCs4#y3Gnfcbz}>z{'];Oc[(^oLWfW)ܴ8N~(r W)uW8tpҫj:4JF›iM'×_Kcƚ|zuycGZcji'UoZz]Ίf;9}墼)ȪU{vuW<Q+n烩pmpW<M<);9W}ur'˗½GGǥUlէE;+lrb0ˆ8W >F=ttr{wRl`Z}CgF718xہ 6Aѧ.B, {41˥n!!)èe 8 ӯe!]vvr^ui:tio qwwNFGsihԇƃcRvjϫYesXbuyr8BG%SmW]P*hwfdĄ!A$6Q8 d-G 7(CG[GߖI`B5\=):7 #E9J LWFQ0oKOO k@FDtucy> Єu Ͱ*)K ǖ !%D̦}GHF(򤀖eRj:= jYM̷*!L4A0jZ[3gk F8UV?^y8MŔC0tՖX 5iE;btᛯ$j`{70!$&`j^$w?~*VVmkjkR jV VՈA( T Z+R( jkmmQQRبըkEkR*EeXEJRִJZZ**֍[QRTTZ%kZֵVQQR֣RFUU*K[ZڨQUEEEbJZ*ֶZjE֪**Z6kjZе-V*!UmQXUTT;;#bom$G=^4K}QRsc7?9H9dNs \y뱷Jk;p ̙P[C#N 5'hpSXjMj$ b^7gz(eXeŊŒqDj5M ilZwwz ,ɩ 97O$HX` pR\#jaV-ZeQB(%8z@S3Kl%cK"@Zs>[蜔ZMLMx6mXDF nt{1bIESUYK3?'=rlB3dRKC^}\2ˋ#1jPTTTTQEEEG뻮 w][6k6⣙)n}8QhM&_٭ddhXIuEٯLhht!d.m!Z]1t$V؊j2â{ +{):'ƖU+Jre-wu( TsBJ,ZvcxPuch ddA(N݆ҝ#|0v rQ$$!#$ n@:缝=vWswe'9µ/WUU A^ $$˪24\Co+'퇻HZ叭ncV-TJ0F'7}f̯zGvQmU$?# c+%Z1]"aM*G9e%KS%I¢ˠDxYC]iWRK1[$d`oPRqD~m~,[0%$mTi2i~}7~zߤSӂZ68 L4 W>݄OtWz i{i]{TӞL> [gKj!pBD8]\N%￧?ַikUTJ"cRj*UUJTmZQ[UmeQUKZ֪*4RTTkEZVUU֪*֊V QVkE֪5[mE*ZEUJ*EEcUU+QkZE[*ګZ9m*#Zm-EEEFU+QQkQbRU-jQkT*%RU*ֵZYTTZԵDTkUm+k(jTVmUUZV9;tIR󵹴%AQ-T%jB jlUVЕ[!EV !-ԤBlmk!JЉZAjQa+YmY [ujTBRA BB([VA[H+ljBY B d(51YY!QQ E TJ%mj4TizssK߮>1dfKVHOڥYLJa7hLAڟ),$v]X;yiIEUUsï>-,cxᙑר~/Ž%Mu883XګFeUUUTA$$ˈ&C$Oq-ZaOL{5f c\v&]>w@BBtjOM2zʔs?z]jx=Cu̶4RK+ w-S4'~Goo=X^L݋$6;òװݏM}'y^#!yeLaƍ$TiysEY5"N >bJ5Pd)@J'FJ#jQ2-8??Ϙ?#CH$!"VAU8 0:6hg2FtO3fh??ӱCN i``1isM0cHlccVpf76M4jUR՘8r14F塦e!)!1L2Vc5:+qPRrYfĚ cc`ѱ z?r7G*͸+[oП/ŕXF92]^$/o'ciibA'XzC 'O4T?0Q=dgV\CNsh:"44L*tvz4Mr[ ?͞ > >a6TvxcR`GGad{yrbO)>EG?D>>-Z?!m:Km4M{[ic> ,tx@l^85ǎ.4j8Pzw7.QPB %$T$h`L $BIp $XI$ؠWP & B(AZRǻI=`a,ޜuKZI%I$$ր5ɊMII4%BIW.9U"mR 9sk6'* @Gߣꗿ3gw i&:^l2Y[F5d͐_._ƞT~F4z#ka}(03AMa4`;:74:or-W#u41u>kMmmO,'l HFO)"}Tе&fL[1Cn5(ncϑ8xl|mۍ(~2(kYzC!'FJ`hfHтD >AzbCMA+jӐ~4&rk Ds0 {^RRRRD& I$,I$$$D`I4$IAY+,̤(PBE)EL m2Yeee]#<2䛾c;>$ؒ`Вk@IjA&IbI$Af.9U"llƆ Ƥ؃~~P֪` #li`s9zS֯<{ {;.PɬX99OPIY"rML G:\S';UD=)]533}btcBx;͹;uꜜwf]מn%׋kK|U=7in]&#A'/Vs|slYð\s~a;ǡ$'FH}C{3oYrNZ @mEuۥ+hQUa2wוPʇcmQ׭'-Պcsk'7Z I/32C=xq$s0uzrmd*,wU@ ^yX 1֨%+y&n]xEi(2 Zs[硇⑬6Pj]:Q{Μ4kMoQ&fA ۃ8zDlk|XpE3{f\ڷj ڙSžoMMxn{)̹+6GA9ڔ￑{{|?];^马a #HCս<|@tNݧٔ2e,a C5{mFA>6I%>SvJ/L<杁ȡc{FQ=aA^(0R<:<,DK8݆p"Aș\I )0$ʋ2RSD]td8sĜq-+Iڶ;&`w1LH Vst0 zyϪ+gWtW𬜞 {b19_MW]q0]%WtPMM0DT̈LAH)0 4̪Eș\95MLi$ `Q6nߏ_0HtӺ0a1&I[Yّ& ^We)YK.YP9G:]V1NK˓H/1?\]uU׎vN݄vm*'H2Ha6]LT2 #!?@tE D\ɤDș\bI0ADzp N޽l fuhNe[H|r(<ӥ~dz>jk s7ΌjHHaq&L 0HBaqiv2&W6Xhkvx$N":/GgN}{56"vmdۙqQ3{a&>04~CJK8V 09'%$d"'t2&W70 Ř dLp% 8 L0 9 Ɯ[Im766ijK`  Q׿Y`Cw^ф1csdI>/6 O WWBUciΪy܋.zzith\u9@b$@H#[.ؖrpeAD$T?~z1g #JŽ"&=CJ7𯝳q1j*TUHwG AqroKcCIZڤdƩ-44lb: $a&I 6+yju'WˇKW$" c{Rѫ]\d3n9vA,jI" d0Z`1;4#ci5țLVƆQ44E Hrs7޾n0LfwY|!+TT\}QgDF1^RjL4mg^Q/&Ib}Z:`147 &{Mci669r.@ eqLD-2q^n0Lf:iW 셗^)Ls5U~|xnmFrmvIilm6M &M݆CP,ll $;@OR[AO5t@8#>7 r!MF/0T x]PIMbKiro/uM/mIL~oRKe#@KUDi\ؙ,UW \efKjEkv &6YÀ;pNglЬ: k<"(32{ZSM g#-$iCΜR`' rG{ۡ (Afd$& I$,I$$$@ & $hP=ʕBMI$PB ։x̴̑yYYa 3{p{fEky-zD:eݯ5]$ILPZiLfMA*W#<+a]]|oxOJEc8Ԓ!",hZVܷ)wkN/sHw,<8uSMS-)yTJ p qZW]~@tS+ɡ5:kϗ^myw~MUWd]N.~y75-UMk pM+[eM,Sg>[m~'V]fN|~<XR\ݺL**'N:yG1jkR"H"j-[$]rM98JbIrtݰ5)ǽ ɨ/nB%Nugnג"KUS7p| ۡ)<99fӻ.B޻(xzިZ/Yydm&l2-fn("' txf碤0 LXt@j:KMB 3kd.f:m\IJěbԓ{{4ܝx8s@IJ-.U{Cؽw.ݛlmh8?*ZWA=F?1]_SafPØgrCF74 /E cI8[CCI [w#rl[%2aV!#ݸjw`&3PqiRKzx X?Cުhy,bwetrt%aERhdre*r(h+2#|:Nׄ'10cB0Z>zpu]rӮڲ2:FmZ#:d|¡̀HA1" ^MvE@?,C$ 7 D +f K .266h(T=_ϛLN8zf($qgWAgvqPg~93%now7سYG0z`y'8 0ca|slq^& b$AR7ׯ1΃Lof7P$P^*2r]3\Κ2wd`#cˍ-&ȿ `w}iX_#R4Ho֜C[!X!Q&fC1b`ݥ)ևIumD@"[VFG]i۳33.8 @$!C@^e9?|߲-/"j\xOPHp׬'CyaI|#' yC10:8L܄̈́rsǟ-dduk6whG $xԣ#= Rb`A?7jRt;8n\]1j726S D@\\E|=A0LfD<zJsƼ2A>8>E% ~}Oo];)Wd20B@ 6q$[ kĥF,[Io" 4%68 +31nI !Gx)1א>7wkڪ @yoF7}3)0i)'9cҖpRcr8r׍JI0Lfӻ'^"nx%Ȓ >|yU^M!FA_D}罀` 1 pd1q%C3IӼlTͩӽ;9o ){fU huSB|ܨBx|*XFqa>h;"j()շowWQsh@L$Ƴ)_昴Jd/Z5'lޓhb]dRCPVILA?~'lR| !3kbԇC,RBt¡UP2nTܨFhLHJ?q``@aE&1oC_LoU/|+[ i 3%#j~s#DTp99:;2L4)d(QQ  7! $TffBL$RI$ %$P .I$IXI$) (PB"!a\Le,o{w|gymw^JmR=ܒ6Jӆmg#+ XbaW/89nJ4 Ţ81xČ"1VD@cM嶰Luݓx(rX?:,NQFno<# .i=ȗ2Ӈ8r751 fA`Lȶ]c 'tݓWC_|hD kDN.PS'Q z{Ӥ^Y 6]ud4 m d") :T n Fݑ' O! 0F نa4G3$2鴿] V!5.m#gn)QPOS]D 6]*p,I`p ͅ cb4o)& ӫvF5DxH^~=HסgG(-@>?~Y|1Li&D1"|XjDȟlGTXmDdL,J)$@@מm0N[7wd>"R$!gS}İ=dnσ硡 @fDp#cR:؈DC& ӫvF>q"K]bK=ʴOF[t}LT6a ="fdș dL,?**DfD(do2/˻$ vOD>h2 ᅠE^賾R" t*+2i xn)g7~9O\I|֖Mm-N[kvߞNZS!wr;bvۯ{7QӍg^ǝm$V*0Hޭp-*'r LCI%^PŢc3j Jb* dBI6%PI$܄$ 32I& I$XI5$nIB$ """("^-u-"UDַ=;vnK=$>mvc]Rf31$Mb&e2y5pI$bX0H!HdX]ffAkb zڷ^aYϞxy ׀杊Lnw' VjNn(/gqGC[w&NY "ii\Eg0;iZ햫C3l2w(77os7;[s/ <ޔM]pIj!8|&bҋL2aJU7 )W[Zz]dBe&;a Y*t2&\vN·kzyf{j='R*a8[Gw ɪo^ힻ[F,iYH!RѻUg-f[ꝽݶWy07C7ͷ:ڣSgQRmM֬ 9+jڱfeSig$u{xHA;6XвNX&aw rd&1c9J0Y6rKE\4fV1/ѣ2^fȱ{t;ggEջ#wvNݥ$ִ@$~DǍ@UGܙƕW2'/ 1E8\g8sXje"  (ʁ|ۂ`:dnZ-}3O^s>Bp41S'g|+,6H',dEdጚH= <7筸& ӫvF52 mVw0$?;00|V\/d*qZ=|AaàaN2"J^>/~J`:gNDHvH~>?2H}]=׵ۊI`&g7H%2{32ÐH&Ja4lp_́ջ7u5 R)&?Vi;#߆ثܫ *!f/c(KŸ|,DG}"ly罨& ӫwhn8izdN&3:o@$}/_<ʏNhɤ$h f3|FШns46G.31IyPLpא)$9dGo҂A^$=f3B9D3y0! ,?9FGr[xs%된9A.1}p;[PLV!Y]ʰ'*"Ɗ֔N+}L0Xndw#ZsYi,W4*RPn'tcwYzoצּ@$|S4|~M4eeɫ[1ݿcG$%"\X-p^ۋØE"4pI1PnV>ICd>]{d@No=ɚ1zw)|>in3 "#vTǝoN[ØIo TU Tָef]p3Vߗ <Ě)Lfbffi+"f^b/12MXI$A-w AI)"$Z-3{֒fizɵlʴj/Ro狻$X泝/1vi;*6|&+MeesY)ZTl٠Sy^1-W=÷/.1uWun{;4t<-&4j7u'SE#oZŐ $/$ _& c(r5OdK$șD02&Ca! c+L1 rw{ 5nΟ gLu~t$XrO‡3%]>1m}pyn5/Lg!iÜS6a%ƍ[8[[UIw7$cQ^xeeہ?=Hٌ1|r"?@'DAJ KӇ8r1opЂ] |{ 5nΓ >}FbyR5C1Lb?*_$JA0 L3: qan3 ~srRc"5#4P z{ 5nΒ<5o&LʻRnԫNmw<т@: -]2Hc4) RXu"dLXj 6b DQ1[@~@&4j7u>B:;8 M7Me#iU">J)O,\g\oZmIƷO5**8NT##RxʒH@U\R*e rG 4h ”$]ʺ3 mCyӒ1DAPۓ?"ITj5R07\jw+b! (PD hI.I%I&ĪI$h I$$hPB$jQ!^ZfffEJa"mkZC4mWQ ЫiR 4RjIrIy&^b/13sUI$X0$1e!0-3by`ͦ39.NzaazFȒ]3343םvq>:Oj} B`MrC*T*ǽTrRirueVM䗊f7xY˖&WC2J&wop1D)!u=|=H*h]ƪb.McGo呇r4NvsiYB_j̲ԌM:U6O1SH<#"Bژa#@; އvFN;u Vi:T@5SH"]]XWvAYW&u osƍ[%{M Lb@<0 @GXoޜcd<iT"|;O4R.ԉp(T w6R,Y8:; 5sÉޭ6N.'g {{ 5nΟ6 oT CJHac^Vÿ R')D@K K9[l-ؔηbц $QbN@6 ug|ڙ=P.uI>+ ~] |qLO]FD2cԼ"<wta7zR(($b zf cwYޜH@מ(ŧH3FadZS?ÖM 89$m'qu{ғD:$L`bl$׻n;^Qg9k lp߯H^Z ?\$` X@' >L65I 4?"f`K QiSJ ~d<w^;/6P,W0 _a,X9T$ د迖T*/>#"PsI&D&7{n7dm-h#tQ(IxzѵU=w^:tm_frH$ |p:NA}{ "d1 4DxhLdԸll!<>t~$ݝէNv=$Hj*LTjHG Ld[nj="["\ȖST,L0L"d",EHeLqq㵤m:toE;Lީ0 /dBCHp 1H`_AKdG#_q؈qg;@@$ݝcNv^ Q'Lt>$|w'e̷ʣzeI (Ta xb, 1I iK8ΨTdS5nH2ƕZ Zq=o(zTz]*$R),2K;/,YD\Q|tJ]:r$323ZQ,֖A"0 d(R&QСB"a$K$jIdI*I&: 3332@$IJ(PIJ4B<jLȲPdM7wypy[~_T%IbM6A$I$PA%)A ֍R*flbbf֖63ykRY_i0x< $+ScZ/'$ ?6UyUy;u*ֲ+c.G}e'HL瓞c}_ DMiQRu5XIi@skɓ~]^ 3:j]؞mΞ/Usy}Ǿy/.Z65?~6o5NR͸0;WٝTҭn2ܕO2mTmy9Pk:ܷ':y6 ܵոjUV[u̴0<˹甝:Tid9<+l(U,lU8orȐxxծqby qٔ9o9(Y'@q4;s:djHS!MP:lf Yժ *腭)<`u$dzFOFp8'kH;4ߪ!Hν|E kqwm̂ &Z~؝he= Z$KYض5+l>>~\AFGP雗w\2G~yԅsq2H>&?,- 6ɐdJ``Р\nnW6N 8{@N^@" LS/מ9 g WspIaA$XnH$Lf3\d Lm:tߝwi6d\GbϚŋީ?&մRH.czgǷ~>>m1֘d5 Ld4-G=}|}{n 摣|u5ܴ1(w! #$NK &aq0($IʋBo>,59xs" a(/'?ϟ=zwwwwcFR=!H>A4(*6޻a9S{z A!a~ll#RNװ|ĶѾN dr;wH>]PF%ug!F#&uO "S"gDTP1hǿS>APNhJ[i,)TYO^X2U1@KcA %ܙ$"H.L"e2 H^zwwwwcFWsw0~f>klՒY kq0nDհh9#("lLSa4y6$`{gߕ,ݜYnVv]^ǼA|Ia.6mg[m -r @-A4 uD 2(P\III0M %I5$I$ؕI&$ (P)E,<3-+3$PDڵ]Y03kV!$ISX%5rI&l&U^o6yABI$IP%ՈRE jE 7W0Iboy33ʙ(nZrxQ^xyLȒ!]gvd  oCK3ıb,S^ou\ᜦ)w|ۓs"3A-Mff׎'qrQ72zo'jkwww|ݴM3UWW^i4\tA&y\X_P5:>ϩuYu&263*&˹a9%u9KW$6T胪`݇ I-QjFv/2iQNږkZ}׵jE"ff\N/*UOxlNp/p 4X.ݕw MOL]͉BQNY@˜üŗ8))ѹȸNZ9پ2N9y]Ժ˾sf2i=@x7Iݍ_MbYYDցNr| 4jjZ ,3p">$ƍzS& OȳD̻>1fՉO{DiQRq$g}B ;kDާ,Hg )+Xld^} dE"R 2AaLa;ߞZwwwwcF׉LQO/p9.ݧT,X78q54ȉLM{b +wwwFdޫ@&>9#6[t ԰&rq1-FXiXi&!Pz^$ff`wA!I- ?Vg|={SxX}2jcc"ơg>}| ï4#@`H&:= |# B-^e>ac`EI[ȎpK 鐤L"fd­=xNYJ5^<[KԶQ"7FuNq4mZԳ7{~ht0⒙&IdB (P B\III0M %I5$I*$Mm37t].V " %ZffLeej֬Zd03kDCTH% %ɹRkMAfy͠IKBT(%l]HpAhuMd̙ZFzzk\`"#Wg<|9M9MMTDQCuYӳ:Sz$;n&8ULS I '7fUn'&+ggiUUg^V C;+dŮqgWafw "Wρ|m :*NH9Qg5цiIQìxrlbwLHգR'Q=yo7#54Đa-^v] &˚>P!ߔO!+dcsn4L, hks(u }om;M }ՙrV5&oU |?i Ɩ3zn0H VGDYg$j& 86 In~"tc/gKm9wRQdpK+qVKU,]N ջ kR;F MdMtdL8ϝwvyBind$ @ S7o4NOZԁ=o/u:|&ܔ-ԟI6 (AL :'V&~uۅ0HS^gW#~VU<5C:GpH[]6Z]s2,?Xl<~$YkY>gNnrX܈~ m!b xL`H A@0;@'ffdX3$0oSҌ7rd: 爧 FƚTVfA H&".|A833"6nLwn'g|'߮2;R齬I$ A!ܐ!nXw˶H  V* B6@ę7D$Pf-0Z˚yu._F6N]ZPl{Iղw|kz9 ^*.F9g~? -[. :h<wc0wur<@wwȓPEn0T6ii&hfgV=rTtRf35$d.hI; I=l#&S}aGk9 d!塠زƫCN/o='?sin|?\Oi:D7{Tg{;zǬgf1BxXI/9;*ɏc^- `=3h^_%g1k6ݶË.Ѷz8fH閁у>k(C.6UWW$r9 @3f6o5/]m" Q`~HL*4G" [:mݾSjRP gƑ} |(Zͫc;&2B 8q00 0 *st4UUUUU[mU 4js3^ I|tMsdѼ(Ǘ՜9ΣÈqWl7m=}+Zr{˷_zhTAAEu^*¡W">1P㼷EkVkVL[G.-V-z#oiX8}JuS1{]c Ώ\6<1icYUU}oFݞjDZOV'M|U ch¼\Kp jprmˣW,VڝbmOw)1^ëoMܩTuR.SXz|=*NJWy1UW|E|n;J;igަ;xSyw'F;aSd2;viO+{6p1<,n0ʤ*> ;.sr<;>¦=lஏSʎSjUw2jX6EXE!Ar#{2ΌoMc=awL֞^Ct# |S0 N ۣ ZP@V8VPUBE8jY*T?Q\tWTpՄElQc;GGAkt!~VߞFr.;orԟ'u(rTHC'%Fo p*wQK&pTF]~lҾjuY=TTtl~׸׌J?ZI%BeGhb(dRsmHQӐ(^l8mF !p<'$}*_ӟe:-F{.F7 7v:BAvk#p+ߊײG;{⼸0N=}݇-#jj^~ΰ> ϶9ANgI(pQѐS Qt15 ֗.]hUnNW a(uM h1;%mZVK&z_Db3_&$'V]~ym=0U¤˯dgux~{x(Q}#uν}1l C=aqn7OA, })8??+qPO'|+oqܼT6`?뭽&lfHI $=S랿+onI 2t) CKB~ T4;EI轳mEO|)ItQ&fb9/\s1 *YS2e!REJ@hi|PDI!#$2%yV'S/N~z dQk0I*HH$FRM@o@.^Ɠ$3F[yMZshrf!_ԩIj>M0M.('(&"L+->c 0*Tɞdz~G}_ v$_+:zD^+%뿗˟.b]HOEaE$!SZHrm_^ yVXA>b _ BoʶjC..|>AɃi`\/qáaV;O]o3bB/)nA9@ejD* i*jS NȀoK4 ƓXK \#/y9 kR{|R;NjC0$k$e[XݒO}JBJ%ua6`*vjF:;=.UˎI"پ5T o>+CH'tk>suo5d,2NZ췍(?{W _Msov!̪}D=¦v5ySu%>;f\\=| 1O? z=&^q(ϪP;}u!$%UDhb!pNg%:%ݝL0s8&t:x_崭~K232ebRX+Lfe+n Q/bE6a 4DzleK1k;2Juilbֆ_lQ ,Rz3Ff3V̭X$[`TDD68`r8 QVݜ" !ZUo瞿{joW/4?3 ky2s72daAlg9lCU9%fܓ@٘3*0o*MjGvUFq7ofehZp?j }!|Dv"ݐOg|tGO=w9j6= uMuqS?_ Dc Y2Vik,ٳ66ɌE?yxshi Qtn 4vgхᅼ~n.]~2?f"Ben+>]yk=BCj29uS+u 58 2gpJj3tz$'( Uu9pfKBfo3knղfjT(GTo(~6?|!G2zu\ hCkd}Q۾=Uu~y}H9=8/.ݲx?À˄꼗koɢ|DVN+&Vʖ\7QsζQ iVtqj qQ{tMзg͑>+h ʃƊeGʐAç>=Gc|G(<s%:ۈҾ<.iBZn?|aXi1`u,"W lYQzў*wSNxP(UP skִ]l5v6d~wzgx_wAQꪪJ6־l_BægOqdvF*3[8\1g%u[6n'mw B**l{ w]ރd@zxOSg:z9</dLT'MN] &'X3ꗊ%!NiiH%f#q41yȝFm,ւULwNxq12.JVaڝޫ~TP}U/߭ՠ. 9{yjcvJ[QAA"*?\$bɔL3,׭6LRͦU2ʙ=-]ڷڟ0T#(F1ЦJ lPi!b4- X0ɚ-1A[.#JTE%!0,E$)c@(Ր*X(-tDm,Ogs2H*,Ia II͖8rOT~7 9$qcxtIB;2l5" O dXDQ#̵@F16C#=*iKBGk@>ޢlFAҔT>U@USTPQve'S D"д9`F*!:^PcITG՟!`?OQ'T j~t~qs 0_cL?O~މKimΝRB1؁( RQ?cF#Eubw~A~5|6 ͺ44v>8
Z% hP(o-9 [$FdI%Z~E_j}_v<ƙ2G?Bw!Hh!B-?LI$'"|~搕Al):ch!"}jɁJ0Gf)L.3k*&#rlZ]9mz& nK4I$;o'G?RlM'@x/LJĀdS-(#{G;4T-D'xbQ*2IY*il KІ =Q(hibhϢB)aD[ {5~~ Emiwc@ w%  P8j6a4~N'(hz|XԢC}OY;#=9t-7$W|UQD?!j_6rMl<~J4fɇV&Mv-QOg̔YF `pOM4SM#H7}`Ad²DZZkŷme``:M"[77.:X'FBHJˏN~1=R"@C8&üהiG쬇֨(#O6|eUe0(yq@1LHa4aD <-5 ȝ@|Pp'[h`p!UkD!ej]Ԏ|6jHyBY XK'&OЈl Ɉh|h'2zA?H (C@qN\!خ?[︘reՅ\@z@()}li20%F:X`IЏ<1;c*b$S⊔̌/وօ-$*X!w02cdvKlJ *wWB@9Dvt)i.n/幏 uQ>X"jԞ8w&I$v3ZhƘɘVKe"KA`PXɟ)D=@D2}D?+% KeT-$D;,UU C# kc; ҠOݏ=B* *~R21D4O}$!AB2z6=jR/ nghV}'C {(2!Oɾ? .=a?&3!^U9OLdGʱ,uG_oS,[ּe^WE3qLӤI(mp_êE oh8E"$0UUUZ#b?Q1ҭ"TRfɝ^?>чЋO_? !~Q. )jH ?E} #O10i40NID/t؃'c,deM6Ltɤaap,[AP*9h$SWyf5*ޞ&¸--Cz8=C_iΕyjߕiZY$ lK-=yzTUOcSGG41-1 u$I!$cKTovLY]s-Sj/dZ31YdUleܦ˲x66 ԫmX *ᥐJ%4?k]"Q{{? 9ǿ:ʈT6٩jY'E0hqsvP2I4Hx> `,FB$n\!.ʕwE|Pb)>,bGwl20Qpn2Btt(W\pM"{m/N? P;{m 0'dqf-ɗ7%xIE{~*4 S{Rx@  9I W?Qkɐ~p<OQ:4֡5`FѸ!E'8>O{gXU_Oï a u aM!AM!Aj( X?|,I䱄$m{Ht &C@lQi?R'`31?CMLˁ`Rr$TjE5F2T=i;M.SL*_W֙*VajY,2i23xa,-uekӮzD:{|[e2=4ަKq%OrKH>** @ 45_3(ԋڧs@rwz@QWSОM؉?EW tW 'h' 0R,T_Q'_!3⚊!uLc$\Wh“/ Q~}z_H$uh4pA{~ML$Uu2}AA!B9ͪ2B|}7_3yu1٨B4%I:kbB C%}P%2 l$zs\}#f,v qM+iK#)6;o/J|[o㩒ҽby*_ x+{$#Bw>42^ya3!NOgjti UPprGW?,dcj&ݯ?Jt041!;7ŽrT4 -FӴ$BCZk b)WK+d\UǏc+`p;Źc{h W5Ss \f9t {Q.'?WBVz.Q᧸a!:o]zǷKߣ4ִ>uX >Ltd}HI6JiX7zlU%EFJݛO&0MI3y쉣Y3Hw=yݿYKK^o{EZS$E4АSfei"͢k-jA)H$hR$[%6JF4Ťj,)T[+Yc&ɲllf*i,KID֊f(R e $AGSBġ~#iN1WːF2OR]'cP9j(ox!=6C)<~~Kɓ'X?GU]8!g@[o嵢\@Iݺ+5㮎A÷w'w4uÙ#nܣ; I2`c.k90rYr@A0-F`!Jj m_2A{$'klL[Rjk)$'+k9~ 0 M$R$NtSD|9ptFN𳡇} Vܩzݝ9ttmü$'j> 83ٲLkME2Xe-'ԑ/A"#W}xaAl1$gYSṅ%<D, 7QUlSPYd.X#w~RHȖ?EPbO?M t!S??B+ܣSM5>,4?ܭm8 lX,iut s;,d*ʲN-c,J%LI#BB2Ihrn@-v7tffJN-\ EWj#*v'$섞D9$TU*UUUI$ZRJJTRY$JJTJY,%+-BQE*g͟IksTknʸmwUZsrU1Xu\th\msnn\hѹ-,XZF.hڹ[.\nnrFTmErܪכy^$RZRJJR[I*J_;5!o (*ݢ"؀QX6`1jo-|ʫcF[(1^JIIi)II,JKdJM,Jɪ=Z9tCS"k_ԓ#"0g5OXs@(BdK8@xgbuu}7uV?NbkaGb~~L>~?9$wAa+x?iǴT} 4n[(?d$@ƀ:WQ+Dܫ@!.h@ (##!j?VVjjYfɩSmFlK+]euY>PRQH7ڂw/10J?#UbahͶj,՘eX[2ljf(DJf05K-]M0C歮5q11Eti vg *'h66 EZ~/$i,bH%X1) CUL@W4xևpXHQG wL(aѢv&n4– hHL2UO,"EXTUaP@,%%9E Yd $R0EaJ. ~oġqÙG244A"%rFBfJpl}Gg~`A@#,YV(!9d$u]33.m-hdBd c2tӥԖ$%fd[̶Ҕ[:jd")ЈRH"6n8>h SODTXi`EHU3&\bsMuPdd4IHMSzĤWb&EH^ _Qь~gaI@$9O6ʡ3o`0N(&P  #&yEI$$@DUsF+v2iMADtV*Ta1X uMلoԵcj M0x;$*!_)62IYh3yd}7꟨"ǽ;h_cȿoV1Uh*A߯YJ(1ad=w =Q{h:5&pb ,"@E1V=}"F/cp>)i(*  l q`М6mG4ݬH4 @\Ah!/y(YCcC ?"b{ة@"Jmm[f-–UU~hpg>=lBD2F`B %W0p/Ab֚M0QU UHd*SrG-b>u*;#{O36w4')e 2Ɏ1Rp$-HfU8,f:P4-4щؕX9Bd`c.D/RQQbRdI CT7Ŷ6aƘc&Iq2sJg8o! t4-Ex})A .LH%ĶtC&,RB2HD&f2KNSp*< ' AlHqa`dN#m6Tc$cm 2Rf%]c)RÓCAjJI&RD#( 蘧b,t.XL2X #pI NfhyJ7(ɑCAyT7|=_PQ*}Q 0b_c1H crJ] k`ECRŠPͿG\4`m)y?eF?CCrEc|){Zll #aOspp? rJynLK(,k)H,<ZÝM!gr_L -ڱlPdt`/NL8~Q?QAKQ/|<ޯr"rb)H~~`;8lT2{L9)k)p^'= OzU1|H``7 \}i:O N$d=)*ŴlVmC#|؝%Qi'b2)jLMFkY ;HI"U((3) @=I䯡?!!MMpVǮ۹())NrxTgqޏ-!Bf5́,_j+끀"l8׃B( *c3$`#H6i4( +MD Zz?# h)Q9'AH@>𞪞y0̘*!jS-u<ٽfia>0`$ed&qgCJma`h)FGbip)I$'+ TlD/ `71S$2QG G(g~d .PI>Ex4k]x+bpԄUQ^1 -%gߜ:Y^D[ [CgO暲l912TNt錆A)  F/ YÁjǒ1&jC؊A9X@i_5F`/V"IEf4FUTzO~SŹz"&w"a6CgS9)ĸ>eb2 YPV0;a6nšn*OSŐUBʟ*ёn0 `R"$Dm)hBF]5FZaJ{> u:7Be%:Yz^F0cYpL4jیhcoL [hH`,`=Q0h79$m YHFZݱF6-v61 %Miɑe6] eMV-5995#bB2@`!h;.',k!2: } !iTNLc;瓠Co.C~#^F}l}P""p"^CU߸+%2R*I*RibImYIB\61B %$e44Ra0Pe0 LzZJZE!Xy$Od?zZdzvpCCOSH>Rγɥ5:64%A SH h~eH trH?G 4L)ˎgoHv`O:( ׽kL= !Rtq^' K()HH*ߖb~G|띧1S_, sgT#m[$3<+plCVҧI> OB1Ct .Չ1aN,D,UxSKi}}A1CA͝hMBma_7_nlZ-_]7Xܠvj'cL´Z51h'N rXr<΅IiA c_,oh<y;0Nsqy*9MG1'Mrt$em=m%C'|~دB)V bZ*,,~xLDԦLk2`=#{IZlTK>tzIsK268t(Zh15Q@x˳lٞSX0Ta">EJC&b11e$QdIe[quFB# [ե5m+j͛my*R׌۷S-fڹRʕ90M&}&C tlOp8 A;n P<|5>C/.Gi Ό_/TUs|&TGZpÇ 6m18K-ғjL1Rz0偨PN46upRFG,{2.Fb1 آ!XXFAb8tbbp8D+)Ñ`,),$t"ri {[` AVxX5Є{K;Rh>PQ 񀐂cH&%Jp!)diFUi!Kk2Z!JY$Y`4ԓC=BZy@-L؟B;O,#T5N)EJd@ԙ=3r[oyn5~3otںŰjG "4%gJ<|^v"3SMF*MjSIf'h<ب;H{!O:BF ǑfC#^ptG Ӏ@./FyZbQCUC wZڝ@~W0Hi6fVo[pƏc/"j'T;}!)W,`'%z{aǙO1K!ߪn7e:U F)Mޟ/!IzةR0L$yG-'j@сn ^ PPŠ[I>v-!՗J2@$bpcLދq%wb 0x H@Iܔ`~` <+`lݔ̛R4JAn6>ƀ@5)O]SH '@wL9~@hGt,Q"UOdTS&Mk:*|`H+MhiM*EBƈ,#)OE0x;cw+ҡ]Ȏ#3 84gf3"q`c!#ިjX8!DMsc؁ E#ƞ<]ZcCGrҜ؆Kx1À쀛N[!1$`hYJc?$ӧB=,S DˮxzC=} ₠#"1l` ߡKQlb^f#gh{W(FD"@-Ͳ7mc"Ւ=7j ~Ev"iBO+*٨x3R~4 @NFtxs1i? pcsXׁeO̓ $dgGaqa(i#u{wO?Y4ow bt^lhm!#q/FGxYxyW3cSP `hV4Ny)N&<$S@農W8:xt}=*wljp$@/5U>BNA9#(DZ46۰7AE#1|0X= "E Z NjtX< #[Մ-@@0TAr-㔼ݝ,Pc1SʕRF= AِI ӳ!),A<ѡ8 "NJۥ!K#(YCW`Sl 1};sccoFؙ i,#&^nEAz1Xe+?P*ĥh ~ϱ u= k5|NQz JJa hr(vDD2׈-ZK_$SP"T3bZYVqxt#HM'MG]=Ī *ydb%U"A"0kHSwBHby5̍?lb N?Ԙg<;R10CnC>iT^4?`)^ik<"WBYWmvFiU~ՖnIm77*i]I4U^Xv>v\+\!Fϲ%D>kLUO&7v=J=?g"yBq[SO ]TAj~I$K$>)HXTrF}Ԣa"."‡RHyX=LBʚ=wO;K R(w-miշm0Ŧcb&kBZˠ`- Gr!dn:-:Gbs`&X8C'VShma:F1m|3fᶣIcO kUh^#F[A=Z(9~B;/8WdĀ i%PUyNu;wV)UK&L?,њKT6*ƒ 41S# Ď, RF#XBҗkPÅ`yMj rF>IHCфbZ)eK1Zi3nFR)Bzɪ  8$ iM4qI pc +AJF4J1JX[#DFDRJוJR3*iem[1J*-kdHTE!x,NgKɕ30djKwL QX,Y']h%G :"CaA84+^3Id)~S#W$aU[%ҭja HaPdKi}͔x,XuDO%˓x7}-T$-!lG@G`cN[B1 2N8*D5]o <\tx:7K1 J2mI2t9s`e:&˟9ݫ͐ Ubq"G Gmu| ڷfUB8>x a29Η.f "PndtiYs_gtwȝX;f&ʆ#%  f!Ha+$d *rxqU !i ? _[@5Ch)["zcˠrY?q#Urr R|@{;d >td>|~?P6E[GDKZ`zF1bp%249U|Ď) b1`7-Z"]?THDSW' NA( ic;;)g,O!ѧbf{ӫ)`dHv%-9,W9vytM`wGn6pp;cG!6<M]^lC߫1OiYq vhL NY45TN8;!P1F(D1&z !Č5 Ephd9p52,kQ  eyttcy.dž$تt 0].o4%cxQsj@vLh0?2^ |ɁC5yl#(ae)Q6:m]jh&h {)[b{^`7_4baSgIH9 tHu@C  y6^y&jZɅjcQ V B!$\>m<A0EB-KbHzeN? OVffSZKa>!ґ!Lhg ~IBR49 2Rm구R565m%QRmeRjKi(I)m&)E$ima*bĪYrDԌ EH$)r6.\56Zm6fUTIIT[4E)I*nZYbF6)2Da|< &Q,8\ЇkYJ,VH[YJm]>md>?Ęra=XPǜ 2Vݬ#J_ڕ= *=#V:PieJZVHR&EH~8b'zŕJiFBʫb>DG@ԫ LO<|EbQ3PF%"!B#ۋo@44$D,[R a%!#`1ֺ-]5svnChƖR@yE,TP"*  }>rY.5 &=@S*k)  c*<r&UI!„\mKpqM Tcz]bROdPR}vNj,i0QP'hh~v!Ad5|&TIT$ɓTGI-[ƴ)>IIU7#ҾHGfTJE۠Z^:L&C)0yr~nǽ'ʪr '&4YS⇠HD"8ɝ:R;DZC?"hHLtb@N;NNeffbISrOȞLhZQ! HD=\sI`&r1]c&%R=+=$ 11,bC%,O9UJ)^hjQ6DaG5$buO`S dTO^rG*la)6Axʼn6 wq?p׍5&ukBPJRRƁC[Cq flEztN&СKڭ,7.\z^9]㗬ɥw]k*T=צ>mOĈ/p}_6& } u` A@H+! *%8v}zRMZMl,mIѤݕjoYJR$f(EMA"SʹCS 󓽼8&F rkX (;iUoV m`%mփZ k[8mFѴV+FѴmFkl"p(6IIIѴm6h6hm&ѴmFX6i6h6h6ɴmEchmFmFѴmFѴmFX6&ФE>mE7k 118Wx5n7Su47TPRRZ"\4@z'0cM~651`6K, gX,F1Ƃ* #i0F>J4P8+DwP:-,`)l(b@1 |}_lh)g8Zq$3 x"RRƆ ݅TaFI2>jO48>= NAHC!20{‘aEw|f )6z%dBQyˤ4̴ԟ((V;P_&-,7PjKKD T8 MSH(td1k Ud?kc Iа*Nؘ-K*F! z* iRt"ٕT,ۮԤ5,ԔHҘ/MԦu+nXKoULRl555ʗL0+{g+κWk}mRsB4Ш\Z*YMnE;^<ҽ/woM0&csa)fkU * !yjoZ8HYg2,)]WK{5IL mI)<ђWӧPX DUhDIH2G. } 謊E9bDF1c@ iZ[+2Zi)4hU, rFH2xc$b䉲S J՛)f,2LfleQkfLŭfZY,FEm,l̥jVj3XV356ԕ5K-*[&̵2̦S6lVFSbٶj2US*ڳR*ŖT6M*-L2,Xզ~̶/m15&SRʶ<=\2|[5bDza$C 8ϳU?QEݴ\!A|?bJY$U.F'DQ:4RhKci@XAR$!LJ@@lN&P}eE//BO&x a> [jUh B1#2*s"#eRʙMK,ٙm͚[U_50u20ȿ$0pJXNz.[mUbhUɝ6v4${1%=ȆM`Rk)VHK R""{E,A|,>I;yV*hQ_f=(9lw#B? {mBva% @Oeo8:11E.UKcsj^QM\Z!+: ! b2YGp9.HU.%Nݏg] aD4 (8-`GݓΞ`\* s݂Y4UECHo4***ę⪝?b1?JD{?p1mZ@!L_[ L +`e)K8%ol ԥH dJ# f@2(@JUS`4`X OHddHij4`R-s:8ON"D,DI!B K11rI RϬDQJޯ?jwaƋ}C2C,(rа%!@Dܺ8-m. R$"[IH-,ci520Mt2ӑ6@)4j HI01@WGR`;X( BCtdde2221VLjL喻/s|?rY,K+Qn6J&2М4 'n( z{fh(7iBo}{#I'ŁR*$RjGE~وElX֌FT{$Ĉg4*~2&!Lcf26V$M21eiE+3i5j"11LH 1T`SXTR!G:A41E--L0W ֲ?;QRZv%1d$]lZ?f({B"|BF!%m$L)V33&fI +(~>TҘJpx"jmii&dD{FlV+Ch͈ |݄M!HăBAn> hhC`2Mwc}b*W\ dx02D00DCFI[pS "ZܤH5jY@PxdS"|G1IMH~~²%L+_&n5EQLbJmPmkwة ?I@ cq1`a[c+4J5wc2~ R]Sashc 8ئ6ۙqy4iqX$M]0SǒktxCMXl/jj. C]/=^np\MͮPޥe-8Cbl'0Si84hxZ4Dbۖ9}D2$ ~O<FնejPfq诈ѳT;`+_Ɠݺ#Àj͆ (/~bB!IU>nMtE^XiqճqN'/P'i{;ntdb['#~@AE(w N'>*b "L#R:fmZI* [&mhmkmڍ((Y"B 1MLɲڴ͍"!|֠GڋPP(7Xi6WkyYh4F"D 1[Ch6)STlAAB4Zc#~` fb[*+^j,ZVf%VY0Ȳ '2SJZskQݻnm5FJe"%OiGӠ {HFOmWh+EWڃP}^0,"'BBDN~?c J*mYfKEZ*C-,A6!Zi}}lP)BEC VQU! !R>(b~)z?sH9>C&C1D'KC/A<-0_ҥX9^0i"C$)ٷ}֯juCC+D0)h*?6|/;~BTߵVlBeM5  $,? W&=nV?pl 1V1PNAH5 Âc!! F#oQ 8?G$bRx{1TmRRP6ؠx0B2@-"HXYF6 -~0;APh\":, HhP""C*a[T™j #h HriOx'~퓩68=˂0f?1#HS{ {{++MnSC2Tѹ?;Vw75;tcim 9d0 ř6PM 4ąXmtjQf$%uIThha"B#)ǐ曠٘ORqaS,IL)a SN;BtfN.Ǡ[Ժz3&-99 iN\2gǓ8 ERLUbx/iV*ZMqՋ8ʫKzXtc~gVt}S-U$=EIգMVlT;,eY옆QApWR+ d|j9ZE|o}wo$2U9^ήcGEhٛZWIO桤.5MgHHtG:#@=tN!K駂{UD_X>O,O B#LF"Q#o֟Ќ Hb1T 9ZR66Z Cژr-4@S$RPR5:O@G$J&嬱iURjd=N6?#%6̄q88{,:V&8+72 ; &1GSmumviэ;9GˀB i1u 5@ CA#[pF|G݅ Lcr! b)4ziZhP=,cjxM='%$a@J!>2ü8vR<ꞻ\2!9cpC2I6VOبK$);UTYb>}~/ ꟻCsKg{Vo:Pɴ!HO1E2٫'m5zS*4lmf,D^fda"wISSS*?LA$T2AT@%A!|XLh~-p.\0)'U} p}B+5r(S~FRpFgݷ5EMYDlV^TLIN$sz;RI$BDm~H_%D  [t>(`5 ᒫ?AOc^dB$r;L {4^H#5A6B VWޙ,!@xQ8081k.aR"Y%}Dc8NfQ:)FD.Vo4[̨eȱVF,nJRlX,,SrNeJ05PYX_|Y"*װ؇{d~L'‰m6t6~ƀ>6pJE t A!UZ‡{c PQrhϭ[czdIuHR}#F'`)1GԢ޶lE͍ R"*nAF sTMQ* Bq9Z 2L~gs6s HS lm1%ÂlbLe: edYo[KxBl*w04D!DoV%5.[h\Osſwf"1.Υ)1IOTFd-K ^a (H"E>rh1!F>~n43>5 `)܀~v*YUZfYk!0,cm-yW6djf6ɹOdpp)ajyܳ!IK%k ʍuvcmy6yKVK]Ҥ6!,:eDA RYAuyуiCCm G ?z1+?vضYMileRʘpkt }7 ~a`A`~4"/k3{XµWhsW#Ot{@8<B* ueQ# W}D@;{˰ȇT<#OD֍smʎTSuZ{-{-[gLn[(; anv 0dY~#$(|9MD?bE/w* ~% `aw'&,,\2ɆHD`m >.6 A6@b>;,M#ƆXm%mлTcK5Pi_#qA2ɍ&\#$6cP֣rW[V5 Ymj׏=^g :X:w#4=9ݓ%31B^fW 'VKLPpnդ :YpĜaCj1HH10@Rp1D[֚ ,A!a "&zڃt;]4]W<eqZ?Y}uoc BC̦gM 3fU{/a["x @d`yĪ4f1,8^6Le}wآI1xl#) (Ag8t#*QfjRʤ̣QFVB,P`,F H&\\ Б Fnگ7^XioĎReekVZE-M% CGKR\ТbCaGu'nύ_FŐ&A$A4XWGT@0G0T$ DGjf,ƻ:smTk%T0vmUI[)RUu6ݵYLXYa&Xb13%U(4ˬaUܭ6ڋhU0qK8zlQUri!#Ec:<ňE$@iC(8@}c1}?4f\S$T+Třm"|s.>2dŎД)D:PD@v(s5[0Z/mX3*i@L:>76p6~0 `*z)IO|DgOG2qm٫PqR `HH`CZ$Y:|6?C,RÜq9`817S(h;Q=`6R4'p?a KV|D1"U'(2!"c L,Q2\r ,HE ER*X jd#x[\kYUJX "1"! p&CGHV1Xp4R5͵2,k1Q3mK*S&evݫ,e7gŻPT4U[lRfS-WfWW5($dQj*TAE b*.EZ1c)J0Dw s5,((AV D0A*C%`܈M$ M-wimm|ݩ6E*TR)bH"#nyejEe&ҥd؄)Zw/lOT,T̕?Q5+s&UZl#ᆠ/Wwh,TGX$' ܁1>ô3џ@t ˯ٗ] }?"iS ASE# dSQ.X0l .)m*CqKC)`!RP ,J&N@ן;CD ^6;[PW^ qà)LKw;9)~Ϸ.o 4;z)b,,T,eeIilTee,6%1 ȱ;W+OV UF-!Ed*V"LT6C'KWQ  TK&1AdiFdʙ,aJ>_c YcSW1M(-~U.3ntMwtɽk5.ݥʒbW <ꫛlQmUvsoKfJ)MiͷYkM+Yiy#]+,D]n-hh8&Œb˩YHii7j,*JGD#P}ϩAͤ? $'6!Q $$ `ĉ+!AU4PcaG]$,%<'[mB(Z-UR$ a'RX}r^5bVŜH+ I"p,dM荢U,XHR"" ( #1cUm1fYefkSzݵD"` 4b8cK)C U"z!L\_X&PA $ @Ef.CDr P}UDT:?>GʦD6uF,5[wTvtjEO`xYX?%H-0yg)#>nU,TD"X"ILD@uy Hy pI;J&cHz!,bKO"2EE\lڥ-EWw{%"P? N #Zi?2"D  <jGZQ_>_?6eѷFZO}&g'Ov Җ،bB"SrZBXigM ĘHdN,xaXdMLi^mu޽z%,i,"dKcNC<_C Um־uex0V} ɍ'~]"h&J=pA^j-3lE+ 4G,@ "Q٥e>d?Y@ZQ Yu'0=í,ځ`1QpOрZe@&S5%iK6IX*T2ڬVYmlZh62I)BKYe0(fhԲͶ-x1[H0O(!PB׹5~[QT}mD#D@v Ti_ʩшrR;E݂Bna)AvS!** s923s=$u{O˗Wu۩_ث5aC?WV%R~{k~{o*lQhcEh,o-]t??RB'rQR@R#R ;Ki6@jKMaOb8\v-FZaH́T3z ϙztX[O ~ѠjvEl2,jQf~}'n!FX'T9i$T?̴Բ8HtZRYtimN'g[M!DX#گg鮶{Zio^5}yJSjOZ9 2 ڔIhtx&BBvDZ0)g3 (VO.d8vtt 2h;n74t *3oU+s{ +cszMma1nzZr0"A}`H QkjԦllԳ+)&ٍ%6UK,Rd ŬeEEY5iRjfR’dHE55&5_5e?A |,#b>mvѵlGiDeҾ0uvZXe2>DjXt~ Kl!!tG>*(zO7v d}OsMw|G,^#Iز1Sd=# $`F#1_ÀÌ`pk3z`՚SA 3p^y)yK8mzr}a) HգXRcrz1v'R>w)1h\@y?!LiOS`3Ԕā"y0؆hZz E>wwUV>Izv^<,sW fcgvt9OWi2#p by:9Y8ab[d\ަt@W]9 b Hp#@tSFjEvmGavL,n,@;?_>Ξ=[uzB *)Q|Dw%re_^q.`x?~ 6 />.g{g1|hU[CүQp0BJR4[MTZdJDȑFtO6ŚcSR@Y6dmHCYjkJ2jMXҖ Jm)YD4cdJ(3#R"~>};Dqr-v~>a 1_h"o :$Bh%DمVZm MiA5AqJ$d d$blnA`)C䊸QDX  HdVؚ+˜1rbmSN!% ) 0~,m6ӖBڂF Fi !`pr\ )8DBNJJK2N23NY1 )JP-!c5H QtZ1 :c Ṫ$cH_L$I)x"`)"C搴Hgg˱|0= 7f |[1KM>>=g>IP5$eIOtmSUvZ>b?šgi2"@D 1c7 `,-ml()I\R(ٛDu"7,}N 3]P$_#$i+]fmeSML}mnI*Q0ԏ8e c8U,G˭΅n4A4e5pH`2c38P:Yp=<^n0WJF|N?ba֚!YFQ@͜u)XTnXƉϩNf0 B=M}\CV R8~ `BFrh:}OveB{Z*&h-*IC%g|Z`- G=9Cͣv1]mh4t1b`jXF/{Wj8ө.4VvJ:rqVFF G-[`rچI:6: cL=`SFhlj#L!nGH&0{^^N8Sɇ)i(gm Q#y46!$2> :dˀf-9 [Z!Ocnr9C'{t-4(me=+e `biR4\!iu)l٧dn % :NH$GFZkwG5oi3vteٚaɷcM7;=4wx4;[Xcc˨)jb/ yЖ0( 0eK:=OƋdjEE C~~}{'9ءfaO-|7]nsb]RɉّT@O뗹iQ!; `կS%Ye1L[J[?'yvy0ҠBHcɄAl8f!x%9JK$ǃ[+4Ejq$S掣TưBII]C !v p&SjLz} ycET?$5aO`xx(=J; +U٦Սnm)ҩ:mW^qwv?FH"K{KN0{c݇B߱R\M8M)1<}#oٗ˻9mO`},;,0:cWК)!AÍoa/f m:BB x|we\Ch6")Bn.uKiZmƍ̇#i?X{d~G؝(UjGK̄}ꊻYX~.=7U(_'$=Ah83| wU0<pڥLcW18NԩáFf3г8ttrnͭٳ.G9t-Pôb d  `C^x a6&s.T"&Db&YU%P CE}-M`P4=3E>l#G%q$sN^.A5 iCz=0)36ShUFblJ5 M{"(U`oU #"eT jn 5;;,wvNvrh.sCj;:]}Xr:*t`W EnvR Bpgk4<(W袂HpBա4$yWfUxʫ`)!e_Ѵu<ޣט ; ?8>m{BAE ^4iK#@ۄ,@" ? _?A ?w,OǙ!$OxG?_|?S/!۔XPMЍ1 c2zER͟X%hZz0Ih0B? RSHa2:Hc@1Bmv4sqPNKH -!fki4aYzt-) 95YYۤXHy%tumlRtDSC[^"b?RĊ1bn%Cn3)1X< ySZPH)}{7GT/j;C!!(dw[8av,`!fݼ; ,C;JE4Vn80푷9i9e~Mm cI 0KoSA1RA!]E5 $WtEK04+do q&F,٨|jZ\$@Z kL״j=Z jtDUԡ5$,>λAbI])JBȒ$Q3M*}w!w(?zб! YrY鳻N)hT|*Y 5C.J}NH: ё +*[PՀ Ab ź ʹ"(h !?XO)pD\~VQǷ81393^j!g$%ǽ^h,cHH"e z ,daQNG!= #I4O4='$pGAbF4'blɥ JFZgw9e#Wen]v\WnYlmY5)u^K e-]3te DT1IJ4EJBdQ)Fhh )BSzc'a` n c^im6FV0B : &tk@&e0I(еaUo۵/'b*I.hE!Ta,U5xyܕWM<Ѣ8)x Q̓!rͳ3*)*VH`Ed@X8{POyB~I!$:X!•Q<\?p$)ۇ hNj_]t h 8@~Ɗqwflцik3 k*a 2F88'"=HGK D/#9,|߇\˜{F12sf:laQ١sYZґСG h)!n6A-vsk&,%9x4 GFcѴt p3-=p[m%y961ë}LwN0Á,oFgM. 4a Il-$8GGWv!f1٫-0F}t 4xwr;,8sg uiHw ж`c[T5p8a ˯OaP0 դ}O,2)<~B%A`$'XRA#_a͎Q8r9ɐS.Sj[ @ g=`7ompYt TA;LCy5+NBhi$%fxxj'8 DZq ҡM "5+(2F\փfzѣ @쪕I!7.8ƺZZ1/> JtA\A\…∘ͤ aJ\@`p;iٱ6w\UqCd⨣ P2Fa ;C q&}K8F[ yO\a*ùJt;MPU5x Pq5Gm7z I$ t?:}㻿Lj;=>x7U$lAZ㵒R]r]4ME6֊ IӎUyY8r^|c8]t"ϤT=(sCz;2DrlICme!;GԴ۸B5S<7'7y-ߑ XX Dy_؂@p {Cο9ɷT*Jh;@*FCXu/W?؉  ҪaB*qT_qÙV/f{qqRu ![m2T'\1fǠQ%j-FK'P}eQ|(qa2X2!Pi.XB0 Xd,IMъ*R1v]r9LԵLϊWhսUE B B#2GYSZˑ*lb$IdRJ d6QNBrC!CĈj68aL 0JqOcL6SČtqmC$. (dt8%8 x!,ј82]m0@)4-`*I-%a;7 pYE,JTGE%#-Ie @ާP336ِVȠp@B^6 E{HY+Fvm-6@ 08T S[a"F"F*ȱX=jOf+yjr!Xn!CAl!ɖ &% gfd@$,`wXRRӕYn+Ieh)*Phgk-*ږS#yuuum8$Y;iˬ]mˢ^ռ&mFRpDOOlA>>L@A{F_ڽH@c9-MtXZ:O&O#V4(< X(-[1)q%"Eck@aU/Xڐ8}rI_˳ܦ1!$+N 9$5hXr~c#x̵D੾@! ``ȝ:  C2 , t7.\83wB$B2VM}YGBfCB  !qiiQ=c/O#YU?Dǧ˭ȥ8Um껾o‘/r+"H6p0!W~8QMj([uLltem6q۽݇)eMt 3Y$Ã0@$ ߠ &.t` ō_b~EEQR!A!!Tg**U82i +Qd+9+mS/ G$<ˆ`WHmR3%Y$̷AڻُM ]54I%ZcEQ?(*g!`?ehQ58eјL,Fq.k$8d"8R8W7P'`CUrwѿXsW[mm8BzFS]*v(\@B&~|ㅆ $CPo$0箧+cQ EN3ݬ⁩O{r`0r1ÐR؏^7:U)+bJ!)9J=2AwCzwr#)ޘk:?1&8 fm:N2uɋ+*cS=CTtcʖH2`!ZbXc(" d5#XK, 12 EbT -ӈ΅2:1X,,%:Ma[k5,[:)LK%1I`Pd!HUy%.lYjfGf1)bQb=Y[]Ju$ٺTLTXTF0ILc 4B4)Ufܫ]J71n D|Wl̞I'@hHH9F!#BX~8x%_?G*'&  ^6f2iejfe3^lo{M}/$33LtDuR[;T ]߸\"Ba֫LEG7*Lbjd#LCIHwhc&[4r0S"F7IQdS D$,C}h@=;~ί^6C9nvlu2aMڈ`]uF~9 }M<‚PHnv+n1ɖ FFF[{`?Hl@FiDa6]0| 2.^D>rLLL2KR ?D* {|Z{/lc(b|Hh@ԐݞHm)Um>lJBOCƎc=2fk1K4w ϱ$OI*ytkKK6g])1̮c+8+z0|.NF [m>^$%K lNhn-HSPIb*zz=9PF-ښP`;P{˰ßY2SnkF&K+&i.3Mѫ4ZFÆ)x&nG #HnmVI1"(Q IFuRīOAxpC#IL96pxCA4--fm S 3?ӼJ!&Qe"8mWV[-5mZiSHCa9"b  `(dq`jP$y'BB ġB "MFYnum*7edTdjD3mQ, /|>S?($Xv)Drf]3tc4o_#F֗*DˬHQ(3"P{WF S U>}hvr*ޑSU1>!Hie}˓i͡)#IMXXDd$l>YCiΏ'I墢 HAAR?ڈ~2GLE"`UD!( ńbw1`RA4MX $R!Eu`'5"bJ s-, IlNa + B44N^eƪ~VW3o[c[ׅCIea`mb~ۺ[|ݘ=woh/[ַ̡ϴ}g=oX`"z[vzϛ&yvI.<$== !0 Ċi, 2*4a,K d܋&Hhj*25jثHK "2BհRIJ--RLYd̳S,R,"dKJ@JC(*oYL5[mOVnD&͉i 21d0źN_v1H?!~Lc1B m SX&HI\HDBwvlcu* ap<]ͼJ(c~څbNAM3X1C'6- =6mi2 _)-Y,2_D0ޏ@㔝aҢԟI_,FP.C?އw Q㧻tugE5#@<;,C"Ch~?o~֖׏<8r<\<9q8R!Ǐ dd$$,;524}}DLJGk߷W#hu(+ڑm) lP߯5rىOIyLkN)saʽ)]{)1[L0ĆӢn1< dYZg0B "c惎_G?t[w| z]vW=zquPSQJF'#0ϏCu#bG_zvSX^ 4_gf<U4i܉ڣxN|sLt4:K\\ bN3A:50Ӗ ӣq MŎm#Ħ4pؙ"uX.\9 641H:tnru5cPBSGh9c8GN+5lw2! 4:7cH@,܃x@8]Cvo,k0C YȾ.M7})<_POGK){'[K95̑LbȪeL*Exlj-h1c%x۸c f 鬲 fPXCrׯ#M5x8@\d؁ e9{^ٶScrРz`Lzty>% $:#&M}[:雕&[uu U7šjw{94h(@ EcoP;SrY;"$ !^woQ_mo]>N2p%ϣ!|&zVotWGA܉!Q脍ԯͨk O>3{F'R[=/|L("FX?'Yx|w8 !H(JwwZL-jƅԲUSI[21fE=`7}<ĔHGP&!%E_x~W~Ta'w">eCdEDBaK )QQ%Q%kRTl[ThͯWV!jhDMM AwnF]ڿ[N]Ҿrĭ24hFRۦ]u3[;aioN˥\es0:m4R]PfEbl^me)bߍyj-_u&C iG?$V*kV*+TV**EAYdTV5j+j HUXUU"PVEZH+"UZUV4iZdVX*+UZUE@Tb"ȬjbTj dT[j[UPUFAUEdUPT  UX+"V `V 5PAm`-j ** kTTUR*X*֊F5-bU`R+dUUTTjT[mUX-TUEjڊ UU"UaѥTUUEdTUUUUbQmAQmEB+-" j-ADT U-@VAUUU[mAXE`JT[XX***EU AVTVVAXj*V U*EH PZAUTT`+jEUPTTHUj lV****+"ڊX bV+!@„Q"` Em-4j";]|mhm֮nV2U_2i4ˉ>VDK:Q]'$*ګbci(NIC%a/i{)bæFZE`:NL0 bZ*d$<ߋbuҁ\}rgs=ТP;.lBAM=Һ+m4z:pDIx'\S<Ӹ !#~5N/F=|clm4 9W- 6$ eh{3m uw $m)&cC{K,Ap<4AMM5q: c ;LX؆g@ȶ%xgbP_^;"7g${i&Ggz'_ç$-N-:J,uXSzR%+bL;{C(5?qMrrbrrrM;Om:!Cѩz"mނÃ(k0Bx*ADz]'q=Uy̕qzϢc,Qɑ6 @)(a#S<= WWIaY-U- \ھ0$0C-t޾J(()J(()J(()J(()J((21c1cf1c361c1c1lc1c3cYjf3Zmm3T~7U2fmfٛfmfML3lͳ63lͳ63lmfٛfmfٛfmSS63lͳ63lͳ6)̶e-lf[2̶ٖSS-lf[2̶ٖe-iJ*S,:_ewN~\Ǽ9z>KvrGi=7p( aJ$2dtktH4*E⦁ $Ȱ^BI2A2fs XfAAVbte1c 3C  J\pqJ& DHHY (. !m]قA Ai8i d!PhA9mPAǼv=QyN=<')k|t_Kp(L] ff{VAƐZyK/wwlw7^?@_UruK4iov]S0p$t|S;`sŧƦ]ȶ{%iZ<8; Ufs++dޅ1JVg#UUE. o9򞩙>N'|N+7*{ƼTתNN+3nEYU7EŚS T]c;vKj9&TՙܘO>DH5U%yޮs\%\> ~U{72OC0,.P$y;ouf|͚c#7lT;V½tс8:wHW~VL۹V+4'-^$oz2ڙ #*㚗}>%;o'(O;78V7i|[Q'gΓRgܽ8EEoT:3b 䘩=JnY( n<яZfW[r\s ;vk[}'koyb(*Ue_ɽxij[_ږ$/x R# a6 1;r֎/ jgKκ\uG?Ezd28ɑgA-RNt8M;LP9"UyBAA2/qnїID͹Lңtܶ.Mii2342 %C/Y`@t ]U bY@Pj5 '*(Le o229<1 ?IBRe"%A^t>FTh1<H,7h-(&:‚])3ieA)5Uf¦JZnNԇ)Ec# f(,PԜ(ID ׾7 \juv-)Sa{T e0m *g ʦVJ7YiJl+}>ߍ6-H&Q(@_ /=_Ӳn2MTNR_mm`R5tLAYzd5bmH"ē*Fj`FkgI귧)}oJJmx?LPVIf]-{_kBҐt5IlAh!M 52F54bis%&M&Hd6S#h4;{',XU tIPEeQC2V4몼uNva߁iNV5habNԐScDQV^(TWNevXV.À8 +Ȉ.H:%"RLCi9 ,qY=یu ߪg` Ay.P|W NeEAAo)E(UG>/I^ʸzz CmLyuy5r11V%1bmm4RU*JT8 Z޿¬ѪsmpyAqj<9&8VK}$'Af>[صraP7 9:,rM**W6|=^2Y6H6^Nx9 ʍWe{E)b GaeV_IE,@VXFmgtmw$S p