pax_global_header00006660000000000000000000000064152105415150014511gustar00rootroot0000000000000052 comment=ed0e5bdc832e636e44d40cf8fb8eb5728d906e1e ufo-kit-tofu-ed0e5bd/000077500000000000000000000000001521054151500146145ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/.gitignore000066400000000000000000000001221521054151500165770ustar00rootroot00000000000000*.pyc build/ dist/ *.egg-info/ install_manifest*.txt .idea/ .vscode/settings.json ufo-kit-tofu-ed0e5bd/.readthedocs.yml000066400000000000000000000013171521054151500177040ustar00rootroot00000000000000# .readthedocs.yml # Read the Docs configuration file # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details # Required version: 2 build: os: ubuntu-20.04 apt_packages: - gobject-introspection - libgirepository1.0-dev tools: python: "3.8" # Build documentation in the docs/ directory with Sphinx sphinx: configuration: docs/source/conf.py # Build documentation with MkDocs #mkdocs: # configuration: mkdocs.yml # Optionally build your docs in additional formats such as PDF # formats: # - pdf # Optionally set the version of Python and requirements required to build your docs python: install: - requirements: docs/requirements.txt - method: pip path: . ufo-kit-tofu-ed0e5bd/LICENSE000066400000000000000000000167431521054151500156340ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. ufo-kit-tofu-ed0e5bd/MANIFEST.in000066400000000000000000000000471521054151500163530ustar00rootroot00000000000000include pkgconfig.py include README.md ufo-kit-tofu-ed0e5bd/README.md000066400000000000000000000110021521054151500160650ustar00rootroot00000000000000## About [![PyPI version](https://badge.fury.io/py/ufo-tofu.png)](http://badge.fury.io/py/ufo-tofu) [![Documentation status](https://readthedocs.org/projects/tofu/badge/?version=latest)](http://tofu.readthedocs.io/en/latest/?badge=latest) This repository contains Python data processing scripts to be used with the UFO framework. At the moment they are targeted at high-performance reconstruction of tomographic data sets. If you use this software for publishing your data, we kindly ask you to cite the article **Faragó, T., Gasilov, S., Emslie, I., Zuber, M., Helfen, L., Vogelgesang, M. & Baumbach, T. (2022). J. Synchrotron Rad. 29, https://doi.org/10.1107/S160057752200282X** If you want to stay updated, subscribe to our [newsletter](mailto:sympa@lists.kit.edu?subject=subscribe%20ufo%20YourFirstName%20YourLastName). Simply leave the body of the e-mail empty and in the subject change ``YourFirstName YourLastName`` accordingly. ## Installation First make sure you have [ufo-core](https://github.com/ufo-kit/ufo-core) and [ufo-filters](https://github.com/ufo-kit/ufo-filters) installed. For that, please follow the [installation instructions](https://ufo-core.readthedocs.io/en/latest/install/index.html). You can either install the prerequisites yourself on [Linux](https://ufo-core.readthedocs.io/en/latest/install/linux.html), or use one of our [Docker containers](https://ufo-core.readthedocs.io/en/latest/install/docker.html). Then, for the newest version run the following in *tofu*'s top directory: pip install . or to install via PyPI: pip install ufo-tofu in a prepared virtualenv or as root for system-wide installation. Note that graphical user interfaces require additional packages. You are strongly advised to install PyQt through your system package manager. You can install the requirements for the different guis as extras: pip install .[gui] # OR pip install ufo-tofu[gui] depending if you are installing from source or PyPI. `tofu flow` and `tofu ez` are supported similarly: pip install .[flow] pip install .[ez] pip install .[interactive,gui,flow,ez,test] # All extras ## Usage ### Flow `tofu flow` is a visual flow programming tool. You can create a flow by using any task from [ufo-filters](https://github.com/ufo-kit/ufo-filters) and execute it. In includes visualization of 2D and 3D results, so you can quickly check the output of your flow, which is useful for finding algorithm parameters. ![flow](https://user-images.githubusercontent.com/2648829/150096902-fdbf1b7e-b34e-4368-98ac-c924cad8a6cd.jpg) ### Reconstruction To do a tomographic reconstruction you simply call $ tofu tomo --sinograms $PATH_TO_SINOGRAMS from the command line. To get get correct results, you may need to append options such as `--axis-pos/-a` and `--angle-step/-a` (which are given in radians!). Input paths are either directories or glob patterns. Output paths are either directories or a format that contains one `%i` [specifier](http://www.pixelbeat.org/programming/gcc/format_specs.html): $ tofu tomo --axis-pos=123.4 --angle-step=0.000123 \ --sinograms="/foo/bar/*.tif" --output="/output/slices-%05i.tif" You can get a help for all options by running $ tofu tomo --help and more verbose output by running with the `-v/--verbose` flag. You can also load reconstruction parameters from a configuration file called `reco.conf`. You may create a template with $ tofu init Note, that options passed via the command line always override configuration parameters! Besides scripted reconstructions, one can also run a standalone GUI for both reconstruction and quick assessment of the reconstructed data via $ tofu gui ![GUI](https://cloud.githubusercontent.com/assets/115270/6442540/db0b55fe-c0f0-11e4-9577-0048fddae8b7.png) ### Performance measurement If you are running at least ufo-core/filters 0.6, you can evaluate the performance of the filtered backprojection (without sinogram transposition!), with $ tofu perf You can customize parameter scans, pretty easily via $ tofu perf --width 256:8192:256 --height 512 which will reconstruct all combinations of width between 256 and 8192 with a step of 256 and a fixed height of 512 pixels. ### Estimating the center of rotation If you do not know the correct center of rotation from your experimental setup, you can estimate it with: $ tofu estimate -i $PATH_TO_SINOGRAMS Currently, a modified algorithm based on the work of [Donath et al.](http://dx.doi.org/10.1364/JOSAA.23.001048) is used to determine the center. ufo-kit-tofu-ed0e5bd/bin/000077500000000000000000000000001521054151500153645ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/bin/tofu000077500000000000000000000203021521054151500162640ustar00rootroot00000000000000#!/usr/bin/env python3 import os import sys import argparse import logging import time import re import gi from tofu import config, __version__ try: gi.require_version('Ufo', '0.0') except ValueError: gi.require_version('Ufo', '1.0') LOG = logging.getLogger('tofu') def init(args): if not os.path.exists(args.config): config.write(args.config) else: raise RuntimeError("{0} already exists".format(args.config)) def run_tomo(args): from tofu import reco reco.tomo(args) def run_lamino(args): from tofu import lamino lamino.lamino(args) def run_genreco(args): from tofu import genreco genreco.genreco(args) def run_flat_correct(args): from tofu import preprocess preprocess.run_flat_correct(args) def run_preprocessing(args): from tofu import preprocess preprocess.run_preprocessing(args) def run_sinos(args): from tofu import preprocess preprocess.run_sinogram_generation(args) def run_ez(args): if args.ezvars: LOG.info(f"Loading ez parameters from {args.ezvars}") from tofu.ez.main import execute_from_params execute_from_params(args) else: from tofu.ez.GUI.ezufo_launcher import main_qt main_qt(args) def get_ipython_shell(config=None): import IPython version = IPython.__version__ shell = None def cmp_versions(v1, v2): """Compare two version numbers and return cmp compatible result""" def normalize(v): return [int(x) for x in re.sub(r'(\.0+)*$', '', v).split(".")] n1 = normalize(v1) n2 = normalize(v2) return (n1 > n2) - (n1 < n2) if cmp_versions(version, '0.11') < 0: from IPython.Shell import IPShellEmbed shell = IPShellEmbed() elif cmp_versions(version, '1.0') < 0: from IPython.frontend.terminal.embed import \ InteractiveShellEmbed shell = InteractiveShellEmbed(config=config, banner1='') else: from IPython.terminal.embed import InteractiveShellEmbed shell = InteractiveShellEmbed(config=config, banner1='') return shell def run_shell(args): from tofu import reco shell = get_ipython_shell() shell() def run_find_large_spots(args): from tofu.find_large_spots import find_large_spots, find_large_spots_median if args.method == 'grow': find_large_spots(args) else: find_large_spots_median(args) def run_inpaint(args): from tofu import inpaint inpaint.run(args) def gui(args): try: from tofu import gui gui.main(args) except ImportError as e: LOG.error(str(e)) def run_flow(args): from tofu.flow.main import main as flow_main flow_main() def estimate(params): from tofu import reco center = reco.estimate_center(params) if params.verbose: out = '>>> Best axis of rotation: {}'.format(center) else: out = center print(out) def perf(args): from tofu import reco def measure(args): exec_times = [] total_times = [] for i in range(args.num_runs): start = time.time() exec_times.append(reco.tomo(args)) total_times.append(time.time() - start) exec_time = sum(exec_times) / len(exec_times) total_time = sum(total_times) / len(total_times) overhead = (total_time / exec_time - 1.0) * 100 input_bandwidth = args.width * args.height * num_projections * 4 / exec_time / 1024. / 1024. output_bandwidth = args.width * args.width * height * 4 / exec_time / 1024. / 1024. slice_bandwidth = args.height / exec_time # Four bytes of our output bandwidth constitute one slice pixel, for each # pixel we have to do roughly n * 6 floating point ops (2 mad, 1 add, 1 # interpolation) flops = output_bandwidth / 4 * 6 * num_projections / 1024 msg = ("width={:<6d} height={:<6d} n_proj={:<6d} " "exec={:.4f}s total={:.4f}s overhead={:.2f}% " "bandwidth_i={:.2f}MB/s bandwidth_o={:.2f}MB/s slices={:.2f}/s " "flops={:.2f}GFLOPs\n") sys.stdout.write(msg.format(args.width, args.height, args.number, exec_time, total_time, overhead, input_bandwidth, output_bandwidth, slice_bandwidth, flops)) sys.stdout.flush() args.projections = None args.sinograms = None args.dry_run = True for width in range(*args.width_range): for height in range(*args.height_range): for num_projections in range(*args.num_projection_range): args.width = width args.height = height args.number = num_projections measure(args) def main(): parser = argparse.ArgumentParser() parser.add_argument('--config', **config.SECTIONS['general']['config']) parser.add_argument('--version', action='version', version='%(prog)s {}'.format(__version__)) sino_params = ('flat-correction', 'sinos') reco_params = ('flat-correction', 'reconstruction') tomo_params = config.TOMO_PARAMS lamino_params = config.LAMINO_PARAMS gui_params = tomo_params + ('gui', ) cmd_parsers = [ ('init', init, (), "Create configuration file"), ('preprocess', run_preprocessing, config.PREPROC_PARAMS, "Run preprocessing"), ('flatcorrect', run_flat_correct, ('flat-correction',), "Run flat field correction"), ('sinos', run_sinos, sino_params, "Generate sinograms from projections"), ('tomo', run_tomo, tomo_params, "Run tomographic reconstruction"), ('lamino', run_lamino, lamino_params, "Run laminographic reconstruction"), ('reco', run_genreco, config.GEN_RECO_PARAMS, "Run general projection-based " "reconstruction for tomographic/" "laminographic cone/parallel beam"), ('gui', gui, tomo_params + ('gui',), "GUI for tomographic reconstruction"), ('flow', run_flow, (), "Visual flow creation"), ('ez', run_ez, ('ez',), "GUI for making ufo-kit data processing pipelines"), ('estimate', estimate, tomo_params + ('estimate',), "Estimate center of rotation"), ('perf', perf, tomo_params + ('perf',), "Check reconstruction performance"), ('interactive', run_shell, tomo_params, "Run interactive mode"), ('find-large-spots', run_find_large_spots, ('find-large-spots',), "Find large spots on images"), ('inpaint', run_inpaint, ('inpaint',), "Inpaint images"), ] if sys.version < '3.7': subparsers = parser.add_subparsers(title="Commands", dest='commands') else: subparsers = parser.add_subparsers(title="Commands", dest='commands', required=True) for cmd, func, sections, text in cmd_parsers: cmd_params = config.Params(sections=sections) cmd_parser = subparsers.add_parser(cmd, help=text, formatter_class=argparse.ArgumentDefaultsHelpFormatter) cmd_parser = cmd_params.add_arguments(cmd_parser) cmd_parser.set_defaults(_func=func) args = config.parse_known_args(parser, subparser=True) log_level = logging.DEBUG if args.verbose else logging.INFO LOG.setLevel(log_level) stream_handler = logging.StreamHandler(sys.stdout) stream_handler.setFormatter(logging.Formatter('%(levelname)s: %(message)s')) LOG.addHandler(stream_handler) if args.log: file_handler = logging.FileHandler(args.log) file_handler.setFormatter(logging.Formatter('[%(asctime)s] %(name)s:%(levelname)s: %(message)s')) LOG.addHandler(file_handler) try: config.log_values(args) args._func(args) except RuntimeError as e: LOG.error(str(e)) sys.exit(1) if __name__ == '__main__': main() # vim: ft=python ufo-kit-tofu-ed0e5bd/docs/000077500000000000000000000000001521054151500155445ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/docs/Makefile000066400000000000000000000011101521054151500171750ustar00rootroot00000000000000# Minimal makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build SOURCEDIR = source BUILDDIR = build # Put it first so that "make" without argument is like "make help". help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) .PHONY: help Makefile # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)ufo-kit-tofu-ed0e5bd/docs/requirements.txt000066400000000000000000000001321521054151500210240ustar00rootroot00000000000000docutils==0.17.1 jinja2==3.1.2 sphinx==5.0.2 sphinx-rtd-theme==1.0.0 sphinxcontrib-bibtex ufo-kit-tofu-ed0e5bd/docs/source/000077500000000000000000000000001521054151500170445ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/docs/source/_static/000077500000000000000000000000001521054151500204725ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/docs/source/_static/css/000077500000000000000000000000001521054151500212625ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/docs/source/_static/css/custom.css000066400000000000000000000001271521054151500233060ustar00rootroot00000000000000@import url("theme.css"); .wy-nav-content { min-width: 50%; max-width: 55%; } ufo-kit-tofu-ed0e5bd/docs/source/api.rst000066400000000000000000000002471521054151500203520ustar00rootroot00000000000000Application Programming Interface ================================= .. toctree:: :maxdepth: 2 api/preprocessing api/inpaint api/genreco api/util ufo-kit-tofu-ed0e5bd/docs/source/api/000077500000000000000000000000001521054151500176155ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/docs/source/api/genreco.rst000066400000000000000000000001211521054151500217630ustar00rootroot000000000000003D Reconstruction ================= .. automodule:: tofu.genreco :members: ufo-kit-tofu-ed0e5bd/docs/source/api/inpaint.rst000066400000000000000000000111471521054151500220150ustar00rootroot00000000000000Inpainting ========== Module for inpainting images, mainly used for the following: * interpolation of holes in the images * seamless cloning * removal of harsh transitions between image borders for cross removal in the power spectrum Power Spectrum Cross Removal ---------------------------- The helper function for the removal of the cross in the power spectrum is :func:`.prepare_border_smoothing`. For details see :cite:`moisan2011periodic`. Our implementation, which uses the 2-step forward/backward gradient to get the Laplacian in :func:`.create_inpaint_pipeline` makes the "v" field slightly different than in the paper (defined in :cite:`moisan2011periodic` below eq. 11). The right/bottom border is equal to "v" from the paper but the left/top border are True Laplacian values. Nevertheless, the other side does get inside, so the filtering result is very similar. How is it similar and different:: g_forw( 0) = f(1) - f( 0) g_forw(-1) = f(0) - f(-1) # This is different from the paper g_back( 0) = g_forw( 0) - g_forw(-1) = -2f(0) + f(1) + f(-1) # After the forward pass, the gradient field is set to zeros everywhere except the borders. # This is equivalent to the paper g_back(-1) = g_forw(-1) - g_forw(-2) = g_forw(-1) - 0 = f(0) - f(-1) On the top of that, we use the fact that: .. math:: :nowrap: \begin{align} g(x, y) & = f(x, y) - \mathcal{F}^{-1} \left\{ \frac{\mathcal{F} \left[ \frac{\partial}{\partial x} \left( \left( \frac{\partial}{\partial x} f(x, y) \right) m(x, y) \right) + \frac{\partial}{\partial y} \left( \left( \frac{\partial}{\partial y} f(x, y) \right) m(x, y) \right) \right]} {L(u, v)} \right\} \\ & = \mathcal{F}^{-1} \left\{ \frac{\mathcal{F} \left[ \frac{\partial}{\partial x} \left( \left( \frac{\partial}{\partial x} f(x, y) \right) \left( 1 - m(x, y) \right) \right) + \frac{\partial}{\partial y} \left( \left( \frac{\partial}{\partial y} f(x, y) \right) \left( 1 - m(x, y) \right) \right) \right]} {L(u, v)} \right\} \\ & = \mathcal{F}^{-1} \left\{ \frac{\mathcal{F} \left[ \frac{\partial}{\partial x} \left( \frac{\partial}{\partial x} f(x, y) \right) + \frac{\partial}{\partial y} \left( \frac{\partial}{\partial y} f(x, y) \right) \right]} {L(u, v)} - \frac{\mathcal{F} \left[ \frac{\partial}{\partial x} \left( \left( \frac{\partial}{\partial x} f(x, y) \right) m(x, y) \right) + \frac{\partial}{\partial y} \left( \left( \frac{\partial}{\partial y} f(x, y) \right) m(x, y) \right) \right]} {L(u, v)} \right\} \\ & = \mathcal{F}^{-1} \left\{ \mathcal{F} \left[ f(x, y) \right] - \frac{\mathcal{F} \left[ \frac{\partial}{\partial x} \left( \left( \frac{\partial}{\partial x} f(x, y) \right) m(x, y) \right) + \frac{\partial}{\partial y} \left( \left( \frac{\partial}{\partial y} f(x, y) \right) m(x, y) \right) \right]} {L(u, v)} \right\} \end{align} to remove the need of the subtraction from the original image, thus, we implement Eq. (2) instead of Eq. (1). :math:`\mathcal{F}` is the Fourier transform, :math:`m(x, y)` is the binary mask which specifies which pixels in the gradient will be zeroed, :math:`L(u, v)` is the Laplace operator in Fourier space. Inpaint Module -------------- .. automodule:: tofu.inpaint :members: ufo-kit-tofu-ed0e5bd/docs/source/api/preprocessing.rst000066400000000000000000000001151521054151500232270ustar00rootroot00000000000000Pre-processing ============== .. automodule:: tofu.preprocess :members: ufo-kit-tofu-ed0e5bd/docs/source/api/util.rst000066400000000000000000000000751521054151500213260ustar00rootroot00000000000000Utilities ========= .. automodule:: tofu.util :members: ufo-kit-tofu-ed0e5bd/docs/source/conf.py000066400000000000000000000136011521054151500203440ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # Configuration file for the Sphinx documentation builder. # # This file does only contain a selection of the most common options. For a # full list see the documentation: # http://www.sphinx-doc.org/en/master/config # -- Path setup -------------------------------------------------------------- # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # import os import sys sys.path.insert(0, os.path.abspath(os.path.join('..', '..'))) # -- Project information ----------------------------------------------------- project = 'Tofu' copyright = '2020, Tomas Farago' author = 'Tomas Farago' # The short X.Y version version = '' # The full version, including alpha/beta/rc tags release = '' # -- General configuration --------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. # # needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ 'sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', 'sphinx.ext.coverage', 'sphinx.ext.imgmath', 'sphinx.ext.ifconfig', 'sphinx.ext.viewcode', 'sphinx.ext.githubpages', 'sphinxcontrib.bibtex', ] autodoc_mock_imports = ['gi'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] source_suffix = '.rst' # The master toctree document. master_doc = 'index' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. # language = None # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. exclude_patterns = [] # The name of the Pygments (syntax highlighting) style to use. pygments_style = None # -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # html_theme = 'sphinx_rtd_theme' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # # html_theme_options = {} # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # Custom sidebar templates, must be a dictionary that maps document names # to template names. # # The default sidebars (for documents that don't match any pattern) are # defined by theme itself. Builtin themes are using these templates by # default: ``['localtoc.html', 'relations.html', 'sourcelink.html', # 'searchbox.html']``. # # html_sidebars = {} html_css_files = [ 'css/custom.css' ] html_style = 'css/custom.css' # -- Options for HTMLHelp output --------------------------------------------- # Output file base name for HTML help builder. htmlhelp_basename = 'Tofudoc' # -- Options for LaTeX output ------------------------------------------------ latex_elements = { # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', # Additional stuff for the LaTeX preamble. # # 'preamble': '', # Latex figure (float) alignment # # 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ (master_doc, 'Tofu.tex', 'Tofu Documentation', 'Tomas Farago', 'manual'), ] # -- Options for manual page output ------------------------------------------ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ (master_doc, 'tofu', 'Tofu Documentation', [author], 1) ] # -- Options for Texinfo output ---------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ (master_doc, 'Tofu', 'Tofu Documentation', author, 'Tofu', 'One line description of project.', 'Miscellaneous'), ] # -- Options for Epub output ------------------------------------------------- # Bibliographic Dublin Core info. epub_title = project # The unique identifier of the text. This can be a ISBN number # or the project homepage. # # epub_identifier = '' # A unique identification for the text. # # epub_uid = '' # A list of files that should not be packed into the epub file. epub_exclude_files = ['search.html'] # -- Extension configuration ------------------------------------------------- # -- Options for intersphinx extension --------------------------------------- # Example configuration for intersphinx: refer to the Python standard library. intersphinx_mapping = {'https://docs.python.org/': None} # -- Options for todo extension ---------------------------------------------- # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = True bibtex_bibfiles = ['refs.bib'] bibtex_reference_style = 'author_year' ufo-kit-tofu-ed0e5bd/docs/source/figs/000077500000000000000000000000001521054151500177745ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/docs/source/figs/harmonization-images.jpg000066400000000000000000002502071521054151500246310ustar00rootroot00000000000000ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ ÿÄ ÿĵ}!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?÷ú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+žñHÊ[s�¿ý+™Uc! <ÕyóŒ>•ÎÃ÷·H=@~?‡ö`~öæFíÀÅ2_‡°7]°ÏM³çøv¿ê®#séTgð^­"ãý“Y³hš„ ‰-eÿf‹XePÀ©÷®²îhâºÊJ©Uê+`ÙÃ3ª²‚Ì£zZžÂÒêÂ&žÒwY « nXx•±¶ö7�¼¼Ö¤ºÝ³Å"mf]‡k¯=»úUû(¤ŠÆNG”Ÿ)ú I™I|��·½:Ý~rGoCRÆŒ G_óýjâŽ;c§¢cçüŠç¶TºÔã@(ª3·“š·qªèñéégºyÂŒ3­ßùÖÞÙ,mµ ±’Ç=+Jºšç÷۰žYùB g•TÓîE{wbÒ*e‰=ÈÍS±˜õ [îmeö<Ö4^eÞ«ó$²P{œð+J}Zàk�_Ê|Ùc�denCÿνÏN¼ŽöÎ+ˆ@ȹÓŽ•hõÏ¿ÿ^œY”ü ×¥w´QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW;â©1hXà|ÿÒ¹Ö‘äݱv¯Nj¤ªB³Îrzb¡—[´´Ü obÜ*V-î§{~|²D1“�«ÔÕ(!L»{©&£{ˆíЗ#¶r+&ÿ]72�"/ÂñÔ³§xOX×ý kSÉ/Ôþ¹«è:^�áÙ#SæÜ3 %�$3ÇÒ£±¶·‚Ö5ŽÎßóíùUÂBäŒ`”¾¼ô8¦ç“Çoóýi¼�qÞ”g#'½8ÿ])8ý(ùHÁ½�cë–ößf˜zòÏùÖÞ£àÝ;]·K‹)¼™àäï\�î™­hlÄ/$kÀ‘9U‹ z/$Âñ•gëÏAŠÔˆ¤Ž ¯çHaÄä¡(äuSZö:õͲ…¹Q,@½zŠÖMFÖôŠr¸õ*ÌNY cך´&)‘"ó×#¥E,÷p¿˜‘¬ÖäÞ*å¥ÌW›„eƒÇ�ÊÃf¼÷Ç =åÖ¬w&Â`;@?úq6ìvŽ�jüL>Qïš²Òù0É1çb’=Ïÿ®›$>F‰õ ÍË´˜ò)±G,ùHЖ9è:ñÿê«Ká õ&Ä®aƒ~I?y»WEc¡i"(_»Œ±©å¹º¹VXÈŒ¾ýOÐV±oago+ÝÌe™ã(7œœà�XÚv¢—”ù[ëZ@“�óéK¼í4€wŠ~TÿZ‘°G 3ü¨Ô ·´æbG=é®ûW>õ•s©[›Ø œæ5pïßåÍu–V‘ûF�uåîmØS•çbµRñ†a½€mé¼ ©¬ÍOÁúVª­,*!˜ÿ}?*Æ>¼°Â2—À:wÁÿëÕ}ÌŽäTÐ�ƒü�wðÈ’DdóÏl‾k,ŒHAœ/¯¹©”óü©&m.ñˆ›ŸN?ýUÂÜÜ9´�ãFò‚.nÿ9üê„W%¬L A‡#ôüj5xTJ× Îç sÀïZS\Úâ ±m n úÐׇnP¢¤zóÚ ’vÚCN¬T�Bï+@LpFxõ5Nye›I°r2k³ðލfˆÙÊA’”cÔ­w0±$0<¿�J!C5¼‡÷bLpyÇQüéú” ý–#A÷…ðWˆêÑ}šòå_1‡äk"7)ƒÔŠˆrãÔž•r8þÕ¨ÛB§Iã@}2À^ÃáëÙ¥ñV¬Le¤“%» çÿ®k¦·óšæñFÅ>`ÜÝOÝ_éSH°+~ñÉcÎI¯H¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢¼÷â¤>e�ƒŒ’¢\ õûŸá\ŽŠÂ;xÓ;An?Ïù[TºÈïÀ Ä ÷ªku-ë‚9=GZÕÓ¼)wq?ÚoÜDÝAÉ®¦ltÕØŠôÏV4ó,Ò‘|¨ù9<“Q—¶µF–GLŽz×7ªx©ŒR-‚t÷�ßè+…ÔoÞဖSç“–cÏ5—©%­÷˜TŸœõÒGâë|Œ®~QÅFþ.ˆöß.O=ÿÎ)‡Åò6¤c'¹è*#⹚<�,>O?•;þÉC ¢>œç×&¤_¶øÓ‘ÎJ–Cå®áódŒg¶*+¿C$ÇÌOËXV÷rLdg“ýX×E¥j÷Æ6´rv>•ÞiÞ&‚á–+¥ò¥= û­[S~øŸË'ÛѪQrñçÇ�::ýj¥Þ•cªF̘V<îOë\­Ï‡µ.Wx—϶bNWªþHê&ò¤ @‡JÜÒ¦VSžFÌŒUc3K K‰0Ãüþ�Zˆ_é× $3lÊç×ü méÚý½´Æ[âPÎnê8àT(,dÕu8么ÚêVòÅæt°ã?�y%¾å� ÷Ð`ýEhÙ«*e½jò&g'qvÿ_ð©ÝÙf3*’ÔfÖÓ1)ÿÇEvZ;oÒ­ÆyBGêkJGTa‘Ð�èx¯<½�­5+ˆŸ1ÛÊ ±7^ ýã\�„â Zðd„�ÇS��5½¸ƒQº’|-¨“,ý‹a¶ãó­�gíæ94ü¬±‘#Åž¤…¼ix‰å›t÷ã¥Uojòµ‚û*ÕgÖõYQ’K‰ °;†8" 7·†ÙmÒFò¶�Àw=j» ³ ß´õ ¦�,—7Œ€AëW¬ š8ä†dvT8LT¯$pÜF‹$HÇSRÏF°)Î[§Jʵ¼”Þ¬!G$íöàÒ�Áʾ2;{UÝ2ñ´ýB•þÃ{ƒÖ½†Ò4h÷yƒkFZ½ h.¥ä¤�Ãÿ­Y”‘Üê0=½º›¾ìõ�y¹r'»$sÎXúž¿Ö±Žy¦jÌ1ùQ´’&C((O×­jx>®õƒur÷D¼Ì1ÙGAT^BxAMUÏZqsÓÚ˜[Óµ5Ži‡¯­(öüªE8S�Š~Þ0ziÜ*8•ºV�¦ Ö§k¨–Õo¥t:mâœ=£ä¡?0Ö·þ  ¦W+.F×^sþ*Ö²º¹šÜ7˜Pá[¹äVäR´ˆNð§êÜR÷+àòy÷ÿõT¾`;ˆî3C‘"a²ôõ�yáË{™ZXÉlýÞÕÇë¾Õ#”J‰æÆ¼e+м¶ž ÿ{/c‘S[é&îþÞ)P¥«24¤öNÿÈ×S« µmFâú4@ª!…<ƒÀ?©¬+;Kßí§¼žÒLltÉ ŒÒ¤³³½‚xÙ Fc~ „t9Ï�hMsªO¨Û¤w)¶anqðcéϹÆk^ÇûBDl£vÈÜF3Ð~5‰ã=JöÂk[i$”‡Mîc©ÀÇåIð÷PMCXºÓ/wH­™x8á³ùƒùÑ“èºóèÒ|Ñ\ˆã‹Û+ù‚EXñLÉqâ»xò`£¿ñS.5åk‰<ûŒa¶€Ã �¯¥W³·¶]^ÓQ‚x|¸å8gÒªxŠßûRiÚa ò¾É&­µö ,8Ô-<Â6˜×ŒúóK¦ÎÈßé:Ú@AÀ ƒKm«Èº„²\k¸P¥QÔd�ëŸx”ê‚h¢pë•çp¬­_Ó5»Øç˜?šp¬ÀpzY1ê 5µ¸a)$ƒ‚j¢ë.dÐG+çï·Z²ºåÊ �*¯ÝÂô¨dÔn¥ë1Yäg ³Aï]gƒü¼ŽÊ T¶Z=šÝÌæ2çÌeËÃúVÌqGႼ÷âfœ÷Zß b‹Ã�ž„Ÿê+—ø}ˆüU5ËÌ!ZK†#9$ÝúV§Š—ûR×íöë7›(iÛåÏ.lX¯|÷Z—šØY K�£"ššYÖ\á°~œV%Ôo¶Ö`=�Qg“?}¿:C#d|Íùѽ�sùÐX÷&ŒŸZpljͼ¥5�¹ûÕir.I÷«*~lþ´ñùRíéõ©íåk{ˆ§\“Àÿ>•Ö´HAq!Û&{Œ¿fþU×—„%pÝÎz*æ5Û9"¼¹ ‡!‰­ø¼/x ³[XM«æHØî}ÿùU¸| 4¨~Õ"F ÉÇQ]N‰á*ÚÌoC7ÌH ÓÒº8á‚ßjà F3�”bœïòdîãÒ«‘336Bää^‘EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEqdhåÓ8KŸür¹ÉùÊ£ XdZ©t²K| õ==¿Ï½sZÝì±Z¨Y瞦¹+‰ƒð2G©ª2�©€Ù9Æ)‘FÄnn3ÐTàéŠcž<ÔY㌹¦œ“Jn´×-NôåË Ä~c=)F}iÝ;ñJ‘S+zÔ¬�¹¨Z6ÝÕOz°›Nì�3Z6×f<HaÓÐ×mcpóÚÄ$•G’{Vå¾ð6±Æ}j]ø 7qÐÿŸ¥+Ȫ§o=ê¬:Å͸+¸ÏCW¿¨¾j2�{{äTRêvïªî¶9ÀÅrºåÜr¤¸>ÕÐøVmCHû;«4Öí°�8ÛØÿŸJ�ƑΚ¶‘&6¡•×uuaIóT÷ɬè¯mP»›ÈÔ´²tç�ÍþÙ¼EgÔ·Y.[8' �fêúÕÅÎ�,¢B¬铌\‡"êˆV"òüÛ°3Æ+§žÞwµ¹¶™•¤]ÉßÄê‘%�ìrCÑN¤‚f.À ïJlcÔídxœŒí#ÛVºMÊ’dý*¦]Ïü©FŸuÿ<ò¥mÙà[ÉùT«£ß·Ki?*™<=¨¹âݱïI�tóF̸VQ&}v3Ký—ö�\ZÇ ù˜üƺ¼Ä÷�«±øBÜ}ù¿JжðÅŠºþëyÏsšÊ´Ðu¨Ý¬6%â$€Xp'¥tv…;ý‹O¼ŒBÒwÁèª_ÔWHž°µ•&˪òIô®3ÆA«v½NÑÓ×h¯O²¸Iì"t9ŽEs—“Ï!UGÁ2m>ÓZºuíºÚ¢,™F9 f¤›VµV%ƒ| =êœúú$K Ðc&³ŸX¼w-摟JöÚ(¢Š(¢Š+Ÿÿ„ÛþyƒûC÷�7íò$éë÷jGñŽƒÆ­ƒ"î_Ü¿#þù÷¤>2пï�õ2ñ4ƒÆ~e_ð錟üM#ø×ÃÑÆÒ>¡…A–>Lœã´§Æžs¨}“ÿ‰ øÓÃá¶›þ댟üMÆZt¿ÿÈ2ñ5 ñ÷†”eµɶ—ÿ‰¦·Ä ¢@í©�³®øÿÑåù†Hþï¨?•Z“Æ:6©s& «ƒ*Æ7çðÆjh-µ|@ðº¹Cª|Àd�"BG8þï½Mÿ ¯‡¿è!ÿ�dÿâhÿ„ÓÃÿôÿÈ2ñ4Âiáÿúä?øš_øLü?ÿAüƒ'ÿH|káà :‡þ˜ÉÿÄÔ°x³D¹“ˆ÷sã8òœJ™¼E¥ Ë]cþÙ¿øUix±¼yqžŸÃR?Œ4˜Âר�(b<—èz 5¼g /[ÿüƒ'ÿKÿ Ž€åÿÿ ÉÿÄÓ_Æž�C6¡€X(ýÌ�OOá§Âe n öþHÈýÌŸüM'ü&zí¿oçþ¸ÉÿÄÒÿÂe l/öÿ” ÿ©“§ýóUäñ÷†bVgÔY@äæÚ_þ&–Oøj)V'Ô°ì¡Àû<§ €Aû¾„U‹¯h6H¯q¨,a”0ýÛ’Aï€*Ø×tÖ‹œ‚c…Eqâ]"Ö#,×{PwòÜÿ!TÇÞO½©ãþØKÿÄÔQüGðœ²ï>F¯¿ѦÍ)&øŸàûwÛ.®Tÿ׬Çÿd©ãø…áia¦¦J�~Ï(ãþù«¾6ðõä’¥¾¡½â¸H0qü>ÔããIø‚:þæOþ&˜Þ6ðò ¨`¾qû‰;uþC㟃¨ÿä ?øšOøN¼7ÿAü�'ÿKÿ LJ0ö�_úa'ÿO3ðù‡õÆOþ&š|máàqý¡ÿ�dÿâiÃÆž=/ÿò ŸüM/ü&Züÿûó'ÿHi6.©–ÈRðOüÚ¦ÿ„ÛÃÇþbùOþ&—þoÐCÿ ÉÿÄÑÿ ·‡�üÄ?ò ŸüMðšxþ‚ùOþ&�øÛÃî¡íþ¦Oþ&§·ñV‹tXC{¸¨ÉýÓ�æ*Gñ&“Ë]`×'ÿ ©qãÚÂÓM¨m�y'È�ãòZUñ·‡š1 Ô2¤d&Oþ&µìo­õ+8îí$ó “;iÁÇCÏQV(¢Š(¢Š(¢ŠóÏŠ“G¡2ÿì•ÃÙÞ­Îü¸Ç#�LÓ%Ömm Ç#Êx¹mWÄS]3,D¬uÏÝÞ<¿#±f÷5NYö:晀CÈ ' ô©]²séQ–8ɨٲqIîI£†³oÌ·%P�™È\�êzÕ½-n4K‰¢µ¹‘A�+zðj_]ÝO�$÷/&&O¸©î§cy½ä“î Çžiº#£$„ãvöǯSZ–¶—$0‘–È-ÀÅ&£ V¶¬d”É)8 Ò°[W])K[Á.Ãkå«÷_¹¹.òHw¸¬;»é&]¬Ù ¨Ì‡ìŠìù%Ší=xÇøÖǃ.Ôø¦ÒÒRW›­Îzn#)ÿ�?ï¥Ò,ÕÈ’SŸ¼‡§á@ÑmÊLG e§ÿa@YPþ0Ð_ë#íR.…&ìo_ʦ�Ãï¼ Æq÷kßÂb÷K³œÜ2”€ uÎåTâÐmˆ#™7 Îp>ƒÿ¯]|Zxsô&®&�n£æ@MXŽÆ‡Ê wÍM¶$ã*§ùúV4OÞ-º|-­Ò{Ç?ÐÖÜÿ<c®Â9úW‹x¯ÍþÚ¹ �ÙÁü…zG‡/“þ ]Æï³GÁwÛþ4E÷úÿ:l¶á¬nô�Ô(ÿ{?àj„áE–•)^#ŠAùJßãWo£kÝOvUD€¡ÍuZ"yz%¤Ý‹–Â¥Ô�5Œ‹ê¯ÇàkÍæRÄŒûÖ4¤As%ú ñÄ68ü�åZ šÕ$^�µ‡â+7Wɶ“çšÉÐÎ5!ï‘]KÛÅ8 *­K˜-¢ �‘ Ë{UÍ+O¸iã¿‚µ1Ü0ëôȤ%’âF2gpèsÔd�ý”Ò¨'í »>X�¹÷éTÎC°ÏFaúšxåO¤o_,çæ�Z½3l»“ Xà r*·Ašx\àt#Šr�€ã n¸ÁþUQlMŒä¨L²ç©Çù5 âÒÖg–Y 0´aW?Þ9þB¯4Vû™|°sÀÅ8D›”U_¥aÚË ÛYΑíg‰»ô'­Š?Þ8EÜW÷âŸïKšZZoÞp;OÖµ4.5ÿ\Ïô­™þîs\íú–·œÕHÅfèÑ´Z\¸Ã ƒùרü4ÿ‘bOúúýk±¢Š(¢Š(¢Š(ªØÎƒ¨�úu—ÿA5áÓâ^Úlá.�ÂÇý¡ÊÿZ·rÃûNï%¿òÅ:AˆÃcî�Ä?Ó4‘Œ!Sü¯ø~˜¨'MB³òĦgþKýMIæWr0HoóŠwI¤ö\þ‚Ÿùî�åP^Zƒ¦,�Éó1ôê*­îÔ¹·¸)œÙ¾P…[Öíšõm%lŒÚ¦é]½¨Í¬=þEþB¨kñƒ¥Éì™ýEyüËœ’zrkÌ/%î7A)òóèG_çZ­÷Pã¡5‰­`ú5WðçÈ=Vº7´†vD�Z’W†3…Aò�¯jÔÒôë«YžñÃ)��yñæ­§™p߇Ï$t9ƒùPº1†FÎDsìÉÇÊsý+6I?xNsFr:w© *÷« €èÄ{gÿ­S«vVèI2¨eéRÜzã×4 •\ɨ§MѸoý˜¨Fœ‚æG.LxÀPz¯pë ¶ÿh‘Ø=×� ôŸ™«žU»eLcÖ’å[LJ&8¯›lñ1±•*Ü[îúJ¸cE˪¨%Êx(ö¥—œÒ¹óŸ” ÚÐ8{Ÿ÷Gõ­®ûçŠåµ¨šm2â5ä°À¦[‚4ÈÃp|‘Ÿ®+×|ÿ"v�þëÿèm]QEQEQ^]ñŽ!tcëçÿí:ñ¹oç¶‘¼¦8nj…ÌîO›$™cÉNk–aŽ˜éUÙË`޾¦˜ ’jRYŽI ·½FìM&NqÍ.8Åuô§| ‚9nا¢bfÆæëK2•�:Œƒ÷…G…#å¤#'ŸÂŒf—'4fž­�OÜqÖ‚Ì«‚x¨ÆAÈ5 �¨Àà÷«Irvc·LÕÛ{¹­—|Rg>•~ÖòG�Ï#dž+R+ Gš›ÌÈ£9ª÷lék+"å±Z¶ºdwÅ;Dò cßæäÕOÙ.�¤Y«Jd“ÎÎãØVÃiº\Éo"É,¿Å÷¸ Š‹Oû´³bT’Bû\òF éU¯5O,—i™Øw'µsº®°ñH >Â@ïÈ®NçUÉ$ÄŸ¼MS[‰œò=i óœóOÝ›<ç‘!¥EÌÖ³EsÛ,,±Ÿö”ä*÷›É#»[}FØ‘o{ÌŸFþµWf0¢Fõ$sWÖî2 ýŸœv5i.A-¹Ïf¦YØ�E¹ãÞ¦ŠY Š<œsŽZ³´‡•´{d§Ý+ÉÿhŠåïoE�ˆ­¢ù~m¸>ý w æ¤HÏ«Ï{k<Û±Ç$×üâ³nÿýzÙYU�Áµ8OÀÒšÓ{÷¨šã¨ªïxkéº(¢Š(¢Š+Á.-~ÕaqnzÊ­�cÔ~¸ª¯xgÐloù’eþÉÎëZyÁÆ:�F×_bSŸÌŸz¬­çê/DÄ~œ¹üð*ÒŒ³‘п�ÿëÒ9ÄÉØíÿXÇîÓ·ËRÉÿ «°xù�þ¤ZͲ2\YXAöv‘ÔÈqÀùÉÌWOm¦3ØÚC2•(\•Çbk^Ú! K�ª£ŒýsM½¶aØŸæ+Ë®ä1 ß—å\¥ôî±È£î¿ZÛÓ$/¦DdAùSu%Í´ŸîšÎðþ�s-ßÚm·NZFá@Áï[—ž�k3G,®Y8^µ›?‰ìÕ]#µó7©S¾«¯‹î 1ý‘B!…È©µ_K»IvA0û }Öî¿�¬‰5íI÷u Ý×»½)ÚM&ÒG$³B¤Ÿ¨­DQ´S€�]7¹Áÿ?犷(B}pABœtÿ&Ÿ¸cÔnçëPÉsl©�ÎN6¯$ÿ…1<Ï$r •ÉïQßYÅ1¸†lÈ…ãÎ{�«SÀÈý;Sw¶ARX•m ª«‚LÅJŒqŒPT~ t£·Ö•›c–=)T®}kKDÿ�‡|³ý+fã•>•‡r9o¯ùþµJÜ~í;ä~uèß ?äVúùýk±¢Š(¢Š(¢Š(ª:×ü€uúö“ÿA5áÚ”ÚC˜ù– L‡Ýyþ@Ô—3¤²i7IÊL ƒõs†OB?­E>bçø—>£�óôª¶gí/5Àé4‡î/ ùóVÐnRã1#ùJdŸ~_÷ ©ÀçúS5� �–�£Ô•ÿëT$—¢ÑÙ¤+hŠÇ WNšg˜–Âps Œ£ÔsZ°§–ЏÆÀ=‡G[\é²�ö¼ÒþC?¸"¹Kù_Ê1uRw~5ÕBþl OvÏéYºÂfÕ�¸¤ðÞ›p®¥_*Ü‚7¿Î:zÖŒš¾› ò9eÈÀë>ãĶ�–aÕ±’çÐÑŒîá¸Y#A°pÉŸ¼½Å>ÿ\Ô!pÖ÷ìò€Ñ�;vÿ ­©}3|÷Tœ‘žµ­ ¬Ãæ9­/\ÔИÖuÈù°0qïV\5°9ÜOêiêÀ9ýÃêhÝÛ5^[˜ÆcOžB¤ínM=VCµ7�œdŽ¿Z‚âÖ&EßåÝ;¡>¡�5`¶)�óXséÿêªÒF<»bŠDå 9©HùÒœ@ü(Å;ùPÇ¢�¼zûS‚…0+gAÿYpÙÌÖ…È8¬+±ˆÛ¦xªÅqjÜr#?ʽ_Á_ò'éßî·þ†Õ¿EQEQEW’|n�¤  ?9?õμnïËHŽ$ÜãÓ¥c¼ÄŒHã51bIëBä·|T› ê) `S 9¦“Ú”ûRîȧ…ɤ$³@séV`€F c—=ý)dâ'ü)øÌ™¨&·!·Åø­D¬äŠVæ�·nô˜ãÒ”6E81è*AóphÚGjŒäS•Êð*ÄSeÔs[1GÆrqÈj°b¸�AÆå=Ç5,W˜áêÊÜ©#�4†KY{ü§ùUË{é-íà”`Œþ5CÅW_m´´S!ÚŲ�WÓ|GäZDZ-íJ]jmåÐá’BGК­s¨´‘î9÷°õ ¦º”³¸bOZ¨(çœR4£ò¦e‰©£èΧûÿÒ› °`vÍ{O„¤‚ãÂòiÐÏçÿfNð«ç’„îSúŸÊŸ&CZ»øŒgµ¡«�rX7�G÷æEpOÔÔg]Ó¢ÚÍ:Ÿ› ïÍ`Ùxª ]18·y9'þš1ÿ â|Uu,ÓÃz€«±f\v9ÍiZxŽk«wÎìÛT‹ÔRß'ñ0üMP›V�:Tpj2OyH .à~ç5ŸyxË4ˆ 9À?ZÐðÞµ,z…½‹ÝK2íÏbj_·üO®¸þB™nþMË«+ ß�Zk­§ƒH/ˆà¶'ÛÔ“Ò«IzÒ”(÷r ÁHϽ}cEQEQEx`8lÿwšÅ•|¨5»Àn¢Ìpqô8üëaIIžCTWS x§•ˆcÞ>«ÿë_H�¡Óá2ÿ¬uÜßSÉþµr.b»e¿>­E>3Ÿúf­L �¶+´Ìr1ÓÌnY“ûÑ·òÿD ç¶GåJ8\väRãÓ½#ŸJjdüçðö'SZš·þà ؟îä�°/†"˜ÿ°ßÈÖF‡#I¦Äò[ssôc^¥ðØcÃÿ_ ñծŠ(¢Š(¢Š(¢¨ë?òÔ?ëÚOý×�&3ó Ž„{V”mßïi÷áGû„î¦Gá[Øù«?U™­ôû–C‰:Gõaбm³³XÏTO˦DÛ¯p0j)Fdo}¿Ò¬äœ§Ú²ÓT7V—¬Ëˆá¸Œ¦?Ýlÿ*ë<+0ŸÃvsc©ÏàÆ¶F2vûpë�¥PÕÆí6^?�ˆÿ¾My¥è †a‘ƒÅrwêK±Ç5×ÙFgÒmHM¡Wævà§úÔ7W6PecAs'\Ÿº¿ãU…ÝÅÍõ±¸”•YÚ8Uæ¹Û¨ešå™U›q'�K‰.6Û¶­]‡ÃÎpÁP{šÒ�A”Z­¬ò�¡òŒÝÏQV!ðõ¼Qù‚vlg·qJ±ùo�Ö­)>ÿJ‘e( uÚ* 6öimCN`Äõùˆþ†¯ùÊ$ä ‘]�N=Í<(ÝóxÏùý)vªgh*ÜïV Á¸…F9u­Vf.Àœd»“ø±ÿq#úSH;�­Fài—°*ߨ§í8Áäô¡OÓÒí#¥å=*�Ç©ëþð2kkABs×*¿Î´.>éÿ?çÿ­\Ö±”ÓnJœ0N?1U­¾��Ék|“ÿ¯^ðhÇ„ìG ý «vŠ(¢Š(¢Š(¯øó!Œx|‡íÿÈUâ³:°<óT 1| ~ÕM; p)†Zo™Í­FG?/4ýüv¦–©s㨫Q¨Œa@ç©©AçÚšã(AêM<Aö¤Ý×ô¨%Œ?ÌÛ½WbWƒH½)bF "žO4ýøéJ$©Lý)ß+u¦˜Á/ZXP†çŒVŒrg8«�^Ë'™«Ëy £÷Щ'¸â¥Í»cËàÔ«ƒ(åS[§Ú4àŠÀ@÷¬ uµ–�™voÅ�sÏsåå‡QÎjî§/ÙfPxV�[óPk-®ÆÓÉÇ¥@f¥0¹=i™çàÄ […·BÄŽŒ*7É9Ú\ޏ'šî4écЦ›zò$^B¸H‡ü³�€)šnƒªJ©mm=\Œ(®÷Eð=•ŽÙo1<ܺ+’Š(Yä!ß88÷©À ~”�Ô}j’\Kß1A6îë�ÜERþÑi´–ýÚ‰]’,{·zè,•£±·Œ°%PEZ R1ù1œòþu«sv1À¹é”\~¢¥…6É&Ð<°B¨€sVÖ"œgÿÕNhÜ`�Ðþ”…Ê=ÇøR¤LJg¡ ~´Û’âB¿tÎÝ~¤QŒŽ�¨(xÅ25ÿKE=b¡€Ÿ)» fž-õ4gŒŽ})Ü·k D!Ÿƒ¯j†ãP´³§¸Dö'šåuÏZ}�ã¶C!årzrÿ ä,..õ{¤fÜg|‡€88çò©¢Ó,Qòãíà�G~ò°4Ÿ»^/U�+Æ«(BR.îã»k_Øi:]ÌÒ�>áas¹ºŽÂ¹KxbòU‚(8ÎqV@RªæE_ZÎŒÚ+ݲ"Œc¶wb’{ã=œª*¼ÒÙÚ2j ÄS`uôñ‚Ȥýæ�梲�>ϱ†@–eç·ÎßÐÕ‹ub¬Hf;p:‚®¬Dœ’iÆ7È$}M!FÜ=pxü3SÚG‹È7}ÝÀš¨§+\'úÔÛwv ¡íQì'í ë?¦¥$lXz‘××¥*Ÿ“=…;üiÀnlgå©§€S—ðƒ‡•�Ï¥X:P[ƪìUÜýhM–7ùð¬sèkE4ëaqç&òá·d·|ÔšäGb̹*zûæ®™‚p2 f™O©¦ïo“=èÉ®¢ó| #ý]Ì‹ŸÌÿZæ3ɦÎ)G5¹¢'NÔn=ÊÁ Ý霱þB²e`d;I#¶kWÂk¿Æ@þ^Tþ@šÙñC•ñ ã«)#>ÕbÓR¶ÕP#a'T÷úV~¥cµw<iÃ|‘©FþÿÖ«VªDqË ÇùÕµQÐr:SËŸ‡5¹ ŸLÈÔ¶ã|±!îà~F«Ê>u9Éó\þ¦šÒO¥)~Õ|M ö‰K‰£ÇI¦úô€òݳÍ!ÀR@äð­hE "Ùˆ#; }pk…¹×¯á”¢È¼sÈëQGâ=HºåÔ�À+±ðî£3x‚å¿u“K�pTUïøHdº`#FUa�O¥IsÌŠñÉý?úõÅjz´–÷K s(í^½ð…‹xB|È_�‚ëœußQEQEQEVgˆŽß jÇ;qg1ϧÈkÀn/£¶\IpwmÈø¬ZçTŽy|ÂÒFÞj)í´GåZ‹}ÇâK7£¯¨¥%[‹°7‚p‡ÙÉ£r›¨À] üàž„ãί,FX˜g÷Š8¦8©¦‹Ìû$L8Û¸ƒíºŸxKY �żU 'TK xî•¶¸YQÁ³þ5{CñŶ•¢­¢[³Ê®äg§'"«^øÓS½rü¤a‚ëY©þ¥0?¼lÿ+b×D·„¸ÄÅq�>èÿmìŽ%‰#\!ãh}+Ut+«©JÅÞ~ùè+£Òü#efË%ÀûDÀçž‚º%PŠ  §¬8M&èCBøöâ¼îÙ‚>9ØéSmæŸáБЃ\Ô×^V›wcå91ð@ã³M²7"iþÑ€d ìHç†*æÐ[#½J~øÐçQÆ PÝÕg��ÄçúÖœ1ìE^p?ÏçVqOv#×Þ˜ìNõóbÓçš2xùKsÛå5H.<œv�ô§)ÇãN2Qo�í�?ÊEA€GÌ£ðÿõS×#ÐÒð©?¥\ºŽ(tÉÞ"$yRO|Šáæñ¡Œ‹"ü¼tëO´ñ¡%ÜK#©Fl0Çjì|9«Jƒ[šc¹-„d9çwøUÄÖ¥¼œF•Ii.ƒØ›Ë8¤ŸþµqÚ»›“šQ °*;J÷‡ÄŸiĹsûÁ¸÷ýãWMEQEQEW‡~Ñ�øFÿíëÿiW†³‘ŠnâzÒf�æ2®Ðp)„“×&�Jh n8¥POZš!ïV¢{Ôî)’Ÿ”äàS×=3GáPH9àâ«8ùºÔg ÓY³Ú˜i{P~”åb½ §4Œø'µ jxcR«œ ™Š™djädŠÛ†7h�)€}kJÙxù©Ó {ˆÎsŽÂ¯¢®àt© †=»vÆzö««iñlúàUCOˆÆÍó×�Tmí¢D8Ï>¢£1¤£q<æ ’Ö'c»hP G0´|Ì?wÈù½§²8¡p9O/�#µn¹ûµØG…„±0‡lö÷®/T†KY݃FIÁö¬VÎzRdÒsÖœ3ŠêôØÚOÜÑ/XÅWük˜*wŒºœœVý²˜¼8ž\ƒ|²»²˜ùÅ*K[þŒ·Ž4¡èîß”mRøŽO3Z¼Yù×:YÒEtb¬A¿¥K>ªg‰æ>j e÷Áþ•í´ðgÍŒÿ¼+)ÜQùž”ß0æ¾à¢Š(¢Š(¢¾_Ò´ ¯kSZ¼©HVa“ÆÒÀçK£éöZ�ûÜjC%¥Êª~þ;�ÇùVgˆ„6š•ìVíº<´GÐTZnªËÞ»™ä,Äž§5y.Lˆ ÄKàúÿë­ˆf}ê cïc t«i!†Ù€ y„ð>Ÿýj¼ln¶”Ãc<Vf©á{¥Šâh˜�ß1OSޏ¬K]Gl×’,'"g“õô«‘iÚ}»*äÏ2€Hè Õë«�¶è°® Š0Zhg”¯—“•\�Óñ­»])c‰®0uõ­ÇÚÑaA™ ðª:qþ*žÝÞH‘˜ÈÆÑÏJ{0Š&‘³ÂóŽOµ2úQŸ<ä}ØØ��c^m€2íùˆëîií,KÖEôÍ0ÝF~ëújÚìH·vü1L1HAŰV­[XñkÀ άÀÖš37?w P¾~Õt� ‚Žìþ€ÕøÎ2½0p?ÏçRïùsøÑ»¨&šÌ0ãÔ*m;]Ûòqæj¦ìùw±þ~´½qIŠd£äÈìsSÜ�ô¹ êÁX~**2yèWŸóøÐ„3î'ýÑýjg†+#ý[Ò¸ “‡'4GopbK•C䇓]¯…¦ûGˆ5lþÌq‘þòÿ‰­XbQ¥Å'¶/ÍõÅ_˜eÎHák�×,–ê]É ˺F$ž˜ú`õÏ…P  \F©û[¯—w4QEQEQE—âBG…µr$YM€Ü5óþ‰ák¯Ϩ4“¢=«û�r¤ÿJ…4ëDwWñ#5ÃÆÐž¥OËúƒú×7}!³�,m–ŠF(Ýñž*ÞŸ©´Š#FßZ½ ÃHÑ2ĠLjÎϸ­›yX¸SÇ<â¬K ­wf~dì=Iul.œ"ÝqœV&¯áK¸mÉË©o–0y5žžžÚØIu:$¬xLô¦¯Ae§[͘�™Ðò_ ü*åÌìd‚8ÁìN\ki¥œíBÙ t­ëm&d’dY$ÇÊ p+fäùQ¢Ýzã¥ZBî¡›« í©ÌÂÜÙ9  óÅR×ßÊÑ.N2î»â@® ÌQî]¿( ~ó,KÖE�7í1žs{5UbH¶sõ¨š7ÁýÀP{–¨L\úS„|�zHÔ–wëÎ1ô¨¢Éšh�V»bG²ªŸæEhDØ®G늜0Å(lõ4Æ`"9ìsV-q‰ç o#ãµXœLþõÿëRõü¨ÇzhœtWÌS¥M“νÄ�üÉþ´Ã€ÌOƒþ*ÐŽÎFvôôWSž(ô©€8,€~µÂNv±Ï­Y¶‚â ­®]1 l‚{×aáçó¬ °�WL£öÑ«£¢Š(¢Š(¢Š+Ã?h°HðÞ?éëÿiW†p3MíAéAÒcš^Ô¸À })êG(ïÅKÒ¬F=ªÂõ¦J@# E=:cÞ‘º�¾÷J¬ãæéúÓ½FH¦~¸4P(îÔá×¥HÚ*E5" v­2U$qšë<ØÞÝ6c àT±r>ö s¬Ààž•b$q‘V �ϯó­$R#Ç–EVÔÒFL¤¡FÞç�µÈ|ÞxÝš¯5¼ûHêÄõÍC%�Á“!1ÔsPÜÅ ƒ•c€sÅMl¯×Í 08'2#çýzƒë¾«Þ[ÜynæPÈ çnñn6̘8û§µdË4$œ-VÜ™û¼T‰, sþ=VEͧ”@¶Ãc®k¦ÑÙO€¯Èj }ι"Wqãõ¨Ô®OËúÓ�\‘·ë[s6�bbˆ€‘�ÇÜ1ÍG§ÞéðH Å�™Œdî÷®ƒÃw–Wl¤´·ò£7jç§îÚ²5¡·T¹Ü3‰[#דYO,¿ÔÿãÕ­á½²jŒb�fØÉcžÛ…kk¶¬¬AbOzãfÆOzR`×Ü´QEQEWÉÇP·ÔXÃtm÷¡Ràà•ë�ÒªÛÚ\^êñÇ ±õÏ&´üG¦ÜÃrY�º²ƒ¼r: ÿ*½à‹[Y¬n¢ži£¸ÎæþéQ�äk¦·´·Žwa{%Êç6ñýMC ò„kÇk}Gùor£äd œcÝGô§Ï¬Ã ìBYŠ,—$õ8éŠÅºñ]ÄþkÛÆYsµXôüŠÁžöîû÷’ÌÍŸáì+wNÑ//',LP ø©‘2.]á‹'sŽ)�ke-6§Ÿ—š¥>¥áûvU{ÖR¢¦·’9¡I`Ï”ß2g©RIc Éè)±g`'©$š¯µŸ]sü 1ÿ{æQú«¹!ǸÇùüÍ(?…(èh#�qõü�K¥ä\FGð£ŸÉMVëzGþáJ3Ú—ò¤d%•4é¼Û8ïþ„ŠªÃ,ªzßÚ¢vÅã®ÓÂŽþµe ¸“M™JîÈùG|qÅ`¦‰{w0Ý"rßJÒÔln µEú2 £Kw?¥Ià©ã·Õu•±ºÅ£ä²ñúVòß³6ꨢ3°³œ Œ_Ò¡¸ñ6™m#ùÎ÷ŽÝ�åAŠÑ“W{­o`´‚;|gd�cïÖ»„ºƒê^»�Æ1~è>�»Ê(¢Š(¢Š(¢ŠÊñ8'ÂzÈMŒÿú-«æ[FÔ`{¤[Ã:†�+røÎêiº-…ÍÞ²žK¨ÚI,Ǧ0sRëÚmÄ7³+FÛw6;Ÿë]„,ìî|?™ ™£gGcÔ�Äÿ"+rÞÎŽTXÐG˜§Ïÿ¨Tl@–>�HÉãëÿ׫Êê.¢lrc=¹cM“^·‚òI%�ãBžXçÒ°î¼Sw,-,I�Ä�çÓéXí=ÕÔˆòJÎI{èôïÞ\I,¢&ç*[ŠéàðÝ´=Ëù޼m^«¾\Q¯•@®G ëR†{xâm£Ç†?ýTø‰òÙ6çå>½*ähC‡à bœÒ.J¨,þƒµex‘em^ù+ò/Ö¹(t�Þ[%±ƒŸZ¸š$̹ŠÔcÔ€*fÒdŒfI ˆÎ\qLk]>->©Çeæ³nïtT%#»y8àšÊiUÜ•éJXªÏn?ÏÖ�Â(ÇAUíU›SÔãj¸Uú•R’Õàpäc¯?çòðsøÓ‡LŽ´Ž¿+:©þ•bÏw‘tßôíüÈÿ€ÿ®—ØüÿÆ” \æ’D! �Y»‹uäŒ?‰U‡â Õlo”w™ª“?Ëyò¶@n}Îj…Ôw3iY7¾{u=kÛ@»ººÝ4f4-’[Ó5oWµ¹Tň@v½hx>TM/\ˆ·ï'0„_\nÿÛ�ž(œã‰[py@3úUI|W¥[dºK} 9?™Íiêú¤©¤Çx-àHÊùcüûW¢ü<»{ïé·/÷¤ó ÿ¿�]=QEQEQ^ûC®ïøG=¾Õÿ´«ÃÌDŽ0ÆGjnÚzÂAÎ¥2HÚ†�ö›YO0 ôÅG}íìÎÃ<x¦ùBâai!“Éì;U•Ð0å$¹Q�È¡–Ò 1ZO;yÛ"�^??Ò²¶�5ºd*�æhÚ3ôâŸÆFhÀ#ßé'ÏÙ­ 7!�? ƒýME*ˆùxܬ0OןëU�gXI’\7F wæ£òe™Ð‹†Xû�|R¬æ2Ï!U_×üâ¬@bUxJôùyìqÍs:µŒšEñ¾³…ÆÂ3�ϊд´Z^\ vYÇ;6Åàî*¼éȬs¦Ã%ô«+4€¯' šÚÒnä³µDÿWsnãå?OÃêß b´�Ã7�e¸C-ó¸Vê¤ÇGéú×uEQEQEQY¾"„ÜxgV�[kIg2œc(E|³l$¶Ö o—Ú²Ü=¿úÕcNÞ³).1ÈÅAäáI«ÑøŽ;y�yÍ2ànYF~lc?Ÿ5µ¢ë6[Þ x]l*¼ÁÉþ_•^¸Õ¡Óî"I\.ÁóŽŸäSu‹Øm4K Á7Ú™ÜÁÀa�æMb\jº•á�—*’ ŠüûÔVÚ}åÙ" wvÏ\ñÆjbÁvF£s`ùúTñÇ#ªïm Ž¢k›{8Ë;¢/¹®GÄ^/·k7†É<Â0K°à`מÝx³PI$û�9ííU%ñ~¯"yi`½À5BmZöà2æFöÍB&•ÏÍ#ƬÛ¸ó[–®ØœûÕÒrЧ©5aÌÞ«Ù7ìz<ªà{ý«Ê7H„œ àŸ­mYXÚÉlÒ6÷e�Î*8­Ž¡(‚(Äl£,Ç·^*Üz,Ê÷+ÁÆéU§‚>ÝÑeó Ѫtï»'ðãõ¬à€´ž»±ùNg5&9 ¨*Z[�Z[b¯�ð(oÀ‘ý*’O-<œÎ{ úª¼¢TŒ”ò{¦š-å’Bßio/¨å¶X¼Ò>HUç©ÿ9«1}ž{v…×(ÙðŠååŽoj¢u­dufqޏ­t©5m u &gŒºÂ½Þn¾½ dÿfÇ5Ü©×o(Ê»Îãë] ¥òÅcåHLÖ2!Âã”`p~¹¯]ð0Ûø'OŽÝ‹B ¥ ëƒ+œ~Åt´QEQEQEx¿Çå <=‘ÿ??ûJ¼IЃ½0€NÞâ£däb›åóÐæ˜à±äÓvb�‡Ò•SÖ‘—'�J¤§µf25:€H1CòCsšUùWŒóHOµ(ê* üÔ,sJª:FÞ9£a¥ R ;qž)Â?AR"ð8©ÀíSÆ õÔâ0@àTñBúÕ¨à‘Wá�sž•nÇ3Ú¡�O·½aø­�¥ÜÚ¾áæ¥Õ/ÐdLÜ õ«š•ö¡c"ví¾4sø¨?Ö©®¿© ȸoÆ”ø‹Paƒ. ŒëW§9“­ ®^ À�~U"k÷‹Ý*²šÕÄÖá›nä~˜ãš[”Mô@ IúÖßÛ®†©ö)mÂÉæ#Ójmm™œ'eé\õÌ;—§=±TZÖ@>í7ì²�¦˜Ð2õ\SDlxÅtê¾G�-F0^yþdW1·“�M·¡¥ GjÚÐ6¼z…»!fh–Dêqÿ³VeÌl“6ðÏAZ>;|_£ûÝ üø­Ï¦|Gr‡øæÇçÿë«­äiЬ0 _SëXwÆYdݸ�ÕT[9ê3Nû8_Z� ÉïMòWŽ+ìê(¢Š(¢Š+äç²Ô$¿†Yã°¶w�¥ðö�o6«×Až"\D�IÇó©c°Óf¹�%©Ü‡qãÒ­%ûGrštpÇÁÛµq’¬Mb÷ÌŸœõ'·_ñ«Óêvñø:ÂÅCI"¤�'?Ä\�?�λ øNÎ=:+ǹ3­ÌA¶ŽŠ:â»(l­­ØaEõ8ç½LGžHéU[ )�‚xÇùýi³‘¹p¼Ž¥64i$‰·ü€g§¦êê%Ò®bV;š2~_n¥Ick½Š$H#A8êxÍ$ÓAjˆÒ2 ääŸóþEsº¯‹Ú%hì!2apÌ\¶§¨HÒ]\0 §Š¡i‰ÝÜå]G|ŒWt JØê®9£i'¥(‰˜ð§ò©£Ón¥ÆËy¦צé´z=œn¥YaU*z‚^le}94ì„Vvè “øTQ)[ÈAêmyúïþ¤ÕÄã׊ÙÑnÎW¶òó<ˆöFGÿ^¥Šî¬XŒ& cŸQQêš¶�hv—·*²JÏóý+2óV²Ôtàm”ü³;ŒqŒ�ÿ� ΊýfwÙ,ÿtž@Àæ­ö<ô9¥#R�“ÏaïOTÍ–Iù–qŸÄþµCré?3`a�_n?�P¼¸-`®‹µ)É=3QFf1E#JrrzTéxÒ´±Ä�Ìf”HêBÊJyÏëO“Êš‚@¤HŸj¡¥Þ¦‡i«éÏ, ‰VUç†ÑŸÊ°µ=FÑîía·Ü¶Ñ6\÷`NO銿§j’Mtö¯lóEs·k(ä:þ½Ÿá}¯Øü7u"õóŸ÷»j(¢Š(¢Š(¢ŠÌñ f𶮩�ÆÊ`1ë°×Í/e|÷Ü\¢F|§S’I«Z‹hZâæk�6E…”D�·OÐu®Ÿ§ÎÌñZó¸�œçš·§$³½ºF‘˜z„ã#5Îê—BiÝ{‡¿ùâ¶u½FÚm;N´�,°ÛÂ…Éãvcùçò¯DÐ<gajÎn|¯»·¶=¹®–h-�$0¢ úT̸&ª…U‘ŽÒwàsþ~”ÉÈ.X.89'Ò¤Š7k�1›*ëUuÈ’ãOH!`½Æà?­_[xà·"Uþã5ÅÍ­�i_^Ï­sZ¯‹î 4z|’HEsW1_Þ Zêå¾l“T–-¶I·,bçè q³.ã¥B(Ó5"FÄð¬~‚´ìí.—÷c×o» ³&7 ³³çÃùÓ¤% vq€}Ï– }t‹Ð,Xü�éVÕK‚ƒ©­ý"ìÁöžYßß/€@§i÷p¦£pÏû´b;Š«y­iv3ZLò9u™$ä)Ûú�Ö³ïµ;K»K9áRV4ù°>ñÝ�èj�µØœ(TûÌIç•äõ«c�1JAJIè*Rƒì¶§<‚è0ƪÞL�E¹É;W8©ÏÿZªjS:${@UÝÁϵù©$,Ò€ �”zõ4øn帀}œ@ãŽùÅH¯´„`ªàsŽ‚‹˜¡½¶6Ò�–Î}ÅT±Ô¢±ðÜúMÔoPÜ”Y�rwõÁ5…u©Û>¯&ä¶…6€:œ�ÔÖ¦™w. eÓfµg.Å„Š1ާŸÄ×¶ø/#Á–óÇ™×þº5tTQEQEQEyÇ;v�t«�¦ãõòëÅ.#t)ŒVc»9§‰ 80nô�¦æ“…éQ�KsOÚ09¦ã4ý¥pATñJ¬Á_‡þu`sL‘¶Ä}ªA‚@éÅ&ÎMU’PÙXúw5'=iç(eïH„�LT€y§,y⟰h.㩦$b�C€+Z^Nvô«ñéâ0­3*/`O5`Ii H}MHn7‘ˆ‚ã°©r<—n˜SüªUv�MN U>æ°õ¨éúpq’�Á'¿9¬mæ¸>æ¬Ý¢ÜK¸ÿ ƒìþ•IíO—¸¨ÁéUpF*&‹0iÁA=@«QmX[ýᚎBRDl}Ö éÁÍz†ìo|Eªê:­Òd�¶°a€]ºãÜúÕ«½k‰™žUQž‚ªÿÂ#3�ÂuééRGà«¶l³+oZ&ð…ÔA@€·|Ž•]ô «™-Üó�òÖlZ@dy@S#cè*Π�ÚéVVòÝ!>ÇúšÀ²Óv2à„' ïV¤ÒÙ8Úp}ª¤¶@J·¡£[k²�<ÈÞŸö”�úâ©j6È—FÅ�ñëRè1ñ>’Ã�·‘�MÃ5½âï—ÄW :îôÑif §'¯áIå*€éMaƒÂfž³*®×€8õïHRÎ`q˜Ï¡éLþÉvå 2ö!«ëj(¢Š(¢Š+ã€÷—R-#“ÁÎMtžÓç°¸›Q¸�ãŽURË÷Ë0ʨê ö:Ê cµ¤rG¯oéPIx?á$Š@F±ÿÇMaêS¸v^y$VަÖàAöb f˼Qw~¹¯@øoªâÑ4ÙKÊ^,ôÆy¯DƒÅ1®""2/˜A!sÍ#D»ƒ9ïÞ«NÁ¤ùA$ôëK (¸ÛÀw¦ßÝYÚ[H’H©º6u<�óùW*š•Ï™–Ò6ä=;p*­ÄR]<†âfvŒŸqRÜ$0XC…U ŒóƒÀ¬‹�ZšVëò�£Ð‘Ú«øGÔµ�9!�F’Ì01Š¡má u"Ò<ÉyÀÉ#Ïó­H|a̲»ŸJ҃ºD‹PÇý®jôZ]”ÚÄûµclhNÔU³¿å£ÿ¾ßÌÓÀùŽz?ÏëPÝ|Ф=æ�!ÿw«~‚¥'þ&QžmßÿCSZše£^\˜Ô�…ÉcÆ;V”íi¥J—7nÍ4ØFòøØ˜<ý8ò­XÒÉfH•d™ ¯‘Šó�z04©·1ÎåË“ÔW85ÔÓ´ù,ž A�ÇûÍßù~U×ÚÆ‚å\Èï\€jÛ 7ó„ó“€;Ò’ô+#ÄsÜ¥±‚ÒVIŸi ;òE&·šè»Ã²«ùó–‘PÝ^A6ØÊÀäñœf¦3ùP+,cwDœtÁüª8êñî„‚ÌK`ãš­-áÞêbfËlÝž@êM=g‰ä(¨@PIç?äU)ï§]Aíš"Þ[ˆ™qÜU¿Tí&[TÈ·‰œ|ÙuÉÆô¦Ë¯êFXÆ1ò.8¯iø+u=߃¯e¸vwþÐq–ôòã¯H¢Š(¢Š(¢Š(¬�³'ƒõ¶BC È#×Ëjùz5»¼˜)26z““]_‡tù´ø'žå#râ݇PT�ß�dC3ZkÂÍòÉSŸëUíoê÷2“Ç’Ãó"±.$&ëwQ¸géZºá·]BámX5¸v‘Ýrqúb½WÀz¯ÚtÁc)c,¥sýÎÕÙFqŽ­0MÈbY¸€yÐbE`ìy#ŒþuRbœ¨'�SÅç>cg�òŽ�*®±yiŒÐBÈÀm ÉÈ9ÿ?Zç—Q»y›c8$cÌs“�¥R–Ù®K4Ò4’nO^µbøÃ�ʪA8Î3XWz¤KÊ™fq±=G4š^‰¨Ï¦Ý]¿©Áeƒ×bâ½çá”Ò\|=Òå•‹HÞvIëþµë­¢Š(¢Š(¢Š+É>7ƆT‘�´göμvîG1ùoƒžrzÖ\¶åæëUž=§§­"ŒÓ·c¦M)\­4¦¦ÆzQÔÒãÒœ3ŒR2†qRÁ;/É!ú5HçtOèqŒSÙ¾Nª²ÈÓ?pžž´€ÆM$÷âŒRvã4»x§ìúæœ~AšMÙ¦cœw©<Œž*ÜpµÀÀ½jG,�íà8«Û¼œ±$ÕØmHÍN!é€)·(Ò^„Ö¥†�ö˜í“<}ïʳüidöv–®0'©4ÍÆ21Ð3dw5œþó¤ƒåi±ô‘ý*•î”È„m8Ò¹Ý_M–Öo•‹Ž Ž„Vg˜T ôí¨àí¨ÊsS&E£ŸöñúTnઞ›yÏÒ½ÃÃþu¿ƒìæ¹]ê®åÀÇß9øîßΑÆ[×­^�P Éæ´ ÚÁÀ®!_ï§çý*THÝ•YU�nAkMÒln´¨L��ÌÒ�y¼ÿÅ:a}VF˜ªûÜWMƒ§·²…#•E_Ò³î4k¨ ßlãð¬Ù´Å9b‡ÐäUeÓcYÒEà«BïOc,„® sÀç·á¿ ºy”ˆsæ�žÀwª>/\k·ÓÈS,SÍ–IG#öMø$R­�ÇúPmª³X ä ¨m�Nb¾²¢Š(¢Š(¢¼‚ÒÆÂ X-¬jv†SŽqÏõ$‘¾¡¡]Ãs¡ ìtÁå>)Ršñî¦yüÿƹÁ17û�`ÜþZwÝ!© "Ý+Ò<#äÅÿ´Éþ± u—ë½ÇòÅz-ãI%Ä0Gp"BŒÎGSÈùÓm­a‡›t-!ë_ñ«^HQºI2ïÐVUö±g Ñ÷¸ã ÍfI©ÞΤB8Ï&¨´lÄ<„¼„rÌsšMʲØEV»¹tÌ�:)üj�—‡µ­q·mh`oâ|�õ®¯Lð>—¦(žù¼ù9sòƒô­ ÍUÞ#o¦[pÇg™�ª¹®_LCk–òž'(GМ:¾$ãŽÔªÃŒÿœÓZU4ÝÎ8¬þŒþîßÌÓÓî{óLÆûìãˆcÀÿy�øÖœÿò¶>°È?U5vÞI ™d…¶ºô?…ZñC+E Ÿâ‡ ~&¶F;›}IÝŒqY† {9® Z�Kg~db_¼ þµÅëhÇQ¸”ƒ·yÁ=:ÿ†+¶Ð'i´;e¿„ü~‡ô­‚99â¡N3‚#VÏûØþ•0Î+/WUŠçO»托�{¨æ¹½FëÏXmC ’•ûÇÛóÏçRZ´14Kò0Û‘Ðô"¦ûMÕÔ‘9A}öÇ ÛüúÔ"g–}ÿ8'®çàñHoR0 ËÉ=¹ªR]b}þiùº`zÔðkPÚ^yŒ_”€H÷RÎúÖÎB"”ª†ÏÜ#úŠí¬ü=§»ntÞO#œñ^¯à K{-Xí�"–$]ª?¥uTQEQEQESUE“H½G]ÈÐHz�¦¼îÞÒÒÙ&òm#ócÎÐ^Οyn×ú,&â5YRTq�Ð¥xþ¬Jë3¿@£ôÿ Ç‚SçÌǺãõªÒÎj{Œù8�•ìò"ñ©‡î˦ŻØìRGçšë.CÜ]¼_iò¡XÔ�½I9ÿ –ÞÚ(”­´{sÖFž•a¢XÁyd’Ç�X÷šÕªÈVe`: àÖ|Ú…ôèÞ[†9Ç\qU X}Äe»’rOz•�Qž1õÿ?�Q½¹–4wHòH¹4Ë ë:Éß6`€ò õüuÚo„4} ,÷šUç|¼ŒõàSµ[Û�FÍì¬mŠÅ*²`c…ai®ŒjÇ$p~£ƒüªç™À4nyôÇåUä•WŸz©)ÈéYÓ¤öïQcå¨#î§“û¸‰“úŸÒ”ÈNoö Œþ¬?­iXÍ%½Ò´mŒü¬=FFiþ!*º²­º3ü«bþ6±“U¿vfÝT�†0+†Õ¥E’ȶ8¸~Q\ìOæ»89c€O§ã^�cpn­`™¾ùûÃß'ü*çe¸š‰?{²B¥@åAþµcsÒ±up-µ%ºdÛpzåAýk þçíW±ÀHdF2üÇŒqúb¦}f8…ZEo—#“íùŠŸíO?œë±L›wu'§ùö¨c‘™™Áeà³÷ÁÍ+_GQæsŒôªIsåÏóLÙ'°éгm­AlfW�äónãÔŽEA¢Ü[Ü_ÉÈÛæÈÄ>~œ~†»{?iø&H·¶yÏ9¯Xð´[xnÎ(,jhîMlQEQEQEæ!ÿc®3þ¸ü‡^I‡%óÈÝ'›y¥ÜÁ)‰”•SéYÓ[ q׸ôª’Eµ‚àƒQQ¾sŠ”¦0Cd Ó{Ó1ëF0)9Æh§î pG­(�GFǧJWa,™þýi›ò:b�ç9§Œ 6ûÒã=*E\ ~Ü iP±ïg¦"3ŒƒòúÔÑÃæ.@éÞ®ÇjaFXŽ‚µl4K›Ü«}jÜZ[Û]˜X¸'ò­àtǽ8¦8¤#o^*­Ï—,M 6ÈU÷9­¾¹¶�Ãn?(�<ÿž•[Ä—W:E”w<†~\qZ×íÊíáp9lqÇjf•¨Ct÷ hòX$�@äõ«2i†å¶«Å(99Vþ•�ªèMåÆÅÎ=3\…ö‘哿EŽOÌ+,ؘòzÔl„zSÊf8à¹çò¥Ót×ÕuK=:2C]Ü$?@Çþ&½ËR‘çíŽÀH×Ѐ~• l󽸫ëöLžƒ­ZU¶+ƒƒR„µß�€zóRÆ� ö5�¤Çö-³pDe¸orkžx#»×a•ó‘�ŸLÿUvqÆØe$vŸJ{$¼ «à޵Z{fÏ™j�ž¤pk6 Ú9;ãÏLŒ�Xèõ]BÛÚ7L‚{0=?*í¢³Š+QPðýjò/�ý»r¹Î?AZ:‰tÚ~Y)(.>™ÿ U× l€¸çÒ¤X•ÔéMh3Ú¢0 ÛÝ+é:(¢Š(¢Š+ÉÔ>GÞV\þD<Õ†¹Ž" •‚<ƒjç¹àãõå~7T]AÝ8Ú»OÔ’¸bq&}©¨�,ª‹÷˜àSç>ZàžõK-!­§ðÄLÄ7Ù!iF0N+¸ºX­om]�ya1=�þµBëÅC8‚Ú?6AØVL7÷ZÕÓ‰JD�·bóÿÖ©níbµC±B–ÍW¤H_vìô뚥y¨6ôH†]Û ô­};Eº¾Äކ4<ÜWA‹cjÞdª/ÝßÓ9ô«få› oÊ?‰¸…W–Ãy×rïÛýã…ÍêÞ*Š(¤ŠÅUÊç/Øu®&=q£¼ÈYeÎÿfõ®®Úê9¡GÜ>fãš‘®#�–þÔŸj·_½*gäÔÚ6Ã!gŒ�×Þ óU¢óe]‰Ôdš²‹Ð~‡“¼Œ[ðè?AK)?m³?ìÈ?@kBÅ[è#�e·ùü«¬6vòÈ<È•¼ 7ÕGÄ�$#¼j q�Xz(çùW�ø„«éÌPäAÇJÇÔUn|/jë‚ß;Ÿs»oþÊ*ÿ‡<éLN<¡ ñ8UùÖÄz½­ÅÄ�I ‹ËÇ ÆóÎjÌÚ•„ó.âЩ'‰t˜×þ> aÞ²5�~Îý­b¶vUV`ÄŽÇ�å\ýü–O<>D’:F |Ã?äÖ~¡õ ô#³ÆÊ?ˆT¼mðËŒà~]j¸œ×¢xKP7ZrÆì �üŒR;ö_è’c3Ÿýk£¢Š(¢Š(¢Š(ªÚ�ü‚îÿë‹ÿè&¸(�ûIÊŒ¼`çÜdŸ­K%Ä_5³°YHÈ^ìz~¿•x÷‹Q™“€H_Èüó\¿Ýf>¢ˆ¢i¤Ø¸èIÍ>Ti[É@K¾G©'½¢ÛJxìB”HÀ!xì®–V†ÓSf‘C àŸ\Ÿþµg\x­�¤^cªœžÂ³í'ŸX�Ïw+l$�8çÿ¯Nº·ŠÐí@“Q‰Òî'ÇåTf½y.£†ÜÇ’µto‡ç¹e–`cŒàóÖ· Ò¬,O˜è¥Æ—çv«FâY¾XSb77ôVX ·-qw fÅ!à}rš×‹·e±QµF<ßjålµ‘oy¶G-˜ žÇ½uQL�Ã$Ö–IãEå‡'Ÿz�ç¶\î•:’j¤×P2’¡®Ö²g�YÂçïvðlð­Gn¾\*?ˆüÇêy4ÌLûÛ�Ñ�øÖ¶�wŒqJ¹Vóêk§[Kyf3É´™ÆHÏ“â©d‚ÒÚB„8OlñüÎkÏ|LÁaFR~ROCYž#�eÓ¬¤ˆò Lî gõ5¿£4¥n'FFòѧ¶NOþ;Wíu[KÉ2¬{jÆçãÔójš|]ÇéÁªïâm%ýùlú-aêúÍž§}ŽGH<’®qÉÍbÝËhÚ‰š)$d HÁb³ïçO4}ŸpAÈÏQSZ]ºL¢ä³Ç(ʶ{ö­5YD™Dûß1íNU‘�bŽÜŸáæ šSÄÈÑàŽ£Þ¢œÆcF 9Î1Ø•äŽ\ûרxwPûv›ÙÀÚã¸a^µáÿùÛq�½ÿ¡Ó¢Š(¢Š(¢Š+€ø—’M#$N?ïŠãaµû>ý¼õ8¥ÑÈŒ^0ʼnÎzõ®{WðÜro–ß¶ß|×+¨é2ÛE¹× ž¢²ä‰X|Ýz � ‰°ë”Î3éS6 œ©ô¦lÇ­DÉMäzRàÒc#¤UìM2dç$ÓãL'Š\F)}±K‚(Á5"'z�'9æ�¹#\¿~‚¡ e|°ÂŽ@«" Wjô5¹k¡Ï4JÁpÎ+®Ó4,Æ\ ô­3ŽU( n8ü* ì÷;ÉŒ¶V’ëMdã�P5£È9!q޵“©Ä"Rcf%ÞÇpjÿ…ìî|A-Ä�qm‚wÅ]ñV‹qeý—M›çúŒUûŸêBì²À¬¥$7ãTtËK‹HÜKo"vÁÛÀÁ5$ ¡™X•rüv=j[ˉd´x¥Û*uùÆÖ%—ö^«)·%­Ü·'åcUïü.by#ŽOoóë\¶£§}˜`Ÿ›<®*#g2À±`�ìÙÿõVÏ„-þɬ�MÔ…µGÙžîÃoè ý+¥D¬t…³÷œçŸð–d¯� ÀÅ'ü%*ØÍèõëR¯‰£=/ÿñêž?!9£þú«kÎX2Ý©=~ð¬xüE}•œó¡AlÔúnÆ¿5^Ë/ˆãHãULã =‡øWeµp0NÜÕr=u‚ò„þ5jf9 œàf§‡Y²�Ùâ2Ë�Ww#×úÕ5‘G‹7¢«Gsjáýõ?á[WêdQݧҼcŶϳrnyúñ¯Oðõ¡‹Âö6Ì¿vÞ0GpBŒšæõ­*K›×ki†ÜíP}»:ŸNÓÚM>! hå ÐŽ8¢KGˆãЉ£•‘žE}EQEQEyZÊò4$Efj¤ÝxšÆßnäŠ3!>ŒÜé^aâÏ´ FE˜0ÝóãÓ ¹Ó.íâŽY­äT‘C!+ÔVž™áÙnt[�Gp�â”"£ðH óô¬W‡÷Û%åw ßL×~¾?iu%ºêgl"± ö¯kªÜj‰;ÞHI�è9­+xí£¶šà(3Ç?‡ø§§˜¡.ÁðžißÏÓ§éNÔ/æëìö±<Ò*íÊŒŠŸOð¥üÃ}ÜÞJ“�£“]Ž…§éÄȱ˜u‘ù«³É>õŽP1Ëž‹øS<µ™ •²9==…fßëöö’,JÂY˜áO®:×)«j“Ë.næÀ •�¹‹‡2BÒEû¸òKèy¬+‰üæÇlu髪Ý@ª‰#`tÁ§6¯w".vä7_joö„ìFw{Ó´e �½@é^‰¡E%þ›l#Lùp#·Ôó�Óõ«îúçG×¥F÷VÖóÅo$�]øQOœybzå¤øá«‘1ŠUuùš6 �Ç5ÙG;•š2—æPz«|‘ÏÛ‡ ²«©é÷±ýkËu‡6ö÷6wGm3Ds×o;åÅgi±Ëwh–2r‚x ÎsùÕ}JyôË£§Ú7–¶ìÁêØÁ&¥¾²o*#r ]Üdè7ƒ•bJ³¬ÌûÐá°:s-ª�¾k—ÆqŽ”ók"ÙØâf�\Æ_<ÛÓò¦Ã O"ƈY߀ òM=¬ bÊØV`¿JÖƒAŠKÉ >eÞØÈõZžãHKKeu¼‰‰RCçµdEoå[É,’”ã¹ôª·^]Õƒ<@ïGÃg¯9Ç…T³*,äIçÌàŸ¥H¹­tÔŸ­Æ_9¿vÙìsÁüÿ�}à© š,„€19ºµÑÑEQEQEUmDíÓ.Ϥ.C\DR3ÜFØvø‚ bݳÏâ[ÇXË}–ßddwlgúμ«Ä :êRÃ(%‘Êãñ¬ûÍ2îÊ@—ò# ãµkÅáÉWÃÐê[•d‘Ý lp@ÇçYšt¿bÕí.Üû<Ë.BTä~ Wugã©_Qy!…~Ñ9;¥oóíZö·ÒêV~}ԌұkGʵ‹O–HÔ�…cíÏøŠ‡Kh¡Š/Þb3�9ï“ÿר®®'Ô®ž;;w•²pqZw„.ÝÞ\l$}Õä×Ic£ØiÃ0@7“Ë·$Õ‰d¹y¶Fcç<þB�$q’í—aÕØô¬›ÏÅ ÿg·Ä× ~Pï\–©©HÒ¹¼œÈÀd ?(ö®rí�mÄŠÛ"üßÄky¼×-ÓÒ”j÷i…YàcƒJÚ­Ô€s…$�Æš/f+ÈÏ~µ<7Îåp 涬ašõ^tBcŒíϯýÒ¬0;6ÿ}€ÿåH/-¾ÙöS óvçâž@ªæØÿèb´,exo"’$ó[h\ãÛú×aæàaT’yàñYÚ�¤ð}žê@#›*ý­½«Êµ{™.tøÑŽ@ÌlÛÏæ0ilm%Ö`†È¯Wæ<`ó¬ùïîÅúÛÙ¶ÅG1ƃ¦3úÔú•†$ÚŽéWns€ïÜ{u5ޱ®Ü»>AÚNÞôö[PåVGfxÅK-´°ZÃtbo"`U<6ŸÖ– d¸“dq—8-…=‡zwØ­¤êÊ{½m�FöñE,±ÆéówÁÔíCK°°[¸¤vA€ëïõæµôäÍš³( ž�‡<ÔïE‡îT†OõþµVm2Öx™61\’8¬ù<=—%'}ÅzåQEQEäßÚ]¸`÷у׃ÓüñXo­iƒTÔ®g`χaä’P+�ñF§m ñó-F°ÝìOóÀªš·�ï5{}‚ÖáQ…zW-%íÔ ƒ#m=@ŠIä~b¹­ÚÞ÷^¼Ôï¾a#ÈÞIÁ"¦ñ4 ¬bæD]¥GñÕSHÓ#¼ðÞ±ç°2Æð�ÝÀãÿ¬+[I5¯"êa"3‡ÇS‘�ùfº)_FµÒâÓ£Ÿ|-1šN:’ *ÐÒn¼=¥ÜE~ÐH#•o/ŒãÖ›g‡®¢I§I7ÈIså’:Ö¤‘hÚÅÄø ­½¢Ãj:@=WœËmsèß6H6ÿ½ž•µ¨êöÒÛ,Ä‘ÈqƒÙMcùéës%Ä(¹•O_òiòÅb%w7¡·6p«ÛVIlWîocüê¼1î1Æ7/+Ÿ^Õõ€e‚ ‰mæ#É’Ã×b溊(¢Š(¢Š(¢Š­¨mmÑv ¾KäžÃ¸5Ôô›|¾�*ÙãüýkËVÓÃÎ^Wk‰ï¦Ãü$êk›Õõ»k-lLlRI"˜Ióóžñªš×‹ïµ”ó‘{¼ÿž+�’êæpCÈÅ}3Þ HYòvä�“Vì#Û8#µuúômã•ÒZi·º *â–n3ï[š…,mbýû4ì¿ÂN­Ø ŠÙ k€q´cÚ’gϯáQµÈTb98ãüþ5žúÄVŠ^á‰fÈHÀÉoJÊ»½žùK]9‚&äD‡ýkžžè-Ð6‘Çå¹íFì$¬K‰®;ãî­dOq$Ø39f³Òª3—Î;ÒÚ¸ïFÞ9¡³Ž)Èèk¤ð�ÅÄz~«}<ÏöKE j>ûžqü©—ºè]4˜ýMixÁõ4{T‹í:"ü»‹Œý+>óL6ZרÀ`B" ýsœsTä k4øBÏœ(5A´mNðVÙ¶žrxªÍáýO?ñîÞ”‡@Ôºý•ñÓ8¤þÄÔ3�k!>£:Uè86òg¸ÛQµ�Â}èœ~ß-ƒ€Aä�Ò­[Å�P#ðïÌUInO9æ¬¯Þæž=¿*\ãó«–æîþÈfù‡û#“ú êVig¹hcÁ‘ÁØ >µOx¥½–-3¸-ƒ‘þy5ÉkSn¼¸ rKZ ©KsŸšì?‘˜w¡ÏåùSãñ=õ˜aÃ’¬xnF+¨Ñ¾!ù6;¯"VRø;#ð®®ÇÅš6¡·Ë¸záø­Œ¬±å0ÁÁ?皬ÑvÊ‚rz5QEQEòÍ­áŠTáe‡ãŠ�maº¹ó£_$�¼®zãŽ?Z«âÕ2^ÆGüò_Ï‘§C!¶š`£dc˜ddöý*I¬3(މœŸ­\Ñ|3}¨M&-¥û§iÆuzgÃ9S^\*óʯ¡,ˆÒM Hy!Ï_Ãõ®~ÿV, Y‚Šz¹?3V9— s’Oñ�²ìyãÖ€€S�QçúSKuÅ4ûW}¤\Gi¥Aiº ¸•§ Œ¾ÿÒ»´¶¾EVŠ@0 ÀcY-,üû�>�¤,.øÉü+N=-£µ•£¶\m�—œã§&´4¿ L TU'ïnoè+~×B†¯ƒƒ�Ç5áwá㺸 œ–ç>¹¯Hð�Äw¿a´»,ä´ñÆ0I!s·L�øV…¨>‹sªi— ¶SòË7ÝÇÞQîxýk>ÖïÊÓfë¹ÕNG¶i’ëö¥%ùeŒ€pËúSŒJBè–Š¡ð\ÃÐÕøIaó¼á§Ã愌ӦñHžc+XCæcãµM/�¯fµ6ÏF.8ÛéÒ¡1ÔRe5ཪ›x†ý³‰vgû£ö•Ô±Ì$™˜°SÏb 3p“L.îKù„séUmÎCrjÂôëNì@¡ršúàc³xì1È]F@¿O.3üɯM¢Š(¢Š(¢Š(¬ßJ ðÆ­3 ¬vs1¸BkÀd€5ê°PwcÔU›KXžð]Â<°X?–ÇžN²|Oý^à¯LäU{(û?Î*63ÆG_\~tK§±–AÜ€óŠÔÑ|#¨Ã.ÛyΖà]n™ðÓÉ ÷—#'’«]†ŸáÝ3LC–]¹«¾bo 8ÂôÖšf•ÞÇ>”I:#²o�ßùUIïcIQæ}; ­st$ct‹ªÏ\™ù× :À¸¾q™u&ÄÇËýæŸÊ¹ûýNI—n Póß“õ5—æ`‘ß×Ö¡Ú\äž (@9 àzŒžy¦ç?Ç�sšˆ¼¹×•rÆFËO"»MúúÞØ¼w9 x®ˆx–áFÛ˜U¤ñÚ½®Š(¢Š(¢Šù{I…’ÖHE+'xì ãõ5¡Ÿ©I´Ÿcfe\ã®G_ÌÓüE¤m¶²’L‡d!¾£ãZ¾ðÅ­ï†â”i�™WÔ1ŸÃõ­gÓ4½(º¤ ”HÍhhÓ¬¯#¢…S€¼u¤ÛŒYå†}h•}ä(ÈÆ}1YwwÖ‘¡Û&éOOnj¨¸—;•‰ä�íUÙ‹»j)% õ5�& ±ÆÒÈ~àäW)ªk’Ü«¯bzö®zêþ{§c31€AT<æÜM=C3|Ý)ä�Àü*2ü‘L-Ç=i‡�rx  MuEì)ªiÐÞ…h™A>àb½^×O³‹tdgƒái —^ÖW©M Œž3]mÑ dãÔ ãÝ…X‚E Ää€Õƒ¹Nw*�Ô“^Eãý"ÎÚðÉiuæ\“_»ß­\Ñ¥¹�ÂpÙ |ˆíäpB}æÎ:ŸÏóªý‚}½&³�’77ûXäæ±,ØIlÑ?T$íÍMåù–‹<?äb§›C¼¶µk™P*)¯<×»|‹Êð=ÁÜ™|ÏÇlÇé4QEQEQE•âhüß kä Ö3®Oºð»(¥}-€peˆ•‡RÜà}p+M4ÝBIÒE³eGM™ÇL¿�¨3ƒÔŸóÒ°5Ë�Q¼’ÍIˆñžØÇ5� ì2OÌ«ƒõbâ<;=¸ú×?sE!Uˆ#ŒR€iái@朧¯Ü9©Àf²ÆÞ©¶Ñ±R“ôz;9Ü|±9ú ·�})mßñ%Þ�ual'�Vm g¾3_Aü7‡ìþÓ"Þ^G¼®kª¢Š(¢Š(¢Š+Ïþ(À&µÓ÷”y¹>œ-pö61:§—##*¹[8©cñ«¥1[ ·1F{ŠÞ±ñ.›zçò�°6¿¯Öµ€Þ¡”†SÎAÎxªÞw“;$‘˜×<8èj½>Þþ &EaÔ8ê?Ï5Ì\hw2Ëp�î!qÊÿ×-yb¬ÒMm9è{ù¬mF�ð#Ù8<²t5‘$dd8çÒ¡Ëœ$_&L�ç¯Jq†Fé¦yO"<Ò‹yAÇ—N0ÉŒydg¥'“!Æ#4‚'Î]Hf(™ÏËÐMmÙB†.Ù¿»IÏjÞÓ,ÒÞàaZYX *Œœ×Mcá·yžkÆ`%C†f^ÜóÅhx‚õõ=ÙY¦µmŽ$?ÄUm/T¸ŸD—J�³Å7“�£ŒgÓšÊ{”µ¹ŒZ¸YÖ_3Ô‚@j‰n<Ò÷*®ÇvNy5oI»:N¥ â”Ä [†HþµMpÎÍæºr·JÓ¹Õ.¯-í"žvÅ´^R0` ^¼ÕÍ/R ÍŒ“ÈÐÜmß–•¿dx"S�ŒãõáZ/Z}HÉ$Çpëùá¿­[ñ ä6Î^G¾B¤qÚ©èúÑ�¥1â¨Rz‘ôüjäúÄŒG—#œzÕ9/§•HiXçžµTÊ$æ¯ÅvEèN9d,ì§zœUkûÛkdÝpÀÆ®Jÿ]Šx]BHéÐW.Òùƒ¸ííUžVßå É#,"!¸òÆœ\8Í1Ÿô¨‰æ�ÞÔ™ÉéI¸�D…vb‰Ä²‚†bHÇn+Ú4?X8>Ð÷>Ñ¿åþ,V^ƒ©ÚÚx“Xd��]ƒ¦0MjÝxµÞÍ<«5OÞ&wôaþ4šæ£öo0J±î#î¯n*±g,ÒM+Èí‚w7ô¬­fÂ{åŽ4L89¸-¤:~Ÿ¦îî¼ÉŸ$ªòšÍÔ5Øv…T$ ‘ÛÕÉ›¸â½�®Y`Ò¾£ _-v®;×Mžºþ‘ ìq©,J8ôe8#ùƪIáç‚EïÅEÿ”=Ë­9|#nN Ž*Uð…¯wsS/„l@ÉGÖ–_ ØÅ%¨X‰8Fç¨Á?áT"ÒdûñÛÛ2ºÆÆFa÷°Çü1Wü/¥8¶›Ì¶%„˜ÎÌ×Qší�°`}1VÓFŸ#÷`~5,þ[Û7¶™È‚v�Cšï¾èöú'‡åµ·ÎÓpÎI=NÕÐWUEQEQEQUu(VçK»�ÆRHz‚¤Wš6‹i§jše¥¬÷³‰¸2 ®°®U+Ë|m¨¹Ô£ qˆ€ÈüÆ»Þ5Ç…,›“±ï–+ý*¦»}mipé+nY0ä(Ï|ÿLSô�eæ¶iY„I½°:’1Çò©æÖ%fÝ�Àê{sU$ºšEÃHdzQ B0=H5¥ʱ ž@äÜRÆå·`sŠ£©jÖhÞcøù@õÉêšÌw6?ʹÖ}ã–úUvv•Œh2éOXD#–=M)aÐb˜íÁ÷¨»ñJµ7çÒAéP\‘·ŽÕŽ$š=V âݺ)ƒ(éÍ{ §ˆ4©mLLn²•;—ÛšÁ𞳕®¦~ÎÒ<²óŽÃŠÕºñl®mLVˆƒy?1Ïðœ:š}gRØŠ' ¼œí_\ÔŒî‘äv9Ë6I5�«é³ß]# É’KqÅ]MÓ´Ô‰®<넎ãvsŠÈÔµ»y÷ ÂI&¹ˆn’9%Œ «œ�­Oý©*È¥v�„=k©—E]^ÒÚö•£�‹ØóÔ~#ðªOàò§÷�ȸ¤‡<—Ôôð…¹ÈüTéàûNìæ¬¯„lWª¹Zlþ³I£�"?<2·ü�ëT›J™ô©½³".ÂᆠlZÛðÖ–F•5©ÎNNεÑC¥ÈØ ¸Å[�F¸$|€Sîü)¥n�Nì_wËÇlZï¼3a™áÛK8Ä÷b­kQEQEQEÁüL·¹¸´²X"2.$ߎßwÖ¸ÍHü…I$�@*G>ŸáLÔ"ŽY[?uÎN*¤– ÃtJ<ŠŽÊûPÒ¯<¸ev…†B±ÈØXkÖ÷cdêñÏ<º°G(ó-ŸnIƒM24Dý¢>;ºò ej:ާ ¼xG üéßê+„Ö´­=Y>U8ŽAõ‘e£›ËÓ!Š6Ç?Äq]lz5˜ÆaåèVrye£/áþM1¼5dFFõÁÈÁ¨›Ã6» †qÎw~TïøF­ .01Ç~MH<7b€|¬p02ϵI‰gJ†!Œîý?úÕæ‡jöò*ÄfãÚ¹A¦Éi<�ä‡(qÔW[¤x^{ÈâyTÜäŽZ»kK+,mEPç©<±«Š&˜�‰å'vn§ð¥ÛmhàÌà¹çsŸzÈÔ|I´2Y -ýã\°7š�ÃÏw#¹Ý…Rx…Y1ª3Ï#¥jé¢8Ô±î»yª:𛛍íí”ÊÊù!G§ÿ¬Ö�®�wt&¹s·fzŸë]•§Ãkw4F%&5R¬G<çü+µ•µÕ5ûÆ—2ÙÚLÐŽ¸`8Çå^Ql»bU'¶ «öyUÁ=ÿÏõ«ªØ�GgSù�þ±ý*Ä�‹IÏLDßÈÔ¶ÙÐ�Ú5 ®ÏIù4«\Ï-í“Z-´òWp�ëé^w:»_]ݰ(ÎØPÜàßžk—Ó#jš„¬z@ßÍN,Õ+‚5;«¾X,�ë�Á°Jé/4„¼ŽµA²�Jžÿ•8xKKh '³fª¿‚ $ùwdÀŒÕi¼<0K*Ü£Ô±ä�Y ¦¡°ûGÚ£ Š!ëéUÌ›v”J¼cŒòsT-ç{yL�À#±g–öæYB³KÉò*s弑¼�8lj ^Se$Þ:AÚ©ÛØ¢L²±ažžÙ¨öí'’~µ­ Xhj±#å§ïý:~µë6’HªH鎕z[í3tWôÿõþUJãLŒIu{)%çŒ+/n_óë^9â•/]WF(qßÐVÉ÷©mäUÞ®2`{V§…ïMñ†“t n‘Ý”þŒk×<=wx‹T´G f!O½ÿ׫×c0e°qúŠèloVêÙ%SÁàŒô"¸ˆ‘ ¹…—¾âqßšÎðF¸4¸¯íög{‡Q�éZ÷—?Ú*ÛÀ’1ØÔ6±ýž2RrjS(ôÃ9çž*'àÕ_í�m| Ÿ“h¥âs½M¹Æ ¬½B[£¾YIã�šÌ–rÉòñëUžPWbð=iÈ#?6X÷§ïÈÉ4Â@ÉïQ“šL�Çz2{ÒMn SŒbVŽßx×S¥éÁaÂ�2YíP�éŒVÅŠ´F⽞zRÚÃ*ø§P„DÌÌ£*ƒ$œŠžm6ý eû;*Ã"�»ŒóŸë[Ñ[²‹íÍ´°ÈH¹ôêjA}kmƒr79ÉÌëÒO+Nå™É@ß*×-}¨î'q û¢³å»/Î{URù ±ü*KÉY®¤c�–ɻφWbâÓXÒ›–M—‘üqÿöJë#}¯…‘�Œƒüæ´•°^'{T©c–;£ŒçŸº*uÓã<Ó§÷EH–1ÁUü…V¿µ�ZÃGúbúwV¯nŸe]…sÈ8ôÇùý*—†Ú&IC:€8ú×D>Qžü Q09 =±MiÌ`³„@rÍï]_„§K�*VGWr2½>êÖõQEQEQEA|â=>åÉÀX˜çÓƒ^]q«Àþ%óÖVeŽÛjqÉaý+©µ¹YâŽU#k€G ¯,ñÌQ¦®6Œ.Áýjçƒ|Aö-¬öd¤¯ƒžÄîþµfí¾Þ›˜ ãîûS­�A ¡=:ýj_0Å!›ÔñQI7¡¨aÖ–Þö_0ü¤ä}*¦¡âi ÄÀv©>õ‡wxó3I$…�¦k>iw޽Bïæ àõ"…DO9ɧnïšaÂŽ)˜É£ŒqÖ“œ94ž[`piØNXº£¯½%µ¦Øn`‰L’nY ü:V¾›•»X¼§Ë1ÛòúÕ]e›R¶H�Ïšrgç­=Ž¢ë¦Ü®Ù6€ÇÀ#úWFÐEÆ.Ø´€ OΔê–ÖpK1Éâ¹]OWF™¥ËI#ÁnµswZ†[ ÝþèíTå¹.IÎsM·—mÔOÕƒ‚ïM‘È�ä÷¯Pø}v·Þ¸µ#tšuÉïåÉóü{}tVîC…Yˆ¦ïóíZQ[<…²Ñ>9ÈÁô©ã°ÑGŸ÷EYtx#b *ØÆ|Š1ì*½Å¤kªéàm»œs�E?Ò©ëТŽ ãi-�cþZ‡ŒFÄuùIë[ŠÐ�º¹JU”°ùcoÆš×$ËìA�âo­tº4«>• ŠÁ�ÝÈé÷�^¢Š(¢Š(¢Š+ÄÒ¬_e-œý¾•Ê]éV7�›hWþúpkçE¹¶%b�L£¢·\UI&k’HÝ�qþ})�‡~@ç½B#%NÌç¿¿ZmSQÓÜÏjÅJ¿Ì½ˆú~u³¦|A´ŸjQ_¡aÊ“]Ái~†ãN¹UfÌg ýEbëWwv6“-õ¸xÌeVEäníŸÎ³l­R;dØqϹ«{p>ƒš—‘×㚌ÆÃo­IƒŽp>´Œ¬F4FØå¹§2`c­4Ç‘Œw¬ûÕ†ÒX.ÝyrF:Œôýk§²�únEÐùKrÅ{qøU‹‹½'CF–êá|Ò9,Ùc\¾§ñIÙ Ò  ’8çòª°Ow9ÌÌÏ!±o\çü*ÂÆ€ ~u2Ê#Rà`š•<ë° 03£=kFÏ@y˜=Ìä"ÿ|WCmke`1*698äÔí+2FFrÝ{TVb›ëƒ» E Äõ95Äx†Ý`�Å%FÑÀø�u ?&5Â@2‚®À0ÿQV'ù!õòœ7áÐþ†¬]º}× …‡éVãE¨¶¬· õÁ`N{ätüétMJXtûù®f.#uH÷vÍRÖí¼½FMŸê%EtÁõÎOéšóûÉdÓ¢–X�Í$²ÆIÀ¤~¦“Âq�Nn2ªD„ûàãõ®ò<*H¥! †_õ|î_CíR£ äÊ’b­ÆN”Üúq\lö^}©‘xÔ õ?üIüê•–šn¡�!S�J°'«RÁ¥t”Ij$^pý54�Dê³Ç²ïÁnsßõ¤6ªÃb–O”Œu'µUš�ù‰ÝŽqÇTMk#CòÊ¥€ jŠÿHº²h•À-+…\§8®ÃÃV¶ú}ªï‘|ù¹sžžÕÙ[²; ².:ðjr%ŠÒYãMÒ3 õ?à7Vœ®“pQ¦ ÁêÜ׊ê Ó]ÝûÁɬ¸c-¹ê¨0CãÞ­ÑÞBñœ:Ê…O¡ÈÁ¯gÐ,!(ÖUNõ‰¶†îyÿëVâ<0ÞÝFÓ4rïÉàŒ ¸ZaüóЃ^ƒEQEQE|¯yzãoâå[=rúÕ¥áÏ›gšÖW\B{7zw�%óm,d=YI?¥sZ^!™þzÔÞKŸ,zb¤c»R sŽÕ—A'œU ¯¸àÖ|îÓFp #šÏi«"�œõ5Mäà`äÔ[¿/J\S×�óu¤,1Ú˜[=i¹â”b�ÏÒ”ñÉü(RÒ>ÄúúU˜ã¾9êk´Ò!Dm2pï wöã]¦Ÿwhc*‘ð+�‹WkOO:¶bÈì1úÖýþ¤†ØÈòg2.~™šuÔ0¼9ùѰzŠÆ¹ÕÓ{4­ÆÞ<ï\•Þ£$®ÊÊOj§±�‰fãÜÓŽ8¨ÙÎ8©î³%ÁÇ~koÀÚƒé~4°˜bvû<Øþãñ“ìiü+Ö/­þÏq"ãŒäUh Î=ëF4�ÞN=êäp£I9èyíš�mãÇÏOz­©@Š–ghÀ½‡’}IÖ›ª˜-ôùÉ¿�Žç<Zàü%¯Ãa«\[]dïÎÁôÍu·*Ž<ˆ`Ï»ǹñ=쀀êƒÃY7:¬’œ¼ì@½kÖ¾ÍçxZ鳜^¸ÿÇ»º(¢Š(¢Š(¢ŠÎñlðÞ¨Äãm¤§?ð_?Þ^ˆ®d#åu ¹ÏQþMmø{ÅDYIdì7¡Y>‡ÿ®Z¥ã†Î£õˆÔÖV“ˆ§gUoÓšÜK�¢¤[¥=ZœnC�¥E-Ú¦yªsÞ“À>ÕBãt«»ޤU'˜¶¨u5Uß§9õ4ÁϜӶžÝ})à¼õ ž;S ã&€:zR€1šP3ÛŠ]¸äõ4±+JÛW€:šµÔ0Nj==-aÈæŒúÿ€®²ÃP�mÓoPFqÓÇxsX{=vú0ûR~sþÐÿõÖõþ¤�`f“9rO⦨ɯ¬¶Ê×!†zV-Þ®�&27ÌGÊ3År³ßË;mÏíP¤lÙ,Ü}jRÁ0Æ)b“F}:’U-pãÜšìþ_5·Š¤´`M½ô údÏäÃñ¯Bž ² àu©öç¥ |çy'µy F\’Ù=yö«+mg?öÑ«¡¢Š(¢Š(¢Š+ ă"Øÿ¿ý+�xÑ‹ÎÓŽ‚©ÊX;gæùºŠ‘a·¹ŽªÃqá‡JÀÕ´Xì£7ó×x]�Èɬuw‡sH˜Qч Ôi$RmRw|j¶§£Û¼Â8â v‚ZÉS¢'Ûln=‡ àþ·?ŒUðìÐ_B¦U1¾õã?0ã�Šô·†4–S˜ä0ïþ•kCªé÷êî¢`{n«ŠèÃ!Ôç¯?çÖœs�þȦí<Jªr_ëFB“ž=Ïçýi�,QŒ¼ˆ¿ST¦ÖôÈ3æ]Çî¬-Sĺ}Ôb I» �8uüÅik¾9½LZéʰ*á u=:ŠÄ].{©‘î¥2Jãq,sÖ¶ìtëX¬ä)wFx$çµH·1«ÆÁ¾ðä~4óç3–À�1�ÏþÓ麺*M;™œ¨a»îò=+BO.2ʃ¢ô§J|™ˆhÇ#¿Z¸‹’:’zžµéñÏ?›3;Ž0™ùE_@#@UGµy×ÄI­¥¹»VýÕÜaQëù á­ÓåZ¿àކ¬ˆÃ†�ùWOãP—fЧÞFõ…‘þ£ƒþ5©Œ?<ã‚+¨ó¬®m~ÈÁP ã€A¨´½H´›‹iä�¤¸!ŽÞB;zÕM|,w6°+²Ý@÷ä×™Þ[ϨK=�¸FÙ+Éó@݃ý+[–/¦›øæ#ÍótÀRGþ…]2`&:`ÿõ©r@Í"¨ˆ`p‡VyÛ=+GOñ~­jØ7,ËŽ ×Ký·6»¦Ç{;�%°˜Hƒ $ §ñÍr1[ý«S¼ |¤n©ªV–{’ûîmoçTôûE¼×,í$m‘Í:ÆïýÐO&ŸqK•Çf^^Ïà«¢³žúc—¼pØï�òk¤šÞ+ˆöͶzÕeÓ<¡¶;¹‘;.zW£QEQEQ_!k» —b¾ "d=A°Úã ¸滟9}DvûÒZ£ŸÅTÖ,*VÂ;Œ‘ùš³öƒ*g8¦³¸èhW¸s„šSm+s4ŠƒÜÓ –�27©éU&¼m¥QB©…bLçÌ$÷¦O4á<ñR  {Ó�4Âx¦1#Œp Ž¢“>‡Šr°ž¦•#iOj÷5q#Q�ëJGÍÅwd@éúYïäãÿ«³Jöú„OúöQ�ƹNsý¡s·ƒçi‹u5Ôo HI [Û“UÞçd�Õ‰#ƒïUg¸ rµQ%Tç5Éž•sOURÍZq‡Üyà*~›-ÜMxm#.Z²0pnn@¯]oÛê:E­Ó+¼°%Ç@ã†ÇãšÍÿ„‚Å[qf÷©WÅÖ1�rçF*Ô~5µØ ¡ú†ONX¢*&?ÍÕüOw4šo•$�À^:6jªêŸj¼�^Só8'5ÎêJÖ7ïx�µ’wP¾Øþun-ed‹q={Õ º£8#xAïIãyÇJ÷¿�rùÞ ½|“ÿ)þC޽:Š(¢Š(¢Š(¢³µøŒþÕ!“%¤ª÷B+æmjdûSÉ€†cò÷–·fXÉܤù×sãÅÙ«"v ?SYC0Ço(ê~¢¬yÆE4o� = Ì€ìÓþÊßzy•}³“Heµ… ¢ooï5T¸ºvR¡@_AXîÇqúОÙÍH±÷5(Ú)‡ÓvúS ô©8#9ƒŽüSÁxiÑÂÒœ’U?�^�>Uý¿+ý*š&5G9�ù‘&x5O³©ÈpÏøm&¸Ç¹pû�í`ăïS‹©n¡%¤?» ŸaÒ 7{¸$†Õiç HÆAõªÛ•zi¦Lô õ©âU%pyÈëVœaÜú“Wô;ÛûÓYŹRæ)YÈà2ç>àšõ­C^²¸�.áW1º†Î;k9|CcnÞß•XOØÆÙÛŽ€UÔñ�¹Aå¦Idþ ñ¤îß Dö¬ÍKÄ—ROm$“d$§N1•"£·¾·�BÅ�àŸjå�ÛL¹K”~\2²ûn#úVšêêÑîÝ’}MW—Ri�øª/xOW8¯ ¾?™ðïJ_4ÿäW®ºŠ(¢Š(¢Š(¬/gm¸í~+›T-&W�œŸ¥W•[(Õ¡-Ûœv<Ö„^:Õ|Æ7ú­G7�õiË"'û«Ò³æñ©8Ã^I�@qT¥¾¹”þòiêÆ«³±9$š³häJ£5×Ý´be–T6ÒGaÅ[:ªï ™¨Áǧ¥kéZV«�"Ž;×O§èVv ‘÷ÍÏùëZ[[e”D…Ù,~œS´ÖûN›o)”Æ ì?Ƥ‘Ó|‘§/$ –Ü6â@Ço| –0Qðq¸òIïþy«ŠÀ¼‘ÓÞ”6ß½Àýjåüc¨i ¡ÜÚ^\/˜ñŸ(/]çë^o§Àïf’8ê⯈°‡ØSÔqš‚éBY골Ïÿ*Ñ?|ýMZO2ê!dœ;²•ná‡OÒ¶5¹Š%™vS qŸÆ�q¢›æ…幊œ¾ÞTc�ïÖ¹�?‹•¼IÁ,Í‚1‘’?ÀÕi-e{Ÿ5#�ó´ó�µ¡ý€H6·§Z“9Ï®s@9Èõ⦴®á‰ù]Ù>⪥¥»)uŒ+¸-•㚯md-šs†‰Èp¹þ#É?–*�£,3O½_oÌÄg?…Yhžq £’6r:ŒqS2¬™‡È*@59,јü¿¼=N{úÕKÔ"KK hüË—� SíóûU-sF¼Šêöð]+\,»Ü!äwãé»ôªV·z µ€Ã9™§8T#%pOZÛ¾”E§)¼³·kµ\º¨ûÜâ¹§šÎhåÝfb’0¬BŸSŠÚÑ~ÈúôVw!�°]‚3Œ#Ig‚mF—nÜ¡ÎxÀª–ÖSB—‚HÊ´åT:šç§„Û]ùŒJlî^kwRÐÓLñ0^¿ú*Ϋ#©ä¨ïþ}kØtÛÝ>êÙ ”Ñ´XÂ…>ØÅ_#Ÿlÿ�.ÕnKlWmEQEQE|c®]5Íô�"âBÄ“ëYå7Ð×¢ø¯äÒôHºm²Œã«þRÖŸG‹Ë ²¯8õæ³®sl òZª·¤ŒÔ‚ñðv¾Òj'¸byb‰œ0<ÔR9¯n•]Ô> üi¥¶Ž8Ó!¦3÷Í0¿½&üR—ÜpzP~^�)7Ó­Kg’ ²¸#oåRŒ÷¥<)9Åzž»t�-€ÉڹǦ+`A²ÄÒû¦óûŠó çg¼™ðHf'8¦isõi�˜d\ã¹RëYò´¦C·vÜúTl“³p® kC7xßò¦¤Ç(ß•(·›Fß•8Z\�¹ü*ô¶³ 6¢3`N*öˆ·–I©ábn XHÇmàçôýkoCZ\A,d —\ûõþU™rûfaïYÒÝymŽ Ô&ý�Ïõ¤:Œ€’µ ÞÊà‚çµXÓ¯dþÔ²ÜÙh�ÿB{Å�£Ö'\ü»²à+ Îh×âƒpÆšdcÖ¾šø ƒáÚƒ�ÏtîqîªGéŠôš(¢Š(¢Š(¢ŠÏפh¼;©Èœ:ZJËõkåFo6嘦Æ=j¬`É4)ýéã½ÇÍ»^p3Â?_ñ¦In³ØÄñ`€£§Ò²n\Ûü£9£KÒEN·o· äzŠkNIåŽ}sM'pâ˜îÃ<çÚ¡hÔ�M¶Ž8 ¹Í1›Ÿ­&ê`ð)AÞy å{QÉéSÇÆIÍYQ�=EJ§‘òòzÔ,6^Ã�ÆÖfhãKrÜI/´ýF+ÌegËpqÔqSi× ‘߉�á8êwü«8¼ÛøÝ�¥'c��ùSü©{£þTï&CÕò©Þcÿ,Ûò«ÙÜ4¨<§=HéW^Úf‘¶FÄgÒµ4¡ym¢ÞZ¤,Vætvã¦Õ?ãúVþ—ç Á2càgÐóýk&Wùš©½ÑF+Ôv¤ìqÇÖ�í FqÐÔOw+\õÍjøjéŸÄ–(Ç!™‡?îš­­]Jd$à;?T<ç@ósW^uPV5Üxp1þEF ”f�÷(àzTWSj"I;%¢€'�ɩ쥊ÞÚ+tTá@ôŠ•§�Â.ùK!<`×Scg¨�ÒßΓEP‚9=0søÕß ý²é‚�†åÏ “š³âÝ>[é,&·EmÖèd z¿9þB²!Ônì6ÁU3•éóÿÊ·lCu0ØB± >œÔ‰¦Ü#6ÀGRjÌ6²Dà–REsúÕ¡†Cp ùMר×1tPœ«~P·4„ö¤Í=dѰþSú×IãEƱ.\Ò¹†û´ƒ¥)®S_Rü §….âˆ0X¯Lxn¹X¢è4QEQEQE“â“�ëDœ OÏý³jù:å‹Lw6îzÓôåêÖ1ÿ~ê%üÜWoã™ñ$ØäaGé\Õ–¯>�'Ë—ˆŸ™ m\_Yj º8Îà¹8ê>µ—"/% 1\ƒNÞIæ—Ì#ŒÒoÀæ“ͦï$u§¦Â sÎh•Õ†qŽôÀ´¸Åf¤&œ À©£8<Š�'Ž*u\qD›qœrG“!•áË¢ÙI9ÊâªËàÿΟº�ãoö”Ö|¿-]ÛÈÔbÀû¤œfŸÃý>7o´j ´zsš¾¾ðÔ*<²7²ÕÈl´ d=9œ�Œ¹ëS¼ö�ªiðÆ£Ò³î.£‰£Ž0ëÇsÿ×®¯Mº-¦AÁgòÁǧãSÎs#q�º:S^UÚè£îòjúm ~|TÐÏ"Zìe;÷äý3KE›/€ÛBäS¥Ôtû$°y1�©ÏùÿëV%ÿ‹gÞÐÚ¨‰™Kêx¹ «»›ü™d’I<óŸÂ­.—} ˜¶)”ž½?ÏåZQxfïš9�E‚ÌOSƒÆ*×Ù•â5 £�€=ÏøUJìQ…^ÒœzŒ L}ÆÏåUõ_Ýé­ ]ÛeŒã×ô«�Œ^xÈþŸçÞ›·htTŠî§åb¾Ô™ËgùÔdüøÿc§½ZÔ›qßßɉ¿Aþ àãµ(n0)wŒ{T±00Þ±À©ù°ÿëÔlÆAÐsî*)…´f27n^O§z­%ËÇ}[A€à(ëÞ¨Þk iu$e‰£Ž{Õû}V¶k¸aË)è=3Þ¹­Zî[Ùó?!Hö®ÚûO–×Rû<'zÁœñɸþ‚°æðݵÈ)­k!b H2„�CZ>ðÕö•|óÞZý¢AÜ2;Ögˆ£º›T{»¤gˆ)0Æ=8¬Ki­„wU¢vÀ±MhøjêÏí�ow�0B.)šŽ¿?êÍM§iz•®¥m1²ŸjH ~ìôèJèïtt� $,¯Œð+—¸Òµv erñ7øUc¥êŸô»?öſšt­K¾�w�úâßáHt�Kiÿ‰uçýùoð¦ÿdjyÿ�ußýøoð¤þÈÔÿèwÿ~ü)±õLÈ6óþü7øRcêŸô ¼ÿ¿ þ«£jŒ@]2ð–àsúR¶�ª&Cé·ŠAÚszc¥7û'SÞSû>ïw\y-ŸåR Uÿ mæ?냅Hº.©ŸùÞ߆ÿ zhú lÿfÞcþ¸7øU…Òµ äuÿ~[ü*a¥j°ºÿ¿Mþ­¥êE�ϧú–ÿ ít¥i¶©1 "Ä¡”ðA¥j‰ã ĉøš†)¢Œ“¼ç½XQí2ŸQV཈q¾<ú–¬ý¶Až=œV&¡v…÷F$r8ùqŒUy/Œ„öÅVk©7°0;df¡S0À·)Ï÷I¨ZæðÜ #ÚFB˜Hå"ã8éŒP0¹$\T/^fR‘ZLѸéRæn4[¶bRÖl×3T›EÔW¥•Áÿ¶MþÑ£jDñasÿ~›ü*EÐu&#ý aõCK&ƒ© ZLIî#'¥tÞ3±–ëQY-mä”4`“–óé\³i†ßøðºãþ™7øRcjAäuÿ~›ü*Ο£ß�FÔ=œè¢U%š"÷⾌ø:g>Ôâ&ŽFÔ¤<‚7~î>kÐ袊(¢Š(¢Š+'Å>Ör2>Ã?¿»jùhéWS·î�~,[Ó´{‹sN–]¦8îb‘È9†Ölj$7ºÕÄéÊ3|¿LVÙJ‡õ«ºDRZjI#¨1•dnsÔqúâ´¯m-ä ñ�§Û½c´n¼´Ÿ7z>´º)1J;QøSÑw´�Ç´‹ÉÇ¥L¨jENzTˆ¤•2çÒ¥ã"•¹ÔŒTh 6IÅY.v� 6.1“V<³Î8 =ÍN.¸;ŽéŠÎžéÁ€�äüÝ(’ù>R¡‰üª}€ÀÇ»Ó&�_“Œ*§æj!}9•Ë0U*:J˜Ü©<¼úN[˜#\–”ŸBj•íÒÌ� ¦an€žA¬ ,N¢û#/¥es÷V�ìù˜ð£ñ5oN³–ßV²™€Ûñ»sØ0&¯x�ãVšXGîÙ²?!YmnxÀ ÛœcsK�àÔ¡¸_+syçiÇë_C|9bþÓX¨RL¹þº½u4QEQEQEpua¥&–L+(‘¤Ü§ÐmÏó¯?šïE»hg‰L21Ã.>éõúU3j°q«*�È¥8<Ñê*w‡ºÖ¢jÓeb|ºÁïZÉ}Œ†Ü„a—¸ÿ9¨îE!bá2£åAëL¹Ô"l¶ç=ö¬©5I®#(ÌUUNqYpyÏ �#c'w©"·€?Ú.'H©ù,jÒjúN—j�omç\°Ï?Ãõ5­câkW†2èm¸oJˆk@1!To?1ÅfÃy#GpüÅÀÛŸñªí#–mÝ2qô§«ŠF` ààý)·$:B¸ÈûDdýsK+odä§Ê}ÂôþB§Ûž=8¤ÙžéJW§¹ü©¢1æŸLb¦¼>lqò?ãØ/ЂÃÊ¡ëϨ¥Ï4uÇO¥*6-$\�^Uü†Oó¦�Æ#*“´ýÆ=»òi|¥3oÎ>\V«l~Ù&NàÄþŸ#ØLϳz0ÚÈOQQ\ڙ줟ËbåøAÔó^�}r�¯]J¬ ¦èzôªÑºˆ¥îýé<÷¦µüÖ9’ÖWP9(³eÔžêÂAp¢PYY” ô©´k� ? _ZÞÚƒxòJñ62W!vóø‡GÓ4ai к’+³´¨GÊ�\­õ«É‚ á‡J¿nu#@’8D@sØUÛk›è–(œ¨bOp;�çWṸ-—Ï �qÎjìz‹G©—=NÐ+Fß\D¸:¨'©Æ>”æñ6ž¬@��®=kÙ袊(¢Š(¯ž@Å/ãE&i{P) c�(,@À”ä „÷¨d¼x—s¦ÕÝŒš± ¾rn>˜5/­8)=ºöúÔ�6ˈ[û²)ýiž$ß½1^;€Àø“4ÓþÐó06ù{søÕ¸ø4�|ÓÕ�R1H1žz àæ�ð+oõïßæ?ÎŽÔsOàŠ;ÒñFqÚ— éEô¢Ž”žœÒÑÞ”uqJ: SÐÒJ:RssƒíH;Wªü4ÿ‘nãþ¾Ûÿ@J쨢Š(¢Š(¢Š+/ÄÜøSXÿ¯¿ô_;DvԻ󃚊C»“Ö¢Ç_ZrœsO2qê1Udûnjԑü5 HÙá " {Ãß1v†8Õ¸›ÌPØëéK·ìv¤Å\Ò×v­j§£>ßÏ�ëY×»âk-€à\ª·Ð‚ó«ÆÂæv mm¤~UiTKÐâ¥R ô§ Å;€´¦›üU'jUëR z¶(i3UääÔGéLn†›ŠLRçÆ>õj&'_¥(L� SÕ¿ G;¹5 Ojs'$þ5" §Š÷ï‡?ò!é¿ö×ÿF½u4QEQEQEywÆ& º9 Ÿõý?í�yjN‚@»$gµ`?&FyçúT㨩TqýjÔMŠÓÓÏ›,Êßóï!Ä ÿJ§-ÉMRÎ>«*HÔ`�åR@ì<ÐÀ�Þdö¥™·¦ P`â‘€+Å3o4Ò8÷¦•æ€8ü)àtïK·žŸ€§Æ œúV‚¾ô¦+±¾ä|ž_\ñœÒhSÕ´gë,ç�mÿáIq.f—7œƨÈK~5]À*,ãÚª\°Q’ùÿ&³¾Ð�ÈBFqÅZŠE€s×¥]Yr1ƒR#޽8œõ¥Lb‚)ár0i@ÅH:RäQžôdRɤ¤¤Ï¥â“Õ*Û¶ð žk™ñU¥Å¼-4d´M!Éô`δ¬-"}&ÎhòĤ2œƬyw ÷& èRyó!à8õSšU»„žX¡ôaŠ� )Wt5¶"ŽëÄ·Ö²)#cIŸNMd”(UX•ô§n"“'èiÊxÇùÿ=)ÇŸÆ“ñ¤Ü09•0ýóÿ¼�/P(ÆE;éGnÂ�ƒN<Ò y4¢“ñ¥íKÉ=:ÓÌ&™ƒ»Þ”)<â�¤” ã‘õ¤æŽÔ´ú©J·QÓ§ãKÜšõO†Ÿò.\×Ûè ]•QEQEQEeø—þE]cþ¼¦ÿÐ |è84áõ¤ÚOjLcµ%â£#=©LÇ�ŸóÿÖ§¥«y›Hæ¸ÏÛOfð±ÜÖìK)õäæºV°Ž5CA ‡¤1ÜÇ÷dY£ Ryò!ýí»ܯ4å¹�¸ß´ú0Åhil¿Ú¶eXß/O­Y³·ŽéuHÙNëpo~µOiG*À‚àÓ²Gj1ëR)=êLRôïK‘ëIüU&{ÒŽÜÓ³ùR–ü½)3œÓ FÎÇJiéM£§4€dã•¢#š€©Éâ›å“ÚšPŽÔ›}¨Æ.(#4˜ýiBäô=)ê03^÷ðëþD=7þÚÿè×®¦Š(¢Š(¢Š(¯:ø©œºXôsé÷+Â/~Òšå�´ìÀDÝŸ½œsø“]_Ùe…öÇ3ö[‘R,—ã|!Ǫ‘/"ä8hÿÞn)QÆQÔþ5«¤1ûq°È?ñÃK\és])ýälÎ?üê¿™Ë{�äÏôªì})ÏÒ 4ƒHFOµ¥8Úœ ŒfŒñŠzU•’—y$€yÇZÔŽluûHû�ñî+F,ÌsÔž©4ñ!ùäQ횬×jÄùq»û�ÅDÆêNB¤cß“Tõ RtÛ©¤™ÎÈÙ³œ€Mcøen¯K#Y2IîH?/ò®˜Á‡ /é@\v§)éOê? z1NÅ8=Í(ïKßµ8t“8nÏNhÏ>”�© â”&á‘Me*)½x„SóP°É¦m會¥ÞœXà㯥1¹Ôl9úŒ¯jM´ïOUµ8SÇJ)<²ÇäñIö|ÿ }EQEQE|õÍ*�ÄZÒ† ÀqÚ¤–Ì÷qÞ¨ÉjÊO§µBce\‘NŽ2qZvÖàH«Ñ@®ÀcÒ³µk&ŸÂ÷&% âC"‚:üäcõ¬ß ´7úaHÓ`‰ðcþàlÈþuf{V„ò*¶1FÅcÊ‚*&¶…—>Xۊ膚´/^ÒGI—…}Ùaœ:Å{©.«îW�å'úÔžVáþ±½zÐaÝÿ:+žÿ:zÁ:·çN0ÇÓZi�ZÍ”~ñ‡ûGúÒöèQÍ.y£®(ì8¥sAõ¥Çj:šP¥Ž*ÌPóÓæíSùA¸?•Øg¶jU¶¶9¤k`sÅU’Ü¡àqQ˜”Ý�Œö£nÞ);{ÔƒÜû?ôÿëS9Íz§ÃQ�\×Ûè ]•QEQEQEeø—þEm_þ¼¦ÿÐ |è8©#]Î+J(3ü?�¤šÈsòàŠ£%³.xȨ^2£¿=éÑÄY¸ïZ[�Î*Ø…æ | ŸÒ°¼MdËá«I’—Ée,„}å+“ü¨Ñ£‹PÑàx²UA�Üc8Ïá�øSg¶hNöÍCƒM1©r‚0{T–v�BÛ1…ýòçj&�$·³ZHèê̯–Èp§8þU˜÷ zÂBYàŠ_#?òѸ÷£È_ï¾>´¢änΦGŽ­øšq†>xéïJc@xZOâ©=(^”ìóFy"‚zqMéLe Fi1IŠERÇéVb‡¸>Ÿçñ© ;†)¢Õs€8[ p)�j§eyW�,mák æ‹÷X1´‹Õ<Ã#ò­HíþÙiÂò^0ã ã?®j»FQ°G4`¼2=èû4'–ŒÇN*î“m�F5ŽY#,®8?칸Ӵs,-æ[»‰%V^ùÇ�P’´Êe‰€Gä`u¦��Þn=x¨Ú9?ç©ü©ž[ÿÏVü©Â‘™Z�Â;»qïL1àð[?ZQçæoΜ!íæ5Ç0¤òÜÿËSùSÖ9üµý*@²(ÿYŸÂ¤Š÷ì�÷…g•F:Ö³ZÜ˪Ù\\ÎÉpÀ/È@Ï¥s†Ý˳±÷j<ˆ‘¾X×ò¤=08§ÇnÒœ(úÕ_¤šC¥Æ|©X!«’@úœÄÕ�Áað½´†!yD„MÀ�jIjˆÌ1Ï<Õ+‹p�>•A”‚{SÐexéRƤ \S°1�IÚ—€sÈ¥8#SUBŽ)iž‘’y«K1�óÿë¤kmÝÏùþ´«j2(k`GJ­5¶2GAULg9ÇJŒ¡Î1ÍpzRŽ´ø9™T÷8¨Í7æšGµ:4Ý%hGj¬>ïô¦KeŽTbª´,�E!R¤ÁéRÃfkJÞÙ@É•emŒíítQEQEW€y Œ�Çj· ·Ì­ŒúÖ¤ãð©ÌYÈýj¶Ï\tëPÉd¤vÇJlVa8üsWð;ô©2¬©ü©2E„XÀÌ�þ®§ü+�º�n¡ÝåÅ*—Œvul}A?¡®µaŠúÝ&B[¿ãTeÓA#ê+*XŒo�Ê£a��x­]’Újªa•önFe';² ÿSY2DEÄrp¥Ô�QœŠ“¥.•&{ƒJIÎñšRÝ1Yrß7ûÇùÓº-ãŠ;ÚŒCF ”åªÄQƒ“W#Aš˜'Í’?Ïù4ð¢ž>Þ´¬¼qMxA¨Ì#¨–ã°ÅVh)€ŒS|’cúÿõèû;ñÆsýkÓþŒxvàÓÛè ]�QEQEQEfx“Ÿ êÿõå7þ€kç±nàŽ;ÕØ-NñÀÇù§ #íR4%”ñ‚jµ NqŒÔX†ÏLREhŽ˜5e`'Œ{ÿŸÊ‰#1Ääž6“úSå�[ì�ÈÆ”«o-óýkŠÐØhšÖ£§Í&ß-ñ°ô` ? ë䳎â5�«.Aü+>m1Q[c¥e¼eƒKæxòx.£�­h$r[ÞÜIJ¹ƒ2¡Rsê3ü«)a+8|ðÑ€G¸ÿëTÝ)}E(ëŸZ\œÓ²~¼R–íMœw©3À uéKúšQÏãG^”„S4„J£5bò�N:‚­g¢²O0'ä, =¿:~qÅ4ŸçMä})7â“<ýy¡�l┊@{æ”NÒ—$óNÞ�œÔhŒ÷.Ì~_•Tzs’ke溼Õpe)3ù{G m$�ÐV0ä{PªÒ6^M3~ éÞ¯%ªÚDÒ6¨ê~µÈ߯uÏØÙß áŠáQ’ÄûœWX@:t‹´J0:$oóøPèÌÄúj‡±üj„Ö»†ö¨ü�©ŽÔ¡qHEÍ&;S©(¹¨ÜdƒÜš‰íÆ Ç5Yà95“‚r)Lb9ûƒQ´LY‚ƒ€qMòŽ1ëÐRˆX°pjíµ®•ã×õ­H!Àÿ“Nh7€3ïP-øùx¨%°ÜGJ–@ gjÚÂzãëNØÉÁ¯a¢Š(¢Š(¢¼h[€8©<  YˆtÇÿÏéSœU˜–'ž(U 7õ©Bp*P Ž?óøÒKòÆÄá'?�ÿŽq¶ÖóÞù8®[â=‹I§ÚêpdKØŽÝ×úŠÔÑnaK+Y¢ìw©çGÎBÕ‘øV”ùd÷ÇJúfÏåT² ëq•žùB÷Ž\Y7#¸<0Ô[ºdóÞ“ž�éAïKڔʎ2k:Oõ¯þñþt¼‘J¾´¤SÂñÍ8/4§Žƒ¥0Œ·ÔÒ r’»}M[A‘R¯©§/AïNãü©qŒóN8?�4`uüi¬¨Šg o—ž”¢ØfÆ*qoƒïÓ§ù÷®ÿÀpˆt)”w¹bsþê×QEQEQEQYúèÝáíLö’�üp׉}œ©V°ŒtQ'þŒjèh¢Š(¢Š(¢Šä|p3ýœ?ÛoÓiþ•Ë·S·Çhÿãé\³d4ß$^aŽ×P8V_îŸÁ뺴¸&3 Ùóâ°=i·YÁî3X“àO­M¦j¶œŸõ UˆÔ›I~^ˆãò?ýzÍfÃè!?¥4Ÿþ½%ü(8#§4€zQŽE/c�­÷¥þ8æ�»ö©-ù™Tò7�óüëY[ã‘‚#™½þé‡�dñVí†cÿ×[0'Ò³õ©Ò[YѤe¶·_:á‡÷Td�Óó5�ðêÑäŽóW¹æI3“êy?�Åuq(kI”ÿÏi‡þ çG”úÜ7þ‚µÑQEQEQEU oþ@�ýzËÿ šñ²1“Ži7ÇëøÐ‚&ƒ1 RîçŽÆœÍŒqÀíK¿ Õ' ÐÓ&bvƒýõÉÇ?Ò£“‰í=C?þ�T|U§®§á«¸öî’ç'á÷¿LþU™á[†Õ¼ E³w`Æßw|.6ÿ㤴�Ï�cÃtaïY·)’}Ç5UÁƒÖºK�z@£!¥}Ôÿ�aÈ„>PÌ?ÏéL ‡äwÍ;tNÌb9Pqôõb”ŒLqÓÔ¡³IŸ›4óÒ”SÅHœà H8"˜:ãÖsüé§?�(æ®GÐc9ÅY_»Å?¯lóŠ@cŸJ^ÀRdš#ëM'Ši'8ìi �Â�ÊÆjÓcìù÷éƒSŸOóý+Õ|Ç…l¿àúVåQEQEQ\‡ŽϦ¯¼§ÿú×+»‚HÿCÍüCÓ~Ù¡Ey|ËfØHäÌ~µ§÷ö¦‰c®D›$jf¹0ü54³‡]Êxnk&uÉ ò2 -“Ômº J§?�jY’Zî¹ÊÊ>œ�ð¬cœ©ÇU¦ €cŽÄÒ�»ŽÖtS@�!÷¤ÏCØR‚1ÏçHZ�LÒ�Æ3K�šr,w0Ryæ˜>÷¹«zz¾·\g2Ž?ÏÒ¯I+IytÝ1 Ä~$ÿ�b�™H cÅ\¶È`sÒ¯=ÓEÛóJß*ëÇÿZ°¼q8°ðÄ:jgÔeQ!îQpÍúíÑhÖCKЬíq‡ùŽ1üMÉþ¥:…”g¸“ðù³D.~Ïã.?/ÿU#žMVy8üj»­F:Sæ—ŠQÆx¥ ØÝŽ)§§¥!ü 3<ÓEOb®ÅÛ5047CÖ”pG4™ãŽôg¯çM'“Í1›ÓAÉ>ô‹ó1ãžõ4sÐTè Ë/ù�ý.1òã¥7¿ãI�G¿ZrÊPõ£ÍÜ@Ƕ)Tå‡åN-ÓŒzT�ò@íRq´Ó„„òÖ½RŠ(¢Š(¢ŠòF|Œ ‹9§”¹¥CߌÒã##ðÿ?•)9vÆ)9ÿ”61éD‡(êYAüê–âõ�“…YI¶ºŸCšá˜�|KB>[kÿÝŸOŸ•ü˜]ÿË>õ<ƒïUÜ\ŽGj¤FZ®=âÛ¼*HÀ qןþµ®T¸`N7ç5R@HùIéþ ŒmÞÍŒç4§éJ:ãµ7šAÖ¨±ýã{’ZAŠ­H2HV¥¥©Ø tÙ‰1�*'°LäšcYŒŽÃ¡ªWžSät¨vcбJ³;ð*`piO^)Ç�Â� ”ƒøÒw§ÀëÍ=S?Z�&à3ùSãùv«3ŠA*ÁlV Š {˜®÷Á‡:<ßõðßú ×GEQEQEQTu¯ùjõí'þ‚kDz*0 ¶{S¶sÇJ zñÜý)v÷þ_çëA9i#¿ÍHô’`´c§Í“øQJßév½ˆóÓ…ÿ³©m¬>B#Ô+…ðãÆú†�䈮�òóÝ“‘ù©?�­ûœ%Áoáo½Š†Tܤõªer ö­Xo-m|Õ‘YåŒ �lgõ¬ù“72@ÞsL|çp'Šb(ÀÁ'4ìgüÿŸZP ÏéHGùÿ?� i½XŠ“8…ö©`ÍkÛZ� ‘V ˜s’?…¬�ùSÇz.xÅPž×Ê��Кˆ Nœ ²�‘Þž§×¥’8¥##ô¤ÛÞ““4à˜P3“ïNXò*_/w^´¤f2„ä” ~Tæ™#T20Ø*g¹<â½_ÁÇ>²?õÓÿCjÝ¢Š(¢Š(¢Š+�ñ¸ýîž{”ÿèÇîÿ‰€öƒŸÅ�øT·0.¡csføÄÑ•ïv?¥r>¼1éhÓšÞO65?Ý<0üãÕ°HŽR™Â“‘ìj)×‚Õ eÄOèêZÓÓî¡7Ó§˜7HfÂãÛÿ­YK�Àîùy¦±!²qŽ‡ŠŽ$XâT^§wÍyÇ4ÓÒ“ Î(=iiÝ))¬¨e�Ør„óéRÆ[ø�_j·¥dj¶Û�ü´àR›Èd–v�÷�ÀÀ÷ÿëÕ0ßZ¹…œ sô©¬È’à;vû¾ÕÍÞ‘â‰Úçuµ€‘Û#æÔ…ü+¹–]Ò1õ5JݾYÇý7Ô)þ´ô!c#º³Ö˜í’j«f£~j`àæšNi3ǽX¶ˆÊý8¦¶¹M¤g±¨ßM@¨Å�ü*¬Ö ˆO|Õ_/¤Œ`çµZ�°@=jlñÖœHÇùö¤9ÿ?çšCÏÓüÿ�9â˜zQ‚HôïK·'*ELgŽ´ä�ËI=0üɹ®šx³)Ýô¨v MÔ¾¢™Ë27¡¦ÓüíEŽ ð¬Ó:„ôã¯ãŸÒ©1#fxÆsCt9¦ŒRu£8Ò@?*B)Ùç4§ÚŠCƒOüÿŸóÅOa¹î!ÛÁÃ}±C4ºuÚZˆ£¹€î�?ýjŒ&N=ML3)Áá|Þæ�%Êi¶77Òcd´„zã�?�¬OÛH–wš¤ÿ5ÄîWqîOÌÇóÅue²MCoþ¶äçþZñøªÓÕ¸p;7ôÍ4ò"¢aP¾ â£Þ›Œ·µ*‚íÇZܳ…cAÈÍ^@ ÿóõ¤—hüx>Õ ž‡wª×2+.ùëY²§ÎHéQ(Å<6OªpÇþ´üàÓÞ�þýéIçŽ”å °šGN8ÿ?ýzLàðiÙÇÓÖ¤ ž¦) ’F3�þ4€º•ÿº3Óµeè³·ö†©k)]ÉpΫߓÉúVÎÐOáABH äóÿÖ¦7͓Ӿ?Z\Œ�ïI‘ÇÒãŽ~´¹;¸ Ìþ\�r>îy¯d¢Š(¢Š(¢¼€H7vëÅ<0ü©Û±ÀÅ1Ÿßµ4°Ç±ÐãךrÉÇ?JPà3Ò�¸2F3ØÿJŠwe©ÏIÿ@4Ö“ £ªÈ–þÂæÍºJ˜þ÷cùÿ:å¼zÉow¥HHx$óO÷[¨F­t;ƒ3qÁéL-Žn•kM”Âò0p1ë“ÿë©uØ!…ÑCævO™}ùÍdÿ^ÏåIžþ”˜ïøÒÛµ/ãþȦýj›©ÞÝþcüéû~ZrÆÛºV¥ª…„qÍYCópjÈrÀœŽ?ÏéVëéPN»¸¯ùÅD±7â¡–Ü6j8í±ž)Dã·Ò¥åsê*6ëÇ?äÒ:Pqþœ�NÝÆ º’{P\IÆiêã=zŸéO ãµA~¢m6ú/ïÀ=¿ýjô?‘cP¨'8 ùT×SEQEQEQTu¯ùê9éöi?ô^4LóÒ¤ 3׌â—v1ÓŠc8éÞšÌ?­7xÁõ¥Þ à“Í;xÇ^œSKƒ7^‹ýMC+¥Äé‹ñÿZk?ï1Ž1šÎ×톣¡]AŒº21î?úÙ¬¯ jhЖÚFÌ–lb9þïU?‘#ð­pwd×§°¦qƒ÷±ZS¦!ƒæ8P?ÿUE­CW¬‘>æáŸØñÿÖ¬ücµ!õ£mg­qþÏzB¼Ôl0ÜÓðxÅ*FµácQŠž6ä�jÈbì9ëÇùýjp€ÇҪι$œsšg”ª9ªòÛ=;ÓØö CŠ“Ë~U ÎhǵàzÓ”ü§éKº€}ý(Ü0:jE`FOóõ§ëÚ«j(“Xº2†Už6ÁoR�{‚°<#`àìí[ôQEQEQEqþ: }ƒ?ôÐÿè5ÄÿM›'þYÆ?ô*<À\ƒÛú×9ãk?·èK0{vÁÇ÷[ÿ¯W´­Hjš5µÛœ»G‰1ýáÁýGëSYK1˜qÞµô£æC8³Ó­fj6ëmzÑ+ïÚÜþ¼UNŸQÖ“úÿŸóô¤Á�éA“òüi)qGN¥÷õ¥~•«¢Z ˸ž4û¾¹þ¯Î£Ô増v;v¦þ<ÓK~b�àw¥ß•Æqßð§ùƒ=EBä4�÷N09½–Š(¢Š(¢ŠñE› {ÿŸóõ©§Ž{b”OÀÁÿ?çùSL¹#òy”Šà�Àäv÷¥YÑœj ¸dô¤3~øz?©ÿëT7<ëaž2äÿß&†›“Ïùâ¢2œŒ•É_ğư\)Û ÙǰqŸÁ†k¬(WŽâ™"ïû§ ÛüþTJåbhÔmtVÝêŸþµrZ åÅ׈.Äó<ŸèÄüÇ=�tÝ¿*B0)1Ž9âŒ:1Çhêj€Œ{ŸæjUAÔô§ªò=êÔc:/#×5v$ÎÓœŸóùU‘�¼ãš†N‡×Žƒ¨ÿ?­3võ ¿9ÿ?ýz@3OãŸãÍC³�1”ôïL îõ¦‚x÷Á¥/Žzžÿ…09èiqß8¦‰ºóNŒŸj{HZ&ã(Ëþ:ï~Ïö�ù›·<‚} ?Ê»J(¢Š(¢Š(¢ŠÏ׎ßêgÒÒSÿŽñ?0öÿ?çúSŒ§$çÞœfüÏùüé†\·?�!“ŽN8ü¨Ý…'Û¥.þ0M!”wéšA)2¿Ðçþ5 Žêô„ÿèB‘¤ëŸóÖ˜$ùÇqÜW!§)Ò|e5†q Ø*=2åý2?ëvõ9ÎÜTwÇ&¡lqÓŠicǯJBÙè?ÏùÅ Ó˜¤{qPlã�L+šˆ‚9í�éG ãõ¤fã�Ïô¦ïíM2{ûP%ô¥òzŠ�P•¿³nŠœ+pú�ÿU{7€¥ø'N•NUð?YºJ(¢Š(¢Š(¢¸¿¶ßìñëæìµÁyŸé“óÑP~‡üi ¼güö¨¦Uº†[wû’¡Oιo Êð]ßéÁVó”b‡çŠêpTŸÈÔn§Ìã�zû{Ô:®£5…œ—.Q—åV‡5•áËÙïôÙg¸�¼Ÿje,~€ÿZÖ9#¤#<úsH~¹w¤é�JLÐàÐ8¥çö£G½±ž´¸âŽp~•ƒªë7Ú^¿j-'1æÜ3c¾Xÿ…t« ’ÞdÈ@aîÇØ�suã4í…†;‘\šgZñÖæ+3åû|‡æÿÇ�uÞq$’zÔ‹.ÿ>´�?ï®F‰ÿ¾@©<Ðf9î£ùŸñ£ÌÈ<âšÍò“ŠGè}鈽ÿ“n:v©âæ¬.N2jÄ#8Ïnõr U ZGä®Än¹¦ïýëóÐüê9›ˆ?Âçù�ó@'=k Å–_jÑÖdûÐ68þéÿëâµ´»ÿí&ÖìžDÿÞ7ê [V¿™ÿ|ýj 3–“©Á î1\�‡Ñ¢ñLèG&ÙÆ=~e5Ö/AÞ”ÿŸÊ›éî1Kß4Ür)FIïQ« cÜóøÓË€*HØõn%Ê€jÔjzŸóÒ¬£¡§—ý*~ éþýU ~NE&sÚ…ëÓè*P¼ÒŸ_óþx¦ÇJŒžzg?ΙIŽ*)8¨ “MÏOZ ŠNsŠRÃìÆ2Ä3dd{­v¿‰ÿ„:ñI9]FEç·Éz=QEQEQEfø„ãÃZ©ô³›ÿ@5áaóœzŸçO-Ç_ZBøúv¦‰(,<‚0iÁð¾ôy½3Öš$'<ƒLWÉr?½�ÐS xsÚú±ÿ By£ ç=;×7âèd‡ìz¬ëaaϺà�ë]4W s WÝJ¢EúiêÞP$pÄa}‡z¥x„Ú\m}?_Zç<(¥.õXÎAÄd�LÿêGÒƒßü÷  }3K·µ(攩ãÜÔ;Ájqq޵2Aæ®Æ¹j0G'·?çõ«*À qqP;c�ÅB[=A™ÈéšU»š‘G9¤#½¿ÏçLc…¨�SÇâ)˜ÈÅ!^?Z…ø¨@4™çŠC†éHrsíQj8“Kš Nãt†½á3øc£I8”dÿ×g®ÒŠ(¢Š(¢Š(®âCmþÌÿ¶¿û%yðrn. ìWÿA£w4Ç\W1ª·öG‹ìõ�Ìß¼>Íò·ø×XÇ’½»Ð¯åÆßßa�Ãÿ¯YŸì™ã�pWúŠÍð�?ÙW#ÒìŸüuk¡©§¦{ñ@î(¤xÅýÅ!êE/£¿Ð QÇùö¡ºä|D øžÝ@ä[ Çü «¯Œ�É ÈÚÏñ©œ‡�:ð§’=¥W¾¾]?N¸¼l~æ2Àz¶8ž+Âm›-Ü„ï�¶î=}Iüÿ•t¹ 1ÏzHÜ‹‹€=þ‡ü*MäJ¾à�åKæ€ÀwëNq�N. Ÿ¦iÊÀ r¶I«rxžŸÒ¹ï LñM{¥7úÄ“ÍAõ;X~`~uÔ\?rÝ=}j$9lc«”Òn!O„”í�DoP{ʺ•‚3ùRžôƒ "ŽAäwªš­òéö/!?9QQÙ3µ”ÁP®qÍXÉÅ=:ûV”M�Ðu«) ë‘þ4ÿ0éHeù»ÓóÐô5ì`çŒb”ž½òjEnÖ¥þå„íùFÕá ~QÍ?=é3ŸÆ’�Ÿñ¤ÏÖ�žþ¿çùRõüj=ä*�…·;gºóú~´ÑÍìžÑ ýZžhï·óªú•¯Û´»ˆ1–+¹~£üšÌðtís¦þòÚB¼ÿq²Aÿп*߸*îB}Õ?/áPL7ÚÌ1Ö6þUÎxv⿹G;n0¤Ÿãõúó]0Îi ~bœ:‚:r�;c­Aª_Gin"y²� U(Ëž¹ÍN;zTðýáíŽ+N7Fp*ÊH=©âLu>ÿJo›Î9ü;Tnû‡^:~ÂçvsÉý(SúóüêPÜ})ÁùüzúÒ3 �˜:úŸóÖ˜[4ÀßN”Ö`0j'=}j?�0õ⎙ÿ?祵(]ðúŒýEz·Â…Ùð×J_F¸ùJì袊(¢Š(¢Šóÿ‰’“J��Ì&#�Cø×žÆwOrsÿ-ÿÇV¤êhÎxô¬�Yý³DfÆZ»ð=¥\ðõÓjzU£–Ë…òå>Œ¼,þ5vf û×…½¿Î*ž¦HÒîxe‡àk/Ã- []˜H¥ÑÿtàËŠÝ�ŽM4Œþt§¡… ?1VV½ª}‚Ž3™\ŽÉÅ^°»Kû$™Éo­MÔû SПjHëøÒ�éC ƒ\ưñeX4ì‰Çðsøó]KáN1ÓŠ’ܦ#÷˜ö¿Îk˜ñuõlž=ø¨ÙÁ÷ÍF[>ãÎ*l‚2MBÍÍDǽ7··ùÿ 3ØÓ�þñr8ÈȬ­YD:¾™&1ó4žGõ­PÇ­;~2I¤,{ž”€â”wʼn¡Iàž½iÁ±�n´Ø�ò—Ž; ÷Ú(¢Š(¢Š+ç÷èÖÙ=#  �éZ^¼ãÜRù¼vü)¥óÈ4›¹=:f‘ˆ¨ÜñЉ¹â˜O4™ôëIž? §ùÿ=*@ ‚U\îý+×>FÑ|<ÓÆ4ùÇývz먢Š(¢Š(¢Šà>&Ì/þÚÿì•çq�Þ\�újGþ:¢¥“MS�ÏSÍ8¢ËÄü£©Sô5Îø^wÓµ OI“!ßçLö á¿>á]þUVùâ]t„g÷d�¥sžH‰ºx‹¥ ÅB`GÐñ]L2¬ñ¬‹Ðõ‡ÓüúS�|ÿŸóŠiAéŒP#ž½ 2i’Þ™ÎFÄÑa:…ìšµÈÊr°©éèOô¨â΃­ ÿC¸9OoQ]q߸4Èù sNêOùÿ=ª½Ô¥Å2ÉÀöµÊÜEl¾&Ù ÌUr{õ'5ÙºB{@úÐ Üê9ÌÂÃ\ñ½Íà··;WÓ ÇêÙ5Ò“““ëLÏÌéŽhÇ^{ÿŸåLQþ™'ýr_ý ¿ÆžýŽq†çõ§{QÖ”¯¡r(ÛŽµb6+õô©¬­J—§Qš ÿ/^¦“ÏéÜg¥7Ωüh�Ù)Þw¿½;ξ”¢\Ž1Hdþ4Âç�zBi…±Óò¨˜äšŒša9â“<ûLÒƒŽkÄÌéqk& HåY ôäVÂôÓŠw8ÇÏëH{ÑŠ:ƒôÿ^æ�jF?#è•(Ê€íé^ýEQEQE|ÙáæOx³óG#©üóýk[ýiO4£¨œîîqF9¤&—=qN I‘ŠNH4g’sþsB’HNíÅ)b8 7jx�ã¾fiwÿ…!“¨¦—çëMÏ¥!9çÚ“ô£¶}iÝ IÌÊ=xý+Ó>(¸?Þº$ÿß?¥uôQEQEQE�âÅÝàíq}tùÇþCjùûEq&�nAÎÔ  �éZ÷÷£‘úÒ÷>”˜9'üŠ\zRícŒ �`ýÓ1í&žÖXPÆÑƒT6»¸ ÁéOÚKøÒìaÅ>i•ê}axÚÝå·‚ú•à`ªGl©üëVÒå/l »�fŒ>cÜ~�¦ »*zã´Dòü[ŽÍƒñ?Òº‰#8I£¼A‚?¼=*u"E ¼ƒAþº6ãœò+YžMBú-*Øà1ÌŒ;ÿçÞ¶¡†;hc‚%Úˆ�JÃæ§�À¤ÇZ23šãŠ~î) ºÒdã4™â•IbW¡Æ¯ô£w8íFïÒž$?‘£~x¥ßšC&:ini¤ñšiïÆO¥Å9¥Çê*H†Kû©?—5ìÞP¾ ±ÖSùÈÆº*(¢Š(¢Š(¢¸?‰1³�7hÎ<ßý’¼æ.Zy˜SðIÇâiH>•,fÁû£æcíÞ¹�±ÓüEi¬*â2À¸�ô5Òpr=}j”ßg8=|¶þUËøU@Ôõ@$B¥OâÄWJÃÈŸÎQû¹zƧÆqŽô„zPztÿ?­sº¤¯ªêqé�#_šV‡zÞŽ$†4Š%Úˆ6¨‚ªêv ¨Ø¼=$4mè«h7íqnÖÓ�·¤jÖ ã#ëF(w!vè?Z†ÊæYïd#>Ã=+•HƒxÒä(Ú¢à�Pÿ^»#…8SÕo?³ô««¡÷Ñ0ƒý£Âþ¤UoXù;ï5ɱ펟­i•efSÔR$t⚠㨦¢–½ s˜Gþ…VÚÔù,OQÈü(–„‘šˆqÚ�Ô­*zSþž´¹Çéþ™è?*pnh'=i¥¹À¤$ò:RÁÏoþ½.â0OB2?­&ó×4á&ÓNóO|þoÉÁïÅAúÓ äu¦ÏãM&›ß¿†—sGQõª~"‹ÍÑf#¨EaüªÕ»‰m£�`†PߘãR�ëH:ÒŽ? yϯN?úô¿áKÎzsRýŸt'©ÎçÅ=íwËÓë^éEQEQE|½¤j¶ë©On‰µ'—)ÏóŠé@çÏÿ®�sIÐóKŸÀSã]ò(ÇSWãh *K¯QÜT‚TT,@iRu"ã¢�ú ©.Ùï›�ù`¿Í¿Â¢KsÉãéOÙÇJµ *DfÇÌÜ'õ5 Â’£Ã Ê:•oÇŠã¼9¾ÃX¿Ò$îL‰þòð1ƒøWJ?�qº©0øÂÜ�’×(1õ"ºå ³c×ú k�*O9~éûãúÔØ 2:†öæ;G¸�€àæ²4+cs!ÕnH»c²ÿ{ñ­™XGcôÔúUecüGæÜrGÔÔŠÙ¤ ïÖ”žÝ)Í(<ÒƒÈ÷  98¡NqN“ýcBi£Ž}éyô¥ÎhÏéG¯­žÔõ…š—È|gõàöÿõ§¡—ë^ŸðíQ4¨ÐýËÇSõÚ•×QEQEQEVW‰Ýcðž²ïÊ-Œå¾› |ÙáíF'ÝbªT†f�é×ük¡#§ùÿ8¤ÇN(îA¥Ï¯×ëRÛ y@ä�çWQ d%[qÎ)ÒH¢Àä®*W�=?Îjƒ*ËsvÄc ¹?E_ñ¦$dõ=©û:*ÚÆ"ƒ8äïè*•å’ßXOhGúÄÂû¢¹�ÌßgºÓäáíßz�ö[¨ü?�tH>e®.Ș|k�Í ÿÇXÿJì§§�3D™Dÿ¡©ÊóŸÆ¨ê÷ɦØ<¤�ì0€ÕmÇɉï&L\Üáˆ=Pv£+¬j;³(¨òsNÝòÒg¨Íóè(Í(¥ÿ À¤=O¥:/õª94ÓÍG£ô ÖŒô4v¢�ÏJp…Šæ”ÀàgT{O¥Æ9©bA$Ї8n+ØüTø3OØA¼×FÍttQEQEQEqž=uQ§îÿ¦œß5çb5e�Çi¤?©Ò‘b+Îy© ƒŠµå`Âýù[Øv¬OX íp^Þ/ÐJ§áË£w¡E¿™-Ï�ÿðÁü±ZŒ¹�Çb‡ùW!á—Û¯]DìŸmÃük­\4`AŠlY‰ü¦ä =ÅK´�¨k7é¦Ù<»*޵‰¦ýŽÙæ“›‰Îç'¨…_•Œ{v(glíèʼjëÐÖ³oý�zº´ í#lÊ;ž€ÿŸjÜ·•.­ÒxÈ*æ–ŒçùÒæ“9À=©(Ï­KiLoŸziVSŒcµ ÏùúÒ�¯Ò¡Õ/ì©^g"2…qéÏΩhW°ÜéñÃùáP¥}ºfµ»f“Ð~ôdt©­Ð;œô{ˉFx§3Fª£Õ×?�K¾6äW±ÑEQEQ_5êL:|À“víã©ÁÍlF j‡rö_¯ùïR°ÈúÒ*Ô† ¯Å1æÁȦÙYGmws>æy$#%�nµj\ˆdìšyÔ8Íô¨;Ç?Oš¦Ú öÿõÓ–"îw¥š]ÎxUV¢ÜrN9®GÄêt¿Xë(>BG™�ûå¿C]Æx9^#½q¾&ý׈íåé¶h›õZëÜ�½ ÿ wlž9ÈÏ”|¦?!åIôÿëV§ækzÚéÃrÛÁóJ}¿úõ¾B M‹µSØTdù“`ýÈøÿ�Un®ßïŸçRv¦Š�P:â�Þ�œRç9ýj3—ÔœG½;¨ÏQŠ–qûÖÇ®i˜äŠ:æ—jHãßÖ•áÛ“øÐ‘ƒÐTñ[í玵9 €dsK½vôÅWœ!<Ö¡)œàRt›…“^�ðÉÚ]þf2ß»éò þ•ÚÑEQEQEV_‰"ø[W‰º=”Ê"¾x½Ób²¹±[u�Ws¯\�ëZé•ÂÊ0zdw§°öçÿÕH±çŠ‘­þ\ãŠlq’HÜTúŽÔÝ:Ê;(¥T,YÜ–'òjAò�þÚãóÍ;o8ïQD Ü\¯a/?‚®*P™ç?çŠ|pï|äý)$”É)=@=�éLRAÏzãïhÞ7Žo»oyòL?ø0®”;×ãÊñݱéþ�Ëù†ÖºÐ6¹QГ�ÖœÊ ‘�F $LW÷RW¡õµÎ*>½¯—‘H´´=ñ6xбýà#¿áPgÌ�È~èùSúÑÜR‘ùSFr)ýGá@ûÇÚ—µ(ÈúŠ N䚌‚pä�==ºT‰þµIþð¥uÞ:šh\g·|Q�Î¥Ž-Ã4� N1NX3ô54VûV§`¨qŒŸjRÊGJ­*¡a€AÍC³¸ôo0~ô�ºr>½«×~< §ÕŒÌ\ÿZêh¢Š(¢Š(¢Šâ~ �ͦy?öJà-¾h�< �×{Tá3ŸóëOŠ Ï—û‹Ë})$˜Èìäs×…1Jœ©V>àõ®7DJñ-ö–䄘e?Þ^U?¥téË`ú\g‡þ_ȇ£Á"ŸÍOô®¶>op)Ò'˜ ”úT˜‹¿Ë°|Ãé\Ý¢¶½®½ì£ýÙ°€ôfíùu®�8�óÃsþ5 1Œ¤{.})Pùr”uùÍNh㸎Xå£� úV‹4šN§.“pIF ÄǸí]ıòS©ä· ¥ÀT £"�ó ôoñ®Cß½ñ5Ì„}éåoÕ«²3ïÖ¹½kø®óT#1DO—ô*ÿS]~ï˜T°È 1?Ýqƒìj3V*zƒÍ7fOÿUE�ôØ”žDR¯Ý©@Ï¥22L?Øüª�õ«Í{kwœ¶ãÜÒ/JBOùÿ?Zrž(ÿõRç¥(=jééÇ4ÖcÛ È ¤äƒŒÿŸ­J`ÎGéQc8Í.yÏ­^”¡Ilb¤0œf£I#½H¶å˜ÝêÌq2F1OR€`~ÉR6< ¨Pv=ɦíÁéÞ©j� B(l2GÌdb=1Óôª£NM7[Ž+1°2•|÷ï�ÐÖÔdÈÃc%OùúÒºŒûÿúèX÷R´$s�J@ŽðºÇ&Æe#?Zv›nm¬6‘¤bKoz°ù&0zî? 4¬§8ÏJöú(¢Š(¢Š+Á$•g®ÏÝÅ7–¤÷ãõ4–�þŒ#<”;?*—co#Òœ˜=?*™\…Å(’q@À–LûÒ–@<²;îõ§ã$àUãɼ¸cÝ#Àôjœ°Ôª|¨ �òéP Æ9¨%»·†îÞÚYIpqxç'ˆ¼/w{¡\)U- ™Tgž#òª>²¸Ö<=ŠË¾Ýͳîë•éÿŽ•®â�&Ÿ¨C¼‚Í78'ü+·Ô´+‹$ÌÊéœvÎÏãY`àó�Ö²µëõ±²¼Í#€u«]»Ah«7ü|ñæ׎€žüU§;#ÏV<ïMD›;©üê¯ñ6?¼™§ã�@ô¥ôÅ.2)iÀúÐT0Áõ¿Ò“:ŸóÚ¤“—Ôú e9GJ•P7ëV"\(à Ò�­ôô¦íÁëøÐÒ�Ç¿ýzMä‘üéÁ†8ü²E§Í,K¹”©™N8ÍE""3Ð�[ÜzW¤ü8ñNÏŽ÷nñÕ®¾Š(¢Š(¢Š(¢³õÐÃÚ�'ÚÊ ÿ€ð‰˜^¬NShxÝS>�¿•K‚ktb9#ŸëOÁëü©É‚21ëSÀÅ*¯=(@qþÙþt®�Vþ@ÓÈêÙà â ¶}ÁcÉœŸÑjPÀ �¿snG““ì;ëP sÇJŠ9à—TM882 Ȥõã?Ò©øÓÃShMt@ßjrpy Oô5wBÓ®u­ÏQFAç'Í“ÑÁÚߨ5Éë:kÛüD±¶È ÷°Œžƒq_ñ®ÃPÑ§ÓÆ]ƒ#62;óüª† 5‰¯Þ2´6àµÄ­�´ò3Zv‘íUxózÈØÆæïŸzt£å>óñôõ4Р"�ü#ÒiHâ’ƒÖ—�(ã½/j6† úÐFAÏN”d‚ÿ?çúÓ¤•ý3MÁÆ)ÀsR„ÈéÓš²ŠG†PIý)ª6¶})<£q'Ÿ­; •ì’Ä�”Ó*{dõ©™9úÔ.�˜÷SæÇ¾8¯`ð Ç‚ôà?ºÿúWEEQEQEWñƒ¦·¡“ÿd®Èh7u,äÿßMV7*Y•�øŸ ÞÞ‚ q‘Å$]NðBÁæ�ï"žEsž3Ó/4éìõÁ S€ÇÝÄdWOm¥]\,3Ãa•C£dr¤dÈצéóÂÄK4\Ë™×òV?Һ˫ ‹7 2aŽH>µZÄÖoäŽöKS›‡ûÈúfµm­¢µ¶X P¨p?�,à•Ø>ó.ô¸mÆ;SdMÑà6FÓéOCº0@Çl{Õ-ZmþÑ ƒw>[c$gÓßÝõ/ì7©ýà8éZ'…ëÛÚ¯Xi7wŒ�  8É=zWà+¯uš%Ë*;cñã]‰¡»Ñôî64„AÏñ7Ë'ð©<1áû» `gćŽqŽ?Ͻ\Fg’ 2D~u•íÍ8€õëV$>dK0ê0¯ý C�H^L­í»öÙ ?O–§ÁRsÓ©ˆ1õ�ùÔl’<{ŸÒ¢‘@4Å“½Ö”r9 g4 ÒñšE]¼œ=MsœsŒSÁÌ/ÇFÏèiœä Í=@?Z–(À|ã=êrßzŒ¦9íÛTzÒI­ aÁ?çüâœ0N?:«m+\} Êùr”ç¿ÔŒò{T $¡ä88gséÓ§à1QÝ2Ï+]„ÃlI@î0rJ´v¸R=84„‘�Ãñ©…M¼29Å :H†"_¥9€ócüOò¥I$â½¶Š(¢Š(¢ŠðgÓÔ}ۀߙÿë‰>K©W³Â¦É¹ÏCŽ´ vŸ˜dzÿŸóÍ=fô”„dý1Hôð£?�!nSQO©XG #\F[8Æk2ÛZ„^ù&dhØ|¸çµcù�V9Ç¥z?Þ<9/ý|·þ‚µ×QEQEQEV~ºqáíHúZËÿ ðç]–v Š}8ÿ늊±¥�Ñò>†¬dŠ8=­(—nCvïþÏ"ËùŸþµ$r›Þ4 –1þñþŸÖ�ÈK(ì:ý{TpÉÌçþ›7ôÿ µ ³çËNXúûS%™æ™œõnƒüý)œlž2i~!è) ŒÅ£®­ŠG•ã àýr+~ÓV´Ö´ Ô¨¦îÐ G¡eçõ®_Àšªéo©èwríò¦ó¡È<ç†Û ưü]}ü'ÖWhùHî­Ü¶=sü«Ð5=FÒî bS!îû‡Œ\½íÄvV­q!ÀNžæ±4+G¹¹—W¸åäâè;šÓ½�ìâ7I˜2�éëUtíY5+«•†�iêúõ{?_çQó¿Ú”Ž(ëÅïJ;Ò‘ž(ï‘ÖœÀ àó@§Íþ°Ÿ\Òš*ESÁÔªÜ{ÑÔþ”Ý“ŸòE NiáGn¤f�íS—`ª:“ÐU{­NÁa çÆNOéTluˆåžKs*¹ëÞþÕ§·lG<œOç^»à��éãÐ?þ†ÕÐQEQEQEÃ|Db$Ò¹ã2œ{üŸã^}i/ú,x<œÿ3Ví—2¿ú¸ù>ç°¨Þw–FcË1ÏçR@¾uÔ0/ñÈŸÄ�gøºÖ_ x’ßÄV DSHL‘Ž„ n_Äs]oˆ ƒXðýåªH„˜üȲÃï(Èüÿ­dø\Yü3¬ó(žÂCÌpJuCù~Ê[]GoñrÚs"¬i”Ï(ãúŠíõ«›k¸IãgŒž‡®qÅs7÷icj× Àq…¹¬ŸÙÈÍ&«r šlˆÁþõükFâö=5‘¥Så¹À p§¸úSl/b¿ŽY¢ê®c#ÓŽ*ÏLƒõ½žÃЧq«[Ø_y™£óc8ì?Vm¥ûB%ÈR¡‡È¨µ…qh:âÜÄ1gr~aÙ[¸þµÒÆQÑ\7ÊÀ}««²Ôlìí>Õò‘‰ç©æ¼óáTë Äï#ª³ÿÇ9¯ã+¡®ø—GÐ`•L1Ÿ:f�ÍÀü”1ük¦ñ&´º/†ï.-Y ±"Ç8$„–søV„ü8`ðÝÞ©q!’æò2à·Q‚N~§šMû—=ÀÍIo8I ?Üqµ¿Æ£�d(O#¿·ÿª¡iÒíóþØý?úÕ"LpTó‚úv¤I~÷ÆÆ‘¤ýâ¯ò¦JüSâƒÁÅÒž? ^9Íã½(ç­/oåIÒž yN=‡ùýj?\õ§ŽMHêE`;ãÖœO`>”™ãŠiCëÓüÿ…(A´Šq^N)ÑyjT»ªóÜÖ]ÝúZ1’¤–Õµ•.6˜Ø2cq"™p ¬€ýÓÎ�rƒÏ€þ²§ô¨m‰0*“Êü§ð©ËrAõ T÷Æ 9eç†î*E—ÜÓb—÷kHeÌŸöÏùŸþµ#Ü6ì*çkݨ¢Š(¢Š(¯ €ÒîÓþ™‡ƒõ꼇Ÿ�©NE�üÍ1”¹[fk6×SšOMbÊ<µŒ°ls‘�èkU˜nObN}8 )ä·SQ ?h¸'ûãÿAãVÊËr¾jî#Ôv¨ö±)Œä°9öïCÒ1=3Íu„iðÍÑ Y~ÊHôÀ°| 1ÀùnåQ‘Ó¡¬¿ˆVϧÜiÚíºüöîc¾Þ@üFEf|LH$†ÆæÜ†Š{mèGu# þF»M 42mÙ-c}vµÂë×2ê7Ñé�ËÈðîkfhí-â†ÂD»@õçr#ÂýçùGõª‡M†62Ú IN Ï|vö©à•naÜSÑ”õSŠ�UŒ§+ÆãÏãV¶e:TN˜4” b�ÛŽ”¸äÒû1“OTÍJÑ�‰ÇðÿSRDzƒƒÍE, žõ CJ ”¡Ûã¯j‘_¿ùÿ<Óƒõ9ãÖ�üŸÆ‚àŒu�¨¬›´³µ±ûTÖêÊ¥w:ç5‰§¬ßéRÇŽâ?ÿëWY¸�×¥zOÃ��N}n�þ€•ØQEQEQEVwˆ8ðÞ©ÿ^rÿè¼U€:AõŠd?¡Ò«°Ûrþ%ÇãRb—"Œ~]i›‡ÛŸáëYºF¥5åíì  ß$ƒü«W?¼ËüÍ9Pñ뚊B¹õ•ÿô#þnE–ß06W»/½1¬Ñõã$ý0iaÀ™þèašÜñ|&o Ý»Ø*yúš‡ÂPð~”øÃŒãžŠæ|P‹ øÛMÖËo;œŽ˜?#ÿ0kâ\"ÓÄ9\ ¡ŽØ?ýjô»ØÂ-Ë y® Í¯ë §ÄÄZÃóJÃÓÿ¯[þXˆáhíM›æO+®ñó»TšÁ-7MiÌŸÞõÅYVIá!ÊžG±Í¬_‘Ç­NÑŒp*M­MëŠP1J;sÅ(”uÅϧN´ñjGŒî‡ò2[¡^‡š‚H £œS@oJ8Å9\àf¤Vã“þȧ+÷4~ÉØ42)äŠÆÖ�…��%²�Û”a{íªzT0�n&D}›?ŽÑÿ×®�Øìo¡â½ƒÁ²úÊò#WAEQEQEWñïigÓÍÿÙ+Ï-û,%F>§ÿ×VÝÝSÈèóëšb²÷ ?^1V´Â§nIϯj>$DÒxm%s�²0ú|µµae °³”„´1¹Èêvƒ\]•¬z7Ä©4ù ]@�=›ï/ò+Xš„"Ûâm”`§P�qÛãúסÞÀ�ÙÊÁUFGlc½yýË7ˆuµ¶LýŠØî�úû~5ÐàFv¨ÂtQéíQ]D—H-¤\«|Íê?ýuJ 8ô�˜ÆmØüíß'¡?Ê´O@Ãæúw™,‰o ’C€âOZ ÚDWs ›•Û.8öìÒ´£|Ä8 Så vÅCye£i,ð®>SÝOcY¾½’)J¼Àš…Ïzí5XU4]B}«”²•ÁÇL#×ðÎÖ)EÔ“íÅffþ9'ô«þµÆ©©ë“D HäD¤t Ð~ çZ¾:³Š XÕK\Ĥ�Û$ãô®‡LFƒÃªX6܃ès\²ÔùŠg9oPÇ?Ò¥fy£ò×°íïUqlG÷ˆÿÇOøSÈÛ‚9Å pÎ3ÜÒ³®u_+[†ÃËÉd ¼ôÏø¸Å€Ë`ÿ»V"L¯"‘ãà⣽èÆy=éÃ$ûÑÔ ZO”.MH‰Ã矔ÔRÇsƒÁëO{r 2ž;Ô0=éwƒJ$ ãSÕÍ?AAqßüô£~8ª7p]ÜæE'§ã½s7PéòK¦5+i\G³Ê“g^¼f¯gçr9àóùÓ•xäó^óEQEQExe’å]?¿Ó?Òª²îµÁþÿU9\RÄg¿×¥Á<~”€ÈÝ‚Žžôà‰2¹ÈA¹‰üÿ¥`Ú½ÄZ…¥Ç—¸]’VÇÝ ÓôU­ÖæE°$þ•0äâŸa Ïw8s„$ú_þµjX‘{©3Ê �¸QŽ1WÚÌ.�pìŠ&u-Àéès¥íí$‰îä ›þeïŽõ,þ1Ó£Ó®,¡Wpèñ¦ŸÎ°|%âF±·ŸJŽ Ï%ËʬNÊ�ð5½âk�ZÂãN6jFþs‚+™þÐûe®�g~­¶Å<’zîPĨ?�Çá]Ÿ‰u×ÑÍ´vqíŒÚ© •Çç\Ɖ%ƒ]M=›Ë<ì~ê¸éù×Eoâ o5L¶sm¾?ZX/"º¹‘¢…ÁPjÞxÈç=ê¼�‘8¹�và0È:0çõ¥‹æÃrÇ�N:LSÎZEˆã9¦`‚8æ”uúSÀǵÁÎiW†UèÐûÔû” ,½_óùÔi*o|.l/¿N�4’ç8ëIäõõéQlO0Ç‘¿Êûg¯Ò”ÚœdzTeƒÇj`'½ô�Jƒ,NBóYš�Âɧ<G…b§9ôÎ?�sñÜý†KWTÈ·è=zÿ�uòOˆÏË‚Wò=«Ô¾ñ ÝK¶øâW]EQEQEQY¾!ÿ‘kUÿ¯9¿ô^4ˆ^Îî?UVãØÿõê¬Ùh‘ÇPiû—“Á›Æ>U-ô yŒ3Žئ\:YZMrF|´${žßβôäžÇSû;&chA’L^¿V5°f>€~¼Ôé‚Àš“J�Lo3�E˜g¹Þp+SN_´Ës4ˆCó*Õí�‹I`ª ›�bRO5„“ÙY\Æo¤]„Ê9íÇëQêÞ.²»Ð¥ÓãWguqpsý*‡…üO$zdQö¨ä³7ýkĺíψ´ÑjÖ`bU…P‹SMcX²¹ÔP³¢ÆŒ"FP'òºk÷�Ý�²‡÷j3Èçÿ­Xš tÛ&ŠK'y¤�¼’Žüð?[¶úý©-æÚL2˜\/CÇ?–hµ¹ŽàÉ"gní¹#§µZ>ªýœÅ9ž=Å\aÓ°éÈ©”sŸj�ô5ŒñM1¤ƒLÁúÒ�žŸJw{vÿ?…?,qNAócjò |¢§c˸pß/éÿÖ¨c™JÛ‚IÀôäÿLR`±äri<œ ÷ú{ÔB4fhÔ‚é�ÃО”ãj†¢*Ëšon´øHÒ �›ïq€>µ�­Ê—Vi¨F°ÁõVm•é¶Õ p™qìp3]SIóˆöã,ŸÒ½�ÁøBÇë/þŒjè(¢Š(¢Š(¢Šá>#ÿÌ4ú ¿öJâô”ZÅv@"LݱZVÉ=´³´^d¥¸ç§êv1ÛXÅå®\œ3­Æk>³[Ìæêuˆ¤{Óžw•WÆzþŸªxu­-æ 6íç§ÊEM§xÂЭ„p»µµ´k.;a@þ•Èx¯ÄCT¹±Ô,àxî,Ù\1õVÜ*M2[=Ç‘ÞÌX$—ãB~ebráý*ωœÖÜþf¯sr‘l‚6ïï(?7èÇò®€¢Ÿš?ºy¥N™Ç½ {{T[2r)H84žôà1É¥#ŒRg${U˜%{~¸«q*r1××üûSÄŒ›~ó8ö–GSò¯"¢1ïÅ1¢ÈÀ¦›rOúÓ6Nئ’sÁ ¶ÏùéIžÝé�s©Ám¸Î=Žk�•#†êêT$™F1éófº ò9´´PaY÷=­^ÜnQÁ�ú´ãþ%¿õÎp õª´¿,¨ý;óøÔ‡©Æ)…×§Ú—.ýÜ÷=j½ó}–ÆiÍ+ ‘çûÍÀªZ1[{›ÍxùÏG$qþ:‘¯u=Wå·C>½ñõª:®Š–ö ò6ùîÉõÜ+“šN@éY6WŸe¾�0¡Y‹oÇ ‘�øTæòHmâ\ù„æ°e¸1Þ´’gçù°?½Ûõ«7šôڽݘ”c ÷![IquÛhü*G¹»HÙ†Ã�šÓÒÉûEØ''sùÖ‡Iå'‘éOg§ûGùÔ§8ëH=1Rúb‘€9¢+ŽŸ…-éá~aVã9<žæ¦$…ÆÜ† g=9¦ˆ�99©B�ìiN1ÀÍ&9À'Í(=yÏÖ£‘U�효ñ`“Hª3ϯJ©f'ãøO'ñ¬ëÜ)è¿Î°oWj]¥ºî¶·“ËÆAä|¤ÿJõ?„’ùÞwÜK“»=›ËLþµÝÑEQEQEVwˆ†õE= ¤£�÷ xÅ”D»#»e�ƒƒøÿJ®  ¼’¯qÿê§B‹åð£ƒÇÓ¨þb¥Ç8ïIŽ*¥úyÓÙY�v¼žl‡ý•çõ8©Ur²“ÕŽáõëRG†ÿxŒÕ˜¡‘òbŒ¹Qœõ„sÜØDVÞEns‘׿&´¬õ´åtu/)å^qƒNgÕ5nî!=‡¥fkšÿ…\“YŸX×VéÀœQšØŽ{®1°SÍÅÐÛ�»KH÷5«¤ÿ¨œq1þB­�“ ü'§·µ8ô¨À%½©ì â�u;©ç’)ŒëþÏøTeqõ£Û¥(ë�OPCd•qôäT�œ*màž¹ö4‹'?Î¥ ½¿È¥ ={Ñ…É OzPFÚ†DVÒª˜±Í5�yMþéþU]cÍ»qÜJʽÛ·²@ÙlßôÕOê+gZógŒ­¬Ÿ4HÓ6ÓÙqÇêkÜþ²?‚4æF,‡ÌÁ?õÑ«¥¢Š(¢Š(¢Š+‚ø˜æ+k)v’f'ðáíÛÌ´€B¡D8Ç ¯g©[iöŒ²’eàí}?¥C5Þ£«ü�ÅäÂO^ÿ�`ëºH·ugmÌI>À�swQ,pÈä©«XÞ¢iRD€!«s÷ñž3N¼¼ÆÖ ~\nÇb+/IÕF“ ÙæKyUÇlç54Z—Ûõ©®Dy,öϬ—2tëŒT«rí"FmÕw3øfµô°§Kˆc¼jÒ¶>V9`:úÓ™ARãÐÒšaùÎ;çßÚ³µ\}¢Ð`gyú ÍK·‘…²óÍD÷OÞÝ ÍÒüAý‹uz6gÌFˆîäýj„wÞ£Çó*øÇsÚ·Eàž!M†2}NjFé.uFÐd ¬Ò׌ü«B;t�çkªÒ´iZÈKm!W+»¯¹ÒµaÖn¬€ŠþTq½GJ�R¸ŠöA%±ßØã¯Oþ½dÞÎ"X �Ìžr€1žÄcõ©b" “åÃc�¸ÿ?�FÐFÒ" 2ln:‚1ýj*G OïmØÂÄÿ³ßò«ÊNÜÐsùš‘q�SHÀQ²rH¤ž)OóšP2*x QƒÇøÕ¤8ÁëÞ˜U\ä'‚9ëÿÖ§¬@:“úõÅ2H£–6I2nøçü)ÜúšI·QõªrŃÇ_Z‹g5Ê<ôì�çP] †N1žß…s÷1Óó­�4ùÇAI§Ku-Ì©$„ 4Kê¤ð®†’K;”ó1ò†Æ;Œ�ëPIø�.H?�ÿõÓ‘"³ ·|úÿœÓ€0)qT®O�©ÚAÕ`Sq ÷(üÎjDQ[øÞ¯sëS¢�¼w$柆ì>™¯w¢Š(¢Š(¢¼ÖàO ½Ü}V@?˜©dâîp?¼ùüªùn1Øœ~c?Ì�—ŒÓ1Çó¦»rªy&òÚoþ°ýj?›ÎH†0KŸÏ�Ξ[‡ã¹ü{ÕÁ©géÍsË�‘ñÜSýM2ÇR¿ÖÒV³C¼’±ÝŽy>µ±k£Ao—�fêXÖ¢/–vðÝ«+[~Ÿ,„aUI_~G5Á܊碌Kt‡¸Ö´|€–q'¦Eaj–ªq×8ªš]²Ítä;¸ö®¶8‘Tn }MJð…†P;©þUsMÇÛ&ÇñF§õ?ãZ•¹†X” Æä‚º@ÍF­‚sýãüê]àŽ})C‚iÛò(ßšLý)£ÓªEæ¦P8ã�J‘@íŒv©‘Ã$žÜþ†›æãÐÐ%Á4yÀôéA”g­'›ïIæçòÅ5Ÿ�ÍD[ vö¬­E®áoôx‹«ô zúë6K-ZEæßóªri:Ž 1�εô*Kbn§b%uu ýÑÓ5ê­e³ðÍüRãþBË�Cgú× QEQEQEVg‰&þÕç#";)œ�¢^=nÃíºœ«gÔÿר�rãÑÏøÿZd ¬¥;súõˆ©™8“mFç|ó�î×É_¯Sú‘ùP¤›·î!ÿ¾Ž: އnÈú¸u¥Òl-.‚n‰ƒo ÔáÈþ‚“O“RÕì¢òÁ‚ØŽ ðHÎzþ5µi£ÛÚŽÌ“8,Õ¢¸@Äà(æ°|E’ËÎaƒ•Àô5ÄÝ/ éŠÀ´€N·*qÄŸÒ´ç€â_DÅsš�¨G ½H9£E´W˜JIxú溔…½:H„qÀ8?¨«úZ…ûJÿÓAÿ �ð«År9éP3¸òÜß8Å.ìÜR—Sÿפ3Ó¥.þ(.M4œþ"�}*EÕ0:•Õ(`ГÜ?Jo›ü±Gš3ÉõéKæ÷éG˜3֓ͤó3šk·ãÅFN±ï�ôry6ñ3«}ݧ ÍP’ÃU�s>µNM#P&?Ö¶ôÍ)í4Ûƒ#4ðüÃû¾Õìß íåµø¦ÛÍþ²6�Oá3âºÚ(¢Š(¢Š(¢¸oˆÚµ¾—�¹$É2ƒŒó…ãõ®6ÞæÿS†8íbñ rxÇZÑ´ÑmíÀ-™\õ'¥j)Xãb@P¹àW1âT,c•² 1ôàW|?tùéŠÄ´¶ó­Œd9þu£yg?Aü«˜Ô-Ì2’9ÈÉ«š©f Áq]*[ç¹üéÆ=¾OûØüÁ­=+‹g¤Ž?Sþ5t®î?/jbK™¤ˆ�š<~ óBÉæË$kÒÜ`Q2"ÎÒFÙ0ÍõÆ?�ô~)ÛÀõ¥ ”È9¦“œð)¤þT«ƒÚ¤U©W÷ÿ?þº�_­)`Œ@ÿ9¤óxöÇ?­a޹4yœuçµ'˜8ç4†^94ÒÙ'éQ8éU.ÙÒ?65,ëØzúë]BêåÉKyzâ¨Éóô·�~–v7÷ß ]ÏA[—Šöºö�>Ü[…1Aõ­û’GR8d#ñþª®ƒt}Woô¤·$‚;ð?þ¾jF\¯ùþ”*’Ê=êY¦”óºÄª¯Ïu,GÌ•Á_‘IRM,1cºäVŒ—Ëj°¬q©W‰$ÉªŠ(¢Š(¢ŠùóM_³ýªÇ?ê%%?Üc¸3ùV�Ö¥•K ¿â85^PA ŽpNƦ Ðç¯4«´ç8Ç\ûwªˆá­žá† îÇ€?*xL¹ûÌ ŸÖ”Œ†qÕ?QŒȰÕò;ë'\*¿š=ò0•kiž"‡BðÅ”Fó:»�B7°Ïé]~™rךm½Ì€+H�˜z@—í.Pp€å›×Ú ÖF4Ù@#a�ÀWžÜ3XVhë«Ì­Éòÿ­j¸ýÂñüU�« ÛˆèÀÖ~‡Ìòcû§úUÍ|²´!X€S$^kCC¸’çLe�å£,™=HÇÿ^µôßøü Óu¸?¨ÿÖÁϧ?çúÓe`‰ ž­(øëUlÇqþfž:}iȧ9àà÷«"Ü‘�N?¯za‰‡9§˜~LçëL(G_Â� qþÏJ~óŠp ØT‘‚7 ¸oÚ9+Þ«Fë!.ümÚôÏz±åKÁ yêHñȨ]¸“ÍFIÉ£'#ž”sÛµ/^9£’}êÖ•¸Ô0~ï–Ø­ »]™?ÃëX÷‹åÂïŒí‘PXÊ'³ŠQÑ�Ï?ýjôï†ç>œúÝývQEQEQEŸ®Æ³x{S‰þëÚJ§èPׇhÎÉeNs%³yMÿéúb®Ì‚=Fò5ïѪ%Ýô?Ðÿ1SƒŽ2)Òžfû±�Æ«ª´VñæGbÍîÇ“úÔˆ»feú~<i“7—lgÆv†Èö9¬xµÔtáa·ììê±;…t-âˆô�&ÊÊ( \ xóè P­v¾mÖS€ ‚O§¨co´·ÝÄjzâ5ŸâA�=Ïû¿úpwc*ÀHÅciHÞ}Øn»�?‘­IW勎ưu¨ÂF„Žä~”Í.B=Gó4k…×P!€c§¶¬fk½e“–Û†÷ÁÇô­}8f{µô(Cþ|¡éþÏJ†fİGýåsÿ Ô/Á4‡‘ŠT°<šŸìçåíQùL^)í"šPçüô¡zŒ�Óüÿ“Nôàƒ�OÈUf—ÌlbÁ'Ž?\T1�ä¾X³ãŒqÒ§ò¥aN9çò¤xÝfàtëLÉ£’zÒóJ?Z1Þ´4[qq,ìÜaWÛ5bêÔ§ãÒ±56¶rNFB ÓÁÝlObŸÐõë×<Ï„l�©�ÿäF®‚Š(¢Š(¢Š(¯.øÏ¾Ÿ¦ÕZB?ñÊθñ-…�Ô6©iwˆð6óŠß$"x~�*¼mö’þY¯AêkÅ'÷(é ÿÐk‡¿Ï• Q“ŠÍÒmÒFþ•£p¹ø sZÒ�å­]Іm—ýÿè*µýõÕ¾¥!IOÈÇ·ZéAqmÀ`;#cê?úõ¥¥óo þìÌ?‘þµ{“×ÒšÛãaˆ”’>­DeJJ¬¸?÷ȧs“õ¬�Oþ>öŸá·'õ?áYZ½ÛØéªcâGÚŠ}8ëúU i¦i„’ ç׊ÏÖø¸�<|£ùš¿¤Æ ¾áÝ�l¢�!ÿÞ¬›ÀßÚÐ!8üë~ß‘šô Ó"R81(ÇçV„¢'=þCíI¨\‹+®Jî!`=q\¦¹­Xk~ºòsæ¦ÆÚG#çQŸÖ±îµ¬-ll»´¾`ÇQµqýkIF1 ã{ñôÇÖÏœXUI¥5hF@8… éíKÉ>Çô©R&uÈ#·­+BÃð¥H‹uãÝ„u¤Æ1þ{Ó�8p'¯zr“¸~b™<›•WÏk -�÷9Àúð)À–'<Ò¨‘”§‘ž”ÂYrr:Òn<öíFãJ îqHzSd$)QÔÿ.õ¼ÚxŽØ«ÐpµfÍ 8+6)SíÓ@8dQŸ¡4ÝJÙ¯mf�xr›Ðú0­his¥Ñµ˜ýÙq¸}F C*¯É)#)ÏÖ‘NÉ�¹#óäZœž=©’Éä@ó–Qò�ö�~x¨U<„‚9*¼_ÔÓ¢Âo€¤ÿZ‚íŵ«ÊÙÚÈǯJm�ìzžŸk2àm‰b#Яô%QEQEž49q¤Øï ßgL‘éÒœtM)Š–Ó,‰Q€Mºð=:RI=t»/üOð hzH .Ëþ�Óü(:’AK²Á#ìéþŸØZ>þʱÀè>Μ~”¿ØzFsý•cŸú÷Oð£ûI4»/üOð¨WÃ1eÐôÅcÁ"Ò0OéN>ЙQ[EÓŠ Âj˜Q׎:Õ…Ò´ä„B¶«!P1ôÅ*i–¨T±¶U"PéCé–)W±¶e<Ñ)Ê«èm×FÓÏÖÕ?˜¿gOð èzAR§J±*Fû:c•B¾ÐYWCÓo¼¤|ýx§?‡t93èÚ{0A6¨H€:U–Ó4÷�ËkfO�Ë£O²ÎÜh—ü)²iz|˶[W_F…HþUðîˆÝtm<ýmSü)‹á�™t=5Ku"Ò1ŸÒ�ÿî†q�Nã§ú*…2O xzQ‰4-ÇûVqŸéI…|;|½KLÿvÎ1ý( xrFÝ&�¥9õk8Ïô§§†´ãòÓDÓU?º¶‘�ùbžš�bšE‚–Æâ-�g…;ûIÿ ]—þ§øRG$¤Ø’¹Áû:qž½©?°4cÿ0›üOð£þýþ�ø ŸáKý�£Ð&Ãÿ“ü)°ôœcû.ËÿÓü)ƒ£““¤Øÿà:…/ö‘ÿ@»üOð£ûHÿ ]�þ§øR H#J±ÿÀtÿ _ìM'þ�v_øŸáKý�¥šmŸýø_ð èºS 6™fG¡�š4tÒlGý»'øSމ¥ÚtË"½qöuÇò¦F8Α`qÓý?—û Gÿ U�þ§øQý…£ÿÐ*ÇÿÓü(þÂÒ?ècÿ€éþ¿ØZGý¬ð?“û G#ÙV8ÿ¯tÿ ’=#Lˆ“�h™ë¶ý)[KÓÛïXÚŸ¬+þš�2—I±t=U­ÐƒúP4- .Ñ¥XãÇÙÓü*äCm ÃoqD¿u#Pª>€T”QEQEQEy�ÆÌ�éÒ“ø넸µÅW²·;‚ÀÿÀ«_\Ö/²–Q6-ÖT¼ þµÖ…Ú>Nž•ƒâ•ÿDSèËü�p÷çèk?Iá.PðD§ù ¿/ÌêÙ®s]™Ö¬øxï¶aÝX*[Ík‹¦eaµ¹9­µˆCl‘¨8Mµ§áé!h¯u`<íË ì �ð«§žNÞÇÔ“L(¦Tœú«ñ¢5XQŽïšIOÀJš!˜<ÒÊ�=ɬ=^D}fQA¨Ï99$ÿ:£©Ø›ë?,pÊAOLÓ¤´ÞÒ7$c±õÓþš¨?„ëZº0Å¢SýkU8„Ž9jÍ”×8ä,@~¦µíúW¢éJWN„î§ò¶Z-îU?¼X‰Sèk ËT¹ÔtènÏ(€+c““ƒý+ž·²òí5”!T¬‰OþÉŠäE<û™×äOε¤ÆÑÛcóŠ¿¿lÿwü*)BΣ¡;…"ò)é�Ù=ªÄ,U<Â>]å¿çõ©_.F;óšjÆËž{T�Tž”’˜‘š¯-ȶ�³n[hœú�þ±§Gvˆ›æ¶*~@I$qüÅ <ò+‰ SæÇ¢x.$”»”Rõÿ9¦­ÅÕµÀØÕSÌ œgšŽY/&€I¡È>ÀX•—xw.K““RÑKÚƒÀÎx˜2A'¸éè+³`<•ÿtV-ê|އšæbãÄ÷c±‰[ò5 ÛÑÆp™ýj 0‹k«‹NÐÌ$OtnžjÓœjWªY�Äð¦Ì¸`G\}G#ôÍ?‚29Ï5^rdº‚ÜrfÃ…ýièD“ÈØá~Uþ´‡…œý™¢ê¸µ’Sý*”:bÚF#¶å¸së_DÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ^iñy‚ÚiÄð6ÍÏýñ\N«lÒj×n‡åó7·<ö­këŸScîÛå·Ômÿê~ö}y?çó¬?àØ7eOêGõ®îa27‡JÁ–ñ|û™Y �f ýï›Ê·‰Ü¨ßì×?­¯È§ÜŠ—Ã|¤£éýk£EpN�ZŠa:NøÂù H…€%zñZpêY�­-ØG"ÆUvwãŸÏ­U&Ò­ÆÓ+¬p t$éUSÆz|PD…GRÄœuÜGøS—Æ:l�nx�†ã®I?Ö­Å­iú…ÄQÃ._°<`äsùùÒßê:eäS-±Y&MÍ…ñ’F?*­Îb‰�’F)—*{šFV$îR+�ÖÎu7‡úñ­�-vÛGô«w²yZl¬G#ëƒYVwŠ-íößd™œäq�],¬Ù\cÒ½/O´EöQ� áLÔâ3ióD£qu¼�ð®i¬Ìz5ôl|Ä?ËòͶ—¨™nÛ±Ïý5¤Š?²ìÎD’Ï¡—˜ÛØgüþTŠß¿r:mÿ d¿> ê8¤Eçò¥dl¿{Z¶±Ÿ²€G;óù�þµ,`‚2x©½CíG ãŽ)¿OÆ£fPÅ[eçÓ'üi²J¬Ñ`ëôèOôªZbܤ7àà›‡dÿtã{pÆ ÉªRBòjñ\/³¼L¾¤óþ‰+hˆNà™\ý OÑ›ð?çò£ð§{Ò�åM#'`éÔÓ�"»v¿AYƒ/žÙ¬#n£R{�÷Ú2éOrVä·q ?¯ÿª«Ý“©gr8Y”Û¿ãÊþ£fcÿ©Gi!Vü¿ýu$¼&î¥HoóùÒCÞ1Õ[ûvý*¥»yóÜN?å«ùqŸD^3ùæ¬Ç€¹ þʘå¨=ßøñ©³Éõ«ñC›;`¿Â„ûé«Ù袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯5ø·K˜’&ÙÉü6ƱÐa™EÝį+NŠØíÒ·jž~žÃÿÕR/ËÀè‹âOù¹ƒÿBæú„fL…àšå§À»FîÖ»# ‰"RÀî@ÃñÕÝ-ï"Rî°ÄK¿§·­Ii-�‚ýšÁY‹#.s€ àW9q­ê)ö‡Çµg=Ìò1ß+1úÒ$²Ç"ÈŽÂEmÁ‡cW¯Ð\ˆîàCûÑ–@>ëwçÖª‹+©Ë˜úR5¥Â}è\~p1±Ó\‹‹�”}Ôïùôüë8;/F"¦†öæ#”™Æ;f·t}böãP†9n©`9«·PéúÀ96—½û£ŸéÒ­ÛÙÍi#®p8`rãPêÑ¢Ë>îÉ�®°tè÷0@yˆÆ«§Ý<õÍ‚{Ó ©�0*Ç<ѨÀÞHüFißÅíG|ÑFí Ôô¨»Ts’{ûÒöéÚ»ÿT¿îŒÿŸÊ²¯F#5‚nSûUíñûÁïÃüšy_ô¾Gü²ÿÙ�E©À×:dèŸëy±Ÿö—š�§[‹Ý*õNâ§ëŒÿ1WÂç*{ðj•åɳ±’q÷Êl_÷ó´Ÿju¬BÞÉqÑ#Ú?ñ<Õ�›QWÐPœù¬y?®jp2qïŠÕÒÝnl�‹k„fBzóŸþ½{QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEåÿƒ;O*Oݘür¢Ñ¤gÐ,õh#ÿÐE_Vݸž»±N9Áú/ëXþ$x×N”3ùr2Úç7…g,°È¬Bdàö¬TÑn¯J¨#ˆù�À­ùïáµ�3H£ßîŠÉžy¯%Ý3nËÛð«máÍDØO¨´~T)Á~§wƲ×ÃFß,¼ÀUÈü5`‡”fÇ©« ¥Ø[«$žÂœa†®‚5Œœg·4ÛËÁam6ÇfãÓ8ïR –[Xî7Fª~fÏò¦‹[|)™#%ˆ‘Ôškè¶1&ÝGn*¤¾²`vnCõ¨­´³ºŠX¥Î‘ïVõ_ßéËq hÉâEåj­­ýÅ ) ê�È«—b[Mh"cÄý×û¦²!Ó.¬î9b(Xá[¨5ÐYÉb�*î‚3Þ½BÕ•àXà�¯ÿ®¦<v6¨é·?­rþœã¥!9œU;ØV{ÛF9Àv@AèvþxüªÙ‘ã �¡]€^}Oò*‚X峞@ÿ?J™pœS•úfš®p?Ý©_›x20 ²þZ‚<”Í$úS$8\ú� @¹aÜ¢°ÏÓ¼=Æ?•.zÒ€3éMçÝŽ1�O#ŠzŒFk¯e?º1úVMàëŸJåXgÅmïËáZ;OÚŸžDj?SO_¼3ëȬ?d�-œàØß?뜜�æÂ·y<ã‚3YÚ„F{˜ ?êÕþÐÿA�ëÍ_�3�éÔÿ*y]‡úA�¹‰ü©º„ÿfÓç”�01ïW<%Ù´\¼¹i¤2œvÈW¸ÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ^sñr/3I²ÀäGè?²ô)¢_ éÍ4Š«ä&I8íÿëª÷¾-Ò쌊%ód8_¥s7Þ>º•ŠZD±ÄòkdÕuÁ—‘¶t.çœT¶º\¥W÷×.»w¿Ýú ±#J2�àp°ü*{ ßêòÙäÂNK¿Ùé>Ó´¿Þóæþûöú ŸÅ-³ÃW�@è?˜W �‚ã9õ§g“ÏjŽhüÈf^Í�ÐÖ5Î×ðýŽ÷Â³Æ öÅEm/Ú¼‰¾Y<¤hŠgø·uüEAté¿ØÙÀË0äá�kºï:ç;¤ŒŸ|.kH2OsK΢ŸpÁé‡^W©:$ñm™)©W-ªøÎíš[6û<‡øz©5ÉͤÞiíº€•黟 L †�rÛ�+:} BfžÊC …‹cò“׃ڧ·Ôõ}• ºãœ7 ÿžk Óü~Nò{nZél¼C¥ê |»…S€0ÜVW�ñ-–œˆA t:öMrþ+  6" g¯ÿQSÉlÒ[oYX6Ðg¸¥¶ždÓä`çÌÝŒú|Çü*EšI#ËØ ÔˆÄý)Ùçš‚F#ìNzý£?÷ÒµN£|±¡ “ôô«‘ ¦}?Z™QNr)¦5\Ž€t¤DS�y<�ÔÓ¥S²Ý{!ÇâôªÑqgÐT£ÿ>•ÀyMŽÃ4ÙWw�ÿÞŒ�Äþ½!¯åG9ö§ÇÊÅP{±ö¨®®íìfÜɱ°NÕ\kzhñò¼ö©ÿµlšßÏ+v7Wm4ÑÆ‹½ñÅe]M¹d<õÏ\yVש{!Ƒߪ&»nnÄb1ƒøš²ú¼j È®k›½Öc¾ÔhPªJV''»!ÊŸé[ÃW‘ˆÛ•<ÖpÔ®¤¿žä`F߸ÁôçóÍ8êweãGp¥³üªg¿¸ê®pHÃ~”—í,÷HŠäooÉsUõxŒ:dŸ¼'q Ö·ü/qz$C;³‚O^vŒ×½QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ^CñÚæh-4eŠFUs>à;ýÏñ5ãÐ]ßÏ qy’˜ÇÊ£'JÒ´Ñîç|ȾRcïIÅl[ivv—Q«ƒ,�Œàô«Þ`ݯÞÉöS­ô)n5(çë Y�¥uvú-•¤Ñ¼¨$voâè+aYqÇÝ�8s׎ÏùúV'‹� àîÀm«�^sý+� ïš6ƒÅ s�E`�Ú5‰åf‰H!AK–¶¨|¼ ÌO__ò)²è©pûÛŠÎ{õÍY´Ó%‚î^VuˆåUº1ZáW¥zTs¦è�=Ç�ze¸&$ä8 Ôf¤ÎÞÜuçð¨¦X¤�£™U—åaX7:³Û<Ð|»×{sÿ×®f"}<:Éò°9èÕ h§(S¹_‘Ç¥e6‹or�-»˜‰?u¹_β'ÓomK7–áG!צP¸¿¿ZI4»Tî@ǧ½l'™©Q7™$ƒh,y ƒ“øñ]ÇË1,x\t¨íãIaºRp £�ÄÓäRà�£ DÈéNs¶#ëÐSgÂÇoíqʦƒ›‰[¯!Gá×ùþ•u1Œvþªp`)§¯=ø¦©Ä¬=súâ¦�ñ¹#BÍŸ«ðªª?vžËý($úÒ`‘Ï~)1ºÂžRF_Ísý)c>Ägó ¶9<ú{ÔÖòÉ8PÛ†æç½rþ.¹óo¶• B(}+˜Ü¹É«/ü#ÒÀ3�νZŽ[�råF ˆ˜\ûu¿Ëg"œåI_ÇŠÅñ«Ë˜+€U™º?ã\ΘgX<ÉH&>cÙFjÍJæñeçÉ ƒÅK£Ú=æ�p¾Y.°™£8îŒ Çà A&¢ñ¼ld+–J�ýáÈ�i.œ�XoQ¸óß9?ÖŸ[oÜy‹µ€ês“ŠÒHUá(̬œŽÔé6®¢Ù$â!Û§Jeí¢Mm,hì|ÄÂŒt=¿¥cÛÝÍm Ç –!Õ“ŒïŠúžŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šó�‹é²Ã¥DüˆÒ²®~÷ÜÈþUæRj¶�<0YÚ¤q¡Âdt>´Ëiç¹G%˜62kRÛI»»¾ª3ª÷< Û�DXÈ•ðì+f11Á2zŠ&‹í¼rIÈÂçUÄÚ]“ ŒbœèÌÈC•¹¿ÎøÊE“JXÃ7òû§ük“A9vU‡oûÍO1]e£\ú Ò}žC÷îðP,C÷‘ÿR ›îÚ³~�é;zÛº‘è¦}Œ)âISñ£È˜’sÿZpŽìùfÃÛ"¡”HÛ„°� �xê8¯GÒe¥[)r\D½~•r8ÊĨí¼�Ëþ•¬±Í�޵³¦ÂKFÀ§œgÿ×UîíÒXž?•óÓ5‘.‚Ê„Á†f=¾•‚tû›•Y3ÈpjŸÚf·¹ò�>YRYHÈ#èoô›ÛeµÔ-T÷\ã].™•0ÃÌc ýÉÿ?Ò¦[;_:HÎCDGZÌŠÈEÊónRçþQ£Ug9ÎIϵ=qéHpYÐî?çüô¨¯™"¶Žgû©â oì—;ŒpûÜW·ÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ^UñžÖ[±¢$1³É™ðgþy×¥x.úy{Œ[¨ù¹ëùWUk¢iºoÊT3& /Ñ�[k­ãli…^œ`THòI±ÀìF:þubî$BŸÀ˜À÷ÿõSÄA7s–ÍN²)8Œn'Ç¿ùá0Ý+dvQÒ°üV¶ÂÒ<ˆŠ¡8í\ŸööŽ£-+œRË⿠Š|·•ú�[ŠÏ¸ø…cÛN�9êÃcÆZ‚H¸gRI ~Tè­—ì… ÏëŸëUQʸU%²½O®zTæx¥_&â0Tñó�óþEg]ø^Êÿy·o*@0¨ ñ\n©á-JÂ6+šŸÞNk.t{!xät”¹ãÓ«�øŽxîDó(rF”ã"´¡Ö­gYöM‡ ­Á'&ˆM—ÔòcéR QÌÌ}>QUõB�§íqò´Ñ)¿8þ™«îw¾E,*óؤ±ôêà°œcr„ã#u@AW Œààâ˜a}ÇØòÏAéŽjƦ¿¼Ø?ç”Kúñ¨rOzP¹»zñøT‘ac¼P:Ÿ}Cý*Vlm/j­+Å$k —¬ c¶*¬«nfóݘª(_»è*œö72´òG9-ó´"±‚E[v¶Û9ã'µsšö‘&šÂP¥¢,2}úâºõXïd†ú[�¶FpÄ ÀÇâk"ç[ÔÄm¢û*dd(ùŽ{š—×’C¨K.£¾xJ©`Nâ£Ö£ñ-›ÛÞ-òqa*�®�9õ÷ëX6“Å"]ÇiÌ9ë€@þµÃ×V–Ë4ÖâW†Ü2~¼Õ‹­"ÊþY¼™L ÄÇ éÏOκM&´Ð ðd�<¬õϧèE^ ŒÒD8¹Øþ‚©Ì^"•À_9Aäã<Ô7>!µ¶¹•¢�Êÿ÷§AXsk—M© >öIüic´ñK¼±eç$ðrkê:(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+žñ@­h,7ã?ðæÖI\’R5žöa¯ ³¹q‘´ƒŸJ·$²UáϦjž©4¶’Z­´A¦•Š.z3šž yáG’æS4Òò@ ŽÃó©ŒM$§Ìx˜YI, È ,G¨dûäU«©$°šX¥]ÖeH?ÝÆOÍøúW‘¤2Þá·PGp]­éKuy ᶵ¤*¡‡©pzý¢+f[€ÒÈ‘–s] ’5„™“Pk• –Eû¥¿È¬�O]¸ŠâG…¶@Ç%GOéúÖ·�ÚT¼´�o @WvI ñ§i~¸Õ-ã�!’<‚¥\cèOùí]E‡ÃûX‚›ÙL„í^+¦¶Ò¬-àXâ´Œ(õZÿÙufo-kit-tofu-ed0e5bd/docs/source/figs/harmonization-ips.jpg000066400000000000000000003112041521054151500241520ustar00rootroot00000000000000ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ ÿÄ ÿĵ}!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?÷ú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Íþ+6’v©ÂÏÉíþ®¼à"º¨h€õã?­!�|–î@1“ÎGz@ÔÎÓÀ ×<Њol‚O8ÏùéJÀ°ê›{ç¿­5UcV%I#ï1ŽiapªHÈ'ð÷¦® À³‚qíL+*¼ uã?ç4¹P›3�ŽýÏ"�¨w%¶²œ|ÃÓ“×üõ¦b<–B…Œž´�ØÙ¸ùNNFr=¥'.2 ñǶ�#••�TÎãx~>ø¥f ÊÙÃc¦3œR¶[1ééLùAÚçsnéß®z~ÒaKŒ¹úóR #Ô̈́ɷ �Oåú:k¨,›À$òNq“Ͻ.6|ŒÊ8ÈÁÇZ_/-Œ–Ï�Çúþ´ƒ‡Áä�œ…ãð¦!$ìÁÀÿáéÞ‘£VÉ+ò�§ç®G_Ãò©r º*�9È#¿~qQÉ…'$òF¿Z>ðRÊ Ç8þŸOóÕß #å¸è þ>¸¦Ê· À�«�½p*FUdܨ»±òñHCàÏCÏ·ÿXTb>0œ‘Ð}{v©7¢A†V)Æ{ž¿�4 Þ¤G´™>pWœãÿ¬)à•Ýò:~`ª®0=NÜœ­+®p¤cž�ïúÒc8L–#v:Ê…ESµ�¼ƒß�Ç?äS±‚ €±Î=½)Q†V†öã§ÿZ€£  €Ý>ï8¤ ˜Üs’Ù8àç?þ¯¯éRôcÐ7¹ÿ b¸Þ¤œíÇEéíAÙ�ŠŒËsÛ®M/éۑ׃Î)Åsómž€u¦ŒŸnÂÄ‚OnxïúÓöa•‘Cgqǯõ©äýõmÝqОz~´Ü!R» ÛNF3œsïÁþtæ8qÊÚäuÿ?…;GLœõœô攢<_tàwúP˜U8ÚäàgëÓÞ¤x÷.3Ó§ç¥3vÎyeÉç®8ö§"ª +€�zzóHQFЩœò[©Ñüë’°dpCöÿëWÑÔQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW›üW ²sé7oúç^hùÛÁLŒ’O^œ:v§«*«!?(<ëøÿJB6ùI-üC¯çþ{S�÷@ ÆìO?¥&Hé$õ4’yŒÇn1�›'½1† ¡ïŒgŒú©à°*§ '<ƒôÖ‘‘Á;ˆëßßßùÓö 2HÉ#<ž´›C©Aèÿz<·Éc†' öÀÏßþªUuY± üœõþToFã“…$ †Ïo§znQrIÇ<“Ôsž?J{à6íÃwL�ÇZw™ægŒ“M #aöóÔž¾üÓ£ÁãÆ~´žjJÄñŒãdz†T8 `dcÿ¯H�0WÐuÿ?Öœ¥‰$}ÓМõ¦°Ì}HbzûuüñGñ–\†Ï¡ç¶*wÊÅØÎ€:ã8ü�?vcHVnãÉö¨Ë©}ùåF _¥<) î“ÐõéúšyÂòã¯#-õ—4¿ xã¯L~?�.üHǯÏgð4¨7a²B�Tr9ÉëÇùçò æ6R2?‹p$ßéÞœXÃæäò;fѸ€N~R:cÓµ(\òžXý¼dþF¾�¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢¼çâ¨ÉÒ ;<ÿ¹^k ¼6pNWúS”ãïqê¤ã,Tž3ùReT¯÷ Ç\óþsÒ••I 1±ÓŸÂ‘ÙWïpAÆHç<ñþ}i�n¤ƒÓŒóïúTb5A�ç‡\ŸZPŸºÚà�íÎ:×Ú˜ËÎvûy—ù÷¡Û‘ò‘»98èj6$…Hqœqÿ×ïN;pT¾2ÎsAû­Èã�óïH»Á×?îçŽüç¯ù4Í­��¡±ÀPöíÚ”®@þ_QÅ)@XpFÓŸ˜{ô¤�~Ve9Æ8ü¿JnÂSÍ×QJh ·-…çœúS °Ä`îÁŸ—=qùþU( W�—ч#üô¨Yˆ*Ñ�Žýy©mUUfÜ uÿFpù=@nrHÇNù¦…l�Ár Ž1éR3pÏ¢�•@ÎÀàqþ:� í¹¾þp ê9éþE8(%IŒy¡â›×!T�âý=°? r°c�ƒÐq“žGô£ná€êpëëNS�ûAR;žsþ”°+„9Ü:€1�åQɹNà¡Ü €:ÿJ6²¶ç\mÁÈ$àþ>Äö§— îažzŽžÔ›Ëݹƒ�:{Ó“ä�ifå¸,{rÏÒš°§î€¿Ý?þ¯Âž’|ª¤ŽyR0}ý)FŒ.uå�K¹QÁ �ÃþGÿª›·lªY†@Œñßÿ]Í–!Qß8?‡N´ª3)%€#=ˆü­9~B’F2ÔzÐqLœœ€?­.ì1RU™¸À^¾¹ü�+.r¹àðTÏÖš¡‰sÈç×§£ H‚3�¼dõÝûÓÆð¥—alåCzwþ´åg#°ë•#ŸóÒ�.Ü•tàsÐäþ§žHu!]·޽8ô¥B¦SüAzÙîÏøÐN0s‚ÄIÏaÈ©2Ü#¸'Ò 9 \ñ°’xÀëÆ{Ôî6p_=aåD'¶kèÚ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Íþ+àdp?}Èíþ®¼ä(±œrsÞ¢ AÆÐ žFN>½éÛ€%€ÆIÎÜã9þƒõ¥Š©RÜ‘ŒCÊaA‘ó¯oÀÒ``)<õÜ9ôúúPY˜ã?^”€—^üsŒŽzÔLwLÀÀÉln9ã·×?ÊœËùNÕ r:ó×§·ëMa�)T… p£€?ýT„¨pœ.O<€ŸáB®Tÿ|p #½!-³s)8ÏN¸þf€ªHã?_åMù‚mÜ2Ì@8?¯¶(VRC)'Œƒþ4®ÃåyÁ$ãh¤ àÈù$àƒŒRàÆÝAL{ši@Xƒ† sþp=¿�)+¸€ÓƒÓ¿ùüi¸fÚ6+w—ùü© o˜�£$dGÓëO;pÛrb;ÿ�0dœ± ã+ÆG¿5$jdœ�¾˜ý*ÚÙÁ;²F§Qž?¯½9Ìl0qÉîÅ9×iÁ‘~÷õý)«·8ÉÝÐsœûwúÓX�/$°ï·xÏ>Þß­=•¶ŒüÌRq@bN‹“Ð�?JUP€®ã*8ÿ9Ö#¶É'�Éô©@VŒ#iÎp3ÍA†Äœ\zþ§ÿ­Rù¹=GOóõ¦©-´¦Ý™çÿ­þ{ÓˆÆU°AÀ89> õ§ç• žŸZ`@Wh\=IèÏáNÃH냌ƒ÷†qÏ þT�¿fÑŽz‘õ§¦õƒÖ‚¹È9cØuÀëý)>Y#ÃËÇ8ÏùìiÇ ÊIA’NG_çMþò#€xÎ ý9ì#'¸àò?\R!UuMʤƒÔr?óÖ—(�Si-Î2xÏùüÄ`=ñÎÇØH'(Ê=±×ùÒÈÅIÜ Lg'óÅ)`’n p-œ‚:ÿŽ?vBá—8<œŠpP6“‘�󃑎”¸€K’ ަ‘ »£<ï±ÏÔÒ»‘�9é‚M8‘ç=Nxý?~\0ìp+èê(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Íþ+’GÆAÄüã8ÿW^o¹É#+‘Üð§|ªÄ`“·9'·¯Z.�’qÐ`c‹$ŠÞƒä9ãž)wåvŸ—��Ú˜¸pAáù`M*6æÁPr0_óëIßp zÉöý?ýt»@×Ò£eg©QŒt§å@ª(.:{SHʹR>¦‘¶‰r8|»þó¥˜�HéÇš¡€Ó$méÚ�¨Œœàúô?–(?09$`õ§ùÿi"BFWž¼gŸÒ€ÁˆØÊAÁÎ3¸cü)p²1 ��r3ÿÖã½4t-µCçÜóÇ^½ZQ¸²…í�A÷éøÒ)^p¬ØÆHã?�ëKå1ß9õé§îíäâú�óü¨ */L}Üt4æÜÄ•%yÆOO˜I �ïp~n3ž•+·x9$‚{{ÒŒ“Ž1…ëž¼TL§P¤Œã޼Òù$©ˆêÇïô#ƒH‘”~ðS…$äþ$ž´îd%rÏq׎çOQÜŽœ›½4·ï1ŒKc=xôü©¶2Ùa�»žh%Q‹Ïàu‘Ó9ö¤�K&vñœsÛŽÔ⤡Ú0Äî^ ):äƒÎ‘T¬Œ3Æ;žþ”7*H ò¶Hp0=)Á6…'q FTñ�óŠNwB©Ü=9úwÿõSTyjo½’:ó×>¼ž)ä1$òxÎ8lþ?ç½( ™v.2qé�ð¡”±ås·©#Äsdãð4åe`J¦s»ž„SÀ_â±=ýG8¤g9Æ89Ë��þ¾iQÉAÔŽÅGômQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEæÿò�ÀM•SÉæ:órQ£Rs�;ðOàicb‚NAçŒîäÒqŒ«yÆ0zd¯þµ7 èÈÀ�:dö<~¾”�•�ÀÛ#6ö?Ž:Ò—$ä)ŸN:ŸZ@«-€£9ãÜóúÓAìUP €žÔ‡k‚¤ð0{‡ÿ­KË ÅB¨çÿWÿ®£`�êGm½8¥$[?!Êœcõ¥AÜI''¢çó¦€ZE|ËѰzóþxõ¥Ú7ž¼ñÊñÏùíQ§ÈÛ@Q€ô~t£jŸ/osžqíÿê§êØÆzmõÈ=½ÿúôÄbìøc匧òü =€Fc×sÓŠ‰ÝId�Ü´}9ÏÓô©ä@�ÀàtSõ¡ØÊã€Aä±>”¸ Ä*�•°sŽ˜üéA8r>cÇlg¶:SƒocÑ�lgñÿ=iáJ« œý*�Ê,r3Á‘œvâ•Ïî�A(@!pǸôäVÝ‚¹sÏRyÏøHXðn1Å}EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEy¿Å|�ì’§Ï˯9ÜUB•%NÇ_Ó¥qQ´A§QþÆ€¼�À2±{�9ÿ?Jh?¼*¬„géþOzL2á›®:õÿj�Àä°<ƒýGçþMgÎ1» ¶Olÿõ±øÒÐò8þf—4Ç<¼)‡åß´ŸºSÏQþ4�ƒÁÀàûÿ:W!W•+ÀÈ?ʣݸ pK(þçšV!”¶2»�##¥! ظ<“ë@ÉbŒc<~½¿úô‹�¿0ÃgÔr?É£z*eŠ cÈÎ1þüûÒƒÉé€HÏjEÔ–_—ï ã‘ïŸóëR{a�ù¸÷¦ªô“Œž£ÿÖi»Y�ÞÈÏ#¯ì0˃éŒzþ|SÁUNA vÏ¥Gò†-ƒÈž=ñþy¥ÝûÌmgÔûÿ…d�†¦#ŽÿäÓÀÛ€ç$’_jFV™²�ëôЏ8ç¥I°#h#œcš�þfÁ<®Gn}¿Ï½7¸‘œuÇ·ô¡Àu*JŽp}zsúÒp[x,GaÆÏ4I9Œµ�¿­8\ 9ïŒãõ§Œç »{qÞ‚„óÜ sùÓ62°$‚=‡Î�ß»#=¾cúþRœ‚•ÀûØç…5“÷� m‡8ÁèÇ?¥#¶í`01ÈêzPÎ9È*õ$û}?:U'a ãîãüõ§ÛB‘Ž9Æ:ôâ€@$mÆá�ßýjžùz)åA…\±ÎÖºö§©í�˜cþ9éÖƒ…#�c¯_~(cò’¹œ9ÈõÅ9_t}Ê9nÔ t@8Ú3õÿ<Ó�:ç†ëןóŸëH¸T�¤úóŽÏÒž˜ \/'ç½+mPTÓ §)f‹ªóèr1Î?¥ pKa—†ã‘ý) >õãåÝØtô<Ÿ¯æ(G( ‰`ÿà×ÑôQEQEW7ÿ ï†pOö—Ò øšOøOü1Œ�O?Kyøš?á?ðÆqý§Ïýp“ÿ‰ øÿÃgûOß‹yøš?á?ðÇñ3Æ}måÿâiâ…Ðàêœÿ×¼¿üM!ø…áeëªwÇü{ËÿÄÒÿÂÀð¿ý;ãýD¿üM ø…ácÓTÿÉyøšAñ§¦©ÿ’òÿñ4ˆ¾óÿÉyøš_øX^ÈÚœŸúa/ÿH~"xTTé„¿üMâ…F?âi×þ�åÿâh<*@#UKyøš?ábøS“ý«Àîmåÿâh<*Fµ?ò^_þ&�øX¾ÿ ¨ÿÀyøšCñÂ`àêÃ8Ïú‰zß4ÂÆð§ýò^_þ&�øXÞÎ?µy##ý^ñÚQñ§¦«íÿòÿñ4áñÂíŒj�qÿ.ò÷ÿ€ÓßÇ~Œ€ú–3ÿL$ÿâj#ñ€ê£�úw—ÿ‰¤ÿ…�á!xXœjsïo(ÿÙiGÄ cT#?ëÞ_þ&�øOü1ÿA?ü�'ÿGü'þÿ ŸþKËÿÄÖÆ—«Øë6Ís§ÏçD®P¶Æ_›ã�;Wh¢Š(¢Š(¢Š*+‹ˆ­-e¹�¶Å°N “�íXÇÞ »ûK�Q¿üMðŸxdãžsé¿üM'ü'þÿ Ÿþ@“ÿ‰ øÿî§ß[ËÿÄÐ<á‚@þÓäúÁ/ÿMÿ……ámÀjrz£ËÿÄÑÿ ÂÜÄÓ¯OôyøšSñÂãÕÏý0“ÿ‰¤ÿ…‡áP þÔàÓ¼¿üM ø‰áSÿ1_ü——ÿ‰£þ'…IÇö¯þKËÿÄÒÿÂÂð±8þÔçþ¸KÿÄÒÂÅð 8þÖôò%ÿâ}¨?|*¸Î«×þ�åÿâhÿ…‰á_ú þVòÿñ4‡â?„ÀÉÕxÿ¯yyÿÇhÿ…�áOú ÿ伿üM/ü,_ ÐTtÏü{ËÓþù¦ÿÂÇð˜$ktÿ§yøš?ádxHÌ\gÓìòçÿA¥?ü&¬3œǼ¿üMð±ü'ÿAoü——ÿ‰ üGð˜ÿ˜¯þKKÇþ;Kÿ ¼ÿÄ×§ý;ËÿÄÒÂÆð¦?ä+ÿ’òÿñ4ˆÞlcUëÓý_þ&“þ?„ÿè-ßñï/\ãv�ÿ Ÿôø/ÿH~#xL.ã«=~Ï/ÿGü,_ sÿ^Ÿôï/ÿ@ø�áCœj½?éÞ_þ&”üDð¨8þÔÿÉyøš?ábøW?òÿÉyøš_øX~ƵþËÿÄÒˆžuNøâÞSÿ²ÒˆÞ,Tj£#·Ùåÿâißð°¼-Œÿj伿üMâ…‰ÀÕ3ßþ=åÿâhü+ÏüMq޹·”ì´¿ð°|/ÏüM:uż¿üMâ…ÁÇöŸ>Ÿg—ÿ‰¥<0FF§‘ê-åçéòóMü,IS<Ç´¿üM<øûÃ+×SÇý°“ÿ‰¤ÿ„ÿÃôÿÈñ4Â}áŸú ÿ伿üMnX_ÛjvQÞYÉæA&v¾Ò¹Á ð@=A«4QEQEQEy¯Å�OöFüöþqמnÀÚÿtsü½éÃ’Än¼ƒŽÔÕÀ‘ˆàqÇãøÓY6�óceGn¹?¯ô¥�pl·Ëžƒ ú@l #$‘ÓëëMÚŠ¸Ú§Ý=œT>ãÎÆOþ·J‰Æ3?CÎ~”!]ÛQÃ`KOëOUÊXä‚IôõÒ˜r=:}éL‰8íž>ƒÓŠiÃ!Á9n:òOéÚ…$€À0É$cç¥.Ìg(#8ã¯ùþTrÙïÔÔÆ$ghÇáÓ§ãO< ³¨ÁÊñø~´ ÊC~br½sþqR¼Â |¼çœþŸJQðÛ�\ãüôý*Œ¡;2ÄŒ€Ì@'Þ�çïmxöúÒH’A´i~þsžy¥tÜI#© Úš£wÊ z—çBå˜ü­·g�×$ð}ÿCOXÛ�Øc××ê1þzÓ„`•_\cð£vRFâÞ�~¿¥)ä …ß½Gå*yVÏ�ŸóÍ2ª®ÒzçjñïHT©ÀÞwsœôý}éªPàrÃçüçõ¥9p9ÉêØÈ (2³(íÿ9¥n �çÐç­F"@a·'±ûÝOÃùÔ¢6xˆ«Á={ÿŸóŠi�T@?§4Ü6ÑËËÿ×Í ‚Tœ¨Á稨ÀùHÛ…Îáús×ÿ­Rc ÷qŽAÇæ(0à’=?Ï×ô¤!³�,“Ž>Ÿ_óÅJ©ûÌ îjCœ¯;°}3ùÐTŸ»¸sŽÔöVd9'çZcº…'w\Ž}¿Î)mPŒ†x àŸþµJÊ0Û²XñÀÅ&Æ+¼ [¿^Þ�ø§+�G<Œã­=�eUþ!Á÷¤PÀá›,@ÇééM9 (98Êÿ:vB$aw… ·-óz~âÄ ã'§ãM¾NÇØ3ÈëùWÑÔQEQEWÍeFâ “È#ŸÎ‚AŒ¹q;@?Oæ(A�ÈÎX�Ï<�ŒåüèS‘Ï ÆTÿ�4à0 »©ÉüqŠiR_*NHàc¿ÔTcîe‹0  �n€Ðs´…9Ë|¹àçÞ£$HDn8Úxúcüÿ‹€ËãœðG§oÒœT¡',8Á?çµG»13—ÚŠ:·áן¯zE;ÈTqÁêzõÿ#4‡˜X¸'‚:žÔòFÒ¬¹m¼¤þÅ åpÃs  öÇcJ¥Iì rÀŽNi­#ogžç¿øRỎç'ÿž?:Eî1ór0{ò}(²Ýœ–4D¬;È\Œ`ñÛÖ¬Àª& €FI8=W­\Ô~ôc r½¿à5›&ì‘�¹I9çüö¨[*  å°xàŸÇ§çOÜ'‘�”ä=:v÷§}É{�üD�¯Jo#‚„8;yôÅ/@¡\dóÈÇ<ñõ¤'s2cùÇÒ”(À@Ã#Ðp8ÿëÓ°ŒŒ¡OAƒ“þx¡OÌÅŸ1€qéýM4òKaIÈçƒRnA,}2F¾ix+ò’N0y>”Fß7A÷A-Ç4½9* ¶06ãž¿­HX€W�êÝ?:jüê ýàœÎ?ýgõ©1˜••€$rNGp9§7ÌÈ£9`Nz~¬AP1ÈõéíJƒæ�à0güŠ9bIncœæ½oáoü‹=úcóŽ¿"WoEQEQEQY¾!ÿ‘kUÿ¯9¿ô_>`';I*I= ¡“ÉNǧZ_àmÇv3’=sœRƒ“ƒ‚s×üj1…8PûqÎ3Ÿojc+ÅI'Àã¸âƒ€på˜nê 'òÆ$G�ÉäãùñëíþC †]ÛyÆ:ñÐóÛð“�8SÐóÿÖ¦¶UNK®FH'‘ÿ×üi¬ÃfâáT�xÏãšHÉs”u!O8ÞŸ¯ÿ®šMᔨ#s××ðþT÷!Ñ•”nê{çÞšÙT3Oáÿê¡0—#Àíß?Ê�Ï»n0;óÏùéL‰`êÏ Hüñùй�`poóíM#|M•ùOLcŸrN´ªîw!è<ÏëNLaOð˜9ÿëÒ;�H ·Í‚¡HÏoÃÖš¬X0*rR°!€U ž¤žHÇùýiä6Þã-ëŸn�©¹UlA$õäœc×ë@€e<“ƒÆÏÿ^Ÿ´o¶p3Ó¯j��K¼8\ð*ãøþu O 2¼œ�Ó?ýcNcAÜ£�óÖˆÎYŽæl‚¯òÅÃH%ÜÇvíúõ¸©K/bzw8ÿ)Xü¥•¾§$b•X�ø^ž˜æŒv€“ÆÜ cŠtŒÅ î Ö†!òütÎ:ïŸÀw©xÜ®p@$ äŒöæœÜ¹¨Ž;þé\©'Tãצ\R Á$äžÁ¿§çH2ãqlƒÓŽœW·xþD�;?ôÓ¶3ûÆ®–Š(¢Š(¢Š(¯6ø®O™£2�œÛ:ó¼3-ƒŽ1�ðúSI!7¯'®Gz>öàç ÎHãâ�,´{ˆPàðqÐôëùþtÔ*œàøÿ*`±©Î:ÿ�!]íÕ°GÝõúæ€w)É$ƒŒž}3ýȦ�Æ ²%�8$wõëM.TdR3FOd€FX�Oj .ìãÿ_ëÅ10¥Ç@9 ØþŸçšsž8=?-01c†ÁÛÛnFfWqžx=qÚ�€n¬£±ÇéùsAÂ/Ý †àž?ÏZiw~Ý:{ÔªrÄ8àÃô§¿îÕ¶rXÓŸon*팲�çæþ½{ŸÊŒœ³v³þ{S˜GŸº¡Aù»zÿýzR#vPF;ûzþtõXØíäàîè:ôëM(ü cø²zw¥û€í$àãÔš”ijTƒÉ£p�ß:Œã¦@ìU¾bsÇaÓ?—ó5:…Û÷”g’ ïïúT(X’d“•ãô©·2Ï´ä€s�é�­'–Ûw‰äô¨¥•ó¼FyçŽzçéõ§yJd$ô'Ýî?Â�±cLF@sMƒ%‡@x¦€¥Ëe6úü]é¯ó”*Ö<ŸnßÒœY”†U<A>Ýsþ{SãùÕU—ô9õÿëÒJBò§9ÀãÚ uQ´çœä“È?‡zzêÁÐnÏA×Óµ * q‚0 ϱíGð§Î€Ç#’zgùÒ1+ÈË1䍯âqÿê§+1*Ù_lJ0T2[$‘Óé@(²´òN?>ÿNÝ©Êï¼:‘ü±MÜãÇ=0:ôϽH¤’H'%z{ÿ�4åÂäÙ'9,y=è–‘’3ßµ+`~\ãÓ¿µ'E\«œpÞÇ?ZUÆ,ŽÄ ‘ëC’pª}N@'š6íÞÌ9fÀÏ;pqþ?�;~ `¿(!@ëþxÿ&šÅ‰ÈTw­}!EQEQE|ØH ó.G¨çéI°|ĨùŽ2y'üó@ÆyÛžH8ôú÷挫(Á8#mãÒ�áƒdô9üý*6*ª_s.ã=ÿýt»Cƒ–ço¦)ªNFáøçúÿŸñcr7*þðŽ�3úÑ€›¾b9ëÓüšcîÚBíÁ`Hçô¦³`§kÈ rp3Ÿ¯8¤¬…NA ` çüýiÛ1:�x'ßüšiF' 0'$ð9þ])ì …qíþ*O˜á¯LçÛ󦔓xbH‡Òœ²Œ©'8=�ãJ‡÷jGÿ §°�í�rÍÈ÷¡w ¡Î1“Žj[l™ÁÇÊv• öã­\ÔÓrªÿ²â6�k>U,ç�ƒÇ¶ EüŽÄìGQNv±åˆsÔST†àüÜž_þ½8‚óOÝõýJ·–zîôþ”ÕVå@P7uëÇj]�½�a·8ê?ÏøÓ‘2«ÂŒýìr?Ή2·îÏ-ŸLzzã^˜ÉëI´z•à©ÏùëúÓÆà-ÊŒz¯ùõ¦ýÜcòƒ÷F8ëNK¸ñÈÿ?jpÀ`01Î3Û<þ¾ô» ™ %ŽY€ãžÕ!Q�<};Ós”³»¯jQ’Fwdú õÏ…˜ÿ„^à�Àíò%vôQEQEQE›âùµ^qþ‡7þ€kçàÀ1Ê‘ÓsÏùÅ4 ‚«ÉÏ$ÿž(;J�Ûn ñõ§¸ç$“Îúzý)§ ¤•ïØ“úÔyU‹•Î>_Ëüþ4;K.KcŸçMåIÀ<çðëþ~�¤e��Ÿ@ÿª‘UÆâr{ð 5·e;�Ù?0¿ÇÒš\ç 6ï ~ëøóFÕiw† HNp?Î~¸§‘…AÇ�éý)»~Qœ Øæƒò¾ÐqŸÇ4Ó·É%H<©öëúSB°|œääŽ}I¥rwW9^£ŽùëøR¦âûXðݳƒCàaw Ǒ܃ץ+¨' =‰¦„ \ô88ÿëPvApå�ÊAãßëHIÚC“ýÓ׊*£3 e²@ŸþªW�¾ìà‚ǵ§øw7ñ?Î�Ì`Œž‡pè}>´d…œôöéúQ-…܆ÁÏN¼Š@Œ#Ü쥺’G·ÿ^¥Uà|»TvÇOóŠk(rJ ž¹É'¥H¤œýÕöÝ×ÿ­IårÁIR@Sœò?�? êrß1àƒÓÿ¯ÿꦂ7|ÌÙÎáýiB¦àåŽTçˆ�à{ÔŠ9Û��08÷éŠTm��ÏRò¥P¤lSœ€WüãéíB¦ÐŠ\ž9f>¸#/,C7ÊÏõ4„äg’s’8ÿSÎr qÈèå^Ýàù4ìÓOýÕÒÑEQEQEç?siÿ×qøÇ^jq8rÜ`dãüÿJpeÉ]˜Ëw×ÿ×M�À ¸ò7‘é‚3þ=:ŠÝßÈcÀ'�o§LÐç;vœ ÙçüŠY@ì¼dç8Ï×ôÄ$ðO¾cHIÞ.Uºäs×ùÿõéIb›Ž¨8'ÿ­M'“�Ü�cëÍ5Æ#=TœtSÀ£aÀ<ä7Ž£Ý 10£s˜ã$ò9=�åJȸ Ž)ª 60Är:>()Q»æ9 ŸóíÚ¥x;†áÉÉÿ'ÿÕL‘\7g‚~oóþE^@Aœàœã8ôü©ÊÛr9¸÷ÿ"ž¡|¢\ãŽÃ8þt:î9Sß“Ó<‘Q¹ �©ƒ‚séÁò¬¬§ èQõõíH6°Tn'¡ÁÆN?—Œ’@Îìd¶OnýidLÇ�Äv$8<õ¥BÀùwvç?Ž}3ý)Û¶�þX%X��Î>¿‡ùÅc¥Ê°ägõ4„±ÆŽ»ˆÇµ U2nÜÎÓ´€ÿç·×.ÜôÛé“úb„àd“½º�Löâ”ÊHs³�¼qÁÿ?Ö‰1ߌŒ÷ǽ1W±'$sŸòi0gh$t çßùÓ^0A'nòvç¹_ZÙØ°lÇÈö¦g$)\ÙãxÈ©Qv¶3ßo¯¯ùþ”¬iËëë×­FÀª ‚1žÃšj°’ Ç9Ï\P� 8Ûüô©@ýáääv¨nM²rß.sõïÒ‘°Fü6ùsÜ÷üiZ5 9�½×¿ÿ?Ҝı< åA^‡Óõ§›¶’@Ò‚øeAÀ%{zR21<€ç#éßùÿ�IÈ�9@sÏãüÅ. (.:ŒdŽOùô¥’ <€ž£Þ•7… й#Œ7Ú€;« ©'æ=†sïAÏùrIç9Å(�aï×¥·'ʧ'¹Šs(,T•ã‘ߌÒßqÆHÿ{Ûê+èê(¢Š(¢Š+æÃ´‚§ÜóÔ} `fI<Ž8ÔýE4äà|„2O­²„àzœqýÏJD#vàô›˜KŸ�¨Îyëôýi\ìè½ÇL÷éþ{Ñ·p2l•Žœg·j~ì`sÈÏLqDE€ÜÄ��0O¸ÅM “:99äqÏû5sQ$l=¶�ÏŠÏQÎÜä�§áQ4Ü ±ä¦y¥Q–$ïóÞ›U�†ÀrF¸3sr<€ tÍH…Â�pÝ8=éHÊ�¤’FGj`ù·ä…ÀÏ·Òƒ÷C7 �¤ã$ç¸bÇhÝžÏZU°nç¶U4R£ƒÏ<Ÿóþí¬° ÏqŸ__å@Ê© ’y%z�Â�¤#6Þq×9çŠ~ЀÝ3�žqNA´6 Ü÷?çêÊíМõ³Nl!R6�»–öïùS”º’H`:°o§OåRÆOáýi–\®~5ë ˆ>¸#¡»nùþ®ÚŠ(¢Š(¢Š(¢³|Cÿ"Ϋÿ^sè¾}ùpÉ*F{§J›°ÊçOúsøö¦’K`…ÛŒîQǺõ¡›€Ät89lzvéž?Ïq8éŽFAþ”ß,® c€NH¥4«ß0<ØúŸj@ Ýž:|Ç�xü)¬‹†àŽ™ã½‚¬Ùþ”uÁœö4Æ¡b#Ó?­(ÂyÁ>œgúRe9hC‚Ç’‡ž§ÿÕÖ‘�bK/#…9Çùâ‘*²‚{qŸ»ß¯Zj3sò¨@0_ÓúPÈl�WŽ„çÔµKç#w8æ•™¹P„÷cýßþ½#gº1ê:þ¸ÿ3±NC1ÏrOÿ®‘·FÄõûr=½)d*P…@çnFIÁ§{6Áöþç5VòÈ ·vì0ô¥Û¹XltŽØ¡÷g±Î}ÏùíJ€À6ð\“ór§ò¤/31Œ}i¤å‹•ž£¯áN–î@#éšL>Î¥$ä�qþqJ,xc¸G'iê¦=Š9éÉëúRuÈRݹŸ®}yú})Ý)^0 ëÆ:PU•AîÈÆ=Ï¥?j†8;Xñ•ÇlÓ×å_—q=¨Ü àõÁ<{šV;v… ‚ßâ>žÝiêYNvçpäœÿúéÌ›A=}?:R%w ëרÇ5íÞÿ‘/Oãþzu9ÿ–�]%QEQEQ^oñ_ïiŽ“ñÎOú¾•æîÛ>u`Ã$ðO íÛ•Ê¿Ýlžø~´/Œ�Üg¿š…ó»yðz~´b™ p=þ£éMo”„ÝÔçÔã¥"åY‡M½9?N¦˜Ãƒœ{ôÈ¥,v¡ûóõ• ]¬æ8ëϯù­3ËU鸱†ÏSJcÚxÏpd ª9È œþ¥Gå,à`1ê3È#'§ó4óÕ‚ºî\IëǧíùXŒ œä÷ö¨‘FÕÆâIã$ƒíŸð5)v<çßùÐÅödcosžGùãŠD ðWŸS‚Ãüž•$j­·róŽZkrv�לÿJ]˜8݃Žzž´Ž@s¹ºŒàà÷ýix} 7¿ÞÁ?ýjUà=ñÓ¯_óô¤p<ôðNËÔzóÚ•W.§¿ôüé Y�;ŽÿäSŒ.­»Ÿ˜‘žâ�„lŽyûÝ>Ÿç½(Qå2�§'<šjDH‚ `zŽÝh0»“·ÈǠźNAÏœŒþŸ‡çQ•ÙèTã’sÓÿ>¿ZO/'nTü{ÓÝUÔà�ÁäSéMùäœÓšHÈbÙ;FrO·ãô¥T1êÜr>ôÜa¸£¯?çð§•P0€©'Üõ¨�–àÙÏ# IüûZtd”b¤2ç�¹Ïãš@Xäœ6[·ÿ8çŠk. ÍמùôÏ\ž”ò§i ÉŒqþ{Ó‡ ÔàŒç§Ó�Ú—†fÆÆüÿÏÓúP ¨N2ç<×ÿ×Nc–e#+��ÜS1¸|£pÀ8ç8úŸÆœ€#“ÀüIöíÐR‚êÄn$g'¿Aþ~´y™6vÎ8ÿNosÏN9÷Ï^)b,'+¿9äñÜ pŒ6`äg‘þ ÞFÚ0Ý0?ϵ0aø%N@é׿zzÊ<úÇÐÁˆ$`2}sïMd€da�Øõü«é (¢Š(¢Š+æ K ÌÍŽ�§óÍ8GûžlðqÀú~t�·œ7d žyõïÿפlmØWi\Ÿ—‘éÖ‘¾d2/*G9ëÒ�¨R¹8#üâšË#1ÆyÆ8Ç×·`o �è ÿ8¨Ô3�ÎÏaëÓŸjMŸyA8ÏsùŸóéM�.íÁrÇ Ç^àiNàN>½?U·N ïŒPÌ2BçžSþsNe%~ñ'¹Æ};S~èýïÄú…!_˜§÷íõ£ko, Æ{×ò¦³Nxí’9ïéõ§1x‡b£ŸÃð¢0 ¤óÜžONÝ©ñ�¯´nÀêXþƒò©`Ïš ç‚=ÇoóùÕ½DcÇ\éÞ³Îîr;n‚¡ty>¤ü¤œóŠS–ÜJƒœc§ZvÐ<ÎrrÇn2i¡I*ÌNW'æ¹ëB/É÷¶pNyï�òhó0玼äcüiÄ�Hý}):• ýN~ãµ=Ñ€¼Ê€8ãôÿõS7ÁÃÇ!q�OÊœ3Áç§o~�i܆PŒàžŸ�øSÁýáÀ+ÜS·„ ÐÈã<â¤@ ©'{={šWia³hù¾lûð{Ó°+’r2G9ÍêÁƒ:œ}iBïRÛXäddÿõûTƒ0 òû“ÏùÍ� 7®1ž¾ù¯[øZAðÅÆ?çñ»çø»z(¢Š(¢Š(¢ŠÌñ!Ç…õsée7þ€kçàI`9È9$ôߥ ÂK??ÄØÇóéÒ‡P>PA Œ+=ÿÏjk2ðH+åã=që×ð¤uÀÉ#k7€wúRã ʃϠäâ˜ËdžË.1ùLpêÄ9¯ãÿÖ⛂ ÛÏ89?‡øÒ*ðÎóÏ8ÅFP,™UËo§8§�„©`á‘“Ò˜y,ÄäpÛ4¤cŒí=±Óòü©Ò+TŸçž¿•1ÈR«Ñ˜9#©ÇçAá†@ @�Á$ãÐ9"™¹|̰À8$dö©¸ä òW;±þ§"ù‹�™GqžiH|ÎÀ�“Š�C�Lœ‘ŸóÿÖ¦±v—˜×hÉðsÓò¤ ņìäG`½*©"2Ùþ�œt¤]ûWi-ƒ€JýÞ;ÓÙWh ò°9^0GùÍ*¹bI Œœš\6Ì„ ôÆqÿפFÈã�Osßüæ”’ ÁüHúãüÿ�!ŽÕ�~\Œsþ”6ÀIR@ôïQŽ:åˆÏ8Æ:þ”ì²±ùXžî;_Æž¸Iv€8ëŽÂ„`™ÚòÆ?AMo—s”“�0‘Ûü*RªÀ²€Ä‚3žÜwì8 ¤’vpÜ{ÿžôà£# Ç’:Ò©Ëd ‘�ëøÓöw*ÝG$ò=úúSÆ6‘»8šBÜ ÞœŒôïœ×·øð„éØéûÁÿ‘ºJ(¢Š(¢Š(¢¼ßâ³b]rFá8È#�õuçC4aŽâ~÷åÆÏø±×r|Ê_¸ã‘ôüªEûÜn+Û<þÿ=*>U‚•lg¡ÿ”l?(Öù‰éJÊ©+”àäòE!Î2¤ÿt&îŸàÂ�ªF>lc=;þfšQp… ŇNÏ?­! ;œ‚t¡™†\ddd–_Ë>”™Ãާ° ?—ó¥XùSòƒž˜Î>‡Öš£„2sÎãÁÈ õéêN0O#ŒqJ¹t�Ø8ïÏçCÝ#çœôéþ*@¤�¤œ(È<}ýúû~•4hèHÏ0=©î€u'ÿŸÂšWäLƒ×åÿjiVeåGŽÙæ†;¤#å< ƒÔ£üû{PÊ ýÁÇ ã?JvÕY7*ƒn¯öíO%b|Á ›ÓŸ_­*¸¼�œu暘*ÁWváцAüóÍeò[ïcw~¹ÿ?Ëñ¡”°ÃcñïþOò ‡eB ®1€{}($}ØÈää‚zöõãòþt’Å”eOP 'ÿë¦ì' 8dz@NîO'<·§øÿú¨PÙ9\dð0:H©æÁÛÁÏ·¯jr¢®–ê1øŸ­#&I6|�OóùTLÏ?!?L}ÇߨP1˜ÿyÐþ�+nÝæžÄþ´ÀIaÎçl`ãƒêG?çñ£v@ã vÿõ~”ÖŒ°Ã�Œu ÏOçÉ¥—æä�ÈëDMòœô'’8=1Bo`I ¹ê}ý»ÿ�?½‡99=8�•rWp'hŽÓô¥LŒ.â¹\±?×ÖœfR€£€H—Ò‘c8bÎ:g9 äpS$½1éý*BŒgŠñ×Û?Oë@` Fê<ôÏOÃü)Ò¥JG*FréÏãR2¨}çÿ&“å ÎW<Œóêi1òmc’O €qNûREÁ sÏ?¨ôeQEQEóaRT®ÕÈ„sŒý=ñNf(ÀÂð{ý)oRH=;õ¦ºoB£{šb– íR8ù³ïšUóÆäcÎÏ?ýjCó`—*Ùúv¦!#‚9lNÿ\RýãŸ� É9Å/;ÎìOP1þÏàWäU%sƒýÏ­"nûÇvzŒÎzŸj~þz`àŒS6]ÇsórFÓéK!*¸eú}?úßäÒ�B“¸ã9ô8¥ ²dcŒsÐô¥PœdtÆ~�½jxɨ}Gj±¨¨`¹Æ6ƒÏN0k:QµwHçµDTŒ&1÷Cc?çüõ£a^’9ùG^)ÛIçoÈ®x¦ì]¨Ä€Ã=xÁæ¤É†ã¿sQ†Æ&˜ëßÒ�‚‹–#¤ðÿª‰®9Éâ�´¾XžBñ�ßñþTÕìIÉ\` ÿAO +}Åcp4päü¾[ dÛùNiã$¾0xàÓJ‚ň s׿c�Ëõ©#T8·/b ç�¯½.8EÀ9<~´å!OF%HÇ'Þ�“Œ“ƒ�·o¥<—’O=zÓvÊñž8ãòúP‹#`60w}?*õß…§>¹ÏkÆïŸàJí袊(¢Š(¢Š+7Ä#>ÕGý9Íÿ ùø©eEÈíÔz�*ä*‡8 cž{?ð¦²|ØÚpÜŸçÚ“y9oþ¿ãúÔaA.:Ž£BxÏjqr¬Crêx¤*Iç9‡ùÔn»–26•RX‚9ü=)°�@ «êÙÎN´»~A€#>¿çùÓ Œï:žIù³Øþ˜¤F½¾R¹ûÃ×Òœªwg :}AÏJËÜdô^?—ÔPIa~A“ôöüéN>u%�óÓüiÁ²Å€çúý?LHÊŒ¦2Çœ±þ_•+°,®Nr:sƒHÊ@RìÅA霞9§ª‰<�ß\ýi1ó�ÃtÉýj?()8Úw“‘Œu§`1 Ø=7{SUH q•àíiv2®1‚zq�£üô¥T †Gê d�óëҚπÙeÛ·<ü§ÜóÓÿ­JN¸'ã€qúqš~Ò nÀ$õ&£É$ð7)ÀcÏéþ�òL�{3�ý{ÓWÌÚÍ*ŒÙÈçÖ¥, »Hv&9ž§üšQÌd*’¾¹•4NÑ€8 0IÉ'üúÓ³´°dô-éë“×ÿ¯Q€ª®Çjž¹Æ?É=}iã<@Áz{S+�Ç$QŸQšVbÄÁïþy¨È’­‚GןËëNO—$äcªã8Àþt 9=Fh;sÔŒ:œôÿ>”ˆOÌ¡|Ù9äÔž>¿Î”)Ú7mÇSŽ}è^Nø㌒3Ç·åGA¹†&p9Çÿ[),Aê¿xŸÎ…¼¶ìdúcz_óïNDî—æ!ê3ïõ§xnOÊsÛž9©d)cÏ$ã··òíÚœÛXžÏZl6@9#©ÿ?Zj’s–cÁüóþM5I`ry*O§­;9�ÀÆ_Î’]±«X“óŽGLôô§ª�ƒaH9ôçúÓU<3ez�~ç­(PÁr:ò9ö#ð¦ŒnÜz¨8#¸útéŠxÂä1£é_FÑEQEQ_5ÆC®ï—x$ ¹àvþ”ý¤±l’;ß_ñ¦H~M§�Ä·9?çé@ùˆùB¼‚OùÿŒ®P””$Œ6N{cÓŠs†€}sý*0Å€;9è}zþ”¦<¨ƒ×#=—ZCÃ^Çîƒíÿêüé‡vÀÃsw#óÇëHYÕÈ\ `œçŠR2Ûð¤cœ{ÿŸÆš§p;A# ŸóÖ€vŸ¼Ä–í“ÎzqKß-TÆq•qOMÀ}Àp8ãŠc#‘Žv‘ÁôÆ?—øÓðY“!†=sŠj¼¡vdW—O¥ ½# d“ÇãøfŸÁ$6ìô÷§÷Î8üªH—÷Ê )S‚:xöÿ?•O¨©%03òtÏ_»TŒt`ÛA'Ÿéßÿ­M;dQ�Û·g‘÷©8“p+‚ “Œý)Í…ÝÎGR2=¾´ÝÙL2íÇ\|ج�³´dg=)ª@¶3Œ‘×üÿžô¥ŽÝÙ$w¥e œ�¨Þ:ŸëL cÈä€x´å0Å—vÓòŸZsd)'¸ásI‘ºù�‰^ÀŽŸÖœªÊ7w̤œâœê -ŒmäzŽ) p9\d’£ðÇò©]vØ(ó�é�Ó­#~òíb½z�ø÷ç5 y•‹ã¢�€) Pòï�×éK„%ˆPr ñÿê¥#8#…Fß½þyüëÖ¾ÿȱsÓm|cÓbWqEQEQEQYž# xcV'Suÿp×ÏñýÄbT>0Ät´à¥Icž¼e¾�¿ �ÉP£nJŒí$’{õúŠP«Ó@1‚IÁ¯ùÿVùq’ ƒ•Ü?Læ›VbC“ŽOáŠp,‹Ÿ/'§¦Ïùõ¥rPpyÎ3ÓéJ ßœô8S”8á½ó“ŠR™bà çƒ�SïH¤— ‚éÁÏù?­JÙS¸tœdñßµ �äW‘’WŠpÊ©`wóø†Q pTŽ1øÓ¾L± €NI©÷üiAäýÑÆÒ¸þ®Ÿ•{oÃüÿ§gýïOúèÕÓQEQEQEæÿ†N‘Æ@ó�þ‹¯;㘄~/Ò˜ØÈ ãqøÓÁ;úG?\ÓJî9^§¨'Ͻ “q%ºô<Ÿ¯U@îã ~Óœ•Àlž8äsHS’J’xÁ“ŒþŸç­($‚dƒŽ”Ъr?1$Ž?ý|qCqÇ õ˜B»™AêFwgùÓß![<�P;v¡_*XsŽ€÷¦€>PWxÿ?ýzUM¥òy?Ä)«�›`QÁÎ9çüÿ:x]¥G èW#ÜR°s´^=�NµcÃu*Hô铟֥Œª¶3ò°ïÏOóëH„dq´ž¯š–(ö¹o›Œgƒþ­#£ˆ ‚Ä ¯aþTÂ2€’>ï#üúÒmÚÀ”Ãs÷}sD¸ $àz‚?úÔ›àœ¯89õïþx4†-îxô8íÇ9�·ÍT,71Ç#·¹©2Å�c·åäÏÓû·mÃ~sŽçþ¯Ö‘‹+¡ •Î0F6þúSFDŸ; G öútÿ8¤hIa¸œr3Ô~Tí…ÃßL`b„v“o zsì)]A— :Áž”,Ì ²íqœÿ\sÓŠ‰chæÚ2GEÿ?Ö•ÆõF^�x=i„"�¬Á›¾*>lrKzcüþu!ñ·'¨ÏN3ÿë¥SÕŠ†#œóCŸ˜íäùÿ*d�‚OÊ1�Äv'šz¢¬AGAõ㜇Éèç8À¥-òà‚vŒ€¸þ´�ÙÔ” PÇ¡ëŸÂŽ `Ž:žþ¼}χs6Aùs‘�?Ïÿ¨S˜á¸^ƒ1øÐ[¡'¯¦=z{÷§äl=±êzknB@@OZËÈSÈ8ÎÜþƒéHÇnÝ¡C(8zúЫ¹A*6·#<útôü©K‡sùXã?3/¯¨£pËsÈ$tÿ>”ï»÷AžKœRªàpÜ}kèº(¢Š(¢Š+æ¶;£m£ òsÛŽ( ,¹*ÙÀÀžiª²3�èq€>‡üÿ1FÑ&sß�Î} �Äg*}Hëþ{Ò*yCüª¸öÿ8ýi%E`TŒe³ž{zRdåð 郟çM¸®I'©ã#>ßýoJEËã AöÉêr 3€9ò88ü:�yÚ Á䟯¾y£Ê]¹( ’:ŒœôæœÍÂ8Éù‡¿ôëRE°²…b¹ž¿ŸëNiPË/]Ý}ê,–hò¥‚€rÀexàþ•&Å�/p{ÿœR¬hH8?1ëמúÔ`8'>‡ëú HãÝœ'ÎØÎN1�ÃÒ¥(ÅJ’29Æ3ϧ4¨s*)^ c�q�óÿÖ«ìk„ÙÉžôâ�pÅ22qßÜþ4HÁH#qR:óíS¦Íì ÀqüÿOÒ’Y06€@Æ7~ß¿1, ƒÇ¯ÿ®•UTwmÈ rE༌ŒŽÿ縦´f#œuüûšzÆ[;,sœb•×Ä劃ØdûsHA�•py'¦?Œà7—Œ©{ôÁü) ­&Þ�9ý=irôö'­4lX•×hÈÉãz~´à‡%“vìqþŒƒjìP˜9w®xúša~ÕÚ2K2Hÿ&�媜c“�Ó =�#p¹8 `ü£‘ø~¤;•¹çå Ý?{y`¨$ Êxã'ç4˜.ªdÎHþN=ŸZ0QOÎOR7é�çßÞŸ¸g qÏAõš¨Bƒó9¯ANWUä·Ž~µí¾ÿ‘'Nÿ¶˜Ç§˜ÕÒÑEQEQEç??²¸=&çõμàáAèLtÀÿ>¾”„ª�Àà�èϵ+0Áútõ¥-´çnÁj5dŒ0áH'?_¡ü©Å‹äŸ‘™zéHq’3Œõ$uÿ8¦!a’ê:ñ‘×ÿ­øR€~o4�»�¹Ï=]Û†zÿ{éHÏ�‘ˆ9ãwLŸNŸçš#DWqëõÏøÒ`?TÁ9ãvúÒ°*ÀÏ9§t8é·�ŸÄÒ*®3»oÞ$äþž†‚Q‘Ca³Î?Ïò¥\FAþ©¥BÈ G�‡ ŽqÇùüéÌ1�Œ0år)w“ÆÑÜ’zwæ¥1ˆÔu ýG×ÿ¯H¹b 8 2~ïù©Ú=£qÛÎ?Ïãÿפs¼€ `žN3Ÿ§¯ni¡FKdœ›ŒÐä�2Ì®1ôæ•J¹ÁìxÍ5Jgæä`ã  !ip¿ˆv4¨e¸ “Ó'·åéOÜ¥`ÄîÉÈî)Œ%}Çv>Bp1úži¥pÉ!,FSÁÇSŽ�éNsìôp çÿ®i *g¡p¡ˆüúÊ‘s¸ä�Ç F8<ÿŸÒ•Ô“òç€9'½9Æ üÀóÏ^O_¥;Ëó lsÇ¿ÏùÅDÊÊá0yž¿çÿ¯H»6…îçÿ­Q>UJ.±ÉÁü±Œÿõ©ªr䲂͞9ãüÿ’9e“¦@<`‘þ­;r^‹ƒÀS °�€Ûœu#'§§ÿª•TïÝ�—Žƒþ³Çë@pƒÓ'ŸëÖ“aàcv8ý9?…5×÷daKõ ùS£ÚçcA9•YT²t'“íþqH#ë‚§§¯ùÍ9ÇÊ¡x%ˆå±œôíÍ ½B•ÁŸjBË·,@ù³ÂôÏÓüóN†íç¡ü?®h-„RÁ‹60;õÿ>ô çkÝqëþϤ€9¯C�óÖ›Ápp1€9$äc¿§n´ð˜ÛŽ@brs“ÒœˆŒ�Ÿ Ÿ^+èª(¢Š(¢Š+æÐBÉÀÆO=±þ=:ÓU” ?Ùã�þ·éNÁWQÓ9à`óÚ‡_›º�Ž˜Çå”äŸÇ‡Jl›ÚN ŒAà�óéŠVr ç§pG^ÔÖ‘UW²ŽØö=})±«0?(QÑqüÿÏ¥1°¹rIõñÒšC¨ÜOLö§�Á·(=ù9Ç?­"¢È¡~lO¹Áÿ>Ôóä•eîàf” †ùAÏ+�Ãi� �¤Ž¿‡Ò¢ØBü™Î8$gÿ×Í=—æ%rr9>‡?þºnpœOnÃùÐÑ 0;ó¸ÁëŸëÓÚž�òãiùOÝ�.òc#qŽ=?:z‚n Œ�ÀäsS^œ:w;{~Ÿ´pØ%ÁÈ>‚šc A!A$çüþtæ �pà3ùÓl“°`s’zRq»9Eí·©çÛüõ¤ü¶ÚAÎw sBp‡Ú;ŸÂŸÕ0N#8ÿëS#̈ã`àõÏáõÏéNL`ÍÈägžÿʃƒ!Ác€ýf�¡À Àr1“KާsÓõ¥ØsÓ'¨Áî?¯� œ»ddã#¿ù4ª|¶Xúdàœã± ûôÿ=iëÂ0-ÊžqÚ•%[ Ó$úâ—pû‰àäõÿ?Ö—h's®ÀÆyþT™8ÛÉGÜb�’Bî<÷<óùþµë ±ÿÕ×cöÆÈô;»z(¢Š(¢Š(¢ŠÍñü‹:¯ýyÍÿ ùø2å†0¤äc‡Ö…#%qŸM§äÿõèQ‡Øq÷xUÁúŒÐã±,Ï Ö‘‰  ©ÝÔâ£;¼âÙ\)ÁçéÏ_Ó½+7˵�ê1œöâ›$‹ÆîA‚8=;Ò"»!%vžØì)„Ž®I$ ž¾ôŠH6�HÈÞ—fÝÙ_”ŒÿŸzTA!· œÃ?äûÓ•T€C‘Œ{~&JŒ§à¹Éã¯Ö¤‘D�ƒ&�¼§ëü…"†R6çߎO4»pزäuÔgs²�¼wLþŸ…!E)Vfã'·>½?Z�JLañŒ `tR—' xììi ’yPGAØçüŠ…Ž@AÝÎ1ü4‘®0TÞ¸ÿ>´Í‰�1ÆOà}*yUBÀ^˜¦Ç,cî@Áçüýi °sm€8ZS¸ áJŒä“Ûñ¤R|µ÷à t¥q”ySÈÊãƒü�åB‚ñ``€zþ?¥,x’Ù ýOçøÒ˜¾ôP§œÒìV;Ðë�Ò”/ãàçϯ½8)'–åR?š0þI‡­=:ùx ÁàžÿOJxæ0A%ºdzЧ9¶`’ÿ¬S·ÜÙÁç?çúb�Š9a×�Á>ô›ˆûœ…ü{ÓòWj"`Àãv¯lð‚t𤑙zÿ×W®–Š(¢Š(¢Š(¯7øª“H~¡V|ÿä>kÎÔ€ 8Ï×Óò¥`vŽO~ôÖ!YZGpNXöÿ&�8WáN`ñ“Œð}éÝ 0û£§òçñíMßœèÜ`véþ&ˆÎåÚryǧ_óõ¦�p çž¿7Þ4›U ÀœàŒžiûp¿2€£9Áöÿëÿž”Š8¶WŒ }sHd°, äð§j@€JJ’p£¡�óü¨ $�rFp½Ïõ¤? Ë`aNzÿœÿ*v Œ¡P0Íœâ“�¸†§œŽƒ¥8çy÷0»ˆÏoOÂ�†%'ôè=Où5'XÏ\é׊”"�ãè:Ÿ_óøúÔm¨á¾QÐóþ?…D>†y=F9íüºÒlÁ=Ž2wuÏ¿¯¨¾þH`zƒÒ“"7,r¨œ_jW烻¦[óý*=à Œ¶r~ŸZÚv–Bô÷ ¾ ïlœçüóù}(Ç@ãƒÀnƒüãÖ—hëÆr0 �Æ‘‚’X‘ß¶iÁ•NÌ€{f† ñòöϦqB¨ÆÕL’$õôÉü©Š¡‰.ŽIlàà�ÿêçõìiûJçvXrp1È¥?$d19ê3Ž{öü©òT‚9À#'šx9Á<ƒÝzu¡äƒÓŽùçùÓpf6àýyüià�\ä“Î9Å5pªW�€ycÓ�n”åMʧ߯¢è¢Š(¢Š(¯›Aóæ\Œg ¯ÓüþT�×$ᛡ'ŸóéFC‚ÄgŒ Žô¸^1ÉÏ÷ª6có–lc¯$óŠOâé†#Àê;R(ÃÁzœ�çÇJT ’6�Üž¹êÏZhWÊã¦sÎ9¦6Öúä7]ßçüóNݹp:}þ´‹¸¡�\s�zE$ñÊúqÛ'·NŸÎž¼eeÿ˜Ï_ÒœÄ�ØÛž3ëNrJ……<äŸZqBU[ä 8ç'§�5”«ƒ#à“ž:ƒÿœŠrþìxú}{R²»º°.CK Lˆw’ÍÉ œµ( �¼�>¤ÿŸ­$xW¹|€:šõNhc#€qT[ ;{ÓXgæ_½ŽäŸ­&Ъ£h<ã§^ŸZ0p¤0Î=‡ÓúSS,¹õäúÒ` m¼qÎ{§SøÒ¡6É‚HÃõ?OJC»É?.Õü8÷¡J‚9ìqŒqÍ<7ËцÁ'9ëJ GÁç9zS gï pLv~eÆÞOùâ�»Y²N: àýŠJ/‡QÆOj”A!p:`Ž´œ™Nqƒž¼‘@fa“��¼ñÔ*•X•NpOOééëJ3»cp?„úPÙÁFr ~£'{?9Ïôú~•ë ÿäZ¹ÿ¯Æü>D®ÚŠ(¢Š(¢Š(¢³QŒäöïQ²&Ço¼£üúÔ�ˆœd{cü÷¤d‘¤%p¹÷öÿ|Qìˆd–ŸãíCïÚ8ÀÎúßç4ŠÈ¾fQ‚3ôü»T€ä}ÖC�OQÅ XÉÀzÓCî!›¿ÝÈÇþ´å¸Q´g#Žý^´„`1$‚~éÉ?Ï¥ Á0�ÁryNœu=½ÿ�©€ãpP2sƒüÍ52ŽÌÇ=þŸÎ� Ü�_Lã×¶jue|¨*@<ãŸ_ëü¨bQŽ·~(É%p |ÜÖ‘NîNãÔ÷íÞÿ‘+Oÿ¶Ÿú1«¤¢Š(¢Š(¢Š+Íþ+-£‘‚��Fsþ®¼é· “Æx<烞¾ô⻃DÃ9à€:�ÈŠrÄŽrsHJ÷îçäâ“Ì ™`PzŸÊšqà ¬¼�G¸qøþŸ’�¹ºrçnÝ¿n7 ȧiÇOÎ¥($8u\�1Áç�éQ¾ò¶•AêGÓ¨¥#¨;Xyè=j3„UP¾X#€v�J“îasŒzdãÛù~t¨ÿ1$‘׎¿ài9äÇËÇ×üûR¨Xã#§8ôéúÒ®v¶@àwÆJ\|ç9¹ä罊äót<ÓƒHÃqÇ#�_Çÿ×N`HáÍþÏ?‡Zp ¹K3s�Aúvýj`Ã#�ØãÀôã§Ö¤FaŽINùõ¨ÊM´€Û¶‘×=8ïÏ¡¦³€¥ìc8ç�ÿÈ©P*ã,2FO×ëQ²*dŒ`©ëÈ ó@À_Aœ‚:Z™1V CgæãŒÿ/óÅ*òå¾RqÉGóïM®1Êã%�_óÒ”ôŒ ay8ÀÏ¥8î'yôüÿÏô¨/˜>BOS�×?çµ" B<±…è2xöTbA`N9ßäS7íXuÇ¿­d_ºv®xŸóÐÔŸ0�FqƒŸ›éžyþtÌîÚ�Ã};ž¿J€á¤%IeA_§~¿Ÿj2äç9ÇçïþE$˜[®z|¼�þ¿JR–'“-“Æ?çHP ü¤’ÛÈ¿þB‚J€ä`çSßüý)6ãùW8ès“ÿ×ëI±Wk`pWµ&ß0¹à�˜÷ÿÔìÛr?çúSB`�ž�sŽ}ÿÏ­ @8àd²ô'§à\HÇUã E;fB…¦JB¤’”õ=¿Â“ Ï< ç„–GÀÇ¥fRx òóÇùýiÊYSžâyÉ4Ò±*ü¤e¹À=zr*z|€FwÆçüšjÊFT�q´Ÿó‚(1ÎÌ|¿/¯ÊO?˜¯£h¢Š(¢Š(¯š¶¸ªü1Š{Œc9ãŽÔz¡ê@Ïëý1Hs‘�p1ƒþçÿ®É0‚Ǻá½Ï¿ùëFã ÜmÆÜ‘‘Ï_óõ ²ïßóxˆ¦î©ÏRF:ƒÏ_óÚ‘p¤ðÜœç¦?­.àÃ*~_^;óÚ‘Ð`cqrÜ:çÛð§ÞîR3»pä{Ÿ¥"0uÉ$ž8¥]Áò%r8Áìϵ8«vœ}Ð1õ¥ ä�ÈIê'OnjhÀo•ˆ8l€9#ŒÐ͘=xÀŽÿýzVÈØ8õêi¡ HÁÀ ØÚ@íÓùSË(p71=?Öˆ°á…ç’zÔ‚-Œ¥7 3EîÝê2wläuã�OªȄ±Ûò�Ãüy¦�y)žI^NGÓÕ*Ê{˜ÎxçðÎidéÀàöóÏáL-Î88ä3ÓùÑ„.õP9»(�‚I8äÿžÆ‚23׎¸µCê1� {qÇžÃÌ\�褧ù÷¥VRxqŽãðïúQ»(¡Àn3ÁǶyÿ=zÒŸ–@ÁnƒãõíÿÖ¡ˆˆ>¹ädúúQ´ïãvÞ21õ¥\)@vð6ŒOóÚŸ¹B�ª@9Áâ…lpß\õçžÝiÄ ;(b®Þß�¨(¥@ÝŒÙúãõ4`à’qœöÿ?Ò—‘ò�+Ÿóï^µð´ዌtûcsëò%vôQEQEQE™â/ù5n3þ‡7þ€kçâ™$ªdŽÇšqáÀ Ÿò)7±eÁa‚Oÿ<Ò19,r1œÆ8õ¦ËµB1;HcƒŽ¼gçÒ�ÙùË ‡¿^ùþToUvfÏ<äð=9ÿëÓI\ ’2¼ç·}¿Æ�…%HÆá»nzþ?LRqËÛ‘Ž{sÖ‘ÑV\¯–éõÏ·øS˜ò Aùš9b8ÏnhMÊÇ•,p=8éþy§(RžX`@Ú0>�»Ó”yDcqÜ1ÉëÏøTÑ€@É TÇà) C) Ë@ºþµ+æ9ãßÞšŠË�ãkç'ñŒÓ™”|½“Îs“Œ�üéÑ…<”09ÉäçÿÕDˆ¡I*IÆz)íúÿJ�ð\pÙÈÉÆ>•–L‡’9+Œûÿõ¨ÁêæãœúÓPnPrÎO9ÞÝ)dûÀ`¯@xíø{ÔE¼ÆàŒõ^?äÓ‡–Ò1Èã#ó¤a‰ îÇ^߯ùâ•�0#9@ô¦/Ês�ÿáÓØÿõéÌ073`�Î~ôR�¶U Ó‘Ÿóšq`ÍÊ‚ãnéšB9Ï^?ÄÑ•  ¼í9ã§cþy¤ Ç*Cm=Ç¿jvàX–ù· ü¼äŸçO,CFGªÄãÓ¹Á¡ÀeóÜäuãéŠvÑ·)Œ“Ÿn3ßÐPCdã–÷Æ ü?ÏJC‚ œ#=?ÏíÞÿ‘'Oÿ¶�¿é£WIEQEQEWœüUÇüJr¹ÿ]ßf:ó�…‚’ÀœsÁ¿Î)çl­ÜœŒðGÒ“ ³ƒ°ôʘUÀ-í…lÿ?þ½? yÜzp×ühÚ2£hÚx<})[jO\õnOùÿ=*0›ò¡¸çÿ¯øŠ\Éó±°1�ïsCœž2½3�G<~ýjFO¼:zäœÒä®8 ¼ðsÿסÆÕùœ.:ž08ÍHÈ1‚{tÆÉæ˜FÒ¸Æ3Ôæ¢Q¹ÇÌ0¬^;{ÓÊíêX㜒ü?ÏãN]Å�h'®}~½;~t˜T1Ç‹�¸ À€1Î3ÉÏ_ZVFP£Ì;GR@çÔÿ?ΤÎé8çÓ�Ç¿_zG8&M¼áÇQõü¿*~[,[hçØûc­HË]qËcùtü*X£»‚œg¡êxôþ�}qQ4Sä';þZh(rqóÔtöýiòÈ\;žžôõÊá�Ø ž£ŽœR‘´rI<ð�ùâ”Ãòò�sÐqŽÿãúSJ¸åF7ý?Ïô¤l¶Jòc 0:ÓUX3Ï“L›- õ qÛ?–ițԃ• F çüýjS ˜· wëý*1‡ýÚ¾yÀ<þ>”Ã’O\zô÷ÿõzÔy·€88þ¿• @ ÃóÛ··OéMP®Î£óÇqƒC‘ÓilZ�H%-Èãqþ�{~µ! ¹º¸ÇÍŒýÏò¦pã>^�{u¦È6|Üí\óõüiàvç�ÆFsùÓ•6œ(=úûýy¦ck0$1'ß§=ÿϵ#(så‘•<§§¾iYŽN1ž¤‘ÇùïOPwá·c9#?ÉïH~à`«ÆBŒ{{ý?Î(`O�GëNPJsÏÊ[§½<àr w'#éÍ3oðç·ðàçðÿ=iƒÌÙ¿oÌ?¼z:zŒªòY‚ò=ŸçÚ…?—iÊô#ÿ¯þ¢`H(s÷AäÓ€ Ë"±=ÈÝüëèª(¢Š(¢Š+æå!‰`FÐr?Ï¥',ù†2F3�þ½iÁu�œœŸN #(ϯ8ïÛüóC‚ù 7˜c§óíþy¦º‚Û·G>þÿçÚ�d8n9ϧÓëJW ¼ŽØçó¦ ÁuŒŸSÒ“aR¼àÐ žô¥X 3n2G$gò4F>E$Q•ÛÓ×JyÈ}¡FL§úRm|ŽJåyQÓ¯óÍH�Ô~8ô©c’»HwžG¯ô¨™Æx$}G_j“ï#lè[{�þµ5Õ�9�›ðíLT­Œ‘’O^yüjNe,À¯qëéHá—Æ¸+úô÷¦*…o”¨íÉïNÀs¸>¾ßášRÙÁÊ…'°=ÿ”žG 1Ôÿ^ôØ»ˆÁÿõСš"vÙH={ÔŠÇ ÎѸ¯®i¤å¹bA #×úΜÀ”F2äTÁbA$ÇÒ›ò€Xœ€á†ã×4£ç(8ë·sï×ÿ×ô¯[ø\IðÕÑãõˆÁíå¥vôQEQEQE›â†uRz 9¿ô^¿Þ$`p0?ÏéLÉ ° tçüúÒœ$¨=ñ»?_OþµT?EëÔöíÛëŠiËÀ¸'Œsß4Ö@°G<�\úÿŸz9ä 6'Ôöãó£‡#‘Û?ç¡õ¦�ÍÒ�¸u?çúÒÈ”åÛi@cßñÍ++H‹�[�˜£¦? rrŸ?0ÐñG̨N�£kn 1Á‚xü=8¤UÚĶﻌôÏLçüâ¥rÁÉS¸ŽzqÁÐÔŠª€9|í8ïš’8Ô³9$`éH 2Œd–àc§éŠYó'‘Ü}§ò¤‘,�ÍëÞ‘—å®áŽ8¯¯×¿ãNB�¸©É'œ’8üzcóˆ’åËqMÂ|ÍìÏ=¸õÿëSc(É´íŒW%9'³€Óß•‰À+œS22w6@ç Æ=søþ”ù7�•ÜØä(¥\™œñžO®)‡ªr2 qýiùÁ £¯çÿê¯lðá Óó޲ãžkâºZ(¢Š(¢Š(¢¼ïâ�búN›ŸCû¿þ½y±UóŸ™±…$<ÿ*V@è篿/¯J~Ä'°1Bä(|œŽwçéùR9ù E�Ïÿª£%v±ÁÏ,3Î9ÿõÿú¨b£¤GMÍÉ#½?pÙÂõ?/=xúÓ@ÜêT ñÇÓüúÒà “Ôu$úR†l�ùéÁzóôéß<Ò8Á  ’H÷ŸÓ®iÞXI<¨äqþJMè2 `pN3Hñîo¼AuÏž¿ç­=ùäž½ñL1pÎæöã ëíD£*ÄŒ×çúÒŒ<…/ró¯ò¡ò€?CÔãü?*‘S8ß·=8Áôþt÷L‚¾ƒ ã Ï5]Á‹�£ç§iäà“�1œzÓóÇŽ¹Á÷4Oó2—^:uô¡ØKcd{g±üi‘”ÀÇLviÇ*ÌxÁbqÓüÿŸZ–4Uf+�?�¤Ú’)FÁ`‡üÿœTeG9P©9ïþ¥?jFƒp“Ôð?Ï4ÉSqPIÀ;˜�ÇÜÿ‘Pe€À�—¯~§ò¢B %†'=?þ·¥,{YS`<ŽÄç�I<ª›zî<þ§ùâ«1*2Fìd`‚8ÿ=é® }ùÚ É9''t¦ÏG;³ŒŒã#ÿÕý)È£jçøó»õ㎛IÚÙO<�jb“’ô úú{šG(ÈïÈÇlòzþ4Ó‚Kð ž:œzTžQbK}ìäc°Í5@òpØ$ goü(XÎüîm½pGqŸçý)™Úx�´ð–x¤XÉN ËgÓëø~†•FæbñžÙ4�ŸpeéƒôèGùþ\©ÁÀàùÖ‘ÙQòüJäñþsÇOZT' €?ÈçҚĞÁÀ瑜ÿJ8�ù‚=Ü0ëÿêéO`å0}:ñô©Ó`¨û¼ñM+†°Ï¡­5²7–ÁÀ?w¯J6– ´öÉ$åR©Àáð#p¯¡¨¢Š(¢Š(¯›ÎÌí?t�˜zÒlr:ïlç#Žý)1¹zýsÇùæ—%†üaqÈôö¤ ”eqÔú�ñ¦¸U}ê8 Ïoò3HFKéÀã©?çùÓöò2zŽ˜ê>µˆ‚Īœ€§=‡oOóÒ‚¥W8 Û‡N@ú~´í Oæ9ÎqH¤¾I`8Žã¡çš3÷\玅Gn¾Þ•"�½rF::~4¥UŒk€§Œävý)ÈC|‹÷x枨!(V1Г´qž*ÎÙ$ ~QÎsÛÓWORXŠ�˜rTápI=½3Q³®Û‹Ÿ—8p\Ô±Åó#¶Cǹäþ”ø÷�l{SÐõä÷ô§]¨N~êãiú ¬r[ÃØ{u÷¤ /ÈaÃ{þ«+aF0@½óŽÝÅ7Ë Rì$àçœsœÿœâ‘ÕV@Á³¼pæ}ÿŸç@?1Àaóp{zæŽ1¸€ÚGOòi¤±�™A,>`»ºûdR¡Ü¨sŽ7 ÜzÒ6ã“°· �œñœgõÿõÓ�`ÄŽvœ žÿ¯JO—9ÈÜ8Î9?þºQœ~`WÜ(~­¹»gðõúþTæPX€Ì¥ñŽ9‡‘ÛÞžÃnO8#©ü¸Ž»¹*3À\ŒãðüiFÝ£päòyç4œcyú{qÓüúSäÙÁÀ¬:Rt–ÎÏJUS–äûyë? ‰>¸µã z|‰]½QEQEQEfø‡þE�Wþ¼æÿÐ xË’ €LôÍ!Gq—aÜu4‡C,ØÏOÓ°¥ žOÜ8è,Rcsñ•ò3ü½©¤(rWoÎzô?ç¥&3œœ|Ùþ¿çµ9Ðe•ŽƒÆ­G�Ȥ¶H?'8ޤqïÿ×ì¤lÛÇ\‚݇â{R•*Äô=:qÞšA‘Ž€ê0Gð?ËŠpMăÉÎyãü朡YŽü2°ãŽÔæQ$Ÿ P¥wsþGZr†òÝY’ÔqR¢ˆ[äŒtè:g5`Ç#²“€sïLòÕ¾T<ýj"sÓ€@ã§_OóÞ£v&<†-ž€c¹Çj˜F¨Ï!F%—æUçüôýh(í´.ÛŽ½®Æ¢9r¼çXcïøÒðÛ�1׃ëþx¦yhÊÇoÃ9ðè{÷ëýi „�àõ9éŠ�_”#¯^‘èyôö§UbG-Ô€Ã�OåÖ‘ÎØ‹çîžyþ_óúS‡$®Èç¥1‹*î8à““ÎуÏéR㦠<``ô5ï£#Ç·?Òž{àFsšb…Y6�Ä÷óéÏl~tà£y]íÁ'�Ÿ¯nôãò�ÜŸ©'9¡”çvòx8ÏOON”»Shê3�ïëÚ”`� Œõ Ó‰Æyœ×F®’Š(¢Š(¢Š(¯;ø¤›Ž•Ž Mÿ²W�P3´©ÆãŽ~œõ©É\FT·\Œu¥';X“ŽIÎ>•ìS·’¼òyÏJ~ì:òG|�€8÷ú~¿4ƒ ’sÛ�oçùÓ•Ë%x88oþµFQ•d9 r7)É¢óÁ÷ÅKÊn‡9>øí@U!‰ôÈùzã§Z—Ôd�:ž}?ýTÒ§‚õã9ÿJrgÊ`»q“ƒéþ=i’¶È^Mßp8ûôŸ ¥ÀBwν?É©-ódzãÖ˜™GåY”|Äð8þ,~?Ëð@¸rÅy#Ÿ¯­(PÇv9cç4åRÑŒ§\�>‡ÒžãÍä‚l�ÏJl‡Tİ ö½p%d#å9Àúuÿ8¡ÑK¢°�ïùSÉe*¹R}GNíùþU.T |Ú1$|˜ã'ü?­8¬y8à÷ÇçÒš‰…A!r½}OZ”…8|�›9î & |¸<1n§ô§vírûÙè}¿:FÊòy=°Oùÿ?…"ìß» ÄtÀqMlõÛÕxläÿž”Ñå~mØõ£`�ƒ¨Ï'=yÏJ2¥²zúƒÓüÿ‘Q+îpŒŽ;qþ jª¤ùùsÉ$ g�úSNs³*YG,}}ú“Bá—$gŒžxÅ!‹)ç8ÿ?JFo*0»²3Æ)¯ßÀÎÒ8Èúé¸;×9à…:L�€…$ñ�SÒ‘ClÃmqÀÎG_ÔZFùŽËã ëþy¥+€Hùsò€OOð¡Ÿ06~éã$qõÅ4)Û�½=[·­8¨rË“�FqŸçùÓYT(Éä¶WŽ;æ�Çaãä�cI·å;sËsž9÷¤t`,Àö==¿—¿çH¨v&âdc+žÏ¿j &Yó»ƒèOùÏ­#m•Jï$çørúÓ·î%vñ´~¿_éKŸ›nÉ“Ï?OçJ$6Üdä‚qÎýt�m$‡rÈÍŸèE}EQEQE|ÚcÀÛ!R èÃß=éH �£$9¥T/Ë–<òQÇaA,‘ŸÝ©`‡­&»• Œô¦®ï,ÀoOÀõ§Ü¶åáqùç’÷Æ[®0}ê1Xå@3u?_ëOÊ äü?çüæ†,#!:ã9ŠM¹c¸`ž õÈöö§(ó�§ÈÎxÍ#‚È2­’rqÿëõ¡�”‘´p8ëüúâ¤Ú œ8hÉOÖ¦Gl'=úùÓÑ2õ� =ZiÜ+ûÃŒîÏÓÿ¯@8Àaód†<|§ä?E‹%�P€I##üŠ•æ^Ä÷ŽÓóÅ9›¿Þðpq·óøS®T±8;Aý*©P#ûqɤ`>ƒŽséúTn:ä�Ø=ñŸOóõ¤ ?™¸8ÉéŸÇŠo“´…m½~osíéëGñå�ÙçAÜÜÁóNÙÁnìç�­40Ú›�$`©Ç~”ªªŠ@?/ò�å¢|c%xïíM_•Fr[w8üév‚£r�3´�_óéJ pÀçןéL%~b­×åǹöëFÓ�§k˜ý1AÚ çríÆ8Ï9Çj~Ì*á‡|6ëéJ«±p àžíÚŽ[‚Ùê ðæ”6ÂŒý8û«þÈ¡K �09þ}:W­ü/R¾¹É7�Ðtù»Z(¢Š(¢Š(¢ŠÍñφuP?çÎoý×€û«!^FGáA Cc¯œçÒ‚0«Éôç'¯_¨¥f ÝŒîí#ó¦0#pòÎã߯­¸ Ü68À8Ͻ9“sí8' …°çµE*¹R½N1¹N:õúRí•lŒôcG…ãÀ# ãù…+0c�FIý)¿t1e9²u>£ù “¦àÇBi®›™ÖàçÛ<{ѽ¹ ù‡Þè¯åÖ¤ÚArsé“ÿê©Ã’Ã’ <ôç4íÌ#͆À'»Ji »óÆsJÀ¸å½û�ǟʘ‘eL‚1¹±’ {~uôªX»(`c?¯ã^×à G‚´ðNÖvÿ¦�]%QEQEQ^wñK†ÒOL þ˜ýÝyÛ IqaÓ¹ÿ&“ÊA!—'9Éäð=©älNT“�Þ˜Ñ�¹9ÿx“þÏj@®J¯C�Ž)C…*¡r1Ž9 SH+ ’x#=HúúÔƒ•=�´Œçë·ç¥F˜ܪ$;~Ÿ­<€�‘ÜôÿëÒ®êå~^ß7J|˜Ã… ûv¥8ŒeG#$ñCF7ïÂîý)6.vŒñ��þ¿¯4€àùdç'鎔÷Sµœä>‡üG4‰…}¤ŸP)È7t\ ç ÿž¹?ç£�] àÇnx¦(ß�œ1ç=©[ùÉQÜí<‘J¿¼rÊO�»<`vÿõÔÊ™W'<Ž~lþµ*DÇ€Àg@ãSÏ̬®»D€ÏŒ}iL+增1íÀ4ªÊ¸DÜÃôôÎiÊÌ~ð ô=1ÿêÿ8§"¶9Bs‘ŸJzªˆÂ�ÅpFHä{S>QÙ»#ŒàŸóÚ˜@tPÊAqçüô§³œäÐÒ,Q¨$19 ljPÀŸJI#m¤ŒŽ1ɦÝ#Œ8éQd‰ÁÏ^N:“MMŒÁCîztÿ ÐË´m$‚Gü>žÔå ²ŒñßÜúé®cÊýr5ʱÚNwAü‡?��³#œ1'Zd˜V)ÈÝÔŽ¿þªx$°ëÆnÀÃ�‰#߇ôõ¥bAÁåwu† ï¿>ÿþºcºï&6ó£ 噀)î2O·?^”m 0qížpqŽÿ�ëJ€qŽ{…ª¡8àc ÔñÚ£PÛ ¹#ä$gßךqrØQž@ç¸4m*'Ì¡p£ôçõ 'ï3ß ƒš‘WæÆã?Ê£h×9,0éëÏ4í¡dÈ\Ÿ\ç4%Â"àÈƒÛ cÛ­}EQEQE|ÜÙ/´)bzåHÀê§ð¥‰<œ�OóŠi]Å�=AÇLëŠvÏ/!¹#�óþx£xçuõã“+3nvB1�8ééHŸ™~áù”ƒÆ½ ;oëÛ§?Ïü)B õèÏõ¤!YùvêxÿõSØnQ…úTJmÌmìNy§ãwU ÇLžiŒÄíPJØsŸoóéF „b[æç§Ò¦Dù_ Bûõëþ*L9�‚«¼p=±ÏøT±‘Á|ü­Õºô«±$d‘Üñïüè•A;qÊœžÙàÿˆ¦ª‡ç-ÈÏCžhŽ0Ë1<üÌxèy©ü†E ¤d�ýuÑ  ¤€q޵€†|œò* („ª «žùã‡Ò’0vè8�Aþ™¥’%n™8Ïäâ‰S16ã–# i Ô¡;‡Ì ˜¥)ˆð£àc?áÒ›»jöà˜϶1Ú˜›NЪê;|¼0:ôã·éœR�…ˆ‚»j(¢Š(¢Š(¢ŠÍñü‹Z¯ýyÍÿ ð˜É€›€9$‚1éõ9Í9W N?Nø '˜zm`AéëÛ�­(p�Ïùüiª£qæ$šC³æ’fN[8éïÜb….�Gp3޽¿ÏÿZ„�–åÏ ÀééþzÒ…Ù��—'¿Oóü©F%@9à/^ÝNuÜT±ùwþ•í�…ÇažÔýœ�ÊAô?çÚ£y2Sï ƒò�Ÿóü¿JvÂŽ¡‹ž9œõ©cBc Œgüÿ*jïc’üäã¨1øsS+€»ˆù€ gÖ­C’HÀ>™?çÒ£‘C0Ç2½qéÏèhؾ_ßf¡�1K\…�œw'#¸þµ7“å…!¾B;ôVC¾Dp°á¹<~œò=©$ÚT«0ÀëÏéþ}j¼¸ò0ËÉùÉ™§í!0s‘ÁžÔŽ ðOCÐg·éŸòi%M«�K6àp=¿ýTÖL–VMÊÇœ(ãÓ>´ç�rýÜç®:ÿœÓ$|ÆU�ÀÎG\�Z@8' Üò1úþ”l mAÆE"£4mÛÇÿ[ó¥DX•AÀþ¿—åC3c…RpO_åÏÿZ˜rW–<ŽxϹ¤ ` brz}Hôï�ð©ÎÛ€q‘ß5Õtn.¤g9”`2䜖ã¦)Ä7|ã®qÐý)‰µ˜ìP ç�Þž¸Ø0yy�.˜î$Œ‘Ö›þGËžpÝ:ÿŸÄŠqó¹!N${Ó?J1·$‘Ó•œô©P¹Âèiàî;;c0PrA; ô©£„2wtàô¦]à 6ç=;ÿ‘O¢dÃ#'�(VÇÊG''ÿ­OÚ[$¦zuíùSH×åÆF¯øÑ‚Á•€Æ{vÿ&£`>UÇÎÿZ¤0¹¹ç¯J…îcòéþ3°ªçŽx­DsÎvû“úS2 ¨ê1Žôa�ü§ê4;9 ïÏùëMÚ •àŒõéôô¡ñ†nàŸQÛ¦ª)•Æ~•.XG“Žaý*7©” ž0_CÅ;9Ç$gÖ£ �ê¡z`xÏ<~X§.]Y˜œçc �ÿ L¯;r¼ä�¯§·ZM­µ˜}æ¼;ñô¦îËmå‰'iQœqëJc]¿.C÷—=ö 6—qÎO^ÿ¾ÿ¥G½‹ ¡p8ä}{véK– –ÏóÛüæ˜pÇ !HÎ1N æn'q\ç©þŸCJÇ>Y9î?Ò¾‡¢Š(¢Š(¢¾sÙ�ųœôµ0H»‘.<qüûŠ•Ë6{cüÿž”Ôevã•îO9?áM'�sŒ›sü¿ ~Öó6±É9Ç\cÞŒí pGü>¾´à§h*ù= '‘�çÞ—i@Y1ƒ’0ÜJz¡�Pzœð=Å0©õ ñ‘ßüóNp$�€,ªÜÿ­"¿›SÛšo—»g8q‚{Ð~÷Í�ªÙ_aÿëþ_…J% ;å³»B©üyéëI€ÅÃzP;T •€ÉÀýÏz’2�â„‘ó£¯þº—‰¹a„õÇ?çŠ@ˆ®,{Ÿóß•I”Þ¸ÚÜs×·ø�Ö•_»�¤I,X{wÍ2â0Î`‚)#¸Æ?ÇñªÅFr¹Á-`�äuÈïÛùcùÔj Uw)<)äŠk– Pówÿ yUò‹`ܧüóLŒŒ.åé‚3þÎ}éSå,»‰ã*:šp�r�Tçvs’ÏøSÆì.AÁ÷ü©ˆ6g<¹íÿ×§íÆIÆ1Ðý})¥r¥>ðõÿ i[Œ1 a[¿óü©C�ÅdŒò0zw÷¥;7a�9ÎH¦ªˆØ2yÆ1Ÿþ½*†Éa†ÇCÐ~óF>W ‚ Î0}O•J«·‚ÀòrBàã< `b\䃴ŒÓüJqP8Ç9îxïǵ4 mç±È<ã§é^µðÀ0ðÕÆïùülß ]­QEQEQEgx€gÃz ÿ§Iô^TËäóó ôü� �3ãjŒ~T’2�ºGÚ¿ÄOó¦«S�ž;úãùÒ¾»N'§¯ò¥PÃpn\ œgŸþ¿ç4§åV_˜ã¯åÍ?ƒ¸<’{ÿž(ÃD8çß4¥L�[!OñÏù<Ž¢™‚¼°lg�>ŸþªWa³vâï}(rÍäÀäæ“Ëýà+Ác'‘éB�²#>>SÁúôý*D”)u$“œ�¨Foé@P%F�ØäèOoÿU=q™rBúþu: ¯±²§€AþqOÚ$ù˜ÃŽ¿çš@‹¼ªsÓž‡·õ©tsƒŽ?ýGô¥]ûHàÔr}½ª �3òpW� E³ Hçîÿ:B¿Àäg‚3œúÿžÔÅh%WwBª6fó6€Fb3ƒL“ÚÄàœ`u_óÇ4w ɱ�Ç“N ÙBB†ã�:qÿ맨¼!ç¦Þô›Vp8è9Í*3ã‘À#öÿ?Ò”`¸V8v¡ÿ>´˜f@ OžŸJWBz1d¯áRmýæOuëô÷¤`J.Üœôcbä€{v¡¶®óÕTd³ž?óëJrp¼—Ûšii|½Ãq‡n€ÒæH©~^™¥hÕFÌgÏåøqÅ4IÁ,N?™þu�Ÿ²x€ÄsôÏàÌ·6{Œ ÿ“K…åHêvà‘Ï­m±ÓàSö–Îü 0Èü÷¡mÎIL€ÇvìñÐ~u(…S,ÎOv¦4È ˜×8銉œ2– ¸�ÀO4ÕEÿX˸?/çJåTüÀdp8Å ps¸Q�¸?¥1�ßÆÓž'–ÿÃÖ¤áÊçp¹çúu¤�È<ó÷s_CÑEQEQ_9?æP@ägëÿÖþT  £ÏÒðÜAA휞¹¨v(Q°ä��¸üåNmÌ *Iã=ÿER¬HW9ïÉ>´çù˜)ÀŽ ïQ“€ÛO\Œãî÷ǵ9v†Úʤƒ¸8ÿõé꣢P=éÓŽ†žJCAçxüÿÔSCŒOnqN~½;öÿ?Êšác��ó`ßéS"õÉü©¾[.O~�)ì»pWh9õäñÏùö¤ŒNx;±Ž¹<÷« µŸŠªàŽõ#lØSq#Çqþx¥B1¼EŽÁ½G¯ù÷§ gelå±éÇ\R¢”Àß»-Æxÿ=)—J¦MÅFà2§o ôëôÅ@Q÷8|sž¼r*"›¹bGÛòúѳ÷lWæ<ãŒuÏo𦱠„¨hêz�z0W Çqþ 6ô ôûßýo¥�Ùx8Îì‘þri‚™ ·œŽ)HvLRH9=©BEó€`ÓQØ©bWƒósƒþx æèʽ=?LS|±°ÛÆîãüàPภ§�Ý)<Äh�R­’F;dq�ÿ_åNà°?7RO·åšC°ñœA_óøÐÁð¹b¼œŸÎ•"pXŒ–ê:ã>ôäM‡ço›{Ò6ÓRsÆ3ÛÒ•Fà8_åþy¯VøbðÝÈ?óøØÿ¾»J(¢Š(¢Š(¢ŠÎñ>Õ?ëÒ_ý×�1`rWæãnsŸóÏó§`mÈ8ÆzPØÃoèAøTeBœ¡Îáÿ"•²rY9àuçõüéYL€z÷üéφ�nÛ€Ny<ŸÊ£ÉP¶Açpy¯o¥9LƨÅF>eà vü�*ƒ�ʼÏ·?Z B0Ùõ¯Cíùþ†š8#{þ÷jx�-†Á¹é�oóïQ�Tö{þ•:G¾1½@%yéM° n<‘Û¨ýiÌ 2íÇ ô<ãüÿ:H*»€Üs•ã¦qê*Ò�’Y¶“€:qO}Œ ³ç�z…8«¼E°·RŸùö¥T,KdäŽN=³JƒËr[##ç­C*�ø DZҡ(Ì 3.Fp ìÏáLd·@'ŽÏjC"^‡Æ=9¦É�¤8R[¡íý?QNÙÏ«ŒúR-.2GMØþ”›þmãk.?„äŸó�çI¸„@VÇ®Œé±P džÔ²‚£#—ÏÊ=i‰¸ $©ã¾ŸÖ‘FàÜ“¹pqÛ¾~¼ÐTjú–çÜÒ0$à¯^yã­†.qÓóì ÛqÆ2~´Ò†u޼ÿœ~TìÃkät$œt=©R'Û�»wsνéÁv«À?|sÍ#”d’2Fzç©Tc'$c�ÿU{?€óÿ]†A÷½ë£WGEQEQEW�|RÈ“H`: †~¦:óï,‚O¢ã'Ö˜p¿0,1ÇN|ûzP\p Ë÷îŸJGb *®Üçœð;çùÓâ¾ðÎQ×ñ¦ ?)ã}A¸4윓ךô¢5Œü©¸äp£÷ÍIcwÌ:n s�ùT±Œ³mÇô¢f.Ädädã„ìT=N1Áã¯"á—;ØŒ˜OƘ ù,77'±þ^¿ýjT;ÙÎN8_óÅŒ€xÀ<“ŠdLQòÜdqèz|ã.®Ê¿)$’9­C!ÝÃ.ßsÇ֘˿æ+Ïnü¿È¦” |§‘ÊŽÿNßçÒ•ÈùB€„„ãçmùN~lôÎ éÛ·5Ï*.çõÆqØÿOÊžÊÌÇcÛêiäªÝMF³´òz‚GÀÒgß{¨Ç¥!®Ъ9ÀÇôãñ¤ÇªaÇäSX�Î>cÛ>”»}Âäœ ƒŒ}iJàG~Où4¢&Ò`ƒ�nÕ0�B€ì9xÿ?ýjPñïÂ[—ùâ™$ŒÊ2Á Ž*;m9<§?�QA-�ógÕºcX‚{d@Îic��È!‡9ëëMòÀÆóÀÁ€?ˆôõ£«1Qžàö?çÂyæn¸ÊþÈ÷#ò5"ó·äüÜcüö¥ò»“åàî?ξ…¢Š(¢Š(¢¾rá°ëÎGù•WvŸ˜qÀî;ûPL�H*§}Ñùš€z‚1�ó“C/s‘Ø�ÜŠFC†`yÁùŠçž) ±fã?wéõÍ|ª6 Î;Ј_æ Ç·súSŽVMŠøÇbzƒÏj]­&Hù7d �¯ó© YÔóèFHúŸZjeÝ‚I$žž¿�OåNd *žW°8Çà?Ïj|¼.20x“þ=iYAŒîlrA޼ŠY8$…ÜÜ6ÑÔžâž>òqÁ$þ4)^Kw$cÛùTÃsº³å½ J_}·îÔ/Ëœíþ4ôË úðqÏ4»v�Òßœqؿʙr�"‘•fÁ8à`uþuSå¶ìc,x ïŸsŠVBÒg8$õ¨Êª¿M§=Fzý(Ý ça#<ãýi¬ŒTàŽƒ®:÷¥TùÆ[¨)0êò8íùHžþ¾ôn]pÍÏÖ˜®¬¿.åÆzœéüùü)­l´{GcǯøÔŒ•XœÜsÎFEFrÎK( g8äÓOÌ@ ¡Î1éþ>Õ".ã·hŒtö¤óºE�¯§•<ÂxqœwíþEIö]Ñá€Aœäã­‰f”Ã!ËÛòõ3þGzˆí;�®9ÏOCM.O÷”· m<}}úóNFêXüÝ7cŠõ_…ùôúý¿ØJí¨¢Š(¢Š(¢Š+7Ä<økUçèsséòðN$ÇE}½ÆqéÏ~M(þnã##¡÷¡Ý‚ä¦@'€9Ç?ýjUPsŸÓÛðè) á²NÐO'wCM*Ê»”í£?J0w`tØqøÓ‹à!9c“€:‚z}EMϘÌBÆ�JžF €Žž{dcª—å_~OOJR¡p¾aã?N�~µ^á“!FðNO°?Ö£M£%FFÒúýø¦ùysÓœž{Ô{UXàÜqéB™3ó'ËíÇùíHѶÐyãÛ�¦iQp͹�<·ò¦íxÖB [°ç9 ° e�\�É'ŽƒÝÊéòô p[¨¤(»ƒ†u �‚p éþœw.CÁ# g×׉>X<`sù Có7C»û¾¾ßZ‘Tº¶ ©Ç ŒþtlÂŒ¶@<ç©ý3Kå3@ë’;sý;Ô¦ÑJ®à¦hýÒ“Œ’xÉ5‘˜¤è{síQ3‡ÍŽ6¨äŸÀÒ;°†ëœcúvâœ9<ž§ÏcþìÞðFœ?ë§þŒjéh¢Š(¢Š(¢Šóߊì®Ç÷¼û|™í^u°*Ž’ Ï8¡7q†SÓǸüéÇ1˃‘‘ßüýt£žq–'ߺ1×¹ÇÒ”(lîç,G<úñý)¹f‘rÝžœÿ:2@$1äñ’§•Û€7gè)亢’Fü€8¥.H ³ eºqßüÿ�H$!‚ààœdý;ÿžÔæ@ÊãžÃÖ˜cWl†<¯;OQÛŸÇùÓDHØêOÝ>´›~UÉÇ99ëÇoNÔՌϕŽãÈçü{~u#¨(§pR3Ðà}3þ•OÞÛó¸Šõã üéà�ù<1ŽþاŒà�žIsþE+Æ%@ô'Óò¨³äí@¥Tô#Ó×üóO*A ¸€OLn9éÇyÜ@+Žþ¢ž>líÁ#ïx×ÿ­MdNÑ‘Êåyü;õébR¥°=ÁçŸóüêÌqn]Ù#žüБºÆë�äœ`ûšQe@äpG§~ŸËÒ—i ûØàúõÇ¥#&HV9S×?‡ùÿõPÈÞXå@,~€`ÒŒ0rN;ôïþ}9ªÒ« �9úþÙ¥)…PW8í×ôÍ&Ì߀£ºžoþ½7æ9%Içîÿ€ïM}Ì͵‡pA}sõ¦î.þOûsƒ“þsODRs��ŽHëAÎg8õ=E4äã$g8}j1–þ3α÷ü)S nÈÇ#±ÍDŠHU;Xv$þ})ÀGÛ�˜vçœuôüè1¶Ð¤r0psúÔÆ<¿_›ƒ‚s·üóJ¦=¹ÆA$rPh.w29ÇQõÀo˜†Æ àÿŸéMÜ_#zîB3ÇQQ•*äà–É8äý h!AVÊÏ$g°ÇÌì# 78ÈÏyÏ=©Îª#` ]Ç’1þ´¬F‼�9î3Çó¤!„|®pûLjýxÿõÒ1ÜÛ Œ�I`}sNpÅX2v9¿ `MÁöîÃ|Øï×ó©Q’5ù׿<ãi?¨¯ è¢Š(¢Š(¯œþb¬2õÀÀã§ùëKó®;ŸÒ€˜ÜdÎ3ÆNéÒ”Ñ1Á9`9ã?…"�¤·œã<äf•I ³Œwr9§ª‚HÞ¤žA=…3ËbËÎFrzþá+ÆìïÍ06\#.Iœrÿ?¥I�»r~÷Ç|úÿ*DVT?tö'§õ§‚¬IeŽOßáüéäò»@e$Œ“È9ÿ?•9AenHqךÊäà,^Ïùö¥@ ` óœÒ�·p¨öã×úR�ÌTÏ=oÿWåS#·e8þ¿J’ BFc©ëž´å�§%€cÓ½<(–Ü8Çùô ÒJÍR¼’¿xñUØ;a�ÀS’¼ ÝC×ð¦ +(eÎpúý©­ü´R>Q‘Üúèäd¹  Œ3F9ÉïLà�Ü`*ä;ŸÄzÒrkn#¨`i ÉÛ�;ŸÇŸÊ�Óvv�ÉÏn½ÿ­(Êœ7Ýôô¦d«UJ~€œR±#!Tp3Šr!aÈÛÎ?:r[·ç’ÝO&¦ĽÙÏp 2¢ž‹Æ~Q“UšVr œƒœ’9ÿ>ôŒxÂí Ço\þTݧ©8ÉÃÿWùâ™6,K@þÐc/ÉO�“�×?_Ê”0@’¸àý>µêÿ A¸Ëgý-ºö»J(¢Š(¢Š(¢ŠÎñü‹Z¯ÿC—ÿ@5à‡vθ+ÉQ�¯§ùÍ; ¸2“†Aêx›v®\œç‚:þŸÊœ|´8À,NsþJj)TÆ-Œçšr¶N Œ翧4¡8#zîXþ4‹™FãÆ?#ýi6�Km$ãR—e# :°ç¯=ÿýtöÀ;3÷”‘�¯ÿ«ó¥Pê‹sÈ$éõ§&ÆËmÁÏ8øÏùö§då6ª°a•lò?Çÿ¯R(Ü™RsÐ�ýZŒ‡Âù€$‘ƒüéñ¨=@ÉÏjAòÆÜåð¡Ë3�Cùýx©#“pTçåÈœriG%ÀV.‡·v§6Öf[¨ÏøþU³fRÃŒå‡ã�Ö¢ÃÉ?s¦Þ2£Ž?Ï­5AWnŒqßüÿJkG´ï=Ž=§·ùíKäg8Ï8ÿõÓLj‘°<†à�1MÚÄ[ï�o§§­!®Ç Hàõ¦àª“·#$ £ü^){néÛޏâ�cî¾è)ª[$2ƒÏôÿ=hbz*õ9éÔT‹2÷°•9-ÏËÆÕ¤äñS*D�7>=©$œ*à§ý‘ž}ÿúõTÈX‚P€rG?¯·Ö†,Nn:ø~”мƒžr=ÿÏó¦>Ô|±f<9ã4†à� Ž¯ÓžÇšqqÓv3ê8öÿ?Zö�<§‚ryÎ?é£WGEQEQEWž|OÝæiN1çv'?r¼ô€Å¶ä0pp})¤òÙa€?Ÿ•\Œ’ã“üèTèÿÇ\c�;P¨²à©<7»wÿëÑÆàq“ß#üõ§�°vú{ç4œ!Ú\´§€Oùÿ=)XôÉäg¸üiÌ_”:�>éÚnø÷úv÷§ùªÃŽ™šI�•LçåàzJz° £i^8é�ü~”î¸Üär9çüûÓ�‘ŒW±^søúð?.ô‚$t;FÒz}úÔí›yÈ vçÞ˜IU8=OÏ·ÖœÌ7¯\v ÿŸzM�垎~𧜳.ã¦1éJ>XþFÆ1ÐúS‚ù˜.£r€pGÝ>¿¥?ÁÚ¸žÝÓð¦là.6©=¿Z# ±�§ ÆsŸÆœ›‹ÓŒà‘ÏÓóþTåm»À!{‘�çSÄ0å�;�ž�ò*wWr)ï×�§ùÿõTEFÂÀíÁóÐnÜS‚ãçÛ’'rGÒÁ;¹ÁçþºrDÅ�*ß•p:}=)“©v+’éŽ1þ} U’L8ç;T¯ZC¹[#{ŽÝGoð¤ yÁ=1»¡çŠAPî�œÿž)Àa 2®R3ëþ…@mø²rqþqM]Þ_ï:çÐÓW*Q�@8ÏLÿŸëHUŸ= îû¾£=Zh¸ç$ñ×üûþ~ô˜N_§_ò)ÌŸÔgOoóéA‰Dd’zöaJð8ËëMÛ�Àžàü¼víI¹A'l|Ã#?áPŸ˜¡Ûòýà ŽÂ”·–O ‚IïLbägpt¯ùü)Â)}Ä*®A üÇ¥/#`ê ÆÓÿ­MT H_B3ƒÔ÷Çù<Ò�¸9T ðæ�ÄCÜ3€~´§å¨çÐibŒ¯P>Ÿçñ¦† ±ÆóÇùüϪ¶wÏñ`ãž)ÌÎrþÜšúŠ(¢Š(¢ŠùÝÁù_àî?çëLʆPø�ÈäŸJp'*g�—œgÒ�ä~œœÿŸÊ€0 ŽNñži¨¤0,ÙV#?^½>•*¨ =AÇ_¥(Ü\�ÁF1õÿõR|Ѷ<À@õî*BŠà1o¦zHèJýÞ�‘Ž?Ïÿ®šèé.Ò6ò¸Lž)Fß—œ9‘Å9€Ë6à í�N¸§)ÁÀçnié';æÁÚHÉì?úß­/”…31Ÿ˜Ÿj_,Æ» ç¡ÏÊ›þ¤c–L“œç8þ¿þª2­.œc 7›/ÓÞ¬ E�/ÊŒåIà ´#ˆ0eB$)½#Ƥ�Øì <ŒŽõÆxR¸'øíÒª·/€pÃæ>˜Æ?—4mrý€ÈÚsÎ?ÎiPK@R‡§#½0€«’ÌIôÉü€ÿ?�8)hו$ð:�ÛÚ�F­&TG9Çaüéñ[ª ÚÇœ6ÒÝ?úߥI¸FTÉë�_ZŠW`Ã#Žü~_ç¥P2>î3ÀnÕpÍò�›9ÁØþ•%²C 8Ü1þwa€zþ?¥8§ñ‘’HõÆÿW�À‘Ÿ§ÖU\‚XöèON�ý¸úS°]Q‰Î\÷¦ù`—`¤ã98ÆsŸ_çR¬+ù\°SÜôãõ§îòÀ™ãºzÿúª'sç"îç'üúõ÷¤3§œ;ÔaÔ·ËÀõ`uÿ‰IÀËg£ßÓó¥ #®ÒÜqž)6âE\ §=ü)@ìS€£�ÏùíMh‰°'qν NÜnRÄŒwÆ·µ{O€È> °ÇLËÿ£º:(¢Š(¢Š(¢¼ûâüÂ�\yÝ?àç�T|ÿ�Ö”6WwÌC ãoó¡JåóÁQœHÿ8¦àìÜÄ�“�íþéSæÀ'#$ôü8¥é�0ŽIã9çׇãÞ‘•�(Ò2ä{žÔà ¸px#9ÿžÔ!Ãà/N'œŒc·?Z”í�»¾§“LAŸœ(ÂðAÉÏ?çÚž¥A1îÞzsŽ€sõÿëÓ‡Í"¸;J¶ $p;�óÓÖžQ€W#‚;zv§ád98É㜞iDDŽ1Œ§$ÿõé…N6ÉÏ8ÈR3ÜsÐZUŒ’ °ù‡=¹¤UÚ6œ–ÎA'ÿ�J­ò¨À*rGìo/±€8àíèÏùëQ˼),ÊF=0;ŸåJ¡T2äáIÆÐ2”8ó02ÅsœvéJªÂF9ï×qôãéÿÖ«iÞ6àg88ö÷©Ìc«Ù8¦�Ã#§?/#œ§Z dÈ c¹oçMûG’Hn½sÖªÉæy…‰A=?Nµ’peuú~_äÒ>Õ�÷1œÀ½qþ}iÀÇ(8ù�^üŸåOÁ <Óž¿uHéôæ‘ØîÀkpHúu¨Š�…v€¸ÆzñÓÿ #å�pA†çó¡å=ž=ÏÒža9*sÐw&�Ä�·ž ~#üúÔÍåŽäd<ã¦x÷æ•›ž¼ê}øïÓÿ¯Q»”Ã)'=8ëõöÿõ�ƒ˜&}Alwêùü*Më€0§Øž„ŽG ü€GN¹$ôâ“ IlŒs×ùR^F”år9çëô§ �Š€¨ÀõÁ4�ûµä�1ÈÇJ�ËÚ™yŒÿõûÒ‚�Q{»`.>¸¥Id%NHÆFǧýjSÊçøOŽ”ÅG8;G œ½htgÉ œàa±Ïøþtò `{“Þšd0Fã×þ£Kå¤ß0 ŽÙQ_BQEQEQ_;H­‘´�ŒóïBÊ;8Å4m‰OÍòðSÀã½<7)ÆqŸ™¿É¤A± €£Œ/'üÿZqÈ%‘‰àÔˆ¹ 8GcíNpJ7pyÇUÏÿ®˜yFpsÎÓñ©SnVÎOéþ­ ¼¾ùp8 qŒõÿ*›vÖ#q Fxÿž‚,zpN=i¬»@Û“Žr[#Ε¢!YIÜ£æ''8ç�Ö”£0Û@õäã·?•K”ÜTé�ñïR¤ ÀÉõÖ„… @nã=ý)«»$0Œ…8lŽÔå'ï. hÈÀÇÿ¬�Ö®Çr¡ȧ-ÓžUv+Ô–Àõ"¡�ràžÑ‘×SUdH[<.S8'·ùýiªJ�ðzpJ„#$`ƒÓ&œªI nÈ=Î4»# „Q�À®*€`Im£i8#éÖœ‚†?.?Z*Ç…#§§×üö§y'σËQ� (]Ù-úÓ>T�<ãßüêÌ©õ¡äÈÄg;xã·ùâ£ÎQN7ÜëÒ�’~`�ϧù÷¤*0sÀ#‚O¯ù¥'sŒÏN?ÏÿZŒ`$àÈ¥Ü6íVO?ZaBJ†—Ôp?úÃü)¯¬U˜¯~‡§ÔÔ…@å'Ž08þºõ_†8ÿ„jàÀ¼nØþ®ÒŠ(¢Š(¢Š(¢³µñŸjƒͤ¿ú¯‘ ’`« ý•.+ú¹±Iò§ÊIåˆ\µ)£e8>¤Ÿ_¥(;S8)Ž8_×üúPË�áFPœzU˜¤pzÒº’£¸8Èã‘ëùb˜s½x-éžrFxþ½{{Tª¨6v÷ T.dcœ€Ù€ã¯ÿ[ó©U°J† �N¿¯ÔÑ FRÈç'}{R!×È<’}Oµ!‹ªä²©Á*ynÙÍ)C¹ˆß°�á<�zãÿ­éô©€(¬ ŽÀqR1ÛÀ$OåL’66îQÁaÐúÒ)`Nåár¯¨öëOF*Œ=r08ÿõº.T GR[Øp{Óž5M @õéU™ÉÁÀéô5WvrìxqŒàààõÍ.[ùˆäg�qÒ”¨ÆÕèHê=?ýT"îtã'†=¾œÿœÓ™QW*¤ã°<ñUåMÎNàpF;çüOéRm`A‘€zT�ÙA§ŸÿU@¬w‘!àñ…¿�9#\àsôè1Æ(ÎØó´tÆà2~ŸŸò¥à@ƒ»ßžNELŽ{�Ç?äÓÅÁXÃHíõÀ©c›�}1HöìÈ@Úùìj%ˆ£s� ç¾)é’íó€ÊGª¸1‚3Æ#ò§:ƒŸ™v�ËuãúÔr#çØ …¸=/–Z4‰Î$qïßô«�¸ÈrCxaÿê©å‰*N>î9ÿhÊäîì2r?JF��­ŽÙÇùõþtÐ\1eØÊOPÇŽƒ\çô©0v•¯R)06€I$ðž}}h rß¼xùè1ù×ÐtQEQEWÎÁ u�“ž£=�ÿ[Ó¯4׋|„ãŒ`1Ïù`¼ ž½ §ª`c;ò8=?�ãëM6�$ÿ0Fzéß­*�̸N1õúR€L|ÆrWƒžjBņKuþ}F?Jw"pAÁ˼1Æ)Be‡ÎAÏÉÈãõ©¶+iUVÆs†ž�¿¥7ÉÁ >�É#<ŸjG�¶Œä(8ÏùÏéNd¸Ãc£ýtÒ1‚çïÝsÍ7…<O#>ý(nNP‘Î1ÐÏ¿øÒcêGOãïþ}iª3ýì)ç#­’!A\Žž¿….ÈÏ@xÿ­zŸÃ< Ü$�µ·þ€•ÙÑEQEQEVoˆNß j­ég1ÿÇ xBÆUóœœc ƒ‘ïŸþµ4ÄK–ÁëÁÁ“HTª…ÎÀsŽ1ú}*B»Axƒ�}!ú{RoHÝ�:·¯Ôý(™�ËŒ3ƒßñ¥Œ¹Àîžã}x§ÈÇiË`úûû~´âœüíŒdò9Ï­ ‡wÞ!½NzÔÅÀ»WŒcÔà�0Œ8òªF1×üâž~\¹ê:�Ï_ò*j|³2‘ó1Îqƒ×Ž~•,…~UÀ�N9õÇùô¦ y„üÁPsÎ}ú~5.ÍêÙmËž‡"šÈÈ  Œ~#ÓüñVf 9Ÿçšs©<¦ =3ê?Î?Æ™Œ�Ã�$ÿ‘šš2ˆ›ˆ Ãg¿Sþ5j(ä+J¸9ÉçÔçò¨§F°Þyo^:ÕGAÈÀçý}F‰v¨*¤ŽƒéúcúRmÆ 9êGN= Må‰ã¨ù‰$ÿú¿�H±Чü§�Êž°"'ÌØÏP½Ï~iÕQ0IêÕ �Èõaü<ã?áUÀg'q9\‚�G>õ#qÈÂ÷çòíHI*wu¢ŽŸ�Ò•â]ø#לààòi¦^O\zã­2ĪgAÏéúÒ•‹`ê{Œži¤UØ«…lÜ}(TÎÆá—�äiw¬NsŽFÓ¿Ò“3®yÀÇ|§ùý)k c¸!ÅÆ?ÏøR%ö�¤äŸ¸xgל \¤r=sžåúW²øþDÛ¿òÓ¯ýtj訢Š(¢Š(¢ŠóÏŠšM$/LLOþC®nh±‚²2Aìh#œ3Ô“Ééü©ÎvrO=pyÏÐcü)�Á$çö ý~ŸJ“øƒ éýÑþqLTÀ!”ã�ÀÏ>Þô°,@Éÿ>”ì…`Aùr9PO¯§N¢„VE'=>ÿäPØ�Ã8nOòÿ?áN]²g<�2A<jirݵ.Æê=M8Ú£®9ÉÖœà¶O\ M7b–-“óG^¸Á¥Ú[ #i篯oZ †›zN#ç­¸:î\($çqçð©W 01‘ïJ9'b:óÏOÿ]!|r”89ãÜ÷éR‰6�—8ôÒ¤ŽVuùÔõãŠ]‘Ë�­µ±Ž¼ÿž)«lÑGµP�:ãÓç¥) ƒ…Ç#?ç�þµÍ¿(ç$ôâ“aÈSÔ“�÷óü©A'`ùù9QïƒÇëZ1áÔ£péŸåOU  í ’3ŒÿœS\…MÅ@'Óèk=�2Œ¯?Þ'�ËéQˆÎÌ€Äã êýÒŸ³jln=çô¤’¹=3·µ)…Ù`äñŸê5EË88ü¿úÔ3œaF3ž�E0ÊIžs�z…]ËmÚ �‚xå±þ•p¼€sŒ÷曀¬£8<½¿AéQîc À � ÿœâ‡�k‚Nߺ__Jq †nNìàõÚ�E“—I Ÿçü)ÛO–¯œg“�¥5]K²‚¬sÔ/qÉéžµ–o›+ƒþ?�'ß`ÀSÀÛÚ‚ÁTl0Èã‘Qºí<'Q��Ðþ�+£lù‰<ŸQþ}hÏUP<ûÒnPÍ ?P£4+mù˜õÁ9ëý)IÛ×Ó¿?…4ÜNøá†–=²psÚ˜¼;°Á›’03þsJ •$Œ·\tíM; ÈYAì }EQEQE|øFqС£å íœdúçýoåHAP¬�Þ‡'ïÚ€¥H'®ãŒñùúÓOk½Àgðþ´¡‰éÏS�OéO*Cà(ùÆ[#üúÑÈAÆ:�z‘Kµd%Ê€Ys¸ ÑnÛ•8<�éþsR`³€vŽ„¦‘÷@bBòõ'Ûžh,cqcœÎÜŽ¢¥h¾\íè®i誄(=@Çõÿ?ZqžHõÏùéLØèìU¶ç#è}OùíOXU�«çiõëJQєƩ¼ƒÖžŠp;s�óÿÖ©cÂùƒŸöONi¢•“ÔNj@’d¢r3�qIs !@ ƒ´/  Ê0[q ŽãŠ]€ ^28®?úÔÔµïcƒ�˜¶3�Ãè(Ý �H\’ÍÀ÷8¦<’1Æ@\ ïUÚBq¸NЧŽÿ§?Jk±ŸoÌFrx½i7-¼ž2½põ§4$9!ËãÛ4ß,|ÅS8$ýÜuïšUØáI>çž*0Wb¨Œî݃�qÏ?ýð¤ö¸7>�ŽÆšªÍ ‚àtÿ=©� ’v�QÓ E±Gu c�ÃÚ“fz0·ùÅ+&OÞàÓ0P¨`K óž1ëü¿:6’>|íþÏ4ð¥—~¼Òl ¹îGôé^¡ðÔáË…ÃvÃÿJ쨢Š(¢Š(¢Š+?^ðî¦?éÒ_ý×……QŒp3Áö=¨ù1Ðà®G?ëC.ÆÆƒÔ©ü¾�è Œtηù4ÐO‡=pFÎ(�Ë�œ(ŽÜýz�@<°®2Aùr3Ïó¡‘„…W 0ÜóŒÔ˜g¨�¥J‘2ü1^£‘ÒˆàuðIë×üñZP#ÁÆÄ¶8Çÿ«ùTWví´¨ã’#š§ PH,X·n÷�ªì9ÿg¯Öš-Bå‹m$rÝNÉ4n‰sµ0GBÜuþŸçëÉ!ÎpW¶ÓÖ i Àƒ‘×úýi jJ®_ œœg×­7Ëq.C a±üÔÆzþ„®Õ @s»#¥4–Ø7Ü`ñ×ßô¦ˆÙ÷Ï ûúÍFQLgqã¶áÓ¥8ÅÕXž™ÇO^Ôп6ãç×ü↌œ€ÜöÿõŸñNAíŒ1'§ùþ”*çœrO~>”¸Ìa¸À¾1Hc¤t'“øúþUì^*Þ±*r?yÎé£WCEQEQEWŸüM`§K9Pq67±×Œ…#¹çüûR´l=½�|ÿž´…xùñžíœÿW·½ $· çtï×ð¦€Çǧùú~”å�CH8ê)ª„*íPH¸ïÒ€­¸Ÿz�GÁ#Ü q�óš1åÇË0ßçüþ”*; ‘“Œ}¿ÎiëD)ËO,ÙÉ=zÿŸÂšÜ`z® °8'úþC?â)SzFÜ ì2>\œã©iBl\õÈÆ?•B¸ÈÀ ÇçN&2rý¹Ïb|ô®hƒžÄuçnI;r/óŠqNÀpsØã?çúÓX22‚:žsøõ©Y6°m¿('9Èç#=»}iûo˜Ä‚Aj�a˜¶ÐAèAàÑ> ,pGG'®}~U`8u;�Iÿ=éªß1¹’?§¯µ<.Idž¼ƒÐ~¥þr»IèxçúÕˆ¢È[8S�€qž¿çüâ¯ùJÀ¨þ/®}ÿ?ÌzU+¨ÏIÆÕ<©=sþGÿZ«É’ÙQŽ3Ç'éŽÝ鬘ÉëŽ;öýi0~bíò¯áøô 2�ûµ9ÎGqP—}¨I$ A÷öö¤ê�ŠŒõ9ÿ<Ô"Ý7o(‹€pTóÉøô¤û…™W…_”ú¿ EòÌŒ\œ�vŽHŒŠYŠª—8çv8íHKnu ØÏn¿çü)ÈÁbIÎ=¿:B¬WnTÿ¼8?¥4¦Ð�Î@Ï×Òš™2Ð@ãõ¥�› ,½ÀÝïHѲƒœà õÿ>´Ï()+†L®Ñ&wg üþ¾žÔª…@<Œg®GøsQ²ø;ŽüSö'x+Ï=9¦yhÁWp\A>¿çÛÖ‘�DUF3� OÊžcm¤/Ë»¦F}hHö«Ä’9byÇóÿ?…8ÆÅ¸È&�€IäœþäÓ[ÌÈÀeè ^ýEQEQE|÷¼°á€Ç\ã�Ãüþ´õ|‚€+.j³�à$~'¿Ò“?1Ú¨AÆ3Œu a€  ½ri|ÔaÀ 01ƒÔS‡$ „ÎU¸¥VŒdÌ`àÛò¸nåÆ@Î=úô&Ò£nì6‡?_óŠv{Fp÷çþ³üÇàô(@àl±Æ{Òíl0Üä>ïoëIåòxØO9ÇLåÅ/—üY$pÀc¯¸•<ÆY‰íù‰íÇ_Óõ§ùd0�q׿§ùÍ*(n¤ ÁëÐSÂmAæp~SÆAÿ?Î�˜ÇÈÀç§^œRˆœ8Ø *úõúTÑÆí€ÇÞþ^µ~Ò>QP‘ÇN¸ëSÝ@QÏ(;±ŽÏò¬É åSôçŽ<Ó0\²”9ÎsÈÿ#õ¨Ø0ÏsŒçü÷¦¼h˰´ÿ ª%ŒDB“• ŒqÛ úPP#ïuÝ�מ•ݼ1Çv>ž´8PÉÁ#þyüª0›x$OjF\�KàHéÍF 3gj�ÞƒóžAüiþb`*í-Ï$þáùÓ7¥ž0pNAÉ=;Ι³’:`òŒŽ¿JC6üà88r0qôíÏùâ�I±œ(;GWà†<ŒqÏÏãCÈrHÚ0>Rzž´Ï408çkIïŠcø,2r 'œc×§øÒ™7Ÿ1'©œu£qv #©õ¼ÿŸÒ�¹?Ä7 $ÿŸa^¥ðÙ·øzä€ûc`�âùšìh¢Š(¢Š(¢Š+?^8ðî¦zÿ¢Kÿ ðƒ#HhÂŒe›×<Œ}?Ï0�¿C(8Î;Ð]O-�ÏŒžôÝçq'�óØÐP6óךsH 8@ÍÛž”ᵟ” ¤7õúÓ‘×8dã9R{çÿ¯N# ~^NÎÏ­ ´¨UÜÐA'¨ÿDÄA°ª¹ õ·òý¥Jv` aph‚ã«0ƧéI°(#îs“‘ëíþzÓÚ=¹,IÁÆ1’3íøÓü®H\Ì3ì}?ŠP€¿–¿p/+ééÇáNXüÌ3`c“øóÖŸ³äPÊYÏÏÓÓÿÕJ"Ë(òÉ·Pÿ"¤IÎ#Äþ52ÆÏ‘·+žýøÿõÖ�¬`¸8ǧÓ?΋›r’2²ì#ƒïYÍ «AÏ®xÿ¥5Wpûª£†=¿ÏÿZ¢ Ù©õçƒM–$q³åÀç·¡¦ÒA>Á†:oÆ‘‘p¸`§·QÛëL+´Ç�Á Û?äRHÎ$žô͘È>_óÍ5ˆàärWü)ˆñ…çjôäcÒ�çFv�·'�ž¤õãò?•4²ìbäŽ23�Λ´€žFy=¿Ïó¦´žc-‚xáŒÿ“šA(D !8äqõþ”Ö“÷„d/NHíŸ_¥!—!Jà6O qš�˜6† rHç?OÿU)”Hv À�¹�§ÿƒ+(T€zûè)£pù‡“úuüÍ{�ŽïX»sæqÿmº(¢Š(¢Š(¢¼ûât‚7ÒI8L§ðW®À“Æ¿LÿœšBSËÜýpqÎ9=sO.G9üÏZj¾Æf�ã$Ÿ•zŽÞ§§ô¾aF1œŸLŠ7ÀÏ\ß�óéN2|ÝO¿Zb0¼=öÿ9§™8ÚP ðŽýTHãËÞªû¯_ÿUHàà°<ÔúÿŸzLõ>_b9ü¿Ïô$§fèÃNzŽ3Ú¤ÝÀã·o©÷§ï†þçÿÕI�˽—v02N8Í5”�ĸgŽýTõË“�A��zµnŠÈ§�?ˆdžjúÆZû“pãpçÃùÕ9PaØ6xèªLOgóÚ£l‰T𣑷��Jk)\e$qL%P à Ãg¿  ª1%@û¸?NÔÁl6HãîŸþµ&ÑÑ~SÐÚ‘ã/´eF9äõëL+å¦O8êIÁ#ëM‘D``ž¸9;Ž(p�$ç8ät¦Å� ‚½Î9ÿ•!Â�IÁãÓéøSF¹!Y˜ñïNn$! §‚yü~”Ðãh–ç¹çüõõ£åó*Î2LSV �Ý1Û#òëúÒnYFϽ؞™æ”.@]Ä…ò¨„ üåqÏ8ÉÇLÒ´ª F I8ÿ#ô¦Hp¸Qßè>¿�o cŽÝ{Swcò€ c§ãÍ01U^A|dŽ2}­HÒå€S—>¢š'ˆ,«Ø¯¦Ïõ¦ù¬NÉ%¹ÆÈã×Ú’G}£pÝ�’£ùry©>Ó´� üï´QEQEWÏ�F+î@:žrÏò¥+�»�îç¨ôÁãóý(‚ÄTsœõö?™¤Î$ ¬1»¨ä`ÿž”õLmÝ» ý?*PŠ¿.ጎç×ÿ­OhVDÚ_ªì%IVÁë‚9Ík“¸`‚ä‡ÿZ�åF r2Jž7c×ò…,JˆIÜ ’3µz�ÛóÏçO‰P. ’3ÈÀôÿ?•ÀdŒ�×#ü;šD ´¶7äd�˜Ü}êL�÷ÏåÞœ¬Y²à dç‘þ{Óƒå€\vÏ=G^”«?̡یã{~ðê=Oš"¹.åX®ðG89÷Ç®jlîcŒñ×­<“k¾FAÏ÷¥±°C’.¤ŸéúU»y‹Ä~V<ŸóÚ®\HÏà€z`ãü1Y“HK>2«“íüª´ŒNv¾À[œsQ³‚ëÆXqŒþ?Òš09ù¾ëóÅ&öÈVÆrNzñõý)€°A?. Îxÿ?•!—œöè£zäTm!0°ÆO�ôëF憙”ÚŠ•G¡Àÿ<Ò0NKéß҂˼OÍÆáÎO¥3¾n@?…;€ÉÇ©â—jgipçúSpKmc¦ô¯Qøl»|;qÓþ>Û8Ï÷»(¢Š(¢Š(¢ŠÎñ?áÕ76ÑöIr}>C^QwpFÒS�óØP#'ûßxœšT�Kla8Sž¾ÿʘªØ `uÀϾ2zÿõªQ\£WyñÉ9¥( Q¹~SÆ#ŒT†5;ˆç=TpN:}i�UÁ'’Çžã¦}?úõ+¦T¨8ùyãüõ¡<´L)Ï ãófÈnxÅ3,HÉÎI<ƒÏ�j�Ð`°8ÆcýJkIò6ü©ù�=8ïK´€Ê¥rOzô¡cexÈÏ>Ô›K0'·'§ùæ¡Ù¶"¹ Æ01Çj² \© Œã'ðëéý)Î¥œ�HÆI$púôÄVà ‘Ÿ—�jBŽN[“Ç©à}j?)Ø’ßw¡äß�N(‘Ó Çáé@sÆyç§OךfÇÎî7w÷´\ÿw8=ïJ$fÜù‡=½ÖŒ¿”Ê€Î0@?çùT IÈ�sÏçªxí'�Îã9õéúÒ©Ž4nª?(öÇçÖ—z‚8<õ$˧֓ÍÄa“Æ9ÈŸÿ]9ÞCµ†3‚ Žù§d–,Ì͸rr¡Ü¤d1íŽ™Çø ‘!b¸V#<î'56è—‡“$ú``R} "b$  ã 9ühIC1-�Äqó�}»RùŠdb9n:“ÍO¿žÀœ@ÿ ºÌÒ®Òüÿ¿ù5›q#H^¸5˜ù‡9ãºqMea¸ßœ‘þ 1$¿˜ÁC—®}þ”¢\±]§$pHÇëøTGÌØXcåè?ϵ/š6r¯RÇÿ s?Í‚ÃyÉPy9öýj&”ämàcž?ɦȂCóm¸äõëëMùËíàòç9ôýi͸¨ŒñÔ â›!#jœå¹·Ojˆ¸ÃóBN}©ÇæloÁ=yä=>˜ëL'x#vÃ`NiI‡ÎçÖ£;9ÜT2r:sÿÖõ?(9ÈÝë� 0uV#ç\ã“ø~5!9àçq>§'޾߅€à g��ß­z�ÃF Ọ vÃÿJ쨢Š(¢Š(¢Š+;_ xsT'§Ù%ÿÐ xh”€N1ƒ�Å9r§`$CQîÊ`g¦Þ úb—#*[«p0p=¨Wuá°HÎIô§3œŒŒƒŒb�&S ’ràzÒ‡gå²G óÈÿ?…*³:"§Lþ\ôÿ>µ"޹aópsõ¥�cHw60@^=©C¢Ä9lç ~8 ºÃR9't¥2¶�|¬�çÓµ òy›—0_Lw§‚Wq%¤ç'üÿŸ¥8#pyÇf]‡Ý'¦#üñHã{!I �ëÐþtѽÛgŽK‚:JRY¶ƒÁŽ2~”ŽÄ8^ãæÉô¨UÂŒm9ÎF$ÿž”ïâ`X½0ÜžüñÇ<žyûå�Êyü?Æ‘€,G¨î)ƒhL`“×ëù÷§µW‘ƒƒ×Š@pFCcõÇáOÈ, S‘“Á4„€08ÈqÇ?Ïjö?0oXÞ`úèÕÐÑEQEQEÀ|K,J*yý÷^˜ù:×>^ÁæÇOóÖ�¿kžãï™4Ö�/ÕAÁ篭"˹Cªœv$u¦äy§yÝœ€¤õõÿ>ôíé#õ ‚r½(“åCìq“ž‚›æ7š °-žž�úõ “ À‘ž{´�Ãld dଞÞ�ýiÉ1a¹p9;‡ ý?•9YH-\w~?Ö�1%vîPßÞãùJÊã±îƧ֞ŠçaÈÏLÍ5ŽõÉËüTÒ!ÊŸ™Æ>lãÚ‘Ô|¬7‚½qÎE;A<–<õãüâ”�¿19 õ9¡NòImÀg>´ mÿç'šq—�«µ˜œ¶=~½êA•]£tæ’2Aç$žÝ>¾µ4q°�U¾Q·èsíAÂ.Õ�Њx�sÏ�¡ì¡~f W€xÏzb¬Ep#¸òYO@ÀûUÿ1r`6ð9ì:óþz§q2ï1¯988>Ç�¯­T“1¹ÆI<Cô¡˜�Æ1Ó®0sÇûþTÏ“*¤ñ‘ëBÆÅÖÝîx'ü* 1ò6ç©ôáÛü”Úv*ðN1ÁéÅ'Ëmç¿$Ôaˆm™qÉ'®r?ñ¤o”Þ¸9LzÆœ6¹È8#ƒŽ=ñü©¸ÜÎO®W=}=ý)ÎwqÀ=ZL�’ŒàÜóùÒKq¸uÒ�9Û¼ƒžzg?§J]ï°9VääÛž§ùóúTjÆB Œž‡œñ�Luçüô§o}Ä�;`ÿ�!p±nrW’[ŒæšeÞ |¡O#ÿ8£;œ3Œ¹ uϹüéPÑäcæãƒMg"C�—�Ã�Ê�ÄrÛxƒÓ¥— ñÁÍ#±rñÛJÌ@ÿ\Ò”¹Ã:þ=ÿ•a$¡Lç�¤žœR¶FTŒŒwÿ9¥Bé»–œÿ{>þßJ÷º(¢Š(¢Š+çuqÏvùíJAÆÐèÉ‘Ïúw§eˆ\ç8çéíøÿ*`ÂÆpª¸éíõý:~IlŽ@8Æì/ƃ ¡Nl Rƒ‰I/€Àð>´›ÔŽ ïÀ=i]ÙŸå �»wg·_éC¹²‚ÁOa“Ž)|ÐàrH$€Ã�}ÿ*vw±!pYAç¥v·VcÆìûñßéRb<+ œc·ÿª§Š ß0ã9íøÔˆ‹ß�³s€½~œŸçO3¤yUUääþTÏ5¤,yäsŠŒÉò‚¨A#$�ž�©X©lŽN\œÿ*ȧ žNzK»s ä·CÆ6õ©á“qN {ãÿ×W]²@Ž£óª™ «¹ŽöÀ`yëïíUóópîG¦?ýb•_ö;ã×üiÒmØ#'Þ “+>þpÄÏJBìCŒg®C´Éc$ªmë÷±ø~t¨À¹ãG©ÿ?Ê›1\nä�ƒÓ$õ⚤ �X�»ò¤~ çn“ÛÓüûÒ«»{�Œãù~´ÇvÜp¡—wOÇŠ`fS$r:�ÿ^)sdü¤AÎGù4„CTà‚çŒSܧž7d;~¡Ac×jœú‘þx¦�•X¾cªã韭ݤù¶¯”óõ¦nb„*žGaÁ>õ#¥¯øü==y¯VøfþË‚ÙÉ»cÉÿa+³¢Š(¢Š(¢Š(¬í|ãÚ¡?óé/|¯ ÁQž€qøÿZBNr£å܇�ÁÆ~£?•Hä±9ñÎxÏùþ´Á…E á¶Œz~=ÿœŸ™pÀŽ>nÿ8§y€Kòäc®Ïò¤L.à\à€vƒJ$Sѽ20F½�å<§ˆ<œý iVßۻʗÎèHmØÈ¸<ÓŠ–Þ“žriQ2ûT“’A-Î3ýzS€yo?y¹$7·ùü*Ò@Jî$ïÎiê±§ÊÎ\ñ�½qøSšåcj¨ÛïÏÿZ£gb¹$– “ŒúÒàB°\äñ×?äÒ�c޾™õéBÈPç q¸wì=úÑæû†H w69ÿ¿§ùÍ Uìs�þy¨9Žr2y,G·J@Ìé´ã†çüâšêL€l!G'o¯'¥*9oáÈàdŸþ½E8x}ìñÇr8>Ôì¨bªWó�^ŸçëMoõŠ9ÏÌÞ¿çùR«gï¹#·æ?•DÌä ¨9éÇCÎi žW�µrAý: À“ÏçŠiR’Ü œ’x<ßç½FrÇžäñþE(PTœçy4gnâx|öÇçü)›˜–ÎÕ BŸËß…‰ vç#ŽJåƒ.Ð@=ÆxúŠöo‚<a¸xH'?òÑ«¢¢Š(¢Š(¢Š+Ï>'¾É4ŸB³Œÿߺà>q �úöô¥&E#=:g?–~´¯·8R@,z~4Œr­¸gœ`ž´à6íÉÈÏ­0‹•UQœ€ÿ?…8(RNIÈ cÜRá² g$ƒõâ•[€IìBž¯ë×ëH¥™ƒò“Âãîàû})è ðNO9ñϧdùx©üø¥r»NO^�À#×Òžñnáˆé€qž?ùzSÕ�oG'wù… �(\78Ûé“ü½èó\G™‚;g=»ÒdyŠ�óž1À9íïM|¼«¸þ·ÿ®¥ Wç'n3ž ~dô✘€8tö¤1± *(÷˜qß?ÔÔ�ðà •Ç#‘øS¼…“–E8A#¦: “F¤0ú p¹b›†œ Ži¬]‘�8<à�Òœ¯µ7gò Æ4LÌr3€OOê �á?$ãú}+F%Ú pIÇž*]Ç ÁÉô?äŠ�ÓzsÃðëYìäJçw¦@üG§·Ö™½†I?0\7^}úö柼º“ÏËÓžþ}©8B~îàGoóïKö—Evb¤£ÿž¿�&aœI¹éùÓ^àú�×ñ¨„dlgeÈÈäzõ¦pq�Ã9$¿á×4§î¨# ÍéÛßñ£ïŽ«ÜgŠ€²B‡Œ�Oùõ¥f_4+¹ ~¢†¼ªvà“ž=¿úôŒèOÎÊ6Aǵ)ÉM§ xàð9 ÎBôädg?çš�9@1ß?0üª=ä ôüñR>01Sß süª6‘Â�0HçŽÿçñïJ͵7�žº`žôÞN2w)Æ#ú~T’mBÄœ0:“þzR±L€„Øê1J8þ£Œ sMyçv7 ËÛŸóù~¡°w=wGOn3Þ”“¿'åE=Xã'ßßõ¦‡fFuǠ㩤ód™Ç¶?¥}EQEQE|ênÁQ…çÐ{*�Ûæ™“øA9Áôô¥ÜH^§º¶xrI<œ{Ò•" ò1ÛëÇ\T’!ÁÚ9Åž”øÐ(9ˆ dñÏô§+¡B~eÏQKö€¤²ç®7Ö�=Ž@*F>éã_ÃùSQ‰PU·ã'©‡çL,C‘Ç$rGNýf¦ÇXg<úuãéKæ+ä&p2¤g`u÷?Ȥ ÷pž;õë@Æ Éº}p!%byS÷˜d�Ïò©ÕˆUE#އ?çÖ®njžyÆsÐqJ©üº�Çôÿ8ªS ’¼9íÿ?‡åP0�Æ+ÎCqÕzuú‘B ·\`Æÿ?ʤ»ïž„�Ò‘‡ °)§½VrÎKA#$¸éÇÓù}(ó0ÚzõÝÆF(ÞY”·®Þ3ƒÁãüõ¥g;†20 Óˆ X|žœ6Où棑d`0pÄd)çÒ›´L‘ӓǽB@ Ž3’N~¸Çóü©À&HàqœçƒÛùR–VîyÈþ´�;l¸Àês�¸ê~¿ãBîÀõëëÅFŽKíÆî¤{ú½zÔË,@²î=ysý3Aq*7aÐcŸçÖ€ÁƒñÇ í×ùÐ9ÁRA$à~4Ý Î9ùYˆç_óÖ­,„:©¶0}êÂ0V%W<Ïs�NC(/ƒ¸ó»¡õª.fPÁÎvŸösÿë?�BÁ ¹y€1“ü=ý�ëNG`Ä3î#'…§«†ÁsÈ?keS#nÎO¥WbÀo íÉ''óúv?�Ö—~]À ƒ¯ÔôÍ4HÅ·8ù˜n*8öëÿê§«–$2à“ÆHüè#p$õùNïóÒ£™²Éî9^¸L°Î§5]BîP§€?<�ÿQëÞž™î]¹ã¯^ÿãK’ÅFÓéQ‚@ÉÉ9äw4â‰áFóÛ“þx¤�ƒÆp[ŽÝ)àç?ç<ÐdW\ñ’x�"eŸähbÛŽœZöŸÈ›aŒÿËN¿õÑ«¢¢Š(¢Š(¢Š+Ï>(¶Ñ¥c¯ïH8ôÙÖ¸@‚08ÀööÍ Ã¨$QÎó¦´�¸ä ®ØÈ|p8úåJ$Çr#9ÇùÅ9[1î)îŽ1@È@Ý8ûËÓñ£vçF>£<ÿ‡åÖ�½•òA#ž 4+ M¿)àrNiåå׌uïÅ*1.„a€óùJ`f y}­–Î}1Æ@éJΩòî$ôPéRFC½ƒרÅ+Hʾ^1Üóõ⑺•SóçŸP?Ïò©ˆïÈ'®i#' 0OËß4æ�œ‹?‡Z‘c$#9ù† ÜFyôÿ?�?Ê“Ó$ ÛÔTˆ©`±$óíKç…Cµ:q†?çÖ¢ó̇æ9õSÀÿiCÍÁ B sKË»‚“ŒŒœS�°ç •0~b}³þy¦}Ò ÎzVpê>R8$‘øÕ„bI Uyùy'ÿÖièÄ ck`¼þç­N²€dœŒã×Ðçðý@Îåäö#éMr��rBž¹öÿõÕ`áwq��©æš›H'’O1ëœuúTŠFàr:ò3ô¤lÇTÛ‘Þ£$yq€½;ÛÛò¥iŒmÁà‘œýjD¸.¹dЃœÐV"0>SÔqߥD`t Ë—8$síÚšSÜú ˆdSɶiI,9cÁ¿Çó¤gÍÔcåI¤î<{qJ’�€ÊTqÉ?^⑘…É! $ŸçP¬ªApIçž? <ÂÎ0ço;°¼cë×õ§‚ òÆÜ¸ëô¡A+•S¸õÝÎ1üéf”œ|ñLrÆ01Ûœô¡ÁÛw3Ê3þ@õ¤òÎK19ÇLØééJ¼¡`ûˆîéM ºFc8§>¿€¥àœxÈÉý)»ÖW$qÐñÿêúþÔ…ˆ ätÀú{Ôm,Ší²7#ý”~¤WÐÔQEQEWÎd…nÐÊÕÇOð¥Œ7!Ã7c¨Ï·‡ô£“ò¹Îr@ÿ9âƒó•!HÛœäuôþT¹ß´äz g“�Â�r=@ÇsßùSÕFÐo}À�×òÿëTéÛ�¸GO­=Åvî-ÈÏåÞ¥Øß$ñŒöÿzi—iùFsž ïPÌ™,Œ¹$2õý=?ç4åq”*‚AéÓƒF8‡9±Ï<ÿž´øÙ³’öâ”6ÞlƒïéC!+•¾A=½1B>~M»_' ÎyëŸóúT‘ðw(9cÐÿŸåR>_äs€yúTe¾\È sÍ6¹Þx玧§¥L€—²F9ǧeÛg$…ÎqÓ�ßòüèy $nU#ñÚ£y#c”Sž¤cõúÕ71G$óê>¿ýzF�[$|®9àž¹þŸÊ€Ìåù `sОþß�/œÍ&å¤cw~¿�Ç6Ò½AÈãüôü©»J((ùN=úõ%~à�—#$úR1  Œc¿çÓô¦ªƒ)*ÓßÐäŸëH¯‡EbNxÎÿçŠwš#Q×#¿OÃ&•ÔžSþþTßßÎBƒŒœÐå@ÃrGr:zJ‰Û Óî’y'¯¡?� ¼),Il`íÉöúÒ�Û‰Q“ȸ�)É$['§PÃ'iPXÎ:Ši~7dã<Ž˜ý}«Ö~ÿȽr}oÿ@J쨢Š(¢Š(¢Š+7Ä  ê Œƒg6F3ü¼9'i]ùÀö™¡rPî Üddtç·�'j’¿.yÀý?:>ñÃåþïñÁ¥$»iÉÆp8·�& |Ý0Ç?ç­<òÇCòðÜŸZ°#P¼ (éƒÐR÷H6ïÎON9ÿÙ©Jª6Y²Ç’3ÐÓ åyUàÓüûþ•J~e8<•<ãØÔ�ÿxFUW“øÓíÎ+1ùçŸOÒ¤BHlàgŠ7œ`éžÿç4¬‡wîðI9n{ö¡2.ÕÁ•qíš–>å‚ Á84çc´q“œŒ’ØØÊŒ½éÇ îà€xúÿõóR*³n䒃؞p:�_ üÝG‡óü©ï*®À0ɱŸB*$��(ç?(õª©}àä†' úóúÒA^ ‘Áÿ=iUÎ „í Ãôµ ™ƒ3a‚#�ò ¬r€Ê@#§×éïùÓXaHs€Ü�ÉZ�.¥°«ž;u÷ü»ÿ:ÒCeJñƒŽÖ£DÂ�¹/ÊIô§+îr¤“Áç=qÅ/œ�^™ÆÐsõþT:7>_Ý÷ Íeù°¤ã89ïHÅzs»¦}ÿÇ­BÌÛ”Œp0½zç¿N)Ë�¼î!±À Ýœuäã®3õÅ(ÉÀRH뜎¤8,Á•?7^i|ѶâA?N:öŸ x:ÃþÚüˆÕÑQEQEQEçß0F–§8>oAþåyç!ÕU³ÏãÓ¿?ËÚ�–a„ޤsþ"�9' ;÷ãüÿ^´…ˆù6¨'¢œg<òiêNßfàò?ÏùíHWår0rHãw¦iq‚ÎK:hr‹ƒ�ËÈb: UT;Y†àW ½iùg˜ÆÜx¦ÈC:°]ÄÆ—% ùO=qB©Êóò·<žžØ©võ9ÆsŒ>;õ©›ß%K(ÎpÝ{w©w�àà§žßçò©€Çn9luçšR,¢3Ô†Ç~½y§�.0«×=iÂP8 cŒ})F ’Ç\õé©&b§ŒòÏùö¤ÎôÏN{ý)èáŒl#Çz“;3°– vÆGÿª£fÂãhAÔ–èq�Ãü⃌;n[©ïþ4Ð…˜�Å�'!ÇNGë×ü⟼†ù€nz¸Çù?…[ò0ä‘ê ÿ?çÚ¤bv+óü]…!,SäÏqŽiÊCo9ëQ4/6YO°j´¯å¹áAÜÞç9éLd‡Ì<ü£œŠW?)9lç'‚1Í5_æb•-�sÎyÏÓüŽ*MÛÕrŒ€Œc~_çÒ‘”ò1òòNG5«0 c¨“Æ>ôï01S´üèõ¤¸RQ™Ž:drGo¯ùãš“ÍS�RÏ­0„�8mÃo¦ΘёÉO˜~¿Oʘû2ÑŽ³Ï¿ç×=©<b6íÀZcËò¨²rAN g“�ïŸóëQ¾òØVrOoqŠO4€‚ ì3ÿÖ¦ �òŽW{¾)îOÎ˹²Ëœ¯ç�åïI/¯<HËüÿ:nàˆÁr .{ R�c@Üp èøR€Ær=SXÚ¬¿tn,OÏÞ…l±UÀeÁçñÅ*¶yeœŸò)­YO€Üg?�8íi$ç¨+×Úž§bíÏþ;_@ÑEQEQ_:Ÿ‚øöÿ9¦îù€\õëÛžàÒ`œvÄäòõ)rØq´�zwÿ"…†CpFyçƒR27ÉÛž‡Ÿ_óÈ5Ô€¨•°NpIãß�Μ›\cæÇMÀãßçü)ß¼î Xd/×êÏõÈGê\c$´ d9ÂãÛ©¦6|Üaˆz™÷2g$óØšDvÜž[ÍÉÉÁÆ:ã¤ƦQ˜�VÊîήy©Þ\0;U�Pzö8þ”×M¡•”�G'ö8ÿA¿b±989=?úô¼‡nWiëÏZõo†ò,Ü|Û³xÜÿÀ»Z(¢Š(¢Š(¢ŠÍñ džµSÇsuÿp׃p~gÙ�0}»ÿ…49,BïR Ç#¿�*7ʸ$î$“éÖ¤g#/Æ1†àŸZU<¸ã®zõÍ=cf�2ðlGÿ®§Š$ˆg ˜ôëJÒEÜàõj‰çf ±*½H£@¤mÈ黜ßËšnÜe˜œvã§áC®ï¸ÇpéŽ)Áƒ�•†áŒþçùQ»€ ÿ>´ß�&±¸t<ä/¥H¿8Ï ž�ž ÿ?ç4“oa!ã¶zþ¸þµ m±–E9 Ó�4˜àæi¡ö2…î==êI3µNãŽO~¸§ÁNÖ ?‹'ßü3RÌq‘‡QÊ‚�H¸BÑá~žŸ®>”poóþqLs ¹ Î:JSº0'$òG4›ÙÙ@Á!yöÇçOÞÛ0H'·Α¿x È6:æš[å-œ�pxû´ªØG v€E!Ê¡ ¥O\ôÏãÚ—æVRÜ/N­7æ�+Ž£œó×¥{O€†<§€sþ³ŸûhÕÑÑEQEQEçŸHŸ;Çܯ<ÙºFyþ¼Òm\—€ÇÝÇ¿çüEBã%qŸ›#±Çµ8dý᜞˜ÇáBÈÂàç9èxíBú.Fî[#OåA!‚€ÝÏíÇãÚ……ÈÚ01éëǽ ¨P\Œ’AéþúÔ/Þ+1 Oãøv§¢# “ÛÚœX‰zyþ”ô�h\²“ƒ‚3ÏóÏ~ôàAé÷‹ Øê~´¡9&=FiU•c`yçóy‡p Þ6�z}i¬ÿÄ[¾1‘Œôü) €À±9Æ3Ü})L„‚óØþGšs Ž޹#?çüæ•~X‰Uäó€G_Æœ˜ÛÈã8ã¯ù=êNU ª‚AÇà)¢C¼g8Oÿ_½ ÃF0ÇAá�NqÍ"‚0 ]½ûûu§…s–mÄœŒƒÐóÒ¬FÁ›#©ä�þ¸«ÈØÚ¼·lû~ç­Fí‘ëó�É ±sËz~TÐÿ+Ác�¸‘“Œâ¤Y_<ãÔÒ¡�”7Ì@$àg¹ÿƒÒ `}<óžÔÇ9#€2$ƒƒßúP>èÖš’ 6¼m•#†Îìþ4ðK!�Ã’ùãšGÁày•ÞLHsßíH g ¾�øÏ­!vPAQœÿõ¿>)«Ì€¡ÈÆyÏùïÿë ±õ¯¿µ(!6ñ¸�ò·ŠPѲa9¦²üÎ8ïǯ_OÒš@'äÇl3ABÿ6A=²^çJ‹s*sÆ@�9£.Ì2FNÏOZŒ‚ lˆ’08ôç‘ÏãþE*2–m¹€ë×¾2;wýhá~ð$ã¯çüúЄ)É#æåsŽ8Î?JN¤ üF9úþBƒ"¶Pd0�:ãùúþF�•™€ñÈÏ~=y£ Ág¨ôö¦ðÈ8ÊŸÄcãNù\ààd‘œóéC²©ÃFÇ‚6ã�} EQEQE|é�Ã'  ši‹æ•>ï¨ÿ>´ *�Ãn[ï68?¯2£°'%W§>ŸÓ½84h½ ÇEQö¼0A„SÐ�Ö¢2–e œg‚hÞ óü@1ϯõ¦¬ÛÐå×àŽpsÈ÷9â“«` Ê>ßãF¡Án¹-×üŒÿ:z–VP $ç'=1ëHdù°H¯œ•`{ó�Öœw ¬cŽ>Ÿçµ*€­µ\±ÝžK~t´Há†q�Üñì)w�PCq�ïŽ=i brJ�GSÓ§ÿ«­;hc�͸u¸Áö¡I •LŒäsNÀ Iǯ$b¤bDDýá€G±zÓ¡m³s•^8ðÏÿ®®òÊ;›|½Ï¥3TåÎFqØzSc¾`në×õéùTS`ˆåC1<ö¦7úÌåH ò2;õªp6F8íM%KïÏ,êHëéþJqo�p2ëÓon¿�4©Á'ïg“�~¿ZŽIŠŒ0æÚ8ëô¤;‡Œzzv¨Õ�¾Tdœ=úcò »»@ÚpNi»"ì;—øƒqþ}i §¦s·åëžøÉý)Š™o¼Üûsú~t­"Éó!$m¸'·ù4 °# �Bãç�éK¸€Ò6Œü½~”ç}ªÌ{d’i«2’ ‡ä23þGó¥Œ/x+ÇN?ÏçIŸ˜)!�9×ßñ5ë? A¹?ñøýÜJí(¢Š(¢Š(¢Š+7Ä?ò-j¸ÿŸ9¿ô^ ƒ÷ 2òxÀÈÿ<ŸJn̰MÀpØéëÿê¥UXάrqÜûsSÜ®XàH<ÿžÔï24�Ä{ô¤û_%3°Æ8ȨüÒ[vNÜqÎ)$rI9 ;`ý Ë ë’x#ÓáÞ˜9è2F<àÒà¡YÀÎ<çÒ¤F*ß+qŒ–'?çÿ×MS†y{Ó�Ùã·½=a’ïŒ�óýhLpª.W}é¬vDÿ8ÏQ“�O’_”GM߯Z2áÎìuëÓÿ­ëA]Ã!ÈÇÞÜzqþzÓºº[œdRù›±‚H¯qš‘ø_˜7 £ÿ¯éN„“½X• � ~ß犵»i ’]¸ÇSI†#%‰=1Øóšl*²ƒòzì?úõ°._j[Ÿ\ô5 ¯#Ûžþ§·ãQŸ•� ¨fÀê*³1n¹ÿëÐY¸Îr9äçŸþ¾iË�êäsŽç×ýÅy#9ëÎ8ôü©Ìvð¹óô¨œ7oáè3Ö”9�Úxl†OóŠs28ääqùúêE;IUÛžÿŽ{ýiUÏ| ríúÓc™‚®NpGO§~¾Õj)‚©%pÀdóÒ„�üÏ´Àçÿir€…Æ?Ï„†`p=p@÷Çò¥2a�ÇxÏùÈÐdÄc ± ÐR•‘K£ŽÕZf>Xp èO~ÔÕ�8b§'#rƒ�§Óß�=ðÿ+Œ ç�΢Üämdò8£pF# Aà€)Še2¦}ºÿŸÒ¤IŠì¡èAëùQÇEàNßJ‹hL*ŒÎÜâ€NNN‡Óšlm¼2¶wã‘Ï?áÞ�»c‘EÛƒÆqÔúœvÏ^Qô¡¦Füc§¥Þ…¶ŒgœàþsþE9UK­“Ç^xÿ>¾õCûÁ€01€CžH4ÔRÌq‚1´ýáÅ5sµ‹+€ŸOñ¦‚ Ã`p�|Ósžw ã='üþ”ÖÜ�¥qŽƒ?_þµ:Mª§#�xçµ)'8 ¾ôpWœsŒÅr¸#=0@ŠGfpçÓŽ õ�Ö€Býæ8\cpèjTË�§-ŒñÛ"¾�¢Š(¢Š(¢¾tÎÅœ7AÜÿõúÒ#/˜Ë·œsŒsþsO-±Xá@í�OJ�s•brãcšAæœr3È<Éü©Ù ‘µpÆ;€z}zÒLÇ8ã“þ�/š2zôüÿŸÆ�n,q�¤ƒ•õçóãâø`I* àŒõéþ•’ËÈ`98à÷ÿ>”ª~PÊëÏ8==GõüèOÝ’X“»�“ÓÚ�¸³’ÎB®:w¥U Ç'#8ã9ç­7062Ù'OùÀ§?;räí#©úvúRî°‹súSa‹»tÀéǯ¯¥? 3nû¸ÛÈàúÿJO0�~PIôã?þº”È$Œõëéþɧ† ¨|düŠ@'Þ®>>]¸éž1Çø„»ò꣱QøR° HÞ§åýiˆ3*.p3’?¯z$rU”"óÁ9â ‘•Cmƒž™ÅD¤¦Ó“ŒŸ½Hòd‚@ Ç¿ëBÌ9 FAÉúgÖ£l«+Içœ{ÿõéÛÎÐ~@r9¤“‘÷ñèÞßþªk¨GE-Œã¨üÿ:Rq†º�Ðu&˜v2…ù‰=Šž½sš`RÌI9Ú}r3JvòI#Ò� $pzñ“Ž8ëLR0>ð'þOz_¸A\0óœžJU‘$Ünðsë�Å=ŸnNì/ÝÍ3 NAÆáÆ�Óõç¿­zßÃ/ùî?ëñÿô®ÒŠ(¢Š(¢Š(¢³|B3á�T¦Înøþ^ X )l1ÿ=? HÙ a°`G­9ŸË^q’zŽÿçüõ¦eöå¾cÁí�ÏZEY ]ü©à«oóÅ898%G^Ýøê={RBW†Îs@*®rÀ¶3‚óÿÖ¡nÎÐr1ÆÉ£xG’3Ð óßúΔ�Š Á ’zíþzÒò‡LcCý)S1‚¬ÙcÎâiT–bÎì>bý €©$ç=�¯ò¤ !A¼ n™ëŸó“øS˜å×-Žp3ŽùÍ.í§i9<Œ“ÓÒ˜1».í–nLvþ§ó§‰Éc·>£��þ½"ÈÇhØ7 sRŒòª[’qÁõÿ?äTˆØ“s�¼ñǵYnÚlpùö¦o$)ÀçÓ·4Œ1‡bIã ÇÓéH„|ÛTaHäŒgÞ›#]¡ó“UåeÚJŒ©àgëQÆZ=£sœ®2FO×ùñHd,á—nÒI=8íJ³†A–ùºtïQ`£c“•>½ií!`O8ÀéÏ­4Èέò†êÝÇÿZ�•àמGëú íÉ•Æ=qÒ˜Á‚®â{eOËøÔaOúÎ Ž=†~”å;ÈãtúñK.y ðrsŒŸ§½4÷IeÏ]ݸöéÒ”�»Ž¤úqÅ,n’/ÈW �ÝñÏ4æpÜß)õïHÝ€pIÏ�óÇé^×à?ùôñŒ¬ãþÚ5ttQEQEQEy×Å!¹ô…ãþ[~ uçÇ»��¯@?J�•$e†G zþ¹ÿvp’p1Èü~¹üiĬg‚G»ŒŠquy`F8Áýi…�^pêÃ�Á8þµ&7È%W¿SI»w2§×§ÿ®¤‰wò’qŒŸéÿꩼ¢p\í#®ÓŽh nÙó0ûبÌìÍ´`cèqíQ‡Á;ÏçœþçùÐXù€ä`à`úô€a›$=³êipJôæèÏäÏó¥!›™ô§`.ÀäñÅwÞެ uô©äõÀùmª0IÎ:çÍ þ&~›Žç¸ÿ=žŽDJàŸb?Ò•2ïžGŒ“ÏÔUp ÉÈ'–?ÏZUlä�·'ø¿­,@aÀ‚A©bM¬UPcóëǽ)GÏROB8ã«�£iÁÛÏ'?ç­*ºÅ 1ÉàƒÏéH­˜w´˜n„‚N=‡ëÍ;rQÉ`@õ>¸•5rW}Ã1Œã…5A”îÈãÿ•>eÉ T|Ä‚qP¸R‹‘¹rG^:þ´ÀX`1‘€¿ç¯ùúŒÊÃ+»ƒžNÏÿ®‰ ’ dgŽ)™‡ë‚1ÜJŒ0e ŽH±�ý)Ò9ž7`�éJØ1&$ryuÏz��ƒ�0¹+¸dçרòiÇ$’Jð@ëQ¼c2€¹,GPp~”d(~‡8äŸÓ­#ß+0qß¿CK¿÷™p§9'Ú‘Û6�ÜgœÇëþM<ÎÈFFAõã­J7!�Jç¹ãÿ¯µ;Ëù²�‘úÿŸþ½BÊ௘˜<}΋øú…D@  Àôè?ÏøR'åS“óÃþ´€ª·ËÇ=3Éæœàç$Œ94܆$î_~´Ò2ı'o p?ÿ_ñå…ˆ$ä8ÏSúSÁPv€ äžÏ­ 3–ò·g‘‚8öë_CQEQEQ_8±`2Ì8äœÿŸ|âŒõÜhìGN?�+rq·“‘ƒÜP?v¡X®W’q××�©ýj7,@;�ãp p1Û4dìÜ¥°T7ž?:OàÎTŽ�8"�"”ùñƒÜ‚;R³0Põ�  é÷›œzœ{ôôïR)%ˆÁéøSƒ0V#ªç§ùÅ!#õÆz÷¦.öNp~\g€=?úõ?˜7áðA<â‘rPžäu?^´�cÚàƒÈ'¯oÿ],gÉ‘‰ë“úÓYCJ9÷Æ9'×”ýÛ 9cŽNp¶ÂÙ`ØÉ­)<|Û ð{T�Ô°ˆ® s�¾�M]`Ì à£v'ŒñÞš¹ÃoW§'ŸóþrÑ©q3ß�ñæ�9\` £³uô¬‘ÆGÈNñÉü껨'-Ç}•2N‘•M `qŒG4i$L̈K ß0ÏQ×ÇÏîƒrär@ïÿë¨Ùš0ˆÜç‚p3»ŸÇ­=7'$)Î9ö¤\$¬Š¡@·p3žßËô÷¡€å•s�ÎSßùS•ÊN3‚G\ÿœÐín§�¤sžhÞûC¶F#×üŠi™÷¨9ÇPšÌ0C|Ä»8È?ãÒ�–;rÊHêG<}?\M¼àöëÇùíK‚£îqÉ9=rOùíøSÙ29'œ‘Ó …,Q #8ÆkÕþgþ™òsþ–ÜÿÀ»Z(¢Š(¢Š(¢ŠÍñáÕpp~Ç6?ïƒ^Ä‚7ƒ�€zõÿëJ¬[²ß†9'µK| `� ãòÿ>Ôì…ÀùF8é“è*cÃ’¥JòÆ)Ïщc†9<öõ¤rUwÔü¹‡ùí@‘HÀ Î:úÿú¨g~ï=ý@ýªmÜùûûö¢6Þ1‚HçŽÆ”¿ñeIàg©'¦*T�Û´^FF1V°Y **:þt×$@ûŽ8ëý?çQ³ôm¤�êz_Ë4D˜¦{õõ?Óô¤t� F###9ìçðªï·nÐ2:àúSdb“y�q‘×°4<#gÊ‹æÁ#8ç·éL�f\Fv’¹ý�éL/‡U*Æ@±�ëNŒ1-’py¿Z X(iÆ?çšB&1òœ`ƒ×ßõ§,„6…ÈÀǯ¿áŽÔ1ƒ´“Ž€Ú�Ìb}8#¿ÿ®™·!²¿6s€séƒL,¬2¤d1Á8;OëŸÆ‚Ç9l 69Éþ‡Š~7ç89õïšU`lÀŸëùÓŠ˸�½ Çæ€Ä!*¤g¹üq^Õà<ÿ§ç¯ï:ÿ×F®ŽŠ(¢Š(¢Š(¯:ø¤vɤ7p&ÿÚuçÁã¸uè8ééôèj<’ý8mØÿ¯Ó�¯Z{) p[q®p@¡#–XòG9úÿžÔâTd‘øm¡¶Œ�ÅOÛßüö©R'ÀÜç äg®)墋“—nÇúÓMÆÒ@ÂŒã¯Qþ4ÒàýÓ¸äÉÈæ˜Xäî Ør:Ò,1“�œ`PX•Ï*à(íšoš¦U\©lñ–äõø?­86QKƒî{~½iêF8Ú?�!ÄŽ6P1À”(aó„éÀ^Þ€?Ξ­¸«Žûzgüâ�d vœäääóHιIb§p=jO�³Ù´uéÇùÇò¤RŸ@2ëK¿•*Á�ì}1úõ¦•W Œ@$/<àTŠ˜pUBœŒqÛÚ¤�Õïp~nNG§Z|Hw3…˜ÈÇùâœò `3Ž™§&Ñ�›$õc“O$œ�Ÿ”4Åe É’p8ÁÍ<¡Oq‚qÅ4¸Ã€ð¹‘úÿžôÅ;8`¸Ç¾~ŸJ%ÜT2€qósÇÿëÔM"É… ‘ùŸþµ2DÜàíÝŸÇÅD±¤r+sÆqô§zT“vÞQAçéH‡p%Õ ÆqŒæœ]¡9Àÿ })¢L³÷è3�z7bU”�÷HíI�ûI';pWœ~Tç©v?çÖš”É–#ëÀ§7Ï»a\“ŒcþºfH%q•Àñš�v $¨byä{?Öœ¬Kd;:“�ÏCýzRáNY±òr0§�Ò“‚Ä.?¼p0§>µ/™Œ±Ê‘É'>”ï´àx{Öž&ä ¬;Ó&•“Ûçüõ¨Š21<îÆ>n�šY@=ø-ßó¦² BÈ81B»€}W“ÉÅ0ËÃôúuíNNÒ¤.ùçÐP¡Èå¹t¯¡¨¢Š(¢Š(¯››åÈIà‘�§òúÒ²…l’?º§ùÿ•\1õäžOùþ”Å,vö|ÙëKŽNN}zÔ(Bî]¸*ÜÉŒž~´õáz2ã 'ž¾´ß”œ9=½zÿŸÊ•w“œ|Ùêǧù月Cmg#v}8>œ�.p€Œ|ý?Zj’c ”�ƒŸóÅ ’›ƒœú}?Æ‘¶8ÀÃ9ÃLãÛ‚=éѤd·¼}ÏVù@ù@é�ÓùT Q[ïK`ûz~u €Œ›žßJQò#!|íÍBHʰQ�sÉ烜þT¡\È Q‚Nîy¥À ±ÿëÿ F`©ò’Kp{�Ö•>Vä¿N‡üûQ#�$à6;óÿë¥Ü¹\Œw÷¦‰7FH^qÀÏCøv¥1�€Ü àô÷ç½(}£`Îî7wýiÛl·$íõ¤Êއ•çŸóúÓw7 ã‚0äo©§ ð?“Œ�”>ÐÙÏÞØWŒý=º×®ü0ðÕǦ7ýĮ֊(¢Š(¢Š(¢³|Cÿ"Ö«ÆÐæãþkÀqÊ¢¶ÜœÃ#ŸÒ—åW^¹Î2OÊ‚BÁÉ_^sþ�lœ.={Ò�^:güÿJ…J”äeN:ãñg ÆÑœ€8ÚOlzÓG˸�S…=sÿ×ÏôõÅ €ôÉä‘þ}iËT£>Açýxü?:Wqåäü½sžxü?ùÑ–(TäsœŽ¿§áH­”9çÉàÒ3¹l9ù‡Cë�Ïð§ª&× Î:óŸÇé�¥9 ÉÈ8'ã‘ôü©„ƒ–\ƒ�¤àŸ§õ©¶;Œg$r}?É¥¬Ä³|øçñéý:ƒ.›Ž¼�òi±ä†,y°¿ýzž'Ñü!±È÷¥ëñ'!†¦ý^ýªÐv�Nî1Îj&�î rܫӮ{~TˆìP°�»Áïýi¨á؆á%¹ãµM#oE%ŽN:ñЬÁÙ×~sŽçÓò¨Iã8-Â÷üþf—?» ¹8ÀÏzˆYP:g¡ä<±%@Èù›¾¯Zq.l×Óñüé€TŸ›œõýiÑ�­‚_ñ?úüÓY—€§o=@ÎG?QùÒ³(©ÈÇLŽÏOƂᓂFO {‘HѲ…\Œã+ÛŸaý)ûñòG‘ƒŒ‘ßü÷¥(½›8¿Ÿùô4Ò@ÈùNÏùÅ!vc†<ùqþ{R�Ê8ídõ¦NJð— ž•íþð^ŸÆ?ÖèÆ®ŽŠ(¢Š(¢Š(¯;ø¤ m'L:¹^vì�•ùO;Iàþ}i™WqŽ[$äŽ8ïOÜ#làt'¿ÿ�!W-�˜ãƒœqÎýU+$@+HG wSÚ�1CåQH�Byþ”Ç”¸'• fÁ‚çHà21䯠ç¡ôü)UÃn;¸ÉŽ?Ïù脱ùù\chúõãšPB¦ ¨ÉÀ^Äg×èÀ †-ÁŸåïOcµÉ Çð@iÁ˜×ƒÜƒŠNädtÀäð¦…]ªcƒ�Oþ·oóÝ­´8-œ¯¯·n:õ¥z•ÉÃhÇëÚ�¨ÁÚùÝÀaÛëþ4/]¹ã¿çÚš2§yá±�¯JPêP“8ç©ïžôH,% àœgÿ×HÌÄ£��NìÂ…spÇß�ÀÎ¥ó7ì@è() ¸À#¹à?ÃüñLÚÈ6…È÷ã4IËãÏ®úçš0 ƒØŒŽNqþM àgæÊƒž=)�w?½^89Œ1¯¢¨¢Š(¢Š(¯›Ø"˜m=qÓáA¨8 ËБÐcüÿ‘I¸î Ç9ÇAŽŸ�.Ò$àÀà`rq‘´dœ’}ÿ—4�—$´a‰Gþ•X¨Ü>¿çüñÒ�îຎrF6þÿÆ•ˆ�æÀ`I8ÇÖ�¼ïû¤z㚥‡SƒžO#¿õ¢"rä‘‚>Qùÿõ©êÃæÎ:ýN;ÿž´�Á98 ¬3ž;ã4 ívÏÝ$ñéÒ“Îe È9·¿J@Á‚Ÿ˜ûQ¼.ÕV<œ‚zãÅ>2dÏ:gŒ{ñ¤ Fæ©ÁSì?ÏéR�ƒ»>À÷ÆiÁ±–e=uÿ´äsæ¶8ã¯5jUÝ*79 �{Žõ1œ�­ÔSÛó5°Œ·Þíò¯óÿ>”!W 7d†íߨ9ÿ=E&2 ›Ž7víß2¬§,QA�ô¦mØ$ú~ »”0+×ßéQÈ�ŽI#n1Œô=§zgU,éýiÙàòH¿�“�¹ìGåõÿ>”ÊFà28 {~©„è201ŽüqNœ’¤g ñ�Êš¥Tw8dž}(‹rÆä¶X�ßNON”õ ¡ÚAçhý}?ψêå_hÎH Ž™¿*öŽ[>‡®'ŠcNR œr£©öâé�͸®;sŽ}¨ Pª®ï”cëO\28ÀϨ+ ~ör1ƒž??ñ©Ppã'׊z¶Ö;”‘¸ ``œ~´‘±ÆÍÀ£rÓüje',ì¸p¸„S¤Îà™Êc�ê~¿LÕw“fS/Ëc�¾ÿ§ëNB…Tðp:„`ÿWÖ‘T¨VÜIn9úTʲœ±UŸÐÔAåÎ3·’=ýU îv 韧åQ¼{‹Ø,Ac§éÍ"œÊ~Rp0~”¹cvwr:÷¦�!S=;äóýJ>f%÷Œ�½ˆÿëÒ�™ƒ núà÷¦‰çø‡‚?Ïó¢"Y² I+ÎAœ~tðø$eTŒ|ØÆ;ñíÿפ?}€n¼�ÜãüæŒdËgq=xïúSÑFYƒ8Î8ÉÀü;Ro;Ÿ?w“þx‌ 8'Œ€?ÀŠ<Ì’£¨GOóŠöÏdø#NÝ×÷Ÿú1«¥¢Š(¢Š(¢Š+Î~* ì A´éâdéÓ¡Ï^i 0Æ3×$Œqþy©�‚¬6®áøsý)ñËÛi88çÓ¥8“€ÝGnâ”IEfàž»â‘P¹[Œð:æ”u`¬®N;?ýT+‰ƒ�}x—ÿ¯Ö¥yyÞv�Ï4Ã#lÜYHÈ8úÿ*c1 ¥ˆ ä|¤ðÏù↌Nݤrê­*éç¿çš…܉ÀbxÆy¤L«V|w$dvþ”®ÁÉ9#®½õ\ g¨½ Ųƒ�××üóQÈ;¸äuúZtr |¸ œg“ŽOòÿ=i��K’p½@õâžHb'è;ÿži†>\Ç#ià÷¤–%OÊ7uÝLÄ~a$”äw+ŒŒ�CŠG9EƶNÏZ�X8ÝïÞ˜B€~ï9ÚpGùÏéOVÈÈ,Açîþ#ùÓŽz‚rr5I•°¸ÿ=iIÚáƒ&8=) ó„¾_niþh@Ä�¸=ÈàúûTŠÎ9fç§ò¨¼ØÐ.æ<)÷=…/É/‚Hg¥;…ÎQ²N~îkèj(¢Š(¢Š+æñ•ƒ“ž¹ÿ>ÔÐãåÜÙ<ç¹´Õ*8ô=};Ów|ŰIoº1“ÿÖ§mô9< �åÿê¦ÜØØ¿(Ï'$ØñéùÒ1 ´”ËqÆpsþ@¤RƒÃpxàÿ_J@å�'¦9>¿ÐÓ·F1’r9ÀÇùþtÎLÌwdó€8Àã¯8ê)ÿuB“Ô`îäÓ 3ž`Áúcóý)Êv�ýO<†§éÕùàÒ˜0±©PX/Lu?þª�±vC�ž2z`ãÓüõö ;:ïf qøÿZtoå À'�©`1ùÔ�¶©Úp§ž™ÿ= :3¶E*A-Ž:ãñ«W'qm»qœöàf y%gE$îù‰ëþx­0«,¬pÄœp[¨Çó£i#c“Áàúþ¸©³�¡AääçŠU•¤*AÚ¤œŽâ¢˜(!‹îlƒøT[„‹#oaÀ2ããÖ¢,X…ÞH9Çò§HêxUÆ¡úšc±\àã‚WŒö¦‚À0#¨QÈíøúѰ"ŽÏ…çœ{QŸ�Y‰8¯çB/°†%‡\ýÐ?zUså’BðsíŠW'æ8ÀoNßç­#6Õݸç u©îà.S£_j}¤�~æ“*$ÉÃdgÈ÷ü1þsJ«wäóŽy 30!°XÜtèù}ù¦™v}ã�œ*±# IÎ?…?{42¨n�Ï¿jars»ã<çüþ]*ND�A!@û ~¿Ni„#æÚädtȪEœN�C–)8ÈÈÿ&’"¢ €^Ÿxç°êy= M�~P¹ÈìO­Z�²ç‚ÊTr>ŸÎ«cæO“õýF=M7ÎB[$í�ƒÀà~])ìÃzœƒþ§0Ã’Àzc8Èã?ÖšòùPíc–Î8ã'¡ü) ¶ó‚2;µ˜1ùÿˆ ýGçÏó¦Î~R[�#‘ù~”‡ySÆG¦î£>´’ÙrïÀø ¶åù>f^9þµq)ÚÄüÌ=N23úPÛ¾èQ�Üe²ýtåmìß6 àg¿®?ÏzTp§€Aǯùþt.ÜãqàŒ�Ïœõë@fÉànÈà ç�óùÓƒ‡‘B¿<žüñNáHP0Ge^‡ëøŸÎ•œgiÜðOáC©T�Øà�qßñ£…ïÅzßÂá� \âñ�>¿"WmEQEQEQYž#Ýÿ¾­´á¾Å6¾Ã^vù‹Î:’@?€ü)á¼e‰+“Ûù{R–ù@Ø1Œ‘Û­5•‰ÆGÞ'?çüšC‚À®Òs�Äÿ/ÈSðw �´ç=j.€¦÷¸9ãçó¤S…Èä·p;P¸o•ŽGLzsJA,£<wnäÿŸñ¤2y|2x¡Î)’>È÷3�ª0{ñïJJeqýÓÇoÊœì®�´(uÈüÈ4�óŸ›”àóÏÿ[ñ¦ÄXå€*XƒŒŽ=Ïøt§îØY¹;@àž¾´Æp¯�2Ç~xýjA¹±µø´Ödu9à7ó÷¨ÎâIÊ=HûsøSUBœm (Æì‘ÓßüŠ{ Ƹ¸ÝÆ{ÓW*Ä«¶23ü^œñÓ�;j™Q× nýé `Áq€z3žÃüñʹ!¯/Û'¿¹¥2Œ mžÿŸæ:Òa�'vHO´TÚ¸9Ázõ¿•< ÈHÏZjÈ¢-ê¼ãîãÛ½#ýæïN ?úÜR®C0ÆãŸ”àßþºî‚$ã8ôõ�»ù<ƒü½ªGu9$å@Èç¯^•qó$ÿŸÆ—r»�Êq÷ÈãØ~U&IVÁnH�N3ùTðÅ—2>ŠjcÊáz{ò*8ÀÚ6±n9Éëøÿ…9³“ýàN9À/þµJ¥b2ÞåyÏl¦}ù©T*åÏËþÉ9ÇùÅ3$€g©=E<…uãï/G…G!Œug‚zà ‰ŽÖ'¯`AϤ‘z.ÀéB €0>¹Ï?ŸåNš1ò°$0à{û~Ÿ§5 ÜI ‘œàgéQà$¸ÂîÏ$u†Eú†Îê)ÈFÐÙ'õ¡�Cƒ9�9¨£%dpÝO'Ÿä÷©T1Vãk|¬yϧëN*ª�•ùFsÐÒ#nT-�åA'n9üé ��NO׿ãŠcaNœ“Àãž:ÿJ�•p8ô5QEQEópåˆÛç4r}['¡íƒþ* •˜ñלÿõ鄬r1d#scØû“øS°-¿<‚Ä`õ¦*&2ÝÁç�1Cçb•;½:ŸóŠŽF#?7B0K`c¯\ŸÖ—ƒ· ð0sŒÿž´Ž(ÊŒ)ʃÏ#Ò�Ê\Í»Ïðü?Îipy«sžGùÏ4Ýí¸mPsÎIÇùã4’pÊKz|Àä�þµ$nÎ ’ ƒÔçñJs²ùŠIÏ9?çµ+œ‚ ’Ny¤|à`ž¿oÔÐ¹Ï  ãüûÓË.â1¸`ñŽZh\6s’9ËœÿN)ÛÛ*F6‘ß�þµK“hÜñè}}¿¥[º%]pÛ{ž¢gÊn#`Œž™ÿ �+Ѐ9÷9(�nVÊ8ÉÉÿõS“·sîlŒçŒwÿ?JYw`€Äçúc¯ùõ© ¨eP9ê8ôþµ]² 1;ÝN00 Ç¥ v%²e\sÅFê¡7Ž¥Goð¥R ÙŒØúÒ.Pªç‚yqMf&@æÈ8Ç×ÒœÒî9]¹b8ë�þ?ãJÚv‚œàóŒ@£'hb3·ûÄ~<þt¬.v’A$sÏøÓ™Jð6©Ü�óøTŽw’©Á àã=j» ¸ù™¹À c#—ZhrÊä…µG'1†Vê*zý=éì@ÈÁÉ$ØéMRPªgŒëüé¡ñ), ƒ‘Ïÿª�¿qml“�§?J_à ™8éƒÏ§ Œ«€xÉëŠ6€…ù¸zg�ÆœW�€(�¸íÖ‘Xy’ŽÞëß'?¥8Œà?‹“ïúv§l sžsÓ<H«µ€œ`s×±>ôŒY·vŽƒçéþJ÷œø'O9'ýo'þº5t”QEQEQEy×ÅBGöIϾÏ8ÿžuçù”‘ŽHÇåJWg �—Ž{ޏÏùéù)*Üž¸ÏýJŒ;˜°BŒäŒžOzqN\ €Oû»yþ]ÿ�8F¥””Áí$g#¿ZG*Wp`?©¤ œäääÑ´í`W±Ç°Í#áx<‚3Œuõúúþt’HÃ#¸C ûõÿ=(1\@àc±i_€X©#?twã·ùÿ�°wuàzS Þ~_˜t%qQÆÃÌ $žÇ'žiàpYOQÁÇoË¥86d O¹Î?úÔÖÆþQÈ ÿ/ÄX÷™»#¯þT÷!ÈÈ$}Ó�óÍ*ó�Àãúò}zÿž(`Ãå9 xtçüãŽ:íü~µ'ÊÝʲžH©£�Î3ÐoóøqÚ¢iܦr0¿7?¯åQ&òà)ê _¥K#•Ï 76y=qÿê¥RÀì^¤ämãäçÍ0%dÚpz–ÿçØÓKFA {;c#9ïúqJ˜*mÙ÷æ‚yÊí#‚xúþ_­7p—ÆH$~}6FÜÅ:2sëRÎvízçÿ­HqžOSžÎ* qùNã‚G\ñþµÉ;@ÀÎFxî?JýñƒƒóR£“†ÆOl:þ­¼ýÞ['‘Ü�ÿ®†‘XgÀ=:ê*UØ™9ƒÎìž”í Èp»ƒ½ÿÏ4ÒÃ?6Ýì>¹¾ô�Ùr�›9^øîϵ(ÆÒvœžäœŸjP«œ)Œp u¤DØÛó(#›±€>´˜Q¸Èè{ñÓ4¤�§q`޽:þ”Œƒ 6’¹ëœçëMRZBAr3þqÒ„*¬GÍ‘ÎOÓµ ¤†Æ1÷FH\{u'œSÃÎ1ô¥Ï÷ÿ>”âÀÉó0É9úš7œ–Æ~éãþ})ç†ÞR2{ÿŸñ©c?½B[å'åÈè~¿¥Z»)¸n�¼ÀU}ØÂ±ÏolŽ?úÿ¥ /s’2aøÕmòã“·$à3�óüêwœ³rGRϵEÎUBà`tî?•ZO�äpOÀþï_Ö�†’M œzô9ô¤pwÎ8>ùæ�ín8Oñ¨ÎYHÜ6üÀó×òë@Bw*I?^¸£“¸I€À>¼zŸ­#2ÝÎÇ~;ŸçN*ÅASÁÉÆ3ŸóƒN §p~I=3ÐN” : °fÁ {r)6þ�“·“Ó°ü)ø;O÷vœ}?jz‚›AîsÀ¤€9R8PT!Pëè?�50Þ^ü‚N@ÅzïÂåÛ᫯{Ö=sü ]½QEQEQEfø„ãÃ:©ô³›ÿ@5óüƒãž>˜Çô¥p›smã�lŸÒ†ùøÈèÞԸÑü$ žý?*…ˆËmÃäçðqÿÖÿÿ•=]s÷ŽÒ8ìj]±†p3Î8§JU`XnÆñŒ{ ÿõ‡åM2þïpù�¡àT(dÊl»�Z’@ÊÄ|Ç¿óƒQ–rClÉP{c8âž «cx=I!O?­ VyIÝÀéÛëý*2¤l�uÆiX‚Äžr{~gŸÀTA‹"“µ— ´ƒ’§åB!dO¹ç'½É&L 3õÿ?ý~hgA&;†ONÞ¾ãüö§ía·#Ž:÷õüh…pܶrp{ÿN¿ÊŒ #Eå²3óc#¸þ�iK)¤°xäýôý¯‚“Çãþx§��…#q�ʆ#¡q=¤`¨pÀùJ6¶W<ä·¾+Û|»|§úëÿ£ºZ(¢Š(¢Š(¢¼ãâ«m“Fùsþ»œ��õuç2£ÈpÙRHà~×ÿ¯øÓÜ`ïÉ%{cüÿŸÆ™@A,8èÆ?ÎiyHËdð3¹½?ÏùíMqÚ_�#õúþT˜-ÌÙ#?ÈÓ‹2>ÞnJ篽!$ƒ�åþ{TƒOº8ÏOóÍDwªª0qœAù²ç4€Œ}Ò™9©õ9ëÒ— á‚áOáüÿò)Ky¬G#}ß~Ÿé@ 1<€AoÃüñJ¥¶’øéÏ=ù‰·æe!·�‚=)ÁöýæQŒ ǰ¥R¨ËÛ$õ=zð)±å[�ÍžŸ_ò)[*„m ‹Ésž¤ñAmΌŃt'Ûð¦¦2:‚ HÇçíô©#nÀ#€ÃžŸ­Gç¶Ü��FsŸ—¹ü}è*@á†9ú ÷4ñ±€ëœg¹ÿ&šÌFo•IÇ=Oùu¥È�2�Ó®{ÔªJàw>ŸçÚ„¼ ´|‹žÿ•5r«�¿»ÇÍŸ×ÛÒœ>P˜+�¹ç#Ž>”ŒK„€và{/J‰�Î0Á[3…?çC�®ËÇò4òåfÔƒØãßëP¨Ü¹ß…äc·ÓüÿZx™ÏNùH9Èã4üîPGFÃ0*ŒÈ<õàuç§ùíQ11¹±`§Fy¤Rç$ŽÇôÇ×ò¦ÊíPJŸ®sÏmŒ3ë‘ÇáRLmR¹< õÈÅ1zl�lóß½‚˜R¡'¹<:Q×*ßCØóü©¨8ÜT ðOëùö¡D„·œ}ây§J]ùã#?�*± ò’yg¥+HVQ€zuúP¬Ö9<㑌 õ©mö—S�œà�ßúªíá;“¯éÛ­VÁgç¿/qþzÐ#îNIïÐt¨·,lF”óÀÈõÿ&Œ¿ FÑ»�|g¯àçHÜ‚$/8î}?Ͻ˜¹Àéß©Ïô¤FË2°d#º÷Ï\žô¯°¹E8S…'?�ýj?0…9ü:Ÿòh2—;p[‚A~¿CM+Á 7tõ´?7)Æy E ’Çpìq� =\ìÀ8=<çÞ’1U˃´ãsõà:”ÞHúŸÆ‘•ÕB«61Ï~ýùþ´ò«ç)nHî=}©y^@É9%‰§°ùLaHÁ9Ⓠê_vpì~œ2sÔuãã¸?ZõÏ…¥O†.6ôû[qéò%vôQEQEQE™â?ù5l®áö)¸õù x*X¹pB÷ÏÝM SÉ•#vsÓ½!p ‡=xç×üþ4¼•ù±œ�ÿ]”‚�¼“M A AÎ=ùÅ5‡È ‡€{d}? Œ;0 �»8çŒöÿ?Ê—%G †Àn?ZBÌK�âŒôÿ?Òš$Àtàqßÿ­I¼60¶2piÏ"1Ø„#pÄG9ÿ?Ê�ÈFì0éùz÷¡�†E0xõöçÜbŒprÇå$÷þTˆ;—åSŸëÍ>Ñž[4¬®2ãpäóŠppäg'ô¦™uS‚08ä·þ”ç`’7õè 6€/œžÞõ>íÄäŽNXpiÁHqíí@�h$ðÉcÀÔHf<9^œçéÓ·^Ô|Çnð†N=3ÿë ãvT^(bAÜ0è:óŠD*üȰ@9Èÿ'ô¤“r«ÝœÜ�ÿ֤߂0:vô¤Þd<©ãœ�1ž{{Sv©*G¨¿*V8uÈÇÝi ù†i勯Fí¤÷SÛ½cÜŸ:î àž è8ö©U³€9鎧Z1@o— ò23ùÿ�àI»ø±ÁÿõRŽ>\|¸å³×&žÀîFHÏ<�OóéMû˸ßê{ñéý(}…7È#޽Çá^ßà§�ÛÍù«¤¢Š(¢Š(¢Š+Î>*·Ï¤ ÆJÏŒŸúç^uÇ–ÎNçéüÿÆ‚XG•'Ž8Ò›„9R¿&zv”ª¤ý×ÜïÈÇáÖ”òNìŒ}i�K9ñ�ž;R˜Á9Æu#ð¤ ÉÆ$LÐTAR9Àã8⓯ÞÛÀ8¯óøÒmûìà 1žõþt¤ä°�`3œ Vù‹’88lëú~Tå �»°£<Ÿñ?�YKã.sœc§cñî*UÀÀÆu$äû}iL‡®W#oôý*Hå(6�Iêxÿ>Ÿýz›!†2yç8öÿ?ýzˆP¢ôÏaüª ß9™r{ŸóÚ“ Œ’Äúÿ…,aJ€xäp?Ç¥K—Ïc†9öíúž¨ìÀÏ<;Ÿ¯øÿ�.î*r1ÛÒ›¹ü§#ý“þ­<±þ!‘‘Ÿo¥FvðNÓ‚FWõ¨Âª•<çÀãó¥$�ªCzó‘ý MÏ–À“órIÿ?çð•J éÆ:ŠŒË¹qƒƒÓüÿúê%wîy>�:sÚ˜A Ïq�·Ž}…DØMϰn{ç×ëNUÜå@#¾88éÿ×üê< ”°(8aÃg?Ê”ä0íÏn§Á’>`AÎ2Ià ~EÚjœsLR@ 6‡nÄñþx4î 7QŽ1�o×ô4¬øtœôÆ}¥3ÊP‚·Nž¼œ}úÔý©ìT ¹ 0ú})ÈØ\¯9ÎyëȨÔ(rFÕf9p§ðþƒÓ¥*•W í^çŽßãN#1ôàcåÏSõÿõÒ*|Á€ÈaŽþ£ÿ¯NTUnyçØtëHÈÙ7°8ïJ6#‚¹daœ–È9çüiP|¥q€¼ô=þ�sKظb^oòhLªýÕçžz×ÑtQEQEWÍÀe@c�§€i¼�ÂãæõãùR&@Ø ƒÎy9Èút£ T”!�lœs�ÇŠû˜mPPÞ;f€ î�lƒÉôô¨ÝÈ�)Œœõé�þ¿ÿ\{Ò"‡!�áÎ àPÊ7n �Ü}×óüê7 Œ·bP{ZhÃ|ѲœpXzq�Z“� “Œ£üi¡‚峸ƒž;œ~´)]ìTƒž@ÇOÃüóM^yByÈïþqNo(ÝÏAß9éùš@êÄ’@à’9<ôïN C…9ÜÝ÷=³Ö‘dC.J¹Aàþ ô§†òÜdã=¿Ïùæ�zŸ”œÝO?Ò–?—8$î qøýz~Ub"Æ1Ôcóbÿa*§2÷ïÓóªû°ì¡‡NIÉÇô¦;‘�äã 9­1r_r’¬yë’ÿõ~”æ˜ ˃ŒƒÏÿJimêHS–ÎAãð¦9Yv€nnœ‘øöïOHƒ9Èû¼ t’!R¤ gŽ2x=J„€ÒîR ϹÇN¼v¤fÃ&rrCc zÿ/Öš˜§j@$·'ñö¥]‡<G|çéÖ¤‹vw é�xöÿ=>”‘‚£°È㨧"“Û*@eéÇåB±óB•m£øˆÏ4ðsWÓÿçü(ùäWp#€IÇlõý)P‚¥ÀRN9ãóüi¿–CŒ�Ýzñüéʬ©ƒó8ÀÇ#žý~´‹’Ä‘�álã=Ïáÿ×Ízï§Ã%NsxÜç9ù»Š(¢Š(¢Š(¢ŠÌñφ5` ³›Ÿø¯ 2� A<úÿŸjc�¼`ðÇ¿zÒ€ à.ÑŽ=N1úç4‡!7zç=Fyý)‹Ÿ»´÷#š*¥r®Ë€ß_sQ³¶æP„Ÿöºg¯ãÿÖúPª¤ï)’;–éŸÊšWG%›'<ŸOʘåO,ÄŽ¤¯P{Óv““ ÝÜ‚yç�HNH䜑ʃ×ßÚ›**g ÎîØÿëSXFU¹îyçùt¥\¡!NÞxàÿ’iÁ¶œ¢|þÃÓ�þµG¸NñŒª¼Ÿ_ä*]ûYËp9Žü}zt¤Ý€  ßÝÉì}i|Ááž ñƒùàž( “ŒqØ€=ÿZ•…Lž¹$ÏšQ³rÁådñÔ~©7y‡, žœÿŸð¥BòøëÇ9ÉïøR3üÇ{aÈ_Æ™¼ÆY”“·®;÷ÿ?Z{Ë‚ NGÇQÇõ¦–Âåœ`žpi¤t ¸œöÿõ*’8”±ÎcîhiU‚ä/\Œs�óš�@Wó䓞¾ô™ ¸¦zgv;{~¥&2ITPåŽ?_Óš¦ÐÀ#¢ãÀè};T‘‚«Ÿâ89=xÿ?ZOàÔ œtýÒ¥Ü†É ’¤vÏéH¬NýÈÀò’:Ô‡8ù{ãŸóšBY£/�¥N~c�ÿê |±œ/?^ØÆåAó@ÝÀäsþÏÑà0hÜÙÇ$Ž?ȤVKòªyàcŸÆ½¿áþ?áÓöôýï|ÿËW®–Š(¢Š(¢Š(¯9ø©×I9ÇË?nÿ»¯7rU=@É$�Üv ÿ¬¸#h'�Óð£”îl÷ò}:S³µò_„Œcüÿ�4dnwl“Û߯áëI–é'9\e{Ò”fýáɯù(e,Ž< Ÿþ½"`¼�µU�Nøçþt�Á,›˜ädœt×ð¤fÂI :àÛüõ¡T­!ç8 ׎žÿýaB 9•'ªƒÁÿ?Ö€ÀLOÞ-Œ0:óGšÍÊAäyäsÓ×ÿ×OXÂE´>ÕPÓ�$‰¸ìíÆ3ÏéMf (?xÏ©¥|m XàòW#ŽÝ½)YWøR)¾ón Ž)lVfóœP™‘³‚'�ÿ®ž¤Gòpp1éþýU;4¡€àǯùçò¦ÆÛ@ÞCrzþ?¥Eþ°n!NAÝÛ×éŠlk媅<¾�ÇN(bìÿx0$qŠqqsë¸|Ýzc‹†³œŽ@ãóÿ"“’pX÷<`ôúPð#è½�úÓWä&9ÈÈÈö¥cæPŽ™R?úôä\1bÝ;gŽ”ÔÜçx,2>pùõõüéC)È;Fî çÛ�Ö‡Ú¡F7’zÇ„²F(ìHê~8}Üp>÷¡4ñÎÎNGµ4£ì±ÝÎNƞy(A#ž?�"© Ô†Ï^Ÿ‡ùþ´FîO#×¶OZPâyÎxÁ9¼~ôDe˨'>•ôMQEQEóZîÚ1†Ï°8#Ûõ¥bЬp@°9ü»÷ –/…RJðxô¹S Ý€zò9ýzcñq‚3þE)|Ûzgµ5ű1”äÝ¿úù&œ6�Pmn6ñ“ž¿çÞ¤‡>p#w%N=²9öïW¯ÏsŒ�ÉíÒ©îÉ]øÉwã·ÓHÆåÛž@¦>µRXnû¿ãü©O͹_o#÷ç?• …Ë�Ç+– úð?ÏzkÇ…ÀÃõÿ8§ŽPlÙä~tŠùrpN}Ïù⣠ð®B�¸ p{þ==)FpY¸ gnFæŽ[nASóëÇùÅ+3�àŽã¯jP»ÙXsž§¨?ç'ò¥@X� dœ�½:sN,ã,ÆÓüýz~´¤olàäçÓÜP¡V@76 éœÃÚœX¤Š[# ÏL}zõéÊr à“œŒžhT@Fv·9 uöü¿Zq,ª@߸ƒÆFGùâžr¬ .{zǰG…îrÛ³zç8ÿa1]ÅQEQEQEfx�þE}[œ¡MÏü×Ïêü»r �r~Ÿ¥� àã# <þ•�ì¤a{äuéÒƒ•È\3’;óŠc ±,AÀÀ#ÿ© ä1 ’3ß×9éQº‡}ÇzRÈý)¡óÀbÙäÏáè)Î ’Pœç Å4·p¾aäƒéêi‹€Ë#ç‘Ç<óõ¬ƒkÎw¾”×,Ê—¸‘Œvô¥ßɔ㑑ëÎ3ùPœ³lR=Aÿ&šëpW—À8à÷ôÿ?­$R®çPHQÓ–ãŸóõ§ ı¹?çùÑ´Œ Îqéß4ã–ùq�­"º�ª~îÓü©Ù aÇÔq«�¨@Ø2yëžØÿ?ãV]€PƒšLn*¤z€8ãò¦u��Lä“‘ÇnŸ_­!_›*Û”téG$¶ì;÷êÏãJ»QÅAÇ9Îsü¿§µE’K¡¡�Î@éÏ¿�LW’ÙÞçù~¿­4dƒ“•P@ã¾ÃüóMÇLxȧoåùÒí%~fç¡´8$V Üp:Ó‚•bÊ21Ÿ›œÿœ~´äR1´e@=:c=80Ü' xiAl�y±úÿZX×oʉÁã<çùéNݶV?7<øéžßOo­8•wpþï<ú¨DÃàn�œû~x§å€ ‘žG_CúþT¥Š’X‘Øtã½{_Ãå+àm5IÉLœc'Ìj騢Š(¢Š(¢ŠóŸŠŸ{HÈÈý÷þÓ¯9R1»pT8 žç?þªc®sËnê1ŒŸòiXns"JžçåÇ~;÷ëJß(äñ0ÈÍ65pÛpۀ랢”�à“»üý)„6âÄ)={ŽÔþ óŒž¾•ëÎH# –=ºþT˜ IêOP}½È¡™·Æ}?Ï¿éëI´•HçŽü}GçÍ_jn„‘Î=—Ò•cÀ\u\öœRË‘Áç�Äþ<~”Ó +ƒó0=×Òê²ã‚ʸzþ®TH©`H''§ùâ•YÖ^Cä¯}êq E']ùëž íý?*RŤLnb2y?¥De IÜ0GvõÇjq�€sŒã¯z]Â<ó†=›§ô&K»%¸?‘¥a™LœöéAsÉ`îxó×úTK/™3º‘°`Gן֖G ´d`9ÿëÿžõ|Ç+‘ž9ãgÿ­Ú�d#x ðxöê?1Qà¤�‹g9Û="iÑ�Ê[b0Oüèc´‘Ê€£¢áqíI½cÀÚª§©´]¡Æ9<Œõ>߇é@,Ì@9†G§ùâœî–8`qÏçME;FT1Ð{Òí:瓞r=)îàO_Ç­+°`y?(ÎËf”ŽsÇù›òÈ'wCÆ2?�)$�ÀesÀ‡çN)Þ 9nG_ñëD‘äm'¶ãŸÂ•[)@þîq‘êiÅX$Ÿâ�îE4ãwÍ’Kv#‘þà6ƒÀè r"º Ûœ�áÂç�¾�¢Š(¢Š(¢¾l$žž ƒÁ?çüiªFå¹ÏZz±c“Î:qÇjc(*NÐ °ãŽ¥à¤žG\çòüj!‚ȃnçí�ÒœN���Îqþ}êå‰QÉÎÞ^¿ËŸÊ•Ú ¯QÉ'¡<Ò2í� òž€àcŸëþ?…/H—�“ÔãIìi®1�…‰Àô¯ù4€2+ $c9'šAÜJ9�ΔôÎ@ÏŠaÎ bsÏÏÓ·ùéNPNÖl0ÀïJîÈý1Îp§Ö›“¸ñ‚I#Ž�¿Z#çù²IbM ÜÜ À޹éÖœ„ àí'ñçùÕ¨Y¼õuð>•jüd§8ãü*“ãœà‚1�ý0È1‚¤3žçH2màtÍ1Jï!_ó§ää�X€:.?Ï­ ó&HÃï_ÿU.Nï~´Õ�ŽXIÎJX ÑÐHX„~3Îp{ŸACíeØXîÏëé@,�~U ƒÎyééëœÿž’t$dƒœŸO¦i»K(?tc§¿n¿ç¥|Œª>Uê}ÿÖ¤º9Ç8Ï¿¶)Ìœ‚yçÒ‚X9U^ƒ§_qþsB‚¹Î:…©úõühÎX660 pzçùõïS»åôàãägô¦&íÌ=Oðþ¹÷Èâ½wáaφ.~bÀ^> Ç÷»z(¢Š(¢Š(¢ŠÍñü‹:·8ÿC›Ÿø¯ŸIf«�A8àsÆ0ÏjA•NO dç'õ%²Ì¤·#¿°¦0Œ¸È8=)Wo̸ܼã‘�LûòÊàçüšRxÆÃÁêG¿ÿ¨Ôfñ•9sŒs�âý=ºÓÈP ª�¤c9ôíúšc.;q�£·<žÔâ " T qŒp)’)$¬dƒ»žßçÿ­@ ±íàäòÇüõëHë†*űœ�á�;$IÏN1²%¹=rN;AøÒãw*Ä®rAÈÿ8¥Ë!jžpBŒcüÿŸJ`,<20:ãÛëJr¿0È^ÜOçBd¨Pž=é­)Tó<Tžõ |Ôôöÿ"žÃ¦ý¸-»Œñþ4n>6±# (vÜeùsüC#§_qLùƒ0A´c‚OSÓ×éH¦3#chuëŸLr?*sPHÞêp>\?Î?*U#ç8ë··ùÅ#Vò†wx�ßéœÐ# ’p0{nÏZîïlzõíþ9ðFœI'ý`Éÿ®�]-QEQEQ^qñXí:AÆ×qŸxëÍ˨/Ôz޼S†vã #ùÿžÔ›—å]Ç#žùZU+±™vö$úäNÝ*4P»‹œ¨ár ùOPóÅ8®âNá@íëúR0;X•a×hã±~4 Ü£©ÎF1�ÒšX 8ärÝr>¿çÚŽ�¹äg¯OòsQ’#Ü dÇ�?¥8�Û·}0:u=¿úßJ\mFæü:QŒ)9pØÝÔþ\P3Ô7Ì°Í `É…Àl�p3�¯=i«œq߯AõJ€ªœ=ÿÏ4€0Ø022O·ëïNMÁʰ$�o¯½9A'1Üš0»²Xõ”ñ ÎÜ“ŽIõþ´0BèÏåP*r«““œ“œò8Ï~?•=•°ã>ƒÔ⑎õûÙÀ=qõ•6Rœ˜ÁãsR9ýØ#‡“þ4‹´íÚ@ì ÿ¯ÿZ•¶€@ä(àcø¨v‚™lŽÃàŒ…#ºm,Ò@ ’F}}¸ïøS^M |¤g¦×§ùüéXà�ó�‚p3ì>�*E0¨>lç$óôôÖŒ8HÆ ÿõÓ²¥F2íÈÏôŒ_i9F3‘œúÿ…8(Ú-Ð�¸éôÿ=é;†YN:ÿQHѪ äçNO?ãIŸ˜–`ňÎ=z~4ý›ˆ)SÉ÷ÿ^ôg+Oùþtâl…ù”Œß�Çüæ›�°•¶yIÎ?žrò�zýsFz韔®FÿŸñ§`²’pFy8çÿ­MLnË>r=öÿ=éw(]§?1ì2GPxÊ�´7Þ ãœf¾Ž¢Š(¢Š(¢¾n3ð:ü�ÿ^)%HRO¡àÓIùŠ…aòñ�NôÐ1"åFO8cŸÄu¦®6´�œðiI%r íר¡ýi „'–à� ãÓ·ÿ_Ö˜á·wã(BzqéNeܸÇ^0:ÓYr á±Ów÷¦°<° I#‚qøcð¦�a¹Ç\ð1ÇøS‘nàs÷»dÓ ƒ$žzãéÏò òK3Æzr:uü¨dܤ2ƒ‘‚3Áö eG%úu-þyÅ0p¸TêØ<~´õ8fRT“ž¹¦©f9SØŒ}E.W \ ãÎúôøÔó–$“ß·54‰£úqèx«—ü”ã°ïô¬ò2žYôår9~´ÐÇalÛÆþTÅQÉ)°•ž¤ýi\ƒ–8sÎ2{Ðàªíc§-þ4܈NO|úS€†G=:r}þ‚…Ý¿8àž9íǵ9™�¦=AäSr~o•ˆÇ,xÇùÅ.ÿ˜.H�c#ëL`ïÁ=8ºö?þ¿ÒŸ»Œ'iÉÎ>ôªÙL®}ÎzwÏãNVb­Œc ®Nž½ÿ.´¬†Ñ‚1Èažià$¶ ã?€â—,[ pàcü=h7m§  xã¯ø \ä°n1ó�ü©Ï/É»·_ÿWjoÞ¸VÚzqÛô¯]øXðÍÎâ2o§ýsJî(¢Š(¢Š(¢Š+7Ä?ò-j¿õç7þ€kçð3“Ð`ç'§Óñ PŒ? ‘M,Iaµ³×Ž?§4»£…9Ï$güÿ*%[yÍ K$e'=Ȧ Ãn,A63ŒŽ¸ãÿÕM!ËÛÉ'¢çðÍ9”0éùu¦•ÈVÃ@À+ŸÓÖšÉó eŽO>½ÿZa †À½ÎyÅ<*…Ê“œ‘Ç5²zó´àåO>¿SGs�¹Ï sÏ_JV\‚yÆsþÏ¥#aïb9%ºP¸T`~b’7ùI€@Éî?Ï›rX¡^@=0íþ)äawïè)¡ ó9ã;Q´;ª‰ÐÆ8#ÛéR°b[$ ’?_Êœ®\ÀϹÒ3oC•!zc<ŸÆš¤Ä�£w±ÜGòô¦¶ ©9öïÚ•‹/=‡9-œt¥ ddöÀúÓ”%¶ã<ã^:Tܬr_^ç¯Z7d“Ç_¼¿çÒ“,3µ6ÏÒœd�Æî?úôÃû¶èÄ=@éþx© Ü8^:­ü›ŽNîHôÿ8§å™08 ã søPÛ›²”?7¯µ?¦~bp>cƒøÒå÷19ÝœvÿÕBùr7!HÎCzqüÍ*·S’à î`8ÇjW“*0 ç€8úúw¤Ï˜�¬p6žƒŸÿ]{‡€ ÓÁ99—ÿF½t´QEQEQEy¿ÅTÝ.Žrxð;ÿ«¯9À _…;q�óÇz6¨!º ä}qN ¯Ì=úÔÒpÞa ¯\Œt?�½1¢ ƒ¦è{SË�ä•ÉÏ´õvù7cÒ“ýa|à‚0CtÏNýi~e$+¿î÷÷< 𧨠Ûþ¿Îš€NàÜã"”�S~J…À#¦zSdYY�‰°¸èÙ×ÒQEQEWÍäg•$‚8éœÓwÜWžô2^¡ã°éQ…ù�ýÒNqœ‘Çò¡°Ì$'�8Êóþ?ýz@Œ`ü£½3vX ãhûôü)¬Fæbx ×üÿ“H¡O,ëÛÀþݤ©-Ž™OÏ�Ö�‚B¹àöüø¦É?xNwr) ¹ààqÎ ‘JÝ`*:‘’yÇå@Èܼc¾:Š=ˆéüñN6Hl:†£Øï»î•ëÇ<ö<ÿõéT3! À’¸8õôýùÐÙŒ/?ÃÔqORU€òÿ;ôÍ,cïI Ý1þ9©íÆfVöÿJµ© Q“�ÛýÚ¢3·�½ŽF~• UÃãûØ'üý)”ÜÂ0ß.F £ çj÷䟯Oóô¥+•[m$€p:Ž�­/J““€9çõ4Õp댓“üDuÏ·ùéR:e9*:ñýh;ŽÃëŒõïŠGl!Œ Gùô Hâ_å'ëÏ §+ ‚¬‚F7}søÓ² msØŸz@ÛA'펴æ,Ñ°ç‘Æ2¿áK‚X““×8ÁúÒ† ª�¤ã zdãÒž7l‚£§áéÞ”*«üÏóŽ6“ëÞ�æ=Áp ÇÖ�ó—P¼©Ç'»�óëšs)|mr;�¼7~ï*¹=—§ôéH¬%U Ì27OoóÍHëŒ2ƒÁäqBà©ySÐMÀ�NŸoÿ] *c†<ßéJ§Œ 6W{{SŽÝ»F1èj8 ~lt§Ä äá�ôãßò¥°y%�ÝaÐ}}úÔ»ÎNн8ç½HÄ윑Ï`R(•Ë•eöÀéø÷ý;w82/Ï´Œ�Œ�{ž;ÿNiøbC­òœuê}¿ÏZ>\•ÇÜr¾ÏJöïÈ‘¦ý$ÿÑ�]-QEQEQ^oñXáôqƒÿ-»ñÿ,ëÎ îÉ\®àrÝ01Nqˆñ´“‘Èç9ÇJM»Û!y'�§¡ÏéDj<¬(y8¿9=³Éæ”°^£î?ŽAµã8`0‘ú3H¥wnàÎA�¥4£•<ŒzÿJG%[se�ã�8¯õö¥b»Ps��Aõ#ó¦—b0rBûÿ<ÿž(Q�»H*:�sœJRX;C`pq�ÀþtÒÀÆÕˆ9-œ� Á2§©ÆÒN9¥P Ï÷p};þ4ÝꥈÈ �øgúS›;NcØ/\NÔé2ñüÜŒõÉÏà{@ÊÇvâHàå±�¯¿éRF œmÆIϽ4åx+ާüÿœS‰êØ' nñïM“ SŒwè >ÿ�; ¸%‰'�Í(ÚãÎ2@>£Ž)®À¾6± zž´ ¨á¶ª‚@œŸóëR °«·iÀ#üþ�(œ’ (È'' ¾Ñ…Ažr:gñü©ÁÇ�\¨îXãñ¦îUã ·’2O'Þƒ6Àw ©F}})ZL>2Nz§ùüj&*ÅIÚN1œóÓ´¡ÆTœñÉ f“%ØŸáÜ=E=•G Œãœcž¨HTˆŽàùçŠróÓüDœþ?†(åŽNïÄòj6* œ®àNÞ™ä(cßצ]¹$R’n8oóùR,ªrÊAPF2G¯lS†âTp8ÆIäQå.÷r7¡rOùÏZ¬XV'Ÿ”Fùæœ$ÀqŒdàuöþ_� �ìÁyÇ—ò  +u pNëÏJsò£ g¸Ïn�éA]æOá랃Ҟ¬YYP„d‘€?Î)HÁÞpIž21Ïùü)m°àyú{ýi\7˜ËÁÆGøP™Vôs�IïÀ厒0ìCâ¾�¢Š(¢Š(¢¾l 6á´œœŒóÿ×£�ùÀmÝ=§Ö“r00ÍÉ=¸ýhv%�œÎ9þ#L˜fEÃç Üö'¿åÚƒµ•Ž0Nr3Šb�à Ù9?¯åHͳ ·ž€cúSHÚ¹òÀé’OóõïBäo«qÏAïLb@#ïŒm šybÀ€N㟥D­™@�žŒ[ûçùü)ʼnÇË‚:€9?çŠ�q í'¯�»ÛüÒîbªÔ\uÍœ¯ÌI,1óž§éßÿ­B¯Í¸®N샟®(ÔÚÌ‘ÈÆu¥RÀéËGùíB¶Ü•_›ø&› …‚õ$öé�úÕ¸K}¥TäŒqÇ�èjÖ¥ÎÑÎvgþYÄ~ì|ıPr8ÏOJ H<ƒ�súQ¹Š†f�F¸ó ä±Ï§¿ô¡Ã¡]¤zäœSƒyhw3+c¯^Ù#Ò‚7aÂŒñŽÔ3å‰,Á‡ sÿëåbßÂóòãúÒ3²‚ÄÎéß®^}¨%^BªAtùŽ}@ü3ÛÚœ70²È©íOè0Tc¦ä€¾_®yçüóO �nNy>Ô¡¶�›.§×ŸÆœ2£xE$�Ïçþ4á´nùO=úóíOö?7ûßçŒU’@QËuwëé@!I'ªŒåR�µ£ƒ»ŽÇÓŠõï…Ùÿ„fç$ÿÇãõÿq+¶¢Š(¢Š(¢Š(¬ßÿȵªÿלßú¯Ÿ†ÎÞ$žÜÐÌFÐÄóÏçëH2 &nOÌ}zÒ3·™»hÎÔ'4ÐNÕ,¿¼qôížß�#0å{ó×™cI8ÇŽÿ�FÒûã9<~¿þº@ yar@ç×üzP˜ù*Fzöüÿ:fædîÆTƒÇ©ÿ=©Ìħ,v‘žqš�IËÁ @[4æ!¸Æ�þ~µ˜BåO^yÿ84¹r 9…Ç>Ô…9c“ÎIï�Ú•F:ŒÈ=i'îà3`™þE*†Ê“üT‡&P¤îã§<ý?ÀêAÝ€IêsK‚WƒóŒ œgR¹eßœäuïÏ¥¿˜sƒžàR‚Ws£<އ¿óŸí*ØôÏ9ôÿ9¦(]êsƒÈþ€Q&ñÀÎ쇮iÀ„S¹›%½:ŒôýM8}àx÷¯µò2IV$Î0iÊÜüÜdp?Ïô¦Z=Ë�Äxú{zóBmfÌg;ýîN=ý)ɸ»aØ� cvyïÅ=‰ F2xïßñ¤ä}ÿ—#îä€xíéO!`e@ÉôïK¸¨Ã|ÝÆOJ̽y={ôÿ:U.Ðàdþ§Ž£€Øéº“*«×åƒ×¥!mˆí’ã!G\õéØS´à†Ï8ïþM{€sÿN�“ŸõŸú1«¤¢Š(¢Š(¢Š+Íþ+8C£ç™‡?öμé@�¤dç8íH7¸,IUÉd@V2¹Ú}ñÔsÚ“qçîy¦Ê6a€RêG$úö©˜ä”P£øsϱ¨ÎAÝüXÏÞãó¥ÛÉÆ #Ó§�5 l ´óÎwcüõ¨ÕÎîvÈ?ç4e�rçïdô§ò¤¨ |ÙǶ?ÏçQ’Änbsì;zÒeQˆ9À9bŠMä†g/ßÛÚ”g-´±ëž1ÍJX÷ ž2GLŸ­5˜–Áõàÿ^™éC;ŽO\Œç¦G½"+¼za‡~¿ýj�lubØ#‡¡ëÈ¥}ªsŒ÷çúÔG-Êü Ž@ç}>”÷.v�»vzã¯Ò‘H*‰‡Ê>n¸ëÏáNƒ÷y9ôàû~T1EL2ÙãsÖŸ@Éô<C@‰Š�¸'qŽßOÿ])Ú3d‘éMU*1PG\’?!A*­�­�G ÐñŒÿŸð o' ÈqÁÁçòüé@V–!Ôàçõ Æä9Ææ#åãüûRH¸}Ýñ�ƒÀúÿŸþ»#d`Wr@øÏøô¥o™X0ØßïCI õ^ØQúÓT•“i]ÎG$~¾ã�H »$lÉäô=iÊC¤}p3Ó­8¢•äÄ‘Œç½DÙ*X’pA†@=;qJá€*=ýTÕ�·’FÑœõ>Ÿçô©kœ`y?çüš„œ�ÍžLÿŸ_JV|�ó>ðéúPJHv’¬¤Ž£¯­+…L»‘ÈÈÏoÓ§jr±(znã¨È'¥60›[+’•ôüjV!pHöã�óÓõ§.à¸Á'±'·õ¦Êãp\c¯äuýií¨Ü[oãü(�ˆˆ¤°$° ž~½)OÍ$Ÿ)Æ1�jV!à‚s´dwíéõ¤<�¡HãÇÍé�AôÏøŠs*̬Pc�;õè�üÌÃ,Ã…ÝÀéÛüúÓ°¤üʤûœWÑ”QEQEWÍ„0ÁçãÞ•¸Œ¨Û–=:i£Øc–8íïþ}è� ÄvdÎ::>q&å㯧z‰Ûæ-ŒŽ§#€}±ô¥òÊ—Br€Œg>”ÂBäÑ€:ó×úÐTydî>ä þ½©£!‰Á#ŒŸóþÄó€p9àÿꦿ¢ªœ·QéïúÒíÛX ç‚sŸ×ùšEãä$gqÀöýi7·©AÏÌ9Í4–}êN08?Ö—IîòýE!+$ŒÅAÛÏŸä 0¹ëœ÷éNÿohFG8ïQ˜ðÀ¨  têàŸøR ÿ{@9ýV¡ ò+Ç%NzwsPm¥:ýÐxÿ€ÖkïØ6�Èç'�ED¹ÙËmb1“Áü:Ó�Ùòžƒ€)8PT16~÷©#¿×§ÓñVMÜ–áNzÓðàc�Äã¿?…"“¹œzn Г�ÏÓµ*`ÞIç‚)Ì*Êy'Ÿz9PŠ( ðzö§.à0Tt¶3Ú…dtËu>¿Îœ�Ÿ•zž‡=r;úÔl«#´›>VpÄóþx¦±É8lpޏíô¡”lžNxÈ&‘r~ösŽ˜ÿ?ýÅ PÃ8ÎH\žž¿Î£oõˆ«’H�çþ÷R"ÀE$€8íþ�&NÏÝÇ>¿O~) <€\|¹Èôêj2ÆLƒÁßÝHü½3O$†¡"˜HbX®@çä9Ç_ƃ‚½É ާœçÒ”�ªÌHÀ8#��Žô„0r_>Š?þªB‚EP89ÈÁíÿê¤X”©ùA ×pÉôü±þMHç’õÎÞ2j7ù€R¸î<ŒsÈ?…†U³É#ž¼qÍ80áY¹€Héýi1íØ˜ñøõ4ý…ˆËûpG§ZWa´8ê:ÿžqJ¤«1''8ÆzßùÑß,î,¤nS\9}»”«‘ŽHé×üþ”æþá+´�»ë×9ÿ>´á¸Œ6Õ íÛãúRçhÎëÁn}ÿ¥80ÎÖàvsÛëÚ£c�œ)ݸñÈ<ýiè¥wmnFHÀé×úÓ€ �‰´€ óÍ/̧.KdÎ3×¥?hÜ¿&A€FO¿<Ô‡æ\ô' Ž)>ê6gØB’…ŒƒœœãœŽ™zQ·à;¶3¸c“^ßàŸiDZó?ôcWKEQEQEW›üVÞdÑ‚ùïÿ´ëÎQH>Rdî}¿Î)„”ˆ³}æùyõàgéøÒŸ�ض@ÁÝÐ};S˜p@V9ëÏ4ÅÁÈ)úóK̃óêçõ£!J�ÆÀÇéM;Uw1 ·®O úèbK.x,Hö?ç RªÁ˜rA<‚GÃð§ð¹Æ7Iã?JnÒIlqéÐþÒŒÜÊFqŒ­éM+µ³³/޹çüóMQ‡&NIãŽü¼Ó‘~éå²~Ÿ‰4È/Ê’-ž3ê)\ÈT�x9ÿ&š„+NÖîÿ…IlŽã¸Ïÿ ‘ÕO Žݨ€rHr§¡¨Sõ½)“+tÛŽ¹ê*y ÇÉìNõ¡•ˆÏŒã�ßüûÔ�Tăž>nj3*ÚÝpßOñ 0bág~ àõǯOÒ¦“òð~R:ÓN “óo#î“ÏáØS˜œüÜ¿/ùâž2¨Ld‘‚3ØöþU–WK¶ß~3õéé�þµJqÎA—<�óÚ•œõخÂN3ƒþE1ÆwnÉ篷Z©lñ°œ†óޕºŒ·N»G­3j4¼9Ïó /Í·'îÿc|¤ d篷oÖŒ0èTŒç<à~=»Ô‘p»åÆ[œuÏøû}h‘q…\ã8ÇãÖ b ¸}ü`ŽúÔð †*ôý)Ç™Éûz‘éïÿצ8W¾v?Äôè?úÔH àc ä翨çŠr@!²;ñüèu©<†¿/ÃÿÕJ3Œ7'ÔóŠ\1Â�£Ž?3H€� _—§N¼ÓÕ¸wVÜTvç­;ïGÉÁ$Oþ¿åG˜Ž»�büè€Ã¯¸ïùzSØ71ä·8Î?ÏéBܰ rÜö»R¹FÞ¤€y—¨pÀuÐ èzi‚ ¤|þ”¿ð�h9Ïö&›ŸúõOð£þ�bi¸=GÙ#ÿ ?áÐ¿è §à*…ð�è_ôÓ¿ð?Â�øFtâI¦óÉÿD�ü(ÐF1¢i£?Ñü(ÿ„kAα4Üúý•?Â�øFô/úéßø ŸáKÿÞ…ÿ@];ÿSü)†ô#×EÓOýº§øQÿÞ…ÿ@];ÿSü(Ð@ÀÑ4Ð?ëÕ?”xwC4m;ÿSü)?áгŸì];8Çüz§øQÿÞ…œÿbéÙÿ¯Tÿ wü#º&þÆÓð?éÕ?Â�xsCÆ�§r0ÑS§åKÿö‰ÿ@}?ÿ“ü(ÿ„wCÿ 6Ÿÿ€©þÂ;¢dŸìm?ŸúuOð«v¶v¶1í-¡·Œ�ÅbŒ '¦p;ð?*žŠ(¢Š(¢Š(¢›$i4O¨¯‚¬Œ2 Žâ³ÿáÐÏüÁ´ÿüOð£þÝþ€Úþ§øQÿÿciÿø ŸáMo h-�Ú&šsëhŸáKÿ懌béØôû*…ðŽhôÓºçþ=Sü(ЇMNÿÀTÿ Ú 6‹§ïjŸáIÿÖ‚qÿM7ŽŸè‰þ¿ð�èCþ`ºwþ§øRÂ5 ‘�ìM7ÿü(ÐA$hšnO_ôDçô£þ­ Ÿø’i¼õÿENJ?áÐOüÁ4ßü�ü(ÿ„kAα4Üÿת…Ã: uÑ4Óõ´�ü)?áÐ]Mõÿ�Hÿ—þ­þ€šoþ§øQÿÖƒÿ@M7ÿSü)?áÐ3Ÿì=7?õéøRŸ è$äèšoþGþŸðŒèÇö›�úô�ü)áÐHÁÑ4Üút�ü)?áÐ2Oö›“×ý>J_øFtúi¿ø øR 覇¦ÿà$áKÿÖ‚:hšoþ'øRÂ1 qÿ=3ŽŸè‘ñúRÿÂ7¡ÐNãþ�Sü(ÿ„kAÿ &›ÿ€©þŸðŒhvÿaé˜ôû$áJ<7¡‘¢i ÿת…ÃZ9&š¯Ùü(Ð@ÀÑ4Üת…/ü#zýtïüOð¤ÿ„oB'?غvëÕ?Â�øF´cûMÇýz§øRÿÂ7¡Æ‹§à*…ðŽhxÇö6�ŽŸñêŸáGü#zIþÅÓ²éÕ?“þ­tÑ4ßüOð§臮�§ÿà*… ðæ†3�NëþŠŸáKÿùéÿø ŸáIÿî‡ÿ@m?ÿSü)áÑ9ÿ‰6ŸÏ_ôTÿ ½oo¬+ ¼1ÃçjF¡Tdäàz’Š(¢Š(¢Š(¯7ø®Fíþv?8ëÎŽI=GÀãµ0G†�gpÅz·†*Á‘†T¯qëïCà ã•éý=øþ´å&MÃÇnÞ¦£dnª»r2?¥CµÀdÚH-ÏÓŸóÖ—vTáó“€:àæ£w9b:¯÷~¾´ˆnmÍ‚8ÏÏoåþ4õeaÐu8ähÚÇg°Èïø{Šn0He'¿§­0ɰ36þxÇ)ŽÀÿ<ÿžÔâA$ç yÏùü:N˜ÚxÏsŽ”ÆÊ¡ ò(,N}ý)ÀîP¸�94å“v äž cõ§«)@»¸aÕpG?†;{ÑæBB�T‘óuãüæ¢.¥¾R7ã�Üdñþ#ëJ»IÁ‚3ëõ§3gbž„ý3I»o';{Îh$÷Przž‚�Iå€Í ؽKzûŸÂž2ÍÉÈÇhÿ=©|âÇr¶8zR�Í´`nã¯CJÊHb<ä.zþAAl>ìdõã¯éR gg$Ÿ—=9éÛ¾iNJ`¯O\søžµ!à®@'tåúSت‚rÓ€qúTllݸ/@wr/¥ ùPÁÎÌõìjRÛ³µ°sÉ£åE�¬Ç'=9ÏùúÒ²œƒ† sïŸZG8 p #ž€tÈÿ=é©·s ¶9ÇN½~§Ž”ö' ÉääŒ~4çMÊ>ìä=1íJƒ•9ä’G4Õy9Âê+èú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Í~-WI ¹›<ÿ×?μëså‚çn3Ð }rÎ)žr>lõÏñI’ÑdÆ �§€O4Ô\cïqÀäŠRw‚©•n™ÏoéMo”cмxéÉúR!S‚ÛK/óý)¤GIÎ1üÇùÿë¡Ìˆ~p9Ç'׊jrsƒÑsÓé‘Ö”�üG'¹ãüô¤e0qÎåçŸ^´Ô »˜ƒØ/9ÏùéJw`.FIÁ côúúÑŒ0`F;ƒ×üçƒ p8ñßša ë’n‡#�ôïÚ�&ƒ“ód�zgŸOÆœ2N0Ã’G?‡•hÎÐHfárséÏ^™4æÊU—#ëÉö È«„ 3ÙwcŒvþTÝʭʆæ$c\Ô�ó€AÐãô¤dGÁcþÐ#9ÏZC‚Ø=W‚sÏ\÷ÿ?Zò€ çœäQ¼®9³œ/~?OÒœ¤K¸m=B‘ž™<÷÷¦ïÚ§tk» ŸoÐõèÀ-�Á¤“ÁÛò¦ÆT©#Ž˜Ç_oJsŒ•àwãëù UÊ>Sê^i™jŽAàO¿^i¥NÜdò½Îr>´»W,ÀÉã,H'Óÿ­IÊ)†õéÇôϵoU œN_óÖ�Á;‰/'¾”/—9ÁŒçüÿž(ÁÎ0Ä©ÆpF~†�ap ôéž@¥œ‘ÇcÜ¥.à_#váÆp¯ÿ_ÚœŸ(;FWÐõüéÎY@ �À1þÎhc¿qÚÈù²?úâ”ò€«3Àéœãùÿž”ðHÚ“œŒäñÛÿ¯HÙb…�Ž„Ï¿áN`±ã*6túgùR©$‘€Ï�Š˜ !ƒsÈÏÝüºóIBv“ôþµô}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEæÿÈÿ‰H9ò;syÉv0drqÓƒÓü)‘“"oV`ÛˆÎÒqƒéK½‚¸\†$ã¸ÿ?�/+#ƒÏLgð¦ºî�•G8ÇŠkwŒàヌ‚Ÿÿª‡Ž8H ãüý)»r_w9Ý‚[ävü)ÀàŒs€Aö¦±+Ã!*zc ÿ?Ö£-¸�p'§áéKÕJ(ÏVÉéç'œ–#®i�T@+�?…s)ˆ*€U �Œ‘Ú‘ŽÖ?0Èàx?ç�΂rH+�ß>˜þTà­“·¸§Ò˜$*¤¶ÒÉœÓßæ'‘òÜúŸóêÂ$+¤cüÿ•pãïy9Gøv£•RÙÝÇSÜÐ_æ@ yÜséíK¹�È 1’O^?^ôÖb�÷N{€sÏ4ˆp¬”8n@õÿõ~˜§)`J°oÀñŸó�΀À‡ÀbH=@ÀÏZS†Pv’sÎr(P\Œã=9éþ­!Þ_iN¬ ‚cÿ¯úzWPÍÆF9Î)T±Èe*㎿—ëI¼mVÃrqžœRä7ŒŒñÇzŒ’`;H$—-ÔzÓ¸“€Îî9Æ8þTì°<·%†rGçúÒeI€{Í0läwç`s’ÝÈ óQ¨Y°s&ä`¯¨þµ rÇøØcަ’l°Ú¤.[О;�Ä:R€W*zñ�AÛÚ‚§åbHA’s�éþ}é§qe錎êzôüéçh!ø»€?� 2À9 ñëþ}iX)\¶æÈÝŒ(=>bl­-†ç½?.T¨\œœqúýh9#hÜJ’1Ð3ùsúQŒÿ«¶;“ëþ*vBrHë’Ooóš\1oÇŸ­ ß°™Ýž0q‘ïé×¥8±‘r’T{P€àï]¬ã =Oþ¿·µ9óå’ éžAÆ=)SæSµŽà2iÐ1DÛ»p>SÓÕôeQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEæÿ�-¤cÒn=Õ×›¢¸Qµàc$ŸÇèiì–=1ÓŸoÆ™·+…Ú `ŽLóÅ44jæ2@²Ùý:Uß°ä†r2Ï4)eŒ‡å‰ �ÙíM¾a$6ä`ŸzGù^wŽqÇh`<ÀòyÁàzŸ¥2GXˆÜyÎÏ_óÍ‚àcñÎs�ÿ_ó ¶ò2 ^ÇÞšAc�ÞAÁäãëN p$: gÌp¨ëíôíN0òÛ<ç‰ÏùchFPËÓ•ù}¿ž(åyÁ$ã±úçð?þªE$�Ý ` œtïéÅ9¶å·€s�Ó88?ãHÙNA;�9?‡µå} 霟J ËõçŒg®}¨ó÷6A kÈcFÚqŽ£i?�Ò(A-–<òqÉÿ?Jqm­ÈçŒãê*nÐ]XíÜy8ÎOÿª¤*m71çÔâ˜X°Â töôÿ>´ŽÄ+¹Ï_þ¹¥ûBȆT`Ðñ’‡žüÒnó8ÆQ²8ä~=*N£$±Ï®x=GZEÛµ”ªà½4ü®Ä�9 àûž”¡Ëp¤õ=hdÝ&NAõÜf‘wo¼FGËŒë×õÿw™´@,8é�óý(`Y¾øÉ ä oéAv~0q·<çæÇcHA(zHgˆôÿ>ÔãûÜ+`1 ’ öþ¦ƒ’Ù;°03õ¤Àe 7•·ù?þ³N¨\äq×?äÐB€ð¸Ç€?É   (]¡x\(ã4¼È2W+·8Ç®=øÉüéט‘Á%I½Jx!‹/L{­*¨* àú¨ãžôŠU¾Epã¾?É©jžç© ;ý(' ´¸ð8â�Æ5 ´áqŒñ�ä{S‰" AØÈÆ{çÒ���—ƒ�~iÄ¡}Š'ªã·ôæ”a”…çœd`ñÓ?Η*K x?�^i¤6õ)AÎKtïÜR€àÓc­}EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEyÇÅcƒ¤ué7#9ÿ–~•æë…FÆ[ŽÎ)ªw7<õ'�,ËØ¶ÑŽ{þ¾½iu¤Æ-ŽÿOZpl°çdîëQ‚%óµ†Oi»JaÆÀ ;‡QÞ„ |�2I'×½#-ˆQ¸–gß½89;ÉÜAÎ1ÿê¨ö`ÒpÏüæ‘°Ä9ÝŒg¯õ•ä$¶{¤SpŒ•u+Ø�Æ1þOùÍ(UWÞ©’óœu¡€e å—<ƒþ}i¬h=Ç\{â–DWVRG?{=Å01‘™¶àŒg§¿JRÛ›YFÿ®“#ýœt$‚Gù4ª3�žǨÿ>ôßB0Àñ×úu¤l¹)³åa÷½èÛµ ã�¿_óži¥Š«n à’„®vñÿëÿš<2ÈzôäT@í�”±ß5#“»9Á÷¨Û’O–ÊOðƒŒ~¾ß­(#’ÁsƒîH¦+(ÜIÝž‡�æy¥Ú»A$Ç9ïÓ8‘üiÁ×oF`0#ðçð¥Â³1 @ ÀÝÐû l��Ëæ0np½ÏNjRB"õÉéÏ?Nj-ÅTm/“÷�G©¥Œ\€xG§Zœ ôÉç¨ú{SŽOð®ÁÔg?J$eùàmÏùÍ Wvp 9þžÿ­;î’=¿Ï½5�U7ªçœÓ½.ܳžg ç=ø¥n¬ÊÀÓ8#õ¦® ôÎ2rqÉþº~A‘�—$g'×µ*–Øv°ëÇ71q‚¼ŒŒcÔÿ“@ùß!‰gë�LÒ…V –ÁÈ1žsRÁÛqì8ߨ¨ÛçeUÛ·9?7n01ôþ\TÍ’2:¨$�¯ä(dÞÀ‚qŒ1ÏëJ1»päŽ #ÿ9¡Iqœ•8À=OqŸ×ô¥gû €ÇjL8ùwòsÈ sÀô÷ñ¤e}Ä�Ð{§NúÔýß+1Æ vÎ)@•%‡¸Î>•ôuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEç~þ�ò’q>:ã?»¯8ª…~Sû¸Ï¥3qWdVÁ.q¸òsÏù¨  Êí\×ÿœÒ�’Bs€H“ÔÓ]ÕóƒœñéߟóúÒ-À�À9÷¦2¡Ç;°¹ã¶OééêiNü�ôÎAž¿Ò�™m½ìã9ÆAïŠ�¶±²Œ�8Àϧ¾)…fP=7qÛŠPU±ÁSÎ3Ç 2ƒ‚0FpùÅ#’(%wnþ2ŸÖ‘ ‘ûÅS’~UéŽÙ§�»’03�¸¤hÁ@ CruäH\P`:m<†8¥dbNÖÁ=ý8<öÏçLÜÙÆà¼à‚GóøûSùÝ´[hÁ?_Ji<1äm$šr®ÒYŽ ç�ßüãüñK價GOB3Mwm¬IÈàÿ‡ô �Û€ãýÓÜãŠq]ä©vûÜ_Σ@B’ÙÉ$€FÜç¾)çz ‘B`uP0qÉþç @hÛtàðɧ"|£rç8ç¶sC+¾0 ^Auí�Μs“Éã�Ÿ_|S Ÿ½­Ü‚G#�óüé_,çoÝRA9ßÊœøKžœ;ÿŸåF71*vŸ`=iv� d ŒdžœŸÊŒ‚ÆB1ŽC~Ÿ_ò)Yƒ�Ï`F #“(6œ u#ˆ•ìET^}9éÛÓ¥=vÈ»BäÃsþÆžÛñ¹Tç¶zU$’O\ãäÒgkŸ”ò?.ƒüý)ø�‚8õüN*FùÈû¥ŒôéÏåKµpï*zçž~Ÿ•"ä)¸œŒœð>µ!$?ÈHQü8Îy§/—�˜dôà×ÑtQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWœüT:Hÿ®ßûN¼×`VèßQõéúÐçhg<Á>ß•('c=r8ìh²8õÏûÒ>± ðƒq¯|ŸZRFX‡ÇbOúzu(mà‘°ž3œqJáv1Œó�óÒ›¹YK1 ƒƒý?§çI•*rr£=F?Ÿ·ò¤l©(­�§’ßÒšp«ó6IÚOžir¥e9eF 4·ÌÌ­òŽ­íõ¤oÝŸ1ÛjíÁÉíþ�†@ñ«õþè¦HA Ëc8È<ƒ�ÿ]<‘æ¦UI ãלÐ9 ¶ü¹ü)îT¡ qÎsÛÞ‘�;Gœ…j�˜÷Ï÷qÉü? D!Žâ¸cŸëJ  aО½ÿ®—fÀ�cœ gœÒ ŠÊØ#×ß·_Ò¤ù·6Î9ÇóÍT) 0~îãôü¿ F ê�‡<ñLPvü€ŽÀî© Æâr0cžJ�Ìlì©ê8ÇSR£nEÚ#¸ê=ª,0bHá9Øý{â¥Üª ä€N$ö¿Æš%Èa‚PÁ¥I1Ãcƒ‚9±¼ôs»m Ù»Ýíþ‘q»zÆwòG×ùô§|Ȫghû‹€AöÏ —BÀŽP8üáK„Ü c‚N°oåMÉËÀc–g�Êž¡‹nÜÆ9ýϵ.~r>RsÔžAëÛßòÃc“´�»Œwÿ&€È€’9¦y?äÒ„S‚9gp¯éOØK¸¶~ßONß•*/ß ’BûÿZM¡\ää0äûÿŸåJ>ï À ž¥l¨$ €ëÒ›*|™äü¹'§n{Ó˜ÇÃ�ëó6+èê(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Íþ+sý�CçôýÝy³ d`°íÔÓŠ‚y`{Ÿóõ ü¹<&Ïüý)•°2ÃwÎ3Œwã¾Ï£J@¶ã =8ü�4£ܧŒåˆ9Áÿ9¤o”Xy!Ž~ŸÊ˜ÇvàÈpAç“Û¦mo¹¹ºäƒÆiÊ�·6ݧI'>”Ü)A¿,û�Ê‚=é¬:¦pݰÿ?Ê”0bíÎG§ñü¨ÎÕU ÐôèaHUÛŒr§œŠ^B`¦=qÏÔl…†Õb õ�ÃñüéÏý¡ü©ª àŽxü÷â „méÔã¿áLUÁÚsž€zãüšIÚà“´uÜs�¨ô¥*AÆò2A9ãÓ?΃[-�Œ öÆ?C&ÑŸ/-�”¿J¬A1ƒÛ½.|ÜŒuÅ1ЦBðàãØgò£�NÞ›z©?×�ÊŒ·™ž@pF_ÿU*33�°•É9Æ=iJ3FØÆIéŽù¤9�!@ÿúɦH9 ´|ÄÆÏqøÔ›˜àŸ»»<öç?çª 0Ûœ`qëøtíAhÔœ«¤Ÿ»œ}1Í b1†8f×·óŠx”èGôàv¦ @zÀßþªTÜÃn6©Æ2yüsϵ À;˜�Ì{tÍ#!U ¤—ë³=}}=éêyä6Î9ã§oÆ�†Ë/®88Ç·éM@Z^@ c¦,Ó£B§ibÄž8ý?�8©’`óÔ~Tˆ`uÇè< á•‹qЧùF F3’Eã†È9B{ãsßã�…q–㎿áJªNOßoÔSPp%wd�¹Û×ôìi͆ˆ…RØ<óƒ�zô©$ðØ\döÇ¿éM@ÀÆK–R†n¤õ=½ýiä副TÆ?\þt»N>ÆxöíïI’xpTzƒþ#úS™A\‚H$20>¾ÔÅ;·‡häœõäñ�þy©¢Û³�ß÷Í}EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEy·Å„/ý’0 âlŸC˜ñ^p€ƒ– ¡FHÀëõ§ ,{@;zõ¨Õ|¥89N¼}y5 aŒ£8ÎÏ4ÓœgæÁ8ëë×§¸ìÏãHÊÌKn�r�"•°qÃÛ߯åõ¦õ«æGŒtÇ_Ͻ2BŠ›˜‚071< zdñÖŸÎHÆIé�)°?18¿çüâ˜T¬„1Î#œûœÒºá~cž€ U€Ocßß�­1À;òÛŽsŒr8àcüõ¤* òåàuÿ&žÍµwƒŒà~¿þªhå÷í=¸jn Ï Ø‘Á9ÿÿê¡så³ !1òöëÉ=(ä8=0r23Æ9É£1ùBG®zS0Û P0ý±×¯Ά9iWv¨äcô§Î×,Á÷[Ž8þ¹¦y‡Ë W¦íÜÏëN :ëœS“•ÀP1ÑGaÎ?:Œ’1 ÛXÆyäv©60o˜’Aà>{þ4ÁžàtÉà~_çùˆIÉ ð1»>¿_ð§mÞ›†W$‚G×¹ÇZBý‰ »¹ì:túëHûÊ…p:’:ñÿ×ëÍ;Ÿ•†Fz€9=ñN.79Žƒ8Ç=ÏåA—vÖùrp§9˜¦Œé¿+÷O#`ŸÄú©ÌÌY~NG¿~ߟô5 ' ‘“Ž ÇåQa7 Çw®x÷¥!/¸‘ŒŒéÞ¥/�™õúÓUv6ÒÍÐ�cÞ€ŸfB° ŒzÿUJ²ª“€1ÐñÓüþ4(¬$ îÉïì)p a²|‘øÓ°«‚‹•“O Œ‘¼׿þ¿‡ëMvVÝÓœ�y8þt²„ð[#$w5*çsg8æ‚?Î9¤»‹’àãž¼S׿NG¹éÿפÈAž­ÔoåLdÞ¡²ráŽ1ø÷ÅJä+ýæõæ�me Ý  p?*’(—f^5b{æ¿ÿÙufo-kit-tofu-ed0e5bd/docs/source/figs/hi-inp-comparison.jpg000066400000000000000000003130511521054151500240350ustar00rootroot00000000000000ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ ÿÄ ÿĵ}!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?†x=~¿ç5&Çb…�€Oj“>¸£®yÎ})xçœ�çþ­.GAÞŒŒ ö �A÷98üúôdåHFF~½èèsÔ‘ùÿŸëJàñÓ·ùÿ<Ñߥ(À8çüæƒÎO ?�§tàwàR“ÆsÞ�Ùß4g9Çùÿõ~Ÿ‚1�F;SäÉf9ãýió’4¤õþ¹=?Æ—× �¯_þµ Ç)sÎr®?ȤqéÛùÑÇ$òG_Ïÿ¯úÒ“�Àäžÿç­ �HŒwëéùÿ‰¦<ê¹È#*V ç�Èþtäu'rGÿ«õþt„ ÄŽ¿×4¤F@çŸÓùþ”ÜCƒúRt¾ÿ ©C’¡éžßçúT�À'Üôü:~µ"¾H'#Ïÿ¯AÀ$zãŸåþ~´àÀ޽ó�óþzÒƒ“ƒþNxÿ?ýj?‡ÎFnßþª ËžýO×ÿÕQ�0NO|rÀÔ'.r£�ŸÓacR „þ?çuäQŸ_óš óÜsFÑÐŽ�~¿äRñž‡çóçúÐÎ1Î=?Ï­)éÈéFÂIu$qõ§ù€;x=?Ϩü+/Ä�][Ù=ͶH0doÀ?Éðl }¤OpÓH$IÌdƒÊàÞ˜ þ5н@t”Œ0ÁüÅ!½dšÚEõ*7ÜñíýjD¼¶•€(cŽ ÁÏãSŒ �cø~£5¯pÉö} eé2y\åßôªÚ•Ši·ó[F?wƒhÆ1ž©¨•ð:çûh,O?ãÓÿ­JŽAÏ_qßÓùΤ�9ϯùúJoÍŽO·ùüéA ÓŸçþOzEb#áÇÿXTƒ cßëþ?§½.ð€sëþ{ŸÔS¾Ð™9pqÛ=¿Î*Sy°ä’9ÀÏùÅ9¯Õ•†GÚ ÀΨô½n×UY/‰¢8–3ÁR{ãÓ¯â>µpKé׷ןñ¥‚AÎ1þ/óš—~O$ÔcñÿMi#'ž¿�_óô¦ÒpÄzqþýT¬ã$(ÝœóÐóý5“©c“ëî1QÍI å`IÀíþ})Ä€1þxáŸóšÊñ“ÈCÿתà$WÍ)o”�,úuãüýkÔè¯>øŸÿ0¿¤ßû%p)Њ^þ”åÎ=Oo¥8}(êÃ¥((Ž{Q¸ÁÍ.yì()z?Ï4区îÊ‘‘�t9¤Æx»qëKÎ}èúPò¡x}?•-.No¯JL¸=ÿŸü@÷Œr¯jÈëÚ€;žÔ íõ ƒø÷¥çƒŠöïNX‹œ’zT‰kæ+ŒcƒÛ§¸ I¯#ñ.Ÿerìž8·ç†Éþ$þµÚ5œÖïˆn²üŠO6î"7À²Ô¡þ”.¡"@ñ‘V#’)REaìkSCÏö‘SüVóÎ6þ¹¤‚Ê ÝâùsæÚÏåç�þuUN€ìOçOÞzi ‘Èü½jUlàs�AÝAÈçÓ½üÜ”àwqé‘OÜ;צi|ä\’àzœÓ…Ôj -žüS’ö1Œ<ö^µVëÄ6ÖB·jðÅ'üµaÆkM¥ Ac¿½)—õÍ9$ùx# S‹ûÿž•òÜ'ã@ ƒqnIíHs m›€nÙÿ?…1"hä“t…ƒ6F{OÒž>fÎ{QL‚K&�Ž>b¿‡ùÅ:ÞH„*ŒÃr §>ÕÊ`’1éþ!è3ÛÞ…$ñÓšq ûcÚŽ¤ƒŽåKòŒ}3ŠQ�9>”ŒŠÌCÖ��~:ÿ_éJ#§NqéB©|3޼Ÿj¹ùˆ'·øÿ3ùUƒqŒ™êGéúÒ !œc=ºõÿ?Ö¦[5 ÀÏSÏ­5ì†:“€1ׯøU) (pŸç�ÈS„‡9ÿ?ç4…†1ÏSŸóïù paŒœr~½?<Öl³¡µœ²Ûyç9ãúW¯Q^ñ7®•ÿm¿öJà# Ò÷§ô£<})p:ôâ�ÏÝüéÇ`ŒSU޽;§øþ”½ I%ˆŒÿŸåWÒ,ôèóÍ g»¨Èíü¿§ëOK�O>žôód1Ó^k2¹ ôÈýª¯”r;šaFÎ0sŽh G84½Ò¥¶¸Dõ%?ÿ]GÔqJ9éÇåþsJz*XS|¸ëëZ°Ù+»Á>�*ôürªG_óúU�ÐŒ‚0Ïó¦e!NAÎ?_ÿ]O%Ø8Ç?çé[6–ˆ0Xz:žâÍŸrê"&Á÷<ç\¯Äm6ÖÝô»«ˆ?qƒH¿y žÐd~U¯·ö…„7iÉ’%�c�N\þ•FXZ&*FÿëTd+}à÷Z„Ù[¶KD¡¸éÅ^Ðì3«Â‘O4E’A�ÙþWâŽïHðÿŸnÆkY$Ì®½óŽ?Öd³ý®všQ‡p u÷ E6wyØõâ“È—þ{Ÿn(†N?~ãð(€äfwÇÿ^ƒï#ñמ´ÓÝÃ?çODL~=Í HÇEéþ«åãԡ”9=)âeQ¹ŽFO°Çê·‘ø‡K¸™¤U�/ÉÇ"0GêÕ×Z¢ÚZEl¤”….Nxæ›ç×úÓüð>ôÿ7~Kœ/¥/žù9ëøÒ«ŒòrOsIçŽ6Ÿ@1@—#¯ùÿõS÷‚z hny>ŸÏúÔW2ªyCpÎá»Û�ÿUdj¹¹ÌÆÑœÿçAA8ð*^0?´£Ž¸î3Ûüš\ ëŽqÜÒ�è4ï§=?ÆŒ91þJBp3ƒÇùÿ 0xÁÁõö§ Ï?Ïó«vñqœd’ÿ[üÿJЂ0AÎóüêdˆ=»gOùò©•9ïÇóãúSÕA`1Ðç íýE)ˆS�óê E%°lõé×üI¨ ª‘’3‘‚1þxÿ>•Ö¸ÎÞõù?ÒªIlÀp #¿ôþ_�Üà�‘þÏ_znßôpNÙ0??¨¦˜x ð:öÀ§,NTdgôÇù<…ФŸOÓúÿž•·im€£Èçù<þU£ä�ª¤dc=?åUå²,pTrN1ØcÿÕù~5^M3å$(É$þ™ªÑé›$'�ÜgãŸÓÞ´¡µÀ=޹~¿¥X0çÇ'ñÉþŸÎ¬Yd]L؉PO®?_Ö¼ãÄ–�¤ë>Öm˜Bná�YÀãx ?PÃ'ךîáê–ìP‚A�Û$ÿõ¿JθÐÀ|¯õ‡þ¢².­š ô韯ùÿ8¨'Ó“ƒü¿�­7�iö7VÓ�àÊHÈRÎ>¡�åUuã-ÍÃΤ ¶E! w ?ŸÒ£õÁÿKœŽ¾Ùÿ?�!$’GPIüÿýT»Èç?çùP dœžHïÒ”?ÊNFO9ÿ?JLäžóôÍE,à8Q’}ú�¨¥“8! “ÔŸ_𩃲.ÝÄñŒŸÇÿ×I%ÊÛÂóJ@Eä’~¿áþp+“Ò÷kzÍÆ·t¶²ÀC ôÀü~•¿¡Â±Y<âA!ºo0¿±#ùÖ‹Ê@Îy'$wçùÐ$'ï£=;Ô‚C´…àû`ÿ�<8úúúõ¤3�F3‘þÃó¦4¤œÇ?áþ~´å��œ÷õõÿëÔža9õàJV�PŒŸ`~ŸáL;Ÿœü½�tü}ú×5ñeŽÎËgdepà €ô ç¿ÿæô›ÿd® ;šv4áÈæŒ ã“NíÍ/<œŸò(#éH98(׎¦DÞGçWãˆ~µsË9ç�ñý*QÆ3ÛùŸ¥JoÿUL ôüj¤ú^â8úcëþ=µ€P2ÁãëWÖ8Æ9?çñ¥–"°´l2 PAïóLÖôÅÖáþÎuÍi>Â{>cÆ=ó�Ö¸ïjLš\–sÊ1»UXÎ9¨#ëŠë¯tu”±õ<þ}ëãJhc,+0©V*{qùsVô˜ž]ZÚ$�ÄîÅC¯QÇÿ\ÔÑ\Ý�îÒW$4c©Ü ýsYqFñÝN¤�,¸t°=Gæ L8¥-Ž}ò ep=( s·€vÿ?Ö¥ó“\÷еyb‰tÛ@ZêvÚõëþ*"Ò ³v�²ŒÆ>Ó7ý4|Œÿ +¥.s×¾{T~kn ý{SÕñÏÞj”¹;‹�OΜeÛÓ¥0ÏÇ_¥4Hx9÷ÿ?�J$8#=8?çò§ 9-ô¦‚@œ5"„– c|’ë‚Ýúÿ�xþ£©iڕͼs±C÷ÎO§ôè Ðxüþ•'8ü©ËÓ¶iqƒÆsž?ÏùéR*pOŒzœSÑ9ëÐ~´8À㌟Ë:þ'òÏÿ[󥂎•$$ãƒíZ0¨À¹ïþÏéWQp§çô©”|§'®q‘íR(zöíÿêÏåO#©Çlñþ"”ôòä‡ùî¤À$òQý1HÉíœûôÊ¢t`Œ‚09íŠ�¢ä�©Ï¨Ïô�3ȨÎF8ÿ>Æ•,°0Á`0ñý}êÁµ8bÉ’?_ä:!ÓÄ1…8ýF?Ïù¿þª˜Z´�1ƿʧHÈýkF!�@Æ8¯ÿªŸ! ¤“Ï_óùUBYúZz©!I9>Ÿç* ã ŸJ°©“‘òçŽ;z1QM†hÀ̃Œtä¶)Á‚k6¸ím!ÿÇã¯)ñœº?ŇÍ0Ùj­…aÀ 'Ü>Ø“éšô˶hM½Æï´À¸n§ÿ�Eœ3ƒ\ÅÈQ–8Ôú9ƹbA?ë”qïV⌵„ÿ'9ŽØ?ãXîØb} {w¡Žr;Ši''IæœåKíÐÒä0éÈé@‡ñ¦0ãÓŽ”Â9Å~:ûÔ7·Qiör\Èpp=Ojç<9l÷“Ïâ ÅÜÄ•¶Süÿ•ÐF€L%rEO˜õ9''ùTÛÉlg=;ÐI#Ðz¥9\�÷qÍH¾?úÔæ¿OóøæœO¨íïÒ¤\)S“ާüÿž”;@gŒûÿžisÁǦE!?7_¥5›±M$Ÿ\þT/Ìǃ�yâ¬Ú•�œcÚ­"ƒ<Üu`Aþìcå#¡ý8 :ûgüþt›†2=søS–sàðZ ÆâÓÛüÿ:r¶_�LÓ̃ƒŒÕ"È (íþ©Gm­þÎ*)¤ß, w1ú�§�ÔRoÆ«âÙ¿Yqß´·øf Bf³,°œ©üÔ~u³m©møoLñ,|ùbCr«Ó#åqøÕ5ÅÈ•7¡XgœôüóX7I’A9ƒŠ4÷hõ{>ƒ¡Ï§Í[zyb÷Öûr Î=¹?¥s¤r§Êdý?ɦƣxv�Á>ŸäSÙSqØÁ†Htã§ô¤qÇÿëÐ}ÏùéI»€{R‡ÀéžôøãüÿQLÁÿ?çÜУ�?¸ÝIî5Ýb=9 BŒ^vÏðçŸÓù×V‚8ÚXS÷qàòÖ•`îTŒ³}iÁ@Šv9ÿõ©v÷üqO É>ƒüþ£æÿž”…s�1žÕàí'½3i“Éè'Š@ÉÍMo÷¤Çuÿ νÓVòa/w È=…Mœ(ïÅ*ð¿­H¹Èôü¿ ­Ë+"1_cïßüjÛi‚F Wg·ÿ?�@Ú@F,2O'·?ýÒ£—L2"�¸Áç�§øÖ|Ö�¤H'‚Ϩ¨Õ1�žž¿†Ïù7bÊ�qÆsíÿ뫱8 HÓПþµL‡žIŽzwëþ}(� ? éNnAÆrFùúÒ÷Ï<œþy?×ùRdägŽ8Ï­ Îz`c�éþqNBŒà�0~¿ç?ç4õ�+“Îyç·åþy©š-ä1 qê?ÏùâžÃ6ì‡ùg¡ô~=?›ÍË2@²NN>¼þ´ÿ0Î'§ùïÐT Î8ëÉâ”'É�NHüzÿõ¿�.̃‘�œ“øžÿ�*&qØ“ŽÜgðÅHO?\ÿŽ)œ‚HÏr?Ÿø“S#|¼ã“ù’GéR‡RrÝÏéŸþµUf1é²yìÄŸR„ÿ�éSZÈÖ9�Gä?—ò¯=øš’iæ�â«`|È�K㌔ÆAú®GçøvZ¤�ÝC Õ»†WU’)੃ŸBY¬D±dwÎG¡çŠÏ��©Î 9úgŸÌÕ¨ncŠÂ4‘Ââí[$pÞ¹üYÕgŠæËL’ʘXd¸bëŸòk/ "PNI9ôÿUÊ+˸ãŒuéùãü÷“ w9ê;u£�ÆÎ?ÏáAÈ8è=z�0òÝ2 À§ÈéÁíøˆ¤b@bp ÀïŽÕ�v5+ºDe1e#• �sùgñ®Rä7Š|Cä!?a´!Ÿ=�øãüäWU°<›I%c>™ôú`U©0‹|}ÒÇñ?àçQr1Ó?¯øRí'èNÏ·ëKÎ}2p·ùç4)'Œs�í×ÿ¬:�:tçùÓ‚ O¯aÍ7iÁfËu=¹ÿõÒ�IÜàž¸ÿ?äûTEH= bšPà’ $äú“üêyH"!+Ú(¯=øŸ×JúMÿ²W4î¿…=O|r?Ïô«–P¤ÆÒ@â·Ç1ì+œðx¦>ެ  òsŸÎ£]4+#9íéTçÒÙ#fç9Î?Z¨"*Àô#Š–Ç=¿¥_‰ö�áùÕ�xÆIõöâ¥$psžŸ• ~^ÿçüšCÔŽp?ý_Öœ}½é¹î??JP aÎ4ð„¶:zñþ{ÔѦ 4øâò›€6íæ¥³wF8üÇçÍIæ©‘‚°l~Ÿçõ¤‘�Ž�j$L·^9úSÊ`‘Éü)|¿Þ\äÿŸ­<0/Ö†%€#®Ïô¡IÜnßʬ,ƒ“ëþ‘¦¹xðOÊŒÇóüjøÕW=­°qîçü*[ËdÕt˽>LbâœôÝÆ?P+�ø]¨­õ�Ü=¬¦x‘�;Xíqø0ÿÇë}ˆŠvŒ!9\ö8éUîPà·CŸË­Vµo.êzm‘[¦p­­*öØêW1ù£|¦ãjãýŸð† îqÛƒMve|±NCqQCà ƣh^¢ž:ägÛüþ½{sM9+ýi×®)ßÂ*¬×ÂßPµµdoô�Å_° gÒ©ø“SþÈÓIÁJ¸ŒcœzÕOiO¥iïqpÒn~wõÏeÿ>µ¿k‰·ãæE.sêøÓz�Ó¥'ëþÂ�´Žž¸£qíôÏ¥‡Ò�‚¤§55¿WÿpÓÊŒ(â©(SÓ søT¤duç·ò§( 1Éþ¿ýzÓÓ-·Ê�¦{õ®šP¡AqÏåVÕW`ÏŽ�»~$þUUˆ,ÇLc§?ŽiEHðÊÁ c¿•d])cƒœäÇ?×üñYì„`Óùuü‡çOV ;tÇùýjÌLÃ>ÜŒŸóß?�N¤’F8z`ÿú¿Z“y ž‡®=:ÿõÿ*PàƒÏÓçñúþàÄdçtÏçýJ“ W�ž¼þ ÿ/ëL#‚NA=G¡ÿ&œ¤ä‚GNã¯òÎ?:–'÷É�Ëü?J“~8É ŸÊ°|¨¶¥àèíe}ÓiòVç’ƒ”?M¬ÿtÖË#DªÁÆx#¹ªò&æ-ê8>Üþ?�!¹˜ =.;a"Þ\€òŸùe�Œ‘øÿ:³ynö�Ú¡ QYÀ±Î.:ÍŒŸ,dò3ŸÌ�è:i9ÎyÇïþ¥) žç8çêi$ŽsïëÓÿ×øŸj3žAè?úôÒ2~�;véúž”cŸ|~¹æœGAÛõÿ?Jæ|E<šDkgbäKtä$hz–Çøâ´´}5t])bÎéXn”ÿyÏoçáZvð; Š2ìNO¹'ÿ®?:·shÍ9¹?—ÿ^«´Œq“Ÿ§ùýiªò$g5,V²¹Ác‚qþ}¥[’Ö41É='éúS“H2ÙE<íœ{š”X.ÐÀéùŸ¥<[•prOcéüêD¶�ÐŒŒqüª´–ñ4Ÿ)uýqüª®A9ƒÏ=?Æ«KjYIBÝϸÀÍ2á Ã!GJöz+Ͼ'N–=¦ÿÙ+‚ŒqÁü)ØËqRÆ­#:Ÿð®ŸN·Hã^Fúõ«ƒ×¡ôíÓúf–} öÁàž güâ CѱÆ2N3þ{U[¹U—j�¨üÅdM$,£ƒƒƒøT(¡O·J™\–ãœvþÖ­+6Lž©wp{ßð§y‡¦yÿ?þª~ì“‚qþGùúSÑ�`1ØRø�&yàÔ€ãýéeH'�:Ò d~´‹Èƒíëþ­í^M!8ÿ?çÒ� ?/­/ãð5 Õ²M•ð­n|ÅcÛ·ùúW+¥Å/ˆµ£{pí%�›�=úñüë¬lË(•NIõ85~+gky]†7£ëÞ¡6²*å…FѲ¨${�Öœ#w qßñ«�Ù1R_ƒHmÃ1®Û==4ð;›ÔÔ‹d¨AÇùô§,.€1ûS§¶…–Ç=j›[(qêÏÒ¢’cƒ×pÎ? …-Ú3),1Ž>•U¶ƒ÷ª²ƒ„Ï þU>¨Œr1ž8ÈëÓú[ö¨±Â¸<ãמÿçñ«±9�Ü{Ÿ¯ø ·æ³°†ÁôçãùTâ0-Ésê9ýzþ~õNéI$rHç8ê3�çþzÔKlIêHçüÿžj¤ö…É##Ÿþ¾?ϵG˜ Œ�/óùSÄ`œc‚}ø©ü¢'ÓúL~u?7LädãðÿJ¯¾·oNôr@Èü¹ÿõþu*9ÚGlSK¿ ñõ4+1ÇùR‡u8ŸSÇëR£†ÉÇ8ïŒÿõ�ò§‡Q“Á#8ü2 üª†¹Wz<–ò�Ñ‹¨‹.p ùƒ þ 3ZP ·Ž$]©…QÓpä?ÏiÃ9>žüüóúÓò:ñ’8öç“þ}iÇŒ ý}˜\c<`u÷côó¨÷�Álž{÷§,¿1ç¿õýZx�eˆ`w2:gÿ×úÓf”[ �} çñ¨uL¼‚alœõÈ¢y‚î`IŽL~y¤IÕ‚¤aØŒ`þy?�y¿‡Üøk⡤9ĪU28, ²ÅK~+µ–@$ 2A6{ã§ò¨ Jãå#‚z޼T¶.F§ ÍœŸçüö­�RÕ.ta~ÒPĨÇÞ$`óøÄW,'¦H#ñÏô#ñ ŒñŸÇßÖ›‚{cŒc®:.hÎ#ÿ­Ç4c°éßóÏô?�!?Sœ�§ÿ^“ £žGùÿ=ª;«˜­-¤¸”€ª 9=Oa\î…§Í«üOt Ž9€¶Rz… ±Çaƒ�ÏÚºVC%ÁR>3êÄOë[ztK,pv‚ÄŸ`OôÏãS#)‰IÎæ‰ÇLàÓÌH 8#üúþzÂmc %8Q€rz~4,ÅaWþzÉç°¥HJJᘀI<“øþµ2€êC 3Ÿó�óŠŽraÉPAǦ?¥P’ià¶A8$q�ó�Ö˜er FG'üýi¦TV¶IÏ“Lß+�•0=[Œ~—åBÀĸw$g ã°§¼K¼(PNϯJõº+Ͼ&‚[JúMÿ´ë„ˆÔí­Æ?çÿ­WôøA—'¦8ü«d½õ«±L@*[ƒÆsÓ­M2),sÆ;úÿZ|Ê[ã’?ÏãYÆ1Î~¿�$Öà©={Ub|ÐzÔ†×oLtéùT±ÂyõÿëñúÒÈ¡xÎAÿëTjs‚AóƒNÏ<û朞8þ•)b[¥4¿\cüãü)åÆH?w¿ùüiË'ÍŽùÇéÿ× a€r3þOó§\)€ÃõȬûKx¼C«]ìÌòJ˜y; hqùƒ[áŽÀúsþ:‘X0ǨÏÓüÿZ]à öíùu¦7>¼�lÓñ×ïð¤ó}ÿÏëOó7(ÆyJš;`öÿ?�F$l¤à…Àãè?Æ gÚ7=aˆq׫ÿ�'œ Œ <õÿëq\‡Ä‹íO Gr ù–­‚GPŒzþñ­-Yׇl¯ä9‘âÛ6ñ¯ ú�Ö¬3M߯çþqQ33éÚ·´6ómà¶Âîw$¦3úV6­h–z‹À²y›[æ?\ä:£Óê?§ÿ_ñ£¿N¿çüý)¸ ~š\ޏàv �^¿äSOLúó@!±éžÕÎxŠî{Û»mÀææê@ŒAéžõµk§Ç¢[ËcÜ"`ËþÑ`ó¯ÙÛcŽHäûŸóÇã[§j#ì�ãëŠ@©"œ�Ž0åý)¯n’eHóŸóõÍ3lVë·ØtA×ñ¥òŒØ2¶ ì?úõ Ê7ÝvÅHc^H±ÿ?¥QžwS…$þqU|×ä±9éŠ „�Îý}j3>Bùa˜úãŠFI_åLïÞ¤*«3Çé«nd(Åg¬@¤~Ê?�58‹“ŒŽGçÿÖ©cŒÇQÛ?çëþsWâÜÏR9ö«$“œäcüÿŸÂ´¡Œ†RÀãߌùóÖÛ/Nzƒ×=y÷ëU¦dàdq�ÏÿŸz�ð@ï‚sžØüz~¦›»�@žÞÿäÿži ¨P‘Ó·9þ˜ýUŽAc�oðžÊ¦2ÆÓü—ãXFèNyÁ_ë�Ö˜ÊIÈë�3ùúê"vò=>™ÿ?ZPÅN;Œòð¤gIÏ?˜‚R08?ž3þÊšÓyÆF?>ÏåéBÜ�^¼ŸóøSÅÉ'$à‘‘íÓÿ­Pê·,šEã! >£üOéWmîVXUÁ #¡‘�Àþ¢¬ ÎÐOPráƒüéÂ|‚ ôŽ?úô×¹xëúgü?IçcÛ¦}¹¦ï€¨nI`±ä}?:–(Œ„ˆrÀÎãÓüô©š"@ç§ÿ\JM¤Nx41T™Àãžß‡éŠ¡sz­…@\c¸ÇÄÕ"epHr:žO¿õ¥0†9wfÎF3�úSÕU £#Óüû ‘@ c<ú÷ëGü´b=AÛüŠÌñªºF˜ò.Zâ\$(:– ??Jöš+„øŒ3&™þìßÎ:â �­J">Õj#º€¶Ñž*岆=¹ÍiB¥c @cŒ�={Ñ.ãÆ9ïØÕV 1ã t÷ÍE܃ßÖ“zõ*8ƒþ}ñI�ÍÁéÓ?Zz ¹ÿëóúÔ3G¹ÁÏlŒTl¸ÏןðÅDËŽßAùú© ‘‚sÇ_×ü)C|¼œ i“$õèÏò Ìv’Ïß? øšp¹nƒó©ã*pq…Ü=±ƒý*¬w„k×0±h£pSÕOô­U› €'·­?Ï÷g�ÄÓ�Ï9_×ÿ¯Q�'Ÿ|Ðeœ�1HdÚ™Ç>žýÆždÇáü†(ó�À×üþ”ÔŸ-)eÿ ªþi…ÖO#£�#MÆsßú U{…[ëyíý\ñ˜ÿ>•Äxy-¯õMN 9¹P{`„oÔ/ç]¾ ’qž çéÅBèD¹©ê}:ÔÞ­s¥ØKw¦Èct!¿Ù$�ð¬/j7:¦‘5ÍܦI…ë©fëÑOõ5ºA#ÒžGQÍ!õ�F0 :téHFsƒUuÈ´» n_íêÏô¬� XHd“[»Ïružªœÿ?ð®®P./ásÝèÀ�xÈç–jêE‡ÆãüéAón'`r¨Cß×õ©ZAÞ8‡zEy¥é„_^æ­$(ƒäÎsÎIïG”UÇ=è Ç$Š‚[ˆá/ÏLk6K‡˜äFsŽIéþzÓHÇ ûAþí9a�HlgɧñœÇ8§71üZ~Þ ç¦üÅpš×Šoާ,z\2ËoÈZ>›ºÿQ]DDãÏ÷W?Lõ¿�HÎàŒÿ^µ2AÁöÏ×­hF„��Žøôçÿ­Ïÿª­Ä¼‚GLóíÇÿ_üõ½Î:ÿŸ`?J{H9ëО½†;ý?•Uwàs“Æxôïõ& 2)Éä ÷£Óüõ¦–dç=ÿ_ñÿ=Õ:w$œñýEL‹†éßÓ·ùÒŒ`‚G@?>¿áLbŒ~¾¸çñ5 #$ƒžþýÿ_ò*2R09=±þ~…p9OãßüZ¯ Ç túñúÕräIϧâ?ÏëI‘Ÿ¯ÿ¯üýh8ÉÚyÏçò¦e¹Ær2ùüjaó¡\¢8W0°<ò@9Çãœ~5…®Z_Z3¹b ‚qŽ„€>€ ~¸²$‘ÓôëúÇô_4‚I œŒŽÝ¿ÄÓZa’ Ï?Î�;ޤr?žOòFøw9<œžsè0?*wžFG§q×ùSZuTçœ�Žyäÿ!MyNøÔâ$~⡽”›)Fx%GæÀZt­ósŸ×üqQïç‘ÁÿëU-rÈêZå°ùŸg˜ƒ¯Ì œ~#?Ÿ½eøQøpÙ;fK Z ÿ–dîSú°ütÇçu$àn>ƒ9ÏáLºs3£ ÁŒ€zÇùþ¿_:ñG�¬&…7°0vÞ¹ÌW|x‘Áõ?^ÏëCt#<FHúúé¬z‘Ø“ÏaßùÒ�ïÁ=~´Ò‡aýGëA {ã¦GÓ�çYšö¨ºVœÏÖgâ0:äÿ^Ÿçß é-cdn.y½¹"IIä€NB�§SïšèmЙdt\ˆÐ…ÁêqÉüXµAM#;ÚEþ¡Èü½i.7pD±Œ z’G'ØùÔÌŒüÌÁA9 ܓ߂k"ÿÄ6ºmôVÀã¡Æ0;ñüëRÓSIâesÃFG*A#ðóªdžfÁT ƒŒ¹ÇùäTž[¹;å Œ(Àë�äZC KÎÜ‘ÎO?_óïU%@d8߯ùÿ ‰Æ�ןëü©‹•läqÐRŒä~ëßóëN LÓ%š;häžVÛi“Ïnxÿ>µÎéèõm\€Ïÿ¯ùTNàíê2O¥UyF2G|Œž:Ó F}A¤<·É4õäd3RãŽ�ÿMã c§ÿZ¡sÇrFØ'ƒþÏ?…0¦Iã¯ÿ_Šk�׌äÕYç#�_óøŠŒ¶N=?Ïõ¤È+ךBHéœgŸ~ôo8RçÜç§¹tñå£y¹ŽX6àsÆ3�Ó5Õ <÷ÉÿÒždìN;Ïÿ×HfàäÒ »Ž´Žá†2pƒéÿê©<Ò«×'µxÎE1&VPFp?*dr·—œòÌÇõ5ÈZîì“È(?ñЭŽ{ÿŸþ¶)ex8À®/\a xûOÕòVÞáÀ”ŽÊùWü¸5Ý»rÈqŒsŠO*'éæ8ÛÏ÷}Àñì+˜€$Ó¨ÿ>•�àF‡z¸ÎÛæ?øâõÿ:ë21ÔqþÏznzóÀ¡zûuzÒúc�Ê…ã¿ùÿõP˜ç5ÊOŸx€Z®F�hwJGñz/ãü³]ŽÕŽ,"‚xUQÓüÿ…Y’‘@ßÃWÏ÷‡;¿LþUq¤ÄÓðUP¸=wpHªöbO "ŒrÎÝÎzãëI<ÖöP=Äï’£$žÏ5Ÿ¦x’ÕTd r­"ò ã#óÁ­¶»l�±±ížÞÿÖž î»r«ÛŽOùéA�OÌîÎ}Ï^ÿÔÔS",d"€;U]€sŽÜTN¬Ìvöçð¥ÎS>ÇŠv=²sÿ롾ë tÒ±uÝWË+£[×—(U}½*ãéÑÚ"—eæGÆw1êjª9¸ìô§äœ ñØãµM;Ær#ŒÿŸòkb&GÏúÕÔq“èr9ëÛüiâ`@$ö}9çõ¦yàœgñíž?ÏÖ¢–BÃÀäßÿ×Qù§ynN@=³Í*9äà ÿŸÏùT¡€ ?>¿áŠ•ŽÄ‘žÄbšÎäç¿ùö>çÓ©ôýHüGµF_'Øÿç'õ¦+㨠àgž¤­5Ü2HŸçš¯#’zÿž*l‚1“éþ ˆ’ƒô?Ëù~´´“ŸËØ`~€Ò“ׯ9üÿž•!�eµ`TdîRqž çùƒúV„ßþ$ÞOüò–D#¸ù‰þG•o‡$`Ÿ¯<óÏëJd$œ@ýxÿëÓIõÏp_éK»ŽEÈ núÐÌÄ€:sÿÖþ¥81ö¨üH•4œÌƒž>ã8ãU¦�f±GRvI$XÈ €YO~‡š°I8ÏSÚ›�9ÈÇóßúþ´øÜ£†Ç äã¿?§ç\Fœ?°>!ÍfÇ÷Êc^Àœ–CúZï±åÚ«8ùä9ÿt3øŸåU+òõ#¡öíü±øWâw€xŽ8§`‰æG,n…�Ø€?íZFl‚ ÎG9ð¡¹;ŽE7Œc?ç�éMP@ œàãê8Å H°N u=süéYÒ(žG *Œ’xõÅrÚ\-â_˨Ì3ehÀF§£78ú�œþ^•ÖÍõèÖ²›€‚èF6IàIƒÉüûã�¥\ŠT–3€U—;”ðG±˜ü¿ ÀÈÝÀàóôçô¦³HSÔÔÈžÓüæ“~p:cÒ¤G㑞3RîÆG\T…øÎ{ŸçQÏNžžµpsß=¯øþ56zŒ‚1øÿœÐ_89ü}»Ô.à©&«»rqP±'1MÏž_óø vâF 9Î�j�øf°õÔúö‹.ýãÃÀõÈη•ÏŽÏøþtï0Œ’ÏùÍ&óŽO@øÒƒÇùíNÝ×µÉïB³pN3Öœ9éƒü�@’ª¬1Á� uÿЩ!m÷7gþš�ù"ÓÏ?_çÛúÑ»'±Ÿ¯ùëX>5Óÿ´<6ìZÜ–çû§ƒý hxRùµ�ÂVrd åN{†B'ëŒþ5£pá¤ó…ʳõ’ÃDºeáÐ_Àÿú«Á¯nÖ—ÆÜ€^e‘â?ÂpþUÓ¨Ú¦‘Í4Œ0=yÿ?•)ÎöÇãŠ@~b1ô>½ÿưüS©µ¥ ²¶ù®®NÀ^x­=#K‡CÑÌR|Ò/3Ž¥ÏôíWâ–&˜¶X…à(‚zÿ,Vˆ‘�ã ÁŒ…ÝÎâ§ãYuäW:|ÖêÂY’eS��©�Øü�ü+]!¹tÈËG%zÿŸð¬�XãEǼ½ÔëeºçÿÔkšðÉ`º’ÜF$µkƒ¤õV ×»óßð®ú9¹�InOÉ(9ô'úûUŒ„äŸNÿçüšMÀgœ�Fä‡ÐŸÊ«ìuúúÓJg®sœÿŸÖœ±õü�§,C�V¾¹ŠÒÖyä`"�Icéé�zå¼3c%ìÓxŠõ~y›mº·ð¦pOãü«§0yÇs;/aYñ ؇ÕGòÿ?•8Äp:GãÒ¤ˆÜßÓ©þ «"RHÉöÇô©Rå€ç'=:÷þŸ­Mö–lùüÎõÏùÅ'ÚrĆ䓃úÿŸþµ7í#yÇáý üé àƒƒÏ_Ç?çô§$Ä)Œãü?¤YÆHÏSÁÎ{ÿõ…=nÀÈqíJfÀvÆzpÇüâ˜ÒÇ’G¦?ÏáI¼ää1�>?Jk3Ž:àç¥G#’¤o~N? bI=yצj6<Ÿ\ãçèi¤ŽH8éþ~¢ŒŒdàœ/òZçÁýÉŸ½L Iö¹@`SŒŒ~?×ë\Ç…�ê0º•e¸ÜAê(ÿâMt£±ÈÈ9?çüô£�¤’^Ÿ§éGRG¦.ÄÐs‚O#ÓÿÖiÄOs‘ùäŠNp0y=?ÿ×ð¹ϯùþF›É˜œò`zd“ý*;¡û˜ý<ø‡þ<ô©9Îp0;þ×úÒ1ÎÐ9“õÆŸò§ ÈéÏ‰ÈøúÊ_²ÚjÖÙ[¸Çb e9üÿ8®µ5õkx/áaž%dP~è }AàûƒC‚pËÉàwÇé\'�Ö«Fn XšK¨Éƒî2ük¬¶‘-§&ÞPÝóœÎÜûŸJ¾x#9#è?ýtÖÈ$xü?§ò¦ãæä‚0yê9Áþ�)#9Éãñÿ$×3â{égšȃ<ç Aû£¹>Àsø{×C§YC¦ØÃeù#\݉ä“îIÏÿª­)Y¥yO^ù'õ«¶ÌÂ1è 8íþyÿ<ר$Öž>Ó•ËÏk1f�2}Aük¦Ò®˜³Á›‚±ÜÁu99„‚=‡­mA(’XÊœœŒ�C“�Ò¼ûÄq4zF�;œ5ƮӞ]@çÓ~f¶µý>éÓ�½Ç§éIö€z“ïùŽiÇ~Aã­Içã¿L`gÐT‚àŸþªx›#åÆ1ŒúRy¡�ã�Ö£óÓÀÏ_Ò”�MF[�NŸ�BìK79=ê&8íL<ð~™£#8Æ„ç·_çJ2ÀûÿZÁñ›ÉÝ”Ø&8§IKv0ãúþ5Ð/@â�Ø Ž¼Ñõü\ÑÏçþ4¸89ôÿ_â<ã4{t)¿väaIÍ(@ô PÂ?{x?é¹’¨þ•.pr[éþjœF Ïõÿ {F“Ã$r’¡Fúÿ×®GÁW2i¶µ Ì6¼§Ì�=Š�®¹OÐëÇ ÇÒ©jkÿ‹Ä##É$gÐW!á8àc{%¼„_ Y3ЀÎ÷ƒ]µ¼Éu ÊŸuºƒü'¿õüªBzçêÏáL#ª°ã#Ú•A+ƒœò õÿ<ÔWÚZ½Ì„AßÖ¹¿ Û¾©©K¯]”–ÊOà[ú ëLDWøŸå�ÿ®§�UÕÒ«ëñK?‡Ÿìò2M4ªTòp2Gä s¾ºxnÆYy‰4�˜e+Ÿ¨SœwÅvÐ\f‘[p8uèÜ1Q^Ä×Z†�ð‹³+ÀF�r>ƒíz'‰íƒ”g¼ùOpÁr?+cÃi>�éß3% û§=¿>ýu°Ûà &^0q°žWéê)Rhä£sÜcñ¥géý)¬Ä`óïHgæ�9Teˆ`“þ~µ™ç;SäCÕ‰ä×-®HÞ ×!ðõ«0´„ù—n§·§×·âOjè]‘,á†55Ø6ŽŠ¹§Y6ŒgÙ¬ôæ(Ï_”!þ§½O€@=Ͻ'#'‘ŽG?Oðç4d0xþ™ÿ?äPc#‘ÔƒþÎjMç×ðÿëæšH‘ùg#§­ $àã<ŽHë“MÉÇ^½3ô?çð§+³eW®3ŒôèHü�¥ßÐgƒúÿžhg'ŽLÿ‡åR‰ˆÀì<ŸòiÞi#9èúß—òõ H9äœuÇAÿê¤2ƒÆy'óöüøü¿ÉÆIÏoóü½ê=Ýg8¯±ÿ?�5ˆ8ƒô¥Æ0@œ~ßÒ•�Èägéßôó¤Ïžý3þ?•;‘Œàcüþµ$Q  rGùü*qe™& ~Uúg©üê�ôM�HÀ7àヌŸð ð ããõÿë‘B£ '“õÏøqþx!rF9Ïåš“RÓÍχ.lŠƒ-Ì{—#;qÊþg?�®OÀ—eô»½6BD–R’ õòÜ’àC~bº¢pzt<ÿ?óõ® â,d<ù$�é‚©ýGµv)3ØÃU¡�“Âq�GÓ"¥¶•� J14d†¾:§9©qëß�åÿÖýi¡IÎz×Ó¹ªš¦ šf�%Ì„nPB�SÀþy¬o iîRM^íI¸ºÿVUŒò?€*èdbùÀöõ?…9HDØÀ~�\³oÞ䜅Rr}z…aëê«§ÿi“¶Kki3Ü ƒõ'ó§i›ËD½M¢YÕ/o<°ÃûèG¨¹Ê- Úœ2‚‘ŸÀu÷ú×)âÜ ÃÈs¼]!#Ü”$þ'5Ö<àÜ\gƒÜ`p1úÕæÂrÈsm'ÞçiãŸñ«†e`AƒÏ®G?â:®B©dÏPAüùæƒ,è†�€É'ž¦�Ë9ÈÄjyÇ$÷ÿëÒ0by tŸçñ§ÆÊ>U õ®Nâ_øJ÷åLfÎ}ÇJin£ß½78Èç�óý( à�j\dœúÒð@¾ŸJÏñd\ÕQCÀ«Ö’‰í!™zH¡Çâþµ0Œž�èqŽÏøS‡úÖ�gœôÏÛ�þ4î„ý9¥çp㚘Ú·n Èó8©&³eÜPÚ³¡åîIènü*B¥˜:r~¸ãõ悬qÇ_ð©í¡3Ü`œ ˹ô^õÆxÑΕâë*m‰˜Ã÷\~*k¯l+Ìޫޠ—O¹S×Ên â¼€k:¸ nò•½>fÿ]‹¨¶¹ûBÜÌ@‘{{Õ¬ŒçœÓH$q×µ(`z)ãüþF¹-nyuÍbÔŸ%0Ó¸ì½ÿ ®¢#‚$‚Û`*�è:P§|†AÓî§¿½L-¸wjFa�ƒnú�ë\|N-5ì5`RÚÕ'ë¾3–ǾÖoû溘6Å0‡Á)ܾ€Ãô«(ûuëXÙŽØQŽOQ–?¡®SÁ϶-q½~£ôÒÝ*Ý.AÛ*à£Ðñúÿõé-ïXŠÈ J¸ =xëøÓ¥1JrÃ,sÈ85iBàLÏñŽ:C=Á8+#ÜŽ¹£|Ìs½TqÐfš)�Íêj–¿­.‘¥<ÙäýÜJ:äÿŸÖ«xsO:Vš$œæöàù³¿pOEü+A¤Å²çïo_ËpÒ¥i} W‰ÿvƒ§Ê3øþ57™•<ôäóßü vÁÁçÿÖi ä�Ðzõ=hÜO>¿äÿŸò ç=óü¿úôg’;�Oó#üýiIÀ#$õÿ?Α�'<×üý>ûõ©8üÁüȦœžsÎp;ÿœÑÁ“Áã¹ç—­8qï×ñ¥¿@FzôãùP�{q�Óÿ¯IÛ#¿_óþzR䜒 Höÿ9üÍF9öëÛüýiDNW Üç¿ùÇçõ ÄáI# gðÿ?•7æã äéÿ×ý)G9éÓôÿëTЦùaŠîr:òÿ?Jåu BËMñts;±s ŽRy H®@ÍuC€Êr¬ã×õ¥ÿ þ”‡ tÎ?Oÿ_ëK�ÏLõü1ü€£¨¸çùÖ¥½¼AüŒœðOSVPB„‚FFý?ýäÓâš"fÎ2=8 ?Æ©êM«l ›�s�Ecùqÿëªr[bR€ð9?\ŸðþU"ÇŒ)ŽÞý¿ÏùÄö¶©3ãäQ¹Èôÿëä~u$¤¼ûÛ€Hv?ýoóšó‹¨‡‡>$FÊ6Úê»>€Hr=¸aƒ]“.Ž„�ÿ«ó®/â‘´€dl`sßž‡óÿ<×G¤J&Ò4Ù#u¤gž¸ ¤~‡5jdl‰£ÌA‚ñ/\}GQùw©”¬±‡^˜íþ~´í˜’$öœÿŸjãçÛâ�ìƒ"ÎÕÃJAáÆ8õ$~Y®»bŒ801U¢"W2 ©Ž„dóøŸåOÀ8ã¶=:Õ˜>[{‡=—ö9'üÿõÅdëöæç×pITàw*FGä dxèK¡˜�2ÊâXF:„m²üxµt²�–w!Iù—„œ‚>¹$�ÄzW;ãFÅŽ”Êx[ÅÚsÓÅt¯(y¥$aŒ¬ v<2? lŠÀp0F3œƒî??óÒ«Ç#C �ÏÊOîÛ®ì,�n*RÇhÎA¿_ÿX ±ãœàöíþsMÓðÿ?çڀĀHëúñ5‘âMU¬4ñooó^]Ÿ.$@'â?SèÚréb[ç2ZWþó3ødà »’6yc“Ÿ~ßʘ„ù÷\tïÀÿõ~Uí´W ñâ]/Ýf¬uÅ,¿Ä{ŒÒ³ØÏ×ó ¹Á'­&N~´¹Ïô»�팟×üiÙäO½&ã‚ÏùÍ4çïþúõ3a�®2GëŸäj/bOOÖ—8$ç œÓ³þ?– )nƒüõ¤ÎìFO9¥Ï89'ß¿ùþ´»YˆÇ?‡ãJa“8Å4£+`Œv?� Ÿ§<~tåÀ\g ªúÒÂ4I¤¸‘„F2˜ˆõ±ûo_ñÞ& ¬¿0ö#È3 † +ü OQþ?þ¾õ`¡éÞ²üCªG£éÅØfG8EïŒÔ>Ò?³ìÞâl›»–ß#7P;ÀδîÅUÞùØw4»B€n}(ëÏÒ­\�·@t؃óÿ"¸-eÿ²~!é÷ìw4ñï'û’-ÿ›Wd‰²Ý"ÝÚ¾œõ…JŽUr tURÝq’H>ü×3á)v6°„e ú’??ð®”e%yÀÁäUyƒîF@‘zŽÄu9ÿ>”ä˜Jªëœä£Ú—w?{üÿŸçI¿´oÉ^ÔÜä±>˜É®Zз‰¯ªK¯\ƒ±IKU=‡BßÐ~5ÒŽÁO=¹ÿëp?†öîÚÂ%Ì¡T6@“Œç²æ×7A#Û!F”¬ç$ Óð¯¡h®âQÄšWÒoý’¸„'‚NG¿ùÿzž>´§§jp=8?JPz.xÀ§Ó<9Çb|‚zt÷¤]À2“’¤Œÿ/Ðÿž•8¶=Œúdf¢Á$dcšvìa½yý(éÔô8ëíNU,ØÇÿ^¦6çh#§JŒFYˆÇ5*Z³2žÝêìP\‘€*D1�ŠdÉ�›�ëè*‰AžNIýÏåMÛ‚8äžÏëYºÝ°Õ¡·ÒòW.eb=1Œ~™ªK¤¦�âH ÓÀŒ:2È;¸Èüp t‘0aÊí|d©ÿ?ZYïÓ�*C¸ò>´ç·`=04G,¶ò¤R„fR3Œõý"ÐÙéQÂò´¬IbÌryÇJµ!%£Þ>Š­J«™@Î@ }*¥ŸÍsò¬²±úïåVDYϧOçRÁys'ú´åþœqM–ᦑ¤ në�N8Ä*rŒ7#pÞàç5çžCñ–¥¢HqÀÌ~…“‘�ª’ ìãå¶ã±Ò¼óƒg�&ŒŽ$µ•OàÈ¥w�ð�8ÜøS¥ŒJ�AÃò1ìiÑÜ+Be�m(ð}ºŠä,¼OâgÔ¦ØY°ñ8éùpk­ ‰[žgñïP!ó�§#ý”û¾¿‰æŸŒ’K ï™G©ëøfŸrA¸—¯ÌÁG¶9ÿëWñÌËaot§ ¥¢ÿw0þ¦º�:ô_éðÝàbh£›ë½CøÃð«+/�|Ò3*¦ºêsøãËxS™õeàb÷<ºÕÓ£ÙSƒŽ .ðår6œõqôüê¢{Y  |Œ~lt>ô¡²…ä’)rôüë Ä·²Ÿ'F³lÝÜœ1ì«ïíZ–6‘i–1ZB HÆz³{û“Í[Uù~÷NÿÖ²®5«%™í¢Ý4€ï%xPõ¬Û½jõç& 8ð0½kz1ò.rý?ÏçSÆ3ŒŒ~‚�Ž™üÿ qà�Û�éNÀø�3üéÀFýT åyúôëHP>rIð{ôïõÅ)”‚>R=¸¥ U�À' äûsþ5$À‰Ü à1<÷äÿ‡ëQs�Ç8ÇN§½H ׎¸ÿ?_åRù@Œ€xç¸ÿõÕØ‘UÛ€?çéC byÈÎG�óÅ5Väp'?\ÿ*_8ƒ�Øñþ~§ô¤óK0'9<çÛüÿ*vTGß è?•UÔ.ZÙ`uˆÈÒN‘œ `’Éú�£Áà þŸ§õªòÄ$*‡î©ÜÞäæ3øS7ÄškÙKK™Àá@>¤“øSl¶E,Ѐ²(í‚?¨&¬`¢’€cºŸ§ÿ[õ4å ±ÇAà�óгò1Ðø�óþy¡‚¹ F?/þµ  I8á€úàsþ}*u°îÈB¢„² ’玸?ÔÔW ›Û$À!d�Ÿ®ÆÇóéVI�'¨ÏêÀþU-º‰$,Øòã›ÐóÀüIý*_Θ»ubqƒÓžŸËò ÄÐÛDešEŽ0B–c€ <Óô«èWZ¦›, x.¢ ?9¨¸�Ùß ÍSÃ�úE¤†uŒœ¤íaƒØ0÷Õ_ø…¡ÞZxf)ç�hIŠŽAÎTžÞâ¥ð^‹}sà*ò(ƒB#�`p®ã§áüªÞ �äƒéQÝKµ¤ÓNq©, ôéú×?á×:ĦþñC,lM³8äg†#Ôd¡&º]§'=»“íÿëªñò<œ€ãäÏ?—cøÓÈ>ÀŸÃŸòMØuÿ?Ëüâ­>¬#Ñ�?† T®Áœ“Ÿ|‰þUÄjˆºoÄ‹I˜b©DmÎÙ”¡$ûÏÔWi2ͧ©³™7:2+�ñÆÓ¦YHA](=�Ïè2+ C” NI‚{‚sŸ¯<ÿõÅ;<~¼ÿŸÎš\,ŠäŒÿ/ð¥Ÿt±‚ó—•sÔúƒê;~tØ‹On% F åAÿ<ŽEHÇ#××§ùú×9â)åÔoàÐ-‚ç}Ã�áQ‚sôüH­è ŠÚÞ;xWlh¡ÃÊ©ëZ Ò4é%‡:ã F@œ“ùþ¢¹˜õ–×ì¾Õ*F“Fv�Œ~ŸýzŠæÞQmlªÍ uA$°f|⾦¢¸‰C2i\g‰¿ö�pñŒööýi@ä})Ê8Ï)ËÏ_óþy¥ÓüÿžiÀöÅ;�ÿ~)¨›y8,ÝM.Ü1=Èý*PÄÛ9Ç!ó�ô?áLÁÈÆ€7�LªÜÿ�M @I’3Ÿ›?Z¶TmÀá½ê�o+ž¿ýaý*Mû{=Oñ¦™ËqÐu¡X`Çïô§Œ·Ä~•JÎv»ûXhvyS4|÷àú‘S° ó7AÖª¤)âINÖÚÒ9ôäqù ~ó¥Ìï~©µÌi0ÏPsú:¼v8VÇlƒúÒ3È~ßÅþ5,k�Ÿ|ŸÊ¬y�€s�Š"�FÜuãšH/8ãüjFQçÅÿoä)Ã*ÅÎ0üÍUÓ� [–”·ýöäÕ�À ?§j±6a·XºHøgõp*ª…Û�0:õ©-@½º’ÖÙ„—òñ©É\œW#ñF¿Ò.´ï-»+A"‡Ç•ì~«‘]�–‡}w½Õ¼[à™HÜ0åXdÈþµæºF—:ü[�OAûÒ×)×ÏþË]Ýæ™w§È#¸Œ+žAÎsÉ_ï?:çët?Z‡qŠä ÊÃ!ýÛ÷O¡úöÿëÔÎ�*ÊG?ÔÔ71ØZKu)#\�ê{σá»Y.^]rì5×ú¬ÿ ~¿Ž? + Ê ÈíµWƒú×+©x¾H5¦ÓÄiöG;Œ9ïô¨ܽò¢€†Ès±¿Â³M–£rwÙÃ<‘Œ‚PgÿÕŠï£<(ÆÑüªnqž§üþB�Ïœä~þºp Œ�ò1ÿÖ§ÔzñôÍ8€zÓ©úf—ø‰ç“ßòÿÖœ`þ¿ç¶?JqœƒïÓõ¦õÈ8éÔã?ç?•Kp•�bA?B3QŒzgë߯Ïüš™c·#óôþB¦Rê1žý?Ïò©•Á_SïÛüÿ�Éàpxðÿ),I'÷OÊš#àçôÍ< “Ž€àŽÝiBà'œþÏæ?Zeì¶‚ÕCJ„†,áÁ ýk:ÇYŽyf‚f@ñà¡ÀõÜ…^ DL[ï�IÇ=�øc𤵉^Y×q´ OÓ'üj„mƒg(à2yl?м€HêHçßš VääÀ#èiþiGù¹PHÈí�þµ=f`‚8äóõü©dœ4±ôæ?˜Î?—ùÅ+Üb78Æ�Ó�ÿ]7Ï)ã� ïÓüj f?h³É%‰‘‰õ%úõ1”°îFp8ÿ>ß�Z¸”ÚÛ­ª‘æ¾SïÐÃ'ñªêýI.@SþŠÑ�ÃQxŸÂ·öò¶É$�yMŒí*†MPøU®\gj:¡.dÓD,íƒå¶@\ŸB¤{=*‡ˆn¿ôÍr)Yj8†ãi𤟣oεþ*ÞA?ƒJ¤ñ» … +~éçó4Ï…zÍœ ôا¹‰)®�œ ÎGèAúU{ÈâR,N®‡è3Î? Šâ™ã>õ®àŒ`col}r?#G§ùéBŒ°^„œ}9ÿåô¦êúŒ:|0‡oÞȹ�ñØÇëúPÇ÷Œ:ã ~9ÿ\wÄ{bÖ–—ˆ~u ¡‡w/ã‚*é´«¨ï/l®€¯™GL 0“ÿê¬oe4+pqžœ)ÅoÕ6@Ic$ö¦p y©#€ ö8ïþ�1�™CžÀ‚çéúb— ¨.�ûD[ƒ©•N7�œ¯¼Šg‡4ùm­^úï&úì‰=Uy!~¼‚~¸í[JrwŽ�§óùŠçõx”^Ü)Rѹäž p=ëŒÒîΑ¬Ë ÁçÃ6UÐprƒØäõ¯Lð=°Ô%‡ZÔ‘cK‘£ˆŒåŽŽäzú×¹Ñ\Ä¿½¦»7óޏu'·î��óéJ àÿŸZwOçҞ1Ï8ÇùúÑ�Ž{Ó—ûÿŸëNÀ#¯Ò“îÿ?J•0ÉÇM§�ÿ^£ã'<žxÇjzŒžƒüÿõêu {�óéR£q�=jFlð=©7ddzõÿ?QM(Þ½)V1´Œcüÿõéå9 c·^ž•$$di$UÉêNùäV-ö«ƒ´–åÜ˸|Ý�㊾³Euµ¡uhñ»*xöÿ>ÕÒ+,¡¾é…‡çO¼@.m�KlS?B*½›“hªÇ%2§ð«E²Xç¥ v䡯N0zΤ Œ69¦IñÐwÏùüé�LIþqɤ󉗧H¿™ÿëzܸU?upqêɪ¶3Ÿ±E‚rsǹbjý V�Í'ú¨¹oö½C%Ì“Êò]ŽGãÛõ5ºý¢öÞÙOúÉU ú‘ÏëXþ;²ŸÀ¾.µñf›!Ï&f„t*6î_ÄsøW{âë[m{·öQË9‹Ì„ܼ�øôüO¥`ü,ñw ŠÆêáãM�Û~ñ°Y8(ï“�ø pö·°Û|z´¹2¢ÃöÉÔ¹‡úÿQ@Áã ÿ?ç¥8qÉäÈÿŸ¥ÉÆ2qÆQȧˆÉƒŽ3éßÿ¯RÉ, UI€ãS¥š•à“‘‘ÇùöªòÂñeI$ޤuÈ4Å-ž‡§nqOYƒ‘€1ÔšzÊHRF=ÏÓ*9#“מÝô?äS’L�Oäþ'§ê:Ep9Æçüý GvVKYQ†AROnƒüGëí\Öµa¤iö&âä2« w[h"³ô;("ñ,&0vý—xç QN2Oå]”’*Cž#�óõÿ9«9Æ®ÎC9CŸBÇäk5£"̧%¢s�l�XVÞ¡‡BüÇùü©Ü�zŽý¿Ïõ£¨Ï<Ÿ\€¦4d°d%Xuô?QøVN©®�.úƈHgp›�ôÉ?†A­™Ž"‘IÇ ~T¬ HàçÿÖɨeÞÛ‘„��l•õ5nñ�=TaH‘‘“Î?ü©®æFyžrXûç?žM+1¬á$„žOóÙøXÿÄ¥B8Á”–Àç$Œƒé\ƒl"oˆ~"¶‘ÂÄ3È”€#úÖ¯ÄC{àÛ‰"…V[VóAAÉSÃ~\À×5©M·ðvÓS ŸjFXn1Œ‰•oÄà¡gá$ sà™K*“§*T2±Ÿøó©|k«¦ˆ— ¡DÍòÆ r8ŸÓ…cxgF’ÃOk«Ÿøÿº"G'� ô_˯¹­Å�m.IFIôãÿ®këBµ¿¸Ò Y÷ox\ñŒûŽ}qW­'.x¸‹‰÷Àê=AÏ_zœ Cü9öíþ}©ñe»“ϰªZ�µ½Þ¹Ko²Â$õ X?J´Xã-øp?úÇò¬oÛ‹Ÿ \dae�c°ÎèJ¥àÓ,v orŒ—ñ¬dê±� Àü>µ/�²l`FÚ¹¼ÈÐç·å[Ó‚]°`Ä‚}sÓéÎ)¹C¨È ;‘“ú‚¤`#'žAûçò ô‰ë×�ñ(9#€sØÿWùíË£Á®jó$›Iƒ)ågãŒ~Ǹ®†BärA$ƒÿ¯ÅUÔu{]*ÓbÙ Š:‘Ž?SX,úωI‹[,òO�SÜÖ4é‰âky­;±1�àí%—nOМƒì+¦“Q¾·ð¤ÂYA’ydÉaA8©?‰ü>Š¢¸‰g¥œÄÙþÙ×!yPH9Ç¡âà‘Ó�Ê¢ <ÒààöÏçñ©IëÏùÿ^ cŒôâ” c¨ÇéF0¼sÇôÿëS‚géØÿŸ­O|IžAPPia· Ö¥–Ш„íéþT† zóÍ;s.8=;Ó„¬zûÿúñR,‡ŽÖ¤ó9þ?—ÿ^”¾:ó€súw˜ôÿ?ÐÖeÖŸmz ªIœ#¹ÆÞÛéSMs ±o2>˜ðÞ`Ë5Öh °è*¼nˆîrsVîŸpÉþ_ëWo{-:aÕHÏãÏõ5F<%̨8 ‡ZŸ‘Æ(É “ׯ…WnÖb¢c%¼lÛƒ*‚pÝN;U/ëCX³šE�Ëòe1sߌçüúVžìË!üª1ùÿ�>1‚§<òIþu^Á[ìVÀ ±Q�ß'â?*½$’$_e# §ž0sþsLˆ²ÊØ=#$ýx­èÄ bÕ˜€€®zÚ—âü&_Ç,‡;$aÓʈ®�KÓ­ÛJÓç6ñ³=¼Nr:�€×œéöPøwã º\Ê–¨¥cÜ?‹ï¦?&_­sº­ºÙügÓbP¡N­Ác�ýš½gQ¶ŽßO™‚" Àgn6ÿž¿…yMã7‹˜­cŒ+‚ õÈîùÍ/BqÅK#ˆ4ˉ\d,LßžEféÖPYX$qF#ó6»�ê@Ïò« �w k�Ôí¤±ñ½ÌñÆÆÝ•„˜ì².Gþ<3øW¡@qo” €ÈÙô5Ëx_Úë/ ÝŒãßã[Õ8*À�?Gõ§î*ÝG_zE6{qþn1‚?ÏùÅeø‡P]6ÁËßq#� /\æ�¤ÙEak ¶iÌ”ž¹Å]M ´�Àc€=`^x¡å“ìºU»K+|¥ØgØVmö‹2XÍ{ªÞ(¹|lˆœ“ÏCéG….îÚ=:Æ!p[NË#cæ�ÍÏýõ�¥3ÄZ½ÍƱ+´¥xÀ'Šï`\F™� ãÓŽ¿­ZbB‘Ó©þ_áPÈ8=zçó?Θb`¤õ¿~‡ÿ¯MÁŒsÏ·ùÍ8 äÐcñÆjLs郟oËõ¤åNN3ŒzÓãm g9vê1üÿJÒH�;OLýzŸëV™!`»€¾QÛ�:þ†¡†hŒE×!rBƒ×‚Aþ@þ"¢oœ“ŽO¿^Gõ¦ùÈçœ{dOóÅGöpAå‡P ã�MkG� §Çoëý)œ®Aú}?ý_­7scéüùçù~^ôÏ õü¿¥#>ðÁ;O±ãüô•eWQ)ùppàñ´Ž ý ³�Å�Lõägôõõª‘ kÛ«�Àù§‚ð‚ØýåŠX‰ ¹$géžqúŸÎ‰íÅå¤ö¬ÆÑŸ©ÿ?Jåô ¦:¨YLñÄŸâ'õV‡Ä8ô-:õ†dó’8È�õÉý+nn%rz'õ¨²P‚Ãcðoð8üǽ5A^ ò@ÔŒ…X‚;ÿ��öâž÷ÀèiÛz�úÑ�JŽ˜â­Ú �d©û¿Óÿ¯WáŽ>T¯Þî~¿ýjc´(ñìϘä¨Ç¨ÿLS¦‘ Øœ­Aäù„tǯáLxGˆcŸËÓjXü¹ÿ?äTm ÆzpýtÒăۯõ ¾>ÿýéFà€OOóøÔmy ­Òœ3mÚN=›5ÀÏV÷×ÓFw×€–Ý]W‡u®4X�+·S{‘ÿë­=ë"ïQò™UGäõ«Ò éõÊä7àWŸåTçÊO€àô'ôþ¿¥Lp'¦SiÆXûwíFd“•Aîzÿžj¶¦ÿbÓ.&Sºg(‰þû¢³|:RÒóPÒÄD¤?÷ÈOþƒúÖäëÜõ\ñîp*ÈèO±?§ÿª¬è1ˆl ¿eR DÀ=بÁü:Ö¦™gÕ¤÷›9|ô$Œ:—YÓ"³Ó`1 23aÜun3þ•dÚýŽÖyúáa1ÅæF ÁÞÇøÕ/ˆ~(ÒuŸ =•¬ûçݼ€: ¬?­YÑülþ³Á$�giÏŽÄ(ùóÿø¹u»Í/VÓíž+½=ÒEsÓ*Á—úþ¦ÑgÓüUñ:JáŸd·k$1†W'rŸøAW|aã™Ð_é�«–y6«z�ÏøV†u­+KÑmíäI…Ó ÷/·;Ÿœþ¿ é!×´;ˆ&V¸(ç0F9ÎOÎ’Îxî¥V d9ÝÛéøU‡ P« ÊG ÷äÕH"{IZ“}¼‡÷\}ÎOÉùt«KÈdÈ.;/åüèÔãYl °n\Œû¨^_Öšã 'ðé�çJšç†šÛœqò°Ïà}*îŸn·M6X �^qÉñúÓ/mâ´%üÕòŠnfÏÝÿçšáíÒç_ÖN²û5¤»`�‡úÀÉàŸÏé[Ïwosp G rÌxÏR1úÖ‚`­¹VCÎÖàý­eYYºIp–‘%¬(ÄÉrø,O ôèjg�LšÇP·XžCöf�Îù,ÅH<~gó®_Âì–þ"Kcò®�ÏÆ+�®1øÔvÝÝ<¨ŒTœq^�&8ÇA´g×§ÿ¯üš�·�Ç^ÿ_óøÐ£,rqÏùþu1ÁÀã½ê6@I8ÁÿõÿŸÃÞ¢ÚSààp>½:\``cŽÇëþ:pàuìÏÖ¤@Â@@ã·µhFÙÇÌrOÔqÿש\‚¨…NâIRG“Ïùý)‰'#žz×¶?Ï­N±¨èx<äqÖ•€ ¤ž÷ÿ?ç4Õ‚%–IQd�‚Ì;ã�Ÿ þF¤RçíÛÿ¬*«4*GàôîÏ?�Qhˆê Çoþ½1ã9 qϱÇùÿ¨±ƒhøSÁ>�+RQ+�€vŽ©ÿ?ΰUBj¶D��=á¸WKâ;‹¨c dß¼Œ4펻T®GþjÈry#õªIK—Vf`Ùêqî?›~F§*§zv9'¦F)²Ê¶ÐË<‡ÄŒÍø ãùV^›nÂÆÙ¦É;5Ì Ž¬ç#?@«êÍòÇÝY21éÉ?–1VOQ’On¿ç×ÿ×Lªk&ÝÕÖE¶%HrXƒøò+JÍÌWB{�Ë%™˜c�ƒùàV½çŠ�‘ Ó`i¤'ï�BŽüý«*}PÔayµ 6‰ƒ�Éë�õ¯=¹°D$�’?:À¼–+m^’ èc(8’2ŸÎµgÔ·—7l¦0 Ïñ�Nßä×/¬_´÷QÜ…HÀèý¥[¹ñj %ÊÅ1‘%Æ2~§5M¹h¬¡U¶V÷Ï9ýkI/%fÍnßçÖ¬i“yú•Œ­¡-"à‘€Gôýk¥`QËŒã2Žr3Ô{�Öœ`ä#üûT7æD�¦K²•dí #§×ÐûÕM7U/hæXLQ…e‹q劜qõ ¿‘ô«¡p2©ûªª õÇ_ÔypþŸÖ…%Y@’{}úÕÅK*[x€ËÚ±]G±lŸÃ×AãòÀ–òK¢3Ûîœý: ÖŸ‰_=ÉÏæúÿ­D@d*GƒØÿœãüæ˜ !•°H8>þÿ�_ÀÕËmBÚÉžëPcåC �;”€G~xöük“Ñ`}SR¸ñÒ21[d#î¡,¸ éšØ»….-$ŠA•8'ŽGëŒÿ“P¦�`²‚G�T’®'$ñï“ǽ-�²ZÚ=“n"8̉!䛞ÝIÇ¿µM¬(y¡¹~þ$ú‘Áý1D©wc ŒªÍè‰#8èGò¬MNÑì´É¦¶%^;ÆuQÈÃ*çŠâ¾Š¢¸_ˆ‡éŸîÍÿ²W…¶äòýt‡w~õ2cêh`¥Oó¨ž>xô?…4uÉçáK޼ƒO#ÛúU»RTÜëW#'�›ŒãëLdYNå+@#ÏøT© �óÆ¥ ×Ó�CÔ’*·Uõãüý+>h'ŸQþÎj/œcáUî}¥_”:«|<³/ÏAøW-w=óëZ¾*4«�H¸ÿÙV�"{Ù¯&ŽipGqcª°'ÿeÖ[¤Òé÷qùØùCãoR2?öcU%„¼´��Œý_çRG¼j줶9ÉÏ?þ¼Ô¡p¤ R�aô¬ÛÂ.5›^±Û)»”vÈáçüªhã[ù˜b¾IîÇ¿øÕ˜Ôm8Ï,N}¿È§Ìæ 9çÚ̱¡< ö©-ͱ¶ë!ŒÆ‡n8àþ¿§ë6zVžË9c7 ±FO§óª÷Ú¾¾DvЈ-ÉëŽqÓ9®_ÄÚµ‘ZG.ìÌ >À�r°,Vó¼ì8ªzf¥z¶ñ¯–vª>—Æyüɧj‡ÙákE€“ip;Xš¸4=N æËKk((€vëùг°5OÜÞ¬ †Ë„?Þ3ü¿:ÞŠòN‚Ñ1S%ì�4Qµª.òFî; ÿJÞÑUN‰ ã€\qüF¯«ò1Ë�q÷‡­+¢ºa•=Ef]K=•ü -<“�%$Ï rF~‡xÜGxþlxâ!Àì\Ž?—çRgôñÿõþ”uÁô¬l:TfE?,à)ú‚ YðÁ¬üÉ?ËøŒÿ0k?C@ž#ñ4|an�lËþ¸NO¿Jcü­¿€½½åüéêím½Jºú©ê?éYž-ÔVöÚÃÃúnMÜÁ|÷ëå¦@äúU›kHtûHm`bˆ_ñúš®tÛvÕEéR&�²Fõüé³XŸ·‹õ’G1‚RÝ ë�×�zÓ…b�.`L•¹¶*‘ŽG#�®k2Ĩ¿„0$&6ú0Çõ§ÜiQÄö„"«Cq‚£`�óøW+u¨i—óÚÀÅ£W;r=ë·�ÂÆ™!GC×�þ¹«%ÆIÈì=sþ:©<ò_ËúbŸæq’9ã¿çþ~´Œàçõ'§þ·ùÅ0œäã’3õÿ9ÿÕF00z�ßÓ?­sºž¥s`ÆÝa‘·��œ€pò¬YßQ˜,¥öàûVtÖš�ÛiR89äWK¢é—‘i7·nÍ5Õ± �ÉPIãê@¥hx\Èt%µ˜qk+Ã"ž ‚HçèEnܾö´|c1F;Œý–ªNJH®Fp2@öê?"jÑRyÈÇ_ëŸóéQà€R}ª+ÅV±00 ö—`Ž£«ÀùŠmÃù@º¨bdÚ t)ðŸËÞœàFðÔ|¬}IÇ?™�hØ•%ñób0.AÊ–#øy¯ôÍyòlyìÄ}pq\v¦�µ{U I=ø5vÊÌÃØ<†ÁúÖN­`9Áp¿LW/±šéa'i$}ëÐ4ëB–±¡bJ¨^: 1Z)m±‘�$Ùã§ë }gƒŒ\:œ{†ÿùþ]9ç$u=ÿ:ŠâO²Á$ø%W–М?<ÔÙù�Ø�Ãük6öÞÖ Ûî˜$”°!ˆ¾ Î:`�*â�c^„™H9ããÿe©H €àƒÇ?�6ÕÄ« ª0C=Éü³Šå5kB"²œ©_µ[†$Œe�$þ$8ü¿-}mÒ÷áÄ%ðI”¶ Œ?‰‰¡ok5½´0M—’$ [’8Ï4âŒ3œƒŒ}¹Ïùô¦0É  `€9 öúŽOàkš×d}oW‡Aµp#Œy—2€ gòÜçµtÖð*[�X¤HOÝQ€ØІT[Ž$c®=#þM.Iàœú÷ÿ9$ æ‰bä "‘}òTÿ�BÎ.|9m>AhÛ{0ÿ)Ú;÷KF}Èà�Èþ•�â'T²d¬¢D?PTƒú~¦½òŠá>"ñ.—œ¶oý’¸ä�b—ÌQê­<8¯©ïþ¥)�r;væš[$ð=ÏçM'žGŸÖœ £52&G­XM Œg=ŸøÕ˜äÔ94¥Är9ÇOÇŸëIç  œ`Z àŽ¹&”Í܇�~i¾nç44ÃóÍ4¾Iÿ=ñUÙ†z àU+æ‘"3D…Ý{ãÿÖ+˜ŸU½½�´v²¸Ï]¿­fM§/KIGài4ý3Tºº6©æ[ÆA‘Èàp?™®›PY,¼Q¤ÜíÅ¢¢Û;ƒr�¿­u6‡dÒ8xØgÜsý*¬KºÙT÷]§ü)-X²²ô<6~½\Ô¬¸#ÜcüþT"–uœžžµ\šââpïa ?‰Sƒúîü©`o6iA\"–^½X“Ïô§[`ÀW<¦G^¿äV¥ßˆltk1ñ�Í¢²¶Üä´yþ´¶—šž³o VP H (,$ck^Ãö– ÌÒŸ¼ÍÐb¶Ð¤11*¨¨O§µq~2Œ·•3 ¹ÂŸ÷V¼÷R†LóÅsvh°FÈvþfµõ `ò¶Gð�é\V«h`�ˆç }ëGÃVDH×ø`W‘þ•ØÅkž¤þçÚžbØ`’Ž}H5µ¢ i›sœK ÿÇ�øÖ�PÜ~^£­GÛ®%·n=½{ƒOkµÆ#ÉW208*جý(Û,‘'—'ÚL™Îƒøí­·ð3¸Ž¿‡ô¦3ât‹-qèp@þ¿¥W¿´7û--æ[ÎTã¾ójÊð„¤xŠiä/¡ë�¯Z±kj_Æ:ÍäK@ÏÌܯò?�k˜›tóý{Óp9Æè}:óíU//¢Ò¬&ºœŒD¿(?Æ{σô¬Ÿ éóÿÈ^çþ>¯]HÉÆØÿº~¸ò«¡–5Æì©Sý0j¾ÜJã’Xý)‹§^†¦I¼�_N�œ !*?üUfÝÄmîçŒû·8úg�é[sys}žLq0VüO?μëRc=Ðâ³ê¼Jícâ5 ÿäýøTØ8À8$qRF `H$÷éèqßüEXû+�ÁÁõþ±ü©‚'8'ƒëœcüû~ox …#œóôç�Ö˜Pú¤~Çùÿ8ãã>‡Ø~§ô©lz?LŸÆœˆÀϱÿ?QR,€+,“a(ÌÍ‚Ä2¾@�WIK³¹�ÁHAÐ9©°á€ I ž™é�ñ¡„ª2°CŽHà’xÿ?Z�y9ês�óúQ½‰À=?ÏçK½²9aÉ_”ŸpO?¡©ý3Áÿ?ç§½V$K¨àp¶±‘×#{OâÎ¡Îø£“¾_©“ý? �ÐJJtÊ¡È þ„ÖZk�ÛxŒY8!®-žO@NÖÇâA«Þ»ÓôMC^¼¼;QZ%VÆNX9 zgÛxwÄøŽ+‰íã*‘Kå©n¤`:Ѹ¹XäXÔfFQèOLúu?• žU£òK›¹9?ç¥y6ª»¹%a�NOøWªoþÚ³%Fß4~¼ùÖâ(LFS'ò¬Ûè·ÛÉ‘üóÁ?çé\uŽ?µ¡' £õ×j’ËŠÒDÅÌÛ‘Á#ƒUü+ªO<òÙNÆ@ÌBO#?Q]%ä'¿ÛüNõ®Ÿd:õý?Bi%*–·,à!bAÿw?ÒšÃjï^U€%~½Çàj[Ëh¯mdŠA•Ú¥Hê­œçðÁV'ß<ˆpJ3¹Èý f1—Ž Æ~§çëU4ùÚßHYbÁxátÁŒ�ÈÔ>3¶žÓI�^BÂÉ£B�ò²…#óÇå\†µs$žºÄìˆJ`ciRÙö9^}q]̲]%Ü0µËæE}Ù9çúâ…žy€Y¦·  ƒƒøç·øÖ~µª®�¥=Ñ9˜‚±É,@ä}:Õ/i¯¦Ø<—*>Ûv|Ù ê8á3íüÉ­;¸šæÍÒ2DœÁÆq�óÿêàŠG›OY%¼1’O¨#‚}ùç«ùÚ  �åV,Hût=p[œ*¶‡ Ë£ßY�KÆ1Ž¥X‘�ʳà¼]*÷ξ`&*U,¡ålñÎ8gŠÐ¶ŒJðŒA‘Óõé_@Q\Äõš_Òoçq éè)àG<Ò¬E H€�†^ÙÎ}yÿ=©ZR1ÛùœRÅ8ù¸Ç_Ê“Ë#¯sÏùü©Á�o×ÿ¯OVb?ÒŸ¸ç<ç§ùüéêÌX=Ç?çÖ£¹—r* �g’0_ FÂ=òH v;Iaž´(•Ô�Êç¥1™—!³¸ps×QŸâ<(üȪêŸeŠÚ9e^}Ý ýIü)Ð�ÌQ«ëUï¤[;'�óµ£ã±éþ5‰©ßC­øRÊå Q$[{‚¿-z-׌t½6ò .ÝKÌdX¶�€œàÿZêIXã,~U¯µU‰¾ØU€"$è1Õ¿úÕÍøÜÿ£Æz4cñZó]P7‘(ŒqÅcè61¶VËükZñA“þ\ˆãÊ#(ŸÿZ´|03hƒL¦øÕ=SR½µÖ$1Îß»s�ž ⻦–v· `HÑ¿æ3ýkcDÃYÌ;,ìãƒýkKõúŸ®i²lk¯/£ä}X ’+æ†Æà8=�ùÉüªµÔ1YÜ<è‡u2g¹ TŸÌÔ‰‘ñ“ŒŸs×üýj9°·ÖL{‰#ýJѶûKM,Ѹ�m-Ô &~óäÿè5Â<­¥ø‚â ìž]ÈPÃ…sž=ðjç‡EÂø›ÄQ‹‡ÄOd€pdùb·-îîþÏo0¹æEÁAÎ3Óòsp>¤þUÇjଶrc…™ 8÷¸V@9S�®?úõBìnAç+Ûñ®ÔùZ¤mÛpQþÜßX5í�‰ŽwØŸÿQªú‰&Ÿ4—�X¨QƒÐg'úV¤ò˜.¡p¥ŠÝG!\@eÈãÚ»{¯²�†êÝZ2A tÈõçë[b\fÙ˜ƒ:´c#»�çE¤^lP¨#%Txì*Üñ#2nR]²¨§;°?Lf²m"ÔË"˜çˆ`¡êËü$ö#qúcµh1ˆJ�Q€“×d{pOçY‘˜ÒÞx€ ‹ÓçœAÇäQZ=YïRµ·Œ›a HÉ�~§åzˆ¹¹ð¼f§·W•sÉh·#{ü þ5èWqÏ.¯§ÜFØ�Rç¨l€>„ÿ?Æ;(EœÒÚ½Á�–3rŽHú ƒøÁ·?ð’ø•®ˆ'MÓØ,@ŽN£ëŒäþÓd‘’r¾?úçó¡Xœ0Èç�{ŒŠŠ(�IPNßlƒ�ôä�ÃéJ™òÐãøAéíŸëR!Û*8ç ‘ïƒš¯]ê°¼V±]i¶†RÍpäou;‹‡LüšÚÓôk-#"Ö$'-+Îç=I<öúVf·hÖâ b23ÁÇoÓð¯j¢¸OˆØó4Ìÿvoçq2=3úT±à9$�ÓüÿžjÝ»2Gçòù…Ï^Ïë�¬I™Áïþ~´‘ÂÀç'?O­H¨¤Ž8ÿ?Ó“[¦0¤fªMx,â“u¡}€Äã¨ÿëøT±_Ey—eUÓ÷x’Ä|¿©‘ÜÝLŒc‚4ÌyaÎAÁ¨d¶»–vy h@ œuïýi‹u{gv<µISÎ*nj⢞kû›ešÚu�Ü‚èôþ”èD‰$.ÆF9=}ª~3ŸóŠ1îwny �ìàùS #ïtö‡ùõ¯BaþŽƒ¾À?¹íF5GÊð§šã ù|i~½A�ò5¬§n¤Äcñçÿ®j¾ŒE¥íÕ�üûÜ S=ã~Gë‘W]¶ë’†Q ú0áL¸R¤0ë´þkÈý2?“ŒŽüÿ*©tL·Ö¶Š3·3ÉéÇ úŸÒ¥B²ÜÈø!PSú“M9 r}ØŸÌÓ¯­£»²–Ý—*>9ÿ çotxì,Râܸ”gêùúօ݈9Ô&rÅv\ø­ox—Ä€ñ zt-¶Õ'�NÞ®sùšîÂlÏ—Ó'üý+—ñ² ¡þë§òa^kwóÇPzÖV…‘äg‚'$gÜ ÕŸæun1²¸ÿÌŒ=êï„ÎûF^rŽ?–)uÜ]ß3£‚¯’I÷®‘a[{8¡\â=¸ü+gÂRÛ´„w*øÖEì /\ý+H•à�½�PGù5‰â;…l†ˆÄF;«ÿ³UèlÌ©‚Sæn„úV~¥Ú÷À®¬Xn<ÃÇßü*Å«ÛËg¿3»/ÍŽ9î*­áM¶RË ¥÷Ò�εtÙTizã(ʉaCƒÐþgó¯=Ö¡¹“Å“ù‘&úÝü–�Ȫãñùüjo }¡µ�ji†~Ò"‘0~øÌƒ5£�ÊhÖ/5ÉY- ”ã£äœø�Ä:¸°Ò@¶Ë\Ýb8y<à\~6‹¥�#LKc†�Û|íýç8ÏáÚ¯ãkŒg r½2`pŽ m�}ˆ�óéN|™AÆÒô9ÿëÑÔãÔÓ&¹0Ç Ec=ÜþahÖ3´gù�aÍO‡Vòåîµi^僖ŽÕŽ#‰rp1ÜñÞµnaQm–¬N ítÿ?Jâ5}-g¿gÂŽs[‘b^ÿ(þ@UÅL®@=ryú…Ki‹¨ØQJ‘ÏBÿª¬´E'r0ì9ö'ý?:ž 6€y<‚ä*AÆ9¦{gü:þŒ9Î_óëȨå�ó�•9ôÆ:þ§ôõ¦›˜ù”à;`€8ì1ëíîk'P[·žÐZ)=MšRN>@qƒí€JÔƒ’øƒ×·ôý~µÉßkœqþƺ/ Kv ÆU™­[â eOC×òçõ5Éj–ââÒX_€ÙÝßÓüÿúê¤qùZb¢ô[|ôS�åODIíM«€c–Ü+g¦#ü SÓe’çÂ7pJI¸·ŒÀã¸hÉ?QƒZ¯æÚÇ.FZ5b}røš�ÎÉËc� 8öaÏêçPj¤½¢Z)ù®äqÔ(å�ä?_~f8y#aÂnù œþ'¥-Çú€??‘ÿ?…9Ne•°y`?ñ5wNU}A â)üP�ü‡åX›f°Õâ$¯jÄg¡ÿÄV–‹dé¤êë1Üå"lœÙãè+¨ðÅŒ–Q\«¦Ñ#†RGPwÐ[³sƒ¡e$Û®Ãð¯&ñ) ¬]œ -øŸë\v¡ j'PöáX�H9ö5…îš{i•ܱ²‚NN0?2jõÈ& 1Ú¸&^¡Œtb9öÉþ•éq+ƒ(,p¨ÅYÙ1tUT›qÀÆ0?§åLÓ/m,yµsó,�n’ @õã9úUûíH¶’Þóí! ‘AG$€¬¬¸$ÃÞ¨¿�ôh/m¥W‘ÖfeïqýMT_‰z]º¢¥¬�° 8ÈÖ Š6»ã+`ØŒ±78àñÓ�\¾¯âæÔ.žKexP°p›øtÁA]pñľ³»gIîÉed'ÆO¿JÃ_ÆeiË%®VäῈúp×bûâXÔ5ø5'¶p±¾ão•ŽôôÇ¡Үô¿_A£ªÏIq,ûò1XÝ >ÁTŸÇÞµÛÇö-¨r®Š…Õ ¥��ü+3Ä:ö›ªF&Ó¯š²¥rTm#Û­tž—J‹N·Ó´û¨ätMÎù˜ÿÄÿ/AZø$ôã×ð'úÿž)ŒpÛ�ÐŽ‡ú~#ÒšÒÄ2²±`P ’@'¯AŽ:«¥Ê o4Á¦Œ’2FJäãŸQ‚?ëS¥Å»î :’ SÏqÿ럽oYËÞœ0uòÏÝ œ€AŽçù:Îqqc ¸Ø}GõŸz­ª+8dçr zÅÁ|HÿY¥ÿ»7óŽ¸È”néè­HѶÖÛÃí8ç½_H›ì*¬9órÿë t*A›Žÿçð`v9Á·óšqè§wÿ=? fOzý*uWdp0è ÏLÆ’i‘Þ Ê.S>˜ÃÏ�Yº*^¥½Ð» 3]È铜)Æ?ZÓÜ6à’Oòÿõß±ýÒcŸ”cëþsXã.¶r>+š6ŠºËÝDTý2)îJÞ3«nOþ<úÕVù�¶µ§Þµ.­$>„üÈ0E]¹8ñÀýÙmÕñô?ýz––-Ã’„?øÿ:lƒêŒTn£ôÇçTm_í77wJNf“Ɉú"qŸÏ5v‚:'éÎ?¥DØ&u?Å&?ñãÿ׫!¹'¸ëüÏëT¼LË€Á Ͼó�çI®Ú4Úíü¨Ø_7Ì|¹»©i�q­³B…¶yOì@Aý•vÜàú�_ëúW5ãO›Kr�þ#úוß\`•€‡#õ®Z}A>ѦyyIŒ¡g9ûÿ6?•u,ÛÒ6Ý5Êx•?v�ŽäTþ;£�xíÇâGô®º4”1ÄlG©ô¨§1­»!U34e°Ì™ÏLcñ­›}[Dhd°µe†eˆ¬jp|sùõý*’øÏC´]¦gù]° t’äqTâ&“¬1˜å•ÐÈXã®â?øšiø©aÒ–,ÛpËVMÿÄH.4ß³%££ƒÄ›ùýnAàÿ´zþË©öApråÎFqú[Õ~ Äf6±ÛŠ)UÕƒ}í­‘D?–ÛO¾´ŽÌ©»—ÍfVä7l~Cô¬ø¼cfÖÖ)42™m.Lâ@s»'•>Ý«fÃY²Ð4XuHƒûRV+¿–HSrä}X¿ýóSCãm{m;ÌŠP#gb²t9ôÏíö»¼ÔQà·B¶ŠìN î~‚»Ä‘'…f‰Ä‘È2¬:0=ÿZV‚€ÙïïL§ä‘—s `œnÿõÕ+Ë�—Ó¤„Ea'L8ç<{c?…\šhc“ç©?çõ«Z}Ô"ñTL‡ÌRŸNÏÖ´å•!Ô¡M§÷Ñ7Ó ôþ�Là´r&vŸÏÏM<›¸É<÷Å$<Æ€œ|£§Óš¼cÏ¡\Ztn|åpû@\ŒŽsúþXô©"¿†ñ<øˆ1³�Î>b©D¹<’;þúÖŸçŒdž?• ˜–©W·,>…r?¥K x;zg�Š£n‚êGýV£kö„¦ð0À{œø~†Å´[`Ìr�£'ýÖ#ù ¹*o`¤ãÌB€û��CùÖRÍöý}Õx±‡³¶ ¨Æ´Ôf】€Lú›p ˆc»ŒþGÌR‰Æd#òÀþ•nÎx Ô-DŒJæ5òI�Ç�dè:2j·×v¦å£3B’JÎB¶èOækÐltkm>&X!Øœ’N?¯âjú"© �p ôÁÿ×ç £ ÿOóù×’x¯?Ú—D�� Œ{¨¯9Öb1‡.F$c¯ùïSø2(» À¿xG¯@Gë[ÆfP±¡bAà˜ëôëYQèze…ä—:´æiA%ma9ϱ#§^”Ý_¼H-f¶qn$F>Zw{ð?�rWzΣtÅ¥º�ç“’j‘šWÁgo^Ny­M&:´Ù‰).^FvÈO¡P*ˆ³¹2Xdl2â¥�FÔ�²¶’yû½*UðæªÇ?dpPjY<3¨Æ¡Œ,  1bÎOOÒ�øEõ†y²E4ø[VmŽ1ž8ßøFµpà}�‰<ÕÑèÚdú‡ïõ)áa}z ­¼xÉ 1²Àþéìk’žÂì1g·�d÷Sš¤b”6]p{‚+w—ˆáò˜©del÷$ƒõÛ^š‚\12±FÁëŽOãž)"‰¾p ÙS’Nãßè–vp ü·\C'#vTàó× Žø÷ªw¢8´é§FÙåÈI s·w?̦jЂ)㌂c$Aç¨éü«¡ðË�öìA1I’¾�‡oÈþtëE„7±LŽ ‚À8UnA>Àç'Ѓë‰ïâb—‡b!OAËdýNë^­EpÿÖé~»fÇçqÐ�¹ç9íSo û»†3é‘ÿ×§‹èáX-å”y“P‘ŽŠjq0ŽÝOñ§,Ý;q×ô¥3�ž¤ŽÃëL‘î1åìBAœgŒÔÈ!Ûó3y’2)gn¦­8d„ddÜç¸�¿ÆªÇ÷[žçúÐÜžGoΣ$†Œ�á9¨Â¬7W(‰2£Ø€­<Ÿ¿AG õ¥ŸÖ“vÅ ±û£ÔÓ£]ª>l’G>ôìñÓ¨ŸÊ»öÿP¼çäúž9þ_•bj# ÈÈÉ?çõ�rívŸÛ�g�Þ¬[ÿ ÿ‰© ÿ§ Ž>Î?ô/ÿUA­[=æ‹t‘œM‰âaÙÓ‘Q½ÊÝj:¢‡ wnÈ~»s�¨+Zaw¤õMgj‡OÓe¹ë?-Gý5ÎÑúóøSì¡zl{zGÕ?A×ñ<Õµ@‘F�‚�úúª“;ïMÏæMZQ“·ÔàúU q­õ Ùw†‰LÊäz‚?Ï­túg…­§U¿º�ç{˜Ñ±Ð}Ñüóú×H"PÌÄOØúªÂ˜PÀüëœñ:4„÷TŸûèW�jд™TÀ çñ®&çþ7�êסv†8vã$aÁÿxŠÍÔtY5U¥u·ƒp&Gãƒè;Ô¶iºZ}�KVvhÙ¦»�uIÀZänüGª±h¾×&ÞœqXò^\ÊÙ’gcþõ$SÍ©,R²ÉoVþéõ­=R1x!¾·Œ�0ËÆ«÷ø‡Ó¸ö"©.›{(-¤ÿ¾juÐ5IÎOË4~ÔØöÏÐã¸â…ðÖ©æHrèqAð®¯×ìÿ¨¦ êÀôRF3øTö>Õ¯.íìÍ»D³¸ +t�?‰�ÐdÖ—‹„——ëoam)²´�mà;�F\¤Ö·ða�sÏÊj5Z6ìƒü«Ó¼/4óøvÑL‡1®{) Ò¶¥Fr¡ÉwÈæÇ>´Ë˜Ìê£À\�?úÝjIm­âŽÕx2{AûØü1Ž?Æ©Áå�JîÝ‹0@qÀPq�ðü [‰Êâ+•“*’‚O ÏJéõ…òÖÎè|‰ÀlwSÁþµ4Òù©y 9Žxã ûpv°ö?ãXš¹6·¾ZŒ®ÀFz➀BÑÇáS0qƒÐþ?Èf‚ VPN[ ã’qý•ghÖÆ @¤1’L‚yÊ»€× Ò´£•åYui#œ‚yüÅYEÈ’qÏ'¸þ•)l0 ðAþgü:ò@6°çëÖ§²bú…°Û“æ©ÇbsŸðª@ƒå2IfǦNGó?™§°l`p1Çó¤8œuÇçÿרXæÞìc$ aø¥<a‘ÊžAäóô¦¯Ü xÎqNàóŒŒ`àÿŸjFP«ÃžÃšU*¨ùý*ESœã Ÿqþq]…À&ämÁ  ãêúߥj^àãŽ=Æ1ýüMqž$P4‹µ;”Œ{g?ÐÖ~˜ 𵻃�öAøðGôýEhí .ùœÖn®E¤šf®rVÊè N9òŸålû`çð¦è¹ˆ^Ù“—‚å‡N0psú“Z31XL¤ªÄ‡è9ÇåÅfè–ͼó8h¹�ÎÇý–ðô­(”³ÈØêÄp0üÁ¦Î”mË�Ç?Λn@‹v@$–Áë‚N?Ïù9î¿ñÍ•°”$v2$�z�FG¿SúUϼ©ãÛÈØ’ ‘Æ}œcùšôÆ�îÁÉÀèá\¥e=Ô±¤1™šU ’?J¿ écBóæÔeÚÒ(+g-œt$~^kw2#Ãl‚Þp@ûÄ{š¯¦éº¬þE•³Êì2H©üÍ]×|wÜzmÔ¨­*Qœd–üòqU ðM’‚ggsè8¡…´˜@"Ø1äœÔçO°FòÒ–@¡‚€2ÈÏæ?J’ÕšcÈJ²àg9È'è3PØë0]Kr…ãF€8<g'¶qù�ZTYZ³Ûfa”�<‘ǾF>¢¢»¸‚öÌnº�UI�•'�§~d •5k#²Î… †g¡m£õã𧾩i2J%"p¬@$‚z§ø’Òõ/d²XI"éY‘ˆÀFN}03Y2jB}eíJÈå Pà|ªÈÙüêûOm À– Œ“ž þt–³‚ÛòNNÅS–ÒÎCO�"Ž<ÊɼÊ�}Ï�á[ð?•;<Œ‹a´—à�Ç4‹Œ™c �I#œñPÍ{m-ÀEºV˜( ON£=¸ ¬w–ÛQÔî´ï6HÄ¥�—ëשjÐK`Ò·šQA^ þ¿�ièrŲð¢¶ùc8br)È8ëКØPcÖ¥bøQô'ø”Û®FOàjÓ ’åáÆ–Å@>í�íÿê¯K¢¸_ˆ ÓsýÙ¿ö�qiõÎ)zŽüú«?Q¶[�FÁ›vºB"füqùUó,‘[j¤ŒyèIàçPň-œòaÇøŠ²¼ rÿÎiË'¹=¿�1$!Gû£üþµ<˜û%®FÍ+g×åQýj´91Óëüè à†b£˜ásèAýhrãŽìˆãòÛAÆáÇQ‚?*vy#×ð£=1ïMQ™7ãåä/Óüÿ*� ŽJ£k ®}ÿ•wΣËRðŽ?/þµaê 3÷²òÿ<þ5ðώ[¹6¬>»qþ­°‹éˆ”gñoóøÔ‘ðÀ7Byô®]Ø!ŽÍò§LÔˆòÊ_™öa]G$䔌ýÉþU�ªÂ×–Ö¤ J.å÷P@ÇçÍjJʸùY”cÛ©þU!VÛžøü»UWº ð±9ì?ãMÕn�ž“u:�YT(Ç«W9sk%¿�‘„»Úg–fÁÎ7*~•ë™äð¶–çï5¬GñÚ+Q>ön¡Èÿ?­‚·,ü#«�.çV’"á#2 »åà~5ˆž Y[Ìšc†ä…¡ƒ´¨ÎZ6r=OZ¶š.™hŽÂÚ5 aÐþ¶iZÞÞßl‘ˆ’"qœ æ‹íAt»XV�‹œ1î@êjiu‘âHç‡2Fe\ŸáÆA‡?J†Ico´[‘!`¥R?§ôªðÝYÚÝÌMÚ4“¯œ¾�qŸåÍZ:­�ä̹ £ñ�þb•5+wÔšÁ\ùÀ6WqƒýJŠûQò´(¯Ô°K†*˜Œ‘ú‘ІÂušÕ&ØÑ† ãÁÿ?�MçÛKò�¤nÚ2:ãÿ×M6VR�¯oÝÇ*3ïMÑc ¥˜`Ø®“:•ÜŸåÏã[É$-®øò¯÷wgt¨ÚkkD“uÒ.ó†#''üÿ*ÍÔ/mâÓ|ؤ.¾`hö®Ó�œÓlÝîb¾Iä1]AÈn«‚¸ý _”[½»�^D$Œg__å]*°Ô¼<�X¨–% žpAÆjÔ2yúh”œ³@rsœ?¨ý)“icPXfã"%SÓÓßëY’cCŒ|£ðâ?JŸ’9úÆšùÑ�ƒ‚Xƒíÿë5 “ˆâ˜òWS‚O¡r™«¶° œa˜–#s“Ÿ¯AøýjøUÇ óäÿ�ä =à@2+ƒƒøvÿ=*9#@Gf’8˜c�éV"ñ3Æ Àø GN gë^%´û,štг5☂瑞„ý9¬ïë²ýžy]CM#àžC( �Ä¿ªëwRé­n±…{–òA�É'ðÔQë:„B2Å ‰LO�Ž™ þ†–×U»6ÊmÌT0QÔç'üýjÕµõÄÑ\¬®@Ÿá;‡øÕ=:Ú[˜|éf`Ä+ž qõÉ&ªir(ñædrpÁ€'’w)þY®·Ãqý›âdÀà)¶”{ý+µÔµÍ+L�žêî5e • È#·ç\ž­ñJÊßx°€ÊG!˜àg¹ÇçùW{ã]sY”"Hȧ�c¯ÿª²�…ewûV­pÊ s ±ŽOn+j7&Ö5°U·‚5ò†Î[w'ð¨ÖçQdµµ¶i%''’N{šêô?…�ÂM«ÌAàù1ž£¦ ÿ=ý+Ñ,4Û-.†ÎÝ!@ÂOÏå^eâÖwñž @É > sù þ5šr2s€Fxÿ?ç4„Æfʤx’Èä%›èH|ÿZçþÕ¶¹tÊ­qq,$“÷r¿)üÉWR´¸‹O�âEŽ8!T–@yl‘¸{ŒŒÔ7ñAc®^BÇjƄیô“z°Ó‚k.Xî-â¶¹vco,ÌJúaÀ`ï‘ZªÁ¬jq)(ã%yý?Jôz+„øŠO™¦2JÍüã®1 íÒœx<ÕiŸÙÒ0ä݃ÇûH⬪‰&Š"2#Ën´"Œ(=9ÁüùþµabVÜHÆ_óþzÓ|”RËÀJjF‡9É`þ„ió¡Ú ÎгÀ”J¥<”Ï<а•ãüñPÜ0¾AŸ×ŠdɸZÉýèŠþ*ßý�¦°9AÜ~”sÇN8ôíýjX`’f(€ÕÏ ¨/¯­tÙÖ¹|· qÛþº¨"‹SÕ¢¸¶ŒÇåa�“Õ£;”þ=?ê^•Ê•‰J·?Ÿ8¬¡¬^˪\Þ ,/þŒA†yüóO:ÍûI r:£D¬[ß-O.«wÁI‚ÃØõÿ MQæ¹½Ž5�¯˜¹p²gùÕMzm£J|Ö`̯×ð«¶ñ,ÿÔFÛ˜N{˜ùýEzG†. Oi/<©}š>Y±ü#ü SÔ|y¢i¦TyÒ‚žp?úõÆê¯gfŠÂ…{1äÿœ×7a�ðükÌãV ·Áõâ�’IÉÅCs–Úå…à�~;Ms×¥$ð®˜d“j´‘9íŒñªÖòýºgP“40É—œüû³ŸÄ:Í{)b³Ô<óûûSLº¤Œÿž•QPݽ”6/‡*®qÐL#Ëüv¢�wh·ÅóöˆfERzí*Gô5©kr‘¶[EÏäÀýjÝ»y¾>²hŽÂàÓæ‹9üÅ^ñ-ÄrØ2Z8XmŠ×9©àþ|þ4ë'¹û{‰â™²À2œaM7fÂý”e[–C�7w«2YùÓÛÜË! Îàuïùô©ô›wx/˜†I 뀪y?*‘ù‚ß•_ŠÝ�ऊx<²äàž�Cvö‘Ü­Œ\�¸ ÿ]SÖ<¢‹ © å;üÇ$dóúSü=6˜ce\#Ê6xç žÕ},7Ú¸UX·.AQʰïŸÂº/3Ég=¼ªá“nÐ0‘ÇëŸÎ¯ZÆÊx€Á_3wÔ‚Oóý*í«,vÑ.sò.?!\ÌA„Qî?ÂàEO‚NHÆ3�óþJDæáˆãhÆ_çP( ôIÁ{ÆŒcÜ)?—&µâ*@`öèB*põÇåþrhc¸ë�l‘Q8Ìa‰èÀ‘ôâ¬Ø9YX¬2Ÿd'úÿœU€ð¯X€útÐÒtéÉêAïÎÃó¦’Ç¿n¾œúÍ, cÔm\‚1&~£üj!”d@r™F=‰ý(Á Ã?Ä:zqÿ×?•'.HQ�ƒ'݀ȅMªê2� ó|KÌ]Îz‘Çå^?tá§‘€À,xôç&¥Ó?µ-TpÞ`#<Åz?†e)cã6‰Èu[|2õïÿ?…jÚZÉmu²HΔ œòIÿëÖ…Ú$’H­�…0N=ðOjò�bÖúÛT„,Š ›ÕPrBŒŸ® ü*Íæ©.Ÿ€ö™!Td¨í“ïÏõÏ´··:å»L¥e8s€3ý+{UŠM.õ^1-å¢ÏÛµ±øƒù{ÕM"ü]\Â%˜¸Ž"Ïœ HIØó5¡q ‘.Àq‚”êIÁýAüÍhYF(Ýf�~Üäzz~ñ­ aŽ;kÙ‚—@N:}áÏèi-ãŠ[H×sF T�×�ýEajp m]/d  Û"Œ‘xüˆ5ËϬêÛL—3‰+�y œ‘øšµ®§¨äìšf$©ÎO#œô­ûO {Éñ…ÉHù#êzkrÌZ[ZFöñ,hX†#–8ò{ ‘ìŸQ·qIlAÉ<ç'ñ®ƒÃ¾TÓÄW‡ ¬\„9<ôüÿÏN»L¶±²·)kGóÈ'sëëZ¸Úõ#¨üøü©Î× '8ç¡éý?*òŸ!ÿ„«Q;÷1®OS´cš¡·�žã4l^ää�ϯÿZ²õ}:[Ùmä†V‰âV èyäƒÖ²?áA*Ë/Ï �HY�<ŸŸ?�:M)f”G4ÄD‚›°é“î3P6ƒfø2Ü|˜¶NN0*Ëi–?e†ÞIC¢$å²Iÿ=þ•Ñ4ÓhÄ’¬IlNNpO~‚´£°³»Ö.l¡Â0[''°Èɪ—i§ –r–ñ(Ž!ƒ€É8õ$äû“Q‹=1®bÈ$R6“Ôc�úUŸ³i²1+" eƒ`“õ?QV¶À²8�›9ïëô¦L€ÀAH<ñ’> àÕ]v°Ö¾Ì³´öÚŒ+•áXdžG�"2x£ñéKˆ¶P¸‡ ½™¸>¿þªˆh–äFÒ\’J‚äÉ÷ûŒþtë-ÊÎæã�Aˆç¯S‚3úÒ®�§ c“;Šg# ×·ãSZéºm¡m¼îlò¤ãŒ*·%•Œµÿü¶‘|ˆi ¬GàqøšÏX4ù#`ÇånaÛü�SCk¦Eoäï�a$íÏñ³h ‰ÔäŒ ý?ÎEMµ7í]¥qœÖ²õKSr³î$‚áb782�?=¤þUÒéú—öŽ“ozPƒ"òª¼+Œ†˜oÂ«Ê šÅºIm;#7#¯éTu?;P¶OܘJåCpÅOÓŸÐÔqKuab×·7*HöÇ �ñõ­;;¹îR&Y¡1•$eŽqéZºÆ-kË{˜ÜMÆÛÔ¸ä_εï$�^þÊ9”Ï<-€§îœu>Ø?¥q—í,Y-`BÉ*îÛ×륃(Àë°Óüÿ‘Sü ‚F?çéÍ6Êdð\–>³_Á­hÚlh°[uITa�êHõéùU_kWÖ—cs1Mé‘®ÅÚ-’?ñïÒ¹Ï é—Z¾¯qijÀ:Âe$œ �Å…vpxJö+»d’dù‰ IãxüÉV¤z´F‰æc%IQØ�FÓ•i¥’¾™0c’Ȫ0:|Ê ýkR :ÒÛKŽIÙ™ãQ�:ž·s•i PΨÒ$«ó�ÔŸ×ô5ÅÉuá­y¥´¶[‹·bC‘�¹Îì: ÏþÖšH¡ê"ŽI2 Á'#©õæ´¢¶¹žÞH6X€FIõÿ>õÑi^¸±Ãt¾JI'–9ãí[ún™Šº*ª“÷Xõ=qü«[x`…°iäç°ü‡ëIo Y‹‡Q“�2NIç¯×�ZJ‹Ôt$g=…D„[D|éK1cÉ9' ®3�¼{V.ÚÖ¡*Dò9�’sŽrØ?‘ÇáMß6 ¤JêI?ç�çH-®˜‚×*£<„_ñúŠh²ß€ÓÌÄŽ€ã?•=tQ.H‚Wã#9?ç¥H|;p˜ì@Ý’¸^Õ5ž�-Ô q �erÀgÿ¬/j¸4 À¥µ\I2ßçô§®‹ÈS{fÁ”zÿŸÖ—û([ˆÝ[,“ÆJ¹�`.FìSÓó¬I´²—ulÂ$€À“ŸOÊ„´.ªÊbaÓ9�õ¤}<�–†=¤d’F=?ÀUCg ­![dpr0r1íõÅU»ÓZ;c$6³ä‚ÜT8Ï>ÿÏÖ¸ig¹µ_²âhï`º2[㒠ઓï“]rë·ºŒ äiÒÆŽ2˜#¾3“Øþ•NÝæ¢Esì‘‹Â\m'$`÷cÔûצAáâÚ7úZ-½ÜŽd.‹�§9'®~•Æ^èw®ú”FhÚe¹Ž[yp�êrO¦Fúõ˜·:n�§\\Ï~ú�ÓHa"6ÂÂûç$õÀÀï\†«âýGQSo  É+ yÁŸÎ¯jR¦¡™c è’+Khc•˜Ú ©rR3cè=këú+‡øƒ�;MÏM“8ë‘\zvâšÀ‰=óÇù÷üªIÒ 8®$8Xîav#°SZÆÑÙÿf¿Õ¹?©5oq^KsŽ­)vÉÚ9í“ÐÿŸçC1n˜á¸ö÷¨Ä¤\r @qþ~•kT;`ˆ)?-Š/ç¸ÿZª~R: \ò1øŸ×ñ¦ä1÷iñ¯üK®€Æbš7äzåj2�œ�—?JŽI(˜(# ?çØUy¯ü«õ„¶Òñ�¹ÏÃøžwmJrä3 8ö?áT´M>+ƒ5Õê“kéœnnÀ~µÄ¢ilã@b2=yâ½ÓR+ÿ eùf6G‚xõÿ늣 Ô{d‡pyšs…A¸‘×úTÓhRêÆòhm ÆJÈÀ±ôõ®/WµÓô�6eyÄä:±ŒsÈöëYÚŒtM;Áº–™-‡�}<²ùL;ÂãŸl‹Ã>7»[h±Åo0BÐ+ìË0`ïã\N®H'ÂŽ_ë]–•á=FæÆÚèÊ‹ð$€g `þbµ¬<5*ZAu,©¹\©HœCZ–ºhŠ,I—*Œp:V¬dRëM!$F#U#×äãZ¶Ö6îPIÛ åØöÜ?¥akÐøjæäº±£nN �ëX2ë¶2\Û[iöÃm¶<¯ý=j;;›«ÐÒÈÌî­´[vzõö¦·IH¨~óp?:èâðÒC¶iyË.8­tp¬Q|ä©�ÁBGù\Aö¯ÞJÄ�Ãjt ÿ×àV‚i,p€ކŸ$lÒFÂBª®rñqÇõ?…r?¥ItDˆ1eó>`½>éÇ?�p‘‹¢ì©o·ŒüÍõ©âç…3ÓŸóÍ7ì’œy—NsŸº iŠã¬Ò~&¥fû–NÜwRh]hî’Ýíe.›°8kEêuÝ,Tu$`{þ†�qg%¼Aœ© Æç¿øT6�¨IÁ8áV,¢d±¼gR¹µP7 g,£#òý R ù³·b@çÙAÇëúÓ±óGëúR˜Ç8ƒÎÏùéI,`ÆÀŽs�}zššúdjYI2ÛÄÃÎÐü×ùU'e·+4ÌH!‰íŒÐúÕ „,·$Lä\d .p�ËõFk{-Í�YIÉf(„i–V�i)–ÚÎipI�w'9öê*}CÃßÙ¼°![ŽKr]øôëXÞ¿m>ïPÑçeŒÝ˰<î °àú “ùUÙ5·´·�­¢[Ë‘½¥w,Lò{téøW?¨jÚõô’¤÷s*§ت8<Nk¹�C­øsì6àA«${·Íà©õÆx÷5å—Ò% [{«VûLD+—é�NGÓ56¤R{¨¤/d‘,¸QÀ £^s]]ÅÎ�¨é6ö�i%´q**@ ™ûœÈTz€úWˆíoí.x^3€î‚;ò×sq*ùÓ(ŠW¡wôärË„7dùX`ð—f€Œ“øùVwö½µ¦�!¹™c;”È$€ÙéXÚ�‹¾Ð"†Ú"ñÆËœxäŽý;úV`Ô.u½Y…åËÑ�  €N? EZÒ¼)ªêw¶¶Ža$î01ØäýkÐtŸ‡�éÖ¡õ¼ÖC¸FœIsÜð?*éb6bì´… œ¨ŽF1þ}j)§v* ‘¹�õ g“úÖ­ÙÁ·’mÛ�Sµ�$òqúb¡‚Ьf6$öàç¶ÈUèÚ8ÙË‘ÉÜ ç$?ŸÒ¦Yp÷j #’o¯øSÖ$�X“ó nvç<ÿŸþ½y-þ¥£iº�Àšè’V)È$sùÿ:†/øZ3‹‰$* ô8Éþ³ùUIþ$øb×"ÛM2sœ»‘þsùÖKüa1-´»tœaG·ZÆ¿øµ­Ý+"0‰òcÄÖ5ÏÄ~ä6ûׇ8=?Î*+-sQ»±–%»‘.!Ì‹†#r£ê ÏПJËmoRÉV»˜q÷�.˜u]kV´Óm.dûMÜ«Ç ž tP2IÇ[¾7ÖÖMN 6i�„Kknå°Î«�X‘Ô±%�¹®Z}Fé s! Hc“BjzŠ.Vî`ûG”뺙]¦öb1‚ ?ψõÝJ B]H88â®Iãj["KÆhÀÆ <{ñW<>º¶«4÷öÊÓ6ž³ðJî ¨Ào»ÿ´Zå¡W “Ø�(àÉœ�qŽ P{U�bÂÛK×tûød�#‚Q#,��ŽA§œÇz‹Tø°mtÑk [É•‰óŠíQÉ Ôã¥q–8·¸×n®üCn÷�KnÉ1¹EŽBF�Ô‘�\Å‚X®í5X¢ULW  àÆØÏS™ýôãf2ΧÈàöúÔºeã[êQ:Œ’v‘ê~ ×Ý”W ñ Õ.4­Ùåfý gùW$Œ¿çüý)ªspäŽÊ?ÏãU5²�¥l“î=Ä*G¯Î? 5§!Þ]}súçüþ4°#ÜòÑ™›°úUõÒ®�ùÔ&A#w§Z¨ÊVB¤t8$t¦%‘ñ§aŽjÖ²Ÿ½ò‡üñ�8ÿuÇTääõ‘áMKÄ3ÈÓ^°±�˜�Ë ¯U@}ßÒ¹#¨Ü·˜æâM½—qÇ5]u+âÿ-Ì£pÆ¥þÚÕ!8“øÍ5µ­D°fº�‘Ç5jÛŚͫïŠöE8Ç&£ºñ&¡råç�˜ž¼Ÿšºûv¿ðµå­¦§XpÙÁlûOÐ×¢M Û.œÊÍ– ”~xúv¬Åø:É`kÈÈŽyƃ{Ȭ8°Ås>'ø�ª¬ð["[G#¸rÝ=ZÄ×üA¤êZ>ž¶Oì(¸–I ´² ÃÐÒ³ Nœˆðù‚2UO ë�Ô×µ[ŒF˜ë´~?Ʀ|’‹“ŽIxëOÞt­÷T?€Ïùü}jµŒ^UÝêùNØîÅ 'óò­•NY#éÞ» ãI“|ÛY(ñ‚NzœçvúÔ:6�Õî`%¨ §œ“úp? Ò[‡Šò8~ËfrL\��OO@F?úÕÏëóÜìGÊáAùºÀ>ÙaǷ犄’íÁF=}8ÿÙiG@IëŸÎ”±ñ�—q ó‘ëéןåK)2®Ÿ1&Uu!‰?úó¨'Thã †A�Ø#ðÿÙ�RÔ ‚0Ä)f Àu€5½ì/*! É"äœqÉÆOëúÕ‘,iç�T3“ýÞ„®)¶Ò¼HÈNAà“ÏçÅaøŸC7p�FйŒ®6pN08÷ÉÏåZ¾‰Ã;Â’^´Ò,ŠI&F à笠®fp-µ¸í¯"[‰n- <[xRNI㸠?3ZP¬“èÍ5­ÈžKfhã#ÕF@9ê0ü«–ñuÂ_[Ç$Ä%äJD �š@y }ð?JļŸìÓ"GšAmj8ùüÖί§ëé"ÇMb €2#Pr=ŽjÆ—¤j){ÍY-Š6åD9f#‘íë[–®öºJD$3\‡™Î #$‚®ü©þ Õî¯4ïÍ9fZ­´`L»°G©ù,ú×9¡Ø\jº«Z´Jdr¦@ É9b}«¿Ó>\Jc{‰Œ1® drÜžƒ·ù×k£xEÑ�\[ùó~y9Áõ«}ä0*ÇCi8ÂàúU]FîmJ,Å88ïÏùéU­’ÛOµr«“Œ rIÀÇ?ŸåZ)²‚Tg=ÎkžÓŽ£­Dñ‡– !@@˸RGášÜs)Y jc$ž§8ÇçùSÑ ´FyÀÎGçÏáù}kœÖ¾!éšsmɸ“;@^™Ï¯å\©ã�WY�íÑš Á pH'ŸÏ?…y߉¤šB{mÛ‘\àžI<óšæœ’Ügž¼Óz?^”Œ©<ÓH''=© œô'ùÔ–ÒËesÄx/èGp}ˆ$­hë6‘¬±ÝZ‚m®Ì�ž@9È>àäpk{A�<;á‰5íѶ¡¨G$ ´1ÈíìÍ‚³êk”�±w•ð\žçP«³ þTæ,c Fé�QàŽßZnO“5ÝøV¶Ò,õ7•È’W…B"–fP'ÐHúÕéõÑ¥Zùºu¢ZÙŒŽÿ3’ zàvÁõ®I¼Kr5»}Jóý4A(�Ã1;_à�Ooj¹â�tèì®Òå%ŽöÝ.¢�péƒÏã8®bDÄaÎáÜ `b˜×8±qÆEO W¶Ýeë¸äœ÷íTc8‘H'98¯¾è®â(ÌÚ_û³8ë�N9=;ý1šHó³'ï1Ï5WUìd¤*²Ÿ÷·¨ò ZŒ¿¼nyÉþu¡¤™Q‚Þ&UÝ( Äg¸ÍoøŠÏ÷|s³mP9<`ðGõ­j-¬aŽÖÑ$“ÉGOëQ ‰/íã0,a&ŽLÝAçüö®!®$¹a4ŸzI�=€ü…;®šö¥ÞNyö5³1½ò”|ÒÅ"õR?­U¶@‹ÛÈ${ÙÌAAmÌǾ~oëY‚ö!4ÂGT±`G/ù5r)£ž8˜8EÆNG<­Jäl�K«·¸Ο4Ilö“(pË·Üsüø®SCÒOñæŸcpTé¯;Ÿ›î䯨ñ#ò­ïA!Ôõ#,VðÆÛœ¯VÆUQX:UÌ 4é¢uµvAl]‡¢‚76{ä »{4º\óÛΛ´ò¤ü$€àv ŸÒ¼ý"Ž õ-²oU€.Gƒ"�éW´4½Ô-õidU#·D êLŠzý¥‡Lñ ÅØ{‰Dy#/#vçšë4Ô}.\Ë«5Ú0%ã^¹éÏáX׉îà»’[vò�'y*3ŒZÞø’ÓG¨XZÆ HÙ“vIeŸ¯?�?DðEÖµiÒ[ËC)GÎ:7ãý+µÒþY@ê3´Å[%S�]­†™a¥À‰giA}“øÔ©4Ò@Á¶ŒóÅeI§«j 5̦A‘´ôÿ=*üOó4j¿*(ÏašÏÖî'°–É,às;˜×<*ñ’J³kisrËw1¸ž~X…Lg�ùÕƒ Í12ž8©àg?Ëþ»¦hÑžt@>UPrOùâ¸-gâƒ4N4Ø á¶‡oç\6¹¨êŽ™-ýÌîò«¨Uc‘‚ ÿë~çW2¼’39ê{zæ«ry9¤ä÷¦á©6û`Rl'¶+gL §Ï§I�: e·>£2ÿìß÷ÕWÑô‰5}nßL¬ibÒ¹áAf?�?�lx·QK»˜të%X´ë޼c�ª $ýI$“ë\¼ÙÆÄJjŒƒƒŸ¥1�f'škŽE!éN�CH¡±´�OÍziÚ­ìqµ±¼X¤bŽë¶–ÀÆqüÿ*˜m‰#oݢƠ1ÆsÁ ?J­`CDÀó·!aƒŽ7ÇéøSÍÑFß`¦B¢dg'¯ÀTŸmx˜#UŒ¬ Î:ãð…,­ee¬¶™tÑÍÜr4!° EA™ k Ë»£¨I©Ã¸bÛ,ýG§`ú�¨5ܺœ“’!Œa[#œžýë+UÕt«¦›ì’JämË6qô†²ÿÛPËmky“"‘·qÆà0 ö·üQrlõÿ>Y�âX•Ž Nõ'ð¬�αÙAÁñø×¤|×c {£Ê‹æL±I�™³Œ‚};ײ‚YqŽG¯â?‘€qŒƒ‘Ÿ®?Ãüš«p$¨,A$ëÈÏëŸÂ¢�mÀ$’x_ÿP¨ch×pl0ªN1×ëW¿|êFhqÏSŠÀƒV·ÒšîßÊv•ndÎxP Ï$ñëUõ?ÛÄ+8Œò1$aGNýÿúÕËÝMªø‚ÞInfhጟݡÁàtúÖLzD±G¹K»Ê_žAÿ=+T¸Š ZhUAxÁÀàà�óùW7â¸Õæ(«À§ þ¿Ê°áÑ5’<›IŸ'…8­k_k×DhP`¹ÅjÛü-ÔÜþúxbIÉ=«Z„ȧý&ü’x!ߦÏZ¿Âí<™&�Èê=ªê|=ðô ³3ãûÌOùì?”ø;Lk«E‚Õ¬aÄѱòÏ|à{æ«Ë£ØÏ|í#òc„ãÇÊ€ùÕø´ $(?`·Ç<”ŸäÓ¿°tfm§L·öùùíŠI<3¡¸ÁÓmÀ=Âã�ª7‚|8ÇæÓ”g® õþGóª³ü>ðニw� r®F??óüê„¿ 4FÈY®ž ó�§ùãÞ²î<5†Vú;yËÃ:¥Æ eÁýIãÚ¨ÝDÞ +ge�»Ê¾ÈÀ8=Ï'ò5À\ÛKéÅIÜK†DyÖ0 Ç œã¯®8ÕNWw8f'`ƒÅDr8Áô­-5æ‹w|0Pу܃‚àsøSÅíÞWºF@£ Æ[ÓŸJû²Šá~!ÿ¯Òøþ¿œuÇp‡µ<)‡éTnßÍÒõi@ ¯Ñ0?žê×aûÖúž¿�^û$†Ì‹ucz];íX‘ú~uÑ^iWËQnTÈ-æ7SÜþ9¬ý_RÔt»«kxçc"G½X Ú�÷Æ1^u¥x—V“YšÕ®ØCn'Èè0Xð?àL?*¶Æ[�Nq ä[�¥[•åüñ[0D!‰UO þ¼Z”à!ôúvÇÿ®‘ˆ@Xþ^iöòýŽh®Ÿ'Ë�3wã8ÇêãY:v®58gû ñÂí v8çàETÓkéçB¨“y3ýÓÔ}s�ÀTåžYc‹fQœåsŸè)×M"ÜE™C'˜dP=±�åSÉ,I´PâWkÁÇÔº”«*‡h“w\ýj†±=¼Ö½ÉòÞÚx™™O!7H>¸¬­yõ+Í^ëLûpx]ÑÈíò˜ñ•?�Z®šTÙ$wºÔJªF±ó³“œV…Þ¹áøt˜ôý÷7AFבº¸Î˜®iõ-5"xm,ïÚ ;dñÍuZíÅï„u1!XÄG #\g—?�QÒ®ã•$µ‘™¥H÷31îFLb¨i—Ŭ.ïõa9îsšç`2ßëpÛCóK<ʈñ6x±s®ÝÛj—Ξ+”••ù sÎGãú×ÓN¡¥§Ãwn1«�À?:¾G͸c®Gêi%R3Æxüª¢£™ ¨9'®rÏÒªÌ6ÈÄa‚‚Þ™çúU¨ ‚=Çqç ªšÑëkwrK,WHHQœp«Iâ‹$�ÌŠñªch8,Þ¼W7¨x³P»›Ë°‡ÈI v<×?y¡I%òµÔÒK&Òçž>•Nþ;k].yU– c“ŸÿU`Léu Ý…VV6P:q\CÙO4¸Š&rOðŒæ®[xOZºâ; ¹é‘Š×ƒá®¹*‚ñÇÏv­[o„÷.šú1êgÖµ"øS§�™o&sÓå«Ñ|4Ðc 2Í&j¹oà­Õ�K<0ÈWÉÈÈÿ?�@<9m¦i6ñ­ãÄêÒ¨ùŠvú0iÖžÒð…¬`,@<®jïö�«Î�nOûƒüÿú¨ÑXÈ2ߟö*¼žÐ&å´è½±ÅW“ÀžuÇØp}˜Õ ¾è’PO=óY×ß 4±nïmw6ð@†G^J¥q}µÔ†|0x”’8qÇO ý+”ñ‘ußAouóE´äž„çßšçUî-·4nÈYyÚHãÞ¦»ó`”¯”Є“øÕOO­ì§r’¨­mBÁ¦+qh¦XÝA%FpHÎ?ŸåUœCo¶2I`£qã¯zú&û¨Ë`Œ �é�S Êäu$óë‘ÿëüê¾n¦£'m¼DäâsÇä þu*dk`uò!?¬ƒÿ­]'‡nm ¹’˜Ái@ädÐ vÎzþïj7¶Úí²ÛÎÑG,`!À*Ûs‘ÐôãÓ'Öµç¿y¯õ{c¸[AlÀäc FN¾kËüK¹K Ú%¹ Ä@*ÙÇäyúW˜\ÞÜ[ÞÒ41È®Ø�ÁN@?€¯lGI|·Œ†G;�'�Ï&¥a“’?bj'f* ù›;ˆè£×ê{~'Ò¥ Œzòxü±ù×1­@ÓøŽ8¥!R8Íä{2©=~ª?U^›e+ œ`£ß5Úè? –þ»w¾Vå¢CÇ^„š¡-®™7Œ/Ìñ4q‘d(Áö*JÚU� §`9Çø~¥‡ €cêsþ­+`ÈÎ>ƒ?áüÅ4ž„`9Áã=§ùêXKÓ‘�éþ{œÓ ¨Ï;óþy¯pë´DAq+½Y‰Â�ï’*”\—ØÊØ Êãu$õ5q1€¸À#ŒSò 8ã?^h.Êò:{ç§ôþtÀIÆz“Áôçüh,6�B3œÿžßçÑ¡À±ÉÇQþóï<Ò‹Kk|™˜4ŒU€ŽÕÎ[µb%�ìx Xõäv=1ïX…´6—^s«MŠp¥±ƒïëWôk«H4 NâiíÑÏ ´�ÓqeÃÉ=‡ÉÇצj?éö6º´­c} ÔLä©‹�A<Z©¥ø_PÕ®<›xG  ¯$ôcÖ½/„ˆm¡/u$RËáA ØÈ÷Áàý+…ñ>�¨éºŒ–×s4ޏ ¿RÈ�óŠûVŠá~!äÏ¥ôû³góޏåÆUq“œŸqK4¿g·–ãïyhH§Óó"«Ooöo \ÂI%-NãêØÉ?žMjr_$du#8ÏãÚ»Oí(މ%í„q¤ˆŠ •û§# úõ¬MW»·ðÖ¢ÒÏ,’[È�ÂÍóÈïëKâiç²wâCj…À=Oÿ^¼WÄ ÐÁ-ÒÈë+ÝL€!ÀÚ­þ&µþÞ¼í©[ÜI¾Bé(,y<?–ç]ìg1ç9$ûqÓõ €Îý)±‘Cº•êOQõ÷ËnÆC…ùzƒW4ŸøƒÄÁ>ÖÊÈœ–“9n½tšÿ†4_ xNX”ù÷NÑ‚Ì~fPÊXô¨ôÛ;Kk’+xÔ*í$/ןåùUòÁwÀÅ/®pq‘øÿõ©22I§ùþ¿çŠŒäÎ)¬qÔqšc²äç ÿY·2$’3ä!‹Fòãå,ãë†<`0½8J˜ƒÁäP(‘“ÓòÏô¤f9Ÿ¯™çú~_ýjinsœ r*­ì¨�ù„í�»ÀÀµã«ä“ËrîñÇ�”„žsúÓµ+u½´HVW*„œ)ïÇ¿ZæLŠ­AIA™Žàyïí]¾§‰~úå½®¡n–¶Ó£Ùï]­*¶íØõ ù×–O+²Åó…;IîIÿõWsំwZ‘ioRXmðv9\3`?­ëo4m&K›+Ù €<ôÆ\æ+Î¥°›Ì<Šú-?ãÝêTùdÿ*´«À\�2ÏãPÙ‚âi˜cÍ�°Ï (ú`gñ4õk2sÉ´ŒŽ=‡õ­]> no!@Ï�ÀŒAÎ#þEmë>¼Õuq,r¢D¥ $rJã<žÕcÅ2GŸ4q¶Ùo±íØÆOéÇã^Qâ‹§¶û#s,‡Ôà€F{pMq>$Ò×MŠÚãqap‚fÆÐIÀø×¢è±ùÁÛ÷¶®Q�èbsžœäþU¸îCˆ“ï�=Bð9>ý $QyQ±$žI>ÿ‘©¶1ý{g<~µÊøÆaÜ1*–”Û~í@ÉÎã‘øŠâïnf]{÷�³á0û�È$ �=sÒ¨ÞjsÛ†áœß¼PpqŽÇèkFËW´¹3%­«4‚%L³Àg–ý?Z|7jŽU£Pÿt—là`ã�¯ó4Ù/e`X\¢…@1ޤœ?ÏZªgo´�“€èxãõÇëUg¸»‰‹‰ÜnÀ` ê ãõ¤Ñµ´�L]¡,7êz2žOʽÏJºŠ{t–&\Šp{ZçrG–’Eÿ²Aú~µzÖÒ$Ô¤¼ÿ–ï€ÄžéùZòïŠvÇ€Db@1Œg%‰þGõ¯¿s$À‚N?ZŠêS,„ö'ñ°0Ky©ž•Ûø?̓ÁšÄ½ažþ(ØI ˆNsèCãð¯{K™çð픯|‚CžO̸Ó’>•ªÑ¹BÓÊ@ÉTà`žzÕ=KÄZv”¡K¬’“Äqà“ßúŸÎ¹ÛýgW½À‰Ú2Iå±Û>ø¬˜•e›23HìFYÎI ãð,Ë *[* �ÄÓÔ~dU3:ÈÄ7)<3ÍZ‹D½ÔULp»n#i<2O'Ó~µ­¤ü2Óà”ÝjÎneÉm¹Â©÷õ®£íštb :ÍX€XÔdÿžõŸ}eq|ŽÚ…æÈÂÅÚ£ õ=ùæ¸ WTÒì5ؖȯ–#9QÁ`p~‡Ÿþ½jA?šw<õæ¦V �žHþ‚�¼ŒÇkr2:wâ‘S†pG@}�ùÅÝÒ²íù°úûsŸÏÒ¨_jÖÖê3(˜¨ÉÉ?ã\—‹|X4åHá?¿FŒºÀ’?"J›UñÈ·¼ÒåºÚ Í…´·Gü´h‘‰úüÜûÕëoÚܱ¹ò;v'ôÿ&´[WUŒ¾h;sŒó�ªë¯#ÎQ#*J“– †Æ2j²øš7ºhCXÉ%Ïã¨çëR¾»Æï¹NÕ†$ç�ùf³îüSl‘†Ld¡nOLg�® éê+šÒ5Aâ?êÏ2�Éfdˆ(' TcÐ|Ù®wÄË,[b¹–Ee\’ãœ{85š%[± ´Î¨”r@à’{™úW¡Zø.ÊêÚ&¾¹Ã˜@HaP€8¹à ŸSN°ð&Ÿi¯Aë=ÜK ‘aa±A889#ƒÆyÍzѬ­¬I *ß*DÚ3ÔîAÏÖ®3OåH¬Œ¨ä±.GbŸùéåŸ#šæí.¡,(Œïàäqüˆü� ¯©(®âúí3×lßÎ:ãcÿXǰà~xþ”Û d0ÃŒ‡”3ÿº¼ŸÌàSïWv™x É6ïŸÊ¬BsDª§>œõë¨Ó,n_@»U@¿hUòùëÈçÛ¥Yйⴠ„ÞêövÊÁZ[˜£SèKšúÂZ…ľ6×rÍ,¹/ØŸñ&»K_=ï/ÔyhÞwÌÝOÝ\~•i¤µ´Ü÷(îYÏl‘þ5ƒsâß´´‘é�Šç2·Ýÿ9®vî{ûŽo§b[Ÿ-Óã‚�8P7|§éÿë5ZKˆRm�¾s’¿Ò› sÝHÅŽz¼úªêxçWqçÈmí„™$ýæã? ë´Ï hŒ­ÓÌ%ä˜óSÏy}x¬¶Éöh@ÿY ù¿ùþuËø‚×KÓíg’þàÏq$&5Þw6âN•sºF®—vªŠÜÇò°÷Ål$)ö�Jq�„8ª3æý9ÿ?¥?*«÷º ªf†ÝpefÜs—> ÖLúíºÃq(�âÈ-ïÈÇùô®k@ñ¬·7^ ·}¿dû¹Úç¯�‚=ðß¡©4¿ÚÜÛ~øâ`>p¹®‚ß]Šp ;°õÿ8“ë‘ (ñ³ÁÆ>\ŸÒ ¸ñ"Ãn“°å±µG$’)ļÚEÜT¾ÒÀžÔÙüCoÍ �p§�Ü:}z äüQãø–=¼!|$väÿŸÆ�RÒ1¢[M ¯’Æ)vªŸ�ÙCÚà㺚+—gwn0 Îr;×Cá]=ZâêEž�d$e‘x#ôÉïìk¤¹ø}`a{‹KÉTÅ,åCn8è=¸ýk¤ð®ƒ¥éz}³ÛZ'Ú¥PM̧sç?î�aë]4)2}Ðíóïè8Î*Ï×ÝæÓî!pUîc*ôõþ?ʼ:êÒìܸÈ8ëŠ÷ÜE¸^@U'ŒöÎ?AùÕ¦b°¹�S�çƒøS㈢ª(ÀU§Ò£ÁþÚïgž{ãη|<ânÙ‰À!”äà ©ÿþEwq‚ Œñœæ¹_ÛÉ{¥æÒ"÷–í¾0Þ zä ~&¼—Åó%Æ™©6æe( p Ö³u¢uMРI1)Q�K ñé‘úÖ…žµe£Æöפ©‹4Ì¿Á $ŽG³ÄUtñF¥¢Ì‚{iØÌ$nIÈÁ~Uyþ!êÓ’`†8Áä¹#üƒTåñˆe ý¢EÇ9UÆj“k:”·ks4îÓ,d)=y8úMVšãQ¹œÍ+»ÊO,O&³ïmon_Ì‘]È zúåúU•Ó.­ãµ»�XHN׌äóúqZî‘F¯3ÀÇjg/ž¼cüj+YÕâB¶Ê 1`ÅIÏ=®+?Wš[cË Æ\d8 t¦æ¹Óàœ*„%�?ŽZb@=�zŸÃ{ö½Óæ±wPö§*Iä©þ„ùW¤K BÎcæ‚T)Ï|‚óÏݶ•¢I{ ~ú2F>ñ$ÏŸ©¯9ø“ª“0Ü(ù[œÆò1ÇÓ$þ5âó1v$ŽIÍ28e¸r±©/‚Øð5fí£Gí w rJõ¯Û[Gð¿O²Æ.o祿œ–£*¹?ES�s^‹w¯éCN‡H·˜ÜL±Æ§Êà ¸ÁÏÔVåæ³¬ÉPKå!`¯ƒÐsø�ʳRØ[x�·c� ÞNrrç¶9?…t׳ãN©H< ×ò®Qµ‘ÒB¿3•(2G=¿Ïz±o£kØò­ae�Îi8g<~¨®ÓGð}–•n­s ™‚�‚p ã?ÐÖ轈íŽÒ&Ó€@ÂŽ½ê'F”µJX€–œ)ÏóÇ_¥fêÞ$Óô€"<Ý(ù$óÁ=»×œxƒÅ7׳‘;yv�A(‡Ã'¿5ÀÞ^ŠF »·*FG½jh^3V¬—Yiœò@é[-ãÛB¼(Œàç cñU|… ±&I$–nœç¥D|y9u%a [�9 Yz�‹îg`ªÊP^Ãþº«¦_Muv÷39híÔ¸õl`0k’Õ®d¼¼�»’FO9^þî[Ùw�UTÁ@~Ê´¬®d6¥ãb¬ êJµ&§,¤®ä(H FO\þg5ZMXR&rÀ�Ä’3’?­TmUÉà®Iäúš®×ó4™�œã¶j;›Ù¥UVs€0è¥M¢ë3èz�¸�Ê$È!œuÝe${¨#•Ùk?dµ·…ƒ_L¹ÁXÉÆ{ŒO®k†¾Œ,ŒÊÛ³œvÅzÿƒçŠ{->ó«OÜsÀ`pØP*ÚžToéб<,ƒ…'ú~¢º?6 ( àvœñÉ<žƒ þUŸ«¼òdXà)ÎGÉï\î½d/ô™‘€W�2¡=Iãñ­}EpߎÙ4ãéÇëÌuÆ[TËu-ÁÇùôýjM»®Y€ÎÄØ>½�ð§N‡ìW� /Ÿ¦ÓKgÍ•±¤œ“ú×>sÈ‚sW-áò"y¥Œ‘"ƒ?^¿¥mü?¶‚ïâ‹ö©;hn>Òîý?v ø²�^ç¡j}–¯ªkW·QÄ— Å«[ ãè?�Iwâ’y®4õeK–ûì{�€qùV Ýž¡&Ÿqw})‘ÉÄiœq€¯éZ¾a ¤Qàçb—ãüý? ©­_,Hü®@ÏRg¥ìú›*ÛE+ç*/´¤üƒßüŠŠ_@-C ·ÍÆyãùTMãéX ‘Â7rzò*¼¾8žHýPsœ°ôâ¹ë¯^\ò$ ž>¿ãI®]=¦“ª¶Y—|§=Y¹ÿ å`»’Ò+‚ŒwN‚3�~`~TË)Z+�™Öu&·–þæd  àŽ{ôþ¿­BÚ��–¹‘˜ä¶\óŸóЍú±Ø‘˜€“�UäÔäuéƒëžsQ¦¡p€�ø'¿z¥$†Rw?Zî¼5«ZÏn«3}ŸO�"$`P#Aï…9öZÄÕŒ3eb`ª§€Mà‰kÏg!ÂÍ+ƒÎåä~™¯bŠXLJçÀ L6õ=Oáqþ´¸•†pà’qœ1ÈÓ—XöþT1�Ê0¤öÇð¬i.^僒]† ÝØW¯é&=ZG�C$ IÁÆ ê+Ðü#{§j±Ý[0‘ïr â%(ô?SVnü«kT¹�ÕaU2±$d�Ðc®I#ò>•ËYøšêçW†P¢;)cl# �”�}ÆrzWagjÚŽ³g,FR[“%‡H½}ÏCèjÆœ‰vÅçÚ-ã‘I;±¹IÀ#Ôpy_Jî<øå|Í�Œ €@â¹½_ƶW1ÛÚ�<±ÈË*��€¤“Ær{väךtÓi8ò¤Ž@ÈX˜\œqìÃð*è<'á‚—Ó° 6vâFi:I$ë�ߥqº&�7‰üE! Íd/4®'!G©9Ç<¾ÕsÅêºF³5©„ËlØç!ãÀ„GZÆm"étÕ w’Ý©ÏæHü*„GR¾¼’$Ý(@>QžÎ:zó] ï…¥}GxáeÔç4êIÀPä/¸ükCBð¡s5Äš†Øm ¶’]Ê2K(Ș<Õ{kÒÙg ‚¹ús]«¥Ýh³_¥­�½ÅŽŸµ^w\aˆ�Ì�\¤úø×.à±6––ñI„g¡ê úœ —XÑÇOŠ(îc1´Ÿ4À`©#¡öÿ å–1~ßÙ“È ‘30Êã§„u÷¨mìÞ;q`¬Ç•<ò€©þÁq9‰€¸ÇJÛð•áÓµëIŒŠFºç9 @Æ=s�òkÝm`gÝ‚U�~ýʨøš&‹¥2¶g˜Ê@îrsíÁÿëW#ãßÿk[ÛM0Îü¿˜prxÇoºOçí\å§ÃÍx@^_ëPŨJK¢U€¤z’3éXZÆ•ámNk—"ùš ÁPc#ß89®wTš«¶’DJyÀ4Èb%™ÕÀà]߆oV»fv!ö*s“’2å]冢֌e.0¼‘ë’G¥g[Íwqª4pYÉ2²• 9ù�äýtcÂÚÆ¯_o™m"@I rÍœžJßÓ<-¤é1[ fÇ'$ž?NkedO�&Èg$OåU.ä¶uXgùðCÁÿëÓo¯­tȦ•#P>T^§§½q\V¹â-F{ViöXÇʬçFHô~£ñå5mJ(mÖ;ožå€Üàä“�3ŸÎ¹k�RiéŒÒ1B§€zò*çnni ¾$�ƒ€ùÅP‘Ì�´`¤Ó@�ÉÁõç4ìŽIÏ?J�™H$>µ„Á`G|Öæ‚@Ó®Ô±2;A=€ýzÁºF7 3Òª«´lH=x=ëKImÁÕ¾èa“ß­Qœ�pàgâ¡'ŒóŒšthÓL‘Æ¥�˜*¨$ž€W_¡ø!ï5Ù-5(‘¦AC�ÍÁÆ}0QLñ†¡Ñõ˜Ò(ÊÛ>ÖRNr0õÈ?�aj7nž§'5”ó–ä®kØ>ÛEwág•€gŠí£ùÎvŒ+¡ÉüsëZ^!¹[moG¼F†ØÄz }0OùÅh¼ó33±ÇÎ<ŸÃµg]j¶¶ˆpÞdœŒÜÿõ»z×/«ø¨lǘ÷QßüŽ+êº+Íþ*j6Ú}΄׌RÙžS#E1œ~$T¦¶·—ìÒ[#Æ“E¼,Ÿ.:óõë\žµ­}€‹aºöáYد>XÁ#ñàU¿êOªé¢+™"/lìw àŽÏZÓŽ)lô])Ûk4ð#Ï;B®Iî+¬ÐÖ+¸BÀÎï‰ œñŒ�ëW/uk=.ståcb-’[¾0?ÏJóOë—Ô6·1[K)$w< Ñ1å}¸®V-S$÷QJdX·mÚ:ƒ÷N}ÁÍiø÷L�FÑt{UûD€Èʃ' P©É4ë/ˤø:{ÙÔé ´�+Ázã=»ÏNq\­¤G]Õ¬í"ÌWsOAñ÷”�:{ §¨­þ˜×P—t(å à3[Ю5nÝ5;y>ÂRG�òFF#Ÿ®?:‚ßÂ:¬îím ˜Øü»³é[º—�u ´Ø­‚Íw5¨šáH8�‰ÆäjÞ›á]BËI½Ôn­áÆÑGmÓûÆcƒý*Ž­¬Üøzáìï4›4œ ã© b©é6[A©´–ðÌ8ÈéŸÃ¹ýDϧÞ·•[dÄ=¿¨ôª §F%µ½‰ØùŒX"©àŸÊ¥[ä]Ë7NBúÓÄ#€ãioS^Áà ǾÐ"ûÚÕ¼¢ÃÓý+Ð-#d•f(rSæüƹ-É/,®®æŠV‹R•å,z ²Éôá«Íàðßxž.ïá·´wf‘Ù±…SÈúñŠ©â¿èZf¢ßbÖ[}ÄíA–^zgÖ«kî›u¢ØéðX¨6py"Ní‚H?‘®Z– 7ÂÅ[G\VÆ“s3O#K#81ù›§½zv“z¯§D"s¶2zõÎ?Æ´µ]MÞÎ8y’Çœc§#ÿÕV´{mnîšÚÈ 1…i%à ~‡5¯aðþÜKæê—/u']€ü½•u¶Öv1*[[ÇÆùö©š@«¹›å?AU­E³K$ñ�ÌíÏSXÚ‡‰#�¼»7SŒ“î®qÔ×s©Í=äϪL� .#�OÊ1ß…r–©$Í)å[îcÓ éùÖ¥©Å6#¶CŒå¦¼kIB©ÁÏ¥VÁ?3ißÃ�z” ¨œ�ž¿�GÝuf`žbîç¶Emxˆ™‘NF�®fDe^M*Ìû�ç%HÅiê[~Êñî?—“ž)7qFî=kFÇF¼Ô,'¹�7GÏMÄœqþ{ŠîcðªøQ®Ó|×m È2xrÀ âí—ì�Ì£;™ðßÓùÖ\·E˜†&¯xb@Þ,Ò–F!ê8É3ùsϵ{ü¶‘ZÛÉ‹"2•=‡®cÃW²�!íQrÐÌÊ2pyëøšÑšå# ngޏþU‹{âH cP n?çñ®FçÅ ÎÇ~ÿzôG&‘ámV& º®­"¦r��ŒäzäŸÆ³µ› Jo±C÷ òÇ#à’Äe‰í–ð¨ÛO½M+L…m^9-bhØ1$’I9>çò­{+�WIÓ®DwV¨Z)aPAfX܆'#Œä`}jm.-^KViË”ŒE µ=2zðHé]L—:¸Ó®nä•Ö8biq` FXöÎ?*ñ;¯j&F¹óOŸ»²{‘‚ ýEzŸŠ¬bÕ<§x‹J ’5©‘™ÎXÇ&Þn Ú�3ÄgPðN³¬8Xå’1q󄀜ƒøŠæô]HéÆ&1‰§Ä…$�£œt=GéKs{§ëQýšK¸K‚v³�¤gŒÕÈLV>KO˜]´áÁB‘�ú`çôkkÝ/Uº’+ë(c¸Â³»Rq�øš¹w}©M¨}Z×ËL"ÈÉ\“ÓñþuwRÔäƒLXì¼T$.Jº0 úzæ¬'‹RÊÒ‰™¤XÀ P1ý?•R_ˆ6i¦_XÞ\}¦;Æ-(EÀ$‘’à qw¤Æ¿h�]�HUÔðNW ƒéÅG{¯]ŽårÖï“å¹È#Ðþ}i�xŽEa-½¬0º“‚fŸ'ˆo¥: 9 *�Œš§%íÌ£2ÎÄzf›i3Áp“!Ä‘J²)<à«8ú�^È~%ê³iv÷�ÅóT³az6H#ð9¬»ÿë÷dÕXDFA‚€Œ�3ŸåU|MwusákK™gv™�ƒ6ãÉþŒ+€µ-<åÙ€ NÉÿ [›Ü<àПoÊ«ý™žu‰³±Ԝձ§Ê÷¦¡~‘Œ‘õ®ã@ðf·}<2CjȪ.üçúÿž+Ó-< ª··Š€|´èO\güö®¢ÚÚ @Ú(ã Aɹ©7å9Á=ûdA�øÓ&¸X/RH'Ë©;òc=é�çå^O~_�bjš£ÜÆf™Â[…#{q’;ß·é\}ö´Ž† (¸ÃJܳ}a×�qX3:£¹,z“þ}ª«3;Î;S•1�ÉïM8SÎsü雲0OZŒãœ ÔmŒqÇáZT¸Ž` aèF?®*¶© �–E†Ö²˜Àã“Àu5ÔhÚsC¤›‰Ð£4¬pÀƒµ@ç™8®vèƒrÄt'µU$Àçñ¥ùäT–·�cmwíåYTÔ©ÛŠöƲM/SžîÖvžÖIð¹ÿžD…ž¹§ð¨¼ia5ºXã+n@bNXH?‡¼ƒQa8µ”¥zoÂ+Ò·žœ\�64œsÈ(J‘ø‡•u¾6{[m œyêáùå� çéúæ¹ï«À¯¸³€=+”½ñ$“³$9ÇzÚêY˜–c_|Q^]ñwKmVÿÃP?bYZ忺€ÆOõ�sšô—æ¯w©Û™…² ¶·‰s‚þ¤×1ak¨Ÿ¾£sc.Ý’F (Ü6ƒø “O²Ôm®bxÌp˜¤ûÓ0û¤�ܯéZwºÝέk7‘ì·´бDH1tç=Î3[ºkj°3,.Š27=‡ûÄ×5ñZÔ´»›+9f˜‡A$‹ Àäà`vàR|&Õ£ÕµûÝQ *4FxÔž>Wת‘ô§C=ׇ!HäP šKÏ’:×Ú!�ÄŠ6s¸r+ Å^*Ñ|I¨Åu8s9Ú¬àpq€+Y!w³´ ³d‚àðpHãóª)âùwÑO&Ö8æ®'‰¯5‰4Uåp£Š†M^ún ÁÛŠ©$¯!�˜‚2I®óáß‹.´)îtè6K²fÆ~u\cñQúWWÿ þ¿{v,b)—# c×üjŽ…¬ê·–úlîÑBŠÉå@ÉÜGêÕÁx†âaªÜ9ñæ1ú“Q}‹íÀ«|ùÀä·?­S{m›ÐŽWƒõ©!³f³yü¦+¸~À÷­�C¿»$Ak+–ÏEõâ½OÃ~ÕR׌°+|À–®×LðÕŽ”XìÉŒïqÓè+`¹EUãäÿ=¿* ª…³ÉÈüý}j¤Îï&åuPÆxÈÈÅgß\FŒ9qþ}q\¾©yrìÍ;Cf,«qœgñ¬›�^8ãû=‚ü­Â…ä±Çzäu=RÖÖ]×#ÏŸê”ð¿¯Ò¹{ëÉ/XÉpÕF}+2IX‚«ôÅBÝz s/8ô¦€MFä�±ŸZ�qWR9Á·nT\#¢W–O§ÿ«ÍÊ1LTúU„·Ú•´)2T9€3Î Ö¶¾‰ A2İ>Ùãô®q˜¦ƒ‘š Åw¾„jÚ§§,þUŽÄw19e`CñìV?νJ•صº À cÀ»ÔÌ×—xŸO—MÖn­äERœ'LWqŸ8ñI2ʬ‡ § ŽÆ¾–¶»·Ôl Ôg|G†¤ ÓëVm&{;¨nPb`øñÔ~#Šï^Þ2¦U”…— ‰Ø±?�jéòo|­¨Lr&«Ž?�®3Äú|°_Þ‡ŒîV$ñߊê`ð^ ¶ÚzÙ[4ÛK+íÆIÿõ�ʯ[ü1¸š2/fŽ Ç'o$tãô5ÜxkÀ:žž¾lFãHr=3Šëá·¶µ¶öñÄ3€@àdÓä|ǹNwŒ�§JΞâH É(À}Ä â« F0í+H[�HÆÏ�Umbo1™Tm'<ŽùÏõª3]ÈíæË!‚yÿ>ÕRKõPîï²5ÁÉõÿ8®7Ä:ä3Myá#*ÀœôÇJä5€Œšx1Â[æs÷›ü8®}îÝŸ$žžµ³1! æž ¤,9éQHùïÖ¡ÉøSsß½b¡“åo§ZD¿šÔû£ûSãx¯a]U•úé…qq…;ãÄ83\׈5¿Ô¥•£òÁ#¥¤R/—t�k’?¼¯þ<WwhðÃvÈɵÇîËû)È÷Ëþ•ÁøþÞxµ3upw …ÞHÇéú×›\s!9â£C†v®ÓIñË£­­ÅË$vé±n\“úgÎê7ßh¸Ü3Ǿk>G2Ó;RW¢h^#þÉñµµÊem¥”E0‘Ž2>œt÷¯¢ã]iw(¤ ð¶Ü®Ó’:ô®Wáš\6Ÿ«+U/1ÈíŸÆ»MBhbû"Íu ˜žX �þ?�3þ .ÕCK~\Bª.AÁ#úU?øKÃh, à�¯+c sœ}_¥yoÄ¥Ôõ«k‹¶VˆdmE@ÿõÖ¾“Áð푆.8È&Gãê*·ˆ495‹«†tÒÀ#8ô®N X¶µkyl$ ¬‘‘ƒìXw¢kmOaQ¦È²?ïªÃºÑo]‹÷Ü?ƳdЯÁɶ|qþ5öMîp-¤$uÀÍ(Òo޵“8þé©CÔ_•´”Ž¿v¦O j®p,äÈé‘ÇùéR7†58F×€©eiOe'ò"•´W·ÒYç`ŽÌ¬‰Ü©PAýZÑÐ<.§d—"åQ\� #ÐÁðú0û—$ó€¸÷­ éÑ�_{u-�_ð'ð¨¼EáM"¦Ù1•¦ ìRN6Ÿð�^Ò¼1«›ë+›�5!·PbP`“�^+­Ð<i«ik|äIt¬]àH¢ƒSëšM–‰á;¸c'Ë#qÉûÀgô?¥b|+Ô-›\ÔâUx"a‘ÉÁ`qø^�¯\´bB1Á8è?ÉþuÏéw>^¡æÝÌÞâ<ž6Œ‚?:é¤Ö-R&�–$Œ‚8Ω?ˆ¬`”Fb ƒŽG8~™üMd]øžêlˆHŒ:ÏøÔV—dÊÃîà‘Û¹þBžîªÊ£å'¨ïÓÿ¬*ŠbÞYà“Œ©ÿùŠÂº‘í¤'ÌPÙ;—<ç#þMy¾­¨É-ÜÂW,à�<ß?�®~VW}ìÛ@8ª.YŠ'#<žÕaad�HêM=›Ž¸ã#ÓçóªÒ7ÍÆ0:SIÉÈ89çëHÀ�Œç&šà’ivî\¨Æ*´Ó�0A$ô•M�‰Îü*Í­²Ì$,Àá :Œþ5T;ÄÄ$Œ¹ààã4¢GT` ÄÏ\TDŽNqRÚÁ%åä±mó&‘cRÇ$€ =‡5á÷Ó ûŽŒ²ÌÀ+A'çvÙ>c>¯u§i×:Bíòd›Ì9êqôÏ?ZÐð6«$ú�’Îê@ûDQíXã óœ…éèk£Ô¼Iw.“!„˜#hó �vå˜�rIÉ Àÿ òû‡{«¿-2îí€1ŽMYoL‘«3‚äô§ãT.í^ÆRŒN}qUI$òsIE-}ýEx¿í:Ea¢)3ð~‚?þµSøQ¯É«x|ZÊ®÷Žc$.FÌeOê*¿ñ˜µÏË‚¨g�@lc;ù®ý#t?½uBGÌX�β!Ô¬¢2HÚ„h^iNäãséU®¼_§Á¶;T–ñ÷`œm=y¬M{Ä×WºLöФp#)7Gø~Uå>Q·$-%ÇÎ_ ž1�é]´±\=�Ý¥Ã,hó.èûâ¹+ë%¶Ô!šÔp¼7¿­KŸÞ3ÔP\Ƴ˜dÖt–@äT'Ò®H>\,ãØf³eÓ/Fsm&ªÕWÒïÏÖ_o–œº¦Ý-%ÏÒ¬EámZSòÚ¸³ÇùíR[è7²\DΘ�ÔLsÙ7ÏçR ÝëËeÃçb7ö5×[|>f ^ï�e­H|j9’Yc>•¯eà½1$Aäo ÷9ïþEbXø[UþÖ¾K}0¼ Ìœ`ãºÍ#Ã2giZ„KnÓ$�’@)ù‘]Œ~ÒìgŽáZC"/$ŸOþµyßÄ ›hu»åÀ'hÆp‹ýkÚtë¨ît¸dŒ ²BÀãõë�¿¹¹˜ªG& ”©í…Á9ý?ZÝÒuD²Ž5—#¨Ç$|ÝjiõÛlº¶A }}?Ï­g\ø¡#…b¶�•\e‡ùõ¬—Õî¯.�–@F*Û4}OaÉôÁÿëTAË®AõþµŸ|²Å€@Àn=8™º²ÿß?ýjað³·R¿÷Éÿ …d”}TԃÀItëØþúÕ8ð¼¥CyŸÇù~•NóÂÌÚ­ŒO0e½Ê’§ ?¿¥dj^µÓ¬d·žW¸2*lv��í��ÀÖ¯„ü/hñD²É‘’I “Ïõ®¦ @„ŽyÉÏOÿQ«i¢Y!D¸ú~µm-¡A’qœøV_‰îà³ð¾£(l“ˆå°8ü0jö�všUµª‚¾TK®@“øƒú×%ñ8JºŒ€ʨ$‡q5ç_ ®”wÚ%³�N0C!ëŒ×©x§S k=µ« v”ç'##،ץKr5•žæC+DŒ…=:wîß–þyÈç€p01ÇéPÀêy$ãüþ?­D÷8É Ÿóú~ŸZlz˜�QCd�‚Ië�Ÿëü«NæúhRáä\Iç<Ö¯ã;h`e´ù�³ƒÔŽ+ƒ½×.ç‘å’VçóÔã†Óïw“8FOZ¨dk§Ú €:�*Äl‰T\y=ûóQ–# ¸ÇJ�äÇLf¢É'ƒÁæ‚@ã'�ZL‚}ÇÒNàAÀî:Ó‰o-ˆ8¨¸c&Xh ŒgŽâ¯xvŸWx$5¼Øú„f¨¬Ë�á¸<µ£mmÚ’¬[¥YH.O@pâ9ªšn›u«_¥�¬[åoÉGrO`?úÕÔêz à œÄ ÈFðNp; ��òk³mv)ô[wûÒ5ªÊsÓv9Ü0#ÿ×^gâ |ûÇœ/�àcÏ'õ&ªèZƒiºå­ÒŒ�ûXc¨<úפêZw‘á»éfU=ÎAÎB*‚HêÌOá\̾�Kž ƒ—’KXæ Œm.3�ÀRI2À¾c€H±5Ík7 s8‘È,@à b²¨¢ŠûþŠñÚѯ"ðìH¤³I2gÆ|¾k‡ðå­ç†î®!²»–5iBÈWŒðqZÞ+»¾¸¶Ò&¹¼’]·#¿y4Ÿoó$–\yc±çŸðÍEáï-¢˜œóÔõj¸–Wh¯û†PÎJ³|£¨.-’;fó¤g��ºœ â¨Úwü$wŠü08>Ü öjQÿÂ¥Îò.ÿ±Ä0Ç€BŒæ¹^ÞO$ÑNREìy$?έéwsZiQ[Ç„!NãŽNy<þæ�܆v,Iî c\©¿Z„\�5ºnÆ?J½§êKx$&AŽF3Û5þ!±±i"‘Æän<šâuÏOzÎ��ú­r—ú„“|Žå˜sɬùî| ïQÄ�XI0$ž€ö©�òÙôÎE¼ã-P³“IÈä“I�æ�œ Db;åª+¢ù+××Ú«(À¦J>\âµõ(hz\ê9’Üîú‰ ¬«’_[Å"’� R뚟V€[Þ8X‚&IUÏlñ[ÚƒÚóM—S¿ ¿–ÆÆ �Ž ôζü!¨¥†£s@öåÕ÷”ŽüŸÊŸâ�En hx*% zädþ¼âc‰ÇÇJï¼eÖô{}8ýË{•Rã®Æ9 ~ªMoC‹X×ufg¤½Æ´̟ʳb·±ˆWî¨éÜŸZ©}}¶ -ã®ߘâ¹'ÆóŠmQ^ëaf/u;«Yâ+D¬„rÇçÏå]~“á%Cwö×ctˆ@çÔgðý+œðu¶�s­ëPÜÌñ…”2"n�~½@­›­H¶†–�˜‚ìN@ @öâ´®õKXÄ )�.3�Á ò>µAuHüµoûìÿ�Nº”'þZ7ýöjdÔ"?Æï³S%üGøÏýöjd½Œÿÿ¾ÍN—h‹ÿ52\¡î?ï³S¥Âžãþû52Ìeÿ¾ÍL’ƒÙï³S«çøWþû5:;€©Ï«T5 %]sHal Ü(Ë}À¥fø«ÍL·")HÛhÏ$ñŸÓ'óª^Ô›QÒe0²(�ÏQ’;Ÿæ*ëd•a§»TÇ'$ éùȸñ•j¸k¦˜ƒÀSÛÿÕ‘ÿê¬k¿Á )ml7yÎç5ß^ê:kÄ ˆË¦S'¨ýáùkxOűϪ=¬ò`Î2¤œå�ä~Yüªß�oVïÃ7!+PH<‘þ?ʼSLšKmrÚxÉR�´°ì+¼†ñ‹vÉÇR}³þ~•`M±*OR;ô¥k’TF @×9$ç<ŸåUæ¾°8éŠÄÔoL©„b gpçÛüþU“>«wy‰å!u'ŒœÖKÝ´e€;ˆ9Ï·ùEî c’H=¿ÏÒ bÇ‚p3ÐSãvª°à)À‘Á?•4¹Æ3“è*2NNOµ!'‚ç'„sœòO4ðÎïJTA+"D@ä“Þ«êLRq€0@ÈÅT.Ï'·©áRÇĶÈ›”ú࣠~µ•|ºl½sWü?ÚoÙŸo™‰‘õÆqï]ï‡"‡NZÛíŽFbB2ÍèIüqŠ¯âø™à$b@Ù8éÏÌÅЧiâ’ŸhŒî“€­’p;œäãÞ²õ[ˆ^%„!Þ„‚ÄõäÖ°È?.|ŠôÝO]²‡vVJÒ4¢ÔÛ¹2–'¹ËÖ¥ñ+†¹�F–ñ¶Þ0D)Ÿ×?•p÷w™`2îk3PˆÅtÈX¶8ɪ†Š(¯¿è¯4ø¾²5ŽžcMÅVbO Ì|×7aáȵŠE‘à’hÜs†¿�UñÖŒš>�§Æó™eîÞGEàçúWDú‹q¤É,óÿßà©** I®ZÞÝiK…�õ-Ò¨_ݱ�»ÌÒï1Íc\\îÏ5Eåç­BÒg½BÇ4ÌR…©U*ÌKW ã­k&1[Ót­›IÎõ €’GSTü7$òxzÉþã/_Gaý+“¿ÔMñu�¿Ë–(½ÎAþgò¯PŒLP3JªŒùGNÿãUîu +b<ûõrB·çü«&çÅšdAŒhómîNùÎkLä˜"HÆ8ÀÉõΟ\[êwÒÌÿ4²8ÉQÇóý+ÒôïÛ^é0Ý£ƒæ¨Lgø°ýkÅ|~Hñ-á<œäàú�Rxjòxô”¶g DÅvç§?ýzèRtxÀ�8©Èà/¥F÷>ýê»Ø½@ª:ЦH<Žõ�6©se+ù.@|œV]å̤‰¥—sH¬û‹¶a·¦9çðª�!|Áõ5’’Õ9gc’F!r;ÔnÄÓ7~4ƒ$`Òã#×)ß €KÀ§ˆöÙÈÍ÷ØdûVP”“ƒL‘²8íë[·Û¤ðž˜ìyrqìùþµÎ(l‚1»µv–:}¬°Ù_Ëûøð¿+tÎNsî wf¹²å”ÄG*1Ž•y½ä’iÚ«å|© È뎇ô$Vµü±Û¬RÊâQÎTü§ŽOãúWtèÒ³(ã¶k¦øq©C§x•ç¹v ¶îcñ¿¦Ooº[ó®–Êþ ½GÄÓÃþ­ìâOœç̽?k™ÔŒ™óŠàc¬Ia‘íá¤9é�Zʤ¢Š+èk@ÑêÊàaSׂGõ­{ Yе«HAV`£ðÏø×œXjGJÖžÿyýáe`xÏ_®Aü«kQñYš D�Ž2OAô5�ºÜÄ5»¾IdÎqÍeÏ«L’­€:Œà~Eâ)ÁsúÕè|HÜeÍ^‡Ä£Œ±«Ðø™x˽‰ãã,!W¡ñD*µã–ü‡øÕø¼Wf1’ß�ÿ½‹,xÎïÈ�^‹Åº ù/øÖV³ã-4êšD±ns³+x˜ ‘×…¯x¬ëp¡¤–<ýÒús^iá]hÚ¤öÂwŽ T�ÆXßèã]Eƶ×$»JÌ2~ûwïYwÄQ)*ÀœöÉç"³e׸!AÉÆ¯ùö¦Ï+éÝ0#7)Éä3õ?α¯<)q •xØ2�zA¯E‹U:¿Ã‹û¶1¸ ÃЂ¼~DW d ¥Ã(åJ‘õšèa»S8nJ‚G¡Ïÿ®“ûE€É$ùÿ>”¿Ú€°,Äœò;u¨fÕT.Ô99ê>•Y^êí¶ÆŒsßüâ¡x<¢|é‘@<àäý? À¿•bŸ’S�ô¬ç˜¶@ TdœÔ¨¬TqϽ;nÎ@Á5;ÐÖ˜N ?• äH9íŒPü)À=�>Ô¬Bd‘’8Ï¥,Vï9 ĈÁêzš¼è¡UTaF0jÌÔ"3] p>بáÓYãÜO\�*ï‡á6Þ+±�eûdU]J—¯� ÝŒ4¨ä}rÁbc:ààŸÐì žæË÷¦ÎÒ€œààçÜE:{©u µœ‚ÛP:N+…·¹6WáÀÊ‚Aˆ5>£0”ù¨ 3Y × 8âŸö™NâPd`öÍwÚ�Ë];\ÉÁ�î#ÐvðÀü+›ó|ÝL0UÀ Õ—©¸{×#¦MR4QE}ÿEp_#2ÛÙ¨˜§éÿ®ZÚîKKkY”í Ã'¯QY9¸þб°S!ØÅò}1ÖªèÞ)û-”6ÎX¼+°qÛ·òª2ë³™L‘œ4R±_pNOó¥—P2F †'ÐÕV¸9ÆsLi½é†Oz7Sך•V¥U©×б`ÕÈeÆ9­;{ŒÍlÚê0[yœ*çÖN•âø4ý8£ƒ{G$Ã$ñþµÏò"¼ÿÆ÷sÏs¥)#3ºã±ÝšÚ°ñmÅö—oæ\ÈÎQC|ßÅŒëQÍ©&~w_nk2}qA*:úñPÛjÒÝjA’d‘ToóšÌ¿¿d¸–0N<Æ#<÷­_xŠxµkM5Û÷3ܦܞŒqüÎ*o7üU7CÔŽ?à#üj+7÷’#pŽ»�÷Å^kÒ„~´ƒS `±ãHu4 ’s�þµR—R’VÂ}0)�mrè$“½ƒœgÚ³ï„I Ä»¤‡ŠçÞä‘Ï$qš�œ±ÉëJ™f©|¼õÖ,jŒ±#‘Í0ŸáÎ)Oþ´¡²==éÁp¹"šIg 9ô«¶Ö¢%,ÜÉëéI8 m7žÕ�¶O$Š楟N1E¿#õ­c™àÛ@q•žAú%`„Úc¥tþ‚äèèV0èóÈ«¸ðxÿÐOå[?Ú×I…¨ áÔ×=âØ×í‹2ôu#銣i}æØ}™ÔQ€Ozɸ$±Î=*(åxd‡k/q]?…¯$hµOI<²Ä³»©ý(Ô¥E"än櫼¤œ ãÚ£3:òÔ‹vบ™/Û e�\K›�Ö¿ï“VòaÖ)#S¥ô£ª?çS&¢ãª?ýõS®¨GUaÿ¦MiAÁ ‘þ×ÿZ�ˆ„d’à äsU/|J“˜ÙFÖŽPÙÆ?ε<7­µçˆ-­CdJyöR¥szõÈIÖÕ+@Ì ‚Irsú�Ê£MjAWqŸ¯ZcêŒ�UG¿lž@ë]5ìÏgá}1"‘]žÛ|Ê{31`@ìpWò®KÎ9lg’zO…É5?òÓT`=øˆJÉÑ im®Üg†QïÀ<~´#4LÝqÉô£í1¸ óÔP’[îó°“œw© õ”Yòm·€¹ÍV¸Õ¦—…%WÑx›%ÈpKäsÖ³.†òJž�ªâ;A~3Òž�AǯùúPÒ€2}j6”œòi¾i=@Àïškí sƒõ¦¡eê=OZq|žN{Юw`g¶*Ä0‚CIÎ9 jàs·° pjy9Ó9ª“ 3³ ŒàcÚœ�§nÐqUô9öý«±ÉóOâ?Â¥Öb ªN d \dÕ樓ž/¶†õŠ £‰ó€²�œöÁ {‘]¯Ùl ±`d!íÎ9I÷'ýk—µYm¼J–7 „—tdg¾ ¨ýk•ÕíͶ¡"Œ1�zÏ‘ÎÐ3ÅFA#8?�I $—#¶Äf›Ð‚ ôÿé’Ùj·‰äŒM �r8Ž?LW1©A¶£�UwEÀ99( ÏâOã\æ ›.ß âª(¢¾ÿ¢¸ß¡‘¬”c˜æÏþ9\œ6¢ëH«`ÉûŠã¼WÙiºD3dJGÅÏøW"×°ÀaÎ}«WX“ìWƒò£Ä’qþÒƒYË|ãÒœ·@ŒŠ�NORiÂ^ië(ãš·Þ2;u«ˆ¼Tê¹§2í¨üÌSÅÐA¸œ së) Œõ&¨Þø�•`œý+žMlDÒ…cƒ!aô'5±{v$ð®—©º†ÿ]ï†\þ•ÅZßËo32œ#í«O«2wƒUåÔKóžÝ+SÂ’ �x´’ùqÁm,™éócjóõaYڽܲÝ4(+�•ïV<&Z_x}3œê0ÉÁ®«ÇCÌñ}Úò*~‹LÔíÞ9�ç=EU7A‡ëHe‰ˆ'½=g±DDgLÒ>®#R …c5�=ü²]™²{š¡q"0<óY†72àr*@ˆ:žiÙUàŠ�¦5�ƒë@`x<~5o”æŸæ9À4Òãñëš•7IŽ£Þ®Â¢�ÏV©•¾oaQÌ@Êzš‚4ÚàŒät5[Qg]«¿å#8­hT?ƒ£õIÈÿÇqý+ ”Û�éìkÑtÛ}:_XÝZ;yñá]O%d —?Žxö5‰­a’Ýu41‚@ N?°5(Å÷†-/2)hä#Ô*äƒ'žj"K1êMzWyàm4ÝxkYžß:\@§ý…))Ïâ•@Ö‘È—þlk”ˆÜ{ïþ•…t»ôãìx¬ZJ(¢¾˜‰VY-Ÿp$©ÈŸóÞ¥ºžfÓïb‚"Ï$%T’É¿JósàÛ¹Æá"‚ÑšuŸƒ5XîDW(¿hAüC ãóÔáåÑmÍt‡¹"�|>$ÞÇ]«œUY¼¨ÅEÉÈêÆ*)<ÈáZb\ã­+x:4™Ü‚q�¸«6¾µ7•™Ø†88ägô¥])Yܳ– AÀÈúÕËmÉ""dÃpJ©ÈÇLbµ­4k†H�¬ ĬÑ.AôéÅrW–Éò'’ŠT‘� VÌŒ’‚½°8ÍU2±9ýsMiO|äúSK“€3[>œÅã-%ˆÈ3íÆ¼¤ZwŠ”E®\€9ó[�ÄÖ ‡#õ¤É#F:ÖT·e¸,MR–v#ñTe“$õª�žOJì "†ÀŽb¼•3ùŸë\A‘PŒäŽ)qÖºO ¯Ùô�^í¡Ü¬#¶ßÓ%Ž?%¬Ø4ÌT’¹àšÜð$~oÄ ÿ/Šß�&º¹__¸9)9 } Z±ÕìµÈÄlw#ªžÿJÉÖ4˘d=×9V)y"á³J.Ïñb¢k“¸ã¥4Ý.ÑœÔ(~xÓQê3P¼£#Ò)gû«�OZdá¢#$~òisJ¬G½,p«ODÉËuíVâÉ^;Tñ·b*u‰ƒ�³=j&R1éYz±Ì‹ŽËZÚl…ü+v­‚bž2}Ck¥g$•ÕøQ1Þ]éÎ3Ôe‚žpëéõ\çé].ŒÓ[Ï6›{oò>^<¯¯Qúþ•­£}ƒF½†,˜™üÔySЊó9£+#c¥AŒs�Ã4ŒO\Vφü@úã³Æg³”~þܶÈiú�Çó5Ùê—žš³›x ·d ¢ã @#Ÿ¥q¨HI\íÐV˜ôëM¢Š+é[@@S�‚ò¤ÁD ‘ŽG_óÍA§Ä©$g998ëŸòjï“:9TàžÏnŸçéW¢²ŠPØÔtštútDTR@8ú×1w¦@—¤r |½­:{xIPÀ”Ï'NHaxˆTAŽ3Àãñªéokm&ö`žÌ02*›=„7aƒÄœ?Ê­Ä,ÑIû#1<ƒ´‘OYÛjéœàíó\Ljì’hÞT>]Üx.„�˜`àýq^vҖÀHöªy=øý)¹=©ÀztïZž$x¯G$òo¡›ýkOÆð<#»Wo0“�|ë\ÌŠp?*M§h$t­M›Ä 3ìŒJŸÐ/Ì•M®¼²Þ±‘Ãä–Iîk/c`u=¸¯P€ù4…ÿž×S0ü$qü‡é^ww’@È–:¥Ý„l‘JÞY9(OzzW]y¥\˜’âóá‘Æzà€GóÌ]ŽU”©A*‹JrNE5¥$p{äT{ÎyFd'ÞšXúsB¹ q‘È¡åw9,Lèzw§u�`�Öž®QRXð8©NG$VãÆM\^T`~Tæ'a#¯\Uf}’‘�rrj9\4RdçŠÃP ‘�Hö®—Æíwp8‘UǸ*õ®{f< W±x&òÞië,±)F—° "V#ê0E_ƒ_Óts-´Í…Œ‚ªƒ dr?àk̼WªÚꃘTí B’0väãô#ò®VPr1Ȧ9Îi¤~bµ¼7uö=zÕÙ¶£·”Ç8<}�Áü+kÄ@ý¥òI!‰°u@#QYxã4QI_Ñ\Ž´šxt“ù¥b[ #æ¥6ê!%Ü\îÒ´cHÈ Uy­Xµ·‹fÍ‘½WÞ´ã±€rÆ?®Þ•�ªép˜]²ÌO<1ôúf³í-¡�hl“Üc5$rP$ç#µUžÖb[j¯^ ©z¶eÁnb9Q»¸9ª†8Kä®õÎp;ÔÆX� “úýÊŽôG%» ¡ao·œ {מë0Ëes"Fáâ$•oQ\ä¬ÛºTÆ |žj"§®ÏH�æøavT ±jLýðŸã\;!ÜÜTìR„ç®¢Í ŒÅ02M3ÈñÆÐ�ý×8P—'×Öº�†�—ø•¡¯LI#~Q9©¼_/›â-BAÞWþuÈ–’)‘ãfW!”àŠêt9îµÃu “Ÿ:4/ûC8?Ò ÔlîmADGûB°å�)ïPù¸'HsíLiÀÂäõÝÔñ3ªl­FI<œš3íCÞ”¦*E~8ÓÔÖ§…O?7vpjuÎi“giçPr½k7RÁ”}+[ÃÈ$Ðu˜ñó(‰ÿ ÄZÁ1üí]�`ñ¶˜ÌËŒÊ9ÆØýq^§¨_YÄ~Ô²Dínwî^NIˆ±¼Sâ­.m4Ãg“$W±0+ɧu‘™�`g�íU'9¦•8ö¤ò®ãIº7>E/—‚C ó�È?‘ÇáX«�2dìÃ5ƒ*âR=é´QE}#mu€Â�õà ¶÷Giù ô?Ö™ÆRz€;Ãüþ_�¬Èpvœßëœÿ:еš%`d`G|s�j³%ý²#\n`uçü¥s—ö¦ã'�YNW-�Ÿòk:[yˆQ$ü�ÈÏR>ŸZ©%¤@9iØîôþ¥@-à‰F.X±³ ŸóŠlZd Âf’E|@ƒWZ(B¨Ï�œ�À{þURèË‚�ÎÅà–ÉV=Ö™q;g,Àu ô>µ‹w¥HT�ÉÆk5ôuiž1Á gŸjX´KpÀJì8U±£ÚB¡ÚpG¿J³§éЮ¹cqa RÆû1�H`Gò­/髨ë³ÊYƒ1dsŸÃüæ°Ã—%˜�@㎵(ðtÌB‚Ié€yÿ?ýjÙѼ¨Ú^=Á…X,l£yÆ7 ø:Óµøs—–îä°áÆ íZWÞðÍ·‡îíªݱ_$ŽNxŸNJ©â?쿆ÚŸžcy ç¹b›W;£xb_M7R¾Òde†?®jãxÔ "brHýúâ·-tö²±†Ý˜²Æª>€`~XÄx’þÖÌ„séþ}ë•™0zî*Hôdç99÷¦ðOJNI⌚Lq�ñ uÀ­(äôÁ¥'šxƒ§cR È ãó©Áô<Õµ…àâ­G‚ ÏùÔ½F8µJïjÛ‡LnäêGÒ³ÞRöãx"¨ ;°{ä~•«ªê2êR«²m*Š€EP£ôœK0Iíï]þ‹©èVÚM�„ö²\\¬d°‚Ä–o ý+BâêÇX´•m¬¤I¡+Œœ’9úõý+�×­í¤�M¬F0T–ÎHà‘ìMC¥éztö²µýÈŠPàF õäŸÄÖ”~ðê’fÕ™¹$p=ê…þ�¤¤Nö×ÌÄ‘œŽÕ†–R;ŒªÈ$ã8®£\·™€œ£*€ÄpÄ’~k#ì3ê6 ÆP;~v'¯ž»†0ò¼*¤d|àšl½¸$Gå:|àgŒñVOƒup®Æ(¦rL€tªkáýE÷„0P !‡¯º¨®CÆòˆ¤°8ÎV_æ•ÏÅrvŽ úSdº"A„ÁÍ[„¶Ñ€IÇô«6ìU±! ëÏZ׊êÙaœú «¨\¥ÞRL8Á*qXÒXdaÃùmŸ¼ÙäÕI-·®àòw&«ÉmLÏuÇw&¢x!˜ª,¬éŒnÛŽjEE_”³(ÇZŒªF‡dòï�Íþ}+>â+©÷fRF9‘X÷ZKƤ?#X·Qä²€;*Ÿö2’Äs�ÅM‡hØÁ,q“Á¥}6Ð#Æ-ˆ!H,k Ò¬ÖߨŒâIÕËÏðÿ…r�áÀìY$b§Œ‘Ö‘<$ÌÍ´ž954^¼˜f-ƒëÅtCÀ×3ZZZÌÉ‚=¡”çvI$þdÖ•§€ô]:D7DI�¹g™áTÓ/MÌIT�QÁþ‚¤× �¬dW#vOã^mwW8éYì0zfO9ÍñÏ4ÞÝ(ÁéHAÎM'½ºRö§(©H=L8ÇÞ¦€Ä`æ­E�õ«Cÿ:kª–PØ!¸Çëý+*IJ\ì8Ûüª�Ég“9ÈÎ*=�µÚ"d\F±±ôƒJ¢å÷nÚy­ Mkk¬­åðc1±Ä`3]Âëúqy¶úl»œ÷ê2GãYú½¥”ovÕö:Ÿ#Ÿºzçõ®'ì{î�6pçî�ÿUo�@’BSØ�€ç©¥ŸBðâÆ¢-IÙØòMs×ú|0ÎRÚo4v$V¿‡­'Xo#UóLª…U9 óÚ©2I àŒýæù>)‡ÃW³JÁ×øÅV}å_`x‹w…ZO j’ hã�Á8È�cüñQ]øcS²!eŽ=Äg 5xwQCµàÁÿ|W½Àè#L@d“×�ÿשÞä*€yɦ-Ñ@J…Á†Ïz”\¾v9ÀÀúÿŸÂ£i%÷Lƒ'¡#ëÒ¬™f0®f�F01É'ŠË»¸HÀ¤wÇ'< ¨×E”3©q×­E-Ü.Á@|Ðÿç·‘ Rœ0{J€j-ÁŽ.02IïQÍrÇr*c_óþ=œ¦YܰÆÂIàuëùÖ†™a6¹¨=¼-±”Üàž?\ŸÃóïâði7ÜD“¼hKÜàœîq^Oª]YÝê 4Ø AÎ@È#¥ ¤ßNЍRr¸"® p€M)ŒcŽ?Î)öú,QÎ’‰ðF@=yãüý*ø².é�3€F@ Hm`\‡@1ØŽ?ÏøT¶‘Am?œb ’p~¤Ju½ýö¢X[Áå b 1ç ã•MýˆæEû]ó¨rÀÆqý c_Çmý©miäÉ#’p:Ÿ^q\ߌµ—•aÒÉùm]€'¾Hÿëþ•±àÄ'Ã19FùžLÐüÄJßXœª¨ˆ¨òN>µSS�`·-)Ú�J“‘�z�Ô\¦öRÈH�‘ýkkkg' ëÞ©½”Y¸”‹'’=� Ý3G�¸á°h 4å„‚Â�ÄC`Òª@'ž•aS)�üÔª ¡úUˆ‰Ï.=¸«„ ’1Už3$B3ÔdàKm>)epI`?Oÿ]Y{|÷Xð¡c®z𣩕‚S@úúÖp”†¿©«úP3ëêI “»œp'ùWE}rt-J;›sÃ) „d“�ÈóD°[j¶ísa.^(0z¨?­s×V¶Œ ‘8V€#¨<‚=ª"$h›Ì' œŒ¥G½Ã¡&À9<êü=áw¶£ª]$:y%¤Œæ2‚F1Û8<úWAâX­õ[¤ŽÕšaåæÔàŒôŽxúŠãúŒÒùÙ�©Á$àdŸçÚ®ÅàíH IT"’.x®ŸÜD’Êï� üjÚxRq!IKdô!ø©G†M²•’(ä'�þaq�Zú’Šäǰý+„·‚êðæ5ù[ŽSŽ[ƒB½<³8ç†Ð�œK!ô5j<ÛÛùhÛ“'q5*XÄ‘€"À¦µ­±8¾¦¦“Pû 6ÐAlZFÀàñ×¥û£}e“ÉP2Böj› K;VžIÌòdŒ9È+ÓPþÇÓ†«9óc±?Ò¸�V¼ñe›cqyY�¯Ý&½4ÆD ¬LÄ P�†+ŒŒuÿ>õÉë—V¤˜å“lЏ#ß§ô®>æ;F' ÔÖl–výCöõªífƒ�õ·LýêŒÀ£ g“Û4F3�M „¦ƒ ÿz—Êç­8À6çu4FÞ¼ –5ä|Ø:®Ö'}J ŒýjÜc?ÄÅ5Ž$VÂÕYmU²ÌÄ#õoû:­]ÈËÆi^Ò+{yïaFÑXrJKŸNÔ‹)(Fp=+ªÑ¬ãŸÃå¤Îì1öäJ[MjÞæ°¿�£F6ÇpO\þªê:-âJV0deRå�qšÇ p¬ÆØ±ÇZd‰#Ê";sÀäÕÝ;F¼ÔµíPÚL�Ï� žOn•èšF“§øwG¹�ïCj³ ÒH‡Pq…>Ù$×'¨hÓ°[«[gxOF'’jµ¿„µ9?x±0ÁùºÑ‹ÁwY瑺mïVað•è‘„Œ?5i|&ìA‚UwäÓŽ…?ñíN†F8®–;¢HO4) cüûU°æDXã'ùþTC"±Ê³œtëRùh.ƒzÿž?*½f,¡`ïo–$rHàœþU¡$¶ïÈá‰}2FEs–NÒ³£©ç �¿ÇùSO™Ôà:þ}ª¿Ù˜ÜI 3’‚úýj'Ó¤iìÞIN×ùS±îAÜ"~¸©-ìž9²ÑÀÈbsÍh¤p‡`v‡nOÔ —Ðút‰ „å¸<ñÅWÔ?·®€ŠMDryÀ<týj-#óYosz…œ‚ÄŒ�@+kû6í"$_cÀETþιx75ÔÌÙÀØsÓüþ•TÐÏÊÓ‘¼ÈÇ?ç¡%¼Æì´$¶ì‚8¿Z²lîYC;)ä.2Où?Θ|;«¼eâ‘�•ÊåGÌGOÓùT7: ûèdƪ >8$€Fé\ö·ã–ðy,LkÀ#°çõ5W×sk%r$(VݤÈnQŽ~¿¥m^xCN¾ºyæ–C#¶O9ëO°–"Ò=1Ar2†# Äç>ù«’j $§)1*éÐkV°}R Þád+¸ ðy§ÓùW/'„¯¤”¢£ 62O@_éOƒÀZ­É(\ޤàdœçY­áMXNP[9çààóŒþ”�á-U�N1ƒVl¼ ©Ï}R¡Ž !(î¥M'ƒ/•LKlìŲ¯íž*$ð®äƒP:’i’xFæh¥Oô’7(ÏGR*ðn¡²Fp Î:’)ÉàíAðâ¥ÎF0zEðV®à„€A?1Çdþ•^O jê@ŲsÔTxQˆþò�<9|ð‰víàpM4èWª\¨ç'¥K�}&ÕP “Üý?Æ´£ðv¬áLò2zU“à=E³\Æ;çv3Ú¥µðUì0™æ2YŽ@9úbœ|p—b5¾C,‘–Á`uøy<×Ý]P2qÉ?OÒ§­œ¢­ÉRN[pä�þ½h§ÃÝ:"¯Ô¡€Áo|œâ¦ ÓdÍ4’3óIö©bð¦�8�ž2àñúþ?�h¦� ‹™$™ƯƒÈ#Ó¶1úPÖ:tR†’Ï+·#>§òüª)­-KlXö®ýÚ�œsÏOΣþαIžG�› �ƒÆcóüêmR¬ÖJ°Ë‚¡óÈuüFid¹‚ÝYfŸtìyp™ÃÉ¡üi…P­-ôÌqÁ ‘ž€þuï7—”YŽã¸ã=O§"¯�-CËrÅÁ(Iç¦?!UÚì\,ðFF€Å”Žp9§å_EQ\W�å0ÿg°lq/þÉ\¤3† ù¹ãÓ¥9˜#.ö`Xð¸«|Å-�~”ø£¶¿Ï$žÕ³o=Š&Ý�ïÅRÕ#[ˆÆÏ-2z)ëX±ÙL‚²ãÎ=j9¬ä‚�ÈH°çüâ£{Fxélä7 ØÈFåˆqÏZÕñ·næô­H­‘ "€¼¸èiÓà ª¸ G\žÕŸÄ *ß*Æ:p}zVú¡ªÎ¯wòîÏ?^ŸÊ·áÒ®F^ªàòv¨î,/ È‚ñ¶ž28ÍRŸH¸’L n ç=;ÔöÖmƒÄZUrýMOokvÈ`Ùî)[H¼º% %ˆÎYW¯ùâ©ßèšÅŒmtò"�Cmœä n£â´´ÒÖ?»u·?Ïùæ¸kÏO5»FÄüÇ?…uVz:j°Žæw1É r€8ÆFqúÕx|5a¡Þ[ê6æFxÜ�¦TŒþµ¨š²I0Y2Î`ŽÙª³Ü,ÑX.AÇc½qú�†®fs,QK±ñ�ÇžzÕàÍFBCÎxïM¿ð>­go¾YrùTäŽ3ýjšøKVpÙÜHDð†«#>Tã¥_ƒÀ·ÃO†âHØÊÒ0hGeÁüsPÉà­RV/»"“šVð&§2�½[ž‚«Má;©X½´¹8`IìzÁ·«6ÎXmÜJŽÔ§Áz£ÂÄO˜7.=*7ðn°ˆÉrî=³�ñªÇôc&ÕÀÍ2ùåò„L õ©ŸÃ·�†-ÈÍ4hw¾j©QÛ½_µð¾©>0¸õÏJ½�µ9£$Ëç8&ž< ze�ê,g'æéV¤ð]ܑȲݢª äw¨$ðMåͤoÒ´l¹ëŠt?`@¦k¢ÍŒ±QÀ«V¿,‚qrÇ … ô«±xΰÝ˳û àSÿá Ñ£R0XžwsW¡Ñ Æ ™ƒ2ìà�óÖ¬�O…I# ³°î)¿dÓÄ$Gou’œš®Ö²£îù¹ã?O˜ö:h ‘�«³.xÿÆšŠb…Qç m6Æ9ç·áÚ™ö˜n$aÛG*©ŒûѤN¾\ÒIœîV_cþ"‹•¥>R‰»Œ¶ ÀT—vð4‚9$o˜pT�§#?­Cq ÞÌÓ ãjå­ÝŒˆ%Ž'|€A©éÅmZJ²Äá¡ ÆÈäÿ“RYÛ¤10žDÜNT�jI�1P†"AÏ-ú~¿ÏÚ 04²/ �Xvÿ9þUZ{{ƒ2¤.¤+|Íê=?ϧ҉,õ$à4k>PI>ÿ�X[ ÇPZd\ N1Ò¢“EÂÏn9ýiÑÅ4ÌÜ�ŒñŸJ««\_m°*ƒÎ 5�á‡Ô¡¨íÏ(#€y9¥oº;Ü¡DEÔg�ó�ʬÄû1L¶s€9Ç?ãúU‚!e0’ò1È9¤’+U`Æ"Þ3À'<ÿŸò^¦4UÄD‚AœààgùÓÐÛ³•EØ �×$àæ¦há–0؆pr?ãOF�(\¨ävàd}iö÷6°Ì ˆ–‘ ä®F ©n/ÚxC,ì¸8<óÎEW»Ó,õÔ¬P ’x=}×Ú¨EámHQr9äõÇùúÕ‹= Æ&y`Xâlmm£© ž~¼þ·6&fF  þªÿÙyTd$  ?�ZŠÖÅ�e Í€ô«FÞÔ8eü Ÿ_óùS…²Œ´ë�2r8ÇøUp°Ã#ª] *–#ǧëM~ù‚²±UÀ%p2sÿ×F� e� Ã‘Žœüª+‰‚#Å€ Áã óùÕ´½„°YX�ž©àUyµ*61Û‰Ïù?Ÿç—y÷²Ë.È�ÉŒd€{�ÈT³#Íl!;UKŽ˜ëùUç†æ)DùäDÁÀëƒÀÿ>Þ”8žSKй,èÆçR*GÁUH$)Ï?úß• mlÛÑX¶R3Çoóôªñ›YÃB`ëÈ%zjO³ZV¨I�Áÿõ~F¨I§—�eÆ®¬@Ú:2*hÌî€:Ž0GA“È©ÞÓÊ𖱜?ɪ¯`¬‹äÔ˜§�<°*9$ ¹$b¦ŠÙ·4¬ÌH<ƒÓÛ�ùâ•#˜HYÐñ�NqØ�DñNê±ÄÁ œòy?ÈÔ‘ÄËy däj‰d}謤dœŽ•¡²�0@Éç#ÛòªÒ¬Ë¿,X—ÜxÎâ®[[´�†Ël�qŽØ©Þƒ1R3‘Áçµ@öèà€I8’úÕVÓ-ð&!¼ÐpOjX#Þ¥PÇÔÉ Xtéfgœ$lN({Ÿ­H,¬à‘¦–åX0ÀR29üÿÆ›,оL<Œ À½ÚŠá¾!Ïmºds†bâm¡G\l®nÚæ Áa·$w'޵¡<>|ÑO�žBœñS<G�Aaü^ôäWE—N[¡ÍEi/ (Ç~ŸÎ¥™QG–C18éÅVx¦�r››8žGzd©wåâW_‘ÁÂNÕ #Üìrylð½GZÑûWqÜ×ó¨ÞÇÉãæ«Kc­‰s´ð@5´KWÙŽ¿*·<ÔÓZ4ê<¢¨ìA,@8ÿ­Ht´hBKw—n2@§n±�#y‡€J�œŠ®ÒÈ"°wNđ𠄔T‰U€;b®¥¤À�¯ù÷©!‚WÜ ÁÀç§ùþ”ãjä�àd‚¤M>B¹.#‚4ñfȸóÈä�G?•9m�LÅI< |ºtr¦^ä„ =xæ©‹+H²©3¤€×5TYU‰ÇÇ#©ÿ `� �1Ö¤µºˆÎñ›r:½W ÊÜ�ä†<�OÖ’+—Œ1¨“ŽÄû þU ¹šiw�cP‚x¨á“ìàµÔÊä@ì2x–)ç]…XáRHb8ÓùÔrjbYK¡D ¨ëŸÄÕØo¡xÁ.Aúzþ½Z[»b¸Rqø“þ}~•)žÔü¨÷ÀÎ?ÏùëT?´Õäd £iÈ pG¿×š…õ'‘k`IœpÿõÓâ”>kB¬22I#üŸÊ§[¤HÉãc©ÍWžöY@X!@NÐGQMF™ ¢DnC(<ç¥A,û!  ä�9üŠ|7<[JâE«^?ýu^Kó�T«~`GAžŸÎ mF(‘(íÏÒ´¢Õ- eD`1z‚?™?�ª‘j6ÖÈOÌÛ†Isßüÿ:eΡkz±R„d’8È Uˆ¥ÓÑCvŒž½?úãó©~ÑjÐ…NHÆ98ŸÔþTž„0Œ�Þ°AþU ÜÅæ(1BáÙ@ëŽßNj;‹èQÁ·%Iœž õþu@ë�ÄùÈäãŸOþµJº�«�æ0çw«rj6ñ‰§•QIdŽªöz´Wë4Ö©–ª1ã8àÿŸjœÈ¸'r)#sÉ?ýaN†v†D Œ“úÔÅÃFîì¹îÎÎ*l—²î;PG9ÿ?Z‹ík(uBHôëÈ'üûRE’Às€£<ãüŠ­q¨Ü£–ò¶¨(\’yýZ„jº™Q¾Í$ N猃þyj+·1šÐ¤œnÁ{ãð©þÒ»1žFHÇ^1þÕ¹ ¨=Ô3H ”HÇÝç®*34BÜ3(@£€G'Ûß­ù¨ÜÎ|¿Þ¤{9�÷”é¯_Ê?gˆ·æ>µDê—â@�Ƭ@%Ë.ï�ùÓ Ôo%�yÚ~1 :ûUĺÈ0•Ç z“A¹‚#üqùP÷ ß>ß5TJ<ü˜÷g�ÝE*ÍœQÉîp})$ŠK—ä* ò àP±ÈŒFÕÈèsÚ¢–‰òÂ÷#ƒPÍ¥½Ô‘™'*c?Âx«éï rb{Sç²IŠ©|° ŒœÐºbÀ@»¹$u&¤XT ~*¬ATw±túU“>NL\ý óÿ,ñùÓÕÈ`Bõ&§ûEÉ€cŽE4½Éþ >„S ÜŸùhGЊO*}…w“Ç÷±V,¢•2Z%bF'?�5-;` s’rF?ɪoj±Ù<äj8nKÈʨãiÆpy«%‘˜ù…I\Ž;Ó%�ßb´ÁˆÆxàœbš!F˸FÎ)]AbB±¡'š@¤t\~4a‡@?:p00Ö�™O˹@'œœ’e ÌU±ž¹�þµ&Ðüž3ëÇÿ® ‘Þ$Q¤P§$œïúRÆí<.° ¾£Š•È£�Û‡P{�òkkN1Zwp6ÉÂ’p¡üóUu=Q.fY1¸��üûVµéºŒ¼,L«`òNG>ݪxÇ;· ƒ×­>TI]T#à�I·ùâ™&›Æ 0NFzòÇô©Ä�à ܣhtsþ}i¤Ç:ª�§v#°h{hZPíµ£ >¤gÓè?JŠh¢¸ˆ Fá’8àtΤ€ÄA à 0;`Š•B˜óò�ûqQ#3ŠŠTµ ‚€€q»®j4¶�ä`¨¿1Á8ç=¨{HŽ7B ìH篨_ørÚì+1`z×¶jm?H‚Ö¶YI@0÷ÿ&¨Ù8L�.xÁ$àg–+R D2®A=ªRAáIÉÁ<õÿ?ÔÕK™¦ …` Á<Ô+#ªdtõþµ#ßD$N$$ ’8¡o®ZZÅ Ë’HÌNTd#?­Z¿kthM³î'$Œt?3úVV©©ºZ� Ϊ*;çŸÒ±¢¹¾š,Æ“‡ ·,8¯ÿZ­Guz²%±$!-À8Î¥TÝ™DÒıœ ÁIÏ_Ò¤¹Ô'–HÐ `§ §$ž¿™­0'– ÒJˆ!äÿõê4yÙJ3ª¹ÈNIçÓüö¤3ƪ]ן¼=ÿÏÒ”Í )i&'¸9èiÀÃä’o /S†ç>”ì[N™ˆnÇqÿ=©él¶Øu¹”8¸Ç°úS„ðÃ5Ù##vn¢½ÞŠã¼vk ’Ùxþås¶êÏ­JFE7mK²pc¹©KäS ¨\HÇår* í $n÷-Vn-Úx�«ÔƒÖ¡žÊ¤0õÛU&—ìê RÄœ` ”I#Ä@ ¹•&Ù·yÿ.Ücç5\C”rÒòsót"¤!>Ü�&«°Íbœq‘ê($úÒ£9¸œw9é@@Us'tüj7É}áÉÀ b«¬î&Ñlm¹äúŸË‘åʰÚà U‹a,Ò|ëòž½MlË©ÛÙÚ›8•YU~d<Ÿs\­Ö£2Â��«±UÁè}ÿÏz2ä*³ghÏåS®ÕF —9ÍD–‘ÊrèÃ$õã“K ¥µ¤ŒÛw1àž¸+O—`UUÆ{ÿœR¢tgC1Àúÿê¨Ä6öë±”-ƒ�N?úõ‰"™ä-†�àƒÛüâ­þërl#æçÇŒ68ÅFc‰St€1'�U¤†Õ· ƒ¨ÈÅÇÒ¡–_ô�†êAɽjÆÆ/-°H˜ä’ÃoL�f°˜‰Pc@ àéïVœùÎ�å€`2Oùâ™pbF 0YG.3Ôuªò¤J±Äg0 œd‘ÔÿZ�­ln#EF”üÃŒ‘ŽôGoo•[t` Û‘Nan…TžI¹ÏùúÕ–� Ž�3ÅeË¥,·¦á•V6nl1þ5ôÌø­î,C �’ÿ4¬ˆ(ÎÝ¾Õ ÜRƒŠ\Òf“4™ ±Û¶¡cµKÂÂyŒ1¤yÙß#åö‘Øä“LsšŒô¦‘IŠZ6äUydpA†Ù998犒Ü4®D�•õüifÁܪ¸=1þ~´�›C0Ý#u&£H Ä.00*hm.#˜\¥Ã*”ØÑŽA÷¨M·—v.^\±[?§òª×´¼+$Ž@'wÊjqcj¡LŽG'§J‘A�*¹Ç½ŒŠ Ç5,fB^3“÷±ÛÞ©][Ã!mŽÛ”ä`vàÿZ·1ÈŠ ¶GùÅ:8â‘Ëa��åšl±D0þ[8SŽJ±¼{FT�N¹ÿ9¦Êwl„’A^‡¥@t,p2õ¤"x •¦KŒnËwÚ©³” ɸœ�ΧxüÆÁô¢’Í'Ž4‘†#Ï÷8çô qA`YC–Œþ<Õ¸|‰€;9ÏÓ5*ÃHqòó€M"é�Â…JŽHb·àF3ïéþsPIp@ECŽΘ‚Us“œdm©Ö­¶7fm¹ç¥5"•Ar€V5$²b68 qÐsÞ©>éጠ3½ºóŠd·«å¤ð=Û€H§BðÇ‹ïqœ©9Á© Fv'93Ú«ªÄÇÆØÔ°÷çž)-E›HdšPá�` q°µ@_jÉÉǽNÜ ßlœ˜Å:ÝQÕ‚™Áu¨îíâ×쨊[vwUHt˜=²4a�=d®ŽÚöD‚‘d¯\ÍOý«.H1 ޼õ¨þÓsÖ!ùõ¨þÑsÿ,‡åÿÖ¤þÐcÿ,‡åÿÖ£íÄÿË!ùõ¨ûnåˆü¿úÔŸkþX¯ýóÿÖ¤ûJž°¯ýóÿÖ£ÏCÿ,WþùÿëQç!ëÿß?ýj<ô ìÿZ—ÏOùåúõ¨óSþyËÿ­GšŸóÏôÿëQæ'üó?—ÿZ�ñÿq¿*]ñÿq¿#Iº?î·äiáA–F v#Ú©Í®é°]-¼ÈÁØ03‘ëùæ®,±K_”ô8úRKb² Áœ=ÇCÿקá•@QpXœŸóþ5<®Ä2€#*/ҫ܉H;C0<ãß�ð§ÚÛ”uvEV'¾çüûU“¹Pî NG¦8¥6Ì[{œõÃüŠSjVå`0OóïQ¬+(êYØóÇ×üsN{i&ÀèqÓŸÿU*[J€f"ÈïÛš|‰;ÇÊ 3ÿÖÿ9¦¤ˆuÝÛÓüã󩢋 Kãd‘ÀãÿÕI;l@"P\ õÇÿ[üæ¡C1�1 `c‘Ó©ª—zx•²ÀH'ž?úÿ�,Pý�U@ÆAÀêNÿ\~•#+.A/Aþ~µMâŒ*¢–!ºà{Ôß`ˆ²,H<‚qS{u ˆdûf›$hNÔÚgñëúƒQM@íóXã®2Ȩ@ŠÙЍrB–ÈÎ9ÿ9¥šWù·†®Ï àsþ}i`hrbH9=::r‡å9$’{z1úÔRYC(SÔ„ã”É^/´,8NF{ „¿”@�ƒpsïR}­ƒ�ÈTŒã�óÖ™yl³¢ùŒÄ1%pp9ïúTØÙ,j¬¤€I [ g¿×5u-cA‘!+´Æ æ™&Ÿo:€ÈC¸Üã¿·µGµ´™‘‰m㔿i±¶�ƒ('€Î~Ÿ‡ò©Ö{a“l&dnH*GZsA¥Ô {cÿŸóÒªËsim:+0 žO\séPjRØÛBe¹V1©Éñ‘þÏ_|¢¹Èc¹°Âî%e~)Xi~tǽFNi¦ŒÑšBhÍ&i´†…À9¦·Zi¦ša¤¤¢ž¼ÒË{kk¼±± 2ßLÿ†i,u{ðÙ>⬬Ip6Ww}*%³1È] 3Àf⤗Ί4b±b coØ>ðn¸÷ªBe—kG‘Ç'×¥_Ž"#@¡v«r=¨H&eÆB‚{S’ѦA;xü*9-_wÎv½‡ùÿ9§ÜÅ¡B ÈéÖ˜¶R+îXò Á•*$Ê,~ù?‰¦&iw‘Œ1øSÄ-¸ã×ÿÕV ¢’H±T�å˪©Î1ùPð¼ÐìloÇÿ­TcÓBÌ]F{düU•,È Œàg§½C*G#«0#Ó¯ñÌYܸ횞+(‘ `p}M;Ê€)(ò¦yHU�Ÿhìz¬ÐD rÎÛ9Çùü¿p™¶aöí“ïQoG•DÀò'=ýu9XÝPvRxÿ>ôÖ¶2ãjg©=j&‰ YYîó1ƒŸÐT?»Ø¿¿gÚ{úÒ-ÌŠŒvÁÇ™O¹w0$–$dœÓÜXƸXYŠcŒsNK½>Q° UÓ•xâ¦WIŽ �Áqüª7†¢.ÅTœüÙÀ⡆âÖæ*IØylX·zž‰mpÑN�æ½kvÝЄ(ÌØc<�ÿ׫¹Sœ c<Q(#!zú½'›þÏþ?Gšº?ïº<ãýßü~�8ÿtßTž{tßT}¡¿º¿÷Õiî¯ýõGÚ\ ÿßT}©ÿº¿÷Õk“û«ùÒ}®_î¯çGÛ%þê~t}¶Qü)ùÒ}¶oî¥n›û©ùÑöùÿº•2Í$¨d 篥Iä[ Uü�¿%w’oÖ›5ÄŽáTŒœŒ�ÿWëTYg»ºÜ:ƨApsÔ”B£@%”¦$±È8�Πµ�£vò&�‚A`I=:‘Weœ¬ígT I$Ÿj|.…p²3(ù²O'<QSÅ)9U%¾\ƒèE3ír´däàdñéÇÿ^š—’ À¹À'æ=8êÏô§-ø”†RàœŸÎ‡¿”¬b2I ñï�þW¹»D–g †�‰©ÖæV CúÿúóDŽØÜ%#>ÿçùÒ3¸ùU(I'=zýsU>×™Y�ʬl;uÏ¥0j0µÑ_8œ’@ÇcüþTéÇ™ †8÷úÓÚõ‹ ±³``ÇNô庖gRÊ«Ô�GçéÚŸ;9xÌ6Çi3™õüª"åæŽÐ9É=ù5(¶X�7˜¬ä >ÔÉž(ƒDeP0'=éHŒED€3së�Í!1ù\“Ô÷��,±£çt«ÁÉ òxÏõ¨‘­‚±F ¸zõÿ<ÔeÉ`DËQ‚}}OéMš!4 ¬àŒ`�{c‘ú~”Ëm>FÒÈà÷=?­[_³Èø gž0)%€I)`$‘ÐtÀü³Y¢Õcå$–L�ØT«`î�0$��Î:zS$¸ˆ.rëþx¡Òy-Ü™ü²[€Ýä ¯™í‹7˜¥A>g#ðü)ßÚQG"‡hÙ˜ª~cþEOµ)hÄŠ„˜Èçš¡iâ}>ùÞÕ„êI+“ÈdV�Ó­®ã3ƒåÈË…`NAÏÄÕwðó\iÍgs+H[’ç®ɯ}¢¹/Øob¹ƒî•�",xÍ09'i‚Ô™£4fŒÒf’’“4„Ói 4Ói) ¡d�0Ú›€<óR¢—>t{‹04åhíá !Nq€¾•V[‰¼¦>fÇl�qÛ5 6­†In'iŒüÜg4ËËq$ÞcM"³`€¬qŸZ´�,Vò;³±+ŠtbŒÒ6ý¡‚Õ�0/G9#?Ÿ4ù.] xƒþ5Üʤ|ǵ7W2á·@$w9§ÇypKï$xÏ_ëV<Ù°Ì3�¹¨Ô¶Oï†åa�Ï^âêH¢óîf좢–ö8b1´çpn RÃt“ÆŒ²ž}½x¤†u‰¦ç,HÆ=…>;ÙFb±ç?Φ·“t_•zðDÎÀ¨À8à�§áTå¿�ˆ¢‘Œ€ä‘Ðç�çPEe<¬¦I9Ã78ëùqWZöÊݶ™á2¹9Æ3I§a0,’BB‚HÎ Ç5œÚý�ÓìE$+p;çTvÐΊ„�&X»“ÉÇJ±e}Â6x‚àJAèi¨Óî-ÈUf-�û¸òi±%¬%ÕJª($çüúçó¨¤Õ¬ác嫹$.ÕŽâ­}²ÝˆfGAÐ1“þ�SÖ$ib È€)Îày#Ò²í­¯%G&ùŠIé“ÓŠž8žÙ‹‡l.Bã#¨­›Tˆïõ"§ŽÒ¡ºÊc“ª) zàŸÆ¹Ù-æˆÜ-æI$¶@ç5ZÏNT»idýñu Û“Œ�z@ÓÌítÆrP�ýsœ�þµ-¤v0\�$AŽ:rN¾â¶%½†ÒÝXÈç�HëSÚë6Ódäà`×"½¶ŠäLþQ‰�rõ4ZƒÚ�|½øëPLn^0ñ©ž ª‚ÂåeyLÅŒ„yô­ ¢¸ÀàœžâžˆÎ@s»9èi$[˜�TdnNx¨f>VXûu§ÛÇ!|>>_Ò¥ur Ú=é‘n`†Ln#ÜS®í;8îÁvZùŠ…Ód�P%“ÐúÿœTIÚ•ûYËxQÖ¬¨¸yczõæ�o.ÒNsþ Ymv bXð8˜¬æ{�9vX4ƒ<V°øV¢%ï׊³ ¶ðÊy#ß½T»3D6@Sñüª•«ObÏ,³3ä�´vúU»‹ðJ*—`AèVk½ÝáF1Ș¸üêÌGi k›…ÚÝw7¥+kx` Ðá‰ÅGy­ØY"o(ÆN…9ÿ=*™¼³¹Gb¯ò�ÁGž*µ¾§ xò¨ûó•$åy­kY¬YcI·€N¥š /3Î({žßç4²ÜYÀ€I ÜÀW¨Í6ßU‚rê°HpvýÞµanaòØÆy^¹®ránZé¼½@’Ç!µNÖW Þd·ŒYFr*å‰rê­ºEÚ2Hö­'…LJ ®áœvíýj¦¿bêCéÓ,ˆv–,>aê+ öÍ.œ¤R4j:–^jI4»YìcŠDt ›FÆÆó�þ½W}#M±E‡Ëf*82„ïZúsÛùjDŠ€d8¤ݼSΣþYÊ”D£þYÊ—`òÈ~T`ùf?*\�ÿ,ÇåK¿òÌ~Ty¤ü©Däü©EÉÀ?ï“@»aüþù4¢õ‡ð�ûäÓ_QêÆp 6M^‚(y…rT ‘�ZDž{”ÛÊHÉ-Øãÿ­W•&ê&‘I’8ã#?Öšòˆ�²¸ÛŒ’zžœÔpÜ>ÒT±ç8àõÿÒ‰®Š"‰q’p;qþ4 YÙLIFì*Fêªá‚}3Ræp�“��ÈÅEl·L´ˆA9Híý+gIÓ´À²Ïs|ÊìNƒü�Y÷¢º‘aœQ�õê8ãŸ&�a2”wÆyœž´Ó¥è�8E·ÄŒJöšr¡1Ù+‘÷sW4ý"{�²´`· ž„ñZøOf]’%`xÀ¦Iáéw eyæ¨]hs$¬ÒDî:ã¶*„²¢ Pì Ýj!sÖê4Ý÷@<Š‚ð­´PFŽ%‘Û;C`Ÿ­I¬SY8`–÷ s‘Î\ÓìcH؆˜çï8­U@U¦8òr 61þOõ¦41�xäú¥uf² B„ çƒÍ,HñªÛW�Z‰ím ]탟Ç5Ï>.L‘¤%bsŠA¥›{¨žQ$Ë’b¬É$>c“(­h’c §F9=1K²nàþ´—¸?­&Çï»õ¤ØÝ÷~´›}ß­&ÏRß­&ÁÝŸò4›»?ähØ�Ùÿ#MÙw“ò4«NÁCÉ“ê ÛÂi™ƒ3Í;쑟9¿ïª>ÃüöoÎ�°Âå³þfšövÈ��ÃOÒ®Ÿo"[‡ ¹ëÍI2CÛ°30HëÇùüêáHœJЀì'sZ1mXØÀ'®Va+’1Æ éHð‘.€pHüª#(‰Àê1Dn ’±388àpÏ5mm'1"Ûœdóõÿ&™$×"BE NÆ~¿Ö¡‘g2 i9u”£0�L…@à‘Üôÿ?Zl†FlÌÀ°=09«Oo wg•f9íÇA+ŒŸóô¥·½hî–hت(Û°�j%ñ&¢�ƒåí��óïP·ˆµG,CF¨,G¥=u]Jî"É~‡'’«YWeÍä¤ÜLιãÁáÛr m*Éçüûեѭ«ƒºœ‚jËÛ@)´c­G±ÄáUX�ØéVV|î!3éJ\1å}Ï­T�ÅØy¦î;K#çŽ;óþqN&ÞøÏæËQk­öçh'‘œ�§ò­1e3ÀÇÌ@ GqßùT?Ùq c„àóþM,GL†@¥Ý˜c‚ϧëCùsÌÆ& €>Rx ÿ/åM:\’“yŠP€@üúÕG‰mÃÆN3Ÿ_Z¢ò)tÚ 7QÛñ©5iñ­¤Ê×2dà7Ýã?ΓH¶’K$]Bì,¹Ã ñ×~•ÒZiÞ›Ÿ1†r½Éÿ&³.¯lb¾D†&òKmžx=*¤×é,Ò(F*8`%» 1+nÍÆÎ9=ê´š¥¬m¾[rzœg…*øŽÙËm-¸J‘�ßÏùT âfyUdEPsŒžý¿™©WÄñ™6˜I#©SžOÿ¯üæ¶Ru’1 BävÇÿZ«ÜÞˆÁ+ bO8ªãWV´R©'‚üÿ“K$¬`w.èÉ,{öâ«.¦M¹SÀË8îÎ)¿jªŒÊI`0q’ÎùóâIDO€H8Æ3VaÔãf J¬^{J¶.w� Ž~£Én˜ŽAÈ95 îi€*a€sҽŠãüq“.ž>ì¿Í+”áNQšQO¸¤aÅ0Òîd‚oç¥WS$ˇˆƒ�ªd¹¸VÞųœŸ•\>`pÝqŽOzd«1E ÊžƒüûÕf±’UÙæ�G§‡M[tEÜ /;ªã+g<:Ô…s�:KknÎrÊßãTïµ 1(üž9ô¬‹�bì[…'h^ôÕžþXÁó nç‘ï[VO'—¹öHÀs�ÍhµÓÇ lªÀgUîÙ¦�Y�:ƒUcrä‚�B“Þ¦`;FZ�AÊp3úæ§;GP=©ñùŒ7,`/z’k­ùb ©%´Ãå¥Î8Utà’ó€8æ‹‹iä¶)`äàçœæ¡Ó¬õ,.dÇ­K¦îmòc�ô¨M��ªƒ4Ž03ÇóýjVšÄ[²ÄØÏɦ%£LáE”‘“UçÓ|Œ‰H'®AïU&u T¨ œÓl M Y$X¢99'ñ¬ìßÏ«¬‹(K"HëŸÆº;[ 6Gêôc8ÿ?�[¼‹@³´Se™en  bÉ©Ãö=ÈŒqG>”‚åLNÞS1�µTKb#óPzÊÝZ?-£ð¿çÖ–#ÉMùå‰4Õñ2ˆCº)'ï{ÿ“W´ýa/˜ ‰Á<þuvIÖ5å3�TT).ÓnØ>‹Ú…¾ð‹0ç½j®â‡!�8ôUY.­ ë´gœ‡í[äo-ǰÇZµöˆ®õ%‡<µ"ÝÄNÁqÁ8©î5û¤Òÿh \m r}1Qͨ¢*�‡Ð“ô©$¹Ýè—píP­Ã‰>p@'½H5+a0‹ÏÃSMœÎá„}ŽFj I·Û©‘z1X7K g�ªžHÏ^µUüCmoå šiÆìûÖŶ¥îÒѼmŽCU;›i_M½•çSòz âu¾K›K9Y‚Àn™šé¡†+5†)f�‚ƒ éíW^X™"dÉ>•.c3ù( Ä{öÏz–=5cl‰AñT®^XÕ# ‚q“YwÚ2I…<¾Ô¾JJ²7qÉ&«¥˜ Ê=1š�­c±Û¿h$ñÅ]²×|‡ÁTÙŽÃÞ¯Ÿ[µÔ©"ª\êðíó"¸Ž*«k�4~Deƒ‘Ú³fB÷QÉ4ÌW#pjÕÌ0@ƒœIž‚–Ê8íí™Þb7žõ ´�î ˆ×Ö­%Ê[Ýq&F0î)^ùÇú�Äg$f¤¶¹–Y‹F› ëšØC# %—>ÔÈ®`ƾC1Ú2@éô«�# ›AǧøSYb�ØÀÏQNòT `íƒèGøTL­‚Øœdÿõ©¶ð]€í-ÆìžÛíúÕ˜Dd›s•>Ÿç�óš†Džc„˜(çŒRÅm"&e”1$�Z™š,ãåÈôÿ?JlÆ¡J‡Èé֣Ш¢…Ž$É#ÔÿúªhÒ`YB�ȯùÿ=ª9."€bG9<ñÛ¯ùüª‘¿/î÷ç<Àÿ<þ´Ž·O.ã0E ’ÍBÖó)`fw“Ó©ÏùüêE–P�V'b@Ž)�ew<¡±ŒŽ§ùÅ_Ki E]�È'§ùíOóLchˆn=qþ}êQvÞQs8Oò*�ÅýÐ%£‰¸à1Ÿóš©»œîtqëφ®ÄJM�lJ‚$ò9ÿ#ò«YU�XÀÁÿ?ZªÖÓÎÄ”POL‚›o§­©rÅA#¸Ï9ÿëÕ˜‚³ùzŽƒ�ÿ_ó¦âs�Ê¡|§è*¥íÄ(²4×![(‘ôªpj:–S$�pG=ëV¢å|¤$‘ëÿê©ÖÞ`ÂEUV'úÿŸÖ†¶¹‘‹´¥AàŽÕ±G`ŽìÄñÈéþsNpi�L.Ã$’Ï<ÿP+:âþ輋r±‚9â‘tË­FÜ$äÄÌrI8ãÿÕV"ðæŸ „yUÛ’O=9­8t›QÔÁCÐ�ZöMªJ¹ñ“ÀçšÆÔ#&ôK¬˜e=Æ«5”6Z‰h€@FÁÀàuþu�i,c]x&;UÐí#¦sëô5ѤeXÐŒç HíŠ&2¹L€Aè=?•eÜ^ݸA$@'±ôþUŸ=¾«¹‚@vÈrsÓ§JOìkùYHùB�¹sÔ“Í\‹MºXØ2 ‚¹è1Ú«F’Ér|ædPÄí^õÚ)¸ Bv烞´Oj©"&\ç'=»Õ#n¤‚¸{ ÔkdÒ°±=pi†{ ‹ 0 2 žÙÕc%Á,NsëëSÌÀ¡ËÅ �Ù$äóëL&îT'å$ûÔ›gKvVq�:8â¢7S˜ƒ4€m8¿ùâ�­ÊÑ¥„‹ËsÁç·ç_RQ\oŽØ,š~F~YöJåaËç‚>£6BçšTegÚéC£§z†Ki&*¨êƒ¹ëS½³©H«ŒQ9Î<¦À=ñU�Ë8c8#*Ò*Â>b×Ö¥V„g8Æ*»EÒ‡HA+Ï#­J"™HÚ})ä2(2¿A’ET¸Ô Á X’{Ti爈›9ÜÕApñ©k’Xà½i¨$‰É;Ü‘Ô {ý¦áX$exêiÖzuÄg{v­¨t<#œ·N\ Æi'½�nXãrO|Vd÷—Ò¸ŒFÛ=GçOŽ92^&fè5z7o,~à)Ïùÿ>õ­<©³Ë^½HíUeÒÞ`¬Á@*ÆØãn^€t©H|� 1ïïQJÌ‘¶çXòrqY…´W%Rà·®[ÞÆ—d›—‘•ëWÐKp›|±Œ÷ã Ï–c €Nª'³“¼˜ñÅ1t‹iˆ•؆S•ç¿Z†æí €¤Eßi9Àÿ=±T„·×W!DRº’ݪQᨤw¸¹ŸƒÊ©?çÞ®Úè¶àÆWw`*ói06ãœøª×VvðÙ<1ü¥•²~‚± ‚ÝÙºÜm,�B·p?ȬýQ±¤¡NJƒ‚zš»¥y76\FÙm€0÷Ç5 "stÛ·<{ ©sw,ºI |ßç𬹿´n‘•a$«gÞ« -Nvg–-¼§Þ¤‹E¿€|ß1Èæ¥¼·¹·_–06séPIl¦ÔnÝ3ç<ô¦Åd»A0œç×½Už•ÚÃŽµWkQ�>aéHb¸²e–>ùäÓYeuiN쟺*é• °UÊûÒ¤;H.síL2Ü—*…p}èXî¼ÝìU@ïN’kˆ®>Wê:šŒjrZK†béßo­ ­\†;Yˆ<Œï!HŒ€ØA }= �R00 wÏÓÿ­úTRduÏáÚŸo"É® 0ÿ?έ‘n€H#òÿ vad’©�‘¸“éïÿêªì€0;HÇ=i�,Iþ´tÀç?ç4ØE¬¬Ì°y$ñVP!$ ‘ÐÿZÄ!H ¾ç=ùÿóÍ"Ý[¾pà€HÿŸJ‚YìÎö\ŽrNÏj®/ôærª¹ vçÔU‘{oŒ€2y¿Ïó©RîØœ\p0x©Ä€ è0Z”IÉg yõïÿÖ¨7¤²Iw`œ‘ßüóR…ñÔúÓÆÐ¸ÇÒ‘‚“ƒŽ½;ž”¢0ªÀëMwE\’@ç§ùôÏçL.Æ<€£#ŒœóŠ„]ú¨ñøsþ�”?;…žIôÆ¥R{ˆFCÇ=GB3þ*­sz„²F ç¯ùõ§EdŽ¡®lÆH2E^€Ù@…5\Ž@jxfˆäª…ð}Ïô÷¦´¬ä„ÉÇOÓúžô*]JıڥŽFzÖ=ãÞ$í±]€8,lÔÝß,Òlˆ²��¿®{ÿZžÚîöâF2F±(8ÏLÖÌ(€–.€8·ùÅCpЀìËùÖ|ºŒÐBDGq xŽúÙüê)ïïe„„Bðs€O$þ­)§Ó¥q09EHï�óŸÊªê ŪKjr§i#ãŸæk‡³º†à”¢q.WgôÍCrðÇHRAä¸éý*³^@±—ÝÏ¥UR×s¶þb¸Šµ­”D3[*‘ê*ãOnJ•@ON•+̪£içÐT,×' ƒ‚EAx—1Úîݹ‰Áõ¬Wžõÿw láGj‘õ A[+gñïZvÞc¡ó¤T8éš¹/’‘l+‘ÔoÿUgÏ:C2´ghª5[Ó+¢®GMÄÿŸzšÆò2÷Iz7a#ÝýÜr:ž'°Ýö}¤¹=?Îk�ñ¿`¸µbјí*Gnõ6—*+ȶ¬<¹~•± ÓFlì'9ô©å¿ƒs>̳) ûöªë}µÛÈ^H½3H/%f* ÆãŸJYîn„ÈCFQ�AL¸¸�̉’[‘Ú«kË&Ÿ”�eSØU /b�ÅÊî%>R=jšÛÜ>ã+äõ4øa¹]±È€ÀgØœV¢é»à?ï‚ESº²† 8®amÒ³}Ò:sNtìðù�TNÞ”é¬Lª üê¤K!üÐÎÝEG%•Ò’æ£PT˜�G©¨¼q ä3gæ H¶Î£™^¼t®¦-F(¶#£TG°©ç©‹(„–¿Ï½Dó2d›rÞ¹íþyýi ê‹@‘ƒ�šÊmV[Bd€»»0jT¹½šßÍ(QúãŸóŠ’�Hò¶Õì;Ÿóþ*ßNò(Ĥu©žy�í[frzØâªÜ_ÞE•KB@ÆNz{Uy5 –!$V\ƒœÅfÉ9EB›òr ÉÀÿ<ÔðÞè³y'šFÔÛwÙ?v ˆÉ&¥I¾mÑBÀ‘‚H§ZÉ"4…Á$O§ù5_÷O+†vÁë�ÀÔ©i È]ÃŽsZö°ÈÑÊäÀ'°©|››f&ÆÎ3V#»q4À+€Ïùéüª3~ëó ÏÓüÿ*Y5X€Ã ¹ÿŸZ–Ød\‚Ïô©„Hç–8Çùÿ?äœb’úöêÞ4ò"iCÈAæ©[ÝÝEÁÛ!$íý)èZeÌnFâÈç8éPݱ‚B%bçþM2Ö!‘™Î'¯SD:¬ÒÜùbÙ�r@>½+Z;heŒÊÐ�F7Û�þ½9å�c+ƒÈsþ³îdŠ V6Â2Iy­+K�>[T�çBvqÆ ÏÈˤi¶ šc–„¨e q“ÿê­û{›rÀª•RxUÇKBYI-È?�f]hö÷3‚f@1‘œb«Þi×-Ep#)Ï9§ÇñD7|ÒH«ˆ¤»'¤qžVk׋QGe“ “ÀSëþ}êÔ„ÄŠ�Y:ãøOùÅU’ êËŒÅ~ïñÇ?�M²@¬Növ=ù¥˜4VL°‚$qŽõZ;Ùg`̓±98éW!¿"Rc _®:Œã?Λ*Msp#yã <�^ŠÀÍhRFo0ž£Œ*´V&Ùä_9œºªwsOvÛ #‚1ƒš®,ŒQ7™†p0¤wéþ5¥œE�ÊHNOùÿ?ZúfŠâ¼}2Àús0$b^ŸT®^Îþ�…Œôÿ?ΧyK|¶+Q­Ó Ô4 ƒ¹5Vúò7q²^1Ñj Ö/.%HV&1¨áˆ§<ڊ˲ýj¶]F6¹,}ºT±O,‘–1¾áM{«�…ÖÌŒv÷ª‡R½ÜÛ­Ì`U9®Zv�¥Þ2ÕhnTÉ™•È^‹š´u0PíK98 LK•�’Ø«‚÷§Ë$ΨeFqôëÉU¢@íƒ�P­½¼«–w$€ [´€¡Xá2‘œV£Ú<™"?˜s’iR{ȈWŒlãœÔ³^a¶¡ç¥1u"¡’Eù‡ò¦®§’µhH“ ƒÅ=mã$Ç=h6qcä…FDŠ>Ny?JÊŸB–fi„Ì&|†à Õ˜<;™Ë·§­iyPÙÆ^5ÆÑÛ½ ±\F²²g#¿Ö ¸H|ˆ ç¬Ù>Ó$û¡�“�z°�6ÏŸ‚Fk&mCQšpL%!W;˜Ô†è˵YÉ,88ïšVŠc¶üŒñ�YÏ4nêL„+ïV.59`U 1jÅœßl…|ûb ŒdÕãÌCFC{÷¨g`áÝ�™#­W°¼µ[•’I•@€~�*?iÚv©¥4‰ 2¢îyïÍPÒþÁik1#o 2qÞ¶à{i£ ü÷⢹µÓæGQ”ÈàúUôwµ,ÐͽÏ@MVŠÂé.¤c ;— ëO¸F›ÉHGO®úÔ\N ˆêYzZŽÊy¯­ÑÙDD×®E6GI~råî‘Ú£~lÙfo/†SW6Gæ!*Ûu"ª\^Oms äuÈý)ÉuåG¶P¸#'Ž�jÓ]M4XPÜ ¬;ÓlífÞ›òªH,*[Ý+-礮œŒjlòÉiw†,GzÊ6“O'˜HÆpECuj­2 ÊàV ¤YýÝÆÓ5©ͲÄd%ø¹ü?*cjo,ë ª8 ‘À«¬P¤»’>cž*œ—p €†"Äp8àV•�Šu,Ñ•àqÏ×üú�Z¶ÑB±ŽëšË¹hAºvÚ ÖÓŽ�8ÎØqŒ‘È­•´Ó‘s%ê‚NO?çüiô�ò‹ˆÏ<äúUss¢# òFIÿ?ԟ³/¥Ð °F9 g?Ïç\ýË[D¹·;ÁÎ^¿ç4ÛkùL`—Œñ�jQºóBm\žÀwÿ"šRiØ—}@ÿ>ÿ¥I,dˆz’*g²º–PÊá@ÁÀ©nòÆ¡%�gò§È²m�œôçJC §œvÿ<ÓL‘$Œ� Âäc±ïüë"ø¤êgE+�0G?犞Úò2êrAäãüÿ“Z)}pAð8éRGrÁÀÉ(Gµe.T�БÛ<ÓÄ€Œ3Švò óž3ëþ@¹~ô¨ÿ>Õ ™~\’9=ê#(B^YT`A?çÞ¨mZ6©�À8ô« |×)+�OZ·nêÑ*ì$÷$~çÞ¤ŽÙØ´+Á#'©?äÓÚÒ ˆ†AÈÇnj7³IÛ2¢‘ŒcôñcQŸ.%PG#óЦ־PßCpùöÐÓÃæ8‡R½QKiûqfX{U}BH^EVRÄ œŽùâ©[Ç ÈB¨\Aô&¯G›(ŠB¥;Õãd§Ë< r}�Föñ��äz¦KT _%‰{ÐÌ ˜ü¦#Ö¡YP®J2à“ÏLQ¥¬Ì^2 '©úõª7Ó¢IãŸóÅV’(¹V™@8¨XC&Œà�?ϵY·¹(¥ž"ÛOs‚jÂ\Cu9F„‚W ‘Œÿžj¯ög�Â’OÏ¦ÛøhÛËçËÛÚ¶"  PmÏ'ÐT©Á²E•œ�Ó5�6²3 PFsž8õ¬u–¹”„•.J†êK„òŒ%™�$äž¿JY¬® `Í0 Í‘ƒÓ§ÿZ¾ ¢¸ˆR,ri�Á*D¹Çü¸©5H¼¨Û#€w§YÍ5Êy“³¢öNô³Ê±#I"¶Oõ¨ín!”*¥¹ùŽ:VÚà ®sƒŒtª÷K©"]¾•VÊ[%—l²9'¹WIkka"j«ŽGJ³³I„áîÑ¿ŠIt|ÓEƒ×š­5χä�,é‘éþ¹ûßì©$ýÃ�øé¶²¾Øc¸Z3ÔŠ²÷÷ å�FsЇí77ò£3éBÛáƒH wÅXHä–&¢§áSÙÛ]Z¶æ—#­iïiWå“¡ +˜å}sHÊ#F}§Ì>µÕÄ U…–GÊŠD³žDq–Ï#§â,c*y=qVEØuÌD‚8ÅO× [‚jQ0'Œbž¸4nqŽ:S —¸ÏƒP“3SUnukDUš@Ìx⣇X�Î!xb9|¥Õ�¶*Ó„‘?Õ À¥°¶?t£Å1­ÕC" õü©‹¦Ú’¢RÞ¸¦ÜY¡e#¥Uhd£ ðžæ,HXAÍF‡È´ÄÌÄàœûV,žA9Œ“‘V£‹d!â`ß»ïWílÐ�ÿ.Hù±ëNh‹Ëmçæ"àŽ}kÿÙufo-kit-tofu-ed0e5bd/docs/source/figs/inpainting.png000066400000000000000000026476031521054151500226640ustar00rootroot00000000000000‰PNG  IHDR�…9ì�sBIT|dˆtEXtSoftwaregnome-screenshotï¿> IDATxœì½Y“e×qß›gª3ÔˆF7€n„hZ¦&JrX JzPÈ/v„¿€žô¤ï¡'ëYŒÐ‹AÉvh²DŠ`l�  ÇšÎPu&?tüVývö:Ø÷F8îÅΈŠ:gŸ½×�+3Wæ?×Z»³Ýn·ÑRK-µÔRK-µÔRK-µÔRK-µÔRK-µÔRK-µÔÒWšºÿ·ÐRK-µÔRK-µÔRK-µÔRK-µÔRK-µÔRK-µÔÒÿ}j“F-µÔRK-µÔRK-µÔRK-µÔRK-µÔRK-µÔRK-Eß_þóþϱZ­b»ÝF§Ó‰~¿Ûí6z½^DDt:�Øn·1ŸÏ£ßïÇÞÞ^l·Ûèv»�ÿý~?6›MyÖŸ·Ûm¬×ëò¹ÓéD§Ó‰ÕjÝn7:�NDDyn³ÙD·Û�^¯ëõº<ÛëõbµZE§Ó‰^¯Ëå²QwD”ö@Ûí¶|§üõzƒÁ ´�ú©—ï´“¾Ðön·ûZ=�N'Öëul6›á‘y™ë£œn·[úA}<Ûívc½^—këõúÕ`öû1�c>ŸGDÄjµ*|£¼^¯Wêét:±\.coo/–Ëeá <ív»±\.K[Ý·~¿Ýn7®¯¯ ÿàg¯×+ýZ­V1�b¹\–öä>‡ÃÒ‡ˆ(Ÿ=î”ïñ^¯×1Ëuú´Ùlb4Å|>�½½½"ÓƒÁ Öëu¬V«‡quuý~¿Èc¼X,Jÿà rÛï÷|ûÃ?üÃø«¿ú«X.—1ã_þå_b<ǃâÙ³gñ/ÿò/ñío;Ž��‹|RüD–7›Mìíí5ú;Kû‘)ú� ÕjU䟾¸ýÔ�L¡Ûí¶ÈÀz½ŽÑhT®Ñxä²�ÿårYÆØ÷Íf³èõz¥lx;™LJ¹´0Äjµjèí], C.æóyŒÇãR6²Óívc±XÝ´.b'èÇÕÕU¬×ëØÛÛ‹Á`Púƒ¼`ïз^¯ƒÁ ÈU·Û�‹‹‹�FE¦–Ëe<|ø0·Å>¿coüöårËå2Æãqéç`0(ü¢ß½^/úý~\]]EDœñ¦>�·Ç¾Âÿ‡ÿÄ\þœã?ãz®¯¯K¬B�|E¶ÜÆ\ŸÇ”Xº&+ð�qt¬¹X,b»ÝÆÉÉIœŸŸÇv»�ããã˜Íf…óù¼Ä>Èã—Û6 b?V«U\]]ÅõõuéÛÕÕU7x”ÇʺD]èÅjµ*×úý~ ‡Ã˜Íf±Z­b2™¼†ÁWËÆh4*vb4•ö¢æ/|s×!&�N§Ñëõb8>­×ëX,1�¢Óé”Xs0Äp8,ñvÄ+ìÆñ=rryy£Ñ(6›M\\\ÄÑÑQt»ÝÂKËú ?ˆ·Çîïïüàúúºôáêê*&“I ‡ÃxúôiL&“˜L&E>�;Úɸ_sÝxQ§Ó)ãÅoŒ?1:2C†ÃaÑ‹«««RX“±I·¥ßïÇjµŠårÙÀXæóy±yÆ1ÁÐ3ìo¯×‹³³³ØÛÛ‹Ñhççç1zàº�£ë@F°OØÛï}ï{ñío;f³Yüð‡?ŒÏ>û,îÝ»Wl}ÿñ��=Šïÿû1�ãêê*îܹŸ}öY(u ßȺ–q¦ÑhTîã7Æt½^Çd2)úæyììì,ÆãqL&“Øl6el�[æôÉd«Õ*æóyt:��DZ··Óé´Ø­ëëëØÛÛk`¾Ø*äf»ÝÆp8|ÍžÑ7Ïu[ãÙð$׉Œp?÷õûý˜L&1ŸÏK[( ¹¢ÿûûûE�m]?ýâY×�þ`Còü N?{½^Á1±mØ‚ÓÓÓ�F/e,±»æßb±ˆÕj‡‡‡E–à2ruuUæ³Åb{{{1�ãåË—ÅgËž}xº^¯Kœžs<И˜ó‹e™3Ö̼»\.ãêêªaGÐ ÆÓóöx<.ºoŒ}0”ç¨óúúº`À£Ñ¨`�Œ1¶ÌX:ÿñu§Ói ‡Ãb+®¯¯c8Æ`0ˆÙlãñ¸ØÊÃÃÃèv»qyyYì6u>ŸÇf³‰ãããÆ<µX,Š­žÏçñôéÓxúôi¼õÖ[ñÖ[oÅþþ~™/‘Æî?ý§ÿT䥑4ò¤`PÚÉ Œ8޾R¬sL—¿çÏNhØ­Å 9•}ã]d|W¼ˆŸìEˆsyŽajýË´«_.kçQFŽ#Í'ÎmÌeÔxµ‹‡¹ÿ^¼X‹ï‰i¼(Ó‹N+ä²ok‹ùöeh—|ßpOŽ¿¿¨M5¬dW›jKí^Ë'|èît:%éÑét éx)ó'ËJn‹?ç8}×çÌ ×•ã¾,§5;’ËÎX€¹±—]zSãiÄÍW?›e#ã5·QÆÐ"¢¡Ž)]oÆ`jõ¯V«F2‰{»}µˆp²–Äd,i åÂÇ<5{ë±õoŒ‡“ØpËc¶»Æ ò<âq¡ìˆh$€³½p[òØ×ÆÏãägøl]±-˲â1s²|Lˆ±Ê »�›¸¹ýY>²~æ±Êcæa¼*ë”ç�]óˆçGúFDù»êÈrŸË®ÙÖüÙ¼±Œpßr¹lðl.—Q³‹÷3–¶9–×Z™�q¹]þ Ïg}ØÅoä�§oÆeý< {AÝÞt±Knè‹ý<·/ûÖó/škrmB—Ìo2Á÷°Ì ÙÖPüÂN�GÜØeÛr¾ÃãŒc#gö!"¢,¢!áëÅHy¾ƒ¬áãî÷‚ëÚ×ÊöÝÔ@3óJŠü€Õ ÃëgrÃ�vgòsµ Û•3È.³VÖ.CbC…¡†¡V¼,ðÔWS\'Xøî>¹¬Z;áÛm÷šltxÆVnååÉØn_%?HàPŽåÃ}Ê«LV8'æ,œ.ƒU9´‘•¬Êá^Æ`p±X4€~óÑcá~�<²²gÃq…F.?ÿüóâˆ¡ØæKž8=F9aKÃdƒÀuïÆ¢,O,·%p=ÆüÁg'Þò¤A;³qw¢…úìègÝËA¶ÛΟ³åN`b0-›5~úº€ˆˆÑhÔ—‹- %!g½ä~Vv ïÝn7b6›5Æ¥¥–Zj©¥–Zj©¥hø‚ÞñÏoµø' &_cõªËŒhø”^+íª#·Ï5 ÃÀ�ã/³ö[¿ Ïnk[æGþã·ÚbÍÛãíâÁÑ®ØÕýç¿É(¤�^…í!¿ìâÛ®¶š'·µ»&Y>�¡xµxWŸ¶�Á¨œŒÌò”©üÖúž�~âV‘³*òbÐ]íËõæ~Žý¼¿ïjo–CVwgbÕ¹õh—œcÙl6e‡Šñž/Ò­Ü>ÀBƒ�y¾&3µ??,X$ö·ý²í28�íMD4VíS;DØqTÛ­ç8ÛE�4rò(Çæß²Mçz¶—”“ùgÌÆ¿ylÛ-—à‡ð‰ëƤlSrý–A0 äИ¨Ÿ·Ìå¹.Ë;¨®®®Jùè+;òÎOëTÆç2~â:ks.ùáþápØH*»\ëZ¶Ýcˬùy<ØÁWÓK×™qÙl2ŸÝ?î±^І«««F›�řǻþƒÂV­V«¸¾¾nÈANZXƬ[¶ÖÿÏåÒ×<‡�y²Ë…23v†þ{7¡“FY�²ŽglÓ: �Œ½Ò—¼°ÆsŠçΜ4Ê<ªù‘Ømd‡ï–['ÙaD=l¸`÷(ÉTpDl�åÁ»)Y#�ØÁôm»½ÁC³qÞîZ@ãþ_]]•]”´Õº–1ýÆN#–…,;¿yR²£G²É�sâÀBi¡B)òÀgD�v §3z¾'“·/zeCÞ.o%Ëýªµ…ÁðDÕ<¨û„`yõ‚ùS3Hæ¡ÿÛÀ×xŽ æIÀ‚èD<ÌÛ)sà6çÕ9i°^¯Ë‘f®òļ\.c6›5xΖh¶OÖ ¦yE)e²ãbþ²;Šßml·Ûm|þùç�ïÓé4‹�ÉÎWMžÜ䔶؈Ñ;%5Ù²U“%T믓°è ;ƒlÜÍË”'U—ãI×ö O<ïà†º¼#Ȇ1ï\ó„A`Àñ„�N§l‰eë3cĄήJ·Ë2Ÿà Ûx‡Ãa\\\”-«_´ÔRK-µÔRK-}UÈ’c"ûÄ»â$|Áß<µ›Ë¬�Eþþ¿Cùþ `ÚßwŒu}}]â ƒ ™µï·µ5Ç�µÏ¾Ï|Ͼ³?žÙÕ–]íËŽ�ÌÇ;´—8Èí3OvÅè5¾Øwÿoë“ã?“1 ê%Fd‹E#ž6X—¯ÓÆ Øîê_ Ù%»ylÁl"nލâô�Ø”e%óÏí÷bSãDðr—.fpËí…ÐóÌÇ:þË»ùŒ™,Ïã˜)Ëonø ý€—ŸÌ£šÝâwpÛ/l8•í÷dÆ6Õ8WNsc—ñ8'.ð ­Gßœ¼Ê¼5®B;¬K™/ðÊIÖŒ™d»B9^dj™6²¼ú¨»œÌrBÈ:êÄGÖ't�‹Ú ËÏŸžžÆÁÁA�Fqtt———ª%fkÿ=î–MëŸÇÃÏ[·8Œ~9Ñ_ÛÁe^qeîíí•ÓqrÒ„ñôë ÜÇšý±¬¹Þšý²Ý¬Ýg`ŸSx(×xýÉüt™¶‡¶½Þ9b¬<�íõ1‚´Å6ÆsªùaÙÌ<¶¾rož‡,—9AU³çôòn9Ëýñó7öŠgÀ&�Hr¿j;·Á¶mƒ²Msßl/²ly¡¼7Õ0Ñô‚# ³Ý²<äÅ÷ö�"¢¼™ét:åNðTv^ã?b¿ìOftٳ٬GëãwQÃtǜ˷éZvÏ‚•ÈŠ``…³ÀùwOîy‹j.# ŸÛ]Û~æ]î—ûlƒdEq;¬9éf!©/Ægfæ{ ¢çöÚ€Y@<V(;ŽÝn·œo�Û”yê ¥Ö+H^iã¶£xdð!„ÝÆþrNò|>�étZ>sVð|>�—/_–»dØFÁŽ” m¬9#ð�:ìð à(þ׿þõ2©#´';æ›Í¦±%'Ág�ÚÉ¢^)TÓ�ìל(¯¨°~y¢ÈΠ텟ñªO ´þ!÷yG�HLrD¼¶ÒÃãä„ÎüÕÕUé‰Dî!ɈäQNÍfdG�c)—³d§ÓékMK-µÔRK-µÔÒW™vÅkøtµ„EÍŸÊ1Šš(æ¸Å¾\ÍO«Å˜ÙÏ®µßÑ ž\G~þËøˆ»ê¾ÍÇÌ1möÓkÏrÿ®ÅN»žÉñÓÿ ÕÆØ± '8ò"¿¼26—±‹wùÏÏíâ­c‚1ö‡à³ã– <~ÞíêËm÷ø³cÒü>*/ú«•»‹oæWÜ3†’A¹]ºWÓíœöŽ(cDnqªß�%ÖË8J„s]¶ûÊÿü¹Æʱíê·1©]ö/ãn”ÍgÆ|2™”g°I^sZ ø�±S¶i t_Á:øìÄA^Ïg/`�hÊ«m| ·É œ|OÆÒüöàyÆ2å9"�«û@bÖ8E.‡÷qj vÎïWboÛ�í²qyl³NZOÜ¿<¾è¿Ñ7óÛ8¤å^P7r•ñ±ÜÆÛl¥Û]“ Ú�m°eÓó·Çr—>|Q›2ÏÝÏo™?î»?»'“¼p?÷×I߈ìŠqa7# Ó,ÛíÍ>ÛŽÖ|$㛹~ãƒÖלc,j‹)<Ž5{`ÞC9�`l3óx×ÜŒ½Ìu1Î��(£Æ<½À€ã'3öèùÍG%fÝ4ŸœÈÏ6™¶“°Äθ߻üÔ¦UŽæ»_ø¾k‚ʆãa…¯ÝïIŒŽw:�†ƒÅ=¬¨Èš…ËÆ—ï~ß ÿ½’&;EYÙ™4²qõj1;1´ÅÏeC—W‘¹þ]“ŒŸÉÀºûï6ؑᾬÀž Ý>„Þ«Vò˜¹-hÞiæmtÔ okoyít:%;›ž1o96 ¨ÛíÆÿüŸÿ3‹EÄ›o¾Ù�+Úéqƒ–·ív[ÙQÀÁ¹¶xÜòÖEîË™täÛ†(¯v¡\ ŒÛï]Kð="Ùhë�ëäÅqY­“–9ô?¯l"Cž'@ÆþûG|v2½pß¹g³¹y_×8jï—àÑF^GŸ�ûÁ`PèÍfÓXíà~²j”‰—ÿÓét§ÑRK-µÔRK-µôU§ ”8öÌqÔmdßÞþ»1Èõ}øE×k@…û’¯;^Î×w%kj„ï]Hý›ÏqdîWæÑ.ÿ5ƒÆ·7»ž7qÃ/îËÀZD”w‰FܼLºÓéÿ{ðá>f¹¨“5¾dP,ŸüàòÝWÇå_ ~ÊòWkß—)/·Óåíª£ö¬ëË×3&â{,ïµöÖú‘ypí—±g~d¹ &f5z.³&Ë2kÉ!ËjÆ¥¬5�õõÌ+óÐ×jº¼KŽ9Ž~4•£Ïxi;€%G×±Úý«aÆ%ÜFÚéÖç6{G”WÒgü‚qÊXÛ®¾2Æ'ŒgÐçŒýÑÛäŒoÖlŠ1Û²šž3òûOLà óù<ÎÎÎâÞ½{1™L¼_¢þOò<àëÆ|²^yΰN¸|fޱ Œßåú}½5ÿ#nÞïq³9�³ísÍöåÝ6Y_²î�r²Èتõ”rwÍu¹MðƲããÞòŽ1—‘ÊÜO?¼ˆŸçvéINü —ùsÖ)ð3ä�ÅÒ»ôÒ}±_c>ÚwÈ'Ù–º_µveÛiûì±s[²}±¬S¿ûä2Àý¸ŸrÜ^>û`œµ±æ½èØAÊ0/òn4ë(<4™¯{�Ç7¯×ërBR΋di$�jŠ� ’kó`äÏ0�r02ΰ9;–…Šªk”)ïª1‘P²ÒdC@³ÓèÿVbO|ÙQˆˆÆ62 lÍYsýù7;"ybôÄÇï�Z0÷Û»d²byLk‘…›kYYm4˜ œòlìíí5¶‰"ð}ôQQ°Ï>û,V«U¼õÖ[1 âôô´lç�Ç¥˂ۙå>º¯Nr®×ëÆù®ï½÷^ŒÇãrT™ÇÙFÞÉU_g hÏzrðøf9�Ssr<^ÙˆÛùÍ:�Þæ@<óÆ/f³œ0Ñ�¨qrÚz”“�×××åø?Kë¼÷dê²|ˆu«×{u~7ÉeO¿hr½^Ç'Ÿ|GGGqrrRÎ<¹Ñ¦ÅbQ¨n·óù¼$ÃZj©¥–Zj©¥–Zº!ü'Ç'y…ï®çü—ã› 6äßðck Ï®z¿èºËu_"nâ+ÇÁŽ1rÌöEu™ûìÿ×·Ú³ö˳Ïïç|_ $5k¼6p‰OÍ‚+øåØ©¿ºo5ð¨ÖÏZì]“ŸÛxå87óõ6�kWùŽ›j€kÆ?¾HË”ùñPQÞÁºÝnc2™”S|»±œ]ú’/¹íYrÜïøÕåú?X‹ãWŽÔ!@™™¯»øåv嘽ÖO€@Ú““šè…±™Ü§š.:fŽˆp˜ß1Íןñ�·uÈ 2{½^,‹Òw ÷£_ôýî߬ûÔµ\.‹,yõ=eÑ~p”N§óù<öööb8–>{7X–‡ þæ±"¾÷1óÈ>±¹ÇŽú2æè1ò·D_œÀ´-"‰¶··÷ÚnËÉ„ŸÿüçñàÁƒxï½÷âÅ‹EÞƒAœŸŸÇééi¼ÿþû�Ýb´Åí£óDƬŸïã{>2”gØ1á±ÍeyŒrýÆïÍæÕŽRN�ñ‘l³Ìc’Ç˼°nÖtÛs0'Q¯_]á9ÆmÊvÄm2¶jÝ3&�½ÐÝmË|d¬3îëväkæWæY¶ßô!c]ÞõS;U‹ï·�åYß2¶ÍX`?2_³Íu»Á÷˜ãŒÿ¹�ÞäD%ãa»ë…øàšì|¦?¶ù–7ïŠ^,åÕÈåf³)ïXǾr}oo/‹El·Û8::*¸%'Le<Ô¾³ñN68Àï^¯W|­ÙlVNH²?šéµ¤‘5t¾Ž0Áx: “,˜Î[óîË+lPè|ÞÉä�žèvÚe :OÙ™¡Ÿ¹gÕm�ìÔ˜¿ г¹îkM°¡š3dCg#TS` VN� Ø6l.×ÙvÚÉĘÏxŒxý¨ºììdG=5È ES~6›Åb±ˆ‹‹‹xùòe¬×ëøàƒâþýû弯§OŸ–òc<G¿ß�ñxÜWÆÏýÆ©ÈIœðwß}7ŽŽŽâã�?.rŒìÚiÉ2áÏÞ¥ƒ‚|ÛHšÇ|öøzì ú„¶vbʺaýã»�-OÆyKq§ó*³>�NKƒès¨é³“?è;}ǹô¤áÀ†ë8©Ü‹ãa§ƒrI(ñ‡F¶q^²“ï1Cf"^9V1ŸÏË8Á-µÔRK-µÔRK-ÝPNk Æ®çòoŽ“ œŒ¡|¯p¯Å¾5ª�Wµx™zÜ//T£�ö㳟z[?k¼ø2´ 4ò_^ ›ûéxÍýËí©Åw~†>çÏÄ99±ä˜™˜Š8)¢ÝÖÿÚø˜µ~×®ç¾æ…ˆ5@=âõ#zvµÇ¼»�¿–ÝŒÔîY,´º¸¸ˆñx�N'¦ÓiYø–w‰dð1÷+÷Õüp¼i|d׎�“±ët›¾Ðç¼sÅåô÷}5~wéŸÇÝ+ÑKû~~Ï}sÙŽus2ÇrÑ÷3"^’¼Ç8q®O[1¶ã–«r‰û ?¯¯¯Ë)šk‰-VÇŽ‚2&ÆÉlŸŒoä�›/ä9ã=9YÏŸŠ’yèäLÆSŒ—eùÃà-Y§Gøº\.'¥t»Ýr| ‰©ÙlV~˦õ^Ø®Ö07ë»ñŸzÆÈý¶¹–“Ú\o,¯´Ù½ÛhÜ'ëm.ÛEùžŒCƒ¢ÿÈc`ûåd¥ÛD=9k]¶®f¬ÕølÖ�•ñÉ<çfü ¹Gç(ÿêꪌ‘ÇÛü÷bY#5 't|-�ažkòœË†lSÌ/Y2V˜ýL' sùdØcLR‘±ðXùˆIêa¬<ÿ€]¢Óæ_žK³Ž»´>£KYæºÝn ‡ÃX.—1�Nãää¤Á?óª&�LY@i¨�!ËBŸÿóÙFÀÇeåûj gú;” f×±2Yæ„”Ÿ÷ ævôçgá“«'¦LÙ€›n¿OŠæ‰ÚžëÉ &8;4üfÃÀwSfþ[_k»ù˜DXatuu§§§ñé§ŸÆÉÉI|ýë_�íöÕ;†²Q£\Û÷ÉŒí�íKD”m÷ØgÕqÂH‘Ù¯éÉž÷Þ{¯á¬ØZOpr¹Æyì(h©¥–Zj©¥–ZjéÙwuðîÕ’»âˆÛb’ÛbD×�ýZ·iW[wî¹=ö»3x’ë°ï[y²_üE<©ýî$L.?ßW«'ßW«ëË´Ñ÷š—9æwùÄ?Æj/„öηc_ãÕ®g¾û·ÚØÖN.á˳�k~ϘÈ‘ë¯��yšyáä†cÄ|<Ðan¿ïq?ù=¢¹8'_slåvDDc&X2mЯÖn^xìX¶–|ª‘±��Éú_³=ó¨ýžù½+ùÑÏ?Ʀjôeì}Èõçç³½ÈÉíµÕ&vÆ­/^M€£qã![NŠqÿ£G�âŸÿùŸãþýûñ»¿û»¥½Þ�H»í$šWÖ/o©¦ Ë9+è¬Óléd¢Àñ"øôJSŒsDÄd2‰ëëëÆXa„)ÞãäÁ vÂ}YÇ¢¥–Zj©¥–Zjé«@ŽC"nb$ûÄÜ—ý(Çd»À© ʘ Tçrk´ Üõœ}sû�Í…iµ~Ô€—(éûwµ+—Ãgƒß¹ÜØVûžÁ�ܶ Ðy\j±·}qêÈÉ…ÌëðVÿ]<ñÿ]üÊ÷»l�¯¥]‹H¹ÏG¿QW^üùeÚo°¨ÖþšŒpüW§Ó‰ýýý²Ó@ÐàT­ïY–üŸøÑ±Žÿ3o,�ÀÍüƒOÔåD”ÎnS–‘Ü—ü?ƒwÈ+¿#£¶OÛí«‘µ]$NØÞ¦Ûµ:‰I½ÀÓ€»yʱ^ÆÛÌ3Æ~ûYó>Û_Û1ð6¾ƒØÞàuü¿\.c2™›ïÝ,MObÄýÈØaD”DK¶)N&Qžû‰ ±ó‚Dïwò±‡Ù&8¡‘Áió5"' d€Ûí‡å˜Ht’…Ïý~?îß¿ççç%qävd»· SÚµ(Ãã�±ó ²³ív[r¹ùî:ÁÚ‹m¿ñcÚE’Õï¨7þMR˜¼sév»-í �ãr­gŒ›-<ÿ¹_,TwÎ"óØù®{§6 ûæ1†Þ™i,Õ6^›ápXv/rJ“çç[“F5'Ëä Ä ãû1àÙAÀPsÍ»n,°ù;�cÅ<�¸uÂÊYK“� ŠÝ V";!™�Lä”máõ¤€ �|°Áv[‚œP©ñ™ösœ–Ûßß/[|ÝÖì¬{l¸ž3—vJÜ_÷ÏΉ밓cÙq�n_v–,ü£Ñ(öööÊû‚˜H'“IœžžÆ»ï¾¿þë¿§§§ÑëõâÉ“'Ñétâèè(ÎÏÏÆ‚r‡Ãa¼ñÆeåÍjµŠétÓé4^¼xQÚà�H¼¨Ì‰+V¤ðB¸~¿_Îä�Ïç�íÄ6–oúMbÌc�q^Ì{IðÝ+Tài 'IlàØçŒ9×h›å=Áu»ÝÆ™½¥¿üË¿ŒüÇŒN§ßÿþ÷‹‘ÆÙ𤉎xR¢m¶ ´ÝÛ¾-ƒØõz]¶qÓ.;®N´FÜl¿F_=v <�b?6›Wï6Úl^�QzqqÑ(»¥–Zj©¥–Zjé«Nø¤Ù'Ãg2�èûo+�çS8h¶ß–ƒø]à“œý2ýÁG5Øé¸!âæˆ#žÏ±[Äë§qpÍß3PS‹åùÍ'p=÷ßß *¹�Ž©o£ÀU‹cûý~Yìã•ÁøæÄ9ÑxÞ€úmrbž¸æ‘¿gðÒ ¯ceÇxæYæ[mÁ'×½JÙ²´«óóøe~SõÀÿù|Ûí¶,¤#.Ëý©Éa®Ïü7ŸÜÆZÜT.Ý~âÑÕjãñ¸ôÛ‰)cy¿1Çz^…2žÈ÷<ÀÿÑhóù<ÖëuÁ8�æy2˜M»=?Ôç$�íDÍf×p_Ûí»5\/cÌw)g;Øé¼Â¾ýŽžÍ‹ŒõzüqÛÑhÔÈ b´’›Í&ËŠ«Åb‹Å"V«U\\\4Œõ?~ü8Þ~ûí²:…>?xð ö÷÷˽6fvRpJl˜7›MqjhgNnìrÄm­Ç™ÿ–µN§S^Ýn7æóyC‘9x‰^Û¡³>Q6êééiœœœÄþþ~¬×ëøáßýîwc45ƾ¶ +;^èƒ'Z¯rñËãxžòDíÀa,m·°e¬ä¡nƒÖQt–—Üa;ƒA‘Ÿ–Zj©¥–Zj©¥–^OVp50P� ø7ž‰h‚^˜pð_Ü3øàºkàsnG¼ZÞõfଚçö8&ÌI ®¹�5€ß ©¯0âžc{xxÏž=‹ëëë˜ÏçqqqQ0¿Ÿ|„¾f|>{ü�¿ÑwÛË)möxÓ/äÍãŽ<1®ø¸ïÌöØ9á�mUÄÍ«·ß~»Ï~ÏíàôË�íZn{mŽw1Æaü.óÌ$Ï}žÜäÀ˜Še“?ë9e 2¿­WkÊâ9úÆ1`}ôÍÿmSÀeÁ}©Ûu·{ó 'U-_´?ÿ¹ïæ:æÄ°y�ýÛY×ë÷Œy>à7’‘¼ß�~çÝ4^<ÞétÊÎ>Û¦2NöérÂËx5üF>=?¸/5ÿ2–GyŽûŒÓq›ç’Aì¾qòʼn1ï‡çÙ‡²Ž3–جÑ×Ç�Çt:-‰´¿ýÛ¿-»‘ÆãqŒÇã8==m$¨ƒ OÉH;±‘e™&€_üßl6quuÕØ¶lÓÉ8Oºðòxy‚ÂIá½A9p"‘(üq9òïÁƒqïÞ½X­V¥¯è4“˜'ôØF±Ûí'Š3UÑCë”WàŒÚ®Q/cád“§m�m�mš'aÚDZ…ãñ8ž={VµE-µÔRK-µÔRK_Er��ƱD7�y^(e„û(ŸÌA¯�çˆ(>/þ|ö§Ý>·1"~ik@õ;Æ3¨äºk;$ —aÞ¬¡oùºËr¬qóŽ ~Ë€�c^Çu,Ø2xåqr\JŸ‰;ˆOˆˆƒˆ/‰÷#âZƒQ9–ŠˆðÒëõ â2Xìw"p28kPÓrâEŒ–!ÇïY†-Kð'¯•åÐãoÙ3È^²Z­ÊÑsŽ—Ý?/°%㤟Xa9qû Ì'tÊ:ŠfŸîÂ8§ÖÍçóÆ ä‡”2X1îEª5y…gÞù×ëõÀo=yÆ2mY¤>xˆ0–¬T‡qqq�N'&“Iƒ—ÙvXÆáýít:1›Íï1~3�‹^Yæ²=ñ;;,È¿wR"£NÐq¼¡“ëõº`Cà(ìBáT˜n·[Þû<›Íb¹\–b4'“I ‡ÃxñâEܹs§œžcûìÅáÖ ·Å¶»9î�„eìíí•£šœ¼ô>HŽUùÃá°|_,qppPøGN6‘̰­¾¾¾ŽÃÃÃø¥_ú¥8;;+‹ž��ººº* Ýár褛û�]q2EÆ®¯¯Ëb`Íçûcë“O|BGé‹ñÛŒ!ó9¡Å³\óÆ’~ÀC'á}�FqyyY°ÄóóóF‚À ¹ç(vö�Çã˜N§E>¬'ççç1�b86v$Àw»Ý^—ç÷Ó‰mc·ÙÖú7æÆ ½ÅÆØ†À7ØWË9å;i²ÙlÊbrvºdÞ3Nð™÷.œƒƒƒØn·1�N¹6e`Kñ¸'粯�= .ä [_üÞsÞåCB…v³`¼ßïÇÙÙYŒÇãÆiaKüô„²��ýýýƼâä¯ÒX­Ve×%Çu²Yƒc*í×91äy½à;ý[�L&qvvVæY°b’¼WWWåÕÌզײ*Ò™{pl½-Ö™+ ˆ�Õœàqò&×ãŒ7 êÉÕÂq³Šc—‚egƒÍî È»?0T(¼Ëb²°R[ñQvìl·Û¢tÎz#ÔeØËÎ�‹�>óåcKœƒï8¡.Æ2æüfAg¬jø‡ó˜ùï1 >Ë»W�ŒF£²MÔÏðœgWÉ¿úWÿ*^¾|<ˆ^¯ñòåË’¨`£}ىǸ!wü‘Úl61›Íâ[ßúVÜ»w/¶Ûm|ík_‹étÿ÷GGGñî»ïÆååeqØé�yÒétJr*"»¹j =î±£\ jl¨²¡sp” ŒòGûà‰'êÅPyÇ£G�â§?ýiüæoþfŒF£¸ÿ~|ûÛߎápXŒ2mspá �6Ù,‹ˆˆbÔi/rç,½�§í “_†gݳ|8‘借6ù˜ t‹?oEm©¥–Zj©¥–Zúª¾VNød_4¢~t\-¹Á3¹,¿ñZ¬ã6‚Ô€zßc Èqš}H/˜tJ»ú`0$×�Û@ÿìË›WîƒÁ5¯¾6ê$šc‰«««˜L& @ßGj›Wy¼r?y¼ÂÙcÑÜÁRãC­', œ˜Ìãlþgr9øþy†å-Ë åà6_ ¼å$‡©v=×ãç-ƒî7ÿk×r¹Ys[,§Ö5ÿ¹Ì,ÛùÚmý2�3Ÿjüv,œåÅ:êØ˜{vé} ¸Ì<7¨—cØ\v¶5.+”e¼ÉãcªÙP?k¾æ>º}€äèþv»�Ùl£Ñ¨Ø ˆ$esê Gþƒ¹½xñ"^¼xçççÔÔ4®Dò —…¸Ôã„äŧ`Ià9ü>›Í ãE¡»U÷]ß-ãN`;Ñ ¬#" Vj™DÛññqá»P />ÙÉzçöåä§qTÁû°�¢m¶wÆŸ²Ý°Þ9EŽ~z‘/ÿkó­eB>˜;ÆãqYÎ΋¬ÏŸœ Ê|„·ÆnÁ #nŽ3VEž£ò±ûÞùc<Ê‹²�Ð3þ•uÖöÏ 9�Kî—í»ÙHÌ“8˜Ïçåä-±3Ž®3ÛP>{á8å±€œ…Þ,¡½æKmÌáµm¢1FûXùzÎ3€ÛÂc P?:·\.Ë‘p´ÿ'ߊ¬#ãØ|dǾmôñq´ãìì¬$6±´ß‹,¦ÓiIü�»£ÃŒo^(e<”r½0ƒ¾/‹ÆÆÛb¨‘4ò 9›•) ;¿P:àr²x2ÍÏ8cmfdGÍBB¦/H( G›�UŸ¢0Ù@X·Ûmãe¾c\#¢dõì°;3hãîäMNŽYÐ(+?gy}�ÝGÙɱ�¡ÈV\¯ž‰ˆÂ'ÊÄ(R.ʃÁñj6ï<«�+ )’'Œ“ÛŠã�ÒFÄ«w9½÷Þ{ñ_þˉN§ßüæ7‹â“¹E)òêOVdu2™Äl6k8¡L0'''åÿ�;wb³ÙÄ?üÃ?” ŸDrE^l�=Éìrvml¬/ÖEËckcEÙy¥”�+íqrÄúí{>]÷`0ˆÓÓÓøçþçxòäIÜ¿?>ùä“X.—qttTV Ù˜[O-óÈÎ ýBw)ƒ­îvØ‘;¯XÄ™ƒÿvnЯT°Þ“ †—N<43QÂ; {K-µÔRK-µÔRK¯ƒq_æ·œ˜ðu?›c ûsÍ£Õ"š ƒ ÖÀ+ÿ–c—A •é/Cù¾ÜÆ º-˜ç÷œh¨ò"¿œ3øÀ³üË voë_Žq=&¾öE`n‹]‹Rùý¶D[®§Ö®d!®Aöv]·læ]'yÌn#óœ¶Ð6@Úœ�£ï¹ùÿ®úˆ3xn¾?:†Ê1UÖI®»,c.Ž]kI#�íȱ}n³Û¾K�Ý6Ê·~ìÚYæ¤í¦L·Å:çc©<¶¶oÙyü}½Öóò‹lWÖãƆx�ƒÙFDÙÅ0ŸÏã“O>‰û÷ïÇd2‰çÏŸÇùùy\^^°Ÿ¸ù�wÞ)'Ì\__—`K³Ù¬$ƒˆ¹ÁVܾœ€f,À Œ 1v�qÛMc5æ™�DË‹KÑ‹Ì[Ê`‘ôþþ~91'âf=ãf”m­ÇÏ6Äòêú,W\sûŒ)Z¾3æ”í|#¡aбËÈ|´~p d@�ß|¤ åÛzî� Üã…Œ-;Kv^9ácL.cÚ”gÞÂK/’0&j»ZÓOó*'p¼! ßoù¯ÙadÖ‰’ÉdR^Ïa¼:˘¿çùÍòPgê¯ùWyžÈåxü#¢± ÒX&¼¡M>yÉ æ-v ­×ë888(»“8~Ó‰ðÄŒ çöZv­¿×××qzzÚxºw‡y'_ë¿ûeYõ.jîã³åÝ îé[>±­z~›'é·”òéGô! »³HìÀsFìÖBépŠáÛù(s4•þ³í>ÁOZ½^¯l3e¼F£Q|ûÛߎãããø§ú§ÂãÃÃÃØn·ñæ›oÆååeÌçó8;;{-ÑgcíÕ d˜ójËI�»wïÆd2‰?ü0~ô£Å7¾ñ�rLr†ßétÊ–V ÜkÇÙ‰�?‰/ëÈ.§›çò9¢žDà‡W?x'›ÿ|.&÷yµâG}>,Û///ãüü<þõ¿þ×%Ñ‚Á²c–3óÔ‡.“4äV0`IÒy%)¶Àv õî)úã Äýƒo¾{Õï÷c:�–ñäŲmÒ¨¥–Zj©¥–Zj©NôÊ¿å ¢ |Cɲ}j'Mv�®.w×o5ÐËÏáw:qTlsœ—ë¦?_äOf_�2 ¼g^džÖêàyÊ«ñ¢Öæ|-ã™/Yòâ­ežÖ€ú��9Ǿµ~»Ì rñ�X /úÌm‚6›MYÅkù°üîê+ug¾Öd‰ñÎÏÖtŒ2vÉ^æ³ï7`F¼´+a™�çŸÝføêx=�A÷3?ãß³.¸N?›AZËd g±LSWNqÝ ²�eÊÉŠ,?¹ÿ5Ê6,Ëo&®eì�˜—x×Iù¬{ÆÁž={o¾ùf¬V«xùòeyg4Çûø‡Ã888(§Çp„Ÿ9š�<رÃa\k!¾Ç³Ý÷Xya:}´C–uË vÀï?g±©�óô¸¢;ý~?&“I9bpµzõ>m¿ô|%Ÿ”Sk£e£ö—1ì˜eŸˆëƒ¼»Ä6'Ï N(xÁ¶ñc—½Ë3†,,'‰Øï÷c6›Åx¶ÿÆÝl»G£QÙÕÁñtȾߑž�~³-¬%áƒeËŸ-W¶iÙ–S¦“óµ±  t‚¶úè:0ÉÃÃø¼¼l¼&ÂsQŸZÒˆû|"˜Øvû Ç�FEÖ,£öÙl‡r[�£œü΋Þ=þ™çŒw¶Ý9¡I²�’õ‚{¨³†é2µ¤% ºÚ®1èÝÉØ§Í>öüÚí÷)ì§�P­ù�¤‘…ÍJÃò=NL8ëg…A¨=Q™±>×ÓÂâ‰:e ¯�±«ObVh’G<�±ÉG�1x´ŸUò�L kÛétâèè(f³Ùkøv»-‰¶Ì"ÈÙä—†zL,<Ôo§Ì &„ØD;€NH09s¶"Ðn·[~«eŸ1¤8LôÎÊŸŸŸ7Vàö³�÷ÑW&J+=»ªøm4ÅïýÞïÅ_üÅ_ÄÇãáÇñ[¿õ[±X,Ê1žóù¼dv½ #�WWÀGOx‹Å¢dºÇãqI2Ńb±XÄþþ~#XcRòù£žÌœœ` m`\ùä“r¤GK-µÔRK-µÔÒW� ¨dP9ƒ¿^`”Ÿ�xý˜'îwàŽ�šË̉S-pv¹ÙösŽ‹ Ä3´t¼W«3|»€?û¿³n»Ý–cWð…Í#c¬u,óex—Aw·Ë¼uÿ âÔ »ÆÈåÑ.óž&—ëd�ãíœÈ �O[ðjâÜ6ƒ]æq?íÈcX#�¿Ûe`-óˆÿWqû¸îr]g ÐåcÄmyÜ(»–°É÷Ú¸ínwƉÜ?“ëôøf>eàИTæ=k¼?06ÅóÄ�–óÐõåqÈ@s�™rüšùeÛå~‚wÍçó¸sçNIݹs§Ÿ~Ÿýñqj‹Å"ÎÎÎJýË岎Œó³NŠT»í 8€9`·ÔF¥4/œh1ŸÝvóÙ‰²ùÇDœyMLtÛí¶œk¾m·ÛÆj ‰Õ%ôÛ»ÂÙøÚèæk9Î+ Ëœ@e|¸ÏFÔÉ#Ÿ»K»p¶®®®âåË—Å£^ød^m·¯7‹Å"~úÓŸÆO~ò“ ñû¿ÿûñóŸÿ<ÎÎÎâí·ß.rL]WWW1�ŠM¡ÿ8F~™ ÄÄŒ¡t hcmÛäd‘“wž,üž2óÄçå’L²þ={ö,®¯¯‹£{xx“É$þûÿïñãÿ8ŽŽŽ¢¥–Zj©¥–Zj©¥Û�ÁÊ÷åÆ¿eÎ1£ivPíZn›ýÒ] –Á,ǵöãsÄ÷yg|.×`H­íµxÝ¿eð—û‰VOÖ»]«²süX㧯¹lPn<òÿ<λÆË1Ô®¶Ôd/—{[?üÿ‹äÇ2é¸Ü ˜åÔcÈóµ:r›<¦M9ÌzSëãmº‘û“ÁÛš,Ò(óµqÊõåÄZmQ`–—›BÆ‘2¦pò÷¬k9 xۘ屭Q–«š¼Õd$ã¹ ·Õ�eŸ1?ãäöfuÒ¨ßïÇááaܽ{7ºÝn\\\Ä‹/ NÅÑ_ƒÁ ÄÍÞ-ÔétÊ‚b^Iñ*&gõ=8Áz½.¿Ï˧ʀµñÝX‰e Ó²’ç�IÆ2>â{óÂî�ÇqttT0‘étZN(rÀt¼)ÏyÞ¨íD±½È2ÇïÆ7ÁÙ#/lÛËrìdTNLeÙÛeO#nl‹Ä7›M‘E>o·7 ì3F”4,ŒgÜŒ¡‘Øêt:eÑ{§Ói`߯V�0ËÉ÷�]gìððIC´{—=b,̧lámBÏÖëu‘'vg��2—_^^ÆÉÉI O½d  IDATƒrŠ;…è‹�/ËIû9–Æ«ÓiîÀËI3¶ü¹¯ëõºñJ·ËÉiä€ñ§Ý^ì’ýøË³Ô3�N VÏÉa”ËØñg|;ë~–ìËÞÞ^œœœ”÷·‘°1_iÇçüÊmv&�‹m4X;c�7¬dª¾ÓÈ”•�‚¼C„Ábw×a~MðkÆÂJV›èmÜXïš°'Iãöìíí5¶|R�Ëðv\éI™ zP,´$Šh+F&Àž]IómEÙ¼«Óé”�¢|´ÝcErÇ“‘Šö›—ð׉.Êôù±”Íñož`QRêB> 1Ù“`è÷û�KN°¹ÍN”ED1Þl¯Äè‡Ãøõ_ÿõxüøq&“IÜ»w¯ÈÞÝÙÈëõºè…W³�0b\8Ðg3qÐ.Úè¾ùè;l†ùΘøepÞÑå‘�ΫLýË—/#"ÊŽ²ˆW/ ~óÍ7ãÁƒñðáÃøÅ/~-µÔRK-µÔRK-ý¿G5pÔà‹?ÛÏu\b8ƒÏ96®c5Ð+ûò»À0ÿî¶8p÷³ùsŽÜç $ùy‡ù¨îË@ªP9ѱ«5ÀõG4ÏáÏ`‘ë÷3»À¹Z]»ÚC95¾f^ÕdlW¾žãtƒ”>©%Ç(_Ôÿî„$ädQÆT2Ø—«ñÃò@ŸŒ'ÔÚ™Aô]|t›MWǵÖMhù~_sý¿¶À9÷;ëµõÊíºM^r»³g€¹6fþìz]g Ë3j|÷}�AÝœ@báæx�NË¢v¿¿D^|$ 1jó%í7çNê2F•ín¶il> ±g|n6›L3"b:�Æééiéx1Ç!R�LSGNºÕt‚kÖ9�W·Û-ÉЈ›w»;¡ˆl×v€Y&-oè|ÞÝ•}Ï…æ)¿{s<Øl6ew‘{$¥³,{|=F®×‹ïÁONNb6›¹Èºcûíä�ë3ÿLÆ/�0?H¸R†ñWSõ�FùÆ,5-Oœ6bÙ)§s6nV\;;&¾×Šã‰Ä–'9˜Åodëhƒïm”vrò%÷}»½9>�²E Þ»ˆ˜È)?"Ê6:ÚK6œ­®€þô�kdƒq:q@ý²ÒÍfSxú€³;Šv!Ü46$y<ñXn8¶#ÁsvŠá¹“P-Û‹}œ»<|D�“–ŒÁÅÅEŒÇãø7ÿæßÄŸÿùŸÇ;ï¼½^/ÎÏÏãèè(J�ŒÇþþ~Ùm´Z­b6›•>±"~Ûp“Lùîw¿/^¼(+q¦Ói9õí·ß~ÍQ¦dÉ I'¦àgv ­Ô8?NêfýbŒ�ôù«<ç-Ú$žF£QÉó:aD;g³Y|øá‡åH¶ßù�ß)F÷[ßúV¼óÎ;%áC9l'Qê#qð &eË1mEfé‹ûfç� ËIaÛºœ|¦�ð~Ïçó2á#óð™yç�wÊVÒ–Zj©¥–Zj©¥–n(Ç–\Ûu_í{kkåeÐÆ÷Ô€[—ÇgþçzÀû~|Yê7aPÑ1hmÅvn“câ|/¾¾ãhŸB{¼úÖGPhÁç%6&NãýÄ"»n·Ûãµ Àô3ÔïÝ ¹ÿ™/9ÍÀVÍç÷±85à2Ç`Æ2fAœ”y`°Ë`rA9^ÑoYʔۚybyªéM$¹ŽŒ:Þ3Õúå±­åµq­}Ï:jY‰ˆ_Ì'7rjßsùµk¹ÿ¹ÍN4¹-µ>Ó®Ú*}÷/ë~n{ 8ÎíÏ2P«¼K0÷Áý"ο¸¸ˆÃÃȈrD@u>ùǸO¯×‹ÃÃøÿ~œ��ÅË—/£Ó¹9â,âÕ®bsާcg„ñ6ëQ¿ß/Ø–�‹ÂέV«r\üz½ŽçÏŸÇd2‰n·[^ŽŽŽ¸˜m„ÇÓ`:c�í©í‚e™ï.aór¹ŒËËËÆ¡`à ÆŽÐ1Ë…±œš¡ƃ�;ÆŽëy!@Þád™ô˜XÎyÞxüu2ŸšÛ—õ6_³nRFžëwù´™ÿ9±”yÍçëN”!×××e�õt:m¼wËüË|3Ù/pÛÀ¡ò&ŽårYN�Bg¶ÛWx4 ¿Y,qqQ’¶§§§qyy“É$îÞ½wïÞ�{÷îÅb±h¼:Ä~‘OBÊmõà“0`­–Ý<^È=ö/çÐqß�\Qnæ›wÔø=JØ ïNªõ‰c…© ¾FDy­Œw9Z¶¨×›Z<{ü½+Ò &xÁưpƘÍ&¶‘Œ…u‡ïôûBÒ2âÕëaÀ`;�<–„"ÔHÑ!Oлœ0wš5¸ž�p?çgm\ý[6$Vê²Ñ©­á?Báć º ‚wå`Äm¬\à³�¶OÊ÷V[”É<Âé÷±ŒF£’$‚7L0>�àÏ`9 –ƒƒƒ¢œÁÈ*[”Óét[ÕØE&Þxב³ëÞÍCùÚeEg•³åî/÷’4cU Ù~ê€èó|ï¼óNü⿈÷ïþ]<þ<–ËeYÁA²ÎmñVQg—‘dɹÏê<::ŠÅbÑØ¾8™LÇçÙ)÷Ê ,þ;è3Y·lx)•u—ú/úvuuUÚ̧ô>eç–vØ�[­Vñ³Ÿý,>ù䓘Ïçñ{¿÷{qçÎ�8==�Ï?ÿ¼ðÙ§vTh³ ¬WJ0Q;ù‹lcH)Ç ‰$;²ô…2ƒAãÌ_ÚÁ®8î½¾¾ŽÅbQôýb× - üþþ~ãh½–Zj©¥–Zj©¥¯29f³O íÌãíµ3ˆ�ï7Б/5p)þa­\ž¡\ï&¡žZ™¹oüß4e0Ê1B^TqJÀÇy1eñÙm«òµ±q 4yœ 8¹¿ŽrÙkð8eþ8¾2�ã­\¿¯çqö÷Û’%”G¬P‹×<&YrYô'ó¬Ö~c5þÕÆ0¯’Îcèrrü¯=Ïç]²ì:rÒj×o–›KÖ’ª~&÷Ûöc×ý»ñ1ƒº¹Ý~]‡1£¼ÈÔq¶òœËc‘eÁmÏýÍýä ȶ®ßïÇþþ~Y¬9™Lâââ""¢q’‹w¨ôz½rÇl6‹gÏžÅùùyY J"çôô4öööb¿�SHö*ù¼3À‹Š×ëuIj___—ã¶Àvè+;’üþî¼# L„~�=y¬øóN¨¼šìÏ»¶ÛW;Y.//c¿‘XÌ@šÏ¸žmäb±ˆétgggquußüæ7‹Üg~ÕdÊɘ<ÿQÇr¹l,g"ý°m _È8µÇ3Ë•uÐÇ æÜ8¯ßåží1¶þóÛ‹~ÓV· »fw³nrOÖ+ç,Ÿœâæ×¿ä(Ü‹žXÝNxcþÑ/'º'ãë;ve§Á Í“ìd“wNÐy;jünañdC™ž\)£v†'Ì˃â:œÀ°qt?i‹'K~wÿœ@Â(x«9«±x¾ÙQb‚ívovIP7ýÀÀz7ÏFÜœ©i'�{ªyÁ–•ÔÇx‘�¥o>?6âÕ±[Üë žàüZù©ßï}±PïííÅååeIqf+À=I+ s¿ß/É+I0;Í×××qçÎ�øÕ_ýÕxøðaüð‡?Œ_ûµ_‹gÏžÅÁÁA|ó›ßl¼ EÇàò2BLÐy5š.ø2�Ë8 LJ‡‡�¤*<°,ôz½b̬O–aë�(&"&†|.*+;,‹ÈÛaoï ËÁ�ër›(÷Å‹ññÇÇ“'Oâý÷ß�_ù•_‰ÙlV&¦ËËË2Á#Û$›lì‘W'@íÄYÆÜWú‘ƒe÷ÁeæU5LRv²¼û yà唣Ѩ$3ý>,ô'ö�7ÞˆO?ý4Zj©¥–Zj©¥–Zº¡€¹ëóQÌk+a#vç‘ãÆüçve?9ßcP%ϵú¸fßÚÏÕÀâLyE|nWŽÉð±¹7ƒúNå•Â9μÚžä{ ò¤=y—Iæ=ÏŒ1¿³Z;ÖxU냃'·©¾Ÿkçí¶;)ðeeÞ¼s èeÐÏ™ÿþ�úón¸]¼ÏÏZ&j V­ »Ê®égNÎx)YµþíÒM' wµÇ|rÒÊ1¹ÛŒ¬Ðe;åX”²r"½Ö¦œXà÷]cã±uû\.íq_8ª«ÓéÄÑÑQ¼xñ¢6Úž‚UíííÅl6+}899‰Íf/_¾,ñûv»�ýýý˜N§ñôéÓ¢û,ºd‘©1Å<޶ïà/Qðïn1¶~ELÏ 9”Ÿß÷Áw°ƒûð�¶DöBËϰ•]HÖeú•´{Ü,çùh+úézmï#npV0 ËVÆJŒ?ô7h7}ÉX«mŽu.Ës–Q?‹Ìçó’42~“õ ïêt›Ìo/§<'‡À¬À¤:�›d…7€éu:7'JÙ^ ?làî3Ö%YàÅÍÏmð‰{ظݾJPrLÝÅÅE¼|ù²ì2þàƒâøø¸œ\åä2– ßl?!äߺ¼K=_gÆ€ä r�^__—„—“EÃá°lOµŒÚ@BÎjÓ”9³ž06ÛíÍKélĽc­FÔÅ=yטåÚòn#hÃÉdýÑGÅãÇ�c4Å÷¾÷½Øßß�ŸÿüçÑï÷ã[ßúVy¦3ýiƃc2˜D½K^Ñ;Þ6œyBÊ+)Çÿ1ÚŒ�7øÁù°ý~¿8£¬b¼²SÚétâàààµl}K-µÔRK-µÔÒW™ì‡û;Ÿ3˜�¿×È~¡W[GÔAYûçÔ¶/�ÁJ—™5ÜŸýmüç?»µäE­¿Ž{á>u^ØèØ�˜œ•÷,$ã3>o^0GÌq“ôðÊûÿ¢­`ÜGÁ¬²­�ÞÍKþ{×”*ù{./ó¾F7&>òÂÂÿ8Ñ à©Æ³|=Ç;ý??6Ágó¾V¾“vÀÍ÷3fŽÇ2p\{.¢ùN#ë§Û’ñô4'Ý÷šÜìÒí]2æû�œp{ó‚cžÏ8�í�1*ŸÜâ˜ßX‡uÞ|ðç]¼6¯²œÛöa/;ŽEbañááa‰YXL\Îßx<.Ǹ/—Ëxã�7b0”#²...b0Ä�;wb>ŸÇ³gÏb:�–Hœ àv×ä*�#í‡qrrRøp||\@øN§———ãáÔ@ÜŒ1�F£Øßß/8 òæqD÷Á¸�EÊðn¤]ú6RÛáÀ^s²ÀãŸm@çœp@f™Œ·ð*0Äœ  ÌétZðóó6ìúkü�‡`T´l†¶ø•%ÈN–ïÌw˯êØl61›ÍJùøÈˆ(ûññqœ��Åz½Ž“““8;;‹ÍfÇÇDZZ­JB –ç�ëÉdRø ¿m;¬çèü69º>Åp8,Ç™m6¯^¯ðôéÓèt:ñá‡ÆÓ§Oc4Åh4Š£££èõzE/Œ_YÎjvIJ€ÿ0�Kj4Åt:�ˆ(¯Ë´®dœß2Ïgp·^¯W¾^ �,zãG¯áÃd™¢ $Šá1ý3~H9®üÏ Ôm»[æ6ÚêM®‹v";ãñ¸È§[ùyq ²bû³Z­ ® ß9‰‹ã Áìyß<ÔHÕœæœ=¤1»²�~>_s†cØNg"¢8¦ bžÀ¹§6[�ùÍ0“Œ�P+}¹m"r½vJ¼Å»³‰6¬7«UË�ɬ2Qûƒ( Æ¡‚_6ðNO&ÇÇÇeG Æ…'sng…62‘3¦ðþ[I¶Ûmã�L8!7™LÊ}£Ñ("¢¬R!°�çä}wîÜið”#Úr�Ȥ䀃Çv\�áÉd/^¼(“+œl@þ½‚ÀF‹dŒåÞç@ƒß�Œô¤šóޱ…�Y_í�óßòÃçn·�=ŠŸýìgñòåËøþ÷¿ï½÷^œžžÆb±ˆ{÷îÅh4*«S¨Ûýðû‰�_gïm/ š#ìDsäTpÍ+aÐ_ÚEòôêêªÈ;zFyè>:’{«FK-µÔRK-µÔÒW‘œtqÜ•�GËñŸýa|CǧŽ?}ä5ÏÚË ƒ�‹ İp[ ¾çxØI#÷Ñ>¼ßïáXÒuÔ£^âúëø!ûüÄÚö_�À N¿Û6Ç>^Àq³ÂÝq�ëÌÀŸcf]øÛÜ︎X8â¬tüU[ýlPÉ^!îx Ù#ð*ú¼€ÔI÷×ãFÃ3N¾elƒÏÞÝÁ½þÙÉ -ÿ™ç–ËŒÛî1…>ŸøY¨ÅŽà7‡‡‡qqqñÚÑáÈíÈ7Ÿ�E¯9¾uü>‹5½ˆÔ b·Û- ^-ãîƒù�í >å‚#0ÖààX>É;4<.ð1`j°Û‹Eá;‰Ë<ßçóyywÏt:-eØžaû°$‚¹�cå8�½`wG¶…^¨ÌŠuvT—ÝŠ»wïÆƒïmŽˆ’°f¡²_/�ír–}úê�Ü3›Í»›rb{6›ž#ùýèȧ�xçãMBˆ•ý�N'&“IŒÇãR×�ŽŽb»ÝÆÁÁADD\\\¼¦swúG߸†Ì5t[:ŸÏv.ÛÊñ®ËoÖiëzž›¼(Ù|q=¶ Ö}ë[Ƭò=´pÞ81uòÚúÀÂmÛ-ÊÊ;Š"^ÍO g<‘„ ‹9˜ßÐï|ÿ4n  �}&™J;<¯ÛN¡»à¿Œ}DÄÓ§OKrv³ÙÄ‹/â‡?üaôz½øå_þåb<R®çxÏ·Ù‡¢žkÁ|³í`©çêꪜ~ä÷4ÙŸZ¯×Eǰ­5¿Å Ç�wz|H¢ð{ͧËó¿í0¶ŠÓˆŽ��KÚ§Ñxd´/å×—`“Ñal1 Û[ÏoðÌã8ŸÏ¾$úîäüd2)²�œCÕãéPÀ“˜�@i„";‹0ÝÎåûšƒ „�…\¶' 9©Á1qŒ›ïrû|�ÛC}(PÞR˜ëäyv͸ ©7Ï<ày'M˜Ðqª8îËNñññqL&“ÆVK÷œ±·SïÝan›V•ø¼ˆ›­—L‹Å¢!oÎÀöûýòrD¶ã"Èv–<.”}ttßýîwãŸþéŸâ“O>‰»wïÆd2‰Ï?ÿ<Ž��£×ë•I“-Æb|¬8Æ7/‘Ýn·q||ÜpfC‚2Úì ³}J𠙃7üF[,“^‰’“#È*íÆ©±‘GIŽX·¬ÃÈŽäóçÏã§?ýiŸ¿–4"æ®á+TóuË™ßÕjUdGà^¾Ïf³FB)˨Ë76e{’wŠØ>Ã"›Æ(~I,q¬~Ö}·Çr/¼08â&ÁNû�UäþXVrRÁñ3¸KÄ͉5ŽËÑ ÊŒ!åOëÅx<Žƒƒƒx÷Ýwã“O>‰çÏŸÙb•ûãÇ�ãüü<¾ñ�o4€yË ‹p-ôÍòc]ÊI'�HÒ?¡,cYÞ�äÅ¡~mÕx<ŽÅbQv 0FçççqvvVôŒ=¢|lG¯×‹ÃÃÃò®§ëëëFÒÓsBNîäùyÅÞFÛ6zî±Îùºëö»~�gÚ‚l‚%z±{Þ�ç±ÌvÏ ßK{²¿@ÛÙµ�Î5úœä°ýC¬Ó¶‰,66åÅúsb쌤ˆ12Ž’ã=[´ |ÎÇ$:ñÇ8u:�Fù$C{½W¯Ñ ñ€ü\]]ÅÏ~ö³xÿý÷ãÝwß�£££×æoãdYÞ+�cHrw»Ý–d�åb¼èçh4Š^¯W°`t¼=̶Íótö?<æ^̃좇–çLy¶.øÈ7·Çó®yÅx²X'¢yLa�¼Èžû;�Nƒžó;ü«ˆ›ùÔsÏbIÊ™^;žÎf´“=·Mø.‹ë;“·3Ù”ÏZè�œà÷< ðlÎÖœ¤ìLã\d¡Ê\3HNV`$�)ÌNF ¾¡ðÒ]ÞêÏó8,Üc^ç‰Ãæw:�ÇãÒw²´9©gÄÎ-mFé�ÌðdK9´ § O4Î’�F£²ÅІ�ß‘¿ Œ:j+¾÷½ïÅ~ðƒxüøqü·ÿößâ�ÿø�ãïþîïâÇ?þq|ç;ß)ea€-ëÛíÍöE*'TXA@–›¬nvf� 7žTq6²óîdœåcfÇ“ßlÔ­µ`*'…�1ëYv¤ Vnýüç?�O?ý4V«UüÛûoãÎ�;qyyÝn·¼Ï‰ÕNìÚét:1�_[Ƀ­°#œ�²¾Ü—š¡­9Î<—åÛ²3�N˪”¼ã޶˜OÎlŸØÎÞRK-µÔRK-µÔRýø/Ü|wü•�íüÏÙs|jÿ_¯ÖŽè–sý9¹â¶|α²ãAb*Ǩ´ÉI"û¶\s\œc7ƒ Qü¬ã*ǺٷvŸyãøÂ8�ãêõØäom²Ÿmà e»ÝPÏƻ€‰Ãˆ' /ÀôïÆ=2¾�å0óÁ‰§Ìë,3ĸô±,ÁK®›¯Yj±[¾Çÿó}”Ï1TŒ«O6ñ‹íý¬eß㸫Æ’Ý#$G๓†ÄæŒ%mñ qä×cÞéÜì¸ð}´Å²k�´-!ÉèþÓwŽÁgG€Áÿ]ý§|ç>'­ ÛÚé…Ë€—$à£�³ü[®­û¶7èQ¯w³ó§¨"#ý~¿±{�wg÷z½²“èââ¢ìÚl^½ëˆã‘.//±=õÖ;™q“tÉ»gj ±õÅãAû_Ê7�í#;ã^øîÓuÀúý~�ÙlÖxçŸ~÷ïß�7Þx£ÈÚp8,ÇÜo6›²èü)Ï 4e1,|ôîc˜$ë­'9©k›€Âÿù|^¾“<ŒˆbKV«UÌf³†þ¹/9)™wj8¹™mrDû€-1Vf»CýÆ"ÑŸNç?™Lb³Ù4^—�L¢?ȼõüÒº½k÷3ó•ÛÑívË‚ùN§S^™a› ŸÀÒr¹ëõ:æóyYö}tt¥]àÆ/_¾,»ÑœüÊzÄçîe?Í÷ÙöYž˜#,‡N¡Þ�„~x<²,e\.ÏÙ¶NgÛ�±YÊg,†Ãa\^^FÄ+?ãââ¢Øî±Þä„¥7* 'È*§rù9æyˆø´1Û:dŠ}²½§mØ—[“Fž ìhxâµàó9Év<}/³Q²Ñ±€y«mä­ ´Wf°J€ Ά3' gÜrÿ©—ÄWvÆ�üá~ )ïÈñ.ÚNöÏA…1âf§�Þ²CëÕY~™e„Á»š,02ʶÔ:xcገÆ$c'~PG-ð�GÞõ„ƒC]¼ÐËòâ £±^¯ãòò2¾ñ�oăâÃ?Œÿú_ÿküéŸþi¼ûî»ñ£ý(?~÷ïß/ã‡üppî%}óy™$ø�þ ‡ÃrÎ$Á Û‘é<ÑZÖà‘w•¹Mž|0<ç÷8‹ŒÜ1~9xtà%“4:”�éééi<|ø0ž'­×-;´Ñí§ð.*Çžì´1�ËYNXZ ðN&“rŒÞx<Žóóór„{ÞÑåøÒýÏü£o”à ­c5l)âæ¨#žüfamNÑFž7 =™L ÞqppP ÇÇÇqïÞ½xöìYÊß{クÿ~\^^6@QdÇ;vh3‰Ú` Ãx<«é¨åÕINlú‹]ò‚húæ�4ðÆÉgp…ÙlçççñüùóxñâE¼xñ"...ʽ³Ù,>ýôÓøÙÏ~ƒÁ ~ñ‹_Äùùyc¼�!’€¤ hg»æ³ÙlÊ{à#Þõƒ  1�N«X®yÊsN#?———ÅnçÂg{îgl‹ëÄ�Mz,òŸ“¶/~×TÞ8à¾"ȼC£Ö+Ë wçÑïÍæÕ»‹H€•ãÑj6�6Ùö›ÿ–mÏŒÓvûêØ=^Áî0ì·Þz+""ÎÏÏãÍ7ߌ“““’ðËkmŽw21/ŒðU w<øi°�vÎ ƒGŽ�—:v#އ¼¨Ôe:F1ÿÌ+Ú–�ßÌËÎQûžÇǺ‘÷ó{?³K&j²A|ÉøíJzìj¿yàúÌ[ǸÆkò}î Ÿ³¾e°Î p¾f™uìê£ÈÌsÚã$a�·�|Ý}Ê &í¹¼¼,¯ µ�4Vy1*úEâ„•üào>ÊÑåðäYëÞÁÁAI�Çã˜L&�Ço¿ývÇOúÓX­V1�NãÎ�;eÎ`0h©•mIÖ1tµfkk «i—­56D]¡·Ûmp*ø2›ÍŠ|ø¸?°'Ÿ>}×××ñüùó‚;q:ÐõõuÁ_V«UYD�õÃòîv²¨ü‰×+P·ñ0®Œ;Z³lÚŽñŒOÂɲ _Á™rB‡{ò‘“Nl"Nþf¹v}–;Ûñ¬OÔA¢¥Ûí–ñ£O¶Æ¢�ùYÿ2®eõÜbûáݧy—�m-¿ñÞwvvOž<‰ÍfwïÞ�Nç&�u÷îÝÒ†¯}íkñÎ;ïÄþþ~U®²þx¬Á���Ú®f›CyNl¿E¼ÛÚØ¡e æëy�‡¦5»‘y?s[¹N_|â<Ìö€ÏyüópdÆ}„—^¨A9^ˆ�¼±Y†W󸾰¾ÑOäœd·©‘4²Pz"´‘ÎÂ`¡bà ÜÒQ¯T‚ñTÅof÷p¶Ò»-6vyï`°“ív;[¾Ýn+¶Û›w²øå[µ,¡Ëç9o¡Î[+mÜÝ.¯ ð„mƒäcæ\.u9—…7;Ê&’$ ð³2†”¢àlåôî?‡B˜G^¥`9Ã:`ì8×É“LÄ«U/ßùÎwâí·ßŽÇ�Çßþí߯ü�ÿ1>øàƒøðÃã¿øEG¿ß�ÓÓÓ’ä¢}|ît:e«9†l0Äl6+/zä%‚(¿�J��Ï*¥�ð8Ë“©3è6Y†3ϹN»s‹²I z²ËN¿=þ¼8.}ôQÌçóøíßþíxóÍ7£×»yá&:zrrRä@ÿèFvÒ-�È;2ÇýÞÊY Êl|³¡å?+àõ:¨„²!†²ÌbƒAy‰aK-µÔRK-µÔRKuÊÀtþœï5H Ù/æùìKßVßÕùe®eÐe™¿ tf #—“ûh,ó0/ôo6`³ `uvµßX求ÁfþãKçØ€ÕX…ãCž!6åc[Œ]8FÈ`ŽãFµã€XÈuâ1Ë�Wdçv›?Í{�ŸªÛÆÁ2’å¿6Fµß©×ü„G¹}\Ï;¶jä1Ê«êó=´#Œ¾ÏíµÎ¸ÜŒÑ@™Çþ=ˇ�ed‚ï£"ÎeaâÁÁA,—ËX,e1ª 3öì¤añ#²ë/þo<Ç}2/�ÅüÜl6%9ÔétJrƒãÕhS¶¡ÜïgÀbÐÅñxÜØ¡hy~~Ëå2Æãq|ík_+‰�gÏžÅw¿ûݲã¬�ºÁ]ŒU8~¯Í ·Q¶ÃŒ�_Kà{³�Í;�c<Ãá0îÝ»<(+ù×ëu¼ùæ›#Ùßß�Ùl?ùÉOÊ1ÿGGGÑï÷ãàà ÖëuÌf³r‚�“$¶í¹?þïØ`*¾yñBýÚ|’u(ë v9ïL#±f¼ yØßß/uñ™“z�l˘:¡—…‡…cݵ#òlWÅx nïä² -‹’EâcEÁN´ét}ôQüèG?ЇÆßÿýßÇü�ÿ±œ§û¿ÿ÷ÿާOŸÆ�;w¢ÝnÇééiÅàgw |�£0�NK†QÝããã8;;‹ÙlVæ„]_l?e‹«ù†3�ÙùmýÊÕA1†uF¤  8+P‰eºÃ6'“I|ÿý÷ñäÉ“ØÛÛ‹ŸýìgÑjµÊ¶Ì·Û-÷!Yy™Ïê‚:ÙÁc!8ê ¿||"ugG>‚®ŒÕ�U÷ ÅozX§Y™þо¹Ó¨)MiJSšÒ”¦4åõbûªÄ5Xa§?ƒ]¶wÿñú==n7וëÍ€³ëËZî³}jû^ÙWõï:Ð#ƒ—¹?7öáùŸ±e0£ˆÌ4¡ŸÆL·aš®âÏ‘!Ëwø¶¶¯é':ê9{ŸÿsÐ)'.Ú¯0ØiÿÉA%ÆÉ1d>^Ç@«ýÓÁ€Qö×íSÛ_¹)h”yàÿµ¼‰·ëžÍÉsøâû8a?‹:gfÀ™1p óÇs$tò7tÏ€v–gÏ>(XJö¡ùŸ±8�È3àðü.Ã)ôÅó‡oLòèÊÊJñ‘ë°*ðþv�4Ë-¼êûb¸ åââ"ºÝnÙ¡B±<ÁçÆüŒeÀ¼šõA&îS"(a0?Œæòò2¢×ëÅíÛ·ãûï¿�§OŸ–ºè#Á+°8p;æœàŽå,ËJÆÿ,�´Ãï|T`æ_Ë«e¹�»ÙÚÚŠ½½½X]]�Ñh³Ù,ö÷÷cww7Úí«]XÏŸ?�ÃÃÃ"{“É$Š®³ ÞŒ‡z®¼>ÖÉŸƒ[ù^UxÌ™¾í¡)t¡=vEðÿÊÊJ Žøê ô62RÈë¿ñË"|’ib90�2<4î]‡Ö‡`jŒ¹/f{{;... >èuÙ»�X‹± b>öéXÃá0^¼xÏž=‹û÷ïÇ`0ˆétZNY2¹»»‹Å¢à›`Ÿ–—:;Å´²\¸ï–QI<¶�àÁœ¸â`g^3èAFò\g›ì&Ùóõ8²|{LÖEÞ}ó\š~™ž®;"*§C�/³«gÞ#¢Ì�u¢çÂ;¯ü¯ÖÙ’7Og&ÌBhã5öÙ€¶’ÈÈLâ>0áQ!@1ÊÍýÌmð�É™ëÈïz×ÃÙÙY ƒ =0XÀ­81X2¸M_M<ÞYcÃf¹\– ôe‡ãòÎ�aQaÏ‹sG@Çã °Á3Ž€‡&ôÉ÷1Ç9bëÀ´±��uvv·oß.ŠÁF%Óbqµõ÷G?úQ|þùçñ‡?ü!~ÿûßÇßüÍßÄ�;wb{{;ž>}›››Ñétb2™T½Æp˜¼¼¼Œñx'''å82Ë‘ 3Ý677cmm­Dö-Vfެ3—n¼@FD%…!ʸ¬”3ÿfÆ©›ÍfñäÉ“ˆˆøÿâ_”…h<E6Ÿ_]êù4�cx3o,˜ÐÅ�QgM™§|ÇãÍÆKæq/êÈFMδáåÏs°«n7ý·¶¶¢)MiJSšÒ”¦4¥)7ïÎá·ÿæyû¤¹Ž7�ß ç3ÛÜu}©GnzÎuºïÙ?µìvëúcP%âð2˜— îWF²?ï¾Ù_6À€ îÀÒMŶwK¶Ñs¢Aޏv‚˜�­ËcõÔœÁ;NæÄ7q�qߊÓß °û8æ�»înžsö¯­:�&ƒ7wLo¢ý›¾»i.3O€¸>F „ €�4ï4ªÃzh˾;s ½ ¥q(̉±—:Lƒ¹ñ¢Îý0�ŸŸŸÇd2‰£££xñâEÄþþ~Á¢ºÝnôûýJ0¼óôô4:�Ne}Êö�ãþŽñæ �±2¯ÆÌ#ÏZ®3?ÓžÛu@ÍPóoÖeY^mûxMÉóq¨b^ü\^Wm¿åµÙíøÿü�yÆs½\¾¾©€~E\'Ä8`ä�Mu6¡mA—ŠTfƒÄ“Q½x*T�y°®c}}=úý~åB;ו·hh7ñmˆ8Z×§üãghÇ ¦¥-'^Ä}lÛ =.g¤X9Yˆ,0̃Å #ÊÑó³³rŒZ¦§ ¢ÅbQ€yhëÅ#="Êñc(IúvvVY ÙÕÓjµÊnÚ%ÛÅÂDöt¦.Óœ#üÈ�ÉóÃXé›3k¤Åâj'Òt:�Édù—;;;1 âïÿþïËvÏ÷Þ{/""^¾|³Ù¬Ð=ó2séE™ÅÖÆ.ôë÷û'ÞÇ ²Á{||ÏŸ?-âK_²±e~aÉŠÕõdC:oïu ‘ßVZГ<£Ñ(~øá‡�Fñé§ŸÆÇ³Ù,ÎÏÏË¥Ž‹Å¢d6‘9’�+'o«ôçæOæÀ}£Žüö÷>FãˆÌŽ•••bàÒ?ÏY6ü<Ùi³<3o(sßÖ”¦4¥)MiJSšòç^n­ß„e�§¬«3·[ç¼×ˆùùºúÞ4.Ûô®Ë¾�ŸÉ>\óMÀD]?©#ûùÓ÷& ¹ ¼‰þöaÜÛÿ†| \Pw€‰‚�ÒgW?ÎLöóþÛÇeS¨ß?øö=Žœí]+®ƒzìoѦyüMÀ¯}�<Ï~ÎsåúnâŸ,wy³ïcÉ8�ƒ)|vS{öa]§ÇÎgÞà]ylùêôEöår�Îc1ý ¤eúæ±ùxs±¸Jf»èõzåóõõõ Øn>àÄøè&ß”ö¼³É»”²,Ø÷ͼ’K-‡–ŸÜÃqZÆöööâþýû±³³Ëå2^¾|>Œ§OŸÆr¹,;nÚívìïï—ë¹766bcc#677 è�é’y9�#ã 虬³,»ðóé#è¨×Ø‹qÅ‹‹‹‚o™�OOOËÝàö<ˆû÷ïG·Û�‹‹‹�Fqtt'''•Кšç×}_]]­`™_ó:›ŠyŒÖË¢}òÏš®~&Ë,t2nE ﲩ[Ãøü0¯]Yvc·iµZµ Q®s›u�…¼¾ä']__/óNÙk±wt:9Þ;Ír` }8�ãèè(^½zUîpŸÏç1 ¢ßï—ë6�§,£ ™Ûðº\GûÌ9�bz«ë›cC…9ò»PAÞçøÊ›t˜í/cÑÙn�'ëb´Ç<åk3Ü?ËBÆ áì7x] –È{à™üoÂËÙ®ã3ï�¦_Ö‘àçÞmE©üç›°uÑæ<�H ÂQ/ vss³O&“ˆ¨^|e!f‘3cED!"u; ã#îê"q¾Æ`!΋.0ÔË‘c™-à¦%€5ã¢_pd&¤m*ŒŸEbcc£,&Ùв¢¡ïîô€7�PH9¸fab2¿X�,gîl¼Øô˜ab+d2˜ƒÏî¿ûQ×ÿÜf¦ÛM¶hQMõw¹?u YÍêÆƒH[b�peŸ+"НQçð÷öа�œƒ.¹ÿ¦¡ú<~@G½óþ±qü|èˆë\bZâ›{>MggQ¿I–\ì‡еÏhÒ<˜ñÅ2ßZNòçîg]_í›zN²ìeÊ>¢}N·‘e¸xv€Â2.áùjµZåÞg‚(ìXØÞÞ.Ïv»Ýשø¨$ºFTOÉ…SVÖÖÖb2™Ä`0ˆµµµ˜Íf•cŠŒSЖ“Gü´Þª 4˜î?»®|'´ÞÚÚŠ;wîÄ�;wâåË—1ãôô4¾ýöÛ¸}ûvùüöíÛ±½½ÇÇÇ•6;�N¡üµX\%6{|–Ý:�É÷¹3àíÿ7p0#ó#Ÿù ãh­V«ÜQÔn_í°êt:e§ÇÑÑQ¼|ù2...âÅ‹1�£×ëÀ˜’ÇÄg– 'âBÇœ4=|œ`®3Ï¿?ϲgyóóYgÓrýyæÇº~˜9 ÙA ?W·n¿©džðøÌã‹§ÜÜÜ,�N¯âxV0«:{ ëVÖ�a¹\ÆÙÙYÆË—/ãåË—qrrRNZ[[‹N§+++%X ¾×jµJðh8– hÞÐà`’ib�m}Ÿå²bÌÙ›¬;‰+´Z××�8Pf{*Ó>Ûi™Žy~\§éŒ\ä�fyýp�8ÛK|nÞç˧±LllŽý$hDöšáXÂ|>/�8׬éùj�år“ɤrÜ"åµ Q&bV89Ò!ê‚MüÀ¤sìÈA¹ó A$&ÍÛ6y~<—6ˆÛȆƒƒ6Pý�…0 …�m !ÿó¬805By1³Qè`‹¸ƒXœiÈ¢�ñÐn·Ë})€Ø!ý˜Íf±»»•ó¡#¢rÿ ÆŽ£áÐdž€•íAæ#(+=hN­l °Ààô :Ak˜˜ÅÕŠ++Rh«ÕŠÏ>û,þáþ!¾ÿþûøÍo~ÿæßü›XYY‰·ß~;–Ë«L—{÷îUŸ ¡œ-áó‡}¶³³Ê¦Ói%@‚"än£Vëê²?²f,O™á)æÃÊÂt´Ø‹°Ç�Ç7ß|ãñ8þÕ¿úWÑëõb2™”±³Ã eƬ‘Gkæ/^øQØ^@=<´3ŸÏË‘(^+ræØmðÛTv��1ègÿ_��¦4¥)MiJSšÒ”?×rpû§ì¨ âd°Ì¿ý¬ž: á¦:#ªÇ¹¹lЈ׳€sp(ƒi~¿îû Âe—Ïì£Õ�‘wêÞ7 D¦i™“Õì3ø³Ï›�ãÙù|^’öìED9âšwl󯯬BhËÇ}Ùn'q,'z9€ÃgŒ-ó�m{¦2V€Íg˜É Úâˆ;fŸ�ö}Ĺiì`Bö½ø.óB¯˜—ØÍ€Ÿï„Z'{fÑ>X�ŒflÅ3¦sæAóm;°h_“qØ0 ¯û1Îe>&0é.+++•`|ÈÜ��èÊ»gggÅ�„—˜sÆsyyý~?""&“I‘%Ÿ‚nÂ|€¡eÝbG¦ÌÛì>¨Ó…æ­ÌC6,WÙêdÇs*‹Aá^¯·nÝŠ����Ç哳³³X]]�;wî”qlmmUNƒÜf§}g\¯Ÿ«“�¬[oÒÝ̇ñþÎí‹pÛ–UÀÜN§ív»�...b{{»`|qxxï¿ÿ~%¨cb^æ;~,gÌ}D,Ö÷CÁS¦A^CëÖV·i94˜ç#Ë1óa¾Ê�ÏadÖáNÌÁ›ÖPp0Úôî¯;Æ»³,äõÖë©û]W¨×u!ãÆŒý·×7ôÛùùyÆ«W¯âää$¦ÓiÌf³²fÐÆùùy4ÎY<¼ÀS ü#>ÆÊJÇì‰ÍÂl…æ`Š�ðËà;J÷¦·pú¨,3 ´Àp³2æYŽk£M/\žE›>7˜¹™Íf¯ ¸ig¥Á\2'­V«•îï:ŠŒƒ`º;ð–£®^Äh—º0œ¬@ èxœ“É$~üãǽ{÷âÙ³gñë_ÿ:~õ«_ÅúúzL§Ó 1�b:�ÅkC€zR¦ÓieaòÎhÌŽ¨ˆ«íÇÛ§§§±µµ»»»Ñëõ*†3r‚Ï}ÌcÈIm9hTW¯�¦óI"ï9°°\. Èš�cû¦Æ ì‡lXqP%ø2ݼkȉ˜ÔgL`,"*ß;ÉàÝ@–�%’à�m©§ÿ®û}“ŒÛñgøó¹êüœ,|–å'c0~]Oî³�B÷µ.;>\_Æ}œüIýþŸ$OùŽ1°»ˆ¾øDüØåò:0ä�yÓ>³ùÆØü@€a>¿º‡ùÌÇå{,u÷F™�¨Ãº-ó ÿ3ÆóóóÒ'xÚ:„ùè÷ûqïÞ½rõÁÉÉI<þ<Ö××ãý÷ß/Ç$íììD«uØ]__¯èú•wñÝ›øÑÏ×éqË‘qvn˜Ì_x͇$NÓ>øD¿ß/t!!¼ßïG¯×+ÚÌ� IDATýšÍfqvvV‚“ÖÉ9 ˜1#ëP�ýä÷ùœ±ù]Æ]²ló“GþÎü亠úÕ:Às™ßÉcr_�åu4oàô2sÎnhaþzS@+ãCÆ©—ù>??M×.—Ë‚Á�åöz½2g$@Ów�F£8>>ŽápX‚ÒËåNŠL]^^Æ“'OJðv±XÜ®Óé”@“e×üíyvspÆr-˜7äh±Xì:¢z�刿é¿çÏë\�-Å\ùó`õ9àçÝ_^[êÆÄŒóšêö\í[·Ûp`ËÇáÙÎóº„~çÈ>¯�ëëë1›ÍŠýÄçóù<Ž�� –ëR !¥É­3r àûgÚ$ m·Û%Û€w}‰ ‚…á�è|î…ç}úáþxQ´Q–™†þx—ÊÅÅEÅ`u@Ìå¦!Æ«£õÐ5G+½P; }Yðm°óŽ7ÛÎhÛ[ ÏÎ΢ßïÇÅÅEœžžF«Õ*A;vI¡ 0ða@ok†gÌ+Ëå²’]Cû^h}ž"óâ¹fÎÈÌb,Ä ‰Ïêu�Ê;™Üæýû÷ã£�>Н¿þ:>ÿüóxöìYlooC­×ëÅx<Ž~¿ý~?Æãq1ÎèóH¦óÀ\x!‡çyGÀ< ÿ¸³a[g¨;bNVˆ G†¡g™ö¢K^½z_~ùeüüç?¯ÌÝ|>�o¿ý6¾ûî»X__�¿ú«¿*w“¡$ÉŒ�¯Ž��+ŠÞ†gjÙ�µ�o™™Íf•£³ÓiY€n¢YoؘµqB±a‘ƒIÖya¤dCÇŠ¾)MiJSšÒ”¦4åϽD4oPÚŽqNÊþCk°áíÓñ¼Ú|lºAÔ: )"*>ßТÌö¹wp< ~þ €¢ÁFü0Kƒ óù<ºÝnIN³ÍŒ¿gÐ’÷°“©Ó>½ý|Ó?ÝÇŽçvr@ÁA¢ˆ¨ìÔ Ÿž¿ˆkÿ×~<»H¾ ŸN§%˜Ÿ8Ûvee¥“ïlhÆÇçÌ@[«ÕŠn·[áÇ:Ìc>ŸÇÖÖVñ³¡ÍÚÚZœžžÆööv¬®®`Ü�¶íë®›9Šˆ˜N§Å÷‚��ÜÈXíÏ8¸ÿ ƒrâ þ6ï“ È¸¨_4gN·Ûírb ÷ù˜G ,p\"´ ï�v{Œ…dQøšUê€ßÇý {–{~,§ËåõÉ/–mxn<—þCtÊææf¡g§Ó‰étãñ8ºÝn+|¶±±Qæ—“Hr¢/¼0›Í^ÓAÖƒøäÄq„tur7zñââ"z½^¬¬¬Äd2‰N§SÁÉ�ëqcƒÈúÀ44nòÑGÙ][[‹ét'''ñÝwßÅíÛ·Ë}Ô;;;%iš1ùtÆe€Ü'óp0}dùwDÏdŸž@˜õ1ã1í 83þ³³³"ûæMðÞ·> ˆ†üÁO^gÐ1Ô¾O»ïÈ¡1*Ú�.– ßqÒívË‘zNRÏ}±ãÄã¥Æ;‘dtee¥$öúTæÞýu 1'þŸŸŸÇÙÙYå.uì€õõõ˜L&Ey-óéF9?÷ƒ�bÞ�ÃU&/k óÌä°\°þsõƒÇ�í"ðÖ/^ijgÏb>ŸÇÉÉIÄééiôûýèv»1™Lâèè(&“I™3cÅÞmK0a0Äx<.cdfîà9hn›Ë:ÐA&Ú†vl(AÖà¯èvãÜàÄ>Ý:yǦe©Î4†h|ºÕº: “Œü ïÑ~§Ó)úÆqh‰:éÃ6œwÿ8™€ñ¿“ɤ¬¥È”õ½yÏr•�¤ët:±»»üãc4ÅÊÊÕ©d³Ù,&“I<{ö,ƒAÜ¿?\jƒF”, Z 8&‡ï 4lmllÃÀÆÂÍÖÕœÝÁ€aj¶ªÏçóbÜxwJv¼ÀÌùíÉ6“3&›0?ÿÙ9¡YÉÝŽ·õæ6¬TP$(f _¿ß¯([‹6rô”ãêaQÁ)p0Ó¼gÀ ó/scãÜN¶y²)MiJSšÒ”¦4¥)õÇÊEÔïš±½›ƒ ÙÆåÛ_[lSÚ'âÝl£ú;>sßêúœíU¿çgìÛÕ�R7ÑË fîK]»ùwAÝ/7¿y2?ä1x3Fmš™W‘«l›æõ2"*k?ôftr0Ô‰ñè@øYÖ××Ëæøi4ÅÁÁA ‡Ã˜L&ñâÅ‹ØßßÿÓ;�²b¨St0Oß³@¯­­E¯×«ÜÙ‚‚Œˆ � !´ +ˆÀ¨Á]˜Ø»'ÍýÊB“ðö_˜€£º"ª»—(3j6Ü0l}ž³]è«ÑLwGsmBGƒÞÎ`< Ëå2z½^¼|ù2ž?|ðA,‹’¡äè>ókc+âúLfh�wÈð½#°­V«ý·rÉ9óijž+úÂw>ê�¾8ÛÁÃI`Ëæ‡~wïÞ�§OŸÆù/ÿ%~õ«_%h…trrRζÑfAæsŒÏápGGGñóŸÿ¼Â V0/}ƒ§˜k0-wu²Òj]g)ü°Áçè¹wÐÚŽàÎÎNÜ¿?âG?úQ¹3êÛo¿�—/_Æ�;wâg?ûYé/;;;•6½ ;ði~ÏcÈ  }# ‰UG›Åâúe 5òŸmèb”™O‘ó¥º(c/D¹XwÖ}ß”¦4¥)MiJSšòçXþ_Á­ ÝTlcfgœ¿ ÚæäûfÈ2Øa»²®O7õó¦g xÕgÞôwÄë õØ�ÈcÉ`tð³Ð’b›Ý`)ö~DT@ñÁÖ××c4 pƒ±à‹ã7ø6�±ëí 8å}|6û8ä}Ä5}0XĘðÉìK9Pd¿�6ÉÐ&–¾`!ÃØA%i²ÚÉvpƒÝ&¾ÐzgKN¾tß)/ÙéÂ.îë1¾°ººÓé´d9Ÿœœ”]$$>:°q}´^ÆJŒ³vr e/ó›ÇÇÕ�ÈæÏ<Ã4®‚?ošÃ[ö]³ìCWóµwSðØ'œÌf³J È¼ì¾û˜( SNÆÍÁÉÍÍÍŠÌßô…];ìÀ¢mÚp�˜ñf@Ö}ìt:ÑívË÷Ð^?==�wß}7:�Nüáˆ/^”]Oãñ8ž¾’] ÌSžYæ =Ï€f�ãàB] þ„ŸÎÎÎâÅ‹1�JöÿÙÙY<}ú´Ð†]]1�ív»¼»³³S¹Ç+¯ Öq<ƒ®KË8ý÷‘lž¿›8¬§ýYãùÏÍëGç€ñP_>;�æ¾Ô�-ù¤,Ëå²²(QPŒ´s~~^á81í|,AÞ’ÌœñŒÏƒEQRGÞvl ؂🞞–óó"Åÿçç籿¿~øa<|ø0¾þúëøî»ïbss³œX`ÎÏÏc4•ÝqvìØ]^^ÆÝ»wcoo/†ÃaÌf³X,ñêÕ«²ýg‰^vVá§œÑayÉF ¿ë”¤ [Æ��lzfCgå½÷Þ‹Ñh'''eáyôèQ\^^Æ_þå_Æîînáݳ³³bÄ@'ƒ“eÚÑ®åÀJÔÎ@»Ý.²ÓjµÊÎ&deN¦[�tbñ…O©cºÝnWxˆí¨Yþ<^,1�N+Æ’’ì„6¥)MiJSšÒ”¦ü¹ÛGþÉÏD¼~O]]Ù¦Ž¨‚ÏôuPûÎìùݺþåöÞT *ø�Üï:ûÜ}°½Éçö­í3àËàÅÁ™œl™Çe ."ÜÚ% aß`±XTŽèqðEiÃüá AÖÌeÞÑä€�A©ì7ez8äsÏ��¼�—ès»Ý.Gµ»ÏŸ>šŽ]¼Ëûø¦`(üÝív+ ¶³‰Íãž“ˆk�‹y³ß 6ÐÄû øˆ$ß)ã+Ð7¢zç;-L?ó��àŒ؇36cþdäp§§§åº„••«£x:�Nôz½Š¬¨ãqæÄþ¸“j駯 ßðÅññqD\Ý]3�N‹Oêq�ûDD©»”†Þ­VëµcÛÈwvv &Áñûð-þ­ƒ¸–�;"*xu1~æÕü u»Ýrdœeþº}ûvüä'?‰¯¾úª`uËå2>|X‚#[[[™‚N vÝà�`5èãpóƒæÈ¥ƒ´uc ý:>68 =./¯îmâ>l@÷ãããøê«¯b>ŸG¯×‹;wîÄÖÖV% &º±±1� ¦‘å%ëpË´Al°\æÛ»àòõ®ùÈ2ì`~Æ? xgàÝõægøl�±Ô­‘Æ]àïð´¼s¡ <ãÀ•éaùæ:RmØÅ“wsBsßéã $ œœœ”»ÊŽŽŽ*:�uôôô4NNNâðð0Ž��c<ÇÉÉI´Ûíxÿý÷ãã�?Žýýý8<<,X%�†^¯[[[�ì{Çyδ5æœm ÛMyî­¿�QÓÁG‹Bwïèòœ£Îø¨m Ç0xgÝ0È»Œ™ye¾|Tª×!ø"Ç2&m�@m£ÐWoâðû¶™ò�w�Çã׎zeFö/..¢ÛíÆÖÖV–ÏNOOKà(Û• HÇ  • l+MO�ìt:±±±Q¹€�wQÌò+g¸œ©k�'+"ï˜ñD˜y™$ê¨ír¹,ç_:È…Ðõ™ñx&â7­PêÓÐÚQNïŠ1£™AÈÊ‹€kh`!<<<Œóóóxùòeúè£8;;+.èÊ\9ã Ac^ÌÔDXp �k|¾¹¹Yú,H^ø­\0ì0žœˆˆâhäyfž8×óÓO?�Ï?ÿ<¾úê«øŸÿóÆßþíßVöN§ëëë1KPh8FÄõY¤Ì³jDeWVVb4•ì!óZ>ƒÜô³ñÎ<:ˆÆØ}N¶yÀ´ò}\VBÞ¡•�>­÷ß?ž={/_¾Œ“““xüøq<{ö,>úè£øéOZaS{{{Eg³Y1z‘wóI68ÜvÎò°óì ‘�|Žd±ÞÜÜ,A,d¥‹^BÇÑOU6©Ý7ŸÏ‹Cå,#Þ?==�ñx\Ù2캛Ҕ¦4¥)MiJSšòú®›7^²?g5ûCÊd�Áξ?ó©´e°ÚmßÔ¿º1øÿº¿ €Ùçñ2cúåÀ~c¸)I,ƒ|¶½]oÚÔÕ•ëÅ׈ˆÊ�Fø·öõêpÓ¾nþÝ~ž#óAc샺¿öGè¿éàyr œfð“>ådYhè�.`øÜW·Û­øˆŒ…d7üãa™÷Á:ðyÏS|\øÉþ}[,•ûT|~À)Ÿ1÷ÐÅ´4móýÉöç�­mpÚ²c:Øçõ]7+++1 ""Êî>w"«ƒdžo'z§ ceLÌ!}Æ·b×~c·Û­$M;h”“r‘shÇ|�ìÊØ¹""ËïQ·�NóŸ0¶Z­‡…/'“Iá_°¬¡‡L;뇃ƒƒ¸{÷n|øá‡±¿¿£Ñ(æó«ãã‡~(Çþ`fŽÍ»øî´Ë˜éA#è v&�¡Ìó3ð¤0ÏÀór¹¬97Ÿ_��³²²ãñ8b>ŸÇÎÎN¬¯¯Ç;ï¼SxÉ�ý^¯Wøèìì¬êp¯YæêJÖ‹ŒËßùÿ¼fåvr[~zy]ÎÏÀƒÆ ÝWcÄ9På¾x�ñ|¹>D¼ÊãÊíñÛIËüO0•ùË�YÓÀ�©:úÑÏ:»çìì,F£QÆx<ŽÓÓÓ˜N§qyy{{{ññÇÙ9;;+<ÌÎ%î73†ê6-¯¬ÆÆ‹ë«NŒ]g»Å¶ºÁsoáyÈ6uzýwýטrÝZS÷|] }눿g õnv;ðu1Ncä7ÅXòxyÎñî±tذc»„ù¢Ýn7vwwcoo/f³Y‰�œžžÆÁÁA…_;žÎÊÕF˜ f3‚™ŠÅ–š»Œ¼ðºß!À»'“I…À y¡DÙrè¬3l%q½w1ÓQ§ 0ß½q½{ˆ±çmb°¡+u°pЮ³ <~ o��ÿ­ m´ tív;^¼xQ˜áèè(¾ýöÛxðàA™[E {ïj²aj@ß}„¾6�2ßÀKŒšøûìØ5ˆg¼¦“ûŠÒõûc”LÈ PXåzíÏæÀ‡�s×çv ~ºO¹�7ûj¹o Ìs_êÆiÿˆñzG�Aø ~Ô�%f{8‰Ù¯ÈG&tç}_pn¿Æ žÁg%çÝT9Q�~Ä÷½/øþœâLòÌcŒÕÿãc8³™~ãSšÖé#®ýûˆ¨œ†Òn·ËÅÛø9ÐÑÝãgЧ̯¸Çã’ó•••ØØØˆÙlVyºzŽ€3� +óáÝùyóI�ý½ýE”_íWºÝý8žÏº€¾ƒi9×Ïd:Óèå`­ù5"JàÂ4±¿ËÿÈA7ëË|Ön·ãðð0úý~¹Ž`0D¯×«ÐŒ~;Pq�•Àÿön4ìØ2°œçÖ~¿ù�2XÉÝ»wãþýûñÃ?Äh4Šííí²S‘{Xþ�­9ILÊÁ.䓹AÉ£9H�e©NW:hä¹ðÜ@KpN°Š^¯ÇÇÇqrrR’¶9‘œl }ʸÁ: À—oÒåî¿qŸôv@Ìz̲˜Ÿõœçù7è�×-¿c¤}þÏktžëˆ82êzs`Ú¼~SàÆß�/³k�£=-Ó¬Wll ¬ËeãtgþÁÉ ôx§ÒÅÅEŒÇã8::ŠÃÃò{m<Ç`0ˆwß}7Þ}÷Ýèõz¥Ÿív»-Ê)TuóAߌkd…ïØ°áàeÝØ<—Ö?ð"k1º×kj¾ãœ>Zç×ÍU楈ëMôÓuYWÃùX¸Ìkèø"놬r3Oó¿Çgyòºëþ€v0�]‰Æîm§ »VWWc{{;ö÷÷c8Æññqlnn–»Ž\*A#‘,T^|Ýi«^(#®@Ô^¯WEXx?" ȼ±±Q¢ŸY`md³À°Ðûx5ˆDÝg�ša¬4X¼1 #®AkHYIyÛµ'ÁÏ[á"fX3RÞ¹“ƒMô™…�úé#‹5‚�þb±ˆ·ß~»ìÁø¤�lä`HÄcîhßÇ x‡ÙV<(/T™qëk™æ6\ízA³�YèÇãqìííŃâÑ£Gñ»ßý.Æãq‰´Ã;‹Å¢H¦ÓiÙ}ÄŽ!ÆÇxûÛ߯‡~üqˆ‡qqq·nݪœ× �óÙèèê][[+»×p–¬T‹EqæôbÄ#“1�Ncmm­dµZ­r|¼”�‚¦4¥)MiJSšÒ”?çbÿ,Û´|æÏo*u@¥AêògØzö7 D¼¾Ë¨2ˆ ñò` Ÿ¾Ÿ¨Î¯ÇŸ&+�@EDü„ñx�ß4KT4¯ñu;àáïè´¥.0Ø) � &oá'•òžyË­wªÙ—4˜ŸÛ�öççç刯étZøp¹\–û­8Ú͘ %ï˜ƒŽšæ}ïB1.FÿVW¯î„Џ:®ŠþE\Ý92ŸÏ‹ßl٤·ðç8Aã™ÖÝ–1þ7ÀcÖÖÖ¢ßï ÿ»ï¾+ø¸ |Ç}Ûøít:±»»[Áà•¼.å~1Æë±ßõ)EnÇcö|ó�ù¦£Ê{­µN³,çuÕ?uA·cf=a¬8cݹ®‡>Ÿ��Åùùy95‰c襈(òŽå¾,—Ë"s´‰®a8­×ëÅh4Šõõõr”XÇÒ½zõ*ŽŽŽb2™Ät:-w¸òÉ'±½½]t:Á§~¿_tòåM È kŽ d\Ë ãžGêuÀ("ÊZq�qûT&'qÐV2e›Ì¼‡�Ç|ç¿­£=G؇¯wíØÆô˜ý¿åÒc®“há /üí|ä]ÖÇ0Ø”Ãóû,îÞ½[Λf¡Àɱ±âùµìy·êÌ'œ‹ºL./Ö~�íþô=g¦!gÙØôèQüñ�Œ{÷îÅgŸ}VÞãÌKÆÖjµŠrºuëVÉ€�ô }ÀùÜÉ¿åÞíeÃÞ;99)‹õÖÖV¹ß(¬y÷²¸³³S™cBÞ¦~vvVŒG,}&·e—¾õz½ò9Žm�œ7¥)MiJSšÒ”¦ü¹–º€NþÎŽ»Ÿ­{î¦$« 2áDg£øËÀ@vþo*À£~^°ÕÑå¦ÏyÏÉWy l`o»=Óð&P�Ÿ ¬Q bg ;ûâôž Göñ³�,jPØ ¾ëwûuógP�¾ùsƒ©ut1oe?'îö� IDATÙ'rÂɯ×wñ ƒ˜N§@@;ÏOÄ5p„oD»Œ�ÐÔ;¸øq¤VöÍÌË b¨ Hg`טAY·éÓ2ŒÍàzÌ/`BøqŒzp—¾¬ç•ù6¾�™£Ì»î3ÏùóÅbƒÁ [Åñn>‰Ä‰ŽÌ™ùÂ< @�¹Ùßß/XØîîn >looW0ø�>Ãsb®õøþ÷b±(�x^r`zd¾¸¸¸ˆóóóèõz±¹¹gggñÎ;ïÄþþ~|ýõ×1ËN©[·nE»}u½Ã|>�N§S ,2×`{à=Œ‘À&þ8xC§Ó)ë*�.ïbÊ—Aðü¿çý”wº ƒÊ•/}W÷%ÓGè±³³sã:’× xÃ}Í'(7…gëÖLèêds÷ËzÈ:ÒzÜ´tâ:Ï¡'ü7õeº;xk}ož›Ïç%±8'µg;ÂíHñ¦ø„ï¨üÎG�æqYç{ÍñXLWx¾{—šÍfqzzGGGqppPþ‡Ñï÷ãí·ßŽ·Þz«ì$:;;‹étZpËíííÊ=aè Ÿ/²Àéàfà�Șiq}ß“yÏr€ìyw�NÔa½l�šƒy¦­çßöž“¿�£cýLÆW-ëæqÛ9ð§Ç’ׇL§¼Îšý |‚c>½Ì;¸T³ ‹nbΈµØ–â—JÐ(Il€åAà�‘|²Du& ¼Ar&€~y—c7a™¨<‘Q&+RÚ#ÐਭBìNˆˆJ?#®è| mùh@+\ê"Ccww7VWWãÉ“'qxx»»»Ñn·Ëý;V^Ëåu´¡²ðò›1ñžƒIZo�Î�/þöÖˈ¨Ó0øÊÊõÐdQ1Ÿž27ˆÆsÄÝt:��?þ8vwwc0Äûoÿ-þ¿ÿïÿ+ÉêêÕÃ…p@S Ù/ï½÷^ìïïW2j`ÙØõÿÐÔ;œP¾¹ÐÉã„®^°½�Cû¬Ð¬ ­ØÚí«K4¿ùæ›øúë¯c¹\ÆOúÓØÝÝ-YRm½^¯bPïìì¹]YY)A%úë¬ä ÞøãHKê Sj>ŸÇÉÉIÉÄÚÝÝ­dÁø¨<_g'�à3ú˲L&ü�Al'Õ =†ß{w‘·óÚ¹iJSšÒ”¦4¥)Mùs.ÊPl�Qì€c{ÙžÍufÿÕ@µ�|Ý=îƒÿÇöÎ SîÝø²¿h;·å1äÏ3HW×ÓÄ>˜}çÜv‡Ïáöí{d¿Ü}¶ÊI‘mÐâ&pûß!ž3ðm<‚¤ÎÌ3o¢qö™ì³á:±‘¾‚쳿æ aü:€ ý}r–3>¢ƒ>u'¦d`•ç©ÓÙô+++儿_3"Šo…í@…ï�eŒùè´¼SÆI ð‘3¡á'626|Y& ê;ÑÕüÊóÒÀšÀU¼ë _ÿ8Üø:È´üÐ'ó%»x¸“™ú§±>Ëw‰x.˜OZáU‚}ìZ2O@7°Æl�ÜþÁ§Î¼Å¼xçŠýï¼ ú[¾áê~ç�wâÞ½{±¹¹çççqtt»»»ñÁD«uHY,•++ÌtÁ›ŒÉ:€ýD¼èòò²$¤’” v€¼d}ã £ûe^Ș(:‡À0}'0Ì€Ÿ'“IL&“8::Š“““’ˆñÞ{ïŽ{÷¢ßïìt6›•Ó“À¦ƒAŸ3fè ˜=X*|è;z8‚1³må8Õ;í³}‘ƒMNÀ·]ã9uX´KuÉ þß¼V'™ÿs^³Ýâ¶êøÙ�[ÛUæÑ<^÷y}}½²û×�a÷›u=ß‹¸¶¶VÙyéd ÊkHfVê&’'ð&òh@ß‚bÃ�Îpö" ÛÅÅE¹ÀÏÆ¢˜.(]oo÷¶\.Ën"hÔëE˜Éô¢æÉ²CüX.—eñÏÆ‹ 4Ę´áA±’™F±Ñà-ìÐúæŒ3;÷ÐüêW¿Š½½½Ò32}!0ÈÙ—0†L~Ï;øç1Ï`¼z·;³"¢¢`ì:£ Cšæ,»H‹«m¥[[[ñöÛoÇwß}�?ŽG�Åþþ~18Cãd:�–Œ¥ˆ¨lE….L14¬Qš9³Ã4ôÎ /h® ÃÇõfGņT]°ˆy@y猱—/_Æ?ýÓ?Åññqüä'?‰íííòìÚÚÕ]Mý~¿ÈB»Ý.[]×××ãää$VVV ˜{¶±3wQæy6›Òoh=�Nãää$./¯Îòí÷ûºÐ.– A‹Å¢è„årYPÈ;%g¾Ø¨ÉÎ;z�»Âh&@ŽŒúÌò¦4¥)MiJSšÒ”?ç‚�–�Z;éu W •A ÞÍ`%Ïx·~�¿Ëû|f ç¦àCöÝì«Ô�RuõÔ��(™&uö©é˜i÷¦:ò|Ø/u?óß|oÿ¿Ûí ŸÐÞ¾Šý» ªR°ç#¢ „0� /dð±.Ù´å=ü,ž×Äuà«ÕjUŽ®¶Omzg^wð šçño¼£b2™D·Û­à&¦[žG€ýÌGÆkè—ïju�€»jø__‘9f\ôߟg™ã3@ªLgº"®ïŒÎ< ?AwÆc?Üš(sB3ôìv»…W�3e<Ú‡0?9Ј߾ºº[[[…oVVVŠ? žD;NÚ5�xŽ>Ù&¡³Õj|PúÔ±\1~þgŽ#¢ì„aç ~óÊÊJ¹cÈ8üÀÉhœ!Ï©D`-`÷îÝ‹û÷ïÇÎÎNŒF£888ˆµµµøéOççç% F°¹¹Yê#y¬�€(ãr0^°ÜB›ù|§§§å>1ãUžcó‚åÐX󊼀Uab,ðúÎmÂg`M>­)ï–{¯™–')ác¶®Ã<ãs{umgÚÔ­Å܇­WÌ?îo�Ý`,“âw—Ëe¡³��£]øŸ¹õ“¯Ì=úú˻b}$º�ú<®ÌK¬1`d++WÉØ£Ñ(NOOc:�Æ«W¯âää¤rÝíÛ·ËIRŒ‰`ÑÙÙYG«Õªâ­C½¾åùÉýóÚêu�9ËkaÆÔ¼>"O¦·ß3Ÿe¼ÞA#ëxÏ?Ï;)Á¼j;ÍÉ9Ƴ,R'úÆ|B}ù.t÷­·u<ÂÏÃK>J£¿Ms¿cÚñ?+euu5z½^looWŽË­<ãêŒeXfrÆšÏç1 ^»{Ä‹“F6ƒa`ÇRÑiO6}B8‰ø;PƒaƒpBŒ¼°æìŸ‹š �ƒE‡¬1£Wø¡üöqZ0 Ƙ…ÏGûaĘÉløši³ÐAçíííØÝÝ�O?ý´0Œ•ï¹�ff jèG\;>Ž_ÿú×ñw÷wE9¬­­ÅÑÑQ1:ûý~ŒÇã˜Íf•€JšGÃá°Ði0Ä[o½ãñ¸’…ãyñ"m?;{–3þ·ÂóBZç(Z¾í¼2?Z§§§ñðáÃxúôiìííÅ_ýÕ_•@ ;°"®ÏǘdAl·Ûe§ ·Úg}À‚ëÈ:Æš·é�Çãbønoo—ÏÉŠ`®xϲ·²²RîJ›L&E6øžö¡g¾„ÙGp,‹“�¡Ã€Å@w`Ïm6¥)MiJSšÒ”¦ü¹—:;µî™TÈ X# Ù΋¨îþpû|70�íÆÜ7ëù}û¡îg»m÷lǺ® LRœØè$*&rÿê mÛ½‰.¹Ð.‰bø·$QúÈ(ÞË` ¶½ig0°ßï— ÎÆÆF?@0ûÁÞQa~²Ÿê ܯ¼›b>¿>òh6›ŸÈ ¶³¢¡þ(`#à$A£³³³J¬AS€u‚æHZ]½¾ÖïKÀï&É×àçl6‹ˆ«»w+ñ©Á:ÕÓ™/ßOm•ñ̇_|gsîKà¡4´oæ3 Â⓹mï–p'Y™~1"ñe¡!þ ùɧ}+3q}džIôÇ;bL Æm –ï�µårY®p Ñét*<‹|‡€'×ÖÖ*W|{Æã�‚Óé4îß¿'''¥Mä‘â“aÌÿççç%Ñ”ºyŒªßïG«ÕŠáp‡‡‡ñâÅ‹BCOý~¿ðâúúzt»Ý899©í¶ÁÜÓap�ç8ùL‘=>�Þ¢¯MÆY2H V±¶vu¿ßÓ–qxÒ;M<Æ5 ü[Wç€ Øø›Û%e #—7�ÜN]Éô xL½è{ß[e� ®‡¾v`ËA¡Œ�R/}DκÝnÁ¸2í¼ãä´'äˆÓhÜ¿ˆëMîr‹Œy#‰Þ€`ž1O‘¬<™LʱtËå2ŽŽŽâÖ­[ñññÖ[oÅ`0ˆˆ(;ŒNOOãüü¼¬•ÜDß}:É3ãB?|åL°»Ì;–…¼:XëuÓÁÛs>вÇ>޽½½"+e*ÆF,Š2÷‘þø®/øèää$Ž��cmm-¶¶¶*çCw ?œ4ž,+,–ӳ³³r¦´g[yAâÓu}}=:�NÙÅÈ‚ mÚ�oJSšÒ”¦4¥)Mùs/h3èäÏ @Õù¨l3~²cŸƒ ؤö·øíd7Úů0¨``Ç@@î/õ1ØVgÓG¼й�ÅÙã¹`oßDß›žgœ¹ìt'„Ù�p=üÆwÎI™ømø5öuëæ €l_†z ™�rÏ-ßg`¶nŒñZö¹Ÿ2?f_…¶Iªóq?ø+ù8s€ E�[8°F?�ˆg~¡ÿ¸d.ò|áGQ'¾5¾csö2%ûyà5öÁ�QÎj§.Ï9Ç•ñžû &@¿2ÀW7Ç(A3æ—>ñlÎ§î ´Û'wà�y›Ï¯w–epÛxã…/¨×ÇØmnn„1ò>6u;ðà¶½kßÖ:Ò´òN(|üíí툨—ϼƒ¹t�†àgŒ'" pyûöíxðàA|ûí·å¸½¯¾ú*¦ÓiìïïG§Ó)÷¯¯¯ÇÖÖV Bql¢ï7Î×jµ*GäÓoÆê`Œå]P´  ÷ð8XÝ:ÆóZ7Qòn6˘[^ËÀ7Œåf°Ý²ÛjµJÐÚz«n ›ÏçµwØ0Ž,ONh7þļäuÚãpàÅ ¸høàƒ ñå—_ÆãÇ� -GD”wáúã~À»­V«\ÞH¦Æ9ÅA³¼ØZ±dC…€|Д›ƒ²VüŒÁÎŽç8âjçЫW¯âÛo¿�gϞŧŸ~ý×+++å¼dvu»ÝR?bô“9kµZå-+¤ˆ(wùŽ#_dyxx£Ñ¨Œ;Ê�…yss³’©?¡ ! ØÙ}> ‚÷M?øt<Çp8Œñx\¡ƒÁ vww£×땹ñ»ä`ŒMiJSšÒ”¦4¥)M©:ýù1”í*|SûpöÅhþ-YÕ‹²OgÛ<;õ´Cß „8È‚™ßÁÞÅײìñ36¿²@ Ÿ¶ó ÎÙ_sÉ`¢mu|f'J0Ã÷Ï�ükÆk×ø‚=Œ5%>)ÌPj2™ÿžÄGÐì#Óû®øpØïrè?‰`­V+ºÝnDD¹ï–~.‹âã8S ,"ÊAcøÎ¿yÛüâìa€|ŽMƒÇè?>&ý¦0vAYfø1ï3OÜkà]’vÇæ±û‰þ;ApŸz–p cò’Ì a6nÝ_”:óçh³/h`šp´ ÆŽ£åV«U"êþÉ 7󉱓³0¸ˆò“O>‰/¾ø"Z­Vüú׿ŽÿðþCe«%scƒ‰9pdZÆææflooÇh4Š/¿ü2F£QåÒJó…[ê1oRìŒ:;Î «Ëó…Ò÷±žßï¿ÿ>¾ùæ›XYY‰_üâ…Ÿ:�NÇææflmm•ù­‹¬sIåM EVÆÈÎÇÉÉIt»ÝØÙÙ)ôaÎ|v/ãóy×àm2ÝhÏ‹Œ•%ýbîiãòò²8£ð3F�ërv }F¡—šÒ”¦4¥)MiJSšrs’ ßùÛÈÕcªl'ÚFä÷M»­p2˜â>Ø7À` 1,òXr_óøì'ç|ï@�é÷&?òOÑØ}bãoš2]ÀD tM§ÓBža œh²\^EpÇ@œýY2Ü/// ø¹X,¢ßïß”`D»ÝŽN§SŽ.c×m³an f¾²ÿK@ ÿ‘ºÁO *BwüRæ~6›•ú,õx¡wè ˆœû€§‘À×,Œ�8„D&3öãÝRÐØ'9PÓëõJjkk«Œìþôô4úý~¼óÎ;%Èç�?Ž���x÷Ýwc2™”»]˜ó;wîúå@ ;Ú´å{øÌ�’:½¶`¾´Þ¢XO"7è;Àgh�¬�Ìê 7í�+¸nþ6È<(ët:Ó`.œ n>ð=åþÜ`¸×뤼>d,Ò:„w�Wì7ŽcýS·6Öé@ë$¾w2E”�å8© �Ñú•úàÍyÒ‰ðCDïTòv%Aàr¹¬c“ZØmdŒû»œ¡‚ÂöxÌ€üöÙ¡6�xÖt‹ˆŠ` œXÌœià¬$”)õ˜FaPŒäöl¤ØH%›Š¨. –w.Ù ‡Ù ‚3'( ¶Î;ÎÊÇÑÛ,>Ž{÷û?þã?–{�è¯�*ŸeÊY¹Œ½ßïÇååeÇ­[·â7¿ùMüßÿûãóÏ?�Ÿýìge˜•üŸyþì<˜/è2à’•‘yÈÁ ±ëëëñìÙ³xôèQÇ/ù˸{÷n<{ö,úý~ôz½8::*Î:^ÀèY,qrrRôzƒÅ^Ç@$kc8–¬ŒíííÒFÄõÑsŒ1_Ø ?xñq€0+wø�þÀç\"mºÝnQºÎ”B7ð·ùÐ:ú£³ž?MiJSšÒ”¦4¥)M©nì¼æÏëþ¦Ø×äÛa|gp ד0'y·õÚw¿œXè1Õõ×îSrØÎäû:€‹º ü»�LÃ:Úe¿ÃA3ÛÞ9hc@Û¶ƒ+ø:Оý'bºÿù‡>º®ìë;é3û‘Jü¾ý,Æ“‹3ïñ7y6é“3¦=W…�ñnàÚód_&âõ£Î2m VÁã|ç,nê2M]—iàú ��XæßtpŒ¸Xøy·>à»C|¼ýÃq¢.ŸÑ/v­à·`¶¯Œ�{vvö¶”³Ìi‡ K�|Q,S—³lâ#CGÚóÛ 8Fûðœ1+t˜û€ŒQ¿ïyr"ÏÏÏc8ÆíÛ·#"Šïl™ 0>ã>Ð6ó°eºÛíÆíÛ·c?Ë<ÆÓ§OãåË—eÈp8ŒgÏžÅîînìîî¾vúÿCo'¥gýmÝbœÏs ¼Xw京/L³Ïôñ†ð'ï±ãÓz$ÄN,Èsa>âãüoPÞóžu"Ÿ[ñø)Nô¶þ‡f9 Êø2~ê÷³~7o|/¯cæø�ñ 7–1¯�î—× Úd£…79´Z­§¯®ÃíÔÙð)Iý>íg<ÇÑÑQÇd2)×]ìííŃâÖ­[%°@`Õzž~õûýÂÇy\Y&™7æŽù÷zý¹ë¨N:^`¬“6ò=s—ég>0�ò7ë�qS�ÙíeÙ¶Íá{Ðs£],®ONË|šùk±X”ÍÊÁ7嵋D‚���Àã„6oŒÉ6±yÞ'°å ÑkÇÓÑ!”»;eã¢ó·wÀ„0ÏY`Yø­m�Ég „ñý!dŠd€ ,.‡þõgÑfK6JŠI÷¢Èî †ª·—9‚j£&7Hí¾ED ê�5bƒº:Af —�ñ=@»Ý®lá}þüyL§ÓŠqÀÂjåÀY¹01‹´£íldàôŸyt‚ ¾ƒ^6p«u½}š±9øÆ¸‡wyKBÅå¥ï½÷^ôûý8<<Œo¾ù¦²zÁµð®¬¬Äx<.Fî�;wÊŽ©‡ÆúOÿ)þóþÏñ›ßü&&“IeÌ90d§ÈFs^äë PcŒ5;Vô™ï|Aj§Ó‰Ùl�=Š?þñ�qëÖ­øùÏ^da>ŸG¿ß�v»[[[娔rÅ|MiJSšÒ”¦4¥)My=C;Þ�¨fûyÛŒug™’�qÞÁÿòç´‰?ˆ™süŒ}Lû´ƒ/žûkºdZep«Žæu65妒ièwñ/œ´ˆ}lÐÈö½Á{‡]o\!ÿx^Ýoö£C} IDATûÛyÌ,µÿPGƒ3Ôg_ÙßÔCЂvyÖ;Y2/™Ð"ƒ¸9ð”ß¡ƒÉìØ€o¨—º|”Ÿ9IÖ Ï9(ïoll”÷ÁqÀlè?xc¢Np$ƒçzØèõz…ÏtpÌÅ}Z.¯@Ü{Ã(ŽŸË»Rè³ÿ®Ãi²ŸÎ;7ƒÌ£æ'•~€_øÓòâyð;3ÝÁ܈êÑgžWú q�$N&“2_ô)ƒÏî�PÚ3žÿ.—×'ñ¬¯¯ÇÎÎN™Ý»(òúè£øæ›oâñãÇÅ_‡ñûßÿ>þîïþ.ö÷÷ãéÓ§eWÆp8,|‡_ïl{xõòò²$ÌE·Û­ÐËø#ôÏs޼f`YͲ ïA#ó/8h>mÉòfÀ]bÝGÛàS9¹…+(œðO¿Ìû`g™¦è׈ê@_ü\];y½s{·�ÒãYøÄàyÖ©yýt`ÆóèµÚý·®5NGa84ue»ÅA2Û ^›Ø0Ý�Ï•••8==�ñx¯^½Š§OŸ–»‡8ñèöíÛñàÁƒØÛÛ‹ˆ«õw4Åx<Žˆ(w¬³q\‹þÂFg^ÎI NʇÇÌk´S5Í3¯dœÓ<Àü9¡‡ç,g7ñCƚݷlòœÖé~{J¶Ec޽vB?î-²~pÿ3L±lY–s2ýé¿ù4"*;�²�üÚ�F^ˆ%äO®' €bð™ë5“ñ®ceLÄó‚Š"tPŠ>y’=IDß=fD”€3ºøÛ æ±Ùqv€Ö0†•�#Ð娢� ”3t· ;êñ²¨8@c¡`ñ¦¾L?Ó-éY@Èðaë2ct–L^Œm´N§Óèv»•;–0úò�8(:¶©ûø9ªÎ q?¨‡çÙñòÖ[oÅÝ»wãåË—ñ�ÿø�ñoÿí¿�ÝÝݲ‹…]'Рë×뽄³¢�ˆ²­š~Ö9læGÆÏ›'¼pgEž•cV&ð¨����xñâEÓ›ž‰¨‚^üd Ôö±ß±?ã:±/ d€*÷5ÿmÐ(·í¿í ÔÙî®7™ö(øŠ€Õþ»=™¦� ®ù™Ä¢x§‘�GƒTN¼iž t¸9fºúǾ¸w9Øo`Þ3€éùÇçÉGÜáKÁ7áÅ{ö㌧¸8±ÐüF;|n 3'÷š�ò·}v׆?|yyƒÁ d°ž12_Üï´±±ñÖ[oÅ�;w¢ßïÇp8,Ç´Æb±ˆííí¸{÷n©{4Åb±ˆ½½½ro´‡Ç˜Sc+úå±d:#« DܤËë‚.È5ø¼` /cGÆ"<§ðº€TлÆßr0Ècñšf,5ërÞÉcõå6üŽõ@>½Åz+RLÛ¼Îf›Ác�†–Ѭ7³~tæ�Œe<7Ð ‘s„Ò€4ïy¤^ Ÿo2F08åâ<ÇœaãŇ>:SÁ¤xÇ�#nf*ú”�Æi†çoú̘<îœõã ‘3D¼ÑG”kÞ)DP…ßÞ]áÈ¥…ùüü¼d|¼zõ*ŽŽŽ*ÁÚ5syû.;Ih—…ˆÈ5—9ú�ãøø8æó«Ë1ƒAÅѲ^¹É80½lHœžžÆl6‹ñx/^¼ˆããã8::*ÈÍÍÍØÚÚŠ~¿_ô %óýp†�w"Ùˆr�ˆoÐç?üáñå—_ÆÇMiJSšÒ”¦4¥)M©:æU@Οg�Û ßGT5ÙÍ�K~Î@´}MIü|jm³Ö�ùù‡’A8˜9s4�Ñ>oE Šešæ¿ù?Ó8÷×v³Û"q.âúd |!‚Fùx¶:Zåb Æà”ƒ¢<¢~'f;ÓÝïÖ�zø9++W;¨ Isø]æéœ¡Mý9æ19û;÷Õ4¹)°—e,Ó›ÿss¦s¦yÀê„cN“hµ®ï؉ˆŒùÔ ƒeív»rüy·Û�^¯�N§dA“ÐI›>j�ïä 0fù1¶à &}̧Çgà5Ï<æºLÓœìù¡>üh ÔŸ�°+@WÕÉí´Ûí’¬i^^,•Óf"®±p4Æa0‘`�}_ó·�Xσspß6»bö÷÷ãþýûqëÖ­Ò.üòüùó8??�?ü0ö÷÷£Ý¾º‚áðð°$;€7›Í*»µ ÷\A‹ŒEäµÅüa™c,Yó;ÆÌÌÆjŒ‚Ío5^‘ƒÈ»P"¢œÐD�lx^²n¯ (d=bÞgÕa²ÖiÖçÐË}ðOnß:¿N‡[—zÎ|ÔZúü)[!è_3>ët×Sg#ð¿u<ý^,1›Íâää¤Üÿ=ËnÞwß}7îÞ½[¹:¢Õj•ÓuÐ�Ô½±±Qt¨×1ïbÉ<¯ÒG~“XO±®Íz ÅNcj,ož—<—®3?ïùr½È¤ƒFæ�:Ì1ÏÏŸÂ)ýïfÌ6¢ºþ³î‚˃ë3‡<›õ ´ñ|Ñ®ñuW›q ÍúÉ4f® å¥×î4"’ïÅΓ²X,ŠÁÇÀ ÓÓÓÓׄšNxWŠ�tFžN§¥N¶òb€.—×ÑΈësOm YYÀÔ>ßÑýgr 4‘Y±\.Ë1nôß v6ø›~¬¬¬”LÆéç¼Vg!ËGµ±Øæ` Œä{�üQ@ÇÇÇñÃ?”6~Æímʃ·ÐY@¼3Åç«: ˆ6™k)Œ‡vÙ¾Œ0C«V«UcÓLÄA5ꤿù$�Ùl<ˆ^¯Ýn7þÇÿøek¯.]×�;wÊ6gJɆ‡ûÉñ|ЮÛíÆ£G�âþábee%þú¯ÿ:šÒ”¦4¥)MiJSšrU2�!þm‡ßÏETÁûWN˜ªó2¨GŸø�0úaPÚ�‘ˆ¨ØÐîÇ›.?kpÌÀ€íV‘òØÞì©AÜV°ÈïÛ·�&ãñ8–ËeIB¬å7gÔÓ^˜‘ƒA$ß4^'ÍÕ=cÐ~1PãÝ h=·dõвpW.;êæÞýá'—úÇØ€AÜ:€ÊÀrÙ<ÏÙÊ8„iï‰ûˆ/j¼Æý]YY)w®®®–ûƒVWW‹èzég§Ó)swÑÊÿÏÞ›5Ç•$gÚžä b% ’U,’e%©5Rwõ´ZUc£Ñ˜�ÍõüÚ1›_ �l¬Õ Ù]·*w¬¹cIäw{‚O:Jš¹ü:à †Ì“çĉðððpÝ=ba!Z­V,//—,‚99Ãcii©lyè£pB±ucÇuìPg"ñ~ƒ|Œ��z臽‹ Ïcßo˜N§%£ŠÏðWPHÔ7VÈc<8mÌO<Ëoð5×ÁRœ…M}À=|×h4Ê9ØÑï÷ËN1l•åyÅ|¥>ìcv-�¦yŽB›ÑhëëëqóæÍØÞÞ.YBõz=êõz;ª&­ö>•Ô ®•®¼  wÉÙÙYQ(¸1ðf ™,LÍ9¿ÛÙ9" Y>ÓÎì•·c ÏA”a+¡0’·ìbðqÀ dä˜ Í|ÐÓŽ”;ÊÎÏßgÝðΈˆ—/_Æx<ޝ¾ú*"bf»7œH8êðŒC­V›0vúM§Ó"¸.k“39œEeÃÀý‡æ�ÇñèÑ£xýúuܸq#~ñ‹_Ìd0q{E3ÇiKŽl9<<,{˜ã¨ëõz1 baa!Ö××£ÙlÆòòr ‡Ãòœ8ãœ%sb8Æááa¼yó&ƒAio£ÑˆµµµØÚÚš‰BóDð6 ƒ¼€·þŸ¯¹ÞË€…|¿?¿`·Ê `@Þïä½ùÝÀºlv9z;Eò¹ê�¦kþn'ÏU�…ASÞ‰.í:Эóö<ôÇ´·ýb[9·=T53Xã@@l¬œ‘HeúûÏí÷R´› ð%Æ´Ç{v0Va¼›g±‘Ì ùù*Zq�ACl1;Y<þÔ™·%ãyãD3G³;èmÊN®;È—ç°‰©ïüü¼dΜŸŸ—º=—jµZ �ˆâhŠˆâ<ðÜ4­›ùŸ~gP�¹Þä`ÕË€n�5Å8'�öùÛ¯ìó¼ 0Óø¸Üt:�»�ƒy÷53�°ãWVV zÛwꇀ¬ãñ¸lgßï÷ãÊ•+qãÆ�¸}ûv´Z­Â<ˆÇ�ÇÕ«WK0*u¾{÷.ž>}ZÎt± ¤ŸÌ]ƒÜŒi–çÛŒÒ?ïdÃØX^eúÁSÌ7ê7¿³Ž0vÈ ;x"âƒ`kcQ°J˃,c¼nzÍñšh|4·…g2�òš—�UòšZŽe™æûó³/èæb~p©’¡C_óZìbZ³³å>Ïehèõj<G·Û�ÃÃÃ8::Š~¿_©×××ã£�>Š7nD»Ý.rq8L·ÙlGºq.èbì^q?ÜǬÑfþggFÕ:Æš^T“õþ˜wÍ ÎÏÏ3¿³îVõ™z-ûÝ�¿é‘ïõXZÖsX¸�{æUèâ5Þ3ÓÄ<›çuÆUÍÞwYŸ²¬ÂÙï�™"’ÓÈže/lnžû‰¡s, µÚ{/ln´‰n¡mÜÂ�¨ÞcÅÏíó ™A)UY™!àu“Ϙ1£zÝL+¿Ë $'�”ûª˜$+�Umµ ¤],æìo�p±âiÆqd †q³S‰¶:ÃÉÆ¿-//G«Õ*ÎøÆQ~6ó¿�Ç㈘]¤�e¥Ï‚ÄÂÃÞkh±²²÷îÝ‹N§¯_¿.[¶ah l™Â¶g¯_¿Žáp�N'/¶asdÏùùEfmBA³²@l@Ю3+,— r>{Nñýûï¿�§OŸÆùùyüã?þcÙ*Á…ÒétÊ~É«««qrr2s0)Æ×`0({“FqõêÕ²-X�?ŽG�Åp8ŒwïÞ•÷ÕjµÂ äwtt{{{±¿¿ƒÁ ®\¹­V+Ö××c}}½Ôïè«ì„sÔ4±3ž`.0Ÿm z{ž™O‰ ñðáÃ888ˆÛ·oÇßýÝß} œÌ˼Ì˼Ì˼Ì˼ü¹ë²U.s¶XÏÍ× \ÿÔ{ª~ÏÅ6*¶Š1ÛH¶7¹/ ^Ö'J¢ÕÊïè²Âlÿº]Î$À¶ÎkZT=ùºAÆÊv'`ˆ3)jµÚŒ3&"Š�M©ËºµAšì¼¨õx¶ól×Ò€Uó°wlj1;ÌÜw���Fl©ñaıÏα�ëíÀ3(eŒÂ­qÛ�³ÌWgƒøÞþ  ¿ª>¿³s�ž·µá³fx™º‰fÏ<8�NK† ÎPèn:Ù�d‡-s  þk4…öØÖn—±ï,’çíÌg"˜d|r´<õѰ hoÙƒ- ŸxÛ8èOŸÝ~Ï!ðœìˆ¥ÿÈcÜOÐ.tcc^ô¬úA7÷‘~àÀ‚&`EñÑG•­å±å¿ÿþûxôèQ ƒX__�ÍÍÍ"wتþèè¨Ìy·�,޳³³™y`¼ ïHR…“§s5}«ÂùÌuc‹ôÏNÒ`n7� ›¯òüe\<Ïr,s,ó3ÎÈïvÀÀ×´¾€w«d¸éå¶e§AÆ@3þòo9�ü4µL«Ñ}­JÇÈmª’–^ëÜÚêëggg%Ãhoo/z½^ÉîkµZ±³³·oߎv»=££ŒF£â|m4eŽæ-ÐÀ¼ÜÇì,õø_7†iZ ã²þcÊø(t³ÓÅ¿Yçóü¡M™çyÆ\0<ÚÈû~Ê1éuÍïÍ×|¯ù$oIg‡‘·è[XxP¥Û1yW1úf™ê6ñßóº ¯’UôY8Cûü¢<«ÍÌáÌÆ„t„î$ ­#“ªêùï þ{[2·ÍV¤`Ž|˜¡Åt0-øóÄg�Ë寵� O 3Ÿk óªÈ Q3׫ŒÛÛÛ%•›½c¡'“mii©øUÊ44§}Œ%N˜œ±·’‹òÆBëíå¼Ms~£~+?Ôí÷U9|ŸÇÔ{¾Þ¿?®^½øÃ>Xœ¼ð�Mb¡C¶éÎH˜ðŠ3¯ÌÞ"ÑJ¶|+>æ=Ï×¼ ãxŠˆxûöm<{ö,öööâW¿úUlllÄt:-ûr/,,”-H�ˆØÙÙùÀa ¿ž��Åp8Œn·“É$:�N¬®®%¶V»p½}û6ö÷÷ã»ï¾‹Äo~󛇱°°»»»Ñï÷c¿ö‡qÓn·K�­VëÙ2�g2„l {AÏgˆ¡@ØpŒx¯Èñ»ç¡ç§RœÛß|óM|ýõ×±°°_|ñEÔëõ²§ð¼Ì˼Ì˼Ì˼ÌËŸ{¹ÌQ”?Û1c}¹êt¾Ÿú‹ø0ƒÄ@€�D@Tô]¯fÌ6J6ÂÝ^—|_`Æg;�r?°ï „ÚÆ±Íͬ/g§Vÿ�ų´…ݰY°‹Üè‡Ýà¶íønÅ÷g`ª ø°]λqj@›¼ýJz3èþ`S/Ÿ±yŒiDÄÌ™*z«²0ª€êœ­m²}ââ±tÝŒ[µ™Ç=f¢ä,ó&`åx<.gÆ ƒâœòùÔ8tì@cGŽ3 Ý Ç,,,ÌØW¾ÏN0ƧN0&Ó)g b£ûzÄì¶@³.--Óö9ò:²#ED”³�#âÙøè6zŽÛ©“�rÆÐ;w0Ïxží¤²\%PÖ|Y¯× ß™ÿ}¦60󎌇¥¥¥ ¥}ØëЛþÖjµ²ÍÝÂÂBD»ÝŽÛ·o—�L8Fàøø8^¼xOž<‰k×®Å'Ÿ|�NgÆñÒï÷ãèè(†Ãá PíñtP(í3€k É8R¾­�‘U9À…¨\üÂÙuÙiÄ8Û©e|p2™”s¥G£Qq¦‚¥°}_ÛÝ^ËN·ÝNbãoðMîw>‹Ü&Œ;ó2¿ßü\µvz\ª>s¼Mø™àußr´Jg°SÜóËüÀ˜Ðv;βþ’×:;“�Kà »»»1 b0D¿ß/YFׯ_ŸYgX˜¯¬s<Ëí~™çÉÒ„W|½×pÏwÓŸyíþ™7ÌÈĪ±Í¸�é—Ç ¿‹ïÙñÂ=°žÅ=¿ì ÊòÕïÈ÷ÙÉ:³Ë:’3E�MçwÙ¿QŧYO©š#yMÏuQ¬ã¹\ñ`Ë‚BXÁãñþøˆ˜É2B¡`#!Ù/Llœ«««… ™0{&óÜx<žYx­Ø[±Í‹„br™©²w’èc<¸ù^×Á½0�/Ó‡óp¨ÇÉLïôßÌöS·iÒï÷gös=88˜‰ñ–hs+=Ž‹ˆÒn/6ô�3­òÂiï6üDÝ|díXpä,$Ó×´Ët©âsöÖňÙÚÚŠÍÍÍh·ÛñàÁƒøoÿí¿ÍœñE{;�NœžžF¿ß/Bš.,,D¯×+Þú›…��¨^Ìù$vvvbeeeF¦ ‡ÃR?ޱÓÓÓâl‚8sÑ,íè3.é­!­«Tá—‹å9�²ÉòßòÆcá÷‚×;è~ÀiM&$óÂòÏâ–Ï´7ËBßÇû,G퀲üõNUv±^X.[îÐÎìÄ¡d‡Î´\ Ï܃Lv†®“ïF£Ífsæýh†l3‡ÁdRÝXÄ|ÏÓX+ˆN›5Átê‡QØÖ‹?„Ê#J3‚):Ìf%/§ žSì"Þï•È ±`Øùã-¯-qvv6&#p³BdÚ¡,¸Í6†XäT˜�íÉ‹‚A›"bæÐ­•••h·Û¥?vÂØaæmº²i±Ûd§�ùÃ|d^cRa(,,\D‘êÏ{qØadáD»¬8R?“…k,öL˜ååå¸wï^¬¯¯Ç«W¯âÙ³geðøx{?úG›8¤ñêÕ«±¹¹‹‹‹1g" ÌO6´Í4uLVœ³ÁjzÑg¶Ÿ{ñâE|ÿý÷1�Nã׿þu4›Ía¸²²ý~¿DŠ�€PmµZñæÍ›â�ÇqxxX΃²Q‡£òùóçŹøúõëxöìY|ýõ×1�Nãïþîï¢ÕjE·Û-™DÍf3VWW£^¯—(=”÷“÷˜nð4ôb ] #?8¾ÁÍPv²¬`�b¾á,|öìY¼~ý:êõz¬­­Í,ó2/ó2/ó2/ó2/ó2«Ù&sÀœml;/ü|¶ þoŠßoà�ÿÖÙÑ‹íá7€\ƒ¼Uý´;À[&Ù9À=Øø#âƒ÷cCÛ.¥¦‹íLÑ|�¿»m´Áu»®ª÷ÕjïÏTp?ÆÛ`e¦ã�ÝŒîžígžÁÆä¶‹q0gÕ¸™†¶™}ö®=Œmœ�Ç3NÛ©v€'Ð_d� æeþžvA9ë'ÓÍmˆxïÀ±ÓÀ1�/ööåÂÂÅÀ€¥9œ?™v$ápË¿Aÿ|ÖOæ¿<s6Qžc|f^Uxð�A`xËcIÉA§Ð˶¶¯\ä»#Ñí� mÌ øÃò¶rv’:S ü\†w{Îboãü`ÀCìdbþqݸ à¬�vJ³ÙŒ{÷îܪÙlF»Ý޽½½ø—ù—888ˆååå¸víZ9?™>ŽF£‡+cÞ�[�ÚÙá±¶�ïùiÞñNA–¦;€1ØfÞÙ¤V«¬�çWVVÊÖþ¹®ªùñ<ÆÉ„#*·™±7¶é¾fG€‹çsÙk�ïá»yÍs ù¯›oý¼Û`'ïöœ2-ò:ýr0C~2†1µ£/;�Ceùa:fZBsùÁ:Õívãàà ºÝnŒÇㇱ¼¼·oߎ���X__ŸÉÅÑ%C žµÓ’þ#/cñŒ…e¤esîK–±^ =>ô9ã“´%û¸ßëhž´ÇAÜþìç©—wf¬ÝzïòÚ_«Õ OûÜgc“àèl³é~âÔ»l 2�2ïšÏ<Ÿì_°ÎL»ðÝxþäL&^^^.gb¹|°= 9/|Èóóóâˆ@á0ÑLTG¡˜ÀL?ãtî³³³f‡(L B‰rÁ30?ÌÀ>½ôÍ‚ÍN§’Ør……ÉÅoUÊÛíY˜!x2ÃX1‚¶T�™Ç+�eD”HŸ«W¯ÆúúzlllÌ€h/# ;‘ f^o=gºY™Ï´ð5FКq„W;÷ }ñvvD¯8êÁ‹bæg/¾(:8�îÞ½­V+Úívüó?ÿóŒW%È™sx¢­ø,--E¯×‹���X[[›Ùb#.;ù²²g%%Í|c%Á xŽv@[\\Œ½½½xôèQ¼|ù2~ö³ŸÅýû÷‹òŒÒB¤>´•ôæk×®Åââb™×@0æ¼âíá/c Ù” ãbǸy×|Ïí›N§Å¹M sÒt³Sšç öÃ׿“Ÿr>çõ‚¹nl� F£Qqpöz½ØÛÛ+G6ÀK«««q÷îÝ’!Ê8;;›ÙÎɬ¥�F#ÚívÙæÑ¼á` Úè?o…˜uÞQÐãÌ)·Éük½!¿¿J¿1þŽLfl¼¦Ðt,ËH·=¯QðŽ} `ážÓ¬;9Àɸ4tÍFY.›oLËŠ?g=Óë`•“�çýŒeŸyÝ,oß;£5æŽð"Ÿ”�WGKØÉáNñߢº#VÞL&m¡>Ái£ÃŸi hçOª( ˆÎâe%„½žfBœ n‹pîËY2Œ Ìm†0ðí1´`‚¦,>¼·ÕjE­V+‡¦1.všÙ¡„` }Îz2ïdc�kŽXÉ™iÎ2£Í´‰{P*ˆ<³�€àe‘ªò¸¢$pÝ^Wó{»ÝŽíííXYY‰'OžD¯×+‹gDD§Ó)íÀXaìxו+Wb8ÆÑÑQüÅ_üEqúXèÙç±s¿ÛËÎx£Äò>xÔÏÃgl¿öìÙ³xöìYlmmů~õ«²‡)é±x—}8)Â¥ÛíF·Û�ׯ_ÇÆÆFiûÙÙY9‹èÍ›7e»¾ííí¸{÷n¬¯¯Çx<Ž­­­’Á³¼¼>ŒÉdñÓé4Þ¼ySúŽ¡fa–•"Æ>·C0ÏŽá�…7"fxóV£Ñ(u ø!ëÌÏOŸ>�/^Ä_þå_ÆÏ~ö³þ�—y™—y™—y™—y™—‹‚Že;Åvžõ7î7(d@Á÷P¦ø÷Ë®ñÝN¨œ…b`;ƒø´‘ÿù3:ªõøˆ÷�ŒJéƒÁ+kÎÊÀC–mOägÝæ<6ØüÎv8“ÉdfWlK‘¹ÍøpÃ~¡]¦àt0Èá6çöÛ!fP à;Ó¶wD[Ôm1�åñç9;ÎÇhSÀræ cåàØ<þÍããqÏ×ó¼ðwÛó9’Û<’£·¡I½^ÿÇÀ¦rĸ�(G¯Hû)'H Lã"¾n,Ä`ýÌ8¼hpÚØG3žÁ=ŸqªðN;¿8?„11Àk¾30?!?Ü謹ÌÆÀ,¨Ã@w­V+0 ;�2öGÿ«æ{~Gv6�ïØù (<#"âÚµkqíÚµrnQ³ÙŒ……‹³�ŸÁƒGGGñàÁƒh·Ûñ_ÿë-ýÃphµZ1/ó2/ó2/ó2/ó2/?}¶P6Æ]2¨”ë©‘]ò÷|=ƒn[­Ü�o_³ýFŸ¬ÿó^²r¤ ƒÚ þ|ÍíÏý¯j× te�'ƒªôlÛ¹œó}˜øîÀ7ƒz¶— œÛÌö=€+Y®“wd '�y ÎdpÓ4̶xÆF\—ë¬GsüLŽŒãäç3aGð¸z›GœCW; ª8ÛY¦•Ó¨ 46Ÿæ¾˜öéMÿª¬‚ª6ƒíD¼w¤÷©r 8 …ï`AWîÏ $ý$èØÒU`eθlΛOx—3šÜÏEæ!ŽìœgÉýå]´ÁŽ ƒææ‡¼ÕÙññq ^[[‹›7oÆööv\¹r¥lÛ6 â·¿ým2Æ(%ÜÛï÷ãÕ«Wñòå˸sçNü‡ÿðfæÈ�?þïÞ½‹ýýý˜N§qxx{{{qttTœ¼d#q°é«W¯â›o¾‰ñxkkkÑétâ£�>Š­­­D¦üzzz·oߎ�?þ8F£QüÍßüMܸq#^¼x/_¾ŒÅÅÅØÙÙ‰étïÞ½‹ÑhT¢"<×/;YùŒ“#7«„­µÎÌ‹‚ÇŠE¿ß�z½gggñðáÃ888ˆ/¾ø"nܸQžçÀAïû=/ó2/ó2/ó2/óòç\lë8 'Ä6l³�‘¯gCø2`ã§+?›%J¶« ó¬ßû·}Ì;†AéŒÓéôƒ,|¿?Ó¢êZnsn¯m\l+¶�b˶0qÐ&:4ãk[°ª`¯š¶�…cp gšmo�“Éqaƒ¡‹c·ù|‚bí|ÈÎ)ìÌÛ=ÁÙ< fÒ8X¦�³nrÿÝ~oóæ¹”y#;³Óˆÿžûðx„ç3t7Vß8€Ôò zY6d`^Êg*A‡F£·oߎ[·nŒ…]@þå_þ%þð‡?”ù_¯×‹ãˆ�bŽ��c0ÄÑÑQôûý û!°9ú–�cÆŒLo~Ëx�ÇÈ™Z`‰gggÑjµ ¶&Ap$ÀßЃB’y6gI™¯³ÃÖr‘݇¤¿²²Rê7^æ ¡Ôå5¢êÜ.óžy±JÎåµê2ùgÌÐuÀ›¦ÍOÉMc£ôÝx³ç¥õƒª6[ÞØ¡`ºw»ÝØßß�Á`Ãá°à¶·nÝŠ›7o–ñ {ÖãE`´dòÙ�h›yÃò:;@.Ó-.s4™v<ÿ9 +�…yÓï·›µ›wZ¦'ÌãRµ&ñ»iƒìÿåºõ ÷¹Š^àÚv€e^½ìÏuåö›ÞÖÍWUŸóçº-óLo—™Ÿ'£'´ùÌÃ�ÀEÛ)d¡Çï>ß&G3ð}qq1Æãq\˜Î“Æíq¿ìéžL.Çc@½[ñáóééiYXøn†æ>êò¤ÈÐÎ!·™{ôödµòíEÛÊ“‹�;"®ŽŽŽf~{Îisn#õÐgán&õ@°‚dž±@Ï‘>v"àH?æ}DŒ@3"�ž(ЛÏÇÇÇ% ºÕjÅW_}ïÞ½‹µµµ¸zõjìïïÏð™…�…/m>::Šßüæ7ñâÅ‹÷“NÆ ¡ÂïVFÌÃ, ^ø½?w§Ó™Q>ONNâéÓ§ñí·ßF»ÝŽ/¾ø¢,à<Ã~»Ãá°ðB§Ó‰v»ív»|ÞÛÛ‹étoß¾�W¯^•Ú���X]]-ak‡ ã×l6cuuµ8¼~ùË_ÆÒÒRüïÿý¿ãŸþéŸbii)>ùä“X\\ŒçÏŸG¯×›Q’9këüü¼œ¿dÞ1�Bž³lóVtŽÖaØP𘬬¬Äd2‰n·‹‹‹Ñn·ãÑ£GñàÁƒ¸{÷nüÇÿø‹\#Bг�æe^æe^æe^æe^æå¢Ø1dâ7ô¹ŸÒ¡ª€$Jð”?»Cæz$é ½ e̶Ïa'D¼?÷—{ò»ÍOý¬ª@+Ûnp®rtÙÆô¸ðÞét­V«èÓív»Øid�Ð/oQfGCĬÚØ�ÁCUôðøTõŸ{Ù–®Ùl›=Û ÛÛÀÀ‰�#´ €—6`ƒg˜O2�\Æ;Uà\®£ 8ÍàgÎ ¦¿3~à<ï¨|¶D_^^ŽápXæ-À>ã•ùÊüÈØ˜ÇܦË@­ÜO÷ç2ÚepÎugžÉ¼›ÿà]0+lLG�Çã‚Ur�24ÃIdг*Ë…¹ëàêì”Ì2Écèö9(Ï7÷�¹oGó'»ñ g«0Ï"fƒÏ©‡~B~cþÔëõÆá£�>*;’,//Çêêj´Z­xôèQ|ûí·1˹JW®\)­ìNÒív˶_¬3`/¦§e¥q¶̼Z…+eG,Ž#;™Kð‰èÏÎÎb8zrcíª2G²LÉ×Ì+ ¾Íf³l9éyš3òX“2¨m,ò§dZ^³ü{æÉ*L7ˆËú˳'''1�ËÖ{ý~?Z­VYOË-¿;ËÈŒÇV­�¹�Õ�µZ-Z­VqJоÃÃò5Ýââbܹs'Ö×× &G²E½^/ŽÅˆ˜á°BÎö£íY¿°\«âãˆ÷AUú�¦¦»1d0J>»-Ö<îþÌoè8U}ä ó ùflØ}Ê|â÷š·«tÚ@»<_-c3C“*§¤ß_uOæ)þ²ƒºŠ]wÕ=—ÑÄ2¯^¯ÏüþÁöt&rö�yâ’©ÁbÁB‰wï:ÙB>2‡"¢(Zà«¢‡íF-9»$Û™N™ÆÜãhbêw¶…£®WVVJðÖÒÒR‰ô_X¸ÈFÀ^sª·3ÿ9°Ó¶;¸mÉ»�x "Þ±ÙHñ{.‚2}óXzŒ³³É ¨yÄÏÙÑà Jß댂*¾È·Œíø}Ôÿo\U Zù·|í²Ïî7ض,<á€MƒÌ™Wpd Õü`§¥ûc|"�½æ©Äñ¼²²ý~?z½^UúˆïóXÇ…ÏÀI�`ëij³³¨×ëqóæÍøøã�ccc#Z­VL&“èõz%�ùàà`F.ú )¶d®�1ç’ù!;/¸Çôö½ÆË¼Öäqõõì$¶Ì¿Ì‰“ù�k®‹1³ãÔ|È»©×É–—³g˜eœ�µ€{ì,ªò™\æŒÎ<[EsÚ’Ûo}Ôô…ÞnsïLÛÜGÏ»Ì33N#tPö Ñ‘ÓÓÓMïÅÑ�·gÐy0¼`0è8�ˆÈÙDfž¼HR�SÔO�ޏ¨jsÞÓÕ@>‹«�vpQo•áaå„û-̳À¡?ž8þ�ï¼³ê]PÒõYLèïgÁCèÚ ³2™½ÚþoEÙNG ·Ý®ÊÆóUi /ª6|¬°šò$ŸN/œ$�N'ƒAüÓ?ýÓÌÙ7,–K('Yzùòe¼yó&úý~ܼy3NOOã‡~˜Qf-ÌËYØA"Cò¢Ž!´¸¸ñòåËxùòeüìg?‹»wïÎ(„Ô…R·²²R"©(ô…þ¬­­Åööv¬¬¬ÄÁÁA¼zõ*c?ºÝnÜ¿?Ž��Ë–”9âpmm­úx~~‘:ÎAµÿù?ÿçøâ‹/¢V«Å³gÏb0”íø""¶··£ÓéÄÞÞ^¼~ýºdV-j¼·J¨ÚˆuÔ–çÞˆˆn·{{{1™LâêÕ«±²²õz=ã_ÿõ_ãåË—ñå—_ÆÍ›7£ßïÇÒÒR ƒB?+Óó2/ó2/ó2/ó2/óò¡cÃú’�5Û¶;.sýßþQ‡Wù“=˜‹Ù±àq´Ó3c™WªÀVg=Ahb<ÊAÅU™ ŒõââÅ¡éÆY˜cØú<ïnÓÄXvx–!W¯^�Ï>û¬dÕëõh4±»»¿ÿýïãàà`fŽF\ȇk×®Í8½Á*J§=î¿ig§"cKà<}°CÀ޾”Í9`ÇÇÇEF ‹\W­V+[D‹ŸƒíðóúbÌÒ|ä1Âq±¿¿/_¾ŒÑh“ɤ8Y2¦˜�kϱœueG‚åAvUñj• 1FèRÅÿnk¶Îí¢ýv9ÉŽjÖ.;=ªdïõ\³ÜâYέ:>>ž ¼n4±±±Ñl6‹üÁaMf:c9�^ƒ‚ƒŸ øÀk­6Ù±áq¬Âž¹×²ƒ1â^Š×Wh M�Õe§©ÇÙ2Œ`æbÞnÐë®ãë–¦±ç”ß‘3bgøÚ_²Î`ÐYRÝi;P„ÈŽÈBà ˜sã3ÞÖµEAa1A¨1�9ZÃN%;« èò^+Ü Q«œPt{x=˜©¸´ùw¿û]|÷ÝwÑl6ãöíÛñöíÛØÝÝ�Ù+ÙB„‹ÅÉNZæùùùŒáŸ ´ýðÃñäÉ“èt:ñ‹_ü¢,2Ìþ‡Ã™>Y釞vz|ôÑG±´´kkkÑl6ãåË—±¼¼OŸ>�Éd�N'ÎÎÎJê·Çyss³,Z‹‹ïÌ qíÚµ’Ét~~ïÞ½‹éô"båqee%¶¶¶baa!Þ½{oß¾�ÙãÙ‚ÚJŽ6h‡ü"ÓÉ}ö6™ûûûÑï÷£ÑhD£Ñ(t:==�‡Æ·ß~wïÞ�¿ÿû¿/m‡1�ÊÊž«ó2/ó2/ó2/ó2/órQÐ3s”/Åj—g ùzÏmgP†Ûãë¶92(o�ûpìr¬ZÆæË†=:­‘æ0o®c¯RܶÜÎlæ>Ty¶aúá, ÛŸ9«»Íô…>¶m;çöf ÕÏÔjµš¦‰ (‹î^«½?äðð0Ëv{l+ƒÄþî~l¦ýØ$X´½Ë¸bçS{l™<./¿³Š38d€*ó²Á#Û•ÐÞã;˜LƪÚÈ; HBèH;ŒqdpÑ8‰ç£¿gZø¾ \›v$ ˆ;RŸëЀñ´3Îu2ÖÆnŒ“Øiä6@#Ï»¦¡1¶,]oþ=Ûûã¢^lbÏoËlgß@ŽŒè÷û±°°PæXE»ò\2þ]NOOcee%îß¿W¯^-Ùœõz=ƒA<{ö,Þ¼ySîc|jµZlmmE«Õši÷x<Ž^¯7H V”åOv d¬Œ úLoŸoåõ§“å%tsVÎS;}�I¬+yÍóœvö–w´ãèè(ž?^°›ããã¨*™·ò:j|ÔvÂTÉ­Ì£®›ëUó=ƒïæižµƒÀóÕ�òÜW5W²<ôg¿+Ë[Ïeúë5ÿää$úý~ ƒ‡Ñívc<Ç•+Wbss3677gÎÜòúN 3ëX=ŽF0.Úmyäþz�¥}^ÇLãLcµxÀsв/¯GyíÉ8ºëfžXŸ16m}ÂÏ™×<Îþà}È{ï,å·"ÞoÁiþ±ÿÁ`ž7¼Ûr7÷Óó8·™g S^ÿªæÍes×4±îá9D™qY‰c =±©Ae6/Œçå01Å ì-ܦÓÙl œ-8\,ØqFq†RÄûÌ;Žxßh4*÷[¨“²j¯(×a,êXXX(íñÂO»¡�£5 ©ÈU¦•3™²óä"ÒÁŒe,tç½´óÚµk±¹¹çççåÀ52ÐÐŽ;¤Ü&„Ì”ÜcϲrvžD¼ ,ÆžPL` 0Úožòïð]v´Øû‹AOܸq#þöoÿ6VWWãÇŒƒƒƒ�—Ÿ;;;+é®F´�h‚­­­øè£�âÇ,Q,h^ØL¿¬LCCæý_YY‰étÏŸ?�G�E·Û�/¿ü2ÖÖÖ>ðzO§‡BåFT‰·’€‹qýúõX]]�7nÄÙÙY´Z­�F±¾¾OŸ>�“““"ŽŽŽŠCr4Íð ¼dz7�¸{÷nI5ýúuäÈ”¿ÍÍ͈ˆxýúu¼{÷.ö÷÷‹s3ï±ÎÜÍaÙáÍ!™‡‡‡±¿¿µZ-:�N1HQDŸ?¿ûÝïâüü<þáþaf~±ï¿Ì°›—y™—y™—y™—yùs-Ù`ÇÞ3ÐëÈmô,@lƒ±„ÎAoï³È äpç—ì\^^ŽÑhTì m£­dŠ,//G«ÕŠz½>³]IÄ…�Ól6£Ñh”3omKP°K|ž:õx<.€PÖ�Ù û Ñoô_Ûtì'B™ Eƒ(ô�¬)Ô .ÀX8x+oÝråÊ•bÿ¶ÛíRO£Ñ( 5�xÐiaa!†Ãa±!G£ÑÌ=y9€’@<ÑV«çççe›|Û‰U¶l­v$ÊûŒa•}ž#¯ ¸…ÿ° :w ?‚$4gÜ3=ù�3SàKÆ—±` �]áöÃ�×ð¼Å½æ�F£Q€Kø<È»Á4›Í’eÍkµZFÄÅ6fìÔ%¨‘sk,ìD2Mø�ùå{ì2@xó¾ÛÌsÆŽÎѱü€¶ØÓ¼Ëgîä�gøÏ2Ћãþ_`,".¶oçš�ø*Ç2Ô<¿Ó`ìÁ °“Ù^ŽñôÓöóó‹�K±á3ƒ­x›^ÈQæ…íéÕÕÕ ۾Çöövܾ};ÖÖÖâüüb×’z½£Ñ(¾ûî»x÷î]™›ÔÝl6ãêÕ«% “s’h³·®³¼2/YF¬®®F£Ñˆ½½½X\\ŒV«5ãL…&ðÏââbYèA±Ì›ýýý¸råJ¬®®–ó«˜Ì|ä\ræk£Ñ([ØÑöV«UÖ�•••h4…O\ ðçÛ·oãÕ«Wåìíœi’ÁyÆ œÅÛ02öµZ­ðlvZZ¶ÃsðïÈÁßôÇ 7ß�×ræãglÕsÁNb·ÙÏRã Sò”zX¿ ¼D¦ÐÁÁAìîîÆîîn• ã¿ýÛ¿-Û0v»Ý™ö±ãêêjyr޵ž©ÕjÑl6gpóì´¡_àç—mgèö_…ÏÌïÈ0æ!uÑNèi,Õ²j0þ@–2_ì(�F1�NKfuÂ'²ÏÁ:èEÔY¯×£Ùl–yÜï÷‹S>f¾µÛí¢o íʲú­YŒeS¬Ë"·éóęּËGçøºëCÃ�´ =ˆñcþPêôÌÌÀ ð¾Û1adž£c¨ÏˆN¸³+ùÎBѲÒÎ&3¤3„Èd ðuú;Ѽ3ƒçd0ð9ˇ{ñ³@bŒÐîcá¥|àÍ-Ü?ÚÇûÍx”éeÅÄ ½¶¶VÍíp†N©ìQ÷øÓv/ª6L²±e>ñäòsv:2A"¢gV†XÄÌ—Ù;99‰F£1³@g:Ñ.2dÚívܹs'VWWc2™ÄŸþô§h·ÛÌ +l,ê6T'“Iܹs§dݼy3Z­V¼{÷.Æãq1~©Ït6 à=è™yãÊ•+qtt�?Ž—/_ƧŸ~Ÿ~úiQ¼øGD9ËÈB{:ýÐY»¸¸XÞÕl6c}}=¶··ã·¿ýmY´p"íîîc¯ÙlÆp8Œ~¿GGG±ººZ¶Œ Ž)êo6›ñý÷ßG¿ßŸi3¼�bµ¶¶V”¨W¯^ÅîînqÐYÁEöX6!`ƒAE¿ß/J¸�{Æ�÷üþ÷¿�ï¿ÿ>>ÿüó¸wï^ ‡Ãbˆâ8t$GžŸó2/ó2/ó2/ó2/ÎÅ …¿[·Ý™£OùoÇeõÛ�A®ªªÃ¶žÏrF €³S@Õ€¦�J´Ã€¸6ê£ þÙ±`t3Mó÷RLgÛó«y¦*RЃ÷ÒK’äz þ4øaÏïÃv©â#Þï@=0‚̃U|dðÇ8ö>À®AK;檂@MãËÆÀQèÅë3ß�R/ãl§A–¹Uëïe¿™^y�wMÿü<ÿí÷½y­tÀ±3~YÏr;M׈(FGGG%P¹ÛíÆd2‰ÕÕÕ¸víZáS2âà-æ4õÖ·ÙQ[ö\¶Æä6ÓnÓ3bv­ásÆèì¬ÁÇgœ©ö7ÐnEØG`_DæãÈ.ödÎýs]ÆéÁ팷¬¥nêC¾Ñw>ã°Ž’KÕµËÚX¥/û¾ª1¬z×ez^æ‰\®øK•¢”•éì|€0FÀx3«;V.˜d~—${‹­äx°h�=ò�6x÷‚ë:,…goœ=ªHôÓ Gîoî'‚ O¸#R¬P{‘6Í©A|™p¥/¦9ÑXD=Ø3�'Y6ºPHÍ#(Òî+{J»ïfH ;Áè €ýêêêÊÎó�Û q>‘yÀÎ#î½råJt:��ÇÑjµ¢ÕjÅêêjüîw¿‹ÿþßÿ{Qxód¦Ýõz½rVÓéûhœ¥¥¥¸}ûv<þ<âÆ�E°ÚA Ml<¡tÛ@B ?;;‹gÏžÅ÷ß+++ñå—_ÎD�™g{½^Ôjµ’cÁžœœ”h‹éô"3iee%>ûì³X^^Žï¾û®lß7 âÆ�±··WæüÆÆFq¦t»ÝØØØ(| N&€‹‹‹±¶¶µZ-F£Qùä“2ÿèm&¥ÙlåÏÑ9ð{æ»Z­Væ2óÐi¾Ù!Í}ß}÷]|õÕWÑn·ãW¿úUá{æ6€Íƒó2/ó2/ó2/ó2/óR Rü[÷gà]Í™ýèæ”¨Ë Ïø·ýl ¡*  ÅöYþx†êõzå¶hô [+"fôy6Àe@Üú¯ßãû ˆÐ~gHÑî·-ê÷Únw`¨ëµÝÅ}€ÆﳟȲM�­C=Dc[/d³M\ž8Ø�kèòØ 6ñÙ@-Ø„·Ý㽃_�Œ{˜ÞæÑ d{ qak€y,éq¡>ó2ÁåHrl)Û¤üžm}ưÙlÆÞÞ^±wÉ(ˆˆÌÈ >í5ïyÎzŒ™³Þþ‹ùêþd‘v3ö€2~ÌKæˆÇÆ |Ë‘ž6Àh'“ízƒEÑ?ÏQÚúÌ­LÛÐq4• IÎ9&óÆ‘òÞÍ…q0nDð'¸›[éð£èÊ•+¨Õj¥.ø“>-,,ĵk×bgg'^½zGGGeÞ=xð >ÿüóøùÏ>ôÜï÷cyy9Ö×׋¼�Fåz§Ó™á÷ŒYy®Òžóóó’uF°-2ÑìyyÜÈP±ÀÚYdùøã àQv*Á7~c€c—±[X¸ÈJ¼zõj4�‚û¸/Æ-‡™gd#m?99‰z½>Œlà»J6çLË‚Œ?g¼ cÍk�ßeý€kžS^÷ª"¬[¬Ék†öЦßïG·Û�q,qãÆ�¸yófÁàx�ƒÜn…eç'ïemq^“ü\vf[¯`]õëõÜ�%Èƹn¼—gpx³¾Óg›å±®’�ùd–y€çÌ‹d-¹mî“q~×�샷‘iÜ“uûþ=Å|ä¹–ÿªJæõ*ú¸¦©y™2ãšsE0j“ZAÊJµ.忇øL˜®jbØëÈ;Üш(Q%0$й7;“.S¬Ðz²úÐG{ ]7Ž” ï±·8§‘±ððýüü¼0qöèûÏÊC–™v¶[­V´Ûíèv»3‹€…´•0&‘Ó–ódBhQ²Ï ™��¦Ï™‡QF4�Óq©ÏÞö,¸ìФ�Y°C—¥¥¥ØÜÜŒ½½½XYY‰»wïÆÊÊJÄ“'OJvŽù‡>Àëív»´}aáb+Þu||ív»¼c0”¹T5qmÈyo[/ì ±··�?޽½½øë¿þë¸~ýzi“÷âœL&1£Õj}``B“lÔq8ât:�O?ý4ÆãqìïïÇááa\½zµDñ4�1a……6Ø0r:'2a<—¶mllÄÉÉI¼zõª(d!Â#lI‰Ñ´ºº›››±±±­V«ŒÁtú>u#³ÑhÄêêj¬¯¯G»ÝžÙV€öñyii)ö÷÷ã·¿ýmìîîÆúOÿ)®^½ZœoN»G†e92/ó2/ó2/ó2/ó2/ÅvGDõ™D¶ â[Ÿ4P–Á>_æXÊŽƒ£Rüëë€ÙŽøu ÛV±�œ?×ëõ…ΖFùl Þál'og[�÷;óÁà¯ûÏwÓ�í·ONN¢Ùl½Þv˜íòˆ÷ÒûÐÜ[]�%¬¬¬Ìl‡m@`œ³ˆlg˜ÞÜ£.¯2ˆîzÓ ÆòŽ*ÛÛ6yuÌË®'ó•A;ÛÆU`öd2)…·l6›ÅሽHh^\\,t6º_Œo³ÙŒ~¿_Ql)8™LJ _>OÙcO?KÆ`ÛÎ[Ïgxžú½í�³6hkÀÐÖã’ùÕãdP2;�Œ³± cð?ó‘ûìH6 Kôß™&ÆÈè›�O<Ã<9>>.Y`lÏó–þΘä¾pŲØs[8;+"f�)°M ö‘ñ!c‡´e<—-´677cgg'666¢V«•íçþô§?Å·ß~[î#ˆš!_ Ê|Éó;Ï]Úb\ §,;—Àcn¿3‰$‹³Õ¸†qÏsom…|4Ná±¢­ÆLh²b0Góv{{;VVVbqq±d6QgÆ„i׌e�Ÿñœt=Ù¹“å�×Z¯ÛŒGvˆçyî6P¬_d ´ÏrÁk N#dŸïñZggíd2‰n·GGGÑëõboo¯œ«µ´´7n܈���™dæ%cn]Ùâu>.z Ga@›¬S�Ÿ�Çáç³ßu™îèb^ñ¸#»ü~‚Ü=wYs¼¥œ±T®�ÇãâØ�F%‹Ïgƒ]&O¼FV•ŒÇg~¬ZŸ2 ªh–ç‚×HÆ;×5#Õ=€& j&ƒPždD�¸ñ,/23 X˜MuÏÁBÊÌõâcïoD”È „-m„1-˜aïýì~XYeB::Ê‚�÷xë;/Ô Ý¬<š9²p6ý¬C3;ˆò8xb Ì®\¹Ø+øèèhFQ° 6/äzì8B�™Ñ.ö§¶Rf…<ó<•·v@Yd_Öˆ‹½‘WVV¢ÕjÅØÎ@&Ÿ½7v°,ÐùÆ�1�N£ßïÇt:-‡.Öjµøãÿ8³¸x,2]"¢|>Ó Þá`ÆÃÃÃâðÌ|N¸†ðÌ ~¿ß�'OžÄ«W¯bgg'~ùË_FÄ{£—>³…�Ó³Y� �û€3–Œ±óó‹}T÷ööb<ÇÞÞ^ìììÄþþ~DDÙ¾ggÄ…0…WÙ‹—þál±2ÌûÛívܸq#Æãqìîî>B¨�Çã™sŬüA#¶™[ZZŠ���²±÷�öÖ–YùzðàA|÷ÝwqÿþýÝ�QÁ IDATøË¿üËYÂ9V(Íîó^æe^æe^æe^æe^Þ— ÔºØÀžðsù{þ ’í'æ=Ôg Óº¾Át0³‡"W9j"fAs2ä± zÔÄY1Íf³Ø<8”ÐÏ €`;Ù©dÝßçÓøü#Ûh¶7 ÁzlïMF�·ƒ>—�Hünšg‡}·cûÚ‘Ç"Í#vNy‹;�·ï·Ã0Û\ÙÎv|‚e°ÎÎ oÅd·Ýoþ38oÀþÍs;ƒ¾;»ÂçøæHm/v7±Íìö;áÝØÛð­6vá<¢<h3Û3b#�Çã°W ÝÆ¡ ˜;³†vcÏ9)ƒ_Ʋ ¶N§Ó2lCcc–ô Ü';i+ŽQc]9‹�ºª@tlÔËp!øñìì¬l eà•v0®ÎÆò–÷ÆŒ­d\ÊòÞ “’÷,,,”3ã …3¸àÇÉdRÀVYaúŽÇãèv»±¹¹7n܈ÅÅÅØØØ(ŽËÁ`?þøc<{ö¬ð$2ZX‚Ïàˆ¡M– U /üÌxåùÍxÚï9®bgŒåD‰Ájœu‘å©y’9ÏübÜí@Ây¾†Ó¹^¯0O̯¹}î·Ÿ1C_™W^?]—eœë„™£UŽÆ ÈçõÚgWu¿eo@ï bè�û屡ßU÷ûýØÝÝ�ûk׮ůÆFÁ¦X{�FœŸŸÏdf¶Z­"{-×ÁöÀÉ2øïï/fþ²U=cšYöå5ؘ2kºBæ]x½ëää¤È˪ª9–ùÃ×óXgÝÌ<“�´³�YßâYêÁ1è6s=ó²Û“ÿÜ÷7Ï“\G•.\õçç|U;�;.3N#n°Ò˜=”Ž¢ð0c!0ìü��öPGÄŒ`3Xž_®g… Ʋg—ûE�“~U (îAIÂQ”Ao&ûô2ñ˜8f\;Žì,ó8º*?eðR?LêgŒ`f)X½^�£££8::šqd™‰ìð¢.„ÏX8Ñv”‡\—•Úç(;€þF£Q"rÔçÎ�-å³g<ñi³‰zlsÁGƵ2HfûŸù2�^î ¤¿ÆÂ2�Ø�FÝnsÒxH–WæGêvß½ž1>W�ðÌGìÓ¯éô}à7–�ÆÒ²¼Èci'í²cÙØ˜e£1#g*xÜÎÎÎÊÑ›››±¾¾«««%3fii)^¾|>,ýÇQŸ93“íņÃaÁ'�¡Æa2-�…eúÃkÌÏUxƒzý¼³GáÍ<¿ÁÌ·\·,÷˜çõžÌó þÌŽfcˆ–ƒ¦…yÂk„ÇŸ¹a ,¯¿<ïz ^g°?cž–ÝþÝ´iá’qj?o9‰³ ìt:�–í÷ò:ñ>pâää$ŽŽŽb4E¯×‹ÃÃÃ’­´¾¾}ôQ Pç�ð¨Ò¬áÈ^ÏIxc8·w¿ªø#ãå–Ð!èc–5æù¼vAãtÆ©«ôÏ_w}¦{Öñª°v¯³^­ëå>d}Ôë$4w"ƒiWÕÞL³L§ª>xŽX¯5�\O®Ï¿W= }Òi”o+$ŽrpÖM•GÖŠA¢ ÂæŽ¹¡ƒó; šSæh"¼ÜëEšºY„íüÈ÷ÑO&i­ö>; '× ¼l†…Ö‘‚û²Ò›A~pOê5ƒ÷ûýxûöm¡OVr¡'Š™†ß—#<Ž+ØÙÈk6›ÑétJÆN Gà‘^LšÍf‰Ô[\\Œ«W¯F§Ó™1¦ÌK´Û…Žh;Þuýúõ8;;+ÊCDD§Ó‰{÷îE«ÕŠ7oÞÄÓ§O£Õj•~¸0W0G£Q´Z­eá}dQ^®]»ûûûå�yñeÌÍ;|^^^ŽñxOž<‰7oÞÄÝ»wãÞ½{ÐE£Ûí…ÕÌy𠳃ð4é—ì˺¾¾^"ň0�F%‹�(E¶D8?¿ˆ‚öÃá°(ƒÁ jµZt:�¨×ëe›:Ï[ÚŒBmãÀN Müñ>¥Ü}†vx=|ø0^½zŸ}öYììì”,4²ŒlÈÑec:óɼÌ˼Ì˼Ì˼Ì˼|Xl ó¿ÊH�˜=c5b6 0Û —�Ü“í®ló»wA =ÞjÀÐàCDN­V+çG,.ÎfÅc÷„EÏc¯àT2ÈH;pá òŸ·Ãs¶QĬÍ@]СÕj• Hž±“Ãe6>ö¤ƒ´¿Øn Ûb0”~ÙÎ$³‰UÛ÷ÎôVÜåýÞ*Ì¡ T©ÒÛ ¶ÃC~Wî§A�ª÷ù¶íªÌìÐá;(2pËýÆ'"¢ì2�N£ÓéÚáñáÖaïÁòìX4X�-ä±ÏŽc2ÆÀ#r€$Û"œbc3–£Ñ(ƒÁ ÖB;²�gZ÷20—ç”ûnbÇ¥�FøÔ¶>¸•wdÉ5Ë40;¡·3‚àæ*s‰ó‰�UÎ`Ë 2íÉÎ5p° ÛÓvÚádà7oå”�GËqhb,Ðm3ß8 Œ¡ÓéÄ_ýÕ_†ôêÕ«øío;ƒšÇ<ÎÙ��ƒy®2v&ºÏvʱÄ¡æµÁÎ3›8N€]XXCX?Œ)òÝŽafw:�27Z­V™£ív»œ Ýl6K ¿ƒ¬3<‡3øí€ì,³#�=õZZîù=Y¾çöñ~?g¾wxoÆYíÄ�F±»»?þøcüøã�…ŽY—€d�Çã ñöíÛ8::ŠÓÓÓè÷û±ººŸ~úiܺu«á ÆBŽXþÁKð…Ïb™FUß-£yrþæýÈ÷›6³M¦�·ÐÔk…ÇœÝ{Èš‚&UŽÆ)ó´Êz ÙwN|°Þä Yó˜õÚƒ¾Ñn·c8Æt:�f³Ãá°8ÍW™/óœÉý³<öšeæçs½U%¿«J÷Éëåƒíé( @1×¼ˆ83¡Œã¡‰°´Â’•qƒù,ø~ðý^l<ÙmDÀØv„ð@Ü‹ãeÞX Lîöä6°Xú}Èì±ÏÞÉ,²cAê¶8ƒ‰wU A�•••¸sçNlmmٔ͜ëf\3=¸ž�1hM?¸';2ŠÓh4bcc£8„rfÑd2)×­Ô" ËBÊ‚|rr2cPѺét:�·±±1Kz$}ýôÓOccc#VVVâ�ü㊥û hƒic‡s GÙÁÁÁL4yQ@1�.{{{±··õz=þËù/E@»�ËËË%»¦ÙlÎXŸ5d¥Àß½äùùy‰ì‰ˆøÃþ·oß.F”ÆZ­½^oæ(è>�âðð0–––¢ÝnG­V+[ñ@#‡È6{þüy,..–öxÎÖjµ¶-à7;diƒç§•h…Œyúôi|õÕWÑétâóÏ?/ó”è;/fDS¡ÄgÃo^æe^æe^æe^æe^Þ—*ãµÊHöuÛ:•¬ºnëÞôó½ü·^hû›@‚ÿ€’#ÞGoÈs€@¨Ïpä¨Ávp¦N§ ø8˧Au%3x™ÁlFì'¶©œÆv2 ž«@ŠÁ›*}Ý`¶7ãbÜ6¨£¤»<޶ÌGÜ—ín¿Çí2xäì|—ñRO;È5Ûû¼×÷ó;ň(™€W쨀³ ü#X|7hñ>ã»2" OѧF£Qì¢étZ‚@±ÓLKøÖΜ—ðsƒvÐ.�¯Œ5yœó¼µ}ízŒWÈ;ÐÔïf · lwàyêó–åv2Õjµr懱¦Ë�\«²1³ìË ¢�_ß“ñã:UóÃ;Ù±eë7°î�–ôß[úqÎÏââÅ.*ðœ±Cæ~»ÝŽ›7oÆÆÆF,,\l]¿¾¾ƒÁ ¾ù曲c üCŸŒw-,,D«ÕŠ¥¥¥²¥íÊsÄsÖYw³N?ƒûð—׌óóó⤠%èÕ >«Ýãè¶x­1O›Ç«›G p�¼Ãó:ËXx<¸ÏëïùùyY �EÂ8T­ÍÈ]xO•÷ 7oyó\ªš#Y6äº¦Ó öîîn<{ö,ž<Ǽî÷ûqttoÞ¼‰ÃÃÃ"ë666âÎ�;eG#ÖUø€yÀ¸¹~;ëì¸�ÇÍÖ�¼ÖçÍô2�à{Ë´ªuÊ×Àƒ¡yæK�©”dª2/y_n“K¾nÝŒw9ˆ€vÙÉïµÖ}±³3;�¬ßX‡©â[Jn{Ö«îÍ2Ü¿UÍ›ª’y¾ª U¿Q>ØžÎÞàˆ˜‰Ö‡8,Þ9reÉ@yV̪0†• /Ö^`s´÷ÔÒ—Ë„=uF¼w:°pò~39ÏÕʃŸñd Ð÷ÓŽ§—zR³àÂȺV:®×ÂÑé±µÚÅ��ì»¶¶õz=~øá‡8==�y' G—1®éëTêªûkµ Ï,Q,ÀŽ˜²bÁömUGŒŽf³Y¶| "Ö0l wÄû(軵µçççÅ‹~zz;;;qûöíh4ñí·ßÆîînQÔ©Ã$4»råJY(X,¡3ŠÌd2‰[·nÅÙÙYôz½¥ÉÊd•Âòý÷ßÇŸþô§¨Õjñ÷ÿ÷±½½]žµÁñîÝ»â„3 ˜Wð ï`N aEDܾ}»Ì£¯¿þºУÓéÄx<ŽÕÕÕ¢”0îVþ���£×ëÅp8,Î-" �;¼Ê¯oÞ¼)ý§>Jÿ·S¹Šw2oz oÝn7~÷»ßE¯×‹_ÿú×±½½=s€ìÉÉÉL”%rÅ”bÇñ¼Ì˼Ì˼Ì˼ÌËŸs1ðoÝwYÉN‰*c×`º¨ÁÏËžÉz¢Áˆ¼½N#²¡_£ËgƒºˆFöövy»;þœ!Ägá¼ÛÛ/åÌ"l~£ vúØ€v¶-œq`›Ó66ˆà<l�®qa÷²•‘ßãí±Œ;ä E·×ë|·Îõ̶!2ÌuÛ¯âWƒsæ[×mþ°ím§ÀY¿Ãcá{¡�i��MãÀJ�—ù×üb^™N§eÛEcÔ…3ÛÒ�ÉU¶šÛêqñùµ¦�±)ÓËsÒÀ°ib>˜N§3Ç.Øi ?Ú^ÎüÆ3v ûì&ÓÔö±6î4t°±ùÛŽ gŠaó3žvxfžªšK—Í7c†Ù!`ÜÌcîàóÜOÀnxÑg‚ô=>>.»Ãlmm• V²hÞ¾}?üðC ‡ÃX^^.˜TÄûc% %ÎwxÇA§Yæyà]h•ùºZv‡Ãèv»e»2œkÇÇÇ1�¢ÛíÆëׯc0‡ïÊÎØ,·™¿ Ó'ŸÍC?Ï'GŒYIÏÂ.3 ýÈÑ8¤§OŸÆ»wïâñãÇñðáÃè÷û3õ»Î*Z{ñ©ò¸Zò"–Ç%("ÊâI&‡Ón·½^/&“IÙ”øüü¼d"M&“h6›…vð¤Ç…ðüü¼dÂÐGßL§Ù'Ÿ}öY¬­­Åh4Šï¾û®[ÌЀÈ>h¹¿¿?s�¨{xzgg§lñfºN&“R×ëõzŒF£xþüy|ûí·±¼¼Ÿþy¡ϲȽDv’�7�'íBà»�Ô}||ÛÛÛ倾wïÞE¿ß/чðØââbìîî–÷sÍý -l=0�Ncss³d“Ù YZZŠ›7oÆÑÑQ9W*g Uñvv[¹ÉÛÜEDqRED<|ø0~øá‡øøã�ã¯þê¯f¢~ªµ, /Ìó2/ó2/ó2/ó2/®¥J_ª2h ÌÚŽ1Pgp:Û?¶a deP-JÔ��bàÙA]8n¼}šŸá9‚�œÉQ«ÕŠÝGì�òùDl_—³ùÉþ±=ŽíC–¾P¼Ëg#¸/Ô›·\"[àüü¼d´ðÙ °é‡®op:³³616 [$E¼?Ë%nÚ‰äwHcx›© l9òŸbÇ<”ûâmøÊ@2ïÌ€q…Ì9K¥ê>Ï“ .aÓ�F£Â�ù¢œ FÛÙ¹€�qÇöœN§1Ë–pØåœ»EP'vjv&¹ÍØd™FðAx'''1�J¶…A½ét:“¶`' s0ÿe ˜çlËûª%qÔåìøÒ˜�ÇÈv´Ì÷ÜNèâ­âÿ?öÞ­9®ëºöèn�¾âJ$EJÔŶ,Ù´l—å²Nª|RI�ó’‡|¿|ƒ¼%©?¹âs’8²eI¤DQA$qo}ÝýÀù-Œ=ÙLNý_½W‹@c÷ÞkÍ5×\sŽ1çÚÏæØTé òr’Ë1ÆHL‹yò·¯Oâ]×WÇl"8J¿ü˜609TéCÄ‘"VÆwONN4�´¶¶¦ÕÕU---©R©$Û:õé§Ÿ¦dYO6g¬.ìßhtyŒX¿ßOãqÝ£¿n¯ù»Q€àÑ&rº}rr’Þvzzª££#èàà@OŸ>ÕÉɉff²Ç��1‡¬9ž�Œ|¯ŒvÆmV§ÓII¾Ì½ë’“AÌ‹W¹Ž¸]‰¤�÷Ó?�6�¾úu~‚kÎçÀ×Ïë€òÿêçˆçúÚw’•d‹b±¨³³3�œœ¨Ýngößr¹¬Z­¦Réòo'''Úßß×þþ~Z3úþ÷¿¯õõu …„Yú<ž��i0HRz'a”ýÅVCÌøžeâkÙçÚ÷ºˆO#/ä Àhï±qj�FÑŸC/¢^NÃ"có=ufÍZw²ˆkb²M´Wü [mg$VÙýg·‰±¯ÑæGÿmZ’ƒÿþÿ§ù|Å}ïi˜æ+OuÖ˜/!lßÀ|3ñ6ÍÈLëˆo ™ý_%öÌ�HL¸Âº‚¢ènÀÙù ¤’76åh¸| .�i“gÆáŽ¥ƒÌ89d¡‹Ådh(ñö——ò»3àl> ÷ ±r¹¬ÝÝ]=yò$U{|þùçÚÙÙI, "sþg1øç^I…Ükd\aeONNÔjµ4 )Á¦}~~ž^PÈfNIo§ÓÑÅÅåKqˆÝép#83suö+6z3_–‡ƒdl݉ä¹ï¼óN"4¾ûî»W²'x&ºâ•HÜ�9ˆD,$×òò²Úívªf!ˆbm0Ž‹‹ }óÍ7ÚÚÚR¡PH„‘ßÓÉÕ½½½tÁ—H'L1zŒ ™8ñZ«ÕÔh4T*•ÔjµôòåËL5×`0HG_ U*•tÞ´;Žî@‹Å4¯¼ëŠ1@„ -//ëää$sT†ëØx|ut&úækÐÇì›�;ŽÚÙÙу4õóŸÿ<ÙÎpn·Û©ÂŠ{ãÌIÊü-fæ-oyË[Þò–·¼ý9·ðGàÖ�÷ÝÜ×Å_åoÑ×ó†øÐ}Þi`„æ±êÇ+v¨æ�¤!á‰ß½šunn.p’Hs`€x¯\.«Z­fªJ8• mGŸœ4ò>ó�ãÁýïŒpÀÃcÈ>ŸV„|=fô€ (bIb-ÆB¼4 ÒiÈÌã �}%¥£¸‰õÐa\ÎDôk\Oýÿž��¥Ï/..IçÀ¸ƒPþ —Äû® žKÌNµ§3�PéúU©TÒarØ_[®ü­Z­j<¾L(Kuñh·å|îX søž¸à|×ðÏ“n¦­æÅ <ÜO‰úé:}Ö '÷ÄïOÓõè3GÂgÚgÿ/íÐÁ€;9ä“ĦLçpR\¹8ç¡,@'[0*îT»Òr ¿»SMµŒ“4>!L:›„�~9H�¬ ‹~œ³É¡à‘äÂhó?òE‰�Ôñ`‚³�=8á�7”~»B1OôÛaúîd[±XÔÖÖ–“!�FÚÛÛË.[‚ Œ»;ܰÄN‚HJ¬¸;\ǽ¿øâ ý¯ÿõ¿´··—a¶Ù0p¼ÜH9�‡�Å�u:ÕëõL–Ÿ“v8 È rŽ—˜áp»a›L&ªÕjéEu<ÐÑÑQ HÜ!’®2|Ð!ªWÈÞA§}»¸¸P³Ù”$�žžfôÑI“ÙÙYmooëÁƒÚÙÙÑÝ»wõÎ;ï¨×ëeH ÖÏéé©&“IÊàb]FRÏ >úâÙ\Ì+úÃÜv»]íïïKºÜ$%§v}}]£Ñå ÝN #œA/óì÷ûÉY' ÒIGæk?³±³.§Uý0?¾.ÜÆ¸sΦûÅ_èÅ‹º{÷®nݺ•©ë÷ûi º�C¾Þ_‚Û¼å-oyË[Þò–·¼e'"ññ�Ý¿�¾ ßóF®qÐŽæ•枉N_<îÍ|>úá j^%äqž“ÎÄIÁ¼oÙ8!‚\ˆ##Aæñà†tu–¿ƒƒŸ/]eu»í œNz0�\çdˆËŠñSsì”t»JJà�ÏŸûøÄÚà?"«×‘ˆ1IÐcbÌ;±¯�:îŸy¿£\œ¤›¦ûŽ38Þ033“� åô‡ùKalÕj5õƒy@·œ,`Í:É⺦‰p$€@á¹›�NG�?Öööv:YÂA]—)ã�q¸Ûtˆuˆn8:­ÿ|ßçÉq.' ÜxL�Îø|úº`.Æãq²Èu†ä6ÏOˈà.±(öÅí›ß o~_p+Çä\ÆÈ$ï±ê†{¹<·‹sÌ3â¸ÜÖ¬¬¬huuU ÔŸL&zðà�^¼x‘d ^évü ½àwˆOŸ#'4X_à*Ž�0×~½¯gð´ååemll¨ÙlfD?’�$j·;®ãn�q”k´|�±b�rÂÛq']ܶ¸­s…žxC.à7|Çñ\—#:5M®Q/y–Mè Ó+Šî´õ2)´¸¸¨J¥’ˆp—+}�FéýÝ�B½^O�FCï¼óŽÖÖÖT¯×3'òðLÈŽH&°×vßÀe� øßÉkdÉç^Ñ3m¿ŠäŠ�yÑH²æy\Ï܇sŸÈŸŸíÏàï¾7zsÂÞõÒ�eɯ$‡rÛ“…fggÓ«RüŒ1&ïÄu㟻ÈÏ�PÈÞמãïÓä†�òuçö¯wÙ{ˬޘ턺ò󹟩‰°¹†ßcI™~äù[<:ÎÿÆõ‹ëz½^†�õk½dÙ'œÐ¢ßã<Í™‹ÙCnØøŽŸq�R¡E0™¼sņ(ò¥T*¥,2ÔfffR†Sîɸ1þ…B!U€|øá‡úõ¯­þð‡:88УG�’adá#+•ñF²%fLntÝ@ÏÌÌèððPÛÛÛzùò¥ž?ž6,Whæy4¥û�ÇãdJ¥R¦”–÷çø}<CÌßJ¥’VWWÕëõ2šgúF;�õÞ{ïiiiI§§§zøðaÆØÌÌd�-ÄhPžÉ¦èsã‹ù¬®.Sƒg IDAT®êüü<•»26Ž8::JÎôÒÒ’>þøãdÈýx8úÜjµ´²²’1ÌÑÈ{�Ь‘‘[ȹÁ` k×®%�|þüù+냳ÉËå²NOOS…�oªÌ…Û›Bá2s©Ó餹C·¹†—rìŸ|¾ü¾l°ÒÕÑ’RU—;I¼àpeeEwïÞM¶ ÇÓƒå@C¬ÎÏÏ«R©¨Óéè›o¾yÅøæ-oyË[Þò–·¼ý¹7'�¤l%x ÝÇ#˜&<‘.ýJ¯Œð#�Hz’®‡ø™ûã¿ó}öˆ×¼:ðe2™¨R©Hºb 1¾*ã!¦�Ô¬Äg§ââââ"U-‹EÕëõä—KJULQŽÒ B\ç ¡Æ•Ëå¯ÐW'Ù�Ùßž|åd¾5Ÿq¶'à1çÈ�cÙ=û?ÆŒ5¾/ÿžxĿǼ:V1 |tà�çûQßžÉx™o³ƒºÜ �u�v€] .?d  vÀü¶Ûí„7ø»$b_Ó©T*i\ ™>9@HsRÃ×$ñ¨ ÝnW£Ñ(UÍ���éøøX…BAµZ-Vèü—_~©ï¾ûNÇÇÇ W`N=†tâÓ�󪄙™™„?ò}�ó�¤e ŽwD|ËÇÉ| öqŒÛd2Q·ÛÍ$G"/boä°ïdd$Y±ggg)IÑO+y�^36Þ›S«ÕÒ÷¨lñuí/öù9aÍÑ‚è6±·“†®Kà‘dvàÓÿÆÏ`|Õj5½†ÓxŠÅ¢Úí¶vwwutt”éÃ4p—aíqâ�¯½ñx¬^¯§Ñh”tÖm0ë »1Ëu�³›››z÷Ýwuýúu---©^¯«Z­ª^¯«ÙlªR©h<«Ó餹­V«I‡\!ļjÍçY³�ULàTè¶EØNæ�ùð{ºÍEFNÚ°^Ù�]¹7Çœz’y´u’pNÿ˜«hϰ þqæ ýñ=$ê]Ü'8ù¨Tº< `8&š1¶Z-ªÕj©Ýn«Óé¨Ó養Ùõõu½ûqã†æææ’Mã³³³³Ì³¾ß:¦ŒÝòýÑ_×Á\€³†Ø»ÎÏÏ_!¬ÝBþNûÞEsŒ—µ��Àf�¸â{)sŠAÎ )y=î?üŒÎz9µŠµ‡�V­V3~‰'�D’(&�ëyÒïCs¢Ç�/d|Ì…'EÒÇÉ#Öiô1Ù™w'³ü�V¾>�„eý¹=u¾åuä-›j¥,Ëä΋¾ˆX° �;EþÏz`ñò\6L ×3@Z±XT¯×Óììl*UEPΤb8}Óñ�”¾º’s­ƒèNšøçŒc4 .C (Ê�C¦B¹——ìûÂðë&“Ëê‘n·›Ù¸YÔôÏ™s6š½½=ÍÎÎêÇ?þ±îÞ½›dðüùs¦k”Е'>¿ÈCEéó4†ºZ­ªÕje÷i ?Æ€ç8ÑDZٻÓäóŒƒèÏÿ0Â/_¾Ì-¾Yº~ß¾}[ÍfSõz]Ÿ}ö™>þøãWȳ´¸,#ƒ Î"¦Ä&Þ;NÃééi2>ž%óüùsmmm©×ëé“O>ѵk×t||¬Z­¦ÃÃÃŒ!<<Ô¯ýkíïïkyyYÒåÆ}rr’æ…±‘‘�ñb3÷9ÃF¿ªÕj"zX‹‹‹:::R§ÓIgñ"oæÒ×÷´µÉ5l, jµZzøð¡Z­–þæoþFÍf39znK°-n+¨Œ¢Ü}ggGGGGzöì™ò–·¼å-oyË[ÞòvÙbüäþ¿” bˆÁí´ wZ@A �5ŒˆIn–âç{lãÙÏž‡ßì±�'oàƒÎ:ø*e_tO’\½^ÏT4ÑGžá²�”L¨à©Õj’”Ži"–v—„2?‰„¾Äj žé¸ÿó³Wà ƒtý4`ÑIv u(!'Ï2GÎÈÆÿy–½'ÐÖjµÖëu]\\¾�ÄÏÚb¼ŠÐ-Ïp.—Ëét‹………DˆÅ2\§]ó;rsìŸ͑eÄ£4@hæ$®=_4¿ÆÁZrBî|‡¾]\\èôô4‘±€c“É$½ÏàÔ“=^õ¹ ŠÄžß—cé}t¬É‰^æÄIkää@®ßÄ”~¤^´GÓ@ñò»Þ»n8™íxÏùùyz7ÊÑÑQ:°ßïgÖOœ×»]v,-ÆØè;sí¤¤'ìò™tuI'}=:væ2¢oÌóÜÜœšÍ¦666´¾¾®v»�0¨ÙÙY}÷Ýwúì³Ïô“ŸüDµZ-CÄ2ï.ì%ýðk™ÿ………¤Cn³ÁßÐ5‹t•0΂à�evzzší!ð[­V:ÎÝ"ÁÜe‡ÍfŸrûu‹Ÿ±ç“É$½úÀ÷¬h»Ñ·E®/ØÛ¸HÙ÷Ñoߢ�qu¹zb€ÛZs<‰Ê×›�ËíhLqÛá¶GR:¢œŽ¤'ÆŽ��ÕjµÒ{¿Ñ™õõu]»v-Ù4ÖÝFB‚Ñote0$2ßåà~I\»þ6ªÝn'2²Ýn«T*¥ê)×Y÷—�Û´yãºn·›NÈ‚Pãè6NDrRÆÇZ(2Gö¢osˉSO‚Xq¼ÞOÒrœÓms=-¡Ã1pÖILlb|1áÆçÓåê¤+ru"Ð×�ß—>zñ�ïNöE¬Õ×`œÓø· iä 7M1÷…àƒw—ûy†‹?ÓÙÓ8‘|—�»ßïgœi^þˆ@`Ž™Mî�"L®‡xrcäNš6ôÓÙu7£™<®ó’oŒ4Šìòrg×ïåÎýð#°|Cpy¸3ýèÑ#5 ½õÖ[*—ËɘÕëuݺuKsss:::Jgv £¤‘Ló Æ‰7yaa!i˜ËÝm˜séŠÝf£syq œ“6¸ø÷�†Úív:�4nü<;;«~¿¯Z­¦7ß|S�=ÒãÇ�uxx¨z½ž2<<`ˆ¤D‘�Óeųz½ž–––4 tzzªÅÅE —‚;;;úæ›o´½½­÷Þ{O?þñ�Õét’ŒÑ'2/™C Ê´ ßçÊ×ðììlfS:99ÑÂÂBZ£¼xr~~^{{{’”d€žª×ëimmMZ\\L¥3éÞ7ä�Ã/)É’ªÓéh8ªÑhèøøø6Þ�3ºÇØ<[Ð� *òxWÔû￯·Þz+eya;|c§�ô‡‡‡ºwï^Fÿ$©Ñh(oyË[Þò–·¼å-oÙ£½ˆ¹þ« Öƒi�O ¡MiýÜ—ÿ#Xé`q‹ÿæñª?³T*%PÔã#׬º¿ ØAì€�"ž"òxÜ3_éÕ;ļ�6$­90î˜ûÓØÇ1GàÃCâ#|<øÌžñqbdp„HB¹8ˆÂ3‰-|®=Û ð6=…Ì8qÁuÐÁF?²:&Vò9z$)Mä dÔiõ#€Ë?*l1£®ûšp� ’Eʾ�ÚAªx_;ÓH#'^� zåý` ¬bNþλ�ºÝnΙd IÌ: Ð$Ö�ljpä™~Œ[”¯g¸;KÕ’Ÿ‚Fâ„÷q{â÷ó>ºm�®Ïx=÷æ:žI<Ë==1•õ�þ('ÿÝõ½‡qb 0Úm„WÉùzs ä¿¢i‘ôÀf4 ]»vM›››ÚÚÚJÀw¹\Ö£G�ôé§ŸêîÝ»©oŒƒg€¸Er‰qƒ[P;žÉ=c5r@ïÑýr¹œ^‘àvûÜn·S5šãnÈŒ‚=„µïD¿ïƒôÌ’}�£¹-v%Úwéòä0½ÓÓSÍÍÍ©V«©Õj%ËûãzóyŸf_Y�*$êú{¬�¸tœÍ1R>cm°O;±åİïÍ“É%Ñ¿²²’£çææÔëõV…í:<„ø~|aµZÕh4R¯×KãÅ?‰¶Ìç†q; 1|ÇVÝÞE¿,®M_£ž¬À½¥ìÑ€Ì;öJÊb¦îOHÊØ×t’õȽ‘ûlÄí¸'û8û»ëœs|—g;©äöÍm<ë)ÚyßK¢9žÅ÷ý¤#ÿ;¶?V¡1ñ¸Õ(Ã8¶èÓ2ÇÓ½nÓ cþtÚ�üá7NnèX®8:È=1ª>Ø‹‹Ë—´ñÂD´+¿5w€}‚}r¦R'‡¤lE•—…ñ‡Eåd ðy¡PHà·—Ãa0$%RŒª^@É¢`§¬!wpX0~O¿÷ññqªh!+…J�B¡�^Ì6Õét^qˆ]1=û…‰ÃÍ‹[)�tG‚�yŒsèd óŒ‘g¬®‹lV<ƒÿ‘�oÖ“ÉD�FC¥RI''')sÇÉ#ô¯T*¥#êF£‘þøÇ?f¯“1‘‰ö@BºÊ¬Ãл�FZ__Oå©Èf{{[�=ÒÜÜœ>ùä“T’ŠL8ÚÂIžr¹œHUš;0¬¯(w6M¿ ƒŒþð^#!ˆ+^(É1‹�N'm~ÈøuA%2óÍž¬³¥¥¥ô®/žÏ\ù:�Ž~$ Y×lú/^¼Ð矮ùùy}ôÑG‰èDüüm-‚®¯¾úJŸ}ö™¾øâ‹4N?‡=oyË[Þò–·¼å-oY`Òc)fcL:�ðqÏ?çÞÞ¦1.'j<ƒÚuÞq×ëÅç:Àä²óߥK@×AJb¢ˆÅÄ9Œ`®�Ýÿ×U‹ë1'@<€7ïþàŽ‹‹ h{{;UÖq4›gq»Ž{"$ýu¹ÇSl¦Ù×� :ÙàU„®³>¾£ŠÏˆß‹§øÐWºHõJ§áp˜Ž<;;{%yÚu+ö#®× ð¯"a-‚éøsÂ8ꬓFþì¨W^M\©TÉãIÓÓìô´çO“"ú^Å:wò"&öO[ûèk” ×ó3ß™ŸŸ×â⢖––ÒÉL¼V¡Ýn«ÝnkooOûûû:99IÇ56›Mݾ}[é]ò¾G S./’œŒö>y’‰ëŸ�!îÛÈÇ�§ƒdfOÛs�!ÿüyà¨�¯n{ «8ž�ñ`ÃWwü”ŸÁèªÕjæ=Ö�„ ä¤&ðyÖ)øxÄàýxº¸§8¦Ë1sŽósOÿ�çs_Ž‘óÏý;üsŸÓ÷O2ò>¡Óð þ]ôÉ 'ŸG·µÓö,o¯�FtŠ›y6�3cQ¨‘Åv–Ó ‹/Lw"¼+=JÍó16GGGéX1 „}õ W@ß00ÎÐG£ï¬¡Oœ+<Ïd2]QT—cv&Tº"§¸¿—œC D§çË�Q¾ÏbD‰÷öö´¼¼œœàZ­–äÒh4ÔétT(! )±ä¾áze©6È ù,,,$¥vÆÙ‰×#òp=õL–˜­G¿Ü�ñ}6¿z½®^¯—ÉqÙG‡~4º|¡Ýo¼¡�� ÍÏÏëÞ½{™,w0уb±¨³³³äðú†Evϧ�5kkk:>>Ng¦r¯ŸýìgZ[[{%e�ôû}õû}-..¦yòÌGgÐÙˆ|½±ÎÙÐ|ãu§ecc#ëöõ×_«T*¥,½™™ËL ÈÇ¥¥¥D†–J¥t¬"óœ¡ó~´!›Øx=óÚ3û¹71Š“T”pbMONtÐŽÄ@9Èâ×xtÏ¢ÏÎÇØ‘k›ËÊ)b«·yì�\ׯÁñlæÎqäǽ‘¥ã%Óâ/Ÿc®‹ T$ âõŽ/�ŸŸ§cœœ(„8 êõzðŽk|�ÅS&�Xýb-OÓäå2÷yd|à<.Cù>䱓F>ÏÓˆ¶H£º¨ßïg*fY£•J%Ié?¾±Å|©„,œ4Bîବ3×'·A.ÛÈDÉ Müï+Ÿãk2&l6sê’�×ýWÿÝýب#ÓäåëT ¤¸ñœ¦�Ñ�weF°¾±; Í½â†7w6K¥Rz�#/Åhb°*}öZߨ] 0 n,|ÑÅ �`Eö#èø[¡PH`5¤÷‰åý0âdKñsdÿ¼É'Ÿï�ŸŸëää$±íΰ»2H—†luuUóóóiÁ"§z½®ÅÅÅdð1óóó™ Ø]7dÑùÀ°FÕ+ž¦m<¾©0^Œ��‰ûRÙâ™g>�Nrø¼ÖëuµÛm���¥Eôiºp~~®v»­wß}W+++š™™Ñ—_~™ŽõCŸ...ÒÆïÎãAß&“«ì&w4|]ÕëuêÙ³gzðà�~ò“Ÿ¤MÇõ:’: ©ïl ¬3ßDhÑ�BÎpI—T½^WµZU©tùÒMwX‹ÅbzI zJÀÌÌL&Ã�—ãÑW|]ŸÑI'¦OOO5 týúuu»ÝT)‡lýèäÃsÇãËwµZ-}õÕWêt:úéOªf³™ª �vg~~^ÃáPÿú¯ÿªú§ÒŸþô§”‘X*•t||œ2Î>ކ7oyË[Þò–·¼åíϽ¹oê±�Ç/ìáz‹ñˆ×Žqge=ÖŠ„‘Þdÿ:„Ÿ�ÏI\â±5þ³gsãcûÑÛ~d5¸ø¡€'žñï@ƒË”û8ȉÿ9Æ=~Ì9 óã—#@÷_ͱNÜ4_9Äï‘Hqa>üsÿß+Z<¶bœW¼ŽX Äïl;ÆQ€DŽ@-ýb\3ÑbUãœFà8°é1:æ÷ˆI§<ƒ{û÷#ˆ/½zD×9¹àd÷šF>¹ŒÎÎÎtzzª³³35›MÕjµ¤_Äù›Èx�#òæ3ï'„ãö£³<wà-bŽM¹Žû‘fŽY� X.]a8ôm.áóßã5ÌyüN$p]ǘÇ"¢¬¼ùZ¥Ÿ^EçÏm«Å=ø ÛuÜmÍ×1÷ ¿¾¶%©Ûíj<kii)UI—ï·®V« ú�ÿøu:ÕëõLu�ƒ¯þ(Ƴü!ŽÜ6�úÚGWœ„qÀx8jooO_~ù¥îÝ»§'Ož¨ßïëÚµkZ]]Õììlz½ÃÌÌLÂÐc·åŒƒý;äÉÈ>w®;kaþ_Š6Ê×FÄ�½xÀ×!òtBÇõ˜{Äuà?c[|íù}8b�WøZ‰ögÚ³¼2•¹dÞ¹�ëãx}ª7ß|Sï¼óNZ‹’ÒÜ9Û¿»»«û÷ïëßÿýßõûßÿ^½^/mÈXªéò–·¼å-oyË[Þò–m¯uøÛ4È¿Áy¢ÿ¯Á�ŒA¸FžŠÿY¯×8ì€þ /¬–®²—!Z0 ô˜‹ñãHJG\‡á�RQÃw8Þ†˜‡x“çã×S¹ÁK¼9Á�|aˆ…¤«ØÐipáq…ûõ›p:é‚�î?{V= a³³³é(3bXÏóþøó½W*•ôU*•Tíâxˆ4|w®à@-‰w$­:@�¼ŸŽ�¸¬Lg^HÀsÌß‹>Äc¡üß4âÇÁæiëγî¹>’FÓ*›¤«Œß9Uc}}]KKK*—ËšL. Øz½žÖšãMî;=×֜˘ψ›k”yýœ$aÞ¨NC=þŽø˜Ï«¯Ö*k {áq¾ë×ùú ™w 36Ÿ¯iÕD>Î8ÏQŽ>>ï|/ê—ÏmšîÇ¿»Þ¸NcËXŸŽ»HRµZU£ÑÐp8ÔgŸ}¦N§£Z­–Öº“‡Åâå)-®?è)Çc9Yá•,Ø._{Žs …t¤ö`þÅ‹jµZé–ååe­®®ªZÑiR IDAT­juu5%+onnjee%C8Ð?Ö’ã51éÕç;ëIÁØ'öæÙõ#ÎÏŒ{5d3•JE�NG“Éåqhì;Nb1¯Óô€10*øªÕjÂP™oðIO ˆzízéó×û}ðµ‹m¬×ëªÕji/’”’Ë;�Ž...´°° õõumnnjqq1é¬ãŸØ?j¼Ïq4·É�é%Žû‚Wñ/·è¶’qÒ'r"™÷P·Ì¾‚ïí~¯ø~!dç|x«téAÂ¡× Iö`mÓÈšXiãÕ:üŒÌ"™ÃgNÊùzs�rÓ“Œø¾ûž®óŒÓ÷0ß¿™oOXŠ8.8µïÌ¥ïŸ�ˆôºª#·1q$c½éÎ�Ç!×¹À1Ž~'<3Ä£“C±l4¥£ÞæææÒŠÛ'?nV>> ?·�Cï�„ËÄ›¿;ÌÂñŒþîÏ ¿ÿ8M|æã@>lšív[Õj5=›cÉ<çüü\�F#�¯X¼<‹û«¯¾ÒÝ»wÓÜ,..jkk+Uáx6 CÍæç r0$¶Ý��¸yE™3'®_8@Ì/ ÐKP%¥óA½‚GÊfƒq^k½^W«ÕJú�*dZ.—õâÅ �Çc½ýöÛj6›‰I_\\T¿ß×ÇõôéS�ŸŸë“O>IYr êõzZZZÒöö¶F£‘nß¾­_üâ:88Ðá᡾ýöÛLeRÜÄ _>|¨gÏži~~>GPÊ&Ň:>>ÖÚÚZÆqı�ο¯3_Çî@úÚq;ÀÜ///'�8::JïâØ6ÖG"Ã^¯§Ñèò�Z§§§éˆD®‰2د8L†¬TJ•O«««zþü¹>üðÃdc†¢tå nooëáÇ*‹úÙÏ~–ô�gž��©Z­ªX,j0èøøX»»»)Ø>88P«ÕÒúúºff.3‚z½^’I¿ßONlÞò–·¼å-oyË[Þ®Zx#pî€Op< —®Þ9ãDŠÞüÁaé*q ÙùØ_?¾Ì}K~ˆó,užEœAê+÷ûýCzÜ‹ÿ €J#[Ùc ú‚_+]%C�ÇãDºÄ8Üeè1˜Çþ.3,|~�÷´Ì\}ñyð¹òÄTÆÃ�Äãñ8ÏÇþû»H<.�IjÄ@¼WÕß/ELu.ÊÉïóJ¥R:á€c²<žâ>®¿1ã›æÏcq ™9¦ȈëœPócüøÙ[Ô}³ëý´Ïb¬‰äIÖ9±�¿¬|<¾ÌÜoµZZYYQ³Ù̬bJb7¦ë¼÷Ã;deíƒ÷›y�'ÚDò9ŒÜw8Îw‘‘ë¡ã#üm6ƒõæÁ}ü9>_>o.'·½Þ?×U·M~¤W\|ϱ¬Àº|¢=¤/q˜oÈñÕÕU­®®ªR©¤Ø½ÛíjggG/_¾Ôééiüvœ丑¤ÎûZq9{²4ë×Á~ "ª\.kqqQµZM•J%�ìãɵ“É%ÙBE‹÷=ãŽy€×9ÖÅw|.¢‚+’{®¯Ž¥¸�s=p,�Œ{;¸O´7dOÔÙ¯Ñw’²7òjdáz›æ8¸ÛYðh�³³3µÛm�œœ¨Óéh0¨R©èÆ�ºqã†�FFâÁþ¨±7' À[IRŸæÃ`;}®'333 «�Ç™— ãÞè}v[ê­X,ªV«©Ûíj4¥¤æØûë°ëÄ"X3²)—Ëé¤,?º/ΧÛ,'®\_"þì6ÜÉ#Èäi}å:Ö×q·ãìègLŠ:ç×£7Ì)ß�z÷.ï7d³û n·øßím$�¦¾ÓˆùCý¦Ñ˜3)1SÁ•:áÂgü?mÁ¸ãë›–+†;P>Q(‹ž˜•â†Ê7I&�EÄäøù‚.\Ï@ð œ^7¨È)NLTfÿ)Ç3‹Å¢VWWµ±±‘*X<ëÀ•ERæ…j“ÉDûûû™¹A2HWçf"KwXX´žm7I£öŒÕåç ìXQvè`¯×Ë”vÆÀg"heeE“ÉD§§§iáaH< C¶Ÿ~ú©þñÿQOž<Ñ~ð}ðÁºsçŽ677õë_ÿZï¿ÿ¾&“‰¾ýö[½ñÆzë­·tóæMmnnêÚµkÉæ}SÕjU7nÜÐ~ð­­­¥ù‰G.bôðáC�žžêg?û™nܸ¡/^d6bŸï^¯— Șé%eÉ(37P¾î}n¸¾ßïë­·ÞJeÔß~ûmZ·½^ïç¼Ñh¤y祒ȧÕjetŒ›�ºõ|ssSµZMzÕŒ'w"S’$‘9ãuÌ!ÞÏcO ôŒlO¤åY$E"³Ç5ä2–®b8?pl¹ ‹qŽ]ïãZõçM“¿ÇràŽï8>q~~®ùùyU«Õ´~8nˆŠ…ýý}moo«ÕjeîÉØóA·�­¯Côœ(àï>^æÄe«Ý.8~ )%ïzõÛëæûáU$`NÑö±FXO¾FÀ.¨F$Ù×לë®ÏG´ÃÜlj‘ÉäêˆLîåŒ^áá ÄÜÆò9×OÖ‘+cõÊDt€wmllhii)éR¹\Ö`0ÐãÇ�õôéÓÌ{Ç}¼ôÃçˆßË岪Õj"§9ÍȱR_W^ÁfHg¥RÑÆÆ†nݺ¥›7ojii)Ý‹Óuܾ`çý�â.ŸöF�t�vÂÈ×¹ç”÷k<©<’¤Ž£8ÁïÇýù^íºÏ…_Ës\¿gf.ßcͺñç;nì6Ù¸®Fžû¹Mðëi:99ÑÁÁ�ŽŽŽRUL½^×Ûo¿­ëׯ§Š^·]Ø(pÔB¡�ˆ ôBRæH·ÙÙÙTåeÆâǼùû�¸Iÿ̉2~ÂR\‹NøN«ê‰•,=ÞoO¦aNƒç}PøX·ÕjUÕj5UùãöÚmóÆ<âkÄïø»²Ðw°[/�ë¢ï§1c¦í§ŒÅ×ÑøðjZt=‚¸ß³|Ÿs›�. w4· ~ŸXaH{…4Âp0yÞá¸@|ca»3ë×c€² Ò'Õ$ïC,ᎤŠlþŽ3€øÆÃóY�îè8KëCÀÈ–®6xw}Œ8gN°ÑœgSöÏ02ŒÃæÅÅ…nß¾­Ñh”ÎÐ¥<�EB–rfŒ£ÑH•JEËËË)x€j·Û¯(V/çç穟qã—®œ8_l¾ùXq¾½ÒÈK¶Éa1úFîŽ9ÄQ¡PÐÒÒ’ööö2�š×àÎàúúºæççõâÅ ýýßÿ½îÝ»—™‡J¥¢ï}ï{ZYYÑýû÷Ó{mÒâú¿2ÆØPBKȵk×2A•Ed·}þùçÚÝÝÕo¼¡>ø@�FCÅb1•½ŽF#Õëõ´i ƒTã)®kô Ýt'—~0§Àr½¤LÆ]³ÙLg‹nmm%=÷w!7wæ …B&a0¤õáë--w6pœ™œkkk�Ǻÿ¾ž={–¡v»­ããcM&•Ëe=zôH[[[ZXXÐǬ~¿Ÿ±;#Á<�œœ¤ª´õõõ”íðòåKÍÎÎê�7ÞP©TÒÚÚšªÕªööötãÆ ýå_þ¥ò–·¼å-oyË[ÞòvÕ¦4ާØÈæñ¾ñyÓž' Üß$û¿ßžø?àÉã8²É‰Y8 VèО;3sy‚Õö333éH9²ÐËår¦êÉûåè¾y¥RI}®T*éšxt Ç IJÙ»ÄM{9øçþ»',F�Údb2~v26bpHîÅø‰�ìTt¢ ×I�Yˆ©9n›øýð„Rb}¯‹;¦BÚQ}A-7ƒë|Ô×ñø² Ç“éÀ<ƒAªf`.<žCÇüx5ÏDŽ`ó´~øšñln³‰9ýžÄQT„”M&—¯!à(w*fZ­–ž�0áýÇpBƒ5æëÜeìdg9#®à@¥ã7Þ"öĺGG:�Ž*•Š®]»–N[‘”i¿ýö[}ýõ×騝Hª8þà$•ÏvÓI#®� 8c-‹]fm ]¿~]o¼ñ†®_¿®•••ôìò¦r¥P¸<šËmÏGFnc},Ž¿øX H@6è~Ü/#¹ä¶»Ç)A¾�µ:ÿÙ~ $'™™'þÜö:)Ḱ'”Äç¸ßáxrÄ®ã%AãììL­VKûûû:::J}l6›ºsçN&aÛÄZA Á zØ“Ø÷%%|’]ˆ¶Ùqìxt›¿7ˆë¼¸Á«™Üž¹mp›ïïÜñ÷0U*---eŽdäx¾Éd’Æå¯AW{½^:²‘Ó�®ñA'¡ÇãËbì�ïiNl¿Ž4òDûÙÙYU*•´7ErÈõ8&çà/Æ¿û¿è9�â:èv“1¹?�<ö"/èðD¿ý޾öÿ3iä›dq9©™+”OåßñÅ�¢Æ…ÏuL,À­7Hßtˆ3ÙîØ°(ý3„‰‘ÇÑ”®^`èì¹`':|óòþÓ7&çÃûÌBÅ Ñ÷¸hÇãqb†‘I©TÒo¼¡Ñh¤½½=dŒ/RŒÅ¢………tìÄC±XL›”\îxfœ3Ò‰ŽŽŽÿ3Þ¼¤Ü™SŒ2cçìÚ~¿¯ããã4W¾ ÏÎÎÔëõ2凉¸¸ÐÒÒ’ÎÏÏuxxøÊ‘NÀ¹¹9½ùæ›úÕ¯~¥ëׯëÙ³gú»¿û»tv9FîÃ?Ôææ¦þð‡?èOúS’cB§...tzz*éŠ<âH=dÂógf.ËlåF£¡k×®©P(èääD»»»Úßß×ÉÉIæîãX�ã&^ù‚L¹9¹Î8¦«ÑÀkˆg!ç`¼ò!Öä´£)ôôõÄ|!ÿÑh¤~¿Ÿ¹‡9D·ÑGâxÇk£p|’È�Rt{Ä<¢NZO³…€Õ`/Èšy(—Ë (Æ ƒôÊÆqzzšÖ¦¿×FÏKùœ “E�*gX#³Éf aÓ B5?$ ´“É$±í(3£_|Þét’nxö›3¶2ñ�†ž?®Ñh”úÆæŽO¿ëõºÊå²þâ/þBÿãümnnêÿüŸÿ£ÿ÷ÏÜûí·ßNÇ¡ýó?ÿsÚ BÐ¥ñxœœfÖR©¤ÍÍÍ4ï8…BA»»»zøð¡Z­–>úè#ݺu+õo2™huuU;;;:99Ñññ±^¾|©ÃÃÔYÄüø{Ÿ�O\·¾1¡ ªÙÙY½xñ"UQ¸x5ÐÌÌŒ–——“n?þ<“¹è›02Áñ]YYÑÙÙYrö<ж€`’l`üztpvvV7oÞÔìì¬Úí¶Êå²�†666ÔétôÅ_èÉ“'zç�wô½ï}/9Ë ln¬ßB¡�Žqô,й¹9Õj5Ý¿_¿ÿýïõÝwßéóÏ?W§ÓÑ'Ÿ|¢÷Þ{O�N'šÚ¼å-oyË[Þò–·?ëæDNœ�ôÊÏ{"”àºßˆ?ɯ–ˆ$‹T„&^ñX�`žïz¢\Œ=nb|€tÃE`�{ú»k ‡ƒf{–m$ˆ�# †Ä||ù{f-2ây|‡{ÃÏ:èèÀ;s‚ìuˆòcÁœJW ?»^€#8Øê sN¼âq¾›ÒUœÄx<±â ]aÜè�Ù‡>:ñ…¬�£“FTGAæ01ñÕ+?ZÑçÖOž`œè¯¡¾2GÈÌ׺“ÁÈHRÿ%©^¯gæÁõ:&9z ?“õñ¦b»¾:±ëd´¨®7n¿\_'r,=öØÖÁW®œ�cöŠ9Ç…°!Nv¢ƒ®{è×¢>g¾Vd從8ì¤Ïr\�õȳ]¿]/¥«×"°&”¥?1‘Õmj¡PHï6®×ë <¯V«:88ÐÖÖVæDŸ¿(ÿH¬;9FßX“N˜úÏn›ÀRÐO^÷€üóý½6ì¼ÓÝeÏœ¹­ãäº×% “>ç¾�:¡èx¥ÛL¿'×9A÷·Ï¾ö°u>·7Ž'E?ÁåK¼ïtûì÷Žýôq¹ G?µ»»«½½=íïï'2aaAkkkZYYIĘtut­“̧›èU_ÑŽAÎÄŠ _‡è8?ÇJPH%*jÐY>ƒ¨A?Y3>÷N�Ñq_æÐ«{ø6šDÿ^¯—üŸjµªz½žŽßs2щMö½¸³/JʼïÐ×¶šî/Åbpklv@Ræ˜9®ßæçv»�Èp×KpVÖ‡ó/$±Ž™g¯²s v›I�TcgÜØOBrÒÈ�>”¤Ì›Î¦1µ_|üì×±(ý{^2ç†Á�\>§œ�MÄ �,: L´oö^�àN Bu§`Ü *WLw° G �õÄÄ`|¬î¸#ÉbdCv¹¹ÓÅ3YÈÎFó·~¿ŸÉ&êõzzòä‰677Q¡�´++ÙRggg‰Ù…P™F r?dA–×rtÙn´]|SÆ1å¾îðÓ`ñ)kÇȰ ûFqQÐjµÒüúG1.dô-..ê¯þê¯ôûßÿ^»»»úýï¯ÿþßÿ{"¯–––ôóŸÿ\Ÿ}ö™~ûÛߪÕj©Ùlf1t¶Ýn'²h_’´¸¸¨ÝÝÝ4Ör¹¬ããcmookooO+++úå/™œ<  t™¹õÇ?þQ7oÞT¿ß×Ó§OuýúõLY0%’qÝúšenNNNÔívõüùs5�Ì&KÑëååå”ùðàÁ}ÿûß×ññq†\æÞ¾V‹ÅËæ�œœ$¢®Ýn§¬7â8’Õj5­_§èŠ”ÍdÛÜÜÔÇ533£÷ß_årY_ýµ=z¤r¹¬O>ù$cÓXÇSžaU*•RV$ÄÒd2Ñ—_~™ä_(t÷î]•ËemmméÝwßUÞò–·¼å-oyËÛŸ{óX,@Ó®õ&GF{ìäYÖñω#îáI|þ<cB”ƒj^UàÄŒÇKö˜·×ë¥ÌÞ³³³W�œœd—ñÀF¥RQ·ÛMV<‚[º:*œx’1d +2˜ñƒƒ�ÆãËê—~¾äI�ñØâ Ë“øE]ñø�xÚ«j<•®Ž�ç94'\±ˆ7$¥þ“üÀçFÄ.Ä×èJÔy× ~ö¾E}v oŽâñ™?/’cÈËõØQª`¸ÖI$ôîüü>'œ“ �|�xÅAI §¥NšÅ6�ü¡9èø:YD=‰÷eÌôÍ�r¬Åcib-tÓeî$#¸2äˆ5â]H'̈%ÏÏÏÓ{.F£«#ÊVVVôÁh4iii)yN8�ˆÛï÷˜6�ÌC.~ºˆΜ3BÖ(˜:æ²v@ÒÉ@Ç´À>8j`<Ã�@ÿ~œGúè §$ Àúšñw7akˆ{ýõz^¹1'Öøœq�#¸­`ÜNäû¸˜ 'gÈðw€¾ÎÏÏ«ßï§þ9vÑív5??¯ÕÕU­¯¯ëððP§§§)ÁóôôTŸ}ö™*•JÂÆ¬en³x}uÒѱ·Uq¯ñ}É_a�­EŸ¼Ô+.½¢ÁõÍ+ Ð=Ö7Ä :6™5«âø^Ä!=©Ÿ¾üC9–„]ñï8ãö�10Îxœ)ý‹äŽËuÚÞ×L\¾vé{"sAuÇÙÙ™NOOÕëõttt¤£££Ô·z½®Û·o«×ë%Œ‹ãÉœ��FéÞ��N�ÇãD:iÄX˜îƒ_�žG2щ ö*Ço÷ý-®/'B´! IDAT�}ÿt"Ì}Çþ�å`0H‰(¬?F/¾ÏÏuÅí8{6…÷1º�vì=5ØA¾ãX?¯)a¯ñÖ™Ÿ¶å÷Œ÷v;uÔÉ">s[Ê|±qSÜ›�0b}ÇyD÷Ða÷u|-ñ7äæí•J#6o7øL¾w€ srÈd #ÊîŽÊóî�uö“N°;ÓëÄBe‚¼Ä’Éõää‘"¿¯;Ê®d, >C“É$m¶ÎÀ¢,ÎÚÅêWlƈ"z‰ý{ùò¥^¼x¡ããc�ÇãÄ�’‰Q(�´¹¹™È5dî•X,Àáp¨¥¥¥ŒÒ�¡æsŽÓà‡±{°äc…ñæ¹õz=3ÜÓe‚|q>‘«¤´^\\haa!UC¡{ü?�T«Õ´±±¡V«•œ)œZÎêDÇÐ9H/ÆˆŠ˜o¿ý6‘<£ÑåKênß¾­§OŸêþá´±±‘Œ™P’Ò;˜$¥ûA²±AnooëáÇÚÙÙÑû￯›7o&£àº:™L´´´¤þð‡ºwïžŽŽŽ$)•x2Wlê§§§",nÄ>�‘1 ttt¤ÍÍMU*•´.œ fn�†šÍ¦Z­V:2� I?öÍç†ú���©^¯§õF€Ñn·34CÜwg�öàecc#kãñX_}õ•nܸ¡÷ß?cô±YÕj5é¥o¦·nÝÒh4Ò³gÏ2ÇöÍÍÍéøøX}ô‘>øàííí©Ñhh8jkkK_|ñ…ò–·¼å-oyË[Þòöꋨcó ÿuߟшýð»‰g¼r…ïp@9iàÁ¾ÿLüûã¤DÊhð÷Œ81ýÝÏvÆÁvé ´�`¿'Czìê Ù½ô¿ÙcUÓ¸Vº:jÌ_ÝÏÛ;�”9]`ÒcÅ(K÷"ft�•8€¿Å8Áåcá°B´Ñg ¹/c îp âÅ+¯œXqý˜R¿nì‘`Šãu°É �H<Äk]¦ždéI­Ÿq Ðq"é\6Ÿ4ûóÈóļW2ùQ)bãñ8)ˆè1þëæÙÿw ß�h÷¸ÞÁ™H8�cz€gÞA\Á»�3@â®wÓð× �Ÿ_ˆIWÇûp/ÿnÄE"14�4â~_ƒ|¤?þ=ÏÐQ?ƾßïg&Æârðµ))a+Ž— Wõz=�㼟ƒ—±óÜÅÅÅ”ÜÈ;˜Ñ=žãëžæU.NøÚt@Y€�L#ä˜_ŸKtÜuÛ�‰tùøÿžLL¼ìÙêÈGb26`4„/Ùòn«4wù`{¯ëóĸü�Cè;!Á}—«ºTð<ê�@qâ�Ïÿd2Ifׯ_×ÊÊŠž={¦óós5 õz=Ý¿_/_¾Ô�;waŒ¼ü™<�ñzßâQb€µN¸:Ù‰NדÉd’t¿Ûí¦ç:žQ*]U×h4477§^¯—äîd£ßß÷Ú§áµÞ|�ãû‘ØqÒ=‰¤¬Ï¿ßÛmX$}"¡4m�p¬Ê×^Ü�ƒWWq ¸‰Ž+NÓ_Ù9ÍéøøXûûû s¼¸¸ÐÍ›7õî»ï¦½Ž¤möHªê8-Ê÷|·±ž°Aŕ˅qŽFWïÖó CÖóç§hEÊ×>ã$|ÜŸ}äÏsè/þ Dë}bÜ`Ù¬-Öœï}^5E!I¹\V·ÛMkyòù´îå¶ÜÉ–i¸2k ½ðqû>}RßC¢ý‹Í}3d9ÍWÀÞ¢ÃAè>œöÞ«æÝ69™úº~Å–!�è¨ËQ ݹñEíŒÎ´3iñ»î4û½"‹‰P|ÓôŠ‚è¨{Àà ³Ÿh8~î¥/0_<^©ÃCõKd&ù¾gš¸2º\}âÜÑão8Hœ}Ún·Õh4$]ßGGGj·Ûj6›š››KHÜ¥bcuB¯Z­¦1V*%¢Ê�#Ÿ{gT]ьٯwqq¡J¥’ˆ“õõu­­­¥r]6e'Ð�¯tt„1ÑÇÙÙYu»]¥þðÌÏÏkggGëëëi/..ϲ¦â ¢©R©¤�šRòZ­–eIúÑ�~¤ßþö·úî»ïô§?ýI¿üå/‰ÁÙäív;Ãæ£gl°ß}÷�sbÉïçc!VuÂÊçÜ×Ðd’%i½ŠÈq ÑyîçØ ÇÎ1n0 éò’ýˆË™€JOv‚…µîºáÏeL`Ž-!�®GlÉœüý]7Ü—u=ÇÇ\fN„1þç·[ÜÃñ=îI_�³ë=ÏðÓaÜæD\ÈAßiºˆ,á:Ö8„—?³ßï¿‚ :¨‹n,--issSOŸ>ÕóçÏ“\ONN´··§V«•Þ7Mæ;æää�ã\^¡‰ø:e �„=�Óû¼ÎÎÎÒñù^mÂ8›Í¦jµšjµšF£‘vvvÒ±þŽë¹üHÌ…¼@ésœ ¾Ëÿ$“ˆà€:úãk› 't¢�™¶ñLÖ§'Ñóy$-\·›õ.‹icŒý{ �lIØn·Û:==U»ÝNGÓIÒÚÚšîܹ£Û·o§W7pb;:ÖívS’t¹\Îè ÄúŒ¾à�¸ýf} ‡C­¬¬h<¾,€¨V«êv»‰ �–äâkÓ 'sç™ÈÂï‹^ð-ˆ,0<^ëBe3Çí�ÙFb…Æ<øúv}‚€r¿Ï×`Ô�h‡�¡W`¹MÇ.±ï; 8×#®qß ]òq¸N»ì¹ÇxÙü-n”ôUºÊxÀÈÒG6lÚvŒa¥RIçHÎÏÏ«^¯§ß½¿ÎxúÝçÅSl¾azéЉqŠÕ[~�O¤t•ÑáŠâ`øññq*ßæo>v㉠¢È7t¿/tÏü¢þ|ÞmÃÆ×h4T,µµµ¥ÿý¿ÿ·þíßþí§Ó�)XlðPxXxq«Ÿ›Lÿ=ë�£éüüeÆŒŽÖëõôb6×QŒY wîÜÑ­[·Ôl6õÛßþ61çsÆ?t�*úÛjµôÍ7ßèùóçzç�wô£ý()�F#Í» ^ºW¯×µ´´¤ÕÕÕD¾xñ"é9sásïkFà…‘‚¬Šl´Ÿ�A¶ Õj5íííéàà Í Yel˜îLùKõªÕjzéÜh4JòƒHdýH£»¬1Ï`,ÌÓöö¶¾þúk½|ù2£çØš~¿Ÿ3Æztt¤o¾ùF¿ûÝïôé§ŸêøøXårYwîÜÑ/ùKýò—¿Ô÷¿ÿ}Õj55›ÍTU¶¶¶¦¥¥%dÈżå-oyË[Þò–·?÷6 äq_)~öŸ]Ks€ƒ8ÎÁ¾cM¿—gÇ÷wD ÔI¯<ƒïø;Bð§�a¡Ä°èæ€ žùÕ1^‰„_ x3P=Ö�±?÷lVªŒH6ä;ûd;P„l—c .7žå„ãà9| -Ÿ;¿"xéq¶“WÈšùŠßç( �À3��«*EÐÜõjÚÏï9ÈäàÎÿ Ð�áä{|'e�;ôjšÑ'Â|ž¸�'Húø�tòø]RÈœ@wáôÏ«M<ä^Ž !Wô‰{ò݈Ð'îécw23Ñ®8ž��› 7�ѧÍ_¼gÌã{o¸k×—Y‹~_—]Ä ¸gŒá¹Ö ^ÖsåáöÙ{Ǿ �:�Žz½^² ÈÎñ2期Ÿ«V«iuuU‹‹‹™ç�F£D$¹ òyä~Žeúzñj'ÿ¾÷ßçÈ×r$Â}Mƒ‰ôûý„½�%-..juuU«««ªÕj0ØåËïN9Áƒý÷½Ì÷ÇY»è'óïd¹“¡n#ÜvÆ5â{žc†Ü‹=-’‰ŒÓŸ†Ïúžì}s@ßm´ã±®ÃÜ‹y:;;S»ÝÖññ±NNNÔëõÔétT*•ôá‡êÍ7ßÔââbª–„ðŽë r°Z­ªR©d’�=aaff&a]ȱH| úˆ¼9ϯw?#âëÓ|2úåD3ý@ÿçææR•.:C"{§ÓIk¶T*%ÂÈ�¤›æ›ñ,ßû°C�cŒ‰Ê(þæD�ë¤ïÿ¾×#[ÆÌ|£/¾7¸î¹®øý[t?ÀíEôKè‹Wf¹®0NÖ«¤ çÿ|ž¢}ÏèÓÒâ^#Òˆ¸!ä‘5cóeÂXŒ4ß ý:Ž‘÷s…]yÝðñ3ßáZ&‚à”gIWÙGÊ�RsÀ%Æ!F&13Œ>°ÐqÐ1zq±¹!Ž7×1¾imt¸¶X,ªÛíê·¿ý­þô§?¥MÆ7867wäØˆGóql}«T*™2eÏœñL &âË‚@F2<†Ãa2À~_ÈW¿/Y€80ÜS¼«ÈûŒÌ8byò·v»�‚;æ²V«e2ˆ¹r¹œôåƒ>ÐÚÚš¶¶¶ôù矧 %ÆÛëõ2™ƒÁ@<ÐãÇ�5;;«¿üË¿L_G”´²1œ��eŽ­£ çúõëzûí·õòåKmoog‚&²®˜÷øì•J¥4ôÛD¢?‹‹‹šŸŸ×Ý»wµººª“““D ‡ÃLµ–`7Lά£›d¯øÜ³n …ø®ëcYXXP§ÓÑ—_~©n·«þð‡©œUÜëõ2›S¯×S·ÛÕ·ß~«ù—Ñîî®æççµ±±¡Ÿþô§úøã�õöÛok_øÃRÕ^©TJ/àDžyË[Þò–·¼å-oy»lÓH iÁj¼Þò”{sßÕOÍàÚ˜Tç Å´¸Ïl�7ýgÿ¾æ^E@ÜÊÏN¦po2FÉÖõxÕ³y›à{½^æH!&´pàgšüûœÍÌ\f±ó3 —ÇýNlK໌§ý›F¹Œ¦]|òߌwò‚øØïå²s€%‚@®‘@˜FMûÝA�à:éô¹òßý9qm8±àÏ%Þψ•`ĨÞ7®ãwš“!Žé \ϩķ |@ é³Á`�p Ž`“®€læ×I—;òô5mŠÏC]Ž.#îé8ŽÛ Ö'k„¿EÈctï ·Ï ±&úéøqÿùùy:vßç*‚ªÒÕñVñÚiý4[‰ üú¸6Á76�çSÙÁñøN–3>í8 ï‰n4ª×ë)i›òøñcmmm½B9…,ã|;ï6u@ëX˜“VÈ!�Ïÿ`<’RßËår:iÇû=mM³FÁÒ|�F"ÇçÆûì×E2%î>ŸŒ×ïÁô¸^Xw\çû`ìCôâØýoŒÑ«béw<¶/bÎÈ€99??ODH«ÕR«ÕJ{Çêêª>þøcݸq#ƒ‘Ó¼½*‹ªT* ovR1î{Ž»yâ‡Ûæk4¥w,IJ¹ŽiF[È=;ÏtÂL=NÜ�=¾ÛíªÓé¨Óé¤×_æp?ŸKäNâ€'¸ à‹þ³tUÐà{¸Û1·÷Njû¾ëºåk‡ÿ}¿˜ö{K\#>^tb0¨ßï'ùq¥燜©èòŸ#¡[\×|m•÷ÝOzì¿ …ŽûÂóÌa�`ú<«É:…‚ð³—‚ÓXÔîÜ2Ñ –òq¯¨ñ2[žç&ï¤al,v€dÏJ‰ ÙI.wàé§`1@p%õ 0I™ê î ±å†ÝÝB¡�È’��µZ­ä ¸tå÷äÅŒeþN²U«ÕW2|œ,"ƒáu›²ƒMå\Jª¾ ]†Ãa"¼¤×eÆ‹‹ ½ûî»’.ËÖ=K’£ÎÏȽ\.«×ëiooOo¼ñFš3Þ³ãÁ ‡ðîÝ»ZYYÑýû÷õ›ßüF?ýéO3›!l;GËÁŒïïïëñãÇ:99ÑÏ~ö3]¿~ý•_ÞëÃæwpp ùùùÌ»•fffÒyÐwîÜÑãÇ�U©T´±±‘*кÝnfM"/t™µpxx˜Éô—ôzµœ;@årYÍfS7oÞLÙý~_Íf3’­VKOŸ>ÍdT lv•JEý~_õz=I©o¹\Nß#øÄ0ÏÜÓõóÛo¿ÕÖÖ–VWWõá‡&¢Ò·F£‘æÒïÑëõ´¹¹©[·néÎ�;Z__×þþ¾þøÇ?&}åGÊ‘9Ï{B¿ó–·¼å-oyË[ÞþÜ[ø=h¥E ›Ïb%|LN èöìqb™oúsà‹‰{_y<Åx¤+ œØ‡Ï¬bé¤ÑÉÉIòÍñá‰ýÀô,—Ëéä‹••ýì½G�¤Gvý}2³ªÒ»ò¶ ›l6ÉÅŒ8Œ-ô‡´ÒF_R a$mI€  ÑB3C »i»É®vå+½+“™ï¢ð‹:Otrôî'htfÖcÂܸ÷œ{ot:�`{Äö‹Ûh>þÝÛLAZy¿ú}îõ÷«Ûk^w·ß%Íì_<°±£±EhËÿEÖøØ8°âu÷sq°‘°g9¯ÅrƒÅñ;b€Ì‹ƒªq�=Š!s¼ÄÏö:ÌÂwh2Afœ%…1f¼âþurËç†÷ïñþsÛ�9àç{•J¥Äý”n·äÐ=é±g¥[]põ|N:Hìm£^Ž}yß¹y[qô�1×M8¹bC{?Æ}Ëõæ=´…çp ß}Nû»éS¯““h`#îmOû},rRÂû5–Eþæç!¹ó®ÛÖÞFnãLC´ƒ:L&7Ç8¬¬¬¨\.‡ó‚2™Œ^¿~­ýýýð›;xûógÍǘhq€Õñ1ô}O»...Ö6U(Q™€Èü�Œ+D¥µZ­Df#êàÙxƒsRÛe,n[\¨³§Ptb�k|N;XïúÛ¿;9äóÍÿ�q=ï{žéÏŠ¯›u=¿ùürý¯¾nA^6�àäÞívuyy©ÝÝ]}üñÇÚÛÛS¹\Ñ5ù|>á¼>™Ü8D0AdŽ×ÍÇ‹÷³Îzß#sòí}Œž�F!�tÍè‘Hè-Èl'À|Ìh¿ãüüÏGÍårGg ¡?=MiLæÌÒ‘´Ë÷1Î+¸œÄØz¼¾Æ{ߟ0ÏgEr:À:çç?9Dñ;yn,ß^âu†þÿ�¤‘oc¥ï“ß䋊 ü,b‚@(_ PœtFýh€“7.ð±wW6›U¥R 9Óé›|¨Î&Ò¢Z¸Ÿö…Ã7´Nny¤Ä„÷¡3ŸñBíd’OPßLñ;‹=› é6”±P(¯7ßX¡“ÒÍ�&,92W¶(¬xÜ}Ì<ìò£Z­*›Íª×ë0ž3wbbάØ0à�ÈÊÊÊŠ¶··õüùs]__«Z­ªZ­ƒk2™èÑ£Gá;ŒÞ›Ï硞rƒÁ rï^=ÛÛÛzç�wôøñcýæ7¿Q¿ß׫W¯Búé§::: ç8‹E5›M}õÕWzþü¹vwwõóŸÿ<(<Œ£ËËË�¶íââBçç纼¼T­V ÊÐ Øëëkmmm)•JéÕ«W‡ÚÝÝ ó ÅŠâqo™t:ØnØkäÙv¥HÛ�—ÍÍM���)“É„tŠÌ•|>¯ÕÕÕ ì˜È›ÏGîÏår‰9E^ktˆ/¼œ•5™LÂá¿étZ§§§úꫯÔétôçþç�#Š®Ùl†¶B‚㲺ºª‡ê£�>Òææ¦ºÝ®?~¬N§£z½®û÷ïk2™èŸþéŸÔl6%Ý3ï¼óNðÊ`cqÐÛÏfqðªÛí†38°#]®}n N”â¼èöž“a³p#€AœñAcçbú;ư‘q¨å:¼âÚ�(q¹ oÜö±Ÿ¥£b@š¨°wv‚¾sÂÕñ—7éöˆœJé_Æ”9‡=MÿB@ ŸüÌÇô°£±µÝ1“ç3þ>f>©?Π.G€èÔ½†Á–ö¹æN¨Å1�T¯×u÷î]}ñÅ!­P(èøøX:99 iéc�æÏõ1â·xž2nŒ‹˜.S1i⤅K“ÉDëëë*—Ë |‡´hD ’µÇ‰IïˆI×uÈ®ë~óúzßSwêïk ÏõõÈç¸Ë²×Çßçk8ïrŠõ9×Äx'ÏòµÔ£q�!~ç�®÷¹�ç]\\¨Ýnëüü\ív;‘rmuuU÷ïß×ÚÚZûL&Î>o·Û‰ýø^¥R ï¤Î.WÌH|'S©ïp8Lì1|M`^úìë>û �rãt)™¦4ÖwŽ}£{h;÷“‘‰uÙðqö¨Âx/Ë£süsÇŸW>OÑõ¾†{ò\ç2ÜAÂç¶×%^™.;<߉5ß+Ðß೎?úû㔾>gâ>Nñ¸ùzÃxÄdRÌ�$Ú7˜AäâxcŽ�!œž¿xÖ‹�d¡øâç E1C‚Ì" ðøñÁ £ ÷ËçóôÏf³a’ÖëuÕjµÐ>�:¡Nù„¢N ¡ÓD¢ …°ðºÇ†+=I¨'t�ÉçY¿‡¾§®lâÓétÈuZ.—ÃâϦŸþ¤îÙl6('‡X¤Ø$ø† ODÅSÕùd¦Ïx¿G�@ 2N„yîììh2™vÜ'ïåÙñÄõ —J¥´¾¾®ËËK5 e2ݹsG÷îÝÓÎÎŽ$éþýûzðà�–——ƒ,ùdúàƒT¯×Õï÷ûh�Ÿ+5ÕétÔï÷Õl65 tçÎ-//ëÉ“'úíoB×ÖÖô7ó7ÚÚÚÒÉÉI8¿èÿ÷µ¿\ŸÆ¾ IDAT¿¯v»­¿ú«¿ÒÆÆFX,J¥RˆÄÚÝÝÕòòr œÈ[{H·ÞU[[[Êd2zúôiÂSѽ;\>S6èõz}æ†ÏVdÐßÙn·QØn·•J¥Âa€›››zôèQØü»Bå3Qm½^/Œ-(Œa�ˆcSÌ™d¹\.„y}}­'OžèôôT•J%, a#†GòE Z[[Ó'Ÿ|¢Z­¦o¿ýV�?Öåå¥þðÿP?ùÉOÂfa}}]•JE[[[êt: ÚØØ¹lc£b^æe^æe^æe^æå÷¹8AƒR2R¼�rãÜŸ;º±íÞÞÎ�| ùÉd’QÜæ¤^Øyì‡Zøì”ÿ† pà€õ–”HÓå@9`7ŽIxíæóù„�=ʹ¬1 Áû¼O}¿OÿÌxÚw'Q¼_Ý{ÜI¿>GCîõ±w0Ã�Í�t‡âiÑÜ>¥�c™p{Û ÆØö¤Äv¾¿ ¼$:gõsü·¸ÝÔƒ{~,òÿ½^³þ!�NxÆm÷1pïmÏà1+JÅÿùo1XìýäýMß"kÃáð-\Š÷‚g�fßÁ9òýÞ?>öðIzëïÿYõw9§}.3Ž©Åràcäí‰Ç‹wÇ íõ´é~65í¤x§G ÆãéýÍß!ïÈT3kìýyñ?îÅÎ�£ÐÀÀŒh£�‘“È(ÿúý¾J¥’vwwÃQ™L&€õ§§§zöìYñ™çŒ»�eL`¸ŽvŒÒuPA€ ‚ßá@_@Ì ‡ÃÐ/KKKáÌ8é†ÄŸx\6›M8=8ö ¡�þðzxßøX²§À±ŸÏYE½}�§ÞñwÇÁãuÜ÷4q=—½xoårÄÙ Ó”ïÙ—,--)ŸÏ«Z­&0M'xâõÞûfÖ>%þk^çšW”·â›”uœnŒkH¾³)�Ã9ù³x®³� ^>ˆ³:‚ Ï%×g¼�E!Lr¹œúý~nÒÌJ[@ûœÉg±ä}Ôƒ÷Ò6ú164\(ÝË€ûœñ A:�NxÇL&7ÑA½^O;;;ÁXèõzJ§Ó:::Òëׯµ¶¶îA�U«Õ·öáp¨J¥Øf˜ñveåĽ0h'à>›&y°1dö÷÷µ¹¹©L&£Ï>ûL+++zøð¡¦Ó[�2I /2&Ž/.,¼ëëëÊçóúúë¯Õn·•ÏçU,µ´´¤—/_ªR©h}}}&R*•4 t÷î]5 u»Ý°¹ étZŸþ¹...trr¢n·"sôâÅ M§7DÄ/~ñ ¥R7geÝ¿_¹\Nõz]gggzüø± …‚¾þúk½yó&�soÞ¼I¤ùƒ ]^^Öx1ßPŒ+++‰¹srr¢wß}7ôú…ñ¢þ®¼x.ÄQ¹\QpÌ)Œ–ååe=zôHOŸ> ¤ÚëׯÃFë›o¾Ñ矮íím=zôH———zþü¹öööB˜g­VÓõõµ:�ŽÖÖÖÂøM&•Ëe½|ùR�?V©TÒ�~ô#mnn*—ËéåË—º¸¸ÐO~ò­­­…På^¯§ßüæ7úôÓOC=�äš—y™—y™—y™—yù}.؇7N¶°ÿÇÖŠ=L�Ç '*ÎØ¹¾¾9ï³P(h:�†Œ ñÒì�i°O°{ÜsVJ¦.roöŽØMnJ76(¶U­VKx=g2‹E•J%M&“²_‡ø!�’ŸWáQûì7ù>�”ËåB¤‘ùºb?cË …p•J¥�§^¯ëúú:Y€3žAR Bk2™ÛÔÇ¢Óé{ÀSŸù¸O&·YÈ2 ”ÍfU­VXæi«9Ãt:�†³dIëÂØ k~ÞoœŽg¸Á`Î ¢ Þl±)ݳl@ÈÇ Ùò¨®Ãé“Ïd@Àþ�3•€ñ7"ØÜþvR€waç@Höûý±ÇY¯Óé4‘åÀÔÿ¹- .ãÙ"È‚2�NÕëõÂï½^O…BAÍf3È.€sû;Ôñtœ¤ Sˆ6q@ž¿µZ­0߈�nZljú¦Õj%e©—§}œL&aÎN§Su»Ý`Û“ÎÑ1"7ÁŠòù|"%›Ÿkvâ:€w€E€ã8Éêø›?‹ÿ%…>rÇmÆ]çØ ÎµËèMä�:ú;˜¥RIµZMgggZ\\T¥RQ£ÑÐt: ŽÞ£Ñè-Gl òXc !�çÝ»wu~~®^¯§b±¨r¹¬f³©_þò—ÚÛÛS­V ú¡ÛíªÝn§]w²¥îŽOú™\à*Œ!º€ú²Ž8áäÄ>‘,’´ººÒ3¦ÓiµÛm½~ýZÏŸ?$ªgñh8�¢¥?�i®c,ãˆt)z×ÉEI‰¨ô:À£«|Ìi£ë·L&2<�¯‚ãpër€Þò5ýíòÁwl‰õ �Dú??WÐq]Oõwyy©n·«N§£^¯Î3* úƒ?ø=|øP‹‹‹ÚßßOÔ�yÂÚKÚ¶••¥R)õû}­¬¬â9�¾��F¾Y9ºARØ GàØ8¡ d6âùÌMdÁÇšþDv|¯…¬Ð?ƒÁ èyÒqf³Y•ËåD*`'FÁÝÑ51®èÇ˜ÄØ$¿�§9Îü÷TuŒŸ; ƒñI”c¼oBO;ñÎ:‹wÜŸ¾râŸ5…µ\ÓÏv, á¬{RPf2™„#òÀ³=U¤Ï=öJèWO1Ëž™p2™³âȼä¤cäå­3�|Ó/L³Ø­˜¡e¦R©°ÉóÍ>$”È(—Ë%r4úëŠ ÅÂuN2y=½3Ôét´´´¤££#¥ÓiÕëõp¸ÏBy±ä6C£FLr&º/`ÞO}æ›8Úë ‘ l7cÓëõÂó[­V0 ^¼x¡\.�‹‹‹p@*‚ããÎf‰M‹O6^NLøFÀŒ³……… ðim§Ÿ^¼x¡�?þXççç :??BÊd`2±Ø dœ¬BæîÝ»ÂAÝ EðàÁƒp½{é¡„/..t||¬““è믿V¿ß×Ë—/Ãö/ÿò/úüóÏC:½Ï?ÿ\ÇÇÇAé¦Ói•Ëeýçþ§–——ÃAeûûûêt::99Ñwß}§ápRšÕj5ýã?þc 'K¥R0¦òù¼NOOCX0=¿%2�¬ ¿Ùl6œotvv¦•••�ÊÍç½t½^OËËˉyíòç²ËfåU­VCšÄ………-„2tòÄ©Ï[6÷œAÆFŽ1G‘3ß :!×:�Ž...ÔjµB´×‡~¨�>úH­VK/^¼Ðùù¹ÎÎÎT­Vµ³³£v»Ø¼zÆã±Z­–ÎÏÏU«Õôá‡jkkK§§§zúô©ÎÏσ!ÊF�…“vÓ&ús^æe^æe^æe^æe^Þvzr"»ÜAiÖ½ì÷sÀ [%>€^z;ß<@¸;þ¹}‰ÝˆâŸ±…Ý–v[Ö£þ³ÙløÄƒ�Áí.OÙÄþÒÊI´8 )•J ž¾ ]�Y~öBì4ê]’BÝGC·ÅésìÆÃÏ6Ýã×óº¸C¨�™�±#cˆ�()aw»1}êÎ’³VãïîÄ8ËëØ#6xL‚þÐó�™øZ–|œ|ùoþ\w„„„‚ÄõtŠÜ; æó#žËqä‰[Ȫ¤@ò"û~-DÏ¥í\ÏywÞÀ”\N|ŽºŽAîœLä¹VƒÛ8Éìú#Ö_ŽKP'×}|vòÛTRp¦d�dôwçóù±Xé2ë3—ßYÞò>§bgaw åÇùîÄKƒyM§Smooë»ï¾Óéé©&“IÈÚòâÅ‹@2{{y§?—kg)y¶˜;Îû9*è¿ÖÁæB¡p"ˆÝÛív WÛí¶^¾|©gÏžI’VVV´¾¾þY�­ËÕ¬¾ó53..3ŽiÆ:È×ï£YÏuä_»½üÿYج¶ñ¼fûZå�<�玗——j·ÛjµZêõzA¦r¹œ¶¶¶éÏÏÏvçE…B!¬Ó¬÷è:×Yž­ <5^·‘!�\¢ tSLhxßøžÄñ}ï7×’ïg>zV/Öq×>G]\/ÆëÿœÄò!t³Ë±GOÅ�ô+ú–¿Q¿7ÞWúýÞ¯¾y4+R Ž€ñc¯ä{�Yë¾×ßû-'—Yß[Äó"Þkû» �ès²„yy‹4˜ö�r¯(ïw�¯¼OoÏà]î Äõ3L¼C=L™Û7±•“½^/ª9™LÔívÏv&Ü™_?óhaaA­VKý~_ÛÛÛ�¡–”`¸'“I8‹ÁŠ WÈNÜÑN"‡P"½^/ô1^H ,›žÇ½L#'ïx¶o4ðÎ`CFþTX&‰oÈi?)éëT*ÎKbœœœ¨ÝnkccCƒÁ@÷îÝ Þ1x¥R)•J¥à±3ˠ¡†F¾!sŽ�ŒíííéùóçÁ›'•Jéõë×ÚÙÙ s�¹×l6Ã5ãñ8áiÃØ1G‘qÆviiI¥RIççç¡�NG•J%DŸARb½àó5ŸÏ‡t|îUH×ëëk�ŸŸëøøXKKKa󷸸¨Ï>ûLÏŸ?׃ôàÁ ‡Cåóy=xð@zþü¹:�Žþò/ÿ2,ì“ÉD_}õ•²Ù¬¶¶¶$IëëëZ[[Ó;ï¼£/¾øBGGGažL§7d,BúëÛo¿U.—S±XT½^×¼Ì˼Ì˼Ì˼Ì˼$IßË;èî@¿ßç€÷1Èä@�{û{F l$ ܃×m´Ø{šzzÄv–ƒÃ±íëàà(‘-!ï¤Ã,ÇCP&“IHa�÷q*• gÈbÿp]¡PÐÙÙYpÃöp[•öÓß�@’vã€=�íLÚiÀÞÃý10â+öÀ „�g!ONt�Á„þ�á]�~DI·õô¿GTaç¹íŽÝ†=ÇuüNÿ9æó 7}ŒyO þñÝeÜ£™œ87áúR©$éÆÙÛ¥Õj'[O›è6<íu/äsažx4�“H€�Ô¬Ïk¢úk° äÉSf9˜êó€1e,8sóß…+xtŽ;8z4|�`qÅ í¬ïÌêÀ ^àX í3ñcpÚÅV.‹‰H,¯·7ÖµÔà òwã>'èc9õç€Åžü8›B„Å„€“W>7ü»·k<fyyYËËËÏŸjµZj6›!²ÅÏ‚r}êø„§ã^ôILD{ÿr¯÷O6› g*áðʳ�†F£‘R©”NNNÔjµtxx¨gÏž©P( ‹µÄÇÙ� 0éö,,_O$÷öøw曟ÑÌoŽiÆk·ƒí¾~ú˜ù¸IIÂ"^‹yG,_±õçÆä ºžÂúØï÷5�Cb·Û )éz½^Ð[›››zðà�Êår‚„^\\ øe&sùJ¶p#ä"&V|Œœ0Aç�qK Ø/cá{('}ÑÛôc¬‡âþôþw9"r.N‰Èó=…šë§xܸÖõ_Äÿ9Ùî}ímœLnvL�ñn·«£££Ä$H#„Þ7TÈb¯8¿ÇWŒ½.^¼ôI+À3=tž !Âááƒæ¬1ïB`òù|ˆ\L¾ººR¹\Öx<NM&“pæ ÎCè§Ó©Ž��õÎ;ï„Ešûã4Zäcèv…ÁæÛ�w‡Ã°˜ùæÇ ßбyˆ#}è_XóÓÓÓ ÜŒ'ž„ç² e, ¡\‰Ó¾É£ÍN4Ð6ÆF’Þ¼y£z½êø§ú§Á«ˆ¾f’á+6”ròüùsu»Ýð .¯Ÿ¤°‰ªV«:88ÐÁÁ�^½z¥ÓÓÓ0a|!r�»tú&’èúúZûûû�8\[[ Ê%ŸÏ‡3•8»É�ÎwÚÝÝÕýû÷ƒl2bÖ™÷öz=½~ýZµZ-x’·—ö¹�|-..jggGšNoRñ½yóFkkk!š.•º —Åøå> ©C¬ˆÜ€»¼¼Ôîî®NOOƒÀYFŒ )z6;î½ãŠ0›ÍªÓé„h°Éä&„0h0¨ÙlªÑh¨V«…Pß/¿üRß~û­®®®ôÓŸþ4±…Ð,—Ëêõzzöì™þäOþDgggêõzzñâ…úý¾êõºŠÅbˆÎó°PR õû}Ý»wO!õáõõµŽŽŽ´±±æë¼Ì˼Ì˼Ì˼Ì˼ܔlt[')cÀAº%˜b•ý§GÄ�zMR"m°ƒ¦ÒÛ‡ Sbãûv4©P(„huöªNlPl!Œs\Ø;rm¢Ÿ ¨ïp8T:�N¤#ÀäyØ‹³¢�ègÒµ{¶€pœëºÝ®$…tÞ©T*¤û¡~Ãá0€²€ýdq'5ŠG}8@�ýé¤ããÞÜ…B!ØòØ�1ÁÆo|÷Hÿ›Ë¢;àÅØˆƒIØJ´%.€@þ~Æ4&‹ÌrrÀñ“ø>'=I9ÛiÜÛ[Ì�lsò‚9å}î.;º2†qtŠÏÅ�KHSd‡ù xËxãLÌœðHp"æxìÄëýXæºÇëÉØ»žq²7Iý×#|vyˆõŒ÷�;H2–õz]ÝnWÓéTÕj5ôó솴{¤²¤ž¤­Ã^wÑ£é¼nÞ&œg]“rLÎõ´ãYÈØ «¿ßÓ*õûý€ Òï³tõ¬ºƒi¡ïÊå²–——U©T‚³-Ñ;¯^½Ò�;w´ººšÈª3‹„ðõ‰õ‚ÁS0‚Åq�cR‹‹‹ÁA¸R©¨X,êââ"èVú¹ÑhèððPý~_oÞ¼ ™OÞ¼y£jµªåååy“CN²ÍÒ#®‡œdˆ‹ëbÈ€ï˜x`^ûšçÏõ~t¹‰ûÙu­M1Aäz$n»·™§^îÀóˆ”áyWW7çb5 u:µZ-µÛm---issSwïÞU­V Q6ÌGp.pGH£L&Î*÷(Îx�A�IëÊ>AºÉг¾¾®áp¨V«•À!ÓÁpIÇÜg~ÆÑEȈ¯?’HPëÂx<d'Ÿ]î}žÆÄ ýÏáÚsÍš‡œCî„‹ËÔx<}GÛ\×@zqÏcöµÑÇ„õ‚¿¡+â1·„$ò>†'¡ ôø›ëNï3—Uï#'d]øß\wúzï•|Ox}}­n·«ÓÓÓÄX%H#ï Š M§Ó°�¡x9{b¸RasN˜ b�ð¢üÆâäyãðb&Œç>dsÁ3ãÃDsaj=2�ô|›t0&D H·¹®§}Ã�Š$‹>סü©¯ŒEMAaòòˆÆ‰ót>|¨z½®¥¥%�ŸŸ‡�æáá¡:�NX¼hýyqq¡J¥’ ½¾>vÈŠ�²quu¥gÏžé£�> }\«Õ´´´¤³³³D(&rÁÐ7©lkµšR©T=fc´°°�ðšÊårºººÒÁÁ�^¾|©ƒƒµÛm•J%­®®J’Úívb¼`ª;�NHqwçÎ�°˜L&·^}�8lÀ‰Ú!Åß‹/”J¥Ôn·5�U«ÕB.Ir¢#1 ËF™|œŒo¡PP£ÑH�Vú�MùúúºNNN4�NuçÎI ‹l<›6â’JØ7�>Îô÷ÊÊJ0ZG£‘ÎÏÏæ�vº¼Ä›äŠßé; qÏÎΔJ¥´¶¶¦T*¥ÕÕUõz=}ùå—:99Ñÿñâ†z^^^jccC­VKKKKÚÚÚ DÐÓ§OÕn·uçÎ�`ü“Ó}8jggGÍf3á)Òn·µ¼¼¬ÝÝ]åóye2íîp>Ö¼Ì˼Ì˼Ì˼Ì˼ܔD”d�åv ¹±íÏq£˜çI· äF|¿4Ð¥¸]àõ¤®Øi*Çmóë={ƒGí¸-å *6‘Gq`·’�Vl‰.y€z¹�Íæà)íÅ^õ(ŽYQPÞÿþ È®��3¤3™Û3/”Ãᓈì[@Ml(ÆÌ½³É¨vàö©g^¼žÞ'±¼ÄdÁ¬çÅ@¡ö³³<Ú)–ÇX®v€”ïôö`¶göÀ‰÷‡¼ÒÈuÊëÿÝ §¸îbI·‘ŸDÊyÀKˆ¼öI¯ÁD»=Ž9;#/l:VãQlÞ6úœÏ€ˆ.×ñ˜Ä²ä ·~üï`®{¸Ïü�hb~0of‘>1iäó…ú¹c±Ÿñ‚npÉûf‰ã}8‹0FÖ $ ºÐyþžx-˜¥³càz<«Z­jmmMÍf38®/,,èûï¿×Ý»wµ¶¶–з¾>8âc#)`”à•€Ó`ÈÎââ¢êõzøïaþw:���©Ùlòˆ³uH]7«í?¤‡k� �¸ýŸ7Œ™÷ùãºÝŸíÅ¿sŸã@È´�¥·Ñ‹ßã÷ù܈ç7cë O‰ˆSr·ÛU¯× ©º...´··§­­­à¼M{ ƒ|n�­!‹�»Ì1Š^Òí,¾n¦Óé°~AÞ9Q…óÀx<zyÃÄ30ùXx_ûÿ———êt: <Ò�'öqq<ßɘYkëɇt’ÏOÇOSt ÷±ž0^±\ðÙÏKbNO&“pmŽßÅ38>ÃûÛ1LÇ]oºŒÇ{¯Yß¹Ž1s²ËÿæÏäÞ¥¥%õûý®Êu¤ÊlµZI¹ŒŠÅXR@c&� °Ñ¥ãœðÉëŸé@®óè”Xqù"³Æ &gã öHî‹0‹ 0ÞVD1ñ¼½úÔɉ4ßбر(8ÛîQBí×°÷Í“G€¸áä (ž™L&„u{?úXõÑl6ÕjµtçÎ�ÀºV«ÕP—�� õûýü»›M_ø}ãàéJŸû§Ó›(œããc]\\h{{;xd° „#š¹Â@ ]0èD«±`s˜'²çL/éçŽ��Õét4�Nµ¶¶¦õõõp`ìd2I°åŒ¡¡�NGÚÙÙ }.Igggáp½V«Ït:Õêꪾúê+U*}ûí·A^ñ q9p¢Œgs–S±X ²„œqnU«ÕÒÊÊJègúÎ ×b±¨ÝÝ]+�NëéÓ§á0ʽ½½à‰écèùÙ™ÿ¾ÁÇã˽™—Œ¥ºù|>lÖ�àsCyáÝÅbQý~?kÜ—ËåtzzªZ­¦R©¤r¹¬_ýêWúöÛoU,õé§Ÿ&6½xi"ç<m\ZZÒÇCŽZ‡ÕÕÕ@¦V«ÕЗԷÑhhkk+x°¦R7^aÃáPÛÛÛzòä‰NNN4/ó2/ó2/ó2/ó2/³SàHIg4¾Ç TläûýØì¥ñ¸Ïf³‰ôWx–úóc"€â†?ïb¿Î~`…Èl:oƒèØM€b^löÉ1èî &Ï¡~ì£=Ř?ŸwCœAº)…“'x6`œJнÿ¬©Ývw¢ÊÉÆg–#Ú,P“Ïìç�4ð3€ã~gÀ^ äyØí´9î'··\Þb †1ñ´‡ñý‰ü³_ï6œý1`þâÀv¬G1Þ {äÉm>ú<&Sâ>‹�]¯s,¿Ü“†Ø’È QD!ùœaüœtÂ)ž�€ä]Èét:M�§>æÔÍÉ'¯Èdáμ؈1hä1ÉáýÀ»ãT€´]ºuìÅÁÇUO3“³€W¿†>sŒvy½gõ³ÏŸ»1™Æ|ò4dŒ±ãH?D¸Œ:áæØN ëëëzýúµz½^H§ÿêÕ+½xñB|ðÁ[}‹óƒçítЂb4…¹ð~rr¢Ñhæ!}3�Bt©ëÀ¦Èr℉¿kVßSŸó¿ýÐüäùè'bðš{gõ£;LÄ@¶×�.›>Þ>æ1I4‹´ò6øé˜Óp8 ¸g¿ß‘Eý~?¤�ÍçóÚÛÛÓÆÆFÀŽ‘Ûl6¢I]I<âÙ×I)y\‹¯3`TŽgzÄø§;e Ø£@h»üÆúýÆ3H+ëdk„ŸÃˆNðõÑåÒ×d.ñ}ž_Ïqo®ók]¦üùÞ—.G´ÏSûI û&ç:|½ ßéS’á½Ô#Öë_|ÞÆû!—o—co'Ïv}èû¿ß÷Ç_÷¯®®Ôjµ_à%AyÚ´Y•˜ÕùNRxãø=f½b–!G‰:Ð?×=›| ¡ÂyÖÙ7D \]]©Z­{<²Á=˜0lvY„Üë!rÙ™\÷ ¡M™LFÃá0¼×•"mq’‰/÷Ëd2A¨|úӽލ3}“ÉdôàÁƒ�¢�ç...*ŸÏ‡³]‚2er±Øñ7ˆ#ߌ¹w@¼Ðìïï«^¯«R©Gš  IDAT¨Õj%È�ÅÅÅME¼�Þÿ�FCGGGá@@Œ@W¦GGGZ\\Ôþþ~ðÖÈårAéß»wOù|^çççšN§¡íj®H—––ôúõku»]­¬¬h0„pÑããã@yY¿ß×h4Ò›7otzzÂ=‹ÅbÈIŠ‘† ÄʶÕjiuuUµZ-<Ÿq�F*‹šN§!4�EÆç¹zóù¼666ôÍ7ßèË/¿Ôîî®R©”vwwÕëõ´ººš0® }.»r¦¯XÔH%@h&9P}~�7<Þ¸ø¢ÆóéwRú1ö=WWWÁ+äéÓ§ú·û7µÛmý¿ÿ÷ÿBÄ”{–^__‡PZdŠMe¥R ¡æÍfSo޼ѻᆱT*¥^¯§ååå@$3VxÕjµ°¨0¥RI•Jå-Å;/ó2/ó2/ó2/óòû\ÜŽŒ¿Ïúì€�;±u ÅíÅÏ~èwiöaÜø»=…µƒ0�&1p ‰×Í�X7ò!pbÄáq2¹ñœÅèçïÅb1ì�ý|…‹‹‹Pâ$‡Ý„Ó›ƒPxûK·ûr'»œL m£ÑHår98�­¬¬(—Ë©Ñh° ¢›ÑÇØ=x±5W*ÒÝ-..ª\.G¼|>ÿVć;k:@çxß8bü¸�ÔÝ~v ²æø Ï@&°=[‹G8±âr?.‡N28È �FN²Ð�ôk¿ßãÂxcG; 7�ŽŒÈ5×a Ʊ“-¬Ó.ÚÁõNL¸?}€÷¸ÌŽø|åÙqÄ #²ì@¯ãL1žEymp›Òç ï‰q-w¶�¥‡\¼o™çà_>éÇÚxÿ;!ñ.ûÈqL€ÑǺºœÍj‹÷¹“¡dõá|`ÈÀ=c�×Ñ¿óÏÉ0ž^R*•´²²¢B¡ ~¿R‡�žžêåË—:== ‘ ³ÖÇó8^ƒˆEÒ9mook4©Ñh¨R©„~∊‹‹ -,,„ˆ£~¿Î\ö4ŸÈó ]ˆ.áÚX†]Çk cîràú=^g‘2.Ëñ8;ÑìríŽï._ñœpÝ0k.øøÇú2^GbgŒxîQG'ÀɺݮÎÏÏC¦˜^¯κÞÝÝÕêêjâŒ@Þ5 4™Lö^‡“X˜¯sÔÑ#AK†´qRÜ«T*)ŸÏ‡óËÀ•9Ò�hæ›ë�˜ Ev€@òù¼ …BØsyºßøñ>�þfþÎZïýsL8Í*8‹øÏ?ä |œë|ßæk º�~&9ðú�vÒ þÆ»âh­Xw"ÿ·ø:À8¡ãíó9Ïiþ�‰Q_7ã9@Ÿ°–_^^ªßïëääDGGGo9¼'H#iÄ÷Ü�¾Éñ�­t»‰@Ñùddapf•�z� ò C£˜\1SKAÁ{5&æp8 JVº=+‡Žæ~'E˜èž¦Ïb_ÔY°�EöÁò~ðzÅ&g^ésÚÇY.žWe…ÒX\\T¿ß› ÚÊ"ùãÿX¿üå/urr¢;wî$9§IEÆØ“ƒ#Ä£­bVœñe =¥\&“Q·ÛÕ«W¯ïãp}}  — &%"�N'œÑDz»|>ä®ßïë믿V.—ÓáᡲÙlH+¸²²ˆ«áp¨n·Œ—; ßPN&j:½Í¯éòɦhaaAÝnWß}÷�&“‰ÎÏÏCämðT‚�–(OÆ…>uvâÄûªÑh¨×ë©\.' h7„ðFÚÜÜÔëׯõèÑ#�F£p>Óúúz06|~#ï.—n\¥Ó7yË!¼¿ÎÎÎBßú&w–g ߯“Ά¢^lœI³Ðëõôïÿþïzòä‰>þøc=xðà-åxyy"�x}놛ƒƒƒ]__‡œ°étZ•JEÇÇÇJ¥nóIƒ�!Lžâr¹¬jµªy™—y™—y™—y™—yÑL#xøã×±ït@Þ £Ô"KÁd2Iœ©Ct õ�’ª?Kš d¹½ ‰á@=¶¤)ÞÎR©ö‘ìuݡнw}ï= (ð>�sîhŽmLéö,wTŒß‹–;ñ98K]9³´Óé¨P(ïøB¡@PÆ�ú9ÀäkþÙ 8ÎrŶdÅv8÷öø!ØÈ˜�ƒ�Ô+Y¥[�búÒm žã$š�Ÿ¦Ø ñ<ˆÇί�£\¸Îy'êÇm'Þáu¡o¤Û´}€‘`*^äÜS”9PæuEæý7'7qÏöYÀ°«>/S©T ;‹ÅbLjÉÝâÈ'|þø¼q繤M7�Ä®�oÒÏsN°ÛʼÇI+ÿ £ÃhöܶG‡L&µÛm¥R·g\;Xëíöyç€ä,ïw—!d‘ïØú’ÒΘ�Šeß\'÷âÏÔËŸˉ�£b¤å"í~µZUµZU»ÝëÁx<ÖÉɉ¾ÿþ{}ðÁ!Ë�ÏEY{b9$µ£ë°ä¤ßï«×ë©^¯< yA7âXëD‹c?\‡>¤­qßÌÞ}üùî:,ú}ÎÄdLü.ŸûNPò\_ËùÝ13Þ×ù‡Úàu�ë_ëtÇN%'  ˆòj6›sÝÞÞG{@â@¾ã �ì±>ŒÇã@ăz?¢ƒc0½¾¸¸¨R©²/ÕjµpÆ’;î»Ók-˜´Ÿ¡„ü2�+È„7cQR,%)\øZCÝÑ[î àk<×8ÑãrËõ1áËóGõçd®q¿Gø¹~F? Ã\?úœCŸò.Ö$ŸK.wŽ™Æcëk¥ë,—iÿÇ=~_,ßñ{œ@æ~ÿL»À�}¾_\\èììL‡‡‡:99ùÝ‘Fñƒ}ÃȃÿÙ,S9ß(ÇZ“CáAÈ DPÜ4œÎô�vWF(ïgãÙüxdŽ/Ô oßhÄÊÑ•ž¿“Å@RbsO[}ÁeCãqNÀAÆ0y£)KKKÁ°`Rx»“ØûàÕ«W�F:==Õöö¶¶¶¶$Iz÷Ýw%)€Ý�î5™LBj8˜fÚ{¹øXøf]º™Ðx[d2Ý»w/lö;7˜˜È.�Ò y@J¹½½=u:½ÿþûª×ëª×ëšN§j·Ûzúôi8ŸiccC[[[Z__×ÊÊŠVWWC;‘ú+žXƒÁ È7^sƒÁ È©ãܹ`r£°PæÎðRæòU(ÂbD?ÅÆrW.—Õï÷Æ1uñÌéôMz¶;wî„”{¿úÕ¯ôÉ'Ÿ$”�çúö” >Ï=l–ˆ ��9l·ÛÚÞÞÄe±XÔùù¹^¾|©ÕÕÕÐ/ŒÆ©Ö©ÔÍyKxöPOÒ½~ýZŸþ¹¦Ó©~ö³Ÿ�Cú†EYôyǼñE%›ÍêÎ�;!òˆµZ-œ¥„!Úh4T.—ßò2l6›ªÕjÚßß×¼Ì˼Ì˼Ì˼Ì˼$ShPbÂÈAl&€{÷r—’ C „Åv©Ãñû,ð:zb0äwµÑ?;xPϳ€bÐÞíRö³äÎ' Ä O ð̯³Àzlöû"ò»ƒ<V¸Ç,g-@„^¼ë‡=À°8RûÐq ú�ì^/·‘�öþœ­ÊžßÉF×YãïXˆ�ë,YpÛ €aüÑél{—#úàžwP/þ¨�eÈÁ}Ç}þüÐÿ1¸å€›¿/&?c Ú纟1(0àòÁ˜8vâv®Ûߌ‡ƒÕN‚ð^¾;F—‹‹‹“& 죙gÞÇ^P‘ ¯ uw9ŠmpŸ?ØÍ\穘˜×ÆÃÇÛç }Ãû©ãz}}Rðól׫±¼ ×í>Á;yž×�ºÄ¤—žõ=•º%؈¼,‹ZYYÑÉɉúý~ hZ­–ž={¦G�%ˆn�(Œõ•;~ƒ‡ùùF.ßà�žöêòòR­Vë-\‚GÈ"ããõr"yööûg_Sféq— ŸÇŽÁ ÓÈ�/Ô9&–b}âë†ëP¿Ï_ÓcòÖëƒëþ7ÇÍâ9G?æóy5›M5�@îõz½@ªomméîÝ»‰cI ªÑ]þ7ú‡õf:�&ÎèCn|~¸Î÷”·´¼Ž3 }ÝÀÁÒÈu‰ï�œ”&2Ñçn:�çñ¸“άuoÖÞhÖÞÊçû­­þ·Y…ëü{¼‡t=C=pìöàÇM}^ówÞ§o}ý÷:ú˜Åë…óñõÈl¼¶ºüÇe–Ž‹ïå¹±¾””нî0ƒ¼µZ-ëèè(D¨yIìbâÁ‹5�þñÈcïDg@cÁpeêŠ;È;ƒpyæÞ•· ¢×ã›`Ò$%Àx'ˆÜK Á™}ßúï› žÃÆ%VN(_è#Âi§Gà µZ­*Éd§Ãá0DÌŠÛh4ôë_ÿZŸ}ö™¾ûî;mnn†w†>&ÌŽ1AJ u@qùØ{ÿ¦R© éOÆÃCٳ٬îÝ»§jµòÊJ7éýz½^·tƒ†qÎårÚÙÙ gØìííéáÇzï½÷tçÎIÒ³gÏôäɽ~ýZÓéTwîÜÑÞÞž>úè#½ÿþûo�?ƒ!)€lùæ‘ö£ û¤¿ ²Ù¬r¹\0]á»RA6¿x‚“&‚¾†4dìX0œ\Ys8réó9ž¿{{{:>>Öåå¥îܹ£•••„¡‰ RéÖƒÈ7GŒ¡�œD~Øv»ˆaŒÜJ¥¢§OŸ&?¨ØÉ+<.xž{üŒÇ7ž¤Ož<Ñùù¹þè�þHÝn7¯È!÷ûbì†òì†�/"x“q¡ÏSÏ�ÏX•J%5›Í°Y˜—y™—y™—y™—y™—›à¿ hà36†ß3 °–ö”’BúáØc:ëÀ…ÿc�Êžžýc*uã…ʘDÛón/Xñ”^ü-þîéÛ¨ŸÛîmîà$ûsR:óT'^¼Í8~I ^Ç´/�N‡Ì ¤¼p½¾¾é͸�â‡Ùû!Òn#;Ø‚}ᤀÛõØd¤»ö4ÕZ>–1(ÃýôõqÀ‰·­ÜÛ?jÝnô:SÆÑm J ì¸ÌPç˜4rop©üo`Ô=–EúÇHú»4 ¼í¼7&n3rÂÆm-ÆÜ£+èkwTÄ^d®žŸŸ‡óÉÜsÞåˆ9íuð¾B¶W_zöžëŸyŸq¡^ž&ÎÉj'ì¼ðnÆ ˜ ±€�ïý†7=äéååeˆìó³­faReÏIîG>b2çeW·¡gõ¡c;Ò­sj&“Iœùãu�ÇÀŸéøIÜŸñý¹\.`@èX°§ï¿ÿ>`ñä$#sË�dé6ºÄõ)xz¸T*©T*I’z½žZ­ÖLgeP'L|Žy›¨çïÜ]ÞgÏÞ^Ÿó>/\�¹þޱW¾{ìgzßùï>vþ›Ž×käÑqרñƒçúï1Ûï÷Õl6Õl6Õï÷ÃØlookooOõz=`YNêð? ãKÅbQ•J%q,ìõ –eÒ×U›ÍfÕn·d陫NH‘J� T]KzCŽ�ðhU®-‹¿¢O=óõó} mšµ‹÷S?ähñ‘FÔÝu:‚ˆþ‡�ü#‚ AÏ,--)—Ë…hD²zñÝù�8rÙy_oÜQÝÉ»xò¬xoËßâùÏ_îs¼ÔuN<Çãý�ÿ~vv¦ƒƒëüü\ ÚÙÙIŒÁ[‘F2ÓŽÆ¡ëT&›ÍÀ�…Þ'//,WN"¹u¥å!æ}ãQ q^ÃLæ&3az 7¹{¹žÉMH›“@Ô7ÞhÐ�„v’‰ûÅ]h\éò´P(¨Ñh„ë;�NØ|C@Q¢§®¯¯Õéttuu¥ÍÍÍ�Ò-“Éèèèè-ÅKj8Ú˱€±!òM#ýËØÐON y?6›M­¬¬$È<[¿ßÄïæódrR«ÕôòåËp?›É§OŸêåË—j4* ÚÛÛÓîî®–——U,2ár%)¤óc#áÞÔߣÊÒét0@1ÈP.l:r¹œ–——5™LyÁYTȺ°°¼ÿ|³á¡Ÿ´Ÿ "Ê"6’�;ÎÝ!‚ÌÇ9¼¼¼ÔÚÚš®¯¯Õl6µ··R²9ÁÊBÁgþæQ5nЇCÝ¿_år9ÔùúúZ­VK———ªT**—ËañCáÓ?>î¾°3'HSGTÙ‚¾üòKíïï«P(èÓO?Õééi'O£á†!Õ8"×�  ‹‹ U«ÕÄßÓétðbð|çx+¥R©@4Í˼Ì˼Ì˼Ì˼ÌËma¯(½}xö,ã×Aª£¸�ˆ³¤‘ì7=BÜ�ŽØÖõzø¡Ô¼C²°�ŶTÂÉpÒ�©8'àÆSº¹­è@ ûúÁ`ö¾ò¾�F£POÚî@ ï¿”‘n�Q'ÍPjHoƒÃì‘y'v¤ÛbŒv­ƒŠPâ,&)œùÀ˜c;9øšÉd4 BßÅä¶3v³§Es€‰ºøXx]¨³Ë-øÄ,�lÀËv Spt<•J{×Ïêñ6ÄØ‹G˜1NÈò†â¶[lƒúœrl‰¿yÛèIaŽ2¯°y¯®®ttt¤z½®ååeõû}  …Ä9Lœs…ÍK2ž>v¸9XçéÕéô‚ƒÚÌKú:�†ój8&€>pòL%Æ!œ„C_•J%M&5›Íà�È;ï0ÍçóA¯ø'ôö¸�WÜÏR2Ê*&šbÒÞñ7]ƽݞyȱ$d•ÏàŠÈ›Ïÿëe'uC'f³YmnnXï÷û:>>6<Ø!²ã$«GA^óìÁ` \.2Ï8Áµ¸¸¨B¡"ZºÝnèg,¡éS׳\È�ê—x bB‡÷qM<÷'®§Ž>g\/¹¾óuÓÇ?/Ègé·øÙÔ9Ž|pÝãú�çíõÀDZÛ~¿¯Á` n·«“““®sçÎmmm…ñA¿‘…Éç-í�F* Z__—¤p¾¹×Û׿}åinÉdƒNá=ù|>Ìo#ø¢ëÞ æúÝÂZî„írœY„óus–¼ù¾í‡æk<žñµUÈ<ºÍõúBº%µ‰P¥]ô«Ÿ]† ëx6k)kY�˜ó¾ò=…×Ùç‹Ïæríx/G¢8WÂñ±ð:Ïšï>g\>]pÍññ±^¿~­v»­N§£ÍÍM=xð 1ߤÃ˼“x°oŠ}C@”�Á$ôÎrÁ7L8&aœÃØ'¿{2ƒâ)¹œi†‚5ìõz båÈ;X¸ØüâQE]Øüûæš6RßTù¦„A&ìaöÍ }Âàær¹@�F#u:�DYÏ=l|“pqq¡÷ß_ï¾ûn0$J¥’®®®Ôh4´µµ¼w8ÔÍbêÊšN§Õét´²²”&ísÖÔÇŒ>ZXXÐááaH‘'Ýxã�ŸŸ«Óéhyy9´ b#/•JcêøøXo޼уôüùs=~ü80Æ;;;ÚØØÐöö¶VWW5�NCÔyGÙd2™�Â.›Íª^¯'÷ÎóE4�N‡h%ŸìÔÁq¯× iëho½^W­V ‡©¡¼0ZÝsÎå�…ÐÉd/îg꼿¿¯û÷ïcÍåx<kwwW'''úú믵½½dš¹€òô ³tsN 3s-›ÍjmmMûûûᬟV«žU(”ËåôÁ$ +æ3s™>dI7D*9^WWWÕï÷õù矫Óéè¯ÿú¯Ã5È&žŸ®�éÖëÌõ†oP¯¯oR_h4issSÕjU'''a>µZ­D}˜C¹\NGGGA‡Î˼Ì˼Ì˼Ì˼ü¾7Ø=*Ç÷™³Œa·3üÿÝ�O#„-ç¶®¤ÄõìãS©Th¥ÛTÌÔó~·Y==”?ŸŒ� îìÁx<Žd‘ä6.v�Í2º·90ìÑGnw¹#¤ã¢>žÞ_ôùÉÉI°Q㈟¿qŠ,Þã„í‰#ªü¹Øþ´YeÀ¾\?`w¦Óééçä£�#mw“k‘²á¸^„¤ŽëLx:?úâââ"›Œ7ï‰ç¬¿ßq%säîúú:‘ ߟád3í‹ßËéd2 ‘HÜï =XzÔåÍåL,ŸÏü…Œ0U0õâÅ Õëõ�‰È‰'iy®ëÆŸy푞Œs©TÒòò²ºÝn û}N±éíðìG’òMß8°Oý|ž±î9Žã„˜;Ê;¨ík'2æ×ÄóÔÇ–ëcùrýäïòûX fµË£tüzúË )dÅ19o r~uu¢ŒZ­–†ÃaXo·¶¶tïÞ=U*•à €Ã3ë8ëŽÏqð=²á|í)êŸßÔß×)æÏõõux( A~\ïû3\/B2‡ÃYQ„¢Ÿ|^¢ãØ¿¸S Ï¡üzþîz•¾‡€Šñ}é6’8&ù ÇoO5Îêø5ua­ƒd^Rè/ÇÞSõ1p=ì\†c™Ì%ß g1—Ág¸ŸKþ¿cÓñß}œh¥o]ÇÐ60vœˆNNNtzzpö�� ½÷Þ{Éqó/ž~Ë�háêê*q¶ Åå$PœÖ-ö^¢¸c‚Äá›i:–3:ßp1¹|°©õóÍ3‚r}}‹^¯6å0gyHœ{œ Ð\÷•/b¾™bqrO#Ú¾ººªñx¬ÓÓS ƒ@üÔj5Õj5-//k}}]›››Z__×ÖÖV·×××õÉ'Ÿh}}=L û÷ïëÞ½{úúë¯Ã„rV;jÒñcB¡tb…Ç81áóù¼ºÝ®®®®T.—:äN¬V«‰…F™÷œžž†±|úô©þîïþN¿ùÍo4 ´¼¼¬»wïêÃ?Ôûï¿(Æ^,C¿‡C5›Í ØÙ0Áx¯/à´—Pã|>ŸX X0P²Ùl WxV6›Õòòrxÿŧ™“,t¾©r%å†ã–ÉdT,ƒG íñyGØûúúº�†ö÷÷ƒŒ»²ñ9—N§CnrÎ(r2˜Ås}}=¡˜‰;99Q¹\V¹\ÖÞÞ^¨“{9ð9Þì Sxæt:Õ矮—/_êÁƒzô葤›h¤jµd¥V«%u¼c#‚þó…üòò2€år91'R©›|è7dŽü³ñ‚9/ó2/ó2/ó2/óòûZàÐtã×�J)yæˆ{ê³?t0À÷tüÝÓF“u#Þ£~$…t%n[âhädö@¡ážÎn ´Ûm]]]iyy9¼‹tÜd®ÀS=�N«Ùl†:z›Ì•¼¢Ý†À6uÛ×í|?ƒ•~uçI@Mìì@k'3²h 6ö¥”<'ÀÁ.lrêH&�b±˜H¯F?�Çãj±W÷ú … OéBÓ\±ÛôcˆN„qð’w-èd�“ Ô�耘@ˆëë‘mî„Î|q, à[º%ÉÌóù¼666T¯×9E$Çÿ÷‡³–IÍåd�ÏêšËå”J¥Ôét‚¼]\\¨Ýn�HŸ‹ÅD4ò@1ö¼—´úà¯1)î 2ívü�kX™³ü yõ뜈FG²æ¢«?×ù߉pð×g^ϘXŒë žâD/ÏŒAyÆ<›Í†z𾋋 e27gÛûÑ èMRµ�žžªÑh„6ÔëuýèG?ÒöövÐ�ÞÇyĘЦr¹¬\.œß™Ÿ8þÝãd }ˆŽJ¥R‰4“Óé4ày`\Ìaþ‡¤äo£ÑH½^/8Èûž'ŸÏÇuw4A÷Ò÷�™�Ç<`-dþ�·ºnòú#Cž"؉Ðñx¬R©žÇýƒÁ@½^OƒÁ@ý~_ív;ËÒëõ£h[µZÕòò²ªÕjˆ¾bŽ!Èsœ*—Aä 9bÝwn‚þ;äùè)°[' é{ôœ“çΕPOÖ_'ÒX_|.¢Ã=]ªï•ÑcãñM¦®gÏžéìì,¨¬¯¯ëþýûº{÷n¢o¥§CØ] QYg.]y;Áä×¢ô(_W³”W ³éă‚Å“'Ý !á!¤®¸z¢O )xéÇHï#߬±Ø±Iðvå{O1©½ÿèo)”ÅîînøI³‡ôJ–Å=•Jimm-hÓéT>Ôx<Öoû[ ‡Ã°A™L’aÁÏǃ†McùBê„éÕÕUPzîµâ ±{ìø³â¹›Ëå´ººÒa°˜Ò¶\.§ËËKÕj5‹E}ûí·úè£�R mF©çr9µÛm-,,¨×ë©R©¨^¯k}}]«««*•Júì³Ï‚·F÷ëׯ5�Õjµ´¶¶ÂMs¹\ #Y 9$2öŠº¾¾Öú“N IDATúº¾úê+=~üXKKKúã?þãÄæ‚¨¹N§£áp¢“\6!K½?`¾—J%]\\„gq6ý 9äd9 7çe^æe^æe^æe^~ߋە€AØ�ìé˜ñïöÞ<—µÒí¹ Õn£98NVö¢¾vÇ,÷2gÿz}}È)ìF®ÇF%" ²HºÍàgaCzÚ.˜f?Jq›ÕAa';°™ÌsЈ~ógÇ6^ X:ˆìžáÞnÐg´…tò½^/8Ô‘²…ñæZÛ˜@ÂŽ¿¾¾ΊŒ×Q¯ëë›tïµZ-�î$È891(L?;áÉû\£oŠÅbµícyu{Òm wtc éwÒ.B¢8Éèöªßñgw’Œq�YŸ¹7«yNü9��|ä™�FC­V+ØÉÝnW‡‡‡Z]]M\Ë3t¾¸¸AÏø!kŠÅb"5!¸õç�|£ï�Às™¤]^'¾{äˆ;W3NÌ=ÒªaSr¿ƒ„Œõt=E‰ë@9ùÀÄcÌ3]¯z¹­ìòÀx;¡Cq›¼>1á„|9v�—J¥ Ëõ`^étZív;àÃáPÕjUõz]'''! èåå¥ŽŽŽÔh4‚Ó9}‹ ;±Ò—à0’x²—J¥´¼¼¬R©¤ÃÃC---ieeE‡‡‡a-qL4ÆCc]àz’:p½ìÜã8eLÚ8È̼÷¨RÇ~�\æ>×½ŽG1\G8AÊ|eMpÙ¢±<ó 'íý=®p'} }ÅZßh4trrˆõn·Ñ766ÆÆšÇ\�¨Š×BpNúØ#¶�¿ÅÅ›c9b¹r2 r%›Íªßï«×ë…¶ÒŽ BÖ ÿ¤Ûc ®�DÒ­3ó¹e¾d2õz½@zöûý€ãXã¹|ì\gø¸9fΘ]]]göŒ-x¶ë>Æ�÷âø¯!©HпûѯàÃè"Ÿ{\ïÍ\žãuSR� H=ÚÈí˜dì¬ë^ï?Þå¤*¿ƒ)Çóbqq1q\O«ÕÒÉɉÎÎÎN|ÿþ}mmm…¹BI�F¾ˆ âI‚€"°(Ãb±¨n·Îî@qÅç‰0~í‹N¼Á¡ñt¦,‹… !$�çÞ 8.—ËÁë ^¯VÑ==ؤ# Î”û„p¯Þ�'Œ3‘ô±:’¡q©T*éÑ£GabøÆ‹ÉŦÖSï¹'�Ý+++ºººÒéé©Ö××ßbV1œé]ZZ $Îh4 ¤J_J<‹ Òγ³3íîàpǘ¹¥_‹Åbü›ÍfÂË…¶²²¢Ÿþô§ª×ëá}È�ÂçwvÂÒÇ€Œ¿yZòØ~óva#ÆdØ_|¦?ÜùÐÛår餑cØ�1A†íÄ=ãñX�FC�N'¼ãììL¯^½R½^OÈÒ,‚Ì¢ò1&‰ècê')�)ÑÏ`5NðÄ„Ì,�äuD&!„�"¡¤[0ÆÂ¸Þçh_}.¸îŽ×m¿ÇõÿCØU„~  Ùõ ?N:ñ⸥;ypŸGñyaLc½ˆÜû~ˆ9ï¼?\ãÈ4§—ØIÄu1íeœ©‹ëW×ñÌ-湯#dP"Ê(�N‡(£ÕÕÕ·ê• �\)ùÆÛ„¢ãút:�ùwNÇJÅ7ŸL@WôÞØ8€çû"ƒå(3®¡“Z­V`H/..4 Ôh4T*•BzÛ}âf27¡­L6¿–tðHI cÈ7x>ýÝñ�“°Ñ¤©C¨X|œ¬€ á<¦x¢K7àwµZÕÊÊŠ¾ÿþ{ݹs'„ng2™@À\]Ýjꊽ\.‡:QGîõðr„ÔÏoªV«�DAQàÆFšÍG©TÒññ±VVVÔjµ´°° f³©T*¥J¥ò‡t8êòò2l}±B™ 5›M­­­…1e|‘ÙØ›ˆ(%Æ ™GnÝ@e|=Dfc%JŸõû}éðð0H¹\.äof±¢þÌO�æ)ì\¾òù¼ƒAHHJ9Ï�;™Lôá‡O;KI EIœ£¾ûî; }ÿý÷auxx¨�� �œœ„…èàà@ÝnWûûû*‹:;;Ó‚*•ŠÎÏÏÃfNR ¢ãMÓÓ§OõòåKU*}òÉ'Afèß………�zïÁƒ O 6ÃŒ¹“‹¼GR"ýgA@_\\¨ÑhÏœjµªf³™Ø»'é¼Ì˼Ì˼Ì˼ÌËï{aë{;£|ŸÓÜÏ~Ý�-Œè"øÝŸÉž“t2éôM¦Šjµ9w”}8vª§vr[€z:¨ï Ùwâé ( ÐÈg0ÂÆ€˜r@Á=_qØtÀûÔ�cÀ»›Öí¼Ø‰Ñí-o3Ïs0ç*�¸ccÛ™ºÆ �÷y ¸Å f ¾@âe³Ù`ÛRÀS¢Î®¯¯CŠnçØßÓêŤ6'2A=ÜS™¿¹\Ä ‘§×�Ûâ}äòO]âþ£þ.¯\çõ¦ÿÜvôþvǘðyàíršvÑŽ^¯ð‚Ñh¢>úè#IIb…:Åïȸ¼¼ éÝÔÉW'Pý³"N�x;c°œ:8&æ™\�)rîé!yÀ ó–z¹>ˆÉ'Æ8bÀÁ[Ÿ.—NDùüò´wÜãÑ�®G|.Òÿ1)à$2á)y¿×ÑåÞeÕ ×0'/..T,U,U©TT,Õét´¸¸¨|>¯F£¡ƒƒ�œœ¨R©HJžmEqÙFþÐcè°†t:œÓq(o4º¼¼ ç1þ¤ $uýèí�xÀI–>ÄÙÀÇ•ß0÷¾÷1b>9®åcçk¨;8qíÅuµ¯7³äŒwÇòà¿Ï Þé8”cÏ<Ÿu‹`°HÖŒn·«v»R_¶Ûm�Ç7Nõ÷îÝÓÎÎŽòù|˜/³H#wæ`Íòt§îèŽÎq¢—¶x�Å,ì½ßï«ßï+ŸÏ‡lDžŽ9Éó ÇÉŒCÊ6ê�Žåz"’8ÏËIuÖ;Îg>ÑN:"£¾Ž9±Ë»qVAWÓ>s¬‡§t£Ÿ�cOÅË8£Ç‘Ötw¢€pB{&¨xLÁÿø›ë(ç �S—ßXùzáü}âs �ï©ü™.ã>Ÿ}Îx¡ƒAÐÅ£Ñ(`–ËË˺ÿ¾vvvBJT/o�iä,X¬ð}âûâ@(ØXI3χñ ÀrÒÈ=‘|�DY$ýw'�ܰ î$úÿøÇ?V¿ß×ââ¢êõzWXñNx·ö:øwJ,X>ØÞVDÿ.)¤ØËd2Z^^V¹\c8O¿2&“Û|³n,Q–––ôðáC0?�N«×ëi}}]Óé4A1ñÝÛ‚pFO¿_‡<ª^¯'€ù^¯ÂÅã �TyWWW:<<Ô·ß~+I*—Ë��áþƒƒýú׿ֳgÏBý%…:" ççç*—ËA)yŽb߀¹œ]__«ßï'¼�Ü0EÎùqAjŸÈ<Ê0�N‡Ôˆ 7éÞ¾üòËĦŒúáÂxÒ~dßçJ�E²T*y‚p" F:�ÖÎÎNXlœel|Cî©©s«ÕÒÞÞ^ }îß¿61„Ù¿ÿþû�Ç*‹ZYY !ÛÒMŽV¼m–––‚œû»³Ù¬ÎÏÏõÅ_¨ßïëç?ÿy£öè8žQ*•”J¥Âæ€pØX^}Þû²‰BŸñ®Z­¦óós½xñBétZŸ|ò‰©éŠžH¥y™—y™—y™—y™—ß÷Âܽ[ì4ç6©ä1pÈw¤¥ä™Ÿn[º·<ûj¢ñÝk•=_µZ Žnò ƒD4:Ÿ±+œ4qð€öÐvlBÀBwœt»“v°/Åž–€rìNñýn“Ç€?÷\ƒð •>ð³0âwÅŽl±Míràä‘~¯·�vÄŸý¹Ô ËÏ4òì)ØE`È&gS0î±ÌÅãËßèqÁI¶Yíò1pw[<¶›§Ói*�dŒ ŸY”ã|÷kãù“=žÿÿi¿Ë²ÿæ² X�{ý�”u’‘¾t‚‰:eFtäÒÒRpœ¦.¤0{óæ�¾ÿþ{•Ëå€?ù¹OŒ'ã@ŸÆ^üá@ôÆt:U¯×ÓÁÁ�¤0»Óéh}}]õz]Íf3D?"¿¼7Æ Á¡ bÜÅÇ—õâ‡H|×IN¡W½?}Ìh«c¹1€þ»@oÿîu¥í‚<ÌÒ7®;�\[cÌ8“ºÕj…³~8Ë¥ÝnkqqQü±ööö±¶äýìóB<ÖS„2žù|^•J%‹±c‹ë’˜ Åá9%XY#•%gþ #³Ù¬ªÕj ±ÎìœÉ>ÕívÕjµÂ¹q.wÌ›b±¢wûý~Àú8gÉ÷jÈ:“s9“ÈÏ'Â!‡y´´´¤B¡ b±Îx¤ÝÅbQ…B!m庼Ûõ2 y•Jݯð9&q(¾/rYu™u]ó¬aè4ó‰FcN»>õýØíÙâ¹èº“Ï<‡±g,�†^½zÈ£Ñh¤B¡ ½½=½÷Þ{!˜ÆI])"�|!÷Í‹ODo çäÐêêjâ*þgsÉ&–ßyžoNü³šwœ×Í;‘ C‡R×z½®n·<ÉJ¥R`©ƒ/�,>¾ù¢1k3{b"É‹ uðÅ’�L6›Õòòr8†ÉÃÂûëFÈÁÁAÈEéõ`ƒtÿþ}M§S'@òt:"•¼mLfŒ96õñFaÖFàðð0(Úu}}ù£Ÿ�üH¥R*—ËjµZa!ÿŸÿùŸÄ¦9•Ji_ÿõ_ÿ¥_üâú‡øíïïk:½Í1˦¹Ýnëõë×ÊdnÎ1Bás��‡(KOA›ñŽ#ƒÜ+ÄÄtúæ¼''Ø–––t||œ8xןÏâ„àXwéÖd£Lpàã`0²œËåÔívƒ¢fŒ7 Ôw<‡MX|øçÎÎNˆT[[[ÓõõµšÍ¦Æã±NOOC?²ÉcK7Df­V DsÓ ÕÉd¢/¾øBß|ó�>øà}ôÑGÁ�ö³�^__«^¯‡EoQúÚ7ôÈ>÷"ÃÈÞ,€µZM úñ�¬Ÿÿüç úÛ¿ý[ýÇüG˜�Òm¤Ô¼Ì˼Ì˼Ì˼Ì˼$Ï¥q ÈÓ´¸áL¾/õý±ÛZaÒ­Gl šRâsh¸Ÿ=¿;Ø HÍ5ü=”Xv[†zPìnì,®s¯\@žãÏp§¼Üž  ±ó¦ÛÂÐ:`é6Œÿ͉ŸY€·“kzV�8t¢ž>þ¾§<]Ÿ¹Æí†XFiWâ˜@ìhȽNÔø8ŘýäÅA¨Yßg�üÈ+}ZN.xûi‹;ÏÎ"�löÏq=~ˆŒˆç�}>ß‘ïR©¤|>Ÿ XI¿7 sñç#3È69¶-D”¿ÓëÛ¿€ñqÔ[¬›Üq9þç}À;œx�V0 æšGƒ9.†Ì»S§Ÿ‘äÞýüsãÏõºxûœ4⻓ó>ï\NcÙ£nþl—§˜\à³?ÏÛâ¸V\—Át:ð ²­¬¬¬hmm-è{œÝONNôìÙ³€w2?ÀE_pl�yìàðââbðØ'ý–§1#ã XèÕÕUÈ–ã rŒ‘òÙSø¹§�‘GŸ›`±Ò­ã3}åº:N¥Ï÷Xž½ž1¸íóÃÇØëí¨G®0Ʊ\þ®ºø¸ð äý YÔjµÔl6Õív•J¥´ººª÷Þ{OµZ-ô_Œ};vE´ëX¡PkdiC9cœk}}§óùƺ0 tyyðuÖÍáp¨^¯ÁYÿÁ…=z×çÎ&àZD[êõë×j·Û¡]�F#DƹC�� d'ú¢ y§ÍÃá0ñ›ËB.— 8]©T ø6N´ÉÇÀ×�X�º®âœSè{®wyw™�÷4~�ïfÉ;:Þÿîrí²ì÷ÆÏò9ïÐG¾ÏEO9¿Âï¤c<:: ©1S©”ÖÖÖ´··§���™{)"�¼8Sæì6 gñeƒÍ¢Æà¬/,,rfÔÏ;I¥RTõð=&‘/X4˜Aô�zß8³æ›ü¥¥%���é׿þµF£‘ºÝ®F£QÈ—ˆGD•Ëe•Ëe‹E­¯¯k{{;L°xA›å å Ñ'«/f~¸ª !?ßäâ­Õj‰¼×Üçy2½_ñV;::R³ÙL(ußðV«U•Ëe%}uu¥ÑhÎ}’’ 2A�ݳÁ7ì‹‹‹!üÖ½}È1ìýããLðî³³3]^^ê›o¾ gÿ 8ž>}ªý×Õ_|¡“““°)B±Ã„w:��Ï7èômAz{ …‚ªÕj‚𘵉æcíp¼èAа8¸Ñ6™L4 Bý}òz¾sdÛ½}��Fêõz‰Ð}"¸z½^‚Èâ¾ËËKµZ­+ï×!x7æóùpÞÏxÆ32ŸÏk}}=D•ùÜr£‰1Œ ? ó\.§Z­¦tú&ommMög¦B¡ þçÖßÿýßk:½9;‰ ¿Ÿ_5/ó2/ó2/ó2/ó2/o{n:ð#%¡Y¿ù÷˜â7|±I¬dßÍ^3& bðØÁ#ö� [‰(öín§b °g¦îN¸p^×aôû=x6ûùÀÔ5öôÆÖŒ‰À,öäqÙ/»W¿kq‹”�càÑ�oÞ1�NƒÃ—?û[ÓEú,¶±y‡G<¸\Ä@ÿ,ù¡>ô» ÈK*u{F 6K zºª“'NxÑß~­D±lÇòÎûü^ï+'ÃbÊ�TH‹�^öÿõ»·ÛûÞÛB� ˆ�1q"KÀËÜ#®èg�xp›u2™„¾=2ʼno‹ŸÕï1�GØ8�ãïñûˆØàyNL¹N�nõ×R7êáïtBˆkø DZ�ŒpY‰ë{ÒSO—͸ïbYt2`V™å˜ë€:ïrœpVx>¸e¿ß—t9º±±€ptN§ÓÑþþ~È¢ädy<¦.7Ì#'2™Ût_á©%‹Åb¨70DŒH·ë“ù©Tê-Y¦°¾�¹Óý€ì€O¡¯ùsç#× Ž…R\ÄÄa<ÎÌO Îî¬ô³ËÀ,À|VqyàÔÍ�(i6›j4!ºfyyYwïÞÕÚÚZÂ�ãgÕ±†ŽÇ7xˆÞ�8a^-..jyy9ôiL:òÝ÷8 sn=ÑpDE ƒMŹâDÉù¾#îÞ 14 trr¢W¯^éüü\­VK§§§zñâ…þ?öÞì9Î,«ú^9HÊI™©ÔlË’í²ÛT5EASt1/DÀM÷ü‡\pÇMÓtCw]ƒÛU¶à»±¾¢¯¾wã=3o ½_�Ø<ǃãdrS®^¯«Z­ªÑh¨Õji<¾¹6æÞ½{ÚÝÝ % çéæwî4B˜ižÞì„€°;A‡Q¥ÌÊŒ \åos‰0¡…B!<Ã70©~¤|q8H³Ñ1Ýn7J°¶ù|^‰Ä ËŒÐIJa›Í¦úý¾*•JDÆÑái¬N!`Œ!÷caŘö�°´´¤^¯§\.§~¿¯B¡6³¿�Í5ƒ1J?]öööôêÕ+}üñÇ3äC±XÔË—/g8À=ïÇ9ÂÀ&ËçduuUGGG*‹aõz½’��BYï«§ÕqH¶Z­P§²T*i4r¬\.ϤôN&�ŸŸëÕ«WªT*ÚØØȣ喗—Õëõ‚pŒ¹"­ÊïaBÖø�; ®üëg!ùaî=}rçÏktòs‹|ñÒgÛívˆ¨H§oÊN¬¬¬¨Ùl†Ôlßÿ¬s&“Q2y“ÖšËåÂó·¶¶ IÄÀÅÅ…ž¯ƒ´€Ì2À<ùZ;¨â`#FøeÈ~–ûªø,õz]KKKÁg%3ŸŒ¹€4bLÈ™“‘6Ñï8P ‘è`—Á€�K¯ã—‚ðsö�—�ŸGxô8‘é. Ì+ãó=çcˆŸíÏq{ñÄ�qî�ÆãñÍ]G”˜G¾Ø>Nö e2‹EU«Ue2 …PÆß�à˜qÐ<&HâÌ_oþƒ·Ž¥9ææú*–g||°.—— ÿžëX'5\æø Y.ËËËAžœàdl1.â-–k\æb}ë Îp]MÏôsÛu†“]<Çe8†d'ÃkµZÈÌ©Õjj4á³Ož<ÑãÇ�Ã÷!b° À›ü\ã¼M§Ó!&Þ#컕•mnnJ’jµšr¹œ$[Á¥!§°O¸�‹i¿sœì"¾ Êþ†x!¨e0„ŒÆZ­ð·ëëëp·ÙA*•JÊårZ__÷¿/--éèè(Ìq¯×›!¤��ô MR©T(oë¿wÍõÁûÖÙqýÆgøŽ“pȉë?“cBØßç{žgúíÏs�‡, ?â‘fËF"OnKø»�dä¹þ.äÆ÷ºc4©V«éíÛ·ªV«ÁFM¥R:88Ð|¸�Ø>¤½þ΄¹áç·ƒíþY°/ª/>›ÊI)W\$‰rw@ÝKk‘É”ÏçgÒ±˜”,À´+M¿p‹CÃ#pÖ×וN§õæÍI·™ÉdRÍfSÛÛÛaáâ¿c>6|ÌñÂó{ú‡3BíxóñN6¬“C¾a˜×¸n6¶»»«_ÿú×aü”ã äÝ®ìã¨?&“I¨Ýn·õàÁƒ`p_]]immMÉd2Ü5åc÷þ¦Ói­®®j{{;e¤ùƒ w¤÷Â’¦Ó7— ¾}ûV¿üå/5õw÷w3µ¿Ý1ñMÆ¥_¬—GùÚ»r§À�wôP öÔ*õ9¬T*a,.+¼{wwWý~_�N'0ùÈ;ãK$n²™ªÕj˜SéÖI•J¶±^N¼B9A‹C].—CÆÖêêj8„�@eßžœœè�ÿø�U¯×uxx¨ñx¬Á` ^¯HÄ7oÞèêêJ§§§zñâ…¾÷½ï…û�8\¾üòK}óÍ7:88Ð÷¿ÿýÇ<“É„hOd“ý‹cÑh4f.#ô5žgÔ3ÝØï IDAT÷©T*”Ü«T*úñ�¬_üâªT*ú«¿ú+=yòd†�÷Ã<›Í†;›mÑmÑmÑmÑ~Ó[ „»ýƒ·1 ˆ=êv±ÛÞ1ฃõÎó¬åååà—àñ¾8s& ¼ã¹cÿÇ ‡“Fîã ðoÅ Zé÷`@"œ±Eñ5ÃÇ‹ýAæßïCa ˜¯˜a½< Íý|>ÇœøÏé;÷£ÒÀÆãq¨­ïWØøZ0—úŒã Zì—’0gNáA1ïëä‡gz8Gø»œÐ|ž}¼ø�^Ä}ó³áùðºïïŸÃ÷wq²ãñ^ægÞ·˜@spÚ#ðYwÚÑh¤n·²ì ˆ˜#î¼_®CœTŸ¢?Þê} }<|ÎÁCÇ¿bà8þ7û–g¶Æ¤ƒãnô‡þ±Ð±®d߸ìÅ`?ãèõz3Dsès羳υ?ÏeØÁ>3O/»l1Ÿà|qœŠõ1ýñò–¬Åõõµr¹\È®,—ËZ__W­VS§Ó <ƒÁ@¿þõ¯ÃÝËÝn÷½Çÿ]vyX s HÌï £¹C�™Íf&ļd³Ù�9Àú¹»¬ÇçgŒÉ²üß¾ã}âr4oÿ;©�îôýï ·7×;žAëïóŒÏИ§Oçé$×A@÷z= Õëu�ŸŸ‡µYZZÒææ¦>|¨ííí°/ãò}þ‡q³Ç¸’…u'Kˆ3›9ÝÙÙQ³ÙÔÙÙ™îÝ»dÌ“þòN²Š9)]–ö ãýC³Çn ؾÑhâœ9ív»�äL&o®ö¨V«ÚÝÝU§Ó YŸ“Éd†¬õyw»Š}ÅØâÄäŸ÷¡÷‘Ñ8 %ß¼ ÿ ÏvÂvyy9и,¹�ÂÏ]¹¬:îÏ;c щ]G·ûø,ràÙƒ~®xsýéÿ�ÏWúF§‹‹ ©^¯‡$ˆõõumllhww7`ö~¦z›!�8Hüàõ…bd)Ô™ Ý\J]POse€Ï ‚‚"†eç÷nøºñÙjµÛŠP¥Ói=yòD½^OµZ-l®d2î!q!¾óââB™L&¤ka¸_^^êÙ³gºÿ¾J¥R8ˆX`”UÌ’º"£!|®Ô\¨ýß(šø�."c³‹ÅÀ³–Ìë‰ ŒF#moo+“ÉèôôT�= Ê„5elÎÎæóù�ÕA›Ü îæ!*+™Lª×ë…áöƒ—uFòÜ{÷î…’y”š+ 3—ÎÁâ)õå—_ê¿þë¿T«Õ1”ÏçC:%câ÷uaý ¦ù¥x(`ÖÍ7öH¬PÙK0î�•®ÌöööaÃáŒÂÂñÛßß×p8Ô›7oBtJƒ5®T*ªV«3cñ4HÊI ãÑŠÒͽD(ÃÉd¢ èw¯×ÓúúúŒ¾ B£^¯«Ýn«ÛíêììL¥RIçççª×ë3œ¤�ʺ±±¡O?ýTƒÁ ¤ò’­ôù矫ÝnëoÿöogJÒ±§‰Ö�Àa¾§ÓiÈHët:! ü°v»ÖØßå¾Y 2ù<:å$¡!‚}>‘eüÖy¿÷½ƒôÌ«hN006d‡ÿ»ùxÝ_vŒÃ×™ÆÏü»È/ e¿ßW"‘YìIJHdÉ~õÒòYÍ>öw"ÿÈN,wÈzL޼@G°óñƲé` „~:¡ƒÿÞ7~Ïg�ür]âï÷ÀéØžL&3�¸óÀ'Üâ9ó1Îó©ãùr¬ÌßÁóà�GÅòå$Ÿáotß°ÍçóÚÜÜÔééi¨²Bðì³gÏ´¿¿¯­­­™±¸žc9ñç@þx<x‡Ï¡ËßøO$áÞ‚r;�N˜Ctú‰1A¶ûþ¦Ÿœ—ó°FôŸÎ $_£xÍ�Ä÷³ÓeÖÿíûÃõ–�ƒ9v]ë/žéòíx³¤,9€¨«×ë:;; äa©TÒǵµµ¥L&38îîërîY¬«««3�Û…B!œ)0ßívu~~®ÕÕU‹Å�‘Œ[%¹Á¯ÿÀ^Y]]�!§x‡g³VÒmæ0øåd2ÑÙÙ™Úíö þç˜ÚêêªvwwÃçêõz¸ZÄe=ì} ü׉p—#dÔËÅy9×Y.‡ØgóìA—Ÿ7Îjdw^à‘ŸÓŽKϳSx†ëÒø<ä�ë-—QIOw{•ß¿Ï&ðyŒÇÁÿyw¿ßW½^×ÅÅ…...Ôh4´ººª��mnnêîÝ»�t[4¶§gH£X ÅÊÜ>»´´¤F£¡�� …�âÉEö 2.YçN�?× bŒ&ôÅ‹J&oÊbu: …�}ôüùó�Z: ´³³£D"¢ýI¿åÞ¶ymm-”’ÚßßD×£G�´··÷N DŸ?|YXp�€ðyäy~øáDæJ ažƒâN„?Ó‰g8‰DH‡ÝÚÚÒwß}§G�…¹F�{žçà<^lä0G‡‡‡¡VåxŸŸ)7çk/Èʺ^¯ëç?ÿ¹¾ùæíììèÓO?ÕãÇ�CJ.ˆ(Œ‹/Ÿbâ�u0ñÏ9ˆ �çà7¶z>ŸW£Ñò…—H$Â<‡ì< ˆåþ„t{_3àêdr¼ÈúÓ7æœÊÌráþ&ïŽ.!óx' î×:Ø~}}öÏ|(;�Üpò/ó}�ößC\1fö€~³Ù x‰D"€žÜQ ¸™HÜÞ…˜ÏçÕét”N§µ¶¶6CúyÆ cC‡¸ïO}M]®Ø/óÈ�Cóg̈†8ðR{è_~Ï>œå3®ï\Oò'‘OæÒÁýuß™Ÿ¹ï<¯Å /òìÍûè ?kÍCÿd2™P  �>Pª1‘¸­2²²²¢Ñhte"qs%E©TÒ«W¯”J¥B¦éÛ·oÃýÙ>NÖÇ3ÂXæsiéæ÷F£¡f³œ§Ó©Z­Vê¦ÿ+++¡Ü>�Ùä—J%]\\Ìœœ�Ž� ›X/ôµc?¬;ºØƒ€=Ð �âz€ur¹�ôÞåúÉן=4�8Œey2™„„±nbßúõýGßS©TЃËËËj6›j4êõzjµZÊf³ÚÜÜÔýû÷•N§ƒÜpn‘áC 4ÏGM§Óp—J2™ ÁÜO…Ža-®¯¯õúõk=~üXëëë«dO£“!—––ÂxŠÅ¢ŠÅ¢Úívx.$�ï_*2y‘ñD"¡V«Êó���)•JR,™¶²²¢F£¡/^¨R©„»•¤Ûk;Ø›Èö ¸9ÿö€ˆ&ä‡=åøžcsNhH èJ?c=èr‡ªh¼ýcÁ^êRÐ÷:{ÄË"ó<Ãm'ׯ|&�NkyyyÆæä™~~Ƹ¿Ÿ§±þö +Æ8�iT¯×f))à“�È.ó¼Ï�F,/tÏuߤ’”Ïçµ³³£Ñh&Žôw¡`¢sÝÐwÅ�BdQG£Qe¯¯¯µ±±¡““ ‡C}ï{ßÓòò²:�Žž={¦t:êòííí&ØkþB`pWÑÚÚšVWWuppJš¹P¢�ùañ1È<�ÎõXè=C)V|�1Ïó>�áàëåÌ¢¯›ÄÙñ˜}¿¼¼ÔÇõüùópWJÚXw �gsó|ä%�N‡û£D'AZæe™�¯#Ê�ùõÍëŽ ‡ˆGâyÄ“;M~€qzäD"1sqD)Î ëwuuù««+u»]5›M%“Éà„xvV½^W¹\!ãCQ'‰`˜×ëu‹Eu»]¥R7åØC›;7ÈW6›UµZÕÒÒ’šÍf8´¸«P(èÏÿüÏ5u||¬r¹¬étªO?ýT¿þõ¯Ãå¤ëëëZ__ŸQ|ãñXÍfSûûûzóæ�~ñ‹_heeEñ䃹†Pã½^¯§R©4é¤kG›¡“ø7‡Ýt:U­VÓïÿþïëw÷w™‹.ð !Ä©£;Ï0^´E[´E[´E[´EûMmø6^ Æ} ì7¡öS7±ßÈsûË#¹Ý?£ò„Ñà�Ĥ„ûZíéÀ`�GO{Ÿû•�F<_Rãòò2ÜÅɳœ rÀÀADžæ‘­’f °�ßGȸÿÂZ9 øçÁvÌ¿ͼ?:dmbHº�¸Ç‡Äoó’^1èÂïÔ0b~®¯oËW�F£¤8�ƒMïrˆ J·Aƒ¼××àÊ3ЦŽñÀJ/=ÈØ¹ÿ‚‘Ïã�0ž˜Às’„w¹/#ÝF*¶B2Öëõ@Ø@:‚ÑÌth÷1^â?“ÙÆš³¦Óib¤’>,kÅú9€íã Ñ¾Ï˜Y[°ªy¸�ïÏ·‰£º å®iÇh®³œ|r*¢õÏðsßs`Nâ1Ÿ€„îïÆŸ™N§Z[[ Õ?bâ‹ù^YY %]·ÒG'S�$C¸®g�]ND¦Ï>¯Ž’u†ø\;fÉ\!C`)™LF›››ÚÙÙÑóçÏé:�ôöí[�œœ„ SdŽ9ó`öýŒ31»Ýn¨T„þ`ŒÈ�ŸAÒM0q«ÕÒõõµ677C°´cfív[A‡p^‚¿I³ ¾“÷ȉc¾_ø ȸ÷ñúú:[ “$LÙt½ÀÏ|-øŽOŒ¼v!I?X®Z ’çøõõM…ªz½®jµ*%“ImmméÁƒÚÚÚ ýƒ° gì£ÑH¥RIÝnW­V+·^–ÖKö9ís VÕl6Õl6µººdØï¿šL&j6›[â{·-œÈ@'£Ï&“I¸k‘ù,‹á{Ø[­VK———ǯ\^^V±XT*• Z]] X.óÄ>fþ�cì'ÖÜ p—9ÖÒ‚Øg®÷ø7úY (Ÿ5—�}·ÛœoàL÷~16ç=èW{°n1×Îsð·¯8CÀhýç1OÀ{|.=ðŒß�ƒï¶ÛmµÛíÐçB¡ B¡ÞÍÝô`þ¦Þf�LÇÝø¦ù�Ƀ˜€øóƒÃ [”>—vyv‰¸ÜYãà0ϪT**—˺{÷®ö÷÷U.—µ¶¶¦��•J%íîî† è è†7Š—�˜L&uttê‹v:�Ð_�ÖŠHgó\¡¹ÑâŸóÃ&Z~Ë�rqÃÁÿ†Hñ2ô—µô2 óŒhpggGËËË:>>V.— ƒ /Ê„ï“æGT?§ßd¡¥Ói‹E]__g§P(„g¹ñí8LÙð~÷Ÿe¼ÙlV•JEétZÕjU§§§3.‡dlü»1臭Ë —ËÍ8¬#Ìþp8Ô'Ÿ|¢L&ÈÒÃÃÃàà}ÉéÙOd£ÑH½^OçççjµZ:;;ÓÒÒ’ …‚&“‰ž>}Þõ¯ÿú¯ÁÁB r8äóyU«U ‡CÕëõ ¸†Ã¡–——õÝwßi:�êÃ?œQ@­V+¬wU¹!~uu¥óós½~ýZçççúâ‹/tzzªþð‡Z__‡;g|ו¹ëö ²í²àcbŒ˜üþ¯ÿú¯õçþçZ[[ ²LDû�>`Hð÷êêªmÑmÑmÑmÑíÖÇÑÇÎöòh1 á€*¾¶´4{7 š—Ns¢Ê�"†ý¹Ø“îG:±ÂûÄ`LÞŒpgÞ�Çø�ÎÑWìV@:|´xq"Êç�ï¤Óé0ßóJŸ¸Ïà•<øÓ¿ç[ì#;àÑå>Ÿ¦ns3NÚ1'à#?Êøš0Ïd"þsæ À_’±á›0ß1qàà°îãùø˜÷Aø*ÏA†é#óXäQø|_Í]Fé7Í3ù\¦™wI�¨ñ+$½,ëk/ÝÞÁë?OaÎxä*™@‰DB•JEÊçó3ãd�Ý·†Ðcø7¾,-Xãýãrì{‘1ðù˜HF†ø½±àHNDÅz"Æx<Ø××�¾ð>ô¥žGbÂÔ÷“ÿ,™Ljuu5È–“9è!0æšqûz8䪃çè)/»ð¾¯Ü¿ÔL&oKá;XŠì8éúš¿///5•Ïçµ±±¡õõõ ™LF½^OÇÇÇ:== :!r�È£ßÈ)˜!�Ø^a†¹CsÂyl'vmmMÙlVÒí�hdР率ќÈ`>�ðt]ËsüLuç÷Œ�€\x ïxŸœû9êëìྒྷ¡ñÞäüqÒÂÏ6æ½Ùlêõë×êt:�ô¬T*:88˜¹bI@@8c�Ç!+ ¼Öuçì?0Ù\.§�� ­¬¬¨Óéèââ"Ì%W5p65›Íð]t¤ñ™Ã½o½^/�[Íf3T�ò` Dz¤›³ ÙlêââBõz=$Ylllh_!˜ ßïϸÇÖÌ�c£ØX®Ë]¯Æ6�ë ×{®ƒý,Cß æê¸å3ôKº­îD#àÅõ˜Ÿã”Påç1®cãþ}Ç·Ýfp¾ÅÏ}ï¿¿Ï÷ƒ“rÜeT¯×U«Õf7¸òÅmFÞöÞëõfæb†4Š:þ¹2Þ!a¾—H$Â$²Yx†¬ž2X�pùf@!°ùH[Îårºwï^Hçü/—˺¸¸ÐÓ§O[{}}­Á`6# x*• ‘Woß¾Õé驲٬†Ã¡šÍf˜6ƒ“>GæcEÀýïy: Åáï+|×I&Wün(Ó/”V¹\€µZ–l–¥¥%èåË—� BðOSK$�ý÷lB„›{lHÑä s’ùqåÀÜúæqF¿X,†¹$Ž1…4ÏR©¤l6«l6«b±8cL0—ݬ#kí$ )©½^O¹\NOž<ÑÛ·oõõ×_ÏÔWžgPø!âŽÿfŒÛë€QÓjµÂõàÁýÁüA8¼‰›,%R`§ÓiP@ƒÁ Œ;ŸÏ‡èD.¢c¼DÈ”J%­¯¯«Z­ê‹/¾Ð·ß~«Ÿÿüçú÷ÿ÷YÀ<¹ó�S= ôúõk}þùçjµZúàƒ”Hܤˆonnê믿Öòò²îß¿¯áp¨“““ þϞ?®Ÿüä'úå/©»wïêþàBÙ’XW± ‚1¦�HenIÿöÛoa)éÆ.k„óÅ"”Ïó8©\.7sP,Ú¢-Ú¢-Ú¢-Ú¢-Ú,ú>àÑ�§0vç›;nï�Ãá08ø<×}WwÄÝ?s#~?ö¿“Zþs'­Á_Œ}A·ýt/�Θ°ä{nK·°€CІ�ì„Ûö̘�Ì¿!9|,€‘€}ŒrÎ#êôã�Nú9I ¨Ãú9qÆ3™?*NPBŽçâ:�îÀ|f2™€!àãð€é›„ü{Î3C| 9ÍeÏåÜA#ßNô8�ìïwP8ö¡Ü‡En=Ø�±²Žô9&fï�åÝ÷h:�€h±XT¡P�t‘ŸÉdB&C¯× Àéõõí}ÈÍ«LPòêêJ­Vk†hrb˜þ3?1îåÄe rJ·˜ÿöùøm1`:ï�fŒ,$EÁ͘k°ÏR‚\t�À¾bm}�˜úÈI<î�!à?[R�鿤1!ƒ¥’qî¥ÓȰs2ØõrÒï÷Ã^ ô~>Ÿ×ÖÖVC¡PP©TÒÙÙ™¾þúëÐúG™-'µ¯®®”Ífgî‹ãÝCP‹\x P_é6«ÀûHвº:9á`sLÀÏ®]÷Æx£c�NþÄ >¸®“ÎqP†Ëªï~/iF†øœË0káàý@>™k×Ë”« j4At»]èàà@¥R)`7Ì;óãÕ{ÈÊ ;‘àmï+x¦ŸÇœ)�~…BAwîÜÑúúº®¯¯U¯×Õl6uuuJær9M&“�í ÖŠ>t=ë™Y’T«Õt~~®Z­¦v»‚Dx?åÊjµššÍfÀìÙÓãñXgggº¸¸„i¹\ÖÇU©TBõ N§ÎE'ëH~ k—çbI·õŒÁ1à~¿žËYíö€ݾ™w?×\®\î}_À ãœdvÒ)Þï¼?>�AÞévN¼¿?¤ï¬·>¶q®¯¯C0U·ø7•¨(ù\¯×CÖäÊÊŠvwwõ[¿õ[!`Ÿ,²^¯7£'\ßKiä‘|Á�zgÑÙŒÞÒ­ÂvFÛ#|±�Pq…€¢ô �ç“v‰±€Bb£g³Y5›M½|ù2ÜU„’ç=ÄL:Š·Z­%í¤RƋϼ¹ñÏxýwŒÙ§ w¿ßŸakcö•F_¼tkÂæK&“ÚÞÞÖææfø.›Õ# P¦ûûûá‚,”,"7:è u6›}‡¸á™çççºsçN0ÚÈêrC!&VüpF=ÒÎ7’§X’I4�NC™º•••p9Ñ1hÎôºA˺0?ì�N§£££#�Çc}ôÑGJ§Óáâ ðèFϤ�^>å™H$‚¸¼¼ ìÿË—/õßÿýßzòä‰>ûì3mllèÑ£G* �FÚÜÜ äãö²D¬¸ã‚#×n·ƒãÉÚs`œ��i:½¹—ꫯ¾ äÉññ±ž?®££#¥R)ãíg?û™jµšNNN±¼´´¤èúúZ÷ïß×ÁÁ�>ûì3���éþç‚|QsxyyY¿ýÛ¿­{÷îéääD�NGò'¢µµµ™r‹Nȸ!ݔΣԞQ Ô¬=99™{xÄsÄwWWWí‘Þx\tÑmÑmÑmÑí7µ9pQº3Ž­í�fî„c_{—Þkê»/ƒ½1iäÁ^NbÅdG ÜI·@’�Å …y ½÷ü<ñ8âg:àê@L\€»5öáü¹NæÄï‹ý`÷Ù¥YB2ˆÏÆà¡Ï»ƒÔ†;ÁPå~$ïäw€F~o ¡ƒ¸|ß�t_kN=èÑ£¦Ý§õ1yð+¤cðÌ:f}¬Q“I±ìxŸ�òç3/ãñXù|^×××á¾ZÇKx>>ïÛ�¬ñ}çD‘¯‹“YÞ0#馔ÿþZI3�ƒ¼YòRwÞ'Ÿ¿ã‹10ß¾—YgÇbâ=ç:+^ëð‹qœøÿ´ÿ�˜š§c¢ÈeÇq ×O¾G|žsáëŽê�ÜÛ´¶¶®Ó€¼Žõ·Ï•ˬË1ïã{®‹]>|/Ř$Ÿaú÷b‚qÞZ"{Þ×y{„wp~øÏc¹!(¬k2¹ ž>;;SµZU§ÓQ£ÑÐt:Õúúº´½½ô^2™œ¹¶Âñ9úÞívC†Ûòòr |þxû²d:�†l0É^¯§f³©Z­¦t:­õõu …€EQÒœ÷ø~º¼¼T£ÑP«Õ c¤òO©TR±XT6› ™AÌ%xéÚÚZÐŒ�Š]‡‡‡šN§* J¥RÚØØÐÝ»wU.—Ã�]äár�H$fî?ò»sœ˜pLŽ=‚삳—ý,ŒÉ!éÝ’…®Ïü,Dfôñ{ð‰7ŸW…¢±öÈ4Ïñ÷ú~ÀVйÿcñýJÿùþÌ&“ÉDÝnW�F#�’ý~_•JE�=Òýû÷C)Òdòö-잘0’¢;�b.>¬Ü�õÂ……Àáçún|¡$¼®o*us× u}ãùá(ݲ‘Ôä›NgË P ’IHG¡9¡Å%s¼ãÁƒáÂzØüÁ` l6;­_ ‡�å!6ˆÝIa| dŒ=Ÿw…Î;bÃÆ7‡( ŸwƒÁ @øõõõ@|òÉ'35Jc#Á�.¤É䦞åññ±‰„ÖÖÖÂes“ÉdF@BøÆ§ï’fˆ~ŽQì’ª· IDATnÉäÍ�>½^O›››áà`~K¥R˜{oÞM–�Ï›Ë=F©��FCß~ûmˆãÐæ ¢¬¢¯µ×öuǃµáPòÍŽñ{}}­ííméüü\ËËËzñâ…¶¶¶tçÎe³YµZ-¥Óiõz½@tÖj5õû}ýçþ§Úí¶:�N�u2ÃÚívpbœTëv»êt:êt:áóhµZM?þñ�C„A:�Ö—_~Ɖâ§äO~òmook8êððP§§§Z__×øCýã?þ£...´··§f³©ÍÍM---)—Ëimm-”%øøã�õèÑ#�F#•Ëå`@±þÌ7>D5A¹ Q±×ë©\.R´P(¨Ûí†õp²)‘¸ÉžÜØØ2²¼¼¬z½¢(Üi!È ÛE[´E[´E[´E[´E›ïsÆÿÆÏqÿ€ï:Ùâ@¡;çüžÏÌóËþ7Ò„Ïy`�;îÞÿ™ûjø»üÝñϰ!€�4Cá3(ùóüå»´x.c°Öý>Þé`+ßs’ÂçÆ£Úãõð5õþ9�äc�}b¸b°ËÁrÏPâÒùëëk•J¥™`ÄyeÊâ5žG$ðü˜tô19؃âþ…Ïs *ùxcyö9õ¹pÿÒeÿN¬;OþXïãH&oï­v@5~�÷�>:VÁý~2îíò;‡ƒý¾úâ„}Œ�t7s=��H$nï�âÿqÀ¢��6�Ĉ×a^‹Áuï¯Ï5kìóéÏçp]æÏˆÁVßÃó@~'Û˜{' âýîò?�ÞT°aÝÎö½�5ž§xÄà)»^cü~ßS¼.È nèÑ¥¥%Õëu�žžªÓé„ê!KKKᎲ zåw4ô„ß�××�wû}G�FCÅbQ™LFÛÛÛj·ÛAŸ¼�x‹ç#Ö·ñ\úÚÅ5Y<®k}î‰Û«%ü�<ÃßéóïÙ³ñ¹írG?|¼>f'ÛŠ +æââ"ÿ‹E=|øP;;;!û†çñ —×+�N'à£Üî€cµÌû“gŽF£™û�ÐswïÞU±X ú+Þg^ÝKºÕããñ8dÐ1Ž••åóù0ß\áû+™Lª\.k<ëõë×3:€*Eoß¾U¥RQ¡PÐt: ÷E�F#���©Ýn+™¼)mé84ïà|¥OŽé»¬Æ-Ö§1Iè{‰¹»‹ÉÈ÷=ŸÆ:¹.eýè;ëìA^ 6–!?cãs(¶yⲈñyâûÙûίB¡ L&£ÃÃC=~üX«««j·Ûj4!ÒÙo·Û3Æ dáéé©ööö‚<²'———•Ïçßq0mÑmÑmÑmÑ~“›ÛÊóšƒïó¥æ�ŒóÀD¾çN{ü9ÑùYÈè~²¿×AÕœ@ˆ÷¼ˆð^Þ“]>~|.*=’Ýýi|sϨðy|òÀ6¥¼)¼b‡GÌ;ðŒýë r<×N9N0oλ=ø3Òí=¸î·òÞá÷‘òlø<àË÷¸*…�¿2Ýùÿ÷¹Š3r¼1@ÆÜ¸Üºÿ˶?‡uÂDvºÝnXcJ! â3;Y‚.€Þ7—…¸¯Ì%÷zà÷2W`à@^1¤ÓéhmmM™LFý~?ÜyÄüðN|{ ¦!/ñœ²]~é—ƒÃ.ÏñØã}¯•Ï›ÿÛ×0Ö1Èïx�÷ÐÙåÑIÆàw±Ä%%=€Òu–—ëbßI X؉g|Ð=™LÂÝn7Ì->;ÏrãIþùkd>®%ÍÜß”ÏçCÕ¿×|8êíÛ·ÚÛÛ ï¼"1›Í†ì~îëï`6AÊñyë7ä>›ÍêôôTÃáP[[[Z__W£Ñ¤h|NÆçE|Ö9ÉäóÏ,ß`YŽs½O×Ä`y,×ñþŒKîÅëî |ÜG?Sèãx|sçP·ÛÕ`0PµZU«Õ ûüîÝ»úè£�T,gös¿¼¼¬^¯p0*sÍår3ògƒò\dŽ=Q.—Õjµt||Î[ô±ïJ;úDÆúyoãž{ðy*3¥Ó·WTÔjµ™ 5J”ñn¿Fd:�ªÝnëääD©ÔmE§TêæÎ-‚­[­VÀ»Ð~Žò<ßs¼Ÿ½ÑëõByÇ~¿îpâ|ò ×£<ÛÏ×XFçÉ`¼wXûT*ʸ---©Õj…ùö+)ØŸžUÈçÿ‹õ4²ìäú<ýêÏã9‰D"`þÌò@ðEµZU½^W¯×S2™ÔÖÖ–>øàíîîÎ…P5Îu52îíÒÈ éÙ.- AÀ< åHÚ•È~ø:Øë²o:_ X^ˆ"gÙ766ôúõk]__kggG•J%}ñòlnhÖ{-×N§²U|á1”œ< š~·†¯+núg8D 9ܸvãab~x¦ dl|2(d߬½t­óàÁýô§?U³ÙT¹\V6›�¹t•Ã�ù ª"ŸÏ£OºQv§§§ú£?ú£Pr�ùÎd2ïl0ŒPÆèF��…5d3µZ-I „Ľ^OÅbQºwï^X7}dÑ$7ª��…€AÁ×jµpa¯×ÓååeP¼1ÙÊÆŽ3´Èîá÷ÜÓÏçÃa1Õh4BÖO»ÝVµZ õ€?ÿüsýå_þ¥ªÕªž>}䎻»üÀó½³ëUÌÑòò²ž?®ú§Òéé©Z­V8̼<›Ë²�ìqàµÛm}úé§úŸÿùŸ�NK†UµZ}'ÝRú«¯¾ ÆÞ?üÃ?„ùDQ~———êõz3)òªV«ªT*ÁP… î÷û!Skcc#\~™Éd”Éd¾¯Õj*‹:88Ðd2 ‡[³ÙÔ�;wÞ1Þ‘QO'^´E[´E[´E[´E[´ùQÏó­\—fïiu_Á#‘ù.þ¥×š÷èN§“vó.áñí:ãgøÉn»ßGÀï�Þ-§2™L‚=Œ]N,qŸÚÇ㉃ýóæ�gÄeÿâñ¾ˆô¹â=øðÌ3þÈtz{—,ýÅ/q< nóÖÛÁø˜tÁ¿%˜Ž>&‰ pÛ}óyà| ÊÒoüÆ•ÉdfÆÅZÑ€ Ö�>ò;/ó〨�]z·tšË­7ÆâÄ�ßi¼¼¼ÀþƒpytPÔçyðïÄ2ëóà€>ߥd‘ìì]îÆp­Ûí¿Û >yïŽeˆ÷2�±Å¼½„w�ÃÚÆÏðùúßÚÿ‹Ïèïw…}…oÎÒ/�Â÷ñ£;]ö}n�$� éÝûÄü{ŽGùþŒ×"&|ÏÅ„ïp=â$±Çï/·@žÐEÅbQwîÜQ§Ó ˜òõÕW_©T*éÞ½{êt:¡ßde2™P²Þ«Í8îæ@Vx¿÷ŠL|"àêêJ�FCét:ÜÑ=�NPϺ~¼f^]byž'W~.øïâ€/8[\‚4–çyg*ó…œÑWß¿Ž3Ï;ƒ�‰Ñh¤N§£z½®jµ²¯®®t÷î]Ý»wOëëë3rø€^"]Ï@Æ%÷Tþ!ã/“É(ŸÏ¿3ÏÅb1”ps=ÝëõqÅ3È4⻜›ù|~æÞv®¤ _TÜbrç ÄãÒÒ’òù|¸7ÉñÆR©¤·oß*•JÍÜO?!ýU.—µ¹¹©B¡®‡Y[[ W]lllÌo@Rsn²Þ�STÿqÍ÷·ŸKœ1“8>'nÓpîð�Ø>£¹Í¼Žm×›ñÊ¿ã³ÂÉ~Æè}×,‹êõzá^+²Œòù¼>úè#ííí)“ɨ×ë…ç�Çã�°±¿²²�h3¤‘+{gé|S¹Q’L&ÕjµT.—Æ" åáÇ@6›Ë•+ 1Æ ÆJ.— 5«Õj üDJ±±‘(O[v@Ü�¼T*2Àë2»²tgĜޮL!ˆXtÞK %5–ÝpCKš� ƒa„ìJ§Ó¡l×<Ác^|CAZÐÇ��IÒÉɉ=z¨Óé¨X,†z|eeEý~_ÅbQ�FCãñXÅbQ/_¾T2™ Q@\jyyy©µµµC7Îa®é+†½�áúúæÂ´jµªF£Œwäååee‰£Àæã"EO{å³Y†òƒ€©Õj¡?#ÜÙäŠ ìkÂúß¹s'”e;;;S&“ µWÏÏÏÕjµ¡B<ú̳^½z¥|>¯>ø@/^¼ÐååeÈæ‚\Cc#‚ùðÃNšÍæòy¸¼¼Ô³gÏf.£ã»žæFYhܱÔï÷upp è?þã?f¢#1d¼ì $¥¯©Æ;;;�X+•J�P&J#nuu5ÌC·Û òÉ<�ôÝwßiyyYår9PÈÀÊÊŠºÝnˆ:I¥RÊd2Aî!Ù“ív[ÝnW¥R)”Ó\´E[´E[´E[´E[´w3%Üw‘fý®y¾ƒZجäB»]Ö¢9(9¤ð~88ç h ÂÆ`}�GîÐ7ì`€F¾Ã³±‰ã÷ùœJï–¯ò;_Üÿu²Åçâ}}Ž�;¾Ç|þàg:¨#½ \ãó¹çýˆÁþÿí�’ÊÇH»ɚÂ/Ç×"0Í«uxøÿååeˆ$wR.&#ýYj;xƒ1Nò¾ Z ÄÏ›¾Ëx l£ÿ~G‡ûy’.kŽ Åû’ÖeÿlL"I ~u:�¾,€�‡O,ÝfŒáûƒãx) óâÙ7ñüÍÛ“ó€uÿãºÁ×5è}møü¼Ÿ9¸è¿›÷n'½¼Œó9ê`h<¾ÿƒìõJA.�Þß[”q£”Û<=Ã;â9�ç—q#?ñüÐ\Žbó²^3ñÁŸÏçóá>™túæ~hÊÙóÍ7úþ÷¿¯>ø`&À=ÎÑjµ‚\zÿ‘ãD"*ÀÌÛë’B y:�ú‚{µ�†VVV”N§U(B©0éôfï9�×qÿâóé}2?ÞèîóòïÇ 8{Æç LæÃ+YźÉßÃ9×ï÷Õl6uqq¡~¿tÛþþ¾ööö´ººúís5�þ ñZ*•$){g³Ù@8ú]0ì;>ǸÀ€J¥R¨ŽÛì•^¯²£¸¯œ³ÈÏ–™ÈM/7–ÍfgtdŒ­'‰@~B‚mmm…+�ÿ\.§••]^^ª^¯+ŸÏëÎ�;! ÈÏÊ^¯§N§3˜ƒN‚ �ôbß!»Žk:žîvëÌÏ׌uå¼3/¶_èrãç…'I ‡È ²ë$OŒ÷Æ¿—fíƒøY®+=ÁmµËËË™³Ž30�¾¹f†,£jµªT*¥½½==yò$Tq¿÷óR›,µ8åÒÈÁæëëë‚û@!,&“‰�FèìêêjXx¯Uêéun`ò{&€æ¿_ZZ ¤Àáá¡vwwµ½½ØZ6‘2(M7ܘtÞqÃáBÄH h­V B狎áëæõ.cÅÊ8çUd: …à�ñûûØ|d¢°Ù}}â”9Mo®¼Ý!™N§¡ÚÓ§OõÙgŸ©P((™¼)x÷îÝ0Èïc>QœÏŸ?×�;w‚CZý¡Ô›“|î\yt"Ä$ß�FÚØØÐ`0Л7o”N§uïÞ=íïïkmm-¤€’m2™LBtF<nósæÐÉ#ÖeÉ&ƒHqƒ36ÌÈØÙÙÙÑŸþéŸêñãÇ:::Òé驾øâ‹pø�5Åÿc�ç!Ÿþ¹¶··õàÁýêW¿š1êù¬ïÆéªÿn4)ŸÏƒ�1ºûsQªÌ“gÒ< òG?ú‘Þ¾}2‹ïSï�¬I$úÕ¯~êÐ-ÁA~uu¥­­­�åÔn·µ±±¡\."v …‚>úè#½|ùRÒÍA^¯×u~~®{÷î©\.‡Z³�N'��¤„siÝÚÚšŽŽŽf æéìì,ªì±E[´E[´E[´E[´ßô摟óÀîø³1¹3ïs|ßÿöƒ¦î�;Øí@'>žßmÕy@{y¯˜Ôq°×ýC€2ÿ? cì¨I·‘ÒN2x 1Ž‹� ·µc€Æ}^Ï–aœô#^÷‡è3ã�ý~æ`�û>çü;~O Ìà[8àÍ\È÷}¾ lÅv÷Ì|X0†yXƒYöy€^,;î_Æ{ÁçÎÉÕyòísìĨµ’BU 馊B¹\V2™T³ÙT©T kí–Wt`ýãÊ'ü<^ß“±‹O�J¥Ôï÷gª8¸÷û}½~ý:ô%ŸÏk2¹©ºC&(U}È0ZYYQ»Ý™Cív[ëëëJ$á>qd«×ë’Š«gè'�'è·Ü^‹Ï?½¹‰eÝÇ¿ÁÉ!‘wÖÙ÷ÏŽI¦Ø^uýIÿüŒvrÊmGÇK .‚saƒ�ÎÏÏCYºV«¥‡ê·~ë·t÷îÝp& …P­ ½A ÿêêj¨´æm†4Š£Yè´gǰá!–*•JP.Ãre“”ÏrÃÝ '>‹!|uu¥ÓÓS­¬¬¨R©èÎ�;3J™Éöº�ôÛ³Üà€éDI1fHRå\]11>7ì]8#‚æ‡ ½Ùljyy9,˜�‰ù‰•¬¸dà,--…;v‰DH�í÷ûºººš¹ÛÉÉXêd>yòDÿò/ÿÊy‘u…ó!)(,„íêê*°Ü�FCµZM÷ïßÊÖçÁ°8r‰5ñw!‹.OlÖÝÝ]µÛmíííé{ßûžîÝ»RF™2¸ !¹ˆÑ°øýnà°–Ì1‡JùòòRù|^•J%”èc¼N¤Ü½{Wßÿþ÷õá‡*“ÉèË/¿Ôññq(‰Öl6Ã!Àr¦ž¹£_ÓéM4A¿ß×_|¡¿ø‹¿Ð›7oBj¡+Tw4œÐa|Ÿd³Ymllèââb&+Еq,çA¡XùC䔾7›MíîîêÏþìÏôÏÿüÏ:??ŸÙƒîdÅ‘“ìkŒ=Êó‘ID¤N::‚Ùîv»Z]]U¡PP¥RÑéé©z½^ˆ2"E˜ÿc ¦R)u»Ý°OØù|^×××jµZšL&áÀ›Lnj6oll£gÑmÑmÑmÑmÑÞuðݱw�Pº½÷ÕíÍØ çgN8ð3i´{ðîνƒ@<°9¶éâ€'ž‹¿ƒÌاñêÁU<Ã˼y9uþíѸØõ1€÷/]ãõˆA÷GçÍ{ìÇã?a³Ç‘ùñœ9¾à?Ÿüð^¯äáÏç¾e¿ß×ÒÒ’²ÙlÈ‚H$j6›á’pZsÉßï>x"‘˜)]OÔ72†à8CüžíA‰1 ÊÏc Ÿ‰ù÷þºOçà¾“Ž“Éì] ` {UÞá­øî��ø¦È‰“xžÅØ�“@îãQÞ�>Ñü�~¿0_+Ñ�(Œ—]ø±ßâ½àëϾóÿÓb‚éÿ¯½¨÷ÿÏÓ�±Œ8êä¦c±\ûysy�Ÿé>p<öÑhî{¦<×€ë°îóÜëuǼߒ‚ìù¿ù>Öé驲Ùlx?eÊÀ¸[:Îh¢èö½Î÷ Ùô ,¢×ë©ÑhHRÐk¥R)€öñ^Œ×5>/ýˆÏ—ã8ƒ‹Ÿ{F\vÓÏ®8ÁeÏÏWÿÏ÷}ÎA'ò%ÍàMý~?ܳÃÝÛý~_•JE<Ðææf ~Àub¼µÛíªÓé„5â9T’�lìõz3óÀ3�·¥¥¥@˜€/“E®zvv¦V«5CÀííí…„‹ÍÍÍ0‡¥RIÅb1žèåƒK’')£èЫ«+e2•J¥ðˆ�L&£�� =|øP———:<<Ôh4R¡P¸u"q\&¿½½ˆc°R01Î%ô¶¶ Ù-ŒÉ+�qÖzF òFõ+Ç7cyŽuY,‹n;±w<ã˜$�>1§üÞ?Ï;ù9ÍÏ*ÿY|>!ÛÈ&rîÁ”’ët:zýúµŽ��.™ÍfõàÁ}ï{ß çþ¼†m�N§Ãúúù+½'ÓÈA|˜“Glg·(•Cê‘OJÄ£|x7D‘¤�’¼³³£\..h¤™—¸cÑb%âÙ/±B ã”4Œ^ ó °ôÿ÷¯F£¡ÃÃCu»Ý ¯î\y´‰Ë)亣ӉL¢çÎÎÎT(º¡»šÍ¦VVV”Ífu~~úMÖÐx<Öéé©VWWƒ~#ên:�ªÓéh0¨T*i<«\.«T*©V«©R©è›o¾Ñ“'O4�NCVúcÑmÑmÑmÑmÑn›ûM1˜â^:Ëu÷#܆Ɵ“n#—=Í}�¸”nKÂyÔ©¤™2^4'pÄàÞlA| Jásx€}ÀÞŧÁ‡rà–>Æ@<ßw¿ÏAâ<àÓI#'»¼t€ö¿$Ì  °ûzq@)?§ßž™Àû= ÈeÁ %Ö<öS=òÚÉ|´T*~î`;ãÀ?tR ¿ Ò?“ùg½©€ÂwÉFˆ‰Ç!¼š†ûBNVľ³Ë=Ïbn‹Ï9þ®¯=Ïã3`,1iÅ»¬wYòuu ñ —×y¤ }q<•º¹Oƒ>QnÊýSæÏn>C´x*•š©ZA_˜GÆÄ\û¼;ŽÃ=³jž>óñüom)ÄÏœddœñçX__W�Îç{އ@lr—±¤¹÷q��°¿|îøÛÿÄY)®kÛ´c—ýáó�nÀ_‡ØDF ’ö€n—eÆÅºÅ„r ®Y©T´¶¶¦ÓÓÓ ‡ÉdRoß¾ÕË—/õñLJwår9•ËeIR³Ù Y$1Væº/—Ë©Ýnk<Ýã{ÑÇàrÀ˜&“‰jµZØßëëë�¸rlÆŸë×þÿ¾ËM¼ß}Ž}¿º®týìç¸ë 'À‘5úɺ/--…L鶺�Œ�ì¢F£îs¯T*ÚÛÛ Y•^e‰¹w’˜ Ðå�Vè î¿vˆ{ʱF£Q8óWVVT(”H$B 7Ù!ÙlVëëë�è"àüääD‰D"ô�}u}}=s/=û—àxÖ <œ3ˆ}%ÝTœZ]] �\yB™º­­-5�€‡Ã€-W*•†ëG ìÈødzöb�ãòézÕíÇ­= `^ãsÀe]æzƒæØ:kоBÞü{žØàvß÷€¥Ëõ#ƒÈSÕˆ½ƒ®ƒ4‚Tãn³^¯§““U«Õ@íïïëþýû!ÉÇñLöžgžÒ'áh3¤‘3ÂüÍaì¤ C„ÀÊÊŠz½ž¾ýö[åóy}üñÇJ$�%u&ÝŸáQU°…r0è Ã�Å÷~ `­V+kñ��бiüГnË£9Q@4wÕć›+fÓcÁ�£|øÞ`0P±X ïÄuÁA°�ð![ Öš¢7Hë�Fj·Û:>>ÖïýÞï…µˆûÊ;8ÖÖÖ´³³£çÏŸë‡?ü¡òù!$0Û IDAT¼Ž��Ãa‹äõ�†’É› =¿ùæ› a¼qrø¹;:ÈÆ&‹€§R)]\\è׿þu [.//uqqÊÝ9¡À<3§nhňoX¿ÓÈ +ŒQÞEÿ�+Òëƒ�²Ù¬2™Œ*•J(‹öæÍ}ùå—j4anòù¼ªÕê\¹å½…€¢ó¾?}úTü±ÖÖÖfY5ž×ªd¿¹bã äà¨V«* !ºÁež½HDŽgbµÛíPƒ¶ÝnkeeE?øÁôŸÿùŸJ&“zôèQØ{ì3Ê x­NŸœ<ÿ¡PÐÚÚÚ YÅ…ƒÈ:…BAý~?ܵEÍ×Á`0ãŒI‚.( Z]]ÕÅÅ…ÎÏϵµµä,—˲j<ë‹/¾Ð~ðƒ ë¨Å½h‹¶h‹¶h‹¶h‹¶h7Í�0ÿÙ¼ß;8êŸqÂ"ö½$ˆAl/-Â3Üÿõ¾¸ËßÞçÌç÷±�A±{ìðhk'«øŒßËâ¤U2™ ¾/ïÁŸÅOxˆ£þnú“|Û Â}²Eø·ŠúZ8ƒïÄç=ZØ%oþ3Õœäÿ\^^.—U¯×5Ã=¼Éd2D~ó.î`e¾ñüRhV=*02®èáD‹“¬¥ƒ¨Nzø˜xÖ<¢ÔåÔ3š¼¹éßç;NƘSäĉ"–Ï kéŽË¦÷#~€Ïħ åžaÖ?+DdŸ@æ9؈¿ï™±|ù˜b�ë€y-Þû1áò˵¿Ã‰§x?øÜÇ>º?Ÿç�7y¶�“‡ìÉy¿�Ðqü`iiIwïÞÕúúºr¹\À©üŽ“ëëë’;¡?›~ÇãrRÉI é6눾81@)²ñxð!ëõõMI³\.§J¥Àùdòö¾¢““êw~çw&Ci.Ê™9éc%ì`?ø¾rYd^â²cTÙlV;;;*‹¡\X¼oùÃ:Åø'ïñ³(ž[׎=ù3b‡ï{P¶ï—oÇÞ|�Á©|ùwœÝq}}ªöÔj5]\\„ X[[[ºwïž¶··�ÌÙȘ=p]ŸL&C™hô|3›Í*ŸÏ‡ye��æŸ2{Óé4$XPÊmyyYµZM»»»J§oîâ¾£b±¨óós%“É�@Á�«®¬¬"Ñ3whpR׫D!¯$/¬®®jmm-½^O~øaÈnÿ­Õjzûö­¶¶¶tÿþ}moo«ßï+ŸÏ+“É„R~ý~?ìÃØNbž‘qìÎÁËËËðÿø v[ ùô}ë?ä=èÔÀœÅç£ï ž�Ìø~‹ÏÈø �õv¼÷E_`‡8O¶»¼¼¬v»­Z­¦óós5 u»]åóy}ôÑGº{÷î g±‡¾å å}ŸÝ5C9sË$øæð ŒÑÑh4¨�+%ÿ,*›å€rsÅ‚â†áeR‰ä!«„‰•n�jÞͳüprFÓ?ã5�}Ó»!Of÷7¹òç÷ô7n .�.Ü.ø€Ú™L&(ÞçÑœ0ßð0Þ.ÌŒÁ…v8êáÇú·û·P^Žƒ`ùÀ8N&“�økµZºsçŽÊårPêNü°F€ŒÙKú%€îˆ¼~ýZOŸ>Õÿù?ÿGÉdR­VKÇÇÇAù;A…l¸!ÛNÆF’çÑ?Jýù&GAµZ­pï i‚ûûûJ§Ózóæ�^¼xîÈ‚ Ea’]Nç9Оu³¼¼¼J¤ñû'Ož„ˆ¬B¡öQ[€NfB® oÈòÉɉúý¾ÖÖÖ”ÏçgØÖ§+™Lò† æ°\.«R©èéÓ§ªV«ÚÙÙQ6› Ä,òÃÚp@‘DTÙh4R½^ý‡$…H][[ Dz©Ñh„L0îGk4* ÊçóªÕjá28 7žCê¯$ëÑ£Ga¾+•J Uû·[Õj5ìÝ~¿¯­­­°÷mÑmÑmÑmÑ~Ó›¼(͆ø|î9ƒ±�ÝìÂø¦øž8Ø6ü>.-×ívCð!—[/--…;üòx|çB¡ I3Y'|6‘¸ º¢TÀ8‘øöz�>ÑøÃ’Ôn·U.—U(B°T:�V§Ó >6™þ\ˆâK*{‹É!‹ƒ)T‡ïÜ1Ã:çr¹@œЈâ• œx#8 ¿ÐÁ0¿�0ˆ@Fá^¯Æè æãtŒµGÆ #ð $tˆq°”~�=Ðçû!®*á?§/<ßÁR—)÷Ñ‹ýn(¿…=è>!倿3èã#Òg/+‰Ä;}ΊÅb¶fY'@ÚN§*{ÄÀõ`0Ïeý¹¿CRdÍ ¯¯¯¹À»À,ÐUÌ%ó4ßÜÿÐëõf"ý™ÿ˜0d�üŽç˜$õl!ödÃx<W¸~£I¥R�°©×ëÁ7§dûŸ=ƒ¬e2™P]‡€VÖ™q“=¸´´ʰ17Œqoo/d30ßÈcH$AÏ�«°ÎƒÁ à`„èðð9°"Ç P]]]�!PÁnœG?øþO§ÓÊçó*•J[á{ÍfS§§§!°Ìr4i8†õC‡�–8 BÀ.w&ƒ•y󽎼¬¬¬¨Ûí9£rM:}s§7úB®¸/†Ì&߯`6Ùl6œ >ï~1§œe1î꺼P(„¬ŸÝÝÝ ƒ X®®®B€.òÃ]Úö"Gì“ëëëp�ã^èŽV«¥Z­¦z½È“T*¥�>úH}ô‘*•J˜?š‘MÇ´(µÖívÃ=C\}‘H$B%Î;æŸ@~ö{·Ýn«X,j0¨Õjéââ"œ>ÔîînÈú�Ø:>>ä:ùJ$Aö¸ŠÃçÓõU„8›)K‰:Jû±¿ÀÀS©”öööÔívõõ×_k:�ªÛíªÙlêÅ‹�F*•J3çÈîîn ð¸ üêêæ¾qd�~£�Ø.kÎ1 k=À›³û‡yKdm9ƒûý~H^ “LR°¤Ù;íýüš‡ÏsFò>'gÝNrÛ}ÂÙÄó ó˜{t:}ŒÌ–Ëe•Ëe---©×ëéììL/_¾Ôáá¡Z­–R©”vvvôá‡2Ò39G¹b]OÉAÈDo3!�tÒŇ—>C�# ”Žã0¡TY¹\žc9Œ©+Gá;ûøÏBa`°HôžVåÆ%}g!9”|�Á¦‚Èâ¹áŠÙ™ÆyJŸ9&"̉‚8 CŒ>`Ø£øŒÞn\ûÑé6ŠÃ�æÛçíþýûúéOªÓÓS … $˜çÉd 6‰3—3ƫ׆eÂ,£¤�Œd-½o­V+0¨ƒÁ@ÃáPõz]ív;.ŒCÂÙZw4])ñ^悃Àl9‡+‡ëÑh4BäÀÆÆF8ðõöíÛwŒ9߸D§à²V\ÊHÆÑ S”PcL81WWWÚÙÙ 5R×ÖÖfdÐSŒY'O=ë¬Ýn«ÕjéþýûaÎ0þÙ+Ì‘3üŒ—þHÒéé©Þ¾}”%}‰ ãD"²„Üðæ¹oß¾U·Û sEJm±X ‰×GÅPãÐq‡¶X,†¨ ‘n· SöÎn¹\žI­‡! ¥Z­rŒ=ŠÞ4X´E[´E[´E[´E[´ÙÒJNÑðÛøLäåÏðïc“ŽF£`OByt9v+ecw°ñ�Ìr Õ£ªã¨p�x´÷qâCû%ßn§c¯j:Èà~9ó$Ýü‰]ïD }‘nU~çþ‘Ï-;Qä�ùÀ“î�×(^?þ8ˆâràï¨ã> "ýñÉ ÷çx$8sècâß¾®î;¹�íóàÄŒË/¾²á ’gkà‡ùüÍ›_ozp©ã1&࿟·Ž ÈgÜWä}�¼Nz°¯ÏŸX>¼¾§ü¹óþˋϷ3.ÿŽ;Åkäý‹ûÅø�ˆðùö÷Æ}Áÿç�è+t:\Å1:Ö’õr¼Ð2ïÏ�N§Çá�———�œ�TGy¿ïôv¼?éÛ<ÀO�±*îó&±P(èââB§§§zóæ�=z¤���p™|»Ý~'ƒÇõ.¸ÿûl·Û£/Ìû ‚ƒ¹ôµç|êõz:>>V¹\V±X ƒë$²D¼�±¼úÜ9)í{ßqSו̽ÍôÙƒâYßW�åÓ×ÉåßËàår¹P-¦ÛíªÝnL�3a}}]Z__Ïñ ¯jƒ¾§¢¯Ùl6àÆà§`œÒ-^Îs}ϲŸ.//ÕjµT¯×5™LÔéttvv¦T*2¡ �ЇTáa-ãÌ*~>±~`_Aþ£‹©zÅšx¹2ö$ó;Õétttt¤““ݹs'ØLàq™LF[[[êt:ê÷û!`ÛKûz†„¸ Â~AW:9ËŠ�™=ÎsüsR?Þ[|ד °ÿ\fùž±|/¶[]†]gÍû 󑇌2~dܸÑhèÅ‹:;;ÓtzC2ïììèþÿ-KG`{,žû¸9ùíí�;�`‰Y7p]axç!gˆlÚÚÚR³ÙT2™TµZÕêêj`”=š)6L½.ð¼ÃÌ J.KD°w�€á@Cð}3; è玄G†Ä ‹÷"€®DFi–ígÌN¶øÇFBè$ ?c—nŒòN§ÖãŒÌ „Ã$7ð|Ó`ær9mmméÙ³gúþ÷¿ @H7–ØÐ———:::R±XÔææ¦¦Óiˆˆñˆ+ßhÌ¡G!1žÑ”J¥txx¨z½®ýýý°¡ˆÐk·Û¡ODÿ� Z©TfúêJˆþxM2™ sì†réæöö¶8þ‚W^µÁÁ“Èw�ÝÁB÷�y¶ûôæIšù ?gî\®Üçp‚ÑÁ|'~c –zÄ$ÿvâ.ýc™Ž÷ ó ¨“Y¾Nü?Ñé/AvŒß/Á†‡‚°ó€?¿€Ï2 …°ýró FÎÜï£dYLhºlúœÇ€7²ãDj,|ÇA<×;î‡ÆN,c4Ï¡ò ûÊõ‰s^ÐßáóÆzøÞAv�-pçb±ŒÁñœL`Þœdöÿƒ_�éDÖÏs‚ÄIÆà2ï)²u< Û+äx\Ç»Ÿ?ßÞÃ:úÙÎæ:†¹õÀ„Á`2�ÖÖÖÔétBàA£ÑP£ÑÐÓ§OõàÁ­¯¯+•Jéôô4TGqä8ÖÊÊŠƒA¨üâ%òÀ¾Ef‰›ŒßG`‰È ðÑÑQ8?É0ã3`tìC'Ã]'úÿ}Žæî/=‰ ™œ-ûù‹ô=ê$™Fž½èûÜ dþuu¥V«È;£ËËK•J%=|ø0ÜëÞëõBvÙh4R¡Pçž¿RÚI;Æäç€Ûà˜�LŽõ!w£ÑH¯_¿ï;;;Óòò²Êå²vvv´³³£D"¡Z­°\t,W¥€—¡o˜¿Þù@'0�èeÇ7)qæúѳ ÙØív;TqJ$j4zýúuPçlšNo2йÚ�5¢jåmãŒcæÙƒ?r¹Ü;drégˆŸwü9ãLa�ŸK¥Ðn·õøñã��áÎ ‡? Û8>áÀ8Xû««+U«UM&}òÉ'ÚÜÜÔëׯÃüb´ºQ‚á‹oH昵qÏ�*”*é{ív;Èˇ~¨»wïj_£ÑHOŸ>ÕÑÑQ c�k7ŒÅååe}øá‡zøð¡~ùË_ÂÂïò )ÝÈb ¾ïÈž™L&!«e{{;(Éáp¨—/_jggG> iè(0™¸þéîî®666‚œAJyTc¿ßW©TR»ÝûpwwWÝnWÇÇÇzüø±*•оýö[Õj5u»]íïïÏ)�d!Æ{’ÿsñîd2™!K¥›C�±///‡¹ôÃ�5œL&êv»¡ñÉɉîß¿¯�?þx¦Ô!iŸ‰ÄMVäëׯƒAðᇪ×ë)•Jéþýûêt:�PŽ�‚8ÅsÑmÑmÑmÑí7¹ÅþŽônd¨Ûõ1à?Ç�¥˜@$rÿ!Ž uÔ�iÀǾ÷ˆcìV‚ær¹œšÍ¦Òé´ŠÅb(e ɃÿMtûd2™ÉB" ž>Ó�ú�oJŠw»]]^^ªR©¨×ë…@KúëdýôŸ9°ï~’û¯N¨8hÂ::øÇóð_ìqÓ¿ãe[ðÙ<( Ï�3(ù�¤pÞ#–ýÿN>ðYÆã$1ùàóꤑônÉ3—ñ÷‘?±Èó]y¾ÿÛÁzdš9£R r뾋˽sPÆû�yÆ×gíXg— Ö@¬Õj…Htîm‰3Â\.\ãµó>³?x¿ßNôxF‹�%&óXÖ‘}“FNf1nHZßè­ykîþ0}qY`\®ð—ÐD&!_}�úçÐqô�±9ÎÆ;�”vsy`_øøøÏ»™N§!CÔï7‰çÔç@Õ‰@ÿãû5ÈÈúúºêõºZ­–¤==�õôéSýÍßüÍÌiècßßÈtœMs¢È3¼JRL²%‰@tPekk+ÜCÓëõÔétÂ5 <3^—{C¿ûï|ÎX/×?üÎud¬©*ãåù›¹ñ=íx�ïO'J ¶S©ÛR”———:;; ¸å¹vwwõäÉ“ È>2çx¦ÿíí¼»^è³_eÒétF5 fJ©¥R©p÷L£Ñ¥R©Ö¶¹¹©n·«n·ÊÉ‚¿B¢´Z-mnn‚Éñgæ…=Ìœ¹íâãç"—7öìh4 ™w”V ó ªV«‡ÚØØÐòò²Z­V(‡I D"¡N§£N§ªù¹ëR?'\¡Û]gÆç=r“ý®œËð=Ç0�U(‚=E°اŸÏÈ�ã|Ì-}ˆ«Šù™ŠŒ�7ò=öd�— äjIáÞùW¯^©V«›òàà@�?d)‰`¹ô“÷£{ÝŽaO{›!�è(‡ _ð�ßã‚RòÍ6�Þ¤}’rëÊÌ�7ÖFS"qSw2ÅÝ@ð´<ŒLgþp*ÜÁ`Øðºo@7ò 0x'u|“ɤ>|¨_üâªÕj* :??×þþ~¸ãÈß èŸÍfõðáÃP3Ô #ŸC)séŒ=”»PJDlnn†ïår¹â'Ë !?\ÙÇŽã'£ÙlJR(A¶»»êÏîïïkooO;;;‡úî»ï‚q�‚tÇ‘ šH$tpp O?ýTŸ|ò‰Òéÿ�½3ë�<¹²ûÉäšûJ²¸—Úºº¥nu·ì¶Æ`°c ÀðGœÇ�~µ_ìñ2I-K½¨«Õ]{qOæÎd&—Ìôý žŒÎ–?€2€Ydòÿ�¸qï�ˆsî½1¢È”ažãÍ�“‹®‡dñÎ……ÕjµPÓ7•JéèèH�NG­VK…BAëëë:>>Öüü¼Ö××CÙ¸jµª/^¨\.‡¨È0jbâ ™·³³3}ôÑG�é¾¼¼Ôßþíßj4éÕ«WúÅ/~HšwïÞ…è�jµœ!uo�ÔuÝñCYBÔ�&mØ7n?ø§d2©V«¥N§6/:;;Óåå¥ŽŽŽ4�µµµ¥ååe�žž*‘¸ÍÆbñY«ÕB½Y×Ùz½®Á` áp8‘ÅÆåš³6k³6k³6k³6k³vÛü0ïÎñW«b0ж18!ˆíYùÅbQÃáp"X-&hÜò>Ç™‹ó3Àƒ¤p¦p`Gš¼Ä“—Šƒ("ÓŸ³ Ÿ“îpCø½—þfÏN?çÌÍÑï¬aßÔ$Ég>�‰Ÿ½p“îÎõ~ž‰ç‘÷y¼g>8™†. E½! —@mü9¯?/>»ÇºL_c’Á‰$‡g(¹Ž#'¨h^ßçúéÿ\óþòÕAeî´¿?qRÆ?N¸Î@Ùr*¿ {ÈÊmÃ�,gc€�l¯\ùϱ×ï§ÿCÖd‚x`oL¢ÅDD”ƒíbÆú“ ±Þºù»}¾‘7~ˆ¾ G~û3žïºŒ¼�ŒáyžQáê€Ù± 0núM_”ö`/Å™L&þ@ö¤W%ñ÷yfxV|í�m.�Ý ‹Å@d2u»]õû}Õëõà×ÏÎÎ&²3}ÌžfçÙf‰D"”Ó¿¾¾÷­xæýöu„Ìî»)—ËZYYQ¥R‘tKDŒÇc­­­B]p–¯þŽxŸôï={Õí }s¿ þé¾’ŸÄŽüÜ—€{@7:9ÓjµB¹µN§H³ËËKíîîjooOkkk~”ïGvÌü0VüïöuÉm‚Ì¿÷À€t:­R©¤\.ðªùùÛ{œ ��Ÿ—õ„Ô§ŠÐÁÁ�$©Z­N`ÍØ ïÃŽœ¨#Å/¯¯¯+“É„õ”FÆß`0÷¡•J%U*•pï•tK²C&7›M•J%---Ü2-�N«P(ßquuîÓ�óÀ'âvíct‰9a<Žóûœ�w3OèÁh4 k�àø*xßû¹Ogø9þÅ z÷¬‡Ìûp8 2…´ò«;ü.­áð¶,ÝÑÑ‘NOOýzµïììL9é ç:î:ïŃÝúº3¬îœtÁøX˜”N§CýY:¾°° z½®r¹&É7*N²é¦´N&&mxN*• —Zù‚‡Âø"ÁD1‰ŒÝïà� æÀáV _˜Q(ßl¢xÍf3Ü€ÛÓ˜k䊒ÒúêŠÌïxF¼h¹2WÞ¯xaca ÚÚÚR¡PÐóçÏ•Ífutt4á€|Q››› åÏÊå²Þ¾}«Ñèî‚M6�"xYR‹‹‹êõzAGNOO•Ëåtyy©jµªV«cûûûZ__×òòrˆ î`Ðß(!ˆ8dC½Ío¿ýVo޼ї_~©F£¡ñx¬v»­û÷ïëƒ>P>Ÿ×{ï½§'Ož¨ßïëðð0¤[J ì´3öèÇÆÆ†~úÓŸêã�?ÖƒT*•ôæÍ›‰E‡ÊX⃚/jèq½^×éé©>ùä-//«Õjé›o¾Q³ÙÔ½{÷´¸¸¨?ýéOš›»½ÿçÛo¿Õp8Ô×_­››}øá‡úꫯtuu¥Ï>ûL/^¼ÐÛ·oU,ÃFæøøX�N'�tŒ�²{ÔÑ„˜iµZ¡¶n¡PгgÏ‚súè£�BZ7©‹‹ u»]U«UÕëõ°è"ƒf³©n·«���péè›7oôèÑ£ " Ù8¶Z--,,èìì,°ì°õ~ÇR¯×S³ÙT2™ $i¯×Óh4ÒúúúÄÈè0ç““­¯¯¿àÀ¬ÍÚ¬ÍÚ¬ÍÚ¬ÍÚ¬ÝeùYSš$dø?��nÌó€@@!ß³'§ôIœuÀ*,ã÷þnÎ-ŒH_c‰çÌÄ>•êð^ÆÂaŸæÀ¸gyŽ8÷ó½ƒô‡ =—Ÿóñ{¿øÌ´ //6íÃ;bÒˆÏ9g9�ì=¸3>™{?/OêÑäÄß"3?gó^<§‘1NLx0!cñw^àtŒÀÁ®˜qû8ã³0Í 3o¬þ<'3üç.GdÛ'ŸG>Nj™NEp%‚n}¾‹Án裗ߙFÈü9¢&&é¦õ?–1xQ<Þ׉}Š>ôËåã:Û…Ï+2D!!‚!œïñgù\b#ô�òqp–wRÉŸËŠ÷ú}pñgÜÏÆcvÂG9ޱÄïc»æÓtÖí ̦X,ªP((•J…àáùùùpéüÑÑ‘Z­V˜C·EtÙIOP¹V�²`øI÷ožMÙ�ï�F*—Ëá�ËËËÊårÚÜÜT£Ñà1Y$¶\qàþÝçÌçÙçŽušqy–›¯%æ£'®ã1IîïœFÎò½ë(ï ã…¬ÄV«®|ØÝÝÕÖÖVXçù[Æìúæ6z}}*÷€#º¿wà¹H·šÀv z÷ÌȾ���@8‚gµÛm�ŸŸÌ©Pòe|– IDAT(¨X,êòòR‡‡‡ÚÜÜ $êååeÈØÁž]�cì0ö¼'™LjccCÙl6�7< ¿{}}­l6«ÝÝ]�œœ„Êa`Ó£Ñ(`ýè&X9zÍ=í£Ñ(°ìÅðØŒôÃ;×â=aì'}ýöõÛc?ƳÀôØwyæ‘gÜ0Ž8‰(€Sôî{º88ߌ̑ÅÍÍí=F¼Ë(Òét؇ ëàà@ív;$VlnnêÑ£G*—Ëa¿HvÕ–ð™Ì5ü€ûÎiûêÜiD&ƒñÍ�O„gÕ` ü­/޽^OÅbQ¥R)ÀKpÑááp8¡°L ìB÷Lg¸%©Û톉À`°®(. Ï¢B¡˜�¹¹¹‰t~6 ¾yæ=ÿ¾0Az±X² rÖ“¯ñfÂû@ÿ|dlN\ñ<�ÊZ^^V¥R ÅÙsŸ/'”ÈËd2zðà�^¿~­ÍÍMÍÍÍ)—Ë…º³ü dã'û‡ŽNÑ?Œ9ŸÏ‡2`�C0Ö\FY³›››P¦ÎSo}3‰ž0¿^ ¹°Ñ8;;ÓÑё޾}«££#½~ýZµZM‡‡‡¡´b"q!à%Õuvv¦d2©jµªóós5›Í‰÷ #kkkúÉO~¢O?ýT{{{!ñˆ9$φ‹}n‹0�V«¥D"¡J¥¢n·«F£¡Ÿüä'ÚÞÞÖ‹/ôùçŸ+“É„Tëáp¨••½yóF———:88Ðææ¦êõº’ɤžœ)è«dðÈ÷œÇ8Ûð=•(¦‘&±yÖPüÎŽI‡€q²†Æ;ù rsð°.–çf'Áâ÷:�()€*àV©T*Ü£œÉdÂ8ô§ö >.' üŽŸs'PbÙÄ$ƒ`Þ—xÞ! p™8)ãÞoLx:±â¶ÎâY$~~™F€ø»ŸÌ’&JËy9BÇ+œ ˆç_’òù¼nnn&*90O�FœË3á9ë%Ú¼lÏs ÇÇÏEüsïó4’ÉAné®\‘û"ð€ø¹r;þä¶gd ¯’B©+ü™ëú�øüŒ~¦R© _©T¹™wxéz—ct½§¿¬<—ñÌÍÝÝ?CéOdÇÂø}/]åà+¾×דxn�¡—¢‡êt:ªT*ºÿ¾jµš¾ûî;¥R)U*íïïëË/¿T¹\VµZ�˜+ôkšOõõΫ)Aª NÒƒñ8~Öív•L&µ²²î©‡Z]]ÕÕÕU(oÖjµ^Agrât8ì$�ƒÛ±.úϘ@i~`ýþë™æ\gXçÀQ!vjµšNNNB¶Ëh4ÒãÇ�õðáC•Ëå —d&‚â/Ü×A”ôûý oñÀýe¼/‰m‡Ï0×KKKÚÚÚR«ÕÒÙÙ™òù¼êõºz½žNOOµ´´¤L&£r¹¬áp¨7oÞè»ï¾Óêêª*•ŠÆãq¸¯’&Æ }þ\‘m·Û ×.”J¥€zv¸;2â*†èÅ‹�ôƸ[~_×××ZYY „Q>Ÿ˜°$•J%-//«^¯Ù™Ëå”ËåN8Í~câhšþºî¸Mºÿ¡9±ƒŽ’}5�”Ëå‚ð+2ÀË}ÿèwa9Ñ:-P…y£1ëX=ó‚.&·™{Ü%uxx¨n·«N§£è¯þê¯B¢ŽN$“Ép­G¿ßŸð‘ôÑ3®œ ý <�± Å7v6§$0¯ ìe:�žÇIEóè_%M86SóóóánØ ‚,§x‘åù…qrØ“3�Czµß/ãÎÌÉ3úÇæÎ7fççç¡\_ =ݹ°yógÒ\Î�[dTasss¡ Ñ~ï“;· ÿ¯ôawwW_ýuP6êj^\\Ld†�ŸŸ‡z¢ËËËêt:zýúµ¶¶¶tttXq/qss£V«¥••mmmi0¨Ñhò=Ä1e2™â{¹4�tÀ° &‘O¿ß×ÅÅ…¾ÿþ{èääDoÞ¼Q»Ý)��N'´Ö××õÉ'Ÿèý÷ß×h4ÒÙÙYÈ„YZZR>Ÿ‡Dô‚Àêêª677õÉ'Ÿèƒ>™;.ÇãqpP.è%zÂ|x}[š_¸ç‡QæjqqQ�N'èÃÊÊŠjµš®¯¯uxx¨�?þX…BA_ýµúý¾ž>}ª¯¿þ:8®ƒƒƒÀÐïîîªÙl†¨ƒb±Ȩ••µZ-U*• £½^O÷ïß×{ï½§gÏž…�N§ÓÑ?ÿó?kyyYŸ~úéD n6› ‘0£ÑH½^/�ÎÙlV;;;ªT*aÜDý`cIØÐp8 —Grïz‰,Ý.âÅbQçççêt:ÁæIMO§Óª×ëZ^^V¡PÐÉɉ–——uvvöñxÒoý°ÂüáôgmÖfmÖfmÖfmÖfm2’žs“gß;H<�8ŠÏs¾ÿâï¤âÙ”Áæ|è mL9ˆ; œ�î"ü½ÿüœ½=$ ‡€ö¤NFÐì�à,ëç6鮺F"‘gÎ<‹})?ç\èÙñ1@ƒä.ïøÿNR80áòsPÊÁBÆÌ2^³]FÔ"w¤¤y¹!H! è:A_œœ‰É…ru@Õu6–³�ÁÏèX“;N”8þáe¼b‰¿G}|�Ìâw{Y)�P¦ùüÄDD @Ñ'€ÜñxÀIÈÏt:­N§îèbŒ€À~G3z0-:ÝeØ]G˜c@@úìóîz·Ø\ŒY`§®GNtþÿìùÆ6óÃïÝy06ßOÓ=dääYô7÷ŒxpÌó|Œ19ᱎ~Ób’×ñ6Æ„ýÆä�ë^l¯nÉÄmÀp±X «cóÍ7Z[[Ó/ùË€‡±Žøü1^tœ�wù]H^Ùˆ;Kè;º))Ts¡´™CDàtà�….Ãióæ_Ñdå�ñ~ï³g’:éɜҰ8tˆI"ÿÇߺŽúõ777Ïk·Ûj4!{¢R©èñãǪT*U¬˜cæÑI'88šë’÷Ù h— ˜ WzrŸR­VCp8Öpx[j ‰=J.—ÓÁÁ�Þ½{§ååe•J%]^^†Lpr×yö:î‹c½ŸŸ¿½c‘Àz·uöàíøZž½±±¼‰D¸"£ßï«ÙljaaAÙl6Ø$Á.à”èd.—S2™Ôùù¹Úív @!oÝ»¾ºo‰××mÖ÷¯øæŸ9ôg�TÀ÷!ÑÂñ[÷5?¶þÓt0öm¬a¬¹üÙSI òˆ± �žžêääD§§§¡Ôöö¶öööº fËž“2—¾Gõ±ø˜|M› �Ü ™_d]ù|sŸH$BŠ0‹ôTÙ|>6 ÚÓT=}‹¿÷E;™L2…~---…É@9Ù4øAeñš„(Ÿq’Í3µ'ãÍ—oâÍ ÷{4º½¬.v>ÛÈ ðY°@uDÙ0^=®øÔÈL&oˇmll(‘H„`777:<< ƒb,|�Þ?yòDÏŸ?W*• d úóçσq¼zõJétZGGG�FáâWœ(Îý �\à¯V«!j‚ -ß\.7}È‚æNÅËÏQ;ôåË—:::Òññ±^¿~­^¯§‹‹‹P'Ç{ss£��íîîjuu5”æãŽ#HP7A俺ºª?üP~ø¡677U($) ãZ¥Øˆ/8n¬®«8z2C½s×�ùùy­¬¬èÕ«WúÙÏ~¦B¡ ^¯§×¯_+‘H„»€`£¯®®B´ÖÍÍ�Ö××C´ ÄðÒÒRXP‰À'`èm¯×S¥RQ¯×S§Ó ÑAÌ %ŽV«õƒ3$Ûåå¥VWW'"ñêõºr¹œU.—u~~>q¨A†ž–�.ÏÍÝ^lxvv²á°b.O=g±�Ç:== µE{½ÞD!ò •4Ž’�µY›µY›µY›µY›µÛöcਃ†ÓÞü|耾ïçÙƒyuˆ¨óƒ½4�$ò¨R~ï�m~îu›èQš—€rÀÛûÉÞœþ{Ysêý9^¥€s¬ƒ(ÔIpÑþ¼Ù: â?ó³HÐ8íoè}@ŽàÞbà�½<Ïdï૤:aÆ8�Ààwè“�ÃÏ_ñ¼Ç¤”ëÜ�}6ããÿ;–á‘âÓ€zúê™c !ì@½�æòäÁs½L¿P>·œ—ülê¿ó¾€½0gŒÅí5Ö?SºO øÏ+È,ìý›–qãÏw¢%îçLÇq¼Oqó9uÙºœ\ù¹ÛMLHù3ýyþ·ŸK'Cã+b¢}rB'&c8—û=Ô^‘(&,§ùnúû 'ÿ8Cƒ ÍÍÝÞY È !Cé'ý`vÿï@¿ÛoLzù:â~êúúöòJ¥¢l6°Œl6«ýý}½zõjb.<ËÊ}k >˜™à"óóó!ÃÅçÄûˆN���i<ëììLív[WWWÊårÊf³* º¼¼T¯×S½^wλ.ÄóÂ|Å>Áý*2†ä\Ç'Ç~Àõ�ñáŸc,9¶­ØW!CÞ9 ÔëõÔh4t~~®‹‹‹p'Ôöö¶¶··àîdäÂÂBÀd=X›Ä§â ÁIÑ9_+bî¶å~CÒDšb±lv<¾-Y >z~~®b±*Ù†{…²ÙìQî„°g�8Qè¾ÛrËß:QÇ]CŒâ'›Í*�Nkyy9”Èc†Ä¬×ë*‹a_á$ D?sÀóûý¾†ÃaÈ„YZZ 8›¯A|õµ××xæÏ×ìÚqGpiäàvæûF¿Çˆ+5\'Üæ§í_}çD%YF;ô ¶¼¼Ö¹ùùù‰}j³ÙÔññ±�F ‰=z¤����XÁó///‰wqq1qG“s$ô7ö—Þ&H#ß$ø†&^pü�0¥|c$u˜NûFšTS„é‡Å„þx¤‹…Ož8{ˆì‰t:=mÁxÃ}a‡*•JªÕjaìl4ø{þïïæ�>ær¹ „hMOc¨V«ZZZÒÉɉZ­–þÕ¿úW¡¤Ê6Þ¦Òú˜qŠ Êçój6›z÷î��†–——õòåK5›Me2™�¹åMúýïþ££#%‰@A´Àïïï«Z­j}}]­VK‹‹‹*•JAdI —¦ùæÜ£šp¨8Ki©ù|>”ƒLDî×××j6›zóæ�Õl6upp V«Òvqd�ŒF#U*=}úT>T2™ iÉÃáP¹\N«««j4aÁçßp8TµZÕöö¶>úè#=|ø0dµ@޲ˆø†šñS/“M”;9ßdù¦²È7ùqåþž‡áÇׯ_‡¿O$ÚÜÜ Gd‡cÍåra0�ÃæÅíàüü\ÃáPGGG¡|"YM8_÷_Òí½TÈúêê*l®ŸØÑv‰ÝnW«««Á>ü¯Y›µY›µY›µY›µY»m8:˜îûÞ¸’Ã4BièêY4œÃbÓ�3?J“€1g?¯,ÁßyÕ·þþ^¯Jãt»Ý�íD…ö¡D¶¤är¹@y6‘± L€—“G>rv‡´q°ØA#Î$>O>Þx~byñ>öÂñÙOŒ=œ@Àh!/äâéNÆyCü=cràˆórqb'&Kø™F>þ�îQ¶Ï;tßû쟉 ßi¼ôŸqÆÄÞ4Y{sPÔõßõÈuÌÉ@ÿ]ÜÜŽøŒWw"иÙlêææF¥RI‰DBççç�Ç¡<#Ùz<;pY3c œqÄ@r|n�ÁK—‘“1N 9@îòG·y¶_¥ûÀTÇgÒ_é®ä&²ôj>d  Ç~õƒgS¹ {¿É‚!B¿T»¾»,bÿìvö‘�ocþƒA¸#„ÒsȆ,I·Gúëú:ͯмßöz=e2åóùp‡6@òååe(‰öîÝ»°fÄþ2ö+n;î+ø;÷o±~ùœ§ÓiµÛí�q´³³£­­­pÏw¡P¸ ÷/ÍÍÍúú†î:™éöíýwùù8\?ñód7¹Ïôl)þÞK¿ÅòpŸâsê÷q÷4kîƒôèÑ#åóùÐ_²z!�)“–L&CƒgXbsž)äsâØ1Ÿt{=�ÆÕj5€öØú˜ÉdT,'°KðZðH2§T©Ttpp £££€ ƒÿ�ÃéˆMÅë46—Éd¸]_�ðb> n À¿ººR¹\Öúúz(Û˜L&uvvæ³V«ì “M &Ê]Ssss¡j�æív[‰D"Tð�¤ôýÉ´½¢û-×;ôÖý8‡â‹ÇãqH Hžý£¯ÈÌ}k:ã¤5k2û.8pMl†^úŽñP‚}èt:�n³ ö³Ÿéþýû ! ²î…õ“Ì%×K_ïø™ïg¤ˆ4bÀ°oIâÅèeü…‹‹‹ì'«€MžG)Ì"Xd'ƒxÏÜÜÝ]$í,Œ¾9÷trÙÓtcçÈØyïååeÈv`†Ì�$‹žGÏ8ã»··¢cH'}ñâE¸¯‡, _<éÏ/~ñ ¥Ói}ýõ×Êd2úÿá?èòòRÍfSÝn7¤Å^\\huuu"åÌï êt:z÷î�Z­V¸wÈÓ‘7%;ýö[Õj5mll¨T*i_�FCårYý~?”ýb³·°° µµ5e2µÛm ‡C‹Å�n877._Ëd2ªV«Aù‘;à?ÄÞÅÅ… …BØðH·i¹zï½÷477IœY¯×Óáᡎ��uxx¨7oÞèôô4®/â~ØÉf³ÚÜÜÔîînØ4PC¦ã®�ååå0žÍÍMýô§?Õ£G�”N§CŸpF2ãÍŸ§3ãxã(_б;3?úÊ!³×ëéåË—j·Ûúæ›oôôéS-..êÁƒJ¥Rzûö­úý~�Áüü¼~÷»ß…ˆš¹¹9­­­éíÛ·áî§~¿¹N§œØé驃�îß¿¢ æççÕjµtpp Á` N§£L&£ñx¬7oÞ¨ÛíêÉ“'º¹¹Q§ÓQ"q›ý´¼¼¬jµd%Ý•°H¥RA÷ž�µ³³£n·“d2Jæáì�h<88öÃF Ýnk0¨T*©Óé¨ÛíjmmmêazÖfmÖfmÖfmÖfí/µ9øè—Hó= †ƒ°Ó€[¤É_ÎmìÛÇãÛræ€h«œáo9ì;�äÉž•à€-}¢_1!â�a<—hú¹¹¹P®„½9ç_€réî~ú¾¼¼¬Á` ‹‹‹pÎ$R>Îb¡qFñˆq¾ç\ƒÕ<ËÎ5777� q@Ê?ççnäÄ\:Ãïè÷’M‰Dbâ®*Ë8{Àø}Æ>7œ1žÑžÁ¹Í3Æœà\‚,| 4dâg9ÀJë£S�T:pÙøßÓ8“L#>�„ð(tìv™söñ÷2Vʨ{Õ�Ñè¶4¸Ëƒ Ân·«jµªÑèöâóB¡‚>‰|F¶Œ…{-èØJ±XÔüü|À (ÓäxŒWÌqY2çÈù⃰K°€»˜¨sY¹^ÜÒüÌî¹ß•Eà0úê:“{þÏu€{…(åàvŒm9PŠƒ¯0Nü9€OŸð1Èš¿�Ë:àèÄŒË�3ôx|{W òÆ·ñy¾GÖ^j ½¤âKTàzÏw¾nÄÉÌ#þÕ3ŒñûØ;_ \) ÊçóªÕj’ª6`ŸÏçÕjµÂ~È«÷ööBð ûˆp@l.ÞáS‰DºgïY�­v:�€Ïy k{2™Ôææ¦Æã±NNNÝï÷C5cÁ£ßÓÖ—ñø6 R©_6NœJ¥Â• nÇî·kì?ÑyîÚbŸÀØ|íó l¿îU¥Ðûx}@w™o_ ÆãqHø`¾à3Ø�ú¾Ó¹ô¨V«éÝ»w¡ZÒââ¢îß¿¯���0Œ ûd�D6d‘y2rñ½XÜ&H#φ@1plÐ|£â“Žr¢À©(¡O¢oÌœI†‘…H’îîî�LÁ¹°�a‘AØ8À±Z¯o4ù<)qý~?8IåÓø,J �³é©’D}q_ 4(FLN]^^ªÑhhaaAççç�$ùî»ïôüùó°`’u�Ý_^^êÍ›7!5–¨ŒjµñB¡ÞÇXONNB=Í••moo‡z›0ëƒÁ ôlXȾ`Î)ƒçºµ¼¼Áz½d ù„C¿¸¸„‹ôÍÍ�ö÷÷utt¤‹‹ ½|ùR�FCúÓŸôŸþÓR­VÓÙÙY Š8Äx” Î{kkK›››a�ÁA!‹ËËKu»]åóù¾¹¹©÷Þ{O»»»A6ÌvA6 ÷1a¸�~Ø�oD=ºÈ7¡NxâÌpÞoÞ¼ÑÍÍM( ØétÂû�F¸�‡’x�FCÿçÿüŸ0~ �FJ¥RZ^^Öîùæ% íìì¨V«éûï¿×ÚÚšòù|(áHäB¹\Ö£G�ô»ßýNÝnwbœËåÂÏÖÖւ޳0âCˆ*ðˆ)ä8ßÝÏÔh4ôûßÿ^÷w§Ç�‡ÌFüB:�–tw h>ŸW¡PúÐívU«Õ4??¯­­-�œœèððPëëëÁ!¦X�¨;<<ÔÓ§O'R´Ñ·V«¥·oßêÉ“'¡³6k³6k³6k³6k³¦‰C6{^¿'!=ØËAIöÄžÀÙÁKñYÌŠ£9= ÅýØ:¨êÍùTÅÃgÌq Ã� ÏDà¬àeÈüœÌ??S8¨ì}ñs¬ƒËñùVÒÎÎÈÍÿÆÏ2Ì Íÿ?2÷¹s’ÍIF~ÇY\º»—7&ïœðq�™6‡o.¯Äñ @ÊZ3/iŽà`©ŸßKqðÉ�0'5ü3%ÛúçใèžÍäöà€ã4à0  ÞuÕA)Ç"è�“®n®±Þrþã̸Yˆç`½ƒ»Nšx…°° ì‡ÒöèXœõåýtp[Ò0.ýŒûÿyŒ‹ùsbpÒçË}™Û+¿s¹ûû�Pôyçï8÷rM>—ÖúØýý|ïzèz0mîz½ž¤»k(+ÜÇ7Ä„”ã`Nâ8!äúëöCg¹\ÖÎÎN(ÙŸLÞfû ýñ�Ô£G�Bi½xŒÞ—X û!_ÝW Û`k¾†<€&ëÆï�çÞ˜ñx¬F£¡Z­¦ñx¬J¥2á? -%»’î°WæÖý�gê"_žçkÖê>Ëç+^Ûc½õ,®hµZj6›'œ››Óǵ¶¶‚ ˜O'Ä ))µæ¤D¾“dq&‰¯m±^;ñ9äûªÛpŸO.—Óééi(�¾U¯×Õh4T©TtïÞ½pï{¹\V"qäO©:_— Í™C|(„¸gµº½Å6ϳø™ïÇxN6›U©T ÕuÈ|º¹¹Q»Ýž éÐßÇ8ùK–Õüüíõ^C´ÄdoìÃè¿÷“¹`M¦º�t‡ëû†èb¼gâ¾çqFCži„Oqâ‰5ȳ~°3üz�œ„+SF£‘ÖÖÖôÞ{ï)ŸÏÿ€$dŽ!†â}C¼Ÿ�ÇêßKiä$̃0|gI 'Ú€È25Ü¡ÓA˜h�ìà«wœŸ%“—²Q ¡ 41d• É77læ\(¾!L&ï.5#2Íëª2±ô±pw  }"q—I")\òØìL& cö( ¥¥%é»ï¾S¡PÐp8 Q9‰D"¤#Gꛨ^¯«ÛíÀŸ{‚Æã±êõºjµZÈÖaލuýñÇë¿ÿ÷ÿ®««+µZ-½{÷NWWWáR6Ê'0æN§£R©dÕn·µººVIªT**—ËÁi¶C<²@\^^ªR©R"“ÉèÙ³g z÷î�:�Žêõº^½zôÌ7¼èr…€ÚÛÛÓææ¦ÖÖÖÔn·aˆ ƒAÐ%Ê�•J¥À²ollh}}]kkka^!VÙ˜°ùæýèv»�‰÷ˆ…x!õØ7sè2N…ld:=xð@ÇÇǪT*!z­^¯ëèè(dj5 Ý»wOçççÚÞÞõ.qÞkkk*‹Úßß×üü¼Þÿ} Õëu­¯¯«R©„±‡·%ú>úè#=ºb�A IDATxð@¿úÕ¯T,C$ÒÂÂBÈ.r"°\.='Z„MóÇïÑÙl6«óós=þ\úõ¯­G�Iº»Tu4…òrWWWÚÞÞV©TšX@ˆ>¸¸¸P½^×ÜÜœÎÎÎBÖ©£DžrH§ÌÈ«W¯ôøñã�f iD$ ‹$‘³6k³6k³6k³6k³vwÁo»ÝQ‘­V+d¼_\\0kˆÍ÷1I5”»&r–l"³ù{À#žA$;{;IaêÀ3ûÄ8¸Ñ�ú H‰E åx<žÈþ‘îÊÐIwg>GF wkú¸%úý~8K;ðççe€,‚ì|ÿÌx�%A�üŽ~9˜“Pžöz½Æ±×çÿ<�ûGýþ -ÏÏσœ³ÙìD8²dô¨n(é+Õ?èŸ÷ŸJ V3oDËï;�NÈ òÌ ÇAè„”ƒ‰Ø�Ë C¢]]]…ûq9;ðÍüð>IT>ç<ßíÇ«”C¾Þ?ï3à:ÿ¬¤ 8A�ŒÐÛÏyŒÝ£$ÏÅÆy]w=kìòò2ü�g§ C1¨8 kA6œÕ±—µWÎ!Hò2~‡�‘ñ ±.x‰:Ï~s@ÞÉ.ú�žøÄþÒƒ0‡—àˆvrÉûæóå $zããu9:Ðî/:K@èÒÒR¸ZaiiI�N'T“¡2 óL0x&“™ÐSlë`1ÿ§j D2ņ‘G¯×ÓÕÕ•òù¼>|¨F£¡F£²Tƒ�Þ¼y3Q¶ ™1_Œ›Ï#gä¶GŸçççƒ�¥l) ü�tqÒ”y( Á^%)lóÏËm!k€m×ã2r®»n×{’ ?óÃß⇘»8(Âuüi·ÛU½^W§Ó úõõµªÕª>ýôÓ@f{18 ì; +×ïP'{’õÇña¿ ÑmÜ‹õüÝ-•JÚÜÜÔÒÒRðÞÛÛÓŸþô§à[>|¨L&£^¯°Úr¹æû‘ðKö¬wTtòµ?„\\î¬Á¾v²·¸¹¹ ’dÿp×÷ÂÂB¸ÿˆOpe8b Œüüü\×××ÚÚÚ D?ï÷û!û ;!`#›ÍN& ƒ°Ÿìv»¾È×|§Ë`8†çATÑo'Ô¼Â>†qyƧy¬9$‘øßû>Ë )év»­ããc�žžªÝn‡Ä”ÝÝ]=yòD‰Äm¥%OÖ!À¿�‡ôc­öŒ?çŸ%�ÜðcvÙ™i²�X¨}£ˆ2ÕQ,ÃFÊYDgòÜá±¹ÇÉ @ÊåwÀ`$žŠÆ±‰ô1ÒüsŒÝ7ét:,j¾Ñ !õŸ…Ù�z>Ÿ×õõµNNN´´´¤v»­b±¨ããcµÛí sdŒáÄòô…’>...ªZ­† óÂgqÜÅbQÕjU¿ùÍo‚lZ­Vè75c�ŽŽtrrêb,àþõ¿þ×úÍo~.Ü«Õj�øüóϵ½½. \^^V£ÑP>ŸuW¹„Ï#$®¯¯U(B­Kt Y]]Õh4R½^W¹\Ö½{÷ôìÙ3=}úT�NG§§§êt:aÓȆ‹( äIMJR<×××Ãý:V[­–J¥RÈáþŸL&3ArU«Uíîî† êXpè*Žøúú:,^~Єø@ÿ ¢�¹g̹>`¾¹¾¾ÖÆÆFȆá0U­V57w[šm~~^�NGårYù|^«««*—Ë:??W¥RQ«ÕR±X εX,*‘Hh{{[©TJår9lâwvvtïÞ½Œk<kwwW?ýéOõúõk …p‡«B¡6¹Œr�EÝ�rðÍ?å ŠÅ¢>ùä5›Mýó?ÿ³ž?®µµµà0{½^8Ôj5•Ëåà/Z­ÖD”âõõµ¾ûî;mmm©R©èôôTårY———a‘�F�¨¥ÿ'''!iiiIù|>lnçççÆϟ?׿ù7ÿF³6k³6k³6k³6k³6ýN#�&uBÀ¶øÒ£»X"ØÑÏXú9ó±×ó€Eû õˆeöèüMëßûÙ—s—¾œ<˜Œæ@¾ÿž÷98ËÙ€0–�?Óÿñ�ià!`i¥ê}œFp°·gŒüùqŒ‰ @!¿Ó°˜ 0¯TÀyŒ€DôjZô­ëgjŸ¬...$Ýž »Ýn¨´Ðl6Ø @ ®�J¥‚þtæïD…@àœÂ™ëÇ"œãŸçã(b׳Xgx¶ƒÛ~õ¹åù®7NR1ç±n0¿œÿà9ëy?–––”Éd”N§'J y)*äËs™WÎÑhðœD"ˆ_Ÿÿ˜ÐsùÄ>Æe2Í>]æN°Ä$�ûŽø}Ì¡“Ç>o?ö»ØgøW×sæ0¶_·sd…Oägž�åÜüó9t_饰Ü&]§œðqÒ›cæÕAÑió�Zsœ;åYn³~Ϻ£±þÓgõYcx.ïññBîâëñq”4Ìçó!¸›j@÷ïß•| ñVVVôàÁ½}ûVÍfSKKKáî$°jô7™LN\—@p4ÏJ$åFãÌatÌ’±³v‘ôàXe±XT»ÝÖååeÈÄët::::R¡P•·<0†¾³—€ŒcM cŽj=dó�ûâÏ!r!ê\¿Ý:âû«x�ºí{ôÁ wö¬#à“€À¸X£Ø‹úÕ:Óö´ø!Ê·Ûm½zõJ�F#èÓÖÖ–vvv‚®#O÷;|6‘HŸê~?æE|ýø³¤‘3ºnü¼€Áyg`³<:'À"ïƒðú§L¨§Õcx~p óÁ• 2gÀ¦ÐC7nôÝ�ÄFŽãðqf2™�…‚“C‘YÜÉv:�°àt:�P¿—ÏpÑ™ .Ÿ˜¨ƒíeƒãDŽ ‘HöFeÄ'<Ã狟{Äó4@)Uý¬:�8‰Á§¼�û��>rO6s“ü-º€^ös­€šG»;�Xêç{ìÙeâÑâñØÜ~ð`5N’b€£1yã¤Cì‹ü³±}ÅÄ�ÿßçÏu'&�xW¿ß×ht—Å“ï<Ç i2‰÷8NåÄø!8Ÿ“òÈÏI$tƒ2YÈÚíõÏÙFL¾ƒy€¥‹Ee³Y-//’šóÿ›7oÂ5dÅ:ïóâÄŠ÷Çç‰Ì'鮼–g‚Ð_‚ó¹Æ×p'‚u â&�¾€ûŽF£èƒy¿¦­Óšû×Ýiëú�Œ³F±ÉÁ` n·«f³©f³ªQÊmgg'd¨Iw¶¼oÚü{P2{Ï®‰ÇãvâÄ ŸaÞù¼ûpÏ ãÊ2tÒé´ŠÅ¢–––µ%�?V.—S¥RQ½^c]]]ÕÑÑQÀh¹79ÍÍÍ…k4°7üc%H›²q~——ï‰Cl¿žù &=ÝÂs x]¯×ÓÙÙYÐE^ôÂ×PúV)i¢*Áè äßã ˜G>g$O @ßð±Ø§ËÆ{5ö@~¯¤ß¾Íº‚-ľ9öùŒ�àõÓÓS�œœèìì,Øýƒ´¹¹9±Ïpá{�8’ñð¾øýÓö¤‘;]ߤ{v‚ô´1Œ†MÙÂÂBÈ8á.ÏÈñ ¢5éi€qçY`˜xì")s>ÁüeÇø=2†ç T+ÏüpÅ�F Ë]Hdj°¹ñ²vÈ!c‹w‘¾Ž±À®;ãNz#,p£Ñãp¢âææFétZ|ð�ŽŽŽ477§•••ËeU«Uíïï‡Ro…B!ÜoDù¸¥¥%½ÿþûzùòex«ÕÒ7ß|£b±8•Ç[dþ,//«ÙlªX,ªÓé„l t '3 ‚£gL™LFÃá0¤éRr�4bÏ|#ûj0hee%\49�N§Ãbï¤ %鄤�B|íîîj}}=9ÆØï÷CT†§*¦Óé†8D¢odBQºÐ Ø:ƒ“ö¬¡B¡ðƒÃ…Š�ú–ÉdÂø)¡‡=ù¡Ì³f°M1ÿgæççµ»»«gÏž©Ùl†è�V«œ_£ÑÏ"³Œ1à/|¼ü>Þdår9õz=}õÕWúë¿þkíîîêåË—ÁÑÖëu%“ÉpÉßÆÆ†�†R©”J¥’*•ŠÞÿý@î,//k}}]KKK!;ïûï¿QÅb1,È‹‹‹ªÕjAç_¼x¡ÕÕUÍÍÍ©Ýnk_£ÑH?ÿùÏõ?ÿçÿÔoû[ÕëuÍÚ¬ÍÚ¬ÍÚ¬ÍÚ¬ÍÚ$âQÍ èç@Ú4âhÈ#ÝÝ-€Á}»dH {_˜øž½3gHÏ„÷`''©`b\ÓæÒ]{I¥ÎâûŸ›y?Ĉ“ ÌÅçØ4ž6'ŒÅŸÃÏ�-çq"ÿXó3»gÄçÎâTÇ@ƀÜ�8x”8`µ4 ðsvbìœÛ¼¤ÞÅÅňéÀ^ ÞòÏ€clÃá0D9‡CµZ­�9t~~‚æ8‡õûýp†ç\Êç\ßcÇIÿL<Ÿ1 àóëÀ´ï§5·×#üwÓþvZ‹ c>à¡í¥¥\§<;aÚ»ã¾Ç: n!iÂöÿŠñ?'/— ç™yø ÿ9ÏŒ ·øë4òÍeáß»ùÿ¥;»âsè<²&³ð–ß9êýsÙ:Aëzìx#²ü&“ ?‚/ÛÖ)?*)�rÓæçÏé¦ûÔR©4žÍf•ÉdT¯×CPèx<ÖË—/õðáC=~ü8ÜÃä¾0¶OÏÎò`ƒw„ï÷ûÊçóêõz� §t™?`dñæi·Û�(aåó æéÙN¾¶¹îð}œÅã:æDœgð¸n³>£ž-…ý___ëüü<ÜcÔl6CU¤jµªííí€ÑñwduÄsíx›÷�ReNÅ{ äàséV$ÄIn{’î—Ïç•Éd”Ïç'*5›M„ ¤N§0Æ\.§l6’f³ÈMʤB¨‚b·à˃Á@ù|>T€òÄ�x-`.°I 8<???²�ÀйçžÌ(H#pSÖCÞ�‚¼ÄI ¤ k9$v¯×S¯× ¶‚]�¿#;2̧q <Ú:å6àDöç2¦T!�õÌãt?ûck¦“¦ìjµšƒ~,//k{{[ÛÛÛªT*¡_ôdzÁQc,^ã6m}›Ÿö!O1�¶È///ëüü<ÔRfÑ€Bys¹ÜDÂ`£Ç»X4Qœ(„TñËÍ<’€ §†BxtÌ žç°áu£�݃µô :EN‚g9£Çr(àkL^ÑOg1©íÝï÷SÉ?”¢YÅJ°Õj5Ý»w/8(I:>>†ùé§ŸêÞ½{º¹¹ÑþÏÿY{{{úå/©f³©ÕÕU-..ê¿þ×ÿ˜ÝD"¡ƒƒƒàp—––t~~jΞŸŸ‡ÔZ6xWWW*—ËÁ1!'?2�¤Û¨½|>êw®¬¬èââ"ܳ3µ¶¶¦�?þXÙlVß}÷�?~¬½½½°H6›ÍP2paaA½^/°Á�Äa!ê÷ûºwï^ Ø0<îUâ½V«îˆbÑö�;è†Ì×z½®V«¥L&3A2BÆ _®3¾ùRRpêÔh…8©³ùi4AWx¤ ö?C]y/‡ž§R)µZ­0–õõõ £Õj5�jŒ��¢§#K r9??ŸØ¼û|Ôî$ú»<==ÕçŸH£¯¾úJŸ|òIȦCv¹\N'''zõê•®¯¯U«ÕÂ}M‡‡‡*—ËA:�ŽÒé´îÝ»§……}óÍ7ÚÙÙÑh4R³Ù wA–’.Þh4ôùçŸëÙ³gúì³ÏÔl6urr¢‹‹‹ 8k³6k³6k³6k³6k·mÚYsÚÏtš ñ;ßs&tÒ�{#8÷y`)Ä 2ûS‘c€šÏñì˜Ðq0Æ#Û}\q£Ÿ“huR'µüŒƒ$ÞÿpÁ#¿�‰s§Rü�ŸM_ˆÁfoÓzÞÍÏ%M 9¸G¸£^òÚ³b‚Åûæ`¢g0ñ·‘ͳ]öÞø<9™äóè¤Ùõõu‘À8#”ƒO®OòŤÓ4¢È1úãöáY®³>'ñœN#?’Éd8SK·„ØUO|°9ì— Gÿcs9“©ÁùÛ³[\>àû³œ\q�Ä?8ç²sŸå¶²±Ž»íLÿ¼ñYô½ÿ?=+AÃ`{ÂCC�N›_׫XžN(ð°>ÿ]üÀ¶Z­*‘H¨Óé"Ÿl 'ó§éœc�î‡Ð+2z¨®Òív5ï^½ $U*•ÒÁÁ�&È………p— ¶ŠŸÏ�Çj·Û¡ÂË`0˜Ññ]üŸq,ˆûR Ùb¢•9Ìf³ážqî£ÃE?è#KØ8.ýð’Ždƒz@=vè¤S¼^O›g' âmÊÑQ©i0(—ËiwwW›››!‹™;‰Ü§ûš�/ô² `]ø1÷ î—‹ã¶Òé夑¯}Ì1zº¸¸0FüÓõõµÚí¶ž?®§OŸNÜçØï÷Ã}ñt:%“ɬNUžb±pZô’JNØD,2ñuÂÉcæ»ðûª�ñx<Xº�J¥Â}÷½^O§§§áþ¡ñø.Ë ôDd‰Œ÷KTè·g �w²và =ëËõ‚ Zdc¹g.y>ºcö<[õ=bìƒâý¾Ð?K妓“5��ÜP(ôäÉ•J¥ð9÷wns샤ÞY8Mǽ?ñz1AÅ‹?‹ °ß7ÃÏ©m‰c”FÇ€¤£žMáÄ ƒ¢Ã¼Ã?KÙ"W`]¹7&.µ7ݦýRb«Õj…,›D"œ" ƒG³‘É�’ð;¢À’ɤªÕê©R©(›ÍêåË—ú»¿û;=}úTý~_¿þõ¯•Ífõé§Ÿêèè(Ì!Ô•„í=??W»ÝžHív»Z[[ YfÉäm=V¢*•JЉ|>2·¤Û 'X{ùÞ½{ªV«úÉO~¢‹‹ ýú׿ÖÍÍ�>|¨?üPkkkzõê•Òé´Êå²Þ½{{¯KÄJDJ"q[®-—ËiuuUÛÛÛÁÏÍÍiyyY•JEƒÁ@GGG!¢,‘¸�𠮯‰DBÇÇÇ�ÇZYY úÖh4T¯×'œ" °/Jô‡ˆ�ñ=º€Ãf“Á ƒÍår‡H߈rðâÝ~€@ï}“N§µ½½­çÏŸ‡ËçççC†—¤°˜øæÃ#�ܹÁâs¨¥ü"5YÙ��F#}ùå—ú›¿ù---éý¯ÿ¥{÷î…;˜(KG‰Ë¯¾ú*Üõtrr¢>ø@ëëëúðÃÕn·õÇ?þQ:;;Óââ¢>ýôSý—ÿò_ôòåKµÛm���issS¿üå/upp T*¥ËËKý·ÿößôüùs½}ûVoÞ¼Q*•R&“ÑÉɉÆãq�Á¬ÍÚ¬ÍÚ¬ÍÚ¬ÍÚ_zsp1ÑÙ�ò=͘{ŸsPÖA(ò~pg?:ßÝOä@é´÷²?¦ÿ~æ¤Å‘Ø1I!€/þ.²¢�€¬ô= �ŸuÐÝ÷c@ç@¦G1HÁÞÝÏ Ð"+Š]öÅ »�Ƀʘ‚È��g x@)gLþl &]HæÌ(ƒÝ‰Äm ,%»|¬N%‰‰2þàdYùËßåUY\‡|n�ЙF$:®1Mb`ÈçÏÏàÓtÄçeùôcäÆ42NR(ßä8ŽÏ?åÔ½üP¯×S6›ýAÐ&úÆY˜²P�Tœ‡�ìñ18Ièx•“¹n·ñ¸â¹pY9XëÀ«ÿ˜x6Ð?M¾?æ§Ü¾â9wÌ‹>ñ ôØÉd@e~�Û± @UïöŠ]Ƹ¡ƒÊÈ‚9# Û3>|\øW—É4"Ãý À*• úEÕžÕÕÕp_ %³ÎÎÎttt*Š�uI£ÿŒÇ³³ÈÈ@·�”àg¢{÷›º¼¼ Ž|NÝnòù¼†Ã¡ÎÎÎndz™3‚¿c_âd$ä’HÌ™ÎÇËÙI ÷]®;½^O�F#ÜaW.—µ±±î#ŸvÓhtw�Нéè›—ã›æo“öŸOŸC¿c=tr=àÊ îS§_/_¾Ôöövº–îJž‚1“Æ; ¿‡í�ýxÄþ�ï*y°ïõ}Òh4 8~"¾ÿ«Û톪XàÕÌ‹¯y1Öî2Ä:9 �WB3?åùž¸âdx$I0±ý0ì»À9Ñw¾‡xôýr�¶>»Üñûèl¯×Óññ±ÎÎÎÔétÂU-{{{ÚØØåA)ÕÇ?ÆÊû\ÞŽõúÚ7­Å?Ÿ �|Áðͺ/0òúú:ÜK‚Âq'%ÚHÏrAyMW¦o„¹ØÎ7[°Í|G;ß’JlQì¸&6c™ŸŸŸ(=à �O¦Xˆh˜÷;bâ�<Ù*'ÍfS‹‹‹êt:º¹¹Q£ÑP³Ùœ`nÙ0ŒF#U*ýËù/Õï÷õÅ_¨Ýn¢rƒM/ÊÙjµtqq Ü�÷óóó�=³µµ%év‘¢\×½{÷4õý÷ßkqqq"{âääDÿ÷¯Z­¦\.jnžŸŸ‡÷°€°èQË2‘HÇX­VC4©¨DV$·ìn6›U.— DOÌéÜÜí}28�|>¯Ÿýìgzüø±vvv”H$Ôh4ÔëõÔívÕívõêÕ+-,Ü^LšH$Â]II:�Ù(‰DB•JE…BAãñ8d$±ðp™ $ÙM8¤d2²©xð@ûûûê÷ûª×ë* Sò¬ÍÚ¬ÍÚ¬ÍÚ¬ÍÚ_bs’ǃ c’ÅÔ~&�Ákšÿœ¿õÌNÖð½ú×|ϾXº+%Çaœó@�ß�ë‡tãð~ðÕ#¹»ËðÉϵÅà7-ŽÖu¹ÆsÂóbpàˆs¼¤°gg]öÊøû�”Ô‘4¡> ÌàLFyAHÎ]œK\¦ôp›yóûRb½q Žþø¸Xãç~ŽâüÅð—²ÖÙl6xù|>è-Ö¾wüÁí`yÁ¸b�ÐIŘL˜¦¶ÿØï~ìÿþóØFýýœõ�|à H&h³ÙlªR©„ôœ³ÝâÈy¾�mÂe—^Ã?Ä tüÁÑ'¬ÁÁ ˆjÇvüïøž€ËøÏ;}>byþ¹Næð�³xL6“YÀ�1Ä ¶‡=¸Œ]>øL¸Ørp›B$Mó¦R)µÛí𷱟uu]œ¦‡`~‹‹‹�¢¼XEµZU¥RÑé驃AÀAÏÎÎôòåKííí…²z>/îã(/ÖvÀÝçÈ„¯€Ó^â͉•~¿0Pןxþ½B XY*•šx.2ôrŸþ]œ¶»,½Ÿ4àyÎ;Ñ„þ µZ­�iþX­VaD96×yHŽí…5†RmÜ“æctù�{¹orðošMÒ¨NäøÜÜœ*•J¸�ŠD�áp¨ýýý�Qç5óN©·Á`2€’Éd(yÊÝ^Éd2Ø%¸#-~pÒ†õžnÆ…]CZáã,3×]pôËËKu:ÍÍÍ)—ËM�Íô»u ?ö©žÝæk1x?ï÷Òy�ï^v1ÆC½Ü\<‡®G”›£, òpâÏõûÜýw±/ò„�ÅÅEõz=�œœè裕º IDATè(àÛWWWzòä‰Þ{ï=åóù‰9b?äc÷ý&sEs½õ=÷´½í™F,Î1KìÂÃYçr¹ÀÈaP�€É,ì‹/: r�ûSΛM€—ÓB�WôcÐíÌå4E‰å„P¿ßÛÏ%z@™ôÁ|>¯T*5a }ÀÁ‚±K Ù‹‹‹:== ‹äååe BÜ0x¿o4XXp²óóózôè‘VVV”ÏçõâÅ u:e2-..ê÷¿ÿ½...4 ôÅ_¨Ùlê·¿ým`6ÿáþA¹\Nü±2™Lè+8ÝŸÿüçJ¥R¡žæòò²^¾|©§OŸªX,ªÝn‡�²½¾¾V*•R¡PήX,juuU¥RI á»���à ¹ÓheeEWWWªÕj:88P­VÓþþ¾’ɤÖ×׃ñ»C#ŒÃéˆ;;;ÚÜÜÔüü¼jµÚ„npÎx<ÖÑÑ‘æççµ²²ˆ5_¸Â ´¼¼¬µµµ°(a'8eîH‰L§ÓA? ‡pN,î¤cûFÓíÂûïo¾D"2Ø�‰ë!}sŒƒÎÏí�Cã£G�Bô$¨×<Çî|óËfÓI.2÷xOiÁz½®“““�šýý÷ß+™LªX,êË/¿ÔÑÑÑļg2™iÐívõ‡?üAÛÛÛêv»ú›¿ù›P#öÓO?Õp8T£ÑÐ_|¡ÅÅEmnnªT*immM?ùÉO´¶¶¦üÇÔwß}§×¯_«^¯ŸÑ÷èÑ#ýêW¿ éëÿâ_ü‹8ßY›µY›µY›µY›µ¿ÄÜñÏÙÇNúü|“ ôGÐ×ÍÍM¨åˆÀÞÖ#ý¥;’Aº pò³)@G  ñþø{úäà)ýó½»ií}zx^œEà`k hó<È|�+ÏwŒý:ç žÃݳ>g<Ë’Èt2‰sŠ‘:Xä °é¥Ú�™t{Î&»dnn.ܯJ°@>÷Ä:èQõ±~ñ�s^:�V¯×Ó‚òù|¸ó$—Ë©ÑhLœÙy¾�Œ×1'Óéïo ä1O1–pss"Áã÷ý¹ï}>Á`‹ñq¹Œb2ÂußßágTHÊD"JÜd ÞÃUœ]ÏÎδ»»«T*õƒ’`íÑÖÓ"¯càÎÇGÂ{5æù»,ø™cRàF.G‚@€�ýE,CæÖ�÷ëŠíÛAZdî}w98y÷,Y‚påÏ{ 4Æ®=èÚ} ïö~ûïœØÁvɼàîkiÒ‡ûø‘�Ï ã§ŸÜk<Ýiƒ‰,--éÞ½{j·Ûj·ÛÁþ»Ý®ž={¦ÝÝÝ<ï2�ÇÓcôÊ@È] öì•8Ý$ƒ.&û°1|A¸Ö.--… FŽ¡›€íŒåÇý’ë/¶îk&äGl“Ø$C£Ñ˜øº´´¤íím=|øpb¾!ÎXOü™.|.˜×j8ùîöãzìkcòµ‡Ÿ{%¨D"HÂ\.Þ^˜ÏçÃúqÑh447w{}½^W§ÓQ¿ß×ÚÚZðk\]‚þ‚£¡W•JE777:==UµZ úG ·Wóa,N 0v' F£QHŠè÷û!€Ät�ÒŽF…B!dì5›Í€=zño' =ð;¡èß󻥥%e2™ §¾®�F£@¤AºáSX×}í è߃ü31äÁ1žUê$£û%_o°ëz½®/^¨Ýn«Õj…ŒÚ��mmm…À|«Û•¨<È�ÏÇûÂØ/úÿãŸý ÓÈ� åÔñx”4N‘²O~Òíbb §0Õï÷Ð~uu2‚èãáá¡VWWÃ�7+›ú»¹¹©õõu�œœ¨^¯ÚËèaLô—tÞååå�Âyyy©R©¤'OžhkkK™LFÙlV'''�Ø:>>÷é4›M�F#ýÇÿøÃ}T¤A² w»Ý�•H$ÂB!ð×ý×�TòÉ“'OT,U«ÕtzzªB¡0‘e)Âs«ÕªR©”:�N¸+–¶Õjéàà@———�Pj6›zõê•NNNÂ\éBôJ2™ Œ6‹ ›‚û÷ï+›ÍB‹ßy†™“c———áRA"[â4y¥8çD"¡\.&£ÑH'''¡tÞÕÕ•²ÙlX¸ˆ,@÷!,±Q�2ô¯o¨Ð3HDß % e³Y½yóF‰DB|ð�Â;‰ôAÇB¶òdÑÀF^¾|î˺¸¸ ÞÇu||¬ÓÓÓPºÑmçÌ� ²ˆ¾p_Y¿ßYjôõþýûá°vpp Dâ6²ÙlJºÍp+‹ÊårA¶�F#èr:�ÖÏþs=|ø0,ŠX?ùä“°HôÑGᎭ?ýéO:99Ñ?ýÓ?éðð0døqÀ�FÚÚÚÒï~÷»PªoooOÝn÷zÖfmÖfmÖfmÖfí/µ900 lšœÆ@tLŒp–cÿÌ™� 1ö°~~â{öÀƒÁ ìwÙÿ:Ðí ‘4™%�“¯?ó;‚Âx®:Èâ p,+oÞ_À2b°–óïv¢‡óh6› ’œM8s8!Âß{_¦‘®þ^æÌBˆ{H8K;èÃÙEº­@T·GÙ{Y#ì9«Ä$�í¨*)Tœ�î²´˜C/'H�¬%<×�Ç4b2ÎçÙÛ´ŸÅdžŸÁ<øÞÁ-×ÏiþŸ{ç´æzîó뀵 í:yáÁ“Ãá0€­ôÍõÚåï$H\ÊŽæ+Ýe¶¹˜–-‡.ø¸øûø÷Æ#;ˆ—'ýq�3?cul+îWì_y>`"ïaì|ïÿ\žÜ…ãgø¸„%ãõ;NbÝFžN&xßx†“IîÓ%™¹\��uÚßÏÏ!1r¹œR©”šÍf G‡æççµ¶¶¦ÃÃC5�‰€ñ/^¨×ë©X,�vLÑõßõ|Çí|¼°šç s—­�щxƈ är9�ŸŸ‡@ °)—7²‹û ¦ ÍÏÝî|]Ž3rxóçwH¹�Tßl6C–E¯×Óp8Ôöö¶ööö´¶¶ú Q餯¿Ûuƒûê‹K¾–360HxwÛŠƒ4x·gå\]]rbˆ¹cãúˆŒ^¯§ùùymmmé믿V·Û�”ð҂蘱ŸK ϔث0—ñšË<úÚvÇ>‰ÏÆ{÷#ì ³.//Õëõ”N§ÃÞ*Þ¯8ùÈÿiØ‹“4ÞÿxmvRÙñÕ×ö ¾NKw‰2¾—tYÄrñ½Íû1Óöhççç:::Òþþ~ÀŸµ»»«µµ5¥R©lø\ø:ëïpËû¯÷±ÍÒ~�iÄWœÀ>›Œb¡²¸___«Õj…È}4ž‹sº¾¾ÄBÂáal‰Ä]Ú¹Gù¢Ä ¦Em0‘¾{DEœr8-BÄk�2nÜÒÒR¨É"�}'ãf<«V«…T6@f'Ë žû,”훵Y›µY›µY›µYûKoN$8øä `uþcdHü{Ì-r&èv»a�ÜëõpÂWäâ™~H�Á?_ò÷ñiíéË8hþ Þ樂Ÿ×]ì¯ãC¿÷%8¦�ÏïñHxæ‹s¯N¢8hÅÆûïÁ§Þ“ùóë `Ž—Ÿqi â¶¥ò>ÏJ¡ÏÓ@gæþòò2d[AFüp>óÈüd2ÈHÿ>&$b€ l„9pÏåçýtüÄ�TžM¿bݘ†‹L³»# ìŸÏ¹ë¼�¼ßm{�Lâì ñ7 ìŠ4Þÿ<¶k²½»W0q@šw:ɉÜËqý÷ŒJŽÁnt}ãžÜi5þn÷£NÀÐ/Æ“Fè d–?°×³é|ÇM|‘ûìÜïxq}§óJE‰Db𓜎³z¼ßþÿiëÇÜÜœÊårÈñ»Òù[ðîá�ÇJ¥Rj4:>>V«Õ ÷‡O xð9rÒŽ÷{&ò�ûN€-z�ò\äêÙ<¬ƒÅbQ777ê÷û—õ ¿KÍûýc믯;4úâ�Ï1`MÖk ¾’ûw'Y!•JéáÃ‡ÚØØ£±¿Cö^âÌ!¨®$)d�¸íÆöàYKîkùŠÏDç�ó)ÁZ#Ý�÷¬àªJÉdRÇÇÇj·Ûºwïž¾ýöÛpŸW€$‰‰Rº`·‰Äí• ô�ßãÌ5ªúľ�¹sâÚÇ}ÍB†¬wì!�Ï¿ººR³Ù U¥b=‹I#ÞËÄI)é.YÁ×JߓĄ}l‹ž•sü}L²ðHNä|ssWòÖ×PdÛÍ÷5ggg:==U³ÙœHªxôèQ¨|å²ð}‚“ÅN*Ò‡x­æÝ±-û:F› �8 #Bö(:åÆáB°EIÜ8`ïØüÑyœ ïÁ8ax=FÒèŒBú$ò\#p¯/L¿=ÕÒÓkÝxÆã[rÄÓ/%…»T¸»‰ÈRï0fHŸ4¿ouuUÛÛÛZ[[Óéé©R©”U¯×ƒÁr'  ýp8Ô7ß|J´‹E=yò$€õÿãü�žžj_~ø¡Þÿ}e2™PÞíùó纾¾V:�÷Ѭ®®ê³Ï>Óþþ¾Âº´´¤Ï>ûL»»»:99ÑééipÈ(å³gÏô‹_ü"Úp8ÔÊÊŠŽ��ussê¶¢ n$îpºÝnpâÏž= ÷Áè÷¿ÿ}È4º¾¾õ S©”r¹\¨ [¼¸¸¨õõõpS¥RÑÞÞž …‚²Ù¬Úív pظ�M5�ÁÔh4tvvX}8ß@&“É�fŠ~£Ü-uqq¡t:­B¡È3¯}ND œ/^d ‘…^p‘?~)dÏþþ~ˆæ ‹¬Ûíêàà@‡‡‡ª×ëj·ÛáÐÕn·à€¨7ìu‡ëõºþý¿ÿ÷zòä‰~ó›ß�‘êŸþù„,X4Y´¼ ‡t¥ç—éq¹©$moo‡rw0ð›m{{{!¬\.k_ãñmJ0™@ØÑ{ï½toiiI¥RIoÞ¼Q¹\Ö‹/ôìÙ3Õj5U«U�ŸŸ‡»ÃÈjtë‡J¢�X¤µ³³£Y›µY›µY›µY›µY›,±Ä!4º»GP‰ýû·˜Ä‰�@ß¿:ð: &¢G¼•4ˆ5 B9,Î'^¿^š,ÑE0$…€)1(Ág}DA6°/æ<࿟u=À“³- ){çôsùÇ䌃\ãñ]€ˆ€]/oæÄ¿'ø×mññ;XêúïvÏ5Ÿ]]]Õòò²Z­Vã±Û¹¹Û;”âÆ¹Ç� yp‰˜ÄGüSNŽõÀ‰p ʃ�ƒ‘-yvv°ü›û]‚|ñ5>þ¹¹9åóùp%ÂÕÕUè3ó¸°°îCg^xvü}ìgâ59&˜Œ� UÆíõz:??ŸÀ…VVVôàÁƒ€g:î¥êœPÃŽ!½ä _Y�ì™s·]'5\w rrŒ~°F{v��=ŸÏ«Ýn«^¯û”nɬçÏŸkwwW»ÿ¯ôæÅÅ…ºÝn( 7U©TT«ÕÔívCŤëëku:U*•€�‘äP¯×CP9óñΘñw`k$Ž@R ƒ€S3Fþ†~(Me l“;—:�N(ã æsVOÜúšÄšÈ~€Ÿû÷®£N8¹í{Å&÷AüÿçEø¤ËËËðsðW|)ïö@_/i¾]__ëððPÝnW£Ñmeªõõuíííicc#�ƒÁ p<ƒu ߎ>ÐÏÂŽ×zÿ:-àHŠH#ˆº~c�ÇáÎgä|��››ÓêêjX$Èt€ôaÑÃÑ3¹¾øø‚Îg‰DX¼yW>ŸuCQ.ˆ)ßLû¢ê53¨G‚8‚ã"‹ vûììLÅb18Vúé©~£ÑH¥RI…B!D/ìîoËËËÊår!Ca4iooO‡‡‡!B 9ýêW¿ÒÕÕUÈá¤t:­¯¾úJÏž= ãñXõz]ÚÚú¿ì}É�äÇqõ«­kß—Þ{6M“3CEIÊ2µ�ûb@A7|üÇøjùnèbØlP°(Ã0qr8œ½gz­}_»kùíý*§ÆßÀJ`0ÝÕU¿ÊŒŒŒŒ|/"r ¹\|ðÆã1*• ‰²Ù,R©Ê岎ôÖd2‰W_}o½õ¼^/nß¾�ñxŒR©„V«eãxüø1Þzë-0™E"Äãq´Z-¤ÓiD£Ñ¹r{ggg–ÊËŒ!2Î'''–šùüùs|úé§ØÛÛÃ`0ÀÖÖ–ÍfÓôÁ-ÃvíÚ5+�—H$‹Ål¾Z­–J=P²„b&“A,C4E»Ý6g(ÏEÃБ`N Ët:E¥R±Í.—ËÑÃò|©T ÑhÔœ0®+n Ô¦p²>'7E–¹ãXƒ�•l6›¨×ëv¹/tÎ�œn·k¯…Ãaùgggxûí·‘N§-ëqccÛÛÛ¸ÿ>2™ Êå2f³Þÿ}¬¬¬àí·ß¶tÐjµŠ?üüã±¾¾Ž¿ÿû¿Ç§Ÿ~ŠüÇÄññ±ãœFAM§Sôz=sp¹é”Ëe …Œï²-Û²-Û²-Û²-Û×±)ø¬uÙ 0(@­! ì�`€¹çh $}xs‰À)çH$‚|>?‡yPw�‹,(Ž‘AÑ�N+++˜zçΤR)ܺu µZmޏÒ*E\‡œ6‚½îz'žIRšcgå½'ÉÅÄt_€~¿�••d³Yx½^Ôj5t:d2Û‹˜ž¹6—û†Žºþùýª7ºŸRö\“º‡Sz½Êå2êõº^oooãöíÛF<¸x›’$W5Ù€ßA;œH$¬?ÔÊYƒU´\,ñ)Ú�û|>#Õ¶-ú Á~/ggghµZV2�{öìž={†h4ŠB¡€z½ŽÃÃC¤R)ÛH|QfÌ*#9ÄqÐnsÝÒ¶ÑO ¾pÍñ=~¿ßöcÊIIvêêUþ¯:ÄÇÈT«Ux<çY4 ÐuªòS[Ný¡®Òv²/n ‘â‹Ô[â•Ä“¹÷R¶®oH;Oû7™L¬zm�×ëµ=@×®®!ÎI·ÛE"‘0<œÉ8::B¥RÁp8D<ÇÆÆ677‹Å¬?$¬8öOí±î»šeÄý�D õNÉwÊ_ÛiÄ/V'L'ßãñÌ]*¹ˆ…¢¡¡ÀyçŽÏ7_[˜ÊK!1C%T%ç=A´½{ˆBШ5üJ†p‚Õ!æär!Ò©ÖKî Ú÷z=3\TÔ`0ˆT*ed‹×ëÅÎÎ|>Ÿ1ÀÁ`»»»seÐf³™1éÑh¡Pétßÿþ÷ñÙgŸááǘÍf(•JØßßG8F4E>ŸG4ÅÇŒ££#T«U[ œ¿X,†n·‹§OŸâòåËxå•WððáCS"ÖJ Æ «ÃÊÿïÝ»genÞ¼‰ÝÝ]a8âÎ�;èv»èt:Æ€ÒÓ9#Óßl6 … Ñívqzzjwø�ñ/—Ëxúô)íðAçjeevw ³�è % lllàõ×_Çöö6‰¦Ó)¢Ñ(NOOmâ<“ä!nggõzÝôЇ+’Œfà?%)ÑÆì[<·Ë;5R-#™LZ9]sÜ�™éÕívQ¯×qvvf—âõz=�ŸÍår–jýÙgŸÁãñ`ww±X gggX__·ˆ„££#Óéx<ŽÏ>û ÷îÝÃ�;wP*•ÐëõÐét,ûè³Ï>CµZÅdr^æ.™LZ”�k¶Q�(£­(•J må²-Û²-Û²-Û²-Û×­éRÁq%E”¼à¹�‡p=‹ò³.‘ß8Óô F¨Ÿ¬…àÈ3$Ï�%Ës­fÁ¬#À1�N 8b_"‘ˆùÅ<hôµö ¸¨Ì¡¤å´H#ˆÆ32�ÔS@\›eú^Î�þN[åèžµyþV@†ãR@Š¥Ûèë»ß­z¤ýVùqWP‹}uå§ 4'f¡ÀuIÏÍ$ê–ëgÈvÏeJ�ò ¥D¢;vý¼ö™g'Ê„D“fW‘„  ôÙÔ=]J†ªÎë™ÑýN%äØ˜A¥:K¹P~îzaޏ¸£d2™Ø=Uúw6ι’ú÷u]{J¬ºÀšF©ë³TÞ\? Ì$NÖëõìý”Û¢µG2ƒ$çœ$ ç^Çç–Ççºçs-’ &¾Á35³#þ»�D²®KU³¯ì;1/ö‰}¡n+ö¶hÍR–³»¸Nx}�»?( ãÚbe™LƈjÕC…¹oäóyär9ìïï[¶Äéé)îß¿�+W®àöíÛöl€¹LTmüÊš÷Ô™P(d8¥® êÁp%qHú�œÏçó†ß1ƒ„ã�Çã†Ã¨¬I¸Aº¨oº‡ë8Ù¼1›Í¬L¿ß· g–móx‹Ù$‚Á Âá°MS?i04%Œƒ£€5Ë@�€d’cƒÿ_á+Îñ¨Röû}„B!´Ûí¹”\Hdakµš‘_¼À�DX§Ó±`¼÷†N7n¸�Ïç Q­V1�ñÅ_ Ùl¢V«!•J!™L¢\.c0àË/¿D¯×³l¥ƒƒK?djà_|�~¿�·ß~?úÑ�P«ÕðùçŸ!Õn·áóù°¶¶†íímñuÿþ}Ìfçw3E£QD£QlllàÚµkVö­×ë˜Nç³Ýn¡Ag ßï#—ËÁï÷£\.ÁÐét°¿¿oäeIÆŸÑC$@˜EÙlkkk¸ví®]»†Ë—/#�cee­V ­VË nŒœKʈzÛétœßù£éÿÉdҢθÑpÉ.Á IDATL|Ïd2±òotB˜ÚÉ Œ“މ§Ç�ãôôÔ.($é dI²~¿o—ÉQÆÜÜÔQ¿Ô�PÃÁh‚V«…Ç�ãúõëøì³ÏæJô);\TG£~õ«_á?þã?ptt4wh¤¬¹Þè¨kÖלF-¨1Uc¦Mq–›$a÷ío‡‡‡8;;ÃÁÁR©~ò“Ÿ8Ï"ë÷û–Rþ­o}Ëþ§OŸâßÿýßQ,Ñn·çóƒƒüÍßü Òé´EqÜ»w?ÿùÏq÷î]3Ü \\¤ÇÍ’‘q˶l˶l˶l˶l_÷¦@žL©ïÉÆC:¾‡¾'ߣA�üõ1À¦¿æF»À÷¢C´>“€Ï)ni~–çE/E£Qüôý àˆ"xB ×õÑùO3ßxqÁy˜]_[eïR|&ÇÉ9шZù õÙœ%:ÉN OÏ. Î¦:Á1òŒ¡¤›~§Î=p8R§4°u ¯À½‚öü>%W<��Y¦Ó©•2'ÑÁ¾ñ¼¨—‚æŸfr D"«B’Ïçív{n}iÿ5hV3�x.d¿U/5‚Û%_9÷.H¼(›Â]s.ðG=á¹�eª¦Óó{;˜¡E˜0Á]ŽSûÏuÌïÓs²KˆèzWýrûOœ‰kŸ÷³ð\HÒKKà"Ø‘ÏX¤»úÀ‹¥UÆ kæ�[B_ÏàįF£R©”Ù!~×1mšŽßØŒägU,Šv$# ¡ßïF@ì€sB; kŸãáZå›ò¥}äükö”Ê–ŸNÏމCR/I|qíºö3—Ëauu¡PȈbi¥R •JŰAÅ]û®Ïçâ³8Æ@ `Yuìe�FM®ZNO‰S¿!îÄ`…B¡€Éd‚““»ò€¸ç_÷fÕU¦Óé&¦cTÒ_õ†s©�Ýn¥RÉp®Ñh„õõuäóù¹ûx”ŒY”ÈÀ÷±ÿÔq¾N|˜Ï Þ꘨+º¸û¥bËJ’ÒÖ¸{©�üí;ÇÂþŸžž¢X,bee™LÆ‚ûùýƒ–kä>ÂÌ%¼»ˆkA³«t_äø™P �¡PhN߈•ÑöpŒ,£wkÅb1 ÷ûý–ذ··‡­­- ` ˆÅbðù|h·Û–5EŸ˜'ÅãÔ’�ºÖ]¿R‰?ÕaúPIJu½¨}¤®ðÜ_TÔNò5Úµd2i}‰F£¨T*8>>¶½Ž˜q,C>ŸG&“1Ù�/à8É©pݩݤ?êúÚ\¯ê»¶×ÝçH#ÖâSP›_¶:š,™‚®ÜÐIÂ�‰Õtºh4еµ5‹”h6›s©t^ïE×l6›»ps0`ssÓîÌ™Íf¦PÊ Ó�(J%ãÂVVŸÀ¾úý~ ‡C»Ø®ÕjÙ:ãñ‘HÍfûûû¨ÕjX[[3柑/Á`år­VËÒ!YŒÎ#�4~6“É`8âöíÛƒ899A£ÑÀûï¿�7Þx»»»xöìÊå2Ö×בN§Q©T�J¥æîÎaÖÌÎÎ>ùä”J%üìg?Ã_ÿõ_c:�âÞ½{F ÔëulnnÚ†qzzŠ~¿�@ €v»�K—.aÅb¯¾ú*Úí¶±Ÿ4ܸX B ^$Áµk×pïÞ=+µðå—_âøøØJò1Ò„záñxŒ �F(•JV:îí·ßÆ¥K—pýúu¬­­Ù}?½^Ï>çóùP«Õ¬æ±Çs^æaeeÑhÔJÜ% Ôëõ¹…¨Ô£••+YG]:==E³Ù4ç•Ñ!À…CNçÖçóY)´»wï¢ÑhàéÓ§f$ièÕhP¦Lßäߨ§º¡s½ÐézÕ5¡ŽÉ£G�°½½�B¡`µÜõÐD£õzï¼ó"‘>üðC»g‹ÎÛx<6¢�ƈëÎã¹(…ArF7Q÷àA‡Ÿ¯qìÔ¯÷¼–õÍ›7ñóŸÿ_|ñÞ}÷]ôz=.}@~žçeŸ1²•e±•ìr}t%È‘Jþh•ŒQéw)Ùó2Y«< W�—à‰+G•¿ Pd¡ ô>~§KŽ)xëê“‚²JP¹z£}Ö÷»€8ÏLîùCõA³ xæË´q.8‡±X ½^ÏÆN ˆA§‹H#‚Å.`ª`¬/$9_ª/îç ø+Ñ¡Áº®¼4ÃEçBe®’ êR'Ø­BAùG!PÈLˆP(„h4jÁ± b¬U²Ê%�]pMõr‘^-e¤˜�gŽ0VslÀE¦Œ’oªOºÞ4cQû¡ýÕÊQÏÚ'AU‚ÕŠ•¿!Ã@H=ß*.Çyâ3©{¬.àXâ!ÔQ¿ßo,*Cb+©ãÐÒt|/1IÍ’#NÃÏ�p×k.+¡œâñ¸•}r #öÑ%yÝ�fˆN§ç%êkµJ¥._¾l ¶›Õªz¡Ïv Î1±#];$(]»´IJØò3ºŽIÄ&“It:+©—L&M¯‚ÁàÜ>Æ5Æg©\tßPÒHKĪ\Ý@c–Yk6›h4L½»»‹ííí¹;ˆÜõŦv™ÿøl‚ð.AÍþ¸¤�¾æ’ ”uU÷Z®Ž¸ØÜàê1&îì÷ûÑétðøñcìîî"›Í¢T*Y_4(Âãñ ŸÏ£Ùlb4akkËH2hf)çPí0ÇF›I,�•‹vÏÄ •—5ßå:U] Æ îûõz©Tʈ)êŸfÔ¨íSò¸¨r¦Yދ֔Î%çÅ]ú~wîô9JPk&¶kg¸G1Ð�™fZž´R© X,¢^¯.™Ëå°µµ…l6k8²úúOýC]_ÄJ5[ŒýTÛàú:j{ÙæH#2yj¬]%RçA�X¦L2åLVàÂ9ç†qvv†µµ5¬¯¯›!ÙÛÛC04amllXÆÈxÿüs¬®®ÂãñàùóçFÔÕëu+ÍõèÑ#¼ÿþû¸zõ*ÞyçƒA|þùçs—͵ÛmSäD"ŸÏ‡h4ŠX,fwì”J%Ü¿Á`kkk�F–Å9�F¨Õj¨×ëf€ÎÎÎP(ðûßÿ<°{‘¨WÔ;.LÎ7#ôÖ××Q(põêUlnnbkk étÚ¯Á``Ùk�N“ÉûûûFòäóyd³Y#ìF£‘9 $—¸Idòî(eo©ïꬱ �nà³ÙE-ñÑh„r¹ŒG�áÎ�;xôè‘1Øår¥RÉî¢ëáSJê)ÿçáM�˜nìzHã8¸nNOOñàÁܸq­VËRê­á••üêW¿Âý×áààÀ"­åª†˜›a °LF­Û¬„‹ë<ó9jÙ4:…†n{{»»»v�ï "øðáC|ñÅØßßÇîî®DF`pSu¡Éä½3DÁ]—@úÿé’ÊQ1 žSPQŸ«>»þLYhÿ´©Þ±¯. ¬`¿ß‹] ‰ŸçXô=*w�碪 Al>Ô�?Õ ]ƒîw«Ü½—ÿ´o.ðæ‚¯nÿ5 Pû¨@­f«P÷ãñ8r¹œ]Ïìl6k�� xé<»cp Øÿ«©Mz™UU¸Îˆß¨\\ÝW›ã ú³ÊÕ-/D½¤ÌÜ '?ñ-{+Ñ¢c#1ÄgPÇ´ß|Ÿ»v9ßþ� ZÏó´¹ úó™ŠÕ©ü]bËí‹ÊIíÂÊÊ R©”•èc5ͮл>8OÁ`ét…BÁÞO›Úh4pxxˆ­­­ì€Kr¸XƒÚ®EöLõ™ÇK†2Ó²›úÝ|±W^ÁP(P*•àõz ËÔ~k_4W_�v�—�¡Î²³‹¦Ó)ºÝ.ü~?¶··qíÚ5¬®®Îíÿ®�t‰_Õ6{<ç%)/w-)²h¾T×tü¿.Jïr?Õ§Ä�c±Ø\v×B»ÝÆýû÷±»»‹t:mø1?§Ï`¦^¯‡étjÙ„\ÓÄÂôn1צð»•h‡fSYf’$‰V!Ó»¹îT‡ßÓ¿“ÔªT*˜N§s|„£dŒÎ×õOÉ+×/Ð~ès\{­öÙõÝõ«}S¢Œý¢LÙ7Ww‰·Öj5T«U«´–J¥píÚ5lmmYù9½·IýLàÛ¥ü5¨�ûŽë_.Úwõ××™#�\…åéä’Hp� •¯ßï9ACFçe2¹HÁfªæÙÙJ¥2™ ž={fB€��¼úê«H$ÆfrcS·ÛE*•ÂÓ§O-ãE)�0Q�N§Ó9FP Ë©‘±§qcd‰D°±±aeøÝn×j1²^#AgÊ€²)‹‡Ãh·ÛˆÇãh4–‘•Ëå‡Q­V¥RÉ”ò�wÞÁÚÚ�µµ5Ë:ÑúÇj„z½�ºÝ.ŠÅ"îÞ½ ŸÏ‡«W¯" Áç;/WÈ”y’D‰D²ót³çü²LÞ³gÏðàÁ3ý~ßîšL&–Ù¤FH‹º>õp­‡4}7'¾O Ô?ågÏžawwW®\A¯×32�1£~ùË_"‘Hà½÷Þ³H0¬Ô-âà86÷0ñmú»:ÓãñØÖK@noo£V«á­·Þ‚ÇãÁþþ>ö÷÷±··‡££#Ôj5Ìf3üâ¿À‡~ˆù—Ál6C³ÙD<7¹jôíçªßï›� iÙíví³êœ1"cÙ–mÙ–mÙ–mÙ–mÙΛ‚Ãz`_.võ³.°Ç×ô0­ÁUT¥%¶¨¥çUöAûÃ,,Ãì‡v»=w°g¿´¬Òh42ðøôôÔî½Uf:�(K€ŽWápØ2•Ü@Hí£‚ Pôáx .9¡Ï×ùQ@Ó%DôuÚô5ÍB!yDàÚ=G¼ èqAu“xfr�f‡«�zVâ3•ôÑó‹þ¯ºâ‚S- è4Õ»±tœ­ù<—`áÏŒLVâœg#αÞC²hí¨,]ÀÈ=ƒ*©À  @¹@¤;W:'ÚšI20h˜xS,3Üàùóç–�°½½mÏЀJ¶5 šãYDJº ´þ®gn=�ÓÆ°Ä‘®�sÍâQÂÁ% ôûõM‰ί»hߨO!ü^f°:ŒÀEà*ÇÊ, ®]íS¯×ƒßï·û¤ûý>ü~?’Éä&ÇÏê÷x.î}b °Î•Fë³ô[¯×C<Çtz^!$�Âã¹ Qiß8^~7íK<G<p~MH©”«Ž‘ö!�NãòåËhµZvç²ÏçC³ÙijgÏpëÖ-d2D£Ñ9"B³€¼×õ­$‹‹—ðó§§§–IÂ÷)i¤5?ÇuL=Ñ ’�� “A«Õ𫦣ö_ûé®kÍ|ѱ¨ž2ðAÉ®n·‹Z­fø‘VbÚÝÝÅêêª{®à’ì ÇÊ*ZÄüx¥ ×Ü¢}SQ*ŠïpïnµZH¥R<Ïñrÿf¿)WVåâ=öÌ>e¿�:��­Ï^¯×ʵiù4�DpÒn·‹t:m“Í‹g³™±ÆÃáétÚ˜Döa0ðóæMÌf3|ùå—¨T*€õõuD"x<T*b}}ÝH¸víŒh ˜N§xðànß¾�L&ƒZ­†H$‚l6‹³³3˰ªV«8;;C·ÛE³ÙD³Ù4‡ˆÎC"‘Àææ¦m¼¼H¯Z­âøø½^�NÝn?þñ�Ñét̉›N§fX˜É”N§áñœG¼ ܺu Ùl—.]B$1§†9ÌúáBêv»s÷]½zÕj¡ªñx<ÖWÎE,Ãýû÷Q.—M·nÝ2}`)¶v»�d2iõdÉè³q3®×ëh6›8::ÂÇqrr‚V«¿ß�|>�v»�ããcËXÑM_75u°y�uv]·ÔyÝ õ£ÆPë¸Þ½{?ýéOQ*•¬ô#ŸÕëõpåÊüä'?Áo~󜜜 Óé˜ñ÷x®úºÀE€Ÿ þ«Ëø"â@ú—n4°>S�d=„»„0_Ÿ%ÕxVàÁž�…¼ã–ŸcØ\–¯¹ †¾FÞõ“_æ7»ÿøºÊÈÚÔo%P£Q䋲éµ \»äŸÉ3€ßï·Ê¬jÁûc �¹d•7ú:Ç®ç|퇒�œÇEó±ˆ@qç‡z£sÂïTYé\(1 ÷ èÝÄ)TöìÌ­ÏQ@‡ï㙎zI‘%ÞWõEÿæÚEÚ %Û”ˆît:8<ŸÇîî.Æã1¶··{{{�Çh6›¸{÷.¶¶¶P¯×Í  ‡C4 »�ŽŒ¯×{žM‹#‘ÖÖÖpûöm\¹r­V õzÃᇇ‡xöì™±ïÜØ�îÝ»7G¨5›M ‡CüèG?«¯¾j5G/]ºdåäHPQ'”°c Y�ǃ\.‡`0heê&K=8;;³»‹¨7Ôãápˆ>øét·oßÆÍ›7íÞ*nú,O‹ÅlA‘\YY±þ<þ<@½^G«ÕÂþþ><�9I«««8<<4ÃLÖ_×ÞË¢�Üè÷gê9á£FM‰4ŸÏ‡ƒƒ”Ëe+ñF‚q8"ŸÏãïþîïptt„û÷ïÛß"‘ÈÜé’Vzðu#PôŸkt]Ãì6n­V …B^¯ûûû(—˨T*ØÞÞFµZ5‡X×éh4Âo~óüâ¿À/ùKüú׿Æ_|a‘–ÚÓ͈„ÇT.—Q­Ví+: î¼,:,Û²-Û²-Û²-Û²}]ý=—Ì^ âßøºf$i€•'ñ9/ûÇ¿k?Üs¯ðùžEýtûªŸ0©º¨f?Ǧ² Ês­ûL׿ßÔçVÈ%FÜ€-×wÕs3ûÀó±ÎƒÊÁ—�ÝzîP¢‚ßC@Ÿþ:ÏãîXu®Ø” R Rå¢cÓha%=ô¹îçT.ì'Ÿ¡ª;®ž¨�€�©¼Û�UXa¤Ñh \.#‰  ¾0wn•8Z4ü,_s_W{¥e¶Üg¸ó¯€¬~‡û~7‚^¿Ï•1I#ñ¬'&7›ÍÌö˜»{Eç^õŒ¤m ƒC Ê+€Íþ)Í>iÐ&ûL›Hy’0f–‘f©­`sI�/Þkäb#ÀéÈŒ%ö�ò¢îñsX®Áã…B¹\GGGèõzH&“h4¨×ëØßßÇÚÚb±ØÜ>Åÿ][ׇ®5b•|†Î1±Åv»m¸uAm¸ÚwÊ�k‹X£ÇãA2™Äh42–À½î™*W¯Õ^ðoº.X"KK´µZ-Ôj54 «°µµ…+W® �N›PNî÷èú¦SWx—ILÍ8s}—ð_46ÝWõyÑh,£‰û?§óÉ5Äù`À|£Ñ˜#?f³ó*8ívù|Þî¿ãSÛKûÎqV*ø|>är9Ôj5»«Ûµïª'Š.Ú�§Ó©­QÍœ ¶fÕõïê õºÛíâìì ù|�NÇp^%¢šÁ©4깞$Vt½-ÚËÙ/×—tI']?*Oõ§ÜœkîÍ\ v8991žÃçóáòåËØÜÜD(B§Ó1ë}‡š-O]Ôuï°¯œMNPû©A0z—à�FºA¹i’ºÒx«`Zÿ®`«^È‹î ‰XIÂ$ ´Z-ŠÇãÁÚÚ666ðù矛‘n6›ØÜÜD½^·Ba1{‡‚`D •Y/'_ ÇÉ "ùÅhuœ¹a2ZÊï÷[¶T³Ù´ÍØãñààà‰D«««Fz´ÛmÌf3 T«U»7…†n\¡Pkkk¸~ýº-´b±ˆíím+ËÅŸkµÆã1®\¹‚¯¾úʘÎt:�W_}�=²l/.Jf?qN¨8·o߯7¾ñ Ëú¢¼R©VVV�L&Q©TÐív1 ÐétL—”Äk6›X__7ã�H$,**“É`gg—.]B"‘@:�F6›�sâU–º™{½õWYÏ™Ž£>؇ápˆv»�F£�d2i ‡Ž ï>zë­·põêU+eÇKyoû¤Äc¿ßG½^ǽ{÷ðèÑ##`éŵÀ‹!=�e³¨^êúÑr‹y6uœÜ¨@%!ÝŒ#ʉéŸ�@Ÿ}öþüÏÿ«««ÖïápˆK—.a{{ÿôOÿdå õ3f ©S£QO®±U§V]�ê乇X~o<Ç£G�P«Õp||Œp8Œp8Œ••D"‹E«Éª=À9�‰D,ý“zÂèêŽF,jdÚh42}`”õt‘]Y¶e[¶e[¶e[¶eûº7DeÓ9ÿÎ÷«¿HÿÖÍ|P�l(¤ ŸËJ.8¨n7˜‰9³ Ï¢¼‹A�{žx†d™‚—xn^T…þ¨D”�ÊKå·ÄP H ->ëÿç·8¦¬G£ÑÜeéü› T¸Á¨ôÃIÌ3&åÑï÷í¾-¥ãFòº:Bù¸Àe¦cuŸ©s®úäa.`¤M�mÕ=)@¯%ªTþ*/%ÿ´ïü™¤ArVCatx,³Èo ¢$Ö¡}WÙé¸Ýש£ ´Sž:W¯t .«ïá¹’ãášøG©TB¹\¶,‘V«…ƒƒd2¤Óé¹àR=—ºß¯ëZϜcSyƒb`1u@¿“?»$•®K}¶{~¦Ü){WÿÔV¹Dæ–Ä IDAT¡Ñú|>' \*‘Íþ‘à!©BûÈ{N¸VÔeö�Çã±ì—p8l¥ßYÞ?“ÉX&“®Qß7¡Žé¹›x ƒˆy/53ލO´¹‹l=˜þh_Ôæ«î³?¼J •J¡P( •J¡^¯¨ßjµðüùs\»v /:÷.ÎÁµÎï"Vä’‚«©Ð.ÿ_dˆ|jŠF£( èt:söA³ôô™:-‘¨6P‰ÝÃÎÎÎÐétŒai×L&ƒ7n`ggÇÖ¾’�®­q‰%.u?å^¯kBÉ �#×?Ñq© QŸßá’úýjwØO¯×‹t:ýB9¯×kU‹666¬ Ô¦ÎsýL§Sd³YÔj5L§SܺuËæ�ÔLòPœÎÕOõ³t¯¤à?ú:>ßùu"“ÉÄ**ñ;˜¯D½bÀ9¿3�N› m6›&/Î×…®Iå T7h÷tnuïÒ}GuÉ%Ù§Ó©e;q¬îüñÙ®¯¥ëB =Í l·Û(—˨Õjh·Û˜N§Èd2¸rå ²Ù윿 }"1¬å Ýò¤:fÝ÷Ù¹Eº®rb{!ÓÈu²¹Ò9vY\N‰H;ªÑ2dþ�sÃ_­Vçê�²ü•š@t2™„ßïG¥RÁ­[· &h;™LÐh4,s…Ž6r%ÈȑԠ`5:�‹ˆ ’`?'k:�Zš˜Þq4�Í’A×»Žôb2•q¿ßG³Ù´$+h@Øk«««ðz½øÃþ€÷Þ{ù—i¥Ò|>>úè#ôz=+W.—ñôéSŒÇc¼òÊ+X__ÇÆÆ¦Ó)¾úê+ú�N�NÙl?ûÙÏpóæMììì ‹Y–™:.ºÌf%µL�s$£‘Èî’Åññ1>|hµÆi(iÀ;�Žé£¦B¡�z%KhÈø7NÍTgT×/�!Çžp³Týç|Ò(U«U<þÙlívÃáƒÁW®\Áûï¿�ýý}+{ ß‹Åæ"!iØö•kŽÎç¢�Š:ϵ¦ €Ž››H±XÄ­[·l³ì÷û–¾N2T‰Î_»ÝÆþçâñãÇ�Â,H¿ßo—ÿi9@އºA¢—ýáÿ´“zùܲ-Û²-Û²-Û²-Û×½©¯êlô݈^kéû/"Rô5—`sAùE² ìò\K`�¤ö›Ÿá}±Ïy…–þ!Q¢d Ï4ôÙ_2«ŒØo÷õg}† ¤h$¯V!pCÙЗå¹l:�Z‰\ ZÇ¢}pËûñŽ^\Îû"ìqA™ÿ«) ij„Ȫ<õŒ ï§~¸à®ŽMÉ7=ËðùüÝ™öPÞ<[èû¨CZÒL�Pž�ü~¿‘l^¯×]�€•ñâçù~ࢼAV�oÕ1W÷)'‚`”“Š¥èùIX]'Ä”¨GJJñóÃáõzÕjÕª¢ŒÇcôz=Ú}Ò æ#†£À9‰3ÊÃ%ªu­½ÌðŸKŒ©Žðu— |«>hÆ•fá(±ÇþóY}¯ã é÷ð;ˆ]°¤¯!H&“v "ØÍ¹R—çiÎÏõÄ_(â0´•\÷´‡º€×L ÍØÓ{Ϩï~¿ß°8ŸïâÎ&γ–PôxÎ+Å &¹Åñèg\=àÏ ø�Íf( Èf³xúô霼Ë岕Ýä:'È«»‚âºÏ©~‘äÒ@bÊ…Ï$^BüT×+çQ —„Ô€‡­­-Òï÷�FìNµX,†z½nv‡ìœW]/ÀEIÑT*e8.í÷Èb±ˆ�� Ã1©;JÌÑ¢ÜÃá0f³NNN,p ÕjÍ•uSœQ‰-Õ? ÈÑÌ®1ú,$2‚Á Òé4:�Žé"íšâÚ$j¹o%#I&z<äóy#È”àÒ —¨sm8má"ßoùã’òêcé¾¥þ¨»(Ž«6ŽzÐjµp||Œb±ˆv»�ñxŒT*…K—.!›Íš©Ù–šMxzz:—%Ê>»Ù®´Ë´�jÇtW?…ïw±Ë…åé܈-*�f�mã“<év»Æ~»$ ŸKã×ívñðáCär9»¸±^¯c:�¢Ýn#‘H ßïãùóç¸uë<¿ïŒd'eÎÃìu»l˶l˶l˶lËöuoê3*é¡?+èD O�)—¼q‰%ÜçºDŠKL¹D Ÿ `„P L‰àÅòVúÍ8P¿R?Cà˜õ]÷3ú*g=“»@ ¿‡¿áyÈ%EØ‚?<Û¸2WrB;>ŸDÏé ô` 0I4~¯Û^FªéYH‰ %/\GÁ<Õ!%2UÎJ:¨|ô³ªk¿k·êß«`«hHt 0¯×kÕ8÷$Ýf³™•³×y¡SË©Ž² åKÂHßK “óN°—†œo%Öܵ§þ*;ÚmœSf@2@”w©�Dƒ¢»x¥‹gèü+!Òï÷‘Íf±¾¾nç|Þ NLí7åʱ‘P nr�ñïJSVj?RÝS²•k]÷H�/ÅŸ”¤J&“v•âWÔ?µO\3ª—¼Ša:�ΑžÔëv»�jµŠf³i÷M&$ \¾|Ù“suçBí¾Îp^9¨×ëaee±Ẍ8î~Íý‰ßåÚÝ·uoU"ޝ+Yî’âªÇĉ ‘H˜ÍÒÒ»“É•J�Fòqhø]Ðjµ�Ç 7N$ðz½Vö�Ä.Hتçï¸Ï~*éML“8+ÿ§^08žk‘s«þ�Úîõ$´‰„•ª#)\TGòx<–ÕG_Dm“K”k–š»§.òA]Rœ?kf—®Aµœ7•—},]X.—Q,Q­VÑëõ0›Í�ÏçqíÚ5³ JÆ+>›�—-TûÉ=Xu‡²Ö~*y©s®:IÅý—íÒˆƒ¦°uc×NQYYoOkUfu>€s'0�#›Íâ÷¿ÿ=šÍ&Þxã ‹E3®ÉdÕjÅbÉd{{{888Àáá!>þøc|õÕW¦H$[˜ÙÑl6á÷û‘N§ çб¨qTç�äH&“ƆG£Q3¾# f9‘ÎI‚ò|n±XD>ŸG¥RA­VC4E*•B,ƒÏwž2Ì Ë4��eý½ÁôQ.Ê?þñ�67õzÝ”¬Z­bww×H¢ÍÍM«:�ñ½ï}Ýn×Íï÷[y»{÷îáääÄœ.:d4Z:.ŸÏ‡r¹ ¿ß�x<ŽçÏŸ›ãO6~ee¿ýíoín Ùìœ?88ÀÕ«WÍà¸ÆTI=Î ` ° î(?Ž�c: 3 =C#Źìv»ˆD"6¾H$ŸÏg™*jäx—�²Ä+++Èçó˜L&Èf³H¥R–IC£‹ÅÌÀƒA+ÁÇ –eÊÍJ)e«ù¾_dÞp8l„‰Hþ‹D"æè„B!ƒAD"ܹs{{{øîw¿‹|>o¤åææ& …‚E 1B…cÔ�²]”!g:¿º•,êõzV²’†u8áT­VmN"‘êõ:²Ù¬EÌÐPsÓPGKÓì_yåt:{¶›]Äùwô¼¸P³äè¸Íf3¤R©EfvÙ–mÙ–mÙ–mÙ–íkÙ\b…?ëë êÓwãù’¿óLÊs‚ ð%ôû”rÁ(=ló�ÕÀQ\‰-Ù)9BðCí‡fQi™”E¬^E\@ƒÿÑ×Uþ Öºe�\YêùY틲.0åñx쬇Ñjµì|‹³y>rÇ£?«®¸zäúþÀ@ïê‰{öRÐÐ%êø Îc5õbѳyæãï V*Ȩ[t§‡úòw–i?==E<Ÿ«ÊÂqó9ŒYÙ…óùՒ7zoµê…®·¹ºå½ú>žÝù»® Fí7›MP léó™9âóù�Ïç‘J¥ìóšÉ¥rT}uû­óàÎ ÇÂrŠãñ±Xl@¥îiSìI×çÆ]Óªg®¾SÏå?™L  Õ’JÓétŽÒ5A|Æï÷Û½¿<ÛÒN¸ÑëªG”)Ïæ\ÀEÔ;ÉK—P§íÐ(zgI ‘€àg4¸Wu”² íep«V¥á==^¯×Îêºgpœª:œ#ömuuëëëÈårèt:…BˆD"¨T*¨V«¨×ëV‘„6O‰:6%ž• TûªÄ„Ú9’F$?•¬pIZ‹’š¡4 ,ÀºÙl€õŸòQlNAjÝtLJ,ó:‡b±ˆF£�^¯gÚÖÖ®]»†ï- àP[¢û!í@·ÛµlÕP(4·w’ìѵéJz«ìÔ0›s<#—ËÙú‹D"F`kÿøúlê&ñ8 Žg?hó2™Ì }¢\™¥E{ÌŸÏÎÎl³Ù¬a°º—kð�úSœwµñ:JŽ©ï@ì›cá˜Ô\ÁP”¸g¶1@b·n ŸÇh4B¿ß7°žlºÏçC¿ß7%¦¡›Íγ†X*ŽO9¬®®Z$À믿Žwß}Ýn+++H¥RH$ˆD"Èf³X[[³Å[(à÷ûQ­VÑjµ0 ¬Žh¯×³ToÊ Ûíâ‡?ü!âñ¸5Ÿï¼„Y&“1Vœà?Ó¤™zÌtÚ�†˜p8Œƒƒüó?ÿ3þöoÿv.‹‡ÊKc¦ŠO#˃ç®ÝnÏ9”­FP0³ŠÙYzé^<G45¸ÓéXI¹k×®a2™Xº§OŸ¢Ýn‰¶³³c›I˜ò]©T¬N§:R,OLj�ࢾj™9:=ªã±X ét‰DÂÅbv!(‰3’Bº©s]ð»f³b±vwwQ.—Í îõzH¥Rs††k‰s¬›�{ØqEuF“p8ît:ý‚a£A§ àÎ�;8>>¶ƒÌÑÑÖ××Í "éª n”óx<Æñññ\4„�ŒàÆÈg1j& bmmÍÈã^¯gän±XIJ-Û²-Û²-Û²-Û²�7ðÕ/åY€>�f�3�çž»€ PFËÖ)ØÄh{‚å iÉ*`¾œpuÊþÒ$H§n ”8 �KÄ%ÜïŸÍfså� ê1ðŠã`¿Ü@:–0Ñó¹úßü ³4²”2¥|x¶ã÷ò¹‘HIJ´åC?œÀ�α’[”S"‘°1*�Aßœc&°J’Žçžm,fP�FãRþzÆÔ9Õ ž½ØO÷, >�%–äw±Ÿ–€Ó¬yµlÔW‚G”A~b p©Îq¼néCž¥Ø]Ãì/ËÀS_Ø_~Fç…sÉqè«îð½\›ZöžMÁ-®·~¿�Z­†r¹ŒF£�Á`0wV&°ÆÃF£aw¢ÐÖ˜ÓñÉdbwr§R)´Ûí9pž:4�ælK?q®8<Çs|zÆv×û«DË 0‚ä×4×õ€òå=áÍf'''6WÄŠ’ɤ k9;Ê�ÏÓ߉á)6Ãl-¾‡˜×> *–2óAÇË>ûý~4›M ‡Cø|>¤R){6ËTjv%çQ‰G®µ@ €~¿ÿðM2šÁºù|^¯×®¹Ð±ÇbP4e¡eïøYâ T¿|ù²]Á1žœœàñãÇøÎw¾cvV¯�à\rS7)+%ð¦]¤½ásãñ8z½ží‰J>Qÿ¨ÏÔ%Ýã”d …BfÜËysI^ê0ß§ëƒßÉkFqrr‚b±ˆz½Žz½n×s¼ùæ›xã�7�H$Ìöèþ©D”»ON&Äãq ”Ëeœžž"#�š­avŠ^@üŠà;u�sN[§> ‰~÷8Ý;´�ü>÷JîqŒøåx½^#Kööö°»»‹?ù“?Á³gÏ0™L¬2Ÿ¹±±�ÉäüþxÎi*•B2™Äþþ>&“ ’ɤᒭV ±XÌ|%’\Ô{ö‡�îJÂRÄiÓ´ %\NûG»Ï¹ãd†Øt:E³Ù4ÛÅ5Câ‘}åÕZBQƒ译DðÂ}÷\W“É¡PÈl*ÜçpiÔž*nI_/ !�£V«áàà¥RÉ®ñù|¸yó&®_¿ŽP(dwBi >ú1Ýn£Ñ™LÆöúKŠ]rOâ>Iœž2‡Ã–¬£ëØçóYÒ�–èÒHYb5J|Ál�Œ™LÎïÚØØ0ÇB…¦Ž3_0D©TB.—Ãúúº�ø»»»sŠÃlFŒX�ÇØÚÚ2c6›Í,ƒçÚµks~¯¦ ©£H’C�S¢©°,·öäɼÿþûðûýøÁ~`“µ¿¿�z½Žõõuœžž¢ÓéÀëõ‘ 5* …‚]ôG妃ßn·íP@’A£DèH÷z=”Ëe„ÃaþøcD"\¿~«««ðûývùå`0@§ÓÁÉÉ Êå2Úí¶F\sŠñ¿ç›N±×ëE±X´Í7‰Ì9Ãá¡PÈ> ÚÊÊ nÞ¼‰Ñh„£££9FûË/¿Ä矎×_Ý4.jöC# ”@Q];;;C*•²Ì%¬˜�ŲhívñxܘkèØ~þùçf(Òé4ž?޽½=œœœØfÌÃÍåË—±ººjk! ‘HàèèÈœŠh4Šv»�ããcD£Q‹Báwó®+ö�FÖë=O'�F£ˆÅbVê0‘H ™Lšò¢I:N5@™ÑX¨CÅ”u®éð3cï»ßý.²Ù,Ž���ÇÑl6­ì7%]�‹LC: < ¨¦š¹çFW°¯ÜÌÙ¸N�¶¶¶Ìñ¤ž>}úÔH›¿ú«¿B±XÄÿüÏÿ`6»¸¤—‡*¦^óP¨u \�Am ëAg³Y#¼éÓ�[¶e[¶e[¶e[¶e[¶y`˜¿+pÌGøjT°–¨àóø^åé¯éwjÔ²ßô›]B@û¢Qªün}�:F}ï"ÒA¿CåA™h¤¾žÍ4zTŸ¥•ú³_ÓrØ|¶öEû©‘³J(! $ž+‡E}äkŠ1h ›‡® õ³JðégU†î|h]ÒÆ(Ýï§®i_¨[ª�ªü]çWõe‘>ðÇ¿ëÝ<›°/zÖbßy^S ÐÕ þ®�‹Šé¸%Âøî½­ºvUGx†Ód�]Sü;ç�x #¬ dN§S»O—À;£Ï{½žÚêýáù�\Gîüh¹E èT}quA툮]~—ê–οâd”á"›ÁFùPFzOÉp8´ì V­ÙÜÜD"‘°L8%óHDp®ÝµN;J"Åí—‹. Òæù^I6=?+n§kšòÓµ¤:¶¨Q?Ý5AÌŠ„†ÞÍÄïà˜ø ‚Õ¦?$`x É0ŸÏ‡ããc�fÙD~W @­V3"�:«ÙvÄu.ÙV²â2˜�óÁ@ꬫs‹ÖÇ¥¢¾®~íŒâ„ZŠŽö‹„#‰¥xÿ×€:mêç²ßî8•ÀPÅ#\Y¸‚ˆ °ºAW‹@þ�gûi5 Ôïrû¤ Ï&ÚžÙxÎYäG»rtIˆT�PP›?»$�ÊFÿ¾HÿäÑÊ)”¡µ ˆëxõuêª >éª>(é£à˜nRÙô~+Ë9_ãùŠ'áÀó•‚…¡PȲ¹¾rN)o…Íé"ýå9’ÏãkJ†1ˆ“2e ¯fãÌf3är¹¹¬+V‡h6›V…ƒØñ ö�÷G0b_Ahމ„Œ® Wuíè89‡º_6ßìØW-ßDó^ >ïìì ½^Ï@Ü~¿o×&T«U„Ãa :æ9_}~‡Ïç³Ò~J�©½p‰%ö‡ºN=q+u¨ýSÒ™Õ=\ÛáöKíœÚ6]�Jxh`Á¶Ä\§pI/Î�‚¾|6±EfÀ@2™D:�6\2 ^¯ãÙ³g†—¨n�ì!‰¥�½îøØ'Ý‹”„$î¦ÁÕn6«ÚPÝ÷ܽŠ�™6ñxÜ®!È®%Æ\2™rQ[E¼˜×}t:˘�F‡ÃøÆ7¾�\.g õnÑ^¡úÀy#.ŪCÌr{™}Õ½HçÞm*#Ý©ï”�®U ž¦¼VVV,Ó‰úÉy!�ë$tÿfåÚ5ÕY­ÎÃ9QbOñè^¯‡f³‰L&cYÚÄ&}>b±˜eªc_ܽR×›âeLò |”\äœèû�O»L‡è÷ûVª–=«�‘7Ð}DçËë�ϺՌ¾N�X¤¿šå©Aç®nè¾ Ä×ÀÙÙ™‘¥,ÇȲ¼6ÆãñØ÷‘4%ÞKŒ]ùÚ[ö�º@™ÐPÿ•MƒJ¸~¸ÿÒ®¹Øå ™Fº`h̘&FG�$ÂÊÊ ­DAhþOG‚NI Àææ¦Ý[”N§ñÅ_`8âÕW_µt0Öï÷ÛEl Ke¢X,šÕj5KÍ]-Á…ÊÅÌ äf´²²bÙdau#`å¾\9›Í�Ífí.¢Á`€n·‹D"àür²íímœ��áèèÈ>÷N§ƒd2‰³³3"“ÉØØB¡†Ã!NNNà÷û±¾¾¿ßoìüx<Æ|€­­-3<¼K©ÛíÚE‘œOájÔ1;4 IDAT”UŒD"V—õôôög�ǃn·kYtÚ˜µÃù™Ífæ¬Ðñd¶ëŠ*ñ¨ÑOŸ>ÅãÇ�qûömsLYƒYíE’:¬®ãC#ÂþPWY¶M癋•wÿÔëu”J%@>ŸG6›5ÇŒŽëÙl†N§ƒétje© ¥R ­VËHNêõææ&Òé4 …âñ8^ýuär9KÃäüó;¸°•Tsut6»¸/ˆÿUE£C#¡Nœ{ ƒÛétðäÉøý~‹ØP'˜Î )]— ÕCˆ:0 ç�s¸èu®mf®±ïL >99±û¹x_T³ÙÄÿ÷c6;OÙ§^Óacjù¥K—0�ÍiùðÃQ©TìÎ+7€9”‰×ëųgÏÀÈÖZ­†n·û[¿l˶l˶l˶lËöum º* áþÌß$ãÏ.ISß§Ï[­Ìs­¾Ï%xö ¸àF¨ºà±~Ÿ‚-î³ÙÜgéÏ.yÂ×ÜÏê¹—¿»d ýkVQ˜N§v®ÑÒwe0ÒHV¾ñy”ûÊÊŠeÖóL `çQ‰Wæ.ˆ©g;�6�S=+êßTgx.rÏCü<ÏÅz†d œÊWA=ã(ئà�öQÏ` jºs«z§?k´?Ïb*CŸÃÏé9Ï%4” ›Íf²'Qr�s£`™ÊR›{Ž'𥤃 j1kˆã |¹Vc±Âá0ÖÖÖìî"b#µZ �FÃqyWïùeEsãU²D�wÊÌÍÊP2AwuP± ’7ÄA\@›2ÖHx-[¥ëZ¯ 6G\‰eˆ‘h¦Sƒõ9~‚¦'Á_%R U» @)Ç¥öM1(f‹‘hÒ;�‰[(Æ úî®oâüG,‚8Kô1h”¨ŠU¸¶™z¡„�ÚzêC$ÁÚÚ²Ù,Úí¶·Z-4 T*D£Ñì›fìP~j;ØtÝS~îpΘ1àýª£’2ú<�óH$‚d2‰V«e€6ß“H$ìûùÝ$+¨³Ô)^ïÑl6ÑjµÐjµÐï÷-€úÆ�X[[{ÁÖR¹V9/JæqLÄ=LÌ{Üô}ºÞ‰¹ûƒîKНñÔI&'(ÁËñª¡ü‰;r,ºŽ©3´e>ŸÏJ+òî§V«esO\œvDɵ­�Ç®[év»ˆF£ˆÇãˆÅbf#\GõJ÷}•ƒ®mú�ŠçÁù´ËÓéÔú§>!ç…•&“ Úí6¢Ñ¨ýÎ{{½b±f³™+.ÿ@Ô %It>XîŽ>VÈq¸ëÇÝÓuïçw°djµZµu°¾¾Ž«W¯Ú¼Ó&‘bµ2bøápØô�:«ö•²Ñ9Ò÷,"�•üå}cÄ/µÍßp$ŒF\•ž ?;éõzQ«Õ°¶¶6WǘYO:£×¯_G:�F»ÝF0DµZÅ“'Oðøñcœœœà§?ý)Æã1¾üòK\¹rÅ.a£üþóKD¹±œœœ`<c8"™Lb4Ùe{6ß«Î6ƒ%>ߎBÑ3™LLQêõ:ºÝ..]º„h4jäÎdr^÷É“'H$hµZðx<èt:¦(¹\,­:™Lbmm ±X ÓéÔêÒ1#áæñxP¯×Íf…BÁ²]Xc“dKûq±sãB ¡Wæ™!•‹¤Yè+W®`{{_~ù¥]PGÖÞëõÎÝ�ÄtpÞݤ‘k¼Äô“O>™3¾ê¤Ôëuüîw¿Ãöö6 …ÂÜ‚ãAƒ†µV«a8"“ɘÎQOúý¾„ÜDéŒø|>$ [Ú—ápˆjµŠããc|õÕWèt:VFŽu(5C…Ž-7$¬ì kUçäõ'‹asso¾ù&þôOÿ>´´ñÛ·o›þ1…U se8hب·ÀEÊ´ÏçC¯×3ãMr¸Q9®!áAa4ammÍReY_•$ Â5O£tsæ{8¯ÔYn(z¨\”"I²šúA‡x<£×ë™!^]]Å`0@:�6=å�x:�bcc±X µZ Åb—.]›o¾‰>øÛÛÛv73ul´ <|Ð ¥~rr‚ýý}s*T‡—mÙ–mÙ–mÙ–mÙ¾îÍgô÷};;3Ò¨R©ŽÍ6GÑáVƒ£�:É\ˆƒÁ…BÁ„¤ŽŸ·9åæGƒLyðÃx<Žt:�ÍÍMär9lmmamm Á`}ôúý>666ÌÑg´O­VÃ`00ƒÎû‚ÜÃ@<ÇG}dµ5™|vv†B¡€••ìííÍ] ÇÃJ$Á`0ÀÉɉÝÉ”H$�N§­¬I,MßÔz¦ð©³ÔI�ǃJ¥‚‡ΕcMUf“Ðq`©;ê-#¡ö÷÷1�Nq||Œ~¿o—›é÷}ó›ßÄ›o¾‰×^{ ;;;ˆÇãxòä <’ɤéž:Ð*G’DÚXuؘ-¥kÖ��ÒÏë34êÄï÷£ÛíZ¶#]×uj\gƒÏ§‘R'S£D•5wTü�×è#Ã<üƒA¬®®¢Ùlb< ɺ×õz}îÀ@]þáˆwß}ív·nÝ2"¹ßï[©;�Çc5‘=ÖÖÖð£ý±X OŸ>Åææ&öööp÷î]Ë<ÔL¥e[¶e[¶e[¶e[¶¯{s�¯—Íú^=Ó�T_“?ëAß}¶‚„.±¨? Ú¾Œ4ÑÏ)žº ôñ�‹‹Ý¨X”U£ïaŸdæ{ˆR��Ï xÀ³›ßïG4E½^7Ÿ€®‚E‹ÆéŽYÁ9s—dëx\�˜¯+ï üÛ¢yX4‡Ú}û«D€û=|ŸÞ×£}Öìþm‘,ÜqèßUGùlž{ô³̪ú°«Pàèecç ìƒA˨aÀ Ǥ±ê3É�;%HÜyr›y$9ÖrhívÛJÌG"Ã,VWWí^[¯rÞê²:[�s¬…ýÔRS:!]ù²Ïº´¹¯«(7ž‰‰Miæ?¯$¡žÍ5;BûÏj&ƒ³Ù,ÖÖÖ�Ïçáñxæ*‘¸ý$ö 8ÿ®;²u®T6”»ê.ï+!iÄòLœ+]?ºNÔ®/Z'‹Ö1׃ꂒ)¬8ÂùU¬s¥úD™,ʣܩ³®.1›¤å£ëU ¼Ùl6—ÍH?Gçz‘Ÿ¨ãpǨëU×*³2ùw&�0ËŽï—/_Æ¥K— …æl–î´íœCþ]K´ªèúT”1+XñóÔ‘Éäü ú½^Ýn׈Dms’uSJuãà$sWVVP©TŒÉÕ š ‘÷�ܹs±XÌ2lhPÛí¶9!‡‡‡/dHèf ‘J¥°··gÂâ%mdO™}�ÇçXtàâÒ7ŽÅç;¿¨nccìÌ)SÔÒé´äíím<~üØî?!Aåóù¬ì˜ÏçC³Ù4gf:�Îeñn~O6›�S\ÍÈà"999±Èf~äóyìîî"•J!�£R© Z­âÖ­[&_ÎK0D2™4Ö6£P(ÀãñXD<·;z˜µuãÆ Ü½{w.5�„eÍy ¶ ©�d¹yï ’Y[[[¸{÷.ªÕ*vww­þkµZµè–B\__Çúú:VVVì7–(ãxWVVìN!­[ËÿÏÎÎp||Œ““Ë šN§H¥R`Æäÿ±÷¦½�&×ð!)QÜW‘”Dµ¤îV/ÓíYì2ÙìØ°á ‚ù˜¯ùš_’$ A�0¼ÎÀp2öŒÇÓ›ZûBq_n"E¾„suXÍÎû~Y€ÐlòYªnݺUuν·¸˜¡�šNoϸ"áX­VQ©Tܤ"$™éóÝ„„Þ»wÏž=÷¾õ-lnné3™Ü¤ù«T*ØÙÙ™!@&“ ¢Ñȩ̀FtiÄ…±.(Õ`ðjôæy&2Z‰ÆøôôÈçóÖºyS¢X'J5jz-ÿO£¨‹�"ÒÉJ7g$†¨Cìg¶?—Ë! "�N›N²}ÅbÝn×ÒÈñ=…B××7¡¯ÛÛÛøýßÿ}t»]Ë·K/¥áphc&‹áÉ“'øøã�1�qçΤÓi<~üù|ÿýßÿmM$UeQeQeQeQåÝeøÏõ¥ óÀOO܈$XQ€Å Üw(ˆà:HéUÁ&­×Ä?楨r� >Ïm'×Ï*+%©ê¹Þéüÿd2±=s&“±�û÷ïãòòápñx|WBÁ6®ãç+v"»ÎióúQ½Àµí”�8½ÇíCíãyïq�,ÕM·ÆþÒï•0q=­Ù_ïêKÕ `Õý§—ºFà(HÄý©ä "ºm›Gr¸2rÁhÖ‘Ï÷ûý<º©ê¤Ž;~§ïÑ( :{ª®M&ó„n4h4¸¾¾F*•B±XD(B,3Ç\ÝX$�²ººjÑÄœ(W�|Q›A§QbA¼Vë©ýÉtVù¨~¨¼\pšûf¦øb?p߯Ðz<q˜t:�ååe´Ûmܹs…Bá-\€`)�@ 1�qP¯wS‰Ç)q¦'q™ÑhdQ]J&LåÞš8“âˆJè½¼NÇw¯c=™æŸ <�z){¶“²W›É JttV\’Q$Dˆ;ÑQüèèÈž5qpp€Z­ŸÏgÇ}pÏÏÝB}®Õj`ié4úĵq*;þ©ÌÃΔj8âÆúN¾ƒó�’„ÄuIni4š»Þâ8zWÏ››tΚ‡qÎs¶WÎÃ%�h»ûý¾¥¨¬V«hµZ(‹ØÞÞF:�~kBž‚² ¼x¾SîÑN(&ªýEœë—éô&E�š!vÚét¬ýì#Î ZfH#w8�Þ¦JS0˜Àt­VC¡P€û  ^�â_þò—xöìÖ××M‰˜bl<£R©xÏI…ƒ�Üœµ¢Ûòò2öööðµ¯} ËËËÆ:’•ãÀ¤åóÚí6VWWg®cg)ñU,-Ê„¹Z­"‘H Z­"—Ë!‘HXTážçkwzzŠN§ƒ�� \]]!“É R© “ÉñÂ÷R©lÌ9Íè*#‚çDµÛmŒF#d³Y ÿ›L&F|Åb1Äãq›H渲²‚X,¿ÿ&bgoo›››(‹xôèÎÏÏ--z^ eÃÔp,HÚ¶Éä&—öÎÎü~?öööÐívM�àåË—h6›ˆF£ØØØÀææ&‰–——ÍcÁçóYd‰BÞ`0ÏóLŸK¥:�Žå•l6›H¥R•ÅÅA$±ˆ)>Ÿ^“ÉĵZÍþÚí¶ bF€={ö ï½÷¶··mщãìì ‡‡‡¶èÐ+ûYåG!—ÜÑ›ËRó^ê1Ç8ÇÇ=2X?¦¤wד'OðæÍ°¼¡|¾ˆl? 9m ûZss2o-‰^õ¶r= T÷¯¯¯Mþ¼÷ôôÔ‡{ �øÞy «ëÍ˺ðw×qÓõ~v¯}˜¥²áÞ‘€Ï+å€gÄr?¨÷*8á‚HüÌ=“FÌèïó7-ŒÊHA4÷·yà÷ªJ\ÍÓ…yrg}›ÐþpûŸº£¤÷\ú ÖWI j]’Aû�{+÷‹Q`Nd¾WÓ Ñ�{ZÖ•ü¬¤:ÿÒQT¿W KÃy`µíÊÆ½†}Á}3ANž'«Q+t ä™&¨Ä߈Midž¶›m§îs|RÔéØãó\™ð3¯WÌMíºÎû „`R'•Ìè÷ûˆD"3Ϧ®Ón‡B!¤R)”J%àÝn£ÙlZö÷T2‡u‡h6› H$v±ªN§ƒx>>Æêê*R©”ÐJ6pAËû‡Ã¡åól4F.Ôëuø|>lmmáüüÜÒ–---¡^¯c4!•Ja}}£Ñ_ûÚ×pvv†v»=1Ä(¥ÉdÏóP«Õ¬ã5ÿk·ÛE,Ã`0°Th�FÔ®×ëÁçóáää+++ØÙÙA&“±þ™LnC°Ùf H¯Ö9�šæóy”Ëe3„+++¶€T¯5ý¬“;u@#\Z­2™ ®¯¯�ôb ¸T*…ÍÍMD"ë[F#åóù™\¾�Šd µ~¿�t:�D"‡Ã¤º¢„)<›€‘6½^�NP,ñôéS|ôÑGØÝÝ5/NV£Ñ­V /_¾ÄÑÑü~?‰>üðC|úé§Fp’Xu?”;?³Ÿ8¾¨K4RÔõ|8==Åx<Æöö¶Mtì7öÖý~gggøÑ�~„ïÿûùECÇ ‘‹vÚNj×KKKˆD"Fà)ÃMªÓé˜wSkpìQwu!Go‚½½=\__c}}�@'''¨ÕjhµZhµZ€N§ƒ;wîØ¤Ã¨¹��lmm¡Ñh˜‡#I,?~ü?üáñÞ{ï!�¢×ë¡ßï£\.›ýjµZæqs~~nýÁ…ê"=Ý¢,Ê¢,Ê¢,Ê¢,ÊÛe°¬¿±(H£à¢° ~º€¿nþ¹F›÷^£ß»{d®I èuÚ&æ¸Î瘀1÷œ.0£¿l åÀ=p»_'`¢²RÒ€€Ëp8´´èívÛö]‘HÍfÓ<�µ "êw”÷¾úNîÔ¡Ìæ�á.ɤ žûYÁC}Žñ¼–{ê�ö‹Ê]÷©úÙÆIV©G¿ÖE�oÝ�¹ªcó"Mô�”¥FZ±ÍÚÿ®c¦î�ùYAT^ï‚«nÖ îe¨—J((Xúõ�ª:&T_ùLîi™m…Tˆ!g"Z¯×1™Lìè„Z­fåôâ×ýãtÁf!É IDAT:E³Ù´ÔüÔYî³)W•™ nÛæ‘3ªã ò³¿‰)éÀ02Å"8v\ˆÓrѾ‘¤a8â0|Ç-Ÿ¥ïçõ®ŽkÊ9ÅuÌœS¤ö–Ïâ~˜vBuŸ²'®ÐívM^ÔÅ@Ø7|>õ�ýŽ>åÀ3:æEepÌ)Э© ]KñÁ}¾›3ª766pzzjDm(ÂÙÙ^½z…­­­™º³íîXtõHÿ”D£þЩ–ãæ]¶Ú�kÕîêø¥~Ó¡S{·ÛE*•B @µZ�9ÓHåÂþn·Û¨T*a4™Ü­±»»‹µµ5› Ý÷»Ùw”\aÛy 1Zf³!öÄq?/ó‘«/î ¸©Kœ¸„±ê!±4Ê�º¥àÚ7”]¯×3 *›ÍÎ8ø«ãt¹\F>ŸG&“™‘‰3]gŸ3md4E·ÛE·Ûµã\tnt×SóH·Ý:q,ñytà'îÌþcÚ=’X$ü£Ñ(‰&“›(S:³Ð1€ºØétlÝÂô¤L‘I;Á@ ŸïæX r¼‡ýä¶Oۣ뽆r¡ÜÕž_]]¡Ñh T*¡\.Ãó<;ËíS\SåNˆª:HPÏ´u¹\6¾€Ù܈ïsžÔèPÕ·¼“4"pì.ô8a\^^"�¿ÅÊÑ�¹ GÃÉIši±<Ï3…ŸL&ˆD"X[[³ðaFØŒÇcÿÉR?~üõz¥R �ÀÍÁg½^ƒÁ¡PÈÞ§ k‚÷ÑhÉdÒêÍ…´.àùBƒÆˆ£ããcxž‡L&ƒN§ciõÆã1jµ2™ êõºÕ÷ïß7��ò`½˜Žù>)«Z­†D"�v»�L&c9 IÆ ÷ù|ýBv�m8==Å矎O>ùÄ΢n=]h ‰NNN0 °µµ…Édb‰ -=˜. ÍDr颜‹ ç`„ÛAãqvvf¡–LÓÆHž^¯ÏóÌC(‰ ‰ ™LÎD¶(鱿¿�³³3¡×ë™gI1ê( §Tê!=t@Ò($ t:ôz=‹Eìîîâã�?Æöö¶y\°Ÿƒ��¡S­V1±µµ…\.‡N§ƒõõu‹E|öÙgFŽ2Êe¹i$¸°â$2™LÌ@rSÈŵNjÜ@e³Ù™qJÝÖ1À¼CÎÎÎðÕW_áë_ÿ:ƒ^¾|i:êbŠõdÝÕK)ØØïv»XYYA·Û�Y<3\’æ-UûÀˆÅ^¯‡^¯‡³³3”Ëeär9„B! P(ØØ¤zžg}ç÷ßD·Àéé)ßÒyŸùê¹ì¸ s�éÊŽÏ#Þ žÝü�ûFS)ÑÆþU§ÃÁ``è¥OOx%�XGÝãi[tÌôû}„B!s`Ô1F]é÷ûˆF£ö^^ï÷û-{APâMl��c±ØŒS3Á2�¼Ó>£·;ûEíŽö‰-. ¨ýÂçèaì 2ò½ìRÙê¤I¼€×±}tÜä» ¤X¤~ðL#ž—]©TfÈ8F{è˜g}ik8.ˆ�àdý(3ê†õw%3Ù7l§f¢ìuLòÿjHk#�q}={˜¼Fœ±¿Øê­ã‚ÎÅìouŽ& ›ÏçgðÇh4ŠZ­†ÃÃ÷Èc�ªà3u èøQ;C™)YOÝSgz%ç9:¸s¯Úr¶™é÷ëõ:R©”9ì3�Úx<ÆúúºÙ ö £YZ­–9_O§S¬­­áÞ½{ˆF£3ÎÅJ¬°Žj_¨�šz‹¤³Íø|>³SÔ}uÊ Mäü¤œÊþ]k•�öƒÎ Œ¡ž)öH}¥|Ù¾z½n)äH`O§Ó™óÙ§Ó).//íºf³iíTB�ú¤Î´¥~¿ß¢�x|ƒK)¹ãgîºLu“ß)Þ¬ë2’h$‘è@,MÓ,²Ä©Ä6I>Óî0Åžk‹5ë1mà6-¥Ké\Ͼt׬À{UØŽF£�‹‹ Ôj5;íX,¢P(X61%9ý~¿éö`00’•~ !o ë1ÕÓápˆz½ŽËËKT*³»ÚÚ ÊE׊jÛµÌMO§à4+C#@�Ôëu¬®®Îxk肆J@%�F£Ö±ìôP(„\.‡{÷îauuÕI*•‹/,í›’L±X gggØØØÀïýÞïáÇ?þ1.//mAÑl6�E¤Õc<ì3™LûL¥S€^ZTìn·kÞŒ|!K{rrbuí÷ûh·ÛhµZF†�¼(—Ëv¶ Ï+bt–.Ì#‘ˆEÄp ‘lJ&“vC�itøŒp8Œ««+|þùçØØØÀ£G�f>'böûH$b‘ôNaê:žÿDÑÔ\º‰p� “6 âþýû¨×븾¾F©TÂÁÁ�yM§ST«U¬­­!�[J?wàV*£V«¡^¯yÈID£x‚Á –——m¡¤©ô©Åñ  .„ØöíímËÇ�Fg6³ô~8<ÏùY×Ç.ÀËumêz_»ä‘þßõÆ0³ÆV¢BÁU}¯¶]‰-÷} ¶òyZgMÝûøî'$“$â9°Óétpôûý¶GááÙ xSVz�ûN•�tz½‚[JŽ(X£{ˆyäžÊ\õažÌ]°•i¸]ŒCóø»°ú.œÓéíY¬;ÓmkŠy—sr摼�8çÖÅ%Ì nO&#I¨;l?±Ö‹:”Ëå�J¥Ðét Wët:¨V«¨V«X]]5ò�ÏÓ÷±nÚGq£ó#¯íõzö�Î�®}¦Ž‘lоÓ>ás'“‰Ù Õ¯P(„L&ƒóós‹ö¡,é¼ÏÂóà—––°¶¶†b±hŽ»�ú.Ç�RÑùšY¯–——íø Ú ¶É�bÒ(5� Ó÷ŸÔú©þéØfð7Ê‘$©]_ç5Ê›÷ïÒlZ$Ì‘Ïç‘N§qqq�^¯‡d2iõ£,‰¹�ÇcÄb1„B!#–——Ínòè �kˆ;3ÂG E%’TvéB[Åö©�çØÑñÆ~ã=ÄÌY�••›CÜõ‰’K:'ò:ö3#+©ÿÄ™Õ9Ä]ë½ËaÀµƒ®4›M”J%;SŠºO<›mQ¹«œ)c:H¸ú§2åüîóù,©Z­Z û�ŽÝÇq¤)ƒUǵ¼E±áL³¦JÀ:šÀ)…`fò¡1Rcëóùpÿþ}ܹs£ÑëëëÈçóˆF£æíÀJ–Ëe 3£ò°�L¿ÅüŒÑhår±X ý~Ÿ}ö¶··í=ñxÜÒI…B¡™<�®b¸†$ ™±$Éè¦f³‰@ `†Š‡[1ük2™àÜʸ½½m9gÉ ªag[£Ñ(|>ß û§Þ=l7|;IÏó°··‡{÷îÙ½T6¦ �F&‰DìŒ"žyD(�"�N[Ô�‘Npö£†~r¢R/„Éd‚íímÑ�Ç‘H$‰D°··‡µµ5¤Ói»giiÉÈÏópyy‰¯¾ú gggðù|ØÙÙÁêꪑ“@nT’.æ‡Ã!úý>šÍ¦ ,’?œ¨‰b±à£�>Â�;wŒ,¡~3úª\.[Håêê*Ö××ÍÓ‡‹ën·‹/¾ø_|ñ……ï~ôÑGv0šNú:ÕP»€º¨`Øn¦Ô›L&6Qôû}" "›Í¢T*áåË—¸¸¸@£Ñ°1ÍÛÍ&...�Éd̘§ÓiË�:�LVµZÍR ò]ÉdÒ¢áŽ��mR .“\J$fx#‘Âá0NNN�ÇQ­VQ.—-]\­V3Rîõë×35Ô2í ×ðà666ì¼¥ñxŒp8ŒH$‚••xžà– eØ0 (Ž_zK„ÃaÔj5Óŵµ5Ë·»(‹²(‹²(‹²(‹²(·«qÁ5$÷�ê(ÜnœðnAD�PçþM�m~V[´QÐNÁPíst/Çs¸÷U0Žûjî±'“‰¥[QÐ�í$@gB•l¯:h)àÉú„ÃaK äóùì<àe4ëÝh4ÐëõP(lͽ�0͵ÏHÊOÁlõê¦,Ø.õ°%XÇ= ûÇ]Ëó™ì/³,¤ü¨7<‹ƒ{U%^˜iÃÕ)ö-k3eÅÏz°6™J=‘H FRƒuR½UðZ�v»´ÝÉl#ÈG²�˜õ›ÄÃx<¶L1š–Æ%�¦Ó©qìîs4µ½Ä‰ƒp_Ì:jjt uÄï¿ÉÞAÜ!�Ϥ$¿¸¸@0ÄÖÖNNN áø!1ÀþN¥Rð<Ï¢Y …–––pqqaö€rdû2™ ƒ�íß5ʇîJºÑ[�ÏPðóêêÊ~SGJ=‹›¸Ž‘H‡FfÙ \)3�ÑhtQr’NɱX ívÛúžç.+aÇqB»âyž�B¯xê�Ú$¼uü±žÄ ™ñG£Û9 6ZS:sO&7gnp,PŽsJ4égÅL˜‚‰k¨wµZÍÎÑaJ+¶Y#º'FÉñÅz³c;éìžÍf±¹¹iŽÁÄ3=ÏÃï~÷;|üñÇH¥R† °ÞÄtHöàå¼@T�$žT­VÍŽhŸP¾CTýV@žöžv‹²¡ƒìÊÊŠ�Ù©T ív( ðù|h·ÛÖŸ‰DÂìK2™Ä‡~ˆÍÍM°È[�&£-§�€W;Âq¨8,çtÚmÎ9ÌnÃþäø¡Ž*ÙCYŒF##½¨oÔ5ÎW:ø�fk4X^^F4E§Ó™±ìCà6 _&“1’3‰ P( Z­ÚÙXÌnõòåKÜ¿÷ïß·£JÁ6’ ™žN§‘N§-M£Ïç³ žOÝ'QÑëõÐl6­�Ô!®k4‘sƒ�Ù ãf:C�°£íâÜÒétŒˆÔ€�0óù|†Ã]__£ÕjÙ|¢d‡®4ªGuœóí1p‹µ œL&æ¼ ºêá[ÕjçççfKÂá0>|hýÌñN;¯D ZŸï&Ê�ÎÄßi5ËÓ¶Ûm”Ëe4›M[«P×ÖÖÖà÷ûÑï÷íX þ_I;¦¸ï3¤0ëYÀ‰‚ wz}(CÇ{Ù™lT®|>o†’ÆÄõ¶iµZ(•Jèõz–RŒ!Š“ÉÄl �†‹ßl6ñàÁóª 8::2a©âh§QVÖ˜“v0D¹\¶¶¿÷Þ{¸sçö÷÷-÷3£ B¡ªÕª�‡¢ ÒN§ƒl6‹ÝÝ]xžg@5�W,³ÅS½M§Sxžg@<�#ÛÎ -ãñ¯_¿Æ|€b±h•›“œžÃvkê„p8Œx<>®Ì½ê± ¹DƒÁ =—ƒˆ‡ámmmáøø›››Èd2ÙDåå‚• ËJ¥‚N§ƒËËK Ýnc}}wïÞE6›5æÂ� Óë14s<qà Œž Ñh™L>´A™ÍfßÚX6›M”Ëe“k6›E(2rU#m^¿~�—/_âùóç&·z½Ž££#ø|>ó0àdªHÊ–‹(ÊP�(åÍ> ã …àyž�×F£aÆ­ÑhàÍ›7¸ÿ¾ÕïôôÔ‰C¡öööàyž�±V«…���™¾õ<kkkFDŽÇcKµÈñÖjµP­V1ߤuäDqqq�ÃÃC[ÈO§7a¸ÍfÓÚ‹ÅÐjµ,º� �|>�ÓÓSø|>d2™™…b·Û…Ïç3ÒùþçpçΜžž¢Óé  a}}‰D‘+++èõzU ¥R ¹\…BÁ&0ÚÚM¶7—Ëáððpi´(‹²(‹²(‹²(‹"E=¥¹ÑW/Ge¸9×?%=̬ɹ¯æçâW¯NÍö E÷9 *¹àœÖ…÷qoÁvª&ë¤Ä� ƪǬK2(ðÍçs JgÇÑhd`9Ïï%¸¯Ïg½¹·à3YxtA^£™zïª÷8eÈu3Ÿ©8€ zºÑ'nßð9z�:³*�Æ:r_Å=–ÊD‰.µµ�¢ïVÏgÝPæ¬3eAEêŒê8I%ÏTïÙ.Õ3%”øN¶‡×»:éÊ—x�YÁÜÛ»d*eÉû5õ!÷un=©ïlïòò²íïG°Rñ Õ'žUÁTYKKKFŒ]]]YÊ{Í”Âç�#(OÌ!›33ñ'‚ˆÔ íwÕÊ›}Éþ ¦AüŒç‰¸²ÖqîÊè]c‚ò×±Çgh¤Œ;öù|CÔuÕûyŸ©ï¬ÉTb<Œ‚Qª]UüˆuVÝe]‰éé\¡öÀ�ã4ÉDf�!>F‡V/ŠW)¦¥cܵaJ‚©�Rb2ŸÏãøø———Ö_�NoÞ¼Á£G��H$l Q–×)Ú%b•ó¢IZQoG£‘9¼²�.!N Oû�z¡í×1êÎjçèˆ@l³Ûí¢Ùl"™L¢P( “ÉÀçó!—ËáÎ�;H&“†W©ŽëûÜ9‘ígTmª:;‹‡3‘:JÔè{tÎS{É#=ˆÇ±­Är´~.97ožW¢A¿×vSljD‰Džç™ nŽTàq Ä‚I¨-Öµ#—Úí6B¡�aÜÔUfÎ"L’æúúÚ²%Ñî‡U' uâQ’™úAù)±¥mW™¹k4^? Ó[ZZB,3L�˜b»Ý6rGRh�8žtlP—Õñ3Ç­Kjê¸â¸'fÛëõP*• c%ƹ±±�\.gS‘Lb™ídûiÔA…ïU’�˜5yò J¸+ÈñÃ~QçêÌp8´Ìm,sÏ4¢�mÂ�C0·ÕjͰñ:‘)ÛÆgR¸ +܆óÙKKKê^^^IÂgé"™‘'Œ;wî`{{µZ µZÍRÝ=yòÄŒ}$1Aÿ`ç�pAÉ0³f³iF•Kq‘$Ȭ‡~Ñè´Ûm¼~ýz&7#;’\¿ß7¦¾Z­âîÝ»€f³iQš. �[^CNÜ\ ñ_Ïó°¿¿�íímk‰"�0x& S¶1íV2™4ån·Û3縃[7ITøååe CÕEz¯×C>ŸÇÓ§Oqpp`©Ù*ÎÂ(²^¯‡jµŠR©„³³3‹àh·ÛH&“Èçó–Z�û‹�‡äyžg©i�†¥9ëv»H&“X__G6›Å½{÷�N§m‘§™k0  Ú�š4J$ ý~?J¥Þ¼yƒçÏŸ[¸.s±.//cooÓéëëëÈd2&ËÉdb›@Ž;’hj8ta©ž””G·ÛµÜ¨$¸4t$Áññ1ÎÏÏÍKŒ“õ—_~‰F£1cdI,N§S‹®�F ØßßG»Ý¶4s¿ÍfÕju&[ÓÝq£üø~.à+•Šy’ѦÐ^q�H9¬¯¯‹^*•Œyç$T«Õf6DÉdÑhÔ¢šØVßêu”L&m<2‚K7,ápÅb¯^½B­Vâ,Ê¢,Ê¢,Ê¢,Ê¢Üw“ÎÏJH(°7�8rÉ#Ý×è¿óŠ‚°.aÜ•º™æ^GAÝ0q=”õ}¬—[G¶EWRJ�<àÕý-½}kµš9kÒ«[åÈ稵 ¢ò{>C ?÷~¬4»ƒžt.Õ”K.P¬Ïqeáö½ Þ))å’v qŸªÀ¿‚ÿ.A õTyR�ÔÛ]#¢´Ÿu¿FY,T½Ñý£H~(Aªiã4*‰é…ˆjTß<=s�Z%>Zºd&±b1 ¸k´AHîÍuüê{©3ív±XÌöÓŒ4Ј,% èrÏOP•Ù142N£¾¨›~¿ßJ©—ôÊç¸>UŸtººªã“ý¢žKì)Ù£ý r'yæ‚þüŽë¡Q�.±¥uÑñ©Žª®“¬¶KõŸEå@»D=$fÀg¸t �|Q[Àú³>t�¦s-3Ž�¬et±�D"1“ÖLûE£Ãcßk4û�x ãs™¢ŽN¨tÜ=;;3‡W¶Y >Ÿ2 ®ªÃ;íÅ�[a­ŸMWêŠÚ%ËU\’Qu…:ƱAì§ÙlZ¶ž5],±¶¶†L&ƒl6‹L&cd-Iœw­Ôk=™Èï÷vL½SûæÚWÊOõ͵A:^Ý1ªú®ïS ãÕí_Î�¼×%M¨W‘HĈÊŠ×W«Uxž‡••Äãq‹NQ'fŽmÊ7‹!Û‘(“ÉMD#3_i„ õ‡rít:3©ÕÐy€ú϶ºsÇ�:q¸myÈ?¦Ø%¾F¬n:�š.0c£]}&QFL›œ„ÖK×tÔk]C¸u’óE«ÕÂÙÙ™�ctuu…�� lmmÙ16”ŸÉu›;ÎTG©³Ô!Ž3b¤Œ–äú€™›8wo%yN,^#u ;�|fy+Òˆ�a.cUø««+¤ÓéÏqQª†\;^Ãêù.]`Р?zôŸþ9jµš…ÙqBh·Û(•JF‘�½¸¸@>ŸÇÆÆü~?ŠÅ"~ûÛßâÅ‹øå/iŒùý~´Ûmt:xž‡V«ea|Óé�NÇÈžeôÕW_¡T*Ím“¦“£Á�ÇØÙÙ±ÅËþþ>îÞ½‹T*emJ§Ó–û”Ä;Õï¿É1�H$P­VÑn·-J‹‘d_Õ€©QÜÛÛÃ|€B¡`�×Òû‡iÈ8 ¼xñ‘H÷îÝÃt:E¹\F2™ÄÉÉÉLþCL:àƒR©666P¯×-Îç»I-÷'ò'²ÈIŽ‘VÙl½^oÞ¼A³ÙÄþþ>ÎÎÎ0™L°»»käpŠÌÁ@O(e’»Ý.¦Ór²R©Y Q«ÕP©Tàóù�Ífm€?xðÀÒ'RÇi¤jµšåЇ( …Bf¬¸ðôùn¢ˆöööð¿ÿû¿F¢7)*ªÕª]×n·ñâÅ L§S;÷Šƒ>˜‘‡Ã¨×ë3éz½žmXHd;�‘YžçÙ‚œdÇÕÕvvvŒüáÄÏ÷­¬¬à‹/¾°qÂÅ=x€›4tlÃòò²éf:�¶~g¸oµZ5½[YYA§Ó1O2¾—9ˆ—––,4œJàÐÃäŸþéŸðôéS ´Z-¼ÿþû8??GµZ� ½Ô�îÅÅž>}Šñxo$õ¸Ùl¢Ñh̤›¢×?ÿè�ʇgl»‹ÁÌ#æ»6^çYŽo�´U›þ.]£Ì)Ï`0hÈÌêR*•ÌÁ<—ËþJHÇŸ¯)çE{RYwâ?”eDBjž.)F«}¦ó5Ç*uZ#jÜùݵgJª¨¾P–ªÇjGY7ÎA‘HÄHþßÄí²Ù,�ºÝ®aÛ¬Óp84ÒB£�5#³†iD4eI[¥z±Ä>`QìWÛ®s‹^§ãY¿S½S^@ƒ,èt@n`yyÉdÒÚÇ(7͈æóù,Bçb�<Ê„¶Wë¬ö‘²Ðµˆ“žç¡R© V«¡Ùl¢ßïcee¸s玽G×q®=¦Hè(áÆkIN‘W{«ÏgÝØ�  ¼ÙÇápØtÅ]Ûj™!�8;�Ž ^*1¯.†¸xQÏÝâF� IDAT2áÊxsJÖŠÏÖ‰��Á¼‚¡P�@ÇÇÇxÿý÷‘L& œ�L&FÇÜÑ~¿Õj÷ïßG6›Å‹/°±±a!Êårÿñÿ�X,†õõuxžgjlUìœñxŒh4ŠáphÄ�`õv è‚Úï¿ÉE½¾¾>6ªìn¿ßÇåå%&“ J¥’É„ç#M§79KÛí¶å”fºÝ.úý¾yVè€ä(•Jøê«¯P,maGÒŠ‹°N§cJIâêßþíß,g)ÃÚ¨\®1P¢‹ÊJòˆ;ü‡øîw¿k„U*•ÂÝ»wmsS©T0�-’g2™™W,Q,q|| Ïó°¾¾>Cîe³Yøý~T$!úý¾åìe=˜1 âáÇøàƒ°±±�L&cy›iÄ8á{ž‡f³‰ÕÕU$“IK[G]¢1í÷ûØßßÇ«W¯p~~Ž££#“'‰Œd2iaõKKK¨V«Fz1rÆï¿ /eNÝL&ƒ7oÞØ˜¥! yÄIq0 —Ëa<Ãó<“�#�8©×ëõÕï¿ Ie4eÁ´v~¿ßrÓ€qBæâm<Û�{ê‘ÀH1Ö]½ß¨K4‚,ºÐàâÕï÷ãüüÜ<ûîß¿�§OŸ¢T*™gÏ©¢þŽÇcœžž!¨Þ4ª¬ÛÀEÕh4B«ÕÂp8´ £-#¹õèÑ#\^^bQeQeQeQeQf‹È òèÆÚýS ž÷ëwîsõ9î{çO,ú�îùøP`K# ôŒŽw÷�î³YO×)�¿q�Èõo °½ÒêêêLÄ ÷K*|Üs…x�LÍ@Â}Ï*Pà\Á:Ý» ¯U°PI#w�D}§ ”㾄ÿ'P¯²`ÿû˜Gf*¸êzí!N¢$€z¨¯Ô)%s€Ûì X)¡APGÉ •'壤ñÖYÉ•ïÑhA "zžg©øÜèœ^¯gøˆF.ü_¤¥fU¡‡<õ�àX§ÓA<·³™aXTU1+%¼T_Te½õ xFn°z¯ŸÔ3ö�¦§# ­ç‡ÓÑô~ÚšÅÇ»ªïó@vFû)ØéÚ­«ÚàöŒ¾ÛÅ~Ø~îåu õû};&€@¨â‡:ÖÝèê‰âìÊžûybšú�dŒfžQбÉw²ßÔó^ 멬’WÄX˜š­P(àààÀ2¦´Z-ckk [[[oENÑvèÙgKKKF"è˜á¸ Lô8=c\åÅ~V[C»áÎl§’.q¦D³¿°-ÕjÓéßøÆ7,›�ê¡;FT§ÔVª®+ˆÎ¹Šx*ŸIB�ãÉ%�ØÿØÀk)m'yûuò3åªØ¶þŸºïê7ÿ¯ºD¬–ð>ßíyrÍf{{{H¥Rvü ‰.Úx:�3 ‡:­Nl³žå­©ØÂá0Òé4Z­–5�PòùnœÄy¿b“ÉÄ"gxîûÎ=P &Õ]“±?ˆÏ�Çc;«, ÙQ6Ì@U.—±´´dç RGÈEÐ$“IL&sò×5�’}¬�Î…|í³a1(�ãokk ÛÛÛÈd2Æ¡� ¦ÝÒ MÃʹš:M}ëõz8<<4ç|FÊr¾ä»8.€›ÌXìÚÎÝ´]ƒÁÀÎ~t×Ï3¤Êå’F S£ÑREwÃ$çb’ jdø¡é¯>øàüøÇ?¶I•JC/�r¹Œt:mƒi{{ñxGGGøüóÏ�á…BX]]E§Ó±èÏóføl¿* …¥u]YYA³Ùœ9§Ió5²mš×5�ÂçóauuÕÈ�~¿�F£a ä~¿oƒž IÖ˜ b¿ßoàüÎÎÎ ›Ëßµ°XZZ²ˆ ²«Àl¡PÀt:5½¼¼œ™8˜ØÇ¬s °<¦dÂu³�ÇñôéS¼~ýWWWxüø1¶¶¶pqq�ããcKAǶóPËÕÕUìîîÚ•2ïõz–û˜Äu‡ƒÌó<Ó%z;ƒA<}úOž<1Ò‘ƒ…†¤ÛíÂó<;ƒ*�¢X,"‘H˜A¤^°?ñòåK‹Œòù|öÎR©d“)sÁúý~ó¾©T*˜N§¸¸¸˜IAÇ…g8Æáá¡é#µ¸˜æDCƒÂ{™”‹›L&ƒh4ŠƒƒóNP� )5 f´£ÑÈ6EÁ`Ð6 Ü\’äA�²U�G’¡4hïšL¸@¤.Ñ #ãòò›››¸{÷.~ö³ŸÙÙGÔSMï°´´„v»�V«…L&ƒv»�p8ŒÕÕU‹êâbR©”N•JÅêÎ X‰/]Ô ¬­­aQeQeQeQeQf3N¸{n ÕX÷eJ( Ü‚þÿoïÖg¸à  šêgXãž�E ¦Ü¢ ˆ»—šWƒ]B€¤�æÅ¿¾¾Æêêª91°¥ÌÖgo§Ùâïú>ö×Á Œó>Ýó+i¤ ¦ÊÓ%àæy3»`½Ö×í3c¸×º¾¾¶ ¬‡ À»õQ9i�¹ö'pÄý?s/õ®>Õ¶QoTŸ¹#ÈD’P]c?(±©}Ëý²F \r¥Ö[dîçZ­*• ˜w¼ý*Ãy¢K„r¯~}}mç˪.PÇVVVŒ j·Û¶WgD†F~0ò‚©Ê¬êØeû¹wå3˜Š{lÞ£žÚ(ÊZõTm ÇÁs’c|®âOndÓ<’œßkÿ³½”'¿wå­ÏQ€Û­k °ˆ�F£H&“¨V«øÍo~ƒ?ú£?B$A½^7{Åyžó„F²>$Û4/‰™M}nÈÅi ÜLbJ€©«³‰âzî˜vÉLw]Ä~ÒtŒÌ¶Ä¹�çku»];‹‰ÇÜ�´æ½LÏG™«åºÁubÑ:³O8�*• êõº‘äÑh;;;Èçóƒ–Œ}£ý¢‘°J¼S9o ˸Ön·-ˆ&�#ŸÏÛ¹I|6e¨öŽò䨡.èœ6oýVz:‚ì|�!¾©ÈJ4ppQˆjŒHv0lŒ÷R©hÈi`>þøc[„Ãùù¹5|0àääÄ:|ggï¿ÿ>ptt„V«e‡Ï={ö <@(ÂÑÑ.//mÒæ¡`U¨<$mx& '&5ô�À€|’FétÉd£ÑétñxÜ&¶P(d©ÂXTÙÆ¥¥% ,//ãòòÒ Þh4B2™´÷2ü— Iùóÿ•JgggaÄAÂ0oÞÏp?ÊûÎ�;æuÓjµÐl6g&`õÔÑI& áÞ½{¦G′Îf³øì³ÏìYív?ÿùÏáyŽŽŽ‹Å°½½miÚ–——�Ç‘N§‘ÍfQ«ÕìÜ.ðúý>òùüLhêp8´šf³‰D"�d2iÏyòä òù¼‘iœ4�Z­–±Ç$òR©‰„]ÇH1Fä”J%<þ¯^½BµZ5€ ûòò2ö÷÷-]ÉEe™'“ ...P¯×M¹H¥Ñ&áÃEV·Û5CGãþ¥1f´½IöÆãñ™”pªÏœhI&³dÉù¾p8léåhØ6F_©·“.ìuçöB‹.êõZõ&i·ÛØØØÀ«W¯°··g¤älCÊÛí6...�ÍfM÷›Í¦`ÌzuuezO� ’|¬/Ç>#Á8ÆxØ¢,Ê¢,Ê¢,Ê¢,Ê¢¼M)H£@¼”JܸúL— Ò{]ðÌý]sA îc\�ŸkMM�ãÖQëö.°ÅôµÎ.È®ä�:ÒS™i¦5ZDÛ<�$áÿÝz¸ä¯Ñ÷+(<göºçŸGô°= �ÏëÅ€·÷Ÿ¼—ÄÍd2A*•‚çy¸¾¾6'0%*WWæõ�Yî=¨«êè¦à²:t*˜©Ïç¾^SîÇI ñÝÜ÷(ÙܦŒRG6•!M�òÐý§ÊSû„XÁèÉdÏóP­Vq~~Žååe¤ÓiKk£ãZûCq¡yãb:½ÍX‘N§g¢”LH¥Rvþòåå¥�ƒJZ°][yîíÊÊŠ�¯Ä½5?0`Ÿ¸—+?>ו•;Øï܃,æ÷,ЧèþV?»º¨ö‚ß³Ïé9®ãBë¡÷iÔœkc Ñ:wœ)ÖĬŠ…Í±96\»ÎÏì7%?ÕQω†B!sŸNo²˜ƒSù‘ðdÛUG�ÛPªs”�btJ:*ÉÄ61ê'Û™rèC¡ÎÎΰ¿¿�?üÃ?´w)¡¯Qe|.Ï̦£·ð$DÍÔív-Z€`º|ïÚ>OIKÕµïj›©¿Œv¡|³Ù´èFœP'˜õŵ‰jܹHuŸ–žeO’G‰IÕo×BI*Õ-bDœ7ý~¿É“ØïÓùËuâ`º„•¶mžnS¯z½žaÇ-9�Þ]Q©Tðå—_â;ßùŽ�¿­dí–êq °LK~¿ß²ñ{føb_S_}>ŸEì0²‡ýàž!¯ó‘Kžs|«þ©ŽS÷ù~�'Ø:ߤþ1BÆç»!�£Ñ(êõ:†Ã!¾öµ¯™n0X‚ø3±¯ø^u6Q"�òaÝõ8’r¹lçMµÛm¬­­akk ñx|fîå»”|Öõí›§�[þ£Ùl¢Õj¡Óé Ýn[&)>3—ËY£§}Ô('m?mø»¯ÞŠ4*—Ë3ƒœÉ©�‹—õÖÔs$>&“›OÇÇÇh6›øö·¿�ååe#ˆÈP\]^^F6›ÅÓ§Oñïÿþï¸{÷.<Ï3Àœ@5•äý÷ßG$ÁÑÑ‘=“ùp³Ù¬¥y{ï½÷Ðn·á÷û­� 8O$�FQBï)* ‰n*2=;”¥ã=Á`ÐòyF£Q°\» ¥{óæ�-xXçz½Ï󌢜©8Óé§§§ük¶†‘“ �ÇøÅ/~�µµ5›dHp�ò ¿ß�££#”Ëe#(ÈèªLü~¿ (*& M±XÄßþíßâG?úö÷÷Q¯×g&°P(„Ÿþô§fx¹€¿sç:� … #Î{ByqqaúÀtoLç÷ûqvv†r¹ŒF£13€e§d#A=Õ)Ö—÷ìãséÐÉÏzn±€J è~Þµ |§ PëgÍþ£úë÷ú>%ºø|­uƒº®öBAy:•kš;Õoµ�ól¡ê¤lãÊÊŠeç!€¬ÄÀ(µQl—Ú2Åد¼GA\—XÑã:|>âñ8677q~~nÇ;$ #VøÕµ5$*¢Ñ¨a]Ĺ4ã ÛF¬Êç»ÉnÄH„x<Žf³‰N§3Cni¿»óŒ;*Î÷rŽa{ô,—Ñh4s®É.Å�tÎQ2Šz¤}B’ó[86¬IItb¥ŒòÔö¸’¶Ië£ã@ûC¯¡Læé§kÓõYz�‹Ñ±_ƒ2™ 2™ŒaËÀíÜÃOžGÃ{h×”ü¡M`©íX?M[«c�¶¼ßïÃóÀÉɉ-误oB›ßÿ}$ ”J%K¥õäÉ¢ÑhØ€a=;�Ž%9µ»»‹|>�çÏŸøÌIXëÏNf.^Èår(‹ˆD"ˆÅb¸ººB<G6›Åéé)*•Š…Ww:Äb1d³YìïïãüüÜ ò³gÏpvvfi³X$•\H�£:ö÷÷qzzŠÝÝ]S@†%¦Ói#.¦Ó›P;z5„Ãalmmáøø§§§3úÃ?´¨˜n·k2yôèþø�ÿår¡P/_¾D¹\6ra2™`ooÏúŒ2[[[6˜{’©¸ÈÒF™:.™L¢ßï[¤È«W¯P.—‹ÅP(pÿþ}^Lj<þf³‰çÏŸcooëëë¸wïžE'''1�ÇqçÎøý~¼yóÆúžF›ÿrÂ�«Þl:yé$é.ˆ´-:IQg(S¾�íSo õT˜L& Nƒ¥¬9½?Ôó€†vÞbÐ]´0¹êD®O£Ñ‘Hù|»»»8==E¹\ž1Èl#u‡mR"Šcfooßÿþ÷q÷îÝ™ƒ)yV'n,´¯¨;<Ü“ öi½^G½^·IvQeQeQeQeQf£\æyžºè¼¢{]CëïóH—„PÀHI—¨!p@0H�R®¥ È*à­Ïy×{ù%EX]‹k4‚€à S™p-Íô0 ˆºõQ°Ó•+ð6±§ž÷ê¬EŸå’Rº¾wI ÷Ýóž§ýé~æuJNéùBšÖˆkzËݺ²þótBûOSö(�Á÷º¤ Û̽§FFP�¸§ã~ÍýM¹·VòIÉ0Õ;"]OkõWù)¹Fg¼ÉdbN¸ŒÜñûýù ò㻉 i_sJ0M±­ÇϹ®V«H¥R˜N§æ4ËÈ‚ˆÑhÔOF\P.QÇ:)¨õa?jú5>Kvud³Y‹EKgÕl6Ñl6-­�:ëØÔ1¯ß±.¬—Ž^Ûëõ ë H}�F£H¥R3¸‰Qwîä³Ù'lßßï÷ÑjµàóÝžÃÂHMë§Ø­ÁÁ>g+AEûʱÍïù™ãQÇ’koõOIy·MJ’¨Žó³Ž™xÁõõµJ{{{¸{÷.r¹jµvvvP*•ày†Ã!<ÏC­V³#¾ó�ïÀó<Ú¹,“ÉMJ°õõuüÍßü ~þóŸãÕ«W&l.\~ðƒàôôŸ~ú©åQnÎH¹¸¸ÀÙÙ™E7¬®®" âôôÃáÉdÒrÖëu„B!¬¯¯#™LÂó<„Ãaxž7c ¸�ÑAÈɬßïãÅ‹¸wïž<.S©”M´<‡æáÇXZZÂêê*ž¸�"b}ݽÁ6¾G÷Y.‘Â߸QF 6WÐŒòâþRÁ#^Gg;3n¿*™äê:eHà]ÓÏ«>(�¦{EblûÒÕe¦agÚ)ͦ�Ç‹ÅÐjµfú‹c™íäÿ¼§œˆ+ð¬euá¿ äj� ²ûý~T«U\^^¢×ë!#™Lbss¹\n&šŽgz]__[ʼëëkôz=Ë~3 ŒøÙßßÇ÷¾÷=ìîîîFý¥-Ðó¤˜öMåÈvÑY=�Zf:«k4J¯×{«çÙP:â㪓ÄMkµš�æ+++Èår( æ,OBÒó*W§›£-V›¢÷éû)g¶×绉»¸¸@»Ýž™KÆã1jµš¥¡Uçèñxl„ŽF¦iúN‹$r/dt¥IæÇãq´Z-³åŒ� ‡ÃÕ¢„/u‹²TÇW^ªw¼GûAÉÔét:˜ÂßÙ¿ß�B¡€@ €ÃÃCÔëu$ K�ÀHGâ‡ÄY)G>“zËúkf±ápˆZ­†³³3‹$‡(‹ØÞÞÆêêªÝÇvò^—Œ�F3ÇæP�NÇÒϵÛí™lb:ö‰ëöz= °q�®®®,ÚΔ¥ž‹–J¥þoÒèòòÉd¯^½ÂÆÆ†�»C£5�Q,ñ»ßý?ûÙϰººj ãñõzëëëH§Ó€B¡`DK0ÄæææLÚ)*-½õÉ —J%¼~ýõz“Éù|GGGxï½÷P,Q,m°÷z=ìîîbww?ùÉO,UX0Ä_ýÕ_á£�>B¥RÁ�ücìïïcii _|ñîß¿�L&ƒï~÷»øÏÿüO”Ëe[ÜêAsTšT*…v»�L&ƒx1ï³gÏð�o|ÃÒ¬½|ùõz¹\Íf¯^½ÂgŸ}†õõuV"Jçw7z‘úÀÈΛ�ÀM&¦N§cxœÅ©vE‹þÆ÷Ï‹¬áoÄÄYÏó8>>F«Õ²ºÓ�ùèèkkkv¾›UWšÐ%^b±˜ÙX·>Ç|±IâÒ§§§ØØØ°±Ê>äzŽk#Ž…ÉdbØó¼u�Ú+�×UW˜�)æx„‹ÚC>; Yš¶J¥‚çÏŸ›NN§SÃýu,©³m‚F-’£]j·Û¨T*¸¼¼´ö Ü¿[[[vTŸIÒf2™Xðç=“Œ„ßd2±³™®®®ìL©T*…J¥2CüR箯¯�a.ÇF«Õ²T}Ô{’àÍfÓÒü---ass�?žéŸÒèêê Ÿ~ú)~ýë_ã/þâ/ðÑGa4!‘HXÄK»ÝƯýk4›M‹E‹öa8Ô·¾õ-Ë™÷Þ{ïáË/¿4˜­­-Ôëu;xžÊÍÉz8â'?ù‰¥¦cHã“'O°²²‚ããclll`2™`kk ÝnÑh>Äp8ÄÅÅ…rø×ýרÜÜ4&úáÇ8??G£Ñ€ßïÇÁÁr¹žxðnÿù|Á`±XÌ ø¯~õ+\\\`8>>¶ó‰<ϳÜÅ4\°pÂ¢áæ äâôòòƒÁ¹\nf°ú|>”Ëe[ 1�ØãÇ�±±±�b±hŒ2ÉPjzq¸›z70b„ ¥\.g†úää/^¼°Á[(Ì{ˆ‘i�NÇÇÇð<Ï"R<Ï3ÃÏÁÊM“›ò�òÑ—š:Ðõáï§‘Ð ^½Ç8îx‰:’‹¬›.`ܦn|8vÈØ³~jÈÞµ¹WÞÝà³Ïž=Ãîî.|>b±˜å{�N§ØÝÝÅÆÆ†Mn¾a%ÄX_.—––Ðétpuu…­­-ó `ØæÊÊ †Ã!šÍ&’É$òù¼é/É¡R©dy_»Ý®åR¦w'÷EY”EY”EY”EY”E™]ç)ˆ „Š®á¸&V�Ö€Y^Sw)èÀœ¼>±Nš®K£iÜõ6ߥ„?sý«Q\‡�Óõ±:°TçõÒx†ƒÏw{¦)ÓÑðú««+ÛŸÑIŒäe¤{]›kZo¶éÅ̽)�Vm£îXX¾GÏ‚!ø§ç2((èFÃhÊ>|6ûŠï¤\ RSzÆ«FñYM5ºH÷¨¼ÇõœÖh‚sºÿ!±Äs“ âqO¾SâŒÏ%@¦d–ö“»×á– e¨Î»ª¯¬ß­{T¦#éA|…ŽÂô”æQ�B ôÑyS LàÆÁn<#™LÎY$žTÿØFÅ"²Ù¬áÌcZåϨ2¯ä•’§£j�Üh•½îaÝ{ +q¨{gÚê“ê!u…úF]à=Ô{ê'�sÊm8¥ûꙤ ³ÿôµ]ÔŽw¶‰ÄZ¯×C§Ó1<�ý©D1m„Þ? ŒØ¡~Q)ê,õ& "“É  ZZxö�›ºKeÆç*Iíâ&üž×T«U”J%D"\^^"‰àã�?žI½Æ¾æy\Ô—p8Œµµ5äóy4›MÄãq‹Rèt:3ãXDzÎWì'Ê”S—éË®Ž2cÐ`0@­V›éO� ¨Oê¸AÝ#ŽHL‘2©T*†£4 „Ãa<|øÐÎsi6›ð<Ï2Ðäóy³eêÀ ú©D<ñ”ëëk„Ãa#G#9Agxê�’¯Š™)ÄqëF’îõz3uáM’S‰X%@u®Ñy�ãX‰bhüŽs#I+7ŠŠØàëׯ�F�ÇQ©T�FÍf’ Ìårö\�<¡=¥(±F1�NÑívm.œL&ˆÇã†V*d2$ ›Ï[ä³5 ‘ºÍŒc:¿Q©ºîRƾ ,y û“KKKÈårvtÉáá!âñ8B¡ºÝ®é43hqm¥ç�+QÍy‹ëƒr¹Œr¹ Ïó, îÞ½{(‹F ³Í|>õ‚¶†Î:Þ‰1zž‡jµjúªDw*•š±cĺpÁÌeLkè÷û‹ÅlÞ£CÄtz��ÇQ¯×Ñëõ�Ïç±³³ó“F�@ççç(‹øÓ?ýS´Z-!�N[ʯ7oÞàôô~ÿM„ ÓÓU«Uôû}üô§?E @.—Ãx<Æ/~ñ ܽ{Ñh¿úÕ¯,ÏÊnCC›Í¦~ÿMª±÷ß«««ðù|øÑ�~„b±ˆv»�G�áààÀ¿\.£^¯ãêê _ÿØ{·G¯+½ûa±Î$‹U$ëØÕÝÕ¥îVK-˲d ÄF2‰3‰áÁãI€Ü$@þ…ùœÜç6WÉEN@r•LØ–ÆŠ%YÖ¡%µZ}¨ó‰‡"Y¬3¿‹ú~«n±=óÁ‡IÌ ªŠ‡÷ÝïÞk¯½Öó¬µö·¾¥¿þ×ÿºÎÎÎôèÑ#IÒòò²^yå}úé§êv»C‰+jîííéääD¯¿þºîÞ½«±±1ÍÍÍIº2P®_¿®J¥Lgž¼öÚkšŸŸ6µR©hggGú«õ¯jqqQÿå¿ü—ȼ‘®ˆ§Z­¦ßüæ7Z^^Žˆˆ\.§¯¾ú*Î *•J*‹QþlbbB¥RI�N§‡�¦.a»ÝŽÃèÈr‚Ý,—Ë*—Ëêv»Á®rVU.—ÓÉɉ¦¦¦‚$:<Ÿ×ÜÜœ*•ŠæççuûöíˆÀÐga;‘0>>ÞSó–ÈF˜}6ÕZ­¦™™‹Å8ßë½÷Þ‹Ì”•••ˆ@ØÛÛ‹ú´<ÿÉÉI¬ƒ­­-­¯¯‡\89â}qG£Ò#@úE>ö‹¡¥J4�`b{2ìH gŽœtsÇÙ7ÈQ¿‡;Jþš;•Ü‹ùbÓ™™™Ñk¯½¦f³©ééi‹Åب���•ËåôꫯÙ솞G=ø¦�⦯ï¿ÿ¾^zé¥(eGj'‡7^^^ªX,Fô”§¡RÇ”±æ°UÈÃv»Ýl Ú  Ú  Ú  Ú ý®7·#Sgš×Ó¨`éy†×pûÎmb�Vˆ¢9Ї­  �Šíè„�Ä•ÚÙú¦¶ºûÑØØX”ÂbžØ[||Ëå²ôèÑ#MMM(¼±±¡V«Õƒ y_\NCæÂ³ik` ø c[*•"+…ë±N\ú}\Áz$EÉ=‚à!æuÿþ}ÍÌÌ¡6==åúÉ6º¼¼ rÙF¦ûËËKu:µÛm ] à{eé./¯2ž •ÿ÷€þ†d(‹ÚØØÒ½ë2ǘ;‰C_xNןN¶»ÍÀsc70/|žë{Єô¼,èÌÌŒNOOupp õõuåóy5›Me2™HŒAGq=ö8Ɖ ôS³ÙÔÖÖVåÓjµtëÖ-}ó›ßT©T ™ô,×T¹Üy&+Xh«ÕŠä ÈCdlff&ðcéyP É p)^š•±!É„LHÆâùÚµkZ]]Õ�7ä­‡4ðýÖ·¾¥¥¥%ýô§?ÕÿøÿC7oÞÔøø¸*•Š677Ãx¸yó¦>ûì3Õj5‹Å`Ý–——U(T¯×õÉ'Ÿ(›ÍjqqQ[[[Ñ¡åååØäž>}ªf³©ííí8¨�ƒžnÞ¼©±±1½ñÆúè£�´µµ¥V«,/JµZ•t•277§ýý}µÛmíííEaÌÀÜÜœÆÇÇU.—upp“W*•t~~i—LåÆ0 PH_~ùeL$3Ô¢äpª\.§k×®iff&¢5P˜»»»ºÊ(ªÕjÑÒÒÒ×€÷ááa …ž -긢4Xä'µa‰N;>>ŽZ«’â�¿LæªfêÞÞžFGGõöÛok}}=J³mllèÃ?T³ÙÔÑÑ‘¾øâ ]\|¨¯¾úJûûûºvíš44ô<5ñððPÍf3æ¢\.kiiIÕjU�?Ž:”馈“ç–Gx�m~�”tIYyWé&Å|±1cüù†ŠÑèÎ÷¡vm©TŠ(ˆIæ=5Âûä4Œ8I‘ñƦü›ßüFûûûºyó¦ªÕj�³ºuë–nܸ¡'Ož„üñŒ©£Ÿê—köœ™™U«Uíîîjkk+ÊZ‘¡ðÒK/i~~>H”l6„œÑÎX‚µMLLD)>2�ÈøCáÙ}¡ÿŒ�gìùóßý{'ãDÀz6›U>ŸW«ÕŠ=ɳ’|÷ìöF×ÓN""ËžíãACCϳY'&&¢Œç\!«ªCÚ°Ö¨¨„ÞF±GúX¤³ë¤Ô xŸµwppø±— d%irr2°U—+ˆ0îÍ=ýœ%Ö"ï1–nÃ¥X(Ÿ�Ø><<Ôä䤿ççƒ/h6›_³ÜN¡zP·ÛÕÔÔTØ`ü�,±½½ã377g<9q�Á�ÍÇûN.rÞ÷uýIva&“ LûüüüðCíïïëððP¿øÅ/ôôéS­¯¯keeE7nÜÐþþ~�d¥�.õóŸÿÕøÿAkkkúÙÏ~¦ÙÙÙˆrÙÝÝÕùù¹ …‚&&&´½½­µµµ(ïÛ‡"{úô©:�Nä0Ù0¨œÍ3GöèÔÔ”¦¦¦4>>®ÍÍMíïïÇBF!{¶Æèè¨Þ}÷]U«U]»v-Xøn·«½½=MOO«R©Dù¾Z­¦N§£Û·o¹“¹¶¶›F‰¤Ë}ÃE©!hNÿñ?þÇX²ž`YTÌáÎÎŽ®]»¦×^{MÝn7Œ6×ááá¨�H ºô<*EåF¥îvww£o®,QºdI���kllL333š��Õòò²VWW566`>iœ^‡EâJ�3�7¢ =ò�9£æìÓ§OU,uçΕËe5›M5�  ëFFF´°° ‰‰ =|øP�= –8—Ë…âö3•èGj;ÉÆx¢àè«§3ò]'{ÜÈseë†ÅååU}fˆœ.H"wºØô|CÆq¨V«Êçó=©¼ÜÛ¥÷‡kûk<3›+©Í7oÞÔ³gÏ411åÙX\îúüépoé*âjccC�F#²ÛˆøÁ ÛØØÐ£G�4>>iàD@ÖB8aŒaÀyÇ  Ú  Ú  Ú  Úïz{‘­æ¶»7ìg úÚg]; ‹nsÒ$Ý{ÉšœžžV¡PˆLIŽ’ ¼!ß$@*¤P©T¢ï”ïC�¸ÝÃot¢c|è}¾;22dÖééi øã.φÌ9öçvH¿y@»^Mm;ÿŸæ*È= àuž!Å}tt¤z½®ýýýÐ%¬‰b±¨l6«ýýýÀ uyy©ååeݺuKÓÓÓ=¾×¦8gJ˜ñ::Üu¨<ä3YRÌÑùù¹ÚívTÌšŸŸ×ÔÔTp!àý­V+8œÃÃCMOOëÛßþ¶îß¿¯b±UÊBgú¢i·ÛZYYÑË/¿¬÷ß_µZMßùÎwT.—õùçŸk{{[�F#&üóÏ?£�ìŠn·«ÙÙYµZ-íîîjii)ê1g³Y(ŸÏ«\.kqq1ÊËmmmE »N§£>ø úK/½¤ëׯkggGÿý¿ÿw}ï{ß‹ b{{»G‰T«UÕj5ÍÎÎÆâ:;;Óää¤VWWà888ÐÞÞž&&&tvv¦|>¯J¥ �CÜ>øàe2ÍĮ̀\.ëÛßþ¶*•ŠŠÅ¢~ñ‹_èã�?Öøø¸~ï÷~/ž‚g_Úßß�l”ÅÄÄDŒU½^�³TÈPøàƒ"k†ƒíü91*˜� qAcQœžžªP(èÝwßÕè訖––"ËTFã[[[ÓÁÁAlâ)iÄœG3-..ö”ër'À�dÿ‹œþ¸v>Ÿ×üü¼æççuçÎÍÎÎÆøÃèÃþ£LŽŽŽ‚�÷ "¹ŸŒ-2GY?œ/ˆÌ•• E¤‹nwwW§§§Q?²ÕjéÁƒZ__�ù`ó‡”cá;Á‡òprÈ73š;‰îìúÆ”~/ýŒËsD9é—Då¥N'r¹F G2Õ K|#¤¿(Rï_¡‡Aèäòúúº~ô£õ”„888ÐÔÔT"qÆø¡ðûnp´Z-}õÕWZYY‘¤0d&''có^__×ÌÌLD4u:�0�}^OOO#É×ß  Ú  Ú  Ú  Ú }�4r;­у�Íêþ�Û™é=üÚýî‘Jþ6›í1±åý>é5ü^î+¥DJÚŸ\ppÚü{€"~€Ã^Åý�´¼Ÿ^_z~`0>ˆƒgÞ7üÓ~D…ôLvœˆoˆ ®å$IJ ð–’;ÞR;<‘û�“ûc�{¹¿ïã™Î·Ë®üñ]®ï`£ÏW*G)(ê~¡_ÛA}^w r�5åÄ`�ߟ F‚ ñ½ñ�ðƒ...¢Ä·�µ� 4~²�…‚)i#)ª§¤²H� ácƒW ÷Ó/Zo)˜Îk�¿¿n·>3ãŒoJDG�¯?ã—‚ÂNþø½¼_~ï´ÖÃÃÃqtYk¾ŽgdÞ3@Òqä;ü=66¦ññqMNNjaaA+++ÚÚÚÒÁÁAÈíÉɉ~õ«_innN·nÝŠ³Â!†‘Gd|nnN‹‹‹=åÖ>ÿüó8ÿÝå ì ,]î-�û£££žg�q‚”=ÂuŒ¯9ÿ ÏIY8ÎxÞÞÞVµZ�`ö““U*ݸqC‹‹‹�÷²6³¸!ƒÀ�Y�È k— J¦²”+x6MºŽûí£Þ\ç¸>dò3ð\·³Îݸgýˆìk�kõ³CºÝnde2™HˆèvŸg¡€AôÏ9y”郬™™™Q£Ñè!í=(Ãq\ß›É�™™ }êÁ3™L&ˆæÌÞ‘_‚�t¯÷[뮓ûe:ºN~QCæØ#††®2™Áç%)æy'˨Z­/ÀX4 �ŒŒô�¦}ܾ}[7nÜÐÈÈH¬CžÕ vŸãtOOçÅ÷\ÆÏmõI\@öà=¶¶¶422YEׯ_×þþ¾vvvT­V5==™¿ãããºqã†^ýu]¿~]CCCªV«qf¡”�F«««zå•WôÅ_èÃ?Ôøø¸nß¾ÝsSM²i …B>¶°° {÷îiiiIûûûšžžÖƒ477§©©©8ã'=ÔëòòR»»»QϘMgxxXŸ|ò‰Þÿ}ݹsG úö·¿­¯¾úJOŸ>Õ¯ýkýí¿ý·ƒõötÁ³³³8£!©T*š™™ÑÌÌŒJ¥’ÎÎÎôÙgŸ©ÙljffFËËËš››S§Óé9/§Ýn‡`!øªÕjqPç�7t~~©š‡‡‡‘stt¤íííP *ûûûZ\\ÔÔÔ”ž>}Fïõë׃Q>??�,.w”ˆ*£ùæïBäF_·{•ºøôéSݼy3 )y/¿ür”d³qCˆÍÄ�ó‹‹‹8“ îìì,ˆ+ý™šš #errR…B!æguuUwîÜÑââ¢æææÂ¼¼¼Œ�„E‡Q ‹Ê¼°@½d rjj*Ræ%ÅâG~�AÒj[­–ööö¢ä‡pR'öüü\Ïž=ÓÆÆ†jµZ(*O';Œ�ÃÐ�- 6B”ª“7ÎÒ»"J£ÜPLþÌ�Û IDATy^s£jggGÓÓÓ¡”&''#Š0u Cú5??™Tlün`§† }sƒÍuÊ.I_}õ•FGGuëÖ-=~üX•JEÛÛÛ*•JÊd2zýõ×£¾êÎÎNϽ\¾in`°±QöððPãããÚÛÛ‹�öììL[[[j6›:>>Žtlæ¹áyÝñKÇpÐmÐmÐmÐíw½õ†S°Ÿ†�ˆâ�U)ÈÌë6p?~»ñ"ÂI£ÈçÞ?&©—r¢‹Ï¹ïæ6+×sPß ½¯“8€aƒ<ðå}Kû�¾æDƒÛý™L¦§Œ„ý¦éÜx ×öhsÒð}܇äóNB8ÀļzÄ²Ë ÿûü; îg�ýB;ãïU<|<ûÉ!Ÿûm¾cǸô›—~¤^ „¦@÷e¬97�l´L&Ó%îçÕdŠ_ÈØxà"cŽÌ–qÞ«cî?NLL¨êëÃËùú33†^MÅ�d�J‡È"cr¿®_P_JöÑú­[þ§¯¬|';ð�Áø>}âù�¬/ûA‘wž�ÀY0Mtä‡çdí9 ì@.†p˜y¤r ãìcå$e ÎsMäŒqt€ÚÉ‘löªÜDµZ l’J'dM?À�œX÷ó’¼äž¤À¾$iffF÷î݋㠜´øì³ÏT*•ôæ›o*ŸÏkbb"t„cgÒÕ™]«««zúô©$iqqQü±?~¬Ç�kee%0#ôÁ½Ž›:˜Œ_^^ àXeò'&&¾ħg� KŽÙy@úÐÐÕBÏž= LSRTVº{÷®–——{ÎLbŒHÈår’¤z½®f³©ÙÙÙX�bCþQ•‡¬2îï²ãk5.»¿�$ê×��±±±Àj9g �ã�Ü×Iúlöª´g½^�s¶ÓÌ'Öz3Õ%ŒDU.—‹r¡\Ÿù«ÕjªÕjQ‘rˆì·i%'ï+k­_²A»ÝÖÅÅEd*�y�‰‚•ûñ!™L&�7ˆ"Ö´ÛT¬#ß3}îœÀ¤¿é|öÓ×.×È#™lù|^’“çº$ NÐpNyµZÕÐÐPT#Sg~~^«««�Sålll,2ÆÀ‘%ÜöpÂß÷Æ ÓéÄÚfwwWÇÇÇ1¾�|ëëëj6›¡—FGGÕl6õôéÓÈBâˆ*x-..FÄ­‡4zã�74??¯wß}W™LFwîÜ ¢§T*©Ýnëþýû‘‰ÃàAО={¦ááahllL‹‹‹š™™‰HŒÚR©¤b±¨……mmm@Îf‡2zòäId3Ý¿_ÓÓÓZ[[ÓÚÚš...ôÅ_D +«k6›!ä;;;:<<ÔØØ˜FGGãL!6”–ÉdT­Võ›ßü&Êœ!¤dP/’ÅÅ5X¤lîlRÒóÆ———‘ɲ¹¹J�Ìʘ±Ó¨ÿ»ŸÑÂí¬¤ž7'&&ôôéÓp*ˆb Tàìì¬^ýõ˜K7púEC°¸666444¤………`a=ʨÛíªP(èÞ½{:==Õ£G�"ãi~~^×®]ÓÊÊŠµ´´ŠÏ�? ¹@ Aèø™FDj0ccc‘ÉEú0#(/Ñ–ÏçU¯×U­VãŒ,®=99©ÅÅE=yòD_~ù¥¶··ƒ°òMˆ9qÃÇ6×s§4%ú7lÜpÇ r&Û Á~-²Å¹dŒC¥R‰4Wœ66C6†ëׯ«R©èÞ½{ªV«* zöìY)¾nÜHõ¾{?ý5†ÉÉIýêW¿ÒÚÚZ”4,‹züøq±´¸¸¨R©¤jµ²GÉ¹Ãæš$u:mllDFbµZÕÇU«ÕÔh4"Šéàà "ˆ8h��Ý74é/ 1hƒ6hƒ6hƒ6hƒö»ÔÜÆ–åõ¹ÎzÙšƒ.R/H™’K)i„ Çuø¾ÿÏßýúÈ{ ”fjøw|öjþ~ÿÔv~ѳ¿¨¿~=ÆÚ‰kÏŽÀ/æ5j-ÊÕìü¶(vŸúð €OG´4㸞>#A?òÐðæÙ÷Òë9¨Ž?á÷vp§ßÜø{>ÖüŸfƒ¹ŸÇ÷ù›Ï¥ë„9AÎ õ`¹T†_DŠ8Ío' £( O /sH=<<¬v»­ƒƒƒ«R©gT1vÈ8 ¤¤ô¼õŒ_#é˜:±‹,âûC°pDJ4¥Yc¾–\úɲ/]—îß§ë–qáþNªq-¯Ú¨ÎsxÖŸ¯QI=eï]¦sŸOÆÐ]žœª_öOZ]üÄ3ˆœ4JÇÊÉ>?ʱú722¢B¡G"PùâÀ3mœlNq Ö?AÎÝn7Æ”nÏn×Ý»wC!»àOž<Ñ| ;wîD– Á·õz=ÊZ kee%0*ÎLÚÛÛÓÛo¿­J¥¢©©©˜CÎ+O H×;È2$‹Ëã þȘ4Ýn·C~\ß°–&''C¦..®*õ@øpæt·{<üÚk¯©R©¨ÛíÆ<€½€C�ŒŒhjj*Êú?yò$Îh幛ͦ²Ù«sbR]è{ˆãvi…—íÑýšãN)žêû™g;Ùâ¤'Y?õz]gggš››ëÑ3¬%Ÿ?ßs ‡h˜œœŒL#dš{W«Uíììv,)‚ 8ÐGd!óNê§z,ýÌù\�Ô——WI’$:\^^F¶ðååeT/º¼¼ì9:=Œ^`�òcàã–’€nO¤sÍœµZ­+žŸÄ�F£¡ƒƒu»Ï3 óù|OPA¥R‰µŽl’Òn·uëÖ-ýÞïý^Ø+ôÅ÷úâØ(„#k$µ…‘#:¸Ža�I…¼¹­Öét¢dìÚÚZ쿪V«ª×ë‘™999©Û·okuuU…B¡Ç>öÖCA¼lllh~~>ε!r¥S,õöÛok{{[·oߎôÍLæê°DŒÀýý}U*år¹8¨X,jjj*„Œ’dSSSñ='p²Ùlõ¤d£¬­­éßü›g0!HÕjUÃÃÃj4q��—’Z__!”žŸ�ÃßL& d„'ý l�$r£Ó 0“GÜÌó¿§û¡„ø|jxxD ãä¬;‹�>a˜?yò$=XÈýý}mnnªT*iiiI…B!€rî711ÏËøÍÏÏ«Ýn«Ùl*—ËŦ›Ëåttt¤££#���©P(DVÒòò²–——õòË/«\.‡¬@41®Ô)ïG½Z_µZýÚ&Á�Œ…B!²‚ ©‰Q€ñ+ÌÜ���éèèHµZ-ê¶’vtt¤�>úHOŸ>�L%6F?�M¥!å­G±!C©��Ê”75’ÜIL�E®�LP—¶Û½bç�†$Å&Ì8œŸ_•/\\\Ô½{÷´°°±���éðð0æ‡{¸âì·‰Ó_È6ÏTâ ÕZ­¦z½®;wî(—Ë©ÛíÆ¦Äf†’Ç ö5åkÇ� Æb||\Ÿ~ú©Ö××C߬¯¯«V«ÅZ$b‹(1úéd`ú\ý²A´A´A´A´ßåæ¶mj'z{¸Íßn;§ä6h?ðÈ£9°‘¾ §`1¾V?ûÎûâ$~…“S´~ö>?|Ÿ�ÀÁÇŽÏqüiîÝ� al| œHâ¾DÀ{Æ~ Qþ6Òˆ{;0’’V\[ÛŸ¡Ÿ?Ʊ0Èràöââ"ÎÐëÒììl`”wº¸¸ª²S«ÕôþûïëG?ú‘J¥RÜëââ"52DVWWµ´´¤µµµ¨fS¯×õ³ŸýLßÿþ÷ƒ`rùBö]'ûðqeM &{||kwxx8Îdßñ@×iŒM­V‹2Xe­VKGGGš™™Ñêꪮ]»YpNRAè¸>šœœ Ò(ŸÏq411äÔÎÎNO¦k&ÅA‘KHäÎqÞß¶øúeÜÁîÈ~âØôx›ú¬¹ËËËÀ=ÉÔð}<]‡¼–bËNQŽ‘=˜ñ Ac}}]¯½öZÈ4º#“ÉDBëÈ÷¼ôùS[†¾r~±ó³WCJxÙ903'“g'B�`çs<ø"kÊqÓ~û¼¯pd®�¾ÖôôtT�ÚÙÙ‰ó�r¹\È’$ÍÍÍÅúªV«QðèèH¹\N7oÞÔíÛ·ãŒsö_Wô—Ö3kšuè:™õÀšò ®�Ý255ÙTèLÖÆÉɉöööBp ¸)ó{ãÆ ­¬¬ùHÀ…·Ò¨Ûí{L*Ì?Êš”½/¾ø"2wؤÉXÉçóÊf³ZYYÑ­[·´°°JÞ£‘À±±±HÖÓ݇††´±±¡÷Þ{O“““úîw¿«ÃÃCmmmé׿þµîÞ½Ûc¸ÔëõžŒ±[[[S·Û�ÁBÑ D¾‰¹Áå›rʆ¦ È ˆT9¸¡à†§Hw»]Õëõ½]!BV¤ÎŒ;Ln¨ð9§+66„'Ož¨T*™BêùÆÆ†¦¦¦T.—U.—£f&›)éì°Ñd =zô(úÍfËܳHõÆoèÆ�ºvíZ”.d¸ÁÅa•ŒS&“ Ÿ�¨Û½:›ªÑh(“ɨ\.+“¹:§†ôJä£ÙlÆ‚gP.iºúååe0µûûûAî-,,hxxX{{{zøð¡êõz<3 Î3½P"�.¬ƒ~JÎçù`þù¼¿GóôbwäºÝçuq]±ºbêt:A¦–J¥P¢žmE߇‡‡uãÆ ÍÎΪV«©ÓéhqqQËËËzï½÷z2·\ÎÝwdÌ0€QP§§§zå•W4>>g�=xð@÷îÝ BîöíÛšŸŸW«ÕÒÅÅE°çlä(dž?uféßÞÞž~ùË_†ld³YµÛí�;odêEz uäÓ�xÐmÐmÐmÐíw½¹­Ô/°ˆæ„€²üŸ’4¼ï>Xú·…ýšÒ×ˈ¥¾ßŸ÷<\Û£öS`†{9�‰­‰OAQÒó 7>ž _1›ÍXˆßíÑÍiÒgÈd2=5ù'&&Ôl6Õív£l›ûkN 9qãcîcËo/Ís1nôìÙ3}ç;ß âÂÉÿ´ù^œêZÞ'ƒ…½B…J^gggQLsrr22P‘3ä�1ƒPÂ>q’ÛçÊûˆüAn¤û:ÿ§¤ÍÇ܉®ññq•Ëeëàà@ãããš�� “5èeÿÈÌ¡èË/¿É3‡‡‡AÖ¡·}\ÑQÞgÝI#t,ÕÙ¨‚„ŒJŠ5˜É\%ó�ùçØ*úƒ wtû“¯�………H8>>î!=i=¤HÖÁääd0­~> 2“ÉhnnN¹\N333*‹‘ÙS¯×ã È&6�ÖaqT*-,,¨Õjéôô4ÿòòR³³³’¤ééi ‹E‹EåóyU«Uýò—¿üšã‘çççšššŠëø¦Èäy7‚çÑGÞœàñI÷¿ûÈ‹GCq=6õ³³3Õjµž{¤‚ç÷K£”I‡DðÔNî;>>®jµ ©P(h|||¨Ç�G&„‡×ûÆè÷þÒ¨*ž™áo”sçF²³.¾ð½ÔáM£Äü~ÔvRxxx8΢ô#µ4!h×××#ÕÙ�ÒÔðN�GúLjh«ÕR¡PÐ~ðu»]½ûî»j·Ûz÷Ýwõ×þÚ_ÓÐÐ�šÍ¦ŠÅb詳³«Ãë®]»¦O?ý4úàcàëÂ7LÖàùù¹Þyç�(Ë944ú°Õjõ|Σ²XS¿Íÿó@†A´A´A´A´ß•†ÝÔ/˜Ç» é~SJ”HÏÏ„IÁÝôÿí×䵤wr‡;—yœÈáÞ´ô9ü÷Ü_ìç#¤?øxžäãé@nJ¹Ožë×s Ú} ƒtÜ}ÌõøÀÌÉÉIœ À™ NHý6 ÌÁþ÷r\’$ˆŸå™\ƒûxF—?2Àß<7÷àþî¿”1nÞO¿gq̧²Ïs;™ÆûN:XÉ}!ñÿü=äŸïòá;;ȉŸ ÁCy®ããcÕjµXGøPø|zsoæÂ±œ”$u°‘FÀo:ççÏÏÕàÙ½œ—¯Å¿(ÀìëÅ_cb|\�øz…DrâBÅ3÷R�‘hè €fž‹j,�NG¹\.îÅ"·ÈAJÈ®:ˆ æëËAJ®áà¤ã€¯¼î•…ÀMÜ·vr ŸÏÇsP"ªÓéô<Ó‹ünÊiz)DæÄeœ±M3H|=W*•ËåÀ@ д½½­W^yE£££ªV«U¡Pˆ@\@Ü•ÿ7¨~kk+œz½®/¿üR·nÝR±X ܹèv»Q 9G¿pí��­¯¯ÇùâèW‚|GGGÕjµ"âǃõ}/“kµZª×ë:88ˆŠ2£££š��ÕÝ»wµ¸¸¨“““]é-­|ùW(´µµ¥F£¡\.A¿�FCõz=ÊÜÝ»wO³³³�ËzùJ' ?nÂå¡ßçYó%8¾ÛíI™Éd‚ryæY©HD ³��u:�8/¼n›Ê—ëYßS..®Î5š›› Â}ttTjµZÚÞÞŽµIU%Æ“u‚L¹~ô}¹OÏ€ãù½Lx&x¡]3Ñ!rsMôOЧ¥¸§Ï]j ý¶Æóær¹ ]œØô¹E¾yþñññX—§§§ñÑ6™ÌU‚Âýû÷£Ì²fŽ>AO:Yã;—8ŽËºtì׳d™Ö¾ï•èV®f?55ç¾AB‹Å¨IJu¶ßJQßîüü\…BAóóóšššŠ¸ …‚FGGõìÙ³H“ûÖ·¾õô@H6DÊÓO}ÀNOOU©T´²²¢ýýý¨ƒ »ºººªJ¥¢�?þXï½÷žŽŽŽT©Tâl¥ÃÃÃPn€Äív;Òaûs¹\D^¸š¾¡B}2]ñ¸qã‚èFœz~ ¸oØLîäädO�Ûta§d�/@7fùߟÁ££U¯×577F;;;ZYY‰ÈWÓÓÓ‘�DŸ®]»¦—_~Y;;;ZXXˆš¥sssZXXP>Ÿ�ÍC�ô¿z½†�Gb¸’>‹¢;99‰¹$Ê„Š‘ÄfãÊz sª°¨ÝÉœ¶Ûí8\±ÙlIQ«ÕôÅ_±çgVqmÈ^㙈þqC�~x¤\jtÒ'W is2È#=RÅ›Œ\‚˜v~~²Hö G[ L�†>ýôÓ0JÒ~¦·7ä°Óéèþà´»»«õõukyyYÓÓÓzö왪ժ¶··Õn·555¥ƒƒu:襗^ŠôáW_}Uëëëñ>²ã¥ {WèŒQ½^�°»»«���`ï“Ôù~‘ë-5 mÐmÐmÐmÐ~W›û%)ДúVà$=?S†ïî§`þŽ_“×±õRË3“’.ýúî>dÚ^âÚ)0Ë¡ÙØöÜÛ3“RßÕA ¿vlíO„}&“‰¬þ~ÄßqûÚŸÍÇÆÉŸ[À"·±±³¸v’Àç�¿ý”"øß³ÝnÇý½’ˆûs¢¦$‘ûâé|¸Ï…ŸDƉ˫úóãs_÷S2‡×Ó @ž�5—w' ðûü @e@fú×h4z‚j©Ê�Ífutt`>cýìÙ3÷dõx´9ÁšívûkQò)˜é¤k“¾§kÜŸÓeŸëxö™Ës:çéÚNý3.ϼçÁ†<;÷ÜKCޏ¯ãE)î%ê¹'ÙLýˆuúæß¡���EÅ!¿§¯;'@�|Lõ³“R�CôÙÉcH!°"®OI5²)ÿOÀ/ -²œê׋‹‹Èà;¾nݧ«a,[Ëf¯JÌ-,,¨\.k{{;Ȩ³³3mookss3².8—üè訧lÛè訊Ţ$E¥¥F£¡O>ùD‹‹‹Z]]�2cÝn7Î…�ˆðÌ1䉳ÊÃúp¬“õ<11¡J¥ØÑÑÑQdD‘Aqvv¦­­-mll(—ËÅ8tÀ92^^Ô ‘~$Q?< ùw¢L™#ÈÜH}îå@{½^×ÎÎN³»~IûâzÂåу˜³éééž÷GFFÔh4¢¤™%�øÉèáÙ®ÜÛu Ÿ‡½¼¼ .`_õz] ¡·˜oö?ü=û”Ä‚é©0æãîã€~@Wº¾{Qó=Ö÷äÝÊÞ7>>®ùùymnnªÙl†ŒAÕj5Õj5Äs�ŽŽê¥—^ÒÂÂ‚ÆÆÆtxxDúÍõeûØ]¿Ð_æÃÉ$æ=NËZ+ �3¾àݬªÀ�áRÝ�ÿ9/‹`γo4±Öi=¤Ñ“'Oâ¡ïܹ£o~ó›A^d³Ù¨™w|| R‚Ë3?ÆÇÇ{ƒÈd ûžËåtÿþ}mnnö¤Þår9mooëÃ?ÔÏþs�žžêöíÛzå•W´¹¹›"›H§Ó‰CÓr¹œ:�N(CúÄ 2.˜¾ˆ�TpC?5Ò…–.©!íÆŠÉ¯}zz©œ—“|–æÆRJ 9ãŸáÙFFFôìÙ3ÍÌÌ„bàL+ÊÂymÒëׯë‹/¾åsxx¨R©¤|>¯±±1½ôÒKZ\\Œ´jä ²‚ÇÓ81¤8<�1!‹‡û ]eé “Ô“m6›=€ÆÆBƒòH%6pdõÑhhmm-ØÖV«¥F£¡ÓÓÓ �{©·Ö0ŠÓ£X0BX´ND:ƒœ:vnLùÿ®L0Ôp*™oßx(©àëÏeÜ qJD°®P>8ÝnW«««QÛóòò2Ò:É@K£ã^¤à™ÓN§£••ýñÿ±þëý¯ÚÞÞŽ�Ý#]9%}ô‘~ÿ÷?“‹‹ Õjµ0Àfff"CÙ£‡<ÓÑuU¬êížœœÄócT¦­¯Kæ~Fö  ÚÿI-5pmÐmÐmÐþw5÷WRÿéEàŽ¿çÿ»?Fók¦�Nôô»_?ûµ_Ÿüs)hå¾›¦ßwŸÁ�è±±±ˆ¼Âž•žƒ-€ï§§§Êçó:>>ŽÀ;'šÜ—p’$?,¸W³ÙÔèèhN2¥@“�•Ï©-ôƒ¾;@…C鮘JÇÕI' œ¬IÁq|O‚ãܸ&úRÒ É~2”5þ¼îs¤`!ŸMI Æ~CøÛ}<¾ë¤‹SNðüø©ø9øÓøR”>Ï¡DsÌ�ÛÙl6J$Ño¨ãããþ9·¥ÛíFù£L&ÓÎú³!<[:ßN¸º—Ê!kÔ±‡~cåŸë7Wpzf“ë3ÿÒÆ£üè=k èòòêy2- …B_¢Ãe+“ÉDV`2ÏÄÜ¥„«ûª©ü81Æzt]¾Ö„�íýñkò›¬t²r{æ8Àååeœ‡ ˆËýwâ,Ò tǸì¸@9â凇‡U.—U*•¢ÿ¹\Nív[{{{züøqTìqÂØ‰]æP||\�NGŸ|òIÏù$àèñ��5�tvRmddDkkkzøð¡2™Ld¾�íâØ,àóáᡦ§§{2v�HÈv»­ƒƒíîîªV«¼°° 7nÈî듹ô5Î<¡�‡‡‡577§z½¤ä:ݱ±±¡ÅÅEMOON()ô2ãºÂçÞ×nÚÜFOó€®ëûŽ?+×899Q«ÕŠÄ‡Z­¦J¥/ì¹I IDATÙ”ÜÃe/Õ9ý°]ä|xxXù|>ž×(¨¶ÃµjµZœ‰C–�—aõõéºÇרáÄÄ„ƒäÉår‘Æ5˜3ÖY·Û�yšššŠ¹‡´EÐ×Nj§¶I&ÓK~õ#ûéf~Ünð$ö·±±1-,,h?äýììLSSS¡ovvv´µµ¤íüü¼îÝ»ø²�Ÿ÷�¾y‰NÜ@ÛuÙ›˜˜ˆR®TbƒH—�Œ/s7::Ç ‹E•J¥d999 É3Ê É,ôÖCÁ:·Z-íïï‡aŃ‘ÞDä=7qCËÙQžòVa�°c�ßÿþ÷uóæMýçÿüŸõ§ú§±i|ôÑGZZZÒ�;wtrr¢J¥¢¹¹9ÍÍÍqÄ@F™<7jÙȦ§§#ÃÒÀ£"˜l7²S2ÉÏ`qåèdŒ3ЮlÒšÈÎ8"$�N'ØWúD-%œ à=H î?99NÅØØ˜®_¿ÿ7�¨ï˜Ïçµ½½­J¥¢³³3­¯¯kqqQ¹\NKKKZYY Ç¥ÝnëÎ�;º{÷nd¤MNNjww7ÆññqÔ�=88…âc€‹°£pC ¿)¡è0‘)ÂfŒ "›Ì€U«UIWõVé×ÆÆ†¶··µ··×shÙ+È…—ºs¥îÑ€ÜÏë3|߉CÆϳ¸aç››‡g)Aɸy!ýNSÈS"‰>HÏkxBðF�[2ÌpþR í—ÏY>Ÿ×ßû{/ˆä˜H5È¡ËËK}ùå—úão¨\.‰Õét´°° \.§ÝÝÝPξ&<ÂË7gÞ÷¢ 0=òŠçHÁ�ÔÙO�•y4hÙš¯K7hý=éymewÒÿ¼æ�"¥ëeÐmÐmÐ~7›G{ù?ûcdd$ØÁ¦Å†#@Í£2%ˆˆOp辫¢‚HÏÍ s0mll,*"Ê ¢(:::ŠûqÞ×s»ÿztt4ÀÊ‚sJ„û8`çüSZYR\¿…À.÷¿tÄv&h°›~jj*æ‹>pÆßý°”PŒõHn÷Ýý|€®í>ÍÁfîŠßëejü÷Kx�€Gl~2(£æ~×rìàøø8|C²Á$E„¼Ë;¾•Úí¶J¥Rœ/@v@&“Q¡PÂytBŠñu+ŸÏÇ<ঙ[Ýn7Jõàó0EÔr½^ïÁÈü /.#Ü _Ÿèf_�ðg q6 þ1ãär ˜‰522¢J¥ýôê…B!ä…uËu� °®Mö„û®R/!744˜–ã|Î}~×%�­V+²�K°ˆãããžõÊš@gð!¾vvßósÄ™ÿV«ÕƒSySŠÕ¹^D¦X�T#I‰!úEY.ÎM !(ÓÉgÈæ=›Í*ŸÏ«R©hbbBív»§bÐÐÐU))/Ïä 8˜\¥RÑÐÐP”Ð÷ç'è½X,j?æ™`'é9I:==­ƒƒƒ�ßjµÁÅ­V«gÎÀ4¨Ô¦¶¶¶rôðáCåóyÍÎÎjaaA™Ìó¬ð²]Y¯<`7ÇHà<66¦\.{æÈÈÕÙó”ø£Rß�˜˜ˆ½§^¯k{{[�F#î}zzª¹¹9U*•§ŸÈ"ó‚,R‹¿és¹\ÖÂÂB`lì�dHq?Özˆ½™rg�Úœa0Ž®õ}‡uë½î“:ŽÇçY“ϳz!IX‹çççj·ÛAj$_(z®My°‰‰‰lÜ/“ÉDù?ž’ËåT(ÿb¿·';¦Ñh¨T*õØd»°.�{'i¸ä3ûŒë¤óósMLLhaa!úA’:¹ç¼ b±Ÿ?÷$ôŒ'JðYô²ëȬ{úäú‰ý RÓ¿ÙËxe³Y•J%…½ÉßµZM{{{ÚÛÛS«ÕÒõë×õÊ+¯hqq1/ÇgÝŽ@6x^ôœ„�=ÏŒþaÉæb_Ä¢YzNÀA2SZr~~^wïÞ�5Ûét´»»«ÅÅE‹Å8Ë…Ì­­-yë!�æææôé§Ÿª^¯ëã�?Öo¼¡ÅÅůES<~ü8Rˆ©­ÈÆ…Òa±B‚�:799©\.§Ëˢ,jzFÒååe0Ù�Æ;gggÚÛÛÓùùy¤ÊaĵÛížh"Œ6¿L&,>ê ·+62 Âíì`4‹Å›üôÉT7XQ`(Dú]Á¤ ±GH�å“Ëå‚.—ËúꫯôÉ'Ÿ(—ËéÕW_U»ÝÖææ¦FFFT.—Õív533×yõÕWupp ¹¹9MOO«X,ª\.‡ƒ633£¹¹9---õ0úÙl6 …v»­z½é{‘Åb1œŒdŒ*6ºl6‘gDÎõ@¡� ‹�ñrVšùƒh`1 ©^¯{¾¹¹©ÝÝ]íïï- �¹B ¤¤‹qÈóĦ䌳;܇¹õþÓwÿÜ‹X6ßð$õ0ùþ='­\éÇyA¯ññq]¿~=6‰ÿõ¿þ—>ýôS5�H?wc—ñ`. ÇNåţ˜ÿñ×·Tø Ú ýej¬s×ÝŒà�$ý­¿õ·ôÿá?ìY[ÞÆÆÆô“ŸüDï¼óޤçõå}�¸: �mÐmÐ~wÛ‹l¦ÜqÛ¿ÃgÝÆv{ͯ�½Šƒïç>”÷‹ëóÛ÷Æ4(*í·_Ï4Ìäu| ÷¼JDÚ&îƒ�-Ëõó略¬ÔKƤ$ˆ¤¯i)ä-õYùÛæt¬™o'c°Cœ�J¿ã÷¤Â€ĸ�îä„ߓϼ¸/îãÕ/(,•½~c+õž�„Ïå`ýsyaÜèWÚøßKûà2ãÌ.—€ö¤TØà\2×ÈbAf‡‡‡#»HRÏÙ7¾JBùú$€XRàA¼Î5|þ<¸ÔQÈ9ŽL`½{�/óåÙø§Þ>nŒ]JÈùX§A—iÔyªx�yHq'×CNâx€3×ó ,ž-í³ëP'ª¹§��ËSÚ_ÿŒ÷‰ùî§s¸–g¸oáä}tv||<ξ¹¼¼ âÅKá¥ã�œøÚ"ßq�Tï8Þ瘡_“ï9ðícd … ü¸ d­T*)›ÍjccCµZM�FCccc�=5›M­®®H_ó½¯.§šœœÔµkדAoS!‚ÌÆ’jQü||¬z½®½½=µÛm5›MµÛmMOOkaaAsss=i€³Ë›ïuŒe·{ì1;;ç³�é±�Ë墄a&óüü°f׳èæ: Vè�'Lð?¤CºÇòý‘‘‘À]éÛÔÔ”&''{lŒT¸­Ãºt"ßm0tž[æüü\[[[Z\\ìI2@–©˜s~~®™™ yÊ:õµ 9†|3–Œãøø¸†‡‡#ã´_pˆîxY8>')tˆÏ_úŠKº¥òŸêf×ENôóž¯óJ¥ÁðdÛ€eSyjrrRׯ_×µkׂú裸&éÓlrn@‘âãæFxºé°Ž}Jþôó>–©Ó8hƒö—¥9ÂpÃ}ñWþÊ_ÑÔÔ”þÙ?ûgzë­·"ÊåEí�þè�ôßþÛÓO~òýô§?ýÚZIÁ˜A´A´AûÝk)á‚íš’xâT§ Têwa{agãÌž¤á§bߦ}a_L‰þ÷`4‚ÐÜ·sÙ}BžÃÁ �½J9âÏìþˆgGx€šûZ¥þk1œfñ¹tüS’,NÓ@:I=` -ÒÙí×ñ~㛤gäzŸS»=1�LHíøtN�„HA Ǽ_Ì%`.€÷u[lhh(žÿ–>Õïr@_Ó@žÏçÏ¿çþ�gE>QæP¼ŸÒ\Œ¥ÑhôŒ+Y#ÓÓÓq.K þè{yydìÁ|¬1¨w܆ùà>®™™™žóÀ³Ùl”“CNÀrÀJGFF´´´@s6› œ pð¶n·gIW¥H�kµšŽŽŽÔl6›½qã†fggC—]^^öœ}#)Öœgý€%3£££�5Æ=Àçæætýúu���E¹½R©Ô“)êYÁèa?3 ÂÂ÷ZdÝÍç˜C*>q Ž q¢9bÆÇÇ5==-IQŽòtéžÆýé ë]A¶¬SÃÃÃ1GèI0÷ËËK={ö,ʲn�(á9)óH&œïã<+ú ›Íö”DK14Ö[§ÓéÉde=;áÄ<8áëcèzÃÉnðU× >6üxƒ_Ïm#×�¾ïIêYWàͬ“n÷Šà,‹Z^^V±XìI a]³¯ÐgöS^OíJÖ®ïù\ýP«Õ¢d\µZ�9ažXûù|>ÞW_ZZÒÝ»wõùçŸ÷Oëë뚟Ÿ×ÜÜ\dö±Î ³½õ�F»»»qàûÎÎŽ~ùË_êÍ7ߌņ’Æp �œƒBB) U*•8¤áÙÞÞÖ—_~©gÏžizzZív;uddDsss!Ôív[ù|^µZ-&ann.Òs¹\6}pp÷ív»‘ëŠqqqQ›››Õþþ~¤Ü!¬4„15†Ýe‘ûë¯{DÂÀuXø¥R)HŽb±¨{÷îéáÇ¥sóæMÝ¿_àÙ8¾pPj?Š”º†lÀ(_�²9::Ò·¾õ-Ý¿?îQ*•z”2 ¨Ýn«Ýn«Z­Fß^Œ¬óós•J%µÛm---I%=7z)5G-S2~$ÅbálHî° d&''Ã�õ…))RÝ0 ë”tc"ØèZ­V�‚wç†ò~”ªÈår=Œ;2ãýqGÈŸ�æBý |�æq§,Uœ.{n0Ó߸ub£ÈÓÙQ¼î@:YÔ/‚Â2›ÞÅÅÕ9To¾ù¦~ô£õ¤E MOO«V«iss³‡0BœžžêæÍ›ÚÜÜÔƒôòË/‡��ñééû”{ q6›�l$R°9¿ˆæ´¿æë,·´õsLmÐþ²4d}Ⱦ€¡óÏÿù?×Ë/¿¬üàšŸŸ�÷<È"u¢¥«uúÃþPóoþMý§ÿôŸô¯þÕ¿Ò/~ñ‹xß¿Ÿâƒ6hƒ6hƒö»Ñ<Ê !·K"=7�6MI&©—ÔÀróøøøkQ¯ý,÷'Üwó{¸� ðç`RjçãO¤ q¿ï †/‡ä¾$Ÿw pòÏpO^w€É�a÷QøŽ�o?b�9Ä/õþ{´ulæ@¶“„åH“Yi°$a¿ìŸ3÷Q|l\öú}—þ‚à§™PîŸ9‰XË\0z`žƒëd÷€Ï8èÎçûÍ ÷„qÒ„2ˆ——Weû½ìÐÅÅÕ+ù|>ÎL@f)©”Ëå”ÉdXÝÚÚÒÖÖ–NNN´¼¼À+dØÄÔÔ”òù|œE,©‡äkµZA–�aá¶"§€ú)iÄÑ `N.N,@ ¸ÿîs‡NÀçOmU_;ô Yó€J'†RŸÑË<:`Ì}‰ôwbÑK¦UHx6÷ûY ܳ¦ÜWw½Ãó¹¬x Ï Ö‚>�fœhsÂŒï„>::ªf³ývÒ�kröN0ì ¯°Î{dYcŒ sãd3�Ø|ŽãØ3ÀÉÖ»¤œàðð°fggc,�–ýÊårºuë–>ú裞²œ»»»úâ‹/ôƒü ð)ÊBB¨Ðgt]·Ûí æGÿ¹`.'&&¬fü‘7aJrÕjµÆ===U±XÔêꪖ——555Õ“í�îIÖŠKê)ÅI8ðÃÉÉÉÀÑÆÇÇÕh44;;Gi«ÙlªX,ö¬-_—`[¬äÇ�Sq½À¸;®–îÕ¾ï±Þ¥Þr…¬²ÊÀt§¦¦"‘ÂR;Yä}dÆ÷}²˜(õ�šËåÔjµ»víš>ÿüóÈJj6›Ajz 5òÆš@×ùó8)‚Ýáò466Ybd>!›<Çøøx”z£JU?ÛËûÇý!B݆ð3Dz±�xöÎB¡r9>>þµìØ|>¯‹‹‹ÀÑ%¬×J¥¢ÙÙÙÀÙÓ}�vïv™ï×®ûÁ\}Ì™—N§£z½ˆdBQ- ²ü›ûP¡�*oÌÃåå¥666´¹¹©ýý}moo+›ÍêîÝ»=¥ Õjµ¥õH<ÊáôôT¹\Nü±Þ{ï=}ãߣerrRwïÞջᆱáá«Ãàfgg#b‚ÖqggG;;;S½^�3“jµš2™L(g„Œ¬tõµk×T.—c€1^2™L¤�F)3Ê`1ð¤6 éæÍ›±‰tðŒ „afór°Ë7f—…‡!‰RFÁ0FÖÈȈ¾øâ Ý»wOŸ}ö™æææzH:H/ê"èîH¥l+,‡g¯”J%ݾ}[ãããºwïžtrr]œås‚3®Ô;>88P­VS¡P625 ŽfffT©T´··L<›Ÿ§Ññ<õz=”…=ÂkâùùyÔsuÙ¡O®dp"Ëår¤VëøøXñ µZ-”ráŠÜ#]8¤ÑKã¥iˆln0"O¾aáyÚ6͉~RE‹Üzy<".//ƒõO>ÿ£Äb¿>`TóÝ”ˆ’ž;.ÃÃÃ5—Édôû¿ÿû±ÑøÁŒÅb1²èPô>ï¼óŽVVV‚ÌzöìYŠGGG±¦GFFtëÖ-U*•0P.//555¥ÑÑÑ8(’Ï»bO�ÑÔ@ñõï¯;Y–ƒ6hZ·ÛÕ�7tûömýáþ¡þÑ?úG±Þd òÏO �~:YzN–ëOþäOô‡ø‡úÓ?ýSýä'?Ñää¤~õ«_ikkk@ Ú  Ú ý7lF|/ýâD¾Ž;Þn³úõhØîmø›­V+ìK‚ŒÜ—s¢Å¯É¾–‚=4�äu�HÜ”0r@ÕýÊ~@÷÷ßÞ|LÜ^Mýïgz'büó)8ë÷÷€I¿�;â?¹çãïçà»a›§ãï`¶�G:W©=îÄ¥_Óæ~¾ï{vC?¿*õýøœ—O* 4‰Oì`¯—gs|Â×QzߘL+úB©xª”à 0Îw‰bWàL“³³³³ÈrX__×ÐÐÕyççç¼±Þ¸J¢ü¦$i?òŸì©X,F4>×r2GRà/¬Ss�].]vÒqMǹ|Që ªÏ[:Wô°ßׯ“G`Od`@®Q €ÛNžÕŸÓû–f<ú³8 �‚¢>OéØñ¾Ï¿ëœ?9==� bö 'Aýü2/!vqqé¾®Ý�ñycþÁçºÝn¬ °)®ÏþÁZð3¸À]ǰRÒÉe’±ql�8==AðžéW­V£‚d>ëÕ Î…âŒDÿaÍû^Ú¯4Ïiz~~ó…òdæ�l=¾—ŽIª‹R}›Ú ©îðë8�ŒŽ‡‡‡ª×ë=}Öjµ8KŠqE.P$dî™…�Ê}|sDñðljnÄð¾+Í~Œ;*47Ré3÷�…né’Œ¡;Þ®üˆ¸999Q>ŸãeGº3×w9A§sæJ¼ÛíF*òÉÉI(àF£¡ýýý(mÀ¦Ãµˆ´ØÙÙÑÚÚš–——Ãи¸¸:\’çðç,—Ë¡³Øp(µˆÎ@žÝÉN#}lÝÉLôÔõÿmÐþw6ãÔØòuÍÿ¾ÿè�þH÷ïþ]Ý»wOßþö·ã{¬ßI¯åeÚR dttT?üáõÃþP’ô³ŸýLOŸ>Õ¿þ×ÿZ?ûÙÏzÖ:Ö�+Œ½Á´A´Aû¿§ù>åQêîïH½g}¤•R‚%µÍÈ&wpß ’Ô¾ã:~Í~ýN_O#H½Dœÿô”S›?ÈSð$%¸§Ÿ÷=sË÷Z/‹Âkè¦Ï›Ú¹!�=ÒÛo¿ r||\:<<Ôáá¡þìÏþL_|ñ…¾üòËHœ˜˜Ð³gÏT©T422¢™™åóùˆªÉårò{ ( $-..êÆ�ZXXÐýû÷544Æíïïkss32‡Øøa0ÏÎδ¿¿QÓ,¯Ýnëý÷ß×?øÿ 2�H}Dh˜h&c átÁö”>’G7`øp&œë#„¥RI�=ÒÈȈfggU*•¢.aj"à( ”Ñðð°fffB(gggcñÁªcü={ö,æÇ�j6É‹‹‹(%GVÏÅŲzÞ¼ IDAT…¶··#ʈl‘ññq•J%mllD‰±ƒƒmmmé•W^Ñ7¿ùM]^^“*)¸cü|¡{ŠcÒ� ?ÇŠ±B®ØÎÎ΂,zòäIœmE¶Ùv>§&l>~½B¡NŽGE¥“çŒmê°Iø÷ÝÈq¥á‡Ë#³¦xß t�8AyctQ›šˆ"=\AúØRVŽùd ;ÑĽFFFT©T455¥‡꥗^Òèèh¤· ]ÕÃÆ!;‰{2zã�7ttt¤‡jee%:ã„8;;ÏæÑ€®Óè«;ý©£ÉçZ©ƒÝÏQsc`ÐígK�YOË–ÿ¯®®êÖ­[úñ�¬¿ÿ÷ÿ¾$)ŸÏÿ¹×O¢ôµ?ï{ýŒ¼ï}ï{úþ÷¿¯þð‡ú§ÿôŸêç?ÿ¹¶¶¶z2+ÙwÌ´A´A´ÿ{š—@ÖdÏp`Éí-S„’¾M.]9üd̶ÛíŒà’ô5»Ú[ê{yóý--‰"õfé8!FŸÓ¿håoÏH"`Œ1s°ÿ Ç#¤!!¸®ã¥ãÆxøs9xÃsySÿÌýÜÔ_ö1u?Ûý @('�Ò :'8rò,%Ühîÿ¤äãæ`‰“]\›êÞïT.}\»Ýn”=L"“ÉIâ‘ÑNX±6¼/€¥)0ïà—ßß�*IqöO·ÛU½^�êÕj5JÇ÷J‰—M"”���{Îl’„šûŒ±)°Ühö¹c ôwPPzžIäQÞ¾.Sò�ùDöð郺OçëÓeÔ}}—;žÅešñp Óç гiÎÏÏ ásGGG�Ó5›Í Íßzë­8g'×TÖý™éØ}a| wÜ#]ïþì€ù÷NCÐx6›Í�Ï–p¬%%#|Íó·—‹r™tŒ…#R²œÙb­"ƒj»®Hw]®¨ºR(´ººª'OžèñãÇ*‹ÊårÚßßׯýk½ú꫺sçNd9¡Ëó1n�»CCWå©_úÌšpݹK³Ùì93…3˧§§µººª›7o>…Žâìk0#Æ­ß^Epó¿»»U~ü¬¢B¡e,!­ØÇÚívþº~•DžŸ™ŽŒò?:+Ízê·¸ùþçX1ÏN©>ŽDáúüÌ\p?ßÉuŸï]ìãtƒ¡»|£‡êõºvvvzÈ ’<œ òù!>]ìýŒŸKIñ‘‘‘¨ìE¹Oˆ*ÆüœÒp®KKä™| ;)ëx¸ïþ#=/+̺ÎårÁ@ !7£££j4ÚØØÐîî®êõº²Ù¬fffzt†Ëß§<k}Í÷é“Û<`®ÍfSõz=Žç Û[È÷Óññq år9ÍÎÎjii)2�F$T�mD©É|>¯r¹¥gIÊf³ÚÞÞÖþþ¾$©ÝnG ¾·ÒÈ#Kˆyüø±ö÷÷£TM¹\Öééiœ1tttÔº¢´0ô&&&¢v/Š BR¡`&''È™››ÓÌÌŒõäÉ“`Ü(vrr9yfʦ�”O·††ôÑG)›Í꥗^R£Ñˆg‡-†€p£!dÃ`!¡äVÀnãÀâteÀbÈf³‘}‘ÏçõÚk¯Å"ÝÛÛÓÊÊŠÊårOé:²[¨u »Ë‚ôÃ×xvÀxR,ÖÚ7nhff&Œ?„åGD€§bÄLMM©Û½:ïèèèH_}õ•ÖÖÖttt¤V«¥©©)MOOkoo/XOwØPŒi`j¬£¤9? A‡åæ¹™{wœôøñc={öLív;2œRÃåŠÂïv¯˜iW8Åb1ÀNŒhîÍø¤ŽMÝ’:馕64WZÌ'òáÆ�g5¥ŸñM¥Ç¦rýúu=}ú´GQÒ...´°° 7ß|SŸ}öY(8ß\©Mûæ›oª\.ëððP�NGOŸ>ÕÎÎŽÊår�“_«Õ¾F:™6<<¬Ç�kooOù|^úƒ?øƒ0FHùÆA›žžÉ͜µµµµ¥V«ÕcD0^¾Áò,iK_óÏûÜýE€öA´ÿ¯�õŠþ`ÝKÏË¢þ‹ñ/ôwþÎßÑ믿沈ýÿG£�è÷©©)ý»÷ïô‹_üBÿþßÿ{ýËù/{"�RÐæENî  Ú  Ú ýŸ×ܶJ}Dl?·9�4J¯‘þ�½šÉdÂþØ|Å—Hmáôÿ½—’<ÿ?ì½]Œ¬ÙuÖÿTwõG}W÷é>3ç{Æ3xìÄñˆ ˈ8 >#…ˆ$w–à)‰‹€’pA."’ î å$I$_’!H‰%3ØØñLf2ž™óÝ_Õõ]ÕÕÝÕUÅEÿ«ŸÚS'„œÄ¶jKG§»ú­÷ÝïÞk¯½Öó¬µ6÷õïa_J7 ×9 “>×ÁbÝgÁwökPñññ±uŸÇA3÷WR ›æ@ ~§ªùûÏþæ€kJ9ððê ¯tSz‡{º¯ã€œ÷É?O}°çË~¬—’ásgîÅØò€8÷çx¶“¾|t¢Ãûåó$i |s_Öÿ'K —¹ô¹Áçò�aOUp€pÊG¹/)äq°“çã»ò<2=x''#}œywîÏšI£¼¹Ö T'^ÁøÝv|Ræ)e™' ž·¾èL‰G—CÛ3 v ÐüììL�F#4¿¸¸Ð½{÷´¿¿8c�bNü¥kÅÔœô÷Œ‡÷àÝXÿ�LÒÝr¹—Öçù’¦ÊŸ±6˜oôgÌ ?|Ç×ïpyyד=‡œ¦8Ž“7rûšæz×ï.#Ò5~³¿¿¯Û·oÇ„,ùö·¿­¿øÿbøEÙìuÙ1p/ä Ü…¬ZÊ\úx‘-âÁëŽYB7›M5 µÛí ôꫯêŸøD$€ñÜ4£ Ùà3ÿ™÷¼¸¸P»Ý‚Ð [ü×¥¥%U*•À¸À!0Ö××ãX �}½9AåÁìÇp¼‚g^{Å#d‚1vrl�wEïx_|_ðu�Ü8áék }‰Œær9 …Ð/Ùl6’z½žŽŽŽ4�µ³³kŽ÷]\\ ²€uã{µ÷™ÎëGŸð|0h2ŽÒ¬HÏFEîÇãq$-0ÆnŸ86Lc­úúMÉxס< ydÞR’Ò­Ûíêôô4°yädÖúKg�{ùLÇ2у”nít::==Õééiðdµ±ÖÀ.©FvÑúúº¶¶¶b–Ëe]\\~uu¥n·«ÅÅEíîîÆ¹N¹\.J²>h°âmŠ4* ‡‘~Øn·U©T"ËLÉ/7€¼† Ì£®0ÒY$———¡,666âåU«ÕâÿF£Ù dI×Fu0YHB(…««+­¯¯G& �ÉdÔjµôèÑ#ýø�ÿ¸>úè£8ƒ©R©èÖ­[!ì-ÙJnpx9465ÃÏБ ƒa*‹úö·¿­_|QwîÜѾð…ºL&£—^zI»»»zõÕWõÉO~2RY0DÊ1¾fNna„¹¡†r}¯×Ód2ÑíÛ·ã�Sãq<¾®'Ê¢#“ "楗^ÒÒÒ’Úívd-Q™L*”~­V›8Yì>¾ÉxÄ�³ü�…Íf32©P"‹‹‹Af³Ù8‹éÉ“'zöì™jµZWl(8 "Bè›ë�~b�0ÇÎ »sèÆ©o®xÜxOÿ¹wG)�’ð1ÀcÌx¦; Þ6œ„���Ø(¥ç„wXYY‰s„ÿùÏëÍ7ßÔ/üÂ/èÛßþ¶~ú§ZµZmj_M —y›·y›·yûáiî¿":Éà¶Ô¬ Ó�q †³[$}Ìþu;%ƒüó”€�¦K¤ñ»×mGö2Ê‘ð7L@v`9Ý·S[4}ÿv¬� bšà¶­‡ûð³cî裂Ïsà”ë¼ïÜ; jñþ‚/øØ¦cí )ÉâÍßsÖØ¹_à×8þ<ÀÊ}W—’KßËýo'@Ò¾;)Á½<'•ühžé冸ï,“ûN&“ˆ„^ZZÒÉɉºÝnê²ö\Þ‘5ï÷§Ü:‰ãàë,2Ì î>3 ?ÀÇtòaöñ¼µç2ËÿÜ/%R9÷õí÷ðõCŸœ„ðké7~>×ø¸÷z=u»Ý(¹ßív§ÈH¾Oÿ›T'¤:˜õèzÒçÓ¯‘nJ!zæ¸ ˜ ¸ ÿ¬ Ö²�¿ËÿÀÔ&“Id;är¹¥É4p’Ò}dÇu2câz…çAt8qéïÏïŽipoéšœ¨T*ÚÝÝU¥RQ½^W¡PPµZÕÇõèÑ£Xó.OàŽœ/ĸ;èz”ùõL™v»YFF™LFëëëúô§?­ýý}e27%¾È`�˜YYY œ4Õë).âÕ�È,s|u2™Ä^].—5U.—#à¸ÑhD¶$2ãkÜ×­g<9IÃs\€‰"£¾§/..*—ËEf(ÿ(¡‡Þ;ôt„çžì'ŒUª¯|Ž}>óù|d ƒÈºbì[­VÈ<ä72à²$3¤YŸdf91ÎÚ×u=…��Ïç#xb‘ 6Ö€—¸ã\{>'ˆ‡yñÇ/yž÷;�SäŽq#“2ERèÓ~¿¯ÓÓÓ�-ö1ÎíCž¼„¡ãÈsìÁOŒ•s#£Ñ(ÈYpôV«‰+ÒMÙDtM.—ÓÖÖ–vwwµµµ|Ìòò²Z­–:�ÎÔþç„éòò²ÖÖÖT*•"p—ws�aÄ:ð6%‘(¾W_}U¥RIï½÷^œKÄЉB¡ N§£³³³`æQ<†X,Ãh!�™�ŸL&ºwïžvvvâš³³3ýþïÿ¾?~õhY�ðÕëõ”É\z�`"|.Ä€þ:88ˆ> @¯®®ôÍo~S?û³?«ããc]]]ÆvzzM±XŒ@IÚÙÙ ¡CˆÉîp�uPžì�HÊd2*‹ÚÞÞöouuU�FC>T¯×ÓÊÊJΛ ‘Nðþü�õÿ™ÇñxsòìÙ3=~üXo¾ù¦NOOµ¶¶µf‰JÉçó@º0K×¥åZÈRáöööT¯×cŒÜ¨‡”ñwtã�EŸ�,>éš¼kµZ‘!Å"]×Km4�¯k8RÚ� 7; ËëF2^£Ñ(ê;f2™(këNY@7D ‘`à=ÂÅ�}wHŸ•Äbvƒ%u<â�ïy=O7àÜОõ7\ûý~(,þæß�|‡* ‘±Ã3úý¾^ýu}éK_R¹\ÖÑÑQ(Ý••èSŸú”Þyç�ˆ&9<ŸŸŠq0œñ}òä‰^yåmmm…b# çõ×_×ÑÑÑÔ¡”8éè¹n·;U“£ÐFcúãVêüÌ"‹R'rÞæí{ÕF£‘þù?ÿçú{ïï=÷�\Þ]^ÿ¸z(ê|_[^^Ö_úKI¿ù›¿©?üP¿ñ¿¡ßù�ß™¯Ÿy›·y›·Â怴ƒæ9`€ÍÌßç³4€ ?éêê*"<ñï¼L þ“ƒ=ì¡>ñ< x¶ÛÜjŒˆcŽ?è`Rj›{V…÷e˜Íó}¼feì3æži2ëž)Xïà~J@ù¸Ð'ÃRÒˆ~:èâÄïë +ÑóžIö€¯Fÿy¾Ûñ”-‘‚ÒÞWü2dƒ±ñò\ø[i¿û0îÃònܧå��ßÔOãZ¢§¥›rþläܳºÀ4JÑ]Þ'‡œ0ã]¸óqvv¦b±8…Q ›…BAårYÙlVív{*0×çÅ1duqñ:û--sçxs퀮ï1ƒÁ@gggSeÃÆãñTÎ![} PŸëù\yæ¥ÙîÝ»Xï}ô‘>øà}⟈Àð|>¯|>`/‡¨°š×¼+�¾ø^ƒÁ@­VKµZ-2_[[ÓË/¿¬{÷î©T*ìkœ±¥j‘èNÞ"`jœií¥Ë¼ê:.—ËÅ\‡CµZ­ ¸ŠÅ¢–——Cf\Æý�ÁÈRÂÐ×Ò,’œ†<󹯲ŒÀš<óÉ÷uÏÂ’nÊtBž¡;Sb }Çž_,ÕëõT©T´¶¶º’{Aïìì†ü/,,)Ê>áÕ‘Üað=Úu2Îq^NµZ�ìn°p?ë� N:‹4B¾!¬XïàÏô+Õe¾çxéû\.òZ(¦Ö÷áᡎ��Õï÷uyy©R©ø<òŵ>ãñ8tŽë:æÍ3 ý¬ËÉä:ð‚gzÕ#úFŸ …‚J¥’Êår_S*•bîšÍ¦?~¬ƒƒµZ­©Æ›5 ž»½½²X(‚ q<¼ßïO­ƒ)Ò¨R©èîÝ»Qó” vÌag¯ŠÅ¢NOO§@å³³3Õj5 ‡C­­­igg'Î+�ÇÚØØÐp8T»ÝŽº–WWWzá…4�â\¢ÓÓSµZ­˜Ü¥¥¥8¤Ê gu!§Ž��§²,˜ðr¹¬ßýÝßU¿ßW©TšŠ.`°¤G€l²Œ|Cçûî¸RÇÀãšÉä¦\œ/’r¹F”"( OGˆÝ˜„0BI¡Hq ‹xf¥RÑÑÑ‘&“‰¶¶¶tqqï')2•VVV´³³‹çkii)j!’ùôéÓˆR¨V«A$–ËåPô…~ºƒ•Éd¦Î¡rc„yfáf³Ù�=áÙÙ™ƒ�jµšž={!‡è¡`ŸW©TÒÂÂB¶çççSdQ,.KÏu2,%|è‹@nh°±ûõ|'Ýà|³ôh�jqCôy÷t‡\§NŠz8ÆVlž¬ÍOúÓú›óojggG±q�F#åóy={öLGGG:??×êêj2®oÜ sç`4©\.kiiI…B!úƒü÷z½ØXج1âHqư¦#kÂI"_[¾ÞÝ õëR§tzÏÛG[^^Ö¿ü—ÿR_þò—§€)äÐõ+Ÿ³×üI7w,S`ÊÁ¦……}á _оðý­¿õ·4�ô¯þÕ¿ÒþÏÿY~ø¡ž>}:u__sÏ[ó6oó6oóöýÙ%<Û˦ùëÿÜEß;ˆá{ ¶¼t¾x€PêÃq�ïI)QCãoøYüÍ«l8�K¿pޱǹŽk Øá]øŽW0p"€•ß  äÝñuùžûAؽNp0Þàæ>�¤™ßÇÏŇðÆ}7÷wý9îË,,,L‘¼»Í“Fg§à²ûZn3¤ï”‚é>ŽEH×>²Ö͸٦„�Ï©¤ ™SÇè×d2‰Ì'±Ügä;”Šs?L@Ý�,ž‡Ïœ�¬Uéú܃““�F×eô‘]÷³\Æðç}�b‚i�¹ÄxÌyÕ0Þù�$a�98ì2褑�^1„¹ XšMF¿+ÆÕuóâ ¶“†þ>N¶0N¼x¿ñ…Á-3p¾ã8žëËÔnNÿ9^åz›ws¬�ç8¹ÇÚAÞRl \ðssS™LFív;ž‡Ëd2SeìøÌ×Hö5ìÑóéxX: Ôl6µººª­­­ o/'JÐs)äzÅ÷$'Æã±Êå²>õ©Oéƒ>P£ÑˆuþÑGéßø†îÞ½+IAN0.ƒÁ ®u–®�`0,Ç–r¹\Ë+++ª×ëAq|äwLIÊ4»üòòR�NGÍf3l 2‡¤kœg{{[{{{ÚÜÜœú$S§Ó‰5|zzª^¯7…‹ÅØ_è§Û@Ãá0pñÑhß“õ6e]}ò“ŸÔöö¶Z­–*•J ‹eå ³ßï«ßï+›Í†`–ËeU*•`‚9„ƒïôôTgggj·Û±Xjµš:�N,ÚG�©V«EM[„ôââ"úá›–§Ò‘.Jê—Ñ,Âååe=|øPÏž=Ó‹/¾¨ƒƒƒøœ…HV)Ÿ( &ž�Ê£¼\@¶+x”&†ÊÊÊJdU@^e2×,c·ÛÕêêªZ­VDðÐŒ1 ½+×ËËËP¸©ÁÏaeççç*‹jµZj4ºuë–^xá…©(' 2�<šá›ßüf\ù2™LbÃÜgüܨÁ ìõzSÙ ÈÑP(SúD™<ÝááalÞ£ÑuªåÎü=‡³³³ØìRA®PŒÈpƒÌõ, Ò wJReå„OJF¸rI¯sÇŽyày¹\.6çÉdDp«Õú˜ÃÆÏ̃;MœG†ãêÆ/ïuvv¦·ß~[•J% ·L&£Ï}îsúËù/G­Uú¶¼¼¬N§g=~ü8¢uF£›Ô×r¹¬^¯kÝçååe�žžê«_ýª~ög6JkÖjµÈ6òþrv›L¿ßÝFdŽoÐ…âNO:¿È‹Ç ‘Y˼ÍÛ÷¢Ý¿__þò—%}üðZšË±_÷'ÝR°-íKÚOézýKÒÏÿüÏëçþçõ{¿÷{zï½÷ôÿãÔù/ÿE’¦"Ât‡aÞæmÞæmÞ¾ÿvÓ,Ò(Íúv[ÙAìC·Ã�TÂ×p›ÕA$ì;šèðñ~ð3×8Ìþƒ¯åP-/MïƒN.9é�ÚüÞœPPæúô:é&èÎ�KòÝ/÷åûé/)yXâ÷òà/îÃ~ï>Œ¿³—ëÜ·HçKÒÔÙ²T‚ðìÞÓýYæZºñé $s�ws™MmŸ;¢u}.ÜÆÁâs÷=½Œ>ãKÀ(²àkƒk<¨PÌ#¢ý»Ü›ï"Nîи~ii)ª�x©JHjz ¥Ë¸�¥ÛhŒ¡�sIÀ*2äcLP®ƒ¿Þ1þ® \þ�/äÈïëàhÚOÿùyÄKºÖsA§8Ñ”’Ò©=ìëÈ×(:…ÒðÈ:d c 0�’ÈœÄ\>…ÜQÖ ]‘öÛßÛ×nÚÿTGñ³t])dooO¥RI½^ojݧëÂÇËIqÆ•õÍ;²&�Ü÷¿{¶ÎÙÙY”Î÷,'¤N}ÿTòn¾F½1�årYwïÞ� núûøñc}ãßЗ¾ô¥À5sð,QÞ“ pô†W€� �ìõzq¶w½^W·Û \lccC/¾øb�1<Ë÷Òt�ù^â5íãñ8#I�©ùº¢ù~Ï8®¬¬¨X,jkk+Ž6€d[__Ÿª4äk�~xzºî\¶À"Á…RlŽñ‡ïv»a» G¾6³ö3¼\ùµ4ßÿé™Dkkkúðã앸 "X<“ýÙ\YYÑxŸ�,�_|Q·nÝŠAiµZ¡(?ûÙÏjmmM‡‡‡ñ B¡ ½½=M&½òÊ+ªÕjº¸¸Ðk¯½¦O~ò“:<<Ôw¿ûÝX$£ÑHý~_ãñušs½^�,X>g^IwÃ0ñ�a#v0ö4UÒü�þÊW¾¢_ú¥_R¡PP­V‹A–éœu$]ojI:Ip n6;µA»Q‹žÏçcrQ…BAõz=Æ C¬Ó鄲báL&“ OœÕ�FSÌ·tSBp4éÉ“'ÁØ�F#}ðÁ±pˆ ÃÁ³˜�‰F£¡ï~÷»ñ6ræ€h74¼$ã1I kÞŸï°yÐétÔëõ‚9_\\Œ³¸È.!»Í6]wò˜k—×Úõ�!•57ÌýwéÆHN7¢Ô�šµÁqW¬.{¥ÈrˆÂ=�œsg–ÍÏÏ*òw¡�.”uÄ~ã�7ôúë¯kaaA§§§¡ !Þ0õöÛoëÅ_ 2Oº6¤vwwcÍ»QÈó�†žüêêªNNN4™L¦½Ïd2Q*‹9ïv»±Î°ÇWÏdbLxãâYNœÉzscaa!@Gd—@G×ézq –¹çûD{g³Ù_Á°Ö…G•»¯ÏšD.XSÍf3t Ÿ“M`~DëÝ…¼ðþL®z&G­V›" �dáý=ë =Ê:s½á`<$:¼„9æyÒ5ކ ƒ3d2×ñ÷îÝÓp8T½^Ÿ„‘aîçú}N 4%ËÐU©nõì<o_*ãø|#Gà¹\Nù|>ÖDµãND0׌ý Êår*•JÚÙÙÑÆÆ†Êår¬³““½óÎ;Q©YãþÜËIR0UÇmhd€1¾÷Þ{q~g±^{íµ8®LŒµã²H–€<Ø#²Ýï÷##£ßïÇšboð~ø^©T¦²~XkÈl©TÒíÛ·u||¬F£¤×ÖÖÖ©í{`ÚorÏüq y"ˆRÀñWðñf³©É亼çÊÊJíÀ~Œ.slÍzˆúÉ>žMÙPHÍ|>¯ýý}}ýë_�¬Ó………(­Èú'³Ê‰ ä—ñ¯×ë:99‰yaݱ×H/ÍKŸ=ˆ„>¬¬¬Äq½^/Ž®  Ý×ä\¿ß�Ì-lÆœ3¤(Íöð1^b×#ØSœÈcï”®�RùðÃ8»¸¸ÐíÛ·uûöm•Ëå˜0{'ì]ßM&“ }ÚívŒöÇââbì�èèb±%YÇãëjV•JEÕjUëëëªV«Q�s–NNNÔjµ"P>ŸÏëÎ�;±_À™ £ šgL�Hóµ‡LB4Ï"º?v¦e›`·êõº677# jwwW÷îÝ‹�{饗ôc?öc‘Ójµtûöm½ýöÛÑÉV«5•í²´´¤³³3u:�¾‹ppHš¤Heì÷ûSi¥¾xÝft A�AXÿÇÿøZ^^ÖÖÖVÔOåù‡‡‡ê÷û±™RwÈ£ÆPDœ}³ºº:Uz€~Ñ6î••5›M‡°C€¬¬¬ó9�tttÑC�DI‚¢œÕl6U¯×ÕétB ½ÿþûºººÒññ±–——ÕívõÉO~2¢½½Î«ayDf”J¥P”®Så‰ârž±tR*�¨á¾þ9e¯×‹ùv‚#Ó¿ëdFtꤡ <:Ë™ZW¦Èb à:Q9˘p6ß�`š'%šÒŒ0æl4©X,ùÇFÇÚà~¾~{?3 Bùã:ÖÔx<Ööö¶ÎÎÎôÆohqq1å\.§N§›ÔÚÚšŽŽŽâÀ¶óóó©ÈŒb±çbùûúœÒ���‹EÄ™[gggêv»,`Ô°iyz1NÌé,%éã’�Χ¤áó>›·yû^6',˜›;„_üâõÅ/~Q¿üË¿¬_üÅ_ ]†ñ<_wó6oó6oßßÍ¡ôŒo4KíÕ£yt·4�àÀQ ÒºMí}p?Ò»çõÁƒ¾<˜Ë#Ki<ƒ†�ágq9ͳ¹â!í“ß×û/i LqÞÁ@4ï«ûCüîï 뀻�3 )`²¿ ×1_€ €¾žmáÏždçå»ð]<‚ÖAdì~ÇRùÃ÷à{€³‹‹×UBŸð’5Œ·û�ª)ËÏŒ�g§à+ñ¹W»À?òŸSÙô1â:Æ»  p ßݳ3˜§ôÞž¥øÊØš9QãeÃãTÖð['“ÉT‰ÆÉ}b×!Žó8aš6ÿ¾“ôÃ+ÊÌòç¹§gÁpÎ1ó˜ãÒ i�þÌs�ØpÒÃÇ�Ì¡ÅÅÅðe)»–¶°° µµµÈ2ØÝÝU¥R™" £¢¿ôljYäÕ zæ1-—Ž1ï‰ìò�ùZ\¼>l~sssŠø à"Yø¼¸¸Bzoo/*þPRÌ#ýYëÈïÆÜ9ÆYÙT¢ß>7NDM&“8 ˆyd\Àö¤›3Z D—jµªýý}=zôHõz]ÕjUív[:<<ÔÎÎŽÆã±>üðC5›Í˜#'^{í5mllèÁƒÚÝÝ�À —st0¸Ýééià‚œ©´¿¿¯{÷îi{{{ªº2šî­üsùqBÁƒÿYÏ]¼ƒ¯e×Yéz%˰R©LUÃâëJ¥„‚׃Ûzf‹—  Êçó�¯Ïê.‹’®ÏlßÚÚ’t�Gg³Ù(©wrr¢Læº*ÏéééþêöŒ¯yúçïåv ßñÒˆN(±æ¯®®‚ìp¬ÒLÏŸÅý666Ôl6§ökduÖš~žÍÅ\ñŒr¹¬f³©áp¨[·nÅ ÎF?ØÁîá^ž)è2 –ÏçãÝ=CRƒƒër6d(òÈxµÛí¨lF2˧>õ)½øâ‹tÂZƒØ¢Ÿ”Ë¥¹Íåø#ãï:v<kuu5vr¹œ677µ³³£µµ5U*•øî`0ˆ2tŒk¡PÐÚÚšªÕªÖÖÖ"xãââ"Žý@þ°jµšvvv´¾¾Gt OÅb1fÓK i+Iªâîî®ÎÏÏu÷ÿ;çh2™¨T*Å ±ñ‹ÅØø†Ã¡ŽŽŽ¢TÝÁÁ�.//ãà¶^¯§N§£óóóHÿ”®Ï…�á–¤v»­N§3•þìÆƒîõ®� `ÃöÉsÊwyøð¡~ÿ÷_wïÞÕãÇ�uqq à¾ÛíF ='M¨…*)Òò¨%Šr”FÑGžþ ÀŽ [}vv]÷ïß�óŽœÑe<0ĽÆ!g?5›Íȶ€ecCù���éøø8XÆ>ø@ŸùÌg´´´¤ÓÓÓ¨=écË|ù‚G0D}svãœÅ#ݤÀó}žÁBóùgœ7æ�R|�«««a4�ÎÇ"H�j'³ÜHäÞ>æÌ3²6kSsùpBÌÿ¹‘ÿó6oßË6 üJ Ϧ†¡'Ýè­_ø…_Г'Oôë¿þëSÀÁ¼ÍÛ¼ÍÛ¼}·”4rŸÉ‰?”Üm¬YÁXê²O8x“‚•ØâÔãCòwºr{.{S;Ð}iº-í»û©ÜÇÏ�àz|&³Ó~Ͳ;ñm_®£QÇ㱺ݮ�†²Ù¬Ö××”ägæ�âÑó»4?»œ>¦DxÚR=èø¿ËïÒÒ’ªÕª677¬âÙDü¯®®ªZ­™ÍfU«Õ´°° b±¨Û·oÐ{qq¡v»=•qÄÜøâ2( áéX�Ï—ë 01¯vàúœÉñ:lÊÝíîîjmmM�?Ž’ÿõz]ï¾û®^yåM&={ö,¿¹ïâ⢶¶¶ôÆoèîÝ»€sF9¸ÜÒÒ’ŠÅbTtjµZª×ëA ‡CíîîêÕW_ÕÞÞ^d¸øÞ›’ÈŒãd2™:'m0LéVúDÐ>™l¾Ï¸<Í RpÂayy9dºÕjéøø80æÝÝ]mllÖIiE2yNJª £ÌDL.—‹ÀªpùÙW�…B{‰WIqfÜiòMdðêF�3É)ùDóè0îçÊÆ­;0®|ynêTz�¨ŒF`¡P˜*/�’/î$s6k-�>ò,26‡óós=}úTo¼ñ†šÍ¦Êå²NOO5™\§X¯­­Eÿ ‘Ü™xöì™^zé¥ Š�W¾ãkG#›ÍêèèHï¼óŽúý¾T¯×µ··§v»‘P¼ Q&Ì‘(®(g‘€ÌÃóˆ«tsõùò9ž·yû^¶÷ß__ýêWõã?þãSŽçks𽄣(ÝI³ �y›·y›·yûþkn9iâÀó¬ë¹.�¥éè}öÔ�|q@7µÕR ‰>¤à®ÛŠ³È¤ô=Xu ÁŸí~Ÿ¹ßë÷õ>¥à¸„9¸Ÿ’Kô Éýnü)·™�0HÁ<Ãî¦2ö6>4¾™ôq2`±—‚Œ>–žyä$¡¤ÈPÀ/!XŒ,Æ �‚Ç8ô’x€GŒÃÂÂMÆ3À³tCfù¼¥D†ÏsV("èq}}=²!àŧ÷yOýQüê4‹ÇÏAa˜Æžy%�0ŸÏ1®8ë~­Ë5ëÍå5õƒËÅÅëó�IÇwü»Ì9ß(%ƒ õÑ]~œD/OFwâ?x2™D€/•5W‚-Áþ |lqžƒ¯”Úá)èéýJƒ¿Üð}ùy{”“D´*ŽxÀÄó™üw÷s°ƒÝ_¯v›k鋃ëØÑ܇¿Ñ¿7¶<ïÏϼ/`ç¦ò¹ûÏ>oîë§¾˜³Æ�ùöÒ@ø@ù|~ŠŒKIìŽ\.`²tSêÏ£ç%Mù)>Áýfð¥rû�Çã¥RÔßËÁD—±¼äï`’âܯÅÅëÒ`øg`?Œ/> ïG„3~8!Ž9x yüJ/U–údîßqüFÆÅ}eÿG?ñýÜæ»©oñ¼öùùÙèš”ôbŽýL¥³³³8+ÄKŸ¹¿Ï¼:YEäõòƒ®wœeü›HOOOÕï÷uëÖ­(otqq¡ƒƒe³Y•Ëå�lj<8ÔqþÆú¥¤<¸ƒ—tùóì½”ÌuL†j7àW�N'ªÈ@RpΘë·×ëi<«Z­j{{[¹\N’¦úÅZMAiŸo°,Î9??׃bÏÏÏ#à•ñ‡ñõÁÜ1†�NèmðîCY*î±¼¼¬J¥¢B¡ F£:ç­·ÞÒû￯×_]Õj5‚ÃY3ÕjUŸùÌg´··§Û·oG™;ª ‘‰Â³ôäÉ“8 ’íÞ½{zå•WôÊ+¯èäädªš�“•Žõúž½µµ¥b±¨Z­²Âzr2�µé%°R½�Ê'²E ÈÅÅEu»] mllèÉ“'Ä~||¬µµ5ݺuK¥RI­VK 7ç÷�—Al°Ÿ°×r¬B&“Q¥R =È:‡ÀbÍŽÇcU*• &\æYKÈ{jÌj©Ýáº�û’iÕívÕï÷µ¾¾ßaï9??�ó‚è7úâêêJõz]+++ÚÛÛ <;“¹./GÆŸ÷×çÉušá],•ÉdôôéÓØ�{ÇSÛÃõ32€þ¥‚rïqϸy¢ÆÅÅ…ŠÅ¢²ÙëŠZ™ÌuÂD»ÝÖ“'OÔh4$]cØ+++Z[[ î€=r»…,.·é'•®|Ïâý;¯V«‘€1Õívuxx${gݺuKÕj5öt zŽ`ú‚¼ÄÓjµôøñcåóyݺu+’ƒ Ž<ÏËJ i„`AÑYÒþ0´¨�˜É\gÅ!ô^Œ�ü¸ººŠóy`����5™LT¯×#­“ÁD``Û‰hI3|�y„™¤©ÍÆw8ªX,ê«_ýªž={¦J¥ïáeØ8=:Ã�J„Å�x�`CI°É±(�“ç �Fׇ.Â`�Ç×YX_ÿú×ã�­Éd¢v»cÆ{rO„±ä>D À6“ utt¤J¥ Ræë_ÿz¤ÙaHº¬ðÞ�4nlØ.S(d?1ý…)öû³#üÌýd|!ŽœÝ…ìpåÌxðœT)£ÄÜxJ Óç9~®ØÝqL«Gèð?÷uƒËŸåÆ›×Ù¤†çÊÊŠªÕj8cÜßIM6ßR‚‹içD_ê8²9b˜@>£¬ˆˆ#“-›ÍªR©Äæ1_§Ó饗^ŠCó<Š.uéûÕÕ•=zÊ–Ôᣣ£)%ÎâïÊæŸ:‡*øF™ÖXM7Qÿ=•‰y›·?ŽÖívõ·ÿößÖoÿöoëÇ~ìǦ"ŠÐwWWWaøü ·ÔPeï,—ËS%8ç¤Ñ¼ÍÛ¼ÍÛ÷KmjU=ØoVפ Cz-~‡ÛÙ4œhld|8¿&õÜ–÷ëf*Ø·îËz ï�û‘i©//-Äý=s%ÑŸ7©ï‚ÿhΤ>x�í6?ûxãóIšzÏr!ør0Q�/�Ľ.Ã>&øáÈ�¹�ÇAð ‡Ã(V„­™fA0œË@iªç­wΪqR)�~OÁFúãAƼ‡ûÃŒq6{S“*3Òu ùÓðqõ€Jt X×ø:aÎé³WÅðrR>_ží—Ê8¸ÔÕÕõÙ&�NG ÚÛÛÓââõGgggzðà�$é•W^™²™é+Xýòs¿ÐOÌ«ŸE’¹è[†Y·nŸó÷\.˜V£Ñ0×KɧïÎøRî,—Ë©Z­Æ1È„ö(ÊßÀ2 _´¾¾Ù«««‡&û=\§û3‡ÃadîxÇ›ûÈçó�ü ØM‰ÿ‡ê;ßùŽ666T(âY�Q­Vµ¾¾Gp$Èp8T£Ñˆã@(Õ÷ôéÓÈ4êv»q÷q}è2ÀH Ôõõu•J¥"ŸL&S�ßÈc˜î߬—ô÷toKF–——µ³³£áp™™ÝnWªV«ñ}d‰ùp’ÁŸ‘Ú àP©=â:„ì)þæ�<ËÉKFw‚, hv]âÉ ×™iÏž=S·Û Ž}ùkµZ‘�àIJ¿¼¼ø.ríz|V›…2–¾<rqqqŠ�ñq‡€eLóK‰Y$éððpŠìbŸiµZSX3k5ŸÏk2™¨ÓéèÙ³g:99 RíÞ½{±g õz½ ɪŞaÿe¯÷½’؉-Ç�@d¼�,ç(l‰íím‹EU«Umll¨R©~Þét"“Š@‡B¡Y›`쌧§§úè£�tïÞ½8K¹wù÷  )!�0®ÜX»¼¼ŒòrÔÎóšxù|^>T©T’ts.JuuUõz]ý~_år9ŒØ1²e\i¥À4 –>"<¾S‰9ß”ˆã>([ „^xAï¼óŽþÆßøq %õ�…ìBq81äQQl� :F€o8(bjcBõz½H¯D¹£à¾þõ¯+—ËéÕW_��3�B(Ù¨9”Ò£Q06þíííØ¼xÞñƒ>P.—Óúúºvww§¬ X.—‹ 2¥GëQrŽ $u}ÎøÎåå¥ÎÏÏ5 ÂPaQb‡ÃH#ÍçóÊår1~žÈ&ç%æ|Ìž§ =ÊÆ ÀYr—n8NÂÐw ù››ŒmJäpmšö/ÝúS­VCž<2 ¥�L;Qåiîž©!I„ † ßsÇ ¢neeE½^O’Ôl65_§qBpÞ½{7jõâüŒÇcu:õz½È6Êdn¢Õ|LRG¥‰r®×ëáÐ ;8Å”pytpÂç?�_7ŒÝðuY¡Oó6oÜ ½Ôn·õ?ñú­ßú-ýÕ¿úWCDz>ÓH‘Ä6k¿H�i¾öæmÞæmÞ~PZª¯S0Û ÿœïº�< XšE"¥ ÿcã;)â¶wzï´/îS¤ïá÷ówuðÌ}H…½$¾"¾À, &}w'¥üZ|@Ï^ò¬ †"©ŸÍÏ^ßÛ}yüÞ™3w‰æ>;; ߉þ¤ÀÞ¬¾ø|pÝòòrø<¼ãá ¾�ƒÎiPYK“É$‚Öè_©TÒåå¥úý~€ó¯9�H$4gÌpýÈd2AÒ‹Åðá Ò¤Ò ‘Á»¹?ãkƒwt�Çq3 `“Ï#¾a»Ý@�~áÃ9ÆÀûºÚjµ4åÜ—aètÐ ]äÀç<%{‘™•••ð3gáDŒ‹c”Â'gl]ž+Þmee%*jär¹ð;W'ªx6ßÂÂBT¾Áç³r ”Ï|3¼'˜Úùù¹ŠÅ¢ö÷÷£ÌUi²Ù¬îÝ»}wlÁ3ñxoÖ«Ú¾]×I7¤1:†ëÓ¾�ÇãÀ–*•J½’"`=A† @…˜ÙÞÞÖÚÚZ¬+Þ œ/%Ryt“tMòÖq£ÑÐíÛ·C®ÃÏÎΦd<ãääDßýîwc, KÁ œxíõzAHÑ�ãããºçYÍfSo¿ý¶ÊåòT5g’T«Õ ¤¼$æp8ŒjDœ-sqq¡§OŸÆY.ùg³Ù(™öøñc�žž†NóE&Y»”î›…“Aô�%ƒ5ñ»ïŒ¡ÿ>‹Dâ9`yœ-$Iûûû‡!Gœ9Cf�ï… £“}Oð÷"Þ÷"ï8.û5ýóýÐxÏ´ŽcL¬¥ñxº �Ã5“É$‚Ä›ÍæÁM;??W£ÑÐÎÎNè3æ™’kŒ1%þ<˜f¾™î·|æ:•1@׃õ¯¯¯Whm IDATÇwX‡¬s2]I pûÁuç§K×UÊÀš …‚ …Bd±~¨�5�U,U¯×urr¢§OŸF%ªR©¤Ï}îsšL&::: <žwÛÚÚŠ{ûÑ/”ªCž=à¦\.Ç»}À{yÉ»^¯g‘IW*•´¾¾£|ÆžÑl6ã¯|>¯^¯§ååå(“èçpñ?düÙÙ™Þÿ}ýù?ÿçCÇûšf^w‘Òcðõìì,”‘ DŒF£¨Y«ÕôàÁƒ`Ë/..T¯×Õh4´¾¾ÄÓÙÙY¤Ub�¸aÁ&Í xfƒîƱ°¾ˆ™Þ7^߸Ûí¶îß¿¯7ß|Sßüæ7õ×þÚ_S¡PÐêêjllŠÅLc• ?›ïCt�3õ܇qéõzúàƒ$Iõz]ÍfSõz=¿“>'''ÚÙÙ‰÷ä7HQx“É$¶óÌʆ ƒ`á™oG µÁ` ï|ç;º}û¶^ýõ |Üx@¹Iב›Slª“̃3À(B>ïC”Ïôq%[luuUÒõFÏ|`Ì¢l½/n̸,ÍR‚©2dñpŒA7`SsgÄkûØñÎé}ØPœ�f<é›Ê$ŸÏOE­q/Ƙ¿±I’’MMò««+‹ÅX£ôƒ9N�1ßLp(H‹o6›Såép–Ø\éç"U«Õ¸—ëŸ þ¹cɵa„ñ,ä:�Ø`Lœü™õw}î|þ¼�sðzÞþ¤ÚââuIŒŸþéŸÖoÿöoë‹_üb2¾?¦›ÿRó5ækxqqQ_ùÊWtxxº×ß{ÞæmÞæmÞ¾›3öI'#ð³øž·à ¹¿ÂßR{Ïluln?xάg¤„�ÿÍû‘F™¦}“n*dà ï¶7ߟE˜Íz>ý÷4ÂO”n|NÀš´ïÜÛ�ï¾&¾¶8e­ âü•O|â¦ónØì�¹?Å;a�{¤¬ƒDÒx >€“…^¶ËÉ#|('’(O—â )á šËsæ¾;2¸{F—Ï¥“)>7ÞG¿ÞÉ/ž ¨MÉmH/ä‚yå<;™â¾` È/r^«ÕÌf³*•JSÄ�Wñ€O'k|½øÚuâˆûHŠÌ1Çš„äÆŠõÄs}ûB„•Ž�Ìy*¨›Ê™¢s_]lxÖ'kw�¬Ÿn·U�vvv´µµ¥V«sÕét⌟ôüÒ>s�›÷f��ékÀíðYø¸ à/Ù½^ïcØßqòñêêJ�FC½^/îqËz2áf£!ãGÆ¿Š¾>~ü8ð‚i?~X!Äôp8Ôáá¡þ÷ÿþßSe;!˜¯®®4 Ôn·c}9¶pyy™.{ù|>2Åòù|à*›››h7��¯®®Ôï÷ã<ôÃÃØ³ããcµÛí(kFFøíþáêÑ£G±~ÉPsƒÀÎår!›}ôQs‚Ì _è~ȲÕÕÕÈÔ`ÌÓµÍÜ»üPÑ�„¸ˆ,”Ñh¤n·Gopö º…9'€â×÷æùg�¢G˜/ªTqŽ7cá¶GJÀ:æé�éÚs]äßGßSÊÐe<ÅÆ(áÈ>ˆ.\\¼9÷‰…Ìä£ãon«ñ~Nú³°@ü”J¥¨^Õl6C¿Ñ_öJdƒu‚þu|’@Ö-2ëòEéÌÃÃÃ(Gçóq||¬ÃÃCõû}õû} mmmi?HÒååå —\×r6:kžL$·WÆãñLÇõ!÷â<®F£¡V«å#Éxäœ6é???W·ÛU«ÕÒééi$IÀÙ°´Ûíæg_½¸¸ˆÄŽF£¡ÉdãÅ{vvÁD)–ò±òtL8¬ FÅ6]צŒ)|e�?^ŸoÄ&0ÝœE³°0ûÐ-–Ã,xbîáÆ› 7‚ìi‰(òÿõ¿þ—NNN‚©ä°-WæÜÙS¾P¾è1ŠùÂÁb­Õjº¼¼ÔG}¤ñø:âŠô4Àn¢¤ë ôàà ”"l¤ #Âsqq¡‹‹ u:�/ÆŽ>Ÿ��éîÝ»!쾩y„P§ÓÑÓ§O£n¯� N9áìÜè÷è5 ÑÁ`÷r£âÊÉ”f©TŠÈ"&“IœéD-\×ÔØôÔÇ´¹ên)A’ñ®”0ø,%5�J�QžéŒ¿ãÁæ@*¢Ô8‹8¥ßl�܇ژmèl¹4È:½oêÙlV»»»±žÙ„ýï™L&%6zÞ£–h�ø“n"éècë@Æ™¯ÓÉdÊØ3Í0t‘3w¾}N¹>•‘T^ü;sÒhÞþ¸›ëôôOýÔO)ŸÏëïü�¿£_ù•_™2^ЛëMIzôè‘~ê§~Jï½÷^dÎÛ¼ÍÛ¼ÍÛNsÖ®|HA ·û¸fVT¬½ús�ÛßN±—à§Á ôOú8‰”ú|Æ=°í�ˆ ¹?äö?voú,iïŠîQºôÏï æ}癀’£Ñ(BùÛŸ9OÉ À}^R�™sl%™cÎ>àþŽM¤¾£7'å U>ŧæ^îÓúÜ .�¬ÆÈ˸€J ‘ÀM'7üÅ·âYžEàà,Áˆ™L&üæ<€Ï1št-¸Üû{ñ?ïèxìrƒî³XgÜ� ‹Ìõ5ý}M»/Íg¬—1²ß�-ÀÝT߸žsÿð¾Õj©V«)›ÍÆÙ2|ù�DZÞèŸë2ˆ÷“+æ‘3\SÞ‘Ï]—qg§p­ƒÞ¾Ž}_@/qˆ<çµàÓ£–�–n/»/)²Šúý~Dý÷û}�œœDɰ2€Þ^¯cÈsêõºÞ}÷ݸÿòò²677ã÷Ñh€¯—#d#Ô¬…F£¡««+íîîªÓéLÉøh4R½^�ŒÄñxç]]]E¹®l6«v»=uÜä˜Í£G�bŽ<ë¤P(D00g QåÇÈVä}�$E–�?#ŠÆï.CŽaºL¦ëmaáúÜ›µµµÐ%§§§ÚÞÞž’Uô½»~ôp^ ÊϱƒŒ…”r¼Íõ ¸Ó¬À·CÜI÷ÖUj�‹E•J¥ ^Ù|Ý9öîêï IȼzbFªgÓ}ËI#'µèC¹\V¯×S§ÓÑÚÚZè<ßë¸Þu›Û,¬[zgÜÝ~D>9&ƒ¹½ººŠ £Z­ëaccCûûû‘4³±±ÄY§Ó‰d’Á` Z­wµZU6›�g9¾è6ŒÛ²©½FÁ+Ëå²J¥Rœ[T.—£Â¼ d/UÁ$EU®|>¤Q·Û �Âܳ"ŸT‡c�s-™m$i”Ífã<6õ0™LŒH*ØÒÒÒTMX˜TŒ5vãon¨Ì2x0FyÒ|ãfób¡¥”(ꄇC=yòD_ûÚ×ô“?ù“j4Á¬;ÈÏz�OÏr`�>Õj5 ƒ8Ÿ¥ÛíÃÚh4´ººªgÏž)“É(ŸÏO1‚X¹\.HµV«¥hoo/úD6©©Œ=¬¢�5 AÞßß�C»œpqƒtqqQÇÇÇ‘jïÎ ï™ÍfU("e˜šÅnH²°!„ÜøuE›*YO¥, ‘Ñvzzgd±€Üàt#ÍRªŒÝéÁÀHçÝçß¿ƒ‚K‰ŸÔ!åþî€yD“ùîb ¸RDÞ$�æÆ_êüº"pÅ èµ¾q$�X|wªÜ™â9D›Ü¾};¢g¶¶¶ôäÉ-,,„Bõ%a·}<˜Ë4ªj–cMsB‘MÕ•2©îDe2™H'îv»Ë`œÕþoþæ÷øaéçíû¿¥å{Z­–Z­–~õWU§§§ÚØØÐÚÚšþÉ?ù'û®ë“ç5Ú˜E¦~/ÈQ7 ý¾è˔̕¤_ýÕ_Õ¿ÿ÷ÿ^ßúÖ·BçyDÔ¼ÍÛ¼ÍÛ¼}7!���n\Ýæ¤9èàv¾ï!³ì÷4hËïé�QËËËËîášÔ©vŸÕ‰#�|OuPŒkÓ~¦>…G`ó§™n‡2&©�ê¾ ¤û2žEÀûú>ìýr_ÝAxæ�(Zü3ü]ISÍS1iú¬$dÃûÎs)ѸãOx¿WÞÁ«‰8v@Ëwy°|0'C݇òñtâÍešyòÈp*k˜§ï>ËNK× þ1ç7�F×å~ �Ëðãè#>$?spæ‘k\ãì†ô¼ Çw¸·ûvžmÈ»ø¿t�#c¡˜Î"�ðû ¸å9`^è'Üc�„ÄÞx<ŽÊ³|L'99ÏË <'¥i’ÚÇ…w¡¼[³ÙÔîî®666"BŸ2lD¸ÌsÐ)øþÈT.— Ìk8F$?Íõ�BÈw ¢ú5ù|^ÅbQ‹‹‹!?ànŒO:îN‘]±±±1ô;8NP5:ÒIÎQ‚|xðà�F£Q.œrÆ <„ªã3Œ[¿ß×Ó§O[)—ËÚÛÛÓÚÚÚ©ÌáóŽ·±²n�E2 :�Žòù|Æ�NGÅbQ ×�à›››qŽýpÂåêêúÜ$ß;Èü€HG _²RÈ:b¾À'/..ãeÜI$ \îgšÑ/ú’ú—¾ÞÑ …B!2óùüiæ xÞl6Õétwv=Ïbî!• ŠÀI=šõÙï÷£ú×I  '·ÝSâß÷ ~w2ÑçR.—Ë©X,FF2kÞKß!¯à®Ã�P€$L}éÿâÈ÷+t ï; âxšf³™¦ á{&ßC9ÑGpD {ì`0´×ëŞəÉ\—d{úô©ƒD][[Ó‹/¾¨ýýý)ÂdaẬÝööv¸÷z=Õj5i<kkkK“É$ÊÇq„#ë–ñàóìQœGV©Tô /„Ì^\\¨ÛíªÙlF™?ö?ß "�碳Ñ'èSŽYYY‰ '`&“Idå!KÞ>F±Á¸0onnªÑh¨Ñh{‹z ™ošÅb1î‹ÁÏÄzí?”“o>üÍß8˜ WÒn9É¢EQ‚qñèÑ#�ŸŸëk_ûš^}õU�œœèääDµZ-67zÒ…áL!©hò¤ ²à�1%h<«^¯ÇÁ^Œ™™·nÝÒd2Ñ;ï¼£ÃÃC�F#­­­±Å¦ḭ̂À aÈ DPpƒÁ@wîÜÑw¿û݈úr#j2™¨Ýn‡p£ ŸÜùÈf³q°6ýI�G7š™Síêêj�D^†ŽÒ‡�”Œ8ÊljHä$}žËŠÏ ×0ö,v7üÜ@uYôŸ�\sgËÃÔðóÿIÇDÎè ŽW©TšR~œHg— Ö——d#c,' -O¥EQ»CFMaR'«Õª^zé%½óÎ;SÎNÊââbœÄü°Ù¶Ûíp–˜cwf5ÖæË/¿¬B¡ V«5¥?*•Š$ME5º£…Ñ‘¾ÞSò1•¥9h=oÒ-uFiÿößþ[I׎Կù7ÿF{{{úÿâ_haaAîÏý¹�ɯôñ³Ø|_u]‚Nd]ü¿6�*ä=R …ŸŸÍ)œ0�Ç‘5C¦Ë`0ˆ„ ô)$”“×üùq}äúܱ+æÑËè1wdÔ±§qT{,Ïç\qÖÙzÝn7öAˆTÖ·ŸC–êÙTߺޥ9N_.—£Âg›§zÒÆ÷Æë÷û�M×ëõÈ:¼¼¼T½^œ”ùa­?}ú4Öv¿ß×ýû÷õòË/k}}=ÈtY?Ü� ‚áp¨Z­¦ããce³Ù8—�q"óˆ=ãüü\õz]WWWÚÞÞV¥RQ&s}DÌêêªòù|œM–É\'ÙìííéêêJqŒ É|‡¬>ô«“^+++qd ºˆÀ‚Ž��õÑGiooO¯½öZÈ:žõâmŠ4rðžEê†X³ÙŒl72�%…Âßßß�IbsE "üÜÃ[š!⸠©³’(i7t=[Ä�*Ê...´¿¿¯;wîèôôTï¾û®þëý¯*—˺¼¼Ô³gÏÔn·§œ˜A'�`mnRXJÝ!éàJ£Ñˆ®P†¹\NÛÛÛZX¸.÷Õívè9<<Ôåå¥J¥R,Jï}&šË• mccCÅbQßùÎw´¼¼‘ N º#âD„ì,dÇ >sðÝwV›K”l-Ìq¿ß�û�)7&RBÄß×�p(™—%äÃÉ 6#wNÝØMN_SN"¹L>O¾y/�þcÜ'“ÉÔùE©qí©�<›Í BŽ¿Á@ûšƒða=Ñ7_OltîðŽÇcýè�þ¨vvv”Ëå"kí/ü…¿ n·«DFb»ÝÖÞÞžvvvtttÑAžzÌûº Îk7&h¯½öš�†£¿ƒÁ@¯½öš?~¬ÃÃÃxWÆŠyó9b®Ý`˜Eòyó1›·yûÓj¾ç�F#=zôH<Лo¾©õõu}ùË_ÖÏýÜÏé…^ˆï8àä:~–>K#›ÿ_›“>îdºñ,]gý»÷ïôío;¾7'ŒæmÞæmÞ~p¶QæŠíÉ>€¯ÈAI•ÅÅÅpèÙGøŽÛÎØonŸù½±'!…¤›`Hé&#ÇïÍ>EF>™nkû?Ž$T<hJ#£=bÜ�_''“¸�“R©¿áïË}ñ ðx&÷øq2‹÷&R  ?Zº>Ÿƒê$DêrÆ@Ä�w'_ —2™L€D€•¨zV�œÈƒ“xÏž=S¿ß׿æ¦^yå•Ⱦ8en<‹Â ¢ø4cü...bÌð—™¿ŸÏ@æÕŠhȹW\q"ÆË¿‘¹EŸX+œ§ÂZ`ÜNOOÕh4â yÖ÷j8¼3ãäÄ2îk›û<�®�\p2»X,Fõª Aâ÷z½ÀN §Èú�8ÉdnÎHñ Xt�Ï3ò”ËåtëÖ­«ÑûT˜"[‡¾³£X;|ß�ÒH+¾4LF  A¬)G¾›â‡¼ïd0û*2›É\gíìì àY­�NGív[ãñX»»»ÊçóS™u^šY†&`€µ„ÜR.r‡>CT1Öi >ëбHÆd2™LÖZ*•´½½­Ç�ÇýÑièPdͱp>cïçûèQ!xö °>·{ì™GÈôp8Œ3É$fÎ|²×²Ï w�$év»:88P¯×ÓÖÖVÈ{{ÐÕÕ•êõz\ ޼¼¼¬;wîhkk+ÖŒïì¡Q5 lœÿÃ?T>ŸB™î÷ûQш³ä §ïÝ»§jµöº€J^dpôÈÇ£Ôö¼kciiIÍfSëëë*—ËÚÜÜ r—LDÖë²Z­ª^¯ëøøX÷ïß�ý�€ö oS¤‘fǦŽbY__×ǃÝBq²X(d¼ÌJ/ã_ Tó�Ï õçø?W€éf…à³»ârba0èsŸûœ~â'~Bÿú_ÿk�œœèÁƒú‘ù‘˜œÑhJØ7žã‹‹‹q€�3Žd¾A€€8yuqq¬>‘@‹‹‹úÌg>£R©¤ÓÓÓ8ðŠç7�©Z„Ü�±tCÓIéšÜûÔ§>¥Û·oÇ™TžªÈûùýTŸŒZ"ˆ0 | ¾Ôö9ô@:÷ååe0Á,T�~¢(1xj°²ù»ƒ<89À{bÔ¸sæd’a醢ƒ�Ü—{y}hvÚ|#L7"”ë�ûùõnÄñ>È426ë $ŸwŸ{¢P| |œ†Ã¡îß¿¯;wîh2™èÑ£GZX¸Nï¼ÿ~¤@N&�žžª×ëéå—_Ö|0•.ÀçÇ £tÜ/..T.—uïÞ½püúr¹<%»iº}*>ç)YÄgþ³·9i4oZ ÇÞuúhqqQ­VK¿ök¿¦ÿðþƒ²Ù¬~åW~E/¿ü²²Ù¬>ûÙÏJš>WMRè-ZJšÿ¿6ž\w·Ûm½÷Þ{úÿàèääD�?Ž÷ù£ôæ¼ÍÛ¼ÍÛ¼ý`4œX÷¤›ºûÒM´ªtSú,ÝðunÓ€µÔnMmy¾ã =û(}õc©O Pæ>{1¾ à-€ ö<6ã·0&žädŽûê.I7„ˆ�~¾Hj³ò>©ÏC!€X¯DÂ{�F£HÝ_w_²Å‰«ÅÅE …Àp¤T òî×ûxC,xT;$ d’—\'òYqr0t2¹>k©^¯iá~¼Gô§äGßÈ0—ÙM’¦d ›>ã—qO'*™kúò¼ÒB\Ë™ÇÛÈ `"rɳ©¼‘ñø=%…O�:Aâ}w ß ÿ•wå=X/È@c™f0Ì9 r&ŵôcqq1Ê!"çÈ6À0„rç˜Uú^Ì?òŽæÁ�NÀ.,,Lœ€½Ü'%uœÄá÷Éä:’kkkK¹\NÇÇÇAž­¬¬Äx0®“É$˜GäB€ŸY¬CïÛ,Ì Ùu!÷Bß±®‰Æ?;;SµZ�Â×ÈŠð5ä•URp?ßR©à:•ŽÈn—ð¬"Ÿ[½�ðyrÜÇÉuÆÛÏò¡ÄT³Ù }ÏdQn�c#¤ëÌÂv»­Á`vÖ××£$ò f �êx „)kqyyYÕjUûûûSë�µÂß]—°¦)+ˆ®r‘±òàlæöììL ñ¾Nšø9æ�R¾G¹ÞslÙ@: Žºµµ¥ÓÓSu:�È*ÚÞޞʾ"»• 6dÁq&×¹©Þu ÝÉ=|Ÿf^¹‡ï¥ì®ƒ�9ð72šïóós‹EíììèñãÇSrËØ$@Vzß×)eï|­36Ž}¡ËX�Fn§y÷GNòù|`ÞôNþ¹>Çžò3™CˆfÖ„ëjäË ³z½z·ÛU&“ÑíÛ·µ¿¿¯|>¯³³³)’ }KŸYŸ�Á ×™]GGG:<<Œs ±1�FÂ�ÒÍfSív[ÕjU¥Ri gñ1�Fêõz*—˪V«1‡”¥œµ…­Ñn·uvv¦�� mll¨Ýnëüü\år92%…\V«ÕèD9¤Vj'N‘FtáÌYYYÑþþ¾êõºòù¼>|8E.Ø"„¤TÍ€ñï�g¤Æ¼/>ªÆ)`Ëu×øÆÆ #̰¢Ãá0¨Ëf³zôè‘>ûÙÏ‹Šê)Õ,ÞoèF£†5iËlŒ(56IÊùù¹NNN‚T"‹´µwß}WÍf32÷éõzS F¯÷äÙ#ãñX·oßÖÙÙY°þR\ãà=R&“ ¡¢¹\N…B!6.O3E¢Œ\AÒÆ´ÙlF ¡E.3>n”²à�gúÏœû"M7„”˜Dqy_gÉ™o þ|î톲êÏL‰žô9üì‡7úø§d�ßËA_ßt]©£p�)wZ'“ə̘úÚEþþÛûoúGÿèéÉ“'*•J:99Ñ;ï¼£ÍÍMݹsGív[GGGZX¸>›+“ɨR©èää$ ÙYŽ,-7_çüŒŒ mllèðð0ÖÂÕÕUÔ&í÷ûSõÊÙ¥›è&wœùÝu“�¯÷aÞæíO»yÄ’;;”ÙlVOŸ>Õd2ÑÏüÌÏHºNÿ¹Ÿû¹)pf2™¨X,êÿã<¥“¾„Í�ñ……}å+_ÑoüÆoè·~ë·>æIÓûÿ¼ÍÛ¼ÍÛ¼ý`6€]2pRÉâÈd2S¥ŸÜVö’Íîäó/õ5¤é:üéßê§Deš‡ ’aAƒàádhÔ¬ ÓO?ÿ…qὑ5Þ%ŪRùžµ.S9vBÓ‰·É�Ì‘ÈÕÕ•nݺ¥õõuI ì�rIœYÂùÚô<Ë×ïàOÅ¡Éä¦Ò ýtÂÓÇ�’g¬ã£££c}¼¼ªKŠU@Ä@;„l¥ú�ñê÷ûq´ØœcN¸ú?Ÿ~fýC®€å±æÈn©V«�‹‘IU«ÕôäÉ“ �2™ës™ÈGxöØ$rÏ~rqq¡ÕÕUmnnQÕl6ã2�< ´P(hmm-²�UdÙG~=¡yfÞ�{ÇKÈrЇB_¡wƒ�ºÝ®..."Àõ鬽�y÷æø'c°Ýn«V«E¿ …B` È2º–£6¶··§Žè€doÂñþq�««+õz½)ý0kÝ3§Ï³ORŒÓ±rŸgž�ÞwRŒ,%LJÃᔞ ÔpÜž"C6“ÉLe=![¾>Ø[©¸åv×u»Ý(·–V sÛܳßïëøø8ìÅÛ·oëñãÇ:99ÑÝ»wU.—U,ãÜ«Z­gè]^^ÆW·nÝÒ믿®jµÏcMAj3?ív[¹\N[[[‘Ä€|®­­©P(h8¼>žFR$=4›ÍÐÃdð^^^Ñ»¼¼ä/z=çûo¥R™ª°åº ý̓�bc“´âz³Ñh„Œt»ÝØo&“ëìFpvoS¤_ZZŠT(^8—ËéÕW_UµZU¯× E…qCÅgù|^…B!˜P7Y Ù³@û”X q­GŠ0x®D|‘q�“É5[X¯×õÖ[oEa£ÑÐÉɉ¶¶¶B€œ€ÁøF)1ñNÔPÿÕÓl==C†�Ôædâ=}›r_Òt9…‹‹‹¨íè¬ïó¢A|]\\ÔÛo¿›€³ÜN@±@<£´ …B\D�ø; bðn” ßét¦6Æ<“ÉL¥Ø;ÊXA¦¥ ƒßŒG ¸ó™Ê£Ëræ}tåš’I.ËùçÄ’gîÈùFÎæé$ýf.} øæQ‰î8°æy–¿¯oüÈ„×7EW ÈVWWõ�o|Co½õVêÙëõô­o}Ko¼ñ†¶··u÷î]u»]µZ-ÕëuM&“¨­I¼ÔAJZºÌù‹q²²²¢f³©l6«ù‘Ñþá†aˆl#'’Âiƒ óTt×%̇+ìT.| ‘Íy›·?�掻¤)2”õâN6rÛï÷õÏþÙ?ûØý²Ù¬~ý×]¿üË¿¬û÷ï‡a憯ôéþýG5žÿ­o}KWWWúûÿïëÝwß�R¬ôÛ f�䜷y›·y›·Ì–ÚÉn‡z‘ÛU)€ív»ïésøþ,“û¦vßóì9†œq;Ö÷_&>Âö÷à/ö€uÒÆßÁ}¿çóÄRàÊI÷ÓˆZ'’ßý|`@4/áƒM�ŸN£ïþîîÏò]ûñEy>™W©¯Ø“ŽïÅøzFsé>Ød2ÑÞÞ^йïìe†ðÍSBÑÇÞ?w`z<¾.¯E…ÈG®ó³‚ÝgñÃã‰<&ÒžwFÆð­‘üyï#}OI#·±RB€æä óœúÀî³ów>„ö¬�ƒ�ŽŽŽâ<‡L&%­›ÁZÀÕï÷ƒ999‰sš9óÇç™ z']ÁX¯”iâÌiäÔEÓùöwô1§¥¶³Ë ÷sŸÞ× :‚5yuu]z©V«éòòR{{{ªT*VO&“(7FÐ)ï�>b}ÌçSB–ë(óä:yb~G£QT’¡Ì2ƒ<¹ 1Îà’øKŸ$M•§�Ç‘UÑjµÔjµâlñf³™ QN üË÷ש)6‚ Ìʈ¹¼¼Ôúúºnݺ¥µµµ©ìŸËËKõz½X?’"kÄq8æ� Æ…@B€gù3]Ÿ™trr2µw°^ø%¶ ÕG£Q�Ò4'ðÓÏ]î�Xr2ƒý*%Œ�ÔñlF*1w¬yä…wL÷åTVûäçlöº,Þx|�ØÐívãì/v?/ rÕ³!}îYNäûºa-y6�ËnŠ3º-”¶tŸw;’¡\.«P(Ä\1G¾& *Ó=Œ{ò.¾¹~¤.£Žkúüƒå¡ËÙ»؆Ôñs¯<³É³·|_¿ººR³ÙÔd2QµZU6›�¬Þuuu5HÂáp¨““ÕjµÿÃÞ›ìHzçß‘Ceå<ÕØÕÙMYMR–,¶WÞX0¼ñÆ€W¼õ]¾_�·¾-lx+ذ`Y²e‰d³Ùì®®9ç±²rø/êÿ‹zÞèlÒŸð}ø@"P¨ªÞ÷¼çĉñ<q¬ÛíÚt:µF£aOž<±÷ßÿ-RRu{S:�v–Lq³[{ìààÀšÍæ[º<œlH.H"‚‹Øë+•ŠWc†$¹ÑhxY½hÏ¡#á` µ …±ßØ/˜Y.—^õ ýÀµàÈÎÔöi„@ëDÜ¿ßëOª°óY %ƒ˜pþæ>=¥ï1Y*|,5£ã@0¸0ªÕjÔg‚V«•ê÷¯ÿú¯~ø]6›µW¯^Y½^wãŽM%G`çÔh6»cQé—}jè¦Äó³q’Eh®Y[ôO "šö“ñD¢vvvì‹/¾°““�Ç '-*% ¢BfÓäSž™ñ†$£ži4žÕHURŸM•¥ŸôS ¥¦IF\SÉ }-Žëª1G?xŸ9×5 ÎÕº9c¼q kxœS5€×t=3–Ô¦�Îã‰ÒV¢†r“ºA« bl, ûÉO~bñaGGGÖétìôôÔ...ü #R¤QH•JÅÓ&•èÒ�3FhÑtÓU‚óùóç¶³³cÇÇÇV*•ìG?ú‘�Çc;??·~¿ïQ‡Dó%€ã¢c©‘ë6úus€uFÀ¦mÚÿWí]„ŠÕ4ý[³*µÍçsûòË/í¯ÿú¯ÍÌìŸþéŸìOÿôO]ÏkÔ¯Ù�~øÇüGûùÏîÊ»ŒáÕjeÿ÷ÿ–q¢zvÝslÚ¦mÚ¦mÚ7·EÂ@+ @ž(Ø­Mmmþ^öñ·¶hO*´¼Q›Nû­þËd2q»�3&ðuŽ×VÛq�¹ÎOäÞट×çQà:úR1Om|üy� Ö~©£ä˜V€ïô•(zõÛõ£�¯¾�DPkÙ'|w|*2Á1´’ÀˆÊøÂÍÍ�Õj5÷™´i©¢ÒuLבú?þ·™%Àf^WÀ�¦�lÚ_^ã:z¶xU”@âYUö;þFn£¿¥kC+•ÉuÀ??1’>úWüss{þm»ÝöR^ÙlÖçaµ=›Í¼¼ÙB|< �gÓ~ê8b§Ói?k‹¹×³}#†E‹ëWÇ�ÿ#Àõ˺kªÝËf2?d½ßï[:�¶ýý}+ N¦E²²yàºJ èœéüâ§CZ)©ŒÿI0ˆŒ?ÑŒ]7ŠýA®hi2Æ \c4Y·ÛµÁ``½^ÏZ­–—5äæZ+·ðÌô#ʹ¾¦UÌÈ¡ßÛÛÛ~Ž}CV¯¯¯½²Ÿ…¡ôò © LÀÒ�ÌG£‘ kµZvvvæD™P|�NDÏi¶¢â_ȈîÃÈëBå–ëñÃXÅì^׳4“j0øÞ ™³Î�Ô}H1A^ãz«Õ-A¡:�NýÌúL&c�FÃuÏt:u@V¬ù#ÛŒ{h?tŸåûªÿUŸ¯[ÿú¬z½¸6À`É$×2³D-åÜ�Æ~áó” ú)îqÚÖé2 ÚÇ@GL§SÏ:[.o P09�O¸t ï±÷‡CÏfâìö.²€onn¬ßïÛåå¥���Y§Ó±T*eOž<±ßù�ß±jµš8Cõ‹Újè~ÈoÖ}6›µZ­f;;; L5›ÍZ³Ùôdl�r¹lï½÷^â˜È$² y~JøAlBðèþÂ5ØÓØ7Évä<"å@xžR©dµZÍúý¾Ëp¡Pð »ápèd—¶i”J¥Ü(c¢c¤ ŠLÄ‚’Ëåì“O>q¦LÓÖÔÈåž(]ÊE U5<ù¼ö›É‚ùŸÏçV.—­Z­ºòa£À8DQRç1ÚF*—Ù] KÞW2CÓØ¢qŽBÒçYêŨ)¢[P¤:éë5Nus?Ɔ{Øýû÷íõë×Öëõ\ã˜"pÌ›F5 °,ê\.gûûûÖív=R€RÈ�ÖëU#*‚ôJDêó©a£ =>st¾0V•ìRåÿ.ãM�®¾8Ÿ*'ÈotX+º Ñ¢!OÆŒñZçêxjÔŽ“Ž!ýÐgç *‰üC)“~É=(UðË_þÒþìÏþÌvwwmßÞ¼yc¯_¿¶G�y”Ñb±°ÿüÏÿtÅëÓ?�5\ôyU¾Ín ˜ø‡°?ÿó?·ýèGž–}qqaívÛ E6�|Rƒ9ê˜Ø+%¯õ½¸ÉF¹Ú´Mû6´l6kó7cÿò/ÿâkˆýàÅ‹‰Œå¯jºÞ¢ŽÝ´MÛ´MÛ´o_S�ovWv à;6î|7™)h¤ ¤ú›Ô�vô:ßJ¿ÿUϯÇ�ú‹øZuAA ®¥Ï©þ�>>P VŠÄ‹>�>ß:àJ�\Æø<þ3ýxÔ¾áwá3©_L¢ŸÌ5´O:öŸ`ÌÔ7ãsÚ®¨ i„lqü�âÙ¯€€1‘çÔ¬úõuõ÷Ô�QßRI0ÒUæ7úͳq¯˜a¥ïEy‰¾côƒ˜é@±®5•·8ßq}iö˜ A³T‹( öàÁáõŒ�u`2ØŽ–�Ä„¼PÙÓltÐöö¶û¶š�Ç80^úlQ¾ã˜¬YUÆQÿ7ÄX`-`^DØã³#_«ÕÊÁKÊP�ÑA¼pŒ’‡êÏê™*?:¯úö£]fwg}£÷ô¨•;E···Uì‡ ÜÑhä~>‡Î�ÇãDiþ­­-?à� b^G檋™G%ñt}¢ȤBލ.D�­êú©÷ƒ,Ò#>t½Ïçs/K···g©TÊ®®®ÌÌìüüÜá““ËY¬‰étê�´¬Ý?õ~èyôzŽ >ÈšîèQÝôÌ!^WY [†³›È$0YõkÄùt 颺¼T*Ùöö¶—¾ìt:‰£H:�ŽM&ÛßßwB¹àšÌ+ÙCpNã¹ hbŸt­ëk_…OFŒc¾¦:ÐÌ\�qþ�b¸Úoõáu ¨>"ËÌk§_ªÛ ÷Ù5™â|#ÈÅÓ”à;dB¾öz=__årÙòù¼•J%+‹6›ÍìêêÊÎÏϽ|çh4²½½=ûøã�í½÷Þs9Õq%p„ò�ÑFbï Øœû2ßô³^¯ûórÖP½^·G�yÆ£&Á@úÑ®¯¯�`+‹knT"7œÙ®9xÆL&ã¥ü8‹©ÑhX«Õ²‹‹ —ݯ-OÇâ …J˜´AH¢XÌÌ/ÎC´ÛmWp¶¦OóƒF3–”‘EÙ™Y¢v1¤ &n<üÇó°p©úøñcga¤‡`‚áTBFSM£±¢FA4ìuÑ+‹¯‹Ÿg5»K'…ÍVâM�LŒ¸h€(QÀÿÜ«\.{ZÚÎÎŽGæ¬3l|6:©¤¿ùÍo,•JÙÁÁ�—$„¥ï÷ûoÑ|?"(½/ÏÆBÁQ‰d‚fǰ˜¸ÏÎç×½®×BNy_³“”¸Ó9ÓkF£¹V#^ Þg®´|„:D:§ÜG�N®¿\.ŽQ*fëËѩÌŒp6Ñåò6�Ò˜ˆ†ür¹´Ÿþô§öãÿØÇðôôÔ>ûì3{òä‰åóyûàƒl:�Úh4²J¥’ Ó´?J¶©ãò.�ÏÛý×ÙÇlÏŸ?·çÏŸ;ƒ¿ZݾÔRæ5Vuœ£ׯW}.:æ›¶iß¶v||l/^¼xëuöuÖæ»2„øL$²7mÓ6mÓ6íÛÛ°© <Â�Fž�®`/6)þ�ÖÀ§D•‚fÉHXµÃÖëZô”Œ!Ú•fþ&³EÁ@¹ÖUXPÀì®2‡Úõê+rþ�¾e$´E@„ï©O…_½\.ݦ? 2q@-­Nàc·Ûõc€�fæ×2³£ý‚ðшu%åx €ðß„¿y�h_Ãñ'4ËFý,Ào®£~ k°mý"±©¾,Á¬Ëå2ÑOü ÁQàUbB…Òa¬£H´ê+دϭ~¡úåŠA¸)ÖÁ½¢?¬€¨V´Ðl#Î| „³NÊ岕Ëeë÷ûN<€Eà;“nR«Õ¼d:ä�ê ž§\.{°S.—ó€Z% £ß}ÁÇ¿£N‰kRq‰H"aWÄRò=—ËÙáá¡#@ù#]KŠ'�íƒÞÍår–Ëå<™SlÙ#›-“ÉX¥Rq,L×s ©ÏÓˆk+ö‘ßà}ºæÑwd‹L&;Áæ�Gæ�ºV«YµZõ=#�N[¥R±Têö\mdXçBuwœ;ƹflNOOm2™X¹\¶½½=—K0Tîƒü.—Këv»‰g‡hÒr�f–8û<ŸÏ;†×jµ¬ÝnÛÉɉe2ëõzv~~n­V+QE†=ˆ¾3歹0U‚ vt-ß]­V~®Øáá¡Öìu�õ Sr‹ÿÍn}BÎ��h;<<ô~k[§cøŸgÕ³Ùkêõº™™ ‡C¿O:�¶×¯_»L²_qv|¡P°t:íç�QS¹áyȲ‹à>Ÿ‹}V\—¶n�枬uÖòªx6rL¹1tŸÊä‹q³ŽÞ…�­sÖtÔ�ÈóÀX@�F#+‹ŽWCf«ýÄ:ï÷û¶··góùÜ.//­R©øyFdÛ‘AÖÎáá¡íííY>Ÿ·~¿ï6'û{*•J”�c?"ñ›²…qÂÖC&Y'{{{V©T¼4$¤Ýt:µ««+{ðà�U«U øæE³4ã>£ãÏ\S³Ùlúx¢{°¥•<ÆNÛÚÚ²F£ágŽmoo;q¥-A! °v,4¢òIsL§Óvÿþ}+—Ë 0a Õ�ÍV#8 d²Ù»CÝt¡LƒãËàÁ¨®V+ÿ>ýaâÔ ƒafq±hV«•F)Y©T¬Z­Úåå¥�F£Äs¢üYP:‘Œƒ.$5äu²¿êÒ«Q8(�H¨Ó£Ž‡öGS“1¾üòK;==uƒ@ɽ÷ÒÌ+®5ŸÏýP¿�>úÈö÷÷݈03ßÈ0f•PÓÒF*Gj@Ç�_ M6\æ_ ¬ÈP«‚e ;dH#¥ ycsÝ+¡ Iþæy5 ‰qP£‰õAŸy^œaeþ™3®£QPú?Ð9�š¾¦ä  >Îf37&”´ÁÁyþü¹ýÑý‘-—·‡-ŽF#ûôÓOíÞ½{–JÝ–1üƒ?ø;;;³T*åà@ŒÔÓ�‚gUãD�i}†|>o¿øÅ/<Ú¦V«yª8e H½$5:Îo\‹ëš®ûH ¡´i›ömjȽ~¨Ñ®†qlÄÐÀ†MÛ´MÛ´Mûö6|ì= ˜Âç‰Aø˜Ø„j÷*�¢ûÈ:¿&ÚêêDJ›ú�8óùÜýKuìWlúH Åj H§÷VE�;ÍΠEB‰ïÓ¾Š(SP‹Ïæáó‹ÅðÃ3@¦0_øú1€1Vê�Ò”(‰™7zM ¢ãžø¦J$!`¼‡O©çõq| ÀpÈ&p‚8Ÿêwª¼Ñ×Hq% ø›¹ÔL$­8¡ŸWàšï€°>tüt ùŽ®3õ§yO}MHÅuâ³*f±®é|)±‘N§½ŒR³Ùtù�Ç^Úl6›Y¥RqLŠŒ†tú®¤ [©Tr€�ì%ù˜Æ�èl%ucŒ8^Útñ\qM«žQRå$ê2% §Ó©µÛmë÷ûV*•ìÞ½{Že- '†Ö”ESZeQ±Õ%È#kD‰&Ê8!ãñØK¤ˆ¢ó�+Åb´Ï:�‡â:ý~ß®®®¬ßï[§Ó±^¯—ÈàÔÒs”yj4V©Tl¹\:qÝl6XtN™{%Ü"Þ§øý;??·ñxl»»»V­V}œçó¹ŸCN@=ØÊ`0p ˜ë‚3‚G™Ý�·£Ù è‡~¿o¯_¿vÌv8Ú`0ð²š:Ï«ï¦ :x/À²9ó€%ꜩ<är9«T*~ædcvuuå$6{ãþ�ÍÁY‡ÝbÐoÆ’ `…BÁm0ö@t"{/2C±k¿òL#Ô‡Ãðm4öýïßf³™ Hg‰°!ÒPV7ŸT*åI*|“ÉÄ�JŒ÷‰4A�1@lœÇÃýXÔ¯„A´(ªŠÀ¯V+k4V,­Ýn;ÉA„ �@©¡™*¬¨ÈÔ8Pã…ÚšÔrU‡ n\*<úâ´Ú÷Þ{϶··ý€@2­è·^o¹\Z±XLÔ[¥QãùÕ«WÖëõìÙ³göøñc?/Šr`ý~ß7D6:6U,4î£åéTÁÅÏ©�ËçcuL5[²‰yÓl.Í2cód£1¨ëgÝF¥Æ‡:ºÐuÞUùÆ�#:Š<—^#XŽÈ´„ºá*`ËzA©¬#æ´Ô¯V+ëõzöâÅ Ûßß·G�Y¡P°V«e'''öèÑ#¾Z­æé�ª¸µî«DÈ€ñ*«*ÙlÖ¾üòK{öì™}÷»ßµL&ãµS©ù»Z­¬T*9)Ç\Çù]s×L\ÿ¼¶n­nÚ¦}š®AÝoTç™­�ªd½ ;Ô�ß´MÛ´MÛ´owÓH>@†áñ£v´Ú�JÆð¾þ­>B™âw¢-ßW'rüÍo%â³ÄkÑŸHîDû_A¨ø½uûi´oÕ6¥�j‡«}�ÿ  ×R{ VÁ,*NRRÂImd.æc°e ~ŒT_‡ç…øR¢G3cð ÍîÎRcX&[‡²/ñ®˜‚ö<%úö:=¬¤“>s$#à¨�‡ô“gće¼=€Ô¾é¯û_}DÆCåZK)q •õï¸@ÕÁÁ�™™®ä_,„jT¿– Ôµ§D‰þÆ÷g¢_§º ¹ïZ_ñuÅrhëH<Å4§P_v2™Øáá¡íïï»l3àSÌòÁi˜c R¥Ï‹ÅÂ�MÍÄÓ o³;ò—ìÊÅÍçs/›H*sÃ:Tò}Òn·§é÷ûÖjµ¬ÓéX¿ß÷³7è!9¨Ž³µµå9`zz6{µZµ~¿ïÏÊ+v©Øƒú5Š/é:ëŠ$�õϘ‚a‚G"ç�lºò7ß¡üœÙmé´ããcÊå^“Éij-c?”¤×õ¨ûjĶT)n©%2ÑÁ¼?ŸÏ}îcv°â;ÛÛÛðw:Ÿ[]S}Æ=ôçd"•JY¿ß·^¯gÓéÔ‰¶““ûÎw¾ãDÒƒœ@" …>hFѺ}€×õu�Ó>ëè<(y«™E\²‚³² �ëä}ÅÞU?)^ª¶TÄàC…XWòrˆõGyQ°6J£QÁ¨T*ÙÖÖ– ‡CO!`ùÉf³NØñ¼T>kµZ6›ÍìÓO?µ/¿üÒÎÏÏ­ÓéX±X´G�Ù‡~è{ û³îW©T*‘U„=vÌóŽÇcK§ïf+=ZFËPÂi€é/ »¼¼´W¯^Y6›ulTõ É3àï�TëlCÝ‚GêYaZÍ+•J¹l^__[©T²B¡`ÅbÑÌ̃´½•iÄÁ`”uãÆœý‘ÉdlggÇ:�ެ.”ÎÂÂáÁ0 ¨%IMO”Š P(X£Ñ°ù|î5n™Dã£Ñ̼_”™#�3¦]-—·q¥R·) ›ÞÖÖ–Y§ÓqÅ€ñU.—}ƒÖ@$Öhü�ЙݥòœºaÄM^ì"xÇs¾ÿþû~�˜®¥×Gq,·^”´C᫱•Éd¬ÕjÙ¿ýÛ¿Y¿ß·�>úÈÙlê4²PqÈ`Y·!«1¦Î!JKÇ#}Œu›ÈŒGÃ{{{ÛË롘ùÑh˜ÿMãëæ…«ŠFû ieÀ£ñɦ¬õªµV, *•ò”h gÝtüX÷¼×étl4%6D•kuL!gf³™=yòÄ‹…µZ-{þü¹ÍçsÛÙÙ±J¥b£ÑÈR©”§”¢Èt�㢛)ÏÏ8ê¯Eß�¿ÍîNÇÇ�F–Ïç­P(x¤'¾*ëª IDAT§ö Ç`�÷ø¶&ö¯úê(ð³îY#È­c ÏÁg´Ô;ýT›WI¾§Y ñ:Ì™œoíiõ#˜Gí»ÞCûƒì(øMÇæûZu p080Íw"�®$”Ž�úÆ<3óD¦Ÿо¯kÈ�óiæϬXCôCÀ=ÈÊ(‹ Ò+‚LE®ò¡c­kE?ýmäp-’`\ŸkâW«Êó°¼··g[[[îƒv:�Äu5CLýgæ?�Æz|×¸óƒ ’q€ìƒ)éw•¸£©nY7ïë0"]Ã*kÈ$ךL&Ön·­ÕjùõzÝû n£}ÔûÆŒ;]ß�KJè0.fæc±ZÝž¡¡ :”ä Î�‰Ïq³GÝ3�NíââÂúý¾e³Y/»¦Qþ”aR¯Ùlúáî¹\Îêõºc›:Ze†×ã<¨^泪ÇÁ$èæ|#%ï”@×ëèþ¢´<2ÎüÌçs'ˆÈÀ‚¨ïä=ä’óà(=Êxó  Ð+f©{¡â5ÈŠÊ‘òÇy%Á@ $Öîh4²íímÛ{½žëýô'öO3+ã^¥û2óéé©ìétÚîÝ»g777v~~î6ä¥î“`¢ÈžÎ™þf̾n,Ù—T&ã>Ï(ÙjvG()fˆÌ- ëõz¶··çý63·U°¿kãGï«2_×{“-T©Tœ¸j4o� c�¬JV©neB.ÌÌK7 »¹¹±W¯^Ùùù¹}òÉ'öêÕ+›N§^"òèèÈööö¬×ë9Ù3�N»Dï³¾ lÁ²á&“‰�F#›Ïç^ÎOƒX»Ì!ë-—ËYµZõ½¸\.Ûåå¥ ¯Ä´XÜf’!͸¡ÛÈRÔñ×5@b‰ð3ôƒ“œñE6c:�NΠÃh Òá‚Üaa:¯vkµš‹Å„!ËÍŠÅ¢¿‡q  ÷ nÈ“A«×ëV©Tü=„ e¹ƒ�ŠašÍfýÞõzÝz½ž;"ÅbÑJ¥R‚ÉÔëqàнR©Øƒ¼†"BÅbRÀY7CUª4b¤Â»  5‰ué|Å9\weJÍÌz½ž���yÍ`@|~4ŠŒÅ”Ïç½6*JJ�ÉTê–úùÏn½^Ïž>}êó‚Abv•¥Dãÿ^"r/æ@�3%tÔpŒ†�Ž¥F¿ÌçsßXT™kuœã}Õ莛ƒÎ“Ž#¯ky65‘»x0-÷‰×D9*9¤Ï`–Üœ´N'e%Öm"*“”±xòä‰���Y6›µR©d'''~P×êv»–Ïç­\.'œÊu2 Î¥>çº5‡Ò>==µ—/_ÚÑÑ‘õûý·€mŒ}” ušÔ€\7§ñºñZ›¶ißöuöWAëtñ¦mÚ¦mÚ¦}û›:³fog¿¬[ü4ø‡¿¿ÊÞÖëEÿL}˜hßFûS?ƒ­³‹Ô'‰ 0ÀÿNûª¾†–´&zÛw]V’úâÑþŒä€Žs$K4c‹ûM§Óh®ÙU‘ÈH§Ó¨dàOàsªM˜0J—Ó BæMËÝAÀa¯ƒ[ðq?�²ðmr 53÷kÌ,Q~l„lÈOæš*QÔoÒ×4“‚qÕrHš!°Ž|YG 0FlÕEƒ˜ñÄó2^J¾(Ñ¢¥ÅèÛ:ÌCeEŸ9ã<¢íím;99±ÓÓS?»‡q!ó@£³un«‘k@l€Uõ›˜�‡^îŽ,™t:½öü æOAUãuŸc,âçÜìÖ¬1€Å^¯gý~ߊŢ5�Ù3uݤR)/!ÑA /øYiŒ�€kf×jµrŒ�û4’!�J¥üŒÆŽµÎÑŒçû0§� §§§V,}} »¹¹ñ`vpŽÖØÚÚ²z½îUoÀ$y%ˆÙ‡sÆ(Î�â}<¿â*TïY.ïÎw"Ó’>Íf3Ï&‚D¿!£Œk 9aÌ�%ÆGè;˜;¥Ëårâ\@Õ—èU7Õ7º÷€÷j02}Òþ¨îX‡‹®Ã¯Ø?4AÏDR=£:Œk ¿€â܇}…1n4¶Z­ìôôÔ …‚U*?ûÌšã�}%ý4;M×8ä¬öOuŽê æ;fôEÝÆ\±^ß…lÐàúÙï÷�ÔÓŒ0²óБJºSQ ùdOSˆ5¢Á9È*ó¦zHûÇQ fw’ÌQ]˳²®V+—‹ËËKûüóÏíË/¿´««+K§ÓöôéSÛÝÝur�{ò¬Ì‘Ú1š­É}".«äÙTÄÏwØã´:S¡P°ÝÝ]Ï$èˆà2ìtïçXÝK‘d„ûL§Sß+U¿i¦Áô<ò†þgÔöi‹ðqaRû4<—¨ „šï£ìL&c»»»¶\.­Óéø½···­R©$Òi¹.¡ÊŠ÷ÌÌxµZÙ£G�ìòòÒ�†bff»»»–J¥gá‚g`ÆÓºïêFë8GP?�¾�¬zùò¥µÛmËçóvpp`[[[^ߥä#>“.:>«­cšv¯çC�&3óèŒX†!ü_ç�êïh@Æï+±£ŸÑ�O••2ÿ1‚‰±Xwm5ȵ>¨¦‚ësb °1¡ ÕÉWæcÙëõÌÌœÀ­ÕjÖív­V«¹þP¢V�Eí/s¥ã§ëm�ŒQ3=²‚ù噸_ëaGY‰óõum|oÚ¦mÚ¦mÚ¦mÚ¦}uÓˆL@�T*奿էT[ÚìÎÂfŒö|ô…ÖùFj3F?-ôW øpM¿ÇõôÞ fk& ŸQÇ^ÌäXGJ)P½îÙ#@ÍßøÙZÚm]Ÿµ¯J(`±Z­¼ŒÛb±ðƒæ±·•ã|BXèyÆfwg¥h$4}Å?€”ØlÔ€Ppˆx…jBΔËe÷+å²ð'Åéƒô5¸©ÿ¬ã¬iù|ÞÇ€¹ÐÈ|ùæoä<ƒçRyWð’9U,Gñ¾§þ°â±oÑg‹²‡¬°v9Ÿ‚¹¡ü€V½^OœK„¬4I9ž¸†• ÈWR‘ÍX„4Z,Ön·­V«Y*•²‹‹ Ç©®¯¯ÝÿÕ}1PT×N’ã¼ëü³¾#ÅLøg�___ÛÁÁ�ÕëõD¶zEI^%5]I¾£rÆ9â èRµƒ>RJ©\.[6›µN§ã÷ÒŠE z~ôb±ðÒ�ãñØ�ž‡^vŠCã)×Dæ xa½^wrì�ëëzD¿ [؇�—ˆ-éºÑ5NãZÈ”mý~ßÒé´ŸÇuuuåe⮯¯­Z­Z±X´t:�ÈlÓ`]{賘­.£ÙEà;\r0�N; Ê5ž�¹UùÖ ctœâBŠÑG2qÐñ ™¤{¹^Ÿ±¬V«^‘ b’ñÑ=Oõr*•Š“½œ¡¤ú¡Z­Újµr™ªV«öøñcOTÈçóvrr’ØÃT'ëߊM©î§ŸŠŸÆ½Zå,6½û5{i È`ŽY—Ì »Ø« r•,@ç2V�ÐäB–.g‚#;šäÀY<ègÝ'Õ®â¹è;åóêõº“«œ¥ˆ~Bòù¼U«U�Fvuue;;;ÖívíüüÜz½ž�ÇcÛÙÙ±ï}ï{žáÓíväV>Ÿwœ›c,(Õ¦zÝšÏçÝ®¡|jÔ#ìÝ„¢6ïÎÎŽË}% F‰ˆ;²¤cÐK” ¼€ï€ ›N§‰u©8,ý…hÒ5FKü§ì)"ëˆ63ïeŸ0ìÙaܹL$‡BÈ °Êå²N7L:ÍbG‰‘%¤)è(2ÑR¢©T*9ëŠÑ‡òB°É`ÂpQe ë÷ôéS�Föë_ÿÚÙAœ‚ÜÑWCI›¾ÆDó^Œ2ÑMJß[w½H©1´X,ìéÓ§vttd™LÆkM£PÔØÓþ L‰N‰Ï¦›NÍ`0°^¯gÍfÓ>úè#ûòË/­Óéx­W5¶¸†*ú¬6ϨT, Æ?Yº "¹¡ò®µ(uó¡_º ¬3ˆ¹�Ž‹® u´ÔyÐ>¨³ z5Y‹È€>#2�>6kÖ‚Þ{Ýx©\ÞÜÜX£ÑH8ÚÔÙ¥ÏYÐét¬R©ØÕÕ•oXƒÁÀ&“‰]]]ùæ€SJ¿uÎuÌÕ‰ç¾úLü�N§íääÄ>úè#×%l<º†ÔQRY~—쬛ûMÛ´MÛ´MÛ´MÛ´Mûú¸�¯‡ÓZ*•”Ô2*|G?�í¦D¶.@ˆú¼ŸJ¥¢ž(¢g¯ð}Fš‚€©~þ³ú?j«/ 64 '>/`$%'“‰•Ëe¿&~�Úü”}Ãgf|²è?‘í“ÉÄA&æHû ðEDs "`êõzoaZ¾~±¸=óð r%›Íz Át:í¤`ùp8tœ;”rÇ÷Œ þ„ž ¾@Ã�Ô_Bz¨ïÍxi  ÏÒëõg*i¦“ú¦Ì-¥ÝÀ^¨¶àgvçó1w‘p £Ÿ™ä»1È_šï3N€›ôw±Xx�p&“q�€øððг|*•ŠU«U?»…’:J!oT‹Ÿˆl”J%?³¤^¯[*•ò Jp JvéÚ2»«�ò. PÇj<'€yÊÿÄ``•_ÿã«'oR©”u»]Ûû÷ï[¥Rq˜g©×ëvqqa“ÉÄAS3KôEAfÀPþç½Õjå$Æry{¤c¬dQ¹\öq].—¶»»ëòS.—íÃ?´f³™óËår"`€óeÚí¶c2±‡Ðg³Y'\ kµZ" ]uë‹ föˆñxìÄó£x&²¥¯¡w87ŠóGØ—Ð�Èá|>wüKq3HräS+Ü(q¢e0Öl$³»,HôõjµJœq‚lr-%ˆÙÓø ÷œN§ND隢ÿôƒ£FÐéº'²êÚ13?æGIRÙÍníô¾ÙíÑëðg% Ùç‘U²0÷aÏ~üø±û÷!º–Ë¥=þÜf³™Õëuûáès…�À˜éú#û¥X,&ˆZúÌó©žÑ=‰y�üCv5 Œ9ç36™LìüüÜöööl{{ۺݮïmdMj©FÊH’¹Df¥Nñ‹_ؽ{÷<û;d]9;ôD :’>+éÈ:Djµš­V+‡vvv晃Ì�b¥$†0—©TÊZ­–½zõÊNNNl±XøZ»ÿ¾Õj5'`ƒ�Ë·&  ÑudÖëõ·4Mf@ÿiÀ�b´Øì7ŠÕV«U×ëÈ+{kw:�Z¥R±Z­æ:X][αZ,n�Éd2^ÒŽ=JËð²Gg2›N§Öëõ,›ÍÚÞÞž�ŸŸ'Ž r}“øçÿ ¤n€ ‚®F�²]L¤F)(ÍÇMá¢Þ' F7~�{r`ýÂèGð4j…k�F#¯óÇBF¨˜@%“ˆ†à¹z½ž]__Ûáá¡„Æs£@#Y£Jx]ÄBdœÍ’ä ‹mooÏ�†{Ÿ";­)wJú(Èçwwwm4Y£Ñ°étjggg €_û‡`çóyËçó~¦ϬJA Iž…h�ýý}ËårÖjµ¬Ýn[·ÛõŒ-Mc…ñ�$@$Öh‘ÌQ_×/eë/%ux-~'’V\W¯¯¥*Q� %#±ÉН{Oÿ�ÏÍ{|O xžcÑ7^d·ßïÛû￟ˆ(ÒíŽ 3•JÙÙÙ™®“ÉÄ...ìåË—6 Ñ<÷:y�ܺµ‡¸µµe/_¾ô ™ä95zA�¢uäk\³:îÚ7];›¶i›¶i›¶i›¶i›–lj³Gð$³ë¾«ŸãoìÖuŸÅþÿÔR@Ñ·ÅÎÔêj?G;PmÅx²L€t \¤é5¹‡f~¬óm4Ø-ú€�±Ÿš�Àø1.€`5|ûðDƒ5ù‰þ�ÎÀ+sðÂw!— ‹”`yWÿãœ)9§>±ú2Ü_f@0žwúƒÁk 8Óõè_$`Ô÷ÒçÒ Ewñ¯˜/õ—ù_q3KÈ»ú°¬ @-Í�¡�üÖ1‡xQ°•~ˆ#øø�NÇÏÙåàsª‘T«Uk6›NlQ? ¬ßï'H üC^uþYÛšÝÆ÷" ª8€^SÇ[×�„Ѝ�Ͻô|jÅÍTî"Qõ@<þüöö¶U«UÛßß÷,/×l]Ÿ€ÕIžÍfÝÿ†4SR”y…„€ J� òjµê¥æ2™Œ•Ëe;88°Á``•JŬÙlÚ`0ðï€ ý~ß®®®¬Óéøss?~b&ˆ¼^¯;Ky:æIuú`¹\úÑ œ Ù¢k2bAú×�sÉw mùY'±Zë&•J%ÎQì†õ̺ÕþĦû—‚ʺŸêë4ú�.c]±ž�ÕªGù­?ªo”`×}cæÂ÷£^FV!üà#ÞÅs0žªçâ³€ô6�­Óéx9:ð*°JÖV6›õÒ‰ÑVQÛD×ë™},&J ŸÑÒ÷µïŒ rñ2íÅ‹N¼·ÛmÿÎ|>w"Ò ù #o>¿-ÅZ©Tl>ŸÛ‹/ül0Õ‘ŠÕjÿ´%ºOÇG±R¾�Å&â<9­,Æ÷ ¸A' ÛÕÕ•“¶µZÍŽŽŽüýÕjå%M“U¬›uˆl1ÏŠ›*Ù¨<„ýÌ›Ú#j§ñ,šé¨ãÂX¢ÿ°…(q©×�cÉój“fA¡Ç”b­žŸŸ[¹\¶ÝÝݾªí­òtºà#N'.&˜×À×H ˜/­ƒK¹X,ûÌ!k�¨0Uâ*7Qô>Ñ�Ôþ©aö.ÃnÓ6í›Ö6ò¼i›¶i›¶iÿo5ŤU°(^ ¢ª«N»úøá›f2w�sOH-ñE6>% O±_y--„¿ð…¯¢~ -Ú˜Ú¢¯à_츖þŽv­ÚñzM³;YûJyªÉKÉy×á<ƒþ„˜™ûðšM¶µµeãñØ}a�ô�� ¤…’)š!¤c„ÜáÇ+¨Š‰<•Ež™`Y�î§@’úÉ Ä*áFÂuég*iE%×ÀU÷9ܰv{{Û+}(H®Ù€÷øŠëˆ"€,ú…ïÎ=‘2V�'@ªÙlfo�ÓõÖj5/o3‡F£‘g˜qÏHò¨¯ÏZ$ ‚¹@'ð�H¼!ï<#¾$ó£þ ýŒ�”`(§Ì§ÞWAft ×¢_Ñ&‹¦T*Ùîî®Õj5/kÄy5f0I¦Çd2ñ (úB@¥Ž�‚ÖŠ-ðÌœET©T,“É8�I‰ºz½îY d¤R)�ª�ÇÖív½òH§Ó±v»m£Ñȳ)Àù>eîÐ;;;®c‘wô­Îkg>Ÿ[¹\ö’{èõÝu½F2€±ˆXû?ŒC$8b㻪sã{ (£{T^ãµuÏÔuÂ>§kZû¬kYוâEKcÌu,"V© ½&è^¯8[ÄYt-P2=¯-[Ú_îÅç´U­V³Ñhdý~ß×O6›µ��3»ÍÞSìQñPúÎûqî� O³»ì¢t:íöY4èÆ] ݇¯¯¯­X,ÚÞÞžc½è* ˆ‹‡8¥QA �Ýl6½$ �þÕjÕ4OtVÔ[ìíÚOÕ÷ìUJd°GmmmY«Õòòyì­Ì×�N§V¯×ý™NNN< m6›Ù³gÏìÙ³gÖívm¹¼Í¿wïž—¤‹ø§’+$KРû;%RcÉW]·¼×®Ž�êT}?�N'޾Q½LcÊb]ñ<ëâS©”g‰!j “ÝÆž A´iÄÅu#QI…ž…Az‰Q‚€Çtì|>Ÿ „�ôP Òv»í†‰¦Höû}�^¯ç k<ûl£¬Ç㱺ÉÂaóFÈé ˆ× I8tðââ äJ¥âN‹YÓÔqE"“q`l‘Õçª è/ûýã<6‚ó[­–ãVÓéÔIˈ§D|Lç½ÀMcÔëëp5÷µñ]tE¥R±ýý}/ÿÈw%xZƒVxæ(cŒ#s¨ëˆ±Œûð:Ò–khà s Õ´Ý® syµZ9ÆÆ>Þ¾ZÝ‘üÜL,—Ë9fÆwYˬ-%ôUï2®ÑVÓùÕ=‰g›ÍfV.—=“\¸V«%ìä—Ÿn·k¯_¿¶ñxl­V˃�ÚG}d|ð�½yóÆæó¹gbC(ÉýsúÅü‚�F½ ÏIK%N™‹(—Q6™  Q|³X,Ú`0HdÒ)Í<Â]À+p/ðNô8sͺTb BRÛ[™F9£ÿ³é+°Î‚eA ºéš™+òr¹œ8ðžA$ã¨×ëy=ÓáphÓéÔƒ�×ü�F^“a§_ôY…’�Bq³©�Çc»¾¾vR†ë Z�²×ëùDiÂBŰ!ó âIKãéd¯Vw©qôEÓh4|£�Çöúõk¿¾öRL•l±XL(upø D³Ù´ÝÝ]�òÁxØÝݵ|>o<°Z­fü±ÝÜÜØO~ò¯ÿˆ®†E6{[OWS7#9F­Ä½½½„Y.—­T*9ë«Ï  /¾�oî¹nãÔMGkŒ@x—1�ã¸^Ô0Ñߺ™jÿ‘Íu)ñú}�ra®Û`¢c©÷Ðû’ÅG�R 3%ž�m½Ï‘J¥ìüüÜ'8¤“nÚff�=²÷ßßŽŽŽ¼ž+N­V³_ýêW6 ìéÓ§vyyiŸ}ö™³ô9ŸÏûAq¸©TÊ P¢[Æã±+X�ÝÈÈ\T†žb½*ae‰1eãdƒPùˆ@ëo®oÚ7½©NQ±i›¶i›¶i›öÛ4µ¹ÕÉŽ`„î=ØÆJ6¨MŒíÆgÌîÀý|û4S@ƒÌôœ£4˜,Âà{©‰½ý×݇y_�F}Îu`„Ï\�>EÀ”ßø×jc(Lá;à×ó,<«8ê·áÿBN¨¿¡$ ÿ�Oý—ø< بŒ1–š=Á`^S²h�ψ€ÿuî×ÍI25�¾kÖþs:�Nœ­¥Ï eÈ‘cæ&—˹¿ÍyÈ+ã¬�² "ß:Oøc:NšY¤×¦�Mð:ýƒÀâ¬Ê–-—KÇ‚èÇõõµW'ѵªk™gÖà][|Q"¬Õ7W\�ë16ù|Þ}Mõÿô»:Ì«bPø�|N×6÷ÕÀMîŸN§8 @éjµ²f³™˜•Q]”õ ‰wÈŒFدók äýíím+—ˉ# p]­V¸ 6H†ÕgºÝ®u:ëv»‰2IóÕjÕ+ípf%õÈxà¹!@´ä— ¨¦Ói4ç^<¿êîˆ3E]ÁX¯#8'cL”hQ’eÝ�ö_‰ÍÌ`½ª^‹ýŒD”&ð9ô<óÏzѬÑwȯóLªS({ˆ®×þèøêóÇ5¤¸´f¶èó²Þé¯óÞºûéûT_ÚÝÝ–©wQ IDATµL&“8s-“¹­PÕh4ÌÌçp37º–5ÀÝ3qt<KG¿2º¯ªÎb¼Á±—Ë¥ª:Æ`Q\›µHV"}Z,^f’ç¢ßd3©bþÕ=_õ�Ωê\žC³j¸/xüº½—±ëõzvrrb§§§^žóúúÚ>|h�=²Z­f¯_¿NŒ¥VÓ,d˜ùWÌ]I_ÖÉ,ýUÊûŒ¡î%�âp Ü‹uY.—­Õj9Áµný°æ¸`-³kf—f‰£O8sN_§%H#6|6ãÅbáF!ޱÁÅIQÕŽÆòe(d®�qÀ÷lRl+•ŠZ¯×³«««ÛŽþ_% éXÔ¼…i%]elv[–®T*Ùþþ¾oJGGGN^­V+OçN¥Rv}}m———žÏ&r}}íçi¹6=` E[.—m0$V±Xôg@èV«••J%7ÒŠYìœ 9ƒáÂu1,¢ð°ÐR©”×ål6›v~~n[[[öÝï~×2™ŒíììxfÑÎÎŽe³Y{üø±Ý»wÏNOO­Ó騣G�\èh‹ÅÂvvvì?ø� ‡Ã„p1G÷¤$ÓŸ\.ç‹b,ÕºàÔ¹TyŒ5Ï[4èâgÖ9šú·*E5×}G?£‘¼®J)þÐ4JQ ž[7Žu×Ð�0*G3óèJ­ ³ŒÔàív»öÿñ~¨¥>³ß8rÏž=óÆóùm Õt:í¥êšÍ¦ÍçsÛÛÛ³R©d¯_¿ö {±XØh4²§OŸÚþá&j_oooÛÎÎŽ×b vqqa«ÕÊ£–ºÝ®G¡`¬i]ÆA•¿Ê�nâ8Z8°Ìúèô¦Ê¦F nÚ¦}“ú@AœMÛ´MÛ´M۴ߦ)XAV¾K„Íî€! ÜÁ–Sç=ÚóëÀ%ˆÜçÞS°Oí<úNä.¯c7*ð¨YG€,‹Å£°•Á7ˆAF‘ôÒûñ<:F”© $c¦AP ,3Nz-üžKç(~Ž{k_ìb4ó ÜÌu÷ñItn)k­>”Î5Ϭ×P¢qÝßÈ”Úöz­éóF žûñ\Øô“±ÿ*”Ï)ˆ fp}}íå†"ù„Üd2O‚y5 �D곫ü1Æ€ŠÈÏC_õ1_777Öï÷G·ÐgÍÆÖgPGû©gÊiÐÈt:µÑhäŸC– �:�ŽÏ/íõõµë#%:¢Ü"‡�3àŒëì�kÅÓÐÍ<ƒfþðþr¹´““/K‡ÌíííÙÇÕ…�7=ÞFm;%^•¤ã5%FÉ€¢\ìWá{Š;ªmŠŽÐ±„/) Öív}Þù�AÖÔÎC6ôž”"m6›>w*‹$Ï §Ñÿœç¥2MK ?J�.o–,u¦B¯Æ$ŸS › F!Íf37n‰à³°²×årÙe©¥¤|�nšº‡ÁQ(¬T*yŸ•éäž\OÉ)UÓÔDͺ�\Ã(æ`>ž•÷K¥’+žg6›yýLJ­VóôìáphËåÒvvv¼n% ŒÉÁ�ù|Þ£²Š<ÃÁÁ�e2ÛÝݵF£áFZ­V³n·ëÊ<�N{:éw¾ó;::JÔXä¹vwwíƒ>ðs¤XÐÛÛÛ6™L5¯É¾bÞ•DXù­Ù,qÔyGiêfù®ÍF�(ä6nÚqñG'A•žnÔªÕ8ä}uJ�;Þ‹ý�ŠAÉ´Hêç× È¥FC�@º)ã¢ÏÉ\“Ö®F-}ÑTÇÕjeµZÍ^¼xaý~?�ÅføñÇ{ÄÂ矞ˆƒ@43;<<´Z­fóùÜö÷÷­V«¹Q¯Îo³Ù´|>oÕjÕ PƪX,:Q;�l8º“ÀXk6›V«Õ|CA& éÉdâYNª˜U–Ù¼Æãñ[›¶ißô¦{ü¦mÚ¦mÚ¦mÚoÓ°o!QÌÌ� ôÕ&ÆVTGKB)QÁ= jĶÃvS»Wmn³»²Õø% öè3hĨö×ÌÞê�öSÉ•(˜Ý‘ Úê¸(ðÄõÕOQßBÈôY5V#oW«»sœ¸Äofü,ßcÿ¹^6›u¿ЗgSrK±€Jd߃ÿ¹×r¹t YKàà—kààØºq4Kf‡ñCÁ”¤Æ¿bœulô>úŒ|WŸQÇD} ÆŽëEÛLû –¦ƒOÌD–kÓJ‘4RLåšûÆ*4Tn�;88°ýý}¯B‚ß &¢Ã°¿¿ï>­Þ“gf̓Áè|ÆÏë¼(É£²�=™L,ŸÏ'ÈTˆ•w}Vø˜¯u ¹‚øøï¼NY¼v»í½ �w¡ŠK¯×óq<;;óµ¬dµ’`C0©2ÊØN&,H…*•JÖl6­\.;É7=˜ºßï'|ª�ÓQ’®Z­Z¹\v�Ã:Slˆ}€òG³dMªœƒ;ð½¨äÖõª¸JÄ]âšC×)˜NŸ"†…l¢‹¹–‚¸\ Y\ç“©¬S݈uıJ�*¹†¼ñœü¬eØTŽž+—Ëù™5Ń©B2³gÄ5 x¯ë3*F£ßÉf³žÄ9ZÌ»âVzmÆHu„@¹\¶áphWWW~4ÊÑÑ‘“’èAHMÕuà¹z?%b†ŽÚœ#T*•,—Ë9!«IjSðw¹\öç|òä‰�ŸŸÛx<¶z½n“ÉÄI•Õê– C‡h?uŸ'±ã½÷Þ󳜔,Џ£ê4ô"Dˆ’ÜyCw²–�»J¥âÄ?Äx2äÙÙ™õz=[­VvzzjGGGö½ï}Ïêõºë1]w”áÌårV(l<'Pä{8:ñ==9&’Ê:þÚ¢�qÚuòŽî'°ƒýY3‡K¥’Ë_´%ô¬'l·áph‡‡‡ Ûr]ÐT:}›Í:�N­Óéø=�sZ‚4RÃ��VöS;§€=‚ÀÄë€!œ(o=»dkkË&TB‰EžÉd¬Ñh$j%³10q(ÖÓé´G”ÀÊ“nŦ¡Â�2c�@¾p]Mu$"�L$ÍXbÜ pTGƒw¹\ú^©TÊÓzÕ°aÂ0x ÖH=Ä ál¥­­-«×ë ‚¯P(X³Ùt¶˜…�ñ@dJ †ûììÌZ­–Ûýû÷}â8áØ±�”Ì3³‰FßXDùhMRd&:5êF'HŒn\Ñ WãM7èè莀*�þˆ÷ÓϨ"QF=:€ëˆ/¾£F’M¬]kfIMûŽ1U­Výy‘CúF¿uƒÐçѨÖJ %ûË_þÒ²{úô©e2·56ûý¾=~üØ*•Š-—K»¸¸p2«T*¹ƒ—Ïç­ÝnÛOúS'}é·–}ƒÎçóîH°Ž1ŠªÕªoP>´étjggg®X—Ë¥íííY­Vs'¥X,Z>Ÿ÷ÔùÁ`àt³ÙtöX,ÚxŸÛgŸ}fƒÁÀÆã±gEµÛmÛ´Mû&7tÌßýÝßÙ�üc3ÛG›¶i›¶i›öÛµmmw%6Ì,QJÅ,™9¢€CtÒ±�ñ3ñ«ˆ,Öè]SÍÌË[©Ïa–Ë”,R„ïaŒ¤R)q±Gé+¾×T0…ñá3‘(P‚Fß5SH¯­cfvgçó=JiF†F}kðXôϸžàÌ�úNøÐêw¨l 3 @éøëµ”TŒ€ÿ‘#mêsò 뢢ÕÿTB„D£ÿô‡{j?¢_Ëý!b6¯+‘Éÿ:J†©·ZÝ•B#z\É"ík»•°Õµ‡,DyÒqÔ1Ïi4öðáC;<<´ÑhäÀ ¸OÔ{«Õ²{÷îÙÎÎŽŸ¥�\1®<ë^ÉDЬ@æYÿfN×ÙlfÃáÐAxôŠ’ÑŠ%¨œDBu•’ºNtg³™U«U v~~î sIL€Á››/¥efîÛòžbx &òL1,€rt¤M6S.—³ñxl«ÕÊÎÏÏíââÂz½žõz=�~õ¨‚b±h•JÅÏ?¢¯`SJ)¸�>béÚZ·¶Áû4ƒ ýÀÖäÕ@�k�ûg2Ç�5 •ÏP*Ü|vÝœÅ1§¥‚ÖÞÞž“£ÑÈÚí¶±\‹ò_`s¼®X¦Ú±ÏбƒÍŽF#ëõzöðáÃÄܪ~¥±7@Ä1årÙNNN<‰�DðxÎ’Ó%пÑhØÅÅ…mooÛ|à„ªb„ºgÅ@ö)ä„ïià˜Ÿ©²Z­<‹ñòò2�Wƒ'¶Z-k·ÛÖn·ý ªG�Ù~ðƒÄ‘1È$rÏ<°!¬ÉÄÁ>SÔ±Õ£X¢�åWmM‚нÝìn¯âjOðžÙ-¶Î‰PÍ$K¥n ®ápèò¥ë—~3/œkiIŸbe™Ä*ˆ‹ÅÂ7 5Ò”xá=c‡ÏÒñù|nƒÁÀ£[0&H$ýL#?¦Ó©O¯é¥‰¢�F‰ìÝ8Y §LƒyÅwH�Dðé#†A©T²~¿ïcÕl6=½µ×ëY«Õr'€ €0!e|µºe9�†­V+�Fb�qHgÐÀrîîîZ.—sbH‰,Æ‘â–ËṲ̂f³i;;; �a<æó¹õz=WÓéԆá3Ò�N'¡øÍîDÓ„,âkÊІÅÚï÷-›ÍZ¿ß÷Zź!£\”4b.ÕiPçIä×)2~G'�ÏG‡"|¼›º©ò=Æp�á®ã©}Ôç�N ×` ”Äå»ê¬hT}@~ÔqãzjµGãYs��¤�§R)ë÷û rãf<Ûéé©}÷»ßµJ¥bÇÇÇž^OŸy–‹‹‹„3¥óÄ3ÐÎõâ:Z‹™{ÿý÷íÉ“'ö³ŸýÌNOO}3[,nSëß¼yã΄˜×ívÝIH§ok¨bÜRûµÕjyäzËåÒƒ�oŒ›¶ißä†.úüóÏ}ßÜ´MÛ´MÛ´Mûmšúbê̪­Êoµ‡±íù_SøH¢ÄÌ%ˆÌÞŽ†\ѬµEÕˆ÷åy4¸OûO‹þIlÚîÅóD°BŸu Çg···QÎúêǘÝù|5•Jy†ƒÙÝÁË€“:>:§êOáC(¥ä›>§pÒ/æ”k)9¤å¨¹¿Î;¾c«Y[ÑGSYФ MÁj€D ‚Rù›qT pFÁF®«d€fsáã(qÊuõ çädzq-ƃ’odò¨�¨ë3Êw˜um!qƒTê6@wooÏŽŽŽlggÇïËsƒ1år9Ûßß·ÙlfÝn×...¬ÛíZ³Ùô &ºžÐðOU‡è<«¬ëo>§‘ù†ŒÏ»È¾ײ^—ùÕqR=£XcšN§m2™ØÅÅ…gB¬V+ÏáóŒ À!•7¨H£„0ó‰ì\__;@»Ž4ê÷û6�:ƒ{ÝÜÜX»Ý¶~¿o§§§vvvæ`t:�ör�Ìk£Ñ°jµêXþ·b1èjæ’rj ›ÝULŠëˆþ�Çc�Çvpp`[[[6 ÞÒuªG™»H¦¨^‰ ¾ê`æU¿‹^bÜU.tÏ›TB î™Èç»ú¡ 6礃‹‚•Д8ßÓ{Å=Z18î©`<ŸU£Ÿºo®['z]~” ÕïòóGÙ¸ýý}l�Zì×@_¤R)«T*Žé¤R)Ï:ÒyUÂùfœT>Uïêšan4«RGƒ2hÈŽ®E-ÍȼÕj5'Øô¾ìM¬3sy�F¾¦ëõºgŒ&0ì8/ñ5Ý#uŸ`¬5°DI^�Ïø9l�B¡`×××ÖétìÍ›7Öëõ<°{ß�V¹ººòg…ÔãüðC«T*ÖívíÓO?µ_ÿú×n` + ¶\ÞfýhfÏýºhÌ ˜¤ðîîîú3é"Ã9Á€ØÙÙ±{÷î™Ù]4Ít:õ,!ä«ÕÊÙõù|î55—Ë¥u:»¼¼ôÚžÜW#k�ÒÚ0ü�•'s5T žô}׉NM\,úšö-«ÊÊÆë¬sc_øÜ»š”(ä�×¢á©3ŸUJH}¦è¤ª‘¢ŠZ#ß�Ö†$Æóˆ“ÈfÝð�kˆÉØl6³\.g/_¾´ÝÝ];<<´û÷ï'¢¦P`�·š¹ÈFŽ|ëX(  äŽÄÿñÛïýÞïÙ'Ÿ|boÞ¼13s]·½½mý~ßÏkBVs¹œ§ûªĆK4s¤QCŒ ›B©Tz§œlÚ¦}šî5ëˆóMÛ´MÛ´MÛ´ÿm{—Íj–ÌÄ0K‚1û0ÕfÉ 0�¤W"û1Þ7>øzÀ÷Ll`¢òñWñy–¯U"¦÷Ѷî5í»‚”JL0ö f3ÖØÝø Ü¿ À0ú0±_à €/êÿ©o€¡ÙMü¯Á‰øBø4šµ…ŸÇ÷µ$‹Î¡FBk†ŽúKú]@ä‡yÏd2 IP¥~‡¦çtǽµ ¤ú*:ÎQ&!æ óð‰Ìný-#? ™DT\Ðçb ɨU²&‚Áëd’J�?ö3ª5»E×c¹\öòu/^¼°‹‹ »¼¼´¸ïjf‰R•fæeȶ··=C¡\.[¿ßw?OÏaÒõhÊyÅbÑæó¹@ß”üÓµ¡ �âq›%³Jø !À3¥ƒz½žX¹\öL|R|Mªv0çårÙÁFôe™Ô§¦¤<Õ|”\Rbe8z©'•Ëåò¶|Þh4²ÓÓS?»¨R©xµ²ÇøM)»|>ïUE‹E¢”¥’²©TÊŸÀSuã6›ÍØ% Ð=ª/u~óAèÞ ÷S™Sý‡\é÷‘јiÇ[�þu>W”=ö•¯¸Ž�yÆpœï(‰¤€±îièúù ¿···m0ø'ó¬T*ù<€Yª Å}S¯»·’½à9©TÊñZJ:.—˵åu|TŽ5+½Ä™÷™LÆIÍŒEwk€~ìç»,ô }œÏç^îQϰ™L&¾·0÷ȇéòèÑ#ûïÿþïıàä¬ïáp˜H¡O¡Pð×èÏý> L�ÞgkÀ:c ×æuöÕr¹œÀ’G£‘�ŸŸÛË—/=ñ!•JÙïþîïÚáá¡Íf³Ä™lÊ; ç”0!£Œ¿\.Û`0ð~$² _±=4{U³Ñ=¬£h³ªí«EÈ›’Fœ Gf¼fL©NÖõA™çR©ä2Ñ!Š)c+1î|?bã Ò.�N'JV©1‡òe„€`@X@d?ßåýjµjÃáÐÉ$„�:±³læjL²‘3Ø[[[Nn¨ñ'a`á¥Ó·µUÐR©äŠ—Hú‡‘Š’Ýßß·üàöðáC;::²T*e–Nß–¹ûŸÿùkµZ.œœ\[ Hž‡³W`¯S©”+Ûùü® YL(Í3b$µÑív½&&5—ËÛš®étÚ#8x�gI¥RÖh4¬X,Z«Õr…©†i}Š#I‰0æò ƒ”9Ä€!š…AôÊQee«›wÜ �ý­›¿F}Ðâç¢S¨NE¼§þ¯†~4.¢¡±Îðˆ÷ÕëóÌšÑÅ:Ô¨UV"šÙaƒRa-]__;ÑY(¬\.ÛÕÕ•- /ÿ¨ÎŒFשs¿½½mî$|òÉ'öÉ'ŸØõõµ=yòÄnnnÈì÷û¾ù.õ™Ñ;ÕjÕjµš ƒÄ¡zè Ù­£�Ïçm6›ÙãÇ�í/ÿò/}íY½^·««+ßl2™Œ«©T*±á`ˆh-Qdvžõ˽'“‰íììØÑÑ‘+ýMÛ´ojSƒã{Ó6mÓ6mÓ6í·m $GGAµÇ¼×ÈH--#ùÕÆW°´R©$Ê~óyÎ]À~%Sœ×Õ÷`o\G–¨�®Àýjµò’ZØ�\S¯§vû:0S�n½wô%4Ú—@*ú«„€ö—ÿ9ëŸÀ_œ€’î<÷'ÀLƒ2ñ 54…€šqü‰Â‡Y­VÞOȲT˜Ëb±èçïV*¿>φßÊo0%Ÿ4+Š “ÉÄ™L&cƒÁÀ}\¢³õûŒ ó©Õˆ23�Ç~-°È �:×@KÖC.—³N§ã%m(­D@¬™yé²ápèóH…•Z­æ>=s ˜Hi#ÆyZ4� ãÎçs«×ëöàÁ'.˜C¾S³Ù´ÃÃCK§Óvyyi¯_¿¶v»í䈒«èdA¿À°oÕ š=Gù3J:5 ¯žƒ3>6£‡¸&ò8¯ò�¼kF“pô°s4ùéÕjÕK*qo-•ÅØ ÐÈ5Yó³ÙÌu`+€»eĉ&¸W3ix°¢N§ãçÈår9«V«Öl6ýì"d­^¯{¤fJÑÊW\›Ýf€9*æ^xss㥠g³™õz=?g¸^¯»žáŒrÍdM)81 ×÷‘÷¸G¨nã3â3è>Å÷ÜÕ>iFl”®û †Áõô3ª»‘Õ[L ýZ‡]éÞ®¤¾’TŠO­#R”DbßÖl(ýýôS{þü¹—ÞbQéܳQó[Ÿ‹~¯cÊYغ!kŠ«*%Æ•9UBS7EäRçe�seÔ£ ÓOÝdt!ñú£˜î§ÎA¼& ƒ1[gD2¦ª„p¦t³W‘gfŒ4Ú„ºêš^,­Ýn[>Ÿ·f³™p¨qØè“Ž1÷ÕñbŒ³Ù¬§…–Ëe»¸¸ðõøàÁ»wïžýæ7¿ñ2‰D1ç´ëëk?T£öpò˜‹jµjï½÷ž•J%û“?ùÛßß·v»íF…F–a³ñš™×÷$"©Z­zYH ÐÉdâÑ&�Nl¾^¬]ôͦmÚ7±©ŽúÛ¿ý[7¶6äѦmÚ¦mÚ¦ý6Mmò`EÀHIþ§)শ²Ù€§65޵\G�y|¶*¦±úêCpmõQb¿µ±éc ZÃöÆ÷TÛRûÉÿÑ·‚ôФ”GñÙ#¥>÷Ñ2^ŒOÌúxWùŸ~hUõkµÂx„޾)ÿ#3úLÜsÝ{Ì—‚*J<ª?‰ý£ßaÞ"8啦`.}SßN‰G³»*€Ä̇úáØf€v ÜêãߤÓiÇ[ŠÅ¢5 'N9$]IGõ“ T?7‚Öà?ú9§Ì7Ϥrɳ¥R)¯²2�=˜‘ÒDår9q„®®Á|e³ÙÄ™M ¼#Èä�®'dyUÒJçD³L`TÂO‰.}vÕ¥RÉÎÎÎü¸�?]+�,©TÊÏùÈårŽ71¾Zæ ÙURŒ‡gã:É€ÊJr"s�QÌ;øFôn!ú†.ÔsÎy&�›X^‘õ¯¸ YXà’µZ-!oøð*{ºfçÐ5ÀòÆgùžÊsÍgTNtQÒR×Ö»&½†(Þ£�Jð1fJ’ócÊÜëw×�•>£®Õ?ô=â^ª“•Œ@ßűeBÞ�ß­­-Çj ›§ß¬dý Xß53׋77·g¾£‹á×õGŸY}e•UÝ·4®X7Ïϵ d¾¾¾ö oJZÿV™.5ˆtÑ+[A‚ò°t„TT”4¤ سùL& ž*ͽ0�>R„J•ÂÖÖ–M§SO‡d`tòØŒ`t5ÅL >ßï÷-—ËÙ“'OìÙ³göàÁƒDÊò_|a?ûÙϬÓéX·ÛõÚ²Ùìm¹6R¯Íîˆ2ÝÕ1ac£ \œ:Ra‡²C(“Þëõ|‘ÚÑÑQâ�Á­­-ÏBÒz¯ÃáУkˆœúòË/½V(ýÀàPÃE’NßÕ…$Ú¤T*Ùùù¹]^^z–÷ÁÐè•75VU£C7O5Æ•ˆTÒy�FM%†ôs¼®›ºÊaÜ¢“¨J %‹"ÖH¬hˆðš>G>ŸO8„ü¯Ql*:æšÕ¹‚åZq|u#$5Ùä¹(‡Ðét|M}ï{ß³W¯^yôgiJy*•òh;úʘ‘Ä‚õWeÙlֆáýó?ÿ³5›M33Où}üø±U«UkµZ6�N½®2zŒ“l6kµZÍ#Ñm‹ÅÂvvvl±XøÙE•JÅ•ó`0°^¯çÆí¦mÚ7µ©üìÙ³ÿŸ{³i›¶i›¶i߆†Í ø‘Éd<âg[ž`uº¹†´|GI ®Ã®ít:^†˜’bIbWÛÝݵL&ãöœ^ßLË+ô„ï :�݇î'©/‰c�O>ÏM4t±XôŒlc‘ñÏâZçgà{bëÕ?›Í¼ä >ª–ÛŠ|ü�¿§ç'i@QàÚwP{øß™lîÆ_ %âCP²…~Ä,dJ‰dvkëöÐq΃Ð>0rÎ3€¿�5~(àE_ÍîªcèÙPåZùÃÌ|Mé¹ < %¶¶¶¼rŠ‚Wà?J†®‘IµŽL4»+ëY£$ˆÙ°ˆÏ©À(8ÀÿSe0Ø›7oìÁƒV.—ÍìÖ¿cŽ‘{ÌÁ¡ÎÏÏߊê_.—>F`DÿSÒ¿–B OÕA³Ù,Q�B�ÇH*+àHŸ@ñŸÉÜ�Øcm(°Oà§7¢/"ú¼Z­ú¼h¶•a8×h4yi§N§c£ÑÈ40] ƵX,ü\”ƒƒ;::²½½=÷ãÉz°×s‘êõzb½0ŸJÞ€+®B@,ÏÙëõl±XX¹\¶jµêÙL“ÉÄÆã±cbñX Ř”°e-€!ã¼Ç Ö×ù;Ê:˜µÉ¾nDиߺ/j€®’êÌ=:yWr�õNuæžjOóùÜËj Aˆ %#õ¹xŸçCÎ'[§{s¹œëæ^åŠk³FûR©d;;;^Š�J0:w™LÆ*•Šc�z<5¬m J¥’íïïÛp8´ËËËD_*•Jâ>î{Ä2É@Ý[T¯j6{ôÁÁ�Ÿ±=™L¬Ñhø~_«Õìððоøâ ;??·û÷ï[.—ólÓR©dµZÍV«•' ó®¯¯íôôÔÚí¶øD}µº-G6 óÌú‚l"Ó½ÈxD~¹¼+UKVàÖÖ–�F#ÛÛÛ³››»ºº²³³3;??÷ëìïïÛÇì¸&×Ó q²µ8ß�uB&VµZµ§OŸz,öZÅ�בÉú>Çjp/ìÅ^U��'*� _�¡AûŒ{µZõ  ÆPu–Ú4ffƒÁÀ¯Ýëõ\7C€ ×dÕµÛmçk´%H#Œg>BDGYð, ”‹‡FPd€2�FN�F#t6f®Çƒê¡TºÑj„ƒ¦l¢N:©ÊA ú Óéx$Ëöö¶ ‡CK¥Ržš\«Õ,ŸÏ[«ÕrÅ|}}m¿þõ¯=S‹Mhww×ö÷÷½v0 E ¥ èËbq[ëÅU©T¬\.û¢Ã€Ôh L„¥Äõwww­P(ØÑёݻwÏ7'œŒ]J~u:»ººrv]�NîÇw÷÷÷­ÙlúB„ÁGQ( )uvvfgggž ¦ R£wpö4âA�nèü ZdKUIG£RI'�ÞQC%e½¡d—:jªhâçõ=®Í8ë³*�ÅZÔM“…¯N”FÜh´ÑÌéôÌ7ßEëæI±�2ãl¯››7‚¹Ç§Ÿ~jóùÜ~øÃÚöö¶Ý»wÏ~ÿ÷ß>ùä{õê•÷[õãÅZ&*Žë߿߿;�NíóÏ?wvþÅ‹öýïß¾ó�Ùo~óW¢©Ôm-Xu’;�NÂP%Í‚:•J9èÀÆÊ8ïìì¸q²i›öMnQ‡FcbÓ6mÓ6mÓ6íÛ"0§{LÜo¾®© �?…�Ï{”jQÐO�~À4À�œDB@í}ltœ}ìb@uÎäQÐL¯¥ ƒŒéÙ\°•ÿÕÏ�UŸÿÒ€[íèç(x¡~‰FíãûÞ©ïÏ}‰ lî÷û^Þ«^¯{çó¹_/Ê ÏAH~ut|h÷ïß÷ê`‚Š?p%Áu]!_�½¬ æR¯@t¡P°J¥âä>ýG§’i@ß�yÅ4u­ñQù¬UÖ‡½+®Ä8ÇýN�c½�>cÂø+¹Ž~Ðu¤M±Pþ“DvÀèÈà€8Y,Öëõ| wvvœ`ѽ*þ­x•Ž—ê#æMß7Kf½Ë.ˆû/²«%6uíjëQÇ�ˆ sït:m;;;Öï÷ƒ2³DÆk[ƒHxVõ•UÎY? ü«Ì©þdŒÈÌ+‹–N§g­Õj‰ìc03p7%÷ ��† ‡C{þüybMO§S/ƒyssc———ŽÏ¯V«Ä™;àcl°§£/˜Ö¡’‹œ7±[�Ö$¥É.…ìùðÃíÃ?ô3ʹ÷†€C ëf¹\ú±+×××Öívíââ‰7ö‚} ž”@Ž#ªkX盃GÐc+@àØñÊuIÀ€àb¯ÐÊR௺®T*%d”ù¡ÿGŒyç‰�àe³Y«×ëÎjsƃÄ9+fæB€P¡ü¹7÷S£�ÉÁP%êb %U©Tlß3Ÿêõºe2�á,•ããcgQ¨­V˳yˆìxøð¡=|ø0A¾Q�ÅID D ‘2óùÜ3ƒ¨1{sscµZÍ FÝjµòï�j§sAÄG*•ò(úÑëõl8º32m8zvÔp8ô³¨T¸øcŒ¨›ù|nÝnצө×_,vvvfoÞ¼±óóóÄbˆc,B6vx�òâ}ÝUùð?J]�FèfÅkºÈ•´aüTùcàE‡…Ϫ#Š2Ó’z=¾# o¢Zø¬>k„ïa„ª³‹±§,?2¢F¬fš�F#Ëçó.z ³»´[6+Ýd‘ɳ³3k·Û>—étÚ•‘5óùÜ...l>Ÿ»1rttd¹\ÎF£‘•Ëe+—Ë�„3¶Ü·ÕjY¥R±n÷ÿ°÷.?ŽnWùÿc—ëâ²Ëå[UWU×éÛ9'ç%AI�2`!J@Ba€”‘#$¤Hˆ ‰ˆ ü H™ Fä2 (áN.}º«ëæòÝ.×ÅöwàßgÕãÝî„\øþÈo©ÕU.¿ï»ß½×^{­çYkí¶þýßÿ]£ÑHøÀ¢6÷d2QµZU©T c�2|8¶ÍfS«««sã@¦$ј°ð…B!úƒ�\­V#¢ðüùóTÕ.Û²ýÌ´Ežë®e[¶e[¶e[¶µ9Àõ*âÈíñEûN >có;x›‚ó“ɬ:�Rêá�ä!4']¼¬�ƒŽ<›{:¹²¶¶¶ð `�ÄæwttP�ç$úX8Øè@Œmô…w‘4Íî $~>€e øð¹tç�às•J¥9سÉ %SÂÏþ]äypšûq<×ûÄ;7�Ϊ0�øeéø¸?ãcëßCÞÜÿLe˜w`Žýž¼sÌ|¹ûÏ>>ÎÈ>óæráw?ùÃï¯T*ÚÙÙ‰2õøv>÷È_ê##C<Ë×*ä@*/Hçóå°Ð`;Ò,оV«éÙ³g:;;‹sK˜c¿–ëWWWÏ!#Ì}`÷½Y¯Þ"ý¬*p-_¯~Në�ëùŸ±`ìRbÙq+¢ÀÛív1SùBº+�FŸÉpa-Ñ7ŸIñþŽG8FXJy9?@^RT XfŒ=S„³�766´··˜Rªã�3ð?äÝ1_ã‹°tñd2‰1 C-ŸÏÏ�…îã‚~ò*.)ö‰œ¦: ýá¤*߇p"ÔAe‘Ó¿!ϬÍú‡\óþ¦ uÚ|m0^´ëëk u»]õz½¨,Ľ×××ã<(ÖÁ«‚ |M¹î`,<Û‰GÆßñ^d6]'>V>^dzÖ"ÄãzðbÇ"}Î îv»s¤¢gyaKŒÇã�@¾Sb�ï{°…Ë }[D¦³7^^^Æ?++wÙ³dš‚^^^ªßï¿”déÃ�sÞ7xð³gÏ´¾¾¤¸³gC`‘à°¹¹9—,‘'È­¯)_GŒ=ï ¾xvv¦ããcõû}µÛí8¶æƒü žœÍØ‚ç8@Ñ­T!C9á jåϼ£Zéß¹RàììLÝn7*`AÜ”J¥èûh4Š#Vü¸‰óósIš«LÕh4ôâÅ‹ (:�ŽŽ��U¯×CÖ ðè÷û*‹ªT*sú‚3Ìè³dd2³òjÈ{ƒcd>Ìÿùùy`Õw;;;zíµ×T¯×·ôë�7¯T*QÖ·T*Ex6;+EŒ,pΞ¤¹ ʪ"‡>?>g®O|pŒØm@Ö8X$:;‰ù líÆÆFx�à˜0ðt:#{{½žŠÅb‹0Nn·¤ö4x©·9ÒÈ7”Y|,b"+R₟6FÎSùçõM¬Æ€æü&€…�ÉÌÎÂÈæÖn¼bÜcÀ”’)C¿Q†ôm<ž�¥îi”‘»ÿ~dSIR¹\� ö#™Jœ___Çæëéc�5µZMÙì,£ŠZØ,ræc:�(�±A½�� u»]kooO¹\N/^¼ÐÓ§OuvvF×ÍÍMlo¼ñ†vvvbƒ`1Á²Í9ÔñÆXa1ŒÇ³2„[[[:88‚q2™Ðßï÷µµµ¥«««ØÀ|A¡ü‘5W*l~�sÔþýÅ_üE}ûÛߎë1`<ãÈïw{{«R©¤‡†èc�a�ollh8†âAiÀ§›�oÎì"×~ù|þ¥M�Í•û¹qå2 iëÆ…ï(˜ëëkíìì„’Éår‘Óï÷ã{¶˜ûûûªT*1lJÅbQÚÝÝU§Ó v›þ`œ{­o¢777aܵZ-Æ NÐ0¬óL&£½½½9%�‚gÃ&È7çl6«×^{- õÍÍMíïïG °$ ]^^ªÙl†“̽{÷ &S‘±Æ(E&—mÙ–mÙ–mÙ–mÙþ··EÀŸ§`·;´|æÀ‚ÛŒŠ^bŠª€¢G0"Y îHã 5?£D1�FÒ|´4}Ä7šL&aÇrž“— (( Almm©Ûí(…ƒ�€½].—#Ú¿NºË "ºÞƒA©ÊIå��>ø,Œ7ßII �ºõókWât² ? _ÇAj÷¼Žùïôƒ Ö\.¥ð±ã¹§—½GÎ\Æ\þR9s0ÞÇÇ�"ÿøŽßËÉ3ÿ>ã'Íg¡8ø/i.ã€ûø¤ë ÿüƒòð‘Cä•B|8I�§0—Àèýñõìà¯cCøøNB0vM:88P±XÔÑÑ‘šÍ¦Êå²677“7êv»á¯TX*•Ôjµ”ÉÌÎöðs�\æ¨8!Í|JÎÆÁG3[T„Ÿ@w€Ü!ÍvpâÝ3�ÔétŒ…ìv,-“ÉyÍzv€Ëè"™v2“{9ÉéY–¼o¯×ÓÅÅÅÉ"Ít)¸N Üó|Ç!noo£êM­VS¡Pˆ÷O× ãç™–`Ü�³Š&“I”T'º½½ ýÌz¶Œóþ\—[Ðá)1ç¿û—’ë)©â×øòõ Þã�Ù¼£ëR‡”¨ñL žã%²\÷ /úý¾ÎÎ΂4›õ1rìΟO¿Ùçü]\gƒ×€mº¸t˜êUä BÂñ=ß_ÐuàD¾'€a/Pšb ˆ½Öûê„u|àû\º¿ú¼zŒëöÎëëkµÛíÀå2™L`Ä�ÛÛÛÛQŽ ipª‹‹ ­¯¯ëþýûÚÙÙÑ`0Ћ/ÏE®ÈÜòÒ—T%ÂVà;dcA΂ë‹Å—‚]øÝßÛe9¥¯ÍfSÝnWWWW*—ËzóÍ7cOJצ�³Ÿ…I¶h6›�þ»LÐÿ““mmmE€r4çô¤Ï›ë|Ö,ýJƒ(Ò}ž>#kià6Ç�GÖÌÖÖ–Z­V�H”ïã|$žùOк�µ†œÀï +is¤BÊÏ(c&Ï�gRð(ŦÅBæÀJ7ÎYa§ÝGñpoŸG 0é�FC­V+H /50cƒÅ)àœ!Ï"€¤àpE7RäQ6…B!¢'œ, JB­X,sËF‰s}}­n·‡YIŠ>°S²�ɆáäÈÕÕÕH¦”YR0¥d5›MýË¿ü‹ÖÖÖttt¤ÑhYF�F#ØÅÅ…*•Šö÷÷Õëõæ>cr~~®££#mll¨ÓéèáÇ�Çzþüy:dh¡Ä.//•Ï烵fŽ8l–t:Œ9²9þùŸÿ9ä'“ÉÌeyd³ÙpÖ Íˆ€yòä‰>ñ‰OÄ¡�”#Ê€ÅOæÙååe8P××׺wïžêõz(øíímU*�œœDFI.—‹gþ#'ÈŒ/åé;?{„Y2¥RI£Ñ( @60O«'GÒÜ:! ˆq,—Ë¡P=¢q4©Z­ÆÁg777ªV«* zÿý÷•ËåT­Vƒ,eü¶··Cé 5�ÎHK�~ñÍÎH)Þ§­P(„[.—ƒǹvY÷è6m69œR/mAiGtJ¥R Ç›”ì~¿¯Z­6GÒu»ÝÐM†´Z­¦jµªÛÛÛÐ;d÷]\\hoo/6Óe[¶e[¶e[¶e[¶e›?÷À�«DyK�rÿ‡] ¸ˆŽ=é@ÁŠæÑÏ}!$°ýìòèE@@ öaótX8¡ã×@9Ð,)|®±YñckÜ¿p‚‡þ:q_,S°ßÁGÿœk½Ü÷ö€Ôýý}mmméììLçççê÷ûq8=%}<ª:}?§$S*?þwoæ�ÏÓ{s} V;åm)ä÷v9u¹L�hˆtbÎ�Œa~=Ú9m)¡%Ý•CÃçbm€Uð7²v‘ord,½Ê ëØw9rÒNRàãñ8HRäÞûÏ8­®ÎÎ5ª×ë:99ÑÙÙ™ö÷÷U*•BÎ\Ž®¯¯uyy©Z­XÑÉÉݯ)Vǵ<ÉAqîÍšæ:0'˜G|yô‹ã¼3}A¶ƒ�šÍ¦666Â/ÆgÈk£2 ø ¯›ëóùu9ÙÜÜŒ1ñì�Édvèûùù¹^¼x¤È8…?\ËuxËh4Òé驺Ýn`È2ç뛌úê„Y———�{à8²Ï{¶3©ì¦cãråkÚu÷I3¼|l]/ø}Á]«I³ágù|>öÎb±¨L&øòÆÏÅb1Æ,üü-ÝxÆÁ �”@rŒYåYdœ@ íïï«V«…®#ºR©¨^¯y^,#áœTšaY•JEÇÇÇѧlvVÚ ÌÜ=Óívc¾ÈÆÿ—ît[©T }ÇÚA¦R‚’±#Ðc4éääDjµZj6›ÊçózôèQœKÎûr½'� ?n§1Æ$ ‡Ãø> ¼'gÑO_k©HmOúƒ>dm»,¸ì{{‚W©r]¼¶¶8/å/..Ôï÷C¶8£ðñãǪT*šL&ñw'%Ñ)>^Ò¼n¤Í‘FÓé42&èDxø¬×ë©ÕjÅAc®(\Yp�1¼ ‘T 8Q@D?9ÓÉC¿0øy“Á"ƒMËf³q…Äß1ZÈúÁ€�=•BãAú6¥PH™Ì]±;”¼C舛L&‘¶ ðéÅØ‘NÈF¸º:; ´T*…Ò* ‘æ\©T´»»5G%éððPãñXÇÇǺ¸¸ÐêêªÞ{ï=µZ-]\\„â‘©ßôÝ£ 2™L:ÌY±XŒ  étªF£YR¤F2?÷ïßW&3+#¶³³£G�… 3Ÿ(0ÚÅbñ¥ƒÇ¨GZ©T‚LÁh"K‹ˆý~?Φúð‡?F †.QTd×@˜�dzó—Þyç½õÖ[1gü­R©hss3ŒPJF<~ü8ή©V«º¼¼Œó§ÎÏϵ±±¡^¯7·c0qv ãÞ½{%ÅfAÖX¹\ÅFV² Âúb­¹ÃgD+L&“8@§ Ò¥Z­£M‘Qæl:�†Ãç:eÍææ›QjX¹Òg~[d¤×ëኃá‘Ò]iM¢ÓnooÕétæ þáp%å8³‰ƒò¸ò‡.ÊdfYM褣££ˆT;::ŠM´ßïÇzq³lËö³ØX³l¤…;S˶l˶l˶l¯jæ9€„ŸñªˆLéÎQO?˜u»Ò}Ø´œ‡E;iãβG…ãŸñ³G¸* àÃ:P àͽ±U=zÚ«wL&“´[YYQ·Û�‹„öèiÞ_ºÏ7¯Ò±ˆ¬à·uÀK#dy¦�?cPçÄ•¤ðÓµ»»«\.Qg2™ˆX–×Ó‡T|¾é ¾2Ÿ{ßnØá=½Ÿƒ:\ïcGKÉ ¿Þ}ÿÑ5~/ÿÙ‰€^ýÓ1qÛ ÉÉo"–‰&óªnóq ßït:ñ}üjÖ…û;p{ÅY‘u€rˆT{Þ�±,—˺wïžž>}„ÃÎÎÎ\Æi^+l IDATëpœ†ª(777ÐÓG*nàËú¹[¬gäÍÏ›ðrX|Ç×6zß»T*E90ŽÀö{ŽF#µZ-µZ-ÌU“q�烩@ NTd³wÅûq.+++eOåüøÑh¤v»­ëëk={ö,0Çá'ú˜‹ÉdÚw»]u»]�žžF°h¥R L†>§Y�™`hèÎéšL&*—Ë¡�Á `ŽÁ9�L÷£ôs'@!ôÑC®;ÓõžêŸEzÍŸëz›¾{àã’’ì‹æÓÇYAΘ?¯%õï<ТßïG&ÆîîîKë:­ŒCóì’8÷æcÎøú~êúÛǛ௜¶Fæ-X-Ø/ýEfÚív¬Ùµµµ VWWç²f�S*Êø~åAx¶©‚ü1¯ô=Ézt@G"ç<ÐÞÞ^¬QÎàÞÞÞÖ½{÷;“"( ÑhDâÃî>}Ø›4K–¨V«Q~‘€{°VŸ‡ííí }Ñ�kkkªÕjsd™Ÿ~½ÐKwÕˆƒ�ž?®‹‹ u:u»]½ýöÛzë­·tÿþýÖ†ìC~Áý= À×2ïÁìsàߨ‰[[[±o9™ã¤‘¯—Cîçk;Õ-È c†…T£ßìçìWÌq£ÑP·ÛU³ÙÔx<Öææ¦vvvtÿþ}=xð@‡‡‡QʰÙlªT*Ÿ`s:iÄg$ x›#�è˜GÐ) &`0EÄÂc"ÈÂp`w:�FM=›#2°®�$è÷ûA´@Â8›Ç‚ØÜÜ ¢‡ìƒ››Ù¹(çç纾¾ÖÇç&0y:�QF?777cS$²‹ô/”áÕÕ•z½Þ\¦QÔleCE8«Õj0ÆnÌ3vår9&2ŸÏ«ÛíF-ÖÕÕUU*U*mmm…@Sw“¾|ô£Õ‹/ôþûïëìì, ‹Ÿ¾²²¢ÃÃCU«Õ9e|}S¤ ý�ÇÚßß×ÞÞ^ÚÚÚ òcɉ�@‘fl>™fkkkúÄ'>¡l6Ê-ŸÏÇAmœÝn7æš>]\\H’^ýõ0nÝ`¡`l0öƒÁ@ûûûzüø±¾ûÝïj?NÊèª^¯ë½÷Þ %ÿæ›oÆ=qˆˆnX[[Óááa(Dæ¿×ëEùŒhÖÙlÈõt:U½^W¿ßWµZÕÆÆ†F£‘Ž��µµµFõKìJ|'Wɼ(‹î¬F¿ìË4xÒ}U'¶ðÙý{ò9ó@óˆi'ª¤ÇÇü‡D"È`‰÷ð8^BÅÁBüPQiøþNê𳃗N~0~ø-¿¦¦G ;¨ìŒûëüž‚Í|ß%––©Œ;0å¾SJÚ¥€v ûã hÀL‡õC'€„'à!óãD�—er’”1 ˜–2‹>Æ)a÷ª5�Z¯×U­VÕn·Õl6uppë[YâÜ^p)‚ù¨R`îó„ÍK )¤>¤ƒ·øª�¬ò¾N„-šóL&gmSjˆÈwÇLu:=}úT»»»sg�û¢ÝÞÞªÛíFp8b­V+ΙÎårzüøñ©À\çr¹Àå¶¶¶æ²ÐÈ."½ï¸‰Ë“¯GýEëöUÍÿ À>áAP§kÛñ_ÞœœrÝÇó]G{–�¯?×NÞº²Në´Ÿi .x[«Õzi�v=ôª5Ì8ùžÄùøÑ<bQ.:ÑïC�7 ]ïY»�¶�œiÀ9x>ï^MéU—%oŸ3æ�9Kõš¤(=Îë`°N$pL‹“ è?‚ì§ÓY�g 1þ¬íýýý9½Â¾:™L"³Ï ·� °Ð”p#àŸ3ÄÇãqTÒJ×24uqq¡gÏžéôô4*ˆ½ùæ›zòä‰Ö××£T§þÜ—dI‡�“SÑ ûò‰¬ôy³ÙÔÚÚš677çä•êyŸSÖYZn××0ßeLá<Ó�ï0Öù|^ãñXÍfSëëëÚÙÙÑÁÁ�ööö‹l6›úîw¿«wß}WgggúèG?ªÄØ{À>cÈgÌ1mŽ4¤f 666" k:½; ÅÌw|aä²P •´^¯塸¦Ùl†A 0O­cž‡òDÈŒbŒS7ŽRÃŽ9õ¯ÿú¯úÞ÷¾'Izðà�jµZ€ø^”se0¬<¥ £ãݬ3ß�ìáÞª×ë’åß$EFã ëp�@Ó'¢(KöËËK]^^É·½½­ƒƒ …¨Í ¹iÄõ¤z{¶Æ!‚5™L´³³ÊÉ•,‘*È¥=EÏË H9ˆ�Ƽó=Qã3cÎb„T`±#ÏQH�œ95ñ¡¼Þææf�5D,‘Z�ÏçãLŸíííP¸Ì'cÍF¹±±Ž D¤ dd^½^�´ôµµµp2÷÷÷#Ú«ßï‡ÃËFMMQrÖ«¤(çÑ+È ;¯D�xy<ÆÂÇ<�¨@—‘BD¥üœtdÝð\6]È+IqFÖÙÙY8¾©IšËò[dÐ!³dú»oll¨Z­†|#'ô=6�βé(o¹´ººªN§£b±¨„>ðH¾eyºeûYn>�=Ò“'Oâó§OŸ†¾’´Ð _¶e[¶e[¶eKÛ"]ZœEÄ÷EhúuŒIz©Ì‘ŸsI”=gÿH3¿�ó8ðTMKáa?{óè`€t¢¢‡ I0S`ÁÁCˆr°Žß=úÝ£áÝGv’ÍKÌcG3Žf;˜@ÃØò;¾ïã•F�†NOOõÎ;ïøîeŸ�áæ’ùB>|\RÙpPˆ 2Þ“wö3N<ÈËßE²ç×8È™^ï ¡ÿ�Ÿ= Ýçhi儆ˉBúzrß¹õR;r‚%d2™øòO ?±Ïñ¬?‘…~¿gÄ:ÀíëÖe�wK···µ»»«÷Þ{Oív[�Ng®J„GòßÞÞÎ�õ!9»ìçÝcñ÷Ç'fî €ÝeLÈVbœ ˜%`—u“ê…/^¨×ë©P(D6˜ïÊœ‚ 9ŸFÜ£‹Wü_îM_0¥^¯�®×××zþü¹=z4—õ”ë|Þn·urrQï�FC�NG�NG———QˆqòhøL&3W.Œ€tÏ€òL¸B¡ð‘šóÓét.32pS@ßÿùš&�Ypb"]é=SbeÑ5\ç䉤¤QzO×)Œ£ëO¿úÏ hÇø¨Êäû72Çý|¬|?CFü]xwÖ¿’;!äú€qLÀa}ßFÆyd‰0ˆ'Ú<ðÀ+0ñ\ð?(Ö·ï)©À½}\xw®'YÌ,Ðc¼+¥]},À³s¹\à™N8ðs&“‰Œ&H tdª×K®e<Àî=³ðúúZ•JEkkkjµZº½½ ýÅžŽ\ûØ ‡C���éøøXÍf3’txxÉÌÍååedÉ‚Ñ£ïØŸ$E =zb<G%%Ê|Rö�qL÷m_K®G}íòl×ë쩾/ø½üè`?†ƒy# ‰àö��­¯¯«Z­ª^¯«R©huuUÝnW�FCçççúþ÷¿¯££#]__ëø@ØnÒ'�RLç%ÒˆŒ„Ä˵‰Â$‘UR,#�Af3ÅXÃ0ä§sÃáP§§§ñâI.wW‘h06 ¯Ù< bƒñA@y‡Ã˜h€õV«¥³³3Iš�»¥R)&¢…MC“ÿIuŸbœ8sˆƒ÷ØÔ0 |eCãÀÕ|>“Çæóy‹Åzþ6™LT­V5�Nc¾`dY�œÓ’Éd"e}}]»»»Á:ãì8YëÎ=$EŠ2짤øN­VÓááaœÓT­Vç2¬HƒDÀ6ý´ðíímDï9 ŒaÂéõzÁ0s_¢¥p@(•à¥éÊeI�GæcòÙ³g’eÒ0< EH_çœ2àÒR‰(bO¹÷H ï�CÁ”ËåT«Õ4Õn·ƒÌáÊr¹ç% ƒ s!ê0þˆæƒ´Bæq v<»�õE” r0�Þ Ë÷!})çÇyV(Bdù€ Ñ`“ƒ8¤6*+‘Ýn76 ßà[Òt!ú˜wXH$Ö€—<�ÇêõzQO5ŸÏ«\.Ï­Êø¹³*)î¹lËö³ÚØw>õ©OEÉN76<`cÙ–mÙ–mٖ퇵4sGš¶ˆpŸ!�à–î27<Ø »� <Û¤»Ò0ž•ã%œ°#G�Ã�LvÀÉû‹=`•E\¤H0‚ï°‘‚ îМ´¢ìùãwy_|ÏOAL'|1ü¸§OŸªÝnë;ßùŽ*•Šr¹ÜKÁgø&Ì¥é’æÀ5úÀ8:PNŸÒÒnô?�1ä`¥Û9ü¦óÌxùýÒ(zÇ5|-8I—+>.)ašÚ`iŸñ÷ñÈ|•œ8ÁÇórB¬d#yé$v]®�óÁ` ‹‹‹íX‹`̲砤Èíí­ŠÅ¢vwwõþûïk0DÅ‘��"(—,Nd>™Ö†ŸŽ@ð¤ÏïîÃøƒ8p F…ïÉ™Œ-À|6›U³ÙÔ`0ˆó¸ÁÒ<›Êñ|Z'_GZ¬¢Ø‘KôÙ€�``"ƒÁ ‚z¯¯¯uvv¦““ …²õµé˜ÖÉɉÞ}÷] ƒx ´Šÿ Îâ`û¢½� (0Çñx¬R©¤QZA(%7Rr×õ‡ë ߟœ@v�4rBÎ×*2ùƒ|¤”Xöý†~ƒS!�þþo‘NX´®\÷ø5¾†œXlgÐ_0&Ÿ³ôž®ƒŒf|œpdÏC\w:±Ë÷]'C³vY·Nö1àÂÜ›½Êïçz݉4ß“ÀºÀZÙ£=ÐÂçRÝ’ÉÌ‚õ]_±¦�ôJ÷0uœ;Ï$¥js ^FÐ:x—Û R€wºþJ OìžN§s6 ‚¼à¾Nˆ¸ÝÃgŒI&“Q«ÕÒóçÏõâÅ‹�‹z½®}èC�aólpaðzö*?›,ŸÏëüü\+++�ÓSmëôôT++wç6Ño·süý½ßN˜¥vÁÈ ’?Õ üŽ^ñ£r&“I�”kkksÇÑ�Auyy©óós=}úTOŸ>U«Õ ” Ui_]>=¸)ms¤M&“(¥Fúg§°xËåò\i3˜]6 i7d!0*•Š†Ã¡šÍ¦&“Y¦ @ìx<ÖÞÞ^DU@xг³}“§Ÿyé/ÒÙ\ÁHŠ4lH€x�À!;Ç1²'HÌf³q Ï®®®j0„@±ÙC¦ù‚” ºR©Ä¡c”Üëõzj·Ûax-YJ»9ÁÌà ôŠ3d^\^^jkkkÜG(777µ»»«Z­¦B¡ ››› œ�ÅÈCÙTÝ)£v#‹¢¡P(¨ÝnÏ-hgÜY¨(Kœ7ª(GV.—#]r<ÙÒét¢?™L&ˆÄÇ�Çõœ�…ü¬¬¬Ä‘ríãAÙ;H@7ôH÷'ɨ†ñxv�2ÅùQ ÄÆ°²²‡IB°L§Ó XØèQìy…’ôKÖ½—b$Ðdw&“‰òù¼vwwÃÀöìÄËËKõz½0L3™Ù9YÔKžN§ªÕj±^©!íd#¤†­oèžYU,çY7ÄÈ.‘‚$bÃá»ëëëzò䉪Õjd¯ùxaät:�pÂ(õ×jµ^R¾Ë¶l?+Í $I±¶0*<ƒpÙ–mÙ–mÙ–í‡5·ÝOô¶O¿ãDIJ(ÝÜÌ·žLfçh*Êàûø³±{é'(©F½¬6 ¶2¶¦G5ãbëã'§¼ýNÄx -l`ìZ|ðÑh¤­­­ð1ð;0åĆäö{;°áQ©éπЀ_ø%€èøÄÃáp®L»ƒŠ �ïèþ££øØð›››/ô€x’¢äöt:Õùùù©âÍß¼MÉ——½T^‘ ž??Õ8wB Ç¼ó5•ö…ÏÁ(ïï> òê™'¬"Ù©˜Âø±vè�Ÿ}œ®gdöêêJ�N'Jàóžø¨~ÎkDÒÖ1�Nã�vðªn·÷ãÙ2”/•Jà ëãfˆËÒ�áøxó:¿¼Á�`ø�<ÏÆ—ßâÌ‘���8Š�L'žé3ÏqÒÅå–ñ¦üëÆqôc6› šs7ÀºÝ®ÎÏÏU¯×C‡p/_Üãüü<Êß3/Ž1RFº#\_"CÝnwŽ´ô V0 0I¸ûý~œ™½½½=‡Ù-Zß©^f�ÐO2×666eMK Œ&%7\ß0W¾o¸ß…^Y™ àû˜Ïoªwüwo>fŒ¯ï[ü£Ï”ðÿ¢+XŸ()y•‚Ðࡾ—±÷ø5޽¦kΉ-'E Zf_ö2Žþ{ö)D)?ûzq”ûº^wŒ~’¼€r�Eìs>÷Óé4ú�n噼/X1U’J¥’ƒÁ\%ý ‡ñ‡à$8›³ÅÐuÌÙGårY£Ñ(Ö-ú�ï¸>dý’MšËåT­VÕl6CÆúý~Øœå{÷íí­šÍ¦ŽŽŽÔh4‚<ÙÝÝÕÛo¿�`øèDIsçUº=²¹¹úŠñnµZAÈ�`âÉØNêw:�¹¬_þ‡|õuÀÚ`l<»Íûê$+rS(â¸ú !Z,U¯×ç0ä/^è½÷ÞÓ‹/tzzªÁ` |>¯½½=èñãÇAºù;8YDØ7½Í‘Fÿöoÿ¦jµœ-B¹&&$ŸÏ«R©hee%2,xÁÉdò’€¢l0ÜP*•JÚÙÙ ÃïððP+++}À™E¤£,`{½^l”(êºá“ÉÌ"Â`‚ïÝ»çíPÛ–Mƒ…ÉÂ$B ¥d ×ƒØø%àQŒ#‚ˆ‘Œ2-•J¡ôXÄ®œ766Ôï÷uvv™&mK8Iív;ží‡“¹b„¼pâæòòR•J%Ò’¥»Œ#6+Î3ˆšL&º¸¸¶"•"¤[µZ 2�Ïé2…aHy6æŽE],ƒpðHB6k�e�R‹¥ �Á"ÍÊœA|¹ñ€,Ax‹Å¹3{ +¤„}ð ?j±�ˆbœE »íŒO!ç §Ï'cÁ½$EIlïG.—‹Ì€­ÕÕÕ¹2è̳“ƒæº|x&†¿§B1Ì»¤é$•ˆQϼzpòãã‡<ùüx´=?;áä×§@cwqqßqÂÀï‹ÜAÔ …8Ç•±çz|hÇ}�)_)h–²è{¾Žù®W&qÿ¸^¯GÙÇ*ŸÏÏ�ËÈ•AZyG¸ñ©ÑM<ÿŸj$~愓삱¦À¬\œÄ(”¤ããã8ÓØÏ»æž`9Ž… Û�5JAÒO8‘{tŽW‘ô’sÙ�Ç1&È:�ÔÜë¯PâÎפ/Õoh`�€¸`(Ãá0ªÛðÌB¡ R©kÜu~lîk…=%õq˜cæDë‘>¸žsyÛ@·ó7ô(ãêýñµžê!¿Æƒ�EÞ“yä;ܹ¥/i_ýž� ‘Ey/‚êÑ/Èëˆ>°gr}JŽ#“¾÷¦û:{:½æ™NŒ/ïê™3Ò»⹌}"¨œ9âì3ôg·ÛÕh4R¹\Öææ¦šÍfà­¬_dÎe…û”Mð1û}CŽý 2x ?»Ý®¶¶¶T.—#û˳å�c‚È - :88ˆcLàæûœïçýÑÆ¬<ÙÉËn·•²è“¯mÆÄ @ö΋‹ ]\\Äyg™LF>Ô[o½¥íííÈhÊd2È_­VÕh4Bç Wœ ñ!'fÁÂ}ßô}Rr üÛ‚½À3Ô|- Ͼ‡/ú‡>ãÅ~¤‚—¯�étçiv:]\\èääDßÿþ÷õìÙ³Ø/_{í5=|øP;;;ÚÙÙÑþþ~œÃöÉÏ~°¾¾®­­­9~‡6GQb­T*)—ËEêƒ;Ó*ÝEFø"w%àJ‡�¿×ë…�¸²‘D 0Æ#L.ÙÍfS¥R)‡oüóÉrÁÉf³zðàAÇÛÛÛs›78DDgp> Q^5—Ë…‰Õï÷µµµ0—f¥ òE�!2�N#ÌYZ74ýóét–=ÒjµÂxbñCÊñNœS�A¼{vP³ÙÔx<ŽH²Édv–ó€à{i0J~At°PPÊôÇI#H,æåCæ�G§@ªÜÞÞêôô46w¸·�ŒN,Êg}}]ƒÁ@µZMÓé,Êç´^¯‡B�0“47þ� Ì~D@$¥äŸy$ÊÊ£¯ i8ã‰9B‰A÷ûýˆ¤b¾¦Ói°ÚÈ!Ê‘’Š8NÈ1ŠŒ³Î¤»C1p0˜Ù0Ýie BJñ,2½Pl’æ2¸�IÏ‚ôH�^¯k ™c¼¦ÓYt�qlÔ­VK½^/d—w…0£¬a«ÕÒÎÎŽ�†šÍ¦ªÕj¼Y�NÀ-Û²ý8Í�9äUº3¼Y_D6ºñ/½|Èê�ÒÜ¡àwÿŸýÖ÷ÝŸäYî$Ñõ?#<‚lÙ–mÙ–mÙþç6m–²ÙlØkÒ�?‰mçû`„>Ø‹Ps�õõõ¹2ãÆJ¿¼oøS€=øg4aC{À$H ä`/»_Éý¼ÏØ�ôÃAOÏ¢pÒš’Q’"p0�ȧy`&ýÔ"8 ;ÛÏ+N llqƇ{Ñ_þñîîçî¸?Èø(KwFF£Qø)Ò]$4>~J¿ß™ã]=�‘wñhaþŽÿÂÜ Œ!}àûøB©ýä˜à¼º?có¥`/÷ÄVt"VºóƒˆZ&Íåϳ~l#;õ³Ó, Jøu›Ì�pìÕ4“ÀƒŸ´”댤V«éôôTÍf3V—-¾ï¸W q Û³[Çt½ð.S®=F¿oooƒæÞ¼ãëï„ ‡O�Ž¡_ÌïËX¸ÌºÎdͱ¶\^釗r¤ïŒ™“ôÌ3sŽ_ŒnlDǂ݀ãñºd���Íé¯NDc];Á3‘%Ÿæ dÑß�|±”Èv}æ™#DÎ¥¤>û�gÊ9iâ�¨Nè¦<óäY`;ùíòî@·ë/'*'“I¼#ô‘±§�.`à�ÈÂ"b/ÝÛéäÈEJ¡ÏØ“� óyçY®ÿ¦Óidìúø#OàªÒÝÑ&¬+²XÈôá�7Mu«g/úQ,àF®Ç§Óid˜´Ûm�ŸŸGƨ'98¦ÍxM&���éñãÇzøð¡ŽŽŽ"ë2†àälÙ»†DƒtE®.//Õétâ<÷R©kÇ8;i²¾¾®óósÅ9FœiþðáC=yò$ÞËñTˆº³³³9ò� Ž�Îò’£ÈXðíí­Úív”}C?5›Í&w]ç:Ùud*“¬1ÿ,%�°_È$õ (äÏQ%:==Õ‹/âü§ñxV±íððP<ÐãÇ�µ¹¹©õõu•J%5�—ø'ϦÓY`>I(Þæ�ÌŸû¹ŸSµZ�—ã¦Îh#ŒÎÂ¥BÊä�MáŠÀ7 !“šÉd¢4Æ Œ¢"»€H~Øl7š0‚Ü`s…Ȧ|xx8w¾ J†çijù‘"Ìù-L0‘<ž™€O¤"«««ÚÚÚ ¶�ñ#-åèDJš¹�Ü£ÿ¤œ£ˆQBÎ~Bp €€ê(sÞË熅à!Ï€¬cìP\ù|>ˆ gH¤l6ÙÜ“EçF ³R©D& ¥ûnooõ�ï|GãñXõz=Æå^«ÕÔn·£Ì™I�’8,^ö g’¾Ó²Ä‚#ë%ÉܺCá›2ŸSÒ‘¹B®Øœ*•JDr0î¾é3ßœ—E4QE<‹±eþ‰DðMoee–1FVïÎ;™Äç*8m8Ò�*l¼ôÇ�r7ÜVWWU*•bü<*ÓfÃG–···ƒt£<¤;¬ív[½^/œH2whX dBü!ÍfSÏŸ?�p2 WWWã|)6J"§$E©HH”?ø²-Û�ÛœÜDÿ»ÃÏáŽ·Ñ IDAT^öTºÛÓ~Z$ z#5$~šÍ‰ F^•Á´ÈY¶e[¶e[¶ÿÙÍ}B'B°q¥;Áûø^êC`;Ù‚]Ç>á6:Ñ¡ØÛTDx×:xE`vD››› ¹â ¾Gö;Àë�VøÒ]–•_KÀï�’¾'âç9èè ïÆÏëëësA“�cÛÛÛ‡Êdf¥æñÛyG' ʼZ¶3þ�b¾�;9@¡ŸO�_ƒ½=�Ôl6ã\·�°¿9ÿ$“ÉÄy°’âdÊßÁ³ÜÖB6ð·¾0GþÒyHçŸß�K´tlü'R\¾+ÖãâÙVNø=¹O n:X'Ý•=‚8òëÒû1¶éÿ¬EøñL¹�÷1¡?È’Ô“:ô�ó!ð�!1Üv¤?)ÁçsŸÍÎÊQuçøøXÙl6‚3‡Ãa�=øŠ‹ÆÅçŽuI´=ø~/zÀ \ÆÀõ”—§t,�ÈzÔ½äøûèIô(YAà{ø±"{J×Ûæ®ëœ¤áû”¥”]³ÙŒ,„ÓÓS­¯¯ëÁƒQjb�@RðÆ×ß×e�áÁ ÞRÿÉ× ßw Ôuqz�”0v¹r¹Kõ!ÿ­­TG¤òåÁ·`=~?æ#%º yÒþ"«èBp_Ï0b,¤»j5\¼¶¶AÚèö*/ ކl§càc†Œ:IÅüûÜ8à&[("cŽknooçÎB'AP>þ\ù|^ÕjU­V+ôW·ÛU­VS&3ˆAG�b§8± ÞE°òŒ¬±6Áž'¤¬]>Ÿ� ?0Z0γ³3íîîjkk+ö?2|ÀH½ºÁüÌdá‹/æÎÊdfÉ%” DÖëõ°¸?2vŽÙívuvvç�e³Y=|øP÷ïß�³Ò}^ÀN)W'ÝaöŒcŒîäo”Úã_¥RÑùù¹ÎÎδ¶¶¦R©zÓƒŠ\‡¸­±h½¦zÀu\*Ÿ¾ŽÁlƒ�ž>}ª��Õjµ( Ùl6Õh4ô½ï}Oçççsi�1I�aƇìµáp¥¼P†ÍfSkkkQF�ˆR1‰â¡ô ïHZ& �R{ù|^ÅbQ’‚¬¢Þ,tDŸát‘ÉÅï=Æ&I ݃ƒ•J%•ËeµÛí`w=:ÁEÿÉýqTC'¡ RS”·3Ã8¯.ž±ã.Ì?™^nà¡øŒ÷x¾ººR³ÙŒ &">Øà¶¶¶¢Žj¹\ŽÍ™ˆ wÚqäPîD5°!C,¢cx2Cÿ$…Ó�ž`}’ýEJ" p pL|#Çà,•JñNlÚ¤Ž¡¶²2;÷l_···ÚÞÞV­V G#Aš¯ý¾lËö£6Œ�8K[¥RѯýÚ¯…Lýë_�lºŸ´M§SíïïëOÿôOçö¥ÿ®Æû9¨õªæàÐOã]—mÙ–mÙ–í¿¿9ævªƒÅ¦y‰*ìW"°Û’à.ß³¼Ä>#AIºÂ@Iw NFHw ß!8˃Ý<³Â£Ñ½\�û\ÒË@¾?:pá{!¾!c‹ÿA 'íxsr?mkk+‚²ðµð+ðç}|%E&‡4OA̘1¶)‘Á¼aË3.D´“ù�ß !€ŒŒÇcµÛíðyÏÎÎ"B™±ð±tùãoNžxr)Ýeó¤òëòž‚NÝŸ®�E TJb¥ëÉ£ªooouyyg]ÑÏE@µƒã.¿NÜà;9iäïã µËUú;ãPʬ­­…/†?ÌÚušwߨØÐöövÄÞívãü_·ƒù€õ€%ùü0éøt;ŽÃ3<û„û¤¤á¢†,AÜ\__«Ûíª×ë©R©D5Ï째½�iàs†oÏ{#¼úwy×�Ì3@8@¦ÓÙ‘ à5"ã‹#`,à2ÿU®¬¬¼D;y½²²eènnnôâÅ ½xñ"ÓÝÝ]=zô(äšNß <(ÛI�tÍHz ˜÷–’9¾§¸u¬ÇqÖ«HÿÛž]>ý;þ3÷ä½�Œås×áéY=‹úÌ}½*Uªß<{ÃÇÒƒ»!\‘göLd›€]ˆ ~÷±ã½Cž�,c'¸Lùy"„gs’ IƒÁ Ž™@o°¿€�ƒå ‡C ‡ÃÈÐ]]] òhIè*œí ,Íg@z"÷G§_žÙçk�ÒŽÓéìÌðÝÝÝÀÈÏÏÏÕn·ç²úÀáÙ×½d%—99ÑÓ§Oµ»»«B¡ v»çg±ÉK³ ˜õÃF‹¡�ƒ‡!�|à<ø;A²¸B„$J¿ÕjéææF�N'Ö×ÙÙ™ÎÎÎbî)'wuu¥‡FJªG ¨ ØX.ß=ŒÓ`0ˆèÞ ‡M²4—Ë©^¯‡a|uu¥V«Ñ�lX\‹Á‹A½²²¢r¹¬jµ}â: Æ 'ÃÓ�ùÎ2ÓhÙ~’†Þ$páóŸÿ¼~ã7~#ö½étªíím}ò“ŸŒk¾ò•¯èw~çw~ªd {ÒgK�jöðE �ˆ Í×,_¶e[¶e[¶ÿ™Íý9çP ûÏ"ÀŒï»�}ˆMε¾bÃáÛ²ß.û}ŸÁ7åŒö#|e½´†�âçáø{Òw”äï¹\.À¾ëóî§} ™à ˆ׫ `X­VÐ&‹€+À/®c‰ª¦M&³ÌliÆÛ� ï?à�Ûáøu�NG¹\NÝnw®" ×××Q↠%Øçœ»ë„–ËW:Æ‹ÞT>�·é¸¦MJ¤xû¯Øm¾N�Y@3ž‡ßãÕ8QÞ/ÆÂ 5Ÿ/H#äÝÁñW½Gú<�ö÷¹wÞFÖ«Û„›–Ëeõz=]\\èàà@•Jå¥÷ñçáO"_dÒ¤º'ý?¼Õj.™¼~~1÷ûbl°o]ðc™Ÿ^¯§^¯§ëëë8gØ QǬ³} �\öR{.‹¬=¾–’Ž÷ÚÚìŒa×�à^èB®IíwÇéÿ{ÖSªÛÀéŽ��5�utt¤ÓÓÓ9Ì�¾#¯èQÆ7%6ɤËjºö}oñ{z5‡tnYwNjp-ßçoþœE{_ª xNšÕ”î…éó�Æß+ü8yȼ¦Ïäš­­-moo&³hl\‡s­D¬®®ªR©ÌÉ3º\ïï°H_ñ®>?»ÒüÙ2©Nv_Óûy¾Žêö ™>œá ßëõ”Ïçµ··ŸqöwZ†p2¹;Þq$2j §y}AîÙÃÐ èTÞ‹LC°60Tî™ÍfU­VÕn·£<‰ `Ë.Ã)Ž9�¢%ã�@°÷xÅbQ¥RIãñX�þ?bœ½–³‹ºÝ®J¥’õäÉíííéÞ½{*—Ë�oc[òLç<ó½HЫöó9ÒÈY`"¼Æ©¤ 0x1J?¡\A²80×ÖÖ"ªÀ7#Œ=¯ 8™L¢Î©¤¹Í’H†ü…eå3¯�� •Ëå &“‰:�Î\„˜ŸÓ°ŽAà™ ,dØr²˜¨/Ýï÷ãÓéTÍf3€öÍÍMD>ÝÜܨÙlFíAßx7´ºa„a‘1Ž)‡7�"Ëj0¨Z­ªT*-dÔ%ÉÏ777Á83çDå¸# ÈQ (bÎ:º¾¾B‹y'•{2™èää$ŒææŒÂìv»ÊçóÑßl6%Å�-jT"ÜËãiÔ¼§ƒÁ ÒÏÓ¨<ƃ1ãœÍíõzsÊ�t@k –}4©Õj)“Éè?ÿó?•Ífµ··)³¬M7F�Uˆ">Gé±Ö ²Pr¾ÎP²�hD/ð}6p wœ¬f³©V«¥r¹¬ÝÝ]���…±Y,5 ˜E>ù+M gÞÙXܨfŒ‹ÅblžDK”J¥8 �wÃ`Ax9K”·ë( M !6Vdœõè|޼b° #}=-Û²ý8 ½ô‘�|DßøÆ7tppðyƒá�úíßþm­®®êw÷wçö¹Ÿ¤¹qôßE¹3‹QöÙÏ~6óô»ÙlV_ýêW#•Ý×÷²-Û²-Û²ýÏlصi$±ûo8éÆ9XÆÞ趜ߛ¨\À w ƒ�òùü\é'°M¥;`ÊI%¯háåp¤»MÏZrâŠï8ïû«—ØñHiìZ|.Y|¤´™“fœgŠ�ïgÔbñ€&÷Y …Bœ)앨@A_¨Z`å !ûºG‚óßqÀ¿R  ykk+€8|A0@€düÊ‘‹Å(#�Ú )x›‚“ôÁÁm@&é."œ¹JíŽ?ÏNÁ&—?šÿ�yw0˜Ïé×¢’MÜDZ†´�ø:â.#‡ÈB ÎsúCSÝÁÛt|üÝS܈€¼b±¨��5›M���ÅZp�<›Í6‚Ÿ‰ON5~æÚT£/..Âä‡�oàK3NÜ+¾O—+²~$ �Š+DŒSIÆc™³”ˆK‰a—÷½¹'²è`+åŸÀº¦ÓYP§W)#¤Œ�W {p"ÝñF'�æONNôî»ïj<«Õj@= ‚¬F&üþà>.�¾O8�•®çt­ùÜ9¹�3)pìA>߬IÖgŠ«ºÌ½ª9v²h^�ÎágÆÌ+ ‹ÅÀ¸>Œ³ÕjE¦ø({ïIð¨ßl}mmM÷îÝ‹q[__�y@wQÁ½;ãXŽx zðà�Þ|óMíïïÏÙ¬'îçv�Ë´¯?JêQ*0“ÉŽëZ›››‘ áeÝÖC¦¼t}Z´ÞR»Ïu‰Ë®t—±½½­ýý}•J%íííéüü\�FC+++a·íïïë#ùˆÞxã U*•àYhè5öfä ; ~…¹^Dª¥vÈiäà(õŒÙ°ü`&=“áŠåãõVý<¾ssÑJ<ÇA/ˆ /õx}yy©áp  0›ÍÆß00~ÉèÌ'-�E‘Ífç…‡ÓÁ¸ ƒ ‘(å–Ëå¢ä—$���ŦÕh4bBH¿£Ö%Z(„ÅNˆ!Iaó^…Ba®n-ýãw”À·—Ë"“*›ÍF6÷eá“­C*)„àÎÎŽööötuusèÑÞ¤(“-†€O§ÓÈVaÁ‘Hÿ1þn·«µµµ¹C+!¹ÜP™L&sïá58QrDðxiº\nv†M¿ßdQe2™ ”$Åx@PÑHOÙ1N6Aª…ȦKy»÷Þ{/êŠ~ìc ’�k�”ól!dÔ‰SÖïíåáØÄ¿\.rÃØaðÞÞÎìT*¡@y6ä!†,å) LXó¼3[ºæÙ€Yûdò1þÁ²!Øn·c“Fê`*²ä©–Œríe œÔB¶WWWC‡°yaÈ£ã0�0r�ã%ˆý¿§¹‚N¤ýÁü�~ù—yœJÎÚïÿþïëÅ‹ñû믿®¿ù›¿ÑáááKN¹tWZAº;°ósŸûœ.//õùÏ~î»Ò«£]^Õ~˜cÿÓ$Fyç_ø…_ÐÿñëSŸúÔÜù{iûæ7¿©n·«?üÃ?Ô÷¾÷½ˆÖ¢ÏÞ_RåÑÏ˶l˶lËö¿9€çä.NÈø÷¤»ýŸ’ÏØs¤»  ž™qzzªƒƒíîî†ï%)|^Ïp �=ßß‘¿¼y`‘O�2>8¨ÌÞë ]J´¥  ¾øp8 ;¹Ýnëòò2|KÞ‹ç3ŽޏŸ¸íÀ}Äþ�4ê’)ÄßÓ’æ^é‚gãt»]IŠ ²««+5�°ßÂF÷yÃ_ÄçÚÚÚŠ¬)^�=àóã?/"xRû™M£v�H‹îé2áã⶘Ë ãæ%Û½/i~ ®ÒdÁåÁ/ÆÜAs7ÿ.×§ÏA†�'>Ls¼„ É���žžê�wÞQ³ÙÔýû÷ƒ°Aö®®®Ë¢ï�F`¬%_‡é|£wÒ{0öŒ-AŠNÒ¹<ùÏxÝl6Õn·£¬~J L§ÓÀ^XCÒ:Â�@ °/dÐË®‘‘è˜8k=aB?ùžc~È7cÁØt»ÝÀAyGðX �ÎÃùÀ>ø:¸²¯lª•••¨þ´··˜*ïÊÑ$?ŒÇc5 µÛmU*•Ëå Õ¨fD–ÓÅÅ…ºÝnÜçþýûÚßß×ÚÚÚ®�Ú)`{üŒ�À5Fð”ÆÜØØ¼› ™v»òìø!òâ¸c½hMó;׸IÉLäŽ#\˜«ú§Ò·¾õ-�F#}ä#ÑÆÆ†?~¬'Ožèƒü êõzðر¾¹¯ïÑÞP‰Š¹bÏßØØˆ²£ÞæH#Ϥ¸‡Ð ��¨-Àl¯CéF1PDg2™½I‹Çàæ Ï{ÒÐ'“Id¿8Ù³±±¡Á`l§œ50¥ ¤Ÿ•#Ý4*('n¨3‹ ƒX,FlªŒÜ˜FQ�VÌD]âB˜Fât:�¨ÅH&‚NvF 0¥¹ ¸††°ydãK ɰ½½­‡j<ëùóçúÞ÷¾gáãò€¡ÅáˆÈ—+Ýét¾^'™@•JE•JE777á a´P–ìææFår9îqÃ�pƒÁ@gggª×ë:88"Šþ¢¼‘_2¬Ø¼œag^!ýRBƒ9[YY ù�¼åpÜÛÛÙù=| ! 1)Í—½½½ÕÙÙ™$ÅfËÏô—ñìõz1ïŒK£ÑÐúúzdmmmimmMj6›qÈ›oެGô¤3ÿ{ÙŠÛÛÙAo¤a³Ùr¸°§i3÷è1H5ŒŒdŸ3H³eûßÑÜpÒâ‹_ü¢¾ô¥/ý—ïóÆoè×ý×õìÙ3IÒ½{÷ôèÑ£p4}¾;Ü¿ú«¿ª·ÞzKï¼óޤ»’@èÛ§-r^øŸ÷þqîÃgèÖ¿ú«¿Ò“'O~è}>ýéOK’Þ~ûm}ñ‹_Ô[o½¥?ù“?‰}‡½ùûßÿ¾>ûÙÏê�wÞù©’\˶l˶lËö£5~ÀNM‰"w€%EІŸ[ãÀ+ ØbìV«µâ)cæÄÎt: ÿ.�$Åæô@>öVlb>ß�^& ¤ùìZÿ݉4ÏÒà;^Ž_ 0¤×ë…ÿˆŸˆïeú ã=ðž?vòå奺Ýnd#aw»¯êÀuJ(QEÁ³¢ÈÀ×tpÁ3/ƒ ¿D¿g³³Ì…J¥>%¿½d�’ /’Ñtþ°ðçù™û¥à¼g­ùwR€iIà€O /¯ð¥˜‚Lù¾[~¿ô½}íùøø<§Ù‚é{¥`¹�/~”¼î`ã‡ïê÷÷²{årYårY———j4q¶‘̼¿�3²D`Jú9âcÂÁ¿§¤“cZ>ÇèÓüþŒÑh4Šþ?xð ˆð/Þ™uHõð;Is2ís�v>ÏN8éóžê\ÖÀ?ÏF—ƒ8`ëe%ô9’é€9UnëEkÑe͉œE:uÑÏN¤9ÑáþŒÏ?ãœÞ'%qõ�–®qÿ܉Yÿ?%®|}¹îå»ô�ýáoî«9 ãrFV‚ò™Lfî|4î‘þŸÎ`4Õu...´¹¹Ù”Õò} \ \Æõ¨ë ׫«³s„ ‘z)ì8l6{wÔ…—~„,�F�FÊfg�:�ÎÜ>Ä=oßgÁÆ Àðù`mq^cG�s�^w²˜ ü4ñ,Û AôÕÑÑ‘>ö±�©T*½DÆ0Þì׎¿3®år9ʲö¹¬�`�~¿¯|>d c AÒl6uqqç0?|øP>Ôöövìõ¾~R]êk[€`Jê¹Ìû>äkš qÆ û‰–f'§x½÷%•ÿôïôÕÿÒl6cü¾ýíoëéÓ§* zýõ×U©T´··§·ß~[õz=H5ÏÚÆ†ö²¥n CÚu:�¹`*æŸä˜tœçP'2\é1@,`„ÅÂfçÉ¢vãŽï“¡4cs‚€bÓ�eÑEg-UŸ¶²² ²ë›››šL&]…¢##£”~¡x¾g¯–ž“Î7™LÔl6U(æÎ›qƒ›ì ²m`¬½ô0’Â@Èd2!DÔ`”]]]©R©„‚Da ” d<3Ä•‡…ahð}²zü| E_©T´»»Ä$ › „¤ ,7Äßs#èïiiP«Õ‚Ä) áår9 e³YU*•È^a¡L§SÕëõ¹ÚÔ¤ ¤™¤ ;`Û'"È”AN³ÙY4¡o&Œl¨>‡“É$ú†\w»Ý0î†Ãaœ+ÅÚó‹~¿¯ããc=zôHÓé4ÒáQ6ž5qÁÁØúFB¶ Y8(w¸ÃíúúZõz=懳»nnfç5�¸–Í/ŸÏ«Ñh¨Ñh!†×ívµ··¤ÑÁÁADEzö¥ ‘!ÞdzûˆH¡?8————QwÙAˆN§6IdÓ±ñBQÚ ™e"jc8ªÝni‹Áàeö–gýïkn´á _З¾ô¥9ÇãU¤{ÞÏÿüÏëë_ÿº>ó™Ïèøø8¾�\±ñ/z®3÷îÝÓ×¾ö5ýÒ/ý’ŽŽŽbúq #o¾6Ø—}ÏþaíU}¸½½ÕïýÞïéÉ“'aaD{ÃA@w}èCÒ×¾öµ¸·g=JÒ[o½¥¯}íkúÌg>£ï~÷»?êë.Û²-Û²-ÛO©y¦9û™Y8öØTøÿ•û:pÎ~9�çÎÕ¤2QÓ|?…=ÄI‚#Ù{$Å~îÁzøœø<“†.Ýù¡üÌï… ¡â‚÷Å3uè/¾86ïh4 ßÿŒ3ay±o±!ð!‡Ã¡Ž��#ê�н™ÒìJ¸�Ã\rÐv>Ÿ�kR›Åûî�|ÅbQ÷îÝS.—‹3‰=cŸÛý¡Z­@›—Ãÿv€×4és Î.y˜o|1¯ZâÆ<ÃÇCš'Š\>ügŒÓæ÷¡ÿà�q^B.¬S0ÕßÑŸçå›ð·œyé�Ê?#ãȲ¤8§ÃÉ”Ev%Ÿy4y¥RÑÚÚššÍ¦ÎÏϵ³³3Й’€Æà'Nø9Æäú�×ËU«Uu»Ýð‰Ð¦Ú}M£ÍSBu2™Äy=£Ñ(Ö(�×È»ëÆuQd{:×>·Žç¹îázæ}BP.Ïâol¾¹¹ä¸ºà9`aŒ3™Cà^©ù{¢û¾á:ãŽîv|Òe€uí÷ó€?×ÝNyÒ±u�‚ì,"�ü^Îó�Eóè{&sFŸý9ôŸ1A7£$ÍɼtWÆ¿X,Ñî� ÅbqŽäã=}L| y®SÒï÷£rK§ÓQ³ÙTµZ•¤Àÿ¨hÄx0g.{ÜŸ,ÂR©¤jµªÓÓÓ˜×Ùþ¾TÍ!°žñ�F�íúý!e¼§„Ød2;Ÿˆ °<úÍçØ |=ÍÚA·ú¾”’àZŒ?ú@º;B†³Ø¢l IDATÊWWWU.—£Ä[§Ó‰`iÎ ªT*�UóýÉdg‰e³³ä ²þ¶··£ÌÙ“'OT­VkG*•ŠNOOo%ƒ†`2¯�Fœctqq¡^¯§z½®}èCzíµ×´ºzwYdß3¸°¹xoz_¤“S\�ñäÈwG~�4r"Êõ¥ëƒEº®óÓï_]]é;ßùŽŽ��#ëtmm-²£wvvT­VU­Vþ…ÜD~In�Ÿq}ˆíêç7¹¼9¡šbLs¨ÕÆÆF,f; ÀöuQº“…€c\¢Œ=� šNñâL“î†:?cq˜Ïétv¾ Í�_/åÅ€@f8Å ûFäY%ÜC~{{{N¡f2³ò7œ'PÎæNý]²ª2™L0íÝn7ž‰RÇÈã]ظP¨|Ž¢¦„�§Hã�}ƒr„s!fá9³‹Þ»wO÷îÝÓÚÚšÎÏÏ#;)“ÉĽ îpÖ˜30Æ}dS�ÇQ#×I"�ØQ\��D!—ÛÛÛj·Û1�.°ôÈ9Y@ø<̦ÍbÂò÷�,ƒ,d`lAÂúYôÁ�™B¡L"kdÀmmmETÂûï¿?·¸™äÊ£I666b}B¶ ø0�=s05és±XŒ¹Cî×××ã¼§z½QŒ'''‘…ƒs˜Ífuvv¦V«€¹\.˜tžuss£óóse2}ÿûߟ# ‹Å¢677u||÷eâZ¼|;%Ô·¶¶¢~VZ2É£ó=K€¿§¥˜”")ˆ >Çuÿd0hggGkkkQÚ�ègȳZ­c“É,pÿƒ¬ŽgÏži:�Æï¹\.¾‡­ï„ þÿêêì u$VŽhÀ%D¸<‚¾9Y€Ã?”ÆOÀfX$g)q�ÊãïòÂ8§s‚|;¸ÄyKÁ'&÷O¿�¯)ÝÙƒ&#[‚û<¤÷J›?ƒk=Ø24íÿ"Ò)%‹P÷@MÞÁ ¿§ƒøö“íS*•´¿¿¯Á` ““=~ü83ÆÆ³(ÅŽ~Hç-3üFÊA�‹L&³H||F"êég:—>.’¢|? `¹\Pœ~’…/žža!Ý‘æ<Û 'v¼16¬QÇ͘s>O’4w”gA¢Ó¿ÖKHz òx|WŠ °�ëýã^è5—Yt,ú‡¿£·é›ûøŒ�WákÀ 5—I'“|oaŒñÁ™·ð¬ZŽ�äL×=}òïû<:Ê|¹ŽsÒÈqO''X‹ýÌ @;ãäØŠX|νøÛ`0�twvüååeá\žÉdt~~>G@’„|ñž,ÁÚ!�Œ–ét$¤c�.3žA…^@&ƒv»­n·gó@ªe2�œœ¨\.ëþýûº¾¾V£ÑÐÅÅ…ž?®×_]ëë뺸¸ˆ,tÏ‹sÙ¡`“¼ïŠpý‘Ífµ½½(D eÈÞxã åóy©×ëE.옭­­®?<<Ôêêª...‚lArÐúúºjµZØ9CÀ±Yמ•Ì÷ÏÏÏu||¬óósu:­¯¯ëµ×^Ó“'O´½½ä±ï×Þ÷9ýÃ?üÃÜßN<×�ltÒ—¿üe}þóŸ×7¾ñ ýÑýÑO\2½‚ÓÁg? ã‡kr}6›ÕW¾ò}ò“ŸŒß=Š'}×ÔAA‡ùþ›öɶe[¶e[¶eû¿ßvòÀ#0±»°Sõø¿ »šk¤v{meevP5‡pã#bWó�`u{ÿË£fTø þwIsýwÀ‡Þï�é¾ cÅ»`;{°}dèõzAÀt:�xiæÿC”G,æ£ßï«\.«T*EV@~—tG.8`�Ï�]‘ãÑéþ^€†äÇ} …‚jµšÎÏÏÕn·ÃvÇæòŒ@JŸÆÕåÁÇÕAÿÙå2Å<:™¹tp>µUÜ6IA¦”4âoÞœ§¾LJ~2ç©ÞbŒÑ¿ˆìòä{‡¯1¿}}ÕÚôÏ}uy¥¯~ ²AßÁÈ|O¥$ 0‡ŽéTÌœ2N¸3w¾Ö28x®gWq¦ û¥_%ÍáZ•#—`}à‹ô‘uŸ’~)é†ÞœN§s£À4ûý¾¤»óÑ¥yóþûïG�HµZ�ì�^¯¤ cê;zÛ+A¹,€‘e³YµÛíÀëz½Þ\ð7÷f~§âYãñXÕj5²³³3�ŸŸÏ�‹E�œœhssSµZMÅbQõz=0eÆÏƒ­ÁΑußGKô†8BB’�†NOOu~~Çs¼öÚkzûí·U«Õ”Édæ°_æÙ \'#ôÂÑËù‘Œáû°¯Cô#•ޤYÖ‹.//U(æJ§XŒ¯C·Òu‹ÞC×úzÉçó:<<ÔÚÚš=z¤ÃÃCU«Õºç9�FHÄ\ð\×{NKwŒŸ‡ ¡ï½Íý拚‹ S0ÄH¤„)Ql– ¸3ÑårYWWW‘ÖÈ€“‚è‘ îææf”šáÀ1X}”¤_žHigæ]9…QÀû1.777j4±x¼Ä—t—±Â¹(D�`Ü“Ùà› � åšÍf£v-½ºº:Wb˶—Òó¶³³#I:>>…Ï{’‘C7$6jHjO² 90,—Ë©ÛíªÛíª^¯Ï¼™:{i lvšå�"GAó.ÜÃ?Ëf³sކ-µÊ!�uÒE2¾R'�¨HN6ªÁ` Á`²ÏµlZD!2ç°Õî z=Xc6[ä—÷`^���U.—£(Cš;Àlpô‘±Bis7ÞÉbl0V×××Õjµttt+ëÿÅ‹AŠqÆ¡Z­ÎE�”Ëå9’â 9C!3Ï�ÉÒ]ù‰lv–.ËYG’"]c„5,)6w®oooã@NÖ k¶ÝnG–å;Ü ÀqÅ e]]]©Õji:½ËzœNïR…—íÿý†¬b¸þùŸÿùÜßRã*m—|ùË_žs"~á„.�vàí­·ÞÒÛo¿­û÷ïë/ÿò/ç¢G£‘þöoÿ6~OÉ–�üãs„—;Qî@`½ª­¬¬èÓŸþ´677õñ˜ámkkë%Gí½«ï¾‡sÝ¢¥e[¶e[¶eûÿ¯¥ 8:Ÿ=Rºó‡RpΣ¢½¬ˆG�¦@v÷Âàœ\>p™þñ9÷g�'ÊqþîÀ—ƒ’ÞÛÉ)'«¼•f> þ-û²-a—N&³j•JE’ÂîöRíWWWQÖ݃\3¨¦1�´³³%âJ¥ÒÜ9.¾W;¸��� v@.÷}ý>�?ìçý~?¾_*•Ôh4âl_À±ét:—ù$ÝeÞ8à䶃ÛX©ÍàŸá»2¦Ž5pÐ7>�ÛF.ó‹@¤W=×›ãÈ£à<Óƒ ñ=S -m‹ží¤ó—Ú\é{9hå€x ´ž}ç@šÛÈN¶8^â,xÅþþ¾Þ}÷]u»]µÛmÕjµ¹htü@|IÇ®ç3—ËÔeÜ{½ž¦ÓYÉ:‚®Ál¤—ËM¥ãÁ;_]]©×ëiccCµZ-J¬óÎ`)’b�ûIwã’®I÷^5÷¾žÿ{oò#iv•ÿ?1äsÎYÙU=¹»ÝVË Há…AY‚/í’AB,�,ayb…Ä‚…ü 6à…o@bX˜²„„ɸ鱺º*+ç˜#2rˆˆß"õ9ù¼·£Ú?°p·Üq¥RUeF¼ïÎ=÷œç9ç\/…�¾]^^Ž’ðìN8hšÊëæAÂÛ~Ýc€dBnÐáàd^AŽú>KeÐeÞÏäÉûœ’ ³ö‚ŸIîs¹Þè&c7�kßKiÿüg³úãçƒq³t”¯‹ƒËŽC¦nš åý›¥ï`'Ãb‚뼚ûicc#2Ù<ø××ÀA{Î?Î߯©žb.ÀƒÙ€ðoƒ¨^Ä]=`qUt:mllèÞ½{ªT*ê÷ûšN§zç�wT­Vu÷îÝÌ]äŒ9-ù‡®Kã]­V+Æ1 Bæ!œx?ƒÄ=??W½^W£ÑP¡PÐ;ï¼äåãJ¥R”©…ÐJ«R­®®Æ÷ èx·Ï-r†Ùï÷#xãèèHÛÛÛ�Fzðà�Ž��#ðcyyYÏ>û¬^|ñE ·I(NŠag9ÙˆüR²�~pV ƒØŸ�ÍÈ‹ëC~‡^=;;Óåå¥îܹÏ�F‘!�bé9–êôŬ}é�€¦çž{N»»»�ã.//«V«i_£Ñ(3˜?›{½^è#lìjÆ�‚_»Že¤WkdH#JeAVPo!À@F æó7iêår9³z½‚B¦ ¸Þï÷c!˜4ˆ™üL8‡3F:‹:+sÅKÎår¹¸@ŠIqåM– F¡G8ð”4(¢à‡Ãa]n0ú8 ÒÍ�,�G,:‘0ÎvBLµÛí0V6ÒÿÒTtÖEqW­VcþÉB�Ô`#B¬\__kkkKêt::<<ÔÁÁA¤‚KÒãÇ�uuu¥v»wÛ<ÿüóZ^^Žù [�C¥ŒPs1Žb±d‡²€²æ³Ì!d#?£îïd2‰’o(=þÏú#Û饖Q/)2¿�WŒ–Éd’)YÈ^€h¤ÿ’>PÏ›‡ÄÇžÏçã@@ys“ËcB.8p Z­–êõz�™nl°NdÑ8‘$ݪÏ?ÿ|8}>ßkd÷àH_\\hgg'C ¡¬Ð \Ì+Iår9ör½^�{¨ØÓ�FCKKK1�jÃá0HÏ\.éÏ~ïk2™L"5=EÄÎ_±X ƒÅ´Édà6%úpf���õÆoéöa ÿ¼ýd5È\g¨ëŽ'‘ þ;ÿ ™1´“'¾çDrú�/ùËúò—¿œù}¿ß×·¾õ-U*ýÃ?üƒþâ/þ"ÎÕáp¨ßû½ß“”5‚ÐSìtð2ü~ögVð ×^{퇖Øûaãô±¦ÿžå¬º£ü£fYÍÛ¼ÍÛ¼ÍÛ�Ö<£Æƒz´t _ ß[‘Ò#èøBá¶$‡û”Ž‘yÐP.—3°7)Ç‚�‹-H… ÎGþ©ÛІzv}óRרò~wªi ~S¿ß ûÜ+n¬¬¬„O‡¹··§•••ð/K¹\Žó›ËÊ—––"j<¾¹ŸukkKÒmUé–8ÂÖçn_ÆÂgãyq©’�ñöÛok}}]÷îÝ‹uf=;�Nd@ Н9Ë7Âp¢ —Ë} kÌ[z!7sx‡ÿÇX<ó‹9pÒFR&ÈrÐߣé§ÿ�lº†AµIÙßMÁbä6•Gp/mã�ºWW·wÁâóÏŠnv ÿŒß—÷âÓ‚‰ñÃÒ`ÇÕÕÕ�ÏR©¤““íïïkooO�F#cûyy$Ïjc±'�Kú‚nº¾¾´ÛíÙZ,u||Ùƒy@d;^à€%%‚úý¾NNN´³³£���¸N€5 0’;ɨ@ÂõÈßñµöŒ.ô£åTסj}òlNÀ×z½„m¿ß×+¯¼¢ËËKÝ¿?ö€ãiÈk6 ´µµYÜ{æÒn·5 âN™ÅÅÅÀ:Зf£÷üÚ''ÁÔ|îÁm:�Nüß�W\wʳ>™oäÂïbn™SJò×ëõØÓN¢‚µxvŒ“$<ÁÓúé#çŒW”¡)c+(æ~†I7ø#˜ŠŸÑ)‘ëÕ˜À>...ttt¤jµª{÷îéîÝ»=r~~åFs¹›RuëëëÚØØ¬oiiIý~_Åb1²ѳ>ø'žè:•õA`g0^î&�ÇêõzÚÜÜŒ+œ°ßÚÚÒÉɉ=zß-—Ëêt:zÿý÷£j4�'¡çøŸ�~Q¦�CÂ#Ò P$U0ênÌ"?“É$R!åjµZP|RçŒò…¾GPP¬™¦y°Ý’Bv2½ó3g—Ý1@1är9U* … "Q4(iÆÄ¸!hÉ^ó�HEÆÆá‡Rc|¥R)Œ¯S ùÅ8VWW#õ�n{{;ö¢”è#ÖY@¹1ˆ\PôôôT‹‹‹Z__Ç BºuÖÎÏÏ#² ¢©\.‡Ì·ÛíPÔ½9o?ÙÍ#0G£‘¾öµ¯é¯þê¯>ênÍlôSº9ÿû·[’ôÿþßÿÓŸüÉŸhaaA§§§úêW¿‘ÊœCœ)臫«+mllè[ßú–^}õÕ p‡Ã¡¾ò•¯è«_ýª~ñ1€6� ûq4ÎÔwÞyç„Ù¼ÍÛ¼ÍÛ¼ýx[ .: žFW;áÀ„W�ðÏúsy—t¤–Fh§ÑÒ€xésñmqܱAé»GÜó'<ë[óIQ«>æ4’œ±xĬ÷ËûÃ;®¯¯dãþ|€ÅÅÅÅðµWVV"pt4Å]wÌÙââbø0^:ÍmĮ̈ás¼›±_^^ªßï«ÙlFÏ@ò 1ŸsüÞáëœÎ5þ)?ç9̧ÿ ¿Ð׆µ$» ¿Ü×Ò‰žôyþoüÞ÷ŒÏëÈgX;HŠô]¾§x¶g>øïÓÿ˜úzñæÛçbyq™§‡Ëï,‚Ì#Ç»ÿÞå2¡V«©Ùl±ÁýÁzú3}¯¤$.}õ5`.<“äââ"|U׌ydMˆVÇ·o4:99ÑÙÙYdý óNÇÆðëýfßë.Ÿéz2nǼŸ<Ò.µÕÁ).//ƒ@óìÞ�uùóu‡pôÏ|{ÙË\.º„’Z€êNž;¹Âxüìð5qëó–1éúK·YfLêç}ƒL´æ÷µZ-HX×~†øz¥ï§¥ú!Ý»ì—Y:‡ïû¾rýÉ|úÙöóÐû`§Ü·yì¸øÎ3Ï<X¢ßÞI°"`·“÷ô °› /Wç2ÃçÐs.Žò_Sd‹}Âù ˆOß®¯¯ƒÄ!úàà@�?Žç½½=moogÖ=%�žH I!)ðUßo`vý~?úE%¤³³3ªR©èîÝ»XQ.—#Ûggg'p¯N§£f³©N§w nmm±R(Ü\ËÁÚ9ñÅú0§ÈÌ`0P·Û ùo4 zøðaÜ÷Ôh4ôòË/kss3“EqϺ$Žm2cü`Øè&×kÈc·Û�êGÌ?²áû9dþ‘Æ”Ëå2Iè?>ÒJPàîÈ02Åé:˜÷z9XH[úE@ÁÚÚZpìeΪÔÎNíÀY¶wúo)!�ØlLºG}ÐQe>—Ïç#e\ºM}w¥ÃÁh[(¢>$io€È>QnØ`€ñogk!¢\‘ 4F£Q�Jãñ8HˆÀc'ˆØÌ~øù!dz8¸<’ àc‘±Ã€bp¯­­ÅaвX\\Իᆱããc½ôÒK™h„„÷Á~Â.2/¤42(;”b¿ßÏDh°&dqǸ!—´½½ÄÚÖÖVDéåóymll¨^¯ÇfDÁ�=æÂʺÂêzô„o/ýà$S·ÛÕÂÂMMl�lç}(Qþ&í‘ÍÏA↵,ql4 Aˆ5~(ÑÈÊ�ùDy ï~˜" ž¥ÀEm+×××*•JAâ ¬$QÙ4�ÞFöaøAÄàÜ�àÎ&{�Ÿû!K¦Dª“=Èûų©$eœîÍâùDº¬­­ÅýL¼—’v�»~ùÎH¿ß]�Ïç#Z‡Cn<QFYÃ\.§õõuU«ÕøŽ¤ ÄÝÙÌårQB‘=MÿQðë|žËpŸ·Ÿü†!Àžùö·¿­ï~÷»úÜç>÷÷,Ûf€1^úµR©èÿñ3‘YÒ­®†­T*úÛ¿ý[}á _Ðd2Q­V“t£—þîïþ.ãø§†È�k¬ù|^ßøÆ7ôúë¯gÎéy›·y›·yûñ¶”ò†ÿ•‚ÈüÛmV~çÏsR›Ömllfyž��„_4 ØsÐ!%ÒàëëëðE<°„1RJ ÀÊɶt ¾âÿb{{ࢿËï’nË“ÔëõxN±XŒ{C,¢üûWWW)Lf¾ ïä;)±‡ÿL¿x�¯~!¾>‘¸\â½µµ6 ö8™èΆ Äeíx?ßñ;Ùè¥pðÿðé˜|½ÍŠùïvÿÑ�_úÂZ8¸‰LU >ãrÊsÜïKî¤ûÁûê ö”¿ÇgS™.•Jñûtü¬? Y’²¥À˜Öt}}]‡‡‡q 6*Ù¬áÓáwÔ䙳€tM‰=0Ùå×÷ ÷îRí…q-,,¨ßïGà"Yvì@J¾Óív3͝@ ãjÜåýâû.»$ò<Ö–±¤`XÔl¡i¬˜¿£ê¾cq šùƒ[XXˆµtR¼ ½‚ns�n+7¸|3ŸŒ!%ÒœÜa ÈsJV s¿¾¾®n·«ããcµZ- ƒ väÙSÈ–¿ÇIË'µY$“ÿßAp�Ë€¯úÙõ�€s±~ àv­VKKKKj4¡÷µ»»xÞÞÞ^`ǃÁ pô8&ô‘ýàçv>s­¤ÄÖÖV‡FNïu]îD'AØ’Â_ô+ X†,"œlšËËKF…œû÷ïÖW,U¯×ãÌt’Ó×Ý™Ž£X,ªV«ÅÜ@P².<Ð`0P§ÓÑÉÉI�L¥RI›››j4:;;‹ßU«ÕÀQùž$mooëÎ�;j·ÛQþîôôT­V+ôªë¿®&Ír#cª^¯k4éàà@�NGårYÏ<óŒ^|ñÅ ³(ó!Wàg«ïuÏÜÆ6DF£QèÂÓÓÓ�W×}nË1&2²Xwä„,¡ÓÓS5›MíîîêÞ½{¡O§Óiƒ>?È•Wn"yee%ðZdÜæÂ½õØWÍPÑ ¬ÕƒøÓÀôºcñŽG»^ò–!�˜'˜tRŒ?OIGØ9Ü�‰¤cHÊù|>ʳ¡(aô~¿Ÿq X`˜GH6ì=6} IDATF�ˆív[ý~_�F#ñì {©TŠ”V~�%m˜gxÄJ²ÛíÆ<�DÿId.r¹œjµš®®®ôúë¯ëüü\O?ý´îÝ»'馎%6�ÞÜ‘Òl6c¼él(s 5ÆIy02zØäÌÙ+ÚÙÙ át£•Ïç3E~Øað¤‘&°d±IÆÆòr_;;;¡LVVV2 Öç_RȲt›]­VÃ(âðËçóQžÇäääDÅb1ˆ¬J¥Ä,7c`.¨Ûê÷%qCù¡QâŠj}}=ä F� jYK #O›dOz¤Qù|>æÒ冃V,£>7Š–Ì)d‚ÍË  3Øó¤écL¡¸�Sˆ( bŒ+Ö\.—•¹ÁaDDE­VS¹\Žwaðû���PФ¼£Ø———£\òGv’§›.,,„L0vö Ê�ï5�Œã4oŸŒæw>Ÿ×ÉɉÞ|óÍ�iäºÝí$º“Éœ‹~þnllèë_ÿº¾öµ¯I’þüÏÿ\¿ð ¿� ÀptããÙ~œ-ŸÏëõ×_×ÿñpœ·y›·y›·ó $oOì�$ñŸ¹o‚½Ë¿-¸‹7%�°ó< ‰÷7=¢ŸÁÉô½çî JÙÌld~N_ø™2˜8xìs€ï€ìÁ‡iT0™A’`À·¤\�„Ü¿rvvm¼Çƒ¸üîʾO&“ÂÜ�÷ªø"üœ¨õv»­v» ²±¸.Ý– ÆŸeîð+S°Ö}Ø”Ìdn#qÖÉ=ëê Ñ€Ó½À\ð>ä¹ãwóø¿Œ˜JFÍê�—ØqRÏÁgö“ÕJ _�yàY”ïðuñµ’nÉc�!zÒŒ•étªJ¥¢­­-=xð@o¿ý¶ÎÎδ»»«………Àg°oy„#%ø|9 íû›ï2¯T›X[[‹H|îS’~z.w[Mp½Óéèìì,ÞOÖÏEö™Oô•Ë’Ë0ýLvY3þ¯’nïñvâÝ&Èÿ F6\wùžF†˜7®¾p6Å¢x.�˜ìU¯€âw:ù>N‰1æ¦X,FyC²ßÈð>û¾JÉ—I@hîdãi6›*oî{{æ™gçk6›™û™www3º$Å�žôgVs9=7/e®\OùyåçD?w ”½È™êÁò\cY±±±¡^xAÏ=÷œÔh4´µµ¥«««¨|ägòh4R­VÓîî®Þ{ï½ Èù=+�ãdßxÒ$ø,ûú‚1#ÿî ûgRݾ¼¼¬jµëËý;üÍ~á ><<”tKš„ÌÙëv¸2IÅ÷ …›k(ÏGEÎÝétªÇ�™–f’lllhssS�= Â<—Ë�¾¶¶¦��Õjµ á9ƒ)ã›Ú^ì¿B¡äÈÞÞ^Œû€»æ/..tïÞ=}æ3ŸÑîөºÝnàýT€.aý‡Ãayƒ �ÁñRò|·ßï‡mãýò^N <¥�T¾¼¼ÔÑÑ‘òù¼îÝ»û}è²Çÿѽ~¶r~¥¶j­VS±X "–,3t?™ úœlô«„x¦Ͳ]Ùã(ð¡¤Qª€è˜­ÎÞÑj²Iè%·|âè‹Q.—C8ü@J�gjžÁ=9¤­;ã\,µ³³£r¹„…+J6L" §B 5XT¾ëJ†Ïw:�(áåJ‚Cöúú:"_`ÑéÛÒÒ’^~ùeÕjµ¸—‰ƒŸƒ òö�è Wté��ò‡\¢~°ƒz®=Có3DþO¦ŠÄ0ãÝ�7X>§NJÊ̇t[ß‘ÍÄጃ!‹²ÆhF‰0ÎB;ãO¦Ô,y@‘p12êû#z:�fj>O§Ó ³PŒNV!—žþÍÆM# =z�ϰáONNbý'“‰¶¶¶2F<ó˘<Ú‹µæ3’¢Ÿnd��G+—Ë‘ ˘]Y�ÇcÕjµ¸–CÙðÈ;Öcš}\©T¢t^.—Óéé©=z¤•••¸D'"ŒµB6(ŸÈX˜*ˆº\î6KŠ}4™L2uÊÙ‡¤Aûá˜ÞYÆ^¯T*¡£æåé>YÍ�Lé‡ßÍóQ5ô èö"úÚÿ�¾ðúÆüã‹ý溄çz´ó�³=ýôÓzíµ×ô÷ÿ÷Û5™·y›·yû$5?#Ü?àÿR–8rg÷I¤Q ÀM&“Œo‚ÝÍÙF9¡,tÀ?0Þ=ÌÁ?úïAyôÕ�qúà}“²eœàv?ÁA]Ææ ”ƒ¨TÛ y™€7ìs@tÈÆ@I©óó󈶆¼ð±yFþ`0ÈdÁ�åë왌ÉÇ1$)¢Ò=ò ؉ï�GÚòŸsZJf¦ÄŠªPÍúlÚR`׿“Ô@p°æ)qÁÜ`Ÿyµ|uÈ.|dza”ÚEøÁ|yŸù¿ƒí^Æ €ÆJ¥crÒÈßéãgÝÜGsÒ l€ï5�Â=99Q§Ó ߘùòqìrÒØoôÃe›þ¬¬¬ĽF.‹àInãÃ;VÑjµt~~®½½½Ü9Í^q²‹~§ �µõ5ö>xFý¸ºº ßõ„·¯±W\q<Ð}ßËNÖB¹¬Ä ˆï8#Û¾n)°é¤%ŸuywG~�lrü'=“¼ùï...B/õz½�i@_@äÐlÏI#Ïìq�ð$r—½÷$�—u�xCß9PîÁ O"š à�ˆ$H� yrrrAë;;;ÚÝÝ�½A¦EµZÕÓO?­N§Õ}r¹›Ò„µZ-‚…�,fO";ÁâU‚Ór½ÉÜ;Ί ___G3c¦?�NççÏåª ¡W³ÙŒ+ �¼ÜÁ߬#ÈùüMûÉÉIÈ+Äw'���Efû ÝOéYJ¹---immM›››!S¡#é÷§>õ)=óÌ3 :<<ÔÉÉITýA!CŽc¢›©D)Ò………Ðs”¶-—Ëzúé§õì³ÏÆ0^l&lö�7FuÆmç0*•ŠšÍ¦r¹\\1Âg\_8i꙼Ì$|œ„“’<}à׎ 7\÷zð9sȼ�sc�‹Å¸_‰ë~XÇð‘idг¼�ŽGG£�(•f�F(o>7؈0 l´´ôaÌ ƒ0Ø/..2,_»ÝŽM�±Ê](×B¡ Z­“ƒáÁ¤ÃIàé‘Dh°1ÈD`ñH~À!<›ñ¸1ê ¿ƒÒÑÕÕ•*•Jæ@r¥ à†K±xsYÚ½{÷ÂP©×ë™,/”îòòr('•xŽoÀõñx›a&cÃ{OvG-�óÁ`Ù5kkk‘j‹’‡áç.”lh7péFžZÍ\öz½XÖ€‹Äp�aÈIj3×|�q:ìŽD¥èsI$Ñ+++AŒxÍZF'£Ü€G~ÝÀcϰÎiI?d yF Lù,k†“ƽdÛ^æ�9@kµZìáÔÈÂðqrÐ ÒpSgޱ‘¢½¼¼Š ](¢ðþþ¾šÍ¦^xá�Çc½ûiÍþeŽŠÅbD�ŒÇckuuU§§§ÊçóQæo:�Æ…¬5uy+•J¬ ÑPŒÝB–šÈ†G³ÙLUí¼ý„6ö¯ƒéß¾w?ÊÆž™Õ ò=¨"»vwwõK¿ôKzï½÷2 ””­£íÏù°wþ_5ΜÕÕU}îsŸ Òè‡�;ó6oó6oóöÓRp|–NN�>'lœÜñßñó,uPÈý6\Àü'°Ññ ¼"�ƒ\å¶²ts~â+§s€Ÿ‰í�혺¹ÿ x‡=žËåâŽÀf@$žsuu• ª,ÆGs2„sß !|sƆ}œöYR€G¹\Ný~?J¹ÿ3�Nc\NŒ°f>)‰²ººš‰–䈭¬¡ûã.S.‹)Yäjú}:dÜO"@ü=³‚VRyMûÌû�;ÖÜ!_;ÿÞ¬÷=©ñyÖ]úà}>ôÙÇž’h¼º¼¼>½¯Ã,¢Ãç¸sNsp}}wG///ëôôT§§§ÚÙÙÉʶãϳ·ýý¾Ç=+ݳ_$�?èW>ø\8¸ÙëõÔív5�µ¹¹÷èz=Û‚5qùt�Ïñ þv\�Ïx 'sÁ¿iî÷»,zxžg%ùÏRÒȃ)]†Îqƒñ2׎÷¸Ï FÂÚ‚Ey…TÎ|||†¹ð3ÉÉ0äŽïCž !?SBμIJ¶ÑWÖ<Õ=é¾âÿ<ÛID>çú‡ý1ëN¦¤òìû–n2@ŽŽŽB_ûu&“ÉDA åó7™‡ì=€rpKžvòÕׂ¹ãLæ>žÕét2û]RæƒÍQÑÈ3|Ž��ãúƒt�‘U2db4i8fÖ—s˜Òn;;;Q튌ãããØóWW·÷% ‡C�F#F‚AÜo~vv dq.är¹¨ÔõèÑ£(m¹°° µµµ�‰V«¥bñ¦t��¯¾úªîÞ½«ýý}=xð@§§§ ª×ë±½ª{’yçl¦ ßxç‡õ;=Cƒ†Ômé6•„¬7bˆJ`.œm÷M‹Ýëõ”Ïçµ²²¢F£Bžn²*ìGˆQH.ä�OÌ72ƒ2ã¬÷ÒyŒ•ƒ£2%;ÒMHmZ¢ ¾ï‘®€~³H)Úxvû–úóøÐ>æáp~͇��)Øç¤Ïæž•‹‹ 5�¨z�†äó7ÙúجøÖøû€X’Â/ÄßamBñjµšJ¥Rü|ii)‚?ýÌ9ÝD¢ólüj¢¥×ÖÖÂ'X,•J᯺:áåëêd„ûñiD­É¥@,¸ŸÁoðw8Yçm•®ñ,Å÷ŒGËãë{Àêp8 ÀÖ3äÒg¦�iýá;ÌWjCáOáçV*•ð‡À¸kɃýûþLß»È Ø Ï¢T¸t{O×ÚÚš666¢LÖt: p¿°�UÏ$J ±4Ê}:�6»ݮž~úi���©×ëimm-l~2­· ªÍçó:::Š€ÓF£8 dáàoƒ‘0ŸÃ4Yå3¾þNtúp™gÜèZeO¡Ï(ãåX"ïðòfÈ*ÀîÊÊJæ®7ðé–èÇ·^XXÈÜiìd˜$‰ÿ¼ÉuŽ“wè锘ð¹ð9_Lõ ˜a»ÝÖþþ~”ßçÈ,óé™?T­VS­V ‚óúúZggg;h:�ªV«é…^ÐÆÆ†þó?ÿS�?V§ÓÉ�4d×�!ÈØ8WWWƒÜN tÊK¾ôÒKÚÝÝÍ�‘ù|^›››‘ÁÇ8gL «NŒø9Æ\ ïWWWªV«º¸¸ÐÉɉ�FØu.#¬¹ÆZp×d2Ñææ¦®®nîwÜÛÛ‹ F`‰È'¶�cØ`¨’2׿ × <@¯L&µÛmU«Õ �Ø$qÔjµèº‘q`{¹-ÈÙÄœº}œÚÛRB!x€´9΀!ÄÓéTý~_gggqH§‘&õz=Ø{Ú©GldN§Að Ðd#¸(&°V«Å`‹Åbô‰~yÉ�Ã÷"¸ �Û/2ŸN§á'`—{s0‡3{Ÿñ¹O;™ÜTðØÞÞV­VS½^Ïô÷<ëÙ�_k曹wJ�×Ä�µ.©üû¥{?ÕÁrúÀ3œ˜ò¹ä3€x¬%�´ËË˪ÕjÚÞÞÖ믿®“““¸Ÿ �Ž>ñoL›frH ¾ã²ÅÞrÀÓç œ‚ »R©®â`#˜ ó†„ïëïŸ%“éñ9÷½�q¹âyŽý¥d…¦Þ�×yxƒ+”J¥¸ÁARôö>‹Åð©]nœã=ö‚gÑ_tz¼‡Ï¸Î÷1Óô…ƒ­ŽžŸŸ«×ëéððPWWWDž’DÊò»TOÌÚÏ~¶ù>u°7}†ë ÿn ûÿ‘ñ”|÷õƒÐ#¹sçN\_€žm·ÛZ[[ L°Óé¨Ùlêìì,2T«ÕÔjµ4 ôèÑ£ÐéÇÇÇ™r„d±nÇÇÇêõzZYYQ«Õ ÝA@4òéx“ãL¾ß9ë¤Û„'kòùÛÒiÒMÉ9h¿úÄu:ÙNàL0M%šÓÓSu:�”yåìæžq‚§=¨Ãu?gíØ‡½^O­VKGGGQ”ë\:�NŒÜêÅ_T­VÓõõµÞÿ}µÛí(¡ç}¯T*ŒYãîC®j “²ÑhHRÌÃÎÎŽ#[‹ï`Ãÿé#„ ˜.Äsâg´'~H ²¦Ýn«ÑhÄw¤[ŒÆƒÅ—––Ôív#¨Ÿˆ|>É .—Ì盟^YñsÆ÷)ëCx2Aõ•JE½^/2áúý¾†Ãa`ûÞ×a¾÷ÙGÈsÆçÒÀ‘Œ†???×ññq(E&ÎYER¡ˆè§F"“>�âÂ/@k'�0N%±À³Ù¹Üm©0„äòò2SöËY<˜¼t1<:£4p&܉&úïu¯Q.Ìó\H”�÷ �tRÆ 9Ïäòô?@z'>|LŒ‚ &Kú»¹¹�¡Ô¸Õ�*ÓYsßœ¬£GÒ@Va¨Q.À/Ž#CÇYe”>† ‡…g!+ô§ÅËõ1ßD¡xmÝÔX¥ì\¯× B¥ÊZ 8 ¿PhÎ⺃HÐd2ÉÔâf‘?GH4 I” Ñwn^_ßÔe¯T*’äo.÷Á4HK/ßÈ�qâ%û cbo"«DoݘÏg³¬VVV2Qf¤Û¦‘R^2ÙÂÑeœ”ŒC™bð}$ÝÔ,¥Ÿõz]¹\N­V+”?©µ¾žÈ.†K¡PˆËø<Šõtƒ‰Ã†´WÈ#dsÞ>¹íë_ÿºÖÖÖôû¿ÿû¡;?nÄÊÿ¦9òq%Œ¤[‡2ŸÏëŸÿùŸõöÛoÔ]š·y›·yûÄ7?;ø¿4;ó(uzù·)³È•\.AOø!n¿» î !ïÀ/à9Nx8è>ÿÈvпÆý#ï/6¦ƒ ¼ƒŸ;x øˆ€ýŒß5�Ôëõ´¸¸¨���øžÛùƒq±¸gq‡.ÙkkkZ^^ÖÆÆFdöO§·AŽøÿ^Æ&�7iv)_''VVV´µµ>v7óˆ?犃¼n¿ó3¿§¿ÌÉšƒ8)�“‚ƒ)y9KŽSÙOÿÍ{R�—¾¹Œ€ Gk^*Í1 oN¤„ŒÆIM‘x‡G(RñNˆdÓ?“–AôyBîSÒÈ÷€ï æË}âR©¤��½ñÆj·Û:99ÑÞÞ^øh>F°&|áT'¤ºDR†`À/””ñÙÏÏÏ#qý€;™ÜT­h·ÛÑN°+,¸»ziFg‘¬MJÈñ;'†|Áå�5ô€,Ï€X÷5vÝNáA»ŒÛñ,|òëë›Rî^2 ¹å`ṗѲV./Ž[¥kǾñõƒú0ÒÈ 0å=°ì©Ùlf°ÂT~=ÛåÝ3fµ”0rr×ר–pé˜Òù㳌Ӄ,ÀiÀEÉÖƒÜÏçó:>>Ž[ÞE5Qî·9??׿æfü’}ƒŽIqÑv»c‚�!��y¥B–“qd¢9NLJ²„Œõz= ‡CU«Õ ™Ä^¸¾¾ÖÑÑ‘¦Ó©¶··3Iè'êÏžN§¡ß\Ö™/ž�Œ’HA†+˜7eN™WÞOVxz–1Ÿèe–bŸ§-cE�våéᾉr^̽A�+a|1—F‘‚ÊÏQ’2›…gy |Ø>šP¾ÎØ"„S°›“É$Cì°ÉP Ìó‚Îó¨#;ê‘^®Œ1T9,X7€j¿�l¢ëÉÉI8ëëëQ¶�Ãfœõ¢¿lŠZ­ï¬Õjêõz¡Ü ü s�†(ô2nžI„b`Sûe`~@Á3gö¾Á1<ŠÅbÜ}Ä:s¨qx!¤„"›<#ÈûÁzó¥Ç{˜~æÆ8{ƒŠ÷»²Bq²ìÏÒñCΕ¥hô%M?'Ë�šª¬#Ï!}ÖÓ1{–µñ磰<š†ì%dÅã¤(Æ{#„çC\!ç¤ürà0/n˜Rוˆ2ÈMŒäÖ�AO}ït:¡£–––"5… Å¡Ê>f¯@R:p@žžžêòò2RGq¶�ŽŽtvvöå;oŸ¬ö×ý×ú�ßù�¸§ýó“ÔÒ¨”�Ksrý›ßü¦úý~FGÏÛ¼ÍÛ¼ÍÛ�·9Ÿž…)ðžÌN褠¨ƒfüŽªØ­¨;�‹ Îùì—>{´ºû³H#leÏPÀ¤¯î¼ó¾œç9üÛÁ?†¤d¹××£R±�½l»¤L©9¹Ò+À�±¿··§««+­­­e.{gœV€oKKKQÚ™@<ü/©å²�_XCÃgFð“É"I — 9Ç+DzR¤­-¼×AdÖ_ÂýíT¾SrÊÏûñ£<ªÜ�jŸ;übº]YYÉøÑ)¨žÊ˜Ge»8ùæ¥�pIƒ<ø— iþð™Édøbše”’õN‚¦çˆB©áçÞgÿ¿gžØ§`).Ç4'‰Ø·ŽŸ¸¬€+ú<2æµµ5år7÷é”J¥(ƒvzzク¸Ðo¼¡ýý}=óÌ3z饗ãlµZq7{‡ñPrŽ} Ö‚~[v¢à� ^ÎGŠðŒ3ß/`Uȯÿ)—ËÜì�Ïßd  û®ûšÍ¦=zó~ÿþ}���Åšøùš‚‹ú9àëëY:Œ�j7žõBP?²H`?dÚÒÒ’šÍ¦677õÙÏ~Vçççzë­·û�ãþ*DyƲÛ;ôY’ÖÖÖâl¢Ô&™€§§§¡‡I<�FÚÞÞÖæææd›µ@/ G¦ƒ IDATuÛ…ù¥´m>ŸW£ÑrÊe‰=…þ Ah7�”‡LZ\\T¥R‰`Ôjµ:ǯ¹9??W»ÝV¡PÜKÑ�u²6$=ôz½L5+ìTl40ø^¯åëÒì!Oppžƒ³Óm_dˉñ8Sü?(h GW¹\.RH)熒DXICç3ž2çIÁÐ!((6)“â ‘ƒPP7’…*‹Q³ÒïÒá¢4§ÄŠräúú:˜BŒo2©¼%‡‡¾de 48ˆÝàaƒ 7)h(o�üÊçó:==Õ[o½¥µµ5]\\hkkK™ÚÙJ™³ñ•J%ë4�3÷09ïѬi±XŒÈ6È¢Ñha" ÇÿL eÄè7kÎû¼1/~3O®Œ—Måä•—{+‹QŸÓ•2Òë[úZAÐ1~È䣔tÎÔ1pÒ•­ÇÔÆD¡ ƒXŸ4z¢ƒ=êÄÙ]ÈÕââ¢êõz\ª‡òÊår¡ýN)é¶^´Ë2uGɆj6›QÒHÖëÁ< X;?¢ ݸãû¤»qÈòZèÌ=J›5q£C”~#OÕj5ä×k‚ûE·)v||sÂ�W o¼ñ†æí“Ûòù¼¾ûÝïêµ×^Óoþæoêw÷w3€†t H|\‰—YÍ ×4¨à£jî IÙr'ßÿþ÷õ�o|#£ãSðfÞæmÞæmÞþï[Jòð³s¢ÈÏKþæÌL�7ÿƒÃ àåN$`�ÿÊý›¤Ø§ø YŒÍîÄŠƒrø^!Ìïqàñ‹R°œ¾H·‘íÌö=€&ÑÌ£Ñ(Æ�_aÁ‚ŸÈ¸{½^�(Õj5Àì]ª¬¬¬hss3žé€—ÛìÌ�¤Lu~Pâ ž“€ü päwìÒðS‰À%° ›Ý-æ ¼ƒ@4ü=_kyŸJN.8ˆ �êÀ™Ë³ .Ë4' ,s˜~!»�aÌþµË'ïL -'J¼ÿ`#NP8ÀŽʘ¼ò &ä+ëäë›öÅ£ù½y™GȰtN v, ÚØØP­VÓ`0Ðéé©ÎÏÏ£t"{ð®ÕjÅ^ !›.«n£;¨Æç†Ãaø€à2ÿž]T.—Õn·uxx¨éô&à³Z­†ÿMô‹Wå ”: ±“@ȸûíȲW\ñ*;ì ý]V|�rurœþ!ƒì=÷³¨YGß`ÌÕx<Ž*FÌ%Øå°xûÁå9ö{ÞªÕªúý~fO¸Ü8^’ž'¼Ç?‡ÌCxf„ƒò———ArxE!öxã@×9àíóïÿvrÁƒš}.YÆé}O?‹<{?Ø#ìI'ù,g ²ÝétÔív#¸úüü\ÝnWƒÁ ²Xѵív;ÎG¿Z„ìp<38+Ø&øÌ`0ˆŒWt¸磯3çsŠ ùœñ;pSô³“ ÌŸëHöýæ¬9;;Ó;DÆ{ï½™6N²ær¹Øÿý~?s†º<º^bnÀ�ÁßûÙÏêßþíßôæ›o†í®�îeÌ�Iž]…¾;%X[Êâ~Ýn7#8öÓ+¯¼$�Û*`¸Ž£3žð³Õå�õb�ÉÎAoöûý�µ¥¥%U«Õ¨ZÄz!«ØƒÁ ì#2ÇoîÔëv»ÁO ‡Cu:�(óW­VuïÞ½ÀK¥’šÍfئÜÇU*•´½½{  ½Dæ%w§;îÁºsîx¥1·uÀJ©.å{$µM2¤› àce“Jù&�—2XZÒM]©rÐÑy DÀh ‡*ŒYjµZ¡�!XÐz½àx¯×Óéé©Úí¶ºÝ®VWWõÔSOEª“?ß܃„à2Ql&OÚ œ�Ìij/ò|>¯N§£áp‘'ÌCª´P…ÂM™@„¦V«éSŸú”vwwÕh4"Óe9–Ïçõøñã¨g�’ßÜÜTµZ�yÂÑØÝÝ�Ë41€q”¦Ó›¨XbÒ‰.ò{š¼þ%BëŽÊÑ æ�÷Ñd ÅÌ3<"Уõx/ŠÓ{¯êP¬³G�xÉ7„!‹Z’(kwH(9ÇþÁñÄpðwø3‘ár¹œ‰bñ¨™ÉdõާÓiÔu�Ç‘ �t}}kå2ˆ””‰ò‡*—Ë�,9I9ä`ï÷û:<<Ôd2 Ò…±A6q‹ÅH¯dm®®®Ôjµ4µººé™,½^/C2V.—Ã0cÞé+%5™Û¥¥¥(SâÄóÉsªÕª†Ãa8÷8ÀÓéÍå�———:88ÝÅ�1oŸìV,õ�ï|GßùÎwÔl6õ‡ø‡’²%Þ>¤Ëÿ¤= ôø(›r8h…BA�?ÖoýÖoÅgØûó6oó6oóöѶYg ÀFú»Y ‚9 9 øLŸ‡}œ>Û}0~î ïô>¤d .ö§<9`éà´�™Ò#îƒóý43Æ úÍý²€v€ø€€?ø´ÜÙê %¾dYéšàëãW@xÆÏt¢Œ¹øà�Nj0î#òNþíÀr‘Ê‚ƒŸ³€Yú‘=égx–žþ8„Ìà—zS08ýÏðRXNJù|ã+–âçøóœpðÞï•!2Ý£öñ»ù¿Ï‰Zô?ýœ¯½ÿÙ`Ýðáù¬ïGö+2à *{¨T*©ÑhD ¨Á` õõõôÒ�=á?÷ye<©^ àgì_/°È‚µµ5õû}íïïÇ^Ðeü`È UJÊårȘƒ¤¾žNX¦{!%ä\^]ŽŸÿíD/2ækÍZ@.�k¡k%Õ!×ЫNà¯×ëõÈêX]]�k'Ø``îë{µœ'�Û×ÓeÉeÕç$‰W,pÂ�ì 0¾ÃóJ.)H›’Îìä/Õi®ËŸs"Ñõ-¯ƒËŽåR‘Y†¸@üšƒÁ`¥Ì¼ær¹ŒîdÞ`gï9y<�Õívõì³Ïêg~æg4�´¿¿¯ƒƒƒŒ­@ÒBz9YAÿ(ù -ÝfC³n~®–J¥ÐWWWÚÙÙ‰¤®µpR‹±c÷€ J 2‘ñcãL^(¢ìg„¤è à¬ijï0Nˆ2î¹òÌZP?kÀÑé;d*ŸgÎ(Mf‰®¤, s9ïä'sîç¦'(ÐR[†s8ÅH>�iÄ…m€Ò‹lD”‹Ã¦q¶™MÒï÷Õívcó_]]Ez )W�IDö»r‚c’Ù,”C“nxjEÔ",(u�fàûŒ5-ï&)”?üúúº359H—––"ª ¦’±üónîM��qÄè`óxŠóOy¹ñx÷©”J¥Hÿ'+Š5yôè‘NNNT¯×Õï÷cž'“› �ÃÃØ#%IQ–‹1ær¹ˆè"¢ #ÓSDa�™3�Hò:Ï`Â8tC‘ñ£$~6Ž“RÜß„’•n™y'‚ØÌÎ<£�=Çð€°`z&—�ûêê*dÇÒS™!0Èx[^^Ž:¯díxYBæ ƒˆ´HúLYD'ºP"ž™†¢€€u#ù÷¬?Œ`æå|qq¡v»ûÂ/nµZÙèeê–——#]Òw„9l8NNNb-¹‰(5×?(A�ÒXXXP§ÓÑõõM Œf³}† ÞÝÝÍd1òsw°Pœ8Ç�¥èæc}}=Æqyy©û÷ïëüü\Ï?ÿ¼*•J\Þ;oŸÜ†Ì#kôG¤üàúÚ×¾¦ŸÿùŸ—tk�"—óö¿kœQÌe¡PÐññ±~í×~MßûÞ÷2 Á¼ÍÛ¼ÍÛ¼}´ Cº¶¹=ª@Ï 6™Û†øu<�j ‰Ø˜×××qɳ~á;@Äà_˜œc+xòN'|F¿�É�1�x”Ãë÷û:==U³ÙÔÆÆFTà,ÄÎ%À�÷¸íhÁÙÉüàƒ¥¬<Û3ƒäsRÅ�Yÿ>ÿæýøë`dBáOv:`ç@ —¦Â'“�¡ÀyÄ=~2ýã³^ÖÈýÏ„òh@ª_ôûýLi<'�¤[»ÑŸMðštS‡À4÷i™Öa\È›\âç,..†ÿÕh4Ü'S2Ò3ˆØ£€lµZMÝn7½ü›W¸pðjaaá˜^z €þ“ánÃf>�†–––2宸«”`Y|xÖ;’õÇïõ½7�N#hq0„ÌäóyU«ÕØ#Õj5tDÁÙÙ™Ž��µ±±¡r¹,IqgˆWraÍšÜÚÚÊèO×�iÆ ß'¨Ù@Æ�U_?ôû(-·Ç~ƒI‰Láéú‚`]î¬AFèϳ[^^ÖÖÖ–¶··C¶)?… ß…B!.¶OË=�ßàË;ÁÆžƒ`{ù2'UYû‹‹ õz½ÐWøwNˆ€yø•Ì»[dq2�9Y€|{À::ÓÉæ‹1Q}¥R©h}}]…Â͵ì>³ººÙ!œIB^žŒ?èy' �Ì€,õep“Ñh¤wß}W�NG¿ú«¿ªJ¥U{ 8œ¬qbÎe—€iÎU'¦=KÓÉ t/-%¼]ÿ:)Í>A>ÀËøœÈ{‰RŒ¬5kÅY FÊšð3×ã>·ØNnqÖð9×#ŽÛ‘�×n·5™Lô+¿ò+zíµ×ô/ÿò/zóÍ7#QƒçÓoð0kD_|¨¥¥¥` ÷öö2Ìût:Í<Ï/PÛÞÞÎD�±x¥Õï÷uçÎ�Ì\¡´:�N£M»»»Ý#«\±b@!„—Å‘ÑCÆʈ5óËÔ Ç íü§žz*„ÅZ,õôÓO‡"9??�ïCŒu»ÝÈ`)•JªT*!€ú+’úlØTHɬò ú 2�3Î�“Ndz1fœžóóóÈÁ‰ãÐa Èàam!ÞüBQbìr€º‚F¹ß‡Ãž>^^^Æá‹¡ŠÑÆÜÒæÒŠßsçYtÌÕÊÊJ\jÇá‚ñã†s¥R ƒçe4E:ŸW¹\ŽZ£èêzzª<5Oq¼) €“Ôívµ¶¶–‰6£L'YT�ÀÜ—åYMëëë*•Jq'ØòòrÜ/õôÓO ´â¼}²zÅ#ƾùÍoêÛßþ¶¾ÿýïkcc#tç¼ýh ��Þ‘¤ÃÃCýÇüGˆš·y›·y›·�¶ÍŠäåßü�FK¼Å�`ìEÀ“z½áõz=ãÇÒüÚÂ^ö¾9På>�“QNùøÒqyÃ?u0Hº-{åà—ƒ1<Ûp`8ªÕj�@Ép.®¦ï|¿Á�YÀO Xñþûx´ðæþx1�Å÷|î„›N³åðˆ*&pÎÇÆ8t£/ø”©�žÊ[ú³YcLm8@Þ4HÅ�IdØÿðL®ìõzá{öƒß9IäÁ¨iàgê—�ËPŽ ß}V–ï9æÙðŒ&ÀÿTN™äêIsL¿�h÷ñïù¸œHÍårÚÚÚR£ÑÐÉɉŽ��µ¹¹©R©”‘qÏš‡á:1Äx\vù¹�ðßõ‰Fâ£w»Ý¸Ëdss3ð@rHPôÏ`þЋè(ú“F�Ó_×cüíä‰ÿÌ?Çü#Œ•spHuHúHU‘ÃÃÃvÁ’ ë]·¶¶T«Õb¬ôÉ÷3®Œ›~¬®® Ëç�$%Èv8æáØ�Ë\ú'=˜{׎g2O®[|o².N†@>€‰ð;d(%&œx‹@Nø$+XG£ÑÐ�;w´¾¾x$ÜññqÌ5Á·ÓéT‡‡‡4xOŸ–uÜËÇçûÝ­]oq¦u:½ýöÛºwïžîÝ»²~1>ëÙéÃó}¯¦ûÇÿïòï{Ã÷•ŸWÈŸgò8™„lÒ7××ï}§/Ž�ûƒÞv{'í÷“Æâ6D“X³……›{à�†¾÷½ïe’<*Ý ~–ºNLû�®…žøZñÝ^¯×> Sà�è"t$8*¯'hxö&ä!œïc/,//G•&Î0` vvv"h[Ó8GÁã©©ìãtḆWæò†ýéY�Žsº~CF<ÙÆ÷IÝnW§§§‘Øãé¾Êœºn°û…~žmäQ;îÆ$LF¹G¡p ‡ÃÈ`ÁxnZšÀ7‚áÊ–l"Tü.¶GGœŸŸëôôT¹\.@^˜t{?K©T CªÑhÄ‚‘É”@¤¶Ûí F®®®‚¨!Rp™M'ZؤÃá0ÃÍ!1ߤ,ó=ûÎÎNFõz]Õj5"ؘ•ËÝÐCñ^]]EÝg"f dØpiÆ]/”esƒ9£6&›†MèL?Æ1©®yà¤ó™FÐAô`<“í…<¢ø].—‹r†wïÞ …g:ûÏÆføL§Ó %ÅûY¿Z­¦ëë눢8;;Óh4R³ÙŒËÔ8T …BÔÕtBR‘ˆÏêI#&òù|(ö) §X,ª^¯ÙɽXéAƒ“F$gµZ�ý‹L²÷Y[H]�h`¤ÎåÂÂBè äy&ÃÈ/dtƒÜåëââB¥RI›››!?Dµ°/—––BÖˆú›L&A b$`¬œ��i?Èe¢Ð5莵µ5½òÊ+€ÌóöÉmÈz€3Ì/ÀäPŸgýèÍ£ …‚þò/ÿ2~ÇÞD�Ìr6æmÞæmÞæíÿ¶9@â]èo�¢æó®¯dw�ÅÁvtœ{6�lÁïÁŸu �~àsGñ=<ÚVº]gÙ¾îÓ¦`X îK·™Ê<—¿ýûw�žžF qˆ*ñ_=óß� €K‚2=@Tú ¹—ŽkÖ¿ÌrPѳ“|\)pÇ|0Ç>â“&À¸ ønÔäãf_€G°/¼¬~·Ïƒ“?.¾wñÝ|/²/fÉ_ºß677µµµ¥·ÞzKÚÚÚÒ�;wâýcLI¡“FôÉ3È|üžõD„=À»yâ· =|øPgggÊçóÚÙÙ‰`Wp ÆíX—�²ÂÉAüY—e>“Ú»>_.OØÁÀýeÁØð—½ò øE±XÔãÇ�Õh4"| X,I$IÚÚÚÊd;¹Nu‡dÜÌ¿�—ý>…\¹>ó3(%ŠWñ9ò¹`eŸò{ÏVã]~¦!7޵xoº†èДܿgþYú 9º±±¡õõuݹsG÷îÝ ÝÞét"«ÐÁfˆ)>ççüŽ¿S�é2äzÙûççÈh4Òÿ÷+ŸÏëå—_V½^�l-ÖÆ×Àu-Õ!þö¬?‡}é}ý°óÚe#=³¨Èƒ.ô5§~ù™?k_úùä-=§fÍCDãØ`—d`¿ð q–BBô¹m³SÛåI„Õ¬õásœè-> Wppp \.§Z­¦\îö.00?ö»ï§TW{ ¼t›åæÙX•JEõz=°ðëëÛJkìIÚÞÞÖÚÚZœ­—;ÁÏ{ƒ�Z­–&“Idc?2�i¶ïコºR¯×‹³�3‘*Pà—�D¬›gŒ:™ qçÁ]K‡‡‡Qå,µÇ½eH#2B˜`¤1@X„˜‡ºòƒuf@N&x*1ʪP(DôÑYDí™þo áb±¨���LJ¿úcT*•ÀÝà§ —Óq1a¥RÑÚÚš.//Õn·c~H[CÉ×jµ8ø©]Hÿ1¦œ=D¸BÃ|3¿ëëëeã—Hú|¡ÌdŒ ²•$E6—†Bà0v23òùÛ T!F£‘:�N8Yù|>îd’Æ›3UâÅb1{"0ˆt8== £¸P(ÆØéœ‹ÃÈnáç $ꃋ~ºǨ]ZZŠDË ‡Ã Pù÷ââ¢677ãð`<ô�H77d<�•»�VWWµ½½F–óì ”*Æ Y0ì]d‚€ñĸý'ˆÁ~¿ä ‡Ê™#]y:�†ÒÄ�ôŒ1's:�N�s¬  yƒLÄÁñ²#¬‹xÌ/ëî)æôYäMRÒ­u}}­õõu]]]é½÷Þ‹Kè:�ŽÞyçµZ-•J%½òÊ+ªÕjº¸¸Èd‹M§ÓØ7iYÀyûdµY6ò,ÝfâzK£'çíÞd* zôè‘þæoþFÒ³}SƒhÞæmÞæmÞ~< ÛÒPü:~ï„Å,BÊÞ¥‘‚û” ÿ°ôûZ¤ó w'�7ˆPOIÎy'<K ˜ñsúëcßpÿ @º½ˆ>P†åòòRûûû:==�¨ØjµÁ›Œgøæà% ãñþÌúœ›ñ³”4q?•ñ#zð î=-•JZZZÒÑÑQø{NWn#òYHćö, æKº-•(î2æ„ ¾;åÛÚívT£ðHù”8s@_UR€‘éÑŸsßNÆøu¼ËÉžçz`<«^¯kkkK«««:>>ÖÉÉIDªƒ=� suu•©\‘ê_G×EŒ=ÁØPglGGGêv»ZYYÑúúºŠÅ¢Úív¬¿³Žƒ ßú¼²Î)Pï¸Rºÿféÿ™“�è—#_ôøÂ‚êõz`ggg�‹äóù(�¶¹¹©õõõx÷�;wT¯×#Ð;žñ‚ù år¹(ÃÄ^ÀÏg gíO—'d†q¦¾g Íu82çã÷ϰO]g€kq&¹¾rrÑïèNå} ÝV'ò=èø[¹\ÖÖÖ–^|ñEíííiccCµZMGGGqF´Z-éàà ÞÁšûyDŸ=›({*;©¼ñ{/Çü^^^êÁƒ*•Jzî¹ç´¾¾˜sãú;%Ó` ?›=°Ù÷—¯µ‰>ß¾ž®c=«‹3‰=çŸwR…þø;ždÏø~òó6•5Ç�]¯úç}nÀH)Axyy©ÍÍM}ñ‹_T¥RÑ»ï¾÷ü€k¥ç"ÿö¹Ke ýœÿ�î ðC·oƒ�ŽŽŽk¦Ò$Ëd2 Ü›sŒrµ…B!0iz|Ï9¿··äP½^Ì™ïV*ýÔOý”Úív\)â¥ÑùãñM9LÇ“×××3g©­ô ™qùžLnJ³Çý|åßàáï½÷^Ì�—1ö½i䤿ùù¹šÍ¦êõzÐó®”°Ì Tý~?¸²!œåõè�Ah8‚qyy Nf�‡¨aà’IÁ†`Á°aürp2xˆwF£Q—ËËËZ^^ŽZ¬H,f¡ps÷A«Õ Vc‚É#£€÷!œ®X8´p.ï÷9~ê©§2‡°”½ü˜ÃëIÎä¼ýd¶Ô0rc1uŠÙ+î„ÎååGk)X÷gögzøð¡¤[§lÞæmÞæmÞ>Úæ@„ƒq˜àCð3wbŒqP_´X¼¹›²V«E�|/ÙA 6«ƒ¢þ‚$E°ÿ¦Œ‰të+Ì"Qf�EÒ­‰MÍ;ýw4ìñN§>÷È”J%mmmEe¿£0Ú Ìè3þ ò8К ³Z z9ØíD‡Ģ„Í‚z½ž®®®T«Õ¢Ä~<tëë뙈ÚFê8ÀƤk6kŒOZ?ÿ¿Æe8ÍsÙHïÆð Ì>*Kî&)Cºþp²ì�;N�†ž¢ L IDATvvvt÷î]Ý»w/î{jµZºÿ¾Úí¶677Õï÷£Ä¸ ïp2Ä÷ô,²ÈeÐÏqÿŒëSp2ðÛƒƒ½ñÆúÌg>£ëëke²”|ÎSrʉ5o.Ë®¿Ò6KöyŸc€<“l:l×{`Áé÷¼¿Žu{Ò?›ü³üÌUø¹ïåô‚˜„lÙÞÞÖç?ÿyM§S½þúëzøðaجõ“ˆï‹ËGJ4¥G.— ~ÀÏ,ðsÈr¿nò’÷![ÈãòýíåV H÷RqàÌ”×äNHžÇ³jµš^|ñEýà?P«Õ œÝ!)*&IRæNv’p°ÁÇãq$0'†}îÁÂx5z‚²Ä|çüü<Î&²iá ¦9S( Úl6ãûŒ‹–!� UüNIeBg}ò_H)@7 “N"Ð,2¹¶¶JÁîõzqp¤‡çh4R«Õ ãŸè¬Õj)ŸÏGc�b± …›ËÃ�àî"”:),¢×N$Ä7¥„”¨óTdæ"Mº%ê ­ÜHç�t'áåâÓÇ�koo/ÆÃÉœ‹Å  &“›‹+Ùì¬k~}}ë“Ëå‚‘ö”LŒ*È2W0¦VVVâPä‚MIZ[[  ª…Ë?az1R›Ífl6QqÈrÅüQ£•õ¢¬³�™õ˜N§±7XXpI!C¤ò ž‹ÁS|rr¢áp¨���LI@Hgö!?�ŽŽÂ¸¤®æÒÒ’jµZÈ'ý`³O§Ó 1ö¸Ë©Ùl†üA²äõ•ý@@ö*•J(.é6K A4™LT¯×ƒóÃîþýûj6›¡Ì9L vxg.—‹2””¦`½RÅÈØ Q†^V–}ooOŸúÔ§ôàÁ=~ü8²˜îß¿¯ÍÍM}úÓŸ–$5�HátçÆuïõÈ·yûd4Ö‘Ÿ¥rà‚Ÿ¡óö£5ö¤ë­y›·y›·yûxµY$J ^K (%—ÜWTs²ÅI'%È ŸN§q¹2ÏòìúÆívŸ08ü�R6c(%N¼9yÁØñ%ø·ezì`0ˆ2Ó\rŽïZ«ÕdÅgõÏ´a³ŒÌ—™/ýÄwŸôïYÄŠË‚¯iJŒúÜ2¯íïY&oÞ§YA=¾.^&�g¥ÏNÇë¿K�?gõÑA0Ç5xòï:!åòï ¦�× ç>Ìtz{ÿýìrÜËá1Nê‘YÞ�/ €|¥óèÏ£ž!0KnSB„~T«Uíííéþýûêõz:;;S¹\Ž2pÜIÁ¶žµáóœÊx‹Ïëå„wiŸ��©ÕjiaaA[[[áÓƒíxÉ>ßû.ã³@{—ÙðNeÓ1 «¿9B¾¤[’üÍqæ�w6�~WWWÕh4B/Q. ìw»¬øïèÁèàT*A¦|\é»ë_'‡½"ŒÏoª£ØŒ" Ý èMÿÁ8ÀÀH½r$°ë‰”8ðuô}æ@û‚*•ж··µ³³£­­-­­­E5£N§£è�wÞQ>Ÿ×Ý»w3÷Dƒ™¦�¿³ôó,ÂÈuPÚ¿¯�ˤW¿ß×›o¾©çŸ^�FCÛÛÛ:<<Œ»b|ÿ§k“þ›÷òsþ¦�þ 'šx¾ÇŸMÉTÌår�O3g>fŸ·Y-Õe)9ï¶�Ï78ƒ“Fn«ø¿±�H”ÝÝ]}ö³ŸÕî��Õívutt¤^¯— ðyHûN}ßÌ’�T¾Á-ý<â˜9öXŠY»-ãÕˆØWèJ‚ñ‘m2jù IÒméºn·×e`WñY’Òì9ìˆ[2MÑûƒÁ@år9ô8v cñR¬~å‰÷"ÞÁÏ€õõu�F#ÇÜœŸŸG`„cµœÍ\ ´ººªz½®ÕÕÕ(›*ÝêwZ†4ò:yþWˆž’ŠQC &†ƒ±ƒ¡Í„¸ÁˆNʘCÂÒ‡ôe"É*•J¦&(_,Ñ:Ac�%N£“™LH +²ˆ`Â=RÈ©—-#…—~n§flJH2�pø.Ž ï€ ¡Ïãñ8£Z­F¶ëO]^"G¼f«;F¾áÊårô•u&r€ì.²f8$Q.¸¬À<©”¬çòòrÔ솼¹ººR½^�ñÁúcD`бæÁ� ƒP…B!æ•qcX26ä›ÍÏ=7nˆq™YPív;ˆË•••ŒÁ€±Iú5Ñ6< Ža‰2`=�+H£\.—¹OÇ�æ²�±\__G(ßçà#œ;² è<Û͉O?Ô8ìQ¦(:H¡ÓÓS�œœdÈúÈø1()­«OMnŒ`ö.ØÑÑ‘NNN´¿¿¯—^zIÕj5ÈUŒñÍÍMmllèòòRõz=©………p¼»Ý®†ÃaŒÕËêAÊÑo7JæÀõ'§ùºÓÜàt°æ×ý×µ¶¶g /óö¿oÌýÑÑ‘þéŸþé#îͼÍÛ¼ÍÛ¼¥-ŸžD(ðïYö½ƒ'œ¿ò¦á[â€cÿ’…CÉ#l|'�Üßõ÷ò;Ô4sÒÊAoÿžÛˆn3â7ò‚¸ЗnlÿjµÙ ž¡pê �OàáãÕ�š®‡ƒ×ÌÅ“@N§�ñIÀÿ,Ræúú:ªd8'e#­ ¼ó²mþlþíïöl•Yká '}IÛ“Aw Îûœ#^NÛ+yHáóvþ}ˆR噬k Òù=Á’ÂßO+š8ê2ë•Fø¿”-E�ÿ ÉI¦ˆt{çDºö)èÞÂÞðyäóì[¾K�êöö¶ªÕªúý¾>|¨»wïfî5¦lßøµøºžEƒ¿ë™é>YYY‰Œ$ʤ­¯¯ëüü\�F#0Cä}yy92^X'ãÈì÷ûqú�¹sóuc.\W¸îvùñyHÁoÄ�p�!Ý ™šâNü …˜‹v»�!�˜Ë”¸rüüÜeeeEwîÜÑ3Ï<�É“ÉM£³³3êÁƒ:;;ÓÖÖ–ªÕjTØ!{±”4³Ä×7%µR¼Ô×€Ï;îÆsùN±XŒ{Vö÷÷µ¿¿¯{÷îéîÝ»QêkÖ{œñ¾¸üû9˜ê•ôLuÂŽ¿ýç~>"kè'×[^zðI:³ÎKúˆL§¶�÷ Ö—>'•ißzöÙgõùÏ>cõûý˜sŸ³'aYO:ÏgýÎç�õw�Ëû8WJ¥RŒ‡jaàÓTVwõ |0¼^¯—Ñe.\KÃ~"æàà@ùüMMøƒñx¬÷Þ{/>GVª¤H˜A&Ö××›wœ:µÙ»_ô“lq>Q.—W'h2‰ÌÎããc ‡ÃС$8p�Ëd¡PÂÛ“zR;'C1XÀpŒ /³Fº(5ÞÜ­B™*A7høh4R½^�¬.¡¢Flàõõu”ç`%;ceeEår9“NE¹³••mnnÆ…YdH°��¹ã™0tÙ…2…A0!Z O<ò�ƒÅãio8ŽÄt:�òt( .÷dA!Pˆ{8@v±XŒÚ¥lH€öóóóØ@žýCVóñc`q'Ñêêj&³FRc^fŽÍ€ÑÃû¼¹�Є/Þ/ÆGÉ7dƒñW«U•J%u»]=zô(döððPÝnWµZ- @MQH/”�g×!C¹Ü Ìn¾7QHôu4i4iggG�F#£À)݇Ó�\½…^bO¸¡V*•ôòË/ëòòRÍf3æ§T*E <ûbêðð0J]PûŒK…YÈ4Jp7’ d)0o?ù ‡Þ#…ܘ›L&zþùçU­Võ¿ñ‘Õ÷$ƒkÞþgͬƒƒýû¿ÿ{*ó6oó6oóöñh³À|) ÖaËb{¥�³òÇA;üãYø$œ»ív;îót  [ÓrÎz2㬽¼ ˆƒÀisÐË 1€IFÄ+ϦÜ8€ YõƒÁ 憹ó 'ŸKÿÂow¿�±ó~æ€âIãtžçˆ¥QÑþy?>U¡P°óüü\+++ªV«j6›j·ÛLÆ3Ó¹NAvÿóa?ûÿÓR2Šæoúy){·ØÇÂÂBpÄÇ\ƒ%x0¤t{²ˆíƒ¤€ÄÏ¿‘x�täêóà}g ©ü0îñx™q|¾Ñhdö€ƒ‹³äÇeÅÁ\~ž‚ÕTã¨×ëÚßß×{ï½§Ÿû¹Ÿ ìR„ª&^zÒçoíý$°´×ëEu |d@@*‡Ì QEà¬õŒ‘ýæYY�7žàè}bÍ}®CJ~¤rîx ÷A¨JFcâ굄ŸLn.ƒßÜÜT§Ó‰`Wd| Ÿ¿½æÂË{y“ïQ~Î÷ý"w'ïÁfQ¹ÖÀ±t™g¶ú\¸O‡<“áàç‚÷�ÀƒT>iù|>°˜ËËËL¥×±`¥î+:~Õh4T(ÜÜ[^¯×U­VT???×ééiÜcÄýÒƒS€srî¸~æÿ)!ç{aÖYækæ¿cü¼‹3½÷_ÿõ_* º{÷nT–á\D—0ÏÌ«lûZùÞuýïg’Å»®ô}îd�“wè¿’‚½ê¸[z®¥?sò?Ý—N<¥¿ãçôgÖ8ùœŸ�Çc½úê«úéŸþiíïïëÍ7ßÔþþ~�2½^/“)åóà¶ŠÿI›÷!%�Hø˜Lnï–ô5…ôOÇÉž&ÈŸt7„u>Ÿ�ŠJ‹‹‹ªÕj±¶ TÄŸ|>¯³³³Ào···cIÊÀD'Òtæöö¶šÍ¦Z­VèBlNÀà\†°Aw1fðPö1D;òN`ûöö¶NNN´¸¸¨ÝÝ]½ûî»zõÕWõÜsÏé_ÿõ_utt¤��=õÔS™Εr¹¶r¥R ÌûCI£««+µZ-µÛmõz=íììhmmM’¢v0¬™ ƒÁ .ô#ƒÂ‰2X0J\Ù!ŒL@1ù`0P»ÝŽÚ½Ò-(ç›�¨Ûí†ÑŽ€€>{<&~<¸^¯×3F4¤Ê ¶{4eH2惺¯8g———Áä///«Ûíj4iww7˜]æhuuUÓé4Òã!02ˆ6Èx`x1–yó½¾ÁýBî8Ü A3Y‹‹‹êt:‰åT¤2ŽÇã )—––Ôh4ÂI$;i8F„d.wS¯vqqQ•J%”Ôû￯Ç�‡r &x¹\Ö`0P³ÙT­V Ç ßï‡2âïñxÆûØÉeÈ+ ”B¡ V«¥N§w7‘®ï.sÛh4B1²N;;;šN§A¤ ƒX;”¯—y@ÑÒ—ƒƒ•Ëe=õÔSaXQŽŽCÓ#IÙe¯a¨œžžj0d˜{J²†Ã¡Ž��3w)q±Ü,'rÞ~2çÔK/½¤¯|å+™Òè /}éKzå•W2à“;öóö£5Î7¤çmÞæmÞæíãÓR€;ɳ¤Ûšîø‹³À¼`u`Â�ÁÁ`¤�¤ð}WWWµ±±þ€#þxp>®÷Óû˜)èBü¼<�à?Ï"xÌŸE¹­åååŒï‚Ÿ†/î¾N ^1^ÿ¾@:úÈçÁ2i4²�ÑA·HLÁDù|~˜ž‡?…›Î÷“ˆ¯éïÒ¿½Íznú>ÆF@�¿'ï¬L€a~îö$ÀŽË©Ï¥c³Æâ8 ÿ÷ˆlßoT-¡9`êÿw_Ùe�ÏFX:k�œf~MçÀ?ë�{÷V*­­­éàà@§§§j·Û”éÕ^¼B ïe^�x¦�ža‡ï9�Nìs²öüü\ggg:==Õââb`%’³JõDøt:Íd6¸Ìø^÷LKæ]âsåø—¯}ªï|ÿ�uP … %'''Èê’s‘fIyPiJr²wè ¤(c*n¯² Š :Ëç“}áëç? òL¥tßøþtæó€®ž�åýt�äsÍyD¾Ï¿c¥ìdH°Æ�N’Ôn·urrW6ôz=5›ÍÀÁªÈÜ‚,õ9B¶Ò3×çÃÿN÷£ïeÿ^:ésØ �?V£ÑÐúúzæúŸ;_cŸ+Çõ|Ϥýäò5uR(ÿ¦r8e>Ÿ�5œUâ9K3‡|ï¹Îó„éV÷ºnF¥Ä:ìÿcïÝa$Ͳjÿ™ïGfFfVUW3݃4 �‹ƒ‡ ÂÀAà „„qÇÃF�ƒ0 !!\�F 1Œ43Ý3]ÕUùŒ÷3ñ¸Fþ;×w:{àòçÞyÅ‘J•ñÅyì³ÏÞkí½sâä+A ìÇÏþóúÜç>§B¡ 7oÞèââ"d¬Úç:Õ;ì%×ÍN¦¥2ãsáv[J@�«sþIŠ ^§3G¯¹�åú™¬ú+)ö˜g—S¶�à†ãããÀ×óù|`”`Íè'ðÖårœÄ|>¬‘×\·:>äç7¸7„Ñl6Ód2 ½è·{{{¡˜[¯„U­VõúõkÍf³¸Îƒ=À<  Ô÷²ÈÞ2¤Ñp8ŒèîJAÀðÙétßí‡&ãY(â‚*6‚¤È¨È a°O&]^^fJA´5 -‹¨‰£!IµZ-ƱQ«Õbî Ãx éÍÍM¦|@½^C ÅøØ8#Še³ÙÄÁž’jëõ:SŒÃ‘yá}ÀÀB¨½¼DÎb±ˆC�GÐGA¿ƒÊ LæƒËn‰XØÛÛS¥R â…û¹0jP0.(©|>Ù(ΰ³áÉ\"Ë åzww$„v¡PˆK�¬Až}È*{þüyȘÏ3‡æõõµºÝ®&“‰&“I\0Û�F#R+¿õ­o©ÛíFJ7Ê…‹qwvvt}}Ùyív;A[2Š˜;Zêð’55ŸÏ5�T«Õ‚Ô«×ë±&�6¤�bÐ�ÙÅþBŽ1¾=%åOiE�ì`¿ßÝÝéíÛ·±�I�Gv=Z‚ˆù¹¾¾Öþþ~Ü·…1Ëphh8j½~ÈØ£ !YLý¬ý¶ýp´/~ñ‹ú¥_ú¥ÈJü´æ{ ´lÛ¯¡‹Rpì)ÀgÛ¶mÛ¶mÛ¾;ÍA)~—”qú±§ñ±›i)Éá $þ¶^©T ߆À;@¶R©¤“““LYgžK?h¨ò}’âüq@×Çæ`m –ð;Ÿ÷ M"gñyÔu¿Û‰3¾PÖ�êðK ‰õz6½¤^trÈ3N×Ä_s»ÇAɧH#ŸWæER”‰vYÀ/öjü=þ¼iŸÒùyj¾>�„zê³ø N$8ð÷� ð €ä%ù}.]¦¤{ Eî�xq¢#%âRpÿ‹u§�)HŒlR’-µÃÎ�ÇŸ’òµa­‘—;Ó¹ôÒ~€jµZM­VK¥RIÓéTzþüyÒì­”4J³ ¤GÂßÙ�NÏ.ðrðår9¾w8ªÓéD¥ü|žï`'@1ß—fç�±ð3Ù"̇g°t»¤2ëÀ¥Ô^†°s2™D5œ“““ˆâ§�dÎL&“ȤAF� @ÜßßéCyEú aÀëz�=Àx°¶ËcD§ï'ïÿ§é-Ç7ÔGgƒ[øþ$ ,ÕåÕŸéÿü¬ð|Ðè9î,ò,¾^¯§×¯_GFd-û“;£ïïî9â^qúåsú”¬<%3ÈnJDº®IeLR&[™+•J‡º¼¼ÔÛ·oG&°,YgmüŠ ']RRˆ×<ÓÈÏ6ö‹Ëç ˜kïØY.— ¼ö)]̳ýupEÖ]붃WÙá½›Í&ˆZ°p0ÕÕêñZ�ñx¬ÝÝ]ýÌÏüŒ^¼x¡·oßêüü<’r¹‡ë�Ffßú:bSx0¯§„³ËŠ�9µ�>¾,ùJí&ì?Ö…y»¿¿W¹\Ž*Hà×è¿ûûûÌÝw;T©‚3a\½^O§§§A캭äsç9ß·Z­¢tgJf:/‘Ï?T—j6›±ÎÏž=ÓÕÕ•ÎÏÏõÁèää$S1Ë×–ýèv‘· iĤê�ÇãL¦GÊnøS^«R©Ä] ëõ:•ÍÄáM™5Q^l&†ƒ¼V«ÅqÈ"ÈL>‚J™86Êf³É”CÑ0^”1Ê%ŸÏÇ] 9Û;�N5�£OdiŒÇcÕj55 ÝÜܨT*©ÙlêîîNãñ8Ê 0Ÿív;>˘!ïF'ÅÉ´##‰ñ³Ž½^/tD>Ÿ� #äaÛ~xÚéééJIOG©nÛÿÿægƒô�ïضmÛ¶mÛ¶ÿ÷ ðÈ3R@ÁA[l'h)@ "`;à ¶Ýd2QµZÕÝÝ�¦Ó©¦Ó©ƒA€Ù"ÑW­yþæÄŠp<Ç )ÀN>Ø*)9%h�ìA€Õ¯&*8h)}80[¯×Q¢û:�ð�©ø®§)_3æ�ç9Žo…ŸÃsÝ·uP}¹\ªV«… �Í}¸|ŸšÐ9�•ÊT*[)ð岜6>ïÀ¶÷%%{œ°ã~[*y¤†øTàÞpÓ1ð}¢îïïg‚HY{$Á>�°|+¯¼AÀï|>W­V 6%Å(iïsǼ¸L8¡‡¿žî'ä°Õ«a”Ëå.¥ÒÆÛ·oõ#ÿß½/TÁðùD|œÈ6{²ÇƒhS¡V«éõë׺ººÒt:Õû￟ FöÁÜø.'\¦R�‰<ûžrðÌ©”(Iå×eBq±XÄZA2ôz=���E ~Ïô£¡OÛív€¯€«ÞŸoÖ—ê5`I´ÛÛÛ:û/Oðq#³àU;;;=ê òS ·Ï=òÇëà,ìAö ºÇׇ3,Ý®O¹Áõ<ó ƒë Èt¡¬âùù¹...$Ë}N¹|°2œ?Ä&ØSTÿ”ΣϮ»Rùò3”ÿ=˜Áü˜Ÿ���ÀL?úè#ýø�ÿ¸òù|T|¡oŽ)´ó;ûÓÉŸë'ý¬xªÿÈ0g}.÷x¿5x³gè20!'%}¿ú¹ëzÌq,0/æ*½Ó‡õ%c�Š>è1ÎÏõú¡\ä{ï½§ÛÛ[½~ý:žÅ• ÌýtB†s—lö™“À?'“°!й`Ë`†iBö«Û=žäºÚK “-…~ò½ïÄ,g*É >Öh0ij–Ëe`Õé}öò7›Mu»]IAKÅb1öµ'¢07n+"{è­ÅbßÃÞr¢ðððPãñ8srþc?öcÊçóúçþgýÔOý”£œid²FȤ· iäeÙ¸Cˆl•Åb¡Z­ƒCxÉ. ÜÕááaDæc b`XÒ1W*ÎÐ’ŠÍ`Z&�AÐ/¿Ëe͆9dò$ņN7 â¦T*e.ll4.“õ1EËp8ŒMG¹¯N§@4 ãJ�gó çÌ(©ql Þ�P]€SÁéÑvl&IÁ„zÝgJÚÁœ»sÆÚa´2GDOÍf³Ø|lzŒvæbpww7Jç‘¥Æå­”JCY{½J}I‘Í‘Ëå¢_¬-‘*äŒ�u j6›!7( ~fM\©ól”:ã+•JMÅ�ÀœQЉSßä.Û(0—s52iX×v»ý===ÕÙÙ™NNNBNŸR¼²ÀÉÀ.€|8¢¹™OÈ |æËÁ.ݯçoøƒø©ªÒü>ë >þ°G»Ý�Ÿøýž]H?÷è‡MÈŠ¯±¿v²Z­2rà²Ê|>å+)ÐéwE¥ëè¬<�×|N‘-úǺ0~ß_¼Îg¼ºƒM¼ÿ©gñ‚ ½R 㡈ºÏÍxR` $Týh IDATûÎåØ÷¾Ë9ÄÂz½Öáá¡tuu¥×¯_ësŸû\àBîëÝÜÜÄ==¾/ ¸M÷®Ë5zâööVÃá0|]²OD˜,•JA¬ñÆ@Ð2ãEFè#?»,Q¦Ñ3  ò˜;ýõèuþÔ¤ôXÁd2Ñh4Ò`0P¡P_ÞÁÜétª~¿x"sàXëÍ~q°Ü <°d³âøÙIzö­g+ð,— žá{ƒ~¦¤�Ë( Ô1<æÖÏ*ž ‘É+‹�ÇÑd+%l ‹Èšû"p0èââ"pt§c¬1ßïòÌ÷:áɘS²è©æ{Õϳô¬bn ™�ð?ñg‚å°þ�N'pXdœêWÈzÛ¿ÇÇâÙG>.~§?œ`¬‹ß[îD¢ëdäÙIB·;üÏÈçû‡D¿7�õ„˜dž½´"¸—Ï2çvö¶ºÊíúÃåÞqž ¦�>M ôúƒ=»¿¿{ªÙlFY£Ñˆò›à«ØôÓ3�8ë ŒYóf³©\î!¡�D¿ÂÄÇ.Î>b½Áø§Ói¼ß÷,x¯ëëkýë¿þkðÌ�(<ÓYŒÐz½Ž²�»»»áxQH†‚ Ò0.‰RdSKŠÃåÍ!U("óÅ6 Ü£Àèwª`pô<‹ £ÁÉ¿h-—ËEæ 5ØÝÈrFCt8j8JR¤JºÓW.—#…ÃYõTÏF£2Æž].—�ÇÑ?Æ�eN(SçFÿǬB¡ wß}7ˆ¨çϟǘ©—LŸÜðsç<�çôÐE?áh¬×—°"¯È˜GžIŠ=¹¿¿e)‡™Ë墑:`D’mËÓmÛ¶ý¿i8Îÿø�ÿ¨¯|å+’ËêlÛ¶mÛ¶mÛ÷FÃæÂ`KÁéðö@?ì^Àé< ÛÏ=ìb²Ãñ{–Ë¥z½žšÍfœ^2;%‰�”ò =ïÀÏq?Ÿ;ŸÏ‡�ɳ$eÆ(eK’aã¯açzÖ=}Åÿ¤oü?ŸÿÂÉ}ÔÐgþÜwð”~;ðåïå}œú=¸ø¬%~` +—ˇá§9à X޹lð]@¬m}˼¤þ‡¿Îs¤GòsµZźò<ŸS0_ÿÔ—áY>>'GSÒÈÁH_Ÿ#~÷5öñJ�ÄóÅ¥7›Mlt›÷1�N`:¸î€;vûÖ³îè¯Ë”).èððP¹\N——— 1.0îMwA^¨ÑY.Ï.×î÷Q¦�Iä �W*•â.²tA>y¹&Ö×e”uÃ?gŽ]nðá=�ØÇíÄ£ƒ×Ã’âþaæf:�¹åY3TB!S‘µÓñµtÂŒ@l'd½‚}ô€X×)`0Ì�c*Ÿ”àÍûÞâÏw ìp|Â3¥�uð&pF—¥~¿ÿ‰ÀÒÍfgÜYÒh4¢ôýxŸ×›7o4 4 âÜ÷Dt¢cŒŸÀÖm8ÆY4�c ‘ôóf¿Þμqµ‹Ÿ{N|ÞÜܨV«eðR®•ð¬\0i—ept°k*•ËåÈ”eï8Aï|¶ cBÌçsíïïÇíÜ4�NuxxØ¢ëÇoýî2ú‡2›Í‚Ôsá\žÏçšN§Z,j4A^ýäOþdèj’0X[ʈßã8¨”�Fl$¯ù Ø‹�L§Ó˜pmpss©Q¾0ü#:¡@! $Ø~w „�×9eÓJÊÜw†!¥�âDAîîîÆ}+l\—þÃ&B¤ù]:N6°)ïïïcS8㇑H†�;;$]±XŒS€v6Ñîî®îîîtyyÏ㮣õú!ÍâÅÉ;ß ž²�Aíiuëõ:˜Iˆ ÒÙ8P0ûy¹\Žq3ßùrzzÆ”5§§§::: ' ö›ua½÷÷÷3™2¹\.ÈA�á ¥¤Æk·Û�y l›%„’„mw#–ŸùwÌZ­–Z­–ƒAÔ[E1ûáçÆ'N-FÊšèäÙf2O¡ÑjµÂQs"B…}ss÷ï<{öLZ¯ï«Z­VªV«1Ï[ìEd€õ˜Ïçqñãh4 ƒeggGãñ8öM»Ý޽€bÏßßß9éw¨‘~ÍÁì%åÐUÑá÷SÑ ì['´Ø›4æY c YØßß�2�———aT’âíì!‡Øn,lÛ¶mÛÿ½–Ïçõ÷ÿ÷ú…_ø…8#¶ûoÛ¶mÛ¶í{«9aáĆèô{$®ƒ�ØÉNbx$;¶=wWn6›pì©[ïel(×\,õâÅ‹£æóy&xKzŒ¦Æ/Tñ€Eο㠗˖w€3Íôà™ü,)ãÛ9á†O��ëek¼Ïn/ãó2ßd@àçZÌçóJ¨6Á3x¦»VzÔ*þ~�¤ÌZúZ§v=cv3+]¾üï>÷N8Â=Ò9°çk…?ÁópL‰3¾Óßç 1�uó(z¿oÈAPÏDøNÄ�ÿÍIöÏ$r€Ñ³9ø"œ¹¾ P(.„¯éë“’p)øÏe\¾¯]Þý}�ŠüΜÓ?~g_�:w:}ýë_×õõµ†ÃaܹË|?¥OÜï發/�È\;a^F£‘îîîT¯×Õl6U­V3Ù1‡.øð^îÝ3³øç "~9À1„X ëÊšxf¢ˆòÞÇ^Å÷ŸN§‡ªV«Ño°°üôù|:ÒIX¾“ìÒci<üuÅ]–]߸nƒxf �dõ}ÁçþN«ч\.‡ E—!®—� u@žò_è|î‡f^¤GÌ‹€|Ö²®×ë©ßïk<@Ï|˜ë÷ AJ0 ØKà}Nz¦ú-%^Rí¿#NhówÀhpö>ïEî¨â>ÉÚæóù(5‰Î¸¹¹QµZ�„^çýàhgûþ�¤ÃâÜõ,Fö• �;¾@¾¨ÆÞ†nE¦ÐQn§°64—Yl?kù›Ÿ!dΤø–gç@Êær9�Çc]]]i4e®„ñ –õzWlƒ«ð€|úNBŽ_£æË.‹L‚ dœcð;;;ñS'Ò3ÞØK�UÌóçßss£Á`�‰:(JÙ!‡÷÷÷‘ŠêåPîÛ¶m?ŒÍ M~÷}™¾×ÿ—ž¾LÕßÏßÏÎÎôðú£?ú£(ù�FomÛ¶mÛ¶mÛw¿9à$}Ò±w�ÝÁ@Wüý<›Õ� ¦ƒ€µZ-îõ<99‰ŒñF£‘)]çàžŸaNBà/RÚPÀˆ>xÄ®kžm�ïøKt¨g ¤ç¡Ûï>¯ØÅnãka7K�4R�ŠÈ^2¹WŽç{„:kå}À¿uÃJóæD‘ƒ˜§e¹üŸûÞü�ïð9ôt@Û‰—S÷å‘?—·WÜÇv™Nƒl=JÜ�Ðò ü�¾ø{‘WdÈÇšfÌ�Ï‹¯¥¿Žïˆ/ì ¾¯ãÀgm;â¹)Ùè@,㡟d¯°¼ÿòÕç¿Px¸¯øøøX_ýêWuqq¡ËËKu:� ¨XCðhº_Ïh'#‰±A¬Aþ®×e˜ƒA”äo·Û�‹¸Ÿérë>°ß=ã™Y>;ØM&“pŒÊž÷Œ@SßG®£ ŸL&¡ù~d×M™ˆÞï:œõ÷õòl+�ìg,¾ßÙƒ©ŽxŠ`ö}ç~�ïä„ñûgIÇ�þyá„zLÕÉ ˆ!ÆJ?Àá¸Øžû­§Ói"°~è!Ï0JI÷£¯!œEÆ\?»žõþz¿½$šëa>çUšü|`Îüüäž&ŸCä’;£=Á�=Êš¸~rrÀe>%¿  R‘ ÷e]/"¿Ò#¦øîÄ òègÏsùKüôd*ß)Ñçg%$ø¤—Ìå»ÈDá¬!àßIt·a�žïç`J6¹|!K¹ÜãÕ0Óøýô<Çåщ@0CÈ~’*„@ù¬ãÁ–¬!¸0ø6•ªØ#èãF£I‹Å"ªA$­×ëL)ö°ó.+.SžI[­VƒØå\B'ÄÃ0ù|>0~î{C—2VæÞƒE|ï¦2çí™F€Û;;;10^<¼‡C;ͬ€¥cC�y"=f¹BÖïÚAÞßßY…À D§s¹‡l ˆ@YÂ<¢ä�xà;ü¢{63„. Ã7 >ÏôAÁq0xº¹G°¬×ë(GtèÝnWãñX�FC�N'Ã0×jµØÄd”$ëÁeü°ˆ®Œ9èýî.@,—˱Q18Ù˜™Lt~~®áp¤.Ù„³Ù,œMþh4ÊäÈ€;}�ÍÈŠ�õõ¹FŽÝéDaz¤ ïq#š}ÆT,3u‚›Í¦�Fè8êˆîììèèè( Œ²mÛ¶´Æ™�žu'>m~nJ #óÓž›6xzbooO×××úùŸÿyýÓ?ýSæsnÛ¶mÛ¶mÛ÷FÃ.OÁ}šŸRöÞOþÎs¤Çà!È ì@ÎwˆÝ¿ÛÝÝU³ÙÔåå¥$éÅ‹:??_˜r)/â�ò |‰Ô&› g^RÆßÅ'r2(‹gÀ{𑟇éÜ¥ ©7Ï2p€»WÊ’ )¸š‚ô>@LûÂû> Èr`ÿÖIÃôûŸö»¯½ëNh¹üù¼ó3ÿè—ßSÏpŒÂ ÈñG¼¿ø>xšÊ·ïÿ›ÿî}áÙ¬i –ó~|©T–|œ¬+?{f kÃ÷`¦¢ïÏ*ðñ9ÙÂþòµôçyK�ÿtîw¹\Öáá¡öööÔï÷uvv¦Ïþó™2YTxIe�q9>ä`ßã¤#˜ Ñ󒢜9Y i 5æÙ Ê7±S`˜¾ú¾rÀ‰Å4�’~ûzòlÏ¡åé ø�ëÏô¢Ò�—`s2Ùõ Ÿão*øç®Ò³‚=îûŸ±:¡ã™jÈ’“Kù|>p8ú‘¾'•;þÎXRÝB©Ac°9ˆ»Z­§¬²1™L"³k<GöóíÕi|\ôÅå˜>ówžÅÑoÖRˆ~ñ]àƒ�BèÞ㤒ã¦<Ÿ½ÌgÁ’Ø?�¸|/� �‹àx÷÷÷hÞn·?!Ïœ¡Nè8vF‰\±Ÿ!¦Y_Ö‚=éø z ìš¿ …¨Ìäº Ѓü<ö`úâA Nîyfú6=óülõˆ_d( ràýNyÆ 4rÆK³@Y�§-¾—¿�Ÿ‡ÃŒ<ò]à�è›´”òÍgülsœ}—⟬�Öœeì_ÈH‚þwwwç'èµZE�¾óð&ì d(—ËEu&.Ÿz½.I‘Ñëv†Û'¾G±+=×í`ÇÎýÌtYtlŸ–!�¤Çô¶\î1K�ÉèuŸ‡:›ŽJŠz­(3_Œ#6$‡µ”ÍB 56@•ßy²\.ƒ™fxY9Í–³úlúãÆ&‚*=‚Û.ì�l´õz­Ñh$éÁY@è™7›‡2 Ô……¹ä{`‰J©T*j4ÅÊsØ@ÔodÌ wÃxʪGªÀ(³¾lZgF™K9k9w¯^¯eq°¨±ÈÅ0ã²ÇÍfeÉr¹\Ô•d3¥%<ýt½^yè‡%Ž,-)�­V+þîcC6œ¸pÅÆ¡E=LÖ܉7î°a�8`Ù�.ì9Ÿs._“ ’ƒ ‚É/Zã{¼0ŸC¡µitww§n·«Åb¡÷ß?¢ò9¤�Q7’ù™ufÎÉ0Äøèõz!­V+cT8tpp ƒƒƒ`ì]‘ÑG'7€ý IA†”D‚@¦ïñÉZ3�þÝNR²f^‘îÞïÑ#ìÕmÛ¶Äæ@BêÈysgËÏÓ§Þ熪½|ïã×××úÙŸýÙ¸ÃhÛ¶mÛ¶mÛ¾·6–;õüî °Û¹ ‡ÓœÜø�8ËØs8ðî�äóù(åÃw˜7�ãâåòáNJLaK;Ðã‘Ðø˜t �ì@„Ÿmn×b“óºû%~.z¶OJz8QàÀ¶¯je‹_ã%Ö½„M °xä8¾#ëÁX ÜOcŒ)ˆö”̤¤˜ûáóù<¨ú<ò9¾ß׉ß}ý5—7·s܇`¼È«§Ë3~&}óuqÀÙÁþ´)QäöÏHÉÖˆ}Áœñ9L}€àªV«‘-áþŽËˆ�|·ËžƒêNt°ŸR’Ö£ÚS¢ÆŸã€¦ŸøÑõz]‡‡‡º½½ÕÛ·oƒrÛ³bFŽ}_8 J÷$ê› ÎR©¤z½þ‰{ÒØ?N|1v÷[}Ï;~C_ønô¡ÿóï ¤¬øMà$Œ£Px(COÙuJ??þ<PŸsß+à\^ò,ÕŒ‰9æuÖÁŸë¾º7™ | ¤™×4ËÍ}ð"?+r¹Ç’T^AÈq°¡”,uÔ¿�÷ ‹GGGªV«¢b>Ÿ«Ûíj0h6›Eð‚ωg ¤ý¡ÿŽUÐð˜~¿rÉ>aï�Û°þ`YTp"“ÈÁxÇWýõT_ûëì[p¯4è™wyõ}˜‚èÃá0Yá (gÐ1QT˪ÕjšÍf�+û½yžÁÇÎy~K@?Ww8Vì÷_¹ŽD8¦É|BŒA>Ò')Ý–B†ogMÁ×f³Y¬+ßC_ü*ÏòK #¤B’¿ÇÏUt�÷kgg'朗 |‚{$epT'®X7öçS{ %ÚÑ«>W«Õ*ÈS<{b2™öŒ¬PÙ ùªT*ªT*�;S®ýÈÚ‘¡JV�g¤ÑÎÔf³%-�Ü£·Êå²Úív$!07|v>Ÿ«ÕjEÉ:än‡û—à(šÍ¦¼eH#6­L,¿ó)ê鉮 \�ì§FF·+X#‘ ŽRu|7õ ¹W„ éJEÃæD ² ô…s((#w@Òh¬t³ú!�°²è`>Y ŒÁ‰$¾“´Q'ÌüÀá™®\üR4w Ðvvê;¨íïC˜� ÷gÓ/gy9è½æ¯“!. DBl`êüJŠÚ”½äòÊëY*|ÿp8Œùf<•J%jÊÆûs¹\¾®àx6ÊË• ô@vaPøsørp` CÆ‹E5�0’ ”p`óù|¤ãr¡Ê&›9Y¯R1!Á�Eýõµdm¹o:�†3ì�¤ "�ŒƒŒ„Ð-‹Qó�K %Åÿ(% sˆ@9ûÉ @öóèÎÍËjøº¸! €<2ÏLr§Ÿ5ñè)ÖÌ 8Œ1È-ô¢ï+ŒïmÛ¶Äæ€“$}ík_ËC´õz­wß}7Ò}ì�s4b$éë_ÿºîîîôk¿ökº¾¾Ž3n6›éÛßþv�L)дmÛ¶mÛ¶mß[ÍÁ:ÏÐpgž÷q^¸=†?â (àˆ_b8¸ŠÿÇ{l,•JQ1a>ŸGYîËË˰s±‹E”1ÇÿpŸPÞ ±ÅSŸÁÏSÎ2ú…퉽ëà þ¦ñÒ#!ÁgR€ÝŸç@¤‘G"ãß±^|¶2€}vߘ1; Ÿ¾Ïûå¤G 62Fï?Ïa-ñ÷ñ½ ³�“#)xä2—‚Óô3�ǧˆ¥”°s\‚yqb.�c~ög8h焾§ÜvJDü“§€so©?Ègëõzd¾8ÀêsÌ8Xo?Ïå²ÙtŽß0OŽMHY¿Ï‰'”øNòQ­Vurr¢W¯^éìì,î’h6›AŠxà)ØÖd2ɦ’ëqL‹}@I}²CÛ *u\ ]æQº¿SПg¸,Ð_Ç]˜G'—Àר�‘Ëå¢r º3%Ånnn4›Í¢ÚJ¹\Öññq�žqâ{_z¼ÏÍåÔÇæ¯³o=+Í×Ò[*ÿ)ï{ÙusÒ ™uÙwÐeŽ̹ïŽKŒF#år¹Àoö÷÷õìÙ3�žžªÓé„oÄ=Èàöz=�F£À+h|/óäëÆþq`ÜËTqÙ}¥RÑl6ÓÞÞžZ­VÈ!çrãx*ŽßeãkàsæsÑßÏyÎï.C~Þ9Pî8›ôˆÉr&M&“ Ûf³™šÍfFÆÁ†Ð1~O·ß�nqBŒ}æÉà{`™dÏð�úœá)éçrÄñÏ’3>ÁžHÀàóä$Aïž-Í^ØÛÛS½^2Íç›~»Žvœ. ºv]ïûÐ 7¾“gT«U•ËåZ988ÐjµŠ«L¨Þƒþƒô2ˆ777™+t¼/©-Á<§º×ËÂE`Ÿa#qN,—K-‹ ™JE¢››½zõJ¹\Nõz=æ‘*Ln³ … xЃÁ ö3ç ŸC§"ÅbQqÕËx<ŽjQNZ¥ç>:�á\€· i„Br#ˆ wfv‹˜ÍÂÄAÈ@$ Ø® YD. ÝÙÙQ¯×‹ „Žç¢¤n +&Œ:›ïcrAwAAÙ–Ëå`Iý}›Íc�\”’…lJBëuu1R¼$Ÿ“O•J%2r t0ò½î&ëàFc`Í`ÞÝc¾¼¦&ßåãâÖg³ÙDù>pÞïÊ&Xz0dZ­V(¨Ô©Ëçó*—Ë¡ˆ0Ùèi„$J…Ru(BÈ7_KÈŠÛÛ[U*•¸p�±"¯Ì3kˆ¬Cæp¡L=‘ƒ”atÇÕ£®0taÓ™{öYZÓé4³îîD‹Å(‡––씲ÏËår1‡DŠåóyM&�Çcõz½Ož’4�C0„wvv‚]oµZ™Hé1J�=ÄÝRžîÈúp·1s‚¡†B£D ïsCÚ�BF!çü{üàbŸ£ÀÙN†ºCä:ý€üó:%õ¶mÛ~К;EüǬ_ýÕ_ýÔ÷þâ/þ¢þôOÿ4,}Zs{A’¾øÅ/j8êw~çw"+2mnnI£mÛ¶mÛ¶ïí–üØ`i†©|�©MçA�ØÂømT=��>8ÒøN:¹?…_äö>€,¾ž N ¸#ïóà$   v0Íæ”4r ØÁeŸ?L�àÀ?v›Ü[ Ðò'A(íDÁSsJ ¤ã÷9IÈð\Î].™?÷Ýðƒ=+ɧæË×—gøXù~'ºÜ_A|LÈèSû‹9Ç×spЉ)»¯è 8à4wO³ŽŒÝÁºÕj•¹÷—½ÁüxßR|ðøøXoÞ¼Ñåå¥.//U*•tpp �?þ8ú„ŸéeÌù�jŽ 1@kpî i·ÛQ} ùóL3ÈB@D|{åY擵wÙM‰¯§^ãÙà1©<ñ?˜Ùe’‚|dNÁä§|ê§HC_godwx¿R}@óïóóÁ 4ïOªoS}“̾þ<ƒµrp9 ¤æ}`.­V+²Ž��Õn·£ŠÎíí­z½žƒAÜ5�N3ûÆýæŽyEîÀ°(¥å�ϵZM‡‡‡zùò¥ŠÅ¢>úè£ éë †ˆ^G^çD©ôûþ C�AhIXÙ¬3Àûþþ¾F£QTÃáœOïQâYdËpF{ákì IDATæ sïåº|nRüéàà ÎB¿:„yc’@ëDŸÈT)•J™ üù|®ûû{U«Õ¨>äU¥–ËeÜy%Iív[årY•J%ú é�ì±ÞÍfSÍf3Ö§\.gÎ1·YHð <'µÜžàïNä>µç˜'ÏÒó{�PØßß�>øÍÚ’YæÕÐ×w~ƒßýš•”+ ˆd‘ !ðO²†˜ÃZ­¦—/_ª×ëe0m'Ÿ™sÈ$æ€ëJ$EÀR¥RQ³Ù Ý‚ì`{G6”'~pf²ÈãÞÞ^æ^w¿»Ý[†4"ʼnƒ †…fcÈ#‹>zdÈm_{ïwÚø»ï!0E�p`>±­3aOñ:þ#sì—ïW'­ðaYî³Ex¯W฻»‹{r¸=Sò�õóÆw®‡Èz@wSfª^¯«Óéè�wÞÑ{ï½§Õj•©hÃ9X.—#ÓCÊ–gü»ý§�¼îó~¦úב}nýsì)/QF0{‚l0D2ÂÝÝ�úý~Tåá<÷»Âêõº*•JÌãÄv¨×ë±?<ÓÖÏ�\.Wep—kÃ9 )íä÷ÀÓÀÇã±^¾|ã^¯× ‡:99Q¯× ²�3DRTÚÛÛS§Ó‰²d“É$p40V²±ÀONN2ø–cüŽ/‹ÀÌ h÷³ÛÏöš?{áîîNív;1OtY[ŒŸ ]Ȇg±'] «±QЉnI <“}„Þ˜Ïç™ñ3�Xãñ8®Çéõzú‘ùU*•Ëå(=yuu¥Ñh{‚5pYw"šuY¯×šÍfªV«:88Ðáá¡$e’Wø¹ÙlFYKö02Šnq»—²‡n·:VOûÄ�FN±aŸR°^ʋŢä C€Eö¿“y»µZ­t&{ÄY1Od@,wm6›8 Ÿk2™D_¨‰Ü%ÀzC>²1é7Ñ(GJµáh9‘ÉÜBÔ2~” ò€‚æÔ`ç`;<<ÌÔªtÇÏ=…ÑŒÁO$Ìr¹ÔõõµÆãqìR‘”¹;¸ôüŸ:·8ãô }€#ŠüQÎŽµáud€ùe°üÐâpÜÙÙ‰ÙrÇÄ÷:é)c‡�9„Heì�L(ômÛ¶ïÇæ¤ û€ýòË¿üËú»¿û»ŒcñT[¯×úæ7¿©_ù•_ɼþs?÷sú‰Ÿø‰ÈýÒ—¾¤ù—ùÔç|›IÛ¶mÛ¶mÛö½Ûàt@>%ü5¯fàYøœOžIƒÂëØç•J%l|(± ëõzØÛ”›.•Jê÷ûa¯û8°±gS_Ì H%5ð™¥G@„ïð9’‰ ›ò<ƒ×¥,€ÌçÒ /Bx¿BV>Eò=õ³÷�æ$–ƒÃ^¡ãÓˆæ€ùŧʂ¿ß �4úù) ºàvYòñ§I¼¥ò8éÕ@<‚ßwŸ['JÒ÷9áåÑÓÌ3ýK (·ë� Ö?õ‰�{ˆE'ÐèÃÎÎNxF~¼Ü˜Ë’ N¼øº¤À¿gÜð=Ì sÆÏ�žûûûq§îp8Ô7¾ñ�¸_—àHîšöê'ÑiS›Ÿ<Ÿ½Õj©ÙlFÆýÇßö{DølµZ pÔ3ô}üž‘äY é<{`. b±X °,�gó™B¡À&8 øÝþþ~àÑòÏÉÏÌô,•”TpbÄušc‚~6<¥sXüoÖŒ÷¤üïWo8¡É>òr¨¬Ñþóù<.ª/ �CÕëu5�ÈÊj6›�­p·4¥ýg³Yd¡SøçúÆe„uv0žÿ¹/ºÓé¨ÓéèèèH�NGÏž=Ó³gÏ4™LôᇪÛíÞÂuè!?RÙs}üiD¦ëÀ”LBóÜb±¨~¿¯ûûûÀ!?rœ‡DˆÖ„ gIqál6S©TÒx<Öt:U£ÑÐÁÁA`H”ñ‡¡·ö÷÷#CÉAyÊ�Íçs Ýßß«ÕjEfV¯×S>Ÿ�½4 tuu²X¯×u||¬ÛÛ[]]]e‚üÏÏÏ#è’¾ßïk8†mBÙ½««+]\\èöö6î'o6›Q¹Š2xÝn7ä�Àpîv‡|Bî»BØGŽí‚ã’Í4›ÍâL`,à¼ìõô¤AÊ€?‚¥²®$ZPí �`—%'£èÏz½Ž’ƒè-ÀpûÆKCrvAæ`KÆ™3™L43ÙrÓéTËåRÏŸ?×t:U·ÛÕÁÁAœï$TÀ}@ƒq2ßÜÇ•Ïç#À�9`¬V«�eMdpwwWÃáP•JEÕj5xǸW«U$Gx,úÝÛ'POC¹²ðtÒ^CR¤ã3�žÈΦ÷ìϪq2ˆƒÚK& ãzoo/&Ô3!p»©/¸Z­âýš³Ù,>·Z­"Ò¢Ûíf¤Óé„BZ¯×qPú\!`Óé4¾ƒ C¥Óé„Т`=ý…�ñ‰�‘‚Ѱ‚ÞwþŽÒá�Ç!l~èÜÜܨT*…±”¦òÔû¼r�:ÓÏaÁëB�–dÑO¿ï*—{¸ˆÎ 6ýf³ ÒÒÉ,¯_‰C©7Òn!4/ŠŸCž¨¯{ºZ=”ž£ö/rÇs9 aÚQꮨîî.Îue�’ò…B!ØcÒR}ÝØwƒÁ@ãñ8¢,PäÌ!rE456ݱáBf‘=²æ0¦¸sgç±Ö(Y‰¬9k†Bñy¤ zÃ�°Ôq•/Adÿ`00—eCú­ËNûÜïC @§y-vÄ.F ëÂ>e?¤”g{á ¡‡> èÞ¶mû~iœWl’ô·û·ú‡øI�À‰ƒÿYÛÙÙÑ_ÿõ_ë¯þê¯þ¯ôyÛ¶mÛ¶mÛ¾w›ƒ†‰þሉ/â$ ÷’P¾Ø�tlFìPìcl6¢¾y¯û‡ØÿD®W*•(}<#ˆ ÈŸ�Oë%Î=ðÂÁÎW22¤ÇÈ{í<ûæ)0�38%¯œ\’²eì°­ pðg3|<žíà7÷Da33f'ü5ïdýMVøåѰ J_ó·§H˜töÿù^^s‚g¹ïÄs;Óç;XEô:ö”˲û:O�èø|§—•¡ù^r¿Ú}ä�À=ü$ö…�Ò È/‡Hx À÷ÀA¯b“’�<‹ÀbÛð=ÂØœŒ�”)Gˆ<0øÇd�œœèììLßþö·õÙÏ~VÍf3SÕÅË£¯×ëLI<Ïrõ9–ï-"8´Z­Í{Àˆöv@üÌP  øóŠ'>_`:<«T*…Œ€ÃI�•Uëwã‹Å(AÆß‹Åbæ¹?^ŽÏ#Ûݨdl~h»ñ�Ñaá ͘1>9̉”�¨"ë„g³¾‹Å"RÝØ©<@t�b AâLrzXxd„un𡈉ñÈA7(ÙdhA¬/ C›õÀ!„Àô Ãa2�"èÙ³g±F³Ù,ˆ3äŸgIÊÔÌÜÛÛSµZÕÍÍ�F£QF 2ß(4Æ\­V3ã†õùJ �Åb¡�?þXßúÖ·Ôh4ôþûï‡1BTéÏÕjUÇÇÇq¡o¿ßÏ”vãþ¬t?r 0ó€±Í…tî˜!ßÑÓé4½ãiëî¸ñ¿¯5Ž:{âÑ÷‡†Ïä�Ça¤q¬×kdJE®×ë0 ðò}ã‡JÕ#ö˜—Žv¢ _–×¼òÁíím|ÎÉmù›ÛÊ&|—ÛøÑO�Å>�6`ø¨€ê¤•¢©l:à¶�¯¥$R*ã)Q‡Ÿá¥²ñûè/ÏõL!'½RÃÁuŸŸoÿ?]Kÿ>dÙ3WØ?Ì«ÍùžJÇïÕQ7Á‡dí™S6¥ Ö³.\>ÝovÙ(ô=Áú€¡pÄÉɉ�†.//5 ô™Ï|&sDZۻ¬„Yú½Ž�99áØws{•æ�9aìî{94ÿ 2Åk̇ã Èë@COt¦s~{{ëÍ|xV˜þ>z1 §Oiö�ìoæ�1@‚9ÊÜøÞr�îedÞvb޹�Fzýúµnnntqq¡«««À #(;·ÙlWÀÏÃÊårj4:99Q§ÓÑÉɉ*•ІÃad'@Dp]kçÄ,{9q}ïd½¤ÐT½)•Jj·Ûz÷Ýw#Ëè½÷Þ‹ì 24Ä�¬GŸ8Éèó•Êzº.N¤kåëà:ÅÏ%ˆ›jµªF£g1ºÌ®×ëE€/²r{{«f³©Õj¥áp¨‹‹ M§Óȶ ;é«_ýªNOOõþûïëòòR¯^½Òùùy`�’ôòåKõû}½yó&H–�� ‡C)Õï÷U.—U«Õtss™F“ÉD½^OÝnW£Ñ(®Û�Çúìg?«ñx¬«««È#KiµZÅ:z‰°Á` ƒƒ½xñ"Î\ö'ï›Íf1'ì£b±s))“UFvO­V‹;˜J¥’êõz$z€Áù9G/ç=ú¤X,j<«ßïKRæ*dÖåœ|—Ò�|¶R©èêêJ|ðAú³Î|Ù… !à¦\.«^¯Ç�\A�ˆ®ÌårŸÈbÜ.¢¤Ä%ï£Âß6Íš°fëõãÝGdQaÍ3ªü ó2vlÂ}S³Ù,ˆ»\.cÞÝÝÕ›7otzzªwÞy'“­*)ƒQúxÑ9)–“A39ÜØè|) Éa;†Q#Ïâ6#L8l&eÅx>Æ;ƒ§/ñϦAùH�õ)Qróù\¹\.RôH l·ÛZ.—A¨À´rù"}ït:*‹Š…æb*ßtnÜâdph/—KµÛíŸ;2üŒ¢öšår)…n•BÿØÀÔ¥tárÀCÃç�¹[­SÔx>„‘ä·“Yiº3ýçòzÙlX”‰g!9à(l8–Ë%BÏ{�ÁZ­–‰ü@ÙpWNš•Ãü§€?2…L2.È#Ϭ‚LƒlÄÀØl6ñœÔYãÐæ@s§Ó#!‰¹¸¸P¿ßeÔl6ÕétbÍÔjµâ +—Ë‘™„D6å‰fšÏç*•J¡©‡‰L:”Fr±—...2ŽÚááažìgê“¢?\Ç ¨8�<*™od‹µ!3ދ߆Ãaì[ú6ŸÏãûr¹\” ¤Ü3^d‘õJ³ˆÐ•’â�ágw¬ ·mÛ¾_›;­¯^½Òÿú_ÿKù—¯¥$ù¥¹éQ›ÿ'ÏØ¶mÛ¶mÛ¶ï¿Æ™B¾;ÈqŽïá¾vvX³Ù gÙ�YÞ „*•Šf³™ƒ��F€¤øh¶â+®ãOÈ`ÇÄ6 ´\.#p [Øï¢Å' H­V“”-»'=ø àGPB…9ÀÆÄ«ÕjÊ媞PŸ¹Àu’+õµ$ÅýžMEÉw» ªó`/?é,LÁxüO@+ߥÇÿži!=V^`!ð(Þ–OÃÖÇ^w‹ñûœ8À ³Ùl¢*J¥R ðloo/ªà§òúÅ…÷Ì+ óæ~>à=rJ? Ú%’Û‰E„¸Œt› ‹’ë»»»qçÁ|dáûàû‚}xЫûÏÈ`œ¤ÍðyYOd‰¿³¾à>i¼pÝ1Ö‰ýHfˆâ\9Ðh4Ôl6õñÇëüü\½^/‚ ɪ×ë*•Jåíþ*ë˾€�‚ ¾¿¿�2C'''™J5Ì8û¸^¯‰Ãš ‡üNôR¡Pˆ;�ÇãqÈB lËü€Ç­×k}ôÑGÚßßW§ÓÑb±Ð`0Ðb±ÐÑÑQìûëëë Y›ÛÛ[½}ûV•JE­VKÇÇÇ™ÌÖŠ5fž�u8¤)z=ã˜òÏ|;ÉÇš°.œ%à|RFŽ_Izõê•>üðCõz=]__ëíÛ·šÍf1æn·{l6›i8&!Øét”Ë=מžžFÖ à4˜ g�W°AC>�g:.ë�íN`¯×•�Ž��£üÙóçÏu||¬ÃÃøË&}†ë]ץȸgÔ¹^rYôjS¾ÿYSÖ݉i_GÇ5Ñ/³ÙLoß¾�uŽ/Ì=>Œ�ë'Ð[WWWê÷ûZ,ª×ë:==Õr¹T¿ß׫W¯‚ܸººÒp8Œ 2�>üðèBÅYO¦ÒÕÕUè�Õj¥o}ë[º½½Õg>ó™À•^¿~­^¯§ñx¬\.§v»øêG}xùl6‹ç3×´���(£÷á‡j4®ÍZ�AÎçóHÊðó¸Ñhè�wÞQ³ÙÔr¹ŒL*ð[æŒ2ŠŽ;B™2®ú€@ó³yÄöáN?K9‡Ö뵦өÎÏϵX,b×jµÌ¹ÈküÌY 9 Þ‡}�ýÀùΉäÜoEŸ¢#‘Ul&×#Y¥R)>ëòÎ<¬V+ U*•(}LR™¦^éöö6J#¶Z-µZ­¨0…mP,Õl6CÏ9>Ëœ²·—æýãñ8tïMƒä)ÝÈ}H¬—· i3‡ @Ê <(Ï á^€]WDt að(1”-l;JÉÉŒ,Œ#9„áBx<ŠˆgP¢‹ÇØáV0ý&žº&=Ö_ä Fˆëõz² éÉFpã“Ã�씨G5y€o>¢h¹\FÍNJvHRD„�" I€Qȼ¤$ Y¤ 2~;ÈHÅÔpL�qŒ&.¡ã5šGz‰Œ˜øÍf :2Úñ';èsÀX0!3ýóˆ(Öm¹|(‡1�NµX,â By`S ýææ&˜|Xz—i'aX;”/D#ŽïÍÍ�Ž��urr¢|>©¨È÷z½Žç"çÝnW|ðAÔHEֺݮ®¯¯#ºCÃÆ× †Aï{Ôe¾Ûíf}œ&ägjwwW/_¾T½^ÏdWaäqK¦=(>îJ#«§Œ“ýý}�ÇãÈœ‚ØËårq  ƒøýàà ú‚>ÂøÆPpÃË£pðöÌCôǶmÛ÷k»¹¹Ñïÿþïk±Xè·û·3Ž/úKú?»[È£bÝùÞ¶mÛ¶mÛ¶ìæÉ)XBsâÀý?||>lZwrñ?øœû…÷÷÷j4Ÿ¨îàŽ2>Àœó‡I)ðóû¤Ç{Dø6¬�ž³“¾ÐŸÔ7tÒ‰ïñ»<‹‡ïô AŸWÏÖÀ'Æ7e>ø¼G¡ºoä$Ij{p ßé>¢“uþÏ}yìm䂆à»?E†9HÉ\"Þgú›Ú2¼Ïç�÷0ßeìrDÀWX HS';Òqó»cŒ‘q8hÅgðU=Ršq¸¿Í÷æóùXoö—Šúx|Ž=’ßñ_Pf¼|û†€Mß«ZŒõ)=€Ê\ºœ³ÇSòÎ 4î6Áìv»ªT*yÆ·ö»¶Y{æÀåÓu™Žü֛݉›› �˜_“!Mòù|†è/)Gÿ Ÿ½OÌ$Óýý}=<Ë�è3î9¡dÿýý}dJàû³>Dö;~—Ê-ë‰ì¦®ïe¯ÈÂ\£7Ó@QžëŸG÷!_�qå“É$ÆG6Èz½Ö›7oôöíÛW‡Ãaàà`QÜW�­Õj�ær¹ÀdóÇãq”¤”†xeNÜ÷AO@À1^ô.D2sÝh4t||¬wß}W:99ÑÉÉI40ì1?#uÝÄvB�¾¹^}JoúÚ¦zÔ×Þe�=ŠÎ"¨ß gä˜à»»;Íf³À�ªÕj€ðãñ8Hýr¹¬N§ú¥ßïk:�êÕ«Wº¾¾Ž»Å[­Vd���~Î8ŸÏƒTr?�´»»«N§÷â\]]Eé1JŽÇcu»] ƒ $}ž}^X÷jµªÃÃC}üñDZ‡¨q¼ÝI ôÏÎÎcõ$ö9ºÈƒ­Ùgè:ß_éYMƒtK#c l˜²{Ð#;Œ�Ò{ì dûÅ‹ï¸nw`ç áåQÁ†ÑKèL·/!bО}Cÿ lGþ�xæ,gÜŽà¹Ýn7ÊA‚Kú½B¬-Á x²³³£z½øçx<øèè(Î�Éd$ß_(‚ãà¼B¯CŒ¢G r{.%ÁÒö‰ºI¾8LÂé7†“�Â!“ˆÃ�÷-‹È „ïwå‚0ûÅ '¬R©Äæóh ñ��‡ú’ü €Û#¹è£gáðÃò¡ì×ëu†mô²<áòÈ„Þ7 ߉±@” sÍAã?“…åÄ‹3NœpaÏt’ƒÈ1žë%<�ßPO”ßó<-›±SþåéN„–¯Î’è( /ÓÓÌ8×ëudA®, 5�OLÈ9ëîw81'q“É$¾¹šN§ªÕjqM&Iå5ÏÆÈeì(šb±¨Ñh¤õzéÑdÁAðx©?Ic£o2™0»ÙlÔï÷ã°L 3"'}?rP ‚áI„X³Ùü„Ñ�Óé©Ýè” ÍIFæŸõb�ÙÈ8¤Æ—â<‹ÅÈ~º½½U§ÓÑt:Õh4Šˆ ¢Á =F¤@½^—ôàtT«Õ DæzÑ÷²¾mÛöÝlidŸïA'­Ù‡èòÁ` /}éKú½ßû=}ãßÈŽJ<åüWßÇ9üßyƶmÛ¶mÛ¶}5wV½,Ñ×=•µâ _ÀmH¸±=ŸÓA»»»»¸+ÔÉ'•ðE‰x-‹Z,º¿¸?ŽqÒ/ᄯ²¿¿¯áp?{Ö½ÿî‡áWI�€¼ga‘…�Oã~ѵìáÙ „�6 IDATþŒÍ�-Íñ9S| %R@ñ)ßÅg™;_WúçD\ê«î¤óŸ·8(é²Äw¥¤ˆ¯^‰ƒ5Ž1HYûÈýlÊÐ0'ûûûáâÃy8kìóKO*ß죔eìg›@^|O9–áct"Òç‰}–îGŸO"ÑÁü9©�ìÂS¶¦?—÷BÈà72/¹JR½^×ÑÑQ”cïv»±N.7N„a;ÑçòN¼—?"8ÿ¹„Äpœl:�ªßï«ßï‡ÎƒìÁÿÎår¨ÍØ‹Ed0æf³D#•h‹E”ÔZ­VANIŠ 5ìy‚/é?`-¾½_YÀzx5"—#÷7Ø/N†øž£¿�2ìžÉkN ¸Þáu€QÆ5�bn‹E¦`¾W¢â?èžÝÝ]Õj5�žžªÝn«Ýnk³Ù³\>”c}¹÷†ýI�+ëèz‡ŸùNŸÇ&“ãùóçzç�wôüùs¨ÙlF6H.÷˜�ëÏe>'8™±È:�sùg^ØNÐxí©ñ¹¾õýí"„–ëˆ8·(§xxx¨Õjûì ÜyàN¡�>úH½^/ÎìgÏžÅþ£,!•°:�ŽnnnôöíÛÀ˜˜;ü×ëëkM&“¨èÃ=‹ÕjUGGGÊçó‡ñ\ˆVdƒ9s[†Œ4† ÑÉöô,§¦JÑõõµ®®®2ä$Ïfó¤MÙ5ä<‚˜½Ûl6Cß@L¢wʳó³[R�kœC‹ÅB———jµZÑ'ÏB&}4EFcjç27±3—`ÉÜ}·\.5 "à �¶É}š;;;!‹�Kd_¯V+ÕëõÐÕÈ�gƒ‘s¦ÜÏï-C‘M3å7Šß��B¦ƒMÜ÷ƒAE'‰’€DH8LH‰M7�_RˆáíF< ÿ`0�$µZ­LæR>Ÿ×l6‹‰Æ�F²ñP®” @Ø=ÝA%E �™çxZ6ÆŒÅ~Hº`ÁfKŠçA5›Í ¡àQdÉÔëõØØâ�€ìn8Cº�iCŸ=*¦ÕjEÚ°Øé˜ø†ŠGÕ¡àý`¿¿¿�¨ >ƒÌ1/΄ówwbؼi:»Ë‚æóù Kø�ïòC95 G¨ó aê¬9dÖt:�rpd%-—KFŸIQÆ9ótÄÛÛÛ¸O’¾öµ¯…$cÉ#û�eÆ‹2.³ìx�½@I.Þsg�ùd¯K ƒB‚åDÍ^7ÐQîô«ÝnG}ÕR©—ʹÃKö¢+lgü=Ú«P(Dš&YT¤ïï\¯×±F³ÙL÷÷÷Q.²Z­fJÙ ‡Ã &=òe³Ùèää$¢“8x<2‡Ã�}ƒ%DZ­ñùÒ ·årÁa“É$ȯH�ŸÄùË3S �s×ýmðËÓ2òÄØ{²ƒÜøø/ض^v � Ûçßýdïk傼.=‚d)9$)ãû:á_l6›Û×ë‡rQ”¥#šÖI0ŠqÒÁû�Ê’ƒœNJž9øOio0€Éd>k^(ÜÌårqwÏ|£¹¯L‰ Iìƒ~z =NZy‘ëéóí¤ò ^©T2þiºßÒyt§l�¶:Ñèþ¿^Dìò“î#Ó :ÆT.—u||¬ããc- �ŸŸgdÝ÷zJdðé÷m3�`ƒÁ H—n·«r¹¤äøØD¬s¹}·Û�þ²î<›u`î÷÷÷ãŽ!ÆO5•jµŸ…—»¹¹Ñ`0ˆ’P›Í&“Á$)Ì"#�F€ ®{ŠŸÒã¬Á€—ü�õe}À“ÐQŽå86É܃!BvÜJ0(Ä�W1?3A¾é›—ñ³h4:==Õ{ï½§çÏŸkgg'Ö™u€ØûiµZ±VàN¬¢+ 4ìC!Ð9—ËEÉ9ÊÐ=þ\§§§q7yÐÊÞuBÒˆ¿ƒ¡"ßNH¤d³W…pŒÃ÷ ë�T\Ï:>äÁ ~W�Õ …�ªÌ8èOVëxxx¨“““À�(;Æó);xtt¤N§„"g>øv»ÝÖýý}ü}ŠŽ˜Ï纸¸ÈT}"PÒH’ÎÏÏ#˜\ÊqNÆ€üp?¹¤è3šÌ!û�~#»ív[�NGGGGúêW¿ª~¿ó™ æ|yyÁé…BAÍfSív;2…�ˆ Ö¤Õj…n%â ²‰Œ“=ÀYÉyàwQnûÆu,DIœcžá —A�óÍiÆÿ^¦ ;Ç1Q'“<™ƒ²ˆ^N´P(D CltÄ,ûæðð0ô&g":˜’vÝn7îA£*ÄÕááaœ+~Þº�Ì5%¬¡7·¹Ü†ó½ë-C¡° €|”5ÈS¹ +|R9œXï—æqÀ¾zf †îÊ›ÍÅ@a ýð€É¤t©T @Ú�&Ò…‹~¸#ã³A6L0Cß�c'¤<†þ¢Ä™·F£JÉ3žp~(»…aqzzš!Y$EF ?;xH¿ønOurËëmºñ‡¢`Ž8Oé¦_’777‘Eä‘;((7Ü õ×Ói4w6œ8BÑpP¢ø™w”2Ä}?D7 @y&Žƒ+8^8] ›Í&È>æ#~³y`ú«ÕªvwwõÁèÍ›7j6›º»»ÓÅÅE†° Q®n¹\ªZ­†R`Ÿ!ϾÙç’¢Žª×ÊÆøáž/�¶ %Š‚‡UçóúDÂPïC¶\.Ç{pðølêÌ“rÏ|¯�E*9äiÍ8_ëõZ�N'ÒÒ»Ýnè7²¤ Ê$…Ñí†%!Ð`ø©MŒ1‚ܣߘûmÛ¶ïfóÈ"'ð%éììL«ÕJ_øÂôïÿþïúÆ7¾¡étºnK|nÛ¶mÛ¶mÛÿTó3;Ü�yÎülm¦hn—û³�¸! Ë+=xE„`À¿qàÙɘ¤v°YÒ'|UlsìL>ƒmïÕ¼¬�gÚc—{&€o¡PÆ#sOÜuRKÊfç\y�ìó12·¼Îóݾð`>6üŸ“†NH�åçx½Z­xC¦À ~I ž¤òBó÷¤cõ5vPʼn»Tv]+hwòŽ1ñ |g~ MI7@s¾ÃçÎÇåk�•’3þ™§H#ü>¿C‡;µªÕj€¸NXIYìÁq°/¹ÆX]¦<0 ?ý—F�;ÁDäŸÇÝ»1n6› nV«•úý¾F£Qd£Ðô ¤Ë2ˆü€¯NÂ�º¿‹_>Þù ç�œÈ9~¶c"¾Ž|¯ï>ËϾöÈ?˜"cJ \ž @Œ¾"`—¹õ+ºÝ®Æãq|¯ëq|#ôÙT§i·Û:>>Ö³gÏâîèÍf£Ñh¤^¯§^¯¸ãÍÍM§#ˬ g\àXÌ-º�רg�Nív[GGGzöìYÜW„¾ À15×{¼ÇçÂõpš)è€tŠçº.I×< ñ>@n �H O³hü0æ•ñ�Çã�#²J! À=щì'SxrÍžfíÀkµZ&C“ù"Ó�y=::Òññq�PŽU"/dOñ}dÃn³ã¿cœ¾?Y*"A8q>ïïï«^¯‡ìB�yæg!:h¹\ª^¯néz�yF÷q• ë .v ±Ä9Cö¯°.`˜”�ó¤dý½Ùl"‹h4Eæ9ÙžnÿxÐòî¾oµZQÚ—ÐÑ ïv›8Kx·Æe/"£OGÒ!ç0ó{F …B¤ÚR'ÓÓ£ÙÀ(n€W6A(E6„!ÆÐpCÆÏ y¥˜’$L> î׊®>cñ Š‘“ïF²äD |0�~h0f€ñ»»;5›Í8ˆ\!a¨øÜ2�$n,“±%=ª|&%<ÓË# \�1v?@\ù{9>ˆ>¾Òˆ4bÖ’ÍÇãÆ¯\¾F=Ê‘±¤`>—C²ÞD „� I‘. aèóÁZ¡ôçæŠy†"°R©èèè(”ÞS 2 ‡AËF~±$ ‘Õj5Qj°µÁ¼SФR©¨ßïGJ33z‰(0²)9˜˜o�Ö!‚ƒÊ#·mÛ¾ ½æ¤Q¡PПÿùŸëêêJ¿û»¿«W¯^ÅûäÙFÛ¶mÛ¶mÛö?Ùü\qG×AR''œ¢áƒ¤@?Í žÍYˆ] Ù€Oâà~zâw¹O„ )=Fæ;ĸðEyO­V‹ˆQ"v!´˜ Œ,Hûè–_ò¼ô9,8èíÏáµHtß×3Š$ô÷¥A‰Ì k�>ÓŸá„b½^�ÈèV«þà»OOŒ.+O‘�’úkîÃÓçÅbd €ý`Í£R_ɉ/äGöÓàI'�‡DrrÊ}ægqÀ×ýp°ÊzïïïÇý?Åb1Êð°>üŒLù^ç{ðCñu]æÜŸ›ÍfA®"ï ËþBν$�—dô@@Ä^¯•DJ¥Rdýø=G„£K XX+JU]^^6Á](÷÷w©A\�F£Ð!dŸQ¥›ŽÆ¼9YF_ØKøòг¯\§‚•Pf‰ýÑìAá©Nåúè:/Õ½¾®Ž!¹nvò|ÄDØ™g]__«ßï‡_>�N5ŸÏ£ØFª—èƒg· ßµZMív[­VK�NGÏž=‹ýÝëõ4 âžäb³ÙD F'¼y>?;9â(�û’ ŠÕl6upp N§•gXc'8“RR=EvßÏ>„$u’Õ�múçdŽ“\¾æ4tBz6°/yÍI#—SÇk=¸»ÝnëîîNƒÁ@WWWqŽ:y‰N‡zûömstÈZ{õÈ=î¡‚ðå™àÛ…B!‚­=؃¹u"‚1¹¬xÒýƒTä{Ðe„Y²³³“!�r¹œÚí¶*•ŠºÝnà”~†;±ÎÝiÜ ï€`éèwsí9K/EÖ˜ È{ˆpÁv»­b±Ø$²‚]ÄøÁÒƒA$@¸û™ÈšÔÎ?¾]Ç>ÁÎB=‡@"t;ò ¡ÇúHÊ/···Á5 ‡Ã¸Ú‚¹sÝ3›Í2z=溿Ñh¨Ýnk4Åó± Y7d�~À»}æ�ýè#î`CžÁ„Sì'C‘V))J�¡°é$`8q#žI‡DH9@¨+š¾î†‡ 3Ë ùî´ž/JŸ iµZ™×9”�½dsºÁ¤z¶‹â†¥3弯„çóeª.//µZ­Ôh4‚ðµñx‡( ³×Z¤¶*‚Êyšu:Éæb>ùŸ¨7¼Ýábƒ06�–ChY[ ”l»¤¨ƒêuQì�|< '�É9L£WøNæ ƒi:�Æ9~¡›¤0 Ø@<Âe‰1�¬C^büC‚år¹0T1&é3sÁ�RÈ%dËx<Ž(—«««¨Úh4ôâÅ‹È*bm!“¨gypp ÝÝ]½zõ*XÿF£¡çÏŸ«X,êââ"ØzOÏ%E�ñ`<µÛm5›MÕjµ˜sÆÃ|O§Ó([çÛýý½jµZdVaxrx�Aø<]Ô£;]árør¨J�ŒNÐíììD½X� a=HUö´]ö1Ä— :!ì{fŸÈYtYD47ZG£Q¦l‡ ϶mÛw³íììh4i0¨X,ê·~ë·ôÍo~Sÿñÿ4θ”½£ð©ˆ“mÛ¶mÛ¶mÛ¶ÿns¿1­ô€ïòÈïÎ-K'~ÆÞt€�çS�À#gý{üøbØâDõbÿ:PÊϸèDýÄgÂÿà öôúû˜uߎæ–~Ö{  ]že�f78àšŽ…ùwÏûâ`cJ ùz¥dNz¸ ùºPÍ€’q.O}��íÓd+õ‘}L>Fï;óˆ�@Vþ">åÝÜÎr_�5#ªØ 1úSr %’||þ·t- vÒ´Z­†|W«U­×¥|bLN::Æ÷jyd>Y%àMÒƒO?™L¢,¸ëöåÐ ¢å»¹ˆÞe™ÄOæûxíã�?ÖË—/# ”€OðÏ\♀ʬk¿ß×Û·oÕï÷U­VU©T¢¿è"g³Yø´t � ö♆ìoÆ ¦å{Ì‹µŸpb�l䊲ƒ^ÙÃIËÁ«Ðmøÿ¾ÿ#x”“ÊîSø9�Âï._777º¼¼ lãúú:ÖåêêJãñ8æ�בQæ(Õ)àœ”¬ÕjªÕjQ¦«Ýnǘ7›MS^Q‡½Í]É`Fà¡Oa)™Âxóù‡Ê,/^¼Ð‹/T.—õþûïëôô4ªËp¾8)åú ™B?yV-×`°ÙGÑ‹Å"ð ×÷ÈqJø#�Þ\�¸îu™òó#%O\º ±Ç—Ë¥�†f³™®®®ôæÍ›(Ó×jµtqqºˆ;f¸¦€ ŽñxØ€¹ßƘÀqœˆf>¸n�÷2‡�¹”’ô³›uòdȲûûû qY_ª±Ö.Ü߮›êõº*•Šnooõúõ먪ƒ®‚ü'«¤P(DÖ��‰õg_Pébe<‡¬±Ö¬e稸ƒ>@>)Ÿ ; Ôh4T©T"Û‹ìšJ¥¢f³©³³3U*•ÐMÌ ²èç0û�k4ã÷}')‚½I`¯lïå1»Ý®†Ãa&€€ñDâûFR஥¯V«¸·nµZ©Ûíêôô4¾‹ë3À—;�N”¨œL&qžrfbC8A¿Àßg³YpÌk†Þò¤ï?-Cq1I…B!È Ò=…ÀÅèÊ @=ŸÏk0„âDðXt ˆÙtlP7н>¡;Næ¸`rXSŠLÓëØz‘¦(e„”ÍÁØÙ¼,F£Ñ#/—ËE¦ Öç�ˆ?\ÝaôÚ·»»»êt:¡Ì¸„Ή9ö‹—2dþI� ±Ž“ÉDËåC]Ûõz—á AöÑÎÎŽêõzˆÌ7l2ý¾¹¹Ñl6‹»–<•Rz¬‘�¢†¤q2„y [’2—Ë…¡‹"rÃ%Í÷¹1âÿ(ûÆÅ‚ÈšGGõz½ qÇÞç "2†ïbNšÍf¬-ûa±X¨×ëiµZEĤ8ûˆè2 J.1¦!ó‡î�Ç!�~à�†ê%%ˆŠ r‚ý¸m?\ÍA~v£ÆÁ‰ÿJs½Ÿ‚ŸÖúý¾þäOþDûûûúò—¿¬/ùËŸxOjð;’‚!Û¶mÛ¶mÛ¶mÿ͉·-Ývu?ÅϼÜ÷ן:¯üu·•�PÀ§ð2©íà' åZÈV"ȪT*E6ŒôØ8àPëín›3œÉþù Äÿs_ÎI>ë[ì9yqàäXJN8xâ}óÀM÷ÏÓ¨t÷Iü”ƒù‡„¯v¯Éd˜U†Ãa¦¼®c OɈ·.gä:ë 7@<�g‹±î�È÷  U«Õ¸ƒÅ}æ„þ ¦á˜ 9@›c%øc<Ÿæ*) �첞Ž@pàó96Æ?�Çq<>å|ÀFÀ ðyW«‡»Wz½ž&“IÜâA´’[¯×QÕŸ,Íb:;;‹rIàËåR½^OÏŸ?à˜ %|€:˜ û’¹ÚÙy¸—ReGGGjµZÊårq_.ëV*•T«Õââñ””�xfMÀÈÀ1 M÷�¡àcòèS0Ö�1Rn�HsÖÜÉI�`Ë]Wž¶‡ïN?è«_-á$øfóxÅÄp8Œ;ã?ÏÎÎâúŒ«««ð×ɪ Ÿ`Žñys 9h4êt:dë$´cE` à`+~ÏyªC·„œC~�U²]ôòåK½xñ"ª²4›ÍOìGpäårá`9ûàŸ÷"kÞO×ñŒ‡`t€ï/×µ©~w_l2=Ï £\çòÏA^9ƒ!|ºÝ®f³YÜã3�"ØØçáèè(ÈQ'g|O¸n—ûŒý„.á¬?<< Ù3ãÜýßì½ÉndYr®û{Cwzß’ôh32+Õ”¤*M$AÐD¡·�ô&z 4Òsœ� U •YÙTFƒ�ÓûŽ�7w@|ÆïŒ<8:¸ÀÕUî"‚tß{5¶l™ý¿™­Õj¥|>Ÿ НŸ+È•� ÒÁÎèûùv[¿Ûí� 9�Ü�QyfO¥RѳgÏb-!%Ùþ6`󬤨Ÿ)œa�FC§§§‘±Cå-æÃ 0ΟöH­V‹ŒÜg¯ƒý"ÿžU é~8Éì’ Ø×»Ý.Q Š>ù¹ëú²ÈåŸ3â N…³’5º¹¹Ñápˆ«Z\Às#v'ºf½^«ÛíFÒO½^�}Ë3—Ë¥v»�ƒA`äÞwI‰ûÄÒÁ?´’Y©TÔétB�8€Yh„˜‡p¨�•Áäú�Äbèt:�˜UOÿ‚¬àptV›C$­(QÚÁ²Èl&XKH 2dP²4Æž+J„•w H¼" ð¸Ñh$Œ'd$E&ØDdd±IQÐÒS€ô”²œ6äQªi‹cÔ±y\˜9ü’/ÞïY^lhw,1§¤�2?ùþ°›¤u6�Z�ÌðCŠ÷"ì%Èl=2ÀF@q`|#C¤½ßÞÞFÜûû{ ƒH/ö;äÂI5¢Öëu�~ìJ�k0Äç™w•ô˜íW«Õ¢Ü`·ÛÕ«W¯‘*tív;oÞÁºyªa¿ßOdÖAv¹Sƒ¬p¡<óŠS‚õˆ7B1„™{œ%Ï@K;¹®+ %™ ¯ÌìC †v»­jµªÙl‘Nôo6›…aD)HÇn·Ê”ZÀŒ"Ê“A…³T*•¢t„Ê�5–”8L³ö?¿9áÆ´;àÿÕç¹1ŽŽ$ÛÐ[©TÒ¿üË¿è_ÿõ_ã<ù÷ÿ÷ÿíóÓ†Aºÿa”µ¬e-kYû³9øîç£W逛�ýRòΔt”¤ƒvXy4¨ج°èAƒüßß›_ËìYüA˜ñx¶;ïñÎÿ·Gã?c÷;@Kߟ“3þoæ/M¦9©”þ7ŸóI攟;Pìkçd Xî'ðo﫤 $ò�†¤GP¬^¯GÖWZNÒ$’YiL�ÅÇ̳}J>O�&ú•Œ¿ ÌÌ Âì‰ì�õz­ËËKÝÜ܆ÇÏ!v»�¦Ói¬º®óÓ™xiÿ¿ ×ëéìì,€\d`³Ùh:�Fæ�Ì�f³Ø€¿N´³fÌ+{Õ³?:�ŽÎÎÎôìÙ3õû}u:5�ø>$3ï`=œŒK“¼Nˆ³þ`7ì#ö'Ø�ú~Ƥu£ûŸ.N¥‰h~Ïùû1ÒÈu�c´<ùöò­Tpº½½U½^×óçÏã ðG~^.—5ŸÏƒ´u}ã$*ÿ¾¹¹Q¹\¢œ‚çôôTwwwº¼¼LÜÕ†>ð½åg…Ÿë¬‡g9­V«¨”sŸ ×óù|‚ ò€ƒN§£Åb$ªŸMØ.†³'Áç™°^'Ñ 8XÃZ­¦ù|®ñxœ°çÀÐr¹§¬'jl&'q�?Îsô’Ä£OÑe.üI“ŒÌ/ ž´À\CLCKJ$0ðLÎÓ4‘šÆ±+•J�4�kŒ‡’ÈÔ‚è!X mÏò;(ô}îv»a/D�œ‹Å8·)•ê0:Éy?o¼%¬qØmï0�H枺Š$b?=`&ÑÚÅb¡> ¸Ì�0Î^RŽMƒa΀ÝH÷Ú˜®¸Ènâˆ¡_nÈð\6œg“8±xÍý)((\Jj±A!<80\Љ¡ž­GÊ8ñãe»œugûa‚paŒ"øè(fÖ™¨ ÒépjX?�R©õ‘æ™ú�näº2r£�9 m6ŸÌ*¢æ0B©‰RölT�ÎA‘’ùCù2@~”€ßyõðð ÙlŽ–×®„ ÂHÊårQŽpµZE)»ÓÓÓX7ȧf³©\.¤ ¤¸ë‰²tžVýðð ^¯§f³©ëëk�F#-—ˈ€™Ïç ò•}Éœpø‰Åf^˜3¢#PjÈ<‡r´Z­¢ ›gÝÀZN§ÓHíwƒÌ# Ø«î{ŸTóá� IDAT<ÂÒÉ /'³ü Åx¤´%ά“áèJDºKGnyd„‡ë� aë¹�äßIƒ/~Þñs�®vðÔp~Ÿ>›Ó@ˆ×“'è�òT­VK’â^÷ŸýA€ôŸ9S‡‰õK“Ž|Ÿ¿ñƒ6›M‚$ñàÚF£¡^¯ä5€žÜÍŠÌy5 ©Â�Óï÷5�N5ŸÏƒ(p’ŒgñúJÿp2@”`?¿s×}-p0 ²éÜ_(„ô@ÂápÕ>ðykµZ€ñËå2ÆÅûðOQÁ6ðYݯÆ×ît:�Gzœ ÑÙjµ4ŸÏgq`°–97 €?ÜKì§õ#ûÏÉ äÏË©¡‡ÀÀÒzÁ÷ùf³‰R_È ú’ñÐ?ôzž 8?dÛ£þooou~~®«««È:" —ýΘ?Fn¥Kf±¿)óI_���urr¢³³3•J%5›ÍÀ¿e©ìB”~ðd|à@è.ÖÀ‰ôÌññ±šÍ¦z½žÚí¶ÎÎÎôâÅ õûý�óããc-‹Df.©èÃþrr2¹tâÀ1ä�ñ€g²§ý|ôyußÖ1Ç4›>/\óY_3ô¾c¤4<Æá™e�;�NG/^¼P£Ñ<‹Œ v»%#«ÕªÎÏσD¯�ÄÀþ’¤wïÞ©Px¼·<9—˾Ójµ¥4© … yyEög7:ƒqBÆn·Û N)I&=e=Q™Ê‰æ°X,j2™D&‹´¬×kE6 $¨Ÿßì Î ä—ÀÖŒû…¨àÃúAp±§ÑYè~ä† mØ_•JE­V+ÎU2™z½^”% �yƒA7#“Øãg¸4ÁàÈ€¤8WØ»œmüÎÙIð=`£ÑˆþBl³_ v!yÀ?KÕ6¸pá\.—¸ö…9&I�~#«¨÷Â99êY¸|Æ÷ÛÇlµi„òB(üÁn0ñs66›ŸMæ †‘ç¥ÌV«•Þ¿Ÿ¸? áAù‘¥ƒ±Â仲%Ÿ¨Wà .ü †A¿d�MïŽ Ê„@s‡ %øPŠEôˆ5„–¥B�Væýc€Ÿ+@uWÚ8_lêj²aOdey�“6îD Ð‹EÔ÷uga½^ëáá!ê'“ºír†Ó‡ÒfìflpÊÚÅå#<Ï3˼£³ÒžyƒQCzÑc�½^Oår9Ò´é+F²ËJ‹Œ6úh4Š´dÖ…�Òe]›Íf"*�¾BºáÀ";Œ©T*i¹\j6›ÅœúEw<³ÝnÇáêÆüáðXŠÑ �bã7j %¿@™ä0c/º 9‘Í~"ª„ƒýÀ}Q(döÎ&ÊÒÉ/‰à{#Åà$…Ÿ9ŸÏU«ÕtzzªÕj¥ÉdòMdíÿŸm4E�m?#·Û­þþïÿ>öZú@þ±–Ïçõ«_ý*ŒÆÿ]ós =á�µ¬e-kYËÚ‡æÑ�€:”wòì |ì¼#ˆÒNnôÇFsBÈÁ»�ERc'z Átî�HÉR{4¿wÕ�uH•¼¤¾-à˜G¤c‹ú�Âîôc¿“E!)á'a¸_ŸÜJû×þ,~†�ïÌx¦ïÃÆN�y }cüyNª0èš&Y|=½?øh¬“ûüÈ©ûV>øñ¬~3kq{{«f³U\À ˜'ÇZr¹\J‚3HÉ EH˜@Â�$È�ûX¨š±Z­4�ÂY­VšÏçb: yhOd6•)¨œ¸¹B¿<:�€M/5�N5�N�òµòub}ÀY<‡÷x¥™ív«Ùl¦ËËK]__'ˆ'¶$³ ßÛ1ö ¤`tz_óìn·ÏŒv †Œ8d=� Ð7üR×mìKdˆùÄF_zÖ ¯ï'þxÐ$ºf_²?ÀäÀ <ŠßeÒqÞ�¬CX�w„, ÝßßG yJï_]]ÁÉ8�Sp-¿SÙ׉ dƒý fS©TÔëõtrr¢V«úÌ+yU¥r¹ÁÖ®=3” ä|>Ø'²ŒOˆ¼qWËé驞={¦ÓÓÓó�ŽŽ"À�€AÊZ"cè$ô”_-�œ8AÎ\@d³Ȟ˕ôtg A¾èW~Þ›&ü¼JŸÍþy~çädúܦï`^‡ÃA>|Hª———:::Šàw¾_«Õ·3FÖ‡§{ɇ_=Q,5CÆ;�ŽÚívœOöÜÇÞ&3])ÈÏYö“g ùY²ß?^g>ÅË8¼¢g8=<B椳Ÿø|>Ÿ�wÃÙ?ËAá‡&¿çÎ�¿ý²J�ÄÀØu@�à �ÀH c Š÷¦# ˆØàPÃñ˜R©5+ýb4r#—ËEöDÊr¹Œ¹ó -¢¦0߷׌tV6—{ÊPb=ýbY7RXW ä c•Ãdy)7H8W@©Ì™“šÞDgxF ŽãöÈ›Ãá,.rDÙºb±—êµÛíÈú©×ëj6›ê÷û¡Ü!‰<âÎ#Ìœ€äÀ„„ét:aœ€Â÷zº¡¾<#Š÷Cvxé6/ÛÆ^÷,4ö9uP9H™›Ãá†+Š·T*éìì,²«‡C8ìß§¼‡> i’É#v˜?¸é—ÿœÏ²Çøã F¬GÞ`H‘áæe� ”;QdŠŒ‹ùÎÚO£ ýã?þ£þáþ!B°Ñ¥ÿ7ÏMG¶¥ƒ ¤§(Lw°ØYËZÖ²–µ¬ýwhnǧ�{é)“ßÛÑ�)@éão{à�—²á,ÆoHƒ}|Û?ÿ„1à§`scÛÍíA‰ø~6wwwjµZ=Óý¬w’Ì󜈑žÊ¨¾¹ÏË»™ÆÉ÷ñ�œ r ØA-'ß|\¼�Ïó<¾ÃØ$óÀú”-ÜŽÁFÇÆá]0~¯.}ð18pùcŸ¡ÿøùþ''u‘晬÷ÙÓD%ãç¸â{ãÇxv™ï¯˜ÁýÂ’QÛøFÜ¿Ë3‘ˆ Þ ƒ¬òl/ÃÅ\á�º¼8ÑÃü‘¹AŸ™KH-ü-/i ›:tp؃¤ÀÀ¡&“‰ÆãqTa®ø^½^P y†�pÀ�1Sº=ŸÏGdy©TŠ T'�kžÍ~F^À3<{É3.ð�öÁcÜÎGÆ“s<ÍI%ô‹¯¯û*®Ó�Qú²^¯5™/îoóY~·^¯5™L¢¤{óòò2HÈÉdøÆÝÝ�&“I`ÌñÃÃCà…à#iýಖޫ•JEý~?JÛ÷z½ÈÜßn·ÑæØ‰1ö0ÏE¯9n‘ÆL‘[ÊÐ5 u:� ­NOOÕëõB†ý™�“èt®ï]°HÎ1Æ�~a�‡Cà§¾>¬{Z÷§u¢ŸÛþ·“�ŽÃ:™ë?OÏrÏzBRsn£wüZ�«««˜/¥J¥¢ét™¬»•{Ù:HJ…AÚ³?Èrs ןEßÁjÑ}‡ïv»È %K� *6 ‡Ã¸ó]‡~ Á÷ýê Ö2èǺ¼¼ ‚ȃ ¨då™dwww‡¡»·Ûm–`É $E��Çú “Щțg&ùÁç9“œˆ•ïæét:Qúm2™¨T*E%£b±¨n·:üÙψZÈ~·U�YDIÿœ¹æÂ¬T*QÝh³ÙD`¤D6:—yõ$ ä�~Ë~DŽwNˆ$rRÓ³h8¼¦ën÷”儹Z­bO4 u»Ý(wÈfóq¸ì‡! f}ˆ(ól$¢Ê(1www§jµò²ßï5›Ítqq¡×¯_Çáˆ1ßl6F>ÿx9 { ¥X.—Õn·µ\.ã�Éçó‘†J r�<�]5ÄŒ;mŒƒÕ [ä“ÒŽ¼ÃÉ5—Wž;Žxd"¿nô ËìadÇ£K<â’ŒH>ÜbøœßÞÞêûï¿�H"�ÌÚÿìæFúGJ–Lø¯9œÁ!}¼Ü�Si@$kYËZÖ²–µÿ� ÊtH @›˜;(ù„ƒ�íE4¯WàœÄî" ÛÚï/¡D�VØ÷œ³»Ýc¶üýý½F£QôÏ3ˆ<øÀg<ëáá!Q½Áû�S.)ºï÷û¨à�ÝÝÏÀñ -Äfð,*xÄÿápˆ@<úïA §mqÞ͘xàw™à[`K3&‰ªÕj]y…'Ý—ÅÏ�¸ cP”òK³Ù,.©çø-ŒIz õrïøþ' ñáðAÁ0îïïõüùó(eÄs‡C”\¿¿¿�ßãǰf‹Å"üö¸€ƒÊž™åAJøôr~@%¤¾Êz½Öõõu`A^†‡R]Íf3ì[w摽ðÊ:a¯îv»0dߤ#sø½ø¾µZM½^/æ¡Ñhžƒ,§×Ü„*Tq|c̼§Óé¨X,êýû÷±6Èâf³Q¿ßW>Ÿ×|>¿9ŸÏëææF½^OÇÇÇ4É:��IЬ-'�!‰(?…,×ëõØS`düÛƒ™�ìtì'ŸÏ«ÝnÇç]8Ö° YI¦”û-Ð ŽóáÃõûý (Ñ5�Nutt$P.—Ód2ÑW_}¥ápeßï‘Ññx²’Ïç£rºÓ‰ap Dzvuü ðŸ{‡Z­–ƒAÌ1Xe ={ͱ�Ñh¤Ñh{lƒŒ€Û\.@.ºB‚2t�N'£f³$©g3€=AJ"/”±ò,'|! ÞöûÇûª_cOr®€ý€Cñžt6çOš@tò=ìçn£Ñ= áLJ a9¿‹…ÆãqÜó„|à ƒÑqöyà„WEj6›¡ÙËdÉ¡oôÕW_…Ìær¹¸r„l·1sb^=k }½Ùß|óMô·Z­N9λ»»Èi·Û ±�_½z¤ ýâw®ëÚí¶^¾|©ããcýÛ¿ý›ÎÏÏC'¢Ã9û=hŸò–dúqæõû}•J¥ø œuØ]Nl€ëÞÞÞÆ¹™>§™»R©WrŒF£˜odŠý×ï÷uww§‹‹ •Ëe½ÿ^WWWzûö­þôOÿTÏž=‹  ö ™Ri¹ Oœ‘àX+g¸­cšÕj5pÕ›››�#tÙƒp*óù<’9ȲD¿¢£*•Š�Fd÷bk±ŸÙGóù<ì½z½®‹‹ ]\\èóÏ?�~r·cd^=‹ ŠóéòòR‡ÃAƒÁ öºÑ[‚4rÁÃàð´YW4Î^a 8y„2óϧ�s}¿¿ÈÓ9� òÌ"»<²VÏSi1®q: v ‡ý•ž¢�Hßö{�èv�Ù™yXKŒI�¢â°ç96¼á„ à�ÑN¾ño'8ô‰0BÙW«Õ˜+7Þ9hݱ`î?Ì®† ›�Ã�è(úÉ! ÃGÿgþŽ��ƒÐ`Ü€ö8ƒ(wÈÏŠÁ8€˜ Å�5A‘âŒîò| ¢‘gƱX,B±2õz=ÉápøAY5I¡ 8‰6ÀxÇèô=Gºô»wïT©T4 âÐdb4æóyÕjµ¨�Ë8ˆv8::R¯× Ã¥µßï#º€èdÕßç‘_.KÝn73†3²‰ŠáŠþ8:J^òZ("‚˜ýÍñ®¬ý4š4œÞÒÙ…ÿ'�güŸ��A”µ¬e-kYûïÞ<ÈÍ�¯tÀšôd¿áßaJOv=þ„gá {ĵƒ÷ø#ø‚Øu؉^U‚@=|)éãñLÚàÌfL|ÆíRü€Ó!ؼ�±¤çÉ?뾉Ïѱ€ÝÞÞªÕj%À>'‹Ò�/éHÜô{}ý<ÂÝI6ˆ÷Mñ·|}ø> “÷ËçÕ«.¸OÎûZñ½t$|𠔯/Iƒt¾–ž)Ä8œ€Bðÿ|=¢™(mÇŸXÊ;!UÀõòðÓéTõz=A†ÊJJ¯ŽkðÜ™$³ ?Ù3O�¡”>ßcþYJæ�õ…|/™N§zÿþ½v»Ç;£~ÿûßëÇ*‹‘)´Ùltqq„1$$ƒø@>\‡ó ³ë ' €ONNȇ"“…ç°Þì5ží„7ÿOË=äæáðx��ëx‚Š!¬ ‹:æ]9`eœI`VèCtõÝÝ]Ñ"cì/úÆú"ìG0Q'9_<ñÇš¯…ãµ~Ž1oésŠ~2O¬DÇh4Òýý½...´Û=]9ÁyÁÝéàzûý>ˆ`°2Î*쀣IOw´o6½ÿ>örçø¬ãR¼]ƒ-‚¬­×kõz½¨ú4™Lbÿqeƒã^”׃ h4zöìYà¬$%xP8Á‡Ãcù½?ÿó?W»ÝÖ‡4�Nƒ D 4\ƒçq¾€ÝÀ·“„´ö5÷à ÏÔJ¯¹Ÿ½~îó~ôço«ÕÒjµÒÛ·outt¤‹‹‹¸—ûg?û™.//ŸsüÏeÜ3.=Yùó  '™�—Z­(d&öb±ˆ=þðð ëëë„}�œ;†Ê¼“Õ…}DSö£Wk‚œ*Ëñy zÁ÷A>Ÿ�;7·ÛÇ{ )¥G •ÆÐ÷”•¥%H£|>‡ùfÞl6 æÉ£›PtÕ�’ac‘%Äß(Cg–1Àˆè÷Åä`‡¼ñ;pÜâÐôì7pÉXb¡ÜxB¸9Œ~QDD¨±ø®\q:¤§:ÖôC*mh"Àô�¾xú#cså瑬ƒ¿ßy6´§­ñ~ÆãQk|ǽkôÏúî Î�N”$ …M@F›$ŸÏ«Z­F¶ J§§§al1ŸtîD ˆ\Añ^'Ùðüž ƒÀ]BÌòŒó±Â;ˆ~`N Ñ$EÙGîíÙï÷AXÎf³0°NNN™dϰÞÌéÍÍ�Öëud¹,‹ˆxr�‹*ÝÐç …pÃ@Üíva°2ẇ?º€ƒ‡¹ |‘†�TïÞ½‹> “d/qWkïQiÅbQ�F#æ£Ç ×Õjõƒ(;#€éÊ.wÎêã°°o0@\×x„&å0°Çã±¶Û­NNNÔl6C¦‰òÉZÖ²–µ¬e-kYËZ²"6³ƒLN|¸}Ms"@†Ÿc·;†�î`ÀÑÞ€Ãø«»Øäø3ØîØŒè‘9…oâÀ8cƧ¢^&†ñ¸/ŘÜt¿ ²Äý68}ÜüÁ¿çD¿sbÈÉ0ˆ™t–TšÜ@"ZÞ�_ êÜßç³ô×ïÕH�øv¹_ŠÏæà»ãî×{)þ1Ù#.�N2d@šà‡AÖ¹,ÐO¾‹Oî€=}ô,üŽæ4~?ð¹güôw³Ùh<ëüü<0!æ×#ÕÓsÈœyÿüz—oÀ7üg.¿»»ÓÕÕU¢üXޤ&¸„ü‡!gdQAFxu'ÏÈ„h·Û*—Ëzûömd�t»ÝˆŽwB�u0&“û> dÀ«ÈDX¯×qoñÝÝ�îïï™#.‡Ëå2È"ÔY3üÕRéñî^î¾ð,-ÖÅqÖȯpâ’ïƒ�%áóZW*Õëõìonn—¸ººŠ{G¸›ðÔ¯ð ''�\f�¡ûÑNªú9áÁÎ�NGõz=vÁ� ¨ÈRõòY(®g˜ >ûÞÁíf³À7Dç™Fív;Jœz–¤cczƒS |Þvÿ.øã¡jûBGŒ§Ï?g?ÖüÌõsŠŸ;9ëŸwB‰3^0=¦)ùˆ,º<99‰{ž8w[­Vì{?WKÐ�Çcår¹X“^¯§Éd× är¹È‚(€l„|bÿPÎÚAb‡HÀ „¸X¯×S¿ß�Åþ·Ÿ;==�ýI°4¤ ÁÕ�NGårY�NGû·«ý~¯wïÞE¢2¹äz©X|¼»ˆþû™iäëä•›ªAÇ ¯®WÐùü_D§w"«ßïëææ&ªN1ÿ«ÕJ_~ù¥>ýôÓ�Îñ*géàObá|-‹j6›j4�c¢=yÞívj4Úl6‡qÇ|>W¯×‹3¹#€À$tw Ǽú<’@àdæv»Õùù¹ºÝ®ŠÅb‚t ŸóØmG²¢7›Mœ¥œUdÆyK�FÜIã̯O’§ª²(Duap�²äB=zOóJ+ '"pøžüÌ�n¢�¥¤˜té)SƉ'ºx—O8¤Gø¸¦£ø~úsŒŸÿ#8l.€J¥iƒš8JÞ³ 0úÊ<¦•2 ÁÈçó‰L$I £C× W?Dy¶G‚¹ÂõõEablz&}a}Ûív"å‘>�ºž6²Ó‡s‹âð;€*•Jd2¡@0ôÙXµÙéÉáð˜ê!áµ–1ŠH‡ÍårÑÖ�.(ë÷ûZ­Vê÷û €Œ±·–Ë¥nnn´ÙlôâÅ‹Pü¤/úx‘=—yˆ!Ö{¿L礟;ìNÊB¦øe­N"¡ ‘% L åêõººÝnèœñx¬Ñh¤b±¨v»Žº+<%.ÿ+ zöìYì{'¢IwGÞ©‰Z*•ÔívÃùAVÜÑwáÑ…¾�\V ^q0ÔÜN§xf-kYËZÖ²–µ¬ýT[ÚÆt@ÛÏ}.PÄÇ~§2…ûqØŽ“Òàà¶->†G»óL@8žé%qðá€àži„ý()áÃxd,Íÿï~¯gK8ÁB?ü»ÞãC8¡F`”WÛ ¤V�ôçy@¶½¯§ûÄî;¦3üyT£à3î—:IÄø?óèÙØå÷ ³Î̇ƒ™ô ß ¿ßçÖû›&ù˜O÷¨.‚ x–ãs¿ÕËnyÿðãüÿ.SiüÁA¥tà­ûËüíò+=�«£Ñ(²f\vy¶ûè.¯Nä9>“Ëåtvv&IQªŒŒˆˆ:äàœÀX29 …BŸN§á/Ršp¿,ù�Åe<ܧQ©Ttvv¦Á` ëëk�F#u:�ð¹�ŽŽ4ŸÏu}}2R­Vu||¬Åb¡Ùl¦ét@¶ï;€Xï™À]�ܧœeYC—kô"òæd¯ƒ¨üqL™örwàz~O;îks—3„ï|>×ÍÍ�¦Óib¾Ù»ÓéT³ÙL‡Ã!‚Vi`éM×—�Dù{°5ãðÀí—/_&²yšÍ¦‡ÇLÊlåóùˆ¦‡˜‘žî£ïÌ)÷}€E!Ï¥RI�NGóù<Ê=‚ó5›M�žžÆµ”ËÌår‰{Õ}Oû>sÎõˆÿÜõÅÇHiàü$ƒÄ :ÇòÐÿôËÛÇtŽë×M°àû�¾1ÇN ‚UAÊÞÝÝE&eV%éôôTår9ä�uðxé~�U*•¸b¢\.GæÊññq�7Øý~_µZM÷÷÷‡! ûýSP0ç!ë ‰0 ‚ Ìçóêõz‘ÙKöÙO­VKív;)úiµZ’¤n·«gÏžé�þè�ôÍ7ßh¹\ªX|¼B„óÜŸÃuùücsåØ7r>ÿX} .Œñ‚îv»ù©�.vY 9!ÃûøÛ19ÏçZ,j4*•JšL&º¹¹Ñ»wïôáÇx>:ùuÙ÷¿yø,U¯×‹{ÚX7æÒõó|>�  æ„Ïx <å'“I¬éf³‰„¾O;Ï<$°€qM&“°]™[J-~þùçqÞ¡#ÁÛ±aià³”=¼¿¿W¿ßÜûøøX£ÑHWWWú›¿ù›ø^‚4b£:ÁJO‡ Ÿ%†H7ú0&\)¤#Ä<²… r…âQ%nÐ1y<ƒì é©Î2OÞïò IDAT¬ Â’vFxùcÆ0B˜&EÒBG=ÍŽCÏk(úasˆf‘!V0†|L–ôÇÆ#4/i˜¾y/¿K7Æ@Øh’Q¸s¸Âv:!„âa~I &ˆûz8ü�3­¬$‚Gùšâ$ðÇÉ4d� [N�ÊÑhµ(afïîîâòÂz½¬.—‹ƒÎA7€6›�ÖëuÔÅe|ív[WWWúä“O"u»Ýn'œa#²£0ÂÚí¶ºÝn_ãñ8J B:R_˜Y¥,Ýr¹T·Û ã˜>sHðÞ‡‡‡0‰ «×ëQÒ�È1ȸBá1« ™Á°æY¤ÉCpùÚ …(Sè uVÉ<"Ú�Ãêp8è·¿ýmÔÂe?µZ­(ÇÈ:ñ>œ5¢Fè?zcÞï÷Q{ ÝÜ�Ä´“—µ¬e-kYËZÖ²öSoiÂÈ}—�ÐFÐ"ŸñÈz>‹�æ6™ƒ[ë98‰?å�~”èÂÏÁw0ÝÉ ÷ÇÜ—t;’ïA¼0/Âã+Ð_äâßž9âs•jÄò2~¡ôKR€öîÿ§‰ﯿÓ�BŸs'µ˜w—'€˜3—Ï#ãr߃ …Bdsxß�Pù��…o „Ïá`�ûÿø_^–œ@ÚÛÛÛל0"<Ÿ¼¿c±X$|ÿ¬Ë-ßuìÁ�fä8M¤e5½&Žß0/T‹ð>ó9ÎMËëÀ]UD')J/M§S- �F£(Ëãz�(|2i Ø(Åq €IÙ?€Ëd" [^& àìôô4î%órmÜMPbµZU§ÓÑ›7o4�uyy¸ ±“ª`$`d¤@02F/—æÀ*²îûÞ±|pé‡ÙD¾g\çº`î%E 4ϬÕjêt:º¾¾ÖvûX‚¿Õjéôô4æ‡9do³÷x·“¦È#ûÅ E'=\NWdN¹‹2†{© …‚:�N¦"···‘±@@æœ=‚�ïä¨ã: ïv»¸² Ÿ¬ÜÄuÜ�ÂÞr<‹yGC&üÁW˜SÎ&ÏHk„P/B~¼Ì?%9]—;¶èYGirÚõ¥ë~×-¬¥�;­Ë=»Ø¯;‹ãüöR�žf³Ûí‚P¢<]­V‹ùbO�ýC–NµZ�À_’&Ž��#Ã�ù'È™ýéåÙX[æŒ*4¬q¿ß�¬ ð(t‰dŒ8F%)džŸq&ûÝãgggúä“O4›Í¢ô Oår9䇵†¸Ó$��rvnó`qž9íU¿°a¨:Äú§ƒhÀÚØ?ŽÅ»í·Ûíâ<èt:j·Û!Ü÷ôå—_jµZéòòR¿úÕ¯ô—ù—�º}ÑÍþNó···šL&AfSJ�8™LBŸB\C¢S�ªÓéÄøF£QèÎR©�ðÜ[ÅÝF$ 8±ÉÙ–Ëåb¿‚QÞßßkµZ%îþ;q.M&õû}u:�Xór¹™uà³�a’ÔétÔjµBß¡¯¾üòKÍf³ì÷â~"%&¥–&Uø‡Œ˜§Ð¦Œ§@"�Î.cˆð|ý�øqB�œÏç  eë‚êïv¡uƒ�HoZŒA悃ç¢8ü˜ß0N„±IýçDµq— ýteÏÆu§Â‰¥òûå¿ÌyÖ²–µ¬e-kYËZÖ›û•é(åôg<GZúaI¬�‘8|9x�&§ðˆ¦Ç9Ǧdžô‹Âý÷ÃäM�›Ñûìþœûcü�/äà¥ÀìǸxÅWqðŽwñy€î=úiô1ÉŸëÄŒ÷ËÉ lb|q¢óyq_. `úzz41eÕjU“É$‘™ã„ŠË‰Ï…¿»¾X|º¯¦P(ÄÕø, BFôI$°“…Nöà�-—ËÈ€ðT—q~Æ8}^œTHï©´¬lçà¼ãÌ`<¥�<ø×3-œäKƒë¼‹@RÆC¹ÿ\.YÜÃŒ :~ =‘(à €™$âCC¤¤Éªt°­ËíjµÒz½V«ÕR³ÙTµZMTÁ‡0ure0D ~,wc88ï`ÿf³Q½^OÜ!ÍxoÑ/¬>½—ìCFYŸwˆ,ü×�éXúËš�c‡ðý›Íf”UÇpLŠ*%4×üóŸ#CÞæüÎ}jÆH6E«ÕJ”¡“ž®˜@^Ð1èuæ*8À»À½jµZTäaŸl·ÛÀ8™kµš�FÊ�Qžñ>žt=íÈëññq�qÜ?æš– ‚µ�ÀñóÒ¯âĦy ·“V¾F®oòß;Þègyú¹®«}ìhùǼy`úÇJ+r˜x“¤æóù|”Tô R…B!0W€sˆ•J¥¢N§ g‡gƵÛí¨4ƒLqµ†*ÈY �D”¿<ñ\ö x6vˆÏ#:åÙ³g zûöm”Ç£cî‘‚³�x÷s–ùõÀ‡ÿ )Â9îkì²îg²ì™ÅÞø¬gAþüç?×d2ÑÛ·o£BÒ_|¡_þò—ªT* òËõsìû"n±X(ŸÏÞÇ3ÀóÆãq�âàñõz=�$xŸŒ/&“‰öû}�¢p'¬ÓÝÝ]”c”\×iäóùÈ>õìdæ‚€E†!�º½½U§Ó =Oyæûû{]]]i8FV¨·iD¶‡gd 0L2›Ê³sPÈtžÍá‘ }é�¢äw(/ÅsnÑ�xç÷q¸"02õmaãÚÙl ì •È† «\¯×CIA2yt‡6ŠÙ�kŒL˜ôxÿ ‚ë,;Œ¶;Ì5ã`ŒüÌÿÏ¢ ÓY Åæ�¥× ÅîFm¿ß�gE‰ã‡,1 FòÆ:úb¯_¿ÖÃþþú눎9QFïááA­V+æ ïòòR‡Ãc¶?Ç1ÂØõCÙDž‘™ÅbñÑŠuët:±ÿ‰<Úl6‘Zï{–5òÃ�­ô‡}¼ÛíÔn·?êR~޹ÄPdoy©ÅÍf£›››`é+•ŠNNN¢Ÿ� ìÖ‚–è•\î±æ­§p³<ýÕÇáY¾wÒ—Ée-kYËZÖ²–µ¬ýTþ À{úçéϺIp ÿ>::ŠrUî·ús°5=K‰€[ü;ooo£dÍjµ PÂ߯Á0ÑÒd‡(ô‰~û3Ðæ×}$Ï4´âþ2†»ŽŽŽân€2.‹¯Õj‘U4™L™R2fI�Yùþ$»²†»oæó¹$éåË—Z,Úï÷æ3ÿ{wwwq19ó˜ÆA$E…I!N²òJgIŠ(~}Þ¥'ðßåÝÁ\'�]/ºÿËßèQö,ú¢ÕjEÆD'Á‘Œ3v¾W{áyR²Žïcúí$þññq”o‚ît:êt:QbŒ½‘èg ¥¸÷ kÊjÆQ­Vã~\!QÁQúý¾�†šÍ¦úý~�'''‰`Qð@iæÓqVð0_{Ç»À]\·3ÇNäúþä���…)~f¦ ­�é]ßó|&M,ý–LŸ‘?þ†¨AÇøÞA&�žutt_é;åù>zˆsÏg°q°f¾†>ÏÈ—aðyÆÅwXw䓟£ÓÀæØÇÄóêÕ«:¨ÕjZ.—ºººÒh4ÒééiŒÓ1Húëïs€žžÏçqŸ2·Z­âŽ6°ÑJ¥d!çšcä~þî÷ûØËóù<Î)J๎öÀ*1±æùüã}]¬7÷èQ1)—Ë…íS.—ƒhêõzšN§è„=R¯×õÕW_i>ŸëÍ›7j4šL&º¸¸�ôxÒp8Lìõd¡,1d˜l@wš+z„ŽÍÊÁs8<¥o6›¸p á"#AC‰úÁÈæb! <æ w…Íd¢¸¯®®‚ÄAƒÑ@Ê£o^ 'g88`™1øHÛÛï÷‘µÀ{ü²5æ»Ûí& DÏ\�éÆ0e>p~˜'g�ÝXdžÝ0DÐ�‰•”¨�Ë:ḇ>(WÌó}~~®år©v»Á Ÿõz­J¥À:‡¯§šû;ì£XPhÜ „ü±�QˆV>ô…4R˜`6)Ë»Ý.YæÂ�0é1ý”¬#?d! ™O¯•MZ5{§Õji±X$²æ�")¸`�ßG�e :ê}²Ê(Þ|>Ê…ˆ‚ƒˆ"‹j8†áHÍWRüYÈ&œ%R¤ý ÂÀh#«‹u‚a'ŠC”CRˆ}æeÇÇÇQ29}öì™6›M0ò̵q×ëu�cÈÑÃÃãežDq°2÷”Y`ŸSbýÀ�†Ž‚T–k�µ¬e-kYËZÖ²–µ§ò+i� €! B;Háà,>)~?÷ G'Tüýî+ÑœÄÆÞ, ‰²"€ÙiòAJ–‡s2Ç� ÷µ$%æÃ�Æë ª¤ïãsàØƒ8ñÝñ?±¿ x&þ!ýÅßòàÃô;ÓÿO@´èJìLSøÛÌ‹G]³ŽNø˜’ž3È挱±døÍé,ÿ.�¤¹\.¾¦IAŸK'Á3<ÍÁ'p¿cÆå”9sYbŽðó’\†hNøèQË6>C”ð9—aH°úF)>Êì ÍfS'''ê÷ûº¿¿×ÅÅE”%§$QæøÏ½^/€±étªëëk-‹¸KƃŸ�œ¤ÿŒ—Ÿ1�Ëå2°ªÉd•BÞ›ôîÝ;M§Ó�#€bî/’>(¤2ŠßÌ=½Ž‡t»Ý(­ä€±¤Df„µÌ/k䀴¯!¾+x\ZF�dœ`E�NGãñX‹ÅBA¢€¹žAÎÐüÛ³4uL‰@È®8;;S·Û�Š/NÐB¼RvÙGøW^‚ÂÈÉ2˜Ð`i` |f0¨Óé@ ¡ÙáÇ9Á~c~Ó³ì]ŸC_ð¾Ï�k‘!ãÞçr¹¸OÇ+£ #^òÍÏ ú–Öµ~ΦÏ3t"ràä± Œ×†|°À9ÓúVRô¼Ý€¼ ÏdÜ@Ü2'`pè |>82²ÈÏüÌç¤/'''‰»�Ð ^j�@Ïlò¹ñ½ëg s›ÎRôàï7oÞ¨X,FiLtzÃÉ6Ç–cä÷Nñ3ÞéY_È›¯ºÃ×Ñ3ÒÓ¯TNKÙ÷ý÷ßk2™6;�N5�#IâòòR——— 9I�FN@°ùd£$Åd8�Prï‰_†G=Tˆ�?áá›×…�C¶o¿ß'¢ËÜÆ ¡ïëõZËå2 iúÍ‚’ñ”j¿T ²g»Ý†âA�R·˜¢€(œ"ˆšA‰3Vš¾xy±\.—¨±ê ˆÔWš§P2·¬µ³¾~p¹êjš1fSð}�JZ¯×šÍfšL&Z.—ᜠŒ�(¢ Ø~8;±ˆ²AÜd.�sC% �QAV rËs óù|DÝx–÷A& ˆœÔó}䊄y#J’~!»È)’’‚uF¦NNNôòåË S^½z¥³³³¸ì‘~»¡ÉÞòËëHÁ‡L9== ÅŠA^(¢¾3¥1¸¹ÀÏ3· f „zVòI4(d•³ÙLóù‘Îår9¢ò?ýî@>~™ƒyiàÓÇèóŸþœ��5fÜ€—üœà=ÏZà?÷ìÆÁ˜ý�Ï ?C><»Ùðl('ZÜ/÷²o.ßž�90¯N: èé}sYññòÿ?}öÏ{°/~–g'HO`ëMß™Oð "�½<ýãs«Õ*€Òý~ÏÁ¿&@±ßïëåË—j·Ûº¼¼ bFzÌöT!8qµZi2™èúú: |Ä�v°›w: ‹ásãñXý~_¯_¿Ö×_ØÌb±_ÏuÃ|>×Û·o£J ¤án·  Þ#ï�ŽŽT¯×#"œyEN(q–Ö€ÀÿÈ�c0È›“…ü›µIcà‰à$¤Kô¿ØýåtKƒãÌc vB�à]ˆØÃád]u»]�žžÆ�3èadùu<Œ÷z€4wŒÖ‚ÍùýH~¯6Ï! �2†à2àœ'NX“± †âëÅ*±Oé7gc`¯¢ƒE¯9~"=ÝÿÄü2ÇNФ Cÿ“ÖÝ~.»~Jã�i=å¿wŒÙI#æ“纾“ç0sÄ^ö@ ï ¤;xø*kåcLŸ³`I¾/e,Ù;ཨ’B®|œÈƒgEù|yfÁÎè®òàþšétªï¿ÿ>qw^­V‹{ÜÀkÑ�èBösˆ¾ð½�þËBßóYžFæä3òág¸ëCÎ$ô ²ç² nH™Æáp¨««+���éåË—zûöm–ûí·zõê•^¿~­ÙlúÀTС.“¥RI�FCWWW1¾v»ˆd ½|ù2söú‚»åI” ¡¤V«iÄÙH’ó\*•‚ Ûô3/-ãȇsàîd»‚©sfL°X,b.¹—îîîN_~ù¥ÎÏϵÙl4™L4�Ne,¥i”f ÝøöÌ‚-)2<õ!eãr_‹—uƒÜAÑSZŠ”,H „I„‰ôH(~‡‚ð('”¡PF²T*ëÇAJMZÊÓA@h à Ðï‘+dB±Á0 80)k€ã„rgC±ñ`Y�Za 0`ÙtDV°ñ9 ü p².�Úì‡ýòÔÍ´AÀ%[æùóç’õ‚©;KÝQŒ sd ¹Bi¸ÂA™ H9˜Ù0d†0^ÖýèèH£Ñ(2…¸ ¥F†‘׬fóbœ@f  =Š�µñˆ /aˆ’r‡ 厌ó~'÷ Ëår"uwµZ©^¯ë³Ï> È#òöû}Ì1{�õG9°¤„rhìv;ÝÜÜ„âÛn·šN§uäÆ%2� t:�DÚ:Y:”Òcß6 Íf³PžÜ7aGôs=�Nc½ ã8ŒÑd«a¤!ûR|ß/2l6›šÏçq ëþþ^ÃáPûý>È3tãÃêÕj0ýËåR…ÂãM�N' Á¬e-kYËZÖ²–µ¬=6ü ü‰4`%ýð~l~À$LƒZ^5àÐ#}¥df’GõrW Ùô¿ÑA�4y“ޏç=Œ‡æ ¿ûȧ ¾ç‘ë>_i‰ù¥¯Øê^á«âwy¹+æÖïøôwyÓ•/<èÐ×Àûˆ/&=ÕñÇgæYT~/‰GG³~›/ Èb}¸f.|�`��YürÀ5'.ð/ñ_üý#�Hþ˜Œ8Ù”&�xu"‡#_øFÇøÿN2Ѱ0Æ‹/í¤ýã=^êÇ×À­^¯«×ëEàžg‡är95�¨²¾ttt¤år©áp¨ËËËðל\ôÈyä‹uE_T«U5›Íú,‹šÏçú“?ù=<<èý¯ÿò7›Íâ>3懎———�9(Ï8ÀQðu!#\ß8� ¨8ŸÏãûÅbQ‹ÅBÅb1úìØ ëÍ\#gNš;hî�Á”ªwYq½“&b[­–úý~"à˜ùv\Á÷>z9aÁÐØ/Íf3‘ ÁEíà]d ±Ÿ!蛟¾3X!8ž/M®0`V�F#úå÷ѸfŸÐ/*9ÉŠ<¢ïÁMÁ}/€ƒ�ärOÙ�#•ÓˆëtÆöê{öcÁiòÈÏštK„®Cý ð>ûÙè:ØŸáU\Üð’��ÄÌ«˜ø™Q‚œ:Iî¤ â~¿<ìcX3�áÌ«gaÒoÎ Þ‰<0çn8é‡>Éç³Î(å ~w~~Õ �;‚]Ð�TÒâüÏår‘À�œúûÁe7›Md9éy8<]å )Ê­‘½Åš;yœ¶\Fœ¦rtt`Þ~¿bn·Ûi<G9qüSæ� È=èŒÉ±�F£¡n·›ˆäßï÷ê÷û* êv»Z, p�ñKJè |ó\.À-€'ú�Ì–ããc-—Ëð_ ºæ;pM¦UµZÕx<Ž@aJÊ9Ž^Äw‰€JˆXÏ|ãóLº¼âïò7{Ÿ×‰Ct2úÎåÕu^«ÕR·ÛU¡PÐÍÍMÓTžaß“ÑÞ ì!û‡{esâŸyá|qYFÓ�ñSú‘þ€‰BNB:ðN'Pé+.{\n6›Eÿ¯®®" œuõlæÉq5l ×/Ì ø&}e ŽŽŽtzzª“““¸O›u`~X;ß‹ÞcC¡kœÌfn÷û½–Ëe"K”k2îïïŸßn·ñsö:ȃ%<(?ý3ô™Ïœ²@òÿæ7¿Ñf³ÑüÁèôôTÛíVÃáPççç‘B‚Æ~¿Ý†Øh4”Ïç#ÓšþŸžž†.žL&* j6›!ϬaµZ�g»ývss#IA QêíÓO? ne0h<‡ã�Çúî»ïT«Õb½ †Ø£¬Ó|>¬•5CÎÁ¤‘aˆ©‹‹ ]^^Æš•Ëeõû}E`”Û^1ÎÛH#^¼ß?fC´Ûí8(<ºáes£ˆè :e¤r¹\¤2#P¤s0Qû�IÀÐñ¨/IQ²‹È#?™\²H7¤þQbþ:(S‰ç�1Á"²!PFlÇöÎ IDAT0 j‚…Eñ3oîL0£àYì‰LàÀÀ©qӨϴ`ÜÙ¬+ ÉS¯y7Ê ¢Ëëd¢Ø˜ Œ2pPn’Ôn·ƒwו™Ë!弸ŸNdsÀZ=<<Äó‰ÔÀÈtÖÃ#Œ1P>�RŠ[<Ã�AO×c. $�}w2œP 눚‘Ȥ;´Œg>ŸÇsY3 ¤ÍfrHÒÛ·oÃ8ã~1ä�¬Œg7DP¢”µcõûý0~%Å^£¦(õd2 çŸCIÊ…ˆÜg„óÊÞ¦¼!ëJ¤ˆBk4‘>Š®AF‘/ÇáC”kâõ}‰tRÔ£¤0 ÉtÄ€Hq�{’ân'Æ—µ¬e-kYËZÖ²öSoiPÓƒÐÜ·ô@:)I´8X…ÿ í :>ŽƳLî´ Öt€4â�øW<Ÿ`"·Ü·ñ±yPcâ½^žû8]Æ£r�#€©R©$æÄ�Sž (À:ðÝF£€-å£ñWñ—õ5ðgûÏœLÀÖOƒ�õÍ»Ý'L�Ì³Ë s‚¿ƒ yFÀ~­÷Å£¢ÓÏtRY¤< r �u8¯À×Â_õ;SðÅ�ÄC6={޾;¸ë˜ûqNб/X[H"ˆ;ï›Cøš¬µ–ޏŸä„©ã.ãNJIO÷pQ=f6›i<k¿ßÇÂ�oø„NÖ¸ìëz8ôêÕ+õz=m6›§Ó©öû½nnnt¯?üÃ?Ô/~ñ }öÙg‰»2¨ÎR(ôÉ'Ÿèòò2.—G¶ g�F£Q”+cŸ±÷Ñ9”ÒËårº¹¹‰µ#p¢ŠõwÿRÝÃ>xuRÝ3`hø½üœ;ˆÁŒÓòµ'gë÷ûq§ºÇILï;óCðl§ÓÑË—/U«Õ¬„¤{þü¹úý~€Ÿô…¨{î4F–r¹§ 0ˆ%ä‡,d”uAþ<‹ƒ½±@LµÊÑ9ÙFÐ�èKæŸ}Å8®®®{‘J'ŽY±¦è&ö2}DfØèY×»ü�®Äž‡¸‚t #ÁIB×·¼Ó÷6ï`Þœ´wÄXœlr\—÷øwüÌg.yŸ*\“àÙ—¬�ëÄtð:¹a?±�\ß�i’ÏçÕétbÌ^âÎõ"÷Î ~;þëçØ5{škd8ƒ‰5›M½~ýZý~_Ún·q—:†µŸä�è_Ö”¬EöëÀ˜°9¸+n¹\†}Åúðyð.Î0ôójµ ùAÆ9“Àü ±Áóø ɼ£T*E Ó~¿¤?×…¼{÷N¿ùÍo"[” JȘ�¤€3ÖëuM&Íf³ÐKÜ-Žÿý÷ßG@:ö w½zõ* H“vý[«ÕT«Õtww§~¿¯ÛÛ[½ÿ>a·1ÿœ3àüÜårYÍf3l p[IšÍfAНV+½}ûVWWW�FšN§º¹¹Q»ÝÖ`0ˆ†¯¿þ:�'£gýì�R¤eÌ8ŒÒö4Û´! ÛIÙ(îAq%GTG>Ÿ�Tm Šv»Æ,-ïä0ä÷\n�á„’n·Û Á =MšåÇáÄÿ�i”kµZösèÌcüÁ&2" <ê„ ›Þ +¤í¢¬è¯gpÞ;M„O½^�Ô#¾<š¥R©D*%¿g¹â‡¬;=ÑåŠ1m ÐœðB0=úÁ�ßÃá÷Üøx1"‘MÏâÂjµZaDbcœI�äÊi¿Ì ¢–÷ÑÑã…œ¬/F?Ù4ž…ý8�È/u�©MIê=NF.—‹ÒrÃá0Øb˜t M I‡!7DâÇ¿=SÏ#žüÀçsîA‚yä$ó‰²b�¹2sÇÁ c³Ù …dz!9Ø(E‡ÑåÏ!B —ËÅå©Ê(gö+Ž®¤ÐIgggq°C.;‘„Ì{䟚Åâc:~µZÕh4Šˆ7jÑ�’Ôjµâ0¢„ž“±YËZÖ²–µ¬e-k?å†/é²Lðˆ½– ù9~ÏL“ØkaIO�uib‰gb*à¦A9þ`ça7â?1>|Olo) baûc¯3ž•âw(ÑGžã•G«òL>çD‡ôDÈP~�ïrY2e¨°Ý=ÛŸáÏb=é'6=óè}Ã‡ÇæÎçóZ­V1O펟ŽÏéîëy°¥gGy‰®�]Þ/é©ìÑf³‰ 1/|2˜"Ä äÉ!�œ¨cN˜C|h韔¼ßÄ[Ö˳WðÙg>Ç>^@T|AÖyd_yµ—_Ç9¶ÛmøÝ|"·•J%.!¯×ëd ÑC?˜«ße†ïÿÇüÇzóæ�®¯¯£äÏùù¹V«•~÷»ßi·ÛéÍ›7úå/©Ÿýìg�F 2‚ñª!o€˜øÐ̳ƒÔ”â®c¿s¢ÓéèööV³Ù,Ö|4%öžG—;YêÙ<^õ„rìøÉèpþ @Ï>FW8^@Öć—Î’¤n·«R©¤ù|÷!›”Óã{dw¸ÿþêÕ+½yóFÏž=S¯×ÓÃÃ...Ôl6Õl6õüùs�žžªÑh„ˆ»^¯@¦yé>ú€ßït�Cè+öz— ê4ù ¾Â}J|Ïõ?ØTµZÕ`0|€Ra¬¸ÄápÐ|>�½î‘Ïç£êŠË2{ž~ó{×Sœ+ž¥Äú³†Fóù\óù<0Jö0¤‘ã!èG'Û¿Ë%Á·?F¥‰œ4…žr}äÁ댛³€w;�äd{ ¬›Ï‚1ƒç9öÇûZ­VÌ1Ø$}ç b¼`•ü;Mž;™Å>ªV«‘Äœs•Ãíí­nooõâÅ ���©X|,ç¹ßïÕl6ÏB.¶ÛmTÔqLÍñK´`Õj5‚X ž°qZ­VìsdŽsÛÇG<×Kp&:1 ÙÁùÆ~zzú„õ»½½ÕÕÕ•Þ¾}«Ï?ÿ<ªU«U]^^ê׿þµ>ùäIŠ 1d3ŸÏk>ŸñBb òs8‚X^¯×Qýé믿ÖÉÉIdÀ¢g‡ƒƒ�êõzì­|>3ÄòAÖÕ¢¾ùæ›Ø‡^®“ýîgÏóçÏÕívcM8Ó‘k/Ñ7�NõÅ_A̼u:}öÙgº»»Ór¹Ô»wï[Eα¥¶�ÿ‡�ÍâKŠ#$ µ^¯C Óy”±G¬`èñl\I‰è ¿X Ò†ÍÇF¢�L,ï• Û 60BãåÞ î8a\+°v”ê£<— êÑb(©B¡3<%ïwÙ`yÄŠÄ�RÇ<‚Ç#Á0J%©Ùl†‘Æ¡åÆ‚ý®¤ý€a3c�x$ïá߬-ý¢ñN?üØiã¶X,FÖ sĦÛï÷Ñg” ‡;cpãÀ7ˆ2R(Y²ép 9¬!�HŸ§Ïõz]Ýn7æ�ue�¹�5D¡âh@*@üá|@öÑwÖÎZö ‡$J‰GI‰ûy�+'1ÝIf¾HÍwc>]2¹DñAˆbrˆP›øc 8߬ së%18d z8ÈPÒ>F2!Ù+D9 ?DQ¶cŒ}ìN<‘ì1æ®X,ªÛíêúú:H¢ÅbëÅöz½8Ü!}þ²–µ¬e-kYËZÖ~ÊÍ£O½dS³Ù g˜2'î7b§: �=ÏÏ ÌÆö ÷·$…Ï�ç—¢{P�”¼À� »—~:P¹ßï $�ìÜø%€ìø‡RòN�ÌelØý(:y„- ¸�ÝŠ澜˜ÌE:’g{©7|ê4Ù•& ݯtP4 @:¹Æ¼z`#}Â×ð`Iü€D|!÷§ ã;I¿y7@œ—2c,ȧã¦×ÆK­ûœðoŸ —?Ç@ …B�D¥åÍ~ð{èO»ÝNüù`B»?Ǿ—tB‘l —7ö;$8�¡\Œ…€ä³³3år9M&í÷ûˆ@”¤^¯§_üâúùÏ®wïÞéÅ‹døÕW_E6åy>ûì3õz=�ÇcM§Óð«Á=¼$ýòê^¹Æ³&ì' ‚ŠgÏ€9)[¯×C¼"¾½Õ�£àkN(éÙ ÈŽë²ø=ý-•J‰J¬=˜ò8¼X,tqq¡Ýî±ü!¥õúý¾z½ž^¿~­Á`�Ñ“ÉDÅbQÏŸ?WµZÕÉɉªÕjæ*ƒË §;<QvypGç¤|}Ø �Öà–ÕjU­VKív;ð;t ýpB|Ð÷8 /ÁµÌm:Í/·÷uGÓëçÈÛjµÒåå¥úý~¬§ƒÕžEù-²�(åÇŠ\ƒ�xÖZšrÌÊ3 ý¼`î™;ÎDH'¾\Wò} ñs2�9r2‹Ì/'÷ÐW~G¹ôDœ2gè?ÎþZ­}âŠÇ÷˜Ï ¦ONÊL‡ûùåg¨RüAvÎÎÎT(4×MÛ �À¥R)‚ÞŸÛQ A1è,ÎttŠë®\.d/c ô¦2œûý^õz=îi+ º¾¾Žyùâ‹//�FqžAæÍf3ýö·¿Õ`0ˆ}á2™LôÕW_éÙ³g‰ªcr;îÑìgýr¹Ô_|¡Á` ““M§Ó˜ƒÙlû“ñõû}½xñBÏŸ?�„˜\.§Ñh÷O�÷Bþär9=þ\Ÿ|ò‰ …‚¾ýö[Íf³ÀÀonn (¬s³ÙÔ矮^¯§_ÿúךÏçQÖSRpŒéææF¿ûÝï"ye2™D¦ãû÷ïõõ×_ÇÙ5ŸÏc|�N'æÜÛj&öV*•S¿ÝnƒqCA6�0îHÝï÷‰h~gÊc½æ©ƒâ ˜-•J�àõi=ý£¥‹ì‚Í&á tl:�j6›Åø<{ÅÍߥR) OOÇEéa4z$ eÉPœ’)ã( Œ&˜e”(D’+_'éx½^­×ëÅÜÎçó0XPÌ›“6ÌŠÌpH8œ'?ø7JÓÇIsàÕñ!0ÚN¹Ç<@IŠy…Ñæ³(”7ÊŽ11æ0�b�Ü»r‡L`~«§íó$Íáðx×õõuTüœô÷v»Ø/øó¨# SJM�¡@VÚÝÝ]™8žŒÛ#—Ø71<yÀ˜w'ùcN‘UÖÃJOsÅð‹2€Ì±§ÊBÒ"¯i=€ÒLj‚´ÚívqƯ×TÆèwÙwC’ýË>Gi»“MT Ï!Ý›è�|>QˆNÒe-kYËZÖ²–µ¬ý”6¢ƒ•ibÁƒØ4â3d¥}l7l\UyïÆ_õçl·Û6‰4÷èuœ0J“F°è �“«Õ** à#çr¹DvŽGþ{Å ¢lóù|M…ïd˜Ï�ûÝ|? ÿ—yt’Ú£°™ÖÈŸ�¿!=e_¸oæÄYÚÇIFø?&K4÷EªÕª‹…nooÕívc Ýœ&el‚˜`Ýñ ð7車üñrYø¤îƒàkÜÞÞj¹\ÐÃ:¹ßàÄ$2Œ 1žjµšˆ€&ë “÷xð.„  5ëë`mz½%%J´Ñ7÷‰�èEöÁˆ¾¹G›qáÛù=/È>2áÙ5ý~_�FCïÞ½‹HêB¡ V«¥çÏŸëp8¨ßïGÆJµZ�ªdüÌf3M§SM&“¸#©×ëi¿ßG´8>½—ø§Ï„»œ~{‰@y–ý³Ò ŽÖÀÞg˜ï4¡Êü:iÊ3Ò>/r‹q L�w×ëõ OüêðšÝnY\E1 tzzDÜcœËåâÎÞC5�Õj÷UAþ '™ö'së×?p/9ó�Ü Éã{ Ì‚¹"¸¸ÕjŽà�Îè/úâ×j°Á÷È� ïàŽŸ8n‰îgtBÄÏF¾67�ôáÇŽæ¬LðʬQ«ÕJd>xÏxÁ†h®·YtÏ÷s}Oõôº€ì?×Óg¾gðº�ÀÚ1>ð=úåIÈ ç"دïƆÜ@Œ¢ç=Û±0°3ÇeÁ¹Òg[š´Mcá|Ö Iܧ<âb±Ðp8Là£4'ܧõß»løºº=†œ¹ ^‡<{@‰'Dx°¤sDcÿóþt€=Á&`}ì[2„>|ø ívä~ÿŒsyy©ÿüÏÿT³ÙÔ«W¯¢B‘Ë&Ïäþò\.§gÏžéîîNWWWšL&ªV«øÒívc¯�AI'''šÍfA|7� º ¨ø=‰,ïß¿×ÅÅ…òù¼úý~T0ÛívQ&5ŸÏ7@‰¼ù|®×¯_ëïþîï4 âžvô�›ÍF“É$Æ6�t~~ëÌ\°¯¸_ Ž€’†ÝnW’S§%H£Íf`6lFël6ÓÍÍMDl´Z­H¥´•”ÈhaÁÁQ”­V+a„JŠ…çBȈ�táÐ?žJÙ¡<Ýq@I¹±Çæ–Ù:”'ÂZ­V5ŸÏã>–ÕjŠÕ/¹, 1fϸBQÑ'¿4+E„RÊår‰Ì7æ9È$Åܪ{™=7ÖV«U|"Šw <?( W ¬�;O3Š—Œ'Æâéwôݸ;¹À('”�¿Ozr=š ᇡGyHOì; Ÿh Ö… áÀ¡À\�36sÖ›uñùä{Åb1¢¦ø®’’â€&‚�ç¢4Ygd˜}�‘�“H¿\¡9iãh¬•KìäÙË2¯䌅çòoˆ8“P-âäÎ ï÷9žQ,c½:�Ž …B\䆣‡~�ØfOxš70¤7™l¤æãtK §]áiæ­V+ ] �ÕjóJ†$kšµ¬e-kYËZÖ²–µ'p?[ÉËÜàO`û,’ÙÁ¢l‰’ôßc«áÇ9¨ˆ=ë4�U¯×#(Ë}�t3~ˆ÷Ãæ„ŸqâêcŸqŠùq0Ÿñ¹ìQá>gNBà“z@f|ú–&ÅX7ŸWÂ%E�¦¤x¶gj¸ïçÑÙN:å€oú÷üñ9€(·Ý!H¬tRâÌ -÷Áv»]”»÷Á�‘ ”ÚCö|Ý�QÀ‚f‰zg>vÇM�Àß““õz=õûýðEÒÁ‰ø'^fÛ;÷Á}¾YæËK¤ù€ôaŸìØÏöì*ü¼J¥÷Ñàׂ œˆŸÙï÷ã2x2—À¤G �þC\N&ýîw¿“$�Çã �¸_§\.k>Ÿ¾ÃxÙËȫ˽²'öwܰ�’Ì¿Òàvà,#T Í œ]—9n†\z&_.— R Ewûäú�µB/ KY çÁ”È&t‰µà½<Ëõ1{–5p¬—>‚!±–ŽÁ}ìœ`>Òºˆ€wÇ yöýý}¢ ¦b@y€ºcÑôÕæ}s{}Îø]öÀo¹ c±Xh6›%dÒ ?ÃYÇNùç ËŒô”àsÅ“�ìããù˜Âš:>粄N¤è3I:;;KèØápú= 6G‚I.—‹2§_ýµþìÏþ,t�gÿ¢' �$Åþ÷¤‡Ùlgôé驃�‡Çò’ð“É$îm'«X|¼oi<§üÝwßi2™¨\.k8È<’ ÀÙ T.—õé§Ÿê¯þê¯B?ƒ�Æ2™Lt}}­ÑhvÅt:�~ôR«Õôúõk=<<èúú:ðWÎ9È\—M)EÝßßGšïápöíööV“É$Ò°¸ c‡E£ÄÛ|>×v» ¥»ÛíÔï÷¤gáàÇ€e’îîî´X,4�u||¬n·å®PОeÈ�Áàì+¾^¯¸/ QŒ´-O‹D¹!XáÄÀñðT`‡.ßõ, ÆÀåJ�ƒ�MŠ’ä³þ~60}–‰¿»»;­×k]__+—{º �ƒ�𝬳;LDý°é12Ü1HG¹q„ñA]i»Q…1âŽãáÐB¡8q€R#ín>ŸÇÏ8”ظ8(|žq¡|Q˜d£ð�àðh?Ä\1ºÊæe¾�)ž�òòº·8 \‡,û}8Nð1G(X”;2çD YFiG%MÂ1—SMg噫£££Ä¥w<—”u)Ï#-Ô3u–ËedXQÛy±XÄüQ�L&òæåð\ϸ³ ¹…†£Ðn·ãÿDã9p1™L´\.CŽ$ÅZn<�Š||¬ÛÛÛ˜Ÿ¬e-kYËZÖ²–µ¬=�&8Ìøæ`¿¤ðSÜ_ðòNnƒ XÅ;ŠÅbÜ=éQÉ<Å{yþx>Öl6  €„w:Aâd™�ÿ øöö6ü-Ÿ«Åb¾¬G�;Ù„¬ò;Tù™ÿ›~пív«V«¥Á` f³©~¿¯R©¤áp¨z½Am`€GŒ?…ýþás €^Aÿ�)3¶ûžGGGZ,Qå…Èq¯:A‰2|X÷u[­–*•ŠæóydJpï–_Àóé78Õùùy” º»»ÓÍÍ�þã?þCß}÷�Æãqbÿ©Ýn'æÝá$²ê��¨³ÿ˜ÇÄ\¿áWBp®â³.à.°%R> ö N´U«ÕØOõz=*ùxó|ô{,ÈKè“ÍFYMd¢ßïëp8¨ÛíÆ]@ô�HzülH>0*äÚHéÏðýˆŽu< ’–9Eÿ�a1Àƒ'R: }†ä8ÿç½\y0�Gcß“­Ðétb¯³V<²˜=çx˜Ÿw¾ïœ¬�Ÿƒ�Úívà@>?ì×Ùž)å×d0vô ßs¹ôs̪PHÞÍÆ{ÙÏ`œNH:¹ïAØÈžÿ¡a/øYáç¿#XÁ ÎÀ6@ß9xϹÁÙêåiŒÌò ?+=†þ#ë~£WèŸô”�Á×h4´\.ƒÐ �ñ»=æêúÈÿïòå¶8™“V>f?_ù·ï?~îX±Ÿ{üœl³Ù¡¿ÛíÔjµ"à‚LHþѹ”lµZq=:v½^ëýû÷úöÛoCw�÷ ��ž¬Õjj4Z,Q¾îèèHóù\Óé4*R‘Åžøþûïõûßÿ^gggÑ'æ«ßïÑ¿X,Ôh4´^¯ƒÔ¶Üív‘!¼ßïC÷±Þܧþñúë¿þë8÷šÍ¦jµš®®®tss£Ùl„™RÌ¥RЧZ­¦_þò—úâ‹/G÷=t~~®V«¥~¿ŸØ“ ÒˆÍÇ…O(X®^¯Œ+R!7›M¤,;˜ABƒM÷’k0ÒËå2Ê«1¸Íf£Íf“ÂRë®ÄˆAùy4�_ºÅ¦à0Å𠢃¥€ Ò_�z�é$z 㑃Š�£Y©TÂx`¡ü b �ÀÆä»¼Ûë’Þì™;|©TÒx<޾ï÷ûˆ²Hƒëüac}Ì0÷ôi æÝ5Ææ Ç…•Ž|Br¨AnÂŽ¢¤8¸9È!.\)c¼sXx‰žïH9Æ@s’Ì™xÆLŸèŠŽCÕ£‹E¤¤&ÒG�VÂAáâ9”Á£†'¿c-سüŸ¹füȦGðpØb葽Æ�.I€,@Ž}CY7ôÊÃÃC¤ÛR{œè'2 Œ<ÏØcär¹D9? HÖƒ=‰|0¯ÛíVóù\ÃáP‹ÅBår9Œ†Z­¥$…rÇñi·ÛÚn·êt:a°QÛ•ñzd`Öþg7×YËZÖ²–µ¬eí‡Íƒw  Äæ%ø `Âý+ì4ØÜæÛíïG§p‚‰Ï¸�ìäÍn· 0ð•Ýø;D—*ˆÞ¤‰žë“—ë@ö~`×Fú÷Ü÷Âg”™$y$´¤„M̽C^™g;àã‘Aþ7@Ÿ¡‚ ¾Ž—yðÏpr†¨åÁ‡Ày5úŠ,QA„¹ð(x'©Ò ¬G(;ØÅ¼ ?~±·—¿âž•á~µ“…ó^Ÿs¿Ï1ó(Ýn· £b øX ߃h `Þœ‡§Šà&ž�„<áC§ƒPÉìøØ;—Éîë¼Õ�êz¿û93=3|ÌÐ”ÃØq”"&Z8äØèdà ȬÂd!' Óò" … ´7±³âÀYp$^„t‘¡$b¢X¦DJjÍh†ÓÓ�ª®÷»º»Y4~gNÝiR”•P6|Иéêª{ÿÏó¿õ}ç;Ðj8ªV«>Ä5}ö˜d2©ÍÍMû>Ïâ{�ý^O÷îÝÓÞÞž�†ŽŽŽ ;99±(kRïè{ßûž*•ŠES0¼¼¼l©!!†Ãá\-mÖ@<ûïA?Ö«««J§ÓsJ“••år9Ã>È\Ã÷ÿL&£ÕÕU[ø“d2i™E|Z¸étjAœtà|Wæÿ),QÑG‚f™?Òêãï|ÖŽÅÅE›0?ÚÄûPx¥ÓiM§S[‹µZÍÇ�ŽŽŒDcÁϲWX—Þ/±æØÓétN!à3ñ]ŸuDà8ã�Éd ”eíx ›ûû=Ëú&h•ýJÀ|"‘°³‡òKKKtàý~_ h ª‹ðo:’ŒìJ&“*‹J§ÓsÁ ´Œ„s„sŒù“d‡Ç7ø<þ¬ \ËÏg~¯«T*57_žÈóç˜ÇëØ[µG` IDAT÷�š¿1ÇÞ|°~•± â1^,àq#8îýd0e—'� OT´ ²ð„÷ /°FÀÚ¥‡)Ã(cæÈZð™¥Àwý˜y¢‹{ùqó„—o„+ø›$« ÉYéÉÁå}zCο·}À ø-ä¤?¾Q ssxx8G„’Z2‰¨Ýnë£�>ÒÊÊŠPŒ°žñ¿WDN[jµ1_§§§&šÉår&lá }A<_]¹rE‡‡‡¶8g766ttt¤¥¥%ËbDM¸\.§/~ñ‹ÚÚÚÒw¿û]ó™•JE{{{*—ËÔŽºÈõ³ÞàH¤³lkW¯^Õ·¿ýmõz=¥R);{Òé´�†ŠÅ¢nܸ1·>æH£õ¯þÕ¹3´ÐB -´ÐB -´ÐB -´Ð~Róă�X†TðA>ÒÃOOÂpÒùxˆ/æD Ää#‚f =Yøð¨°CŠm¯hòà”Oãí�!€ÞãSù`X>h�Ú™€±€¢>s†Ío@{ˆÀ™ìƒå‚QÐNäò Ÿ%µ@�öôŸ÷ág~þ<@x?�N•ÍfU­Vurr¢l6k �—Áô<’æˆË:õ$¤�°§Ï¬é¡p”{z"*¨îVÁq–Î@c"­ ª#Ž}ÀËò/Ù˜'IFVH#«½BÉïW†ò:¯1�(( `is<W&“Q.—S*•2õ sD#`ŸbeßÕëuåXsƒÁ@wîÜQ"‘P«ÕR§ÓуtçΕËeKH�2óS,•J¥æR\A@ÀÈȯ¿Xì•�ñ�í^]ã×?é§ YWž8 �’oÖ{°¦Ìd2±š!¬KÒ&V«UËJ´°°`í4öëœ5„òŠO¸h¾Ó½B^àƒPL år9#Þý}0¸'A=ÐΜ0ŸãñYZ=‚yGŸ®Š=$3 VñõÌS®Ãï%`|ûÁ«¦X—!0Ffø3E’ß³ÙÌæ“s’-˜�>1¶v¼îƒì1Æ A[hŸ÷ÁmO`x¢ÈŸUç� œ/Þ·s=o~­Ò?úÌû} ·Ÿ;¼�‚S’¥/õ>—ýÉógãä!^mÍÞõA3¥RIù|Þö"žQhAÝ<[°w˜7Oºù€�Ùìaù ÚÉÞcü|`ç¡ßÿ(\=ÁÎû!â:�Μ•qGý‰âÏÅÉd¢r¹lä“'­Hܾ}Û9xÆóBÆ“k�mˆV¾p¦–J%¥R)Û.\ÐåË—-둞ˆÅb*‹’f"ûÜç>§X,¦V«eþ2‘H¨X,ªÑh(�N›JQÈåË—µ½½mDX½^W³ÙT¥R11 Ê"Xâ‰A�x~&ûñïáÉdRºvíÚÜ^ ‹m„Zh¡…Zh¡…Zh¡…ö™˜‚)¥xÝG¹úôɼîIRŽÖÉJ­ À¾T{ @ ÅÁIâ£Ö¹ ¤´<€îÕ AP Ž6Bbø�Ç h�Çãò‘!À]Œ ¥W§HóÊé! i®¦ ÷ðÄã/ÍGN{ауb>=µÌuƒ@!câïu^_øÝ÷Ÿ¾ ¼Êd2ÖžX,fk#›Íˆv^?¸6S©`8c8E¿Ç(\ p ñÅaÜ|FæÕG¼�ǵ¾¾n©ÇÆã±ªÕª‘ ~mš¨÷û}KÙiÄœ{ÐÝ�7ã(øÈžbŸõz=›k@ê§�(�N›Úä\ò×ó©áˆæGñ »´´¤N§£o}ë[*—Ëj4–¨R©Ø˜ºóÿ ‚Â�%kÍýq\saaA[[[ú™Ÿù+÷€JÀ_wccCÕjUív[«««ÚÞÞÖöö¶jµšÕ:^^^V»Ý6׃ñÜ߃¶ü Â�ýè³  $j�þK²:€‰ž”_\>VµZU¯×Ól6S«Õ2¢•6û6x?�ê“ôxžôð)¡ø<ÿ’©Ä×cŠF£sé™sÿöŠˆTüûŸ}Òï÷-;$9„kÚ§c­Óvˆ~ÈLg¯ÔñAþÜ¢=Ìa¿ß7•W,³{ùyƯð~H¿ aÏ>Ïd2¶éa6ü‹'¿}�Æ\ú{pÞyBˆqÅ×ù×ý¹Ïúªsø Ä”W—ú@ßæáp¨N§£xM.~�³Ò+ü zð…Œçygþ˜ùòçþ“5P¯×MIêç…”ˆœŒ¯W½JR§Ó±€ƒñxlYš&“‰‘+KKKFâ�œœ(—ËÙžñg„òââ¢�†Z­–ùê½½=ëÊ•+–9­P(èÚµkºté’&“‰Õa÷Š3ÿŒ�ÍfõØc�iaaA»»»FT¡îAUúä“OjssS½^ÏúW©TÌ—ß¿_?øÁT«Õ´²²bý&¸�õÄyíŸ5%i{{[ÅbQ?øÁttt¤Á``%R ØHuÜÃ!iZh¡…Zh¡…Zh¡…Úgf€L> Ûh42°ÒG}ûô=¾æD_’‰˜–4šúÚy‡ëÕëuI²ú”°ç‹´É< ˆ#Í×_ð)‡|J)Dyp�~‘P‚¨Á¨ãA3¯È�ñÑÁ€…¤ü’Öƒ‚¸ãZŒ%c$Í+ÅÆ‚P Ê«Åa H�æSp±6ƒ�†Ãá\Ÿ!� ïö÷÷­Ét:5b�ZŤŸ¯V«QèŒÿ£f2©¥<Ñé÷€¨'¼²`™÷²Î²Ù¬ …œ*BƓٞœcý³¿}9IøsR”ú±ˆö :ãÈßüÙƒ¿ðŠ5¼o ª¨&“‰ÒéôQî}2JÒz½n÷òïãú¬AOØ£¦b­•…>hƒ¾pöü3/^ÉëkŒ{2ÞŸ#A2È¿îI~vûçæÆ‚ð~OúжF£¡û÷ï›êc}}ÝÊ PCÆïˆÁ _@¹É~Æ'yr�õäk›ã§ÔÍ»£ÑÈHŸÅÅE%“I[«<ûðB� ÈyI¦ödN˜3ß&OêùóÙ×¶ª*ýYÂüCò�*‘sÖ?�øò$^¹Æ<“’“³ˆO÷�¨»ºÝ®)„|mÆ••­®®Z Œµµ5{.)•J¦R„Ü_XXP:�¶s#•JÙ3`©T2?³¾¾®K—.Yi‘…… ñéwQ\q­­­ÍÕå‹D"Z[[Óé驲٬.^¼h¾½Ûíêƒ>ÐÓO?­t:­oûÛªT*F68á v|Öª6¥/õz]ÿí¿ý7=xðÀνt:månHQ÷¿þ×ÿ’·�4 -´ÐB -´ÐB -´ÐB í316xrEšOãæU:€Ô¤ " ~iiÉjÿ@¤øš^}¼��V&õÕ¥K—戾ˆM_›�hqÚæ?CÍQj%ñwŸnÊ×™ðmíõzö@5ÆÑƒ§k€1>Ý}  Ž}ô(ý€tÜÁ Xüï’æÒÝ„®roÈI¢ ïIª`ô=ãÀý|*?ŸZ� Å·—~z¥T0ªžûÓ>>ïU9D¸“R ¥÷Ä`´{=ÀûÏ‹Ž / :==U»Ý¶šÅD¨S£ˆHdÚK[H7FÊ7Q+++4sÿ^¯gÀ7äÊ>ˆË~¿¯V«¥h4ªl6«l6«t:m©’¸`( êt:U§ÓQ¹\6Â2�ÔJÍfS£ÑHƒÁÀÈ"˜U*ó^má÷y�(A¹D$:à+`¹'-é»WïøS/¨T*ÉËý’ɤ©Q\êè?é™XSô ?àU#Á´ƒ´‡¹…Áz@ݯ]OÀi¿Hãtxx¨ÃÃC‹ÔO¥R êt:ê÷û¦¼A±hN»Yw¬H[_¯Ž1ðÄ"óáUøt[uj¡�Œò©í‚Ä{œûC®àŸQxÒÒ\òyOhø= Jàý{~þðÓœ9þ ôk–k£ÀšN§v† |$Õ„÷ç^œ] ø ÈRb¬KÞ‡ï Öl⺴Çf~/yU{šñóg¬Cß6_s  )Áè}Öl635‘O)···g$úúúºíÖ)ƒinƒêæõX»Ý¶6øyóuÈñpVqoR¹5 ¥R)ë+uø½Óé¨Õj©Ñha‰DÌ·1G¬#ÆÀï B¤J2¥”'(ãñ¸ùdH2žK˜?Òlüƒï°–-Eœ_SøVA}¢¥¥%SY e³Yõz=+—ËikkKétÚRnB®­­QÎsÛââ¢Õôu€ðUÔzì±Ç”ÉdlÌH zzzª^¯gi=!Ú!’r¹œVWWU«ÕÔl6íwÖüp8Ôþþ¾ªÕªö÷÷õá‡j<ëÊ•+öìxzzjdÏìkÎfùµ‰DT.—Õjµ,í^¿ß×x<¶ÚL‘HDƒÁ@»»»ò’F¡…Zh¡…Zh¡…Zh¡}&æ¨?&“‰¥™Ífs5V<˜ ðÈÐX 8Þjµìº^å‚ñ.`#@²‚_; Ìoy0Ö×g!j°¯ž(ñ)99G|{x?ç‡`NQh�n�ùCyµ°°`)#‘ˆÕêCiÄ\sfú ïög§'ðƒþ;ø:ý÷ç—÷ÁìA_7  ��‡¨÷�Ì ïE)7�•J¥Œ$ƒl@1éQ«ÕLyX¯×­nT»Ý¶q罬/6Aê4›Í¹3 ÿ$�‚Ê�¥¥%­®®jssSGGG:88Ðáᡃ�öööŒÀñ©l;�Ž*•ŠêõºF£‘+ ‡C#xF€¨…låìæùˆµ Yí§ÜweeEƒÁ@µZMÑhTívÛü/ë2Œ¹`~Qê¢6¢-Ô´$h Ýn[ÝÅB¡`�ÃáPÝn×ÖV·ÛÕÚÚš.]º¤�� íïï«ÑhhuuÕ”c¤qeù3¶×ëi<+�+—Ë)“ɨßï[º×……Ý¿_W®\1Eû;—Ë)�Nk4©R©X},HÉ`U>ªÕª’ɤ¶··5�ž¥ëët:úÁ~ ÃÃCÕj5U«Uó ÛÛÛ*—Ëêt:Êf³æ§Xóô b޵‰Úšg�jµjµ•ƒ�$©Ýn+‰a*i®F–’F¡…Zh¡…Zh¡…Zh¡}FæSÇ` z*Išk}4:¿í ÀujÆã±‘&^É©Côj<×ÆÆ†åž/•Jj6›’FõÆb1¥ÓiØ=! T=àÆtÒ:ût(>%@.ÀˆOIçÓšy¢�Ö«.|ar¢|ïúý¾EÝz�òŒHdvÀ0IsãîÓ¢ ä rà”¹¬òä ÖwbúQ畞 D5S*•Œ8òi’ˆ�”Êd2‡=í£µ™OO¼�žž€Cš#êÅ ‡C»®¯iCô2íôDŸ$KgÃze\‰’___Ÿ+†ˆFZ)ˆXÚàI?æÓ“B´³ÛíZß#‘ˆªÕª�Æœ ãääD�NÇÒnmm©T*Yô9Ë�NGÕjÕˆÞ~¿o‘ÍÌ#5v&“‰ºÝ®6664uxx¨x<®étj…¿Q,d³Y�F#µ¨ÅÀ¸’æÇˆ¤jžÐ�FJ$ºté’r¹œ�‚€Œ^©Á¼à¿‚äe£ÑPµZ�SÉy¥Š,”P¥RI{{{jµZºpáÂÜH¥Rêv»êt:¦ ðÀºí!ñ1¥RÉ>ïh4jDø`0Ðl6S¡P°ô£ÑÈ€Ëd2ikC’*•Š ¿ÅÜF"ôI—EJTˆ+ö*sêÓöyâ�kˆ€ßGeTØ2—(Hü>b-@¤A.ŒF#ÅãqE£Q«P((�š2’¹+ æwI�Ès�!¤k6›šL&j·Ûºwïžf³™Õ$[YY±þ$ ;[ =‰${§Ó©‘U^µÃc­/,,˜ŸfŒ3™Œnܸ¡­­-ý�ÿñ?ôÁh8aQ柡¼�ív»ÚÝÝ�k‹ïÒÒ’šÍæaÇTwá“ ” tR©”z½žšÍ¦‘nÔõâÙêCüéx-�O'TPâQá#–——ç|Ïd2ÑÁÁ�b±˜®]»6çgìŒQh¡…Zh¡…Zh¡…Zh¡}PΗ^Ÿ �ƒÿûÏjxóÑâAõ‹'�xy€˜���‹Å,º]zX#"¨˜ñæ‰ ß^ÿ7úé• �>ÚØ“AÈñ)Í<Éæ $À!€ øÉý¿°<¹ã£Â¹¾ÿñ i>õ“Wy€ •„[æ(XLJqð÷ð}æï>BÛ« |ú¢`Š$ŸºN’P€D€k,€à¬EêAˆI¢Éê}š"}N{‰�÷À#û‚2“É(™LªX,*�[úÀe”=¨w€Á+1P»@A Aö¢ØÂOàã}ÚF@v¯6ÀÒê©pö3k†:_þŒäþþ_”%¬_/‡1út¯HeíqÓæ-,,˜ô¤’_׬K|$1R’Ð+š[æ×§¤cm@XÏf3u»]ó¡^ÌœãcP�@ €{• ¯C|´Ûm#‹ØÏ�>=J!ö±÷«¬5ÜÁ: ®^óÁ&¨)oÞ¼©R©¤Éd¢Z­¦££#« †¿ô¤1÷DÉØjµlÏCRzu¥W>óŒåÏ%ÿéprr¢d2iëb"‚g| ×�F£V§I’‘Fkkkvžá!•˜G愹öσžø þ ñL&céV³Ù¬b±˜ŽŽŽñ ¦Å�óâUµ¨ñ¨Íç p”¹�OÉdÒR¦Ói#8»Ý®*•ŠÔl6Õívmo²ŸHýGÛ Ü˜Ožƒø;~Õ?3ÓÿlÅó¾Âq¿áp¨F£aÏNœXH…Zh¡…Zh¡…Zh¡…ö™˜O“Eô0©´‚@ÀФG€ °Ž¿yp�/Ðç¥ó ¡$¹H7âk ñ…�"‰ÌÕ’ðÑó¤&ñ ’'<ØëëœP¯Ã“ Á~B°ìø/þ®Thä3ÜÀÂGvÈŠÑ_êFBò7ÀO€ @ ?G~̃D…4Çãñœ Ð+Hz•ïñ×ŰPf¡˜"B€ˆ^¢ó;�Ž$Yál’­�ÚˆHi怕h_Ò‘‘ΊõãÕoô‡ô@¤½C­€‚ @™5 °%É€6O–ALHµéô¬>D¥R15„M£ÑP»ÝÖÕ«WçTYétZÉdR›››1>Õl6Õjµ¬G§Ó1�°×ëÙï™LÆ€ÖU2™´ÔgÅbQ<0Âh0˜ •ÑêêªEƒ“ª¨P(¨T*àJÄ6`-›�ÀÎd2º|ù²®^½ªR©dýÌçó*•JV³ƒ>J‰'Ö$uG‹Å¢E¯³^=Ñ( 8‡âÂ`eeEétz.â<‰Ì�ÿìeü‚¬YŸ€�¨ZP�Q_ª×ë©^¯«V«™z"™LZú£Z­¦““U*Õj5Õjµ9‚ BÐïmO ûtTI¨ìØÓ¾­F€Éüà›¢Ñ¨J¥’677ç@SOœ£j@õÈÞ„|ó$ d$ŠîOš4¯tBABŸ¸‡WerfAì²Î}*3È^u”>> Óé˜oæ3ÇÇÇêõzsÌx<¶¹Ã÷-..š*–{Ð@oTH Ì kˆó˜ñÃBª± ª»ãñ¸Í>ΧKôk?çIUB†°FÇã±Úí¶­ÇJ¥¢Ñh¤^¯g„5$O§Ó1ŸÇY�²•f³ÙT£ÑP2™T,Ó‚ºÝ®­ÎdŸæÍføàæ‘9a@@°På-//«X,©0�ôÿá?Ôc�=¦ÝÝ]5›M P¨V«ê{ŸÀ˜â£ü=¥ùT°ìÉ ‰�Ÿòïá|¤?>MfP1íŸÕ<¹ áFûXév»FÌs2·(Ö˜OH#Òß0¡ÊT«Õlm³!¦¨uä‰#öû€s„{ŒÇcu:[Ÿ¬uê¸M&;‹ƒ�AþçääDõz]}ô‘>úè#5›MSÞmllègög%É”d¤úL$FQWËŸ#þ>Á9õ$~Ы¼=éèS W«U¥R©�4 -´ÐB -´ÐB -´ÐB í§c(¢¨¸�Œ%jþ¼ˆJÀbÔ‡ñÄÁy¤‹ô�xàË4_ô¥3 !›Í*—ËÙï€g€IAʼn�2*H‚„Tð}’Œìâ^þ3 ‚ÁÈS¯z ¦?ƒ°„ò¤À à5÷âoS¾ 6Ÿ’WÁ¹öJ‹ó%¢z ¯{ņŸÚÃ|ÐgŸ¦�÷ûõÄuQdžQË+â|ô.sãk[øöú´g¨g|Ô¢^¯›:e ëœôfþlBÁǽ z½žõÄOhiiÉÒ6âC93ñýÌ·'K½ O^ÉÅša��œœXj²ÓÓS•J%]»vM‰DBï¿ÿ¾ööö,M.÷õõðH-Êu p*W*a=úöúçÿüÂõY«ÒC•8d’ðÏkþÚ¬ >?�NÕ¨êq IDATh4�Çç£~Ÿ0·Ôšb /..*™LÚÚ@UÖï÷uûöm•Ëe5 M§S …9Eý~_vΠzÂÏq�\.§F£aýˆF£‡º}û¶¬5Ãðù§§§¶¶���uxx¨ï~÷»:::25êÒÒ’ž}öY½øâ‹zê©§ÔívõÇüÇvŸz½nä„0ûЫÚüØù9†låuÆÝû æ�×†Ã¡ŽŽŽ‰DÌŸ˜�Qh¡…Zh¡…Zh¡…Zh¡}æ}~÷æÁnÒxp ð€Ú瞸óŸçž(=¼òɧóí¤´�(tIFdø/êÁvÓ6_»ƒvú{ò^ÆÂ§ªã½´Ç§–�õQë¼—h\@¼………¹¾z’'ØwÀ î$Å0¯ðä�¿n0ÒÙ!A€#H¤ùèhO$Aòq}¯´ñ‘Ð~ü&!ø kƒþ(£ÚˆÅb�¬M@”L³>*œz#ÉdR£Ñh®¦M>Ÿ7 Œˆh>ë×H<·º Œ!µ…HÑD­&¢Å¯'“‰î÷ûFÜ ƒ9e Qî¾Æ *.êf¡ t'â�Ú*¼ækþ@œ�ª ² … ê>>ã•�^ÇÜz"ÒïMŸ2Óï>˽ü~÷{ŒTH€›¨Â†Ã¡íIH%~z½Þ�¨èÕšÈe>¼’’¶xâ“:Eù|^ÅbQ¥RÉHUæÈûY_Œ޳fic�0g£²cŽýúó€7ûÙƒëìoü‹$S(yª÷~sÖx_¹”H$æ”E¨!ð8(#|ß8 8!¦½ºÚûUæ ŸƒÊ�¶Ó/kô× pŽzƒý¸¸xV?°ÙlªßïÏ‘�^!9™LŒ„âwöêÉɉ‘IôÓ^ tôçüt:µÏó÷=99ÑÆÆ†£¾ÎŸWnø ¿¶=iäkϰ8k > —Úí¶ÖÖÖôwþÎßÑ•+WT­Vµ³³c*@ö ÊI¾¸7~ÎûQöE�ä >Sñ¯Æa 3^žüôj£ åÏzŒúKÑhtŽÐÅ¿×~‹3™T‡œ/³ÙÌRÚ -//«V«Í쬬¨P(h<›ÊiaaAù|Þˆ%ˆªÅÅE‹EKk©8 ´³³£jµªÓÓS«/È3U¿ß×þþ¾)w»Ý®uçÎE"Sw&“ImmméæÍ›J¥Rºÿ¾îÞ½;7fÔGB éï <)èÇœuîç“×y–>kC`¦R)e³Ù¹ù I£ÐB -´ÐB -´ÐB -´Ð>ó@ ›4º{ !¨´ñFôíx<6PÚ9AÒ"¨dñ×õj€^Àe˜øÅãq#k²ÏK ÿ>*Ý«„< äÕ6UþoÁñ¢_ž0òQ÷Ùxg|z¬àgƒ ÷ôiï<€qžê(xMÒøùÔM>²Ÿ÷úÏ{ /HæAôx°rŽ”l´°ÐðÇG¹CLdÅãqe2�žžZ*2€&éŒôZ[[³47([|t¶tÊ¢�!b?•Ja(æÛ‹ò�qd],//+�N«X,êääDÍfS•JÅR+ùõ3�T.— &½b*•2´P(X*"Àk€ÔÛ·o‰B½ æÉÏÀžW¶u:juuÕÖu©TÒp8ÔÁÁÁ#5©‚`"„Êt:5PºÓé˜Ê�-¸fQõ@Êt:ÕëuIÒöö¶"‘³íkkkFh[= Ö$kâ ßáq¯Â¸;/õ—…} 2ï;ðožœò "×ö¤m„j4ÜRƒpš±ÂO¡X"}"`>m�€b_IyIF\œžž*“ÉhssS…BAÅbÑêJ¥Ói[“() ãf³³ºJ”ø1Æ€œ} iDêE@xöŠ$KTPx_Ígüïì¦��+üŸ¶pFñšß'A׃ÿŒ+ç¤5j§L&3çS<ÐïI;ÖDÝl6³¹¤“?�YG�²*�*›Íšú‹6ã½*ªÑh˜¢†ôŸ³ÙLÕjUõzÝj¯A®AæpMHoüëÒ#ž<ôk„ñòg!@»'@$Ùšï÷ûªT*ÚÞÞÖææ¦Z­–‘F¾Ÿþ|óë<øÜâƒW¬ýžØäùa{{[ÿàüÅb1}ó›ß4•D ×eOð\á ‚ÏÜ—ç™u®Ïn¬âû‹ßåºÁµëý¿7üóBß}›YoA?‰‚“³ÖY0ž <88P¹\Öââ¢úý¾2™ŒÕΣÿìÕd2©••õz=j<«X,*›ÍªÑh¨^¯ëððP‹‹‹VûçôôTÝn×úÖï÷U.—uÿþ}˜¯i6›–ö …�'@£\.«\.Ûùâ÷ié+¾^’ù[ïcý|×�'1¯ø$@‰…¤Qh¡…Zh¡…Zh¡…ZhŸ‰Ú |à‹¬Wç•7ÁhZéaí€`�þæ?'=$‚`&‚Uü5—––,"ÐУ€ÁÜò^Œt’!.�´×G9ó@:Úß§ÛóD Wmy@@ˆ´C¤eb|$g³™EëKó |PiDº›\.7—:m6›)�k}}ÝRÕQ\�&‰X ¬ÙlfÑÃDXTR3yÀ2 2‰(ŸÏk}}ÝÀΣ£#[Ò î‰�zˆÔi¤OÊf³* F„Zú�!æSçx�éaê$Èêÿd³Y---éÂ… VS+“ɨÑhØÜ{°ÐƒèPô†øŠÇã–Þ‹ˆuŸÊ)‹©ÓéèÞ½{F y²•B:�Öêêª"‘ˆ­ÑhTûûûÚÝÝU»Ý¶SÍfÓTSÌÑ‚Õâ@…Ñn·%�¥ªªV«–: ÿ@Í£^¯gj H]ê9¡¾`½ú=ñæ'~õz]­VKÕjU�NçßË>„Œ�÷`7ä"*¹X,¦~¿oþÀ×ìÂ�BˆæóyÅb1­¯¯ëÂ… FN®¬¬I‰Oõ~ÀPrŽ5â×Z°ÞŠW€±æ!‘!^Ùçô°š³ r�š9A–tnÞŸá«HÇÞðä’÷ÉœCÓéTvoT‰Ì¿'²ýÜqÆðÃÞìv»¶nIÍÅÚ`œ™7ýHä¡Â&‘H˜Ÿ¡®÷ò©ƒ�]Ï¿FÚÌétju„ ,=iäÏrO^z²ÏXù:Y œI¾oþìôç/ëH’îÞ½«X,¦'Ÿ|Rù|ÞHz®Åxaž¬ñÏ ôŸó¢’³‹3ùòåËúÜç>§?üÃ?ÔÿüŸÿS­VËîM@ë×§Nd xÍïÚE›=aäÛü9�pð„©Úð~3h¬Cžü<ø Áõý5üsÏcÉdò‘g-]�NGßüæ7µ¿¿¯|>ouÓé´­G|çööööœÏÈf³–êóþýûZ]]ÕÕ«WÍ��žžjßj`}ôÑG*—Ëj·Ûæ�ðÝnW'''V¯î;ßùŽþÝ¿ûwZXXÐþþ¾vvvtxxh©A¹w¯×S¥R1µ)ç�ôPééÓ^ú "?†>àb.¨d%¨€T¤XH…Zh¡…Zh¡…Zh¡…ö™it4}Ô5_v=QáÓù”oþwé!yÀ—þ`Þ$Eø›¯YàÓ’ùÏzR�¢Ûí¨çÓPE"‘9pÂGï¢@!ý’ô0Ý`}0óé»möó™ ½ŠõáçˆûyB(H#g‡Ã¡E•JÅ H6ê„�â‰È{Ú 0êkEðw¢£'Þéækùx’Šh{æÂŠ1÷sä×1ÑûŒ)zü)>Úƒ¬¾’÷%>ý$AÞÏá·ƒ ¯ÄòéÁxÝ“¤pƒ|b�O&ó þ,D�å•´_ÎgS©”]+�NÛPŸAÊ4�9Ò5›ÍZÝŸ……;Ûñø¦ñx¬^¯§n·k5h|݈]Æ_GjD|n0™?7™O?æþŒ |ø}ä@‚dƒÐ*—ËÚÚÚÒææ¦f³™ö÷÷-¨ƒöq.¯åÿ漺¥ {ôæÍ›úÛûo«Ùlêƒ>Ð�;wŒØðkÃ_“µ@À‹ï—?wü9î}²'·‚ç•SÞã׺'9ƒæŸIï �qÞ³Pð™Î?cà‹yo¿ßW,S¡P°ZtÞâwîÞ½«^¯§çŸ^ÊçóF ùíÓ±²Îx„�³ÙY�»J¥¢r¹¬N§£v»­ƒƒõû}[ƒ>(ƒýÀ~¼}û¶þÃøÊåršL&j·Û‰ÙûᇪX,êêÕ«úæ7¿9W—�9Å7ùu$ñ_?‡ÁçdžS¼…¤Qh¡…Zh¡…Zh¡…ZhŸ‰A„ñ¥•Z|±…(˜L&s„‚ô0 ÕFñ`‰'£<x< ſԾ¬dà‹6QÝÁ(wÚ±²²b‘ê¤'#š�~E£Q‹Få:¾ÖDDˆ3#uÏ‹,•‚ÓDh�KßFÛjµlm³æØG�ô{ 3Õï÷mÍE£Qu»]SÄØ&“I›"ýs¹œr¹œòù¼òù¼Òé´c¬wÆÈ§bd�ù4”üëÇŸµíÓÈy‚Ä�hA¥j<7¿î÷;sŠª bÂr‡6òYÚƒ¯òÊÚá‰Oö!ª®M� ïÑßߟ³œ |Î_ÛW qÍàøaŒ±Þ žÏç‘H^]L{Ï{Í“"¾¦©T¯]»¦x<®N§£££#ÛGø v»m}§ŽÏœ›Ô #…�WÒ ­®®*“ɘU]µZÕÞÞž©OÇã±ùU?&~\‚Õ +++Œûô>BÐ…kÜy…�öõ$J0m©iH çA-Ožy`È>Ò|Ú4@RÆ€ÒG¢KšKÉD$<À? ×�ÇF øÚ+AÂÎG"û1ö@óéÛË�÷nø4NAB�û¶ ‹²˜'•` Qú¼Žrà}aaÁj¨ CŒyÒ@Õ¯‡H$biÈ•¤‡êj“@ ðµ§)!ù ^<©ÅZ¦?étÚˆ�ƒƒíííYûúý¾�ÆÃáÐúLÝ”Ùì¬öÈ÷¾÷=�F#U*‹¾Îd2ÚØØ˜SoAnp£XÊd26ì§étªÕÕU�F#ÕëuU*5›MµZ-=õÔSÊf³zì±Ç4�•Ëå´´´¤»wïÚXCÚñ/{Ô+Ö½:�=!ÑëõŒà‚¼¨×ë*•JÑ^­V�¼‚€H¥RF:QãŠ5Ðn·�°€Ã7øzEƒÁ@‰DâõQ*•2¿á£Èãñ¸¶¶¶Ôn·U«Õlœg³™ù R)ÑîJ¥b ý`0x¤þ ×gÌXßm¾¶˜'9úý¾ù…¥¥% E"«u”Éd¬FÑêêªVWWU,•Ëå,µV2™4ÕÊ!úÁZÁwzµc$ù%Ù~f�°“Ù?¬WŸ’“}�¿éI{H-È(ÚÈØÑVNq_ê2Ñn¿O~Sç òeÄt:5ëbÅ(©{½žÝ‡yk46—¤Ôòín6›æPºD"giLùýððÐÆò‡õÂxs†ã#د>ý^PÉâ�uÆ” ¶Îf3÷àùøq�Ÿ¤¼ðs�FÕëõôýï_[[[–²�s7¨øõ€<÷e\Æã±)Z¸êÁh4ª‹/*‹é»ßý®ù�`zFÎMÆ”u;›Íl¼½�ãÿžLòýöÏK¾üÏ`ÿüã^3ø»ŸOÿ\ÀœxRÖ`~¿²w˜wIÚÚÚÒ_ý«uŽüüá¨z½nªCžîÝ»gŠQIêv»æS‡Ã¡¥„£¾ÑÆÆÆ\ÀÁp8T«Õ2ÿÞh4Ôét¬>>ÚûÎÑhdmíõzö,âÓ7Îf3Õëu ‡C%‰92|8Ú8îíí)‘H˜8¨(ò¤‘'ªóÐúÎ;ïèùçŸÿ)·&´ÐBûiÀ‰¯AÃ`½ô0- `‚¤9P$H8ò%Ø×åð€@;išH+w||¬b±hÀ =€jÁ§bò*%ÀQRe2­®®ðah °îA¢ @ Y@{è�c †< C•R©djï““Õëõ¹hOÄ�žžšj„¾ó>ú1·Ì=>¡o3¯{°2Ì“A¼ä‰:$£«¥‡©þ$ðˆB,™LÚ½ˆbh^YYQ³ÙT§ÓQ6›U½^W·ÛU"‘P±Xœ«=ÀCŸ$‰DLÅpÃü TñãiÇÚM$ŠÅbÊf³ŠF£êt:šÍfÖ~À±““‹Å9Âq6;«¿´½½­jµªƒƒ»6$f»Ý6@|uuÕˆŸvêûßÿ¾$Yª¶\.§T*¥ñxlµ666l<µð}ª»f³©\.§l6«ÍÍMÐ( ÎzòÉ'•ËåtíÚ5e³Y ‡C5 M§SóX¬QŸÞ  �ÔvŒ/5TXã¼×§AŠD"ºpá‚©ÔÒY7™LFý~_­VKÃáP+++ÊçóFà´Z-«�Q¯×Íß.2–Œd.j ÀCÖ:¤V6›ÕÚÚš©Ã Y¦IiÔn·MÙ†4dÝB�°ÞØ'Œõ¸–——Mqrr¢v»­n·kDòÒÒ’ …‚ŠÅ¢f³™r¹œJ¥’ŠÅ¢òù¼¥ò‹Åb柃ä0ãAÿNOO•ËåLMĸñCÍ.Æ0•J)‹Ù~ZZZR:�6Ò%#¤0÷ Flú³ ž½„o¨Ç_°ç9Pœñ:à?Jü„'�ðS´Ÿ{¡Žb}¢² Ÿ$Û¯œ}ø5Ÿ"|ooOwïÞ55c«ÕR­V›[(¨Ž��Õív%ÉÎeqúñ†ú{e¦ÿ÷`¼üå‰ ŒßãýuK½ º;�Üà}^™rr¢N§£ýý}]¸pA—.]ÒÎÎŽ½ç<‚*¨ØñªR ²n!úòù¼~åW~EÛÛÛºwïž>øàS]â«$™_c]pBß= àÉ7Æ•ÑyþY§U ZPÝJýõ‚¤Ñy¯ûóÙR¼×+,½ºš¾á‡òù¼ž|òIõû}ó1¤ít:FÔëÛßþ¶®_¿®�� {ò)/Y “ÉYúÔáp¨n·k*&ΔÃÃCM&#øYó|Ö?—ðLˆ?go@úã÷ý3óLJª×ëæs| ‚'ë<éççÀ?¯ñÌãŸ�ýÓ.o!iÚŸKÛÙÙÑSO=¥o|ãºqãÆO»9¡…Zh¡…ö©íå—_ÖË/¿,i>Š.´ÐB íÏ‚ñÅ4˜߃˜�fõ “ó”&ÒC@'({uˆoÃtzVsu_ž‰pöd–¸|:<`€šétZ¹\N™Lf®ñx\ƒÁÀ¢Yy?À)é~{=`äI KêqÐá�ÇuñâE-//ëàà@»»»F”u:/>jÙ§¿ò¤–WÃøûÑ.¯HòÀ¿{bÏÏ�B|´²�PXÁ|©U@ÆØ·�>’‰(äÉdb© Z­–-Dl{ëÂ×d¢-©TÊÈÖûxõ”ÿŸâkÛyÂÞÏ köôôÔÒl2̱¯‘Öï÷Mqxx¨ýý}•Ëeó1ôŸuËÚäÞ½^ÏÚãÕ}…¬yú$6¯yB#èëƒjö{ðìñ¿{’ß þ~çJ�&Œ3cʵwww•N§µµµ¥d29§¼ó* îéÕ\‡qñ*ÖÄÅ‹õ÷þÞßS2™ÔýÑiww×ÈhÎ%¯îaœ¼Êê¼g&ß?O¬2>ôÛŸß¾ß~ û>úsØÏ'ïõóç?œ× ) :ñ÷b¢Ü¤ößòò²�<{]¾|ÙÒs²N ÿêõºz½žõ…s—56�Õn·Õëõì,êv»j6›ªV«¶÷»Ý®í|þ̧žô)eé‡_ë<÷ø¤Ì�¯}Ř¡¢’4§¾ó× ®qïóƒJ-Æ=¸?=±‹…¤Qh.íþýû’¤ÿôŸþSH…Zh¡…Zh¡…Úgd¤!=‘›>6i6›ÍÒCÒ5 õÉɉ666”Édtzzªt:m½étZ :::R¹\¶ôM­VË¢eONN¬ŽÊòò²)œ$Ùµ¨ãB�REÑß­­-% �F#Ý¿ßú;›ÍæRC‘Í>’Ùâö  £Oåç‰$OÀùüý’Œ #¥@žW}ñyÀ0H1ÀjµªÍÍMmnn*�ÎEÿ£Bm!ÉÆ Õ $B"‘°:#�4¨†³M=�ÉdT­VM°MŸ»Hã¶´´¤ããc{$c“H$ÔívÕívµ´´dií(N:*ú�F�B!T«Õ´¿¿o ;æ«ÛíêððPù|~®¦ÒÖÖ–Õ yâ‰'Œ0�\a ²òù¼ƒ�¥ë[[[›#;�Î#äÑÒÒ’vwwÕl6utt¤{÷îéøøX™LF…BA—/_Öt:Õ‡~¨t:mÄë Â5¥ÎÚò ³¯Ù„Š‹=Eí Ô¨cHË�FU«ÕT¯×­îÍññ±:�Ž©{¦Ó©0"H†bA‚(HÆ}‰åI¿†øÝ\ø>1†ì ‚ . ~ Pà‰'žP¹\ÖÞÞž�C’”L&ÕétT­Vçj`attt¤££#U*˜"{<[ ¿N§£�� ÛOø�¥¥%kËd2Q.—Óh42ßï‰>°äI²•••¹çƒ~¿oë÷ƒ>˜K�èUèçzž 0x‚ÏK’æn¶WZh?Â^ýu½þúë?ífü™°çŸþ‘MZh¡…Zhž-<C -4o¤ FF €@ ŸÞƒÅ|�&�R$1'‰¸ðD$55Jˆ'ÍQ¬ð¢m`ñia|~~€ H)€À¢Y©gâ¿°üÄçóy«UAú/ÀmÔž0Ì�Íf*‹–¾K:¦×ÖÖŒìhµZªV«¦´ð¾ç¥âñ ‘Ÿ+iôñdóinÕ‚sï÷)û]¸¿÷`4v0j™~Ê“òÈGXûÏ^CD2€³\%‘O•F)@HR˜Apr­t:m ’ó˜ ¨)yà×@? ¦�x_^^V6›5à‘ÔT’¬�ËË˪×ëº}û¶"‘³š;ÓéT—.]Òæææ\­‡n·«|>oû…>B.Ìf3©Óéè¯ü•¿¢B¡ B¡`Š�n·«½½=SRA6¤R)«ïß¿¯ããc]¸pAÙlVù|^O=õ”�ðôÑÑA Òÿ�1H&“FÔ¶Ûm«W’H$l�F#ííí‘FúA,~...šR±ßï›ê‡´H¬ˆJ¯#Å©æØ'ãñXÍfSÒY-Œýý}år9­®®Z]æïèèHív[‰DbÀE‘�FÕívMG„ýéééœ_‹Åb¶× §Q¥R)¥R)år9­­­ikkKëëëÊårŠF£æ— Ÿ•J¥l]Bˆ2WüëU_ ¶¾šÍ¦Õ�ð‰F£J&“VW+‹Íù OpxãU-žØ¦¯´Ù�áxÐÛ§5ôÄ�K^÷í ªHü=¸'ç9Ÿ MÁ3À_?ø7ÿHâJ‚Êæø3 ÂÌ?CiooO›››’Î@õd2iþÀ“ÁqáïKKKêõzsãñ7þÆßÐßý»WÝnWßùÎwtûöí95š?›¼:Û°Çû¼3š±ñÊ¢ IzÞç½ß{Þ<|šïz?ê=w]Îö-Ê^æ€à�d2©­­-YÚÅ+W®èç~îçT*•ì‰sš”žµZMårY�FÞÇ�†šÍ¦ôØc�éñ‰Dô_þË1E$ë™3ŸçQø(ÖˆWŽAÚø¹ò{AzHôp¶@ôû´Œ<×ø{0–<‹‰»à¾õÏÚ<'b!iZh¡…Zh¡…Zh¡…Úgbä ¦7ñ  ¯ù:&¾^ƒ=¸Edm4µôF+++ö…�z¨QQæ ú¶{�O;ðM”èh4R¯×3…ýGGGLSÄ|4)�N[ty*•2ÅE&“Q45�›~%‰¹´` (èw«Õ2P?�keeEµZM»»»êt:Ä<0Þôùý&ªT‡(ÕH�Åy?ˆÿò*MÖ9ê7î YÔëõT.—U«Õ´¼¼¬jµjiýq~B>16œ;AŸÌß}êÀà¹piä}<Ÿ ÖÍáÌòóãçìúH—.]R¡P°óÚ“Ñ>H$@AßxXZZÒ“O>©/}éKzúé§µ³³£ï}ï{ªV«’Ö�òkÙœÁÀVŸ7_ô=HžzÂ/Øf?žþÿçMA;oÝ|š¿}Òõü¹� ŸåkØM&gµ#·¶¶ÔéttñâE]»vM¿ð ¿ n·k)Q!¢Â-—Ë:<<4e8©©ixáÂýå¿ü—%Iï¿ÿ¾ö÷÷y ölÆùÀÙâÉW~|à“†Ä_BàøuÀëÁ´–üçü¼giÿþïߦ§ -´ÐB -´ÐB -´ÐB í§fA… ¯ù¯\÷Q·> _Ž=éDô¶$j¤3u -ižòù¼VWWuxx8êSÛø{Ðnÿw®¸ìÓ ¡ R4›ÍÎ¥0â™LÆŠØÇb1S*Äb1û� éK !øòOÁtÒQLК×S©”:�Ž*•ŠÕÓð‘ò(èsp¬Q×�&ÿ;ï=O�ä�?Ú~°'ÍGÃ{Š¿ ¡�€DómX¾/ž€Da–N§ Ä¡ÝÌ»OèC4t¿ß7`Û›OåÓÌøñ  •J)�ZqnÒ8²æ|]ö à–Þ7775%I�FC‘HÄŠr'“IKGM%ȃÑh¤xoŠ:¯bA½ˆ‡ðulëê:ú1_¤…›N§–*Â�T`€—ø+ÚîˆûkkkáYÛjµl¢j DÀh4ÒåË—•ÏçmÍAnùûx6�ZêÀ……³´hŒÅ‚¥±$B‰õQ*•lŸ¦Ói­®®juuÕêåóyóa¬y€Q_ä�õ±I="ÚK� O´œœœX] Þçr9›s[Dï÷µOåAìAÓ ÑÀûðÓ§§§j·Û¦.C *Iù|ÞÆ™{ø60—Þ÷§ÓiIgiK¥’í3ÄÓÓS%“IS¡�–�ýï}‚W~³¾�†ªÕªêõºŽ��upp Z­¦|>oä²W"pF1_¬?Vž¨òÞ'ÿ( úwi±‚¤…·óîœK�ó>ü\ð¬â|òª�¥¥% ¨ÝnkssS—.]R»ÝžKƒçÇ,Ø&Aêä% ýÒ/ý’žxâ U«U}ðÁÚÛÛ3…(sâ‰(¯âìò„B�4òçtð5¯P‘æI¶à8ŸG}š¿Z’ɯ‰�3xAÀÂÂY=HIvÎöz=Û—›››�Fºté’®\¹b{¬ÝnëÁƒ:99Q½^7¢Žô“’Œdgl A�™ÉdT.—íÜ÷*E|)ÏkÌ�cÆÅ«¬>¬{v¹G ~‘翆} �WÉçÏ_Û?§Ù|â,þ9·gŸ}vΩ¼ûî»’¤wß}W/¼ð‚r¹œým{{[¯¾úªvvv~äu_zé¥G¾y{ûí·õ /Øß^xáU*•O¼f¥RÑo¼ñH›Ÿ}öY½ñÆ?òóÒ£_Ö>î‡qø4ÆX¯ñã´+ØÏ×^{MÏ<óÌÜõ¶··õÒK/éí·ßÖ­[·‰D¹6¯G"ݼyS’ôÕ¯~õ'êëÎÎÎÇ~öOj;;;zõÕWçú˜Ëåô /èÖ­[ŸøYßGÚ°³³£—^zIÛÛÛöú3Ï<£×^{íÇÿóÚµ½½­gŸ}V¯½öšÝû½÷Þû÷=´ÐB íObAß÷î»ïê�7Þ0¿÷ /ÌùóW_}Õ|ëK/½ô‰¾°R©èí·ßÖ«¯¾ªgŸ}öܳÿÇ=ËÞ}÷Ýsýò /¼ 7ÞxC¯¾úªr¹ÜŸx<¸ÇygÓK/½ô]÷Ó˜ï×�ûü|FªT*6ÌÏZ•JÅž{¶··õÚk¯}âµwvvtëÖ-½ôÒK�déŸf³3õ56Ž��Õn·�F•Ïçç"âIáý=p$¼|ê9ÀeT¨ѧӳz9ÔÙÚÚ²4q…BA¹\ÎÀ€^˜À š"‘ˆšÍ¦z èt:j·Û6�NGãñXµZÍ€Ðýý}µZ-#œ<¨¨¯ðããIÿÝè<Å_ËG»z%÷ô)¨|T¬Řˆ7îPC41 @ó ˆ aàûë£viä÷¦Î à,÷†!:ÝÏr}4i0X[IE×l6Õn·ÕívÍÇ mnnÚ˜Ax$“IÛÉdb„\¿ßW£ÑÐþþ¾ŽŽŽ¬mµZMÍfS£ÑH�=ö˜¶¶¶,…¥¯ÃÃôª*,¬gêQ“«X,êÂ… –ª�ö‹EmooëñÇ×ç>÷9ýüÏÿ¼~á~A?ÿó?¯ŸýÙŸÕã�?®ÍÍMK)è�lí!'i.…bÐ_C~Q» $yX[j}}]ëëë*‹v_Ö¿Wzÿ¸ø�A’˜¶¯¬¬X�“½½=Ý»wO?üáõÃþP»»»F¬¯¯øÌx_ƒ¯g}@ÆQ»%X"‘°µÀùÚ@øGÀoïsP—±FªÕªuïÞ=íììhggG÷îÝÓÁÁ�Z­–�;’”J¥æjwù} QéÉ.Ì«SÎg~<áïÇÞŸ•žTõg©?3üY$C>ް¢M>�Ã«Ç‚× ¶‚Ú¯½H$¢ããc#ûG£‘nß¾­ããcS]Æãñ¹t£þŒa¬Ø‹§§§ö½àúõëúkí¯)�ê[ßú–þø�ÿØR©y?Í|îð*J¯\ ÎIðÇŸ¯A5Spßøùðçç'KŸdþÁ5ü{Ðh7sÁZb W*µÛm;{Hç{ñâEû~öþÏÿч~¨ïÿûúÎw¾£;wî¨\.[Z^ö‰?Ó9k'“‰ô‡ø‡z÷Ýwõá‡*‰‘.�=ò=•€$Îg??œQœkþ™Žç’Á`0wÞø¹õû%™LjssSëëëæÃ=1Œ:™:YþƯ‹à>ØyëÖ-ݸqCßúÖ·ô•¯|EårY³ÙL»»»ú'ÿäŸèý÷ß·qG¾Zh¡…öYYÐ÷ýÚ¯ýš~çw~G·nÝR¹\V>Ÿ×¯þê¯ê½÷ÞÓ3Ï<£{÷îéûßÿ¾Þ{ï=½ÿþûzî¹ç>öÚŸÿüçõ/þÅ¿P&“ÑoþæojggÇ|éoÿöoëk_ûš®_¿þ© sÎFéÌ·úçˆ_þå_Ö[o½¥ßýÝßý‰}éóÏ?¯7ß|S’ô�þÑ?²û¼õÖ[?Ñu?�íîîÎ�‹þ9êGÏH_üâ%IÏ=÷œ¾õ­oé½÷Þ³ùzñÅõÞ{ïéúõëúÒ—¾¤r¹¬[·néßþÛ«W_}õÜëîììè©§ž²sô7ó7çžKþñ?þÇzýõ×õÌ3Ï|ªsñí·ßÖ�7ìÿ\ëÍ7ßÔûï¿?·&¾øÅ/Ú߯_¿þȵ8cïÝ»§7ß|ÓÎXÎë{÷îé©§žú±I­ÐBûÓjç}iõÀ“ô0ú×%þs øá:\Ó_Ï |©à$zݧذ÷ ”ÿr @ET»$ê=X: ´°° ÕÕչ諫«*•JÊd2ZYY±ZÀ¨;VVVæÆˆ¨vÒY5 =xð@ÍfSÃáP�FCõz]�NLj+¢àgg³™:�Žúýþ\:¯Üá3¬òi¥<èwÀâó ¬{ÒÇÿ̓Á6’ ×+ލä#�}ñs¯ÆñŬ!{ø$`°®–_¬YÆPÝ÷ƒµAŸ<Ù¶¼¼<·Î‰„¥¡c\›|Ú-ßfÆÇ¯}?�¬CT¹\NÙlÖ ½SoÒ’‘T@¨ã˜cHgHÌl6«Hä¬NÓÆÆ†*•о÷½ïéÞ½{šL&*‹ÚÚÚR2™4Õ_2™œKp6›�ÕI:==5€¼ßï[ºFR”ÅãqSÿär9#û¼úªßï«^¯ëèèÈRv¡Âã=¶~�ûT“Að•Tp¥RIÛÛÛº~ýºž~úi=öØcÚÞÞÖöö¶Ö××MÝ4U¯×µ¿¿¯J¥b)Q‰ôz=k0˜ò T*)‹©V«éèèHÃáp.åk™µ…êj0h2™h}}]W¯^ÕÖÖ– …‚òù¼ŠÅ¢Òé´J¥’®\¹¢«W¯êÚµkzê©§ôä“Oêg~ægôôÓOëÉ'ŸÔ•+W´¹¹©|>?§FÄgxb“1aR¥RÑÒÒ’ÖÖÖ¬–Wðæ¼vqF]¸pA?÷s?§µµ5u:ݾ}[÷ïߟ«�æÓúç›óÖóyçk�ðD€÷]þìæóŸDœ7ÿŸ´FxßOj´Y’�Ñt:µóMÊ_Ô‚ÝnWõz]úè£�l¬!ûQõø”�Œ½'J���u÷î]ý×ÿú_õµ¯}Mõz]—.]Òç?ÿyý¥¿ô—´ººªD"ag3Ï0žòêGÒ¼äÏþõé—Ï{æd~|Pˆ'~ƒówžî¼µÂëÁ÷†éé~ ûçÿüŸëƒ>Ð7¾ñ  °ëׯëõ×_×ßú[ËÀ ×_ýS_û½÷ÞÓ‹/¾¨/}éKúßÿûk}}ÝþöÛ¿ýÛúò—¿¬V«5÷ºtT¼òÊ+zç�wiÓyízóÍ7õâ‹/þ8ÝþÙk¯½¦·ÞzëܱZ__×Ë/¿¬—_~ÙH¸wÞyç š[·né×~í×>¶ŸÏ?ÿ¼žþyýÆoü†ž{î9}ç;ßùÞ§ÿßöꫯêk_ûšvvv™gIºqã†~ÿ÷ßÀ%³O²›7oê·~ë·ôòË/Ͻþâ‹/ê¯ÿõ¿®Ïþóú—ÿò_êw~çw>ö;;;zå•Wô7ÿæßÔïÿþï?ò÷_|Q/¾ø¢^{í5}õ«_ý”½ -´ÐBûÿg»»»s>ò­·ÞÒöö¶¾ð…/<âËÞ|óM}á _ÐÛo¿}îù¸»»û±÷Á—>÷Üsúò—¿¬¯ýëŸØ®[·néw÷wõ¯ÿõ¿Ö?ý§ÿtîoþl|öÙgõßÿûÿqºüˆ½ôÒKú÷ÿþßëÍ7ß|ä ø³f~\ß~ûm=õÔSú¾07ŽÏ?ÿ¼^{í5ý³öÏô¿ñ�œ£yœgŒý_ø A7oÞÔ¿ù7ÿæŸáÞ{ï=ýê¯þê¹cËYÍóÍ�²wß}W¯¼òÊÇÎgì­[·ôÊ+¯¨ÕjýXÏ—¡…ö§ÙP}x²€} À'Íçp<4 Tä t"‘0�Ð�/å>�Q0Ù·…öò¯oƒ'�P“œœœXT7÷J&“º|ù²©HHE ßét¬6ÑÁÁ�E*ˆG"XQLPS¦ÛíªÝn[_šÍ¦¥›’4EŽB#¨°œH…l šÚ×½ðàßÿeï]‚ä,¯4ÿ§².y¿Ô5«JR Ð L·%»½p‹1ÖÊÒDx„°BŽŽ0ZµÍ,l³°Ú½Ã¢›^ØÈ+äˆË+´ñ´Æ ðbB�ŒŒÆ¶ÀH%Õ5«ò~©Kfþõÿ�üÈÒÆöw"*TÊÊü.ï{Þó~ù<ç9Ç“"A%V°ä¤$�'± ÈëÉ¸óe—ÈO$ªÕjVJÆgDösŒÒh``À@*>+ÝꇂÿÐÀ{ oŒŸ/»H/“¡¡!#-Q"A1FCCCJ&“’dày"‘°ÿ{ ºßxò/åè¢Ñ¨‘5’dc�-í”Ë¢¼c<·ru™LF =}�r¹œ&''�ÇÍ÷“ɤVVV´µµe™ù6Å]*•R2™T6›5€¼^¯«\.«ÓÙééÕétÔh4ô‡?üAù|^‰DBù|^›››VV¿õä!Ä à;ñƒ,lÆ0Øá Ìø—'.P5MMM)�N›rkppÐH¯íímSÖj5Sv”Ëe­­­™"r}}½‡�ƒ&¦PJEa4í!JðJà¡4ÔC=¤xʇ«»Ý®•¨".y‚�ØïËmzEáÀÀ€©€ªÕª‹ÕjÕbM½^7Õœï·Æy�†õƒ¢ÿ×éL¬÷‰ø}�lè§Øñû²�9þ5N“ü{ƒäkÐXýÈŒ~ ïåóþµ~ŸóûçeOÀ—èm4==­¹¹9[§ÄI–lÀý¢8‘¤èðáÃ:tè�ªÕª•„Põemý<úò¸ýˆšÝÈ€àëÁ1þ\+»¿ßøÇÔ¶ß¹ü3BÐO‚æŸQô% ���izzZKKKFFonnjeežååe%“I›¿V«¥l6kDZ=(㎊qccC7nÜÐòò²Òé´öï߯¿ù›¿ÑC=¤……mnnê½÷Þ³Þ~<'‘dáŸQˆy¬'ÿ<$ÝÚÃ$ÙúóÏ£|n``@�FC‹‹‹=ãDl#q/>vßi>ý³’F÷`o¼ñ†^}õÕ¾¤vøða½úê«:~ü¸¾þõ¯ßÔÇŽ?®'NôÍ>|øp_ jyyY§N�ÒéÓ§o{MãôéÓ:uꔾüå/÷%%>)»zõª^|ñE½òÊ+w¼®sçΩX,êé§ŸþYæ�wêÔ)ýÓ?ýÓ�—ÏçuòäI½ð ú¾ð±îãÓ´×_]gΜћo¾yǹyúé§õóŸÿ\ßøÆ7îPž>}zW°0ŸÏëk_ûšÎ�;w[ÒèÚµk’¤gžyæ¶çzüñÇõâ‹/Z -´ÐBûcÙ+¯¼ò¡ýwnnN’ô“Ÿü¤çuö•ÿóþÏGJªÈçó:qâ„^|ñE]½zõ¶ûþûï¿/I"Œ‚öµ¯}MW®\¹çk‘vž þËù/ºråÊ2þì—¿üeÏÿ߯~õ«GöýË—/¤û>|ø°<¨sçÎÝ–˜yâ‰'ôÔSOÝ–Œ;wîÜ]‘O?ýô�ÅûŠÅ¢ž}öY=þøãw| -´Ï²A_žÃ[P��â³Ü=8ây@ÒÇ×)Ójµ”N§-k�/ù¨�èAi!>¾Ä{̾¬[µZ5Ð.“ɨR©1@ÿ €!z糞%™ªˆREôHj·ÛŠF£šžžÖðð°õ9S:�¶úý”Yêv»F¦üîw¿ÓÆÆ†õSBÙáK¾ÅãñžÒežlñcà ?/>¼À$éüß‚Ù⬠–-â€GVŠ~9Áó¢¬@îð³¹ùŸ€4¸õŠ®•¿×ëu›ï�� %“Iës#É2¦=¸‰DL%p”H$lMx Ÿàÿ\£W;ðžX,¦‰‰ #.(Å™”ËåŒüH¥RªV«Fž¬­­©\.«Ýn+�[¯i‡”ªV«vLHRJ²Aˆò“Éd”J¥ìþÓN§c½*¢Ñ¨ …‚ùv6›5‚ UR»½Óc 0P•c QŠŠ…õïËÞy‚–žbCCCÊf³Ú»w¯f!¨n IDATgg�p‰F£vlî@RÊŽ²l(¦J¥’Z­VÁ€Rˆ†êÛÛÛZ\\T©TR4µµíQ¬úNQ"/—Ë©Ýn[?#Ê•Aôe³Y#XïA"Ÿ5B,ò„‡)!͹6HñZ­¦x<Þnr½ÌýÆÆ†•ŒÃo}l ‚á(Êå²ÅÒñññÅ"ÀXŽÁ}4›MSpmmmillLûöíÓÄÄ„)²ÆÇÇ‹ÅlÏ 6x¥qÒ'loo›?PêŠóF£QÕj5ëYÄuAŽÒ뉒…�…�Cì3‘Íf³g¯ƒädOD-èûªyõŠ�i¸Þ-Ù*Ëýï~÷ÇöJ†`’IüLèwþàq‚$‘?—žðà8Š¡`ÿ7ß#fddDóóóJ§ÓúOÿé?™ú1‘HôìAei­VS2™Ô“O>©/}éKÒüü¼®]»feÕøÁGa¼ï^®ë£Ø~ðe³Ù»Îlþþ÷¿¯ùùy]¸pá¶Ç»—ûì§Êú,ÛsÏ=§¯~õ«w }ÿûß×o¼¡óçÏßö}w³L&£r¹|Û^ û÷ï—$]¼xñ¶Ç:|ø°ºÝnd…Ú_€íÖ/çN?ýÊ·~’ÇÂv#¯)r¿ ’}7{ðÁ%éŽeYÙÇîÕ.]º¤/}éK÷D�>}ú#�ÿ½ô7ü8¶Û|ÝÏÄ�ùùù]ÿvöìYÍÏÏë›ßüæ�ó_ÿë½íßïåXÒŽ_d³Y�9sæ®ÞZhŸe ‚ üîÿæßë³§ý—eÞëbߟ€/Ⱦ):`=_øƒYí(T|Öµÿ’Ïuú/ø|!6_çZ¤i\<00ÐSB­ÓéèèK�$�E@wÀöt:­½{÷j{{[ j6›ŠÅbU*•²kÎf³š˜˜P6›Õðð°eAÓ3Ƀ‡€RÜs°ìMpø¼ÿ`¶¸?O?_`Î1< ç�ëA`΄x×ç3û½ZëÐüóJÊþ�á,©T†ÈðÀ9DA©TR¹\V­V3F�0âøíöö¶ªÕª*•Š>4žlaÜüúòDª$Sår9���Yù²\.g=pȨ¯×ë¦ðX__·,{úøLNNHÎxÐ _ZZê)ùGÙÖÀÄÄ„&&&LeD�J¹­¬¬ôµA@5¨ö ú˜ÐÌÌŒb±˜&''577§={öXi¹½{÷jÿþýÚ·oŸfgguàÀ8p@<ð€öìÙ£ÉÉIk’™K?3î�&í¾Ì¯/£ûP{•J%e2���khhÈîe*D@NO,CL£€ÉåršžžÖìì¬fggõàƒöÜG.—3RŒæê\�Û @Ì߉(ŽÈÖçü’L9é}udd¤‡øÄ/‰“^ Êû¼J’µ9Çû9‡/E,ÕjµT­VÕn·­GÈþýûµwï^MLLX¯,b *FÆ—qJ§Ó¦2ŠÅb==�ˆW�9”Ä7‰VNë½÷ÞÓ;ï¼£wß}WW¯^Õ;ï¼£k×®iaaAkkkvÝøU0îBc7c,Wå÷4_j5“üÏn{@ð˜>žû9 Æ­~kÕßW¿÷ö»>ïGÁÏú}Å›/U(ÝJðÇB±úÁ¨R©hddÄ3gï§øîÀÀùpðàA=øàƒêt:ºyó¦)…ñ)ï÷¾¤ª¿§ YÔïûYp^v›??ÞþØÜo?’–ãËÿõÛσ¯ívþ~ó¼f~±ø±´´¤·ÞzKW¯^ջᆱwß}Wׯ_×úúº»Jé˜ .èàÁƒ÷ô™ƒÞüÿ¸vñâÅ]ɼ~vøðae³Y]¼x±ï8\¸pážÆþOÍ–——õÆoÜS/$ˆ™_ýêWŸH¹Ák×®íšÿÈ#�è•W^Ñ©S§”Ëåô…/|A_øÂþ¤H¹ÐB -´Ï‚=ýôÓºxñ¢•6Ëf³Ÿ˜ˆ2®sss»*wCûøÆ3ÔÝ$HÜi¾xñ¢²Ùì=%[<öØc÷ý9.´Ðî·U(þËìn`‡*¼‚#x,ÿ…`Œkd]Ò_¤ÕjijjÊ”!‰DBÅbÑJ“"x@“sø¬i¯z|"Ó^º¥@4¤˜'�x"‘0¥å¿è'B‰&úÇÔëu5›MMMMéúõëZXXÐÔÔ”¤ ‹ûP5 Äƒ ”.òï'Kb$8/Xñcû�xþóAšq—d`ŒÏ†åؾdœµ_ Ðó=š00`óÍïétÚT'¥R©GáB©¸‰‰ µZ-­­­©Ûíšâ¥ÍÖÖ–}Èàà öìÙ£\.§Z­¦B¡ F£¡Z­¦h4ªJ¥¢t:mä l*•ÒÒÒ’¤�2yôõ)‹ªV«Êf³ªV«À3oÌd±Ã«[˜Ïèá‡V6›ÕÌÌLO¹3Ö%�ìÛí¶¦§§m.ñùjµªn·k~JO(XÃŒ»WRyR‘¿{rX’5;gÌ}©@_BN’ʼnh4ª|>¯}ûöYÓuJB4G"S¹ùõ‚r‘5ã{Œ{�1žÄÛÁÁAl+)¹Y­V�8ömamr._b�xÁ\²ˆ ¯¶~M‰j¿×ëPíMLLhÏž=šžž¶òŠ’¬¬¡ßsºÝ�Òsïït:֢ɫü¸¯jµªH$b$0ñcqqQ7oÞT©TR­VS¹\V±XT­V³ò\�iÄDT^\/{{„W1ÞÄ@üß#.û×û‘?Áß½ZÄ�{pÏÁÏÝŽ òÇê—hü[¿÷óOŠ�Ïøø)íÄŒ�� •J%ýßÿûµwï^MOOñÀ>Ïg ‚¢Ñ¨Å¯F£¡›7oZ ¤l¦ïGv»=Ñ�W?ò«!t;õOpöÇösO,è;Áóõ{– Îùn×åÏáIÚ���¤Ÿßýîw* ZZZR©T²óF£Q���«ÝnkttÔT´\_±X´÷Bìøkõ¥p}BÊþþÛ¿ý›Ž9¢ÉNRH«Õꉅþ™Ñ?�Þ.¹&§vOâ±'‚Ùë|ÉeI==$ƒë³ßØçå3EÝîâïÕîT¶ë£ØÑ£Gïú½sss»‰õ�ìí·ß¾'¢AÚ¹‡ûÝwf~~^óóó»�ÝŒ²=A+—ËVVèÏÑ._¾,éÞüKÚi¬ýÖ[oÝ�Kú�ÑëáùçŸ×Ë/¿lY؇R&“ÑÑ£Gï©ch¡…ö§mÇŽûÄöìOòX÷ËΞ=«ŸÿüçúÍo~ó!Ê‘#GnÛ÷(hçÎ�ÓùóçõÃþPW®\±g…#GŽ(—ËY<½ÒçÊ•+:uê”$Ý3©ÿ /üÅôÈY^^ÖOúSý�ÿñ?zÆ^Úɾ?xðà˾ÿþû:räÈ'r=ï¿ÿ¾Êåò=?/…ÚŸºy° ®hƒU*dVòeÙ—‘ò _ØÇøíÇÓ�€/ßÒ­/Ø\‹O<©áI#9@b¡7›M»WWWMÍÀ H‡¢C’•¨j6›~@(8QÊ "‚ÒZ�_Œ€e�üý+�k}}]’ øÈå¹w€Ž øÌ‡” ª|‚dŸ§–v<(å1²ˆ žûä¿/°¾}<÷ÏÓþùÖßwP•ô™"�Bûó±§žzêžËí…öÙ6š{íõ×_×… tøða½ôÒKò ×C -´Ð°ååe}å+_Q©TÒ·¾õ-=óÌ3=Ê ååe]¾|YÏ=÷ÜmKší‰'žø� eyyY¿úÕ¯ôßÿû×Ë/¿¬óçÏßµ¥\.ë{ßûž|ðA#�Â=¸×.]º¤ãÇ�ëàÁƒú»¿û;:t¨g|¯^½ªßüæ7úö·¿}ß“~¼íÛ·ïžHÇÐBûs° 0ÏdÀ"@12v=�Î^¾0�L_2Î,”¢ç@ €'_–}Ã`@®—¿¡P¤ÜÜÜ4ÅýI<ùQ*•ôÁ(‘HX³ú\.gJ†b±h *äà®'ÙÚí�æÎ£££ÕÖÖ–²Ù¬²Ù¬íž¹_ŽGVl­V³ñ÷ ­f³©íím­­­ÙßwÛZ?@cÀˆJ«ÑŠyg¼G>OI@ÆÚ�APÌ+…\ Œb±˜ý_áó€z^‘"©ç=” ëv»¦R£,Œ$Õj5SàRÒm``@333æ+ÉdÒ”Ì9 ®ŸƵÝn«\.[Ÿ)_êÕþ !áA2Æ¢„ód àå‘ ÈÞyçSÿLNN*™L*›ÍZÉEzmll¨P(èúõ릴òj¯X,¦Z­ÖC8’8Á|år¹žÒh41�Åbædç³.¼�Sn²•õ�‚ b �NkvvV�<òˆ&''U,{Ží3üóh4ªF£ac·µµ¥�� +‹T©T�F•Ëåz@iÖ†2éñäU}øáÈȈõ›ªT*šŸŸ7…Š3|/—Ë顇Ò<`ª©™™�ŽŽÙiäKfAš{ ׂ_yò_âuâíðð°ͬ%Ö)¥ú ¹Æ…˜Æç} öŠ/_f ‹Dvz—ÐçË“Ìþüþñ4;;«¥¥¥0Õƒö¾ôñ‚¿@y‹ÅŒÌô½ôü1 —––´¾¾n=ŒÖÖÖ´´´dD>à÷9X³�Xô5Â_‰›ÁËÚç^À}9-®Õ-°æž@ð{ºôá²³ýÆ“¿q-žðöÇêG>n1½Ýn¹‡‚´Ûí*ŸÏëСCÚÚÚÒêêª …BOrˆï™Èè÷$®)èϬCæ�ß!ŸüØù5ËkÀ?£x‚ ‚…}ß'ƒø9#9Å'+øköÉ5�AbÌ�»ß׃ E§Ñhh||\=ô�fff´ººªÅÅE¥Óiår9I²}R×+Ǹ6ï»~\ø?1�ñŒÅbJ&“ºv횺ݮ�†–––,¯Pkò|áãÇòeê‚óÀ{ü}÷[Sü�¹à¾?_VÔ¯kÿ¬Í}²ßûX‹…¤Ñ=ØÅ‹ﺌÌõë×wí©ðIÙ¡C‡î¹DÉÅ‹uèСûtE;väÈ‘O´tJ6›ý³TèËp/þ%Io¼ñÆ]÷A¸ŸvìØ1;vL'NœÐñãÇ%}´r‹¡…ZhŸ%ƒ0’´k¹·|>¯cÇŽéâÅ‹zã�7>Öùòù¼‘I§OŸÖñãÇõÚk¯ÝqtäÈS ]¾|YgΜÑÑ£GÃXüÿ„щ'v%Óyä=òÈ#úáx[ðÁÔÏ~ö³OäºP_½z5Tê†öe`´äÿÁ²s>°"`òZÐü—tÙááaU«U+èîAE¾¸s O>+Þ_Ü!�fè¯A=ü¨ÓéÑ𸵵¥J¥b¥­¸wÎ@Íz€§x<®ÑÑQ+±—J¥´¾¾®R©¤J¥¢B¡ z½®n·k%®jµšVWW ,C}ÑS(ŒTªÕj=* ”R4º÷*Š yçÁßs”l^^÷ %{‚6 çgŽð^G9€rÈ—»óYí�ô * Z­¦ÉÉÉ¥ øÚÚšD‡Çããã0OOO+�÷”œó`Àm*•2ÿÇO(ÍCO‡ ïqo(Wª ¬÷¤@­R©Ø±³Ù¬’ɤK�<’tãÆ ëÓ277§ÙÙYµ)FV7MÈ™kÖ!÷Q.— `Ô¦>®L&c>Æz€ì‚8a S6Óû' Ü�†nܸ¡7n¨R©h}}]kkkŠD"ªÕj–é~àÀýíßþ­âñ¸• ôª‚².ƒ=xëU Ägmye÷iäK6â׬Ÿ�g^éÂ߈a("!®}¹'HHâ5{±ó÷Æ~Al€ðƒèéOÐÊòJö­R©¤ÁÁA#ÈéÝ´´´dǰæó(‡¹×ÖÖ¬S©TR©T2rÇÇ,ˆ)OêBäúÒ|žÌb�{µ óì÷ʯÔ$¾x¿ð„Jðï>†}ÊïÉ~¯æœ>1ÀÇcŸ$7ðO’|\Ç×=QæÏ Ç8xuóÅ^�×�Ñðð°õgƒ¯’äÇ— díø=ø·¿ý­þð‡?Xœ¢O!×Ê1ˆ±\7Ï7øk°lœ÷1¿6û�óA,'>sNOŠr/�N§§´*¤²/«ì“lÝ*´»¶ .Üu —‹/Þ÷><'NœÐ�üã{úÌ•+WtòäÉûtE;öµ¯}MÏ>û¬^ýõO¤WÃc�=vOý¡þÔ,ŸÏëÈ‘#V¦înìÒ¥K’¤/ùË÷ë²îÙŽ;¦#GŽè¹çž �ÊÐB íOÞ.\¸ ·ß~[o¾ùæ§Þè…^Ћ/¾¨3gÎÜS¿Izùå—U*•LqÆcéÌ™3’>õÕÑ£Gõ³ŸýL—.]ºãÜœ?þ¶üñÇõâ‹/ê§?ýé_L‰ÀÐB“>œ1‚|Æk0Õ—éð_´¥[°|¹÷Çà ØgSz"óe:|'à´$+»pxP‚d³YS!t:}ðÁVº …' ÄÀW±X´lúÁÁA+i(ŒAü‹E½óÎ;êv»ZZZÒêꪖ�V”Æ![xccCÕjU­VK«««ŠÅbš��µ~*¨1 (c@®—ò1�l›››Öx2Œ9õsô”Ý2ÄQèð7¯® ‰ÇãJ&“VÚ�÷s=n(} Ë"‘ˆÊ岪ժòù¼zÊ’ Y¿ DzÇD£Q�ŽŽö�’oô&$o43ÕËÐÐ�’ɤVƒƒƒ=àcC–s«Õ²¿AÊò;™ì”שÕj¦¾ŠÇã6nù|Þ€­ÿ÷ÿþŸ>øà#4ŠÅ¢•Â�–——µµµ¥•••p=�kpp§ÄþðëwQ pY©TT,�F511¡D"¡ééi¥R)S¥0Ö\s†ºd{{Û2Íñ»L&có�Ëå”ÏçM-’Ëål­0ï[\—'ž|É?O”x˜'ú(ãç HT(ÛÛÛ=¥æ$™ò‹y¢4âüü¼FFFT­V�hh4êt:æô,z衇Ì�C‰‘¾üÿ÷à¯�Ǽr¦“W×xE `,k‹n’ìwÞë e_>‰5 x�ÿ¢öðq`ݯyâzð^üºó`-€pÌÆßÍéŠ̰=Å–ßoÑQ#‹E­¬¬heeÅJ@V«Õeê .!ÄyS©TÉNl&)‚¸ÍļB€ø¤ ¯Ð îÇ~Oö ¶Wgø˜T*1ÆÁ¾�~ÿ~–ùðsJ P¿v Åýg™ÿÃøør�€æ”ûäz)wHÜá|ôÍñ„E6›ÕÄÄ„�#ã>33£ééiÛyÍ“S>ÙÄ_3þÍøs-~mû9#î1¼Ï7Œ{px2òÑžpåÞˆ“œgddÄúóá’‚y‚¸óJ%ž!˜sïø „){+ñb``§„k"‘P2™T2™ìYìÉccc=åwýs›ÿñJüfkkK *•J67>& ÙZÄ'=áì§ÁµÔ�¬ñÏH~-zÒÔ+1Ih ,*ã |þ⼞Íf{¹°�4º{ûí·uþüù;66~ýõ×5??¯ø‡¸¯×óÌ3ÏèÇ?þ±þùŸÿYßýîwïøþþç–¤û~]_ÿú×õòË/ë¹çžûDH£gžyF¿øÅ/îú>%éäÉ“*‹}Ë©Iºï*°{µüÇÔñãÇï „’¤çŸ^G޹£/~–Ëåtúôé»ûÐB -´?£ÏÞCÙgÏzuŒÏ>æ‹;€9ýC677M…066¦™™år95›M•J%µZ-%“É@€%CCCºyó¦VWW•Ëå�ǵººj=a¤�iÍfS‹‹‹Z^^ÖúúºÞ}÷]ë› í¨Þ{ï=+‡W, Üb¬P.@ tšÖj5+eæA@@?—>Ãß—Òaœý¿ý?A Ò«M˜/±1‰RÇ+6<ÙK?,ü…qŽÅb¶Gu»]e2»göbÆ 5({ñöö¶FGG�¨f-2�kkkF\LMMYÿ¶��‹‡�Î-UõÖÖ–•€…xAÚh4,ye¬WGRN“5äׂOüÃ+�êÕ€ñx¼'Y†@ÌØØØP½^·ùä9‚˜åI“n·kë`rrÒb4½áP{ù˜‚b¦T*YÒE*•²=!�NÛ³™'K™{ÆÉûfPI×�Èä5öoâb"‘°xÏs(±Î“­¾�_S<ÿøg§~óÕ��嘬+I=d§OvÀ¼‚Ï?ײ—¶Z­žµ’F÷`O=õ”N�:¥¹¹¹]�‚K—.éÉ'ŸÔ+¯¼rßK�äóy½òÊ+zòÉ'5::z[PèìÙ³zöÙgõꫯÞwP"ŸÏëüùó:~ü¸Nž<©—^zé¶ç¼zõªžxâ ÍÍÍõ%yŽ–’Çú IDAT;¦o~ó›zöÙgõå/ù¶ ÍÕ«Wõ�o|CW®\ÑK/½´ëû>¬}ûöÝU½»%r>Žq�wSŽèäÉ“úõ¯mj£ûmårY/¿üò³_ºtIo¼ñ†¾÷½ï}*×Zh¡…v?�Òa?ýéOw%Í———õ�ï|G¿øÅ/îx×�/y° â§Óé(“ÉX¯"2Ò9„êøø¸ÆÆÆ”J¥T,-C?ŸÏkbbÂÊây2e=�Z«ÕT.—ÕjµT«Õ4<<¬={ö)€K¼`}¥ÓiÓñÖ7 >ãJ| D c 9Fé1²Ü=hêI|5Òïÿ{#Ó Øû˜Ëb±¨……---™Oú8È5úÒgÜ«ÿ?ŸóŠHP²ø!¬|?3O {�ÓÇÍ Q¸Ï:öjÞ�ÿSÆ’yñ`«ÏØ÷eš‚±ÝÈfFö¾•Û‰9^YÃq!ë8>ª' Ë岊ޚͦ•1„pôq‚¾g©Tʈ,o¹F_VÌ+hPá1~¨ 8N§Ó±ØÎ==!Òoô„Qàfî¼jÃ_ïóóŒù¼Ïû‹'{¼ï¤R)#K²Ù¬Åu^–0dÿgŸ ¼$Ä>k ™Löìcü­Ýn+•JYÜÝÜÜT2™´çˆ7nh}}]’4::ª±±1{ØÞÞV±X4r1�N[5âˆ'Ѹ¶�� Ûw‰•¨Hˆ™è>ùÃÏ7% ½b)87AÅ‘Ÿ+Èåjµj1hssSétÚüÛ÷Ûcéíæc}· ›‚q®Ýn+“ɨR©Ø: ¡†¾O$\°®¬¬(ŸÏ›š´T*™J„(&Fyb›ûôd$.ƒÏ*ì�<»e2Oü)ø¬\þ_Þ QÔï™Ù?óöæß« ¸GÖ¨&Â÷IžZH݃�ª§žzJßüæ7 |¸zõª~úÓŸêÇ?þ±^zé¥O-«÷‰'žÐk¯½¦'Ÿ|R/^ì¹&iÈ?sæŒ.\¸ ×^{íS�>¬×^{M§N�Ò—¾ô%}ë[ßÒã�?n` §õ«_éܹs:xð þå_þe×ã½üòËÊd2zôÑGõ½ï}O�?þ¸Ý'ÍÃÿõ_ÿU?ûÙÏtäÈ‘»êqöìY=ùä“úÏÿù?ëûßÿ~Ï\^»vM/^Ô… týúõ»î+ñqìå—_ÖÜÜœŽ?®¿ÿû¿×׿þõðèüùóúá¨J¥¢K—.}ªýæççõÈ#�èäÉ“:qâćüèìÙ³úÎw¾£§žz*,±Zh¡ýYرcÇôÔSOéÙgŸU©Tê‰ÉËË˺p႞{î9ÍÍÍé«_ýê]G’ô‹_üBsssúÖ·¾õ¡DˆååeýèG?Ò‹/¾¨W^yåcïÙçÎ�ÓåË—õä“O~*ûØgÕžyæ]¸pAÇ�×K/½¤'NX„~£¬ðÛo¿}Ûã>|X¯¾úªN�:¥Ë—/ë›ßü¦ùÆ¥K—ôüóÏë׿þµ^{í5=ú裷=V>Ÿ×/ùK}ãßÐáÇuòäI=õÔS=Ï8—/_ÖÅ‹�|õÕW?Öx„ÚÛ‚_Æ=Xä³!ƒ™Ë�5„ò„ŸñY¤ü� Lúår9Slx 1x}>“žLl@c2½QI2%C,Óµk× PG¥B)IÎK½Í‹)�Ãù�¿³Ê}éCÆ Þ÷ThµZZ__7…E§ÓQ:�65ÍÈȈfffôðÃ+‰èÊ•+* Êår6O€µ€ñž�Ìc &“Iår9ç3™ŒýäóyíÛ·O“““Vž‹commillÌÔ.•JEÒÆï”úªV«*•JVN­^¯«Ùlª\.[I¾R©¤ÑÑQë…ÈÊ8Äb1MNNhŒ[ÒÄÈÀ8éVõ¥¥%Sw S(z“±C¹Õl6•Íf•Íf èóDéÖÖ– …‚Þ~ûmÍÌÌH’�Ö~-à7>–x"rÄÿe„$r=PÉZôf=r® ñâÉev£=Tu±n µñ|Ýï�¦˜W*áÛÿ­V«G5Å�/Ñ剿!¹Õ‹¬\.kyyY•Jň#ú�Ð ‚u ÿ¢0L§ÓFœPj‹û'^T*# ñð%HQúeADU*K¤ð%0Ù !t}\*3üZèGzeH�÷Çæøü@€u»]Û3ñS’ N¨ 422b¥Áø¼ïaÿ^Õ488ØÓGÐÜ“˜\7d±$5 ë‹Åtýúu‹í”ØD JéM¿/°ü¾BRE0 rb†’˜üôS±°¿1¾þ}žüð‰ž¨ã!4QNsÝ©TÊ|ž2»”eß¡4'×|àÀ£v»mëziiÉbY£Ñ°ëét:V.—{X[[Ó�7,ñ§X,Z¬ƒ$aÝyòÔÿ ±Ës•'ŽwÎïýÕÇKÈCâ%ñÊÇÖƒW×Að7H°ö#_ûýÎ\2Ö�ÎN©9j�ñ<7ù²Ÿ(Úfgg‰DÔl6-æÛúVh÷dO?ý´þãü�úÁ~Г‘ºoß>=zôŽ`þÙ³g­\Œ·~ì¡´£nºS þcÇŽèñío»§÷‘#Gôµ¯}íŽjŸûa‡Öo~ó�={V?ÿùÏõ /X¦u6›ÕÁƒïj̰^xA_ÿú×uæÌ�:uªÔ9tè�Ž=zOÄØ±cÇtéҥͥ´3n_üâõÌ3Ïô€KÞNŸ>­_|q×ã÷›Ó}ûöݶôÍw¿û]=þøã:s挞xâ »Çl6«Ç{L÷ww[Bò±Çë™®á•W^éù\Ð�?.©¿8›ÍêôéÓúò—¿¬ý×µžEAßõÕWÿ¢3ÙC -´?žÝmL{ã�7400Ðwo}ñÅ�¬!^ž;wNG�Õûoÿ­'Þ:tH_øÂtöìY;vL§OŸÖ/~ñ ;o¿ãó¥æÍ7ßÔõë×õ«_ýJßþö·uåÊÛÙË~ÿûߤg‰ ÍÍÍY¬öäÅ�ŽÿQíõ×_·1èg»ýÍ_ÏÉ“'õ³ŸýÌþ600 #GŽè׿þuÏgúÍWð<bæG?ú‘~ô£õŒû=Ï"�=ö˜�Wúðþ‰=ñÄúüç?¯3gÎè+_ùŠ�ó¡C‡tâÄ ýä'?¹ëç®|>¯ÿù?ÿ§^ýu�;wn×gü-´ÐþÔ-ø…ØQ~îGjø¬O¾àóŽÕjY?>Cyªz½®ÑÑQ%“IËöö@çnç0ÛØØè)Ãçp}ûÀÀ€J¥’�ƒCCCšžžÖðð°VVV, xxxØT&|a÷Š–ýû÷[¸/±ä3üÆG[T©TÔét”Ëå  –M¡ ]"‘ÐöövO–3Ê•Z­¦l6Û£Ú�Œ´DYB 5zÒëõï‚H2ð=H >sn€S_Þ…ßÀ˜£ááað¤�’~¼ÀµN½^W©TR¡P°C=™ùD(P&yÂ�ëå½x\w:�6Rhpp°GÝ ×n· äò 6×P­VÍ!ÀêõºõÁ‚9ßñŸñ„“'%<Ñ!©ƒbÐ_3d!û:cù@¼ò$®/ëûyšO> l)1�ò¤ž€•d{6×7;;k{qõ%$I2™T"‘0ÿ„˜òãìûÉøR®Ì ë”uÂz#vxƒ}׆ùñsô~¼J*ƒ¸bþñ5bqƒñAa ɇzˆØ©^­V{>Q ©Ëw#bºVãÞ�†jµš•‹#U«U[#c“/³ý¬aä³pû}¢EÚÉkµšô—‘Ôz°Òÿx¢ 0…s¦�Ýh4zJ¼¡l@�ˆ•L&­· Yô”'Ôž={‰D´¸¸¨7nX©²Ä)ÓX%Éz²�Á�Ç•Ïç{”<ž4*‹F D"e2û›o¨˜†1—`¨îWJ*8·>ëÙgxû÷sE_®Ëg¬S¯Z­ªV«i}}½Hˆ“nŽŸ¬æf³©©©)MNNàÂ5£ðe½ü8x•€.Êz“pÏdrG£Ñž~ €‘HÄÊ´ùòfŒ ¤ý˜PJqŸÌ%à(Ç„8X¥œZ·ÛµžK”š››Ó¾}û455ek G’‰„ÆÆÆ466fÄL:�ÖÄÄ„Òé´ªÕªTœG’õøBA�‡ Âa,jµšÍ7×ÅšôJ5Ö1垆††¬W‰WR0N±XLKKK2Æãq#EC<Ù8É{R�Ö«K2û“É¤ÆÆÆÔjµÔívMMÂdLJ¥’æççuãÆ íٳǀZö{× )Dló„9à4ë2Ø“ Ü�ÿ?„Œ$›#â¦ÿ¬?§ô=QG¼A},ÅBÐUÞï™[ˆ;î’‚?C½ Ñ$ÉÔ‚ÛÛÛZZZ²žEËË˶'Ôëu' Žü}�<Æx°Ž�}ŸæÅ#e)Ëåû¸á“”ÄdÜ È]@Îቀ~Š §}Œó$ó$qX“ü ŸGÕBÊ¿ùä ú¡mll(‘HX‚Ç�,ó%¸cã˼âcÄk|†k`s>þÆüóL É”tƒƒ;ýãÞËëìµZMétÚzƒUŽ”Óã�±�´íyvò¤9{?æ}¼ß³*Ï›››Z[[³ûö±4¨æb|½úËç~üw[wÞg‚óF2Èèè¨Z­– …By�o±‰„%4yEzÏ}*´ÐîÑBâ ´ÐB -´ÐB íîìÁüc_Bh¡}¦ÌgWzr¡ßû<ÈêÿᅩK·€ ÊÆFðW*==Xâœàõ +¯Fð}`<à—ËåÔh4T*•,k=™LjïÞ½V®L’*•Š�À=G©TJÒNëØØ˜•š»~ýz@AÙ!_ C’)“ÆÆÆ´gÏÝ}8 s§ÓÑøø¸v(15ÇÆÆ h¦Á·¯£Èë³âƒ`¼7²x")HñYï¤ô ½/ÛT.—U­VU,�p+‹ŠÅbÚ»w¯©©{úÆ@¤ u»;¥¯ B(ÅC/%z<0—ËåL)qÇõÇb1#¿n·kÊ4®Å“'ÉdÒ2ßQõ�¹ „¢'•J©\.‘�$óP” Øq½¢$‰huuUׯ_×_ÿõ_ëÀ�úÿá?è7¿ù�fêÉdRsssš��µ±J§ÓšœœT2™Ôêêªöd¬SÖ«\.™S«Õ¬qz4UµZÕúúz� į#€OîJêå(“Æß}?%|¢ßÛÚÚ2ÚØØÐÌÌŒe®óïÃxt…Ä@ÖíJ¥’ùÌÆÆFOÉEúH=øàƒZZZR¹\6��ùó€>Dp¹\Öââ¢Í÷P:ùø ̵{…ƒžá_}¶çÕ3žPðÏ?¬“~k† )$ªü=úµìÏK ~9iÎbÿbO¡o1ⓤâ¶OL WÑÄÄ„*•ж¶¶4>>nqˆx�Ç•Éd¬ôêZÎñÁ³×244¤µµ5e2ýûÿï5>>nå(WVV,ž0vžô!‘Â.¨ùð}_Ò’Æ6˜`ÀÜzrÍAAŸô¾èýR˜÷ác^�·µµeeINìy¶À_o!iÚ][¥R¹g•Qh¡…Zh¡…Ú_¢-//K’Ž=úG¾’ÐBûlÙnÿö+Óáɯ–ð‚'|<éhR­V­ŸQ2™4° @ÉŸA倌QKÈØ–ÔSâªÙlššh||ÜÈ�h4j×NF5 Àý¼‚I’ú�NÇ€:ÆÅƒfPM&“–Ôëõ€°p@Pò€ÿS?™L(‹Å ¤¡ eîgOùlYsæ ÈÏcã�?×T‹Çã*—Ë6þ‹‹‹ºvíšT(4==­Ï}îs³{e<}ƒoÀOæ R�{cþÈ;T >ƒ�q¦ôR½^72€’S~¬#_òЫ0¼šfhhÈ€h_R�²p”tb®P=xu* ˆ€¥ááa­®®êÊ•+úwÿîßippP{÷îÕõë×{æ+‘HhttÔTEÌ9À¤g§Ó± |_º ?€´0GH?éVI%Ö¾E}¼ðù’¬¬™Ù¼×·‘HD•JÅÊu»]���[ƒu-¼gŒ}�'æõ +ïõ>Ï}f2ýÕ_ý•©™”ø @d»½Ó _Ñääd�2Â÷òå8=ID,ä^PsCXøûñÆ—|ì%^±ž p8?¬–{P6H‚ð/±ˆq„xà>øœWë0'¬EIªV«* ªT*v�¬×L&c{Æââ¢jµšVWW{úÆ2³Þ �÷d2©l6k¤Ä)sïûïö²N¾‰7”œ¤l%×) �C\‚ÌbLü~ç÷5|Ò—#ŽyU&ï‡dN!rˆ�”ÛdNˆ�ž´Ã—ØÓ¹vâÄ%ͼ Ç_«ŸkÊ{¿ôÆ~Aa-ó¯ïKYÇQúÒ+ÏÆÇÇ511¡ýû÷+�ö”‡õä—$£ÁÁÁU~Þ��å~‚óæ×¢'ÉýÚ󦿟 $è$õQþyÈ�¥/wéûy…,Ï2ì=^-ìËè•Ëe‹™”‘ív»*—Ëæ$Wp<Æ™µAì.•JFêÒ3lrrR³³³Ú·oŸºÝ5áÿþßÿ[µZÍTwÁç=ÿ¬áK²޻ݮ=ÃáK�Ì>q#= äç6Hzöô+ÞÓn·U¯×µººªV«eqÅ+ñˆXCr{œ¿,$�B»+[^^Ö¹sçô÷ÿ÷ìK -´ÐB -´ÐBûÌÛw¾ó:tè¾”%-´?eñ_zƒÖhñ–¡Aå @„/ÇÅgég477§D"a`¼/AÌêÅ|¦¨Ïî”Ô0@�ÂhttÔúŒd2Ë*†üxò`7àŠ´£¤Òèè¨�tž4 f?8\H²â…BAÍf³§Œ à†ú}¯wÄܼZ‹9ðY²Ì‡W1Nü§üüs²Ã}ÿ ”pmÌI©TRµZU*•R½^·òQëëëšššÒÌÌŒ²Ù¬�Q€j“‰D¢‡è˜Øl4= ±#‘ˆ�¥€x\@c,Óúúº*•ŠùM¥RÑÐÐ�eQ3¦Á~A^õÁØQZ? Ë9›Í@Í,3?Üs»Ýî)Û ‡Òç½÷ÞÓ•+W477§t:­T*eý¤[=µ"‘�2z�>^mS, 䇨¤kjccÀY_RË—4 ‚mø±'Hüúe-0Æb12«ÕªõQ‚FEç>�À�Abf\ YW¾w $p�`�Üä{øá‡uõêU›#Ö€'ü|™¼íím•J%-//kbbÂzGùuÌý0ç^Ù'ýkžPàþýëÁ@Ìáé…,ëÇy|¬g½B�û#>@†x5ŠüÝ߯I>ëKÄcè‡Çµ³/Pâª^¯‘Øh4¬´#LJ,ñåòü:K&“¦°âø(€ø�ãÑw¯^¯[)Uï)%©áË…ùäæ‘øäc0 =÷ËXòßCÊ—šã>¹×h4jÊ"HNÓÛ†=É�k0÷„Ǩ÷D–'7<1ˆõá}Üë¼{¥.k„9f‰1Äü���ò³ù|ÞâL·Û5"‚ò`ø¨OJñç÷Ä¿ûýƒqô}ñHDŸXÁñù û'sÏX`\ƒ'hñ«àz…Ðòäµ'°î›8ï�¼g¿7Ñß1‰ôôPbÅé{\‡¨m‰Ý¬ûN§£ééi{Føýïo{—�Éøc‹ÿñ|D ÙØØÐôô´8`ýï( ¡ëŸqú=ÿâÇ>¡Ÿù¸éç‚õÜW«U]»v­'ù'“É(—Ë}ˆ8±²žäò’F¡ÝÑ^ýu}ç;ßÑÁƒïKŸÐB -´ÐB -´?»té’žþy]¿~]¿üå/ÿØ—ZhŸ9ãK³Ï„õàd¿ì`ÿeÚ“ tዹ$Ìx5*˜x2™Œ=çmll(“Éè�ЂšÍ¦:�Ž­úa±xÂ�1ǼÂÏû¬-hAE%þvýúu���)�NkhhHù|Þâ þŒ"»Z­Z/7Öœ·�4º�=öØczã�7ìÿÇ�ïùûk¯½ögÕ°x7GÛæÁ›à÷ì D£QU*I·JqFÐ{xxXårÙÀ~!–——U­V­y¶/×"ÉÀ_@ €`2�S|Ö¶U)�AVj*•ÒÌÌŒ2™Œe€–J%ë‘�ÇíØˆJ§Ó=ö—=dt{ð7‹©V«issÓ²ÀQÈär9mnnêòåËêG£Që=³°° õõu¶‰„eÑ“ùÎ8›)´b¢ù’,Ü Ùý�(¼øÁ¼Ò‹ ‰ÈãU'UƒƒƒvO±XLÅbQívÛ€&O4x�yèé“J¥tàÀu»] íÛ·O+++Z]]5p¥^¯«P(Xz½®v»­\.gJJaB.--Ù=<7›Íž&÷ÝnWNommiyyY�NGSSSÖ“eaaAÉdÒ@cÞÏšY^^V¹\Öøø¸)P–ty¥Œ/·¸¸hà/D"` DÓòòrO/ÔTsþwÀ_¯nòj_ÚbÕ“@Èó @n@4bEµZÕ¾}ûôùÏ^?ü°µººjq!›Íö4k§×jâ•WuPö À�5‹/¡HLõód¢óš_[ôÀ�Dìv»Fv{å ¤¬W à_…BÁú§0æ‘H¤Gi‰D¬×[45u[P=ÀëçKºUzŽ^?ÙlÖÆ{ssSétZÒNù7æ�x…*Ϋ[ §ü5°'xõŒ÷Ô;„§ü±ˆcQb r¸Õj)—ËõÌ3knmmM•J¥‡ø†`¾ðbDu"‘P©T2•ó¡IŒ¨V«¦ ÛÚÚR¥R1R˜{ÁŸPâu»]U*뻄¯AÆ0ÆŒ§W2ù½ƒ²zÊårÒØØ˜�íøø¸Í?±�Ÿ˜!É|y’Ç“�þu”^ÝÊüð~¯ôòë‰~5’�Çml}¹M>Ã5âó±XL7oÞÔ‚*•Š�µ'WÙ«½*•~T›››Fx06þœ¾Dçš¹Oö0O˜qÿ^-˾íÉo|Å?Ÿù$öE¿_³çú¸GéÖL&ó¡>lÞg|‚ ~íïÁ«79—É.�F<p¾t:mŠÑ¡¡!S Þ¼ySù|^›››ZYYQ±X4…-J-ÿ\ÊsK£ÑP·Û5R™ùG±ú‡?üAÅbQ‘HD{÷î5²¿V«éæÍ›–LÃÞØétÌ�ðbåGƒÊ,b±ˆç>ëÉòv»­B¡ b±¨t:­|>¯\.§|>¯ÕÕUS/–Ëeó?¯øö’F·±_ÿú×ìKøT­Ÿƒ„Zh¡…Zh¡…öa{úé§ÃÒs¡…ö,XZÃ[¬èùŒß`f¿I’;�Ž•d¼d –±Ôñ¥ë‚¥:|éœf³©L&£T*¥�����[9/I–‰Mæy§ÓÑÿú_ÿKúÜç>§|>o×Lö- À©Ï¬¦¬à�Â<±¶½½­B¡ÐSn  R­X,*ŸÏèèÁ {PÅ“tsH~=hËz@ÔUB·ÛµûóýP8¶W™xßñÊ$æÎ—¬J¥RR©T²~½¾œ>åÕM\*—Ë*•J4ÕV½^·Òq>ÃÚ« ¼r¢V«©Z­*™LÚû˜{ÎÉq¹.@³ÍÍMëaR©TÔív�”,•JZ]]5â­V«™o0ÞôzH§Ó´3~̧/WèI�µµ5#ã|¹3Ÿ ÏüNӧ¯¥àX³Ø¹²Ññ ùÒS`i2™T"‘P·Ûµyb¹\N<ð€€¥RI£££Êf³=¥ɶö~åý 2À2H.ù|ýÈïoAß Ž•WðÇóc[«Õ´¸¸h§W"°¾!*ølPáàD^mÀëÄaþÏÜy•ƒÏ¦‡Xà8 ø 1ËÍþHùñj4IÎB’ø9ôëÓ˜FQDï·jµªíím#ßPá§½z’ãÓ×йÃ_ø=�ï‰ÿà¸ÿÏï¬q~÷D�b¿'¨=™ç×û ,ü�û *ï‚k‘ÿ³Or�~ ÕQ�v>&ø}ÔÇ:?vþ5ü•{®{^ój.OÂq]þ_ÿ|Þ áÂ}•OÁ¹ó‰*Ì ±Ù“\>1ƒç¿/zwðy�û÷÷ÊZ÷Äo³ÙT³Ù´ý2Œk&NÄb1[WÅbQï¾û®©lÖÖÖìA•0×âð%Öèìì¬r¹œí³ÑhTÊçóÚÞÞÖÒÒ’J¥’%„0‡Þ×üúaŒ=)êÇÉÇú ¯øy”dñgppP…BÁž©|lc\ñïcXH…Zh¡…Zh¡…Zh¡…ö©˜ÿRï�… xÀa_þªÓéXy^÷™¼þ · QE@8‚J·;ûÒYÌð_ò›Í¦âñ¸öìÙ£¡¡!år9S^>·Û;}JFGG‹ÅôÖ[o©Õj)‰¨Z­¨�:hxxXÕjÕú"Ñ—d{{»G�ýÚà–¤4 +™BVp­VS§Ó±rV€®Éž$âÞÉŠ4 –[ Üþ=–\—/-±³¶¶¦R©dåŽðÞëvM@2¸K¥’•¬¢ÿF>ŸW"‘ÐÒÒ’†††z”a€ÛÜÜT±XÔüü¼r¹œ•¹©T*j6›¶ß=DY4HÔ[ø#€ ððð°•Aü† ’ds€Œú~B€”¦ü�1÷}2𠟹NÖ3`^PQPW.—%í¨d¦¦¦ À&‹Ý±ø $”ÏŠ†Xàz)•Èûû‚Œ…¥ƒ #Ùì�„¬Ös6›ÕØØ˜r¹œ2™Œù~­Vë)m†/I²ùôëÍ÷“á5î1¨œh·Û=%ì œ<(Ë}°NZ­–ŠÅ¢VWWM%Æ8¢DÀˆC�Ò###ÚØØÐ‚:�ŽÙ¨‰€¹ívÛÊ“áøkð}Üöñ$¨T`Ni@/Éz‹¡:Áx¿£Lƒüñ~€ßŒŒŒ˜êÊ“W¾TS·Ûµã2~üÎ}R‚quuU‹‹‹=%Fý¾à�H$L‰RiccÃJïùlÿ¡¡!% #�Y+ôLBÑI<À×ð'úù^0>¦zÛ«@þ!®r¹œ¦§§õÐC)•JéæÍ›¦À×ÖÖ–¦§§µgÏ���™Z _!þÖëu»7-ø±Ùû1 ¹_§Ä| _ðkóŠ%öRbãäc¶Ÿ3ö)OPúg ÎíýßÄkî�û >7 6¤lñÁû.ç‡L'FC4°~ñ7¿ïú8ègöצWT‘xá ¬n·kI-Äc?§×?wÉÞç}ÐCÁ¸�Zˆ˜æIeî-XÒÕû1¥~A²óIyTb¯¿ÿþûö;½|üý°Þ(ÏÈzÁJ¥’%à8p@û÷ïW"‘Ðââ¢ÅâÉÉIµZ-Õj5Sv2&~?ôª1ŸŒ$ƒ{…C’ð'æÒ'K,--iuuU¶R²Älö¿Æ°�4 -´ÐB -´ÐB -´ÐB íS1ôËžç‹1ľ´ä™Õ¾tœ'4¼Ò¨ÝnÛ—ãééiûÒΗpbH·2þ}Æ:€†[»Ý®&''-ƒ@Ð!—Ëi~~ÞÔN\×üü¼nܸ¡½{÷ê¯þê¯ ¸-—ËZYYÑÒÒ’ÝËè訒ɤ•<ñ™Ù4åþ!º¢Ñ¨•ê"³Ô«"P‘0žŒ'ãm'Ÿ±ßÌ ‚^žPà˜Ìu©TR&“Q&“Ñúúºjµšeí÷#Œüüu»·šŽû¹+—ËVÞ‹2Qô ¢¤Í¡}f7eÇèM�ò©P(¨R©8ì³ÊG?.�€§Ä4éÆŸ‰D�B¦T*©Óé`åÁ["ŸÕïLJ²l€ù¾Œ×ëK7zÒàÈ—Ò(ÞÞÞ¶¾Oív[cccZ[[S§ÓQ2™ìˆ«°¤[@­Ï˜®y¿½/ñ»_‡¸äÞƒŠ%ÒxkÞû©'=°Ï\{�’pË}|ö}$y!²¿ùÒ‚¬VõzÝTËÁç3Ê:³‡ #)$�B -´ÐB -´ÐB -´ÐBû” °„ŸÁ)ÝJ000`ýÓèçÆ=q^¯Êñ$ÍìƒD%3K¥ROI´X,fçäþ|>â>Á˜ ¬À–£®dL˜üŒ9Âwƒ¥èü^Ì|{U‹'\ú©e|ìã>ÙoéGˆï Ô÷cËñ!!ž‰çì“\¾Æ½Ò›âÏǯS|<‘H¨ÑhIÂØà;Ä\b­'b@ðzúDü?8þ8Ág!ÿº6¢<ñßòjÛ QèÏéǘcKê¿z½n½»<�$£‚ñÇ?ëñâñ ¸ ‰_(ˆ‡††Œ‚`êv»VB°Ýn[Ÿ2OD·Z-Û¸b.÷‰_¿(︲²¢jµª……u»]MMMillL�FÈØF£a~Ë:ǃ S<70ƒX599©ééi���issS+++Z__W4ÕÔÔ”†††ôÁXÿ³µµ5óo>ü³óë-$�B -´ÐB -´ÐB -´ÐBûÔ,HyàÀ„œLòµùCx?ÀJ­VÓòò²óAÀ „Ïs,N”|açµÁÁAݸqC�Fò±±1E£Q­¬¬X£iTEd©úÆÍ¤§½r¹ÀgI¦¡—ý|¯ Ž‹ò¤X,ö®üH·š×“}»²²¢‘‘‘žìhƇ~¾ùõnÙÜHdÜÉÜ�¤æ¡PÐÚÚš¦¦¦¬ŸÙŒ�|<ª)€Ɖ~¨´èÅóÞ{ïÕh4´´´¤‘‘e2™žY¨�Òé´”ýã³d£< ” sÇý& {Ämoïô_‚ðƒà#ÃY’�a­VËzµø?Ìy,³ÌiIFòwæ¦Ñh¨V«èíËÒø~´‘HDù|^ÓÓÓÊçón¡ ØÚÚRµZµ1àüFíU9ôP0bt{{[©TÊ®%›ÍöÉdÒæ5�+�N+—ËYˆB2±‰ €´ÙlVÉdòC¤Ypõq‹5„ ôkÁ«s‚ $o~l¼Ï& ¥Óé²°—õÿ±÷f½‘$ÉõïÉ$“Ì}'Y¬¥»§»§·i æAÒ|}a=éI€ z‘0ÂLïµpË%r'™d2ÿ…Ÿñd4G÷¢..àÝE&#<ÜÍ̓çØ1sUP¹\V»ÝP±T*i±XDYJ‰}¨�´dí‹…†Ã¡², e¾Þn·ƒ¤»»»‹2˜Y–EYEIáÓì×Ù»´øÔSj‘|R�ï}ŸGbâÍÍ�¦ÓéNºÁ`ŠAbY³ÙÔjµ Å„jDJ¾¹?@ñå}¸XKW�m6-‹(³á¿¿¿ã¤ß¦Ÿw�mîCûûûªÕj:99Ñ×_­�>úHý~_ÝnWÝn7â“—‡t½¹¹Ñv»U³ÙŒXaD p„ý‰z©H?¿=1Àc kž_K”eýôÓ8/..tyy©R©¤—/_ªÑhèÕ«Wz÷î�Þ½{§F£ KüÉ}ŸpK¤Q²dÉ’%K–,Y²dÉ’%û ` 0éeY”ð¬c r€>dòæ�iÈ…ù|®étªçÏŸ«Ùl±à÷òŒY'žüh~èÍØW«•®®®´Ýn£GDž„òò\’‚„’´”�žeY¨mòÏÎøŒ…ëPÒ �„lbÊ”Ñ##¯rðµ ‡M˜žçÞNôùµò$Æsx‰QÀÓŸþY“É$ÀÖ¼’Œ{9àçkÉÚøBž@n‘9Þn·%iø™ÏçšÍf¼öãOù¬? !_[®_¯×£l¡«x\=†Ê  ¨P(h4ESûÍf@:>âå ó½/ÜoŸ½ì*ʦÝÝÝ…*…gП NOOÕï÷U©TvTUøßl6S¡PЫW¯Ôh4vH ÀCJßÑc„ÏÐ d»ÝÆœH ò°X,ªÓéìk�Fôt ç åÀÈ"ççžµ F8~ä ¶Ç%÷w@w/ïèÀ,û?òrN\Ã÷µ“¸™übÜŸ#;"¦ÙlêùóçQf Ò“R|¾dêࢠA%Ãu‹…...vzp¡p;>>V£ÑP¹\€–1ñûd磖am?c$NRÚ‰ùs%µû½“îîç�/ôub�S†r¿`¾ùc† ð{16'Ö!9‰»ÄK~Îõ j!²!¾çóyÒËår'®»ŠÍýúääD''':==Õ7ß|£gÏžE¼g�1çø–—VE{zzk&iG1Æ5˜ 'ÿýœôrsÌsÉóçÕ/~?Ô£Þ¯ÐÉMb:ë æóDlóë“Xâ%í¸¶€Œ‹}Ãy‚¯yé6|Ÿ‡¡<,ÊÒÕj¥ápe1�hažž*‰›'†ü òség{1Oyœó}ä ,�Uþÿ¾îÜ×׉sÒ…½ãÿO‡¿_9ñÃZ²ðEæ˜øElqâœw0úIŠ32 ‚R�ØI\s’ÖÕÃ((ñoöÇÉɉšÍ掺�ò¶ÝnW_|ñ…ƒ�ŠÅ¢ÎÏÏ5�¢\ž÷ŽÃ§|;¥%—Ë¥ŠÅb”^ív»úä“Oôüùó ²�ŽŽ"nõz½(Ó‡¢²Ñhèûï¿�w¯ù|ç8=ÌòÊûD%K–,Y²dÉ’%K–,Y²by°ÐAþßA'òÙ�N`ä�DœÍf£n·�~ý>¨ðï¼ $ŸñîªZ.— :::ŠŒUÏ&Sp–ŒW2ÞyžR©¤étª‹‹ ]\\ì””òù¢ ¾ý777‘•ëÀ(%�*ó óø ÙÆ¼r€GæÄçLzìSákôÔ€µ,Ë$)=æ eN¡ð^ñ‚ª �1£ø¡Ôëˆ?Þßß«Ó鄟êAöÈ¢€¬k·ÛAþPº5‘†€ò’,|¬T*:==Õññ±...by£r�Y¾§˜ó¤‘¼yÒ(¶â×cœ …ÈõA9&|#zä´Z-}ôÑG�Çñ,øób±ˆþNü.û–x4�%i§_Óx<Õ}¸ �PŸ¸ú µë½Z­ÔétB�„Ï‹ÅeÀ%ó�'ë™#ˆÖ–/ÀUÜ×Ù÷�Àø#ä@ª—®b}Q=@{_0/÷˜'J‡!ä—Ë¥f³ÙŽšÆ‰5üеÁÿ*•Š:�ŽÚí¶:�޾øâ ½|ùRív[üqÌ«Çh/ !uss£ÃÃCÍf3�Çc½xñb§´"þÀÙ‚/»Zȉ¨<©ï~î$b>AÃÿíª^HK|¢±V«…J "›1qþ;y’?Ûÿìqòöö6@Èž?Ÿ˜Â¸ùâïd2 be¥½ô%û=OÂñ}Ÿ[�+ù¹Î'h¸ù9Éš9!A|Ì+NüÜw?ô‘ü»ïL^*òæúúZõz]’b¿øzùûïÌ ½Ôˆë¨™ˆÑ¬ÿÞÞ^�)Nö:9çqsBŸÞwµZ-”E(žœ ôK­VKY–é?ÿó?õúõkÍf³e ý•Úív”*&Ž9!¼¿¿¯F£±ÿ!�ªÕjô�k6›úè£�Ôn·Õh4ôâÅ ÕjµP“êèèh‡À®Õjê÷ûqFŒF£èU h IDAT›ÉλcqK¤Q²dÉ’%K–,Y²dÉ’%û –n$= *¦@¼äKf880 =¼Y–iµZèO³LùÚñÒc3mT*d3ç)u}}­ápÙÛŸþy2(PPg dA]`K¿›,Ë4�‚° »–ß[,QöÆëü“1ë¤ÓjµŠ²;>w€šôsá:o޼ы/B9E¦5` àŠF_;m˜?IÐ^__ëøø8ÊÒU*•(3æãdÎ% `ç@½¯%Ê_-—KµZ­_�M”0l·Û*‹šÍf¡¼d�tä¹!Hè•3�N£O $MX…¬É²LÓé4Ö‚³P(씀¢¤a§ÓÙ™xnïiãjœ!w ¹*6Rʆ1/ôûDX„TbM ~†ÃáNY)ˆ…Ùl¶£æ€¡9û¢V«E&4j/ýB 4ˆ†½½=Õjµ_•ždQËð¬Þ'«Z­ª×ëéèèHóù<݃ƒƒ(9 ˜I\q!ßkÆI8' ]…ÄçòŸu : »�;Iîª ög½^×Ǭׯ_°.)úú¸Ècíf³Q–e:;;Óþþ~�¨�Ýõz=JƒU«Õ(Å3BLÓ—Çû5›ÍkÍÏðÝ<™Í¼H�jH÷qïUy¶X,vˆ`|‡XÆó:ÀJùH�›Ä@pW�²GØìuWV¡àreŸ÷ž“´ÓC _ÛÛÛ ÕóÿìÙ3«Óéè³Ï>S¯×‹Ïùxœhæ¿ãñX———šÍfAV{‰/+ÆÂ^G¹ Qí¥ø ÒòÊ£ü~aÎÝÿœ\àóî|‚�þ+‡‡‡šL&¡º‚Œ÷8ÈÙDâE½^�ø×h4´X,"öâ;¬ç$ýIÄ@yAÌt’±P(èêêJµZM_ýu¨J¦Ói¨ QNz<ðwŸ|‚Lžãlõxçû%ÿyŒ˜á¥q¹‡ßËÏlˆÏüóÀ¸‰gœñnÃâyÂ�sƒï{©Aö=ïx§B9I‡´ív»±G%¹Ä{g ýÌòÄ 1‚’3„9çÙP¯×k]\\è_þå_4›ÍôÝwßéââBÒ{%íëׯõoÿöoúé§ŸBI<™L")…x@Ìyþüy$–°çóyœyÏž=Ó_|¡o¾ùF�NG…BAív{g¾\�Å| …(ãz}}­óóó °ëõz¨¶xÇñ„ )‘FÉ’%K–,Y²dÉ’%K–ìY¾„Œôx8Ñ ýº–¿“Cùì[þP–Þæ‹ÅB···;™§€…\¡€D„º*¢åöö6FÊÒøê[’ü`|žÙÉ5Qn0Æjµª£££hªMù2À7W•ð€s>OàŒÀæðð0@3/gõË/¿„ª€±AĤl65�˜ºã œßw�ØÉ'Ã=.AÖB€±¯Ù\ÓdzvµZ­_�Ùð’µÎ¯×kM&]^^¹R­V£”c¹\âÔI<ö =:(m‰?RÂq½^Çš2wT;�à5%H�LZ¯×º¾¾Ž¸…‚‡’P’4›Í¢G 2~èþ !BœÏ«õð è)OÅžÇäÊM¾—ð1W ìïïéÚétÔjµÔï÷õüùs=þ\½^oG͈_x¬ÄOP?ÞÜÜèûï¿×»wï4 T(bÿº¿Aæñ¬>6JO²ÿð+�®qÒÈËë1¿Œ}¹\F‚ç©«b\ äþœ/IçI>—¬sÄï{ü`,œßø¢'®°7=6¸ŸÞÝÝi6›i>Ÿ«ßïë›o¾ÑÃÃ޼yªUga¤�XÃyН0ù¤ ?_ýüe-¸{‡½Ï³gÌçs ‡Ã_) QY2§’âÝ£Óéè“O>Q£ÑÐññ±>ûì³è�I2ÊÞÞžúý~ŒÓýŒ8W*•ÔívU,õÝwßy‰â"4&I‰4J–,Y²dÉ’%K–,Y²dÈ€(Œqˆßq…�_Ë�<Ï®¥G`a>{—ûzö¬Qùû vòÌ`2Ù3 °/)‘æ™Ö€däÞÜÞÞªR©Ñ�Ê2eµZ)˲œ·÷­à 0Ð3xh“ �ghóïÉd¢Á` F£¡F£Ïç`“ƒ`þ_Ï„<äß<3*¨ÉdeõšÍf�žQíkÌ:¹R `ß{³Üßß«V«©Ñh¨Õj©\.ù7�C)ä¤ Îp8Ô|>—¤ š!‚Þ///U(¢gÊÃÃC„ø“«#Pà€fôTu3æÕ ù½áJ3®Áxø=HJ¸áÇ€WdŒs/ž—æÙ(�ðwH#î=™LBMV,£19>ÐÚétT¯×µÝnƒ<º»» ‚ŸìsàÒU ív;ü²\.GŸ¦ËËK]\\Ę� B1CO$z!9 ”�ùx倸CNäø^É«Œ¸–_¿æîÿdø?E:yI5 www;dvv@B“h­V+úR¡Ôñ}<;DH^1Q©T"ޱFN¾:éíóΞÁŸdì|>×jµŠRe^–îææF•J%Àw/Géû‘ëº�sžÅI0Ö�ùfœ^J‚àøææF³Ù,ö×d¾Ø³®¦k·Ûêõzêv»:99Ñññ±Ž��ƒ0ò俎«ànnn”e™‹…²,Ó÷߯ù|ÄŒ+4 �e­1ÖÊ÷1c÷³›øMé+'ù¼¯?d>qÖÏ.>ãÏÅZ0÷x®å¿äÉî“ìWü²Êç�g�hƒðžN§¼w»]}õÕWj4º¼¼Ô`0ØIrð{ñ~â¾È}x÷ðçdÏ×ý|ô›ü÷ð æáîî.ˆa|ÿ)r-;ü>w®øò9ãsKŒwß �…w T2…BA777 ‡A~¡P¦„¡Ï-jaÎ|ƒÄ‘z½ Ì9ŠW¿á\ãßùÞ|¨•ëõúλПþô'}ÿý÷QÚu»Ýîôlc®™³Õj¥Íf£Z­¦�?þX�FCÝnW}ô‘êõºZ­–z½^(‹Åbœo¨8yîÛÛÛ�5‚8罈÷î�jï)K¤Q²dÉ’%K–,Y²dÉ’%û æÛ^vÍKˆð‡. ¢ô¤R^õæ™®’9á™§4hPâšž1ÊÏ¿øýÃÃÃ(eu¯^¯™¼óù<@iWLP̳Wr®¯¯U«Õt||¬gÏži³Ùèèè(€²f!Üñ¬xIñœ”só’JÌ‹@ûûûZ­V’ÍÔ/..tpp Ï?ÿ\Ûí6€€!šH;ÁÇšyÙ r¹àà!J@>²ˆ¤÷9§LN³Ù °–L_dµœx¬T*êõzÑ€~0�íøøXÓé4Ôc^–‡L^€6ÔZwwwúùçŸwš²6r-JÝ ˆ`þÕï÷Ô_,Qv@èúú:Ô<×BU‚ÏBò8ø9Ä8È"¯×ë1?d÷ãϵZMµZ-ÔH̽–...âÙ¥÷ÀØt: µßûãÿ„ÝÉɉž={¦v»À9㤮Õj P¥G ÒhµZ(1´^¯õüùó� u/SHÊg¹F¿ß‚¬Ùlª×ëpÇžØÛÛ µ¾ŠßŒòìN¹âW®²ñ8àd=-òÀžÇǼáÓÌ/¤Þp8ŒÅÏêõº&“I�ud­—J%}úé§ÑûÿrÌI+ú~Ð@¾X,êøøXËåR’"{�ga^oy^ˆ#æ–u‚̼¿¿×x<ÖÙÙY(ú « …÷=´ µè£ƒßãÄÈS'¬/*'ÌAqnfìÏB¡¥É kxfJSm·ïÕn€¸õz]¿ùÍotzzªN§£r¹¬ÓÓSõûý ïðzã¡â€¤å€”¾c ¼Î~‰4J–,Y²dÉ’%K–,Y²dÔòÙõž1›_ý{®Tâûü?@Æz½Öt:Õv»ÕÑÑQ¼€ú8ž�På¥_òŠSï#à˜¶¿¿¯Åb¡n·™æ”˜šL&ñÙù|`‡�áððPÝnW“ÉD’ô\,zóæ�Þ¾}Š À$ˆ1JBQûÙAMæÛÁkžÙU¸777ªV«ñs/åÄõ<;à à—µÍ²,ž�ž)>žy ’Wbðå™ÐÜËýÃU€ïô¦ ÷r¹ÜyN”3¬ív;ÊÖQÌKèAÌ@6�© A�êÃû¢°¾ôÒqÒà�ž:Œåˆ÷<’‰Tïé’ïY�oàg€«�0ø3þ¿··йñx¬õzåÀÈÄööÞ÷·aþÏÎÎÔétÔl6Ûn·ú¹9HË¿]1°èd1åÚv]¡0›Íb¯£>a=)Q‡R�ÿ:a!=öxÉ+Œ…OCx­V+ýôÓOšL&úè£�ôùçŸë‡~Ì s?7=)ßÚnß—?e�!Xóóü2?>n|œ÷ÞS¸7ïMNhûu]Ñä•+‚üýÊckà{€{A8ák”Ee/s6U*­V+M§S]\\„š‹~vÌeàð­Éde!Çãñ޲lµZżÒó’÷ÆZ­¦z½ïŒ¿T*©Óéè·¿ým”¥ó2w®²ãÝGÒNL$©�˜www§/^è›o¾Ñ§Ÿ~ªf³©n·«W¯^IÒ¯z³ÝÞÞj2™¨P(¨Z­Æ9Fb¾ì>2�Nc͈‹ôü"e6›E祿â(‘FÉ’%K–,Y²dÉ’%K–샘v¡0ȃ­Ò.0@Åýåår©Õj*€­P°ä '®™W ðÿ²€óI’"[pÑ+Òû?Øi6L†)có?öé÷yXp~~®,Ëv² ”vàÅ“÷ÏAÍå .À†¨õ’‚0¸ð²RÌ JI;  ó³Z­¢$=5 ÎÈ|ǘWJÔøZ;8…ïpOæp2ÕYþ{{{ʲlÇ¿¼ÜÖÞÞž�†úý¾Æã±f³Y(š ]mE-æ_%Û½X|ß÷ªV«éôôT''';d@ k‡"€%Ïv}}så%ºó@ X¹\Ž~RÞß”5ì§ÛÛ[�F£(UçŠ /!Eþz½Ör¹Ôùù¹:�N|ñs/å€q¾,€ 7kìýQæóùÊ÷3ö± ‡Ï ø#ˆ‘•ø¡?#¾‚Ï-‹øò^^�•¬‡+–ˆ� N ±_‰c®Xñßg>œ¸ô¸ÈþpÅ±Í ÏR©¤r¹¬,ËbììÁR©¤f³„ÑË—/u||¬~¿¯^¯ 8Ö•19™A¯þ�e™²,Óp8ÔÕÕU�k\«ÙlªZ­êÕ«WÑÛk¹\Æç؃”H…Àà^Þ«ˆó“¹qõJ>�ŸÙ‡ü|±§¼<Ï äÄ�Ͻ“Òã¹ ù‹OB:Ðë e3f|ƒßsðŸ3 rˆs‡3EÎr¹ÔÿüÏÿ¨\.«Z­êã�?V«ÕÒÅÅE¨g 4™îãdç3÷cþ�(†&Þ9�„ÊC‰ÊõQr¡¨qâÏã–¯êÊívÏÀ:á—�>^vÏ 'åã£��ß[,ñþÀëõzA*]]]ÅYEbgì|>�÷bªRÊÍy5Ê7â�”w{öìY¨Û8+%…¿Aôn·Û |P¤Ëxÿèt:ªV«úë¿þkýÃ?üƒŽ��U.—cí9«¹>Ǹ}�²I¢ìër¹ÜécÈ»‰Ç-ö ó–”FÉ’%K–,Y²dÉ’%K–ìÿ3ˆóžŠy2$Ú9H…QÎÐd>ŸGÖ{­VÓl6Û!p€á>ùŒô á¶··ý¥øÆ‰M”={ŠrBÇ•ì¾<ƒÿ)rÜybÃÕÄö?Äå|>×Û·oµX,$=’¿¨¼ä`¹¤��ô“°¤]~ ªÕjø¹+¨ !%E0€nÆL P«étª,Ë4™L´\.Ca佂Ø[ì=È-@{JʹjÑI+J>²§=I�ÏçIŒ|€«p îy.b)JÏR©´CtRª•!eONNÔl6ƒHòÒš¬¡XŒÁIê7oÞh40�*âèèHõz=”Ýn7öÀÛ·o£T§—‘Ãoéõâk›'7=a"¯jq2_sõ ×c~Ç}½ù¹«O¸6{ÃýÕ çdh¹\Öb±²‘D / Ç8=Î:Ñág>Â8!:IʘÏçúïÿþo=<<èùóçúýï1†þwô qWRôê�è…0\.—1ß”ÎõÒ­ù¾HøóÍû…'b@’�à%]ÕåsAr>æ1�k{" ¿ïý’œ|DuåªÂ|R ½¹\¡ÃuºÝ®šÍ¦&“‰F£QœqNÚ³Ÿ8ë|¾!Tx·sU5óÀç›Í¦:�ŽÆã±V«U”þdoû{M±ø¾7äd2‰2´ÄƒÕj¥�>úHøÃôñÇëÛo¿Õ§Ÿ~··QrŽye>x·d])CŠïñŒ�N'þŸ=ãı~0D²Äd2‰¹sK¤Q²dÉ’%K–,Y²dÉ’%û ˜äÙ½€Š*ä@€7üœï9€:�NU¯×£À1@£ô¨2yjLr0Fþà”€ u0 cooO“Éd§Œcð1Ò8YR_:�F#À=ïîî4›Ívz~8 qzzª»»;�Çã BüÉŒDâš’â9|®¨‡¸å ¡gJ¬Ñ·©R©àì ¬+ÀK8wÕ>àY¹^† ¿aý)P½Ùlv²rÏÎÎBÙÈ~~~¾£Vð~%’‚ÐàÙ(¥ÓétÔh4Ôh4v>ææææFÃá0|"Ê®^”lµZšÏçšL&†ÏçóÈ@&ó›ua^½¯ ÏIv5À÷l6‹Œ›±y‰!üö)ƒ8%+4éÍ›7* zñâ…ºÝîŽ:Ò÷;ë.)J—¡,¸¿¿�¹EùR.—c_“Í^­Vc¿BœQÂ�gƒ õþ”óýxppû$O8;ÁäæDÏSåì0ÿ}÷s÷'4|mˆ�†?üðƒ², _u¢ÊÕf®0€l`ŸRÖ2–Bù"öÄ��=OûÞÅîïß÷ý¢ Ýb±P–e;=¨xf‚U<ƒæwww¡Zd�ˆ‡ÙËN û~ö¬{Wñ9Tq¯››› D‰o·QT*éùóçzùò¥ž={¦N§±œýâçŸ+š(…*½'ã...¢œÜÙÙY?ÝnWý~_årYŸ|ò‰¦ÓiÄu΋v»­f³Är¹ ÂÊ{t1'þåç¥ï>Ë\æÏj'>�TfoøþpÀŸ5`Lü>ýYü¬%Î9ÁÃÚS‚  ÝIo�+>&Oª�À<†¯\__‡Š …Ëp8Ô|>×7ß|£ápϵX,4 Ôjµt||½¤v2ò)u�ç`'@KžàpÀ¢ßï«ÕjH9U¯×ƒ´™L&Q“¿V«í¨9ø=zÚПâc2™P¶¿¿¯o¾ùFóù<Ê–H н‹˜KÊŠñ¼T£ðZ­V¿"œ �(£?�+7œò&éø†ƒWyšus“k1Ç”\ñ’wø€÷ Ëà·ßïï�FÎÌ=Ò�8¬óv»U–e;ê B¡½Gf³Y€õøª?/s…Ïy£m~°‘ž?>†<� qÉÿ3w-¬/ª3'O}=P 1JDZ‹…ÎÏϵ··ª@}’ókÊÞÆOXO@U|Å{r¡N„u�‚pQÒNo|«^¯G %ïÿá±'Oòä}”ùöçs¥…“¯NLp'Íü÷ž"�îïï´�Ç:òœ”Q¢ŒD*ª<Öv½^ëêê*€[ŽÄ+šË£är²å©uc¯±Gèû2›Í¢Œ ”‘®Ö¡,#þEÌ ×–Ï)ë8™LvM€æ“œLóŸ�%|ÖÍý’�9eL�F#JÃõz=�œœèää$zy?ÖÙIâØÃÃC”\¯×šL&ººº ‚“Ršõz]ív;æ¢ÝnGŒªÕjA,’$H¸ÒÆÏ Îðù|þM/:_'Ó0OAÄYÊy²X,¢(cöò{üž«_‹Eœ­ø"„ÜÍÍM(K§Ó©ÔívC=Çû%*?ÿüsÕj5ÝÜÜh6›íœcì7O,¡¿!ÏêÊgš^zøøøX_~ùe”Jm6›zþüy”¢�FÚn·êõzAÖP^ïááA/_¾T«ÕŠDÔ稃X¿§ÎEH#b1–g�Ôc¾!øQtñF"‰þ.å–H£dÉ’%K–,Y²dÉ’%KöA-ÿ‡©—¯q¢ÀÁÓ|f³ôø‡4 ™Ó½^/šü:ÁÁõ\Íà”´ ®ûx‰¨§ï͆¥Çæád/óG:ä¯V+õûýÈtö왺ݮNOOU(vˆ €†,Ët~~®ËËËŠ£«“÷÷÷Õjµ4 "#½\.G&ù—_~©ËËKýéOúñ¨^©T¢ì×d2Q¯×S©TÒ|>ßQHùx½À*ÀÍ~¿¿Sþ&Êy¶8W~ý=ßÉ#@7/I…z"` °ŒìsÖBf³Ù´\.wH=æž’6¬A¾¿�«¸>%†îîîtuu%—§ Ìe½^�7”º£üþì}˜àÏs IDAT‚�†jµÚ8�â¥ûÖ)˃¿1Nác¬‡¯�¤�²…Ì?û‚ç¥×ÑÑQ(3œìË+0ˆ]'€øœ÷Ã?Öëu±›Í&zÜ8i‚*‰ë³¯˜ÛB¡äl^¹ð`þ—⛃¶Äª<0Ç¿�0òû0NW<¸JP÷åË—úâ‹/vT‰øÀéååe¬-ó x9Ç ñQJ[2|Û㪯«ô¾‘;j"ˆ‰étªétÙó^óðð0H;|oÒcbAž}Š|qÿu%—Ÿ©®<âû¾ŽüÿÃðý¼Ñÿ�jåÆõõu€æØSê®Ã5‰g� ú­V+Έår©Á` Á` ÙlþM:JEÎf³øþt: ¼Ñhì¨Þˆ£œµÞ¯ˆùå³JKÎ:ï¿ÅçóªÍ,Ë⾌Ò!™r–¤W7¡ô!ŽdY $•@¡."^P¢’~S<ëb±ˆyãk±XÁ³ÙlÔívU­Vƒ`l6›:>>Ö‹/´ÙlôîÝ»ø™«E!‡ð-H"â ÿ%Æöû}U«Um6½zõJ_}õ•~÷»ßÅ;*¿ÃÃC•Ëe]__ë“O>‰2³›ÍFgggúî»ï">ŒF£P|¢Tä‚ò©$¼p†s¦r¦±v···j6›¡Äª×ë±G)�Œ¿òîJ/?J:ú¹â–H£dÉþjþ2�,Y²dÉþß³ÿ H–,Y²dÿÏ-Ÿ¡ì™ßþ®ûTæ²ÿ?€j@,'¯áŸÿ£ÜÍ�2W9ø½œœ¨V«AŠt:� QÈ.åyjµšúý~”S¡´d €;$`Õùù¹f³™ºÝn”ƒ¼zJ‘À|l6›P·^´Ûí(ý±Bÿ €�z½®ÛÛÛèp||¬B¡°ÓWÁÁ[À^/séÈqxxeVhdÌ\ÓA0€Dž�Ÿ3¯üë �„ÿ°ædnC"\u»]=<¼X,tqq¡Á` étºÓ˜žûW«ÕðwIÑcŒøÌŒqßþK>ξpÒÇUVÌ�ÿŽ–uc�XÎ4®C™¾ýý}Íçó û�<ä^�%Nœ¹ÊˆR¡£Ñ(zJ-‹ H‰#½^O“ÉD———ñ3úr¶p&{œX­V±ß½”&ª_=�ºœ3ìkz;zB j)b#½žØ'®¢×ØÃÃC$ Bt2‘}ïÉÄ\Ô<¨pCm7�NC9Ç{±—ùY.—¡Žvït”ÓìõzjµZQªBGÒ¯ú-2nô÷)b~±XÔ矮f³©³³3}ùå—úì³ÏT¯×wHÌñx¼£@t_ò’¼¼kM&“�2‹Ä$IA>U*ÝÜܨÑh„òœÄúh‘,By?”⨠tyy©,ËT,£|é§Ÿ~ª?þñ�*•Jzñâ….//ã½Ç-‘FÉ’%K–,Y²dÉ’%K–샙ÿQÍ ]Às%�«üû\˜f×bû=˜â+_¦Æ3zìÀ"Óð©\.G�Šv»åE¤÷ÀÑÑ‘ŽŽŽ¢ìj#È.IæÄÐD¹^¯ïdæ{†6 ?çg(ˆ �¤Ç¬{À5€ÊÅb¡õz­^¯§ÛÛ[ ‡C ‡C½yóF­V+€W”("Ñ/p ÅÀ�ðÌ¥ƒ�ŒÍIŸüúK»„Dké%q˜OW4¡0ág>'�3¨TÈÀît:zxxl|žïÃÁX¸X{”IdO{»¼š‚5w ߉"1:æ‘ëx9'@qÀ8Ÿ{ü ’gñR�¾_J¥Rå¾G\ãDς‟jµZ±G�ˆÉ“Å”z)&HÓjµ%¶ŠÅ÷=d…�¸ÝÛÛ‹Lqþ�ox pBu–“Y®ŽË“fü?>ä�蟊�¾Nž{Œäçy¢À‡�F-HŸ"ÀfzÞ l`O: ¿Ùl¢ÍÜù™?ƒÇ|’¹$___+Ë2���i0˜N¹¤v» ªÇ¬J¥²S6�ûú|äÉ;ˆ8zåapüÒI(€rW•ù3ûÙ8\«ÕvúvAXó½~¿¯ããã(ÃHÿÖÛçÑçžëS’ëááA“É$ÀoÈÿZ­å膽ô—ŸWüwµZi<GÉ´·oßj2™¨P((˲˜‡^¯kïä cËûiÞ·�DrÕ¡Ÿ£¾–Ä:iWåCìà{yE¡¿CøuØô"ŽŽÇc …8C=¡€Þás××סqrÂz¹\j2™h8*˲ð)CÇXñ‰ñx¬ñxI&+ôÑc_sˆÉûûûAdì”k”¤ù|góï$=ɼGпŠÏ0Vüœ½ !6™L¢„$kçq�=äïKNÆsΰ߈O<[–eʲ,z1²—‹Åb$H ÷‚„âl^­V;}ÍÞ¼y£«««Pò@f±öø—‘~¦rÞBT“ 0ŸÏu||¥ïü}t:�î”å$–¡ÆÄ·y~OØàw™CÿýÍf£jµºÓ’¹‡£t-û‘¸a‡ò ÕW±XŒ÷Uˆ'bþ†%Ò(Y²dÉ’%K–,Y²dÉ’}xÈ—ƒìͨ|ÖÁ@>Ïõ ^ mœÄâº~mÇS 0cã×××Qþ§T*éøø8JoI�%ãȪ?88 €À44F¹âjÀ8¹‡ôبZzl8 àÓn·£ `¸ƒòŒ£ÓéD³é,Ë´ÝnLFÉÃZÒ¡p¼s‚Ì{åxæ:€kö,uI;÷t²ƒRM\ BPÇA@”ôá¾€{9”Öa}(?óðð —¯�ƒÿ®À"{�g8j_�NçW¤ŸƒVH¬-dëF{ssJA'�Öëu�¸Ä5�ùÌ5IdõSâ)O,¶Z-G8ö‹yf/BÜP °ÝËàÕjµPº2‚XÂB@Íçs���‰7�ãóÓéT···ªV«Z,Qþ2¯ s¢Æ×ÂÕ&®k Æ=\¹È y@65ààºX*â£Vˆç‰€ùÌMãƒ�V«Ud}ã¯xçAfb`$`  9ä=ŒÛ¥÷}EØó‹ÅB…Âû×××È’ý ÁË3;Éø]-ä*8âØÿö;ÿ®‚Du@ÜÈ—}bžðm¾G)´v»cn·Ûúøã�Ã!E’óéåry§šû‚ƒž¨÷b±Ð»wï´Z­4ŸÏuyyYíõz]µZMív;úÍAN±÷™3'‘¼WþÁ9Àøè¿QàñË÷•“—ÚôQa.½Ä!÷¤LÔ|>� }’HR`?öz½P]æ×ÞIW ˜@Aoµûû{5›Í8³(CéeIÙ{$L¸T_]]éòòRÓéTçç纸¸Ðl6S£ÑÐÁÁ�ÆãqŒ�Þ2”õñò™< šOqb)¿‡ýwò¿—'¢ðæâ)5&sš/‘†o …صZM÷÷÷ʲL¥R)’J¥R(88—ðë«««x(—ËA�F#M&“ Žê‰Ÿ¾G6›÷½lHÂཅ˜GÄ_Ëårô€ãózþüyì1yÄXún6› 4ü|ã@©>â-j#Æ1ŸÏ£/ç}“*•Š:�ŽV«•ªÕª�F¨é$EŸ5ïÝßß×l6‹s5ûì©’ÍR"�’%K–,Y²dÉ’%K–,Ù4Ï G�(&½/�"=þáë@)ýèiàB‰5e@î‘×ó`+¤ƒƒPü‘ŸŒ/ùB¥Ð陥~þü[”UaœÖdÚ„‡ÃÈ*…p8¢ÿÁÁÁ�V«U!XFVu£Ñ�¤‰ $¼ÿä½Gúý¾¢ü cpzûö­–Ë¥^½z×ve”¦P’vˆ€²?¯’”&>ÍçóPœ¸Ò�~³ÙLµZm‡Àgމ‡|µÛmÕj5u:ELa?2.'¿žŠwÈ«Õ*JYTCt:�hnO_ˆrü�õÃ/�ôȲ,#Öd8j2™h½^Gé<ÈÃÛÛÛè_ Ûl6w”3¾WóÄŽ—8ÃçÝÇonnbϹ:ÓK$º*f½^ǽ|pm¿1×çÜcç1³\.k6›éúúZ¡tY.—á“”rƒl8::R±XÔl6‹Òm(Œ¸®“¬üÞz½ÖÛ·o£\$qŒ˜Á™S*•‚ä¦ÔöððXŽç£Ô, ï ¼÷Ìf³8;x'ÁÇØ·óù\÷÷÷ßéYÈ<’¸àñHRZÞS‰ßõ2‹¬1ý›ˆ½(©!G˜?üˆþI�Ø$?°¦Ì™$½zõJ¥RIoß¾ ¢L%„oµZ݉Ë$@@à‘là„(±€˜Ìš“ÈóB¶JŠ8BAâ7ó ÙçÉŒ•÷]ü 6´Z-5�ðC/GËû‘ñÄ&ÿôÄ>z½žæó¹F£ÑÎYè–H£dÉ’%K–,Y²dÉ’%KöÁÌÁJ¯58ŸÏ#ãz2G×ëµZ­V€ €’l"SÕ•8ì€ù8òG8À¨ƒ_J¡Œñ²8dÃ0FÎýž\ uµï¢<œ«1ÖëµF£QS0dÃÒH›¬yT=Ë›rw€¶dšK�uðQÝßß«ÛíF¿¦“““ZI!´ƒ�Þ¼y™¿’BÀ2z¹@é‘Àså‘pž•ïŠ òÉÔGECïl6 "CRô~J9€ør�â)áâ„<à*ŠŽÍfà€ðz½Öd2Ñ�?þ¨½½=ÕëõèðY|2�Ò3Ì×NtzÉBÊ�Õëu�œœh¹\j:�ªV«)˲gñ!úvx_)ÀeüÁ HÖÁÉ”>ðzV7 þÙÙ™ŽŽŽ¢‡Š÷É$vÍç Òi>Ÿ«×ëEæ~½^�gsÒ…ïy¶7D+k‡z ÖÉܧÊu¹ßr?À{'ÕˆKž"�«ÕêN¯)'ÙßÛÌ—$u»]}òÉ'*•JjµZQb’ОÄüÛ÷Ñíí­jµZÍ5dÕKÒÕÕUšÛìÞßÝÝ©ÙlFÿŒ‰}™Î>q‚‚U>ÏÃÿP#» è×ív#6Üßßï�ʬ?ã§]¥R Òš^EGÍfs§—w4(F�)5™L4ŸÏ˜‡Ø.ß÷L¢g D¾Éu]iƒ_®×ë(Ewyy©Ÿþy§�ŽïaÈ9Jp?ø³=y UWNñ=b={Â}œßÔf=!Ÿ�ÅïüÜp¢ÊIï+ƒjDR(( �8P‰Ìf³Può¼®p¡¿û•w J¶QV¿Áoý¬å]åõë×S¼g 1ŸäY]AE" {€ø”eYÄ ½ƒAÄtæ\’ÎÏσÔ%ö 2".B¦0FˆWóùûI&NêŽÇã�’rì%ÔÏôhZ­VÑÑ{A’Qâ5ŸP°Ý¾Wù1/ìmΠΈQÆ�N¯)æÔÉ?ö1q˜9æ}‚ëQî“磿äK,ð3‚ó ÑhD äw˜;üÉK^ò~")’¨$EÌ&™×8ó8�²,ÓááᎢË-‘FÉ’%K–,Y²dÉ’%K–샘Â: PèÀ!†ªƒ g@€år)I; é‘ zj |ŽqðyÌAjÆ|ss@ýjµ’ôØtÅHÜ'“~¹\†Šˆë¸Z ’uKµZU½^0i8êÙ³g"æÕDNþ@nøñŒþÿùò4’væ²ÑhD?þ߉.zû‹EýðÃʲL�NG£ÑH'''êõz‘õ¼^¯#׳ïl—åm .|m )Çä¥j¯èotss£ñxä åÍÍM�Igggº¿¿ßiøíͤ]}`ŵ)›XÄÚ:zŸŒo8Ƽ»ÏxÖ>�Ï))F5ü¸\.±w¯ÙlàT«ÕR·Û uš+†¸Ÿ5<³«¼|/8YñÔ~ùK–ÿ j+z|ˆ3ö%~ XÉø 7]!µÝnu||¬Íf£ét¥½¡ÉêžN§Ñ›2�=™e™¦Ó©Êår”‹r Þc‹+0Æ—y&Wƒa®Hb}Q†9xé÷ů¼ŒY­VÓ«W¯vzRPæ©V«…ÚúX¸מL&šÍfApz|@�q}}­ñx¬Ùle ñ)@hN@Ôjµk‰Ê‘ù„„vÞûP²z?&ÀUb *¤ÏÊg§Ói¨ïÖ!Â! è3ÃøONN¢DY¹\Ž9Ì'ðýZ­¤2±µq†²V”À“Ï0'e|oP¦@"d4)Ë2 ‡C eY¶Ów›ÒaÜ€÷Óé4zØ0fˆY|ÊýÕ¢¤PoxÂ…«„PŽAxò…+Kó*='¥òqÉã4×A= ±L�÷”‘e¿X/›A9ÓF£¡‡‡‡Pbq¦ þÉ“Føíáá¡–Ë¥^¿~­ÙlŸg,¨©ø=W©3Ø_Ì3ÄÇååeŒåööV£Ñ(:777¡œ%¡ ‰s”ߥÿ{Á•N�H�®ª”´³~(» ¨8 Ÿ:W8Ã!zIhá�¨Z­Æž!þ1?üðƒ*•Š–Ë¥®®®â™QnÑj?TŽ�ç®BògówÖŒ=‡ÍçóPb;ü¬âÞ�4þlì<æs&Ò­Ùlî¼'o!¶ù>Ä1ê4Ö‘¹ãLs"º^¯«ÝnÿФÂi”,Y²dÉ’%K–,Y²dÉ>¨yö¾ôH<’¬¶`S¾GzŸùN)�<  À¿¹7ü£ÚpXz$ ×ò¬j@ÿc�Œßã�}ÊIŠ?øtvEe�úý¾ö÷÷5�¤ô —¤�æÚ®x€¢·HÔ‚ÐðLï««+M§S …èWÄç![y>ŸëÝ»wÑåüü\Åâûþ*d± ï{Å0v@OšéÅ<l1ïyÒàÑØ Ð €FÏÔ[ççç;>Ÿ¼”>ÀZ¢Ða(�›ø¥P¨‰Ty>ÔYîÀKø˜+ˆè3BF9d" O³Ù %sÀçñ!«Õj|â�ÌuIÑÛÀÕSN@26'Pþ¯ÌÕ5ʲ,H=Ôycž™öþËui€îD,{™,qÖ‡ýƒÿt:� Ó m!N P™›ü™ò_˜ƒªy"šŸŠDÖj5µZ­4]‰àóŒñóÓÓSu:I U Ä»—ÞcN}ìX¥RQ½^ s±X Õ½wPiRS¶Òcg>1 V«íôÎòòx>7޻Ƴði]@ëqBÅÕ{SÄ;ŠH‡jµ=RNOO£$åõð�ý »’€’g¨ P¨�l@R€—”¯{ŽyqòÜKÑeYqßI7ü—r‚ÄÏz½÷t¥‡ôþœjµZj6›¿Jøàš·òû—²­¥R)È ZžøYá¥]ñc?W¹®ç\Ó{Ç@òðERqÙÕpø}‡ÇýýýN¿Ê.Rþ“êãsŸ'QàÇ Òˆ5ð²ºüžû»Ï!à?Ï�J�µ… ü¾O\…œ þz?;~�½å¾ ˜Ol�øqµ*Ïå*`�]®x"™†uòxÌ÷¤GÒ�±CBK ’éŸþéŸÔjµ´X,$)Û”Í<<<ÔÉɉ®®®´ÙlBÙäjbæÙÏ}b“'ÜÞÞ*˲(ßÉïªÙlFY:�ƒœ[s]ég3ï ïK3Öi¹\Æ}]-ų@Íf³ð1b"ëàgq„”£Ñ(üÂ-‘FÉ’%K–,Y²dÉ’%K–ìƒXdõ?Ö]¡8áYŸ·Þ‡?ˆ)5㤑¤°5oxÚp]/åápóÇ=3 ­¤¼<«6_¾ÇU|Ÿ?à=Ë“Œü~¿¤ÁjµÒd2‰òtdóz¶¬ü€Š¨l<“¥Ï/I———Q"°×ëEÊ×x¥áp¨ñxÅjµÒÛ·ou}}êÊZIŠlp@ï1påUXS@)È–òYÐÌ‹—«¢OÅp8Œus¿t‡ùr%…~’_G'iP^©T"ëÀ�Œ`ˆæ¢CR;årYÍfSóù<²¯xs` ÆÃÃ&“ÉΜ@Pà‹d¦ãKÒcoïW½Xç<9“·Ö1ÎZ­¦n·€ùd2 "q>Ÿëìì,ÊzM&“‰Q°U*• ‚ˆ‰^B’˜ yŽb ò�çdïxÉGïEĺsv@6C\í([(´‡0‡Ëå²�F¨øÚí¶êõº:�Ž^¼x±£ôóæòNäñ\®6¡¯ãr…{«^¯GÙ<ÔN¤y,Á_¸Çz½bñõë×:;;‹žE¨SšÍf¨zx~5®‹d3o®’ƒ€t‚ßÉvö£ï=IAÔxIÒÕj1‡5à÷ù]HcʃzLpŸ ÞßßG‚€¤ða/Yˆ�ù= _è…Ås×ëõ�ÞS¨�8¯�4a�%E/ª7oÞüJEÃg9ù}O`ÉÇÖ•3â‡5åÝ©Ùlî(ÙëÄI/éêC_^mÃïzr²ÈK¶:ùË5QñqM~—/�‰NR?ü}ìîîNÿüÏÿ¬f³©^¯§/¿üR{{{º¾¾•éóçÏõòåËHT ®ú{O“ö8 IDAT[ÞüÝ�±CžŸŸŸëÕ«WªÕjQÊ·V«EbÏ…ßn·ÛHjxj½%픯¤/‘«ì æß„<\.—¡`¤w–¤�øËkÃ\’¬à‰-ùŽD%K–,Y²dÉ’%K–,Y²j€L^Ê„?rÉüÍÿÑŽ9Xç€J­VÛQIHÚCÜœ ¤ñžFNøïx&|ü CÚ{1Ð3„É(l(w@ ¹Ñhh>ŸGvïåå¥Êår”©óÒ<××ך1ÀqÏt¦LÍ¥Éð¡×A¯×Óññq�oß¾U»ÝŽæá” ÛßßW·Û BäââBgggñœ­VK­VKãñ8R¨7|̬%eÆð ÖšµwðÛIE±Ífå˜XIÑOàÂÂ×Ù}Í Ó:ùžÚüë^­V£gJÊu¹xÏ/a8ŽR¿Úl6AÚ®â×�pì5ijÙlç,Êç¾ñÍóóseY¦Õj¥Ÿ~úIšÏçAâÔëõ(ñJ t_„g?C$¡¢„käj@ˆˆ+é‘õ²—“É$æ¯^¯G?<|‹X9ÊXˆQ^¢‚�8Í{„¨_Ÿ1L&“ L¼W�“Ü�3…„ö10ž8È]Mãû@"‹Ïþ¥w ÎeÖŸä/=Æx‰ß$Éð}â!qÒÈË©>u®ù¹å±ÉÕS®êågø‚+¿œËû1¿ãïMK‰�þ=�ÂG …Gué»wïôîÝ;½zõJ_ýuœ�ëõZ_}õ•¾ýö[5�P�Ò[ öä¤/÷fü$Ÿ¼}ûVó7})‡çý³$E<¼¿¿W½^�¹ä|c.<Éc2™äq?ÿÎÁþâ|�F áëù$ "|#îÒ¯Õjíøp|NÉ’%K–,Y²dÉ’%K–,Ù0Øm)…¸žáï$¿Ãö”VØÊgf;Àœ^},\ÛÁ <`ë* Œýýýè- í6÷ÏA’‘më@(ÀU±XŒ2$Ü“Þ ív[ƒÁ@ÕjU§§§ª¨,—Ëhï}x8À À‡—ƒ�Ô¡eò®¯¯õË/¿PM#@Àˆõz­ËËË™õìÙ³�r[€Ò’ &;¥‚²®æÁ|1Wsyf- \¹\ðÏ IC‰\½ã¤‘+ø¼—ËOÞéR©„úƒ¦åZúµ–V«Ud0Ïçóè§ I†²ŠÜÓAv~¸MÖ?åÚ\a¨FÁüºüoëáëÅgK¥’&“‰Þ¾}«Á` z½®Z­{CÅrxxãÈ—ƒX¥÷Ãx<Žáív;üt4ÅïïííEÿ¢Íf%Ù”¢b=$õ9ÎóÄÿçAeWà3ì ÔNå�L€ïƒƒýíßþ­^¾|߇àév»ª×ëêõzzþüyd“³?Ééç¸LÉI| °ÞÜÍf£F£¡£££ÈºGiÀ^/‹¡ÜAµä>Ïú9¨¹^¯Ø%®1G>fWt¿ž"Õðçétÿ®V«êõzêõzê÷ûzùòe”—êt:;ý˜»9£Ÿï�oõz=æ–qV5 U«Õè�±^¯õúõkm·[µZ­à Õ Y»Óé4±ÛÛÛȺ%[`ÕÁ pÏøõçp ê#(ø>ké™É•J%oíYþOžåëàš+GX+H æØ¿O?”ív` @%€«“©Œ•¤›ƒªÞËÊA1W1ÖÀ³õ}îP$ ðg÷Ò5¾>i¿äÍÉ´õz­Ñh¤‹‹ }üñÇ*—Ë®³æår9@|¾½´½CXž…{”J¥(ŸÆ³/—KµÛíØ»¥RI777:??�Ò‰ôÆpæ+O–=•�íD[þßyâü„tñRAž}Ͼ’¤f³©o¾ùFý~?5Œ¿X,ªÓéèåË—:== ÿsbc6›i0é éDIJæºR©D|£Ôb¿ß×óçÏãºø-þC飃ƒM&“%™ƒ–®z¥× ûˆëßÝÝi±Xì¼ô(€˜UQۺݮž={¦~¿¯n·«ÓÓÓh(O¬ôs€3*ßßeëF|åùP·Ñ3HzT ”J%-—KeYÄ;û×}…{{«+ ‡Ã˜;b6ñLR¨ªPC@H `õ>^¾/¹'~NùT/; iT©T"¾{¼Z,QÎõîîNƒÁ@ñœžpà„“ÇÆ1›Íb}¸7„{ýþþ~')ƒ˜Æ³æ÷)ס_dV«ÕÒÁÁA�˜ø¥—ÆãO%¦xáË 1Æ…1OĈrb:ëËÞ '£ŸwÌÄš_›ßÍ÷Bâ½Êã¾û�yüÛ}sâ'ŸtãdXžPòê1Ö÷‚ßןãÝÝ�...4�N£dg£ÑÐt:��O•³Åóïy’Ë0 ¨Hº�$i ˆ÷QÖ[ÒŽšŒž”ü›XÉ;†«=,‹ðüŒ=ÅÜä•^yÒȉ¸ÃÃCu»Ý Ý®®®vÖ5‘FÉ’%K–,Y²dÉ’%K–샙ÿaî�;˜êõØhpµÂÞÞ^4l§œ–g1çí)"0Æ3ÿ�ÉßßIÆÉáNÜ@" …l$íŒÑ³_ooo5 twwêÅbQý~_ív[üãµ\.uuu¥ããã lÀt åÖv»Õ`0ˆ ]úÜÞÞîí•JEGGG:::Òáá¡Þ¾}«r¹¬ù|®óósÝÞÞ†‚ Ð�”²D<'Ù¹dj»2€uÏ3ùy÷ eæ,ÿ9'q<“š¬`Ý(〳“|N `tùó;™^ö PÞÁCHHÌ.>úÒäîðððWYïNŒ  ™Ïå V@'ö†“ ŒßË0ºò(Oæù¼ùâ¹îîî¢I9%è�†$…¢Šñáo<kÇþb½ù™7›Gٴݾï11�ôâÅ �žžî¬É`0rɛгþùgòó©ÉØóÌ=l·Ûňû>ëÁ5„���uzz*IºººÒ÷߯‡‡u:U*={öLÏŸ?W³ÙÔÃÃæó¹f³™Æã±‹…æóy”�¬÷x†O@QBq>ŸëôôT/_¾ÜQïå‰}b% =sÍ^ä÷ð/æÚã²—¤/?CYÃyQ«ÕDæ…BA'''ÚÛÛS§ÓÑG}¤ããc5 U*u:�Ø'~ý\‚Ägìô�€‡œf =ƒ˜+ Ñ'g6›©Ó鄯@|n·[- - M§S�Çc�F£PRv“dA¼sƒH¥¨÷MbνßÏ–/C¹ÑX©Tâ¬Z­Vj4Q 2“½ |ssýïˆ=Ì q_lÇïógFÜ@ç ô8„ÿ±Ÿñ-®E¼ó3�>tæÄ€¼ %FøùCüâç�Fœ3ø•¿Ëø3¹Ú‡ïóŽ@¼`ޏ7I'üÛË•yìqåŒÇ�sù$ ®ÍY’÷Þ;xÞüŸ_·üÙ͸¸6Ï€²6¨Ð!—Iº»»ÓŸÿüg5 }ñÅúôÓO5›ÍôæÍ�F£èõå%V1÷`Nóg;1FRìÁv»ý+Â+ŸâILìiž %ó×ívcÝ8÷XJ²Ÿ·ÛíN¬ÅHŒpÒÈI0þe>﫨t›Í¦jµšÜi”,Y²dÉ’%K–,Y²dÉ>ˆ9pØã¨çÇ€€³g';“Wà8ÅÏý�¾¸äà  *ÊWÉP¦$Äson@Nò $J"za�aýÛßþV¿üò‹.//Õï÷c=SÙû*Ìf3½~ýZý~?æ�9?<<ŒÌÙF£¡/¿ü22¬ß½{§ÃÃCeY¦Éd¢ù|€‰ôL®×ë:>>ð�‘2gô@ñ^ ^öÊK_IŠ9’‰ÿ9ÿæ¿þÿNŒHÚYG$/!ã bž´bmÜ0s�²Y···zB @U«ÕXJ…¡Æ€|qµ€¤ Èrw€Õûcm·Ûÿ€pc�q‹Åb”Nr� �°öàà@µZ-@WÆ?ŸÏcŒO„ù}ã~Îõ!ÔáP„°þ|y–¾+»XH,|ÌËG²Fwww‡Ñ§§P(¨Óéèää$2¸iVÏ»êÅŸÑÉc÷‘¼2Ÿ æ—²zÄ;TžíïâM®&èt::>>Ör¹Ôùù¹¾ÿþ{½~ýZ{{{:99Q·Û�fíÃá0Ü,Ëtvvà#ûÕj5ˆwæ’ùL¹ÊJ¥D6$V±ø¾�=Ê$E)/ÈMÆî„ûÒAlïíÅœ@`@˜1wÅb1²è™_ö}áZ­–êõººÝ®NNNÔétÐÅÙ3ÌAþ|"¾®V« ¸nnnÂ�l@aƒ¿zY)È$žÓÁqÖýúúZWWWѯäââ"h'û]ÅÆ5çóyÌßr¹Œ3ÊÜŸ%^xœ$¦CÊpÆy¿)Wmò̬½Û&“I([Y3WšKx'N|ÿ¼lšŽì9W„#6›MÄÔûì³ðU_cö‹¿'p^³!7Ý?ù ª@TÅå�âÄ=/ËóŠ:æÌûcñŽH‚ ã%®ðn‡%Ò(Y²dÉ’%K–,Y²dÉ’}P#;Uz,?'=‚ŠXÒcæ3$ÄK�@ ×vp9¯ qÀR��ÅK|y6¯ƒ"ÜÀ ð�FëyÅ…g?û3z9Ø,):ÊòÔëuýÕ_ýUdÐ~õÕWzxxß{b<k:�FÙ²|æúýý½²,ÛQcÑ"¡R©¨×ëéåË—šL&:;;ÓÕÕU U<#ÀE§ÓÑ×_eÂ^½z€'er(áòðð¥ÅP«0&æÝ3ß ûKdŽ€ë€¶”<ƒÐóG¨�lü^y2Ê�tIAªíïïGÏ'®éMÌQêÔjµ(‘FF>S½^ß)€Ã\¸K�@h^åÆ=ù<¿�¿ú7›Í mf³Ù¯žß|?<Ÿï€¹yrÍÍƘ<Ã�i“ÉD�NgÈ£$š•€e¨Ì%Ïà ¼Ô“É$ïr¹¬f³©z½ßü¦×Å?¸¿?Sþù�”ÎûŽû÷ÇOY§|ƾ¹€“Ì# �?ÿùÏ*•Jzûöm”;ƒ4ɲLÓé4öæjµŠøñððþC™PæÝ�Yü‡ò”� (m�Æ� P¿\.µ··§V«¥jµ*I¡êò/Wû æq"r‰}IÄWµZ Þ‹/Ôï÷U*•Ôëõ‚Ði6›;1�õa-¤ÝÞ-^¢ _ó}Å9Ã>G‰PKéºBá}9©étªíö}ùG÷Êg²FY–)Ë2]^^ÁìJb°Ÿ›äø¯,œ3^j-Onx)JJYRÊ‘éÀXP‚ãŠÅb¨œPz¸²ŒxÈ\:AëcòRpÒnŸ�|"‚+F ÷óÇPˆ'«Õ*ˆFö%ÏŒoøû†ÿ;x'Š� &@äåU?î�NbxIRös“'ý˜ÆÉøP@I»‰NžrO_ñÈ—¿yìÊŸ)þ=O&xêüpµ–¿ëù ñÐãL¿ß×Éɉ~üñG]\\„R�ùð2ÂÜÃcìS±Üß 7›�†Ã¡¦ÓéNr Ä•'¨°7�4ö=ç=‘8W)OZ«Õ"ˆç„lF±ÍüyÌò3„ŸóÎB|'‰c¬¼ƒ›±D%K–,Y²dÉ’%K–,Y²b€ (j$E x@vÀ‘§þ F­hå™Íy2ð(O¢¸å3†àŒ€©\“R=2“Úét"›ÜAVœPã4 ° ѱÝnC™ð»ßýNß}÷�þë¿þK777Ñ_„é”òÌhˆ €<ŠÑh¤Íf£Z­p¯×S¹\Öl6ÓÅÅE”P‘}7è1Q(„þýïÀN¿ß0¤Ýn‡’ÄÁ3>'oò?cmñ ïïâÀë  ëYâ”J1¾ßÞÞª\.«Õji³ÙŽB`oï}?*ÊÏåË¢üi4Q.ÐÔIM@2QˆZH¸ü³>µØ+†²Fÿwˆ#îåJ»ÛÛ[�ŸŸëÅ‹AÀQ®¢ °�׳Þ®!#�äñ¾Q®Æ«×ë*—Ë16îY.—µÙ<6Vwå�B\ߟ͟Ïã>å1©^¯«×ë@)‘'�òD¶+u ÿã?þC•Je‡XT}óæ�nnnÔh4bл ½4(æ%¾ˆuìËZ­¦jµ~Äü¸:Ò{ÒyŸ�««+•J%©Z­îøèÿaï=ž#ɲìîZk ‘¢2++»gØ5=´±ÒhÆ7ü£¹à¢¹ q3ìfMUv©@B„Ö"â[À~7o¼T÷·©Ùø5KK "àþü)÷8çžsC`›ßg³™­Úï“PÏy²rh»Ýê·¿ý­šÍ¦æó¹‘G‹Åb�”ôjú“µ¿Ûí4™L4�N­&I>ŸW.—S>ŸW¥RÙ³JÜív¦¨ÕjJ¥RV‡f·Ûi±XX- b±¸G¨÷z=  ]\\ؘÞÝ=Ôý+•J¦æ‚¼bl Œ9ßf³1e�·pôVi9ž°óÄ$sÐížøñd2 ¬iÌEÖ÷ úØ“©ëõzÏZ’5Ñ啞Ì`üÈy~ðJ(ÞcŽ1¶´™uâ‰ÖÄýàÛâÉ\3dû‚¯Eĺ…¸ðDExÌ�€fOg­p�¡µ%û!}D�*î³´�=’öH:¿×…Éþ¸´‘Ïù¾ö×ñX{;Çñ÷!¿_0fÔ¡c<¶Û­ŠÅ¢nooõÇ?þÑ^ó5é¼RíîîÎV¿;4–ž¢æû�Wç2¶Ü›°�D©Çý…ç2^ž¥Pæ±OÔj5¥Ói[_›ÍF³ÙÌžE}âkÛ÷¯${¾)—Ë{ªhH8¯Nòã)E¤QQDEQDEQDE¿Rð;‹Y%à- &_`! øàï3’ù�Ìß…™Ä€õÔ„ñ ŸI °°Ùlö2pi+¶Fžðúðხ®®”Ëåôå—_êéÓ§Êçó{@�WC¡¶"åÊŽT*¥v»­Éd¢b±¨““Åb1«Ñhèýû÷J§Ój6›z÷î�Z^©âÁgúpñââÂ@ÞT*¥Z­¦Z­¦étªÑhdö7%ü ¨x<®J¥¢çÏŸ+›ÍÀy}}­õz­r¹l`õx<6›+ ²ÓG¡½Q2™T¡P0БÚJ€ì©Tj|ô™Ö²Ô$𠯩=øæ-º<Ø'}”¼Š`<ï‘ Ø„¤FËb±Ðn·S­V³ù�N§í3í×ÊüÜ£é«l6kê€T@Súe6›YÿÒ¡š.•JiµZ)�N+—ËéãÇ�’¤jµªÕj¥ÕjeÊšÐqM€Ø¡½š'M!tîïïuvv¦R©¤Z­fõQ|Ÿn6#h3ǨC•Âq½jâîîNý~_Ÿ>}Ò|>·:2»ÝN…BÁlÛ) Ù¯ü|ñÄ•W+�ΘŽF#IR¡P°ñ�Çã:==Õïÿ{‹E}÷Ýw:;;3Ò TÚ·WÈe~¦Ói³eBÁ>9 ôþý{³ýK&“jµZ’¤Édb@1¶|�W^©ÁµCÌx¯N§£b±¨Ýng¶c\¿q«ÕªÕ9“¤r¹¬f³ijŽé =Û›³¹d,À‹Å¢Êå²jµšŽŽŽT,�Œ­V«fZ­V-£ß ¡"0`ùîîÁ‚"žñÏd2v|T?¾]~®Ìf3#u!Ù‹…&“‰©ÌØ£F£‘ÕüáæC¹\þ Uà3êRj¯¨ð$=×ê,¼íóÚ÷ƒ'g<ÀϽ×l¬ÇÑhdkÚ×ð¡}ïþXž4ðä Áë¡zÅ“±XÌ2¿W£Hâœìƒ^ä?‡’Ö+‰ ×h«¿Ÿ†ýà•Ñ|>T…ú{)ãCâ„Wøqž°¾#cD² ä&{ýc¤‡WI1&´…ùÀgý=/¼ÿ… "¯d¡ÍÞæÎ+Œ8¿CúÑ«|¹>^óŸOvà˜Èggg’dÉ6¡E äûuøöm÷Ï”$t»]#ƒHn�,EƵÝn­¦ž?Ï¢ÛíÖˆHjžS<©;�L½Œ�"óXú¬’D ÉÜ™Ïç{–«�Sý~ßÌpîD¤QQDEQDEQDE¿J�y~ss£««+µZ-óPÇž.´_áK;`°W(HŸUAÚh/—Ë{@›þ5¾ˆc;Ú©ªxÒÇ“œo>Ÿ«P(€ã­xBK®Á[•êâç‘�Ëå ˆíõzª×ëÊårJ’íXàFÛ>%Ef~»ÝV>ŸW·ÛÕd2±:ÒŒ„Ði·Ûêt:J&“šÍf‡šÍfFfÕëu ‡CÏQƒÐo€W)ü̸2þ|`…9ðç3ŽY<Éùeê$�Ä5z5 äG¨Ž�\‚Œ¢¯#®Á×S�ع¿¿72�±e]0×¹Vì³Òé´Æãñ¡Jår9U*¥R)ÍçsÍf³¿(ú 9Åç±èó¤ª'öPX Ø¢Í5^…åç6}fáû {"™LªÛíªX,êÍ›7ªT*{jB]2z œ1’d€/€kwµZ™Õä/À0¤ãz½Þ I{-mgÑÿœ#ÌÈgO£ÝŒG¡PГ'Oôõ×_«\.›%™ô v˜ÍfV7'|sscãÀ±Ëå²êõú^½2È.Iä²—`A‰²€½„½h2™h<«ÛíªßïÛ}d·Û)ŸÏ› ÌÛ0¢ª»»»³{ó˜ë Ï èi{£?ž¿~oç’I~m{òׯw¯–!üºçHH̲‡†Vg~ Õ�!ÀîCþs3¬ìÙðùݯþù6ùkðmóŠUo]*Œ=±Mù=Ô_Sx ˆmÆÓ'\ø¿ñ}âûžk÷ýéÇÎÖï~�„¿‡Ä’oG¸ÆüôêVOyB ®'>éG®…Dˆÿlà g¯6ó÷»CóɇŸ[ÉdRƒÁ@ß~û­ž>}j{<*5IÖfÖ;÷Ö${Þ|>7åí€D?4.ž”—´7/=IIâ…Ÿ_’ì¹À+®P¹¢”�H£(¢ˆ"Š(¢ˆ"Š(¢ˆ"Š(þ]"ŸÏ›ÊÒ¨ÙlÚ—zéÔÀ~ƒ/½n(„zɸxŸÏç–µMV<™þù|^¥RÉlŠP0a!F±uÈ_ÃÁ"[+ØÀa÷æ3®½mŒ'ªà±»¹¹Ù#P¨ÜÜÜX7ïcëE½ŽÑh¤Á``} ø‡E�ôÙ¿ð0—Ë©Ýn«Õj©Ñhh»ÝªÛíšÝýyoöL‰DBårÙþ®T*I’æó¹©¨�‹ÅT©TÔjµ °èˆÇãÚl6Þ‡@,}�béþþÞ2p’ ÷Œ(JŸÍfÕï÷�|á³777ÊçóöùP1*b¼ýãŠ"ƒ9"i/:•J°�â¨Z­ZíØé2% M§S ‡CùÓé´Õˆ¢ÿ U!¦PÎ ‡C³¹A-‹Å è/‹ª×ë6Ÿ°òÃOú\ëŒ>ò¤©$˰†ÈàõC  !u °YcþBpn_›ƒ5Ïú`žc‰Æy½j‹6L IDATLËår/rΫËå²õŒ/ýÍ~�Ç­þI©TR¡P02€ÞDžÀ‘dkç‹/¾P­VÓ·ß~«ù|n¶�œ‹˜�\S¨Hð$ëv»5""…‚'H¸Núš½ òbÂ�}Éۼїž�b S‹§×ëÙØ@Ö®×kM§S ³c��Åb¶?×j55›M«­T­VU.—M�ãmÌhKª2Žö`¹Wl¡è+ V KRÈ0Ÿò «¯M·Z­l�³×O&}üøÑHú»»;#˜‹Å¢©˜×X,¢4¢�Coo(i¯–@4c̾à<Ñá¿Dп~m{5“ß+è#ÆÜ‡¿õ¤‘'`|;)B‚Êï !¹Ã:e¾û±cõv_¡Ê)üçÏë“üùý±Ã> Eô‹·<ƒ0ðÄø/Å!$$ñÿÿ¾¾î ~_8Ô6ú‚= å¶ôYQÆþ�‘ç5rS’)üœå9Ò?—y”ý”qðÄb8–‡æ:×Ûï÷õí·ßêåË—j4º½½U§Ó1ÒËJžu¹‡Só ‹»ÑhdÏP$±øç3ÂÛ%óÜ)}ž7Üר÷Êå²=Ãyò’ëfN§S;6 iEQDEQDEQDÅ¿KÜÝÝY&y2™T§ÓÑ‹/ ÄâK·ÿò @Ç{¨xÉúøl¿ß×÷߯n·«““u:SÆøº¾ >;°�µM§Ó1e@&“Ñíí­ …‚^¿~­jµºtŠù×<(HÍ ¢b±(I�Fúé§Ÿ”H$ôæÍ•J%~·Û­ƒ�ŠÅ¢¾þúkÍf3õz½½ìYþq~7 ½xñB§§§V¯„~Ç6 $ˆ5ˆ�v»­ÓÓSÍf3ÝÜܘýÔíí­Æã±ùó©V«éòòRÃáÐÀNj©øLp¯”À¦…~Æ~ @Æ“ÞvêèèH¯_¿V,Ó·ß~«÷ïßï�Å(’È †üaîP3" ÐU àt¨hñbÅbÑIVƒ(›ÍÚ|�d";˜þÔÀHpežz�žŸW«•Õ¦8‚l#Cœu€ åööV>|P»Ý6[1¯~ Õô2™4åÖb±0¥jO J ßÑÑ‘b±‡š\ÇÇǦ¸ûÍo~£««+#*<±ìÏ{{«v»­W¯^©V«éÓ§Oºººú Õ jÂr¹¬““B[­–:�Ž–Ë¥‘�>þaä-›¨{Á¼çú#CÈ3æ*ý鉿ÿù:Q�O€º^©å Ü»»;{ÍÛnBŒcC 1–Íf•J¥4�5�Œä—dïA¢T*#ÛŽŽŽ”ÉdT,U*•ŒH'©€¹‘Édl¯fžò@›uØ@² "€DcOçúØf³™­UÔ$|’‚ôúúZ———º¾¾ÖÝÝ�_X²GqMk^ ƒb›,oÿIÿ¤R)#¥Öëõž²Œyà‰ˆC�'�ýšôóÒ÷ŸW™ø÷<øíU*á{Œí É”C$ ??¦’ñ÷Ä�õ$ë•?~¾"EÂ~ ÛüKá环…î—^EųHxý÷÷÷ö\Á^Ùh4Ôl6U(tuu¥ù|®t:m„ˆ¿·°°æýsss£jµj„ª#Î…¢àœ¬{fÑw¾Fáç¹�}68kÊv»ÕÇ�õìÙ35›M#�B%ˆ_Sü£ßÈ`÷ç]¯×šL&J$ª×ëªT*ªT*v½™LF�NÇ,kµšr¹œ”ì(»ÝNårYoÞ¼Ñ?ÿó?«ÑhèßþíßöìQ Ñ÷ÉdÒÖÛÑÑ‘noo5­–�{cHBú 1C€�½È¡žd€d�X�¨d_€ða¾1ßi š^Ñ’L&�Ì_,{õ‰8/äÖKÒCí‘««+�F##pJ¥’‘†õzÝl. …‚*•ŠÕa½pŽÐzŠyâ× ýƸzkÉ�ÜÀêuëB›û…·Dôsr}»Ýªßöýû÷¶'œŸŸkµZ™z‰Ö „6RH€ÓËåÒ,§X¯¨ ¼¨ …Õ$džOdðê5Oè„dQhÓi®sÌ!H¡p¯ÿÖ߇=™å�üCÄ�'WŸù’°žtñÊ2N¿×øýÍÿ{,¼Èß{˜‡!áC»Y;�Íž|AU¹Z­öÚïÏFØo!yî¯þ�@:t \¯¿Ÿûëãæ­ÿîîîôôéS�žž*™Lšeîññ±=«���áÄ~$É·ìcž€óäm üµ"“üþŒ…P±X´¹åÇ›=�}œ{¬ï#¬áØ[xñ uö5ŸØÂzòýê_Ì/Ú€‘Ú€wwwV�> +ïˆ4Š"Š(¢ˆ"Š(¢ˆ"Š(¢ˆâW ¬z$éøøXù|Þ@¬Z­fত= EJ,Û°½Êh·{(Êþí·ß±”H$Ôívuww§b±hdà$_ò=A¦/ç¥Þv#Ãáp¯ à5 J'¯Ìóàäz½¶/ÿãñXÓéT‰DBý~ß<’ ¨¥F>ŸW«ÕÒû÷ï•L&­2Yý�FC•JÅÈT$€Údª’�Ž¢‚Õ5tž?®—/_î©·èGé�ð‡v”7¥RI÷÷÷‡*‹zùò¥ºÝ®z½ž‹…¤} &o/…í ™ÄëõZ‹ÅBÕjUoÞ¼Ñ|>W½^7Õˆ‘C ÀÊ|>×Ó§Oõúõk½|ùRZ¯×Vd›yìÁŸÅba`òÝÝ�^¿~­W¯^)�ëýû÷º¾¾Öp8´~öµniPrIÒ`0Ðõõõž¢¨^¯ïY ú:_�±Øðe2e³Y[ëõÚæÏh4ÒÅÅ…G‰DÂÖ„$+õa¼m�ô93ž¢â!�L¿†„O¾zÂu³Ùh0¨ÛíêÉ“'f{pì�‡jŒñ‡ðÄ‚ËjËåÒj]´Z-µZ-ΘO�T±XÌÈ�áp¸W»>�ëÉ“'úçþgý×ÿú_�ŒÍår‡ �FšÍfÖ'©TJÍfÓìì&“‰~øáM§Su»]ûˆoODŸ‡êÆäÙDŸ&Ð4³0—¼Â  Ò+<ñ#=€�žˆAA‹ÅŒ4c�°¦Ø·!< Qƒ�îîî¬o:�ŽZ­–2™Œ�†Z­–jµšÍT Ø_,º½½U±X´5åkB±ÇÑ&æ“ïC½í’öj1ÑÏÞ² "Í׊a=ж÷ïß+�Nk:�êíÛ·ÊçófOÅ=„}Á« |]3lSQ"Bð±Óé´YaJ2‚n2™¨×ëi0˜:ï=¯òD‘Ÿc‡#úÊ·9àýgCòä�’ÿæç°ÿÌ¡×ù=üløyßNÿ:}˜Ïç÷Qúâ9Ãûa{ý¶‹ýÓ'vøµÆs÷d¿ÿòÚcmâx‡ ß/aû}ø=ú—"÷C¿'®y�:tÓéÔöád2©gÏžéw¿û�b±˜ÍçN§£Ýn§áp¨R©´÷‘¨rÿ`WɺöªÐPE‘FQDEQDEQDEQü*€È—n²¯ù2ìM&"�Yíë´”Ëeõz=õû}½ÿ^?ýô“šÍ¦‘ï¾@ðt:5…€œ$#€ÂnooU­VMà-à �°SñY¾ö�§B Ðe¹\š=Ñl630~»Ýj4i»ÝªZ­ê»ï¾3 'ê^Ìf3ýøã�úío«““S<+—Ëi¹\J’eÎ\pþJ¥bª¯ËËKõû}e³YU*M&#3°2û§ú'ý÷ÿþßÕh4Œj6›�Fêõzz÷î�v»Ë&HªwïÞ™B¥@"‘P»ÝÖï~÷;½}ûV³Ù̮ՃÝô@@­W€ùqÁê«X,j4ÙßB¢ñ±?îíí­žãÕ>!Ï|ó?û1�çû.TÌ„ÄA¨ñcŽrÃ+Oµ3 Oöð»o[HÂ…Çñíç s.$v<)|h�zÂ(ì—Çâ—ȯðsáû~¾úëð*1oÇó„ŸúÏž=Ó—_~i÷î§ÒÃóK¥R±û(5ïHìñ}í×/k“½ÔÏ­CÏf�í±~�Ùl6šN§ÊçóFh•Ëe{^ñu—|2’'㉄FÜ' z}R Ï=Xv¢L§ÓFvRÏ�Ä#, ùçUL¬s’³ ®øÛˆ4Š"Š(¢ˆ"Š(¢ˆ"Š(¢ˆâß%Á)0?�5ŸÏ À>� '[{¹\ª^¯«T*i»Ýj2™èÝ»wz÷î�Æã±*•ŠB|q—dö@ÍfS•JE¹\N¥RÉ€ˆJ¥¢v»­áp¨f³©Ùl¦««+ív»½"Ìù|Þj Ê’ø/æÒ~M Þ¸ ‹ÎÇã±ÎÎÎì‹ÿÛ·o Øí,²êõºƒ�>}ú¤W¯^©^¯«V«YÑøjµj¥xÕ£J�Xzöì™êõº� (�Òé´)Œ‹…²Ù¬~ó›ßè_þå_ô»ßýÎÔÅbQõz]¹\N›ÍFWWWfïÈ1µÝnuzzjäM6›U§ÓÑW_}¥étª³³3ë_iPó…íýïaÍ®‹!Àj Rñ> à5}€RèÅ‹:??W6›U«Õ2‚ÈOC€L‰DB¯^½ÒóçÏ5�­N µŒ8W<ß«W"i/ ¹T*©ÓéHLÝ+@&¼ÝngÊ3”eÔœX¯×:??·Z>’T*•T.—•ÏçÕív ”ö =ÀkÍ� sŸð ªß³Ù¬‘>�»+�fÞ6Ï“ÊþüÜþ ´~¿¯““5 ³’›Ïçj·Û¦æ€ˆ­T*¦‚Ül6šÏ纺ºR&“Ño~óý·ÿößôþðþÃÞn<[{s¹œÙ�BÞa‹Å4�N­5‘ º=ØÌžÂï„'?=xËóµjÈ@ÄÅn“qDíö1ª€J2â½:’özË<»ÕjµWKå!™ú(ÀPÔ‹E#i˜_~�³Ÿ’•ÏêU!¨ÂSyxË(Þó}ä÷zŽ�•ó�:M´‰±[,º¸¸P¿ßW¿ßW¯×³:CÌ Æîþþ~o¯ôD�·ŸP8Ç0�ÛþÍœšL&FŠB³.<�䇞8 m‡T-^…rH…ä÷ Æ×úŒ±o‡Ÿï¾�þœþó!õKAxrÌÏ'¿¦‘=‡ˆ¥CëÕ“:Üÿ¹Úà?R‡ö¾°ÏþIFHùv…}wˆœòç¦/=IÂ}$•JéôôTÅbÑöxIVï‡Äž%üZ¥ä³'>!iü¼ðÊ8?·BûÎðºýõ1~ b±˜æó¹...Ì�û|6›µ½‚çÍd2i÷R½\ól6Ót:µg:öQÞ'AûJàš ²Qóìè­é ¬ãñ¸&“‰]#{·¯ˆ­2‘FQDEQDEQDEQü*±²Ùl,ðk¹\ªÙlZÆ&Ÿ+—Ëf“U(¬xïÑÑ‘Òé´úý¾®®®ìxl�ÇãÊçófå�§ûn·Óåå¥[Æ2 °R©èääDÙlVívÛ€¯pI&“ªV«´“ÅÎr®EÚ¯càmYŠÅ¢®¯¯5™LT,5™Lt~~®wïÞ�ÐívMÕ‹=(„š†Ã¡Æã±ªÕê^{É„•¹étjàA§ÓÑÓ§Outt¤B¡ ëëk0<à‚ÍÖóçÏõ_þËÑ×_­B¡ IvR'† b2W!ª !&è©ôáÃŒ¼u×�’%M¡P02Ñ×Z¡h=…¥½_¥RQ±X4ðÅÀÝÝ� …‚õíf³Ñ_|¡Z­¦l6k Õññ±µ…ìf\¯¾Éf³zöì™�#€üññ±ªÕªìžN§ Úl6V£ À:‘H˜v8ñxÜ€vˆ.@,Æ[A첸¦|>¯étªT*e 6d-@$(ª'®„¡° o<8 1ËÜôJ$2 ;:�6€ …Ðl6S«ÕÚ«af®KŸ­y‰„ …‚Ù�Ð-—K]__k0èùóçFð¬V«=%µs¤ÏÙå�:µZM÷w§ßýîwªÕj¦Tb^ìù¾‡xòû¤kŒõfÅÓ÷¨öýô9}ž€û‡lëPåö|–µá�wÞ›Íf{5ȼ¥(mÃêâ'•JY¢B¡ r¹¬J¥¢B¡`Ö™’Œ˜DõÅ^J[{ßg´Ë“öÔÝòýFßÑNúÄ_+À)Çã~BÍÚ0ŽºÀ×�Fº¼¼Ôp84k¾z½®F£aû†'ºØG½= jC¬÷Ø#¸g¤R)åóù½¾& c6›É£íôÕn·3r,œKžhñó*œS‡æÝcJ”Lj¥�|ðí9DZRÙøŸ=Ið˜êŽ`.AnðÌá÷Eæýç÷´Ð^ŽŸC…Š'è¾9ášç5Ôg¶�Gá±~)#ÓþÚqµ×ï[�½^1•Ëåôå—_ªT*©ÛíÚ:K§Óª×ë–¸�•°·_£Üå契®ÞV8´ìós&œ#‡ìTë7ÿ>s€ç±ûû{•Ëe5›Mm·[{á�¹iƒZˆör&Q„g kø,œo’MØG8¶—Ìkî7ŒÉ|>·çÎ ±ïI+""�¢ˆ"Š(¢ˆ"Š(¢ˆ"Š(¢øU‚/Ñ“ÉDüãMM€­êì–Ë¥¦Ç2 üz½®~¿¯>èýû÷Vgƒ,øb±¨jµj_Ʊ]ët:ŠÅbºººÒññ±2™ŒžŸëììL×××Z,ê÷ûfƸb‡ ޱñ¤†=H}H…¾.íM뵡°(Ül6FØÑÏ~¯öÊHo;·\.�Ì㜒l `/…ê±P(¨X,ÁL(lÕ‰™Ó̯TcÎùs{+j‹ñ:?s?aÿ¥í½¢�ùa øìëê±6›�Æã±©A?|ø ~¿ou›ßJ¥bûu:�Öd2Q<þPW�{Š·€[¯×�FšN§(K2[J¨Glè ÿ¼ ƒ¹D?zKBOÂz`úé-éÂûºÿ�ãrÌ¿!ÑâÛ*v{»Ûíê‡~P*•ÒÅÅ… Ògû�áp¨>èÇJ§Ój6›Êf³�FZ,šÍf6ñ3À¼W<ùëÄØèv»úøñ£>|ø`W‡²·7›�©fÈNÏd2zûö­ºÝ®ŠÅ¢^¾|i„I,S§Ó1+‹©X,šÂʵÃáPWWW{@T:�V«ÕÒ›7oôõ×_ëääÄÈj¯@Š ŽFäÓ?´áèèHÍfÓÔµZMÍfÓÀˆO²a­Õl6MƒºGz¬�ŽŽT*•l|v»�Í ÀI(˜ �mŽ��­vÖoívÛ,É¢¦�ÔûI§Ó* ª×뺹¹±Ú@ÅbQÏŸ?×ëׯÕjµtsscužü?i_µ�Çm�ŸŸ«^¯›ºYÃñxܬ›{½ž²Ù¬nnn¬N çb±°¾Ìd2º½½Õd2Ù«)Ézð–9€è­VË€Læ6)€"ö]iŒ¤l"‘P¿ßW­V³5ÄAFÆ6àX>Ÿ7kGˆ]TGô?D»ÝÖÓ§O5�utt¤b±¨f³iãè3ä©Ñã3èW«•.//õÇ?þÑÔsÔ­�FZ¯×Z,¦8¤ãX~_„4 ~ ô@ç5Ôz5}Æy¼*RÂgÅC\AÎz“`=ÆãqËJ÷ÊÆ %§$•Ëeu:�žžš’0“ɨ\.ïÙ¼ypÔƒç€ÁÌO®™ {ì iûäבÍf õ 7ï{õD¢ò!u¼òîîîN£ÑHïÞ½³ûÉÙÙ™Íí|>¯z½nà7dc¯×3‹¹‰ú�uÂÜâ5¯ÖªÕj{v†½^Ïêƒ,‡ ¹W™±¿jCŽxuÎ!€9鉠C„‡Ÿ»þ3´‰ûà!""|=lÏ¡6ñ9®Ó‡'5üïüÌçcˆTî >!!Tÿ„äBHàÒ®Cµ‘+iÏã¿X,š2 Õd!öv(r¹œ‹…‘œårYÏž=ÓÓ§OU«Õ´^¯ ÷5v»�âÌßÉd¢OŸ>)“ɨR©ìYsq<þ&•JYm¯,aLµè{¬âBâ¤\.[›Íf£xŸÛu‹E#?½5ä`00kIj!éJbí¥OYÛwwwZ,º¹¹±ûó�¹Ï˜{ÒÈiüïûíat(yÁ÷«-´Täï üq}R©R„„¤Eø¯PòŸ?DÈx‡¹1H›ü=Ò6´Ž;t]ÞZÏ'�øãº¦CD”'¸|Ÿ…êšCã’ʾÅ_#SÂð„ýèI[¢ÑhèË/¿Ü»ÇÅãöÁårÙ,Ôx¾“>[Ûaý–Édttt¤Édb*ö¾ðZ=Qçç¼'@ýüó’€¾o>|ø gÏž©Ñh˜-¬$år9û $Ÿ·7DýËs�ßÏØ§˜7Þ.˜½‡¿�¤’dª.”Ͼý^õto <Ÿû‘FQDEQDEQDEQü*Ž…ÖTÿø�ÿ¨N§cï}üøQïß¿·Â‹ÅB¹\N?ýôÓ_¨}®®®ì 9ÁX�.ŒÇcè ³Ù¬¦Ó©ÎÏÏõúõkår9ûÈ�ÛÛ[}óÍ7º¼¼ÔjµR»ÝÖË—/u¯ï¿ÿ^Ÿ>}Òõõµv»�¾úê+5›M}÷Ýw:99Ù3ø‡*%‘Hh8šZ;¤Z­fä v[ƒÁ@ËåR¥RI¯_¿V½^×ýýCQe¬‹ž={f¤ÏÅÅ…êõºb±˜Þ¿¯ÿøÿ£Z­–$Ј•–]^ÙPƒ*¤ÑhXý(@TT,ëõZ’ôáÃ% Õëõ½º|&‹Ym*þ†¢í¨™J¥’"�}¨"P�ÜÜÜ(—Ëé7¿ù�‘díR@;›Íšºf2™˜�YÆC„`ßçkøº&Ô�Øl6fm·ÙlLM4 Ìj ` báììLËåR''':99Q¡P0rÕ“¯eDý@bÚÇy¯¯¯uss£7oÞìÍŸ�އšN¹\î/2Á!'‰„Z­–‘¶ÔŒ¨T*ÖwdT‡Jæ }ʵxYÎŒ¥$û™óo·[�F#�F#ÝÜܨP(¨Õj¸í�8H#ÎP�Ç­^J jÒ@f2çÇã±b±åÖp8T,³LìüQ÷÷÷�LJº»»S·ÛÕùùù^ÍjµyËB¯L Ayö)¯8ôj €>^÷ä’¯9å_óåg™ÌÀI_oÄÛ#.—K#òxŸã{uJ%ö²|>oµŠ°¡+•Jfç˜ËåLÄœ^¯×šÍf¶gxKÒøé‰IºR�Ú¬H!„€®(¢P/°±edÏ¡�\ê;T°ëõZçççúá‡Ìþ 2Ö×jÂâîîîNÃáЬ9“‹…�¹žt…ÄÊår{5ýnoo5÷¬ë¼m„8á�pOù9â�boÛ牥PYñ½RÇ¿N0‡”-‡ŽÉúö)þs!AåÉÂCCxõ ÇíAYƒžtó¤{–'"|{‘m�‘`´ÅmÔ¶aßã¹%´WæyB#ìÓ¿E©†ÏCŒ^‡ì¥=ž°ä~òäÉ}úôIÃáÐÔ¡Ìý““-—K]^^êÙ³g–ô‹ÅLùu¯f³i5Ã<éâçªÿŸ}„sÑæPmÄõ<6ÿè7öNIúÃþ ““}ñÅ ¦”šÍf¦¦¼¼¼´ ››5›MÝÝÝéòòrÏ–“gö#Æ”5îI?Ù“¼3$ŠÂšzÜ;½��¯9è#"�¢ˆ"Š(¢ˆ"Š(¢ˆ"Š(¢øU‚,R,·ªÕªž={¦ããc³™:;;ÓÏ?ÿ¬ŸþÙH£““5›Mõû}U«UÝßß[}¾ô¢n!«½P(H’�Õ¯|±ç‹2_ }í êì\__k<›ª¦ßï›J І/Ú¾¨°ôÙÓPg6›i4i0Ø{}}­~¿o5X-±Ç~4™RâêêJ™LFõz]¯^½Òû÷ïÍ&‹ºý¹\N¥RÉ@|@\>CÖ?d}”ÏçÍl½^ëââÂúÓadó7�FÃ^›L&F,@èPG†1) f¹Gv}©TÒr¹4ÂÀZ’eÙ3–ëõÚ¬Ö¼ªb6›Ùç}ÍPôBF�ŸŸk4)‘HèüüÜl÷PÂQ;e m�Ç{¶GÓéÔêÄb¶jµZMý~ßêîHŸqÆ‹hžÏçFt�µ h`„=G?ùìtæDä×àëJ@¾øLnÀuæ¯Ñç�G~�L¡*‘dÄ £·3L&“ÊårV P"€kâÚ³Ù¬­Ÿõz­Á` ûû‡bå»ÝNÃáP?þø£¾ýö[ ;I¦,‡ šN§ÖçÞÂŽõèç¦'}h—4é7é³âÒ÷%ãéiXúìxO&y"Ðÿ s›yÎ^HÉ{Øqªf2[^eƸqœd2©l6«jµjuÄŠÅ¢Í'HQ_+Œk§?S©”Í Oð»Oào}m&^cn±w öâïÙ¯$ÙÈü'cŸ¹ö1}�%çp8Ôt:5e'j‰R©¤\.g6�~Ÿd>r{•mÀN”=’zz¨Qwv»]»Ï°~‰Ta�1=ytHYAx2ÆÏ1ß/á1¼:�ùâÕ0a„ç ß;¤Æ IŒCJ—Cçóíz¬¿üBYé×–WåyÐ>´ô¢/øß÷ýcÁ}‚#HþÞÏÿÐ./ìSm!!öË/ÅcŸa­Hû$ ä9û<{|>Ÿ×r¹T¯×3¥9ýW©T¬.—¿ï¡úC¡“N§Í¦Žç$ž¹<‰’s!é÷ywˆÈ$¸¿qm×××V0‹F2÷PÖAµZU<7¥ã:�Nutt$Iö,ÆyØC|Ò�¿Ï†¶u´Ÿv„„ÿü}:´;ô‘FQDEQDEQDEQü*0¶Ý>ît:zõê•§ïõzúðáƒz½žƒ�eÅ£®Y­VfmÔëõ´X,$}|½½Bp[&>Ïïõz­étjªÀ¢Íf£�?êãÇ�¦¾øî»ï´ÛíT­V� x0ìÕ±ÁˆÂíxÈÏçsó¢�í÷ûêõz–µî‹C Ìf3ýôÓOŠÅbjµZ¦>:>>V§ÓÑ÷߯‹‹ ³ß£® J%jô`ñ†½5<¨“�ÍÀ Çz½6òŒ6y€Pû0.S_B5 5h’ɤY¼1ÞbL’�F÷÷uAPMð>}ˆµX,´X,öæm÷@Š æ*j½@äôz=«µ i�­×ëFŒ2—°’úôé“YÕaçÕn·m¾ð7ôE±X´9õS° Ðh:�ñä×@­V3ÝJôcDýê¡t$eÞzBh5Ó‡À;¿VY¯!pœËåÌŠr0˜ŸW’øZXò³ã>~ühÅÊ‹…ºÝ®R©”þüç?ëþþÞT~Ož<±º7’ìøì¾_<(ÈÂ/$è¸~²Õeô{6è ¿·Ño¾Cë*À\Ÿ…ïI.o}®gÖ $ívû`“Y,Õh4trr¢z½®b±huH ¬ü9½ý¤g.—Û#1 ¸¸.TP(¶ü¾À1éCÚ ™„Š�½Ê«h¢96„‘?/`=Ê"Oö³‡£F‚8K$¦ šN§¶~¶Û‡zX¬QŒ3ì=¨•P‰qß  ‡{ ··Q |äûõÚ÷ù9èI¶{’â ¾ ž€ UIüm¸G„sõÁ® O…Ÿ ÿ$Ì'Ö'û;I!!’a‡°C}*’üýÍ[™åóy‹Å½úmÜ“ÙÂvéþþÞ,`ƒ�¾ÿþ{=yòD§§§®@a¥BýRuêh¡ºâz(jà ÐIÆ|±X4Ï|¬a (aO„½…Œ Q�l6ýüóχ …ÅÁQÇ €ì�x°Ùív–ÍÍ9±Ó�”ƒüA4� –ê œ*—ËšÍf¦ÔâÚc±˜>~ü¨Õj¥Z­¦b±¨D"¡f³i}Žzð(“Ép”ÉdŒÂÂfµZÑ)Éü¦ÆJ»Ý6ž±—dDÇ÷ÊȈ2¹Q›x’!´_ ³îCEŒôY�@_sM¬ãt:­Ùl¦·oßêË/¿ÔÉÉÉÞçw»¥Ïl63P’0 µÖj½^OÛíVÃáÐ@½x<®v»­R©dÊÚËqr!É #$é˜Éd´^¯M-Ǹ{°ÒÏO@Óo!Hï�LöÃT*eµž½R)²4a©Á‚¸ô[h£GßC°¢ ¬×ëj6›:::R¥R1Øg¯ûˆÅbFAÓ( …‚õ} É8¯,äZh£sÙW¼ò[/”E^Y (í÷¢XìA½:��ˆ‡0â3årYÍfS�FÃö&Hö}®+:æýÊg …‚ªÕªÊå²Ù–b9:-•s”¾ðû¥'(ü|óÊ>HÅ㉌Cs1<Çcj—Péá_óó"$Œü{a"@øý±Ïúç &¿¯¡ƒd­{[0îUázñçôª$^ ûË·Û“@‰DB¥RI•JEétÚHSîÉþØaߊð½C}å÷ûÉcãàÇ‚¿¡�©ªƒ�.//õâÅ ív;]^^ÚZÁŠeò`00Å3ó—ZzÓéÔVîž(|ø` "é!°b£ßïk<«ßïy°Z­¬vN¹\Ö“'O4�uyy©««+Íf3³|¢þàÁr¹Ôt:Õb±Ð›7oÔn·U©TÔjµT(”L&Õn·Õn· \ÄŠí»ï¾SµZ5[;4CYá ÀC¤Äb±½‚ëDßn·F.$ Ëd8ŠÅlØêõº‘ž4òÀ ÀX*•²¶x%*›õz­Ÿ~úÉj I2PÂࢀ™kƒ8ò€¿W%ôz=«A�X*•Ì6*‘H˜f·û¬\ �ÇFzræ¤$«eÂlµZ�ÇÌB6l·[¨“ɤ©$àæ$H2IVC U�ôTój6´Q °eë*´¹:”ÅÏ|ãÚ¤ÏuG<¡ëÏC-§üQøÃôêÕ+U«Uk?ª8Oúy»¯Pñ4ŸÏ5�Nm¾Sã k#úP’ã¤R©=€Ý‡jYó�|�Ñ\; $,߸vŽãÁg?>Hæºb±{¹J¥² zbÇ“L¡¥Â|>·þ§®Q,3"É« ©3–N§�0Êår¦dc^ò÷~Ý2'g¯B‚òD¦ßC<ÉèI öÀRÆš}�¾`=„*‘ð˜~LkÚ6ŸÏ5™L Èf¯CYÅúåämã°KL&é $·v»�)ŒZ­–]Ûb±Ð‡t~~.I¦ K§Ó{dlØ?!‘K{pø1ã÷€Cäã!òÃ÷kH\0~¼Z×ýRüÒ¹ûœÿ|øÙp�â5?\*•R±XT¿ß·õïH¬C¯õóõ±µñXøð×É^vss£~¿¯‹‹ Û_yÞd�K$6Ž$*p?ä‹=Ôä~Ƶ@IŸm–W«Õ^’ Dÿ¼ŠÈOþ~qH üA‘FQDEQDEQDEQüjAÐl6õòåKSt»]SÈd³Y«³ñäÉe2M&r‡Ã¡ýN�¬Ôîîît}}mÖeÔDäK¸ô9cýúúZù|^OžŸAãëMIŸAC5ƻݪ\.+›ÍЗÍf­ÖÕÍÍ�f³™Þ’¬¦P¡PÐÓ§Oí«v»�ºÝ®‘hcétZ�NG§§§j4rAÒ`s6�Nm®PAF¬V+M&Ýßß[mé³Ú2Ê×qAI@Nÿú:FÞfm³Ù˜*Â+@¤ÏÀ¤�8fH6ûµï÷?VŒ­¤=‹RÖ(õȼªö1²ã12ë�¶ñÐØ=6~̹ϰ³önooÕívõöí[µZ-%“I5›M³Z-•J¦àÌf³šN§ªÕj¦<ö$Él63BÖ÷—Wp…×éIÿócsôPø>cÏ»¹¹Q¯×ÓÏ?ÿ¬—/_Ú^À=Ÿ=õ8½·éå™l2™Øs ûÑíí­ÙïAy‚ÈK^eä÷ÿlÖ~ÌÃ9CD¤QQDEQDEQDE¿JhKÒ‹/ôüùs³ôBq³\.U¯×-ƒýøøXÃáPÝn׬³~!r Èjí÷û¦ò Œ$;7j†d2i*¦V«¥/^¨P(èûï¿—$={öL»ÝÎÁF£¡|>¯J¥¢f³iµE°tãK<Ùð†ÏçóFLð{*•Òr¹Ôx<–ôYDMÔFåòòRÿïÿý?µÛme2³+*‹êt:º»»³þY,šÍf:??×Û·oU©T¬�p·Û­Yxy" š~Ç“ŸD€6Ó׀ˀp(¾¢ooo5�ÌÅX>Ÿ·¶‘½Ïòs¹\V§ÓQ½^W2™´"Ó777º¼¼´š&…BA¥Rio,*•ŠþîïþNµZM···Ðm·[³‘ãúçó¹2™Œ^¼x¡/^¨^¯pO­ˆ j‹EuÖ™{ØQ­V+gì嘹\ÎúÕØÕÕ•ý=£'€èȾår©~¿oëŒ Ö8¬ÇC@s€Ï…@5óõP–|˜}Ïy˜žðŠ5Î itss£³³3 5 «K4�N÷ |sí»ÝÎ2Ó‰„º¬_ÀÞõzmvHù|Þú�ëeîûk ßf”€|€ ­VË#@æ8ô�ï>S>í=ˆþíen1†žŒ´fߨV«ªÕj¦ j6›jµZÊårÊårFÈ‹E …=Ŧ(½"‚}Ùh‡Œ„ÄâwÔ~¾†—'ó˜Óœp–ý‘5æI!Ú€š�¾fÝ0VXÊѯ^!àÇ–=Œz*ñxÜj‘ÜÝݱDRDH¦­V+#Ý!4©D‚A·Û5-êR¿�úyêÇýqäç\¨,`Ž æÎ!2Ç̬ÿPÍ’¼wHÝáß?ÔŽCÇc„Ô/aëö$Hoëçm4!�ý^çIÍC×éç¦'¤Ö2{t¥RQ¥RÙÛ_!µ™¯!aÿà¯=T˜jçßBÒ:�'¥¥ÏjGk...Œ0zòä‰îîîŒT�Ç–DmÆT*¥ÍfcÏ_(mYÛÅbQ‹ÅÂî¥áµºÖǮ闈N½ÌH¿áp¨üQ_|ñ… …‚}Î×Gãø�G^Å-ÉÔäÔ>‚Üá™+T•bI˾ë‰D感Ë^ìïµa_D¤QQDEQDEQDEÿn�=R>Ÿ×éé©)&“‰>~ü¨Ñhd c³ÙT½^W.—ÓÙÙ™úý¾Ž��í‹{˜Ïçsõû}•ËeS€æa×…Y>ŸW­VÓÝÝ�¾úê+«4�NU*•Ôn·uvv¦X,f…©=€so€+ʲf}V>Ù¢ÛíÖê2 ‡Ã½BìÔ¦!S•sR¼{÷NÿóþO}ýõת×ëW«U½zõJÙlV½^OWWW~N&½}ûVÏŸ?×é驪ժY¨l·Û½ZFœÅ�oÿz½Öh4R"‘Ðl6S£ÑPµZ5r'pé7I–][«ÕôôéS«Õtyyi×ñ—ËåÔl6µÛ=ÔpÂÎŽ±N¥Rj·Û:::R½^7²†ŒÛL&£ñx¬X,fõ°Œ±Û* fǘ¢J«×뺹¹1«<Ú�H$¬ÏPþ>£Ö¡ßµæó¹�M···šL&’” X¢|hµZj·Û¦¶ƒ( ‚è‚|ä ¯ØÀÎÆ+J<ÙçAEObxàÐ[~F…€ih…&í³­Äc OF­V+M§SÍçsµÛí= @Èn·3õU½^W«ÕR>Ÿ·º=žT#ÞÛ2¾vj®†vS�!�•ÅbÑ”e'€Îa_²Ö îy šÏ�iIƒr�Ð+Ö8}w{{käq&“Q»ÝVµZ5�Û9H$îb±h$9õ› ß¼jˆµøIÿ@Vû:JŒ1ÊRöæ=×Ç5�1Ö0cmCrùþdï‚�ò–Mžè÷¿ÜÔ³ö™7ìwãñØÆÆß‹$í›ÛíÖjµaï—Ïç�(£ÎÝ`0°s�ÐÔU£-Þ2уã¾VI sñ$�'‹=P ™xˆ€ üÞª9ˆðgúö¡ìã1BéP;¿ ¯1ü»Cç É_È:é³Ù[%²÷@*ùýÎ÷ƒÝ÷›WåúsÓGÜkÊå²J¥’–Ë¥©i=‘åçÀcýåÇø—"ì³P¡ô׎aÎûì5á|¼»{¨3X¯×uzzjÉ<³�œœØ5�Çc« ñZ(ÔjµÔl6íØ�±¯~_ð×à“ü^Ë{‡®?;¿Ö°�[,º¸¸0"˜{øf³±•ñx¬ûû{»¶pŸfÞÍf3#ÝØc¨cæ•Ä<Ó†j"¿æüs@¸F­Ãdzˆ4Š"Š(¢ˆ"Š(¢ˆ"Š(¢ˆâW‰f³©R©¤|>¯ããcÝÜÜèýû÷º¾¾ÖÅÅ…Š}ÅbѬ}îïïͧP(¨^¯[V:`,*‚Xìs­,âŠÅ¢Ò…Ïåóy)!šQFmQt*’íNCµ@hçä¿ø`zðÀi¹\ê§Ÿ~²âË´Y’©`þüç?˜ ¨rvv¦D"¡ããc‰` ‚ÊÇ{âûLl�Ô–�°(—ËÜBÌÓgñxÜÔPÝn×ê½ö†¶Z\ }�Uu†¨©0Ón·í¼{&“÷€7ÓéTÉdRÃáÐ^Æðîî΀ŸÙlf¤sоÃN†ñ¦Ž„citoö=Ô+€4§¯}Ý"ÀE”t¹\n� òÙò^�à´0³Øg(KŸ­Ï~)k=<Î!e‚«ÂÏz�ß}V´ôPË¥ÛíªÓéØäÚøŒ'âñ¸�‹¹\Îì©ã#ÉÔVÌ5¹R©d}’aôö¯Wma‘ɼcŸÀ²�¹èëNÑ¿¡r#̧v’WPyÚ�‘'!½¨§†²T*©Z­ª^¯«Ùl‘ áU,­�7›�­1ì)~ô�'½…ž'üÃ9á�ÅqBp�yÍÄñyûIæýæûÔGÌÞ Ç"™g¸ð IDAT÷é_HÈ\ö?w±¸„„¤+‹Ö'XÑaÚëõ ¦N[2™4Õ{"ýãU^~�‡`¨HñÄ‘ÿ¬'~ý^޳ÿç× '‘¡ÿÿòÕGDEEQDEQDEQDñ«ÄÑÑ‘r¹œÕÆ�Ǻºº²:2du£Ö ‹Åbª×ëªT*Š‹EËnÍd2–• ¸Šâ%ŸÏ«Z­j½^ Ëyr¹œ¤‡Ìýù|n~ùÔ© �ÇÖ6.,›¼„„Žøv»‡ ýB¡`ÅŽ¹N>ˆˆíÁ;p@.–JÄãq9—L& ¤�Ǻ¼¼ÔÝÝ�:�Žb±˜Æã±F£ÑžZ†>¤Ÿ©©™FÝ �n·+é³íZ­V³,zl¡J¥’i±€¦€)€²€b»ÝÎúÔ«—<ñ‚µux¨ýD¶6s{(@âÍf£~¿oíA�’L&­î@-à vw\[¿ß×ÍÍ�)¦h3„DàãI[½¢äööÖú9—Ë©Ñh˜‚É×ÎòªHµÝngö�ÌÚï 3o$.šî'<˜Œ!™ä>DT¾ùcó ¾ô öÁ^ñ·¿ý­­_H5¯hc-@6‹EÛ/¨£åÕt€°±ØCArHK@<ß~Ovøõˆ²ˆë¥}�‹«ÕÊh>Ï~sˆœÐôÀc6›U½^W­VÓn·³c³pM�Ø2Bd—Ëe•Ëe‹E¥R)u:u:% S±æX»Ì3H3öBæ—Ópý†d‚'iPhJ2bʆ�›ÍfoŽ`¥É€Lå¹EŸð>ÿhËÝÝ�©Ðh¯WùÄÚ¼ÝnMˆJˆdæån·3`Xz°ÓªÕj6W ë¹ÿÍçs{�9Éqüzf¾x‚ê¯Õ*ñï!+CâipˆÌ ?ïßgîz¢ï1"ç1Bƒcº–0<ð’�}><ífY¯×šL&fAÈ\`fÎÅb1K(ñ–ŠÒg‚Èï}὜½›=„ĉB¡ ““¥R){&ñ–�$sÎîáá8<¶/‡d×ccö×åÏÎYˆŽ?üá’dÏ œ“¤ ŽD>Ÿ·u±Ûí”ËåT*•öö-l‹½ÒÕÎþ<~ß÷kÃïÁ‡"\?ì¹›ÍÆžY«~¨{H’É|>·º‹<ðüÅ~9Éý�yæ“Gü=ÂÏßþ_R½ý­‘FQDEQDEQDEQü*‘Ífurr¢v»mYÖƒÁ@“ÉD¥RIÍfÓ,àÊå²*•ŠÖëµNOOurr¢z½®Õjµç‹ÅÌj*û¬("3³P(˜�ÅÒÇ㱒ɤ …‚âñ¸¦Óé0X(´ÛíÔï÷� Â :¯^áK; áb±05 ™åÉdRµZMõz]©TJÝn×ìµ+¥xÝ[ŠH`Àåå¥f³™Êå²$i<!ttt¤r¹lmd2C•Ëe- ]]]éêêÊ€/T­VËTR´§ßï(�² @C’Ù?yÒ$‹Ù¸%“IË$Îf³vN΋ýÒíí­æó¹¤ Û6€3üù|n`]±X”$m<`ƒr ’€ŠþÍçóv>H”ÞŠp±X˜½]*•Òt:5K=¯ój†t:mÀ£·—aLîïï §öÓr¹´> óê ßç]€Y(ÞØ�Ѓ¶z MÚ'�¯ˆÇã6¯±ÊÃÖÏ“~�x¾o Ÿ9ŸJ¥¬NR§ÓÑn·³Zh�µØâa}ÆÏ…BA•JEívÛÖÊ"ê|¡h¡]¬{HO”R´²>•J™òBÄg¾û¹ÉÚ„`�”n6›V»£\.›eóa·Û™ê†±eÿáZ}&?¤Ðx<¶¿ñÙù¬YæÊ-ö6úÓ«ÑP°iãÝÝ�Õ4Ëd2¦–à>C …‚Ž��µÝnuvvfj–n·kŠK¯z ûÜ×x;¤X •D~Ά„‚ÿûCäAøú!òÀÏÿpݧÃs>vŒ°ý�E¸yB2<¿?‡ϯiöHú{¹\ªÑh‘äIX/ÌgOÂslŽï %¿3¿ŠÅ¢šÍ¦nooU­VõÕW_©X,ª×ëi>ŸëääDñx\ƒÁÀˆÏ°^M8ÎüÏzõŸ É’Ðn0$Â1ôýÊë¬!|Ý$JüŸÿótzzªW¯^ÙÚƒ°§/IH¡^£$#MX§�ñ$ïð Á=$ç�óó'ì¯Çæp8¸Sw�Ä”T*e÷êÑhdJ¢Á``ûDªI’sv»‡„ˆÄPMÆyyà:þÚðã¾î#|-"�¢ˆ"Š(¢ˆ"Š(¢ˆ"Š(¢øU‚/ô7&c?ø\.g_üÉÖ�Åb* {E“±ôŠ ëªÉd¢^¯·g;æ•,€åŸG�D¥RÑ|>7uÊ%”D84 Êf³ªÕj{6X€¹étÚ ;{Rg»Ý Ö� A�Ñh¤åri`  #d–eÒçºËåR?~ÔŸþô'¶×ëõà!íw€à€øéÓ'�eç³ÙÌ>»Û=¨tz½ž]¿WWñ9D¨'úý¾�*`‡Äà…(¡�þsÔa¡N…${PeÐ~_c€cÑ÷�a|pÚ“‡Œ ¤‘}&ý¡l|²Øé”SáçÉF®Õj{äÂíí­]'ýÂa&|˜í•´ß<|Ö« ¤Ï*ŽËïìfŽqŒ0³Ýƒ™>Ûz4íÙCzÂXúL^•J%Åãq ‡Cåóy#åJ¥’‹…¦Ó©ŠÅ¢�w6›•$#™Ù§È"ÇöŒµÀ¹Â1aoÁ"R“}¨\.ëööVãñXù|ÞÚëëï°¾ \¬±]Ã2…Ž'Ͻ©R©X ¢R©d¯c‰êâ�}Ñg»{‰ëfíøÚ7‡Æ"i:�î|�7~ßbî²oДOüÎ^ÍZx¥Žsq¹\îí/�G«ÕjO•a®UI¦"eùýЃ÷œ»ºb±hû<÷ÔšÝn׿ád2±v³Wy[C¯ºc½øš6~-{ÕI {?¾ýz#˜wþ<ôÙ!’&šý~È{!1ñaå÷­CŸñ€ÿcá¯éнÓ_·Ÿ ܿ󹋅�!6ƒÜ˜³$ƒ bþ‡DçdîC|P?ïèèH'''–Óét4�Nµ^¯U.—U(ö¬Ký: ¯+$ÝÂñ=D’ðºW¥p|?xvò6l~ýó|ÄýÔ“k|æçŸÖp8T©TÚ«7˜ÉdlmÕj5õz=õz=µZ­=›Èù|nŠNöž)¼U%㮃�(z¬¯Íkæ?s¯^.—úùçŸm¬xÖ`.L§SM§S�F#I²ýФ¯:f|=aÆ5y)$õÂÿþþúQöƒ�ˆ4Š"Š(¢ˆ"Š(¢ˆ"Š(¢ˆâW‰ûû{�Çcñõ( ŠÅb¬QÀ~0H `—2KQÝÝÝi0è§Ÿ~Òxï-!rC`ŽkóYüétÚ,á<¸+I¥RI£ÑH«ÕJårÙjðHm¬eö#nÓ¦F£a j±XT»ÝV«ÕR­V3À›nXÎy =Æ �ÕÛö¡¼¢nYµZU,Û³± ×£5=ñ±X,öj y¥}€(ã ¡©OÝ’L&cjAH8î'Þ* ;Éívk§ÛíÖ˜{ÞêÎ�±¯_Ø €Øn·Fžûõ ¹‹ÅT­VíüXž ‡C]]]Ù8Ógždaîї쩞¤óÀuHÜúõå ÖCÖ]¬s&ÓÚN„*A¿w±fý’!î¥þ/ð{yH…{uH&…„ˆ?ç÷‰ÜG˜/ãñØHÃ~¿okn³ÙH’�ãâ r¿'zŒ¶`±†íôôTÍfÓÖB¡PЧOŸ$IÏž=S<7K3_“+TÔøÿýuûûÎcDaØOa?²&$ÙžÌÞ'ÉH]ŽãÕ£<ív;«Q‰í,k'›ÍšÕìññ±úý¾Æã±6›�%›ðŒÈzä ¼ß0�Ä 敟ûž” û/œc~Ž3H`úóŸÿ¬'Ož(›Íše/û„Ñd2±½–{�î!)�ùÖY Û®ù0Âg”C×Ãk�=ÇD¤QQDEQDEQDE¿JÌf3ó6›�®¯¯µZ­T­Vusscàèl63€�@zøb p‰ÝÜÕÕ•Þ¾}«�?šr‰€Í€Xšy€Ä0Ø“I2ÕP"‘°úHdñC(q¾L&#鳚à〴÷@D¬îïï-K=e.//5 $IÍfÓÀl”ºÝ®þïÿý¿zýúµêõºúý¾eéÒN r �F#m6³€!ƒ>Ÿ+‘H˜]Ÿ =ÙÁuª† !áIÀžt:½gëæÕD Žï�àÐ&Â÷ˆCYØŒ‰ÝÂŒ_ÿZ8î�MþxHò`ò!›B€&ŸY‚}¾ ¡jˆ×ù¼¤y�y Xæç s¨�¾ !Ièû×ÿþ|{{«OŸ>©^¯ëøøXÒgK)O*R“¢ãúúZ™LFõz]£ÑH÷÷÷j4zöì™V«•¢ü AA€sÖ1Ùí d†CÞ=}úT•JEñx\ÕjÕlÔ?Hn@fH&HÏX,f$ï!ð—~¥nS6›ýÿØ{“'7²ëzø`F&€ÄXs±Iv³µdI!É’Â ‡—ŽðÂ{ÿ£^zo[ËV¨GŠdq¨ó” øçòàu¢ÈöOWïFTTÈá�7“çÜs/¢(B¥RA­VC½^G³Ù´bò:ö$@”âØˆeŠ(®B$-úÒØ'MûFÿÐh4LQJAðšãè’’óùÜÚ¨)™þ�ãDâj¹\šZ’¤Ljû£cÈ¢ó\Ÿê›$³îŸ;ì �{ªt±&K³Ù´gÓp8D·ÛEÇVÏ„Çs­q_*�¬¾î%ÆÝç—îUÏ(q Ïšú%+ý\÷8Ál%““ÎsÉí›»÷•0æzeÛhIÄûÊ5›ž'™>xžªÕF£‘Õ.ä~QÅ­«œ$a¢ ªpùy&“±·$—+• –Ë%®¯¯Q«ÕP©TŒÔ¬Õjxøð!^¿~mÁÜ×úlÐqwÇLÇÔýÛ=VŸ[|_b­0­›GÂWŸ $”ˆCb‰ë`±XØ;k,ò}Ž8óù³Ù �FÍf›ÍÆRó�" C#{—Ë¥í/^‹þÀN?÷9Ç¿]âÓ7ö�ïôûL!Ç5tyy‰››Ôëuôz=ó™$!Çã±×èóšä»ÖCrçÇ�k}_½o½¿ë;w�$™'�¼yóæÍ›7oÞ¼yóæÍÛ1MqC0NS1ø%¸Åÿ”R°šµe*hº;TW`Šà�F¹£2§P(øQ«ÕðèÑ#«)qxxˆ(ŠP,-]ÛǨZ`—QEÿÃO€˜@®kI‘­À[�‹€‰étj)_R©êõºÕˆj6›xþüùNJ—Éd‚‹‹ t»]T*•�tpL5õ ÓÖiŸ4eAl¶É%pP�d Ök„° †*©Dƒç—´$2Eï™tž9nš¨$°MçÊQïi’ÀaÁݵÀ+x­é]ÒJÁiŽ…îE=ŽãËýÊùPõƒ’qn»Ý9Õ1åü)‰Æv&\Üó«Õ ×××xøð!NOOwÒj¨ îˆ_îª Óé»t–LaGÐ_ÓàiTm¡)9~ T-—ËV{d¹\Y¡}eª5ö�D4×/£ï9öT±.ÑÑÑNOOQ*•,õÇ#ŸÏãððÐ!TE¨RS?ìÖ¸âqXwƒë@ HM«¦$1UŒ\—uuÞ6›·Ê*ɘ&Ì]{ÓéÔÔŽô]LéG²HûŵÅ>Ä%QȹeBöŸ¤8ŸS¬›Ä½¶X,0ŸÏMÑEð—ÏŠétŠÁ``i¶8|ÖèXsÜ\eŠî1ÝךêOý…ú8%�\Å…ú÷3Ý¿¼–>JR¨ït}[qÁs’¾Óþ¹ê' ×ïè3Áõñ®¹ÏY’“¼?ç–óÏtk¼'‰H*Ì\_é`ìÀcªÕª)é#â8¶ZŒ$K¥jµ²Ù¬¥3ŒãØÖºT cçΡŽa’¹cÅ=§õ�8.Ü3l/ûK_�N§Ñjµ,u­¦vd¶Ñh„7oÞ »Ó‡Îçsœžž¢Õja½^£ÙlZj¾Õj…r¹lA3ƒÁÃáÐi%çÙvî{}/Ñu»o \c¨ÒäZáú¸¾¾ÆÅÅ*• :�â8¶` }ÿ£¯Qò×%fõž.i¤?:Çî3ôÇ�§÷™'�¼yóæÍ›7oÞ¼yóæÍÛ1‘°S#†Q©¬±±Ýn @U0ŒQèÀÛší4M’‚Ýú|‚Ǽ>Ã0´œô½^ψ£�?þår«Õ ­VË€E¦‘#HA`RA,Fºd$àL•T±X4À‘}sÓ$)@ ‘Õ\úý>^¾|‰ËËËeÄññ1ŽŽŽ0™L  aú“Ùl†§OŸø8�N-RWÁU%Tðx¦“!P(¬Ö�[‡#)mœ‚\4—X~˜v…íRÀNÉ|tI H\) dÙTò»ûþ�t-ÌÜl\rS¹ý%(O ÑuÝqѾkĺÐ „º  Î¯ë¼ÚV7º[ç7‰$u‰8-ÛíÖ"µYëAUšþŠ>f¹\šO¡¸[ˬQÂõJð˜µ8Ø.*Ý8$dTaÀê—b0ì¤kÔ~)©ÀÚËÔ�$S6›�¥–+•JF�ŸŸãüüÜÒÍ•Ëe)S­V-í}LJ„˜ œ+™Ã±ÖT“ª&¢uëm�l'HÊH|AªTÒu¬„²«Ü!)ÇñŽïZ.—–š“çrŽè“¹.”|VE‰%>3tÍq�“X"À;�NwÒÜqܘjŒ$Ô|>G¯×Ãt:E¯×C·Ûµô‘šÖ‘s¤„"Û ûK÷¼KÐì{Fh*Ã$âå]þN÷Ÿúã$¢Xï#�Õ÷¸kÐm?¯§÷Ôk»~Ü]Ïîs„Ç+AçöÇõ‘TÆ0Ø‚„ˆ’ògMqçî+ànï1M™¾ëp,¨b›N§– 1ŸÏãìì ab<c8šÊ—Äׂ;—l›;—ïcºÎ¸NUqĽîú·(ŠðÑG¡P( ŽcSñ}�i‡Ÿ>}ŠÏ>û ÛíÖÈ×Ñh„Ùlf)5W«•‘ê$«IîM&K÷ÉùÔ4›úœqת¾Û¼ëyìŽ�®9>G`8âââÅbÑÚÅw#úu>O´=ôMîÞÒý¬Á4º_Ü}öcúò¾æI#oÞ¼yóæÍ›7oÞ¼yóöAŒ �I4Iz4¥2FJh`% Cp3•J�C2#“ÉX½“t:�££#8©@¨Õj¦\b.ýƒƒoÂ04BŠí&x¢@•ÖØ!³\.�ªa¢\.£\.[*;Ù/ÞCm³ÙXz½Ñhd÷Îf³h4¦D8;;÷ß~k ‡l6‹0 _ý56› Ž�� Ôq #‚œŽ%y'¼w*•ÚšÙ~^SS¹ÑÑ R*™£ « ŒÑÈ|à‡@#M�$‘PTÀMÁá÷”öEú&�z.‘BÓ¨y7r^�%xFpÊ^ÕÞH)ˆšüꜸ@¥F¶'µ“Ÿ»×Oô\pÀŽjf:�b8"‚�´t…BaG1Èg­VËjé° ªÕ*òùéðð§§§¨×ëˆãØ"ì¹gX{•Ìår‚ÀÆ«\.°ÌT˜¥R A Š"œ��áôôÔÎ#IB¿6��x¦‚÷&™¤Š Î1ûÅñ ‰Å´où|ÞÒÁq¬Hº�§ÿR@U•iJ˜è½IþPÑH5SÏ¥Ói�¹n¦ÓéYÏ~ cUíœ×õGߤóÍuMP\‰¦§£ú„ô·{½Þ¼ycÊ×8ޱ^¯M™ªÊöG•³]²C}\¿§d‘«ÈtÏÝ6»ß'¹IŒÞ+©­ú¹{Lѯ߹DPÒ5\Ä1àúp¯Ï5AS�ÇQí¦i:ÕÏr=k0‹¶…Á $Z6›»úVÛíöu}6›;Õ0UŠ'''˜Ïçèt:�Çö\U¢ã»oݹVS?íúk}®óžüœˆ¶€©-?ûì3d³YS?÷û}¬×k„aˆÉd‚ËËKüñ�Äùù9R©”©º˜r2™X;˜î’÷ã8®V+ŒÇcäóy´Z-«y¦jQõm|'KZ7î¸Ï/5® \ູ¼¼A°³µþèIÆï#û’Ö]Òœ&Íã_ÈiÄ9#·I@øUÅ�‚,¬ÝìF+o·Û¥ &¦kj4;ÅÉ ðhzV'„ 3�‚,\îj.ø­ÿ±gZ%bJ~är9T«U´Z-Kᤩ»¨qm»½‹p/ ÃOžŸ©EÒ'´Z-›gÖãO¹\6eB¹\F³ÙD½^7T×W*•2Ò„{^ÁF7U–’J")Á«¤ÁM¯ (�Pà­‚4Š¢u}E†;¤É(U±]{UˆòÛív§¦ˆ»ŸT‘ª‘ù.iÄö¥Rwõ¤HX¹µPØVª¨-•JX¯×èv»˜Íf¸¼¼D§Ó1œã¡ÊW÷ÚºgßÀv îM^Ë]I×q÷›K »þxŸ¯VbË%3’î$òȽ®{Þ>_âö1©o|æéç$™ÎRSøqýsߪ’HŸñ$I¹•´#IR‰{�¤(9ˆÂàúŒW¯^!›Íb>Ÿc0˜ÿÐzû9`·.Ö»ˆw>Ý ;�1¬åHå'>årgggxüø1R©ÔNjP>?Hüÿå/±=Ì{R‰ÔëõÌ¿?þ�FÃ|¼®íL&ƒf³iÏ%_“È=¶_ë¨í{î7M§k!—Ëa4a³ÙàüüÜÚÌë�¸')¦i.9ŸîœòÚÚŸ¤öÞ÷þqß³þ}Ì“FÞ¼yóæÍ›7oÞ¼yóæíƒ˜¦!Ǻ…­5X]‹´”áw1N@ CœžžâððÐÈšr¹léå,«ÚÈUP"XCÁ#ž£ ¹‚®ù|Þ€VMµG`ª\.[J+Öï £„� ,%R­V3Rl»Ýb0àææ‡ÃÓéår¥RÉÒ$8Y,�FVì›Dð6Jš ûFÀ„ r±X4ÒÈ�¬vÓÅ4~E®æs æ¹ ¢Fç'�¢<ø!ÙèÞÏOï#w~  éþ�DL)Éâ’FjJQÁÆT� Zº`1ïÉ9Lsù=KÙF ZS©¢DûîFëk›ÕöØJš*@Kw4áòò?ùÉOŒ R5\¡P00ŽÄ~’²$9˜ÏÑv^‡DÛÆ±e;Iˆ´Z-<|øGGGØn·FFe2T*Sá¤ÓiS 1¥f†8<<´ëW*•�t›T:ÑW0õ‰;‚ަ¹&’ö‰ÎŸ’Cô·ª´q× ýÇI•‹$Ð8“ÉÄÔA¼ç5�N[Í8­C@œ*Fú çu?ðX]K.�¢ëGI3‚Å<Ž?\×L«ÇsT©Ä±&h®é¶^½z…ù|ŽáphÏ9¶™ 1Û«5˜Ø¶ÓUo$ù ýLý¹«âÒgÈ>"ÉݯJ¹ä¾~–Dê¨OvÛ�Ôö}~@â³aŸ_vÉ&÷~I¾Ù}nhÀ ý€úá$2ŽóDò‘) •Q¥óf³±‡ÜƒºŸS©”ù¤ËËKS ôû}Äq¼£V|ŸgÒû’Fjê߸Õ/?xð¥RÉÞ…‹â8FÇ( ¨ÕjhµZH¥R¶G®¯¯-ý^¹\F·ÛÅÍÍ�Õ(¢¿ ‚ëõ�N•J©T /žšÃÓ IDAT_¾D¡P@±X´¶q_A€Z­†Åb�gÏž™ß$ù«J<îõwú½úOw|÷í}ŸšÍfÈdîêÕQ­Ét‡T2(JŸWº®Ü½à’FûÞuþÚæI#oÞ¼yóæÍ›7oÞ¼yóöAŒu‚À,!xzpp€J¥bÀk;õ~HA`‘Çã1:�ŠÅ"¢(B¹\pG¬4 0˜F‰ÄÓH„PÀŽ©¥ÆÐ(Uà-À’åKЈ Síwª¦Ùl†b±ˆããc¼|ùÒÚ¥mI"޲Ù,Z­jµšÍ&*• ž>}Š/^X”{»ÝÆ|>7%C³Ù4ði:�ZÄ:�Æl6³þ0 KC�u>Ÿ£R©˜ÂIk¶hAha H긬ÑH{LˆÑó�šI‘ÖI`«‚Çz?–Õ’È}ëgïÜ$Eú9LJê�6ÖcØwÀ5Ú�ã§ ±‚]ªÑöð37:ßKýž×Hz0uïãš¶G3îÓápˆtú.u$ÁFàn­æóy «'A¥QE¶÷T}CbÈ­�Ä”Q$—¨t»\.‡f³‰V«…0 Ñét pV5 É’r¹Œ(ŠP­V†! …‚ 0ÒFÿ­i˜øÌñ ïìõzÕÞét t�F6.œoú$‚ä+u8gôyÜûš>MÇ^×É–ÛÛ[ôû}»Õ¢$ùæó¹¶ŸÏçV¯„ôjµ2e�îQ׺d�Û~~ƽ¤cªcCàŸ5”Ðåy$·T¡:�NqssƒëëkÜÜÜì¾\;lûH…’iêŸ\eû¦$…®KÝc®êU÷ í>©ã§écüÀ_+É~ºà|i“ä;yL’OH ÈPrPU–|¹æ’TJŒ»J5C%‰Ö›qÉm�λ*3ØÞÖú6$[õ~Lk™J¥L-Ìô†JíëŸK~ÜGí{V¹Ï;ŸÏQ(ðÿðX.—øŸÿùŸ�júlâ» ûIŸÆT£0™L0Ñh4E‘¥žÏçèv»–>t2™ì¤ÏåþY,‚õzËå¥RÉö+U‹ÜgJë;Šú<íCÒ:Öwú:>#xÇTë ÒwÄqŒñxŒÙlf$¹+(‘ï’VºÎ~, øÿjž4òæÍ›7oÞ¼yóæÍ›7oĆáÕÈà„Óé»âÉÇÇÇ8??GE®`¡€`9ÖÁ ĈT-t¯Q¥üO:É'Fk$¸‚Ô$�¸*˜àª-Ô%hÁc2°ÎÁØB¡€ÃÃCT*‹ÊÕ44.¨ÀûA`56†Ã!þ÷ÿßÿ=úý>&“ 6›�©‘šÍ&Â0D†¸¸¸Àt:5eÆvû¶Vk31J—@*É£ÙlfäkpNÄhV¢BÇM‰†$pÑýNÓêç.Y¤Qî%�£úÝ}߻ר÷oöá¾kð˜û®£€¯«4R`�)�1î#½ŽKlòº–”¤ã±ªVpëÞh;\pÜÚôX%V•¼o]pŒŸ­V+ôû}kIž»Z­0 °ÝnQ«ÕÀS܇nMT‘l6DQ„v»m~‚>@UÜc$·�;e$IœV«e ÃB¡€J¥‚(ŠŒw¯»ÝnÍç)Ð Àü!I\ú)¦Z.—V÷€Õfcÿé'yíår¹|Rå³›Kår9;–í�ÇøÒ§Q-É¢T-—Kt»]t»]ŒF#KC§D„KÈhzU}ޏ¤È>¥‘þÖ1RrÝõ¡\Wº¯TaᎡ«ÒRBXÿ­ä‹’FºÇ“ö¯îs×oÜw~’))’�4vú7÷,°K¬©2ŽÏ?—s×%}¶[Ç�D ÓhFQdû~2™˜*�éwƒ�©xTáÉyÑôkIãêöQÇú}Lß8&Tâw¿ûÚí6ž>}jÇsÝ5Çw(M‰©$ê×_�J¥‚F£�8Ží]l8ZÍ'Ö¯cí9úðívk)<×ë5ªÕªÕ„Ò÷ W¥è@¼¦~þ®w]'¾›e2wõäz½žù¾ûñ}•ëƒdJsß³õ]ï-ó¤‘7oÞ¼yóæÍ›7oÞ¼yû 6±Z­¬î �6¦mªÕj¨×ëù®u;aA2'•º«ãÑl6��a+ °QE㎪°P�MkñhN|Fkê.^GÉ*Öëµ¥ŸÛnïê$0ÂÿààGGGÖf« ûÁ¶ßÞÞâÕ«Wxñâjµž>}Š«««€¹R©àèèggg6^;?¦d"(F€ƒõDœ‹E3ŠÅ"&“‰õ•`‡‚Ùœ/ÍýO0•Ä�U«@Ÿ«*ÒyÒñÐÏÜ9BH¯‘r&I–DrhŸ’Ž×ûëg¯¤4D &xr‰ ×øe;yAQ¶�ó¥À çQU úo¶Ï�7m¿‚ÛîØiû '¡’ÉdÐív-Õ‘»GY¿h0ì¤{$x9ŸÏ-jŸÉî›L&ƒ(Š,]’¦Ëî“T6ÑWår9T*T«U4›M¬×k‘>‰?J’+aäî]cïKþ½¯½ëÝÆ“FÞ¼yóæÍ›7oÞ¼yóæíƒ��år‰\.‡étº¨»©o b�þ§œ j.—ÃÑÑÚí¶�†.€®‘®šJÍ�`w1þ‡Ÿ×ÐÔ+üŒ¸*?º- ´Z-l·[L&ËËÏèü0 Q¯×ñøñcS hñä8Žw@F¶k4á›o¾ÁÁÁÎÏÏ1›Í�)LõR¯×qrr‚t:�n·ké²Hp<ø›¼³Ù q£Z­Zm­VÃl63ÐUk§LqÕ15y}ªBÀºJ%�\@ZÜhü$`Ô%"\’IÁF÷Ç`߇4Rs�<ÞW¿WK"Uö™öIIà-€ªë:‰�ÓýáÞ[ûÍu¼Ùl,µ˜Î?�QŽ=.(™ôyRußjݦë÷û¦ÌSe[¡P@½^G§ÓÁõõ5¶Û­¥;>>6 —@(S‘‘œËçó(—ËÈår¨×ë–“©Ì€»¨û8Ž-…&k­•J%A€R©dãøÉ'Ÿ ŸÏ›z€@áx<þYJ¢ˆFàt½^Û½¹�F²ÿ$�‹…�÷çÉ% IìPõI?Cu!Ç•êNªˆ’RvRÀz"‹ÅÂêÍqüX!xõáAì¬;’Ôì“Þ‡û\ý·ú*"¨ ÒõEb¸K]ª~¨ßïãêêÊ~¼o¦×Ûn·¦æd´V 7Þ‡Ï-�;^Ÿç(!áú×\R„×çu\rP ¥$0Ü% Ø}þºéÛÜyPÛ·§]•Kiø[}�ú Uq¹@¿ª>öù}þi�ן}ú¢ëMçAŸ)ºFI>q<©4âq Y,ˆ¢ëõ£ÑÃáçççøòË/Ñív-àÅ}gѾ$G?Ö¸n”¸€Ï?ÿÿø�ÿhûêÑ£Gxö왽Oi û«A 7îÃ8ŽñâÅ ôûýÕ7kºñœB¡€ñxŒtú®NÚz½F†¨ÕjX­VV÷�ïVJ±=\×\JÐ$½O¸ãÁ9N§Ó;ê±étjë“*)îAÖ6¢OqŸÓúÜqßGu¿%½?$Íý}ö>ïûÌ“FÞ¼yóæÍ›7oÞ¼yóæíƒóÙ+ º^¯ñâÅ œŸŸïü§Yÿ#Ìÿì3jžÿ�/—˘Ïçxùò%Úí¶¥Ò”tª„P J•,ÎN@"  v#Ü ¢“âoT’J¥0�Ðh4P«ÕpssƒT*…V«…O?ýÕjOž<Át:Åþðü÷ÿ7...Œb¡iF¸7›M¼yóÅb'''XÄ%ØE–©q*•Šî&øDGÏ�ãµZÍRé-—KA€ívk©d¶Û­¥µSÅ�*Còù¼ÍÿMµHE¶X4š@+£��Í뱎�8‚´\+œ#ö/‰ôqÁQ—4r Gö-  Ù¼(àšËål=¸¥‚ZT‘„ahãæFlk„òv»Åp8´9ì>…BÁ”AØ5䓌Q€ž š*éØ?îæ¸~HÚh­îw†üŽó•ÉdP.—�°Ðkëõ•Jň"úX†{¶V«Ù>Éçó6ãñØÀ¹(Šl‹…E¥A€b±¸£`Œ¢>ÄóçÏw3œ¯0 Ç1êõ:¾üòKœžž¢Z­î܃*¤L&ƒJ¥bÊ'Ž�Uö‡d×U9‹ÅÂRÖm·[#„I*³ÖX6›µ”NºnoowR^òœÅb±CÖsÍ3u%ÓgRQ©Tl½ðøÕje JÎ .¶“)&©ê")Å~ê>#¡Í5¬6ÇŽ $ú´Édb`,UcLÛÉtzJf’dá=F£ƒ�‘bÃáÐêAÑ'<ç1š:”×ÒT¤$œ\Ò™ÏöŸ×àg.)î’,\Þ¹‡9®ª ¤à Èà5”TL" ´ýôì'÷?çܺ“ü(﫤˜ëŸé_’ˆn>Ë\ò]ŸÕ.i­çºó¼M‡Ê¿µ=î3�c ¼­/¦Áz=>3ÙÏÙlfêµT*…R©d5Œ¸®¸/™Š�Á#½^o']ç�mqŸ=ºÎtNôyI¯éz‹ÅâR:Ró›ßü¿ûÝï¬æÐf³1âUÓcòÙÑn·Q«Õ�Ëå0 Ìÿpî¹Î˜ÚQŸ‰…B6—­VkÇ_‹E#èùwÇFàd³YŒÇc«!¦˜ú w-$‘Šº¶ØvU{ò>¿8?Λ»Ÿ“o—lÔµ«v_{÷­‡ÿËw4OyóæÍ›7oÞ¼yóæÍ›·b�F³Ù “ÉÄ¢kooo < ¸@À’ÀIRd/AÃ8Žquueé@XÔª¦Q€O�Éœãß´xÒ:8y_‚ŠJR1•'Ö4Éd2h6›¦æY.—¸ººÂ_þò—€ÿ ˆ·Z-, SNØé ÛM`M£\³Ù¬]S`«r Àˆ(‚jšFPûË(`6ŒF€jµºÓNÎ+ÓÓVÂ� 7:JÀ° .CSÒýì}@Ê}æF×ó³w�>C2]�×ퟒs\ƒª0Ðûº`”^Ë%¬è¹ûÍ�`Wõ F‚|:/\W±ŸN§-E[.—C«Õ²´_ƒÁÀ®¿Z­Ðh4ppp`„ÁÕÉd²ä1}"Ûʺ;ZhžæÃ0Ü!PÂ0D¦x¡jÊå2F£‘­KöƒS¹\Æéé)P*•P­VM†¡�É#*ùtž .RÝB¿¢Ó¹Æù]¹\€�´i$TͧóÃñŸL&FÎü縩rI÷ަ+»½½EÇö›à)}I ~Îë³íI„¼ ˆÓ¿ò37�“>ØUj­×kL§SDQdà>ï±Ù¼­6›Í0�vüæx<Æp8D¡P0@Ÿ>Œ{…û�ýḨºD÷´«¨t•Rì¿w}„1UÕ$Ý.9ã1î½Ô'ê<¹¾Q‰%àÜ6$ÝÃ%s\R,ɇ*ˆ®×wÉ(—,rŸú£m£éñÚú3Ž£K>òù¥sáfª¬¥Ò�þ“ûŸd ÷4}$ë³éóØ�7×Ü>ªÏ× %dÝ —Ùl†0 ñäÉüþ÷¿ÇÇ�,QR�cAÍ÷:’®ý~ß®M’Œí™Ífèv»h·ÛFz25(ÛBÂ�„P­VC±X4Ÿ>�NÑívÑëõl|ø£ëþ¾1JZ›:¾ºÏ¹ô݈ó¦5Æ\Õµ»ßÝùK"pÞEí›{·ÏIŸí׈5 ôû}+†Î4Kóùý~ý~ÕjÕHUgØ(­½\.�„¢jB£ƒU•¢@n˜nH£â©´ !ÄH\¶ƒ 4Û��<. C›»Ùl0�Q¯×‘N§1� ”¥ÂGÓL)áEI'­«B b6›Y­*t6›ÍN�w�¨b Ú‡@ÇŽ p±X4 FÓô¥R)L”xÒT{¼v±X´ÏªÕ*V«Æã1€·µ“ØæÅb�jµj€p¡PÀh4²qå=™êx nNŠ6ßÈ&E÷º¤Ó> e_Ä®^SAsöW&Ž«¦6$ÀqU`K+�C’uÇ ði{´­nô?Û ÷H" tl¹H®(a¨ë3ŸÏ[„øz}WgèààÓé ¼'0Y¯×qzzj$× ÷IXþÍýBâ‡ãÂ=†!­N ÓË1r€í©ù|n{ŒmçA`Š’GŒ¼wëÔä%IMŠãO‚ƒD [Î%Sã±ÞÉÞ{2™ìD¹«�÷N§ïR;±† É­Édb>/•JY §ívkµá¸÷ƒ�ùßN§cà¶2Z'ˆkÈ\Õo(ÐObF‰Q%1ØoŽÇI‰îù|¾S#‰Ï ®/Ý[$ éoIºO§S#ë\R+‰ØPPÞt•Ür•4Α«Tp}J±F¿¼%ÒÙç•ÔwÛ©¿µÍ¼Ÿžã’,üíúIúà$€<‰„vۦ߻àø>"žë,)­©Žµ¦kLºwP¯çkß¹æ¹Îø,TN¯Í` Uúºd¿ËgÀz½6Yç2‰xH"ƨî£/ã}©æ{‡ª:×ë5ÎÎÎðÏÿüϨV«Fb-—K 4! Qa6›¡×ëÙgqãúúÚö/Õ¡ô···¸¼¼Ä7ß|ƒ0 M-ªDa¨×ëö¼¨T*hÔétpuu…««+t»]{osŸåúÜâüñÙéšJ:ªºU‰nOÓý¿ïù¯¾ i�%=÷Ù»¾×ãöLïsMOyóæÍ›7oÞ¼yóæÍ›·bZû„‘ø³Ù ý~þóŸQ*•P¯×Ñh4 (%À iߘ6…ªžù|ŽÑh„Ñhd鉲ހ�è^ªØi4¿O xÏ8Ž-úŸŠ¢R©d`7SGåóyDQd)£ªÕ*2™Œ¥Qaß™víòò/^¼@·ÛÅ·ß~‹ëëk‹Ö§B‡i´ªìdÔ/?gŠ›Ñhdý�ÇH¥îRã°î ¯»X,0�ì\UuD'p¯  ‰!‚²ªr èE`3›Íb8âðð}ô...P¯×ñùçŸã›o¾A¯×CÇèt:–æŠÁxMª¾`:B]v€ ¨!É`¤Tp‡ßñšûl«`’¦˜#ˆÆ¿ÙUV¨šH‰H½‡ªHHp’ÔzJœðžq®cÄv)PÍ=Ë=È:>ÜÏ\<§X,¢X,Z¢J¥‚åriÄ)�É ppp€~¿�ÕjeÑ⼯›&�D U!\'Q!t:L&¤Ói"Š"#Ì¢(BEFz0í[£Ñ°=Q.—­oZ3É�ç vj�$©¬ôÇõ:�Nͯ‘€ŽãØü ÷}µZ5’M×.ÉvÎ%�\%ëH–SÙU.—�X/ ÃÓétgm(ÃTYóù½^ìß$ü¹Æ¸ …‚í!MwÈ”rüÛݯ웦ºÔÏ“È `WÁÁös-A`þ ºÝ. …Z­¦Ó)Æã±¥ÎšL&FªS­Ê¹Ügû—pÖÏ\%é<—r÷¢êô­œc>Ï8Wz®ªeöX:¶.aìöÇõ•nûõZ.©‘4ŽIÇ(P¯Ÿ¹J(%q¸®Ô¿i_\²@Ç?éGÇ#IJ¿¨JG¸mvU=l;Év×ç’¥BG•�I–4†IÄ„¦©#‘˵Ãý�ËåðäÉüâ¿Àå奥Meûòù<êõº)‹‚ Àt:E»ÝÆåå%2™ z½^¿~mÄ6ý}ìv»Åëׯñÿñ8==5ÿÐh4ÀžL¿;™LÐï÷ÑëõðüùsÛÃÃáóùÜ”G$‚5æ¾ç·Ò$•Ië$‰hÕë©úÌ%N“ÎIšGw.uï3—¼zŸã÷™'�¼yóæÍ›7oÞ¼yóæÍÛ1M§¥5qÖë5^½z…Z­†'Ož ÙlZdªåMð…à¢;&€Èˆz-$OÐx›Þ‹ÀBRš*´öQÇÖÇšBìÔ aM*hmDZý{»Ýâââ/_¾D¿ßG·ÛÅt:Ý©ëQ,Ñh4�ÉdŒÀ"1CòŒýgZ%0À]Ú¥ívk©µ¶Û­©BXs� 2ÛDZ¥Ââ¸iÝ" »J&UÅbÑÒ�‹E|þùç¦jùüóÏ1›Í0�1�p}}mc@#ȵÙlLBu–ãšKÑö�ºû®ó>¦÷ázR–ÖRBRÓ<øæ¼%�ªZKh»½S�PéÆ~q_)ÀɹeEŽ?£äy-Þ“d÷ϰmN…m£ºh½^£\.£\.ïD»ÓE¾Ýn�È$ ™N§1�NÑëõl®øã^$x™Édðõ×_c<# C<~üØjê0¥\³ÙD±XD§Ó±º_µZÍ€S’LTrÜ•Œ º€ùúŽ‹q.‘@E } ´Õje**›Â04’MAzîy“œGÎ××?WÂ� +;dÃt:Ål6ÃvûVµ¨iCW«•,cyO%a©jàØÒØNr]¿ÂuêFûo‰þ¸i¨ø9Ï'¹E?ÁãhÀ>òyAÒ“cǹ¹O%¤{ßUî%YÉâC®REUz—ÜR"G¯Íï”0vÛ®÷qûáöý>ЛßëïûλÏïºD¼‚ûî˜êœ¹D€Þë] ~R_õ\½6³Z*•²`ޤqÝGFé¸kêMMuÈïu<’Ì+úlªUÙLŤÖ0* øû¿ÿ{üö·¿Åb±0§¦¦ËdîjµQí˜Ïçíþí·ßb0X} Õt|gH§Óè÷û¸ººÂ§Ÿ~jï-···öt{{‹óósl·[ÜÜÜàùóçxóæ :�Ž��í‹„6ý±Ž[’Î]sœw¿$Í�»Nu.ô½hßúJš¯¤w”÷5mçÿõÜ}æI#oÞ¼yóæÍ›7oÞ¼yóöAŒQñçD2MÛ«W¯pqq�O>ùÄÒmi$<�x-TU¨€ÝC�ÕÔQP�!HC0w»ÝZô<#ðƒ @†F¨°84S]_­Vh·Û¦ö!QÄ(þáph`äl6ÃÍÍ †Ã¡õYɪL&ƒR©„(а^¯-Ç€£Œþ¿½½Åh42ž\†–â…ã@Å•x=T Êñþ¡ “Œ* (•JH§Ó¨V«8991E.—ÃgŸ}†N§ƒçÏŸãç?ÿ9Â04ï›o¾ÁW_}eà¾ÖQõï¯5O\ Nû¨QëzŽ ¶¼ z—é±JH*¡Àû¸Ä$ FÀT°�Ê SA V« Ï9R5�|ÖïaJ¥l6kÄ'E—Ü[Üš†Žó­{�çó‚©$`ØGîy’MÅbÑú¤„ Ó²ÞU4T2…aµZÅíí­)�¨`ãšf}´z½Žb±ˆZ­†8Ž-mSMFQd <ÓB‘Àá\±oÜ·ãñ³ÙÌÖ–’„.`HB—D†Ö`5�Ø^¦½ÓzlºI°ñ‡÷៷ô ìg¹\6ß½Ýn�”þî»ïpuu…T*e©ƒÝ”œL¡K’üÑ£GX.— ‚/_¾Ä`00®X,b0àåË—¸¾¾Æv»Å“'OŒL¢Bz_°…»÷ø9÷‰uMaç’1znRÐ ×Ba”dIïÒÞç~ž4òæÍ›7oÞ¼yóæÍ›7oÄ4 �¦w"ÀÑï÷ñí·ßâ׿þ5ÎÎÎL£ ”ª‹I’Ëå†!†Ãáɤ»JÐx=~¦Ï ª"¸^,Ñl6 à©Õj;dØ|>Çõõ5ž?¾C¶ , ŒÇcK›¤ £~›Íæê4`!È«Š ¦’cj*X€mbjª ,š É0MYÅû±>U)À]]!M‰U*•Ðl6Q.—Q*•�ÉdÇ1Æã±�×z½F¥RÁÙÙ^¼x�ù|޳³3L§S”Ëeàõë×øÕ¯~…¿ýÛ¿Å·ß~‹¯¾ú ÏŸ?7åÇ›ýQ2Ð%c4= £«ß¥Øµ»�4zWÄ7׈F”kj<%»Ø&’ ª¼ ¯k–—Ëe !`ð IDAT´Z-¤R)¼yóÆÖ×;×S?FQd$ ‚ÖlA4¶…mv#ãU±¤„ ÓÏqï’¼d8É&;u�¸ÖYS €¥#dÆã±¥�$XNu½^£V«á‹/¾°ù&©E’Šks³ÙXZ)’�$hÔ‡ÐW) I UC.¸®$·úîØž�F FêR‘¼MGÇõ¬„SéQ™ÅãH–°�¬�’N§Ñívm�‘\äuûý¾ÕY#É«é]¿¥µ‡\ÓõKuÑb±Ø `Z.—Ÿ·9&!Ìë©_p÷ŠK º„¨Û>%$Ôö�¥ÞCýY*u—“cFRçñãÇø—ùKgÙl61 ìý…$ëv{W—°R© Ûí"•º«‰Ç1z½Æã±ù|ƒ¨úQןoõz•JÅÔáqãÕ«W¨T*hµZ( øè£�Ðh4Œx糤ÝnãööÖjšñGÓWªïå^åÞÓz‘ܤ©/UÑÎ{«ªMçaßú¿Cï"P“ÞAÜ÷ܤïßLjõû}‹,¥¢†éÖ€;Ré»ï¾ÃÍÍ NOO c=3Èý4%€�ãkz)áZ¼žà%£Ò™öJÉ#¦…bý@ãñØDL{ôæÍ\\\°Éz.¬iB@…€ Ûªui4ÅS¶bm*™RÀb:»Z­†ÛÛ[K Ö“ "èÁv�œ *‚ ^¶�éIJÙ,¢(B³Ù´ô^•JÅÆˆQÀÓé'''8>>FµZÅ›7o°ÙlÐjµ,µÍl6Ãáá¡�Çoû[œ��áéÓ§øþûïñ—¿üÃáÐH@Γ›BЦ`™Fó;®•$ Óµ$�Î5‚E **ÃÏHBòx%%´^× QM¡ÅÔbÛí•JµZÍêHÄql€Ç%4›Mœ��¡ÑhØ`Ê8Ý'G>Ÿß©™F…ý’ˆºŽ\@šý#Ø_*•¬æÛb±°´RT èÕZAÛíÝn×Td‹Åb‡@'Á”J¥ `¥J€j¾\.‡áphª"’“ÉårÛíÖj°0e˜*Zܽ§*} ×·K(yªÄ8ç›ã˶¬V+k ýÓÐ|^¯×¦DS?Á}¨õà€·ŠM¦6%8¬ÛíöYI¶— uRš1î=Mmê^KýŠë{\ÂY?× ‚T+y‘ôù¾ßIçïk·Ž�»fô{UPéúp}¶úxέ~¯à¾>#îS[íóïJ’“D¤%A¼õ‘Èàšû,rI5%ªµ¯®?I÷ºÜ§JÂq�Òž��á—¿ü%ÎÏϱX,Ðï÷íy�J¥ŒXbßYKŽ~•~Ÿþ[냱oôaÉ?�ðÕW_áñãǦVÒ@‰n·‹L&ƒr¹l¤ ûñxŒÉdbô¿IkCk9‘(*‹0£×  K}­Ö ä\')÷ÞEк„Þ}äÎ}æî/÷;õ½Ië"ÉÜïˆ�Çc(ÅI€�ÿÁ½ººÂÅÅ�R©*• ¢(2à]Á$þG¾Ñh`2™¸¡i³ …ŠÅâøÁk¼'°œJ¥L��ËåP.—­�···‡’t:åÚí¶¥Gaqæn·‹~¿�étŠR©„ÃÃCSÇoþ']£Âݳ¿ÓéÔ@÷L&ƒétj€ UEÅbÑTFÕj…BÁaÅMâˆ×eý‚%$ ”`p‰®V«…jµjãÌÔtZG£V«�êõ:6›�)’¨|ùþûïÑétðäÉKIsrr‚ƒƒœžžâðð'''VÏ Ûíî€Rîx)`§æƒJÞ(ðÊïÝó\�[#Çy$"µfR&“A«ÕÂññ1Êå²¥Yj4¦8{ðà€»za" CT«UA` §*B@åÚ!iÄÚÛíÖ§ÍfcD/ÁB’°ÛíÖR¸qÍ‘à¡)pŸ�®iæ¸o¸�IB“¸ º†ÊUÜl6ôz=#Ï™êIxÞ¯×ë™O(—Ë–b�J/ê TQã®i/ê»8¶Œ|Ñ~¨â˜ð>|&pÍçóDAUN™Lƈ6ù¼�¦|䞤Â@ /%å¨Ät‹Jλ~EA~ׯ(a¤©IÜ)À«þÄU ¹kɽ¿û™K–«ŸJ2%}\R/éX%rî3=ÎU+²­I×UU—¶OÇEŸ›.¡¢J2WòcÈ4ýýI|’çûˆ­w�˾ñvÇ6‰œH2wΕäRÅ‘ªúÓŸâoþæol¯’”9==E&“1¢œäs;5‘ØÖ ŒÔUL_BÿOw0àø2™ ÿCÎhþ§OŸ"· ˜&PQ*•,õÒl6Û7o ‚ÅbårÙ"Ó]JÁD‚KLÉ´ÙÜÕ,Ñ´o�NÇTÓéÔ>gq{¦r"ÐKp°T*¡^¯ï€±T1ªU�ö�€u6›E†´0]�«\.‡jµŠR©„ÛÛ[SÜÞÞQÇó€·5Ÿø9à.BŸÀŒ¾å�Þ/ C4 A€n·‹ñxŒ0 qxx6>···h6›h4‡xýúµ‘rÍfÍfA T*a0`2™àÑ£G€¯¿þår…B�?ÆßýÝßa»Ýâûï¿Ç¿ÿû¿ãÏþ3®¯¯-­ u»© ÜH`.°u£Ð]à… ±Mš‡ß0õ€×™‚Žnj7®o®éñxŒB¡€³³3Ÿ·T•q#ŽcÛ“ìw*•²ZEl÷t:µuFe!} *‰´˜<ç…$u¹\¶Ô�¬áæö•JM1Ç9f *®Uƒ�|㘓ô¢ê‹~NU$n&  Ú¨ÓéXz¿~¿oi:g³ŠÅâŽïWàœÄý7÷†ú]CÜk�Uy¥©±Tq¨<Û¡iÇx%t*ù¥û\Õ®BÏÙR+È­û]Óiòz.™8¿ Ìæ5÷`ID’K:éxqNÜñÚè»�÷Ù¾6ª"Ò%wÞE$¸J5?蛎·’ûÚ¨ßñþœ?¶—dª>ÇR©ÎÏÏqzzjï1š"s³Ù C{OÓzHA˜¯Þð<�g¾ÿÑ�Ó?ÜÜÜØ5è+øn´ÝÞ‘óÀ]�»ÃÃC<|ø———Èçóè÷ûh·Û–šW•¡îZÊç󈢭V •JÅH!ú2ÝCTÂê3›>“Áº/ÞE̾‹ä{âH¯¯ëÊýÎýû]k|ß÷ž4òæÍ›7oÞ¼yóæÍ›7oÄ&“‰AÊTfŒo·ÛX,xøð!-ÝÓ¼1*4 Cl6Ôj5S)h:F.¥R)K%EÀ‘é×Òé4&“ F£®®®pyy‰L&ƒ(ŠŒ Z,h·Û¦d Â€-Á£ívki�noo�ÌÑSŽc’A tçóyKIÜEë`­T*h48;;Ãññ±©QJ¥’) â8F¿ß7°�F0† Ž¦ÓJì?kT*K C`”éñ´†I6àŽ«T*Èd2¸¾¾¶ ¹\¨×ë€/^`<£^¯£Z­Zô1�_Îßp8D†xòä šÍ&~ó›ßàòòÏž=ÃÅÅ…©¿äht¹ýͱdÿ ¨)骈°)ÉÃßJ)ÈÄϸR©”­eú\�Zãg2™àéÓ§(•J8::ÂG}„Á`€×¯_#“ÉàüüQY 2ª¹´ Ûì’?Ú'Æ©ŽRÀ x%Îã©„Úl6Ö/ö—{¸X,b8Ú~�ãØ®«ë_5›M|úé§Ff2«eÑl6-5×_E¨T*€çÏŸc>Ÿ#›ÍÚù$b4-“íºÎu_ŒÇc#§˜rf³™oÏõz�ápˆápˆ8Ž­/\{.8í*#ØŽétŠÙlfJ)’Xý~‹ÅõzÝêŠp¹ÆHþhJA`ìãx<6_CU×+I¢¤uBÐZIG`·Æ ÛÂó{‚¿$Ð5…Ôt:µþ0­¢’\3Tt‹E#Ùƒ ØIç©êúd¶™Ê1uô À©Zä÷¼·K¤¸J%ÿ”øWÕ÷wY¬>&‰¸Öû¸¤çŒ×b l«ºBÛ|Ÿú€×e»•ÜqÍ%6ø™;>.¡â^ƒ}wÇ÷> Û%¯µŸ:žI¤�þ$Ý+‰ âõ¸žù÷|>·õª÷pï«×ÚG ríð¹Áùs¯£íÞ7®î>Ö4k|æ�%ùªŠ,îÑR©d>…׈ãÃá¥RÉÞ¯Ô/Ñ×08DUTúžAz¹\¢ßï£Ûíb0`±X Szçr9T*«ŸÄ *œ¨^wÉS}î0E'Óéº$$�Ï>”0ÀˆÏG¦ËäXjú½$‚0iMí›3ÚûHI„Paôcîëš'�¼yóæÍ›7oÞ¼yóæÍÛ1­¡£`=¿#HuÍÙÙêõº¥ð!™Ââõ;Do�*5æÀp8Ä`0°è}’4¼g·ÛÅ«W¯pqqaÿáfzFþ ŸN§¦Ö!ðI°‡ÖjµB†”hä3'‚ž© HQ]D¢†  k�ŸŸã£�>ÂÁÁnoo­– Ï% Íñq#~Ýô`‡•¸ ‚Àú†¡�‘L¥µ\.1›ÍÐh4P.—­Ï¬[ÂHúår‰ápˆB¡€(ЬŽAú««+äóyœœœ C´Ûm¼zõÊæ©T*a2™àåË—¨V«øÙÏ~†V«…O>ùãñúÓŸptt„››ÌçsK·•¶ño’œ3šF»i£`Rˆ`™K,)QT*•L U*• �%ðEpØ%ò …*•Чº„ê¬|>oÄ¥› ˆm&¨©À&�÷aû5õ’ ö©b‚ûQ¯§Ä’ œr2ÍÜz½¶¾QÝÔ…šö¨R©˜‚N£ÓkµÊå²)jƒV«J¥’�S%Pwj¶�ûRÕxÜÛSOÀ“}dÑw¶K•6üí¦Ô´I$¦XŸ'•Ja±X`4¡ÓéøÊ5Ɉî/’J�i-õ+Z÷K‹ÔsÍéWEƒ¦uU<–$�®9žÃ±áx+±6ŸÏmÍ)ñ¢ªüoI¤sïÐØ>AqÛ^ ¹Í1Y.—˜L&Fük­%×Wì‹ÜW_Nÿ©ãÅ9 ©§u¼Ô�ð\ÝoÚ'%5=Ÿî1%½¹î’H@`Þ'µA÷8ûïóJâ¸DLYãž“Ô�Uç¸ýQÕpRŸõþîu’®—46šª‘$,•®ªRåÓ¾{¸sáþ(™›4gJšézpÇQÇDŸi©TÊüìjµÂp8D»ÝF­V3U%ýû£u„XÚÓëëk#F¸ì¦2å^æûßWøquu…ƒƒ4 óÛ©Ô]ý8¦ÛUu!}¶²¸ûx›J’Ïa>#¸ç’” z >›ù\&QÅg„>_ïÛOûÖíÿ«%‘C Âð¤‘7oÞ¼yóæÍ›7oÞ¼yû@ÆšqI¤ €¦Êî¢Å f2¥W{'�­£Ö_½z…J¥‚ñxŒÍfƒn·‹—/_¢Ûíšú‡)—r¹Æã1^¾|‰««+»u|X8™©åªÕ*¦Ó©Ý_kdðøb±ˆÁ``ª’ì�M£¥à_:�Fî€ÈÓÓS´Z-œžžâÑ£GhµZF¾0šŸéÁ˜B¯Ûí"ŸÏ©Ü@LÙGðCA§Z­f%ûggg;©£¹Ûl6±Ýn-bŸilf³z½2™ ÎÎÎ,¥V:�F¿ß7 Ÿu‹jµ&“ ...Ðn·�0 ˆDåJ½^dzgÏÐï÷‘ÍfñùçŸãW¿ú–Ë%¾ûî;üçþ'ž>}ºͯóÛíÖÒUb�®¯t:mýæ\¸¤›rJUGmâ8F*uW›‹¤IJÞš’�*ÞWÛÍ‚ÝÓé½^Ï¢ž †g³Y«C3�NM}CpŽóEÂÀ%pIÒ±-Zÿ‚ó¶ÙÜ¥mä>#0N0ž„ÆjµB½^·¶7 ìR-Èõyrr²ÕM’”µ›H³ïìIÆåriÄ“ œ#Õùo»Œ¦çz Äþ‘ �F;5®¯¯­æAH~§¤‹EœœœØX¯×¸¸¸0p6•ºKŸFEY»ÝÆl6C¿ßÇr¹Äùù9Z­–©õŠÅ¢¥˜äÞ£_#yË5«é¤˜ž.•Jí¤º#1£ªªÆè»è¯ùC?ÌTxŒ9W\G¬‘5�E‘‘ævRnrÝó À.AYM+Ç4ˆLmGŸ?÷U¦\{“ÉÄ™\çŸU¼¾ L+Iã�ªÖPU-ý(UµK’`œýQ’3‰è¤DÇR %ĵ­ª¬Ð¹äµØ6%þTM¡Ÿé=ÙVW¥äïI„²K ìó±z/í“û£J+×o“DIz.¸„ ǞDZžÎf³Ád2±sæó9¢(2œcïz.)Á{s}é³ß%ãØ~ö‰ë}½^›O'!ªuÆ”ä§ÏãóäààÀ”B£ÑoÞ¼±g#ïK`>ŸG·Ûµ´³q£Z­¢ÕjáOúR©”ù ––R÷«’v<Ž{âêê '''øÙÏ~f~¹V«áOúF£�ƱÌç%Õ‡ *Ðç/÷/ïÙh4ìx¾)™Î9'ñËç%k òYMÒ9i­¸{B׳îŸ$…^’íû.éºætÝèw?ƈñ?ø HØ+%Þn·ñÝwßY�’F@Z¨ët:V›ƒÀa§ÓÁË—/Ñï÷±^¯-ý\¯×3Òƒ SZ‘x!РÄAw‚›<‡�›ºŒý’Õ .(¤jŸívkõ˜$±6ÒÑÑZ­–)Vúý¾�ÜÃYDšŠ%¦™!ÁÄEÑ ¼UR(ØEà\ÁÛ~¿oÙõõµÍÓl6Ãp84°¸Sõ¼~ýÇÇÇ6p‰¢ÈÒÐ\^^Z­˜££#4 ÔëugFw #@ûñÇ#“É`0à§?ý)>þøc ¼xñ_}õnnnP(vÆœê…ù|Žz½në��™LŒôÒýÏzKô®¯â±½^ÏRK’ø`ŠFÖëõzX¯×¦²b[Iج×ëB[ý�* T'ù'WÝ3™Lln”,Ð1⽸/ óž$‡H(éØs~UYáªe8gý�ë·\°ø]@0ç]ÇU¿sÉ ú…$‚Çõ�I÷Ò¶¹Çè³F�WBIý�~¯ç&‘1Ú&=Î/í—ÛFMSÆöê½´î¸ðyçî÷úï$PŸ?ú¾Ä½Äzb|6ñ9Áö1†A9|~�å3†5UÑ9�ðêÕ+Zê9ª*I˜§Ói{·àz¦Ï%q£*:w¾Hººk�i:¹‡ÙF*žf³®¯¯-áÁƒ¸¼¼ÜYÿ|þP=©ª&?|®³_Ik[÷š¦“äºtûç–:ÏIæ—´’öˆû�»¶Ýc“üÂ}×M2OyóæÍ›7oÞ¼yóæÍ›·f9Æ00�„Çz½F·ÛÅ·ß~kŠ’Fšê‡€´ÛmKGÇ´!_™ªŠßQÀt`[ Þ”!Q”ËåL™£iõ,(À¥QµÀkRÇb±ØIáDp:Š"#´ØoŽ£åçó9úý¾Õ‡R�Ê�g­Ïâ¦gÛn·Vç„)ün÷z=Ã;�Xdq©TB¹\60ªÕª)Æã1ŽŽŽ�Ïç­žëC S©”מÏçˆãÅb‹Å777ˆ¢ÈÒбN I>àŽ„zøð!òù<.//qxxˆ§OŸb:�¢ÝnÿL°S †ÑÒù|Þ"É5�çÔM�ã‚E$X´�8 !wíhô¸Tª:"€E ®×ëY-�Z­f„•HA Š"L§Sû·®]¶—ó©íÑÔ|JЀd”;U€J¹ÄûÀÖ®*’H&¶Ñ­ý¢äI<©T�˜âÂ1b€ ŸoȰÝÞÕ>»¾¾F§Ó1õ5ýûjµÂd2±ó•HÛl6VŸÈí·’D÷Íp—t8¢ÓéàèèÈÆ2 CL&¼~ýù|ÇÇÇ8>>Þ©!Çç÷£¦Xå»\µZÝIAé¾/q�±­ªú£šŒï)šNò¾5®s¬{î]ö®}í®Ÿ$âë¯až4òæÍ›7oÞ¼yóæÍ›7oÄ^áoÖ0ÞÖ>™ÏçIJÁU°6N6›Å`0°:CŒ.u °ÛíÓéÔRYD¦‚‚@ð¶†A†;iQ´È9%’Red:�V¤.HJ¢†¤ k·h*•Åb�—/_îC,­ë$A`Eã³ÙìNÑwž« ÿ=™L°^¯ |'¨ l·Ûµ2gggxõêÆã±)aØ/¦µ"XCB @‚ýÅy/¦Ž"ßl6ñøñcäóy<}úÙl�=Âh4Âññ1êõ:z½Úí6êõ:?~ŒÇ�£Ûíâ¿þë¿ðÇ?þ– Š©Ñ8^L÷C€¨Ýn›JSظgR2ç…óÆuÍqQPM£À�]%A0‚wT�(ñ—ÏçQ©Tptt„0 qssƒjµŠƒƒt:¬V+«‰D–÷áßü7ÓñP‘A¢G×÷f³±}§©ý8oÜ'ü\‰ ‚p λdûÍ6»µ§¨N"øÏù«ÕjV_‹ùIi¹”4R‚�à?Õ3ZGÆME…÷§º€€%£ÿy]î[ö‹$&�$�®¯¯±^¯Q«ÕܑޕJ™LÆRRõƒÁ`UŸD¢Œ@.Ç� 2çŽm$)N☩‡Ã¡ÂÃá•JÅ^WU T’±VÇZý?}�WЖûƒó£û…ÇP¡ÅTtÝn×j¸‘PW˶*Ñ¥ ï>�U}¾K¬p­¨€)RùŒRµˆšîo¼N"Ž\Ô¾6»ç&õó¾ßûÈ)÷û¾çsM÷Û¥Ä�Q2W¯í¶A ?woî7ˆÃ%¡ôýQbPûY«Õ°X,¬F�>\bNÇ‘}&!ENOOqxxˆl6‹‹‹ #8´Fý²î'®ù0 À‚+ŠÅ¢=?·ÛíNM"¾±6ãÍÍ Ž��ÍO3�ûËgøh42Lk›)A§ëÛÝ\©Ô]Ê·~¿�««+”Ëe«E®®®Ðétð‹_üÇÇÇ( öœ¢¿å8�¨åþâ³¾^¯ï¨z©Õà ¶I pË`x|Fèšq׬»¶ô³w™{ŒK¸êÝwÞ}ä“{½$ó¤‘7oÞ¼yóæÍ›7oÞ¼yû V*•0�Nw"<Ã0´:1+•Š› @“lÐWþg—iD¸Weޝ)KÂ0´4/ ,»éS\ÐH�øÙV»5õ Á$–ÚE‰÷ËåÒTŒ$žÍf�F˜L&;€°›V‰}¤ ‚„S]1m™‚ÙŒŽn·Ûh6›6fTóT*#åÒé4>ýôS†å[*•P©T¬½“ÉÄ€‚à d*‘F–óFàš¤Ót:Ål6Ãåå%þíßþÍÚôâÅ‹�âÖí�ŽŽðË_þµZ Ùlü1ž‘Øe;¸x’èívÛö ÛÍþÐåÚr£ç÷é È+Á@åý”*b”ŒÑsõß‹Åq¡§iëùì¯;îùÚ&í¯K î#‡ö©Ey ÷o Îà|k›£(²õ®>bߘ'�ýéô]ÃF£�f³iýàZ¦ÿ%1Dߣ>”×å;Àv»Åùù9~ó›ß \.£Ûíb³¹S2ˆ¤X,b:�"Žcó3Ùlv'pƒid9¾½^Ïú§Á.ѧïiª¨Ö1%Ñ6™Lpyyi)c©>æ=?þøcÔjµ�>¨2¶X,âèèår³ÙÌ|V¥R±ÀΟ¦ÎTu›¾Cò™0›ÍŒ¬§R]ƒ“4 !i­%Í÷�±¤5tŸ?ÿk™'�¼yóæÍ›7oÞ¼yóæÍÛ±jµºäA€V«…O>ù£ÑÈŠ©‡aˆ  À'°¨õOÍ͈Sæè×Tb3¹ÌHX)$¢u«€?Á‚œn´;¯I€H#üµˆ»ÖCY.—`íVRHÓñzqï(&˜ZŽÄ“‚—l ÇH K hj-�ÍfccAÕÁu‚TãñØÀ{Mo“ÍfQ*• ,"yÇ1z½ªÕª�5Tð°�6�.ï$ïªÕ*òùü(”Ëå,Ût:EµZÅp8Ä›7o¬þðà'¡E*• ��ªÕ*�†Õ2J§Óè÷û–ÚJ�7*­t¸6¨¢qÓï(ÅõÈï¸6I’©"…àUE¦~ ‚årõzÕju‡x"AA`/ Cç£(2àŒ×9==ÅÉÉ Z­êõº­¦äXoSk‘ÒµÀÏ©:rû¬5[8üÑú-¼ŽÖ�QP~»Ýîì[K×}HåËíí­õ™©“¸—8G Êó^Ü †$t£È¹NÙ^ö�À,ÓÁ‘f ;ú€Édbh*•²=FU!÷x¹\Þ!Rø›ûž{>)­œ‚”ú�·JØðo=F‹ÕsOçr9ó™Jñ<ž»Z­lß2}km·[S‹Ø!N4½–úVw5% 8¦¤‡F¦s-‘¬s 7�œ’8ì׉'(Áë赸¿5…¤LJ4°šBKÛ䎫úqm£Î�{žc ˆï•]ÒhÑ¡÷¹Ïö�ÜJ(¡¥ûYå^×=VS†íSv)yæöußøðxU$r\õ9¬ÏN%<ݽ⎑ÃõO›éuõzÚGÝ{LѦdÒÁÁ¾üòKüìg?32øúúÚúñ 9}ssc;ÕGúˆÙl†~¿o¾Ì%^´�ºG\R›ãÈv/—KÜÜÜàààÀHÉ¥R §§§( xóæ�= €·Á¥R ?ÿùÏQ(pssƒétŠt:mïY|ÿtÕwú·¶�Ï­¨bR×mYôÿ'a”dûîqYü.ó¤‘7oÞ¼yóæÍ›7oÞ¼yû V.—-…Ðv»EµZŃðèÑ#´Ûm´ÛmK«Ä´>ÉHvhêš LiÁ\û 4¬#€Ì#óùÜ®E‚ª[ÐÜÞޚ⃴Fõ€á5ÜH[*HD1Í^µZµš3,2¿^¯ �FèõzXœ ¹£ÄïCð™ ŒK\¹äŒ”çu3™ †Ãá±ÆèãZ­†““d³Y¼yó›ÍÕjÕú¯ª$Ö¥j6›¨T*xöì™)+úý>€;åYE¦´Pb0�N[Ьr¹Œl6‹~¿�B¡€V«e@=ûErƒ@ÏÕÕ¾þúëw±XàÁƒøío‹étŠJ¥‚³³3 ŒÇcÌf3L§S»Öl6C¥RA­VÛI»FˆÖ(R xKÈpÓ´l\�¼,c$Í¢(B£ÑÀÑÑZ­J¥�†À�Ò„µq–Ë¥‡¥RÉRûA€z½n„ÏÍår‚ÀÖÇOÉQö‘{NÉ ‚ä~pža\�Ü‹%)¼’tÚl6(•J6Vnj?Îg»Ý¶uW.—q{{kõ~´F’½ €ª:O•JŒ(8­ 7 ¦vâ~& Âj\“T–J%äóy”Ëå�š"‹ÅÕjétq©Ã¾�Øå^W%K¹@’MÓ…)Nÿà*(ÔÐURÅ%�”x¢j’*A’#¼‡¦&Tò‘ÿf�€ ¬[Eek±Ôd2±±æ¼¨HSêÜ*¡£µX\u÷>Û£Ï%èkØ_W Ë1W¿î¦çÓñw�í$2' œv .÷Ü$âÂ%c’,éó¤kòs—„áþÕïuÌù7ýŒž—tm5o\Ûn] €Í3M÷‰{®KPéõŒÂ÷UÉ)1äί¯{�~’A|_áõ˜" €:\ïôý|†§Óiœžžâ׿þ5¾üòKSa^\\Ø{ •‘¬ñ¸X,Ðívm|&“É•Íf±Z­Ìçm6«ÄàíWB”ûšýæqJºÞÞÞ¢ÛíqÅõP.—M%Må¶’!ô/•J¿úÕ¯ÌïÝÜܱÅõ§Ï XHÚK|gÔZn\Ÿš*PŸ)n߇`}Rg‘êZÒ»ÏîkŸ'�¼yóæÍ›7oÞ¼yóæÍÛ1æ�_­Vˆã§§§8::BEF: ‹¸¥"ØMD �Çh%Sìñ?ö$%H0àTКj�êæõp&ˆ¢i¬˜"ˆ÷Tp˜¤ëèðØv»mj—Õj…ù|nµk´5ÁQ%¡Â0D©T2U‰Fîf³Y ‡C‹Ògº®l6ki­J¥’e“Éd§Øód2AµZE¡PÀÑÑ‘¥�FÈår¨V«(‹øúë¯q||ŒŸüä'Øn·xöìF£¾øâ Ìf3¼xñÂ/T]plܨ"d8î�HLÍEâ„DÛ[(E‘Õ1Ð1àü4zýú5þõ_ÿÕëZ­†â8F¨T*FÜh±‚_\wÑH'FB€?ºvHXp-Üf_Hž’4c;‰(ÖYZ¯×ˆ¢ÈÔœ#ù5â›ä$ ŸT*eéÞT¥¼-.®d3%Â\EŽFßósÝ“T¼)‘`'u£Ž�Öêáw›ÍÓé———h·Û¨T*`k‹u�X›‰×çºc{”Ôâ!q¡à5¯áÖhâñŒêÏçóæëHÊòÚ$³¸Ã0DµZÝQðúnªFŒÔuÆ1%PÊó”Ìѵ©À8Io̹ÿ¹HÊÑçi:9¯sK¥U’J|(IÅõ¢må¹~Ÿc¼\.1 Œ4bê(¦Ñ¢�¦ßWb‚¤>}¼ :>ºÆ]¢(é¯j —œÒµÄ±R5¨*õYçÕºŸÕî~ék’ŽwÉŸd:—?À¾¸V2AÛ�tŽÎ�^ßíË}ÿvï¡ýpɤ¤~r~¸éou-h;“ÆÕõiTµh�,ú+mwá­)s¹G¹\¶¹#éÆë—J%L&«Ù�Éd0�l=M§SA€8ŽDZÕ×bÿ“ÌâØ» ²ÞÓUêdäºRb€ó«ãJîèõHôcº*JHúpï(˜§ñì‡*$HZ)Ç5MrE´¤èfƒ¹ï5ý�cÿ¨¨áúW2„~€k{>Ÿc0X-ª©ìqz ì‹?lÓ®×ë%"E§û›iëo•1ª S⎵¾X'„{j4ý@µ£)7IvpÜUI?§ 2M‰!]·Wz•„Q¥�®#ý·®1*�R©”¥NÔúiIÄ>AsúM±F0œ*I¦ªä½Hr)Á¦ãÃvjZ9ñ“%.à¯çið÷©«²sÇÖ]÷º6u¯¸s¦&÷§ûœÒã“¥ÿ�½7ím$É®†ORÜ’L®©­Jê©î¶»§gÜ0<ðgÿÿc4à�16 ÏÒKµª$QâN&w‰ù|ÎÕatRU=ž·€ˆ ¢È\"n܈¤Î‰s¯ë‹´~»×pŸ·i¹‘/­¼†K^égEáÿWæúkŸýÒv¤]Ë“FÞ¼yóæÍ›7oÞ¼yóæí“Øv»5 4IK-§ ˜¦€#Ñ à%M�Fª^à?ýºã\}’$MH)©ÀvïºõL Ôe:=žKp‰ÄÉ+î$îõz–oÿèè•JÅj @¿ß·uˆ�†¥¶RŽ×M’Ä”ëõÚÒ7éÎz0TAPõ¥5SŠÅ"�†¥Ò ‚ÀꇰZLqc±Xà믿Æb±ÀÛ·o 0#Ðupp`ê>¬ÁOu­Î'Ib>aê´Åb�ƒƒ¼~ýqÛçTår9ŒF#k‹’vÅbq ,‹ˆ¢l7v©T2?„î÷ûV§éõë׸¼¼ÜQÓP¹ä‚Å <#ù  6ë¼pw¸ÖáÑ×z]‚V$|x¯(ŠÇñŽR€‘NJ)ÑJÂQ‰(’"ÆÁ9sù|ÞæŒ’:o\`•ièxMö‘ýL­YûФkn1=Ñh42õN>ŸÇáá¡‘+ÙlÖŠ¶ëœäk·•Àdí$®=ìÇ‚~`ÿHœN§SSªrˆ÷Ò¹H2…×8V­ÓÆxZ¯×6¦ª qÁz%ex‰M7å’g:ª’"áLå£K\(‘DÒŒÀ/S|r\ošæ�}#Ùæh<†ªKÖ{SE �I^Cc–÷UÕ�ŸkŸôGç9ç×dw轕¸Q2N}ï5<.�°qAw¾Ÿvœ®'i¯ë«4@ÁâžçÎg% on»ÓîíúE #}Ÿãâ¦jL»ÇK}pý¸�èa;øL ©É¸Ðu#­ïî¸hü‘¨( Vß,Š"Ûü¡D×"mk¡P@³ÙÄ?üÃ?à·¿ý-NNN°ÝnÑëõ0Q«Õ<Ç8ý9�NmcÅjµÂÕÕšÍ&Úí¶¥måÆÝäÀëP•Ä )Úgw�RÂÙõ+Ç“Ïçv»mÏn0Ò9Æõ©×ë!{–’´æuø¬Öû¸q¦k&û¤µ9>ÀnÚß4µ¢Ží>òfß¼uçâKöAûÒ5>t]š'�¼yóæÍ›7oÞ¼yóæÍÛ'±F£a€¡¦#� <§ ! GÆ­ d€þóN`Qwžx% õ}x SRénV*Tà/—˦4! Á÷˜°Èdžê“ôz=ŒÇc¬V+ë+AîwïÞ!Žcž˜Ò®^¯£Z­"“ÉX]UOQ�Ef³¦Ó)¦Ó©ùKw§„&QÑét0� HaZ´l6‹££#+‚¿$dªÕ*êõ:®®®P«ÕðÕW_a>Ÿ›Rã�ü#ñêÕ+ Hü, ë? ¾¯d K£V.—±ÝnÑív<ïº'hvxxˆZ­†Ùl†Éd‚~¿�(ЬÐl6³´_s‚õå©N!Å]Ó¹\××׸½½EE¦Çt:52NÉÎAîâçºÆ4s“ÉÝnׯHcˆÊ"ú–`°Æ¹úEfwU•᪩œ×$Ó•àËqSrÖM=Ç>ë80•lP ×U@¨�UÕåMîo×ôÙ©>r:.—F,rh¬¹×Ö8ucRÉ=ýÑ6¸íÑ~(yĵ‚ñë’3nÿu-Ôùâú%�„Ôu�ãBu Ÿµ.�«ë£ûÃó9x¿ƒpc ÛCÒž(X‹(œ��áw¿û¾ùæ4›MnjaÍDºº™ƒÏœR©„^¯‡ëëkT«U ÛTÂõw:�îÌ®{n*=~î’öœÛwnüq=æsµV«Y:Ïûûû�ºuý~¹\õz}gÞºÏ=�?\KU­ÎqãwH~WL’d'-ÛªJ#]{Ôö‘GûæèKs÷cÍ�s­yÒÈ›7oÞ¼yóæÍ›7oÞ¼}«ÕjF†Ìf3d³Y! r·½Öy!àGPe»Ý"Š"  âq ¼ ÀÇôcÜIÏ{8ÍçózòØÅb�J¥‚0 Ñl6�¬q ª¸‹Ÿh§ÓÙ)\¿Z­,ý�UÖÐ Ãp'Ý)$9Žñ~$“Fó7•ºƒ–€0•årÙH¥r¹Œl6kê‚¢šoooÑh4�Ífq�(Š0ŸÏÑív h¡„dUÇ; ª¦#$pJuÈÃéyXì;Š"o�cÌð3Öôam,Ÿ@'¸Èë‡ahéɘ"‹ãA°œJ²‡‡ŒF#DQ„jµŠjµŠJ¥büW2…Ày’$ækÆ+É%sXz"úCû¸\.wÔ;l7É£jµjÅÂì¤dŒ“ˆ èG Œé÷8w\e pî‘ô! Àökí *íØG‰ç¦Ó©½&ªó™»÷I¢QÆöp¾(Ñ«€&ãL�Ig�çJŒô#!A¢–ÇQ�űèõzøá‡Ðh4L¥Å6²=œô'ç4ýNEÕQTÑq}R’€ãââg šr®(¡DTÕG4UZ*ÀÏØfMã馸bÿy �<–ê’ó³ÙÌüD5ãd2ùÙzAg2óc�1檈Øwú]I-—ÀR%«*�”€Ð¢Œ·¶™’� òª–~U•ÇTÓ\r(M]䮹dÛ£mÑcµ-iÄ‘{ í£Æ�þvI —sý¥}Õ”ŸüLk�q®æóy[£ø\Ñ6iÜ (i>pÉ G-ª€|||ÜImÉÍ+îxëut=b?:�Ž­§J´1æY’±].—qqq�/¿üŸþ9êõºÝŸñ ÀjqýçFú…`ºÝ.êõ:¾þúkS °gôjµ²g4ÇAÕÖ\çøüR¢x&QÓRÄ‘ˆï÷ûèv»øî»ïpxxˆú§B¹\¶ÍüÞ¦›ZøŒ b1ŸÏÛÚE?0.”€×ñÐ�ª2¢ßÝ´tñ“6Ýcõ=5÷Ü´ãÓ®•ö÷_KyÒÈ›7oÞ¼yóæÍ›7oÞ¼}#ѳÝn�\�F(•JFØ�¬ èÃê < P G %9nhš6T@' C…JIµZ õzÇÇÇ8<<4�7›Íb8Úîü^¯‡Á``äÏýý=îîîÇ1Ž��E‘�Ð$6X;€„.¬3D0VÓ �¦ ‰ }Aà˜À¼‚¦µZ årÙŠÜü¤‘Ôb8‚dƒÁÝnÿò/ÿ‚Éd‚ï¾û———¸»»Ãû÷ïQ*•�ÕAh·ÛÃý~ßvò°´hî}‚´$úý>ŠÅ"ÎÏÏ­P7cˆäYVóæøøãñ½^£ÑÍfõzÝÎ#QFRq»Ý¢^¯[Ú¿L&ƒñxl P©T2òˆ)é¦Ó©)GÂ0D»ÝÆ«W¯ðêÕ+´Z-Sl0®“$±CI’ Z­È61öôo’1$–€grƒjÖ bº@Vsb<›¯I2¹jÎ ö‘Usº�sn±X V«Ù\ÕaÜÿðð`ÅÈ©ô!¸¦;À9OØàý9Î$†H̪J�~€»»;L§SŒÇc‹qúJ•: Äj�-ÿ¼®’�œ7I¼�4úþûïñúõk#g©ž#ÉKåÙjµB£Ñ°µ¬T*Y×é3*½ù‰�à?á)¸ÀwÁòdª%¶Û-†Ã¡å¹§rƒ€ 6@Ö4tšŽ%Žcá n—ËeK G÷õë×øío‹z½nDÀp8DÇxxx°|ú‡`äÂû÷ï‘ÉdðÅ_xÁpõz}'mûÌ´_¥RÉÔLì ÁSîàßl6FŒl·[ÜÞÞx"}†Ã¡�Nq#—Ë¡V«¡R©X*­jµjJ%îX&¸M•Òb±°š¹\¯^½Â`0@¥RÁ_|�ÿ÷Çf³A†˜Ïç899A¹\Æýý½¥˜+—Ë�F–RŒÊ¢Z­¶ð²nCµZÅÁÁŽŽŽl,IÔår9ôû}k#kÚœ��¡ÑhXš½n·k ôr¹Äññ12™ ºÝ.J¥’©„¨è!ÑW( TÓ4���g¬Ëµ^¯1�1�NñÓO?¡^¯£^¯£Ýnã³Ï>³ñS‚1¨j¾n4(‹‡Fjð®T*j‘@¡*…*1FO®œgJHåóy# ^êNpÖ×â¹>{|=MÃ8!ÈÈvÄã=TÉß4à˜ýÝn·FÆf³YK†¡)—ƒ�Õ·â.{¦¤¿4�ûY,ñøøhi©”#ˆ«²ªl쨉†Ã¡*šrLw­“Ä`_¥b�d”ú�Æqrýä ÚfݯñçëÞÏ9Ý÷øCŸO)ëx?%̨p ’õˆ¨ÀZ.—F‘àÔz-$§€g…ûÆ~kŠR*Ôö°ýzí´±uÇ)­-û>s¯›¦VÚ§|PÒØ½�ݧ¸àk7f?ÔFM3Ç磫@¤Ï¸Ž0�-ßc»ÝûP=¨Ä^ ïúx®i£Êe.ܜ˜s}œæg�EÞ“Ï3®­¹\GGG(—Ëè÷û–.Iž6Iœ��áòò§§§¦¸$!Äu…ó€mQ¿ë<"iÇ1~ÿûß›ŠŠD Ÿ‘ª¢â³2 C4 S ò» ‰#öU7¤­ù™L�NÃá'''8<<4’x¹\"ŽcŒÇcS%r�¡â—›=¸1(‚�zslŸ�:—¹~P•Ib’ñ¡¼;Æ/ÍE=æ¥Ï÷}ö¡söÍß—Îû�yÒÈ›7oÞ¼yóæÍ›7oÞ¼}ãn`Uz0UŠÖ.b½ÝéÍ”c N&Ésª/ÖÿÑZ*‹Å™Ìs�"MCƺprr‚F£�J¥béW¢(B³ÙD6›Åùù9ÎÏÏ�0bí îº�Ç;ùðs¹–Ë%îïï-Ý �q‚ Aì('H(© ÃUTQ}ÀTMTDÄv‹ÆA€ûû{A€f³‰Z­f~>==ÅvûTS†¾¥j…þ&Ä6. DQ„V«eµGX‡‡ãÅâѬÔét,Ý�X­O¥©ÏÜ3-‰¼$IÐétpvv†b±¸£DÐÒI’ØÎè(Š0�Nwú1›ÍŒ ¬Õj;dÁ;_Q€�ضÇã12™ *• J¥’‘4ì7d³Ù Ýn§§§¨ÕjX¯×8??G«ÕBÖ}}Õ IDAT¶(Š Ür‰Ý•NuÛARa±Xì¤C" Êù¡`,�?×wô™¦tSE •S$Ž£ÐX—†µn8oUUÇØÕÔHi»î¬ã<ÙnŸê©ÚåþþÃáÐÚ²Z­ŒH"€HEËz½¶qRðÚUxpθ€2%Té{CI‘ÈÔ¾q^02KS�ñ>\û¸V<%�Ëã”`Ðk§:'½†K0)‰¦ÇìûQ‚€íáXi:'Æ_¯V+«Õ¤i “î:¨ê„4ÒBSæqÜ”4b¿\‚ã®?Jö¨²Œ÷uIU¶KID%šèG=Ç3U¸cú1掻k|v¤‘<ûÎÑëØYyMm÷>µ„¶á%Õƒ^WÉ@>¯“$±g'ý¨JÎ*un»1®ýa{56ÒÈ¿�§ç¿×(éÏ´¯———øì³ÏÐl6wT€šÆ–¾eß¹ÎèìήÝ?üðÎÏÏ�ÌæÉ ÀÓZE’* C´Z-#�Uå§„œöEý óo½^c:�â7¿ù ŽŽŽ0ŸÏ-m%¿ŸÅqŒ vÒ S1¬k®ö‘ý T¨içô5ãNÕ„úÙ>K‹©‘Àîù/½¿�(úØë|ȉi#ê2™Œ‘9¬ÅBиP(Áú^“ä)EJ£Ñ0…^»Ùlâìì L‰AÅM¯×Ãv»µ´bab½^c8" Cœœœ T*Y}’ ëõÚòè+ACR €í†­×릆 ‚Iëu$Ibjú „�g ¢�ÇVg0`>ŸPÆ´4¬%”ÏçÑn·Ñh40ŸÏ1�Ñjµ¬í�F«Õ q[­)‚¼$Þ0‘˜X,èõzˆãÕjÕC£ÑÈÔBa¢×ë^¿~m€�*WH¼éß+‚o$0Ø’m4A{*¬&¨D…‰U1PõDõ o³Ö ‹ˆÜ£ª�»ÜIŠN&t:ŒF#T*#2êõºù7K¥H€�}@…1OLAw๠kÝ{¹¤¡þ­D¾>kØnö[‰‹4²EÇH¯ÿ!sÇ:mŒö©”HÜwžÛ†�%}xOõ³Kôí»Æ>ÒˆÏU�Ü(ÁyJåŒKpiŒ3&µ¢KØìë¯;V Ž=>>˜¦ÉàYñ1�MéA‘àžÁ4úJɪ �n½Æ Sè­×k”Ëe›/L›D#¨G…ÎÙlfDA?ªIR¶Ûmt»]ÜÜÜØºB2”€êvû”Æh8¢ÛíâèèÈ.=|M"ŽÀ+É/ÂlÉ\ˆª"HËtUô'�IGr� 6×*U–)˜ ü¼ÖʇH£´u—Ǩò‚>P°^ !—8Ñûðsd•ÈeŸ©2ÐÔtê3*'™ÆJÛ¤Ê^ƒ1A_ºœÓ Ü*ÁE¢ÇU¹$‚*48W4�–ŽÛÃsùÞ>•Q¹±üÝGî# ÓȈ´óö/�Ì‹.Ñâ’?²}çs¼´!çcE7œè³"­¯k×ïi)_2wr܇|®‡ahë…’ÇšrÏõ¹’Á$¼¹!FÕ©•JívÛ¾£ð™¯ß¸!€mx`¿9/¹Æký%Î>¨Z"�§iÞHFñÙÅšx:G”Ìåýõ5ðLR¹þW½~ý'''¦ôäûÜÜÁ”t|ê¦M«Ê1'±¥u�ø9×%Þƒk9×2nbìéÚ·/Ž>f.¸ªW×îë´c~)ùô1æI#oÞ¼yóæÍ›7oÞ¼yóöIŒ•Zúý>šÍ¦¥ƒ#ˆpp°“§ŸJ#‚ÙårÇÇǨÕj¸ººÚ)vJ¥�À”HÛíSª·åriDïI0žàØt:5pBAsÖ©á±²\d 8Ÿ$‰q&pDÌÝ]«é•¸‹š@ób±ÀÝÝ��BÜåLµú0 Mß»»;àìì Óé…B‡‡‡Ö¯jµŠz½Žõzmõš2M&$ÉSJ¼|>�étjõKNOOQ(0 ¬-TA`གP¬v �(õÝf³A§ÓÁáá! …‚¥¡ ‚ÀêU«U#}¨¡R*—Ëa4a³Ùìì’fÒoT Q!ÆXô9Sá0bz»ËËKKÓ§©úªÕª‘|³ÙÌêF ôz=ôz=|ÿý÷øÇüG;xcI²}ãñ½^ÏȾÉd‚jµjqÃtŠÝ×$+ ÖóúaâôôÔb•ê:6w´ Ó4B3™ŒÅh†øì³ÏŒ�TP_Õ[,Ý�*¡”hqw¦«Ú@ÓAQqÄ{hz'Æšª�Ü4t¼>cƒ÷âyîs—<ИR¢G+yÄû¹�^‡¿uG>ïùðð`µ¿¸.iZ?%'ƒàY‘Dð›sNÓþñ8æÕš¢Ì%½ÜþJ2¸— ºj öŒzFI�3—ÄyÉ”ôy‰$rÇZÛàšKˆ½¤”pÛ’fJh<égi)ìøÑ½žû¾Ö%R…Ÿµ|ÆrÎkº1Mé’s¼�zn ¸óIIRà™ˆg»8/‚ 0âXÉ)í÷>rÀõ×ÒJ¥b¤h6›E³ÙD>ŸÇÝ݆Ã!’$±š?|†P�̶Réª>) Fñ~lŸ©üÞ¡Ïe>ONN¬vb.—³çÕÁÁ�={HBéÚÃ>ºëŒKÈ2Hò3%0 !ªHݵQ¿Ï‹Eû® <Ð|–)±¥*F—4fý*>ƒ´Ý¿Äö�?ûïÆÝ>’6Í>4Ÿÿó¤‘7oÞ¼yóæÍ›7oÞ¼yû$ÆÊ H�8a=ô`ê3îö&GP¿\.[êÖà?þz­ v@\Ä—Ë%€'€‚u x ¦}ãÁôb±¸†°?PN žÄðœVŒ¼‚°Ü ë*?êõ:V«ƒÁŽºAw^S�U«Õ�Íf­à<�tÓé¥R µZ ÷÷÷¤4 , ¬V+ŒÇc™ŒiõªÕª�äÛíõzÓéÔÈ ‰ªŽÜè®^Ö�aÛ™†�ª¦d�©ív‹~¿oþ¨×ëxÿþ=�\d:#ÆÓê.júŽ  ƒÏ€¢*V~çóy”Ëe4›M´Ûm«]ERM ‰ù|ŽR©d**¦Ÿ�F( xóæ Z­–Å…Ö b‚�Ÿë|s‰#ýQ»×Q0’ëç�žK°šë1Éh%‹ÙÎC·½Œ;®Í¬¿êú5­¯:V:z/ðU_¦½—F)@SE‰{®¶G¯µO¥°�8J�_zÏU@¹à²{nx­Ç¹DŒ¶+Í'.ÿK4%)IXè¼ÑxqÛ§Ïí´¾»ÄYZŸhŒ=�«ϪpæZìÚK±¤„”ŽüžP©TP(0›Íì™$‰=w�€å9TJs#„ª…¶Û­‘Fô�;Ž\ÿ©ˆ&yU(P©Tpxxˆn·kéRµ.kºk¥ëw�q‰ÛL&ƒñxŒ»»;Û˜1›Í0�11�--û§„N.—³ïtªôbÿtÌ5>5¾ø]”‡¨ÂúØ8N‹7]RÑ%‹>†úØã~‰yÒÈ›7oÞ¼yóæÍ›7oÞ¼}ã?ÃܬEÒUÕ¢ 8ÿ¡. F&A`*¦#X‘Ïçwv¸r7j±XÄl63~˜r„ 6°[Ï‚×'ñÂZ(l³‚SQa³Ùàîî���VGI&‚axŒIHx]¯×F<1MZÇxÿþ=&“‰‘$Q!ŸÏc±X K·µ^¯�(øòË/Ç1Þ¾}‹Z­f>¹»»3P€‘u���8>>Æáá¡‘0l#Û2›ÍðÃ?XMªÍf³Cô)ˆE�…à4É…F£aGEˆ¢È ÃáðæÍK«·ÙlP.—±Z­pssƒn·käI­VÃh4Âz½Æëׯ ,«×ëvïõz�^¯g ÷|>7rŠ©…?årÙŽ1 t“œk4˜Íf�F˜N§Øn·¶“y>Ÿ[*¼J¥‚££#ÀÿüÏÿ`6›á_ÿõ_-~$˜H޲ML÷ÆùC¢¯Z­Z -ªª|‘ˆ ÃÐê #ÆØTBÂMÅŘÔZJJÀq¼HÀ&I‚ÛÛ[‹ª™Ž’@¤š ŽÄ�S'0xrrb¤U†;ª;Î1UX�F#ôz=›»$²ü¬~wÞ«bA�F’V\c˜‹¾vÓÎqn»@»®‰ªfÐônôûÃ9¤i¬(t‰½ÿK„}F?+ªÄ™*>´ÕTäÑGZÓI ÚNƹ þœÕµƒ÷æø¨¢HÓÄq¬üWŸ¹à8-Myâú2 ÔåûÚW}˜ûK·-J„iûÜ6¥#/iÄ™{_×À³ï¸~¹D@ÚOÚ&“‰‘õzQáÝ»w( 8::²q"0ĺ­Xý(Ž!A�ÍfciÌ¨Š¡êd4¡V«!Š"KÏ–ÉdÐn·E&“ ºÝ.ªÕª¥â›L&ˆ¢ÈÒ´ñXÖbMM=G¢ŽÁ%ƒ4M{C¢a»ÝqÑh4P«Õ,†â8ÞQ—0Ââøø���ø·û7¼yó�FÃÈ"ÏL3HâH�*Æ~¡P@µZ5@‹ñG0ðááÁvbÓ'Œ Ž磦TSå›$;‹…‘°ŒÿétŠƒƒKoHQMD²•ä -‡IÒؤM§SÁSÊIªç˜Šà1Õ];úb4áûï¿Çz½¶z Zÿ‹DŸ¦ TòBA^’Wô_¹\¶8a_u3Þ˜Vbƒ}ç=T=£©×\ÒÈï�]%‘ßSe�W]×P—|q•Fú£„ç¾ÖkR’�DÇPII%¦\ÂJA[¶UÕ‹4ƒ]™’Jlð<þvÁZõ¯‚Ì.1àªmÒ®«ñ‘vŒŽ‘^Ó¡?”N‹·Ý®¹ÇëõÓ#÷µ^[É$××i}Ö5H¯Ísù€cKÂXI€´ù d‘;–:.iäk¡¦$ˆÉûüéú m\Ø7név»¸¼¼Äññ±mœaZUi“ÉÄê ‘8ášKUÏás�ÏBUdñâ7�XÚGæèœJ;Æ}oŸO_úü¯1OyóæÍ›7oÞ¼yóæÍ›·ObTsPEDr¡Ñh ›Í¢é„ójU!`$M0•ïÏçs\]]¡Ñh¨®»_™6Éýç^�RM=Å4_ÅbÑH$ª–tG4€Z­†0 ­n“¦ŸQ`xNËGpGS¨‘è"”ÉdP©TLUB œŠ(^‡)Û¨œÑZºCØ„IX4 ÜÞÞZ­˜v»�b±hJªR©„ÃÃCÞ7› jµš¥ûbª0ú†d ú€unØö—êšB¡` P©TB»Ý¶¿Yó�ã{pp`¾éõz;)ÕØ7iª"a=��\.géáx¶q¹\šÏÙFLZ£†)ßH4±¶ÄÑÑðÝwßYì5›M‹ÿR©„r¹ŒáphdŽ'TÎ #VG£V«•¯šâ.I#´ã(‹;º=žÕÙlÖÚpp`õ•S$�˜‘$ #îrWr‹;ä•QÐl¹\Z*&¦šãØ�ÔBî›Íf‡\Òyôç?ÿI’ T*YšC¦�œL&Èd2ˆ¢ÈÚ¡…ÝyO®-º‘Ìc]$*¦Ò” "•ø 1Æ>»éùGªVRÒ( €w‰!U.±O úëo7œ®…\ßôÇÝÁ¯i7]E”^OÉ7í!犎Ÿ¶�þ!¸«d˜K¼´«_É$^3í¼4’-íºûa÷\þ­öK$Š’–´}ª2÷>.ÉáF®Ïxí4ÂÈ%²Ü¶ë1icýÒ5ݶk¬‘Dg)¨Ïù�FP¤�Û¡±¤÷vý•F*i¼éüdœrýOóû¾62޹ö�P}xxÀx<Æ`0Àññ±Õ ã³…*Xn žT¡ÜÌÂïR\‡©&1ä’Fl·ª×ëµ)fK¥’‘þãñØ6‚(‘Ì窮Yœ×º^¼D*és¸ßïÛw�Á`€Édbí¡b€õ…›P´Î7°=$‰8nŒÒÔ/i$ŸÆ€;·ÓÖç´ù¦q�f/}æúìc�ýXó¤‘7oÞ¼yóæÍ›7oÞ¼yû$Æô!¬ïÁTrÌ•Oµÿé&8Ïö˜ª@ÕEL9ÇtsZ¿åúúGGG¨Õj�~¾óœ*5æÑçÎÓ0 QÐWA‚Gggg¸ººÂÿ÷ãïÿþï-­�äûMà…@ ë”Ëe\\\˜*DwsWð|>Ç`0@¥R±¢ÍµZ ›ÍÝnGGGˆãøÃ†!NOOQ*•ð§?ý ù|Þ9÷÷÷¦œ€~¿�Åba¾wAfï¹\ggg–®ÕjáúúÅb¿úÕ¯ð?ÿó?˜N§(—Ë(•J;¤ ‰öƒª&ëÜÝÌAÝnAàââÂ@æ p~~Ž\.‡‡‡T«U#&™òNS“±Ïóù“Éý~õzÝ M‹”ÉdP«Õ¬ÝŒ?vT¿ô+‹h·Û¦L�FVçáññ©¨w>ŸG©TÂwß}‡ív‹o¿ýÖˆ·\.gc8™L<sT Qù¢ i·Ûµ”… f2uÕ5TÄ�ü#±HP�¾"8ƒÁÀÔDL ¤ç(¤iÚô�sR.!£¤D<¥è+—Ë;D!‹¢‹E#œ‹…W…BÁ3Î#Æ|£Ñ0Г , N¶•1Äù­ 1�(볦ÙSˆŠBà „e¬ÐœSº.qLÓm—\HûQÿ»ª ^ß=V /;Ìרâ¹ô×>®Û$9õx’Ÿœ� ¾“€dõºV+ñ¢ ðK–FÀ¨O?t®ë‹}ä‰^/íx%Ù'— £¹´K¢¹À´K„¥ýhÓDí¯‚äi~d»tMžS¯íÑÓÈ#Æc%MȘ°óìN#ËÜç³û{©æ¾Ç8vûÎ>+É¥>pÍ�g®š.”$üýý=šÍ&ªÕª©duì5¶Hˆ@EF¦$IbkçÕÉšJ’›%8n$Ðã8¶ôžT7ÓߺY†›è#w<ÓH£4ƒïÅqŒÑh„r¹Œ^¯‡8ŽwÖ*®ÜŒD¥ÛIå—n¾à³…뎒TûÖR�ƒ4")­ýûHÈ}ñ ¿÷YÚþØ{üRó¤‘7oÞ¼yóæÍ›7oÞ¼yû$æþ#®ê ‚ $D Žc# ¢¦RFÓøÖÔGãñØÔ˜ Š žÿ'˜­»c‹F£‘õãààÀjA€ñxl× :ˆ`7#ºÝ.†Ã¡)M‚ °š*œ¨x!hCí•AP†}§?*• Úí62™ :�Ž‘]µZÍ®KµS¨•Ëe_NNN,ÍÛÍÍ�©‹¾ÿþ{\__#—Ëá‹/¾@6›Åp8Är¹Äl63¿—ËåŸÕ˜bM!õ5ð´#š@�*yH´är9 ‡C#‘˜öl0Xº¼ù|nê¯|>o©â4¥ U4•JŒø`Êå2ŠÅ"z½ºÝ.J¥jµš)µÂ0´˜"ðV¯×­fÇ�±Ëûñü|>�ÃÃC4 K›ÈA$êúý>F£‘í$'™ÆxO’ÄT5$ I©ÂŠ×W0ž$$@www¨×ë¦Èº»»3p–5Àï$œ¨&㸮V+#T8gâ3–8$ºHr*І¡]‡„(ç;S1‘�$‘Óï÷Ñï÷� bV«•ÍÉù|nó—÷¼¾¾F¥RA½^ÇÃéã8_‹…)”#$Ú2™Œ�)�]ªœL«ÈÔOT!ò Zr'ŸL&x÷î�=Iqîs®¢Ùl¢Ûíb>ŸÛ÷J>ƒt<Ó:oÙ®K\«y¼¿.éîZÚgûÎy‰\TÛG ý-‰"5OyóæÍ›7oÞ¼yóæÍ›·ObüØb%ø¬`'ÓÀq.Aõõzm :Áƒ$IvÀG­½BP†Ç`Ö]óZD™ ¦ô"pÀÔy¼Ag̵`vE¦J!É@Œ*M±B¨R©˜Ê¢T*a:�xRÈ0ÝX&“Ù©¯Ãô1A‰@Âa½^##IHimƒår‰F£±“ò-ŸÏãÕ«Wxûö-:�r¹â86p‘ Á%’7Ê©îR5A†VC†u„6¬! Ì¾‘ø`�ï§)êÔ“¸#ÁâÖ ©’…dë+1=€�ô�$ñHnió¶›ñB•�'àV.—±X,puue„œ›‚Lë+pÜ�g…wµ«ú‰þfl­V+ ‡Ct»]Ôj5SÜ‘`!ø7™LL…À”QËåÒÚ¥ ™wlŸªdøšm!ˆÊ�ô öSaÄs8ÇeM % €ç”JÛíÖæ$ã' \]]áââÂT\œ;Œ%�U™ ª7¥c–me‘y­_¦¤šÆ ‰1%=Ø%’,W¢ŒcNPV‰"Ö‰SrÊèyM—Éc4½œøJè°�ô™®éJ:0¤Kv°�Ùw—?AdU.èz­Ï—¸p %Þ›Ÿ§)”0R"HMï¥çh›ÝÏõùGS²ÃmC±²¯Ý· ê?}ý!ÒÌ�ú_Û­çêß:o4¡Kàhÿ9Žz‰Y’´ú q µ}}Ñ÷ÜÏ\ÿ*IæÆ[ZŸIk 8ÅîXèøð\ÛùÃõTïϺƒÁÀ6',—Kapuª IDAT{æñÎWÖzÓùÁ60�×F>ã\âÓ%·¨–åZW.—<×+ã÷ª3]ÒÔõ�n€qç«k¬oÈï.T•ª"Êå2Â04rËõ¿úDÓ¦µÏMK·ÏÜu*m-qû˜ÖÏ—úï~öR{þÖæI#oÞ¼yóæÍ›7oÞ¼yóöIÌM/C@“ °‚ºƒ~±XX )$LE@�Ÿà°ª–¨Ü‰ã•JÅ€k·@2ÛÂ{?<< Žc³’$±�ò$xmî6g{¹Ëx">¢(2ðk³ÙX�îÎ'ÈŸÏçQ­VM Ôh4Ðëõ°^¯Q¯×wLô• $%àææÙl_}õ¦Ó©)�Hx)ˆB2‰J ››@£ÑÀùù9Þ½{‡B¡€Ï?ÿ‹Åïß¿Çý×!—Ëáõë×8>>Æ`00b¢ßï£R© Ñh`2™˜OI ÐªÕ*òù¼¥ÙÑ43 +x¾Ý>ÕÅáµs¹Í_TÊOäÓóåóyŒÇcL§S„aˆjµj)éÓ|>�F£±³‹™J!‚jš^l:�áø¦²�Ä% ™Åba„X†¨T*899±˜;>>6e×ßýÝß!Š"L4å{Zwˆ)ÒH6r>qŒyI�áphé7› &“‰þŒcÎ'þ—Ëåñ¡«»+_ÁB%€• ±0›Í̯«ÕÊÆ™óžól<[z¦ù|nãD5�®Œ%öKSÌõû}üðæ¨c?é/’@T.¸@Ÿ¦œRõ†Öía_X¦¯4Õ&ý¢þâ}5mU ’Ó/ì#ï¡ÅÚõ>i;Ü•R5ûÁ±U@VpŸ€5wèóZz=Æ$ T]SUIJ0ÙU�ê­„µìSš¹ïkjЏ4À—cM¿¸à²0.¹¤÷ÝG )Áªæ’/.¹äþvÕNJ4¦FÚV—ôJ#©ÜônnÜëèo÷Y¥$€Â’÷¢‚T‰a%°´¯Ûív'=cIÕ&n_Òú«×u7¹¸c«cÃxN󇯵ë'õ)ßW%Û̵Ã]kIÆòyEU'‰jÎ]ý®Âµœ~¥ ‰ÇkÊS�gT[jí$®E\35­«K¤¤‘œîgú¹;ï¹Q†qÄc¸ÎÐOüÞ¡),ùŒ¡ Wc0MI§ñ ^"nܹäï’“/�¯íp}õKmßšø1æI#oÞ¼yóæÍ›7oÞ¼yóöILÿ‘ÖݵîgJú¨òˆéŸ»—ÿÔk•400ŽcÜßß›â…ÇÓˆˆeº—étº 3U‰=—À�4^‡M<¥V¢j%ŽcK—Ífqqq�ÃÃCÌçs´Z-”J%Ìf3«Ëóý÷ßãòòÒÒsEQ„$I°X,°ÙlE …¦Ó)šÍ&ŠÅ"F£ÑŽúB%I’ Z­¢^¯[‘é(ŠðÅ_˜ c0X œÛÛ[«34™LP«Õ�$‰¥¿!ÁaÍf�FÙl½^øÃ0›ÍLaDÕO6›µû”ËeSS=>>¢×ë¡P(˜ÊŠ@r·Ûð”Žæääq€¥lc¡ìF£�ívk R¹\Fèõz¦ø`ª*µf³Æã1úý>Þ¿�Éd‚/¿üÒÆš$ ‚v‹ÅÂ8ª¶ZÁSJ·ñxŒÅba×x||DµZ5ïôôù|Þj)xËT†õzÝÈUkP ¤ˆÖyxxÀh4ÂÛ·o�DS¢‚àÉXª‡>´c\‰WÁpU2–Æy†!‚à)=œ^_çABÉJê0Æõ$Ô”„"qùÝwßÙ¸�F£Ÿ�ºv( ¯$3-IS€qÞ«’‘í×kQ ¤œ«–Y¯×ï$dµ¯ô)ÓÈѯŒGÃã´è»’1®²(Í_¼ÇTÇQã…ä&c�ýcZAÎU†r¬è#’£Jì#¿”¸àxí³�N]@6 °U‚HÏI›:gÒÔNi¤…¾¿�È¡)¨®ÄѾ~¹×rû¦óØí“ŽÉ‡|â!_š6Sû@b‚k v¦BãXkûܹÈëêçnÍ7—ØIáÙWöCŸõ:GÝTy:‡U©Âï9i„‰’a|OïÉ÷7›�­ùª,eóù¼©&Ý ªˆVe4Sþ‘˜ãúë®é*|x’Fôû™¦ÔqsÍ%Gu7l37ÐüœãÃT¯T.ríäØkêS]{¹)ÑM¢ISíí‹™}ýúØcÜ9ÿKˆžÿ )ô!ó¤‘7oÞ¼yóæÍ›7oÞ¼yû$¦À)�ŠÜÝÄà @h�Œ´ú >e³Y#6V«ÕN­î˜%�£i¸ˆ�b p+@Äöhz,¦Ñ#ÐÊÀO+•ŠÕdâçT#U*k?ó÷Sý†!â86Pƒ~y||4µ‹¦üRÏ'àK°i2™`¹\¢\.S¯×MQEŠÄÎz½FµZE³Ù4âm>Ÿ£Ýn£T*™ÚƒÀL³ÙÄx<Æd21’Ž Sxe2#ZXc‚i•è (‹¨V«æ'ŠLñµX,Œ”Z.—˜Ïç(—˨ÕjØl6(•JÖ­ŸT,ͧÒØž^¯‡Åb�ëëk´ÛmSyi0ú»T*!§äH;5}˜:¬X,©™Íf-E ö�J!‚qLÓGÓr¹Äv»µSÀsáyÎ3‚ö›Í�NÇR ]^^šªÅU×p¬\PJû¦Ç*€Ê9¸Ùlvv…ÏÀ6?ãißt©Š†k±ªÒCÜàA2ÖU”)qÃóö©ÁÜ1çû4�M÷zûîxº¤¸ÖÖÒë¹J#w�uý«ëïÁ着áóW¿-—KŒF£Ÿsmä:B‚x®·ÈÔ�ûÆ”mäwŠR©dß5Ò!÷û˜KÜék7ÕøÌ㺪õÔHêÐ'³Ù ½^Ïê3i�%^ƒçQ-Îg²~Ï䘺k˜®Én»Ó,Í'ûÎÝ·¥­7i÷Ñsÿ–$’'�¼yóæÍ›7oÞ¼yóæÍÛ'1õÌ&ÈB°Tw|¨`€±û�·9 …¢(2µ•#,8­`53¬u2�¬î‰ ‚ú¼ëë|˜Íf;E”ÙL=Fðx4x<Ø¦Ü ÃКV«…ï¿ÿÛí�FÃT%Ù qw-}E ‹uŒxÞÁÁƒ:�~ýë_àtpp€ù|ŽÙl¶“¶‰5�¢(ÂÙÙnnn0Í'…BÁ”RLÓjµ¢(B«ÕÂd2Áp8´c€'R£Õj¡A…�w‚ýµ+• ~ýë_c6›Y½*’-q#žê t:4›M´Z-#á¨R#8®DÕr¹4òæðð…Ba¢Ûíâúúz‡�¢RˆàwkA`iïpäÎn�gÆÅp8D¹\F½^G¿ß·±¯V«ÀS: cÜñM°’Ê8Žç k!±o��� ˜ÏçV—ŠŠ% ”¸ÑTkàØ~ &ÀyM�‘ÇÌ£zˆ)%uŽ1¦9fLɵX,̯$¦˜v‰¦J#¶Y•„Ãá···X­VV#KSȱOJ¹kŒ»OI±_.Iæ¦Ýä�**™rN =W�K½¶«"áuUÉá‚•®Ê‡»Çº¯ªZëˆ+PÎu^ÕŒWæ¹îóú.£ ¸>G§¶Óµ}àkšê$ Üu•"ijäÝGðìSìì¢ÓÀd—¼p¯ùK@mmŸn*Ð~ò³}÷sû¥×ÖñâÜgLêzÂôfª&L#¨”Páø»5„ôú®¹j$Þ[Óçj]®ŒSW�EßèýTI­Ê%�e%°Üu6ÍŸJÀ°üCåõz½F¯×³9œÉdLA¤Ä‡¦�¤ß÷)\ôyÂ�1T©ªÂR×4·�.é·ïwÚX«"HI3õŒÇcÜÝÝa>Ÿ£R©Ø3DÕ§ìk6›5Š×uIg�g\“õGc;ÍÒÖ÷xÞ/mî~,9åÞË“FÞ¼yóæÍ›7oÞ¼yóæíÿw¦`“*‹”´!ÐA€‰êþs<§áµÜóAð” îððãñØHž8ŽM�ÂÚ $ x}¦oaÁh¦9ÑÝ÷Z#ØÝ…Nò…¤’Ök!Y�Ï熡U777øÃþ€Ífƒ££#\^^âàà�NLj¯››[=�R©„J¥‚år‰¿üå/Fv$I‚Z­†ƒƒŒÇc´Z-<>>âþþGGGÈår¶÷øøØÈ 0 ‘Édð§?ýÉ‹J¥bDÛ—_~‰ëëk£Ž��‘$ :�~úé'´ÛmâññÃá“ÉĶ Ðh4ŒH£/IF…ah~çø@ëv»Èf³8==5¥Ñãã#�2™Œ¥ê«V«;€N¹\Æo~ól6Ìf³�X"Á”É<Õ‡¨T*hµZ¸¾¾6 {µZ!Š"K_Öï÷1ŸÏM™B•J%»&ûÉ~‘è˜Ïç( ¨T*ÇãñØb²^¯£^¯#S­P ³Ýnq{{‹år‰»»;d³Yó-w›/—K¬V+Äqlª/ú’sCk|è.kÆ«*°8Ç´ÞŒ Ž*¸Ê{é¡ÒHU2zm­a¤€$ 6œëõúÏgÝ�¯ÊA—4"Á÷øø”b²ÛíZÊ£Z­fJWYµ�ÐõLIMo©µ3ôz.ø¨í%L•€8×"%p¸~¥‘šNNï©à(wﻄ¯©@©Kž©Bwîó3®³ô Áe% éUˆðà*F\âH ­4…Äÿ8ÝG:鸫oÓ€ï}„’‚Ò¼†ªdØ'—sM}¨Ç¦µÉ%(Òú掱›bN?W$íºîg2K_Å{sœ³[.é¥÷N#Å\âì¯LÓHõ™Kv¤«¦mÑøÐg[Zôx·mi„”¶I §}„ЇLý c²¯ßzom¿¶5�v뛑ÌåK@Ÿ±¥kºÞ×½OP¿�˜!)®s„)Jµž–9~F(éÜæóDSï)ùâpnßÜT»î8’çÆ%©µÏn E�ïZ;’Ƶ™ê[ú^ x—ðá:®s›Ï£}?Úww¾¸ãçf:®Œ%�3*G9&\‹y}~‡K’ÄH}÷yæ’¡ü®ì¦ÖóÜgdÚ|Ù7Ýyû1ëYIúY_2OyóæÍ›7oÞ¼yóæÍ›·Ob n)ØEP›@�kþÓÏÒYóDb­ƒÄëPi¡`z’$–m:�Hâî&˜D0BS¢�$â1 j°Ñ41¼?¯¥9øù^>ŸÇ«W¯prr‚8ŽÑëõ¬žIŒZ­†b±ˆ^¯‡\.‡0 -Í[¥RA³ÙÜIMÆ”[ù|×××888ÀÅÅz½ŠÅ"šÍ¦Õx*—Ë–rm³Ù B }»}J�óþý{œŸŸãññïß¿Çåå¥)d¦Ó)†Ã!V«...P*•¬Ÿ¥RÉH'XÙlÖ”5™Lqc6›Yúº$IŒø«×ë–"x®5™LŒ˜"¨J*oÚí6’$Áp8D­VÛ©ïÃóØ*‹HÈÔëuÐZ­Ì7ÓéÔê@ ‡Cär9T«UŒÇcS^ÐTZðžóùãñØÒR±”ÍfDZ)‡¦Ó© WWWØn·–VNÕqnJ5‚h¥Ri§v @‚�‹Åïß¿G«Õ2¿hŒr¬$Ï„§áªbQ„s–ä§’¾¬õÅ”nl?:^›$îÁÁÊå2¢(B¯×³>Àdl¨ØO¶MÁ6»�F¦F£¿Ó@8Wå€�Ô�$HÖëµ)�è7'�H^Ÿk!ûÃãÝCJž¸ÿV`™ã¢d•€Jé8³½ʾÒWAX*1USjjI¶›s×%ŽÔ¿.ù•Fœ¸çèóå—šÚüÛ½–ÂzLH«ŸñµªñTŵ�0rIZÚ? »Ç¸ýK;Þ5í»Kœ)iáöCïïŽ?S¥ëÑ‘tTÒF¯¥¾dì¿DÀ±½úZkØ»õÕ¨nÒïJš°ÏÝ4kªÔqIRWµ¤þe¿øF¿¿¸}y||´ …BP©T°ÝnQ*•vÒŠj“(æw7´~ŸYÜT£›zÜ9ÈÍ Ó\Ø?÷ü´yæ~û^»æ4<†cÃZ�\c9Ï)Sé#ÝèÀ{ë8hz\7•�¶'­�úúCÄŽ»¥];m§»+ó¤‘7oÞ¼yóæÍ›7oÞ¼yû$¦ÿ+HÁ<óܱê’FÜ?ŸÏwv½3˜<ÛíÖR#ÅqlÀ�Y¦¿bM‚;Z› A]*&´¦ƒ¦v"øppp`»vƒ @Ç; !­Ñ@Ð� ,É’Ï>û £Ñ···¸»»Ãv»E.—C©TB±XDÇ æ3Åw!÷û}œžž¢\.ãêê år™L···h·Ûè÷ûø�ÿø¼yóèv»øúë¯ñÇ?þ�NÿüÏÿŒÙl†÷ïß# C´ÛmA€Éd‚ÍfƒB¡€jµjµ„�&“‰ï­V óùÜH"¦¯¡‘´;99AE¸¾¾6ƒéßP©Tð«_ý ív¸ººÂÍÍ ŽŽŽðÍ7ß`0©<)«‚à)�].—³:Gß}÷€'��éÛXc‡18›ÍP,­VTµZE±X4Õ•‡gggX¯×¸¾¾ÆO?ý„»»;œžž¢R©˜Ú‚×%ùE€}>Ÿc8¢×ëaµZ¡P( ^¯iÓï÷q`W!2�ðÃ?àääù|ãñxG §Dƒ_/•Jð“¼PÒs±X Óé —Ë¡R©ìŒ‰%v Ð)IãÖ„ (G2‡©ù4tSÜi� %8HX&I‚(ŠP.—FÌàT°Vç– Ò)x»Ýn-îHö)A¦ÄŒþ­}QÀ–k�£zNÕo$ƒÜëô;}@–þTÀ]IºÛ^�C×=©^âõ´¦œ ô3ŽXg†kuE¦®Tß�däz­5âôþ$ì4õ`É 1‘F½dÐ*ñ‘öÃã4F•ÔÐyÁ¿µ�zŽ… »j ÷s wÕ;î¸kÿøÛM�Èß.ª¿yŒ‚þiª&¾ÖñsýÎ{éüáÉZpúl|‰üѱsûÀù¯íbÿ¹>r¾ªz‘,´ .q@RDE4%…tŽ)Ñš[.¹¢Ÿ¹ÄT†8::B¥RAEx||D·ÛE­VC­V³çšú€Ï ª¤4¹®¬V+#•4�®»î{ª@$QãúN7¸ñé’°ºþ¸÷Ö9Àã]E©¶OI8=ž1B•×@}–؉ú’ýÕu˽¯û·öáC¤’ëç4Û÷þÇ®‰�yÒÈ›7oÞ¼yóæÍ›7oÞ¼}#8 ª|�ÿ�3µ˜ÖXÑôVª.` Àjµ²4_³ÙÌ®M›`‚ÖHÒz |bÛµ6‡a<ŽçDžwFëµ4�kOÊ�$I†!ÎÎÎP¯×-EÙx<¶ôhAðT3„÷Y,h4–¾m>Ÿ‰Óh4ðøøˆN§ƒ  $¢m·[L§SÌçsx���±Ý>Õði4( ¦R(‹hµZ€“œi·Û¨Õjèt:˜N§‚`G¶X,lì8nqãêêÊÔ(¼G£ÑÀéé)Â04RìääãñÃáïß¿7€F£‘�ÀSŠ=¦#P¶\.­ÖÓr¹4²1I”Ëe¬V+ŒÇc{½Z­P.—±Ùl°X,Ì—…Bóù¯_¿6b¯Ýn›?+•Š¥½K’õz¹\óù···èõzxxx@µZÅ«W¯pyy‰L&ƒn·‹Éd‚ñxl»ï©ÀânqÆ�ÖÉ 9‘É<¥¿Ó9F2±X,I•Ëå0�N�t™N§ ü‘4Y.—Fxé|¡?Ui§*¦{d›ø™¦NR₪/Î'U:Ѳ٬¦Jbqîº5ÏÜ]ã¼¶ªU‘6�-f•€Vp0í:.°ÌõL -Æár¹4(‰­€<‹ÀnÚ9U‡‘èQÒIÁs%Ð”ÐæºÃkÑš¾. Ö¿(ŠŒüäk¶s6›`ÍëRuĶríãØ* â’ˆG_:æcŒ1¬JèÕûpÌÜ{¿+Ù²ïÚûŽßw­4‚È=oßýôX½–ÞG_«Š x&ËÜ . ›Fh¼Òï$ŒXÛ�sÚ%Ï´í.©àƃnêp‰->$5U£Ÿ±.ùšFŽñ8­Í§SÚ˜(�·�@áû…B�FÃêÞÍf3üøã�8;;C«ÕB¦âc?ŒÌQßRQűqÉ0w]ÒpûOrŸþskÜ¥ÅÞ¾XvÇÕ�—ÌÖ8ž›i¤ ý±X,Œ(× ì3Ç�ß/Ø'—øtçÎǬGidêKkÉÇÿ!Òèÿ²VzÒÈ›7oÞ¼yóæÍ›7oÞ¼}ÛG¹ÿäkáf® ÌçsÔëõŸíÕt]¬9� R¡�×n ÝÎöÑ�¶ |Œ ª 1Á$G °ˆ�ÍfÈårh6›h·ÛF&°æïÁº;¬…�‘_LU·ÝnM <ÕÊÉf³h6›¦€Èår¸¹¹Áz½6ÅS»ÝÆv»ÅO?ý„Ífƒ0 ‘$‰‘-apBåÄéé)ÎÎÎðûßÿÞR¾1Eàl6³öO Çd21¥S¿ßÇÁÁJ¥ªÕ*^¿~�ÓÓSÌçs, DQ„ããct:ÜÜÜàêê _~ù%ŠÅ"f³™ù„Š5­#¤  ¿Õj…jµjdbóùù|ÞêJÃ}ëØKæ>CÓ>ÿæI#oÞ¼yóæÍ›7oÞ¼yóöI,KƒÂ4^ü‡œ€• ,ROuH&óT;†@èp8Äññ±ÚÓé‹Åù|qÛ½ÖRÁüã8F¹\F¡P°”uÜYJ"—Ë!Š"#€g DývÒS\'�¥ ¯ú¤P(K�À0Ór%ÉSêºétŠÛÛ[¼{÷ƒÁÀ®G5ÃjµÂ«W¯,õÛÛ·oQ©Tp~~`7ÕI”üÑjM§SSØP}BÀ˜Š$Þ�þ¢?çó9ÎÏÏÑï÷-MŸ¦þ"áR(Ðëõ¬ÿI’ÑôÕW_áÍ›7Èf³è÷û(•J¨T*H’§To¬ÁT­V±Ùl0�Ñn·­>�)‹¦¢`#ûMÐ Þ¾}‹0 Ñh4Ðét†!¢(B§ÓAµZEµZð¤hJ’µZ ³Ù Õjß~û-þò—¿àêê aâññ•J˜Íf¸ººÂp8DhµZ¸¸¸Àåå%ŽŽŽ�ËåÐëõvYÜ1>ŸÏm>, ÜÜÜ ^¯#›ÍÚnr_T- Ôj5#ìhŒ­ÓÓSKqGr%—Ëí¤q$¹ÆX_,;±OâA_»à6�0Íx IDATq¯sÀÎÎmÆ$IMÑFÅ dà™ =::B©TÂÍÍ�í¦'(È6q>ij"MaG p8"ŽcS2iŒ³Mº›žä�’LôÇŒs˜;ÛI<Ôåú¤`¹Ö!ØËu‘¾&ɦ M£¤ ¨’ìüœ×âk£‹K¥’)ŒØ?%Ê©¤`{f³ÙNº@�ôµ’T$ÈÄÕ¶°ýªrqI í#×X5ú–± ÀÔ•lãI RŽ�nÐvjí™4bT�bŽ¥¶Wûà*fØ5Ý]�}A¤Ç¥瘦 K#jµOô‡ªPôX­A¦óLˆô7}†¡¥7L’äg¯ª[x=­¦þSâF}«ä’®\G•`P_jêF’äœܰÁsØGú€s›ë8¿§ðšŒ'{úƒŠj%H¢(B½^Çíí­=Û2™ :�Žmi4¦”½¿¿·µBc™JÙår‰z½n@¸‰„é9Çu ‚ Øyîp-‚À6…è>Æåå%noowjö|Ôg—eú¼áÚËëko)€˜–†`}ððð€8Ž­@´¦ Ò·Ëår§¯A?‹ES®°îÎh4ÚÁŠÅ"ŠÅ"ºÝ®Õ©"1vrr‚‹‹ <>>b<›â*—ËáööÖÈ‚ƒƒ«]D2ˆý>>>ÆjµÂt:Åãã#�†¥‡Óz$2˜Â�Äc­V3 I «!¥€ã8Š"¼~ýÙlwwwøÓŸþ´C$$I‚F£�‹‹ œŸŸ£Z­"“yªõÃ]âËŒ'‚­Œ¿ù|Žb±h»É/nê1%HØ0Õc£Ñ0b0 Ã%Êr¹Äd2±~uë:¨Â… `ÚîqÈu^jÜ¥Í ¾ÖÏN&< …*• jµÆã±­!júžê;%º4=eÚ.t½MŽ?sׯ›¦B£OÓÖš zs­p î±îºB?Ï !öUk1ž©þÐñ$ØÍzD$�Ù_†yŽŽ»«0Ðctü]ÒB_«t}Ügêõ·úß½~ÚýÝö¦­çjikü>Û×O÷~iŸ§:n¼ì#×ÒžEú{ßXéq|­˜ÞOç㌛ H®(i¥kFZÝ{§ïºN¥ùZcN ´´ã\SŒq¯©]Ñ”ŒÔãÓE^€m¦Y,žH£££#ÜÜÜXmÇW¯^Ù³®P( Ùl¢Z­"Žc ‡Ã]Óãj½8näàz˜$ÉNZ¶}>qcW×?Ž¡®¯ô»Qz-]ã\_Ò:®ú|ašÍ&ÎÏÏ1�r•CÀ3q˜$ ªÕ*J¥îï©µù}¯X,Z»ÓÖ"w­pÛ˜ÖWµ}¤ñ¾5î%bÈ�· ó¤‘7oÞ¼yóæÍ›7oÞ¼yû$¦»Pu§`ZŒX‹ÒówA¥¶€Ô6Lç®e‚*wK¥’‘Fâ•4rMÏ`µ?lÓ¶¸;Ì]°L4žKcûÎÎÎì3£ÑÈ ‚?ÅbÀ“J†ä�(’L¡Eò‹ã†¡ùˆA‚ÉI’X�"åXë„»¦Ìf³�Fvߣ£#´Ûm£P(àúúƒÁÀ”d‹ÅãñØTGLE1�ñðð€B¡`ã�$ÉŽ:…dÞÃÃJü,›Íš‚‚ª"¶{±X˜zˆ;w#3WEÃЈ§$IP, è{õêÞ¼yƒz½Ž$yªOÅO$G“:þ$dH ’dê;~Æþ±þ’Æ*}^,Q©TP*•,Fóù¼¥L¤_r¹œ¥µ#xÈxrIݱíÆ)çµM 乄’;9×7› ¢(BµZÅz½F§Ó±±$ÁE€T}§D•¶×½?U îNo—4RP•€1U:ôKš’�×TE‚¾¯}N’ägÀ²»Vè1<_}Í¿Oì ÿÖ”KœËZ7N×E%ŠX£Hëñ^Jêšåþ¨wɼ}$LZ\)¸œægšÖ�RRŒÏ{l%Y\08�èÒsݘI#ôö�»iD‚KȦùC�u÷Ú:¿Ü±Ùwÿ4_ðUˆ¸Ç¹m£š†5Ú¨öRÂNÛæ*¼€g!�ÌÒv»sؽ¦ö[ #WEÂyì’ÍŒ}>ëõZ®éxèxr-M[[˜Bt»Ýî¤Yem½ããcÔëuôz=S9þêW¿Âû÷ï1�¬b£Ñ@>ŸÇ`00rWûÁÍDZmØ(‹¦¼¢*,-u Î×´˜b_]Ò˜¦¾M›iä¦Îu^?� <::Âùù9þüç?Ûš¤ßgø]‘ã—ÏçÑjµÐh4ÇñÎüÒç¨nŽpÉÙ´ù©ßé´ol»»f¸ä©žãÆÕKö·&ŒOyóæÍ›7oÞ¼yóæÍ›·OhšfDwH§H4E â( ;à©·î?õg´¨<�'(<í꥚… ©¦ªÙ·°¸;¦÷ýCŸ>¦�*¼'Á |kµjµÑjµŒì�F˜Ïçˆã777X­V¶›YwÝ.—K¡ÑhàááQ!—Ë¡Ñh€ºg±{0'é�)U˜NŒ5g¸S—dA:M¥RÉ€+è÷û¸¹¹Ál6Ãññ±)’XK‰ S°1ÝÓ²ýïÿþ/ªÕª¥èûóŸÿŒÑh„ׯ_›ÿƒ&“ Ê岑=ÓïîîP.—E‹…‘?'''¶ó›¤•]ÅbÑÒ¢P(X�J¥6› îîî P"ÙÀ4‰ ¤ºäáv»5c5�ô"iE2ÎUW´dœ«Ê�„aÇØn·–f‘À¡Æ·‚_LO¥±ÌxUµ�W‚¢.©k{£ÑAàøøggg¸¿¿GÇâ1UŸÖ[Rÿ¹D¦;ß tÓ‰é9ô•¶O �]�›Ç§¥2JÛUÏõ#mà½tmÜ·ÆåóùŸ)k¸ö¹?îÑ/.YĵÃ%"ôoé]�5 èM÷o×id€} �¾fÒÖ\mßKØ>ˆï¥.à¬æ’1Cl“K*©“K<ÖU?| ¸¼oè3ZŸqJôèð­êE›7.i”Öfw}Ôù<ûê½—¾Ï×zþv»µ´¯$«Óæ²ûœçóYßK#ù,àz«„ÛñÕW_áóÏ?G©TÂÁÁÂ0D¥RAµZE§ÓAǨV«ˆ¢­V ù|ÓéÔÖP�ç|^O¤Q¡P@­VC«Õ²Í ‹Åb'5§Æ�ƆûÇÝ ã®ïîØ±ÿê ×4¾õs]�yîññ1NOOwˆ~Q¿r­«Õj899ÁÑÑ®¯¯­m¬ÏıVâÝ�ÿ´ØÜ××ô9ê®EûÎÿÐ÷É�¹ï/1OyóæÍ›7oÞ¼yóæÍ›·ObLóöðð`»¿ è(ÀMp›Ê* òù¼÷$6þ{oÖI’\ážä’™‘+ÉZ»»ªh `Þ¥·ù÷Òƒèq0$¨×©¥«Šdî+™÷�øœ'­<’ìÖUÝûàLFFøbnî<ÇÌœóC"ä RîŸrÀ!�@!ÇÏ%Š)­"˜çeº÷rô,­8ãµ:DðŸ38¸ÆPÛíVUUi8îy¯V«tfËz½Öl6KA£ÑH�FCoÞ¼QUU‰T999Ñ“'OTU•V«•¦Ó©:�Nê$^½~^ˆ¤ÏÀ³›››¤cI{(óù–Å�BÇÇÇ{ Qûãñ8E’HBü@ Íf³½(:·=o å{dF$ ¾CùûãùôéS½xñBƒÁ೵ǣÐpV:::RUUé 7¢|Y!ÝÝÙ[ŽzyŒäÖ³ØÿCååžý-ò{Ÿ-¤Q‘"EŠ)R¤H‘"EŠù" ˜rñ�9$ÃÍÍÍ^j­Á` ëëk-‹”v @\Ê{«#€ Òý?ç´ Þ¸w0.ç-%ºÑٟ͹²# Áb@^>{*1Iéì£ããcõz½4™L‰°X,R¿cÔUUUº¾¾–¤eÄwÏž=Kú�4ÂCÙS­ù™ ê%Dê5Àëù|ž@™««+ ‡CµZ-­×ët†Ór¹Lç:4�ž%uss£Éd²çåþñãG-‹qž:t å¼£ív«Åb¡Éd¢«««Æ�ÇãV�žž¦TtOž'�tâùx¿µ’TU•ÎÏÏS @ìf2™$ •g<Ýc„6ÞzDJ]#�ÃXy*D÷J�Q!´×�U×…Ï÷máíöëq=ñu�Ô×^'Äo'Ž|¹/À®¿HhDpØÏ¯ÉµÝ£ìü¾œî#Y怲úÇÇÇ{$í�6‰¿/ê>GÕ‰�kNêˆÁø93ˆÛOLø[@í¸EÂ$îûq=z†F’Òz…“†GÓÕíß±�u×sÄvG[ÐS$b$I´1ÚXWŸã<‡°�¶ç÷ø­V«�Äþ°^¯Õn·S 5é.[¿ßWUUúñÇST¯;fœžžêéÓ§Z­Vº¼¼L;u:‰?™L4™LÒzQUUÚã8÷Ï�a¼ß‡ˆöº9#ârc|ˆXÉ]?==ÕË—/SjYÞ9"©ç¼—‹>ø!Å0QÈ€N‚Æ9ìeçlå�ÄyþXŸïUN¶�Ò”÷H¨V«¥årùYKo³¯{Q�±o.uöX÷® âØq6ÑÉɉæóyZË|maÿôqbfOöw¶œÓO]ô•ÛmΑIîD%G.þÿA iT¤H‘"EŠ)R¤H‘"E¾ˆà‘ßl6÷<áÅ9/` �Tvggg:??×z½N@8‘ Ñ"í{ó»Äh@'žHI¨Á3œ4r€ñû¢§õCÄRIy6¬ídÒnw­²^¯Õh4ÒyDOô’©ª*½xñ"��Cô )Üf³™F£‘‹…f³™Úí¶¦Ó©V«•ÎÏÏSŠ˜ªª(O„ã¹X,™r~~žÒIõz½D6ív;Íçs5 u:�µÙlÔívu||¬étª'OžèææFïß¿×ùùy²©Õj•ìäÍ›7‰€"íÙv»Õ‡4 ôáÃ}üø1E%]]]©ªªt~ÔË—/õÇ?þQÏž=KõšAÔ�v‘¨)Žõz­ÑhôY$)Ø3?l�9¨E$‘´Ã#Eh³¤½è'“‰v»û<Ì1÷ÀwÐÛw€ÝÉ¡xVgû>ý\b}.òCs²˜ñ�„G�§wÔ™Ÿm‘š;s…g!\Î!ñôŒ¡Ïa�¢‰à> :qÁ]/'F&16Œ•÷ÛS zzÄH¤ç€z¾‹ié¼|/ÃÛ•#~bôR$áÜVøí ÿ¡´PqÍç³—õëó¶ÇÏ.9ÒÆGÂ4'‡¾?´'ø˜xH$Öü¹™äÉȇ„ûùÍþËZ'í;78iIÚHÅ(oWŽ s‡ ·­èxÁ÷Qüí¶ÆZì{�”I›=¢¡¼Ø?î?::Jg>±o]»Z­ô¯ÿú¯‡úóŸÿ¬óósÍçs}üø1½-—K- ½ÿ^�F#�'xss£~¿¯‹‹‹¹Ä…ƒ uàüiÄÚ–³§(‡È¡C¤P]¹9²Ðuí�÷JHp‘ŽŽŽRJ]úìk(Î,ÝnW§§§êt:’”œ+�†ºÝîgät]ßãú˜{¦Žü} ‘VG„?$‡Æî!)¤Q‘"EŠ)R¤H‘"EŠù"a8i$)Ù€¹(åøóósÝÜܨª*µÛí”n f |Š ·ƒ¹±Ñh4R”À�ƒÛÒçÞ Ñ{Üïá³÷‰ºë€Ìèí€úŠ€˜×뤀žÕ9ðŠkív[UUi±X¤h.Æ¢ˆ3vò§Ó©æó¹:�N:{ŠÈ@·ªªR!¤8“j4i½^§ˆ€nÀž~¿ŸúÂX{”À—¤”fn4i6›¥ïñ,Þn·jµZé\‡Á` ù|®Ùl¦—/_¦³#žW"ÈêÄ ûCDÜåå¥&“IZ7ªªR£ÑHQe^~œôÍ绯-@N$y ÀT$“Š5 М±ŽÞãu‘<>g!ܳß× /ËÉ;I{óÚûèg±ŽåHêv<Ò€Ç>sd‰÷9’q¹h_ó=U “Fq|œõ5šõ’º£Þë€hïo´M×›‹¹QOñ¾\„”—ËÊÕ�â�ÓQñâmö½ð O½Ò=)s(JÏÛ‰­h/±��Úqÿ‹r¨o¹1‰¤’ë?FVºž½¬h?¾Ö;ié?‡úÁ»Dv»ÝNçé}÷ÝwúÓŸþ¤?üá�Fº¼¼LŽ ­VK“ÉDoß¾Õz½Ö“'OÒ^Ól6õäÉ“´¿pž�Ï1®w»]5›ÍÏH£:]çæ‡ëÅõœ»ÏÇÏ^O®<ÚÏÞ9�NµÛíÔï÷õüùóä|qtt¤ñx¼GèóÎáÑÏ葵�9€C@ÔCÎ~ëÚœÓON§þû÷�CÿRH£"EŠ)R¤H‘"EŠ)òÅÄÏÿ”öI#�|¸½½M2§§§:;;K„=çí8°àž÷Ú†:ðÈ XDþzÀ:Huà —:)¬·r £ÿvY.— ø@7lô‹vr®ä `Én·Û;0›¶.¡·ªªÔívuqq‘€öV«¥Fãþ|$È”«««½4i¤Òi4î"€ªªJeo·[�F#�Çc­×ëäÝ»X,´ÛíRÚ¶çÏŸ«Õj¥³†í///“í|üøQý~_­VKãñX×××Úív:;;Ó‡4�NÙ˜þéÓ§ÑÒëõôìÙ3]\\$ð¬×ëéüü\£Ñ(¥¿¡ýئ{Ócc´ÛÏrðŠ{ñ„v¢Â(›”ru)á8×ÈësÛqbÊAõº´X ç~Êt€Õu�«}^בFÌ3Okøöí[�Çã=Â�'K|ŽEà6Gº’JÚ; e]âš§yä;R2ÆQQß>¶Œ µë,Gz; ãd—ë.×_Æ Ž å{DUn�Šë[ø�#àˆ0tÒÈÛ‰~|]w;bíñ9û–#-rKu xŽ0ÊÀ‡~/Ëçe0ï÷çæynÎæ®EyÌ=® 'XœhqûÌ‘K^Ÿ÷·Ngˆ¡Ü“›_q�ñëQWNDR¾÷ÃçQ´YúÇËmÞß=(}P¿¤½H@ôJôÌl6Ó÷߯ÿüÏÿÔ×_�œ7bJÉ>¤ÞF£‘öæóóóôž´ÛíÒ™�ô‹HØ'Ož¨Õj©Õj¥uÍuɱQ™#æÜžâ˜Ö‘€9{`ÿd¬ÑÏr¹Ô»wï$I_}õ•¾ýö[M§Sm6µZ-IÚÓ-‘¹èÀׇ8vÒ}Dw´Mìžç¼¿¹µó1ýtÉ=—[·~O9�•B)R¤H‘"EŠ)R¤H‘/"þÏ8ÿøîø?õÒ= å3½^Oý~?E+õz=-‹=pÒ�SÀy@fi?� $ �Eí‘"z¤ãyîË�ê<úg�4ràÁA¨pEBŠhrœƒ˜ƒŒ@O’Ôív¸MœÌã<ôÁy¤K›Ïç{Ól6Ón·S§ÓQ£ÑÐp8TUU©¾Ùl¦�?êÓ§OÚíîÎ¥yõê•Z­–nooÓyD³Ù,=C?œø{÷î]²ÒþÏÿüOJ5G!»ÔÜl6úÃþ°çMÜjµÔívÓ¹?UUíEFA8�ÅX_]]%; µ�§‡ó3Ÿ –è—“F~Ö}u�u·¥˜öÈÉî'Š{òˆ>ÒAˆxTŸÏ ôí¶E¤{²—ï£ÖE Eò&’KÑSŸhÂõz­~ø!‘ÃÎ9€Gy¸õ>Æ6ÑÆœ1b<˜“ت_ƒ¨õæi#)ì@º�#õ9Èž#ú™‰ r"p�Èìe{¹q­ò�Ôë6Åü‰ä¢ÿxûX==X$ }n9™‰N< k[®�ô3J‰rŒu‹~ðL£:‚$Gâp�§àrÒ£Ž0âwŽôò{| ãó>ÆNå"ÀX¼ŽHæx™uºÌÍŸ:0ÝmÇ×Àœ�ù\Ä^ý^ì|ÐjµÒË—/÷tMdf·ÛMÑÀÛí69Ä,—Ëä°AÙ8dÐ>~rÑ|9â(GXúZ�“h›Ñî¨Û""h³Ùè×_Õíí­ž={¦/^èää$¥˜�Ç{Q^.¼›�z‡öÍÍf“tÁ>î딓onC9ݸžÆè¾ºµ©n-ú¿’B)R¤H‘"EŠ)R¤H‘/"âs(1ûÒ¾·¦tzû?ÚDÍTU•@p'v¸?zÕDz!^<Ï=À-©J<º€Ï|çÀ#À ®çYÿ.záû=^v®g"�ŽÒ4ûsu ¤ë�'÷ÖëµŽŽŽRt†××hÜyò‡ÃT×Û·oõÃ?èúúZUUééÓ§úúë¯5 Ò˜:qH}¤Æ£½xŸžžªßïk¹\j4©Óé¤H''úüLˆ&¢Œ…8ô€ÌAvÈ "†Ð¡{z;@Ž�y4$ c£Dœˆà®��vÀ=‚°¤¨ãl‡¥Ù်Ï9Û¨#‚˜Æ9pæ÷:ëÏBô1nîIÞhÜ�ÏÑëõ’7¼ŸûÄâ`lnŽÔÍ®5›Í zÔ@®Ÿ—Æõ\bǾFD�ätìsÌ oÀYZsJ|>4~‡H„H4øü‹eÕIâý'’@>DZG'šœ˜p;ˆvèí‰éçh“·/>Ë­ë§ë¼ÔÎIüμ<®Çu;Î}ï“h¹yÊ3>ç#IçF¾}Ü||�0rÒÈûé„a.Â(Î?¿ C®SnŽ B'q<ý}ŠÏçÚäèÎÓ;ÆvºŽ î‰Rå~k·}ê„�q²úøøXóù\ßÿ½þú׿êÕ«W:>>V¯×Ký””ê�ÇÉ�§ŽÛÛ[���íë¬s+óù\ƒÁ@ív;õ‰ó‘ü¬=éþ< HüÇy—³£C’Ûïø›ñ£,¯o<§´¹³ÙLWWW�Çéz³ÙÔ³gÏÒÙRìé³Ù,EðºãÁZ…3ˆ¤ôÞ€øû§·ÝçQÔM´?î±:zHâX<ô|îz!�Š)R¤H‘"EŠ)R¤È™ÜË¿Ùl&ÂÆÏlÙívŸ�©Ól6UUÍý¬? IDAT•ƒ�$íE@X8°ãiÁ" ì�¤­=ôpài[îqrd�v*G/BIÙCT’u yŒ|qRÖÛ\G08xËß’’W·÷‹ñ:>>V¿ß×ÙÙ™ªªÒz½ÖõõuSl×ÎÞ¶(Ø*vÊx ¿£££˜zÛûÓÓÓT?žüèØm45æä¡@N–øZá<Ïy$^ŒúÈ�ã<çŸ#AáëM$S¼=N$Æñ�÷û¼ð9 aèv•# \WѦ"p-i�Èðy”nãP¶·=F¸o‡×áçÚPûxúú‰ž8VqÍð½,Ž·ïw¾'º<2&îaâçæ\ì›;Wx?ãO$«½,Ú£N˜ÌìÍI£Hl9±Æçþ�÷ÅŸ—îß!Hñæ¤ÆÁÏõˆcÛæÀ6zÀæ8Ã�T×§ë�—vAš2—=]!kýc.yú©HBúx™9âÈ…2øüÁéõÇ¿;�ÎCG®+¿ëtR0Fõ¡ˆ)Ÿ3ÜÇÙjì D{B±ÖùÙ‰qïðÈ"žÇ–ooïÎ$úïÿþoýýßÿ½...4�NÕh4‰1u{{«7oÞ¤èÛÛÛÛtän·K÷²~eCÊTRnv:UU•ÒlÆ÷'VrÑ•¹}+7þÑr{Ÿÿí‘[>^···ú—ù—ô>IdÑùùùaÄ:<�N÷„V«UÚ/‰<¦¾étšœc| æ]ÄíÕí?7o�è„‘›7‡öÖC•Ëcמ9‡Ò¨H‘"EŠ)R¤H‘"EŠ|q°/ÞÞ8HÄ?íî…Ðqà×ÐÊ‘#< ²^¯S›6›�~üñG5›MM&“½(xr€tÝß9�ÝARñXþ!ÏQúøÁÛè�Dô¿ó{šÍæg¤ÉÉɉºÝn:ÿÇÁ³øã^é~®zçL¡F£‘À+R¿@H¼ív»”6°Ýn§¶D&ÚPÎü^ìÊ ¢Hú½ÑóÜˈ‘ uV`¶:ÀÇ�ùØŸ7xN»Þ뀨ò>úæîó²µÝû Héã0øúõk=}ú4y¸s/÷0çsí¯Ÿ?|Æ6!��F\#ùÁ3ØËjµJýÀK]º‹˜›Ïçi| ÃX¯xÎÉ$·µHzøßnÓÞ¦œÞcdŠëÞ׌¨;'Õrë„—õÛáŸYräV_w�¤q.DâÞõã¿s„uÄ~çúrÈκ/×wŸ¿´Ïǘï�ì:ÔöHÆzã¸ò½“Ë9ÀÛÿvÂ6<Çõ8î1u:óþGBñkNÂóŒ×S§‹8¾þþÇ!Gˆð}ŽHao_.—éójµJuÁÈ³Ì ·gÒå1õîÝ»tv‘§¿ë÷û:>>Öh4Òf³Ñt:M©×ƒAZÓZ­–†ÃaZ¿‹…–Ë¥æó¹–Ëer�8q}²ßæì3êÕû�_‰ûf‡\9èì/ù‹®¯¯õÇ?þQÿø�ÿ˜ÎIìv»é<Æëëë½³Y¢“R´CîcO=4Grï~~�÷Û¯ÅÏ9çä·�Huë¢K!�Š)R¤H‘"EŠ)R¤È´=])Oøí@�ƒî™ ²X,À뀄ƒn0óç!Iv»�Þ½{—Îp€v䢈|D#yãmò¶�ž½ÄöæÀ|'eYrç„xÚ/o{Œlò¶áM ©ãÀ<V¿ßWUU{¤—G²x¿\?´¡Ùl¦³j...Ò¡Õ\�·5‘^Ø uÉá ús»qÝ9 ï»Ýn/5b$øí84ŒD}ÎE'ä€èœÔvk]O§x®?{öLUUi6›%»h·Û{KŒxÛÑ�ƒÍ1 ;ôTŒãñXWWW)Z }Ó'ÀIú PéR�çÞþAC›ëÖ´Á i� ÏÙlOOïË­I<翽ŽHŒ:™ï÷x™n£‘ô=$±>_ãc;ãü®#ê€ñܼ‹ß?ÔÖCs§Œç;æHÎN˜CÜǶúu×KŒÄyh­pÛˆýˆãÆþìå?F_‘øŒ¶èëÁ!B-W—·-ê ö1Þíœô‹¤:…H^.—{ûâ©V!ùÙ�â~ü˜Þ'“‰¾ÿþ{­×k5›M�F#-‹½1AÿžâØÓÚº�Ä~"yb)ÇuthžÕI´Å8+uí/¤Q‘"EŠ)R¤H‘"EŠùb‚·=G£ÑP·Û•$u:�½ î¾Ûí´^¯5ŸÏ“÷.à/õÄH—ÑýÈ ÒµP7¤Žƒd‚Ð …�tŸâÍÉ¿?-TG*DÀ—èaíõºøw±Sô·Û%€^Rò’>>>N©k6›Í^ºôF¤’ƒ|ÍfSý~_ÃáPzúô©Úí¶–Ëe:°]u:�4îDy”R£ÑHcµ^¯÷&/‡kØ€=:óóŠ"¸Ám>ç€ñÜæÇLæ¼à£ä€ú:q}½^k6›i·Û}–ž.Gê9Y@»ÜK¿®/9ɳnïs~ãK™ØÅõõµ–Ë¥Ž��Õív÷Òù9DEVÄkÞ.ŸNÄxû|®. }øðAív[ÃáPggg)¥"`+gG±&1/–Ëågç§¹nrÑSÞŽ0ætÍgO)UW–×SMæÆÇõ#ÜžbY9¢ ê8<9‰ý÷²½Ž:PÚI“œÞüÞø}îzœ®‹(¹qË�©÷)ö/ë¹µÎË­ÛWœ4Š@xloÎVšûÞ.êÉE E¸�Åh0o}‡Œõ>>õÇÛËÌ�µ?ëmã;æól6Ól6Óññ±ªªJŽ�Å�.’öHoœMHÇšäz¬ªJÇÇÇúé§Ÿôïÿþï:;;Óf³I{#ÑBÍfS«ÕJ>|Ðn·K$ýƒÜ>;;ÛK;'i/‘F‡rÜÄÇÈDznnE"(Ý÷Ð{Q”ív«üQ?þø£ž?®ñx¬�?êúúZ£ÑH?ÿüs:7ŠhOlÈSÏB¾‘¶8’I¼7Äù�[3°Óœü¾ß+9[ökq¾å꭛˅4*R¤H‘"EŠ)R¤H‘"_Døç CR"!ˆ qÒˆ¬VŽ0®¯¯5�µX,¨Âù(’öþ©—>ø]ðúïv» ¸]¯×‰¸ …\¸r@Þ‰(¼ucZ0¾óH!Ük:~çç»ÐŸè ìiS¨ßAœœw*¤Q¯×K`6ià°8šƒ²9[†ï‰¸à̼›Ýk¸ÙlªÛí&of¿Nc„ÙíímJëå  žÜDy89ç6çýu‚½ùçpåQJžÆgD¬#˜ê€¯CàXŸ£‹Å"¥)r2"–9‚ÄmսɀÞÎC�a¿îíĆ�ŽŽ4™LÒ¡æ¤Nr§í1ÒÆËŽöǽ¸íø‹„ÄÜv»ÕÛ·o5ŸÏi‰]KJkvBH§ÓI׉�£gýC:Œ}«[ï\¼·ao«ë‘¿ æ{'`bdV®¬hã¹(�¢‹ý>´b»žâ/êáðÇØëŠç�åÆ#Jnnäl4׎xokæ v$ì¢~ÓüÏEÚäȪmámóg"±˜ë§¯÷NÎÖÁÔÈOŠÙXæ!‚Ê¿�:öõ>îÝÑî=*ñääDóù<íiìq8Ëp¿ëÇmž"±;¿�Fúå—_4�NÓ^:�N“®Ùwçó¹~ýõW���éääDý~?µùèè(=[UÕgQE8иÃ�ë¾nlrs4î3Þ÷h q,rkD¼Ÿï ç§Ó©þíßþMWWW)Mèx<ÞK:�N÷O¼ož:y·Ûí�èD8{€GˆÇ~û|©³ÁÇÊ¡w€œë¾Ë]¯kG!�Š)R¤H‘"EŠ)R¤È‘Ü?²� x¶:Xà`þv»MéË+¦Ói’«ªR«ÕJÄE#h!)E:4›Í”¦×르lD¾xÚ)o?àG$Œœ,â7÷»×.×ñ’FÜã5_æbj8PE[Hå�¨œ4â¼"¢±äLRÓqN‹÷ òGRª—{!z:�N:ÿe¹\î�Š€�€3åºñþâ5ÌÙô3~®c@môç຃ÞÜq½Å¯×?ûß‘dŠ oè�€Ž“9`t¹\j<k»Ý¦¹�#>r@~ŒÈ�ª¹zcrÀ»�>:™Κ°\.õñãÇ4×sä^Ž©w¿ævŠ}æÈ3þfüyv½^§(("'ÏÎÎÔívÓzù…-µZ-õz½Ïô×¥h>î~-ö3‘ñ^¿?¦\s�ù˜åÆ�ë1�Ÿ÷éAR76¹úbÝ9à4†šÏè¢"G<ø³Ñ¦]b›‰ëåÐ<ªÓ‘·¯�öÏuà±ëÀuÛYgƒNHçl6×~ßýû¸Öäú#}NlQM®Œ¸æÅzãzXGD×µ-®E¾®AþÄ=NL{ÿ¼ÌOöWé.ºr:�j4íí¥ìÑív[’RʹOŸ>i0$Òˆù~rr²—Zóòò2µ›w¾ó=7ê(÷^m3§3·+·½a”Ó�ËnwŸ¾öööVýë_õæÍ›”þ–ç†Ãa:ªªªtÝÏ””œ]œàóÔÞζnÎ];´f<´VzYu×ëöáCº;Tn!�Š)R¤H‘"EŠ)R¤Èþ)upÎAþç€gÒΑúeµZí�{»ÝNUUéüü\»Ý]:µv»½mDÙÑ{™º�†:�NtºÝ®ºÝ®nnn4�$Ý‘Jx¥æQ�Ü�î<^‹P‹gé8AâÀˆƒ¹0ñ € H'H*ê¤vRÆÁú�ŽO�@ô”-Nð-—KM§ÓYäe9¹€0¤Þ¼œÿ@» ð8o�è3Og†^NNNRÔ)Ùh¯Í12"ŽG<Çȉ‰èíú‹÷x€©{&:º>êÀD·iêãïÍf“ÏÆyY9Ò(‚¾ÔååD00 ºä@'×Ùb±Ðn·S§ÓIóp¹\j2™$;wûˆÏÇ6чØ>'šNOOÓ<ÉE©ÐoŸ“Ø:‡Ésèü³gÏôäÉ ‡Ã=q”Ÿõz½æ`¤Û›÷çˆí/M¾Îäl85âÏD=:�³�ØF_Wr *×s t$¬\'Þ†AæuG0>®�<ã¾·7ŽAÝX’8F9½r_øËÉ•íÏEP>ΙÈ\·ùܨëÇ¡¾×µ1 ºð÷O�FômLiG™¾FúZäkÙ¡õ0^ç³Ì8Š@Â`;9]99Íw777Ÿ½GD‡ß³onnôñãÇÏ¢vyW¹ººJúáìµóóó½”sœw‡³Œ§ ÆVâ»T|Ÿ‰¶ôÐà¤l\Ó|ì"å{\´#×ÏÑÑ‘Z­–V«•Þ¾}«««+ ‡C=}úTÏŸ?OŽEžÆØS7w¤)oi�G¿Fb=Î�Ü<Šmuɽ/óеºµL*¤Q‘"EŠ)R¤H‘"EŠùBw¿î Œ·€³Ûí6EÍ@ E!I‹ÅB’>KQPã€Ìííý¹6¤”¢îV«•"mˆŒñs±­‘�Ê–íP`‰×ü:u €›ôB p#¦dª3,¬HÚl6{à8‹tÈ7mçY'õlÂs¹ª*õz½½h ÆœçIûâ}ñ¨-OåÓh4Ò˜µZ--—Ë”F/Ï9�0Öú�\uÄJ´�v €º²|L"xëßÅ(ÚÈx@BÄó´â˜ÇzóQrv~è™xFGŒ€ êt:zúô©†Ã¡V«UJ�Äœ…0¶±¢s #Ÿsgt1Þ»Ý.¥,¢½>÷}Γj“((þæpúN§“ˆO€ÊÛÛÛ½5l:�¦Ù!�bÅØæÇ�3~Ýu�ýE²ÈŸw€=g<�kzNçÑN¼¿?GÌDP:òûy1‘ÌðkDNøvÂÝËþ-d�ëé!‰¤D€ï{¨ÿ.’:NLäô•³ÿ]7žuûJ®/¹g}nÖÙ[œ¿ìÑžê‚/×îñ5ó!ò­Î&©ÂÈ£Š=ú×É%æ²GBóã©ù¢S }öÔs?üðƒÚí¶ž?®Fã>½lUUiÿ<>>NQI×××:;;Ký–”Ö9öóèlñÍ3þžãioã»Ot¤p}ùxÔM>^\Ëí‡.N²ÑæétªF£¡¯¿þZß}÷�‹EЍ&­(}Cg�Fc�(öñõñÄi'¾c=$9;Ë­ß�]CÝW·×çžÉµ«�FEŠ)R¤H‘"EŠ)Rä‹À0 kE¤Ï£<ü¬þq‡,ÐØn·�F)å¤ xâ©¢ #8á©ÏhƒVZ9Øæ)Gà‡6p�û1=%],›ûcÊ;@O£âúŽ wêý/"ÙûëßEâñ5ØSxÆõÑǨn®šÿÿ‰}‹ó;’J‡æ,÷9é÷Û¨Oôîu=Jûܪ‹ «ÓWÔ?÷z´KÎŽ¤{2×Ïÿ!b¸®žH8ùºãå»~Ü!#7gXcÙ»–Ë¥¶Ûm²1ìøää$EÖ²§¢»˜ª.wýöö6Ï›ÍF¿üò‹^½z¥¯¿þZÛíVçç璔ȟÉd’ˆxR–ƒQ×étö"jx¯bÿ#’×÷ê:É�¿¯[>‘œÍ�YîžH¬ø˜²?zDikŸ?®ñxœÖù^¯§Åb±w¶a®_îãvJjdŸq^§‡\sŸs÷äÖЇê}Ho9)¤Q‘"EŠ)R¤H‘"EŠù"Â?ôžÅSŒ¤zo6›”ŸÅ €¿1Á5”ù µÛÝ{ÍzÛæ {E" ð@´€G ‘¶†vÒ?"{øLY~J÷ž°¤ŸLˆöÈ o“ƒ¡®OËHèg(ÀÑ^÷È�àšƒh^G�\^O£q—æ�9ðâ$"Ïî@ ADu»ÝiDY9’RŒö;8£¦ø.z¯Gé!BÉAË„F€;¶ÙŸw}¸Ý¹žÝÛ>‚áÕ�IQêúÁìÜsþ¼÷ÁÛD»õÏÎÎôêÕ«Dº Æö¸�=Ôž¨K>·ÛíDLù|wûY¯×i�q›` ;>>Ör¹Liêæóy"‘�†úý~J�'Ý”€Þý@I°8/üwn½p=¹Íä·ts ¢�Ù!R%>ë„DËÜçÜSÁ€ýÄús¤ˆt=¿÷1�Ác$î ~=w¯·5÷œë §3¾««/‡I{û^ü©ëol¿¯ou}÷v碱AwØðvûžàQ­žrõÐØyy15:VðdqÔv�3 N ìÓ1Òˆúi+Ž0þ ÝÏIÖóÝn—RÑm6]]]©ÙlêÉ“'zÿþ½¾ùæ›m{rr¢ñx¬ñx¬Åb‘¢OONNÔívuzzªóósÍçsM&IJkàb±Ðz½NN3Ñ}hÞûüŠ{XÝœ¥ŸuI*>çÈÚIÊPœJÖëuJm<5�4�Nõüùsi:�¦ôÇ>&¼Ÿ¸¸ýùgg­‡æDtì84ßím¹²ãµ\=uí.¤Q‘"EŠ)R¤H‘"EŠù"L{<µ r«ÕJ÷u:�t݉$¼=Ûív:û¤ÛíªÕj%’ƒÈ–Õj•¼Ì!Hßâ Ó|>×ññ±úý~º^UUp<Š“Xéîótn€Ð«Õ*yôBÜx´‘tLôû} õz½=ÀªÛí¦è€'Úƒç5ÞÅôPšÈ'€)þ¦]Ôá‘B ͘u:M&“4€ãžâ Ò‹H/úá‘SDq¾‘¤D¸yû!ýˆ év»j4Z­V�ljdÛívšÍf© ô‰^˜£MÜCDKô >D¤¸�çÿÞïCâ³fØé) ±÷››-‹t¯÷›±DïœGà(N;¸w'r€»ëò�û|.µZ­tÆsv0h2™h±Xì�?Ä�ÛÒCà{l;銺ÝîpHŸ˜³~®�ƒäN7 m6ýú믩ýóù\/^¼ÐÅÅ…ªªÒz½Öb±H@¦ƒ�©¡|rr¢étúˆî$¹H8ÚÏ�ñ()u=RÈ£Mœ\vÂàÛuŸ#v@ö¹å sŽж˜ûî9 (tàçßx¹ñ\&·¢¾\êHÌØ¯Ç´×í( íŽä0¿c„Wüœ«“9“‹ÞÊ‘S®¿XV‘Ç÷‘òõìМÅÞ£>½¬\”ˆ´ŸâÖÓbú{†—ï÷ûˆ‘tqL|] �D¯°ï·ÛíäÔáû-ku<[ÐÇÕuá.œ÷xrr¢³³³”¶—1ëv»ê÷ûúæ›o´X,4ŸÏÕívÕétt~~žÎÄ¡…(¦år©ù|žÚÓкMD­nOÌÙŸýw´3·S×�ïÇn;¬£¼Wz=³ÙLoß¾MïŽ�Nç³³ñ°ÆÞ×ÙÜ\�ívE{®#g¢â\©û.§·º9˜kCnrÏÒ¨H‘"EŠ)R¤H‘"EŠ|qq@VúüãF£‘H ¢WY#�ä×Àðð+€ç’Ôív tzzšRÝy#÷>Ð¥ýÔëý‹iMðHlrÍÏÓð3}/HÁÖjµöt%)E.z£›˜ÊOÒgà¨F’ØÓËy´‘tVv:�= ÌÓ¾ ú™!xñJ÷‘Iž¬ª*u»Ý”"ïææfï€ñõz½fáU|rr’ˆ5ÒиΓ| }œ\§9�,Ü�ùî!¼î{¿ÏËe,|žøÜñ3�ø›¹à`þ;¢¹ú‘X¯GŽð=r%UÄ¢¬OŸ>éêê*�÷ééiòäg ‰˜{ˆ0ªë‡¤Ddúù\¹ñuE$…ÛíV“É$‘ÐD¿���éææ&]c~Ç3Œ¼L'׉2ð¶xÖÙRnl#èçk$¦¼,_³œ÷rr€fn®jOü�¡)¿®\ÿ>§—Håˆ#ï7£Ûêæ¸ÿε#ö901êÅç^�s¤K®ûŒ¿ÏÕØ–\’÷í¡¨_{b„QÔGn�Ë�îN\øµºû]NRÄù×¥h”áÄ·ë˜}�=˜=ÝB¼_‡úëûªŸÿ×jµtvv¦ªª´ÛÝ¥bã§ßï«×ëé—_~Ñõõur6i6›êv»{ëêíímŠŒºººJë:×|ýÍÍÛºñÉÉ¡yîzE·9ÉÍqo‹¯c’4�õóÏ?ëÅ‹Éò�õ4îc\ËÕWg§ÑŽbsÏ?¤«Ç®guRwÿcÚPH£"EŠ)R¤H‘"EŠ)òEĉ‡<¹w©G,ø™Cîñê‡0Ÿœœ$Ò‚(¢,<µuôûý½&ý~?µa8&PÅ .Ø" á�§™º½½ÕjµúÌ3\R—ð:Î�U15œ´Å‰'÷vàÙÓ©l6›T§Ä9oìèqÛhÜG��–‹º!¹h#í€ì¡l¿Î˜@ô9iDÄ ¤‘ƒký€eçççÉ{Ø#G$¥ô�®_€8Ý]9‰ YàŽßç€i`±«»îs$A ÉKGÏs„lLÑãö›#i�`¿w’•ù(Ý�Óû÷ïõéÓ'�Çã4æHT�aáíû IDAT÷Çõuî:DÅD¬¡ÊÎ¥r�9áÆõ££#UU¥Íf£ñx¬Ùl–RVræV<×͉£X3÷i·“¿QŸ´ôµÉ¯ ]W±oQQ¯9{>4‡>SF,/×Þ:2Åï¡ÍCDˆ0†žú1öOÒÞÚvˆ ¬ëÇ!Éé-G¬Ä9åû8DâÔé8î79›÷u#¶Á Å\¿Ù«#éíýÏ&uöSæû�ïËü¦nÛ±þÜû‰ï7ucÁD=žZ3ÁåQ€q<#™ïï¼A±†pžûl§ÓÑ‹/R´5©çœP¡mìËÝnW‹ÅB»Ý}:¼V«¥~¿¯Ñh”"ˆãü¨“C÷…CkDn¸øºè{¸$M&ýòË/º¸¸Ðn·Û‹òt¢ÞuBÛb4kü‰&ï‡ÛM]?õ)'9ýÖéÜÛð{¤�FEŠ)R¤H‘"EŠ)R䋈ƒ`¹Èi?í ‰G«ìv»½Ãátyãù ô�6ŽûðÎõTlœ5r||œ"Žœ�q€,×~oW¶ÛíÞÙC9ô ‡²ÑƒŸÝ%íp#| ‰ržÝNþx¤HßýÐx�ÒrÀ ¯]"+ü¬ @(O+ØétTUUjŸ§¢ƒ4òtXÔòÛÁ7'¾×«ªÒÅÅ…–Ë¥®¯¯ñÄ!ä€^ôx9ó}`™#hüï°–#Œâ`¾ä@´X�Ï%ôä©Ô{#�–ë‹×ç‘ÿÛZ×>Ǿ N¼2öív[ÇÇÇ�FºººÒl6ûŒœ¡_9€?<çÚådl¥ÈGñýŸt½ëõ:E÷ºMòã‘=9ò#ggQâÞRg›¹u<Þç·¾½½Õb±Hû~n½ò±÷T¶ÒýÚ ĺ½ÔÛY·ï’º¹î}{¬üžg�B)R¤H‘"EŠ)R¤H‘/"u MC�q�ÅI„*’Žƒ§‰ˆáŸz'TðŒ@ �9P8ÖádPLgÄù)€;Óé4‘F¤¯rÒŠ43”G°Â=–©�ãxÈwõ~8ˆNZ8×»G\IRUUêõz ”�rÂ'‚üuzöôqœÝä©£"øñDª™Åb¡££»ô`OŸ>MQ_´-žs„ÄôT¹(£:°2‚ynÏÑþ£äÀ׺rã=àdŒ¹—>çÚ�¶uýó!`ð!’q¹¸¸ÐóçÏu~~žWÆÂÈí0ˆÕFu@;Äe£ÑHiä$}6oêú”+·ÛO­É5" �6›�ž­V+½^/H´™2hCL“ç@ŸG9�å©d¨+úÎgïý¥í<ç@-:nµZšÍf©n¸<ÅÏ8ÈF=´ Ÿ¾ãŒÐY­VšN§I·q4�R„Šƒ˜1’ݺÎr@wD®³éh÷9"Ò?瀶ºòüÇ£»°ˆÊx¿·ç·‚[¹gœ¼ŠâàiÔãûìÙ3}õÕW j·Û)#d"vÌüˆcAÙº±B/D@4“ò ú9KÞÞC}n4{^ê¹¾ßÜÜh>Ÿk2™èõë×:;;Û'�§-üpI¬?ö×Û#§¢>¼_Œ…Û>sÓŸñ{½ÿ‘ˆeÇ2räj0|¨í¹¶åʈÑS±¾‡ˆ¶\½^ÇC òÿV|ÿŠÇÈ»\ŸsýGríÎéÆû˜Kß¿s‡†ºõ²n­t`?Ú”÷‡ �<ÍýP÷¡(ÅCËð9À>DÚFcÿ\¿\?£û¨wê“îÏBlµZiŽº!b¨Óé¨ÓéhµZéêêJiurz½^§”wËå2�¿æë"Î!uíŠúÊõÉm n{hßÉÝŸ[ ¥»sðÞ¾}«áp¨¯¾ú*9˜x„š¯}n'|÷d·ïCQ¼‡ú’ëÇÿ›ò¿Y� iT¤H‘"EŠ)R¤H‘"E¾ˆDÐäàAé@‚Ð ²h·Û%@ÙA ?è\RÒ$�”@&oß;yQÁ}¤Uó¶Ÿœœ$`;ž ä@_Ì•ï@›Ü qâ¤TzýoÊr0×½e=�ÏBÌ Oúƒ7s<ÌœHÒë`:XMôO«ÕJcý›Íf/:k³Ù$rÍÓëù˜Óêxf±X¤³qˆ< šÏçÚl6šN§{`QŒ<ˆ l©Äç:ÂÈËÊduuE@;Ήx-Fã¡ßF£‘ÀÂn·»—0–á wìƒÛdìlcìŸ÷ËÁR¯ îôôT)5Ñx�N'Ù¢§d®ú<Î�v9P˜öº™¸ÝnµZ­²i ãÅqŠ÷å]s7›�–Ëe//..Ò³ív[ËåRóù\óù\Ò]êEæ[\cÄž·)ö#‚ѱ¬ØÏœ.# ä„QÎNêæÐ¡¹sèÞy“›_¹kqÍÍI©RG0<ìΕÉóuýxˆÌÉ­/‡tíö÷¶;î—u©×Zê�ÔE×FÄ4pq펤@®>¯7މ“1>nÞ.öjÖ)HàøîãD m�úÍí3QÏ«ÕJ›ÍFív;‘è>磣E«ÕÒ§OŸôîÝ;=yò$�ïãÎ,777úôé“®®®t{{›R»’ÏI1oknìs{Ynï‰ãyh®Åñ÷çý9×c\Þ¾}«×¯_'gwNrûÈEYúÚêzõwÙœÝľýVÉ­Ó¿·Œß*…4*R¤H‘"EŠ)R¤H‘"_D4ánþ©wð)|Èð¼ÿóî$�§ZqÉ�¿�Ù˜ àîmd†¼àÌÀï§ÿŽi¥"©ÃßÕëõ:�âôÑ#G"Aä$Sf×ëõ^ª2ÚädX$H©³^¯÷Úìd{ô’“wÞwôʳ�Éíí­V«•æóy¾?$udÏ?f®"Œ$í­™9 ‰ýcêõ=‡k¿ˆ­›9�<Η‡t_§›ºõç±dN°_7÷ã:š[/rõ×î¹{݆¹ÇßËðu>ÞSgßñ;ì ڬϥÍf£Åb¡ÛÛ[u:�ÏÎ òû˜9;áYÖºÉd¢Éd’ê€üaßgOå;Iio<;;K{%d9ëÊû÷ïõéÓ§�DÔÑÏœXׯœmäl$>ï«sÖÈé(> ¡ív«ËËKÍçóä@#áâzéuÇ($ì-’š¾g䈭œ<¤ÇC:8TîÿV iT¤H‘"EŠ)R¤H‘"E¾ˆ<–4ŠiÑøÏPI)²²…È€`OahâéTHgszzªñxœõÝn§år©ãããÜîvwÑ5ž¦€5‚S!)EE’ ² 0�ÀÁ‰ úRUU"‚è‡ô9pŠÞw"ø½d�°‚ Ì�dº£Ý›Í&IU«Õ*Ü�BNšá…MD‘tŸ*�3Ü Ø#Ë3ï»÷éèèHÓéT“ÉD³ÙlÏÛ»Ûíêìì,Ew¬V«= Ät]#u`#I­ølîooƒß�©À:øÕhÜ¥Gêõzêõz{)êìŠåäÚîöATÚ韼‹:ˆsÄë>99Ñt:ÕõõuJ5ÀGŠ:"Þ¨Û:°G Ž9')‘ÇÌ+? R9Ê! ÛíÆí•õÊí¹Ùlj<ëãÇ�éZ«ÕÒÉÉIJ›×éth[U•&“IŠ0`nE"™Ÿe‘³óøÌcõè㟳Ѩ Æ>GTÄû¼œ‡'~{ÿr’+ï�äêŠä‘·5ÞS×ÖCõ= çÖüØŽ:=zY¼?ô¹Ž,‹kplKìWn�ˆãï¿ë?bûœDØ÷9‘Ó­Ï ž‹¶›Óq.‚ÉŸaïšÏ纹¹Q»ÝNç Fý{tÊC¶ávKæd2Ñ|>×å奆Ãar8aÿ%b’”t———�ÇšL&�Çúá‡R:éî $f>~ü¨Éd’ögÖ›8ÞQ�±ÑF¢-ú3ñù86”“»Çˈ×y‡àÝd<'§wœÉ•çíw¢>w?’k㡾ó}´ÑÜ3¿…|ŠÏü)¤Q‘"EŠ)R¤H‘"EŠùbþÉu¢(‚×|v²ÄS©ð™2ùǰy·»KkÀ XQÂ3°´ ÂHú¸Èy¤ú:°àED58E8ƒg0ì�fN�ТŽìp°À3?¨$u $ ùb±ØäIc#)Eül6�žž&  ªÕj©ÝnïÛ1U:hµZ‰àj·ÛI·�îÑìD#ýpbéøøX‹ÅBóù\ÓéT777ªª*�%zfì�t�äÀíCàKÝs€j$™Í>çž‹cëó~q:DDì«Ï3¯Ó?çôãŸ}>ÇöäRAù¸1G°Óív«ëëk]^^j±X|Fz"ŒuŒ®‰@›·Ï¿ÅNOOµ\.Õh4ÒyC”ëg`+“sºˆíáûÉd¢Ñh”þ¦M�ËUU¥q\¯×:==Õ|>O`oŒ¤Š yÂý>$zÑç@ѨçØ�³I>Žå!°¼0ÍÝçý‰`5¿]¹Ô ‡ÄI�C÷ø>v¨/¹öÇ(Ò:©›‹‡ÚåReûp¨Þº½¤î™Üzuè;>Çu8®±N¼HÚs–pû�+^?s–wˆ:ÆuÍ£<=úÓ÷]¢=mm\Ç‘}±ß»Ýn/Òg»Ýj:�JRr–`¿å=¡Õji¹\êíÛ·Z,šÍfšÏçúðáC"á���5ŸÏ“³ï¤�eöw-ôšÛ+ëÖÊÇØUŽlŠóø�xdçf³IN0ÈÕÕ•~ùåõûýÏ¢�rs…y‰£ï}¹ÈÎ:b3gûqÌssâ1k÷ç>{»=WGFÒ¨H‘"EŠ)R¤H‘"EŠ|q 9©à^¸÷óŠtsB�ç!:ˆ€P"¦ªª=€Ða>Ÿ§(„è] (ãmÄñÒħœý=•OOOS´À¶×‰~ÜC6zúºn(ƒû½iÈ8ÒbÝÜÜ$¢ ý8ñu¹ÝnÓg¾GDÑ¢.ülÚFz9'= "ðûãý‡¼‚p��±Ê�+å ‰GG1–üvÐ(’:^ŽÁþlœ>xüÞHøø5À-�^AÌ•:" GtÄŸI#�¼]^~×Ý6›�.//SšF¾ó¨=ù<5›_ó¨9#úÎ\d¸'¹“Š‘(ˆ}t"¿�cæýv}-‹äÕO]Þ>l•Ô�Þ~1c›¢MÅq«<¹Ÿ²âzÇ�ënC~/×s6UG4<0�Dœg±ü¸.çÚ–+/>ï}�}­ëÓC€w”ãs�ÑÇC$’�Güís3¶;×ïœn¼�¹(U¾Ï|9â!G�×ó¾–3sz‹mÈÍŸûq ˆ¶ÛºÛíÒÞSwŽ\Ü/bߢ~}XŸè3éæ>|ø «««ôÂ8µ\.5�Ó~INJ:Îôt²8cðâó"îž26ê¹nž#ÙÊïÜÞm0–ëö#Îüúõõµ~øáýÃ?üCvýòñ¤_¹wŽº±ñrrúÈÙOœçuDOLuûîÇ:]‡ñÝÑ×|—B)R¤H‘"EŠ)R¤H‘/"°�öÓd�â (ÿÌ©Ãg¿<$©Ýnk·Û%Pu>Ÿ«Ñ¸#dH9)�Ðl6S” u8pÜl6SÚ4€¼Nx&}g!­×ëQ™ÕjµÔétôáÇDÀáC;!5Ï·Û­z½Þ^»>ÖjµÚ‹€`¸‘H©‹þr°–9å?9ò ’0øå‡yœk�_ó²�œËÝç„{.jÊˉ€}wã=Qg9r'êÇïñöG�2±tç[‡nG=å˜\Û¹ßõûííó5Š}ˆ±�¤PŒäb^xß"ÉrŽ#¾ùußω¾q' 'vph Oq¾°†¹3û€¯cŒ�§�Ün·�ÇÚl6êv»{&N’åÎ^Œ’³wúÂ~=™L´X,RJ9tÁûÌÙÙYZsûý¾z½žF£‘ÆãqZ9K½°6ºäÆ�1Z,i�'µ.ϲ—¸½HJúç�§“hKDȺCLÎaÀÛçcÄ5ö¼Åb¡7oÞè»ï¾KQÎì㔃ƒ‰¿ãQÎééiŠˆæì*']Ü9£nNÖ]cþ;yç6¼‡®×ë½¹ 3vÐ?;±Ê;ï¤H!�Š)R¤H‘"EŠ)R¤È'R¢®ƒ¬9 QÊ{U:ìÄŽ§rósƒ<òÆSÈIJ„å ­V«ôϺÿ“Î�§HãwÊÚl6j·ÛéPi?�i>Ÿ'`Xº;¨ïáËËËN�öÍÉ—ÛÛ[ÍçóÔŸñx¼G`Ѐea@‘F£‘¾0pÔÓ†IJà“ë3�ˆ��§æìb,f³Y²€.9?|»Ýn«Ñhh½^§þ®V«D,HJç*Q z¤tÛs ß�@�¦r@šrIö™ØÇߢß:"2÷|죯§¾Y)ݑȬ’öö¡:ñuþ�½ä曯’öêŽ:w’,ž›æzˆöÆ;u3FÍfS½^/ÝëkÚn·S«ÕÒùùyJóË~ë$Äë‹¿3yY�À�(‰¶à¶ãöˆ^!�ü�Ï×tôÂýq<ÜÖ£ãœñç!éÇ㱆Ãa²3îsÒÈß[]ï|Ço�€�ëaœ“þ½¿�r¿^Üïcçξî8iæ„—Ï×ååÖ…B)R¤H‘"EŠ)R¤H‘/"þO­{÷:½Ê#dzÔ¡,þi'²†r Qœ˜Š@�·Þ.":ˆ0Làà�GÕ>@bb¬V«DAxL§ÓýÃÙ*»Ý]TH»ÝÞ;\{·»óœ¥<À Úîgàí:ä³ë½ù¸ÄhWV"àå)õ �0'@ lÃ�l¼¾ñä[­VšÏçɆü7z ,�ÀpÇÉL í雓HnŒq·ÜÞsd•ÿ��úw�€xñ~ì§Ñhh¹\¦ñ«ªJ½^/yVGrω-ú�#�¨+’»1ÒÉIJ"^NNNÒ™;ÌÊBWDz­×kµÛm=þ\ív;¥)l6›{Ñrô�3ˆªªJ‘7ÍfSj·Ûj6›ªªJ_}õ•^¾|©v»­ï¿ÿ>ém4%Ò‡H:Æ,Œ6ÐjµTUUê{$…øÛÁV$GØk<«ªªQG[„©‡�Íf3�qqå}©[{#Ø�ñh·‡H$'�êÄIˆœøwuĈ·+–“#­reüV¢(¶1¶ïP™9òêPýÞÆHB<†‹ß;¡#~rãõËŠà4ßE§�Ü8æ¾wò<’O92,÷·÷ÓIÖ@鞀�é&#©ÉÖÿºH Üœð5“sóF£Ñ‘à ½ëÔ×›HE‡~w: õû}5÷ivonîÎñc¯e8::ÒÅÅEŠˆì÷ûº¹¹Ñååeª“uµÛíjµZéÝ»w{ç"ú{ kޤ½³y'⽃½Ë ï/}‚,‚ §Mîâï"¾_æô£Ç¨—vÍçsõû}µZ­äÄ8yŽ_þ^à„ý‹¤’Û©ÏIêq; .ß;Ü1ÃõÀ;V\ÏÝã<Ïnè.®H!�Š)R¤H‘"EŠ)R¤Èd¤ûš=íKü‡Ù%÷O° ···)=Üv»Õb±Hž·ëõ:¥`‰ÿ8ûY"€!±=v;Y€‡­´‡4aÜëe:ØÏÕñ3hhdÉd2Ñl6S·ÛMé¿�ø�Ì"½Œƒà €Ð777©÷´´Á ÙÉ¢C<2‰þzûùA®ôå@õÇ”tôÅÉ=ì…~A9éádãA}À÷–öˆ3<ªi£09A@�,nÃð8¸$i¯�5Â8A:¸C[<½ÜjµJ€›{Š7÷) IÄx@€¸­x»!€¼N�‚âšG ¡_tç$*Þí”Ñn·µ\.ÕívõôéÓd7�"œqäåžœœ¨Ûíª×ë©Óéh»ÝªÓé諯¾J6Ön·õôéS½zõJƒÁ@UUíE.-—K�žžêÉ“'IôÅ=é# ˆÙï÷Õï÷I‹}Ž-‹4' _™G”¹ÛíRÊÊù|¾%áú&¢m³Ùì‘F�ŠDTx”#:ó¿�fÎs=zºÇµ;’K\¯_gO^_$ âó¹ïý¾:⨮>¾¨}�‰À:Ô¯º:0ε½Ž4z q”»7’›ÍôþýûDè»Ãëåø<¬Ú@J¹gÏžéõë×úúë¯õéÓ§´oÜÞÞªßïëää$!Ôu~~®Ùl¦F£‘Ò•ò ëÕ³gÏôÍ7ß$BZRJíë)Y½�¼%2‹wö7Þ-Ð/kš“L�Æ}zUÖ6Ò”Ò�T¦ ¼›Ô‘Ä>.ìß¾'Ò>úæ‘þßóÞÄýî,âûžÏg'ÿr¶›s”ŠÎ#þÎΩ¿_ÔÙ§“lþÙÛÓÒ!…4*R¤H‘"EŠ)R¤H‘"_D8qÀĽ5˜sž‘ñrÊm4îÒbM&©ßïk:�ªÕjéìì,EA„ Åà à�“<þžʽHm ‘6 IDAT=ZÆoê§N@{;�NªHG6/¯ÓÓ¢xTˆG¾x4ÍÑÑQJ­ÓKñ,„˜¤Éj4 â>Î"å@<×з“[žFÅuKŸ}<„ñ¨$ì‹ç!O;É\ŽQZ´Á#=U¥GË9q瀪�WŒð8Dl¸|\s÷çôæõäÀ]¯û!àü9ô{È�C’ÓÍ!²Œïsýyè96Ö˳¾nùu¯Ï�µ+>ç×|�®‹žtB(ö—ûã÷¹=ÜïÍÙJìƒ�¿;¢p�õ+F´øÁz)ݯw¾ÏÄýÆËÏ�™·y½^§s '“IZ£Ý!'¹÷×ÿnw—²µÝnëÛo¿ÕëׯõäÉ“… áÂ~ÁÚ‚Cå6›M���i6›i:�j2™¤=_º_/=Õo<·�Ï«ÕJÍfSÃáP¯^½R»ÝÖt:Mï ¼¿øFÄ&uóŽà}¿ººÚs ÁQ„²¶Û­–Ëåžn£}øØHÚKÉê{›¿°ÎFp§üèøÃó‘°á]ÌgÜNý�7<¥ õ{}þ²ïz›£ÓGÝú_H£"EŠ)R¤H‘"EŠ)òE„Pñò”ö=¢ùG™^�H‘ö½œ¹ÀÏ)Y¯×{‘=’R„Ï»§¬§�¨¡ìúSvLy†Ð¼‚!Šø xàQEÔçÀw§ÓÑjµÒl6Û#¥ˆ$òèšH8YãuR–çí‡ÜâÊ8==MÀ÷ññql RªªÚ‹pŠ@úà{"b(Ëõ‹8¨²^¯÷"ª|\i'÷yÚÀu6G¯Ô�MFP…~büíç]9@ã©ù üœo�G\9ˆÉØSoL•è)j´8”Ïm–v»­ù|žÎÁ†Ûí¶ºÝ®v»]Ò©Ï!côàÀš§7”´—êÐÏí"â›Æþ?›¨×ë©ÛíêööVŸ>}Jà&Ñ<è»íõz:??×`0Ðééi"gÎÎÎXÊ!ôœïÔív5�ôã�?j0¤5âùóçj6›É³Ü‰9ŸËrŸžžêììL_}õ•f³Ù^zKñÜït:{QyØ1¶�Î{½^šGèŒy!ëä5ó‰ëØ;vç`bôv 1~ŸË‘F9`ß%‚™¿WêûCdÎcê«»'ö+’4�io]Y¹úëÆ&×?&G®Äµ÷·^~Ÿïm‘üóß±M±î؆º>År]ç‡ìPÚ?ÛÆÓ„åúås܉-¿ÇAû‡ô ±Åb¡_ýUãñXãñ8E É1oknì¼ï¼s<þ<Ò�Côc¹\î�ƒÈ;Ïd2IiC‰þd�fÿbýté>"›ödz¢¶Û­ªªÒÅÅ…^½z¥n·«Éd’"xHIëúêv»)jÚS±²×l6u:�tî!éJIá‹3Íd2Ig¼ù~ŽÎØ?ü½Ä��üý‘µ4¾O1&þžÊw‘ Œ¶åcJ[ÜQÊÇ;¦2u§¥xŸ×ï�ïÓq�ðò¼¯.…4*R¤H‘"EŠ)R¤H‘"_Døç4FŒó½“KÑÛ’g¤}OþA&²B’&“‰Úí¶NNNRê'é>²ÈËqO'%zðŠõ3{Ûòg½?’à žw `ئLRŠ91²ÛíAY¤°¢/~v�¤tM£ÑP»ÝN„�ƒEžÖŒ~âÝ+)-DÉð½87€èÑÏ ¢}Ñ«×�xÄ#m¬'jÄÓ˰@Vz¤ zpO_�Œr�s�â‚Øóó¬ |ÖëuJí㤠c¸‡^¢=ÑïÃnwŸºŽ4o­V+¥±ƒ(â¼+�d"BfµZéööVÓé4èÍÛŒ^¼ =ÀwØåíím"eœ4rok'�ONN4%IÓéTÒYÚét’÷¼§2êv»‡êt:ÚívšL&{Ä'àX·ÛMõ2_NNN4 R:¹gÏž%Ð4ˆÉæúèt:º¸¸Ð³gÏÔív÷οp ÝI#÷®‡B·�¦)aØl6÷ÀV†±Ç˜&Ó#/˜¹h _«\r@yë}Î刎Ç�H9©#pêÚêDCaËü-Ä•ïÞ–‡î¯#Œêˆ“ßÒ–œ.bYqœ+ú�ä\»�´�åaçn÷uÍ¡qñöEÒÈI”œ®ÜþX˜ÃQO9âÌ#ŠÝ ÚM$õ¢¾|^ùÜÿøñ£Ž��5›ÍöÞQê|o{‘EÝD\^__k2™èýû÷‡ :::Jd{;{Ób±ÐÍÍÝ™G¤~ãìDÞe&“‰þö·¿©Ñhèòò2�aÄ~îN3Ñ©§ÝnëââBOŸ>U·ÛMïì5�NgoÏît:‰(÷H#O=ëiáØ_ˆ�âw£ÑHŽ5þÞˆ¾ÙŸi'mà,#Ø7=bÙ#6y—ƒ¸ó¨u׉ïqÎÇHcÞG"ÑÃúŽ�,)�£˜{OòþyYÞF?êd¿)¤Q‘"EŠ)R¤H‘"EŠùÿDœ Чþ´ÿc� \ü;~xz8þ¹woÿ\Y’öþ¹ŽÞʹhþᦞ˜ÖFº#$f³Y„iër¹Ü;“†rdpÇ=†=R‡¾Ž;)åàm„ØpÐ�{Xä~tàdÏq }!š„1q@‚r¨ÃïuÐÅIOÁÅ5 ]GQÿ€í®@ºôø5-Ø#ÂÃÏirÛñ>GÏdÞܶÜ[½2_"¡è¤)À éáÞxÆmߣìð0÷(>úéú€Üó(>�l¢œbÛ^¶ëˆµ€ˆ"’“““t&GUU)}zm·Ûêt:iNjÆ”‘x¥úôIGGGzÿþ½f³™:�N ÏÎÎ>;ÓÃ&™ïÝßï÷“^°+…:«ªÚ›S‘$…D‚¤Ovò ¥Û’{Ñ;™ÿv�ëg”¯»îâ$cŽ ˆßù:~ˆ<Š÷äî‹DCP눆xïcä!"ì�Ô‘&±=éËË‹Ä÷8¡ƒÞܰ‰ø,ÏGÐÛ÷èoGÔ“·Û×>I{kx\âX»}F‚‰u a½Œïuã÷w^‰ºò¨”Ø_× õn·[Íf³ÏH,~|F½¹~rß±þm6ýòË/šÏ纾¾V§ÓIë1i3¥»3�ˆÒ$uïùùyŠ*ÆÙr¿ÑhèíÛ·)•÷)Ö×�ëåèè.%0)P=m'œ[ÇšÇ{ŒïS1•]Œ†Lo6›)’Ûß1|=ĆÑÙÑÑQÚ—ˆn],šL&’î�YZ­V"à=šwÒ££# ƒ´x[=űG^çìÏŸAŸ³Ù,E³ŸÓoÒô5›Í4Ƽ1.¼7Ñ·år¹Q…Žq^i4µ©› iT¤H‘"EŠ)R¤H‘"E¾ˆðϱG ð�®,Ñ;>zó"‘4r°ËËâ3Ï;ñAbÝÓ:F¦x]òžÖŽ( R‡Íçót® ÷v;ð0ì máŸ|Äü}?Ëñh&€‰£££%Äu'=\÷ üè�þq�”[Ôïd†GãЦÛÛÛÔ€ o�§`s€’[¢nRÿù q¼ŽŽîÎQ¢.·#!½�¤t/cÊr²Â={Ý{ØÛ@¹NœDÂÎ#S8ø°Ê¢Hx:qã}Æ›þøø8Eól6›”¾ˆH¶èEN_ðl†ˆ‘”RÝaèˆûI)Ę9€æz êv»:>>Ng§ÓI‘rœ‘…® ½_Ò>µ^¯5�Nµ\.S ¾Ÿ~úI×××jµZé, @?úë© =‚ˆº�Fó°G�vðHˆ.ˆÈÒHñ¼GêqîóÞí4FWæˆÿìk…ï.DnÇ^¾ƒ¹±Œò×­ã�mG$Xrćßw¨/‡ÚðÐsum�ÖC„ØC×sºŒõǺ£® iT×®xoq”ë¯�·«´ËÛâmÎé/§ë¸G»‚ÛiN_±ÌïHzå-®ûû†ëZºOuéõ{Ÿã|ÌéÙ×w h6›�Ç�FšL&šÍfé>Þ; ¡'“IZ«®¯¯÷¢¡ªªÚKiIÿ9�2=�k$¼?°6n·[]^^¦÷ ÆÃI+¢'Ùo|ƒa_™Ífi¿†ÜØl6šÍfšÏç{ç16ì5ÒݾÑzzš2H$?3޽Šw ÖaÊå g€‹‹‹”"Ðß Ñ%{{ï%üðHù�‚ív[ý~_UUííÁŒ3)û8«�±fl4î"X'“‰®¯¯ÓXÁEÚ?Æ2Ê#î¤B)R¤H‘"EŠ)R¤H‘/$…=nÝÓß½¤¥{°$:ˆƒLžÊ„3VøŒ×&^Åî™J™È€:NêÜÜܤt/ñ�ôJæÚÍÍMOx�Uê<œ¡ÍÜOÙÜçzäo<ýš§(s–ç#x̳�Cóù<ÙíjµJiÜÖëõ^dí$šÊõ Öï÷÷Rþzôd)‘(‡è/@2"�°#€.�¢!âÌmÔ#¡°Eˆ¢ív«étªÕj¥wïÞ¥”•ÝnW½^/­èÐuÏg'v?cZE;ôæ×8ë‰òøÎI_O¡äÀw«ÕJ * 8Ī·Á ÿísÜûQGà¸-"¤êÄû‘”«3^‹$D9“#>j_îûCEN"ùuåDJyÉ’º:ù.!‘¼É��¯GÒþ¹€u¤‘G¹äÚ‰’H¦pÝŸ÷kñ;'ËCäÅ~#¬øîpàm�„MŒ"Šx~.JÊÇÆï÷qñwÆÀ X�ˆŠó–2y?¸¼¼L)¼_ððÝwߥ¨#OOK䌧£k·Û‡iÏF¬M|f]'�›G¨ºóÄh4Òh4Ú{·£¿WWWéýGRz§'�üÆÏ"\.—šÍf)Õª¿xÛ¨Ç÷ôBTÑÓ§OÓÞt}}�DˆøŒû:iRƒ�ªªJN8ÔþDôý`oâ·�-ïU8Jµå×–Ë¥šÍ¦ÎÎÎ4�Ó8y˲Ûí4ŸÏuyy©n·›R÷ñž¸Ýnuvv¦áp¨ÓÓS�F£ÔW—B)R¤H‘"EŠ)R¤H‘/"XwÊA6¾¬p %>� Öf³©~¿¯õz­v»­^¯—þ)Æó“÷²¸–”À(Ò=ê"Ø7$‘/jŒ·ƒVèÜ $~=½ÇØ-„epÄ`0H6è )zu@ËA]æQ»ÝN@$v…s~iæ†Ã¡ªªJÞâô™¾B^qÀ9 š�•§ƒc`¿œ(úñãÇ”æh»Ýj<ïž�XN¼ùúã‘yM ‰ÛhS>“ ‰¾Bù™cvþ?ì½[ocIr¶$%ž:”ªº=�þ030 |¸1æÿÿöE{ìîéR•$EÈ}!<©gE/õôlo—÷|ÎIäâZ™‘‘‘É÷�ˆ4©LÔÔ÷1ìþ½%mþø¿"ommíp B¾>,oµ;N­#šÙ“mäT¾O[;Ûô’}€ïÕ¶>Ø®L8½E>z]°ßaÎp_“(™Ë}‡0vfa.§–÷ÎÖó\Ï{‹ÜǶµ5“gön¯_ÏdŽÇ«­ øR nooKf¥‰dέ›Ífq}}]H&Ö2²Jh{·Û�ËËË ±^¯ãßþíßJÆË`0h�Rø{|—3¹ŸŸŸc»ÝÆ�?þXH)2�Ð ÙJø$Æh·Û5Öl²‹Ð‘‰5ûHÎô5¬Wq>›}Üz½ŽÙlóù<®®®b<Çv»�ý×-$ ãäuÙãŒ>oooãx<–u–þÒ¿ãñåü$H.ˆ#öU¬Gd¡’å„?¦D«³¦Ø»A´ù\;J .—ËBÈaß�eóù<.// Y¶Ùl~²TÒ¨J•*UªT©R¥J•*Uª|iÃCM|.N} <üŒxÍÆp ¢[ùÛÑÿ¤q´3¿M.äsF „0ó|G£ro2 œ]ÁxžÑÌÆ"Õýs$4ŸÐáóôÉÿÓ.ƒä”Íâ9�;¼nÏ™'ôÐÎ¥õr;¸§pƒ‡ÎBŠˆAæ’†Ù†ˆaËx£?ˆœN§Ûí¶dsD¼”Zh2I` Ò„ÁN—[4H;ŸžžåÉLB´L§ÓB,0¶€Œô�1ä~Œ½í` b”gBÒœ��5ÊŽÇãR¦Ç¶“KRžÎýÈ€0×Rèää¤dö1 9 Pg_à táÒ>ƒÁ �'ØË~¿�ÕjUÀ=€AÀ3È"úãyijù¬ûGd¶}˜mÝ 6™Dœ‘äì%ûgÅÑo‹öA–ÑÕy^ÔfŸËsÛˆ•Löd°=ä93¥� y‹Ððum…¯o#<2yóÖýÞ"pÚ$ë%“Šêz?£�j#WÚÈ ??5mýø9ÒiË Éí0ÁÈëoµ1Ïÿ6Ýä ¸Ü'—…ËïåÀÏ#øÎ´m LÈ䛃x¦³Š°b�E¼ž{ãR�Q€{ü6ϲ¯qfNÄkIYgºš0r–ë×â§¼þ²×ÀïE¼f=‡’­²^¯ããÇ�e]8�1ŸÏãpx=ߢ‚³ë¬1â} ëÄbJ@Ž÷Q²›ðköö=ö¬m>—?êÒ¥¯{ ž QÓétâìì,Þ½{ß|óMDD|ÿý÷�ùéì[Û#¤äÒÍÍMDD Ê`ŒÙWx½§�Gì'8Ï�=Çf³)}‡±ßïK)9~ìä,aÊ÷-—ËBà±ïÃ&X/ûý~ÜÝÝ•lVK%�ªT©R¥J•*UªT©R¥ÊGÙ† ÔÉ h3ØÅë¦d–gáyÍÎ}‡r¹HÎ×1™ÆZ†>ð“£Ñè'A ö ™2ií’›ÙìL™àâ5ÖÂ�?–s{½^Y;Ø­V«øÃþÃá0®®®"¢™ã±$k;"âîî®d¬:»‰>t»ÝÆÜ–á˜õγé Ù£¬çÖQÎβ¹/þŽLöZ´‹uäòò2¾ýöÛ¸ººŠóóóøüùsɪ21é€ƆŒôÍfëõºœhýy_ãõ¹Óy) KY=l‚ ¯èz»ÝÆÝÝ]Ù›øºL£ÞgBß¹ïÿøÇ¸¾¾.ëFÛ|®¤Q•*UªT©R¥J•*UªTù"àB‰“·€ŸaÂç @DD,Ì(28a Ć£”�áb€À°Ù@_ô ÈØ㙀u´àýéé©”ÕâÞüÐwƒC™d3•K‹X¯®üŒ ê¹ì\Äk)¸6Ð�öÀ�áY8B�*OOO1�ãùù¹”×ËÀ®ËÆe@˜q7�âh^ÚÉ™L&Éæóy!W8×áÝ»w¥ŒZ§Ó)ÀÐr¹ŒÏŸ?ÇõõuÜÜÜ4"ÄÀ— n9ÜŸu‚Þr†’AGÆ3" ¨ÉýÖëu!„¸'DD&)u3� Y”ŸG[ Z"¢èq "€+%àÈ|ŠˆÆÙÌÆßöI$6›ËRÚ'“DÇvµNÔ6휤Þýý}!R!™Úæ ýˆÇÁ^Ñ#à¼î‚™Xàì;…4Ì ©íÇöÑV2ŽÏÛ§æ9�üŸ#EÚÈ�ü¾Ûä6¶‘9ùÿL¸äl�¶Ï¿EµeÓ´‘SmïÿQôÖóóçr›Úˆ­¶g½õœ?umˆÝf‚ÎD…ÿæó&·<ü¼E¾e’&â§Š?c[Î6ÍmÛn#!X³²Ž²]û=~·eäòCÉMþ§ ¶p Åñx,×å¬Rˆ.œÍøÖÌvãuÿþøøÛí6z½^!¦ñõ>ë‰r¹”¯;??/kÙùùyÙQv M&“Øï÷�3;�—Ì]ü¾ ÏYÛR¶Ûª÷4yÌl;.÷ê½QöV�5”`ûðáCüÝßý]|ûí·qßÿ}üû¿ÿ{|÷Ýw%0äp8Ät:-k>œ=,ëÇn·+6‘o{dÙFÖ:˜‡}ªý»÷4 ¸ ¯ÇÞûd ¶ëùo½å½Š¥’FUªT©R¥J•*UªT©Rå‹Ìh4j|‘tv”q&ü¾AŒ ˜F4AI—‘ã˵¿hìPÚf8@ÞPûø’îûñå�Äàøáp(g t»Ýù@�Ÿa@7â5Û‰¾Ð_·'G)g² ðŠgóY—5±]‚ŽˆY€À È$“X™$áoîå¬*gt@q= ‰A%Úës|_G×’…ÂuDOŸ��E§Ó‰ápgggñõ×_—¬Æ�ìúúº8½Z­ ±à “f™@3¸c[r[]j‡Ì6—„Ø#[Îï§§§ì2xäg�Ç8==-Ñø.Oçó}ܲôüy“]<‡rM€‡Ãá°‘m„½›¬ô\&cÎd*ÄÑn·kØ¿#Ü].q>Ÿ—ÈrÄe É@/ûý>–ËeôûýRÊ¢ŠþzNóK>Ûöº}e¾Îk,ÿ[/mä±×›¶{·‘F~ßä“í ¯ýn§×„l;¹Ož[oÙT&£Lô˜÷ âÁ€ßäÜÇÍf?üðCôz½˜Íf±Ùlâéé)>|øûý>nnnâîî®ôËýu™<Ö@ü�×bûжu�à¯>ÏÍ~ “¿W“NOOO%øûÆ·‡øðáCüýßÿ}\]]•l&BÈîõÚrßZ`»\.ËϾÑ�;Ù‡²¶Z?.Åê’‰yo“ƒ‚ÚöÈÜÃÙŸžØd¿ßo¬ùdT·UÒ¨J•*UªT©R¥J•*Uª| àpd"x‡×’h&Ú¾ÄfR"GYF¼’I€WÛ29z½^)—E¦ ‹]ƒ§Žv¥Š3�r&Éóós9»ÅÙLmQ¢à1èb@® 5áÿ}ž ÏqæDÀºF7.‰Æý ˜¹_�޲f¼]Œè_nvèþx<6Î(Šˆ†¾xíg, :Ò}6›ÅÕÕU\]]Å`0ˆápÓé4Þ½{÷››N§ñððPô„]BøA4mmr$�an—í5CðaL(9d`Ð6Àæ”àä^Î~‡%"=3ÆœÃDY#ÚÉ}é º%ú€’ˆìÉdÒ l±Án·[ÎãÚív±Ùlz |O>O ° {ŸL&%ƒèâ⢑aä1ï÷ûåœ%Æïññ1nnnÄÄ\žù ­ Z2nÎ83îùmB�6q/ˆl“Û´Ç~È„¢ÉnƒÒÌ]Æ7“wØ!~ÌD‚Ÿa±½f ß ½ý” lKùó½2ú–d#ƒðy¼ü÷ωÇíçú™Û‘ïŸÇÿçž�I’62¤�PËd\‡|½‰ûÊÜŽ|¿¬ƒ�õ�í¹Ïoæî[^ÛÚÚoB¥­=^ Ý'ï92AÄ–ËeœœœÄ»wïŠÿüüùsñ¬ÙìãºÝnñÍ´�~Ðgçu‘Œ™ñx\ögd›¶Ù�Ç»Í_ØÆ8÷�s!}ÎÎÎâoþæoâ÷¿ÿ}É"òGŒ±Kçºý샜Iæ51—,uP‡ƒVxÍAβçÞØŸ÷P”¬ÃÎû\Â]å½é|>�ËË˲Çbnó•4ªR¥J•*UªT©R¥J•*_D ú8 Åg tš4RÌ` IDATÊ`��e“0Ì�3Dàóå™vð$ŠÔç<ã~ÿL"²×}9 ál%úÏ—wÀ§ ~¸Ý€9“Ä„VÑ‹�9ÿÍ™+ΖBïÎò1áãHW Œ‹KŠÑÀž§§§rvÀÃÃC,—ËÒîM„ôããcÜßß—ñ2XcðŸìJ±ÑGôöûýxÿþ}|õÕWñîÝ»�Ç%*Üýæz—Î 1�NË9Gè†çC¾ä¬"tB[ nü“3?LPd�¢¨ÓéÄh4ŠçççØl61�NËù£Ñ¨Afñ\€&@-“eü˜ �àhµMqoÚäkWŽ.6›M!)«„1ÿh#D˜3à:�N,‹2çÆãq<==Åz½.Ïa~":Ãq¿ßÇÇ�c½^G¿ß�›››Øn·qzzÛí¶ôÍ@$¶gÀÏóû1‰�Ig‹ûÂ5Œ ÷dŒ±7Æ;á3üÔF1§].‹Ï0ÆÎ€2¹�Å`xvù;ƒ‘˜ôuü� ’ œûš62ÁÒFÒ´1o‘V¾Öÿç¶ùmíñçß"˜¸_Î8h#Í2Yõ§È§üw[?g.ä×ÝO%´ÝˤM&¦Ü�¶¶›ˆp¶‘m!ïLÜx,<ŸhsÙÄ8 ÿp8,€:Ÿ‡,ñs8 [=ØW1÷óüc½r¦oÖÇÏÙ‰¯÷Z…¾Èô¤��8QÖÝív···ñý÷ßÇÓÓSÌçóxÿþ}œžžÆÅÅE<<<Äz½.eÞnnnJ)W÷ ]v:�FV6ñºN{¿–í½àãì?² xߓɨÍfS|æééiüö·¿�ú§ŠüÇŒçç—ò{ãñ8ÎÏÏËú¶ÝncµZ•u�û{?ä úÊú‚¾½3Å=!‹œ1k"_Î} 4¹'vÙï÷ÁWøíÍfÓ(åJ» :ïïïc³ÙDD4²Æ#*iT¥J•*UªT©R¥J•*U¾�ðå×@vD”Ãà àˆåK6 A‹ d°Ú £A$ƒ2.c`?¢y¸:íiËš �;<�{9ÓÊÀ¸I£ˆ×ÒvÜ ¥-º¶ Ìl‹h·þño}R0vf„�Ç“¿ÉÚn·?)…Çøú=Î 899)ÙDd3 ±8Âõà¤x}999‰ÅbQÊë,‹øÕ¯~———1™LJ¦MD”þ˜ÄZ.—q}}Ý ÂLp½Ïë€ç¾Îâä”41bà6€DM41íòdÜ‹ë±ÀO�½IÒ Âû9.ëf›É€1zyxxˆûûû899‰ÕjÛí¶üp&†‰ÐÃáP¢ÎÑ'÷;==-¥u\ö­Óé”ó8Öëut:�RNh·Û›Äæ¹G¯×kœWÕívc2™Äíím é+?&¨é£IÞ6Á$j&X_ì‡6y~^N§Óò,÷=Gï#~?“8mÙ>~ݤöƒíe꬧·}¿ïß<7ëÌó×öä߯ùµ·þÎd_Û½MØ´ùZ÷á—�F~½�¨rí�ÛÊM½¥³6ÝxNgbú-½8k!k¹Í?7®Ö[îíj#α]yØ&ÎÎÚÆÂävÂYnûý¾d½àsÞæíŸÉúœN§�6RšÓ™©&iíSL.gRÌs£Í'û=÷=¹Ø{Œççç’ჺ¾¾.íüôéS)+úÕW_Ráöö¶”y% Ýš±_°ï1ùÇÿd™BÔØ_ÛŽ<ÞmYpž«èˆ1ív»1›ÍâÇñûßÿ>þöoÿ6ÎÏÏKYR2SÙƒz¯IÆëýý}#Èi½^725Ù7 cÚæ9”}¸rÏÄ›÷¶÷÷÷e­´�yïÀšèr¨q0A´ƒŒi“ŠH%�ªT©R¥J•*UªT©R¥ÊÀýn·Ûí¶Q¢Š/¬|aϺIƒ¯™ÐÉ`h&Ex/ƒ¢ˆË�ÑŽˆ×’dŽÎà^.-ÂgùR8 Ha¢ÉeÙL‚¸<ý6Hf€Ïà¾d€môÏý 6¤Ah8š÷ÐD€6`Ëñøz6S¶Íã™à~XÇ+÷÷÷1 Ùø‚Ž pûÇ¥r �ƒA\\\Äããcôûýøê«¯âýû÷1™L@ÏF§···ñ‡?ü!®¯¯KI¡Ýn×8ÓÈ%�(ã–ËøÐ'®‡„D\o[¦/>ÛˆØ�”^·íûÜ X<'ƒ’W¹§‰*ƒe´=G�C(b+Ëå2–ËeÉ‚46)†þÐÙh4*m"bÞôc±X²ÈM>kÊmFχÃkIºÇÇÇÒ>JZB”˜T0‰m �×|­3 |V}¶žÑ/sˆr{ÏÏϱ^¯Ë¹€¶omÄAö}<³-ƒÅ$öáÏäû¶™Ü·ð}‹dóµnDR¾g[›Úžüzns~Ïw¿ä>îï[íÌÄšïiݘŒÎ$AÛ3ÛÈ“¶ggý·@™¨Î@&„¬÷?ß³�0{‹4²´½×FŽ9%Û±Û€�ç 7%˜˜µ�1@Û!¡9çÈÙ<øvÈ"ÖðÜÆ¶1m›Û¶Á¼§iû¬}µ3I½F°VQ¢“ñý·û·x÷î]Ìçó�F1�Nc±XÄx_Ìs´'À’Á€b²< 8“Äd‚Û  âC¤!œ%a`…~€¦ï~�ë�µˆ0hmâ'ŸoD6Y>‹@ÞÏFGd™4BgœgÅ=˜öû})©†~<öè&"5'.cеßïÇåået:/çß|ýõ×0ÌÀµ�Òˆˆï¿ÿ>þå_þ%öû}ù�Ì£ÜËâÌ#Þ§ä`#ÄcD6 v…=Büt¢_ƒÁ Œ'g/E¼–#COžç €fp×¶™êòn‡«�}<c»ÝÆÍÍMÜÞÞ6æÌt:-óc2™”38Èü¡�”zxx(ãHg’ˆþQZÐYŽ>ОŒ$Êäq¶ä d‰m°ÒçDÙWØßXŸˆËýE¼–ÄÌdt¿ß/YSëõ:Öëu¬V«Ò"Är�U”ïg'·§�¸ðÜpÖ%ò9åù”�__×öü<ó5^~޳gbƒ¹�>"^ ž DgÒ(·7ÿ�³þòü¢­Î˜ÈóÎ÷õœËÇs¯œÉöV{³ß˺Éú£îW¾÷[à}Öa&çþTß ˆgÒ(ßËû‰¬+îç±À—™ÄÉúÆæy¾ ÷Ïãï¯ëö»÷³=·Í£6}çµ!(� ßÛ¾<>>Æjµ*ßÝÝÅr¹Œ«««8;;‹wïÞÿx<–R¢Î¼ôÚëkd”"¶‡¸€N�½Ùf£&Hü>ç5õûýøë¿þëøÝï~Wö3Óé4Þ¿ƒÁ ®¯¯‹ßŸÏç%KŠr¶dGD¼{÷®Ø{‚?‡CY³) K©B¯Û&ŒL" ƒ˜L&åL>ì‡=ëÙx<.™N¬™óù¼±îœQÆzí½èn·+ûÖÂÙlVì)g¬VÒ¨J•*UªT©R¥J•*Uª|1 Å—Øýê(z¾¬ÿ\„qŽZŽx¶œ¹ÂµlÜŸkÛþvûi‹£”ÀsÖˆ3#NOO a��T2œ3$ƒ¡9ËÈ‘½¯gŽ ƒÇî��ƒY�´ÛeÖйÉgL¸~¿ÉÐPp�Œ,ÀΔá9è"��#–‹EL§Ó˜Íf1�NËùEÙ~¬Oîs{{?üðCüñ�,€Ëf³‰Ýn×(9dýCþ ‡Ã$aKØ„#�i?‘ÑÎì"²Ûº6øK4¹çŽç–Çß™zž[Œ#^Á] {Û"s�¹ÅØ8Ã-ŸûÕé¼Dº_]]Åp8,�žQ�]Îçó’Ý…$¡|ídÞðL¢Æ�e`ŸáëÖëu)‡hbÌ:gŒÈ$ÈÄú6ˆ—ËúAö.úÌ·Nçå¬*úÄZ&b=/Ð…ç¿ÛíL'Ú’Awƒá™óx繓ÿ7üÎÿm 7’É:KÛ=‡3Y”%ƒÑÛœMõÖçÛÀþLl9+ÇíãÚü¹Ü¾Üߟ#Íò=s¿²Ÿk{NÖ[Îikã[ºÌ¿í«rŸM`›L‹øiæC[ÿ¹nö뽇ç#~$â5›ØgÈyÝò9=´�ygyüMæòÌLV¾5žm¤‰ûå,"^ÇïCDx�ö}Ɇe}Ådzç èc¹\Æf³‰‹‹‹˜Íf%{çôô´¬í&T 'Ö£6?’‰úçõÊ:ò5ŒaÎD'Ëøää$®®®â׿þu#Ààp8ÄÿøÇ¸½½�årñáÇ8??/ㆯÝív…l™ÏçÅf8�  Á`ãñ¸¬a”š³]x\|ÒÉÉI!šL ÙއCÌf³ prrR2“ØG:P‚ûr¦–Kù„@yXÎ؃¥’FUªT©R¥J•*UªT©Rå‹@�GÜò“AψŸ'‹rf‰Ï0‘`�Á¡#rOOOYP€Ü 0¨žÁíŽF&‚°×q;CÁ@–£×3‰ mB!ëÃÀѳ&Æ öG¼f†t:�ÆáË´+“s°2 Ï{ÇÜ?ÚJ6 $„KˆùÐpˆ9`†¤ ’ðòÎ}0xÎë›Í&>~üËå²"Í�àûý¾faÀ@&¶ � D:;æp8”÷!Ê|Ð6ýÁLö�ÇõlbÝR~½,Ñ_ÆÊ�³Á\.Ò¶n@ܘ 4ôÁbn�F£bçãñ8.// 9K߈˜æÙ£Ñ(¶ÛmƒtÝï÷ _â³­øq6˜³Ó<ŸL¨AÂdû¶�rÞÇ[vîr”€u´ïp84Úòüü\ÎÁZ¯×Ñï÷ xér…Ëå2îîîÊybn«Ajg6¸™42@� d‚Ú`o&3)’}£‰#ÚÑŽ£3·õ­kÞ÷=òç F› £Ï´5™`±�äv·µ+ë.5o}&û/Û¦ÇÒë^&Í|?ÿþ92ì-çg¶‘"y ܆¶Ì$û&Û�¯ñgs ��tëןcÿñZî”gä¹oâß÷'ãÆ$F^罯ÀWæö’ b]æ6g½¡§LìµÍ7ï¼Þ“iD¹KÚ�ŸÃ>„}’Û ©òøøXÎ2�FÑëõb45¦ÓiüêW¿*×~þü¹¬‘Œ±Ëó9Hˆ1ðx{ ­#ÆÃY4èòýx<Æb±ˆÙlVÈ—^¯%Óõúú:nnnÊ:BÐÁf³‰OŸ>ÅjµŠˆ(k7ëR¯×‹›››¸»»‹Éd‡Ã¡”Šc}ï÷ûquuÕØcyíðÞ4Û“ÇÖÁTÞ »„ëáphdi{ 2idûg ö~ÕóÏÁ<•4ªR¥J•*UªT©R¥J•*_H 02qñ úç÷ �ìPqv -φ0à~ˆ¦ÌŸ,¬å^<ŸˆÑˆW° pf»Ý ×�³ülƒPF©ÊOM¢¬2©CIÚž1ò�9´=ß;ƒcg*ív»ÒvΠ†Èªp–‘¶€Aé¹d   ~3ödîdýb7ëõ:>~ü×××Ñé¼dÄ|þü¹�~Ìx�æââ¢‘Åæª Þ kGô“£¯=–Ø›I""¢é¿ŸŸŸc±X”L޶7Éå3¬°ƒ\‡§§§¥ïìƒqé8Û)Bô;¥‰Ò¦ÿ´Åd‰‰úL¹ív[lÀ¥}r4õÓÓSÉ8#ÓŒ1€ðÂî7ûý~é«ý Ût:-ºd^0¾>pžèòN§Sˆ,û?gÏù¼"¢Ù™w€•>OÌä2þξÄO>S)“FÌ÷6?âÏå9“nƒúoâG3Xšå-Ò%*¼–�P m×ä{¶=??ó—¼çìQÏ»Lž»�Ùw½õ ¯YÖ—û“õ¶¾EåLÄ|M&š"¢ak^ÃÚôfRе·íZÛ¹Ÿa[Ê6h2?‚Ëà¾õg¿‚?0¹nÎë´�õ3“FÖ�Û÷§ìÌ:5)çûøºçç׳m+&š˜óœ™Öé¼ô777Å�~üø1úý~|óÍ7�5ÿÆyA?þøc�ÇX.—qzzZJŒâûL°à«Yãñó{Hìâ…, ú‰žOOOc±XD·Û�~ø!ÖëuŒF£xzzŠ»»»â‡W«Ut:�øñÇc»ÝÆùùy\__Çþð‡èõzåÜÃÅbóù¼ûÈt:-Ù°Bl·Ûèv_ÊÄŽF£FÛlƒdÇ:‹=a3Œ±÷³¯k­ý9k ¯·iÇã±KèÑ*Œ½ËGTÒ¨J•*UªT©R¥J•*Uªü‰ÁJƒÂ�"š¥ž nöX0øÓ–õÀ=]¶m½^ðxµZÐbÃY+d¾øË7‘¨îà·ËSñÅÞWD `‹Ì ®w0Ÿ‰r< ¸Ÿ3R¸�ÏÓ¶^¯ûý¾Ic `ôûýÒžˆ—ºÿÜß@ àý9…à2R‡×’2ü¸Ü‹Áõý~_ν!3ð¢ À–ü;�N9†’g¶­ îÝÞÞÆ§OŸâþþ¾T”8;==-‡dÏf³¸ººŠÅbQÈ!Îè1Hl›pf™[ûý¾Œ'å}ˆRõ5”Èá¼›ÉdRôŠý“1Ǽò9bgOOOåì Æk2™’�²9“ F™|$j{7™1›ÍÊ]ãñ¸Ì9lÑГyÄ\ð�í�(œ+`‡-9ÛŠRCôëòò2æóyƒh3!›‰ƒ…Ýn7†ÃaÌçóˆˆB\e’ˆÒж5æ÷p8l€ß«ÕªÌïOŸ>•(}¢Þ9ˈs8îïïB¸2Ï)�ˆ�™ð¶-ò{³Ù”{9Óaœé ÏA7&¹³XË™¯Ø‚3ëòy&Ø“ûa¿g0Ö$A&"LÖ˜,ã|6û úƒÿÊç¼Ù'›tq»óyyow[��€NM¦›,`Žúy¬U¶�L@Ù/qï6]š„̺ϙC6ëÈkF¶K?ƒ5�õ›vº¯ym?_‚"¢øLÖH�„mÉíÀ§¸”äýý}ñcì 2Èlyxxhœ{ãl#æKÄ+ÉŸ3ßÀáLgü¥É;øÒÑhT²e:�NñQÏÏÏq{{[|IÎæñßÅÐÆ§§§X­V�ùØï÷c:�Ƈâòò²Qní?þã?b»ÝÆÉÉIÜÜÜD·Û�ÙlïÞ½+Á ···q~~^HŸ‡­8Їý gßu»ÝRJŽý ¶ussËå2–ËeÑw·Û�¯¾úª�1ww×8Gèòò2F£QœŸŸÇd2){2‡­£^¯óù¼ì“¸{`ýÅfX¿Ð™‰U4¼¶؟lÁ¸s öœ3ä¹÷§OŸâôô4¾þúëÆºÿÃ?”uÇRI£*UªT©R¥J•*UªT©òE$GR@2ð•#Áq ¸“£©QiP° ,Í`ˆ ²ˆø²O{À3ør? PÂwÄÞ»/ùü‘ˆ×²pŽÞ§�óøq†mËåN F¼ž—Bf÷ä>ôÏ>· g8âšgÑ“0\—Á>„¬”Éd£Ñ¨¡Kœñx\Hc2Gos(QÈw< áÄX0>àóçÏqssÓ (8K@po±X”ÈfìÎvbÐÆÑðØ:gîùë3!°Q€&HG€K€'ìÃgñPÎ�ϸ÷†,ð™R¶ÁˆW°’¾ Û\�Ï…tpd;`#@¯�Bg?a/\·^¯Ëaàü Ñ€�ÍÎ{Œ©K!:{ŠëLÎA´�àèª�€”µð>å ·Ûm‰FÇNx>ÏÞn·±Ùlâôô4~üñÇhî÷ûrív»-D5¶bÄí0‰â úÆün#4LdÌþ»æ³Î1jrÂ?ö]øz%ö/Õy6Ïu‘¶öø=ÿ�ûf]äì�·îŸ_oÓ…û’É­|ôżÎzq€@[ÿ Â;ã%?ÇPî�íǪûƒÞ²žÛtÖ–ÑcÛÈÏ49±f{Í}j+y–ç¦Ïã=Û$}q6D´I£<‡ù<wö»™œÉãl2(“�^kÝoïsL&“AŒÏa¯…/1q‰®‚�ôô5›Í&ƒAãÌ"ÖÞívÛ(_·X,gù‘ñûþýû8==�ÝnW‚C8»ÍD%ë–í›1��1a<™LJæ e<ŸžžJvw·Û�ù|^‚œqЇÃ8;;+ľI!ŸÄç yoÒëõb»ÝÆz½.úcÏ@Påv‡Cãl<ö ôÍgó1Fì¸/ï› â5îËõÑðã<›ý ÏD*iT¥J•*UªT©R¥J•*U¾˜dÀ�‚Æ€;_¤ùòk È$K„ ª™„q&_�y™$&>È´ »À€/ãñ8:�×e¹¼ˆ3~| ™6Ñ¢DûÞßßÇñø’�PãzþŽÀ�x%kÚÀ<€gY3QaBÈ$º4ùB[Ð]h÷ôôëõº°ø�jüñfˤ×›@ä3˜ ù·ßïËù›Í¦Q6Æ$‰Ë´\__ÇçÏŸËëD3þPf‡¬,ÀÜÇÇÇÁ (gòÝÑ?@Èõz]HHgÔ¸ù<ˆlCξ ½Ü·Û•v:Þ ­ç`¯×+ä˜ç„ÉtÌ!ëd¿Ð/1úgа•¨éÁ`÷÷÷%3g4µÖq{{[€ÀOŸ>}®×ëð5¾Z­Ê³èçf³‰årYÀÈý~Ëå²èÃÀ]@‹^&“I‰ºgŽÌöglW˜�™Dežñìív[ˆA`ìÕ>Œ6c/ø�—Knš`¦�€Édb˜¬µ¯Ì¤@öãyì2‘�v†ˆ 3ÚélS“­øWÆ߈þ2a³݆6"ÂAøVJŽ¡Gï»&Mx´#¾Þs?iÒÊë–çhÒMpØg[¬Ÿ<.&�xÏÿ&Œ²žíƒ3™æõÅöâ¶Z÷öǶ%扃œæqæz¤|>÷×ãfràôô´A(Üßß7 “DôÓg¡Ass<“v”ióÚE[l{n§ƒA°UîΊÚív¥_ø)gtF¼ž™èÏ“½ éñâïÑMD”{BÒ�/A‡Ã!®¯¯ yñîÝ»ˆˆ�Fqyy�ÎK–íW_}UÖ·ý~_H$ʉâDàuÚpð°ã¦Óiìv»èõz¥4Þd2‰>Äããc ƒr.}^­V…ØbMÄïø:îÅ� ,Ö¨N§Sˆ,ì!—«3I_æóy!àK©@—me}À~(ÑËÜ$`£×ë5JÀrÓf³)úà6K%�ªT©R¥J•*UªT©R¥Êƒé¯g¯tF¼‚K”yrív"";�NÜvy™ˆŸæk*¢yÙ eãñ¸´‘3ŠÅÏýOOOc6›•ëš\Ò ÉÀ¢ŸmP®í0qT¹ÁxÈ"ƒÖª<àÂ$K>L@¶Óéb€è\GyC¢L°11�ÝétJYÀÀFk‡Ã¡”ö¡¯€ì3é³ÇPªßïÇ~¿/‘ÇŽ΀7ºzxxˆÏŸ? Œ×8ß’a:�FDÒ0 BÄå¼\jÊöǽ·ÛmÑ3@ÑóósŒÇãòlì�9dÒóÂ÷ÉóÀd¥Ÿåö„vI¼ívÛÈ�`>¯×ëBêõz½X­VÅ&€W.‚ˆˆårYtE„{&?2¬îîîJW«U‰'SrÉàâÝÝ]|üø±3´—¨xJâù| Ûd e˜ ì8¿Šyh²‰11±Íœ3ÐoÀx2™0Öçq1'"¢”3ŠxÍÒÃ7à3™gö{öEØY_Ø‘ ú¸¹D–¯ËY&Ù�9Ê�~@h�ÇãÆ\b¬f³YÃnM4˜xA2QÂß&oxo0Äl6‹~¿_2ì§3ù‹XH& Úˆ£ìçÛîã¹i`¿IM$™ä±^ò}ùm™´qMµé±MçþÛ„QÛç³òó#¢a·Ö•×Q?7“–þ±ž"^3{(AÇš¥ä— ÖU|2 ½×ŸƒD›­wˆ)Ï+®ŸÍf…¸€lÀwÚE¼”™ä>ž·ôäÄÏ;� âž ¡ûûûrö:31Bÿ7›M!˜ŽÇc);ÇY@Œ„Ÿ# ˜`Î�;�±X,оYÿÙ ˜à¬e|ŸÏ„4¢<ßÙÙYÑ9ãñ8F£Q,—ËâonnJ–u¯×+kœËÎ2ñcøµÝn×××噓ɤèËepÙSAB:[ ÿˆ­-—ËbR�õ™>9ðÁ'öÌ�CLbWø[K%�ªT©R¥J•*UªT©R¥ÊG»ó¥àÕå› ~É¥t2QÃsøm àšçðå†{�Çãr½Á]¾¨Ïf³ÆÒý~¿�F¹Ím%pøA/ý#¢€ñ€ÎülŠˆFt(€„‰)„‰\@¡oé»Ëœ¬û÷-*€ôü K“xî�É gkq¿¶ušÜÿx|9Ûâöö¶ ¡?žåL­çç—3f8+`Ê6prrRJÑ@d|C|–~”5Ñ”³}x%ú NRÖÆzµ�rVÃl6‹ÉdRÈ�&†r93úØé¼œ…Á™NØÏtÄ´IÀ,ƇHw2s8³ [pìõz¥Í¿É¶Y.—%ãk³Ù”yås½^/îîîÊûÑ!ú‡1�NËç@;ÚPɸg‚À&s›ít:�²v©´ {ÇÌv»/­O§Ó¸¹¹‰ív[Údýc–Ö v IDAT7ÚyžÛ ¨ PpË\qßs¶‡ç ¶ˆÝÙϨ7@3æ;¶K›F£Q\]]ED²–L‚ÉdRp@XÚcâ “$mÏ6Y‡®9Ç„L=H[>×F¼diý´ûYYGž+&ìãòz‡¸Ÿ¹ÿ™äñXxŽåþøÞùzßÃÙB~f[û¼¾›€£¯ôÏ$e–¶Ì¢¶5ž±r»�Yã½s2Å ½A|ï"¢Ø›}ª}8þ�µÓçàC@ê¸]³Ù, AÎ:Ei¶ÑhT|ÃñxŒ»»»Æý=?MõûýòL�:Ào�Y¡Ãº?™LÊœ`mBÇœMÄ3‹E\^^6‚¼†°Â^�â“�Ɍαî3™L~°Óétââ⢜„®""Æãq£ ÙDd?š(dÍét:ñîÝ»r’ pÆÍåç ±?CœžžÆd2)÷¦?ÞïBú8•g`”ó=��À‡œåy˾ˆkýœì/*iT¥J•*UªT©R¥J•*U¾ˆ8’6¢��Á/Ä _¸ ¼¬ãã|/@Ž uÄ/ÿx€…40‰äi“'ŽVpÉ1¾ü›èTödzÐfÀ(ÚˆÈvqÿ‰"ˆ¤Ÿ¼X†ŽÜv}î�Ëù!md@Û`0ˆÉdR2t²äñ4D¢O™`2�±a°”ì&ôÇ}ˆœd0`Šþ‡Ã¢Ãáp‹Å"Æãqƒ sY#žCÿ´ô|NmfLé/Y&.k³ßïc³Ù`p½ÜßßÇh4Šù|³Ù¬<è� sl‘~öûýŸ�èÛ ( P¯×+‘䟟Ÿ ÙÙ˜‰ 2õ–Ëe!�éóf³)™b···%꛳Ÿ ªÈ¶#s Ò‡1¸¼¼ŒËËËB~r¦…ÁD2ëè§K5R†Éà=z€Ì‹hž=bBÙs ]Bžóÿp8,c7ŸÏç¥à'°"þMЇ⟈̔¥üYdwñ|ú“K±ðtöM&Ð<‡²Oç‡1À9Ó©ßïÇÕÕUüú׿ŽûûûøüùsÑ™ÉWÊ0ƒ2Ö~f&0ì;¸Ÿ °^ï¥|ÕÅÅEŒF£BaçþlîOiÄóñ .ëeRÜäBÎú{KÙþœQdÝÛ¿øs?ç·3¡•×¾ÜW¯‘^÷2i˜?ãç:Â'¶ævävgrÈïåçùóÌÖóétZ2øL2o°?g•0÷2Q?! 8o û‡qyy“ɤè†ùËÙfè¶ÛíÆùùy)‹‹�?��’�&Ê]þÕ?Ù62yŒ¯šN§¥lä~¿/ç±6³a,ÈŒ�Çq~~_ýu,—ËX¯× ̵øF“qÌ?ÊÇex0ŸÍ8›¸sÙ¿étZt<ckÛh›7¶=Æüää$æóyc?ä $Ÿm1äg±îŸœœÄl6‹Ýnwww%ë1!ž„¼.“Ýñ’�ê¬,lÇ{Mg<\A9dúg©¤Q•*UªT©R¥J•*UªTùâbð °$" �oÒÁ¦|ù%£ƒÏó9H�6p pÁ â/Ø�DÓF`¼Bìø8sæ�#®�iäˆ]€™ˆ(à )Ö…¬68D柤§lý‡0"s„ûD@& 7Jð°¸0�øø€Î}æ“�iÆÁÙ3¶ÚfàÏÕ¿"^£ÑÆÈlAçèÀez äØÑ7ƒëô‹’6´Ào4ÒˆreQÀz€-"™9‰g0®D‘›¬sVc�>)™‡.Wì=x¾˜°ô³ r®ºr9ÚL¶Ÿ7ø}qq���q{{[J~õz½¸¼¼Œõz]2H°ûÍfS"ßï÷å@qH£ÕjËå2ºÝn¬V«x||,¤:ÊcùððƒÁ ~õ«_ÅW_}UÆ ;£¹&!ã H~úô)ÖëõOÀ`2Ê�1¥…ìKL(l6›R r€Õ5@¤£§|¯aßãñ¸dNEDñS€¾ŽÐd¥”Òýý},—ËX ±áìÈÄö{÷±K'øƒËËËøÍo~ÿðÿÿùŸÿùb{å7mpÙIÿ¦]¯ü˜,ÆGÎf³�F�¬HtkÿâˆÇLªã bMàü¢|•Ë�âMèÒæ¯K¸:0‚qç·õo«�P2o’!ÛoÎ4ÊäbÒÉÏF/ÏÏÏE�&p²��c{óØÞ›¼áÙ9“‡g2ÇÎÎÎ ÀÙ.&æ²ßxx(g�áS€¢�d=rÆÜx<.åñø’ùAféápˆÑh›Í¦lprrWWWe-¥<.{$ŸgQã¬U“ÎLÆæXÇ\NŽ5šùÈý½@ãñ¸Ì'2“°e>ÏzÊó�ñê¹kÒc»Ý6ü}r™KôÁõ´1ŸÍyŽ-�¯Ù©¶SðÓé4æóyœžžÆÍÍM!‰|6ÛÉÉI9OŠ Úf› ›l<—ÀÏ ÚÊ:úH–,û Û3ûŸÉdR|½}Èn·‹ˆ(ãêLÍ~¿_K�JU©R¥J•*UªT©R¥J•/"9:;GMG4³ˆâl, 'o#^�J²™ jàZ>Ͻ#¢ðDÜ1ìÈ{ˆ€¡étZÞ7Y”#·ýΗx~¸ž3;^U fXB™ôx4ñæhZÀh—»¡�™´!j˜ö¤qð3ã˜3R"^Ëcq_Èë�>ä£ Y?3£èÊd];„bÉhàü€"×ÿ§<“þð9Èg}ÑGÆ“ŒÀe®D”vY°N§S>�˜Üqÿ ˆ2ö�ÈvôÆ|²ML¹·¢Óé´QvÇQöÌ?ŽÝn7Þ½{W€½ÓÓÓ8;;+¿¿ûî»øüùs‰ˆ„…˜$;éîî.–Ëe9«ˆèt®ã¹Œ­AÊß�/gdœ��•³‰ôÓét àˆ_àÞ.ñ÷ðð···…(¤Íóù¼D™3ÎDÙ²b&4onnâææ¦œ7ÀÉyMd GtŒ�"óÀeŒÎÏÏKd=6 ùgz>Ÿ7HˆõzŸ>}*þÁ¤(¶…­ ‡ÃŸdâ Gµ›`p†‘õôûý>®®®âÿüŸÿ¿ýíoãéé©dÝßß7|íõÂ{øÆŸæyóððPÎ}ÂïÌçóIiŠ�ÈE”�¦Œ¢Kw¡w|ä½×'ƒ×Κe¾áÜ5Ù¹Ýngö�Ö‰ @ü§ý:´Ïu93|7cê@ëݾ<¯&¼Æ1¾OgÄAŽÛ—ydlY—L”âËñߌŸíޱ???�“““R‘5ýéé©d·@þî÷û¸¹¹)ó•ŒHẆN§S|Äh4*¾ŸÊºiäÌlôââ¢è‰±y~~nd|š¨íõzeî�1åL7û{Ö®ƒ,²½âÛ=×'jP•ý>ˆµâéé)F£Qc€ž(ç“]øl†ç`§øJH#Î_tÙ¶n·[ÖÚåL ”Œ“‰Iú€>É|e®R2®�Äe®àÿ(Gÿ�ùìý¤×€Ùl³Ù¬£0¦¬ûöW燘Ïç¥ß@QþÓRI£*UªT©R¥J•*UªT©òEÄ“ÁDL8|6``ÐÌåèÍîHo—­3™bR…g,ø‹=¿]†0ÂQå€C Ù�£º#^Ï¿1pB™–ˆhèPÂY!Óè÷L,¿¿¿od0xl7Éâêt: ‚ àˆÒ^#€tÇã±A „:óÅd”3­ FåvC€ú,噀qÎn"[ ÒÐõññ1–Ëey¿­üŸÏ`hg>k²�±bœm U&9g� –6;ñ¼²�>6]€ú†ý*@ÒG€:>ŸÉO“F¶7Gã¯V«bãœe‚€qÞl6±\.cµZ•÷9 "îx<Æz½Žõz]|AÄK¢»»»F)Ekˆæ%˜°-;H(ÈeHA|Ãééi\\\”y}vv?üðCÃa{.�u<¾d%M&“F–›Icg~Ñ'2� ÉŠ|zz*™_ýu|øð!Þ½{?üðC,‹‡eÌÚa0ÚÁ™`7±Þëõb·ÛÅz½nd·�uH4¿Ïž¢_ÌdaœŸŸÇt:�n·[ΟY.—�L¥œ…’__­VÅî!ƒA£¤Ùb±ˆ^ïåÌ.ˆ²QœƒŸh[c Îç5Žë™»%@HB䳯z½sßxÝ>ßLÛ|N åJ±SÚ‹Ï&ÛâÈë'6ÍØrû úl_îóøL”L&“8;;+$þv»-äžÌ3HŠN§SÆüòò²�»›Í¦ôÙ™½Þë¹môÅsÑ%â_—6Œˆ˜Íf ’Ü„ öã9� ]ü4ãÌ� gï­Xãñ¡øOÖ`ÚÁ9Œ;Y5777?!zñ+Óé´P0&PÖûïÝv»]ùmdn;(2 ŸÏ<ét:å,BàØ§p_¿ß/A&Šžžžâöö¶ˆÉÝn·dyáGœ]�ÿ¡�ìµÖ!ó‹~c�—d‰²ï¡„ ¥ZñÁŒçf³‰ëëë²×c¿G¶RΪŒ¨¤Q•*UªT©R¥J•*UªTùBb€ÉÑ”d#8K…/ø|YÄu)~?<<�ÇÄŠ#ªùâ (`É‘×.¿�HuJg£¼7åîÅuŽ ^¯×L0ÈàeÀ:õш.æoÚ xÁaÐè€þ¹ìUDP :“²„ûô8ãLJZ£;Ÿëb]ê9Â{1àH[L9jPÙÙK@ŽžgüM(Ò—ÕÃ6еIF�!¯üȘ2oýrŸ\Rˆ¶Èó³ÁÏØ–¶e¸ž#©!t<_l;̤€ý'''�ów2a 0ÊKθ:;;+z<ÿé驜ͱÝn ÎßèÐÀ%úñ9¯Û@wæž}‰I5®‡àzS2@õ°;Î á“&&Ë}vcÈœ;ÅŽƒA\^^6€a"ÃÉZ 3c:�F¯×‹ÅbQ2›È&r–�IH‘÷ïßÇñx,¥é Кô�xͪÂw¡'ƒÉ™4ÂL>QÊ� ¿«««rVØ`0ˆ«««â— l,<"ÆDã�K\r?JW1?Uãâ⢨dš@p9+h>Ÿ—3S˜ø ²EÈö`=ã,²ZÈ™ãñ8¦Óiìv»Øív1 â믿ŽÓÓÓøþûïcµZ’„ù°g¿l?Šm™ôú…ýû º\Òå»Ð¶å2š¼ÏšOI¿ãñ¥¼%>ÄtDèx<ÒÛ¢�Î\s¦óË�ø7ìÌë kÄvIÄ$ŽmÉecÑ“É:tæ,2ú�ïh[ç]RÎkR&jrÉ9“/ømîŘÙ÷9[»v†!s#g³Ò6ÖȬAG99îŸ;[ˆ²l´Ûäj§óšJ¹WúŽ Øßã[hƒ3©Ð«÷Iž <ßÁ-Èà:ʤšÄº¹¹) ‹Å"æóy €ü"Ký±'ƒHà z?Ón·[æ#�KöiØåEyd,A&Â\N?l©¤Q•*UªT©R¥J•*UªTù"â/à>ô—/¶.³ñJ~øÌ¾dóe9"`¼�öˆ×jÊ�kÐÝ_ày.`ÞÉÉIÉ4899ùI$µ~? à…ˆ{¢T‰Äö �1&îi�hgG•B PzÉ ÀŠp?ÓEÎæâ.IfÒȺvä¶ ?“gÌ‚„XBïÜß@©£†�Éc¢g»ÝÝœ¤O&ÚL0¡ßˆ×rh™ü$c œi� ÄÈäY”»áÿˆW  r‡Èx¢çéÀ¿�Kl†r{Ø8s/â`G¿Çã±”Nê÷ûqyyYÎ�r¹ÀFR¿wyyïß¿/äÀ:%Ÿñïl ÎÂ"Ç(øgZAà@Ì™p´?@OœtvvËå²<›ùC»ˆx·€Ç§AØp†ÄÏ|>�ápXÊbB:œ��5æs¯×‹Íf'''�òr&•�%Ã9*&XÙ‹E)á7›Íâòò2V«UL&“RÖ‰³¨œYrww×(_Ÿû\42�m!Jðß�''''±^¯£Ûí–2{¢Öo&õ�qhRß6ï ÊчØl6e>>>ÆÙÙYÉv�Ð`.QbÐÁý~?æóy#“ˆ¬’ˆˆ»»»’Aðþýû8??�^¯Ÿ>}*@3àðp8ŒÅbQ²Ôúý~|óÍ7qrrRˆžÇÜ$#Íà9}Æï0ùÛ%Ô°-þ�F%›Œ5Ãg1™Ð «ò›ŒB|¾ áuqÆ…l�Nç% â ›`¯`àì1ü)ãaÂÿ�ö\u©Qì•û〿yxx(ç›Ab˜äéõze�à BÈg�°V:£ ûö>‚Ï8“4N¬‘^¯XƒøÛã�‰.ˆY“P&ÖÑ~ñùù¹qÎ¥UY‡|oÖ—ˆ(Ád>³'Ã'@¨2¯ñ‹Œ¿3¶ ‡°úÄX˜TóºÌ˜/—ˆÑ7D£I<²@}s#" 1ÉxB”3¦´•5 âœ=öN?ðSœEÇÜå}Öa“bûý>Öëui#¶Éu9HÂk¢¥’FUªT©R¥J•*UªT©R勉³�üšÁvƒŠ~|‰å ½3 ˆÈጡˆ×3/üÅš/ξЂ¶¹ìÈ~¿odûÎG¼‚p€€[�‡Ã¡DŽC¸˜ü m9ƒÉ@”3ULtR†¢°@Ð¥†L´t¥\×Ò.Þ79pç(îiÐÑãe"ˆ±tæ ÷e=Œx\±±¬Kƒ‹/¾‡3¸œ‘ãHdtpÈ8T3Iÿk�ÇcƒX4‰jbÌÀ:gÖDD9üð’L£Á`P@eÈ<ú‚­™¬¤b>µ‘^žg&`([5 b±X”(ÏEdÀßív[Δ8;;‹o¾ù¦´ ~»ÝÆr¹,ä—Ë¢{—ÍCô0úx|9ÏÛñõú ßÖý‡¼CYʘxƒ \,ʼn$§Tœç#¤ 7™\ÝÎ"qÙ*Ú Hí9d¢—yë3½˜œ_ýu\\\¢ÇóŒ¬ Î 3�ƒ˜œ0(΢tÇLOOO% èââ¢a[Ñm~*ƒæè Òƒ÷ÈdŽac܃rp“É$v»]ñïãñ¸Œ5g0y�ÇR¾Œ,.2Ó<§‹E,‹äCšò[0€Í¸RBŠgÒ?ÆÛÂ<¡\šK¸šøÊYzè 2;�ˆr-zbýà‡öóÙn·yv 7þ�߀îÎP%ÈÿñQ´ÛD@¹mž½z†ÜÂöû}9�Ê$¯ 2Þ"¢‘D$`ÿ~¿/ļË횀v?ÙÏ /gfÚOñYlœuÈ™)<Ã>ŸÀ\1Aà{ó·×qûB¯{öqŒ}†œàÌ)g_yÌ;�N¬V«X`2é=">›€dt)]ìŸ6dÒˆ½s†Ï0®&†¼ï`ÌX÷œ±‡�#€µ;ðÞ…€öµ”³s�ƒÏ{zz*Äm¯×+öÆ\$�î=-ëkŠ3LŸŸ_J3·l§Ù‡TÒ¨J•*UªT©R¥J•*Uª|D6 â6ÝL|$ùKµÁ"7þ€’\|öN>Ûƒ÷NOO bPÚ%LYŠ&D8s‚,$¶ív[ÎFàŠˆ–ÂF¼€v——— �™¾`¸` #�»Ýnl6›x||l”J1‰¬í÷ûJúÐhƒ`<Û„ˆA,·�@3(õWUˆ�õzÝ \ g·ÛÒŽ™´qf ¶hbl±X@Þà%¿°[À8úÈy Ø“£ƒ Xžœœ”²a”Á2A�Àä³§F£QÜÜÜÄóósÌçóBœ ‡ÃR‡o“bÞŒ=QÏÌtƹAý\O€ÕR”7£?œ£³^¯ ÀÈE)¢‡‡‡�Fñí·ßÆõõu�Ǹ»»k€¾€õÌIì³×땳C2¹<›Í@Ún·‹³³³8;;kô@² (3XêÌBg9A¾àEGø�œ-ÄY$èÛ ŠÇd :g�Ñæ‡‡‡˜Ïç±X,bµZ•9FÖVÄ  èŒEæ2e%\m!V†Ãa\]]52+òüxÿþ}™‡ÍQ²… &“Iì÷ûøøñc9´;a^ßßßÇÙÙY)µ†½ ­ýÎ^ÂOãcð�>Ýn7...b¹\–¾z�8==�ÛÛÛˆx!øÎÎÎ"â¥ügNqÕééi¼ÿ¾�™´u±XÄh4Šþç.YCãñ8®®®b0ÄÇ�˳űÃ>”3t8;bÝY¯×ññãÇ’µÑF†Ãd2‰ÙlŸ>}Š~¿Óé´´™ë±Î[‚¬¤du�½±\.K�W>{ØdD4Öd2ë ;sÖ^Ï)JiÝÞÞßD[�ÈMÖ ?>›Ë$ YK.Ù…nñ-¬W¬•'''±X,âññ1îîîâÝ»w…\èt:±^¯KæØl6+ëÒÍÍMY'‹E/çó`çì X;Ëù79;Ȥ=þ‚Ä ”ä,&“Jôßâ`Ö+ßÏ/´Ãe!Ñð7Œ�Ëš­×ëÒ&êè™ 0²µ9Œõ”µ†uÌ${6Ö(g×åà#‚yÍ…�&xg¿ß—}‚ç{8ö†óù<6›M)ïñRR‘ LÑ&‚½ŸÁÆØ÷2½÷:??o”÷£MÞo@ 3w ë(yŠ_y~~ŽËË˲æ9Ë0Û RI£*UªT©R¥J•*UªT©òE"…HwBDÝúܾ¼C ðå‘ý>7 âœâ5GtæHR??g59»ÿä䤄 ˜ pðððÐ8c†þÝ~8¼Ô¿÷5&{À#^³Wœ½Á½Ð `?ô€ÜY#~@úÌY9K ]Œˆð�3€,‡Ã¡�'åÌH�. ‰ðƒ@,ÐÀFŸ‘@[c! (ð›ôptµ³<|ãm›à³Ü×ep ½&“IÄÞ}Æãóüüz7ãÉßÎv˜cþ`{Œ‹õ �æRNÎÀb^B`‘¡F!€KØÎj99y9—…Ì2'è v.…ÈÈ82f³Y™Ký~¿”ãÀp®¨ƒø1Èh¿`{69Êól?U”øú8ÉxÐ'lÛÁöÉ‚ð¹žÛ\k_€Í2Ϙ?üïq5Xˆ.!U ¯°'FžI9Ĭ¯ˆhœKCßÐÄ‚ 7Æ×YlÌ H.ôÀ¼°_BgöínËt:mŒ ¾«×ëÅn·+„ÉÅÅEœœœ”²x»Ý®Œ1ïCh2!ƒ°%î�Îf³YÜÜÜDDÄl6+;D„#öeß™³T¼v2~&ÈùqI7æ.¤!äYsd‰�MŠ_À·Rz’9L–c‰�àÏSÎèÊ™»ØãÓÓS!±WæY"\Aâ3ˆXß½na—>+(Ûº3‹Y‡!‰ñQ'''±Ýnc·Û•L]ˆ8Ö/ÚÈú�­`¯Ø¾ØåøXK”‚^œ)ä .ûNlÃë´ƒ2L¨™ØõáŒæ2÷±Ns¶´3ÜNß/›ð?ëÿr¹ld0šT2œßwà ëŽý"Ïðx{Üѯûy¬/¶I� ¤ëãd‚’yâ5¿lŒsœð]d$ôáR’öÌãn·[2ŒaK ÿ|„.i?zrV²¥’FUªT©R¥J•*UªT©Rå‹H>dž× Ðm’ÇÙ�ó=MŽp-Àà$âZlˆxùrñYK»ÉúˆˆñìÙï÷±Z­JÙ®5YeË€ ™Itâó&Lö¬ŒLäqT»3p . têgøZ_ŸÁ)t²ÛíbµZÅÍÍMt:�øöÛo#â§çøä DD‘Ï�5€A&%‰D¶ýdòÐD¥Ÿ‰­€4H D;EnP˜Ì6ÀTÛ,Ä 8Qö¼`ʘ› EWκÈQÉÌ1ÆÙ cEé/ìÝóŒ1Æö¹ Øö@ ¨LÛ)Q…®÷û}!Ì ‹Eh°™'ô0Üz2ØgÏ¥ °k &) xÌ<5yø yµ~"^ÏAq™L“b€ø&loøKÅy¾ÙŽ=^´×¶Eïö;În0HÑqJÖ“ÁRÇü ‹d"Ž>ÐGìÆ×¡7ˆ1Öí^C¸‡}Ä8Ä6‘K`:ƒn±X”ÒhøH² \†Îó @™¶‘©ÇÜ€¼Â_A¨BLÐO@g„fbRÿæÌîƒ/… Sˆ×ù{<7ÎRËe;yóʤ5à9Ÿ‹ˆ’]ƒ~œÅÈzN[!žòï ;g»ùœ3î•ϘâYÌ]ûCˆy9P¦ Ý›|ጫÃáP2j ûìà�ý)¾Ô#äþÊeúòyCynqoô>Š=ïãoÉv¤�θô¾Ûbî£GÆ„ymBË�$´/ï h~•Ò“d}‘Í‹Þѯ×ô†ïàù&L±™Llùoûg?ÙFè/ýdîãñ™�ÚÖ‹K(N&“2ï¼c`"{žv˜"[2“ê´Ë6Åg...J› ùù?ïè/óÍ•4ªRå/^r„É_ª´9ÿüú[ŸA¼ùͯÿOKŽÞˆøÿG»ªT©R¥J•*U¾¤ü9 š/Ä€›³m µˆâ�pD=_ˆsID4ʽìv»RúçúúºQ ÉY ŽªuM{1úý‰´_¯×±Z­âþþ¾<“’%€·”H1ðN¦‡#mv"¢ËôÏ2~�Ö IDAT™üöß¹�d!¢ÛQ¾€‹ôÓD€U&¼ F£«çççX­VñùóçøøñcDDW)‰Ø†haŒ)ÔëõJ‰$tAä9䊉HÚk`Ú£÷逪²Ø€gÌ`'°$ò@o4•Ï�F£’Éa@Ý`º#¨�1xísG¹›ˆ€¨bÜ X™è2€–#ø3iæï0&€"¢q.m'"Û`™yÖ'ó;â…´½¼¼ŒN§SÊÏ ƒrvŽ3]{±ƒ‰Ì#2uÐ-€/Yaø!^Ù_8â�Œ(†³Ù¬q. e°ßÀ&cÂ3œabŸ…?ãY™|µ}šhaþú>“É!²%Èä�Ü3pL›É’ÀœÇ¡ïØÀ¦É¦œÙdbØ×{3aêl*g `ß�©Ì7ªÎ85yŠ_Àö#^ƒ(•èLôG_ ’|¤>Œ>A8ív»2�V«U!)I¹íLFÏeJNu:�RúŒ±Â’!Ä{&ËLTBa‡dÜâ{í«¬w�Y‡Œ@·¯£|ÙÖ�cô»b ñô�y̲ŽLŽÚF!êÏ!sŽÇc)‡=ñ\쓾î3_MÆæõÐk"¶–ç³Ë¥r-¶k]CC’á ƒL„0Ϋժ�Û^3ÁÜp ‰tè~ÐÄ,óÆ¾ ¯GˆYX¿ñ{¬\K«÷)'̾Ï×Wô9pè›L,�÷°?Àw¢ì¥×{=×’½gÞkl·ÛŸ¼æõ›…ØÞï÷±Ùlâîî®±ƒøsùJÖgü£ÇËÁ^‡¼Þz~²nÃR+iT¥Ê_¨d’(qü%ŸÿŸ”L !Ùéûï_B$ýWåÏÑË/}> ¾¢JU©R¥J•*Uþ7 @�ÏI0A”K¶ðea@Åkþ  !e‘ †òþ‡lé÷û…œèt:åL"¾àdPºÌ ) ŒK”x;rt¹\–ëÐÇñxŒÍf···ÐøÈg�ø ¾ tcbËć³ ªyoj‚Ä%ôL”e2ÊÑ«öަ€¢” £\ ú ∆€M½^¯qž 퀴É#}æ·ÁtÃ�Ë÷ð> ¢‰)ÊÉ‘ù„°qÀ/ƒÍèÉ%›œ}‡^Ñvn /G~»/QlÃöÁ8òz~ý&»‡ñ†ø2™eR�9hï{2Ÿ �š„rV:à|p>a,mìÒ>.á¸Ùl ©Xn’Ë ©#Î!Ô @Cž��p“3:H-Äà³u€¾±ÆØÙh&îÈ‚4ùnÔö )Ff†}톴†L¨x~š¾¿¿/ã ™|<˼äõr”½ç7?Ø?øJtkÒÛsvŸÃÖëu)«öã�?ÆÕÕUœžžÆjµ*€qÄ !æ2dôõãÇ�…”d\îïïãîî®AÀ07ÝOÚ�¯8…º¾¾.å}†¶Ãø3M<ôz½dàl©ˆhø8>Çzçì 2�Ð xZxî9#(c�)øððý~¿dÙ0±\.c³ÙÄv»-YoèÍ>s“õœyŽo‰ˆBÛ/Øšôâÿ<Ïh?úŦìË™gèŽqr&÷ã:°È7Èjgy8ðÅÄ2m59‡Ž ‰ !d‚�ü–‰uHÇL¸2§è“K™zN±¿Ê„ºg¼ @Lâ‡Ã˜N§E&bX;½îá¼.·ù| ï1½™&s�CÎÛ¶±¿ÜH"Æ’uŠ{¢—±coG†™{ö]Ø:þ”sêX§(oÊÜ÷~Q ”Òtöô‹µ›ÊÁ&.‹~âªT©ò!m„Êÿ4ô–´$´µ- Ê9~ÏŸù%¤Ó·ü9Ïro•*UªT©R¥ÊÿVÉ`�51ø ©àÒp�ÿGíÛét¥†a ©¨¾ÝnËAòD‘GDx‡p|n _Êèìh´A¨»»»’ØK”1{bôgpÄz1àÒX"€%�‘‰žuLt°r—z0Í™F¼gòɰd°�ù@€ŽLÂ8*Љë_ à¨[÷Ûѻܠâ3.-•AOîÈo¢ŽL† \œ9Š›òz€W™d¥­ÎÄ0)B;é_Îâgõøo~ $úû�I6·Ë €¡&tüfìÅ$™Ç˜63ïßÑÍÉÉI¤Äx�ñ�¬Ä–ù,Ïe\!°9¸}±XÄ|>/çKùðt²�èv„ý;k�qq¶ó}–C¡; ô¸MßðyÝn·øìÛð�êžß9# }àŸ#Ûnö'÷èÀÄ.ä<÷æþ€Ø>ס#À^îçlô h½Ùl xOY,üÄ}åþøÿN§‹Å¢�>«Õªá‹L"`ëüïlÏKìýáá¡(Ìuü‰KTùþØ$:´�x=´ŽsvDán·kØ zsÖ—m†gÑ2uÛÖpô¿ÝnË»òxáÈDƒ|ðÚI¿Ð=íç=¯{ìa¬àuÖ¤“ý÷C×&ÈÝŸ,y�tðd±íÕÙ‹´=ãç�qް “9¬ƒ>ËŠöx=á5úçþàƒ Nú`¾á#L–»ÏÎ6‚¼Ï{Yˆ:tÉ;пæ5•1£=£Ñ(æóy!ú(wg_€íM&“²/q ‡×Dî�M2æØaßk©¤Q•*ÁÂF:â/�Œ°£{ëýŸ{¯íßÿ¤xƒõ§ú]¥J•*UªT©ò»8 9ZÕÙ”p3¹ðëÈy¾G¼‚ Di0Ò, ‚Š}5 � 6å(`"A}GšCZ�QáÃáyŽ#}OOOË!ä“É$†ÃaÐ G¼€Å€JŽ6Àc0Óä’‰�œ…B6‡‰.‚€R&c žxÏk2Áà cƘÛNœÁäg�ÇB¢ ÚiÀP` ×åd° t‰> J�_Îu¡4Ôl6+ÄÁñx,¯»LÚáp(zâ»Áf³)ÏwF�A@ë”13(H¿s®uv Î=°al À©ßï7NæªÉFGˆÓ?ì‡,Ú ˆæÌ›N§SJí*òžÏô19K„=í¥ƒÁ Qv ¢b6›•ù5›ÍbµZ•sX¨±g Ä6H»ûý~Ìçó’1B³g¾<$ž~Ä3èi¢ÒA”ÎÂgDDñ/†ÎÃFLô<>>Æ|>/€ûn·+‘õ§§§qww×Ð÷5€oRÄ¢�J@Vˆv@ïNçµl`§Óidì÷ûR2 »væ ÷ã™ô—{ƒ¸»»‹ý~ý~?>þ\üØçÏŸ£×ëÅt:�õzÝð-ŒDÎh4*öv<‹ sÀ¾ýû 2·Ûm‡B&BP�ÕzzzZÈLtá3¹ð«^¯L3žØŽ {g%Xg2Ť¾É|€} þ�ùÁõ»Ý®´�L¢çç—2]¬1¼f?EXŸÑ)Y+Œ1þ�¹B±±¶õÛ°�±:ÆÄ¯ÉwH“É&ÎѯK•y¿À½|n sÇèÛÄâÌÈ6ÆÆ~Ò¤×x<ŽN§Sž‘ÉKŸcå{:À…¶z®;kÐk¦íƒ9@y@Ö|ˆ`ÖGJÃ2þçàGè‚.M ›@óÞ‡çz.å= ãËûÞ{ Ü×vfŽ�ö\´çûMöCÓé4žŸŸc>ŸÇb±({,Öf㤾/�\cR’ëÜ'üéýý}ÙksŽ—¥’FUªü…ÊñxŒù|Þ(?ðVd@›Øéý©×ߺö—~‡úÖõ^°ü…‘E¤�ËÑ#üý%ɘ?G/ÏÏÏñÝwß5¾Èx#P¥J•*UªT©ò¿AÖëuƒrô>ešÈøqù.I¨0ˆÈáÔÇã±QÎÃ{ID»n·ÛrŽÊÍÍM\^^–¶@œx Èà÷È.ˆˆÒ¾ápŸ>}Šn÷¥ÜÔn·+ízxxh”éèæ, È Àö�èÖ €0º0xC�ŽŠŽhž�ID=Àƒ�.@,Úéˆ]G^2ñÝÂÉ ,z3Øç¨k@EÀÈ"À#úBÿ 1.&‹ò÷)gQÐW—Ür4îÓÓS\__Çd2‰Ãá›Í¦ØºufÒÇ@,s ÕÑûè€y@ßîÑ=¿ÛÀ+“‡ŽÜf~asþ¾æ “ÕjUîÉó�MG_ˆ,gN@¢š¤0PFßL`æïIî‡ÁWGÏ3'ù|Hß8“ÈãO[r >°è‰LÚNs…ï³|Ö}å3Î098™LÊ9:>Ì•sÑr6 b@¸Û}-ãfB,U�/�N'V«Uø˜÷çñ|oG×Ì“é<ÛmÇVh‡3î ל5b�€ãÛÉÏ<5QÁ¼tfkƒçÀ4z„lÃ_£w>ñÀ="š„!ë[¿ß�ív[@|ß0Êz€¯·N°!p�!ãAñêã!ˆ)—±‰Ãµ»Ý.ÖëucÌñ…€ÀNœ•zssSl�²®”ñd™GŒ?d2Ä”‰P€| 0/Ñ�çÀºÉZü޳HÛÖƒñÆšŽÇc)…j?e ʤD›/Æ6½oÈþýXŒ…™\r¦¡IŸÑ6�N{û!“Ò&°EæŠ ‚qlÌ}Ï£ÙlÖÈ¢„ø±¿§Ý;Ö^ïSð#Œ㉎y?oøn“&¾7º¥ýø/l…=ºbíð~!¯göy|†g±6²žr/Öö‘œóÅjÓm6ÑÅ~è’z”�d-FGì= "Á`-•4ªRå/Tˆ–º¸¸(¬|XâÏI‘c§ç×~Žôyëó™‰÷ÿޤ`‘e3›ÍÊÆŽ(=/”yÁôó2qfî…û—´ÿ—ˆ¿¨ü©ëÖëu|÷Ýw ¬J•*UªT©Rå›pN„³K+?ÖëuX¨Ín�н©�h—¿â}— 4sP÷ “„kˆêìt¹7>çl)GA@PˆÎ 7{^ƒBô¢€ `Âûl“´•¾¨#úpÎûl¢²Ñ3ýôÙ3ŽPvy€SúøÎÞðÄ?º;ÙkÝÑ&HÆ�1~J|÷d"‹Äß� °ÀlÓÙ"¹ ÏÀ®Ð±A!ì”ì9¥<"`³í$×Èe‡ø2Àd–K±‘5à’câžÉ àÞ¡Ö'勰߈(6ˆñΜuÙ%¿ŽÎ3ˆ�I_™ïö9ÌÊ&cx�ÏÑ^2Œ° ÀRÚàï…Œ›ÇØ$ß9mk´Éú�HZ­V1�ÙþNÌ=óø»�€‚dÇÐÀƧ§§Øn·  A 1ÁuÌiæ„£üñ�öÕøl‹¶£;ˆ#û ûä:ÎgÁ·9£ ÒÍ™?ôÓ6å UÊa:#ÊóÌ6æv2�5ÿøR“˜öÙôŸõ…ó¼è³×#ü#úCçèÕë ?Ø~„õ°ßïÇýý}ñO�&æÈ²2Ðn2Þk±IPJ ÒoαÙï÷ »ògôð\´¾F£Q™ €ìÖ=cÁ†Ž=LXò|Æ7ûÆÖgçà±Ú@{"~z6�}²ÉuÚh¿`¢ÉD˜3È<¯ÐMöeΤvKúÔé¼döY^ðÿŒŸÛG›LäšÄðÜè÷ûqvvVÖe¯ž_؞ǀ³"Y[i[ö÷&¾ñÞ+r�Û��²öú½s&–3¹=–è†×2ÉÅXDD�L<k¥³Ù¬�Å.§h²"6ûû§§§2#¢ÌõÃáP2umŸöOئ¥’FUªü‹�‹E~?¢I”ü)R¤�4âþ™øyëúŸû�?ë/lP"^¿4»„›œuN÷ÏmbóêtR;Ú|ý/Õ�?ÿKH#¡ˆŸ~i«R¥J•*UªTùß$?þøc)»Fi'öƒì‘rÖ àU·Û-Ñáf4Tù ‰µ<ùbN$8`Ù#€ˆüí@¡\®…6p¯ív[@ö¶´g¿ßÇÙÙYD¼CD �Êó)‘æÃ¥‰~Pœ r9âµTm4æ½0{j &"` Š<÷^àÍ™ˆ¿C$fRŒòlœâ¨uë˜6l òû€<|�$‰ˆF;NOOQ¹™d1a€>Ð'DËh4*¶ÓétJöƒuËw�üý�r²”ï0ƒ=l»rö‹‰ ƒÇã±�´Û™Å;�Nl6›Rª&—CrD÷óós¬×ë†þX)sGùæSÄËw½ûûû(  J©# âÈ4yxxh” ´ÍZ¯€dÃá°Q:Œù L›°“–³ÌQ@PÈXæi_M¬…ïyÉ8›Hqi ûûû2Öwwwñøør¨ºÏôpFЉFlf·Û•1óXàÍiïjµ*guÚ:“Š9Š�Z7èÛå¹ì{èn3à1ㄯel)Ÿ·Ûí °ìŒ@ü=„²×ù|www…X +•Àžç :û+æ(>:ø@oƒÎØ>� TæìÅÅE#üƒçDDé¯ý6ŽäL æc7K{ 5m»ä0P�žm+ösŒ£KI2Ÿ(Éf[ÀGL§ý^¯Öç|n‘ƒ%ðw£Ñ¨‘áE{lW&Æãq™g.ñˆâÏÑ_ïIìM¾#ì=¸†yãõ‰¹åL݈ײløJÞw–÷Ï> ÝãKl�ت ÏO’´ƒ ¯�Þ�/ÙÝè„ý�ÉrÆu6ÿ“yÍkè™±´®MN{ÎÞßߟbRξÙû lÂóÍ4ìX ½–£oÛ‡í}²os–0û%ü cKÐ’ Ä™]�ÎkÖ6¾c»ÝÒ·Ûí6ÊǨaÛ…ÈbÌ8e%�ªTù¿H2 âÿÿâè—È[dÑŸûY·Ñ› Éä;LoàXhp¶¸¶-êî¿*Öé[$Z•*UªT©R¥J•W¹½½-ó€X¯ *@åšh ‚GDùRí’Z9C�CÏ3™Â½ dFD] ò°ßti²ÙlV„ÉdRjÂ;"@Ê‘Ì9Ë€’ ˆhô?"g|8h*â@ôY�N§œK`ðçý±�Q>�öX1°ëè^÷ƒë ¨ÒŸ~¿_À_"ìó™?¾§/¿gÐÈgŸ ¯×ëòðćA&!&ð›'''ÜFG9£ÇQõþ~nÀÒ™(Œ“É­LLøóŠÖ]>£Š9ÇuØ5çÍm·ÛÊî÷ûB40Þö�&͘°Z­âx<Ÿjûñ˜šÐ ïÌ!ô9ŸÏ¾Þ„£u”Áf2ÆèÒ”rW€È¼ïr‚OOOå\.g^ÒvHl"�µÒ½ÚÇ`SÎŽ°Ý gpœL¬;K5û#p¤ˆ(™¼Î~ìõzq~~^XŸc„ßÅpo樳v v¡ìBðÞ{ðž‰iÆ�Øl^;Ñ·12cZ“0§9KÎ$ }Ï`mÊ�:ÌaÏcôÀ~ _Àç{gªàË�)›@°!ˆjØ ëg�Rè"ŸíèqqV¡K~úÜ4ïO\–Àæ �í”Áõ>„ç3Æø‹ûûûF–7ºaM¦ð˓ɤ¡¯öMØvLß½{ûý>nooc¹\}x]³>˜»�bìϲTÒ¨J•¿`ñÎü…ñ¿BêüwŠÛ›É#œ?¿}=×ðš $oèy�(¢ÐX�Ø(·éèÿ­d6¾J•*UªT©R¥J»PÞŠê]êÅÑÈ|�ç 6`ƒË»œ—ëÆ»Dïq�?Ã9\ãýh&L†¨øÌ ʰð%ÞÙEyŸÊý(ùベâ|h·Á)ÿ6ÀB? $�SöbÀÄ€‡ËÅøuÀ*À.Ú á²8@6h`b±XÄóósL§Ó¢o~{,y¶A=îgÆQ½€dãñ¸Qú s:�6@X“9úØÀ!@9@üh4*vëòHÎ|spÛñør>-¤I§Ó)ß[¿‡CA~QígY'�CØDŽ�k€?é,qÞ è`0ˆñx\Ê´q/Îñ2jb¤-;Åez°«ˆ(s {žN§ìƒÉĔ˼‡h£�€…èÂY.ÎÈâz“oQȪ\ ƒ¹K¿ýŒ¬Sûúõüü\2íŸðwd)AB ƒÆù¿øFÖ?´Óçzáolߤ‹íb”>n·Ûr77lBÖº�F8Ýív ß ˜3JL"æ¬Bô�_6ÙƒÍþ2öL0àO™EÊAò,ûÍét‡ÃKÉH¯Cøx²þ Þ™"£Ñ¨ÑûA‚ úãcl£ö½€Û&—ði¶ÑÁ`óù¼ˆ1™LJÉÐÂÿb'Œ5s�ùàê/ôÑ�¬Œ1d¤¶æ€áˆh<ßÁ#ø<æz6cL}2·Ðkån·‹ÅbQ|™iÎ*1™ÛívËó¸Æd›AðyÖcaØ gý0oé3zÅ.øºaÞák-¼†^7ÖI|$d¾�5•¶Z˜ß&ˆ Fðmî›3¹ü9—Æ÷øZïìW°Wö>jxž{Ÿä@tìØx%óÒÙ<¼ç}%þÛ¦¼«÷´›óÂæóy Ì ½Þ›òºƒ'øŸû“u‹ý²–,—ËÆžŸc;ðž}²FX*iT¥Ê_°ø ìÏ‘Dÿ�ÒŸs/ ã“?8eo”½¹ÎŸãÚˆ—/sÓé´ñ¥Á“²`E¼n$ÿ«’Éÿ/‰¨*UªT©RåÿaïLŸã:Žlhô¾`'A‘”DqL/²c�'Šp8枈ùæÓŒ­/^G»EII€ºÑû‚^ÞÆ/qºÔ  ¿‰�Ö͉Æí{«²²²êž“™•I&ÿˆrxx¨ííí¨w樓œ<ò éjÿ×ï÷W€&@|'[‡R"ÊAIQ÷0¢ÁKÄ8Hí€år¹T¯×“ô Ôš¤B…2]ÒU†ÀgsbÐ_"ä¥+P�Ò3jg(ìv»+Q©€S~¦QZÆ„•i[ZJÈÉ @c�vt‚<\._žÏº¹¹%¥«ˆlöê╜º€Ø~uüwww˜�äü†€ä�=c#�ciÙ¾åòe.2w·¶¶"CÎ3…èç8\ìa+ÌBš4�ˆXv° [åÌ‹R©v 1à/SŒ Ÿ;À¸µµ¥Z­¶2ô—û]^.—Ã.)¿ã:Dß”DOdœ-—K ƒ /&“IØ 6 ÉF„9ýdN¦ó‚v8äY$ø‹4p‘~;0íßóŒ¶ÖÌÆÀ£Ì=CÂIŸ�ËÜИŒ6J%BNîÓ^왌ì+ͶôŒÅz½z º�{ÙÌf³©Éd¢n·s‰Ì$'a=š?õïÓõz=Æ×‰|üöãÑðN”7›Í �<ƒ_i„Ï";ÛñrYžÍˆo‚¼ãožu•˽<§n2™¨Óéh0IØì„Ï£ï~F– mÇ<ëÈíÈ×(IAŸP’ò˜¶¡SÊ áKJ¥RØF©TŠl@HR'ƒ|Lù¾“ýNâó]·«4ˆÜ;sBBßÈè’º û²ÑhD¶ðÁÁÁÊø9�ÃüôLf'©ÐYr…B!2žnß¾s`qB—1¢´!{ ÿ××VÖFðµô<'|èz+ ªV«Ñ.|6>«R©Äßh§ï»ð‘ü_.‡_u" _”îøÜçýq»€¤].—a»ô•rÇ삯Á~;y Áˆç@"`3 ¡‰d,A\Qþ �t:�Æçiä¶—&ÚÞÞ^!>Üfcl`–¾¹^oúç%xÐ 6–êÉ3Š\gÞn·]ÏŠàùØ’Û4÷r]3Öü0—=!NüÜ'4~Ó’YáÎý Òwr'Lhg©TZ9?Æ3“¼´æååe‡½^O;;;º¼¼ÔÅÅEdÀõz=µÛí i¼fŽù¼ö¹�>±'.iÝwø÷ÉÌ"ˇˆz¢ëѽ�‡û€Q?÷Òˆï¸?Ềø�´d}u»]µÛí ÔÖ!@œ„ö,ÆŠ9ás›k÷ìÆ3Ídðr—ž„Oõ %®g®B¶¸ßö󘘮[î…Ÿä3¿WšýÆœôì銸ñŒtç¾Ïï‰õla× céóÙý:×@r6T«Õ‚¨P0ͪ IDAT#€"-Û™&¬sNÐ@|:1/ießàÙaørt辿ňßË×[÷Yì!|Ý =è�úßùÝIfúÏß}­ô½œï7°«B¡ J¥ó‚'¬½=ŽyºŸcNBÐ’õH;'“IdŠAÀhäcÄ¿¾Çq²ÅÏ_�Ç�Fj4AîC¸CF²~C˜2™ÏÝnwÅ/:îé{Ÿcnß´Û'ø¢P(hoo/ÚC9hž�ãw<£Œ=€KFe’Ék.éÆÙÅ�©¿ÌÝ„ØñEÚ¿÷mD˺—Fÿž;BþMŸå ½oôù›÷Ù7¸¥R)Rø©ßë ¥GÚ¥‘iÛ×µõ&:[§[Úà×üow™d’I&™d’I&¯›loo«Z­ àÀ‡—„r�Å÷^w^º"6xÁfÿè°G_$x¹/Ä#^%}£]\ãà /ú¼€s=m�àmðèg•<ãÈI*Ú<›Í4 ˆôÏŽüÙ�¾÷è]*I¹Æƒ·ˆwð�½6íLÇ„¿û\R�ÜòƉLdOM‚gmÑF�ø%#%õœœ…™L&a{q^g¨ÞK @.» üðòôì îA†Â|>×ÅÅ… …Bd31|ßß)œ\¥n×år9æ¤ÅÆÆFd� Sì €^ÒJ™!'`��uBÆË=aß)¡‹8h ‰Àæ€t¢¢��b0ÞØ3mLßÇèôw>ÿÜAO>K‰@6ôMÛ±®%³?Á÷xoõyÂÿK¥RdÁÜJ¢[ÐðówdÆb'Õ~Çç"ý„P¡”å.É|Èåra«Øº—’ò’PnNb�™âg·à# Òü`zé%hK5²þŠÅ¢:�N|Ç�ØŒE3ìÀý‚Xþw·©ùüå9dÝnWÝn7tX­V#+– -Jí‘yÄsS¿ízõ5ˆëRŸL›è�ãn«Ø4v™Ú;þѳ¡Ü·à»°¿T_¾V9�’]>žáèm Ï\K;ðÑ<âd ã’b-~<�ã1ôA– “èØ'¶év‰èúÅÞ}|™?��¬1ËåËÌiŸ^rÒ‰6'SúÙVþ=¯âãäu¸À}777cýIq°u„…“ÖN2B zƥ臭Èt‚Žï¥ø¦·;�xäù”ÕíõzAìxG×ÿ¦{îçóÉ÷Aè�o¦<r ýzÙbé*;ž ˆDŸïè }zÛ}}`>Àýëõzø 'žÖõÕç¦ÏE$#�2Éä5—ÿ_ɇ›-éµ×õå:Š�)QQlZ¹/`,äî°¯kËw%‹n"ÿ›÷Ê$“L2É$“L2y]…ò`DÐ#é‹«t,K 0’rËLw €úøÒú &¿ƒœÌr  Ó @W!®)¡À³=ºÓ� îјßn·£�Æ:É–‚ÚÝëõï ñ=°“Q¬yĶƒX)±ÆwLGWŒ�Gñz_½ïþ¯gS ?—Ð=ãé„ Ÿ �fa Þ‡ÃÈ¢q`’’`ív[óù<Îc"rÛ³˜¼Ÿ€·) *]‰Ëå2#€HÀù^¯™~O*ùÜI#ìÒõ 8›ÍT©T¢X¹\Ž~^®†ùÆøò²àül懗Oäs@6?{‡¿1Æh~¸·—¤cü˜k肆>à'g'RlØß�x¦„£9zIMævçóÐm‡ñq߃½òãÙ žíÅ\ÁÆ)Uè:ósN †œ€§’ƒ¾î+�”¢”2BVïÖ©=zÉ2×…“,€àN`cÿØ�gG@¸¹Ï-—Ë*—˪×ëÊå^–Ì¢Ä�ƒÚž¯k“Û�g5x .'‚±•ù|¾Råb˜l>üeΘø»ÔÎ\¯NÎ0_|-r¿�ø½Ì÷óoœ8à>îwý|æßÁ§N§Ó{ ¯N^úy{ÌOÆ�vùúê6‰.æ¹gobƒ©_÷ì–uk‘Ÿ#ã¾ýÐo_'é?zå»Ì/lÙççb±«bíw€žußÄyG———j4Z.—q®š“-¬ùž)Çz¹á¤�ûf'ÚœD÷€Çç7lÆ}ÿz >×3‰ÙË@¨8‰ç™gþ|'7|Nc¬kncØSµZ�ïæóùo…x„?3ý�~CöT«ÕÈÎårQ¢ý1†Ãáp% „Œ¶4;Œy‚ øx8y�®ø /�IŸYѯ’ð ôHƒ8¤Œ4Ê$“×^ÜYûg×ýþ*òbaã+}Ù¾Éó®ûÝ_ÔÓ羊8âûƒóoµZ±¹pÈ� : ­÷Ç7þÒÌB±NnJe„Q&™d’I&™d’ÉKqÐ7=oÀAM�çw9±¤Õ²v€J¾_$ÚÒÁ5>§MNVñ;`„ï=¢ÓÛéÀ‚ƒh6–ø~ØA;ʉ¢S6ˆˆu]"MÑ  .à ‚âÌ9~f„� ׎8H´Ðv€(½—Ÿmã:rÝ:ˆ,]‘v<×A ߟÀÎaì ”Ÿ]D¿¨F¡é3 4 4�Äu@i<k0Ĺ-žåD6Âç) ø³±±m†ØDï£ÑH�NG�Ng…8ñì°jµ÷Lç‹�—3ØQ.—‹38_{ô9)½,û ÀßëõâÝÈÏžñóhF£‘ªÕjô…±Æ–øóçàR5"%{¿è³˜´Áïë~�a»þnHСƒ¿€�€¼ìzV @-¤�—bó1çÙô �Çß( äÏJAWÏTøMÕ~¿¿2·Ð múþ H @N„|©TR¹\޹S­Vã%?;$—ËEù.ÎZq2ë¥øf³Ù ä™.Od»0·ðgè¼Ñh[©Tlvâ–¶b?N´2ÿ�Üf@3_Ó 0Ÿ{Ø z¨V«‘¥‚Ÿ†ÔÄïsîä‹“F<’Ð}§“})ɹn õÿÓ~Ö2ÊÈÚsûçÙÃáP½^o…¼¢´¡»d0âó~ðlTìÑÉZúá`¿c6Þ~¬ðÀB|Ž´A6~Ì A¾ƒc^Ðîï󖵕=óÿËw±{H£~¿Ù(Ø:ó„õ…går9¬�¬^ʰÙlFé5·l �õñ=×»nÙ£¡?ÆÏçzr"Ç#R ½û:@i^>÷uË3•|íÇ6<€9JPDÙˆ”¬c:aéýsßéûÿá, 2€G£‘úý~”¡\.—Af“ñX©T¢ü0㎎�ìqŸMÿ<!Õ)÷'}¹^ЛÏqôÌ|…ðö@$#�2Éä5–udÄuÍu×Ûw¿ë57ýýºÏ×-.þÙuß�F!çó(ž4Ê$½�/d8Z6Ði»×9íL2É$“L2É$“L^-³Çâ%Àʉ @-I+€ĈG�: €å‡S;øæ‘÷)Èì €+ßu ÁÁz' /=ë°Á£†"ĉ¢e‰Ø§}�F#TÊuñ¢ï÷ðL#@=þ椃ë‹~¥Kß95¤«2pè,%×Ö‘F>îÐÜ×ÁÚéÀ¡ €&¶iÄ9R•J%tÌÞ�r9¶ !ˆï™XU�[¥RIõz=@I'·õÒv¾S(â™Ø/óòEäxVI §à»GÅCúø�Úóù<Î!âY4#žµç5)Ñ1 ÔëõVÈ!ìijRÛàw²¼7SÒÇ3è§—ûcœßèsšE”F©K Pœ¬ÏÄ&°H 2rè@œû9ÄÁF²…Pöyã™Uœóƒ 8ÑÅüôŒˆ7>ÇãqÃn{»ƒ®žÝ™JöP·Û C¨1èŽv 3÷OèÔ3-è äí` }}ðRKž=E»Ó@Ññxב=Ț³{táä’Û0Ï€|vÿäFdÒLHmÚ ;÷5Ø6‹}»Ÿq›öqtñµÌËž:çs ?ÂXõû}µÛíÈ”ðÌHC~g�ö²viÀs²ŒñwÒécàÁœƒƒ/F‹ÅU™.H#¾CÖ óʰX," €u_9Š?á:t•®1ô‚‡ñ‡ ±ûg8ªÛí®œy…¯BϬURô‹ÌQöDÜ“ì“TGžÝ•’L´;t[ó½ýeMqÒÌí‰yâdcëöL·_Çé+|Œ¯}žÍĵÌùR©k } –¾x ‚“þ)ññ‰M¤™A�WÞ2) h�ÐÂ?zÀ‚“eô+ÍÄÖØã:Ùæº£]ü ¹È|ÄÖý9©d¤Q&™¼æ’FŸøçëþ¿î÷W}gݽorÏu÷r§Ók}ƒ�~Ï?÷…Æ7Cˆ/:üî‹”¿ôûÿÙp\Ge’I&™d’I&™dò÷IQ ç`"/øìãÒ,H'y›¼Ä/ŽˆæeÞÈ�®€dˆÙƒ¦·Þ."ÌyÙ÷³rü„$`¨×ë†ÍçsU«ÕGJ¥Ò êçéøž×K­•ËeI ]{T-×̲—èàwöÕ€ƒ ÌsýžNT¾J¸Öëõ(©ÂwÈ`q ÙatÎuDĦeYÓù»gK‘õá„¶Å= …‚šÍ¦ªÕª�†úý~)vRr Р‘óÆžñõö¥n¯©~èqòΤU�Ïß!=Û…¾ø{–“®Ì5'˜°YÆ„Ì 2V˜{ÌgϤ=N yÉBo‹©‹Å"J”9ùìþÃÉhôD¨‡8@¿Nj9¡Jßóù|ôËßS¢Óƒ <�L&+Yø/£¸±±±R†‹,Ct‰þ(Åædœ“'ÌdÝxÖ—´Z2Þ[[[Aq–¶›Îó­­­°u+Wy¯öwkæ „¾ß3# Ñ66^ž­•’¹£Ñh…ð¤o6›+wÌw'V�\�ÈÀÖ�HI>gÍA§îK<»Íý¸ñ<;- æëÙºÌK÷M¾>2èÏmØÛì~ËûÅb¡~¿¯N§£v»z%è�5ÕI_·%îïeÛ$EùA'=| ܯ¹î™»<£V«Å:!Â÷œ¨Ä1·ý^ôÛdÝ`­ó�¬NIJ_ñ2˜þüÉd¤‘çN8aêd¹g1—XÇé‹“Ë‹ÅB•J%®AçJ[[[Að:I‚?ñ Ïbb,ùžãmn³”®LíˆçÐ^ì¢B×I~÷9I;˜tøþûp"„ýãñËýé§ï_h·¯ôÉËV–J¥ ˆ}�sr†ö��„¯Æ÷ão�ÄÅÿÐg'ÃR?äþ %�+Ÿc¾‡B�é¾Õu€d¤Q&™¼Æò*bèU×¾êúu„Èw½÷M®{U{Rréºïùb•~Žcô;¿Ìú�oæý_'6"7í£;]ÚâŸedS&™d’I&™dò}�ªDxiöHM¥œ&ØK9É䯒à"£Æ³¦ ëC Ž‹Å(+䥒Økúy:)8Hv ‘úƒÁ €r2R €Èz[@/?èÙ3<ë R‚ÊI¿Æ³µø{JÎ9à˜†þSq° PÈ÷åÓéTƒÁ`…0srCºÊ(‚üƒðr°È�,ÊTyùÃáp¨R©ŸûÙ)”óˆ]lƒ�žÝPY.—£L“ƒÁ�ž)(7 ‚dò{9É ðè&Œã‡n¬ö1$ó¨}Àuú@=󯉏åòeÖ _¥R‰þÑ6'S¤«s9(è ¢ˆif º!cƒ±¤M´§\.G;?€6Sb€»,u»sRƒ¹ã W”!K3ô÷w@ÄùŽƒ­N ÓÆè· ^RŠyļ„Ä€`ƒ”öÒT<ϳð´Ñ'þ-Í é÷ûÊår1ý~_“ÉdÅoCtÑÏÀ�,ÄO»¾ðÿ¹\N½^/|!cNÉI2ÑýÄÞ=+pÜÇ„ÿsݺ±äwÇ|íð5ÃIwtŒ~½ì¾Õ 2Ïö`lÈ&@„vòÒƒø.¶éà:óÜKº ¶Z-�žž†Î±Côïk…—¸ö ¸T/)™ÃýYóý^ÞWl;æoôÉWžË÷}\|ïÁu>G/mæþ†ÒƒÒÕkÿ>?y.k¶ÛB»ÝÖx<^ñ}�FCív;ÆR”u "2•õ‡µá{Ǥœ”¡ŸnwØIxÀw]¯dzÀþÄI €í¤ç›¹ž½”~—ïøüÀfè—gm3ö¬{ôãå ×õ1í/z*‹ªT* Qž“ó�œhfïâ¶æÖè »C)áîó[侞qE¿Ó×3ßÇGøÞoÝ~.#�2Éä5—ÔÁñÙwù}Ý=oòÜu¿§„Ïum¼NÜ)ûýÖ=÷UŽÝ_„Ó¨ _Ìü;¾±g�ó>˜´MÞ–uíc³´®Ÿ™d’I&™d’I&ß'ñ|^ŒÙ›ñ9û.€s^ÖLÒá4ƒÂ£y=KÆ�/~Øÿ90ìàƒtEΤ÷p&·ÙlêððPéÞï÷uvv¦�� 5��†$¨P,£ÌI­V‹,¢‹‹ õû}IŠ^ìÙ_Üx„>û`@Pˆ‹4+Ã�ö½DòðÜ:±†n—`°gLž½n¿ÈˆÈ¸¦À;€Q¼Œ¡@?�¾Q �‡¬®¬tóóS-ÚÀSp{pÀp–3ÐÑ`0ÀˆözŽ “®c'�¤«y¿¯gM1Çãqdvqâ�æóùż¤€-sG’ƒAØ s°Êûäà$߇Üõyæ~³�R=ƒÃIIyÎd2Y¹Ö‰QÀ^Æ �~TB^Ap¤¬“Ÿ̦‡’»ò±T¤ßãñ8ÆÒç.öæöåó…¹ùŠ®˜gظ—z„u"|±XÄÙ/�tØÕr¹Œl$ú(ìÀ¾—æÃ¾i›gg¡/×$Óx<;ÄÎéYn®O÷yœWæöá¾'ò½$¡—Œâ;ŒÅææfd‚@ÚÐn\Æ›¹í ¯c øJ_WhG¹\Žö8@솓BNè°Nú9\Œíh4вi“É$ή:;;Ó‹/”Ëå´»»sÁÉÌR©´bkXà$*ãçsÝI Ö/l= S×s¿‚ð9‹x{0ÁÇжsrÂÍx³BD2W|^¹—J¥ð÷ù|>Æ�1Àv½<(Á%ÛÛÛÑnˆz'8Ó0ÍÆò`“”¸q¿��¹ß¦­èÉr'B|ŒÑ·ßÇŸáíò9ÆóÝï¹?ö£'Ø÷9‘ï™[i¦mÅ–�@g^ª�¾pÛ�H^þÒƒ<ȤrbÌïéÏõ½¨ïi}¿åëv—î›Ñ âdÏñl$ïsJ ¦’‘F™dò‹;‚›C/ä ÷ÝwÝ÷_õ÷›|ßea“JJ­ë‡ßË#.|³æºõ X1‘’WÜÇj¯›´?“L2É$“L2ÉäU<*Ú_X¥Õ[@ýJ¥³¿óòëå9¤+àã­½ô›ïõRP×A~|ïçg¥~t»]õû}åóyU«UÕj5)ŸÏk4©Ýnyrxx¨n·»Pbˉ1Qîv» HyÛ`£ïiƒ¿“ÉDív;t‘ö5ͦä sñR'ˆj99àÀ©V�0ì™[I+×�]ä$À¬—m£Tß¡�dƒÐ@Ï ÁŽŠÅ¢jµZìûS°Ó#éɦ@'sŒÒEØŸ—§’®¢‹”\%ÅY:€¤N ¬³s²F†Ãá áâ 6ö À„ކÃaDïÕëõ•ó_#ÎÈ(L%S„ûS‚¯R©D[7'ÙxÇ‚ðc¼<[àâÌKø ƒØÜGÐ6æ…�ãåŸ3èÆ¾ ‡8ô|2™�’ú/iµÊ„g£8!…ÿÂ^Ñöáç²àgœÐq½PÐÛäöí™Wضíd'ãá:÷ì$'«ÈÌsâÂËîó<ÀoÏÜð2€Ì1ÀRÏX�ˆ\.—º¸¸‚€9—fžàë!°Šo÷ÿ€ðØíÅ×Ó>|ö‹½£7ï/ã@[=ûÍÇ‘þÓž)è 9Ïe ×ùqØñ�ëÖ4ÎÒiµZêv»ªT*šL&jµZ:;;Óöö¶ö÷÷Ãç³–8¦ávîë�g/¹½xö¦`)Ž/žÝn!LÒÌ-ÏbÎçó+~—1÷y�±_æIJÔ¬#= 2À·ñsˆ3kÈ.õLÆ{>ŸGöp.—S­V‹rfd&O&“(…æY±øbæ‹ÑÐ'u׳¯!^º �¥6ÂØ¦þ›`L| ÀF<€�çB62·X›Ð ë�Ï+_óéwš%Ä?å™iHºv®[›x¥UÝ?:`Þï÷ÕjµôâÅ µÛíÈV�FjµZ¡ijÒ''œ´bLÉ>£N yÛчg�Ð_Æšï7›Í(…Șx–¢“Ø€ó¨÷ÇÜ#%‚Üß`Ã>ïœH‚8‡‘qC†ú‚ Å&±9¾3�N5µ\.#3˜l>Ú‹�Ð'R;äââBårY‡+Ä–Ï¥uz¡ï>e,K¥’:�Nømß_9QtyyûHI_Ï]KI+þ‡5n6›©R©„Ýùžèdó–qaJƒªR¼2#�2Éä5w^þYzÍ«~G^E.Ýä)©òªï|‚+%ÇX¾�€ñ�çMž)­¦Öº¤„SêÔÓ�/Ó›››ñ¢÷ªçf’I&™d’I&™|ŸPP‚€ ÀŒlÊè8ˆ3�XñóU|ÿ·X,"JÝ3É¥U „kù;ùt:U­V €Œ(âÉd¢�>úH…BA·oßÖÉɉz½žž„�X2¾†Xs2�>8˜øá 'ýôðƒÕI¸‘Qûüß|@îv»½ÖCBnn¾,#8 4#s‡2„ÏŸ?×ùùy€6”{s0Þ£ÏÑ1ßñ¬?K„q!R�þ:ê€ $çÀfBÆ]^^F›]gØ’Û�g8™Dö (í�Àt{ólœ»ÝnÌG'0²` £Ü�CË!ŸÓk�)…‘ù´¿¿¯��Íçó 7!±@Z?gÂÏÍäo6›¡;Ê�F£•¬-é &ëÍ31™S\—=Ø0¾Ž¿ó\îë~�RRœ#æó“çnKŠ3=Òs®¸:Âf ±YôB90Ÿ»øôE:ˆòápã ½··§f³D6îY@NX�}˜Ëå´½½äŸ;°í`7Äj±XŒ¿{f�ƒÚŒ»Û'úvÿ’ÎÈϲƒl…øæ�NÒó/¾9—Ë8?�ÕëõtqqŸA”O§SU«UmooGÉOÚFÉ02B°?2{À` €™ N\¹Ž(CÆõ⬷üΜð³äœÀr"-ýñìBü:d–gý¹M°Î�F#5›Í•Ì扯k†NÄb“<›¹ÃÚõöÛoGÀz„ †à¨V«+¥ÖÐ3dë:cKߘëd+áû ¥ ÝY7 …B¬M¬î+™Û¾NCD{Ðë!}gÝÁGð}HyÊ#nnnªÝnG¹ÔjµýE‡iV «??äó•`/÷‡NÑ�“Ùs0ÇÈ€ÝØx™qëEdŸüÕ Ï*Îår+k*ë;?ø8þ>�Ncœ˜Ë<“,ôr¹ýÁ—“‡ßó}ó†õŸ½¸û4—Œ4Ê$“×\<²ç:räUdPz¯ë>» tÝõ¯"‹nJ,y„ŸG€¥’’IëþïúHõw•‚ ~Oßœã¨ÙÀ°©¢´FFe’I&™d’I&ßgI3$üwܼ>»G¢;øCÔ9¥LJ¥R+ìzÖíÙ ¸¯g�°ïÜpð�{RB  a4éôôT¹BLš IDAT\N·oßÖÞÞž¶¶¶T«ÕÔn·ÕívõèÑ#5�È"Éç_ž AY €H†‰:ö ö�žIÁß+`¦ÿ{”ü|>W¯×[êø�Ð`¬<(ʯóh{€2�hM‰‡ôý�g8èšËåV¢Ÿýþì¹¥Õ²0~½ƒa’VMçÞ“ÉD½^o…Ьç^ò�¾, �œœèììL½^Oív;ˆºZ­ç…4�?À@ˆ€&Àá½½=®dÙA**yÿéŸgâH 2㬦¸/ßK£‘—Ëe€™€eŒ`:—766ÂvSàþ({»}̼ë²[hGš]—fap_骤6€n2½!@Ä Ä iU ôì€nš­Ç}ÔÝz6¸)ü��du‚�6x%ãÀø99ÇÜñÿCh2ŸÝgàŸÓhwdÉœ$³ÄËüá§±#Æ_T«ÕX jµÚŠí¸ý@rx;‹Åb€³ÜÃÇò2™ËåRÕj5tOyEl‘ñL3])•Æ"ø6|~ÜÉlÛ�`¬ ‹±Wú¶à™tø&úHF�Ïý\.¥ ƒ�ºÝndâ{°5@{€n'nh;À³¯¯ž‰â>Å¿ï„%óÀ³IÓ’ŠŒ�ñþÏnu2ÿ€¿ƒÈ"ƒûÓì²Ï}ë�éþ��Æ¿0¾�ÅbQ·nÝ â »Ç¿p6D¶êë–ß?%AÀÌ–ËeŒ$ú`0P¿ßb�1În“Ëå2ʯJŠ9’€¬¡ìÇh ûü�>’‚0ÆP°R©¬”¢Ãß°çp2¿�-`ûŒ·ï•°e'�h?~2—>‡Ã¿M{è·ï˰'ÚŠß𬞔äEçØ(Ïïõz៼Lëx<ÖÖÖÖJ ~~ssSõz]•Je%(Ë矓QÌ_/Ã&•I&™¼¶â‹Âu„GJÚ¬ÿ{Jh¬#¥Ö}/ý=%�¾­ ¯j“÷�ÅÇéŸÞ#�¶Iûë×ù}ù—Í?‹¦ƒ)Å÷æóyD4¼ûsçŽþýßÿ}…XÊ$“L2É$“L2ù¾‰gx‰O‹ûý¾677µ³³£n·@r¡PÐÓ§OõÅ_h4i{{[µZ-îW("ÚÒ öl³Ù,@Q"Ž!Z666T©TÔh4â|"q ôÅ_èéÓ§ÚÞÞ`˜LŸF£¡r¹¬÷Þ{O§§§ zøð¡J¥’vwwõÖ[oEY(/+õæ›o¨`Ev $™1öðƒÓÒG ¥ôÐ ‡Ê§‡‹L9ã„ àãx ÀŠþc'‹ÒwâTtðÜÉö׊¤z–íDô»cÏO[œtñCÎ'“‰ž={¦ñxD¡ôÀúõ¯­>ø@�?ÖþþþÊy,ûûû’¤v»¥ÜI‰0öòR’¢|¤”Ÿc�- Kô™Ê³âÊårô+ÍÁ–œ�t� AÇ^šË³�ëH@ô´„¿3nn›N8’ò J acnWèÓI)ÞãÐÂû5ó— ¥n·™'¥R)«ápí�TõŒ²´D�“yd#Pò.%µœ¬ðRl´;%àÑ3sÁõîYFdŽÐ6üã^©T‚Äæ²á ÑhÏcž{i0/»È¸@ˆC‚2>DÆÓ·­­-5�Ð:ÆŸD»}‘�ãõØ÷äYé;„öAšøx1f|ß±æ7ÿÇW‘ùKæ~Áû¶X,VˆtŽNг¥øŽr¹„�“èÌ?3Ÿ®Ö®”`⻞¹Âú€�ùøBz;yâ$ãÌ‚¶{À¾†6;ù†Oc÷ ˆs'`ñOÌ‘^¯Ù%�FCƒÁ@½^/Î�¤Ôý`m �ƒÁ Ösü9þ½±~z&*þ<ÍÜæy¬™Ø;kÁ<è1õ;üßúè#mn¾<£hggGÓéT»»»xs†Ãååe�‘ËåR­Vk%âRÔÏNj4j6›1^”&êõzÊårQŒþºN�Á®Ò÷"#׃;Œ�“$̦`­g×ôqmš9ÈEÛÈ:pÒÔljw4ì:µ3þÏóƒF£¡ÃÃCÕëõÐ÷ã]�Ì0ŸW€ÀD÷W*• _ ç¼|“gw­ó•’V€=Ÿ¿èÄý&~‚ùãsÒ‡ 'Dѽô0&Ë„ùGiDlγüíØºd ]_Œ™Û:Dó™ìK'B$Å=$­”2…P¯ìb·|‡¾zö�ûJÈ.ú‚NÉtsŸê¾Œ{ <ÂÊ uÏDã‡~0��æoØúÀfˆNÉ;27¼d$öêäß!f>ŸGÀýqpÝÉD²(—U­Vãùè®R©D¶  ¸ÏcÇvœhe�Án‹EœÿCv ýH˧:0îddäMJ€øœc|ü§-ëöÔ6|�j6›j4AB`¥RIÕjUóù|e½÷¹D0²gÅ9Q ¹€MlmmE†ëb±ÝãŸ(OçöÖëõ"{%%‚È@òì¿é¶á~€¾¡kîãx¢c“<€�y&žÛ>{9æ6èÁ?©Ïr2Ò%#�2ÉäD^E¾¬#'þ^"çÛ~_GÐÜô».¾àú‹Â«¾ït�|"͉ b±¨£££Xô9°8MçeÃÁ‚ðÆoèÍ7ß”¤•Òõ•I&™d’I&™dò}’4*Ÿ—ö´T âÆÆ†jµZ¼4;Á”Ïç£lõä=ú—vC€¯÷Ïÿwvv4999‰sPJ¥’êõzì¥Ëår”��Ç*•J,ôûý ŒjµZ€hårYÝn7ÊÎP¯ŸHæv»­�� ݾ};À>? †—zêî»Þ<ÓÁ#Þ×v¥{\ôí¥ò¯èóÒ\œ!…´9ðÉ߬MÛ³noïï+€?PŒ9à±t� hâÀ{vmSb‘뾉xç †n·«¯¾úJÃáP÷ïß×þþ¾ƒ�¶··õöÛoëôô42¿ÿ¾?~cº\¾,‡uçÎ�’²V«i4i0!I‰^&"ÝAM"ý/tÈa݃Á@óù<ÊÓv¹m¡ã4z߉€1ì!»˜ø¡cŸïNyÆ‘g!IZ!)<Ïí—¿£_€pHB®÷wK'êõº66^ž%Ól6÷óqË™Ñ?gqOJ29ðÐ ¼n¤  Ï7沃òŒï™è�ñs�¿åÙˆ€òd,`WØ>”g;(ì~6Ïø�Ü à-öƘÓˆj2+±È!2?È´áþ¼¿�{Ö�ƒ°<×m“·oÏ2Iûë}fNùYIJ»�;9ËwSR ½Ž{8áÇïØÄ%íÐ÷Ì%ìƒ{àÛ 0jµZMÜocãe.Ï£T™,Ô©îÜÖ]gN®ùgÞ|¶ìcá$ºNx6¬Ï)'ü}_1™LV5o»“2¾v`·Þn_ i;ŸC ;Yïv̳ñ×üŽó’~´“– „Èó¶#´•{‘ÃyvÌ%úyâY¼ý~?æcæÙW|Î<õ¾§Y®¢Nùáó"�´Ç³jülG¾“–aóïó=ö¨^ú�¹âsÔ} }£ÿið‚gèq½û žëd!þ˜þ{?|ÿŒ¯å{�½|ßíœ6»Ïuò6Ýse¤Q&™¼æÂÄ~ÑómdÉÿѳŽ4ºîùëÚ»îEįM# ^u�o“W‘ilĨ#{tt¤ßüæ7úÁ~ éå"òÕW_é?ÿó?õìÙ³X”¼ì‰$íïïëÞ½{’¤ÓÓSu:IZ‰ŒÌ$“L2É$“L2ù¾ €nZ^„W@K@¥Á`û)á�Ç:>>Ö‡~¸JòòÍ�Ê ý~?²Rg³™ªÕªööö4�õìÙ³ŠÅ¢´\.u~~¥œÊå²Þzë-�œœèøøXGGGÚØxYæîéÓ§ñB¿³³%¬8óƒhâO>ùD;;;TKÒp8Ô³gϼ”¾™}@J?Ùƒ²G$`ßé÷qÐpv�‚1èô3ü>Š8pï$ãÌwÒl"þï@®ƒÊŒ=mB Tü]Àû `çmrp€—¶AzF ëÆÆFd1‹E}õÕWúøã�µ\.ƒ8ìv»zã�7´··§ÿþïÿ–$Ý¿?ìo8jkkKçççª×ëÚßßrrggG�F#ú ‘·¹¹©Z­ï­~¾†—3£œáb±ˆ9@¥/�³¹¹™qi46@úDü�Hml;—ËE4z ”ñîC¤¼gxÆD6D†�ƒbN¥$` g)š:áA› lÑS½^¿á€#„�SÜ+ŸÏGV ϼ$r@“¶§`·ƒ¸ôÍÁ=þõ,Œus:³žyg¥ü”gwr2_Sœã !20ו†t[°Æ÷“ùÀý¹žyê$�—fr�øóÊårœs´®Bzr]Ƨ$�ƒÑþã¾ÇõîĈƒ°^6ÎmÎñú’ú8Ú˜>ۯæü\�t^pÚB †Êé¹ËN¦ÔÀuŒ%`y6Î8A081çmó±;'#Äv" œ¹ 1Â5®[CÏ6òàŸÇN\»Mxf$>_Ý—ùÜLÉDt섺fÍõ` HŠÙlÄ�ÛvÎýÈtvÛàÜ*¾çdóñµƒ5 �;éID{ºÝn”Þ­T*1¿É "ƒõÊ}Ä®ãbiF×Í7Ÿô™óˆØã‘Éî{N¾›qéÇ}‰ï?}LÙwa�‰ëæ$Ä¢û|'}Üž «Ò,Ýår~�~¹}b#Ìc‚Œœr ¤8eFe’É?€¤/>|v“ï}Ûg7!f^Eý½ärAä×®#n"×éˆ Ê¿ýÛ¿é�wÞQ¥RÑùù¹666ôàÁýú׿Ö|>×üÇh<ëððP¿øÅ/ôðáCår9ëøø8^øØ0sožý÷¶;“L2É$“L2ÉäuÊiù¹)ÅôHг>ùäëòòR»»»ª×ëÊçó º¸¸P¯×Ód2Q·Û @à¤Ûíêìì,^ )ÏT.—#³‚€Zýçççzüø±J¥’=z¤§OŸ®�¼hߺuKõz]Ò1›ÍÔn·uyy©f³©wß}W­VK“É$H£Åb¡~¿¯O>ùD·nÝÒ;ï¼/óãñXü±vvv´³³‘¨‡C•J%5�êˆpuð3-ã@ ÏZ,Ü )Ðå ¦ƒú.C¬1¦þ9÷lñ/ë4l” è —™6è�ûp}¡¿½€D^F ÒlP¯ÛíêääD?ùÉO”ËåôÁèòò2¡>;;ÓƒôðáC}üñÇêõzqÞÀ—_~׋/´½½­££#½õÖ[ª×ë+ël6ÓãÇ�µ½½­Û·oëôô4J�!Dp‡ÃÐ¥—ì’s€sF£‘J¥’*•Jœ_áÙ Ñ �Å{ޤo€¾ {cíïw*œÁà„z¦-ô/}c9ÁœØØØ`ûrŸCd< y±X ›¦›gµu»ÝŒi:‚LÉårñ]@½\.·R�9)à `ª?þîóÕ‰Ãi`ªû¯J¥²ò,|à?z- QZÏÁx昿·;�bŽ¡['÷;^�¤™7�Ûádô@>¸Ý8à�¡-N@¹Î×½ø`t蟻¿rr0Ÿl¬×ðvø¸®ÃCRÈ \úæ÷â3æ¦ûpÆAº:¿ÌmýSj̯#`Áû y쥯$­¬—´Ãרumf-rBÏÉYˆìÈ�pl�¥ãËóñ))˺…ïqðõv‘LÿÒ   Á`åR™gÕjU¥R)È9HŽÁ` ~¿d»ë„u”5ÜI#ée¥ÈŸËËKU*•Ø{¸ÍAš£‹ñx¬‹‹‹Èr}A÷z=IR§ÓQ»Ý޳ñÃiéHúIv+s"Ý×jòà{¾òý÷æø·e| eõœÐôµ�öonn~#»p;ä¹Nàû¾…ûºßÀ⯰%Ï„NÉc·='̱ö ô›ö2' ‰YÛwÖG÷[>7‘Œ4Ê$“×XpJ¾Qð¯ûŽ´¾”Ûw!ˆÖ}–’;7%ŽnrMúb‘¾Ð~›¬»ßºÍ Žø—¿ü¥=z¤Éd¢§OŸj6›…s?88лᆱv»­z½®wÞyG�FCóù\{{{º{÷®þçþ'R‚‡Ã¡...$]E^f’I&™d’I&™|Å3³¬ó}×áp¨óósÇ�¾½^Oý~?²%_‰Î%À˜¬ƒAD©O§SµÛíÈ9??W­VÓ`0X9Ä0�=áöövDq–J¥eæó—‡.S~…—~Î8©V«ê÷ûqî º)‹:>>`DÒ ø �Fæ:°nÏ  `˜‘ÆÒj™–4JÖ @"éê€i�ìæ{ÒUy Îb\|�IAïŸWDÓÀJÏFpðÇmÏ�-Ϻðw×§ƒ’Ïž=Ó×_­ù|®‡j:�ê¯ý«ö÷÷#è¬×ëi_zÿý÷¤¤ÏÙÙ™>úè#U«Uíìì¨Óé¨ßïëððPår9JÉM§SµZ­ LÏÏÏãì(ÏÖÀ&È|q2Œ3Gèç�;w"#ªÙlåï+nGi¦:sbÃß©<«Ëí»pÀ`°ŸûM§Ó•s–ÒgyV ÷s’ɉ/Úøã|ü!Þdž= ÂÖ<»„å-$%Ûƒ~¤QöëÞ¥éÿUîi `û¼ô±ÄW¢{È¿Ô&<’É3 ‚„õL$žãöáþ? ˜‰}yé¹Ô�Ðo/˜’×Þg�ª÷,·Q·¥uíÄ�¬ס׉rƇ>ù¼ð9�¤¤•Ï)®u{@7´/Õ½ûk®wBŽgxé+Èü¾ÏUo«Ù�LørH|;Úâ™iNªy AJÀùZâÿO}Œ÷�¹Cû´w"‹¾9ÁávÅýÝOA&Cðx@‚�z”düÅÅEdâ°'ØÙÙÑáááÚl¿ñx¼B�¸¯¢$îx<^YO—Ë¥z½žºÝn>Ð÷ét{'»i«g9aÇxñã„»¯Ë´’ÆÏ‡¤q[Æö ¶±�Ô_°Ã�zpkGµZ�}YbdL±¢c'–$ÅÍçó+çEºŸ`®;‰D¿è“¯—è€ùGÐúñ=ª“‚NtzFTšåsÒÿîþûtâ�±tLØ×—Œ4Ê$“×Xp7!‹Ò¿§K×}7%WÒë¯û÷º{ÞôºW]ómdÑMîwÝï€úä“O¢®+‡³Ø–J%ýô§?Õt:ÕÙÙ™ºÝ®nݺ›è‡êÓO?ÕÙÙÙJ$‰o:2É$“L2É$“L¾�ÂK6?’âeÙÁƒããc}ùå—*‹j6›‘QÑív#Ú�—cÊ£HŠ(t/U 3›ÍÔjµ´X,VÊ¿L§S}ýõ×�Ç:88Ðl6Óé驾üòKýìg?ÓþþþJTæææË2=ª×ëQrlsóe©0ÀO²Ï)‘Ç‹{¡PÐÞÞ^€*£Ñ(²S–ËeD{y''‘Ó) yˆwàUR|ž–s€-¸Îûï™;¾¯%z˜çò=Àˆ ÔWt‘5ØŒ?Ç�úëçn¬‹6O#j=²Ùõë"ljx&ZùÓO?Õ—_~©Z­¦;wîèË/¿Ôéé©~ûÛߪP(èóÏ?×ÖÖ–vwwU,õüùóDÃ~‹…ž>}¤‡C½xñB·nÝR¥RÑ_|À%s¦×ë­DîàsÉAW2�øÛO~òåóyݾ}[õz=Êç¶{ÆI P§ r šyä3óûò³Æ³Òl92©$­d(¥ ?ýÂŽ=ÒÚÛãcíà¡g!aÓ�›èw4!…‹E�”#cŠñD7Õju…ó¨st‹­º>°D/~Ɖÿx©7e' ¹�“¨èÉK_y¦"¾0RŸö¸¸ â—ðöÌ">Tu s±X„_v_â~ÀçtJJ§@·ûOo»Û¬Û”g”¸p[ò¹F{|ÝŽœöçû8»òö8¨‹¿ƒ8ó~Ó÷côÙÇ׳ x6¶èsˆy�®�ržeçÀ¾¼ØªÏu@ll„>z¦QJº]p-mHÇу4Ð)ä~ÆuÁ5NÔ8±ä'óù<²8!i|}N}“¤(ÙÖét" b¹P(¨Z­j:�ª\.¯)¹\.�ÝnRÒh>Ÿ#s�ÏÂq²Œle'j þ°úçzB?O”ò¬T*Q r�ziN>cîÏf³Ð'{7qœÌ¢Íì°c/[Z¯×ƒ¸ÇWÏf³¸ž¬8l™¾ø<Íå®2¥Ð;v�fÓúÚëY™ô{òLêt.1veØJÞøšë~;pŸ��°x6+sÛ‰3_WÜWIi”I&ÿrS²è:æUäÎuÿÿ®dѺkÖ]çNÔ?ó¼ÔI^'7%�¼=‹ÅBõz]­V+œ'¡~P$‹âï~÷;-—K5 µÛmU*ݹsG¹\.êºÖëuµÛíxV–m”I&™d’I&™|_Å3<8coç5÷Ûí¶z½ž...‚à,^œ8ÿ"�¢÷^¢‡Ã¡r¹œö÷÷5�ôüùs���©V«éÍ7ßÔÞÞžvwwÕëõôþûïë'?ù‰êõºÆã±}‘¥ÕjU³ÙL_}õ•=z¤z½®étªN§£ñx¬b±¨££#M&�žžà0Ÿ_�Äù|V*•´»»YìGGGA²8 Ðî Ÿ6Œ‡ÿ�ýµƒÏ�ÒjÕîíÄœvì¥Ñ½¶p_¯ðç éç€é;࢟]�8àëà÷TòÌlm2™™·¹¹©¯¿þZçççºwï^ØD©TÒ/~ñ =~üXŸ}ö™~øÃêÎ�;Ñ�ñx¬r¹¬ƒƒݹsGÓéT_}õ•.//uzzªóósår9}øá‡òün·+éåØS>Ÿ�ëý (Ñóc<«Z­ªÑhÄõœOrqq¡­­-mooKZ�TvÐÛAK{lÉIG²UÜ.¼vŠ6¢2 � sŸ‘’�~–d&$"º¤hNIPì—¶ÁOD¯×SµZ�Ãì=«Ÿ†MAz�íåÙz´Ï�Sô‚Íq'œ4rrÍ%%R¸Ž’b�Ê®¿TG 3 ü Ï !cÄV¢ç=«e<¯œy㙂qÞÛ|>߇žÑ >Åí‘2ŸÏ„õŒ'ìÖÉø”œá~´YRØåºñósF³ ƒÀ]ÆÌ}““4øN·yž‹Î|ü<‹�vÑn×ͺ¹â$”x ÷ö2^nëô}Ò6ìÄËŸÆsÖ cƽÀ÷qñ¬$®¥}d±`Ûè*Íæòqõëx¾Ï'tÇßÐ3?2Y„Ø‘“Ïþ3F£‘Úí¶:�Nd}”\,ÕívC‡ø—V«Y�) îmÆ>Ý7”J¥˜7Ëå2Jܱ—¢œ+þ‰ÒÁè²g8~ƒ4çò¶Rò”>§™aNP¹=3Ÿ�<ö3ùÏcŸä{&ìÊý;™EŒ~‡6;¡Š~чgG9éYëØ¦û`úJ[˜�V)5™L‚Üs›÷}a¬¾zÖ¡ûlz>™íÊYœ|æç^òAž�*e¤Q&™üCÉMI’W<7ýÛßÛ®›\×}wÝ‹¥Kºq¾î™ëžÃ"E½f6 ù|^£ÑH•J%¢«&“‰>þøc ‡CU*•ˆô»sçN¼Tœ��éàà@o¼ñF”§»‰2É$“L2É$“LþQ%%(ØßñO¤êÎÎŽ¦Ó©þð‡?èñãÇÚØØÐÎÎŽ$­D¹v:år95�xÑö’9ì ù(‹6�N#Êu2™¨P(èþýûj6›:99Ñx×Ûo¿­““«X,êàà@|ð�Ž��õóŸÿ\‹ÅBOž< b“,‘ããcíììèÑ£Gj·ÛQ½`±XÄ;D³ÙŒ9á‘øÅb1Ê#qöÄù¹\Ný~_/^¼ˆyGGGzï½÷büÒèjôæD-í€ $‹ÀõÊØŒF#mn^�A‰�Zb3œ‘áã…ýyfœg"0?ÔXsâ‹Ïñ9üë`�¤8H~0Ä9V´» ’Ÿ²C£Ñh%C Àr±Xhgg'lºZ­®€ñ€‘~øº“ îIë31èCÕž–ÝÚØØˆl!þÏ\d†Ä ß€�î[R•1 ¢‚ÔÉ€W®Ã�\;@ÎuNð7tìÄ">¢Æ�nÏ|˜Ïç+åÁR¢%Í.¢Í€Ú2»½;É·X,†[Â�Ôvì¤:þ”Œ§tmÛØØˆ Ç.œ¨ÃFœp"³5ÍÀò1ÂW¢—ét:÷óÎü{6{ 7IÚÝÝ�ë˜{ô ½¥™ih¼à™cîGœÄN‰0Úì ?k:clðø8'l}}sÿèþ�öByÉPîW,Ãb+T¹ êõz+D¶?�õ ]ù:ÙÀ}蛤(�Ûh4$]�3çë,>ƒö¦{H#'ü˜K~BaŸâ%=ƒ Òjkk+² °q²‹dp?Íüñ,5é›ç¹Ïñ²q<Çí±P(D†¶„=£‹ôÇûIaåõ°1Ï¢t‚’¶°��ÀBW¾'ªV«+�NH£æ&6˘¦~Œ½%’�Œ4Ê$“×\Ö9«Tü% I³tnJ]wÝ·37½ÿº¶Ò7wliºfzíuÏJÛ쌾t•~\,@`Ç3§Ó©>úè#}þùçÚÞÞŽ—„Ùl5è)IrïÞ=moo¯€ô3“L2É$“L2Éäû&þÂî@4 Y:·nÝ Pû/ùK”‚ÙÚÚ æîÝ»:??×x<ÖÇãŒÊÔ‘!àeë[F£Q”«ÕjÚÙÙQ£ÑÐt:Õ³gÏâ%¼Z­êÉ“'zë­·ôÎ;ïh<kkkKµZMù|^GGGzë­·‚T¨×ë:??W«ÕŠrVì“Òn·U.—WÊë´ÛmµZ-ݺu+"¶ [ØKB¶8xã :OËš8y„·¸ù¹P~o1€ ˆ 4{�qM£wm �<ò×�D�ˆ§ŸÓÅLГV³©üÞH¢'¾Ÿ–{ñÒcÃáP­VK’txx¨7ß|SŸ|ò‰.//£´áh4R>Ÿ×½{÷ÔétôÑGÅó¿^¯§år©ƒƒƒ•èõÅb¡ÝÝ]½óÎ;::: à�À6È-€bžÇZ”ýã@ó^¯§Ùl¦J¥¢““µZ­‹ù—Ño~ó› %Ñ/mõq×%cïYü8x xå™-b§ÙhØ %‘œHtà˜6á7°·ÝÔ^ù?€# å•(ÏGæ™~œABÛè%” ‰ñKÕj5Æ ˜3©‹…ªÕêŠÍ9 Š±»´?ˆ^>.Ì Å泓<Ì#WÀSŸN¦ð·4£Ò�Ì)· lÉ3’/@L€Tœ= ÄIl»tbÀí„gc¯è2{…4u’Á#ðiZÚ*õ§ÞßÑh´RFÎý?þ{ê³�õ¿;áyã€3cæ$TšÑÃx¥sÛÇšÏh¯rN̹­x6zõ’—ø|úêúñl&ÚåmâoØ�cEn7´Û n'Ð%€zš5æ~ÏÉ&HpÆ'Ífõu5%xÈðázH#>s?™ësÑçúgœðaD1™L¿y›¨¤ãcèD‡¯‡^B=@p‚ÒŠÀÚÃz5�N£t&Ï‚ôÂ'{6㌩� }p_à À‚>»eü=ø�}¦gÚz™?žËxø|râ…yëÙ]ž9è¾ [ç^é™nÀs}m“®öd�¬¡ì†Ãaœ 1Ê82gñ%HFe’Ék,þrwaäó_Eè¬ûìU$Ò««ëîýªëÓ¿¥ ›¤›Š/$¯j <‹Ñ=ÎöéÓ§züøq,ˆžÞ-Iív[Åb1È"RJ¯ëO&™d’I&™d’É÷E¶¶¶"ÒµÛíF9Ï Y.— ÚÙÙÑ{ï½§Ç�ë�ü£NOOõ«_ýJ�?Ö“'OôàÁƒ(áÒëõt||¬Á` ýý}-—Kõû}�F#=zô(ÊÀ‘!´X,trr¢z½®½½=mmméÃ?T»ÝV­VÓöö¶‹…Æã±>ýôSÝ¿_o¿ýö ¨5 T*•´¿¿¯;wîèùóç+Ù弈·Z­x9¯T* :;;Ód2ÑîîndIu:½xñBÓéTµZMÍfSÛÛÛzþüyDw‹Åxñïv»QjÌÏ=ØÜÜ\ÉBq@R}“�™›››ê÷û+  ѺNÞÐB;ðV(Ôh4Ôh4tyy©r¹`€À% <€mpÂ-ŸÏ«R©˜˜ž)Á´Ó#É¥«H|JqÆí…¼‡QF°mww7Îù×ýW•Ëe5›MÕj5½óÎ;º}û¶ž?®\.§Ÿþô§º{÷®Þÿ}ýío‹ÈêjµªZ­¦år©v»­ÿú¯ÿR­V â‘3SÿøÇ?êÃ? Àj8ø7�NÕh4´\.uqqàñh4 [ÙÚÚÒÅÅE€â¥R)Ê=èç?ÿ¹~õ«_©R©¹çY-ØU*€Y<˜a«^›››1_ Œ)H45ÑÝ€e”:¢$O¿ßûö,$lp–w2€I'Õz½žjµZ�Uår9ˆ¢Ùìêü4¢°%9\*•4ŸÏWHºËËË(«Fd:€5eóù¼NNNbŒÔvûE÷Ì­\.¥×|nÓÇ´Ì"˜—ÓCoÜ—v27K27 ÙÐsÑÏã Sˆl '¥T’ûž]*•4 4›Í´³³£‹‹‹°�Ö÷ï0v”¶ó’M€âž C´?öÉü©Õj1ø ü#~›ràÜAj'ª=ÓÓÉì”ùθU*•ðmårY’"ã‹1 [ ›ñ’\à€êãñxe¾¡|16äÄœg!dC*4 �F#år¹ÈÊSév»ÚÞÞоZ­ÆóѶNF– @`ŸN x¦$(ë/~`0h¹\FùNÈ+'A™‹¾Ö0G�ôÁVœÈö9…Od,±7J‚:éÃÁް‘Ùl×â�™+ôòÀ Xþîd.ëb©TŠý÷…ôšÏçqƒû ÖZ·k°/ÖYü^¡P?#)ΚL&j6›‘ÝÊØ8ùîû?'EÀå<£Ž±B߬]d³²ÆÓ7ް®»¼¼\);X¯×W% ¼ðiø~æ{ôÂ\ãÌ9~÷òÉØí˜ÍfáÇü¼JìÎËPbSب? ÁºJÖ~>Ÿ×ÅÅEœµNv¬Ûöêø§”‘F™dòZK©²Ž\IYômDÒu÷XGôÜô97‘ïzýw½—G H/IúD:2/gD«þÓ?ý“NOOÕn·Ãyomm©^¯«Ñhh±XÄÂ{qq©ÙiÔO&™d’I&™d’É÷IñxQp…Êr¹¬{÷îé‡?ü¡ž?eãÊå²¶··uvvçü¼xñ"H�gÏžéèèHù|^�N'2;Ö•�FzñâESD¹¤är9=yòD_ýu€(þÂM;ß~ûmµZ­8ëˆ …f³©Á` ÃÃCíììiD¤r±XT³ÙŒŒ¡{÷îHY¯×U­VU­V5µ\¾<è¹R©¨ÝnëøøX³ÙL‡‡‡¦JŠóuôCÏ^æ °@Î#ã=ÊÛ#ÕìóC�X’´Rj �Vƒ»¼¤Š—p¡Ý^ÏÁAÀ?@§4À³Ø<òÀpb’e_·oßÖd2Q¿ßW¯× ðüÖ­[:<< @ëöíÛ*ònpvv‡žçr¹(ðDéëóósõz½ÞÈ)�GÛG£Ñ ðÝívC߇‡‡�Çzñâ…�F‚§§§ªÕj*•JzòäIØ^¹\Ö£G�ôèÑ£È ñŽÍçØú\ò÷?“ƒ¾:ÂÿÓÆ’ñæz"Úñ míc XÇïØ,óÆË5r=76ï™s€¦¢Ø�“.¥�f8p‡Ž(yÙétâ]p0-¡åúB<ë{‡ d¸0;pîå›<£Éuë‡gxù§YØ„«¿ûx»¿`uR…¹êåù»·ÑÇÛÛïÙUÙÏ<—®2Ú$}£|¾ŸV«Õb<—i£@ž ÉÚ•Ïç#ã ÿå¥Èœ8BÇë|¶ãYP|†M:�ïä g&¹M¹ßõÿ{ÛùÝuícè뾜÷Æ| £â?*•ÊJ6‘ë§×ëÁáÏd�@ç>ß]R{F·sœ�ƒažñÈ= "J¥R�¬Ù~¶óÜm�ñá^î3ÈžD´Û3O°í”PöL1HT/ýšÎ7/‘F@@ºVB<øü!› ;ô~ú¹:“É$ôé¥é'ßEwèš@Ÿ?k /‚|Üýü-lÇïåÏÞÜÜ\ñëô‘` ?s‹u+õ7¾?õ¬-|>YHßøætš-ƾ�} Á¬ñ%ø~UÒÊ�ÄiPDjnðlÒ v_\2Ò(“L^sù6ÂÆ÷oBä¤dŠ/½×M‰¡ÿ-Âäºû|—,žum& Ž—rœ+dÑÁÁ�vvvT,õÖ[oéüü\ýë_µ±±¡wß}W÷ïß�R¥RIý~_­VKív;ž‘ee’I&™d’I&ßWᥔÌ'�R�”(ÉýèGzò䉺ݮÎÎÎT«ÕtçνxñBªT*úôÓOõƒü@õz]_~ùeDö õz½Þy醔X§n>Ù½^/€Ýv»­¯¾úJOŸ>Õ½{÷øh¬ÕjúÁ~ O>ùDÏž=S±X @‚ƒ¯%ÅãñXív;ÎÆ$ª›¬£v»€{Ò\.Q÷€OŸ>U¿ß×p8ÔöööJ,åðºÝî YS­V%)JÑd: °É IWÙSpÒ B™.²;Ü–´9±àäâåø¼D à#@¾ó–z®“M^ž‹ Ïö(\H. QV¬R©h?€ÈÉdQö�NGÝn7@ª�?þX/^¼ˆ~2Cö‰Œmnmmi<«Õj…] ß�� 5›M=þ\ƒÁ@Õj5€±‹‹ íííh;�Õl6#»eccC‡‡‡ºwïžÝgr_žKvsÂÉÆÈÉLæö‚�BZÓ_€~';ðû´’ÁíÉ _{ÐmJãC| |œù¾ ,‹Ø¸£Ÿ®w'1=[[prÆÏ¬òŸ;Œ“€N{»é?kBꇰU²¯ø®?‹1K W'OlÝ{6c‚½¤öÁÚ˜ÏçÕëõVÈ"Ö]Æ‘ -ž�¯ç>ì) ùS A?Ìlˉˆ'Äœ|CÏH@2èÇu�ÍúÞ•õ� _¿ÓuÌý×}öªv®“oÓ âlÊ÷öötpp áp¨^¯§ÝÝ]íîîªX,j_ÛÛÛÚÞÞÖd2‰�g·ÛÕl6S­V[aò=ª$“L2É$“L2Éäû$¼@óBï™#)À¸±ñò|�G�é‹/¾ÐgŸ}¦óósU«UíììèóÏ?×îînœY´\¾,)R¯×##éèèH­V+ÊÐ�ŸŸkss3²{<’ðÁ³9Êå²ÎÎÎôÙgŸé÷¿ÿ½îÞ½«���• ˜jµª·ß~[ÕjUív[ÝnW‡‡‡*—Ëê÷û:??W·ÛÕd2ÑÙÙ™þüç?ëw¿û�òù¼~ô£­ì …BœK“ËåT¯×µ¹¹Y ”Q¨£V¡PÐé驺Ýn”þ¸<…4b¯ A¸ qT¯×ãÐ{JÌ8NY¢^¯¥¸ö÷÷%]]¹ a凩s­¤ Ø’()a�D&ãìÑó›››A •Ëåè§g¤ŒÇãˆä£/\[,upp ËËK���éøøX’Â~–Ëe”¤»¸¸’è‹/¾Ð“'Oôüùs}ýõךÏç,½xñB�NGÛÛÛ8^^^FÆ € z «@^‘5ǸQ¦êöíÛ’ä‡cO§ÓÈfa~äóyèŸÿùŸu÷îÝw@H€Ñ˜E��‡$ˆ9àŽ� �F5ã x/¥´cë¶ãÏxu�” ü @/ó2Õï»\¾È¦cì|�D¿¬>çð-ØÂ|>�³1g³Ynp½ú<? aäÙY�G)YÏ^ÓË #i”I&¯±øâ½Žìù®„�ÿ?ýì:ÒhÝs^uÿo»þÛîõmrS"é:¢k¹|yà1‘A,~÷ïß×b±ˆ—Àóós èÇ?þ±&“‰NNN´¿¿¯B¡ Ï>ûLƒÁ@·nÝÒÞÞž¶··Wž‘I&™d’I&™dò}�ú÷ˆk%œ8:88Ѓtÿþ}���i0Ä9�+GGGêv»ÊçózóÍ7uvv¦ÍÍÍÈH"‹èøø8"t¥«úR©`q±XT£Ñˆìíím�F#}ðÁúío«\.§Ç�ëOú“ºÝn€<§§§ºuëV(—{{{‘åD¶YGý~_ÏŸ?�,'X<ÛÐÒÙ£Ï?üðC}ýõ׺sçŽÊ岦өºÝ®nݺ¥år©/^èèèH³ÙLív;Îm¢cÀù:€)é¹SÅb1ÚK†¥Ú<›GR”[ósñ�4r€m6›©×ëEÔ<€Õb±P»Ý¢*ŸÏ«^¯kggGµZ-¢Œi/€#À„g,U«U ýío 0±P(¨ÕjøBFô³ÙLÇÇÇúýﯓ“�žžêüü\ív;J:�F#5�8C�­X,Fùj'½¤+@q0¨ßïÇyI‹ÅBÑnJ?‘1×n·t•¤^¯§Á` ÝÝ]- �ŸŸ«T*©ÑhèèèHï¾û®jµZŒŸƒè”jôÌ2°@P€zÀ7@c@-/CÆ|s�Ïìæ‡ïáe.x‰(÷)¹îOJ¥’šÍæJÖítZº*%H$9 !d 6ìÀÜr¹Œ²Vzd7Ñù€‡€��ÒiÄüp–yÃxñ}ˆæ‡?]:áàïö¢N$ñ·”„à¹�_€Ëعg`#Í8êçi8ÙÆ˜Ö�F£¤ùžãŒ{û=ëÆmÝ CÆÂ‰æ�¤ ŽÐ±g&¦/)àïÏu?·î‡ñ¢èͳ$è'ÏÅ � rÜ�¾ùñ5w]ÛÖa>�1T*•²2…òªè“>PBÑ 9'‹ùÁ&è«“€åø ¿Öç[J4aË^ËåRÍfSÒ˳k°7ôækŸ¸x®gü‚“¶žI„ 0WÜwx¦‹÷ÇÉ/Ÿ§N;јf¥$3„Œ�¯ÏÏšòLæ?ýcoP­VWÖ†”ät[ÄÞXkœTñ’‘Läd&ϧÜ+ ©�DÁVxó”¿a³ã¤ã‹ž F)õJÛðW\YÃýÒ=.}a½ógø§ø¥Ï]Úîþ" èÇÎýì{�(óõ‘¡T2Ò(“L^sÁ1|i”’>ב&×}÷U¤âQ.þÙu÷}UŸÖmšü_¿ÿ·õåUKÛÇÅÆ:ŸÏëèè(j„“òϢš|'''Áü·Ûí*†ÃaDJŠ—dïc&™d’I&™d’É÷E$Ì‘ô�Èjé è(‹ºwïž~üãëoû›ƒA�!­VKÝnWo¾ù¦>ÿüsÍçs=|øPççç.–Ëeår/Ïûåÿ¥ë/Ü”%�FªT*êv»züø±>úè£�_¼x¡³³3IŠ2G”6#ò2êøøX£ÑHOŸ>Õ`0ÐÎÎNè`0¬DÛâF¢Ð^ö¿€ŸìM‰,eO>õôéSݺuKÃáPùË_Ôl65�õÁèèè(ŠÑh¤[·n©Z­êý÷ß×�;wÔl6Õn·•Ï絿¿¯ƒƒ�œœh6›iwwW·oßV¹\V£Ñˆì²7œ@'dHZ)Cæ`%Øz½žÎÎÎôñÇG„lµZ�Ò^µZ-²þ‰w2�gùy4ìã=Z{4éââ"²€J¥R” cLg³™ÎÏÏu~~®Éd¢§OŸê¯ýkCÝnWËåR�FC;;;* ê÷ûQ¦€ÐÀËÏRpÀ‰L‹áp¨{÷îissS½^O³ÙL•JE…BAÏŸ?�Òˆ’¢6cÝét4ŸÏU«ÕÔn·ÕjµT.—õÆoèÁƒºsçN”À8£M³ÙLãñXƒÁ @^€,?<ÝÒ@ÝÚÚ bSÒ Ø�’2|9˜Eàúr`ž¹šæþ.Gºì,—ËÚÛÛ‹RI�…žAA{Œ{ñ) Ì3qÉÒã�"‰ö{‰,ôéYNrxÆ€GÒó¯ŸmAD:ýr¢�¹–’N!è�¾{Ö„—ÞbLMù.óì æ›GÚÓÇuÏô{;!±�>|ø.ŸC~¦ä‰ƒíÞ~_ƒÐ©ëŠgŠ{)G'ªÑ�“~þ6â¸eJéƒÿK»°_æ†g½‘0ïYøHü2~3ÍrûvÛNImÚ ‚`gœ¥Â:Ž`à¬6ÚäY”»¥XÊ:ÒÈI<ôá×;nE– åJÝ0_ð¬Q†NJ`ë2mý¾Üǃ( ¼¬ú„|fþò'vœðpÒÁý¬g†1ÏÜG ^á3jœbÍe­ ôïr¹Œ ÎÏÃ~‹Edñ¤e÷¼”�‡Ø">x8®ôÿí%Ü|¾s_÷/´»P(D&©�m©Õjª×ëQQÝ0^î—!}¯æãÀºïäuŠ}2—Ó2¼>®>¯|­pìÖÉDl�xib÷!©d¤Q&™¼Æâ " “;Èt±pÒå:rå:¢)½þUdPJäЮôÞ¾ `�óH†” ò�å$ü%$%b^E¤¹¾<]3—ËéÎ�;ªÕj+MçççQ§t¹\êîÝ»j4ÚØØP«ÕŠh¿‹‹‹X¬¤—›ÍÁ`p­Þ2É$“L2É$“L¾oâ/·€V8qÄ‹þáá¡~ö³Ÿé/ù‹>øà�œœèÝwßU¿ßW¿ß�’B¦L&ÌÙÙY”~úô©"‡ó\:�Žz½ÞJd4‡¤ÏçsµÛm½ÿþû:<<Ô/~ñ íïïG‰°‹‹ ]\\èñãÇúãÿ%L^¼x¡gÏžé³Ï>S­VS§Ó‰(l‚ù|®N§eäF£‘vww¡&½Ø-ýöά7²,»Î+‚C0æ‰c2™s�Ý]R©º…†a¡!z0 ~0 ?ùoù?øE0`X†aHZvKê†[¥RUueVŽLÎÁ˜ƒS„ˆosÅ-VKz,ÕÝ@"IÆ�{Ï=gŸ}ÎYkÒh4ŠÜøúè£�t÷îÝHW—Ïç5�õOÿé?ÕÉɉþú¯ÿZ?ûÙÏ4™L4�ôî»ïªV«i8êéÓ§úéOªF£¡ÿðþƒvvvtÿþ}ýßÿû\ÙÚÚÒÓ§OõúõkÕëuÕëuݹsGëëëªÕjZYYQ&“  Ök@¢}0ˆä A´ý�ÿñ?Ôï÷£¶èÚÚš?~¬Ç�GJÀáp¨½½½ˆ¼ÉfojjH7µ6ŠÅâ€~tt¤Ñh¤z½®r¹ŧ�pêõzzóæ�^¼x¡·oßFêÀ³³3ݹsGwîÜ‘tUV*•¢–P«ÕÒ§Ÿ~ªL&£ÕÕÕ¨{Ê ‚¯P(¨\.ÏBžâ�¨£««« ºH‰8�T.—U(´»»d'@íùù¹êõºÞyç}ðÁARBþ�.Št‡Ôü!Zèêê*È?Úí5)¤›H>#òÄAÉ$°ïgSÀ]÷¬ð‚”âz¢VPH|sðщ9ÌùúÈ™ÏÁÞJ¥r+ЇNò^´‹1ÆÙpÚ½ñiŸ{†ó}ï7ìái�( IDATmˆô! é„œß=óyêDßs¯Þ‘ñ€ƒ`œä}ÜÓ`r�¾Â¦¹ÞÓ^ï[Æ„1f\�|夿œö('Í VÑ{¢"9×{jHÚ-)ÀkRl¡�"Œa>Ÿ22Õ£œèÐ…DHb�h¤Mó÷æ'‚\G�˜N§Ah2>´Ù뎡On§“¤„G+ùØ�æÏ1×[ÞÙ휢Ÿœ4rýJÚß[øÜð> b‡û-..ªV«Å8]]]×®Ã�¡V«Íõ_²&8öôêê*Æžgñ9ëß'J¾Ñ.Òœ¢×ô#cL?%õÛ÷QɹÏ5nƒ�¸ÅF±�LJQŸ‹yÀZ?™Læ°2ú�¨^Òä²GcM¢�eãÑUè¯G]\\„mCÏ ~Ð l::LÑïÌ]Ò3GKžÏýÈD”ŒbÌÜ–r�;ôøšˆ®»]Ħð|œWHÅçdOr=ó9š\'xfÒÉÀÉRl®¯.)i”J*ÿÄÃJo#ƒ<\ÑÿOþüÛ>ûm×ñûmþ™ŽAL¶-’:�Nµººªû÷ï+—Ëi_/_¾ #èyÑ=”øïûN×»wïjuuU¥RIOž£ÑH§§§±¸³ àeÀâ.inó’J*©¤’J*©¤ò}“¤£Ñmæ’æÁçççÊçóºÿ¾Þyç½xñBÇÇÇ‘‚Pâàà@ÍfSççç:99Ñýû÷uyy©££#Ý¿_³Ù,Rœ¬¬¬ÑÔl6•ÏçÕn·ƒ(ø"�Õ_|¡wß}W}ô‘ÖÖÖæä£ÑHÓéTú§ªJ¥Ï<;;S­VÓææf€{{{syí%imm-¢u¼"Ÿ±Nz¶KŠ}êââ¢ÎÎ΂< VÄÎtz™É‘ËåT¯×ƒä¸{÷®Êå²r¹œÖ××µ³³{á……Õëuíììh}}=Àco‹{ì“¢ @Íß“8V«U���)ŸÏ«\.ëÉ“'úàƒT¯×U©TT.—PÉd2ªÕjá) aȳˆ‘dN¯×S>Ÿ�h¥Ï>ûLÇÇÇÊd2ªV«¡—‡årYï¿ÿ¾ÚívDçÀ,--©ßï«×ëP}zzª·oßjww7Èœf³©áp5:©õ„g~»ÝÖl6S£ÑÐÒÒRÔMzøð¡‚x¬V«Êd2zûö­ …‚ªÕjxcçóù K//¯ëeÕëu=xð@÷îÝ � ¨×ëÅùj<GDÄ‘ƒ–Œ£{þ£›Daðž¤@L’Ò¹W=º‘Œ8üô3¤�1€}¶<�9Í¿L&õ»üL æAÌi'=Ð]ŸË€ùÌO'Üö9Ðë^ü^û„ó½÷¹{ç3ŽØK€f'Óè@X?�Ò>OM%Í×�ä€xaNóþV÷h5žÇ3izDÝ-�ºð°¯“D¿H7„�G€91áï¤ÿè7@ñd :Æ¡T*EÄmd,É'“IôïI» XèÛd4-×yú3o_²o˜®ß>‡=Ú�6úºàÄU±Xœ»W’€ñ¾JŽ!âÑè’“AmA_ ›DSºS·ôC³Ù”¤oÔ+ó´lNºùZâÑPÞ§ºÇ"“Éh4ÍÍ}ôI¦ ó>ò¾HöeR÷Ð%·IÇ'�$õþ„HÈf³áðà)á<Ó?w�t}w]‡„Å&±¶ã¯““�ŸŸ«V«iggG›››Mç)Ñ7€DÀE¢ßÌ’Ñ žnͽ­ÝsÛÏc|—qB'ôGwL’&®?N¬8ðGD À%vÂ�y–G]är¹Þ©™Ãè¿×Üp ÒÉÕd¿xtßKž“¹G0·è�ºðh‘$.Pë)Ê’@&ïBû±£Ñ(È8ÿž{°»—=ó÷óè ôÊÉql·ßÛ *ú2�qð´_®§èª÷¥“=nÇ=‚ÃmVR�çZ_ï|]ó¨{žëסà ™$}@²¸nIÜëõæÖ5¾ëó,‰ò³§K¤=è…GñÑWgggq½ßÛ#´$}#%zãä§ÛWtß÷®‡>÷=Åýî¶ï6"?INÞ)êv�k]ß“Äi6›�yÅ~‚'¢dŠº”4J%•ï°øÂ‚ÑH~~ÛïI¢È ÊmßûûÞ—v$ÿæ‹‘/Ð,Èäå€Hš 6~ø¡Æãqx <|øPï½÷ž^¿~­ÿõ¿þ—ž?®Á` Is›™ßö^ümyy9¼ûý~xFË?¼+$©Ùljmm-ò¶æóù9¯Ùl¦r¹hñVñ禒J*©¤’J*©|…½š{�º—uò°ë©h²Ù¬?~¬>ø@:<ûì3U*•úñX®T*ºwï^-eÙìu„H¹\Žè¤‹‹‹h{KŠ…õ’Ëå´½½­V«%IZ__�š9�½^Ozøð¡ÖÖÖÔëõôêÕ«ˆ6!*ëììl.Ï?©hŠ2™Lx�»7²ÉÆ;[ºÞëƒ9ïwbxõ4DÒ ÀáQKKK*—˪V«Z\\Ô«W¯ôâÅ ý⿈k½�tíÞh4´½½} �½¼¼cC-)jéÕ«Wzõê•ŽŽŽ" ð;;;}ûã-].—5utt¤õõu]]]i0D=Ó……mll„s[«ÕÒ½{÷T,#Kº^("Šh4©X,ªP(h_³ÙM”K¯×Ód2Q¥RÑh4R¿ßrg:�ªÕjE*�³³³¨IÕl6õþûï«ÑhÌ�g³›t5[�7h¤÷”“ç �°a® N&9°P  IÀs=š‰Ïo;ëroæU2šÝr²Ë=Dz¹ÖASi¾æ�;AB28ø—l(v°9I¢8¹@ûœÔHì·ÙKP=20“ï$Iï/Ÿ£Ìòw'Û%…ç;dŽ“züý¶d€®ÉñuÛ@$u ÒˆùD¿ú»CxBBñ;9ãM›ø†ó1"ú�ÈTú’ó=iÇh7—ØlôÅŸëQRWWWA4û½¸ÎÉæÁmõ`ܹàÛuÖ£Žœdw=N¦3LâE·Í›d­ �°ò9ë x&s�v2™D¤ïââ¢Ê岃AôÔtâ–9Åó\ט«ÞnÞÅç’Ï5ž?›]G_ÑFÖHbúÌÉ–¤>ÑÿîÈ‘ä{'$ùžcI>7™7IÂ.9Ï|.{Ô›G2cˆ|q»ÑâQÂ8k`÷I©Šýf�¥¯˜ï+++ªT*‘†ÎIäápéO‰æö袑}_@ ^Þ—yåvˉ#X ûÆãñÜõè”GÄú^h4i2™„ý(•JaÿVVVæœä¦Ÿ|mMF2¾V&£3™Ì\øgÜ“û0Ÿ}Ïœüç‚“•§ßÃføÚá’’F©¤ò�D|rßFêÜf\’ÄÊm×þ6²ÈŸóÛþæÑ:³ÙMžß¥¥%5�¸¶ßï«Z­ªR©DZ‡èÅ‹‘vàîÝ»ú·ÿößêüü\þç®/¾øB‡‡‡s!•¾iO¶‰ÅµP(D±âÑh ©ƒA¤T¨T*‘·ýòòºðãïüÎïÄâáÌ<VO Ýä�M ¤TRI%•TRIåû&~0ˆ¬Jz9l“Fc6»®+ùÁèéÓ§úÕ¯~¥b±¨z½®R©ä€^¯Ô ª×ëzúô©ÖÖÖ´¾¾®·oßJ’ŠÅ¢ÎÏÏcï·¹¹$Ò×_­LæÚÛ`2™è¿ø…~ô£©R©h:�j8†wô| W¯^iooO½^O­V+jêlll‘tqq¡v»éÏÜK¼T*Ésqq¡R©$ €@Îlv�j¤^¯GÄÄx<Ö`0P·Û �^ÀRjë¼EÃ~�½2ÞÆI ° ¯qÀ1�*¢‡—þ³ç×???×p8Ôx<�±„Üâ=:£ßïëùóçÑF¾ã€}½^Ÿ+$zzªãããˆü‚¨ÛÜÜŒ: ’‚8‚P:==�g‹EÝ¿_ï¾û®ƒAP÷îÝÓòòr8“}ýõ×¶µÛme³Ymll„³\&síyMm¥W¯^©V«iuuUÃá0ÒÈ•Ëeh<kmmM…BA�NGÃáPÛÛÛÊår:==�ÔŽ›››úä“O´µµ`) {½žÖÖÖtqq¡V«õ´úý¾$ñvvvN�N'ÀB�ÊÉår�Fš;øåd ç!椑ç|'i/²ÙlèúãvÄ�ý$Ié$B4ç6'Ð’ÑÌÞÁ=Øy6º–ÍfçÒ’aÃh}>bzêuÜ“‘ÜKR×dÐpbn2™�ëäýëçb�(¬õŠ]æÄž ﱸ¸5ް=ÌUO!.àzB[»ÝnD†åóùÐ+ÆÕû`ÙÁvîï…éÝ£Ÿk‰º¡6œ×c¡ý¤iÄVñ¿“ŠÒüÎ3‰ÀdÌxW®c^-,,„]wp[Æ\£}<ÃÉR©Aê°{ê0OQꑌ¥§Ö÷ç£8I +<+IzyÚB¢ÈÜQÄßý n˜#ÌO�â¸Mw!D<:ã/œØä�<�b’¬vâm8ÆgN†9�Eÿc/{½ž$Íõo2‡~MtØ6�Fs 7’Îè`’Pb}ó=†ãè!óо"ÒÔ‰�ÅÅE … rÑ3êíÑnÆ7Õjµ4 ‚¨coÀÜëv»êv»ñöÌß�¦Ÿ˜'^[ȰÁNΠÃá0ìvm8q”ËåT(b¾2wÙË`˜Gž‚•~ ¯±«þ?:á‘l’æRïRÃÉ×츧˜s›â<ÄÌ:Ãó¦Ói�kI猔4J%•ï°¸gIrÉçüÿÛ#¿þÛˆ!�îÕ� õþ“2l(,‰Ñ»¼¼Œ´„±.//«\.‡q�ǪV«Êårzþü¹VWW5›ÍôâÅ }üñÇÚßß×úúºþå¿ü—úýßÿ}}ùå—úå/©V«5ÊËá]xŸb´I9Áa|?Œ?…wWWW£Í’báôÍÝd2‰ÃÄNú'•TRI%•TRIåû(’“ÞýI¯j€Á…BAÛÛÛzò䉾üò˨ßS.—uzzªÅÅÅHé–ÍfuçÎu:�ðX�ÇáY|zzú g8ªÛíj0hssSkkkÊår:>>ÖÁÁ�ÎÎÎôüùóUƒA¦�=ÒÊÊŠVWWõàÁu»]e2×µrÖ××ç ¦ãQ ˜3�ÂÚ=){kJÙ›”¦²Ï¦ý€ÍWWW�FsD�Ñì_YÜÐð%y�Aÿy�@€ ß�{í!®¡ï= Ï]YY ÀÏ_?sà…ïdÔt:�ú¤ j·ÛQ;¨Õj ÉAQìB¡u? …B€3çççáAÝh44µ»»DS¡PÐßüÍßDŸ‘ÄyçèèHƒÁ j©pþY\\ŒºHD* ƒ¨OT*•ôõ×_GDÛâ⢃�.//U¯×ƒ¨ã,Eí&¢¥Þ{ï=5�ð”ö1áwú :™6‹h(Î6ž&(µàä/º1ĸ;YC$÷ás®h#*ÁÏÂŒ/Ïæ¬ê€hòüìµ§&bžÌf³¨oã‘5´‘~�øc¾"Éè ?“BvŽ:(H_ðîŒÏa˜CIçD�²Â–ÐBDпI0Ý£&‚¤õw0öº<ÀŒÑ>N,2®Åb1îuqq@ìtz“�þóh%Hl‘¿—§ÍãÆÂuÕ£|üÐ]"ˆx6™Fœ¤p=p0]œ`wÒ=r° —9â /ýÎ<öÔ¨ô7zådª7¬»Aûc·õ¬É¬C�F¾~C–ñ 'YÛi+ß�ñèÆýÁî»ý÷´¨žZŒÈ]Ö?Oçãîä!íà]y>ƒ¢ùÌí§Göøw�¬u`Ÿ±ðH·äÞ}tÛãQDNN$ ('Á“‘=ìÄ,×RûÎIræ5kˆÄf�£ª±îÀÁ;9®çsb9“ÉÄžÃS ²ïñúF¬Œ16w4ÍÙ,'4=rÜ#¢¸;̼¢ÿùsŒ½†[¬;¬uÙl6¢œø®GÉ­¬¬Z,c¼Ñq'=%#ãOß'±Vô^R¬Ë¼#ûftÔÖ�”¢ß�Ôõ5�û 'ÃáPý~_£Ñ(ök^³OJI£TRùN‹Ó¿‹ºí³¿ësÿÙÃö1öž€ƒ †Ìó~’ãÜ7¤sïI±I+—Ëá•éQs¹\Ðúý¾ÖÖÖb3»¹¹©|>¯r¹¬�?þXôG¤�?þX¯_¿Öo~ó›XÈ®®®âúf³9÷®2ظÐf§IÓÉ4�ƒL"­V6L,òˆ/´©¤’J*©¤’J*ß'q˜}à‰{àÄhI  °^¯ëîÝ»sÑê’ttt¤z½®³³3½yó&R AìŒF# ݹs'ÚT¯×Õéttzzª……5›M5›Måóyêùóç‘6�çÏ?ÿ\OŸ>U·ÛU«ÕÒÖÖV¤ùr¢€RR€�FDžžžêììLÅbQëëëšL&zýúu¤AÚÝÝ r¢ßïG_M§S …H ¹Q«ÕT,£}ôQ¥RIêt:j·Û‰Ôn·ƒpèt:¥Õn·Õl6Õn·u~~)±úý~¤¸cï ¾´´¤»wïªR©xá€×ÙÙYìÉIÓG?‘®V«iccCý~. ®R©D.À"À(O‰XÌ™æòòRµZ-@$€aúg<«ÝnëââBår9Æ PRj6›EÚºÕÕUÕjµ9ç3ꢾ}ûVÑ/^"“Éèàà@ý~_…BA’"ê¨R©èüü\‡‡‡séhö÷÷U(”ËåÔéttrr¢•••Ëe½~ýZív[KKKÚÞÞÖû￯wß}7€N¯Mµ°°ç2'8$Å|’n «sþs0�Ù£€8s9Ñá 5ÏìäLHAA00ÏÓ¤›´tQäÎzœåœP±@Ö#;x¾œ´Ó#³<"}Fç½�Ü0æØ'Ý62>Éš5IʳܹÓÓx9 é¤í8ö¨æ‘÷ºàãá ²G¤@b¡NÎ0œÛ=:ãÛ`ý»ÒM¤˜GÇù˜’z¤÷óõ&éÄšËå‚„(—ËAÈ–Ëå¹Èôûïd�$ÜÛ#WÐ]�ÔC¼íŒÍââ¢ÎÏÏ#ª�H ï;úÍç du6›�KïéýåcÇûùšå‘ Nìq-:‘?¹yotÂ#0Ð]Ÿþ}H1Iñ®Nüº³ ‚GË¡«ž’Ï "zîËú aàQ0ü�è6Ò£înÓgÖFRµ2ÆØ È'‚l$Q«îl™B”©“Þ�®¯ô!:áó„9âïÁ5N~ów·­®OƒÁ 3Æ …çÌf³(A�#'LœàCd­Çæ 'nSÀäÀ!„ ËkµšªÕj\Ç:¡Cd3p®3m‹Ž£ÃŒ·Ïkl‚Gl¡3èn½^�¾d¿Áþƒý{·ËŒ¡G²±ó^žrÒÉpô�|Žñ")i”J*ßaÁ`³x}ñ!(|pq¶’‡T±ÎêãýááÖ§n·Ækmm- v¡PÐúúzxâPèxssSgggjµZZ]]�CÒåå¥úý¾¾üòË8Àþñÿ± …Bn6›s᫾Àª{ �R©{<³Ü‹‹Ã9déíðØâpÉŸJ*©¤’J*©¤ò}ö{îéûCOéá^óìMûý~ìéîÞ½µƒØ£M§S U*]^^ªÓé¨ÑhHRDI7Þ«ì×ÐÇãõòòR½^O�N'ö¹Drt:íîîjaaAƒÁ �~¿?fx= Òã ÈKdƒçž_ZZR¥RÑÊÊŠT*•ôÞ{ïE_QwéððPív[Õju.�Õúúº�†*•JH?þñ�%];IýîïþnS’T­VU­Vµ´´¤ñ/þ…¶¶¶´´´¤Ÿþô§:??W³ÙTµZÕ�~ô#u»]­­­E�¦ÕÕÕH5�—* )ûð���ðÊ÷1PÌf³úâ‹/¢æ{újµª�?þxÎ[Ö#ü‹œ8Â#›4w¤Õr'6"5p|£Î”“ œ hsŒ:(×Ïô#çH�l6;Õ�çL÷ìNž.޾áo€YNìøý¥ù, F»÷6÷f®Ð�¾ÃiÒ ‘Â:Àß ±œ¬à;¨‘b ¢ŒçÑ~ô)I&!îÅî$¹GF$AiîåŽØΞNâ¢ËþþŒ9×zäÿ{;Ý6Ñô�>æèCÒö{ôš“>î4àcâ8‡{èÓ-á‘#~o¸‡ƒ®öÒ·€Å´�ðÈI·ã>§ `œ˜^\\Ôh4ŠÔ¨¤Íô¨w:=?? ‚g IDAT�1N‚ýÌWls×#W|l}ìcúã6òÃÿƵ5áÑO´‡ç@Ž;aÀ;:aä¤úˆ-̦MÞб% >W\p&`]æÚ¤í'ê‹ûº]CH—šÔO'}Lx/æ´§=DwÜ0�Y_œà'=ÿø.ß#â]õùäó �(JbŒNbk“sÔI!é&bÜ÷3´'IápI·¸¸N/žÆŽqp›æ ®³É÷p§¤dÔ°“ Ø /�ªv2;Gä±—Ì5_'X�°è cé©-Ñæ“Û{wDJÚà¤=t�ãœÄùÇtÅ%%�RIå;,¾!B|Ñò¿%%ù�ßv½/’¤“ó�î¦éÆ•k0xæêõºêõz¼ ›ÕJ¥¢£££(àšÉdâð•ÏççŠÞb`¯®®txx aß'''êv»j6›q8«V«ÚØØÐl6S·Û�<ØIo5<#8¨øBë^’¢ ~È`Q[\\Œb¹ÉÃD*©¤’J*©¤’Ê÷I„qogÀ"ùì5rñ²í÷ûá�Ê�òf06�ÕëõâÀ>ãÐ~rr"éúPþâŠݹs'@zRR¬™ý'ÑôµZMµZM'''î”J¥ˆœòý! àžÇ¤·Ëd®ÓöܹsGëëëú³?û3­­­é÷ÿ÷Õëõtvv¦Ì4o4Êf¯SËÚ‰BÿÔj5Iºvذ( ªT**‹Z[[Ó¿ûwÿ."{þàþ ¸¨üàQggcc#vyÏ"³i»ÏWOŽýÜïcÏ;ñÞþ=OsÆ|ñùä‘^Œ¡?ƒq÷ïúzµþ¹G~ÑNÚèÄ`ïx<ޱ"jÇød¶ÛÀs'=²�”“NˆÐ®óˆ=×O‡è:æ©ñ“ë,c‰â‘CÞ®gNXòÞØG'A°gDA Kžͱ#þî¤":“$öœ`öq£�è‚¿£“É�>H�GŸrOtûÊs’Ë£×À½ÜޏÎ{DµëܾÍf³¸†weÝâý@ßú:èó-éÔàs‡ßé'·ßNzz¢çèšÏ­dž“/¼ýÀšëé;™kô‹Gõ”J¥ Êœdó5ËõË�è'·�¶8¸°—c]C¸'¶|Ó zl™†¼}aŠžzªÎ¤�t½§ïG£Q|î{©ËËËxgiÞÂm'mõþå™Nâ´rvv)PÑ?$%�RIå;.Ϊÿ} £äß¿í>ÃÓ¥ÕjIºY´.//•Ïçµ¾¾>·¨,,,±„!¦¨áññ±Õl6µ½½­………È{ΡrwwWÓéTÍfS+++êv»ADñ|(ºz½®••íîîj<Ç!�ÅÁ` v»­ÃÃC---éÎ�;ÚÙÙQµZ ï6Æ,Ú ×õŒØ`P@òŠƒ ýr[;^œ©¤’J*©¤’J*ßga¯äiejÝc”}ÕÙÙ™ö÷÷õóŸÿ\¿üå/ãÀ/]§s AF�†Fº©OÀžŒ:gggê÷û‘‚®Ýn«×ëiyyYj·Û�Ç*‹±GÌd®kü°7Äa8*—Ë©ÙlF 8¼;°8�#íÈÝ»wÕh4ˆ¨ª×ëzüøq¤ÙÚÚŠ(žñx„ @{úJ_|ñEx™²?¥ÞŽ{5Cvý›óoô{¿÷{ZX¸N½vzzé§{½žŽŽŽÔï÷õðáC}üñÇ‘ïooOÅbQ›››‘Vm:�FÚ®Ût€4KÔèY[[Ó?ÿçÿ\ËËËÚÛÛÓ§Ÿ~ªW¯^…Nàt¶²²¢B¡ b±¨Z­u�†666´´t]§…+úùôô4ÚßívÕn·ƒó( � aÌÉš0�ÀŒ¤ˆt¥R‰´ƒ�F#úÆ‹Æ/..ªÛíj6›ÅÙ…”€ŒùééiD-//ëðð0"â–——Õív#}uèë~¿¯V«g´B¡ ‡Fjo€qH!î ¨ëŽrþ³€Už>ÈÉ£=²Ë=ñi3ï¸è„±rAHÜÑNæÖd2 ‚Œg{F 槸î�/Ý�jNTqÞvrB]"bÁÏÎÜÇ#m?ÀEo`¥£Nt¡§¼¿G3AȘ:ièé=’‰~ð Óé4êVù82.Ì��à¾Nìa‡°Çè“~� ŒÏô>v2Ík~8莞Ò6Ö�`Ëf³AF²Fð Òp‚mð÷$ñÂ{m8H~ì.cÉÜñµ˜û–J¥p2©V«�Ó k½KJ¥’ÊwXÜcIúöÔr×ß¿MøüììL‡‡‡Êf³j6›‘þÀ½)¬‡a®T*±p±a­V«ÚÜÜŒƒŒçÖäóW¯^éàà@ëëë:99Ñòòrä9-•J‘&‚{Öj5M§S�žžj2™hccCÝnWoß¾�ó,—ËAn‘ÒNºÎ¾»»«¥¥%=xð@÷îÝÓÆÆÆœ·›�………¹#‡s6¾ÐKóy|¹Ÿ!©¤’J*©¤’J*ßG!:ÐÁ½Úý@ X”ÏçõäÉ-//Gž|¼À3™Œ�F`žŽŒh ²ét)˜ÙCŽF£ØŸñ‡R¡Ñ¾B¡ ¥¥¥ Žƒ�Êår\`?›Í Œx|Á“–Hy@ˆñx¬ÝÝÝH�wtt¤ƒƒƒˆ¢øôˆî ¡@Ä ^¼ËËË:88ÀýììL�FC�FC³ÙL/^¼Ðûoÿ-@Ý~¿¯Á`@¥$­¯¯+›ÍªÝnG” âË—/õöíÛp–"êã³Ï>‹þ,—Ë*—ËÄf³Ymmméÿðƒ üꫯ"]X¥RÑ{ï½§z½®££#}þùç*•JAš‘q`qq1œ½Fœˆõè3�*ãYØ@t'¥+�¾¥Ž“¯Í¬7Øv×Ïd”}Áº 8ï5œ¨÷ådÄ÷õùK„¯÷M2jŽçÑ7uaËwøç} D?cÇ!Gè'æ¿ë™zþ~nc}ìÝÆ2Ÿ|-ÀYÛçßã}û¼à>>×’$!íuì£Gy$¯×â™è Ï! ‘�úëd,c)çÑ9·õ›ÇÌYÚá ¡…¾³—A÷¸âsÑÉB�†rì×u–¿ydíòHw·�8’€a2Ÿ’8eJ¥’ÊwXnÛðúgÉŸÿ¡¤Òét”ËåT¯×çhÈ›n·Œ<‚AÄ�>yòDWW×9?ñÜôƒŇ{½^xÃe³Y�F£ð8po�óósåóùÈkßï÷ãþäS§Øq­V‹ƒD.—Óƒt~~Þ“,o޼ћ7oT,µµµ¥ýèG±‘¾¸¸ÏI6;ä 'êÈÓøf2¹9O%•TRI%•TRù¾ ‡Xœp8s°DðŸ×××µ¹¹©Ÿüä'ÚÛÛS«ÕR¯× @½×ëiwwW§§§êôz½ØGr`'íŒÖ¤@aßÖívÌ)‹e€Ç°¤HK‡ã?6yî˰§P(„ST¿ß¢ëììL{{{AÀ@lmA�@йÉd¢N§£n·«R©õoˆÄ@©×ëÚÙÙÑáá¡Þ¼y£·oß~ÃsuyyY¥RIkkkj4ZXXЫW¯æ¼³³¿¸~õÕW:<< g®r¹µÊår�÷ïß×Ïþóîf³™Ö××õÏþÙ?Óöö¶~ùË_ê׿þu¤N�F‘¶Àý*•JÑ÷…BAµZM•J%§b±ûtoßp8ŒÚ#D¹þz÷û}M&“ èc<²‡¬žº ºÛí‘“ÉÜD51Vž­ÝHzÙ;9`Dm¤¯¿þZÝn7êƒHŽ`&“‰¶Cœ¡ƒ¤vôög2‹Å¹::ùÁ;; Àxè@ßÂÂBDIð™Ï'-¸äžxÞ{ä`5s}t2ÉÁ@ÚãÑNò8ðÌgÌ:iäÑAœ›“Äžÿ°ô0ã™$R’çIsöÒko­¬¬Ä™šˆîíi뤛¨ÈdäMŒ¦ít'IïWÄj×c‘½ 7|ü!3¼=ßö³�q’ürÂc�ppŸö:ãúƒ8ˆîÑ&·Ò Qä}ËõNrù5NL8aÇ{zíäg_O½_|í£Í>xvrŒ“ã~›#¬Ï9ž“L·†ÎiìcG;ÑKjæ‘–Ór'%¼-�è2¶°‡ tŠõÓ ÞÑÉ×dˆ·É”`®ïN”ð»G8¢?Ø~Wó61oÑi'Â’dk‚Û<¿ŸÛ`o¯ë2$½×XC—ý]},’„1sÉߟߓ¤•Gxù5žêMºI7ÇX'IöHŒ µÛ/�”s»ã$¶“®ìoèwúÄÇ�>àþÌŸ#îˆàÄcæ÷‘{ÆË /_W}ܘC¾Ot=á>ô1ÑR8‡ð®.)i”J*ßaIn0¾�4J~çò7XBÛ'“Ið1tIVœƒÑl6S³ÙT¥RÑp8Œ�£G�ôìÙ3½~ýZ…BAårY³Ù,°kkkÚÛÛ›;,--éää$ i·Û� FŸƒ~�)—ËZZZÒ`0ÐxŸ×êêª�†NOOÕn·ç<üvwwµ¿¿¯Ÿüä'êõzs9|yO݃Á 6_@“Þ$Ò|žïäf:•TRI%•TRIå»pÈOzKóÀ"`ޤˆŠè÷ûÚÞÞŽÚ”’"=ñúOÿI»»»Q»¯O€ù�<|ÿøøX§§§‘Ö,“ɨÛíªV«éòòR‡‡‡sÞ§D ]]]©R©ȵººmŸÍfQ{B�ýãp8 Њh@"÷ …BDL�F£pÐZ]]�«Ùsuu¥z½®B¡ÎW³ÙL?úÑ�ôâÅ �œœèââ"ê+Váè´¾¾®J¥"IÚÛÛÓòò²šÍf�c5<ÐÚÚšr¹\DNé%Ý€€îIËY2�=ñ`0ÐgŸ}&Iºwïž~üãGäW>Ÿ×ÉÉI(´›TvDálllÁspp)ë ;&“IDpI×é I·�nðÙÙÙ™r¹\)+++*—˪×ëº{÷nx;¡Ôï÷Õï÷upp §OŸêÓO?•¤H1èm<£×ë¨{xx^àèœÏRÓøÙ"“ÉÄùˆš( *‹ýÆ8Cœý×ÿú_ƒ8h6›ÚÜÜÔæææœóõ»Ø I§Ói¤'侞憺ÃY‰9îóPÍ=ó³¹�tp  ˜ŸWVV¢-èãV,çÒ]º}q�™¹šŒÊHWNΑâˆÈ'«”óó)Ïp Øì§]ü�ß�Üñ³¤Ÿ'éW%ÜŒv�ÓÁMˆBú5I®Ð&' ÜÞI�oóÐGw!‰¦ÀÙÓß�þñˆ@bÀýd_Ó.OA˜kÊùN’<ãLOd_6›�µ„vøóxgŠ'I!œlðö¸¾y”ŸS ÈÇšµRâ¶ÔW~-×8ðíd8ÿûÞôÇž‚„û²¦bÐa'�é/Úëýè‘<�>’‘Fþn´ÕÇÒ‰ZÆ…þuâ Žg£3Œ‘ü¡ÄØð=æ×ðÇuìŒãœ¼ Â{º E¿<­!˜cvqq˜"càä6iw±ã�S8-9qäãÀ^Â’=g¯×‹ÉÜý”ó„èhö�Fì X¿èëååå9g—£££9‚II£TRùŽ‹o„¿�4Jz�ÜvÍ·ýÎ!£ä9\ÙPqíÕÕ•úý~D±˜‘²ƒEõøøXårY‘:ŽCøÕÕ•^¾|Füàà 6!´¥R©D>rRÖ‘ç¼T*I’ …‚ªÕª.//ÕétÔn·U©TT(Â8---éîÝ»ÚÞÞÖÑÑ‘ƒÁ\!Ú¿ø‹¿Ð�ücÍf3 ‡ÃÈï;ÞËû‚~gñIß”0J%•TRI%•T¾�âÞ¨ìíV“^Õ€„£Ñ(À@jI‘·~eeE�=ÒóçÏõüùsM&mnnêêêJív[÷îÝ‹Èôr¹DDÐL&år¹H}W­Vc/K¤  =81¼~ý:�áp ‡xHRÝ I×é—‰6¢ÞÍúúº¤ëôc­V+Ú øO��r¹ûO'¤y@†¾Ð…›ÍfZ[[ @ ð¡Ñh¨T*xÂ~ÀÐÞë)�R çèèH‡‡‡jµZzûö­>ùä}òÉ'j·Ûsæø—J%•J¥è»áp8—¦f6›EZ€$€\H¹««+u:�ø,ŸÏk8 ˜ÏøR¡ÓéÌÛ¦ˆ7„f&“Q¥RÑúúz¬&úˆÏŒˆ  N*€¤G–pÖâœEqjURú1—ðLç<´°° ��ݽ{W«««Vº×>EÆ“5hµÜ“ýââ"Ò¶...ª\.GÑ\aã cò,ʽùÙ#è �¦p°"Á½î÷7æýãvÅÉ?G3‡<:]a<¼˜=ÞïåáAŸ:yá€Gy Úâ6޶B‚1îÜ+iS“$$·;zz-kIsý0̳Üã�6£[ØG×Íd›WØB¡i<ýù<Óëfñ,×/éÆŸñó9éCœ0sýî²Ö`ñ¾÷('±¼m´Ý£ä¦|—>€”ÂFp=ïȼvpÛʼn,'ÐÞÓIžådI8÷h‘䜡}^ÆÉ&æ:ÀúøùiçúÅ;9¹6�ÞD§±9éçdý')R‡b«ÑQ�˜tRßS¿9Ñê$7¤‡™Œ3dŽËÌ»l6¥ hÃmQŠN&ò}'x~2Øk¤!ØqŸßnÓÑ×7×itÁç;Ÿy=Š9ë6ÊÉ]ÖQ'¨° ì=xG·Oè«;"0wœðE·pÖ@§éŸ3IüÔuVRsèºÁgèP’°òý–;u ßN{?%ÓFbÃg³™ …ÂÅœ#sÏÂé†Z�èi­V›ÛG`SØëð½^¯Ñî.)i”J*ßaqï”ÛXøäuÉ¿Ýöûm›‘Z­¦n·«ápi7|â`DªxRFà±Æâ†ÛÚÚÒÑÑ‘Úí¶Ö××uyy©;wîèðð0rRÐq ÷ %¸ÕÕÕ �Ü’ÍL.—Óáá¡NOOU.—ƒ¥gAjµZÊårq žL&j·Û±¨þâ¿Ð‡~¡Ô¾ñ¦¿’›ød_úBE§ÄQ*©¤’J*©¤ò}OÍâ)ˆ’Q+¬t»Ý×ÝkoÊ……½óÎ;úòË/õüùsíîî†cÑóçÏ#šæääD[[[s)|ŠÅb"ì?(¦m| ¶¸¸í„d�ÇàÉIí-xòí{ <î—¬¥1 âzâi'„ ûU÷wRiii)À](ˆ4ÆÀòôôTÏž=ÓññqB¹\.Þ…³¤A»ÝŽ}ú‚†Ã¡Þ¼y£ããce2êõë×:88ÐÅÅ…>úè#U*µZ-]]]Eä�VÔ�Ç‘&�1ñz5€RçМ](|�Ïçã¼BDO³ÙT6›�ûKš#¨Ü© `‹s™¨uJ?J^^^FŸq^ bœh“�U6{ÑØ´´´¤Z­¦………ˆÈ‚<éõz:??×ÚÚšÞ{ï=½÷Þ{ñNDIA �F£(Îßø”n€W2;˜DÔ„§lâûÜ3 ZKóÑs‰~M¦ñr žqõeîåéWÉèöÆŸÅs´ôº)�™®o´ßûÍÁZÚêܺ{´ˆt“âÌIš$áÀuþ7å=ˆwâ�à,Ï3�$ò±ñ¨ _Æ+—Ë…=C78k;MÔ'º�ÏçƒøÇ®ó^NX8s�;´2¿h¯¤9‘~æ>®+n°7·ÙU�ðá9Éh§$àîíá½|\’鳘+ÓÒµS)*ç>>þŒ;©VY+;Ϙ»8AèºéóÙ± × t˜wçï¼+ãƒ=…»ººŠtp™ÌuzXŸ¯N–rÖ^ì ×±VúÜ!bA7œØ#u—¤p6`<¼¿XÏ]×—––4�¢ß<Ìܙ؉_Úâu‰ÐdÆŠ¹ 9åžGйÌÜÄÞÐ7¤±¥�œxñÚ9®ûØ@æ?÷÷:[N² ¯f9êD#:ëúçé蘫ýI_ /Ì['Jyæý@¿»}óùêÑJ®÷ÌÆÃÉOì%û2úG žMF$i¾Žvßíˆë³“FüÌþà I�Ø?;; GùÁ`}†sC±XŒqá{ì-¯®®"‚½ÓéÄ{ )i”J*ßañMÉm¿#I‚Hš/ÔÈïßö�ÙìÚãqooOÓé4"}0Êù|>àîõ…× áx<ïÒõz]ÝnW{{{Êd®‹­...ªV«i4©Z­ªÓéheeEõz=ÒßU«UiqqQ'''Êår* ªT*ÊçóáéÁ!¼ÙlªÓéhwwWÕjUkkkѾ“Ïçµ½½©çNNNôòåK=|øð9îuã›rß|úÆé¶±H%•TRI%•TRù¾ÈÙÙ™ …B ·ÕÐ4`o г°° V«¥•• …ΛͦªÕªÞyç={ö,jV©(1 "²tÉÿúõëHõvzz:V99´°p�Òx0(“Éh}}=À‚óóó8Œã¡ ˆážµ¤ ñ®…$@À ž÷„ ]¹\.<¬OÆãñœ¸§s²g_•J%µçÏŸGªi÷°­T*Ñ6OÓR(æúøéÓ§:>>žK]´¼¼¬íímåóy†³QýîÝ;�µ¼¼Ñ6\rþpÀ@2FºÊnHÍR.—#J ¯pÎ-�G}ÅbQÍfS———‡‘6›3E³Ù € ž¾âL@Ä„Q>Ÿ°É=˜„ë^¯§ñx¬×¯_kccC+++jµZÚÛÛS¥RÑÇõþûïÇ«Z­j0Ä\ñúSÃá07¢–èKÈ·ñxi{nóHwÒ7IZ8™(ù»‹âDr ãæ5/Pö¢ïô?c™lwÒùàPš/ϳ¹G2‚ ð�>s²ÌI0®ñ~H¾7âíOô·gAW�è4ôèì’“DS:ê@¯§j‚¸s°³X,€ qê„“˜>î�§I¢€ÿ]Ÿ˜×<Ÿè'_½ŸøÙÓCaG¨!dz™£[D `7!‚� ÃÞ8¡ç¤‰ƒÐ®Ø7X£¸†Ô‡p´Å# è}Ì/@uO}&iôöë“)¬<ÊÆ£)\?i³ë)’ÆÔ×>‘!é“:B[ kX{}žÜöœ²;Nz.úËI@R[R3�½QŒµGVy䑯÷Ù†^9ÑÆœä¾žŠMR�;Iç'Ç�Ñhkk5Ʊ×�uN³ö3†Nró^ì)|ß…ÍXZZŠhÆ“÷ E¨ëˆÿŒ^8iÁ8xôúâ6‹gp÷æ~ü�¾÷wq§„¤¾$핯OØ4H"æâÒÒRì�xÎd2‰ô³Ì=ö³dUòù˾Ë玧œL&as("];�£...j4ž®ÓéÌ¥žs§ÖrôÔ (l*ûÒ4Ò(•Tþ‰ot“¤Ïßç»þÿo»†uggG¯_¿ÖÑÑ‘²Ù¬vvv"òˆEÞSøB„‡ÞZä *•J:<<Ôââ¢þL&u„ï¹ßòò²Þ{ï=íîîêääD§§§ÊårZ__×ññ± …‚¶··õúõkÕj5Õj5Eä{L€7�NÀƒ@�:0ž ‚'ªn·iBÊå²jµZD†@bM§S=~üX�?ÖóçÏõòåKe³YýÎïüŽ>üðCíïïë?þÇÿ¨³³3=yòD?üáõêÕ+íîî¨IÍI…? "E }<�b/ `�5�N(¬Õj*•J‘ÖŠ>~õê•æ/À*Õ¼æ�-€¼ù|> G�©P(¨ßï«Õj©^¯«X,êôô4Æ=é HB}#®l¤†Øâ⢶¶¶´¸¸¨ýý}õz=U*ýô§?ÕÁÁA¤Å^]]�ö“Û2½£– éa $!î¼f`Q6› rh:�j2™„î]]]éíÛ·ÊçóªV«:99™KUxtt¤~¿¯»wïêêê*ê%’v:e³YmooëÃ?œ«kã1cÁMR�–�˜ò·ååeÕjµ8Ãq>âÿlö:"Šw…l`ŽŸŸŸƒpBïÎÎÎbL9o9ÙA H�"CoIó9E¿: ¸O4¤„×`’nÒ,¹-`®ºg½ƒž€ìNjym'ˆxý»{$ ÷ÀH÷¿Óîã©“¼“Þ÷Nâe2™ˆ*$r{Ë}�tqr‚><;;‹±Äñð“çCBiéà9¥GýÐãÀ*Î�æ¼+X€;Ïœb€è`\°¹Øwxf,Y§°�ž‚û*)œ< ; aãD ë÷¡¯§Ó©ºÝnàZ“É$"¢èì[¿ßçŸëýv~~{#O»ç‘YÌWæšG²¿â]øŒ>t2‡èUöÉMÄXýA;yé†ôq]q]Àæ¡§Ãá0Æ‘þä^N  …ˆØ+Ķy­)w2ï7Öé”4J%•D’$%¾�œø»H‹¿‹8bó´´´¤'OžDª76=\ã)ئÓilŽ$“�g EÝØp,..Æ¡¼Ñh¨ßïk}}=6^x‚æóyµÛí`Ôg³™=zÆ~6»özÌd2Z[[ O6™›››ªV«zýúux‘²á"w1‹é*†Ã¡¶··ccÌæÈ $ÿÙ #þ–$õþ¡$_*©¤’J*©¤’Ê?I‚Ò„¼’ž®€NÎ>Á€Å™LFwïÞÕû￯Ï>ûL¯^½ÒÕÕ•¶¶¶"q½^×Ë—/# €"¤ 5]ŠÅbä{Ïårá-íÞÙTp8w¯yö‘ÚwvvôÑGéòòRÏž= °ó?ø�>úè#M&�œœhqqQ�=ÒÏ~ö3}ýõ×úã?þc]]]éÁƒúÙÏ~¦ÿóþ�:�Ž&“‰>|¨ÕÕU ‡Cõz=M§S•Ëemmmi:½N!í^Ä â�ëÞÌìskµZ¤o€fÿëÞô2;@Ëý= dÚòòrÔ* hvofO_pR¯×U©Tâ\‘ÍfÕh4tçÎííí©Õj©X,êáÇZYYѧŸ~ªÁ` f³©O>ùDŸþ¹Úí¶†Ã¡�†îÞ½«áp¨ÿù?ÿgœI=z¤7oÞèõë×’n<›<‰ô@Gptƒ¨Íf³A”T*M§SµZ-u»Ý D���Õï÷ãŒâ`P¿ß×p8ŒÈ¥Ñh‘L÷îÝÓƒxót`´=I"f:🌜áY³Ù,j‚-,\×j€p tuÒýã¬è Øùù¹úý~€Žè }uzzN~ôœÇ†Ã¡NOOð¢Í¤Ä¢¯/..æÒüaG¯3�$HÎk¿O²íÔ®ßîA?y:GˆŽ««ëôrNè1Ǽ¯}]v™wð¨1�ÎÁN±?`/à)èH à ÎçÞVÈ?X—ø;ï@%mç{¬�Ø lYo2™LD§ø‰Èf³s‘œŽ£�Çã¸GrΡ7£Ñ(Ö€ÛÒùù¢ö :Äsœ4p�r‚”>F_ÜF%ß 2”ˆ8k`+Xc¸��XaÒ~øÏ~O_çN+艷 »”´ëý~?úÇ£Š‡Ãaìép†pg¾Ãüg�Ŧ‹Åx>Ñ͘^÷�ùË3X»Ðcß—y”¬÷‡ÛO×[ú’v@’JâŒ1âZ×7_»¤”4J%•ï´¸Ñv§¤Üö÷oû›/<#ÍÆáþýû*•JzóæM·�� IŠÔ ½^OƒÁ@�F# 6Ül6«ýýýsÅ«£Ùlê믿/ÃL&õ‰ðp‡qp*•Jj6›sžŒ½F£�¾¹å™<Ðþþ¾Þ¾}«���X Ù°\^^ªR©èÙ³g* ºsçN,*Ò{[?bÐý3?°y?§’J*©¤’J*©|ŸïH6€>Èr¥›Ã¯{¢:0Âþ—{T«Uݽ{W›››zùòåœ×%`N±XŒh ¢'ƒ�ªÕªÚí¶...ôøñc={öL———Z__�HöÓé4È€È,À¿B¡ étª{÷îé_ÿë­½½=�F#½xñBµZMï¼óŽ>üðCýå_þeãž·Ð`}}]<Ðîî®~ó›ß¨×ëé÷~ï÷ôÓŸþTý~_/^¼P·ÛÕÖÖ–þàþ@þç®ýý}-..ª^¯«Z­jaaAÕj5ÞÁÓ.âœÅ>wqqQ�?ÖÚÚšNNNÔét¢/HyÂ9Á�pî?›ÍÂÑŒH!jI±Ïï÷û¨ˆ ƒÈpqq¡ápŽ`èÑÚÚšžÐO~òýÉŸü‰þìÏþLårY<�qeeE�FCÛÛÛAÒAÂ|øá‡º¼¼Ôÿïÿ]çççºÿ¾þý¿ÿ÷úùÏ®?ù“?Ñéé©NOO•Í^×fÅÑìüü<�••• Ÿì#ЍÝnGõ§HHjb•J%u:M§S5›M•Ëe�œœèüü\;;;‘oyyY«««Z__ç9´ýÌè€?®ƒÌô3)´¨�Ä™ŽtÑGŒ%ïÈõÌElßw�qÒ„tu¤ ã>è*ógð �¤ò10g×aHI�â�„$Ú‹¹à¤ mvÐ�÷�Lw‡°y'ÆR ²Å‰'.ÑWO¹ç¿ƒôì5x¯Ñhµ_p\žN§A’yŽ;I8ÅûBª2¦è˜G›ùó3¶Ç×OÖ('m=m$âÄ#ë2û‡r¹ý“Œ†¤ŸÐ]œKèפN; D¿Cy*½d„RÒñ$ÙÞß±4¶›ÌOî�3ÀÙÙÙ\tŸãÎÆ?GÇ …‚ªÕj¬9´›6¡SN ]�Ô}·ßØúÀÿÇÙ�{‘”t : =ñˆñz½ïÀ÷ÐuÖÁl6º€N³†CzJU)%�RIå{/IÒ#éâ ¥‹‹ ­¯¯kuuUÇÇÇ:>>ŽÃ]&“‰´î€±Êçó‘~ ÛíªÑhDèõåå¥J¥R¤0äÃáPõz]WWWÚÝÝU«ÕÒû￯µµµÈ�^*•bÉdž²/¼ò=z¤““}õÕWº{÷®*•ŠÎÏÏU,5™Lôüùs-..êÉ“'l`”Ý;Oúf4m÷�P*©¤’J*©¤’Ê÷]8;È,Ýä×Ç[ô6a¿Å?âìUs¹œ¶¶¶ôãÿX/_¾ÔÁÁ�ºÝnDÊhssSív[GGGzðàADíÜ»wOív[ý~?¼™¯®®4 8�lö˜¤ ã½8Ä–ær9õû}e2שõÚívì©AÀ~°`�ÿÒÒ’ŠÅ¢jµÚ\ ¼R©¤F£@Êâ⢶··õÉ'ŸèíÛ·úõ¯­áp¨õ¯þ•Ö××õ§ú§zýúµ†Ã¡ŠÅb¤k6›ä�~lmmMÅb1À çÏŸëõë×êt:^´H7ä‚IrbR.U*Íf3u:]^^FdŽ“R€cçççzþü¹F£‘Þ¼y)^Hû²½½¿7�ˆb’÷*—Ë‘ºn4i6»N¿·ºº`Ìl6‹È1<‚ñÌ…dL’¤ )bD‰R£­€øgggªV«:??W·ÛÕ`0ÐÆÆ†2™ŒZ­ÖØÛëõT*•T¯×#‚¯æ“““¨ûèÑ£ˆ0£Æ¤Qè)ãâѵÀ?~/ 1Ç›ˆN’æëN¹×?ß�Ä¡� �Fj·Û:99‘t=ÆÜ£¶}é‘´™z$€d¼·GâÐ.J¹¯“$€ûZó<'Zdwg¤ó% fÒf9yBû83zô A<“±r¢Æ#�2™LØI:A›}쓎ŽN’xf‘Á`Ä(íÀ0W!ê=üÀI€tO Š~91æcà‹èøDr�‘$3cL´ ߡϒÑ´üÃïÉ}’i·˜/NÐClùïIRÞ�±wÂÉ3ªxš* oÛh4Šuˆë<…+€ðp8üF:.'y:št€e|%Å<Ãn`3ù®¤<�¶ð<'ݰNB3ÿÙÝ¡Ä#‚|b‡}ÍÆæð¼Ñhv�5ˆu�÷('ó|�ò}‰ø®ƒü�þgýtBÕm ë€G›ù˜º>9àïYn³¼Ÿ\}½&�×C<’®”>OFl¹Þú{1^è:mv›Hdßñ¨núÄÉL'ôy&û'"²ÐO¯UæiMÙùÚàv'¹Ïtr|“~G7°Õîœá¨¼Cr­ô�>>NìÉúØç.ºMÆ¥~¿Î>¤ÆAŸ5´\.k<ϵ II£TRù‹³ñþsòšßö»‹Åäß "ÆjkkKkkkòØjµÔétT­VÕh4ÔívãÐC÷v»­B¡ f³!’¤¨Èf³ÚÜÜÔ«W¯"ª(“ɨ×ëi_ûûûz÷Ýwµ±±¡ååe•J%�žžª\.‡‘ÅS•Ã!�ñ8 t2™huuU+++:>>ŽMÞ«W¯4 T¯×õÁDN[‡ß>ïFŸƒ—”>£ßïÇßð mµZzùòeJU� ô Q‡‡‡á}IT,µ½½­­­­*•ŠVWW•Ïç5�ôòåK-//«ÙlªÕjEÔ†×[qÀÌA=ï/ÚC´O©T gii)<Ö»›L&zöì™^¿~Q\»»»1~8¡���©ÛíÎ¥;8t0Ò�3Ú ¸ IûÝ+7éiŒî3™L"- g OYX¯×Õï÷uzzª|>¯r¹Å´9áy\­VU,uttQ7De]]]©V«éÑ£GÚÜÜœ›#IÒÃA[�8˜No²Að.~vá3¯Wpêi¤ˆÈsGC4tÆç5ïH¿à9_.—ƒ(™Noê(R2V€Œ…B!œÿ°-î]Í} `xG€^þ†g¶ÛOŸièß¼—Ï}Iß°SNºqFäüè‘>´�¾ð9F?3v´PtaáºÞ¯{Ûc?n#òlEWüœï@*º qÃß=]ÑW�ô7@2öP˜ˆLæ@©·Ñ#9x6cågnæ)ý†þA´R«²Þ#›°»N%#¼ç;Ì%Úé$5âb²Ÿ™c® \ç$YÒ1õòòº3sð˜(�ØMÖÍr2Ýóþâ¹^Ç÷ñyëä­“ Ü߉'µÐ}¯Säõªœ\ÂF{´K’ÔæÞN£_N–zfßw$£’|~»-Å–;áÎÚâÄ'ª–{bƒ!aé;wŽ  è…“‘þ;NÐ8™ø\e]§�KŽŸ·-©›®‹ô%Ï`¾Òê3w½ïi‹ÛHÞ‘~E?�4Jê”G�:‰éX¥·™h"_ß!Ý.cwøœg@¾zÝJú…¶^]]G¬³wôµ‰º‹ÌQöH�IÌMö™Øct�('œ3H¹‰8±Æ÷!‚ÐIO5Œ`ù.úT©TBw©�ßQ*©¤ò�•äb)é‹'sƒšÜ|$¿�÷gð}÷BÃ0/..jmmMëëë�F‘*¡Óé[¿±±Œ~·ÛÕÙÙ™šÍfDõPxíôô4Fl‹Å¢Z­VÌ}ðà�z½^,Þõz=6H¹\NµZ-ÊÉËÎ�m8†‡)þöoÿV™LFúÝßý]­®®ÆÆÌ7,·¾ IóCR8¸$Ç •TRI%•TRIåû ¹ážÜ’äp 4 8àâ2›Í4�µ²²¢µµ5}øá‡ÚÝÝÕ_|¡;wîhF�éb±ÀÛòò²ºÝ®J¥’$iooO;;;ZYYÑÉɉ�F¢Ãá0Àéáp{MöŠ€`<�TZív[ÿûÿo�ÇcµZ­hËË—/5�trrûGGGúÍo~£7oÞ ¼»»«¿ø‹¿Ð矮ÓÓSM§S}õÕWê÷ûáñ=›ÍôâÅ ý—ÿò_ôõ×_`þŸÿóލ(‚|>¯Éd¢\.§íímåóùˆbÀè÷ûšL&:::Òd2Ñ�;wt|||kÍ@G'{È:à5™èS¾ÒëõP€¦¯NNN"sA½^×ßüÍßèóÏ?ׂúý¾...´»»«\.§½½½9�‰TgDQ;b4©×ëÍA+ìë•’:p`ì‘H€<+++ Õjµtuu¥r¹¬jµª·oßj4iccC+++qV"u7uŽªÕªf³™tÿþ}Õëuh8*ŸÏkuuU;;;ª×ëA8ðvyyÑ[C‰ÀrÎ óë�T™N§s¤ ^ùDQÎ ‡Ã ‡�bLa7¼¶€í$ ô4“�Nl~®1¾ÌtÐ×½î½& müôH#�XÁ†L§×5yœÌàY´í6r…wdþ98í1×ù8‰°I‰’qâŠwtPÐ’”Z< rÝ ÈpÇü3'h¹’Œ”ò¨PïóÑh47nþ9ýã è–Ïq'Èëb±©ÌH¥É÷Ïé/OEÅß�pð±bnòŽŒïC6ÆÙû d6›….‹Å9 »ËÚA»9±îöžùÃ{Ñ~ŸW8ÛÒ~�Þb�w¢ N4ÐtÞ÷>6ŽOåóù !¨Sˆ“2¶}†ðrGRçb%…3‹ÛôÆÓ>ºžº®úÜ¡�æ‹GÚyÔ$óœš$±B-9'¥7'<ÂÓûÙ QŸ{>˜Ï¬iE†�fÍæ}ü×ß$Iæ$“¤9½ ¦P(„-÷5Àǃ¾aß@[“kýGšâR©47ŸG£Qà†£Ñ(ö/nWpˆŸN§IìDìl6‹õl6,^�Éíª¯«I>ƾæ!M_¹Ž¡·¬ÿ¬ÑD#“˜ýŸGƒ“î’èh—”4J%•︰Iro°Û 'ŒüoNtø"Œ¸g‹ÓéÚð•J%‹EíììÄÆe4…�£H-L;ù¨/.® ¸~ CΦ¶¾Ñh¨Ýn«×ë…�Ä+`aa!ò~cð/®T*Ñær¹‹öp8T«ÕÒl6Ó£G�´½½­µµµð¦K.¢¾(ß6þ™of|áôÿSI%•TRI%•T¾�Ↄ_]’æö¡I¯p馆tSSãÎ�;z÷Ýwµ··§V«¥B¡ ��½yóF•JEwïÞÕîîn¤iÛßß×ææ¦ªÕj¤ò ¦&{ZöÄü『g(à måðÝl6u~~®ÝÝÝØK’&d<ÇóØSv:]\\¨Ýn¨Ñétô«_ýj.ÒæÅ‹zùòåpº»»«gÏž…÷6°ôïE­¥åå娧Ã~ß½è0*•Šêõºö÷÷ÕétÔívU,cŸÐ º²²¢ñx¬~¿¯~¿}\.—@ø‡pÃË!J€sÈÊÊŠòù¼ŽŽŽ”ÍfÕh4´ººª³³3ýÕ_ý•þßÿûµÛmýå_þ¥J¥’ …‚ŠÅbHî‘].—U(æj¢¢‡€:ìœA¼.ŸÿöÎt7²ä8ÛQÅ­vV‘ìfwÏL�¤±G¶I€þú|¾5_‡ù $Ëð"�ä‘fë•[íU$kù~Oò9Ù‡#}?{ú@�¬:K.‘‘™ïIÊA¢\8a½^ÇÅÅEŠ*âù{{{qttóù<�¹µ»{¶ÑÓ§O“NDD‚ÈÆpttOŸ>Múpj ±X¤(ˆ:®‰¸'< ÞÛ0þ"îÓéhÆ£Þщ~&:€ÇùcœAÆX¤�§nö çL Æiî, ‰€èó>Ø—¢ûö>'ý©Œ ;r/}{¢ÔËöõz]H[åöóߌE“%¼+"Òx�Gÿ .V«U±©ù;Ðgt`>'жÛmk6‰ª 2ËÄ*Ï218Z!’‹Éƒôš�F*¿SdDwªOú  ˜6�ŒlE·Ñ];ÒšXvEãl#à¼Ë‚Òæ>wÆØ�ûÎý†¬1ô•{­ß€Ï‹Å"9A˜„@Wmû|.U³Ù,D,@’ÑÖ% uà^ÊOßyLò9v$o[~ ìåM 8ú �öFoq–ÀÁÁi ±YÌÔÁD°õØãƺnç…ÝÝÝdGÐ/";æóy!õ­�‘™ÁÇÛ“D&Ùò6ãÿ¼_LÜÚ>{]@_ ËÌØÛW;’Øö`?è+HGê€íD¸ÎXœq6ú¡V«¥¹ç�v»�"UYDZ†ÀŽš¨4öG»zMä÷Ó6”ÓëTH'ÏUÔ“º2&¯¯¯c:�¦±V«Ý÷Ñëõ gK±¦4Yêôu~>ãˆ÷9×l6©ëÔ›8¹Ó�–Š4ª¤’€ä”Ïü}~½'�|"ñ3ì=‡¡ÇÓ’ Àb†Ÿ…ž-L@lXÙ “–OIBéÝëõ:yÔ8 ÷<†¢ �Ìûûûquu¯_¿NƵÑhħŸ~Ïž=Kïd¢g±…zz¢ÊÅ. ­²¾¨¤’J*©¤’J*ùÐÄžÔÎOÏz PÖÑ6X“ò,žc/ÙÁ`ÏŸ?�“““øî»ïboo/NOOã믿Nd¯Ûؼ“¢�Í{§ÓIéìšÍfÁ«Ú€¡ÁÝZí>}UD¤’'eÒd2‰o¿ý6¥of= Cz‘Z­çççñâÅ‹˜Íf‰”¹ººJdE£Ñˆ›››¸¸¸ˆz½�N'vvîSA‚@òÞÄXD´gÏžÅååeŒF£Ây%öŠÅ À�õ/@öááaôûýä¤Å{y^Þ çIiFzÒÛ]^^FD$ÏÚù|¿úÕ¯PØl6ãüü<þùŸÿ9EƬV«‡iobPÈ’Ѭ�ŽÚ±‡6¤"û�Á`;;;qvv–ĈHiÿúý~ºvoïî,«áp———ñèÑ£Øn·qyyËå2¥üÉO~RB!WhS÷�Á¿2‡8ƒ |–GµÐ·è>º a0ŸÏ¸¸X,DŠG÷g½^O‘AUC›:ò$÷–7P�}0�‘_ ¨jRƒqbpÙ¶Ç„™‰ H]_®§=û}mîpÈg­V+�“U`ŽB Ê.'jl³ À¢ÛDúñ·ËoxŸfû̘àÞoGÇÖGtÐØ×Ò~ô™£Um³ �L¬”‘F«Dp˜‰KÎÍ‚�A'�JÓ;âv*êsý¢ô«u¬L=G¤¨‰G a ü>ÃÆ›áývîÀÖÒF�]ôUŽ-Y¿Ð"�èGŸc*'òz—‘³eã*�(Âæ¢»¤WÃþPì znós"—ú±±ŽÑŽyD*s c‹ù†ºÓon?“»Ö3Ú â€ù ' =]'ë¨ÇHÄ}Ä×CXøîcl@€¢�”�1eòË}–÷ßl6K¶ÙxùÁä;ÇXpT$;mcݲͱ³·Ï‡â}&‰¶ÛmZÐF®«Ï=CÏMjòLÛ‘áp‹Å"¦ÓiŠâÞÕj³Ù,Ùú‡µ™#øÐ÷V«•t™±—·9kmž™ÛšŠ4ª¤’÷Xr¢#_æ=��†ÂÓ IDATßó}D‘Ÿã qÄ}\&f§ @˜øyŽ= ØìííÅãÇ�ÓwÓé4.//ãèè(f³YDÜôÆÄbf4¥0З/_Æ`0HÞZ“É$æóyt:�X,É{†‰µ^¯G¯×‹~¿ý~?>ùä“8<}´c)'­ dš|ãZ“Yy›9*;|ss“tB…ò2>!>qx5!ºÝÞ9›b›c|ÜÞÞ&{�“ž�ed.m¾\.c±XH(·§É þžú™„¥Ï1H;™är{óGÕPÏV«•"P!«!DŒ#1™“GRF;48˶Ýà�\—¯<¾s»c²ƒ6 ½Ù}Þ Ž ù¸£Mø;'GHaÆ5�Z&¶ÑÿÍu99d’›vu™lOLÂîíí%½ÊÉ&��œˆÇ¦8ò-×tÕes{äN e˜ÇÿÛÃ`|G;¹ýic_¢O­_ÔϑմƒõÅ)öÛ÷ç#²vqHlmúŒû‰öå9Ç�bWWWquuÓé4Z­V4›Íh·ÛÉÙ„hYc²&qÝØhˆ3lº‰7GìzÍh©H£J*ùHNþäÞ6†ü6»�“F¾c�qbÊó”Z0ž9ûo/5N»»»icïÅÑ«W¯â믿Ž7oÞÄÇ'''Ñh4b2™¤wL&“ (0ûé§Ÿ¦\â§§§ióÅ$Ʀ¯¢N§SÈQŠ÷¦ (mä wî¹Ád”·=mVI%•TRI%•Tò!Êz½Nl<Ù �DÄ;NK·í¹�;ï°Æ”�8::Šår¯^½ŠG�Åååe¼yó&ž={–<;Ÿ>}çççéLÀêÉd’<€Y#B ðnˆ@ Îé\¯×É j:�Æf³‰ápív;ŽŽŽ¢V«Ål6K)¦$"î×”säö·75)šˆJÐ70¾Z­¢ÓéD­V‹áp˜¼cñ\ýÍo~ÿ÷ÿÝn7ºÝnDDJƽë Ïž=KëêÕj‡‡‡Q«Ý¥‡�DZÝnÓÙC¤»½½�ýýý899INd)U Ót:MåÄùŠômN¿bonõè@ìÞÞ^Æ£G�b:�Æd2‰ˆˆ?ýéO鼜ßþö·ñÅ_Ä`0HàÚ_|ÿôOÿ”¢�hWÖùDÍ4� Q«Õb<'À OõñxœÎ¨×ëé�nÎî!½6{ t°×ëÅp8ŒÛÛÛäq<�Óþ§ÝnG¯×‹£££t킞”3¾9ÀXBO ²Q&îCÇI½cð�=cבV|ïLö ÷áîôgDÎ;(¦ŽØ³öðÎiÎ¥@/ìeΞՎŒõÛÛÛDãÑm] øÛÀkÄ=ÑAyùŒ÷cÝo€’& ¸~µZˆ2ÒíîÞ¥5„Ä�ðò9öD§<¢/iSG%Ð.èvº×ë½C¦Ôëõt. ídOv#Sàô3ö…ç@V #&Žè[úÇi°Ðuë„£ *ø¡ f³YªíÉYxÔ`˜³]Iå4¢OicúXtÍdb½ÈõÔö�g2ž æ÷a¾ÚÙÙI©6±1Æ:£ô öñ¸±xBßLTæX óåu´$�Éf§ ¥Ì&TY_`_ì�àq)Aû0.ÀªècœhÛTƧ×%&X!ÛxŸíËv»Mó*÷xŒÒnØ>ˆƒ<*‘:¡kØitæææ&EÑæD“ x×Ŷ»Ý¦¹Á$6Qš¬r»l²“ÏIÁJÑi�?ž‰Ó‚I;¢¡UIYÅF[Ðvv·žÐ—v É vì³Ëc¢Rˆ9¸ßïÚ\‘u>Õ1ŸÏc2™ÄÕÕU:Šg�^¯÷ÎqØ)<�;|»Ý&»äy)'ŠlWrâ¨"�*©ä=9a„س#ÿ¼lñêÏr¯/z¼8÷äÁ½žL<ù–•�òÛ« ^¯ÇgŸ}———ñí·ßÆgŸ}}ôQÔjwa–§§§éã/^r\³Ñ'?9‹BSI‰çz²yàÀYêdÍÿG¼›6Áý@ý¸ÎÄZEURI%•TRI%ª°ÑÎAl§‹3PjpÖk,¯§Ê¼Û¶wvvâÑ£GñêÕ«8;;‹O?ý4�‹¬ß(ÒÃø°¶œÍf…s" æ:e ŽL‡‡‡±Ùlb2™Äx<.sÔËà›³Æe QÁš  €•ˆ¢mr€ÞÉv»�óóóxûöm ƒèv»)]3äÊp8L©¡§Ói!ª àÀÚç–ØS³Ù¤uø`0ˆN§w`ÌÑÑQ²¡«Žü ½ˆ^ÄÖ___§èˆ(ì$ÎÜq—Ùe¹\F½^Oýe‚’ñd�23‡8ZÁºË\o›AC2@þ8ÂÔ„“uÀ˜óýéH7Ê´Z­@��5Aʘò|?›Í å7¡q´³³“¶Õj•¢FÜǬ+¨—Y˜7° Œ9lýı Ø Ï{y4¢£H°Ñ”Çd•çM¯C<¯ñÛd¡�y°3(è¥I(ÄX!2žƒË°L× Ý¡¿hƒŒ7Ú‘ÁkMÊæç±¾c�G¹iÛœP¶óƒÏ?t”`«ÕŠ£££d·×ëur¦Y,Ñjµ¢×ëÅááaDD:Rƒ#ô]ÀŽíííE¯×+ØS¬&\ÑÆ®çOtÚ82mFä’¥"�*©ä=EO¢¹Á·áµä›ÕœUö„³§jó‚Ü×”I.Ã÷‘2^àã¥Øï÷ ¡—LÜ,$¼9d£é{6yöì@¼@b"€ûðG&œ?Güx¤ •TRI%•TRI%ºäé~kµw£ žÚÑÉÞï¬årÏ݈{@ €çææ&�B)¢eww7†Ãa�ñò4k6›)êàÓg_R/^NÝÂýÅ('›t@ ;%Ùûšg.‹ôŒëëë¹G&Ϫ[š˜!>X?ÇóçÏãÓO?�ív¿ÿýïãíÛ·)ʪÝnÒˆíìì$"‡µ9@e5HLÏçó”I ÝnÇjµŠétšfþüy|üñÇÉËúåË—ï€ÜÔÝD@l¾‡Á[œ6 ê ½ˆ¸Ëûßï÷c>Ÿ§gpv€ªçØ·PÊÞn·Ó>„öÜ�DZ\.£×ë%°i³¹KEW«ÕR1tb6›ÅG}ý~?þô§?Åõõuôz½ÁµÙlRê?Æ`3õrêpÚ+âÝì ¹×¹£†·Ç•!7Ù«Ðs­÷œè»÷œî;À+t²ÂŽyè/ÏdÌs¿=¨y†^G Ð_ö4·½Aü?:í4iÖ÷ÜÉÐuÌÉ#ê•;S‰4)HDmoÅYÒýï}6ãÓçaÑÔ R»—§E2!F›|CÔ8ãºiá¶u;ä ¨=ûmÛLÓ.‹Å¢5j=pTä—ɽ<5½Çsu5ÞÁ°Ž—ýïñd°ÚígÝ1Ðnƒz½žHøÉd’æ+ô²„h>Ú¢…4\Œ#pî§Œ&dùU¯×xžÛa¢Û yfœÅÏ.Ã’L°1|f´3ÕXpÚ`®ä¬5p#H4ˆAÞMû/‹-I[.‹dC èóõz�Èoì'e7 A]ù=�R:ù$:�N¼~ý:"îÀìN§ÇÇDZX,â÷¿ÿ}üñ�LÞøÏž=K„Ñÿ÷ǯýëøýï777ñ�ÿø�ñÿð1ŸÏãw¿û]4�”)ÀÞ÷›Í&F£Qt»ÝHð¤þ€eùÜÎì9šÍf×ëu<~ü¸p&ý i0¸˜ï;&“I4›Í8<<ŒétoÞ¼‰ÛÛÛøÑ�~”ÎKìâŒ×çÏŸÇf³‰/^$]½½½�‹‹‹h6›Ñï÷S¿³çpʤü4X„N¡3�~´ºiowƨ³L@è8êR€³ÙlÆx<ŽÑh³Ùì�ú)/€¶ëÄó C’m6›DLÙqР*À·Éèˆ{’—|@ÀáM©.¤š¤½µ1Óétb6›¥ç²_6Ù 8¡lâ+'\±'wÄ~ØCÚàßÑ7Ì´­uÄzÊ~ÙûáÍf“Ò-¡SÝn·¥I_É´»»�N'Õ›ÔKÏ&h_ì$ö/�t¡ß¸,`gg'E7ìe/oP›ñM”èx<~'âŽvçþëëëÔÞè½é~¿ŸNOOÓ»±ù”PºÝn<ÿio+>sD õ°�‚äÙâhŒ‰Éd’0 ã!Œ/°ÎzbœQnH|l6›ùÌéü9O‹ùi>Ÿ'’‘Ô\¼‹ùŒr�!ƸIŽë0>¨3ãÛQ¶ØÆõblò®Ñh£Ñ(98Š=£NDRi²»»›¾w䣉6Û0Æ£‰,¢\‰új4ÑívSÿ`¿Ð郃ƒôŠ¿þë¿Nd÷:õ ±�F#D¬ËÏÎÎb2™¤nŸ~úi ƒ888ˆv»�Ò'½zõ*nooãË/¿Œáp�=JõÛlîR÷½xñ"þô§?ED$ðlµZųgÏâéÓ§quu•Rq°³£ýÁz?�\ð¾Á×¹]Ac'9Ëù¾ ÂÅ777qyyÇÇÇÑjµâåË—1›ÍRŠ3<ßÓÙ)€ÈÃá0&“I<{ö,"Z­–Î�¢Nf&†\€î\ ˆq ŸÛk™gts»{ÓV›Í]JC@YtP6÷zF¯¼‡³W9ך¸Ë#�šÍf�ˆ5€or$¢x¹½ïáâtEx¾CÖøtµG¼ÛÏå·s¤ÓbÒöy¹-î7ë&v¯^¯ˆô;b»™� ‹ù^š¶±Ã*vÉ)éWÚÃýÃ�õ„þæ~Q;­ÒW¤é"²È´§õ‚±ŽÞbk¹'Uiêc°�v"�$åhwDd}�]ÉõË‘Z“'ÆT°ûŽ~ =!ILîïï§s§ ¥À<­ƒ-„ ÁÖþ»iË›››”RËe‹ˆä´P¯×c:�&¢ ›÷BŒCSg“´eñz}wûFD!"”ˆ*ú‹6X.—1�€™Lx>àý­V+­ •ò¹6ïGù”�†%e Ä½íº hÏ?&ÑQÄec×s[ÞÖÆø°s¼Òh2™¤”~®ØmË: ÒˆuÍt:Mc'îa\1�Ú>›t?RgW‹ŒßC»qìºåi+=Ÿñ~ÚÍiBëõzJµ{pp———Éýââ"f´÷r¹Œ‹‹‹Ây~Ýn7õùõõut:�èõzi¼@ˆ™è§|ùœéh4¯sr 7·5eú[‘F•Tò‹Îùbï¡ë‘2Ò(ßð"6¶~/ûóü}•çû>ÏuüÍõ^@{Ñ€q´×�ëë:äd÷;´6ooZL åäŸù}–Š0ª¤’J*©¤’J>TÜ4�’ƒ”^׿k³œœñz8�¶p’ˆH ëE}ÛíÝ¡ËÍf3z½^t:�BtÀf³‰·o߯|>OgÝ�Ö¬ ÌåóÃÃÃxôèQŠ‚¢ñ>/‹. ò�öóÚ<'μ?0©¨ —;�åä ^ÛÚ>Od½^ÇÅÅEìííE«ÕJÑLDg¼~ý:nnn¢Óé¤TH›Í&¥±#m�ÓD6pdÒ2wrc¯D¹ùÌzŠ.r� N÷â <Ÿ!m'“IÒEöhŒ+ÚͰ‰~ âò¬Z­–¼æ!vü,“\+¶€oÔÍ:‘…?S…E»yOèq Á0mo}GØöQ>ïÛËÊ„�à>@IÆY¸Ûf¤wÝN¼bëì îGŸÿÅ7À͘ã�ŒažG»‘²Ëº�0Þ(³£°LZ/l}©£ApƉ=ô!j‰fñ™J€Ý¼“¹‚Ïy/6•º2~MþЯ¶_ÖMƘõçW¢Xjµ;¢™¨/ë5u'Í–É_@t÷‘Ç}åw�á´ŸÖR'º�iCt4'�Ü&ãmõ)Âó™g ½Ð" ±_&^kµZ*#ä–í”uÑ$ u`|c“½vðfÂg®6“{!MÞâàþ²³Ï£ïYØ©€62iy}}Ãá0¥Ô³¡mkµZr€ðg´w1ͻѕf³Y˜Û¹ä”£^/™øwŸó½I¯Ç°—Ëå2&“IêoÛÚÎúq·Î˜Ífqxx�?NQ‡Óé4õ‡#è;�N:3�硈ÃÈîînŠÖ%Z›>púP?×cÆ6š6eÎ6éK»x<ûyI¯£’J*yoÅÆÎ‹Ù|²Eüw>™ù{Œ´?óµùÂÙ×—½«ìYeL·Ÿ�׆�ð_O\,hìm‘oú0Æù†>'Èò W^?{g°Ø.ó´ò„Ï„î�y%•TRI%•TRɇ,x×zão`¯ãÜÉ&ÿøÛ`©×�䜄hµZÑívÓº’Ô;<¯Õj¥4;xzâ¹î4U^g“JÄ^ÚÔc±X¤ór‚ÈçÜPw€óÍfív;jµZ!U ç �F£ä½k¢`�÷çëuƒõEãÙ³gqyyWWW1›Í žà&œÒ p2â ¿¾¾N‡ÅŽq¾ kbÊcO{Wöêæú§OŸ&ïî��û´94>[ÁgÌäQb¤Ÿîv»‰¼dŸ1†÷6$^òþœ6qª)öx¯w»ÝØlîRè­V«899‰V«———±^¯Ó�õxê“öp¹\ÒPÑoÃá06›M<{ö,èèe§-ñ`v¤Q¾gò¾ àˆ½Îv»Mà¤ûݺL¹ uæóyz›(01ã³fi_Æ6:7›ÍRAÜñc˜qK}ùM;²wd_™ƒš>;„}c Ý2xèv£ŸÞS4æsÊã¨JžM;ñƒíÔ“:xÌ`7ø¬Ñh$eÂ�qát�99�Éöì�¸?Ï„ õú}J:§E)¯£[ Nû7;šÈeN³”�6Eï ôšl2˜êq‚Î)TF"ònÆs—£kH…žÃà]�3ᮣIoÈ{� ÚòŸÈÙz½žæúÛ))ïÏŒ§5c|£7̱Sf9“¢Œ-ÞM?ägˆyÜøZ&ëÜ}NMNt™€³cÂÑ�ù„ïMò·Iêø�þzM’Ÿ¶^ߥ«ít:)Mm»Z­yBÚ?þ>[Œ¾q´“ûÖ$ Ÿ›b®ö8ÈTx‘eWWW‰pB˜KkµZ*3ãÎÑ«&=LDƒÙy-gäþ6‡xÞc½a¼‘qÊçb^nÒ«ú™&ùlÇËHKú9'Ãl{sܲ"�*©ä=–œÈñçùï²kÊ>Ï7è6´9éó—¾;'¡Ê®)« E&/<Ùœza ûÎ3ì©c¢ÇÞByy¼pÏI-Oš\ïM Oe„Z%•TRI%•TRɇ.¹ã¿I#c@5â݈yƒgö æöJµ—%@sN¬ÜÞÞ¦thMùKóù×QÔ?—÷QEŽ ¡�Ñë¥mvooo/nnnRÿy,Ó&ny¯užk "èÆ.2þ!.ˆÀÁVA�òLÊi[årx¯O_Xç¸Ö¤­÷åô16 bcµZ¥¨®5PF¢9²Å¶Ü¤•z;¸ÒŸàŽl<�ˆBªSÛ-ÿͳhwR£Aâ“6Œv7Y JÛ¹ïó³�r½cüÓvµZ-ÙS¢'MÄڙ䇬²­§ÿ<®±Ëù|±ëw¸}hsêi=rß@þÞs?ŽËN;†9_³ÙLó°u {ŒíôÚ†{r›¡£îeóyN–`_ý~®1¡Œ-¶ã´ 7ŸÇä6u»9uÏÃÎx q/zhçƬ×~c0'ÍM�{ •s~ŸÇiÞÖëuŠ|eŽ�ÇquuçççÑét¢Ûí¦HhÎ#òZ“ö`¼BXÒ�¬Ûöööâðð0•‹~5ÁC:>Û;‘"²ÕjôʺA}½¶C§ØÏ^G iTI%ï¹xâÏ7xü.[´–}Ÿ?){nnLÊ©²ÿóûË$/hooo“—…=óÉ&/k@ز °G‘7¬e�7Øù»Ø;4ßD“Á•TRI%•TRI%²àeïlV Šù¬†ˆâzÒk7s€S€Ë$�w¨£ˆòº ²j>ŸG»ÝN ($¬óì¡nÏÙÜÑ0!ÈBÝ êv¸>¹·(@`mYÖ^Íf3�ŒZ Bð²…|ÊÁa·9kïÜ»5¤ Ь…dPšk�Å|¸Óï÷ çúÐÏô œA6ƒ¤>ó$¢’ ‡4 IDATÅEº ÷•S�Ì5aàç”])rˆ43�F÷ÇœÕívãðð0...bgg':�N"_ð6†`Dò¸¢�XM– SÔ'?“]E û;ï·âTq;;; @ët:p–rä'ìÃòñO=�G$ £X IràÛãˆý Áaî1Q‘nbÃúíò´6f]7˜íý±½¼yŸÇž£Ð?—ûæï��\ ÀSwú °Û$úîó€m{BÓþÒ3�3À83a]tú3<ˆ�q%·›û+"PŒ¾cóùŽºÈÎo©×ë)=£ïáo"Rc¶©ôMN¢º¼óù¢V¦Ói"D±ÑDÖå蜣Î8ãÏk¯[Lðæs«í˜�oà~ú!Êšû°áŒ)ÚÃedl0æ�&ì#î"<“�'=(s ÷EÜϹv ±í2¶·^¯Sd²ÉRôÃuöø·M£¼¶]­V+ŽŽŽâðð0""ÎÏÏcµZÅx>3ÑÃY,ëõ:‘Òк,—ËBdÊ ä´S'''1ãìì,\»Z­F}#ŠkX]ùš˜çñ|žEyˆä!åSÄýy+ô«=¯á9 ãõë×ñäÉ“øùÏý~?...âÕ«WñæÍ›¸¼¼Œˆ"PgwÀƒ*D¨Ôj÷‡LCHx_@{˜Èpä€÷›Í&EÑ–<Rrgg'žúý~Z‹p¯m ý…=k4…¹Â¶Å:¾^¯SÄZN–Òמ{ù̺„`ÇqÎ8<<Œ“““¤ƒóù<®®®’]jµZ±\.Ó¼ëù�9—úPvÖ‘ô-‘X&“éGÏUe‘AØ{ÎkµZÑjµ ÎîèˆÓà¢v&€(õºÔö 2²Ñ¤]EURÉL0Ì^Xðÿ÷‘8\ûçˆÄ“¿ç×ùÿ‡H¡2òÈï1€…4o 6èñޱcrá=^TzSä�?c>QyâÏŸŸo°òwW¤Q%•TRI%•TRÉý¹"€xöN§Óä™Î¹x§FܧCÊAf�2ö¾Œ¸µ¦Óil6›øñ�÷w}ôQL&“8??�·o߯ÙÙYŒÇãBª%"à‰VpóZ’@òv»],qxëK§ƒÄ!�Ífsw~Åd2))€îü´Ûí8<ù$>ÿüóèõzññÇÇgŸ}–ƒŸÍfqyyãñ8¦ÓiL&“t`7e1 Í»·ÛmŠªÕîŒGoMhHË÷¼ò]Øl6É›Üd$å±ób±ˆˆ{OäÍf“γtÌ#(ïr¹L)¬6›MÄ ´“êÊ t¾·äZGø¨ÚãÝôØ1bÀË÷©XG»qâ= ££m)7Ϧß!8(â>£€4>Žœà`{�g“&ŽlÅÖ˜Œ£>”Ç‘%è{â{î¡¿ fœ" ‚Îùì"Ú�öà½8]ð~æZæiG;F�„÷<É\éy‡±m} ý �;j“ïi?Û) ü°Ÿ9IÁšãúúºÊGD²—³Ù,¶YÌÛôzA 1"^éCãD�¥»»»i­CSNêIàˆR#Ô"Ïvi½^Çl6‹ñxœ¥ƒƒƒ …gæÎè‰ç@Êçñnr;ƒ>¡ãÍf3Úív4›ÍBÔÏ¡ù� Wë<º@›"<‹þÅ6ÙуhsÆb·Û�£££D*ÉKÙHŒ£„õ›>n·Û…vÀþÓ&\G=!´lpðX,±Ýnc>ŸÇz½.Ì�&p±ÁÔ»ì±ÈoþF·aÉZ{³Ù$ÂÛëXKEURÉ{.&ˆò…1ò—6Üó)”KN•‘RþÌkþÆ+ÊyCÙhFÜŸDÙO`ÞèD‡°±6¨�§±aÓlPÖÄ…7ÒñäÉ“ø›¿ù›X,ñöíÛ8>>Ž�>ú(x™³™çÜ€#@ 6ð”P¡^¯'²ON@¹<·¾ö8tápd<[‰¦ª×ëqxx˜ˆ%FÝn7z½^w¦Ói¼xñ"µ§ËF£½^/†ÃaL&“”VÊ„P“FˆÁ?F]u täÏ3`Ìzýüü<†Ãat»Ýøä“OâÙ³gé~Öà­V+�4�Nc:�¦³ ˆð¹+ŽôÂÙ2pšHЏOÕãö¸¤K#’€>ç~þ§ž…I+øÛh4b0DDÄÙÙY|ñÅ1�Ríë(ï¯Ü'9ÉäT[Æ ØæŽp¼ ÓõrJ¡ˆ{àôàà Õ1"Ò¾Îeö9=>OÈg EÜ´nÂ(Úó±f@Б>�pî‡Üãßû[ÊéH+È8ôÁç„ 'ôKNœå¤©÷ ”×£3n¿Ãdi)ݾ×cœß&v T½éKúÐ@5€óÎÎ}:BhtËDí ÐKý ¨R_ÎC²G>c,'åÐ'Z®úkÛD»”Óô«m_Ä]ÊOêÃX Ì´ ¤ ýìh0Æ€í+e³½µ>Øv*»áèBìs¦ÓµÑßül6›¡h‚|ÆzÊ8÷øÂ¡�yË‘…>cÉéZÑƶ G Óß�=´sîÂ\æñÁÝl61ŸÏÓº"¥^¯Çb±H:D¦#™Ñ1tÝiÂh7Ÿ™EDÃ�ž ÐA“zô!}óH¿Š#�Ó³Bñy­VKçíЗØ[œÐ1þ9ÆÈoÚÜQ2|Çÿ^[@™@æùž›hsÛbÖ¯¼7wXÉêõûˆ<ΉDG°S8'¡¯Ž<›L&|û…ýf¼¡&ڙˣüyt,uŸN§)ŠŒu±Ó"½Ì»òùÙó;mIäíÑ…ŽÑÖùYj¹T¤Q%•¼Ç’n3îåiçÊ>ã/"ó{þÒg}YTFñ=Æ×aÛLLŒ?÷˜4ò†Éž*ö óû=y3›K\ëçû½¼#Ÿ8þÏC©+©¤’J*©¤’J>D1Ãß>SÅ^üù:‹5�7óöädd>c6›{irÆÌááaòXÇK—Ôgß}÷]œ��À§Œc�˜†9ìûY‡BHÐxñ>zô(úý~�,úä“Oâ§?ýi|üñDZX,âââ"z½^é…‘ÊÉaÙ\vww£ÝnG¯×+x�—B9�@!¤ ª ü3ИG%åëò½½½Dd�žžÆÉÉIt»Ý˜Ïç „\.—1™Lbgg'?~ÇÇÇéùx©/—˸ººŠñxçççñúõë�Ç1›Íâúúº@îAHÀÚãž¶ˆE—\'t�d_ar Õ@U§Ó‰ããã”JçÑ£GÑëõb¹\ÆþçƯýë8??�Á`P =N A.)eÒÁºçý�kGÄ9òÇgTp?‘<�¡ éWˆÒö™<x†ì$•!íèY«ÕÞ9#Ã:ãHë¬ßïñ稆œ Xc/gÒˆò2¶|…£!ÐÛ7@;�ƒý&P=¶!\oˆîOHUúÉc•ßîÞAÙ÷÷÷S$¶Ç/×ÞÞÞ¦6Àž2~ðjçý”Í{f¢SáW«Õ )®<¹ßý`ûN[ßÜÜÎr¡~Žfpj-¢¬L\ñ^tŸô_ív»©È³EQ«ÕÀo}h4Éã?')=ïå zŽ{Î1yå4’\Çg+&’Oß9ÕØ„ãm»Ý¦yÈvžy¡^¯§õL½^Omäõ äºq0GUÖjµDZíìì¢"�F"ªf³YÒßáp˜l)×iå¨T¢lè{lžÏ©£ß|Þú‡¾PoæsÞév*0©ã¹ÁvÙ¤ãĤ&Ïâ‡g»ôüÂ3¨×jµJí4�R›`»y^·ÛMmNÄvÝc•õ:Aj=ˆ¹œ Â^ºmìåñ=›Í sö‚q�S•¢¨ïõõu!¢D×ܶèíl²©H£J*yÏÅä‰?³xa–“5ùçÞ4<ô¼²ç”}^öŒüûܣ͈žL™´¸ß$È&íÜãÁ‹T{Zù³2²Ê¤×ò½?w]òÏü]Þæ•TRI%•TRI%šÌçóBû|#6ïÞð³¶ó:à#â>¥³AÇ»Àט °W9›~6ô'''ñÙgŸ%€f4Å‹/âòò2¾úê«xõêUlà™D�ª:= Sî¶Ýn£ÕjÅóçÏã£�>Šn·›Ò§@„-‹ès¯×ÌöP5ãïvkµZŠôµãmF r!ŽpÔ…×é´ À ïw*jêcìÉ“'ñôéÓô.ö£Ñ¨ú:=މ»V«•¢whGÊLª èžÁeG౎ײ�,ú�ÿI‰†'7}; aw||œ"§ôt}ýúu*Ÿ#¬¼�2°í¨ <©¨|öºÇ˜³G;ú HyPk0P˜ö#ÚÊ)p·LpPö¼LŒûëëët6 ã•qC¹ l:‚ ²Ð`5ïäù|ÁF9<Ž \ò”éû€Ïè:À É9GxDyºâH ÚÍ?”×d`¡…^Z‡°3Ž^q¿ &=h�ƒƒƒ¤KDÐÐ�›Í&¥�4™€Ý£¥QHt’�j¾´†0´-À[‚ÙnN¡�¶qØ"êoB”ç; âöö6:�N´ÛíØÛÛKQ ”‹þÀnc ü³Ù,µ-„5}’;µb7é?“¨´¹qþ/#Ñ'§³Ð—8TØ �¶cL:š çƞφ£^œµs{{“É$ÍM¤c@‡bþrÊXR‹¡§�N'ƒA¬V«¸¸¸ˆÑh”~H•èõmÊ… ]˜�HCHÄ1ó 6��XÄqÅQ'^cà”b�¤}HIF´+}ƒþ0N™¯f³Yê«ñxœH/ú‡qAÔ*éQ)C´ìxm…m0!ĽØ6îqý±1Ø(Ÿåƒø,2"ŒÑUìº�ìã¹Ò•ßív;9³àЂîv:�D åD$¶×ÑuD¼u—;$™ðÅ^˜0ò\ç¶§Þùs*Ò¨’J~@â…@Nù7çÿÿ¹Ïógøú‡®+{†ÕÞž ˜<˜HùŒ\´öR±wQDq¢aSkñ¢‹²ØƒÄ×ùs?7'�òß–‡>«ˆ¢J*©¤’J*©¤’ˆ«««ÂÑ‘Bö$ÅЇŸˆûõ]ž².âÞiÈà+ë°�”I€ýŒE{nçïpÔ×Ñ/èºç÷ó™S§Ù91" À¿�+]7�GtyGyä! å1Ð ˆˆÍšN§)R�”T&Ž]oÊ�ŠÇyž¦,"R*0žåí}žé�rÝ‚| Òç@M"4kù²{€Lýó "&»1ÙjµRŸ0ÞhgÊ‹~3FýÉ»kµ»”_xû; Ïú`מý&ð)«í+@}½^Og’QoÈXʉÎä}ÎØ(‹D¢Œœô™S«ÚžçQ‹Íf3õ2Ï  D:@z0ß-‹˜Íf©^ŽŽpš5æ ú‹yØgþ®óÎétZˆô�Úßß�N§S Î;�N"¦x6®Ùl&Ržvaž5Ï3YÅØq$"ý^¶†qú[Æ  ý³»»›Ö$Ìù¼ÇvÝ']íîînJ½f;g‚ ½&º‰²a_h[Ò�Ñ_ƒàw¶sèd>cS¼îÁ>¡GÎpÔ!�\F7!ü\ì:ž� �iÏ¥~>ýd§#ž…nÓ”ÓmÌx1™qÄÿn?Æ!uçL5BÌiŒÈ=êEbCÏ¿{ˆDúKîÍ™w& v 9ŸZëE¼鼃M>÷1Ùñ\oVì…Æ5&€ò /3јdr¹óÍN.eÄ“ß]I%•TRI%•Tò¡ÈååeœŽÈXÈ’ˆâY&$XÓy�èu}}�Î-ày÷Ë|>�·oßœ�8¦Ói\]]Å›7oâìì,¥5(d”óÚPgg'��”ƒ›^gz}iàsww7ÎÏÏãøC0‰Hé÷ûñãÿ8>ýôÓ”z f»ÝÆùùyœ��Åt:�Á`�ÖÕ}žãñ8¾ùæ›øâ‹/b>Ÿ'ïy€ÊDyËÖÀ9øn0@OæˆHï¬Z¯ïŸ7AÂ3}Hs­V‹ËËËøòË/ãìì,?~ëõ:†Ãa鮯¯ iŠè‡ù|žÀhÚ=�˜rÄýÐGô áÊœ¦0â ~úôi<}ú4Z­V¥´s“�yº¦v»�"}Ð ÊÈ~Çdh­VKQ7´Ö+%Sëõú2Ö€¨ÁßÅb‘"µìýNä…5>¼¹9£Áû²<ªËžÏ&| Öºß".‰}¡Ç• Ý&ãöJ§}!ÙL Ò¦,#î½´͹ÆûH§‰ô¹h”ŸÈ<À?HžmP@œHê8�NSº4{¢{›¼gNqä)séÙ°¡DC¡³ù¼‘§6Ä2¦!ÄL¨¢“´íl6KíÃ<Ã|baí蹿ÌI&?7/"’ͤmLçsOD$ .œW”¯Ñ{ÖŬè_žñ� ày8Løì9× »ìÔ“ôŸ�LJ#iTI%ï±äÞYH±cÃñ—|îïrÂÈ×Ûë§ìs—ÓÞ9½ÛÏèySÄ5¾>"ÞY¨rOY{°¨÷âÎ×ä^©öR`ƒhO >gq– ©¼ •TRI%•TRI%šø\§ ðæ7À ×VŽ 0Ùdòb>ŸÇp8Œ7oÞÄùùy!jf¹\ÆÿüÏÿÄëׯ£Ýn§çòŸÇ|>�étñòåËøíoÇÇÇéì<¤IçBª³Íf“<»‡Ãa¥vßßß�ããã8==�z½gggñúõëthw¯×Kõ¸¼¼Œo¿ý6ŽŽŽÒÝŽXCö4Þnï¢ ¡h7úÚàf³‰v»‡‡‡Q«ÕâË/¿Œ/^Äp8ŒÛÛÛø—ù—Øßß/DNâÀ„¤ØÌeeýÐ…°!º©^¯ÇÑÑQôûýôl<„»Ýn´ÛíxôèQD!AB@àÙëš{LzâÕŽ>šÄ0e�q€/ú”½ãÊ@ÞÛ=äHGÛšH��ˆ”"Š¿Ý¯>€œëíçý¢ëcïëÜspÒŒu]ã^“ÕÞ+:Ú œ—Ý×r]Þf¶U«Õ*‘/�Ô×{hž�mÍ÷辆Ï�Î3w¨4Á‰”‘g€™ô…In"ÚÐYÿV–bç ÍœFŽwápêq1™LáÀŒˆBTgD€kG0 vt°cªmzÄÿ¹'¿#ÍÐC„þ`¼c0aüŶÌ:M»c'}– åv;"‰çØfB~R?ì„iˈ 2ñ°ÙÜG¬AÄSNŸ¥…Ècˆ€Z­''')½Ñ>Ûí6�uäöažîõz‰¡Ž¼‹¹†g1® m ^ÐÏív›H¢x©—#œé?êšGЛ$„¸‡ˆA—öwww£Ûí&B£Ýn¢¢(_î4M;×jµ�Çé»ÉdòN 6ˆ Ö?”‡2aKÔ�ˆ0l’çšz½žæ;“€&e|vÏÌ#šó5V™ƒã€yÉó»uš6ˉ�;ÚûB?�®Ï$x»ÝNíj"–¿sÇÞÁóic“TèJĽ�SúÚNBŠz¾Æ–°j6›©ÏÐmî·>Z*Ò¨’JÞcñ¢À¤J¹“'eDQNþüÿ>Ç÷æ ¨e/tì�ƒwˆ_~¦'/ÜFö„Œ(L^„Ù›†²çæ…u¾¨²—ÏîînL&“B™"ü*©¤’J*©¤’J~Èb¯IÄë:6Ñxb ð:°ÜgX�Çãxùòeœ��Åb±(¤è�F1�#¢|MÆó]Î2Ç%ÖµlÖ�2‡ï¹§Ì�É’?¿ ä Žö¦ qxxý~?NNN¢Ýn§´9Nu³³³ççç‰ÛÙÙ‰£££xþüy&/q¢œÂBèÍ›7Q«Õ¢ßïÇv»�ÉdR8Å@I³Ù,€€Ž*áì@Þ�Gþr¹Œ—/_ÆW_}Ãá0õÉëׯ ë}úËžéµoÞ¦¹<ô�û§^¯'‚Šv%õÝd2‰—/_&ïÝ<š§ÕjE¿ß�ÓÓÓxüøq ƒtî�Iï5vÖHtÜ Ï$â^^G¡ß€c~&g1P6ökÑ ­ððŒ71õ&jدÑœ¥â}ï78 ©h°Îd&@\¾ŸË�#îÏá� ËC§ï "âÙMß°¯5™çzÛÞà…îÔi€în3Æ` }�ŸÿáºQFï_s’Úä.úå6À»|­u ‰1Äó!|�`;b\ÀŸ;ºr“ó… 3LøQ–œœD§è?l†u�þ¡lîëŠ1ã&Ñë.÷˜˜ÊI¾ˆû4ý´3 »Ëì¨'žiB�äožgâÇ6БnG§¶Š¸OÁ@{¢Ÿ~· kl¼õ±Ùl&2„kÚív²kõÛí6ƒA"� J­cŽ–DG‰àªÕj‰�¯Õj)•(kŽƒƒƒ4ŽYƒáä62QÎ{(»‰·©£ãL9*Åç%A"@ªò™u|oo¯ôì,Ƙg÷çJn·w)¹Œu ½‡ c>çsÎKâ¹Dòå)n©QH&&eçT™^–Fž=V=¶¼ÈÇ¥ûÌsŠ…¾ôÜ…ŽPö²qË{°Áw¾–ººÞ§Au¤£í6׳ÖbŽl( b IDATͱS¢G;�N:{Šw@åëÕŠ4ª¤’÷Xò�eD‘øñ¢¤ìÿŸÿíßL@ùçeÄ“¯õõe†8_¤DÜ{y1!ÙSà ¿+'mòI…Jþ?ïñß»r@á¡¿Ý.y;ý¥›ÕJ*©¤’J*©¤’²܈x7�  àx<..F¤‘»ººJéÇO8€˜M°F7è‘{}Z ˆ²vt®w@§$²#RøàÏs2é¡5»?¸d8;;‹‹‹‹´Z­\__Çh4ŠétÏŸ?�õzÇÇÇÑl6£Óé$²i>ŸÇ‹/b:�&p.â>­ÊîînŒÇã˜ÍfñÍ7ßÄË—/� HMÎf³‡Ñívãúú:�­ÀAæ&ÒH…ƒw2žÚ�F#z½^\]]Åþð‡¸¸¸HiW Ù[pp›µv �KY›—‰¿·®Ú«{½^Çd2‰«««” € ðÆ ÇÇÇñãÿ8~ô£ųgÏâÉ“' ¤tz1ÎN ­í1îhë"÷^Y­‡€î‡Hô�1ƘËœ1Bú>žAyIcÑ“Òì½ò1Æ�ÓüP®…81±às hC¾'­T¥D›ðÃ;|Î^ðô=„¡SvYycÝ1aÄ; ¹íu�@,FDÒ+È"ÎÉ"mѼ0×�´™·~‰dòÐu+Ü’�ÔPn ú; ÈîóšòèÆÅv»MéÍH5gÒ  ×ééÐõ<�u2�e� |”×Qze8‚É)æ�2ŒÄX÷™`®Õj…ˆÆäzÆ éú¼V¢M z¬§8@4›ÍÔÆŒŸuäu” EãÍÅeö…ëŒzLzlbŒº/8; ½åZ¯ÕLc/ çMèPWl6ÿégý£!ävwïS”Z§¨úLSO?½ >ž?L~¶Ûíè÷û)­%ë ž—GŽV¤Q%•üÀ$'Œ¾oã™ÿ�ÁËŸW&ð²ûšÚ¸ð9æž®l9AdÍ}^X=Ôùóò‰¨ àó2/ÇJ*©¤’J*©¤’] L¶„Û£ýúú:^¾|_ýuÁk”õ—�Fo¦ ê{ó›“^óæëP_ç”-€oòµj¾f-[>´6ö=¹3’"¯I9� ¢&"�²^¯ãã�?ŽŸÿüç±³swÞÒ«W¯âìì, ÞÛí6:�NÓŸicRÖf ƒˆ¸¡þ÷ÿ7¾ûî»xòäI ƒxþüyüâ¿H€=÷âÅ‹¸¹¹‰‹‹‹899‰_üâ ÔX.—ñí·ß< Ýo^Ÿ²ø< GìøzÚ+'M¾Or§´ëëëi…^�öŠïôÜw€d«Õ*®®®RäT§Ó‰n·½^/ŽŽŽâÙ³g±··ãñ8¾ýöÛˆ¸K¯1›ÍÒ>©V«¥³a¢Z­VmMʸLŽ42¹@äŠÁë¼M=F)‡£˜ |ZŸ§AC9ì•ïñDDàmé4<�t€¯Œ¢v¶Ûmò~GO–ËeJ9•÷¿ -È hÊ ØH»;‰ºÑö´©ÛÝ,¿õŽpØl6‰àhlµZ±^¯c0D§Ó‰£££xüøq4!H­8HÚt“D´ žR¶€5ìHG“@ºž�VŽx²NAHÒÞÍf3±Óé4vvv¢ÕjÅ›7oR[a£iSôËy´@7ºa�¤�(—�W�ÞËd“ÓHåó‡Ç„ÁÜœ4Èm9ík‚ÈvRÖζÊMTñ¹‰kŸõ M¡ÓØÆ¶�çüæ}ØC§Ÿ3¡Kù7›M"™ùÒˆ±C*-ÛÞÉÙoÛí6†Ãaš‹Ü‡ŒUtj6›¥9l¹\ÈOææ)>Çî™è@§±5Øú ›‚sŒëM{™ âý<ÛQˆ&�ùŒ~@?í,ÉG»:j�¹ V«=:�NÒÆdú·»»[ˆæz÷;ŸÙfaki»f³™æ&ŸÇä1cÄNÞ”×ë,÷ßÛžÛ¦!ùwŽ”ÌÉ’2g„TÀ³Ù,�A´X, çå}˳ hãNåHÚ1‰ˆUÛ(÷mͳ‰œãœGtÛâE�ß\*Ò¨’JÞcyhZvÝ_"ž”ó êCÏÌ —|ö}›aÞ—r&I|–O eõòuù}yÊ"ˆ\–ü>{Šð®²vù>Р’J*©¤’J*©äCΞHå7 ë¦õzÃá0ÎÏÏK×�ÞŒ#yÄ’ƒ+-ýò¿íÕJ9ü·Ei­×ó²óYþ¼œt0Èëω8hµZ)Ѝ×ëE»ÝŽÇ�ÇjµŠW¯^EDÄt:M‘"~g˜¨1ØØãè @�õz³Ù,¦ÓiDÜ‘õz=ž?ž<Ë?ÿüóh6›ñôéÓ899I@öÍÍMôûýytss“"ÌNOO#"ØËS�!lØW¸Ì¹÷­ÅŸÿ¹}ÏÂËÞžíyÊ/~;ZÆ` ï&Bîòò2EYµÛíøöÛo mÁJ?ûÙÏâ�ücìììÄ矧§§q||›Í&EÖ‘…g>Q0€HŽðòù9‘{ú•úå$ `³½¥ Âìæo�A{À›làó<ªƒw¤šbï† Ùl6)R°˜1µX,b6›ÒÀå:Aßå =`i­V+¤lÊõÇz…:ý›÷�ï,!LØ¡/ÖiH RUu»Ý”¢òñãÇ{G$é½HéF¿•ÙQ@r“žQè[G¬øGÍ”þ´ñr¹,´1€= ã =],)u=}Í}ŽÂ6Â2ænoo ÁH=é#¢Q Ôš4qDBžÎ?n#_CBèFÜG| 3n/§¬‚ àÝŽŠò<”G”0~ UhgH#ÚÁéí0áò»Ÿ!ÐO€gôòÏd“‰œHiJûš(¡M â;2ÙØ�öÙl–HÎñ�¨0iæñÆØvú/ú R…èMÚÙÑ‹Ž!�&ß™lÜn·iüòÛ),y†ÉgGNza—!N½^11l"’ï ¿qá]´7Ž”’±Ó館,t�sý¸‚Á;ˆZ²ÝGl�ì„M_c4yéñc²·l�…ŽYw¸=2¡é5)×C‘.޳­Ð{ºŽ8´}DùÌg»9²Ž9œד~w´õÀÎ�:Ö‘g&…éWÛKEURÉ@ÊÈUñç#Žþ¥ŒÊŸ_Æðç×!z1&—rB¦L"kÜ]S¶¡ü¾ç–‘`y=Ùp]E$URI%•TRI%¢ŒÇã�0c<" ñNäØAÈ?¹÷eÄýº“�»×”; ùYeÏõó ÔÀȽ½ ¼Ù;ßå,{¦A-{’×jµqà”s‡‡‡ñøñãt^Îþþ~ü×ýWüë¿þkÅx.0æô:´+mpðÀùJ €È�Ífqvv_ýuJoó·û·ñøñãDÝÞÞ&r‰tCÃá0�ûiŽ$@w8D�f¹\LÞ9qŸÃ?›¾o½ïöÏ£xøÛúTF 42(è2�F£è=~ü8ÚívÇ£G�R”ÁOúÓèõzÑl6SºF{›/—ËBŠ0GqŽýìtx,i#t…Hú°ž¶�µ¾löx0FYM\:=WDøgŒBð„1f ’QWþv;j0'ih;{òóƒ^à4RŒ-êÎç9) ÙG”WY¤D÷�Îêøø8ŽŽŽâøø8úý~ÒcºÛí]!iÁ\nÛDG8ø}n‡Üî¢ieÂýôÑN<€š”‡ÑWŽ 1¸‰“©£Ыår™Ú"Ý@Gy†É=ÛzÛ~“�ev›wÛöøÆ^·Ûí!BêNÚФ¬gÛ•\O—îC„ÈÆ3öÙ¤ÄcÐãÎöÎshÙ˜±Þ—ÍY´�‰ÎÍã¹&jˆ DïhÏ&LøŒº@A–Öëõ4Çqå3iË8ħÏ(·£çÝùFÛq¸¦nNÍè”�Ëåò�q•G,še,A6AÄð㟈â™IØtËõõ1ŸÏ ‘ªÛí6‘&°Ð±^¯—l�èvÍzíṉ̃à íœÛ¾s4¡×[ùºÎ6Èv×ú•ëtN¤Ø¡�~õ„äk¾|\¸N\Ï|O™¬7‹Å"�ÅX¥lÖ;æ^tÐörŠñ€=tj¼Š4ª¤’�8i™Qµ'[¾Ï‰‹2£¥†-7ØmŽÊžéëòÿ‘Íf“8.«½ó:󌼜ùf�ç#ùõùsó2>ô “�ÁKVTRI%•TRI%•|(r~~ív;’Ço³Ù|gÃÏßöÄ÷ZÍǬ»¼yö:˜ßlÂ#Š^öekJ_h“ƒ9�Ã3sÉ`HZ“aŽ:È£‰üãwñþÃÃÃ8==�gÏžÅÇÇÇlj¤ 9??�ápµZ-�¬”�rò<§áAICÙÜ8w*"ÒÁÝôçb±ˆßýîwéÒ°bñ܈â-�N'z½^4��Ç)jd±XF÷7Ï,ó0v�ÿä6Pìkr²À&ïÛÜ»�4M™ R߃ƒƒØÙÙI#€¹»»»ÑëõAwrr?ûÙÏø¹^¯c:�R.Ùƒž÷6’¶�ÏÆãqL§Ó8zFý ‚:¢Íå©;åG§;”É{;G,`ˆdOÆÞ°Õ{½üïˆbš9Ûþ&â19F¹'DºÑ�ù>˜qã>gœñ½�qî5QÙE¼ÛéÏÐwÛ˜ˆHžä¼Ç©ªïèã¬ÕjÒ­w[消(?l"m¸\.SQN{½{rÞ %)•°&kµZ"‘ ööö¢ÛíÆl6‹ÝÝÝèv»…ˆ#c.eã�ö®7yì{LhåDˆS!R7t›D»2nHÆY"Dq˜èqd�ûÚ©!ÑUží¹É‘ µZ­½b �ï“ð=¿X�=÷Ð~ù¸ËS\Ѧ…qéˆ Æfèþr¹Lmè(Ÿ[7�N“î; s†ÇÉþþ~t:�4¿�Δ21ÖOô ‘$Ö/@ö½½½X,)š6'~Mˆ3îÑ)œ ¸Çdc‹Ô˜Ó¶%|o; ñA¶¿¿777‰&½ìÁÁA:Û�ù€Àô9mè€çÆmÌÚŽr0—P_tÜã+_Û1~Ùã1i=¤Î¼Ïml�ƒÌ #žeR–:s-/‹äü™@ôY¾~3i”�oþ‡ˆs„×|>�ÉdÓé4õÅz]L}ë¶¡ŸÐ×�ÿonnb>Ÿ§ºØYb©H£J*y�e¹\ÆÅÅEš˜0röÐàóˆ(,s"#¢<·ûC¤QnŒm|}ÿCŸå„’…Íé^½zõŽAD1o©Ë™¿/ÿû¡ÿóÏÊH£?'y9ØÔ ÈI¬J*©¤’J*©¤’EÊ6õmòs’(ÿá:{¹ó|§òÆÙžI ƒ¹~æëÁ|Mmà1¢xr³ÙLyæ�N À#jy_PBTÀÏÛ·oc¹\Æwß}W T"î´ñxý~?f³Y:°­Ì© Ð5Ï{ï4M& |VÉr¹LÞô ±òh¦z½žóv»�"hKˆ†—/_¦µ6ÚRŽNË�ù¼ò½ ¥Á=Ä=^æ�"â½wtÄs˜~ ¤ŒŽ^hµZÑív£Ýn@'¼‚ÏÏÏãêê*Z­Vôz½…²ÝnÓ^ÐQ8D×2;]Ýz½ŽÉdÃá0�Cj""x¼o¤Ý ª’J*'l fY_é ÊÀç1Ê=Ô‰¾q¤… \t€6æ½Ø?ÛD':kP²ŒÌq™ |ð:ZÒ=FìaO»Ò¶7ìßÛívÁö”�–¼›ç^®×ë€Óߌ§Ño“ÁØQ"±Là@>æý1ŸÏ éÈÐÛ5êHš@Îq¿™DdŒQGÆDw³ÙLÏg\ÑO´+62"ÒÙ¤“ʯñœÁXwôW™CAŽx‹¸'cr{ŽMñ9N&nx–£�ÎÕämn²ÏdONŒA‚˜ÄµÓ@~>`^Ú€ûŒmx\£÷9îÁØv” }L›0¿¡Ë‘CˆtÐg`;¥ÓÌaß �ƒAt»ÝBdGÄý¹>èíÏØ7i€ ò–y�¶¾½½Mö¦Ìi�öâŒ1Æ8uC·˜“ÈAGÃY*Ò¨’JÞc�öa¥ùÂÅ¡ÖL*¹ÁŠx—ìø¾Ïó…l¾ˆò5¾÷!¦Œ¬¡ì�F#yßåÏÉË”o:ø¼ÌÃࡺ䛜2¢ëû®cSBÛyR�¸_”ä寤’J*©¤’J*ùÄ A ƒäNBHN°”9:å o¾±ÎAqž“-ü9 \‰±³³ý~?�X8€íDeäëv·‡ËbP”ò×ë÷g ,‹¸ººŠ×¯_GDñì—Zí.5 €yøÝ†‘§ƒ¼¾¾N‡Žþ�l�Çqyy™Æ2ÂÌIÔú“Ú¶OŽt;Ú–9yx—Íã¾—5®÷÷ù|î¹ÎÏ.[›æŸ³ŽÃY…yÒQµŽ¶óx¤m¨k¾ÆFá(⹋û!¬ÿ¬™˜ÝÆŒƘÛÄ:ŒÝÍ×ÚHEURÉ{, ¦22Ɔ3ßðò}ÃweDŒ=e¼‘*{o^¶œÈÉOöG e^fê•×ùû¦¼e …7y[¹œe•ü¾½½½˜L&_’J*©¤’J*©äC¼Œ½ޏ÷.ÛÌ;ÊÇ@DNh�ˆw@.ƒ¦t °¡æ€T”×é�ÊRÜœžž¦swœê„T0&rhoyY¼†°ðzÜà®AŠÛÛÛDªDDE¿ß�ét“É$Õáüü<�F:oÈi°©7ÑCNE¸ßëõÒºÛàM¿ß�ˆHg¯à�½ÙlRùܾ»¾¾Ne qzz½^/¾û×ëñäÉ“-syyoß¾M€"`f¾‡¡ßMjx-q¿~w„`éŠLzo`ïîüÇÏ <88ˆ~¿ŸÈ À]"Vö÷÷c±X¤èÈ•ù|gggéðx¼ìa²»{°9‘7771›Íb±XÄh4*¤ã¬$ÆýkOkÀ)ê‰Ðh4 c‘6<¤ÝM:ÒŽëøý&j]6Ñk€ß} X0ëñ Qërh7ñœƒ‡ù~Ð$÷š¨¥Î&Ãè§Í2`È»¸Ï÷SGÊ ‘ià1olÀöÇi¬¬+N V¯×ÓYWØR]Òöa¹К:a«s`[p{{›ÎHƒeü9ýöÆcˆg–ÛÎs¦Õv{‰7S®Vwçy=aòÏv�ç䤉ç)ÿ §]ÝÇ‘"c°q>WÌ„‚Áy~*c#xv-äþ ¾¤¡d¬Ûböööb>Ÿ§±�ŽCh@š{ž¦,ÔÍ?nH!ží”„�Qè%$'z ñõøñ㸺ºŠÙl�N'ÕÑú¹Â»MRc_L„c¯ö÷÷“�Aç½^¡/¼@7¯¯¯ öØ:kg“XØ�årYpè ÜD?Ñï×××qpp‹Å"¥3A4�N é"±ù.;mÝl6ãøø8�uHË‹‹xûömDÜ‘hŽ6vݱ)9I�Ýòš%Ç!�‚Ï6Âö#o»œ4òZÎsHþ>ëfNøš(ÉõØÏ¡_X·9‰¶Fgˆä£­¸Þä¯×¶ŒSæpêã9œ²£ èj»ÝNºM´ä:ec>o6›ïQÔ�~Ì×ÔiTI%ïµä 6/p#î==¼¡äÿÜ(ÛÐû;¿ËÏ÷â·Œ4òFß‹âœÔÉ�·ËoÏ´2©ŒàbÁårûÿ2bËeâ�~¿ÛÙϱ§Xþ¬¼|„í–]•TRI%•TRI%ŠØc˜Í«E¯¥{i2ØS2â~óq"³V3 ËyN-b��wùsŸkb€™è¼–ÑÏ÷Ýn·¡`BÀƒ5$ÏuDmbp’6qyñ˜�ˆpì¬xsú ˆˆv»Ûí¶@0hqªÈ ÀŠˆûtq€ÀGGGq||ƒÁ Úív‡ëõzò�].—‰È0hQ¯×c0Ä£G�L¤M½^�ét±Z­âñãÇñWõW)Ò�C£ñnÇ›� Ý0Éf2Pogg'¥o£_éKGb,—ËBvƒ¢&<Ñ%ëNÚƒ›ö Òäðð0¥VB·I­s€€NñiáڜqÑjµ¢Óé¤þx5PgàØ‘!Ô °Žwxïç3uœú*'ièw§êð7Ic Ø€¸Nß Ø<À>cl½^']Åk}Œ£O¨3c÷½GdŒ,‹Ò;Ͳ\. ãÏò«««”~ { Àhð•~2D{Z×I}d]器gl${k[pi¢‡öpºB晹¾ù ^¯Wp �ˆ¶TÅæíìì¤ôö‘HgÀÕˆHd$m=�’.Ch2–è÷Z­V é"î#.Ñ+¢€}J¤œ 'ÚÏdÏ%ÅýI] CÊóh?·—Ó]‘ÁÅ6ž¶ð™N¤¥o6›M�¤bìûŒ;qP¢ Å·NëÅýü !Ž=E'ˆCÀU�Ft:�•ÁX¯×£Ûí¦(˃ƒƒ˜N§~4Åx›Í¦�RÍ$†�m»L æc;„M€Ô$U`® G?/"R´‘yô%ï�Œ5˜Ïž–_ŒAtÆ‘_DT�Ê ýñ¾×Ž•´#úë¨+Hœˆ(Ø=úŽóQ¸Þö•65™k=r¹·€¾&©ãr¹Lõ<‡ÜÙßßOö Á¾ø�ô5‘¦¶NË…îçún¢ =…°¡íì4Áx3@NyrG]®/à x?DvED"YL øˆ æJpG¼¢Kv‚p u‚¨ðyC&ÕLt¢ÿ¼¢�qÄûé{Ï?‘VÚ�9ªÕjÅr¹LvŒ6`Ìl6›”ªÍ)%7Ø“-D@'3ñì¾ÈçoÛEHôÀs²ç{MæζbÃXà7„£í·õýõùw”coo/Úíváü3�qx‘1^³X's=ÍI&ÚÏ‘V^syœûô|áº=ÔîÜOûÒß._>Ø.X(eÇÆp½u�>÷ÚŠ÷ On+Ÿ‹È9w.upšÎf³™t�¾w¿Z\F®aŒc›�Š4ª¤’÷X<Áä‹Öˆwóu–œpñ&�ïíE�/ò¹Æ÷å›—ÉÔœH¡>l#îRžxòSþŒ F#Ì=ŽÀÊ7�e ¯œr[”}λʤ¬Þ•TRI%•TRI%’˜X‰ˆÂ¦Ök¨²µš=ÜM9]O¾‘g} ÆY>Œ[6 IDATœg”¶ãÞ×9‘q†ŠÁ^{õæðƒ>kbƒËŵ«ëpãös*+î4'N=bÂÎÞê‘ˆÞ ˜”ƒþt(Ú€m³Ù,¥X[.— Çv»Ý&/éN§“"�ÖñxžÍfqzz§§§±ÝnãÍ›71�b2™$€òÍ›7ñõ×_Çééi<þ¼�›3{ÚívœœœÄááaÆîînüêW¿Š¯¿þ:‘\´àãÍÍMt»Ýbiâ¶…hA×Hwd�É{�èßz½N€�‰ïñ"î<ìG£Qììì¤(#GË0~#<  Œ4_„x2“æÝ,#�ì)î1`2ùž‚ ÷B·ÎÛ‹Ý ›Az®Ï÷¹_öÊ÷}´'ç–vš°0 Å�Jœ.à2ã {lN¤×Ü­×ë…Cés0€�1Ç= ‰0ðï~2ñH[™<Ïu9'áL¢ ìÅ©›m£ ²Ûí¶…øm‡NrØ#§j‚È0vÀ½¤ì¢ü.d‡ �o×3×ÛmžE5æôq®‡Ç:Ê{MfÒnèýâô¦îŸ|\Ðà:ÆRx®õ Ùl&›`ÒÖÄ�Aq·‰?wjDGçíÌçÌ‹Žìu»B\ãTNߙȌ¸OaI”•ÇcΑ·GGGÒ‡5cÈe6Q˜Œ¤úó½Ûí6¥#„Pó¸ å\DÄh4Jöãòòÿ±÷&=’f×}þ‰ˆbΩ²ª™]ÕDW³›nÒ”IJmË’e‰€Ã’—þ^û»xá�¯ä•‡… [dÀLI&Û² Ð-Š´Èž«»«*+§˜sŠø/ÏÍ'NEñ¿.÷{€DfF¼ÃÎ=÷Þßïœs� ˜qqgggqrr²4/{‘ –6% †þg-d{Iû.‹â¬Atv»Ý^"�Ñ-®ñXòšÂ:Î8ðÚ-Ï<ÛXÞ‹>s�y×f‚Î:ÇÜ»j�‡¾{\GĹäLë¯ Tú�ù…w¿/ô¶Ñh””´œ=™ßl6—Ö‹®¿QxŽíœÛœñ’Ëär iTI%/±`ä3�âAÿ‹È•üY&{lP²Qs(t~~&LV-ÐòBÆÏð†Û›W{#®ª�'®wy²ñ_Õ.+å\E¤½èw&“*‚¨’J*©¤’J*©äV FÜ‚z&4òF–ÿ³#”½F �D<ŸÓÞ`¿�Îë^ޕ׿äpyx·�zfÞ¼›<àÞ¼6€Èû[X¯g 0þYÕ¿¸T\ÞÛËŸ3"L†~� ²b2™”ó�@º ���¸{÷nôûý8<<Œ~¿Ýn7�FlooÇÞÞ^9sa8ƳgÏâòò2‹G¹ €¯óóóøüóÏã£�>*`óööv ƒ¥þò^¥Ûí–6ÆK=GxÏb¢Â ýл 8Ńœç5›Í’Ž’ÃÞý&&� r‹kL@¨ñ §¢ò8@èS§s: ®É¤÷‰Ž–0)dïçLêÈšì4±lÝͤsÞKæóÈh{ÎxÍ„•I;êïtcN)g[e�n§ëò¹1ó� ÙCŸ³K°Ö%ô�2¹�Mj`w±½ô»íŒÛÎé³V‘ù·e@· my®ñÊl’Ûg=ED Žö0ÉŸíÙÚÚÚRº&ˆ`ê”m®‰oÛU‹� øŸ³gŒ¹X/ýcýµC«#�è3úÂe¶î3~çóÛ”•¶Ïîw�¥<~3HîzCš“>Ô:’l‰Tñ8¤^Ô‘²W1™èv¦OÐ'úÁNqŽ�#6MAPØ^YG­v}}]Òõmmm•ˆ0ô‡¨UG;âŒ1k ŠyÙ:J›0Ö(#d&ãq6›•9ìö|>/‘QÌSœc†.B(ÐÞív{‰`´žÓ6vp  ív»D6EDq²!š–ˆaÛ ÷cv0± òxñÿÙžd{c{œuݲí4q™Ç”É$žk{Åû½îªÕjÏEzÝŠMãÚÏι®&œüúˆu¬ÓÊ-7ÑD™Àòø£üØ'LŠÓÆxsY,iTI%/±xј7yÞ(®2TÿÆÚ�ÿWm,³QYEù:/f]VO"6ô^Üø�/Z¼f�„üÎÜN¹ ^ÐyÒÊ …ëäÏò¢¡’J*©¤’J*©¤’[1Hq»ÞÊ ¯×¸^_\2Hb �÷e�ï¸'¯ñ21”íU¤ 0Ì…O€{Ï®Zoº h|¯ÛÔ 5?Rºi7‹ÛóE{ { û¼ ÞÑn·—Àá�3c2™Äb±(D}Öl6K„R¯×+€1@Þt:�v»¯¾újôûý˜ÏçqvvÝn÷¹ô†ƒÁ €ó¬ÑÇãqŒF£�FquusÒÎÎNÔjµ‡¥]n8«ŠTzŽÂ~‘§²õÅÑ;Y2°³»»ý~¿xûs^L­V+@$‡q›lô ÐË‘h¤Z2qà}�u8ëá*ñuN§ep8ïÕ²Yw¹ž¶71“‰<Æ—uØ`ŸÇhŽÀŠXŽäã^÷…ßéR>-ËéÆLÜC½2‘â´uµÙ>Ygm3¨oöÒÏ‘”Þ3S×v»]*t™öøG‡ˆH39h[ær®Ò ·‡ “L¢bKæóyI·8mp;+ŒM¾.6ƒ”f>—Ãíä(4“nƲýe ±�`ç†ìl@9³þFD!1©“IZt�²2†MEÄÒø78í:› 0í¨>Æ.÷ø]Ü‹ýðXÁþqÖmÄ{M4eÛiä°ýÆSìœÌÿôýIQ&޳NÚ>øAÄxàÌ·ÑhƒÁ`)Uï³í´m²3‡ÛÖíȳx}KdÓt:-uc|’ŽŽºr¦ÑNív»ô_¿ß�étZì $©(IËú€y¡Ýn¢‚¯Ñhg ú(âÖ¡Àkë-×e'‡Äž˜¤AÜ|—×OÙVyÎYå€ûY¶Å™(ÃYf±XNó–ׂ؇Uľç+“»nß¼n¦¬�F”�ró9íÇ»ü^ÏqØÁU¶½"�*©ä%o2™Ã÷y±oœeÕ3OÄ«îËÛØÛzâw=ùø^-ž xf®CžtüþüÎü,/p\ž¼ñóóVIÞt¬z_%•TRI%•TRÉ]ìAmïcI9�‘½ö�Êcss³&Åô½´w°ßA™¯ ì‰ú"pÆ`£×·ù¼ƒø€3pb  ƒ5®ƒ7ÿ€8^Ãzí:D,§õ,ñ¾ »^¯—È ÷™�‰Z­ãñ¸¤‰�DZ½½¯¾újb2™Äx<ŽF£OŸ>�ãããX[[‹Á`P€´ýýýØÞÞ.¤Ò�;wâÕW_�^¯W@¶ÉdOž<‰gÏž•ƒÞ}~ÆÖÖVlnnF¿ß�õõõèõzñèÑ£rþ zb”vòºÞ‘އЫ22ЮÖ1Þ³½½<ˆ×^{-z½^!'ð2çœ'§ŠX>— 0;Gpd`××ÑoÞ­"U±äÿWé¢#0ü|?`.ƒ®Yo³Pç\ôŸhÈ7€{¿«Ñh,�1dbˆˆ…zý6¢‚ïø=�NKˆ�¼E`ÙFÐ6NgpÏ{ œ;ZÌ@2ºÈÑl6K BGª,‹rî 2Q5ˆûÏ:ÂÑDè‘Q”ƒ66HŸ÷çØ‘‹‹‹çÊjÐÔ@6vk±XD¯×‹­­­r.�I0ÚÒ$;}bBËcÙÄ*Ÿù«öù™`sÄio¶Ž�ñ; VÛNxŽŒ¸%¡<äÈÚÌc—hë&Ÿ™È‚lqD’ûÛ§üƶAp{|aógÖ»<÷yÌð^Æg¯ŒY;P¸ŽnOë$ óÐb±ˆáp£Ñh‰ŒüE:@{0&“”¾’Ç6ÄíKs,iËp˜X,K$QG‹Åb)u åÀ)»H;@,ûó½ô…ûÓãËß{ÍÃµŽ”¥¾vÆð²ítŸúºLÖfûJ9ÜgÌŸž_èÛ>¯=>ü½ÏXò˜vùý,¯½Fâ=Œ?ÈÄz½^Ö”ÌYŒEˆu�Gž™Å»<_ø½^ãe›ŒT¤Q%•¼Ä‚ñÀ fñ/)lò9ƒœP�àTl«îóùàdß°Å9—Ðív;¶¶¶ ˆMïíí•8£Ñ(ÆãqI»ruuÝn·x=?x𠜑4™LJz5Ò±5›Í¸¸¸(@äõõuôûýh6›qppPÚ°åüü¼¤±rš°Åâæ¼$RY_ñwêšdhS“F&`H÷Óív£ßïG§Ó)Q 8ËE±Xܤâ| Ÿùjò}¦ïìYì´_ÞÇ1N|î†A,ëHѸž~³®øžÈ!î1ÑÄšˆ²/‹rfD8ë÷-ãÆzf;àv±dÒĶݤ’ç†ì,àwÑÆ^“­Âû ¨<²½ÎzF„#¤‘‰ë¨É8×ÙÏt;Ðf¹®¶Ü“#�ÝfyLd6ã¢ÖMŸgÆ÷~¶Y*Ò¨’J^rÉ Z‹ Cþ>ˆåÎ&ql¸OäÔÕáàž,\Ÿ_ôL/zyßçÉ­’J*©¤’J*©ä‹"Þ$³ÎÄÀ’S…àQl§&o¦ jv:üïHÊd�Þ\¾ìTd ÂÀ窔d<�Ôùÿímë¶òýñ²÷oÓów¾†÷æöüEï㚈(Ѥ“òaàÎå_¯×Kz5ÎçÙÚÚŠFã&Ý ÞÜ�ÆMúœÑhT¼Ö9 …ó�nñˆvªÂZ­V®%òŒ>¥ý!þ666b2™”6‡å\$@)@G“DnïeÜö­V+ºÝn) �SERmllD¯×[òV¦>>œ�1ð X P`Hù2ðŸ8ÆN‹]ž‡^ùºù|çççK€w&Z<î ÌûÇ}˜‰OƒY¬7PìýâÅÅE'mG Ÿ¹¿^¯—4hñÑ_“€ëNsFùøò=Êcš~¶½s$íg@›Â¾˜²šèñ^Öýæ}ºÛ‰T{ÞÛçq bb°z4•º ‡Ã%ò‹rÌf³BÞb#¸˜º<µ~d›ìÔrôãÅÅEŒÇã¥t\”ÓýI*2„ñîˆ+ôÐÑŠ.—ûžôz<‡úq>�£cé{ú“ÈX“I&˜3(¿û "ÊsM,BH2¿8ò�~ÎóÏ€ vô Ä :c¬†òXOéË‘‰Mvä”Ç#}n"ž:Ôëõ2~™7V97ð<ìÍt:-ãòݶ˜çÚ¶¡_¤±u;Q.ÛÿÜ÷ô›Ç(ïuŠCã]ôÑGŒ+"MsŸÙ†  @¼Ÿ¾°ÝDOllG½®º¼¼\J…H3±lÛåù ÝFç°7™ìàúýb0“I|¿ßŽn{êäõSvJà>Ïñ&ä¤ëÍ 2û]yýï}@ö‚΀vöÆd m`ÈïvyhkÎW8??/Dèv»Ñét¢ßï—óFvww‹§ÿõõÍùFD$ ƒ¸¼¼ŒÙl“É$öööbss3ƒA9Wˆ¡M„ІDìÐOü†hrTÿÏçó¸ÿ~w[­Vi¯ë ¢»= îÒŽý~?vvv¢ÛíÆöövlmmE«ÕŠˆ(ìÊx¸;J š™ðÉ@^âÔ�ö1°™�ÿ\—UÀ×yÏe` �3 ü¢qá½$udŒPVƒ½Ü“ëêg»”›wø¼€Ózýùô>&�•Ñ'ÚÓcÑv¼ù]à¹ô‘ÛÇã”ñ‡¾æv³Ý2èHŸ:ò%“Læ9ØNÆã[…�°0i„¾BŒܶŽR>gìe>`NÐ6hìù!c Ôíââ"†ÃaI‡IdQ6«ðê‚]"ê„6pº1ÛÖØÃóóóöRöÙlö\dó &´#¤”Ï+":Œ2e`¾^_>ãŒ1å¹”² ×Ø)·£ûä3ZÆãq!�Ð'y®¡¯±�¶gÚ3.c¬…ïÜÖ–EçÛív±ÅÍf³ÔÇïÉó¶ç-l©û¡O<�8Z8¢"�*©ä¥wÄòâ|ÓÏ5üocŸ7>ÎcÎ„ì… ×±ÈãZÞ±j£ëç¯úÜ‚’ÅN&‡¨{Þ´ð· ?Ï[%¾–2™å·‡…Ëlc›ÛšÏ²Ç‡ w¾¾’J*©¤’J*©ä‹"޲ˆXŽ\È„ À:  �I—ˆÛµ@�A³õõõèt:KÀë° ŠZX‹²¦4xK¹}`¸=QëyŸ�€ëëë%/_€¡üc Ä[€PH^4,ðaê€aön7°š=… Xù )êf@>ŸG·Û�µµµ8==�gÏžðƒtkív{)íÓb±ˆ­­­ØÙÙ)@ÎååeéO@]¢ZH�‡Nq øl6[�"¢œ‡”#jð8_[[‹;wîD»ÝއF»ÝŽÅbQÀ.Ýççç 6áæ”sÝn·Ô!{²“úÈ„d{4� ¾÷^Œˆ)“F´;Ïõþ†qbPÙ÷®"êò癜ˆˆBÒÙ‘Î #å` Öj«£qø /G0øYÖû  ù:·!ÏÇž0!œs•W;ýt~~¾äým²Ç{¾\ÀJ÷�Ç9zÎÿÔŸûsÊ5Ž&Ô3é=­ ÀtÊ8ϸ1 ë}·uÇýq{®�õ>÷ý›SöÌ<ÃÑs&Š©ma2ÛöÛïr[»n€s­Ÿ¼ƒ±´¶¶“É$&“I!-hãf³¹¤×&úIèhÆ„Û-ŸED;RÏ¥9b!�qž‰í@L:77Q ƒÁ f³YÑ5Èú™´s¹�MFQî¡åù�r¢›ôºÈ÷¤—³Ý¾¼¼ŒÑh´4f³­²ývÿ¡«î[ÆcÝs¬ÉÜUÄ#Ÿc_œ2]cþp;¹¾ÌÑ\Gtíl6+ç]]]•rñ?ÏòüfÒ|/ÏíÔ3“ô«�F#Z­ÖsYsrt’‰?¯ f»�¯‡°vÙVa˜Y·�‚Ðø¦õÜý ÉK™M�ä9•6q?A,2f¼æqméõ�í�Û=µ½±>™PÍkBt=à;Öv”%ÛÛÚØëLKEURÉK,lÚ¼öB'}Kfº¹&£; Š1êt:±X,b:�F­V+Þ4,˜¸7/jLà¬úíÍxÄm8|^hç²çwP–\çUM^¸ñ™Ëãû< E,{rz¢ÍmKáèÈ‹•TRI%•TRI%ÿ/Kö^�¸�ø;•X3:ÝÏb ˆàXp}}{–H&‘,lä]n€� 8 `©¯eÏ» vü0pe°Âkey]Í»2 a ‚:tôzÝm’É'Æ ÜR.Ê X³¶¶qrrR@¾V«õz=ö÷÷ãµ×^‹­­­”ºlŨÞïöZ¦Ýg³ÙR@™|ËÀ|¾¶¶[[[Ñï÷‹Ž :ýšAHïo‰ˆÂÃ�z ¿õ�X²hG{¨SH3ëæ·YކˆX¤^O´³õËD€ÛÌz…'øúúúRz-–ÞǼÕëõ’^кéçR'qyLåñjp�v„¤%ƒûÅV«µD ñ¿½ý T£sö’ÏãÊ�ŒG¼· š´p»›4cŸ¡Z«Õ ` ñk;i`Öãß㈲£C.?ýM=¼O6àO9m›a‚²Ùl�·-¡oLîó·Ó™ÙîZŸ ì›\[,ål(�“¥ÞŸÛæ6Ë×ëõBHжZ­ØÜÜ,$0ï·Í§~9MÄ‚g�¿ÅbQì&}ŸõÞóuaL3ηÑ-þ7±��£}§Ói9CŽv�Çen3–‘=—P‘í|œ�kH�g¼¡=ÐQ¢ãl›]>þ7QÃ{ó|Ÿ49‡^1Ÿ­"º2ðÎ8ÚÜÜŒn·»D×,¯��ÃÃÃX,nÂkóê ­ "¿óõ®�Ù=éøþÛ̾''îóÎר#o¯& ,’'5~r¸pÞtURI%•TRI%•|‘Åñ,,¥8&â–âïì­k�b6Ú&{ìyéõ™I“'^Ïy›Á€ž”×�Ñ3H`€)ø¼Óä“Û*—)Gý=Ïš×ÞÈÿ¬ƒí¹Î!{GûÝ^£\7à9ŸßD!Õjµèõzdm4…èËXôçt:]òHžÍf1ŸÏc2™”¶»¾¾.à"Q”Í©mðì�ˆ% €4âvbÀ7GsP_{/½áH6ú˜h)Rôñ½Ïé JaQCÚ-@2×ðÈÑo>…çå1�>ï!W]ëïÜ¿—q üÙSݤ€ÇeGŸhw~ó¼\^ê‰>�ÞÐQE­Vk©OYßÕÇ5´/@­í‰mÈ‹Ææ‹~³çô^Óýn2Éíe›b�Ö}i‡N�o�iGqFÄÒÿ­œ�cðØdß™¬i6›1�—öͼ·Óé,‘&&ˆ} =mµ °¯×ëÑjµ H ‰eÒÛØ‡1“W&ä( vÄ‘[ÙÞc[!ÇLšðì¬'جˆÛs„Ð-lIÖ{ƽ}§`ÌåG9#pmm­Ø#-&¬g�˜Ô�ó˜<Ïšœ!ê =¦nÙaÃmÉǹTŒKÏéŽ`¡mˆ~¢ì�èï‚Dä÷8µ­"z�÷ñ™‰ë ßs¦óS­v›2×äµ£)ýÒh4Jz2÷· •Œé™t÷:ƒ6÷yî�‰<ÆÝNÖÃ,¶?cã7}äÔ¼Ølžaç ?Ûã”r¹íé“eÍ!φPµCåf�D{£—.³Ó:jÛºÅßÖ5¯Í2AiDy3Ö™Û<ϵÙYˆñ�ϳ¤>^· iTI%/±�Á^(Kóù|ɳ†Iccï >ÿéOŸ}öY4›ÍøÑ�~ßüæ7ãää$¦Ói¼öÚkñ³Ÿý,öööb±XD¯×‹V«wïÞ�étZØo6f·¡É^Üñ;IÿžÏç%ׯyCo¦ÜFÔæ)“é~ðƒ8>>Žf³·ž{ÎËÿ>,‡ÕºÝÙ¤±p¦|îè?ðAŸdÝöN�‡®s­½½­ ÞϹ}½¿ä§L’r~ ýìý�uÔ¨½Åùm€Ó`þÁÙÒ$šïñ>4GQ¯étZ¼×Ý–6MÚå3€(ãÊu5ñÌ8�Fø�Ç…HL&ro:�Е¶­ÕnÒd´ûL§cŒPHV‘õúMTDޏÃ^\\,�Ñb›î”ØhÀ`Ÿ3ECà¢ã&Ž þØÛ›À!RÌÑNÀôi# –š¼£LŒ-ÞgÂÕn·K¿å(ë%$–‰EˆeH!lÉ|>�^¯Wl%©ÊLRFÜØôû†}�¨™N§Ïͳ>Ç2‡9Œ¿ä 8 IDATr1æ õø¼Óé,͵&±]v&@çèGôáúúæ,;Ú–TŒ}æêF£Qê€C�û�öžN§KѤN¥æ¨>ÃV0ƒ]Ñ_Ù)Àv¯ÝnG«ÕŠáp¸d_MŘ`N¥íiwô‡6äŒtƒr¢ÌÓÖgl­çHæ3¢\OOO˼…­@/|å÷ú‹v€Ü!ÊŒqO$ uÈŒën»N0'`xg Îçóh·ÛKýhÒË„JD,“9:ÇŽ1Ì?”‡ñ‡=&Z�òû]´�II“Þè–õ »fü‘ïl 5æÿMq�çDîÁŽg‚ŒwŒÇãRÚ€T¾àÆŽøöº#¢"�*©ä¥¼¤Øl8<µV«ÅÉÉI<}útÉÃǡФƒƒƒˆˆ¥Pw2£Ñ(Úívü­¿õ·âêê*úý~ìíí>&½ÓÓÓR& /“`Är*þ·áâ;3ëkkk±»»ûûûÏ…Pú>þöÿ™}÷}ÙËèðð0?~\ÊE®ØÇ�Çk¯½¶´ÙÄcªßï—Í›K&åñx¼´ˆxÞøVRI%•TRI%•|%;ÿD¬NÛË:�ö€È@2èc ÈQ3 ^›42!ã”K\o`�aŸY`Ãÿ¼R�eÊ娇LŠ$1X³½îµg9u ^n Gä¸Í�êÄíçvu_æö7Yä>£®€u\kÏ`ƒÍ´õÅÅEYS¤qº:ŸWÐæƒÈù‰¸õ¸¥_Yã#ßím (™ =“™0˜`k †2Ò€Ò´ƒ�áìµMûòoÚˆ}VOí˜çT�|f€ž¶ÊÎ|îhMŽ /(ƒAF®…$0alÒ˜wX_© íùàvóÿ¼“qÇõ¸Ñyêï½§ÏìÈh»`›• V;1ò?ÏË«# 6z¬dDýüN;Wús“%Œ5ÚÚä5 6÷CM&“ÒŽôMŽÐ1 çó½ ŽºÐâÄÀ½u‚1êg0'Po�Aú}40ëv·Ý²-æÏ¶×v@ÎÏÏ—ˆ1Ï}ÜÏ}M&ø]çy€þ0p¼¶¶Vl’‰ë¬ñ™lw©ç1Y�A=(#Ïö¼ã¾¸_‚”ÂFPÏ¡�`}žó]^¢¹"bI×x¿{s™Mð9µ§m·çs“¶Á´+ýêó¹åmè7ˆLGÑvhQ"\¶—ØÏO¹ÿLÑŒ9>Ϙm�±,¯�2aï±dB‰r:¢Ê×ø½ÌÓôýcb»…½†D¦ß©¯ç0ìíŸSFÒ�N§8µ´Z­çôÞõÎd¹çϵ´�íˆçJë�×Y«ÖÉÜ›ûÊŸQ>–ו«®ó\Q‘F•TòRK«ÕŠ;wîÄp8,„ÆbqsæP³ÙŒýýý ñôéÓ‡Å@™„'Íééi¼óÎ;eR{ã�7â¯ÿú¯£V«ÅééiüðÃxë­·âéÓ§qçÎ�øÖ·¾>\:D�®~¿‹Å¢älÞÜÜŒgÏžÅh4ZÚ¨¸-*©¤’J*©¤’J¾¨âõ›Aiÿ^åPpq DLå>Ä×äëø>̬ç�örÇ+žumŽPÊÏt}øq•n €÷òÃÚÙÞònW“<<ÇÑ5œ+ßue=Ÿ×íþßà*åvyy/CÄÍÞ£Óé/bÎá~ ´'À û¾g?€×¼ÁJÀ5î[__/QŽ†Ê‡ƒ›tÈû“ è#常¸(à[­Ù§p�ÓÿAáym`Ô z† üZ¯­W¾ŸrR¶ H{¯æ}Õ‹ˆêFyM¶˜@Ì€ŸI>#úÊÑ!& 8ŽÇãôA ?³«Æ»õÛ¶ÁÑ,&{¼Ÿ¥ï=ò6ØëÈ=Ä6- ï£^.«ëbvÕ3øÎŽ‹9ÚÍ`gNe04_�Ø7Aà4j;!m xÓ¾ô…AMˆ<Û<뢉)ÛaÆ©íÏbqãëq—‰·»‰,¢—ÜÎüic")cô±�n§«#EYàg³ÙR”dÖcÛk�=Ú×zqë<`âœrg 9GgÐŽ´÷:J0ϫֽÑhTÎI:??�ñxív»8ØY#—…²“�Æ$Æb±ˆv»½t: ™Ùl ÞvÁã]t_a‚Î{®¦þõúíEîoÚÊs�ûÇcú ¢ÔáÌqßôŸ#¹Ðq÷?ïâëq½^/Ä\£ÑX"j<ÎÜ«Ö Ù&e»ëÏózÁsë)êa{“#l½6ôz…è4ˆ8tÔ¤ѾŒ=ú‰1t } Í‰úãýÆ1½v5yç¹2Ûë;ÏXEôzL o&¦Vé±g<ÒöÐÎy®ªH£J*y‰…ÅE§Ó‰óóóøì³Ïâ'?ùI1ü‡‡‡Kž,Š·¶¶b6›E·Û�Á`ï¾ûn|ùË_އFDÄW¾ò•ØÛÛ‹ÉdŸ|òI<}ú4vvv"âÆè|øá‡ñå/9ž={ƒÁ ¶¶¶b}}=¦Óiììì”pj/–/(0tyÒá>òÁ¶Ûíò]ÄmÈ>Ï0!e/:ÏýyR›Ífq||qrróù<¾ô¥/Å£G�âüü<þüÏÿ<†ÃaœœœÄW¿úÕˆˆBÀ=}útÉCãôô´äÇ�Ífñµ¯}­,n¼H \•TRI%•TRI%_4É´?÷ºðÅäLqŸS$ù]Œ3 ¸ê9N²H;c@Ó©Æ $€œŸŸ/¥s½3écÏf>çݹŒŽÚ00È»ùl:�–4@²2ð€˜ÈÉQKËébxéƒkêõú’g0iàîÝ»wî܉zý&…`£ÑX"çóyI³cb0{ö›ÀÉ‘9(§O è-·g‘Ns¿ÏƲîù@t_` Àgsò^LÚ �{GâP.ï]L^ÐÏóù�‹Žnll”Ô°ôúCªÊétºðÛ©À%”ɺ—I2æ¬L¨c³Üfô$تuý�S„Sjº¯Ðææ6®ósçóy™o.//—Î}‚aNÍcПSÆLgÉ,̇ˆ�òçÜã¿Ýö~¶#W#nÎ_ï÷ûeNfÎã8 G£GØ3ð=�Æ yþñšÕëÊç~cNd¬@ˆò™×-ˆû%ÛRú‚öÆ6­"¤LÈRfÆÝ*ÛQ‘F•TòRËöövܽ{7‹EÆÏþó8<<Œ~¿_B€!oÎÎÎÊ„|rrÝn7ž={WWW±³³?ýéOã�wÞ‰Ùlñ•¯|%þ×ÿú_%ræÍ7ß,¹{_{íµ˜N§ñÊ+¯ÄÆÆFŒF£²‰®×ëÑëõž[¬E,/<òB#ÕhÜä¯e¡JîXƒyaâ -{T°(a¢cƒq³øûã?þãòŒƒƒƒøøã�ã—ù—ã¿þ×ÿ›››q÷îÝøè£�â³Ï>‹?û³?+iû(_­vã!¤D}ïÞ½çççÑëõ–8y¨¤’J*©¤’J*ù"‰½0Yß9rŀ߄ŠxžP$óZÐdA&xæ*BǦt@ (±tp0‡¿ÛÙe`ÓO PN§Ó¥5¢ÁOŸá`�UÄC^�q�×áNÑÄ}öø�XNGg19…4›ÏçÑï÷c?¾ô¥/Åööv)`³ÛÐý PL}ºrÊ:¼…M*î±÷pû˜4¤=ìÑ?�Jy8Ã]¤ MZÑ_™l±žPö#ö°7Øïë3ààFÛ@zܳ/qäŠÿ6°•ÇRÄ-€•t§�Ê RÞ×d òúúº�3>C‚¿¯®®b4•} € £ùð"À£¿xvÅíÏÏ*’”H'êî~Ì6�±a¯qžÅžÓħÉE�ù 2f –û3y”Ëo2Ö{jÛêe›j3É`°œqQ«ÕÊØÞØØX"�  !­ÈNÛF“FÖ›+———KõÌ`¨ÉY÷ç‘AfqvÏsôú�>qöO®'d×P{Á!®®® ÂÙ;è2sF&ÿp>EÏs4‘ÛÉzjýwú-!¬¿ŸÑc“�Ö¹LœúÚ�¨Nô…ñ?c0Äh4*çêDDlmm-Ùæ*2¸@¥Š “à0ôåh4ŠÁ`PfGÝ1ïU‚³º�>g²dIb}㻬÷î“ ö{¬›¤¥]©D”H)×Ñ«~?$Y§Ó)eƒx²-á~Ήd\ÚæøzÿOùic�pݲƒG¶C™\£m=çd„1m§ˆÅb±Aä9[IÛÙÖ¸¿1ˆ#Î <‡ó�²]}‘Ýó|ä¾¥|ŽŽ¥=¸�Ï­›´»1O××vÜã×Ï÷œg˜\ÊýZ‘F•TòK«ÕŠ{÷îÅp8Œ���xòäIüñÿqlooƒë�‹&ííííØÝÝ�'OžÄ{ï½Ãá0¾üå/G½^�_ýÕ_�ÿý¿ÿwDDüüç?�·Þz+vvvâéÓ§Å úé§±»»[6}žW_}µlor�AõˆÑåpÁÍÍ͸sçNñ@a²Ê‹{6?<ÏŸf³¹äñÁ–2œ��Åk¯½£Ñ(Þ|óÍ 1ãìì¬äÜýÒ—¾~øalooÇ/ÿò/—ÉÃöp8Œ‹‹‹ q~~Ÿ|òI¼òÊ+ñÖ[o--€"ª(£J*©¤’J*©ä‹+Þ0grÈÎyÃk/äì]¹ e#eàÃzî7Ø·*b ÏsNÐx6׳Þ�ˆ¥z€2ñÀçu¶ ÞÏ{29�@ eðÏ€¸�‹ôì¹ À!é²³³_úÒ—âþýûq÷îÝ¥/�±t5íšduN'C›ÈpÀ¢ÛžkÎÏÏ—¢ ˆX�ÄÀ3?GX‡ vò>:ÞóX—ég“FŽäáٙг>ºïòr” ´õ5â6‚Â:`ÐÎãÀÏ\:A¾Ñ¯Œo{fãtÈGCÄ’† @ÛïÊ`–{lòN"ª#‹9b “Ö®“í’ÇKN·è~E—2¡ä1ëñä6]Ez˜£þ¹¾&vÝvÔÌv®3{Z@I—&¨Ÿ?_5Fs™ €ÚÆÙÓß©WÙ(Ƹ¡·Ž8U%eÅFxܸOù—߇~9Òˆþõóz½^±É9RÆQGÖÿ¦�ˆˆ¢ì8좻³ˆ#¯x¯uÎÎ&ÆŒtÁ‘^ŽFò<ãˆëØ QTãñ8f³YŒÇã�ÇÅN�Bm>¿‰zét:…hj·Û¥-øœsßpÄ¥¸¾Ó锈êÅYiü0‡¢çn;#ð�Ó7Ò>™ÈÀ¶ñ¿ XãM·ÎÌ�÷Œ'Û“ëëëb‰z�8σlw}F£Qé/ÈGꬭ­-µ åÌÑ+™lÈýoBÌ6Å÷º]Ý>vxAgý.Ö,ž“çè?ÏË‘¢ô‹SÝñ~ƺF¿Ð–vVà}àˆ.—çj�?;Œ˜œ1y…õë6fýÁnÛCÔŸ×5™rŸæ¹…¾7±éësÿT¤Q%•¼Äb²åêê*¾õ­oÅ7¾ñ�øàƒÊ€?;;[ +___/QFÓé4ƒA4›Í‡ñçþçñàÁƒˆˆxðàAìîîÆ‡~çççñäÉ“xðàAüüç?�Åb¯½öZÔjµò¼étkkkqttTÂAYð°I±g€#ŽX”±`‡åsržÛ‹¢ÛíFÄíyl ¼!ÀÈ2)onnÆd2)ááÃá0†ÃaüÚ¯ýZ4›Í899‰Éd———ñãÿ8f³Y!«>þøãh·Û1�Nã{ßû^™|MFáá·¹¹‡‡‡ñõ¯=þößþÛeQÃÂÃ}W‘G•TRI%•TRÉM¼Éu •œj%bu„¶‰¡,´2¡d 9âfxÅúàÊćÏÙ0I°±±±ä�70uó9>CÈA­V+ç;2ÚÜ4düŸëìß/jóLö:öÏf³²gØÙÙù…ÀzÄ-!Ã:)Ⱦ»»_þò—ãàà vvvÊÞ„:°æ'M %^è>'ˆòhÐOŽŠÉd}c`@q:�Æx<Žˆ(egOB }lЗ²™”`�ïèN&w¶œþ'âö¬‰ ¼Û³�}u¼�Çe4›ÍÊ>Œ3XMÈ’™0Qe=òXT†l3¸|~~¾”¦�ïôx´°7™‘Ï•¡]jµZt:�èv»¥ÿÆãqŒF£UÚl6 n´¹¹½^/vvvŠ>qNtÎØBTS¢L)/ºÍ;‡ÃaL&“’†2„s3‘h&ŒÐ«‹‹‹‚KÑW¤}5Ñìñnâ ;KDÜÎkŒ=Îòœ`¢Ë:||§§§eÜ0ã| ñNF›sŒï>??/äÜÙÙYy‘n&h¯ÓV‘I¶ey>ÀŽsxï¥o´[&ˆM®r/QSØXî�L&eœGܒД ’¯Ñh”ȳN§SÎàêv»åì=æÏ<Ó6€w0¶}�×,èžçÆs¼Ç¤Û–öÉcÖÏbêy%ÿ�þÑïU¤Q%•ü?&ÞøõûýøÝßýÝøçÿüŸG¿ß/xkk«ºv»WWWÑn·ãââ¢LÝn7~ðƒÄßû{/æóy|þùç±µµUŒÐh4ŠÙl?úÑ� ÓëõâéÓ§Ñn·—9}úôi|öÙge!Ùív—6À|^«Õbkk+.//ckk+†Ãaìîî–M‡=*0�õz½äªÅe:�F»ÝŽííí¥œ¤ƒÁ LFxZpÏîînÔëõ‡ñÃþ0ÞÿýrŽÑÑÑQlooG«Õ*“L­V+9PÙì�oýòò2úý~Ìf³ˆ¸1Îßýîw£Ûí–M3‹„J*©¤’J*©¤’/²8‡;`�‰� x¼t³ÏQ ø þòÌ\{¿rÆï°ã ‡A2î1ðÉZ—srÝ\g{�ÛÓÖ)u¸×äB xGö.5¨d Ô€ îÅÅEIsͳLÜQŽf³YRàðÜÝÝ�{÷îÅÝ»w£Ûí.yÔ:bÀÎd=ùÜéée Ò–v&£Œ 9ºÍ¤RÄí9 ègž@ä¤1�õÍ€¾ßmÂŽ>tÙ_DRN·}&òêõ›4Xìû:�N)«Ï´Í¤‡ËjoõUäý¹ƒnS§Jð5aƒ¾Ðoì™|&”Ó'YßHDßzüCÐÖjµçÒBæ±ÙdÏjÞgpuÔ˜A\Ÿ+‚^äv5i”ÉêܮٛÝ»ßyß™|´7º#žãt~ô�÷Üylð�9ú϶Ï.ç7·ç•¡[ž'ûiKÎG{öìY—”˜à`D”`Ûé‡ÉdÃá°Ì{èúnG‚Fã&-èt:-¤‘í±ûÛö4“ ¶!Ô‹{eüí<“a´ÏÆ~Q^tÖ$ÑHþ¤ DÿZ­Vôz½’"Ï) i�LhÙb{éå(TÊ:ŸÏ—RâµZ­b¿|¼„çv¯™ì|A}¸Œ ‡oƪu‡¹Òë6¾§½‰Îâ�&½£¿ç¶m¶ïŒ>ãÙèQvôÁ¾a;©¯me^§eR—ÏM ›„¢M³³{EURÉK,Qo,ß~ûíøêW¿ï¿ÿ~1ZxLu»Ý%Ï&ŒòãÇ�ãü�ÿ>Œ�>ú(öööâþýûquuŸ}öYüáþaDÜ›O?ý4ºÝn´Ûí8;;+6öÆ;;;‹Á`Pˆ ÓÓÓ²©™Ïç…Áßßß��>ú(¾öµ¯Åßÿû¿C÷îÝ‹N§Sùä“âIÅÄq~~ý~?£×ëÅññqôûýR®õõõ Ñjµâôô4¾ùÍoÆßøciÑnC�7•TRI%•TRI%_\b]q “Á6èyÍÚ^°¬É�cÐ=§9`0Y�A;:E,{Óš„€<à>ƒ¬ÙÄûœÿmÉÞ»®G¾>Ò/òH5 ˜“ %<¯$ jf €�tØxpïììÄÎÎNýLŒü1O?š°2bB°›=ý Ës®�� "Êß&({È.—ß`²}�.ƒDû3І8Å@� êÉ»ü¾¤Ñ�U‘g“x¯Ëiý7p|}}“^P °Í„ 2Î{¤ý2ÈÍsisƒp´¡ Ž\vë›ÇuÊD0ä’ILt›>6Y™Sx™¡<”ÛeÏöÍcÖ@~ ©gGè}NûÛ&úpuγ¬7n[~x1í°ë3¿hoÈ$ÆT¶%¶I®/z�ÇXN½fOx㹿ÁH|ö2:Íø‡¬Àœ›œw™øŒ6Ï:MÚ/{þ�ÇãR.Hfëä¥ËÅ¡�àGG¹—{ˆœ1qa½Ïö…ötÛå¹/“¢Ž4ã~°ˆàf³;;;¥�···c±XgÛ�L°šT†Ü ‹9Râòò2¦Ói—l;&͈,®Õj1�‹ðh4*Q%¶ô3mhb9G¹Ñ÷ž—3©B?S Û!ô{}}½¤Ãw¢/ˆötŸÑGØ®7q��s*>úË÷“F”>6I™±,·u ?rÔ$ïµ=ô\„óÑx.ã“2Ú)‡Ÿ�äˆ$ôžû¸v:�Æp8\"=~IH6"ðTÆ iÝç¬Ûyý¸j kÝñ:ÄöÅs¢×¨Ö¿Uã‡qÎ;m3Éì6²T¤Q%•¼äâÅ#-ßùÎwâ'?ùIloo—…k:�F·Û-mm-†ÃalmmE·Û�ÿþßÿ{|ç;߉·ß~;&“Iü³öÏâÙ³gññÇÇþþ~ ƒ˜ÏçÑívã•W^‰‹‹‹â!3�Ncss3F£QÔëõ’Çw¿�D[[[ÅïîîÆG}ñþÏÿ‰·Þz+ïjÒôø¼ ô}wù§Ñ§|‡N±CO þyl™ô0ȇޛÌõ˜päÇ/ª·ÛÚQ3ô&A(‹‰;ôñ,ÛžÜ?´·3H˜€B§íbÀÕöÃc×:ãß”Ù`©uÑ 6 Ù$¶0{ägRŽòš´«Õj1™Lʾ‡SÚDøý³ÞØ9 ýèè(†ÃaÌçóÙc;ypuuU"‚¨›uû†47)é¨öä %Ò­ú�Ô‹ë ·ˆD¡Ý´‘ŸaR™>£.ÌÝd¾Aw˜G±S\OaC3aï<Œ�F‰p ”ÑÏè1ä—õ…þÌ`Oö~qap�2P'ôÖçë8ŠXNéýè.ílàÓÏ5HH Òo×iKêBÝ!C777 Ùl6K(öƦ<Ö5“6çÙsžïÑtÐãÚ¶Âmλ\ç͘�;íI¸Ë÷ŽêâÇÄ“ -žm2†þFÑi§t=x¿‰S“0à¤ñºººŠV«Uêâ”n¶¹ÖYC±±¶Ù¹�²�˶ÕöÐghEDI‹æôO8…zŒ9jÁ‘ ØÎ3¡L­�Ô�F£`´%ÑwD5�Êʩà g¨3gÂa‹»Ýnq\嬲ñx\²œp>�Û‰öôÜåörô‹õ›¶1hÏÆ–dÛä¹,"Šsí“'Ob4ÅÚÚZÁfWD§1Wb{Ð#tæìì¬è�íG»Ý.zmÇ¢Hx¦í#sŸy.6ièysÕë ΀–Ah{âÛ]4€ @f€Û@¾·!€¢ßo0<î÷#™ð4¨n6!cpÞd‚Û€vÏúJªÈLNÙCßã�khÞeBÇ€¼Ý �Ð÷m·Û�^¯WXK“4ç™üÍ„ýå²ä±ÈÞïptƒûuh¢’>¡½MÆd6Iëˆßc±÷8c d€�{]7ú›Á³M ð¹ÛÅý˜u8_Ãói{ïéM!s8SÈD£û“¾t[¯"‰ÜÏô»ç ?Ëúèñ°ª-Àüy§”ǹ”]‚h…,Àq–2t椲"Â�ÈÎù|^Ò:’%e0Äp8,xÊl6+ãÉ$ª£M|¾2åtô¤Œç›¡Dš®N§ý~?jµZIíæT^qzzWWWÑï÷ËücPÛÑA&΃Sp½^/Ü|>�ããã%=h6›ÑjµÊÙ?ŽÜ ⛎®¬²+ÙÖÙ®p½#>lwÑ·�õÙŽ'Ö_ˆæÊ|ž åç}Å^c«Ð]xô·×Œ!#HàV«›››… ä‡ÿ=W{\Ù†š Ïézm�S^;9bËýÂ|n't²Žh5c�<›ºCÜeæùÝÄñÇýÍäÝŽzÃ.;bÝ@×L6£�×××1�#ↅèsôýèÈ �#¯ü¹õÐŽ4v¾`nÁ¶Y*Ò¨’J^b™Íf1 ЇÀbq“»öôô4ºÝn4›Íøä“OÊ¡„x ±ˆ�DZ»»[:ï¿ÿ~t:�xï½÷âƒ>ˆétÑl6c:�–ÉãÕjµâþýûÑjµb{{;F£Qôz½8::Š«««¸sçN¼õÖ[Q«ÕÊÂ/²n·‹Å"¾þõ¯Çööv”IàÞ½{ñúë¯Çh4*žögŸ~úi\__ÇoüÆo” ãh4Šãããr-‹(ˆ«Édív»�B}ôÑÒB4âÆx¶Z­¸¼¼ŒO>ù$®¯¯cww7NOOcsss)Õ‡‡‡ÑívãóÏ?�_ÿõ_�7Þx£,~� T„Q%•TRI%•TòE0>‹ÆÑl˜íñhðÒ@¢ž è:äÈ^ûöÄÁãr €÷�›ß›îˆ[BÄŸØfÀÕ€9…�M§S2(Éÿ———ÅÝ  ©STÓîœãIô‘÷6˜JÙ lœ¼òÊ+ñÊ+¯D¿ß/km;°EÄR›QV<¾ ™¬!…^±|¾¾¾^ʹ±±QRŬ¯¯¢!âp¸‰x>ú¿V«°Ž¶q?ALÕëõ¥È§Ê¡}(çbq­`àÕýš‰Mïöò^!?Ë} qhÆž†ýŠ>ëáææfñ2·^{ܘˆt ã¹å3a‘σÂs�4æŒ5ˆ¤N§SÀ;þ21c²ÂŸC ¢—�¤ß´±Aj©?à`ÄmÔ™£zL¦ø=™”äpyîAóLigÊ^¯ß¤„clˆLõAì´«ë–=û!¸Æä­Ëé6bìò>ÊbÆnÛ¶ÜBM§Ó’¢Ìzb ØÄŸeò9“§]Ñ{ë¸u'�W�{Æ9užÏç%ÂÇ 3ÏÀf»îèíNÄÀ4zµX, ÈÍ;íÁy@èøùùùÒ#×ùùyÔë7Y_ˆŽ@§�Íiшtô ¤Þl6+ú(NÝçóy ƒC”è`0ˆ£££’ÊëñãÇÅi;9a’[j}à7™Å„]#©ÓéŒÇ¤†É|l Ø62Šþ`¬8‰ûéKGê o>ÈDåà>RåaC™Ç¸fÞc.n·Û%;s¬¨=ŸÚ:j$Ï5Œ‰­­­â,@½[­Vôûýrÿ£ÌéŽ6³“zg;™ç,ŸèÏ('k/¯QøÔ©óøŸ¬HFD›aƒI}H_Û’>½â{ˆI"-™+�F!(!z(mD:ßlϰõ¬O“èÌx<Žz½ív»8ø3.9ï ûA_x~uýòúÄ©KMÚ{®6‘n©H£J*y‰…({aýÅ_üEüð‡?ŒÑhÍf3îܹ“ɤx«œžž#×étʤÀdP«Õ¢×ëãDþqBЙ8ð[[[‹ƒƒƒ²àb�{~~�?Ž�?þ¸xÆ>ýÆoÄw¿ûݲÀ8??�oûÛÑl6ãÑ£GñÙgŸ•È% öææfìììÄ·¿ýí8::Šÿïÿ}lnnÆÁÁAŒÇãh·Û±½½»»»åpų³³�F1™LâîÝ»Ñjµâää$NOOãøø¸¦Iåts“ɤ,ÜŽ�� ëÎÄ; Ê„‡WÀ×¾öµˆˆxüøq´Ûí%oŠŠ(ª¤’J*©¤’J*y>5][MP.Ø9_=ë_6Æ€‡xûpôˆ[/áÅbQÀœ�HŸxCZ”ëëë’9U`‡�uÀAÖʤH!-2g7<{ö,�Ft:�°ÆäL%Î eýív�Ðh6›¥�"b‰Lét:%*€PÀonGRØK¹ßïÇ�;wâÎ�;±···tŽ ýaïm“y™$ðÿ^Û—ÿ­&¸ÏÀ†=š ä“ÚºÑhÄh4*{–Á`Pö3J–ì­k¢�Ì1ŸgOr_CÝù,{°3.œ�ÀãÄíÐ pétL&}Lº­jgÆ�õÚ$Ï‹ˆ%@ŽGµôz½¥þÌõpÛ;·=….wŽö0±ÊØ]E {¼ó|®åÿœ2Ž6q¤‘ଷ;�±Ôƒ{œr’1ĵ©ßÐQz�€ŽˆâL!줗½÷ "�ç,÷�uÏäõÈ¿±Q¼;l=vŸçs“Ü^¶u&½¹ßíÅÿ&v±¥ôí…�Æ¢»O=Y!a=08ÏߎÂð¢}(»Ÿa�ä»ùü&Í?c-"žs(€Ô!ºÓgÔÇõçoŸ¥ãè Ê@D÷\‡Ã8;;+kÀJΉ,²�o4%•žËÃ\�ÉsÊŘÁ¾SHHÛfG_˜äÎöÇBýh7n'î£�l=V²�‚à�à£NÔÕsš æjÊAû _ŒþÖ5Û`Î+ô\…Ã:äµíe»çˆ¾ì¼â÷òwn“lKœ5ˆŒG�¬”•k�&�­´=mìÈ#G¥Ñf\kŠF£ý~¿´± >Æ>í‚}£ÔÙ©üLV“¦Ñ¶ÍNEôinÊàyĺG¿`·x}mÞcÁÄb^ øgfY‘F•Tò ?âÖûé×~í×âßøF<~ü8f³YüÁüA<}ú´–ÑhTB89x��!Ôv»�F#îÞ½[66XÓé4ŽŽŽâòò2Ž��‹— �³³³xøðaüøÇ?Žƒƒƒ˜N§1 â�wÞ‰>ø þÕ¿úW±¹¹ý~?Þ|ó͘L&ñ—ù—Q«ÕâóÏ?�µµµxüøqü§ÿôŸÊäwÿþýøÊW¾¿ò+¿ÿößþÛØØØˆï~÷»ñ¯ÿõ¿Ž£££øéO�N'ÎÎ΢×ë•¢®Ö××KZ:#³Ù,Þÿýøë¿þëây2�Nãøø8¶··ãôô´�Bö:©×ëÑï÷c}}=z½^¬­­ÅO~ò“Ò¿ýÛ¿½^ï¹ÅJ%•TRI%•TRÉY vxÀòÆòÆçTx3Ì3ìýëçPt €oƒŒ­V«€±lÊqâ½ö²`všÖ¬lî!“ vÖÖÖbkk«¬yÀ/ ëÍUä…×£jÑÍÃoÎC0X±Òï÷£ßï/yZŸŸŸG·Û�­­­èv»%S÷Ó™˜3 J™¿\fƒ¦´'¿ù›öä‡6£¿íBÙ2pkð,“«j_gâÇ`;Âûhs÷› !ï Äeà}„X � Dš˜Ë´Ëƒ^0»ohWÈ"“2öGG"¢ì)—Óßáb]Ímà>vô À8ídz÷=`½ÊÀ™ûÑã2�ûhKì@öÈw´miðÑuYÎñ�õÝï1á‰=Lv{ñÛQ~p‰>©×븇\‡å\û¢±d�Õé-sj¥<~øÌ©× Š(;ï'ºÅD± “`~&e5qk½Ém`’6§ê´�ç¾N§SÆœ£ýþUã!ÛÆ‘}ñŽB;??�Ñh'''1 žtvv›››%5NŒoÚ‹H ÛrÆu&÷LGÄÒuõz½h8bÔëõ¥ó�LØ­š‹hkžO_šdå§°³3QONkƳ•f\‰thnWØŽøqùh?�]ô×ä¯uÜóí‰Ý±.;Ѻíù…ÈÏ=îÛ]—ÏãÌäÏÀæy=fRÆë5ô:§¢ƒ,�è…,¢­iÊkò§"æ[8òbòÛ‹]óºÃëGæÏÉŒ/÷¥ÉGÎ?3ÁG¤•Ó9óëd#åv›ó.ÛiÖŒžL~"iTI%/¹°hÁ°°èzýõ×#"âÉ“'ñ{¿÷{Åk«Ñh””tµÚM$a—‹Å"NNNŠá ñÑGEDÄx<Žýýýxüøq á真£££ØÝÝ- ¯Ë¡«¤¢c�;Ÿß„Ú¾÷Þ{ñÙgŸÅÆÆF´Ûí8>>޵µµ8==�Ÿüä'ññÇÇãÇ�ãŸþÓõz=NNNŠ“u»ÝŽËËËh·Û¥\�?Ž£££âu㿵µUŒ)¡¦¯¾újL§Ó²à€dº¾¾Ž»wï–ƒéyç¬(¼F¿ûÝïÆë¯¿^<¾ðlä ÑJ*©¤’J*©¤’JnòçVû`^[€lŠ9Ü Á`³#_XÏÚ‹Ù ·7ëµZ­Dö@ðð S :óÀ}“lÞ‹›Èw{ÿß¹s'...b4=—g>Ÿ—è‚ìåËuxgÀ ;�6D8UR³ÙŒÝÝÝØßß�ÝÝÝh·Ûåü Ÿó˜âÌì8š”À p½Él vÔ„ŸCNDD±}¬ŒË™àð;üt„µ@¶5<;â–ü01LZo±¹^?X¿<8zŠÏèCl³I§Íc¶çü s^[1f�zŽ6â¬ðÙlVpCÚR.§|tÛ³V‰ˆ¥5f§Ó)ã ¼�¹Œ5—ím繜ºQ~lëÚ$GQÒš¨¡~žc¨'}M?;r΄,mã¹Ó)­»èD-kRÏ”ÉR‘F•Tò ÆÀ ·™üõõõø;çïÄŸüɟć~¸´ÉfÂá¬oÈ͹··qrrëëë±··ƒÁ ¢ÓéÄññq|ûÛߎ?øƒ?ˆ7ß|3ž}wî܉÷ß?.//ãÉ“'Ñn·ãàà ž>}£Ñ¨ä\ÞÜÜŒÝÝݸ¾¾Žû÷ï—MéÙÙY9䑜£‡‡‡ñõ¯=Þ~ûí¥ô!öÆ#Íâ…g%•TRI%•TRÉIb ö�á3­ù|^Öh^¯BFŒÇãh4nÒ½±‘gcŸ# Ø,ã•vvVÀuÖªQ@¨���èõzK@`©gÚív¹’ˆøggge]:�£ÕjE»Ý.žÛëëëÅ{Ú)§ `ÑFÂ+ñÀå3Rf½Ìy �H�N'vvvâîÝ»K€ ‡:³�0èÑï÷£Ûí` •w±Ö§í…oÏo1ȪÏí- ™ÈÈ ¢I¶ˆXŠ0C¯(‹½¬³·tÄó‘O€('^á|îó¹‘D9 Šûyq Päpä£ XÑ>¤+³îÌbÜÑNNõ– <§ÑôÌÀ´ÛÏ*H£ÇjµÛH¼Ð�’)—Çd…ûÁ@¦û‰¶uä� #÷ƒõÌúgÑú˜û±þp-i‡Ld»�±]è+`2õ'½¼õŸú»­^âº_ò8s�9 ĺj’Í ©É\Gª˜˜¡ÝìÅIaÂÕ)ÑŒk¸ýh/ÚÖméqϘó³hO“‰&FMpÑ.®ŸAaRaQoÎ\³ ¤à4ÂÖ]ÚÕѬ´$ #PºÝn™ iGæë #zhcÚÓcƒv0áƒÝ&òœÀ58Ûrž´çÚÍÍÍr¦ÚÖÖVÉÎùƒƒ­ËbÂÈã–¶¦žè)õ‚Ô ÒÓö5Û9mÆcX˜X¶Í1éf ß¤—#péŸYÇš½µÎyÜÚIÁN̙Р]o?ÓÎŒ_Ú”¶†œ¨ÕjåȆv»]Ö6´«×IyÞñ†.»&k¹�c1ºÝni3ÈÖ7&ˆ½NôZ]ª×ë¥�9‚ôºÓé´Œ!ã¢è-Dufçñí²C¾@B1.|ëUt•gX�Ðéüõ1ùËA>_kBœvB‡µ%2ÐD¦çF¤"�*©ä%~ÃÐ0Y’Ç|>ŸÇöövüÖoýVüÞïý^Ìç7:’óœÃdñlÈ“@·Û-“ëo¼ÿäŸü“ø—ÿò_ÆoýÖoÅùùy¼ÿþûñ›¿ù›ñýï?~çw~'¾÷½ïÅ«¯¾½^/¾÷½ïÅ;ï¼§§§ñæ›oÆÏþó¥ %ÔÇãèè(ž>}ZŸ/å=¦ 1üÓé´|–7•TRI%•TRI%_aSËÆÕQ€c€Gì À8":œë Ú»—�x½^/ ©ãÚívþUò!à˜÷ÆžwR?ƒç>r©V»�  l§§§K@ŸËÌó¨7ïb�Á±µµµèõz±µµív»€z½^o)ÊÃý`ÒˆvÃéË àÀ ýÃ3 X#¶3ac"ÑÀwŽ ˆX&D¨?u�üÃyΞûö^w™øÜ¤í�×òìIˆÂ¢ý€ Î2x¶Š 1ð¸cvg˜äÌžÂÖI§u¤ èè£ÜYp€Ã9² €-“j ݆è©+ßsSD”6äyŒIëJ&,&¡}MŽ®1¹d½D×m/ >,4 —Û ýAô"ß3Žm p€Äž}ýååeéƒ<öqe’4C´Å*¢lU¿  ÖWë Ï&ÂØvÔéÓl[g³Yù.¿Óe6‰šÓ”Ú>ÒöŽÂ0xn}òx·ÑÓöاŒËmap/~ÊŒŽðl×ÉDš Lô£®¯¯ (= Š3ΩÜ&)L*Z÷­¯”ÙvË‘BüØ1ïtm€î­V+úý~ìîî–,/èºçyÆã–¶‹ˆ’ÎóvÜD¤çe—Œ+“Ž&[­ÖR$ckUDˆÓÖÙ&™xd,R2Û�Í÷ئÐÇÖÊ�>zÎr}�£F¼â9ÔÁãr†÷{¼™è�$1‰‚N­šÃMl{,â|0™LŠ>ƒ²f‡emBY&Ú3&¯ Çx>)O‘ÎúËÏu?ñeõ¼èTwž7½6µ�gþoµZc4Aíþv’çï¼4 êHKúÖ‘Oè ýc»å5@¶ –Š4ª¤’—XX|GÜN¼WWW1‹‘¼¸¸ˆ_ú¥_Šû÷ïÇ“'Ob2™,MÌžñ(ét:1�Ê3ȃþá‡FD”ƒ¯®®â½÷Þ‹ËËË8<<ŒÉd£Ñ¨,Ö˜´¯¯oH\__�Ä׿þõhµZqçÎ�øàƒâÓO?�ÓÓÓ’ïÖ^U]1�ãòò2ž={VB~ÿóþÏQ¯×ã¯þꯖ6TNWÂÂ�EÔöövt:�b¤™pŽŽŽJ=â;==�^¯Ãá0êõz9´¸ÝndzgÏâ�7Þˆ×_½ÔÏ^g7“¥³dRÏÔJ*©¤’J*©¤’/‚@6ÀÁ¦™µÿCR(Çû�h¢’VÈoOψ[ÏKÖˆÝn·€àNâ5ëE{U˜sª9ˆ™ˆ(@`i§Ó) k§Ó)QE'''ÅC›�?m8`pÏ€){"nAXÖÃív;öööâÞ½{Kžê´=€ ;Z@Úí`ÐðÛ SIJG±£�hƒ/€‘¾`ÅÄ`Œ×òGØ!iÏñx\úžµ9ï2iÐË:‹<l›L&Å� ]ÁÃ8ƒÇÙsÝ ÞÃPóáÞ¼ßg3 ™lrÑnÓU€£ûƒÈ<µ3Л÷”™£= êš�‰ˆ¥TƒK:j`ÛûCï·,€¹0]G·=u€´ñߨ(ƒ¢´­ Yôĵ÷×&¨'6ÍýBª ö¾D&~ãÊ^—ñI=Ö[­ÖR IŽÖMG)8„¢ ‰¡þè"c•=9õ! ¤R¼ƒz¡Ï|f²ÓcÎNHW‘Ñ vTÍ„×cçɼÂ5¶c�F<“è…L¹~�õ]0�nÒ›f½¤�rÝ8›ÒçTH#“6Ì™ÔÁcž9Ý <è5v†q ñGßx>wét:åÌ<Ú€È\“g´'zÀXÅ@f`ûœîœ…ˆ/úýÀ^¡‡èãŽþgž£ŽÏ´;ï๿Ö1ڃ똸Ç:n{h�È}e²×z ÈxdîÎï1ùÈø1)f=õ;øÛÿ;}¢q;žvYe‡±_¤†«×o"¿;�NÉ|D*FôÛŽ^۹Рl¸ç'¯k˜=ç;]›Ç66ÒD¯çÜü7ºÃ3qºÈÎMØcG�Ù®A»ôƒí%œ6 IDAT¡£…qÀp[›åÿLR½¨ß"*Ò¨’J^jY[[+ÏápX$1™Lbww7~åW~%þÍ¿ù7Ñï÷ËqlšMòÔë·‡ :Üÿââ"Þ}÷ݸ¼¼ŒŸýìg1�b±XÄþáÆÚÚZü—ÿò_b8Æûï¿_»ÿá?ü‡hµZñÃþ0.//coo/vwwãõ×_/^dWWWñÕ¯~5=zTê€ q~~½^/z½^™ØpŒF£8>>Ž­­­ø‹¿ø‹ØÚÚŠ÷ïþ]´Ûíøþ÷¿_r³À�ˆB(ap 0é4›Í8<<Œ­­­b8Y¬w:�â=0ŸÏã›ßüf˜Ä²çš•TRI%•TRI%_d1�–�fƒH}qÚäk6›Ñï÷#" `´±±Q¼†Y“¤p¤ÊîînÙä;‡>gùµZ­%©v»½”vªÕj•( ÖÑ8&µZ­ØÛÛ+Þ ×××ñäÉ“èõz%µ@f€²w*kh€ÃÅâæppÞ¿¾¾[[[q÷îÝØßß/ÎOx»Huš@Ê@€ ·§Áêb Î`/`†Óü¢�2¨b‚‡3Uq䢭 Ì Ž~9‹튣bPŒ2ûýü�.ñ.ê ¨i@ß$€*ϲؓةuÖbÒÇÏñXrÚžeÀŠ>5pk0É€À¤ƒ\^Õ~Þ§$tÛ,C¯ tQG®åùþÍߌcÛ�¬¯&F2ø¹êY´ \Ž*4qᶘö9[&°=”]ücï�ç|D”6§?°3×××Kç\4�˜N§¥]9ó‚6§ÿÐqÆ+ã×à=ûZÞE?r¦ˆI#“¥è/ûoúÀv =÷8"½¦uÁã9�ÓLTÒ–Ž³¾› Ëýhà?�5Û4“&DQQoë›Ìà$teÈn‚r±¸9ƒÎä;6b<Çh4*vl6›E­V[r€pz1Ÿ§â¨ìó%÷û<˜ìTAª®F£ñœÃ¯ë‚.3&m7�N—ÈÚÃdÒ*g >w$Ïd2)$$åÇÂQ.gD’ÓãÀã–ï_D,¡×�ž¿3A˘¤².øwDë"b™(2I�h:™LÊúÛ÷Ó€®¿#;2ˆï>[Eúˆòæˆ'ëšïç¯ï)¤�¿ÃQ àÇ€ÏÔ¨B?ÝnÞ§L¦ìè‡Aq§íÄ2¡â¨·ï19E›@ò˜Ìà¢?[E®Y§iWÚÑ^êè·Ás<Þcñÿ*0’÷zü;ÚÇħõÆ:æ645IçHê‘æ=9gÅÐ7N=hÊéÚjµZO›Íf!ašÍf9sŒqh‚›HH Î ¡Œ_!… dcKLªx¬ñ žo’Éã ü€ö¤ ÖmÛNÊAŸADe"ò’òæ±eûNfÒÐ$�Ëè0ëÏs Hÿ¬ß�Åäþös=Þ¨+v“6�ÇKúçhDˆA“Øië•ÛÞĨÛG#N­AO{œŸŸ— 7”à™ç¸_ù¡\´ íîs`Ð'—Û6Œ1èˆ5%ô5 ¿íÑ/²!è?¶ î3ì3ë ÞoBrПç+î3Aäˆý\ïï|¯ ~§YtT ÷ÑØÏ!8Ms=mfÒÙ‘—vr1‘jr„ùÅerVèˆ($9:ŠÞy­”�ìÔ�í�F…ü¦\`Ž™HFx¯ 2®óÉs�I›¼nó: ñåh½þøãç6¨*Rgä t<—{bss3ÆãqY _^^–to�L¾ßa¤ù—óù<¾ñ�oÄŸüÉŸÄÚÚZ¼òÊ+q÷îݨ×ë…œ ±»»»´±þÚ×¾�?Ž���øÇÿøÇü�ÿ1ž>}7 ¤×crfñ¾X,âóÏ?/mõ?ÿçÿŒ~¿_ŒqDÄh4ŠV«Íf3>ÿüóØÛÛ+iBÖÖÖâüü<šÍfyW£ÑˆíííÒVÎ1m£±œ;9¢"�*©¤’J*©¤’/®°.Ê›cƒCŸ ±açBÂB„ ØÀŒe�w»»«*¯U•—wQzN>ÿèl¿ëvŸ#•ª*ó9—8qâü~qIsrrÃá0&“I\\\€Ãà&åöö¶¤P&½à2v+m´7é±ìÑK;I™bð€„>á ®¹»»+g_ÌçóFÚ/liR16kŒ/¿sƒ&+²Í�ºÞ½�½· Be2$")Â""†Ãañ¾w´ˆ�*Ë•½å-¯Ç¼ƒMJ1nÈŒ æ@|Þ�¸�IùPË{ö†&Ž�RîWî¥îîSdÊéíÝL›<>Ç~{ÜÝ�‚&r=¹‡CƒÌô¹³DzÏÍØ¹N €ñì‹=æô‘uûKöãÈ9¤‘I'ƘúÓ®œò r‡ù�œ[ç2î¼Ûcky`Žrsô™1ŒžË{_ÏEÚJ� ãS&>�²�úY®ùm™ð8± à�Ž%¢Õ©JÙç{±nyþÑ&ú2Ï¿\LZS×ÍfSÎTfM"CL&»y5§§§1� –‚N6‰ �ŽÞôG†rD+kŠÏJ‡…\±®08mG�£ç$ýÏ{ù;“$Ì™7ô²�ÆuQÁŒ_^L€SëàLHx=t›¨g& �=�Ÿ™l¡m^ß¼.x³üåuÔ¤WÖaNoHáè “ È%ýìs©;×,‹Ò>G^ù®—�Ú!ký·ç$dR·Û-2ÇøxŽgÂ?ë6ޏ Zœâq2Éd¢Î2jBݤ!ëºç’çø1»=Äs.Güä5×dsÊØ°eÉä¦õ(2íqw)•4ª¥–·¸0¡aäIŸ6™Lʆ3âà�3›ÍŠQÀ†ƒ�”v�V(ý~¿x8¡,y.¿Y´Ùp²@;²i»ÝÆþáÆw¿ûÝèõzñÃþ0ÆãqüÉŸüIÌf³ø·û·xôèQüÙŸýYœœœÄÅÅEüä'?‰¿ýÛ¿�?ýÓ?�/¾ø"þú¯ÿ:nooã/ÿò/ãÇ?þqüìg?+ùåñÀcóKTíèõz嬢ˆfJ�ñx'''åн¯¿þ:NOOãÕ«WqvvVÅñx¯^½Š÷Þ{¯äYµwF˜S‰xñdA÷øÕRK-µÔRK-µ¼+@޳vØØCæ8…À‘Ax>ÇÎrz4ì0Ší°ÍfË岨‰¶‰ªgs½^¯‹W? `ÁÙÙYƒ ‰ˆ�FÅÑ©Õj•TK\7›Íb2™D¯×‹ÉdRÎWÀ© P¬ÝnÇp8ŒËËË×Îd¬ÂŽ¥¿2D½úý~\__—~´w½Ï>‰ˆxC¤‡�cËÚKÙÄž�rGXð\ÒZ‘rÉ€ª —o €@e „”C­V«œ�ÐétJªA€yî³Ãòågò·Áú…{ñÀÇk({çÈ“VÈŸÌ6ðäȹc„�A~~ÛIÎmt¤TîoïWìn ÉÑg­x2b@Ï@ª �ˆÇÙr&rù!›‘õÍfÓ¤M€øYèæ{eÚ˜‰mƒt–™ÍfSæä0mk·ÎSs›©¯=õÙŸ·Z‡´m¯G_ì÷ûƹ)Ìsæ2i)™;ÙÃ>Gª™àcü¬sýãñ§O'“I¹ß÷BVpóÑÀ:Ïå&_säœÁR“Yž+¬ ···e X­V±\.£Õj•ºn·Û˜N§e³V,7èÊ8Y¾ùþôô´A� -tµ£®¯¯K?¬×ëœ3_IùÆßôÕp8ŒétZÖ ôCÖ[9]ÍZëùdÇ¢@‡ÃaŒF£²F\__Çl6{mÝ¥,S�O›Í¦¬¯¼ÓýI±~ ~|fýk¹vzOúÙé:y®u•‰,¯5–st3úÐ)%Mæõ™¡ž&ÐG€×€³&Èûϳø�Œ}÷FD±�%ôqD|¢_¸blu<�Ý/)é» ®eoöˆ(² f›Ћ} Ÿœœ”~‡EžØg £€\ìƒ�ƒa³Ù¬‰e0Ù¤m6 E=í!Ï{8�€±ít:…ô¹:ì‰L,åt<Œ_’x^Ú®3ßb±çô¼CnMüX–LÐè‡ý~_ÎïâÙž;´GG®G¶Ýx3á€\ÕÈžÎã0ŸÏ㇌P'œD×.29o]áw ?ôóíímŒF£Øï‘�èN©f§OŸ€ôN;FA>è3=ÑM]y6Q/Û�/’ô%çÍÑžL�èw$BŽŽrÿºþüè5�Ç|�€1ÉêôXÌ䜢ÝnÇd2))á(ÜkRƒye½Â¼s²AÊNÚFä©Ç‘qc¼!HìT0�b<—µŠ¹aÙ‚¤âü?¯€ë�&)­“ø¢¹„ b<˜G´Åë(ýCûèã|¡‰0žO]�;›ð>;O¤_­V¥±/Ð]¬}¼‡zâ,l²�ùq„Ì¡·¨™x�Öôœ#T+Gࡳ‘qæ5ë”m "k/ôÑ=`r�¦&˜ÛŽL6©N[²­Âzh{ 9Fn¹Ÿ:!Ÿ\o‚ñX¶2Îýىݎ?&BÐW¶³½`�ÀÚîö£ƒ €@ÚÞëõŠ�n†þÊ^ΔLdÇ-ï�èO;u™lÔáËU»Ý.‘ ¬tè Ãý~³Ù,"¢öºÔÕuÏÑ>¹s” ãhÆ º÷‡€¤ƒVö6¶c AY×�qõÿ\‡ ˜LôDD#êË@Ÿ²ý~_öjÀé[ú�wYæ¤y®ç*cëˆDÚàûì�îwGDcZ‰6â9�쥡@=I‡dowׇyÉ3¹Ös‘vB|9�•#Ç›=>�Çq~~?ûÙÏ››N§S¼FonnŠÂöF¥_K-µÔRK-µÔò.—ápçççñôéÓâqzzZì;“Flnkl£tEÒ]ñw2�q PðF&­s¾Ç6!›l\Þüc�s¸4696©�EG�Po{VG4ÁfC��i{àÂä‡I#žEò,“=AŸQå~ñÜű†þç3™•Ç,G!/¬î_¯&ºßd³q½I,Î`²Ó�1DŸ¥hÆd´Ûáz»0W¹yD§d›,ëË'8dD”è0úÛkš×"Ö*žá9b]ç¾¶Ì™TC†;�Nãl=§Ytä›IûˆJÕRË[]ì�rbÂÛàÚn·%×ìÉÉIœŸŸÇçŸ|ðA´Z­øæ›oâùóçñìÙ³øòË/ãç?ÿyÙ$¶Û9—ñna„—·¾õ­øíßþíøì³ÏÊâÅæcs:�–:M§ÓÆæ {#°P³‰±‚�8¥tŸ}öYL&“âµuqqßùÎw"â!é§?ýiüë¿þk¼|ù²‹Óé´,,:§§§1�N ÜÅÅEL§Óxï½÷â£�>Š�?þ8ÚívüÕ_ýU\]]•…Ã){x±©¤Q-µÔRK-µÔRË��(é÷ûårl¨ˆf|3ìA6ʤM3øÃ÷ñšm–Át“HŽíŠ} �ä(äƒ_<@¯h“&›ìÅÍûí1šífìiú,F�F<ÓQ¹í|ìQm;ÖQ'.ô…�7@Ÿˆ‡tÚ�;Ì2æ¨Ræ½xñ¢€‰Ds¹ÿýã6ÚÙuÌ邸‡þsz¢�œ‘!{¢;=™ÉƘôŒî#“xyÌ Œr-@5à{BKž¤6ô3`æ¿H à¥A)æ‚-÷‡I éÈ,m0¨ílo& LÀîv»’¦‹Hˆht }�ç'‘ô‰�~ÒzOçh@ƒlûè/È!"2ˆé~´8eN¢ .;eß9âŠÒ‰±—g_ì(€X¿]dr›>50oýk9e¬y&Ïl¥? B[§™äå¬9ýL`Yzon½æá�ü°£‹ Ÿw»]9ûàÚíkµZ ‚Øäƒ×3÷�u‘‰Î ‚lq„Že„v³.r�õ¨Aa&äGYƳ×ëÅÙÙYC[®˜��]Œ7d½ G}Yî!ÿi?x8d–çmòóøÞd°S'‚yž¢—¸Ï„µÉD;ðnÞéõúþþ¾8(;ê‡ù‰ ³–,‹ÒvêjÒÁ ?k–f²|1ÿ½vQwì'ÿà¼ql~"C&&#ä³ç¨#‰L~soNKÉœdl7™ˆÊŸ»/ét>íp_x¾{~xݳMàw!?ümçrúÊkžEXñjBŒ5 9a^1ÞÑH‡Ž5Lÿ ?Ȱ×p¯vF°ÎÎzÝ) -g”JÕRË[\X0I¡pwwWYo|¶Ûm9¿çää$~ùË_F§Ó)žŸþô§ñÿ÷1›ÍâÙ³gÅ+eùüùó†‘�²åðݯ¾ú*...â³Ï>‹§OŸÆ“'Oâââ"®®®âêê*^¾|Y ŠçÏŸÇ�~ô£’*�Eåm…ÚjµŠRÄf‡qvv¿øÅ/â?øA!ÈÖëu‰6šÍf±Z­b>ŸÇz½.‹%‰b Å{ï½ßþö·ãñãÇñþûï—èíö!ÿ¼ó¸²á <˜~C)g£¬–Zj©¥–Zj©å]/¤#säFÞŒÛæŒ8œ�a —Íp¢ù<"v+Å€¦��|¿ Gp˜xŠhæ£78ëxQ"` õð&ßS7ìOƒ6öv?F䨞 ÜR/÷Ÿ¨ó8ÙØÅ 'íwÚkêäè§T‚¨œ²§/@ϰ<¹nN¿pD¿æºeð �Êãìq5yd¯n“PîO".ó€•ÇܲèóS�_:+–ožçggðËï6@• D#ÿ�¼î7ÿíqöù\Ãoä™:ܵ|ñüN§ÓˆžðïûûûB"¹Yb‡ÆYƒŒšç>êl�Œ9ú'Ï}�õ4 ëˆžUÃx®×ëhµZ`´ìY_YÇPêO¤MžÇÖ¥NÙibÓϱNÏD½É²&D|°=2îú»r}ygò“ïÉdy§NÜ€±Ô�4}Ö;þÎéO­o «�?žEº7Æ„¨ë’L€Ðëóˆ(gí÷ûBš¢O©™<�Ji/z ÀRb·{pžL&å{0ú®OëGRÙéÄ<ÍŽ –Ï9Ë õ4oÂ׸’ÉUg¿�óZEÔ¡Ÿm°¢Ée³Ù4È9_Ÿõ£u/urÆ “ ܬƒv a^1n8åXïò^æ"kØu±nó¦^Si¯õ[/ëÂŒ�ñ¾ìèÀ'crÆç“tŽðĶqIJ�mÛ6NÉçyçg#ŒìÌŒü·~wÔµm<êåºÑGC㣶�½Ÿ´»Ž(¤>òŒ_&×+iTK-oq�i¶ñ©±X,âùóçñêÕ«¸ººŠÿú¯ÿŠ~¿···ñ7ó7 ÔܧÜO~dÆ«««¢È­Dæóy Õ>99‰ýèG1�Nã[ßúV|ðÁ1�cµZÅ×_­V+>ÿüó‡ñ‹_ü"~õ«_Åûï¿­V+þáþ¡(t”(yŸñØÁЛÏçññÇÇ—_~¿üå/㫯¾Šù—yÍ Eë( QRé±X^]]ÅþçCîÑ£Gñ[¿õ[ñÉ'ŸÏFŒŒBr5s€çx<.Æ—7ñ¹xƒSK-µÔRK-µÔò®”étÃá°q04€všïõzËå2Æãq9¯ ´Ë`ré)&ìM‹ó÷³™&½ïÈïTèvÎþœÏçeSÏ&Ýd˜Áa¼Éy¿ûðÀïtýmçÌ0!…-ï¨ ; 9Ž 0“I‘ ¨Øƒ˜qp=ÝVŠÁIìèl;BÆuM IDAT›\ÀcxµZ5Æ(" Q@}|ÆŠÏ!õ{ê@ëº‹æ¼øãûc <^ÞYô¹°7°v ôå™&Wµ‘ Ñ,ë+ËÏs¤uôó©‡=²3y PE›�â:G¿øŒšLf!Nïäº#´ 3OIžÌ{4®ãÜ×D-!«€´&²3€M} Ã>×Ä„‰÷  *¡€{®2J� Äó~ËŽ ^­ÈŽ�¾Îdðn·+ rv­s‰æù¨Éó˜óÝn·D®àÔj “º _Ž„Èó&Ïcˈû›öyák‰:B8ŸÎ:ÀëLîóˆCÚºårYˆ“AQþF¿]^^6œúý~#5!måo¯›´ÓNà9Œ-cœvЀ<ï&:È„*uwÝpÈ… òÙ~È1}ˆœ°@6£CLôùl3—LÒòlGš¬¦nŒ/Ä´£´ì`ýe Ýö Ÿñ7õ¢Nyžùâˆc×Óë»É2æ>º›÷Û©Ùëùx<ŽÉdƒÁ ´%ëë ¯‰è‰ìă Âû‘Ǭ7<÷ûì³xüøq¼xñ"þñÿ±œ�„ñôòå˸¿¿�óóóèõzñýï?¾ó�ïÄýÑE«ÕŠ'OžÄr¹ŒŸÿüçñ½ï}/NNNâ?øAÙ°Èy¡-(Y{:ñV�ÃwøÃFÄá€Ön·|ðA|ðÁñôéÓ�ÇåÀÊ~¿£Ñ(nnnŠq¿ÝnK;‹ž´,^h*iTK-µÔRK-µ¼kÅ)D ¦âüæõôô´1ëõ::�Nñä€âoìÜœJ†¿#ŽGLÀ`Ëôd“nOàˆ¦§0ÿžŸŸ7@YuØëÃá°qV ¶höú4ˆ ¯WÞágœœœ”þ‡ PÇc~�û;Æý˜ûò˜‡,cÃu¬Øð<34®+Þ¾´Óu7¸çHdËuäqdƒ §¿¡®e>£ºßï�ù[­V¥o ¹\/{ØäÞé4DnkÄጛ 6Ñ{›¬¢]N±ç¹Ésó~Ê?ô³½ç·L0AŠãÍï>ÆcbÆ@dŠ#3x7¿ïïïc±X4Úäú€çôx&•"¢ì£�ÙÃ{c~²ìñl�&¶Øú9ô1ýíû¬ïLñ?€¹ßãû�[G¦ ½÷ç>ä0Ñ£ ;¥ºÏ­˜gèp?^\wƒöNQêbÙ7xê¹äëh?¤Ÿ£Z²¾1n2ÎQ´ÛkV&½ ²÷z½ò›4�ý~?ÎÏÏc¿ß—³›¬ß\/×ÓºÃõŽ8D„’–Ìm6žÃø“6@^8,§å7p&Ã=³Ù¬¡Ké‡L»OÝÎ<²óƒûÓ®At;2 —&­ÓMeÒˆâŒ8<Ó4ó=– VÈÊv»Ý ¬�C¯ñ&c�EGÝùÚV«UΫò9„v|pô3í7ÙË=î?ëh�_žþÿØßŽF²,y=´,xg[�q¶Ì{íþp„•ïÍ©<­�²¾È}’ëm21;àЧî;ÿƆeþì÷ûBXÛ¡Èm²í�õ_¶g³íB]íÏüÊNï•4ª¥–·¸üÓ?ýSüä'?)ùv3»í…ÁBÄB…a†' Þ$(Œd¼+9È0yNýöÁÄw¾ó�øä“OâÃ?ŒÿøÇñ÷ÿ÷Ñjµb½^Çt:�v»]B¦Qˆâ×××ñå—_F¯×‹?ü0¾ûÝï�Í�>ú(ž={V; noTìE`/5+W®§N„eGDã Â/^Äz½Ž—/_F§Ó‰O?ý4þàþ "">ýôÓxñâE´Z­˜N§Å˜Z¯×Å#©Ó锳’<&µÔRK-µÔRK-ïb!ÝŽSyóm°:âp.ˆÓ¹°ÙÆùéÿç�“�6ð&š ®D0‰`�;!k#€•mn4 tZlðLrDDƒ1HÐ�#i‘ �2�“ÉêgÀ!d¹óg¡ìMkÐÈÅ!²a¢!â�\c\Hm ‘¿}.ù`Ûû%§';F xEBÖñï2ÑaÐÈÅ’A)�› ?ÆÌà#óˆ=2Ïuù(©ƒ<§Ëó†ñ6¡øJûnooË>‹óiLàb\(€ÓÇ :Ò{þ›tj·Û1›ÍJÊ&¢sèWæˆIŽv»]-)d8VÒ€ÈsÆ9Éýí¶’–¬Õj½e鹓�NŠûÆQ nz5{ÇS7ˆÈ„Ž‘È=2‘‚¬Qg2DÝì÷g#^úþ ŠæçYÝŸÈ s‡{Á=;Ÿ;ó¬7è„ÌñÝr¹lDOe‚†9ÂyYãñ¸¬‰gggE7@Ìå艼~xîXŸ»Iʘy�c\YS˜·ÈI«õ±‰cçXS'ŸeíÈ-Î8r$Œûò܆¨bŽ`ž0g,ÿŒÏÉaž;ô‰ £årY¢@M¼Ð/�@žo<�yãHúŽz5å¹� åoR bšÍë�ëæ9!ÍYXÈ>²éÔz^›LÑè/äËk¹ `¯ó<Ë}ï’õ÷±Û8ˆÐOÇt2Í´þ2áL=‘¹¼¦ØŽáÙÙ®³Í“I&·Ék±ÇÏ¿&¡7H¢ˆh¤�´cIîërÒ!ÚùÁ²½^¯ãêêªâq:FETÒ¨–ZÞê¤v”Œ½wX´l,a85 ‹7N½^/ž>ÿüó²8a¸±X`hsx²6�Ôe<�N‹²ÅHÝn@½¸¸ˆN§‹Å"þû¿ÿ;.//c2™Äûï¿çççÅøà~ú{»Ý–è$úêM€F-µÔRK-µÔRËoz¹¸¸ˆñxÜÕ�mÒqšL&Åá  Û5Šð{�bà‡ïy²W«#O"¹ãeàˆƒWlê ðôÅ–…¸ÈѶç]wŸ÷’ $î�ˆ¨fÒÇ/lTƒ‹&|üL$€0Œ‰=tùÜ}š=a=ì=²š\ê䃴i {Šˆà p5?\àssSÈÀ^“A&øßQ& hm0!ô&PÌãdÏdÞ jåHÈW§ÁC�‰]¸kÏà³=ßMÜð·Á.Úâv@9í‘Eq8 ÒwÏ'˽uƒe?Gåx,édßьǢi²ü{¼ü<®yOlÀÞŸ¹oés×!ë)R‚�œœ”ý/ÏçYdÞðxóGí8�ß–yöÒ¤ôC¶Èß�%áƒÁ AìC¬ƒ-0VNæ4�v~å¬ÈNgBñÜ;FYFiãëtŒ&™ p3–Ž@f!†Ðmô×r¹,<Œ5÷B$‡Ã2>à³Á`Pî¥Ýw´Õòf½mL&ËSµÑcŽ¢4©Boooϱó†ñ#6JÖ�¬¬ƒ¬¹8 û|žù|WWW%úÊçå¸,·.ý~?z½^9ëÎs„± .èþì€ ^”ûÚrÛjR�v:�F´’×{ž= JZÇn·[²í@®ÑF§t¤#ºÛN §§§%š�º›˜ xkƒ ëWëѬ¯Lð˜ˆáZ¯[y½:&³^ßL p-õ0ÙÍÚŸ .¬ƒŽœq'ú‹ga�dÒˆyázY>üvŸû†ï<®ètŸ½„üóËÚ±HSÛOÌMœ”<™¬É�¸è"¤=æ.•4ª¥–·¸ 4Qûý¾"Ǽ¿Ø0:Ú† Êãs8/�/¾ø¢±¹³aïEÀÆ^el°;�‡ó~®®®b>Ÿ—³ŠxùVQxçççñÉ'ŸÄt:- ó|>�ëëëRÇ‹‹‹øôÓOãôô4¾ù曘L&±Ùl Ic’ˆhD"±©°aá”y,<(nÚBY4�b¿ß— ,@†Ó<¬V«˜ÍfÑÌ]_K-µÔRK-µÔò®•³³³²A5`ŸÓjðyö¶4ˆoÒàñØæÝÀö.ï·‡=ÅšŽNÁ“Ù #ÏÍuŒh¦†¢­N Åû Ö{?…wÐ_P0ÀÊ3y§ËL`D4#…w ’Ð.ßãû¸ÆésøÞu30‚—°ÁH§ìñ˜“RºÕjÅÙÙY?<ö&®¶Ûm!�ˆ�ÀVwŒÓâ¥ëþ³'0òf@Þ©oœ¦Æõ÷=Üg`ŒÏ¼¯ó¸#ïÎî`o|ƒÍQë ˆ».v¨3h–�0Æ0%Œ!2•?ÏÑS<�“gq&òAý-[ûý¾�„¼ÃÑA–)ölE€Ê\cR,ë §s?–�Ã:Çýâ9g�¹pÿ"sNóF=ì]Ìôõ‚ôfͳ‘D»N×DýدÎf³© ä’c@4$:Àã‹\šx5H pŽŽ¥Nd8qß3ÝgÖ3&Š (‘9·=ÀßU»Ý!¥?κöÜ7‰‰@‘�ápÃá°à|O 1dظ r‘ëìtüÔßòlÀ=¿Ž|ÈD‘çžÉtŸ‡¼äh†\X§}Æ‹çë–Ón¡–Ëe¼xñ¢È2Na¼¨ºŒúз–Èó£Õj•õƒö{ÜܧÌ'ú�µ‰ï,'Žúá=ž“Ö­V«�F»Ý®`Kè÷œ.Õó„± %õ¦õ8ãk’Y°!ª™·ó·u¿¿·ã ϱsƒëêõÄë�m3Ï]Ö�¬?#škKŽpâ�~6ck�~µ3Ž×ž“ñ9Ï/ëãÜ>·�ú8ê½��;�W·›úæuÄý`;Ö÷ÑŒ/õ¤~È­í;ꙟC©¤Q-µ¼ÅåbC…‡dãÀ…rûo”†vÞ¨XIæÍiç’Î ¶ÛívÎBÎ÷äñõГɤlì"¢�<Ãá0=z÷÷÷ñÓŸþ46›MÌf³øðÃc2™ïÃËËËøòË/ãùóçÅ€à; Þ»»»FÎW¼rX3?“É$~ÿ÷¿âe%ÏÖ)j©¥–Zj©¥–ZÞõ¸âÔÈØ“ý~¿6Ù{2" vi>åM`›æˆƒG<ö3×ð½�“ìíi 2ƒ-Ô°€M:¶ö1àË ¥Á¼Øy6àE&ÇÜn××àªÛn;ÞÀ6|D4ìˆhxŒçóL¤y¿��u¢Q ˜¢Œô}ÈíÍ‘ÁRl|öô«AP$ô3Þã T»-¹Ïé¿LÌQWŸ¾‰6å4h–]SN_Ãü±CŸÓã±W±Œš„sDˆ#Ç(9‡ú¤Xs[ØCÝÝÝ5À(“c/{öLÔ3ÇþÏ{Sd‘Å#Ú…þ@Æ|n˜Ó½Ñþˆ(Ÿ3g�ÂÌ}îñç]Ç¢`2Ðib‘t—<�ùF? è7{»3�¨¤{eëæ¢I)¢…è÷ÛÛÛX.—…0h·ÒÆñ7º‹T‡<�¾Ëó9ðuœ´Ãûm; €Í‘v =|Ͻô32”ç»?²Ž´d^#ï�&$ií�Ç `Úu &Ù!Œˆ@°3ïq_3¼¶d@ùÉÑx&Y© 2ÀÜ7d݈žõsøÜÄ„ÉG�0ÿ{½^,‹X,1›ÍÊgè4ú�:ÙÙ™ºg™AçÛ†à(ôR&u�ÓápXÖ"ÆÙÑb¶ ,ÿè´ÝnWœŠ}X˜ÓS²FD!{¼.z­£¿¬#³Cÿ›¨ua_qkëóÓNŽNã=&‘LÂÑ~d,“�Ì­7ÙÔ‡ñÊQÍÜKa,¼SO;È;²Ök¬m;êâ:Q¯¬S}öïÏä—åÊz�w÷d�Dw¡G¼¾çzz�¶MÃü£�ÌdÐï` ²ƒ‰K%�j©å-.(}/È&}"¢°Ùx2° ���5 ͈fžm®ËéX4³ϱ!†QgÏׯ/6nëõ:ž?Ož<‰ÝnW¼[–Ëeôz½øè£�›’ív~øa|üñÇñòå˘ÍfÑétâÙ³g¥Îÿó?ÿ£Ñ(.//ãÕ«W1‹Á(àtöÚd±�ˆøøã�ãââ".//K¸4 Ø ý±Ùlb45³Zj©¥–Zj©¥–w©`o:%�ANÀn®�8Dbdoéˆh�&ìÙï�dPÃ)b¸×$u1ǽÚbP�g¶ñ “3Ñ n˜Xò&>{�G4£1øÞŽKù’‰o0BìrZža€Â@/}b Ÿ÷{C?¸M& 7þ2�eÑçÛp mŒhz“Z 2�z¢Ž¨›�#ƒ0–=N×ëõ )@z¦ˆC4b~–ÿ7¨GßÒ.Ï{1ççЧô¿+˸AHÞá=ŸÉöž&-=Ï©3€.�–‹±D*óüNêë"tu¬ÅY1Ÿ‘b•Â~Ôàœ�æ Dºo ÊYæØ'²ïä~Þáy æ})`¥Ï•1Ñ É»Ùë²·÷™.«ÕªA¨òl€ræ=)Ô†ÃaL&“2ÆŽØDÞrDFÆ5ÊÙéçLž: á˜W=chlùÏ:Ü„÷8Ѥ�#GÀ� è•�‹pâ2Èq†·*uö{"šŽXÝ ÐO™0”ð÷ìœ~(ƒ—Ô‹ýƒ½–ñ,Î6­ °LH±/ÄÚïÎEñKô%éÄøÜϧm”�*‡ñõXPúÐû~8–>�ÇÈ£.D§PÆÓžÛ€2ôkD”ó`)þß "DiD“„Ê$¥‰{rB¦¦V«Uyîz½.Ÿ³¯4hCv)&*Øñ>Ÿ™dùæý—ÔÑ€à¨Ç†q1YYað·ÛÅp8l�ü}zzZö²§§§±X,âôô4Æãq9@�èúœ:óöµÔ�çÝßßÇxŽnC×€1nDñ‘•‡úBÌ@ŠƒB92'ia‹<9:Ì뻉!Ïô:¹À>¢OœÏcÃ\åü­ˆˆÅbWWW¥-8bxM‰ˆ‚ý1îv¼ ®ŽÈFw¢[þ§-/�á(5úù3qÛn·c±X½´\.Ë8:" �ïˆ2¯&dÑ'8r°Ö³Cf39ÇŒ5Œ¾'5у,0n|Ï9BÔgú™q@ƒ;š˜¦^Ö[è1Æ»×ë5pÉÍf777±ßïc4ü–Ÿ~¿_ðeJ%�j©å-.,^,ˆ6œËãPXk¶ÛáŸöp°×Þw,>ÙƒÉÏ5›ÍBàM¦SbP/ ¡7›M\^^�&6¶“ɤ,†gggÑívãòò²lØX0ñ"»¸¸(Ê/\<\0N‡ÃaœŸŸÇùùyŒÇã†'[Ä!eED”þ&²i<Çjµjx»åðožcc¦–Zj©¥–Zj©å]+DsàŒ„�˜Ó|ØVâ3{œ:‚€M;¶ #›vƒÏØ�ïa§2¹dðžçf{�¿þØÔç¨�\?êe2‡ûJ\©n£û‰ÿóuþÎ×Ú6ƒØÇ~Ld'({ïºßøÎ <ŸaÛd19æ÷˜3¸oÛÚ€õÈcĸ:ÏpŠ4ïƒã}X4ÿ³¯òxY†ØŸð™½«ÆÀ2â¶dùæ=Ș'ì•øß}çHƒf&`©#cæq în‡‹ëh§;÷­å'Ë–ÓQ|CW¸�? ½À8ó™eÅ$µeÍ^ìþßãà:{<]ÞãÏ|�ÓöÑN@Y§B2aÀ8îz®óãý¼ÛçþÈ$.Θ�N'ÖëuwÑKœÍCª5î,÷ùSûý!½üjµŠétív»€“ÈøQ_èdu4¡ÇÚòj²‚àÚã�u#D$ª c"A Û‘Áó—9çùϘR¯C´#ˆõ›‹õcK¶æÄýý}µ×ëuiÿjµz­Í\ǘ6C®ØÑÖD ²þ’�8@ž¨?}Æx/—Ë2ŸºÝnqª¿<_,qvvVÈg“O<ÛÉîú›wÐoèmGøEDq’61‡µü<ÿ,›ãÌ=¯/Æà¼ö#3ŽÜ9V¼¶»_G´¢“HçÉ™ áÁ|Á&³¼1>ØÏàg&Ym�8[‘Ó z=¿D†mWåt‘§§§1 k ¸äÉÉI#5©mÆÖ�ûŒ~d�÷z1 Fj² YÈN;žkÖSNééãõòõMsž¾4!Åøîv»‚¥:zóôô´ˆ´= ¾êyže°’FµÔò”!Æ‚•�7(øÉdÒØ¡ XÜìUÁBç<óöʱ§ ¿îèM�óJÛ(Äm·Û%0 Ân·‹¯¾ú*6›M¼÷Þ{ñ½ï}¯áñ` ƒ•÷£Ô¯¯¯‹ÁÓétâ‹/¾(Š�6{ñÍe!,NlÂxé!h ÉíímÌçó²Pã1@1XQK-µÔRK-µÔò.<ŠMà�1öiÄaƒ�ýi¢ É`~N“?£pNEö6T1°cpׯ úe0Ù ­ γui·½€3‘’�¤Lòp ¿3�•ëkò.{´ºM®‹AéüN“cÛïì awSO¿Ã€™Ç„çúÝ Ô›çù^ïsØû¦ÆèBιÇDƒ���÷ÏL\ævò\À©^¯÷Ú9Rì ‘à4~;M@ä>¶Ìø³ü¹ÇÀméÔØÛO&“’žl8P0šö9�›£`ˆfÁÓÞûtt€Áæ¾=üÁ;À êû™9âÀ:ŲgÙ»qÔ\&b¹ÖDŸÛcr <†gÍf³‚�5dR YvŠ­Vë!åÖ«W¯b¿ßÇååeL§Óy©`Ý×ï÷K꫼Î�ù†¾E·/‹¸¾¾.àt»Ý.çEC`1Ž�†œMÇšG{Ñ›¼—>AL®Ñ¯ív»±¾ÐWèæ;ã”IJîá~%^“‘OdÇ:ƒ¾‚DãùY.­‹M4DÈCëë'ë;&0?,8á ‡ÃB˜ZO!ëõ:æóyƒ´±Ž Í<;ÀºÄ¤˜£¸²NóZ•Ïñcã´}ÂxCž2îyíµ3QSçãñ¸œëE½ÀCMèP?žáuÇØª‰[ä’u‘¶:’”¾µ.ð3ý]^£q®päšß�œÚ†e¾A:æRI£Zjy‹ ‹‹�c³þ„œG43uj¹ˆ㎗‡cšõ‡H¨g¡·!I�"šd”ï‰8®¸#¢q™ápŸ~úiñüÀ[$o2ºÝ‡ü¨³Ù¬/Üã\ª(g$+w{±X!Ӯɡñ,$­V«äa§Ï³w«Û^É£Zj©¥–Zj©å]+Ø—&lìIù&&"Š}ËÆÚ­ç4\�Mj`š÷:Ê"" Aãtc¶a±9 ÒdÐ0¢ :›Èr½ø� _kÒë(| `ñµÇþ7ÕÇ‘Qey<Ž‘lؼ٠{Ú)\èGƒÓAô…÷)®‡�0׉k ™Ðá^ƒEÞø½íùÛÀ?¶ëùÌh¼Ó?8Ìãh Ç²’Ÿã}Dö §/|þ�É+¾÷ÜÉraÐËÀ7}åºzÏdYó˜dPðQĽ™øáz{@[ž²lP2 ˆoy÷ܱÜy< [Mʺ�ŽÍÏ<‡!C Z¾<–UúÛ„ô›úžúgçRëîqä“çhŽ.´ g�dpýØ>×õ%2ò9# ÌN¢û}3:ÌÄ�åÏûó=g⇽Ì�¬“y®�|Î�‰n_OdÉÝÝ]9SÇŽàœãå¬C´Bdýà¹@ÛÑ?¶cr}Ï ãuŒ'c‰Ã<ïÅ^³,06Æ©Ÿ#ºL~yÎù}Èc¶wøÞë Ï r ]ï9bݘ�ü]Ö±ÇÖ‡¼þ1~v–°nØï÷�Hnëc¿Ó¥’FµÔò”´ÃrQºyó„òbÀ °‡ Å‘EŽ> % oŠˆfeÞ„Ú{#ŸV´ëõ:ž>}¿û»¿[”ž„ˆƒ1€â~¿�³³³b°L&“FŠ9ñ´Ñ«R(âV«Urµ:Ä…ïa~;ʼn˜¼™ª¥–Zj©¥–Zjy‹ÁЈC´ŠÁ[ƒü�½ ØÈßlŠ e"!o¾ùÌ)_œª,§{Yc0žâvÐ.ñ¶ÝÔÃu¥.Œæþc@ñ6g;ÝïqÝL"eò&ßCŸ˜4Àã:x\ ÚS/bƒ:ÇH~»|M½Ý7¹_=^¿®?ýòBŒÜï÷quuUäŠ4d8rf0xlŽD¢ ìØÉz`ù0€l"ÏÄ™£ ÀLìu�޼ƒ›¬×ëB6D/η–‹ý~_²¨x^FDƒ¨pôB¯×kŸàyHJ7¢\...Êw€èc©²f½Êüè÷ûóu <¿Ë6sŽŠw©¤Q-µ¼Å…H"‡~zóá”Ê%?™L¢Ûí6B8 ÑÅ‚~Ïqš�ˆh(«ˆCìn÷©„ò"?- ÊjµŠN§çççe�}úôi¼ÿþûåBŒÞãÍaÄÁƒ…×é<ä‰÷Œ�d$‹dÄÁ ‡q{{[Œug®s(­ù dØà5‰WK-µÔRK-µÔRK“Øá;QŽþÜ›|áØg¸y~öÐÔ‹8€ñ> Ûïã]ô2‘“�PƒÕöx6åw<0€BÛ™(œsÉ@#õñ¾àM ¼É êgG,Æ €�k=~N»â6 ÍdŸ›�0yå1àºlïs=@» ;žëºaãç”Fæè{öAÙÛºÖ化!êhÒD”A%v–yö···pãyWxͳ§rŸ1NìŸx¯ëÌX{¿¿Ïä‘�bË`ÿÜ/~}›eà×Íê“£¤LR2ˆ³.òó þ;R…}mD”4j÷÷÷ Oy“bî?ä<“»\ hÍøzOšeŸh�L!Ë‘yˆY@MHÏýBûèkúp»}Ho~~ý~?nnnâââ"ºÝnÌç󲟇Ðh·ÒÓîv:�˜N§ñâÅ‹X­V1™Lb»=œ DÙÓßäý¹^¯Ë¼q1“F&ßhƒÁýv»]"8W‡yâ³€HÓ†¬8ZÕéK;Á2N—!³Îöx3F|ŽŸçàýþÙè>ŽÇÈýí¾´Ž`må\¤áp£Ñ¨DvAtØ ØëlnW«u8Ãm·Û5HŠˆ(cCŸ˜²§xÑWޤ¹½½-ºÝцŽRqDšÀ–"¢ÜG¿½.1>&\lGøzd›ñ°Žƒ4BV-+Y¯™q†!æœÉ3§TãúMÇ8£g�kêÈ÷ùX´­ßïÇx<.råóÝüÚÊxŸžžÆx<Žñx\Æ&"ø›uÏ3n9™Lçb2ÎŒ¯Ó™Ç3pA ‡Ã en‘ZÑöA¶C¬×m¡ïÐu´Ÿ(ÁL*åÏh«S£‹l'Ûv2ÁUä5j©¥–·¶~ñzÊlP¡`a„уâ@IrPèd2) �7\öØ2iÃ"⃡fã� %Úï÷ã£�>ŠËËËB0±X Ä#¢ÁÚGDi3ý²Ûíb<ÇõõuaþùŽMž7W|×j=´aï�›9o¸ø#Ü �¾Zj©¥–Zj©¥–wµd�”’½ÇíAiÀð¥Ýn7¼d3 lð嘇6×ÛÃp{PÅ›|™È:V·‘w›0ˆh‚B¨ýÌ 4dÂõÊà®Á)?תÛrŒ€„p jƒ'î_ÞgÀÎÏ ¯qÖâðulÿÁ`Pêj Þ ¤mqÿOÝ RO×`•vsív»m¤ÌâÚýþ�2‰ïàWùŽë ʼ (â3“™œ1 fO{×ÏQ#vÀL„î÷û×êèÈ‚Lù³ ÄùÏißÇ3b +;ú™È‹ÇéQä>öß–qÀiÆË ò¯ÓK&j=à5ÈK}ýåþ¦mD#˜XvÆ–Tñ~/€,@¹ë€<[.i— g¤Ç"£Üßhô¼A¦"¢¥8·FÈwŸ“|777…`‰ˆU2�^“yˆ4öÙÔÇ6ó4Gï™P¦ß�IÞëH.“R&cMÌ1^à �³ý~¿à®›#�Lüñ\ë ¯G¼’Àz—ñðؼûù\gR Y[,±X,óäå˗űÒÈs�4n& ò»-Œ?g 9§ÝnÇb±ˆÑhTÎ̶ó2`}ⳕìÀLÛ#¢¡ëÈc⼊ïz½^£w»]I1‡Ã3x˜û½ºÛí aì±0iHÝI]Æó˜çœû œÊó×sÎd– rlüon2y€ü4á9AýÀÉ,ûÖÕÌì4Û^/L,ñÿx<޳³³ÒÏÌúÊö}…Ã6ýÛëõb±X4œAèóápøšc²‘Éx0?l§1Ïs{é¾�F1�#"Šc|¯×+imÓfR|Öz(ëZ�…×vêaûÒcmÒÔ˜.sŽ#6,»”JÕRË[\0xÚív ¶â�Ÿ³ñEzcjƒ…Ùï÷K¨&F+^YY©bÜx‘ˆh’K›Í¦ä„Řúøã�ã“O>‰'OžÄ|>/‹ YÞZÙF¼~МÙuBk³>�b¹\Æíímœ��å: Ч‹ó¬Ú£“÷ÓÔ!{¯yÓd�¼ ¯¥–Zj©¥–ZjyWŠ}ƒ],±«°¥ ¦Cd[ÐD��{žëè"oÀyž=Ù½¡Ï º?Ǧ;æ-l�1¬w\ ”2È›íá ñœü\·+ƒ½‡ƒ¶±çÙ;Ø®ÆYË}h�âpŸ 2׃L¾Î}„ƒ×v–ŒÊ¤WNÍâ÷ó>gZ€@â~`{kó=v=φ€²ìщOÙËšg0uZv‘g˘‰2ƒËÀìÙH¿åh÷'ïô<¥Ï|}ÞsrO&�¨£ÜçºÜG–uÏ�¼tY)Ìo˵ç~þó¼A(>›Âm4H—I“5¹�Lâäv:2†ñ"Â2 xO;!½=.ìé‡Ãa‘Ï<rÛ pRhK&‘e—z­×ë2öÈïl6+}iLÅäß1‚ÐãN;M´,§oÛíÃù=Ž¡-–áÅbQH§¼&2DsšÀò:K¿C(ÑŒ˜c‡ƒpDeçmëÿïqõÜt2È)d¤ží1¯=&o<î×Óú‚12ùbò ¢�ë¨£í Æt»Ý²û2Ðö_¯×+@�ZÆQë§G$�£ñ<0PÚÅß™ü´�ê³ h'rJŠ;>·¾}“-e½l»À˜$Ϧ�²^`.9ÒöfD%�j©å­.(9/ô,Šxë°Q rÏ ½#*åŒRDYá12�Š×‹Øb±()àx®Ã>3ÛñèÑ£˜L&Ñé<¤£{òäII—™ƒÒÅkÅj#c„Ðân·[ /–Ôà eê…ÏJÙŤš7%6fíùäðˆƒ·K-µÔRK-µÔRK-¯ƒŽîñf7{Õ46y°Á³2Ñ‚ jëH‡Ãö]v¾ÂF4@‡ éó�|-àF&” (Sì¹K?ñ¹ÁÛcõ2�Ä5î;ƒk9µí€ôˆˆ’n ;Ü@œXP¶¡3xŸAnž±X, `5›ÍŠ =ŸÏKIiÐ䈀.·‚$Ë…Kê @Èžf4Ð;âp¦ ÀžA��=³Ù_™˜6 �\z^äùµ¡|}Ÿ!Å‹E©×r¹l–€rÈ{`=~άÀg& ¸yäçx?go|Ï}“ö÷œ±Üe²ƒ¾qÊDÏEä °Ì2~ìÙ.ÇöŒÈ4ïw�ršr_‡l2FŒ×›  M€ÞèöÂîoïLJñäGŽé't÷šŒã3·Çz*“cÔ‘qv4›u&}€ég€Yìv‡3F ¬ðZ1/èWˆžiòâÇ2½X,¢×ë•ó||Ö�瑽^/Æãq¹/“Wv¤õ:í>£-&Ñè/ƒæ<ÇzÂà32 Qè”n�FNG¹ß?Dœ��•¾\.—%òÀ„c…>&2 È t^_QgyÞl6quuÛí6&“I ‡ÃÒg`]Œ�#À¼f¢(¯ƒ>»¹4¡Hô›åd·Û}ÉØ˜lã�&¬û¸yÍç€[ÿÛÞñZæ³�c�·å•väyŠ\0^>GLÐë*mr„ú‘ÏyG&Ý!(™¯vŠˆB’¸_M*ÙÁ�{˜ ôö‘‹>LjgR²ñlô(2é¾ãÞN§ÓpÎç³LÓüÏx2Ž8˜œœœ”Hjæz,Ó²M¿Y—¡ÛòøR�?ës;Pd‡z;9ê“RI£Zjy‹‹“ˆC(xÄ!_ñ`0(ß±0ƒb,¡T¸eï´ �N'^½zUzÎ:"„•E–°e"‘ð@I?yò$?~\Œ2{M‘CE{zzÚØ�¡Ì�-dô ùx!¿6›MŒF£Æ¢�áã …L´ÑaC•bÏ Bï½a²ŠòZj©¥–Zj©¥–w¹`3Lø¬H¾ltíå|wwççç%bb:�–ü÷ö°f£M1ÈoP›�¿!ò3#š¤—�…L’�b�ÇàÏ£dÈ^ºÜý=õñûý,×?ƒ¼ô ¶±ëñæ¨&ÞèÂóü=÷›¤ÃC�>Áë'4{t#+8»nb÷sþªåÃõ$B)â°boàô_\?›Íʳðœ7ˆc@¹�ˆ’R�}�ÇÐid ,!&n2ù‘ _—eÎ -rM›qÜív�ý]D4ΖÄ>&ƒþ1 ã±µ^–˱÷HÒ‘C1êàôj%=2�Åß–%��ÿ·œÒ�n“ç��à¨#ϱ—¶ÛÌ>” �§È÷XöH[Å{œâ 9·s¥£1p =;;kDŒxNÒÇ�¦´Õº˜wØAÝqìóˆ(˜ýˆ®À}è^0?pÓ–Ï?ƒû´¤ŠrD¤4ó¬Õj•4ù¼lƒþê÷û1�€>óÏ”ív»1÷ )=oM&šH°<’“6¹\.—Ñjµ íµ ¢×ë5@qôó ²}FßÓ'³Ù¬œ…=ŸÏKôÂr¹,ó¹És†>õzëù<›Í$¿×cúŠ~d iãÀºíè"ú�g3/èGð¬×v*ÎgWÑv`€0ó|Ev�#G{°þð=måǸ—I|×`Éw÷ú§Ò ED‰.ƒL2‘€þ¶¾5~È<†üκÕLÈ·ÏücLÚo¢n½^—õ#;Äç9†-çˆ"ìÞ³ÙlJŸÒ>;4y}ò<‚¢Ïöû}‰tÊë–I;B& ½.˜À:F¾ó>êÉ{Lœ:�zí7�cµZE¯×‹ÑhÔˆ„r©¤Q-µ¼Å…I½ßïNDS1@ˆŽ%t˜Em³Ùòc¿ß—áPxª¡X0\Q®,ÌQ Ãn·�=ŠóóóxüøqcX.—%LÔüÅbQ<¢Pˆ(c"£†êE�ů-+e/°öèã0Eo†h›=Ÿ¥Ä;ØÜbüÐ6Tñ °òõ\K-µÔRK-µÔò.ÒŽEeÏd@ €ƒ�¶}±�ÙøÛÙNGxÙò ƒûÙ;Ø“S¦TºZAHD7 A±}ùpä(Ÿû4¾Ö^´<XíE›Û°å>1øÎ;<ÎÜC*"@[Ÿ]4�Ê5ý~¿€/«ÕªDA�™x2yM¿AR®¤µíO[œ� Æ…g˜X ?=ȳ=ÚMððƒü³O°,Pψ( ?û+ÆÂd‡ÇÐ`š} `¹ÇÉžÙîK@3öp¼pÏóÂ$—A5®³‡¸IOd=“6ù·Ag;šu½˜3s?“v[7t»ÝÑëkÝ¿góücþätF¾²h³ÙÄõõuðÙwfR‹¿½E¶Ñ/༢ ßïÇ`0(^îèúGJÆ‚wšclèó<Îô-råçr_vµÌ›°Îd©Ç�:#‡Ž°ã½Öq ꀣggg…f~p¿‘wZ1�)ºÁ‘‹Èä-ýÈù*Övj¥ÍÌWGŽþ Ý„™óynЧÌyc"€úèÒÍfÓ8Ïý•I^ÞiòÒ‘.|FÔ}abY¥LÐ £Ì_HÏ9ô ë;ïwDú=ëOA·;k�#qMx®QŸÍfSÎ@B¯#ÆÜ M˜Ô�ë©'D Ï,w?"Ó&0LR0lÀÑQÿ|¿m“¬³ünÖcîå=ô…þÍé�&”ö±>q×X§#[9E¥m,ÖÊñx܈¦ µ|27¨»çÓv»m¤ý¤ýè,÷—ï³4á‹>·Mé~¦o µ¸ßòjb ŒÒuÉdm¶=÷øAm‹x­¡TÒ¨–Z~J6”"¢ä„]¯×%$Ô?,ˆ,xF¹„aÁ"3�Š¡Dʈv»]¢�0>ÎÎÎb0eqÈû�ql/$+MGü`HÝÞÞ–H%/ÜoÞ†Ãacs‚�BŸ±`Û{� Jß×Úˆ£�x'‹Ðb±(‹©â^K-µÔRK-µÔò.z>oÅö'8á@r¶&¶! ž§Øy···Å‰èîî®xÓÚI p›Ö9ë3X‚grÞÈS/î”ó!ÛÑ­ ¢ÙþÆÆ¤°?q´2X{ LÏÀv&Lnð<ÚoG¬ˆ(v­=V3Ph@Ñ ¯A9€¢Õj¯^½*ž®<g/ìm€:œÖ ž³1èŠã²“U&ÈýÎ~&âÁ©ÍÙìœh999)©�2ñ�£œI*<œƒA\__—¾0ùCÙ»™³SH…qˆ08hŠüÑŸ&»béú æˆ"ä‚LxW[žèk¿G™s´ÍÄÁíím™£’[–;bú9ð2Aa²ÌÏâ:ÚÍü&z€H³ûûû×@oÞ ™ÓÒF{ÄSGRÒ7óùt:�Bh¡©z=„Ž@îL22ljóº€,#´}cÛ-“%&”¼†â ä±õúbâˆõ’ˆÂ\O;Ìx ÅÞä>§àô‰ôŸe€±1.éTšn¿íŸÑ„Í�CN^ŸÑôýææ&Æãql6›˜Íf%‹”ßQI£Zjy«‹7©h6 P¼NýfožˆCÔËÅÅEùC£Áì8‹J߇úyÃx€d�Fqð0a3Ej8ž?™LЧ ‹^ ^ähÀÊÅÇûé ÚM¨ 1‡ÿbà»}6æPþ|¤ ðój©¥–Zj©¥–ZÞåbÂÃ^ª€NeÃÿ¯{¤ûy:xvâh4*ŸÁâ÷ÛÝ›ì Fb/ò>Û™ëõº�>Ïp{:ó~ì[§ƒqÛ\L¨Q?>÷ÿ®w&“\g{ÔQ¿L:¹ŸxGŽ 11èÁg€ÛËå²ô 6¼�Þ"š) B#@î±ÃæM,˜ˆ3�¨F¡@›mÓ›8tßœCÆ <°íín�a÷ŸAxêg¢Çû·cQ´Ÿ±0Ùàþ1yèö3ôÀ?ï�X´ÜšP´w2 1{3˵çyìú™÷8ÿºû#îa?æÔ?ì›)öÌö8°ÇÌóÐ…>FF‘Kƒ„—Ñ%óù<æóyœM¼ ÔÅ.2C?�v‰½;Ä¢I#G–9ý˜ÇŸv°·‡¬ôÙ@ü¶.â‡>äo_稓ݎbîC@– dü^æQ–×ý~_ÎÙ±>²¾1‘JôsÍѪ<Ï$^~·ûÑåþþ>f³YCþí8Æ`½ànyô\±6Ùć”Bþ�zù�<¢  Cï=~8¿zý ½Ö“È?@¶É úµÛíÆt:-zgdê6™Lâüü1ÉbçëpGëd•w™¨rd'ï`¼�Í‚AúÇ4ÏöÙ_ô±×)ì“þ\Ëý�·ž§vއ�‡ 2Ñd.•4ª¥–·¸üÎïüNüñÿqñбn¯L³çx<­×ë²èÜßßÇh4* ãÀ!¢,&(”‰ j{[y±äÝ܇2\.—1™LÊf‹�<†I«Õ*‹£�U>³êÿ,\yóÑLÙ‡'ÊeÞëõb6›•~BÁÛ°uØ3eµZ‘ŠÒ! IDATC›…'{!dö¾–Zj©¥–Zj©å]*È1h�ç0¶žI"ì(;?yÏgØ…l†±ßð~åZ§äÀfuý"¢2ɰ^¯c>Ÿ[Ôç3ð lRç»Ç>öÆß¶«ëe�=f@Ò ¬A}ÛÑ™T hß1ò*õÇ)¾3a’Á÷7u³ó›ÇÅà?^çŽrÿøÈ{UËšÐr4ƒû‰ÏM™„B>œ¾ïXÿ#õ¹/"í2Xe`œ~óóÙ¯ðíwdމ<æ:çŒìë"¢qþãŠlxïç~õY³™p°Œç9žÁÆ úZ÷±÷Œ€áì㜞ËiÝs ®c|üÜÈZvät3×›9Oääš Dë×9¤~> ò`0(‡½;Š…9b`›±ËzÓQ"¬Ö×ȼIn î§œáä—ç׃Axnq�Ç2â�¾ ¼Âúy¹\–½¾e<ët2K3NÔÔŸçq�É4æ�£'q õ8xÞA”ù\úÏã“õ2cãÌ)D àÜË5vÎèõz…,XG/°RÙ1À ºû6Ë¥Û= ââ⢌Ñ-è°‹‹‹¸¼¼,Ùlˆœ£ßÑç–G· ’”¹è‚žòÜe ú!Žh£±&ϧXã\EúˆùKÄmÄ&q„rE”•£û¼nZÏ /õ¦Ûs>Ÿg$€ ƒ?8X­×ë²á·SUÄ$5—=R©köR¥.Ç@ÆL,ùÚ vŽD¼eƒíó‚øÎ}bbÍ@3Ϥ0PÏ�ꤡý€â™™0 ¿ HÃÚ¶û ‚ÉÀ œ÷´…Ôt€f<ÃuÄ!D&¬Ø7e€qu$ÏñþËÏ´ÃÄ'ýžÏsE¾L"ñ��{Æ5“moË©�ñ ïv»�´‘<™sÝ‘•cÀ8¿3iä’ÉÚ‡³Γç<~.èüí¶Cjð¹ ÞïæîG4¦;�N9ßæXª;êÆ¾“zæq~|~ Åàjž›–)߃ÌED!F`M¬åycÂ�6˜03(Ëœ·L𙯱ì1'¶ÛCº%@nÒ¬1Þ\ÇdïˆË�çgš¸?À%èGƒ÷ðuÄKžÛ&p:5 mÒÝå¨Aæ“ÉáÝnW"�À;¸Ö@º×:�Ϧ¿y'mö\{²Îó"_È¢1cFœq×j=D>\^^Æ£G�çq‘ÍÄ+u#õ}ïˆ&cA^ãÉÌç&>‰˜±#$Ï4¹à¨#ú‚hµZÅÍÍM©õv¿’¶ÎÎÌÖ;¬èÖwÔ�ö9jÍzÞ‘'ÔÑò�Œ8í™ #»àqÈ?cÍß9¢&ëH£LN£+í“Éb=<�ëx®ëÍ󸙰]€®´N4IÌ3Iyg=ƒŽ§}7æk²×UëäkµZÅz½n�’¶-¬3(œ¬ íàMmD4rYó9Æ J‡â¨%”ÏÅh@�âe1c6›5<â¼P›lÂ`g#iO:6 ä*·Q~vvVž‹Ñ ad¨Õj5½ùÛ†·�!Š7†þÌy-µÔRK-µÔRË»RŽE޼°·#v(6iÄñtl~®�ƒˆ(é©°ížX,"âA�WtAmwšdÉ~<Ó�Å^×ö27�éÿMÂæo\ƒ’¶9 vP/6÷·ÓåÐÚ€'³Çƒw(£ DÆÞ¦O=Îö4nµZ�C§y'íw .ƒmvL³·2õc_b¯j§Z²W¼I5“^ìY ^Ѿ|ž€nÚhâ…649:…v¸¿,+pd¿ƒ Ñ?9:Á‘ž;& žôšÈ åÜÆ�jÆÛ{HËõjµ*ub¯wì>3îC|+ï­è/¨�ÎCº­ù|�N'¦ÓiÙã}h4,&l¼ÿuD }ë9ĞЀÏóYgDÎÑ×&TœÂÑÑuÌîq„…¿3ad�` <Áníu›èËs‘L%™Là~ÚD4{s®§¼i¼™‹ô•ÓXñù|>/ç M&“2Çr8…u¤ç·Ç�‚œºN&´Üîvûp¾ø„uï0Qà9O‘D]Ñ+ŽÊu´ÏGÐ~;Ú"»�õô©# jg¢Ñ:Yò™B^3‘uä}²Ûíb>ŸÇl6‹ý~gggq~~ggg¥�N‘ˆ<;U!uf|ˆâ€<±,ó¹ÓoŽcwGÖaêe’ÒŽŒ}B8•£d‘·ÛÛÛBTAF0/¨rcGä…1»¹¹)í|öìY9ÒÁõ³c„ EÈ*κÁƺr<Î�DƱ;¼Öù 'Ö,Ö~¯ƒØ$ÌÈë*ÖrË?8Êã(`}b[�ñ ­ÈŽežõ6ß–ˆÄÁ`Pô²@ÿ’¶r›4¢¤e\·ÛmÁt3idBÒº—õÖýCÿCdá `[9ìt:q~~­V«œ� †ìRI£Zjy‹‹½k²ÇJÍ?ÆCD�{óNCÉØäÿltzÃÃ;Q¼VºÔkµZ5ŒDžÅáŠív;&“IcÁ@ù¢ü½xxƒK›0""`� _ÂS{½^IŸà|÷Q›Í¦¤òcñ£Í´Ë¬>uÀвçP-µÔRK-µÔRË»Z ̘Ãë5“2Nub›”ßöÚ6ÐÑŒœñßQ6élÚ ÀÚë4oÖý?^ÖN¥ÐbûÔ€®½¹ z8’ {–zg‚ °‡Ï²±�G<ÐáË6=˜S[&z¼LêPúÎd€ÛŸë‚,X¦Ï� ù&“\Úef½^°…ºÄ¥Ž�½Œ©Ä’A Ÿ'àze�½Ÿy\Ø? ÛŒK&D2˜ �³çtöÔæ¾cs†¾5Í÷Ž>rݸï˜ìšô2Ù–‰1êã=$õ5 ‘IS×Ã2åó¼¯s”Z>ÃÖ²ÄÜâ9yîGÄk{bƒëîcœíõ½ßïK„¤à" 8àÝ`0(€5zÄúLjó¬ÛØOg‚ˆñ1Ùè½³eÍD‘ vÚXMÛHFYöy�#¬— z(/‹Bü£«‹E¬V«BV ‡Ã×°ÏÆ<Ï“‰ô%r‹,x-ãù&…#¢´n£åƒqf-�@ Šñðƒñ&¥ŽÍ ÏWžm]ë5@Y²„åÉúèä䤤”‹ˆ‚Q9�Çål ¢pü9˜²Â|ä~“²NÖÇ7Û–#dÞ\è`Ö æ-¤‘çxOë(Þ� Zß{�´þôêsûˆªsÄŸ 9ä×ã´X,¢ÕjÅùùyqš†¨év»eÝ[­V¯9Ę á ú B‚¬<è ;AØÎqÝ,+ô‘IP;^˜”ã§€;æÐîµÒ…÷ÛžÙn·%²�1õ:�m-c£&Õ‘iÚíz‡Ãrßf³)g9"»¤»dNâàž‹ƒ� /úÏ„°×HÚC¿ÓÛ†´a2™¼æ8�Þs©¤Q-µ¼Å¥ÝnÇp8Œëëë²ÀÙ“Ž‰zz777EÑzQä HŒR6Wl¨ðÈÂPp+Ê(‡ãb@9ÔÔ ž“É$ƒAcÓkdP «n÷á c:ŒQoþh+}ÀBJ=ñ¢ÌÞc|Ç¡Šûý¾$ØëõÚV«UΆò"†Ñ ¡­¥–Zj©¥–Zjy×  |§Ó)€ˆ?3àc° �ë 6ÛÓ×ט�1pq°ùìy›¿çy™,2€€‡+|þf£�giv¢âö¬5ˆi&GñNÿïûe jÚsÙžúN¿ã>Ø2ˆÉ½ØÈÂì<–¯;Öšüqò}v¼â™sUƒ´¤ŸæÌ˜1ä½�I,þ6ÀoÅ b&µr= >Ùk—ë�™¼ßû&ƒ�€sßÍrlÇ5ï™�ãyÔïv»¥Ý€ßÞ÷™°¤�¸ÎiÎy'ŸüZV郂žƒ&� ˆå¶àé{{[²ml6›hÞ™Ìã�Ýn·!WÒóÜ÷Þ–b9ð|t*ÊN§SÀqˆ {É-Å^ß‘†ºN‰dÆõsÿd‚–§’¢ïég־߄”å&ë!ƒ¿t­Ë\ÏLÈy~Z>ÐÝóùé?ÈrÄO&ªLÔáPH›MÒ!kx©›t\4¸ Àî¨"G¨!yì]Aç,—Ë2ÖÃá°œ!ãqôß&.MÚgl _Q–õýÌõüO?X?!×&¿ §^òY7´Åé£[ÞÉó�>Ìóß[ךPA¿›˜õû"ލ>ßʤ‘ ΢‚%E>àµSé›(c>Ó/vnµZåܱ^¯WDd•~@/Ûq™tdS&¤¼&Û©–¿sDÏ@wSGâ&Uèæ:ã‡Þ ÿMÚš¬$\D”È>ú—9FÝè3á´ÝÇxœi« >ÏO�ϱýâ¬5vRÈmÃvÀþhµÂçóyɢəO” ï¡.ÛíC„.iI%‰B6õå¾ò¸ð�£˜¼¾ØàË*Ñ”Æõ¸�{¼€Åy¾9�XŸIáìü@3™4²cŒÉ5tJžkD1¡c=�³õpIJu‘ÿç‡>2Qîs°²Î´¤l£Z§TÒ¨–Z~ƒŠm³ðV°(¸ÓÓÓ²˜`p`ðc8{£‚"$T…gC…lÂãιfQì,Ð^ôYì:�N,—Ëèt]­V%G¨½€|ÀïdcIÝîîîb8åmo`lÐÚ´a蜬(åˆæH^Ìy–‰4+鈃×g-µÔRK-µÔRË»V°½µÑâ +i¥"Ñö4϶”Á^ÿÆ^‹8¤g(4idg(GÉôǃנF9b‚g“~Ê^â¥|×Ñß Fº.ŒþŒþö³ �ì4¶—¼=]ù̹#'ü>{³à=´#GŸ°±§-@Ë1ù˜ã3êéç‘”½´ÙãÐ&¶è'úжòÙ 0{a`�½cI›LV8rÄDÀ1ÒˆúZÆ óœÁãÝ:ò`‚Ê„¢³+àœÇuÈ<€µ½¾]_äÈûžLØÚóÜÞÒ�„™4òœïõz ‚Êï1)Å}>ï7ïý“j®5è˜�bËX–×v»]œsD�ÿ÷ܧŸ˜—î‡ Ô{ŽPWÏo×…qå‡q1®`L€ö0.Ì=öúÌ9ê`Ýc°ýç9Ä÷¤.øÌ>&Ÿ¨‹SûY‡ÃÒ^ÈTÏEÏ1ˆdˆEꉞDN�‡LÔYfè“…bY¤¿IÅÏò~,Ú”gxm`®#;�“Ô•úZÖ?ä|ÆÄ‡ežzÑWn}�|�ýbe³yH‘±ìõ<ÈóÜ}áÏ8!SíöCVœ“““˜ÍfENf³Y#‚0;çu yÏíDÖ˜£�=ŒŸ 2ë&Ë”�˜÷ÔÓëžeÇ2Ǽ`]b®P¿LÚÚùƒqAïBžòc\‹±F¾è'÷{»Ý.v��V�5Þ•ÏÒóO^Ã鯙vF¡ŽDCQ¯ÅbÑho¶—è;ÕŽÐc½BQ×ìDaÉ™«Žä£M.åç€S¢§‘IëÔ,O޾ÍsYcÜ|Ö󌔫ŒϦîÈ'zq¹\òÔó€RI£Zjy‹ †’ )”Šst¢¨È¯É¢‚¦¼4 “P4#—ƒ W«UñàZ,E“Õ^m(ÔÁ`«Õª±ð´Z^"x¹°hA¡@QúÛí¶±¹ç=6ÚI»7 ¢Ûí6'¶ñÍF‡ !Æ SÄÁÓÆ›Q † í�dÛïrUg#—R‰£Zj©¥–Zj©å],çmÜbcž½Õ#Ä‘sw ¢±Ù�ˆr 4`ƒÁC>ˆÞ¶Ÿ½y ,8Ò€oŽ’šL&Åþ<–rÆiløÛ„Bö4¦ÝjcèGF8�ŠmÐ^¯W²L1WŽb¼2çñÄ>·Ó–AzúŒ ã x„]oYqÝ3‰`P¦ßïÇhôÿÚ;{تŽô�¿‚1æ’-ma²©HC… ïRd•*{•‚T�¤ )ð†‚|�m6Iå»R6PA“(¢°S¡M¤XÛ솬W(ÐØÒêŸÅø |þú�ŸûúúÂó“,ƒï¹sæÌ¼3gÎóÌÌé,[Ö©  ú]Ò×ÙÄÄ.Ï$”©Ö“>+ †qn&ëi½aò¨(©®Æ=ië,wb‡w‰dq à ‘I·ÚË+z"VuéJݶP�^•sÙ“iÊZ��•ˆhZ�—wwÐëÉœ®LQS�ø¡þ~øá‡bD³J‘¼©xMt6ºŠ¥ç¿­LYŽ%Ù%cíÚµeE1Eÿ¥õN}ëß(Ç)P!“ØâïÙ8åïjFê,u�‰ˆLû'uë½löi\ úó¬OÚ¬„ öTÈΆ4[¿~}ÙB>÷½ÚÇpoQñVÍaâžXA`çÚ©ç¼bD…^ PÚƒÞË0˜µ?ÕÕ­ê�§V«•"‹V©i_¬}–Æ®®ØÊ†¶¢+*ô:¹ú4Õ‘¨V a| ãLOOGggg9öÖ­[åÚT/¢Pã…:Éâw6ƒµO HSW±ÒÞµ?ɺTUUM«ÕDU³‡5¦ÔP¤/aEˆæCãJW²UñC;ÈuªyÖ|é»Ò:;;KÙéýE'¿hI;¡Ï`¤}ù¦>;èjÍ�Þ“ÈC6]t…+÷)¶$^ô¾Jži“Ú‡©!Lžšš*å@<Ѩ٣Æ&åºuëŠÑ¢&“ö�\k^¤ùÑ{¹ö©”˺uëbãÆ�¥Ü‰Ñ¬çæaÑ_Œ1� tpz�Xè€è¸ÚÛÛcjjªtÛ…™9Ž´iÓ¦¸}ûvÌÌÌ”ñ¡nQÃCüíÛw¶hAø"]}ø×1� ¥º*…q(BCggg™D…8„ÈÌZW·«XÄ8WÏ©â(d1“ü¨i¤ãwë"l2ÞU1‡üª®¹È“ÎHGãz©o.÷)Câ‚YÁºIë_'‹ñYD4Å ¢ÊÆ�£^¯GD”çäÔHÓò"=Úˆ]ÝÖZë…üR>Ÿ<_ �àȳ_ni«šyä8Ê�¼‘.e eÎùÔ\⻜Á’:RÃTËr~~¾¬*Bücæ<[‚©ÉH=èó·Æ1ÄZ6.5¦Ô|RÍ€ïiŒëqÚ/kc<m†çw]ýÕª/G ¦ísÝú^eÝÞ�Ur'j!¦wtt”‰¢ôg¬j¡žõz4ÆA�3íÿ²È­â-±ÌÖmUUÅÜÜ\“è««Ô¡ž‰5ú εfÍš¢ËTUUŒa~C­VkÚŠuݺu%þ¨;î‰\§¨:‚û€nwIœ<õÔSÅÐÐÝkTÜž™™‰ÉÉÉr¿¤O§�RÓ�2ä�ÜcԠθ·“'Ú}*eÏî9ÚÏes…¶£Æ}ØÜÜ\)St 7-‹¬»e¿“/=÷o5ŠÉãòC^øÑ{§Æ0ñ4==7n,Çlذ¡ÜS)^¡÷5�´/º}{á]Vz^î}9F¸&½ß¿Z'ÚWj• &úUÚ¶¶%úíóÕŒÑ:˜žž.+áHKuTÍ+[ur^Ú·ö³:Þ¡Ž(â-O¦hU‡zï]·n]tvvÆôôtܸq£´×Výs¾ÏR—Ä«ÞÔØ$þ0{ׯ_“““¥¬ØÖ•>¸ôóaŒylÑY™ ’p‹™aÉ ”Òqpó`æƒ>Ð`iÃw˜ TUUÌÌÌó‡�dzº‡U:áa’�juÃçææÊzßÿ}™u433Sn4³³³qûöíèêê*ƒ‡<8£Seu7–ˆ…=c1¶t/t°õ†ÅÃn­V+/U½uëV1’òÒ\}ØËË<�1ÆcžDtvmDó;_T@øça‡fó#bá]ú›ÉI ‚ÙÍ›7cvv¶IÄã3öòG|ÒÕ?š„ ÝÎHðUd«Û’0£V·.ÓòЙªº}”ŽcçF,ˆèäYÅGÄ„ò 3üU„×Y뤩ۓ©p¥Û¯Ý¸q£ˆ„*ú2]_øL^‚ô]­ºm×K�#@Rº“Dz½Œ~G'½é;0!¹FÒåÜ|‡™Ü*ÈêJÌ4ºy¾Éñ¤æ‰ÎdVa>›"º‚�úË«H‡:FÜå™ ƒ†ï©!‚«¢-u§ù¥ýêÌîl ~R¶|ÖÊäÐØ×Õ:û™çÅlŒ 8’Ïw*˜QŽ´EêMó„1¨&õŸ�Ú ×@ŒjG¬Uq–x`f8ç§ãys»½½½ô‘Ô×Äßéi—jrówòÓÙÙYêŒv�Ž@^ÔLÓ÷öRŸj:èJ+®IËBûHú%Î¥FÇ[º"AMTWVß�OVqaÈ`p>úÊ™¾Ý€º$Ž´¿gÆ>÷ú1vѶN›BóX³fM<ýôÓåUìCš¬<£Þ""êõz¹mܸ±\oWWWÑ!4VÑ%TÀ&ÞÔØfUíŸẌW®�­*1È'íœ{(e=33Ód@зs âüÓO?]Ê�û5ý{gggY�¡y$^ÔQã—>U�¾Ü'©�­ý +¦´�ã‡øÈ¦uƒa¨«uLBÿ£ikZëׯ/ý¯Ž}´­Ò®¹§aŽ¢ýQæ«õ£ã Ú&’šªô9:�›ïÒߨ F^¹�é !]ée×"]Q¦÷wb“û…¶µöööèìì,úÛììlÓýN'_LOO—XÀÄTÍ2GÏãËOû>b‰<­L3�?íµ­éý“�¡x'm�}¨¿qãFܼy³ ( ί³ìX>¯¦äÃcŒ1æIA…�u[UUTDϳ†ó; TTQALgBÏÎΖqáüü|™®éêÃ½Š ºg¿Î„fL�g™ªhƒ�¡Â'yf ž?Ó‰F:Æm5‹Vó©Ÿ#$è5©0ú}ÍU ÒQ˜\Œoy`ãeŽWÑáŒqwD4ÍbÆœ©ªª£ãüˆ…w� (é,wf‰ë»†ôEë’X`ÜÎ9ô3"Êvm< !ÂhüS*Ê.eô¨¡¥[À:kVÍž§8/ù!.¹^Œ-5X=ÐÖÖVfýkŒSº2KÅV>'oüMWè3�Æ}FŸ“t ±«³ÑµoP£!§G9ª ®çT E®SÅh„=í7´ž5 þ­B5y'ÖÔø"}bSE_�5XH›¶£q­± çWñ–úÓÉ‘<£×j™A£Ý IDATµ¦çvÄyÐí$5ž‰;ÕrŸ¢&R6õù8Iô«Ô#‚(“RÕŤÐmö)DTý¡¯àÿã´MˆUàîèèh2i;˜‘äwãÆ�ŰڰaCÙ1»èˆ V¨bQnjj`"å:É÷HŒ€¶¶¶¦wmiÛÍu€ž¢÷"®MÅzÊMuÊBMݪ£AË`Æ ek;5¹]ɨ“u1Õ¸_k[P#Yû1m»:±8§žKû�¡}ˆ¶sí¯´�qô)|Úe¥õ©“60™É³®f¢ÌÕl"_Ôyî£ùL·�ÓòÕºÖüh'¬8ã<˜èn´'Úh¾×èýŒö«Þé¯è�Ô,åÿŒ=0™hÇ:NÈ€ô¸V÷v7q½Ä)i“/5ñs¨“‚ÚÛÛË 1=/ç£Ü#‘Æ@:i…˜Ú…®‚Ä€šŸŸ/ï8Ê÷P›FÆ<ÆTU“““å!)ba™oD”�ÃSO=ßÿ} ±$1bÁ ¢#bù%ß§3¤ó™��-3ìx@伤­ƒ6Ý ï‡~(/+loo�ÉÉÉ’_�QÀŠþÆ ŒNŸÁ,qÜÌÌLüøã�ÑÕÕUn2:Ó&ba Ê�ýuùŒÁL(¸²?½–0èaf€ná@ú^}dŒ1Ƙ' ìy f¢Û‚0&‹hÞš%¢yK/¬ù;fPDóDfV"œèª]­ÃX’ñB� ­Œý 16nÜXÆ:ÞS1‘EóÁqz]|Æyò*¢<†%ŸjF©X¥[L#¼p­jpq ;êKÅ Æ÷ˆË Â)×I91N§^y/ç�žž.cë7n”¼ÿïÿ+B ϧÂ=Ï)º"@Í8�•N¬hÙ@6ôÝ;º:Œòäoˆ¶Ìö¦ü0ÅïÕìÑ<#iŒ«°¤‚Â×Á3 mI /9óTWQj´m:{ZÅ25L˜œ§&qÅj5ˆò ~ÊKëC9-'5Isùéj„Vi©ÐKûRôùXÅimjØè÷TÖgW!I‹tõ\š.õIg£XEÇljñÜËõiÚš†æ'ÿèì|]I¦fŠŠåãÄ·öÕÚÎÔ,Óv¥}¾ Ô*ŽëDÒÔUBy'1GZjìô­ZŽä‹>QÍ85ˆTভ’/mGÚQjΩ÷Õ<Ôô&Ý>¿­­­©Ÿ@'.É�¶5Ät]‘»nݺ¦]Vø¾Æ,eÊŠ#bIû“ÜVõþ”c<›8˜XZ¿º5 Æ?÷"ò¥çÒ>Rë36ô…¹íë¹ô^³Ôoík¨3ô3M�xÍíNÍuÊŠt:Ñsj™±ZNßã˜'¨a«÷?͇öG”�škšåÎq”1í^û~}?”MzßRã'lÔe6ä´],5vÒ]™téëäÒkeÐéõêØ!÷¯´Qâ­SûíûZµ3�iêVãùæÍ›Mc]í{µ�“.;Ka*ñîyÆÚ”U^A6�Œù@G±°×vD”eðóóóåÝAÚùàîë B:>â¹Yê{ˆôf­3ªªyF ?¬8Ò—%2[‰¥¢¤7==]Ì+:C^`KgÇ ']o�\OgggLMM•A&<°t›>]zƒÒÙAÜ8`°L››47!0èõ7DcŒ1Ƙ' ŒtË Ä&)©ù“…j5STH`v0"€ŠUzn>ÃQñBEªl<¨x£ãC5m"¶/Ò§*ª0ÓšëCàQÁ—Y´:¾Dpd<��£‚™ kyf¬Šª¼Û‰¼ëönÙ4hex ‚êsCÄÂû"˜$633S¶ššš*¦ão5¤¨kÆÎZŽ<+p=Yx%³h®¦Q6+tÕ�вYÈÖ÷>èn:“^…6�q�]¬¢¤^÷�lò踈 &ÄeD¬Ñvò=‰ë¤,9Vã:×W¾N]•Í�š…äµÕ}òø”ö§ý´Ö�ê–\«¶�lðEDÓ8€•š¾Æ÷VÝ"�~ƒ�´-i�Í«›FÆ<Ö¬]»6êõzLMM•­èô699Y ˜-ÜÐ0VÚÚî,ñÔUDµÚ�€ºú‡rUF 5�'5MÔФŸa²Çjþ´.òÊ͋ƃö…:&жÂõ©ñ©}«šÆKõQÙ€PsBû5¼4®µìòDÎ϶nZ?š¶öÉÚOkŸCºLÏõ“¯K5/Ú ãÒ£¾8�®l¤_×{éjžI+ÿ›ó©):;;Û´²¬ÕõEDÑòè'‰;;aP1ÎÑñ�öŸ:‘@Çx­úÙÜ–u\¢uGük›Œˆ2¹^Û>cBÆz¼Æ›–µ®Æâ^Ìù)_Õ‰uâéPOŠM#cSjµZœ9s&¾øâ‹²åûQêÃ%ƒL5+´ƒÓýdY™D'­Ù¤£ÛphZͳxpVEÂ"ntŒì¥ÍlK�é�¶Õ \b(íØIƒóéßtðFºZ†ºÌ¼ÕC‡ÞÔ¸Ñæ‡Í_îô�1ÆcžT@SA6"šÔÕ\QáM·àÉ¥Ö®]ëׯ/{Â#äÍÌÌ4™j°¨A£Â¦ŠŸ:öS“J Æy¼7GMôº²è¥ãb~ô\l˜FyõŠŠfyæ+ ÿVQUEEêJëGÅÊ[WÛ¨À¼t:"ÍþgÅÀ�?ÞyÑ;¢Ó¦M›ŠˆÂça…Â" Ëü|ó }&�Qþ<‹Üºu«Ét!¨_ÊEŸw´>²P¤â`+Ñ‘§ªÈ­õ©F€–‡®ž"²Q•Å5}>Ϋw´=f´�µºžˆh2*D³Ð™Ÿi5>õÿ:A3Ç�Æ„–ùlõüœW°ižt¥ƒÆ/u£æŽÖÇ·z®æßÚggXóƒH¬u£å¤çÒ2à8]áš�Ú€ö¯ }´^§»Z®œ[Ûý�¶Í/?:‰˜I­9&ø¾Æ³NÊÍùÖr'.õ>®å§b9×ö“¯/oéÊäÞl´’G�µlòèýGûg}�íˆëaòDN'FYkÊ×IyµŠ!®Có¨åª÷ -wòVUU“þ–ûRbZQC=K¿¯÷ͯŽ5(c�DÍ1­LyòÓj‹^ÒÕ¸_³fMÓÖ¹úÎtÊ›Õm¼B‚ëÍmMÇ8:.Ôq“š#üh¡×GyhÜi̪É�ÇL:±…ö¨åËxF'¼ë®Lj®1N¡ÎóÊ5&ÖkœP¾Ô÷Ú`žÔBÞuœ¡Ø42æ1¥V«ÅþóŸø÷¿ÿ½êã[ RÍχ ÆcŒ1O"Y RF…GÄ:ªnݺÓÓÓ155sssE@P3¥£££¬nh5;\…s�Uª‚ ŠÊ*÷¿úÕ¯Êß1C"¢lý¦yaæ°ÎÜU�"ïg¯3JuÆmž)ÍwE8·nŸÓÙÙYέ"§®T!_乕A…ð@½­]»¶]]]EÈàz²@£¢â;$ ´èŒ_báQê­•Ð…éÄÌ^®I_œ�à£3ÇõX5§¸¶Vâ qL}g= ü䛘RTøF U1?«1QUUÓû¡¸†,Öküg!•ïdÁ\M}7‚¶ŸÜÖÔÔk!ïú›ï2›š²CŒCàTÑT|VãH ãlnè1zíÔ!mN'jŒ¨˜šIþžë@ÓÑïêqj<©Ë纊CEi­_ê@ßk£q˜¯%·sMWó’gÐçëÓrÖóqL®÷üoDSêˆþV·»ÔYöÙÀÒ>Ÿ$}ÒÖ˜Èe¶Tj›Í¦e‘Wâ°—æMÏ¥æW+PËX��òK�è1jPy5d66rÉæ—BùÖj «oY‘Hzjzæö¦«@ÔôÒþVMf½ÿaNèD&PÖÄÎüü|Ó¤­O½Ïèõj<×jµ¦Õ]ä—Ϩ'}Ï5޶%½n�5ãu²‹Ãdkò©mWïͺb6õ¸fΣfu—'Öè=MÛý€¶ñ”UUUeBí7·Ã¶¶;;ö´··—÷³�ä�¼3aHWæ2ŽÒ8ÎuÜjŒ í�{“Žur…ŽÇnß¾]Þ9Düðš ꙋt§$ÚªNQSUóA�2ÅôQãKq-_¾£ïfK}Yµ5O*Bg# ›W¹ýd“@냾Tûr»µÜIO¯“<¨)™ÍCÚ¬®šÔv¡ié5Òh{£¼5 �Ólü«È¯Bøììly§´–ÝR=4–t5娫æ"¶øãþ¥«žtrD®�mbTM¦Ój©�Í+­�k½Gr¯¢ µOÕ±  ´ßÊmD �èó9/V![Wü rLOOdž bÆ 133���±~ýúøïÿ[f-ÏÍÍ5 óù�^ Ä„D�1ÏÿUGLÑÕUJ YUq(›*è¯Y³¦é=B|GgQ«@¢&×<==]ÞutãÆ�"Âèì×7n”ôþïÿþ¯ä{jjª9yõ€Ö™Fºz'‹éYl×ÄÙ(âšIK…6�ÁŽÑÁgº‚Kë5›^ÙС,õ½^* ç÷K©Fü/%>ç²Pñ‘´³`¯×ªÛØD,¬@Sa_ãRgIgÑž|!Š©°ÈÊÊŽt”UˆÖóQWúž,�5 ´nXõ@z¹ŸÊÛ”ó÷\®¹Ž—3ƒ²™¢ÓÏ´ìZ€ ˜�|c©{êRˉtµŽõœºuõÉŠ½™™™bÎçëÖ•˜ŠjtG4¯ÆQ£A�`…)}–öùš1®÷ -O½>-ëVuB9Q¦Y¬Î÷ís4ž45céKõ=,ºŠH�Ѽ�¨NTPSûv­c�'„lÊ&÷çUU•ú���-«HèÔüÉB|6¸Tð¦ìtåF‘®¶Õ{±šZþj Poº ƒ{ŽšŠÚžµ¾õï­Ê1"šî:†x¤þSäÖókù¨É jŒh]ëyˆêVWÚ�åÇ9³I qÃØIïõÙŒ%N´ìÕ8T󪪪òJL Ú6eDý3ŽÑU¶¹­pÊ/}Æ Bˆ`,é"ú"FèËÐÈ(Οg0ÏÌÌÄ�?þ“““eÖ�7šV LNN!äûï¿/Ôääd“a¥"^[[[ܺu«ä]ßÕ b*±£" é“–ÎÔ¥~¹6ê„ï¨h‰8­q¥3ØU€Ë"dÄâm�0�Ôô¤³i¤±ˆ¸£«ètV<çÏ3Ç�vÄyø�gñ«I¥†®^“šUÌâÏ+¬hkˆmº:Žï𙚋\£Æ1…Ð�gÂkþÉgÎ?h*ò5 –•³0©ç#ú÷V¦h>‰-C5´©ËV+°T´Ïñ•W€ð7�#ú-òK�™033ÓÓÓ1;;[ò¨"²7ô¹z.ŽWC7_wÄ�UÄ «-U´ÎmŠºFÌÍíH °|~þŸMÈü]mÏ™V¦„¿R{äúæçç‹A�M[5‚—ZIEèŠ,½FÝR�ŽÍ«Œ´¼õ^›c]MVí r[!´?Ó÷ª©!¯ßÉe¨}‘ö}yÂÅ­[·JÚÄ‘±z-üÖ¶¨c5au…ßQC[ã�üªA§÷’l ªq¥?š�‹V}y×”äS 'Æ[”3ÆžMä]Ç#ùþšc�ü3&Êã5Vjñn#m¯Z~jbë–·ô1Zw+•W+c7O$ ލ'ÚcÞ¯¹~ýúbj±‰IPô›:y‰²¢O¼yófùᾤcŒˆh¹¥«Þ#éó:;;ËçlݼqãÆÒ–ȃn�§}�bÓÈcŒ1ÆcÌÏ‚ ºZ¥ªª˜žž.«ttF­ øºG?/Hf›04y(F\@œPA[¶"šß/Äqííí±iÓ¦²­[WWWDDÌÎÎÆ† Z ØT$j±ub83X1�ÔÐÕGy»‡¹¹¹2K—ßk×®-fR­V+e�Ë€ï#¾�°t–9¤šKº*J 0}_† _sss%H#âŽáÄj2¾«Bi«ˆ¥ÆåßÊ<ÒÙÜÄ…Ö¹šd7”¥Š<:Û]Å2M_…øˆæUG”«®(àÿ*°eCqOÅRßÔ\Q‘ŒëÓ´U šŸ_x¯‹»º"EggcŒs=;úòlº Fbt’òNÕj Û‘ÇÛ·o—ØÐ2UóŒëÒôÔ  ì¸ŽW1ZÍ$Zõï9β1ÔÊdRó¡U©õ¦‚q^�¡¢o6-ÕÐ|çv�óÈoݶˆ~GÅâÙÙÙò~9~k‘Ú™Öc‚1¼h_ë¹MÓoÒ`¨ÐþÔ Òm×4&²«õÃyÔ,he*iûÓºÎq��Ï&@6yø­yÔÕ$9}5ɈmM³ªª2¹‚þAóB;¢?×kʦ‹š+zžóÙ„iµu¨®6Ô{qž f’’ûV®U'‹hzœ—{�®êÒ|çsPö¤¯Çhè»Õ¸–ˆ…xf"irML†Ñû[²éx…öÃÿ5vh—üÖíÉõ¥«s³iÄ=[W­]»¶¬"oœ“8Íý<åO›æºµÓ~©ʹÕ8LcKˉm‚³Ù¡í5÷õ:NÔ- µœsÈ«YuU÷:¶J¦YEÅùù±Â½ ó]ßiÄ1Ä�ö™ŒÅt¼¥í®[·.:::J?­}ÆqËùÔ4ÊmÀ¦‘1ÆcŒ1ƘŸ…,>©(…Q�À±0{Rß{€Ðœ·ÖQA\ ¼UHÊèlVóù[GGG9O½^/3M7mÚTfb#`¨ä­st6«Î4F°Ñ$óÍ›šÌ×íPôÝmmmeÖiD”ÕDµÚ�­I†xOB /jÖ²G8¡lt»0 @}qó­[·âúõëek”¼åŠ �˜Z¤©««FT,W1D�5í´¬òÿ¹NÒQaXÅ/bLßG¡‚”‹Ô‘æOϯ׭b¹šbÙŒQS‚k -Êr\©˜™Eoyu>u«‚¦¶ ÝòP…oÊaJE|Ì6}¯bqJùæU�ZŽäGMMKë®U»Q´|ù<£Ÿes¹•)©q:«$›.¹ŸÕÊk»Ôk§?§þ™0 Ÿ«i¥Â/ðÝVežMò˜c¢•Ù×*^Z™‡ùû9®ÔÐ�|ßR�]M#bJc&"ʪʨUäH9ïjhß­¶#l%ºë±­Vé±ü¨q¦ÆU«òÓ<¨i¤u "ж[M; èú7� Í#çdu/ãbŒëÇ8Ò˜×~NÍ¡lºj™1ŽÈ[Ç1¶À,`ŒÁ½RËX�ãyå÷iÚý·Æ=ߣÝÓNµmkÿÑüþA�§lpçØÐ±eߪ޴^´­·ŠMC·Ô1+“uÔ|ѱ÷<�KRæ7oÞ,«–´ì0'ò9ç›��]´•_D”•FŒ©5ÿZNmmm¥¾uUê"ã´Ê–œ1ÆcŒ1ÆcŒ1ÆcŒyâhm¿cŒ1ÆcŒ1ÆcŒ1Ƙ' ›FÆcŒ1ÆcŒ1ÆcŒ1Ʀ‘1ÆcŒ1ÆcŒ1ÆcŒ±idŒ1ÆcŒ1ÆcŒ1Æc¦‘1ÆcŒ1ÆcŒ1ÆcŒ ›FÆcŒ1ÆcŒ1ÆcŒ1&lcŒ1ÆcŒ1ÆcŒ1Ƙ°idŒ1ÆcŒ1ÆcŒ1Æc¦‘1ÆcŒ1ÆcŒ1ÆcŒ ›FÆcŒ1ÆcŒ1ÆcŒ1&lcŒ1ÆcŒ1ÆcŒ1Ƙ°idŒ1ÆcŒ1ÆcŒ1Æc¦‘1ÆcŒ1ÆcŒ1ÆcŒ ›FÆcŒ1ÆcŒ1ÆcŒ1&lcŒ1ÆcŒ1ÆcŒ1Ƙ°idŒ1ÆcŒ1ÆcŒ1Æc¦‘1ÆcŒ1ÆcŒ1ÆcŒ ›FÆs_éëë‹Z­ƒƒƒ÷=í­[·F­V+?###÷ýæÁà:3ÆcŒ1ÆcŒ1�6�Œ1æ1áêÕ«QUU?~üagÅcŒ1ÆcŒ1Æó Ħ‘1ÆcŒ1ÆcŒ1ÆcŒ‰ö‡�cŒù%ñå—_>ì,˜G�ªªvŒ1ÆcŒ1ÆcŒY¯42ÆcŒ1ÆcŒ1ÆcŒ16�Œ1ÆcŒ1ÆcŒ1ÆcŒM#cÌcD£Ñˆ¾¾¾¨ÕjQ«ÕbóæÍqàÀ�‰ˆˆÁÁÁòY­V‹���òÝ���¦Ï[¦¯Ç,uœ’Ó]í÷–bll,bëÖ­%­­[·ÆÀÀ@Œ��­:�‰‰‰8þ|=z4úúúbóæÍMé=z4&&&V}m}}}122hJ¯¯¯/�Æ]_k®O­ÓF££££Q«ÕâüùóË^çàà`Syi™?79?ü¬&?úݾ¾¾‹”ë,u7::ZŽß¾}û²eq'¾�F ,*ûíÛ·ÇéÓ§ïê:WЇ‘‘‘Eõ²\ÞšÒ"_G�½«ø7ÆcŒ1ÆcŒ1÷†M#cÌ#ÏÄÄD8p Nž</¿ürŒ��GUU166/½ôR:t¨É ŽªªâÌ™3åogΜ‰ªªbxxxÉó>|8ªªZñ8…tõç^i4ÑÛÛ[·n�/¾ø¢¤‡ðÜsϭڌڹsg¼ýöÛ±iÓ¦8qâDŒ��•ôþüç?ÇÅ‹cÛ¶m1::ºâµíÚµ«äïСCñÒK/•ôÆÇÇãå—_Ž7Þx£©–£ãã�?Ž×_½Ô'å¾{÷î8yòd¼ð ñÏþsÉtvîÜgΜ‰'NÄåË—›ÊlóæÍ±oß¾XÑ »ß\½zµ)&VOú]þÝÛÛÏ>ûl‡ÔFR ÝIDATŒ��G£Ñˆ�>ú(Þyç�h4±oß¾8qâDTUqèС%�£±±±xî¹çâÓO?�íÛ·—ïQ�¯½öZ¼ûî»±}ûöU•×àà`:t(vìØ£££%­×_=þò—¿ÄöíÛãúõëqüøñ¨ª*®^½Ú2-bÿÊ•+144Ôo½õV\¹r%ž{î¹»6µŒ1ÆcŒ1ÆcÌ]RcÌ#Îþýû«žžžj||¼åç_ýuU¯×«z½^ED5<<¼dZÃÃÃUDTÇ�_öœ«=®÷ò½¡¡¡ª^¯W_ýõ’ÇÜÍu®ÄøøxÕÓÓSíÚµkÅcwíÚUλTþ¾þúë*"ªsçÎ-›×044´âyûûû—,Ëñññª^¯Wýýý«:ßj®óAB<ÝM�EDÕ‘#Gšþ>44T>ËõA[¹W(¯•â÷Ô©SËÆñE¬.—e³RLpÝ÷Ò&�1ÆcŒ1ÆcÌêðJ#cÌ#M£Ñˆ .ÄùóçcË–--�éíí�sçΕU �cccñÊ+¯Ä¹s碷·wÉãz{{chhè¾\ç–-[âÅ_Œ¯¾újUÛ~]¿~=†‡‡—Ì_oooôôôÄßþö·eÓ9xð`ôõõÅáÇW<ç‘#G""b÷îÝ‹>{ã�7bÓ¦MM«É–Ê×ððp|õÕW�å*•žžžøàƒšþÆo§N�ZT;vìˆK—.Ýóùz{{ãùçŸ_¶\ÇÆÆâÍ7ߌ÷ßÉxزeK|ñÅ«:çáÇ£¿¿Ř8|øpœ:u*Þ{ï½eWÈcŒ1ÆcŒ1Ƙ{Ǧ‘1&"bÑûMVûó Ó:yòdìß¿?¶mÛ¶lþ÷îÝ===?¹ï¼óNôôôÄÞ½{W<öàÁƒ÷ý:¿ûî»�Ùµkײ†VDĦM›â›o¾YòóF£×®]‹·ÞzkUùêíí�ªª•ËØØXœ={6Ž=ºêtöïß¿È|�û¯÷›M›6-ùÙŽ;Øy¯]»¶ägï¼óNÔëõMž-[¶¬¸e!1�A¸ÇŽ‹z½~øáªŽ7ÆcŒ1ÆcŒ1w‡M#cÌ#ËØØX\»vmÕâø‹/¾ø€sô`8{öì]åýQ¾Îå̆O?ý4º»»W4ŸVâïÿ{DDüþ÷¿_õwvïÞ×®][Õª*³</^ŒçŸ~UÇ®«/^Œz½~W1Ñ××/^\õñÆcŒ1ÆcŒ1fõ´?ì c ¾üòËG.-VÀ´Úžì—ÂÈÈÈK»ÑhħŸ~ß|óÍ"3g×®]qõêÕvîVüïÿ+[«ý®\¹/¼ðÂ]÷»ï¾[´jí~Æþ£ÎÄÄD|òÉ'ñÙgŸÅ·ß~Û´Õa½^�çŸ>¾ýöÛeÓ¸víÚŠ+ˆVË•+Wâúõë?ÛÊ-cŒ1ÆcŒ1Ƴ<^idŒ1¿0&&&bûöíqòäÉØ½{w4�¨ªªüŒ��lj'î‹�ó0¹|ùrÓu­æg5[þR�mÛ¶ÅgŸ}/¿ür 7•Íèèh¼þúëËn‰÷ èîî¾ëz¬ªêgÍ£1ÆcŒ1ÆcÌ“‚M#cÌ#Ë3Ï<ñ‹ÞŠê~›±gÏžˆˆøÇ?þÇŽ[tŽ-[¶ÄÞ½{ö\›7o¾/«›È7ÛÔ™•�}ûöÅ‹/¾_~ùe>|xÑ–pÛ¶m‹ƒ®h&vwwß·6ém�1ÆcŒ1Æc-lcY¶mÛÝÝÝñ¯ýkUÇþùç8G†þþþ»ÊûrÇ~þùçqéÒ¥Š-[¶Ü�ìÝ70FGGR:{÷î�z½üñýÉØÀ‡~gΜùÉiíÞ½{Å-ì`¥¸þÃþŸ|òÉOΗ1ÆcŒ1ÆcŒùéØ42Æ<Òœ8q".\¸°âJ„‘‘‘¸téÒŠé±zi%ô]/š#GŽÄ¥K—Võ~£óçÏ/{�¼ïç·¿ýíŠi­ÖŒ»_üñ�Œz½o¿ýöª¿Óh4bóæÍ‹þ>88_}õÕ}'Ô/‰+W®¬j;‰‰‰WƒýéOŠëׯG£ÑX1­•LªÞÞÞØ¿|ôÑG111±bþŒ1ÆcŒ1Æc̃Ŧ‘1æ‘æðáñÿþ8xðà’¢òèèh:t(êõúŠé±zi9a¼ÑhÄ+¯¼rÏy¾[z{{chh(:´ì*œÑÑÑxå•W–½N¶n[nåÆÄÄD Ä… î=Ó÷À–-[bhh(.\¸§OŸ^ö؉‰‰8zôh¼òÊ+100°èócÇŽE:thUÆÑéÓ§£V«ýäUN�+»wïŽK—.-{ýccc±gÏž¸víÚ²imÛ¶-N�:o¼ñÆ’éé6‰+ñ׿þ5¶nÝ{öìYÑ&v[‰ÆcŒ1ÆcŒ1æ§cÓÈóȃ¨¼sçÎ8þ|ùûÄÄD4�ò®–W_}uUé5�8{ölœ>}ºÉˆ:þ|ôõõÅÉ“'W�ÖýâðáÃñþûïǾ}ûbpp°I<����xá…âÕW_]6o{÷î�þþþxóÍ7¥Cyíܹ3®\¹û÷ï ×ÔŠƒƹsçâÝwß�,2|FFFâèÑ£±mÛ¶øì³ÏâܹsñÁ´LëÌ™3ñꫯƾ}ûb`` )6HëôéÓÑ××ï¾ûnœ:ujÑ{|ž^{íµèéé‰}ûöE£ÑhŠû±±±ŒÞÞÞØ±cGôôô¬˜Þ±cÇJÙ·jGFCCC+¦µeË–øâ‹/bëÖ­ÑÛÛG�m2£&&&bdd$cçÎ�qñâÅ8wîÜÝ\¾1ÆcŒ1ÆcŒY-•1Æ<& Uû÷ï¯"¢Šˆª^¯Wû÷﯆‡‡«ªªªãÇ�WQþ¿çÎ�«zzz¥544TUUU —Ï–JS?_íé/ÅåË—«þþþª»»»|§»»»êïï¯._¾Üt�üô÷÷·,«]»v5×ÓÓSõ÷÷/*¯¥ÒYêÈô÷÷/:f×®]Ë^çøøxuêÔ©EyäZW*§\fGŽiªO½Þ»Ië§’ãfµ?Z¦Z÷ü?~|ÉsèwµN»»»›ò6>>^?~|Q9íÚµ«:räHI'×Érå7<<\õ÷÷Wõz½)½ÜŽ4ÿ+•_ŽÍãjÚ¶1ÆcŒ1ÆcŒ¹wjUUUwk4cÌ£Èàà`¼÷Þ{1<<{÷î}ØÙ1æ‰gdd$öíÛÇ��wß}÷agÇcŒ1ÆcŒ1Ƭ€·§3Æüâxæ™gvŒ1³Ï>û°³`Œ1ÆcŒ1ÆcV�M#cÌ/†ÉÉÉèîîŽmÛ¶=ì¬c"âúõëñ»ßýî!çÄcŒ1ÆcŒ1Ƭ†ö‡�cŒ¹ŒŽŽÆ™3gbhhèagÅñöÛoÇ‘#GläcŒ1ÆcŒ1Æ<&x¥‘1æ±fbb"�FìÛ·/Þÿý8xðàÃÎ’1O<çÏŸ�={öÄŽ;âƒ>xØÙ1ÆcŒ1ÆcŒ1«Ä+�Œ1� [·n�k×®-ú{OOOœ;w.öîÝûreÌ“ËÀÀ@œ={vÑß»»»ãèÑ£qìØ±‡�+cŒ1ÆcŒ1Æs¯Ôªªªv&Œ1ÆcŒ1ÆcŒ1ÆcÌÃÅÛÓcŒ1ÆcŒ1ÆcŒ1ƘøH»ÀaÔ×UZIEND®B`‚ufo-kit-tofu-ed0e5bd/docs/source/figs/reco-geometry.png000066400000000000000000004616521521054151500233010ustar00rootroot00000000000000‰PNG  IHDR .ÏÀÇ 2iCCPdefault_rgb.iccH‰••gP“YÇïó<é…@B‡PC‘*%€”Z(Ò«¨@è�PElˆ¸+Šˆ4E�E\•"kE ‹‚tƒ,ʺqQAYpß�÷?¼ÿ™{ÏoþsæÞsÏùp ˆƒeÁË{bRºÀÛÉŽÌß(ŒŸ–ÂñôtßÕ»­Ä{ºßÏù®‘iü常¼rù)‚t ìeÖÌJOYá£ËL�ÿÂgWX°\à2ßXáèyìKο,ú’ãëÍ]~ )úÿ†ÿsïŠT8‚ôبÈl¦OrTzV˜ ’™¶Ò —Ëô$GÅ&D~Sðÿ•ü¥Gf§¯DnrÊ&AltL:ó5204_gñÆëK�!FÿÏgE_½äzØs û¾zá•tî@úÑWOm¹¯”|:îð3™ÿz¨• €è@(U  t�0–À8à|AØø $ȹ`(E`8ª@-hM œ�à<¸®ƒÛà.��L‚—@Þ�‚°¢A2�¤é@F²† 7È ‚B¡h( Ê€r¡�PT UAuPô tºÝ„¡‡Ð84ý }„˜ÓaXÖ‡Ù0v…}áõp4œ çÀùð^¸®‡OÂðø6< á—ð"Â@”]„�p$‰BÈV¤)Gê‘V¤éCî!Bdù€Â h(&Je‰rFù¡ø¨TÔVT1ª uÕ�êEÝC�£D¨Ïh2Z­ƒ¶@óÐ�èhtº]ŽnD·£¯¡‡Ñ“èw †�aaÌ0Θ Lf3¦sÓ†¹ŒÄL`æ°X¬ Vk…õÀ†aÓ±ØJìIì%ìvûGÄ)áŒpޏ`\.WŽkÆ]Ä á¦p xq¼:Þï��Ào—àðÝø;øIüA‚À"X| q„„ B+áaŒð†H$ª͉^ÄXâvbññqœø�D%i“¸¤Ri/é8é2é!é ™LÖ Û’ƒÉéä½ä&òUòSò{1š˜žO,Bl›XµX‡Ø�Ø+ ž¢NáP6Pr(å”3”;”Yq¼¸†8WJ)Hq¤"¥öHµJ IÍKËIÛJGJJ·IK”aÊ8ÈÄËì—é”y"‹’Õ–õ’Í’="{MvVŽ.g)Ç—+”;-÷H–×–÷–ß,L¾_~NAQÁI!E¡RáªÂ¬"CÑV1N±Lñ¢âŒMÉZ)V©Lé’Ò ¦$“ÃL`V0{™"eyegå å:åå–ŠŸJžJ›ÊU‚*[5JµLµGU¤¦¤æ®–«Ö¢öH¯ÎV�Q?¤Þ§>¯ÁÒÐØ­Ñ©1Í’fñX9¬Ö˜&YÓF3U³^ó¾F‹­¯uXë®6¬m¢£]­}GÖ1Õ‰Õ9¬3¸ ½Ê|UÒªúU£º$]Žn¦n‹î¸CÏM/O¯Sš~°þ~ý>ýÏ&  � ©†.†y†Ý†iñ�ª�î¯&¯v\½mu×êׯ:Æ‘ÆGŒ˜ÐLÜMv›ô˜|253˜¶šÎ˜©™…šÕ˜�²élOv1û†9ÚÜÎ|›ùyó¦é§-þ²ÔµŒ·l¶œ^ÃZ¹¦aÍ„•ŠU˜U�•Кij}ÔZh£lfSoóÌVÕ6¶ÑvУʼnãœä¼²3°صÛÍs-¸[¸—í{'ûBûªƒŸC•ÃSGÇhÇG‘“‰Óf§ËÎhgWçýΣ<Ÿ×Ĺ˜¹lqéu%¹ú¸V¹>sÓv¸u»Ãî.îÜÇÖª¯MZÛé—ˆÿ2Â6¢,b&Ò*²4r*Ê*ª4j:Ú*ú@ôLŒMLyÌl,7¶*öuœs\mÜ|¼Güñø¥„€„¶D\bhâ¹$jR|Ro²brvò`ŠNJAŠ0Õ"õ`ªHà*hLƒÒÖ§u¥Ó—?Åþ ÍŒ]ã™Ö™Õ™ï³ü³ÎdKd'e÷oÒÞ´gÓTŽcÎO›Q›ù›{r•swäŽoál©Û m ßÚ³Mu[þ¶ÉíNÛOì ìˆßñ[žA^iÞÛ�;»óò·çOìrÚÕR V (Ým¹»öÔ±? ìY½§rÏçˆÂ[EEåE‹Åüâ[?þXñãÒÞ¨½%¦%Göaö%íÙo³ÿD©DiNéÄ÷e̲²·7¼Yn\^{ˆp(ã�°Â­¢«R­r_åbULÕpµ]u[�|ÍžšùÇ‡ŽØi­U¨-ªýx4öèƒ:§ºŽz�úòc˜c™Çž7ø7ôýÄþ©©Q¶±¨ñÓñ¤ãÂÞ'z›Ìšššå›KZà–Œ–™“!'ïþlÿsW«nk]£­è8•qêÅ/¡¿Œœv=Ýs†}¦õ¬úÙšvZ{aÔ±©CÔÓ)ì ê<çr®§Û²»ýW½_�ŸW>_}AòBÉEÂÅü‹K—r.Í]N¹<{%úÊDÏÆžÇW¯Þïõê¸æzíÆuÇëWû8}—nXÝ8Óâæ¹[ì[�·Mowô›ô·ÿfò[û€é@dz;]wÍïv®¼8d3tåžý½ë÷y÷o¯ñy02*|ñ`úaÂÃ×�2-<Þ>†+|"þ¤ü©üÓúßµ~oš /ŒÛ�÷?óyöx‚?ñò�´?'󟓟—O)M5MMŸŸqœ¹ûb݋ɗ)/f þ”ø³æ•櫳ÙþÕ/ M¾¼^ú»ø�Ì›ão�ßöÌyÎ=}—øna¾ð½ÌûØú>|œZÈZÄ.V|ÒúÔýÙõóØRâÒÒ?B,�¾”Í bKGDÿÿÿ ½§“ pHYs\F\F”CAtEXtSoftwareGPL Ghostscript 9.50þ²]E IDATxœìÝ=o#Yæ÷猦'À8›Ø©œS¹2Z(”bÃ9ZÌ�ˆ ¥ÄØ‘ÙòFd´±ˆýFóØÀhL[>êV7Uª*Éz%ÿ?€˜i‘ªº¬7R¼Ï1w€í>}~“´–4•4ûñu¾nxH�e—€í>}ö%½&~<“´!&€�ýÖô8%fvÝôì-íü½–ô$éïO_†ÏŸ¾ 5�  ³.P3˜Ù7I£¦Ç`oÛ‚‡×ŠÚÈ ‚KTÈÌ.ÌìYÒ\ÒEÓã°ŸÐ&nÛ9¼úñu¾¬c<Çà÷¦À±2³E–zM�ÀÁŠ´yœU> €#Bp € „¶pTXŽG‘6�—v@«8ªAh 8Ÿ¾ ¯µ½rmâvDp È7(ðª-ìˆà�ïºÀc.ìˆà��6qÕ!¸d£M@E.ÙhP‘ß›ÐFÛÄ-i‡.:»»ê)ª(ÖWtœ_HZIZ‡ÛRÒòíñeÝØ G�à�Ž6q:»»Hš'þöøb çd„ÀÒ}¸ms©(ÀüĹ  L—�0³�~Uzˆ-%-Ýýà €™õÃò{‰uÄÖŠ*K,%-Ü�Š’h‡£BKs¥¿.~ðöøBh© ³»«¾¤‡·Ç—aÓcÙG×Ç ».Jcfžòã…»7s!éIé•Lá1kEa€ñ.�¢°ì‘¢°ÁÅC—™ÍÂX§»ü^øÝ¹ŠUf‘¤AÆv’¤¡»/v]?€òíÐ&nUÇx€’<©`hITZ*dÇ V­Óõñè¾ßšàt„*H¯Úòé) ½\nÏÌž$}S4ñ¶Sh)¸–ôdfßB5(§�jK8*¡½W‘ã:F(o‹³»«‘~½÷蜮�Àq ¸¨…™õ$=k{“M[«™Ùµ¢I·ÑžCKº�47³§0f'æÓ—aO—p|²B¹KI·’.ß_LÒ¥¤¡¤q]ë¢{ÒnïkZ£ëãpžGñv_ìs�ð‘¹{Óc 3Ëû#séî—,ûBÒ·œ‡|Îi/·ëºž”2!LÝý¶À2²¶ÅÂ݇{@e>}>k{xéöÇ×yå­âB¨è^éÁ¢mÖŠÚÙMÞ_2CVar>-¨¹–t¹G¨ãUé!‹IFpi ¨Eç;o�/Vp}}EíC‹t6­Â˜kùqP'5@’a¡hì¹Ú>Ù»J`Ñ}PTƾž¼=¾ŒCh%¯U«í³aÖ1YõöÜXÏ^¦Ùž5�ó¥ŒÿÐswc9µì·�õe‡áþ]¯)�_K€c@Å%@]ýVz^˜`ZVh)˜(;¸t-ikp©)!à•5öª”½ý�Úµ¥M\˜8R~ˆc›ž¢0Ààìîê6«ÂÐÛãËòìîj¢�—^Cá�eʤ�yQvõž°¾‘¢1îãBÒSXÆ0/èQ…°ÞíÔˆ í×Ô0XGm -IѶJÝO]ßžužómÒ¶ý¶ç5%¾–ôß_ZûÞh;‚K€ºÚ^-ïÛï¥ Ü}efK¥O"öZÞ..®^P§…¢ª@— üUÚ&.æÚo"?M_Ѥzf8'T¼Ik‡48»»º{|™l[I¨b’vÝY«‚ ç�¡¥M}Ió¼íS¶³»«¼Š~»¸Û½öàU™roI³´çÙõíÙÄ9ßmÛo%\SFgwW"¼ì‡à î~è·ÿ³&6×…ˆf9ëèð €v)Rm©²ó~£]VZ€a­èš´’”¼–³ÆßW*Ê«Jr«¨e\rÝ÷gwW‹¼ê-aÜÏYËݵÝÜ6¡µTVÀ`¦hû$ÇÛ·´m·†ª:P4î´öayÁ«´c5-\6UF%£ôT<¼ò¡WÍÛ3¶äËÿÖ°ŸÔØ9_Úø÷ÕÐ~Ë“ø^êãy4Pö{ÃÑÙÝÕl×öu.êqÐ$Nh–U� ªv(yËM›8ÐQŸ¾ /T°êK…ÃÈj™4•4Ι�_H?=J3Œ”\z{|Y�Ý]�õ1·Œ»Ì÷SƸgo�/Ul¯¬€A^{¬x …¬’ã…–S•UŽ;»»ºVv5¼‰¤IÆ>^Hç´ÕJ ^…ðÄ»×Þ³»«´õ7´H†W–úZéi#l–Ü·uoÏØf[²p<}àìк¬ös¾äñ﬩ý¶ErûÍmÿÔëAØnOJ/8Áv`g¿5= È U\ÚRÅ©¬–.Ç‚6qèº"Õ–*kiH¦o�/·Eªˆ¼=¾¬Þ_n”®ê…Éö¼ßŸfün?THI÷HéÛn¥ê*¥m§¼ÐÒO! 3̸»È1°—PY'u*{^HEÒÏý3Tzu¤Ñ¶ýÛã·Ç—Ë·Ç—ÉÛãËâíñe¶Ëg%öÙ1lÏ6œóuëÈ~¿=¾Üä…Ãuä2c ×áyØÁ%@ µ­ÂQ‘Ê,MY*šÔ+ëv£ü6B·îNp ]×h›8¥ÖÊoï–%ëwŠ\·n•D¼?»»z÷ûÕ^R—³g˦\¡„ÜVvIá±ÚŽ©ÚëúHé¯cãÄ($Œ=+´‘µ/º`òöø’Ùž,%Dr Û³-ç|�Ú¾ßr�ÃÄòöUÛ¶;Ðz—]�\ª2L�µìÖ~›ÞÝ×î¾(ë¦(Бõ|Çî^x²h£–´‰K äL÷ ÿ„�GZ�gëu+¬/«RR²�\V‹¸Iƒ­ÇŠÚß2ü»î`Ú¢hHbS^ðªmvv°ëv8†íÙŠs¾fmÞokíxæ„­.;"¸R™Ù“²+ÑLÝ}çÉF …ŠT[šVÕ&.˜)š4ß Ð”Ú{¬!t”vn÷Ïî®î%)´ŽK ,ß_ö©sˆA¨þ´‹…¤Ïo�/Ú“ w©ø²‹P©*m|‡¬o¢ô}ÜÅàÒl—°ÎmÏÖœóuèÀ~Ûé8Ü�xl[` h½ß›h3{PzuIš¹{VU kšn§}*ŽTéíñeª–$+‡ÜŸÝ]­$ݧüÚZQkÉ*eµ„{>»»ºIi)–*ê z¤_ë·Ç—½C*o�/ë³»«™>^£¯µ_«±&íÚjô(¶gÛÎù´}¿ÚÒÀ¨¸Þ1³‘Òƒ R4¹Gh G¡`›¸õ�¯ó*ÛÄ•êìr*~¤�ç=IÏ�Ÿ í+ŽÒBd}IßÎÏî®Fa´EZ•™2‚pi˸hÙs/b×mÁöL(ñœ¯RÛ÷[¥×.ù¨¸@¶¶O–ÎÌ’ž2î^Iº{«[Ò;(Rm©Õ¡¥Ð&­¿q+¥½ÕÛãËòìîj,é¡ÀÃg5V�™*û9^‡ÛÓÙÝÕR¡ Wh×”´ÀF!‰¬ 1}U\!¬d»n‹“ßžU�ókû~Û·âÒRÝØþ@«\tAÞäÖ@ÕM*fUb9Ê–"fÖWv5•µ¤BK82�·‰+".ôk‚<¾6U:aþöø2 -ãòÖ³V�UØÞ_fgwWSe·²ŒÅ¡Žû³»«¸RÓBQȪÎëXÚëÈÁÇÔÛãËêìîêÐÅ4n�*]'±=›:ç+ÔêýVó5@Á%@´­…ÇÑMp™Ù…¤¹²«L Ýý([@ŽFÚÄ…6Gqõ ¦ƒ 7’¾)ûÚpS÷¤ÿÛãËm+l /Å6·çÓÙÝÕBQ%­ºCLuh]… Ž«e{¶ìœ?œ@‡üÖô( /¸”Ué ¡eZ–¶©bf=E•–²‚ ·„–pŒ~|�_Jú,i¢ôóº‰ÐÒƒ¢ Ð“ö0”Æ Áž¬ÀJ U {{|¹UªÚgýqKÌoa{wUÚ~9¹§%jd{¶íœï Π㨸h=w_™YÖÝ•—¶,÷Ø&çÊ~¾wŸÖ9 N?¾ÎW’Æ’ÆŸ¾ ûúUõäB5VìWòÎÅ<+Ec]* [=«¤ª-gwW÷Ên©w!éA5¶ŠÛôöø2“4;»»Jî·¢zŠZÉ $ ;X}i—çŠíjÝžm=ç;ˆóè8‚K€®X(}R®gfý *åM$Mû3{Rös�ºû¸ÎñMúñu¾Tú2ì‡Wn‡ÃZÑøVáÿ’–ÉÀMh£VƸú’î·¨&5q÷ië°UZåŸ}+Œå…s+…ê%YÕ’nCpè�--㪨’–|اêR�•ZÒ^=Ió]CgwW#¥�}Â!§ ëÛ³ç|º¾ßT„à sBÈf[Ð&ž„ÿÛÌ^Íì9Tbz!¡¿…y¶……ÖŠªíZ‰cÛÄYOÑDåæ-/Á*3�oÏp<¦Ýõ�ÂÙ<.?祃ƈÆ÷€ö!¸è,w›ÙRù­Rö5QÔBm¯‰:w_›ÙDÑäbQ¥>3Ëš —¢PÖM™ë°»ü™)=`x¯¨ÚB«£ô•=�?ÕÇs?5*¥…(Ö*x�x{|‡PAr£³»«EÉ� ‰¢ç�\WOÑó¸Ûk­_Û¬îÏ ‡®UbÀ*M‰ UúK^ë{Š^ÇžÂØã°l_Q,¯ßôíñåäZ}¶h{.•~\%Ï©ŸÕ†š>çvÿ!Z´ß´Á%@§¹ûÌÌŠBÛÚ¾±PX:x‚ÎÝ'fO¦QZÅ%3‹+2¤YKîÊPº[E“òi×€žŠ·ƒZ†e­ôñzØ;»»ºØ¬Hªª+zÍÙW<î“k4½=C+Å"çí»ó¬Ásþ�}Ǩ¦÷€v¡â 4în ¯%i,i@e·ŠÛ-Ê *eŒk!éÒÌâV'É*+I«2ÆžwVH -Õ6I ˜8Èpvw5RT9¥Hˆq¥(¼3M©ª’VIe¤.:»»ºÖ�-â’rZÆ Îî®îË „íuÖw­Ý*îÅÛ¬Òk–0öÛ³»«¸½×µŠµ mtÜmÕôö|{|žÝ]ÅU³Öûá|®ûœÏ²ïøÕô~ÐæîM�” ´¥û¦ì‰¿[w?¤ºAmÌìA‰PEÓÁ8 NgwWqÈ1®tÒׯŠ*+IË:+uÁFh*¾öm«¸ÂÜ¢­a‡0ö8ÔÚ ·8˜²P´¿©”WPSÛóìî*>þŠŽ»¥¤u‘sµ çü!ã/iýœÀ "¸À‘0³ge·…Ùl#³9±_–R[ì\Ž­â8ya¤¸‚´ÂoMÀé!¸ v—Ôî÷¦ÊáîæÇE\ÀÑùôe8’t/i&iúãë|Õð��@p Çh éBQxéþÓ—áRQˆiFˆ  ÌÝ›À;fö (pò“»[CÃAÇ|ú2ìIú;ç!KE¦IMC@ŠßšP²ë-÷÷ <#¸€c3(ð˜iå£@.‚K8¡M\‘jJ³ªÇ€|—@-š:«PhéÇ×ùºò‘ Á%“"mâÆ´Á%“™¤©¤¼ŠJ´‰hs÷¦ÇðŽ™ $Í7æîÖÐpÐQŸ¾ ¯U`º–Ô ?žýø:¿inTˆ\­Cp eÛ1-~|�Sq  .€Ö!¸¿ßšè&3»0³ÞöGÀG—ÀNÌl`fsIß$Ý7=ÝDp ffÏŠZ¸ Â�F @‡\»X'þÝ33ÂKvFp ¤ -á®?ž¤€#@p €Ó2Kü»Úž¡ wŸHš&~<“´h`8'åӗᵤ'Iú2|&ÄÐm—8-q¸f­(|sãîÉ*LØn,)®`uãîlÇzl¶9$ÄÐq—8!î>“4t÷¿Üý6üÙ–i? !¥[I—lÃZeµã‹CLß>}^Ô8€à'ÆÝ?´43³ž™õ›OË%«(ý ŸûÒÝW›wšÙ…™=›á™’…6qÛ**­|�¯¶<-Ap €gfIß$ÍÍŒV[ù2·�™�$½êWõ”k°ý!¢ú@‡\à„™Ùƒ¤¹¢@NOQx©••—Úª ÛñI¿‚MƒdBy²ÚÄmšV> ”†à'*´3K†kú’îNMªŠ¶[¦ü¬­Û±s ¶‰[Ò& [~oz î¾2³±Þ·5[IºmhHm4“´V´]Váÿ?p÷™™Íô¾*ÐÂÌzîžú;Ø mâŽÁ%N˜»OC奸:ÐÍfÐ&nÏvªáw_HZ|øXQÀf*irªÛ¬"EÚÄ\è‚Kœ8w›ÙRRÏÝ“-Ïž%õÍì&„x�ÁÝW’þjzÇæÓ—áH´‰8J—€ÜýCµ3{Я]s3[Hº  .´‰8R—Àfv­_íãb}I´?Û"´Þ»ØüÕªöóé˰'ÚÄ-‚K MZk®©»ÿ .™Ù@ÒŠ LŒô1ôeM ä -Ñ& £~†£êœ IDATkz }Ü}*éRR\)h-i’x؃¤of67³Q�ãk9ª+•‡6qGŒŠK •»/% Ce¥^¢ÚR_Që8) — ̬ïî· µm>T«2³wÛÛÑ&àøQq är÷…»'Ã!i–¦›ÿ0³g3{!§S²ÔÇêT§¶ Ê@›8€#Gp ì#ÄY† M’$3»P<¹—ôjf{€)~~î¾r÷±¤ÏŠÂ\Kw§}Ü‰›nÚŠVq`gî~if׊ÂI×ú IVËéIz×*ÍÌ\ÒBÒ*ÜfîÞ©ê9!¬oƒž™}Ž[Â…çBë¼=Ð&à4\{ íãffÖK¹;Y]i½J ™¤�Uu’-Ö6ý×»�²¸42³éfÛ<ì¥H›8ÚïtÁ%Pº‡ðе¢Ó¦Á%wß5ˆ2P~Àe é>ñ³qâßÉûãÖu±‹ÄýÉêRi­íÚÂB†O_†ñ1³ mâ:Žà¨L¨^”Öþ-)õÃ-Jk ÷&þ�Ö¢nS2tT†ä2ŠÂO+EAšÕ–F›8€Ap Ô.TWÊ«°ô_¥üìÿIü{[pi}å�ë]pÉÝfvIX©TE‚K´‰8—@%«+IÒIü;?ÅmçÊh– CMµ}[oü÷BKå mâ>´LA›8€#@p t’»� Ü¿í1¶åþ™ÉÔ‰6q'ä·¦´‰8!—Ð8ÚÄœ‚Khƒ"Õ–¦´‰8—д‰81—Ш‚mâÖ?¾ÎidfOföÔô8Èó{ÓÀÉ+Rm‰ÐPP,�ÂÿËÝo©¨¸jgf}3ë5=´Æ¨Àch`fzN�Ì칩ñ�‡à¨�™]„ ôWI›Ù«™=˜Ù¶6a8RŸ¾ û’.¶<Œ6q@f6’tßô8(ŠVq U@6+-õÃíÞÌÖŠÚ�-%ý_õ� ¡MP‚ZzJ¹k)‰Vq€V"¸*efIŠJyz*Ö2 Ç¥Hp‰6q@3»Vvhièî뚇@!æîM�!3ë) ,•FúO’þwI3&á�Ch÷ºåaë_çÕ1 ‹B«Í¹ÞW³“-:à·¦Ž�™ÝKú¦r+(ýGEEþ6³W3{öè.ÚÄÈ -­%ÝZ´­â@iÂ$úƒ¤AÅ«ê‡Û½™­…[–¢S×Ð&ØÓ–ÐÒÐÝ—õ� €ÝÐ*,´…»·¦-…]îN襥 ¶‰[ýø:ÿ\Çx€. ×ÜWI‰»-:…Vqà fv­¨-\BKR¨Ä$inf›Ù³™�Ì,9Á�f­%M$­rC›8 !„–æúZ’¤BK€.¡âØK=©ú¶pe¢S …êK×á¶ƸüñuN­cfE×¾ž~³ãÍÐP¸F®Ël_¹Zê§Ü}ëîÓ²Ö@.€�™Ùƒ«°´’t«¨êε¢@ÚD|•Ö !&EA¦¼Ê?¨ÉFˆ©ÿãë|Øôx€PUn¹y�ȸ^&‚KÏŠŽåø:3;ô:cfs¥‡E -:‰à(,TyRz‹¢"Ö’¦î>NYvO!°"éJÒ³ï8÷D5&’~†•Š®I=I“Íë–™�] rwK,ãïð»±™»ß0¦'I£”»Æî>Ùw¹ØÎÌ®Ý�Ö•P‚K`«ÐòèAÑ$þ¾Šª‚l­8RóÖu¨¸Ó”pzÌì›Þ4WîþyãþרÍàR>='»wU¤œÐÒÔÝo÷Y&¶Ûë®Ü� pP�ßšh73»—ôªýCK+I7î><°MÒÿ,i–Wµ¸úÓ¾•¥t„™ BÅ·MÉê:f¶ÙÎrþWjK’ÒÚ¹½[¦™=„[rÝÉñ=ˆÐR­Ìì"´ú›‹×¨Á%�*Læ¿*ª´”;±žc"鲤;ÿÙÝoCÕ“KIcE��*Ñ8R!œò¤(œrŸ¸;íÜÿ\r÷¥»›»_†Pf2@4–t£(д–´t÷8줂º·×Ðz.mŒ£”±I„–*‚b‡„u; Ux'TÿȪðQÔBÒØÝ—{Ž!­UÜ0­m[ï`ãVVuŒ¥»_–´,-*ÉÝë}(óófU¸Ð.nn³C*Æ™ÙEbÙs}¬Ê4q÷ñÆcFŠÚ”%qmªHJ‹ÀØ‚VqP�ß›h3»V4Q¾o…¥µ¢ÀR²mReB“Y¸Å•L6ƒLûªºš€æôôñ:÷$ég8%Tw+E"´4ÒÇkS|Û|LjhisŒ(má f´Š›.tX[¸ÏRTMÄÌžÌìÁÌ®C¥Z„N“Pã/ýj×´kµ‚KÀñšèã5aßkß®faý›†q…º¾Ì -m¶œ ëhÞÉha”g©¨ÊÒ¢Àﯵ9Ê­²K«¸]ìP�iíî².í°Ñþr¼úÙ¨j´VÔ¦-&ªz\aý³¸J]¸FÍõ1DµVÔÊŽÐR…Ì,ëÃrZÅ@Eh’Æ’^ <.k²?¯jIZ{¦Ú„Š&KI“fØ 1m¶ª¥ÚRN¬Ý}¶õÁv¶Q½¨¯èßl753) Õ íã~ŽgKh‰JK€£Dp ¼ãîK3›HºÏyØLQõ’´öký-«hÅä{ÌÂ-Y�©®6q’zqxBQ¨j–±]ì %40³'w¿�W:jZR¦…–þ?IÿCÜF€có[Ó­4‘”žY)ªüq“® ­�¶iå¼»/Ý}âîÃ: ¡ÞfHáZQ�é›™}3³3»®zÀ»ÖÇ Ð(T:k�œÐ’}~û?Õ;"êCp |ª�?ž¸ûgwÏ«FT$¸ÔŠŠK-0ȹïBQÅ«g3s3{6³û‚Á0’Ü},)B¼mK•%é]h)«R]Úµ€£A«8�ÊÝgf‡”n ¶/ÛÖ&Njiť䗒®ÃíÁÌV måÜ}VÉÈ€#áî·!ð×WÔÞ²K¡¥¥¢ w„=G‹àÈäîÃ%­ÕQR‘ÔQÛRì#®Æ$3“BˆIÒ¬`¸ 8Zf6H© w#éÂÝÛš|PúuàVQ¥¥E2´dfM�硽å@ïǼTI!J3ë‡å÷”¾]ÖŠ^?–JÙ6€n2woz àH˜Ù\[* ¹»XÎ@Q%’MÃ-mê:ÃÌF’ž*XôÏjLbb'&¿IZHºióñofO’F)wMB‹»´ßyPZ¼)«Úš™¥}8¼Ø ­†íú¤ükûZѵg¼ËvË)ª(·k+ÌYë^U´Š¼^t4¯MЄߚ8*Û*.µ­âISʘ,OWcz–ô·™ÍÍì>T2Ž]Hú‚­“Zš¦…–Ì¬gfÏ •Ö$=…ÀOåµãUÛ¯Y=EÏéµàr{a;|Sô¼öy>׊¶Å·vtÁ%P¦m™ÖV@©Y-¡EaƒI¯arÿÉ̮ͬHK? 3Â1½êéWЧ5Ìì^Ù¡¥ÛŒ_{PÒ‰õTMŶwÂ6}V± ±­•‡ÌìZQ`©¬`Ù…¤y¸¾qm€Ž!¸JQ°—$¹û¥¤Ï’ÆŠÚÕ!nÉD5&£‘>lê:·  RîZä„–$iª�¡Ï~ U—ž´{È2·m[hw·kª¨‘¢á%è�ß›Ø]<1ëîmª`TW¡£àî+I“øß¡ I_Q•¤:ÂDƒp“™­UJY( Q´é¸Š˜êW»²ž¢ Ï$÷7jBKiU’–’nò~×Ý—fv«(ð#E�¬Û*ÏÓp=ºÞúÀ÷VîžNÍi‘—º¬pÛT¤\_QxiÈu €êýù‡zŠ^£ÿüKu]À~ÌÝ›ØA˜P~�´t÷Ü ï:…HiÕD6 ݽH+¡�¤ù>¿{ B%•ÁÆ­î "›!&ªd¡SBHèÂÝÇM�EʼžIQh©pÀ&T+Z¹{nU£Ç–öáðRÑ5g×0êØÝSÃb9Á­MqØl‚�i˹V~ÚbÚiÛn,?ëÃò…»wYÇ*„•â×ãø5ùæŸÛUíЗèˆfyÒû ÛÖ„y¤úý–‡] œzp))l�øVgk·É¾á�O_†’ôãë<5€œ‚Њq®�áÕ¢ëa£• r‚:IkEU­fñ5<<·¾¢‰Ë¾¤Ïi�£ð¸×-ËŸ(ºÞ q ´½•ÝÎ×/‚Kl‚K'~<ýç_åµ¾ŽÊ¹©ÿÝÅ—|€’\ B((n�´iåîŸÒf6×–*în—Ep)CÍÕ˜öÞæŸ¾ ŸµšZ*jm5#Ä„S’ZZ+:·šèׂ{EçÙç}BPƒK[«™ÙEN•¤m¯ ·ûT‘ -SçÊsît #¸@1þ¡äëûêŸÕŠ¿K�*�›â Ø=IŸ¿;-�2\ Åªª*Q3{Uþrá�Á¥â*¬Æ´v÷¿öùÅPmé[Ê]qˆiúãëœxQŠŒY*ªb´lC{Ã*CK!°s¯÷îöz(\Ú«åÚÆò³ÚäÅö -m,¿§¨šSÖkäN�#‚KóçJk~ùÏ¿T Áq:7 ½ÿÞ ìM¿;•Æ€2üÖôÀGfÖ3³'E¾y¡%I…ÊMÛš¡ÚNÜ}áîcw¿”ôYÒ­¢pСÁ CBb×?ï+šàøûÓ—ar¢ØÙF²{E!ÏW3ÛÖ²²ê1õÂX*©´Œ’ÿë-ÛøÀvvyûbvHhI’ÂØnr2á)P®´¿xÍÅÑ97]œ›âÏf’Çøèܶ~^ ‚K´L˜tÿ¦�ÓYâIòÆ NñíÛŠ¹ûÊݧî~ª% %M´ß¶¯"¸´‰ Ê�˜lìZ³¥}Ùm¡¥ÖI~z*þšQÔò�*w¡²,¥T Û4/Uäzv*+%ßÏ\ÂÑ87õÎMÚþÙL£ŸÅÇ‚à-afýÐníA+ul30³&'gù–a X�i¯ÀBhW¤eÝlŸå ޵¦ZJ-•yÌOôë<^‡åOJ\¾tø9š÷š4u÷2ËyÏ�àÕH¾çüùÇÎÇ­snŠ¿LV¤’ë ´‘p‚K4,´…{�ôªb��4 5[Á¦È¸w P�§d;VcZ*(˜ýø:_›ÙEEí­p:Özmi²²Û“²CKµDK U—&áö¹ìå‡Àò&pJ .†ëUÖ¾ïÑ.€JÐ.GåÜ4:7}Óî_&£ :p ‚K4ÈÌF*þM¾4kIcw–Ñ‚èE>Ô+RåGÒÏIhThK5¦ªÛÄÅË–ô·™½šÙƒ™íÜÉr÷I¸þ™¤KEÇqíÌìIéÇþ¤¢PQüÜÇ!ÄTÅò}MÉ:Ÿ×UÅÊ C1‰ @ù.á(œ›禹¢/"ìSMºn¥·mNÊïM€SdfŠ>;äƒÝ©¢ÐR%“Ö;Ú8i8X…!(6 ·½}ú2ìiû½kI³Pi)>núávofkE„¥¤YKŽot@SטZJ›¨˜ºû¸îñ”ä `Qx�Ë ´VµŸò–K;SJöÏ¿Zÿù‡zÿ7íµ ’»:7õ}.shkᥨ „ŠKÔh£-Ü7íZZJºûm‹BÛ*.ñ!Þ øñu¾þñuþ—¤eW?™ýø:_+ûÃអÈ“¨Æ„– ×ó¬ÐR-“vfÖ7³‘™=™Ùkë, /(TIpiK'ZRP�äëoïÏ?ön4á�/“­$Ý~w]~÷ƒÛ,'�ŠKÔÄÌ®%=hÿÊkµ·‚Ƕ§ .��_ç3I³P�éZчÁqP)þ@·è„Õ˜�ÉÌ’ «ºZM†VŸim>ë -Å!¿ÍŸõK¨>uèï·­ÂQ£¨áõ?k «CÛ †]–J k\«º ‹@i¾»Ö禱ï§ X+ªV<ùîâoR —¨Xh™ó ÃÊ�ϵ…k](<¿møàú…ÊJSIÓ8ÄBMÒ~çC\�I’žÌl©h²„‰ùÓ5Oü{"©òpgZ`(XÖ±þ i¯ m¨.”÷ºPå·Ñ“íjbMo“…¢ã%uf¶ÚR1*S-¥è$iÑÒ°3àHüó¯–þ¡•Þ¿öRÁ¨Õw×ôÜt¯âÁû©¤1�% \´Š BaBñUû‡–V’nÜý¦�¡¥ m•5ÐB¡�ÜTŠ*¨œ A_Ñ„ý«™ýZe� †é€½l - ©†¤pLäUáz2³�¯‰¡âXVhiÛ:(K²EtÿÏ? »(òži!éów×-¡% |—¨€™ Ì웢 Å}?´�Hºt÷äÁmS¤O•6Ð=‡TËWcz’ôÍÌ^Íì!¥•°·ºKkËÕThinh¹ðZ>ɸûBÙ¤T!è”×Öä¶Å�gÀqI«|ZÅû} ß] ef±”4üî~÷Ôj§J@p €™YÏÌžµ/Ú·êËBÒgww¤rG‘`VžêS$ìVÆ:î%ÍC5¦gª1á!´4×ÇkÞZQe¼Ú¯sî¾t÷¿ÜÝ6nEÛk¢ìÖ©÷f¶Ë$ßgL;z‰þýPqIªçý>P¦d{Ý•¤Ûï®ËlP!‚K”ÄÌî%}STõekE†«’°õCiwÏš¨ÅiºQTŽªzBm=Eßú¦Óñ&nÓ*V²%´Ôµkö1ku[š²ZÆ…v…Y!§¥>N¼Pµdx‰ŠKè”ﮥ~ý}:ùîúüÝ«ùÛÀG—8�™õÍl®¨}Ð!má>»{?Ûöœ™ÐÇ;î¾v÷©»ßºû_’.�u}“•jLGÂ݉[é×›$yVvh‰`æGyû¡ÊÀ`V�¶5û(/YÁ¢míßòÚÆn;R­p\’¯µ½?ÿ ê:g,éów'Ô�à{ má$½jÿ‰Ø¥¤Ëµ…K³íi‚KÈÚ]�Ý}(é/E™¦ªçØ¡2…ÐRVëÏ›¦CKf67³ûfi“¶]÷[õúêîyAÍë--ãž”7}LNVZ»8ª.¡S¾»Öß½]ï�SAp :"LNzâÆÄzC¤â7EU[ö±V4ÁxÙåIÆ‚j:ûüP¿P�iª1}VT�i¬fª1=×´N´ÐFh)-tëîu“©B»°�¢ê;¯¡zX[&ó‚K•„¬¶¼'j[�JŠšYc©-ãBX:kû-B €Úýó¯VúøzÛ¶`5ШsSïÜt}nz8·Ü šÀÉ!¸ì`£Â>@ÓÌì"ƒimƒŠš*j w Œ´ÖB¥B5¦ICÕ˜ݵ\¨Ž5•²¼ä÷ÏÊ-µ¡­g28ÛSKŽÙ--ûªšÄÌ[në¾9ª,ÞdÜý¡e\fe…¥ó–@]fŠÞ‹L$ ÿùWÆÇ4êÜtqn… Ò«¤¿ý�q/*’ïüÞô€.ßx¾×þ•Up öÚ T²8¤ËJ-¨ÒQ²"Á¥cz¾hP˜èŸ…›B{¬ÁÆ­li-/Ð.ñ1P*3{ÊXn+BK¡ÚRòú;ݪÛBéÛ°gfý ª æ—Zù:äî 3›(ýýíµ™]»û,¼Î{ÿqÓáv³€#ñÏ¿7=§s‹¾4Ö¥6nç¦g凓.ÎM½.=' JT\¶C‡´ƒÂ�Øh‘}'Y×’&îþùÈBKR±àÄ¡WcZµ,‚t¥ï£Z¥Ü5mChI’Â8nõþù·­Š_Þë]ÚöÝ[h[š91Ôæ×^w+ûýEÜ2îIÙU'm~~‡87uõ3Á"§Tñå “.9BK†¼‰TŒ}€6 !†]'†g’.ÃÄä1Ú\ª ªð�»¯Ý}æî·îþYÒ¥¤±ö¯´Bµ¥nH#jC¶%´t{È²ËæîÓp¬ß* ¯´-h—w�Bب,yA¨.œË·Jùö$½*;”µ<â÷à„�›ç¦oúõ™àèÜ:Õª¾Èç UµP:‡à»™¨Ø7çVŠZ·Ü´p2¹LÛB…ÇüÜÑb%Tc"p× +Eá´I¸í])TxìDhiS0µ.¼^ûò‚ƒe¬'´ŒÌûþ.Á¥F^³BÀ7+�5A·Vx8!°4—4×û÷A=u«êR‘/Ð\‚KìÀÝ‹LNUYêB•‡Cm+mNp �Û§Ó‰œ¿�B;CwÇ·}–BKO)w-ÛZ2³ž™}3³‡Ð>¬ òª^‡í¾·�6jYV;žËY¯Y•oowŸh·�Õ˜Š†àXœ›.ÎMOŠKYŸ3ŒÎ­aŸï®µ¶†Vq@@p €¹ûBé“‹ …¶p!àtÔ Nœ3©ŠÖ)P�©–Ð’™=mQ²ZA¡by¡%IÊÖùlfó°ÿÝÌŠTºWô­ó{I¯¡ÒP«…×˼o›?í^ ¯AsåS½¬JTýšÂbY-ã’fî¾wu1€¶87õÎM’¾)¿ýo¬”ª�5Ùúyȹ^$‚Kìk¬_“‹kI·¡êÇ)uZ?il“R�é³Ê ;l3Я Ês°<›Ù½™eµ‡B‰Bø'3´Taµ§_û+3è}kŒ Eá¥.T^Úv>=íZE*l�Wå¿ÍJ®œöTõöÇÛÍ–‡­D‹8pÎM÷ŠK»´€t(ìSäó¡®< R—؃»¯µÀ™Hú|¢•ÖŠ*iäMìçUÚZÇÝWáü®T̤…V®}‹øÕ˜ªöÁ<宵ª -¥ÙMûöù¤ ÕýB w[Ð&®"5Ê ™ÙÀÌâ"y¡¯"ëÌú½,׊ÎËyâvP»»Œ1äí×eö;@–sÓõ¹é›¢¿{ö †w¥êR‘ÏCøB é÷¦@W¹û¤é14)LFÿl£*`ô}ðÖS4©Ìä*�®È7kãjL23)ja·TTI¦òpÕ1Û-%'Jš-måî7¡�\ümô¥»×Uì`î> Û/„‡vi?²t÷ËCÖÖÛ—ôZ÷z¨ÃŸDï½þù—pÆ);7õ½ßÙåó8)|®ûÝչГç¦"ï-Çß]']Ñø­é€“¶-´!Efg~ðlf}3{UñÀ¦�¤×´ª-š¡ è IDATE…0É·°þ]?x…õçµKH[çHÑx»E¤è9ÏyÎ9ãÙ%Ht¡¨ÄS ëJ®ó5LX5íàã¿iMÿ‡jòšaf=3{V4QWtÝ=Eߨßé\´Þ¡­Ò\+ú@üÕ̾™Ù“™]·ä}O+l ŽN>лc"„XžíÏ£j*„}–J›xZ( ��˨Tã»L¼±¹ëû½~™×P¶?ÿÐèÏ?ôôçú[ÑçyEª âˆ}÷è z;üJüøË.†–‚"_¾Úõ3Jàè\�°ù€7³MRø¿Høc›û}B!p‘Öbb=EašBá�0Î2¾�|_F€'Œû�@Ũè¶/a]±¾¢ðVc“xeÿMkâø?T“׌�‰Ò}?¤+|®@•>}>}>ú2dÒá0U—6Å-fŸ%ýmfs3»?¶Ì.¶„–n÷©Z•�±ö­ö°wÕÜ}íî·ŠLEߢßÕTQ`©ôj|¡ÚÔP*V¢„së^ÙïQó‚T÷áË´ÑHï¿xÉßP y�5•ôù»kO�T°ïçpò~ozà$õýÑZDêÂF!-4±Ö¯V›€÷•ÝG{df žoµÑÞ MÖúÊnMõdf˼oy‡°KÖvÛg�q€g¸g8&nW—´ÔÇo’ ”ýAüÈÌfy“ ¡5^ÖöŽŸwrÛõÃ-íC‘¸Ý\ÖþÞœÈ:^÷-ß{ðñß´šŽÿR÷AÓ× å¦á?ÿž~»›Ûë¨&,«®´Jwß>}Æ×ÏÅ�¯óY³Ãꜙ¢×Ÿ]Û–îëçë™™­ôëµgÑÖ�t²‚ã­ -iïYÌlQvÛ¸}Û—¸þ•¤±¤qx¿6Я÷BIkEïÕu¼¾‡u\Æï)ôñ=áJÒêб„÷ÖiWIQ;¸¸ÍtÞ{éË:—ݱÐû×ô‹?ÿÐÅ?ÿîXÆq+zÏ›f!éö»Õq²P~8éâÜtqdÏ؉¹gµ18\øögÖ!±¥~…6'ìåîŸS–ÙSÔž*-€0UÔæ!¯½Ü@Ù­šnBë‚L[Ö?S4ù‘·þe~Üý2ãw®}c>ÍDÒdË:GŠ&kR·Ù¶ðEÁý8S´íSÿÀÚ²Ýgî~“³þ'} m,mëÜo­„õ>+ý¹Þ6ù“õÜ‹Lò”yü2ŽŒ±Íõñæ­ßVoèø?è¹·àš‘õœ×á÷S·y÷}Æïn*½Ê@×™Y¼ÝÖ’˜Èë03K~hÁñÞ O_†y×SBL{ ¡ˆký ÌÖ]r3ÄÔd«´Êd¼—”¢÷ÐãºÇ#¥¿¿‰ßÛd¼w¿<Öýsʶ¼O]+zÝ[†Çæým‘û÷MøóõµˆÛ4þçß½¿ ˆ#rnJ~6¹”4þî…Z«uʹ)ë³ÁØZÒ°`u&à(Ñ*4mìî—î>q÷…»ÏÜ}ÃŒßÉ àܺ{nhBúõÍY¥—¤}*ÐB,kýcw¿)°þ±¢o•$õÓZ@„ñWh)MrM¹vÏuÝ»óXý¶|†-—¶ÀBòÁº÷Ï=\7¦Mô^·­� àòýø©¥>86ø¾*óXB4‡ªðÄþm­rQbÛ[Ý{Íó"A‘Ä¡OɪKk|ïL¼;X°”Yê£-ʹ\båûUM›Ù T¼¥×PËÉ·_y‘Rßês»Á‹ýüÚ.„ªÓÂïY××iÿÖWz{q€ÆÙ8Í6î$ 4Îjã´Þ8=lœž7Žñ= †à8—YÞj#;ÒVL—½Á‰M® „xbv¥ž?”úß¾QIÂ4ï a@;¶j¶Ê*”©â+öË—Ê~ޱÀP‘‰•q‰ÕÄsùÖ\Ú³MŠTÜ©YÙ÷íÜNºÿ×älÇŒ:¿¿a{Û¾ú¬�PaâUÒ“²÷›1íSZƒêYç“'´´üã÷Wa�è Õ˜.²UC8æ?Eþi©æ´`�…Ïþ}3û»!œôbf‹Nz“¯*ø(v+~�±‹cf… þ¡€ÑÁÊœ!ŸÂ^z¥4ÝCp œKáI­ˆMN—^Ù„sµ¬ ̱Áÿ*:7ÚÓl¿7Ñ 7ιª¯9öûy&$w�bµÚs¼ /…ëM™LmÊväv¦ý¿’s3RþnYá5RÅDïmáå+L \>¡¢N�Ïð|h×0'ªÆtqÁ%3»VzhiÒ”ðø�íø3ùpÒµª�hÖL�Jÿl¦yîõ2ZÆÝ—¬¦ gAp œK™I�Øàka”Ø€ol’ :q*Ç”âœË 1Ä´ë˜@Š=ƠĤþÑ8‚"CIoa5úí….nPçÙÿ«jâ1£ÊûµÒ†Þê&£Jo­rH_´ŒJ¡MÜe8B5¦ySB>y…ÐrãCKG´’¿Ö˜Ê··mJu)áZ&­ ä¡JJ1‡>ß§ »?Ða¿œ{@g•™|� ¼Ö±¢<¶-yCÇ®8 .Õ\HÛ+ʾþ¥ŠUJy>ðó×áÏ“™%íÆæU5'p‰á“sìÿU�û˜{þª¦Ku°zB¨®ö¤r--3› ð!OhiN›¸æa×çðG¡úJò'oŸ&_Kí ¡¥WíŸ×Êh½uaÖò׫íÿíÃÐ`[×3i í§Î¹¥™Mt'ÏuSl+�ó™^µÝ?Y¸Ë:/À%ê™úú¨þ9Ú¸£µ¤€O.€³(Yñ$6É263Wu{"b�ƒc„²ÔÝšK’ÿͬêÃjqQ+çÜÌÌž•¾:91 îÍ,©Ô4—4kÒdUƒZÖqŽý¿ªs3¢­â*>Ï%î;•„¶p·*ß"l%?ÈDPmâ.\8Î¥÷ðÄv�)íøz1ÇÍŒÐÒ¤Á¡ž•ÒÉI8iûϲI×´(ìEéß·‡2û©sî!ìÿ±ãôµ™Ý:çž‹>.€jF¦¡¤Ç…ÓäÜÛrIx߀óê™nå+U'×+÷òU<àè.`[ÑŠK'㜻 a«¬ðR"ik“TcšËOª6*Ä .TyRµ SSçƒl@´‰kŸœÕ˜NRÁÇÌnÃs.Uò-´ÃzÒå…–$Ý=�ýÛÕ“:Tn»ÄN«v6wÎU© y'ßJ7Šz4³9ûp£�J%eZ[wïp^=SÚøËmÏô¼qÝ[Dàô.äw‰­²™kenÙŠ&'ÂKsùÁ¬¼mNɄܣ™=f(¬mû?jk:OP"Í\¾Êƒk@u¹BKüþJ(øBíTcÊT«Ëxëù¶ÛþÎòŽÂö¾*~�r×ðÐ’œswçÞ_¦MƯåƒG¥…jºSù »’ë*ª—G6Ú¯T‚x߀óé…*gJ¯°›„ ¹fpt:÷\¸KX©RÅälœs3çÜHÒHÒTÅ[gõå[É-ÂdÊãýC­Ìì^Ò›ÊOš¯$Ý8ç&„–€Úäù>6²Z#Šsέ�sÏ'l-µ» å'GföÝÌžÌì6vÍ–#´D04‚sn”?ßê¸fqÎM<¡%àÈFÕJ¸G.€÷ 8�žiÐ3=ÉWlÌj ~NpT—À¥;4@[éOä¹b+¶/2üĶýb&�sKç܃sîJ>Äô bÛ?”ôr”�k§¶ìÿ§k‚O!4XvÐLòûäC,f…”C›8SÙ¶ ’ôç"÷÷”ZÀù ä«÷l�Iuu\î$z¦ëžéMÕ*\K|NŽŒà¸$±àÄ)CÑVYfVú¦ÏÌnÍ̙ٛ™½†öÛ€Ž|H}Œ6Nþ;çVιùvr±}¨s7Þ%÷ÙsìÿU5ñ˜Qõù/~%¢™ ÍìU¾ÅOÙýçYÒ•snZß–ØÚÄå9æÐ&…™Ù@õ ÿEI¯föÝÌ^ÂuFÓCÖ�ñã§–Úë¬fÇ=S_~ì¥Ê5ñ\ÒhãôPÏV@Á%pIb+úûfVé×Ìî·B�fvmf{aç\ZE�*Á—ÁÖÿŽå+�lßLÆ‚ã*a‘ä1"×ÈŠ f6ŸÉc˜„Z”yçÜJŠÞd·¦‚M…Ã/gÚÿ«:ë1C5Ãï]lpi«-ÜBå÷›¥¤‰spÀÑÑ&ÇtÌ ª~xü'Iof¶çëÎ…Õhw¬føõK'ÇæŽnã´–_øUÆJÒdã4Ù8ªš8>‚Kàb„j@± D¥+´„ À½>B÷’^”Þº(VU ÊÄKìw·_cZX¤lk¥d…{ìy\ ŸÏ«>>“kIíî²ÄöŸK�.ù^”�¸;õþ_IŽsÅ?·²ïÙÅ®B a±…ªµ…›:çFBtêE›8ÓR§kë6”?ÿP� àüb÷;Þq¦*6Ö¶–t·qºÚ8î÷œÎ/çÞ€‚fÚŸø›Ù¸ädö½âwÒڞ̵3}mfƒPÑ'·Ð+6aòþÜι•™Íµ4¹5³iÉŠ#�)߸V/ιµ™-µ_eæVÒ]‰‡Œ}ÖQ)Â9·4³Ø? U`â/oÊwNºÿ×älÇŒ°ÿδÿ~ߛ٬È÷w+0uQ¤𣪠BÎ$=ÝÇp<¡ÕŸä�=ëð¿+>£öÈÙ&n­^;à2„sð(œß®å÷·±êo·+y¾kI ×™sIs‚±P¿‘éZþø>Ôçk‹µÂñWÒláŽw_¶!yþݱ•äZ6ÙŽÜ׳#û4¶­³ó3’¤E‰vKÇz Ÿ?9OWzþS¼o#ÓöõÅî¾'ùÇ*l÷sÙ÷ldhÿ~¾Ø {Œìc^ø«dߟ-\g¯¥c×\[]ºé6Nëži*_�ô�¤:ÓtsÄc2¤1çܹ·´XhÉðºû÷ιh#Çãõ%½ipc-éª``¶­Ðc™Ù›ö'U’öE¹ž?¼ŽEäqž�sw;?}‹>gx¬[ÅoT÷ž7Ï6Tøµ˜:çö¢R~V’F¡¢N‘ç}Ñ~€b朻9ð;¥_û޷ؾ·’/òî{±÷ 1Éš´;õþ~¾ÊgpÖcFî¼Eîàw.ò8OJœe~nç¾»·*ߎq%鮉¯­ËÂwêû�YÊïßeËÑï>ßî Eô\�zýúÛä^éAçÄó¿¿– ©Â¹v¼õç”¶'Ñç„1 ¼‘éVù[�¯%MNÓð»¯Ú?L+„ðËuÎmHÌ%=,r´E™JM®-œr�û5d}R�áIÒ›™-B�ÓÈÔ™^ä�¥y¯ û’G–Y $ï6 GöÞ¦ºèuéXÒ"Vñç”ÎýB §ì=Ýmxþ“ÞÆç[¨Üâ™±¤×š?÷¬Ð’ä·³«A‘Ý`]ÿëª.YlÐ\ÒÕÆéŽÐ€s#¸.N¨´[96”´0³ÇPådOo<*=€°tÎ ñ„*±°Kòü©ƒ3áßÒV¸L¬ì¾S|0c(?±r› !‚W¥WNht ¦Á�$xr0´cfƒüˆ ‚.�sƒKÞ›ÇðÜÛʆ4òJ qÝÊ¿{Íáõ?Ê:~ZÍVfαÿWý Î}Ì�ßc¯á6LŠF+Jl}w/)´t­ô`ZsùêU%[aâøò|¶•Vwã¼ò¶‰ûã÷×®¶¶À „Àðß‘ô�íüÓIÿí‰6#ÖŽ�b«ÂLÙÅ2·UÃK#S²à¤jâ¾® UQç~ !”vÿ›W_ÒÓ©ÂKáu>©Ú6Kþ=[„}¹Êö<*ßçwÔ6‰ »—¨ºÐlœ¶Æ.%M6N“M+~h¦_ν%M”>�s/éÞÌ–úè[ßW¼¯ý¶uxÜ<îä'owo é)–ú˜¼Mž;mðc~¨õ�snefÉkÞ}Œ¾üÍ“™Íwžs Ã“̵µó9²©üÄÑîû�”.¿¯}­�€Hò~§}ækùÏ1�eÊãìVüI«ŽU çÜÒÌfŠæ %½˜™ä·w­ô}n%¿Òê¥ä¦œtÿª~g;f8çÖfv£ø÷7©Vµ’�+}¼·±ïî\ žDuÎÍÂûXt�}-ߎ Dóåm÷�Ë•g‚‰ï*Žf«:c¬5ë$\õõ¹¥Ü±*½QY ò;¶IîÓ’{Ää~k· Zé ËVà'vß¹–¿~Iî¹Û-JwÝŽLZ¸Ôqƒí,}Å·½Puë3¼†ÝçO*Ƥ=ÿXéíìžF¦åNÛºZß·JÛoÊlóP¾úÒ¤d¨(í5Å\ÂxÜQüø©Õ×/ïã‰ÆŽu´È�¤ñÆuwßÐ\æ\©v²¹„J"»ýÞåœËìMŸã±óô‹Ïk)?iž»JD�Ï?—t“§ºHF»ª¢rTŠIž·ÖÏ1[v'ÓCᕚ?ï÷‰¯äþÜN!m¿?`ªì�hˆ<-'ë8Ço=ßî ÅÁsªûõ·É›²C 7T\Â1dœ«GiçÝpŽÝ2Õ%õ9Bx$v¿¶–t³pñ h¨lsŸò»Û&i�±õ8oŠßk=Kz8B ­ÑÒÚÛÝ,ÜáÐvøý½{ …Sîë⼆CÏ?“t—ñüiûÀrá4:°Í¥ß·´J[�5•4ÍØæ[ùêäÑ÷<+ð•¶ý;–úOmö´pºÊøÝVûú%ºÏ|ûñ“…0ÐE´ŠË9·vÎ�Tp[ÄTB,5?ÿÔ97É;a¶ñJÕVeÍå'aª¾o'Þ£‰ªWyH^îÏ;L’ç †kµÿö¶$ïC™ JÒ†«òÜ©÷ÿ:>ƒ3–’F*÷Ù¥²š&„¨òlkò]¤-ÜeÉ ÞñY^°_›¤U{ÛF›8EFhé`XØ9·tÎM�sIß$ÝÈŸ‹ª´¾XZ€l#Ó@ñ 3KIW‡G §õÂéAù«!§I ŸÜ-ÜáÀMØŽ¹ü½Zì¸ÿTµuXNç~ iÏÿ°pºÉñüò•�w �Ñ2.¼žÇ”¾[¸ÃA/IZøª3ÅïanC0©Š‡…Óhá4]8ÍN³°]WÊ_ñ½Íbû*íâ€-½Óœ€F ¸.^4\ɇ òNN¬å'3®ªNšo=ÿ³òMØ~zîÏ·vÎÝÉHå}NÉ~&!(r‘“0áµßÈð ql¿þ“Xa"lªÃïw•|òlË:lÏ�ò…`Vò~¹Cr¶ådû]ŸÁ9�ιUÁÏn&ÐÒ–¥NkùŠo{,긬Á{>ÓË–g¢€ÐŽåPh)÷y0\'Íœswι+ùkæ¼èmìë�Ï­Ò7¹î›B€¤Ô“Á©é¢@;¤°­±KRêhÎý<ÿláò.ágcçÛc´»Uˇ–ZyV•÷-e¿›/\¹JFZÝÚ÷µŠÛ{½Ø÷õ‹v[‘¯üÔ·smpj¡¢Ò­üXäX)•ï6B¤À¥úåÜP·\8[Ňp8Z0ª)ÏÙgz¿“ý«ïy·4bbíTŸG�ŸÁ9�Múìêæœ›n…*“ª_�øÎ ´<«üœ¿P´‰Ã¹-=× ÁÙYø“„—“Ðõnű£ïë!À|-ivÉaeÝ52¥]?>~/œÖ#Ó³ŠW¹‰žC*„FfÚý F¦ñ¡¶w�û5Īn–zþ…Ó|dZéc¿XÊß#ôUÓ½B�ûÝ–©âÕÃÆ*Qµ‘ÐRnK}Þÿú_¿hüãg3ÆÛN¡ç+žÝKZn T Ck ”}Þ£â:�Vq€cy�¯�sEh©b+ÿvÑ*îrÑ&'—Zª­z[çÜÒ97uÎÝ8çLÒ�üÄåó‰ªÞÊOT¼™Ù›™=šYžï"4E¬­Ó²B¬B×!À»F-}Í'§jwvö×*]Å&ūܿÝÈWk²…Óhá4©¹5Zì\¹^¸ÊïYì÷Ëœ— #ç×Ùvq=S¿ç+}-® CõtÈÆåC!¸„N ¸8Š0!L[¯ö âR»\ÂI™Ù­ÎZŠqÎÍœs'|þ퉹dµý‹™93{1³ûP• šªÖÀK· }ÄëB2±‰äcMŸû5D_W•êR W)¼–GìÜXÇB™Øc FÅÃ$,ÚÉéÇO­´¿¯¶>¸Ôóíßä¯ý’ý«¯x»B´_Ö1c*s­Fp ä‘9`Oe­Ë”³MÜê�ß_ù|Q‹ZÚma#Iós…–N-’M‚_‹jLš/v}X5È^¤‚gìùë¨ Ý+¸tî×û»¦WQ�]·Ö”J{ÝE?{*.³{�1üú¥�!�žiÜ3½É_Ǿû÷T:)Ï1·õ�>à—so¸Y¨T[º\T[ÂÉ--å[ËtE‘ɇ¤“ÌLòßÇ¥¤™sŽÉQçmWñ1‹×b�’ñÈä*nC̱Z8�û5#|vlu·¶“ä+~�¬ê£¼WC~síWKz>öEÏ·„|T¾ë¿{I�òã]ì;°‹@Z�ŠK �¬•ÆM_™�t—pf6VzhiâœkúDi�ª¬šŽVc2³cMªÐeǪ¶I?~j®ý°\+ªËôLƒžéIÒBù_Óm:¡#6ùZs¶â;BÅ%�GÖ„8+‹/Я¿MÆÊ×&Ž`*1³¡¤—È?­Ô½Ð’TßäÃ{5&I2³¹üªí¹sŽï- Ë%¶Š;¦¹öÏу�o.M3—4a¦‹Õ3õå¯ÏnUnÿy”4©u£ÐtKI{¦þÆ5¾"PÁ%è˜0y3»–ô¦­v2ª> †îÈZù'QqéâüúÛäZ9ZÒ&e…Àì‹-}âœ{vΙ¤IS�.ø9–?÷/ÌìÍÌžÌì:|NPFlb�c ΡËa+4dzÊßÏ%�6Nw„–:)op h-‚KÐbf60³WÅ'އfvù5`WæÕ».Rž�OVt¢”†yU|?{èjhi›snæœ{pÎ�$]Iº“ÿÎ�"šTcz‘ôÝÌ^ÍìöÏ  ]b“ëU'V‹Ÿbç’K›Ø=÷kˆ�sšŠÝwTÞæ‘¥¾ï,Ð@.§µ|x©ˆ•¤ÉÆi²qT1îªVË ¬íVÇZ…à´�™õÍìQ¾ÊÒ¡Á�{*- ‡¬‰ó/п¿>HéðÊ`‚K(,#´tçœ+:¡ÓzιU¨Ätãœû&i¢ÓWcjúD5€æ9Fè¦ÈïÇ®_.-¸tî×û #+_9kdº™ÜÈô62½ŽL�#S�áØcæRcA˜l|›Ç<“Ö’î6NWG;BHÊÑ–²g„—Ð^¿œ{õ2³±¤'囀쇟½9êFáÒeM0˜¡B¸;Iw¡uÜXRÒBŽ6q(ëI„–* Uìæ’¯ž(ÿÝLþ8бë„ñÈÔ_¸âÁö–)@‰MòöG¦ë…+¾™îå�·Éë[JZ/Ž.8ëkX8ÍG}ˆ±ÊØ[ÿ›œÃ¦%+¦Öýnû1"G eL寇c’ªLÓMµýí“·]Ç%´— %B[¸ù*Eª&\‡°�&k’<ÏŠR4Ü¿¿Îþøýõî�ß_¿É‡νM¸üy ÿ[»†¼†X@©ìg˜ö»uÞ/¤MÚ—þŒF¦�âÛM@…mœž¿®z–4Ú8=ZBDÞàÐJ— Ìì^ÒBå˜ë,Ý�ÉjcеeBˆ‰6q($„–bç“gçA¸š8çæÎ¹çÜHÒ•|Õ´™ª‹9–($T·‰]/Üm5¶¶)*öüãQùv:÷Їö�y]tî× ç\‡0O!¡%\ì÷j{ÿN+Å·ù¶B‹»Ç”¿çzem_ûÎ%]mœî6ŽE?ˆÛø kÚõøJ>øÆ1 ­Ep .˜™�Íl!?ÐZv�v*?é ÄäÙ¯¨Òtœ™=*=´Ä9æH¶«1ÉŸËÿ× DZ@±`¥AÒ<ªXÕØíç�Mô¾”O ?—¥´êrÖ×°ðÕabaŠBÏ |ö\±…[Ll¿ëKz-ñžÝ*¾èyAÈ%m|[Æ©¤ÉÆiB` 9%¡Ì¥üþs#zK‚o—ÐZ—à™Y?T¶xUùRÑsI£Pµ�* H“gÿbÿ:ÌÌnŸ¨œZ:¾Ð*öU¾ Ð_*û8\ (#;b!’Û‘é)Ïc„Ÿ+U6bb­H“K®{¥ðs¯Š‡ö§Á›h adù*H5ä5Ä>ár�ÂϤµ,�=¶Tá}[øPH¬êRîmÞz®Ø~ºVúv¹„–p´D'Û¸÷–‚3Boè sÎ�{„ â*–Ö’œs±Áqà“­ŸÞ9çìHϽ;h1¥ÝÐ,᜛ð[Jš†9®­JWe¯ +çÜU › ƒBHd¡xhe)éa™¼­Ðî¥Ì–h“Øïï<ÖBé�û©RªçlU J;–.N£ŒíÓÈ”6Ù¶~I 5à5¼(^yh¶;zÿ*Ý+%´´pJ½~¯ò¾…Vv Å_óZ¾U×,ö~çØ÷îÒ^ïÎc¼îþýÂé(÷F]õõ‹†’V?~²XÚŒà\3Ê–²ö™Ê‡?ôC.¡ŠÇÁ}ŽàÐMfv-_åg¡¥#3³±|`¬L[¥˜¹snRÓcè Œj?’¿,Ãÿä:±cØ\ûמy‚KIÅŸCÕ‰’ç_…ífüüZÒUž6g¡£m©¯¥¯!ëù×áù“Ö¢És§}æó…ÓÁsKÕ÷-Ç~'ù}j{›:|þ|^¸ìVê—ŽçëÝÊV×òŸíÃ�ŸTÀ€6ûåÜ8ÌÌ’´¹Z ¤XÊWY¢L9ŠÊšH`Ÿ:(„i©´tbášàIñŠUðy¨dá´™&J‘d…E$é.üLá… §õÖó§]¿f…|¶-å«îä=>Îs>vê{pî×�ãùûòŸMžÏg.é&çÏ•~ßrìwRþm–|u02ç·[az,Z÷@«ýéÜHªY,T>´”´…ZBIY퇘ì:&„–b„kIw„–ŽÃÌî%½©þÐ’¤ýÖCPÔÂi)i¤rÁöÌÖ\9žZ¢U 8Lå+ü,3òã¹”ïu o�ó5ÔøüÓ…Ó$O`ªŽ÷-¼Æ+©Òþ3—4"´Ô³�ÿ?þú¥r[\IRÏ4èY4|8#‚KÐ@f6-º^T¾ ÌLÒ•sŽÁW”Zea²è�ŒÐÒÄ9Wh‚ÙÌllf íW(â¿‘ô_ËOÌ,p4 §Uhv§|�”™|`¤Rhigäƒ,Så¿V]Ë_®N*-m?ï$<ç¡ßÍU-é\¯!òüÏÊwÞøôÜŸ«òûWwòÁ¹¼Û,ùýo‚V\Ã4Gì³È[i,ªgê‡ÀÒ›¤ÛžUªh ¨™9çν ­&z÷úÜ;çès “™=ªZ[¸•|Å *,¡’Pñë%ãÇîœsµM4í<ÿî ÅÔ9Wh"@}B›²…öµ„–Ž ¦V±sùÊ‹{ŸM¡õå?ϹsŽ *€Ú�ì½õÛ@á˵ü=Ë|ᎂÙ{{µäü5ÔG0b-i¹põ¶?Ï™´V[‡ç[— Çœã5ì<ÿ8X¶”4ûñ³Ü±¢gJ®§nõ9¾–tµa€F ¸p—”ŽO*_aI"Ø�å ÑMŽ’#¸4GѼ*¾ÚýhÇ�®2³[U«°”´Š=J° éz¦¬ë©é¦`…0ÀqÐ*Î,´…{‘Ÿ.ZšË·…cÐ uÊ3aN… å2BKTø«‘™ C«Ø'•-=Ë_Z�Ó3�{¦7e_OÝ÷¬ÒÂ1@M.À™Ù½|Û�ë’±’t㜛ÐâG�9ˆëœ£´>Ð~/J-Ž©�™õC•»…>ÚÚµ”¯~uDZtMÏ4ì™^UlQX•–¼€š\€30³±™-T­ ÌTÒÈ97«oË€ObA…mTYZÎÌžÒІ¬&fv-X*;q¶–o¥9¢úèšžiÐ3=©\ü¶g¥C〚ürî €. ívîUmUß\~˜]8¶¬P=€ ¡¥ÛÈ?=;禧ޞ¶1³�| “*“e3ùkª.€Né™’ñ•[•_¦ðû„¿àŒ.À‰˜Ù­ªUXZ‹ 83Ë3‘ÎD9ÐR¡mYZhéîÔÛÓ6[ïoÙk‚•|«>&Ù@W½©Z`Iò•¬ äÀ™Ñ*N`«ªBÙAµgIW„–pByöU‚K@ … m¬2 ¡¥ŠB«Ø7ù÷·j«XBK ËªŒ�—4Ù8Ým÷³Ð—àtŠ ª%mᨨ€sÉS dyô­p2‡BK’&'ÞœÖ0³{ùV&×%b-éÆ97 Ah€Î •’òV]ZÉ–&'ÆX a.À‰„êyªUÌä[À”©ÐÔe-Ð¥âÐf6Ô�Ðß÷âB[¸…¤GUk w圛շeí°qzÐáJÀkIw§+KÐ\¿œ{@û˜Ù@Òm䟞«®«Àw[+,‹ ä›Y_~µópë϶Uø³T Û\`»¢ï›sî¡äãÅÞ«ÔדòüóÝJ/f6Öç÷/±–ÏæáyNn…ÇIþì~óðgVçûofÛÛ=Þùçíí¯õy�mι™™Íµ¿JþØsG…%4Áöù'œ;‡òç•äÇI %Bhé5òOkZ*,3ïß²æò•©l|ý¢¾¤á�ŸŸBHSíð“jLÓP™ Ð`æœ;÷6€2³ïÚ_U<-ÂÉxÜ›<Á¥̹—ÝYñ<—ßöÜA‚ÊÙ›üqÎY�¿“± ¯ÚFLÒ^GÊó¿f[«ðwCF1ëð»{ÕbÂçðÙ¶4uì7�òŸûn�ë&‹p4á{ð¶óו÷uà"øóÉîy8 C}þÑ�IÿGúŸÿ†ô?x¶µÒV»çÃ¥ZÎøõ·É£üëŸýñûk«^ê³ZÚý^&¡%®… Á¥7•«²”z ÐE_¿h ?®—,€”¤o?~~’z¦íqÐ$°Äb¸T\Çò¬ýÆ×’JOʇj9{*9CK·*ߢa,ilf� „÷/Ö:$M_Ò£™ œsïm±Âgø¤bŸÃ½™õ·'¯‚a«]cI‹.î8çÜÊ̦òÇɹ|•%Ôp¹|øUòÇ÷áÖ'a¤h0©¨¿ ýÓòê°_ ÅÞ³ÂI¨i%½†'·Ö9~ým’¶%éé×ß&3…ª‚„˜�BK5sέÃyþ±à¯>ËçùŽ|jÿºêZþÚ)‘„¾6N\ÃÀ…!¸Že¦ý Á�™�+´@ºŽüÝsäï>1³'Å[×uªuª]F‰ÐÒ¶[3›‡ÖXUg]$@t z@Q¥ƒS@†© ¶ºÎÆW È'�¤þÖÿo›XUÀ�ëpÚn-ëÿ»Ymw¯›®ÃBL�t0´$ZªÌ97ÝjSœe)XjÒ1 ~üÔìë—½¿þt�µqšk¿ª.àB\Gáœ[šÙRûõ×*q&VbÁ¥ƒþ¡EXZhi~?™pLŒ•ÞVl(éÕ̺^j?€¶–ÿ ·ß³¤dsÌ£™­ï5?“>õ™?ô8·¡úQæûžZJû܇ú\rz÷¹Ex u û2¡%4‹?ß&ÇÃä¿ËT­ë‚$ÌõqÞˆš–gªÐ”v>MþíZçDtÌVh)öý¾#´T›EZAoYKz¦º'@¦™>ßã\KbœZ‚à8¦™âÁ¥27•±É·å¡I•°Ây¿ Œ7•”‚™Kz8Ð^.)OÜ…›ãÝOêûf¾Ç‹ö?ó�¤E�ÇIkïÖ—¡Mwgç÷U8Ô~c.iªj=i?¸ö^=êÐóÀEñǼ±>Jm¬žtji�¦¥V¹ªJh—8[ÿñû+ç´ÊZʬhŠ|œsó­Ö°»fò×¥´ŠȶÔçñáþ×/þøI[8tWÏÞž-CÕ1àbýéÜZ-6éÑ�¢¢bU“R'Û„ÌnïóÄ�s.-¼ò.LÚLô¹"Ðûö„€K—|ߤËMÆc¬%�2g©ô÷=Ï{ ›I~ûïr|îsI#):ðñö-¸LfC™ÝËìEfN>¼p¯� K�Ò¸ ª&©bø*3>ƒ{ùÀnÝò´È%´Ô]�"´tJS}¾®]É·â»!´�[ìþ¥Ì3p±z¦qÏôØ3½ôLßå ?*}ñ6p1.€£9ЩÐMe¨ä›\94±r«x«·‡"2!š´`TMó¼oaòåÐÏMó´ ûNìqNî†}%6Y›kûwž?ö¹÷Å� €KcÖ™7} j]ÄoË{Ô]Ë ™}—Ù“ÌnåÏeuBLOÛÉõ•}Î%´Ô1fv¯ô뤻SoOÑtAÏÔïY¸—ù7ô¬–Êõ±Å’ŒÑ¡ 2;ˆï.Á%p ±ÀP®àRˆì†�V!•&öØëŒß9¨®¶wªè$KÚ�T¡–yZÊm �µØê“ªŸ{l»¹l!3„ÀÒ‹|e¸.µƒD›ø*=Oʱ"�—TbZÈìUf™A´?~�ÿñûë�¤o’î?Ò¦ªCÌï7±sÚœÐêK�ò�¥Ø}ËmϪݣþø©ØYÆèÐyÆÉ©>†‹Fp œBlÂllfy.¦cÁ ¬ Jìq똠‹=Æ `Û»KT(@tÆö±�Šu «Ûc¯¿Hå \€RZèó1ç6çq hš'qœj£±¤'™}—Ù£2ŽOüþºþã÷×ç�Ó\´‰ë”ZеæXJº9ñæ …z[H÷J_@Óÿ^Õîø,Á%´ÞÆi©ìî|pÑ.€£ •sbá�<ÕŠb?“Õò-6‘WGk†´OÛ'‡k "9çŽ]Ý!60R(t•"¶ï´ý3ï 3›Ù›âƒkIÕàrø^ªvY2àÿ&³—0³±sn÷¢;v³™gUÁ±Å.ü›°]ˆ›žúzÍb¾}VÑ KÛÖòûQk@½-!]_Ò‹Ìf’îtþà7Ž,ŒG½*н#´$…ó­Ò�™�’F§Û¢£cÂÔfã´ê™¦*^‘úYÒtã´ªk[~üÔüë­õùºŽYè‚¥²W¥ú¾oÀ©\lpI~áÐ`ƒ$ÉÌNJzÆrwŠ  ¡fÚ?W^k+üZ\ìÞl®*žÓ¸:$,txRµJIÏ’Pé ØwÙ¡¥¥>·'Š*V’Vÿ�_•ûW’¿ü/¥ÿìQú[%žs¨ø{Õ×Ç5BÚÏ\²kIc™=ȹXË^´@ŽÐR§Ï…JJOʾšÙc—Bï‘Å#‡L•cn6˜Ë–Žu½1×ç…¯T\BäY�2”Ÿƒ.ÊÅ—œskó+³ª.�uÚ/gž‰€.{V<¸t·óÿw9εN®\ �ª˜¦†ÚÖî"KlÅ «­:f«jÑ€ÛVò½Læ¡™šZZë#�”¬ì[}úoç ¯øûß;oÿÿ¿'ý/*÷ÝÌÿ;þ8’œ?¶ÃLÉß]Úùµ/éQfKQu§­ž”Zêl`-\$U–òº5³gWâxÕ@\€ZmœÖ=‹Žín[Izظ£Ï…î—ôõ‹®üd­–glãÒÆ,I\ ò—nÍì$«¤Ãªî¬Dï3+¶]æœ[™ÙRŸÒûfv½µ-2é›h¨cà>úMl½&jº&v�Å„M‡¨¨�f-½Þ™J ¸@ç -%A¤ä¼7—´n]Æß³'ƒ�ñAAÿ?�Lþ»Éç_‘ÇlҺϫãÌìIñkçiÇCKIˆ¹è±2 ;ÝÔ¾QÍñ¶qzè™®µ?ö²–,�ê4v¯F¥´ZîέìjòØ�ꢃKι¹™­”=1q­b“�eå)CȪmüyùiçïÆ’f¡ªÑî¹}^pÕsl~lfýŠâØj…¦žÛ»xƒû,vCq……‰¯±>ö«¥¤5Õxš#, xTµ²à3ù¶pm¨°€¶:mhi®� JË’UŽÚË+VÚ=÷|\Ç$ÿ;Vs*c%á¥Q™êWhžZŠ-èël7ÜK¤U Ê«-ß�¬•Ö,¬eMõ1¶»–ë�nÜé®/~üÔêë—O‹jæ?~6vœ¨Ó\÷;=Óøˆm�£¸èàR0Svˆ¦—VU&Íh‘™öƒKI»¸ªmâ¤ô0ѽ¤R“8*+Öy½¹7³a‰ªN�+ ëœ[¦„ÚoUrµÕVÛ±¾>¿§s57´Ö)f–´€) XÉ–¸NG³™]ËŸ;�‚Y*9¶R*ÏŸ¯—Ú>ïøjpÉŸs‹û’^Bå%B lëü·ëÙ9wùûV«©UìR¾½^W*µ% Nlãôª.­äKg¹®øñS£sO¶ôÍOÊÖ*x íèæÚïÜšÙ´dեǔ¿¯íü‚7±ª@+‡0q“ÕN·­b¡ö±™�KVHJk1ÂuÝ™…¶p�ª˜Ê·ÒáfÍfv«ýÀo�¦êhu–“ðçòçè$Àk¯p ¾r᥋eþ˜ ëjhéVþš l°s-=0­o«Î+ŒSfáû #Ó@ûcóÅV¥‡‘©/í“„¹·�ÙI+⹤ÙâÌ“­#ût�–ÖØW% ®ØAž÷lg[†ÚãzŸ .úü9·1yÞØs'¯?ùÌÃvÐÆirîm:j.?6½’)±ø ­pñÁ¥“»®å'&Ž%O[ŠSõuà̵?Hs«ý ¼YÉPÁTû×}I¯f6)ò˜a2$v®>B0:V1èÞÌŠ¼ǬÈÑtSū8ÙUÁÏ}¨x¬p˜õ ¡¥× 1—¯¨Àà*šïø¡¥gBK'äÏC³ðçA¾¢cr�qÊSÒv�ÊÆÒ� K•¬,z©BEÔ'U«4ú,_y±m!ž<÷m{ÍÎg x v.I#SVÀ4 ]Kz™o9uêSØÎ{å»&KÂèãð»ï­²rnwÖ{6”Ï�ã’PÑíÈ|Õ›…«>5²÷6ì‡Þ‡í×ÿ82Í%=,\þEw€rB…³›soP·?�{j’gâ(O°¨Š¬Ç_21À‡Ð–i÷Ü�)qÛÕ >ʇ—r{Ìì^ñÉ¡µŽŠŽmó@ÒcÖ6›YßÌ^tüëžÆ “N±�º$´–«:Oø¹WÅV©Ðs~e'(“U¡}ù l×aÒh¦ôsP]žÕÁê,�âÜJÎ=ȹ+ù�ÇSc‡2;æþ…še„– ó/Y¸æ}”ô¦ò×+ù÷쮥ï[žë&—ÝÈô¤b‹«’ÖŸ¯!¼st#ÓpdZÈogÙûÃÚ¶;¨*vŽHz ïwÙçMÞ‡¼á­mcI‹z(¬Á%çܳ²W óNTÚÚd]ÈQm €}Y“s«’í½wŠ_# %½™ÙmZÈÌÆföªôqG %§]3ÜÊoöBIf6Øš¼Ùþ÷6NÂdr¾rHl"f(iaf�ia•­‰°´ÐÒ²MmD:f*éJ¥þï%½È ÞÌìÉÌî�uÏbÖ�’cüw®:Kã97“s7òǪ©Ns¿•?ï¡áÂù)öYu-´4–Þ'UËHÚÂ]U¼Ïh:‚ÙÎ.„hʶ±êá¥ðø¯ªÖ‚|ÛP>@Tª v-U –ß– /Õø>ÜW*%Z IDAT O€îºøVq[fʾ¾ÖqVåI¾ÓN€}Ï:<éPéüZÊN¡ô僞BÛÙäa¨�2åižCpºvι¥™Í¯š4”oy&ùí]‡¿‹ ˆ­ä'¤_ޱ� ùÜcƒn÷òí÷–òïÓJþ=¦ü|bçWd0u)ßn&}cß—¤U“$ÉÌÖòÕÏV’æ-ŸØDÓø@m�“'1KIu$èpq|0úA¾•\‘–%eÝÊlÊþÐ\*A®%Ýt!´BçIëš²f:Þ⃋Ãõ €#kÿzv%?4[ø67I`æZñ–ï}I/#ÓèmãB¸(mÑRÒÞw¥ý9¥±>ZÛÅ$ eŠ.Hk·Ô~uîØû›¸™f ­è½g+´tè}HÆOCmµÊ‹<¿NTv=“žéz㘓\sÎ�{jq?¶r¾üz�ÏÛ—ô=ãÇfίš;BU£´ðU m¿ŠzÈSq'¬Ýý{çœåøÝª“ÖIÀ&yœm“´IŠ*Ûy¬½‹ÌS?N ïã¶÷ðK �…Š2މ¤¢Âû÷õ@‹�<’€ãR>ÌÔúIbœA½ç«4ZŠ|ß§¡²^wøóÙ½ÊW˜ÉãNG e£šŒÐÒ¤ ×&¡flB;¯•ü5|g&ðò\+•¹6€˜‘):–°ãYÒCZi+D»>‚I{þ…ÓÁãÜ�ŠP·uë÷…j× §oE·yÇ,lGt\,hŠyÁ–a7Šß·ÇBFUÄo­âíÝtàwʞæ —oV•zþá­é¢@¥ž° í_Ÿ&UCq$=S¿ç+‡½iÿÜ?è™ϰY”ÒšVqÒ{¿û·Œ[;çRKtáùºWÆ€ ÂÉ�}?üIÈæ’–M™è×cùÉ«ím]ˇ4Z;yU·Ðre¨�‰À¡>V®å?wV¡7TÎÑ{×à9[<×-i/רã Äï—OÊWÉ·Š¥|+°‹;WÐ*.…¿.xQ=íP3Ñæ¾2ÚÝÞ¹·õ3³¤-bÙ çZ¾-\kߣONí—so@�œs+3›éð oßÌnkÀ M,„S." Úæuz¦.!äuq“÷x—g"óØÕ–òJ‘÷’dfIˆi¥ÛaâBùÞ“ê žÄ,å+-1XÝ¿þ6üáÜJfU«H³ëZfªr5BZ(­µ¡¥L~TµóõT>�Óéã]x/  ž‹†–$iáôB5»÷~תo\d&o–3Ǫ6—S×¹gV&4$ÿZvÏ¡Y÷Îi­òʾ–™öƒKƒ‘iZÊ¡=»W¼*ç®$àÔɰò×/JZýøIp .AÛZÅIù&ëš´È*Oº¤úP«<ƒs±kðµü„æ9¯Ï‡òƒ†I{¹73{ íå˜dì³[Õ8ICh©�ýmòý×ÿpüøoþÛÿRZËݲên‚B‹´Ø¸U+CK¡-Ü£|5ŲãuKI£·…Û•'äM@À)T «ÄBDµ];/œ¯†´pš„?¶p�Xàt’m™†ŠŸ/J‡·Bà)ö™Ó¾´=Ó¸ç+{=)߸Hâ¾g…~þb}ý¢þ×/ºýúEO_¿è»ª]_N¬uÁ¥0ˆ“5HqÊn—&²NöT[êUjÀÍ97š#Iß$MäƒLç\ù9� 7éTÐ3 z¦WU[øòXã&5]r=�|'yÜìk]p)ÈsA\uaž6q­Tš.´�<ôïë­ ÓÄ9gòA¦ù{‰s=úòƒjMÚÈ/~yÕi*ÚÌEh©­öÆ"þ?³Þßþþ‰?÷g7Eÿì_ûWô7ÿò?Yåñ“`N,#´twêí9¦PeéU¾%^Ù‰ÞgIWιi}[ÖeÛê@�ªJcšF,ð™#ÓõÈô8ò�’ïª/œSö}+ú{±sE!àØçFp©¤žùjͪ¾Yé¼ ¶N&´„Û}­—àBürî 8’ge_˯°.+ëñg”§jw”AÏvzà U�ÆáùÆ:Ý ù’ûˆ2»×éV¹>«e!|rpàýüã¾Žç¸ ±NÊ|ûÈN„–$ 6³²¿¾’o›×‰ ¸’2ƒKT¨pUïi¢•F¦á)Zº�|k­äžPú¸=j"´[;…Ø}õxdrGx.ªyžÇZÒóÆéáÜrbs}þž¾~ÑðÇÏF´‚ÐÊà’snifKžÔšÙÀ9W¸ôe(e�u±Å pzµ F…û„÷‰ûÐj: 2%a¦cà>¢Mü~ó¤ÓU°!´Ôb[mâú·þÇÿ£êS±*þ„Bhé)òOË6†–¶,¶€F¦Gù¹¢*×@늿ìÙ8­z¦¼×K’_|5ݸîŽ+„ÊJ¥K{ÎçOçÞ€#Ê*¼ê5¬´Îú½YÆ¿8Ž“•ÿvÎÍ�sιçÜ7I#ù…Ï*@b2± |k¸…NZZKºëPh©ËÕ€2Ç0þâÿóó??ņ :óáÆÔÐRGÚ†Nuø|¹’t㜛Z*¤ËÇIÈmdê�L ùPHÑÐQR¡÷NÒ7�ð>�3Uö­¹¤ÉÆé®Ë¡%ÀekmÅ%çÜÚÌf:<°70³aÁ¾îyÂNT[j*5V¸¯x¿·0³�>·–ËšH\�bbÖÌžäæ—’æï‡pˆÿÌŸtºökIñ¶Þ¯¿M’Êný§ÿü_ú÷þÖßýþ U]ño6–s)�$„–^#ÿ´VwBKÉØÝƒ|uº]SIÓ®¼'Æ9@ã�ì¸ Bk¸Weߣ­å�›«ðßsIËÅN ®”¶v—fºp¥:”àˆ6NëPué1òÏ+IG1Àåkmp)È .I¾è]�ÇÌê'»bà8ФuN_ÌÉÿ&ú�Y]BH+…Ь¡zëvˆi7„pªûˆäžæ:l—àåƒL„ÊðU–ʬÖ.˘ÔïŠ<‹¨füþºÖdK�.<‡‚¶BK»ÇŠN…–ι™™Íõ±ÏÎ%=0¶VNÓCÞ:¥jõ·hpiáj«Pû¤ôm|V¸7ZP½ °qšöL·úø^¬å[ÂMϸYÔªÕÁ¥0ø‘Õ[øZ9ƒK[+¦¡Úpa27¨¾¸…[Ûÿ>Ø&°“ ÓÑC&4ÇáÏ}2-õfZÒ¢çH{R‰Vä<˹" ppùòì_É1¤ŽàË)ÚvNW:ZêjXçNþ}™:çW;>ÎéN¡j˜?v-RK¸wd*~mµ–4Y¸NT¦‹Ýi5Úlò÷�Ïò¡¥N…Ýí×êàRð,¿ê5MßÌ®�sy&>²ª-I8�à^–mC72 tÚ… uˆ½Ö~ÅÏL#Ó½ü|[òY-%­klñ×i„–mö§soÀ±å\Á|‘R…Y+©¶ ÉÒZÅÕ—ŸL¸—ôjfÎÌ^ÍìÑÌ®³î¯.šo··ÐiCKKIBK�U¤M\]Úû>±ŒÐÒ­ÑP³Ìï.A9'TêÞcd+>S×üK챫Oy_P‹PY*‚)ýZF¦¾ô\º^”]X ýÁ¥ ŽjJYlëœÏ'gfÇ^ œ P¿Húnf 3{2³Ûðܗͬ/³GùÂ)_ϳ|h‰‰æÊÙ&nýÇï¯u‡_¨ÈRŸGZÂé\þù@›Ü†jDEÅ‚.ËÅq«Í”ºO a�‹ .±ù¬qŽ•q¯øûȼœIÏ4î™{¦×žÉõÊ�—�“èJp)Ï@PVp)ëßgÎ9ö4U]Õ–òÊâ?Iz3³ïföbf÷¡¢íåø¨²tÊÕÂkIwrîNÜkvY®6q;ÿ¿Ž�Hö¹˜Ù“â“™SBK8’¬‰w*÷8µ—îÉedzTü¾¥Îóf,Uö^éIéÇÞ¦ßóL¿æ+ô™IÒÈÞïývubÁ?AMÐ3 z¦ëTZôLN~ñ]R Ojþ¹ Ö‰àRe]ØŽÓV›Ùµ²oü[ñx?'p‰V:ï„eÒ^îQÒb§½Ü¸‘íåÎWe)i G°eÚÄÕñ]¢ÂWEBKÏι‡SoOY4Ÿ€¦JzÊ„Ù{{±]ó…«5¸»Îé‡ÐT.#SdzQ¾kµFZ8¥Í›õ%½†0R¦ðs¯Š_ƒNÃó´RÏtÛ3½ÉWFÃ}ý¢þ×/\+¡ÕúhÑ™¶¯ó@cu"¸ä O+é™uñ¹rαb Z,L¨¾érË?:Î97wÎMœs&i$éA~Æ1[.dIÚ˽ꣽÜc#ZË�§Ê’Dk8Úı�ªaÌì^é¡¥»SoOf60³ù é©+öáx8·8‡kI‹‘ÅçYF¦AÅ‚Ckùû–:¥];Ý�L�Y!«‘éVÒ›.8´”X8=(~nÊf�iíþBx+Yä{Ï– §i}[Û¡õÒ«|Å­�¤aÏ3n¢¯_4øúE÷_¿ø1ùýh«<×úÜÛ¡±~9÷œŠsnff+^%{­�‹à°ê7³M\ÅÍ4T˜8}ÔÇ¹àœ“»ÔÂùPÌû€F8ß�åï—Æ:ß ¬¡¤áY«‘ø{À´ÕÞÇä'e¨²„y&?�h3»U|âuvA¡¥ä˜LB>™ÙÈѶ²Ñ˜h¸�| ²•ü}ÈJþ<3Ôá{�‡…«7t¹pZŽL3Åç}î%ÝŽLsí�•>áû¬ýk·K©j1‘sĶ÷^>Е|fy?·uxÜV -á¶Ç‰·Ý÷L³M‹+L]¨¤ês¢ÿõ‹Æ?~Ò>í³qZ÷üñúÐñyØ3õ9V¡‰:\ f:<ø<0³¡û¼²5Ojž�eh!ó­anUO» Ë9·ÒÖ}MXÀ‘˜ ÐÃùý¤o²jö”–’nä? Q¦Mœ¤Z Ç)��Bhé)òOKI�-…àË£öºòãiÓâ©8Ï8¥;íŸÊw­½–-kîå.lGlr7ÏböDrŽ_i?¸Ô™ ×ìcïÂi=²ƒá%);¨´m)é®M-âz¾ W2Nœ†ë¥fšiQ÷:h³¹²�×Cñ@u©Uœ”/`´{Aš5@¿t .@ë„¶pÛ«Œè çÜÚ97sÎ=lµ—›è£½Ü1¡OßÆÆ¬/X~ÕéCKS97"´„m¿þ6*{_LkWǾDå–‚ÌìZé¡¥I“«™YßÌžtxÂò¾m¸ö¤ê-”æ’6 ¹5Ý×/ú®Ï×ì³?ÅuZ©gÊÊ7HÒˆãšæ—soÀ©9çÖfö¬Ã_ر|)̬ ”V%É Nι¹¶î›Â$²Šy{5s⸃&fýÿMúOþ¾4þû[�µQ5™ËWYbå-²ÔÑ&n®ê“.’4–_Ôõ@å¥Ïì£jÛ%…–®å+”=Ì­%M -5_øŒ’ó/ã—dK*—µ’4Ý8ªø4Ô\Ÿï³h‹�6Ë3î4Ö±Çà€‚:\ fÊ.™Ù@‡rV”Æ€üÂDþûÀH¸ïÚÎ oÐÄ· üï#–>mTؘ¤DT•žw[äÜ´úà#ò—²&Dê .I~üd(³‚w^-½*~x¸kZh)k«V˜É¿6BK u6NËž)«èAÌZÒóÆéá›…úì—ú_¿èúÇÏÌ!À%ʳp¡†¡. ^� .9çæf¶Òá`ÒSÆÃp2€ œAwEê΄}žÑ›Uø“Üô%ýv’ S�™ÿ¥|•¥F….IÛÛÂí mⲪá¬þøý5kŸª»ÂŠo_gv§Ž/âÊZjÔûcf�*ßNò‡Ã»PA Í¦*\šÊWY"ØÝ|±kÙ¡˜ëE … æZ‘…{[¨:†ÆùÓ¹7àŒ²NFY_XÊ=@“™ÝKZhëþ®L‚(é·3•4‘d’F’äo,SF©§rnDh ÕÑ&Na¿«»:R_Ò‹Ì^åÛ>vÕ“ÒCK�+2³±™½©Zhiꜻ"´º`ã|»·?ú,éjãô@hé2üø©•ö‡òÜ{—*k,ªß³Ò-Ä�£èrp©Ê`ÒÒQšÉl ³WI�ÚYaV×ìûR~DûFÒ7IW’î$ýÇÒÿù×¥WÎÑ*eÔ\òîªlÈcùêK�òÕ‡:ÃÌžÿŒšZ2³�™½ÈW…*;=—tå8Ž€î™*umŠæ’&§»rÂeÙ|ýBp­•gU—Ð(æœ;÷6œ�ù�ì2_Êç\žÔ5´’™%]R¶W/åƒ�•Ë«š_Á=ÖGg–]ké}•ÄÜ9WûÊ3K;Aλֲ€‹â«,Ý+R{)_)éD’BM+ùë*–à _›\KzÉø±Õ¿¿^å~ÐòãE<ËWkõäM-ÅZ‡<;çŽ+ÄÿrZÉ�yÑ2�ÛÈ4–Ì~²p²3lPÙÿÏÞÝÆÈ¶¥÷Aÿ?÷ÜÛž96�[WÎØ#ì§NÂ@À»ŽÀI,LD5¸0Rµ-�¢U !„Ä­úŒ©ëò ÅTIˆ–“pJt$�Bz‚d+€Îö$² ò˜³ñmÛ âî;�É™qߗҵV×®]ûµjí×úÿ¤ÖyëSU]/{¯½Ö=Ϲ`½ Æ ,îÛŠuÙã3Óþz×âõ}¡*[D�ržrnŽYß©Ê6<•öfÓ a6�׊]tDD.¥uvB:"2„n��tì›ï ¡�¯‹2�"sÛSèÌ¥v:ˆÈÆ<ÖƒŽÏ%ƒ¬ãŒPÓ%%‰ˆˆ’=Nà®ÚRAl+³ÌEÄ>†¯©ÓŠŒGË.–̼:à±”10…ÈÀ=‹È5ZZ2K®‘¼é£¨%tk8—ˆˆˆè¤Ý),ÏSèkºå�b°¥^ßÃ|†»!ÿSn�M=v§à�gLJíüQkœr«8@Oø•��Ùp‡ˆN‘©‚ôù *èIýøî…´Û˜Ý˯ wRžu`%"¯Ì¤=�*x…Á�†ëÀ�¡Ç;Ï|$"/Ed%"Sâ¦Óæ²Mœ¦« Õµùj à"¯ 2GOÞÓ"2…þÜÆ5ZŠ\KÝàðEÀS¥T©�'DDDD=w à CK½¿ž*r FÔUvSÑC±èv—r§py§X¨…Ú夃KfB¦ìnE–‚$¢“#"è¶2-rwZ‹Èz‘1i÷ò!†nÌà¡íˆˆˆ¨+DFy‰äPÁž9ôÀãôÀfŽÆ·WŽ ÇA+¯Lû¹i÷D'Ä´‰Ë¿Ÿ|psÈŽÈÊoÚ:ƺúÏ+ˆÜ@dŠŽŽÍMhi•ðO>ôóÚóØŽ¹– Ì”R—J)î´%"""ЏSîT­chªÇÞ¸÷ñÃKÔ[ èæ;w Ww Ë;Uw1r¢âN:¸d” "…J)—ˆè­P¾@AfZÛ´[(†*j `êä í‘1«ÑÐ=–x‰²GCèm•ö>‚.W2Ça½Ä²�Á¥ÓSE›8MoÚºD½á%k }-ñ‘ 1u¦SNh鲩êD"22­®W8üZj àÉ¡­¶‰ˆˆbBè Œñ/"¢¶Iº¦b»8ê¥;ÿN!húq%J©¦CãDäŠ-È/•R�î¨#"ªŠˆ$�<èIíç%o.PJ=ɸ¯Šï ÌWTÑ5ÅB‹ fâßÅ:å¥RŠ3DDEZ•Zö¼b{~X+݉N�~O¬Pñä¢=òÍWÍo°�RêªÞ»¤&½õþåGÈ¡<=°â’¶|t.Mwø¦ŽKZ»˜Ôþ(ˆˆh[Å"’W–}ÁI"곌 CQ¹­Dd˜Q%)¯%ÛLéÅ”RLÛ„dW>(ÕÆ�—ˆˆÚAŠUØa«Î>±­‘ò*Ò¸X£D»pÑ!‹1tÀ`Œ³ †Ó‰@3` IDAT(Ø&îÉ'ܸ Íè*¨×î·-lk¹º½œó‘¹¦x…ôÐR­!Ù‚ç¿,ôõÏ�DDDÔiç‚)ô¸È¹ý;…§ >$ê¸ÇgøöÚð^ßsóQÓ\ÂCÛ¢¼ OêÞYGDT§Á¥ÜÐRÎí�¡ÃEi -Enà%Òw"— 1¸DDÔEnòè)‘!ôuZ»i=³cæz‹ý²�¦Üû®c¬a>[�¹?^ë6Ä´‰{žómþ'ܸ_˜ÑïÏc*ù4)„¾>Ù~ñ>ÎÙñ´�ÐÒË”ÇRÔR•]µ‘©¬4Gò5áìN9ªJJDDD�{³éÐyáNäaqhhÉÈZtÞZ¥T("WÐá¥$csÇ1Qç³pK]Õ\5Ý×Qµ]vx<ˆcEƒLIïïÊæqÌ#¡ÃZ>t›tŽ—êS$˜—؆ùhJùy ìZk„ôs·}þôû8f P p”ZšÕZ2<vþó 3ç°ˆˆˆ¨³ÎCèëÁ¬1êü\°¹S8f¾šˆˆˆZâäƒKf‚*o‚Ž“¶DtêŽZÀ2‹cY‹2Nv+¥|Y˜¦|Ë<¦õM ÊT}}ÖTˆÂI•¥,&L D‰´—³�¦:ÞÓñ@„½.ž˜ÇlƒLôX� Õ ‘Ò«&¸úu½ÂñmÉÚ )Ìl[ÌØVgоŸ³BK�ìâWJ-Dd‚âÕ°è�&Õ½Wˆˆˆˆ*v.@�I‹ŒKíf V™$""ê�“o'"sèävšP)õN]�‡ˆ¨)9­âêˆÊ9ÇÚµRjvèm'Ü×À«”.|Lg«8"¢v(ÐÊ”Çå¾Ð‹ô+4Sei�† M(Ò‚1� 1±½\L˸1tx,ú¨¦M\=ŽÎÛÙÞ€` üàßþX¿7Z² ´Ú¶–Эá.$""¢NŠ–¦(w=xªKDDDÝ÷FÓ ò&äNfòšˆ(ñUвª-9ÝlÑÒ* Ìõ+.u�ÈÀT{yŽúCKON)´d2A/&¬¼‘W"²‘¹ˆ°¥ã‘>ùàfóÉ7³O>¸yÀ¶sõUÐQ*€RW.¡ƒ=}6œã¤ÐÒ¿ Bd‚ßÛ¦âmÖëïxª”:¶¥7QcÎS/¡¯5Ê^�]˜€ˆˆˆ:â¤+.™ÉÕ—9ßö„;I‰èdU´PJÉ‘·ý’/<+©j—Sái©”Ê-!ÌŠKDDÍ+Xm¢Ðq�ZJ_“­�ܦ©J!t[¸“l«T ’Ù!BØ6\z¼Äö¼GzëýË|òÁM3¡(,»ë½fHÞ¥6…> %°ïí¶òX sE¢Ûg¾ÂîkBWÄ=µÀ%õȹ` ={ìµ w§À¹Z""¢Ž{³éаiο³ü=ёՖLë¶´ÅŽªªddÝî°¢û$"¢fp¼ÞU:h|È®Úcm CK'Y¡¤Âê“èJNcsô82f:ÉçüP�–,¥YBWªž£'ãè5J‡–½ fÕt›Åí{<0_ú½îð}®” E¿vSÆ:´ÄÏuÝÇ…–<Ë;ut§ê½é):w�w]k7hÜXCDÔz'\2 éyÁ¥e�…ˆ¨ç²8* .)¥<³X–¤w;Ɖˆz¬È$&ƒK]£+ˆ¬�ß¶Ûµ“®²QgÛ\dˆH€H˜I)ÅV�m§2:ë#2…žGélkÀ5tµ¥¸12CKYö?Oú}nƒLú×#ÞëJ©¥™ÃÚ°’õÈùQ’Ð�%VŸì=æB�±‘ß»¸m`[%80¿ßŽÛ¹1€ˆ¨q'\BþœTÀ !""LJ‹Ú¶3»³ -DD'¨HØ”“K]¢wI>Gýビ®²Ô";ˆDĶݲA&^ƒ·™nM¶†®Ú5Aþf°VI -Ùƒ’CÑM/”Øêcvq¤ðû])•ôЉˆˆˆ:ëNÁ?¬Q|LXß)°U|_èù�1ô�܆•ªd«'=öÚ”›�ˆˆ!J©¦C­Dïî½Fþ`h¦ô¤ÑI‘´ÂR)uð¡ˆ\öSØwYÕ•ˆÜ åBD)•ZŽ)òÿÓžO)žéDD5‘rÆíEŽéÔÙc‚ªœxÜgZÆÙIâxÙý&EƒL|ÝÚLϯØS«7x’ð#7hôÍ¿ 2• 3€èJh6 l«„¬hGDD]p.BW]ÊŽ-¡«,q#J—m¯ìµh[®A“ØëR�ct"¢zô¦â’ˆ •R™m"DdZÊÛÝ0´DDDDDÔ¸¶Uí£CèÉÉ稷E`&·Ye)™ �?LÀÊv·ë0òkì$v])‹Új·�œ­¦5AËŽÝ>€«„¿¢ñа êÖ™»•™l˜‰Ê2DB(8Ò:�oˆˆ¨µîSu)mƒËÀâN±E|§éµÙ1Wlý¦øC|Š!>ÇŸc€{ŒðxøRâ¶…b¾!#ü„òíuéÜŒÑ×6 1U§7Á%+³cÔö?©í‰ZÄÒñc#"¢$"s$Ÿ{<—•¦2îg©¸XKDÝ–7~ç„QÛé0LÝÙ€º-C/%˜ê ÑA”h�©îŠ:ü|w‰ÞH¶°ˆ´|˜ áJL>t¥¥ø€Ø¦)[ºÅÛ†™4½PÂß”&ï3Vwh˜ˆˆ¨¬%t %:4ó +,qÜÓUzÓnløÆxmòÿQ÷%/A>Æ_c‚_“¾þÆc€_ýô)~bwÿÀÀ"vƒÍ9Å4ˆˆ¨œ>—ì âØ r�Õ–ˆˆÈ»ó‚È Dæ¦Ú�–¼×œÁ%""j½;…5€Ù�†–:Lwx`þL¿‹�p …ßÅGønð-Üà.µ+ [Ÿ–(òô‡T€?+žô?J¡}:+ˆ|‘k›Ç""¢} .¹¸_šòøDDäNÖñ¹Ê�úi¸µçã-Wb\í8O»îô ¢®ãâk‰ òéÁÚ*lßà'”�¯© Þ.¿Œ`Lˆ,ÙBŽˆ¨œÖ—ÌŶ]€”R³7qÌ…øºä}QqYÇçJæ÷M 'MÝ·kèÝ&qCYM ­Ú+NQ 8p¶-D¦¨·5œ`¥¸ Ûb&H½L1ã4{íŸL©<¸$z‚}`."€~OÙj™Cà Ñ!²í*Æþ\Qæ¹a†êBKk辈IoŒtj³¥&ض±`ˆ©_\µ'""¢Ó2FÊõû­`|¡ ¦ŠôF•ÄÍKo”Ÿ® ±{Mä]ïGæùCl/|¸ÃŸÿÆÛêϧÿÛ Á#ã¯}¾¾þ\Ê>æ4Cè±÷À‚Õ¡©+ÎvóYxWô8@äP#Á%³ëÒN8Ù�tñ[©‰J¥T`&ËZ²ÒQurŽÏUmLκÝZ'è•R¡ˆ¬‘¼V2…^_)ÍœK“‚K�âÅ�†VÚ@—„¯³5Ü‚U–ºKÅ‚)&@ 2 á°mX†øxѪìã²æ6ÈÄãMbU¼Ø]Ý#ÄÂL3$§÷ç8îåC“²Þ”tå¥ù÷S“hˆi `â„tw©HÆ×—ˆˆ¨Cnå¡ R|Ýt`y¡œlòpum“Zq9+¸©¸ä=|°¹÷B!pXÚ(>Þn˜ˆ^Ÿkà9DôåÇÝÔ2ç²3cßÿ€¾´æû•jWKp)e"2ÏHD%w9oÐ_KN>ÕÂCòîè�ƒªCI²‚KM ¸<$¯—Lp`pÉüߤ C†–ˆ¨/rÇõË7L‡hŸ£xû¯c®™Ð¤ö2ãÀ‡×TD†5}¶óô£è÷ˆHt°WÁø•ŠŠ½gà+"õøZü[§H.}ZDR[¸,KsuõÊt` ` [³ Sç´¨C!õ�©¼10º+Û>ìÄÜŠî"s¡œl˜µ-Ø“ÔÑz¬Ø«®&”:Éj÷ûø™¿ ,¡U”ã&t�i=f>6Ĥ7Éè� ޹©i炲óuÍóíp\2-ßF‘¯cÞÜ#”X`VJ=‰•��ÏànI"¢&¤—€#ª%‘íEE"ÕÀÎ¥ÔFô‚@| 8‘É�’Ò~FöÎ&¢¾È[ûåDO“¶%áëZ4å߉¨ñZ½ì\…­v9€X{9€ÏörÍ‘k$„–¾x¶~Û–„v3]® t•¥2oÆÐüŸ:{f:2„Îw]›Å”e«‘èX YQiç¢[*Ã\—Ÿ ÆlôPºFò˜ò©Pr¡àݦ×)*ÒÉW?Æošõ›ø½¿u�Ÿú¥ïàßúþ úW@¼›†èñ°ÞÇ ×�íµà1û¦Ð&nÈ¢¦ ‘ýYœ †wŠ•î©^G—b-ßì�‹Íevò¯´xÙy""j… Ò7;OEÄe¼¬NMV#Ú ¹{Ä%—lKׯù æQ�äM–q’§)ú<ôõ„–t@)sÉ3–rQúßnœš›Û}1�ã²ZˆÈÉcìÍw”ú³æ÷Im ¢íæìŸ@‡�½h°ý¡;\ÇVab€©rßj TQYç‚kì�¯Vž4ðp ‹´X‹Ï™Ž,µX$ܾkYçn×0®ä>?ˆ+ÀvU6›‰ß©øAU®;‹,°­Âtè�à%D–Pjáê!•ä#ÿ3<7ÉSÍJ—b-ßvʦ!€>qÐ{ õŒR*ÝË9m0t è+™c˜óTÒÂ…Uf ¢LûÑ"ÖH .Ð5-œÅ�$õIÞ1˜ qMÐçÚÔÓ É‡n Ç…sr­ª\I¼½\t¾ƒíåªáA�ñ£ÕH}dUtÕÇ”±kƒ¯Šü—“ß¾ÿ�2„^Ñëph)Ц~àëFDD® ÏÓ;åvîñV0à×Ðbm7›Ÿ²nc E.|Õ�Šð±;tµcä|z^ ˆ”*Úy¹ýôü½n±¬7C\#£óC޹y¯XYšà!{ èÍ¥-uIjpÉqË7+„Ùy–R'":5K¤ŸK&"2UGTS0U³:3%[²¥—Z¨5á­ø¢Š5A¹ÐQÚQ“¥ˆˆœ1×"y¸W·zCKÜ}HUªknˆHà\DB외qëHfNéJDVÐϵà²Ì\“èÖ+±´ÓK¥_l€I·Éà^ÛäË8V"""—®ÏE�—îJ]«™jHi­ÆÐóÆGqÔþ,ï>ÂŒûèšôðõ�àX‘õâe¯BKq:ØeÚÈÍqØúÀ+ˆÌPnÝ‚è(w Þyþ±¬êêrD{‚Kf¢¦ª–ovRŽÌDD'J)ååT]Z‰ /™ÐRÚůåjñst@…$ËCrèhŠ‚Á%s¾NºØ^3 LD=Ò¦òçºÓ կˇÐ;è *5µsp€íXp."@¤µô¼ ÇsPJÍL0lYô94××Èn5�é�¿õ—�—#à¢ß»s³¨Âãs{ä�“y²u^‘ë©ÓâlÛȺbà97 P²Öê]iopç¦"Q!ošдò‰e°ååYx™ñï+Se£Ì‚C‘‹‚MÉjKyV"2+»°¤”Z‹È5ö/ÈG"2,ðM«¶Äó.õI‘‰K÷ê"2EvUCW|—œ¨£ª)¥.M‹áh…馓v€�ör6ÈÄ `©UÚDäØ"I!€Ù7ã×ú}e+˜Gíƒ!€.ª´«S�.S½h ¸PÎŽõÏíoþÅÈ_þÝôïwÕz�’]ÂíëëZ~péÔÚdë5ñ'fþdŽò׺j“çD¨.>ò7ߌq*!Dj…7qØÊ÷|zÜòßøŸ¹+�ˆˆò(¥|™!{ñsÝ:n 8J<¿˜ÀÒù;¤}èÒ·ee Ü&Æ"¿Û¨µFrÿà)ŠU…J .•mƒGDÔvì£Þõ…–ÖPê�ó5ÑA”žHË™ê;clƒLM‡¢íå|Oz½dk+÷ú.‘¶Ñbû¾ÚŽÍõ{+�³�¦®šC·�»<¹©véK ŽˆˆrÜ ^!ù¸¿„» óe�òyhb�Žíæ'.T‹7jéðtÞëßÞÇ_5½6°†Þ¼œ´�e½Q`Æq6Õ È{l—¨F‡—¾àŸ6_?fñ6Äö�þðg†šˆˆÈ2U‡FÈ ¡Væü`»[ÔîŒ/²;:Pº2’‘·£Å.nEìm�|Ñ2AÎdƒèÅ㤟›ƒG":EœÄ©Z}¡¥hKä’/nW™ ¼ 1>�:Ç£?óÏBýæÿõáGøü7¿|ï“27qºþŽ™`š­²t(ÀB•]DÐï-ñ×sûþêbe¦€—fQ…Çïf°:%Q Ü ¦Ø=‡ÌŸ7 ®Î‘m#‘|þrùóùØlN«](\¹¼½*òÚ÷j¾æñ™þ\¿¾/ñs)µ€ÈºšY™÷¸ /q“U­ÈµB—7ÜP\Jbß¼{Õ)Dˆ™Ì_3ØDDt¢”R3 QláÀ.•åC‡–ào$µuË’û8MÕ©¤‹è¡ˆŒsZ­¦U€âbõM‘ã)¯!ªTOh)„n ÇÉ8j%3.{›™ð}4È”9Ÿ"_ý’ùõ‡ _ý!¼ñ/ýÛÓßù½"¡­­!:Å„ÿËŽë£Bè KKw� ¶�Ävì¿[õ˾×Ún‘\?7TˆˆJº•‡Ê‡.[p¥]3Õq�sèØ&IÒ\%þhú÷2NI«nïòç˜A¿¾œ/¨N‘1HçÃÓ�ÏÆãö«|5\¥|ˆ<…¾Éë5ÃKT±;…ð\’�ý]¸&¥yzaöÀÛ߃MDDô@)µ0žÜ^ Yí RJ…¦]Ýu‰ÿVôçX#ybc‚” ;Ñex“ÚÄyJ).jÑ©áq¯Jº HÕ¡%:´Äk=ꌄörCl+æìµ—“¯þÐÞm<„˜þù?ŒÏó[PÿÛoC}üÝ´»ìü„“Ìë³Âq“­kè*KÕ«ª~Ū2�áþºÉ…kˆ Ù¸ÐED'íVð’Ï�.[¬H³» ˜zHϸ¬TTz¬s.Ý©Rçš�±täïœ]ß_”{bp©nõ„–.ѱ Ñ¡Þzÿ2-t|þ{?‘ݪ96¼ÔSq):9DdÌ)"¶z” 2µ6ˆ"zÇò‡ÃèÀR·ÇÖÛk¨E¤¥\¼ OžCäIOZ„´«S�¨„kö|î²Å—t¾s*jêuõ‘½`ÍÅìÓSd\Ù§ëþxp �Ï0y}ï`N^©µ /=Gñë˜DBtýº…Úfï}38ŒîÜU\$J•\²”RkÙÀ”�|M 0eÜ.ƒMDDtêìù5.Þ/;iàX¶ÂQWœÚDX³¶¡¥ª&�èJK|Íè”Ù‰»ÚËÙª9t%¤š*e}îØVï±ó"A&´ ½œ©µÂqÁœ% ÌauÎnK¹1ô똶Â5{^yZÓý�V§$êŽ[yXk`‹µ}iÇ)—�[ÉÏ•Ëçov¡påðöÚÄCÎuâ¹`|§êiqL­�ÿÙé×µÿûU‘Fpµ™X)"—(·‘leÚ3÷éy¦fù؟ùögh‰ê’\&Ò"²„ãSÆ}æ›l»û5ˆýÙ5›ˆˆÈµ5r‚K"2Aò9—;+ˆ¨¯šjosªV¨.´äCWZâõ�š%ôDß韯Ա\�áô²‹vãèÿzÎÆ¶p®¥Â‹©Re«,Ê0ëL[¸cè÷“‘ôsVG¦DæPj™ÿ­t—ˆZªák.7{§�]~ÒîÃå9*>¦Š®ß8q¡z}¼-2N£žJ¡Ô4=Ïû|öê½ðúáã³½ÊcÀa4¥ü’á¥t…Ó§œk!G쥇kû;Åê­ÔŒBÁ%«‰SÆc±íz1ØDDDm§” LUÃx¢}i—6)ä´Ÿµ H�¬kÚáODt0VœsDdŽb•aÁÐ�¬O>¸ ¡Çjë·Þ¿b[¹ÈΟ|pÓèx+Råú¶½�½Í�]™Ž)W8üØB·…s:–î}<^BWašBÏÛU`šb·Š,¹Ãê”DÈh±\(ÌÝMÚØ×åF�´*B.1|¡"Þ¥Cyî¸ñèt9Æôqü¯<6||†áë{‡ÁŽòá¥!t‹¹ª±tL5%VË¥V(\²Ú`ÊxŒ 6Q¤õ¶U—’&£6ì· jS³è´VÜ!MDͨªúEéÐBRÕ?6f -Ÿ|pÀ„E"!¦6¨âXkçSl{9;ÇaƒL®×8ìyìg[¸CèàÖºâÓ"SœbH¬z\$¦^» 9O]¸kC5Dúø×Up)m®Æe5¤^¸PXÀeÕrîN!8„È~ÿö¡m!SäµîcpiƒýsÇC·g¶á¥¢U±ÇYA)Wç/"¢Æ‰RêøÑ%³L–ÝuØú‰¢‚Myl""ê)ùûçOzçe™¹Ü%nÎy¯b½QJ]¹º"¢¢D/¢f�¿}¥wC_¿Ý šàšgDí'"+×jíP¶½ 34Ÿ!"×(¾ô¡ÇÏ}\H9ÞvN¯Š0«ž³�+òþWJIM‡È‰[AêûúBÁÉû™÷Qê>vÚÃB²s¬`tBÎÏ‘¶B'@$­Q·Ò8 IDATfÔô°óã3Äçî7¯ïQͼyùùš7 Q_Tq)îÀ L­.ÍÝ£ŠMAU9ˆˆÈ­5ö'�ÆHž+8&ÝÏÆñ}’vŒ3›%Fh¦mAßÌÁÐÑ©kjw|R{9dòK„‹–(¶ynÉ*¢9Ìœt ë¢;¼‹Ad ¶xu�Õ)©V±‹�\(¶©i�ÌuŒC°ÅE¤½·ì.¯ÑOEÞø#èchÉØ`wÓGuUt• Må¥W(V­oܤAD=à¤âÒÞ�¯À@O"µ6Àt¨Vl "_aôÏ 65Kt»ž¤ÊJIÖÊñ¢°ˆ¼Âî¹)TJ½ãò>ˆˆ¨%D&žWpË”âÂQG˜y›1¶A¢¶´ù±dJ]45úV)ÿ¼°`…긯Ƶ+¹:%ùX�òDÝÊî¼³«Ê8=ª"TÇ}Ì\§üó“ V¥¡Ž9×ÁÅDÆg¼;ŰÒII®Ö×Û1ßã3$]w\½¾¯pão¹õ‚ÀÓLjèDT\z¸q=v�ü �zBédª;0ØDDDQ"òÅvÎ>uÙæBDìDÔR)µpuDDÔúä%ŠíÚ+Ãp ˆ:ÍŒ ÇÐsc¸?VÊ.”mâãà„GÝŽU"ŽQ®_>¶-sJDò&s=Å0ñÉèQà'ë¸óÎ…ƒ�Ä­$.<[—.‚^&<] ±]Àwñsծب%z:Ÿüø ÅþzýúÕVœÎÞ¨Çy"ê<'­âÒ˜�m³X ¹$6¸s2ZØŠ.õvM+:›ˆˆªµFþ…Hà2´dÔÒ&ÎT•B�ŸˆˆŠ[�¡%"JaÂ>‹¶fü­ÈÔÄ&+˜û¶á¤øXrÈ ¡+“ör±¤vJ- ç‚Ü„—D†Ü^+>×-k±¶3ÿ]G‹µ[ÁÀQP&õ=u+]¨½có!<¤sFpÓ¶,þsDCENƲ¦¢ÏEDÔ7E6ÛövãÀë{„�Ïàc÷y¨¾b­Rk³­È˜|]H¤Ú0Q…* .Y&Ø’` úØ.î 6�œ òƒKNÏ•¦2b<¸ä— ™E­ "ç"¥Ô“Ø·­Œ"çŒ –ˆˆj¤«g¸žX ÁÐQo™1áøÐÌCDƒLE0*¥”òEä z ˹—txÉUÁ!¦qÂnÉÁórI·‚vCE®_GHYl¼ µ ˺~¯*ðÕ™ÍÈæue8"¢òŠŒ?ú¾YÕÃîó0||†ÑëûŠîrcò)D<œPw#"ê—Z‚KVF€iYçã蛈ˆúE)ŠÈÙíU]‡|mØ(ê� › òw~ì\ØpDDt¨â;ôÊ`h‰èÄDæ!Æ‹‘ör®.Yß'æ«4ðÊÁíŒÑã]ø5+á¹¹€[AjÛ›[qÓ6 Ù‹¸®}}y½ì®DŸÿ¾/†µ]^p)8�¹� öçUƨçuàÅd+^êûëAD=TkpÉŠ˜¦¬¶äƒMDD�´Azpi£Ü_p$µ‰K<'Gª3�¡�ÍÑjI{%ÝEdd+7™ÿƾý³/+ø9‰ˆN]U¡%."�¸”ör6È4ëݦT€üÍEð}àN‘ç²óçç[�½>öéŽZ“ñºópÑP[¬õ™ž³Í Nw~ì‘çõ=üÇg°;£ŽÂJ…™A‡—ò^‹t烫Ê‘c�—,HáIl""j¥”'"ñ ËéNrsœ�ïŠ_'…†D·Š.z9G/¢’vƒÄ/hWæñLDäªl»:""J± †º4ch‰ˆ’¤´—‹™Š¶—ó 'Ûí÷×µ›™ö¹xÞ\r§UÏå­ì]SúÊI�%«ZdgZ“õ[¬�4¶‰Ûò°;¿2~|†ÁëûÂÐJù&¼”X-2f‘ [ÆQ×4\¢öb°‰ˆ¨1IÁ¥°‚I‹ØEKᣕLà Ø{ã«>€Kès…½Ø}86‹ÈÛÕÀ�ˆ\2¼DDäĵãÛ[sò‹ˆŠ2×ã=M%Îh�)­½œoõv|Ê6cÍ©{NŶ¤_ÿú׿›ßüfæ÷ÌçóJŸÃOþ¾òÝ¿†Ÿ€·c£Œ/þ,þ €�½�/ÿm|å»-ùß¾ø³ø8øùš¸�ïyúËp5m±b÷zœ×ÔDDt,—¶âÁ%@�ê™#Qj‘ŠÍó°euŽ(¥š~ ÔCÁ¦è¢u�l"¢Ö3ÇÎW ÿ´Œµfsq_¯°;Q˜Á´�SJÍ"ß;ð²ŠÇd¯^a׬󟙈è䈌¡K‰»¢ƒ¨œø""‡D«ÆÐcÓ1ô¸ðª‚à>Â͹ăR—¿7^함7þá�ßþÿþþOóÇÍ…JnÕNDDÔ"7È ó*uUùŸaà#è¹€÷ú¾� E^m ίQ‡0¸D�0 Õ#ì™â®ƒMDÔ¸„–lÖS—Õ‡Dd‚ý²²ÿ7€Žüù�hÛ¸HÐ)„ÞE²QJ}afÎsìþÜž*¾°ADDiŠOfõ”-∨j&4$µ0¦0¸DäÒùm׉ˆˆÚC$oÙ‡ROky,-P[k¸,zóóKkŸ{ søDDu`«8jD¬äûÞ.Ê‚MlEGDm0Iø;¿‚–iI‹Ø?ûó»ª ¥”Ó¡æ|°‘z‘"påò>ˆˆNÒ¶‚‰+ †–ˆ¨lÜ:.ÚYqÞ„ˆˆˆ¨kt@&ÏI�Ý-€RD–(Þ2î)+gQ0¸D­Ä`�S)é8ã4(dŽŸñ^ÜÀ?ƒÝ]D‚KÑVfüÀ~¹3)¥Ö"â#aw½ˆLØ*„ˆ¨4—Õ*<(µtx{DDÔ.B°\(!"""êž"km\ÿj‚RKèõ„¼×hˆý ÊDD­ÄàuƒMDÔCñ0„®+!¹ªÓ_ð·üæÏø¦i]g�™iÇ9ŽÂUñÝõæX¾0‘¥bOn"¢bÜV[ ÁJxDD§,éú�ˆˆˆˆú¯ÈZÚIU\j™t˸Ÿ.�ÁÇ÷¦>Õw»7'BDDDD­Wd�ªsÈ@·¢�Îÿ§¹†ˆÇЍDÔF .5€Á&¢Ó¢”òÍg)OಊϕRj Ðƒh¥ΉˆŠÙ½zJðÐ’+Q½õþå€÷É7¼ê¹[Ù»N/\íRNkÇæòº?-¸”åÚÍ]á58g@uò<àòrÿïUZá1"""JQd<Êq^[(šªKyóBÏ<­þAQßœ †Ðׯ#ã;…' ?$ê—ˆZˆÁ&¢^ ‘½ãÁ°àg&›èþêcÅ’¶DtêtPéa²Àñ­34J”â­÷/‡0¡Ž·Þ¿  ¯×6 1NDlHÆ^ûm¨¶y+¸AòñÕœ—ÚGd Gç•Ïñ>rq;DDDDT»¼à{€ŒÙÛäñF¯ï s-¡«.å½v#ˆ\C)W^©§ÎåaÞÑÎ=âÿ~§Xy�Üap‰¨ƒl"ê¤ôçdˆíçÐ7_^[Ú³µ‘9¦M¡/¼Fæï|?ˆè¤èà¦=N*¼'V["Êýü ¡w´Îb:Ê<ö«½Ž Ì×&Z¿̱ :à]($”[¡Bô¸û ê}o ÄYl�æ |º~ÜÅ##"""¢ºè1a^øåä¯yŸa€ÝyšÁã3ùিyrÜJâuå@o±&ºz\š¡ùJóÙªs}•U©µ¬´�ðIç•9Ê·•×’³b”úËÞ5®ÈüC3áœvc?Ø1F“ÕY•ZCd‚b×J+ˆ’Ÿ+—Çÿ5ôs}à  „m«œºÂ¶£DDDDÝTd èä×e^ßcóølﯛ .iW^!3Ä:xuUù#¢Î¹SÎ!²ßG\£!§\"¢=yÁ&`gg¬ý•Á&"ªÒ»m+ú¼ÃžèäˆÈ vË Ûó·mÔïszóa%kÃ�vD™Š´iÜ|òÁMk?G·‚kìgìf•:Z¬%~Š„€’‚Kia&—cÄ´ûp\²÷³*ʸïÒ.TáÒý¸«ô°íÑé9Œ ÇcÃ;…YÓ�‡Vd¼Ûß9šr6ؽNl~ÎZ·Œ›Ao(É3�È JñóJIôuâÆü¾Õw•Ú@d‰bcü)DÀð%°ïï,cp­†ap‰ˆ*Á`¹¤”Ú -~DT…¼I±~Mˆµ/°dñ8K”¢`›¸ð“nŽi 0EúIJ« HZàÇU¥ç¼&³¡ùès\ôqNdw•¤|(Õt{ """ªÐ¹` Ýb*KZfQYº}pÞ¸�k&[ë×÷­ í/± æ™B$„RmÙTAíPdcÛÅ‘3 .Q#zlŠþDDDt¸¼ó^TÖhq` <¶‰#J÷ßüûÿÉ�…ÿèß/¾ýeüèÇ_<ù�:¬1üWÞ1“œ{¡"8<_”h±Ö.ÏK\ì ""ê¿"An.fwS‘×�Á%ãõ}‹ç«¶-ã^üsˆÜ„@Ö�‚.¹ßÆc=9ÃàµRÇ‚MÀöqúÑ?3ØDDD”Mt˜'O·«[´;°dqâ‘:+¡ÅÚßM+.þÄŸüð'ó¾‡c÷ŸS‡¯+‰Œàî:z^õÞ�‚ÇÅìÞ*2.äüAW(åCdàºàÿX™¶q /‘å!û¸0< Ù”\`p‰ˆ:©eÁ¦èíÚ_çæqØg°‰èH"2ÅnOe_±|-Q .µw[}ìºF‹Û0œx¤.Ëj±vôXá­÷/‡ïߟûáœo ?ùঠ—R�§·‚¡£6hì_§ù*ñ¾«º>£â\…jC°ÚÑ)ñ‘N� wÉc@j¯"sœ?襖fC]Ñq?ÃKå#ÿº�­AÉ —ˆ¨—l"ê¥ ¸¸EÔGE‚KÝœY¡ÝU–¢ºùSëÝ âÁãÌdø…Bþ>ívÈüÿèÇ_Æï¼ý÷]„–RCC·‚±£Öe>BEn÷Á…rz{ܵY¥r yÖPªÚ×+€Íð<ýû vwáþ�€ÉDÿêŠïëû¶÷ë'¼Í}Ÿök2Ùÿž,A¬cóýã±þŠò<ýX|÷qØû��éTÿ9‹çm¿â?�½ßÉD?§.†0Ü¾Žž§ÿlÙ×ÏÞwÞÏP‡èsíÅŸÑç¼ìsEDÔ}ò«*�ÁvÊ]“÷š†•�ùÈ=¥fÐkQ /QYÒ7ŠY“ .ÑIb°‰¨“Фû‰¨{úwq«‚Ÿ£;¥ñ9ñx¢Z¬=œg¶â"åü}+¤Tá)++ð3r¤™üêW~ ³ÿõçÿñâÛ_Æï¼ý÷]ŒË+ÿšðS+®!D·(ËÃúÕr®­nQÃ÷�Åb?4gCEž,—:D2ŸëÏ¡Ök}[ñ�T’0܆qj™Nõc(À }_q6ôãûÀl–šŠßÿr©ïwž°Æúv²žO{;‹…¾�ë‚ÝEò~†õZßf˜òѶ¯áf£¿¯ÌóçÚb± «¥‰>ç‹…þ9¯¯Ý†æˆˆÚ«È{—º&ï$ÆMO]¥ÃKìn,ʲ2m¥PŠ×e'ª`kP®Ù� .%`°‰¨8 &:�:Ÿ‰L¬ÐþÖpQœx<]èV†{nG•s²nc7!š¬DÁQŸÅ·Þ¿!'`ùèóGÿÀQ›8Àeô/UYj«"¯ 'È«¢-Ú_mi½Ö!›CØ€Îz ÜÜ” ¿ä…„ŠCâñ<`µ:.ÌRöyC¤ }ßÖf£o'-8”d¹Ôß½�CØ×¢(—Ï_Ǽöž<}Z.ìEDÔ]EÆ©LrvÉvÍ# çºm}}[ô³90‚È Jñµ?]l Jµ`p‰ˆè 65"ÀîgŽKDýП‰L‘9RB -Çãi Ý FØ}?EÇ‘—Û†¥q¾ëúÄÕ¾ý…€_ýʯíüÃoüðoÂ/Þýw.îÈTŸ:¥ñy[…vÃî>çÕT[:&´åûÀåeñð’ýþ2áž¼Û›Íʇ§¬cž‡õzÛÆìØÛ ã” -EE_¿ªÃK®^{Wa/"¢»SϲÇtÜtØ-EN´¬ÖÜeJ…¹pƒâóq#/!²€R ¥5é°5(Õ‚Á%"¢ 0ØDäžÒ=µÙW›èôtcÑZWZêBh)€~NmÔgÉïònlÇoÑßÀúB9™Ì€ým0€ßø¡ßŸ¹Jh¹¤ý·õ=œ^é_«Ðnqu|ñ*Ù}m«%%™Lt€%bñ}ýµI˜/·íæò‚$a˜\ ô}‡û÷íyÛgI|_‡YÊìÿ‹?ŽñX?+ë¾ ý½ñçÓþ<Ñ0UÖí¬×‡µmó¼ýêEángŸO`ûÚ­×ûÏWWÀË—Õµ�Ë -Ùçj4Ú}Þ}·=`” j1¼DDýæ!§‚ã¹`|×ï*¢}Â�§à°ð\›Öq3Î#�¶¥Z0¸DDÔ›ˆˆˆä�ÛÚ?¢Ûí´uUJ‡“ìWU­|NÏz’/‰îB­[¼ÅZè¢Í]‘6qBGmâ(¯7*åêÚ²š�ñ° C#Y-ÃÆæGò<r‰Plðf˜ñ±^,’ƒ+Ó©¥…fì}�¾�¤ðÏz]>¸ÄÌçéá¡ Ð?w<$º}YÑÛIk•†Ûç°Œøí¤=—6Œ6ŸëQÒÏQ$|vˆ¬ÀZÖk?ëÇëyú9 b§ÿhÅ+"¢~*2æã´ªŠvYþø�íÂúáððÒÀ"WàµÚ)ÉûÜsŒœ`p‰ˆ¨…l"""zÐ…‹ßçp×nçX6¨ä�ê$R¬ÅZ¼’«k§ÀU5ý~Ü áøs]a‹µ"+Í -®?­B»Fd7ŸñJUóHj+–ZŠ�u[±xXÐ�¢´àM$ßïtZ<,3ÏŸëQ<¼†:à2>ð²}µÒ�%゚òÇcp¯íŠœ¨ùæÛ{ŽŸaòú¾׎J- ²�®¾Tvà 0- C.DTƒKDD´‡Á&jÑ}Ö㸘EÔ}EÎíü¬ësaÕ%ïè6T(Ü Æ†L°ûÜy.Â'¦ÂOÚŠš³¶a¡"йP¬,Ø —*$"EŽ)m®v×öZîXÕ-\¥U ººÒíÊ`ƒrá“C*ìÔ¡là'íù+š)Óš/Ï1��ɤ\Ë¿2|?¹ŠÔ±�µñx¿‚ƒKDÔ_E®E»¶�äåWCí^Åç&l°¿ÉÍIUæZ(åCä)ôÏpÈ€h`‘9tk±z7;Q§1¸DDD¥õ%ØÀW8wÅúoŒí{ˆ»|ˆº/÷œ9ç´M•å¾èòÚñji-Ö‡x¨°h¨È¿P- ÙQio½9ÛÄUÍI’â*9QÝy'-øáûÀ“'ÛÊHe+Õ) �k«U6@ÔÆçä˜ PÒÏŸÔÖïI·3V*j4J~ÿõÐ�‚.Û\=oçðîx­ÔnzSAÞÉ�'²^ß#||»A° €EC©<½^r‘)€k¶žc+z¯L ¹ ¸Éœˆr0¸DDDÎu%Ød  /¼Bl/ÀþÌ`S;(½£ç xØ¡ÏÓDýÐå…ë�…ßo™LÑ=FøÿÔüõÕ»Ÿ½Ç$Q�Zl²ï½™\›ÚÇ„˜¸¨OÔyÇt'ž‘ögñãüa-ÖtûÊ�I›ï_Àb¥–ÇÞHGH­9ëIÃkt$¶‰«^Õ­6)�‹ôJõïÿÉD‡—â-ÂâlPh¹ÜVjªªSè/J²A—!¥$.[¶5áØ×!­ú‘ïÿÜ$…‰<� úÚºªÀEDÔBwªCÕd(I‘*iÅmÙ8mts®^Çy ‘kìÿLe ¡+8]›*L”âu5=8©àô‰a¬ðyôïFà —ˆ¨Ul"":©“c|Û]5y×-Ö\¶‰Ó劵ċ—ß·\V®ò�¼¨írÕô æç`Õ"jÓ&.o<É6qõàsìÚö:êXõ¼6«•þ5/¼d…án5&`:4Ľ½ªÃI}VEÅ%€A """wŠÛ96/èõ=üÇg{ó7cÝݬ¦Ô„�æÐ”Že«0…ÐA/º�xD'ìÔ‚Ki»z9û@DÔ! 6�C_Ìx6|Έúå—M¦è§c‡Ð_Ä×X¸šK üzNØ[�;ƒ�û„lOÒßEø.KLÌøHžPtynóS~ï¬%Ð…â„'µÛÄÕ#7pÉ1_%\oë›G[­ti¹,ßjËóô×b¡«7]_ÿ¿‹…LŽ ®!""¢.ÈKû ””¶ÁnÀgüø ƒ×÷îvèÕNwA˜Ad ]9ÉŵÅÌöm IDATÛçi‘hˆ©ÚÖÔDÔ: .¹Ý�LDD-À`S/„&V"â+¥ž6ü˜ˆN‚i±¶× .Ž,oB‰¸À CòwÛE(-ðsèµÀÞÿ{£üÜSˆr¡¥ZûºõÛÄÕ#·ªU-�âô¸8¹Ö¿pe«&ùþ¶RPâ-†:øäyÀÍMvõ¥0./ˇ¤]h<Ö†&àêŠ•šˆˆˆ¨ÝÌÜLn>*ÏÃ~e¢1úp-©EWæ½3‡›VÔ–]¸†ˆýèŠH××:œôôé~p&©µ\Rh ž??<´ÄŒVEÅ%WÕ–’P|݈ˆèTè 9yú2�Õ„´vqýlè¹¼€…y�M`FÕIj+gƒL¼†'êˆS .eÍ2ŒÁ“/Õ¤@°É˜ì× ög×:lRJmÀ*ä€i±–´ë§+-Ö¬´ÏŸËã„�äEN‹Îøuøøx¸E€oG~¤¿‡ßù‡ÿþ3w˜°RÛ&*Fà5Q›°M\»ô{2Ÿ²yžù¾­ðòeùÛ±¦Ùl÷ï“*%…Ulk¸CÁñ•†úd³&v I •¹ª€•ôú†áq�–Ký>¶�s4Ò!)¶·#"¢v)rBå¸ü@¯ïá?>C€Ýyº1€eC©~Û*L l+$UÝw9ÚV¦­œ^Wà†h¢VkMpéÅ£g#èƒÈòÝÏÞ«âÊ>ë\ÉAòÅ£gCs‹Š~&""ê!Sa$u�ýT‚M"2hºâÕÏ´X‹¶„ù}è¸ÅZÒg¥ŽÀ�ËÕŠ´ãDÕY÷]ÆþÖøKX'ýûßr\j)V!j‰·Þ¿ ØP—Ü(r.äðTýÎï|.rä¾XXeXpX”TÕç˜pÌ:qlsº<ï° �ç%¿6Ç„Š¢F#ý‰ßÇz}ø}„¡.…ánu¯h;C""¢v(2Øá†«ãxؽÖ?>Ãàõý‰]ïè9þ%€¥i%gƒEuÌ�Ùµú9CLDíöFÓ^ëü†¾ê)å›–rWÐk—ÐkU^/¡×l9&ωjÔxÅ¥w?{ÏñèÙé“ö×/=¾ûÙ{ǤOw.E¾¥¾“ù=e¼xôl½€šu¢Y¾ûÙ{LgQçµ°bSêíÆ+4Aï௽b“i±¶JùgW-Öú"u¼t+]('§ô{&þú;›�©ªÅZ�ôa‚ÆÃñ?Ç"–¢&jÛÄÕ¯ç€SUߨf>×�â­ÕÂp[�g<Öa–¡¹ð}ýïiíØ]='‰ 4%j–KL�·÷eù~zK¹ét¿mØ)·Š³l8i8ÔÏûp¸}ݲžŸ´p‘+77:|”ôì{Î>Þ¢�y0зKDDÔ&Û–\YB¶¶wfà:pãð^ßs³FiJy°s·ú=<�¾¶¬¢­ÜÛ6rKKV`"ª^ãÁ%c}€IK.N_Ïó}䀈°…ms\,”Ô›À°A’´6nE�ÇÀË—ùÕzìý�|›ºR” H É÷yŠíä¦Sàùóò!žÑH?ŸU‡–¬Á@¿WŽmí}µO‘çàbh©bÛ¶r—¦­Üôš‚«kù!€—©¨oq?� FçÒì†nê–V—àÝÏÞ[ eàæÅ£gef,öNÀ:´ôhï¶MË·B^„ >„š~5þjø!~7øeÜàçð  Á¦²~%#ïóãz1„Þ©1…Þa±‚.¿‘¢Á¦¾\œÚ°ù2òµ€š9™Ð¸PP"tá3£ƒU®VkZ�#¢¸O>¸YòÁÍ€w�bâõ|ýÚ8]õO::ðrHxe2Ñÿïæ¦x…#^Z­Š‡N†CTyùRWІs’BPñ*L§b2^½*ö:ŽÇú5(8«Âõµ~¬óy¹÷Îtªÿ_ü}@DDÔ.EÖXyDÝ¥ÔJÍ Ô;pbšC䥩ðD1ç‚ñ¹àú\ðü\ð€—Ðë)D…ˆRªéÇðàÅ£gcè…À"fEÚ¯™€Ñ·â­7~J}Ÿªÿ+þí—EBF/=[¡ØâBàÉ�í툈ˆZíV§åãçC;h_” ŸˆîKýz1ä!ó!”mÉšä2©5YÙVt?�1~9å.þm\f› þ4&ÿE<ÿÉ”Oü9Ê2•›â?H(*õzUMD>BN«e¥Ôe]�ç`"ÏÜRh&Sˆ¨"-äÆf¬¸äŽˆÌäíR½TJq¡¤ "ÇOêÌUÚ›ÇÛãyº]Wh>š¾¯Ã%6(2^5).ôýÙ–f¾¿ Ò ‡ú÷¬ª³åyºÕZ\|þÙ¶Þ ‚íë8èçt÷¢»ÁFÿA7€@7ðýT±$‚ º‰ÝÏóíßO îwÛúhEg˜ÌA¦šÁ¦&1ØDaSÀöþÁµÿy›Ö¥yRæ!DjÞß“àDÔÛ8IÒZy4_q‰ƒÎDDDT·�¢2.–2ý; ­ µÛĹÑ*ÿž‚6GqõÍ=LBˆ¼^ũ׸ .y dpi¤<^Ò«.U†¶PÄŽ¾½(Ë�±%‹Ö_‹a»ò’±c°íT„0—¢Öc)2Ÿ)�ôÿŸ�K²2"CŸxŸo}àôcN6…”G‹µ“P3H_+ “„‚Ä!‰\�À�’Ɇ!‰B�eÔMÑœBĤ”æç(c¹kÛ%ÒúºÛÐö<3ØD½N]3ß&´«šŒêsalA3 mP£Y“"ƒê} Q7i64CDDDD!±S` Õa%+¶—ŸqG—¨·I™ƒÏ@»ðÜíâs'gôÊK=^º'QØ)P@í ÷õäK ƒK0RÏè-Ú*¤R®a EDÄcˆ¢,W�~õŒ>š†SpÉÜ*Î!¸ ±™/x Žo¤vˆ!1ˆ²ü-â2.-눈H�QjMÀÔZlH* ÕÚ‡« üÔª"öÖ ¾CEBˆy)eÕsj -aHvW ˜Á&";©]ÕfFŸf÷á1hW@öÔ ‘IØ?‚NÅóËAg"""òkµ�l×V~*.±²&‘6~? !r¨¯úRO†— ÍuÔl±·S uO2Iµ6¸¤›†¥êÅ–¼ƒ>ñúÄ—DÝÂCSK‘yÛ$œƒ°}/mËœÔÏ61(Ð�Hßcz‹¹ §ªO%Ø«Bõ¤Q Z@aHÝ ¨[Ê=5¡¢’Ê*BÝnH¢¡gK1}[ê-⦂ÑtQ°©Ôa"¤,AˆYÔw%–›I0¸DD]H¯®G�¥¢¢_BÄX�ˆˆˆ|ðÓ¦ÖhG­¤�Åz]l•ç1^û D‘Xßdx/�¶«/ÍÀ#˜crBäÐ[s~æR`E7òèàÒHy<·™_€),±‰²¼ƒˆØ…>ñ„ˆâ‹­�à^²%‡�*, D!±Yó÷´ûõcGß"àVí)3Rç‡:õ¬áÕdÀ6š�` Ó†=hÖ'­Ì-•Ƥ„ÇtñÂ`S Õ•¸*ßs{S—Q\JBˆ$øþ ¢îã§*ÇTZKÕy@ ¼Ÿˆˆˆ¼ù9¯õ[É„šã§j&�ïÚ` Z©¶�Äöœt¼skD5icñ§ �sû /M8Õ²u îëI‰@—tÓ°„‰´ªKqD!Ð�ûúžÄ[AbÃã¡"¶[„臔›÷ÝÖ'∈ÇLË/BÊ5ëÝ #åqV["¢À²´X3‡†$¯j逪'or¦Û•p‹µIØ'® ±¨À`S .ƒ# 6QW‘² —�VÑBg l—DDÝÇÏ@%÷}­¤}VYÏC¡¤…6u=?Õ5؆¶=Ø&.8ÆP}Q/¢H­o²M Iy Ú¸ºŸ÷Ò$„ÈôJÕ¥{ù�Â6ßeÅ}=y |pi¤<^XŠÌg`¹zyK®""†ôï"ØÑ÷ÊrÕ©}[EnµWa2Ó*;}ÙtK[òŽÓ]{)9ID-´"ª>ÀÛÕb�ªà<±¢,Ô1${ú*Šiæƒü€“�[�ÞÂ`QK-@]p)¨áS"¢Fñ Ë`ÈÁß`{-t&"""O÷$J;ò¨=ž”Ü)»'Yy³eüµ‰+ôJÈ"œJl£§ �×ú#ŸAoÍyx�gÆv $ïIÎG’»À—tXª3lÉ»èÄ0ÂH½*RÄ-X„-ÜE¤*¼TvªœTõx}⡪[Ëò޵µäFÊãü@!¢†uQ‹5·À�ÊI ·j*l¯³’0þOMÒƒ3'…SÐàOIžƒMDM�rÚ¾­ÙϽÛÅQò<––Rrl¥õòh>¸”„1½mѶX H1×FDDUrð/bÚÖò3^Çç¿MÖ7QˆÚ}<€ )K​ð~_�Aˆzç×ÏüN,¤@5„"¸4R/-Eæ§a)�W–«Ø!öVÝ7"vA в\P®ú™Q�)"vA¢ŒòÖŠc{9�("}C诺]bÓ­¢«-u±6µXs+£Øl 3·«[T Ü‚K*ÿ3s¨HÙO�[ç !.bûD& /¥ |¸M‘„Ö®2¹!¥Ì!f%'TðHH¹GÁãU¢ˆæ/.É àç!a%„ð¬]�RöRÛ "" ±�Ú¸½cE“ü=‰gÚ±>=G—}×ã^h³�(bë›ìîjBÌÀß…‹Çz¥êÒN÷Î2†Â= îkÈU(*.™d`™/Ë;èq‘ª;º·€ƒc•%¯ŸK¹æZ*éëDDR+(( ÊðÒ?ã @ å!ùªª²±¦ÐRLÿº(„8Æ@HïbÅ&êzR ÄšoÃÃvqDDÔ*94ÿ95†pµ5¡ ½°Í6…Æ=‰ÒNáÚ ÀÀ*­ãç˜�Õ~ÚŒ¡¥®��VÍŒU—¶åP{þ*±S qOò|†œ…*¸4RÏ-EægQUÖ°Œ²¼SU!I«¦Ô¹ ˆê›´Ös6Ó#åq~¸¹X˜„Vößh`ÈIpv˜9TÔ-Ö¨cŒÐ’!à-€ÉzrÆ`u ÂÛÅQkäÁ€mPù .…�Wp ;R÷dÏLî·ƒKD­ µŒ›…wÕ¥T�7åá^h"�í1t"GJƒKK‘ù•�ç×–¼c¹Å¹œ_›– RÙ­JS¢ sa¤<Î µÌŠ@ÕcÊZ¬A;(Uu˜R6hÉVm]ÃZé/è'ôÓÎXnc[jƒM °ïûÁ«N‰ˆ¨T�C0`«žŸ~A?$""²òs¼�?ãÔb Þó … Tµ‚ߪK)ôÆy“1žƒ6žc •ê¡,¸´™OÂ_/Ç–°‡—Úòxíø{K+˜�zmj±ÖI~ûür+[¨r21ƒí¦ŽÉ•”2TÕʤ”³zxØÀ?۵RÁ&`ûsÐú½J 6õ"íª+íâ'""õ¤ÌCˆš¿P†íâÔch™ˆˆº‘Ÿ‰k~ªçgL�Õ–ˆ¥�ÿex9é‰ýÛ=‰pŸBMPYq‰¥Œ[#¶™�±%]o1µX3Ú¬ C§:³V q{ݪü�v+=¨ræ¿£%¡¢!-uÌä1…ž" )¥¬„nõðR @Ì|;Q'X‚MŽû]!„ñ¹Â`5CM»8!R�’ÇDD¤ZÚÕÁÍ`»8õf¡mãøÐ2WËæóMDD¡rO¢°SÀ+4Í wÔc›8¢V“2!¼‚KÜ¿ù 2¸ÔiÁI‚�†ÀY•¶3†Ø�Tv�çÖbÍ­òO#Ü?*?@ÝÖWe5¤–’˜¯"¥€B$¤”*÷ BLB»º &„€%¼Ä“` ¹a°‰'å,„PÑ.Žåò‰ˆ¨T¶ˆç1‡"ú¹]îÇ¡1=ˆODD6ž¡é�)¶RD§õš‡a›8"5Ì8‰Aˆ2�CT¬¸ .ÈŠÀ¸` E‹q ñ}f—sù?QWÒæ°DBq¬Óá%¡MΛ÷�3Bˆ<ƒÔ�l¢:x \øÁ Dˆˆ¨°Ýιl×F -Qˆ¹�Aãù÷¡úù‹`e|"5ÜætÍRà{ލ&eÁ¥‘òøÉ¥È|Ú¤å|VTèGŸx}" R×2%6ðÅÖÍz~åÔHy¼j§°™¯B©"ÅŽ¾½¨=7±%‹�ò.$6ýþZÚ ÒìHyœ LŸVŒ }ëOrH"®h1$jLKBEl±F=(`ÊrÛÐñ6’Ö`e À[öt`]ˆ:ªK‚M濃çgà ËI5è¾ô±€äçÙ‹¬üHd%e B, ù¶¦lGDDD~Ç %hã%y¹{’a%儈�mâˆÚ)ûœ�/L$ò ¤”-yà¥Èü´Fß }â! ê!Ìÿ¾ê IDAT&ÊòclÉ¢×ÝJŽ�”Ç€–"ó“ðq•YD™ªSU*+†ØGš(Є}‚ံ´eBŸÆ` &‰í ú<€“�n_GÔ­l ï� ?Ž�Ï'QÝîKs {3ÄDdÐ.>ð¼ÐÂ…ïÂ{>ö¤dÛªˆ" ¶¾ Ž­‡‰á=6»œ3!rÕòà’ÙRd>�íVrÖÁCGQ½•œ@Ôöó-yeù1j—r#åñc>×ÏõÉèG¤ï1ôÛ~&å¶pW+Õ P™å¡õ²\)�w¼õX�k©n ü(\F­´ú3C ®зÇEØCE%ÓC’,D½ÎTu)#Ûtu³ÂÚ^5'¥½v¨Ír=ZH( 㸆†VRŠ* Õ &¹¾–롯'ÛµQ-ÓRÖÐ’Ð&È`A6yÕŒ"&«O`­û¸”bÒ¼œž "˜é}èø~ì@°Éº¼)}=ŒŸw{°)�æŸÛ$´ó"òÏÏû®[ö3�¦·N(±�p å &¸”?«ˆˆˆˆ:mÒû.X`h)pfP}Û©‹©q~Îu9¾GTC[ƒKf#åñ´Á‘Sz›6#ÈäJbe¹�²\…@?$6ü,ªžßÂ�‡>KÜyø3 üì~<~ûË�ËøB~!}/ÛX¾Ñ ®¡AÑZU„V2*Ú†¡FÀ«M�ŸD­u¨C;¶ 2ú¿æu.©¨¶DDä‡Ô’ùU¹z¡ZÊÿ¿-Û„IlWELAÛÇ™«ÌÂþY=¥ßND!Á`õ?A ¶GZEášûvî×;fÕm¨5 !¦9 FDDDÔQþ‚K49T�»%¢H®orÎ1Dx>KT§�(&¡ÍœZßD®cÁ%³‘òø,€Ù¥È| Û­äjö_­#8T—Ëû?Àùƒ?vüÙÿþ/þ{Û²ïǃøŠü%Ü�ÁÊmy?ðþ_ñçÿóá­_þ§ V+÷jHI¨Ùv[ë1k¨Èú}ÃôÊPmiËDDT'Ûg…9´¤‡.Z~n®î–´°½ú’&*Ä—äáø³¿+ù²Óíñôðh[ Õ:¥bvù¤ãƒ‘/l±FD½J¯–d XOl¼>O�žÖɇ ´¡#¢ðb°©n¬`¼®4®ú#”{å7ðoî›CõíL­øÙýžë\ãƒ'†êxe“'ñô°ñ|P=YR(f—;5ˆd´XËòNæÕOJ™BÃvè¨3¸¤WT²Þœ‚iò!@Lˆ( œ‚Mz¸rÚ1`Ùò+»|�›¤”ÇZ´l@MpÉï…D¤ñóžap)X8&ÐIR.@ÛÅ€ HAˆ|¶ª&""""¢ ëÅ©�(b뛼 ŽˆÂË#°d6Øà’E-j�ðŸEñÐ÷oþ®øåÝ›ø ;p¹‹i%· ìTyÐ>øœ‚KÆŸ5Tdý¾"žž„¶m¬mØJÅì²­|![¬µ–È !ŒR‹�„Œ ¦sऩa ì;9¦(Ý*6%Ñü„ªÛºµŽ”y¥¢\"ªÃçÙ‹ÇîKK@;rjEŸg›¸¶ò܇I]‚`êª.ñÊp""""¢ú8UAM�ãóݤ%Y¢ ª#°hÙ•LàƒKK‘y£­šMŸø2¤\ƒÄFÝ�ûÿ‰¿xî/"×&��=!�àù0 q9þNŸx°%ïVn+‹Ÿ×*ª¨j‚¡Ö€j >´†$ò¨¿ÅÚÜÃQJ®Z�§‡� ªB1»Ì�L""¤”%8‡TgáÐVÕò»{Zµ^DÔÓ|WSòÑŠÎ8>4þMX¾¯W®\cÀ‚¨NŸg/3¦“qñ ~ÛËk߆ýp/P\šƒKDDDDDõrcp‰ˆBe Š´qß�¥õM­ B`ƒKK‘ù€·à8ÉÁ1!HlbKÞÁ–,VÝkS|æ*êÃŽÿðˆ¯õé¿€ˆÜAY®ÖñI­_S\’(­d`ÿÐÊÉ®à›�þˆ§‡Í·çŠÙåV¶ô "ê:ú•ìœD ¢ òΑR÷Sljm(h»‚T3ºý˜Ÿ¨¥,!&£¥:µ�רÙA eBÐüXVB$±ýyMDDDDDÖ7Qˆ"‡êyqcJÔ>*Úo…’X2*,ÕR‚Ȭ– � .-Eæ“ÎÀ¡dš@‘¾!ôWÝ&0 :¸ôs|æ¹,kpéw–Oá³Öðwý%>|à "¾„Ç2T¹OŸø2€ˆ^*>SùùùÀí°óß ìpkÑã6ä:!1$Ùb­Uâéá‹Ð>ü­-ïòÅì2Ÿw"""¢æy–BÖ«Å5­�`'V‰z[ÄuÛ]†Ç´�Æf��Ÿ¯DDDDDõ²—Q$×7yly0lF=¦ÎÀ’QaÉq pÁ¥¥È| Z¥%["Q ;úž±ý^#íâ`@~©êû¿ûIíß•_ÄM¡…’vˆ'´êN&}"!úñÅÖGø‹¾yëŠ> à¿ð¯†0Ž�€’©:’QÖϸúÛàtj„ÛŽQ凛Û”Ê+ÂÛ™LM Eªñôð ´ç«€êç§PÌ.;µs""""ê%m«~âl""¢¶ã |pÌB]p‰‚ÕÇi¬ŠQਠ,\ZŠÌOB«´dÓ'∈Çjüö¦ã­#ò¶vnFu¤¢ˆ êø{æß‘ØÐ+:UèÇ}}Oâ‹­�œ‚SIï.Eæ�ýWŸ0¶"P�Ëyh2³C²e“4Ƈ›[K ÜWåßäŽjGKåß1çPTÚ›µiñô𤾠kå¨R1»Ìƒ"""ê$¯ŠKlÛTŸ" %¡¦]&µ‹”‘‡�J‰"­U5ù°¾‰ü@ÖöÍ<§"¢ ºˆÚa|– � .-EæÏÀ%‘»ôölvR®a w±%×~[üØu™;p?>…~ùîǃU?Û4µ™Û’EH”µ*K¶ S;úž@Y®bK-?C À»[øüNî3¾OaûC&à˜ë 6¡˜]nÉãv)·–ÊÊQno\•�"ÇЀŒªåÄÓÃÆk7_Ì.«|~ˆˆˆ¨»yé»ù¸BÅS7??DD¼Ð&Xfá>¾P�1hãDDDDDä_ÕóåÉ�(b~'þ‰ˆÚ$籃´îc¾K†Ž—–"ó1hÔ˜ý§DÄcèUÝ*±©…‰ä]H—JK~üŸá#qÚ÷Ê¿ƒ<‚(ĺ0W\Ú„”w°%ï@ }â!ô‰8¶[ÖEôjPlÉ;¶åôá>çÔUȯœ.f—ÄÓÃÖªN¡þ»¨¦‹Æâéaóí™bv™eà‰ˆˆÈFá§ow?j{³U+ˆˆÂÌÏ>�ðÁ²—ˆˆˆˆˆ:Å\´ck%Ý[ˆˆTXßÄì@SØ.ÞR€Vjx_ÕÑàÒRd>à-8di•ŒúõïËØ’ElÉ»NmÙ\DôГs ¨êžb~*~ŠÏäßÔ¼ŸÄÊre¹Š>ñõ“öQ”å*€2- UCWLд¸ ™Q9ÊŽrêóJ] ž–úó¨À^(f—y`FDD>~‚KÝAˆ´Á¥¤þÕ;;‘3?­ë\ )KbŽÖ%ÉvqDDdsW.`áúŸU¾õW_Dr÷^%�]ÚXÃ{·>Dþã›(­¯¡´±†Bq±þA$â»ÉÝ{ñôî=•ï©{pûÃý§=úý?ÿ•ïÇö‡Žwp�üYßÄ€µù/Š n'ê5Sh2°dèXpi)2Ÿ„V½Å6ˆ%Ð�}O@ !±†-y·®Ç·¶—“Ø€ti'×'¾\¹oD”ÝÚ¾Ùhët·bêƒV‰Iˆ~|±õ€2ðH­‡PøY˜�„ÊÉî)³^Ì.¥V•Œ+`å¨ ±~À+{]ÇÓÃFå(ëcæL¯9"""RÃϤu¸?…ƒ6ÁÛì$¯›p??DÔËÄÑ}Âò<[/$pªCëBþy�ÿrÞÙd§@ @ @òž¬2¡ÑÃJÊŠŽt$¸´™Ÿ„KÙé>‡À º £rQ½Ì¡%ˆàËøNÁ¥"U÷� a ÞÁ¥mz5(!dB<„be¹Š(tý­!©fbE -Íf|h�Œ<€UËéVmjqflƒT–EÞR–Í”¼_âéáý¿ÖÊQ…bv™'DDÔKºój#­ ܤþå'œÕ8)yËxñN�ä½.*ÌFQLXXßìÜë´íÁ¥¥Èü L!+)×ê   ¦T½À…°¨ 1!£�جºÝh%g½/$¬ íPÆPcbBbRÞÁî@ ŠOÄØÀß"Š1€G0 ¿„¢Ø@ñ‹¥ÈOŽ”ÇU¤Ðœ&ƒŒ7ÿ‚‚ǧ&³Ë-MŠÆÓõQJvôñôp­çžý°­Ám?— $,gÚîùbv™Û€ˆˆBK†)˜#„VjW ‹'íDf^ƒ·áÙÿ÷¶‹#"¢.vúüÙªŠ8‡Ž7\méôù³È^^TµjÈ^Ö0o¾0…£û({\j nÿàKîÞ‹‰CÇ+Á²K7®áôù³xõ¹ÆÃŠm²`ÆrÛ8FdÝyá¦;¦`=[%Á×wGè�¥)hž% h»m .-EæcÐ^”“µîg 9(AÛa/Œ”ÇsúcW%�ìÍ?µ–söÇÞ’Eô‰/Û~GÀr)�ŸpJ¯•‚ÇŽÄ&Öñ ÖÅ'æÆýxDw8³™��”Ç›½ú¬V „oò ·7€cˆIÕk å¯³6°j<( ÿÄÓí­º°Íhy‡xzØ|{¦M•ĈˆˆüèŽw!RЪO´»z�ç‰(̺ã3 7Y¯ònTl‰P“ЮÎN°m"QëÕm ±þA¤Ÿ­ûqJk8>÷íºZ‚ÕóØß˜û^}‡Ž+|j·¸¼úÜ‹8wý”6´®<ÙË‹�oÍ·¾‰Â@T�A±£Køõêñ¾Ÿ¿›c0Å»¨~î'¢ÈtªêR[‚Kzhé"š{Ñ-ÈY+é�m TWPÊ(ËU×.Ë�±CÔ¿µ¶¼[(f—•õ-%"¢žì“v­%Ü ÔLÞ6"ØÏQs¸� .§«¼ÁjàÞÆœBßãyÓ¿9)%ÇøˆˆšôÒâkUßOª?¼�¿uÇç¾] A8IÄwáÄþÃH<² ‰ø.<ñÈ£HÄw¡P\ÅGŸÜF¡¸Šü­›Ua ·uex%X¸ýÃ'Ö?ˆ‰CÇ«B‹!i·€êÎÉ�(뛼(  ü\èØ“Çó÷$r;…çÝÌ댪ç´cÐö;)ŽÑòàÒRd> -´ÔH’<´óìHyÜíÍl›¼ïCu«¸²¼ ìº­=Ý]½mœF U ¶åèë”�YŠÌ'°bª÷*ìIýy:Vãï¬Å-À lpET&kòÐB9…!ÉÈ^¡·"3ÏZŽ*@{Oö×uO~ ×PkŸªê}iÞ—Y·G³•âTXÆ`¸uŸ5[Ì.sCD~^'žÁýŒb ÚÉZ»ª):á¤>…’Ð*ÕQXIY€y4å+¯œõfGLYþ´ ÉØZ‘ˆ¨ 箿ƒK7®U¾o¤ÚRic ¿ñFÖ5lrtßL9áÚæ+ׂ,Gq‡ŽãÕç^DöíE×vc/-¾¦ÝŸmÃ�Û?¼ÒÏŽbîʅʶ»tã.ݸôç¶*Ä ÇÐR 1¸T[µÇˆ;÷˜;h· ´|K'Ǿ+Z\Ò[ªÍ ¾?¶€í°’Ÿ§mDˆþÊÿ%6±%ïXïR²®Ó–\µ—¬–"óÉ‘ò¸ãÄ�¾®Ó¦—"óF¹1ër<þŽw—"ó'Ý–ádE ‡¿G§r’#‰íÞ†€žò]( IÄ.‡z˜RiuŠÓÀâ@zçÅà<( èÉf WŽ2Ú”Zzóz(�ˆˆ:'x'¤Údû :?ÙZÛÆQw Þg™-€Á¥@�R2´DDÔ¤ÓçÏV}?qè8býƒ.÷vv|îÛ(�»{¼úÜ‹H©/ëīϽˆûã7ÞÈ:>öóodpcz¶îu%õ¸ýÃË­êÒ�éà6•XßÄÂ@{Vê"½=Æ—‡÷œ,ÛŒ·Ùú&JQÌBË}ÌÈtrŸÓ²à’ÞFíŒÏ»—  †,Œ”Çë=·$#0·Š+Ë��~gÚ‹¿ò‘ØDY®""´² BDiû½$|„�ô¿!à”Þ2‚L^О³g|Ü ·‚Û£˜Œ¿Éø¿Ê [R´—w²BÅì²¹åõ†¶KªNY~¦äªÕxzØØï¶²]#Qè!üLV+@*Ä$üŸÇ´[ëQ˜ù¹â”ƒ’Á¦âÜ&!�’ÛÚÃ]DD-6wåBU(¤‘jK§ÏŸEþÖMÛí±þA\˜ø’»÷6¼~ÉÝ{qõw~ûf&mÕ|JkȾ½ˆWŸ{±áǧæqû‡ŸµêR¡¸Š¹+ÝŽ�¡¥Pá1}m~òl3Þ³AØßôµê�MmÔjYp Àž‘òø©BK€e ¬ªÚ’\ƒ”¶’�F+*[U—-Y„ÑRΩâ’uY~Œ”ÇgGÊã'Äõez½1j¿4$Q’È ILIœ’xfHªysë¡(—ˆ|*f—sÅì²(f—´`Œù‹ï™îd´E½OKË+{Q/óS}48Á¥`…–ž¬Q¸±T~Ø©»"˜ƒøÍá8Q“²oW·âª·ÚR¡¸êÚÎëͦš ­býƒxóë5—šìåE×J?ÔzÜþÝÁ¨ºdfÝ75Ák ´ã¡�ó“á\Z“¢õ·|[ßD)¡% Å­âàÜ/�íêJ*ž„ª±9päRmiZUå—"óTUß(ëU—«<–Ćùwh1¹2K‘y£mѪòr#åñ NNÔú»•½�WRJC’2Ô=ZX}ǨU©ôc¢ê}YwX“ZG@]Ô¿µ¾®¦õjbDDAãç³$û¯à…– `[êQBã7 T.¤1ÆJÐŽwKÐöy)%Ã/!%{»T~XäÐü2¯œ­Íëùå>Žˆ¨ ÖjK0ñµú*¬¸…ÒGFqtß�†×Íê辘8tsW.Ø~6÷£ ¬ºÓ!ÜþÝcâkÕíâÂPu‰BÃ+Cˆ`H§Ü“(íÈ£öó”Ü)»'yþS¯�h¥óÌä@§Ö7Ü>˜5´4¸4R/éá Il‡•” Jé *QÀ–¼‰Më�­Á [°jKÑ'âè‡ý�²*¸¤d_lM˜^ŠÌ�a»•œ­ T@Ô@Q¹£½+€60–‡ÞFpHöö�Ȫ˜].a;¼Òª`£B`9˜PȪµQõyQkßÖ ëóVwŠÚI<=œ0£k}þg‹Ùe¨^ᨶ¼ÐÀ ^ê1zkIãü¸®‹†„Æùãƒ0�Â*;Ý!5Á%j÷kDDM°†NŽî;€D|—ïß7‚ V‰ø®–IŒvVVsW\énÿî’ˆïBr÷Þª¶Ù·\¢æhã^xL¯Íiz=WI¨iYÞÌ�%ÓÍSƒKŽFÊã4ØþÌÛ‹[ .•Q–wœî_ 2«fÌ·—å*vˆ'D¬¿ŸXŠÌÇôêIJèA*£e^P;ˆ$,ƒUCRÍÎC¯¶d–2-+†à†ºˆº–NjõBA_†­r”ÎRÁuÒ\a•¢v°jЩ|®Œ¿Åú7å  ¬OU�Ç4Ë+ÜîD žÁÊŽ‡ ‚Z\¢!´÷àš»PÈ8œBäÌJ)C9HÓc8pÊ«¥Ó6áo’ƒˆˆtîú;¶jKcû¿^×cÌýÈ"ê¯ÚäW"¾ËVu'Ö?ˆ£û P\­ ]Í]¹€Â'öbÉÝ{qbÿẗ�¿uç®¿ãø³^ Íyû&¾v¼®°_ÐM:^\*Wqîú; ½gˆt~ŽéyQ¸¿ç —<¹– ‰�(&ÃXu©åÁ¥³—Ä Þ"®lýѬSµ§‘òxf)2? Ó ©”kØB}Äl¨žKúéá¤Êß¼"�„ö|©l#Uë±zêù&ê%Åìò,BšüõKaÇuò_aËõ[a•­1l·iµ6nß!,=•Pb =¢Ž vÛÑà†– èt ‹¨Å–œ$œBLÈ0ÀÔQlÕÔœ‘äg›#?Õs9ÉADÔ Ù+b»­Þp‚[�§•ZÆö¥�5$wïÅѽ�ܽ×ñ~O?¶/-¾f»=Ö?ˆ§wï©;lòò¾_è0¤�ŒÖõ8Ý$ÈÛ®ÿ.ݸֲu€Ô¾§º*¸äÔÞoöÊŸ0¸DÍð3®Áczç–¼°£�À’ÙB8÷öàRÕŽ@ ‰ lÉ¢õ~%Ô®Øs z›2Ö¼ƒHß m÷í¹à’Õ�Dꯌ¬µSçÀ5¬˜]ž0OÛª:QGÔ `©:x7&BO[—!-ƒˆüñšŒëÜqµ1X*¯vX ¨góø—º–ÐÞ{g  ¢´RZ€)à””’!™àáÀmHY€%4ßžZI{ë.ÄI"¢)Wm�Ž£û Ö?èû1ò·nÚ*65ò8õ:ºï€c¸Â*¹{/ÒGF‘½\ݯ´±†—_Ã'¾ë{™§ÏŸu -Ýw g«-}ûScœÚÅ]ºqͱ¢‘OÞóNRöt¶îIv PûˆÕz Dµ*ãðw�Ø,Z× ­¥º+¸$úQ–Ž%gkµw)�ç–"ó9˜6¶Ä&¶ä]hí⪪7q ¥5Üvê…!©æ*L½Ý´7m@^ÕcQðé•�Zup8 —–wÔ�âéáhŠFР¢˜]>Ö‘•" ¦ ïgйc{£UjFP‰¡ êzˆè-4ñÞ÷£oìiÈnC~ðÈÛ÷¼~e @Rq²ã­){ˆÏöWÜï…G@n?Á%¾WˆˆàT)'µï©ºãÒMçJ6ÉÇÜ+à´Û«Ï½ˆüÇ7m!­K7®!{yÑWµ$ã¾V±þA¼>úвu ›0ljÌѽlA½s×ßééêbÔ¯cz^ˆ°-�jA;’÷$/êê ,dÂØÎ,ìÁ¥ª�0)7!±a½Oa¤<^«Ú’á€Í7lÉ""�ÕÁ¥ O¾„™ÛNåŽ)…í�á¬hÉÎÂ�'™‰¨az¥ ãàs¡E‹1‡®øY1´h'žžÄvà¶êäF¯$FÔ :sª…'¼Jꪔ‡œ�cH‰z‘PÔšQ<ù(ÄÃý‡=ùé†bºþ1ä§¶ñCÀ»BˆSl×6~ÂiÜùx¯0tIDÔ˜Ü�÷m·Ý[_µ‚ýQ IDAT›Â'ŽÊ×€jµ×G_ÁÁùM”6ÖªnϾ½èÙj¬´±†çßp.Ìðúè+=]�& Û_Eˆ*ßU©8d5qèxWVJí{ÊÖcp‰šÀà’~ž‹z¼}¯– ¡ .-EæmÊ!´h�$O#åñÂRd>=Т)[CK¯0k•=Ðvì)ýߤþ¯Ê�¹ÓD¬¢ED!PÌ.çÐú–JF�ü]ùK­e|.:Q\Ч‡Sú2œ*Gõ|ùZjŽ^Y%¨šOøP‚f�'©Ç© -€xò+Õß›CL·ïA~ðl]ûøÙçN¿~F†—ÚÂÏy6÷�áÁŠK­Ãó."¢(m¬Ù*¨àqâä¸ G"¾ ¯>÷"^Z|­êöÒÆ^þÁ÷qõ·ßõw_Z|Íx€ûãÄþÃÊ×5L°ýU´ñ›»rsW.ØnOîÞÛµm�¶aþÖM”6ÖZÚP¥�(ë› Ätœ¿jÃ<÷ÝægΡgçí{5°dmp þNìs#åñz&Ý2Ю¼®ù†XŠÌ'FÊãü0PhH¨VRÙ^+1¨Ý9¹}xðƒˆ@1»< ´ü@Çíó[åçjÏØ6À8v"T, ž6‚p¥bv™Ÿ¹dÕþcj!fÐÚIÂhU•ºêÄ‘¨QzˆQMhéÑ��î¬ýó‡ú±uå¯j=Ì!DžLZŽB‰üñ:wáÅDD p -56yïÖ‡¶Û‚j˜8t¹ïÛZäåoÝÄéóg(sW.8¶ÔKÄwõt‹8C˜¶£Î]Çx´×À…‰ïtÝßk–ܽ×Ö.îÒ�k� ì DƒÞ ÛUú÷tt¥`µáºÜ“Èï(aûy+a»J}þžìÍóŸ�(&¡ÍÓø©ÞÕu�%C·—|U[2Œ”ÇKK‘ùixªª®D†$JP´3÷A)°^ˆéëMDDŠÙå“@U˜Å rßévŒ ò ×m2®¬°}Î݈§‡«~PÌ.+ GQ`ù™´nï1µ ´®E\À4«+mÚ{î-e�g©¶äd냟øy¨‹Bˆg¤”<¯ï )eOHö0^\àŒ!?"¢°†€ÆZj9U"zzwps¯�¾‚÷n}h«”½¼ˆûWUœ*WqúüY×ÇéæÀŠ_aÛþõÊߺéZŠõâ_HwýkàéÇöØöù[7\‚6¾j¾5ƪK�ÀŠKõ3ºIäîI¾~uc¨�}ÉA ,uõ8J˜ƒK^;‚L#U‘FÊã³K‘ùI�ÇO�W<…M­í©r§ø®’Êë_ù!É%""³bvÙ¨´× ÓÐ&F¬á¨v«\†Û�ªÊÏ”vT#tû;”°âéáh'îN-ZÕÍÏe»ONSP?qZ‚XêÊ+]ˆšt ßsâÉG=ï#ÿºèç¡bÐÖ�Ÿ­Ã0Y%¡U%¤úp<‰ˆ¨ù�íÁ¥Ø@w‡0-pòúè+øÆÜ·l?³¶Œsk—>2¨VhÔ¥�5Ÿû¶ãkàͦên«FNÁ,§}G€,À^9 Z7!êœ ŽÚ=Ù�Õ‚š”�s{¸ž,Â\ª•:+¡¹õ4€‹ .›‚)m°Çið´“³)˜v0+³C²¾ `DDÔ˜6µ#[€öùa¤ Ý2± ²ªSË+bûó=†ê|eôz8* íDÓüüô6‹dçyâÞ�j'^ýÁë5 -´¶JhD-'„ƒÂ÷œxt'ÄÃýµïô³Ï!?¸í÷!SBˆ1)%ƒ�Á�[êyz+M""j§_�T\ ££û }dÙË‹U·çoÝDöò"ÒGFqúüYÇvzÉÝ{[ÊQw©Zz}ô•ž ®9…³œöA±¾‰ü@´ªÅÀ F‚À{°Ú3yXßDn жÇÑz*°depi)2o�$´ÊŒ”Çž<)�ç–"ó Ð’ªN\ ™!-½9 +)lWáHªª†¤?®~(u‘6UŒÏ'kå(êŒ$ܯzPòzˆ§‡'±Ý’Ø|ìPjS O5¯×m{Ã>BÄà~|߈YHÉ`:‘¡½ßf”>¦º6qf3Bˆœdø°¼oyŽLäß+DD p d<Üÿ X“Îxõ¹qéæ5[¬ìÛ‹HÄwÙBMÀv{0ê~Ï¿‘ql§˜>2ЉCÇ;°F�áTqÉiß0 &±}Q-/Ä >Ï“_Æû¹çK†P—P{,?RWQoî­$˜` ±!Ù²7{Í×e‹–IDD]ª˜]žö¾u·ê$9(jgO'¡ßô–�­ä\j÷ñ‘ʪ -Õ6Å¡[…mâÌÐÖ••óÔóªºÇ°‘¿ñENtÕéráÇ:ÝÞ ­¯Ìþà× ¿÷ͪÛJkxþ çé³ô³£HÄwµcÕ¨ƒ^Z|ͱÚÖÄ¡ã=WmË­²Ôý§=úÿÁ×Ú¼6¾eÖ7ÙÝ%`¼Æy–VÕ&Ž¡%¢ôЊÒ�ƒ¯6q×>nôáÇ„1¶‹SŠƒsÝGEÀ�chvžÇ°RJ>oDDttß[u§j5A•>2ŠÜ�÷k®s¬¯�¾ÒƵ �°o³¹+púüYÛí‰ø.\˜øŽcÛ4"ò „Ÿó$Ž5ôˆ�(b¦ ]ÌÓ¿8Ž\‡°—ÜA•V)�—–"óg~Ì�8²š…6—Dõä¬ÊA&ëë.aºME‹D"""¥ŠÙeãs°•}™súWÕ@*û¼»2€å¢ïáÐ÷pk.R‹§‡g m“ª Åì²½jª6� âù�'‰¼¨ Vøj÷ÁOšYÄ$x>¥’Ÿým+� H%!TùùiDZE"¢øáþ‹¸õ¶FÛÄuC˜ãͦ°of¥�5ןwÃßÙ Ýò¼äoÝt -Åúñ‡/¤»æïTåÊÊ»&ïôjP8ø9÷åyPïxÕçx“QdX)Í¿°—œŒ½½›R#åñÙ¥Èü˜Ã2Y&›ª I,À4Aº"*Õ%Tr{¼«-Q¯*f—ÛÑÚÎ8É´VŽRùùëö9¯ò×íJ •ÇÑŽ“pòg_XojæïJÂùoÉAQ/ð³~õÐxüîÏðø§?üÛ_zôý…ôpÒÈ#";µÕ–|´‰“Ÿn@Þ¾×Ìbx~¯ŸÏî¢b{– %kí¼&:ð#"Räáþ_hè÷ñ]Ž·_ºq G÷hf•Ú&Ö?ˆ£ûàÜõwl?KÄwáéÝ{:°VáÐ Û?ë&ŽÏ}Û1¸öæ S ‡úºEr÷^äoݬºíîÆOÛ*ŽÇϹçn{‡S1œ)°ê’o¡ .-Eæ�NêKhíÕ‘ÓÐRrf]uE<©§‰T2µcB“ˆˆˆ,ŠÙåc�^‡Syí\ÚÒÃ?Š–éÀr;&ª{ÒõŸýÊøôÛéÒ÷¡ÕOÖûxNâéaãïȳËÈ n¡´‚ˆŸ6qòƒÛÍ.†ç÷íÇsØðPñžæövÆ�QÀ¥ö=…ìåEÛí¹ï·<¸rúüYÄqtï�¦Â%ÙË‹Ž¡%(WqúüY¶Šsöí_ÚXÃË?ø¾chéõÑWB¾" 9ž õˆõMÌD1…ísèÔ^,ÜõB\ÒÛ·ÅŒâe@>`z¤<Þ²�þ‘òx~)2? `R ï�$¶þíHy\eë"O+ÂÖþÆLÙߊÀh;Õ¼þU’ü`%""jµbvY@<=l­êÔ­'8í<¾¨;”àZ2¨Ü�ÿÄÓÃæÛ3mª$FÔ J'âû<æyŸ&ÛÄîaHjŒgÐEJɰfx¨xOsL¡1|ÞˆˆüÜzÛ{·>lè±Ü‚…âjC�W�¹+*�£jRr÷^¤�Œú~Œü­›È¾mÞX—“Ú÷Nì?ÜÔúv£°oÿãsß¶U€ô‘QL°8>?OïÞÛú LÝÂû\‰ç¾½fÀ$´Ž™õMVܪGè‚K€^‚¶Ág—"ó‰V´ˆs0 `ú×Ê¿ÉuJ­Á_Õ-d0 Þ¯@fH‚hDDD-Öâ6dFå(k8ªí­H8iÝñô°Ôÿ›Gu•«…bvYI[=¢VO> ÚÄ‘z¼¦hÕ–&úävCÁ¥Xÿ Nì?l “Š«8}þ¬ò 6§ÏŸu¼}âÐq_¡“ÒÆ^Z|Íñgo¾0…Xÿ ^}îE\ºyÍÜȾ½ˆ£{ÔUÙ©Û…iû_ºqÍqÛÇúñ‡/¤Z²øtã§Ž·mèÉ»m^%¢Úñ%+¾ �çCÄX2LDÙú­]ú:½D(®Wƪ é­î.®È�wWά̬¤ôVuDDDÔ%¤”%)eNÿšÖ¿NJ)}¥ÊS·×PüçŠâ?ÿSüû·~ŒÿÖ�ñÍ­|À1³ŠS+0®ªJQ­e(<é²ÖEý«OKÓ׌×/R%!…6·‰ã`¢:¬p×=Æ=ƒKÎM:î+ðÖËœÚÌ9í;Î\´ªK<'¢Ðap‰ˆÚÍmBKÙàõŠÀ´AÀ<€¼Â"""¢Þ¥âX@Õ$nW)f—�–wÔ;ؾbÐzåà1h§ hâj´Èßû ú°(»t¸—Ünôá­8 «–gpIJÉó³ "uW—À÷—#¡=Ï^Xq‰ˆ¨ ÉÝ{ë¬ ˜”6ÖP(®új¹Vëq_}îE×ÊF—n\Ã¥×�ˆï‰ý‡‘ܽOÄ­‡ ÅU|ôÉmä?¾‰ü­›5+€Z9±ÿ°çz�>Ö1„a¬¯×ß”>2ŠìåŪÛ�PÍ룯x.?èòßt|~ê´íïzJÄwalÿ×+sîÆû~ÿDWÝ‚r {%â»j†üÊ©º)òDJ .QÛèíçܨ”›„) µ"PÂvˆ©ÕUˆˆˆ(xTT³I@ˆ$¤äDb›³Ë9°µ[8±T —Ä“�¢ïþð…ãÏ×±_Ü^ƒüt£™õ3cµ%µ¼Bž¬²l3PYmIJnogœL""jƒûÛZI�»þNÃí¼ Fë­ÓçÏ:V8´€Š5T¯×G_ñÕæ+ë¦ã²Œ A~¸µŒ›»r©}OÕ Ï˜8±�AœØ¸îpXicMkÃöɪçãáósotžxäѦ‚i~iû»µ?,Wñ�¹o5µ|«ZÁ¥f_�Øþ—n:T[ pkD7ë›( D‘CuÁ€1§:´JDD kipi1z5m™‚6ðaü0ZQå,ŒnT6è¼½Ó—�4}¹-{vtó`ÝWüéŸm0vtó`CÁˆÅèU§rÜ5×Íer£›s¦ûLaû¹¶Û9,Œnô=H»½jÞ–Ö #b<®’+(õeÛ¯-ˤ–*A» ;íJ\ó{S夓õýnn™ADDD½FÊ<„PñH)0(ÓQzˆ©ŒÊQÆ1ªÏ3ê$¥Ì ! �‡Ö¥ïɯx?¾‚6q÷}5†Á“¿ïÆÓÃÖ×Õ´^MŒêw Ú˜�ù½d|ŸßOÁ¥µˆk¸RšE @FÑcõ*ˆš”Ú÷”-¸äTe¥‡ŽãéÇöàå|_Ùcbýƒxó…)_!ŠÒÆ~ã�¬ãÏÒÏŽÖ©Õ2îè¾¶veù[7ÿþÓçÏú‡•6Ö�}{Ñ1äsúüYÝw¯�¾RõwÌýè‚íþFH'}d´-•�‚²ý;­Ù×@'·¿SªÔ¾§|ýnYƒK±�(’ë›<ž$¢piIpi1z5 í*-¯ €fJ˜ZŒ^-ÈŒnl¸”´ä1‚:µJ/[—�Ó—]Ï@¸¹D¾Y£]Œ`�YµöÜÖ!§‡·.Â9Ä1`LÎ�¹…~ôǘ‚6xUëù4‚!)3‹Ñ«³ÐžÏ†%£Wgôu¬u¥Ÿu™9Ó*p¤Ö�¬„æªÞg+BÝ$àŠ@ î¯U¾6ˆˆˆzWÍW‘`…„.UÌ.Ç©@k+ðùÖ×’ªãÔZ¯QU•Oü´8´óbジâÉG½Mœ%mâúð€õï¬çáþ×¹†xzØìÛx¶˜]îº�ÞÎø»XÍ*,„0¿VU`µ¥Úü\XÅç�ˆ¨I'ö¶µ‹SÑ.Ì�ܽ&¾ƒìÛ‹˜»rÁµúN=ÒGF‘~vÔr“}{…âªíö£ûÔ]YÊ­e\ic Ï¿‘Á'¾[¹-ë&ŽÏ}»ò7'wïÅѽ*-Ù²—=ÿ†ÒÆŽÏ}»zIÄwURFõ§K7®áà¿ü&.L|§ÒÂ+ñˆv¿�>¹]ùÛ��Oâ‘ÖV[2 Âöï¤f_�Üþ¥�5Û¾ Ö?è«-c@-À~,?·QÈ(.éUƒÎ4øë gôÇ86ºy°®“tý÷fÐØ c @j1z5ÓhŤr -YÅà2²½šð{>'¡£¦ë ¢é¡·3hlR(àÝ.Û†=aH:öámT­×N×M ‘o94_I‚©azµ¨VUŒ2,[å(…„\�·Í±¤”!Ä,œ/´qdT[Š@ºÞgëoª¤MÜŽÝý1€ÿ®éªÍ\ùµÞ‹”|‰§‡ÍU˜­¯¯¼Ê#r'D Ú8Œ’Àž®á ©‚ãDD XÛÅ-©Tbýƒxõ¹‘~v箿ƒÜ�÷+-³üJÄwáÄþÃuVÎ]ǵEÜ›/ø>¯âÖ2΢a¨ßx#‹ÒÆbýƒx}ô•ªç³P\Åo¼‘õ¬DôÒâk•û8Uʹtãž#ƒÒÆ^þÁ÷qõ·€VíhâÐqœ>¶ò÷›CUíÔÉíßi;:¹ý�¶‘Ÿ¶ŒAµ¾‰Â@Ôv±ǯˆ(t”—š -™%\\Œ^õ^ZŒ^=5%­§ôÀNÝÁ© Ñ+ù ÿ,8ý�жe Z ~ÂKzhé"š,›ZŒ^��nd×ÞTë€LYÂ|E@b{²¡ ¯8€EDDDj©.ŠĤd ¤bvy H)§…VÉÅ× ©øj\û·Æ}Ê© Ú°ðÀ׆n¹ýPaKÂZ·ªPB Ûá0ë Õ3PpOA¸[èu%¿ãG~ÍB«¼Eî<+@J>‡DDJ¤Ÿµµ‹[¸þgÊ+«Äú+� @ ]ä?¾‰ÒúJkUU‘ñ]ˆõ"¹{/žÞ½§®vnf'öF9ûÇJÖß̈¸™ù¿3þžô³£¶ç2ß…?|!�}3î§ßù[7+á‘û;¶÷:ºï^}îÅJÀeîÊ…†Ã%æ`Ë—þ§¬¤:’Y'¶?йÀÖÜ• hæ5ÐîíoåÔ&nâká .éP}>˜ˆ"¶¾É*žDÊ‚Kz‹6· Ë´Á2ëWRÿsø£LµgøD鸕LË7Ÿô§àÞŠ¬îàTÀÄàRÆ6¨½½:÷mÙÈóyf1z5_«…›GhÉm™Æ¸Ó`ð¤˜bx‰*†¤²vtŽWM¯h3,§†dp&‹ˆˆˆ¨BUa lD=¬˜]ž0m ³x9 ?Õ€+mâjSÐ&.mœ¡±ËÐQØ&Î5¡0d4¥!ž¶.£VÎŒ‚Nˆ)¨¹Ð,ã}—žçuÁ^Ç"‰ˆÉh?en uîú;•J1­rtß�Jûªnóö‡?Žÿw ’$â»0qè¸-4f0W¼q ­˜ÿôù³(m¬!wã}%ÁÕ¡%'ݼý�êàO#¯�NokÅ¥û7 §s¿1èÂ&""/*+.9 ú圪XÉ5[’Mêm¿\ôô��Û€c@Æ%|”0]£½œïàTY�òØþƒËc`Ý6‹Ñ«F‰p' жg­çsÎÛã ´«=môeº…–fL×XfFýœ�}Àvr1z57ºy�K=dHbÀôŠ@ÚkÂHªÄvtDDDa#e BäÑüqÁ„H°šõ:½™g PJYBƒGxÉhŸ£_@@ ºmœüéÏ›m—pLJY²p¨³âéac,¡Ë {1»|¬#+Õí´jh3ЕՖüñª¸ÄÊfDD M9Q\´àD˜[CuÒ_Þ^yÐÂ9µÂ_ÉÝ{]ƒKù�µa±þAÏÀÈÓ»÷àÒ�k¶mØsë².ªtÌ{·>Ðøk SÛ€ãúLúo•[ù¿if5rNJ)K¦ï Ð Ž|¶¬W<=< mÿ]‚傽’Xï"íBÕxá˜?Æódì{Zòš'""�QýÆ|Ⱦ½ÈàRƒþæ^q€gŪZ�”�>Ѫ¨–6ÖIÿš¯åª¨”d®´ÓÍ‘ZÍh×èk SÛæ~T\ê²êX ¨îp4†çø×sÀŸÛþþ[¯žîÜúQë\{øîéíïíð›Þ¿§$¸¤W¼±Êù -F7æ£Wga@Õ@œ„óUJÓ~/–eƒ¨Ö@ \*…@¦VØÈZÉJ29Ðü„–L�kTA²¾.R°”%¬±ÌL�Û°¤oÃQ½ cЮÚì­AHj5·ý’²+KMíèòC’e≈ˆÉAM{¨I0¸DT=0ôŒÂ^¥×g›¸­k7ºøŒ”²êœ°˜]ÎA] I7}~ÛêQk%àQ2fOc!N•£‚t‘‹SÕêf-@Ê ý��eÝ„V+Vr&"RÎZu©P\Å¥׺)°ÐvÍT,2‚/픿u³ªÚÎØþ¯·}ºM£¯�Nl@ ®Y—=uäDGÖ¥Eò¨.Å¢H­ovþbûkï¿ûòö÷ÃGk‡–¾ûO€ïe›_îðÑíÿHjËü•£ÀÃ^�›»Ÿ[uø\º3ÞßË—´¯½§ý�_õ…PYqI…¶C,yh=µv¨N�—\=!ƒ)8e�ÈH.F¯¦BZu©ÞçaÌá¶Käf`[Œ^�Yª9mØÒÃKÓ°·ºƒK¤–Û`·Êrî)èû£QôÎC 2ñ*V""¢FH™ƒ%Ô¨žèSB¤8AKT?)å´"SpÂÜ&Îõ÷>¸ üìózWpJvè½ZÌ.ÏÂrñN ¸íÏxñCgTÎã ˆ§‡ÐÞ;¥bv¹¾sÐíJKª+ü «¹ÃJJÉqDD-âTu)sùƒKM0Ú}5"ß…BqG÷À'¾«p­œ]ºq Ï¿‘©Tíé²*;Óèk ÝÛß0{åOª¾ïÂ×ÁìÝpRhý;ž~÷¥êï¿õj{–k„&¬ÿ7ª¿˜#T>·êtësù­W�åƒÚÿ?-iáÅsÎd+úZ¸>)—VdµäìÝ<(F7>3ºyð˜[Õ�ÅèÕ$œ¯kfP0çÁ½0–l^h =šSpi¶‘6kzÐË|…XÛWšš9—Z¦Î)Бp© FÔ¨ ´×šõ*H•WEš¯È6Ú%LÁÌ#""¢ú¨ «¨ÜDÔ“¤”9)åhA‡‚¹Mœëïüu±žE�¥=� -µK1»|ª˜]ö8fùRÅ­Z”Ê�…ÛøXv“Ð*†¿OKóWÍßÒBK¡~Œ«à$¶Û0Ò«¿úbÕ÷—n\« 2‘?O~e÷=øtã§5ïW«ªÎ�hÕVß»õ¡Â5s÷Òâk•ÐRr÷^¼ùO监ܽ@ã¯�voÀùýþúè+m[~;¬o¢ûUÇçF¿ûO´j+†ßœè|‹¸?>œ8®}™×�šÇçV�°?—ž®n·|IÛÔ¢*¸ä6XõV=á¥Ñ̓%kû²«�nlx"BË8ý¾Ó²‚®®Åbôª[éúfyOÂD«¬—>sº:´Ùmè´Îÿp¦î1$1=$qrHbÏ�„€6)0 µWS·cr€ˆˆ¨©ú¼NAc5AJ9»ã÷RÏøj÷ÁOü}`–¿ºý'=þéϬw�Eƒ!ÁxzxF_§ª+k•ŠÙåL#�IDDä%ýì(æ®\¨Tß1ª°tY»¨–úÇOßþß®þðq8}þ¬cõ¢ü­›˜»âÞfâkÇ‘½¼8ýžÅÕ}¿ïx¿ìåÅJøÅoÈd§@òž¬>†<ºïnLÏvkP¥íNì?¼½ýx ´rû;±V[JÄw!ýìh�ßµìÂSh} sG¿ûrõ÷¿9|µc1*w¿û²VÑæ_üA§×¤ûð¹U'ŒÏåÃ1í}o0Öj§$¸¤›…{U›1ýëÌbôjeP±™P œƒK*‚ÜÅ’פD½Ï…ÓV«�ôT,Óéogp‰Â¤Ö¡›²ï�·ôÇ+ÈÉÐM 5jjÚ¯jU—º¼Q‹yW8Žîø_œ7Ý’gH©»³ËíH7Îw¨}ÎÕ=„Hx ŠÆDnÜݨô ܬþÀú=!¦ ?·u¶fLÂy1­¢WÓâéáIhÛÚÚ6£Ô¦@L¬¯�¾‚çߨþ¨É\>ÇàRþöÞ?FŽë°óü¾iq,1 ÅG‰}› í–�Í3§æÑ¼ËÁã{N ÿ¡ÙÙ\ß @ÿ±ÛB΂gfuðí!ìéñé'#P¦%ÿ±ZÌÁ`“¸ŒþXœ1Í»Œ�6ÃŽÞ=8[-sŸ;ž¢…’‡œy÷ǫꮮzÕ]Ýýª»ªúûMöôTÕ{]?Þ�ïû~?�ÿÝ¿_ùôlüÙu\ûÞŸãó×ÿ_ýÌçÚ.F7~p»«~uäç>wÍ¿ù!þëW¾„?¹ð‡]â”�?»ÞvÙ±y´§ÐdãÏ®£ð�>æD�}¨Í<EKæp݈=âüþuß³ßmÉ{¬YãÞÇga£{þu"¥ׯ)§—“ð…Ý–~þ`°Ïßi?z ¸ÝT‚�×{˜ì½ö pê£Às+£cZaÝšƒuÙ;¨Žû®3Š·{Cý,œ~Ö˜péÂÁÙúõÙ›5ô_-Yp~V¯ÏÞtc½†qc2k¸pp¶u}ö樛™8C¸éDDqë¾ÃâõÙ›2†}…­z$$‰ôŠ�12¸º'`Á7I´'ÚÛ¯ÍËÉ(ð !„�1Q‡á@×%B†æØÊbâ£ü2…JdTö7v×&} cEˆ”Ó’Ññ�FçõCþûî] ÷ŸM¨1%¯›’û§ã–.ŽZÔ¼?0s+ ¨:níoìN6�BH$.~â÷qå“OµÝ`nüà6®}ïÏqñ¿?á#K+ÿônüðvÛUç•ï~ ç?~oýâoÛÑaÞ:ÖñÕÏ|ö{ïâ•ï~ 7~p_/£ð›ÃÉG~oüÍ›mW,Wlæ¤ä?Øù¿+pQßá*±��QÏ�¸¾¿û“»ýöqúÂ4\ë tÏýôšoŠ�?z¡ûÿ—¯tGF�ƒSyõã $îÚÀ׿ÖíþâåË/§ zAé†ukެ×e˜ëÒ­¿ ~vÆäŽ/œ­`0Õ¦;q¾ `ÿúìÍ�ë³7Ë×go&QdÂÆ!d,ÌK¬8 µÒ´g°× +RØ=Ít%„B²‹š05%ÒU®K„�aˆÒÏ®ßߨ¡h)á!ÊB)„xS±#„¸*„Xw~ŠÎOæûû»‹û»ÀPÂ÷g¼¢©˜DKàº)•¡¾«ÎñìØBÈóö©ûCyïþœPNQiaª\oέ,HÏÏΤŒBH8_ýÌ纄ÿêßÿÛ¶P‚ôÇzäQÜ|îÁʧ/t¹ì´öÚš”>ñ_õÝΟ\øÃ.QJóo~ˆ?¸Ýþ..~â÷ñ­+¤š\ùäSXùt· �ówìŸ�ç@Lß›¿yûØø¿®·ÿ_øÍ�e9"ÎK{ÁÔüÒ¥qÀk¯(nK&8i_úŠŠ© Q=ÿldžD‡ukŽ,Ö徨]–;-uŸðc2*€/]Ÿ½éfh*ö):?ë×goÖ.œ�Ôj¸‚�›¬°M"*Ž‚#P꺗$Sôº?óÚ'„2 ÔÑß-6*ëP¢cBÈÜߨ©[YœCÇEGG³t�÷¼úE'î²çELÉ÷é8ïÄå¾³5Få¯kµ¿É‹–"!�ŽëÞðówŸð¦ãÞd£Ó?õ¾Úl)åTô]TÁÈ»æÔ9‰BH4êè3¾i=ò(þÝûücßûÉ�NºïýÃÁ/j=òè/c?ºôӮ߯~æsøêg>‡Úw¿uÊýeù“OÝqÿ}¸ñzß�]ùäS¸òɧð�½ÿ·ëûøÌïœùéo>öÁÀ÷ñÚ7ð/ñwøü:>‡ÿùƒŸÃî+G��ïŸÆwë„@á�Îà ÅÐŽ�×^[ÂO~ò;}?÷ÏþÙ7qúô�¾Ÿ ·ßu}�z úý{ñïÛ»_øéßÛ»_ü§Ú ÅO|ø#w­G}»ç)ÒÞg©hÜ;ˆ­?Ò——¾ÖýÿI¸-õbá¼…Ïw§¥Ün¾ô•ñW`Ýš#Ku©s]zékê=/Æ…K€Š�P¿>{³5ðXBpàªT”\Àâ€r&HÓÊ®8IÐc„2/�Æ7†Þçæ¥™†ùž€eø˜ !„sHÙ€º ÃP€«�2�ƒ¡„LÇM© vleÑueöÆ;Õ'ulÄ,RÊ´O$‚ý�Ýð‰XC¢¥ßû黸½Ÿ¾‹�|wVC‡?�ûù½wÿo ñ>ð¨³�¡ÝÉs�=¢}_¾ÿÀû_ �{Aày퉦ó®*�ÏÉ?ü/æÄñcÃbÑ �0·²°õ}zãý�Ç(yBHÚˆtß:7ÿ�qnþÇ},Y$P¿åO>5òF£~ÿÝ3:Âx‡Óþ�ÐÝ.H§Ð÷sŸ«x³ïçÖÖÎBÊÿ&þr}�zŒr=†íûÌo~ìOÏüæÇþt”ãJ#÷”ÈRû÷»-Àåg&s,½8ý¤}|ù…àï^{%èC¢Ãº5G–êòò3ÝÂ%×uÉ+^ŠE¸äráà¬ë²æˆ˜ŠžŸ(\…¡ÜùÐ d}€­‰à÷2 Wu‚N[„LaÌ&W¬–ö6¡:‡Mçµ 5/'§ö'„Bˆ2TûÑuHƒBæläW!D͉¡#„ �OÄ”P`L\jZÀB ¡žÃë0°í_û-ÝÛ6€3�2З�ÈT7zÜu„Bž³‡o¿‡Ã·ßÃC¿ñ«w†'�î¾?Ì!kÅMa¢¥û?ø»G…«ð¸8ÉáŸßaç¾É{×8†¢Ýq[? Š×�[Yð·]ìž‚À#¾FçþÓvs 7…·Éû×8…íÃd9Ê!ûiÀТչ•÷\j9‘�„B2Æ;�¢ïÇL-PJU¨gh¿¶RÙYLÅ癯_ º-=}q2Ç•/¬!@Ð ÆûþÍ:�ÓOWÖÛo¨zÓ‘–°0­[�«Ð§Î+ñÛ(ìÞPÂ/§>šÁ0x]º¿Ó�«&¹üÌ`ÂÄËW€çŸíüÿNK�ÿîµ36á’Ÿ gp:ÿ×go桼aß"‚«{t # —g(ã˜`ŸdcJW¾¸…`:—§l(á I8óR ½êþ;–�OŠ–!$“ôj;&yÐФëRBÔÁ8$BÈôѯ/Ïö‘‡r*�{,¥)GŠmŒâÂ(Tyò莡ZÜdíÛ€Üo<Š™‡;îK‡o¿ö'º(¶¶ Ì7Ùð85Y_üÔ ‡”dÂêÖäµ;Ö-÷s+ Þ÷kû»—BHvè·)B ÿN\ÿ¥´×¥õ>Ÿ´ Ú-|Þ‘‰ñÚ+Á÷’.\Z8t�Ôÿï´‚¢ŒÓ…ná…ËIKmgPw©ç?Ü7 \vÒΠuû£VPĵÛnŽv¯½ÜnÚDaƒÖ% Ê¬;™äS:ªéDh¯½’á’— g[Pqr5¨¦¿³¬k€è&j´Ûp£bãúìÍI'êÊ—¿>{Óºppv¨AŠë³7Ë@;&ªåqÏÒm—Â%Bƈ# j I ÖyL‡‘BHBˆ(mÙdºm˜u]Ô`âCÛ"„�´Ðï9À>€i„(A�¹Ä=žT�”F¢Âú!•C€{®h…RN›Ã;rŸÝ®ØI'<Âáß¾‹Cs‡iyö[tœ£�ûУè ³þí»‹âk¢€Nû'MQºYĘkneA:ÿlú¶[ßߨ˵B!D»(Þ�Î!�HYuÚ~ýæÏ¸˜ŠLŒ;­ Hbá¼ô$�§/êÅC»7€Ë~áÒ“JTôÒF÷ûwm%hºö­èûýò úý.œOŸ°&ŒAêvá|P`ÔK˜…;1�.·%—Aê2©èââvot¾c#Â%'öÍ8ÈÈ_88;ð`ý…ƒ³­ë³7× ^¼ènkºN~q¡�» Í{ãxÈOT°sáàlãú¬V²XDÈ`Qü1QE8Q�ºzµ®ÏÞ,]88;ôJ¾ë³7W�}µWÀ°—/BÈØ=]7Œ Òî ”áØøÏË„NˆBÈt�vñ¹I×¥„X…”Õþ%„�ôã¸äôƒŽK&O4œ NK¦qâÚ¢DÓ¹ÏuשÉ6y…O#sÿŽÝõêáIç5оðDéºÂ7ž®íæ$»'Ý6…{ü.NÿydlLbnea'd›�ý�]ŽoBˆjôk ¥}œÂÏ€�¾Ÿâb*2!¶5â�O�ñ5.Šú˜2�HP¢¢ÛÍ Pk÷†4EqKr?ë礼ørÿ¿O ƒÔíå+ê³w}]«íkÃ;PéÎ˧/¦CPçgÐó4©,ƒÇì~Ç# —§ ÀÃòúìÍÂ�.EQ;Ýa�´U¨øÀ8‘u¥ö¥x²ìIˆÏ¨#Xþ†.éê²ýý^88Û¼>{³…àj¸ò°ûtÎÇUt¯€âs”!„èéÕ14)0Z…sÙSc¿ gû­y™‘5„’’+05ﺴê¬rä„"!dHÉÚ¾ 0¾h8À"Rì äþD7y�šünNqú=jÄM®À 蔩 ÍdÇ�¸Û8’�ÄBÑ÷êÅÈøæÜÊ‚9äwŽjíoì² KI4ïH4Nˆ¾Kœ›9Ô¸E jþ¬\LE&·5‘T )¹ O?©ÿN�Ñ‹/ÅOE6_ÿš*wØ6õ7Ï|6|»Ãº %‘Aëöé‹ÁÈÁ×^^¸¤s[ZJx|aƒÖåi£§òG$?—¯è£ßúñ©óAÑÞ름KÎÚ×go6ìl—1\–ª®s9îLºÉ…òõÙ›Õ!]—Â2bµ"Gx£û•× º/ŽØ¦_cc4 .]Ÿ½™wâü"ãÄÄén­þº¬#¨Œ/^Ÿ½YÒ!É-õÛ/!$^šP"Rw5kÑ÷»‘Ùí³^Šº»B‰Ÿ(CIwÛ0éºdAM,s•#!dˆ"ràB¢Q¢ 5n·¨$õ¢¥¨È1*B¯c“;öé}�ûûÐ 7·ÇÑ�“7b¯Ë}@KFRïoì.Žv˜½™[Y *y„9•T1ä¢`?s+íéÊæþÆnÒû„�ô¶ø¨éùÉU¨9¼~ÏÕUQƒrª$$vîÚA÷! ·x'i,œ×;(…q*¯œ—ž¶ûý»6ðüç�†V> xþÙ à P¢�§S*ªéÅ u{ùJP¸t§¥z=Ÿn¿tö9i¥»Ž©Kqƒ¯½ü>õ] »}�Øéöêš0Õ@—®ÏÞ¬ á<4ˆã‘nrÁ°s}öæâ â%Gh£Ûw­�hGç´z}öf}€ýo"«™.œ­91kþò\¤>=®G~jšmT¡D[þò_½>{ó‰¿Ãô0.2Væ%Zð‰‡ö ÎïLÐK/ÌÕ�„’<’}o޾z1*±)�LüBH‚ÉZ G²‚,�cÁÛÔˆ–¢"»ëB;¶äÄ%ºci^'w±MÜk¦uû÷à‰¡ó¼º‚'[Æü�;¢t‰Y\Œì[³]/FÚ¡s+ ½¾KNi§4Ì­,x߯îoì²�L•&Ôs¯‰Ž ã™áû±”-gÜ¢_Lž;GÇ{- Z·¥”ÄÄ�Âå+J4âwõ¹ý†ŠôÒ ;^{Eït*Ÿ­ˆ¸a9ý¤úñ Ž^¿6¸pIWÏ—¯ lÓÆëׂÂ<@�«×¾5ZÜžî;þö sÂ¥°¥+ ŠÔí! s{s €ÖýèúìÍ¢³ß°áZ„ˆ´°UÙe'¶®ëø�ò–t²5å+ŽëRA1UÀ-§<ÚNŸ#<Ó96êû×Öå…ƒ³kÎ>ý�±ö>â|åqwÒ¹6êüad!Ù$ô~鈤FfO %luÀšóÓÖ!&„�þôkæA´HiCˆ*Â#¤‡aŒŒ#$*nŸ’¤ˆ—_Ž´,ô�û8RDqE8㋆\ÁãDbCªºuÅ3¡"!„;Fé�¡ó žâ$Џ©C‡ŽP¤-x’:�W§¾u<"^wiÿ8æ8Êmj± °Ð[ŒgJ€å݇FÜ÷ÖUç¿þãnÄ(Ä#„ôás®þi¤�«]Ö¥Ý9EÌT¬ut?3ZG›veRÇ3ŽÏ‚šó-8¯ —Lîã¶æÉþØI“{ˆŸ0!Æí7z»G�´”èèâSÁßù#ãÂ"âž[ɶCÕ u{ùJPàu×V@Q…G¯_ ŠÉNåÓ_¨cØótîÚê|Ö�«¯~ÓLêÊq»iÎq èĶù; ®°dÕqGr;¶@§Ö‘±¡À¡8¢©EèÝv\G£Mgßî­³€þ+9kaßþ›×goÖ¡wM*@Ež�N½wàÁK j…÷UÍïÆMªnüßKª.ÝI|o}†• Îö³¤t¿Cݹàž?Mtl¬Ýó¦W'Øe„d™°{¸ÉU$tßkV`O à’)�!„d€~ë¨Ò3 (eÕY½hjm#ã!„Dg¼ÑpEK‰ÂãjÔKÜäŽÁyÇ6 ž×¸ÅnacwÚ§v ‚nT­”8qØßØuÇoãÄ+ÀʪS�©ûM¯sÝÔ9V@¸ ÏˆhÉqÀrïùþm6Q!„tPQ÷º4?EQ‚”FÄœ!`‚0S±ªG›v*Û&ñ÷-J¦]—²à¸4 ç•øè¥�î÷o¿¡Þ{nE qv5N9§ŸÜI(뜴”@Éõ¶{#ºpIW×—ŸýزN/ÑÒ‹/›GéÄOÆ—€väW/ñ 0XgË)fÎ…‰—¼ûŽºÿµ]z„>^ú l.aÂnK.¾K×^:J}FRîF<ú •¼4TGHv™—XÜí{¯+H-À¬p)쾜Gš&á !$~úµcÓÖ&[C´Õ‹QY… ŠX!„’QÆ P´”Jd„È!„+jò.u_Ç˩ۇ_Üä�Mô¾Úì(åÌ"û»ÞÈ;2¸i@ÐyrRŽsTˆ5®‘2^*ÞŒð¹ur¡K;3+,¹¥Œø…É“Dצ*Âày¡9d5ö,Œ/}ØmE\_ÿð‘|PÔtb·H�%�péõkªžû�[wm-§Û&éÍ3ŸÕ Ÿ[QNX¦ò;¦¥ IDATxLóÞµÍ:.yÅ'›Ð;E¥%:‰<)숗žÀh«ÒP¢¥�:Æžr_Åà+a.9ÛHÌ*GðsÆqWÖª¿ÁiÉô>åþMHÉ󲽊3®ÎWØ„A‹qq„¢p&Æú‘.±§Z½ =,W!Äœ&„¢EˆQÇB…¢¥ ã8¹í/mY(w/ �+vêå�o wa¤wÿÞãsÿÙŽ¡s^Ûe“……#\0·²à¯û©ŒM8 3æVü¿[¤˜‰�"eˉºï×~ÌÓºMØl Ù.Õ¡æí½.ý›¯âãº÷ÓÉ5 /þ P<ÛýÞ]øƒÏê?ÿ…/ªø2äé‹J äŹqqý4~Á“»=Öuož6Ä©êŠyW°0ç&£Â% ->¹äˆpJl°¿Ñ6TCÙÙwåúìMw’¡„h.F#í׳ïÅë³7Ýýö!µ Ä5}ãè&É…ƒ³kN}®"Z}ÚPõYDx²O·.£ÜJFÞ/!„h»—Ès\£\!„¤‘¬vûÖ½? j¡WÐBé Dj"aœÏÓ:€ EKÓ�Tß”h:·_ìÆÐ¹1uã7ÑÄM®S“O×vs¢¸©71 V¼ÎQþïŽãÄÁ¹®µþójÍq#„˜¥ŠhsheQ�æ¶ßLŲn¸‘Ÿ©X…£M;“÷©{°�Ï¢ Õn«C=£�-ÿÙOñ¨©mM’…´N‰Ærcß¾üBÿÏ>}Q¹ØLÃÖíå+A§ªÝà —LEœM穎—6ô.UãŽ24.\rqD@ (!QÝët:’ÐE4¤ÙwÊ&ÑÝ·Û9r;×Þlõ¦IgGˆT»>{3ïì×»RÉ-sCçêäÔ�ð¿ßgÿÍ 8B o}z*ºêÓÔ÷èìs ÀÚõÙ›Þ( ; ʆú9A1Êžè9kr�m@qO´V›Îö›ó’+ !© а'}m5)mQ�™¢È•Ž„BÊífãuY€*ŸCãG±ƒNäxªÄ5žcë%nrÇ ½q~7§8 í¿{ÄMÞº÷Ž @SNñdnìoìFÆ�ˆ 5iÏSã6Stc ÿuo¤çV P‰@pQamc—¢82]¨q‹*‚n:~,¨k§ÿA%–~&ed»~.Ý; p¸oj >·|û†Þ¹Æå¤¼ø²™ý¥�aëöé‹AáÒë×€;­p÷¤;­`ÝŸ´ÌÆœMSç©—×^Ñ‹íNå�kßoìclÂ%/ÓØ™Ô¾áM¢Ý”†aõ鈼8yO76Ô}ÜOz1yOr·íÚ仃; Еƒ’ƱÒ~2HY‡uŒƒígB4!e\1§„B’Ž%¨ ¦qNˆ·\‚”_™ ^aO!DCJ™ÚþŸŒp^9ñÂ~§&ïkÜ׃WTåÒ:§¶˜Ì÷jh9|$!8>qßÓ,¨ñ™€Ã˜A·ª^â>Sç\/7–4‰özEL6` ¾æVòèüßqÓå’¤¬9mË~Ba×uiZŸeýÆuJȰp)NÑÒwÿ�P¸4ÆÄýè­à{ÃF‹½úMà?ÿíî˜3ÿïÇ)™4ÃÖíé'ÕÏí7ºßß¾îVµ—Lž§€ª[�hé¤|cçéX„K„BHÚp¢ÛÚ�•=ÑvÑËÃÐÀ˜öèç„!$K¤ùžV�4ÙUÛtÄKÓ:`H!ÓË_üųn~Q`4Üäé׎Èüwãˆ~ܶ�VÀ-”™ß©Éí7ë„G¦é%Šè%nj»9Eq‘ô°¿±[Ã't ½v F¸õM˜ÚÇ8XtD�~WÄEXÔ=·²Ð¾×Å×H¦‹*¢9nb ÊÎT¬<ü‹îÄC€|à}Çš©X¥£M›‹Ì �6QÎ][9õøùÈG‡ÛÞI øÔy}dÙ©|:…]Ã2jÝ^¾<ÿl÷{¯÷.½öª~YÀôyzû àâSz�ݫߌÿ<Õ‰Ò(\"„B"0/cq›ë5àÂÉlBHZè블êè�x"ã,g{g n“BHxûíŽy�k�²Úÿc$.§¡~°ÿ‡v›±g¼˜OÜä:5¹Â¦€+N D7�ãOU4 ?û»kÖ¼b–¬aÐ¥h¬^ß�©}”áDÞÍ­,ø÷#ïÈÀHÙˆè]„ELßs(7óðGqôÞüo—"®&ÙÆ/žp9=äSù¥ ½h P“/¿0=Qq£ÖíӃ¥ÛoèãâÜ÷½dI(fò<½kÏ^/Zzñe`áüàÛ4…K„BÈäÇj4ì lB –6c`BH/Ò¿ê\EÆU\q; ± )3kEN!d¢0.9Äí4UD7€ÂëØä~~7§8 ݇GÜÔŽ¡CÇ-Æ-S3Õâ20ޏ'®1›B"ïHt °B½HL‰–æVÖ¡ú¯^—8wSç¸3%¬!ZÌý*â»×$•®z3cföÃ�îBÞÿy×çf*–u´ióù;Çïúß X$•oßп?ŒàåöÀ׿Öû3¯½¢„!YŠ0 cÔº=i)Ǥ×^é~ÿµW�/}Å÷žï3°”¡:6yž^|J�>·2>‡*Ýþ)\"„B&Gèö¼4GW„gUÉžmA Z¬9‘x„2 ý&~²2àS…ì29ùX†-:aB1 £á’E”°Œi›@Œ�(®FB¯c“×ÅÉ}�;èD' i å�S;†g®¶àI2z˜DÀÃôŒj4€÷š£8*9x]âŒ2·²P†ê#{ïOÚNbdœHÙŠ¸àjª\—f*V`G{\½>tÒ/\Ô9=±ˆÐ4ò»¿‡¿úîŸw¿§sqI2Û!îHŸÂu&ÌÅ&ð¹gÕöÓ«7(&êvá|P”´}-(\Ò¹\]~&ú~’Ž©óôùgõ¢¡ËW‚u:n(\"„B&GjÀ¨àù±`vÐZ7Xä®8­�‘„�øÉÆ}¦·cxËëŽx‰vä„ @«ÕB«Õ¹½äóyäó45!ã¡Ñèn® XV"FœmU b'ðŠìv$Ó¶Åœ¨? �û¯›S\ô܇#nò:ª¸¯mÁ“¤óû» Ä/Âl�ÎQI"�pQ”áÒÜÊBÑÙ‡Î9j*„7R…ZÀÚ¯a:M®KÁX×ÙfŽ=Ž£÷ßäï¯Ë piªxýZ0^ P"ŽAEE_~A/Y8ìúÜrîÚÀ3Ÿ®}k°}¤ SuûôEùæÝÖ�–Ú¾ëZõúµ `lá|0N.­˜ªË/¿ w¦:ýääEK…K„BÈÄp\•šð �î‰öà§)z¹:MK•Î*õ~¤l�U¤lÄ›Žx‰“J$S[Y\‡#ʾ¿±cLœgÛ6Μ9Ûã࿳³cD¸Ôl6Ñh4ÚÛnµZíí‹Å$ T&ËeÆ[¾F£�jµ£ *‹ØÙ1­k˜&”ËŸ%é„ß[Bq�z:Õ!¼" w‚ÔíÛ�C`áuT NÐv¢éÚ1tÎk»lQª™4û»5PP0mÞÿ!ïÄÜÊ‚+µ÷7vÓýCK_ÑŠäw—jœïÏ�ü �B¸7oD�ÛgÇ�7Џ©Cç¼v¹9ñ\%Ylj8[óˆYâ l»Ùp+Ne8⨹•…®_ìoìG�)«¢Œþçoš\—Ê0$vÝ–Úÿè$Ð-\†&`Èm,M\\ÆOŸý\ðý½•|áÒKzÁË©¼rë‰Ê][Åoéxõ›Jò¥¯»� `ãë_ŠÊñ&K˜ª[—ËÏE7¯_^|¹óo/'­ì—LÔåî ý9zÒ¾ñÍñG†Å)R¸D!„d›°Ž–±Á�=�u¨dÓóÓr¥!Ù&ÊDï—¼‰h­¨ä¡bèÎÜ&!ãØÊb Ý׈Õ^([YlA‰˜êƒŠ˜ªÕj ¦k}½ß‚âÞÛ«V«=E/~êõ:êõ:ŠÅ"677Q—岓-ŸeYX__G¥Ré:×ÙiŒØP‚%ºO¤›,¶•ˆ�«Q/q“+jòŠ& ž×¸§zÞÄ�S;†�±·L-Ç¥Š�T³¿±ëu[3MJtìG™Ü_صlR¨¶“å»ç¥JD9·²°%ÒEÞ-ưË*€Í>ŸI…ëÒLÅÊàsá̱ǻþ/Ž=1óäÑû&6oÍT¬âѦ�è:�ƒÓO9o'ü*½ý† éxmëùgõ1^Ï­t K^ü x¶û3wmàùÏ�›ƒí3ɘ¬[—Sùàyv×îzüB˜§/Ž_Œ&êòö*–PǫߜŒh|úI —!„�̲'�‡,ÐÍȘ q­éÛB©={^bÎà~!É#¹3Úq¢ì×/A �LR€›�²Òÿ£„$ž^«Tó¸ïE«ÕêŠç”óÍ0âÛ¶Q©TP¯Ÿ`×h4pæÌìììŒ[¬Ò“,— HNùÊå2jµšÍf×qݺukèãFÃ¥‡~'Y§uÈ8‘®i!„+vðÆÐ¹¯qºÄ¸èöѶœsÄM]NMžW7‘)gLqdu¨kÎëìŒG,kòú‡“|ØsÚä>,Ï«·Ÿd¬ 0·²°êlÛÆ?Õª¼ñã»ß?: ÿúÛo…ýÙ&€'LCLs$ÇDpZ\{ò—mj7E¤ÇÉ p|V�Ÿ÷†?OåƒÂ¥Ûo$×ñæöÀŧô®/ ç�ËW¢oëõkA·@‰0¾ðÅà{Ï­�ƒn¿|ùåÊ”vLÖ­ŸËW‚®AßÖ8É=÷ÁD]޵÷ñâËù_™àí»Á÷N(\"„B2˼D NçsO ÕwDZŠ“(„ïÊòl!eB¬ÞêEOB´ eµÿG I4¥ŸHyR©TºÜu,Ë*šË¶m,..¶'£àn+)Ÿ,— H^ùÖ××±¸ØY$ßl6ÇÇh¸tÑo­/d Ñ�{ÞhŸ¥B¯¨É�ôuÅNã7y'ç{EÓ¹}÷ÆÞvsŠ"â"„èÙߨ‡£{�Žãž2 L¶³Æ!ÀêZPºùä?üÞß¾ „ —ò¢)#õËæVÜ:¿#™£ Ïuø oO‰‡ r¿ÚwC3³Òÿùì‡!ßí$GïEqfJEûüø, èœ3E¨>ÆPœ~2(ÞÑ9ªLš»¶r¯ñ ‡\NZÀ—¾}{wZáq/þ‰Þñ',2î¥ àSç''$Óu«ãé‹JàåáìjF�‡�£K ¦ê²—h鹕ÑDd£¢»?œú(…K„BÈT0/Ñ@ «=W§°Žc»'„Ã$c&{RHY…Šóˆ"Єua3ú‡¤MLœŽæý��È“õõz=W.—aYƒ{¯­­õ¾”Ëe …¶““mÛh6›¨ÕjÚX2WsëÖ­‰G«e¹l@òÊW,Q,»ÎÍjµ:ô¹�”`ix»)2Vgœ~¤b‚‹¤ ©„�Q¢éÜIn×IÙ6y…OqEÜÔvjr^ÛnN™]$AH ØßØ]›ô1�þ<öþý~)#ú‚’ôH F"ïæVÜçQkc·u´i7f*ÖPîPú±ù"÷(f>ð[ZG¥~ˆ™‡‘û•ßíù™£÷ßÂуžM¶€ÊѦ�Aºß&v¤gþBQ J¼ø…9“à®­ŽãNKEŠéœ‘¼|é+ƒÅf=ÿl¸(¤×vt‘qîößíqöåôÂ�kßêýw&‰»nuœ´”xéµW:ïéγ¥Ü–²\—Ï?«¯ŸËW&ïqÊZ(R¸D!„�ÑèÕ©1&\Ú(h9,BHz˜†k¶‚Ž£�I6!(^")ŨےmÛX[ëžÉçóC¹ÚÔëuÔjú˪X,bssS+`)•JX]]EµZ ÄÕ¹ÇX©T°³c:A2:Y.�Üò­¯¯ãÌ™3]Û[[[ÃæææPÛëA@•.K©ƒÂ%’h<Ÿ^â&wÙëªâwsŠ“Ðq�¸©íÔ„Ž HÛÍIòÞIH*Ùߨ]€¹•¿«¯is!Dɉð\‡ól™[Yœ|ìиûö÷.9¿´¯Ž~ù×�÷Ž™‡?ª"á !ßÅÑ{îÈd¨mÚisÍ®£»ß^‚ߊÓO*Q‰WÄs×VBŒSGË�QÕðâ˃9Ð|ù½øâô“ýE!a‘qwZj»/¾Üûïo7õû…$Õm/üÂ%—Ÿ‰¾½¬Öå—_Ð  NåUºe‹Ú„AEP:1Õ©¼º.(\"„BÈ(ô.éðî XP«j°§Æ$›è¬¸¬9‘x„�É0މŠd#¥ !.!¸ZÍë¢ Æd�qleÑ‚aáRµZE«Õý¸_]]ØÑF'€r)—Ë}…&–ea}}ù|•JpL·Ñh V«¡\.t\&ÈrÙ€d—¯P( \.w‰ªjµJ¥ŠE#�É&€ Ÿ©%Ê�Šß-I4Q"Ûw1¿S“÷5:º¨ª¶ÂÙ8y£�šžW@K&gÒžâcc×Mf’5èc43qO8ÈÍÜp¼ÏÇV1‚he\mÚõ™ŠÕ€:ÞÀ*yô>ï}âØß!÷ÈÇCÝ—Á»ÈáŽ0‰™öû‡Èá�8{€£_þ5Ž~ù×½©å²”F!]Ýývëø, ÷†o—ê%Û×”@'Éœ´”ðbaÍí7ô1^'-àߌ¶�°È¸×^Q1gOà”T†©Û~,œW"—;!wèÓOšË%…Aë2,ªñNKÅÇ™dPá’.ÞÏ�ö£p‰B!£à63 ð FÎKcð~qTÁó^ #äoBbg:&â¤lBˆ ‘¥A,;b‘Ö$eT¡AÆ‹"ÇĵZ­€ËN>ŸJ`¢@·ž¨”ËåP!�6n²\6wßI.ßêêjà<­V«£ —l5HÉ–t3ݱºdjpD?î�Z+Nöˆ›€ÎW줙F·ïñž:ÏkÛÍ)Šˆ‹’.ö7vÇq]סî)î=ÏÅä¾µÑÿêîø'}þ¶!ÖÒàì鈄ÖÓ:4m-yÿçxðÀÆÌÃÅÌì‡C·5ƒ#G�÷åGïýòèý°?mX;Ú´Óß\‡ª?/%ŒpN.œ —’׋…óÊÁf¡Ë]øƒÏê÷…/¶­^‘qŸ:ß?2.É S·QYº¨ŽfERI!κœ:—' —!„22Nt[[#½'�‡ùÕ”½f|2±ú‰�4"„ Û’)kP“1ƒgWõÆ/=‘†ADBîoìØP«–׎­, ?ý"¦�Ü–lßÖaÅ%õº~·ëëþñÚþ¬®®¢Ñh Ñè^*ÖjµP¯×Q*E1�2G–Ë$¿|ù|Åb±k›î>†/5 \–ØÖ�„Þcµ€2Ô”^„݃M¶Y#�)mÚ gf*Ö:tã0ò�Ýÿ;äŽÿ“P÷%ßáðÞ÷!ïÿ¼×‡ªPÑp©Ÿ¹w€ÖñY´ÐÝOiœïé‹Á¸81TqpùŠ:^W,1_ÿšÞígáüàîRa‘qwmà™Ï×¾5øñMšQê6ò>ž .eÁ©Êeu9nîÚÁh¾“Vç{£p‰B!ÆpbÛLO°„vXá!$¹Lׄ«”kŽxÉô¬¾×y)Õƒcdº¸¿±ãÆ»úEL‘„K:·%˲†.ÕëõPÇžBa¸9PW£Û×8Å=Y.›»Ï4”¯\.¶9„ë’ %XJóêmÒ —©ÚºîÍ4´¿ïYDá� w¯·q,°ˆ"njÇÐ9¯€Gð$Ù®'$VNá•àóœ(¼cÎ)>ìoì.†þò¿DÿEVQ„Kac´&ïgam'í÷u´i¯ÍT,×=(pO–lHùÂ#\Êá�vGÈA>-J *.KcÑutŸ…ã³Èß;~,Ïw×^¿691É©<ð‘��YÀGòÊÅhÈë×Â#â^�ç',2n÷†ÚWR£öL×í û^8À\¾’N—ªIÖå¸yýZð=¯K…K„BI:uX‡aO  Õ¹m9Ûm:",BH8Q&â¦ñ:ªm÷9“@ñI1^SÔ¿ñ‹– T*Á²‰Ò‰T€áÝ›%œÉçóQM½^‡mÛCç0d¹l@zÊW*•ÛÐu© Ä(™š4%d\x\�z‰›\¡‚7"Îïæ'ºþ@{‚Ø8µcèÐé;µO’Î{„ Ì �€«}>VÄt=ƒkè/\ÊCˆ2¤ u‡Úߨ0·²à¿‡Nô^u´i7,êÜ—ÄCÄÌѶ#!0sìqüÄÿ«êѦ�ÅøfÝ5P„:_†â¹/ãⶇ.}é+ê'i<}ø¹^÷6�›ƒ}ÞëÄôñÇ»]®ú‘Ôº”Ç4­¸aÄ>Y­Ë¤ºuùÅf€rÐr¡p‰B!I'váÔ f×òú=¡¬Þç%ÂW,2ÝD蟾ÉW)mq À-˜Ÿ ¡x‰L ¶m‡ —†!,jlȯ6¥R Õjpar£Ñ›3Q–ˤ«|ºmFp]jA¹,eiõ6éÐïDåóœ�˜�Rö3Ê-ÕCçþß+xŠ‹žûpÄMí:ß« ÀŽRNB¦Œ("šérD”²!jP®J½(!‚hec7ÎûŽ;ëGEi+¾{qì×Ú¹˜ý0.e’{¨Ÿ ¼=’pIç„óú5%I£NDh“\'//§ò£;{Mc]ŽÝ÷öôEõݹŒE¸´�Û*£{2pmépyèÛvn˵vô¯”èÊ”^:\æ OXŸ£1 õç”qÝóV}épy¹Ì„s@;‡ÞL, ~bw ’¢§ï�ÃÔ¢«AÁE;ˆG¼´ à’áí’(jµl»ûQŸÏ燫4›ÍÀ¶%|Õ9¨X,NTÜ“å²é+_¹\l³Ñh Ùl†ÅÚU!eWo“èÐM…� â8¹×¡V)+„ðŠšÜ†ˆ+nòþ..,D‹¦kÇÐ9¯í²IŠcÉñŽDó„ZŒØ«±8ŽHɤQGáRBä1A··ý�ݾŽz=è.Ÿx3Ç|è@Î@>x¹‡íŠ�“ÈAä�˜yòè}ÿv³Úf¯£{þ~äkã +AW•ׯuÇA3xãåNMÑ,†.nliDÑÒ´Öå8ñ»±ÁûBìÂ%Gð°éy«1Œhi;·U‚ºa–Þà躡nç¶ÕP¯¨-.S+çÀú�i«¿¥Ãå¦süíüøíÜVcép™l„�Ø™—°¡:«]Ö=aT Ö)›NÑ!Ñè×�KM['¤lBˆ5t÷…LQ‚›�²ö I&Ý–šMýãguÖ �Â;rŠÆý¤l@ˆ&ú‹-K‚êþ„3S±òð•mæØã€èž?zÿ-Üûå_w>ó�ßÂÌ~«ësböÃ�ï¿åý3k¦b•Ž6m½lºñ_+ÖñYï % —ü®K/}�Â¥8ð x†‰IK+ZÌ3Á÷aZërœ¼öj÷ÿÝ{…—q8.ùêR¥nç¶ŠÎ6†Õ·¹® «Û¹­€jš#¦a}ŽÆ”×ßTä  :Þ›ã“!“Ã4�ÌžèÙa76™´'�Ÿ—\QM2E?ñàô †!e *~b5†­—!(^"Y¤Ùl„ÀðÑ`ºmJd2*–eÁ²¬€+иÄ=Y.�Îòéââêõ:Ö×וKÔÇ>ö}HɾôtÀX]B¦�«Q/q“+jòFÄùݜ⤧`Á8¹NM®À ð¸9QÜDRB½…K€ºæ¦mÜ¢†þ‹«R)\‚ÆMÊ'Ø8zÿ-ÈÃw»>sôË¿ÆÑÁO�{äãŽ;“8ö8Ð-\T½dU¸ä§ò~dü®KwZêÿ„˜ãöÝžQcÒÒÂî�nw$@�W£¸$Mk]ޓם©û€—/¬?7çAlç¶ÖÑÝ® â¶äüýÌÄ´XP·¨©ƒõ9Ó^εë]ö\tê„BÒN¯ûºÉŒ[{rO`gO`}O`uOL¥55É©hÃLWÄnBÄáèDÈDѹ-Y–5´p)LˆbBü„;÷4ñ§²d¹l@:˧;OmÛF½îÌs|ä#?zã$mD9Q§m”�©FJÙ”R6¤”5)åšó³èü)¥ðÔbÑKPâ�*:.Ô±Ö IDATã åÑIXu~vœŸ}!„Bì !vœŸuç§$„( µpƒ�I¥17�cQ„7¤ó:™‡!²ùGï¿…ÃøÑRù‡÷¾�Ã{ßäƒÎßú¶?S1«:�Ü;@ ÁöèÈãÕ:'•¯oŒºUâ²{¸øp×ièê;«èÎ#�&*Ó\—ãÄï’Vϱ —¶s[þ•Å6Pénç¶6ÏÊä<€'êkj`}Žë¯Íº;ȫεN!i'l@ÃÈD‚kçvn‹PÏ”u@‰˜Lìƒ�q"„ˆ2XÉ8åŠDñ!щF†-õÂDÜ DUI#Ëe’]¾°su\b/’(8^B)eË7Õ5â¦9GÜ4%nZDGÜT‡Û‡Ó³5¶áŽo¬¸ %nzÓ7I�¸©ìˆ›¦Q0BÆHĸé[L¨Ó¢ŒM¤e¾ 0S±Šðµ»Ä±Ç!Ø8|÷ y¢áz!ïÿþþ&Ž~ÒåÖä!Uõ2þŽJáøìèíØ/}µûÿ»7º]˜Èð<ÿlGhsúIàÕoNöxÆÁ�🠞C§ò£ �¦±.Ç�îÚñeýg㌊óž×–—#5š—€­Ÿ‡&Âs¥]»Õ"ÂÓ€ÍíÜVk¨´Âú Ö_‡¥ÃeÛ‰¸óЏGI5óu8+ŽœØ87½`0Úm,qt„Œ4Î:±Á¦alÉ a1q£UÂ#¦D+aî?Íf3Á•—,— HoùŠÅbàØ)\":<ÑR„'®-J4�û0sǨݘ: ãéÓ}¯Þcsÿé¿OgÃYÃ{$‘z‹“¬…ˆ"§,Ñ@ïù. }qqA‘|`÷,ÕuùGïý"÷¨îoʈoQÚ$i hÜPĈe=ý$ðÜ ð’Ç!çët³1Á‹/+— §/ªŸLæz£¡9óÛÀG>Úý^˜è-L•¬×eð»d=·í‹pÉq�ñ6"»-mç¶\•¾Ž:€jqG»1ëq}Ò=„-¨UOD9®´Âú ÖŸ–*TÚÎ!Û¹­âÒá2;’„�Ô3¯+š0ŸYÞk dÚHÈôÀsÛ‹”6„X„Z…Lñ!!´ã´|˜rØ'¶=Ž4—É�å²£—¯P(„J¶m£ÑhŒEðECún\„�LáþD7åÑq,qï_ãxh…îÃ#nj¢#jrîn™šŽ�‹?Mô?‡ ˜¶± )ëÂFg~G‡Š‹“2ñ‹-�ø¶ p),N}ßkG›vc¦b塿Γ�¿/ÌT¬üѦ�øz„{hŸ…ÿœY¸_ø¢Šˆrm\犗FcáÒ§›~úIàßd¬[Òyí•n·¥çVÔý q8.ùjq[ »é�œ¥ºt¸\‡ÞÖ.¿�ÛÊj£”õ9¬¿B\—ÂÜ©!„¨•;î �wÀÎäà�¿IïÚ­ÎK Hˆy<ƒ×a+syÞ…!e/à;ßùÎcºˆ®IŠg¢�ôã…,— ˆ¯|aÛ¥ãñÁ¶!$3H)[÷&·xÉé>ማæ7Õ &ÌÇáBgA�“Ñ7mB‰›n9â&©7­:â¦i¹¤™~�¯ü‰i\ì'eýÇ# "Ѳ'ê­×uiCÅÂ�9Ú´{Þc÷¥KPÎr½ê&?S±²x/Ð]+î\å*Ôýshó‚/}¥ÛÕæ�^èÄÇâçÔGõ¢¤Sy%~¹ö-%^"Éå® ¼ôµÎÿO?Ù;"Îå!“¡q[ËÀÔ5ŸúQƒþÆZB6í™YŸ£ÁúëM Ýb¥üvn«<Š!„d•yÙåBØ("^á’ 'DI"R6!Djp”¡".9.O„$ž7n|H÷~ZÅ3a±wY ËeÌ”¯P(¶cÛ6~ö³Ÿ=ôë¿þë#oŸ$›ˆÎ|>B¦ ©ú%îØH¨ Ä#* åÞWÇ!(ú^Û!Ü6¡îã-çÕFgL¿)ÙK Mô?gŠl3+ÔÑ_ˆR€Y·xÓôê(6TŽ6í�ÆE�6íúLÅjXGxý$½^æÞZÇgÑDw|béÜ,ªèÔCñÜ,Šß9”½…>†'-`óßá±ÿø=œlïóðÓ“~iâøÃØý3œþþ#ν÷^g¿:>øAüèÉ3øÎ'>�;Cí¨ZímìðÛ¿ýü‹±;Ô¶§�ËWÔÏ¿ÿSüÆÏއàñÇñþgþ9þvÒÇF¢qïð�/|í1¾ÿô¸{ÒÂÛýþΨp AÇ•ÆÒáò ÝCÆØhØÒárs;·ÕÒì'�£ ýa}Žë¯K‡Ë­íÜ–¿!³ŠéläBÈÀÌG³¬„°�˜lÏ,’f¤¬;⥸ܑŠv Ä"ÅK$ 4›ÍL —Èti÷íoûÄÅ‹}üÑIˆâPÀg3!„h�RF7¹¢¦<:ãéÏkÜN1=ªŽÀ©…ްÉ�'kG«Ó¥x,4Ð?)"ñ 1Ñ@áR èmÚ�™Šu ¯ò1çm×eièyª£MÛP™©Xu¨ño‡´2ʶNêzh:ÿn@-xï§«ž-¨´�ž>©~ÆÁñY”¡Žµß`B@õ^PŒ5kkýî3ïBʾuDºùÌ?Ÿô�aùO~øÜ•þŸócL¸´�Û*!xˆ’ÚÓ�†&‚Ç©mĆ8H@Ó‰ú'L?¶t¸<®Ö$ës]óvcépy¤Âvn˵wõÒŠÉùgbõô<'MR@pXC÷D[~;·Uæú „2<{¢çóÉØ@ØžÀU¨çTÓÙns^REÈHHYƒÔŽK¼TÅK$åP¸DÒH¡PÐFÃýâ¿0½ˆ�$“(7.¶£ !dH¤Šßî‰P´y¨q ¯¨ è<Å…níÉmGÜÔåÔäyµØQÊIÂyG¢qBôÿÜ”åÜJ¼¨ËqHjA�©´ „EFÆ>aÔ¨ë¶ `±_ä\Ê©¨Ý;èŒ%Ÿ›Å›¾ÏÏÍ"ÿ�ƒä9üŸ……ÎwÕO¼jF°ÔÁoò@“ƒ%:eî â�mca;·eŒçZƒ[ØK‡Ëý0Mè'ìíÜVs@7)8ÛÒݸzZè�@Òê3� p«à̈ÇPÖlׄ,iõ¨rÆm‡Û@ôInÝC½ 3¢EB!Ñég�lŠ"Tǯý,ÚS@µy‰ŠÁý2]P¼Dà/ÿò/µŽKi¥PÈî¸e–ËÄ[¾[·n�¨TØlš¢L†ó™L!1â8¹ãÜÚñj!„WÔäŽu¸b'ïïâÂ;ÆÒ+šÎÛqçÚnN7õ¥�îºmÀq”yǼzz�²!t‰ ^ÆÍ82Ž˜hÔyưmÛPóx™w˹wÐŽ½œS®EºócHÎ8ð€‚¥”`É´ðª_»>×!“ƈpi;·•Gð¢k !îÐÝ(ÜŽ‘‡‚#6ŠtCr¢¼ªZIZP“ ‹Q÷ë¸ é¹�Ý–UŸèØ z)lç¶òCˆÀ´Ï=�‹• ·¥¤Õ_≋+Žò�Bœy‰:á8/ :•î¿�Ü�÷D{àN']•ñ‰—*àÀ6IIÉØfô&’,— È~ùH²áD3!„L©vD‰¦sç¿Ü:7¦nâ& š¸ÉujrãéÚnNžø½i¤ •Âè'D�cSKXüYùÜ,ª“v]Jˆ`É…ó¡„À”ã’N82LÀÍ õ³º�Û€ªA§›H,.¯9oþaq;·µºt¸Ü×-ɉ2ÓÝàmÄ«JMT}..×—ÿRÂð®Sºs¯n¨\‰ª¿ãæÞzå;%„2$Nl[\ƒ ½â8€Aˆ Æë¼Äë–$ŽŸýìg'uï[V¿1ÈpŠÅø66›“¹œ²\6 ýå+‹¨VÙ-žb’­¸$„2áO/q“+jòFÄùÝœâ$ôÙã7µ�šÐ™ho»9É :ô¾#�,rÏ*QÄEpÜoê87‹z»q%ÁuiýÛÜq –\úß;)$¤/¦„KºF×ÀÂ¥¥Ãe{;·Uƒ^á»  ´�Ûª¨�ÙÍ¥à‚‚›ÕíÜV£WÄ×vnËp5l»q–#¡õY×O†…KCn«‹„ÖŸ‰‡Z êšÕ5:jK‡Ëƒ^» …y.BHöèÕ4åêd(Ìs™fâ/Y x‰$”_üâZáR4Ù}Ôd¹l@úË÷½ï}ïW'} $¤ûD&„ Š“žÂ5y�š¼¯Ã+ö£áU¹´Çö�SÛ©É÷jh9|$Di�PŒ=�ôvâJçf±ö�ƒ‰ºð×>v6.Á’K”zˆûþNHêY¸äsÂ¥^bž>¬A‰tpªµêÄS5 ¢Öbíì;qXkÞÝȸ^Ù©›Ð—¥¾t¸lD`Ó‡¤Õ§N”ßÎm=g',£É6\¯‰ª?±‚Û¹­2ô�Ž&†ˆÀ[:\n8T^ Û¹-‹ŽT„’)BWÙ8NO&(ØÙS [PϦÔ3¶9/IG¦„ñˆ—n9±q\}JHLä󽨦›,— È~ùÈX‡³!„�”áˆ~܉tí<†Â+jrŸ'®ØI'<2�wÎ/,šN'nj»915%HÙDÇ�+ —¦Œs³(ÂwíK¾3Å�iyÎrXî v|«èÜmtKãCŽrÏ£p‰�>˜p\2â¶äâ¸Ü,BY¼õºˆ]ÑŠÛÕÚñ( Ó‚ '欈 ÃOa;·µ®”8�#P c²ÐKZ}..7‘�.ZlÐÆ¬®n�N¼$­þFe;·U‚~¬`q„ãÔ}§Er¿"„’Ð’™ìzŸ%Þý¬X4¼/B’Müâ%µm!@ñ„c+‹ëþÆNjVZ …X#Ál[ß�‡ø%Ëe²_>2ÕpB—Bˆ'®­g4�OÜä:5¹c6ÞßÅEqÐ9~7ž®-xòÄï‘ÉÒ@oÁ5ÆÓ‡?arÀC‡ñRùÜ,ªv]ªXÇäKƒPçL é‰ á’®4RçÛ·D‹xéR€Æä€S�*oÀJs;·U÷:mç¶òP7KívÆ)dI`}Ö<â¦v :qKn™šNYI|4Ñï\¢ ͦ‚s³ÈÃw> àpxè¨ëãÔÜîÄÆ“×¥zK\”@ˆf lC7R4ò Â=�á…¨Õ�íÜÖþvnkÓnŒrL6Â�’ü“ aqÕIWVŸºÝ–ã ç³þÉÍÖ…=IXý Œé&¼ºd Þt×<-D !$£ÌKØó�y‰µyiT¤öì`ç�L/Ê )n·Öu§8Šd ·ßV€Z¬ó汕Å[ÇVW�­,Ž´w~~þ§#�†0�K˜ÛΠ„‰_Lkú‘å²õÚOÊæuêÔ©÷FÞ8ɉ|BÉRʆóS“R®9?‹Î��R g \®+P„*œEØ00×wa\Î" ¨¹ŒûB)„xS±#„¸*„Xw~JBˆ¢‚Ž@£Á6 ñp[:t”‡9ç£ljÇÇgQ<>;xœZDK@4�%ïU„ô!.á’‘É¥¥Ãe{épùT£i”øWõyk;·µãD¾ {L èÕ£…íÜÖ*lç¶Ö¡W(7u‘rã")õéÀt“œƒlG÷ÙX#.’RƒÒG´T1$¤Ó]ó.B”Ø…K{«{ë{¥=ÁgI ã/•!ÄTä!ZŽ­,êˆ�nÓÕa·ÿ+¿ò+ïëÞ5*,,ö«Ñ0³¦H'~—°'ËeÒ]>Sâ*’J,¨ÉÞ^�œ$$„’¤”Íâ¦9GÜôÔ¼È%tÄMuôÞ™Âu�)¡#nº 5ïñ¦#nÚwÄM;q…ý‰òý±§Çm©Kˆ$EG¸$Uùs³£‰—Á’+V §RD¿ ÇÛéƒ á’îB3::³t¸ÜX:\®˜ƒ°¯�°�"”ëMXŒ[”ãYƒ~mÕqÒÝXm¨FÝÄIH}ê„K%GdÓç3ºáXbÉRƒpú‰àêÒá²)±—®ü|B‰Ìžè)`6Ù¶,¢3ÀukO@î ìì‰TwŒÉ40ñRÀ8¸K‰â’k|âbTH˜%ÌmgÂ4“v$ÊBÙzí+Íå³,ë~¬; GJYw&{Ÿp&{ç &{Ñ™ì¥p‰BHj�R¶qSÝ#nºáyWƒ7�ÃIÛ‚êÓºã>«�cÔ4À1‚é 06ú`¦÷ÿÃþ.*ÇgÛDw\¸<ŒëRB`b!#òÐ(uc\— ÕЩyö_DÇJr�›Ùªãt³èlwP*nùÞ³ &ÁtT——5(1Éú\:\®oç¶lß>,¨�ð~bÝ`y}Üõ›°óQËvnk!îT&Ý¿–—Û¹-Ýþ qÝ!„d‹y‰ÆžÀ"ÔsÔBçy ¨A.Sèž‹î{Ëd'$RÖ Œ©6IÀ-±)ÙŽ#~¢—†^Pò;¿ó;?ýþ÷¿ÿÿû£ŠT …,Ë  Fur&/îÉrÙÜ}¥µ|açíÙ³gÿÞÈHj�*:Â=áL¶k !„�Äõy'„pÇ`Üñ aŒÑt -¾iº‘²áŒ3�)æÜl{~¶�×mÉÿ^î¨ëíü¹Y”¿s0TR�¿ÓdA ¡&–^#±¦ï’F.aÂŽ*Ž ¢=ZåGJèžèêEJh´8̾·s[kPvøý¨/.'~"lõYCP‰[ÄpÂ¥‰üLò|ÔáDꜩšßC?­ÊhB!`^¢ß3݉s3"NÞ=WˆQ AÒ�/µ Ú�qµµTÔ°kŽÓ!½bâ¼´îo쿟šp×)•J¨ÕºOçV«…f³9’P%LüR,ŽoL2ËeÒ[¾0§°_ûµ_£ã!„B¦)eq“+jÊ£Ó)x^£ô…e$�rÆ·r�LŠUø®«Ã=Ûƒ p ˆfJ¡£ 5�éÝwZ>¼ç2"&¢âÃÒársépymépyqépY@E³ÕÐÛ²8lL—#Fê'˜±¤C,Œ¡>ÃââBÃ�ßùZ¶ÁÈ3cŒû|ô²�Û*C/ªkÁ°«!„'óÍyiÌÚ»×@ …K$=¨�ÞEÄk{oØ„:!<™N¢œ #Åw?õÔS?åï{&pñ bÁÏèö•Ï�/M!Ëes÷©#éå s…úô§?MÇ%B!„�H)›N4]ÍM·èüÌ9ÑtO@õ‹/¡Mç.ˆ³AÁ pLlŠqÜ–ºúûÀaNÿy)€£ ¨©xnvpÁѽ¸É6€ºv/Ý;À™A·“ú�Ñ ÁØEBz0ªpIwJÌnép¹¾t¸\�jÀôr<*o綆]­| ½oF—²"1]Ÿ~‡"½â´1qýö•Æt>ºNO:Ñ’�ñŸ�TâBI± —ö¬=¹'pkO`sO`}O ¸'èBH £bÜâ/J¼g4I±ÆÄÀg>ó™ŸêÞ7 V.—aYÁ[q½^uÆéGµªïÖ•ËãÕûe¹lî>ÓV>Û¶µÇ6Θ=B!„�,#¥l9â¦zˆ¸ÉH²Å”ЯQÍFl¶ñ;ápF‰—Âx 5ùv¢R°xï‹÷Ò1ß;.Òƒ8—'ÒY:\¶——ל�þøÙ�ƒlá®K-$HÈe Ãõ©["Ùëou£ˆ‰s[êEœç£#ZÚ�Þ*õ’#‹ ݶ9IK!$ièž½ö¼4¶Ïk]^†ê´ïØß‘ÜJ‰NG¼wŸ£ !v ÛvSʱ•Åú·íGމû­ßú­_êÜnÂ"½E'J±m•Êà&É�FCëøcYJ¥¡ºs#‘å²é+_˜ØnÜ1{„B!„D ß¼.DzMd·%—£p×¥�En÷`ß;è›n”²PB&J¦¢âúáˆ6ÂTÖC�mç¶V.2ÉCï|“ Õ§N=[ÐÅÅ9¢ÿû­˜Å8±aú|t\š6¡oDV–—ùÐ$„2ÕÌK¬ÍKÌA¹ºVâu˜A÷z†§²ÍBÎøÄKE· WZN'Qú'FVF† ;L¸.­®®†:÷ "€i6›¸té’öwaî@½X\\Ôþ …–å²É-_ab»qÇìB!„ÆêM)çfQ†oÞõ¨�Û’Ë¡Fa`ÿçñY.ÜìÇÔéÁC#þ½N…;ðEçˆT\+:÷YX:\žáØ´,.7·s[uÅFÃE èo}WÞÎm5–—Çfo—¦ú\:\¶·s[5�”ÊÖ4ïù1^¯iª?;Ð_Õ¥Ãåq¸RéöÍ ZB!‰ÃqWj!ž¸ÙÐÉyÉç"‰ )m±ˆðö )òv DRfݾ›t{LœKX”V³Ù9f˲,”ËemL˜+¤Y__ï)^©ÕjX[[ÓÆ€åóy¬¯¾v)Lä2Hy³\6 ¹å £ÕÒÏýLʱŠB!„B4æ¸D´<9œ:„Gåd'~üHYRŽ!¢$RѽŒ�Œê¸d**us,C 6Š,�ëŽ!Lw˜»MàsŽθH[}êF2u£yº÷âxø¥­þ°�ÛÚ„~’ªæÄÒMŠÄEGB!1Ö^0&ZÚ(î ”ösщ)mHyñY®BˆÌ:Ë’nÆç§ã Ä-a¢™Z­†'žxkkk]û³mµZ ‹‹‹¨T*Zá \½zÕÈ1K–ˤ«|:ÁV¡P0æèD!„B!£ s[:œd0.�Èéq`~*]—”#:!d’fC8T|[F¾ylç¶Ö¡ŠèD8jp|¤ª>7*ÿ1ç·s[m¡’óoÿ_cép9 ËTÕŸs.êM]«!„/a&;¯%¨¶å›{û{;{ë{b H)+ÏʶUqBp>ûŒ-&PÎ7:qJ½nÎäkgg'T@bÛ6ªÕ*Μ9!„˜››C¥R u€ÍÍÍ‘¡L�å²é(_³ÙÔ ¤¼nKBˆ¼b_±)„  !„B!dÜú!QÝ–\tB§9ÿj„ã"„L)£ —´�A�iñ‰nÙ[\ƒ7#­NßÎm¡�ˆ³\ô.ŠÛ¹­~±rFH[}:èF¡‹!ÿîõ7#“¦úÛÎm•¡?[——ÇâxäÄ&ê`62!„�©aOÀ‚jÖ*™|&zÛT;iý#ŒG™d-:?«$%^ÒõILS‚ŠŽ£û—ƒb=ƒ×G”~�Q±œ.N˶mc®K–eáÖ­[ÆÄ*›››(—“¡ÍrÙ€t”/Ldçssg•\BH!ÄU!D9ƒ÷B!„BH‚87ÛN›is$s[r9Ô( >üCZÖIÆŠ )ä„@ñ„Àú �«'öOˆxÇÑÉpŒ$\êáv3ÌÀµnù[Ñ ™&ªSR'òm3ä×—–—m'šK7¢ºÚCàašTÔ§Ý@w)ä߀Å"\rH|ý9Ç¢;m8çâ¨6Ú�Õ˜±!„�D2/aÏK¬ÍKTæ%ÎÌK‹*0Ûn k�ÄmI¬D*êgß™d}S±ã8F¬ X’ƒ”kPç^ÜÜC „Ø„îdEx1&®ycÇh»_'\ôñ[Ã’Ïç±³³º¯A¶‘$a�í²É/_XLœOl¥(Aõñ÷�gë*Ÿ«„B!„�ˆ6ä†ÛÐá }ïþå¹Ù¾c Y„s¢ á„@É*íœ�PãÙ«è,"¢ˆ,�˜ˆŠÓM� s3 ›ÌÔf3� IDATYwÄBFp¶¥ÝŠ:º ½0«ºt¸ì݆n’ —èÉ4i©Om�‹ÿ\²¶s[®XÈÌõ˜…9‰®?G?xiépyÜYªº<ó\ !„L=ó�y‰Ú¼4ÓqÝ=;UqwŽum <”�Êu�œÆA‰ä"e J<· ]Ec ±ó~‹b�øæ€7…YkLœK>Ÿ×ŠRLÆÅʽçêÕ«‹`òùÿ“†” ±Õa�Û¹cjbý¤§ûçDB”¡^ÜAºKã?"£DQ„ÄÒ7+•J¡R³ÙD³Ù4æR,Q,ÑjµÐh4´â˲�ÏçÛŸ5‰”�õ©‹‹‹F�¥²\6`òåó£×Y–Õåìôãÿø7ÜlÁùYB´ ®¹†”r}B!„BHº ØÎêâÞá0䎟ö© Ö¹ðŸã£�Þ‹ñò'òïZlLÌ`B¸ÔDp0sØQÄ5è]dÊP‚ŸÊ°N2žˆ7ÝÀk­_¤Õvn+�p·¤ŠNIJt¸¼æ¸ùëcu;·ÕƒÀ$±õBjÀß{ãÖÝTZcç$®þúˆ–ªK‡ËºÈ½q »æy³'„BÌÓKxbÊÕÉuQò¾‡¿ÀÿwïßàÂÿ¦Mø%‰FÊ&„8ÕŽŒ{EQÀ›bS dsDKº~bã‰ê‹�c+‹eL &Î¥T*!ŸÏ£ÕêÞ|½^7.\rÉçó�FÓ¹õ˜ Ëe’Q>@/\*—˰¬Î¥dÛöÜ»ÈC‰"W…6:"¦XwB!„L' ïÈ©YœÍxâ)áÜ,òð —¤]¸$Í(ñ’‡ü¹Y”¿sÀ�DtùMôw/®1Ò¯qžö¾-éèd?0¡ßN¦Ç…4ÐÐ!9D§¦h3aŒì¸äD¢ÙèõXÛ¹­ü�®;¨%ìAYPvb¼Ü‰ÿÉg¡#xé7غÁmi=d;Í~b‘‘qy(w¡~«p£”¡‰«Ï>Ô¡±)ô1ÈdKfêÏ9ub§€ºãî…ûèË "¨áVkX7*B!„ôf^­øk">Á@h[b�ýït£„4(—Žq ­;Ñq•¬EÇ U®ÌŠ–Ž­,Z˜`LœK¹\FµZír]jµZ¨×ë(•¢^ºð‹²òù쌡e¹l.Õjp R¹\”õÁƒÇb:„’ó³)„h@�MÔ¥”|xB!„ø8!P€j;éRSÜÏß‘_¤%Dý'ï9דÎͶ>´1á¶äßÖ”».¥z,(K¼#Ñ8!þöî7Ƶ}¿ïúç»÷>ÎŽu;ïV÷6Ée’xHn)�z‹^Ú(T` ÄUbÈ�B šQQ+Q!ÎŒò`|xR5üѸ@#¡ÍƒqZi'"�‹Ú�ˆ4l—F)¶CÜ›ôÞÐßÎ�&çúì½<ø­5³Æc{-Ûk-¯µü~I£9gϯ±—íµ¾ëóû~c¿-ÛYòXY£â¤ùa“C­Ñy烷N^>~ÑQüƒh;»u‹î'q£µ‚PƼß?‘_ékÉȸã`d\fÅޢݟq>xûá -:PnŒZu{Štÿ-ºý¦üö¥i•îMt[ Z¬~uy­*q!kl~Ñþã„~+œ;“ÙH‹Ga§éPRKfGU„–æ�ožH:){h)�$”Ù˜¸¨ÓÓS�œÜ_ïÓëõ*\j6›•êJTå¿Mò¥æu›×5컾ë»þ_I¿«lÇ´ƒ�s3ê.ÄT‰×a€´-§­ê_ëHr=« 縘óX§Z ½y\’|}aW‚K(–¡–Ÿw·öL�kêÓ…‘ÖKRjãâ¤Û‘ae·zs"é(Ah©!érÁ—»+h6·‰¢ÜŸ+X¶�¹¿¹•ðþËÁ%ªeîqü/¤ûö~,铱铱éjl:›ÇƬ÷Ü8ד;˜ÇÉySZêT(°õ1q¡ykƒÁ½.LUpvv¦Áàîuv^६ªü·…z½Þ½QxÒü}W’~ððÿqÎ=—t ¿h(ëóçpAÞ+3{mfçÁ¨K€]–ä¬Ú5 ³¦ tî‡ìÌí¶¤ôƒK :8µ¿\£³Í-ßå ùHò:ÏãQ ©¼$ƒf Þ=мýpòÁÛ�ä#iV${’v9:ÕüçƒÞ~¸R7©`lÖ¼ŸYŽJMAîÏU~ç"[9@*Ùý—› t7û\Ÿ”õï’üj”Ç;1ݖŸK*<Æ�%Nå�‰_­ð;°)²y®üÚ¾ŸËìJf™.ÜÈŠùí¾PÅCKE5/è2o,W�F#Ýû{Z­–Ž�ã&¨_•ÿ¶Y½Þý2F£Ñˆ h9çFι®s®#é™ü‚·¬ŸWMï¹fö‰™]˜Ù¡•ôu`]×NCÅ/ä©úí$ç}#9Çõžò;ÕL-ãí#^JÛ‚0TõV¯ÌGçžbIR§«v@µdÒÌRξq5^>~±ñ ®Þ~8øàí‡ò�‘žÖ �ŒäCC¼ýð$è ³T°í�ˆ›õÁÛÏ4ÿIÒ~ùøE./ÚÛº?WÜÆ‘æ§ {ißÖªÊpÿålÞs¼¬�£€¤}§£}§ƒ}'“?æ9ûEýõ¿3Ž?ìYå˜fÑIa%‚¥âÜHwǶyhKz]¶fÁEýEã£OªZ fL\èøøøÁh±^¯W™®KÑc­VKWWiOßž*ÿm¡yûâ¢nK‹8ç&ιžsîÈ9gòu§ž²-|‡«®/%}bf—fvLˆ ì�Øn{Õî �äo«ÆŠ‘S¯é¸^»×˜ãÞy¾“ôöñf·ñÍ·ýýÏÎô;ŸuõÍ·}óí@oÝDïLzg¾}Wº.U©6T—JÆœK'Oùòñ‹¦¤×3ÿܺԤ*¸­–îv¦¦î'EGòÅ�¡¤áŠ#Ý ëåãŸ(ø;?xûá×ýõoáîÏ—�_\êaÁüh“N>»tÿåeÁãtP¥¿Hfv®øÕQ·`b�m᢮þ¾[o‘R�ìqNSWÎ�åx{kIZªTpÿ½�:óŽñg�|öñU÷Â}p0¨ÓéÜû·ããc]\\d°ù:;;S·ÛÕáá¡...ÔhT'7Rå¿-tppp/¸Ôl6õêÕ«eë@>0šˆù g[þy™< µ™a0Π²öL§òç Ëœ]»Š†wÌâ.Oäܳ\¶©¨×t¬»iB½›©N¾ìÿíÞ‰ó›GÒ› ƒK_�žèwßÌ/ |›5õTM=¶†ž§0Oíþ‡ÑÛÿ‹’FI뇥ãÏÝâVëtä\ÖãÂØ3½VÌyôµ_¼‹H-¸$I/¿¸ÒÃÖ‰ÏJÞQ¦0^>~qû`¥¼)š`üØ'3ÿ< :mò{wâþËË‚Ç)“°"Ø.3‹ 2"b�ýjÅE#áºûN©YƦpÑhß%šiI2;ÔüqhYJ:Q�;-Ùÿ«ZšwŒ?ϳÏ>¾Êâ<ix. ÁD½~ýz¥Î6E5 ÔnWsj•ÿ¶^¯§“““{ÿvyy©ÃÃ¥o™+—¢Ì¬¥»S–+C .€ÊÛ[^Ÿõ¯«¸À*YÀ¢/çª÷·WT½¦y×èþIÿ8ß;iþÖ)Yo±Ñ·:úæÛ�ÊmaÃÍ|žH𔲳5Á¥ÂÙ3]HŠ›Wß¹¦v\iŽŠ“æ· Üx\¤—�_D RÕL¢Þ™·Ïl4CwÇÌ{¡¯Ô…p+.ĒƘ8)A›ö\Wc“›^�M‘@æq®/A=¯QKÒ•Ìòìô”˜™]hþùI·j¡¥@’ó÷~F¡¥X§§§ºØœ�¾iW"U öHÕýÛ&“Ƀýïðð0.´´çÜÐ9× BE’δa½d�,~'@¡\»Û�Ä2Õ<˜Möw•/8²ÛÃÿaé¯h&´ôöÑæ¡%Izã6. 4ä÷öü¦Sù1ÖW’^™™ >®‚�óàãØÌÚÁ¢ N’×±ª¾Î—NªÁ¥Þ~8ÐË …,@—P´òUõÔ_�˜]ºÿò2û8 ‚×P=qíLV)f $�È/zè~‘0•¢ØØænoKþø¥ü­Y²æWµu”߅놤s™]ɬ0�OZš{nâJ0ânMIŠ5[;æo4º¼¼¼÷oý~_ƒ§!È_·ÛÕdr÷Öh4r]èœ!¦#IÏäß[ûZ-L¼Oª™Ykæ‚ÊapA¥0ïk`®¸ãžFЙ©j’œûf/‘›©zšiܰ7§ö&í–&Ù› 7]èa¸éUp,~‹ŸÇâR�¤ÖÌ9[A<Éàwvuÿ ¯ùòñ‹6�†õÝ‚¢óÊ,¼|ü¢­‡«ð¼ýpí.I»tÿåååã‡zøB^Í9Ï@Š?�K|‘tßi¤™Pz4jî»T.¶JË»:±b0 ç&’Žd¶ttWÊÚ’^ÉìL[îfdþï^Z:™óï¥÷ÞG�¦v\Êz[–i·Û:==½72îììL¯^ÅMxÒ3�Œ-¼¸¸xÐ,/οf÷‚™ûŽ”[u£F¥˰}Ñã÷˜™ä�•:Ü·ÎPñçAmU©–àƒÕqa¬‘œczIùôäG°÷šÒÿòTúï¢_L«Û’$}ÿÓ»sðß7Ô7ÑÔ�4 v›ß7”œôÍw¹ÄîÏÁ±¸äC]#ùãòpß7nœS¡b®�†{¦‰–Ÿp+ˆÔƒK¼ýpðòñ‹�î?ȧbµÖZ‚ Ï¥îžPUïj3ï¢ÈÚ�˜¼ÿòB·%v„™%¹à¹Q1+3¥Y#¸”çÎd6Ðýcê,5$]ȯŠ;Ñ Gfv¬ùç%• - =&.êüü\ƒÁ@á:‡Cu»]�žÒðù˜wzzšéˆ¸U9?ö³/é$¡p|$YIÊb¯õÄ»Êç}¬&Éu�ªu\¢ÛRuõ$õo¦}¹¦«Ù/¾Í¨ÛÒ·?šÿ1IµÏüço¹‘>ÕHoÜ?ø½ßx{ò_¿Õõ·t÷Üj)ûc妞Ý"‹ ºaôóD~�a¾rhqÍk jÅ…‘EÇ%I:“]îØ¦ëÒÚ.t÷b=”t´ÅmÉÌËÇ/šò)à٦цûÍNÜy Â`³�S•/à°ëÊX [¸ÍAHjccS[þXs(ºH¥õû Ź�Ìä[qçµ?øn!f'òàs„–æÍzÊŸçVY’ÔEÖçô½¤·A‡¥~â'þeýò/ÿ…MÍ©¤¿ó=W?þãÿ�~ìÇ~}ÓÛ*‹Ù‘…+Ê5ütøJ: BLa'¦E¯ç\¤ÊNõŽ(¹íÆ‘äïáBþ–ÕkjJšÜL“Ÿ?ß;ùría'Ðwæ?òääÃROÞIßfM}›š’ésðÑ¿ñ­_š>¬±c–ÃpQ¸ýMùçç¼àQÚÂ.ªÑÛ�nŸ4?Ü4’4úO¥ïû‰Œ7k ÏÃ& ê·’׎¦;E“Ip郷_>~ÑÕýUªt]Zωü‚¾¤“Þ~¸õÕ­›zùøÅk=,Ö,:PÚ4S¹û¯f—1w7å /ÉŠ§²ç§¹�mÝ/šœJÒØ<Ÿ—)À„uúKÛbû¯=Ïyt\CÒ¥ÌúÊ¡ûRLh©Så¶áÁ˜¸$¡´¬ iw_Û]~Þ8´$ùÐÒ²Ï'ÒßÑÕÕ•Æm![‘S7¸(˜Âàâ„Qfk‹½ˆÂ m kY7Ijì™Z×®2až$Á¥²Ôy*',�ÊO>éj½ETöç7�7ܰ5½},=~ç».EkÎß/ÏŽq»'è ?Û©) 6E¿–•…á¦ÿ$øˆ~!ܨpÃ~Fúá¿Äó+o]Iý ½†WVV—$¿ëîB]—ÖŒÞ;¨X0d¤„­(7Ý_*zÿmÍœnK#m0Ê”Bé:.í;uÆv[hë®>�æ ê¢@W£,¡¥ óFØõ´©$Å0?:n¨û�M³v_:“s½,n r_̪|h)Pš1qH`qo-q/œo¤�Öm!?ÁE�®t[ü/ά»rŠ{Oäõ€âJrßVºùs߸ã–Á6ƶﺙÀRè¸^Sw•®K_ö¿'ú;ä¶Ðméö¶u×u)¢ñ嚎iª•k~q")Ú?›®Kk¨`è&É íH)�«àý·M³«ëÏèbTÀ“¿}wÛþ7«ó�E�®Âݳ‚ Ô§ºlwlf½DÝ œëËl$ŒÈ+ØÖ�t!³CùîK©ã¡¥+=,ÞN$íH¡¨câ�†Å!¼µ%xìÂs¤Ò‚×¹L‚¡;$®ãRá�ØaÅw.Ý¢®’ŒÚâÜ/GõÚí(çã9_ë7«t]š»/×Þ¬¾m;U†ç ιØýØî‚|óÂMIB~›š÷ºrûø£éÂ.TaÀIŠžèêŠ*ɲã’>xûaÿåã=ݽض_>~qøÁÛ³n/�b‹{бn…óòñ‹cÝO!wy.°b‹s;옕ypilþ6öSleŒC;×ÃâK#ø÷£D¿È¹¡Ì:z€ÊZ[Òk™uåÜ:íÒï‰ -uv¡T 1qØÔâýym Ÿ•ž $¹ èÚi°7¿M¸ j¤êœ%9÷#p�ƒ °tªøî?‰»Íë¶$IæŒj+‚æº]—Ò’dLv0b{v ]øÿÑÀSV–ÞFnŠv ?ßž޲È4¸8ÓÝèI:ùøÅ€PÊN “¡³ÅÔðà¯ËþQ,/¿SÝ¡¡¼�»`=¶¥E£4ï�sIí±¯. t·¢j°j˜)h‘}®åEÊC3k'Y•&IAëømŒŽ“¤Sù¿éLI·wFÐyêR‹CK»RØIÒm©Ç˜¸‚óûsêÏÃ�{�Ö¼ŸÄÙ•÷Êj ¾ž{®S\DT2»úwçb…ÀÒHR÷fµ`ϼ®MEv¬‚w~ ´…§ÆsŒÁù@ëÏK?\—>–îÏËá ÕÐÝþô`¿ ÂMRd ]ðùöoK\ 2”yp)×+�øàí‡=I½—�_DÛìM>xû!CÅÝ7"\ÀΈ[�·‹×µGò!î–Ò<¦mÏüwøÿ}%ìŒOΕ¼xu!é éJ GÇ äC@‰W¦Àw—1ëJêj…Î_Áýr¥ùç©»Z’W~wûsêã+>©Ø?�+3k¬#^UFǰˎ®ÝNŒ@Ž¿V»›]µ3—q`I_®©¡ò—Z_®©ýKÓrŸS�èAä…’~Fúè'¥Gò×ÇîMR>õ´$á¦Û1tÁç{Ýœv´ë>r’GÇ%}ðöÃh�$T*� ¤Tê°¶¸.;wœ¿ï4’ï,+év¤[8n+•cÜpL܉îs3 Ǹ­Ò�¥ifçnÕ1l¾pёٹò§àöŽƒñq±]AmyÈãd—BK ÇÄM>ûøª*cªêB'þ–ô©¤§Yün`§fv(äJê— €¾3ï-”ÑŽ„–$j<¹«×t,¿`(“ÀRD[9s~KúÇ>“¾'úouéI¿¿Â¯i«:×—>¿‚‰ÿû_ZÒÝÈ|øiv ]+ò9ënçKk AÀév �î^3¿iT°E&(‘\‚KÊ'˜ãgWŠ{ cÛ†ZÐ2zMËîû¥�„cá–96³ÞZ…çÎdÖ—ï¾”g×]ßYÊ_ÈŽ·,´TèåHÒm‰ÐR‘™](Ù㸎ÉÏJ/%ý»1ßG y;”î­(¿0ÿÞ†˜ò.”'Y½óÇK âÎÓ ¤$,�*þ>HêoX’$ýÒT}å|þ^¯©%éÕÌ?ÿìÍT±‹ÊvVÌH¶$‹é‚zmSþœ(j ?gnІªB·‹ƒpÓ½NM‘Ïn—,Bpi{Öê¸d+t<ÚWSV§ú‡šè4Яj¨¨ÉHÒÙFç†2{.ß&«@Å"áø¸¾|€éÞßa>äAhéNXHZ¶¿Ueåcõø®jY�I:úµ¯'%ètƒ :-Í+Äçf†‰ê¢GaAž ŒvÒŠ�¥îM‰Ç¤ÝL5¬×4ÑýãsÆ(g,¨Ù…çsÃjA·ñð±Z„a§yÁ£´5”l4]¸ÿ‡çm·Ýœ t.‡œ\°H’“XN"³±¨Ð3 FÕ-’8@°¯¦~,È<üÙ ›ðNï=Ò£ã±is;Ëù ÃQÐéBÙ¯öšåÛ°›õ$uåÜ$-Í yôv4´¤Ï>¾êIê#ã‹þÑ}�1qEev,ßY- CI97‘/v.CyKr!¤~Ÿ™�ä‹ùý ß±ÇK¬([l/QãICKñ]´KXšÑ—¯µ t�ÚîælUÞµ¯…‚Fá>¶l4]* ;5…Á¦hð)KIÂM·�š‚Ï·Ýœ\L+” Á%‹°o{Näïÿvð9,|--":çºA7ŠØâÂ�Ì™lóH�¾GÒ÷(­b‹s}™ äGÇ%¥“¦†ü*ÇÃ?föUI?:ç{zι“|7«x>ûøj$©+©;b¢h]D¾°x‘ÑoH:Ò]%FI hVíä×”/85³‰î:1¥yA…€(:á䣫ù‹¦ªX uåÿ.ŽyKXG�–…›ÂPS´SÓl7§,-|íšn NR¤›�¢ËÁœsÛÞ”dì˜sΖ}雚q��‚ÕRWq¿ë¿ÑÏü^[ÿÊçæ}mß)ýÇÕ�µ:UÎ+Ðzò)°y_"´„ÒñÃ+eó<êiæ9afqE£�s®“Á¶óW)ýºpò@¾ÓÚ…l3{­˜Uõîó åÜó¼6'O‘pS´SSôsºQEGì #Ÿ'’FtÉÝ>:.X„Õx“d|›sn`~DÚ¼~’?!ïýóúÊ¿.i^p)›bšs]™õå;ÅäÒ}iQhé}é×&„–PNY�^œZb”ŠfÕnKË4t×]îÂüûÓP>Ä´jÁ:ne5«{@$9ç¸%]ù€�ˆUÙç×ÌXî¹áG3‹vl _�±tѯeeÞíG·OŠŒ¡‹|O“ Ç�C—¬�“µâ:“¿;<èK:sÎ�ƶ°›VjEµ±éBw#dž’I:Û—µ•q÷¥E¡¥ ]Í÷+Ẻk‹ ›ï‚—E t(ÿš1‹ð*Š&ËÐkb:7³¡îFÊ-=Ö Šïq¸XÊ‚ã–Ý•¨5ìž"t*¬`�Èì·{‚T³�šÂ`SôkYièî¼sQ¸IŠŒ¡ >ßžuƵ\°HÜÂÊ®*;çÜÄ̺’΃I: OžÇ¦–ü õ¼þ4 •a‘¡­Èþ4–îËž+£îK- -…•$¿Mf`BÑÙmØ/mCI­?&‹+òt¤»€Q–ëVøûÍl$bê/1e½* -ñ¡ F%ÝS¯©)ßÍzÀ¨7$À⟠#¼ÃçÚÂçœù‰t ]xÿçÑå=I¸év �îjè·�§MÆ•W•9ç¶½ ÈÌâNºÎ¹y]:Pæ» —=NAˆ©%ñµ%élߥF›íCý}§£`#O•b÷%ŸÂx˜ªkJzµüFFò¦^ۤƯ8|¥ôIÏ]œ0ßá).,Õa5!¶!X‰{(_(Ns„Ü2ÝubêÛq(é2æçxž€íóõ�eô'rîY^›SdA`éT>´$ùàRg‹›„2ˆ¯£>ÑŽì˜YjŠŽˆ›íæ´m·cèô°Õh�1æ¥FÇ%'w(9ç\la-)¥Þ5%D-rwâí\Wf}ùîP]|^ZjÈ_UŽ©H4%]Aª®¤þ]h€4�*›ÐR'…Õ;UDCq«S{’zAˆ)ìì7oLjZò¯ŽƒU´}I £ÛH[Ü1ÝTïÌv‡n×kjÓu %!M�)Gqc¿¥ÛÑß³cèÂÏÑÀSVæÝÆí²à¼óv ÝÌ牤I’¿³,.˜'ÉE?.Xc™eÁ¥ûÅ>~ëY^ IDATž8’ï\q® ×:UMCý¶ CKW13ؤó PÕS…Š(ÿœÈbDÜI‚ý:öy¸k«ÿPLAˆ©|œ]�Zò!¦, ÍIö¼‡€"`�Zr==ìNu¬%£«°ó.•PPÓëýyß,”™C†�¢_ËJ¸P'zûÑí ÿóv ]ðùöo+K`‚KæIrÒÅk,³¬h3ÿ"®s}™ 䃱a�7jê:—äOnF#ýª†k¤ÿ^=}S£UCKQ·�5d6”/\Ò… ùñű‹ ~ó‰‚1W1â¬<PHÁ·¾¤³ ƒd8Rn+ëï¥r3U¿^ÓHwu�è'`ž$ç,h(¡à|. þ, ™Y* ÇÐ…cê¤åc:Ó’$Üvj ÇÓÝvs*B¸‰à€y’t\âB– Ox[ºßúx²ï–ì;¾ p˜Îµ¤ø3�ùÒ¾šÚnæW5Ô¿ªQZW©[ºß…i�0ølâBé�¼êʹ^Âïe”J/h›?”nÇ„!¦< Ǹ@qL”ÝHÝ*êÊ/¨êKêÞL©�a)ê¨;.üYn CMÑ:él7§,-,“FÂM#I#ç\'‡í¹¿ ι¼o@Á™Ù…|·™…œs¶ìë@ÔØnÛ'7÷�’'$³°ûÒƒ"Ð×t®é‚ÆL?¯ý[Ù^/G E'&¤Í�ººLù·öäÜIòM°¸‚Ñ`…, A»ÿ0Ä”täÛ:xž€b0»Òò ãqܬ'þù%QGEÁ‚›p]4Š~Î#€:qÎ=Ëávî¡ã€y’ÌfÇ‚‹¥§’º»4>&è²´zÛaçº2ëÉw_º¦û5õƒ ~,ãÐ’t7JN’.‚QCù•ICù.Àê|‘*íqƒUBK ±�£´‚÷ß^ð!óaÁ0Ä”f!xgÞ犪^S[ÒèfJ7̬Õk „#›{7S�mw« �}‰8çFºÛ_æv{j˳�šÂ°S´›Óº¶Rï!¸`ž¸‹v[Ÿ{]Ffv,À g�§$¨&�ù$`jŸHú·t8~šâîù{:Ö�UÓP5 õD#ÕæŸ¿ß=ä[,ÏÛ�pŽüèöÃ%€PÚ#âF’ŽVù3ËkŒPÎ�ÿìK: öÿ0Ä´iÁ—×wP•[ÀV¯éP~ÁQ[>°N &{¯t_Ú•s˸¿“ó‚Ù3µ%5¯W韣`!N’Ñtá~vj ƒMÑàSa\0OáN^Ê,˜a~®û…Œc3ëGf #ŽïbÔùcfó—¥ý‰uÕÁ¢µLÕÒ§jëÓ™ÔS ôyÅvÑOV » 9 o?ïP7.DÜ&Òt’ÑþDᕼ/$�ï߇’þ”¤ïßê†d«2Á¥zMÇò�®£Óq½¦.]—2×—¿ïC­zM�›i…;‘úî7qèX\P{¦¦|¼%_�‰ÖÄ \J*RsNnŠvjÚÊë$Á%ót´¼Õ,'Ü DÆÂ�.ø–sIÏóÛ¢ò3³sI?*Iß-Ó�¨­?¢–þE5õϪ©OÕÖ“ϯ§ 2|ïÒ)Vü¾b6”žù0]™vŢ׊uuµ^82Ix•}» ÜÏ× -NEQùã÷�¥¨c‰±e›W/IKIÝ›)„œ<¿™îT§vqå”då±ÍÁ%HA0î\«gŸË4dPffv¨¡%I�àâðDÒ‰ÌzZ-8¶Ð›%õ‰§)Ö;¿¦W’|§š†z¤‰žjpûßs„ÚCIa7¦¾¤>!¦’òÁ¼4 b]m,¢Õ=vR>¾ÐzÏ�‰¤.]¨¶=SCþ|³%©qí*t.oÖ,ú9eX -ÅuŠíKêXÊ׎…–¤$çòtb-œk§áži¢å¯#ivÅF sÎm{ ÔÌìT¾p–d¼Ò"t³z(¸ˆ|¥‡÷m4´4ïÛò�ÉÚE†ê÷t¬©Zz7só_Ô³Tº.MÕº .ÍÚSWïkåI_#Ý…˜v­XXN~üæ+möú5�s�M~�™]iùsgà6¼  ˆ‚÷œù/ÊË ä»,ñ>@Å왚º *Ýéí=»v%Ö¬£d§¨‹K=ùK›!{f¯´|áÃDÎ=Ëks�ÜžéRá¢ÀÅž_»� ãmÅ£mo”•™µÍ(ε~è` é9;ZZš(n �sax££5çÑ×Õ×çÕÑõLß©ý!iO]}N½ÔFÅ-ëê”`|ÜÚJvñ{›’œŸ5•n·ácÝïäÔ¬×Ô¾™þ¾B ê5…#Ó£Ú’z[Øœôøóý¸ ûxy$yÍ+Ãk|©\°“ÌN.´Y+ô‘¤:,­.-ÍëB3T™F_ù°ÚH>¼vgq+ÜßZÊ  tL\Ôßý¯ëï~á×õs_úyýkÿ÷×õoþ毦v›Ó%µº?¨ÿ!ÙOKhW‚}þ±?•/ÐgÕJ|$©˜á> zªÒ�c øŽGi_œïéábŽÓ”ou3Õ ^ÓD÷Ï�Ë\bL\ÕÌ{=šÿ>”4¼v¼fe�à€�bw¡‚MÚ“O仕'`S 1¡¥Ž«Âè+ÿ7Ì+jÜÿ7³0ÀÔŒ|^ÛŸù•ßÒýÚ7õÓ_ú¼~úK_Ðo¼ÿí¾ç_øÍO6¹‰Þ,Ùäo×˯HúŠ$É,ZôÝ«›Â Øp߸‹ÓÝèìK¡#FÄù¸ví™FZ~¾V†QqIÎÁRí Wº»òã×±;º^˪+qž’<ß .•Dðß—¯÷% ®]ª�ç�€9ç¶½ � 3;”t.ÆÂm�ù Î«9_ªNhi¾X;ò±QæoaOùŸú.ýÕ/}^“§ïI’~ç'ÿ¦Ÿ~¶ñ¦†~GWútNÍî‘&ú¢ž-ûÑÄA¦±éPÒeä熑�ÁÖÃLwcóxƈ8 _{¦KÅ.:…ïÊaö‰–ŸgåÜó4o2v*©Ëˆ¸ÝS¯iÞâµ£›éLçê21»R|xé`g:O) ¸`'X²¢Â2CùÀE¶5¡¥+=,’N$ì|hi³hˆi£Ñ?ý¥/èOŸèÏüÊo¥²i¡ßÓ±>U[Sµîu_zª�>¯Î*¿*HÉ̇’46�kq—´çû.界¾s[ô±É#°$I}9w”Óm…¼Ÿ\HÐýäaÏt*¿j™îµ+øèó$µç,Ÿ�Á.¨×Ô”ôz査7Ó‚?Wñõ€¸VÖ#9w�ÇæUAp ÀNØ ¸4‘Ôut8ÙHLh©ãV¶³|7¦CÝ…e ) 1Õ4ÔÓtÓ¾®_h~Kbn8hß)Ÿ¢úöïÿ‘¤çŒˆÃ®3³Ù‹†BÅ k{¦E݃CI½—–- =Ÿ×·^S#øÙ�“°ŠzM¯t1Öèfªr{|ÇåÙR³Xt¬èɶ7rr¢‡+¼âôä»,Ø€ùÕh„–6å[Œw%uƒ~aˆ&n\A®žj�V`)Ô~«ï˜û…oÓÿö»²& 0„7:Ü(Üã»\I¾¨Ú�ï¦ÔR~]•æ™H:"´„]f>U[¿³ ®þ¾Î´—R�ókz¥éÌ®Ž»[ŽÊÚH¾ÓR.¿%#5ÃØ�pò¼�\*ÙªfFÆ$a¶ôâðÿ§/ü�ï~ïkKóK¡ÞÍT'©o*«^Ólà§3U¹Æ©ùzËeÌw ä\'�ͪäѶ7òŒ‘Ytѽ'é€ÐRª-mƒs}9w"çžI:’ß·K»Òï©úÃz®g:Ñžºzª�NMéåyfCK´Û^ök(éy^¡¥À¼ç«äGA´—|H�ù‹¯•,´$ù‘q¥kä`n§¤ß°¦þÜã }÷{_û“ZÞíXGæÿ 5ö>!ÆÄ!¸@’dfÍmoC‚ÀL´ˆ0�Yvâhãœ3»¡¥í{bê*ùø´Â¨i¨Ï©§÷u¦Ï«£/꙾S©�sûtIíñÑv2_ùñpyßxÜ… ^#‘93k˜Ù¥üJæU.–5%�g³U•rïœ0 ,ýO^ë¿}t¼èg¤ Kµ¤gt[Â,Ê©×J^J²½³- \zmf.ø¸ >΃�C3«R§�3ù‚Û‰s®ãòíhRyAhi^µ³Ghi‹|ˆéLÎHz®’†˜BORÜô7ZœÛL+µ‚žœË=´”°SMi÷”C¤ËÒ:0Fâ"@Ci­ÀÒÁÍTg7S4`-óŽÕ“vWÝ>_�;oÊ9Λ�5<Ùö(¤öÌgÉ�›ªÄŠº ¨ôlÛÛQE1¡¥Jì?•àŸCIgAñ­-¨R@1±eÁ¥´ÆÑ½QS¿­×z¢‘jê‰Fzª�žh auåÜ¢q–YÛÉÇÅçÎ5ÿý#‰¾|™‹h1~öÑŸú{ÿ“ýKqa%É–z’º„•°©›©&u‚=÷,Op)Ùâ ÆÄk"¸@ »)Q¤ÂRfv*BKåsbêÊ�Œ<”/–©€¸±'=0=Ñ(µQqÓ 6ûFÍÛÛ¹Ö©$éóêè©'*~G2аH�™µ%]HK„‹…Ýé´£^S[Ò©ÿµ¥çzïk¢¯¼ûÙÿëÅ£?ýÇ ,!eÝ.5ë5µn¦)­Êc†1*€ßêXbD–0³cùn³„–JĹ‘œëʹŽ|W²ùÂ[¥‹ÕïëLß©}QÏôyu´§®>§žê)Ö§Ký�?W€ÐÒNÕ°}fÖ0³sIWZ/´Ô—t@h ^½¦ ùã®…ÇýßëFúÏßžè·?{¦¿üößùBKÈ@9ÇÅùE^qç,£`a€5Ðq €”lDÁ%Ì„–.æ|i(é(çÍAZüÈ¥^ð!ù®(áG%ÇŠ=ÒDO5ÐÓ  - .Mžº¿ö_¤~ƒÙà}©:=^jý.Kgnûa?€2YBú^7Òô®«ïÝÌá•Y[ÎÑu©¹™jX¯i¢û (Û’º[Ú¤¤è¶dŒŽK¤d—Xi‡"#~f %uœ¿  œȹ39÷\Ò�¤3Q˜KlIp)µ™cS{l:ÛZÁ²Ø‰sŽà6tYz¥õBKIÏ -¬¬«™ºNØaéÿxsð0´ä¿Êh¶ŽÐ®×Õ%·)Ip‰nKÀ.�—\펃±1§YßÒé˜1k$BKÕv7RîHΙ|g­®(ÔÍõN ½[ü2›æ}v,ÿœ|56¹±éjl:›’¼®Æ½ð|ÆF̬ef¯¤Dû㬰ËR‡Àꂱoa:iôƒîÿü‰%�¥Á%da^¯âîk~L\Üâ ‰a l„Qq¤õº¤*,�Jj˜ÙÈqÂ_hAhéJÃIG„–vŒ¾úç¬YCwãä*;Vn5õŸz¢Ñï¼QÓéî~ ¥˜}-Gû ßz?î}€PÖtYZ7˜<�tB` `c]Iƒ›©Ò?.™þ}-?hɬ)ŽÃ�®EÁ¥¢Öä€à)¾ÓƼ¢B*"£Æ¢Å²s3~)&ó«Í…–:ytçB�ùç-A&¯'©ûÈ}uô�3_ƹ5•n hÑ}›ä6¶`EõïZu×9w–â&쬠ëR´¾3�ïÚºL[w�š€�ÝL5©×4ÐÝ"›�Šü‰{ŽHÖM�]Ap €´… Ap1ó\óW.5å;3p±²`̇P.Eh I-2…±ã*Kb$_°ôK—ûNC¥ZÛÒ`H+¤ync%ÑNŠküøP¾ËûÀŒzMÇòÇYÝ›éF¡¢$Á¥]Zx‚üœHÒÍ4ÕÄéó‹-“,ò!¸lˆà€$R½pŒŒ9Öò‹™ÇfÖc4Lq¡¥+Í/\žq�‰Ì™$É£A¦¦ÊÓèn…èvŸË.(,Ý® ó]"cÓ•|*\­=Üw¢;nÑe õšNåk)á¹Ò©6놔$lq¨ d¤¥ð�¥;IÆÄõ–-Z� Á%`Ç­rÁ:¥Ûš ·HC¾#ÓQ¦…DbBK'Î9ZÇc}> 8Òý0SCwãåšò¯ Eèί†òa¥¢(Þ/û.•ÕŸÃ`¼]ô=ãT’Ʀ‘¤î¾c„Ä®3³Cù÷ùuž§#IG„`š]àѬ×t¼v×%ç&2 Gv-Ò�YkË‹4€üùšD’1qEs”Á%IlT Š ·Ì¡™µ�s´\Þ¾ ZBž| (»vŸY`ŠîÃÛt”Á(ò1 >†Á6öµhßéllêÉßaØ+é}‘äû&K¾¯©tÆÑ¡¤‚pë…VŸuå;-%PD]= RlÚui¨øN™‡bt4vO’ÐÒ¨Èu L.HÒqi­ ‰Á…̰•ùº]RÎ%=_óg‘3[t1ºKh [±êjß» Ó2ÃuOZ˾» \­Z8Mòú<Ñòny—vT ]–N(Ä»™jT¯©§»@EO>Ì´‰¾‚NªKlº8(£$Á%jb@J.Hbå ÒÁ…Ìs% ·H_ÒÙ?� ¡¥yÅšžsŽÇ&gï}Ô9W0ªì³�¯Š$ÅXƒ8±�çÜpl:_ðåIšÚØØü{FZ¿Ù ÂÉçJVП§'éŒ.K+ ƒJÝ›i ÇÌÎ e6Ñòs‚¶Ìe_è$fv1ŽCpiÇìÙ½.×mIÝkǸÀ4\{"îœK\ ÆÂ](Y'§EèÀPf¶è‚tÏ9w’÷ö@Ò]÷²ó÷>ê å‹dýÏ>¾¢€ŒM$ ˜.Zi�f0ìXÒéØnGô å߆ûŽñEa¾�¡õÂÉù÷xŠ»+ ÂJiŸ�÷Foßì‚$#°{„ùªoÏÔ’ýk³çÀ-ñÚ˜ ‚Kâ:m$: �Œ…‹k1w[tò)3;ÖüDzOhi;Þû¨s¨ûÏ×–|pàâ½�:}ùñ`¥ 1á‡{!Gžÿ[÷>†Hûº+ÖE¥( ‹€ ù}#ºXŠ·ƒ5/×üñ¾|h©4¯SY¨×Ô”?çîßLWõœ¶$Çó—°|}3IWYž»áUÌ×7Y¸‹‚Kâº%İR ÇȘ‚BKs¾4Tú+;‘ܲbÈaðÑT¹Æ+¶õ0 W¦í¯ŠE�”îÙwwÏÿ±Ý[m˜fpiѶlûbî ä»`­òžO—%Ý ,…Áˆ¦¶¬›äö¹8�]‘$´4]âwÅPËk&­=SãÚ%[ø‹Å.X;l”ÒX¸¡|`‰þˆ -u–mU’Vå„�…Á¤`l[ª£ÛƦ†¿'1&® œs3;‘t•ðGò¡¥ÄcgªbÏÔ”ÔxóžÂ..³çuízMí­v]rn$³¸‹óM™5Å1ª/Ip©—ùV (Š_ìÕÒö¨¥÷hÛ`{‚ñnq\,6³†™�Kz­õCKùÀÒsBKÅ`f-ùÎY³-mÙœ1qóŒ>ûøŠpVŒë+ŠeÅÀÔ^ƦÓà£H{©ïÛݘo ßç;„–À®Ø3µöLÇ{¦‹=Ókgzýö‰~^>ô½h1ʼ1íyKR—IèÊËŸ'YàÉ¢±Ý‘ä\–ÚB è¸ì¶Dã�¢‚Ž<çŠQ,ÃX¸‚ BKWzø¸N$ñXm]’"…3d%¯Ðɲ÷¤4Cy·ͱIòßPRoß±Jr]Ý�¨œE—%°3öLÇòçlmçÔΤw�ýgIõ%?>R1ÎåŠPŠÑÞÈ@½¦†üþÕ >ŸÝL·ÒÕ(Y§kÎsvI’ÁÊõuTyÏ €n¦ÕkêÜL·6¾;I§ù¾œ+úó¸vî™&Z^Ÿ£ã҆춴Wƒ„cᾘ™]hþ 5�³âaL²·�U*d³ït°ïd’:’ÎäWÌ”n@ká{+¡%€JX®0'=~ã?fBKR9:r$ç»8©ÙZhɬ-º-!^\Í ±g‰ö#,@p Ømiš’ž;çΜs\”-° ´t<çK=FýË{uªö˜8”C%W”î; ö�ºûN'ûN�}§³ý¢b%#8*àfªž'ÿÔ’ÀR¨ø9|G™$¡þ$çª@$é¶4�sœÏí¶$¯‹Å�/0‚KÀŽ2³4V�ŒäG‹uœsU'T91¡¥“¼·±’‚Ë<&[ffIV|F]ÁØÔÐâàRjï“cS{lE¶(\øÓ“tp3Õ�›‹=ÞkíYj Ȳ”¤³Ì¼ÚP.¾Û�®‘D’àZºêÁ%`wm\ú‹ò]–h•\fv,BKeCñ YKrÑ„àÒj–*Ó žKº›ÜØôjlº›ÎÇF¡ A×¥ƒ›©Nn¦·ÇyI.l—!|žä<³¥tÄÛ”$€7µÏ�wí.e�à°»6Zåçœû Œ…+‡ ´t1çKCBKÅĘ8ä$ÉûÝôVו¿h5û™fp©5óßÇò#îÞͬ�R‡E€Êª×Ô¬×V¯‘DK¡$ÇÎÅ¿°ík=IÎ5麄òòçIIê.ÝøoÁŽX^)Ýsþ�Cp Ø]›˸�]ËBK’:9o’KR<0&*þE“’Ùwì;�í;uö�žI:�t$©»Ÿl…f¬˜q·¯ fv.éJóßv^Xº�ôZ>¾©ªt\’’—’œ·E•ä9O·%D gþ»+éDÒÁµÓÁµÓÑv6«žl{”R*_‘-3kiIh‰ŽY…Ƙ8‚sŽ×û ì»ÛU—i>_—Ά‘×þðûÚfvêœc¥0@ ^Ó¹îŽë5uo¦ë�J¾všì™†Z~¼ÖÚ35®]ÁG2;×—ÙDË»´6eÖ’s,nC¹ønKI:†QwAT_¾¦:(ükx Ñq Ø]t\ª°àÂõÕœ/MDh©Ð‡Ñq©œ^<úãúî¯Hz¥‡�íyð¾�ÈØÔ›.Ǧó±éplbܨº†èº4‹qq¨ª$ûíDŒ‰CĵÓðÚ©Oh)—€ÝµÉˆ):pX$´4{q›ÐR9$ -}öñ�#²Æ(Âbš@úš¾ú­ßÒø?\òs«ŒŒkÉ¿�Jº”ôzlúdlº�7P ]éÁÅç4FŸ%YèU–ã©$#²‡r1k(Yp©'êg@n.;Ê9w"除#ù‚]Ò0Ò0�à‹™µÍ·nÆ Ì`–…–è–U|I ¿„‘†¸ &—ŠéHRGþ½»÷uýöW%i¨ÿõÛb~®efç ocÞûoC¾;Å{PzÁH¸0˜3’t&éy ¿zѹÚPþøíDÉAÛçëqç ™^B™œjùÄÝ–€=ÙöØž €ÔW¤ý·™µå/L¶4¿}y^�‰«`{Fò¾¡¤Á›Å–„–$BK¥ðÞG�¦’� `LÒW¬% R@û¾-ý x¼�ôEIÚO6ÍíÔÌú Þ…Ú&ûŽ@¨Œ®¤ÑÍ4½ ѵÓdÏn». Ô2J-ø‘$bf‡’^k½ÐÒH~d虋yÐÐâÇ>Í~øz×–ïu.éjl~T,@œzMÇõš^˺җ¤®pŒá6tC›]4±îâ�PÒ׺-[@p @m8Zd:´ŠÒÌìBþ‚ï¬.¡¥ÒaLò´+ÁÎÒ3³†™]JºT²±³º’ž'íH¸ï4Üwêì;™¤ç’Ž‚ßŽiMË¢®_¬nKÍ–¢ÇÍ ûÒÕ—�ø%8†4Íž¿4ëµ5;ûnKI^è¶l £âJF]’ÚŠ\¤7ßæ<¼;HÐ}¢�–„–zι³¼·cLŠ&Í� Ö¼'®XšÈwÞ[»KÛ¾»Åšj§·±- Îq¡Ì„’Nµ|ìñ©’uBRÎMdÖS|0éPµ¤¥¯‡ûÜ¡Ö눔4ÐH·%`K踠hòèÒ’/~\JúÄÌ^™Ù…™›_…UxfvªÅ¡¥“¼·›I8&n"ÆÄ!=±¯ue uVAÐeé\Ò•Ö -õ%lZÊØ²×»ÔscÓùØÔÛZ÷!(€zM�zM§ :,ÍHâ|8IÂ`M™Ññ ©¸™j¨‡�¾V¯úÎët[ ŽŽKŠfÁ¡–"QÍl¤û™ U¸0_<Ÿó¥¡¥ÒbLòä`_Û’ ËRÜE¹E6î²”“…Û¾K§³ÜØnCʧÁÿO¤»RA7)PPõšòïãÇŠ?víIêßLéP›çFA×¥¸È±èx…ôôuŸk×kjÜLW:_Mò"Ñm Ø*‚K Å9w\´mˇ‰òèÀ4«©HaÄÌ&ºdÚÚÅÎ ´t1çKCIG9oÒØ8ä-.C¨c ‚.Kq#8顖Ê:ëɇ¬Ânsáþ˜æ~7ÛÕ©¡»Ñ±¼žPPk–º7SFÍæd6D2OKfm9ÇñÒ0ïü ­ÕºQÓm (sÎm{`© ÈvEjk½±9išÈ˜r ÷ÃÕœ/ %uJr±3‚1q¯c¾mòÙÇWÏòØž<ÍÛ§�s¶¥ÍÙ)fW8ç:¹l df-ùPjÜÈÈy&’ºÎ¹R¯›ßwéŒÄ›–…Àží;ºŠP$–JÂìJñ Ìúʹ^‚j ^>™ùçÞÍ4áHÈÅu´Y—€í¢ã€Âs~¥Þíj½ào´#SÞA¦FÞ·üÍ—s¾Dh©ü’¬þ+úØ'”ˆ™%yý¢ãRN6ì²4�ï²Tú"{Z#â"…À&„–(Žzí¶ã1�¥rè+>¸t(³&AlêfªI½¦�îïs«tfOÖÝš}Ø:‚KJ'Õv{Q=õD;2Å�@JCnõƒ¿ïJ‹¸•g,cLò¶NW¤Œ.K™[t¿¦öþtuj¿s$i¸ïý°¢s-?'šÈ–z– À¹žÌN_w9–t–áúfƒKÍzM­›iÌq·_°“lL€­#¸ ô晚ºß‘)‹ S.A’˜ÐR'øÛQRï}Ôi)~ÿœ|öñÕÎt\2³a¼Bàµ%Cæ/öœj½î}CùÐ*�ÑcSS‹ïÛ4ï·ð8ãöBÊØ»î;=Oñv¨²žæ—ÂÀR÷fJ·Ä‚éÉΖ9–YWœÛasóêomÅ×' -�äÜÎÔ[€"#¸ r‚‘9·+¦‚ S´#ÓÆÝF‚ñu™ Æ9]ˆÐR•%é¶´kE´–è0•©àõË$ÉÌÂÀEKwc0›«Ù³¼]hµñQ]ç+×cì;�$ÙØnßû£Çi¾w. žr�€„n¦ÌŒ‚"°T|=ŇðÃn7tÅFn¦Ökéþ±w[ñûÝ–€!¸ ò‚ ÓHA$E;2­dÊ+´t¥ùÛF§�ê`L¶*Âd?Ë]–òŒmËä>ÛmÈo'VÓ•?÷%°TÎMdÖW|0„àÒ2Ðýý­]¯©±ðµÂ/ÐIÒ}�àP�¶½�7çÜÄ9×wÎ�9çžKz&©#_PKrñ>Ó ’AhéÖâÐÒ®uà©$ÆÄ»ÁÌfv)?Nc�ÐR×9÷œÐRá, =§Ö±llkwç 4n¦ÜLõìfª3BK¥‘$�Ô”Y’Å:@œEãâI²ßõe—ì<ç E !Áø¤hW¦¨¬;“\Hú§çüûPRÃÌZ\À®ÆÄgþBͼ‘ŸIŒäêtÃ*¦eJÒµx5¶Ûß9 >$�‚‘xJ½¦¶¤ÑÍ”÷©Jsnt]Š;¯=çµØÜ¢àÒÃ}Ë/L2&Žý(:.ÀιAБ©ãœ3ùŽLgò…�ÌBCfv¡Å…¿–|ÇŽWfö‰™]šÙi²Bù\**ÒeéRkvY’ôœÐR¡…�çe÷]:ç™nKMù÷�SùQ²t/J½¦v½¦+ù÷©Ómor‘dÌV[Ô,°¡ Ûì1ö¢ãá$¡¥‘8× …ŽK�@pñ8Ó¢FZJR`‘ü…ðÃàCf&ùíJp±»:º{ ç�}öñ�#PNm­,™H:â5¼ø‚pÒ@’Ʀ†æwhÜÔ²q¢t^F½¦ÙsÙãzM]º.Uœs™�?ýTÙw®Fõ tÿx»Q¯©u3}p\œ¤®–$tllÏÔ”Ô¼NiqK•\€0³s%--Ž·;� 2I#ñPŸ}|5’ïªÒ}ï£NSþñ?Ô]Ñ—nK@I9çú–ltFT_~4¯Õ%³ïô`älJ.ÊbÞûÒ©¤“¼7¹ëÊ�F^Æw]"œ�ÍÌÛ}ýñݽâ‚tõddÏwÍménaKC~�Ò³mnW˜snÛÛ;ÍÌŽ_èKÃmˆI¾+Ç è½�:-ùâ[ÿ³�¯*}a:sx5óϺ͠ ̬!éµâGÅMäKÏqÏØt¥ù]œFûN)ÝFz¿·Òï;€ìÔkz­û��ÁÍT�mmrdö‰â�yrŽý‰¼Î„õ­Þ½ÎnÉ:™÷åÜQf‰�³g:”ßï–uà=¸vt!\†ŽK°E9†–¤»?ámGƒLCç'Є•¸p ”œsnbf'’.—|]–°Ì¢ÂwšïmùŽ’¤±I Ž ö�ÎR¼@õ…�w’º7SÆâì�ž"Ç Ðu i8’4™;†Ò,ìd‡1qH[’±ám±ï-Ep ¶dIhéZÒ^›0dé~G&‚L°�%#ã&’ºÎ¹î6 åÑ‘Ÿnè~1<Í÷çÖœ Ç\¬¢/ix3eÆêÊFâº.�*ýѺØ!1¯/IBK#ÂsÈÀ@ñáÍyç]ˆ`Tl�™µäGdÍö†’¾)éOæ½MsDƒLCçh¤ŠQqØsFÆ ä»,ÅÊÆ¦–¤É~JcƦE£]ûŽñ>°«ê5ÿÞp3]!3¶g·á䖤ɵÓÉ–7i=f犿p/I‚#H]ò1Ýgbñ2°gŠ ÝŒ®S÷]U— gKBKIÏËÙA¨#,`ƵÎÃD÷;2dÂF.aWûú¥è²„›’>Yðå.£â`÷�¥SùÎ%½›)ïiÛ3…çùÍàs´.0¹vz¶• ÛTòàÈ@ÎŽFºw4ŸõLŒéFöLWНÝ>»v‚aTä(&´Ô‰vàƒ™Ÿ�™â ‚ikÈ�;: ¶§ïœ;Êy tœs3;pÉQ,ËÆ¤Öllz-œ3T$½OÑ c&°žg×kêÒu)={¦K=!ÕØ3µ®] Çí97‘YOñ]—Ú2kÓu )KÒí«Gh *>¸Ô–«Š9m{`Wã‚.µ8´´´8éœ:çºÎ¹#çÜ3IÏ%�ÉŸôncäPùŠ©ÀŽ3³–™5·½»ˆÐ ¨)-¼�æ{|S>$u,QéJÒ'cÓyŠ·XC½¦f½¦sùN9§º®†™�ž$ï¯Eè¶¼®®[D±_!=¾ÛR’s\:ß"KI^ß—-Ùyt\€¡¥+Í/¦­3v-ø™ÛŸ ÂÑŽLY‡X! ”Ï+I23鮊¢Ÿ�s¬vÀ¾SORoljên\MSRk?¥Nc[zñ•0lI½¦¦î:,-s(1..EIΡË{a›®KÈ›¯µ%  épd Ú¯ï90çܶ·*-Zšw‚zâœëet»Ñ Sø‘–IÐõ X›™µåŸQG;3fWê9çNrÙ•76�J ;+uö!hÈÓ �¥‰¤žÄ¨¸´í™>Ñò±ï“k§òžkûúÇ+Å/¤ȹN[„*3;W²àR‡ ²¶gz¥˜Ú뵓å´9¥Ã¨8È^î¡%IrÎ�œs=ç܉sg’ŽäÛcoÚI�‚P2f–$¼È…)àÿgï^[[Û÷¾_÷é9&¸ÅT'Äé¤*õ&RZäA$?$:/Ø´ÿ€5ê “#C‡¥ m(djÏ ÍÄ‚@¡“"‘ ¡+ý ¶¢ƒÖ�£â¼ßüîžG¶,-i=’–¤%éû�ÍûomkmoyYëY×sÝ(Ò›–E…–F¦«‘é&6G2Ä‘p #á–…–Æ ×‹ßÞÞuOhi+ò~þU.ì€[9Âx䔑\¡u XW¸¾Í aJÒ€Ðv$w­õby#íIcTl‘™=h¡¥,»ñפ jº‘i•‹g*¶�ólg÷7§iQ˜¨È÷uI’4²�˜ƒøݪs^pºÎÏ4¹±OÃRy Fð-S׿›�öÇýQf-å·.µÄ¦(¬#¬g=(í—q—Ø•”óv]œ÷2\€-‰¡¥¬âÇ]‡–²Ì™¤�Ñ]“0Ó² ÓÖ/²ÍìNŸ ™CI}w?ÜÅ[`ÿRÚHøP¤ÉÏðÙ‘µEžk¦Ïm“Pöä=LwþápüÎÏTW¸–ÊÛœ2T8WXÚ�”kéÃm\úÔQ /Z—hÃÁ*ÌnÎo)ß'}^_Ø¡S9¿oÁ%Ø‚œÐRs×Ç“ÊÂÎÇ…öL�©¦¸›Íw³ðSS¸ùñu4³q<¾�2«bŒÒŒØ<×’4pw@ÁªþuTÌ(ŒF¸R±�K‹ÿÇ´-85+–:oïÚû†šSóê\„†ÀeM1‡?JˆÖ%-\»ý9ý¡ÿWýã_nôϬ¦üË�þ§¿Ü꯾.W¥Œ- ñê&œß .-@p ›‚.´”%#È4 íBÖbmE¡Vÿ&Ï$È4idbÁØÀ)}Å`æƒÂ9mlfýØD`Kª¾•“‹ÿ 78E7Zz!°T}-W¹0Õ^ýà–Ѻ„"}yÏ÷ÏíJÿá¯?¾<àû¥®¿ú×/¥.¯+ìÁ©œß ÷˾ŽI -e-Ì -´”ÅÝwÒJ[PRR“ SKRÏÌÜÌzfÖŽ¡ŸØÙ§p~1³¶¤ž>Ï3åßTP2#Ó•ïh.ìfÀÈÔ™F¦Vl�€²ZÔ.2”Ô|{×7BK¥�Ò—�†’~ )åäðÏï[@p ²,´$©±ãÃ9t›\ÄOÆ#Ì™nb @¶£ßñ[ãz çˆY7ÆY8ËBÎEžÓnÚ4Û’z#“�L?F¦v�Ï{{×PÒôF“�,•QJ ̱l:HÕu%Þ‡#ßÜzÎÌX8ýŸVÓ?·+IºmºØ�Eç÷�ÂùðV_N#bT Þ _ZbüÐÊŠ\¤­k*ef……„�Âx9þmp*ò¾¯Žú{!¶,åÝi™Y×ÝSv†سª«?2]+˜jS¿*JkxÈ52-j�ÜÕè\XÕ£Ây°óö¾•�ØÐ««a¹;ŽF÷ÇJÊû¹Ù’Ù#a,17~ëüu_ÿÃ/áï¿øë®þžô›þòå~ô›rPN¯®A<¿¬;¾ng\öÑ!¸šjð˜5¡¥ums‘vrSSÒG�iò«O`G,¯qì(_ûSÁÒ”@ädd-yÀ�¨úÇÏð��Ë#S¥ê……1—�;Žò¼ à°Å°7I˯¯å×½• SíÕ�¢µ£üqp…M÷Û?œpM7~û+ïëùKcºy©#w^CØ«WW~4s˜ -ÍÆ’n -­.ŽsÛe-~Maü˃¤föÃÌÌìÎÌhSÀQH|-Ýù*Ž~{Öjç”:#ã€ÃV`hIÚQp)6;Àçgº;?;’æÌJ $Ǹ8÷G¥ýÌl‰kpd›k[š ´—`M1°(´Ôpª©7ÑQX¤ÝÇ"ý•B�I’dfC}mdâ߇è¤nÄóóƒŽeÄ€}Zxþ¬4öadªKê�Lc}¾çHV�£iÀ ÎÏ>šgî®5iP:N}-c<Ðqm,h*»©zV[Òí–�‡ç.ÿ!œ'�CFp Ö[�žDh©p±¥êc—œ™ÕÂWñwÝHpÝÄãësV}—Ñr8)ß7G±ÐÛ’ZZï\1�Ôä`ÊX¡%b6ÀTäybò¹+ ïu>B—#S£¨€€ƒñ ¯í"õó3Õã8‰WWÿâë0¡É5f_ÒàµØöÀýsïË,o<ž$ÝȬ.w^ïÌ&!ÎeƼf€ÃFp VCK=e×¶ßsûXŸ> âx¾º>™vdª(ÜH¸Q¸™ù8û€ßþhLvIw~ïñz@ǘ‰% hYê8£̨ºîÕ±©¦4*ò†ò²V<ÞG§çQóc‘Z:’�9¾hJ¾žN@µ)éGÂãÚ’®·|,8)mKÝ­€­"¸+È -5Ý}.Ä‚bÅ`ØÇM¼© ÓÕÔÿîʢ慛 ­ßþh n>t~ïÑ΄2;Ø›ãfv£ZZ'È8T8ŸÊ #kŠÍGÛ8W, —«ÇÖ¸ ×Û»úçgsMo\G¡WŸßsÔ܇2ëhùˆl&Ž„êÆ_“QS“±r“ÿM±(ô�r0)0Û¢&-RÀ&òüâÆX/ø õF@ŽZ–(�ªk,}m<Š-L5\™*Zô,2`Êù?–ÑŠ IDAT™®n¼ß)|Ÿsí|jj~lx–¶ÂÆ#œÚ–€“Cp –0³;eïòêZ:1ÈÔ×T˜(†#–™Æî>w£/މKE—º¸Ö–tcf“cHêg=7°H çå)u8.þZJÛu›¥«Z:ˆ€€ÓVu UìyyÙ{“RŸÿ�Ct~¦º¦Æ3Fwçgê¼½ó=H’Üû2ë+ãÐ�Ìê¢-õÔ¤\÷�+‚K°@ -=düÖ@ì–=jq„Ôl�©¦Ï Ó&mKÝŸß{©á‰É"n%~î›x<™°Š”0]i™YMa,-K°že7… {12ýˆŸoÿwCXÀIXXšÖבÀ´¦¤ �kKºÞò± ,¦•”µ•GelL9?ûX·©Kºz{×·‚�À\€ fv£Å¡¥­§%#È´¨Á¦¢”XÖp³Ê˜¸eÏ3dš|ÞI�‰Ý¨XU)ÃoqTçº-K}…Ð7Íœº…ïKª^Ø8ººBÀôjæãcIͪ3ÊÇ+!°4‘:’8 îC™=*$XMfwrÌyŽCKË×T&æ^çgš»~ý²ï€²‰í„–°Ð¢×ÀÏï½ûŸß{¿KºUXD›}ÜXécâV½±1¹aÒ337³ž™µc[N[Êk Tç53«™Ù³Ö -�%Ý»{ƒÐHUWSÒï’ #U‘ |šEí~“P7ptÎÏT??SOROËßo %5iý2Ý+íçD[i#°qÈ¿q^�M mKY×zYë-¬‰€Æ%˜CK=ÍïâÆ rýüÞë*,˜5û£q£°Pv£ÕÆÄm:ÞkR�ÞŠ�L}meⵌi¥ øÐ²Å«º&cf·Õʸ¬Õ‰&H$¹6ÝIª<»:û>–eÎÏt§ð^%oŒíPRçí}¾@ä>Ž­Kyïÿ+ #ã·xÜRÛ–2N¼½kp~¦¡¾žŸë‹ <ÌÝ÷} P 9¡¥†»S-��üöGãêç÷^R ÂÌ~(ÿfÈ&¦ƒLƒ}=bToæÃ FÝËÌžÇ .âî¶£ÃY(ŽG|Ðú;b;î~_à!�laã̰êÅ´ÌŒLW’*E�·C¹\‡ßg…k±�¤æsÉþ­W,õK¼§R¥_ÿ6ÄõâñJ{<Ê}a€íüLšomúýí�H Ì’,ÔQ?ˆÐ¶h…ÐÒ•¶Z’B£SKÒ“¤föÃÌÌì.>?ŽGÞŽÕ½/àšYKáfå:¡¥�¤kBK°W‹ÎßE¾‡¾“ô<2ùÈÔ™F¦ÖÈs$Úú|ÏR“ô˜öîüLwçgú¡p½¸ì}r_Rãí] BKÀÊRßË?02îH™Ý)m$¯=)ëüË{ ä ÔâÍìšBÍþXaÄU¡!¢Zê){4W“Ðö`‹jWšÚ•hfC}mdâûàpå-ìïíß––%8…÷Ò³çó"§ß«O?ÏXÒï>vìÚt£ùvȱÂèå½9?Ó�B Š†%`ÛÜ»2ë+ÿºàJa×Ç'e\xWùmÑ‹‚K{ý™`9‚KÊ®®¯ W}I�¢>yBh‰… 윻?ÆàP]Ù7wa6È4Ög�©ð!¶*ëü¶wqTà“òƒUY†’ny@9TýóòÈTSxQS±7 ý<ãgÁ»6UÂA³îŸ}ï­�“×ò"–€b5õ92r™–̺âZàx„kÔ¶¥Ç¼¼½k|~¦Ù�K@É1*@ÙÍ.X¹k[ 7Í…–rD€mq÷¾»ß»{ÃÝMҵ®Үö3Ú«"}ì:6³?Í쉱rGa_ þc­Zê(Œ†ãF”PÕ5¨ººU×}Õ‹ù32]iñÏ ~¶–æoV÷Ÿ=ÿæô,:†GIß ,4é¤~ïgq¸RÚ–úrO=çÎ>îêü¬œz—”ÝìÂBa� 3[4žèžÐÊÆÝîÞq÷[wÿ]å 2í{'<–ˆ­F¥ƒG«ŒxJjÄ@¯;8-˂҅—F¦‡‘©=2ÕG¶V¸+¸í\Y7«›»>–,oïš QLKÍø{ŠÆ@§œ×ë2K » ìÌR[¦Wiq\4.@I\PZqŒÛ¬Bˆché.ã·ݽSÄsÛ”dú¦p“çQÅ7“-2 @rövã-žoSvÍ>*´,Ñj§iÙÍÆB~ŽÅ Ò�B�¦'éÏ‘éÇÈÔ7;·ä!ãc�g/U(¨#KÀ®¥nnh‰àc�µ67k¨6¾½k ù÷7+€�"¸ Ì²jœ7^(6³¶‡–J±»X•»ÝýÑÝ›îþM» 2mÚp@èiûRêð÷}®©Å¯…±¤Ûøºæõ§ëQRC!DÒÕÔÏ®¢ÆÑ)ûgæ•BhŠñ2»6µ5ÿu>ûJmŒ[÷ö®!�%`ÇÂf…” e12î°… ‹)Á¥u6Înz©�ŸÑ¦ˆr¹0Õ/Lí ÓÓ…�öûÍ_÷}°Dá�Kf6ÙE=‹ÐŽŠ»mÌ&7ÞŠº·Ñ�Bw˜Y‡�%Rf÷r÷¡™u4Ó¡+‰À@ÕÐÀ3ÔÌMÈQ±7x–}®ÂÆÑAº6])ûFõÖ®ÇÎÏt¥pØ{_iÜ€ýè(4ää5*ÝÈìFî|_¦”ÐÒx•¶¥)ýŒÏ£¯#@��¹íž“õ¸¬‰C�ð{N‚KÊlîæA c¬%†–²Æ ”^E¤þèÆ_E™ÛU~¹Á%wßû˜»w̬®ðZ+–¸ùXªÀ¶%iÉÍñªóž§`š�ÒyÞÂ×y*°4¹y]—.¥ç>–Ù½¤§„G·eÖQJpiÝ QÖÏ”“n´Áþ\„Ðö�œ‡�ôë“QqɶBK =pjÜ}ìî]w¿w÷kw7}Ž`I¹i4Ü$H˜ÊÌZñ×I/àl o‡r™Ü*ÜH¼&´؃Eï5 G�Lw#“�L½‘©ÿû¤Þã\›n4ß00Özc€RÌŽ ¿:?KºQ`ßÂ5AÊuÁ$ ˆC6®¤\¯®\z{×dóÖ´›u>°©×ÏöÐeNê=á,‚KÊlö‚m­�D <ÌŽ ’-_¸{?™A¦Ùï“]5´¾ŸÍìO3{"È´’¼Æ¥Ò4HÄ0Ýí.q¬ ÈŸK“´u…÷8’žG&/ð9Jë:ŒHÉÚLÒ|ö­�®ÍºáÍ�k¬ SýÂNê5|¯´ÑÖ­„ÁáHywµÙõálø¸r~vÚáìU^¾rqb�öiŒŠPf³7ÜW^¬ˆá†^Æç‹Ð°”»÷5l‰ßO“±r[¼Äç›þÞ­(,nÞÄßÇãJêÇãÅW'»èÀ*ª®kIŠ H5…�QM6.iñÏåS í¶4]Ööí�n{{WÿüL}}¶< Ũ8� ÓdœòäZL ç¥Óx»eÖQöf´Ym)œËQrat}Jûݦ¯ó®æ_;7*ög;�j üÀ^]'úú$¸ ÌföW ZŠåîív%oÇì$È$I-3“B�i ‚L©NrA €Eª®m¾ßYôÞæèƒK×öÑ25m,©¹ƒ§ï(Ñ:oïë�véÂÔR¸ÎYv¬]˜*¯Ûk*+÷NlSÊ»>¬É¬-÷û]6’ZjÃâoi¨¯#éhæÂ¾¤¬Q�ìæ3FÅ(% »¯f%/èÇ?¿,´ÄÍz üÖY°™Üë™™›YÏÌÚfv³à¼r´§@yŒìËMÓY…]›ŒL7#+åMÙ¬¶”Çgß~hëí]ý·w}#´„RQþµP¿Ï·)5ŒÄȸÃ�\*êœ=~ª�ŸåŽT ÷êIï÷Nv‡à€²ÊºPKZÔ^Z’-‡¤ˆçI�éIÒŸfö|BA¦”¿ßiìÒ`ÿ–݈*òú¤-©72ùÈôcdz™ÚqÞ^\›Úšÿûž=9ˆðáüLwçg§{S'ƒ›Û³Â:N'ñÑ:þk½Ã‚e˼E—²¾ŸòÆuے׺tu±<ì~´ ¬²™ro°O…–²ñš„–€ÃÛ‚¶±Ø\ÓÔùÁÌ GC…ñrÇ4ª%e±‹s"»1T¸é^Sø=ýsº�ŸÇ#SeæónåyVqn¾e5k¬Z:?Ó�BýJá½[có£J+eœÐéµ ¹ßËìFù×9W !Î]Œ¢ÄêRBC�r/d“ÍÛ»ºçgÿ9¹þg¬<öe üów]Å÷Á%e5yîdÖ—ûì˜0ì_Jp©è·†¤áÛûÞ~}…÷5Ëœdã£âŠ”¶¥ZŽÅ¾ªý'­’~˜Ù3{2³Vl�:*îž{ÓЮæÊ_\‰ª®qÕÕ¯®1.m‰eÁï}´-Ýiþ˜ÆJ÷GÂýPxO–u/«Å 8&)ß³§ØºÔ#ãW¸¶Ìû7*á:uoïêZB¼¦·OïÜ.‚KÊk6 °tÑ.†–²¯ -‡ÇÝïÝÝvFvv¥íc7ñ•Žж¤g3ûó€‚LŸ™UÌìIÒ“ÂârËÌNr €±ðfpl|ÚØÈT™z#S{dºYöû�ëÐ(ÕÎø­æó‚†˜ó3UÎÏÔÎ ,MœdNJÊ÷lÙ¯G¶Ãý^i_ŸŠÂµ Ê#åz’5<»¼óWíÂö¶™oo ¬f/ÐrBKÍB� ÀNÅF �i1,TW­¢Ý73U‚L7ñxÆîþûŽ�¡( Ëb@)ë†áƒ™]32€RZb(²m©>õK’42IáýÚýT@ª­ù÷iýgŸÿs~Ò ×tyïí%=2&'€VŽåš’žW—YKî©-MØ®}Œ‰ʦ¯üài]'ö½@p @YÍ^ÀeV:›Ùd�{¡%î·?*,0ô%u~ïÞØ1whêæÛT�éjêw©Ìuóy as¯_ £ZZ<îJáF$çWJ¦êºÙGÀ»¢Ï w‘!ŸEÁ¢ºâû¢ëp ³×hcͼX#°ÔaÔNÅ«kxajùõMíÂTy]ÐbvÔÜ2»Wv³Û¬–Ìú ×’Ø—´1q¹sžÇ±KmÔ#¸ûoœÏʺÁ~§ìEª>¡%í·?“E¶IÛÎÃo4º"Ä´WA¦I€i:дM);¡÷%oQøË‚ð’–¥YwfÖw÷“ZDàT]_Ú*·`Q0zXý Ohõ¯CEŒŒऌléû…áµéJÙãf›1°´híÄXÒãÿüýgç¡e¦62 âÇû’ÕS‰…S–r­qÚ›®Ü‡qd\ÖѬÉȸ²^Ã/ÆÄ³¦õ&ïs†’ú¯^Úu¦­"¸ Œæv ÆqPŠ7ÙŸ2þÌP+„–â癄•²nðBÁ´¤E¶Ÿß{,²•\GÂ�G¦?ãÇ'ïϤzêKj¬{ðÀ¡yu /LC-ß”pê�K’ûc—Òèó ³k•÷:îX1&øª«Ï gEp ÀaKa£žæÉÇ’nóvxÕ㯼6’+3«MS8y,²©Ù “ôÑê6ÝÊ´ÈNvÁ™Ù…›�IýÄóRÊÎëÿrÍCºwwBKœ˜jmÒ�¤QhWš‹®þ;éïhþ}ÓPŸAçŽB³ÀôµÜ—ÀÒÔç]ÀæÚ §hº•#Ó…©~ª Sš ç ¼ W¢9vL‰çìS?oAp @ÍÞpÄqn‹BK�¬ù±Ie2þ-¥1göóÖÄâøÉK'±Èv4<ŒøX@š 2]éëbøÖÏñ¹¯â¯›ø±�q)ZdzŒ�©èóœZ“ôïIú&é—5g ©I ÄÓPR÷ÚT‘ô#ãa÷Ïq´ÛÛ»ÆçgzThNš ,MY¶Á„vSœ¢”÷Þu�ú p÷±ÌnÖ�òÜÉl(6cìcâ$ ¸àüK…ñp¹¡¥pš„ RÂ&Ó† ‹}}w'„‚‰”×câŽXF�iÒÄ´‹›Y�O“0Ý$È$} 2õ=,úN^“Ýxn|PhCXGÇÝŸ ²´5­Ö}ö¹`G1´”XšXÖvYXxzdjÇÏ7ˆ!, ¬²®9Æšjd¥m)rïˬ£�ÌÓ–Y_lÊØ…Ò5XŸŸiv£ãõÛ;? €}"¸ Œf5þSIÿNÆãîÝ}ÒÆ4¹‰Ÿ2iÚPqL-"X t‹lدx®ØÕù"õœ6 l¶fƒLñs´´ZëÜ-K`¡kS]Ùc¬n®M?¤�f¦ñßý Z,³°q©êżÿ…cnMý÷tä‘ ÊäÕ5¼0 ¾�&A%Þ›/ÖÑçØï<=™}SŽí)ÕšÊù™êšoæºÑçhS{`î¾ïc€/Ì,åBå¿WØŒq£åã² ôVbQ Å1q&<ô�KëÉø~oĆ#(ù|¸-…¦%òÀçgº’Tû»?ÕÖê×c}6ÇHRÿFú;ÿUm;w; ô«®Æ&Ç<12µZ¢²4ª´×‡-4ä>'>º/÷BÎ-È�öo1�ûõ.gâüLêëÆžîÛ»nwy ¾¢q @©˜YÊN¬!é¿]ñSwõ9Ž€ R¥Œ‰ëZ*Ôº7¾ŽNâùp† -KÜ´™ÞÞ5üþ ý#möÞmJš¼çiuõ¥v£/©ûŸKÿúMúÿ{hJ?oÞ6³¬Õ‰÷?À¡sÈì^‹ŠÓê2k‹±ØÛ’rM»�ónW_ÛSÖ~lÁ%‡èo%š jS¿Š|o¿èº–@°Kî™ÝKzHxtMR[¡© ›K9w³¦‡ƒtaºzÍM‹\p(ºŠ�%§º[öÛ�+¥-²øÀNÄn7Ó,ì^�„™Ö 2ѲJåÙ?n`gˆ®íã=Ïôºéÿž¶ôfx5<×dCL¡b«Ó¢÷fܤvÍýQfW’Z �¾‹#ã·}X' ec"›ÁpP.ÂÏøIW¦ëW'�\‚KÊf™Œø§’þGn®cLJR‹ms7¾b�iº‘iÑ”±¤Ž»wü>@)=ûJcèö¹ÙeÙÍú‚K£äT¹i äs¿×g‹mž‡^"h¸™¼u•1_c’ SK!9 '·$Ýï Á%eó¨0Ž&ìcâpP2‚L“Ö°é S_¡e‰Ö:pTòÆÐíØÖƒK#SER/þÿqü¼¿ªŒ¯²4$ýPZ[mOf×âÚi=!$–‡5„©–¥Ù×uëÂÔu^ËE ¸ Tܽ¹ïcÀi‹câRva®CiÅpÒÇx3«Ð\°“t5Í´`(š¾^©(ÜL�ÜPmjê} €È},³[ÅÐ_ŽŠ¤'™5ÄuÔ:R‚K´-¡ô2Z–f=02®¿ìû(ÆÄáèZØ�ª«[uÝV]ߪ.Shy¹WeY(€†`÷¾¤Ô±Ù5…楔†&|•²Œ–”Ö…éêÂÔ“ÔÖò–¶+…`6Dp €¯ UW¿êêT½Ð¤…7Q«Œ¬–s¿WzƒrM!¸€Õä5. Æ�¥saj+Œ•Li“ÂȸÔÇbFÅ%މ‹1qögÑ5KaA€‘éN¡Ib(iH G¦©ŒqŽ ÜÉLr/²5íx™± éÂT“ô ´Æ°Y’¾{D§…àŸ ì¶\ÒÌø›‘}|þAÕ {ìžûXf·’zZ>jâNf¹Ùœv¬RB´-¡TbËÒº#߯ #a±‚K|bg €²»Ög[L-þª(Ü<-JVø`ò<ÀásL…—R<Äæ%ÂKË¥—J·®r~¦šÂh°º$½½«±ß#Â.lز$…Föæ«úó÷$\@écâ~~ï1&ÀÞT=4MldºR±Á¥ú‚�Ó”‚ãáÞ—YS!¸�¢›—ø>Xlѹcb(÷áNŽ$ÑùÙ|ÛÎù™*oï„QNÀ�Ö -�K¬ä—}%q—ð$”NÕ5¬Ôø0²¥7qK86”:‰�®HêÉlÝv–ã–öu)]Û’²™)�Ü8p¯®{­þs­+é¡¥bѸ@À˜8#è)¬ifdúS¡µb pãx iPuÂQØ1÷{™U”¶¡©¢06®IóÒœ”àR¿¿³Öz§�ަÒFFÒ²´E4.NÞo4jZ¾8/1&Ài¨hq¸ � ÆÈT‰Ïs¥°‰¤%éIÒ�‘©]Äs+qo*}³RM4/eÉ[W‘J8n2Ž„›ý·§qéD¼ºúÊo]£eiË.�¶ Å‣Wu=V]ß$ý.©¡pC÷QR¿À6$ÆÑ¡Œn•¬alܼü¯…{Y›¬g�«r~FëÒ é(ûgÏXÒí«ëöµ q¬ÈFp ÆÄÀU׸êêW]÷UW³êjøéëK~¯t�,8îc…°^jxŽðÒW˾¯¥rogmV£uéDÄPRsæÃ�¢eig.Ncâ`ç^ƒU½°qtW#ÓÝÈhMÁ BxéVJnW!¼$)ñï_ÚàÒÛ»†š¬å±pD¦FÆ %5^]MZ–v‡ààÔ1&vkQȡȦÛI’žG&™z#S{dj�L•Ÿ§.L• ÓÍ…©}az¾0=íû˜–û@Z©aŒðRʘ¸ò��œ]û©�Ÿß¹Ku$]Çvè×}{–\zÜúQÀéxT{ÔôµÕ¤È`Ãl«S}ò\UW§ÀçÙ‹ Ó•Â×oò5œ Žä5 c÷�Ìš á·“ðR#ŸNMÊë­ì_—¬ã»kB'ƒ†¥ý!¸8Y‰câ†?¿÷ʾ¸lÌ.U‘ôCZÚ01”tí/ÅÜܳKµ%µrvï/‡4Á§ÙàPçv¥ôñ\)]땽õ%U[Ë7âT.Lµ×‚Fï�$÷G™�ÂK)Í;IÏ2»—û©�³ò—ÜKÝbóö®îùÙ܇O¹E ØFÅNcâ€(†‘š9»R~Ð(‰]ªžð¹º„–Ž_Õ5¨ººÕbÇóÔ|üX‚<)�E_¤rï*Œ�[%T×–Ù“ÌNiÌXÞkíP¾ïf×€RÖ�lˆàà”\¦ø‹ºRnP¨CGk‹íNy#˜R‚TÀœØà´Ha�K#S{dzŠÿ[YR+OQR‚ ´Å!Œ~[5¼t#é‡ÌŽ?¶�àà$ýöG£.ÆÄY:Êw<ÄðѺ”ÿ~ü¶¨‘t8eŒl IDAT9Ë‚E¶:Ý)TZ’z’þ™~ŒLíŸ#ÓkZ;Õñ‡fve½ðREROf[=ìYJ°çPF4fm^£u Ø2‚K€SEÛ�!†…ns¶öÈ8»Ô�òß�wü¥Ð€ NHÕõ(é›BФ£pm7 N²9edº’2Ã{y�¼"å}�T.–·Oaë…—$©%³2»;Òñq)¯ùƒØöö®¡æCVKàb·�vر_÷}vÇÌZÊ^T›5v÷¼Ñ›Ǖ®Ä}wg±Û@p XÀ_4°Ku´<œÔ²KõW Ù¥®”?"n üquÀRUÿ lkMaY hW!��òCuHhä ¸dÖPhØZ%H19÷=ÈL ¯Í0šÓýЛåòÃq‡µ¶×Õן}µó3]ÅPöà"´Øµ.LׯÎùì\NË@aa%—™i‹á¥'¥×H³X�ÂýöG£¦°CrÙ"#câpÒüE÷v©º–_¿=Ø¥®Wéö ü›ýMFÄá,û¾($à0 #•ÂÊÒW~ó�KEû /=iý†­Ik]Kf÷ÚâÂÈ;§Zà'k-¨.éq×rêbc܃>Ïc’®÷wDØFÅ'$6¥.„´b3R¡Ì¬­ôE³¦þ®3”ÐÏï½ÁÏï½o ‹e/¢Ñ¶„‘qˮ˒GÆÙ¥ÚÊo‡¹÷Úp®™T‹k©Iú12ý92õF¦öÈt7Šãß^=©MŠ1WÛÆÆ]«˜µƒ¶ÌžxŒ\Þ:ßA—ÞÞÕÕüÏ=¾�v,¶,=ëëë«?Ž#Cp 81î~¯´ŠðŠòëûWbf5%.hKê0"ÛL÷ BL—pòüECI÷9kÅf¦…ìR)׃}¡uc¨ìõ•"×2&ßW•øÿ[ k5Ï#ûø½¼ç«\ØÚ­@XÆ},÷[IM-x¦¸‘ô¬°vv8ÒŽ÷è³ßW—väÂT¿0=kñ{†VlbÂ!¸œ¦fâãêf–4ZÊ®±§Ä‡bÀ Ø™Ùcâ€À_ô¨ü`ÿ“]f� ŠÏÛ3VhwBÕu_u]W]¦°¦©°¦ÈàÒžêgÛRʵ+¡‹mr”ÔÐæ�+I½ /¥„âªq)šý>®œŸñ}´M¦JlSê)¿Å«ÐͶØ?‚KÀ òPg� *jd\[i‹,Vcï-sòE*ÒÂñ--åß„lúËÆ�%À^T]ƒªë1†™Šl [ô}3}Íš”:¤ ÌarÈ}Ò伉Š+¼”rœ‡\èkC7 vä–µ,ÍbdÜ‘!¸œ(wOݸñÈ83»‘t—øðŽ»³%CEy›LîfGÆÅÿλùè/Œj2ä—^=imgaSÌÈt32µ¦FÏa¡AüV›…\)¼t”£âÞÞ5Tøwüöö®ë·wÝÇ�¡@3-K«nœm1óx\N[ÞŽÙ‰º™­µ‹%ŽˆK >uc  P2þ¢¾òÛD&#ãâÿæ� *½89A¢Ùµœ¼ðÒÕ’üw mi½‘ÉG¦#ÓÓÈ’7 a–{WîßÆÇ­Ê<”ðRÞñ å~�mzoïêVÚž5Z–fu”¶®�@p 8a±Ù¨™øð–­·Xò¤°Ø’g¼Â±ö££åíWú¼ ù üëÁ[FÄ™ �/“ÆìéÅlP)¥ÑfQjöãW’n–<©Üûr¿•ôMáß±£Õ‚Lå/…ãÊ;Ç\Û¶kÖ%)œ ¯®ûWçýñøuß`¿Ü½kf�Jåö é:õs›YKé ]·~ ;°àTø‹Æv©¦BKÂ"-»”ÂËtü…›Ú@–j¸!ßÕTÐedª(4ÜÌ~ßôµ¸µd¬ùàÓäó- Ð4S”°qð³Y.¬—¥6›OÂKßJØ\”¨âu„Y5mÖ²Ô!°t|h\ …Å“”…„ZêȸØÎ”ºÓq÷¼Zs@ İQÞx·¼›’}aD°Šªk\uõ«37í_ýKÓPÒ£B«õ·W×ﯮۙÇL, ž*Ü÷ŽÂÆÀÔðÅ$¼”Òh¾K)m9¬÷á‹x.Ê;;‹–¥#gî¾ïcPfVW¨èMqíîK°ÌìYi;¯îžÜâธÙìÂDÇݹ�pìR=­7Nj,éÚ_ÊßıàïØðnÆ£\.LuIÃWOÿ¾…qM‹B†ßª+|®%ÏQ‘ôC!5ù5¬:Á¨8j­§üqkI�Ò4/¥¬ý¹Ûn‡ä"œž•~£eéи@’�Rw»<,ûÍØÊ”Z’Â@Àái*½1dÚý!„–މ]ªCX8R¯®þ*¡¥hQ`f\Dh)ªÅç©+„¤ž$=�L>²µ‚�Ç#l l(ý^d8¡%©72ùÈô<2=ŒLíƒ 3¹wµZxéa/á%³šò7.5ÕÒ,ÇÁýþêºß÷±`.X$uÇlÛ‚Eêˆ¸Ž‡…À�³K­22üÎ.“7¼8p#Ó•B«w_ókLE†Z¦C45Iw a¦ÔsSy¸?ªüᥔóøÑ­ý�Ÿ©r~¦»ó3=œŸéÏ}Ï1‰ÍK8a¿îû”“»�ͬ)é)ç¡IωŸv¨ô1t€ò{ÒjãÈìR}FÆǯêJŸ-*1ÈT‹¿Š ¶,jV:Ì‘Sî�±Õ(5�ô ³IèiN.¸t~¦º¤ÞÌÇnÞÞ�ëï ì �KŠÍHE�n`ç€e—jiõño«448"U×°êêV]÷1Ô´±‘-E'Ûê´[îMI«‘Ú1ì´]écâ34¶XÖßç°F%Fp @žŽŠYèéøñ-ZØç€d—ªIj¯ùÇobè 6µ,¬Ó/êIF¦§‘©=2ÝÄæ¨í á¥ÔFŸŠ¤žÌ¶=ŽóäÚ–$éí]cͯ_\ Bp ÀR±!évÃOÓw÷ûü‡D^kR^@½e—;ºùà˜-;�Õêt¥Øi)ŒÇü12ý92õF–äÙDSé~*’žd–:bn'\Цƒp]­Öˆ`‰_÷}ÊÏÝfÖ‘ÖÚ;VXd»T[Ë[N¤p8¹ÑŸ%Ü`—® <´¥ìR7 5}=þ±Â 龤®¿loœq<†Éó϶uL=&DZRè"þ»LT#Iò±Ñ‡¬£ð=SWxÝO¾¿ÆE�£Söù®Ÿs»á÷±Ì’z Ž#˃Ì$÷b�-¢NqLÜÄ£¤ÁÛûѳæ\˜*¯¾½Ÿ‰À„¹û¾�À�0³žV¯A¾u÷“¹ °šŒóJ‡†6€ò²KÕn /Ó™„aìR?´üFwgÛÁ»Ô�B€*¥ái�©ÿlÖupÃ_VAC7‰Ç0Ñ—tï/im+v©µnúù‹l�?”ÙÈT«z1£ÉG¦¶‡0¯‹zž¥ÌÂ(¸ôð’$5 /™å�Ï%©#®é�Â…©®Ð®øøêág"°-ŒŠ°Š¦´Ò.›.¡%8vùÑ’´Ì`&ˆ”×À۲˕nÄ'³KUìRO 7^SCIm»Ì…—z 5»Ô³ÒƒSÓê’ž³Z’,Wp˜há÷îNBKRh^’Zm]îAfÅœ?ÂçI9‡±xà.L•‹Öë)ü›·.ŒÑ®Ø.FÅHæîC3(½u‰Å ìÅo4Z »™»’º?¿÷Šª‡NÙƒŒ ‹Æ’n§?à/êÛ¥òF�?Ù¥®‹ÑCV«¶“L»³Ë��¡�aÙ×,EË.Uñư{²è<²RóÚ2#SKR;~Îaü5¨úÔs|—z^iÉìJ¡}i½slh{ºKxä1�‰; ¦Íÿ¬¯Ä�5örP8 —$3³–V×6³¾¯»0¬ïFaa±&©ýÛ��1k‹ãÖnrÖñe½ßîhù˜´+…`S‘ã…–…–úñ×ä{%>vöSnÔgÊ -�®OÒ—¯WMáš;ëºûÎ.¥œðÒô(ŸEAÆý«*ûüµ�V§/ßÿ#“ª>5ÎÑ}°Fx)œÛÌnå¾ÎšH+ñ¹8¿¨ û'-ú9_¿0µ‡m1÷µÆÝ81vg=kõ�¢]w¿ÍPŒßþh\Iú±ä!I�?¿÷wtHXÂÌzúº0Ûq÷"oX`Cv©”ëÁ¾¿,nc°KÕn´/së/›7÷ÆÑjY Oãø™-)±¥©µàÏNk,úSŸç‡²¿^�’î—µKůբñvI_£E_o™ @XÉÈTSø¾œl”êV]…¬-ŒLÏÊ[ª®ë¹�š­Óè6–Ô‘{zøÄìNJ�Ù—;�<hAËR–±¤ëWÏ (ùeßà`u—USé»l‡mºWØa¸ha�1q@»LjÝèÄö¤•%ŽŒ«Ù¥Ú+~ê¬�2kß���§UBOYa¢ñÁ©‰¬�Bl ÂF.LW¦»ØÂ‚’©ºúU_#äÞ‘t«™u‘éàÒ/ë×�OKHjÄQu'ëüLµó3µÎÏÔ;?+ýšçJ ‰-KØ ‚Kæ˜Ù•ÒFw¸{ê.«š™­ºø $ùù½×ýù½×üù½÷»ÂBÝlH‰Ð°D—w=¸qËÆ #ãV èd5IlzS}•›µYÏ_ÄÍÞ¬„Á%¬d*¨ôpaú¡02êARkχ†¢¹w%}ÓÔÈtp©€¶%BK’bPéY¡¡p2j¯´^]]¥¯‹õEËvè×}€RJ­î»ûǬ»ßǦ¦¼q-3ë»;#»°5±Y©ûÛ�ŠÂâQ]—€­RK’õ÷¨Û¥|ÃcȲθœ  S[ášxÑZMíÂTy]e$Ê/„ŠneV—ôð¯Tÿø÷ß°m‰ÐÒ§Ù/dåüLµ·÷R·5~V.ú2VhYb vŠÆ%_˜YKÙ‹½³Uû'�Œ33Z±u?¿÷Æ?¿÷~ïÝþüÞ#,,`—J¹ìøK17eGÆ]‰F`SyÌRÖ�pˆÂ¦Á몬s©†.ÔÑ¿¥Çu?¡¥¯²6Ç•½uiÙÏÝIË¡%ìÁ%̬¦PoœâÞÝç¶hÅ¥” ÜUÆÑ¶(ŽdË»ìûK±ccb*ed\©o%–4dôà1sËýþo¨ÿû¿­û毮>íJº•û5¡¥Ooïj¾u©ô!ÀŒ‘qcI÷¯®Æ«oVǬ‹Qq$I±ý(5HÔu÷eÛ³:Z^C>qcf7îÎø.Ø£ ²==÷½Tl À‡”æáÒ‡-P€:z”ô¨°yñNaí®¢ùðÚð㱄•–éêk+`íüL•·÷Ò�^œŒŒHjX¾\0ÑRÚ»Ü*w›YSR/áó=˜Ù «½ @9™Ù�ÂgÃK²€if ¡Ê•ÇšYjÓÜ^¹;7óO§è–*`¯®ñ…i åk>µ S%Ž‘Â)p(T'òeµWÝHëÏãÛ…x^¸&°„² ¸@fV××ÝAË4S‚ îÞ7³NÂç�4=5ŸÀÅ�Ïäûº­,tšYK!Hugf�5>©ç¿}ã†ÀrCÍ7ÿVöq @É䗤оB#6°‚·wuÏÏæ>\WɃK’Dh eò˾À~ÅqO‰ï¬8Ö­£ùYïYê1x ÄÌìI_C>wûn+²Po?} -3{Þ×ñ`¯²®?Sš…—Y%ø”Õ¼±éóEÈzmÎâµ ¬gv­”Ñ‹ÀŠ.xPÚBìP!ˆ”,63¥¶±´b@yeµ­µâè¸}yÈø»NÓ6‚C«üù¬÷Ë\ç¢ RFj¶Ö3û³§r~Æ÷° ‚KÀ ‹-G7‰O7ËÝûJ Þ­á/‹C Kž ©GÊåÃdS@VÛÒ½¿,ßÛ¥®$ýXçÏâx]˜~('�÷ê²pTÎÏô§¾ž³»oïé›�.ìcèäs4_}µàp¨.'$ŽWzVڮѥá� Ž¡�!Å­»³‹(13»Óâ±m¹ H«—â9ì‡æoÞ$=WY,ùšÍKjR   ☷E×¾…ðÎ\ð(ŽskI¹cÝ–—âçZ¶i§£¢š §O�¨Ëjm’¤�¿¤5œÚ¥Ýœ .uVi‚ÂẰÜPž$5^�QÕÀªÎÏô$éfêCã·wýž÷çbËÒƒæöŒ%}{uÎÏ8~—€bf³ЋlµácŦ‘oŒŒÊÍÌ-~7Ý}éîÀƒK³�]úø2ZÒ•%÷ë€l9�E’4T1 N5e�úšš\ªÄç_Ö8ë<°Õ�e‘☻e;þ§=ºûìø¬È_4�t­ì›Éyšþ¢�®�ýEã8ÖmÓ÷v…V¤•6ø‹î•öw'¸t"b(©«ðšº•ôû«ëúÕÕ|u=ZÖ÷öþÑä7mnilYzVz(öáÂ’Ö€ƒEp 8î>t÷ßÝÝ~í¤~ØÝ‰ÇcÜÀÊ/Žt¼•æv€Wš—6Yd{Ð|àgW!Ë�­Zê»ûÁ´H”�¿hè/j(lžI ñt%]oZš9†{IßÂ"©Á�±¤G…Ñp÷+6-M?w#>ï²?¿ÑF–W×í«ëþÕÕ}õõ^Wšý9su~¡¦« SOR[ië¥oH’¹û¾�‰ØŽ”Ò¸ûuÆã{úºË°ïî�©ßok¾mi,é[ K•^Æßq‘�¤Æ¡ü½‘]~Œ~»Òç{Ö±B ¨ï/Ûoœ±Ë�q“¦£š>[:Æ’þ²VKTÊóVþþãøœãU›œÙÎÏTShS’âøEI�_êNamc�M]cI�W߸½(-‚K Pfv§ìÝ€�³mBË‚KfVWAÍj¸{á7r¶ÁÌ$Ý%’:nV_R“1Ž8vŒŠ…Š#Üî3~ëÎÌfÛ“2ÅñjYá§Î…–ZJ-5-pØÞÞõøöþ4jk½ÐÒXÒý««Ah §€à(œ»w$=füV;62åiëstÆÄP:Œjôøwl'>üÞÝÏÀq¹W!­¢+éšÑp8%—ÀVıpYíHm3«-úsfv£ì¦¢[w_uÁoçâß-«-*Ë}l¨G$¶%¥�Æ’n_]·´,áÔ\Ût+i¶M¨"©gf³�J’ô«�ˆ+}+Q -õþ›©ÀŠÍIy#ï»’¾½ºº;8$ tÌÝ÷} àˆÅ€Ò³B`iÚ@Òÿ'éïO}ìÿ‘ô·gçî×[;À‚˜YE!´´°MjJßÝ[>$°g¦Eë"cIMK8u4.€­r÷¡¤†Â‚Ü´š¤ÿhæc³¡¥±BkS©­ZèþN`s FÆÑ²D—ÀÖÅ1o÷¿õ7sþh'ŸÊ®­´ÐÒXÒ­»Ï†¸À‘š7–tûêº}õ¹ ^ÀIbTØ3kKj%>¼ëî¥o&Záï4–Ôˆ!.pB.,ŒŠ#°|Ep ì”™=HºËyØXÒ·²7™Ù�¤‡Ä‡7Ýýq›Ç‚K`çÌìYËG«Ýº{wWdz3«Kê%>üÞÝ;Û<àÐ\;gf…ÐOVxéÑÝ›;>¤•˜YMáø+ /ýßïüLI7 ëµ·w]ïù�€Ò!¸ö"†þ‰¤‹©ÿ_’þã2�ˆ‹¡«J -õݽ±åC%s~¦¬ñò×oïìãx€²úeßþÿöî§±´íðzZ%>É’ßÀ ‡ù‘Ž`�Ÿ¤ ¡B1„b�œÜ ¡€ƒ¶ä€€äùoê¥ÌÆÞ¸. Uc¶÷¾Ë?H «Ö ð5ÕZ`dµŽ IDATo“üß™›ÿß-umZºMr²Þ‰€-ÕP:|÷)`Ë .Ó„—ר]ÔZo69O?Ó¾ÞnÖ8ÉÉ6‡°€õiš•îfn\‚‚KÀFÕZ/3 ùœoz–yJ)?“w8tœä¨Ö:ûÃI`ËôJ~ôJþí•NíÊËzú´®f>’”Zë¦gØj¥”³$?:~Ú„±€-Õ+ÙÏŸÍÊW“ºÚ•ï»;ÙO²wÿ�«Už>Á%€9J)ß3ýAfçµÖ‹uμM¯äG’³–/�Lª�¼'Á%€”Rö“\'�êâ/k­§k x¥––¥Yã$OjÆï7|mmz€m´dhéFh ø¬z¥ÓÿÁVkZ–†y9´”LеuX�K3J)ýLCKó~˜ùè6ÉQ­Õ¿Æ>…¦•æ0ùýçͤæd³SÁëthYjce¼Á%€¥”EÿóÑ8ÉA­õnÍ#¬MKPi¶ai<©ùÏ»oÔ´,�½â®VÆÁ;ù¶é¶I)¥ë¿ÂgÚ´$´|tgIŽç|½ß+ÙŸÔܾ×@ð¯lYzêf…ãsüµé¶E)åG’ï?¯µú¡=ðtù›ÃµO+д,umRž5ÎtM܉¶%x‚KIJ)ßÓ½>þ´Öz¹ÎyÞQ—v™×6×À»é•œåu«á’ä"ÓõpW+ X ÔZ7=ÀF•R“\w<ü²ÖzºÎyÞ[¯äß$ý9‡Œ'5ÿy¯yàµzeé¶¥»$§“j=l‚Æ%àK+¥ì'ùÕñp¡%à³ZÚè÷ŠÖ%>„eþ¿ý"É�ÐlŽàðe•Rú™6-ÍûWÅ�n…–€Oì¶Ã1‡kŸÞhRs›i iž»$G“šóIÍøÆúmw'û»;9ÛÝÉõîN~¼çµa}Ûô›°lh)ÉÑz'ب.�3—ø&5罒ô¿f/’\¼w`)Ivwò+Éñ“›ºüL>5Á%à«ú™n?t'9I²_Jy¼­ßñ¾«vSkU_¬Ü¤æ¶W2Îü …Æ%>’Ó$Ã'Ÿß%9ÝðZ¸»™Ï÷ww²wÿðìvø2—€¯êxñ!I¦?´ÿg�ƒ,Ip X—›Ìÿ¥~¯d¿YÅ[­ ã]$9Ë[–f´½w“\¾÷ °-þÚôl….�$­K|“šó$“šó--åþ!Wɳ9¼§øÒ—Hº—6±6^m Âf›”—øÒ—ȤvZM-do3û>ëïîx_ñu .ðhQx©ß+Z—à ÚÞc‚K|Y‚K<ê²VKÈ^éþ!wyþ>óžâË\àѼƥÛ$ Ž›}íïîdo#“À†•Zë¦g`KôJ‰|“iXé6Éͤf¼¹©àóØÝÉa’ë™›Ïïr±‰y`“¾mz¶ÊÁ¤vZ¯Ò+9Lò3Éé¤~½¯û‡Üìîdœ¤ÿäæýMÍ›¤q X»^I?ÉYó‘$w™å¾\›×îN~%9~zÛýCʆÆ��ùkÓŸ[Ó²4ÌCKI²7óùWò¬ijwçÏ |‚KÀZôJú½’I®3 *Í:kBM_ÍUËmÖÅñåX¬\Hú™öÀÒS_reÜîN†ù3¬twÿ�¿75l‚Æ%`e:´,Íúª+ãf×Åííîtz¼àÓ\V¢iYfù ÒW\×¶.îøÝ§€ \Þä-K³î’¯µ*îþ!·yþwÞo;>+Á%àÕÞвôèbRó÷¤æv…c}³­K—øR¾mzàcê•ô3mYz�Û$§_4°ôèvæ¿ovwÒ¿øZíS|]‚KÀ«Ljƽ’‹,ß¶t1©9_ÇLÌcãÒÍýCî6: l@©µnzàë• “ìw8TËðÛ_›øðN;s1©9Z .oÒ„‘.^øòm’«á€YVÅ+Ѳ2îB` x‰à°½’ý$ÃL[–N­…û:Ê ×I7=G㨎r³é!XìÛ¦>‡IÍm¯ähR…F€ÅþÚôÀç!´t%¸¼;Á%àÝ}Ûô0ã6Éxæ¶½æcž›:²®ð£(µÖMÏ@’Ý�ô“'ÙO²wÿ�£ �´Ê ý$×™>./¹MrTGÏOl)Á%^­Wr˜ä0I&5ç>´Ý�œ%ù1sóîqÊ ÃÌ-�“ÔQîÞi$VÀª8:{TÚoþ|t—.m«^I?ÉÏ$wf[­-tsœäò½Ù&e�ŸYZ:Zúx—X¨Wò#ÉÙœCöz%{“*8°mz%Ç™†–úÍçW“šÛÍNE›û‡\íî<»y^`çÓ+ƒüHò}Áaçuä5ýýµéø4Â{é•ô{%¿’üJZjüÜÐHts5óß_6�Sùžù�ÉdZúÒ�T™Æ%ºèžøÒÍ0Ûd¶eiÆ~¯ä‡•q[ë2ÉÕýæ/§ r˜Å!»Ë:ÊÅ{ÌÃz”Zë¦g`ËõJúIþ]pØÝ¤æï÷˜‡vÍóô3Éq‡Ã¬Œc•Aö“\§=x÷覎rôN#±&VŰФfœÅ­K{Mp† hZ–þI·ÐRbe[¨ ÒÏóõ†³n“œ¼ÏD¬“à]Ýt8æpíSð‡^I¿Wò+‹Ã³ö{%?Ö4,­ -]'Ù›sØ8ÉIeü>S±N‚KtÕe­ØþÚ§à·W´,=5Nr·Ú‰àM~fþ÷�q’£:òºý,¾mz> �K[¢YÉ÷3¯ ,%ÓçòtR@ØeÐéõ|^G�”|—èdR3ÎâÖ¥ý&TÃz]çõ-K瓚#¡%¶Eä{’ï ;¯£\¾Ç<«P¹.ƒÔ™Á΂K,CëÒv8Å}n’Lj.V= ¼Vä8Óö°y.ëÈëö½•AöË ×뼆àË貦iíS|q“š›¤s�CË[© ²ŸÅ¡¥›:Êé{ÌÃT¤_ù‘d˜5Q—X†Æ¥íq‘, "iYb+•Aö2]y8oµäm’“÷™ˆä÷Ú¾’œ½Çõ—èlR3ÎâÖ¥ý^™F`šçâ¥&-Kl­2H?ɯÌ-�“œÔQÆï3e�ÃL°Þíû·àËÒº´%^X§eé“ÙÝÉþîNÎvwr½»“g~eþJÉq’£:ºûì¾mz>œE�KÉ;6v�‹$Ç™>æKŸËîN†ù3ä3Nr¹¡qÞ¬ ò3‹ƒ�çuÔéû œàËjk\ºÉ4ÐtÓ´ñN&5ã^ÉI’±µpŸÒ]þ .½©Íì`ºÆq˜é{öjøŽï×2È�dacÔy}Ü`Ë\`)MPæ"Óæ—›IÕŒ²ižƒOí&ÓF­GýÝ�ß?äê•ç;N²—i€èûAÉ]’“áš_Ce�ïIÎvYGþÁ%–6©9ßô ðE´5"í'o .=µ—¬·©« ²Ÿäç‚Ãnê(§ëœƒíóצ ÝýCî’gmH³á£NJöò|ÕÜå°füšóuÑ„–®v›äd]3°½4.l·›L[–ííîd¯ 5-£-ðÔÖè´e�~’_Iús'9©£õ…§Þª rœiàk?>ãL¿›$Wëü;43<^6|6Î4üõ8Gç×EäÇ“O[Ÿ§™c’$u´šÖ½Rk]ÅyXƒÝ�ì'ÎÜ|~ÿ�‹eÎsPòO¦«á�‡5ÿyë|mšÐÒuþ úÌ'9ª£g�R[¡ ò=ÉYþ|Ì^2NrQGÓç¤ r�磣:Z.(Ö„†Ž;Îðè&Éy—ǵ òªàP¥¼æ~³¬ŠØb÷¹MžµùÌ =sP²Ÿçá—˷̵À�,ž±S¸æ½•Aúe�_I~¦{`¨ŸäGäçŠfØ/ƒ Ó=8õÔa’a[SÒ¶\€5镜õJ~mz>…«™ÏÛÖ¾ÍÓvüì9W¢ Ì|_pØy­58õ*Oš¢–}|}kx© ²ŸÅmU]œ­*Hµ.ß6=|6½’½LÛZ›ÏÏ&u¹µ^0ãY3ÑîNŽï:‡�fƒDwúú¶£'ëÕæ¹|\©¶…æ†nš�ÇÇ­ß;»ÊmQhëEOBKý–/�3 ›Ý&¹{rû~¦ßkfWÓ%Ó Uê(§/\òéóÐOûìk{®J­¯ZU´è•œeÜx<'9˜Ô?Â|!%ý${¯ íäß™›/îrÞáÚÇɳæ¯óáŠÃteÐz�YWu”“U^wU𦍶ÐÕ8ÉIåæ…ûõ›û- l½tŽ'çù'í¡¥ËL[ªfW>½ÿa^^owRGóCnÍý¯go¯£”y÷{ «â`z%{½’ë$?ò[Ó¶³EÚ£^ý85�§eBOmÏßø Á©Gmkîµc½+Á%è  -½¶eé*Éß“ºÒ]|0Úñ°æ(Éù ‡gÚ¾4/\²LpivEÝÝÐk°MÛ{ú­á¶ÐÐ2×_æþ/i > .Àt™åà Z–x¦Yw�—q®ʳÐQ’äþ¡uسàÒAÉa’½™›…–Úµ®Š{ã9—iKj –Aê[>’ül9ïV­©\€šàÑéwѲċ†5·IŽÒ&ê'ùuPòã…»? .ݾp޶àÓåRCš}ÛôðQLj®z%Wi…<'9Xb‘á4 wÒ”ÎZ9;(é'9þÙØu•éëìæþáÅfŸÙ×èí°.ÕÔIå&IYõyù4.ÀrNóòÊ8-K,mXsžiûRÛëê{¦«ã~¯øºÈÝýC._ -”|Ïó•`^“l�K°„I͸Wršäד›µ,ñ&Ú›ƒ’£$?“ìÏ|y?É?%GÍŠ¹E[n³&îc¹¨£œozˆuÓ¸KjJ�!%-K¬DJ:J{;R?Óæ¥yk Ó43Ís5³jŽ?µ5WÍ6V±‚K¼‹^I¿W²·é9Vè4Éɤæd"Š kÆÃš“$-_î'ùÕ¬‚{IÛ×nV2ÜçÕ\šm½ZÖ2Á§¶­·^ÿC\`-š Òq¯äG¯d˜äßL×`} “š±–%ÖeXsži8®Íσòâ{i¶mi<¬ÖÄ-°ŽàÐ2÷o >~‰àÒ·MÀçÑ+9L~´ýâýð}'‚�kXsyPr—äWž7ø|?(I’óÇ5p%ûyþ¾®[¬-¸tXé×Ñòmje�~– µ5bõË Çuôúç¯ r–é÷ÜÇ¿ßm’qmO—Æ%Vé8ÉYæüÒ¾ 7 kn’¥}�Ù÷$×åw¨i¶m)‰¶¥nÒÞzÔöxv±Ôýê(·yùù}•&<õ\:k>~5n Á%V©­¹d–à,aXs›ä /¯46mK³�™»æ¾ÌÑ´*µ5�5 Îž†–ÕvýÃ2xõ÷˳ýzExj?ímM/´6Fp €•™ÔÜ¥}åÑS—à†5ãaÍiÚC6m¬‰ë¨Žr—öÇõ{äg—s4ǽj½[ÓúÔö|õ“\7a¤.3ì'¹N{ÛÒEs�—´~ï.ƒõ­—+µÖu�€/¨W:ýòþhR;µ3½æúû™®I:o‚Tðé”|Oæjn‡5ï5ÏgÐ4µ5W%Ó5}çuôüûV³Îí,‹C™Gm÷Ÿ9×0/·Ò]$¹lBVm³Ÿeú½·-´t[G‹_e�—‚D³¡®E!¨N¾½õ0ã¶Ã1‡é¶Vn)½’Éïv�~¦«µàÓÖ\”$ÓÕdmAmKKª£ŒË 'io,ÚÏ´ùè.Óïqw™œöÓtºÉëÚ厚뷅—Î’œ•Áïëß5sî¿pü£Ç5ƒ]ÜιöS7YÁ÷pÁ%V­Ë/³;­=êªiYú9sÞÃ^ÉÙ¤v^«J^º­Éÿ/ÉÿÌ|ùj#C}pu”Û2øj „í¥=¨ôÔisÌÒÁ¥&<5/¼”,*=u›ät‰v¤›Žç^ôtò×*N�šõl‹V´½¦‰¤UÓ²ôÒz¥³^YÍ/Øa knKòòç{îrXß¾Æë«ª£Ü&9Èë…NëèmmWu”q³Öí­¡Ë‹L×ÓuiÁ{¼öyºý½—ØZ ñÝ+o /õJö{%Ã<_aôT?Ó&&ø´†õwÐæ1 ²ò5Œ_M宎r”i{R—Çó*ÉÁ[CK33œ'ù;ÓÒ¢0è£q¦kÿ®£œ/Ñ´ôôºGÍ5çÝw%­y¥ÖºŠóÀo½’ïYº˜Ôœ¿òü?2?°4ëÜÊ8>»ƒ2 ê kN6=ËgS¿W¿íå¿+䯙Šnê¨s°è-3<®ˆ{l;ÚÏÃjã$·u´ÚÐZsÍ~¦÷qs½ñ2-NsÏ/¸Àª5ëÙþYpØÍ¤æhÉóîgˆZ¶ícœä YcÀ°*€•kB‹BBK­ŠkZ–†yÝŠ¢qþÛ’À\`]®,ê•Åá¥^É~¯d˜åVÃ=u‘iÛÒJV°ß6=ŸV— Ða朚ÕpÃW^ÿ.Éé¤.Pðþ—X——‚KãLÃJ·I®æ�`RsÛ+¹É’kå2mYº˜ÔŒ—¼ï¤ÔZ7=ŸT¯äßLƒJ·ÍÇͲ+Ûz%{™¶.õ;®e àƒ\`mz%ýU´õJÎ’üXp˜–%€Dp €¡Wr�ö•qZ–> ¿6=ttš6Á%àÝY¼»ÿc{ÜS#,†IEND®B`‚ufo-kit-tofu-ed0e5bd/docs/source/index.rst000066400000000000000000000007201521054151500207040ustar00rootroot00000000000000.. Tofu documentation master file, created by sphinx-quickstart on Fri Aug 14 17:29:07 2020. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. Welcome to Tofu's documentation! ================================ .. toctree:: :maxdepth: 2 usage api Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search` References ========== .. bibliography:: ufo-kit-tofu-ed0e5bd/docs/source/refs.bib000066400000000000000000000101051521054151500204560ustar00rootroot00000000000000@article{Farago:tv5034, author = "Farag{\'{o}}, Tom{\'{a}}{\v{s}} and Gasilov, Sergey and Emslie, Iain and Zuber, Marcus and Helfen, Lukas and Vogelgesang, Matthias and Baumbach, Tilo", title = "{{\it Tofu}: a fast, versatile and user-friendly image processing toolkit for computed tomography}", journal = "Journal of Synchrotron Radiation", year = "2022", volume = "29", number = "3", pages = "916--927", month = "May", doi = {10.1107/S160057752200282X}, url = {https://doi.org/10.1107/S160057752200282X}, abstract = {{\it Tofu} is a toolkit for processing large amounts of images and for tomographic reconstruction. Complex image processing tasks are organized as workflows of individual processing steps. The toolkit is able to reconstruct parallel and cone beam as well as tomographic and laminographic geometries. Many pre- and post-processing algorithms needed for high-quality 3D reconstruction are available, {\it e.g.} phase retrieval, ring removal and de-noising. {\it Tofu} is optimized for stand-alone GPU workstations on which it achieves reconstruction speed comparable with costly CPU clusters. It automatically utilizes all GPUs in the system and generates 3D reconstruction code with minimal number of instructions given the input geometry (parallel/cone beam, tomography/laminography), hence yielding optimal run-time performance. In order to improve accessibility for researchers with no previous knowledge of programming, {\it tofu} contains graphical user interfaces for both optimization of 3D reconstruction parameters and batch processing of data with pre-configured workflows for typical computed tomography reconstruction. The toolkit is open source and extensive documentation is available for both end-users and developers. Thanks to the mentioned features, {\it tofu} is suitable for both expert users with specialized image processing needs ({\it e.g.} when dealing with data from custom-built computed tomography scanners) and for application-specific end-users who just need to reconstruct their data on off-the-shelf hardware.}, keywords = {tomography, laminography, parallel beam, cone beam, 3D reconstruction, phase retrieval, artifact removal, GPU computing, user interface, batch processing, visual programming}, } @article{MOREL2012342, title = {Fourier implementation of Poisson image editing}, journal = {Pattern Recognition Letters}, volume = {33}, number = {3}, pages = {342-348}, year = {2012}, issn = {0167-8655}, doi = {https://doi.org/10.1016/j.patrec.2011.10.010}, url = {https://www.sciencedirect.com/science/article/pii/S0167865511003564}, author = {J.-M. Morel and A.B. Petro and C. Sbert}, keywords = {Image editing, Fourier transform, Poisson equation, Local contrast enhancement}, abstract = {Poisson editing, introduced in 2003, is becoming a technique with major applications in many different domains of image processing and computer graphics. This letter presents an exact and fast Fourier implementation of the Poisson editing equation proposed in (Pérez et al., 2003). The proposed algorithm can handle well all Poisson editing methods that are currently implemented with finite differences and multigrid methods. But it also authorizes fast complex editing strategies where the edited region is obtained by an algorithm instead of a manual selection. The selected region can therefore have a complex topology without additional computational cost. In this letter the proposed method is applied to a classic local contrast enhancement principle introduced in (Caselles et al., 1999). The manual selection of the dark regions is replaced by a lower threshold and the method becomes fast, efficient, level-line preserving, and interactive. The proposed method can be tried on line on any uploaded image at http://www.ipol.im/pub/demo/lmps_selective_contrast_adjustment/.} } @article{moisan2011periodic, title={Periodic plus smooth image decomposition}, author={Moisan, Lionel}, journal={Journal of Mathematical Imaging and Vision}, volume={39}, pages={161--179}, year={2011}, publisher={Springer} } ufo-kit-tofu-ed0e5bd/docs/source/usage.rst000066400000000000000000000001621521054151500207010ustar00rootroot00000000000000Usage ===== .. toctree:: :maxdepth: 2 usage/io usage/preprocessing usage/genreco usage/flow ufo-kit-tofu-ed0e5bd/docs/source/usage/000077500000000000000000000000001521054151500201505ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/docs/source/usage/flow.rst000066400000000000000000000270231521054151500216550ustar00rootroot00000000000000Flow: Visual Graph Creation =========================== You can use command ``tofu flow`` to start a graphical user interface in which UFO tasks are represented as nodes which you can connect together. Once you have created your flow you can execute it. Nodes ----- An operation on data is represented by a node in a flow. A node has inputs and outputs, which have data types. An input or output of a node is represented by a `port`, which is a circle on the left of the node in case of an input and on the right in case of output. Every port has a data type which is represented by color. There are two data types: - `UFO`: you can connect all UFO nodes together - `Array`: a numpy array which comes out from UFO's ``memory_out`` node and may be used to visualize the processing result by ``image_viewer`` A node may have properties (almost all UFO nodes do, e.g. ``path`` in the ``read`` node) which are listed and can be set inside the node. If you hover the mouse over a property field, a tooltip will be shown describing that property. When you right click on a node which holds properties, a context menu pops up and let's you choose which properties you want to be visible and which not. Some nodes, like ``general_backproject`` have many properties, many of which may be considered `expert` options which are not needed most of the times. By hiding these properties, you can avoid clutter. There is a pre-defined set of properties, which are shown by default. When you create a node in the scene, this setting is applied and you can check which properties are hidden by default by clicking on a node right after its creation. In case a node doesn't have properties, right click either doesn't take effect or pops up a context menu relevant for that node. E.g. ``image_viewer``'s context menu allows you to configure the viewer's behavior. .. double click A node might implement an action on a double click, e.g. ``read`` node opens a dialog allowing you to choose the data ``path``, ``image_viewer`` pops up an external image window which can be enlarged and put on another display for convenience. Current nodes which implement double clicks are: - ``Composite``: opens a new window with a scene displaying internal composite nodes - ``read``: opens a dialog which allows you to choose the input ``path`` - ``write``: opens a dialog which allows you to choose the output ``filename`` - ``image_viewer``: opens the image in a new window .. auto fill ``read`` node currently supports an `auto fill` option, which may be invoked via the main menu bar. The node sets its ``number`` property to the number of detected images found in the specified ``path``. UFO Nodes ~~~~~~~~~ An UFO node represents an `UFO task` and holds properties which are the Properties of this `UFO task`. Please check the `UFO Filters Reference `_ for the complete list of UFO tasks and their properties. When you create an UFO node, its properties are the default properties of the encapsulated UFO task. Composite Nodes ~~~~~~~~~~~~~~~ In order to reduce clutter, you can combine several nodes in a composite node (main menu's `Nodes->Create Composite`) and you can also nest composites, i.e. have a composite node and create another composite node with the first one inside. Internal nodes are listed as groups in the composite node in the scene and similarly to property nodes, you can show and hide different internal nodes from the listing. The input and output ports of a composite node are the ports of its internal nodes which are not connected at the time of composite node's creation. A double click on a composite node opens its internal nodes in a separate window, where you can edit their properties but you can't add new nodes or change connections. You can open this window also by pressing `Nodes->Edit Composite` in the main menu. In order to store a composite node for later usage, you can export it into a file via the main menu's `Nodes->Export Composite`. You can import composite node definitions by `Nodes->Import Composites`, which are then available in the flow scene's context menu in the `Composite` category. There are several pre-defined composite nodes available via the scene's context menu (category `Composite`), they are: - ``CFlatFieldCorrect`` encapsulates readers and averagers and the ``flat_field_correct`` node itself - ``CPhaseRetrieve`` encapsulates padding, fourier tranformation and the phase retrieval itself General Backproject ~~~~~~~~~~~~~~~~~~~ This is a versatile back projection node which can reconstruct tomographic, laminographic, parallel and cone beam data. It has one parameter which is not part of the UFO task, ``slice-memory-coeff``. This parameter sets the fraction (0 - 1) of a graphic card's memory which will be used to store the reconstructed volume. If you are working with graphic cards which have other processes running on them and these processes use a lot of memory, then you might need to reduce this parameter. Phase Retrieval ~~~~~~~~~~~~~~~ ``retrieve_phase`` node may have varying number of inputs in order to support multi-distance phase retrieval. You specify the number of inputs in a dialog when you create the node. If you specify more than one input, the retrieval method will be the multidistance contrast transfer function and the ``method`` field will be fixed to `ctf_multidistance`. In this case, fields ``distance-x`` and ``distance-y`` will be disabled. If you specify one input, you may choose different methods via the ``method`` field. In this case, you can either specify one value in the ``distance`` field, or specify separate distances for `x` and `y` directions via ``distance-x`` and ``distance-y`` fields (they take precedence over ``distance`` field in case they are both non-zero). Image Viewer ~~~~~~~~~~~~ ``image_viewer`` lets you display the results of your flow. It is composed of the image itself and three text boxes with sliders, which allow you to specify the image index shown, the black point and white point. In case only one image is input the first slider is hidden. Right click on the node opens a context menu which allows you to reset the black and white points (`Reset`), set them automatically (`Auto Levels`) and specify whether they should be automatically adjusted when new images are on input or left unchanged (`Auto Levels on New Image`). Double click opens the image in a new window by using the PyQtGraph_ library. In case a separate window is open, image index, black and white point settings can be set eigher in the flow node or in the window and they are reflected in both the node and the window. Flows ----- On right click in the flow scene a context menu will pop up and you will be able to add nodes. Then you can connect them by dragging a node's output port into another node's input port if those ports have the same data type, which are distinguished by port colors. By connecting node ports you create your flow which you may later execute. Every node in the scene must have a unique `caption`, so when you create a ``read`` node, the caption will be ``Read``, when you create another ``read`` node, the caption will be ``Read 2`` and so on. This is important for setting property links explained below. The roots of the flow in the scene must be UFO nodes and leaves may have `UFO` or `Array` type. It is not possible to go from `UFO` to `Array` and back to `UFO`, i.e. the `UFO` portion of the flow in the scene must be one contiguous component of the flow. There may be only one flow in the scene and it must be completely connected (there can't be disconnected ports, e.g. ``flat_field_correct``'s ``darks`` port). You can delete the current flow by pressing `Flow->New`, you can save a flow into a flow file (.flow) by `Flow->Save` and open such files by `Flow->Open`. Property Links -------------- A property of a node might depend on another node's property, e.g. the number of dimensions of an ``ifft`` node depends on the number of dimensions of the predecessing ``fft`` task. In order to reduce the number of properties you need to set, you can `link` properties together, i.e. when you set one node's property, all the linked nodes' properties will be updated (e.g. when you change the number of dimensions of an ``ifft`` node, the number of dimensions of the linked ``fft`` node will be updated as well. You can create property links in the `Property Links` window (open via main menu bar's `View` field). At the top of the window, there is a tree view of the nodes in the scene. Its items are the nodes in the flow scene, and in case there are composites, they are listed recursively. The last level of the view are the properties of the nodes in the flow. You can drag these properties into the list in the second half of the window to start creating links. If you drag a property to a new row or a row doesn't exist yet, it is automatically added. If you drag a property into an existing row (over an existing cell), it is appended to this row and a link is created. Links are allowed only for properties with compatible data types, e.g. you cannot link ``read``'s ``path`` (a string) to ``fft``'s ``dimensions`` (a number). Also keep in mind that nodes which are able to process batches have their fields which are responsible for receiving different batches (e.g. ``number`` of the ``memory_out`` node) have string data type (so that you can type `{region}` inside) Execution --------- Execution of the flow starts with executing the UFO part of the flow, and if there is a ``memory_out`` and subsequent nodes, they get the result of the UFO processing as the batches are finished (or just one batch if no batch-capable nodes are in the flow). You start it by invoking main menu bar's `Flow->run` action. You can abort the execution but invoking `Flow->abort`. Batch Processing ~~~~~~~~~~~~~~~~ Some nodes require a lot of GPU memory and they can't process all the input data at once (e.g. ``general_backproject``). Based on your system, they can split the work on their own and tell the execution mechanism to run multiple batches. If your system has multiple GPUs, ``tofu flow`` may create several batches and each of these batches may be executed on one or more cards in your system. Currently, only *one* batch processing task is allowed in the flow and only ``general_backproject`` supports batch processing. In case your flow contains a node which is able to produce batches, then your consumer nodes must be able to process batches and they must be notified of the fact that they will get more batches on input. Currently, ``write`` and ``memory_out`` support batches and this is how you set them up for it: - ``write``: ``filename`` must contain `{region}` somewhere in it, e.g. `slices-{region}.tif` - ``memory_out``: ``number`` field must be set to `{region}` The `{region}` template is then replaced by the current batch identifier provided by the producer node which is capable of batch processing, e.g. `slices-0.tif`, `slices-100.tif` and so on. If there is no node capable of producing batches, this is how you set them up for normal, non-batch processing: - ``write``: ``filename`` field set to normal file name, e.g. `slices.tif` - ``memory_out``: ``number`` field set to the number of input images Python Console -------------- Main menu's `View->Python Console` opens up a Python interpreter console with attribute ``scene`` set to the flow scene, which allows you to interact with the nodes programatically, see `qtpynodeeditor docs `_ more details on flow scene functionality. .. _PyQtGraph: http://www.pyqtgraph.org/ .. _qtpynodeeditor: ufo-kit-tofu-ed0e5bd/docs/source/usage/genreco.rst000066400000000000000000000110721521054151500223250ustar00rootroot00000000000000General 3D Reconstruction ========================= You can use command ``tofu reco`` to reconstruct paralell/cone beam tomography/laminography data. The algorithm is filtered back projection for parallel beam data and `Feldkamp `_ approach for cone beam data. It always reconstructs 2D slices in the plane parallel to the beam direction. The third dimensions may be the vertical slice position (the default) but can also be one of the geometrical parameters in order to find their best values for the final reconstruction (see ``tofu reco --help`` and check the ``--z-parameter`` entry for possible values). Angular input values are in degrees. Geometry of the 3D reconstruction is depicted in the following scheme :cite:`Farago:tv5034`: .. image:: ../figs/reco-geometry.png :width: 800 :align: center :alt: 3D reconstruction geometry The dimensions are: - **x = lateral dimension**; - **y = beam propagation dimension**; - **z = vertical dimension**; .. note:: Pixel counting starts with ``0`` and integer numbers are **boundaries** between pixels. That means that integer pixel specification, e.g. ``--center-position-z 1.0`` means: "use position at the boundary between row 0 and row 1", thus the algorithm will interpolate between the two rows, i.e. blur the result! For using solely one row for one CT slice you need to specify ``--center-position-z 1.5``, which means: "Take the second row of the projection and do not consider the one before or after", which is what we need in case of parallel CT (``tofu reco`` automatically adds the ``+ 0.5`` in case of paralell beam CT and integer ``--center-position-z``, it also informs you about this on the output). Examples -------- To reconstruct slices -100, 100 with the step size 0.5 around the center which is defined as 1008.5 from 1500 projections acquired over 180 degrees stored in ``projs.tif``, with rotation axis in pixel 951 one would do:: tofu reco --projections projs.tif --number 1500 --center-position-x 951 --overall-angle 180 --center-position-z 1008.5 --region=-100,100,0.5 --output slices.tif To scan the roll angle around -2, 2 degrees with step 0.1 degree, one can use the following command:: tofu reco --projections projs.tif --number 1500 --overall-angle 180 --center-position-x 951 --center-position-z 1008.5 --z-parameter detector-angle-y --region=-2,2,0.1 --output detector-angle-y-scan.tif --disable-projection-crop To scan the rotation axis region from pixel 940 to pixel 960 with step 0.5 pixels, (the ``center-position-x`` parameter), one can use:: tofu reco --projections projs.tif --number 1500 --overall-angle 180 --center-position-z 1008.5 --z-parameter center-position-x --region=940,960,0.5 --output center-position-x-scan.tif Order of transformations ------------------------ In case you need to know the precise order of transformations, the OpenCL backprojection code re-written to Python is:: # Rotate the axis detector_normal = np.array((0, -1, 0), dtype=float) detector_normal = rotate_z(detector.z_angle, detector_normal) detector_normal = rotate_y(detector.y_angle, detector_normal) detector_normal = rotate_x(detector.x_angle, detector_normal) # Compute d from ax + by + cz + d = 0 detector_offset = -np.dot(detector.position, detector_normal) if np.isinf(source_position[1]): # Parallel beam voxels = points else: # Apply magnification voxels = -points * source_position[1] / (detector.position[1] - source_position[1]) # Rotate the volume voxels = rotate_z(volume_rotation.z_angle, voxels) voxels = rotate_y(volume_rotation.y_angle, voxels) voxels = rotate_x(volume_rotation.x_angle, voxels) # Rotate around the axis voxels = rotate_z(tomo_angle, voxels) # Rotate the volume voxels = rotate_z(axis.z_angle, voxels) voxels = rotate_y(axis.y_angle, voxels) voxels = rotate_x(axis.x_angle, voxels) # Get the projected pixel projected = project(voxels, source_position, detector_normal, detector_offset) if np.any(detector_normal != np.array([0., -1, 0])): # Detector is not perpendicular projected -= np.array([detector.position]).T # Reverse rotation => reverse order of transformation matrices and negative angles projected = rotate_x(-detector.x_angle, projected) projected = rotate_y(-detector.y_angle, projected) projected = rotate_z(-detector.z_angle, projected) x = projected[0, :] + axis.position[0] - 0.5 y = projected[2, :] + axis.position[2] - 0.5 ufo-kit-tofu-ed0e5bd/docs/source/usage/io.rst000066400000000000000000000051351521054151500213150ustar00rootroot00000000000000Input/Output ============ Image Reading ------------- Tofu uses UFO's `Reader `_ which can handle multiple file types, including single- and multi-page tif files. If you specify a file, only that file will be read, if you specify a directory, all files in the directory will be read. If you specify a pattern, all files matching that pattern will be read. The following arguments for reading are available for all of the ``tofu`` commands unless stated otherwise: - ``--y``: Vertical coordinate from where to start reading the input image (default: ``0``); - ``--height``: Number of rows which will be read (default: ``None``, meaning: all); - ``--bitdepth``: Bit depth of raw files (bits per pixel, default: ``32``); - ``--y-step``: Read every "step" row from the input (default: ``1``); - ``--start``: Offset to the first read file (default: ``0``); - ``--number``: Number of files to read (default: ``None``, meaning: all); - ``--step``: Read every "step" file (default: ``1``). Image Writing ------------- Tofu writes tif files by UFO's `Writer `_ and they can be either single- or multi-page, which is controlled by ``--output-bytes-per-file`` and ``--outuput`` arguments. If you set ``--output-bytes-per-file`` to ``0`` or any number smaller than the size of two images in bytes, the output will be singe-page. If you specify a larger value, there will be multiple images in one tif file. On the top of that, if the file size is larger than 4 GB the tif file will be in the bigtiff format (this may make it harder to open but ImageJ can handle it). In the case you specify a file name to be a single file, like ``output.tif``, you need to make sure that ``--output-bytes-per-file`` is large enough to facilitate all images which are about to be written. Alternatively, you can specify the output as a *format string* e.g. ``output-%04d.tif``, which will create files ``output-0000.tif``, ``output-0001.tif`` and so on. A new file will be created every time the amount of bytes written in the current file would exceed the value specified by ``--output-bytes-per-file``. .. note:: You may use ``k``, ``m``, ``g``, ``t`` suffixes with ``--output-bytes-per-file`` to indicate respectively kibibytes (:math:`2^{10}` bytes), mebibytes (:math:`2^{20}` bytes) gibibytes (:math:`2^{30}` bytes) and tebibytes (:math:`2^{40}` bytes). When you want to make sure all fits into one file, just use e.g. "1t", which stands for "one tebibyte" and equals 1.099.511.627.776 bytes. ufo-kit-tofu-ed0e5bd/docs/source/usage/preprocessing.rst000066400000000000000000000377401521054151500236000ustar00rootroot00000000000000Pre-processing ============== For pre-processing, like flat correction and phase retrieval, there are the commands ``tofu flatcorrect``, ``tofu preprocess``, ``tofu find-large-spots`` and ``tofu sinos``. Please refer to ``tofu command --help`` for a list of complete parameters, many of the commands below share a lot of them, e.g. ``--darks`` are available in almost all of the commands. .. _flatcorrect: Flatcorrect ----------- You can use command ``tofu flatcorrect`` to flat correct projections. For doing this, you need a set of dark fields (images), flat fields and projections. It is good to have many dark and flat fields to reduce noise. The command computes an "average" dark and flat field based on the reduction mode below and then computes the corrected projections. The most important arguments are: - ``--projections``: Location with projections (default: ``None``); - ``--darks``: Location with darks (default: ``None``); - ``--flats``: Location with flats (default: ``None``); - ``--reduction-mode``: controls the computation of dark field and flat field, one of: ``Average`` or ``Median``; - ``--fix-nan-and-inf``: suppress NaN (not a number) and infinite numbers which may be caused by zero division ; - ``--absorptivity``: compute :math:`log (I_0 / I)`, where :math:`I_0` is the flat field and :math:`I` is the projection. If you do not specifiy this option, the result is simply :math:`I / I_0`; - ``--dark-scale``: multiplies the dark field with this value; - ``--flat-scale``: multiplies the flat field with this value (e.g. you need to reduce exposure time by half in order not to saturate, then you would set this to 2); - ``--flats2``: this argument is useful when you have two sets of flat fields, one before the projection acquisition and one after. The flat field for current projection in the sequence is linearly interpolated from the averate first and second flat field. Preprocess ---------- ``tofu preprocess`` is a command capable of: - flat correction; - applying cone beam weight; - phase retrieval; - projection filtering for back projection. You may use the arguments in :ref:`flatcorrect` to set up the flat correction part of the command, ``--transpose-input`` transposes the images. Cone Beam Weight ~~~~~~~~~~~~~~~~ *Cone beam weight* coordinates are defined as follows: - **x = lateral dimension**; - **y = beam propagation dimension**; - **z = vertical dimension**; and the following arguments apply: - ``--source-position-y``: Y source position (along beam direction) in multiples of nominal detector pixel size; - ``--detector-position-y``: Y detector position (along beam direction) in multiples of nominal detector pixel size; - ``--center-position-x``: X rotation axis position on a projection in pixels; - ``--center-position-z``: Z rotation axis position on a projection in pixels; - ``--axis-angle-x``: Rotation axis rotation around the x axis (laminographic angle, 0 = tomography) in degrees. Phase retrieval ~~~~~~~~~~~~~~~ Phase retrieval converts the interference pattern from propagation-based phase contrast to the actual phase or even projected thickness, depending on the algorithm used and arguments. It is turned on if ``--energy`` and ``--propagation-distance`` arguments are specified. The algorithms are: - ``tie``: `Transport of Intensity Equation `_; - ``ctf``: `Contrast Transfer Function `_; - ``qp``: `Quasiparticle Approach `_; - ``qp2``: modified Quasiparticle approach where frequencies are not suppressed by zero but a small constant with the sign of the CTF sign. The arguments are: .. The following list generated with the following and hand-improved: .. from tofu.config import SECTIONS .. sec = SECTIONS['retrieve-phase'] .. for k, params in sec.items(): .. choice_str = '' .. default_str = '' .. if 'choices' in params: .. choice_str = f', one of {params["choices"]}' .. if 'default' in params: .. default_str = f' (default: ``{params["default"]}``)' .. print(f'- ``--{k}``: {params["help"]}{choice_str}{default_str};') - ``--retrieval-method``: Phase retrieval method, one of [``tie``, ``ctf``, ``qp``, ``qp2``] (default: ``tie``); - ``--energy``: X-ray energy [keV] (default: ``None``, meaning: turn phase retrieval off); - ``--propagation-distance``: Sample <-> detector distance (if one value, then use the same for x and y direction, otherwise first specifies x and second y direction) [m] (default: ``None``, meaning: turn phase retrieval off); - ``--pixel-size``: Pixel size [m] (default: ``1e-06``); - ``--regularization-rate``: Regularization rate (the value of :math:`log_{10} (\delta / \beta)`, where :math:`\delta` is the real part of the complex refractive index and :math:`\beta` the imaginary; typical values between [2, 3]) (default: ``2``); - ``--delta``: Real part of the complex refractive index of the material. If specified, phase retrieval returns projected thickness, if not, it returns phase (default: ``None``); - ``--retrieval-padded-width``: Padded width used for phase retrieval (default: ``0``, meaning: automatic); - ``--retrieval-padded-height``: Padded height used for phase retrieval (default: ``0``, meaning: automatic); - ``--retrieval-padding-mode``: Padded values assignment, one of [``none``, ``clamp``, ``clamp_to_edge``, ``repeat``, ``mirrored_repeat``] (default: ``clamp_to_edge``) (refer to ** section in the `OpenCL `_ documentation for more information); - ``--thresholding-rate``: Thresholding rate (typical values between [0.01, 0.1]) (default: ``0.01``); - ``--frequency-cutoff``: Phase retrieval frequency cutoff [rad] (default: ``1e+30``); Projection Filtering for Back Projection ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Projection filtering is done prior to the back projection step. In case you need to perform many 3D reconstructions by filtered back projection on the same data set, you might want to apply the filter before the back projections. The arguments are: - ``--projection-filter``: Projection filter, one of [``none``, ``ramp``, ``ramp-fromreal``, ``butterworth``, ``faris-byer``, ``bh3``, ``hamming``] (default: ``ramp-fromreal``); - ``--projection-filter-cutoff``: Relative cutoff frequency (default: ``0.5``); - ``--projection-padding-mode``: Padded values assignment, one of [``none``, ``clamp``, ``clamp_to_edge``, ``repeat``, ``mirrored_repeat``] (default: ``clamp_to_edge``) (refer to ** section in the `OpenCL `_ documentation for more information); Generating Sinograms -------------------- ``tofu sinos`` is needed when you want to remove rings from your reconstructed slices (which manifest as stripes in sinograms). After this, you can use ``tofu tomo`` for the 3D reconstruction. Arguments: - ``--pass-size``: Number of sinograms to process per pass, which is useful if your PC has little memory (CPU RAM, sinogram generation does not take place on GPUs) (default: ``0``, meaning: automatic); - ``--y``: Vertical coordinate from where to start reading the input image: controls detector row of the first sinogram (default: ``0``); - ``--height``: Number of rows which will be read: controls number of sinograms (default: ``None``, meaning: all). You may also perform flat correction in one step by using the flat correction arguments. For a full list, see ``tofu sinos --help``. .. _inpainting: Inpainting ---------- Inpainting is useful when we need to (a) seamlessly blend a part of one image into another, or (b) if we want to interpolate some corrupted region in an image. In the context of 3D reconstruction, inpainting can be used in :ref:`broad_ring_filtering`. The algorithm is based on the Fourier transform method in :cite:`MOREL2012342`. Seamless Cloning ~~~~~~~~~~~~~~~~ One may seamlessly blend two images like this: .. code-block:: bash tofu inpaint --guidance-image guidance.tif --projections boat.tif --mask-image mask.tif --preserve-mean --output inpainted.tif Which will produce the following output: .. image:: ../figs/inpainting.png :width: 800 :align: center :alt: Inpainting example Interpolation of a corrupted region requires the same command, just without the specification of the guidance image: .. code-block:: bash tofu inpaint --projections boat.tif --mask-image mask.tif --preserve-mean --output inpainted.tif # For comparison: horizontal-interpolate ufo-launch [read path=boat.tif, read path=mask.tif] ! horizontal-interpolate ! write filename=horiz-interpolate.tif Side-by-side comparison of the result of ``horizontal-interpolate`` (left) and inpainting (right) generated with the above commands: .. image:: ../figs/hi-inp-comparison.jpg :width: 800 :align: center :alt: Horizontal interpolation vs. inpainting Harmonization of Image Borders (for the Removal of the Power Spectrum Cross) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Discrete Fourier transform assumes that images are `N`-periodic, i.e. after pixel `N-1`, pixel `0` comes again and so on. The transitions between image borders thus often contain harsh discontinuities which are reflected in the Fourier transform and manifest as a cross in the power spectrum aligned with the coordinate axes and crossing the `(0, 0)` frequency. We can remedy this by blending the opposing borders. In the image below (boat cropped to ``371 x 371`` pixels), on the left is the original image after swapping quadrants to emphasize the border discontinuities. In the middle is the harmonized image without padding of the Fourier transform and on the right with padding from the original ``371 x 371`` to ``512 x 512`` pixels. Commands used for their generation are shown below (with the additional swapping of quadrants). .. image:: ../figs/harmonization-images.jpg :width: 800 :align: center :alt: Image before and after border harmonization .. code-block:: bash tofu inpaint --projections input.tif --preserve-mean --harmonize-borders --output middle-harmonized.tif tofu inpaint --projections input.tif --inpaint-padded-width 512 --inpaint-padded-height 512 --inpaint-padding-mode mirrored_repeat --preserve-mean --harmonize-borders --output right-harmonized.tif Below are the power spectra of the respective images above and below the commands to generate them. Note the cross in the left image and how the positive and negative frequencies are starting to get mixed in the right one, which is caused by ``mirrored_repeat`` padding mode. .. image:: ../figs/harmonization-ips.jpg :width: 800 :align: center :alt: Power spectra of an image before and after border harmonization .. code-block:: bash ufo-launch read path=input.tif ! fft dimensions=2 ! power-spectrum ! calculate expression="'log(v)'" ! swap-quadrants ! write filename=left-power-spectrum.tif ufo-launch read path=middle-harmonized.tif ! fft dimensions=2 ! power-spectrum ! calculate expression="'log(v)'" ! swap-quadrants ! write filename=middle-power-spectrum.tif ufo-launch read path=right-harmonized.tif ! fft dimensions=2 ! power-spectrum ! calculate expression="'log(v)'" ! swap-quadrants ! write filename=right-power-spectrum.tif .. _broad_ring_filtering: Removing Broad Rings from Tomographic Slices -------------------------------------------- ``tofu find-large-spots`` finds large scintillator spots of extreme intensity (zero or maximum) on projections. These spots cannot be flat corrected and cause *broad ring artifacts* in the reconstructed tomographic slices (see :ref:`narrow_ring_filtering` for filtering narrow rings). By finding and suppressing these spots prior to 3D reconstruction, one can obtain much cleaner slices. The algorithm creates a mask which you can then use to filter the erroneous regions. It works on flat fields, first, it removes the low frequency components of a flat field, then thresholds it and from the found extreme intensities "grows" until another threshold is hit. The arguments are: - ``--images``: Location with input images (default: ``None``); - ``--gauss-sigma``: Gaussian sigma for removing low frequencies (filter will be 1 - gauss window) (default: ``0.0``, meaning: turn low-frequency removal off); - ``--blurred-output``: Path where to store the blurred input (default: ``None``); - ``--spot-threshold``: Pixels with grey value larger than this are considered as spots (default: ``0.0``); - ``--spot-threshold-mode``: Pixels must be either "below", "above" the spot threshold, or their "absolute" value can be compared, one of ['below', 'above', 'absolute'] (default: ``absolute``); - ``--grow-threshold``: Spot growing threshold, if 0 it will be set to FWTM times noise standard deviation (default: ``0.0``, meaning: automatic); - ``--find-large-spots-padding-mode``: Padded values assignment for the filtered input image, one of [``none``, ``clamp``, ``clamp_to_edge``, ``repeat``, ``mirrored_repeat``] (default: ``repeat``) (refer to ** section in the `OpenCL `_ documentation for more information). *Broad ring filtering example:* .. code-block:: bash # Flat correction tofu flatcorrect --projections projections/ --darks darks/ --flats flats/ --fix-nan-and-inf --output fc.tif --output-bytes-per-file 1t # Finding the spots tofu find-large-spots --output-bytes-per-file 0 --number 1 --output mask.tif --spot-threshold 500.0 --find-large-spots-padding-mode repeat --spot-threshold-mode absolute --gauss-sigma 10.0 --images flats/ # Filtering the spots by horizontal linear interpolation ufo-launch -q [read path=fc.tif, read path=mask.tif] ! horizontal-interpolate ! write filename=interpolated.tif bytes-per-file=1000000000000 tiff-bigtiff=True # Or by inpainting tofu inpaint --projections fc.tif --mask-image mask.tif --preserve-mean --output interpolated.tif .. _narrow_ring_filtering: Removing Narrow Rings from Tomographic Slices --------------------------------------------- This is achieved by removing stripes in sinograms which translate to half-rings after 3D reconstruction. This algorithm is most suitable for *narrow ring artifacts* as opposed to the :ref:`broad_ring_filtering`. In the following example we assume sinogram width ``2016`` pixels and height ``3000`` pixels. In order to suppress convolution artifacts, we pad the sinogram by a factor of 2 in every dimension and then need to manually compute the next power of two required by UFO's ``fft`` filter. Moreover, we place the original sinogram in the middle of the padded one and use the ``mirrored_repeat`` approach to fill the padding pixels with data instead of just using zeros. The computation is ``2 x 2016 = 4032`` and the next power of two is ``4096``, ``2 x 3000 = 6000`` with the next power of two ``8192``. We want to place the sinogram in the middle, so starting ``x`` is ``(4096 - 2016) / 2 = 1040`` and starting ``y`` is ``(8192 - 3000) / 2 = 2596``. Put together on the command line, we arrive at the *narrow ring filtering example:* .. code-block:: bash # Create sinograms tofu sinos --number 3000 --projections interpolated.tif --output sinos.tif --output-bytes-per-file 1t # Filter narrow stripes in sinograms in frequency space ufo-launch -q read path=sinos.tif ! pad width=4096 height=8192 x=1040 y=2596 addressing-mode=mirrored_repeat ! fft dimensions=2 ! filter-stripes horizontal-sigma=100.0 vertical-sigma=2.0 ! ifft dimensions=2 ! crop width=2016 height=3000 x=1040 y=2596 ! write filename=filtered-sino.tif bytes-per-file=1000000000000 tiff-bigtiff=True .. note:: We do our best to keep the argument names consistent with the parameters from UFO Framework but sometimes that would lead to ambiguities and the arguments in tofu are prefixed with the filter name, like ``--output-bytes-per-file``. Also, high-level features like using ``k``, ``m``, ``g``, ``t`` with ``--output-bytes-per-file`` is a feature of tofu and is not included in the low-level ``ufo-launch`` command. ufo-kit-tofu-ed0e5bd/pyproject.toml000066400000000000000000000023131521054151500175270ustar00rootroot00000000000000[build-system] requires = ["setuptools>=68,<77", "wheel"] build-backend = "setuptools.build_meta" [project] name = "ufo-tofu" dynamic = ["version", "readme"] description = "A fast, versatile and user-friendly image processing toolkit for computed tomography" requires-python = ">=3" license = { text = "LGPL" } authors = [ { name = "Matthias Vogelgesang", email = "matthias.vogelgesang@kit.edu" }, ] dependencies = [ "PyGObject", "imageio", "numpy", "tifffile", "scikit-image", ] [project.urls] Homepage = "http://github.com/ufo-kit/tofu" [project.optional-dependencies] interactive = ["IPython"] gui = ["PyQt5", "pyqtgraph"] flow = ["PyQt5", "networkx", "pyqtconsole", "pyxdg", "qtpynodeeditor", "pyqtgraph"] test = ["pytest", "pytest-qt"] ez = ["PyQt5", "PyYAML", "pyqtgraph", "matplotlib"] edf = ["fabio"] [tool.setuptools] packages = { find = {} } script-files = ["bin/tofu"] license-files = ["LICENSE"] [tool.setuptools.dynamic] version = { attr = "tofu.__version__" } readme = { file = "README.md", content-type = "text/markdown" } [tool.setuptools.package-data] tofu = ["gui.ui"] "tofu.flow" = ["composites/*.cm", "config.json"] [tool.setuptools.exclude-package-data] "*" = ["README.rst"] ufo-kit-tofu-ed0e5bd/setup.py000066400000000000000000000024571521054151500163360ustar00rootroot00000000000000from pathlib import Path from setuptools import setup, find_packages def read_version(): namespace = {} exec(Path('tofu/__init__.py').read_text(), namespace) return namespace['__version__'] setup( name='ufo-tofu', python_requires='>=3', version=read_version(), author='Matthias Vogelgesang', author_email='matthias.vogelgesang@kit.edu', url='http://github.com/ufo-kit/tofu', license='LGPL', packages=find_packages(), package_data={'tofu': ['gui.ui'], 'tofu.flow': ['composites/*.cm', 'config.json']}, scripts=['bin/tofu'], exclude_package_data={'': ['README.rst']}, install_requires= [ 'PyGObject', 'imageio', 'numpy', 'tifffile', 'scikit-image', ], extras_require={ 'interactive': ['IPython'], 'gui': ['PyQt5', 'pyqtgraph'], 'flow': ['PyQt5', 'networkx', 'pyqtconsole', 'pyxdg', 'qtpynodeeditor', 'pyqtgraph'], 'test': ['pytest', 'pytest-qt'], 'ez': ['PyQt5', 'PyYAML', 'pyqtgraph', 'matplotlib'], 'edf': ['fabio'], }, description="A fast, versatile and user-friendly image "\ "processing toolkit for computed tomography", long_description=open('README.md').read(), long_description_content_type='text/markdown', ) ufo-kit-tofu-ed0e5bd/tofu/000077500000000000000000000000001521054151500155715ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/tofu/__init__.py000066400000000000000000000000271521054151500177010ustar00rootroot00000000000000__version__ = '0.15.0' ufo-kit-tofu-ed0e5bd/tofu/config.py000066400000000000000000001072231521054151500174150ustar00rootroot00000000000000import argparse import sys import logging import configparser as configparser from collections import OrderedDict from tofu.util import convert_filesize, restrict_value, tupleize, range_list LOG = logging.getLogger(__name__) NAME = "reco.conf" SECTIONS = OrderedDict() SECTIONS['general'] = { 'config': { 'default': NAME, 'type': str, 'help': "File name of configuration", 'metavar': 'FILE'}, 'verbose': { 'default': False, 'ezdefault': False, 'help': 'Verbose output', 'action': 'store_true'}, 'output': { 'default': 'result-%05i.tif', 'type': str, 'help': "Path to location or format-specified file path " "for storing reconstructed slices", 'metavar': 'PATH'}, 'output-bitdepth': { 'default': 32, 'ezdefault': 8, 'type': restrict_value((0, None), dtype=int), 'help': "Bit depth of output, either 8, 16 or 32", 'metavar': 'BITDEPTH'}, 'output-minimum': { 'default': None, 'ezdefault': 0.0, 'type': float, 'help': "Minimum value that maps to zero (turns on --output-rescale)", 'metavar': 'MIN'}, 'output-maximum': { 'default': None, 'ezdefault': 0.0, 'type': float, 'help': "Maximum input value that maps to largest output value (turns on --output-rescale)", 'metavar': 'MAX'}, 'output-rescale': { 'default': False, 'action': 'store_true', 'help': "If true rescale grey values either automatically or according to set " "--output-minimum and --output-maximum"}, 'output-bytes-per-file': { 'default': '128g', 'type': convert_filesize, 'help': "Maximum bytes per file (0=single-image output, otherwise multi-image output)\ , 'k', 'm', 'g', 't' suffixes can be used", 'metavar': 'BYTESPERFILE'}, 'output-append': { 'default': False, 'action': 'store_true', 'help': 'Append images instead of overwriting existing files'}, 'log': { 'default': None, 'type': str, 'help': "File name of optional log", 'metavar': 'FILE'}, 'width': { 'default': None, 'type': restrict_value((0, None), dtype=int), 'unit': "pixel", 'help': "Input width"}} SECTIONS['reading'] = { 'y': { 'default': 0, 'ezdefault': 100, 'type': restrict_value((0, None), dtype=int), 'unit': "pixel", 'help': 'Vertical coordinate from where to start reading the input image'}, 'height': { 'default': None, 'ezdefault': 200, 'type': restrict_value((0, None), dtype=int), 'unit': "pixel", 'help': "Number of rows which will be read"}, 'bitdepth': { 'default': 32, 'type': restrict_value((0, None), dtype=int), 'help': "Bit depth of raw files"}, 'y-step': { 'default': 1, 'ezdefault': 20, 'type': restrict_value((0, None), dtype=int), 'unit': "pixel", 'help': "Read every \"step\" row from the input"}, 'start': { 'default': 0, 'type': restrict_value((0, None), dtype=int), 'help': 'Offset to the first read file'}, 'number': { 'default': None, 'type': restrict_value((0, None), dtype=int), 'help': 'Number of files to read'}, 'step': { 'default': 1, 'ezdefault': 1, 'type': restrict_value((0, None), dtype=int), 'help': 'Read every \"step\" file'}, 'resize': { 'default': None, 'type': restrict_value((0, None), dtype=int), 'help': 'Bin pixels before processing'}, 'retries': { 'default': 0, 'type': restrict_value((0, None), dtype=int), 'metavar': 'NUMBER', 'help': 'How many times to wait for new files'}, 'retry-timeout': { 'default': 0, 'type': restrict_value((0, None), dtype=int), 'metavar': 'TIME', 'help': 'How long to wait for new files per trial'}} SECTIONS['flat-correction'] = { 'projections': { 'default': None, 'type': str, 'help': "Location with projections", 'metavar': 'PATH'}, 'darks': { 'default': None, 'type': str, 'help': "Location with darks", 'metavar': 'PATH'}, 'dark-scale': { 'default': 1, 'type': float, 'help': "Scaling dark"}, 'reduction-mode': { 'default': "Average", 'type': str, 'help': "Flat-field correction options: Average (darks) or median (flats)"}, 'fix-nan-and-inf': { 'default': False, 'help': "Fix nan and inf", 'action': 'store_true'}, 'flats': { 'default': None, 'type': str, 'help': "Location with flats", 'metavar': 'PATH'}, 'flats2': { 'default': None, 'type': str, 'help': "Location with flats 2 for interpolation correction", 'metavar': 'PATH'}, 'flat-scale': { 'default': 1, 'type': float, 'help': "Scaling flat"}, 'absorptivity': { 'default': False, 'action': 'store_true', 'help': 'Do absorption correction'}} SECTIONS['retrieve-phase'] = { 'retrieval-method': { 'choices': ['tie', 'ctf', 'qp', 'qp2'], 'default': 'tie', 'help': "Phase retrieval method"}, 'energy': { 'default': None, 'ezdefault': 20, 'type': float, 'unit': "keV", 'help': "X-ray energy"}, 'propagation-distance': { 'default': None, 'ezdefault': "0.1", 'type': tupleize(), 'unit': "m", 'help': ("Sample <-> detector distance (if one value, then use the same for x and y " "direction, otherwise first specifies x and second y direction) [m]")}, 'pixel-size': { 'default': 1e-6, 'ezdefault': 3.6e-6, 'type': float, 'unit': "m", 'help': "Pixel size"}, 'regularization-rate': { 'default': 2, 'ezdefault': 2.3, 'type': float, 'help': "Regularization rate (typical values between [2, 3])"}, 'delta': { 'default': None, 'type': float, 'help': "Real part of the complex refractive index of the material. " "If specified, phase retrieval returns projected thickness, " "if not, it returns phase"}, 'tie-approximate-logarithm': { 'default': False, 'help': ("Approximate the logarithm of the tie method by the first order Taylor series " "expansion [ln(x) ~ ln(a) + (x - a) / a at a, a specified with " "--tie-approximate-point]. This way we may do the filtering for FBP already " "by the phase retrieval and save one forward and one backward 1D FFT needed " "if the filtering occurse separately. This is mostly useful for online reconstruction " "when one reconstruct only a few slices."), 'action': 'store_true'}, 'tie-approximate-point': { 'default': 0.75, 'type': float, 'help': ("Taylor series point of expansion used by --tie-approximate-logarithm. " "The error of the approximation will be smallest around this point, " "so you can tune this for the desired grey level of interest " "(given by the sample based on e^(-mju * projected_thickness)).")}, 'retrieval-padded-width': { 'default': 0, 'unit': "pixel", 'type': restrict_value((0, None), dtype=int), 'help': "Padded width used for phase retrieval"}, 'retrieval-padded-height': { 'default': 0, 'unit': "pixel", 'type': restrict_value((0, None), dtype=int), 'help': "Padded height used for phase retrieval"}, 'retrieval-padding-mode': { 'choices': ['none', 'clamp', 'clamp_to_edge', 'repeat', 'mirrored_repeat'], 'default': 'clamp_to_edge', 'help': "Padded values assignment"}, 'thresholding-rate': { 'default': 0.01, 'type': float, 'help': "Thresholding rate (typical values between [0.01, 0.1])"}, 'frequency-cutoff': { 'default': 1e30, 'type': float, 'help': "Phase retrieval frequency cutoff [rad]"}} SECTIONS['sinos'] = { 'pass-size': { 'type': restrict_value((0, None), dtype=int), 'default': 0, 'help': 'Number of sinograms to process per pass'}} SECTIONS['reconstruction'] = { 'sinograms': { 'default': None, 'type': str, 'help': "Location with sinograms", 'metavar': 'PATH'}, 'angle': { 'default': None, 'type': float, 'unit': "rad", 'help': "Angle step between projections"}, 'enable-tracing': { 'default': False, 'help': "Enable tracing and store result in .PID.json", 'action': 'store_true'}, 'remotes': { 'default': None, 'type': str, 'help': "Addresses to remote ufo-nodes", 'nargs': '+'}, 'projection-filter': { 'default': 'ramp-fromreal', 'type': str, 'help': "Projection filter", 'choices': ['none', 'ramp', 'ramp-fromreal', 'butterworth', 'faris-byer', 'bh3', 'hamming']}, 'projection-filter-cutoff': { 'default': 0.5, 'type': float, 'help': "Relative cutoff frequency"}, 'projection-padding-mode': { 'choices': ['none', 'clamp', 'clamp_to_edge', 'repeat', 'mirrored_repeat'], 'default': 'clamp_to_edge', 'help': "Padded values assignment"}} SECTIONS['tomographic-reconstruction'] = { 'axis': { 'default': None, 'type': float, 'unit': "pixel", 'help': "Axis position"}, 'dry-run': { 'default': False, 'help': "Reconstruct without writing data", 'action': 'store_true'}, 'offset': { 'default': 0.0, 'type': float, 'unit': "rad", 'help': "Angle offset of first projection"}, 'method': { 'default': 'fbp', 'type': str, 'help': "Reconstruction method", 'choices': ['fbp', 'dfi', 'sart', 'sirt', 'sbtv', 'asdpocs']}} SECTIONS['laminographic-reconstruction'] = { 'angle': { 'default': None, 'type': float, 'unit': "deg", 'help': "Angle step between projections"}, 'dry-run': { 'default': False, 'help': "Reconstruct without writing data", 'action': 'store_true'}, 'axis': { 'default': None, 'required': True, 'unit': "pixel", 'type': tupleize(num_items=2), 'help': "Axis position"}, 'x-region': { 'default': "0,-1,1", 'unit': "pixel", 'type': tupleize(num_items=3, conv=int), 'help': "X region as from,to,step"}, 'y-region': { 'default': "0,-1,1", 'unit': "pixel", 'type': tupleize(num_items=3, conv=int), 'help': "Y region as from,to,step"}, 'z': { 'default': 0, 'unit': "pixel", 'type': int, 'help': "Z coordinate of the reconstructed slice"}, 'z-parameter': { 'default': 'z', 'type': str, 'choices': ['z', 'x-center', 'lamino-angle', 'roll-angle'], 'help': "Parameter to vary along the reconstructed z-axis"}, 'region': { 'default': "0,-1,1", 'type': tupleize(num_items=3), 'help': "Z-axis parameter region as from,to,step"}, 'overall-angle': { 'default': None, 'unit': "deg", 'type': float, 'help': "The total angle over which projections were taken"}, 'lamino-angle': { 'default': None, 'unit': "deg", 'required': True, 'type': float, 'help': "The laminographic angle"}, 'roll-angle': { 'default': 0.0, 'unit': "deg", 'type': float, 'help': "Sample angular misalignment to the side (roll), positive angles mean\ clockwise misalignment"}, 'slices-per-device': { 'default': None, 'type': restrict_value((0, None), dtype=int), 'help': "Number of slices computed by one computing device"}, 'only-bp': { 'default': False, 'action': 'store_true', 'help': "Do only backprojection with no other processing steps"}, 'lamino-padding-mode': { 'choices': ['none', 'clamp', 'clamp_to_edge', 'repeat', 'mirrored_repeat'], 'default': 'clamp', 'help': "Padded values assignment for the filtered projection"}} SECTIONS['fbp'] = { 'crop-width': { 'default': None, 'unit': "pixel", 'type': restrict_value((0, None), dtype=int), 'help': "Width of final slice"}, 'projection-crop-after': { 'choices': ['filter', 'backprojection'], 'default': 'backprojection', 'help': "Whether to crop projections after filtering (can cause truncation " "artifacts) or after backprojection"}} SECTIONS['dfi'] = { 'oversampling': { 'default': None, 'type': restrict_value((0, None), dtype=int), 'help': "Oversample factor"}} SECTIONS['ir'] = { 'num-iterations': { 'default': 10, 'type': restrict_value((0, None), dtype=int), 'help': "Maximum number of iterations"}} SECTIONS['sart'] = { 'relaxation-factor': { 'default': 0.25, 'type': float, 'help': "Relaxation factor"}} SECTIONS['sbtv'] = { 'lambda': { 'default': 0.1, 'type': float, 'help': "Lambda"}, 'mu': { 'default': 0.5, 'type': float, 'help': "mu"}} SECTIONS['gui'] = { 'enable-cropping': { 'default': False, 'help': "Enable cropping width", 'action': 'store_true'}, 'show-2d': { 'default': False, 'help': "Show 2D slices with pyqtgraph", 'action': 'store_true'}, 'show-3d': { 'default': False, 'help': "Show 3D slices with pyqtgraph", 'action': 'store_true'}, 'last-dir': { 'default': '.', 'type': str, 'help': "Path of the last used directory", 'metavar': 'PATH'}, 'deg0': { 'default': '.', 'type': str, 'help': "Location with 0 deg projection", 'metavar': 'PATH'}, 'deg180': { 'default': '.', 'type': str, 'help': "Location with 180 deg projection", 'metavar': 'PATH'}, 'ffc-correction': { 'default': False, 'help': "Enable darks or flats correction", 'action': 'store_true'}, 'num-flats': { 'default': 0, 'type': int, 'help': "Number of flats for ffc correction."}} SECTIONS['estimate'] = { 'estimate-method': { 'type': str, 'default': 'correlation', 'help': 'Rotation axis estimation algorithm', 'choices': ['reconstruction', 'correlation']}} SECTIONS['perf'] = { 'num-runs': { 'default': 3, 'type': restrict_value((0, None), dtype=int), 'help': "Number of runs"}, 'width-range': { 'default': '1024', 'type': range_list, 'unit': "pixel", 'help': "Width or range of widths of generated projections"}, 'height-range': { 'default': '1024', 'type': range_list, 'unit': "pixel", 'help': "Height or range of heights of generated projections"}, 'num-projection-range': { 'default': '512', 'type': range_list, 'help': "Number or range of number of projections"}} SECTIONS['preprocess'] = { 'transpose-input': { 'default': False, 'action': 'store_true', 'help': "Transpose projections before they are backprojected (after phase retrieval)"}, 'projection-filter': { 'default': 'ramp-fromreal', 'type': str, 'help': "Projection filter", 'choices': ['none', 'ramp', 'ramp-fromreal', 'butterworth', 'faris-byer', 'bh3', 'hamming']}, 'projection-filter-cutoff': { 'default': 0.5, 'type': float, 'help': "Relative cutoff frequency"}, 'projection-filter-scale': { 'default': 1., 'type': float, 'help': "Multiplicative factor of the projection filter"}, 'projection-padding-mode': { 'choices': ['none', 'clamp', 'clamp_to_edge', 'repeat', 'mirrored_repeat'], 'default': 'clamp_to_edge', 'help': "Padded values assignment"}, 'projection-crop-after': { 'choices': ['filter', 'backprojection'], 'default': 'backprojection', 'help': "Whether to crop projections after filtering (can cause truncation " "artifacts) or after backprojection"}} SECTIONS['cone-beam-weight'] = { 'source-position-y': { 'default': "-Inf", 'type': tupleize(dtype=list), 'unit': "pixel", 'help': "Y source position (along beam direction) in global coordinates " "(multiple of detector pixel size)"}, 'detector-position-y': { 'default': "0", 'type': tupleize(dtype=list), 'unit': "pixel", 'help': "Y detector position (along beam direction) in global coordinates " "(multiple of detector pixel size)"}, 'center-position-x': { 'default': None, 'type': tupleize(), 'unit': "pixel", 'help': "X rotation axis position on a projection"}, 'center-position-z': { 'default': None, 'ezdefault': "0", 'type': tupleize(), 'unit': "pixel", 'help': "Z rotation axis position on a projection"}, 'axis-angle-x': { 'default': "0", 'ezdefault': "30", 'type': tupleize(dtype=list), 'unit': "deg", 'help': "Rotation axis rotation around the x axis" "(laminographic angle, 0 = tomography)"}} SECTIONS['general-reconstruction'] = { 'enable-tracing': { 'default': False, 'help': "Enable tracing and store result in .PID.json", 'action': 'store_true'}, 'disable-cone-beam-weight': { 'default': False, 'action': 'store_true', 'help': "Disable cone beam weighting"}, 'slice-memory-coeff': { 'default': 0.8, 'ezdefault': 0.7, 'type': restrict_value((0.01, 0.95)), 'help': "Portion of the GPU memory used for slices (from 0.01 to 0.9) [fraction]. " "The total amount of consumed memory will be larger depending on the " "complexity of the graph. In case of OpenCL memory allocation errors, " "try reducing this value."}, 'num-gpu-threads': { 'default': 1, 'ezdefault': None, 'type': restrict_value((1, None), dtype=int), 'help': "Number of parallel reconstruction threads on one GPU"}, 'disable-projection-crop': { 'default': False, 'action': 'store_true', 'help': "Disable automatic cropping of projections computed from volume region"}, 'dry-run': { 'default': False, 'help': "Reconstruct without reading or writing data", 'action': 'store_true'}, 'data-splitting-policy': { 'default': 'one', 'ezdefault': 'one', 'type': str, 'help': "'one': one GPU should process as many slices as possible, " "'many': slices should be spread across as many GPUs as possible", 'choices': ['one', 'many']}, 'projection-margin': { 'default': 0, 'type': restrict_value((0, None), dtype=int), 'unit': "pixel", 'help': "By optimization of the read projection region, the read region will be " "[y - margin, y + height + margin]"}, 'slices-per-device': { 'default': None, 'ezdefault': None, 'type': restrict_value((0, None), dtype=int), 'help': "Number of slices computed by one computing device"}, 'gpus': { 'default': None, 'nargs': '+', 'type': int, 'help': "GPUs with these indices will be used (0-based)"}, 'burst': { 'default': None, 'type': restrict_value((0, None), dtype=int), 'help': "Number of projections processed per kernel invocation"}, 'x-region': { 'default': "0,-1,1", 'type': tupleize(num_items=3), 'unit': "pixel", 'help': "x region as from,to,step"}, 'y-region': { 'default': "0,-1,1", 'type': tupleize(num_items=3), 'unit': "pixel", 'help': "y region as from,to,step"}, 'z': { 'default': 0, 'type': int, 'unit': "pixel", 'help': "z coordinate of the reconstructed slice"}, 'z-parameter': { 'default': 'z', 'type': str, 'choices': ['axis-angle-x', 'axis-angle-y', 'axis-angle-z', 'volume-angle-x', 'volume-angle-y', 'volume-angle-z', 'detector-angle-x', 'detector-angle-y', 'detector-angle-z', 'detector-position-x', 'detector-position-y', 'detector-position-z', 'source-position-x', 'source-position-y', 'source-position-z', 'center-position-x', 'center-position-z', 'z'], 'help': "Parameter to vary along the reconstructed z-axis"}, 'region': { 'default': "0,1,1", 'type': tupleize(num_items=3), 'help': "z axis parameter region as from,to,step"}, 'source-position-x': { 'default': "0", 'unit': "pixel", 'type': tupleize(dtype=list), 'help': "X source position (horizontal) in global coordinates"}, 'source-position-z': { 'default': "0", 'type': tupleize(dtype=list), 'unit': "pixel", 'help': "Z source position (vertical) in global coordinates"}, 'detector-position-x': { 'default': "0", 'type': tupleize(dtype=list), 'unit': "pixel", 'help': "X detector position (horizontal) in global coordinates"}, 'detector-position-z': { 'default': "0", 'type': tupleize(dtype=list), 'unit': "pixel", 'help': "Z detector position (vertical) in global coordinates"}, 'detector-angle-x': { 'default': "0", 'type': tupleize(dtype=list), 'unit': "deg", 'help': "Detector rotation around the x axis (horizontal)"}, 'detector-angle-y': { 'default': "0", 'type': tupleize(dtype=list), 'unit': "deg", 'help': "Detector rotation around the y axis (along beam direction)"}, 'detector-angle-z': { 'default': "0", 'type': tupleize(dtype=list), 'unit': "deg", 'help': "Detector rotation around the z axis (vertical)"}, 'axis-angle-y': { 'default': "0", 'ezdefault': "0", 'type': tupleize(dtype=list), 'unit': "deg", 'help': "Rotation axis rotation around the y axis (along beam direction)"}, 'axis-angle-z': { 'default': "0", 'type': tupleize(dtype=list), 'unit': "deg", 'help': "Rotation axis rotation around the z axis (vertical)"}, 'volume-angle-x': { 'default': "0", 'type': tupleize(dtype=list), 'unit': "deg", 'help': "Volume rotation around the x axis (horizontal)"}, 'volume-angle-y': { 'default': "0", 'type': tupleize(dtype=list), 'unit': "deg", 'help': "Volume rotation around the y axis (along beam direction)"}, 'volume-angle-z': { 'default': "0", 'ezdefault': "0.0", 'type': tupleize(dtype=list), 'unit': "deg", 'help': "Volume rotation around the z axis (vertical)"}, 'compute-type': { 'default': 'float', 'type': str, 'help': "Data type for performing kernel math operations", 'choices': ['half', 'float', 'double']}, 'result-type': { 'default': 'float', 'type': str, 'help': "Data type for storing the intermediate gray value for a voxel " "from various rotation angles", 'choices': ['half', 'float', 'double']}, 'store-type': { 'default': 'float', 'type': str, 'help': "Data type of the output volume", 'choices': ['half', 'float', 'double', 'uchar', 'ushort', 'uint']}, 'overall-angle': { 'default': None, 'ezdefault': 360, 'type': float, 'unit': "deg", 'help': "The total angle over which projections were taken"}, 'genreco-padding-mode': { 'choices': ['none', 'clamp', 'clamp_to_edge', 'repeat', 'mirrored_repeat'], 'default': 'clamp', 'help': "Padded values assignment for the filtered projection"}, 'slice-gray-map': { 'default': "0,0", 'type': tupleize(num_items=2, conv=float), 'help': "Minimum and maximum gray value mapping if store-type is integer-based"} } SECTIONS['find-large-spots'] = { 'method': { 'ezdefault': 'grow', 'default': 'grow', 'type': str, 'help': "Data type of the output volume", 'choices': ['grow', 'median']}, # median arguments 'median-width': { 'ezdefault': 50, 'default': 10, 'type': int, 'help': "Width of the median filter (operates only horizontally)"}, 'median-direction': { 'ezdefault': 'horizontal', 'default': 'horizontal', 'type': str, 'choices': ['both', 'horizontal', 'vertical'], 'help': "Median filtering direction (in case of 'both', it will be a disk with radius " "'median-width' / 2"}, 'dilation-disk-radius': { 'ezdefault': 2, 'default': 2, 'type': int, 'help': "Dilation disk radius used for enlarging the found mask"}, 'max-spot-size': { 'default': 1000, 'type': int, 'help': "Spots with less number of pixels than this value are discarded " "(only available with --method median and this threshold " "is applied before dilation)"}, # grow arguments 'images': { 'default': None, 'type': str, 'help': "Location with input images", 'metavar': 'PATH'}, 'transpose-input': { 'default': False, 'action': 'store_true', 'help': "Transpose image when *vertical_sigma* is True, i.e. filter horizontal stripes " "instead of vertical"}, 'gauss-sigma': { 'default': 0.0, 'ezdefault': 5.0, 'type': float, 'help': "Gaussian sigma for removing low frequencies (filter will be 1 - gauss window)"}, 'vertical-sigma': { 'default': False, 'action': 'store_true', 'help': "*gauss-sigma* will be used for removing low frequencies in a horizontal stripe " "(vertical Gaussian profile applied around frequency ky=0 for all kx in a 1 - " "gauss window fashion)"}, 'blurred-output': { 'default': None, 'type': str, 'help': "Path where to store the blurred input"}, 'averaging-mode': { 'ezdefault': 'median', 'default': 'first', 'type': str, 'help': "How to average input images (first = take a single image, " "only available with --method median)", 'choices': ['first', 'mean', 'median']}, 'spot-threshold': { 'default': 0.0, 'ezdefault': 2000.0, 'type': float, 'help': "Pixels with grey value larger than this (after blurring in case of 'grow' method " "and after median subtraction in case of 'median' method) are considered as spots. " "In case of 'median' method and if 'spot-threshold' is not set, it is " "automatically set to 99-th percentile of the histogram."}, 'spot-threshold-mode': { 'ezdefault': 'absolute', 'default': 'absolute', 'type': str, 'help': "Pixels must be either \"below\", \"above\" the spot threshold, or \ their \"absolute\" value can be compared", 'choices': ['below', 'above', 'absolute']}, 'grow-threshold': { 'ezdefault': 0.0, 'default': 0.0, 'type': float, 'help': "Spot growing threshold (if 0 it will be set to FWTM times noise standard " "deviation). All pixels connected to the ones previously found by " "'spot-threshold' which are above 'grow-threshold' are marked as spots." }, 'find-large-spots-padding-mode': { 'choices': ['none', 'clamp', 'clamp_to_edge', 'repeat', 'mirrored_repeat'], 'default': 'repeat', 'help': "Padded values assignment for the filtered input image"}, } SECTIONS['inpaint'] = { 'projections': { 'default': None, 'type': str, 'help': "Location with projections", 'metavar': 'PATH'}, 'guidance-image': { 'default': None, 'type': str, 'help': "Guidance image, structure which will be inpainted into input images"}, 'mask-image': { 'default': None, 'type': str, 'help': "Mask image, pixels with ones will use the guidance image, pixels with zeros \ the original image"}, 'inpaint-padded-width': { 'default': 0, 'type': restrict_value((0, None), dtype=int), 'help': "Padded width used for inpainting"}, 'inpaint-padded-height': { 'default': 0, 'type': restrict_value((0, None), dtype=int), 'help': "Padded height used for inpainting"}, 'inpaint-padding-mode': { 'choices': ['none', 'clamp', 'clamp_to_edge', 'repeat', 'mirrored_repeat'], 'default': 'clamp_to_edge', 'help': "Padded values assignment for inpainting"}, 'preserve-mean': { 'default': False, 'action': 'store_true', 'help': "Mean value of the inpainted result will be the same as the one of the input"}, 'harmonize-borders': { 'default': False, 'action': 'store_true', 'help': "Harmonize transitions between image borders useful for the removal of the " "cross in the power spectrum"}, } SECTIONS['ez'] = { 'ezvars': { 'default': None, 'type': str, 'help': "Path to ez parameters.yaml file. Executes ez pipeline without gui.", 'metavar': 'PATH'}, } TOMO_PARAMS = ('flat-correction', 'reconstruction', 'tomographic-reconstruction', 'fbp', 'dfi', 'ir', 'sart', 'sbtv') PREPROC_PARAMS = ('preprocess', 'cone-beam-weight', 'flat-correction', 'retrieve-phase') LAMINO_PARAMS = PREPROC_PARAMS + ('laminographic-reconstruction',) GEN_RECO_PARAMS = PREPROC_PARAMS + ('general-reconstruction',) NICE_NAMES = ('General', 'Input', 'Flat field correction', 'Phase retrieval', 'Sinogram generation', 'General reconstruction', 'Tomographic reconstruction', 'Laminographic reconstruction', 'Filtered backprojection', 'Direct Fourier Inversion', 'Iterative reconstruction', 'SART', 'SBTV', 'GUI settings', 'Estimation', 'Performance', 'Preprocess', 'Cone beam weight', 'General reconstruction', 'Find large spots', 'Inpaint') # Add unit info to help strings for section in SECTIONS: for k, v in SECTIONS[section].items(): if 'unit' in v and 'help' in v: v['help'] += ' [{}]'.format(v['unit']) def get_config_name(): """Get the command line --config option.""" name = '' for i, arg in enumerate(sys.argv): if arg.startswith('--config'): if arg == '--config': return sys.argv[i + 1] else: name = sys.argv[i].split('--config')[1] if name[0] == '=': name = name[1:] return name return name def parse_known_args(parser, subparser=False): """ Parse arguments from file and then override by the ones specified on the command line. Use *parser* for parsing and is *subparser* is True take into account that there is a value on the command line specifying the subparser. """ if len(sys.argv) > 1: subparser_value = [sys.argv[1]] if subparser else [] config_values = config_to_list(config_name=get_config_name()) values = subparser_value + config_values + sys.argv[1:] args = None if config_values: args = parser.parse_known_args(args=subparser_value + config_values)[0] parser.parse_args(args=sys.argv[1:], namespace=args) else: values = "" return parser.parse_known_args(values)[0] def config_to_list(config_name=''): """ Read arguments from config file and convert them to a list of keys and values as sys.argv does when they are specified on the command line. *config_name* is the file name of the config file. """ result = [] config = configparser.ConfigParser() if not config.read([config_name]): return [] for section in SECTIONS: for name, opts in ((n, o) for n, o in list(SECTIONS[section].items()) if config.has_option(section, n)): value = config.get(section, name) if value != '' and value != 'None': action = opts.get('action', None) if action == 'store_true' and value == 'True': # Only the key is on the command line for this action result.append('--{}'.format(name)) if not action == 'store_true': if opts.get('nargs', None) == '+': result.append('--{}'.format(name)) result.extend((v.strip() for v in value.split(','))) else: result.append('--{}={}'.format(name, value)) return result def without_keys(d, keys): return {k: v for k, v in d.items() if k not in keys} class Params(object): def __init__(self, sections=()): self.sections = sections + ('general', 'reading') def add_parser_args(self, parser): for section in self.sections: for name in sorted(SECTIONS[section]): opts = without_keys(SECTIONS[section][name], {'ezdefault'}) opts.pop('unit', None) parser.add_argument('--{}'.format(name), **opts) def add_arguments(self, parser): self.add_parser_args(parser) return parser def get_defaults(self): parser = argparse.ArgumentParser() self.add_arguments(parser) return parser.parse_args('') def write(config_file, args=None, sections=None): """ Write *config_file* with values from *args* if they are specified, otherwise use the defaults. If *sections* are specified, write values from *args* only to those sections, use the defaults on the remaining ones. """ config = configparser.ConfigParser() for section in SECTIONS: config.add_section(section) for name, opts in list(SECTIONS[section].items()): if args and sections and section in sections and hasattr(args, name.replace('-', '_')): value = getattr(args, name.replace('-', '_')) if isinstance(value, list): value = ', '.join(value) else: value = opts['default'] if opts['default'] != None else '' prefix = '# ' if value == '' else '' if name != 'config': config.set(section, prefix + name, value) with open(config_file, 'wb') as f: config.write(f) def log_values(args): """Log all values set in the args namespace. Arguments are grouped according to their section and logged alphabetically using the DEBUG log level thus --verbose is required. """ args = args.__dict__ for section, name in zip(SECTIONS, NICE_NAMES): entries = sorted((k for k in list(args.keys()) if k.replace('_', '-') in SECTIONS[section])) if entries: LOG.debug(name) for entry in entries: value = args[entry] if args[entry] is not None else "-" LOG.debug(" {:<16} {}".format(entry, value)) ufo-kit-tofu-ed0e5bd/tofu/ez/000077500000000000000000000000001521054151500162075ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/000077500000000000000000000000001521054151500166335ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/Advanced/000077500000000000000000000000001521054151500203405ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/Advanced/Batch360.py000066400000000000000000000227471521054151500222000ustar00rootroot00000000000000import logging from PyQt5.QtWidgets import (QGridLayout, QLabel, QGroupBox, QLineEdit, QRadioButton, QPushButton, QFileDialog, QMessageBox,QCheckBox) from PyQt5.QtCore import pyqtSignal from tofu.ez.params import EZVARS_aux from tofu.ez.util import add_value_to_dict_entry, import_values import os from shutil import rmtree class Batch360Group(QGroupBox): """ Advanced Tofu Reco settings """ imported_good_list_signal = pyqtSignal(dict) def __init__(self): super().__init__() self.setTitle("AUTO STITCHING AND BATCH PROCESSING OF HALF ACQ. MODE DATA") self.setStyleSheet("QGroupBox {color: black;}") self.setEnabled(False) self.info_label = QLabel(f"Input directory structure MUST have four depth layers:\n" f"Input -> Scans --> CT subdirectories --> flats/darks/tomo. \n" f"You have to configure 360_overlap_search utility in top left " f"to enable the automatic stitching. \n" "Then switch to Main tab set reco parameters and press Reconstruct as usual.\n") self.dummy_text = QLabel() self.list_is_good = False self.outloopscans = None self.stitch_and_reco_rButton = QRadioButton() self.stitch_and_reco_rButton.setText("Stitch and reconstruct. \n" "You must provide structured file with overlap for each data set." ) self.stitch_and_reco_rButton.clicked.connect(self.set_rButton) self.find_olap_stitch_and_reco_rButton = QRadioButton() self.find_olap_stitch_and_reco_rButton.setText("Estimate overlap, stitch, and reconstruct") self.find_olap_stitch_and_reco_rButton.clicked.connect(self.set_rButton) # Import file with overlaps self.open_olap_file_button = QPushButton() self.open_olap_file_button.setText("Import file with overlaps with the structure\n" "as produced by 360-find-overlaps tool") self.open_olap_file_button.pressed.connect(self.import_olap_file_button_pressed) self.open_olap_file_button.setEnabled(True) h = 'Example of the file structure (as created by 360-find-overlap tool):' # h += '/data/TestBatch/foo2': # outer loop scan # h += ' {'z02': 40, 'z03': 41},' # several inner loop scans self.open_olap_file_button.setToolTip(h) # Select directory for intermediate 360 data self.halfacq_dir_select = QPushButton() self.halfacq_dir_select.setText("Select working directory") self.halfacq_dir_select.setToolTip( "Slices to search overlap and horizontally stitched 360 projections will be saved there.\n" ) self.halfacq_dir_select.pressed.connect(self.select_halfacq_dir) self.halfacq_dir_entry = QLineEdit() self.halfacq_dir_entry.setToolTip( "Slices to search overlap and horizontally stitched 360 projections will be saved there.\n" ) self.halfacq_dir_entry.editingFinished.connect(self.set_halfacq_dir) self.doVertStitching_checkbox = QCheckBox("Invoke vertical stitching when " "reconstruction is over. \n You must set" "params correctly in the Stitch Tab.") self.doVertStitching_checkbox.clicked.connect(self.set_doVertStitching) self.set_layout() def set_layout(self): layout = QGridLayout() layout.addWidget(self.info_label, 0, 0, 1, 2) layout.addWidget(self.stitch_and_reco_rButton, 2, 0) layout.addWidget(self.open_olap_file_button, 2, 1) layout.addWidget(self.find_olap_stitch_and_reco_rButton, 1, 0) layout.addWidget(self.halfacq_dir_select, 3, 0) layout.addWidget(self.halfacq_dir_entry, 3, 1) #layout.addWidget(self.doVertStitching_checkbox, 4, 0, 1, 2) self.setLayout(layout) def load_values(self): self.set_rButton_from_params() self.halfacq_dir_entry.setText(str(EZVARS_aux['half-acq']['workdir']['value'])) #I have to mention everything in load_values so that they will be initialized properly self.dummy_text.setText(str(EZVARS_aux['half-acq']['list_dirs']['value'])) self.dummy_text.setText(str(EZVARS_aux['half-acq']['list_olaps']['value'])) def enable_by_trigger_from_main_tab(self, enabled): if enabled: self.setEnabled(True) self.find_olap_stitch_and_reco_rButton.setChecked(True) self.set_rButton() else: self.setEnabled(False) def set_rButton_from_params(self): # TODO: it seems it is not being set correctly. Plus: check that dir empty here? if EZVARS_aux['half-acq']['task_type']['value']: self.stitch_and_reco_rButton.setChecked(False) self.find_olap_stitch_and_reco_rButton.setChecked(True) self.open_olap_file_button.setEnabled(False) else: self.stitch_and_reco_rButton.setChecked(True) self.find_olap_stitch_and_reco_rButton.setChecked(False) self.open_olap_file_button.setEnabled(True) return def set_rButton(self): if self.stitch_and_reco_rButton.isChecked(): add_value_to_dict_entry(EZVARS_aux['half-acq']['task_type'], 0) self.open_olap_file_button.setEnabled(True) elif self.find_olap_stitch_and_reco_rButton.isChecked(): add_value_to_dict_entry(EZVARS_aux['half-acq']['task_type'], 1) self.open_olap_file_button.setEnabled(False) def select_halfacq_dir(self): dir_explore = QFileDialog(self) tmp_dir = dir_explore.getExistingDirectory(directory=self.halfacq_dir_entry.text()) if tmp_dir: self.halfacq_dir_entry.setText(tmp_dir) self.set_halfacq_dir() else: QMessageBox.information(self, "Select valid directory") return #if os.path.exists(self.EZVARS_aux['find360olap']['tmp-dir']) and \ if len(os.listdir(tmp_dir)) > 0: qm = QMessageBox() rep = qm.question(self, 'WARNING', "Directory exists and not empty. \n " "Clean it or select a new directory. \n" "Is it SAFE to delete directory now?", qm.Yes | qm.No) if rep == qm.Yes: try: rmtree(tmp_dir) except: QMessageBox.information(self, "Problem", "Cannot delete existing directory") return else: return def set_halfacq_dir(self): dict_entry = EZVARS_aux['half-acq']['workdir'] text = self.halfacq_dir_entry.text().strip() add_value_to_dict_entry(dict_entry, text) # stitched_data_dir_name = os.path.join(EZVARS_aux['half-acq']['workdir']['value'], # 'stitched-data') # if os.path.exists(stitched_data_dir_name) and \ # len(os.listdir(stitched_data_dir_name)) > 0: # QMessageBox.information(self, "Problem", "Directory for stitched data already exists \n" # "and not empty. Clean it and try again.") def set_doVertStitching(self): add_value_to_dict_entry(EZVARS_aux['half-acq']['dovertsti'], self.doVertStitching_checkbox.isChecked()) def import_olap_file_button_pressed(self): """ Loads external settings from .yaml file specified by user Signal is sent to enable updating of displayed GUI values """ options = QFileDialog.Options() filePath, _ = QFileDialog.getOpenFileName( self, "QFileDialog.getOpenFileName()", "", "YAML Files (*.yaml);; All Files (*)", options=options, ) if filePath: # structure holding path to CT sets and respective overlaps # must be imported try: self.olap_lists = import_values(filePath, ['ezvars_aux']) except: QMessageBox.information(self, "Cannot import list of overlaps") # self.list_is_good = self.check_olap_lists() # if self.list_is_good: # self.imported_good_list_signal.emit(self.olap_lists) # self.set_olap_list_in_EZVARS_aux() # print(EZVARS_aux) # # def check_olap_lists(self): # try: # self.outloopscans = set([os.path.dirname(w) for w in self.olap_lists.keys()]) # except: # QMessageBox.information(self, "Cannot extract directory names from the supplied file") # return False # try: # for o in self.olap_lists.values(): int(o) # except: # QMessageBox.information(self, "One of overlaps is not a number in the supplied file") # return False # # EZVARS_aux['half-acq']['list_dirs']['value'] = '' # return True # # def set_olap_list_in_EZVARS_aux(self): # for outscan in self.outloopscans: # EZVARS_aux['axes-list'].update({str(outscan) : {} }) # for j in self.olap_lists.keys(): # tmp = os.path.dirname(j) # if outscan == tmp: # EZVARS_aux['axes-list'][outscan][j[len(tmp)+1:]] = self.olap_lists[j] # return ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/Advanced/__init__.py000066400000000000000000000000001521054151500224370ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/Advanced/advanced.py000066400000000000000000000112641521054151500224630ustar00rootroot00000000000000import logging from PyQt5.QtWidgets import QGridLayout, QLabel, QGroupBox, QLineEdit from tofu.ez.params import EZVARS from tofu.config import SECTIONS from tofu.ez.util import add_value_to_dict_entry, get_double_validator, reverse_tupleize LOG = logging.getLogger(__name__) class AdvancedGroup(QGroupBox): """ Advanced Tofu Reco settings """ def __init__(self): super().__init__() self.setTitle("Generalized CT reconstruction settings") self.setStyleSheet("QGroupBox {color: green;}") # LAMINO self.lamino_group = QGroupBox("Extended Settings of Reconstruction Algorithms") self.lamino_group.clicked.connect(self.set_lamino_group) self.lamino_angle_label = QLabel("Laminographic angle") self.lamino_angle_entry = QLineEdit() self.lamino_angle_entry.setValidator(get_double_validator()) self.lamino_angle_entry.editingFinished.connect(self.set_lamino_angle) self.overall_rotation_label = QLabel("Overall rotation range about CT Z-axis") self.overall_rotation_entry = QLineEdit() self.overall_rotation_entry.setValidator(get_double_validator()) self.overall_rotation_entry.editingFinished.connect(self.set_overall_rotation) self.center_position_z_label = QLabel("Center Position Z") self.center_position_z_entry = QLineEdit() self.center_position_z_entry.setValidator(get_double_validator()) self.center_position_z_entry.editingFinished.connect(self.set_center_position_z) self.axis_rotation_y_label = QLabel("Sample rotation about the beam Y-axis") self.axis_rotation_y_entry = QLineEdit() self.axis_rotation_y_entry.editingFinished.connect(self.set_rotation_about_beam) self.set_layout() def set_layout(self): layout = QGridLayout() self.lamino_group.setCheckable(True) self.lamino_group.setChecked(False) lamino_layout = QGridLayout() lamino_layout.addWidget(self.lamino_angle_label, 0, 0) lamino_layout.addWidget(self.lamino_angle_entry, 0, 1) lamino_layout.addWidget(self.overall_rotation_label, 1, 0) lamino_layout.addWidget(self.overall_rotation_entry, 1, 1) lamino_layout.addWidget(self.center_position_z_label, 2, 0) lamino_layout.addWidget(self.center_position_z_entry, 2, 1) lamino_layout.addWidget(self.axis_rotation_y_label, 3, 0) lamino_layout.addWidget(self.axis_rotation_y_entry, 3, 1) self.lamino_group.setLayout(lamino_layout) layout.addWidget(self.lamino_group) self.setLayout(layout) def load_values(self): self.lamino_group.setChecked(EZVARS['advanced']['more-reco-params']['value']) self.lamino_angle_entry.setText(str(reverse_tupleize()(SECTIONS['cone-beam-weight']['axis-angle-x']['value']))) self.overall_rotation_entry.setText(str(SECTIONS['general-reconstruction']['overall-angle']['value'])) self.center_position_z_entry.setText(str(reverse_tupleize()(SECTIONS['cone-beam-weight']['center-position-z']['value']))) self.axis_rotation_y_entry.setText(str(reverse_tupleize()(SECTIONS['general-reconstruction']['axis-angle-y']['value']))) def set_lamino_group(self): LOG.debug("Lamino: " + str(self.lamino_group.isChecked())) dict_entry = EZVARS['advanced']['more-reco-params'] add_value_to_dict_entry(dict_entry, self.lamino_group.isChecked()) def set_lamino_angle(self): LOG.debug(self.lamino_angle_entry.text()) dict_entry = SECTIONS['cone-beam-weight']['axis-angle-x'] add_value_to_dict_entry(dict_entry, str(self.lamino_angle_entry.text())) self.lamino_angle_entry.setText(str(reverse_tupleize()(dict_entry['value']))) def set_overall_rotation(self): LOG.debug(self.overall_rotation_entry.text()) dict_entry = SECTIONS['general-reconstruction']['overall-angle'] add_value_to_dict_entry(dict_entry, str(self.overall_rotation_entry.text())) self.overall_rotation_entry.setText(str(dict_entry['value'])) def set_center_position_z(self): LOG.debug(self.center_position_z_entry.text()) dict_entry = SECTIONS['cone-beam-weight']['center-position-z'] add_value_to_dict_entry(dict_entry, str(self.center_position_z_entry.text())) self.center_position_z_entry.setText(str(reverse_tupleize()(dict_entry['value']))) def set_rotation_about_beam(self): LOG.debug(self.axis_rotation_y_entry.text()) dict_entry = SECTIONS['general-reconstruction']['axis-angle-y'] add_value_to_dict_entry(dict_entry, str(self.axis_rotation_y_entry.text())) self.axis_rotation_y_entry.setText(str(reverse_tupleize()(dict_entry['value']))) ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/Advanced/ffc.py000066400000000000000000000175041521054151500214570ustar00rootroot00000000000000import logging from PyQt5.QtWidgets import ( QGridLayout, QLabel, QGroupBox, QLineEdit, QCheckBox, QRadioButton, QHBoxLayout, ) from tofu.ez.params import EZVARS from tofu.ez.util import add_value_to_dict_entry, get_int_validator, get_double_validator LOG = logging.getLogger(__name__) class FFCGroup(QGroupBox): """ Flat Field Correction Settings """ def __init__(self): super().__init__() self.setTitle("Flat Field Correction") self.setStyleSheet("QGroupBox {color: indigo;}") self.method_label = QLabel("Method:") self.average_rButton = QRadioButton("Average") self.average_rButton.clicked.connect(self.set_method) self.ssim_rButton = QRadioButton("SSIM") self.ssim_rButton.clicked.connect(self.set_method) self.eigen_rButton = QRadioButton("Eigen") self.eigen_rButton.clicked.connect(self.set_method) self.enable_sinFFC_checkbox = QCheckBox( "Use Smart Intensity Normalization Flat Field Correction" ) self.enable_sinFFC_checkbox.stateChanged.connect(self.set_sinFFC) self.eigen_pco_repetitions_label = QLabel("Eigen PCO Repetitions") self.eigen_pco_repetitions_entry = QLineEdit() self.eigen_pco_repetitions_entry.setValidator(get_int_validator()) self.eigen_pco_repetitions_entry.editingFinished.connect(self.set_pcoReps) self.eigen_pco_downsample_label = QLabel("Eigen PCO Downsample") self.eigen_pco_downsample_entry = QLineEdit() self.eigen_pco_downsample_entry.setValidator(get_int_validator()) self.eigen_pco_downsample_entry.editingFinished.connect(self.set_pcoDowns) self.downsample_label = QLabel("Downsample") self.downsample_entry = QLineEdit() self.downsample_entry.setValidator(get_int_validator()) self.downsample_entry.editingFinished.connect(self.set_downsample) self.flat_scale_label = QLabel("Scale flats by a factor of") self.flat_scale_entry = QLineEdit() self.flat_scale_entry.setValidator(get_double_validator()) self.flat_scale_entry.editingFinished.connect(self.set_flat_scale) self.reduction_label = QLabel("Reduction Mode:") self.median_reduction_rButton = QRadioButton("Median") self.median_reduction_rButton.clicked.connect(self.set_reduction_mode) self.average_reduction_rButton = QRadioButton("Average") self.average_reduction_rButton.clicked.connect(self.set_reduction_mode) self.set_layout() def set_layout(self): layout = QGridLayout() layout.addWidget(self.flat_scale_label, 0, 0) layout.addWidget(self.flat_scale_entry, 0, 1) reduction_layout = QHBoxLayout() reduction_layout.addWidget(self.reduction_label) reduction_layout.addWidget(self.average_reduction_rButton) reduction_layout.addWidget(self.median_reduction_rButton) layout.addLayout(reduction_layout, 1, 0, 1, 2) rbutton_layout = QHBoxLayout() rbutton_layout.addWidget(self.method_label) rbutton_layout.addWidget(self.eigen_rButton) rbutton_layout.addWidget(self.average_rButton) rbutton_layout.addWidget(self.ssim_rButton) layout.addWidget(self.enable_sinFFC_checkbox, 2, 0) layout.addItem(rbutton_layout, 3, 0, 1, 2) layout.addWidget(self.eigen_pco_repetitions_label, 4, 0) layout.addWidget(self.eigen_pco_repetitions_entry, 4, 1) layout.addWidget(self.eigen_pco_downsample_label, 5, 0) layout.addWidget(self.eigen_pco_downsample_entry, 5, 1) layout.addWidget(self.downsample_label, 6, 0) layout.addWidget(self.downsample_entry, 6, 1) self.setLayout(layout) def load_values(self): self.enable_sinFFC_checkbox.setChecked(EZVARS['flat-correction']['smart-ffc']['value']) self.set_method_from_params() self.set_reduction_mode_from_params() self.eigen_pco_repetitions_entry.setText(str(EZVARS['flat-correction']['eigen-pco-reps']['value'])) self.eigen_pco_downsample_entry.setText(str(EZVARS['flat-correction']['eigen-pco-downsample']['value'])) self.downsample_entry.setText(str(EZVARS['flat-correction']['downsample']['value'])) self.flat_scale_entry.setText(str(EZVARS['flat-correction']['flat-scale']['value'])) def set_flat_scale(self): LOG.debug(self.flat_scale_entry.text()) dict_entry = EZVARS['flat-correction']['flat-scale'] add_value_to_dict_entry(dict_entry, str(self.flat_scale_entry.text())) self.flat_scale_entry.setText(str(dict_entry['value'])) def set_sinFFC(self): LOG.debug("sinFFC: " + str(self.enable_sinFFC_checkbox.isChecked())) dict_entry = EZVARS['flat-correction']['smart-ffc'] add_value_to_dict_entry(dict_entry, self.enable_sinFFC_checkbox.isChecked()) def set_pcoReps(self): LOG.debug("PCO Reps: " + str(self.eigen_pco_repetitions_entry.text())) dict_entry = EZVARS['flat-correction']['eigen-pco-reps'] add_value_to_dict_entry(dict_entry, str(self.eigen_pco_repetitions_entry.text())) self.eigen_pco_repetitions_entry.setText(str(dict_entry['value'])) def set_pcoDowns(self): LOG.debug("PCO Downsample: " + str(self.eigen_pco_downsample_entry.text())) dict_entry = EZVARS['flat-correction']['eigen-pco-downsample'] add_value_to_dict_entry(dict_entry, str(self.eigen_pco_downsample_entry.text())) self.eigen_pco_downsample_entry.setText(str(dict_entry['value'])) def set_downsample(self): LOG.debug("Downsample: " + str(self.downsample_entry.text())) dict_entry = EZVARS['flat-correction']['downsample'] add_value_to_dict_entry(dict_entry, str(self.downsample_entry.text())) self.downsample_entry.setText(str(dict_entry['value'])) def set_method(self): if self.eigen_rButton.isChecked(): LOG.debug("Method: Eigen") EZVARS['flat-correction']['smart-ffc-method']['value'] = "eigen" elif self.average_rButton.isChecked(): LOG.debug("Method: Average") EZVARS['flat-correction']['smart-ffc-method']['value'] = "average" elif self.ssim_rButton.isChecked(): LOG.debug("Method: SSIM") EZVARS['flat-correction']['smart-ffc-method']['value'] = "ssim" def set_method_from_params(self): if EZVARS['flat-correction']['smart-ffc-method']['value'] == "eigen": self.eigen_rButton.setChecked(True) self.average_rButton.setChecked(False) self.ssim_rButton.setChecked(False) elif EZVARS['flat-correction']['smart-ffc-method']['value'] == "average": self.eigen_rButton.setChecked(False) self.average_rButton.setChecked(True) self.ssim_rButton.setChecked(False) elif EZVARS['flat-correction']['smart-ffc-method']['value'] == "ssim": self.eigen_rButton.setChecked(False) self.average_rButton.setChecked(False) self.ssim_rButton.setChecked(True) def set_reduction_mode(self): if self.median_reduction_rButton.isChecked(): LOG.debug("Reduction Mode: Median") EZVARS['flat-correction']['reduction-mode']['value'] = "median" elif self.average_reduction_rButton.isChecked(): LOG.debug("Reduction Mode: Average") EZVARS['flat-correction']['reduction-mode']['value'] = "average" def set_reduction_mode_from_params(self): if EZVARS['flat-correction']['reduction-mode']['value'] == "median": self.median_reduction_rButton.setChecked(True) self.average_reduction_rButton.setChecked(False) elif EZVARS['flat-correction']['reduction-mode']['value'] == "average": self.median_reduction_rButton.setChecked(False) self.average_reduction_rButton.setChecked(True) ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/Advanced/find_large_spots.py000066400000000000000000000145761521054151500242510ustar00rootroot00000000000000import logging from PyQt5.QtWidgets import ( QGridLayout, QLabel, QGroupBox, QLineEdit, QComboBox, QHBoxLayout, ) from tofu.ez.params import EZVARS from tofu.config import SECTIONS from tofu.ez.util import add_value_to_dict_entry, get_int_validator, get_double_validator LOG = logging.getLogger(__name__) class FindSpotsGroup(QGroupBox): """ Flat Field Correction Settings """ def __init__(self): super().__init__() self.setTitle("Extended settings to find large bad spots in images") self.setStyleSheet("QGroupBox {color: brown;}") self.setEnabled(False) self.median_width_label = QLabel("Median width") self.median_width_entry = QLineEdit() self.median_width_entry.setValidator(get_int_validator()) self.median_width_entry.editingFinished.connect(self.set_median_width) self.median_width_entry.setToolTip(SECTIONS['find-large-spots']['median-width']['help']) self.median_width_label.setToolTip(SECTIONS['find-large-spots']['median-width']['help']) self.dil_disk_rad_label = QLabel("Dilation disk radius") self.dil_disk_rad_entry = QLineEdit() self.dil_disk_rad_entry.setValidator(get_int_validator()) self.dil_disk_rad_entry.editingFinished.connect(self.set_dil_disk_rad) self.dil_disk_rad_entry.setToolTip(SECTIONS['find-large-spots']['dilation-disk-radius']['help']) self.dil_disk_rad_label.setToolTip(SECTIONS['find-large-spots']['dilation-disk-radius']['help']) self.grow_thr_label = QLabel("Grow threshold") self.grow_thr_entry = QLineEdit() self.grow_thr_entry.setValidator(get_double_validator()) self.grow_thr_entry.editingFinished.connect(self.set_grow_thr) self.grow_thr_entry.setToolTip(SECTIONS['find-large-spots']['grow-threshold']['help']) self.grow_thr_label.setToolTip(SECTIONS['find-large-spots']['grow-threshold']['help']) self.spot_thr_sign_label = QLabel("Spot threshold mode") self.spot_thr_sign_entry = QComboBox() self.spot_thr_sign_entry.addItems(["absolute", "above", "below"]) self.spot_thr_sign_entry.setCurrentText("absolute") self.spot_thr_sign_entry.currentIndexChanged.connect(self.set_spot_thr_sign) self.spot_thr_sign_entry.setToolTip(SECTIONS['find-large-spots']['spot-threshold-mode']['help']) self.spot_thr_sign_label.setToolTip(SECTIONS['find-large-spots']['spot-threshold-mode']['help']) self.median_direction_label = QLabel("Median direction") self.median_direction_entry = QComboBox() self.median_direction_entry.addItems(['both', 'horizontal', 'vertical']) self.median_direction_entry.setCurrentText("horizontal") self.median_direction_entry.currentIndexChanged.connect(self.set_median_direction) self.median_direction_entry.setToolTip(SECTIONS['find-large-spots']['median-direction']['help']) self.median_direction_label.setToolTip(SECTIONS['find-large-spots']['median-direction']['help']) self.set_layout() def set_layout(self): layout = QGridLayout() # layout.addWidget(self.median_width_label, 1, 0) # layout.addWidget(self.median_width_entry, 1, 1, 1, 3) # # layout.addWidget(self.grow_thr_label, 2, 0) # layout.addWidget(self.grow_thr_entry, 2, 1, 1, 3) # # layout.addWidget(self.dil_disk_rad_label, 3, 0) # layout.addWidget(self.dil_disk_rad_entry, 3, 1, 1, 3) # # layout.addWidget(self.spot_thr_sign_label, 4, 0) # layout.addWidget(self.spot_thr_sign_entry, 4, 1) # # layout.addWidget(self.median_direction_label, 4, 2) # layout.addWidget(self.median_direction_entry, 4, 3) layout.addWidget(self.median_width_label, 1, 0) layout.addWidget(self.median_width_entry, 1, 1) layout.addWidget(self.grow_thr_label, 2, 0) layout.addWidget(self.grow_thr_entry, 2, 1) layout.addWidget(self.dil_disk_rad_label, 3, 0) layout.addWidget(self.dil_disk_rad_entry, 3, 1) layout.addWidget(self.spot_thr_sign_label, 4, 0) layout.addWidget(self.spot_thr_sign_entry, 4, 1) layout.addWidget(self.median_direction_label, 5, 0) layout.addWidget(self.median_direction_entry, 5, 1) self.setLayout(layout) def load_values(self): if EZVARS['filters']['rm_spots_use_median']['value']: self.setEnabled(True) self.median_width_entry.setText(str(SECTIONS['find-large-spots']['median-width']['value'])) self.dil_disk_rad_entry.setText(str(SECTIONS['find-large-spots']['dilation-disk-radius']['value'])) self.grow_thr_entry.setText(str(SECTIONS['find-large-spots']['grow-threshold']['value'])) self.spot_thr_sign_entry.setCurrentText(str(SECTIONS['find-large-spots']['spot-threshold-mode']['value'])) self.median_direction_entry.setCurrentText(str(SECTIONS['find-large-spots']['median-direction']['value'])) def enable_by_trigger_from_main_tab(self): dict_entry = SECTIONS['find-large-spots']['method'] if not self.isEnabled(): self.setEnabled(True) add_value_to_dict_entry(EZVARS['filters']['rm_spots_use_median'], True) add_value_to_dict_entry(dict_entry, 'median') else: self.setEnabled(False) add_value_to_dict_entry(EZVARS['filters']['rm_spots_use_median'], False) add_value_to_dict_entry(dict_entry, 'grow') def set_median_width(self): dict_entry = SECTIONS['find-large-spots']['median-width'] add_value_to_dict_entry(dict_entry, self.median_width_entry.text()) def set_dil_disk_rad(self): dict_entry = SECTIONS['find-large-spots']['dilation-disk-radius'] add_value_to_dict_entry(dict_entry, self.dil_disk_rad_entry.text()) def set_grow_thr(self): dict_entry = SECTIONS['find-large-spots']['grow-threshold'] add_value_to_dict_entry(dict_entry, self.grow_thr_entry.text()) def set_spot_thr_sign(self): dict_entry = SECTIONS['find-large-spots']['spot-threshold-mode'] self.spot_thr_sign_entry.currentText() add_value_to_dict_entry(dict_entry, self.spot_thr_sign_entry.currentText()) def set_median_direction(self): dict_entry = SECTIONS['find-large-spots']['median-direction'] add_value_to_dict_entry(dict_entry, self.median_direction_entry.currentText()) ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/Advanced/nlmdn.py000066400000000000000000000343721521054151500220330ustar00rootroot00000000000000import logging import os from shutil import rmtree from PyQt5.QtWidgets import ( QGridLayout, QLabel, QGroupBox, QLineEdit, QCheckBox, QPushButton, QFileDialog, QMessageBox, ) from PyQt5.QtCore import Qt from tofu.ez.ufo_cmd_gen import fmt_nlmdn_ufo_cmd from tofu.ez.params import EZVARS from tofu.ez.util import add_value_to_dict_entry, get_int_validator, get_double_validator LOG = logging.getLogger(__name__) class NLMDNGroup(QGroupBox): """ Non-local means de-noising settings """ def __init__(self): super().__init__() self.setTitle("Non-local-means Denoising") self.setStyleSheet("QGroupBox {color: royalblue;}") self.apply_to_reco_checkbox = QCheckBox("Automatically apply NLMDN to reconstructed slices") self.apply_to_reco_checkbox.stateChanged.connect(self.set_apply_to_reco) self.input_dir_button = QPushButton("Select input directory") self.input_dir_button.clicked.connect(self.set_indir_button) self.select_img_button = QPushButton("Select one image") self.select_img_button.clicked.connect(self.select_image) self.input_dir_entry = QLineEdit() self.input_dir_entry.editingFinished.connect(self.set_indir_entry) self.output_dir_button = QPushButton("Select output directory or filename pattern") self.output_dir_button.clicked.connect(self.set_outdir_button) self.save_bigtif_checkbox = QCheckBox("Save in bigtif container") self.save_bigtif_checkbox.clicked.connect(self.set_save_bigtif) self.output_dir_entry = QLineEdit() self.output_dir_entry.editingFinished.connect(self.set_outdir_entry) self.similarity_radius_label = QLabel("Radius for similarity search") self.similarity_radius_entry = QLineEdit() self.similarity_radius_entry.setValidator(get_int_validator()) self.similarity_radius_entry.editingFinished.connect(self.set_rad_sim_entry) self.patch_radius_label = QLabel("Radius of patches") self.patch_radius_entry = QLineEdit() self.patch_radius_entry.setValidator(get_int_validator()) self.patch_radius_entry.editingFinished.connect(self.set_rad_patch_entry) self.smoothing_label = QLabel("Smoothing control parameter") self.smoothing_entry = QLineEdit() self.smoothing_entry.setValidator(get_double_validator()) self.smoothing_entry.editingFinished.connect(self.set_smoothing_entry) self.noise_std_label = QLabel("Noise standard deviation") self.noise_std_entry = QLineEdit() self.noise_std_entry.setValidator(get_double_validator()) self.noise_std_entry.editingFinished.connect(self.set_noise_entry) self.window_label = QLabel("Window (optional)") self.window_entry = QLineEdit() self.window_entry.setValidator(get_double_validator()) self.window_entry.editingFinished.connect(self.set_window_entry) self.fast_checkbox = QCheckBox("Fast") self.fast_checkbox.clicked.connect(self.set_fast_checkbox) self.sigma_checkbox = QCheckBox("Estimate sigma") self.sigma_checkbox.clicked.connect(self.set_sigma_checkbox) self.help_button = QPushButton("Help") self.help_button.clicked.connect(self.help_button_pressed) self.delete_button = QPushButton("Delete reco dir") self.delete_button.clicked.connect(self.delete_button_pressed) self.dry_button = QPushButton("Dry run") self.dry_button.clicked.connect(self.dry_button_pressed) self.apply_button = QPushButton("Apply filter") self.apply_button.clicked.connect(self.apply_button_pressed) # self.apply_button.setStyleSheet("color:royalblue; font-weight: bold;") self.set_layout() def set_layout(self): layout = QGridLayout() layout.addWidget(self.apply_to_reco_checkbox, 0, 0, 1, 1) layout.addWidget(self.input_dir_button, 1, 0, 1, 2) layout.addWidget(self.select_img_button, 1, 2, 1, 2) layout.addWidget(self.input_dir_entry, 2, 0, 1, 4) layout.addWidget(self.output_dir_button, 3, 0, 1, 2) layout.addWidget(self.save_bigtif_checkbox, 3, 2, 1, 2, Qt.AlignCenter) layout.addWidget(self.output_dir_entry, 4, 0, 1, 4) layout.addWidget(self.similarity_radius_label, 5, 0, 1, 2) layout.addWidget(self.similarity_radius_entry, 5, 2, 1, 2) layout.addWidget(self.patch_radius_label, 6, 0, 1, 2) layout.addWidget(self.patch_radius_entry, 6, 2, 1, 2) layout.addWidget(self.smoothing_label, 7, 0, 1, 2) layout.addWidget(self.smoothing_entry, 7, 2, 1, 2) layout.addWidget(self.noise_std_label, 8, 0, 1, 2) layout.addWidget(self.noise_std_entry, 8, 2, 1, 2) layout.addWidget(self.window_label, 9, 0, 1, 2) layout.addWidget(self.window_entry, 9, 2, 1, 2) layout.addWidget(self.fast_checkbox, 10, 0, 1, 2, Qt.AlignCenter) layout.addWidget(self.sigma_checkbox, 10, 2, 1, 2, Qt.AlignCenter) layout.addWidget(self.help_button, 11, 0, 1, 1) layout.addWidget(self.delete_button, 11, 1) layout.addWidget(self.dry_button, 11, 2) layout.addWidget(self.apply_button, 11, 3) self.setLayout(layout) def load_values(self): self.apply_to_reco_checkbox.setChecked(bool(EZVARS['nlmdn']['do-after-reco']['value'])) self.input_dir_entry.setText(str(EZVARS['nlmdn']['input-dir']['value'])) self.output_dir_entry.setText(str(EZVARS['nlmdn']['output_pattern']['value'])) self.save_bigtif_checkbox.setChecked(bool(EZVARS['nlmdn']['bigtiff_output']['value'])) self.similarity_radius_entry.setText(str(EZVARS['nlmdn']['search-radius']['value'])) self.patch_radius_entry.setText(str(EZVARS['nlmdn']['patch-radius']['value'])) self.smoothing_entry.setText(str(EZVARS['nlmdn']['h']['value'])) self.noise_std_entry.setText(str(EZVARS['nlmdn']['sigma']['value'])) self.window_entry.setText(str(EZVARS['nlmdn']['window']['value'])) self.fast_checkbox.setChecked(bool(EZVARS['nlmdn']['fast']['value'])) self.sigma_checkbox.setChecked(bool(EZVARS['nlmdn']['estimate-sigma']['value'])) def set_apply_to_reco(self): LOG.debug( "Apply NLMDN to reconstructed slices checkbox: " + str(self.apply_to_reco_checkbox.isChecked()) ) dict_entry = EZVARS['nlmdn']['do-after-reco'] add_value_to_dict_entry(dict_entry, self.apply_to_reco_checkbox.isChecked()) if self.apply_to_reco_checkbox.isChecked(): self.input_dir_button.setDisabled(True) self.select_img_button.setDisabled(True) self.input_dir_entry.setDisabled(True) self.dry_button.setDisabled(True) self.apply_button.setDisabled(True) self.output_dir_button.setDisabled(True) self.output_dir_entry.setDisabled(True) elif not self.apply_to_reco_checkbox.isChecked(): self.input_dir_button.setDisabled(False) self.select_img_button.setDisabled(False) self.input_dir_entry.setDisabled(False) self.dry_button.setDisabled(False) self.apply_button.setDisabled(False) self.output_dir_button.setDisabled(False) self.output_dir_entry.setDisabled(False) def set_indir_button(self): """ Saves directory specified by user in file-dialog for input tomographic data """ LOG.debug("Select input directory pressed") dir_explore = QFileDialog(self) directory = dir_explore.getExistingDirectory() if directory: self.input_dir_entry.setText(str(directory)) self.set_indir_entry() self.output_dir_entry.setText(str(os.path.join(directory+'-nlmdn', 'im-%05i.tif'))) self.set_outdir_entry() dict_entry = EZVARS['nlmdn']['input-is-1file'] add_value_to_dict_entry(dict_entry, False) def set_indir_entry(self): LOG.debug("Indir entry: " + str(self.input_dir_entry.text())) dict_entry = EZVARS['nlmdn']['input-dir'] dir = self.input_dir_entry.text().strip() add_value_to_dict_entry(dict_entry, str(dir)) self.input_dir_entry.setText(str(dict_entry['value'])) def select_image(self): LOG.debug("Select one image button pressed") options = QFileDialog.Options() file_path, _ = QFileDialog.getOpenFileName( self, "Open .tif Image File", "", "Tiff Files (*.tif *.tiff)", options=options ) if file_path: img_name, img_ext = os.path.splitext(file_path) tmp = img_name + "-nlmfilt" + img_ext self.input_dir_entry.setText(str(file_path)) self.set_indir_entry() self.output_dir_entry.setText(str(tmp)) self.set_outdir_entry() dict_entry = EZVARS['nlmdn']['input-is-1file'] add_value_to_dict_entry(dict_entry, True) def set_outdir_button(self): LOG.debug("Select output directory pressed") dir_explore = QFileDialog(self) directory = dir_explore.getExistingDirectory() if directory: self.output_dir_entry.setText(str(os.path.join(directory,'im-nlmdn-%05i.tif'))) self.set_outdir_entry() def set_save_bigtif(self): LOG.debug("Save bigtif checkbox: " + str(self.save_bigtif_checkbox.isChecked())) dict_entry = EZVARS['nlmdn']['bigtiff_output'] add_value_to_dict_entry(dict_entry, self.save_bigtif_checkbox.isChecked()) def set_outdir_entry(self): LOG.debug("Outdir entry: " + str(self.output_dir_entry.text())) dict_entry = EZVARS['nlmdn']['output_pattern'] dir = self.output_dir_entry.text().strip() add_value_to_dict_entry(dict_entry, str(dir)) self.output_dir_entry.setText(str(dict_entry['value'])) def set_rad_sim_entry(self): LOG.debug("Radius for similarity: " + str(self.similarity_radius_entry.text())) dict_entry = EZVARS['nlmdn']['search-radius'] add_value_to_dict_entry(dict_entry, str(self.similarity_radius_entry.text())) self.similarity_radius_entry.setText(str(dict_entry['value'])) def set_rad_patch_entry(self): LOG.debug("Radius of patches: " + str(self.patch_radius_entry.text())) dict_entry = EZVARS['nlmdn']['patch-radius'] add_value_to_dict_entry(dict_entry, str(self.patch_radius_entry.text())) self.patch_radius_entry.setText(str(dict_entry['value'])) def set_smoothing_entry(self): LOG.debug("Smoothing control: " + str(self.smoothing_entry.text())) dict_entry = EZVARS['nlmdn']['h'] add_value_to_dict_entry(dict_entry, str(self.smoothing_entry.text())) self.smoothing_entry.setText(str(dict_entry['value'])) def set_noise_entry(self): LOG.debug("Noise std: " + str(self.noise_std_entry.text())) dict_entry = EZVARS['nlmdn']['sigma'] add_value_to_dict_entry(dict_entry, str(self.noise_std_entry.text())) self.noise_std_entry.setText(str(dict_entry['value'])) def set_window_entry(self): LOG.debug("Window: " + str(self.window_entry.text())) dict_entry = EZVARS['nlmdn']['window'] add_value_to_dict_entry(dict_entry, str(self.window_entry.text())) self.window_entry.setText(str(dict_entry['value'])) def set_fast_checkbox(self): LOG.debug("Fast: " + str(self.fast_checkbox.isChecked())) dict_entry = EZVARS['nlmdn']['fast'] add_value_to_dict_entry(dict_entry, self.fast_checkbox.isChecked()) def set_sigma_checkbox(self): LOG.debug("Estimate sigma: " + str(self.sigma_checkbox.isChecked())) dict_entry = EZVARS['nlmdn']['estimate-sigma'] add_value_to_dict_entry(dict_entry, self.sigma_checkbox.isChecked()) def help_button_pressed(self): LOG.debug("Help Button Pressed") h = "" h += 'Note4: set to "flats" if "flats2" exist but you need to ignore them; \n' h += "SerG, BMIT CLS, Dec. 2020." QMessageBox.information(self, "Help", h) def delete_button_pressed(self): LOG.debug("Delete Reco Button Pressed") """ Deletes the directory that contains reconstructed data """ LOG.debug("DELETE") msg = "Delete directory with reconstructed data?" dialog = QMessageBox.warning(self, "Warning: data can be lost", msg, QMessageBox.Yes | QMessageBox.No) if dialog == QMessageBox.Yes: if os.path.exists(str(EZVARS['nlmdn']['output_pattern']['value'])): LOG.debug("YES") if EZVARS['nlmdn']['output_pattern']['value'] == EZVARS['nlmdn']['input-dir']['value']: LOG.debug("Cannot delete: output directory is the same as input") else: rmtree(EZVARS['nlmdn']['output_pattern']['value']) LOG.debug("Directory with denoised images was removed") else: LOG.debug("Directory does not exist") else: LOG.debug("NO") def dry_button_pressed(self): LOG.debug("Dry Run Button Pressed") dict_entry = EZVARS['nlmdn']['dryrun'] add_value_to_dict_entry(dict_entry, True) self.apply_button_pressed() add_value_to_dict_entry(dict_entry, False) def apply_button_pressed(self): LOG.debug("Apply Filter Button Pressed") if os.path.exists(EZVARS['nlmdn']['output_pattern']['value']) and not \ EZVARS['nlmdn']['dryrun']['value']: title_text = "Warning: files can be overwritten" text1 = "Output directory exists. Files can be overwritten. Proceed?" dialog = QMessageBox.warning(self, title_text, text1, QMessageBox.Yes | QMessageBox.No) if dialog == QMessageBox.Yes: cmd = fmt_nlmdn_ufo_cmd(EZVARS['nlmdn']['input-dir']['value'], EZVARS['nlmdn']['output_pattern']['value']) else: cmd = fmt_nlmdn_ufo_cmd(EZVARS['nlmdn']['input-dir']['value'], EZVARS['nlmdn']['output_pattern']['value']) if EZVARS['nlmdn']['dryrun']['value']: print(cmd) else: os.system(cmd) QMessageBox.information(self, "Finished", "Finished") ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/Advanced/optimization.py000066400000000000000000000101261521054151500234400ustar00rootroot00000000000000import logging from PyQt5.QtWidgets import QGridLayout, QLabel, QGroupBox, QLineEdit, QCheckBox, QComboBox from tofu.ez.params import EZVARS from tofu.config import SECTIONS from tofu.ez.util import add_value_to_dict_entry, get_double_validator LOG = logging.getLogger(__name__) class OptimizationGroup(QGroupBox): """ Optimization settings """ def __init__(self): super().__init__() self.setTitle("Optimization Settings") self.setStyleSheet("QGroupBox {color: orange;}") self.verbose_switch = QCheckBox("Enable verbose console output") self.verbose_switch.stateChanged.connect(self.set_verbose_switch) self.slice_memory_label = QLabel("Slice memory coefficient") self.slice_memory_entry = QLineEdit() self.slice_memory_entry.setValidator(get_double_validator()) tmpstr="Fraction of VRAM which will be used to store images \n" \ "Reserve ~2 GB of VRAM for computation \n" \ "Decrease the coefficient if you have very large data and start getting errors" self.slice_memory_entry.setToolTip(tmpstr) self.slice_memory_label.setToolTip(tmpstr) self.slice_memory_entry.editingFinished.connect(self.set_slice) self.data_spllitting_policy_label = QLabel("Data Splitting Policy") self.data_spllitting_policy_combobox = QComboBox() self.data_spllitting_policy_label.setToolTip(SECTIONS['general-reconstruction']['data-splitting-policy']['help']) self.data_spllitting_policy_combobox.setToolTip(SECTIONS['general-reconstruction']['data-splitting-policy']['help']) self.data_spllitting_policy_combobox.addItems(["one","many"]) self.data_spllitting_policy_combobox.currentIndexChanged.connect(self.set_data_splitting_policy) self.set_layout() def set_layout(self): layout = QGridLayout() layout.addWidget(self.verbose_switch, 0, 0) gpu_group = QGroupBox("GPU optimization") gpu_group.setCheckable(True) gpu_group.setChecked(bool(EZVARS['advanced']['enable-optimization']['value'])) gpu_group.clicked.connect(self.set_enable_optimization) gpu_layout = QGridLayout() gpu_layout.addWidget(self.slice_memory_label, 0, 0) gpu_layout.addWidget(self.slice_memory_entry, 0, 1) gpu_layout.addWidget(self.data_spllitting_policy_label, 1, 0) gpu_layout.addWidget(self.data_spllitting_policy_combobox, 1, 1) gpu_group.setLayout(gpu_layout) layout.addWidget(gpu_group, 1, 0) self.setLayout(layout) def load_values(self): self.verbose_switch.setChecked(bool(SECTIONS['general']['verbose']['value'])) self.slice_memory_entry.setText(str(SECTIONS['general-reconstruction']['slice-memory-coeff']['value'])) idx = self.data_spllitting_policy_combobox.findText(SECTIONS['general-reconstruction']['data-splitting-policy']['value']) if idx >= 0: self.data_spllitting_policy_combobox.setCurrentIndex(idx) def set_verbose_switch(self): LOG.debug("Verbose: " + str(self.verbose_switch.isChecked())) dict_entry = SECTIONS['general']['verbose'] add_value_to_dict_entry(dict_entry, self.verbose_switch.isChecked()) def set_enable_optimization(self): checkbox = self.sender() LOG.debug("GPU Optimization: " + str(checkbox.isChecked())) dict_entry = EZVARS['advanced']['enable-optimization'] add_value_to_dict_entry(dict_entry, checkbox.isChecked()) def set_slice(self): LOG.debug(self.slice_memory_entry.text()) dict_entry = SECTIONS['general-reconstruction']['slice-memory-coeff'] add_value_to_dict_entry(dict_entry, str(self.slice_memory_entry.text())) self.slice_memory_entry.setText(str(dict_entry['value'])) def set_data_splitting_policy(self): LOG.debug(self.data_spllitting_policy_combobox.currentText()) dict_entry = SECTIONS['general-reconstruction']['data-splitting-policy'] add_value_to_dict_entry(dict_entry, str(self.data_spllitting_policy_combobox.currentText())) ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/Main/000077500000000000000000000000001521054151500175175ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/Main/__init__.py000066400000000000000000000000001521054151500216160ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/Main/centre_of_rotation.py000066400000000000000000000246361521054151500237670ustar00rootroot00000000000000import logging from PyQt5.QtWidgets import (QGridLayout, QLabel, QRadioButton, QGroupBox, QLineEdit, QCheckBox, QMessageBox) from PyQt5.QtCore import pyqtSignal from tofu.ez.params import EZVARS from tofu.ez.util import (add_value_to_dict_entry, get_int_validator, get_tuple_validator, get_double_validator, check_that_num_failed) LOG = logging.getLogger(__name__) class CentreOfRotationGroup(QGroupBox): """ Centre of Rotation settings """ enable_360Batch_Group_in_Advanced = pyqtSignal(bool) def __init__(self): super().__init__() self.setTitle("Centre of Rotation") self.setStyleSheet("QGroupBox {color: green;}") self.auto_correlate_rButton = QRadioButton() self.auto_correlate_rButton.setText("Auto: Correlate first/last projections") self.auto_correlate_rButton.clicked.connect(self.set_rButton) self.auto_minimize_rButton = QRadioButton() self.auto_minimize_rButton.setText("Auto: Minimize STD of a slice") self.auto_minimize_rButton.setToolTip( "Reconstructed patches are saved \nin your-temporary-data-folder\\axis-search" ) self.auto_minimize_rButton.clicked.connect(self.set_rButton) self.auto_minimize_apply_pr = QCheckBox() self.auto_minimize_apply_pr.setText("Apply PR while searching") self.auto_minimize_apply_pr.stateChanged.connect(self.set_minimize_apply_pr) self.define_axis_rButton = QRadioButton() self.define_axis_rButton.setText("Define rotation axis manually") self.define_axis_rButton.clicked.connect(self.set_rButton) self.search_rotation_label = QLabel() self.search_rotation_label.setText("Search rotation axis in [start, stop, step] interval") self.search_rotation_entry = QLineEdit() self.search_rotation_entry.setValidator(get_tuple_validator()) self.search_rotation_entry.editingFinished.connect(self.set_search_rotation) self.search_in_slice_label = QLabel() self.search_in_slice_label.setText("Search in slice from row number") self.search_in_slice_entry = QLineEdit() self.search_in_slice_entry.setValidator(get_int_validator()) self.search_in_slice_entry.editingFinished.connect(self.set_search_slice) self.size_of_recon_label = QLabel() self.size_of_recon_label.setText("Size of reconstructed patch [pixel]") self.size_of_recon_entry = QLineEdit() self.size_of_recon_entry.setValidator(get_int_validator()) self.size_of_recon_entry.editingFinished.connect(self.set_size_of_reco) self.axis_col_label = QLabel() self.axis_col_label.setText("Axis is in column No [pixel]. \n ") ttt = "Axis is in column No [pixel, can be fractional number]. \n " \ "This can be one number or a string of comma separated numbers \n" \ "one per each data set in the input directory" self.axis_col_label.setToolTip(ttt) self.axis_col_entry = QLineEdit() #self.axis_col_entry.setValidator(get_double_validator()) self.axis_col_entry.editingFinished.connect(self.set_axis_col) self.axis_col_entry.setToolTip(ttt) self.inc_axis_label = QLabel() self.inc_axis_label.setText("Increment axis every reconstruction") self.inc_axis_entry = QLineEdit() self.inc_axis_entry.setValidator(get_double_validator()) self.inc_axis_entry.editingFinished.connect(self.set_axis_inc) ttt = "This value will be added to the user-defined axis for \n" \ "to get axis for each consecutive data set in the input directory" self.inc_axis_entry.setToolTip(ttt) self.inc_axis_label.setToolTip(ttt) self.image_midpoint_rButton = QRadioButton() self.image_midpoint_rButton.setText("Use image midpoint (for half-acquisition)") self.image_midpoint_rButton.clicked.connect(self.set_rButton) self.unstitched360_rButton = QRadioButton() self.unstitched360_rButton.setText("Input is unstitched half acq. mode data (Use Stitching Tab to setup params)") self.unstitched360_rButton.setToolTip("Works only for input directories with 3 depth levels \n" "Outer loops -> Inner loop CT sets -> flats/darks/tomo") self.unstitched360_rButton.clicked.connect(self.set_rButton) # TODO Used for proper spacing - should be a better way self.blank_label = QLabel(" ") self.blank_label2 = QLabel(" ") self.set_layout() def set_layout(self): layout = QGridLayout() layout.addWidget(self.auto_correlate_rButton, 0, 0) layout.addWidget(self.blank_label, 0, 1) layout.addWidget(self.blank_label2, 0, 2) layout.addWidget(self.auto_minimize_rButton, 1, 0) layout.addWidget(self.auto_minimize_apply_pr, 1, 1) layout.addWidget(self.search_rotation_label, 2, 0) layout.addWidget(self.search_rotation_entry, 2, 1, 1, 2) layout.addWidget(self.search_in_slice_label, 3, 0) layout.addWidget(self.search_in_slice_entry, 3, 1, 1, 2) layout.addWidget(self.size_of_recon_label, 4, 0) layout.addWidget(self.size_of_recon_entry, 4, 1, 1, 2) layout.addWidget(self.define_axis_rButton, 5, 0) layout.addWidget(self.axis_col_label, 6, 0) layout.addWidget(self.axis_col_entry, 6, 1, 1, 2) layout.addWidget(self.inc_axis_label, 7, 0) layout.addWidget(self.inc_axis_entry, 7, 1, 1, 2) layout.addWidget(self.image_midpoint_rButton, 8, 0) layout.addWidget(self.unstitched360_rButton, 8, 1) self.setLayout(layout) def load_values(self): self.set_rButton_from_params() self.search_rotation_entry.setText(str(EZVARS['COR']['search-interval']['value'])) self.search_in_slice_entry.setText(str(EZVARS['COR']['search-row']['value'])) self.size_of_recon_entry.setText(str(EZVARS['COR']['patch-size']['value'])) self.axis_col_entry.setText(str(EZVARS['COR']['user-defined-ax']['value'])) self.inc_axis_entry.setText(str(EZVARS['COR']['user-defined-dax']['value'])) def set_rButton(self): dict_entry = EZVARS['COR']['search-method'] enable_360Batch_group = False if self.auto_correlate_rButton.isChecked(): LOG.debug("Auto Correlate") add_value_to_dict_entry(dict_entry, 1) elif self.auto_minimize_rButton.isChecked(): LOG.debug("Auto Minimize") add_value_to_dict_entry(dict_entry, 2) elif self.define_axis_rButton.isChecked(): LOG.debug("Define axis") add_value_to_dict_entry(dict_entry, 3) elif self.image_midpoint_rButton.isChecked(): LOG.debug("Use image midpoint") add_value_to_dict_entry(dict_entry, 4) elif self.unstitched360_rButton.isChecked(): LOG.debug("Use Stitching Tab - Batch360") add_value_to_dict_entry(dict_entry, 5) enable_360Batch_group = True self.enable_360Batch_Group_in_Advanced.emit(enable_360Batch_group) def set_rButton_from_params(self): if EZVARS['COR']['search-method']['value'] == 1: self.auto_correlate_rButton.setChecked(True) self.auto_minimize_rButton.setChecked(False) self.define_axis_rButton.setChecked(False) self.image_midpoint_rButton.setChecked(False) elif EZVARS['COR']['search-method']['value'] == 2: self.auto_correlate_rButton.setChecked(False) self.auto_minimize_rButton.setChecked(True) self.define_axis_rButton.setChecked(False) self.image_midpoint_rButton.setChecked(False) elif EZVARS['COR']['search-method']['value'] == 3: self.auto_correlate_rButton.setChecked(False) self.auto_minimize_rButton.setChecked(False) self.define_axis_rButton.setChecked(True) self.image_midpoint_rButton.setChecked(False) elif EZVARS['COR']['search-method']['value'] == 4: self.auto_correlate_rButton.setChecked(False) self.auto_minimize_rButton.setChecked(False) self.define_axis_rButton.setChecked(False) self.image_midpoint_rButton.setChecked(True) elif EZVARS['COR']['search-method']['value'] == 5: self.unstitched360_rButton.setChecked(True) self.enable_360Batch_Group_in_Advanced.emit(True) #TODO: also disable INput/Output in 360-SEARCH #and completely disable 360-MULTI-STITCH def set_search_rotation(self): LOG.debug(self.search_rotation_entry.text()) dict_entry = EZVARS['COR']['search-interval'] add_value_to_dict_entry(dict_entry, str(self.search_rotation_entry.text())) self.search_rotation_entry.setText(str(dict_entry['value'])) def set_search_slice(self): LOG.debug(self.search_in_slice_entry.text()) dict_entry = EZVARS['COR']['search-row'] add_value_to_dict_entry(dict_entry, str(self.search_in_slice_entry.text())) self.search_in_slice_entry.setText(str(dict_entry['value'])) def set_size_of_reco(self): LOG.debug(self.size_of_recon_entry.text()) dict_entry = EZVARS['COR']['patch-size'] add_value_to_dict_entry(dict_entry, str(self.size_of_recon_entry.text())) self.size_of_recon_entry.setText(str(dict_entry['value'])) def set_minimize_apply_pr(self): LOG.debug("PR while min std ax search: " + str(self.auto_minimize_apply_pr.isChecked())) dict_entry = EZVARS['COR']['min-std-apply-pr'] add_value_to_dict_entry(dict_entry, self.auto_minimize_apply_pr.isChecked()) def set_axis_col(self): if check_that_num_failed(self.axis_col_entry.text()): qm = QMessageBox() qm.warning(self, 'Input error', 'One of values in the Set axis entry is not number') LOG.debug(self.axis_col_entry.text()) dict_entry = EZVARS['COR']['user-defined-ax'] add_value_to_dict_entry(dict_entry, str(self.axis_col_entry.text())) self.axis_col_entry.setText(str(dict_entry['value'])) def set_axis_inc(self): LOG.debug(self.inc_axis_entry.text()) dict_entry = EZVARS['COR']['user-defined-dax'] add_value_to_dict_entry(dict_entry, str(self.inc_axis_entry.text())) self.inc_axis_entry.setText(str(dict_entry['value'])) ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/Main/config.py000066400000000000000000000677501521054151500213550ustar00rootroot00000000000000import os import logging from functools import partial from shutil import rmtree from PyQt5.QtWidgets import ( QMessageBox, QFileDialog, QCheckBox, QPushButton, QGridLayout, QLabel, QGroupBox, QLineEdit, ) from PyQt5.QtCore import QCoreApplication, QTimer, pyqtSignal, Qt from tofu.ez.GUI.verify_delete import verify_safe2delete from tofu.ez.main import execute_reconstruction, clean_tmp_dirs from tofu.ez.util import import_values, export_values, get_fdt_names from tofu.ez.GUI.message_dialog import warning_message from tofu.ez.params import EZVARS, EZVARS_aux from tofu.ez.util import add_value_to_dict_entry LOG = logging.getLogger(__name__) class ConfigGroup(QGroupBox): """ Setup and configuration settings """ # Used to send signal to ezufo_launcher when settings are imported signal_update_vals_from_params = pyqtSignal() # Used to send signal when reconstruction is done signal_reco_done = pyqtSignal() def __init__(self): super().__init__() self.setTitle("Input/output and misc settings") self.setStyleSheet("QGroupBox {color: purple;}") # Select input directory self.input_dir_select = QPushButton("Select input directory (or paste abs. path)") self.input_dir_select.setStyleSheet("background-color:lightgrey; font: 12pt;") self.input_dir_entry = QLineEdit() self.input_dir_entry.editingFinished.connect(self.set_input_dir) self.input_dir_select.pressed.connect(self.select_input_dir) # Save .params checkbox self.save_params_checkbox = QCheckBox("Save args in .params file") self.save_params_checkbox.stateChanged.connect(self.set_save_args) # Select output directory self.output_dir_select = QPushButton() self.output_dir_select.setText("Select output directory (or paste abs. path)") self.output_dir_select.setStyleSheet("background-color:lightgrey; font: 12pt;") self.output_dir_entry = QLineEdit() self.output_dir_entry.editingFinished.connect(self.set_output_dir) self.output_dir_select.pressed.connect(self.select_output_dir) # Save in separate files or in one huge tiff file self.bigtiff_checkbox = QCheckBox() self.bigtiff_checkbox.setText("Save slices in multipage tiffs") self.bigtiff_checkbox.setToolTip( "Will save images in bigtiff containers. \n" "Note that some temporary data is always saved in bigtiffs.\n" "Use bio-formats importer plugin for imagej or fiji to open the bigtiffs." ) self.bigtiff_checkbox.stateChanged.connect(self.set_big_tiff) # Crop in the reconstruction plane self.preproc_checkbox = QCheckBox() self.preproc_checkbox.setText("Preprocess with a generic ufo-launch pipeline, f.i.") self.preproc_checkbox.setToolTip( "Selected ufo filters will be applied to each " "image before reconstruction begins. \n" 'To print the list of filters use "ufo-query -l" command. \n' 'Parameters of each filter can be seen with "ufo-query -p filtername".' ) self.preproc_checkbox.stateChanged.connect(self.set_preproc) self.preproc_entry = QLineEdit() self.preproc_entry.editingFinished.connect(self.set_preproc_entry) # Names of directories with flats/darks/projections frames self.dir_name_label = QLabel() self.dir_name_label.setText("Name of flats/darks/tomo subdirectories in each CT data set") self.darks_entry = QLineEdit() self.darks_entry.editingFinished.connect(self.set_darks) self.flats_entry = QLineEdit() self.flats_entry.editingFinished.connect(self.set_flats) self.tomo_entry = QLineEdit() self.tomo_entry.editingFinished.connect(self.set_tomo) self.flats2_entry = QLineEdit() self.flats2_entry.editingFinished.connect(self.set_flats2) # Select flats/darks/flats2 for use in multiple reconstructions self.use_common_flats_darks_checkbox = QCheckBox() self.use_common_flats_darks_checkbox.setText( "Use common flats/darks across multiple experiments" ) self.use_common_flats_darks_checkbox.stateChanged.connect(self.set_flats_darks_checkbox) self.select_darks_button = QPushButton("Select path to darks (or paste abs. path)") self.select_darks_button.setToolTip("Background detector noise") self.select_darks_button.clicked.connect(self.select_darks_button_pressed) self.select_flats_button = QPushButton("Select path to flats (or paste abs. path)") self.select_flats_button.setToolTip("Images without sample in the beam") self.select_flats_button.clicked.connect(self.select_flats_button_pressed) self.select_flats2_button = QPushButton("Select path to flats2 (or paste abs. path)") self.select_flats2_button.setToolTip( "If selected, it will be assumed that flats were \n" "acquired before projections while flats2 after \n" "and interpolation will be used to compute intensity of flat image \n" "for each projection between flats and flats2" ) self.select_flats2_button.clicked.connect(self.select_flats2_button_pressed) self.darks_absolute_entry = QLineEdit() self.darks_absolute_entry.setText("Absolute path to darks") self.darks_absolute_entry.editingFinished.connect(self.set_common_darks) self.flats_absolute_entry = QLineEdit() self.flats_absolute_entry.setText("Absolute path to flats") self.flats_absolute_entry.editingFinished.connect(self.set_common_flats) self.use_flats2_checkbox = QCheckBox("Use common flats2") self.use_flats2_checkbox.clicked.connect(self.set_use_flats2) self.flats2_absolute_entry = QLineEdit() self.flats2_absolute_entry.editingFinished.connect(self.set_common_flats2) self.flats2_absolute_entry.setText("Absolute path to flats2") # Select temporary directory self.temp_dir_select = QPushButton() self.temp_dir_select.setText("Select temporary directory (or paste abs. path)") self.temp_dir_select.setToolTip( "Temporary data will be saved there.\n" "note that the size of temporary data can exceed 300 GB in some cases." ) self.temp_dir_select.pressed.connect(self.select_temp_dir) self.temp_dir_select.setStyleSheet("background-color:lightgrey; font: 12pt;") self.temp_dir_entry = QLineEdit() self.temp_dir_entry.editingFinished.connect(self.set_temp_dir) # Keep temp data selection self.keep_tmp_data_checkbox = QCheckBox() self.keep_tmp_data_checkbox.setText("Keep all temp data till the end of reconstruction") self.keep_tmp_data_checkbox.setToolTip( "Useful option to inspect how images change at each step" ) self.keep_tmp_data_checkbox.stateChanged.connect(self.set_keep_tmp_data) # IMPORT SETTINGS FROM FILE self.open_settings_file = QPushButton() self.open_settings_file.setText("Import parameters from file") self.open_settings_file.setStyleSheet("background-color:lightgrey; font: 12pt;") self.open_settings_file.pressed.connect(self.import_settings_button_pressed) # EXPORT SETTINGS TO FILE self.save_settings_file = QPushButton() self.save_settings_file.setText("Export parameters to file") self.save_settings_file.setStyleSheet("background-color:lightgrey; font: 12pt;") self.save_settings_file.pressed.connect(self.export_settings_button_pressed) # QUIT self.quit_button = QPushButton() self.quit_button.setText("Quit") self.quit_button.setStyleSheet("background-color:lightgrey; font: 13pt; font-weight: bold;") self.quit_button.clicked.connect(self.quit_button_pressed) # HELP self.help_button = QPushButton() self.help_button.setText("Help") self.help_button.setStyleSheet("background-color:lightgrey; font: 13pt; font-weight: bold") self.help_button.clicked.connect(self.help_button_pressed) # DELETE self.delete_reco_dir_button = QPushButton() self.delete_reco_dir_button.setText("Delete reco dir") self.delete_reco_dir_button.setStyleSheet( "background-color:lightgrey; font: 13pt; font-weight: bold" ) self.delete_reco_dir_button.clicked.connect(self.delete_button_pressed) # DRY RUN self.dry_run_button = QPushButton() self.dry_run_button.setText("Dry run") self.dry_run_button.setStyleSheet( "background-color:lightgrey; font: 13pt; font-weight: bold" ) self.dry_run_button.clicked.connect(self.dryrun_button_pressed) # RECONSTRUCT self.reco_button = QPushButton() self.reco_button.setText("Reconstruct") self.reco_button.setStyleSheet( "background-color:lightgrey;color:royalblue; font: 14pt; font-weight: bold;" ) self.reco_button.clicked.connect(self.reco_button_pressed) # OPEN IMAGE AFTER RECONSTRUCT self.open_image_after_reco_checkbox = QCheckBox() self.open_image_after_reco_checkbox.setText( "Load images and open viewer after reconstruction" ) self.open_image_after_reco_checkbox.clicked.connect(self.set_open_image_after_reco) self.set_layout() def set_layout(self): """ Sets the layout of buttons, labels, etc. for config group """ layout = QGridLayout() checkbox_groupbox = QGroupBox() checkbox_layout = QGridLayout() checkbox_layout.addWidget(self.save_params_checkbox, 0, 0) checkbox_layout.addWidget(self.bigtiff_checkbox, 1, 0) checkbox_layout.addWidget(self.open_image_after_reco_checkbox, 2, 0) checkbox_layout.addWidget(self.keep_tmp_data_checkbox, 3, 0) checkbox_groupbox.setLayout(checkbox_layout) layout.addWidget(checkbox_groupbox, 0, 4, 4, 1) layout.addWidget(self.input_dir_select, 0, 0) layout.addWidget(self.input_dir_entry, 0, 1, 1, 3) layout.addWidget(self.temp_dir_select, 1, 0) layout.addWidget(self.temp_dir_entry, 1, 1, 1, 3) layout.addWidget(self.output_dir_select, 2, 0) layout.addWidget(self.output_dir_entry, 2, 1, 1, 3) layout.addWidget(self.preproc_checkbox, 3, 0) layout.addWidget(self.preproc_entry, 3, 1, 1, 3) fdt_groupbox = QGroupBox() fdt_layout = QGridLayout() fdt_layout.addWidget(self.dir_name_label, 0, 0) fdt_layout.addWidget(self.darks_entry, 0, 1) fdt_layout.addWidget(self.flats_entry, 0, 2) fdt_layout.addWidget(self.tomo_entry, 0, 3) fdt_layout.addWidget(self.flats2_entry, 0, 4) fdt_layout.addWidget(self.use_common_flats_darks_checkbox, 1, 0) fdt_layout.addWidget(self.select_darks_button, 1, 1) fdt_layout.addWidget(self.select_flats_button, 1, 2) fdt_layout.addWidget(self.select_flats2_button, 1, 4) fdt_layout.addWidget(self.darks_absolute_entry, 2, 1) fdt_layout.addWidget(self.flats_absolute_entry, 2, 2) fdt_layout.addWidget(self.use_flats2_checkbox, 2, 3, Qt.AlignRight) fdt_layout.addWidget(self.flats2_absolute_entry, 2, 4) fdt_groupbox.setLayout(fdt_layout) layout.addWidget(fdt_groupbox, 4, 0, 1, 5) layout.addWidget(self.open_settings_file, 5, 0, 1, 3) layout.addWidget(self.save_settings_file, 5, 3, 1, 2) layout.addWidget(self.quit_button, 6, 0) layout.addWidget(self.help_button, 6, 1) layout.addWidget(self.delete_reco_dir_button, 6, 2) layout.addWidget(self.dry_run_button, 6, 3) layout.addWidget(self.reco_button, 6, 4) self.setLayout(layout) def load_values(self): """ Updates displayed values for config group """ self.input_dir_entry.setText(EZVARS['inout']['input-dir']['value']) self.save_params_checkbox.setChecked(EZVARS['inout']['save-params']['value']) self.output_dir_entry.setText(EZVARS['inout']['output-dir']['value']) self.bigtiff_checkbox.setChecked(EZVARS['inout']['bigtiff-output']['value']) self.preproc_checkbox.setChecked(EZVARS['inout']['preprocess']['value']) self.preproc_entry.setText(EZVARS['inout']['preprocess-command']['value']) self.darks_entry.setText(EZVARS['inout']['darks-dir']['value']) self.flats_entry.setText(EZVARS['inout']['flats-dir']['value']) self.tomo_entry.setText(EZVARS['inout']['tomo-dir']['value']) self.flats2_entry.setText(EZVARS['inout']['flats2-dir']['value']) self.temp_dir_entry.setText(EZVARS['inout']['tmp-dir']['value']) self.keep_tmp_data_checkbox.setChecked(EZVARS['inout']['keep-tmp']['value']) self.dry_run_button.setChecked(EZVARS['inout']['dryrun']['value']) self.open_image_after_reco_checkbox.setChecked(EZVARS['inout']['open-viewer']['value']) self.use_common_flats_darks_checkbox.setChecked(EZVARS['inout']['shared-flatsdarks']['value']) self.darks_absolute_entry.setText(EZVARS['inout']['path2-shared-darks']['value']) self.flats_absolute_entry.setText(EZVARS['inout']['path2-shared-flats']['value']) self.use_flats2_checkbox.setChecked(EZVARS['inout']['shared-flats-after']['value']) self.flats2_absolute_entry.setText(EZVARS['inout']['path2-shared-flats2']['value']) def select_input_dir(self): """ Saves directory specified by user in file-dialog for input tomographic data """ dir_explore = QFileDialog(self) dir = dir_explore.getExistingDirectory(directory=self.input_dir_entry.text()) if dir: self.input_dir_entry.setText(dir) self.set_input_dir() def set_input_dir(self): LOG.debug(str(self.input_dir_entry.text())) dict_entry = EZVARS['inout']['input-dir'] dir = self.input_dir_entry.text().strip() add_value_to_dict_entry(dict_entry, dir) self.input_dir_entry.setText(dir) def select_output_dir(self): dir_explore = QFileDialog(self) dir = dir_explore.getExistingDirectory(directory=self.output_dir_entry.text()) if dir: self.output_dir_entry.setText(dir) self.set_output_dir() def set_output_dir(self): LOG.debug(str(self.output_dir_entry.text())) dict_entry = EZVARS['inout']['output-dir'] dir = self.output_dir_entry.text().strip() add_value_to_dict_entry(dict_entry, dir) self.output_dir_entry.setText(dir) def set_big_tiff(self): LOG.debug("Bigtiff: " + str(self.bigtiff_checkbox.isChecked())) dict_entry = EZVARS['inout']['bigtiff-output'] add_value_to_dict_entry(dict_entry, self.bigtiff_checkbox.isChecked()) def set_preproc(self): LOG.debug("Preproc: " + str(self.preproc_checkbox.isChecked())) dict_entry = EZVARS['inout']['preprocess'] add_value_to_dict_entry(dict_entry, self.preproc_checkbox.isChecked()) def set_preproc_entry(self): LOG.debug(self.preproc_entry.text()) dict_entry = EZVARS['inout']['preprocess-command'] text = self.preproc_entry.text().strip() add_value_to_dict_entry(dict_entry, text) self.preproc_entry.setText(text) def set_open_image_after_reco(self): LOG.debug( "Switch to Image Viewer After Reco: " + str(self.open_image_after_reco_checkbox.isChecked()) ) dict_entry = EZVARS['inout']['open-viewer'] add_value_to_dict_entry(dict_entry, self.open_image_after_reco_checkbox.isChecked()) def set_darks(self): LOG.debug(self.darks_entry.text()) dict_entry = EZVARS['inout']['darks-dir'] dir = self.darks_entry.text().strip() add_value_to_dict_entry(dict_entry, dir) self.darks_entry.setText(dir) def set_flats(self): LOG.debug(self.flats_entry.text()) dict_entry = EZVARS['inout']['flats-dir'] dir = self.flats_entry.text().strip() add_value_to_dict_entry(dict_entry, dir) self.flats_entry.setText(dir) def set_tomo(self): LOG.debug(self.tomo_entry.text()) dict_entry = EZVARS['inout']['tomo-dir'] dir = self.tomo_entry.text().strip() add_value_to_dict_entry(dict_entry, dir) self.tomo_entry.setText(dir) def set_flats2(self): LOG.debug(self.flats2_entry.text()) dict_entry = EZVARS['inout']['flats2-dir'] dir = self.flats2_entry.text().strip() add_value_to_dict_entry(dict_entry, dir) self.flats2_entry.setText(dir) def set_fdt_names(self): self.set_darks() self.set_flats() self.set_flats2() self.set_tomo() def set_flats_darks_checkbox(self): LOG.debug( "Use same flats/darks across multiple experiments: " + str(self.use_common_flats_darks_checkbox.isChecked()) ) dict_entry = EZVARS['inout']['shared-flatsdarks'] add_value_to_dict_entry(dict_entry, self.use_common_flats_darks_checkbox.isChecked()) def select_darks_button_pressed(self): LOG.debug("Select path to darks pressed") dir_explore = QFileDialog(self) directory = dir_explore.getExistingDirectory(directory=EZVARS['inout']['input-dir']['value']) if directory: self.darks_absolute_entry.setText(directory) self.set_common_darks() def select_flats_button_pressed(self): LOG.debug("Select path to flats pressed") dir_explore = QFileDialog(self) directory = dir_explore.getExistingDirectory(directory=EZVARS['inout']['input-dir']['value']) if directory: self.flats_absolute_entry.setText(directory) self.set_common_flats() def select_flats2_button_pressed(self): LOG.debug("Select path to flats2 pressed") dir_explore = QFileDialog(self) directory = dir_explore.getExistingDirectory(directory=EZVARS['inout']['input-dir']['value']) if directory: self.flats2_absolute_entry.setText(directory) self.set_common_flats2() def set_common_darks(self): LOG.debug("Common darks path: " + str(self.darks_absolute_entry.text())) dict_entry = EZVARS['inout']['path2-shared-darks'] text = self.darks_absolute_entry.text().strip() add_value_to_dict_entry(dict_entry, text) self.darks_absolute_entry.setText(text) def set_common_flats(self): LOG.debug("Common flats path: " + str(self.flats_absolute_entry.text())) dict_entry = EZVARS['inout']['path2-shared-flats'] text = self.flats_absolute_entry.text().strip() add_value_to_dict_entry(dict_entry, text) self.flats_absolute_entry.setText(text) def set_use_flats2(self): LOG.debug("Use common flats2 checkbox: " + str(self.use_flats2_checkbox.isChecked())) dict_entry = EZVARS['inout']['shared-flats-after'] text = self.use_flats2_checkbox.text().strip() add_value_to_dict_entry(dict_entry, text) self.use_flats2_checkbox.setText(text) def set_common_flats2(self): LOG.debug("Common flats2 path: " + str(self.flats2_absolute_entry.text())) dict_entry = EZVARS['inout']['path2-shared-flats2'] text = self.flats2_absolute_entry.text().strip() add_value_to_dict_entry(dict_entry, text) self.flats2_absolute_entry.setText(text) def select_temp_dir(self): dir_explore = QFileDialog(self) tmp_dir = dir_explore.getExistingDirectory(directory=self.temp_dir_entry.text()) if tmp_dir: self.temp_dir_entry.setText(tmp_dir) self.set_temp_dir() def set_temp_dir(self): LOG.debug(str(self.temp_dir_entry.text())) dict_entry = EZVARS['inout']['tmp-dir'] text = self.temp_dir_entry.text().strip() add_value_to_dict_entry(dict_entry, text) self.temp_dir_entry.setText(text) def set_keep_tmp_data(self): LOG.debug("Keep tmp: " + str(self.keep_tmp_data_checkbox.isChecked())) dict_entry = EZVARS['inout']['keep-tmp'] add_value_to_dict_entry(dict_entry, self.keep_tmp_data_checkbox.isChecked()) def quit_button_pressed(self): """ Displays confirmation dialog and cleans temporary directories """ LOG.debug("QUIT") reply = QMessageBox.question( self, "Quit", "Are you sure you want to quit?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No, ) if reply == QMessageBox.Yes: # remove all directories with projections clean_tmp_dirs(EZVARS['inout']['tmp-dir']['value'], get_fdt_names()) # remove axis-search dir too tmp = os.path.join(EZVARS['inout']['tmp-dir']['value'], 'axis-search') QCoreApplication.instance().quit() else: pass def help_button_pressed(self): """ Displays pop-up help information """ LOG.debug("HELP") h = "This utility provides an interface to the ufo-kit software package.\n" h += "Use it for batch processing and optimization of reconstruction parameters.\n" h += "It creates a list of paths to all CT directories in the _input_ directory.\n" h += "A CT directory is defined as directory with at least \n" h += "_flats_, _darks_, _tomo_, and, optionally, _flats2_ subdirectories, \n" h += "which are not empty and contain only *.tif files. Names of CT\n" h += "directories are compared with the directory tree in the _output_ directory.\n" h += ( "(Note: relative directory tree in _input_ is preserved when writing results to the" " _output_.)\n" ) h += ( "Those CT sets will be reconstructed, whose names are not yet in the _output_" " directory." ) h += "Program will create an array of ufo/tofu commands according to defined parameters \n" h += ( "and then execute them sequentially. These commands can be also printed on the" " screen.\n" ) h += "Note2: if you bin in preprocess the center of rotation will change a lot; \n" h += 'Note4: set to "flats" if "flats2" exist but you need to ignore them; \n' h += ( "Sergei Gasilov, BMIT CLS, Dec. 2018 - 2024 \n" ) QMessageBox.information(self, "Help", h) def delete_button_pressed(self): """ Deletes the directory that contains reconstructed data """ LOG.debug("DELETE") msg = "Delete directory with reconstructed data?" dialog = QMessageBox.warning( self, "Warning: data can be lost", msg, QMessageBox.Yes | QMessageBox.No ) if dialog == QMessageBox.Yes: if os.path.exists(str(EZVARS['inout']['output-dir']['value'])): LOG.debug("YES") if EZVARS['inout']['output-dir']['value'] == EZVARS['inout']['input-dir']['value']: LOG.debug("Cannot delete: output directory is the same as input") else: try: rmtree(EZVARS['inout']['output-dir']['value']) except: warning_message('Error while deleting directory') LOG.debug("Directory with reconstructed data was removed") else: LOG.debug("Directory does not exist") else: LOG.debug("NO") def dryrun_button_pressed(self): """ Sets the dry-run parameter for Tofu to True and calls reconstruction """ LOG.debug("DRY") EZVARS['inout']['dryrun']['value'] = str(True) self.reco_button_pressed() def set_save_args(self): LOG.debug("Save args: " + str(self.save_params_checkbox.isChecked())) EZVARS['inout']['save-params']['value'] = bool(self.save_params_checkbox.isChecked()) def export_settings_button_pressed(self): """ Saves currently displayed GUI settings to an external .yaml file specified by user """ LOG.debug("Save settings pressed") options = QFileDialog.Options() fileName, _ = QFileDialog.getSaveFileName( self, "QFileDialog.getSaveFileName()", "", "YAML Files (*.yaml);; All Files (*)", options=options, ) if fileName: LOG.debug("Export YAML Path: " + fileName) file_extension = os.path.splitext(fileName) if file_extension[-1] == "": fileName = fileName + ".yaml" # Create and write to YAML file based on given fileName # self.yaml_io.write_yaml(fileName, parameters.params) export_values(fileName, ['ezvars', 'tofu', 'ezvars_aux']) def import_settings_button_pressed(self): """ Loads external settings from .yaml file specified by user Signal is sent to enable updating of displayed GUI values """ LOG.debug("Import settings pressed") options = QFileDialog.Options() filePath, _ = QFileDialog.getOpenFileName( self, "QFileDialog.getOpenFileName()", "", "YAML Files (*.yaml);; All Files (*)", options=options, ) if filePath: LOG.debug("Import YAML Path: " + filePath) import_values(filePath, ['ezvars', 'tofu', 'ezvars_aux']) self.signal_update_vals_from_params.emit() def reco_button_pressed(self): """ Gets the settings set by the user in the GUI These are then passed to execute_reconstruction """ #LOG.debug("RECO") self.set_fdt_names() self.set_common_darks() self.set_common_flats() self.set_common_flats2() self.set_big_tiff() self.set_input_dir() self.set_output_dir() self.set_temp_dir() self.set_preproc() self.set_preproc_entry() if EZVARS_aux['vert-sti']['dovertsti']['value']: # Warn if output dir collision if EZVARS['inout']['output-dir']['value'] == EZVARS_aux['vert-sti']['output-dir']['value']: vert_out = f"{EZVARS['inout']['output-dir']['value']}-vert-stitched" print("Vertical stitching output directory should not be the same as input.") print(f"Adjusting from {EZVARS_aux['vert-sti']['output-dir']['value']} to {vert_out}") add_value_to_dict_entry(EZVARS_aux['vert-sti']['output-dir'], vert_out) if EZVARS['COR']['search-method']['value'] == 5: # Check half-acq workdir "stitched-data" is empty before starting stitched_data_dir_name = os.path.join(EZVARS_aux['half-acq']['workdir']['value'], 'stitched-data') try: verify_safe2delete(self, stitched_data_dir_name, "Half-acq stitched data") except FileExistsError: return run_reco = partial(self.run_reconstruction, batch_run=False) #I had to add a little sleep as on some Linux ditributions params won't fully set before the main() begins QTimer.singleShot(100, run_reco) def run_reconstruction(self, batch_run): try: num_proc_sets = execute_reconstruction() msg = f"Processed {num_proc_sets} sets. See output in terminal for details." QMessageBox.information(self, "Finished", msg) if not EZVARS['inout']['dryrun']['value']: self.signal_reco_done.emit() EZVARS['inout']['dryrun']['value'] = bool(False) except InvalidInputError as err: msg = "Failed to run reconstruction. See output in terminal for details." err_arg = err.args msg += err.args[0] QMessageBox.information(self, "Invalid Input Error", msg) class InvalidInputError(Exception): """ Error to be raised when input values from GUI are out of range or invalid """ ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/Main/filters.py000066400000000000000000000325721521054151500215520ustar00rootroot00000000000000import logging from PyQt5.QtWidgets import ( QButtonGroup, QGridLayout, QLabel, QRadioButton, QCheckBox, QGroupBox, QLineEdit, ) from PyQt5.QtCore import Qt from tofu.ez.params import EZVARS from tofu.config import SECTIONS from tofu.ez.util import add_value_to_dict_entry, get_int_validator, get_double_validator from PyQt5.QtCore import pyqtSignal LOG = logging.getLogger(__name__) class FiltersGroup(QGroupBox): mask_method_median_checked = pyqtSignal() def __init__(self): super().__init__() self.setTitle("Filters") self.setStyleSheet("QGroupBox {color: orange;}") self.remove_spots_checkBox = QCheckBox() self.remove_spots_checkBox.setText("Remove large bad spots from projections") self.remove_spots_checkBox.setToolTip( "Finds large bad spots in images \n and replaces them with suitable values" ) self.remove_spots_checkBox.stateChanged.connect(self.set_remove_spots) self.remove_spots_median_checkBox = QCheckBox() self.remove_spots_median_checkBox.setText("Use median method (tune params in Advanced tab)") self.remove_spots_median_checkBox.setToolTip( "Uses median method to locate bad spots \n You must tune parameters in the Advanced tab" ) self.remove_spots_median_checkBox.stateChanged.connect(self.remove_spots_method_median_checked) self.threshold_label = QLabel() self.threshold_label.setText("Threshold (prominence of the spot) [counts]") self.threshold_label.setToolTip( "Outliers will be considered as the part of the large spot" ) self.threshold_entry = QLineEdit() self.threshold_entry.setValidator(get_double_validator()) self.threshold_entry.editingFinished.connect(self.set_threshold) self.find_spots_gau_sigma_label = QLabel() self.find_spots_gau_sigma_label.setText("Low-pass filter sigma [pixels]") self.find_spots_gau_sigma_label.setToolTip('Low pass filter will be applied before spots are identified \n' 'to remove slow changes in the flat field intensity') self.find_spots_gau_sigma_entry = QLineEdit() self.find_spots_gau_sigma_entry.setValidator(get_int_validator()) self.find_spots_gau_sigma_entry.editingFinished.connect(self.set_find_spots_gau_sigma) self.enable_RR_checkbox = QCheckBox() self.enable_RR_checkbox.setText("Enable ring removal") self.enable_RR_checkbox.setToolTip( "To suppress ring artifacts" " stemming from intensity fluctuations and detector non-linearities" ) self.enable_RR_checkbox.stateChanged.connect(self.set_ring_removal) self.use_LPF_rButton = QRadioButton() self.use_LPF_rButton.setText("Use ufo Fourier-transform based filter") self.use_LPF_rButton.clicked.connect(self.select_rButton) self.use_LPF_rButton.setToolTip( "To suppress ring artifacts" " stemming from intensity fluctuations and detector non-linearities" ) self.sarepy_rButton = QRadioButton() self.sarepy_rButton.setText("Use sarepy sorting: ") self.sarepy_rButton.clicked.connect(self.select_rButton) self.sarepy_rButton.setToolTip( "Non-FFT based algorithms from \n /Nghia T. Vo et al, Opt. Express 26, 28396 (2018)" ) self.filter_rButton_group = QButtonGroup(self) self.filter_rButton_group.addButton(self.use_LPF_rButton) self.filter_rButton_group.addButton(self.sarepy_rButton) self.one_dimens_rButton = QRadioButton() self.one_dimens_rButton.setText("1D") self.one_dimens_rButton.clicked.connect(self.select_dimens_rButton) self.one_dimens_rButton.setToolTip("Only low-pass filter along the lines of sinogram") self.two_dimens_rButton = QRadioButton() self.two_dimens_rButton.setText("2D") self.two_dimens_rButton.clicked.connect(self.select_dimens_rButton) self.two_dimens_rButton.setToolTip( "Low-pass filter along the lines and high-pass filter along the columns" ) self.dimens_rButton_group = QButtonGroup(self) self.dimens_rButton_group.addButton(self.one_dimens_rButton) self.dimens_rButton_group.addButton(self.two_dimens_rButton) self.sigma_horizontal_label = QLabel() self.sigma_horizontal_label.setText("sigma horizontal") self.sigma_horizontal_label.setToolTip( "Width [pixels] of Gaussian-shaped low-pass filter in frequency domain" ) self.sigma_horizontal_entry = QLineEdit() self.sigma_horizontal_entry.setValidator(get_int_validator()) self.sigma_horizontal_entry.editingFinished.connect(self.set_sigma_horizontal) self.sigma_vertical_label = QLabel() self.sigma_vertical_label.setText("sigma vertical") self.sigma_vertical_label.setToolTip( "Width [pixels] of Gaussian-shaped high-pass filter in frequency domain" ) self.sigma_vertical_entry = QLineEdit() self.sigma_vertical_entry.setValidator(get_int_validator()) self.sigma_vertical_entry.editingFinished.connect(self.set_sigma_vertical) self.wind_size_label = QLabel() self.wind_size_label.setText("window size") self.wind_size_label.setToolTip("Window size in remove_stripe_based_sorting algorithm") self.wind_size_entry = QLineEdit() self.wind_size_entry.setValidator(get_int_validator()) self.wind_size_entry.editingFinished.connect(self.set_window_size) self.wind_size_entry.setToolTip("Typically in the range 31..51 ") self.remove_wide_checkbox = QCheckBox() self.remove_wide_checkbox.setText("Remove wide") self.remove_wide_checkbox.setToolTip("Window size in remove_large_stripe algorithm") self.remove_wide_checkbox.stateChanged.connect(self.set_remove_wide) self.remove_wide_label = QLabel() self.remove_wide_label.setText("window") self.remove_wide_label.setToolTip("Typically in the range 51..131 ") self.remove_wide_entry = QLineEdit() self.remove_wide_entry.setValidator(get_int_validator()) self.remove_wide_entry.editingFinished.connect(self.set_wind) self.SNR_label = QLabel() self.SNR_label.setText("SNR") self.SNR_label.setToolTip("SNR param in remove_large_stripe algorithm") self.SNR_entry = QLineEdit() self.SNR_entry.setValidator(get_int_validator()) self.SNR_entry.editingFinished.connect(self.set_SNR) self.set_layout() def set_layout(self): layout = QGridLayout() remove_spots_groupbox = QGroupBox() remove_spots_layout = QGridLayout() remove_spots_layout.addWidget(self.remove_spots_checkBox, 0, 0) remove_spots_layout.addWidget(self.remove_spots_median_checkBox, 0, 1) remove_spots_layout.addWidget(self.threshold_label, 1, 0) remove_spots_layout.addWidget(self.threshold_entry, 1, 1) remove_spots_layout.addWidget(self.find_spots_gau_sigma_label, 2, 0) remove_spots_layout.addWidget(self.find_spots_gau_sigma_entry, 2, 1) remove_spots_groupbox.setLayout(remove_spots_layout) layout.addWidget(remove_spots_groupbox) rr_groupbox = QGroupBox() rr_layout = QGridLayout() rr_layout.addWidget(self.enable_RR_checkbox, 3, 0) rr_layout.addWidget(self.use_LPF_rButton, 4, 0) rr_layout.addWidget(self.one_dimens_rButton, 4, 1) rr_layout.addWidget(self.two_dimens_rButton, 4, 2) rr_layout.addWidget(self.sigma_horizontal_label, 4, 3, Qt.AlignRight) rr_layout.addWidget(self.sigma_horizontal_entry, 4, 4) rr_layout.addWidget(self.sigma_vertical_label, 4, 5, Qt.AlignRight) rr_layout.addWidget(self.sigma_vertical_entry, 4, 6) rr_layout.addWidget(self.sarepy_rButton, 5, 0) rr_layout.addWidget(self.wind_size_label, 5, 1) rr_layout.addWidget(self.wind_size_entry, 5, 2) rr_layout.addWidget(self.remove_wide_checkbox, 5, 3) rr_layout.addWidget(self.remove_wide_label, 5, 4, Qt.AlignRight) rr_layout.addWidget(self.remove_wide_entry, 5, 5) rr_layout.addWidget(self.SNR_label, 5, 6) rr_layout.addWidget(self.SNR_entry, 5, 7) rr_groupbox.setLayout(rr_layout) layout.addWidget(rr_groupbox, 3, 0) self.setLayout(layout) def load_values(self): self.remove_spots_checkBox.setChecked(EZVARS['filters']['rm_spots']['value']) self.remove_spots_median_checkBox.setChecked(EZVARS['filters']['rm_spots_use_median']['value']) self.threshold_entry.setText(str(SECTIONS['find-large-spots']['spot-threshold']['value'])) self.find_spots_gau_sigma_entry.setText(str(SECTIONS['find-large-spots']['gauss-sigma']['value'])) self.enable_RR_checkbox.setChecked(EZVARS['RR']['enable-RR']['value']) if EZVARS['RR']['use-ufo']['value'] == True: self.use_LPF_rButton.setChecked(True) elif EZVARS['RR']['use-ufo']['value'] == False: self.use_LPF_rButton.setChecked(False) if EZVARS['RR']['ufo-2d']['value'] == True: self.one_dimens_rButton.setChecked(True) self.two_dimens_rButton.setChecked(False) elif EZVARS['RR']['ufo-2d']['value'] == False: self.one_dimens_rButton.setChecked(False) self.two_dimens_rButton.setChecked(True) self.sigma_horizontal_entry.setText(str(EZVARS['RR']['sx']['value'])) self.sigma_vertical_entry.setText(str(EZVARS['RR']['sy']['value'])) self.wind_size_entry.setText(str(EZVARS['RR']['spy-narrow-window']['value'])) self.remove_wide_checkbox.setChecked(EZVARS['RR']['spy-rm-wide']['value']) self.remove_wide_entry.setText(str(EZVARS['RR']['spy-wide-window']['value'])) self.SNR_entry.setText(str(EZVARS['RR']['spy-wide-SNR']['value'])) def set_remove_spots(self): LOG.debug("Remove large spots:" + str(self.remove_spots_checkBox.isChecked())) dict_entry = EZVARS['filters']['rm_spots'] add_value_to_dict_entry(dict_entry, self.remove_spots_checkBox.isChecked()) def set_threshold(self): LOG.debug(self.threshold_entry.text()) dict_entry = SECTIONS['find-large-spots']['spot-threshold'] add_value_to_dict_entry(dict_entry, self.threshold_entry.text()) self.threshold_entry.setText(str(dict_entry['value'])) def set_find_spots_gau_sigma(self): LOG.debug(self.find_spots_gau_sigma_entry.text()) dict_entry = SECTIONS['find-large-spots']['gauss-sigma'] add_value_to_dict_entry(dict_entry, self.find_spots_gau_sigma_entry.text()) self.find_spots_gau_sigma_entry.setText(str(dict_entry['value'])) def set_ring_removal(self): LOG.debug("RR: " + str(self.enable_RR_checkbox.isChecked())) dict_entry = EZVARS['RR']['enable-RR'] add_value_to_dict_entry(dict_entry, self.enable_RR_checkbox.isChecked()) def select_rButton(self): dict_entry = EZVARS['RR']['use-ufo'] if self.use_LPF_rButton.isChecked(): LOG.debug("Use LPF") add_value_to_dict_entry(dict_entry, True) elif self.sarepy_rButton.isChecked(): LOG.debug("Use Sarepy") add_value_to_dict_entry(dict_entry, False) def select_dimens_rButton(self): dict_entry = EZVARS['RR']['ufo-2d'] if self.one_dimens_rButton.isChecked(): LOG.debug("One dimension") add_value_to_dict_entry(dict_entry, True) elif self.two_dimens_rButton.isChecked(): LOG.debug("Two dimensions") add_value_to_dict_entry(dict_entry, False) def set_sigma_horizontal(self): LOG.debug(self.sigma_horizontal_entry.text()) dict_entry = EZVARS['RR']['sx'] add_value_to_dict_entry(dict_entry, self.sigma_horizontal_entry.text()) self.sigma_horizontal_entry.setText(str(dict_entry['value'])) def set_sigma_vertical(self): LOG.debug(self.sigma_vertical_entry.text()) dict_entry = EZVARS['RR']['sy'] add_value_to_dict_entry(dict_entry, self.sigma_vertical_entry.text()) self.sigma_vertical_entry.setText(str(dict_entry['value'])) def set_ufoRR_params_for_360_axis_search(self): self.set_sigma_vertical() self.set_sigma_horizontal() def set_window_size(self): LOG.debug(self.wind_size_entry.text()) dict_entry = EZVARS['RR']['spy-narrow-window'] add_value_to_dict_entry(dict_entry, self.wind_size_entry.text()) self.wind_size_entry.setText(str(dict_entry['value'])) def set_remove_wide(self): LOG.debug("Wide: " + str(self.remove_wide_checkbox.isChecked())) dict_entry = EZVARS['RR']['spy-rm-wide'] add_value_to_dict_entry(dict_entry, self.remove_wide_checkbox.text()) def set_wind(self): LOG.debug(self.remove_wide_entry.text()) dict_entry = EZVARS['RR']['spy-wide-window'] add_value_to_dict_entry(dict_entry, self.remove_wide_entry.text()) self.remove_wide_entry.setText(str(dict_entry['value'])) def set_SNR(self): LOG.debug(self.SNR_entry.text()) dict_entry = EZVARS['RR']['spy-wide-SNR'] add_value_to_dict_entry(dict_entry, self.SNR_entry.text()) self.SNR_entry.setText(str(dict_entry['value'])) def remove_spots_method_median_checked(self): self.mask_method_median_checked.emit()ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/Main/phase_retrieval.py000066400000000000000000000120511521054151500232450ustar00rootroot00000000000000import logging import math from PyQt5.QtWidgets import QGridLayout, QLabel, QGroupBox, QLineEdit, QCheckBox from tofu.config import SECTIONS from tofu.ez.params import EZVARS from tofu.ez.util import add_value_to_dict_entry, reverse_tupleize, get_double_validator, get_tuple_validator LOG = logging.getLogger(__name__) class PhaseRetrievalGroup(QGroupBox): """ Phase Retrieval settings """ def __init__(self): super().__init__() self.setTitle("Phase Retrieval") self.setStyleSheet("QGroupBox {color: blue;}") self.enable_PR_checkBox = QCheckBox() self.enable_PR_checkBox.setText("Enable Paganin/TIE phase retrieval") self.enable_PR_checkBox.stateChanged.connect(self.set_PR) self.photon_energy_label = QLabel() self.photon_energy_label.setText("Photon energy [keV]") self.photon_energy_entry = QLineEdit() self.photon_energy_entry.setValidator(get_double_validator()) self.photon_energy_entry.editingFinished.connect(self.set_photon_energy) self.pixel_size_label = QLabel() self.pixel_size_label.setText("Pixel size [micron]") self.pixel_size_entry = QLineEdit() self.pixel_size_entry.setValidator(get_double_validator()) self.pixel_size_entry.editingFinished.connect(self.set_pixel_size) self.detector_distance_label = QLabel() self.detector_distance_label.setText("Sample-detector distance [m]") self.detector_distance_entry = QLineEdit() self.detector_distance_entry.setValidator(get_tuple_validator()) self.detector_distance_entry.editingFinished.connect(self.set_detector_distance) self.delta_beta_ratio_label = QLabel() self.delta_beta_ratio_label.setText("Delta/beta ratio: (try default if unsure)") self.delta_beta_ratio_entry = QLineEdit() self.delta_beta_ratio_entry.setValidator(get_double_validator()) self.delta_beta_ratio_entry.editingFinished.connect(self.set_delta_beta) self.set_layout() def set_layout(self): layout = QGridLayout() layout.addWidget(self.enable_PR_checkBox, 0, 0) layout.addWidget(self.photon_energy_label, 1, 0) layout.addWidget(self.photon_energy_entry, 1, 1) layout.addWidget(self.pixel_size_label, 2, 0) layout.addWidget(self.pixel_size_entry, 2, 1) layout.addWidget(self.detector_distance_label, 3, 0) layout.addWidget(self.detector_distance_entry, 3, 1) layout.addWidget(self.delta_beta_ratio_label, 4, 0) layout.addWidget(self.delta_beta_ratio_entry, 4, 1) self.setLayout(layout) def load_values(self): self.enable_PR_checkBox.setChecked(EZVARS['retrieve-phase']['apply-pr']['value']) self.photon_energy_entry.setText(str(SECTIONS['retrieve-phase']['energy']['value'])) self.pixel_size_entry.setText(str( round(self.meters_to_microns(SECTIONS['retrieve-phase']['pixel-size']['value']),6))) self.detector_distance_entry.setText(str( reverse_tupleize()(SECTIONS['retrieve-phase']['propagation-distance']['value']))) self.delta_beta_ratio_entry.setText(str( round(self.regularization_rate_to_delta_beta_ratio(SECTIONS['retrieve-phase']['regularization-rate']['value'])))) def set_PR(self): LOG.debug("PR: " + str(self.enable_PR_checkBox.isChecked())) dict_entry = EZVARS['retrieve-phase']['apply-pr'] add_value_to_dict_entry(dict_entry, self.enable_PR_checkBox.isChecked()) def set_photon_energy(self): LOG.debug(self.photon_energy_entry.text()) dict_entry = SECTIONS['retrieve-phase']['energy'] add_value_to_dict_entry(dict_entry, str(self.photon_energy_entry.text())) self.photon_energy_entry.setText(str(dict_entry['value'])) def set_pixel_size(self): LOG.debug(self.pixel_size_entry.text()) dict_entry = SECTIONS['retrieve-phase']['pixel-size'] add_value_to_dict_entry(dict_entry, self.microns_to_meters(float(self.pixel_size_entry.text()))) def set_detector_distance(self): LOG.debug(self.detector_distance_entry.text()) dict_entry = SECTIONS['retrieve-phase']['propagation-distance'] add_value_to_dict_entry(dict_entry, str(self.detector_distance_entry.text())) self.detector_distance_entry.setText(str(reverse_tupleize()(dict_entry['value']))) def set_delta_beta(self): LOG.debug(self.delta_beta_ratio_entry.text()) dict_entry = SECTIONS['retrieve-phase']['regularization-rate'] add_value_to_dict_entry(dict_entry, self.delta_beta_ratio_to_regularization_rate(float(self.delta_beta_ratio_entry.text()))) def meters_to_microns(self,value)->float: return value * 1e6 def microns_to_meters(self,value)->float: return value * 1e-6 def delta_beta_ratio_to_regularization_rate(self,value:float)->float: return math.log10(value) def regularization_rate_to_delta_beta_ratio(self,value)->float: return 10**valueufo-kit-tofu-ed0e5bd/tofu/ez/GUI/Main/region_and_histogram.py000066400000000000000000000267421521054151500242660ustar00rootroot00000000000000import logging from PyQt5.QtWidgets import QGridLayout, QRadioButton, QLabel, QGroupBox, QLineEdit, QCheckBox from PyQt5.QtCore import Qt from tofu.ez.params import EZVARS from tofu.config import SECTIONS from tofu.ez.util import add_value_to_dict_entry, get_int_validator, get_double_validator, reverse_tupleize LOG = logging.getLogger(__name__) class ROIandHistGroup(QGroupBox): """ Binning settings """ def __init__(self): super().__init__() self.setTitle("Region of Interest and Histogram Settings") self.setStyleSheet("QGroupBox {color: red;}") self.select_rows_checkbox = QCheckBox() self.select_rows_checkbox.setText("Select rows which will be reconstructed") self.select_rows_checkbox.stateChanged.connect(self.set_select_rows) self.first_row_label = QLabel() self.first_row_label.setText("First row in projections") self.first_row_label.setToolTip("Counting from the top") self.first_row_entry = QLineEdit() self.first_row_entry.setValidator(get_int_validator()) self.first_row_entry.editingFinished.connect(self.set_first_row) self.num_rows_label = QLabel() self.num_rows_label.setText("Number of rows (ROI height)") self.num_rows_entry = QLineEdit() self.num_rows_entry.setValidator(get_int_validator()) self.num_rows_entry.editingFinished.connect(self.set_num_rows) self.nth_row_label = QLabel() self.nth_row_label.setText("Step (reconstruct every Nth row)") self.nth_row_entry = QLineEdit() self.nth_row_entry.setValidator(get_int_validator()) self.nth_row_entry.editingFinished.connect(self.set_reco_nth_rows) self.clip_histo_checkbox = QCheckBox() self.clip_histo_checkbox.setText("Clip histogram and save slices in") self.clip_histo_checkbox.stateChanged.connect(self.set_clip_histo) self.eight_bit_rButton = QRadioButton() self.eight_bit_rButton.setText("8-bit") self.eight_bit_rButton.setChecked(True) self.eight_bit_rButton.clicked.connect(self.set_bitdepth) self.sixteen_bit_rButton = QRadioButton() self.sixteen_bit_rButton.setText("16-bit") self.sixteen_bit_rButton.clicked.connect(self.set_bitdepth) self.min_val_label = QLabel() self.min_val_label.setText("Min value in 32-bit histogram") self.min_val_entry = QLineEdit() #self.min_val_entry.setValidator(get_double_validator()) self.min_val_entry.editingFinished.connect(self.set_min_val) self.max_val_label = QLabel() self.max_val_label.setText("Max value in 32-bit histogram") self.max_val_entry = QLineEdit() #self.max_val_entry.setValidator(get_double_validator()) self.max_val_entry.editingFinished.connect(self.set_max_val) self.crop_slices_checkbox = QCheckBox() self.crop_slices_checkbox.setText("Crop slices") self.crop_slices_checkbox.setToolTip("Crop slices in the reconstruction plane \n" "(x,y) - top left corner of selection \n" "(width, height) - size of selection") self.crop_slices_checkbox.stateChanged.connect(self.set_crop_slices) self.x_val_label = QLabel() self.x_val_label.setText("x") self.x_val_label.setToolTip("First column (counting from left)") self.x_val_entry = QLineEdit() self.x_val_entry.setValidator(get_int_validator()) self.x_val_entry.editingFinished.connect(self.set_x) self.width_val_label = QLabel() self.width_val_label.setText("width") self.width_val_entry = QLineEdit() self.width_val_entry.setValidator(get_int_validator()) self.width_val_entry.editingFinished.connect(self.set_width) self.y_val_label = QLabel() self.y_val_label.setText("y") self.y_val_label.setToolTip("First row (counting from top)") self.y_val_entry = QLineEdit() self.y_val_entry.setValidator(get_int_validator()) self.y_val_entry.editingFinished.connect(self.set_y) self.height_val_label = QLabel() self.height_val_label.setText("height") self.height_val_entry = QLineEdit() self.height_val_entry.setValidator(get_int_validator()) self.height_val_entry.editingFinished.connect(self.set_height) self.rotate_vol_label = QLabel() self.rotate_vol_label.setText("Rotate volume counterclockwise by [deg]") self.rotate_vol_entry = QLineEdit() self.rotate_vol_entry.setValidator(get_double_validator()) self.rotate_vol_entry.editingFinished.connect(self.set_rotate_volume) # self.setStyleSheet('background-color:Azure') self.set_layout() def set_layout(self): """ Sets the layout of buttons, labels, etc. for binning group """ layout = QGridLayout() layout.addWidget(self.select_rows_checkbox, 0, 0) layout.addWidget(self.first_row_label, 1, 0) layout.addWidget(self.first_row_entry, 1, 1, 1, 8) layout.addWidget(self.num_rows_label, 2, 0) layout.addWidget(self.num_rows_entry, 2, 1, 1, 8) layout.addWidget(self.nth_row_label, 3, 0) layout.addWidget(self.nth_row_entry, 3, 1, 1, 8) layout.addWidget(self.clip_histo_checkbox, 4, 0) layout.addWidget(self.eight_bit_rButton, 4, 1) layout.addWidget(self.sixteen_bit_rButton, 4, 2) layout.addWidget(self.min_val_label, 5, 0) layout.addWidget(self.min_val_entry, 5, 1, 1, 8) layout.addWidget(self.max_val_label, 6, 0) layout.addWidget(self.max_val_entry, 6, 1, 1, 8) layout.addWidget(self.crop_slices_checkbox, 7, 0) layout.addWidget(self.x_val_label, 7, 1)#, Qt.AlignRight) layout.addWidget(self.x_val_entry, 7, 2) layout.addWidget(self.width_val_label, 7, 3)#, Qt.AlignRight) layout.addWidget(self.width_val_entry, 7, 4) layout.addWidget(self.y_val_label, 7, 5) layout.addWidget(self.y_val_entry, 7, 6) layout.addWidget(self.height_val_label, 7, 7) layout.addWidget(self.height_val_entry, 7, 8) layout.addWidget(self.rotate_vol_label, 8, 0) layout.addWidget(self.rotate_vol_entry, 8, 1, 1, 8) self.setLayout(layout) def load_values(self): self.select_rows_checkbox.setChecked(EZVARS['inout']['input_ROI']['value']) self.first_row_entry.setText(str(SECTIONS['reading']['y']['value'])) self.num_rows_entry.setText(str(SECTIONS['reading']['height']['value'])) self.nth_row_entry.setText(str(SECTIONS['reading']['y-step']['value'])) if int(SECTIONS['general']['output-bitdepth']['value']) == 8: self.eight_bit_rButton.setChecked(True) self.sixteen_bit_rButton.setChecked(False) elif int(SECTIONS['general']['output-bitdepth']['value']) == 16: self.eight_bit_rButton.setChecked(False) self.sixteen_bit_rButton.setChecked(True) self.clip_histo_checkbox.setChecked(EZVARS['inout']['clip_hist']['value']) self.min_val_entry.setText(str(SECTIONS['general']['output-minimum']['value'])) self.max_val_entry.setText(str(SECTIONS['general']['output-maximum']['value'])) self.crop_slices_checkbox.setChecked(EZVARS['inout']['output-ROI']['value']) self.x_val_entry.setText(str(EZVARS['inout']['output-x']['value'])) self.width_val_entry.setText(str(EZVARS['inout']['output-width']['value'])) self.y_val_entry.setText(str(EZVARS['inout']['output-y']['value'])) self.height_val_entry.setText(str(EZVARS['inout']['output-height']['value'])) self.rotate_vol_entry.setText(str(reverse_tupleize()(SECTIONS['general-reconstruction']['volume-angle-z']['value']))) def set_select_rows(self): LOG.debug("Select rows: " + str(self.select_rows_checkbox.isChecked())) dict_entry = EZVARS['inout']['input_ROI'] add_value_to_dict_entry(dict_entry, self.select_rows_checkbox.isChecked()) def set_first_row(self): LOG.debug(self.first_row_entry.text()) dict_entry = SECTIONS['reading']['y'] add_value_to_dict_entry(dict_entry, str(self.first_row_entry.text())) self.first_row_entry.setText(str(dict_entry['value'])) def set_num_rows(self): LOG.debug(self.num_rows_entry.text()) dict_entry = SECTIONS['reading']['height'] add_value_to_dict_entry(dict_entry, str(self.num_rows_entry.text())) self.num_rows_entry.setText(str(dict_entry['value'])) def set_reco_nth_rows(self): LOG.debug(self.nth_row_entry.text()) dict_entry = SECTIONS['reading']['y-step'] add_value_to_dict_entry(dict_entry, str(self.nth_row_entry.text())) self.nth_row_entry.setText(str(dict_entry['value'])) def set_clip_histo(self): LOG.debug("Clip histo: " + str(self.clip_histo_checkbox.isChecked())) dict_entry = EZVARS['inout']['clip_hist'] add_value_to_dict_entry(dict_entry, self.clip_histo_checkbox.isChecked()) if EZVARS['inout']['clip_hist']['value']: return self.set_bitdepth() else: return '32' def set_bitdepth(self): dict_entry = SECTIONS['general']['output-bitdepth'] if self.eight_bit_rButton.isChecked(): LOG.debug("8 bit") add_value_to_dict_entry(dict_entry, str(8)) return '8' elif self.sixteen_bit_rButton.isChecked(): LOG.debug("16 bit") add_value_to_dict_entry(dict_entry, str(16)) return '16' def set_min_val(self): LOG.debug(self.min_val_entry.text()) dict_entry = SECTIONS['general']['output-minimum'] add_value_to_dict_entry(dict_entry, self.min_val_entry.text()) def set_max_val(self): LOG.debug(self.max_val_entry.text()) dict_entry = SECTIONS['general']['output-maximum'] add_value_to_dict_entry(dict_entry, self.max_val_entry.text()) def set_crop_slices(self): LOG.debug("Crop slices: " + str(self.crop_slices_checkbox.isChecked())) dict_entry = EZVARS['inout']['output-ROI'] add_value_to_dict_entry(dict_entry, self.crop_slices_checkbox.isChecked()) def set_x(self): LOG.debug(self.x_val_entry.text()) dict_entry = EZVARS['inout']['output-x'] add_value_to_dict_entry(dict_entry, str(self.x_val_entry.text())) self.x_val_entry.setText(str(dict_entry['value'])) def set_width(self): LOG.debug(self.width_val_entry.text()) dict_entry = EZVARS['inout']['output-width'] add_value_to_dict_entry(dict_entry, str(self.width_val_entry.text())) self.width_val_entry.setText(str(dict_entry['value'])) def set_y(self): LOG.debug(self.y_val_entry.text()) dict_entry = EZVARS['inout']['output-y'] add_value_to_dict_entry(dict_entry, str(self.y_val_entry.text())) self.y_val_entry.setText(str(dict_entry['value'])) def set_height(self): LOG.debug(self.height_val_entry.text()) dict_entry = EZVARS['inout']['output-height'] add_value_to_dict_entry(dict_entry, str(self.height_val_entry.text())) self.height_val_entry.setText(str(dict_entry['value'])) def set_rotate_volume(self): LOG.debug(self.rotate_vol_entry.text()) dict_entry = SECTIONS['general-reconstruction']['volume-angle-z'] add_value_to_dict_entry(dict_entry, str(self.rotate_vol_entry.text())) self.rotate_vol_entry.setText(str(reverse_tupleize()(dict_entry['value']))) ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/Stitch_tools_tab/000077500000000000000000000000001521054151500221375ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/Stitch_tools_tab/__init__.py000066400000000000000000000000001521054151500242360ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/Stitch_tools_tab/ez_360_multi_stitch_qt.py000066400000000000000000000423041521054151500270160ustar00rootroot00000000000000from functools import partial from PyQt5.QtWidgets import ( QGroupBox, QPushButton, QCheckBox, QLabel, QLineEdit, QGridLayout, QFileDialog, QMessageBox, QRadioButton ) from PyQt5.QtCore import pyqtSignal import logging from shutil import rmtree import os import yaml from tofu.ez.Helpers.stitch_funcs import main_360_mp_depth2 from tofu.ez.GUI.message_dialog import warning_message # Params from tofu.ez.params import EZVARS_aux from tofu.ez.util import add_value_to_dict_entry, get_int_validator from tofu.ez.util import import_values, export_values LOG = logging.getLogger(__name__) class MultiStitch360Group(QGroupBox): get_fdt_names_on_stitch_pressed = pyqtSignal() def __init__(self): super().__init__() self.h_msg = "Stitches images horizontally to convert a bunch of half-acquisition " \ "mode scans to ordinary parallel beam CT sets.\n" self.h_msg += "Input directory structure must conform to the following template: \n" \ "Input/000, Input/001,...Input/00N. \n" self.h_msg += "Each 000, 001, ... 00N directory in the Input must be a legitimate tofu ez" \ "CT set with flats/darks/tomo subdirectories. \n" self.h_msg += "Frames in each flats/darks/tomo directory will be stitched horizontally pair-wise " \ "to produce ordinary projections from [0-180) and [180-360) halves of the " \ "half-acquisition mode scan and saved in the Output directory under the same relative path. \n" self.h_msg += "Script is also going to crop resulting frames to the same width." self.setTitle("360-MULTI-STITCH: convert half-acquisition mode CT sets to ordinary CT sets. " "Not recursive.") self.setToolTip(self.h_msg) self.setStyleSheet('QGroupBox {color: red;}') self.input_dir_button = QPushButton("Select input directory") self.input_dir_button.setToolTip("Contains one layer of CT directories with flats/darks/tomo subdirectories. \n" "Images in each will be stitched pair-wise [x and x+180 deg]. \n" "Doesn't work recursively") self.input_dir_button.clicked.connect(self.input_button_pressed) self.input_dir_entry = QLineEdit() self.input_dir_entry.editingFinished.connect(self.set_input_entry) self.output_dir_button = QPushButton("Directory to save stitched images") self.output_dir_button.clicked.connect(self.output_button_pressed) self.output_dir_entry = QLineEdit() self.output_dir_entry.editingFinished.connect(self.set_output_entry) self.crop_checkbox = QCheckBox("Crop all projections to match the width of smallest stitched projection") self.crop_checkbox.clicked.connect(self.set_crop_projections_checkbox) self.olap_val_switch_label = QLabel() self.olap_val_switch_label.setText('Define overlaps as') self.olap_val_int_rButton = QRadioButton() self.olap_val_int_rButton.setText('Min/max and interpolate between') self.olap_val_int_rButton.clicked.connect(self.set_rButton) self.olap_val_int_rButton.setChecked(True) self.olap_val_dict_rButton = QRadioButton() self.olap_val_dict_rButton.setText('Table') self.olap_val_dict_rButton.clicked.connect(self.set_rButton) self.olap_val_list_rButton = QRadioButton() self.olap_val_list_rButton.setText('List') self.olap_val_list_rButton.clicked.connect(self.set_rButton) self.oval_val_switch_group = QGroupBox() self.axis_bottom_label = QLabel() self.axis_bottom_label.setText("Overlap for first directory:") self.axis_bottom_entry = QLineEdit() self.axis_bottom_entry.editingFinished.connect(self.set_axis_bottom) self.axis_bottom_entry.setValidator(get_int_validator()) self.axis_top_label = QLabel("For last directory:") self.axis_top_entry = QLineEdit() self.axis_top_entry.editingFinished.connect(self.set_axis_top) self.axis_top_entry.setValidator(get_int_validator()) #### MANUAL ENTRY OF OVERLAPS self.axis_group = QGroupBox("Enter overlaps manually") self.axis_group.clicked.connect(self.set_axis_group) self.num_subdirs = 24 for i in range(self.num_subdirs): setattr(self, f"axis_z{i:03d}_label", QLabel(f"Dir {i:02d}:")) entry = QLineEdit() setattr(self, f"axis_z{i:03d}_entry", entry) entry.editingFinished.connect(partial(self.set_z_by_index, i)) getattr(self, f"axis_z{i:03d}_entry").setValidator(get_int_validator()) self.olap_list_label = QLabel() self.olap_list_label.setText("List of values comma separated") self.olap_list_entry = QLineEdit() self.olap_list_entry.setToolTip('Example: 48,50,5') self.olap_list_entry.editingFinished.connect(self.set_olap_list) self.stitch_button = QPushButton("Stitch") self.stitch_button.clicked.connect(self.stitch_button_pressed) self.stitch_button.setStyleSheet("color:royalblue;font-weight:bold") self.delete_button = QPushButton("Delete output dir") self.delete_button.clicked.connect(self.delete_button_pressed) self.help_button = QPushButton("Help") self.help_button.clicked.connect(self.help_button_pressed) self.import_parameters_button = QPushButton("Import Parameters from File") self.import_parameters_button.clicked.connect(self.import_parameters_button_pressed) self.save_parameters_button = QPushButton("Save Parameters to File") self.save_parameters_button.clicked.connect(self.save_parameters_button_pressed) self.set_layout() self.set_rButton() def set_layout(self): layout = QGridLayout() # layout.addWidget(self.input_dir_button, 0, 0, 1, 4) # layout.addWidget(self.input_dir_entry, 1, 0, 1, 4) # layout.addWidget(self.output_dir_button, 4, 0, 1, 4) # layout.addWidget(self.output_dir_entry, 5, 0, 1, 4) # layout.addWidget(self.crop_checkbox, 6, 0, 1, 4) layout.addWidget(self.input_dir_button, 0, 0, 1, 1) layout.addWidget(self.input_dir_entry, 0, 1, 1, 7) layout.addWidget(self.output_dir_button, 1, 0, 1, 1) layout.addWidget(self.output_dir_entry, 1, 1, 1, 7) layout.addWidget(self.crop_checkbox, 2, 0, 1, 4) l=3 olap_switch_layout = QGridLayout() olap_switch_layout.addWidget(self.olap_val_switch_label, 0, 0) olap_switch_layout.addWidget(self.olap_val_int_rButton, 0, 1) olap_switch_layout.addWidget(self.olap_val_dict_rButton, 0, 2) olap_switch_layout.addWidget(self.olap_val_list_rButton, 0, 3) self.oval_val_switch_group.setLayout(olap_switch_layout) layout.addWidget(self.oval_val_switch_group, l, 0, 1, 8) l= 4 # Interpolate overlaps layout.addWidget(self.axis_bottom_label, l, 0) layout.addWidget(self.axis_bottom_entry, l, 1) layout.addWidget(self.axis_top_label, l, 2) layout.addWidget(self.axis_top_entry, l, 3) # self.axis_group.setCheckable(True) # self.axis_group.setChecked(False) # Table of overlaps l=5 axis_layout = QGridLayout() ncols = 6 for i in range(self.num_subdirs): axis_layout.addWidget(getattr(self, f"axis_z{i:03d}_label"), i % ncols, i // ncols * 2) axis_layout.addWidget(getattr(self, f"axis_z{i:03d}_entry"), i % ncols, i // ncols * 2 + 1) self.axis_group.setLayout(axis_layout) layout.addWidget(self.axis_group, l, 0, 1, 8) l = 6 layout.addWidget(self.olap_list_label, l, 0) layout.addWidget(self.olap_list_entry, l, 1, 1, 7) # layout.addWidget(self.help_button, 11, 0) # layout.addWidget(self.delete_button, 11, 1) # layout.addWidget(self.stitch_button, 11, 2, 1, 2) # # layout.addWidget(self.import_parameters_button, 12, 0, 1, 2) # layout.addWidget(self.save_parameters_button, 12, 2, 1, 2) l = 7 layout.addWidget(self.delete_button, l, 0) layout.addWidget(self.help_button, l, 1) layout.addWidget(self.import_parameters_button, l, 2) layout.addWidget(self.save_parameters_button, l, 3) layout.addWidget(self.stitch_button, l, 4) self.setLayout(layout) def load_values(self): self.input_dir_entry.setText(str(EZVARS_aux['stitch360']['input-dir']['value'])) self.output_dir_entry.setText(str(EZVARS_aux['stitch360']['output-dir']['value'])) self.crop_checkbox.setChecked(EZVARS_aux['stitch360']['crop']['value']) self.axis_bottom_entry.setText(str(EZVARS_aux['stitch360']['olap_min']['value'])) self.axis_top_entry.setText(str(EZVARS_aux['stitch360']['olap_max']['value'])) self.set_rButton_from_params() def set_rButton_from_params(self): t = "One of the imported overlaps is not a number" if EZVARS_aux['stitch360']['olap_switch']['value'] == 0: self.olap_val_int_rButton.setChecked(True) self.olap_val_dict_rButton.setChecked(False) self.olap_val_list_rButton.setChecked(False) elif EZVARS_aux['stitch360']['olap_switch']['value'] == 1: self.olap_val_int_rButton.setChecked(False) self.olap_val_dict_rButton.setChecked(True) self.olap_val_list_rButton.setChecked(False) vals = EZVARS_aux['stitch360']['olap_list']['value'].split(',') if self.check_that_int_failed(vals, t): return else: self.set_table_vals(vals) elif EZVARS_aux['stitch360']['olap_switch']['value'] == 2: self.olap_val_int_rButton.setChecked(False) self.olap_val_dict_rButton.setChecked(False) self.olap_val_list_rButton.setChecked(True) self.olap_list_entry.setText(EZVARS_aux['stitch360']['olap_list']['value']) vals = EZVARS_aux['stitch360']['olap_list']['value'].split(',') if self.check_that_int_failed(vals, t): return else: self.set_table_vals(vals) def check_that_int_failed(self, vals, t): for i in range(len(vals)): try: int(vals[i]) except: qm = QMessageBox() qm.warning(self, '', t) return 1 return 0 def set_table_vals(self, vals): for i in range(len(vals)): try: getattr(self, f"axis_z{i:03d}_entry").setText(str(vals[i])) except: continue def set_rButton(self): dict_entry = EZVARS_aux['stitch360']['olap_switch'] if self.olap_val_int_rButton.isChecked(): add_value_to_dict_entry(dict_entry, 0) self.axis_bottom_entry.setEnabled(True) self.axis_top_entry.setEnabled(True) self.olap_list_entry.setEnabled(False) self.axis_group.setEnabled(False) elif self.olap_val_dict_rButton.isChecked(): add_value_to_dict_entry(dict_entry, 1) self.axis_bottom_entry.setEnabled(False) self.axis_top_entry.setEnabled(False) self.olap_list_entry.setEnabled(False) self.axis_group.setEnabled(True) elif self.olap_val_list_rButton.isChecked(): add_value_to_dict_entry(dict_entry, 2) # self.axis_bottom_label.setEnabled(False) self.axis_bottom_entry.setEnabled(False) # self.axis_top_label.setEnabled(False) self.axis_top_entry.setEnabled(False) self.olap_list_entry.setEnabled(True) self.axis_group.setEnabled(False) def input_button_pressed(self): LOG.debug("Input button pressed") dir_explore = QFileDialog(self) self.input_dir_entry.setText(dir_explore.getExistingDirectory()) self.set_input_entry() def set_input_entry(self): add_value_to_dict_entry(EZVARS_aux['stitch360']['input-dir'], str(self.input_dir_entry.text())) def output_button_pressed(self): LOG.debug("Output button pressed") dir_explore = QFileDialog(self) self.output_dir_entry.setText(dir_explore.getExistingDirectory()) self.set_output_entry() def set_output_entry(self): add_value_to_dict_entry(EZVARS_aux['stitch360']['output-dir'], str(self.output_dir_entry.text())) def set_crop_projections_checkbox(self): add_value_to_dict_entry(EZVARS_aux['stitch360']['crop'], self.crop_checkbox.isChecked()) def set_axis_bottom(self): add_value_to_dict_entry(EZVARS_aux['stitch360']['olap_min'], int(self.axis_bottom_entry.text())) def set_axis_top(self): add_value_to_dict_entry(EZVARS_aux['stitch360']['olap_max'], int(self.axis_top_entry.text())) def set_olap_type(self): add_value_to_dict_entry(EZVARS_aux['stitch360']['olap_switch'], 0) def set_olap_list(self): vals = self.olap_list_entry.text().split(',') if self.check_that_int_failed(vals): return else: add_value_to_dict_entry(EZVARS_aux['stitch360']['olap_list'], self.olap_list_entry.text()) def set_axis_group(self): if self.axis_group.isChecked(): self.axis_bottom_label.setEnabled(False) self.axis_bottom_entry.setEnabled(False) self.axis_top_label.setEnabled(False) self.axis_top_entry.setEnabled(False) else: self.axis_bottom_label.setEnabled(True) self.axis_bottom_entry.setEnabled(True) self.axis_top_label.setEnabled(True) self.axis_top_entry.setEnabled(True) def set_z_by_index(self, index): entry: QLineEdit = getattr(self, f"axis_z{index:03d}_entry") key = f"z{index:03d}" LOG.debug(f"{key} axis: {entry.text()}") self.update_olap_list() def update_olap_list(self): EZVARS_aux['stitch360']['olap_list']['value'] = '' for i in range(self.num_subdirs): try: EZVARS_aux['stitch360']['olap_list']['value'] += \ (str(int(getattr(self, f"axis_z{i:03d}_entry").text())) + ",") except: EZVARS_aux['stitch360']['olap_list']['value']=\ EZVARS_aux['stitch360']['olap_list']['value'][:-1] return def stitch_button_pressed(self): LOG.debug("Stitch button pressed") self.get_fdt_names_on_stitch_pressed.emit() if os.path.exists(EZVARS_aux['stitch360']['output-dir']['value']) and \ len(os.listdir(EZVARS_aux['stitch360']['output-dir']['value'])) > 0: qm = QMessageBox() rep = qm.warning(self, '', "Output directory exists and is not empty.") return print("======= Begin 360 Multi-Stitch =======") main_360_mp_depth2() params_file_path = os.path.join(EZVARS_aux['stitch360']['output-dir']['value'], 'ezvars_aux_from_multistitch.yaml') export_values(params_file_path, ['ezvars_aux']) print("==== Waiting for Next Task ====") QMessageBox.information(self, "Finished", "Finished stitching") def delete_button_pressed(self): LOG.debug("Delete button pressed") qm = QMessageBox() rep = qm.question(self, '', "Is it safe to delete the output directory?", qm.Yes | qm.No) if not os.path.exists(EZVARS_aux['stitch360']['output-dir']['value']): warning_message("Output directory does not exist") elif rep == qm.Yes: print("---- Deleting Data From Output Directory ----") try: rmtree(EZVARS_aux['stitch360']['output-dir']['value']) except: warning_message("Problems with deleting output directory") else: return def help_button_pressed(self): LOG.debug("Help button pressed") QMessageBox.information(self, "Help", self.h_msg) def import_parameters_button_pressed(self): LOG.debug("Import params button clicked") dir_explore = QFileDialog(self) params_file_path = dir_explore.getOpenFileName(filter="*.yaml") import_values(params_file_path[0], ['ezvars_aux']) self.load_values() def save_parameters_button_pressed(self): LOG.debug("Save params button clicked") dir_explore = QFileDialog(self) params_file_path = dir_explore.getSaveFileName(filter="*.yaml") garbage, file_name = os.path.split(params_file_path[0]) file_extension = os.path.splitext(file_name) # If the user doesn't enter the .yaml extension then append it to filepath if file_extension[-1] == "": file_path = params_file_path[0] + ".yaml" else: file_path = params_file_path[0] try: export_values(file_path, ['ezvars_aux']) print("Parameters file saved at: " + str(file_path)) except FileNotFoundError: print("You need to select a directory and use a valid file name") ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/Stitch_tools_tab/ez_360_overlap_qt.py000066400000000000000000000357271521054151500257710ustar00rootroot00000000000000from PyQt5.QtWidgets import ( QGroupBox, QPushButton, QCheckBox, QLabel, QLineEdit, QGridLayout, QFileDialog, QMessageBox, ) from PyQt5.QtCore import pyqtSignal import logging from shutil import rmtree import os from tofu.ez.Helpers.find_360_overlap import find_overlap from tofu.ez.params import EZVARS_aux from tofu.ez.util import add_value_to_dict_entry from tofu.ez.util import import_values, export_values LOG = logging.getLogger(__name__) class Overlap360Group(QGroupBox): get_fdt_names_on_stitch_pressed = pyqtSignal() get_RR_params_on_start_pressed = pyqtSignal() def __init__(self): super().__init__() self.setTitle("360-AXIS-SEARCH: find overlap in half acq. mode CT sets. " "Works for all CT sets in the Input directory recursively.") self.setStyleSheet('QGroupBox {color: Orange;}') self.setToolTip("Upon 360 deg rotation in parallel beam tomography two data sets are " "effectively acquired" " if the axis of rotation is moved close to the edge of the detector.\n" "A half acquisition mode data set can be converted to an ordinary parallel" "beam data set by stitching matching pairs of projections from " "[0-180) and [180-360) deg intervals.\n" "In order to do that one must know position of the axis of rotation or, in other words," "the horizontal overlap between [0-180) and [180-360) projections.\n" "This tool helps to find index of the column where axis of rotation was " "by reconstructing CT slices for one detector row" "with different overlaps.\n" "Script suggests an automatic estimate which can be verified by " "visual inspection of the slices saved in the output directory.") self.input_dir_button = QPushButton("Select input directory") self.input_dir_button.clicked.connect(self.input_button_pressed) self.input_dir_entry = QLineEdit() self.input_dir_entry.editingFinished.connect(self.set_input_entry) self.temp_dir_button = QPushButton("Select temp directory") self.temp_dir_button.clicked.connect(self.temp_button_pressed) self.temp_dir_entry = QLineEdit() self.temp_dir_entry.editingFinished.connect(self.set_temp_entry) self.output_dir_button = QPushButton("Select output directory") self.output_dir_button.clicked.connect(self.output_button_pressed) self.output_dir_entry = QLineEdit() self.output_dir_entry.editingFinished.connect(self.set_output_entry) self.pixel_row_label = QLabel("Row to be reconstructed") self.pixel_row_label.setToolTip("TEST") self.pixel_row_entry = QLineEdit() self.pixel_row_entry.editingFinished.connect(self.set_pixel_row) self.patch_size_label = QLabel("\tPatch size") self.patch_size_label.setToolTip(EZVARS_aux['find360olap']['patch-size']['help']) self.patch_size_entry = QLineEdit() self.patch_size_entry.editingFinished.connect(self.set_patch_size) self.patch_size_entry.setToolTip(EZVARS_aux['find360olap']['patch-size']['help']) self.row1_dummy_label1 = QLabel("\t") self.row1_dummy_label2 = QLabel("\t") self.doRR = QCheckBox("Apply ring removal") #self.doRR.setEnabled(False) self.doRR.stateChanged.connect(self.set_RR_checkbox) self.doPR = QCheckBox("Apply phase retrieval") self.doPR.setToolTip("Warning! It can take a lot of time and space on the disk.") self.doPR.stateChanged.connect(self.set_PR_checkbox) self.range_label = QLabel("Overlap range for axis search:") self.min_label = QLabel("\tStart") self.min_entry = QLineEdit() self.min_entry.editingFinished.connect(self.set_lower_limit) self.max_label = QLabel("\tStop") self.max_entry = QLineEdit() self.max_entry.editingFinished.connect(self.set_upper_limit) self.step_label = QLabel("\t\tStep") self.step_entry = QLineEdit() self.step_entry.editingFinished.connect(self.set_increment) self.help_button = QPushButton("Help") self.help_button.clicked.connect(self.help_button_pressed) self.find_overlap_button = QPushButton("Generate slices") self.find_overlap_button.clicked.connect(self.overlap_button_pressed) self.find_overlap_button.setStyleSheet("color:royalblue;font-weight:bold") self.import_parameters_button = QPushButton("Import Parameters from File") self.import_parameters_button.clicked.connect(self.import_parameters_button_pressed) self.save_parameters_button = QPushButton("Save Parameters to File") self.save_parameters_button.clicked.connect(self.save_parameters_button_pressed) self.set_layout() def set_layout(self): layout = QGridLayout() #layout.addWidget(self.info_label, 0, 0, 1, 7) layout.addWidget(self.input_dir_button, 0, 0, 1, 1) layout.addWidget(self.input_dir_entry, 0, 1, 1, 6) layout.addWidget(self.temp_dir_button, 1, 0, 1, 1) layout.addWidget(self.temp_dir_entry, 1, 1, 1, 6) layout.addWidget(self.output_dir_button, 2, 0, 1, 1) layout.addWidget(self.output_dir_entry, 2, 1, 1, 6) # l = 3 layout.addWidget(self.range_label, l, 0) layout.addWidget(self.min_label, l, 1) layout.addWidget(self.min_entry, l, 2) layout.addWidget(self.max_label, l, 3) layout.addWidget(self.max_entry, l, 4) layout.addWidget(self.step_label, l, 5) layout.addWidget(self.step_entry, l, 6) # l = 4 layout.addWidget(self.pixel_row_label, l, 0) layout.addWidget(self.pixel_row_entry, l, 1) #layout.addWidget(self.row1_dummy_label1, l, 2) layout.addWidget(self.patch_size_label, l, 2) layout.addWidget(self.patch_size_entry, l, 3) layout.addWidget(self.row1_dummy_label2, l, 4) layout.addWidget(self.doPR, l, 5) layout.addWidget(self.doRR, l, 6) # l = 5 layout.addWidget(self.help_button, l, 0, 1, 1) layout.addWidget(self.import_parameters_button, l, 1, 1, 2) layout.addWidget(self.save_parameters_button, l, 3, 1, 2) layout.addWidget(self.find_overlap_button, l, 5, 1, 2) self.setLayout(layout) def load_values(self): self.input_dir_entry.setText(str(EZVARS_aux['find360olap']['input-dir']['value'])) self.temp_dir_entry.setText(str(EZVARS_aux['find360olap']['tmp-dir']['value'])) self.output_dir_entry.setText(str(EZVARS_aux['find360olap']['output-dir']['value'])) self.pixel_row_entry.setText(str(EZVARS_aux['find360olap']['row']['value'])) self.min_entry.setText(str(EZVARS_aux['find360olap']['start']['value'])) self.max_entry.setText(str(EZVARS_aux['find360olap']['stop']['value'])) self.step_entry.setText(str(EZVARS_aux['find360olap']['step']['value'])) self.patch_size_entry.setText(str(EZVARS_aux['find360olap']['patch-size']['value'])) self.doRR.setChecked(EZVARS_aux['find360olap']['doRR']['value']) self.doPR.setChecked(EZVARS_aux['find360olap']['doPR']['value']) def input_button_pressed(self): LOG.debug("Select input button pressed") dir_explore = QFileDialog(self) tmp = dir_explore.getExistingDirectory() self.input_dir_entry.setText(tmp) add_value_to_dict_entry(EZVARS_aux['find360olap']['input-dir'], tmp) def set_input_entry(self): add_value_to_dict_entry(EZVARS_aux['find360olap']['input-dir'], str(self.input_dir_entry.text())) def temp_button_pressed(self): dir_explore = QFileDialog(self) tmp = dir_explore.getExistingDirectory() self.temp_dir_entry.setText(tmp) add_value_to_dict_entry(EZVARS_aux['find360olap']['tmp-dir'], tmp) def set_temp_entry(self): add_value_to_dict_entry(EZVARS_aux['find360olap']['tmp-dir'], str(self.temp_dir_entry.text())) def output_button_pressed(self): LOG.debug("Select output button pressed") dir_explore = QFileDialog(self) tmp = dir_explore.getExistingDirectory() self.output_dir_entry.setText(tmp) add_value_to_dict_entry(EZVARS_aux['find360olap']['output-dir'], tmp) def set_output_entry(self): add_value_to_dict_entry(EZVARS_aux['find360olap']['output-dir'], str(self.output_dir_entry.text())) def set_pixel_row(self): add_value_to_dict_entry(EZVARS_aux['find360olap']['row'], int(self.pixel_row_entry.text())) def set_lower_limit(self): add_value_to_dict_entry(EZVARS_aux['find360olap']['start'], int(self.min_entry.text())) def set_upper_limit(self): add_value_to_dict_entry(EZVARS_aux['find360olap']['stop'], int(self.max_entry.text())) def set_increment(self): add_value_to_dict_entry(EZVARS_aux['find360olap']['step'], int(self.step_entry.text())) def set_patch_size(self): add_value_to_dict_entry(EZVARS_aux['find360olap']['patch-size'], int(self.patch_size_entry.text())) def enable_by_trigger_from_main_tab(self, enabled): self.input_dir_button.setEnabled(not enabled) self.input_dir_entry.setEnabled(not enabled) self.temp_dir_button.setEnabled(not enabled) self.temp_dir_entry.setEnabled(not enabled) self.output_dir_button.setEnabled(not enabled) self.output_dir_entry.setEnabled(not enabled) def set_RR_checkbox(self): add_value_to_dict_entry(EZVARS_aux['find360olap']['doRR'], self.doRR.isChecked()) def set_PR_checkbox(self): add_value_to_dict_entry(EZVARS_aux['find360olap']['doPR'], self.doPR.isChecked()) def overlap_button_pressed(self): LOG.debug("Find overlap button pressed") print("Find overlap button pressed") self.get_fdt_names_on_stitch_pressed.emit() self.get_RR_params_on_start_pressed.emit() if os.path.exists(EZVARS_aux['find360olap']['output-dir']['value']) and \ len(os.listdir(EZVARS_aux['find360olap']['output-dir']['value'])) > 0: qm = QMessageBox() rep = qm.question(self, 'WARNING', "Output directory exists and not empty. Is it SAFE to delete it?", qm.Yes | qm.No) if rep == qm.Yes: try: rmtree(EZVARS_aux['find360olap']['output-dir']['value']) except: QMessageBox.information(self, "Problem", "Cannot delete existing output dir") return else: return if os.path.exists(EZVARS_aux['find360olap']['tmp-dir']['value']) and \ len(os.listdir(EZVARS_aux['find360olap']['tmp-dir']['value'])) > 0: qm = QMessageBox() rep = qm.question(self, 'WARNING', "Temporary dir exist and not empty. Is it SAFE to delete it?", qm.Yes | qm.No) if rep == qm.Yes: try: rmtree(EZVARS_aux['find360olap']['tmp-dir']['value']) except: QMessageBox.information(self, "Problem", "Cannot delete existing tmp dir") return else: return if not os.path.exists(EZVARS_aux['find360olap']['tmp-dir']['value']): os.makedirs(EZVARS_aux['find360olap']['tmp-dir']['value']) if not os.path.exists(EZVARS_aux['find360olap']['output-dir']['value']): os.makedirs(EZVARS_aux['find360olap']['output-dir']['value']) find_overlap() #adding the next line so that on export in MULTI-STITCH the list is #imported even if default interpolate is selected when 360-SEARCH is used EZVARS_aux['stitch360']['olap_switch']['value'] == 2 params_file_path = os.path.join(EZVARS_aux['find360olap']['output-dir']['value'], 'ezvars_aux_from_overlap_search.yaml') if export_values(params_file_path, ['ezvars_aux']): QMessageBox.information(self, "Problem", "Cannot export to yaml file") else: QMessageBox.information(self, "Done", "List of processed directories and " "overlap estimates saved in \n" f"{params_file_path}") def help_button_pressed(self): LOG.debug("Help button pressed") h = "This script helps to find the index of detector column in with tomographic axis of rotation " h += "situated during half acq. mode scan (or overlap between pairs of images separate by 180 deg)" h += "Input can be a bunch of CT scans that has been collected in 'half-acquisition' mode" h += "For each CT set for selected detector row this script will reconstruct a bunch of slices" h += "each for different amount of overlap in the user defined range." h += "The objective is to review this series of images and find the best looking slice" h += "in the very much the same way as it is done when you search for axis of rotation in normal scans" h += "The overlap can be computed by adding the index of the right slice (times the search step)" h += "to the first overlap value in the search range." h += "Script attempts to estimate the overlap and saves the value for each data set in the" h += "360_overlap_params.yaml in the ezvars_aux section. They can be used as an input for" h += "batch stitching of the half acq mode data. User can edit the values directly in the" h += "automatically formatted output yaml file if needed." QMessageBox.information(self, "Help", h) def import_parameters_button_pressed(self): LOG.debug("Import params button clicked") dir_explore = QFileDialog(self) params_file_path = dir_explore.getOpenFileName(filter="*.yaml") try: import_values(params_file_path[0], ['ezvars_aux']) self.load_values() except FileNotFoundError: print("You need to select a valid input file") def save_parameters_button_pressed(self): LOG.debug("Save params button clicked") dir_explore = QFileDialog(self) params_file_path = dir_explore.getSaveFileName(filter="*.yaml") garbage, file_name = os.path.split(params_file_path[0]) file_extension = os.path.splitext(file_name) # If the user doesn't enter the .yaml extension then append it to filepath if file_extension[-1] == "": file_path = params_file_path[0] + ".yaml" else: file_path = params_file_path[0] try: export_values(file_path, ['ezvars_aux']) print("Parameters file saved at: " + str(file_path)) except FileNotFoundError: print("You need to select a directory and use a valid file name") ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/Stitch_tools_tab/ezmview_qt.py000066400000000000000000000243551521054151500247140ustar00rootroot00000000000000import os import logging from PyQt5.QtWidgets import ( QGroupBox, QPushButton, QLineEdit, QLabel, QCheckBox, QGridLayout, QFileDialog, QMessageBox, ) import yaml from tofu.ez.Helpers.mview_main import main_prep LOG = logging.getLogger(__name__) class EZMViewGroup(QGroupBox): def __init__(self): super().__init__() self.args = {} self.e_indir = "" self.e_nproj = 0 self.e_nflats = 0 self.e_ndarks = 0 self.e_nviews = 0 self.e_noflats2 = False #self.e_Andor = False self.setTitle("EZ-MVIEW") self.setToolTip("Splits a sequence of tif files over flats/darks/tomo directories") self.setStyleSheet("QGroupBox {color: green;}") self.input_dir_button = QPushButton() self.input_dir_button.setText("Directory with image sequence") self.input_dir_button.clicked.connect(self.select_directory) self.input_dir_entry = QLineEdit() self.input_dir_entry.editingFinished.connect(self.set_directory_entry) self.num_projections_label = QLabel() self.num_projections_label.setText("Number of projections") self.num_projections_entry = QLineEdit() self.num_projections_entry.editingFinished.connect(self.set_num_projections) self.num_flats_label = QLabel() self.num_flats_label.setText("Number of flats") self.num_flats_entry = QLineEdit() self.num_flats_entry.editingFinished.connect(self.set_num_flats) self.num_darks_label = QLabel() self.num_darks_label.setText("Number of darks") self.num_darks_entry = QLineEdit() self.num_darks_entry.editingFinished.connect(self.set_num_darks) self.num_vert_steps_label = QLabel() self.num_vert_steps_label.setText("Number of CT sets in the sequence") self.num_vert_steps_entry = QLineEdit() self.num_vert_steps_entry.editingFinished.connect(self.set_num_steps) self.no_trailing_flats_darks_checkbox = QCheckBox() self.no_trailing_flats_darks_checkbox.setText("No trailing flats/darks") self.no_trailing_flats_darks_checkbox.stateChanged.connect(self.set_trailing_checkbox) self.filenames_without_padding_checkbox = QCheckBox() self.filenames_without_padding_checkbox.setText("File names without zero padding") self.filenames_without_padding_checkbox.stateChanged.connect(self.set_file_names_checkbox) self.help_button = QPushButton() self.help_button.setText("Help") self.help_button.clicked.connect(self.help_button_pressed) self.undo_button = QPushButton() self.undo_button.setText("Undo") self.undo_button.clicked.connect(self.undo_button_pressed) self.convert_button = QPushButton() self.convert_button.setText("Convert") self.convert_button.clicked.connect(self.convert_button_pressed) self.convert_button.setStyleSheet("color:royalblue;font-weight:bold") self.save_parameters_button = QPushButton("Save Parameters to File") self.save_parameters_button.clicked.connect(self.save_parameters_button_pressed) self.import_parameters_button = QPushButton("Import Parameters from File") self.import_parameters_button.clicked.connect(self.import_parameters_button_pressed) self.set_layout() def set_layout(self): layout = QGridLayout() layout.addWidget(self.input_dir_button, 0, 0, 1, 1) layout.addWidget(self.input_dir_entry, 0, 1, 1, 2) layout.addWidget(self.num_projections_label, 3, 0) layout.addWidget(self.num_projections_entry, 3, 1, 1, 2) layout.addWidget(self.num_flats_label, 4, 0) layout.addWidget(self.num_flats_entry, 4, 1, 1, 2) layout.addWidget(self.num_darks_label, 5, 0) layout.addWidget(self.num_darks_entry, 5, 1, 1, 2) layout.addWidget(self.num_vert_steps_label, 2, 0) layout.addWidget(self.num_vert_steps_entry, 2, 1, 1, 2) layout.addWidget(self.no_trailing_flats_darks_checkbox, 6, 0) layout.addWidget(self.filenames_without_padding_checkbox, 6, 1, 1, 2) layout.addWidget(self.help_button, 7, 0, 1, 1) layout.addWidget(self.undo_button, 7, 1, 1, 1) layout.addWidget(self.convert_button, 7, 2, 1, 1) # layout.addWidget(self.import_parameters_button, 7, 3, 1, 1) # layout.addWidget(self.save_parameters_button, 7, 4, 1, 1) self.setLayout(layout) def init_values(self): self.parameters = {'parameters_type': 'ez_mview'} self.input_dir_entry.setText(os.getcwd()) self.parameters['ezmview_input_dir'] = os.getcwd() self.num_projections_entry.setText("3000") self.parameters['ezmview_num_projections'] = 3000 self.num_flats_entry.setText("10") self.parameters['ezmview_num_flats'] = 10 self.num_darks_entry.setText("10") self.parameters['ezmview_num_darks'] = 10 self.num_vert_steps_entry.setText("1") self.parameters['ezmview_num_sets'] = 1 self.no_trailing_flats_darks_checkbox.setChecked(False) self.parameters['ezmview_flats2'] = False self.filenames_without_padding_checkbox.setChecked(False) self.parameters['ezmview_no_zero_padding'] = False def update_parameters(self, new_parameters): LOG.debug("Update parameters") if new_parameters['parameters_type'] != 'ez_mview': print("Error: Invalid parameter file type: " + str(new_parameters['parameters_type'])) return -1 # Update parameters dictionary (which is passed to auto_stitch_funcs) self.parameters = new_parameters # Update displayed parameters for GUI self.input_dir_entry.setText(str(self.parameters['ezmview_input_dir'])) self.num_projections_entry.setText(str(self.parameters['ezmview_num_projections'])) self.num_flats_entry.setText(str(self.parameters['ezmview_num_flats'])) self.num_darks_entry.setText(str(self.parameters['ezmview_num_darks'])) self.num_vert_steps_entry.setText(str(self.parameters['ezmview_num_sets'])) self.no_trailing_flats_darks_checkbox.setChecked(bool(self.parameters['ezmview_flats2'])) self.filenames_without_padding_checkbox.setChecked(bool(self.parameters['ezmview_no_zero_padding'])) def select_directory(self): LOG.debug("Select directory button pressed") dir_explore = QFileDialog(self) directory = dir_explore.getExistingDirectory() self.input_dir_entry.setText(directory) self.parameters['ezmview_input_dir'] = directory def set_directory_entry(self): LOG.debug("Directory entry: " + str(self.input_dir_entry.text())) self.parameters['ezmview_input_dir'] = str(self.input_dir_entry.text()) def set_num_projections(self): LOG.debug("Num projections: " + str(self.num_projections_entry.text())) self.parameters['ezmview_num_projections'] = int(self.num_projections_entry.text()) def set_num_flats(self): LOG.debug("Num flats: " + str(self.num_flats_entry.text())) self.parameters['ezmview_num_flats'] = int(self.num_flats_entry.text()) def set_num_darks(self): LOG.debug("Num darks: " + str(self.num_darks_entry.text())) self.parameters['ezmview_num_darks'] = int(self.num_darks_entry.text()) def set_num_steps(self): LOG.debug("Num steps: " + str(self.num_vert_steps_entry.text())) self.parameters['ezmview_num_sets'] = int(self.num_vert_steps_entry.text()) def set_trailing_checkbox(self): LOG.debug("No trailing: " + str(self.no_trailing_flats_darks_checkbox.isChecked())) self.parameters['ezmview_flats2'] = bool(self.no_trailing_flats_darks_checkbox.isChecked()) def set_file_names_checkbox(self): LOG.debug("File names without zero padding: " + str(self.filenames_without_padding_checkbox.isChecked())) self.parameters['ezmview_no_zero_padding'] = \ bool(self.filenames_without_padding_checkbox.isChecked()) def convert_button_pressed(self): LOG.debug("Convert button pressed") LOG.debug(self.parameters) main_prep(self.parameters) def undo_button_pressed(self): LOG.debug("Undo button pressed") cmd = "find {} -type f -name \"*.tif\" -exec mv -t {} {{}} +" cmd = cmd.format(str(self.parameters['ezmview_input_dir']), str(self.parameters['ezmview_input_dir'])) os.system(cmd) def help_button_pressed(self): LOG.debug("Help button pressed") h = "Distributes a sequence of CT frames in flats/darks/tomo/flats2 directories\n" h += "assuming that acqusition sequence is flats->darks->tomo->flats2\n" h += 'Use only for sequences with flat fields acquired at 0 and 180!\n' h += "Conversions happens in-place but can be undone" QMessageBox.information(self, "Help", h) def import_parameters_button_pressed(self): LOG.debug("Import params button clicked") dir_explore = QFileDialog(self) params_file_path = dir_explore.getOpenFileName(filter="*.yaml") try: file_in = open(params_file_path[0], 'r') new_parameters = yaml.load(file_in, Loader=yaml.FullLoader) if self.update_parameters(new_parameters) == 0: print("Parameters file loaded from: " + str(params_file_path[0])) except FileNotFoundError: print("You need to select a valid input file") def save_parameters_button_pressed(self): LOG.debug("Save params button clicked") dir_explore = QFileDialog(self) params_file_path = dir_explore.getSaveFileName(filter="*.yaml") garbage, file_name = os.path.split(params_file_path[0]) file_extension = os.path.splitext(file_name) # If the user doesn't enter the .yaml extension then append it to filepath if file_extension[-1] == "": file_path = params_file_path[0] + ".yaml" else: file_path = params_file_path[0] try: file_out = open(file_path, 'w') yaml.dump(self.parameters, file_out) print("Parameters file saved at: " + str(file_path)) except FileNotFoundError: print("You need to select a directory and use a valid file name") ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/Stitch_tools_tab/ezstitch_qt.py000066400000000000000000000721461521054151500250640ustar00rootroot00000000000000import os from PyQt5.QtWidgets import ( QGroupBox, QPushButton, QCheckBox, QLabel, QLineEdit, QGridLayout, QVBoxLayout, QHBoxLayout, QRadioButton, QFileDialog, QMessageBox, ) from shutil import rmtree import logging from tofu.ez.GUI.verify_delete import verify_safe2delete from tofu.ez.params import EZVARS_aux, EZVARS from tofu.ez.Helpers.stitch_funcs import ( main_sti_mp, main_360sti_ufol_depth1, find_vert_olap_2_vsteps, validate_slice_range, get_cube_dims, ) from tofu.ez.GUI.message_dialog import warning_message from tofu.ez.util import add_value_to_dict_entry, get_int_validator, get_double_validator, get_fd_names from tofu.ez.util import import_values, export_values, read_image, get_dims import glob LOG = logging.getLogger(__name__) class EZStitchGroup(QGroupBox): def __init__(self): super().__init__() self.setTitle("EZ-STITCH") self.setToolTip("Reslicing and stitching tool") self.setStyleSheet('QGroupBox {color: purple;}') self.invoke_after_reco_checkbox = QCheckBox(f"Automatically produce stitched orthogonal sections" f" when reconstruction is over") self.invoke_after_reco_checkbox.stateChanged.connect(self.conf_auto_stitch) #self.invoke_after_reco_checkbox.setToolTip("Only works for batch reconstructions with ") self.input_dir_button = QPushButton() self.input_dir_button.setText("Select input directory") self.input_dir_button.setToolTip("Normally contains a bunch of directories at the first depth level\n" \ "each of which has a subdirectory with the same name (second depth level). \n" "Images with the same index in these second-level subdirectories will be stitched vertically.") self.input_dir_button.clicked.connect(self.input_button_pressed) self.input_dir_entry = QLineEdit() self.input_dir_entry.editingFinished.connect(self.set_input_entry) self.tmp_dir_button = QPushButton() self.tmp_dir_button.setText("Select temporary directory") self.tmp_dir_button.clicked.connect(self.temp_button_pressed) self.tmp_dir_entry = QLineEdit() self.tmp_dir_entry.editingFinished.connect(self.set_temp_entry) self.output_dir_button = QPushButton() self.output_dir_button.setText("Directory to save stitched images") self.output_dir_button.clicked.connect(self.output_button_pressed) self.output_dir_entry = QLineEdit() self.output_dir_entry.editingFinished.connect(self.set_output_entry) self.types_of_images_label = QLabel() tmpstr = "Name of subdirectories which contain the same type of images in every directory in the input" self.types_of_images_label.setToolTip(tmpstr) self.types_of_images_label.setText("Name of subdirectory with the same type of images to stitch") self.types_of_images_label.setToolTip("e.g. sli, tomo, proj-pr, etc.") self.types_of_images_entry = QLineEdit() self.types_of_images_entry.setToolTip(tmpstr) self.types_of_images_entry.editingFinished.connect(self.set_type_images) self.orthogonal_checkbox = QCheckBox() self.orthogonal_checkbox.setText("Stitch orthogonal sections") self.orthogonal_checkbox.setToolTip("Will reslice images in every subdirectory and then stitch") self.orthogonal_checkbox.stateChanged.connect(self.set_ort_checkbox) self.reslice_all = QCheckBox() self.reslice_all.setText("Reslice whole cube") self.reslice_all.stateChanged.connect(self.set_reslice_all) self.start_stop_step_label = QLabel() self.start_stop_step_label.setText("Which images to be stitched: start,stop,step:") self.start_stop_step_entry = QLineEdit() self.start_stop_step_entry.editingFinished.connect(self.get_start_stop_step) help_flip = f"There can be two options:\n" \ f"(1) first slice from z00 directory overlaps with " \ f"one of slices from the end of z01 directory \n" \ f"or\n" \ f"(2) last slice from z00 directory overlaps with " \ f"one of slices from the beginning of z01 directory. \n" \ f"In the former case images must be flipped upside " \ f"down before stitching" self.flipud_checkbox = QCheckBox() self.flipud_checkbox.setToolTip(help_flip) self.flipud_checkbox.setText("Flip images upside down before stitching") self.flipud_checkbox.stateChanged.connect(self.set_flipud) self.interpolate_regions_rButton = QRadioButton() self.interpolate_regions_rButton.setText("Interpolate overlapping regions and equalize intensity") self.interpolate_regions_rButton.clicked.connect(self.set_rButton) self.num_overlaps_label = QLabel() self.num_overlaps_label.setText("Number of overlapping rows") self.num_overlaps_entry = QLineEdit() self.num_overlaps_entry.editingFinished.connect(self.set_overlap) self.est_olap_checkbox = QCheckBox() self.est_olap_checkbox.setText("Estimate vertical overlap automatically. " "Will take a slice from z00 directory " "and compare it with selected slices in z01 directory") self.est_olap_checkbox.setToolTip(help_flip) self.est_olap_checkbox.stateChanged.connect(self.set_est_olap) self.slice_z00_label = QLabel() self.slice_z00_label.setText("Index of slice in z00 directory") self.slice_z00_entry = QLineEdit() self.slice_z00_entry.editingFinished.connect(self.get_z00_ind) self.slice_z00_entry.setToolTip(help_flip) self.est_olap_button = QPushButton() self.est_olap_button.setText("Show estimate") self.est_olap_button.setStyleSheet("font-weight:bold") self.est_olap_button.clicked.connect(self.est_olap_button_pressed) self.slice_range_label = QLabel() self.slice_range_label.setText("Search range in z01 directory") self.ind_start_z01_label = QLabel() self.ind_start_z01_label.setText(" First slice") #self.ind_start_z01_label.setAlignment(Qt.AlignRight) self.ind_start_z01_entry = QLineEdit() self.ind_start_z01_entry.editingFinished.connect(self.get_z01_ind_start) self.ind_start_z01_entry.setToolTip(help_flip) self.ind_stop_z01_label = QLabel() self.ind_stop_z01_label.setText(" Last slice") self.ind_stop_z01_entry = QLineEdit() self.ind_stop_z01_entry.editingFinished.connect(self.get_z01_ind_stop) self.ind_stop_z01_entry.setToolTip(help_flip) self.clip_histogram_checkbox = QCheckBox() self.clip_histogram_checkbox.setText("Clip histogram and convert slices to 8-bit before saving") self.clip_histogram_checkbox.stateChanged.connect(self.set_histogram_checkbox) self.min_value_label = QLabel() self.min_value_label.setText("Min value in 32-bit histogram") self.min_value_entry = QLineEdit() self.min_value_entry.editingFinished.connect(self.set_min_value) self.max_value_label = QLabel() self.max_value_label.setText("Max value in 32-bit histogram") self.max_value_entry = QLineEdit() self.max_value_entry.editingFinished.connect(self.set_max_value) self.concatenate_rButton = QRadioButton() self.concatenate_rButton.setText("Concatenate only") self.concatenate_rButton.clicked.connect(self.set_rButton) self.first_row_label = QLabel() self.first_row_label.setText("First row") self.first_row_entry = QLineEdit() self.first_row_entry.editingFinished.connect(self.set_first_row) self.last_row_label = QLabel() self.last_row_label.setText("Last row") self.last_row_entry = QLineEdit() self.last_row_entry.editingFinished.connect(self.set_last_row) self.half_acquisition_rButton = QRadioButton() self.half_acquisition_rButton.setText("Horizontal stitching of half-acq. mode data") self.half_acquisition_rButton.setToolTip("Applies to tif images in all depth-one subdirectories in the Input \n" "unlike 360-MULTI-STITCH which search images at the depth two ") #self.half_acquisition_rButtonYfor a half-acqusition mode data (even number of tif files in the Input directory)") self.half_acquisition_rButton.clicked.connect(self.set_rButton) self.column_of_axis_label = QLabel() self.column_of_axis_label.setText("In which column the axis of rotation is") self.column_of_axis_entry = QLineEdit() self.column_of_axis_entry.editingFinished.connect(self.set_axis_column) self.help_button = QPushButton() self.help_button.setText("Help") self.help_button.clicked.connect(self.help_button_pressed) self.delete_button = QPushButton() self.delete_button.setText("Delete output dir") self.delete_button.clicked.connect(self.delete_button_pressed) self.stitch_button = QPushButton() self.stitch_button.setText("Stitch") self.stitch_button.clicked.connect(self.stitch_button_pressed) self.stitch_button.setStyleSheet("color:royalblue;font-weight:bold") self.import_parameters_button = QPushButton("Import Parameters from File") self.import_parameters_button.clicked.connect(self.import_parameters_button_pressed) self.save_parameters_button = QPushButton("Save Parameters to File") self.save_parameters_button.clicked.connect(self.save_parameters_button_pressed) self.err = "" self.set_layout() def set_layout(self): layout = QGridLayout() vbox1 = QVBoxLayout() vbox1.addWidget(self.invoke_after_reco_checkbox) vbox1.addWidget(self.input_dir_button) vbox1.addWidget(self.input_dir_entry) vbox1.addWidget(self.tmp_dir_button) vbox1.addWidget(self.tmp_dir_entry) vbox1.addWidget(self.output_dir_button) vbox1.addWidget(self.output_dir_entry) layout.addItem(vbox1, 0, 0) grid0 = QGridLayout() grid0.addWidget(self.types_of_images_label, 0, 0) grid0.addWidget(self.types_of_images_entry, 0, 1) grid0.addWidget(self.orthogonal_checkbox, 1, 0) grid0.addWidget(self.reslice_all, 2, 0) grid0.addWidget(self.start_stop_step_label, 1, 1) grid0.addWidget(self.start_stop_step_entry, 2, 1) grid0.addWidget(self.flipud_checkbox, 3, 0) layout.addItem(grid0, 1, 0) grid1 = QGridLayout() grid1.addWidget(self.interpolate_regions_rButton, 0, 0, 1, 5) grid1.addWidget(self.num_overlaps_label, 1, 0) grid1.addWidget(self.num_overlaps_entry, 1, 1) grid1.addWidget(self.est_olap_checkbox, 2, 0, 1, 5) grid1.addWidget(self.slice_z00_label, 3, 0) grid1.addWidget(self.slice_z00_entry, 3, 1) grid1.addWidget(self.est_olap_button, 3, 3, 1, 2) grid1.addWidget(self.slice_range_label, 4, 0) grid1.addWidget(self.ind_start_z01_label, 4, 1) grid1.addWidget(self.ind_start_z01_entry, 4, 2) grid1.addWidget(self.ind_stop_z01_label, 4, 3) grid1.addWidget(self.ind_stop_z01_entry, 4, 4) layout.addItem(grid1, 2, 0) grid1_b = QGridLayout() grid1_b.addWidget(self.clip_histogram_checkbox, 0, 0) grid1_b.addWidget(self.min_value_label, 1, 0) grid1_b.addWidget(self.min_value_entry, 1, 1) grid1_b.addWidget(self.max_value_label, 2, 0) grid1_b.addWidget(self.max_value_entry, 2, 1) layout.addItem(grid1_b, 3, 0) grid2 = QGridLayout() grid2.addWidget(self.concatenate_rButton, 0, 0, 1, 2) grid2.addWidget(self.first_row_label, 1, 0) grid2.addWidget(self.first_row_entry, 1, 1) grid2.addWidget(self.last_row_label, 1, 2) grid2.addWidget(self.last_row_entry, 1, 3) layout.addItem(grid2, 4, 0) grid3 = QGridLayout() grid3.addWidget(self.half_acquisition_rButton, 0, 0, 1, 2) grid3.addWidget(self.column_of_axis_label, 1, 0) grid3.addWidget(self.column_of_axis_entry, 1, 1) layout.addItem(grid3, 5, 0) grid4 = QGridLayout() grid4.addWidget(self.help_button, 0, 0) grid4.addWidget(self.delete_button, 0, 1) grid4.addWidget(self.stitch_button, 0, 2) grid4.addWidget(self.import_parameters_button, 1, 0, 1, 2) grid4.addWidget(self.save_parameters_button, 1, 2) layout.addItem(grid4, 6, 0) self.setLayout(layout) def load_values(self): self.invoke_after_reco_checkbox.blockSignals(True) self.invoke_after_reco_checkbox.setChecked(EZVARS_aux['vert-sti']['dovertsti']['value']) self.invoke_after_reco_checkbox.blockSignals(False) self.input_dir_entry.setText(str(EZVARS_aux['vert-sti']['input-dir']['value'])) self.tmp_dir_entry.setText(str(EZVARS_aux['vert-sti']['tmp-dir']['value'])) self.output_dir_entry.setText(str(EZVARS_aux['vert-sti']['output-dir']['value'])) self.types_of_images_entry.setText(str(EZVARS_aux['vert-sti']['subdir-name']['value'])) self.orthogonal_checkbox.setChecked(EZVARS_aux['vert-sti']['ort']['value']) self.start_stop_step_entry.setText(f"{EZVARS_aux['vert-sti']['start']['value']}," f"{EZVARS_aux['vert-sti']['stop']['value']}," f"{EZVARS_aux['vert-sti']['step']['value']}") self.reslice_all.setChecked(EZVARS_aux['vert-sti']['reslice_all']['value']) self.set_reslice_all() self.flipud_checkbox.setChecked(EZVARS_aux['vert-sti']['flipud']['value']) if EZVARS_aux['vert-sti']['task_type']['value'] == 0: self.interpolate_regions_rButton.setChecked(True) elif EZVARS_aux['vert-sti']['task_type']['value'] == 1: self.concatenate_rButton.setChecked(True) elif EZVARS_aux['vert-sti']['task_type']['value'] == 2: self.half_acquisition_rButton.setChecked(True) self.num_overlaps_entry.setText(str(EZVARS_aux['vert-sti']['num_olap_rows']['value'])) self.est_olap_checkbox.setChecked(EZVARS_aux['vert-sti']['estimate_num_olap_rows']['value']) self.slice_z00_entry.setText(str(EZVARS_aux['vert-sti']['ind_z00']['value'])) self.ind_start_z01_entry.setText(str(EZVARS_aux['vert-sti']['ind_z01_start']['value'])) self.ind_stop_z01_entry.setText(str(EZVARS_aux['vert-sti']['ind_z01_stop']['value'])) self.clip_histogram_checkbox.setChecked(EZVARS_aux['vert-sti']['clip_hist']['value']) self.min_value_entry.setText(str(EZVARS_aux['vert-sti']['min_int_val']['value'])) self.max_value_entry.setText(str(EZVARS_aux['vert-sti']['max_int_val']['value'])) self.first_row_entry.setText(str(EZVARS_aux['vert-sti']['conc_row_top']['value'])) self.last_row_entry.setText(str(EZVARS_aux['vert-sti']['conc_row_bottom']['value'])) self.column_of_axis_entry.setText(str(EZVARS_aux['vert-sti']['cor']['value'])) self.conf_auto_stitch() #TODO: change output/tmp on signal from the main tab if auto sttiched is requested # and respective entries are modified in the main tab def conf_auto_stitch(self): if self.invoke_after_reco_checkbox.isChecked(): add_value_to_dict_entry(EZVARS_aux['vert-sti']['dovertsti'], True) self.input_dir_entry.setEnabled(False) if self.output_dir_entry.text() in ( EZVARS['inout']['output-dir']['value'], EZVARS_aux['vert-sti']['output-dir']['ezdefault']): self.output_dir_entry.setText(f"{EZVARS['inout']['output-dir']['value']}-vert-stitched") self.set_output_entry() self.tmp_dir_entry.setText(f"{EZVARS['inout']['tmp-dir']['value']}") self.set_temp_entry() self.types_of_images_entry.setText('sli') self.set_type_images() self.types_of_images_entry.setEnabled(False) self.half_acquisition_rButton.setEnabled(False) self.column_of_axis_entry.setEnabled(False) else: add_value_to_dict_entry(EZVARS_aux['vert-sti']['dovertsti'], False) self.input_dir_entry.setEnabled(True) self.types_of_images_entry.setEnabled(True) self.half_acquisition_rButton.setEnabled(True) self.column_of_axis_entry.setEnabled(True) def set_rButton(self): if self.interpolate_regions_rButton.isChecked(): LOG.debug("Interpolate regions") add_value_to_dict_entry(EZVARS_aux['vert-sti']['task_type'], 0) elif self.concatenate_rButton.isChecked(): LOG.debug("Concatenate only") add_value_to_dict_entry(EZVARS_aux['vert-sti']['task_type'], 1) elif self.half_acquisition_rButton.isChecked(): LOG.debug("Half-acquisition mode") add_value_to_dict_entry(EZVARS_aux['vert-sti']['task_type'], 2) def input_button_pressed(self): LOG.debug("Input button pressed") dir_explore = QFileDialog(self) add_value_to_dict_entry(EZVARS_aux['vert-sti']['input-dir'], dir_explore.getExistingDirectory()) self.input_dir_entry.setText(EZVARS_aux['vert-sti']['input-dir']['value']) def set_input_entry(self): LOG.debug("Input: " + str(self.input_dir_entry.text())) add_value_to_dict_entry(EZVARS_aux['vert-sti']['input-dir'], str(self.input_dir_entry.text())) def temp_button_pressed(self): LOG.debug("Temp button pressed") dir_explore = QFileDialog(self) add_value_to_dict_entry(EZVARS_aux['vert-sti']['tmp-dir'], dir_explore.getExistingDirectory()) self.tmp_dir_entry.setText(EZVARS_aux['vert-sti']['tmp-dir']['value']) def set_temp_entry(self): LOG.debug("Temp: " + str(self.tmp_dir_entry.text())) EZVARS_aux['vert-sti']['tmp-dir']['value'] = str(self.tmp_dir_entry.text()) add_value_to_dict_entry(EZVARS_aux['vert-sti']['tmp-dir'], str(self.tmp_dir_entry.text())) def output_button_pressed(self): LOG.debug("Output button pressed") dir_explore = QFileDialog(self) add_value_to_dict_entry(EZVARS_aux['vert-sti']['output-dir'], dir_explore.getExistingDirectory()) self.output_dir_entry.setText(EZVARS_aux['vert-sti']['output-dir']['value']) def set_output_entry(self): LOG.debug("Output: " + str(self.output_dir_entry.text())) #EZVARS_aux['vert-sti']['output-dir']['value'] = str(self.output_dir_entry.text()) add_value_to_dict_entry(EZVARS_aux['vert-sti']['output-dir'], str(self.output_dir_entry.text())) def set_type_images(self): LOG.debug("Type of images: " + str(self.types_of_images_entry.text())) add_value_to_dict_entry(EZVARS_aux['vert-sti']['subdir-name'], str(self.types_of_images_entry.text())) def set_ort_checkbox(self): LOG.debug("Stitch orthogonal: " + str(self.orthogonal_checkbox.isChecked())) add_value_to_dict_entry(EZVARS_aux['vert-sti']['ort'], bool(self.orthogonal_checkbox.isChecked())) def get_start_stop_step(self): LOG.debug("Images to be stitched: " + str(self.start_stop_step_entry.text())) sli_range = str(self.start_stop_step_entry.text()).split(",") add_value_to_dict_entry(EZVARS_aux['vert-sti']['start'], sli_range[0]) add_value_to_dict_entry(EZVARS_aux['vert-sti']['stop'], sli_range[1]) add_value_to_dict_entry(EZVARS_aux['vert-sti']['step'], sli_range[2]) def set_reslice_all(self): add_value_to_dict_entry(EZVARS_aux['vert-sti']['reslice_all'], bool(self.reslice_all.isChecked())) if self.reslice_all.isChecked(): self.start_stop_step_entry.setEnabled(False) else: self.start_stop_step_entry.setEnabled(True) def set_flipud(self): LOG.debug("Sample moved down: " + str(self.flipud_checkbox.isChecked())) add_value_to_dict_entry(EZVARS_aux['vert-sti']['flipud'], bool(self.flipud_checkbox.isChecked())) def set_est_olap(self): estimate_overlap = bool(self.est_olap_checkbox.isChecked()) LOG.debug("Estimate vertical overlap automatically: " + str(estimate_overlap)) add_value_to_dict_entry(EZVARS_aux['vert-sti']['estimate_num_olap_rows'], estimate_overlap) self.num_overlaps_entry.setDisabled(estimate_overlap) def set_overlap(self): LOG.debug("Num overlapping rows: " + str(self.num_overlaps_entry.text())) add_value_to_dict_entry(EZVARS_aux['vert-sti']['num_olap_rows'], int(self.num_overlaps_entry.text())) def set_histogram_checkbox(self): LOG.debug("Clip histogram: " + str(self.clip_histogram_checkbox.isChecked())) add_value_to_dict_entry(EZVARS_aux['vert-sti']['clip_hist'], bool(self.clip_histogram_checkbox.isChecked())) def set_min_value(self): LOG.debug("Min value: " + str(self.min_value_entry.text())) add_value_to_dict_entry(EZVARS_aux['vert-sti']['min_int_val'], float(self.min_value_entry.text())) def set_max_value(self): LOG.debug("Max value: " + str(self.max_value_entry.text())) add_value_to_dict_entry(EZVARS_aux['vert-sti']['max_int_val'], float(self.max_value_entry.text())) def set_first_row(self): LOG.debug("First row: " + str(self.first_row_entry.text())) add_value_to_dict_entry(EZVARS_aux['vert-sti']['conc_row_top'], int(self.first_row_entry.text())) def set_last_row(self): LOG.debug("Last row: " + str(self.last_row_entry.text())) add_value_to_dict_entry(EZVARS_aux['vert-sti']['conc_row_bottom'], int(self.last_row_entry.text())) def set_axis_column(self): LOG.debug("Column of axis: " + str(self.column_of_axis_entry.text())) add_value_to_dict_entry(EZVARS_aux['vert-sti']['cor'], int(self.column_of_axis_entry.text())) def get_z00_ind(self): add_value_to_dict_entry(EZVARS_aux['vert-sti']['ind_z00'], int(self.slice_z00_entry.text())) def get_z01_ind_start(self): add_value_to_dict_entry(EZVARS_aux['vert-sti']['ind_z01_start'], int(self.ind_start_z01_entry.text())) def get_z01_ind_stop(self): add_value_to_dict_entry(EZVARS_aux['vert-sti']['ind_z01_stop'], int(self.ind_stop_z01_entry.text())) def validate_row_entries(self): self.validate_input_structure_1set() nslices, N, M = get_cube_dims() if EZVARS_aux['vert-sti']['ind_z01_stop']['value'] > nslices: QMessageBox.warning(self, "Error", f'Stop index of the search range ' f'exceeds the total number of slices (max {nslices})') return 1 elif EZVARS_aux['vert-sti']['ind_z01_start']['value'] > nslices: QMessageBox.warning(self, "Error", f'Start index of the search range ' f'exceeds the total number of slices (max {nslices})') return 1 elif EZVARS_aux['vert-sti']['ind_z00']['value'] > nslices: QMessageBox.warning(self, "Error", f'Index of the reference slice ' f'exceeds the total number of slices (max {nslices})') return 1 return 0 def validate_input_structure_1set(self): Vsteps = sorted(os.listdir(EZVARS_aux['vert-sti']['input-dir']['value'])) for i in range(len(Vsteps)): if not os.path.exists(os.path.join(EZVARS_aux['vert-sti']['input-dir']['value'], Vsteps[i], EZVARS_aux['vert-sti']['subdir-name']['value'])): h = "Unacceptable input directory structure.\n" h += "Check that your Input only contains directories\n" h += "each of which has a subdirectory with CT slices, e.g.\n" tmp = EZVARS_aux['vert-sti']['subdir-name']['value'] h += f"Input/z00/{tmp}, Input/z01/{tmp} .. Input/z0N/{tmp}" QMessageBox.warning(self, "Error", h) return 1 return 0 def est_olap_button_pressed(self): if self.validate_input_structure_1set() or self.validate_row_entries(): return olap = find_vert_olap_2_vsteps(EZVARS_aux['vert-sti']['input-dir']['value'], EZVARS_aux['vert-sti']['ind_z00']['value'], EZVARS_aux['vert-sti']['ind_z01_start']['value'], EZVARS_aux['vert-sti']['ind_z01_stop']['value']) tmp = f"Number of overlapping lines is {olap}." QMessageBox.information(self, "Overlap estimate", tmp) def help_button_pressed(self): LOG.debug("Help button pressed") h = "Stitches images vertically\n" h += "Directory structure is, f.i., Input/000, Input/001,...Input/00N\n" h += "Each 000, 001, ... 00N directory must have identical subdirectory \"Type\"\n" h += "Selected range of images from \"Type\" directory will be stitched vertically\n" h += "across all subdirectories in the Input directory" h += "to be added as options:\n" h += "(1) orthogonal reslicing, (2) interpolation, (3) horizontal stitching" QMessageBox.information(self, "Help", h) def delete_button_pressed(self): if os.path.exists(EZVARS_aux['vert-sti']['output-dir']['value']): qm = QMessageBox() rep = qm.question(self, '', f"{EZVARS_aux['vert-sti']['output-dir']['value']} \n" "will be removed. Continue?", qm.Yes | qm.No) if rep == qm.Yes: try: rmtree(EZVARS_aux['vert-sti']['output-dir']['value']) except: warning_message('Error while deleting directory') return else: return def stitch_button_pressed(self): LOG.debug("Stitch button pressed") try: verify_safe2delete(self, EZVARS_aux['vert-sti']['tmp-dir']['value'], "Temporary") except FileExistsError: return try: verify_safe2delete(self, EZVARS_aux['vert-sti']['output-dir']['value'], "Output") except FileExistsError: return # if self.validate_input_structure_1set() or self.validate_row_entries(): # return print("======= Begin Stitching =======") # Interpolate overlapping regions and equalize intensity if EZVARS_aux['vert-sti']['task_type']['value'] == 0 or \ EZVARS_aux['vert-sti']['task_type']['value'] == 1: try: validate_slice_range() except ValueError as e: LOG.error(e) warning_message("Problem with validating slice range: cannot read dimensions of Input slices.") return main_sti_mp() else: # main_360_mp_depth1(self.parameters['ezstitch_input_dir'], # EZVARS_aux['vert-sti']['output-dir']['value'], # self.parameters['ezstitch_axis_of_rotation'], 0) reduction_mode = EZVARS['flat-correction']['reduction-mode']['value'] fd_names = get_fd_names() main_360sti_ufol_depth1(EZVARS_aux['vert-sti']['input-dir']['value'], EZVARS_aux['vert-sti']['output-dir']['value'], EZVARS_aux['vert-sti']['cor']['value'], cro=0, reduction_mode=reduction_mode, fd_names=fd_names, ) if os.path.isdir(EZVARS_aux['vert-sti']['output-dir']['value']): params_file_path = os.path.join(EZVARS_aux['vert-sti']['output-dir']['value'], 'ezmview_params.yaml') export_values(params_file_path, ['ezvars_aux']) print("==== Waiting for Next Task ====") def import_parameters_button_pressed(self): LOG.debug("Import params button clicked") dir_explore = QFileDialog(self) params_file_path = dir_explore.getOpenFileName(filter="*.yaml") import_values(params_file_path[0], ['ezvars_aux']) self.load_values() def save_parameters_button_pressed(self): LOG.debug("Save params button clicked") dir_explore = QFileDialog(self) params_file_path = dir_explore.getSaveFileName(filter="*.yaml") garbage, file_name = os.path.split(params_file_path[0]) file_extension = os.path.splitext(file_name) # If the user doesn't enter the .yaml extension then append it to filepath if file_extension[-1] == "": file_path = params_file_path[0] + ".yaml" else: file_path = params_file_path[0] try: export_values(file_path, ['ezvars_aux']) print("Parameters file saved at: " + str(file_path)) except FileNotFoundError: print("You need to select a directory and use a valid file name") ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/__init__.py000066400000000000000000000000011521054151500207330ustar00rootroot00000000000000 ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/ezufo_launcher.py000066400000000000000000000321411521054151500222170ustar00rootroot00000000000000import logging import os import sys try: from PyQt5 import QtWidgets as qtw except ModuleNotFoundError: raise ModuleNotFoundError("Cannot import modules for ez, please install tofu with [ez] extras.") from tofu.ez.GUI.Main.centre_of_rotation import CentreOfRotationGroup from tofu.ez.GUI.Main.filters import FiltersGroup from tofu.ez.GUI.Advanced.ffc import FFCGroup from tofu.ez.GUI.Advanced.find_large_spots import FindSpotsGroup from tofu.ez.GUI.Main.phase_retrieval import PhaseRetrievalGroup from tofu.ez.GUI.Main.region_and_histogram import ROIandHistGroup from tofu.ez.GUI.Main.config import ConfigGroup from tofu.ez.main import clean_tmp_dirs from tofu.ez.GUI.image_viewer import ImageViewerGroup from tofu.ez.params import EZVARS, EZVARS_aux from tofu.config import SECTIONS from tofu.ez.util import load_values_from_ezdefault, get_fdt_names from tofu.ez.GUI.Advanced.advanced import AdvancedGroup from tofu.ez.GUI.Advanced.optimization import OptimizationGroup from tofu.ez.GUI.Advanced.nlmdn import NLMDNGroup from tofu.ez.GUI.Stitch_tools_tab.ez_360_multi_stitch_qt import MultiStitch360Group from tofu.ez.GUI.Stitch_tools_tab.ezstitch_qt import EZStitchGroup from tofu.ez.GUI.Stitch_tools_tab.ezmview_qt import EZMViewGroup from tofu.ez.GUI.Stitch_tools_tab.ez_360_overlap_qt import Overlap360Group from tofu.ez.GUI.Advanced.Batch360 import Batch360Group # from tofu.ez.Helpers.batch_search_stitch_360 import Batcher from tofu.ez.GUI.login_dialog import Login LOG = logging.getLogger(__name__) class GUI(qtw.QWidget): """ Creates main GUI and sets defaults and creates some signals. First, load_vales_from_ezdefault has to be called in order to create ['value'] key for every parameter in EZVAR and SECTIONS dictionaries. Each element of those dictionaries is supposed to have 'ezdefault' key which is used to set the default value. These ['value']s will be used to set default values of all entries in GUI by calling load_value function in respective QGroupBoxes. These values can be changed by user and editing of each Qt feature must trigger set_ method in respective QGroupBoxe to update the ['value']. These dictionaries can be exported to yaml file and when imported later will be assigned to Qt GUI entries and to ['values'] of EZVAR and CONFIG dictionaries. When parameters are imported a signal is emitted which calls update_values function defined below which has to call load_values which must exist in every groupbox in the GUI """ def __init__(self, *args, **kwargs): super(GUI, self).__init__(*args, **kwargs) self.setWindowTitle("EZ-UFO") self.setStyleSheet("font: 10pt; font-family: Arial") # initialize dictionary entries load_values_from_ezdefault(EZVARS) load_values_from_ezdefault(SECTIONS) load_values_from_ezdefault(EZVARS_aux) # Call login dialog # self.login_parameters = {} # QTimer.singleShot(0, self.login) # Initialize tab screen self.tabs = qtw.QTabWidget() self.tab1 = qtw.QWidget() self.tab2 = qtw.QWidget() self.tab3 = qtw.QWidget() self.tab4 = qtw.QWidget() self.tab5 = qtw.QWidget() self.tab6 = qtw.QWidget() # Create and setup classes for each section of GUI # Main Tab self.config_group = ConfigGroup() self.config_group.load_values() self.centre_of_rotation_group = CentreOfRotationGroup() self.centre_of_rotation_group.load_values() self.filters_group = FiltersGroup() self.filters_group.load_values() self.ffc_group = FFCGroup() self.ffc_group.load_values() self.phase_retrieval_group = PhaseRetrievalGroup() self.phase_retrieval_group.load_values() self.binning_group = ROIandHistGroup() self.binning_group.load_values() # Image Viewer self.image_group = ImageViewerGroup() # Advanced Tab self.advanced_group = AdvancedGroup() self.advanced_group.load_values() self.optimization_group = OptimizationGroup() self.optimization_group.load_values() self.nlmdn_group = NLMDNGroup() self.nlmdn_group.load_values() self.find_spots_group = FindSpotsGroup() self.find_spots_group.load_values() self.batch360_group = Batch360Group() self.batch360_group.load_values() # Stitch_tools_tab Tab # ----((P)Completed up to here) ----# self.multi_stitch_group = MultiStitch360Group() self.multi_stitch_group.load_values() self.ezmview_group = EZMViewGroup() self.ezmview_group.init_values() self.ezstitch_group = EZStitchGroup() self.ezstitch_group.load_values() self.overlap_group = Overlap360Group() self.overlap_group.load_values() ####################################################### self.set_layout() self.resize(0, 0) # window to minimum size # When new settings are imported signal is sent and this catches it to update params for each GUI object self.config_group.signal_update_vals_from_params.connect(self.update_values) # When RECO is done send signal from config self.config_group.signal_reco_done.connect(self.switch_to_image_tab) # To pass directory names from config tab to stitch tab when button pressed self.multi_stitch_group.get_fdt_names_on_stitch_pressed.connect(self.config_group.set_fdt_names) self.overlap_group.get_fdt_names_on_stitch_pressed.connect(self.config_group.set_fdt_names) # To pass RR params from filters section to 360-search tab when button pressed self.overlap_group.get_RR_params_on_start_pressed.connect( self.filters_group.set_ufoRR_params_for_360_axis_search) # Enable GroupBoxes in Advanced setting when certain options are # selected in the Main tab self.filters_group.mask_method_median_checked.connect( self.find_spots_group.enable_by_trigger_from_main_tab ) self.centre_of_rotation_group.enable_360Batch_Group_in_Advanced.connect( self.batch360_group.enable_by_trigger_from_main_tab ) self.centre_of_rotation_group.enable_360Batch_Group_in_Advanced.connect( self.overlap_group.enable_by_trigger_from_main_tab ) # self.batch360_group.imported_good_list_signal.connect( # self.update_overlap_list # ) finish = qtw.QAction("Quit", self) finish.triggered.connect(self.closeEvent) self.show() def set_layout(self): """ Set the layout of groups/tabs for the overall application layout """ layout = qtw.QVBoxLayout(self) main_layout = qtw.QGridLayout() main_layout.addWidget(self.centre_of_rotation_group, 0, 0) main_layout.addWidget(self.filters_group, 0, 1) main_layout.addWidget(self.phase_retrieval_group, 1, 0) main_layout.addWidget(self.binning_group, 1, 1) main_layout.addWidget(self.config_group, 2, 0, 2, 0) image_layout = qtw.QGridLayout() image_layout.addWidget(self.image_group, 0, 0) advanced_layout = qtw.QGridLayout() #advanced_layout.addWidget(self.batch360_group, 0, 0) advanced_layout.addWidget(self.find_spots_group, 0, 0) advanced_layout.addWidget(self.advanced_group, 1, 0) advanced_layout.addWidget(self.optimization_group, 1, 1) advanced_layout.addWidget(self.nlmdn_group, 0, 1) advanced_layout.addWidget(self.ffc_group, 2, 0) advanced_layout.addWidget(self.ezmview_group, 2, 1) helpers_layout = qtw.QGridLayout() helpers_layout.addWidget(self.overlap_group, 0, 0, 2, 1) helpers_layout.addWidget(self.batch360_group, 3, 1, 1, 1) helpers_layout.addWidget(self.multi_stitch_group, 2, 0, 2, 1) helpers_layout.addWidget(self.ezstitch_group, 0, 1, 3, 1) # Add tabs self.tabs.addTab(self.tab1, "Main") self.tabs.addTab(self.tab2, "Reco+") self.tabs.addTab(self.tab3, "Stitching tools") self.tabs.addTab(self.tab5, "Image Viewer") # Create main tab self.tab1.layout = main_layout self.tab1.setLayout(self.tab1.layout) # Create advanced tab self.tab2.layout = advanced_layout self.tab2.setLayout(self.tab2.layout) # Create helpers tab self.tab3.layout = helpers_layout self.tab3.setLayout(self.tab3.layout) # Create image tab self.tab5.layout = image_layout self.tab5.setLayout(self.tab5.layout) # Add tabs to widget layout.addWidget(self.tabs) self.setLayout(layout) def update_values(self): """ Updates displayed values when loaded in from external .yaml file of parameters """ LOG.debug("Update Values from dictionary entries") self.centre_of_rotation_group.load_values() self.filters_group.load_values() self.find_spots_group.load_values() self.ffc_group.load_values() self.phase_retrieval_group.load_values() self.binning_group.load_values() self.config_group.load_values() self.nlmdn_group.load_values() self.advanced_group.load_values() self.optimization_group.load_values() self.overlap_group.load_values() self.batch360_group.load_values() self.ezstitch_group.load_values() def switch_to_image_tab(self): """ Function is called after reconstruction when checkbox "Load images and open viewer after reconstruction" is enabled Automatically loads images from the output reconstruction directory for viewing """ if EZVARS['inout']['open-viewer']['value'] is True: LOG.debug("Switch to Image Tab") self.tabs.setCurrentWidget(self.tab2) if os.path.isdir(str(EZVARS['inout']['output-dir']['value'] + '/sli')): files = os.listdir(str(EZVARS['inout']['output-dir']['value'] + '/sli')) #Start thread here to load images ##CHECK IF ONLY SINGLE IMAGE THEN USE OPEN IMAGE -- OTHERWISE OPEN STACK if len(files) == 1: print("Only one file in {}: Opening single image {}". format(EZVARS['inout']['output-dir']['value'] + '/sli', files[0])) filePath = str(EZVARS['inout']['output-dir']['value'] + '/sli/' + str(files[0])) self.image_group.open_image_from_filepath(filePath) else: print("Multiple files in {}: Opening stack of images". format(str(EZVARS['inout']['output-dir']['value'] + '/sli'))) self.image_group.open_stack_from_path( str(EZVARS['inout']['output-dir']['value'] + '/sli')) else: print("No output directory found") def closeEvent(self, event): """ Creates verification message box Cleans up temporary directories when user quits application """ logging.debug("QUIT") reply = qtw.QMessageBox.question(self, 'Quit', 'Are you sure you want to quit?', qtw.QMessageBox.Yes | qtw.QMessageBox.No, qtw.QMessageBox.No) if reply == qtw.QMessageBox.Yes: # remove all directories with projections clean_tmp_dirs(EZVARS['inout']['tmp-dir']['value'], get_fdt_names()) # remove axis-search dir too tmp = os.path.join(EZVARS['inout']['tmp-dir']['value'], 'axis-search') event.accept() else: event.ignore() def login(self): login_dialog = Login(self.login_parameters) if login_dialog.exec_() != qtw.QDialog.Accepted: self.exit() else: #self.file_writer_group.root_dir_entry.setText(self.login_parameters['expdir']) self.config_group.input_dir_entry.setText(self.login_parameters['expdir'] + "/raw") self.config_group.set_input_dir() self.config_group.output_dir_entry.setText(self.login_parameters['expdir'] + "/rec") self.config_group.set_output_dir() ''' td = date.today() tdstr = "{}.{}.{}".format(td.year, td.month, td.day) logfname = os.path.join(self.login_parameters['expdir'], 'exp-log-' + tdstr + '.log') if self.login_parameters.has_key('project'): logfname = os.path.join(self.login_parameters['expdir'], '{}-log-{}-{}.log'. format(self.login_parameters['project'], self.login_parameters['bl'], tdstr)) try: open(logfname, 'a').close() except: warning_message('Cannot create log file in the selected directory. \n' 'Check permissions and restart.') self.exit() ''' def exit(self): self.close() def main_qt(args=None): app = qtw.QApplication(sys.argv) window = GUI() sys.exit(app.exec_()) if __name__ == "__main__": main_qt() ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/image_viewer.py000066400000000000000000000357521521054151500216640ustar00rootroot00000000000000import os import logging import pyqtgraph as pg import numpy as np import tifffile from PyQt5.QtWidgets import ( QPushButton, QGroupBox, QLabel, QDoubleSpinBox, QRadioButton, QScrollBar, QVBoxLayout, QGridLayout, QFileDialog, QMessageBox, ) from PyQt5.QtCore import Qt import tofu.ez.image_read_write as image_read_write #TODO Integrate axis search tab ob tofu gui into this interface LOG = logging.getLogger(__name__) class ImageViewerGroup(QGroupBox): def __init__(self): super().__init__() #TODO: initialize on every opening with explicit data type #mmatching the data format being opened. #must check that there is enough RAM before loading!! self.tiff_arr = np.empty([0, 0, 0]) # float32 self.img_arr = np.empty([0, 0]) self.bit_depth = 32 self.open_file_button = QPushButton("Open Image File") self.open_file_button.clicked.connect(self.open_image_from_file) self.open_file_button.setStyleSheet("background-color: lightgrey; font: 11pt") self.open_stack_button = QPushButton("Open Image Stack") self.open_stack_button.clicked.connect(self.open_stack_from_directory) self.open_stack_button.setStyleSheet("background-color: lightgrey; font: 11pt") self.save_file_button = QPushButton("Save Image File") self.save_file_button.clicked.connect(self.save_image_to_file) self.save_file_button.setStyleSheet("background-color: lightgrey; font: 11pt") self.save_stack_button = QPushButton("Save Image Stack") self.save_stack_button.clicked.connect(self.save_stack_to_directory) self.save_stack_button.setStyleSheet("background-color: lightgrey; font: 11pt") self.open_big_tiff_button = QPushButton("Open BigTiff") self.open_big_tiff_button.clicked.connect(self.open_big_tiff) self.open_big_tiff_button.setStyleSheet("background-color: lightgrey; font: 11pt") self.save_big_tiff_button = QPushButton("Save BigTiff") self.save_big_tiff_button.clicked.connect(self.save_stack_to_big_tiff) self.save_big_tiff_button.setStyleSheet("background-color: lightgrey; font: 11pt") self.save_8bit_rButton = QRadioButton() self.save_8bit_rButton.setText("Save as 8-bit") self.save_8bit_rButton.clicked.connect(self.set_8bit) self.save_8bit_rButton.setChecked(False) self.save_16bit_rButton = QRadioButton() self.save_16bit_rButton.setText("Save as 16-bit") self.save_16bit_rButton.clicked.connect(self.set_16bit) self.save_16bit_rButton.setChecked(False) self.save_32bit_rButton = QRadioButton() self.save_32bit_rButton.setText("Save as 32-bit") self.save_32bit_rButton.clicked.connect(self.set_32bit) self.save_32bit_rButton.setChecked(True) self.hist_min_label = QLabel("Histogram Min:") self.hist_min_label.setAlignment(Qt.AlignRight | Qt.AlignVCenter) self.hist_max_label = QLabel("Histogram Max:") self.hist_max_label.setAlignment(Qt.AlignRight | Qt.AlignVCenter) self.hist_min_input = QDoubleSpinBox() self.hist_min_input.setDecimals(12) self.hist_min_input.setRange(-10, 10) self.hist_min_input.valueChanged.connect(self.min_spin_changed) self.hist_max_input = QDoubleSpinBox() self.hist_max_input.setDecimals(12) self.hist_max_input.setRange(-10, 10) self.hist_max_input.valueChanged.connect(self.max_spin_changed) self.apply_histogram_button = QPushButton("Apply Histogram to Image Stack") self.apply_histogram_button.clicked.connect(self.apply_histogram_button_clicked) self.image_window = pg.ImageView() self.image_window.ui.histogram.gradient.hide() self.histo = self.image_window.getHistogramWidget() self.scroller = QScrollBar(Qt.Horizontal) self.scroller.orientation() self.scroller.setEnabled(False) self.scroller.valueChanged.connect(self.scroll_changed) self.set_layout() def set_layout(self): vbox = QVBoxLayout() vbox.addWidget(self.save_8bit_rButton) vbox.addWidget(self.save_16bit_rButton) vbox.addWidget(self.save_32bit_rButton) gridbox = QGridLayout() gridbox.addWidget(self.hist_max_label, 0, 0) gridbox.addWidget(self.hist_max_input, 0, 1) gridbox.addWidget(self.hist_min_label, 1, 0) gridbox.addWidget(self.hist_min_input, 1, 1) layout = QGridLayout() layout.addWidget(self.open_file_button, 0, 0) layout.addWidget(self.save_file_button, 1, 0) layout.addWidget(self.open_stack_button, 0, 1) layout.addWidget(self.save_stack_button, 1, 1) layout.addWidget(self.open_big_tiff_button, 0, 2) layout.addWidget(self.save_big_tiff_button, 1, 2) layout.addItem(vbox, 0, 3, 2, 1) layout.addItem(gridbox, 0, 4, 2, 1) layout.addWidget(self.apply_histogram_button, 0, 5) layout.addWidget(self.image_window, 2, 0, 1, 6) layout.addWidget(self.scroller, 4, 0, 1, 5) self.setLayout(layout) self.resize(640, 480) self.show() def scroll_changed(self): """ Updated the currently displayed image based on position of scroll bar :return: None """ self.image_window.setImage(self.tiff_arr[self.scroller.value()].T) def open_image_from_file(self): """ Opens and displays a single image (.tif) specified by the user in the file dialog :return: None """ LOG.debug("Open image button pressed") options = QFileDialog.Options() filePath, _ = QFileDialog.getOpenFileName( self, "Open .tif Image File", "", "Tiff Files (*.tif *.tiff)", options=options ) if filePath: LOG.debug("Import image path: " + filePath) self.img_arr = image_read_write.read_image(filePath) self.image_window.setImage(self.img_arr.T) self.scroller.setEnabled(False) def open_image_from_filepath(self, filePath): """ Opens and displays a single image (.tif) contained in a directory - (used when one slice is reconstructed) :param filePath: Full path and filename :return: None """ LOG.debug("Open image from filepath: " + str(filePath)) if filePath: LOG.debug("Import image path: " + filePath) self.img_arr = image_read_write.read_image(filePath) self.image_window.setImage(self.img_arr.T) self.scroller.setEnabled(False) def save_image_to_file(self): """ Saves the currently displayed image to a file (.tif) specified by the user in the file dialog :return: None """ LOG.debug("Save image to file") options = QFileDialog.Options() filepath, _ = QFileDialog.getSaveFileName( self, "QFileDialog.getSaveFileName()", "", "Tiff Files (*.tif *.tiff)", options=options ) if filepath: LOG.debug(filepath) bit_depth_string = self.check_bit_depth(self.bit_depth) img = self.image_window.imageItem.qimage # https://www.programmersought.com/article/73475006380/ size = img.size() s = img.bits().asstring( size.width() * size.height() * img.depth() // 8 ) # format 0xffRRGGBB arr = np.fromstring(s, dtype=np.uint8).reshape( (size.height(), size.width(), img.depth() // 8) ) image_read_write.write_image( arr.T[0].T, os.path.dirname(filepath), os.path.basename(filepath), bit_depth_string ) def open_stack_from_directory(self): """ Opens all images (.tif) in a directory and displays them. Allows for scrolling through images with slider :return: None """ LOG.debug("Open image stack button pressed") dir_explore = QFileDialog() directory = dir_explore.getExistingDirectory() if directory: try: tiff_list = (".tif", ".tiff") msg = QMessageBox() msg.setIcon(QMessageBox.Information) msg.setWindowTitle("Loading Images...") msg.setText("Loading Images from Directory") msg.show() self.tiff_arr = image_read_write.read_all_images(directory, tiff_list) self.scroller.setRange(0, self.tiff_arr.shape[0] - 1) self.scroller.setEnabled(True) self.image_window.setImage(self.tiff_arr[0].T) msg.close() mid_index = self.tiff_arr.shape[0] // 2 self.scroller.setValue(mid_index) except image_read_write.InvalidDataSetError: print("Invalid Data Set") def open_stack_from_path(self, dir_path: str): """ Read images (.tif) from directory path into RAM as 3D numpy array :param dir_path: Path to directory containing multiple .tiff image files """ LOG.debug("Open stack from path") try: tiff_list = (".tif", ".tiff") msg = QMessageBox() msg.setIcon(QMessageBox.Information) msg.setWindowTitle("Loading Images...") msg.setText("Loading Images from Directory") msg.show() self.tiff_arr = image_read_write.read_all_images(dir_path, tiff_list) self.scroller.setRange(0, self.tiff_arr.shape[0] - 1) self.scroller.setEnabled(True) self.image_window.setImage(self.tiff_arr[0].T) msg.close() mid_index = self.tiff_arr.shape[0] // 2 self.scroller.setValue(mid_index) except image_read_write.InvalidDataSetError: print("Invalid Data Set") def save_stack_to_directory(self): """ Saves images stored in numpy array to individual files (.tif) in directory specified by user dialog Saves these images as BigTiff if checkbox is set to True """ LOG.debug("Save stack to directory button pressed") LOG.debug("Saving with bitdepth: " + str(self.bit_depth)) dir_explore = QFileDialog() directory = dir_explore.getExistingDirectory() LOG.debug("Writing to directory: " + directory) if directory: bit_depth_string = self.check_bit_depth(self.bit_depth) msg = QMessageBox() msg.setIcon(QMessageBox.Information) msg.setWindowTitle("Saving Images...") msg.setText("Saving Images to Directory") msg.show() self.apply_histogram_to_images() image_read_write.write_all_images(self.tiff_arr, directory, bit_depth_string) msg.close() def open_big_tiff(self): """ Opens images stored in a big tiff file (.tif) and displays them. Allows user to view them using scrollbar. :return: None """ LOG.debug("Open big tiff button pressed") options = QFileDialog.Options() filePath, _ = QFileDialog.getOpenFileName( self, "QFileDialog.getOpenFileName()", "", "All Files (*)", options=options ) if filePath: LOG.debug("Import image path: " + filePath) msg = QMessageBox() msg.setIcon(QMessageBox.Information) msg.setWindowTitle("Loading Images...") msg.setText("Loading Images from BigTiff") msg.show() self.tiff_arr = tifffile.imread(filePath).astype(dtype=np.float32) self.scroller.setRange(0, self.tiff_arr.shape[0] - 1) self.scroller.setEnabled(True) self.image_window.setImage(self.tiff_arr[0].T) msg.close() mid_index = self.tiff_arr.shape[0] // 2 self.scroller.setValue(mid_index) def save_stack_to_big_tiff(self): """ Saves the stack of images currently loaded into RAM to a single bigtif file :return: None """ LOG.debug("Save stack to bigtiff button pressed") LOG.debug("Saving with bitdepth: " + str(self.bit_depth)) dir_explore = QFileDialog() options = QFileDialog.Options() filepath, _ = QFileDialog.getSaveFileName( self, "QFileDialog.getSaveFileName()", "", "Tiff Files (*.tif *.tiff)", options=options ) if filepath: msg = QMessageBox() msg.setIcon(QMessageBox.Information) msg.setWindowTitle("Saving Images...") msg.setText("Saving Images to BigTiff") msg.show() # self.apply_histogram_to_images() bit_depth_string = self.check_bit_depth(self.bit_depth) tifffile.imwrite(filepath, self.tiff_arr, bigtiff=True, dtype=bit_depth_string) msg.close() def min_spin_changed(self): """ Changes the levels of the histogram widget if the min spinbox has been changed :return: None """ histo = self.image_window.getHistogramWidget() levels = histo.getLevels() min_level = self.hist_min_input.value() self.image_window.setLevels(min_level, levels[1]) def max_spin_changed(self): """ Changes the levels of the histogram widget if the max spinbox has been changed :return: None """ histo = self.image_window.getHistogramWidget() levels = histo.getLevels() max_level = self.hist_max_input.value() self.image_window.setLevels(levels[0], max_level) def apply_histogram_button_clicked(self): LOG.debug("Apply Histogram Button Clicked") print("Applying histogram to images. This may take a moment.") self.apply_histogram_to_images() def apply_histogram_to_images(self): """ Gets the histogram levels of the currently displayed image and applies them to all images in RAM :return: None """ levels = self.histo.getLevels() self.tiff_arr = np.clip(self.tiff_arr, levels[0], levels[1]) def check_bit_depth(self, bit_depth: int) -> str: """ Returns a string indicating the bitdepth to store the images based on value of bit-depth radio buttons :param bit_depth: :return: String specifying datatype for numpy array """ if bit_depth == 8: return "uint8" elif bit_depth == 16: return "uint16" elif bit_depth == 32: return "uint32" def set_8bit(self): """ Sets value of bit_depth variable based on radio button selection :return: None """ LOG.debug("Set 8-bit") self.bit_depth = 8 def set_16bit(self): """ Sets value of bit_depth variable based on radio button selection :return: None """ LOG.debug("Set 16-bit") self.bit_depth = 16 def set_32bit(self): """ Sets value of bit_depth variable based on radio button selection :return: None """ LOG.debug("Set 32-bit") self.bit_depth = 32 ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/login_dialog.py000066400000000000000000000124521521054151500216400ustar00rootroot00000000000000import re from PyQt5.QtCore import Qt from PyQt5.QtWidgets import ( QDialog, QLineEdit, QPushButton, QLabel, QGridLayout, QFileDialog, QComboBox, ) from tofu.ez.GUI.message_dialog import error_message import os class Login(QDialog): def __init__(self, login_parameters_dict, **kwargs): super(Login, self).__init__(**kwargs) # Pass a method from main GUI self.login_parameters_dict = login_parameters_dict self.setWindowTitle("USER LOGIN") self.setWindowModality(Qt.ApplicationModal) self.setAttribute(Qt.WA_DeleteOnClose) self.welcome_label = QLabel() self.welcome_label.setText("Welcome to BMIT!") self.prompt_label_bl = QLabel() self.prompt_label_bl.setText("Please select the beamline and project:") self.bl_label = QLabel() self.bl_label.setText("Beamline:") self.bl_entry = QComboBox() self.bl_entry.addItems(["BM", "ID"]) self.proj_label = QLabel() self.proj_label.setText("Project:") self.proj_entry = QLineEdit() self.prompt_label_expdir = QLabel() self.prompt_label_expdir.setText("OR select the path to the working directory") self.expdir_entry = QLineEdit() # self.expdir_entry.setText("/data/gui-test") self.expdir_entry.setReadOnly(True) self.expdir_select_button = QPushButton("...") self.expdir_select_button.clicked.connect(self.select_expdir_func) self.login_button = QPushButton("LOGIN") self.login_button.clicked.connect(self.on_login_button_clicked) self.set_layout() def set_layout(self): layout = QGridLayout() self.welcome_label.setAlignment(Qt.AlignCenter) self.prompt_label_bl.setAlignment(Qt.AlignCenter) self.prompt_label_expdir.setAlignment(Qt.AlignCenter) layout.addWidget(self.welcome_label, 0, 0, 1, 2) layout.addWidget(self.prompt_label_bl, 1, 0, 1, 2) layout.addWidget(self.bl_label, 2, 0, 1, 1) layout.addWidget(self.bl_entry, 2, 1, 1, 1) layout.addWidget(self.proj_label, 3, 0, 1, 1) layout.addWidget(self.proj_entry, 3, 1, 1, 1) layout.addWidget(self.prompt_label_expdir, 4, 0, 1, 2) layout.addWidget(self.expdir_entry, 5, 0, 1, 1) layout.addWidget(self.expdir_select_button, 5, 1, 1, 1) layout.addWidget(self.login_button, 6, 0, 1, 2) layout.setSpacing(15) layout.setContentsMargins(25, 25, 25, 25) self.setLayout(layout) def select_expdir_func(self): options = QFileDialog.Options() options |= QFileDialog.DontUseNativeDialog root_dir = QFileDialog.getExistingDirectory( self, "Select working directory", "/data/gui-test", options=options ) if root_dir: self.expdir_entry.setText(root_dir) def uppercase_project_entry(self): self.proj_entry.setText(self.proj_entry.text().upper()) def strip_spaces_from_user_entry(self): self.user_entry.setText(self.user_entry.text().replace(" ", "")) @property def project_name(self): return self.proj_entry.text() @property def user_name(self): return self.user_entry.text() @property def expdir_name(self): return self.expdir_entry.text() @property def bl_name(self): return self.bl_entry.currentText() def validate_entries(self): self.uppercase_project_entry() # self.strip_spaces_from_user_entry() project_valid = bool(re.match(r"^[0-9]{2}[A-Z][0-9]{5}$", self.project_name)) # username_valid = bool(re.match(r"^[a-zA-Z0-9]*$", self.user_name)) # return project_valid, username_valid return project_valid def validate_dir(self, pdr): return os.access(pdr, os.W_OK) def on_login_button_clicked(self): # project_valid, username_valid = self.validate_entries() if self.project_name != "": prj_dir_name = os.path.join( "/beamlinedata/BMIT/projects/prj" + self.project_name, "raw" ) project_valid = self.validate_entries() can_write = self.validate_dir(prj_dir_name) if project_valid and can_write: self.login_parameters_dict.update({"bl": self.bl_name}) self.login_parameters_dict.update({"project": self.project_name}) # add fileExistsError exception later in Py3 self.login_parameters_dict.update({"expdir": prj_dir_name}) self.accept() # elif not username_valid: # error_message("Username should be alpha-numeric ") elif not project_valid: error_message( "The project should be in format: CCTNNNNN, \n" "where CC is cycle number, " "T is one-letter type, " "and NNNNN is project number" ) elif not can_write: error_message("Cannot write in the project directory") elif self.expdir_name != "": if self.validate_dir(self.expdir_entry.text()): self.login_parameters_dict.update({"expdir": self.expdir_name}) self.accept() else: error_message("Cannot write in the selected directory") ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/message_dialog.py000066400000000000000000000006661521054151500221600ustar00rootroot00000000000000from PyQt5.QtWidgets import QMessageBox def message_dialog(window_title, message_text): alert = QMessageBox() alert.setWindowTitle(window_title) alert.setText(message_text) alert.exec_() def error_message(message_text): message_dialog("Error", message_text) def warning_message(message_text): message_dialog("Warning", message_text) def info_message(message_text): message_dialog("Info", message_text) ufo-kit-tofu-ed0e5bd/tofu/ez/GUI/verify_delete.py000066400000000000000000000012641521054151500220360ustar00rootroot00000000000000import os from shutil import rmtree from PyQt5.QtWidgets import QMessageBox from tofu.ez.GUI.message_dialog import warning_message def verify_safe2delete(parent, dir_path, dir_type): if os.path.exists(dir_path) and len(os.listdir(dir_path)) > 0: qm = QMessageBox() rep = qm.question(parent, '', f"{dir_type} dir is not empty. Is it safe to delete it?\n\n{dir_path}", qm.Yes | qm.No) if rep == qm.Yes: try: rmtree(dir_path) except: warning_message(f"Error while deleting {dir_type} directory") raise FileExistsError else: raise FileExistsErrorufo-kit-tofu-ed0e5bd/tofu/ez/Helpers/000077500000000000000000000000001521054151500176115ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/tofu/ez/Helpers/__init__.py000066400000000000000000000000001521054151500217100ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/tofu/ez/Helpers/batch_search_stitch_360.py000066400000000000000000000067541521054151500245530ustar00rootroot00000000000000from tofu.ez.ctdir_walker import substitute_shared_flatsdarks from tofu.ez.params import EZVARS_aux, EZVARS import os from tofu.ez.util import add_value_to_dict_entry, get_fd_names, export_values from tofu.ez.Helpers.stitch_funcs import main_360sti_ufol_depth1, compute_crop from tofu.ez.Helpers.find_360_overlap import find_overlap from tofu.util import get_first_filename, get_image_shape def batch_stitch(): #TODO: check that directory is empty - if loaded from params check is not applied stitched_data_dir_name = os.path.join(EZVARS_aux['half-acq']['workdir']['value'], 'stitched-data') if os.path.exists(stitched_data_dir_name) and \ len(os.listdir(stitched_data_dir_name)) > 0: print("# Clean directory for stitched data") return 1 print(EZVARS_aux['axes-list']) for outscandir, innerloopdict in EZVARS_aux['axes-list'].items(): print(f"# Stitching half acq mode data in {outscandir}") outscandir_out = os.path.join(stitched_data_dir_name, os.path.basename(outscandir)) if not os.path.exists(outscandir_out): os.makedirs(outscandir_out) # Export the parameters used to get stitched-data export_values(os.path.join(outscandir_out, "tofuez_all_parameters.yaml"), ['ezvars', 'tofu', 'ezvars_aux']) innerloopdirs = list(innerloopdict) dax = list(innerloopdict.values()) print(f'# Stitching inner loop CT scans in {outscandir} with ' f"overlaps {dax}") print(f'Overlaps: {dax}') first_tomo_dir = os.path.join(outscandir, innerloopdirs[0], EZVARS['inout']['tomo-dir']['value']) image_shape = get_image_shape(get_first_filename(first_tomo_dir)) cra = compute_crop(dax, image_shape) print(f'Crop by: {cra}') substitute_subdirs = substitute_shared_flatsdarks() reduction_mode = EZVARS['flat-correction']['reduction-mode']['value'] fd_names = get_fd_names() for innerloopdir, ax, crop in zip(innerloopdirs, dax, cra): ctdir = os.path.join(outscandir, innerloopdir) outdir = os.path.join(outscandir_out, innerloopdir) print("================================================================") print(" -> Working On: " + str(ctdir)) print(f" axis position {ax}, margin to crop {crop} pixels") try: main_360sti_ufol_depth1(indir=ctdir, outdir=outdir, ax=ax, cro=crop, substitute_subdirs=substitute_subdirs, reduction_mode=reduction_mode, fd_names=fd_names, ) except: return 1 return 0 def batch_olap_search(): EZVARS_aux['find360olap']['input-dir']['value'] = \ EZVARS['inout']['input-dir']['value'] EZVARS_aux['find360olap']['tmp-dir']['value'] = \ os.path.join(EZVARS_aux['half-acq']['workdir']['value'], 'temporary-data') EZVARS_aux['find360olap']['output-dir']['value'] = \ os.path.join(EZVARS_aux['half-acq']['workdir']['value'], 'overlap-search-results') try: find_overlap() except: return 1 return 0ufo-kit-tofu-ed0e5bd/tofu/ez/Helpers/find_360_overlap.py000066400000000000000000000305201521054151500232230ustar00rootroot00000000000000""" This script takes as input a CT scan that has been collected in "half-acquisition" mode and produces a series of reconstructed slices, each of which are generated by cropping and concatenating opposing projections together over a range of "overlap" values (i.e. the pixel column at which the images are cropped and concatenated). The objective is to review this series of images to determine the pixel column at which the axis of rotation is located (much like the axis search function commonly used in reconstruction software). """ import os import numpy as np import tifffile from tofu.ez.params import EZVARS, EZVARS_aux from tofu.ez.Helpers.stitch_funcs import findCTdirs, stitch from tofu.util import get_filenames, get_image_shape, TiffSequenceReader from tofu.ez.ufo_cmd_gen import get_filter2d_sinos_cmd #from tofu.ez.find_axis_cmd_gen import evaluate_images_simp from tofu.ez.evaluate_sharpness import evaluate_metrics_360_olap_search from tofu.ez.Helpers.stitch_funcs import main_360sti_ufol_depth1 from tofu.ez.util import get_dims, get_fd_names from tofu.ez.ufo_cmd_gen import get_pre_cmd from tofu.ez.tofu_cmd_gen import fmt_pr_cmd def extract_row(dir_name, row): tsr = TiffSequenceReader(dir_name) tmp = tsr.read(0) (N, M) = tmp.shape if (row < 0) or (row > N): row = N//2 num_images = tsr.num_images if num_images == 1: print(f"Single image in {dir_name}, duplicating.") num_images = 2 tsr._filenames = 2 * tsr._filenames assert num_images == tsr.num_images if num_images % 2 == 1: # print(f"odd number of images ({num_images}) in {dir_name}, " # f"discarding the last one before stitching pairs") num_images-=1 A = np.empty((num_images, M), dtype=np.uint16) for i in range(num_images): A[i, :] = tsr.read(i)[row, :] tsr.close() return A def find_overlap(): print("Finding CTDirs...") ctdirs, lvl0 = findCTdirs(EZVARS_aux['find360olap']['input-dir']['value'], EZVARS['inout']['tomo-dir']['value']) print(ctdirs) if len(ctdirs) < 1: return None olap_estimates = [] # TODO: fix shared flats/darks - path doesn't have to be # joined as shared variable is an absolute path already dirdark = EZVARS['inout']['darks-dir']['value'] dirflats = EZVARS['inout']['flats-dir']['value'] dirflats2 = EZVARS['inout']['flats2-dir']['value'] if EZVARS['inout']['shared-flatsdarks']['value']: dirdark = EZVARS['inout']['path2-shared-darks']['value'] dirflats = EZVARS['inout']['path2-shared-flats']['value'] dirflats2 = EZVARS['inout']['path2-shared-flats2']['value'] sin_tmp_dir = os.path.join(EZVARS_aux['find360olap']['tmp-dir']['value'], 'sinos') if not os.path.exists(sin_tmp_dir): os.makedirs(sin_tmp_dir) ax_range = range(EZVARS_aux['find360olap']['start']['value'], EZVARS_aux['find360olap']['stop']['value'] + EZVARS_aux['find360olap']['step']['value'], EZVARS_aux['find360olap']['step']['value']) # flush records from previous run EZVARS_aux['axes-list'] = {} # concatenate images with various overlap and generate sinograms for ctset in ctdirs: outerloopdirname = os.path.dirname(ctset) if outerloopdirname not in EZVARS_aux['axes-list']: EZVARS_aux['axes-list'].update({outerloopdirname: {}}) index_dir = os.path.basename(os.path.normpath(ctset)) print(f"Generating slices for ctset {index_dir}") e = 0 if EZVARS_aux['find360olap']['doPR']['value']: e = make_sinos_PR(ctset, dirflats, dirdark, dirflats2, ax_range, sin_tmp_dir) else: e = make_sinos_noPR(ctset, dirflats, dirdark, dirflats2, ax_range, sin_tmp_dir) if e: print("Cannot create sinograms; continue with the next ct set") continue outname = do_reco(sin_tmp_dir, index_dir, ax_range) # estimating overlap mettxtpref = os.path.join(os.path.join( EZVARS_aux['find360olap']['output-dir']['value'], index_dir)) results = evaluate_metrics_360_olap_search(os.path.dirname(outname), mettxtpref, ax_range, metrics_1d={"std": np.std}, detrend=True) mtc_key = 'std' if EZVARS_aux['find360olap']['doPR']['value']: mtc_key = 'sag' olap_est = int(EZVARS_aux['find360olap']['start']['value'] + \ EZVARS_aux['find360olap']['step']['value'] * np.argmax(results[mtc_key])) print("****************************************") print(f"Finished processing: {index_dir}, estimated overlap: {olap_est}") EZVARS_aux['axes-list'][outerloopdirname].update({index_dir: olap_est}) olap_estimates.append(olap_est) print("****************************************") #shutil.rmtree(EZVARS_aux['find360olap']['tmp-dir']) print("Finished processing of all subdirectories in " + str(EZVARS_aux['find360olap']['input-dir']['value'])) return dict(zip(ctdirs, olap_estimates)) def make_sinos_noPR(ctset, dirflats, dirdark, dirflats2, ax_range, sin_tmp_dir): reduction_func = np.median if EZVARS['flat-correction']['reduction-mode']['value'] == 'average': reduction_func = np.mean try: row_flat = reduction_func(extract_row( os.path.join(ctset, dirflats), EZVARS_aux['find360olap']['row']['value'])) except: print(f"Problem loading flats in {ctset}") return 1 try: row_dark = reduction_func(extract_row( os.path.join(ctset, dirdark), EZVARS_aux['find360olap']['row']['value'])) except: print(f"Problem loading darks in {ctset}") return 1 try: row_tomo = extract_row( os.path.join(ctset, EZVARS['inout']['tomo-dir']['value']), EZVARS_aux['find360olap']['row']['value']) except: print(f"Problem loading projections from " f"{os.path.join(ctset, EZVARS['inout']['tomo-dir']['value'])}") return 1 row_flat2 = None tmpstr = os.path.join(ctset, dirflats2) if os.path.exists(tmpstr): try: row_flat2 = reduction_func(extract_row(tmpstr, EZVARS_aux['find360olap']['row']['value'])) except: print(f"Problem loading flats2 in {ctset}") return 1 (num_proj, M) = row_tomo.shape print('Flat-field correction...') # Flat-correction tmp_flat = np.tile(row_flat, (num_proj, 1)) if row_flat2 is not None: tmp_flat2 = np.tile(row_flat2, (num_proj, 1)) ramp = np.linspace(0, 1, num_proj) ramp = np.transpose(np.tile(ramp, (M, 1))) tmp_flat = tmp_flat * (1 - ramp) + tmp_flat2 * ramp del ramp, tmp_flat2 tmp_dark = np.tile(row_dark, (num_proj, 1)) tomo_ffc = -np.log((row_tomo - tmp_dark) / np.float32(tmp_flat - tmp_dark)) del row_tomo, row_dark, row_flat, tmp_flat, tmp_dark np.nan_to_num(tomo_ffc, copy=False, nan=0.0, posinf=0.0, neginf=0.0) # create interpolated sinogram of flats on the # same row as we use for the projections, then flat/dark correction print('Creating stitched sinograms...') for axis in ax_range: cro = EZVARS_aux['find360olap']['stop']['value'] - axis if axis > M // 2: cro = axis - EZVARS_aux['find360olap']['start']['value'] A = stitch( tomo_ffc[: num_proj // 2, :], tomo_ffc[num_proj // 2:, ::-1], axis, cro, False) tifffile.imwrite(os.path.join( sin_tmp_dir, 'sin-axis-' + str(axis).zfill(4) + '.tif'), A.astype(np.float32)) return 0 def do_reco(sin_tmp_dir, index_dir, ax_range): if EZVARS_aux['find360olap']['doRR']['value']: sinfilt_tmp_dir = os.path.join(EZVARS_aux['find360olap']['tmp-dir']['value'], 'sinos-filt') if not os.path.exists(sinfilt_tmp_dir): os.makedirs(sinfilt_tmp_dir) # formatting reco command sin_width = get_image_shape(get_filenames(sin_tmp_dir)[0])[-1] sin_height = get_image_shape(get_filenames(sin_tmp_dir)[0])[-2] outname = os.path.join(os.path.join( EZVARS_aux['find360olap']['output-dir']['value'], index_dir, f"{index_dir}-sli")) # old command # cmd = f'tofu tomo --axis {sin_width // 2} --output {os.path.join(outname)}' # new command to enable slice crop # convert sinos to projections first nsli = len(ax_range) cmd = f'tofu sinos --number {nsli}' if EZVARS_aux['find360olap']['doRR']['value']: print("Applying ring removal filter") rrcmd = get_filter2d_sinos_cmd(EZVARS_aux['find360olap']['tmp-dir']['value'], EZVARS['RR']['sx']['value'], EZVARS['RR']['sy']['value'], sin_height, sin_width) os.system(rrcmd) cmd += f' --projections {sinfilt_tmp_dir}' else: cmd += f' --projections {sin_tmp_dir}' proj_file_name = os.path.join(EZVARS_aux['find360olap']['tmp-dir']['value'], 'proj.tif') cmd += f" --output {proj_file_name}" os.system(cmd) # now the reco command cmd = f'tofu reco --projections {proj_file_name} --output {outname}' cmd += f' --overall-angle 180 --center-position-x {sin_width // 2} ' cmd += f' --number {sin_height} --region={-(nsli // 2)},{nsli - nsli // 2},{1}' p_width = EZVARS_aux['find360olap']['patch-size']['value'] // 2 cmd += " --x-region={},{},{}".format(int(-p_width), int(p_width), 1) cmd += " --y-region={},{},{}".format(int(-p_width), int(p_width), 1) print('Reconstructing slices...') os.system(cmd) return outname def make_sinos_PR(ctset, dirflats, dirdark, dirflats2, ax_range, sin_tmp_dir): path2crop_frames = os.path.join(EZVARS_aux['find360olap']['tmp-dir']['value'], 'vertcrop') mrg = 32 # hardcoding the margins to avoid boundary artifacts when retrieving phase for one row nviews, wh = validate_row(mrg, ctset, EZVARS['inout']['tomo-dir']['value']) pre_cmd = f"crop y={EZVARS_aux['find360olap']['row']['value'] - mrg + 1} height={2*mrg}" typ = 3 tmpstr = os.path.join(ctset, dirflats2) if os.path.exists(tmpstr): typ = 4 cmds = get_pre_cmd((ctset, typ), pre_cmd, path2crop_frames) print(f"Creating a cropped copy of the input data set with {2*mrg} rows only") for cmd in cmds: #print(cmd) os.system(cmd) reduction_mode = EZVARS['flat-correction']['reduction-mode']['value'] fd_names = get_fd_names() for axis in ax_range: print(f"Making sinogram for axis {axis}") cro = EZVARS_aux['find360olap']['stop']['value'] - axis if axis > wh[1] // 2: cro = axis - EZVARS_aux['find360olap']['start']['value'] stitched = os.path.join(EZVARS_aux['find360olap']['tmp-dir']['value'], 'stitched', f"{axis:04}") print(f"Stitching flats/darks/tomo") main_360sti_ufol_depth1(path2crop_frames, stitched, axis, cro, reduction_mode=reduction_mode, fd_names=fd_names, ) dirs = ( os.path.join(stitched, dirdark), os.path.join(stitched, dirflats), os.path.join(stitched, 'proj-step1'), os.path.join(stitched, dirflats2) if os.path.exists(os.path.join(stitched, dirflats2)) else None ) stitched_pr = os.path.join(EZVARS_aux['find360olap']['tmp-dir']['value'], 'stitched-pr', f"{axis:04}") out_pattern = os.path.join(stitched_pr, "proj-%04i.tif") print(f"Phase retrieval") cmd = fmt_pr_cmd(*dirs, out_pattern, reduction_mode=reduction_mode) os.system(cmd) print(f"Generating sinogram for the target row") cmd = "tofu sinos" cmd += " --projections {}".format(stitched_pr) cmd += " --output {}".format(os.path.join(sin_tmp_dir, 'sin-axis-' + str(axis).zfill(4) + '.tif')) cmd += " --number {}".format(nviews//2) cmd += f" --y={mrg} --height=1" os.system(cmd) return 0 def validate_row(dy, ctset, dirflats): nviews, wh, multipage = get_dims(os.path.join(ctset, dirflats)) y = EZVARS_aux['find360olap']['row']['value'] if (y+dy) >= wh[1]: y = wh[1] - dy elif (y-dy) <=0: y = dy if ((y+dy) > wh[1]) or ((y-dy) <=0): print("Input projections must be at least 16 rows large to perform phase retrieval accurately") return 1 return nviews, wh ufo-kit-tofu-ed0e5bd/tofu/ez/Helpers/halfacqmode-mpi-stitch.py000066400000000000000000000027731521054151500245170ustar00rootroot00000000000000#!/usr/bin/env python3 import sys import time import tifffile from mpi4py import MPI from tofu.ez.Helpers.stitch_funcs import stitch from tofu.util import TiffSequenceReader path_to_script, ax, crop, bigtif_name, out_fmt = sys.argv comm = MPI.COMM_WORLD rank = comm.Get_rank() size = comm.Get_size() # t0 = time.time() #print(f"{t0:.2f}: Private {rank} of {size} is at your service") tfs = TiffSequenceReader(bigtif_name) npairs = tfs.num_images//2 n_my_pairs = int(npairs/size) + (1 if npairs%size > rank else 0) #print(f'Private {rank} got {n_my_pairs} pairs to process out of total {npairs}') for pair_number in range(n_my_pairs): idx = rank + pair_number * size # print(f'Private {rank} processing pair {idx} - {idx+npairs}') first = tfs.read(idx) second = tfs.read(idx+npairs)[:, ::-1] #stitched = stitch(first, second, int(ax), int(crop)) if first.dtype == "float32": stitched = stitch(first, second, int(ax), int(crop), False) else: stitched = stitch(first, second, int(ax), int(crop)) tifffile.imwrite(out_fmt.format(idx), stitched) tfs.close() #print(f"Private {rank} stitched {n_my_pairs} pairs in {time.time()-t0:.2f} s! Am I first?") # Important - release communicator! try: parent_comm = comm.Get_parent() parent_comm.Disconnect() except MPI.Exception: pass # # def main(): # comm = MPI.COMM_WORLD # size = comm.Get_size() # rank = comm.Get_rank() # print(f"I am {rank} of {size}") # # if __name__ == "__main__": # main() ufo-kit-tofu-ed0e5bd/tofu/ez/Helpers/mview_main.py000066400000000000000000000074321521054151500223240ustar00rootroot00000000000000#!/bin/python import os import numpy from tofu.util import get_filenames import re def check_folders(p, noflats2): if not os.path.exists(p): os.makedirs(p) tmp = p + "/darks" if not os.path.exists(tmp): os.makedirs(tmp) tmp = p + "/flats" if not os.path.exists(tmp): os.makedirs(tmp) if noflats2 == False: tmp = p + "/flats2" if not os.path.exists(tmp): os.makedirs(tmp) tmp = p + "/tomo" if not os.path.exists(tmp): os.makedirs(tmp) def rename_Andor(indir): names = get_filenames(os.path.join(indir, "*.tif")) maxnum = re.match(".*?([0-9]+)$", names[0][:-4]).group(1) n_dgts = len(maxnum) trnc_len = n_dgts + 4 prefix = names[0][:-trnc_len] maxnum = int(maxnum) for name in names: num = int(re.match(".*?([0-9]+)$", name[:-4]).group(1)) maxnum = num if (num > maxnum) else maxnum n_dgts = len(str(maxnum)) lin_fmt = prefix + "{:0" + str(n_dgts) + "}.tif" for name in names: num = re.match(".*?([0-9]+)$", name[:-4]).group(1) if name == lin_fmt.format(int(num)): continue else: cmd = "mv {} {}".format(name, lin_fmt.format(int(num))) os.system(cmd) def main_prep(params): if params['ezmview_no_zero_padding']: rename_Andor(params['ezmview_input_dir']) frames = get_filenames(os.path.join(params['ezmview_input_dir'], "*.tif")) nframes = len(frames) if nframes == 0: tmp = "Check INPUT directory: there are no tif files there" raise ValueError(tmp) # replace first frame with the second to get rid of # corrupted first file in the PCO Edge sequencies # Happened long ago in CamWare ... cmd = "rm {}; cp {} {}".format(frames[0], frames[1], frames[0]) os.system(cmd) FFinterval = params["ezmview_num_projections"] int_tot = params['ezmview_num_sets'] # (args.nproj/FFinterval)*args.nviews #int_1view = 1.0 # args.nproj/FFinterval #remainder of a more general FF correction files_in_int = params['ezmview_num_flats'] + params['ezmview_num_darks'] + FFinterval files_input = files_in_int * int_tot if params['ezmview_flats2'] == False: files_input += params['ezmview_num_flats'] #+ params['ezmview_num_darks'] if files_input != nframes: tmp = ( "Sequence length (found {} files) does not match ".format(nframes) + "one calculated from input parameters " + "(expected {} files)".format(files_input) ) raise ValueError(tmp) for i in range(params['ezmview_num_sets']): if params['ezmview_num_sets'] > 1: pout = os.path.join(params['ezmview_input_dir'], "z{:02d}".format(i)) else: pout = params['ezmview_input_dir'] check_folders(pout, params['ezmview_flats2']) # offset to heading flats and darks o = i * files_in_int for i in range(params['ezmview_num_flats']): cmd = "mv {} {}/flats/".format(frames[o + i], pout) os.system(cmd) # print(cmd) o += params['ezmview_num_flats'] for i in range(params['ezmview_num_darks']): cmd = "mv {} {}/darks/".format(frames[o + i], pout) os.system(cmd) # print(cmd) o += params['ezmview_num_darks'] for i in range(params["ezmview_num_projections"]): cmd = "mv {} {}/tomo/".format(frames[o + i], pout) os.system(cmd) # print(cmd) o += params["ezmview_num_projections"] if params['ezmview_flats2']: continue for i in range(params['ezmview_num_flats']): cmd = "cp {} {}/flats2/".format(frames[o + i], pout) os.system(cmd) # print(cmd) print("========== Done ==========") ufo-kit-tofu-ed0e5bd/tofu/ez/Helpers/stitch_funcs.py000066400000000000000000000626461521054151500226750ustar00rootroot00000000000000""" Last modified on Apr 1, 2022 @author: sergei gasilov """ import glob import os import shutil import numpy as np import tifffile from tofu.ez.ctdir_walker import substitute_shared_flatsdarks from tofu.util import read_image, get_image_shape, TiffSequenceReader, SequenceReaderError, \ get_first_filename from tofu.ez.util import get_data_cube_info, add_value_to_dict_entry, get_dims, enquote, get_fd_names from tofu.ez.image_read_write import get_image_dtype import multiprocessing as mp from functools import partial import time from tofu.ez.ufo_cmd_gen import fmt_stitch_cmd from skimage.metrics import structural_similarity as ssim from tofu.ez.params import EZVARS_aux, EZVARS import sys try: from mpi4py import MPI except ImportError: print("Ufo-launch GPU filter will be used to stitch half acq mode data", file=sys.stderr) def findCTdirs(root: str, tomo_name: str): """ Walks directories rooted at "Input ctset" location Appends their absolute path to ctdir if they contain a ctset with same name as "tomo" entry in GUI """ lvl0 = os.path.abspath(root) ctdirs = [] for root, dirs, files in os.walk(lvl0): for name in dirs: if name == tomo_name: ctdirs.append(root) ctdirs.sort() return ctdirs, lvl0 def make_ort_sections(ctset_path, tmp_dir_path): """ Generate orthogonal sections using tofu sinos command. Returns the original path if orthogonal sections are not generated, otherwise returns the path to the orthogonal sections. :param ctset_path: Path to the directory containing the vertical views (one CTDir with Z00-Z0N subdirs) :param tmp_dir_path: Path to the temporary directory where the orthogonal sections will be stored. :return: Path to the directory containing the orthogonal sections and dtype of the input images """ Vsteps = sorted_sub_directories(ctset_path) #determine input data type tmp = os.path.join(ctset_path, Vsteps[0], EZVARS_aux['vert-sti']['subdir-name']['value']) nslices, N, M, indtype_digit, indtype, npasses, ext = get_data_cube_info(tmp) indir = ctset_path if EZVARS_aux['vert-sti']['ort']['value']: print(" - Creating orthogonal sections") for vstep in Vsteps: in_name = enquote(os.path.join(ctset_path, vstep, EZVARS_aux['vert-sti']['subdir-name']['value'], f"*{ext}")) out_name = os.path.join(tmp_dir_path, vstep, EZVARS_aux['vert-sti']['subdir-name']['value'], 'sli-%04i.tif') # todo: size check and num-passes argument cmd = 'tofu sinos --projections {} --output {}'.format(in_name, out_name) cmd += " --y {} --height {} --y-step {}".format(EZVARS_aux['vert-sti']['start']['value'], EZVARS_aux['vert-sti']['stop']['value'] - EZVARS_aux['vert-sti']['start']['value'], EZVARS_aux['vert-sti']['step']['value']) cmd += " --output-bytes-per-file 0" if indtype_digit == '8' or indtype_digit == '16': cmd += f" --output-bitdepth {indtype_digit}" cmd += f" --pass-size {npasses}" print(cmd) os.system(cmd) time.sleep(10) indir = tmp_dir_path return indir, indtype def sorted_sub_directories(path: os.PathLike) -> list[str]: """Return a sorted list of sub-directories sorted by sub-directory name""" with os.scandir(path) as entries: subdirs = sorted([entry.name for entry in entries if entry.is_dir()]) return subdirs def get_cube_dims(search_dir=None, subdir_name=None): """ Find the first set of slices and determine the cube dimensions Returns (number of slices, image_rows, image_columns) """ if search_dir is None: search_dir = EZVARS_aux['vert-sti']['input-dir']['value'] if subdir_name is None: subdir_name = EZVARS_aux['vert-sti']['subdir-name']['value'] path_to_slices = None for root, dirs, files in os.walk(search_dir): for name in dirs: if name == subdir_name: path_to_slices = os.path.join(root, name) break else: continue break if path_to_slices is None: raise FileNotFoundError(f"Could not find a directory named {subdir_name} in {search_dir}") nslices, hw, multipage = get_dims(path_to_slices) return nslices, hw[0], hw[1] def validate_slice_range(): nslices, N, M = get_cube_dims() if EZVARS_aux['vert-sti']['reslice_all']['value']: EZVARS_aux['vert-sti']['start']['value'] = 0 EZVARS_aux['vert-sti']['stop']['value'] = N EZVARS_aux['vert-sti']['step']['value'] = 1 else: if EZVARS_aux['vert-sti']['start']['value'] > EZVARS_aux['vert-sti']['stop']['value']: tmp = EZVARS_aux['vert-sti']['start']['value'] EZVARS_aux['vert-sti']['start']['value'] = EZVARS_aux['vert-sti']['stop']['value'] EZVARS_aux['vert-sti']['stop']['value'] = tmp if EZVARS_aux['vert-sti']['stop']['value'] > N: EZVARS_aux['vert-sti']['stop']['value'] = N def load_an_image_from_the_input_dir(input_dir, slice_dir): return 0 def main_sti_mp(): if not os.path.exists(EZVARS_aux['vert-sti']['output-dir']['value']): os.makedirs(EZVARS_aux['vert-sti']['output-dir']['value']) if EZVARS_aux['vert-sti']['task_type']['value'] == 0: stitch_func = sti_one_set elif EZVARS_aux['vert-sti']['task_type']['value'] == 1: stitch_func = conc_one_set else: raise ValueError("Wrong task type value. Must be 0 for stitching or 1 for concatenation") vert_sets = [] for root, dirs, files in os.walk(EZVARS_aux['vert-sti']['input-dir']['value']): if EZVARS_aux['vert-sti']['subdir-name']['value'] in dirs: vert_sets.append(os.path.dirname(root)) vert_sets = sorted(list(set(vert_sets))) if len(vert_sets) == 1: print(" - Working with one CT directory which contains multiple vertical views") elif len(vert_sets) > 1: print(" - Working with several CT directories which contain multiple vertical views") keep_tmp_dir = EZVARS['inout']['keep-tmp']['value'] tmp_root_dir = EZVARS_aux['vert-sti']['tmp-dir']['value'] for vert_set in vert_sets: ctdir = os.path.relpath(vert_set, start=EZVARS_aux['vert-sti']['input-dir']['value']) print(f"-> Working on {str(ctdir)} dataset") tmpdir = os.path.join(tmp_root_dir, ctdir) outdir = os.path.join(EZVARS_aux['vert-sti']['output-dir']['value'], ctdir) if not os.path.exists(outdir): os.makedirs(outdir) stitch_func(vert_set, tmpdir, outdir) if not keep_tmp_dir and os.path.isdir(tmpdir): if os.path.samefile(tmp_root_dir, tmpdir): for dir in os.listdir(tmp_root_dir): shutil.rmtree(os.path.join(tmp_root_dir, dir)) else: shutil.rmtree(tmpdir) def sti_one_set(in_dir_path, tmp_dir_path, out_dir_path): indir, indtype = make_ort_sections(in_dir_path, tmp_dir_path) outfilepattern = os.path.join(out_dir_path, EZVARS_aux['vert-sti']['subdir-name']['value'] + '-sti-{:>04}.tif') if EZVARS_aux['vert-sti']['estimate_num_olap_rows']['value']: olap = find_vert_olap_2_vsteps(in_dir_path, EZVARS_aux['vert-sti']['ind_z00']['value'], EZVARS_aux['vert-sti']['ind_z01_start']['value'], EZVARS_aux['vert-sti']['ind_z01_stop']['value']) add_value_to_dict_entry(EZVARS_aux['vert-sti']['num_olap_rows'], olap) dx = int(EZVARS_aux['vert-sti']['num_olap_rows']['value']) # second: stitch them Vsteps = sorted_sub_directories(indir) tmp = glob.glob(os.path.join(indir, Vsteps[0], EZVARS_aux['vert-sti']['subdir-name']['value'], '*.tif'))[0] first = read_image(tmp) N, M = first.shape Nnew = N - dx if Nnew < 0: raise ValueError(f"Vertical overlap {dx} larger than input image height {N}") ramp = np.linspace(0, 1, dx) J = range((EZVARS_aux['vert-sti']['stop']['value'] - EZVARS_aux['vert-sti']['start']['value']) // EZVARS_aux['vert-sti']['step']['value']) pool = mp.Pool(processes=mp.cpu_count()) exec_func = partial(exec_sti_mp, indir, outfilepattern, N, Nnew, Vsteps, dx, M, ramp, indtype) print(" - Adjusting tiles and stitching") # start = time.time() pool.map(exec_func, J) print("========== Done ==========") def exec_sti_mp(indir, pout, N, Nnew, Vsteps, dx, M, ramp, indtype, j): index = EZVARS_aux['vert-sti']['start']['value'] + j*EZVARS_aux['vert-sti']['step']['value'] Large = np.empty((Nnew*len(Vsteps)+dx, M), dtype=np.float32) for i, vstep in enumerate(Vsteps[:-1]): tmp = os.path.join(indir, Vsteps[i], EZVARS_aux['vert-sti']['subdir-name']['value'], '*.tif') tmp1 = os.path.join(indir, Vsteps[i+1], EZVARS_aux['vert-sti']['subdir-name']['value'], '*.tif') if EZVARS_aux['vert-sti']['ort']['value']: tmp = sorted(glob.glob(tmp))[j] tmp1 = sorted(glob.glob(tmp1))[j] else: tmp = sorted(glob.glob(tmp))[index] tmp1 = sorted(glob.glob(tmp1))[index] first = read_image(tmp) second = read_image(tmp1) # sample moved downwards if EZVARS_aux['vert-sti']['flipud']['value']: first, second = np.flipud(first), np.flipud(second) k = np.mean(first[N - dx:, :]) / np.mean(second[:dx, :]) second = second * k a, b, c = i*Nnew, (i+1)*Nnew, (i+2)*Nnew Large[a:b, :] = first[:N-dx, :] Large[b:b+dx, :] = np.transpose(np.transpose(first[N-dx:, :])*(1 - ramp) + np.transpose(second[:dx, :]) * ramp) Large[b+dx:c+dx, :] = second[dx:, :] pout = pout.format(index) if not EZVARS_aux['vert-sti']['clip_hist']['value'] and \ (indtype == 'uint8' or indtype == 'uint16'): Large = np.clip(Large, np.iinfo(indtype).min, np.iinfo(indtype).max).astype(indtype) tifffile.imwrite(pout, Large.astype(indtype)) elif EZVARS_aux['vert-sti']['clip_hist']['value']: Large = 255.0/(EZVARS_aux['vert-sti']['max_int_val']['value'] - EZVARS_aux['vert-sti']['min_int_val']['value']) * \ (np.clip(Large, EZVARS_aux['vert-sti']['min_int_val']['value'], EZVARS_aux['vert-sti']['max_int_val']['value']) - EZVARS_aux['vert-sti']['min_int_val']['value']) tifffile.imwrite(pout, Large.astype(np.uint8)) else: tifffile.imwrite(pout, Large.astype(np.float32)) def conc_one_set(in_dir_path, tmp_dir_path, out_dir_path): indir, indtype = make_ort_sections(in_dir_path, tmp_dir_path) outfilepattern = os.path.join(out_dir_path, EZVARS_aux['vert-sti']['subdir-name']['value'] + '-sti-{:>04}.tif') zfold = sorted_sub_directories(indir) l = len(zfold) tmp = glob.glob(os.path.join(indir, zfold[0], EZVARS_aux['vert-sti']['subdir-name']['value'], '*.tif')) J = range((EZVARS_aux['vert-sti']['stop']['value'] - EZVARS_aux['vert-sti']['start']['value']) // EZVARS_aux['vert-sti']['step']['value']) pool = mp.Pool(processes=mp.cpu_count()) exec_func = partial(exec_conc_mp, tmp[0], l, zfold, indir, outfilepattern, indtype) print(" - Concatenating") # start = time.time() pool.map(exec_func, J) # print "Images stitched in {:.01f} sec".format(time.time()-start) print("============ Done ============") def exec_conc_mp(example_im, l, zfold, indir, pout, indtype, j): index = EZVARS_aux['vert-sti']['start']['value'] + j*EZVARS_aux['vert-sti']['step']['value'] Large, N, dtype = make_buf(example_im, l, EZVARS_aux['vert-sti']['conc_row_top']['value'], EZVARS_aux['vert-sti']['conc_row_bottom']['value']) for i, vert in enumerate(zfold): tmp = os.path.join(indir, vert, EZVARS_aux['vert-sti']['subdir-name']['value'], '*.tif') if EZVARS_aux['vert-sti']['ort']['value']: fname = sorted(glob.glob(tmp))[j] else: fname = sorted(glob.glob(tmp))[index] frame = read_image(fname)[EZVARS_aux['vert-sti']['conc_row_top']['value']: EZVARS_aux['vert-sti']['conc_row_bottom']['value'], :] if EZVARS_aux['vert-sti']['flipud']['value']: Large[i*N:N*(i+1), :] = np.flipud(frame) else: Large[i*N:N*(i+1), :] = frame tifffile.imwrite(pout.format(index), Large.astype(indtype)) def make_buf(tmp, l, a, b): first = read_image(tmp) N, M = first[a:b, :].shape return np.empty((N*l, M), dtype=first.dtype), N, first.dtype ############################## HALF ACQ ############################## def stitch(first, second, axis, crop, check_16bit_range=True): h, w = first.shape if axis > w // 2: axis = w - axis first = np.fliplr(first) second = np.fliplr(second) dx = int(2 * axis + 0.5) tmp = np.copy(first) first = second second = tmp result = np.empty((h, 2 * w - dx), dtype=first.dtype) ramp = np.linspace(0, 1, dx) # Mean values of the overlapping regions must match, which corrects flat-field inconsistency # between the two projections # We clip the values in second so that there are no saturated pixel overflow problems k = np.mean(first[:, w - dx:]) / np.mean(second[:, :dx]) if check_16bit_range: second = np.clip(second * k, np.iinfo(np.uint16).min, np.iinfo(np.uint16).max).astype(np.uint16) result[:, :w - dx] = first[:, :w - dx] result[:, w - dx:w] = first[:, w - dx:] * (1 - ramp) + second[:, :dx] * ramp result[:, w:] = second[:, dx:] return result[:, slice(int(crop), int(2*(w - axis) - crop), 1)] def main_360_mp_depth1(indir, outdir, ax, cro): if not os.path.exists(outdir): os.makedirs(outdir) subdirs = sorted_sub_directories(indir) for i, sdir in enumerate(subdirs): print(f"Stitching images in {sdir}") tfs = TiffSequenceReader(os.path.join(indir, sdir)) if tfs.num_images < 2: print("Warning: less than 2 files, skipping this dir") continue else: print(f"{tfs.num_images//2} pairs will be stitched in {sdir}") tfs.close() os.makedirs(os.path.join(outdir, sdir)) out_fmt = os.path.join(outdir, sdir, 'sti-{:>04}.tif') tmp = os.path.dirname(os.path.abspath(__file__)) path_to_script = os.path.join(tmp, "halfacqmode-mpi-stitch.py") if os.path.isfile(path_to_script): tstart = time.time() child_comm = MPI.COMM_WORLD.Spawn( sys.executable, [path_to_script, f"{ax}", f"{cro}", os.path.join(indir, sdir), out_fmt], maxprocs=12) child_comm.Disconnect() print(f"Child finished in {time.time() - tstart} yay!") else: print('Cannot see the script for parallel stitching of bigtiff files') break print("========== Done ==========") def main_360sti_ufol_depth1(indir, outdir, ax, cro, substitute_subdirs=None, reduction_mode=None, fd_names=(), ): """ indir: path to ctset with tomo/flats/darks/flats2 subdirectories outdir: path to output directory ax: overlap value cro: desired crop substitute_subdirs: dictionary of subdirs and replacement paths (used for shared flats/darks) reduction_mode: Flats / darks will be reduced by "average" or "median" before stitching fd_names: Sequence of flats / darks / flats2 subdir names in the input ctset """ if substitute_subdirs is None: substitute_subdirs = {} if not os.path.exists(outdir): os.makedirs(outdir) subdirs_list = sorted_sub_directories(indir) subdirs = {sd: os.path.join(indir, sd) for sd in subdirs_list} subdirs.update(substitute_subdirs) for sdir, inpath in subdirs.items(): print(f"Stitching images in {sdir}") if sdir in substitute_subdirs: print(f"Using shared path for {sdir}: {inpath}") numfiles = len(sorted(glob.glob(os.path.join(inpath, '*.tif')))) tfs = TiffSequenceReader(inpath) numim = tfs.num_images if numim < 1: print("Warning: no images, skipping this dir") continue if (numfiles > 1) and (numfiles != numim): print("Warning: cannot work with several bigtiff files. Input must be either" "one bigtiff container or single tif per each image") continue bigtiff = False if numfiles == 1: bigtiff = True if reduction_mode is not None and sdir in fd_names: numpairs = numim current_reduction_mode = reduction_mode print(f"{current_reduction_mode} of {numpairs} images will be stitched for {sdir}") else: numpairs = numim // 2 current_reduction_mode = None if numpairs: print(f"{numpairs} pairs will be stitched in {sdir}") elif numpairs == 0: print(f"Single image in {sdir}, duplicating.") im = tfs.read(0) tfs.close() h, w = im.shape bits = 32 if im.dtype == 'uint8': bits = 8 elif im.dtype == 'uint16': bits = 16 outpath = os.path.join(outdir, sdir) cmd = fmt_stitch_cmd(inpath, bigtiff, bits, outpath, numpairs, w, ax, cro, current_reduction_mode) #print(cmd) os.system(cmd) def compute_crop(dax, image_shape): """Compute the crop values required to output matching image widths after stitching Required for vertical stitching after reconstruction. Returns a sequence of crop values the same length as dax """ cra = np.max(dax) - dax M = image_shape[-1] if np.min(dax) > M//2: cra = dax - np.min(dax) return cra def main_360_mp_depth2(): ctdirs, lvl0 = findCTdirs(EZVARS_aux['stitch360']['input-dir']['value'], EZVARS['inout']['tomo-dir']['value']) num_sets = len(ctdirs) if num_sets < 1: print(f"Didn't find any CT dirs in the input. Check directory structure and permissions. \n" f"Program expects to see a number of subdirectories in the input each of with \n" f"contains at least one directory with CT projections (currently name set to " f"{EZVARS['inout']['tomo-dir']['value']}. \n"+ f"The tif files in all " \ f" {EZVARS['inout']['tomo-dir']['value']}, " f" {EZVARS['inout']['flats-dir']['value']}, " f" {EZVARS['inout']['darks-dir']['value']} \n" f"subdirectories will be stitched to convert half-acquisition mode scans to ordinary \n" f"180-deg parallel-beam scans") return ctdirs_rel_paths = [os.path.relpath(ctdir, start=EZVARS_aux['stitch360']['input-dir']['value']) for ctdir in ctdirs] print(f"Found the {num_sets} directories in the input with relative paths: {ctdirs_rel_paths}") # make_ort_sections axis and crop arrays if EZVARS_aux['stitch360']['olap_switch']['value'] == 0: dax = np.round(np.linspace(EZVARS_aux['stitch360']['olap_min']['value'], EZVARS_aux['stitch360']['olap_max']['value'], num_sets)).astype(np.int16) else: #dax = np.array(list(parameters['360multi_axis_dict'].values()), np.int16)[:num_sets] dax = EZVARS_aux['stitch360']['olap_list']['value'].split(',') for i in range(len(dax)): dax[i] = int(dax[i]) print(f'Overlaps: {dax}') # compute crop: # Axis on the right ? Must open one file to find out >< first_tomo_dir = os.path.join(ctdirs[0], EZVARS['inout']['tomo-dir']['value']) image_shape = get_image_shape(get_first_filename(first_tomo_dir)) cra = compute_crop(dax, image_shape) print(f'Crop by: {cra}') substitute_subdirs = substitute_shared_flatsdarks() reduction_mode = EZVARS['flat-correction']['reduction-mode']['value'] fd_names = get_fd_names() for i, ctdir in enumerate(ctdirs): print("================================================================") print(" -> Working On: " + str(ctdir)) print(f" axis position {dax[i]}, margin to crop {cra[i]} pixels") #main_360_mp_depth1 main_360sti_ufol_depth1(ctdir, os.path.join(EZVARS_aux['stitch360']['output-dir']['value'], ctdirs_rel_paths[i]), int(dax[i]), int(cra[i]), substitute_subdirs=substitute_subdirs, reduction_mode=reduction_mode, fd_names=fd_names, ) # print(ctdir, os.path.join(parameters['360multi_output_dir'], ctdirs_rel_paths[i]), dax[i], cra[i]) def check_last_index(axis_list): """ Return the index of item in list immediately before first 'None' type :param axis_list: :return: the index of last non-None value """ last_index = 0 for index, item in enumerate(axis_list): if item == 'None': last_index = index - 1 return last_index last_index = index return last_index def find_vert_olap_all_vsteps(ctset_path, ind_z00, ind_start_z01, ind_stop_z01): Vsteps = sorted_sub_directories(ctset_path) num_vsteps = len(Vsteps) olaps = np.zeros((num_vsteps-1, 1)) for i in range(num_vsteps-1): # if os.path.exists(os.path.join(EZVARS_aux['vert-sti']['input-dir']['value'], subdirs[0], # EZVARS_aux['vert-sti']['subdir-name']['value'])): z00_name = os.path.join(ctset_path, Vsteps[i], EZVARS_aux['vert-sti']['subdir-name']['value']) z01_name = os.path.join(ctset_path, Vsteps[i+1], EZVARS_aux['vert-sti']['subdir-name']['value']) olaps[i] = find_vert_overlap(z00_name, z01_name, ind_z00, ind_start_z01, ind_stop_z01) return np.median(olaps) #ind_start_z01+olaps-ind_z00 def find_vert_olap_2_vsteps(ctset_path, ind_z00, ind_start_z01, ind_stop_z01): #taking two sub-scans near the center of the sample vsteps = sorted_sub_directories(ctset_path) num_vsteps = len(vsteps) z00_name = os.path.join(ctset_path, vsteps[num_vsteps//2-1], EZVARS_aux['vert-sti']['subdir-name']['value']) z01_name = os.path.join(ctset_path, vsteps[num_vsteps//2], EZVARS_aux['vert-sti']['subdir-name']['value']) print(f"Estimating overlap between {vsteps[num_vsteps//2-1]} and {vsteps[num_vsteps//2]} " f"scans in {ctset_path}") tmp = find_vert_overlap(z00_name, z01_name, ind_z00, ind_start_z01, ind_stop_z01) print(f"Estimated overlap is {tmp} rows") return tmp def find_vert_overlap(z00_name, z01_name, ind_z00, ind_start_z01, ind_stop_z01): tmp = os.path.join(z00_name, '*.tif') im0 = read_image(sorted(glob.glob(tmp))[ind_z00]) tsr = TiffSequenceReader(z01_name) num_ref_im = ind_stop_z01 - ind_start_z01 ssim_ind = np.zeros((num_ref_im, 1)) #TODO: must be parallelized for i in range(num_ref_im): try: im1 = tsr.read(ind_start_z01 + i) except SequenceReaderError: continue ssim_ind[i] = ssim(im0, im1, data_range=(max(im0.max(), im1.max()) - min(im0.min(), im1.min()))) print(f"Similarity with slice {ind_start_z01 + i} = {ssim_ind[i]}") print(f"The most similar slice to {ind_z00} is {ind_start_z01 + np.argmax(ssim_ind)}") M = len(sorted(glob.glob(tmp))) # olap = ind_start_z01 + np.argmax(ssim_ind) - ind_z00 if ind_z00 < M//2: return M - (ind_start_z01 + np.argmax(ssim_ind) - ind_z00) else: return (ind_start_z01 + np.argmax(ssim_ind)) - (M - ind_z00) # def find_ver_overlap_mp(z00_name, z01_name, ind_z00, ind_start_z01, ind_stop_z01): # tmp = os.path.join(z00_name, '*.tif') # im0 = read_image(sorted(glob.glob(tmp))[ind_z00]) # N, M = im0.shape # tsr = TiffSequenceReader(z01_name) # num_ref_im = ind_stop_z01 - ind_start_z01 # A = np.zeros((num_ref_im, N, M)) # ssim_ind = np.zeros((num_ref_im, 1)) # for i in range(num_ref_im): # im1 = tsr.read(ind_start_z01 + i) # A[i,:,:] = im1 # del(A) # def comp_ssim(im0, A, i): # ssim_ind = ssim(im0, A[i,:,:], data_range=(max(im0.max(), A[i,:,:].max()) - # min(im0.min(), A[i,:,:].min()))) # print(f"Similarity with slice {i} = {ssim_ind}") # return [i, ssim_ind] # # # nslices = len(sorted(glob.glob(tmp))) # # olap = ind_start_z01 + np.argmax(ssim_ind) - ind_z00 # if ind_z00 < nslices // 2: # return nslices - (ind_start_z01 + np.argmax(ssim_ind) - ind_z00) # else: # return (ind_start_z01 + np.argmax(ssim_ind)) - (nslices - ind_z00) def complete_message(): print(" __.-/|") print(" \\`o_O'") print(" =( )= +-----+") print(" U| | FIN |") print(" /\\ /\\ / | +-----+") print(" ) /^\\) ^\\/ _)\\ |") print(" ) /^\\/ _) \\ |") print(" ) _ / / _) \\___|_") print(" /\\ )/\\/ || | )_)\\___,|))") print("< > |(,,) )__) |") print(" || / \\)___)\\") print(" | \\____( )___) )____") print(" \\______(_______;;;)__;;;)") ufo-kit-tofu-ed0e5bd/tofu/ez/RR_external.py000066400000000000000000000145261521054151500210160ustar00rootroot00000000000000#!/usr/bin/env python3 """ Created on Aug 3, 2018 @author: SGasilov Initially it has been simplest median sorting Replaced by non-FFT based methods proposed by Nghia T. Vo and published in https://doi.org/10.1364/OE.26.028396 """ import os import argparse from tofu.util import read_image import numpy as np from tofu.util import get_filenames import multiprocessing as mp from functools import partial from scipy.ndimage import median_filter from scipy.ndimage import binary_dilation from tifffile import imwrite def parse_args(): parser = argparse.ArgumentParser() parser.add_argument("--sinos", type=str, help="Input directory") parser.add_argument("--mws", type=int, help="Window size for small rings (sorting algorithm)") parser.add_argument("--mws2", type=int, help="Window size for large rings") parser.add_argument("--snr", type=int, help="Median window size along columns") parser.add_argument("--sort_only", type=int, help="Only sorting or both") return parser.parse_args() def RR_wide_sort(mws, mws2, snr, odir, fname): filt_sin_name = os.path.join(odir, os.path.split(fname)[1]) im = read_image(fname).astype(np.float32) im = remove_large_stripe(im, snr, mws2) im = remove_stripe_based_sorting(im, mws) imwrite(filt_sin_name, im.astype(np.float32)) def RR_sort(mws, odir, fname): filt_sin_name = os.path.join(odir, os.path.split(fname)[1]) imwrite( filt_sin_name, remove_stripe_based_sorting(read_image(fname).astype(np.float32), mws).astype(np.float32), ) def remove_stripe_based_sorting(sinogram, size, dim=1): # taken from sarepy, Author: Nghia T. Vo https://doi.org/10.1364/OE.26.028396 """ Remove stripe artifacts in a sinogram using the sorting technique, algorithm 3 in Ref. [1]. Angular direction is along the axis 0. Parameters ---------- sinogram : array_like 2D array. Sinogram image. size : int Window size of the median filter. dim : {1, 2}, optional Dimension of the window. """ sinogram = np.transpose(sinogram) (nrow, ncol) = sinogram.shape list_index = np.arange(0.0, ncol, 1.0) mat_index = np.tile(list_index, (nrow, 1)) mat_comb = np.asarray(np.dstack((mat_index, sinogram))) mat_sort = np.asarray([row[row[:, 1].argsort()] for row in mat_comb]) if dim == 2: mat_sort[:, :, 1] = median_filter(mat_sort[:, :, 1], (size, size)) else: mat_sort[:, :, 1] = median_filter(mat_sort[:, :, 1], (size, 1)) mat_sort_back = np.asarray([row[row[:, 0].argsort()] for row in mat_sort]) return np.transpose(mat_sort_back[:, :, 1]) def detect_stripe(list_data, snr): # taken from sarepy, Author: Nghia T. Vo https://doi.org/10.1364/OE.26.028396 """ Locate stripe positions using Algorithm 4 in Ref. [1]. Parameters ---------- list_data : array_like 1D array. Normalized data. snr : float Ratio used to segment stripes from background noise. """ npoint = len(list_data) list_sort = np.sort(list_data) listx = np.arange(0, npoint, 1.0) ndrop = np.int16(0.25 * npoint) (slope, intercept) = np.polyfit(listx[ndrop : -ndrop - 1], list_sort[ndrop : -ndrop - 1], 1) y_end = intercept + slope * listx[-1] noise_level = np.abs(y_end - intercept) noise_level = np.clip(noise_level, 1e-6, None) val1 = np.abs(list_sort[-1] - y_end) / noise_level val2 = np.abs(intercept - list_sort[0]) / noise_level list_mask = np.zeros(npoint, dtype=np.float32) if val1 >= snr: upper_thresh = y_end + noise_level * snr * 0.5 list_mask[list_data > upper_thresh] = 1.0 if val2 >= snr: lower_thresh = intercept - noise_level * snr * 0.5 list_mask[list_data <= lower_thresh] = 1.0 return list_mask def remove_large_stripe(sinogram, size, snr=3, drop_ratio=0.1, norm=True): # taken from sarepy, Author: Nghia T. Vo https://doi.org/10.1364/OE.26.028396 """ Remove large stripes, algorithm 5 in Ref. [1], by: locating stripes, normalizing to remove full stripes, and using the sorting technique (Ref. [1]) to remove partial stripes. Angular direction is along the axis 0. Parameters ---------- sinogram : array_like 2D array. Sinogram image snr : float Ratio used to segment stripes from background noise. size : int Window size of the median filter. drop_ratio : float, optional Ratio of pixels to be dropped, which is used to reduce the false detection of stripes. norm : bool, optional Apply normalization if True. """ sinogram = np.copy(sinogram) # Make it mutable drop_ratio = np.clip(drop_ratio, 0.0, 0.8) (nrow, ncol) = sinogram.shape ndrop = int(0.5 * drop_ratio * nrow) sino_sort = np.sort(sinogram, axis=0) sino_smooth = median_filter(sino_sort, (1, size)) list1 = np.mean(sino_sort[ndrop : nrow - ndrop], axis=0) list2 = np.mean(sino_smooth[ndrop : nrow - ndrop], axis=0) list_fact = np.divide(list1, list2, out=np.ones_like(list1), where=list2 != 0) list_mask = detect_stripe(list_fact, snr) list_mask = np.float32(binary_dilation(list_mask, iterations=1)) mat_fact = np.tile(list_fact, (nrow, 1)) if norm is True: sinogram = sinogram / mat_fact # Normalization sino_tran = np.transpose(sinogram) list_index = np.arange(0.0, nrow, 1.0) mat_index = np.tile(list_index, (ncol, 1)) mat_comb = np.asarray(np.dstack((mat_index, sino_tran))) mat_sort = np.asarray([row[row[:, 1].argsort()] for row in mat_comb]) mat_sort[:, :, 1] = np.transpose(sino_smooth) mat_sort_back = np.asarray([row[row[:, 0].argsort()] for row in mat_sort]) sino_cor = np.transpose(mat_sort_back[:, :, 1]) listx_miss = np.where(list_mask > 0.0)[0] sinogram[:, listx_miss] = sino_cor[:, listx_miss] return sinogram def main(): args = parse_args() sinos = get_filenames(os.path.join(args.sinos, "*.tif")) # create output directory wdir = os.path.split(args.sinos)[0] odir = os.path.join(wdir, "sinos-filt") if not os.path.exists(odir): os.makedirs(odir) pool = mp.Pool(processes=mp.cpu_count()) if args.sort_only: exec_func = partial(RR_sort, args.mws, odir) else: exec_func = partial(RR_wide_sort, args.mws, args.mws2, args.snr, odir) pool.map(exec_func, sinos) if __name__ == "__main__": main() ufo-kit-tofu-ed0e5bd/tofu/ez/__init__.py000066400000000000000000000000011521054151500203070ustar00rootroot00000000000000 ufo-kit-tofu-ed0e5bd/tofu/ez/ctdir_walker.py000066400000000000000000000201311521054151500212300ustar00rootroot00000000000000""" Created on Apr 5, 2018 @author: gasilos """ import os from tofu.ez.params import EZVARS VALID_EXTS = ['.tif', '.tiff', '.edf'] class WalkCTdirs: """ Walks in the directory structure and creates list of paths to CT folders Determines flats before/after and checks that folders contain only tiff files fdt_names = flats/darks/tomo directory names """ def __init__(self, inpath, fdt_names, verb=True): self.lvl0 = os.path.abspath(inpath) self.ctdirs = [] self.types = [] self.ctsets = [] self.typ = [] self.total = 0 self.good = 0 self.verb = verb self._fdt_names = fdt_names self.common_flats = EZVARS['inout']['path2-shared-flats']['value'] self.common_darks = EZVARS['inout']['path2-shared-darks']['value'] self.common_flats2 = EZVARS['inout']['path2-shared-flats2']['value'] self.use_common_flats2 = EZVARS['inout']['shared-flats-after']['value'] def print_tree(self): print("We start in {}".format(self.lvl0)) def findCTdirs(self): """ Walks directories rooted at "Input Directory" location Appends their absolute path to ctdir if they contain a directory with same name as "tomo" entry in GUI """ for root, dirs, files in os.walk(self.lvl0): for name in dirs: if name == self._fdt_names[2]: self.ctdirs.append(root) self.ctdirs = list(set(self.ctdirs)) self.ctdirs.sort() def checkCTdirs(self): """ Determine whether directory is of type 3 or type 4 and store in self.typ with index corresponding to ctdir Type3: Has flats, darks and not flats2 -- or flats==flats2 Type4: Has flats, darks and flats2 """ for ctdir in self.ctdirs: # flats/darks and no flats2 or flats2==flats -> type 3 if ( os.path.exists(os.path.join(ctdir, self._fdt_names[1])) and os.path.exists(os.path.join(ctdir, self._fdt_names[0])) and ( not os.path.exists(os.path.join(ctdir, self._fdt_names[3])) or self._fdt_names[1] == self._fdt_names[3] ) ): self.typ.append(3) # flats/darks/flats2 -> type4 elif ( os.path.exists(os.path.join(ctdir, self._fdt_names[1])) and os.path.exists(os.path.join(ctdir, self._fdt_names[0])) and os.path.exists(os.path.join(ctdir, self._fdt_names[3])) ): self.typ.append(4) else: print(os.path.basename(ctdir)) self.typ.append(0) def checkcommonfdt(self): """ Verifies that paths to directories specified by common_flats, common_darks, and common_flats2 exist :return: True if directories exist, False if they do not exist """ for ctdir in self.ctdirs: if self.use_common_flats2 is True: self.typ.append(4) elif self.use_common_flats2 is False: self.typ.append(3) if self.use_common_flats2 is True: if ( os.path.exists(self.common_flats) and os.path.exists(self.common_darks) and os.path.exists(self.common_flats2) ): return True elif self.use_common_flats2 is False: if (os.path.exists(self.common_flats) and os.path.exists(self.common_darks)): return True return False def checkcommonfdtFiles(self): """ Verifies that directories of tomo and common flats/darks/flats contain only .tif files :return: True if directories exist, False if they do not exist """ for i, ctdir in enumerate(self.ctdirs): ctdir_tomo_path = os.path.join(ctdir, self._fdt_names[2]) if not self._checktifs(ctdir_tomo_path): print("Invalid files found in " + str(ctdir_tomo_path)) self.typ[i] = 0 return False if not self._checktifs(self.common_flats): print("Invalid files found in " + str(self.common_flats)) return False if not self._checktifs(self.common_darks): print("Invalid files found in " + str(self.common_darks)) return False if self.use_common_flats2 and not self._checktifs(self.common_flats2): print("Invalid files found in " + str(self.common_flats2)) return False return True def checkCTfiles(self): """ Checks whether each ctdir is of type 3 or 4 by comparing index of self.typ[] to corresponding index of ctdir[] Then for each directory of type 3 or 4 it checks sub-directories contain only .tif files If it contains invalid data then typ[] is set to 0 for corresponding index location """ for i, ctdir in enumerate(self.ctdirs): if ( self.typ[i] == 3 and self._checktifs(os.path.join(ctdir, self._fdt_names[1])) and self._checktifs(os.path.join(ctdir, self._fdt_names[0])) and self._checktifs(os.path.join(ctdir, self._fdt_names[2])) ): continue elif ( self.typ[i] == 4 and self._checktifs(os.path.join(ctdir, self._fdt_names[1])) and self._checktifs(os.path.join(ctdir, self._fdt_names[0])) and self._checktifs(os.path.join(ctdir, self._fdt_names[2])) and self._checktifs(os.path.join(ctdir, self._fdt_names[3])) ): continue else: self.typ[i] = 0 def _checktifs(self, tmpath): """ Checks each whether item in directory tmppath is a supported file :param tmpath: Path to directory :return: 0 if invalid item found in directory - 1 if no invalid items found in directory """ for i in os.listdir(tmpath): if os.path.isdir(i): print(f"Directory {tmpath} contains a subdirectory") return 0 if os.path.splitext(i)[1] not in VALID_EXTS: print(f"Directory {tmpath} has files which are not supported images or containers") return 0 return 1 def sortbadgoodsets(self): """ Reduces type of all directories to either Good with flats 2 (1) or good without flats2 (0) or bad (<0) """ self.total = len(self.ctdirs) self.ctsets = sorted(zip(self.ctdirs, self.typ), key=lambda s: s[0]) self.total = len(self.ctsets) self.good = [int(y) > 2 for x, y in self.ctsets].count(True) tmp = len(self.lvl0) if self.verb: print("Total folders {}, good folders {}".format(self.total, self.good)) print("{:>20}\t{}".format("Path to CT set", "Typ: 0 bad, 3 no flats2, 4 with flats2")) for ctdir in self.ctsets: msg1 = ctdir[0][tmp:] if msg1 == "": msg1 = "." print("{:>20}\t{}".format(msg1, ctdir[1])) # keep paths to directories with good ct data only: self.ctsets = [q for q in self.ctsets if int(q[1] > 0)] def Getlvl0(self): return self.lvl0 def substitute_shared_flatsdarks() -> dict[str, str]: """ Return a dictionary with structure {"flats": "/path/to/shared/flats"} which respects EZVARS settings """ substitutes = {} if EZVARS['inout']['shared-flatsdarks']['value']: for type in ['darks', 'flats', 'flats2']: if type == 'flats2' and not EZVARS['inout']['shared-flats-after']['value']: continue key = f'path2-shared-{type}' path = EZVARS['inout'][key]['value'] if not os.path.exists(path): print(f"Shared {type} not found: {path}") continue name = EZVARS['inout'][f'{type}-dir']['value'] substitutes[name] = path return substitutes ufo-kit-tofu-ed0e5bd/tofu/ez/evaluate_sharpness.py000066400000000000000000000346771521054151500224760ustar00rootroot00000000000000import argparse import glob import multiprocessing import os import time import numpy as np from functools import partial from tofu.util import read_image from scipy.stats import skew, kurtosis from scipy import signal from tofu.util import TiffSequenceReader def sum_abs_gradient(data): """Sum of absolute gradients.""" return np.sum(np.abs(np.gradient(data))) def mad(data): """Median absolute deviation.""" return np.median(np.abs(data - np.median(data))) def abs_sum(data): """Sum of the absolute values.""" return np.sum(np.abs(data)) def entropy(data, bins=256): """Image entropy.""" hist, bins = np.histogram(data, bins=bins) hist = hist.astype(float) hist /= hist.sum() valid = np.where(hist > 0) return -np.sum(np.dot(hist[valid], np.log2(hist[valid]))) def inverted(func, *args, **kwargs): """Return -func(*args, **kwargs).""" return -func(*args, **kwargs) def filter_data(data, fwhm=32.0): """Filter low frequencies in 1D *data* (needed when the axis is far away by axis evaluation). *fwhm* is the FwhM of the gaussian used to filter out low frequencies in real space. The window is then computed as fft(1 - gauss). """ mean = np.mean(data) sigma = fwhm / (2 * np.sqrt(2 * np.log(2))) # We compute the gaussian in Fourier space, so convert sigma first f_sigma = 1.0 / (2 * np.pi * sigma) x = np.fft.fftfreq(len(data)) fltr = 1 - np.exp(-(x ** 2) / (2 * f_sigma ** 2)) return np.fft.ifft(np.fft.fft(data) * fltr).real + mean METRICS_1D = { "mean": np.mean, "std": np.std, "skew": skew, "kurtosis": kurtosis, "mad": mad, "asum": abs_sum, "min": np.min, "max": np.max, "entropy": entropy, } METRICS_2D = {"sag": sum_abs_gradient} for key in list(METRICS_1D): METRICS_1D["m" + key] = partial(inverted, METRICS_1D[key]) for key in list(METRICS_2D): METRICS_2D["m" + key] = partial(inverted, METRICS_2D[key]) # for key in METRICS_1D.keys(): # METRICS_1D['m' + key] = partial(inverted, METRICS_1D[key]) # for key in METRICS_2D.keys(): # METRICS_2D['m' + key] = partial(inverted, METRICS_2D[key]) def evaluate( image, metrics_1d=None, metrics_2d=None, global_min=None, global_max=None, metrics_1d_kwargs=None, blur_fwhm=None, ): """Evaluate *metrics_1d* which work on a flattened image and *metrics_2d* in an *image* which can either be a file path or an imageIf the metrics are None all the default ones are used. *global_min* and *global_max* are the mean extrema of the whole sequence used to cut off outlier values. Extrema are used only by 1d metrics. *metrics_1d_kwargs* are additional keyword arguments passed to the functions, they are specified in dictioinary {func_name: kwargs}. """ if metrics_1d is None: metrics_1d = METRICS_1D if metrics_2d is None: metrics_2d = METRICS_2D results = {} if type(image) == str: image = read_image(image) if blur_fwhm: from scipy.ndimage import gaussian_filter image = gaussian_filter(image, blur_fwhm / (2 * np.sqrt(2 * np.log(2)))) if global_min is None or global_max is None: flattened = image.flatten() else: # Use global cutoff flattened = image[np.where((image >= global_min) & (image <= global_max))] if metrics_1d is not None: for metric in metrics_1d: kwargs = {} if metrics_1d_kwargs and metric in metrics_1d_kwargs: kwargs = metrics_1d_kwargs[metric] results[metric] = metrics_1d[metric](flattened, **kwargs) if metrics_2d is not None: for metric in metrics_2d: results[metric] = metrics_2d[metric](image) return results def evaluate_metrics(images, out_prefix, *args, **kwargs): """Evaluate many *images* which are either file paths or images. *out_prefix* is the metric results file prefix. Metric names and file extension are appended to it. *args* and *kwargs* are passed to :func:`evaluate`. Except for *fwhm* in *kwargs* which is used to filter low frequencies from the results. """ fwhm = kwargs.pop("fwhm") if "fwhm" in kwargs else None pool = multiprocessing.Pool(processes=multiprocessing.cpu_count()) exec_func = partial(evaluate, *args, **kwargs) results = pool.map(exec_func, images) merged = {} for metric in results[0].keys(): merged[metric] = np.array([result[metric] for result in results]) if fwhm: # Filter out low frequencies merged[metric] = filter_data(merged[metric], fwhm=fwhm) if out_prefix is not None: path = out_prefix + "_" + metric + ".txt" np.savetxt(path, merged[metric], fmt="%g") return merged def evaluate_metrics_360_olap_search(images, out_prefix, x_data, *args, **kwargs): """Evaluate many *images* which are either file paths or images. *out_prefix* is the metric results file prefix. Metric names and file extension are appended to it. *args* and *kwargs* are passed to :func:`evaluate`. Except for *fwhm* in *kwargs* which is used to filter low frequencies from the results. """ dtrnd = kwargs.pop("detrend") if "detrend" in kwargs else None merged = {} results = [] tfs = TiffSequenceReader(images) for i in range(tfs.num_images): results.append(evaluate(tfs.read(i), *args, ** kwargs)) tfs.close() for metric in results[0].keys(): merged[metric] = np.array([result[metric] for result in results]) if dtrnd: # Filter out slope merged[metric] = signal.detrend(merged[metric]) if out_prefix is not None: path = out_prefix + "/" + metric np.savetxt(path+".txt", merged[metric], fmt="%g") #and plot it as well try: from matplotlib import pyplot as plt except ImportError: pass else: plt.figure() plt.plot(x_data, merged[metric]) plt.title(metric) plt.grid() plt.savefig(path + ".png") plt.close() return merged def process( names, num_images_for_stats=0, metric_names=None, out_prefix=None, fwhm=None, metrcs_1d_kwargs=None, blur_fwhm=None, ): """Process many files given by *names*. *out_prefix* is the output file prefix where the metric results will be written to. *fwhm* is used to filter our low frequencies from the results. *metrics_1d_kwargs* are additional keyword arguments passed to the functions, they are specified in dictioinary {func_name: kwargs}. """ if num_images_for_stats: if num_images_for_stats == -1: num_images_for_stats = len(names) extrema_metrics = {"min": np.min, "max": np.max} extrema = evaluate_metrics( names[:num_images_for_stats], None, metrics_1d=extrema_metrics, fwhm=fwhm, blur_fwhm=blur_fwhm, ) global_min = np.mean(extrema["min"]) global_max = np.mean(extrema["max"]) else: global_min = global_max = None metrics_1d, metrics_2d = make_metrics(metric_names) return evaluate_metrics( names, out_prefix, metrics_1d=metrics_1d, metrics_2d=metrics_2d, global_min=global_min, global_max=global_max, fwhm=fwhm, metrics_1d_kwargs=metrcs_1d_kwargs, blur_fwhm=blur_fwhm, ) def main(): args = parse_args() names = sorted(glob.glob(args.input)) if args.dims == 2: axis_length = int(np.sqrt(len(names))) size_str = "{} x {}".format(axis_length, axis_length) else: axis_length = len(names) size_str = str(axis_length) print("Data size: {}".format(size_str)) kwargs = {"entropy": {"bins": args.entropy_num_bins}} print(kwargs) for key in kwargs.keys(): kwargs["m" + key] = kwargs[key] st = time.time() results = process( names, num_images_for_stats=args.num_images_for_stats, metric_names=args.metrics, fwhm=args.fwhm, metrcs_1d_kwargs=kwargs, blur_fwhm=args.blur_fwhm, ) if args.verbose: print("Duration: {} s".format(time.time() - st)) x_data = y_data = None for metric, data in results.iteritems(): if x_data is None: x_data = construct_range(args.x_from, args.x_to, len(data), unit=args.x_unit) y_data = construct_range(args.y_from, args.y_to, len(data), unit=args.y_unit) write( args.output, metric, data, axis_length, x_data=x_data, y_data=y_data, save_raw=args.save_raw, save_txt=args.save_txt, save_plot=args.save_plot, ) argmax = np.argmax(data) if args.dims == 2: argmax = np.unravel_index(argmax, (axis_length, axis_length)) y_argmax = y_data[argmax[0]].magnitude x_argmax = x_data[argmax[1]].magnitude retval = (x_argmax, y_argmax) else: x_argmax = x_data[argmax].magnitude retval = x_argmax print(retval) def write( out_dir, metric, data, axis_length, x_data=None, y_data=None, save_raw=False, save_txt=False, save_plot=False, ): out_path = os.path.join(out_dir, metric) if not os.path.exists(out_dir): os.makedirs(out_dir, mode=0o755) if axis_length == len(data): # 1D if save_raw: np.save(out_path + ".npy", data) if save_plot: write_1d_plot(out_path, data, metric, x_data=x_data) else: reshaped = data.reshape(axis_length, axis_length) if save_raw: write_libtiff(out_path + "_raw" + ".tif", reshaped.astype(np.float32)) if save_plot: write_2d_plot(out_path, reshaped, metric, x_data=x_data, y_data=y_data) if save_txt: data = np.array((x_data.magnitude, data)) # Convenient to be read by pgfplots np.savetxt(out_path + ".txt", data.T, fmt="%g", delimiter="\t", comments="", header="x\ty") def write_1d_plot(out_path, data, metric, x_data=None): from matplotlib import pyplot as plt plt.figure() if x_data is not None: plt.plot(x_data.magnitude, data) plt.xlabel(x_data.units) else: plt.plot(data) plt.title(metric) plt.grid() plt.savefig(out_path + ".tif") plt.close() def write_2d_plot(out_path, data, metric, x_data=None, y_data=None): from matplotlib import pyplot as plt, cm plt.figure() plt.imshow(data, cmap=cm.gray) if x_data is not None: x_from = x_data[0].magnitude x_to = x_data[-1].magnitude num_x_ticks = min(data.shape[1], 9) x_locs = np.linspace(-0.5, data.shape[1] - 0.5, num_x_ticks) x_labels = np.linspace(x_from, x_to, num_x_ticks) plt.xticks(x_locs, x_labels) plt.xlabel(x_data.units) if y_data is not None: y_from = y_data[0].magnitude y_to = y_data[-1].magnitude num_y_ticks = min(data.shape[0], 9) y_locs = np.linspace(-0.5, data.shape[0] - 0.5, num_y_ticks) y_labels = np.linspace(y_from, y_to, num_y_ticks) plt.yticks(y_locs, y_labels) plt.ylabel(y_data.units) plt.title(metric) plt.savefig(out_path + ".tif") plt.close() def construct_range(start, stop, num, unit=""): start = 0 if start is None else start stop = num if stop is None else stop region = np.linspace(start, stop, num=num, endpoint=False) return q.Quantity(region, unit) def make_metrics(keys): """Buld 1d and 2d metrics dictionaries from *keys*.""" if keys is None: metrics_1d = METRICS_1D metrics_2d = METRICS_2D else: metrics_1d = {key: METRICS_1D[key] for key in keys if key in METRICS_1D} metrics_2d = {key: METRICS_2D[key] for key in keys if key in METRICS_2D} return metrics_1d, metrics_2d def parse_args(): parser = argparse.ArgumentParser( description="Evaluate sharpness metrics based on parameter changes in 3D reconstruction" ) parser.add_argument("input", type=str, help="Input path pattern") parser.add_argument( "dims", type=int, choices=(1, 2), help="Number of scanned parameters in the data set" ) parser.add_argument("--output", type=str, default=".", help="Output directory") parser.add_argument( "--metrics", type=str, nargs="*", choices=METRICS_1D.keys() ,#+ METRICS_2D.keys(), help="Metrics to determine (m prefix means -metric)", ) parser.add_argument("--x-from", type=float, help="X data from") parser.add_argument("--x-to", type=float, help="X data to") parser.add_argument("--x-unit", type=str, default="", help="X axis units") parser.add_argument("--y-from", type=float, help="Y data from") parser.add_argument("--y-to", type=float, help="Y data to") parser.add_argument("--y-unit", type=str, default="", help="Y axis units") parser.add_argument( "--num-images-for-stats", type=int, default=0, help=( "If not zero, an " "image sequence is first read and the mean min and max intensities are " "used as a global range of values to work on (-1 means read all images)" ), ) parser.add_argument( "--fwhm", type=float, help="FwhM of 1 - Gauss in real space used to filter out low frequencies.", ) parser.add_argument( "--entropy-num-bins", type=int, default=256, help="Number of bins to use for histogram calculation by entropy", ) parser.add_argument( "--blur-fwhm", type=float, help="FwhM of the Gaussian blur applied to images" ) parser.add_argument("--save-raw", action="store_true", help="Store raw data (1D npy, 2D tiff)?") parser.add_argument("--save-txt", action="store_true", help="Store raw data as text files") parser.add_argument("--save-plot", action="store_true", help="Store plot data") parser.add_argument("--verbose", action="store_true", help="Verbose output") args = parser.parse_args() if (args.x_from is None) ^ (args.x_to is None): raise ValueError("Either both x-from and x-to are set or both are not") if (args.y_from is None) ^ (args.y_to is None): raise ValueError("Either both y-from and y-to are set or both are not") return args if __name__ == "__main__": main() ufo-kit-tofu-ed0e5bd/tofu/ez/find_axis_cmd_gen.py000066400000000000000000000123141521054151500222020ustar00rootroot00000000000000#!/bin/python """ Created on Apr 6, 2018 @author: gasilos """ import glob, os, tifffile import numpy as np from tofu.ez.evaluate_sharpness import process as process_metrics from tofu.ez.util import enquote, make_inpaths from tofu.util import get_filenames, read_image from tofu.ez.params import EZVARS from tofu.config import SECTIONS from tofu.ez.tofu_cmd_gen import check_lamino, gpu_optim def find_axis_std(ctset, tmpdir, ax_range, p_width, nviews, wh, reduction_mode="median"): indir = make_inpaths(ctset[0], ctset[1]) cmd = 'tofu reco' if EZVARS['advanced']['more-reco-params']['value'] is True: cmd += check_lamino() elif EZVARS['advanced']['more-reco-params']['value'] is False: cmd += " --overall-angle 180" cmd += " --darks {} --flats {} --reduction-mode {} --projections {}".format( indir[0], indir[1], reduction_mode, enquote(indir[2]) ) cmd += " --number {}".format(nviews) if EZVARS['COR']['min-std-apply-pr']['value']: cmd += f" --disable-projection-crop --delta 1e-6" \ f" --energy {SECTIONS['retrieve-phase']['energy']['value']} " \ f" --propagation-distance {SECTIONS['retrieve-phase']['propagation-distance']['value'][0]}" \ f" --pixel-size {SECTIONS['retrieve-phase']['pixel-size']['value']} " \ f" --regularization-rate {SECTIONS['retrieve-phase']['regularization-rate']['value']:0.2f}" else: cmd += " --absorptivity --fix-nan-and-inf" if ctset[1] == 4: cmd += " --flats2 {}".format(indir[3]) out_pattern = os.path.join(tmpdir, "axis-search/sli") cmd += " --output {}".format(enquote(out_pattern)) cmd += " --x-region={},{},{}".format(int(-p_width / 2), int(p_width / 2), 1) cmd += " --y-region={},{},{}".format(int(-p_width / 2), int(p_width / 2), 1) image_height = wh[0] ax_range_list = ax_range.split(",") range_min = ax_range_list[0] range_max = ax_range_list[1] step = ax_range_list[2] range_string = str(range_min) + "," + str(range_max) + "," + str(step) cmd += " --region={}".format(range_string) res = [float(num) for num in ax_range.split(",")] cmd += " --output-bytes-per-file 0" cmd += ' --z-parameter center-position-x' cmd += ' --z {}'.format(EZVARS['COR']['search-row']['value'] - int(image_height/2)) cmd += gpu_optim() print(cmd) os.system(cmd) points, maximum = evaluate_images_simp(out_pattern + "*.tif", "msag") return res[0] + res[2] * maximum def find_axis_corr(ctset, vcrop, y, height, multipage): #TODO use tiffsequencereader indir = make_inpaths(ctset[0], ctset[1]) """Use correlation to estimate center of rotation for tomography.""" from scipy.signal import fftconvolve def flat_correct(flat, radio): nonzero = np.where(radio != 0) result = np.zeros_like(radio) result[nonzero] = flat[nonzero] / radio[nonzero] # log(1) = 0 result[result <= 0] = 1 return np.log(result) if multipage: with tifffile.TiffFile(get_filenames(indir[2])[0]) as tif: first = tif.pages[0].asarray().astype(float) with tifffile.TiffFile(get_filenames(indir[2])[-1]) as tif: last = tif.pages[-1].asarray().astype(float) with tifffile.TiffFile(get_filenames(indir[0])[-1]) as tif: dark = tif.pages[-1].asarray().astype(float) with tifffile.TiffFile(get_filenames(indir[1])[0]) as tif: flat1 = tif.pages[-1].asarray().astype(float) - dark else: first = read_image(get_filenames(indir[2])[0]).astype(float) last = read_image(get_filenames(indir[2])[-1]).astype(float) dark = read_image(get_filenames(indir[0])[-1]).astype(float) flat1 = read_image(get_filenames(indir[1])[-1]) - dark first = flat_correct(flat1, first - dark) if ctset[1] == 4: if multipage: with tifffile.TiffFile(get_filenames(indir[3])[0]) as tif: flat2 = tif.pages[-1].asarray().astype(float) - dark else: flat2 = read_image(get_filenames(indir[3])[-1]) - dark last = flat_correct(flat2, last - dark) else: last = flat_correct(flat1, last - dark) if vcrop: y_region = slice(y, min(y + height, first.shape[0]), 1) first = first[y_region, :] last = last[y_region, :] width = first.shape[1] first = first - first.mean() last = last - last.mean() conv = fftconvolve(first, last[::-1, :], mode="same") center = np.unravel_index(conv.argmax(), conv.shape)[1] return (width / 2.0 + center) / 2.0 # Find midpoint width of image and return its value def find_axis_image_midpoint(height_width): return height_width[1] // 2 def evaluate_images_simp( input_pattern, metric, num_images_for_stats=0, out_prefix=None, fwhm=None, blur_fwhm=None, verbose=False, ): # simplified version of original evaluate_images function # from Tomas's optimize_parameters script names = sorted(glob.glob(input_pattern)) res = process_metrics( names, num_images_for_stats=num_images_for_stats, metric_names=(metric,), out_prefix=out_prefix, fwhm=fwhm, blur_fwhm=blur_fwhm, )[metric] return res, np.argmax(res) ufo-kit-tofu-ed0e5bd/tofu/ez/image_read_write.py000066400000000000000000000105541521054151500220550ustar00rootroot00000000000000import os, glob import numpy as np import tifffile from tifffile import imread, imwrite from tofu.util import TiffSequenceReader class InvalidDataSetError(Exception): """ Error to be raised on attempt to read data from empty or non-existing data set """ def validate_files_path(files_path: str, supported_file_types: list) -> bool: """ Validates specified path :param supported_file_types: List of supported extensions :param files_path: Path to validate :return: True if path exists and contains at least one file of supported type, else False """ try: valid_files_list = get_valid_files_list( files_path=files_path, supported_file_types=supported_file_types ) except InvalidDataSetError: return False return len(valid_files_list) > 0 def get_valid_files_list(files_path: str, supported_file_types: list) -> list: """ Get the list of files of supported type in directory :param supported_file_types: List of supported extensions :param files_path: Path to directory with files :return: List of full paths to files """ # Check if directory exists if not os.path.exists(files_path): raise InvalidDataSetError(f"No such directory: {files_path}") files_list = os.listdir(files_path) valid_files_list = [ os.path.join(files_path, file_name) for file_name in files_list if os.path.splitext(file_name)[1] in supported_file_types ] return sorted(valid_files_list) def read_image(image_file_path: str, data_type=np.float32) -> np.ndarray: """ Reads image file to numpy.ndarray of specified type :param data_type: Data type to store the image :param image_file_path: Full path to image to read :return: """ return imread(image_file_path).astype(dtype=data_type) def write_image(image: np.ndarray, target_directory: str, target_name: str, data_type=np.float32): """ Writes image data to file :param image: Image data :param target_directory: Path to directory to write image :param target_name: Target image file name :param data_type: Data type to write the image :return: """ os.makedirs(target_directory, exist_ok=True) data_file_path = os.path.join(target_directory, target_name) imwrite(data_file_path, data=image.astype(dtype=data_type)) def write_all_images(tiff_arr: np.ndarray, target_directory: str, data_type=np.float32): """ Writes all images in numpy array as individual files in a directory :param tiff_arr: Array containing images :param target_directory: Path to directory to write images :param data_type: Data type to write the images :return: """ print("Writing Images to Directory") # We determine the number of leading zeros to append. # Find number of digits from number of files to write, then add +1 number of leading zeros index = 1 length_str = str(tiff_arr.shape[0]) num_digits = len(length_str) for image in tiff_arr: write_image( image, target_directory, "Image_" + str(index).zfill(num_digits + 1) + ".tif", data_type ) index += 1 print("Finished Writing Images to Directory") def read_all_images( image_files_path: str, supported_image_types: list, data_type=np.float32 ) -> np.ndarray: """ Reads all images of the supported type from specified directory :param supported_image_types: List of supported extensions :param image_files_path: Path to directory with images :param data_type: Data type to store the images :return: 3-dimensional numpy.ndarray of specified type, first index being image index """ valid_files_list = get_valid_files_list( files_path=image_files_path, supported_file_types=supported_image_types ) if len(valid_files_list) == 0: raise InvalidDataSetError( f"Directory {image_files_path} " f"does not contain files of supported types {supported_image_types}" ) data_array = imread(valid_files_list).astype(dtype=data_type) return np.array(data_array) def get_image_dtype(file_prefix): tsr = TiffSequenceReader(file_prefix) tmp = tsr.read(0).dtype tsr.close() if tmp == 'uint8': return '8', 'uint8' elif tmp == 'uint16': return '16', 'uint16' elif tmp == 'float32': return '32', 'float32' else: return tmp ufo-kit-tofu-ed0e5bd/tofu/ez/main.py000066400000000000000000000537431521054151500175210ustar00rootroot00000000000000""" Created on Apr 5, 2018 @author: sergei gasilov """ import logging import os import warnings warnings.filterwarnings("ignore") import time from tofu.ez.ctdir_walker import WalkCTdirs from tofu.ez.tofu_cmd_gen import * from tofu.ez.ufo_cmd_gen import * from tofu.ez.find_axis_cmd_gen import * from tofu.ez.util import * from tifffile import imwrite from tofu.ez.params import EZVARS from tofu.config import SECTIONS from tofu.ez.Helpers.batch_search_stitch_360 import batch_stitch, batch_olap_search from tofu.ez.Helpers.stitch_funcs import find_vert_olap_2_vsteps, main_sti_mp, \ complete_message, validate_slice_range LOG = logging.getLogger(__name__) def get_CTdirs_list(inpath, fdt_names): """ Determines whether directories containing CT data are valid. Returns list of subdirectories with valid CT data :param inpath: Path to the CT directory containing subdirectories with flats/darks/tomo (and flats2 if used) :param fdt_names: Names of the directories which store flats/darks/tomo (and flats2 if used) :return: W.ctsets: List of "good" CTSets and W.lvl0: Path to root of CT sets """ # Constructor call to create WalkCTDirs object W = WalkCTdirs(inpath, fdt_names) # Find any directories containing "tomo" directory W.findCTdirs() # If "Use common flats/darks across multiple experiments" is enabled if EZVARS['inout']['shared-flatsdarks']['value']: logging.debug("Use common darks/flats") logging.debug("Path to darks: " + str(EZVARS['inout']['path2-shared-darks']['value'])) logging.debug("Path to flats: " + str(EZVARS['inout']['path2-shared-flats']['value'])) logging.debug("Path to flats2: " + str(EZVARS['inout']['path2-shared-flats2']['value'])) logging.debug("Use flats2: " + str(EZVARS['inout']['shared-flats-after']['value'])) # Determine whether paths to common flats/darks/flats2 exist if not W.checkcommonfdt(): print("Invalid path to common flats/darks") return W.ctsets, W.lvl0 else: LOG.debug("Paths to common flats/darks exist") # Check whether directories contain only .tif files if not W.checkcommonfdtFiles(): return W.ctsets, W.lvl0 else: # Sort good bad sets W.sortbadgoodsets() return W.ctsets, W.lvl0 # If "Use common flats/darks across multiple experiments" is not enabled else: LOG.debug("Use flats/darks in same directory as tomo") # Check if common flats/darks/flats2 are type 3 or 4 W.checkCTdirs() # Need to check if common flats/darks contain only .tif files W.checkCTfiles() W.sortbadgoodsets() return W.ctsets, W.lvl0 def frmt_ufo_cmds(cmds, ctset, out_pattern, ax, nviews, wh, n_per_pass, reduction_mode="median"): """formats list of processing commands for a CT set""" # two helper variables to note that PR/FFC has been done at some step swiFFC = True # FFC is always required swiPR = EZVARS['retrieve-phase']['apply-pr']['value'] # PR is an optional operation ####### PREPROCESSING ######### #if we need to use shared flat/darks we have to do it only once so we need to keep track of that #will be set to False in util/make_inpaths as soon as it was used add_value_to_dict_entry(EZVARS['inout']['shared-df-used'], False) if (EZVARS['filters']['rm_spots']['value'] or EZVARS['filters']['rm_spots_use_median']['value'])\ and not EZVARS['inout']['dryrun']['value']: # copy one flat to tmpdir now as path might change if preprocess is enabled if not EZVARS['inout']['shared-flatsdarks']['value']: path2flat = os.path.join(ctset[0], EZVARS['inout']['flats-dir']['value']) else: path2flat = os.path.join(ctset[0], EZVARS['inout']['path2-shared-flats']['value']) medflat_file = os.path.join(EZVARS['inout']['tmp-dir']['value'], "flat-median.tif") script_str = "import sys; from tifffile import imwrite; from tofu.ez.util import get_median_flat; imwrite(sys.argv[1], get_median_flat(sys.argv[2]))" cmds.append(f'python -c \'{script_str}\' "{medflat_file}" "{path2flat}"') if EZVARS['inout']['preprocess']['value']: cmds.append('echo " - Applying filter(s) to images "') cmds_prepro = get_pre_cmd(ctset, EZVARS['inout']['preprocess-command']['value'], EZVARS['inout']['tmp-dir']['value']) cmds.extend(cmds_prepro) # reset location of input data ctset = (EZVARS['inout']['tmp-dir']['value'], ctset[1]) ################################################### if EZVARS['filters']['rm_spots']['value'] or EZVARS['filters']['rm_spots_use_median']['value']: # generate commands to remove sci. spots from projections cmds.append('echo " - Creating mask of large bad spots in flat field"') cmds.append(get_find_spots_cmd(EZVARS['inout']['tmp-dir']['value'])) cmds.append('echo " - Flat-correcting and removing large spots"') cmds_inpaint = get_inp_cmd(ctset, EZVARS['inout']['tmp-dir']['value'], wh[0], nviews, reduction_mode=reduction_mode) # reset location of input data ctset = (EZVARS['inout']['tmp-dir']['value'], ctset[1]) cmds.extend(cmds_inpaint) swiFFC = False # no need to do FFC anymore ######## PHASE-RETRIEVAL ####### # Do PR separately if sinograms must be generate # todo? also if vertical ROI is defined to speed up the phase retrieval if EZVARS['retrieve-phase']['apply-pr']['value'] and EZVARS['RR']['enable-RR']['value']: # or (SECTIONS['retrieve-phase']['enable-phase']['value'] and EZVARS['inout']['input_ROI']['value']): if swiFFC: # we still need need flat correction #Inpaint No cmds.append('echo " - Phase retrieval with flat-correction"') if EZVARS['flat-correction']['smart-ffc']['value']: cmds.append(get_pr_sinFFC_cmd(ctset, reduction_mode=reduction_mode)) cmds.append(get_pr_tofu_cmd_sinFFC(ctset)) elif not EZVARS['flat-correction']['smart-ffc']['value']: cmds.append(get_pr_tofu_cmd(ctset, reduction_mode=reduction_mode)) else: # Inpaint Yes cmds.append('echo " - Phase retrieval from flat-corrected projections"') cmds.extend(get_pr_ufo_cmd(nviews, wh)) swiPR = False # no need to do PR anymore swiFFC = False # no need to do FFC anymore ################# RING REMOVAL ####################### if EZVARS['RR']['enable-RR']['value']: # Generate sinograms first if swiFFC: # we still need to do flat-field correction if EZVARS['flat-correction']['smart-ffc']['value']: # Create flat corrected images using sinFFC cmds.append(get_sinFFC_cmd(ctset, reduction_mode=reduction_mode)) # Feed the flat corrected images to sino gram generation cmds.append(get_sinos_noffc_cmd(ctset[0], EZVARS['inout']['tmp-dir']['value'], nviews, wh, n_per_pass)) elif not EZVARS['flat-correction']['smart-ffc']['value']: cmds.append('echo " - Make sinograms with flat-correction"') cmds.append(get_sinos_ffc_cmd(ctset, EZVARS['inout']['tmp-dir']['value'], nviews, wh, n_per_pass, reduction_mode=reduction_mode)) else: # we do not need flat-field correction cmds.append('echo " - Make sinograms without flat-correction"') cmds.append(get_sinos_noffc_cmd(ctset[0], EZVARS['inout']['tmp-dir']['value'], nviews, wh, n_per_pass)) swiFFC = False # Filter sinograms if EZVARS['RR']['use-ufo']['value']: if EZVARS['RR']['ufo-2d']['value']: cmds.append('echo " - Ring removal - ufo 1d stripes filter"') cmds.append(get_filter1d_sinos_cmd(EZVARS['inout']['tmp-dir']['value'], EZVARS['RR']['sx']['value'], nviews)) else: cmds.append('echo " - Ring removal - ufo 2d stripes filter"') cmds.append(get_filter2d_sinos_cmd(EZVARS['inout']['tmp-dir']['value'], \ EZVARS['RR']['sx']['value'], EZVARS['RR']['sy']['value'], nviews, wh[1])) else: cmds.append('echo " - Ring removal - sarepy filter(s)"') # note - calling an external program, not an ufo-kit script tmp = os.path.dirname(os.path.abspath(__file__)) path_to_filt = os.path.join(tmp, "RR_external.py") if os.path.isfile(path_to_filt): tmp = os.path.join(EZVARS['inout']['tmp-dir']['value'], "sinos") cmdtmp = 'python {} --sinos {} --mws {} --mws2 {} --snr {} --sort_only {}' \ .format(path_to_filt, tmp, EZVARS['RR']['spy-narrow-window']['value'], EZVARS['RR']['spy-wide-window']['value'], EZVARS['RR']['spy-wide-SNR']['value'], int(not EZVARS['RR']['spy-rm-wide']['value'])) cmds.append(cmdtmp) else: cmds.append('echo "Omitting RR because file with filter does not exist"') if not EZVARS['inout']['keep-tmp']['value']: cmds.append("rm -rf {}".format(os.path.join(EZVARS['inout']['tmp-dir']['value'], "sinos"))) # Convert filtered sinograms back to projections cmds.append('echo " - Generating proj from filtered sinograms"') cmds.append(get_sinos2proj_cmd(wh[0], n_per_pass)) # reset location of input data ctset = (EZVARS['inout']['tmp-dir']['value'], ctset[1]) # Finally - call to tofu reco cmds.append('echo " - CT with axis {}; ffc:{}, PR:{}"'.format(ax, swiFFC, swiPR)) if EZVARS['flat-correction']['smart-ffc']['value'] and swiFFC: cmds.append(get_sinFFC_cmd(ctset, reduction_mode=reduction_mode)) cmds.append(get_reco_cmd(ctset, out_pattern, ax, nviews, wh, False, swiPR, reduction_mode=reduction_mode)) else: # If not using sinFFC cmds.append(get_reco_cmd(ctset, out_pattern, ax, nviews, wh, swiFFC, swiPR, reduction_mode=reduction_mode)) return nviews, wh def execute_reconstruction(): # array with the list of commands cmds = [] # create temporary directory if not os.path.exists(EZVARS['inout']['tmp-dir']['value']): os.makedirs(EZVARS['inout']['tmp-dir']['value']) if EZVARS['inout']['clip_hist']['value']: if SECTIONS['general']['output-minimum']['value'] > SECTIONS['general']['output-maximum']['value']: raise ValueError('hmin must be smaller than hmax to convert to 8bit without contrast inversion') reduction_mode = EZVARS['flat-correction']['reduction-mode']['value'] # get list of all good CT directories to be reconstructed print('*********** Analyzing input directory ************') fdt_names = get_fdt_names() # Find valid CT directories in the input directory W, lvl0 = get_CTdirs_list(EZVARS['inout']['input-dir']['value'], fdt_names) # W is an array of tuples (path to CT directory, directory type) # if we deal with unstitched half acqusition mode data we have to # convert all frames to ordinary 180-deg projections first shared_flatsdarks_orig_value = None if EZVARS['COR']['search-method']['value'] == 5: if EZVARS_aux['half-acq']['task_type']['value']: # task_type=1 meaning overlaps must be estimated first print('# +++++++++++++++++++++++++++++++++++++++++++++++', flush=True) print('# Estimating overlaps for half acq mode data sets') print('# +++++++++++++++++++++++++++++++++++++++++++++++') if batch_olap_search(): print(f"Something went wrong during search of overlaps in half acq mode data") return export_values(os.path.join(EZVARS_aux['find360olap']['output-dir']['value'], 'ezvars_aux_from_overlap_search.yaml' ), ['ezvars_aux']) # at this point we are ready to stitch projections #list of overlaps is in the EZVARS_aux['axes-list'] print('# +++++++++++++++++++++++++++++++++++++++++++++++', flush=True) print("# Batch stitching half acq mode data sets") print('# +++++++++++++++++++++++++++++++++++++++++++++++') if batch_stitch(): print(f"Something went wrong with stitching of half acq mode data " "examine output for errors") return # Disable shared-flatsdarks as the stitched versions are now present in each # stitched-data ctset shared_flatsdarks_orig_value = EZVARS['inout']['shared-flatsdarks']['value'] if shared_flatsdarks_orig_value is True: add_value_to_dict_entry(EZVARS['inout']['shared-flatsdarks'], False) # at this point we have stitched projections in working directory for batch 360 # so we get CT sets from this directory instead of the original input W, lvl0 = get_CTdirs_list(os.path.join( EZVARS_aux['half-acq']['workdir']['value'], 'stitched-data'), fdt_names) # then proceed as usual # get list of already reconstructed sets recd_sets = findSlicesDirs(EZVARS['inout']['output-dir']['value']) # find axis of rotation and populate list of reconstruction commands print("*********** AXIS INFO ************", flush=True) # if axis is defined by user then make appropriate list if EZVARS['COR']['search-method']['value'] == 3: axlist = EZVARS['COR']['user-defined-ax']['value'].split(',') if len(axlist) == 1: ax = float(axlist[0]) axlist = [] for i in range(len(W)): axlist.append(ax + i*EZVARS['COR']['user-defined-dax']['value']) else: if len(W) != len(axlist): return "There are more data sets in the input dir than entries in the list of axes" for i in range(len(axlist)): axlist[i] = float(axlist[i]) print(axlist) num_proc_sets = 0 for i, ctset in enumerate(W): # ctset is a tuple containing a path and a type (3 or 4) if not already_recd(ctset[0], lvl0, recd_sets): setid = ctset[0][len(lvl0) + 1:] num_proc_sets += 1 # determine initial number of projections and their shape path2proj = os.path.join(ctset[0], fdt_names[2]) nviews, wh, multipage = get_dims(path2proj) ram_amount_bytes = os.sysconf('SC_PAGE_SIZE') * os.sysconf('SC_PHYS_PAGES') nrows = wh[0] if EZVARS['inout']['input_ROI']['value']: nrows = int(SECTIONS['reading']['height']['value']/SECTIONS['reading']['y-step']['value']) if bad_vert_ROI(multipage, path2proj, SECTIONS['reading']['y']['value'],SECTIONS['reading']['height']['value']): print('{}\t{}'.format('CTset:', ctset[0])) print('{:>30}\t{}'.format('Axis:', 'na')) print('Vertical ROI does not contain any rows.') print("{:>30}\t{}, dimensions: {}".format("Number of projections:", nviews, wh)) continue elif (SECTIONS['reading']['y']['value'] + SECTIONS['reading']['height']['value']) > wh[0]: print('Vertical ROI exceeds the number of rows') print('Resetting the interval to match the number of rows') SECTIONS['reading']['height']['value'] = wh[0] - SECTIONS['reading']['y']['value'] nrows = int(SECTIONS['reading']['height']['value']/SECTIONS['reading']['y-step']['value']) n_per_pass = int(0.9*ram_amount_bytes/ (wh[1] * nrows * 4)) # print(f" RAM {0.9*ram_amount_bytes}, width {wh[1]}, nrows {nrows}, proj size {(wh[1] * nrows * 4)}, " # f"n_per_pass {int(0.9*ram_amount_bytes/ (wh[1] * nrows * 4))}") # If EZVARS['COR']['search-method']['value'] == 4 then bypass axis search and use image midpoint if EZVARS['COR']['search-method']['value'] < 4: # Find axis of rotation using auto: correlate first/last projections if EZVARS['COR']['search-method']['value'] == 1: ax = find_axis_corr(ctset, EZVARS['inout']['input_ROI']['value'], SECTIONS['reading']['y']['value'], SECTIONS['reading']['height']['value'], multipage) # Find axis of rotation using auto: minimize STD of a slice elif EZVARS['COR']['search-method']['value'] == 2: cmds.append("echo \"Cleaning axis-search in tmp directory\"") os.system('rm -rf {}'.format(os.path.join(EZVARS['inout']['tmp-dir']['value'], 'axis-search'))) ax = find_axis_std(ctset, #EZVARS['inout']['tmp-dir']['value'], os.path.join(EZVARS['inout']['output-dir']['value'], setid), EZVARS['COR']['search-interval']['value'], EZVARS['COR']['patch-size']['value'], nviews, wh, reduction_mode=reduction_mode) else: ax = axlist[i]#EZVARS['COR']['user-defined-ax']['value'] + i * EZVARS['COR']['user-defined-dax']['value'] # If EZVARS['COR']['search-method']['value'] >= 4 then bypass axis search and use image midpoint elif EZVARS['COR']['search-method']['value'] >= 4: ax = find_axis_image_midpoint(wh) print("Bypassing axis search and using image midpoint: {}".format(ax)) add_value_to_dict_entry(SECTIONS['cone-beam-weight']['center-position-x'], str(ax)) out_pattern = os.path.join(EZVARS['inout']['output-dir']['value'], setid, 'sli/sli') cmds.append('echo ">>>>> PROCESSING {}"'.format(setid)) # rm files in temporary directory first of all to # format paths correctly and to avoid problems # when reconstructing ct sets with variable number of rows or projections cmds.append('echo "Cleaning temporary directory"') script_str = "import sys; from tofu.ez.util import clean_tmp_dirs; clean_tmp_dirs(sys.argv[1], sys.argv[2:])" args_str = " ".join(f'"{name}"' for name in fdt_names) cmds.append(f'python -c \'{script_str}\' "{EZVARS["inout"]["tmp-dir"]["value"]}" {args_str}') # call function which formats commands for this data set reset_proj_steps() nviews, wh = frmt_ufo_cmds(cmds, ctset, out_pattern, ax, nviews, wh, n_per_pass, reduction_mode=reduction_mode) save_params(setid, ax, nviews, wh) print('{}\t{}'.format('CTset:', ctset[0])) print('{:>30}\t{}'.format('Axis:', ax)) print("{:>30}\t{}, dimensions: {}".format("Number of projections:", nviews, wh)) # tmp = "Number of projections: {}, dimensions: {}".format(nviews, wh) # cmds.append("echo \"{}\"".format(tmp)) if EZVARS['nlmdn']['do-after-reco']['value']: logging.debug("Using Non-Local Means Denoising") head, tail = os.path.split(out_pattern) slidir = os.path.dirname(os.path.join(head, 'sli')) nlmdn_output = os.path.join(slidir+"-nlmdn", "sli-nlmdn-%04i.tif") cmds.append(fmt_nlmdn_ufo_cmd(slidir, nlmdn_output)) else: print("{} has been already reconstructed".format(ctset[0])) # execute commands = start reconstruction start = time.time() print("*********** PROCESSING ************", flush=True) for cmd in cmds: if not EZVARS['inout']['dryrun']['value']: os.system(cmd) else: print(cmd) if not EZVARS['inout']['keep-tmp']['value']: clean_tmp_dirs(EZVARS['inout']['tmp-dir']['value'], fdt_names) if shared_flatsdarks_orig_value and shared_flatsdarks_orig_value != EZVARS['inout']['shared-flatsdarks']['value']: add_value_to_dict_entry(EZVARS['inout']['shared-flatsdarks'], shared_flatsdarks_orig_value) print("========================================") if EZVARS_aux['vert-sti']['dovertsti']['value']: print("======= Begin Vertical Stitching =======", flush=True) add_value_to_dict_entry(EZVARS_aux['vert-sti']['input-dir'], EZVARS['inout']['output-dir']['value']) # validate slice range (common problem) try: validate_slice_range() except Exception as e: print(f"Cannot validate slice range for vertical stitching. Check directory structure") LOG.error(e) else: main_sti_mp() print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") if (EZVARS['COR']['search-method']['value'] == 5) and EZVARS_aux['vert-sti']['dovertsti']['value']: complete_message() print("*** Done. Total processing time {} sec.".format(int(time.time() - start))) print("*** Waiting for the next job...........") return num_proc_sets def already_recd(ctset, indir, recd_sets): x = False if ctset[len(indir) + 1 :] in recd_sets: x = True return x def findSlicesDirs(lvl0): recd_sets = [] for root, dirs, files in os.walk(lvl0): for name in dirs: if name == "sli": recd_sets.append(root[len(lvl0) + 1 :]) return recd_sets def execute_from_params(params): # initialize dictionary entries load_values_from_ezdefault(EZVARS) load_values_from_ezdefault(SECTIONS) load_values_from_ezdefault(EZVARS_aux) LOG.debug("Import YAML Path: " + params.ezvars) import_values(params.ezvars, ['ezvars', 'tofu', 'ezvars_aux']) execute_reconstruction()ufo-kit-tofu-ed0e5bd/tofu/ez/params.py000066400000000000000000000361621521054151500200540ustar00rootroot00000000000000# This file is used to share params as a global variable import yaml import os from collections import OrderedDict from tofu.util import restrict_value params = {} def save_parameters(params, file_path): file_out = open(file_path, 'w') yaml.dump(params, file_out) print("Parameters file saved at: " + str(file_path)) EZVARS = OrderedDict() EZVARS_aux = OrderedDict() EZVARS_aux['find360olap'] = { 'input-dir': { 'ezdefault': os.path.join(os.path.expanduser('~'),""), 'type': str, 'help': "TODO"}, 'output-dir': { 'ezdefault': os.path.join(os.path.expanduser('~'),"ezufo_360_olap_search"), 'type': str, 'help': "TODO"}, 'tmp-dir' : { 'ezdefault': os.path.join(os.path.expanduser('~'),"ezufo_360_tmp"), 'type': str, 'help': "TODO"}, 'doRR': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'doPR': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'step': { 'ezdefault': 1, 'type': restrict_value((0, None), dtype=int), 'help': "Increment in axis of rotation"}, 'start': { 'ezdefault': 150, 'type': restrict_value((0, None), dtype=int), 'help': "Starting overlap"}, 'stop': { 'ezdefault': 200, 'type': restrict_value((0, None), dtype=int), 'help': "Maximum overlap"}, 'row': { 'ezdefault': 500, 'type': restrict_value((0, None), dtype=int), 'help': "Maximum overlap"}, 'patch-size': { 'ezdefault': 2048, 'type': restrict_value((0, None), dtype=int), 'help': "Size of the slice fragment which will be reconstructed"}, } EZVARS_aux['stitch360'] = { 'input-dir': { 'ezdefault': os.path.join(os.path.expanduser('~'),""), 'type': str, 'help': "TODO"}, 'output-dir': { 'ezdefault': os.path.join(os.path.expanduser('~'),"ezufo_360_stitched"), 'type': str, 'help': "TODO"}, 'crop': { 'ezdefault': True, 'type': bool, 'help': "TODO"}, 'olap_switch': { 'ezdefault': 0, 'type': restrict_value((0, 2), dtype=int), 'help': ""}, 'olap_min': { 'ezdefault': 1, 'type': restrict_value((0, None), dtype=int), 'help': ""}, 'olap_max': { 'ezdefault': 1, 'type': restrict_value((0, None), dtype=int), 'help': ""}, 'olap_list': { 'ezdefault': '', 'type': str, 'help': "Comma-separated list of overlaps without spaces"}, } EZVARS_aux['half-acq'] = { 'workdir': { 'ezdefault': os.path.join(os.path.expanduser('~'),"ezufo-halfacq"), 'type': str, 'help': "TODO"}, 'task_type': { 'ezdefault': 1, 'type': restrict_value((0, 1), dtype=int), 'help': "What task was requested by user"}, 'list_dirs': { 'ezdefault': '/data/foo', 'type': str, 'help': "Comma-separated list of outer loop directories which contain" "subdirectories with inner loop CT scans"}, 'list_olaps': { 'ezdefault': '50', 'type': str, 'help': "Comma-separated list of overlaps for every subdirectory in" "lexicographic order"}, } EZVARS_aux['vert-sti'] = { 'dovertsti': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'input-dir': { 'ezdefault': os.path.join(os.path.expanduser('~'), ""), 'type': str, 'help': "TODO"}, 'output-dir': { 'ezdefault': os.path.join(os.path.expanduser('~'), "ezufo_stitched_images"), 'type': str, 'help': "TODO"}, 'tmp-dir': { 'ezdefault': os.path.join(os.path.expanduser('~'), "ezufo_stitched_tmp"), 'type': str, 'help': "TODO"}, 'subdir-name': { 'ezdefault': "sli", 'type': str, 'help': "TODO"}, 'ort': { 'ezdefault': True, 'type': bool, 'help': "TODO"}, 'step': { 'ezdefault': 200, 'type': restrict_value((0, None), dtype=int), 'help': "Increment"}, 'start': { 'ezdefault': 200, 'type': restrict_value((0, None), dtype=int), 'help': "Start"}, 'stop': { 'ezdefault': 2000, 'type': restrict_value((0, None), dtype=int), 'help': ""}, 'reslice_all': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'flipud': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'task_type': { 'ezdefault': 0, 'type': restrict_value((0, 2), dtype=int), 'help': "What task was requested by user"}, 'num_olap_rows': { 'ezdefault': 60, 'type': restrict_value((0, None), dtype=int), 'help': "Increment in axis of rotation"}, 'estimate_num_olap_rows': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'ind_z00': { 'ezdefault': 0, 'type': restrict_value((0, None), dtype=int), 'help': "Index of slice in 00 directory which will be used to find the overlap"}, 'ind_z01_start': { 'ezdefault': 800, 'type': restrict_value((0, None), dtype=int), 'help': "Index of the beginning of the range of slices in 01 directory which will be used to find the overlap"}, 'ind_z01_stop': { 'ezdefault': 850, 'type': restrict_value((0, None), dtype=int), 'help': "Stop index in z01 directory for the range of slices used to find the vertical overlap"}, 'clip_hist': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'min_int_val': { 'ezdefault': -0.0003, 'type': float, 'help': "TODO"}, 'max_int_val': { 'ezdefault': 0.0002, 'type': float, 'help': "TODO"}, 'conc_row_top': { 'ezdefault': 40, 'type': restrict_value((0, None), dtype=int), 'help': "First row in the image"}, 'conc_row_bottom': { 'ezdefault': 440, 'type': restrict_value((0, None), dtype=int), 'help': "Last row in the image"}, 'cor': { 'ezdefault': 245, 'type': restrict_value((0, None), dtype=int), 'help': "Axis of rotation for half acq mode stitching"} } EZVARS_aux['axes-list'] = { # Template: # '/data/TestBatch/foo2': # outer loop scan # {'z02': 40, 'z03': 41}, # several inner loop scans # '/data/TestBatch': # {'z02': 0}, # '/data/TestBatch/TestCT360-single-tifs': # {z00: 50, z01: 49} } EZVARS['inout'] = { 'input-dir': { 'ezdefault': os.path.join(os.path.expanduser('~'),""), 'type': str, 'help': "TODO"}, 'output-dir': { 'ezdefault': os.path.join(os.path.expanduser('~'),"ezufo-rec"), 'type': str, 'help': "TODO"}, 'tmp-dir' : { 'ezdefault': os.path.join(os.path.expanduser('~'),"ezufo-tmp"), 'type': str, 'help': "TODO"}, 'darks-dir': { 'ezdefault': "darks", 'type': str, 'help': "TODO"}, 'flats-dir': { 'ezdefault': "flats", 'type': str, 'help': "TODO"}, 'tomo-dir': { 'ezdefault': "tomo", 'type': str, 'help': "TODO"}, 'flats2-dir': { 'ezdefault': "flats2", 'type': str, 'help': "TODO"}, 'bigtiff-output': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'input_ROI': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'clip_hist': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'preprocess': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'preprocess-command': { 'ezdefault': "remove-outliers size=3 threshold=500 sign=1", 'type': str, 'help': "TODO"}, 'output-ROI': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'output-x': { 'ezdefault': 0, 'type': restrict_value((0,None),dtype=int), 'help': "Crop slices: x"}, 'output-width': { 'ezdefault': 0, 'type': restrict_value((0,None),dtype=int), 'help': "Crop slices: width"}, 'output-y': { 'ezdefault': 0, 'type': restrict_value((0,None),dtype=int), 'help': "Crop slices: y"}, 'output-height': { 'ezdefault': 0, 'type': restrict_value((0,None),dtype=int), 'help': "Crop slices: height"}, 'dryrun': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'save-params': { 'ezdefault': True, 'type': bool, 'help': "TODO"}, 'keep-tmp': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'open-viewer': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'shared-flatsdarks': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'path2-shared-darks': { 'ezdefault': "Absolute path to darks", 'type': str, 'help': "TODO"}, 'path2-shared-flats': { 'ezdefault': "Absolute path to flats", 'type': str, 'help': "TODO"}, 'shared-flats-after': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'path2-shared-flats2': { 'ezdefault': "Absolute path to flats2", 'type': str, 'help': "TODO"}, 'shared-df-used': { 'ezdefault': False, 'type': bool, 'help': "Internal variable; must be set to True once " "shared flats/darks were used in the recontruction pipeline"}, 'halfacq_dir': { 'ezdefault': "Absolute path to half acqusition mode working directory", 'type': str, 'help': "TODO"}, } EZVARS['COR'] = { 'search-method': { 'ezdefault': 1, 'type': int, 'help': "TODO"}, 'search-interval': { 'ezdefault': "1010,1030,0.5", 'type': str, 'help': "TODO"}, 'patch-size': { 'ezdefault': 800, 'type': restrict_value((0,None),dtype=int), 'help': "Size of reconstructed patch [pixel]"}, 'search-row': { 'ezdefault': 400, 'type': restrict_value((0,None), dtype=int), 'help': "Search in slice from row number"}, 'min-std-apply-pr': { 'ezdefault': False, 'type': bool, 'help': "Will apply phase retreival but only while estimating the axis"}, # 'user-defined-ax': { # 'ezdefault': 0.0, # 'type': restrict_value((0,None), dtype=float), # 'help': "Axis is in column No [pixel]"}, 'user-defined-ax': { 'ezdefault': '0.0', 'type': str, 'help': "Axis is in column No [pixel] \n" "If "}, 'user-defined-dax': { 'ezdefault': 0.0, 'type': float, 'help': "TODO"}, } EZVARS['retrieve-phase']= { 'apply-pr': { 'default': False, 'ezdefault': False, 'type': bool, 'help': "Applies phase retrieval if checked"} } EZVARS['filters'] = { 'rm_spots': { 'ezdefault': False, 'type': bool, 'help': "TODO-G"}, 'rm_spots_use_median': { 'ezdefault': False, 'type': bool, 'help': "TODO-G"}, # 'spot-threshold': { # 'ezdefault': 1000, # 'type': restrict_value((0,None), dtype=float), # 'help': "TODO-G"} } EZVARS['RR'] = { 'enable-RR': { 'ezdefault': False, 'type': bool, 'help': "TODO-G"}, 'use-ufo': { 'ezdefault': True, 'type': bool, 'help': "TODO-G"}, 'ufo-2d': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'sx': { 'ezdefault': 13, 'type': restrict_value((0,None),dtype=int), 'help': "ufo ring-removal sigma horizontal (try 3..31)"}, 'sy': { 'ezdefault': 1, 'type': restrict_value((0,None),dtype=int), 'help': "ufo ring-removal sigma vertical (try 1..5)"}, 'spy-narrow-window': { 'ezdefault': 21, 'type': restrict_value((0,None),dtype=int), 'help': "window size"}, 'spy-rm-wide': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'spy-wide-window': { 'ezdefault': 91, 'type': restrict_value((0,None),dtype=int), 'help': "wind"}, 'spy-wide-SNR': { 'ezdefault': 3, 'type': restrict_value((0,None),dtype=int), 'help': "SNR"}, } EZVARS['flat-correction'] = { 'smart-ffc': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'smart-ffc-method': { 'ezdefault': "eigen", 'type': str, 'help': "TODO"}, 'eigen-pco-reps': { 'ezdefault': 4, 'type': restrict_value((0,None),dtype=int), 'help': "Flat Field Correction: Eigen PCO Repetitions"}, 'eigen-pco-downsample': { 'ezdefault': 2, 'type': restrict_value((0,None),dtype=int), 'help': "Flat Field Correction: Eigen PCO Downsample"}, 'downsample': { 'ezdefault': 4, 'type': restrict_value((0,None),dtype=int), 'help': "Flat Field Correction: Downsample"}, 'dark-scale': { 'ezdefault': 1.0, 'type': float, 'help': "Scaling dark"}, #(?) has the same name in SECTION 'flat-scale': { 'ezdefault': 1.0, 'type': float, 'help': "Scaling falt"}, #(?) has the same name in SECTION 'reduction-mode': { 'ezdefault': "average", 'type': str, 'help': "Reduction mode for dark/flat fields: median or average"}, } #TODO ADD CHECKING NLMDN SETTINGS EZVARS['nlmdn'] = { 'do-after-reco': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'input-dir': { 'ezdefault': os.getcwd(), 'type': str, 'help': "TODO"}, 'input-is-1file': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'output_pattern': { 'ezdefault': os.getcwd() + '-nlmfilt', 'type': str, 'help': "TODO"}, 'bigtiff_output': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'search-radius': { 'ezdefault': 10, 'type': int, 'help': "TODO"}, 'patch-radius': { 'ezdefault': 3, 'type': int, 'help': "TODO"}, 'h': { 'ezdefault': 0.0, 'type': float, 'help': "TODO"}, 'sigma': { 'ezdefault': 0.0, 'type': float, 'help': "TODO"}, 'window': { 'ezdefault': 0.0, 'type': float, 'help': "TODO"}, 'fast': { 'ezdefault': True, 'type': bool, 'help': "TODO"}, 'estimate-sigma': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'dryrun': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, } EZVARS['advanced'] = { 'more-reco-params': { 'ezdefault': False, 'type': bool, 'help': "TODO"}, 'parameter-type': { 'ezdefault': "", 'type': str, 'help': "TODO"}, 'enable-optimization': { 'ezdefault': False, 'type': bool, 'help': "TODO" } }ufo-kit-tofu-ed0e5bd/tofu/ez/tofu_cmd_gen.py000066400000000000000000000465301521054151500212220ustar00rootroot00000000000000#!/bin/python """ Created on Apr 6, 2018 @author: gasilos """ import os import numpy as np from tofu.ez.ufo_cmd_gen import fmt_in_out_path from tofu.ez.params import EZVARS from tofu.config import SECTIONS from tofu.ez.util import make_inpaths, fmt_in_out_path # TODO: check amount of RAM and generate sinograms in multiple passes if needed def check_lamino(): cmd = '' if not SECTIONS['cone-beam-weight']['axis-angle-x']['value'][0] == '': cmd += ' --axis-angle-x {}'.format(SECTIONS['cone-beam-weight']['axis-angle-x']['value'][0]) if not SECTIONS['general-reconstruction']['overall-angle']['value'] == '': cmd += ' --overall-angle {}'.format(SECTIONS['general-reconstruction']['overall-angle']['value']) if not SECTIONS['cone-beam-weight']['center-position-z']['value'][0] == '': cmd += ' --center-position-z {}'.format(SECTIONS['cone-beam-weight']['center-position-z']['value'][0]) if not SECTIONS['general-reconstruction']['axis-angle-y']['value'][0] == '': cmd += ' --axis-angle-y {}'.format(SECTIONS['general-reconstruction']['axis-angle-y']['value'][0]) return cmd def gpu_optim(): cmd = '' if SECTIONS['general']['verbose']['value']: cmd += ' --verbose' if EZVARS['advanced']['enable-optimization']['value']: cmd += ' --slice-memory-coeff={}'.format(SECTIONS['general-reconstruction']['slice-memory-coeff']['value']) if not SECTIONS['general-reconstruction']['slices-per-device']['value'] is None: cmd += ' --slices-per-device {}'.format(SECTIONS['general-reconstruction']['slices-per-device']['value']) if not SECTIONS['general-reconstruction']['data-splitting-policy']['value'] is None: cmd += ' --data-splitting-policy {}'.format( SECTIONS['general-reconstruction']['data-splitting-policy']['value']) return cmd def check_8bit(cmd, gray256, bit, hmin, hmax): if gray256: cmd += " --output-bitdepth {}".format(bit) # cmd += " --output-minimum \" {}\" --output-maximum \" {}\""\ # .format(hmin, hmax) cmd += ' --output-minimum " {}" --output-maximum " {}"'.format(hmin, hmax) return cmd def check_vcrop(cmd, vcrop, y, yheight, ystep, ori_height): if vcrop: cmd += " --y {} --height {} --y-step {}".format(y, yheight, ystep) else: cmd += " --height {}".format(ori_height) return cmd def check_bigtif(cmd, swi): if not swi: cmd += " --output-bytes-per-file 0" return cmd def get_1step_ct_cmd(ctset, out_pattern, ax, nviews, wh, reduction_mode="median"): # direct CT reconstruction from input dir to output dir; # obsolete, replaced by tofu reco, see get_reco_cmd() lower indir = make_inpaths(ctset[0], ctset[1]) # correct location of proj folder in case if prepro was done in_proj_dir, quatsch = fmt_in_out_path(EZVARS['inout']['tmp-dir']['value'], ctset[0], EZVARS['inout']['tomo-dir']['value'], False) indir[2] = os.path.join(os.path.split(indir[2])[0], os.path.split(in_proj_dir)[1]) # format command cmd = "tofu tomo --absorptivity --fix-nan-and-inf" cmd += " --darks {} --flats {} --reduction-mode {} --projections {}".format(indir[0], indir[1], reduction_mode, indir[2]) if ctset[1] == 4: # must be equivalent to len(indir)>3 cmd += " --flats2 {}".format(indir[3]) cmd += " --output {}".format(out_pattern) cmd += " --axis {}".format(ax) cmd += " --offset {}".format(SECTIONS['general-reconstruction']['volume-angle-z']['value'][0]) cmd += " --number {}".format(nviews) if SECTIONS['reading']['step']['value'] > 0.0: cmd += ' --angle {}'.format(SECTIONS['reading']['step']['value']) cmd = check_vcrop(cmd, EZVARS['inout']['input_ROI']['value'], SECTIONS['reading']['y']['value'], SECTIONS['reading']['height']['value'], SECTIONS['reading']['y-step']['value'], wh[0]) cmd = check_8bit(cmd, EZVARS['inout']['clip_hist']['value'], SECTIONS['general']['output-bitdepth']['value'], SECTIONS['general']['output-minimum']['value'], SECTIONS['general']['output-maximum']['value']) cmd = check_bigtif(cmd, EZVARS['inout']['bigtiff-output']['value']) return cmd def get_ct_proj_cmd( out_pattern, ax, nviews, wh): # CT reconstruction from pre-processed and flat-corrected projections in_proj_dir, quatsch = fmt_in_out_path( EZVARS['inout']['tmp-dir']['value'], "obsolete;if-you-need-fix-it", EZVARS['inout']['tomo-dir']['value'], False ) cmd = "tofu tomo --projections {}".format(in_proj_dir) cmd += " --output {}".format(out_pattern) cmd += " --axis {}".format(ax) cmd += " --offset {}".format(SECTIONS['general-reconstruction']['volume-angle-z']['value'][0]) cmd += " --number {}".format(nviews) if SECTIONS['reading']['step']['value'] > 0.0: cmd += ' --angle {}'.format(SECTIONS['reading']['step']['value']) cmd = check_vcrop(cmd, EZVARS['inout']['input_ROI']['value'], SECTIONS['reading']['y']['value'], SECTIONS['reading']['height']['value'], SECTIONS['reading']['y-step']['value'], wh[0]) cmd = check_8bit(cmd, EZVARS['inout']['clip_hist']['value'], SECTIONS['general']['output-bitdepth']['value'], SECTIONS['general']['output-minimum']['value'], SECTIONS['general']['output-maximum']['value']) cmd = check_bigtif(cmd, EZVARS['inout']['bigtiff-output']['value']) return cmd def get_ct_sin_cmd(out_pattern, ax, nviews, wh): sinos_dir = os.path.join(EZVARS['inout']['tmp-dir']['value'], 'sinos-filt') cmd = 'tofu tomo --sinograms {}'.format(sinos_dir) cmd += ' --output {}'.format(out_pattern) cmd += ' --axis {}'.format(ax) cmd += ' --offset {}'.format(SECTIONS['general-reconstruction']['volume-angle-z']['value'][0]) if EZVARS['inout']['input_ROI']['value']: cmd += ' --number {}'.format(int(SECTIONS['reading']['height']['value'] / SECTIONS['reading']['y-step']['value'])) else: cmd += " --number {}".format(wh[0]) cmd += " --height {}".format(nviews) if SECTIONS['reading']['step']['value'] > 0.0: cmd += ' --angle {}'.format(SECTIONS['reading']['step']['value']) cmd = check_8bit(cmd, EZVARS['inout']['clip_hist']['value'], SECTIONS['general']['output-bitdepth']['value'], SECTIONS['general']['output-minimum']['value'], SECTIONS['general']['output-maximum']['value']) cmd = check_bigtif(cmd, EZVARS['inout']['bigtiff-output']['value']) return cmd def get_sinos_ffc_cmd(ctset, tmpdir, nviews, wh, n_per_pass, reduction_mode="median"): indir = make_inpaths(ctset[0], ctset[1]) in_proj_dir, out_pattern = fmt_in_out_path(EZVARS['inout']['tmp-dir']['value'], ctset[0], EZVARS['inout']['tomo-dir']['value'], False) cmd = 'tofu sinos --absorptivity --fix-nan-and-inf' cmd += ' --darks {} --flats {} --reduction-mode {} '.format(indir[0], indir[1], reduction_mode) if ctset[1] == 4: cmd += " --flats2 {}".format(indir[3]) cmd += " --projections {}".format(in_proj_dir) cmd += " --output {}".format(os.path.join(tmpdir, "sinos/sin-%04i.tif")) cmd += " --number {}".format(nviews) cmd = check_vcrop(cmd, EZVARS['inout']['input_ROI']['value'], SECTIONS['reading']['y']['value'], SECTIONS['reading']['height']['value'], SECTIONS['reading']['y-step']['value'], wh[0]) if not EZVARS['RR']['use-ufo']['value']: # because second RR algorithm does not know how to work with multipage tiffs cmd += " --output-bytes-per-file 0" cmd += ' --flat-scale {}'.format(EZVARS['flat-correction']['flat-scale']['value']) cmd += f" --pass-size {n_per_pass}" return cmd def get_sinos_noffc_cmd(ctsetpath, tmpdir, nviews, wh, n_per_pass): in_proj_dir, out_pattern = fmt_in_out_path( EZVARS['inout']['tmp-dir']['value'], ctsetpath, EZVARS['inout']['tomo-dir']['value'], False ) cmd = "tofu sinos" cmd += " --projections {}".format(in_proj_dir) cmd += " --output {}".format(os.path.join(tmpdir, "sinos/sin-%04i.tif")) cmd += " --number {}".format(nviews) cmd = check_vcrop(cmd, EZVARS['inout']['input_ROI']['value'], SECTIONS['reading']['y']['value'], SECTIONS['reading']['height']['value'], SECTIONS['reading']['y-step']['value'], wh[0]) if not EZVARS['RR']['use-ufo']['value']: # because second RR algorithm does not know how to work with multipage tiffs cmd += " --output-bytes-per-file 0" cmd += f" --pass-size {n_per_pass}" return cmd def get_sinos2proj_cmd(proj_height, n_per_pass): quatsch, out_pattern = fmt_in_out_path(EZVARS['inout']['tmp-dir']['value'], 'quatsch', EZVARS['inout']['tomo-dir']['value'], True) in_proj_dir = os.path.join(EZVARS['inout']['tmp-dir']['value'], 'sinos-filt') cmd = 'tofu sinos' cmd += ' --projections {}'.format(in_proj_dir) cmd += ' --output {}'.format(out_pattern) if not EZVARS['inout']['input_ROI']['value']: cmd += ' --number {}'.format(proj_height) else: cmd += ' --number {}'.format(int(SECTIONS['reading']['height']['value'] / SECTIONS['reading']['y-step']['value'])) cmd += f" --pass-size {n_per_pass}" return cmd def get_sinFFC_cmd(ctset, reduction_mode="median"): indir = make_inpaths(ctset[0], ctset[1]) in_proj_dir, out_pattern = fmt_in_out_path(EZVARS['inout']['tmp-dir']['value'], ctset[0], EZVARS['inout']['tomo-dir']['value']) cmd = 'bmit_sin --fix-nan' cmd += ' --darks {} --flats {} --reduction-mode {} --projections {}'.format(indir[0], indir[1], reduction_mode, in_proj_dir) if ctset[1] == 4: cmd += ' --flats2 {}'.format(indir[3]) cmd += ' --output {}'.format(os.path.dirname(out_pattern)) cmd += ' --method {}'.format(EZVARS['flat-correction']['smart-ffc-method']['value']) cmd += ' --multiprocessing' cmd += ' --eigen-pco-repetitions {}'.format(EZVARS['flat-correction']['eigen-pco-reps']['value']) cmd += ' --eigen-pco-downsample {}'.format(EZVARS['flat-correction']['eigen-pco-downsample']['value']) cmd += ' --downsample {}'.format(EZVARS['flat-correction']['downsample']['value']) return cmd def get_pr_sinFFC_cmd(ctset, reduction_mode="median"): indir = make_inpaths(ctset[0], ctset[1]) in_proj_dir, out_pattern = fmt_in_out_path( EZVARS['inout']['tmp-dir']['value'], ctset[0], EZVARS['inout']['tomo-dir']['value']) cmd = 'bmit_sin --fix-nan' cmd += ' --darks {} --flats {} --reduction-mode {} --projections {}'.format(indir[0], indir[1], reduction_mode, in_proj_dir) if ctset[1] == 4: cmd += ' --flats2 {}'.format(indir[3]) cmd += ' --output {}'.format(os.path.dirname(out_pattern)) cmd += ' --method {}'.format(EZVARS['flat-correction']['smart-ffc-method']['value']) cmd += ' --multiprocessing' cmd += ' --eigen-pco-repetitions {}'.format(EZVARS['flat-correction']['eigen-pco-reps']['value']) cmd += ' --eigen-pco-downsample {}'.format(EZVARS['flat-correction']['eigen-pco-downsample']['value']) cmd += ' --downsample {}'.format(EZVARS['flat-correction']['downsample']['value']) return cmd def get_pr_tofu_cmd_sinFFC(ctset): # indir will format paths to flats darks and tomo2 correctly even if they were # pre-processed, however path to the input directory with projections # cannot be formatted with that command correctly # indir = make_inpaths(ctset[0], ctset[1]) # so we need a separate "universal" command which considers all previous steps in_proj_dir, out_pattern = fmt_in_out_path(EZVARS['inout']['tmp-dir']['value'], ctset[0], EZVARS['inout']['tomo-dir']['value']) # Phase retrieval cmd = 'tofu preprocess --delta 1e-6' cmd += ' --energy {} --propagation-distance {}' \ ' --pixel-size {} --regularization-rate {:0.2f}' \ .format(SECTIONS['retrieve-phase']['energy']['value'], SECTIONS['retrieve-phase']['propagation-distance']['value'][0], SECTIONS['retrieve-phase']['pixel-size']['value'], SECTIONS['retrieve-phase']['regularization-rate']['value']) cmd += ' --projections {}'.format(in_proj_dir) cmd += ' --output {}'.format(out_pattern) cmd += ' --projection-crop-after filter' return cmd def get_pr_tofu_cmd(ctset, reduction_mode="median"): # indir will format paths to flats darks and tomo2 correctly even if they were # pre-processed, however path to the input directory with projections # cannot be formatted with that command correctly indir = make_inpaths(ctset[0], ctset[1]) # so we need a separate "universal" command which considers all previous steps in_proj_dir, out_pattern = fmt_in_out_path(EZVARS['inout']['tmp-dir']['value'], ctset[0], EZVARS['inout']['tomo-dir']['value']) flats2_dir = indir[3] if ctset[1] == 4 else None return fmt_pr_cmd(indir[0], indir[1], in_proj_dir, flats2_dir, out_pattern, reduction_mode=reduction_mode) def fmt_pr_cmd(darks_dir, flats_dir, tomo_dir, flats2_dir, out_pattern, reduction_mode="median"): cmd = 'tofu preprocess --fix-nan-and-inf --projection-filter none --delta 1e-6' cmd += ' --darks {} --flats {} --reduction-mode {} --projections {}'.\ format(darks_dir, flats_dir, reduction_mode, tomo_dir) if flats2_dir: cmd += ' --flats2 {}'.format(flats2_dir) cmd += ' --output {}'.format(out_pattern) cmd += ' --energy {} --propagation-distance {}' \ ' --pixel-size {} --regularization-rate {:0.2f}' \ .format(SECTIONS['retrieve-phase']['energy']['value'], SECTIONS['retrieve-phase']['propagation-distance']['value'][0], SECTIONS['retrieve-phase']['pixel-size']['value'], SECTIONS['retrieve-phase']['regularization-rate']['value']) cmd += ' --flat-scale {}'.format(EZVARS['flat-correction']['flat-scale']['value']) return cmd def get_reco_cmd(ctset, out_pattern, ax, nviews, wh, ffc, pr, reduction_mode="median"): # direct CT reconstruction from input dir to output dir; # or CT reconstruction after preprocessing only indir = make_inpaths(ctset[0], ctset[1]) # correct location of proj folder in case if prepro was done in_proj_dir, quatsch = fmt_in_out_path(EZVARS['inout']['tmp-dir']['value'], ctset[0], EZVARS['inout']['tomo-dir']['value'], False) cmd = 'tofu reco' # Laminography ? if EZVARS['advanced']['more-reco-params']['value'] is True: cmd += check_lamino() elif EZVARS['advanced']['more-reco-params']['value'] is False: cmd += ' --overall-angle 180' ############## cmd += ' --projections {}'.format(in_proj_dir) cmd += ' --output {}'.format(out_pattern) if ffc: cmd += ' --fix-nan-and-inf' cmd += ' --darks {} --flats {} --reduction-mode {}'.format(indir[0], indir[1], reduction_mode) if ctset[1] == 4: # must be equivalent to len(indir)>3 cmd += ' --flats2 {}'.format(indir[3]) if not pr: cmd += ' --absorptivity' cmd += ' --flat-scale {}'.format(EZVARS['flat-correction']['flat-scale']['value']) if pr: cmd += ( " --disable-projection-crop" " --delta 1e-6" " --energy {} --propagation-distance {}" " --pixel-size {} --regularization-rate {:0.2f}" \ .format(SECTIONS['retrieve-phase']['energy']['value'], SECTIONS['retrieve-phase']['propagation-distance']['value'][0], SECTIONS['retrieve-phase']['pixel-size']['value'], SECTIONS['retrieve-phase']['regularization-rate']['value']) ) cmd += " --center-position-x {}".format(ax) # if args.nviews==0: cmd += " --number {}".format(nviews) # elif args.nviews>0: # cmd += ' --number {}'.format(args.nviews) cmd += ' --volume-angle-z {:0.5f}'.format(SECTIONS['general-reconstruction']['volume-angle-z']['value'][0]) # rows-slices to be reconstructed # full ROI b = int(np.ceil(wh[0] / 2.0)) a = -int(wh[0] / 2.0) c = 1 if EZVARS['inout']['input_ROI']['value']: if EZVARS['RR']['enable-RR']['value']: h2 = SECTIONS['reading']['height']['value'] / SECTIONS['reading']['y-step']['value'] / 2.0 b = np.ceil(h2) a = -int(h2) else: h2 = int(wh[0] / 2.0) a = SECTIONS['reading']['y']['value'] - h2 b = SECTIONS['reading']['y']['value'] + SECTIONS['reading']['height']['value'] - h2 c = SECTIONS['reading']['y-step']['value'] cmd += ' --region={},{},{}'.format(a, b, c) # crop of reconstructed slice in the axial plane b = wh[1] / 2 if EZVARS['inout']['output-ROI']['value']: if EZVARS['inout']['output-x']['value'] != 0 or EZVARS['inout']['output-width']['value'] != 0: cmd += ' --x-region={},{},{}'.format(EZVARS['inout']['output-x']['value'] - b, EZVARS['inout']['output-x']['value'] + EZVARS['inout']['output-width']['value'] - b, 1) if EZVARS['inout']['output-y']['value'] != 0 or EZVARS['inout']['output-height']['value'] != 0: cmd += ' --y-region={},{},{}'.format(EZVARS['inout']['output-y']['value'] - b, EZVARS['inout']['output-y']['value'] + EZVARS['inout']['output-height']['value'] - b, 1) # cmd = check_vcrop(cmd, EZVARS['inout']['input_ROI']['value'], SECTIONS['reading']['y']['value'], SECTIONS['reading']['height']['value'], SECTIONS['reading']['y-step']['value'], wh[0]) cmd = check_8bit(cmd, EZVARS['inout']['clip_hist']['value'], SECTIONS['general']['output-bitdepth']['value'], SECTIONS['general']['output-minimum']['value'], SECTIONS['general']['output-maximum']['value']) cmd = check_bigtif(cmd, EZVARS['inout']['bigtiff-output']['value']) # Optimization cmd += gpu_optim() return cmd def get_find_spots_cmd(tmpdir): ######### CREATE MASK ######### flat1_file = os.path.join(tmpdir, "flat-median.tif") mask_file = os.path.join(tmpdir, "mask.tif") cmd = 'tofu find-large-spots' cmd += f" --images {flat1_file}" cmd += f" --output {mask_file} --output-bytes-per-file 0" cmd += f" --spot-threshold {SECTIONS['find-large-spots']['spot-threshold']['value']}" cmd += f" --gauss-sigma {SECTIONS['find-large-spots']['gauss-sigma']['value']}" if SECTIONS['find-large-spots']['method']['value'] == 'median': cmd += f" --method median" cmd += f" --spot-threshold-mode {SECTIONS['find-large-spots']['spot-threshold-mode']['value']}" cmd += f" --median-direction {SECTIONS['find-large-spots']['median-direction']['value']}" cmd += f" --median-width {SECTIONS['find-large-spots']['median-width']['value']}" cmd += f" --grow-threshold {SECTIONS['find-large-spots']['grow-threshold']['value']}" cmd += f" --dilation-disk-radius {SECTIONS['find-large-spots']['dilation-disk-radius']['value']}" return cmd ufo-kit-tofu-ed0e5bd/tofu/ez/ufo_cmd_gen.py000066400000000000000000000274551521054151500210430ustar00rootroot00000000000000#!/bin/python """ Created on Apr 6, 2018 @author: gasilos """ import os from tofu.util import next_power_of_two from tofu.ez.params import EZVARS from tofu.config import SECTIONS from tofu.ez.util import enquote, make_inpaths, fmt_in_out_path def make_outpaths(lvl0, flats2): """ Creates a list of paths to flats/darks/tomo directories in tmp data only used in one place to format paths in the temporary directory :param lvl0: Root of directory containing flats/darks/tomo :param flats2: The type of directory: 3 contains flats/darks/tomo 4 contains flats/darks/tomo/flats2 :return: List of paths to the filtered darks/flats/tomo and flats2 (if used) """ indir = [] for i in [EZVARS['inout']['darks-dir']['value'], EZVARS['inout']['flats-dir']['value'], EZVARS['inout']['tomo-dir']['value']]: indir.append(os.path.join(lvl0, i)) if flats2 - 3: indir.append(os.path.join(lvl0, EZVARS['inout']['flats2-dir']['value'])) return indir def check_vcrop(cmd, vcrop, y, yheight, ystep): if vcrop: cmd += " --y {} --height {} --y-step {}".format(y, yheight, ystep) return cmd def check_bigtif(cmd, swi): if not swi: cmd += " bytes-per-file=0 tiff-bigtiff=False" return cmd def get_pr_ufo_cmd(nviews, wh): in_proj_dir, out_pattern = fmt_in_out_path(EZVARS['inout']['tmp-dir']['value'], "quatsch", EZVARS['inout']['tomo-dir']['value']) cmds = [] pad_width = next_power_of_two(wh[1] + 50) pad_height = next_power_of_two(wh[0] + 50) pad_x = (pad_width - wh[1]) / 2 pad_y = (pad_height - wh[0]) / 2 cmd = 'ufo-launch read path={} height={} number={}'.format(in_proj_dir, wh[0], nviews) cmd += ' ! pad x={} width={} y={} height={}'.format(pad_x, pad_width, pad_y, pad_height) cmd += ' addressing-mode=clamp_to_edge' cmd += ' ! fft dimensions=2 ! retrieve-phase' cmd += ' energy={} distance={} pixel-size={} regularization-rate={:0.2f}' \ .format(SECTIONS['retrieve-phase']['energy']['value'], SECTIONS['retrieve-phase']['propagation-distance']['value'][0], SECTIONS['retrieve-phase']['pixel-size']['value'], SECTIONS['retrieve-phase']['regularization-rate']['value']) cmd += ' ! ifft dimensions=2 crop-width={} crop-height={}' \ .format(pad_width, pad_height) cmd += ' ! crop x={} width={} y={} height={}'.format(pad_x, wh[1], pad_y, wh[0]) cmd += ' ! opencl kernel=\'absorptivity\' ! opencl kernel=\'fix_nan_and_inf\' !' cmd += ' write filename={}'.format(enquote(out_pattern)) cmds.append(cmd) if not EZVARS['inout']['keep-tmp']['value']: cmds.append('rm -rf {}'.format(in_proj_dir)) return cmds def get_filter1d_sinos_cmd(tmpdir, RR, nviews): sin_in = os.path.join(tmpdir, 'sinos') out_pattern = os.path.join(tmpdir, 'sinos-filt/sin-%04i.tif') pad_height = next_power_of_two(nviews + 500) pad_y = (pad_height - nviews) / 2 cmd = 'ufo-launch read path={}'.format(sin_in) cmd += ' ! pad y={} height={}'.format(pad_y, pad_height) cmd += ' addressing-mode=clamp_to_edge' cmd += ' ! transpose ! fft dimensions=1 ! filter-stripes1d strength={}'.format(RR) cmd += ' ! ifft dimensions=1 ! transpose' cmd += ' ! crop y={} height={}'.format(pad_y, nviews) cmd += ' ! write filename={}'.format(enquote(out_pattern)) return cmd def get_filter2d_sinos_cmd(tmpdir, sig_hor, sig_ver, nviews, w): sin_in = os.path.join(tmpdir, "sinos") out_pattern = os.path.join(tmpdir, "sinos-filt/sin-%04i.tif") pad_height = next_power_of_two(nviews + 500) pad_y = (pad_height - nviews) / 2 pad_width = next_power_of_two(w + 500) pad_x = (pad_width - w) / 2 cmd = "ufo-launch read path={}".format(sin_in) cmd += " ! pad x={} width={} y={} height={}".format(pad_x, pad_width, pad_y, pad_height) cmd += " addressing-mode=mirrored_repeat" cmd += " ! fft dimensions=2 ! filter-stripes horizontal-sigma={} vertical-sigma={}".format( sig_hor, sig_ver ) cmd += " ! ifft dimensions=2 crop-width={} crop-height={}".format(pad_width, pad_height) cmd += " ! crop x={} width={} y={} height={}".format(pad_x, w, pad_y, nviews) cmd += " ! write filename={}".format(enquote(out_pattern)) return cmd def get_pre_cmd( ctset, pre_cmd, tmpdir): indir = make_inpaths(ctset[0], ctset[1]) outdir = make_outpaths(tmpdir, ctset[1]) # add index to the name of the output directory with projections # if enabled preprocessing is always the first step outdir[2] = os.path.join(tmpdir, "proj-step1") # we also must create this directory to format paths correctly if not os.path.exists(outdir[2]): os.makedirs(outdir[2]) cmds = [] for i, fol in enumerate(indir): in_pattern = os.path.join(fol, "*.tif") out_pattern = os.path.join(outdir[i], "frame-%04i.tif") cmds.append("ufo-launch") cmds[i] += " read path={} ! ".format(enquote(in_pattern)) cmds[i] += pre_cmd cmds[i] += " ! write filename={}".format(enquote(out_pattern)) return cmds def get_inp_cmd(ctset, tmpdir, N, nviews, reduction_mode="median"): indir = make_inpaths(ctset[0], ctset[1]) cmds = [] # ######### CREATE MASK ######### # flat1_file = os.path.join(tmpdir, "flat-median.tif") mask_file = os.path.join(tmpdir, "mask.tif") # # generate mask # cmd = 'tofu find-large-spots --images {}'.format(flat1_file) # cmd += ' --spot-threshold {} --gauss-sigma {}'.format( # SECTIONS['find-large-spots']['spot-threshold']['value'], # SECTIONS['find-large-spots']['gauss-sigma']['value']) # # cmd += " --method median --median-width 20 --dilation-disk-radius 3 --gauss-sigma 100.0" \ # # " --spot-threshold 3800.0 --spot-threshold-mode absolute --grow-threshold 350.0" \ # # " --find-large-spots-padding-mode mirrored_repeat" # cmd += ' --output {} --output-bytes-per-file 0'.format(mask_file) # cmds.append(cmd) ######### FLAT-CORRECT ######### in_proj_dir, out_pattern = fmt_in_out_path(EZVARS['inout']['tmp-dir']['value'], ctset[0], EZVARS['inout']['tomo-dir']['value']) if EZVARS['flat-correction']['smart-ffc']['value']: cmd = 'bmit_sin --fix-nan' cmd += ' --darks {} --flats {}'.format(indir[0], indir[1]) cmd += ' --projections {}'.format(in_proj_dir) cmd += ' --output {}'.format(os.path.dirname(out_pattern)) cmd += ' --multiprocessing' #cmd += ' --output {}'.format(out_pattern) if ctset[1] == 4: cmd += ' --flats2 {}'.format(indir[3]) # Add options for eigen-pco-repetitions etc. cmd += ' --eigen-pco-repetitions {}'.format(EZVARS['flat-correction']['eigen-pco-reps']['value']) cmd += ' --eigen-pco-downsample {}'.format(EZVARS['flat-correction']['eigen-pco-downsample']['value']) cmd += ' --downsample {}'.format(EZVARS['flat-correction']['downsample']['value']) #if not SECTIONS['retrieve-phase']['enable-phase']['value']: # cmd += ' --absorptivity' ???? # Todo: check if takes neglog? or only computes transmission? # in case of latter add absorptivity and fix nans cmds.append(cmd) elif not EZVARS['flat-correction']['smart-ffc']['value']: cmd = 'tofu flatcorrect --fix-nan-and-inf' cmd += ' --darks {} --flats {} --reduction-mode {}'.format(indir[0], indir[1], reduction_mode) cmd += ' --projections {}'.format(in_proj_dir) cmd += ' --output {}'.format(out_pattern) if ctset[1] == 4: cmd += ' --flats2 {}'.format(indir[3]) if not EZVARS['retrieve-phase']['apply-pr']['value']: cmd += ' --absorptivity --fix-nan-and-inf' cmd += ' --flat-scale {}'.format(EZVARS['flat-correction']['flat-scale']['value']) cmds.append(cmd) if not EZVARS['inout']['keep-tmp']['value'] and EZVARS['inout']['preprocess']['value']: cmds.append('rm -rf {}'.format(indir[0])) cmds.append('rm -rf {}'.format(indir[1])) cmds.append('rm -rf {}'.format(in_proj_dir)) if len(indir) > 3: cmds.append("rm -rf {}".format(indir[3])) ######### INPAINT ######### in_proj_dir, out_pattern = fmt_in_out_path(EZVARS['inout']['tmp-dir']['value'], ctset[0], EZVARS['inout']['tomo-dir']['value']) cmd = "ufo-launch [read path={} height={} number={}".format(in_proj_dir, N, nviews) cmd += ", read path={}]".format(mask_file) cmd += " ! horizontal-interpolate ! " cmd += "write filename={}".format(enquote(out_pattern)) cmds.append(cmd) if not EZVARS['inout']['keep-tmp']['value']: cmds.append("rm -rf {}".format(in_proj_dir)) return cmds def get_crop_sli(out_pattern): cmd = 'ufo-launch read path={}/*.tif ! '.format(os.path.dirname(out_pattern)) cmd += 'crop x={} width={} y={} height={} ! '. \ format(EZVARS['inout']['output-x']['value'], EZVARS['inout']['output-width']['value'], EZVARS['inout']['output-y']['value'], EZVARS['inout']['output-height']['value']) cmd += 'write filename={}'.format(out_pattern) if EZVARS['inout']['clip_hist']['value']: cmd += ' bits=8 rescale=False' return cmd def fmt_nlmdn_ufo_cmd(inpath: str, outpath: str): """ :param inp: Path to input directory before NLMDN applied :param out: Path to output directory after NLMDN applied :return: """ cmd = 'ufo-launch read path={}'.format(inpath) cmd += ' ! non-local-means patch-radius={}'.format(EZVARS['nlmdn']['patch-radius']['value']) cmd += ' search-radius={}'.format(EZVARS['nlmdn']['search-radius']['value']) cmd += ' h={}'.format(EZVARS['nlmdn']['h']['value']) cmd += ' sigma={}'.format(EZVARS['nlmdn']['sigma']['value']) cmd += ' window={}'.format(EZVARS['nlmdn']['window']['value']) cmd += ' fast={}'.format(EZVARS['nlmdn']['fast']['value']) cmd += ' estimate-sigma={}'.format(EZVARS['nlmdn']['estimate-sigma']['value']) cmd += ' ! write filename={}'.format(enquote(outpath)) if not EZVARS['nlmdn']['bigtiff_output']['value']: cmd += " bytes-per-file=0 tiff-bigtiff=False" if EZVARS['inout']['clip_hist']['value']: cmd += f" bits={SECTIONS['general']['output-bitdepth']['value']} rescale=False" return cmd def fmt_stitch_cmd(inpath, bigtiff, bits, outpath, num, w, ax, cro=0, reduction_mode=None): cmd = 'ufo-launch' st = 'start' if bigtiff: st = 'image-start' start = num if num == 0: # Single image treated as a pair (darks / flats) start = 0 num = 1 set_1 = f"read path={inpath} {st}={start} number={num}" set_2 = f"read path={inpath} number={num}" if reduction_mode == 'average': set_2 = set_2 + " ! average" set_1 = set_2 elif reduction_mode == 'median': set_2 = set_2 + f" ! stack number={num} ! flatten mode=median" set_1 = set_2 if ax <= w // 2: cmd += f" [{set_1} ! flip," \ f" {set_2}]" \ f" ! stitch shift={w - 2*ax}" else: cmd += f" [{set_2} ! flip,"\ f" {set_1}]" \ f" ! stitch shift={w - 2*ax}" ax = w - ax cmd += " blend=True adjust-mean=TRUE !" # crop if cro != 0: cmd += f" crop x={cro} width={2*(w - ax - cro)} !" # checking that after multiplication values are within the valid range for the # respective input data type lim = 65535 if bits == 8: lim = 255 if (bits == 16) or (bits == 8): cmd += f" calculate expression=\"'v < 0 ? 0 : (v > {lim} ? {lim} : v)'\" !" cmd += f" write filename={os.path.join(outpath, 'stitched-%04i.tif')}" if (bits == 16) or (bits == 8): cmd += f" bits={bits} rescale=FALSE" #print(cmd) return cmdufo-kit-tofu-ed0e5bd/tofu/ez/util.py000066400000000000000000000544341521054151500175500ustar00rootroot00000000000000""" Created on Apr 20, 2020 @author: gasilos """ import os, glob, tifffile import shutil from tofu.ez.ctdir_walker import VALID_EXTS from tofu.ez.params import EZVARS, EZVARS_aux from tofu.config import SECTIONS from tofu.util import get_filenames, get_first_filename, get_image_shape, read_image, restrict_value, tupleize from PyQt5.QtCore import QRegExp from PyQt5.QtGui import QRegExpValidator import argparse from tofu.util import TiffSequenceReader import numpy as np import yaml import logging def get_dims(pth): # get number of projections and projections dimensions first_proj = get_first_filename(pth, valid_exts=VALID_EXTS) multipage = False try: shape = get_image_shape(first_proj) except ImportError: raise except: raise ValueError(f"Failed to determine size and number of images in {pth} from {first_proj}") if len(shape) == 2: # single page input return len(get_filenames(pth)), [shape[-2], shape[-1]], multipage elif len(shape) == 3: # multipage input nviews = 0 for i in get_filenames(pth): nviews += get_image_shape(i)[0] multipage = True return nviews, [shape[-2], shape[-1]], multipage return -6, [-6, -6] def get_data_cube_info(pth): ext = os.path.splitext(get_first_filename(pth, valid_exts=VALID_EXTS))[1] im_names = glob.glob(os.path.join(pth, '*' + ext)) nslices = len(im_names) im = read_image(im_names[0]) N, M = im.shape tmp = im.dtype bit = 0; dt = 'unsupported' if tmp == 'uint8': bit = 8; dt = 'uint8' elif tmp == 'uint16': bit = 16; dt = 'uint16' elif tmp == 'float32': bit = 32; dt = 'float32' ram_amount_bytes = os.sysconf('SC_PAGE_SIZE') * os.sysconf('SC_PHYS_PAGES') n_per_pass = int(0.9 * ram_amount_bytes / (N * M * 4)) return nslices, N, M, bit, dt, n_per_pass, ext def bad_vert_ROI(multipage, path2proj, y, height): if multipage: with tifffile.TiffFile(get_filenames(path2proj)[0]) as tif: proj = tif.pages[0].asarray().astype(float) else: proj = read_image(get_filenames(path2proj)[0]).astype(float) y_region = slice(y, min(y + height, proj.shape[0]), 1) proj = proj[y_region, :] if proj.shape[0] == 0: return True else: return False def make_copy_of_flat(flatdir, flat_copy_name, dryrun): first_flat_file = get_first_filename(flatdir) try: shape = get_image_shape(first_flat_file) except: raise ValueError("Failed to determine size and number of flats in {}".format(flatdir)) cmd = "" if len(shape) == 2: last_flat_file = get_filenames(flatdir)[-1] cmd = "cp {} {}".format(last_flat_file, flat_copy_name) else: flat = read_image(get_filenames(flatdir)[-1])[-1] if dryrun: cmd = 'echo Will save a copy of flat into "{}"'.format(flat_copy_name) else: tifffile.imwrite(flat_copy_name, flat) # something isn't right in this logic? It used to work but then # stopped to create a copy of flat correctly. Going to point to all flats simply return cmd def clean_tmp_dirs(tmpdir, fdt_names): tmp_pattern = ["proj", "sino", "mask", "flat", "dark", "radi"] tmp_pattern += fdt_names # clean directories in tmpdir if their names match pattern if os.path.exists(tmpdir): for filename in os.listdir(tmpdir): if filename[:4] in tmp_pattern: path = os.path.join(tmpdir, filename) if os.path.isdir(path): shutil.rmtree(path) else: os.remove(path) def make_inpaths(lvl0, flats2): """ Creates a list of paths to flats/darks/tomo directories :param lvl0: Root of directory containing flats/darks/tomo :param flats2: The type of directory: 3 contains flats/darks/tomo 4 contains flats/darks/tomo/flats2 :return: List of abs paths to the directories containing darks/flats/tomo and flats2 (if used) """ indir = [] # If using flats/darks/flats2 in same dir as tomo # or darks/flats were processed and are already in temporary directory if not EZVARS['inout']['shared-flatsdarks']['value'] or \ EZVARS['inout']['shared-df-used']['value']: for i in [EZVARS['inout']['darks-dir']['value'], EZVARS['inout']['flats-dir']['value'], EZVARS['inout']['tomo-dir']['value']]: indir.append(os.path.join(lvl0, i)) if flats2 - 3: indir.append(os.path.join(lvl0, EZVARS['inout']['flats2-dir']['value'])) return indir # If using common flats/darks/flats2 across multiple reconstructions # and that is the first occasion when they are required elif EZVARS['inout']['shared-flatsdarks']['value'] and \ not EZVARS['inout']['shared-df-used']['value']: indir.append(EZVARS['inout']['path2-shared-darks']['value']) indir.append(EZVARS['inout']['path2-shared-flats']['value']) indir.append(os.path.join(lvl0, EZVARS['inout']['tomo-dir']['value'])) if EZVARS['inout']['shared-flats-after']['value']: indir.append(EZVARS['inout']['path2-shared-flats2']['value']) if (EZVARS['COR']['search-method']['value'] != 1) and (EZVARS['COR']['search-method']['value'] != 2): # if axis search is using shared darks/flats, we still have to use them once more for ffc add_value_to_dict_entry(EZVARS['inout']['shared-df-used'], True) return indir _PROJ_STEPS = 0 def reset_proj_steps(): global _PROJ_STEPS _PROJ_STEPS = 0 def fmt_in_out_path(tmpdir, indir, raw_proj_dir_name, croutdir=True): global _PROJ_STEPS # suggests input and output path to directory with proj # depending on number of processing steps applied so far if _PROJ_STEPS == 0: # no projections in temporary directory in_proj_dir = os.path.join(indir, raw_proj_dir_name) elif _PROJ_STEPS > 0: # there are directories proj-stepX in tmp dir in_proj_dir = os.path.join(tmpdir, f"proj-step{_PROJ_STEPS}") else: raise ValueError("Something is wrong with in/out filenames") out_step = _PROJ_STEPS + 1 out_proj_dir = os.path.join(tmpdir, f"proj-step{out_step}") # create output directory and advance the pipeline step if croutdir: _PROJ_STEPS = out_step if not os.path.exists(out_proj_dir): os.makedirs(out_proj_dir) # return names of input directory and output pattern with abs path return in_proj_dir, os.path.join(out_proj_dir, "proj-%04i.tif") def enquote(string, escape=False): addition = '\\"' if escape else '"' return addition + string + addition def extract_values_from_dict(dict): """Return a list of values to be saved as a text file""" new_dict = {} for key1 in dict.keys(): new_dict[key1] = {} for key2 in dict[key1].keys(): dict_entry = dict[key1][key2] if 'value' in dict_entry: new_dict[key1][key2] = {} value_type = type(dict_entry['value']) #print(key1, key2, dict_entry) if dict_entry['value'] is None: new_dict[key1][key2]['value'] = None elif value_type is list or value_type is tuple: new_dict[key1][key2]['value'] = str(reverse_tupleize()(dict_entry['value'])) else: new_dict[key1][key2]['value'] = dict_entry['value'] if key1 == 'axes-list': new_dict[key1][key2] = dict_entry return new_dict def import_values_from_dict(dict, imported_dict): """Import a list of values from an imported dictionary""" for key1 in imported_dict.keys(): if key1 == 'axes-list': for key2 in imported_dict[key1].keys(): dict[key1][key2] = imported_dict[key1][key2] else: for key2 in imported_dict[key1].keys(): add_value_to_dict_entry(dict[key1][key2], imported_dict[key1][key2]['value']) def export_values(filePath, param_sections): """Export the values of EZVARS and SECTIONS as a YAML file""" combined_dict = {} for i in param_sections: if i == 'ezvars_aux': try: combined_dict['ezvars_aux'] = extract_values_from_dict(EZVARS_aux) except: print("Error: cannot import EZVARS_aux section") return 1 if i == 'tofu': try: combined_dict['sections'] = extract_values_from_dict(SECTIONS) except: print("Error: cannot import TOFU section") return 1 if i == 'ezvars': try: combined_dict['ezvars'] = extract_values_from_dict(EZVARS) except: print("Error: cannot import EZVARS section") return 1 print("Exporting values to: " + str(filePath)) #print(combined_dict) write_yaml(filePath, combined_dict) print("Finished exporting") return 0 def import_values(filePath, param_sections): """Import EZVARS and SECTIONS from a YAML file""" #param_sections options: ['ezvars', 'tofu', 'ezvars_aux'] print("Importing values from: " +str(filePath)) yaml_data = dict(read_yaml(filePath)) for i in param_sections: if i == 'ezvars': try: import_values_from_dict(EZVARS, yaml_data['ezvars']) except: print("Error: cannot import EZVARS section") return 1 if i == 'tofu': try: import_values_from_dict(SECTIONS, yaml_data['sections']) except: print("Error: cannot import TOFU section") return 1 if i == 'ezvars_aux': try: import_values_from_dict(EZVARS_aux, yaml_data['ezvars_aux']) except: print("Error: cannot import EZVARS_aux section") return 1 print("Finished importing") return 0 #print(yaml_data) def save_params(ctsetname, ax, nviews, wh): if not EZVARS['inout']['dryrun']['value'] and not os.path.exists(EZVARS['inout']['output-dir']['value']): os.makedirs(EZVARS['inout']['output-dir']['value']) tmp = os.path.join(EZVARS['inout']['output-dir']['value'], ctsetname) if not EZVARS['inout']['dryrun']['value'] and not os.path.exists(tmp): os.makedirs(tmp) if not EZVARS['inout']['dryrun']['value'] and EZVARS['inout']['save-params']['value']: # Dump the params .yaml file try: filepath = os.path.join(tmp, "tofuez_all_parameters.yaml") export_values(filepath, ['ezvars', 'tofu', 'ezvars_aux']) except FileNotFoundError: print("Something went wrong when exporting the .yaml parameters file") # Dump the reco.params output file fname = os.path.join(tmp, 'reco_params_simple.txt') f = open(fname, 'w') f.write('*** General ***\n') f.write('Input directory {}\n'.format(EZVARS['inout']['input-dir']['value'])) if ctsetname == '': ctsetname = '.' f.write('CT set {}\n'.format(ctsetname)) if EZVARS['COR']['search-method']['value'] == 1 or EZVARS['COR']['search-method']['value'] == 2: f.write('Center of rotation {} (auto estimate)\n'.format(ax)) elif EZVARS['COR']['search-method']['value'] == 3: f.write('Center of rotation {} (user defined)\n'.format(ax)) else: f.write('Center of rotation {} (half acq mode data)\n'.format(ax)) f.write('Dimensions of projections {} x {} (height x width)\n'.format(wh[0], wh[1])) f.write('Number of projections {}\n'.format(nviews)) f.write('*** Preprocessing ***\n') tmp = 'None' if EZVARS['inout']['preprocess']['value']: tmp = EZVARS['inout']['preprocess-command']['value'] f.write(' '+tmp+'\n') f.write('*** Image filters ***\n') if EZVARS['filters']['rm_spots']['value']: f.write(' Remove large spots enabled\n') f.write(' threshold {}\n'.format(SECTIONS['find-large-spots']['spot-threshold']['value'])) f.write(' sigma {}\n'.format(SECTIONS['find-large-spots']['gauss-sigma']['value'])) if EZVARS['filters']['rm_spots_use_median']['value']: f.write(' Median filter was used to find spots\n') # for i in SECTIONS['find-large-spots'].keys(): # f.write(f"\t{i}\t{SECTIONS['find-large-spots'][i]['value']}\n") f.write(f"\tMedian width {SECTIONS['find-large-spots']['median-width']['value']}\n") f.write(f"\tDilation disk radius {SECTIONS['find-large-spots']['dilation-disk-radius']['value']}\n") f.write(f"\tGrow threshold {SECTIONS['find-large-spots']['grow-threshold']['value']}\n") f.write(f"\tThreshold mode {SECTIONS['find-large-spots']['spot-threshold-mode']['value']}\n") f.write(f"\tMedian direction {SECTIONS['find-large-spots']['median-direction']['value']}\n") else: f.write(' Remove large spots disabled\n') if EZVARS['retrieve-phase']['apply-pr']['value']: f.write(' Phase retrieval enabled\n') f.write(' energy {} keV\n'.format(SECTIONS['retrieve-phase']['energy']['value'])) f.write(' pixel size {:0.1f} um\n'.format(SECTIONS['retrieve-phase']['pixel-size']['value'] * 1e6)) f.write(' sample-detector distance {} m\n'.format(SECTIONS['retrieve-phase']['propagation-distance']['value'][0])) f.write(f" delta/beta ratio {10**SECTIONS['retrieve-phase']['regularization-rate']['value']}\n") else: f.write(' Phase retrieval disabled\n') f.write('*** Ring removal ***\n') if EZVARS['RR']['enable-RR']['value']: if EZVARS['RR']['use-ufo']['value']: tmp = '2D' if EZVARS['RR']['ufo-2d']['value']: tmp = '1D' f.write(' RR with ufo {} stripes filter\n'.format(tmp)) f.write(f' sigma horizontal {EZVARS["RR"]["sx"]["value"]}') f.write(f' sigma vertical {EZVARS["RR"]["sy"]["value"]}') else: if EZVARS['RR']['spy-rm-wide']['value']: tmp = ' RR with ufo sarepy remove wide filter, ' tmp += 'window {}, SNR {}\n'.format( EZVARS['RR']['spy-wide-window']['value'], EZVARS['RR']['spy-wide-SNR']['value']) f.write(tmp) f.write(' ' 'RR with ufo sarepy sorting filter, window {}\n'. format(EZVARS['RR']['spy-narrow-window']['value']) ) else: f.write('RR disabled\n') f.write('*** Region of interest ***\n') if EZVARS['inout']['input_ROI']['value']: f.write('Vertical ROI defined\n') f.write(' first row {}\n'.format(SECTIONS['reading']['y']['value'])) f.write(' height {}\n'.format(SECTIONS['reading']['height']['value'])) f.write(' reconstruct every {}th row\n'.format(SECTIONS['reading']['y-step']['value'])) else: f.write('Vertical ROI: all rows\n') if EZVARS['inout']['output-ROI']['value']: f.write('ROI in slice plane defined\n') f.write(' x {}\n'.format(EZVARS['inout']['output-x']['value'])) f.write(' width {}\n'.format(EZVARS['inout']['output-width']['value'])) f.write(' y {}\n'.format(EZVARS['inout']['output-y']['value'])) f.write(' height {}\n'.format(EZVARS['inout']['output-height']['value'])) else: f.write('ROI in slice plane not defined\n') f.write('*** Reconstructed values ***\n') if EZVARS['inout']['clip_hist']['value']: f.write(' {} bit\n'.format(SECTIONS['general']['output-bitdepth']['value'])) f.write(' Min value in 32-bit histogram {}\n'.format(SECTIONS['general']['output-minimum']['value'])) f.write(' Max value in 32-bit histogram {}\n'.format(SECTIONS['general']['output-maximum']['value'])) else: f.write(' 32bit, histogram untouched\n') f.write('*** Optional reco parameters ***\n') if SECTIONS['general-reconstruction']['volume-angle-z']['value'][0] > 0: f.write(' Rotate volume by: {:0.3f} deg\n'.format(SECTIONS['general-reconstruction']['volume-angle-z']['value'][0])) f.close() ### ALL The following was added by Philmo Gu. I moved it to tofu/ez/utils. . # The important function def add_value_to_dict_entry(dict_entry, value): """Add a value to a dictionary entry. An empty string will insert the ezdefault value""" if 'action' in dict_entry: # no 'type' can be defined in dictionary entries with 'action' key dict_entry['value'] = bool(value) return elif value == '' or value == None: # takes default value if empty string or null if dict_entry['ezdefault'] is None: dict_entry['value'] = dict_entry['ezdefault'] else: dict_entry['value'] = dict_entry['type'](dict_entry['ezdefault']) else: try: dict_entry['value'] = dict_entry['type'](value) except argparse.ArgumentTypeError: # Outside of range of type dict_entry['value'] = dict_entry['type'](value, clamp=True) except ValueError: # int can't convert string with decimal (e.g. "1.0" -> 1) dict_entry['value'] = dict_entry['type'](float(value)) # Few things are helpful but most are not used or not fully implemented def get_ascii_validator(): """Returns a validator that only allows the input of visible ASCII characters""" regexp = "[-A-Za-z0-9_]*" return QRegExpValidator(QRegExp(regexp)) def get_alphabet_lowercase_validator(): """Returns a validator that only allows the input of lowercase ASCII characters""" regexp = "[a-z]*" return QRegExpValidator(QRegExp(regexp)) def get_int_validator(): """Returns a validator that only allows the input of integers""" # Note: QIntValidator allows commas, which is undesirable regexp = "[\-]?[0-9]*" return QRegExpValidator(QRegExp(regexp)) def get_double_validator(): """Returns a validator that only allows the input of floating point number""" # Note: QDoubleValidator allows commas before period, which is undesirable regexp = "[\-]?[0-9]*[.]?[0-9]*" return QRegExpValidator(QRegExp(regexp)) def get_tuple_validator(): """Returns a validator that only allows a tuple of floating point numbers""" regexp = "[-0-9,.]*" return QRegExpValidator(QRegExp(regexp)) def load_values_from_ezdefault(dict): """Add or replace values from ezdefault in a dictionary""" for key1 in dict.keys(): for key2 in dict[key1].keys(): dict_entry = dict[key1][key2] if 'ezdefault' in dict_entry: add_value_to_dict_entry(dict_entry, '') # Add default value def restrict_tupleize(limits, num_items=None, conv=float, dtype=tuple): """Convert a string of numbers separated by commas to tuple with *dtype* and make sure it is within *limits* (included) specified as tuple (min, max). If one of the limits values is None it is ignored.""" def check(value=None, clamp=False): if value is None: return limits results = tupleize(num_items, conv, dtype)(value) for v in results: restrict_value(limits, dtype=conv)(v, clamp) return results return check def reverse_tupleize(num_items=None, conv=float): """Convert a tuple into a comma-separted string of *value*""" def combine_to_string(value): """Combine a tuple of numbers into a comma-separated string""" result = "" if num_items and len(result) != num_items: # A certain number of output is expected raise argparse.ArgumentTypeError('Expected {} items'.format(num_items)) if (len(value) == 0): # No tuple to convert into string return result # Tuple with non-zero lengthh for v in value: result = result + "," + str(conv(v)) result = result[1:] # Remove the erroneous first period return result return combine_to_string def get_median_flat(path2flat): tsr = TiffSequenceReader(path2flat) tmp = tsr.read(0) data = np.empty((tsr.num_images, tmp.shape[0], tmp.shape[1]), np.uint16) for i in range(tsr.num_images): data[i, :, :] = tsr.read(i) tsr.close() x = np.median(data, axis=0) del data return x def get_mean_flat(path2flat): tsr = TiffSequenceReader(path2flat) tmp = tsr.read(0) data = np.empty((tsr.num_images, tmp.shape[0], tmp.shape[1]), np.uint16) for i in range(tsr.num_images): data[i, :, :] = tsr.read(i) tsr.close() x = np.mean(data, axis=0) del data return x def read_yaml(filePath): with open(filePath) as f: data = yaml.load(f, Loader=yaml.FullLoader) return data def write_yaml(filePath, params): try: file = open(filePath, "w") except FileNotFoundError: print('Cannot write yaml file') else: yaml.dump(params, file) file.close() def check_that_num_failed(vals): vals = vals.split(',') # check that all comma separated entries # in the input string for i in range(len(vals)): try: float(vals[i]) except: return 1 return 0 def get_fdt_names(): return [EZVARS['inout']['darks-dir']['value'], EZVARS['inout']['flats-dir']['value'], EZVARS['inout']['tomo-dir']['value'], EZVARS['inout']['flats2-dir']['value']] def get_fd_names(): return tuple(EZVARS['inout'][f'{fd_type}-dir']['value'] for fd_type in ['darks', 'flats', 'flats2']) ufo-kit-tofu-ed0e5bd/tofu/find_large_spots.py000066400000000000000000000136201521054151500214670ustar00rootroot00000000000000import logging from gi.repository import Ufo from tofu.util import ( get_filtering_padding, set_node_props, determine_shape, read_image, setup_read_task, setup_padding, write_image ) from tofu.tasks import get_task, get_writer LOG = logging.getLogger(__name__) def find_large_spots_median(args): import numpy as np import skimage.morphology as sm import tifffile from skimage.filters import median from skimage.measure import label from skimage.restoration import estimate_sigma from scipy.ndimage import binary_fill_holes images = read_image(args.images, allow_multi=True) if args.averaging_mode == "first": image = images[0] if args.averaging_mode == "mean": image = np.mean(images, axis=0) if args.averaging_mode == "median": image = np.median(images, axis=0) mask = np.zeros_like(image, dtype=np.uint8) if args.median_direction == 'both': kernel = sm.disk(args.median_width // 2) else: kernel = np.ones(args.median_width) if args.median_direction == 'vertical': kernel = kernel[:, np.newaxis] else: kernel = kernel[np.newaxis] med = median(image, kernel) diff = image.astype(float) - med if args.spot_threshold_mode == "absolute": diff = np.abs(diff) elif args.spot_threshold_mode == "below": diff = -diff if args.blurred_output: tifffile.imsave(args.blurred_output, diff.astype(image.dtype)) if args.spot_threshold == 0: hist, bins = np.histogram(diff, bins=256) pdf = hist / diff.size args.spot_threshold = bins[np.where(np.cumsum(pdf) > 0.99)][0] LOG.info(f"Automatically determined spot-threshold: {args.spot_threshold}") if args.grow_threshold == 0: # 4.29 for FWTM args.grow_threshold = 4.29 * estimate_sigma(diff) LOG.info(f"Automatically determined grow-threshold: {args.grow_threshold}") # First, pixels which are above threshold are marked mask[diff > args.spot_threshold] = 1 label_high = label(mask) # Then the ones which are connected to the bright ones and above a lower threshold mask_low = np.zeros_like(mask) mask_low[diff > args.grow_threshold] = 1 label_low = label(mask_low) mask_low[:] = 0 for i in range(1, label_high.max() + 1): indices = np.where(label_high == i) low_i = label_low[indices].max() low_indices = np.where(label_low == low_i) if len(low_indices[0]) <= args.max_spot_size: mask_low[low_indices] = 1 mask = sm.dilation(mask_low, sm.disk(args.dilation_disk_radius)) mask = binary_fill_holes(mask) write_image(args.output, mask.astype(np.float32)) def find_large_spots(args): graph = Ufo.TaskGraph() sched = Ufo.FixedScheduler() reader = get_task('read') writer = get_writer(args) if args.gauss_sigma and args.blurred_output: broadcast = Ufo.CopyTask() blurred_writer = get_task('write') if hasattr(blurred_writer.props, 'bytes_per_file'): blurred_writer.props.bytes_per_file = 0 if hasattr(blurred_writer.props, 'tiff_bigtiff'): blurred_writer.props.tiff_bigtiff = False blurred_writer.props.filename = args.blurred_output find = get_task('find-large-spots') set_node_props(find, args) find.props.addressing_mode = args.find_large_spots_padding_mode set_node_props(reader, args) setup_read_task(reader, args.images, args) if args.gauss_sigma: width, height = determine_shape(args, path=args.images) pad = get_task('pad') crop = get_task('crop') if args.vertical_sigma: pad_width = 0 pad_height = get_filtering_padding(height) fft = get_task('fft', dimensions=2) ifft = get_task('ifft', dimensions=2) filter_stripes = get_task( 'filter-stripes', vertical_sigma=args.gauss_sigma, horizontal_sigma=0.0 ) graph.connect_nodes(reader, pad) if args.transpose_input: transpose = get_task('transpose') itranspose = get_task('transpose') graph.connect_nodes(pad, transpose) graph.connect_nodes(transpose, fft) else: graph.connect_nodes(pad, fft) graph.connect_nodes(fft, filter_stripes) graph.connect_nodes(filter_stripes, ifft) if args.transpose_input: graph.connect_nodes(ifft, itranspose) graph.connect_nodes(itranspose, crop) else: graph.connect_nodes(ifft, crop) last = crop else: reader_2 = get_task('read') set_node_props(reader_2, args) setup_read_task(reader_2, args.images, args) opencl = get_task('opencl', kernel='diff', filename='opencl.cl') gauss_size = int(10 * args.gauss_sigma) pad_width = pad_height = gauss_size LOG.debug("Gauss size: %d", gauss_size) blur = get_task('blur', sigma=args.gauss_sigma, size=gauss_size) graph.connect_nodes_full(reader, opencl, 0) graph.connect_nodes(reader_2, pad) graph.connect_nodes(pad, blur) graph.connect_nodes(blur, crop) graph.connect_nodes_full(crop, opencl, 1) last = opencl setup_padding(pad, width, height, args.find_large_spots_padding_mode, crop=crop, pad_width=pad_width, pad_height=pad_height) if args.blurred_output: graph.connect_nodes(last, broadcast) graph.connect_nodes(broadcast, blurred_writer) source = broadcast else: source = last graph.connect_nodes(source, find) else: graph.connect_nodes(reader, find) graph.connect_nodes(find, writer) sched.run(graph) ufo-kit-tofu-ed0e5bd/tofu/flow/000077500000000000000000000000001521054151500165405ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/tofu/flow/__init__.py000066400000000000000000000000001521054151500206370ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/tofu/flow/composites/000077500000000000000000000000001521054151500207255ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/tofu/flow/composites/ffc-links.cm000066400000000000000000000221021521054151500231170ustar00rootroot00000000000000{ "name": "CFlatFieldCorrect", "caption": "CFlatFieldCorrect", "models": { "Flat Field Correct": { "model": { "caption": "Flat Field Correct", "properties": { "fix-nan-and-inf": [ true, true ], "absorption-correct": [ true, true ], "sinogram-input": [ false, false ], "dark-scale": [ 1.0, false ], "flat-scale": [ 1.0, false ] } }, "visible": true, "position": { "x": 1253.0, "y": 490.0 }, "name": "flat_field_correct" }, "Read 2": { "model": { "caption": "Read 2", "properties": { "path": [ ".", true ], "start": [ 0, false ], "number": [ 4294967295, true ], "step": [ 1, false ], "y": [ 0, false ], "height": [ 0, false ], "y-step": [ 1, false ], "convert": [ true, false ], "raw-width": [ 0, false ], "raw-height": [ 0, false ], "raw-bitdepth": [ 0, false ], "raw-pre-offset": [ 0, false ], "raw-post-offset": [ 0, false ], "type": [ "unspecified", false ], "retries": [ 0, false ], "retry-timeout": [ 1, false ] } }, "visible": true, "position": { "x": 417.0, "y": 504.0 }, "name": "read" }, "Average": { "model": { "caption": "Average", "properties": { "number": [ 4294967295, true ] } }, "visible": true, "position": { "x": 822.0, "y": 508.0 }, "name": "average" }, "Read 3": { "model": { "caption": "Read 3", "properties": { "path": [ ".", true ], "start": [ 0, false ], "number": [ 4294967295, true ], "step": [ 1, false ], "y": [ 0, false ], "height": [ 0, false ], "y-step": [ 1, false ], "convert": [ true, false ], "raw-width": [ 0, false ], "raw-height": [ 0, false ], "raw-bitdepth": [ 0, false ], "raw-pre-offset": [ 0, false ], "raw-post-offset": [ 0, false ], "type": [ "unspecified", false ], "retries": [ 0, false ], "retry-timeout": [ 1, false ] } }, "visible": true, "position": { "x": 413.0, "y": 735.0 }, "name": "read" }, "Average 2": { "model": { "caption": "Average 2", "properties": { "number": [ 4294967295, true ] } }, "visible": true, "position": { "x": 822.0, "y": 741.0 }, "name": "average" }, "Read": { "model": { "caption": "Read", "properties": { "path": [ ".", true ], "start": [ 0, false ], "number": [ 23212, true ], "step": [ 1, false ], "y": [ 0, false ], "height": [ 0, false ], "y-step": [ 1, false ], "convert": [ true, false ], "raw-width": [ 0, false ], "raw-height": [ 0, false ], "raw-bitdepth": [ 0, false ], "raw-pre-offset": [ 0, false ], "raw-post-offset": [ 0, false ], "type": [ "unspecified", false ], "retries": [ 0, false ], "retry-timeout": [ 1, false ] } }, "visible": true, "position": { "x": 418.0, "y": 245.0 }, "name": "read" } }, "connections": [ [ "Read", 0, "Flat Field Correct", 0 ], [ "Average", 0, "Flat Field Correct", 1 ], [ "Average 2", 0, "Flat Field Correct", 2 ], [ "Read 2", 0, "Average", 0 ], [ "Read 3", 0, "Average 2", 0 ] ], "links": [ [ [ "Read 2", "number" ], [ "Average", "number" ] ], [ [ "Read 3", "number" ], [ "Average 2", "number" ] ] ] } ufo-kit-tofu-ed0e5bd/tofu/flow/composites/pr.cm000066400000000000000000000115161521054151500216730ustar00rootroot00000000000000{ "name": "CPhaseRetrieve", "caption": "CPhaseRetrieve", "models": { "Fft": { "model": { "caption": "Fft", "properties": { "auto-zeropadding": [ true, true ], "dimensions": [ 2, true ], "size-x": [ 1, true ], "size-y": [ 1, true ], "size-z": [ 1, true ] } }, "visible": true, "position": { "x": 112.0, "y": 245.0 }, "name": "fft" }, "Ifft": { "model": { "caption": "Ifft", "properties": { "dimensions": [ 2, true ], "crop-width": [ -1, true ], "crop-height": [ -1, true ] } }, "visible": true, "position": { "x": 772.0, "y": 250.0 }, "name": "ifft" }, "Retrieve Phase": { "model": { "caption": "Retrieve Phase", "num-inputs": 1, "properties": { "method": [ "tie", true ], "energy": [ 20.0, true ], "distance": [ 0.0, true ], "distance-x": [ 0.0, true ], "distance-y": [ 0.0, true ], "pixel-size": [ 7.500000265281415e-07, true ], "regularization-rate": [ 2.5, true ], "thresholding-rate": [ 0.10000000149011612, true ], "frequency-cutoff": [ 3.4028234663852886e+38, true ], "output-filter": [ false, true ] } }, "visible": true, "position": { "x": 544.0, "y": 515.0 }, "name": "retrieve_phase" }, "Pad": { "model": { "caption": "Pad", "properties": { "width": [ 0, true ], "height": [ 0, true ], "x": [ 0, true ], "y": [ 0, true ], "addressing-mode": [ "clamp", true ] } }, "visible": true, "position": { "x": 0.0, "y": 570.0 }, "name": "pad" } }, "connections": [ [ "Pad", 0, "Fft", 0 ], [ "Fft", 0, "Retrieve Phase", 0 ], [ "Retrieve Phase", 0, "Ifft", 0 ] ], "links": [ [ [ "Fft", "dimensions" ], [ "Ifft", "dimensions" ] ], [ [ "Fft", "size-x" ], [ "Pad", "width" ] ], [ [ "Fft", "size-y" ], [ "Pad", "height" ] ] ] } ufo-kit-tofu-ed0e5bd/tofu/flow/config.json000066400000000000000000000067711521054151500207130ustar00rootroot00000000000000{ "models": { "average": { "hidden-properties": [ "number" ] }, "flat-field-correct": { "port-captions": { "input": { "0": "radios", "1": "darks", "2": "flats" }, "output": { "0": "" } }, "hidden-properties": [ "sinogram-input", "dark-scale", "flat-scale" ] }, "general-backproject": { "hidden-properties": [ "z", "burst", "source-position-x", "source-position-y", "source-position-z", "detector-position-x", "detector-position-y", "detector-position-z", "detector-angle-x", "detector-angle-y", "detector-angle-z", "axis-angle-x", "axis-angle-y", "axis-angle-z", "volume-angle-x", "volume-angle-y", "volume-angle-z", "compute-type", "result-type", "store-type", "addressing-mode", "gray-map-min", "gray-map-max" ], "range-properties": { "region": [3, true], "x-region": [3, true], "y-region": [3, true], "center-position-x": [null, true], "center-position-z": [null, true], "source-position-x": [null, true], "source-position-y": [null, true], "source-position-z": [null, true], "detector-position-x": [null, true], "detector-position-y": [null, true], "detector-position-z": [null, true], "detector-angle-x": [null, true], "detector-angle-y": [null, true], "detector-angle-z": [null, true], "axis-angle-x": [null, true], "axis-angle-y": [null, true], "axis-angle-z": [null, true], "volume-angle-x": [null, true], "volume-angle-y": [null, true], "volume-angle-z": [null, true] } }, "horizontal-interpolate": { "port-captions": { "input": { "0": "image", "1": "mask" }, "output": { "0": "" } } }, "read": { "hidden-properties": [ "start", "step", "y", "height", "y-step", "convert", "raw-width", "raw-height", "raw-bitdepth", "raw-pre-offset", "raw-post-offset", "type", "retries", "retry-timeout" ] }, "write": { "hidden-properties": [ "counter-start", "counter-step", "bytes-per-file", "append", "bits", "minimum", "maximum", "rescale", "jpeg-quality", "tiff-bigtiff" ] } } } ufo-kit-tofu-ed0e5bd/tofu/flow/execution.py000066400000000000000000000203571521054151500211240ustar00rootroot00000000000000import gi import logging import networkx as nx try: gi.require_version('Ufo', '0.0') except ValueError: gi.require_version('Ufo', '1.0') from gi.repository import Ufo from PyQt5.QtCore import QObject, pyqtSignal from qtpynodeeditor import PortType from threading import Thread from tofu.flow.models import ARRAY_DATA_TYPE, UFO_DATA_TYPE, UfoTaskModel from tofu.flow.util import FlowError LOG = logging.getLogger(__name__) class UfoExecutor(QObject): """Class holding GPU resources and organizing UFO graph execution.""" number_of_inputs_changed = pyqtSignal(int) # Number of inputs has been determined processed_signal = pyqtSignal(int) # Image has been processed execution_started = pyqtSignal() # Graph execution started execution_finished = pyqtSignal() # Graph execution finished exception_occured = pyqtSignal(str) def __init__(self): super().__init__(parent=None) self._resources = Ufo.Resources() self._reset() # If True only log the exception and emit the signal but don't re-raise it in the executing # thread self.swallow_run_exceptions = False def _reset(self): self._aborted = False self._schedulers = [] self.num_generated = 0 def abort(self): LOG.debug('Execution aborted') try: self._aborted = True for scheduler in self._schedulers: scheduler.abort() finally: self.execution_finished.emit() def on_processed(self, ufo_task): self.processed_signal.emit(self.num_generated) self.num_generated += 1 def setup_ufo_graph(self, graph, gpu=None, region=None, signalling_model=None): ufo_graph = Ufo.TaskGraph() ufo_tasks = {} for source, dest, ports in graph.edges.data(): if hasattr(source, 'create_ufo_task') and hasattr(dest, 'create_ufo_task'): if dest not in ufo_tasks: ufo_tasks[dest] = dest.create_ufo_task(region=region) if source not in ufo_tasks: ufo_tasks[source] = source.create_ufo_task(region=region) ufo_graph.connect_nodes_full(ufo_tasks[source], ufo_tasks[dest], ports[PortType.input]) LOG.debug(f'{source.name}->{dest.name}@{ports[PortType.input]}') if source == signalling_model: ufo_tasks[source].connect('generated', self.on_processed) if gpu is not None: for task in ufo_tasks.values(): if task.uses_gpu(): task.set_proc_node(gpu) return ufo_graph def _run_ufo_graph(self, ufo_graph, use_fixed_scheduler): LOG.debug(f'Executing graph, fixed scheduler: {use_fixed_scheduler}') try: scheduler = Ufo.FixedScheduler() if use_fixed_scheduler else Ufo.Scheduler() self._schedulers.append(scheduler) scheduler.set_resources(self._resources) scheduler.run(ufo_graph) LOG.info(f'Execution time: {scheduler.props.time} s') except Exception as e: # Do not continue execution of other batches self._aborted = True LOG.error(e, exc_info=True) self.exception_occured.emit(str(e)) if not self.swallow_run_exceptions: raise e def check_graph(self, graph): """ Check that *graph* starts with an UfoTaskModel and ends with either that or an UfoModel but no UfoTaskModel successor exists (there can be only one UFO path in the graph). """ roots = [n for n in graph.nodes if graph.in_degree(n) == 0] leaves = [n for n in graph.nodes if graph.out_degree(n) == 0] for root in roots: for leave in leaves: for path in nx.simple_paths.all_simple_paths(graph, root, leave): if not isinstance(path[0], UfoTaskModel): raise FlowError('Flow must start with an UFO node') ufo_ended = False for (i, succ) in enumerate(path[1:]): model = path[i] edge_data = graph.get_edge_data(model, succ) if len(edge_data) > 1: # There cannot be multiple edges between nodes raise FlowError('Multiple edges not allowed but detected ' 'between {model} and {succ}') out_index = edge_data[0]['output'] # We don't need to check if input data type is ARRAY_DATA_TYPE because # UFO_DATA_TYPE cannot be connected to ARRAY_DATA_TYPE in the scene if ufo_ended: # From now on only non-UFO tasks are allowed if model.data_type['output'][out_index] != ARRAY_DATA_TYPE: raise FlowError('After a non-UFO node cannot come another UFO node') elif model.data_type['output'][out_index] != UFO_DATA_TYPE: # Output is non-UFO, UFO ends here ufo_ended = True def run(self, graph): self._reset() self.check_graph(graph) gpus = self._resources.get_gpu_nodes() num_inputs = -1 signalling_model = None for model in graph.nodes: if graph.in_degree(model) == 0: if 'number' in model: current = model['number'] if current > num_inputs: num_inputs = current signalling_model = model batches = [[(None, None)]] gpu_splitting_model = None gpu_splitting_models = get_gpu_splitting_models(graph) if len(gpu_splitting_models) > 1: # There cannot be multiple splitting models raise FlowError('Only one gpu splitting model is allowed') elif gpu_splitting_models: gpu_splitting_model = gpu_splitting_models[0] batches = gpu_splitting_model.split_gpu_work(self._resources.get_gpu_nodes()) for model in graph.nodes: # Reset internal model state if hasattr(model, 'reset_batches'): model.reset_batches() LOG.debug(f'{len(batches)} batches: {batches}') if signalling_model: self.number_of_inputs_changed.emit(len(batches) * num_inputs) LOG.debug(f'Number of inputs: {len(batches) * num_inputs}, defined ' f'by {signalling_model}') def execute_batches(): self.execution_started.emit() try: for (i, parallel_batch) in enumerate(batches): LOG.info(f'starting batch {i}: {parallel_batch}') threads = [] for gpu_index, region in parallel_batch: if self._aborted: break gpu = None if gpu_index is None else gpus[gpu_index] ufo_graph = self.setup_ufo_graph(graph, gpu=gpu, region=region, signalling_model=signalling_model) t = Thread(target=self._run_ufo_graph, args=(ufo_graph, len(gpu_splitting_models) > 0)) t.daemon = True threads.append(t) t.start() for t in threads: t.join() if self._aborted: break except Exception as e: LOG.error(e, exc_info=True) self.exception_occured.emit(str(e)) raise e finally: self.execution_finished.emit() gt = Thread(target=execute_batches) gt.daemon = True gt.start() def get_gpu_splitting_models(graph): gpu_splitting_models = [] for model in graph.nodes: if isinstance(model, UfoTaskModel) and model.can_split_gpu_work: gpu_splitting_models.append(model) return gpu_splitting_models ufo-kit-tofu-ed0e5bd/tofu/flow/filedirdialog.py000066400000000000000000000013131521054151500217060ustar00rootroot00000000000000import os from PyQt5.QtWidgets import QFileDialog class FileDirDialog(QFileDialog): """ A workaround for being able to select both files and directories. Source: https://stackoverflow.com/questions/27520304/qfiledialog-that-accepts-a-single-file-or-a-single-directory """ def __init__(self, parent=None): super().__init__(parent=parent) self.setOption(QFileDialog.DontUseNativeDialog) self.setFileMode(QFileDialog.Directory) self.currentChanged.connect(self._selected) def _selected(self, name): if os.path.isdir(name): self.setFileMode(QFileDialog.Directory) else: self.setFileMode(QFileDialog.ExistingFile) ufo-kit-tofu-ed0e5bd/tofu/flow/main.py000066400000000000000000000572731521054151500200540ustar00rootroot00000000000000import json import logging import os import pathlib import sys from PyQt5.QtCore import Qt, QObject, QPoint, pyqtSignal from PyQt5.QtWidgets import (QApplication, QFileDialog, QWidget, QVBoxLayout, QMenuBar, QMessageBox, QProgressBar, QMainWindow, QStyle) from qtpynodeeditor import DataModelRegistry, FlowView import xdg.BaseDirectory from tofu.flow.execution import UfoExecutor from tofu.flow.models import (BaseCompositeModel, get_composite_model_classes_from_json, get_composite_model_classes, get_ufo_model_classes, ImageViewerModel, UfoGeneralBackprojectModel, UfoMemoryOutModel, UfoOpenCLModel, UfoReadModel, UfoRetrievePhaseModel, UfoWriteModel) from tofu.flow.scene import UfoScene from tofu.flow.propertylinkswidget import PropertyLinks from tofu.flow.runslider import RunSlider from tofu.flow.util import FlowError LOG = logging.getLogger(__name__) class ApplicationWindow(QMainWindow): def __init__(self, ufo_scene): super().__init__() self.ufo_scene = ufo_scene self.property_links_widget = PropertyLinks(ufo_scene.node_model, ufo_scene.property_links_model, parent=self) self.run_slider = RunSlider(parent=self) self.executor = UfoExecutor() self.console = None self.run_slider_key = (None, None) self.last_dirs = {'scene': None, 'composite': None} self._creating_composite = False self._expanding_composite = False central_widget = QWidget() self.setCentralWidget(central_widget) main_layout = QVBoxLayout(central_widget) self.flow_view = FlowView(self.ufo_scene) self.progress_bar = QProgressBar() self.progress_bar.setMinimum(0) menu_bar = QMenuBar() flow_menu = menu_bar.addMenu('Flow') new_action = flow_menu.addAction("New") new_action.setShortcut('Ctrl+N') new_action.triggered.connect(self.on_new) save_action = flow_menu.addAction("Save") save_action.setShortcut('Ctrl+S') save_action.triggered.connect(self.on_save) save_json_action = flow_menu.addAction("Save json") save_json_action.setShortcut('Ctrl+J') save_json_action.triggered.connect(self.on_save_json) load_action = flow_menu.addAction("Open") load_action.setShortcut('Ctrl+O') load_action.triggered.connect(self.on_open) self.run_action = flow_menu.addAction(self.style().standardIcon(QStyle.SP_MediaPlay), 'Run') self.run_action.setShortcut('Ctrl+R') self.run_action.triggered.connect(self.on_run) abort_action = flow_menu.addAction(self.style().standardIcon(QStyle.SP_MediaStop), 'Abort') abort_action.setShortcut('Ctrl+Shift+X') abort_action.triggered.connect(self.executor.abort) exit_action = flow_menu.addAction('Exit') exit_action.setShortcut('Ctrl+Q') exit_action.triggered.connect(self.close) # Nodes submenu selection_menu = menu_bar.addMenu('Nodes') selection_menu.setToolTipsVisible(True) selection_menu.aboutToShow.connect(self.on_selection_menu_about_to_show) self.skip_action = selection_menu.addAction('Skip Toggle') self.skip_action.setShortcut('S') self.skip_action.triggered.connect(self.ufo_scene.skip_nodes) auto_fill_action = selection_menu.addAction('Auto fill') auto_fill_action.triggered.connect(self.ufo_scene.auto_fill) copy_action = selection_menu.addAction("Duplicate") copy_action.setShortcut('Ctrl+Shift+D') copy_action.triggered.connect(self.ufo_scene.copy_nodes) # Composite create_composite_action = selection_menu.addAction("Create Composite") create_composite_action.setShortcut('Ctrl+Shift+C') create_composite_action.triggered.connect(self.on_create_composite) import_composites_action = selection_menu.addAction("Import Composites") import_composites_action.setToolTip('Import one or more composite nodes ' 'from a file or files') import_composites_action.setShortcut('Ctrl+I') import_composites_action.triggered.connect(self.on_import_composites) self.export_composite_action = selection_menu.addAction("Export Composite") self.export_composite_action.triggered.connect(self.on_export_composite) self.edit_composite_action = selection_menu.addAction("Edit Composite") self.edit_composite_action.triggered.connect(self.on_edit_composite) self.expand_composite_action = selection_menu.addAction("Expand Composite") self.expand_composite_action.setShortcut('Ctrl+Shift+E') self.expand_composite_action.triggered.connect(self.on_expand_composite) view_menu = menu_bar.addMenu('View') reset_view_action = view_menu.addAction("Reset Zoom") reset_view_action.setShortcut('Ctrl+0') reset_view_action.triggered.connect(self.on_reset_view) property_links_action = view_menu.addAction("Link Properties") property_links_action.setShortcut('Ctrl+L') property_links_action.triggered.connect(self.on_property_links_action) console_action = view_menu.addAction("Open Python Console") console_action.setShortcut('Ctrl+Shift+P') console_action.triggered.connect(self.on_console_action) run_slider_action = view_menu.addAction("Run Slider") run_slider_action.setShortcut('Ctrl+Shift+S') run_slider_action.triggered.connect(self.on_run_slider_action) self.fix_run_slider = view_menu.addAction("Fix Run Slider") self.fix_run_slider.setCheckable(True) self.fix_run_slider.setShortcut('Ctrl+Alt+Shift+S') main_layout.addWidget(menu_bar) main_layout.addWidget(self.flow_view) main_layout.addWidget(self.progress_bar) main_layout.setContentsMargins(0, 0, 0, 0) main_layout.setSpacing(0) self.resize(1280, 1000) # Signals self.executor.exception_occured.connect(self.on_exception_occured) self.executor.execution_finished.connect(self.on_execution_finished) self.executor.number_of_inputs_changed.connect(self.on_number_of_inputs_changed) self.executor.processed_signal.connect(self.on_processed) self.ufo_scene.node_deleted.connect(self.on_node_deleted) self.ufo_scene.nodes_duplicated.connect(self.on_nodes_duplicated) self.ufo_scene.item_focus_in.connect(self.on_item_focus_in) self.run_slider.value_changed.connect(self.on_run_slider_value_changed) self.setWindowTitle('tofu flow') def on_save(self): if self.last_dirs['scene']: path = self.last_dirs['scene'] else: path = xdg.BaseDirectory.save_data_path('tofu', 'flows') if not os.path.exists(path): os.makedirs(path) file_name, _ = QFileDialog.getSaveFileName(self, "Select File Name", str(path), "Flow Scene Files (*.flow)") if file_name: self.last_dirs['scene'] = os.path.dirname(file_name) self.ufo_scene.save(file_name) def on_new(self): self.run_slider.reset() self.ufo_scene.clear_scene() self.setWindowTitle('tofu flow') def on_open(self): if self.last_dirs['scene']: path = self.last_dirs['scene'] else: path = xdg.BaseDirectory.save_data_path('tofu', 'flows') if not os.path.exists(path): path = pathlib.Path.home() file_name, _ = QFileDialog.getOpenFileName(self, "Open Flow Scene", str(path), "Flow Scene Files (*.flow)") if file_name: self.last_dirs['scene'] = os.path.dirname(file_name) self.ufo_scene.load(file_name) self.run_slider.reset() self.setWindowTitle(file_name) def on_exception_occured(self, text): msg = QMessageBox(parent=self) msg.setIcon(QMessageBox.Critical) msg.setText(text) msg.setWindowTitle("Error") msg.exec_() def on_number_of_inputs_changed(self, value): self.progress_bar.setMaximum(value) def on_processed(self, value): self.progress_bar.setValue(value + 1) def on_node_deleted(self, node): slider_model, prop_name = self.run_slider_key if slider_model: if (isinstance(node.model, BaseCompositeModel) and node.model.is_model_inside(slider_model) and not (self._expanding_composite or self._creating_composite)): self.run_slider.reset() self.run_slider_key = (None, None) elif node.model == slider_model and not self._creating_composite: self.run_slider.reset() self.run_slider_key = (None, None) def on_nodes_duplicated(self, selected_nodes, new_nodes): min_y = float('inf') y_1 = float('-inf') for node in selected_nodes: height = node.model.embedded_widget().height() y = node.graphics_object.y() if y < min_y: min_y = y if y + height > y_1: y_1 = y + height for node in selected_nodes: dy = node.graphics_object.y() - min_y new_pos = QPoint(int(node.graphics_object.x()), int(dy + y_1 + 100)) new_nodes[node].graphics_object.setPos(new_pos) def on_item_focus_in(self, item, prop_name, caption, model): if not self.fix_run_slider.isChecked() or not self.run_slider.view_item: if self.run_slider.setup(item): self.run_slider_key = (model, prop_name) self.run_slider.setWindowTitle(f'{caption}->{prop_name}') def on_selection_menu_about_to_show(self): composites = False num_selected = len(self.ufo_scene.selected_nodes()) for node in self.ufo_scene.selected_nodes(): if isinstance(node.model, BaseCompositeModel): composites = True break self.edit_composite_action.setEnabled(num_selected == 1 and composites) self.export_composite_action.setEnabled(num_selected == 1 and composites) self.expand_composite_action.setEnabled(composites) self.skip_action.setEnabled(self.ufo_scene.selected_nodes() != []) def on_edit_composite(self): if self.ufo_scene.is_selected_one_composite(): # Check again in case this was invoked by the keyboard shortcut node = self.ufo_scene.selected_nodes()[0] node.model.edit_in_window(self) def on_create_composite(self): self._creating_composite = True try: path = None prop_name = self.run_slider_key[1] if self.run_slider_key[0]: for node in self.ufo_scene.selected_nodes(): if isinstance(node.model, BaseCompositeModel): if node.model.is_model_inside(self.run_slider_key[0]): path = node.model.get_path_from_model(self.run_slider_key[0]) elif node.model == self.run_slider_key[0]: path = [self.run_slider_key[0]] composite_model = self.ufo_scene.create_composite().model if path: str_path = [model.caption for model in path] new_model = composite_model.get_model_from_path(str_path) new_view_item = new_model.get_view_item(prop_name) # Do not make complete setup, that would reset limits, just update the view item self.run_slider.view_item = new_view_item self.run_slider_key = (new_model, prop_name) title = '->'.join([composite_model.caption] + str_path + [prop_name]) self.run_slider.setWindowTitle(title) finally: self._creating_composite = False def on_expand_composite(self): self._expanding_composite = True try: slider_model, prop_name = self.run_slider_key for node in self.ufo_scene.selected_nodes(): if isinstance(node.model, BaseCompositeModel): if slider_model: str_path = None if node.model.is_model_inside(slider_model): str_path = [model.caption for model in node.model.get_path_from_model(slider_model)] new_nodes = self.ufo_scene.expand_composite(node)[0] # Pass the new node to the run slider if it was contained in this composite if slider_model and str_path: if slider_model.caption in new_nodes: # runslider linked to a simple node after expanstion slider_model = new_nodes[slider_model.caption].model self.run_slider_key = (slider_model, prop_name) new_view_item = slider_model.get_view_item(prop_name) # Do not make complete setup, that would reset limits, just update the # view item self.run_slider.view_item = new_view_item self.run_slider.setWindowTitle(f'{slider_model.caption}->{prop_name}') else: # runslider linked to another composite node (nesting) after expanstion for node in new_nodes.values(): if isinstance(node.model, BaseCompositeModel): if node.model.contains_path(str_path[2:]): new_model = node.model.get_model_from_path(str_path[2:]) self.run_slider_key = (new_model, prop_name) new_view_item = new_model.get_view_item(prop_name) # Do not make complete setup, that would reset limits, just # update the view item self.run_slider.view_item = new_view_item title = '->'.join(str_path[1:] + [prop_name]) self.run_slider.setWindowTitle(title) self.run_slider_key = (new_model, prop_name) break finally: self._expanding_composite = False def on_import_composites(self): if self.last_dirs['composite']: path = self.last_dirs['composite'] else: path = xdg.BaseDirectory.save_data_path('tofu', 'flows', 'composites') if not os.path.exists(path): path = pathlib.Path.home() file_names, _ = QFileDialog.getOpenFileNames(self, "Select File Names", str(path), "Composite Model Files (*.cm)") if not file_names: return self.last_dirs['composite'] = os.path.dirname(file_names[0]) overwriting = {} for file_name in file_names: LOG.debug(f'Loading composite from {file_name}') with open(file_name, 'r') as f: state = json.load(f) for model in get_composite_model_classes_from_json(state): if model.name in self.ufo_scene.registry.registered_model_creators(): overwriting[model.name] = os.path.basename(file_name) self.ufo_scene.registry.register_model(model, category='Composite', registry=self.ufo_scene.registry) if overwriting: msg = QMessageBox(parent=self) msg.setIcon(QMessageBox.Warning) msg.setText('Composite nodes with same names detected. Files from which ' 'the nodes have been loaded are listed in details.') msg.setDetailedText('\n'.join([f'Node name "{name}" from file "{file_name}"' for (name, file_name) in overwriting.items()])) msg.setWindowTitle('Warning') msg.exec_() def export_composite(self, node, file_name): state = node.model.save() with open(file_name, 'w') as f: json.dump(state, f, indent=4) def on_export_composite(self): if not self.ufo_scene.is_selected_one_composite(): # Check again in case this was invoked by the keyboard shortcut return if self.last_dirs['composite']: path = self.last_dirs['composite'] else: path = xdg.BaseDirectory.save_data_path('tofu', 'flows', 'composites') if not os.path.exists(path): os.makedirs(path) file_name, _ = QFileDialog.getSaveFileName(self, "Select File Name", str(path), "Composite Model Files (*.cm)") if file_name: self.last_dirs['composite'] = os.path.dirname(file_name) if not file_name.endswith('.cm'): file_name += '.cm' self.export_composite(self.ufo_scene.selected_nodes()[0], file_name) def on_reset_view(self): for view in self.ufo_scene.views(): transform = view.transform() transform.reset() view.setTransform(transform) def on_property_links_action(self): self.property_links_widget.show() # Make sure it goes to the front if it is currently burried under other windows self.property_links_widget.raise_() def on_console_action(self): if self.console: self.console.show() return try: from pyqtconsole.console import PythonConsole from pyqtconsole.highlighter import format self.console = PythonConsole(formats={ 'keyword': format('darkBlue', 'bold') }) self.console.setWindowFlag(Qt.SubWindow, True) self.console.ctrl_d_exits_console(True) self.console.push_local_ns('scene', self.ufo_scene) self.console.resize(640, 480) self.console.show() self.console.eval_queued() except ImportError as e: LOG.error(e, exc_info=True) self.on_exception_occured(str(e)) def on_run_slider_action(self): if not self.run_slider.view_item: msg = QMessageBox(parent=self) msg.setIcon(QMessageBox.Information) msg.setText('Click on an input field in the flow to connect the slider') msg.exec_() else: self.run_slider.show() # Make sure it goes to the front if it is currently burried under other windows self.run_slider.raise_() def on_run_slider_value_changed(self, value): if self.run_action.isEnabled(): self.on_run() def on_run(self): graphs = self.ufo_scene.get_simple_node_graphs() if len(graphs) != 1: raise FlowError('Scene must contain one fully connected graph') if not self.ufo_scene.is_fully_connected(): raise FlowError('Not all node ports are connected') self.executor.run(graphs[0]) self.run_action.setEnabled(False) self.ufo_scene.set_enabled(False) def on_save_json(self): graphs = self.ufo_scene.get_simple_node_graphs() if len(graphs) != 1: raise FlowError('Scene must contain one fully connected graph') if not self.ufo_scene.is_fully_connected(): raise FlowError('Not all node ports are connected') if not self.ufo_scene.are_all_ufo_tasks(graphs=graphs): raise FlowError('Flow contains other than pure UFO nodes (nodes with different ' 'data types, e.g. Memory Out or Image Viewer)') ufo_graph = self.executor.setup_ufo_graph(graphs[0]) if self.last_dirs['scene']: path = self.last_dirs['scene'] else: path = xdg.BaseDirectory.save_data_path('tofu', 'flows') if not os.path.exists(path): os.makedirs(path) file_name, _ = QFileDialog.getSaveFileName(self, "Select File Name", str(path), "json-File (*.json)") if file_name: self.last_dirs['scene'] = os.path.dirname(file_name) if not file_name.endswith('.json'): file_name += '.json' ufo_graph.save_to_json(file_name) def on_execution_finished(self): self.progress_bar.reset() self.run_action.setEnabled(True) self.ufo_scene.set_enabled(True) class GlobalExceptionHandler(QObject): """ Intercept exceptions, log them and inform user if they are UI-related. Emit a signal when the error message should be shown to the user so that e.g. a message can be shown in the main thread. """ exception_occured = pyqtSignal(str) def excepthook(self, exc_type, exc_value, exc_traceback): LOG.error(exc_value, exc_info=(exc_type, exc_value, exc_traceback)) if issubclass(exc_type, FlowError): self.exception_occured.emit(str(exc_value)) def get_filled_registry(): registry = DataModelRegistry() for model in get_ufo_model_classes(): category = 'Processing' if model.num_ports['input'] == 0: category = 'Input' if model.num_ports['output'] == 0: category = 'Output' registry.register_model(model, category=category, scrollable=True) registry.register_model(UfoGeneralBackprojectModel, category='Processing') registry.register_model(UfoOpenCLModel, category='Processing') registry.register_model(UfoRetrievePhaseModel, category='Processing') registry.register_model(UfoMemoryOutModel, category='Data') registry.register_model(ImageViewerModel, category='Output') registry.register_model(UfoWriteModel, category='Output') registry.register_model(UfoReadModel, category='Input') for models in get_composite_model_classes(): for model in models: if model.name not in registry.registered_model_creators(): registry.register_model(model, category='Composite', registry=registry) return registry def main(): app = QApplication(sys.argv) scene = UfoScene(registry=get_filled_registry()) main_window = ApplicationWindow(scene) # Exception interception exception_handler = GlobalExceptionHandler() exception_handler.exception_occured.connect(main_window.on_exception_occured) # Do not use threading.excepthook because it needs at least python 3.8., i.e. all exceptions in # threads have to be handled properly (logged, signal emitted so that a message can be displayed # in the main thread to the user, see tofu.flow.execution for example). sys.excepthook = exception_handler.excepthook main_window.show() sys.exit(app.exec_()) if __name__ == '__main__': main() ufo-kit-tofu-ed0e5bd/tofu/flow/models.py000066400000000000000000001727121521054151500204070ustar00rootroot00000000000000""" All classes needed for :class:`qtpynodeeditor.NodeDataModel` implementation of UFO and composite tasks. """ import gi import glob import json import logging import networkx as nx import numpy as np import pkg_resources import os import re try: gi.require_version('Ufo', '0.0') except ValueError: gi.require_version('Ufo', '1.0') from gi.repository import Ufo from PyQt5 import QtCore from PyQt5.QtCore import QObject, Qt, pyqtSignal from PyQt5.QtGui import QDoubleValidator, QValidator from PyQt5.QtWidgets import (QCheckBox, QComboBox, QGroupBox, QInputDialog, QLabel, QLineEdit, QScrollArea, QWidget, QFileDialog, QFormLayout, QVBoxLayout, QMenu) from qtpynodeeditor import (NodeData, NodeDataModel, NodeDataType, FlowScene, FlowView, Port, PortType, opposite_port) from threading import Lock from tofu.flow.util import (CompositeConnection, FlowError, get_config_key, MODEL_ROLE, NODE_ROLE, PROPERTY_ROLE, saved_kwargs) from tofu.flow.filedirdialog import FileDirDialog LOG = logging.getLogger(__name__) UFO_PLUGIN_MANAGER = Ufo.PluginManager() UFO_DATA_TYPE = NodeDataType(id="UfoBuffer", name=None) ARRAY_DATA_TYPE = NodeDataType(id="NumpyArray", name=None) class UfoIntValidator(QValidator): """Combined int and unsigned int validator.""" def __init__(self, minimum, maximum, parent=None): super().__init__(parent=parent) self.minimum = minimum self.maximum = maximum def bottom(self): return self.minimum def top(self): return self.maximum def validate(self, input_str, pos): try: if self.minimum <= int(input_str) <= self.maximum: result = (QValidator.Acceptable, input_str, pos) else: result = (QValidator.Intermediate, input_str, pos) except ValueError: if not input_str or input_str == '-' and self.minimum < 0: result = (QValidator.Intermediate, input_str, pos) else: result = (QValidator.Invalid, input_str, pos) return result class UfoRangeValidator(QValidator): """ Range separated by comma validator. *num_items* specifies how many numbers must be in the string. *is_float* specifies if the numbers are floating point (integer or unsigned integer otherwise). """ def __init__(self, num_items=None, is_float=True, parent=None): super().__init__(parent=parent) self.num_items = num_items self.is_float = is_float def validate(self, input_str, pos): float_regexp = r'[+-]|[+-]?(\d+(\.\d*)?|\.\d*)([eE][+-]?\d*)?' numbers = input_str.split(',') intermediate = False if self.num_items is not None and len(numbers) > self.num_items: # Incorrect number of items return (QValidator.Invalid, input_str, pos) for (i, number) in enumerate(numbers): number = number.lower().strip() if ('e' in number or '.' in number) and not self.is_float: # Integer expected return (QValidator.Invalid, input_str, pos) if self.is_float: try: float(number) except: if (not number or re.fullmatch(float_regexp, number)): # Partial floating point number (e.g. ends with "e") intermediate = True continue else: return (QValidator.Invalid, input_str, pos) else: try: int(number) except: if not number or number == '-': intermediate = True continue else: return (QValidator.Invalid, input_str, pos) if intermediate or (self.num_items is not None and len(numbers) < self.num_items): # Not enough arguments received or some numbers are incomplete return (QValidator.Intermediate, input_str, pos) return (QValidator.Acceptable, input_str, pos) class ViewItem(QObject): property_changed = pyqtSignal(QObject) def __init__(self, widget, default_value=None, tooltip=''): super().__init__(parent=None) self.widget = widget self.focus_info = False if tooltip: self.widget.setToolTip(tooltip) if default_value is not None: self.set(default_value) def on_changed(self, *args): """ Only user interaction must emit signals in the descendants. Signal is emitted only if the user input is valid. """ try: self.get() self.property_changed.emit(self) except: LOG.debug(f'{self}: invalid input') def get(self): ... def set(self, value): ... class CheckBoxViewItem(ViewItem): def __init__(self, checked=False, tooltip=''): widget = QCheckBox() super().__init__(widget, default_value=checked, tooltip=tooltip) widget.clicked.connect(self.on_changed) def get(self): return self.widget.isChecked() def set(self, value): self.widget.setChecked(value) class ComboBoxViewItem(ViewItem): def __init__(self, items, default_value=None, tooltip=''): widget = QComboBox() for item in items: widget.addItem(item) super().__init__(widget, default_value=default_value, tooltip=tooltip) widget.activated.connect(self.on_changed) def get(self): return self.widget.currentText() def set(self, value): self.widget.setCurrentText(value) class FocusInterceptQLineEdit(QLineEdit): focus_in = pyqtSignal(QObject) def focusInEvent(self, event): self.focus_in.emit(self) return super().focusInEvent(event) class QLineEditViewItem(ViewItem): focus_in = pyqtSignal(QObject) def __init__(self, default_value=None, tooltip='', intercept_focus=False): if intercept_focus: widget = FocusInterceptQLineEdit() widget.focus_in.connect(self.on_focus_in) else: widget = QLineEdit() super().__init__(widget, default_value=default_value, tooltip=tooltip) if intercept_focus: self.focus_info = True widget.textEdited.connect(self.on_changed) def on_focus_in(self, widget): self.focus_in.emit(self) def get(self): return self.widget.text() def set(self, value): self.widget.setText(str(value)) class NumberQLineEditViewItem(QLineEditViewItem): def __init__(self, minimum, maximum, default_value=None, tooltip=''): if default_value < minimum or default_value > maximum: raise ValueError(f'default value {default_value} not in limits [{minimum}, {maximum}]') tooltip += ' (range: {} - {})'.format(minimum, maximum) super().__init__(default_value=default_value, tooltip=tooltip, intercept_focus=True) validator = QDoubleValidator(float(minimum), float(maximum), 100) self.widget.setValidator(validator) def get(self): return float(super().get()) class IntQLineEditViewItem(QLineEditViewItem): def __init__(self, minimum, maximum, default_value=None, tooltip=''): if default_value < minimum or default_value > maximum: raise ValueError(f'default value {default_value} not in limits [{minimum}, {maximum}]') tooltip += ' (range: {} - {})'.format(minimum, maximum) super().__init__(default_value=default_value, tooltip=tooltip, intercept_focus=True) validator = UfoIntValidator(minimum, maximum) self.widget.setValidator(validator) def get(self): return int(super().get()) class RangeQLineEditViewItem(QLineEditViewItem): def __init__(self, default_value='', tooltip='', num_items=None, is_float=True): super().__init__(default_value=default_value, tooltip=tooltip, intercept_focus=True) validator = UfoRangeValidator(num_items=num_items, is_float=is_float) self.widget.setValidator(validator) def set(self, values): text = ','.join([str(value) for value in values]) if values else '' self.widget.setText(text) def get(self): text = super().get() if text: values = [float(num) for num in text.split(',')] else: values = [] return values def get_ufo_qline_edit_item(glib_prop, default_value, range_num_items=None, range_is_float=True): if glib_prop.value_type.name == 'GValueArray': item = RangeQLineEditViewItem(tooltip=glib_prop.blurb, default_value=default_value, num_items=range_num_items, is_float=range_is_float) elif glib_prop.value_type.name in ['gdouble', 'gfloat']: item = NumberQLineEditViewItem(glib_prop.minimum, glib_prop.maximum, default_value=default_value, tooltip=glib_prop.blurb) elif hasattr(glib_prop, 'minimum') and hasattr(glib_prop, 'maximum'): item = IntQLineEditViewItem(glib_prop.minimum, glib_prop.maximum, default_value=default_value, tooltip=glib_prop.blurb) else: item = QLineEditViewItem(default_value=str(default_value), tooltip=glib_prop.blurb) return item class PropertyViewRecord: """Attribute-access to a view's item.""" def __init__(self, view_item, label, visible): self.view_item = view_item self.label = label self.visible = visible def __str__(self): return repr(self) def __repr__(self): fmt = 'PropertyViewRecord(widget={}, visible={})' return fmt.format(self.view_item.widget, self.visible) class MultiPropertyViewRecord: """Attribute-access to a multiple property view's item.""" def __init__(self, model, widget, visible): self.model = model self.widget = widget self.visible = visible def __str__(self): return repr(self) def __repr__(self): fmt = 'MultiPropertyViewRecord(model={}, widget={}, visible={})' return fmt.format(self.model, self.widget, self.visible) class PropertyView(QWidget): property_changed = pyqtSignal(str, object) item_focus_in = pyqtSignal(ViewItem, str) def __init__(self, properties=None, parent=None, scrollable=True): super().__init__(parent=parent) form_layout = QFormLayout() form_layout.setVerticalSpacing(0) self._properties = {} if properties: for (name, (item, active)) in properties.items(): if name in self._properties: raise ValueError("Item '{}' already exists".format(name)) # Set the parent properly, so that set_property_visible won't try to show the item # widget and the label in their own windows before the view is shown item.widget.setParent(self) label = QLabel(name, parent=self) form_layout.addRow(label, item.widget) self._properties[name] = PropertyViewRecord(item, label, active) self.set_property_visible(name, active) item.property_changed.connect(self.on_property_changed) if item.focus_info: item.focus_in.connect(self.on_item_focus_in) if scrollable: widget = QWidget() widget.setLayout(form_layout) scroll = QScrollArea() scroll.setWidget(widget) scroll.setWidgetResizable(True) main_layout = QVBoxLayout() main_layout.addWidget(scroll) self.setLayout(main_layout) else: self.setLayout(form_layout) @property def property_names(self): return self._properties.keys() def get_property(self, name): return self._properties[name].view_item.get() def set_property(self, name, value): return self._properties[name].view_item.set(value) def get_record(self, name): return self._properties[name] def on_property_changed(self, item): # Get item's name for (name, record) in self._properties.items(): if item == record.view_item: break self.property_changed.emit(name, item.get()) def on_item_focus_in(self, view_item): for (name, it) in self._properties.items(): if it.view_item.widget == view_item.widget: self.item_focus_in.emit(view_item, name) break def is_property_visible(self, name): return self._properties[name].visible def set_property_visible(self, name, visible): self._properties[name].view_item.widget.setVisible(visible) self._properties[name].label.setVisible(visible) self._properties[name].visible = visible def restore_properties(self, values): for prop in self._properties: if prop not in values: LOG.debug(f'Property {prop} not stored, using default') continue value, visible = values[prop] self.set_property(prop, value) self.set_property_visible(prop, visible) def export_properties(self): values = {} for prop in self._properties: values[prop] = [self.get_property(prop), self.is_property_visible(prop)] return values def contextMenuEvent(self, event): contextMenu = QMenu(self) actions = {} for name in list(self._properties.keys()): action = contextMenu.addAction(name) action.setCheckable(True) action.setChecked(self._properties[name].visible) actions[action] = name contextMenu.addSeparator() show_all_action = contextMenu.addAction('Show All') hide_all_action = contextMenu.addAction('Hide All') action = contextMenu.exec_(self.mapToGlobal(event.pos())) if action: if action in actions: name = actions[action] checked = action.isChecked() self.set_property_visible(name, checked) elif action == show_all_action: for name in self._properties.keys(): self.set_property_visible(name, True) elif action == hide_all_action: for name in self._properties.keys(): self.set_property_visible(name, False) class MultiPropertyView(QWidget): def __init__(self, groups, parent=None): super().__init__(parent=parent) self._group_box_layout = QVBoxLayout() main_layout = QVBoxLayout() widget = QWidget() widget.setLayout(self._group_box_layout) scroll = QScrollArea() scroll.setWidget(widget) scroll.setWidgetResizable(True) self.setLayout(main_layout) main_layout.addWidget(scroll) self._groups = {} for (model, visible) in groups.items(): if isinstance(model, PropertyModel): model_widget = QGroupBox(model.caption) layout = QVBoxLayout() model_widget.setLayout(layout) layout.addWidget(model.embedded_widget()) else: model_widget = QLabel(model.caption, parent=self) record = MultiPropertyViewRecord(model, model_widget, visible) self._groups[model.caption] = record self._group_box_layout.addWidget(model_widget) self.set_group_visible(model.caption, visible) def __getitem__(self, key): return self._groups[key].model def __contains__(self, key): return key in self._groups def __iter__(self): return iter(self._groups) def export_groups(self): values = {} for name in self._groups: state = self._groups[name].model.save() values[name] = {'model': state, 'visible': self._groups[name].visible} return values def restore_groups(self, values): for name in values: self[name].restore(values[name]['model']) self.set_group_visible(name, values[name]['visible']) def set_group_visible(self, name, visible): self._groups[name].widget.setVisible(visible) self._groups[name].visible = visible def is_group_visible(self, name): return self._groups[name].visible def contextMenuEvent(self, event): contextMenu = QMenu(self) actions = {} for name in list(self._groups.keys()): action = contextMenu.addAction(name) action.setCheckable(True) action.setChecked(self._groups[name].visible) actions[action] = name contextMenu.addSeparator() show_all_action = contextMenu.addAction('Show All') hide_all_action = contextMenu.addAction('Hide All') action = contextMenu.exec_(self.mapToGlobal(event.pos())) if action: if action in actions: name = actions[action] checked = action.isChecked() self.set_group_visible(name, checked) elif action == show_all_action: for name in self._groups.keys(): self.set_group_visible(name, True) elif action == hide_all_action: for name in self._groups.keys(): self.set_group_visible(name, False) class UfoModel(NodeDataModel): """The root parent of all other models in tofu flow.""" data_type = UFO_DATA_TYPE item_focus_in = pyqtSignal(QObject, str, str, NodeDataModel) def __init__(self, style=None, parent=None): super().__init__(style=style, parent=parent) # This is the caption model wants to have when it's instantiated, however, it might # get a different caption from the scene because the captions must be unique within self.base_caption = self.caption self.skip = False def restore(self, state, restore_caption=False): if restore_caption: self.caption = state.get('caption', self.caption) def save(self): return {'caption': self.caption} def double_clicked(self, parent): ... def __repr__(self): return f'UfoModel({self.caption})' def __str__(self): return repr(self) class PropertyModel(UfoModel): property_changed = pyqtSignal(UfoModel, str, object) def __init__(self, style=None, parent=None, scrollable=True): """*properties* is a dictionary of name: ViewItem items.""" super().__init__(style=style, parent=parent) properties = self.make_properties() if properties: self.properties = list(properties.keys()) self._view = PropertyView(properties=properties, scrollable=scrollable) self._view.property_changed.connect(self.on_property_changed) self._view.item_focus_in.connect(self.on_item_focus_in) else: self.properties = [] self._view = None def __getitem__(self, key): return self._view.get_property(key) def __setitem__(self, key, value): return self._view.set_property(key, value) def __contains__(self, key): return key in self.properties def __iter__(self): return iter(self.properties) def get_view_item(self, name): return self._view.get_record(name).view_item def on_property_changed(self, name, value): self.property_changed.emit(self, name, value) def on_item_focus_in(self, item, name): self.item_focus_in.emit(item, name, self.caption, self) def make_properties(self): """*properties* is a dictionary of name: ViewItem items.""" return {} def copy_properties(self): properties = self.make_properties() for (name, (item, active)) in properties.items(): item.set(self[name]) properties[name][-1] = self._view.is_property_visible(name) return properties def auto_fill(self): """Automatically fill properties (e.g. number of files, etc.)""" ... def resizable(self): return True def embedded_widget(self) -> QWidget: return self._view if self._view else None def restore(self, state, restore_caption=True): self._view.restore_properties(state['properties']) super().restore(state, restore_caption=restore_caption) def save(self): state = super().save() state['properties'] = self._view.export_properties() return state class UfoTaskModel(PropertyModel): caption_visible = True def __init__(self, task_name, style=None, parent=None, scrollable=True): self._task_name = task_name self.caption = ' '.join([item[0].upper() + item[1:] for item in self.name.split('_')]) self.needs_fixed_scheduler = False self.can_split_gpu_work = False super().__init__(style=style, parent=parent, scrollable=scrollable) def make_properties(self): hidden_properties = get_config_key('models', self._task_name, 'hidden-properties') range_properties = get_config_key('models', self._task_name, 'range-properties', default={}) properties = {} ufo_task = UFO_PLUGIN_MANAGER.get_task(self._task_name) for prop in ufo_task.list_properties(): if prop.name == 'num-processed': continue default_value = getattr(ufo_task.props, prop.name) if prop.value_type.name == 'gboolean': item = CheckBoxViewItem(checked=default_value, tooltip=prop.blurb) elif hasattr(prop, 'enum_class'): items = [name.value_nick for name in default_value.__enum_values__.values()] item = ComboBoxViewItem(items, default_value=default_value.value_nick, tooltip=prop.blurb) else: range_num_items, range_is_float = range_properties.get(prop.name, (None, True)) item = get_ufo_qline_edit_item(prop, default_value=default_value, range_num_items=range_num_items, range_is_float=range_is_float) visible = True if hidden_properties and prop.name in hidden_properties: visible = False properties[prop.name] = [item, visible] return properties def create_ufo_task(self, region=None): if self.expects_multiple_inputs and region is None: raise UfoModelError(f'{self.caption} expects multiple inputs ' 'but there is no node with such capability in the flow') ufo_task = UFO_PLUGIN_MANAGER.get_task(self._task_name) self._setup_ufo_task(ufo_task, region=region) return ufo_task def _setup_ufo_task(self, ufo_task, region=None): for prop in self: setattr(ufo_task.props, prop, self[prop]) def reset_batches(self): """ In case the model can process batches and has internal state depending on them, this is where it can be re-set. """ pass @property def uses_gpu(self): return UFO_PLUGIN_MANAGER.get_task(self._task_name).uses_gpu() @property def expects_multiple_inputs(self): return False def get_ufo_model_class(ufo_task_name): # Use this to determine inputs and outputs but create a new object in the constructor in order # to enable multiple instances having different parameter values _ufo_task = UFO_PLUGIN_MANAGER.get_task(ufo_task_name) ufo_task_num_inputs = _ufo_task.get_num_inputs() ufo_task_num_outputs = int(_ufo_task.get_mode() & Ufo.TaskMode.SINK == 0) class UfoAutoModel(UfoTaskModel): name = ufo_task_name.replace('-', '_') def __init__(self, style=None, parent=None, scrollable=True): self.num_ports = {PortType.input: ufo_task_num_inputs, PortType.output: ufo_task_num_outputs} self.data_type = {} self.port_caption = {} self.port_caption_visible = {} for port_type in (PortType.input, PortType.output): self.data_type[port_type] = {} self.port_caption[port_type] = {} self.port_caption_visible[port_type] = {} for i in range(self.num_ports[port_type]): port_captions = get_config_key('models', ufo_task_name, 'port-captions') if port_captions: port_caption = port_captions[port_type][str(i)] port_caption_visible = True if port_caption else False else: port_caption = '' port_caption_visible = False self.data_type[port_type][i] = UFO_DATA_TYPE self.port_caption[port_type][i] = port_caption self.port_caption_visible[port_type][i] = port_caption_visible self.ufo_task = None super().__init__(ufo_task_name, style=style, parent=parent, scrollable=scrollable) return UfoAutoModel class BaseCompositeModel(UfoModel): # Move functionality which can go here from CompositeModel here data_type = UFO_DATA_TYPE def __init__(self, models, connections, links=None, registry=None, style=None, parent=None): if registry is None: # This has to be keyword argument because of the qtpynodeeditor's node creation # mechanism, but the argument is actually required raise AttributeError('registry must be provided') super().__init__(style=style, parent=parent) # Nodes in the edit pop-up window self.window_parent = None self._property_links_model = None self._links = [] if links is None else links self._slave_property_links = [] self._window_nodes = {} self._other_scene = None self._other_view = None self.num_ports = {PortType.input: 0, PortType.output: 0} self.data_type = {PortType.input: {}, PortType.output: {}} self.port_caption = {PortType.input: {}, PortType.output: {}} self.port_caption_visible = {PortType.input: {}, PortType.output: {}} groups = {} self._registry = registry self._models = {} # Internal connections self._connections = connections # Composite port to subnode port mapping self._inside_ports = {} # Subnode port to composite port mapping self._outside_ports = {} for (name, state, visible, position) in models: # Don't use the deafault registry creation because embedded PropertyModel must have # scrollable set to False cls, orig_kwargs = registry.registered_model_creators()[name] # Don't mess with the original dictionary kwargs = {orig_key: orig_value for (orig_key, orig_value) in orig_kwargs.items()} if issubclass(cls, PropertyModel): kwargs['scrollable'] = False if 'num-inputs' in state: kwargs['num_inputs'] = state['num-inputs'] model = cls(**kwargs) model.restore(state) self._models[model] = position groups[model] = visible model.item_focus_in.connect(self.on_item_focus_in) for port_type in ['input', 'output']: for index in range(model.num_ports[port_type]): side = (model.caption, port_type, index) if not any([conn.contains(*side) for conn in connections]): i = self.num_ports[port_type] self.data_type[port_type][i] = UFO_DATA_TYPE port_caption = model.caption if model.port_caption[port_type][index]: port_caption += ':' + model.port_caption[port_type][index] self.port_caption[port_type][i] = port_caption self.port_caption_visible[port_type][i] = True self._inside_ports[(port_type, i)] = (model, port_type, index) self._outside_ports[side] = (port_type, i) self.num_ports[port_type] += 1 self._view = MultiPropertyView(groups) def __getitem__(self, key): return self._view[key] def __contains__(self, key): return key in self._view def __iter__(self): return iter(self._view) def __repr__(self): return f'Composite(caption={self.caption}, models={sorted(list(iter(self._view)))})' def __str__(self): return repr(self) def get_outside_port(self, unique_name, port_type, port_index): return self._outside_ports[(unique_name, port_type, port_index)] def get_model_and_port_index(self, port_type, port_index): model, spt, index = self._inside_ports[(port_type, port_index)] return (model, index) def embedded_widget(self) -> QWidget: return self._view if self._view else None def resizable(self): return True def on_item_focus_in(self, item, name, caption, model): self.item_focus_in.emit(item, name, self.caption + '->' + caption, model) @property def is_editing(self): """Is wubwindow open.""" return self._window_nodes != {} @property def property_links_model(self): return self._property_links_model @property_links_model.setter def property_links_model(self, plm): self._property_links_model = plm for model in self._models: if isinstance(model, BaseCompositeModel): model.property_links_model = plm def contains_path(self, path): """Is there a caption *path* inside this model.""" model = self for caption in path: if caption in model: model = model[caption] else: return False return True def get_model_from_path(self, path): """*path* is caption path (str).""" model = self for caption in path: model = model[caption] return model def is_model_inside(self, model): """Return True if *model* is inside at any level.""" paths = self.get_leaf_paths() for path in paths: for item in path: if item == model: return True return False def get_path_from_model(self, model): """*model* must be inside this composite model.""" paths = self.get_leaf_paths() for path in paths: for (i, item) in enumerate(path): if item == model: return path[:i + 1] raise KeyError(f'{model} not inside') def get_descendant_graph(self, in_subwindow=False): """ Get all descendant models recursively in case there are composite models inside this model. If *in_subwindow* is True, return models shown to the user in the subwindow, otherwise the ones created at class instantiation. For composites inside this one, if *in_subwindow* is True return the subwindow models, but if it's not being edited instead raising an exception, return the internal models. """ if in_subwindow and not self.is_editing: raise ValueError('in_subwindow True but no subwindow open') graph = nx.DiGraph() def descend(parent): if in_subwindow and parent.is_editing: models = [node.model for node in parent._window_nodes.values()] else: models = [parent[key] for key in parent] for model in models: graph.add_edge(parent, model) if isinstance(model, BaseCompositeModel): descend(model) descend(self) return graph def get_leaf_paths(self, in_subwindow=False): graph = self.get_descendant_graph(in_subwindow=in_subwindow) leaves = [node for node in graph.nodes if graph.out_degree(node) == 0] paths = [] for leaf in leaves: paths.append(list(nx.simple_paths.all_simple_paths(graph, self, leaf))[0]) return paths def restore(self, state, restore_caption=True): self._connections = [CompositeConnection(*args) for args in state['connections']] self._view.restore_groups(state['models']) super().restore(state, restore_caption=restore_caption) def restore_links(self, node): if self.property_links_model: row = self.property_links_model.rowCount() for items in self._links: # A row can be restored only if no property from the state is in the link model # yet row_ok = True for str_path in items: prop_name = str_path[-1] model = self.get_model_from_path(str_path[:-1]) if self.property_links_model.find_items([node, model, prop_name], [NODE_ROLE, MODEL_ROLE, PROPERTY_ROLE]): LOG.info(f'{str_path[-2]}->{prop_name} already in property links') row_ok = False break if row_ok: for (i, str_path) in enumerate(items): model = self.get_model_from_path(str_path[:-1]) self.property_links_model.add_item(node, model, str_path[-1], row, i) row += 1 def save(self): state = {'name': self.name, 'caption': self.caption} state['models'] = self._view.export_groups() for (model, position) in self._models.items(): state['models'][model.caption]['position'] = position # This is necessary for creating models from saved files state['models'][model.caption]['name'] = model.name state['connections'] = [conn.save() for conn in self._connections] if self.property_links_model: state['links'] = [] paths = self.get_leaf_paths() models = [path[-1] for path in paths] items = self.property_links_model.get_model_links(models) for row in items.values(): # First item in the row is this model, skip it state['links'].append([str_path[1:] for str_path in row]) return state def on_connection_created(self, connection): self._other_scene.connection_deleted.disconnect(self.on_connection_deleted) self._other_scene.delete_connection(connection) self._other_scene.connection_deleted.connect(self.on_connection_deleted) def on_connection_deleted(self, connection): self._other_scene.connection_created.disconnect(self.on_connection_created) self._other_scene.restore_connection(connection.__getstate__()) self._other_scene.connection_created.connect(self.on_connection_created) def double_clicked(self, parent): self.edit_in_window(parent=parent) def on_other_scene_double_clicked(self, node): node.model.double_clicked(self._other_view) def expand_into_graph(self, graph): """Expand to submodels in a *graph*, which is a networkx.DiGraph instance.""" name_to_model = {} for model in self._models: LOG.debug(f'Adding node {model.name}') graph.add_node(model) name_to_model[model.caption] = model for conn in self._connections: source = name_to_model[conn.from_unique_name] dest = name_to_model[conn.to_unique_name] LOG.debug(f'Adding edge {source.name}@{conn.from_port_index} -> ' f'{dest.name}@{conn.to_port_index}') graph.add_edge(source, dest, input=conn.to_port_index, output=conn.from_port_index) def _expand_into_scene(self, scene, original_nodes=None, restore_captions=False): # unique name to node instance mapping name_to_node = {} for model in self._models: if original_nodes and model.caption in original_nodes: node = scene.restore_node(original_nodes[model.caption]) else: with saved_kwargs(scene.registry, model.__getstate__()): if restore_captions: node = scene.create_node(model.__class__) else: # This is the main scene, links restoration takes place in expand_into_scene # for all nodes including composites node = scene.create_node(model.__class__, restore_links=False) if isinstance(model, PropertyModel) or isinstance(model, BaseCompositeModel): node.model.restore(model.save(), restore_caption=restore_captions) if isinstance(node.model, BaseCompositeModel): node.model.property_links_model = self.property_links_model else: node.model.restore(model.save()) name_to_node[model.caption] = node if self._models[model] is not None: node.position = (self._models[model]['x'], self._models[model]['y']) for conn in self._connections: f_node = name_to_node[conn.from_unique_name] t_node = name_to_node[conn.to_unique_name] f_port = f_node[PortType.output][conn.from_port_index] t_port = t_node[PortType.input][conn.to_port_index] scene.create_connection(f_port, t_port, check_cycles=False) return name_to_node def add_slave_links(self): self._slave_property_links = [] if not self.property_links_model: return for node in self._window_nodes.values(): if isinstance(node.model, BaseCompositeModel): paths = node.model.get_leaf_paths(in_subwindow=node.model._window_nodes != {}) else: paths = [[node.model]] # Propagate all signals from leaves to the original models for path in paths: str_path = [m.caption for m in path] new_model = path[-1] orig_model = self.get_model_from_path(str_path) # Create a link from this node's model instances to the original root # models in the link model (there can be other composites along the way to # the root root_model = self.property_links_model.get_root_model(orig_model) if root_model: prop_names = self.property_links_model.get_model_properties(root_model) for prop_name in prop_names: if (new_model, prop_name) not in self._slave_property_links: # In order to remove slaves when the subwindow is closed, register # the slaves with respect to the most nested composite registering_model = path[-2] if len(path) > 1 else self if registering_model.is_editing: registering_model._slave_property_links.append((new_model, prop_name)) registering_model.property_links_model.add_silent(new_model, prop_name, root_model, prop_name) if registering_model.window_parent: # If the registering model has a parent, register also the # models in it's internal model view new_model = registering_model[path[-1].caption] registering_model = registering_model.window_parent registering_model._slave_property_links.append((new_model, prop_name)) registering_model.property_links_model.add_silent(new_model, prop_name, root_model, prop_name) def edit_in_window(self, parent=None): self._other_scene = FlowScene(registry=self._registry) self._other_scene.node_double_clicked.connect(self.on_other_scene_double_clicked) self._window_nodes = self._expand_into_scene(self._other_scene, restore_captions=True) # Store references to parent composites for node in self._window_nodes.values(): if isinstance(node.model, BaseCompositeModel): node.model.window_parent = self # Property links have to be registered with respect to the top composite model because # it's property model's property model is registered in property links window_parent = self while window_parent.window_parent: window_parent = window_parent.window_parent window_parent.add_slave_links() # Disable manipulation because the number of ports is fixed, so we can't e.g. internally # connect two nodes and delete the newly occupied port from the composite node self._other_scene.allow_node_creation = False self._other_scene.allow_node_deletion = False # There is no allow_connection_creation/deletion, so take care of it here self._other_scene.connection_created.connect(self.on_connection_created) self._other_scene.connection_deleted.connect(self.on_connection_deleted) self._other_view = FlowView(self._other_scene, parent=parent) self._other_view.setWindowFlag(Qt.Window, True) self._other_view.closeEvent = self.view_close_event self._other_view.setWindowTitle(self.name) self._other_view.resize(900, 600) self._other_view.show() def view_close_event(self, event): for node in self._window_nodes.values(): # Clse all composite children recursively first if isinstance(node.model, BaseCompositeModel) and node.model.is_editing: node.model._other_view.close() node.model.window_parent = None for (unique_name, node) in self._window_nodes.items(): self._view[unique_name].restore(node.model.save()) if self.property_links_model: for (model, prop_name) in self._slave_property_links: self.property_links_model.remove_silent(model, prop_name) self._slave_property_links = [] self._window_nodes = {} self._other_scene = None self._other_view = None def expand_into_scene(self, scene, composite_node, original_nodes=None): """ Expand this node into *scene* and replace *composite_node*'s connections with connections going straight into its subnodes. Also create connections internal to this node and update property links. *original_nodes* is a dictionary in form {caption: node_state} which will be used for positioning of the replacing nodes (scene.restore_node instead of scene.create_node will be called). """ assert self.property_links_model is not None # Connections to external nodes connections = [] # name_to_node is in format caption: new node dictionary # Internal connections are handled in _expand_into_scene name_to_node = self._expand_into_scene(scene, original_nodes=original_nodes, restore_captions=False) for port_type in [PortType.input, PortType.output]: for index, port in composite_node[port_type].items(): if port.connections: connection = port.connections[0] outside_port = connection.valid_ports[opposite_port(port_type)] internal_model, pt, pi = self._inside_ports[(port_type, index)] connections.append((outside_port, name_to_node[internal_model.caption][pt][pi])) # Update property links for (subcaption, subnode) in name_to_node.items(): if isinstance(subnode.model, BaseCompositeModel): # Get all leaf PropertyModel instances paths = subnode.model.get_leaf_paths() else: paths = [[subnode.model]] # In case selected node is composite, replace all leaf node links for path in paths: str_path = [model.caption for model in path] # Captions might have changed if subnode captions were equal to other captions # in the scene and the composite node which is being replaced contains still the # old ones old_str_path = [subcaption] + str_path[1:] old_model = composite_node.model.get_model_from_path(old_str_path) self.property_links_model.replace_item(subnode, path[-1], old_model) subnode.graphics_object.setSelected(True) scene.remove_node(composite_node) # Create outside connections only after the composite node has been deleted to prevent # creating multiple connections per input port in the outside nodes for outside, inside in connections: scene.create_connection(outside, inside, check_cycles=False) return name_to_node, connections def get_composite_model_class(composite_name, models, connections, links=None): if not composite_name: raise UfoModelError('composite name must be specified') class CompositeModel(BaseCompositeModel): name = composite_name data_type = UFO_DATA_TYPE def __init__(self, style=None, parent=None, registry=None): super().__init__(models, connections, links=links, registry=registry, style=style, parent=parent) model = CompositeModel model.caption_visible = True model.caption = composite_name return model class UfoGeneralBackprojectModel(UfoTaskModel): name = 'general_backproject' num_ports = {PortType.input: 1, PortType.output: 1} data_type = UFO_DATA_TYPE def __init__(self, style=None, parent=None, scrollable=True): super().__init__('general-backproject', style=style, parent=parent, scrollable=scrollable) self.needs_fixed_scheduler = True self.can_split_gpu_work = True def make_properties(self): properties = super().make_properties() slice_memory_coeff = NumberQLineEditViewItem(0.01, 1., default_value=0.8, tooltip='Portion of used GPU memory') properties['slice-memory-coeff'] = [slice_memory_coeff, False] return properties def split_gpu_work(self, gpus): from tofu.genreco import make_runs, DTYPE_CL_SIZE def check_region(region): if not len(np.arange(*self[region])): raise UfoModelError(f'Invalid {region} {self[region]}') # Check if ranges are OK check_region('region') check_region('x-region') check_region('y-region') gpu_indices = range(len(gpus)) bpp = DTYPE_CL_SIZE[self['store-type']] runs = make_runs(gpus, gpu_indices, self['x-region'], self['y-region'], self['region'], bpp, slice_memory_coeff=self['slice-memory-coeff']) return runs def _setup_ufo_task(self, ufo_task, region=None): separate = ['region', 'slice-memory-coeff'] task_props = [prop for prop in self if prop not in separate] for prop in task_props: setattr(ufo_task.props, prop, self[prop]) # Set region separately in case there are multiple inputs current_region = self['region'] if region is None else region setattr(ufo_task.props, 'region', current_region) class UfoVaryingInputModel(UfoTaskModel): """Base class for models which can have varying number if inputs.""" def __init__(self, task_name, style=None, parent=None, scrollable=True, num_inputs=None, dialog_title='Number of inputs', dialog_label='Number of inputs:'): if not num_inputs: num_inputs, ok = QInputDialog.getInt(parent, dialog_title, dialog_label, value=1, min=1, max=10, step=1) if not ok: raise UfoModelError('Number of inputs must be specified') self.num_ports = {PortType.input: num_inputs, PortType.output: 1} self.data_type = {PortType.output: {0: UFO_DATA_TYPE}} self.port_caption = {PortType.output: {0: ''}} self.port_caption_visible = {PortType.output: {0: False}} self.data_type[PortType.input] = {} self.port_caption[PortType.input] = {} self.port_caption_visible[PortType.input] = {} for i in range(num_inputs): self.data_type[PortType.input][i] = UFO_DATA_TYPE self.port_caption[PortType.input][i] = '' self.port_caption_visible[PortType.input][i] = False super().__init__(task_name, style=style, parent=parent, scrollable=scrollable) def save(self): state = super().save() state['num-inputs'] = self.num_ports['input'] return state class UfoOpenCLModel(UfoVaryingInputModel): name = 'opencl' def __init__(self, style=None, parent=None, scrollable=True, num_inputs=None): super().__init__('opencl', style=style, parent=parent, scrollable=scrollable, num_inputs=num_inputs) def _setup_ufo_task(self, ufo_task, region=None): for prop in self: if prop in ['filename', 'source']: # opencl task really needs NULL value = self[prop] if self[prop] else None else: value = self[prop] setattr(ufo_task.props, prop, value) class UfoReadModel(UfoTaskModel): name = 'read' num_ports = {PortType.input: 0, PortType.output: 1} data_type = UFO_DATA_TYPE def __init__(self, style=None, parent=None, scrollable=True): super().__init__('read', style=style, parent=parent, scrollable=scrollable) def auto_fill(self): import glob import imageio if os.path.isdir(self['path']): paths = sorted(glob.glob(os.path.join(self['path'], '*'))) else: paths = [self['path']] num_images = 0 for path in paths: try: num_images += len(imageio.get_reader(path)) except: LOG.error(f"Error reading '{path}'") if not num_images: raise UfoModelError(f"No images found in {self['path']}") self['number'] = num_images def double_clicked(self, parent): current_path = self['path'] if not os.path.isdir(current_path): current_path = os.path.dirname(current_path) if not current_path: current_path = QtCore.QDir.homePath() dialog = FileDirDialog() if dialog.exec_(): self['path'] = dialog.selectedFiles()[0] def _setup_ufo_task(self, ufo_task, region=None): for prop in self: if prop != 'raw-bitdepth' or self['raw-bitdepth']: setattr(ufo_task.props, prop, self[prop]) class UfoRetrievePhaseModel(UfoVaryingInputModel): name = 'retrieve_phase' def __init__(self, style=None, parent=None, scrollable=True, num_inputs=None): super().__init__('retrieve-phase', style=style, parent=parent, scrollable=scrollable, dialog_title='Multi-distance Setup', dialog_label='Number of distances:', num_inputs=num_inputs) def make_properties(self): properties = super().make_properties() # Override distance property based on how many inputs we expect tooltip = properties['distance'][0].widget.toolTip() item = RangeQLineEditViewItem(tooltip=tooltip, default_value=[], num_items=self.num_ports['input'], is_float=True) properties['distance'] = [item, True] if self.num_ports['input'] > 1: properties['method'][0].set('ctf_multidistance') properties['method'][0].widget.setEnabled(False) properties['distance-x'][0].widget.setEnabled(False) properties['distance-y'][0].widget.setEnabled(False) return properties class UfoWriteModel(UfoTaskModel): name = 'write' num_ports = {PortType.input: 1, PortType.output: 0} data_type = UFO_DATA_TYPE def __init__(self, style=None, parent=None, scrollable=True): super().__init__('write', style=style, parent=parent, scrollable=scrollable) def double_clicked(self, parent): current_path = os.path.dirname(self['filename']) if not current_path: current_path = QtCore.QDir.homePath() file_name, _ = QFileDialog.getSaveFileName(None, "Select File Name", current_path) if file_name: self['filename'] = file_name @property def expects_multiple_inputs(self): return '{region}' in self['filename'] def _setup_ufo_task(self, ufo_task, region=None): if region is not None and not self.expects_multiple_inputs: raise UfoModelError('Write got region without enabling multiple inputs. ' 'Add {region} somewhere in the "filename" field to enable it.') super()._setup_ufo_task(ufo_task, region=region) filename = self['filename'] if region is not None and self.expects_multiple_inputs: filename = filename.format(region=region[0]) setattr(ufo_task.props, 'filename', filename) class _Batch(QObject): finished = pyqtSignal(int) def __init__(self, ufo_task, shape, batch_id): super().__init__(parent=None) self.batch_id = batch_id self.data = np.empty(shape, dtype=np.float32) ptr = self.data.__array_interface__['data'][0] ufo_task.props.pointer = ptr ufo_task.props.max_size = self.data.nbytes ufo_task.connect('processed', self._on_processed) self.num_processed = 0 def _on_processed(self, ufo_task): self.num_processed += 1 if self.num_processed == self.data.shape[0]: self.finished.emit(self.batch_id) class UfoMemoryOutModel(UfoTaskModel): name = 'memory_out' num_ports = {PortType.input: 1, PortType.output: 1} data_type = {PortType.input: {0: UFO_DATA_TYPE}, PortType.output: {0: ARRAY_DATA_TYPE}} port_caption = {PortType.input: {0: ''}, PortType.output: {0: ''}} port_caption_visible = {PortType.input: {0: False}, PortType.output: {0: False}} def __init__(self, style=None, parent=None, scrollable=True): self._lock = Lock() self.reset_batches() super().__init__('memory-out', style=style, parent=parent, scrollable=scrollable) @property def expects_multiple_inputs(self): return self['number'] == '{region}' def make_properties(self): width_item = IntQLineEditViewItem(0, 1000000, default_value=0, tooltip='Input width') height_item = IntQLineEditViewItem(0, 1000000, default_value=0, tooltip='Input height') depth_item = IntQLineEditViewItem(0, 1000000, default_value=1, tooltip='Input depth (for 2D images should be 1)') number_item = QLineEditViewItem(default_value=1, tooltip='Number of inputs') properties = {'width': [width_item, True], 'height': [height_item, True], 'depth': [depth_item, True], 'number': [number_item, True]} return properties def consume_batch(self, batch_id): def consume(current_batch): LOG.debug(f'{self.caption}: consuming {current_batch.batch_id} (caller {batch_id})') self._current_data = current_batch.data self.data_updated.emit(0) # Free memory up self._batches[self._expecting_id] = None with self._lock: if self._expecting_id == batch_id: consume(self._batches[self._expecting_id]) self._expecting_id += 1 while self._expecting_id in self._waiting_list: consume(self._batches[self._expecting_id]) del self._waiting_list[self._waiting_list.index(self._expecting_id)] self._expecting_id += 1 else: LOG.debug(f'{self.caption}: putting {batch_id} on waiting list') self._waiting_list.append(batch_id) def out_data(self, port: int) -> NodeData: LOG.debug(f'{self.caption}: out_data shape:' f'{None if self._current_data is None else self._current_data.shape}') return self._current_data def reset_batches(self): self._batches = [] self._waiting_list = [] self._expecting_id = 0 self._current_data = None def _setup_ufo_task(self, ufo_task, region=None): if region is not None and not self.expects_multiple_inputs: raise UfoModelError('Memory Out got region without enabling multiple inputs. ' 'Type {region} in the "number" field to enable it.') number = int(self['number']) if region is None else len(np.arange(*region)) shape = (number, self['height'], self['width']) with self._lock: batch = _Batch(ufo_task, shape, len(self._batches)) self._batches.append(batch) batch.finished.connect(self.consume_batch) class ImageViewerModel(UfoModel): name = 'image_viewer' caption = 'Image Viewer' num_ports = {PortType.input: 1, PortType.output: 0, } data_type = ARRAY_DATA_TYPE def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._node_data = None from tofu.flow.viewer import ImageViewer self._widget = ImageViewer() self._reset = True def embedded_widget(self): return self._widget def resizable(self): return True def double_clicked(self, parent): try: if self._widget.images is not None and not self._widget.popup_visible: import pyqtgraph self._widget.popup() except ImportError: LOG.debug('pyqtgraph not installed, not popping up') def set_in_data(self, data: NodeData, port: Port): if data is not None: if self._reset: self._widget.images = data self._reset = False else: self._widget.append(data) def reset_batches(self): self._reset = True def cleanup(self): self._widget.cleanup() def get_ufo_model_classes(names=None): all_names = set(UFO_PLUGIN_MANAGER.get_all_task_names()) # stamp causes a gobject unref warning blacklist = set(['general-backproject', 'memory-in', 'memory-out', 'opencl', 'read', 'retrieve-phase', 'stamp', 'write']) all_names = list(all_names - blacklist) return (get_ufo_model_class(name) for name in names or all_names) def get_composite_model_classes_from_json(state): """ Get composite model classes from their json representation. This is recursive in case a user creates a composite inside the scene, then adds nodes and creates another composite with the first one inside and doesn't export explicitly the first one. The order of returned classes is bottom -> up, i.e. first the classes which have striclty non-composite submodels are returned and the top level class is last. """ classes = [] def go_down(current): connections = [CompositeConnection(*args) for args in current['connections']] submodels = [] for (key, model) in current['models'].items(): if 'models' in model['model'] and 'connections' in model['model']: go_down(current['models'][key]['model']) # models are tuples (name, state, visible, position) submodels.append((model['name'], model['model'], model['visible'], model['position'])) classes.append(get_composite_model_class(current['name'], submodels, connections, links=current.get('links', None))) go_down(state) return classes def get_composite_model_classes(): import xdg.BaseDirectory composite_lists = [] paths = [pkg_resources.resource_filename(__name__, 'composites'), xdg.BaseDirectory.save_data_path('tofu', 'flows', 'composites')] for path in paths: file_names = sorted(glob.glob(os.path.join(path, '*.cm'))) for file_name in file_names: LOG.debug(f'Loading composite from {file_name}') try: with open(file_name, 'r') as f: state = json.load(f) composite_lists.append(get_composite_model_classes_from_json(state)) except Exception as e: LOG.error(e, exc_info=True) return composite_lists class UfoModelError(FlowError): pass ufo-kit-tofu-ed0e5bd/tofu/flow/propertylinksmodels.py000066400000000000000000000371131521054151500232500ustar00rootroot00000000000000import logging from PyQt5.QtCore import QDataStream, pyqtSignal from PyQt5.QtGui import QStandardItemModel, QStandardItem from tofu.flow.models import PropertyModel, BaseCompositeModel from tofu.flow.util import MODEL_ROLE, NODE_ROLE, PROPERTY_ROLE LOG = logging.getLogger(__name__) def _decode_mime_data(data): byte_array = data.data('application/x-sourcetreemodelindex') ds = QDataStream(byte_array) row = ds.readInt32() column = ds.readInt32() internal_id = ds.readUInt64() return (row, column, internal_id) def _data_from_tree_index(index): """ Traverse parents up to the root and get the root node, model and it's property from *index*, which must be a property record (leaf in the tree). """ prop_name = index.data() index = index.parent() model = index.data(role=MODEL_ROLE) while index.data(role=NODE_ROLE) is None and index.isValid(): index = index.parent() node = index.data(role=NODE_ROLE) return (node, model, prop_name) def _get_string_path(node, model, prop_name): if isinstance(node.model, BaseCompositeModel): path = node.model.get_path_from_model(model) else: path = [model] str_path = [model.caption for model in path] str_path.append(prop_name) return str_path class NodeTreeModel(QStandardItemModel): """Tree model representing nodes in the scene.""" def add_node(self, node): item = self._add_model(node.model) if item: item.setData(node, role=NODE_ROLE) def remove_node(self, node): for j in range(self.rowCount()): item = self.item(j, 0) if item and item.data(role=NODE_ROLE) == node: self.removeRow(j) break def clear(self): """In PyQt5, clear doesn't emit the rowsAboutToBeRemoved signal and this does effectively the same. """ self.removeRows(0, self.rowCount()) self.removeColumns(0, self.columnCount()) self.rowCount(), self.columnCount() def set_nodes(self, nodes): self.clear() for node in nodes: self.add_node(node) def _add_model(self, flow_model, parent=None): if not parent: parent = self.invisibleRootItem() item = None if (isinstance(flow_model, PropertyModel) or isinstance(flow_model, BaseCompositeModel)): item = QStandardItem(flow_model.caption) item.setData(flow_model, role=MODEL_ROLE) item.setEditable(False) if isinstance(flow_model, PropertyModel): for prop in sorted(flow_model): prop_item = QStandardItem(prop) prop_item.setEditable(False) item.appendRow(prop_item) else: for submodel_name in sorted(flow_model): self._add_model(flow_model[submodel_name], parent=item) if item: parent.appendRow(item) return item class PropertyLinksModel(QStandardItemModel): """Links model representing property links between nodes in the scene.""" restored = pyqtSignal() def __init__(self, node_model): super().__init__() self._silent = {} self._slaves = {} self._node_model = node_model self._node_model.rowsAboutToBeRemoved.connect(self.on_node_rows_about_to_be_removed) def __contains__(self, key): for column in range(self.columnCount()): if self.findItems(key, column=column): return True return False def clear(self): for j in range(self.rowCount()): for i in range(self.columnCount()): self.remove_item(self.indexFromItem(self.item(j, i))) super().clear() def find_items(self, data_list, roles): result = [] for j in range(self.rowCount()): for i in range(self.columnCount()): item = self.item(j, i) if item: success = True for (data, role) in zip(data_list, roles): if item.data(role=role) != data: success = False break if success: result.append(item) return result def get_model_links(self, models): """ Get links between *models*. Return dict {row index: [str_path, ...]}, where *str_path* is the path from the topmost model (in case of composites along the way) to the property name. """ items = {} for model in models: for item in self.find_items([model], [MODEL_ROLE]): str_path = item.text().split('->') if item.row() not in items: items[item.row()] = [str_path] else: items[item.row()].append(str_path) return items def get_root_model(self, model): root_model = None items = self.find_items([model], [MODEL_ROLE]) if items: root_model = items[0].data(role=MODEL_ROLE) else: for (silent_model, prop_name) in self._silent: if silent_model == model: root_model = self._silent[(silent_model, prop_name)][0] return root_model def get_model_properties(self, model): items = self.find_items([model], [MODEL_ROLE]) return [item.data(role=PROPERTY_ROLE) for item in items] def add_item(self, node, model, prop_name, row, column, insert=False): """ Add item where *node* is the root node (can be composite), *model* is the leaf model (there can be composites above if the leaf is nested) and *prop_name* is the property name. *row* and *column* determine the table cell to which to add the item or replace an old item with the new one. If *insert* is True, insert a new row at *row*. """ str_path = '->'.join(_get_string_path(node, model, prop_name)) if str_path in self: raise ValueError(f'{str_path} already inside') item = QStandardItem(str_path) item.setData(model, role=MODEL_ROLE) item.setData(prop_name, role=PROPERTY_ROLE) item.setData(node, role=NODE_ROLE) item.setEditable(False) if row == -1: row = self.rowCount() if column == -1: # +1 to find an empty cell even if the row is full for i in range(self.columnCount() + 1): if self.item(row, i) is None: column = i break LOG.debug(f'Add item {node.model.caption}({item.data(role=MODEL_ROLE)}):' f'{item.data(role=PROPERTY_ROLE)} at ({row}, {column})') if insert: self.insertRow(row, item) else: self.setItem(row, column, item) # In case the composite is being edit in a subwindow, connect the slave nodes from the # subsecene if isinstance(node.model, BaseCompositeModel): node.model.add_slave_links() model.property_changed.connect(self.on_property_changed) def remove_item(self, index): flow_model = index.data(role=MODEL_ROLE) if not flow_model: # Empty cell return property_name = index.data(role=PROPERTY_ROLE) flow_model.property_changed.disconnect(self.on_property_changed) self.setItem(index.row(), index.column(), None) # Remove all associated slaves root_key = (flow_model, property_name) if root_key in self._slaves: for slave_key in tuple(self._slaves[root_key]): self.remove_silent(*slave_key) def add_silent(self, model, property_name, root, root_property_name): key = (model, property_name) if key in self._silent: return model.property_changed.connect(self.on_property_changed) root_key = (root, root_property_name) if not self.find_items(root_key, (MODEL_ROLE, PROPERTY_ROLE)): raise ValueError(f'{model} not in property links') self._silent[key] = root_key if root_key not in self._slaves: self._slaves[root_key] = [key] else: self._slaves[root_key].append(key) LOG.debug(f'Slave {root}->{root_property_name} -> {model}->{property_name} added') def remove_silent(self, model, property_name): key = (model, property_name) if key not in self._silent: # Already removed, e.g. by deleting an item by del key while some composite windows were # still opened return model.property_changed.disconnect(self.on_property_changed) root_key = self._silent[key] index = self._slaves[root_key].index(key) del self._slaves[root_key][index] if not self._slaves[root_key]: del self._slaves[root_key] del self._silent[key] LOG.debug(f'Slave {model}->{property_name} removed') def replace_item(self, node, new_model, old_model): for j in range(self.rowCount()): for i in range(self.columnCount()): item = self.item(j, i) if item and item.data(role=MODEL_ROLE) == old_model: # Don't break, replace all properties of *old_model* prop_name = item.data(role=PROPERTY_ROLE) slaves = tuple(self._slaves.get((old_model, prop_name), [])) self.remove_item(self.indexFromItem(item)) self.add_item(node, new_model, prop_name, j, i) for (slave_model, slave_property_name) in slaves: self.add_silent(slave_model, slave_property_name, new_model, prop_name) def on_node_rows_about_to_be_removed(self, parent, first, last): for k in range(first, last + 1): node = self._node_model.item(k, 0).data(role=NODE_ROLE) for j in range(self.rowCount()): for i in range(self.columnCount()): item = self.item(j, i) if item and item.data(role=NODE_ROLE) == node: self.remove_item(self.indexFromItem(item)) self.compact() def canDropMimeData(self, data, action, row, column, parent): can_drop = False if data.hasFormat('application/x-sourcetreemodelindex'): src_row, src_column, src_internal_id = _decode_mime_data(data) src_model_index = self._node_model.createIndex(src_row, src_column, src_internal_id) # src_model_index is the property, it's parent is the model node, flow_model, property_name = _data_from_tree_index(src_model_index) str_path = '->'.join(_get_string_path(node, flow_model, property_name)) can_drop = str_path not in self if parent.isValid(): # Parent itself can be an empty cell, so use the first column which is for sure # occupied since the parent is valid (row exists and we are not between rows) first_item = self.item(parent.row(), 0) parent_model = first_item.data(role=MODEL_ROLE) parent_property_name = first_item.data(role=PROPERTY_ROLE) if not type(flow_model[property_name]) is type(parent_model[parent_property_name]): # Data can be dropped only if the types of properties match can_drop = False return can_drop def dropMimeData(self, data, action, row, column, parent): src_row, src_column, src_internal_id = _decode_mime_data(data) src_model_index = self._node_model.createIndex(src_row, src_column, src_internal_id) node, flow_model, property_name = _data_from_tree_index(src_model_index) if parent.isValid(): row = parent.row() insert = False else: insert = True # drops never replace items and column=-1 means "find an empty cell" self.add_item(node, flow_model, property_name, row, -1, insert=insert) return True def save(self): state = [] for j in range(self.rowCount()): row_state = [] for i in range(self.columnCount()): item = self.item(j, i) if not item: continue node = item.data(role=NODE_ROLE) model = item.data(role=MODEL_ROLE) prop_name = item.data(role=PROPERTY_ROLE) str_path = _get_string_path(node, model, prop_name) row_state.append([node.id, str_path]) state.append(row_state) return state def restore(self, state, nodes): self.clear() for (j, row) in enumerate(state): for (i, (node_id, path)) in enumerate(row): node = nodes[node_id] # Last path entry is the property name if isinstance(node.model, BaseCompositeModel): flow_model = node.model.get_model_from_path(path[1:-1]) else: flow_model = node.model self.add_item(node, flow_model, path[-1], j, i) self.restored.emit() def compact(self): # Shift rows to the left for j in range(self.rowCount()): filled = [] for i in range(self.columnCount()): if self.item(j, i): filled.append(self.takeItem(j, i)) for (i, item) in enumerate(filled): self.setItem(j, i, item) # Check empty rows for j in range(self.rowCount())[::-1]: is_empty = True for i in range(self.columnCount()): if self.item(j, i): is_empty = False if is_empty: self.removeRow(j) # Check empty columns for i in range(self.columnCount())[::-1]: is_empty = True for j in range(self.rowCount()): if self.item(j, i): is_empty = False if is_empty: self.removeColumn(i) def on_property_changed(self, sig_model, sig_property_name, value): LOG.debug(f'on_property_changed: {sig_model}, {sig_model.caption}, ' f'{sig_property_name}, {value}') sig_key = (sig_model, sig_property_name) if sig_key in self._silent: # pyqtSignal came from a composite subwindow, get root model from the silent slave root_key = self._silent[sig_key] root_key[0][root_key[1]] = value else: root_key = (sig_model, sig_property_name) row = -1 for j in range(self.rowCount()): for i in range(self.columnCount()): item = self.item(j, i) if (item and item.data(role=MODEL_ROLE) == root_key[0] and item.data(role=PROPERTY_ROLE) == root_key[1]): row = j break if row != -1: break for i in range(self.columnCount()): item = self.item(row, i) if item: model = item.data(role=MODEL_ROLE) property_name = item.data(role=PROPERTY_ROLE) if root_key != (model, property_name): model[property_name] = value # Notify all slaves key = (model, property_name) if key in self._slaves: for (slave_model, slave_property_name) in self._slaves[key]: if (slave_model, slave_property_name) != (sig_model, sig_property_name): slave_model[slave_property_name] = value ufo-kit-tofu-ed0e5bd/tofu/flow/propertylinkswidget.py000066400000000000000000000070231521054151500232450ustar00rootroot00000000000000from PyQt5.QtCore import QMimeData, Qt, QDataStream, QByteArray, QIODevice, QModelIndex from PyQt5.QtGui import QDrag from PyQt5.QtWidgets import QAbstractItemView, QLabel, QTableView, QTreeView, QVBoxLayout, QWidget def _encode_mime_data(index: QModelIndex): """Encode item in *index* into :class:`QMimeData`.""" mime_data = QMimeData() data = QByteArray() stream = QDataStream(data, QIODevice.WriteOnly) try: stream.writeInt32(index.row()) stream.writeInt32(index.column()) stream.writeUInt64(index.internalId()) finally: stream.device().close() mime_data.setData("application/x-sourcetreemodelindex", data) return mime_data class PropertyLinksView(QTableView): """Table view for displaying node property links.""" def keyPressEvent(self, event): if event.key() == Qt.Key_Delete: model = self.model() for index in self.selectedIndexes(): model.remove_item(index) model.compact() class NodesView(QTreeView): """Tree view displaying nodes in the scene.""" def get_drag_index(self): selected = self.selectedIndexes() if not selected: return index = selected[0] if index.child(0, 0).row() != -1: return return index def mouseMoveEvent(self, event): """All that a mouse *event* can do is start a drag and drop operation.""" index = self.get_drag_index() if not index: return drag = QDrag(self) mime_data = _encode_mime_data(index) drag.setMimeData(mime_data) drag.exec_(Qt.CopyAction) return True class PropertyLinks(QWidget): """Widget displaying nodes in the scene and their property links in one window.""" def __init__(self, node_model, table_model, parent=None): super().__init__(parent=parent, flags=Qt.Window) self.setWindowTitle('Property Links') self.resize(600, 800) self._treeview = NodesView() self._treeview.setHeaderHidden(True) self._treeview.setAlternatingRowColors(True) self._treeview.setDragEnabled(True) self._treeview.setAcceptDrops(False) self._treeview.setModel(node_model) node_model.itemChanged.connect(self.on_node_model_changed) self._table_view = PropertyLinksView() self._table_view.setDragDropOverwriteMode(False) self._table_view.setDragDropMode(QAbstractItemView.DropOnly) table_model.itemChanged.connect(self.on_table_model_changed) table_model.rowsInserted.connect(self.on_table_model_rows_inserted) table_model.restored.connect(self.on_table_model_restored) self._table_view.setModel(table_model) main_layout = QVBoxLayout() main_layout.addWidget(self._treeview) main_layout.addWidget(QLabel('Drag properties from above to the area below')) main_layout.addWidget(self._table_view) self.setLayout(main_layout) def show(self): self._table_view.resizeColumnsToContents() self._treeview.sortByColumn(0, Qt.AscendingOrder) super().show() def on_table_model_changed(self, item): self._table_view.resizeColumnToContents(item.column()) def on_table_model_rows_inserted(self, index, start, stop): self._table_view.resizeColumnToContents(0) def on_table_model_restored(self): self._table_view.resizeColumnsToContents() def on_node_model_changed(self, item): self._treeview.sortByColumn(0, Qt.AscendingOrder) ufo-kit-tofu-ed0e5bd/tofu/flow/runslider.py000066400000000000000000000160531521054151500211260ustar00rootroot00000000000000from functools import partial from PyQt5.QtCore import Qt, pyqtSignal, QTimer from PyQt5 import QtGui from PyQt5.QtWidgets import QGridLayout, QLineEdit, QWidget, QSlider from tofu.flow.models import IntQLineEditViewItem, RangeQLineEditViewItem, UfoIntValidator from tofu.flow.util import FlowError class RunSlider(QWidget): value_changed = pyqtSignal(float) def __init__(self, parent=None): super().__init__(parent=parent, flags=Qt.Window) self.setWindowFlag(Qt.WindowStaysOnTopHint) self.setMaximumHeight(20) self.setMinimumWidth(600) self.min_edit = QLineEdit() self.min_edit.setToolTip('Minimum') self.min_edit.setMaximumWidth(80) self.min_edit.editingFinished.connect(self.on_min_edit_editing_finished) self.current_edit = QLineEdit() self.current_edit.setToolTip('Current value') self.current_edit.editingFinished.connect(self.on_current_edit_editing_finished) self.max_edit = QLineEdit() self.max_edit.setToolTip('Maximum') self.max_edit.setMaximumWidth(80) self.max_edit.editingFinished.connect(self.on_max_edit_editing_finished) self.slider = QSlider(orientation=Qt.Horizontal) self.slider.setMinimum(0) self.slider.setMaximum(100) self.slider.valueChanged.connect(self.on_slider_value_changed) main_layout = QGridLayout() main_layout.addWidget(self.current_edit, 0, 0, 1, 3, Qt.AlignHCenter) main_layout.addWidget(self.min_edit, 1, 0) main_layout.addWidget(self.slider, 1, 1) main_layout.addWidget(self.max_edit, 1, 2) self.setLayout(main_layout) self.view_item = None self.real_minimum = 0 self.real_maximum = 100 self.real_span = 100 self.type = None self._last_value = None self.setEnabled(False) def _update_range(self, current=None): self.real_span = self.real_maximum - self.real_minimum if current is not None: self.slider.blockSignals(True) self.slider.setValue(int(round((current - self.real_minimum) / self.real_span * 100))) self.slider.blockSignals(False) def get_real_value(self): # First convert possible exponents to float (in case UFO has huge defaults set) return self.type(float(self.current_edit.text())) def set_widget_value(self): value = self.get_real_value() self._last_value = value if isinstance(self.view_item, RangeQLineEditViewItem): value = [value] self.view_item.set(value) # Notify linked widgets self.view_item.property_changed.emit(self.view_item) def set_current_validator(self): if self.type == int: validator = UfoIntValidator(self.real_minimum, self.real_maximum) else: validator = QtGui.QDoubleValidator(self.real_minimum, self.real_maximum, 1000) self.current_edit.setValidator(validator) def setup(self, view_item): if self.view_item == view_item: return False current = view_item.get() if isinstance(view_item, RangeQLineEditViewItem): if len(current) > 1: return False self.type = float current = current[0] d_current = 0.1 * abs(current) if current else 100 self.real_minimum = current - d_current self.real_maximum = current + d_current else: self.type = int if isinstance(view_item, IntQLineEditViewItem) else float self.real_minimum = view_item.widget.validator().bottom() self.real_maximum = view_item.widget.validator().top() self.view_item = view_item self._update_range(current=current) _set_number(self.min_edit, self.real_minimum) _set_number(self.max_edit, self.real_maximum) _set_number(self.current_edit, current) self._last_value = current self.setEnabled(True) self.set_current_validator() return True def reset(self): self.real_minimum = 0 self.real_maximum = 100 self.real_span = 100 self._last_value = None self.type = None self.min_edit.setText('') self.max_edit.setText('') self.current_edit.setText('') self.setWindowTitle('') self.view_item = None self.setEnabled(False) def on_slider_value_changed(self, value): def delayed_update(init_value): current_value = self.slider.value() if init_value == current_value: self.set_widget_value() self.value_changed.emit(real_value) if self.view_item: real_value = self.slider.value() / 100 * self.real_span + self.real_minimum self.current_edit.setText('{:g}'.format(self.type(real_value))) func = partial(delayed_update, value) QTimer.singleShot(100, func) def on_current_edit_editing_finished(self): if not self.view_item: return try: value = self.type(self.current_edit.text()) except ValueError: raise RunSliderError('Not a number') if value == self._last_value: # Nothing new, do not emit value_changed signal in case the app is closing return self.slider.blockSignals(True) self.slider.setValue(int(round((value - self.real_minimum) / self.real_span * 100))) self.slider.blockSignals(False) self.set_widget_value() self.value_changed.emit(value) def on_min_edit_editing_finished(self): if not self.view_item: return try: value = self.type(self.min_edit.text()) except ValueError: raise RunSliderError('Not a number') if value >= self.real_maximum: raise RunSliderError('Minimum must be smaller than maximum') current = self.get_real_value() self.real_minimum = value if current < self.real_minimum: current = self.real_minimum self.current_edit.setText('{:g}'.format(current)) self.set_widget_value() self.value_changed.emit(current) self._update_range(current=current) self.set_current_validator() def on_max_edit_editing_finished(self): if not self.view_item: return try: value = self.type(self.max_edit.text()) except ValueError: raise RunSliderError('Not a number') if value <= self.real_minimum: raise RunSliderError('Maximum must be greater than minimum') current = self.get_real_value() self.real_maximum = value if current > self.real_maximum: current = self.real_maximum self.current_edit.setText('{:g}'.format(current)) self.set_widget_value() self.value_changed.emit(current) self._update_range(current=current) self.set_current_validator() def _set_number(edit, number): edit.setText('{:g}'.format(number)) class RunSliderError(FlowError): pass ufo-kit-tofu-ed0e5bd/tofu/flow/scene.py000066400000000000000000000427651521054151500202250ustar00rootroot00000000000000import logging import numpy as np import networkx as nx from PyQt5.QtCore import pyqtSignal, QObject from PyQt5.QtWidgets import QInputDialog from qtpynodeeditor import FlowScene, NodeDataModel, PortType, opposite_port from tofu.flow.models import (BaseCompositeModel, ImageViewerModel, PropertyModel, UFO_DATA_TYPE, get_composite_model_class, get_composite_model_classes_from_json) from tofu.flow.util import CompositeConnection, FlowError, saved_kwargs from tofu.flow.propertylinksmodels import PropertyLinksModel, NodeTreeModel LOG = logging.getLogger(__name__) class UfoScene(FlowScene): nodes_duplicated = pyqtSignal(list, dict) # view item, its name and model name item_focus_in = pyqtSignal(QObject, str, str, NodeDataModel) def __init__(self, registry=None, style=None, parent=None, allow_node_creation=True, allow_node_deletion=True): super().__init__(registry=registry, style=style, parent=parent, allow_node_creation=allow_node_creation, allow_node_deletion=allow_node_deletion) self._composite_nodes = {} self._selected_nodes_on_disabled = [] self.node_model = NodeTreeModel() self.node_model.setColumnCount(1) self.property_links_model = PropertyLinksModel(self.node_model) self.style_collection.node.opacity = 1 self.style_collection.connection.use_data_defined_colors = True self.node_double_clicked.connect(self.on_node_double_clicked) def __getstate__(self): state = super().__getstate__() state['property-links'] = self.property_links_model.save() return state def __setstate__(self, doc): for node in doc['nodes']: model = node['model'] if 'models' in model and 'connections' in model: # First register the composite model models = get_composite_model_classes_from_json(model) for model in models: self.registry.register_model(model, category='Composite', registry=self.registry) # Restore the scene super().__setstate__(doc) # and the property link models and widgets if 'property-links' in doc: self.node_model.set_nodes(self.nodes.values()) self.property_links_model.restore(doc['property-links'], self.nodes) def create_node(self, data_model, restore_links=True): """Overrides :class:`FlowScene` in order to create a node with *data_model* with a unique caption. """ LOG.debug(f'Create node with model {data_model}') node = super().create_node(data_model) self._setup_new_node(node) if restore_links and isinstance(node.model, BaseCompositeModel): node.model.restore_links(node) return node def restore_node(self, node_json): LOG.debug(f"Restore node with model {node_json['model']['name']}") with saved_kwargs(self.registry, node_json['model']): node = super().restore_node(node_json) self._setup_new_node(node) return node def on_item_focus_in(self, view_item, prop_name, caption, model): self.item_focus_in.emit(view_item, prop_name, caption, model) def _setup_new_node(self, node): self._set_unique_caption(node) self.node_model.add_node(node) if isinstance(node.model, BaseCompositeModel): node.model.property_links_model = self.property_links_model node.model.item_focus_in.connect(self.on_item_focus_in) def _set_unique_caption(self, new_node): caption = new_node.model.caption captions = [node.model.caption for node in self.nodes.values() if node != new_node] if caption in captions: fmt = new_node.model.base_caption + ' {}' i = 2 while fmt.format(i) in captions: i += 1 caption = fmt.format(i) new_node.model.caption = caption def remove_node(self, node): if hasattr(node.model, 'cleanup'): node.model.cleanup() if (isinstance(node.model, BaseCompositeModel) and node.model.name in self._composite_nodes): del self._composite_nodes[node.model.name] self.node_model.remove_node(node) super().remove_node(node) def is_selected_one_composite(self): result = False nodes = self.selected_nodes() if len(nodes) == 1: result = isinstance(nodes[0].model, BaseCompositeModel) return result def skip_nodes(self): selected_nodes = self.selected_nodes() # First check if the selected nodes may be skipped for node in selected_nodes: if (node.model.num_ports[PortType.input] != 1 or node.model.num_ports[PortType.output] != 1): raise FlowError('Only nodes with one input and one output can be skipped') ports = list(node.state.ports) if ports[0].data_type != UFO_DATA_TYPE or ports[1].data_type != UFO_DATA_TYPE: raise FlowError('Only tasks with UFO input and output can be skipped') # And only if all is fine, then skip them for node in selected_nodes: node.model.skip = not node.model.skip opacity = 0.5 if node.model.skip else 1 node.state.input_connections[0].graphics_object.setOpacity(opacity) node.state.output_connections[0].graphics_object.setOpacity(opacity) node.graphics_object.setOpacity(opacity) def auto_fill(self): for node in self.nodes.values(): if isinstance(node.model, BaseCompositeModel): paths = node.model.get_leaf_paths() else: paths = [[node.model]] for path in paths: model = path[-1] if isinstance(model, PropertyModel): model.auto_fill() def copy_nodes(self): new_nodes = {} selected_nodes = self.selected_nodes() # Create nodes for node in selected_nodes: new_node = self.create_node(node.model) new_nodes[node] = new_node values = node.model.save() new_node.model.restore(values, restore_caption=False) # Create connections for node, new_node in new_nodes.items(): for connection in self.connections: port = connection.ports[0] in_index = port.index out_index = connection.ports[1].index if port.node == node: other_node = connection.ports[1].node if other_node in new_nodes: # Other node has been also selected self.create_connection_by_index(new_node, in_index, new_nodes[other_node], out_index, None) self.nodes_duplicated.emit(selected_nodes, new_nodes) def create_composite(self): composite_name, ok = QInputDialog.getText(None, 'Create Composite Node', 'Name:') if not ok: return if composite_name in self.registry.registered_model_creators(): raise FlowError(f'Composite node with name "{composite_name}" has already ' 'been registered') self._composite_nodes[composite_name] = {} connection_replacements = [] models = [] connections = [] selected_nodes = self.selected_nodes() for node in selected_nodes: unique_name = node.model.caption models.append((node.model.name, node.model.save(), True, node.__getstate__()['position'])) self._composite_nodes[composite_name][unique_name] = node.__getstate__() # Connections assigned_ports = [] x = [] y = [] for node in selected_nodes: x.append(node.position.x()) y.append(node.position.y()) for port_type in ['input', 'output']: for index, port in node[port_type].items(): if port.connections: # We allow only one connection conn = port.connections[0] other_port = conn.ports[0] if conn.ports[1] == port else conn.ports[1] other = conn.get_node(opposite_port(port_type)) if (other in selected_nodes and port not in assigned_ports and other_port not in assigned_ports): # Connection reaches to a node outside selection if port_type == PortType.input: to_node_name = node.model.caption to_node_index = index from_node_name = other.model.caption from_node_index = other_port.index else: to_node_name = other.model.caption to_node_index = other_port.index from_node_name = node.model.caption from_node_index = index conn = CompositeConnection(from_node_name, from_node_index, to_node_name, to_node_index) connections.append(conn) assigned_ports.append(port) if other not in selected_nodes: inside = (node.model.caption, port_type, index) connection_replacements.append((other_port, inside)) # Get links which will be internal to the newly created model node_models = [] for selected_node in self.selected_nodes(): if isinstance(selected_node.model, BaseCompositeModel): paths = selected_node.model.get_leaf_paths() else: paths = [[selected_node.model]] node_models += [path[-1] for path in paths] internal_links = list(self.property_links_model.get_model_links(node_models).values()) composite = get_composite_model_class(composite_name, models, connections, links=internal_links) self.registry.register_model(composite, category='Composite', registry=self.registry) node = self.create_node(composite, restore_links=False) for selected_node in selected_nodes: if isinstance(selected_node.model, BaseCompositeModel): # Get all leaf PropertyModel instances paths = selected_node.model.get_leaf_paths() else: paths = [[selected_node.model]] # In case selected node is composite, replace all leaf node links for path in paths: new_model = node.model.get_model_from_path([model.caption for model in path]) self.property_links_model.replace_item(node, new_model, path[-1]) self.remove_node(selected_node) for outside_port, inside in connection_replacements: port_type, index = node.model.get_outside_port(*inside) self.create_connection(outside_port, node[port_type][index], check_cycles=False) # Put the new composite node to the average of x and y position of the selected nodes node.position = (np.mean(x), np.mean(y)) node.graphics_object.setSelected(True) return node def on_node_double_clicked(self, node): views = self.views() if views: node.model.double_clicked(views[0]) def expand_composite(self, node): name = node.model.name original_nodes = self._composite_nodes.get(name, None) return node.model.expand_into_scene(self, node, original_nodes=original_nodes) def is_fully_connected(self): """Are all the ports in all nodes connected?""" def are_ports_connected(node, port_type): for port in node[port_type].values(): if not port.connections: return False return True for node in self.nodes.values(): if not are_ports_connected(node, 'input'): return False if not are_ports_connected(node, 'output'): return False return True def are_all_ufo_tasks(self, graphs=None): """If all inputs and outputs of all models in all *graphs* have `UfoBuffer` data type, return True. If *graphs* are not specified, they are created from the scene. """ if graphs is None: graphs = self.get_simple_node_graphs() for graph in graphs: for model in graph.nodes: for port_type in ['input', 'output']: for data_type in model.data_type[port_type].values(): if data_type.id != 'UfoBuffer': return False return True def get_simple_node_graphs(self): """ Get a graph from the scene without composite nodes which can be directly used byt the execution. """ def get_composite(graph): """Get first found composite model.""" for model in graph.nodes: if isinstance(model, BaseCompositeModel): return model def replace_edge(graph, composite, edges, port_type): """Replace interface edges (going in or out from the composite model).""" for edge in edges: ports = graph.edges[edge] other = edge[0] if port_type == PortType.input else edge[1] model, index = composite.get_model_and_port_index(port_type, ports[port_type]) if model not in graph: graph.add_node(model) if port_type == PortType.input: source = other dest = model input_port = index output_port = ports[PortType.output] else: source = model dest = other input_port = ports[PortType.input] output_port = index LOG.debug(f'Adding edge {source.name}@{output_port} -> {dest.name}@{input_port}') graph.add_edge(source, dest, input=input_port, output=output_port) def replace_composite(graph, composite): composite.expand_into_graph(graph) edges = graph.in_edges(composite, keys=True) replace_edge(graph, composite, edges, PortType.input) edges = graph.out_edges(composite, keys=True) replace_edge(graph, composite, edges, PortType.output) graph.remove_node(composite) # Initial graph with composite nodes. We need a multigraph because composite nodes may have # many outputs which can lead to a same destination node. graph = nx.MultiDiGraph() for node in self.nodes.values(): if not node.model.skip: graph.add_node(node.model) for conn in self.connections: p_dest, p_source = conn.ports if p_dest.node.model.skip: LOG.debug(f'Skiping connection {p_source.node.model.name} -> ' f'{p_dest.node.model.name}') continue while p_source.node.model.skip: LOG.debug(f'Skiping connection {p_source.node.model.name} -> ' f'{p_dest.node.model.name}') previous_conn = p_source.node.state.input_connections[0] previous_node = previous_conn.output_node p_source = list(previous_node.state.output_ports)[0] graph.add_edge(p_source.node.model, p_dest.node.model, input=p_dest.index, output=p_source.index) # Expand composite nodes until there are only simple ones left model = get_composite(graph) while model: LOG.debug(f'Replacing composite {model.name}') replace_composite(graph, model) model = get_composite(graph) components = nx.weakly_connected_components(graph) return [nx.subgraph(graph, component) for component in components] def set_enabled(self, enabled): selected_nodes = self.selected_nodes() self.allow_node_creation = enabled self.allow_node_deletion = enabled for node in self.nodes.values(): if not isinstance(node.model, ImageViewerModel): node.graphics_object.setEnabled(enabled) if enabled: if node in self._selected_nodes_on_disabled: node.graphics_object.setSelected(True) else: if node in selected_nodes: self._selected_nodes_on_disabled.append(node) for conn in self.connections: conn._graphics_object.setEnabled(enabled) if enabled: self._selected_nodes_on_disabled = [] ufo-kit-tofu-ed0e5bd/tofu/flow/util.py000066400000000000000000000044321521054151500200720ustar00rootroot00000000000000import contextlib import json import pkg_resources from PyQt5.QtCore import Qt from qtpynodeeditor import PortType MODEL_ROLE = Qt.UserRole + 1 PROPERTY_ROLE = MODEL_ROLE + 1 NODE_ROLE = PROPERTY_ROLE + 1 with open(pkg_resources.resource_filename(__name__, 'config.json')) as f: ENTRIES = json.load(f) def get_config_key(*keys, default=None): current = ENTRIES.get(keys[0], default) if current != default and len(keys) > 1: for key in keys[1:]: current = current.get(key, default) if current == default: break return current @contextlib.contextmanager def saved_kwargs(registry, state): """ Tell the registry to use the number of saved inputs for model creation but only for one model creation, i.e. reset the context afterward. """ if 'num-inputs' in state: kwargs = registry.registered_model_creators()[state['name']][1] kwargs['num_inputs'] = state['num-inputs'] try: yield finally: if 'num-inputs' in state: del kwargs['num_inputs'] class CompositeConnection: def __init__(self, from_unique_name, from_port_index, to_unique_name, to_port_index): if from_unique_name == to_unique_name: raise ValueError('from_unique_name and to_unique_name must be different') self.from_unique_name = from_unique_name self.from_port_index = from_port_index self.to_unique_name = to_unique_name self.to_port_index = to_port_index def contains(self, unique_name, port_type, port_index): is_from = is_to = False if port_type == PortType.output: is_from = (unique_name == self.from_unique_name and port_index == self.from_port_index) else: is_to = (unique_name == self.to_unique_name and port_index == self.to_port_index) return is_from or is_to def save(self): return [self.from_unique_name, self.from_port_index, self.to_unique_name, self.to_port_index] def __str__(self): return repr(self) def __repr__(self): fmt = 'Connection({}@{} -> {}@{})' return fmt.format(self.from_unique_name, self.from_port_index, self.to_unique_name, self.to_port_index) class FlowError(Exception): pass ufo-kit-tofu-ed0e5bd/tofu/flow/viewer.py000066400000000000000000000451001521054151500204130ustar00rootroot00000000000000import logging import numpy as np import os from PyQt5 import QtGui from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QFileDialog, QGridLayout, QLabel, QLineEdit, QMenu, QWidget, QSlider from tofu.flow.util import FlowError LOG = logging.getLogger(__name__) class ScreenImage: """On-screen image representation.""" def __init__(self, image=None): self._black_point = None self._white_point = None self.minimum = None self.maximum = None self.image = image @property def image(self): return self._image @image.setter def image(self, image): """ Keep the minimum, maximum, black and white points as they are so that images don't flicker when going through a sequence. """ self._image = image if self._image is not None: self._image = image.astype(np.float32) if self.minimum is None: self.minimum = np.nanmin(self._image) if self.maximum is None: self.maximum = np.nanmax(self._image) if self.black_point is None: self.black_point = self.minimum if self.white_point is None: self.white_point = self.maximum @property def white_point(self): return self._white_point @white_point.setter def white_point(self, value): if self.black_point is not None and value < self.black_point: raise ImageViewingError('White point cannot be smaller than black point') self._white_point = value @property def black_point(self): return self._black_point @black_point.setter def black_point(self, value): if self.white_point is not None and value > self.white_point: raise ImageViewingError('Black point cannot be greater than white point') self._black_point = value def reset(self): """Reset black and white points.""" if self._image is not None: self.minimum = np.nanmin(self._image) self.maximum = np.nanmax(self._image) self._black_point = self.minimum self._white_point = self.maximum def auto_levels(self, percentile=0.1): """ Compute cumulative histogram normalized to [0, 100] and truncate gray values which fall below *percentile* or above 100 - *percentile*. """ hist, bins = np.histogram(self._image, bins=256) cumsum = np.cumsum(hist) / float(np.sum(hist)) * 100 valid = bins[np.where((cumsum > percentile) & (cumsum < 100 - percentile))] if len(valid): self.black_point = valid[0] self.white_point = valid[-1] else: self.black_point = self.white_point = self._image[0, 0] def set_black_point_normalized(self, value): """Set black point according to *value*, where value is from interval [0, 255].""" native = self.convert_normalized_value_to_native(value) if native > self.white_point: raise ImageViewingError('Black point cannot be greater than white point') self.black_point = native def set_white_point_normalized(self, value): """Set white point according to *value*, where value is from interval [0, 255].""" native = self.convert_normalized_value_to_native(value) if native < self.black_point: raise ImageViewingError('White point cannot be smaller than white point') self.white_point = native def convert_normalized_value_to_native(self, value): """Convert *value* from interval [0, 255] to the gray value in the image.""" if value < 0 or value > 255: raise ImageViewingError('Normalized value must be in interval [0, 255]') span = self.maximum - self.minimum return value / 255 * span + self.minimum def convert_native_value_to_normalized(self, value): """Convert gray value in the image to a normalized value in interval [0, 255].""" if value < self.minimum or value > self.maximum: raise ImageViewingError(f'Value must be in interval [{self.minimum}, {self.maximum}]') span = self.maximum - self.minimum return (value - self.minimum) / span * 255 if span > 0 else 0 def get_pixmap(self, downsampling=1): """Get :class:`QPixmap` for display.""" if self.black_point is None or self.white_point is None: raise ImageViewingError('Image has not been set') image = self.image[::downsampling, ::downsampling] - self.black_point if self.white_point - self.black_point > 0: image = np.clip(image * 255 / (self.white_point - self.black_point), 0, 255) image = image.astype(np.uint8) qim = QtGui.QImage(image, image.shape[1], image.shape[0], image[0].nbytes, QtGui.QImage.Format.Format_Grayscale8) return QtGui.QPixmap.fromImage(qim) class ImageLabel(QLabel): """QLabel holding the image data.""" def __init__(self, screen_image=None, parent=None): super().__init__(parent=parent) self.screen_image = screen_image def updateImage(self): if self.screen_image and self.screen_image.image is not None: hd = self.screen_image.image.shape[1] // self.width() vd = self.screen_image.image.shape[0] // self.height() downsampling = max(min(hd, vd), 1) pixmap = self.screen_image.get_pixmap(downsampling=downsampling) self.setPixmap(pixmap.scaled(self.width(), self.height(), Qt.KeepAspectRatio)) def resizeEvent(self, event): self.updateImage() class ImageViewer(QWidget): edit_height = 16 edit_width = 100 def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._images = None self._last_save_dir = '.' # Pyqtgraph popped up window self._pg_window = None self.screen_image = ScreenImage() self.new_image_auto_levels = True self.label = ImageLabel(self.screen_image) self.label.setAlignment(Qt.AlignVCenter | Qt.AlignCenter) self.slider_edit = QLineEdit() self.slider_edit.setFixedSize(self.edit_width, self.edit_height) self.slider_edit.returnPressed.connect(self.on_slider_edit_return_pressed) self.slider = QSlider(Qt.Horizontal) validator = QtGui.QIntValidator(0, self.slider.maximum()) self.slider_edit.setValidator(validator) self.slider.valueChanged.connect(self.on_slider_value_changed) self.min_slider = QSlider(Qt.Horizontal) self.max_slider = QSlider(Qt.Horizontal) self.min_slider_edit = QLineEdit() self.min_slider_edit.setFixedSize(self.edit_width, self.edit_height) self.max_slider_edit = QLineEdit() self.max_slider_edit.setFixedSize(self.edit_width, self.edit_height) self.min_slider.setMinimum(0) self.max_slider.setMinimum(0) self.min_slider.setMaximum(255) self.max_slider.setMaximum(255) self.max_slider.setValue(255) self.min_slider.valueChanged.connect(self.on_min_slider_value_changed) self.max_slider.valueChanged.connect(self.on_max_slider_value_changed) self.min_slider_edit.returnPressed.connect(self.on_min_slider_edit_return_pressed) self.max_slider_edit.returnPressed.connect(self.on_max_slider_edit_return_pressed) # Tooltips self.slider.setToolTip('Image index in sequence') self.slider_edit.setToolTip(self.slider.toolTip()) self.min_slider.setToolTip('Black point') self.min_slider_edit.setToolTip(self.min_slider.toolTip()) self.max_slider.setToolTip('White point') self.max_slider_edit.setToolTip(self.min_slider.toolTip()) mainLayout = QGridLayout() mainLayout.addWidget(self.label, 0, 0, 1, 2) mainLayout.addWidget(self.slider_edit, 1, 0) mainLayout.addWidget(self.slider, 1, 1) mainLayout.addWidget(self.min_slider_edit, 2, 0) mainLayout.addWidget(self.min_slider, 2, 1) mainLayout.addWidget(self.max_slider_edit, 3, 0) mainLayout.addWidget(self.max_slider, 3, 1) self.setLayout(mainLayout) def contextMenuEvent(self, event): contextMenu = QMenu(self) reset_action = contextMenu.addAction('Reset') auto_levels_action = contextMenu.addAction('Auto Levels') new_image_auto_levels = contextMenu.addAction('Auto Levels on New Image') new_image_auto_levels.setCheckable(True) new_image_auto_levels.setChecked(self.new_image_auto_levels) pop_action = None save_action = None try: import pyqtgraph if self._images is not None and not self.popup_visible: pop_action = contextMenu.addAction('Pop Up') except: LOG.debug('pyqtgraph not installed, pop up option disabled') try: import imageio if self._images is not None: save_action = contextMenu.addAction('Save') except: LOG.debug('imageio not installed, save option disabled') action = contextMenu.exec_(self.mapToGlobal(event.pos())) if not action: return if action == save_action: file_name, _ = QFileDialog.getSaveFileName(None, "Select File Name", self._last_save_dir, "Images (*.tif *.png *.jpg)") if file_name: if not os.path.splitext(file_name)[1]: file_name += '.tif' self._last_save_dir = os.path.dirname(file_name) if self._images.shape[0] == 1: imageio.imsave(file_name, self._images[0]) else: if os.path.splitext(file_name)[1] != '.tif': raise ImageViewingError('3D data can be stored only in tif format') # bigtiff size from tifffile imageio.volsave(file_name, self._images, bigtiff=self._images.nbytes > 2 ** 32 - 2 ** 25) elif action == reset_action: self.reset_clim() elif action == auto_levels_action: self.reset_clim(auto=True) elif action == new_image_auto_levels: self.new_image_auto_levels = action.isChecked() elif action == pop_action: self.popup() @property def images(self): return self._images @images.setter def images(self, images): was_none = self._images is None self._images = images if self._images is None: self.screen_image.image = None self.set_enabled_adjustments(False) return self.set_enabled_adjustments(True) if self._images.ndim == 2: self._images = self._images[np.newaxis, :, :] if self._images.shape[0] == 1: self.slider.hide() self.slider_edit.hide() else: self.slider.setMaximum(len(self._images) - 1) self.slider.show() self.slider_edit.show() self.slider_edit.setText('0') self.slider.blockSignals(True) self.slider.setValue(0) self.slider.blockSignals(False) if self._pg_window is not None: self._update_pg_window_images() self._update_pg_window_index() self.screen_image.image = self._images[0] if was_none or self.new_image_auto_levels: self.reset_clim(auto=True) else: self.label.updateImage() validator = self.min_slider_edit.validator() if validator is None: validator = QtGui.QDoubleValidator(self.screen_image.minimum, self.screen_image.maximum, 100) self.min_slider_edit.setValidator(validator) self.max_slider_edit.setValidator(validator) else: validator.setRange(self.screen_image.minimum, self.screen_image.maximum, 100) self.slider_edit.validator().setTop(self.slider.maximum()) if self.label.width() < 256 or self.label.height() < 256: self.label.resize(256, 256) def append(self, images): if self.images is None: self.images = images else: if images.ndim == 2: images = images[np.newaxis, :, :] if images.shape[1:] != self.images.shape[1:]: raise ImageViewingError('Appended images have different shape ' f'{images.shape[1:]} than the displayed ones ' f'{self.images.shape[1:]}') self.images = np.concatenate((self.images, images)) def set_enabled_adjustments(self, enabled): self.slider.setEnabled(enabled) self.slider_edit.setEnabled(enabled) self.min_slider.setEnabled(enabled) self.min_slider_edit.setEnabled(enabled) self.max_slider.setEnabled(enabled) self.max_slider_edit.setEnabled(enabled) def reset_clim(self, auto=False): self.screen_image.reset() if auto: self.screen_image.auto_levels() self.min_slider_edit.setText('{:g}'.format(self.screen_image.black_point)) self.max_slider_edit.setText('{:g}'.format(self.screen_image.white_point)) self.set_slider_value(self.min_slider, self.screen_image.black_point) self.set_slider_value(self.max_slider, self.screen_image.white_point) self.label.updateImage() self._update_pg_window_lut() @property def popup_visible(self): return self._pg_window and self._pg_window.isVisible() def popup(self): import pyqtgraph pyqtgraph.setConfigOptions(antialias=True, imageAxisOrder='row-major') if self._pg_window is not None: if not self._pg_window.isVisible(): self._pg_window.show() return def on_pg_window_time_changed(index, time): self._set_index(index) self.slider.blockSignals(True) self.slider_edit.setText(str(index)) self.slider.setValue(index) self.slider.blockSignals(False) def on_pg_window_levels_changed(hist_item): minimum, maximum = hist_item.getLevels() if (self.screen_image.minimum <= minimum <= self.screen_image.maximum and self.screen_image.minimum <= maximum <= self.screen_image.maximum): self.min_slider_edit.setText('{:g}'.format(minimum)) self.set_slider_value(self.min_slider, minimum) self.max_slider_edit.setText('{:g}'.format(maximum)) self.set_slider_value(self.max_slider, maximum) self.screen_image.black_point = minimum self.screen_image.white_point = maximum self.label.updateImage() def pg_mouse_moved(ev): if self._pg_window.imageItem.sceneBoundingRect().contains(ev): pos = self._pg_window.imageItem.mapFromScene(ev) x = int(pos.x() + 0.5) y = int(pos.y() + 0.5) self._pg_window.view.setTitle('x={}, y={}, I={:g}'.format(x, y, self._pg_window.imageItem.image[y, x])) else: self._pg_window.view.setTitle('') self._pg_window = pyqtgraph.ImageView(view=pyqtgraph.PlotItem()) self._pg_window.imageItem.scene().sigMouseMoved.connect(pg_mouse_moved) self._pg_window.setWindowFlag(Qt.SubWindow, True) self._update_pg_window_images() self._update_pg_window_index() self._update_pg_window_lut() self._pg_window.show() self._pg_window.sigTimeChanged.connect(on_pg_window_time_changed) self._pg_window.ui.histogram.item.sigLevelsChanged.connect(on_pg_window_levels_changed) def cleanup(self): if self._pg_window: self._pg_window.close() self._pg_window = None def _set_index(self, index): self.screen_image.image = self.images[index] self.label.updateImage() def _update_pg_window_images(self): if self.images.shape[0] == 1: im_to_set = self.images[0] else: im_to_set = self.images self._pg_window.setImage(im_to_set, autoLevels=False) def _update_pg_window_index(self): if self._images.shape[0] > 1 and self._pg_window is not None: self._pg_window.blockSignals(True) self._pg_window.setCurrentIndex(self.slider.value()) self._pg_window.blockSignals(False) def _update_pg_window_lut(self): if self._pg_window is not None: self._pg_window.ui.histogram.item.blockSignals(True) self._pg_window.setLevels(self.screen_image.black_point, self.screen_image.white_point) self._pg_window.ui.histogram.item.blockSignals(False) def on_slider_value_changed(self, value): self._set_index(value) self.slider_edit.setText(str(value)) self._update_pg_window_index() def on_slider_edit_return_pressed(self): self.slider.setValue(int(self.slider_edit.text())) def on_min_slider_edit_return_pressed(self): value = float(self.min_slider_edit.text()) if value < self.screen_image.white_point: self.screen_image.black_point = value self.set_slider_value(self.min_slider, value) self.label.updateImage() self._update_pg_window_lut() def on_max_slider_edit_return_pressed(self): value = float(self.max_slider_edit.text()) if value > self.screen_image.black_point: self.screen_image.white_point = value self.set_slider_value(self.max_slider, value) self.label.updateImage() self._update_pg_window_lut() def on_min_slider_value_changed(self, value): self.screen_image.set_black_point_normalized(value) self.min_slider_edit.setText('{:g}'.format(self.screen_image.black_point)) self.label.updateImage() self._update_pg_window_lut() def on_max_slider_value_changed(self, value): self.screen_image.set_white_point_normalized(value) self.max_slider_edit.setText('{:g}'.format(self.screen_image.white_point)) self.label.updateImage() self._update_pg_window_lut() def set_slider_value(self, slider, value): slider.blockSignals(True) slider.setValue(int(self.screen_image.convert_native_value_to_normalized(value))) slider.blockSignals(False) class ImageViewingError(FlowError): pass ufo-kit-tofu-ed0e5bd/tofu/genreco.py000066400000000000000000000774731521054151500176070ustar00rootroot00000000000000"""General projection-based reconstruction for tomographic/laminographic cone/parallel beam data sets. """ import copy import itertools import logging import os import time import numpy as np from multiprocessing.pool import ThreadPool from threading import Event, Thread from gi.repository import Ufo from .preprocess import create_preprocessing_pipeline from .util import (fbp_filtering_in_phase_retrieval, get_filtering_padding, get_reconstructed_cube_shape, get_reconstruction_regions, get_filenames, determine_shape, get_scarray_value, Vector) from .tasks import get_task, get_writer LOG = logging.getLogger(__name__) DTYPE_CL_SIZE = {'float': 4, 'double': 8, 'half': 2, 'uchar': 1, 'ushort': 2, 'uint': 4} def genreco(args): st = time.time() if is_output_single_file(args): try: import ufo.numpy except ImportError: LOG.error('You must install ufo python support (in ufo-core/python) to be able to write single-file output') return if (args.energy is not None and args.propagation_distance is not None and not (args.projection_margin or args.disable_projection_crop)): LOG.warning('Phase retrieval without --projection-margin specification or ' '--disable-projection-crop may cause convolution artifacts') _fill_missing_args(args) _convert_angles_to_rad(args) set_projection_filter_scale(args) x_region, y_region, z_region = get_reconstruction_regions(args, store=True, dtype=float) vol_shape = get_reconstructed_cube_shape(x_region, y_region, z_region) bpp = DTYPE_CL_SIZE[args.store_type] num_voxels = vol_shape[0] * vol_shape[1] * vol_shape[2] vol_nbytes = num_voxels * bpp resources = [Ufo.Resources()] gpus = np.array(resources[0].get_gpu_nodes()) gpu_indices = np.array(args.gpus or list(range(len(gpus)))) if min(gpu_indices) < 0 or max(gpu_indices) > len(gpus) - 1: raise ValueError('--gpus contains invalid indices') gpus = gpus[gpu_indices] duration = 0 for i, gpu in enumerate(gpus): print('Max mem for {}: {:.2f} GB'.format(i, gpu.get_info(0) / 2. ** 30)) runs = make_runs(gpus, gpu_indices, x_region, y_region, z_region, bpp, slices_per_device=args.slices_per_device, slice_memory_coeff=args.slice_memory_coeff, data_splitting_policy=args.data_splitting_policy, num_gpu_threads=args.num_gpu_threads) for i in range(len(runs[0]) - 1): resources.append(Ufo.Resources()) LOG.info('Number of passes: %d', len(runs)) LOG.debug('GPUs and regions:') for regions in runs: LOG.debug('%s', str(regions)) for i, regions in enumerate(runs): duration += _run(resources, args, x_region, y_region, regions, i, vol_nbytes) num_gupdates = num_voxels * args.number * 1e-9 total_duration = time.time() - st LOG.debug('UFO duration: %.2f s', duration) LOG.debug('Total duration: %.2f s', total_duration) LOG.debug('UFO performance: %.2f GUPS', num_gupdates / duration) LOG.debug('Total performance: %.2f GUPS', num_gupdates / total_duration) def make_runs(gpus, gpu_indices, x_region, y_region, z_region, bpp, slices_per_device=None, slice_memory_coeff=0.8, data_splitting_policy='one', num_gpu_threads=1): gpu_indices = np.array(gpu_indices) def _add_region(runs, gpu_index, current, to_process, z_start, z_step): current_per_thread = current // num_gpu_threads for i in range(num_gpu_threads): if i + 1 == num_gpu_threads: current_per_thread += current % num_gpu_threads z_end = z_start + current_per_thread * z_step runs[-1].append((gpu_indices[gpu_index], [z_start, z_end, z_step])) z_start = z_end return z_start, z_end, to_process - current z_start, z_stop, z_step = z_region y_start, y_stop, y_step = y_region x_start, x_stop, x_step = x_region slice_width, slice_height, num_slices = get_reconstructed_cube_shape(x_region, y_region, z_region) if slices_per_device: slices_per_device = [slices_per_device for i in range(len(gpus))] else: slices_per_device = get_num_slices_per_gpu(gpus, slice_width, slice_height, bpp, slice_memory_coeff=slice_memory_coeff) max_slices_per_pass = sum(slices_per_device) if not max_slices_per_pass: raise RuntimeError('None of the available devices has enough memory to store any slices') num_full_passes = num_slices // max_slices_per_pass LOG.debug('Number of slices: %d', num_slices) LOG.debug('Slices per device %s', slices_per_device) LOG.debug('Maximum slices on all GPUs per pass: %d', max_slices_per_pass) LOG.debug('Number of passes with full workload: %d', num_slices // max_slices_per_pass) sorted_indices = np.argsort(slices_per_device)[-np.count_nonzero(slices_per_device):] runs = [] z_start = z_region[0] to_process = num_slices # Create passes where all GPUs are fully loaded for j in range(num_full_passes): runs.append([]) for i in sorted_indices: z_start, z_end, to_process = _add_region(runs, i, slices_per_device[i], to_process, z_start, z_step) if to_process: if data_splitting_policy == 'one': # Fill the last pass by maximizing the workload per GPU runs.append([]) for i in sorted_indices[::-1]: if not to_process: break current = min(slices_per_device[i], to_process) z_start, z_end, to_process = _add_region(runs, i, current, to_process, z_start, z_step) else: # Fill the last pass by maximizing the number of GPUs which will work num_gpus = len(sorted_indices) runs.append([]) for j, i in enumerate(sorted_indices): # Current GPU will either process the maximum number of slices it can. If the number # of slices per GPU based on even division between them cannot saturate the GPU, use # this number. This way the work will be split evenly between the GPUs. current = max(min(slices_per_device[i], (to_process - 1) // (num_gpus - j) + 1), 1) z_start, z_end, to_process = _add_region(runs, i, current, to_process, z_start, z_step) if not to_process: break return runs def get_num_slices_per_gpu(gpus, width, height, bpp, slice_memory_coeff=0.8): num_slices = [] slice_size = width * height * bpp for i, gpu in enumerate(gpus): max_mem = gpu.get_info(Ufo.GpuNodeInfo.GLOBAL_MEM_SIZE) num_slices.append(int(np.floor(max_mem * slice_memory_coeff / slice_size))) return num_slices def _run(resources, args, x_region, y_region, regions, run_number, vol_nbytes): """Execute one pass on all possible GPUs with slice ranges given by *regions*. Use separate thread per GPU and optimize the read projection regions. """ executors = [] writer = None last = None if is_output_single_file(args): import tifffile bigtiff = vol_nbytes > 2 ** 32 - 2 ** 25 LOG.debug('Writing BigTiff: %s', bigtiff) dirname = os.path.dirname(args.output) if dirname and not os.path.exists(dirname): os.makedirs(dirname) writer = tifffile.TiffWriter(args.output, append=run_number != 0, bigtiff=bigtiff) for index in range(len(regions)): gpu_index, region = regions[index] region_index = run_number * len(resources) + index executors.append( Executor( resources[index], args, region, x_region, y_region, gpu_index, region_index, writer=writer ) ) if last: # Chain up waiting events of subsequent executors executors[-1].wait_event = last.finished last = executors[-1] def start_one(index): return executors[index].process() st = time.time() try: with ThreadPool(processes=len(regions)) as pool: try: pool.map(start_one, list(range(len(regions)))) except KeyboardInterrupt: LOG.info('Processing interrupted') for executor in executors: executor.abort() finally: if writer: writer.close() LOG.debug('Writer closed') return time.time() - st def setup_graph(args, graph, x_region, y_region, region, source=None, gpu=None, do_output=True, index=0, make_reader=True): backproject = get_task('general-backproject', processing_node=gpu) if do_output: if args.dry_run: sink = get_task('null', processing_node=gpu, download=True) else: sink = get_writer(args) sink.props.filename = '{}-{:>03}-%04i.tif'.format(args.output, index) width = args.width height = args.height if args.transpose_input: tmp = width width = height height = tmp if args.projection_filter != 'none' and args.projection_crop_after == 'backprojection': # Take projection padding into account if fbp_filtering_in_phase_retrieval(args): padding = args.retrieval_padded_width - width padding_from = 'phase retrieval' else: padding = get_filtering_padding(width) padding_from = 'default backproject' args.center_position_x = [pos + padding / 2 for pos in args.center_position_x] if args.z_parameter == 'center-position-x': region = [region[0] + padding / 2, region[1] + padding / 2, region[2]] LOG.debug('center-position-x after padding: %g (from %s)', args.center_position_x[0], padding_from) backproject.props.parameter = args.z_parameter if args.burst: backproject.props.burst = args.burst backproject.props.z = args.z backproject.props.region = region backproject.props.x_region = x_region backproject.props.y_region = y_region backproject.props.center_position_x = args.center_position_x backproject.props.center_position_z = args.center_position_z backproject.props.source_position_x = args.source_position_x backproject.props.source_position_y = args.source_position_y backproject.props.source_position_z = args.source_position_z backproject.props.detector_position_x = args.detector_position_x backproject.props.detector_position_y = args.detector_position_y backproject.props.detector_position_z = args.detector_position_z backproject.props.detector_angle_x = args.detector_angle_x backproject.props.detector_angle_y = args.detector_angle_y backproject.props.detector_angle_z = args.detector_angle_z backproject.props.axis_angle_x = args.axis_angle_x backproject.props.axis_angle_y = args.axis_angle_y backproject.props.axis_angle_z = args.axis_angle_z backproject.props.volume_angle_x = args.volume_angle_x backproject.props.volume_angle_y = args.volume_angle_y backproject.props.volume_angle_z = args.volume_angle_z backproject.props.num_projections = args.number backproject.props.compute_type = args.compute_type backproject.props.result_type = args.result_type backproject.props.store_type = args.store_type backproject.props.overall_angle = args.overall_angle backproject.props.addressing_mode = args.genreco_padding_mode backproject.props.gray_map_min = args.slice_gray_map[0] backproject.props.gray_map_max = args.slice_gray_map[1] source = create_preprocessing_pipeline(args, graph, source=source, processing_node=gpu, cone_beam_weight=not args.disable_cone_beam_weight, make_reader=make_reader) if source: graph.connect_nodes(source, backproject) else: source = backproject if do_output: graph.connect_nodes(backproject, sink) last = sink else: last = backproject return (source, last) def is_output_single_file(args): filename = args.output.lower() return not args.dry_run and (filename.endswith('.tif') or filename.endswith('.tiff')) def set_projection_filter_scale(args): is_parallel = np.all(np.isinf(args.source_position_y)) magnification = (args.source_position_y[0] - args.detector_position_y[0]) / \ args.source_position_y[0] args.projection_filter_scale = 1. if is_parallel: if np.any(np.array(args.axis_angle_x)): LOG.debug('Adjusting filter for parallel beam laminography') args.projection_filter_scale = 0.5 * np.cos(args.axis_angle_x[0]) else: args.projection_filter_scale = 0.5 args.projection_filter_scale /= magnification ** 2 if np.all(np.array(args.axis_angle_x) == 0): LOG.debug('Adjusting filter for cone beam tomography') args.projection_filter_scale /= magnification def _fill_missing_args(args): (width, height) = determine_shape(args, args.projections, store=False) if args.transpose_input: tmp = width width = height height = tmp args.center_position_x = (args.center_position_x or [width / 2.]) args.center_position_z = (args.center_position_z or [height / 2.]) if not args.overall_angle: args.overall_angle = 360. LOG.info('Overall angle not specified, using 360 deg') if not args.number: if len(args.axis_angle_z) > 1: LOG.debug("--number not specified, using length of --axis-angle-z: %d", len(args.axis_angle_z)) args.number = len(args.axis_angle_z) else: num_files = len(get_filenames(args.projections)) if not num_files: raise RuntimeError("No files found in `{}'".format(args.projections)) LOG.debug("--number not specified, using number of files matching " "--projections pattern: %d", num_files) args.number = num_files if args.dry_run: if not args.number: raise ValueError('--number must be specified by --dry-run') determine_shape(args, args.projections, store=True) LOG.info('Dummy data W x H x N: {} x {} x {}'.format(args.width, args.height, args.number)) return args def _convert_angles_to_rad(args): names = ['detector_angle', 'axis_angle', 'volume_angle'] coords = ['x', 'y', 'z'] angular_z_params = [x[0].replace('_', '-') + '-' + x[1] for x in itertools.product(names, coords)] args.overall_angle = np.deg2rad(args.overall_angle) if args.z_parameter in angular_z_params: LOG.debug('Converting z parameter values to radians') args.region = _convert_list_to_rad(args.region) for name in names: for coord in coords: full_name = name + '_' + coord values = getattr(args, full_name) setattr(args, full_name, _convert_list_to_rad(values)) def _convert_list_to_rad(values): return np.deg2rad(np.array(values)).tolist() def _are_values_equal(values): return np.all(np.array(values) == values[0]) class Executor(object): """Reconstructs one region. :param writer: if not None, we'll be writing to a file shared with other executors and need to use *wait_event* to make sure we write our region when the previous executors are finished. """ def __init__(self, resources, args, region, x_region, y_region, gpu_index, region_index, writer=None): self.resources = resources self.args = args self.region = region self.gpu_index = gpu_index self.x_region = x_region self.y_region = y_region self.region_index = region_index self.writer = writer self.output = Ufo.OutputTask() if self.writer else None self.scheduler = None self.wait_event = None self.finished = Event() self.abort_requested = False def process(self): self.scheduler = Ufo.FixedScheduler() if hasattr(self.scheduler.props, 'enable_tracing'): LOG.debug("Use tracing: {}".format(self.args.enable_tracing)) self.scheduler.props.enable_tracing = self.args.enable_tracing self.scheduler.set_resources(self.resources) graph = Ufo.TaskGraph() gpu = self.scheduler.get_resources().get_gpu_nodes()[self.gpu_index] geometry = CTGeometry(self.args) if (len(self.args.center_position_z) == 1 and np.modf(self.args.center_position_z[0])[0] == 0 and geometry.is_simple_parallel_tomo): LOG.info('Simple tomography with integer z center, changing to center_position_z + 0.5 ' 'to avoid interpolation') geometry.args.center_position_z = (geometry.args.center_position_z[0] + 0.5,) if not self.args.disable_projection_crop: if not self.args.dry_run and (self.args.y or self.args.height or self.args.transpose_input): LOG.debug('--y or --height or --transpose-input specified, ' 'not optimizing projection region') else: geometry.optimize_args(region=self.region) opt_args = geometry.args if self.args.dry_run: source = get_task('dummy-data', number=self.args.number, width=self.args.width, height=self.args.height) else: source = None last = setup_graph(opt_args, graph, self.x_region, self.y_region, self.region, source=source, gpu=gpu, index=self.region_index, make_reader=True, do_output=self.writer is None)[-1] if self.writer: graph.connect_nodes(last, self.output) LOG.debug('Device: %d, region: %s', self.gpu_index, self.region) thread = Thread(target=self.scheduler.run, args=(graph,)) thread.setDaemon(True) thread.start() if self.writer: self.consume() thread.join() return self.scheduler.props.time def consume(self): import ufo.numpy if self.wait_event: LOG.debug('Executor of region %s waiting for writing', self.region) self.wait_event.wait() for i in np.arange(*self.region): if self.abort_requested: LOG.debug('Abort requested in writing of region %s', self.region) return buf = self.output.get_output_buffer() self.writer.save(ufo.numpy.asarray(buf)) self.output.release_output_buffer(buf) self.finished.set() LOG.debug('Executor of region %s finished writing', self.region) def abort(self): self.abort_requested = True if self.scheduler: self.scheduler.abort() class CTGeometry(object): def __init__(self, args): self.args = copy.deepcopy(args) determine_shape(self.args, self.args.projections, store=True) get_reconstruction_regions(self.args, store=True, dtype=float) self.args.center_position_x = (self.args.center_position_x or [self.args.width / 2.]) self.args.center_position_z = (self.args.center_position_z or [self.args.height / 2.]) @property def is_parallel(self): return np.all(np.isinf(self.args.source_position_y)) @property def is_detector_rotated(self): return (np.any(self.args.detector_angle_x) or np.any(self.args.detector_angle_y) or np.any(self.args.detector_angle_z)) @property def is_axis_rotated(self): return (np.any(self.args.axis_angle_x) or np.any(self.args.axis_angle_y) or np.any(self.args.axis_angle_z)) @property def is_volume_rotated(self): return (np.any(self.args.volume_angle_x) or np.any(self.args.volume_angle_y) or np.any(self.args.volume_angle_z)) @property def is_center_position_x_constant(self): return _are_values_equal(self.args.center_position_x) @property def is_center_position_z_constant(self): return _are_values_equal(self.args.center_position_z) @property def is_center_constant(self): return self.is_center_position_x_constant and self.is_center_position_z_constant @property def is_simple_parallel_tomo(self): return (not (self.is_axis_rotated or self.is_detector_rotated or self.is_volume_rotated) and self.is_parallel and self.is_center_constant) def optimize_args(self, region=None): xmin, ymin, xmax, ymax = self.compute_height(region=region) center_position_z = np.array(self.args.center_position_z) - ymin self.args.center_position_z = center_position_z.tolist() self.args.y = int(ymin) self.args.height = int(ymax - ymin) LOG.debug('Optimization for region: %s', region or self.args.region) LOG.debug('Optimized X: %d - %d, Z: %d - %d', xmin, xmax, ymin, ymax) LOG.debug('Optimized Z: %d', self.args.y) LOG.debug('Optimized height: %d', self.args.height) LOG.debug('Optimized center_position_z: %g - %g', self.args.center_position_z[0], self.args.center_position_z[-1]) def compute_height(self, region=None): extrema = [] if not region: region = self.args.region if self.is_simple_parallel_tomo: # Simple parallel beam tomography, thus compute only the horizontal crop at rotations # which are multiples of 45 degrees LOG.debug('Computing optimal projection region from 4 angles') projs_per_45 = self.args.number / self.args.overall_angle * np.pi / 4 stop = 4 if self.args.overall_angle <= np.pi else 8 indices = projs_per_45 * np.arange(1, stop, 2) indices = np.round(indices).astype(int).tolist() else: LOG.debug('Computing optimal projection region from all angles') indices = list(range(self.args.number)) for i in indices: extrema_0 = self._compute_one_parameter(region[0], i) extrema_1 = self._compute_one_parameter(region[1], i) extrema.append(extrema_0) extrema.append(extrema_1) minima = np.min(extrema, axis=0) maxima = np.max(extrema, axis=0) if maxima[-1] == minima[2]: # Don't let height be 0 maxima[-1] += 1 result = tuple(minima[::2]) + tuple(maxima[1::2]) return result def _compute_one_parameter(self, param_value, index): source_position = np.array([get_scarray_value(self.args.source_position_x, index), get_scarray_value(self.args.source_position_y, index), get_scarray_value(self.args.source_position_z, index)]) axis = Vector(x_angle=get_scarray_value(self.args.axis_angle_x, index), y_angle=get_scarray_value(self.args.axis_angle_y, index), z_angle=get_scarray_value(self.args.axis_angle_z, index), position=[get_scarray_value(self.args.center_position_x, index), 0, get_scarray_value(self.args.center_position_z, index)]) detector = Vector(x_angle=get_scarray_value(self.args.detector_angle_x, index), y_angle=get_scarray_value(self.args.detector_angle_y, index), z_angle=get_scarray_value(self.args.detector_angle_z, index), position=[get_scarray_value(self.args.detector_position_x, index), get_scarray_value(self.args.detector_position_y, index), get_scarray_value(self.args.detector_position_z, index)]) volume_angle = Vector(x_angle=get_scarray_value(self.args.volume_angle_x, index), y_angle=get_scarray_value(self.args.volume_angle_y, index), z_angle=get_scarray_value(self.args.volume_angle_z, index)) z = self.args.z if self.args.z_parameter == 'z': z = param_value elif self.args.z_parameter == 'axis-angle-x': axis.x_angle = param_value elif self.args.z_parameter == 'axis-angle-y': axis.y_angle = param_value elif self.args.z_parameter == 'axis-angle-z': axis.z_angle = param_value elif self.args.z_parameter == 'volume-angle-x': volume_angle.x_angle = param_value elif self.args.z_parameter == 'volume-angle-y': volume_angle.y_angle = param_value elif self.args.z_parameter == 'volume-angle-z': volume_angle.z_angle = param_value elif self.args.z_parameter == 'detector-angle-x': detector.x_angle = param_value elif self.args.z_parameter == 'detector-angle-y': detector.y_angle = param_value elif self.args.z_parameter == 'detector-angle-z': detector.z_angle = param_value elif self.args.z_parameter == 'detector-position-x': detector.position[0] = param_value elif self.args.z_parameter == 'detector-position-y': detector.position[1] = param_value elif self.args.z_parameter == 'detector-position-z': detector.position[2] = param_value elif self.args.z_parameter == 'source-position-x': source_position[0] = param_value elif self.args.z_parameter == 'source-position-y': source_position[1] = param_value elif self.args.z_parameter == 'source-position-z': source_position[2] = param_value elif self.args.z_parameter == 'center-position-x': axis.position[0] = param_value elif self.args.z_parameter == 'center-position-z': axis.position[2] = param_value else: raise RuntimeError("Unknown z parameter '{}'".format(self.args.z_parameter)) points = get_extrema(self.args.x_region, self.args.y_region, z) if self.args.z_parameter != 'z': points_upper = get_extrema(self.args.x_region, self.args.y_region, z + 1) points = np.hstack((points, points_upper)) tomo_angle = float(index) / self.args.number * self.args.overall_angle xe, ye = compute_detector_pixels(points, source_position, axis, volume_angle, detector, tomo_angle) return compute_detector_region(xe, ye, (self.args.height, self.args.width), overhead=self.args.projection_margin) def project(points, source, detector_normal, detector_offset): """Project *points* onto a detector.""" x, y, z = points source_extended = np.tile(source[:, np.newaxis], [1, points.shape[1]]) detector_normal_extended = np.tile(detector_normal[:, np.newaxis], [1, points.shape[1]]) denom = np.sum((points - source_extended) * detector_normal_extended, axis=0) if np.isinf(source[1]): # Parallel beam if np.any(detector_normal != np.array([0., -1, 0])): # Detector is not perpendicular, compute translation along the beam direction, # otherwise don't compute anything because voxels are mapped directly # to detector coordinates points[1, :] = - (detector_offset + detector_normal[0] * points[0, :] + detector_normal[2] * points[2, :]) / detector_normal[1] projected = points else: # Cone beam u = -(detector_offset + np.dot(source, detector_normal)) / denom u = np.tile(u, [3, 1]) projected = source_extended + (points - source_extended) * u return projected def compute_detector_pixels(points, source_position, axis, volume_rotation, detector, tomo_angle): """*points* are a list of points along x-direcion, thus the array has height 3. *source_position* is a 3-vector, *axis*, *volume_rotation* and *detector* are util.Vector instances. """ # Rotate the axis detector_normal = np.array((0, -1, 0), dtype=float) detector_normal = rotate_z(detector.z_angle, detector_normal) detector_normal = rotate_y(detector.y_angle, detector_normal) detector_normal = rotate_x(detector.x_angle, detector_normal) # Compute d from ax + by + cz + d = 0 detector_offset = -np.dot(detector.position, detector_normal) if np.isinf(source_position[1]): # Parallel beam voxels = points else: # Apply magnification voxels = -points * source_position[1] / (detector.position[1] - source_position[1]) # Rotate the volume voxels = rotate_z(volume_rotation.z_angle, voxels) voxels = rotate_y(volume_rotation.y_angle, voxels) voxels = rotate_x(volume_rotation.x_angle, voxels) # Rotate around the axis voxels = rotate_z(tomo_angle, voxels) # Rotate the volume voxels = rotate_z(axis.z_angle, voxels) voxels = rotate_y(axis.y_angle, voxels) voxels = rotate_x(axis.x_angle, voxels) # Get the projected pixel projected = project(voxels, source_position, detector_normal, detector_offset) if np.any(detector_normal != np.array([0., -1, 0])): # Detector is not perpendicular projected -= np.array([detector.position]).T # Reverse rotation => reverse order of transformation matrices and negative angles projected = rotate_x(-detector.x_angle, projected) projected = rotate_y(-detector.y_angle, projected) projected = rotate_z(-detector.z_angle, projected) x = projected[0, :] + axis.position[0] - 0.5 y = projected[2, :] + axis.position[2] - 0.5 return x, y def compute_detector_region(x, y, shape, overhead=2): """*overhead* specifies how much margin is taken into account around the computed area.""" def _compute_outlier(extremum_func, values): if extremum_func == min: round_func = np.floor sgn = -1 else: round_func = np.ceil sgn = +1 return int(round_func(extremum_func(values)) + sgn * overhead) x_min = min(shape[1], max(0, _compute_outlier(min, x))) y_min = min(shape[0], max(0, _compute_outlier(min, y))) x_max = max(0, min(shape[1], _compute_outlier(max, x))) y_max = max(0, min(shape[0], _compute_outlier(max, y))) return (x_min, x_max, y_min, y_max) def get_extrema(x_region, y_region, z): def get_extrema(region): return (region[0], region[1]) product = itertools.product(get_extrema(x_region), get_extrema(y_region), [z]) return np.array(list(product), dtype=float).T.copy() def rotate_x(angle, point): cos = np.cos(angle) sin = np.sin(angle) matrix = np.identity(3) matrix[1, 1] = cos matrix[1, 2] = -sin matrix[2, 1] = sin matrix[2, 2] = cos return np.dot(matrix, point) def rotate_y(angle, point): cos = np.cos(angle) sin = np.sin(angle) matrix = np.identity(3) matrix[0, 0] = cos matrix[0, 2] = sin matrix[2, 0] = -sin matrix[2, 2] = cos return np.dot(matrix, point) def rotate_z(angle, point): cos = np.cos(angle) sin = np.sin(angle) matrix = np.identity(3) matrix[0, 0] = cos matrix[0, 1] = -sin matrix[1, 0] = sin matrix[1, 1] = cos return np.dot(matrix, point) ufo-kit-tofu-ed0e5bd/tofu/gui.py000066400000000000000000000553611521054151500167410ustar00rootroot00000000000000import sys import os import logging import numpy as np import tifffile import pkg_resources from argparse import ArgumentParser from contextlib import contextmanager from tofu import reco, config, util, __version__ try: import tofu.vis.qt from PyQt5 import QtGui, QtCore, uic, QtWidgets except ImportError: raise ImportError("Cannot import modules for GUI, please install tofu with [gui] extras.") LOG = logging.getLogger(__name__) def set_last_dir(path, line_edit, last_dir): if os.path.exists(str(path)): line_edit.clear() line_edit.setText(path) last_dir = str(line_edit.text()) return last_dir def get_filtered_filenames(path, exts=['.tif', '.edf']): result = [] try: for ext in exts: result += [os.path.join(path, f) for f in os.listdir(path) if f.endswith(ext)] except OSError: return [] return sorted(result) @contextmanager def spinning_cursor(): QtWidgets.QApplication.setOverrideCursor(QtWidgets.QCursor(QtCore.Qt.WaitCursor)) yield QtWidgets.QApplication.restoreOverrideCursor() class CallableHandler(logging.Handler): def __init__(self, func): logging.Handler.__init__(self) self.func = func def emit(self, record): self.func(self.format(record)) class ApplicationWindow(QtWidgets.QMainWindow): def __init__(self, app, params): QtWidgets.QMainWindow.__init__(self) self.params = params self.app = app ui_file = pkg_resources.resource_filename(__name__, 'gui.ui') self.ui = uic.loadUi(ui_file, self) self.ui.show() self.ui.setAttribute(QtCore.Qt.WA_DeleteOnClose) self.ui.tab_widget.setCurrentIndex(0) self.ui.slice_dock.setVisible(False) self.ui.volume_dock.setVisible(False) self.ui.axis_view_widget.setVisible(False) self.slice_viewer = None self.volume_viewer = None self.overlap_viewer = tofu.vis.qt.OverlapViewer() self.get_values_from_params() try: import pyqtgraph.opengl as gl except ImportError: LOG.info("OpenGL not available, volume viewer disabled") self.ui.show_volume_button.setEnabled(False) log_handler = CallableHandler(self.on_log_record) log_handler.setLevel(logging.DEBUG) log_handler.setFormatter(logging.Formatter('%(name)s: %(message)s')) root_logger = logging.getLogger('') root_logger.setLevel(logging.DEBUG) root_logger.handlers = [log_handler] self.ui.input_path_button.setToolTip('Path to projections or sinograms') self.ui.proj_button.setToolTip('Denote if path contains projections') self.ui.y_step.setToolTip(self.get_help('reading', 'y-step')) self.ui.method_box.setToolTip(self.get_help('tomographic-reconstruction', 'method')) self.ui.axis_spin.setToolTip(self.get_help('tomographic-reconstruction', 'axis')) self.ui.angle_step.setToolTip(self.get_help('reconstruction', 'angle')) self.ui.angle_offset.setToolTip(self.get_help('tomographic-reconstruction', 'offset')) self.ui.oversampling.setToolTip(self.get_help('dfi', 'oversampling')) self.ui.iterations_sart.setToolTip(self.get_help('ir', 'num-iterations')) self.ui.relaxation.setToolTip(self.get_help('sart', 'relaxation-factor')) self.ui.output_path_button.setToolTip(self.get_help('general', 'output')) self.ui.ffc_box.setToolTip(self.get_help('gui', 'ffc-correction')) self.ui.interpolate_button.setToolTip('Interpolate between two sets of flat fields') self.ui.darks_path_button.setToolTip(self.get_help('flat-correction', 'darks')) self.ui.flats_path_button.setToolTip(self.get_help('flat-correction', 'flats')) self.ui.flats2_path_button.setToolTip(self.get_help('flat-correction', 'flats2')) self.ui.path_button_0.setToolTip(self.get_help('gui', 'deg0')) self.ui.path_button_180.setToolTip(self.get_help('gui', 'deg180')) self.ui.input_path_button.clicked.connect(self.on_input_path_clicked) self.ui.sino_button.clicked.connect(self.on_sino_button_clicked) self.ui.proj_button.clicked.connect(self.on_proj_button_clicked) self.ui.region_box.clicked.connect(self.on_region_box_clicked) self.ui.method_box.currentIndexChanged.connect(self.change_method) self.ui.axis_spin.valueChanged.connect(self.change_axis_spin) self.ui.angle_step.valueChanged.connect(self.change_angle_step) self.ui.output_path_button.clicked.connect(self.on_output_path_clicked) self.ui.ffc_box.clicked.connect(self.on_ffc_box_clicked) self.ui.interpolate_button.clicked.connect(self.on_interpolate_button_clicked) self.ui.darks_path_button.clicked.connect(self.on_darks_path_clicked) self.ui.flats_path_button.clicked.connect(self.on_flats_path_clicked) self.ui.flats2_path_button.clicked.connect(self.on_flats2_path_clicked) self.ui.ffc_options.currentIndexChanged.connect(self.change_ffc_options) self.ui.reco_button.clicked.connect(self.on_reconstruct) self.ui.path_button_0.clicked.connect(self.on_path_0_clicked) self.ui.path_button_180.clicked.connect(self.on_path_180_clicked) self.ui.show_slices_button.clicked.connect(self.on_show_slices_clicked) self.ui.show_volume_button.clicked.connect(self.on_show_volume_clicked) self.ui.run_button.clicked.connect(self.on_compute_center) self.ui.save_action.triggered.connect(self.on_save_as) self.ui.clear_action.triggered.connect(self.on_clear) self.ui.clear_output_dir_action.triggered.connect(self.on_clear_output_dir_clicked) self.ui.open_action.triggered.connect(self.on_open_from) self.ui.close_action.triggered.connect(self.close) self.ui.about_action.triggered.connect(self.on_about) self.ui.extrema_checkbox.clicked.connect(self.on_remove_extrema_clicked) self.ui.overlap_opt.currentIndexChanged.connect(self.on_overlap_opt_changed) self.ui.input_path_line.textChanged.connect(self.on_input_path_changed) self.ui.y_step.valueChanged.connect(lambda value: self.change_value('y_step', value)) self.ui.angle_offset.valueChanged.connect(lambda value: self.change_value('offset', value)) self.ui.oversampling.valueChanged.connect(lambda value: self.change_value('oversampling', value)) self.ui.iterations_sart.valueChanged.connect(lambda value: self.change_value('num_iterations', value)) self.ui.relaxation.valueChanged.connect(lambda value: self.change_value('relaxation_factor', value)) self.ui.output_path_line.textChanged.connect(lambda value: self.change_value('output', str(self.ui.output_path_line.text()))) self.ui.darks_path_line.textChanged.connect(lambda value: self.change_value('darks', str(self.ui.darks_path_line.text()))) self.ui.flats_path_line.textChanged.connect(lambda value: self.change_value('flats', str(self.ui.flats_path_line.text()))) self.ui.flats2_path_line.textChanged.connect(lambda value: self.change_value('flats2', str(self.ui.flats2_path_line.text()))) self.ui.fix_naninf_box.clicked.connect(lambda value: self.change_value('fix_nan_and_inf', self.ui.fix_naninf_box.isChecked())) self.ui.absorptivity_box.clicked.connect(lambda value: self.change_value('absorptivity', self.ui.absorptivity_box.isChecked())) self.ui.path_line_0.textChanged.connect(lambda value: self.change_value('deg0', str(self.ui.path_line_0.text()))) self.ui.path_line_180.textChanged.connect(lambda value: self.change_value('deg180', str(self.ui.path_line_180.text()))) self.ui.overlap_layout.addWidget(self.overlap_viewer) self.overlap_viewer.slider.valueChanged.connect(self.on_axis_slider_changed) def on_log_record(self, record): self.ui.text_browser.append(record) def get_values_from_params(self): self.ui.input_path_line.setText(self.params.sinograms or self.params.projections or '.') self.ui.output_path_line.setText(self.params.output or '') self.ui.darks_path_line.setText(self.params.darks or '') self.ui.flats_path_line.setText(self.params.flats or '') self.ui.flats2_path_line.setText(self.params.flats2 or '') self.ui.path_line_0.setText(self.params.deg0) self.ui.path_line_180.setText(self.params.deg180) self.ui.y_step.setValue(self.params.y_step if self.params.y_step else 1) self.ui.axis_spin.setValue(self.params.axis if self.params.axis else 0.0) self.ui.angle_step.setValue(self.params.angle if self.params.angle else 0.0) self.ui.angle_offset.setValue(self.params.offset if self.params.offset else 0.0) self.ui.oversampling.setValue(self.params.oversampling if self.params.oversampling else 0) self.ui.iterations_sart.setValue(self.params.num_iterations if self.params.num_iterations else 0) self.ui.relaxation.setValue(self.params.relaxation_factor if self.params.relaxation_factor else 0.0) if self.params.projections is not None: self.ui.proj_button.setChecked(True) self.ui.sino_button.setChecked(False) self.on_proj_button_clicked() else: self.ui.proj_button.setChecked(False) self.ui.sino_button.setChecked(True) self.on_sino_button_clicked() if self.params.method == "fbp": self.ui.method_box.setCurrentIndex(0) elif self.params.method == "dfi": self.ui.method_box.setCurrentIndex(1) elif self.params.method == "sart": self.ui.method_box.setCurrentIndex(2) self.change_method() if self.params.y_step > 1 and self.sino_button.isChecked(): self.ui.region_box.setChecked(True) else: self.ui.region_box.setChecked(False) self.ui.on_region_box_clicked() ffc_enabled = bool(self.params.flats) and bool(self.params.darks) and self.proj_button.isChecked() self.ui.ffc_box.setChecked(ffc_enabled) self.ui.preprocessing_container.setVisible(ffc_enabled) self.ui.interpolate_button.setChecked(bool(self.params.flats2) and ffc_enabled) self.ui.fix_naninf_box.setChecked(self.params.fix_nan_and_inf) self.ui.absorptivity_box.setChecked(self.params.absorptivity) if self.params.reduction_mode.lower() == "average": self.ui.ffc_options.setCurrentIndex(0) else: self.ui.ffc_options.setCurrentIndex(1) def change_method(self): self.params.method = str(self.ui.method_box.currentText()).lower() is_dfi = self.params.method == 'dfi' is_sart = self.params.method == 'sart' for w in (self.ui.oversampling_label, self.ui.oversampling): w.setVisible(is_dfi) for w in (self.ui.relaxation, self.ui.relaxation_label, self.ui.iterations_sart, self.ui.iterations_sart_label): w.setVisible(is_sart) def get_help(self, section, name): help = config.SECTIONS[section][name]['help'] return help def change_value(self, name, value): setattr(self.params, name, value) def on_sino_button_clicked(self): self.on_input_path_changed() self.ui.ffc_box.setEnabled(False) self.ui.preprocessing_container.setVisible(False) def on_proj_button_clicked(self): self.on_input_path_changed() self.ui.ffc_box.setEnabled(True) self.ui.preprocessing_container.setVisible(self.ffc_box.isChecked()) self.ui.region_box.setEnabled(False) self.ui.region_box.setChecked(False) self.on_region_box_clicked() def on_region_box_clicked(self): self.ui.y_step.setEnabled(self.ui.region_box.isChecked()) if self.ui.region_box.isChecked(): self.params.y_step = self.ui.y_step.value() else: self.params.y_step = 1 def on_input_path_changed(self): if self.ui.sino_button.isChecked(): self.params.sinograms = str(self.ui.input_path_line.text()) self.params.projections = None else: self.params.sinograms = None self.params.projections = str(self.ui.input_path_line.text()) def on_input_path_clicked(self, checked): directory = self.params.projections or self.params.sinograms path = self.get_path(directory, self.params.last_dir) self.params.last_dir = set_last_dir(path, self.ui.input_path_line, self.params.last_dir) def change_axis_spin(self): if self.ui.axis_spin.value() == 0: self.params.axis = None else: self.params.axis = self.ui.axis_spin.value() def change_angle_step(self): if self.ui.angle_step.value() == 0: self.params.angle = None else: self.params.angle = self.ui.angle_step.value() def on_output_path_clicked(self, checked): path = self.get_path(self.params.output, self.params.last_dir) self.params.last_dir = set_last_dir(path, self.ui.output_path_line, self.params.last_dir) def on_clear_output_dir_clicked(self): with spinning_cursor(): output_absfiles = get_filtered_filenames(str(self.ui.output_path_line.text())) for f in output_absfiles: os.remove(f) def on_ffc_box_clicked(self): checked = self.ui.ffc_box.isChecked() self.ui.preprocessing_container.setVisible(checked) self.params.ffc_correction = checked def on_interpolate_button_clicked(self): checked = self.ui.interpolate_button.isChecked() self.ui.flats2_path_line.setEnabled(checked) self.ui.flats2_path_button.setEnabled(checked) def change_ffc_options(self): self.params.reduction_mode = str(self.ui.ffc_options.currentText()).lower() def on_darks_path_clicked(self, checked): path = self.get_path(self.params.darks, self.params.last_dir) self.params.last_dir = set_last_dir(path, self.ui.darks_path_line, self.params.last_dir) def on_flats_path_clicked(self, checked): path = self.get_path(self.params.flats, self.params.last_dir) self.params.last_dir = set_last_dir(path, self.ui.flats_path_line, self.params.last_dir) def on_flats2_path_clicked(self, checked): path = self.get_path(self.params.flats2, self.params.last_dir) self.params.last_dir = set_last_dir(path, self.ui.flats2_path_line, self.params.last_dir) def get_path(self, directory, last_dir): return QtWidgets.QFileDialog.getExistingDirectory(self, '.', last_dir or directory) def get_filename(self, directory, last_dir): # Thanks to Lisa D. for pointing out that a tuple is returned in PyQT5 filename, _ = QtWidgets.QFileDialog.getOpenFileName(self, '.', last_dir or directory) return filename def on_path_0_clicked(self, checked): path = self.get_filename(self.params.deg0, self.params.last_dir) self.params.last_dir = set_last_dir(path, self.ui.path_line_0, self.params.last_dir) def on_path_180_clicked(self, checked): path = self.get_filename(self.params.deg180, self.params.last_dir) self.params.last_dir = set_last_dir(path, self.ui.path_line_180, self.params.last_dir) def on_open_from(self): config_file, _ = QtWidgets.QFileDialog.getOpenFileName(self, 'Open ...', self.params.last_dir) parser = ArgumentParser() params = config.Params(sections=config.TOMO_PARAMS + ('gui',)) parser = params.add_arguments(parser) self.params = parser.parse_known_args(config.config_to_list(config_name=config_file))[0] self.get_values_from_params() def on_about(self): message = "GUI is part of ufo-reconstruct {}.".format(__version__) QtWidgets.QMessageBox.about(self, "About ufo-reconstruct", message) def on_save_as(self): if os.path.exists(self.params.last_dir): config_file = str(self.params.last_dir + "/reco.conf") else: config_file = str(os.getenv('HOME') + "reco.conf") save_config = QtWidgets.QFileDialog.getSaveFileName(self, 'Save as ...', config_file) if save_config: sections = config.TOMO_PARAMS + ('gui',) config.write(save_config, args=self.params, sections=sections) def on_clear(self): self.ui.axis_view_widget.setVisible(False) self.ui.input_path_line.setText('.') self.ui.output_path_line.setText('.') self.ui.darks_path_line.setText('.') self.ui.flats_path_line.setText('.') self.ui.flats2_path_line.setText('.') self.ui.path_line_0.setText('.') self.ui.path_line_180.setText('.') self.ui.fix_naninf_box.setChecked(True) self.ui.absorptivity_box.setChecked(True) self.ui.sino_button.setChecked(True) self.ui.proj_button.setChecked(False) self.ui.region_box.setChecked(False) self.ui.ffc_box.setChecked(False) self.ui.interpolate_button.setChecked(False) self.ui.y_step.setValue(1) self.ui.axis_spin.setValue(0) self.ui.angle_step.setValue(0) self.ui.angle_offset.setValue(0) self.ui.oversampling.setValue(0) self.ui.ffc_options.setCurrentIndex(0) self.ui.text_browser.clear() self.ui.method_box.setCurrentIndex(0) self.params.enable_cropping = False self.params.reduction_mode = "average" self.params.fix_nan_and_inf = True self.params.absorptivity = True self.params.show_2d = False self.params.show_3d = False self.params.angle = None self.params.axis = None self.on_region_box_clicked() self.on_ffc_box_clicked() self.on_interpolate_button_clicked() def on_reconstruct(self): with spinning_cursor(): self.ui.centralWidget.setEnabled(False) self.repaint() self.app.processEvents() input_images = get_filtered_filenames(str(self.ui.input_path_line.text())) if not input_images: self.gui_warn("No data found in {}".format(str(self.ui.input_path_line.text()))) self.ui.centralWidget.setEnabled(True) return shape = util.get_image_shape(input_images[0]) self.params.width = shape[-1] self.params.height = shape[-2] self.params.ffc_correction = self.params.ffc_correction and self.ui.proj_button.isChecked() if not (self.params.output.endswith('.tif') or self.params.output.endswith('.tiff')): self.params.output = os.path.join(self.params.output, 'slice-%05i.tif') if self.params.y_step > 1: self.params.angle *= self.params.y_step if self.params.ffc_correction: flats_files = get_filtered_filenames(str(self.ui.flats_path_line.text())) self.params.num_flats = len(flats_files) else: self.params.num_flats = 0 self.params.darks = None self.params.flats = None self.params.flats2 = self.ui.flats2_path_line.text() if self.ui.interpolate_button.isChecked() else '' self.params.oversampling = self.ui.oversampling.value() if self.params.method == 'dfi' else None if self.params.method == 'sart': self.params.max_iterations = self.ui.iterations_sart.value() self.params.relaxation_factor = self.ui.relaxation.value() if self.params.angle is None: self.gui_warn("Missing argument for Angle step (rad)") else: try: reco.tomo(self.params) except Exception as e: self.gui_warn(str(e)) self.ui.centralWidget.setEnabled(True) self.params.angle = self.ui.angle_step.value() def on_show_slices_clicked(self): path = str(self.ui.output_path_line.text()) filenames = get_filtered_filenames(path) if not self.slice_viewer: self.slice_viewer = tofu.vis.qt.ImageViewer(filenames) self.slice_dock.setWidget(self.slice_viewer) self.ui.slice_dock.setVisible(True) else: self.slice_viewer.load_files(filenames) def on_show_volume_clicked(self): if not self.volume_viewer: step = int(self.ui.reduction_box.currentText()) self.volume_viewer = tofu.vis.qt.VolumeViewer(parent=self, step=step) self.volume_dock.setWidget(self.volume_viewer) self.ui.volume_dock.setVisible(True) path = str(self.ui.output_path_line.text()) filenames = get_filtered_filenames(path) self.volume_viewer.load_files(filenames) def on_compute_center(self): first_name = str(self.ui.path_line_0.text()) second_name = str(self.ui.path_line_180.text()) with tifffile.TiffFile(first_name) as tif: first = tif.pages[0].asarray().astype(float) with tifffile.TiffFile(second_name) as tif: second = tif.pages[-1].asarray().astype(float) if self.params.ffc_correction: # FIXME: we should of course use the pipelines we have ... flat_files = get_filtered_filenames(str(self.ui.flats_path_line.text())) dark_files = get_filtered_filenames(str(self.ui.darks_path_line.text())) flats = np.array([tifffile.TiffFile(x).asarray().astype(float) for x in flat_files]) darks = np.array([tifffile.TiffFile(x).asarray().astype(float) for x in dark_files]) dark = np.mean(darks, axis=0) flat = np.mean(flats, axis=0) - dark first = (first - dark) / flat second = (second - dark) / flat self.axis = reco.compute_rotation_axis(first, second) self.height, self.width = first.shape w2 = self.width / 2.0 position = w2 + (w2 - self.axis) * 2.0 self.overlap_viewer.set_images(first, second) self.overlap_viewer.set_position(position) self.ui.img_size.setText('width = {} | height = {}'.format(self.width, self.height)) def on_remove_extrema_clicked(self, val): self.ui.overlap_viewer.remove_extrema = val def on_overlap_opt_changed(self, index): self.ui.overlap_viewer.subtract = index == 0 self.ui.overlap_viewer.update_image() def on_axis_slider_changed(self): val = self.overlap_viewer.slider.value() w2 = self.width / 2.0 self.axis = w2 + (w2 - val) / 2 self.ui.axis_num.setText('{} px'.format(self.axis)) self.ui.axis_spin.setValue(self.axis) def gui_warn(self, message): QtWidgets.QMessageBox.warning(self, "Warning", message) def main(params): app = QtWidgets.QApplication(sys.argv) ApplicationWindow(app, params) sys.exit(app.exec_()) ufo-kit-tofu-ed0e5bd/tofu/gui.ui000066400000000000000000001377761521054151500167410ustar00rootroot00000000000000 mainWindow 0 0 1018 1081 0 0 Tomoviewer true 0 0 541 761 0 0 530 0 PreferDefault true Qt::TabFocus Qt::LeftToRight 1 true 0 0 0 0 Reconstruction Input 0 0 Projections true 0 0 Sinograms true true false 0 0 1 500 0 0 false false Region (y-step): Qt::Horizontal 40 20 0 0 Do flat-field correction 0 0 Path: 0 0 0 0 Browse … 0 0 Flat-field correction 0 0 Average Median Options Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Use absorptivity Remove NaN and Inf 0 0 Interpolate Qt::Horizontal 40 20 Method: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter true Darks: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter true true Browse … true 0 Flats: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Last flats: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter true true Browse … Browse … Reconstruction 6 0 0 Angle step (rad): Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 50 false Method: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 50 false FBP DFI SART 0 0 10 Qt::Horizontal 40 20 0 0 Angle offset (rad): Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 Reconstruct 0 0 Axis (pixel): Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 8192.000000000000000 0 0 10 0 0 Max iterations: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 0 Relaxation factor: 0.000000000000000 Qt::Horizontal 40 20 true 99 0 true 0 0 Oversampling: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Output 0 0 Path: 0 0 0 0 Browse ... Reduction: 1 1 2 4 8 Qt::Horizontal 40 20 Show Volume Show Slices 0 0 Log 0 0 QFrame::Sunken 0 0 0 Center of rotation 0 0 Input Options: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Method: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 Browse ... 0 0 180° projection: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 Browse ... 0 0 In case of multi-page input, last image in the file is used Remove extrema 0 0 In case of multi-page input, first image in the file is used 0 0 0° projection: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 Subtraction overlap Addition overlap 0 0 Run Output 0 0 Center: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 Size: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 0 0 75 true 0 0 0 0 0 0 0 0 0 1018 22 0 0 0 0 File 0 0 Edit Help QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable 2 0 0 QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable 2 Open Save as... Open ... Qt::WindowShortcut Save as ... Quit Ctrl+Q Clear Remove old slices Remove old slices in output directory About ufo-kit-tofu-ed0e5bd/tofu/inpaint.py000066400000000000000000000236721521054151500176170ustar00rootroot00000000000000import gi import logging import numpy as np try: gi.require_version('Ufo', '0.0') except ValueError: gi.require_version('Ufo', '1.0') from gi.repository import Ufo from tofu.tasks import get_memory_in, get_task, get_writer from tofu.util import ( determine_shape, make_subargs, run_scheduler, set_node_props, setup_read_task, setup_padding, ) LOG = logging.getLogger(__name__) SELECT_SRC = """ kernel void select_simple (global float *image, global float *mask, global float *output) { const size_t idx = get_global_id (1) * get_global_size (0) + get_global_id (0); output[idx] = mask[idx] > 0.0f ? 0.0f : image[idx]; } kernel void select_guidance (global float *image, global float *mask, global float *guidance, global float *output) { const size_t idx = get_global_id (1) * get_global_size (0) + get_global_id (0); output[idx] = mask[idx] > 0.0f ? guidance[idx] : image[idx]; } """ ADD_CONSTANT_SRC = """ kernel void add_constant (global float *image, global float *value, global float *output) { const size_t idx = get_global_id (1) * get_global_size (0) + get_global_id (0); output[idx] = image[idx] + value[0]; } """ def _make_discrete_inverse_laplace(width, height): """Make discrete Laplace deconvolution kernel special for this use case, where we do not care about the (0, 0) frequency becuase the kernel is going to be applied on Laplace-filtered data, which has zero mean. """ f = np.fft.fftfreq(width) g = np.fft.fftfreq(height) f, g = np.meshgrid(f, g) # From discrete Laplace and time shift: F[f''(x, y)] = -4 F[f(x, y)] # + F[f(x + 1, y)] + F[f(x - 1, y)] + F[f(x, y + 1)] + F[f(x, y - 1)] = the result below when we # use the time shift property of the Fourier transform. kernel = 2 * (np.cos(2 * np.pi * f) + np.cos(2 * np.pi * g) - 2) # Make this invertible by simply setting the (0, 0) frequency to 1 instead of making sure that # after the inversion it is 0. We can afford this becuase we know the input to filtering will be # Laplace-filtered -> zero mean -> (0, 0) frequency = 0. kernel[0, 0] = 1 return (1 / kernel).astype(np.float32) def prepare_border_smoothing(padded_width, padded_height): """ The use case here is mainly the removal of the cross at (0, 0) in the power spectrum by masking out the borders of the image, i.e. the gradients are forced to go to zeros at the borders and thus removing the sharp transitions when we consider the periodicity assumed by the DFT. *padded_width* and *padded_height* are the width and height of the FFT-padding, not the original image shape. One should use `mirrored_repeat' padding mode on the input images to get the FFT-padded image, compute the mask here and use it for inpainting. """ mask = np.ones((padded_width, padded_height), dtype=np.float32) mask[1:-1, 1:-1] = 0 mem_in_task = get_memory_in(mask) return mem_in_task def _get_gradient_task(finite_difference_type, direction): return get_task( "gradient", finite_difference_type=finite_difference_type, direction=direction, addressing_mode="repeat", ) def create_inpaint_pipeline( args, graph, processing_node=None ): """ Create tasks needed for inpainting and connect them. The pipeline has three inputs and one output, which is the inpainted image. Based on :cite:`MOREL2012342`. """ determine_shape(args, path=args.projections, store=True, do_raise=True) if not args.inpaint_padded_width: args.inpaint_padded_width = args.width if not args.inpaint_padded_height: args.inpaint_padded_height = args.height do_pad = args.inpaint_padded_width != args.width and args.inpaint_padded_height != args.height use_guidance = not args.harmonize_borders and args.guidance_image LOG.debug("inpaint padding on: %s", do_pad) LOG.debug("inpaint using guidance image: %s", use_guidance) copy_projections = Ufo.CopyTask() copy_mask = Ufo.CopyTask() copy_guidance = Ufo.CopyTask() if use_guidance else None if do_pad: # Padding pad_projections = get_task("pad") pad_mask = get_task("pad") pad_guidance = get_task("pad") for pad_task in (pad_projections, pad_mask, pad_guidance): setup_padding( pad_task, args.width, args.height, args.inpaint_padding_mode, pad_width=args.inpaint_padded_width - args.width, pad_height=args.inpaint_padded_height - args.height, centered=False ) graph.connect_nodes(pad_projections, copy_projections) graph.connect_nodes(pad_mask, copy_mask) if use_guidance: graph.connect_nodes(pad_guidance, copy_guidance) else: pad_guidance = None inputs = (pad_projections, pad_mask, pad_guidance) else: inputs = (copy_projections, copy_mask, copy_guidance) # First gradient is forward and the second backward -> we get exactly the discrete Laplace after # the two passes. gx = _get_gradient_task("forward", "horizontal") gy = _get_gradient_task("forward", "vertical") ggx = _get_gradient_task("backward", "horizontal") ggy = _get_gradient_task("backward", "vertical") fft_task = get_task("fft", dimensions=2) ifft_task = get_task("ifft", dimensions=2) add_ggx_ggy = get_task("opencl", kernel="add", dimensions=2) mul_task = get_task("opencl", kernel="multiply", halve_width=False, dimensions=2) select_kernel = "select_guidance" if use_guidance else "select_simple" select_gx = get_task("opencl", source=SELECT_SRC, kernel=select_kernel, dimensions=2) select_gy = get_task("opencl", source=SELECT_SRC, kernel=select_kernel, dimensions=2) # We are computing discrete gradients -> Laplace must also be discrete lap_kernel = _make_discrete_inverse_laplace( args.inpaint_padded_width, args.inpaint_padded_height ) # Multiply interleaved complex array -> a * z = a * Re[z] + j * a * Im[z] mem_in_task = get_memory_in(lap_kernel + 1j * lap_kernel) if args.preserve_mean: mean_task = get_task("measure", axis=-1, metric="mean") add_constant = get_task( "opencl", source=ADD_CONSTANT_SRC, kernel="add_constant", dimensions=2 ) # First derivative graph.connect_nodes(copy_projections, gx) graph.connect_nodes(copy_projections, gy) # Select guidance or zeros where mask >= 0 graph.connect_nodes_full(gx, select_gx, 0) graph.connect_nodes_full(gy, select_gy, 0) graph.connect_nodes_full(copy_mask, select_gx, 1) graph.connect_nodes_full(copy_mask, select_gy, 1) if use_guidance: guidance_gx = _get_gradient_task("forward", "horizontal") guidance_gy = _get_gradient_task("forward", "vertical") graph.connect_nodes(copy_guidance, guidance_gx) graph.connect_nodes(copy_guidance, guidance_gy) graph.connect_nodes_full(guidance_gx, select_gx, 2) graph.connect_nodes_full(guidance_gy, select_gy, 2) # Second derivative graph.connect_nodes(select_gx, ggx) graph.connect_nodes(select_gy, ggy) # Sum -> Laplacian graph.connect_nodes_full(ggx, add_ggx_ggy, 0) graph.connect_nodes_full(ggy, add_ggx_ggy, 1) # Deconvolve with Laplacian graph.connect_nodes(add_ggx_ggy, fft_task) graph.connect_nodes_full(fft_task, mul_task, 0) graph.connect_nodes_full(mem_in_task, mul_task, 1) graph.connect_nodes(mul_task, ifft_task) if args.preserve_mean: # Get the mean back to the one of the input image graph.connect_nodes(copy_projections, mean_task) graph.connect_nodes_full(ifft_task, add_constant, 0) graph.connect_nodes_full(mean_task, add_constant, 1) last = add_constant else: last = ifft_task outputs = (last,) return (inputs, outputs) def run(args): """Usage with tofu: create readers, the pipeline and run it.""" if args.harmonize_borders: if args.mask_image: LOG.warning( "--mask-image has no effect when --harmonize-borders is specified" ) if args.guidance_image: LOG.warning( "--guidance-image has no effect when --harmonize-borders is specified" ) if args.inpaint_padding_mode != "mirrored_repeat": LOG.warning( "Padding mode should be `mirrored_repeat' for smooth transitions between " "true image borders and padded borders" ) elif not args.mask_image: raise ValueError("One of --mask-image or --harmonize-borders must be specified") # Reading reader = get_task("read") roi_args = make_subargs(args, ['y', 'height', 'y_step']) set_node_props(reader, args) setup_read_task(reader, args.projections, args) out_task = get_writer(args) graph = Ufo.TaskGraph() ((input_projections, input_mask, input_guidance), (last,)) = create_inpaint_pipeline( args, graph, ) if args.harmonize_borders: mask_reader = prepare_border_smoothing( args.inpaint_padded_width, args.inpaint_padded_height ) else: mask_reader = get_task("read") set_node_props(mask_reader, roi_args) setup_read_task(mask_reader, args.mask_image, args) graph.connect_nodes(reader, input_projections) graph.connect_nodes(mask_reader, input_mask) if not args.harmonize_borders and args.guidance_image: guidance_reader = get_task("read") set_node_props(guidance_reader, roi_args) setup_read_task(guidance_reader, args.guidance_image, args) graph.connect_nodes(guidance_reader, input_guidance) graph.connect_nodes(last, out_task) # CopyTask works only with FixedScheduler sched = Ufo.FixedScheduler() run_scheduler(sched, graph) ufo-kit-tofu-ed0e5bd/tofu/lamino.py000066400000000000000000000212451521054151500174260ustar00rootroot00000000000000"""Laminographic reconstruction.""" import logging import numpy as np from multiprocessing import Queue, Process from tofu.preprocess import create_preprocessing_pipeline from tofu.util import (get_filtering_padding, determine_shape, get_filenames, get_reconstruction_regions, get_reconstructed_cube_shape) from tofu.tasks import get_task, get_writer LOG = logging.getLogger(__name__) def lamino(params): """Laminographic reconstruction utilizing all GPUs.""" LOG.info('Z parameter: {}'.format(params.z_parameter)) prepare_angular_arguments(params) params.projection_filter_scale = np.sin(np.deg2rad(params.lamino_angle)) # For now we need to make a workaround for the memory leak, which means we need to execute # the passes in separate processes to clean up the low level code. For that we also need to # call the region-splitting in a separate function. # TODO: Simplify after the memory leak fix! queue = Queue() proc = Process(target=_create_runs, args=(params, queue,)) proc.start() proc.join() x_region, y_region, regions, num_gpus = queue.get() for i in range(0, len(regions), num_gpus): z_subregion = regions[i:min(i + num_gpus, len(regions))] LOG.info('Computing slices {}..{}'.format(z_subregion[0][0], z_subregion[-1][1])) proc = Process(target=_run, args=(params, x_region, y_region, z_subregion, i // num_gpus)) proc.start() proc.join() def prepare_angular_arguments(params): if not params.overall_angle: params.overall_angle = 360. LOG.info('Overall angle not specified, using 360 deg') if not params.angle: if params.dry_run: if not params.number: raise ValueError('--number must be specified by --dry-run') num_files = params.number else: num_files = len(get_filenames(params.projections)) if not num_files: raise RuntimeError("No files found in `{}'".format(params.projections)) params.angle = params.overall_angle / num_files * params.step LOG.info('Angle not specified, calculating from ' + '{} projections and step {}: {} deg'.format(num_files, params.step, params.angle)) determine_shape(params, params.projections, store=True) if not params.number: params.number = int(np.round(np.abs(params.overall_angle / params.angle))) if params.dry_run: LOG.info('Dummy data W x H x N: {} x {} x {}'.format(params.width, params.height, params.number)) def _create_runs(params, queue): """Workaround function to get the number of gpus and compute regions. gi.repository must always be called in a separate process, otherwise the resources return None gpus. """ #TODO: remove the whole function after memory leak fix! from gi.repository import Ufo scheduler = Ufo.FixedScheduler() gpus = scheduler.get_resources().get_gpu_nodes() num_gpus = len(gpus) x_region, y_region, regions = _split_regions(params, gpus) LOG.info('Using {} GPUs in {} passes'.format(min(len(regions), num_gpus), len(regions))) queue.put((x_region, y_region, regions, num_gpus)) def _run(params, x_region, y_region, regions, index): """Execute one pass on all possible GPUs with slice ranges given by *regions*.""" from gi.repository import Ufo pm = Ufo.PluginManager() graph = Ufo.TaskGraph() scheduler = Ufo.FixedScheduler() gpus = scheduler.get_resources().get_gpu_nodes() num_gpus = len(gpus) broadcast = Ufo.CopyTask() source = _setup_source(params, pm, graph) graph.connect_nodes(source, broadcast) for i, region in enumerate(regions): subindex = index * num_gpus + i _setup_graph(pm, graph, subindex, x_region, y_region, region, params, broadcast, gpu=gpus[i]) scheduler.run(graph) duration = scheduler.props.time LOG.info('Execution time: {} s'.format(duration)) return duration def _setup_source(params, pm, graph): from tofu.preprocess import create_flat_correct_pipeline from tofu.util import set_node_props, setup_read_task if params.dry_run: source = pm.get_task('dummy-data') source.props.number = params.number source.props.width = params.width source.props.height = params.height elif params.darks and params.flats: source = create_flat_correct_pipeline(params, graph) else: source = pm.get_task('read') set_node_props(source, params) setup_read_task(source, params.projections, params) return source def _setup_graph(pm, graph, index, x_region, y_region, region, params, source, gpu=None): backproject = get_task('lamino-backproject', processing_node=gpu) slicer = get_task('slice', processing_node=gpu) writer = get_writer(params) if not params.dry_run: writer.props.filename = '{}-{:>03}-%04i.tif'.format(params.output, index) # parameters backproject.props.num_projections = params.number backproject.props.overall_angle = np.deg2rad(params.overall_angle) backproject.props.lamino_angle = np.deg2rad(params.lamino_angle) backproject.props.roll_angle = np.deg2rad(params.roll_angle) backproject.props.x_region = x_region backproject.props.y_region = y_region backproject.props.z = params.z backproject.props.addressing_mode = params.lamino_padding_mode backproject.props.parameter = params.z_parameter if params.projection_crop_after == 'backprojection': padding = get_filtering_padding(params.width) else: padding = 0 if params.z_parameter in ['lamino-angle', 'roll-angle']: region = [np.deg2rad(reg) for reg in region] if params.z_parameter == 'x-center': # Take projection padding into account region = [region[0] + padding / 2, region[1] + padding / 2, region[2]] backproject.props.region = region backproject.props.center = (params.axis[0] + padding / 2, params.axis[1]) LOG.debug('x center after padding: %g', backproject.props.center[0]) graph.connect_nodes(backproject, slicer) graph.connect_nodes(slicer, writer) if params.only_bp: first = backproject graph.connect_nodes(source, backproject) else: first = create_preprocessing_pipeline(params, graph, source=source, processing_node=gpu) graph.connect_nodes(first, backproject) return first def _split_regions(params, gpus): """Split processing between *gpus* by specifying the number of slices processed per GPU.""" x_region, y_region, z_region = get_reconstruction_regions(params) z_start, z_stop, z_step = z_region y_start, y_stop, y_step = y_region x_start, x_stop, x_step = x_region slice_width, slice_height, num_slices = get_reconstructed_cube_shape(x_region, y_region, z_region) if params.slices_per_device: num_slices_per_gpu = params.slices_per_device else: num_slices_per_gpu = _compute_num_slices(gpus, slice_width, slice_height) if num_slices_per_gpu > num_slices: num_slices_per_gpu = num_slices LOG.info('Using {} slices per GPU'.format(num_slices_per_gpu)) z_starts = np.arange(z_start, z_stop, z_step * num_slices_per_gpu) regions = [] for start in z_starts: regions.append((start, min(z_stop, start + z_step * num_slices_per_gpu), z_step)) return x_region, y_region, regions def _compute_num_slices(gpus, width, height): """Determine number of slices which can be calculated per-device based on *gpus*, slice *width* and *height*. """ from gi.repository import Ufo # Make sure the double buffering works with room for intermediate steps # TODO: compute this precisely safety_coeff = 3. # Use the weakest one, if heterogenous systems emerge, measure the performance and # reconsider memories = [gpu.get_info(Ufo.GpuNodeInfo.GLOBAL_MEM_SIZE) for gpu in gpus] i = np.argmin(memories) max_allocatable = gpus[i].get_info(Ufo.GpuNodeInfo.MAX_MEM_ALLOC_SIZE) if max_allocatable * safety_coeff <= memories[i]: # Don't waste resources max_memory = max_allocatable else: max_memory = memories[i] / safety_coeff if max_memory > 2 ** 32: # Current NVIDIA implementation allows only 4 GB max_memory = 2 ** 32 max_memory /= safety_coeff num_slices = int(np.floor(max_memory / (width * height * 4))) LOG.info('GPU memory used per GPU: {:.2f} GB'.format(max_memory / 2. ** 30)) return num_slices ufo-kit-tofu-ed0e5bd/tofu/preprocess.py000066400000000000000000000435271521054151500203430ustar00rootroot00000000000000"""Flat field correction.""" import sys import logging from gi.repository import Ufo from tofu.util import (fbp_filtering_in_phase_retrieval, get_filenames, set_node_props, make_subargs, determine_shape, setup_read_task, setup_padding, next_power_of_two, run_scheduler) from tofu.tasks import get_task, get_writer LOG = logging.getLogger(__name__) def create_flat_correct_pipeline(args, graph, processing_node=None): """ Create flat field correction pipeline. All the settings are provided in *args*. *graph* is used for making the connections. Returns the flat field correction task which can be used for further pipelining. """ pm = Ufo.PluginManager() if args.projections is None or not args.flats or not args.darks: raise RuntimeError("You must specify --projections, --flats and --darks.") reader = get_task('read') dark_reader = get_task('read') flat_before_reader = get_task('read') ffc = get_task('flat-field-correct', processing_node=processing_node, dark_scale=args.dark_scale, flat_scale=args.flat_scale, absorption_correct=args.absorptivity, fix_nan_and_inf=args.fix_nan_and_inf) mode = args.reduction_mode.lower() roi_args = make_subargs(args, ['y', 'height', 'y_step']) set_node_props(reader, args) set_node_props(dark_reader, roi_args) set_node_props(flat_before_reader, roi_args) for r, path in ((reader, args.projections), (dark_reader, args.darks), (flat_before_reader, args.flats)): setup_read_task(r, path, args) LOG.debug("Doing flat field correction using reduction mode `{}'".format(mode)) if args.flats2: flat_after_reader = get_task('read') setup_read_task(flat_after_reader, args.flats2, args) set_node_props(flat_after_reader, roi_args) num_files = len(get_filenames(args.projections)) can_read = len(list(range(args.start, num_files, args.step))) number = args.number if args.number else num_files num_read = min(can_read, number) flat_interpolate = get_task('interpolate', processing_node=processing_node, number=num_read) if args.resize: LOG.debug("Resize input data by factor of {}".format(args.resize)) proj_bin = get_task('bin', processing_node=processing_node, size=args.resize) dark_bin = get_task('bin', processing_node=processing_node, size=args.resize) flat_bin = get_task('bin', processing_node=processing_node, size=args.resize) graph.connect_nodes(reader, proj_bin) graph.connect_nodes(dark_reader, dark_bin) graph.connect_nodes(flat_before_reader, flat_bin) reader, dark_reader, flat_before_reader = proj_bin, dark_bin, flat_bin if args.flats2: flat_bin = get_task('bin', processing_node=processing_node, size=args.resize) graph.connect_nodes(flat_after_reader, flat_bin) flat_after_reader = flat_bin if mode == 'median': dark_stack = get_task('stack', processing_node=processing_node, number=len(get_filenames(args.darks))) dark_reduced = get_task('flatten', processing_node=processing_node, mode='median') flat_before_stack = get_task('stack', processing_node=processing_node, number=len(get_filenames(args.flats))) flat_before_reduced = get_task('flatten', processing_node=processing_node, mode='median') graph.connect_nodes(dark_reader, dark_stack) graph.connect_nodes(dark_stack, dark_reduced) graph.connect_nodes(flat_before_reader, flat_before_stack) graph.connect_nodes(flat_before_stack, flat_before_reduced) if args.flats2: flat_after_stack = get_task('stack', processing_node=processing_node, number=len(get_filenames(args.flats2))) flat_after_reduced = get_task('flatten', processing_node=processing_node, mode='median') graph.connect_nodes(flat_after_reader, flat_after_stack) graph.connect_nodes(flat_after_stack, flat_after_reduced) elif mode == 'average': dark_reduced = get_task('average', processing_node=processing_node) flat_before_reduced = get_task('average', processing_node=processing_node) graph.connect_nodes(dark_reader, dark_reduced) graph.connect_nodes(flat_before_reader, flat_before_reduced) if args.flats2: flat_after_reduced = get_task('average', processing_node=processing_node) graph.connect_nodes(flat_after_reader, flat_after_reduced) else: raise ValueError('Invalid reduction mode') graph.connect_nodes_full(reader, ffc, 0) graph.connect_nodes_full(dark_reduced, ffc, 1) if args.flats2: graph.connect_nodes_full(flat_before_reduced, flat_interpolate, 0) graph.connect_nodes_full(flat_after_reduced, flat_interpolate, 1) graph.connect_nodes_full(flat_interpolate, ffc, 2) else: graph.connect_nodes_full(flat_before_reduced, ffc, 2) return ffc def create_phase_retrieval_pipeline(args, graph, processing_node=None): LOG.debug('Creating phase retrieval pipeline') pm = Ufo.PluginManager() # Retrieve phase phase_retrieve = get_task('retrieve-phase', processing_node=processing_node) pad_phase_retrieve = get_task('pad', processing_node=processing_node) crop_phase_retrieve = get_task('crop', processing_node=processing_node) fft_phase_retrieve = get_task('fft', processing_node=processing_node) ifft_phase_retrieve = get_task('ifft', processing_node=processing_node) calculate = get_task('calculate', processing_node=processing_node) width = args.width height = args.height default_padded_width = next_power_of_two(width + 64) default_padded_height = next_power_of_two(height + 64) if not args.retrieval_padded_width: args.retrieval_padded_width = default_padded_width if not args.retrieval_padded_height: args.retrieval_padded_height = default_padded_height fmt = 'Phase retrieval padding: {}x{} -> {}x{}' LOG.debug(fmt.format(width, height, args.retrieval_padded_width, args.retrieval_padded_height)) x = (args.retrieval_padded_width - width) // 2 y = (args.retrieval_padded_height - height) // 2 pad_phase_retrieve.props.x = x pad_phase_retrieve.props.y = y pad_phase_retrieve.props.width = args.retrieval_padded_width pad_phase_retrieve.props.height = args.retrieval_padded_height pad_phase_retrieve.props.addressing_mode = args.retrieval_padding_mode crop_phase_retrieve.props.y = y crop_phase_retrieve.props.height = height if ( args.projection_crop_after == 'filter' or not fbp_filtering_in_phase_retrieval(args) ): crop_phase_retrieve.props.x = x crop_phase_retrieve.props.width = width phase_retrieve.props.method = args.retrieval_method phase_retrieve.props.energy = args.energy if len(args.propagation_distance) == 1: phase_retrieve.props.distance = [args.propagation_distance[0]] else: phase_retrieve.props.distance_x = args.propagation_distance[0] phase_retrieve.props.distance_y = args.propagation_distance[1] phase_retrieve.props.pixel_size = args.pixel_size phase_retrieve.props.regularization_rate = args.regularization_rate phase_retrieve.props.thresholding_rate = args.thresholding_rate phase_retrieve.props.frequency_cutoff = args.frequency_cutoff fft_phase_retrieve.props.dimensions = 2 ifft_phase_retrieve.props.dimensions = 2 if args.delta is not None: import numpy as np lam = 6.62606896e-34 * 299792458 / (args.energy * 1.60217733e-16) thickness_conversion = -lam / (2 * np.pi * args.delta) else: thickness_conversion = 1 if fbp_filtering_in_phase_retrieval(args): LOG.debug('Fusing phase retrieval and FBP filtering') fltr = get_task('filter', processing_node=processing_node) fltr.props.filter = args.projection_filter fltr.props.scale = args.projection_filter_scale fltr.props.cutoff = args.projection_filter_cutoff graph.connect_nodes(phase_retrieve, fltr) graph.connect_nodes(fltr, ifft_phase_retrieve) else: graph.connect_nodes(phase_retrieve, ifft_phase_retrieve) if args.retrieval_method == 'tie' and args.tie_approximate_logarithm: # a = 2 / 10^R, b = -10^R / 2, c = thickness_conversion # t = Taylor series point, T = t * (1 - ln(t)) # a * b = -1 (from above) # ----------------------------------------------------- # We will use the Taylor expansion to the 1st order of the logarithm which TIE needs: # -ln (a * retrieved) * b * c ~ b * c / t * [T - a * retrieved] # T - a * retrieved = T - a * F^-1{F(I) * kernel} = T - F^-1{aF(I) * kernel} # for u, v = 0: aF(I) * kernel = F(I)(0, 0) because kernel(0, 0) = 1 / a, thus: # T - F^-1{aF(I) * kernel} = -F^-1{aF(I - T) * kernel}, because for u, v = 0 we have: # -aF(I - T) * kernel = - F(I - T) = T - F(I)(0, 0) (and the rest of the frequencies is # unaffected by "T". # further: -aF(I - T) * kernel = F[a(T - I)] * kernel # bring in b, c and t and we have F[abc/t(T - I)] * kernel, with ab=-1 we end up with: # F[c/t(I - T)] * kernel, so the approximation of the logarithm does not need any change in # the TIE kernel itself, we may just transform the input image and use the rest of the # pipeline as usual. if args.delta is None: # Do not multiply by one expression = "v - 1" else: expression = "{} * (v - {})".format( # c / t thickness_conversion / args.tie_approximate_point, # t * (1 - ln(t)) args.tie_approximate_point * (1 - np.log(args.tie_approximate_point)) ) calculate.props.expression = expression LOG.debug("Phase contrast conversion expression (log approximation): `%s'", expression) graph.connect_nodes(calculate, pad_phase_retrieve) first = calculate last = crop_phase_retrieve else: if args.retrieval_method == 'tie': expression = '(isinf (v) || isnan (v) || (v <= 0)) ? 0.0f : ' if args.tie_approximate_logarithm: # ln(x) ~ x - 1 at a=1 expression += '(1.0f - {} * v) * {}' else: expression += '-log ({} * v) * {}' # first term: 2 for 0.5 factor in ufo-filters and alpha = 10^-R, so divide by 10^R # second term: The following converts the TIE result to the actual phase, which when # multiplied by the thickness_conversion gives the projected thickness thickness_conversion *= -10 ** args.regularization_rate / 2 expression = expression.format(2 / 10 ** args.regularization_rate, thickness_conversion) else: expression = '(isinf (v) || isnan (v)) ? 0.0f : v * {}'.format(thickness_conversion) LOG.debug("Phase contrast conversion expression: `%s'", expression) calculate.props.expression = expression graph.connect_nodes(crop_phase_retrieve, calculate) first = pad_phase_retrieve last = calculate graph.connect_nodes(pad_phase_retrieve, fft_phase_retrieve) graph.connect_nodes(fft_phase_retrieve, phase_retrieve) graph.connect_nodes(ifft_phase_retrieve, crop_phase_retrieve) return (first, last) def run_flat_correct(args): graph = Ufo.TaskGraph() sched = Ufo.Scheduler() pm = Ufo.PluginManager() out_task = get_writer(args) flat_task = create_flat_correct_pipeline(args, graph) graph.connect_nodes(flat_task, out_task) run_scheduler(sched, graph) def create_sinogram_pipeline(args, graph): """Create sinogram generating pipeline based on arguments from *args*.""" pm = Ufo.PluginManager() sinos = pm.get_task('transpose-projections') if args.number: region = (args.start, args.start + args.number, args.step) num_projections = len(list(range(*region))) else: num_projections = len(get_filenames(args.projections)) sinos.props.number = num_projections if args.darks and args.flats: start = create_flat_correct_pipeline(args, graph) else: start = get_task('read') start.props.path = args.projections set_node_props(start, args) graph.connect_nodes(start, sinos) return sinos def run_sinogram_generation(args): """Make the sinograms with arguments provided by *args*.""" if not args.height: args.height = determine_shape(args, args.projections)[1] - args.y step = args.y_step * args.pass_size if args.pass_size else args.height starts = list(range(args.y, args.y + args.height, step)) + [args.y + args.height] def generate_partial(append=False): graph = Ufo.TaskGraph() sched = Ufo.Scheduler() args.output_append = append writer = get_writer(args) sinos = create_sinogram_pipeline(args, graph) graph.connect_nodes(sinos, writer) return run_scheduler(sched, graph) for i in range(len(starts) - 1): args.y = starts[i] args.height = starts[i + 1] - starts[i] if not generate_partial(append=i != 0): # We were interrupted break def create_projection_filtering_pipeline(args, graph, processing_node=None): pm = Ufo.PluginManager() pad = get_task('pad', processing_node=processing_node) fft = get_task('fft', processing_node=processing_node) ifft = get_task('ifft', processing_node=processing_node) fltr = get_task('filter', processing_node=processing_node) if args.projection_crop_after == 'filter': crop = get_task('crop', processing_node=processing_node) else: crop = None padding_width = setup_padding(pad, args.width, args.height, args.projection_padding_mode, crop=crop)[0] fft.props.dimensions = 1 ifft.props.dimensions = 1 fltr.props.filter = args.projection_filter fltr.props.scale = args.projection_filter_scale fltr.props.cutoff = args.projection_filter_cutoff graph.connect_nodes(pad, fft) graph.connect_nodes(fft, fltr) graph.connect_nodes(fltr, ifft) if crop: graph.connect_nodes(ifft, crop) last = crop else: last = ifft return (pad, last) def create_preprocessing_pipeline(args, graph, source=None, processing_node=None, cone_beam_weight=True, make_reader=True): """If *make_reader* is True, create a read task if *source* is None and no dark and flat fields are given. """ import numpy as np if not (args.width and args.height): width, height = determine_shape(args, args.projections) if not width: raise RuntimeError("Could not determine width from the input") if not args.width: args.width = width if not args.height: args.height = height - args.y LOG.debug('Image width x height: %d x %d', args.width, args.height) current = None if source: current = source elif args.darks and args.flats: current = create_flat_correct_pipeline(args, graph, processing_node=processing_node) else: if make_reader: current = get_task('read') set_node_props(current, args) if not args.projections: raise RuntimeError('--projections not set') setup_read_task(current, args.projections, args) if args.absorptivity: absorptivity = get_task('calculate', processing_node=processing_node) absorptivity.props.expression = 'v <= 0 ? 0.0f : -log(v)' if current: graph.connect_nodes(current, absorptivity) current = absorptivity if args.transpose_input: transpose = get_task('transpose') if current: graph.connect_nodes(current, transpose) current = transpose tmp = args.width args.width = args.height args.height = tmp if cone_beam_weight and not np.all(np.isinf(args.source_position_y)): # Cone beam projection weight LOG.debug('Enabling cone beam weighting') weight = get_task('cone-beam-projection-weight', processing_node=processing_node) weight.props.source_distance = (-np.array(args.source_position_y)).tolist() weight.props.detector_distance = args.detector_position_y weight.props.center_position_x = args.center_position_x or [args.width / 2. + (args.width % 2) * 0.5] weight.props.center_position_z = args.center_position_z or [args.height / 2. + (args.height % 2) * 0.5] weight.props.axis_angle_x = args.axis_angle_x if current: graph.connect_nodes(current, weight) current = weight if args.energy is not None and args.propagation_distance is not None: pr_first, pr_last = create_phase_retrieval_pipeline(args, graph, processing_node=processing_node) if current: graph.connect_nodes(current, pr_first) current = pr_last if args.projection_filter != 'none' and not fbp_filtering_in_phase_retrieval(args): pf_first, pf_last = create_projection_filtering_pipeline(args, graph, processing_node=processing_node) if current: graph.connect_nodes(current, pf_first) current = pf_last return current def run_preprocessing(args): graph = Ufo.TaskGraph() sched = Ufo.Scheduler() pm = Ufo.PluginManager() out_task = get_writer(args) current = create_preprocessing_pipeline(args, graph) graph.connect_nodes(current, out_task) run_scheduler(sched, graph) ufo-kit-tofu-ed0e5bd/tofu/reco.py000066400000000000000000000267451521054151500171110ustar00rootroot00000000000000import os import logging import glob import tempfile import sys import numpy as np from gi.repository import Ufo from tofu.preprocess import create_flat_correct_pipeline from tofu.util import (set_node_props, setup_read_task, get_filenames, read_image, determine_shape, setup_padding, run_scheduler) from tofu.tasks import get_task, get_writer LOG = logging.getLogger(__name__) pm = Ufo.PluginManager() def get_dummy_reader(params): if params.width is None and params.height is None: raise RuntimeError("You have to specify --width and --height when generating data.") width, height = params.width, params.height reader = get_task('dummy-data', width=width, height=height, number=params.number or 1) return reader, width, height def get_file_reader(params): reader = pm.get_task('read') set_node_props(reader, params) return reader def get_projection_reader(params): reader = get_file_reader(params) setup_read_task(reader, params.projections, params) width, height = determine_shape(params, params.projections) return reader, width, height def get_sinogram_reader(params): reader = get_file_reader(params) setup_read_task(reader, params.sinograms, params) width, height = determine_shape(params, path=params.sinograms) return reader, width, height def tomo(params): # Create reader and writer if params.projections and params.sinograms: raise RuntimeError("Cannot specify both --projections and --sinograms.") if params.projections is None and params.sinograms is None: reader, width, height = get_dummy_reader(params) else: if params.projections: reader, width, height = get_projection_reader(params) else: reader, width, height = get_sinogram_reader(params) axis = params.axis or width / 2.0 if params.projections and params.resize: width /= params.resize height /= params.resize axis /= params.resize LOG.debug("Input dimensions: {}x{} pixels".format(width, height)) writer = get_writer(params) # Setup graph depending on the chosen method and input data g = Ufo.TaskGraph() if params.projections is not None: if params.number: count = len(list(range(params.start, params.start + params.number, params.step))) else: count = len(get_filenames(params.projections)) LOG.debug("Number of projections: {}".format(count)) sino_output = get_task('transpose-projections', number=count) if params.darks and params.flats: g.connect_nodes(create_flat_correct_pipeline(params, g), sino_output) else: g.connect_nodes(reader, sino_output) if height: # Sinogram height is the one needed for further padding height = count else: sino_output = reader if params.method == 'fbp': fft = get_task('fft', dimensions=1) ifft = get_task('ifft', dimensions=1) fltr = get_task('filter', filter=params.projection_filter, cutoff=params.projection_filter_cutoff) bp = get_task('backproject', axis_pos=axis) last_node = bp if params.angle: bp.props.angle_step = params.angle if params.offset: bp.props.angle_offset = params.offset if width and height: # Pad the image with its extent to prevent reconstuction ring pad = get_task('pad') crop = get_task('crop') if params.projection_crop_after == 'filter': crop_after_filter = crop else: crop_after_filter = None padding_width = setup_padding(pad, width, height, params.projection_padding_mode, crop=crop_after_filter)[0] LOG.debug("Padding input to: {}x{} pixels".format(pad.props.width, pad.props.height)) g.connect_nodes(sino_output, pad) g.connect_nodes(pad, fft) g.connect_nodes(fft, fltr) g.connect_nodes(fltr, ifft) if crop_after_filter: g.connect_nodes(ifft, crop) g.connect_nodes(crop, bp) else: bp.props.axis_pos = axis + padding_width / 2 bp.props.roi_x = padding_width // 2 bp.props.roi_y = padding_width // 2 bp.props.roi_width = width bp.props.roi_height = width g.connect_nodes(ifft, bp) last_node = bp else: if params.crop_width: ifft.props.crop_width = int(params.crop_width) LOG.debug("Cropping to {} pixels".format(ifft.props.crop_width)) g.connect_nodes(sino_output, fft) g.connect_nodes(fft, fltr) g.connect_nodes(fltr, ifft) g.connect_nodes(ifft, bp) g.connect_nodes(last_node, writer) if params.method in ('sart', 'sirt', 'sbtv', 'asdpocs'): projector = pm.get_task_from_package('ir', 'parallel-projector') projector.set_properties(model='joseph', is_forward=False) projector.set_properties(axis_position=axis) projector.set_properties(step=params.angle if params.angle else np.pi / 180.0) method = pm.get_task_from_package('ir', params.method) method.set_properties(projector=projector, num_iterations=params.num_iterations) if params.method in ('sart', 'sirt'): method.set_properties(relaxation_factor=params.relaxation_factor) if params.method == 'asdpocs': minimizer = pm.get_task_from_package('ir', 'sirt') method.set_properties(df_minimizer=minimizer) if params.method == 'sbtv': # FIXME: the lambda keyword is preventing from the following # assignment ... # method.props.lambda = params.lambda method.set_properties(mu=params.mu) g.connect_nodes(sino_output, method) g.connect_nodes(method, writer) if params.method == 'dfi': oversampling = params.oversampling or 1 pad = get_task('zeropad', center_of_rotation=axis, oversampling=oversampling) fft = get_task('fft', dimensions=1, auto_zeropadding=0) dfi = get_task('dfi-sinc') ifft = get_task('ifft', dimensions=2) swap_forward = get_task('swap-quadrants') swap_backward = get_task('swap-quadrants') if params.angle: dfi.props.angle_step = params.angle g.connect_nodes(sino_output, pad) g.connect_nodes(pad, fft) g.connect_nodes(fft, dfi) g.connect_nodes(dfi, swap_forward) g.connect_nodes(swap_forward, ifft) g.connect_nodes(ifft, swap_backward) if width: crop = get_task('crop') crop.set_properties(from_center=True, width=width, height=width) g.connect_nodes(swap_backward, crop) g.connect_nodes(crop, writer) else: g.connect_nodes(swap_backward, writer) scheduler = Ufo.Scheduler() if hasattr(scheduler.props, 'enable_tracing'): LOG.debug("Use tracing: {}".format(params.enable_tracing)) scheduler.props.enable_tracing = params.enable_tracing if not run_scheduler(scheduler, g): return duration = scheduler.props.time LOG.info("Execution time: {} s".format(duration)) return duration def estimate_center(params): if params.estimate_method == 'reconstruction': axis = estimate_center_by_reconstruction(params) else: axis = estimate_center_by_correlation(params) return axis def estimate_center_by_reconstruction(params): if params.projections is not None: raise RuntimeError("Cannot estimate axis from projections") sinos = sorted(glob.glob(os.path.join(params.sinograms, '*.tif'))) if not sinos: raise RuntimeError("No sinograms found in {}".format(params.sinograms)) # Use a sinogram that probably has some interesting data filename = sinos[len(sinos) // 2] sinogram = read_image(filename) initial_width = sinogram.shape[1] m0 = np.mean(np.sum(sinogram, axis=1)) center = initial_width / 2.0 width = initial_width / 2.0 new_center = center tmp_dir = tempfile.mkdtemp() tmp_output = os.path.join(tmp_dir, 'slice-0.tif') params.sinograms = filename params.output = os.path.join(tmp_dir, 'slice-%i.tif') def heaviside(A): return (A >= 0.0) * 1.0 def get_score(guess, m0): # Run reconstruction with new guess params.axis = guess tomo(params) # Analyse reconstructed slice result = read_image(tmp_output) Q_IA = float(np.sum(np.abs(result)) / m0) Q_IN = float(-np.sum(result * heaviside(-result)) / m0) LOG.info("Q_IA={}, Q_IN={}".format(Q_IA, Q_IN)) return Q_IA def best_center(center, width): trials = [center + (width / 4.0) * x for x in range(-2, 3)] scores = [(guess, get_score(guess, m0)) for guess in trials] LOG.info(scores) best = sorted(scores, cmp=lambda x, y: cmp(x[1], y[1])) return best[0][0] for i in range(params.num_iterations): LOG.info("Estimate iteration: {}".format(i)) new_center = best_center(new_center, width) LOG.info("Currently best center: {}".format(new_center)) width /= 2.0 try: os.remove(tmp_output) os.removedirs(tmp_dir) except OSError: LOG.info("Could not remove {} or {}".format(tmp_output, tmp_dir)) return new_center def estimate_center_by_correlation(params): """Use correlation to estimate center of rotation for tomography.""" def flat_correct(flat, radio): nonzero = np.where(radio != 0) result = np.zeros_like(radio) result[nonzero] = flat[nonzero] / radio[nonzero] # log(1) = 0 result[result <= 0] = 1 return np.log(result) first = read_image(get_filenames(params.projections)[0]).astype(float) last_index = params.start + params.number if params.number else -1 last = read_image(get_filenames(params.projections)[last_index]).astype(float) if params.darks and params.flats: dark = read_image(get_filenames(params.darks)[0]).astype(float) flat = read_image(get_filenames(params.flats)[0]) - dark first = flat_correct(flat, first - dark) last = flat_correct(flat, last - dark) height = params.height if params.height else -1 y_region = slice(params.y, min(params.y + height, first.shape[0]), params.y_step) first = first[y_region, :] last = last[y_region, :] return compute_rotation_axis(first, last) def compute_rotation_axis(first_projection, last_projection): """ Compute the tomographic rotation axis based on cross-correlation technique. *first_projection* is the projection at 0 deg, *last_projection* is the projection at 180 deg. """ from scipy.signal import fftconvolve width = first_projection.shape[1] first_projection = first_projection - first_projection.mean() last_projection = last_projection - last_projection.mean() # The rotation by 180 deg flips the image horizontally, in order # to do cross-correlation by convolution we must also flip it # vertically, so the image is transposed and we can apply convolution # which will act as cross-correlation convolved = fftconvolve(first_projection, last_projection[::-1, :], mode='same') center = np.unravel_index(convolved.argmax(), convolved.shape)[1] return (width / 2.0 + center) / 2 ufo-kit-tofu-ed0e5bd/tofu/tasks.py000066400000000000000000000063051521054151500172740ustar00rootroot00000000000000import logging from gi.repository import Ufo LOG = logging.getLogger(__name__) PLUGIN_MANAGER = Ufo.PluginManager() def get_task(name, processing_node=None, **kwargs): task = PLUGIN_MANAGER.get_task(name) task.set_properties(**kwargs) if processing_node and task.uses_gpu(): LOG.debug("Assigning task '%s' to node %d", name, processing_node.get_index()) task.set_proc_node(processing_node) return task def get_writer(params): if 'dry_run' in params and params.dry_run: LOG.debug("Discarding data output") return get_task('null', download=True) outname = params.output LOG.debug("Writing output to {}".format(outname)) writer = get_task('write', filename=outname, rescale=params.output_rescale) writer.props.append = params.output_append if params.output_bitdepth != 32: writer.props.bits = params.output_bitdepth if params.output_minimum is not None: writer.props.minimum = params.output_minimum if params.output_maximum is not None: writer.props.maximum = params.output_maximum if params.output_minimum is not None or params.output_maximum is not None: LOG.info('--output-minimum or --output-maximum specified, turning --output-rescale on') writer.props.rescale = True if hasattr (writer.props, 'bytes_per_file'): writer.props.bytes_per_file = params.output_bytes_per_file if hasattr(writer.props, 'tiff_bigtiff'): writer.props.tiff_bigtiff = params.output_bytes_per_file > 2 ** 32 - 2 ** 25 return writer def get_memory_in(array): import numpy as np if array.ndim != 2: raise ValueError("Only 2D images are supported") if array.dtype != np.float32 and array.dtype != np.complex64: raise ValueError("Only images with float32 or complex64 data type are supported") is_complex = array.dtype == np.complex64 in_task = get_task('memory-in') in_task.props.complex_layout = is_complex in_task.props.pointer = array.__array_interface__['data'][0] in_task.props.width = 2 * array.shape[1] if is_complex else array.shape[1] in_task.props.height = array.shape[0] in_task.props.number = 1 in_task.props.bitdepth = 32 # We need to extend the survival of *array* beyond this function to the point when the graph is # executed, otherwise it will be destroyed and UFO will try to get data from freed memory. Thus, # attach it to the task which actually needs it, because when that one is garbage collected then # the array may be as well. in_task.np_array = array return in_task def get_memory_out(width, height): import numpy as np array = np.empty((height, width), dtype=np.float32) out_task = get_task('memory-out') out_task.props.pointer = array.__array_interface__['data'][0] out_task.props.max_size = array.nbytes # We need to extend the survival of *array* beyond this function to the point when the graph is # executed, otherwise it will be destroyed and UFO will try to get data from freed memory. Thus, # attach it to the task which actually needs it, because when that one is garbage collected then # the array may be as well. out_task.np_array = array return out_task ufo-kit-tofu-ed0e5bd/tofu/tests/000077500000000000000000000000001521054151500167335ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/tofu/tests/__init__.py000066400000000000000000000000001521054151500210320ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/tofu/tests/composites/000077500000000000000000000000001521054151500211205ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/tofu/tests/composites/cmp.cm000066400000000000000000000056661521054151500222350ustar00rootroot00000000000000{ "name": "cmp", "caption": "cmp", "models": { "Null": { "model": { "caption": "Null", "properties": { "download": [ false, true ], "finish": [ false, true ], "durations": [ false, true ] } }, "visible": true, "position": { "x": 756.0, "y": 272.0 }, "name": "null" }, "Read": { "model": { "caption": "Read", "properties": { "path": [ ".", true ], "start": [ 0, false ], "number": [ 4294967295, true ], "step": [ 1, false ], "y": [ 0, false ], "height": [ 0, false ], "y-step": [ 1, false ], "convert": [ true, false ], "raw-width": [ 0, false ], "raw-height": [ 0, false ], "raw-bitdepth": [ 0, false ], "raw-pre-offset": [ 0, false ], "raw-post-offset": [ 0, false ], "type": [ "unspecified", false ], "retries": [ 0, false ], "retry-timeout": [ 1, false ] } }, "visible": true, "position": { "x": 266.0, "y": 242.0 }, "name": "read" } }, "connections": [ [ "Read", 0, "Null", 0 ] ], "links": [] }ufo-kit-tofu-ed0e5bd/tofu/tests/composites/cmp_2.cm000066400000000000000000000034751521054151500224520ustar00rootroot00000000000000{ "name": "cmp_2", "caption": "cmp_2", "models": { "Dummy Data": { "model": { "caption": "Dummy Data", "properties": { "width": [ 1, true ], "height": [ 1, true ], "depth": [ 1, true ], "number": [ 1, true ], "init": [ 0.0, true ], "metadata": [ false, true ] } }, "visible": true, "position": { "x": 359.0, "y": 357.0 }, "name": "dummy_data" }, "Null": { "model": { "caption": "Null", "properties": { "download": [ false, true ], "finish": [ false, true ], "durations": [ false, true ] } }, "visible": true, "position": { "x": 859.0, "y": 459.0 }, "name": "null" } }, "connections": [ [ "Dummy Data", 0, "Null", 0 ] ], "links": [] }ufo-kit-tofu-ed0e5bd/tofu/tests/conftest.py000066400000000000000000000030441521054151500211330ustar00rootroot00000000000000import pytest from PyQt5.QtWidgets import QInputDialog from tofu.flow.main import get_filled_registry from tofu.flow.scene import UfoScene from tofu.flow.propertylinksmodels import PropertyLinksModel, NodeTreeModel @pytest.fixture(scope='function') def nodes(monkeypatch): reg = get_filled_registry() scene = UfoScene(reg) nodes = {} # Composite node for name in ['read', 'pad']: model_cls = reg.create(name) node = scene.create_node(model_cls) node.graphics_object.setSelected(True) monkeypatch.setattr(QInputDialog, "getText", lambda *args: ('cpm', True)) nodes['cpm'] = scene.create_composite() nodes['cpm'].graphics_object.setSelected(False) # Simple nodes for i in range(5): name = f'read_{i}' if i else 'read' model_cls = reg.create('read') nodes[name] = scene.create_node(model_cls) model_cls = reg.create('image_viewer') nodes['image_viewer'] = scene.create_node(model_cls) model_cls = reg.create('average') nodes['average'] = scene.create_node(model_cls) return nodes @pytest.fixture(scope='function') def scene(): reg = get_filled_registry() return UfoScene(reg) @pytest.fixture(scope='function') def scene_with_composite(nodes): return UfoScene(nodes['cpm'].model._registry) @pytest.fixture(scope='function') def node_model(): model = NodeTreeModel() model.setColumnCount(1) return model @pytest.fixture(scope='function') def link_model(node_model): model = PropertyLinksModel(node_model) return model ufo-kit-tofu-ed0e5bd/tofu/tests/flow_util.py000066400000000000000000000016661521054151500213220ustar00rootroot00000000000000def populate_link_model(link_model, nodes): read = nodes['read'] read_2 = nodes['read_2'] composite = nodes['cpm'] records = [[read, read.model, 'number'], [read_2, read_2.model, 'height'], [composite, composite.model['Read'], 'y']] for (i, (node, model, prop)) in enumerate(records): link_model.add_item(node, model, prop, 0, i) return records def get_index_from_treemodel(node_model, row, prop_name): item = node_model.item(row, 0) i = 0 prop_item = item.child(i) while prop_item.text() != prop_name: i += 1 prop_item = item.child(i) return node_model.indexFromItem(prop_item) def add_nodes_to_scene(scene, model_names=None): if not model_names: model_names = ['read'] nodes = [] for name in model_names: model_cls = scene.registry.create(name) nodes.append(scene.create_node(model_cls)) return nodes ufo-kit-tofu-ed0e5bd/tofu/tests/test_flow_execution.py000066400000000000000000000114371521054151500234040ustar00rootroot00000000000000import pytest from tofu.flow.execution import get_gpu_splitting_models, UfoExecutor from tofu.flow.main import get_filled_registry from tofu.flow.scene import UfoScene @pytest.fixture(scope='function') def scene(): reg = get_filled_registry() scene = UfoScene(reg) for name in ['dummy_data', 'pad', 'null']: # Set nodes as scene attributes for convenience setattr(scene, name, scene.create_node(reg.create(name))) scene.create_connection(scene.dummy_data['output'][0], scene.pad['input'][0]) scene.create_connection(scene.pad['output'][0], scene.null['input'][0]) return scene @pytest.fixture(scope='function') def executor(): return UfoExecutor() class TestUfoExecutor: def test_init(self, executor): ... def test_reset(self, executor): assert not executor._aborted assert executor._schedulers == [] assert executor.num_generated == 0 def test_abort(self, executor): self.called = False def slot(): self.called = True executor.execution_finished.connect(slot) executor.abort() assert self.called def test_on_processed(self, executor): self.num_generated = 0 def slot(): self.num_generated += 1 executor.processed_signal.connect(slot) executor.on_processed(None) executor.on_processed(None) assert self.num_generated == executor.num_generated == 2 def test_setup_ufo_graph(self, qtbot, scene, executor): graph = scene.get_simple_node_graphs()[0] gpus = executor._resources.get_gpu_nodes() assert gpus executor.setup_ufo_graph(graph, gpu=gpus[0], region=None, signalling_model=scene.dummy_data.model) def test_run_ufo_graph(self, qtbot, scene, executor): graph = scene.get_simple_node_graphs()[0] gpus = executor._resources.get_gpu_nodes() assert gpus ufo_graph = executor.setup_ufo_graph(graph, gpu=gpus[0], region=None, signalling_model=scene.dummy_data.model) # Run with default scheduler executor._run_ufo_graph(ufo_graph, False) # Run with fixed scheduler executor._run_ufo_graph(ufo_graph, True) # def test_check_graph(self, qtbot, scene, executor): # # TODO: implement this when memory-in is implemented and there is something to test def test_run(self, qtbot, scene, executor): def on_num_inputs_changed(number): self.num_inputs = number def on_processed(number): self.num_processed = number def on_execution_started(): self.started = True def on_execution_finished(): self.finished = True def on_exception_occured(): self.exception = True scene.dummy_data.model['number'] = 10 graph = scene.get_simple_node_graphs()[0] self.num_inputs = 0 self.num_processed = 0 self.started = False self.finished = False self.exception = None executor.number_of_inputs_changed.connect(on_num_inputs_changed) executor.processed_signal.connect(on_processed) executor.execution_started.connect(on_execution_started) executor.execution_finished.connect(on_execution_finished) executor.exception_occured.connect(on_exception_occured) with qtbot.waitSignal(signal=executor.execution_finished, timeout=100000): executor.run(graph) assert self.num_inputs == scene.dummy_data.model['number'] assert self.num_processed == scene.dummy_data.model['number'] assert self.started assert self.finished assert self.exception is None scene.remove_node(scene.dummy_data) # Create a reader and point it to a nonexistent path so that it raises an exception and # check that this exception has been processed byt the executor setattr(scene, 'read', scene.create_node(scene.registry.create('read'))) scene.create_connection(scene.read['output'][0], scene.pad['input'][0]) # Make sure the path is nonsense scene.read.model['path'] = '/dfasf/fsdafsdaf/asd/asf' scene.read.model['number'] = 10 graph = scene.get_simple_node_graphs()[0] executor.swallow_run_exceptions = True with qtbot.waitSignal(signal=executor.execution_finished): executor.run(graph) assert self.exception def test_get_gpu_splitting_models(qtbot, scene, executor): graph = scene.get_simple_node_graphs()[0] assert len(get_gpu_splitting_models(graph)) == 0 scene.clear_scene() scene.create_node(scene.registry.create('general_backproject')) graph = scene.get_simple_node_graphs()[0] assert len(get_gpu_splitting_models(graph)) == 1 ufo-kit-tofu-ed0e5bd/tofu/tests/test_flow_main.py000066400000000000000000000513111521054151500223200ustar00rootroot00000000000000import glob import os import pathlib import pkg_resources import pytest import sys import xdg.BaseDirectory from PyQt5.QtWidgets import QFileDialog, QInputDialog, QMessageBox from tofu.flow.execution import UfoExecutor from tofu.flow.main import ApplicationWindow, get_filled_registry, GlobalExceptionHandler from tofu.flow.scene import UfoScene from tofu.flow.util import FlowError from tofu.tests.flow_util import add_nodes_to_scene @pytest.fixture(scope='function') def app_window(qtbot, scene): window = ApplicationWindow(scene) qtbot.addWidget(window) return window class TestApplicationWindow: def test_init(self, qtbot, app_window): assert app_window.ufo_scene assert app_window.executor def test_on_save(self, monkeypatch, app_window): def getSaveFileNameDefault(inst, header, path, fltr): return (os.path.join(path, 'flow.flow'), True) def getSaveFileName(inst, header, path, fltr): return (os.path.join('foo', 'bar', 'flow.flow'), True) # Don't actually write to disk monkeypatch.setattr(UfoScene, "save", lambda *args: None) # Default directory monkeypatch.setattr(QFileDialog, "getSaveFileName", getSaveFileNameDefault) app_window.on_save() directory = xdg.BaseDirectory.save_data_path('tofu', 'flows') assert os.path.exists(directory) assert app_window.last_dirs['scene'] == directory # When user picks a different directory it must be remembered monkeypatch.setattr(QFileDialog, "getSaveFileName", getSaveFileName) app_window.on_save() assert app_window.last_dirs['scene'] == os.path.join('foo', 'bar') # And used the next time monkeypatch.setattr(QFileDialog, "getSaveFileName", getSaveFileNameDefault) app_window.on_save() assert app_window.last_dirs['scene'] == os.path.join('foo', 'bar') def test_on_open(self, monkeypatch, app_window): def getOpenFileNameDefault(inst, header, path, fltr): return (os.path.join(path, 'flow.flow'), True) def getOpenFileName(inst, header, path, fltr): return (os.path.join('foo', 'bar', 'flow.flow'), True) # Don't actually read from disk monkeypatch.setattr(UfoScene, "load", lambda *args: None) # Default directory monkeypatch.setattr(QFileDialog, "getOpenFileName", getOpenFileNameDefault) app_window.on_open() directory = xdg.BaseDirectory.save_data_path('tofu', 'flows') if not os.path.exists(directory): directory = pathlib.Path.home() assert app_window.last_dirs['scene'] == directory # When user picks a different directory it must be remembered monkeypatch.setattr(QFileDialog, "getOpenFileName", getOpenFileName) app_window.on_open() assert app_window.last_dirs['scene'] == os.path.join('foo', 'bar') # And used the next time monkeypatch.setattr(QFileDialog, "getOpenFileName", getOpenFileNameDefault) app_window.on_open() assert app_window.last_dirs['scene'] == os.path.join('foo', 'bar') def test_on_exception_occured(self, qtbot, monkeypatch, app_window): def exec_(inst): self.message_shown = True self.message_shown = False monkeypatch.setattr(QMessageBox, "exec_", exec_) app_window.on_exception_occured('foo') assert self.message_shown def test_on_number_of_inputs_changed(self, qtbot, app_window): app_window.on_number_of_inputs_changed(123) assert app_window.progress_bar.maximum() == 123 def test_on_processed(self, qtbot, app_window): app_window.on_number_of_inputs_changed(100) app_window.on_processed(10) assert app_window.progress_bar.value() == 11 def test_on_nodes_duplicated(self, qtbot, app_window): node = add_nodes_to_scene(app_window.ufo_scene)[0] node.graphics_object.setSelected(True) app_window.ufo_scene.copy_nodes() nodes = list(app_window.ufo_scene.nodes.values()) assert nodes[0].graphics_object.pos().y() != nodes[1].graphics_object.pos().y() def test_on_selection_menu_about_to_show(self, qtbot, monkeypatch, app_window): # Nothing selected app_window.on_selection_menu_about_to_show() assert not app_window.edit_composite_action.isEnabled() assert not app_window.expand_composite_action.isEnabled() assert not app_window.export_composite_action.isEnabled() # Only non-composite nodes nodes = add_nodes_to_scene(app_window.ufo_scene, model_names=['read', 'average', 'null']) app_window.on_selection_menu_about_to_show() assert not app_window.edit_composite_action.isEnabled() assert not app_window.expand_composite_action.isEnabled() assert not app_window.export_composite_action.isEnabled() # One composite monkeypatch.setattr(QInputDialog, "getText", lambda *args: ('cpm', True)) for i in range(2): nodes[i].graphics_object.setSelected(True) app_window.ufo_scene.create_composite() app_window.on_selection_menu_about_to_show() assert app_window.edit_composite_action.isEnabled() assert app_window.expand_composite_action.isEnabled() assert app_window.export_composite_action.isEnabled() # More composites monkeypatch.setattr(QInputDialog, "getText", lambda *args: ('cpm_2', True)) app_window.ufo_scene.clearSelection() nodes[-1].graphics_object.setSelected(True) app_window.ufo_scene.create_composite() for node in app_window.ufo_scene.nodes.values(): node.graphics_object.setSelected(True) app_window.on_selection_menu_about_to_show() assert not app_window.edit_composite_action.isEnabled() assert app_window.expand_composite_action.isEnabled() assert not app_window.export_composite_action.isEnabled() def test_skip_action(self, qtbot, app_window): # No nodes selected, menu item must be disabled app_window.on_selection_menu_about_to_show() assert not app_window.skip_action.isEnabled() # Add some nodes, conect them and disable one nodes = add_nodes_to_scene(app_window.ufo_scene, model_names=['read', 'average', 'null']) app_window.ufo_scene.create_connection(nodes[0]['output'][0], nodes[1]['input'][0]) app_window.ufo_scene.create_connection(nodes[1]['output'][0], nodes[2]['input'][0]) average = nodes[1] average.graphics_object.setSelected(True) app_window.on_selection_menu_about_to_show() # Nodes selected, menu item must be enabled assert app_window.skip_action.isEnabled() def test_on_edit_composite(self, qtbot, scene_with_composite, app_window): app_window.ufo_scene = scene_with_composite node = add_nodes_to_scene(app_window.ufo_scene, model_names=['cpm'])[0] node.graphics_object.setSelected(True) app_window.on_edit_composite() qtbot.addWidget(node.model._other_view) assert node.model.is_editing def test_on_create_composite(self, qtbot, monkeypatch, scene_with_composite, app_window): monkeypatch.setattr(QInputDialog, "getText", lambda *args: ('cpm', True)) nodes = add_nodes_to_scene(app_window.ufo_scene, model_names=['read', 'pad']) # Link a model to the slider model = nodes[0].model view_item = model._view._properties['number'].view_item app_window.on_item_focus_in(view_item, 'number', 'Read', model) # Create a composite for node in app_window.ufo_scene.nodes.values(): node.graphics_object.setSelected(True) app_window.on_create_composite() composite = list(app_window.ufo_scene.nodes.values())[0].model slider_model, prop_name = app_window.run_slider_key assert slider_model == composite.get_model_from_path(['Read']) assert prop_name == 'number' def test_on_item_focus_in(self, qtbot, app_window, scene_with_composite): read, pad = add_nodes_to_scene(app_window.ufo_scene, model_names=['read', 'pad']) # Simple node model = read.model view_item = model._view._properties['number'].view_item app_window.on_item_focus_in(view_item, 'number', model.caption, model) slider_model, prop_name = app_window.run_slider_key assert slider_model == model assert prop_name == 'number' app_window.fix_run_slider.setChecked(False) model = pad.model view_item = model._view._properties['y'].view_item app_window.on_item_focus_in(view_item, 'y', model.caption, model) slider_model, prop_name = app_window.run_slider_key assert slider_model == model assert prop_name == 'y' # Focus gets another widget, but the run slider must be linked to the one focused before the # fix option is checked app_window.fix_run_slider.setChecked(True) model = read.model view_item = model._view._properties['number'].view_item app_window.on_item_focus_in(view_item, 'number', model.caption, model) slider_model, prop_name = app_window.run_slider_key assert slider_model == pad.model assert prop_name == 'y' def test_on_node_deleted(self, qtbot, monkeypatch, app_window, scene_with_composite): app_window.ufo_scene = scene_with_composite cpm, cpm_2, read = add_nodes_to_scene(app_window.ufo_scene, model_names=['cpm', 'cpm', 'read']) # Simple node model = read.model view_item = model._view._properties['number'].view_item app_window.on_item_focus_in(view_item, 'number', model.caption, model) # remove in the scene doesn't seem to emit the signal, so use the window app_window.on_node_deleted(read) slider_model, prop_name = app_window.run_slider_key assert slider_model is None assert prop_name is None # Composite node model = cpm.model.get_model_from_path(['Read']) view_item = model._view._properties['number'].view_item app_window.on_item_focus_in(view_item, 'number', 'cpm->Read', model) # remove in the scene doesn't seem to emit the signal, so use the window app_window.on_node_deleted(cpm) slider_model, prop_name = app_window.run_slider_key assert slider_model is None assert prop_name is None # Nested composite node cpm_2.graphics_object.setSelected(True) monkeypatch.setattr(QInputDialog, "getText", lambda *args: ('parent', True)) app_window.on_create_composite() node = app_window.ufo_scene.selected_nodes()[0] model = node.model.get_model_from_path(['cpm 2', 'Read']) view_item = model._view._properties['number'].view_item app_window.on_item_focus_in(view_item, 'number', 'parent->cpm 2->Read', model) # remove in the scene doesn't seem to emit the signal, so use the window app_window.on_node_deleted(node) slider_model, prop_name = app_window.run_slider_key assert slider_model is None assert prop_name is None def test_on_expand_composite(self, qtbot, scene_with_composite, app_window): app_window.ufo_scene = scene_with_composite nodes = add_nodes_to_scene(app_window.ufo_scene, model_names=['cpm', 'cpm']) for node in nodes: node.graphics_object.setSelected(True) app_window.on_expand_composite() captions = {node.model.caption for node in app_window.ufo_scene.nodes.values()} assert captions == {'Read 2', 'Pad 2', 'Read', 'Pad'} # Run slider # Create yet another composite and select a reader inside node = add_nodes_to_scene(app_window.ufo_scene, model_names=['cpm'])[0] model = node.model.get_model_from_path(['Read']) view_item = model._view._properties['number'].view_item app_window.on_item_focus_in(view_item, 'number', 'cpm->Read', model) node.graphics_object.setSelected(True) app_window.on_expand_composite() # After expansion, the reader's index will be 3 slider_model, prop_name = app_window.run_slider_key assert slider_model.caption == 'Read 3' assert prop_name == 'number' def test_on_import_composites(self, qtbot, monkeypatch, app_window): tests_directory = pkg_resources.resource_filename(__name__, 'composites') def getOpenFileNamesDefault(inst, header, path, fltr): # Let's pretend there are files file_names = [os.path.join(path, 'foo.cm')] return (file_names, True) def getOpenFileNames(inst, header, path, fltr): file_names = sorted(glob.glob(os.path.join(tests_directory, '*.cm'))) return (file_names, True) def exec_(inst): self.message_shown = True monkeypatch.setattr(QMessageBox, "exec_", exec_) # Nothing opened, nothing happens monkeypatch.setattr(QFileDialog, "getOpenFileNames", lambda *args: ([], True)) app_window.on_import_composites() # Default directory monkeypatch.setattr(QFileDialog, "getOpenFileNames", getOpenFileNamesDefault) directory = xdg.BaseDirectory.save_data_path('tofu', 'flows', 'composites') if not os.path.exists(directory): directory = pathlib.Path.home() try: app_window.on_import_composites() except FileNotFoundError: # We don't care if there are files, just the last_dirs setting is important pass assert app_window.last_dirs['composite'] == directory # It's possible to open more than one at a time monkeypatch.setattr(QFileDialog, "getOpenFileNames", getOpenFileNames) app_window.on_import_composites() assert 'cmp' in app_window.ufo_scene.registry.registered_model_creators() assert 'cmp_2' in app_window.ufo_scene.registry.registered_model_creators() # When user picks a different directory it must be remembered assert app_window.last_dirs['composite'] == tests_directory # And used the next time self.message_shown = False app_window.on_import_composites() assert app_window.last_dirs['composite'] == tests_directory # Message about overwriting models must be shown assert self.message_shown def test_on_export_composite(self, qtbot, monkeypatch, scene_with_composite, app_window): tests_directory = pkg_resources.resource_filename(__name__, 'composites') def getSaveFileNameDefault(inst, header, path, fltr): return (os.path.join(path, self.file_name), True) def getSaveFileName(inst, header, path, fltr): return (os.path.join(tests_directory, self.file_name), True) def export_composite(inst, node, file_name): self.final_file_name = file_name # Nothing selected, must silently pass app_window.on_export_composite() # Make a composite node app_window.ufo_scene = scene_with_composite node = add_nodes_to_scene(app_window.ufo_scene, model_names=['cpm'])[0] node.graphics_object.setSelected(True) monkeypatch.setattr(ApplicationWindow, "export_composite", export_composite) # Default directory monkeypatch.setattr(QFileDialog, "getSaveFileName", getSaveFileNameDefault) self.file_name = 'composite' directory = xdg.BaseDirectory.save_data_path('tofu', 'flows', 'composites') app_window.on_export_composite() assert self.final_file_name.endswith('.cm') and not self.final_file_name.endswith('.cm.cm') assert os.path.exists(directory) assert app_window.last_dirs['composite'] == directory # When user picks a different directory it must be remembered monkeypatch.setattr(QFileDialog, "getSaveFileName", getSaveFileName) app_window.on_export_composite() assert self.final_file_name.endswith('.cm') and not self.final_file_name.endswith('.cm.cm') assert app_window.last_dirs['composite'] == tests_directory # And used the next time monkeypatch.setattr(QFileDialog, "getSaveFileName", getSaveFileNameDefault) app_window.on_export_composite() assert app_window.last_dirs['composite'] == tests_directory # .cm must not be added if it's present in the file name self.file_name = 'composite.cm' app_window.on_export_composite() assert self.final_file_name.endswith('.cm') and not self.final_file_name.endswith('.cm.cm') def test_on_reset_view(self, qtbot, app_window): app_window.flow_view.scale_up() app_window.on_reset_view() assert app_window.flow_view.transform().m11() == pytest.approx(1) assert app_window.flow_view.transform().m22() == pytest.approx(1) def test_on_property_links_action(self, qtbot, app_window): qtbot.addWidget(app_window.property_links_widget) app_window.property_links_widget.show() assert app_window.property_links_widget.isVisible() def test_on_run(self, qtbot, monkeypatch, app_window): def executor_run(inst, graph): self.ran = True monkeypatch.setattr(UfoExecutor, "run", executor_run) nodes = add_nodes_to_scene(app_window.ufo_scene, model_names=['read', 'read', 'flat_field_correct', 'null']) i_0, i_1, ffc, null = nodes # No connections -> many graphs with pytest.raises(FlowError): app_window.on_run() assert app_window.run_action.isEnabled() app_window.ufo_scene.create_connection(i_0['output'][0], ffc['input'][0]) app_window.ufo_scene.create_connection(i_1['output'][0], ffc['input'][1]) app_window.ufo_scene.create_connection(ffc['output'][0], null['input'][0]) # One ffc input is not connected with pytest.raises(FlowError): app_window.on_run() assert app_window.run_action.isEnabled() # All connections present -> must run i_2 = add_nodes_to_scene(app_window.ufo_scene, model_names=['read'])[0] app_window.ufo_scene.create_connection(i_2['output'][0], ffc['input'][2]) self.ran = False app_window.on_run() assert self.ran assert not app_window.run_action.isEnabled() def test_on_save_json(self, qtbot, monkeypatch, app_window): import gi try: gi.require_version('Ufo', '0.0') except ValueError: gi.require_version('Ufo', '1.0') from gi.repository import Ufo # Don't pop up file dialog def getSaveFileName(inst, header, path, fltr): return (os.path.join(path, 'flow.json'), True) monkeypatch.setattr(QFileDialog, "getSaveFileName", getSaveFileName) # Don't actually write to disk monkeypatch.setattr(Ufo.TaskGraph, "save_to_json", lambda *args: None) # Empty scene with pytest.raises(FlowError): app_window.on_save_json() # Wrong data types app_window.ufo_scene.clear_scene() read, mem_out, viewer = add_nodes_to_scene(app_window.ufo_scene, model_names=['read', 'memory_out', 'image_viewer']) app_window.ufo_scene.create_connection(read['output'][0], mem_out['input'][0]) app_window.ufo_scene.create_connection(mem_out['output'][0], viewer['input'][0]) with pytest.raises(FlowError): app_window.on_save_json() # Not connected app_window.ufo_scene.clear_scene() read, null = add_nodes_to_scene(app_window.ufo_scene, model_names=['read', 'null']) with pytest.raises(FlowError): app_window.on_save_json() # This must pass app_window.ufo_scene.create_connection(read['output'][0], null['input'][0]) app_window.on_save_json() def test_on_execution_finished(self, qtbot, app_window): app_window.run_action.setEnabled(False) app_window.progress_bar.setMaximum(100) app_window.progress_bar.setValue(50) app_window.on_execution_finished() assert app_window.progress_bar.value() == -1 assert app_window.run_action.isEnabled() def test_global_exception_handler(qtbot): handler = GlobalExceptionHandler() def slot(text): handler.called_signal = True handler.exception_occured.connect(slot) handler.called_signal = False try: raise FlowError('foo') except: # Call the hook explicitly, sys.excinfo = ... doesn't seem to have effect handler.excepthook(*sys.exc_info()) assert handler.called_signal def test_get_filled_registry(): registry = get_filled_registry() assert 'read' in registry.registered_model_creators() ufo-kit-tofu-ed0e5bd/tofu/tests/test_flow_models.py000066400000000000000000001643221521054151500226660ustar00rootroot00000000000000import pytest import numpy as np from PyQt5.QtCore import Qt from PyQt5.QtGui import QValidator from PyQt5.QtWidgets import QFileDialog, QInputDialog, QLineEdit from tofu.flow.main import get_filled_registry from tofu.flow.models import (CheckBoxViewItem, ComboBoxViewItem, get_composite_model_class, get_composite_model_classes, get_composite_model_classes_from_json, get_ufo_model_class, get_ufo_model_classes, ImageViewerModel, IntQLineEditViewItem, MultiPropertyView, NumberQLineEditViewItem, PropertyModel, PropertyView, QLineEditViewItem, RangeQLineEditViewItem, UfoGeneralBackprojectModel, UfoIntValidator, UfoMemoryOutModel, UfoModelError, UfoRangeValidator, UfoReadModel, UfoRetrievePhaseModel, UfoModel, UfoTaskModel, UfoVaryingInputModel, UfoWriteModel, ViewItem) from tofu.flow.scene import UfoScene from tofu.flow.util import CompositeConnection, MODEL_ROLE, PROPERTY_ROLE from tofu.tests.flow_util import populate_link_model def check_property_changed_emit(qtbot, view_item, expected, gui_func, gui_args, gui_kwargs=None, show=False): if gui_kwargs is None: gui_kwargs = {} def on_changed(vit): vit.change_called = True view_item.change_called = False view_item.property_changed.connect(on_changed) qtbot.addWidget(view_item.widget) if show: # without show the mouse click for QCheckBox doesn't happen, bug in pytest-qt? view_item.widget.show() # Store old value for later check of programmatic change old_value = view_item.get() # Simulate user interaction gui_func(*gui_args, **gui_kwargs) # Value must have been set assert view_item.get() == expected # Signal must have been emitted assert view_item.change_called view_item.change_called = False view_item.set(old_value) # Signal must be emitted only on user interacion, not programmatic access assert not view_item.change_called def make_properties(): return { 'int': [IntQLineEditViewItem(0, 100, default_value=10), True], 'float': [NumberQLineEditViewItem(0, 100, default_value=0), True], 'string': [QLineEditViewItem(default_value='foo'), True], 'range': [RangeQLineEditViewItem(default_value=[1, 2, 3], num_items=3, is_float=True), True], 'choices': [ComboBoxViewItem(['a', 'b', 'c']), True], 'check': [CheckBoxViewItem(checked=True), True] } class DummyPropertyModel(PropertyModel): def make_properties(self): return make_properties() @pytest.fixture(scope='function') def property_view(): return PropertyView(properties=make_properties(), scrollable=False) @pytest.fixture(scope='function') def multi_property_view(nodes): groups = {nodes['cpm'].model: True, nodes['read'].model: False} return MultiPropertyView(groups=groups) def make_composite_model_class(nodes, name='foobar'): # We want to connect cpm:Pad to average, thus we need to get the outside port of the cpm # composite which corresponds to the pad model pad_index = nodes['cpm'].model.get_outside_port('Pad', 'output', 0)[1] connections = [CompositeConnection('cpm', pad_index, 'Average', 0)] state = [('cpm', nodes['cpm'].model.save(), True, None), ('average', nodes['average'].model.save(), True, None)] return get_composite_model_class(name, state, connections) def create_scene(qtbot, registry): scene = UfoScene(registry=registry) if scene.views(): for view in scene.views(): qtbot.addWidget(view) return scene def make_composite_node_in_scene(qtbot, nodes): model_cls = make_composite_model_class(nodes) registry = get_filled_registry() # Register both composites so that we can create them registry.register_model(nodes['cpm'].model.__class__, category='Composite', registry=registry) registry.register_model(model_cls, category='Composite', registry=registry) scene = create_scene(qtbot, registry) node = scene.create_node(model_cls) return (scene, node) @pytest.fixture(scope='function') def composite_model(nodes): # Make sure 'cpm', which is inside this composite model, has been registered registry = nodes['cpm'].model._registry model_cls = make_composite_model_class(nodes) registry.register_model(model_cls, category='Composite', registry=registry) return model_cls(registry=registry) @pytest.fixture(scope='function') def general_backproject(qtbot): model = UfoGeneralBackprojectModel() qtbot.addWidget(model.embedded_widget()) return model @pytest.fixture(scope='function') def read_model(qtbot): model = UfoReadModel() qtbot.addWidget(model.embedded_widget()) return model @pytest.fixture(scope='function') def write_model(qtbot): model = UfoWriteModel() qtbot.addWidget(model.embedded_widget()) return model @pytest.fixture(scope='function') def memory_out_model(qtbot): model = UfoMemoryOutModel() model['width'] = 100 model['height'] = 100 qtbot.addWidget(model.embedded_widget()) return model @pytest.fixture(scope='function') def image_viewer_model(qtbot): model = ImageViewerModel() qtbot.addWidget(model.embedded_widget()) return model def test_ufo_int_validator(): validator = UfoIntValidator(-10, 10) def check(input_str, expected): assert validator.validate(input_str, -1)[0] == expected check('0', QValidator.Acceptable) check('1', QValidator.Acceptable) check('-1', QValidator.Acceptable) check('101', QValidator.Intermediate) check('-101', QValidator.Intermediate) check('-', QValidator.Intermediate) check('1.', QValidator.Invalid) check('1.0', QValidator.Invalid) check('asdf', QValidator.Invalid) validator = UfoIntValidator(3, 10) check('1', QValidator.Intermediate) def test_ufo_range_validator(): def check(validator, input_str, expected): assert validator.validate(input_str, len(input_str))[0] == expected # Integer validator = UfoRangeValidator(num_items=3, is_float=False) check(validator, ',,', QValidator.Intermediate) check(validator, ' ,,', QValidator.Intermediate) check(validator, '1,1,', QValidator.Intermediate) check(validator, ',1,', QValidator.Intermediate) check(validator, '1,-2,3', QValidator.Acceptable) check(validator, '1,1.0,1', QValidator.Invalid) check(validator, '-1,s,-1', QValidator.Invalid) check(validator, '1,1,1,1', QValidator.Invalid) check(validator, '1,1,1,', QValidator.Invalid) # Float validator = UfoRangeValidator(num_items=3, is_float=True) check(validator, ',,', QValidator.Intermediate) check(validator, ' ,,', QValidator.Intermediate) check(validator, '.,,', QValidator.Intermediate) check(validator, '.e,,', QValidator.Intermediate) check(validator, '.e-,,', QValidator.Intermediate) check(validator, '.e+,,', QValidator.Intermediate) check(validator, '1.0e,,', QValidator.Intermediate) check(validator, '1.0e+,,', QValidator.Intermediate) check(validator, '1.0e-,,', QValidator.Intermediate) check(validator, '1e,,', QValidator.Intermediate) check(validator, '1e+,,', QValidator.Intermediate) check(validator, '1e-,,', QValidator.Intermediate) check(validator, '.1e,,', QValidator.Intermediate) check(validator, '.1e+,,', QValidator.Intermediate) check(validator, '.1e-,,', QValidator.Intermediate) check(validator, '1,1,1', QValidator.Acceptable) check(validator, '-1,1,1', QValidator.Acceptable) check(validator, '1.,1.,1', QValidator.Acceptable) check(validator, '-1.,1.,1', QValidator.Acceptable) check(validator, '1.0e1,1.0,1', QValidator.Acceptable) check(validator, '1.0e+1,1.0,1', QValidator.Acceptable) check(validator, '1.0e-1,1.0,1', QValidator.Acceptable) check(validator, '.1,1.0,1', QValidator.Acceptable) check(validator, '.1e-1,1.0,1', QValidator.Acceptable) check(validator, '.1e+1,1.0,1', QValidator.Acceptable) check(validator, '.1e1,1.0,1', QValidator.Acceptable) check(validator, 'e,,', QValidator.Invalid) check(validator, 'e.,,', QValidator.Invalid) check(validator, '+e,,', QValidator.Invalid) check(validator, '-e,,', QValidator.Invalid) check(validator, '+e.,,', QValidator.Invalid) check(validator, '-e.,,', QValidator.Invalid) check(validator, '1+,,', QValidator.Invalid) check(validator, '1-,,', QValidator.Invalid) check(validator, 'gfd,1,3', QValidator.Invalid) def test_view_item_init(qtbot): def get(inst): return inst.widget.text() def set(inst, value): inst.widget.setText(value) def on_changed(vit): vit.change_called = True ViewItem.get = get ViewItem.set = set edit = QLineEdit() qtbot.addWidget(edit) vit = ViewItem(edit, default_value='foo', tooltip='tooltip') edit.textEdited.connect(vit.on_changed) assert vit.widget.toolTip() == 'tooltip' assert vit.widget.text() == 'foo' check_property_changed_emit(qtbot, vit, 'fooa', qtbot.keyClick, (edit, 'a')) def test_check_box_view_item(qtbot): assert CheckBoxViewItem(checked=True).get() vit = CheckBoxViewItem(checked=False, tooltip='tooltip') assert vit.widget.toolTip() == 'tooltip' assert not vit.get() check_property_changed_emit(qtbot, vit, True, qtbot.mouseClick, (vit.widget, Qt.LeftButton), show=True) def test_combo_box_view_item(qtbot): items = ['a', 'b', 'c'] vit = ComboBoxViewItem(items, default_value='b', tooltip='tooltip') assert vit.widget.toolTip() == 'tooltip' assert vit.get() == 'b' check_property_changed_emit(qtbot, vit, 'c', qtbot.keyClick, (vit.widget, 'c')) def test_qline_edit_view_item(qtbot): vit = QLineEditViewItem(default_value='foo', tooltip='tooltip') assert vit.widget.toolTip() == 'tooltip' assert vit.get() == 'foo' check_property_changed_emit(qtbot, vit, 'fooc', qtbot.keyClick, (vit.widget, 'c')) def test_number_qline_edit_view_item(qtbot): with pytest.raises(ValueError): NumberQLineEditViewItem(-100, 100, default_value=1000) with pytest.raises(ValueError): NumberQLineEditViewItem(-100, 100, default_value=-1000) vit = NumberQLineEditViewItem(-100., 100., default_value=0., tooltip='tooltip') assert vit.widget.toolTip().startswith('tooltip') assert vit.get() == 0 # is 0.0, after key click "1" will be 0.01 check_property_changed_emit(qtbot, vit, 0.01, qtbot.keyClick, (vit.widget, '1')) def test_int_qline_edit_view_item(qtbot): with pytest.raises(ValueError): IntQLineEditViewItem(-100, 100, default_value=1000) with pytest.raises(ValueError): IntQLineEditViewItem(-100, 100, default_value=-1000) vit = IntQLineEditViewItem(-100, 100, default_value=0, tooltip='tooltip') assert vit.widget.toolTip().startswith('tooltip') assert vit.get() == 0 # is 0, after key click "1" will be 01, thus 1 check_property_changed_emit(qtbot, vit, 1, qtbot.keyClick, (vit.widget, '1')) def test_range_edit_view_item(qtbot): vit = RangeQLineEditViewItem(default_value=[1.0, 2.0, 3.0], tooltip='tooltip') assert vit.widget.toolTip().startswith('tooltip') assert vit.get() == [1.0, 2.0, 3.0] # Last is 3.0, after key click "1" will be 3.01 check_property_changed_emit(qtbot, vit, [1.0, 2.0, 3.01], qtbot.keyClick, (vit.widget, '1')) class TestPropertyView: def test_init(self, qtbot, property_view): assert len(property_view.property_names) > 0 # Defaults must pass PropertyView() def test_get_property(self, qtbot, property_view): assert property_view.get_property('int') == 10 def test_set_property(self, qtbot, property_view): property_view.set_property('int', 50) assert property_view.get_property('int') == 50 def test_on_property_changed(self, qtbot, property_view): widget = property_view._properties['int'].view_item.widget qtbot.addWidget(widget) qtbot.keyClick(widget, '0') assert property_view.get_property('int') == 100 def test_is_property_visible(self, qtbot, property_view): assert property_view.is_property_visible('int') def test_set_property_visible(self, qtbot, property_view): visible = not property_view.is_property_visible('int') property_view.set_property_visible('int', visible) assert property_view.is_property_visible('int') == visible def test_restore_properties(self, qtbot, property_view): props = property_view.export_properties() property_view.set_property('int', props['int'][0] + 1) property_view.restore_properties(props) assert property_view.get_property('int') == props['int'][0] def test_export_properties(self, qtbot, property_view): props = property_view.export_properties() assert 'int' in props assert props['int'][0] == property_view.get_property('int') assert props['int'][1] == property_view.is_property_visible('int') class TestMultiPropertyView: def test_init(self, qtbot, multi_property_view): assert len(list(iter(multi_property_view))) == 2 def test_getitem(self, qtbot, multi_property_view, nodes): assert multi_property_view['cpm'] == nodes['cpm'].model def test_contains(self, qtbot, multi_property_view): assert 'cpm' in multi_property_view assert 'foo' not in multi_property_view def test_iter(self, qtbot, multi_property_view): assert set(list(iter(multi_property_view))) == set(['cpm', 'Read']) def test_export_groups(self, qtbot, multi_property_view): state = multi_property_view.export_groups() multi_property_view.set_group_visible('Read', False) assert state['Read']['model']['caption'] == 'Read' assert not state['Read']['visible'] def test_restore_groups(self, qtbot, multi_property_view, nodes): multi_property_view['Read']['number'] = 100 state = multi_property_view.export_groups() multi_property_view['Read']['number'] = 1000 multi_property_view.restore_groups(state) assert multi_property_view['Read']['number'] def test_set_group_visible(self, qtbot, multi_property_view): visible = not multi_property_view.is_group_visible('cpm') multi_property_view.set_group_visible('cpm', visible) assert multi_property_view.is_group_visible('cpm') == visible def test_is_group_visible(self, qtbot, multi_property_view): assert multi_property_view.is_group_visible('cpm') assert not multi_property_view.is_group_visible('Read') class TestUfoModel: def test_init(self): model = UfoModel() assert model.caption == model.base_caption def test_restore(self): model = UfoModel() state = {'caption': 'foo'} old_caption = model.caption model.restore(state, restore_caption=False) assert model.caption == old_caption model.restore(state, restore_caption=True) assert model.caption == 'foo' # 'caption' not in state, the old one must be preserved model = UfoModel() old_caption = model.caption model.restore({}, restore_caption=True) assert model.caption == old_caption def save(self): model = UfoModel() model.caption = 'foo' assert model.save()['caption'] == 'foo' class TestPropertyModel: def test_init(self, qtbot): PropertyModel() model = DummyPropertyModel() # make_properties must be called assert set(model.properties) == set(make_properties().keys()) def test_getitem(self, qtbot): model = DummyPropertyModel() model['int'] with pytest.raises(KeyError): model['foo'] def test_setitem(self, qtbot): model = DummyPropertyModel() model['int'] = 132 assert model['int'] == 132 def test_contains(self, qtbot): model = DummyPropertyModel() assert 'int' in model assert 'foo' not in model def test_iter(self, qtbot): model = DummyPropertyModel() assert set(iter(model)) == set(make_properties().keys()) def test_on_property_changed(self, qtbot): def callback(model, name, value): self.called_name = name self.called_value = value model = DummyPropertyModel() model.property_changed.connect(callback) widget = model._view._properties['int'].view_item.widget qtbot.addWidget(widget) qtbot.keyClick(widget, '0') assert self.called_value == model['int'] assert self.called_name == 'int' def test_make_properties(self, qtbot): props = DummyPropertyModel().make_properties() assert props.keys() == make_properties().keys() assert PropertyModel().make_properties() == {} def test_copy_properties(self, qtbot): model = DummyPropertyModel() model['int'] = 123 visible = not model._view.is_property_visible('int') model._view.set_property_visible('int', visible) properties = model.copy_properties() # It has to be a deep copy, so changing the model properties cannot affect the copy model['int'] = 12 model._view.set_property_visible('int', not visible) assert properties['int'][0].get() == 123 assert properties['int'][1] == visible def test_embedded_widget(self, qtbot): assert PropertyModel().embedded_widget() is None assert isinstance(DummyPropertyModel().embedded_widget(), PropertyView) def test_restore(self, qtbot): model = DummyPropertyModel() state = model.save() old_value = model['int'] old_caption = model.caption visible = not model._view.is_property_visible('int') model['int'] = old_value + 1 model._view.set_property_visible('int', visible) model.caption = 'Foo' model.restore(state, restore_caption=False) assert model['int'] == old_value assert model._view.is_property_visible('int') == (not visible) assert model.caption == 'Foo' model.restore(state, restore_caption=True) assert model.caption == old_caption def test_save(self, qtbot): model = DummyPropertyModel() old_value = model['int'] visible = not model._view.is_property_visible('int') model['int'] = old_value + 1 model._view.set_property_visible('int', visible) model.caption = 'Foo' state = model.save() assert state['properties']['int'][0] == old_value + 1 assert state['properties']['int'][1] == visible assert state['caption'] == 'Foo' class TestUfoTaskModel: def test_init(self, qtbot): model = UfoTaskModel('flat-field-correct') assert model.properties # A task doesn't need any special treatment by default assert not model.expects_multiple_inputs assert not model.can_split_gpu_work assert not model.needs_fixed_scheduler def test_make_properties(self, qtbot): model = UfoTaskModel('flat-field-correct') # Config takes effect assert not model._view.is_property_visible('dark-scale') def test_create_ufo_task(self, qtbot): model = UfoTaskModel('flat-field-correct') model['dark-scale'] = 12.3 task = model.create_ufo_task() assert task.props.dark_scale == pytest.approx(12.3) def test_uses_gpu(self, qtbot): model = UfoTaskModel('flat-field-correct') assert model.uses_gpu model = UfoTaskModel('read') assert not model.uses_gpu def test_get_ufo_model_class(qtbot): # flat correction is a fairly complicated task to test task_name = 'flat-field-correct' model_cls = get_ufo_model_class(task_name) # Model class attributes assert model_cls.name == 'flat_field_correct' model = model_cls() # Model instance attributes assert model.num_ports['input'] == 3 assert model.num_ports['output'] == 1 assert model.port_caption['input'][0] == 'radios' assert model.port_caption['input'][1] == 'darks' assert model.port_caption['input'][2] == 'flats' assert model.port_caption['output'][0] == '' class TestBaseCompositeModel: def test_init(self, qtbot, monkeypatch, composite_model, scene): # cpm has 1 input and 2 outputs (read and pad are not connected) and average has 1 input and # 1 output, but cpm is connected with average, which reduces both port types by 1 assert composite_model.num_ports['input'] == 1 assert composite_model.num_ports['output'] == 2 for port_type in ['input', 'output']: for i in range(composite_model.num_ports[port_type]): submodel, j = composite_model.get_model_and_port_index(port_type, i) subcaption = submodel.port_caption[port_type][j] if subcaption: subcaption = ':' + subcaption assert (composite_model.port_caption[port_type][i] == submodel.caption + subcaption) assert composite_model._view # num-inputs must take effect monkeypatch.setattr(QInputDialog, "getInt", lambda *args, **kwargs: (2, True)) monkeypatch.setattr(QInputDialog, "getText", lambda *args, **kwargs: ('with-pr', True)) node = scene.create_node(scene.registry.create('retrieve_phase')) node.graphics_object.setSelected(True) node = scene.create_composite() assert node.model.get_model_from_path(['Retrieve Phase']).num_ports['input'] == 2 # and it must not affect default registry creators kwargs = scene.registry.registered_model_creators()['retrieve_phase'][1] assert 'num_inputs' not in kwargs def test_getitem(self, qtbot, composite_model, nodes): assert composite_model['cpm'] assert composite_model['Average'] with pytest.raises(KeyError): composite_model['foo'] def test_contains(self, qtbot, composite_model, nodes): assert 'cpm' in composite_model assert 'foo' not in composite_model def test_iter(self, qtbot, composite_model): assert set(list(iter(composite_model))) == set(['cpm', 'Average']) def test_get_descendant_graph(self, qtbot, monkeypatch, composite_model, nodes): graph = composite_model.get_descendant_graph() cpm = composite_model['cpm'] assert (composite_model, cpm) in graph.edges assert (composite_model, composite_model['Average']) in graph.edges assert (cpm, cpm['Read']) in graph.edges assert (cpm, cpm['Pad']) in graph.edges with pytest.raises(ValueError): composite_model.get_descendant_graph(in_subwindow=True) # Subwindow editing composite_model.edit_in_window() qtbot.addWidget(composite_model._other_view) graph = composite_model.get_descendant_graph(in_subwindow=True) cpm = composite_model._window_nodes['cpm'].model average = composite_model._window_nodes['Average'].model assert (composite_model, cpm) in graph.edges assert (composite_model, average) in graph.edges assert (cpm, cpm['Read']) in graph.edges assert (cpm, cpm['Pad']) in graph.edges composite_model._other_view.close() # Create outer composite with foobar inside, get_descendant_graph with in_subwindow=True # when outer is being edited and foobar not must return outer subwindow models and foobar's # internal models scene = create_scene(qtbot, composite_model._registry) inner = scene.create_node(composite_model.__class__) monkeypatch.setattr(QInputDialog, "getText", lambda *args: ('outer', True)) inner.graphics_object.setSelected(True) outer = scene.create_composite().model outer.edit_in_window() qtbot.addWidget(outer._other_view) graph = outer.get_descendant_graph(in_subwindow=True) inner = outer._window_nodes['foobar'].model assert (outer, inner) in graph.edges assert (inner, inner['Average']) in graph.edges assert (inner['cpm'], inner['cpm']['Read']) in graph.edges outer._other_view.close() def test_contains_path(self, qtbot, composite_model, nodes): assert composite_model.contains_path(['Average']) assert composite_model.contains_path(['cpm']) assert composite_model.contains_path(['cpm', 'Read']) assert not composite_model.contains_path(['cpm', 'Read 2']) assert not composite_model.contains_path(['foo']) def test_get_model_from_path(self, qtbot, composite_model, nodes): assert composite_model.get_model_from_path(['cpm', 'Read']) with pytest.raises(KeyError): composite_model.get_model_from_path(['foo']) def test_is_model_inside(self, qtbot, composite_model, nodes): model = composite_model.get_model_from_path(['cpm']) assert composite_model.is_model_inside(model) model = composite_model.get_model_from_path(['cpm', 'Read']) assert composite_model.is_model_inside(model) assert not composite_model.is_model_inside(nodes['read_2'].model) def test_get_path_from_model(self, qtbot, composite_model, nodes): cpm = composite_model['cpm'] path = composite_model.get_path_from_model(cpm) assert path == [composite_model, cpm] path = composite_model.get_path_from_model(cpm['Read']) assert path == [composite_model, cpm, cpm['Read']] model = composite_model['cpm']['Read'] path = composite_model.get_path_from_model(model) assert path == [composite_model, cpm, model] with pytest.raises(KeyError): composite_model.get_path_from_model(nodes['read_2'].model) def test_leaf_paths(self, qtbot, composite_model, nodes): leaves = composite_model.get_leaf_paths(in_subwindow=False) cpm = composite_model['cpm'] assert len(leaves) == 3 assert [composite_model, cpm, cpm['Read']] in leaves assert [composite_model, cpm, cpm['Pad']] in leaves assert [composite_model, composite_model['Average']] in leaves def test_set_property_links_model(self, qtbot, link_model, composite_model): composite_model.property_links_model = link_model assert composite_model.property_links_model == link_model # The property links model must be set also for children assert composite_model['cpm'].property_links_model == link_model def test_get_outside_port(self, qtbot, composite_model): # There is one input corresponding to cpm's pad model cpm = composite_model.get_model_from_path(['cpm']) pad_index = cpm.get_outside_port('Pad', 'input', 0)[1] composite_model.get_outside_port('cpm', 'input', pad_index) # and two outputs: cpm's read and average read_index = cpm.get_outside_port('Read', 'output', 0)[1] composite_model.get_outside_port('cpm', 'output', read_index) composite_model.get_outside_port('Average', 'output', 0) def test_get_model_and_port_index(self, qtbot, composite_model): model, index = composite_model.get_model_and_port_index('input', 0) cpm = composite_model.get_model_from_path(['cpm']) # There is only one input: Pad. Get it's internal cpm's index and compare with what the # outer composite object gives. pad_index = cpm.get_outside_port('Pad', 'input', 0)[1] assert model == cpm assert index == pad_index # There are two output ports, one from cpm's read model and one from average average = composite_model.get_model_from_path(['Average']) # Get read index from the cpm inside the composite_model and not from the cpm in the 'nodes' # fixsture because those are not the same instance and the read output index might be # different in those two instances because the ports are dictionaries read_index = cpm.get_outside_port('Read', 'output', 0)[1] outputs = [composite_model.get_model_and_port_index('output', 0)] outputs.append(composite_model.get_model_and_port_index('output', 1)) assert (cpm, read_index) in outputs assert (average, 0) in outputs def test_embedded_widget(self, qtbot, composite_model): assert isinstance(composite_model.embedded_widget(), MultiPropertyView) def test_restore(self, qtbot, composite_model): state = composite_model.save() old_value = composite_model['cpm']['Pad']['width'] old_caption = composite_model.caption visible = not composite_model._view.is_group_visible('cpm') composite_model['cpm']['Pad']['width'] = old_value + 1 composite_model._view.set_group_visible('cpm', visible) composite_model.caption = 'Foo' composite_model.restore(state, restore_caption=False) assert composite_model['cpm']['Pad']['width'] == old_value assert composite_model._view.is_group_visible('cpm') == (not visible) assert composite_model.caption == 'Foo' composite_model.restore(state, restore_caption=True) assert composite_model.caption == old_caption conn = composite_model._connections[0] assert [[conn.from_unique_name, conn.from_port_index, conn.to_unique_name, conn.to_port_index]] == state['connections'] def test_restore_links(self, qtbot, nodes): def check_links(node, link_model): assert link_model.rowCount() == 1 assert link_model.columnCount() == 3 assert link_model.find_items((node.model['cpm']['Read'], 'number'), (MODEL_ROLE, PROPERTY_ROLE)) assert link_model.find_items((node.model['cpm']['Pad'], 'height'), (MODEL_ROLE, PROPERTY_ROLE)) assert link_model.find_items((node.model['Average'], 'number'), (MODEL_ROLE, PROPERTY_ROLE)) assert not link_model.find_items((node.model['cpm']['Read'], 'height'), (MODEL_ROLE, PROPERTY_ROLE)) scene, node = make_composite_node_in_scene(qtbot, nodes) link_model = scene.property_links_model link_model.add_item(node, node.model['cpm']['Read'], 'number', 0, 0) link_model.add_item(node, node.model['cpm']['Pad'], 'height', 0, 1) link_model.add_item(node, node.model['Average'], 'number', 0, 2) # Set links to the newly created links node.model._links = node.model.save()['links'] # Link model has to have the exact same entries as before link_model.clear() node.model.restore_links(node) check_links(node, link_model) # Second time doesn't add the same links twice node.model.restore_links(node) check_links(node, link_model) def test_save(self, qtbot, nodes): scene, node = make_composite_node_in_scene(qtbot, nodes) link_model = scene.property_links_model cpm = node.model['cpm'] link_model.add_item(node, node.model['cpm']['Read'], 'number', 0, 0) link_model.add_item(node, node.model['cpm']['Pad'], 'height', 0, 1) link_model.add_item(node, node.model['Average'], 'number', 0, 2) old_value = node.model['cpm']['Pad']['width'] visible = not node.model._view.is_group_visible('cpm') node.model['cpm']['Pad']['width'] = old_value + 1 node.model._view.set_group_visible('cpm', visible) node.model.caption = 'Foo' state = node.model.save() cpm_models_state = state['models']['cpm']['model']['models'] assert state['models']['cpm']['visible'] == visible assert cpm_models_state['Pad']['model']['properties']['width'][0] == old_value + 1 assert state['caption'] == 'Foo' cpm = node.model.get_model_from_path(['cpm']) pad_index = cpm.get_outside_port('Pad', 'output', 0)[1] assert state['connections'] == [['cpm', pad_index, 'Average', 0]] # Property links links = link_model.get_model_links([path[-1] for path in node.model.get_leaf_paths()]) links = [[str_path[1:] for str_path in row] for row in links.values()] saved = node.model.save()['links'] # One row assert len(saved) == len(links) == 1 # All linked paths must be saved for str_path in saved[0]: assert str_path in links[0] def test_on_connection_created(self, qtbot, composite_model): composite_model.edit_in_window() qtbot.addWidget(composite_model._other_view) for node in composite_model._other_scene.nodes.values(): if node.model.caption == 'cpm': read_index = node.model.get_outside_port('Read', 'output', 0)[1] pad_index = node.model.get_outside_port('Pad', 'input', 0)[1] output_port = node['output'][read_index] input_port = node['input'][pad_index] num_connections = len(composite_model._other_scene.connections) composite_model._other_scene.create_connection(output_port, input_port) # No new connections allowed assert len(composite_model._other_scene.connections) == num_connections composite_model._other_view.close() def test_on_connection_deleted(self, qtbot, composite_model): composite_model.edit_in_window() qtbot.addWidget(composite_model._other_view) num_connections = len(composite_model._other_scene.connections) composite_model._other_scene.delete_connection(composite_model._other_scene.connections[0]) # No connection deletions assert len(composite_model._other_scene.connections) == num_connections composite_model._other_view.close() def test_double_clicked(self, qtbot, composite_model): composite_model.double_clicked(None) qtbot.addWidget(composite_model._other_view) assert composite_model.is_editing and composite_model._other_view is not None def test_on_other_scene_double_clicked(self, qtbot, composite_model): composite_model.double_clicked(None) qtbot.addWidget(composite_model._other_view) for node in composite_model._other_scene.nodes.values(): if node.model.caption == 'cpm': node.model.double_clicked(composite_model._other_view) qtbot.addWidget(node.model._other_view) assert composite_model.is_editing and composite_model._other_view is not None break def test_expand_into_graph(self, qtbot, composite_model): import networkx as nx graph = nx.MultiDiGraph() composite_model.expand_into_graph(graph) src, dst, ports = list(graph.edges.data())[0] conn = composite_model._connections[0] gt = [conn.from_unique_name, conn.from_port_index, conn.to_unique_name, conn.to_port_index] conn_graph = [src.caption, ports['output'], dst.caption, ports['input']] assert conn_graph == gt def test_add_slave_links(self, qtbot, monkeypatch, nodes): def crosscheck(model, root_model, property_name, link_model): key = (model, property_name) root_key = (root_model, property_name) assert link_model._silent[key] == root_key assert key in link_model._slaves[root_key] scene, node = make_composite_node_in_scene(qtbot, nodes) link_model = scene.property_links_model link_model.add_item(node, node.model['cpm']['Read'], 'number', 0, 0) link_model.add_item(node, node.model['cpm']['Pad'], 'height', 0, 1) link_model.add_item(node, node.model['Average'], 'number', 0, 2) # Not being edited, nothing registered node.model.add_slave_links() assert link_model._silent == {} node.model.edit_in_window() qtbot.addWidget(node.model._other_view) # Standard editing setup assert hasattr(node.model, '_other_scene') assert hasattr(node.model, '_other_view') assert not node.model._other_scene.allow_node_creation assert not node.model._other_scene.allow_node_deletion # Test foobar's subwindow, registering model is cpm and its internal models must be linked crosscheck(node.model._window_nodes['cpm'].model['Read'], node.model['cpm']['Read'], 'number', link_model) crosscheck(node.model._window_nodes['cpm'].model['Pad'], node.model['cpm']['Pad'], 'height', link_model) crosscheck(node.model._window_nodes['Average'].model, node.model['Average'], 'number', link_model) # Test foobar's subwindow and cpm's subwindow, cpm and also its models in the subwindow must # be linked cpm = node.model._window_nodes['cpm'].model cpm.edit_in_window() qtbot.addWidget(cpm._other_view) assert cpm.window_parent == node.model crosscheck(cpm._window_nodes['Read'].model, node.model['cpm']['Read'], 'number', link_model) crosscheck(cpm._window_nodes['Pad'].model, node.model['cpm']['Pad'], 'height', link_model) # Add one more composite layer, outer->foobar->cpm->Model, both registering model and its # window_parent must be jinked node.model._other_view.close() assert cpm._other_view is None monkeypatch.setattr(QInputDialog, "getText", lambda *args: ('outermost', True)) node.graphics_object.setSelected(True) outer = scene.create_composite() outer.model.edit_in_window() qtbot.addWidget(outer.model._other_view) node_sub = outer.model._window_nodes['foobar'] node_sub.model.edit_in_window() qtbot.addWidget(node_sub.model._other_view) cpm = node_sub.model._window_nodes['cpm'].model cpm.edit_in_window() qtbot.addWidget(cpm._other_view) crosscheck(node_sub.model._window_nodes['cpm'].model['Read'], outer.model['foobar']['cpm']['Read'], 'number', link_model) crosscheck(node_sub.model._window_nodes['cpm'].model['Pad'], outer.model['foobar']['cpm']['Pad'], 'height', link_model) crosscheck(node_sub.model._window_nodes['Average'].model, outer.model['foobar']['Average'], 'number', link_model) crosscheck(cpm._window_nodes['Read'].model, outer.model['foobar']['cpm']['Read'], 'number', link_model) crosscheck(cpm._window_nodes['Pad'].model, outer.model['foobar']['cpm']['Pad'], 'height', link_model) cpm._other_view.close() node_sub.model._other_view.close() outer.model._other_view.close() def test_edit_in_window(self, qtbot, nodes): composite_model = nodes['cpm'].model link_model = composite_model.property_links_model populate_link_model(link_model, nodes) composite_model.edit_in_window() qtbot.addWidget(composite_model._other_view) assert hasattr(composite_model, '_other_scene') assert hasattr(composite_model, '_other_view') assert not composite_model._other_scene.allow_node_creation assert not composite_model._other_scene.allow_node_deletion # Silent must have been added with root cpm's read model assert (list(link_model._slaves.keys())[0] == (composite_model.get_model_from_path(['Read']), 'y')) # Subcomposites must link to their parent models scene, node = make_composite_node_in_scene(qtbot, nodes) node.model.edit_in_window() qtbot.addWidget(node.model._other_view) assert node.model._window_nodes['cpm'].model.window_parent == node.model node.model._other_view.close() composite_model._other_view.close() def test_view_close_event(self, qtbot, nodes): composite_model = nodes['cpm'].model link_model = composite_model.property_links_model populate_link_model(link_model, nodes) composite_model.edit_in_window() qtbot.addWidget(composite_model._other_view) for node in composite_model._other_scene.nodes.values(): if node.model.caption == 'Read': widget = node.model.embedded_widget()._properties['y'].view_item.widget qtbot.addWidget(node.model.embedded_widget()) qtbot.keyClicks(widget, '11') else: # Pad node.model['width'] += 10 # Linked models must be updated immediately assert composite_model['Read']['y'] == 11 assert nodes['read'].model['number'] == 11 assert nodes['read_2'].model['height'] == 11 composite_model._other_view.close() # Original models in the composite must be updated after close assert composite_model['Pad']['width'] == 10 # Silent model must be removed (it was the only one, so test for {} is sufficient) assert link_model._slaves == {} assert link_model._silent == {} def test_expand_into_scene(self, qtbot, monkeypatch): def get_int(*args, **kwargs): return self.get_int_return monkeypatch.setattr(QInputDialog, "getInt", get_int) nodes = {} registry = get_filled_registry() scene = create_scene(qtbot, registry) # Composite node for name in ['read', 'pad']: model_cls = registry.create(name) node = scene.create_node(model_cls) node.graphics_object.setSelected(True) monkeypatch.setattr(QInputDialog, "getText", lambda *args: ('cpm', True)) nodes['cpm'] = scene.create_composite() nodes['cpm'].graphics_object.setSelected(False) model_cls = registry.create('average') nodes['average'] = scene.create_node(model_cls) self.get_int_return = (2, True) model_cls = registry.create('retrieve_phase') nodes['retrieve_phase'] = scene.create_node(model_cls) # Add null node to create an outside connection null_cls = registry.create('null') null_node = scene.create_node(null_cls) # Make a property link scene.property_links_model.add_item(nodes['cpm'], nodes['cpm'].model['Read'], 'number', 0, 0) scene.property_links_model.add_item(nodes['cpm'], nodes['cpm'].model['Pad'], 'width', 0, 1) # Export composite and reload it so that it remembers the links (important for testing of # adding property link duplicates) cpm_cls_with_links = get_composite_model_classes_from_json(nodes['cpm'].model.save())[0] registry.register_model(cpm_cls_with_links, category='Composites', registry=registry) scene.remove_node(nodes['cpm']) nodes['cpm'] = scene.create_node(registry.create('cpm')) # Outer composite node has inside: read, pad, average; pad and average are connected # read and pad are encapsulated in an internal composite cpm pad_index = nodes['cpm'].model.get_outside_port('Pad', 'output', 0)[1] scene.create_connection(nodes['cpm']['output'][pad_index], nodes['average']['input'][0]) nodes['cpm'].graphics_object.setSelected(True) nodes['average'].graphics_object.setSelected(True) nodes['retrieve_phase'].graphics_object.setSelected(True) monkeypatch.setattr(QInputDialog, "getText", lambda *args: ('foobar', True)) scene.create_composite() composite_node = scene.selected_nodes()[0] composite_model = composite_node.model # Create outside connection from outer composite's average to null port_null = null_node['input'][0] # average_index = nodes['cpm'].model.get_outside_port('Pad', 'output', 0)[1] # Get the average index dynamically because it might be mapped to a different output port # every time (reader in cpm makes another output) average_index = composite_model.get_outside_port('Average', 'output', 0)[1] port_composite = composite_node['output'][average_index] scene.create_connection(port_composite, port_null) # Change some property to see if it persists after expansion composite_model['cpm']['Read']['number'] = 123 # Make sure the nested num-inputs takes effect, i.e. QInputDialog.getInt invocation must # fail the test self.get_int_return = (None, False) composite_model.expand_into_scene(scene, composite_node) # Nodes must be there assert (set([node.model.caption for node in scene.nodes.values()]) == set(['Null', 'Average', 'Retrieve Phase', 'cpm'])) # num-inputs took effect for node in scene.nodes.values(): if node.model.caption == 'Retrieve Phase': assert node.model.num_ports['input'] == 2 break # Changed properties must be there for node in scene.nodes.values(): if node.model.caption == 'cpm': assert node.model['Read']['number'] == 123 break # Connections must be preserved for connection in scene.connections: if connection.get_node('output').model.caption == 'cpm': # Internal composite connection Pad -> Average must be there assert connection.get_node('input').model.caption == 'Average' cpm_index = connection.get_port_index('output') cpm_model = connection.get_node('output').model assert cpm_model.get_model_and_port_index('output', cpm_index)[0].caption == 'Pad' else: # Outside connection Average -> Null must be there assert connection.get_node('input').model.caption == 'Null' # Property links must be there assert scene.property_links_model.rowCount() == 1 # Original composite node must be gone assert composite_node not in scene.nodes.values() def test_get_composite_model_class(qtbot, nodes): model_cls = make_composite_model_class(nodes) with pytest.raises(AttributeError): # Registry must be provided model_cls() # Name must be provided with pytest.raises(UfoModelError): make_composite_model_class(nodes, name='') with pytest.raises(UfoModelError): make_composite_model_class(nodes, name=None) class TestUfoGeneralBackprojectModel: def test_init(self, general_backproject): assert general_backproject.num_ports['input'] == 1 assert general_backproject.num_ports['output'] == 1 assert general_backproject.needs_fixed_scheduler is True assert general_backproject.can_split_gpu_work is True def test_make_properties(self, general_backproject): props = general_backproject.make_properties() assert 'slice-memory-coeff' in props def test_split_gpu_work(self, general_backproject): from gi.repository import Ufo resources = Ufo.Resources() gpus = resources.get_gpu_nodes() general_backproject['x-region'] = [-100., 100., 1.] general_backproject['y-region'] = [-100., 100., 1.] general_backproject['region'] = [-100., 100., 1.] if gpus: # Normal operation assert general_backproject.split_gpu_work(gpus) # Wrong input general_backproject['x-region'] = [-100., -200., 1.] with pytest.raises(UfoModelError): general_backproject.split_gpu_work(gpus) general_backproject['x-region'] = [-100., 100., 1.] general_backproject['y-region'] = [-100., -200., 1.] with pytest.raises(UfoModelError): general_backproject.split_gpu_work(gpus) general_backproject['y-region'] = [-100., 100., 1.] general_backproject['region'] = [-100., -200., 1.] with pytest.raises(UfoModelError): general_backproject.split_gpu_work(gpus) general_backproject['region'] = [-100., 100., 1.] def test_create_ufo_task(self, general_backproject): general_backproject['region'] = [-100., 100., 1.] ufo_task = general_backproject.create_ufo_task(region=None) assert ufo_task.props.region == pytest.approx(general_backproject['region']) ufo_task = general_backproject.create_ufo_task(region=[-10., 10., 1.]) assert ufo_task.props.region == pytest.approx([-10., 10., 1.]) class TestUfoReadModel: def test_init(self, read_model): assert read_model.num_ports['input'] == 0 assert read_model.num_ports['output'] == 1 def test_double_clicked(self, qtbot, monkeypatch, read_model): from tofu.flow.filedirdialog import FileDirDialog monkeypatch.setattr(FileDirDialog, "exec_", lambda *args: 1) monkeypatch.setattr(FileDirDialog, "selectedFiles", lambda *args: ['foobarbaz']) read_model.double_clicked(None) assert read_model['path'] == 'foobarbaz' class TestUfoVaryingInputModel: def test_init(self, qtbot, monkeypatch): def get_int(*args, **kwargs): self.called = True return (1, True) # No number of inputs specified, dialog needs to pop up self.called = False monkeypatch.setattr(QInputDialog, 'getInt', get_int) model = UfoVaryingInputModel('opencl', num_inputs=None) qtbot.addWidget(model.embedded_widget()) assert self.called assert model.num_ports['input'] == 1 # e.g. opencl task can have multiple inputs model = UfoVaryingInputModel('opencl', num_inputs=4) qtbot.addWidget(model.embedded_widget()) assert model.num_ports['input'] == 4 assert len(model.data_type['input']) == 4 assert len(model.port_caption['input']) == 4 assert len(model.port_caption_visible['input']) == 4 def test_save(self, qtbot): model = UfoVaryingInputModel('opencl', num_inputs=4) qtbot.addWidget(model.embedded_widget()) assert model.save()['num-inputs'] == 4 class TestUfoRetrievePhaseModel: def test_distance_input(self, qtbot): model = UfoRetrievePhaseModel(num_inputs=4) qtbot.addWidget(model.embedded_widget()) validator = model._view._properties['distance'].view_item.widget.validator() # Validator accepts only 4 values assert validator.validate('1,2,3,4', 0)[0] == QValidator.Acceptable assert validator.validate('1,2,3', 0)[0] == QValidator.Intermediate assert validator.validate('1,2,3,4,5', 0)[0] == QValidator.Invalid def test_multidistance_fixed_method(self, qtbot): def check(num_inputs): model = UfoRetrievePhaseModel(num_inputs=num_inputs) qtbot.addWidget(model.embedded_widget()) enabled = num_inputs == 1 assert model._view._properties['method'].view_item.widget.isEnabled() == enabled if not enabled: assert model['method'] == 'ctf_multidistance' assert model._view._properties['distance-x'].view_item.widget.isEnabled() == enabled assert model._view._properties['distance-y'].view_item.widget.isEnabled() == enabled check(1) check(2) class TestUfoWriteModel: def test_init(self, write_model): assert write_model.num_ports['input'] == 1 assert write_model.num_ports['output'] == 0 def test_double_clicked(self, monkeypatch, write_model): monkeypatch.setattr(QFileDialog, "getSaveFileName", lambda *args: ('foobarbaz', None)) write_model.double_clicked(None) assert write_model['filename'] == 'foobarbaz' def test_expects_multiple_inputs(self, write_model): write_model['filename'] = 'foo{region}bar' assert write_model.expects_multiple_inputs write_model['filename'] = 'foobar' assert not write_model.expects_multiple_inputs def test_setup_ufo_task(self, write_model): write_model['filename'] = '{region}' # Must pass ufo_task = write_model.create_ufo_task(region=[0, 1, 1]) # Must fail with pytest.raises(UfoModelError): write_model.create_ufo_task(region=None) assert ufo_task.props.filename == '0' write_model['filename'] = 'foo.tif' # Must pass ufo_task = write_model.create_ufo_task(region=None) # Must fail with pytest.raises(UfoModelError): write_model.create_ufo_task(region=[0, 1, 1]) assert ufo_task.props.filename == 'foo.tif' class TestUfoMemoryOutModel: def test_init(self, memory_out_model): assert memory_out_model.num_ports['input'] == 1 assert memory_out_model.num_ports['output'] == 1 def test_expects_multiple_inputs(self, memory_out_model): memory_out_model['number'] = '{region}' assert memory_out_model.expects_multiple_inputs memory_out_model['number'] = '1' assert not memory_out_model.expects_multiple_inputs def test_make_properties(self, memory_out_model): prop_names = {'width', 'height', 'depth', 'number'} assert prop_names == memory_out_model.make_properties().keys() def test_out_data(self, monkeypatch, memory_out_model): def slot(port_index): self.num_called += 1 self.data = memory_out_model.out_data(port_index) self.num_called = 0 memory_out_model['number'] = 10 shape = (int(memory_out_model['number']), memory_out_model['height'], memory_out_model['width']) memory_out_model.create_ufo_task() batch = memory_out_model._batches[0] memory_out_model.data_updated.connect(slot) batch.data[:] = 3 assert len(memory_out_model._batches) == 1 assert batch.data.shape == shape for i in range(shape[0]): batch._on_processed(None) # Called once per 3D array assert self.num_called == 1 # out_data has been set to the batch ouput np.testing.assert_almost_equal(self.data, 3) # Original data must have been freed assert memory_out_model._batches == [None] memory_out_model.reset_batches() # Multiple inputs def slot(port_index): # Append the first item in the current result self.called.append(memory_out_model.out_data(port_index)[0, 0, 0]) self.called = [] memory_out_model.data_updated.connect(slot) memory_out_model['number'] = '{region}' # Two parallel batches of four regions each for j in range(2): for i in range(4): memory_out_model.create_ufo_task(region=[0, 10, 1]) # Set batch data to its linearized index to make checking easy memory_out_model._batches[4 * j + i].data[:] = 4 * j + i # Out of order processing for batch_id in np.array([2, 0, 1, 3], dtype=int) + (4 * j): for e in range(10): memory_out_model._batches[batch_id]._on_processed(None) # All regions in the current paralell batch must have been processed assert memory_out_model._waiting_list == [] # Result must be in order np.testing.assert_almost_equal(self.called, np.arange(8)) # Original data must have been freed assert memory_out_model._batches == [None] * 8 def test_reset_batches(self, memory_out_model): memory_out_model.reset_batches() assert memory_out_model._batches == [] assert memory_out_model._waiting_list == [] assert memory_out_model._expecting_id == 0 assert memory_out_model._current_data is None def test_setup_ufo_task(self, memory_out_model): memory_out_model['number'] = '{region}' # Must pass memory_out_model.create_ufo_task(region=[0, 100, 1]) memory_out_model.create_ufo_task(region=[100, 200, 1]) assert len(memory_out_model._batches) == 2 # Must fail with pytest.raises(UfoModelError): memory_out_model.create_ufo_task(region=None) memory_out_model.reset_batches() memory_out_model['number'] = '100' # Must pass memory_out_model.create_ufo_task(region=None) # Must fail with pytest.raises(UfoModelError): memory_out_model.create_ufo_task(region=[0, 100, 1]) assert len(memory_out_model._batches) == 1 class TestImageViewerModel: def test_init(self, image_viewer_model): assert image_viewer_model.num_ports['input'] == 1 assert image_viewer_model.num_ports['output'] == 0 def test_double_clicked(self, qtbot, image_viewer_model): image_viewer_model.double_clicked(None) # No images, no pop up assert image_viewer_model._widget._pg_window is None image_viewer_model._widget.images = np.arange(1000).reshape(10, 10, 10) image_viewer_model.double_clicked(None) assert image_viewer_model._widget._pg_window.isVisible() qtbot.addWidget(image_viewer_model._widget._pg_window) # User closes, must re-open image_viewer_model._widget._pg_window.close() image_viewer_model.double_clicked(None) assert image_viewer_model._widget._pg_window.isVisible() def test_set_in_data(self, image_viewer_model): images = np.arange(1000).reshape(10, 10, 10) image_viewer_model.set_in_data(images, None) assert image_viewer_model._widget.images.shape == images.shape image_viewer_model.set_in_data(images, None) assert image_viewer_model._widget.images.shape == (20,) + images.shape[1:] # Images cannot be appended after reset is called, they must be set image_viewer_model.reset_batches() image_viewer_model.set_in_data(images, None) assert image_viewer_model._widget.images.shape == images.shape def test_reset_batches(self, image_viewer_model): image_viewer_model.reset_batches() assert image_viewer_model._reset def test_get_ufo_model_classes(): # All classes = list(get_ufo_model_classes()) assert classes # Blacklist assert 'read' not in [cls.name for cls in classes] # Selection assert len(list(get_ufo_model_classes(names=['pad']))) == 1 def test_get_composite_model_classes_from_json(qtbot, composite_model): classes = get_composite_model_classes_from_json(composite_model.save()) # First must be the bottom class, top class comes last assert [cls.name for cls in classes] == ['cpm', 'foobar'] def test_get_composite_model_classes(): # Just make sure this runs and the result is not empty assert get_composite_model_classes() ufo-kit-tofu-ed0e5bd/tofu/tests/test_flow_propertylinksmodels.py000066400000000000000000000472631521054151500255400ustar00rootroot00000000000000import pytest from qtpy.QtCore import QByteArray, QMimeData, QModelIndex from tofu.flow.propertylinksmodels import _get_string_path from tofu.flow.propertylinkswidget import _encode_mime_data from tofu.flow.util import MODEL_ROLE, NODE_ROLE, PROPERTY_ROLE from tofu.tests.flow_util import get_index_from_treemodel, populate_link_model def setup_silent(link_model, nodes): read = nodes['read'] read_2 = nodes['read_2'] composite = nodes['cpm'] orig_key = (read.model, 'number') link_model.add_item(read, read.model, 'number', -1, -1) link_model.add_silent(composite.model['Read'], 'number', orig_key[0], orig_key[1]) link_model.add_silent(read_2.model, 'height', orig_key[0], orig_key[1]) # Put to 0 to make sure we are not lucky when checking if the links work composite.model['Read']['number'] = 0 read_2.model['height'] = 0 return orig_key class TestNodeTreeModel: def test_add_node(self, qtbot, node_model, nodes): # Unsupported model type not added node_model.add_node(nodes['image_viewer']) assert node_model.rowCount() == 0 # Supported model type (composite is handled in test_add_node) node_model.add_node(nodes['read']) assert node_model.rowCount() == 1 # Composite node_model.add_node(nodes['cpm']) item = node_model.findItems('cpm')[0] # Model contains composite node assert item.data(role=NODE_ROLE) == nodes['cpm'] # and it's children assert item.child(0).data(role=MODEL_ROLE) == nodes['cpm'].model['Pad'] assert item.child(1).data(role=MODEL_ROLE) == nodes['cpm'].model['Read'] # and their properties assert item.child(0).child(0).text() == sorted(nodes['cpm'].model['Pad'])[0] def test_remove_node(self, qtbot, node_model, nodes): node_model.add_node(nodes['cpm']) assert node_model.rowCount() == 1 node_model.remove_node(nodes['cpm']) assert node_model.rowCount() == 0 def test_set_nodes(self, qtbot, node_model, nodes): names = ['cpm', 'read'] subset = [nodes[key] for key in names] node_model.set_nodes(subset) for (i, key) in enumerate(names): assert node_model.item(i).data(role=NODE_ROLE) == nodes[key] def test_clear(self, qtbot, node_model, nodes): node_model.set_nodes(nodes.values()) assert node_model.rowCount() > 0 assert node_model.columnCount() > 0 node_model.clear() assert node_model.rowCount() == 0 assert node_model.columnCount() == 0 class TestPropertyLinksModel: def test_add_item(self, qtbot, link_model, nodes): read = nodes['read'] composite = nodes['cpm'] composite.model.property_links_model = link_model # Put to 0 to make sure we are not lucky below when checking if the links work composite.model['Read']['number'] = 0 # Items must be added link_model.add_item(read, read.model, 'number', -1, -1) item = link_model.item(0, 0) assert item.data(role=NODE_ROLE) == read assert item.data(role=MODEL_ROLE) == read.model assert item.data(role=PROPERTY_ROLE) == 'number' link_model.add_item(composite, composite.model['Read'], 'number', 0, -1) item = link_model.item(0, 1) assert item.data(role=NODE_ROLE) == composite assert item.data(role=MODEL_ROLE) == composite.model['Read'] assert item.data(role=PROPERTY_ROLE) == 'number' # Can't add one item twice with pytest.raises(ValueError): link_model.add_item(read, read.model, 'number', -1, -1) # Properties must be linked read.model['number'] = 100 read.model.property_changed.emit(read.model, 'number', read.model['number']) assert composite.model['Read']['number'] == read.model['number'] # When composite is being added, make sure the slave links are set up link_model.remove_item(link_model.find_items([composite], [NODE_ROLE])[0]) composite.model.edit_in_window() qtbot.addWidget(composite.model._other_view) link_model.add_item(composite, composite.model['Read'], 'number', 0, -1) key = (composite.model._window_nodes['Read'].model, 'number') root_key = (composite.model['Read'], 'number') assert link_model._slaves[root_key] == [key] assert link_model._silent[key] == root_key def test_remove_item(self, qtbot, link_model, nodes): read = nodes['read'] read_2 = nodes['read_2'] composite = nodes['cpm'] link_model.add_item(read, read.model, 'number', -1, -1) link_model.add_item(read_2, read_2.model, 'number', 0, -1) link_model.add_silent(composite.model['Read'], 'number', read.model, 'number') # Properties must be connected at first read.model['number'] = 100 read.model.property_changed.emit(read.model, 'number', read.model['number']) assert read_2.model['number'] == read.model['number'] link_model.remove_item(link_model.indexFromItem(link_model.item(0, 0))) assert link_model.item(0, 0) is None assert link_model._silent == {} assert link_model._slaves == {} # Properties must be disconnected after removal read.model['number'] = 0 read.model.property_changed.emit(read.model, 'number', read.model['number']) # read_2 still at the old 100 assert read_2.model['number'] == 100 def test_contains(self, qtbot, link_model, nodes): composite = nodes['cpm'] link_model.add_item(composite, composite.model['Read'], 'number', 0, -1) assert link_model.item(0, 0).text() in link_model assert 'foo' not in link_model def test_clear(self, qtbot, link_model, nodes): read = nodes['read'] read_2 = nodes['read_2'] composite = nodes['cpm'] link_model.add_item(read, read.model, 'number', -1, -1) link_model.add_item(read_2, read_2.model, 'number', 0, -1) link_model.add_silent(composite.model['Read'], 'number', read.model, 'number') link_model.clear() assert link_model.rowCount() == 0 assert link_model.columnCount() == 0 assert link_model._silent == {} assert link_model._slaves == {} def test_find_items(self, qtbot, link_model, nodes): read = nodes['read'] read_2 = nodes['read_2'] # Empty model assert link_model.find_items([read.model], [MODEL_ROLE]) == [] link_model.add_item(read, read.model, 'number', -1, -1) # Not inside assert link_model.find_items([read_2.model], [MODEL_ROLE]) == [] # Inside assert (link_model.find_items([read.model], [MODEL_ROLE])[0].data(role=MODEL_ROLE) == read.model) # Model not inside, property not inside assert link_model.find_items((read_2.model, 'height'), (MODEL_ROLE, PROPERTY_ROLE)) == [] # Model inside, property not inside assert link_model.find_items((read.model, 'height'), (MODEL_ROLE, PROPERTY_ROLE)) == [] # Model not inside, property inside assert link_model.find_items((read_2.model, 'number'), (MODEL_ROLE, PROPERTY_ROLE)) == [] # Model inside, property inside item = link_model.find_items((read.model, 'number'), (MODEL_ROLE, PROPERTY_ROLE))[0] assert item.data(role=MODEL_ROLE) == read.model assert item.data(role=PROPERTY_ROLE) == 'number' def test_get_model_links(sef, qtbot, link_model, nodes): populate_link_model(link_model, nodes) assert link_model.get_model_links(nodes['read_3'].model) == {} links = link_model.get_model_links([nodes['read'].model, nodes['read_2'].model, nodes['cpm'].model['Read']]) links = list(links.values()) # Just one row assert len(links) == 1 # Three items in that row assert len(links[0]) == 3 assert [nodes['read'].model.caption, 'number'] in links[0] assert [nodes['read_2'].model.caption, 'height'] in links[0] path = nodes['cpm'].model.get_path_from_model(nodes['cpm'].model['Read']) str_path = [model.caption for model in path] + ['y'] assert str_path in links[0] def test_get_root_model(self, qtbot, link_model, nodes): read = nodes['read'] composite = nodes['cpm'] link_model.add_item(read, read.model, 'number', -1, -1) # Not inside assert link_model.get_root_model(nodes['read_2'].model) is None # Directly inside assert link_model.get_root_model(read.model) == read.model # Indirectly inside via silent link_model.add_silent(composite.model['Read'], 'number', read.model, 'number') assert link_model.get_root_model(composite.model['Read']) == read.model def test_get_model_properties(self, qtbot, link_model, nodes): read = nodes['read'] link_model.add_item(read, read.model, 'number', -1, -1) link_model.add_item(read, read.model, 'height', -1, -1) # Empty assert link_model.get_model_properties(nodes['read_2'].model) == [] # Multiple assert set(link_model.get_model_properties(read.model)) == set(['number', 'height']) def test_add_silent(self, qtbot, link_model, nodes): read = nodes['read'] read_2 = nodes['read_2'] composite = nodes['cpm'] orig_key = setup_silent(link_model, nodes) # orig model not inside with pytest.raises(ValueError): link_model.add_silent(composite.model['Read'], 'height', nodes['read_3'].model, 'number') # source property not inside with pytest.raises(ValueError): link_model.add_silent(composite.model['Read'], 'height', read.model, 'height') # Links inside assert len(link_model._slaves[orig_key]) == 2 key = (composite.model['Read'], 'number') assert link_model._silent[key] == orig_key assert key in link_model._slaves[orig_key] key = (read_2.model, 'height') assert link_model._silent[key] == orig_key assert key in link_model._slaves[orig_key] # Properties conected read.model['number'] = 100 read.model.property_changed.emit(read.model, 'number', read.model['number']) assert composite.model['Read']['number'] == read.model['number'] assert read_2.model['height'] == read.model['number'] def test_remove_silent(self, qtbot, link_model, nodes): read = nodes['read'] read_2 = nodes['read_2'] composite = nodes['cpm'] orig_key = setup_silent(link_model, nodes) key = (composite.model['Read'], 'number') link_model.remove_silent(*key) assert key not in link_model._silent # Silent link disconected read.model['number'] = 100 read.model.property_changed.emit(read.model, 'number', read.model['number']) assert composite.model['Read']['number'] == 0 assert read_2.model['height'] == read.model['number'] # No more slaves, remove the original key as well key = (nodes['read_2'].model, 'height') link_model.remove_silent(*key) assert orig_key not in link_model._slaves def test_replace_item(self, qtbot, link_model, nodes): read = nodes['read'] read_2 = nodes['read_2'] composite = nodes['cpm'] orig_key = setup_silent(link_model, nodes) replacer = nodes['read_3'] item = link_model.find_items(orig_key, (MODEL_ROLE, PROPERTY_ROLE))[0] (row, column) = item.row(), item.column() link_model.replace_item(replacer, replacer.model, orig_key[0]) new_item = link_model.item(row, column) assert new_item.data(role=MODEL_ROLE) == replacer.model # Silent links re-connected # This must have no effect on silent models read.model['number'] = 100 read.model.property_changed.emit(read.model, 'number', read.model['number']) assert composite.model['Read']['number'] == 0 assert read_2.model['height'] == 0 # This must change silent models' properties replacer.model['number'] = 100 replacer.model.property_changed.emit(replacer.model, 'number', replacer.model['number']) assert composite.model['Read']['number'] == replacer.model['number'] assert read_2.model['height'] == replacer.model['number'] def test_on_node_rows_about_to_be_removed(self, qtbot, link_model, node_model, nodes): read = nodes['read'] read_2 = nodes['read_2'] read_3 = nodes['read_3'] node_model.add_node(read) node_model.add_node(read_2) node_model.add_node(read_3) link_model.add_item(read, read.model, 'number', -1, -1) link_model.add_item(read_2, read_2.model, 'number', 0, -1) link_model.add_item(read_3, read_3.model, 'number', -1, -1) # Remove one node_model.removeRow(0) assert link_model.find_items([read.model], [MODEL_ROLE]) == [] # Remove all node_model.clear() assert link_model.find_items([read_2.model], [MODEL_ROLE]) == [] assert link_model.find_items([read_3.model], [MODEL_ROLE]) == [] def test_canDropMimeData(self, qtbot, link_model, node_model, nodes): read = nodes['read'] read_2 = nodes['read_2'] node_model.add_node(read) node_model.add_node(read_2) # Incompatible QMimeData data = QMimeData() data.setData('application/x-foobar', QByteArray()) assert not link_model.canDropMimeData(data, None, -1, -1, QModelIndex()) # No parent index = get_index_from_treemodel(node_model, 0, 'number') data = _encode_mime_data(index) assert link_model.canDropMimeData(data, None, -1, -1, QModelIndex()) link_model.add_item(read, read.model, 'number', -1, -1) assert not link_model.canDropMimeData(data, None, -1, -1, QModelIndex()) # On parent # Compatible property type index = get_index_from_treemodel(node_model, 1, 'number') data = _encode_mime_data(index) parent = link_model.indexFromItem(link_model.item(0, 0)) assert link_model.canDropMimeData(data, None, 0, 0, parent) # Incompatible property type index = get_index_from_treemodel(node_model, 1, 'path') data = _encode_mime_data(index) parent = link_model.indexFromItem(link_model.item(0, 0)) assert not link_model.canDropMimeData(data, None, 0, 0, parent) def test_dropMimeData(self, qtbot, link_model, node_model, nodes): read = nodes['read'] read_2 = nodes['read_2'] node_model.add_node(read) node_model.add_node(read_2) # No parent index = get_index_from_treemodel(node_model, 0, 'number') data = _encode_mime_data(index) link_model.dropMimeData(data, None, -1, -1, QModelIndex()) item = link_model.item(0, 0) assert item.data(role=NODE_ROLE) == read assert item.data(role=MODEL_ROLE) == read.model assert item.data(role=PROPERTY_ROLE) == 'number' # On parent index = get_index_from_treemodel(node_model, 1, 'number') data = _encode_mime_data(index) parent = link_model.indexFromItem(link_model.item(0, 0)) link_model.dropMimeData(data, None, -1, -1, parent) item = link_model.item(0, 1) assert item.data(role=NODE_ROLE) == read_2 assert item.data(role=MODEL_ROLE) == read_2.model assert item.data(role=PROPERTY_ROLE) == 'number' def test_save(self, qtbot, link_model, nodes): records = populate_link_model(link_model, nodes) for (i, (node_id, str_path)) in enumerate(link_model.save()[0]): assert node_id == records[i][0].id path = _get_string_path(records[i][0], records[i][1], records[i][2]) assert str_path == path def test_restore(self, qtbot, link_model, nodes): records = populate_link_model(link_model, nodes) state = link_model.save() link_model.clear() # Add new item read_3 = nodes['read_3'] link_model.add_item(read_3, read_3.model, 'number', -1, -1) link_model.restore(state, {node.id: node for node in nodes.values()}) assert link_model.columnCount() == 3 for column in range(link_model.columnCount()): item = link_model.item(0, column) assert item.data(role=NODE_ROLE) == records[column][0] assert item.data(role=MODEL_ROLE) == records[column][1] assert item.data(role=PROPERTY_ROLE) == records[column][2] # Restore must clear whatever is inside assert link_model.find_items([read_3.model], [MODEL_ROLE]) == [] def test_compact(self, qtbot, link_model, nodes): read = nodes['read'] read_2 = nodes['read_2'] read_3 = nodes['read_3'] read_4 = nodes['read_4'] def populate(): link_model.add_item(read, read.model, 'number', 0, 0) link_model.add_item(read_2, read_2.model, 'number', 0, 1) link_model.add_item(read_3, read_3.model, 'number', 1, 0) link_model.add_item(read_4, read_4.model, 'number', 1, 1) def check(row_count, column_count): assert link_model.rowCount() == row_count assert link_model.columnCount() == column_count populate() link_model.remove_item(link_model.indexFromItem(link_model.item(0, 1))) link_model.compact() check(2, 2) link_model.clear() # Shift item to the left to an unused cell populate() link_model.remove_item(link_model.indexFromItem(link_model.item(0, 0))) link_model.compact() assert link_model.item(0, 0).data(role=NODE_ROLE) == read_2 check(2, 2) # Nothing in the row, remove it link_model.remove_item(link_model.indexFromItem(link_model.item(0, 0))) link_model.compact() check(1, 2) # Remove column 0 and shift 1st column to the left link_model.clear() populate() link_model.remove_item(link_model.indexFromItem(link_model.item(0, 0))) link_model.remove_item(link_model.indexFromItem(link_model.item(1, 0))) link_model.compact() assert link_model.item(0, 0).data(role=NODE_ROLE) == read_2 assert link_model.item(1, 0).data(role=NODE_ROLE) == read_4 check(2, 1) def test_on_property_changed(self, qtbot, link_model, nodes): composite = nodes['cpm'] read = nodes['read'] read_2 = nodes['read_2'] read_3 = nodes['read_3'] read_4 = nodes['read_4'] # Read 2->height and cpm->Read->number are silent dependend on Read->number setup_silent(link_model, nodes) # Put every linked property to 0 to make sure we are not lucky when checking if the links # work read_3.model['number'] = 0 read_4.model['number'] = 0 composite.model['Pad']['width'] = 0 link_model.add_item(read_3, read_3.model, 'number', 0, 1) link_model.add_item(read_4, read_4.model, 'number', 1, 0) link_model.add_item(composite, composite.model['Pad'], 'width', 1, 1) read.model['number'] = 100 read.model.property_changed.emit(read.model, 'number', read.model['number']) # Row 0 # Direct link assert read_3.model['number'] == read.model['number'] # Silent links assert read_2.model['height'] == read.model['number'] assert composite.model['Read']['number'] == read.model['number'] # Row 1 read_4.model['number'] = 100 read_4.model.property_changed.emit(read_4.model, 'number', read_4.model['number']) assert composite.model['Pad']['width'] == read_4.model['number'] ufo-kit-tofu-ed0e5bd/tofu/tests/test_flow_propertylinkswidget.py000066400000000000000000000032251521054151500255260ustar00rootroot00000000000000import pytest from PyQt5.QtCore import Qt, QItemSelectionModel from tofu.flow.propertylinkswidget import NodesView, PropertyLinks, PropertyLinksView from tofu.tests.flow_util import get_index_from_treemodel, populate_link_model @pytest.fixture(scope='function') def node_view(node_model): view = NodesView() view.setHeaderHidden(True) view.setAlternatingRowColors(True) view.setDragEnabled(True) view.setAcceptDrops(False) view.setModel(node_model) return view @pytest.fixture(scope='function') def link_view(): return PropertyLinksView() @pytest.fixture(scope='function') def link_widget(node_model): return PropertyLinks() def test_property_links_view_delete_key(qtbot, link_model, link_view, nodes): qtbot.addWidget(link_view) link_view.setModel(link_model) populate_link_model(link_model, nodes) link_view.selectColumn(0) qtbot.keyPress(link_view, Qt.Key_Delete) assert link_model.columnCount() == 2 def test_node_view_get_drag_index(qtbot, node_view, nodes): node_model = node_view.model() read = nodes['read'] node_model.add_node(read) sm = node_view.selectionModel() # Nothing selected assert node_view.get_drag_index() is None # Node selection must yield nothing index = node_model.indexFromItem(node_model.item(0, 0)) sm.select(index, QItemSelectionModel.Select) assert node_view.get_drag_index() is None sm.clear() # Property selection must yield an index which can be dragged index = get_index_from_treemodel(node_model, 0, 'number') sm.select(index, QItemSelectionModel.Select) assert node_view.get_drag_index() is not None sm.clear() ufo-kit-tofu-ed0e5bd/tofu/tests/test_flow_runslider.py000066400000000000000000000147101521054151500234050ustar00rootroot00000000000000import pytest from tofu.flow.runslider import RunSlider, RunSliderError @pytest.fixture(scope='function') def runslider(qtbot, scene): slider = RunSlider() node = scene.create_node(scene.registry.create('filter')) slider.setup(node.model._view._properties['cutoff'].view_item) qtbot.addWidget(slider) return slider class TestRunSlider: def test_setup(self, qtbot, runslider): assert not runslider.setup(runslider.view_item) bottom = runslider.view_item.widget.validator().bottom() top = runslider.view_item.widget.validator().top() assert runslider.type == float assert runslider.real_minimum == bottom assert runslider.real_maximum == top assert float(runslider.min_edit.text()) == bottom assert float(runslider.max_edit.text()) == top assert float(runslider.current_edit.text()) == runslider.view_item.get() assert runslider.slider.value() / 100 + runslider.real_minimum == runslider.view_item.get() assert runslider.isEnabled() def test_reset(self, qtbot, runslider): runslider.reset() assert runslider.view_item is None assert runslider.type is None assert runslider.real_minimum == 0 assert runslider.real_maximum == 100 assert runslider.real_span == 100 assert runslider.min_edit.text() == '' assert runslider.max_edit.text() == '' assert runslider.current_edit.text() == '' assert not runslider.isEnabled() def test_empty(self, qtbot, runslider): runslider.reset() runslider.on_min_edit_editing_finished() runslider.on_max_edit_editing_finished() runslider.on_current_edit_editing_finished() def test_min_edit_changed(self, qtbot, runslider): top = runslider.view_item.widget.validator().top() with pytest.raises(RunSliderError): runslider.min_edit.setText('asdf') runslider.on_min_edit_editing_finished() with pytest.raises(RunSliderError): runslider.min_edit.setText(str(top + 1)) runslider.on_min_edit_editing_finished() # Current value lower than new minimum, must be updated value = runslider.get_real_value() + 0.1 runslider.min_edit.setText(str(value)) runslider.on_min_edit_editing_finished() assert value == runslider.get_real_value() def test_max_edit_changed(self, qtbot, runslider): bottom = runslider.view_item.widget.validator().bottom() with pytest.raises(RunSliderError): runslider.max_edit.setText('asdf') runslider.on_max_edit_editing_finished() with pytest.raises(RunSliderError): runslider.max_edit.setText(str(bottom - 1)) runslider.on_max_edit_editing_finished() # Current value greater than new maximum, must be updated value = runslider.get_real_value() - 0.1 runslider.max_edit.setText(str(value)) runslider.on_max_edit_editing_finished() assert value == runslider.get_real_value() def test_current_edit_changed(self, qtbot, runslider): self.value_changed_value = None def on_value_changed(value): self.value_changed_value = value # Nothing changed, no update triggered runslider.on_current_edit_editing_finished() assert self.value_changed_value is None runslider.value_changed.connect(on_value_changed) current = runslider.get_real_value() + 0.1 runslider.current_edit.setText(str(current)) runslider.on_current_edit_editing_finished() assert runslider.get_real_value() == current runslider.current_edit.setText('asf') with pytest.raises(RunSliderError): runslider.on_current_edit_editing_finished() def test_int(self, qtbot, runslider, scene): node = scene.create_node(scene.registry.create('read')) runslider.setup(node.model._view._properties['y'].view_item) assert runslider.type == int runslider.min_edit.setText('1') runslider.on_min_edit_editing_finished() runslider.max_edit.setText('10') runslider.on_max_edit_editing_finished() runslider.slider.setValue(50) assert type(runslider.get_real_value()) == int assert runslider.get_real_value() == 5 runslider.current_edit.setText('7') runslider.on_current_edit_editing_finished() assert type(runslider.get_real_value()) == int assert runslider.get_real_value() == 7 # Maximum smaller than current -> update current runslider.max_edit.setText('5') runslider.on_max_edit_editing_finished() assert type(runslider.get_real_value()) == int assert runslider.get_real_value() == 5 # Minimum greater than current -> update current runslider.max_edit.setText('10') runslider.on_max_edit_editing_finished() runslider.min_edit.setText('8') runslider.on_min_edit_editing_finished() assert type(runslider.get_real_value()) == int assert runslider.get_real_value() == 8 def test_range(self, qtbot, scene): runslider = RunSlider() qtbot.addWidget(runslider) node = scene.create_node(scene.registry.create('general_backproject')) node.model['center-position-x'] = [1, 2, 3] assert not runslider.setup(node.model._view._properties['center-position-x'].view_item) assert runslider.view_item is None node.model['center-position-x'] = [1] assert runslider.setup(node.model._view._properties['center-position-x'].view_item) assert runslider.view_item == node.model._view._properties['center-position-x'].view_item assert type(runslider.get_real_value()) == float assert runslider.get_real_value() == 1 runslider.current_edit.setText('1.1') runslider.on_current_edit_editing_finished() assert node.model['center-position-x'] == [runslider.get_real_value()] def test_links(self, qtbot, link_model, nodes): runslider = RunSlider() qtbot.addWidget(runslider) read = nodes['read'] read_2 = nodes['read_2'] runslider.setup(read.model._view._properties['number'].view_item) link_model.add_item(read, read.model, 'number', -1, -1) link_model.add_item(read_2, read_2.model, 'number', 0, -1) runslider.current_edit.setText('123') runslider.on_current_edit_editing_finished() assert read_2.model['number'] == 123 ufo-kit-tofu-ed0e5bd/tofu/tests/test_flow_scene.py000066400000000000000000000420371521054151500224760ustar00rootroot00000000000000import pytest from PyQt5.QtCore import QModelIndex from PyQt5.QtWidgets import QInputDialog from qtpynodeeditor import FlowView from tofu.flow.models import BaseCompositeModel, UfoModelError, UfoReadModel from tofu.flow.util import FlowError, MODEL_ROLE, NODE_ROLE, PROPERTY_ROLE from tofu.tests.flow_util import add_nodes_to_scene class TestScene: def test_create_node(self, qtbot, scene): def check_node(node, gt_caption): # Node must be in the scene assert node in scene.nodes.values() # Caption must be unique assert node.model.caption == gt_caption # Node must be in the nodes model item = scene.node_model.findItems(node.model.caption)[0] assert item.data(role=MODEL_ROLE) == node.model nodes = add_nodes_to_scene(scene, model_names=['read', 'read']) for (node, gt_caption) in zip(nodes, ['Read', 'Read 2']): check_node(node, gt_caption) # Property links must be set up by composites def check_link(model, prop_name): assert scene.property_links_model.find_items((model, prop_name), (MODEL_ROLE, PROPERTY_ROLE)) scene.clear_scene() node = add_nodes_to_scene(scene, model_names=['CFlatFieldCorrect'])[0] for link in node.model._links: model_name, prop_name = link[0] other_name, other_prop_name = link[1] model = node.model[model_name] other = node.model[other_name] model[prop_name] = 0 qtbot.addWidget(model.embedded_widget()) qtbot.addWidget(other.embedded_widget()) qtbot.keyClick(model._view._properties[prop_name].view_item.widget, '1') # Other model's property has to be updated if the property links have been set up # correctly assert node.model[other_name][other_prop_name] == node.model[model_name][prop_name] def test_setstate(self, qtbot, scene): # Make sure there are some links by adding FFC nodes = add_nodes_to_scene(scene, model_names=['CFlatFieldCorrect', 'average']) # Create a connection scene.create_connection(nodes[0]['output'][0], nodes[1]['input'][0]) state = scene.__getstate__() scene.clear_scene() scene.__setstate__(state) assert scene.__getstate__() == state def test_getstate(self, qtbot, scene): # Make sure there are some links by adding FFC nodes = add_nodes_to_scene(scene, model_names=['CFlatFieldCorrect', 'average']) # Create a connection scene.create_connection(nodes[0]['output'][0], nodes[1]['input'][0]) state = scene.__getstate__() # Nodes ids = [record['id'] for record in state['nodes']] assert nodes[0].id in ids assert nodes[1].id in ids # Connections assert len(state['connections']) == 1 conn = state['connections'][0] assert conn['in_id'] == nodes[1].id assert conn['out_id'] == nodes[0].id # Property links assert state['property-links'] == scene.property_links_model.save() def test_restore_node(self, qtbot, monkeypatch, scene): add_nodes_to_scene(scene) old_node = list(scene.nodes.values())[0] state = old_node.__getstate__() scene.remove_node(old_node) new_node = scene.restore_node(state) # Don't test the nodes themselves because the models won't match assert old_node.id == new_node.id # num-inputs monkeypatch.setattr(QInputDialog, 'getInt', lambda *args, **kwargs: (2, True)) node = add_nodes_to_scene(scene, model_names=['retrieve_phase'])[0] state = node.__getstate__() scene.remove_node(node) new_node = scene.restore_node(state) assert new_node.model.num_ports['input'] == 2 def test_remove_node(self, monkeypatch, qtbot, scene, nodes): def cleanup(): self.cleanup_called = True node = add_nodes_to_scene(scene)[0] self.cleanup_called = False node.model.cleanup = cleanup scene.property_links_model.add_item(node, node.model, node.model.properties[0], 0, 0, QModelIndex()) scene.remove_node(list(scene.nodes.values())[0]) # Scene, node model and property links model must be empty assert len(scene.nodes) == 0 assert scene.node_model.rowCount() == 0 assert scene.property_links_model.rowCount() == 0 assert self.cleanup_called # Composite removal monkeypatch.setattr(QInputDialog, "getText", lambda *args: ('cpm', True)) nodes = add_nodes_to_scene(scene, model_names=['pad', 'crop']) for node in nodes: node.graphics_object.setSelected(True) node = scene.create_composite() state = node.__getstate__() scene.remove_node(node) # _composite_nodes must be updated assert scene._composite_nodes == {} # Simulate non-interactive composite creation, i.e. not combining existing nodes into a # composite node. When removing such node, _composite_nodes must not raise a KeyError node = scene.restore_node(state) scene.remove_node(node) def test_is_selected_one_composite(self, qtbot, scene, monkeypatch): # Circumvent the input dialog monkeypatch.setattr(QInputDialog, "getText", lambda *args: ('cpm', True)) nodes = add_nodes_to_scene(scene, model_names=['read', 'read']) for node in nodes: node.graphics_object.setSelected(True) # Simple nodes assert not scene.is_selected_one_composite() node = scene.create_composite() # Composite assert scene.is_selected_one_composite() node.graphics_object.setSelected(False) # Nothing selected assert not scene.is_selected_one_composite() # Composite and other selected add_nodes_to_scene(scene, ['null']) for node in scene.nodes.values(): node.graphics_object.setSelected(True) assert not scene.is_selected_one_composite() def test_skip_nodes(self, qtbot, scene): nodes = add_nodes_to_scene(scene, model_names=['read', 'pad', 'crop', 'null']) read, pad, crop, null = nodes scene.create_connection(read['output'][0], pad['input'][0]) scene.create_connection(pad['output'][0], crop['input'][0]) scene.create_connection(crop['output'][0], null['input'][0]) read.graphics_object.setSelected(True) # Only fully connected nodes can be disabled with pytest.raises(FlowError): scene.skip_nodes() read.graphics_object.setSelected(False) null.graphics_object.setSelected(True) with pytest.raises(FlowError): scene.skip_nodes() null.graphics_object.setSelected(False) pad.graphics_object.setSelected(True) scene.skip_nodes() assert pad.model.skip scene.skip_nodes() assert not pad.model.skip # Deprecation warning coming from imageio @pytest.mark.filterwarnings('ignore::DeprecationWarning') def test_auto_fill(self, qtbot, scene): add_nodes_to_scene(scene) with pytest.raises(UfoModelError): scene.auto_fill() def test_copy_node(self, qtbot, scene): nodes = add_nodes_to_scene(scene, model_names=['read', 'null']) scene.create_connection(nodes[0]['output'][0], nodes[1]['input'][0]) for node in nodes: node.graphics_object.setSelected(True) scene.copy_nodes() assert len(scene.nodes) == 4 # Choose the newly created connections if scene.connections[0].valid_ports['input'].node in nodes: ports = scene.connections[1].valid_ports else: ports = scene.connections[0].valid_ports # The fact that the connections are there means the nodes are there as well, so we don't # need to test that assert ports['input'].node.model.name == 'null' assert ports['output'].node.model.name == 'read' def test_create_composite(self, monkeypatch, qtbot, scene): monkeypatch.setattr(QInputDialog, "getText", lambda *args: ('cpm', True)) plm = scene.property_links_model nodes = add_nodes_to_scene(scene, model_names=['read', 'read']) plm.add_item(nodes[0], nodes[0].model, nodes[0].model.properties[0], -1, -1, QModelIndex()) for (i, node) in enumerate(nodes): node.graphics_object.setSelected(True) node = scene.create_composite() assert node.model._links == [[[nodes[0].model.caption, nodes[0].model.properties[0]]]] with pytest.raises(FlowError): # Can't create a composite with the same name scene.create_composite() assert len(scene.nodes) == 1 assert list(scene.nodes.values())[0] == node assert isinstance(node.model, BaseCompositeModel) assert nodes[0] not in scene.nodes.values() assert nodes[1] not in scene.nodes.values() # Property links model assert plm.item(0, 0).data(role=NODE_ROLE) == node # Simulate non-interactive composite creation, i.e. not combining existing nodes into a # composite node. In this case it can't be possible to create a new composite node with the # same name as has already been registered. state = node.__getstate__() scene.remove_node(node) node = scene.restore_node(state) node.graphics_object.setSelected(True) with pytest.raises(FlowError): scene.create_composite() # Add outer composite with a composite and another simple model inside and set the property # links between the inner composite and inner simple. They must be present in the newly # craeted outer composite. average = add_nodes_to_scene(scene, model_names=['average'])[0] average.graphics_object.setSelected(True) monkeypatch.setattr(QInputDialog, "getText", lambda *args: ('outer', True)) plm.add_item(node, node.model['Read'], 'number', 0, 0) plm.add_item(node, node.model['Read 2'], 'number', 0, 1) plm.add_item(average, average.model, 'number', 0, 2) outer = scene.create_composite() assert len(outer.model._links) == 1 row = outer.model._links[0] assert [node.model.caption, node.model['Read'].caption, 'number'] in row assert [node.model.caption, node.model['Read 2'].caption, 'number'] in row assert [average.model.caption, 'number'] in row assert [node.model.caption, node.model['Read'].caption, 'height'] not in row def test_on_node_double_clicked(self, qtbot, scene, monkeypatch): def double_clicked(*args): self.did_click = True self.did_click = False monkeypatch.setattr(UfoReadModel, "double_clicked", double_clicked) node = add_nodes_to_scene(scene)[0] # We need a view for double clicks _ = FlowView(scene) scene.on_node_double_clicked(node) assert self.did_click def test_expand_composite(self, qtbot, scene, monkeypatch): monkeypatch.setattr(QInputDialog, "getText", lambda *args: ('cpm', True)) plm = scene.property_links_model nodes = add_nodes_to_scene(scene, model_names=['read', 'null']) name_to_caption = {'read': 'Read', 'null': 'Null'} for node in nodes: node.graphics_object.setSelected(True) node = scene.create_composite() path = node.model.get_leaf_paths()[0] plm.add_item(node, path[-1], path[-1].properties[0], -1, -1, QModelIndex()) scene.expand_composite(node) assert plm.item(0, 0).data(role=MODEL_ROLE).name == path[-1].name assert plm.item(0, 0).data(role=NODE_ROLE) in [node for node in scene.selected_nodes()] # Captions are the same for node in scene.nodes.values(): assert node.model.caption == name_to_caption[node.model.name] # New caption if there is a node with the original one # Selection stays, just re-use the expanded nodes monkeypatch.setattr(QInputDialog, "getText", lambda *args: ('cpm_2', True)) node = scene.create_composite() other_read_node = add_nodes_to_scene(scene, model_names=['read'])[0] scene.expand_composite(node) for node in scene.nodes.values(): if node.model.name == 'read': if node == other_read_node: assert node.model.caption == 'Read' else: assert node.model.caption == 'Read 2' def test_is_fully_connected(self, qtbot, scene): nodes = add_nodes_to_scene(scene, model_names=['read', 'pad', 'crop', 'null']) read, pad, crop, null = nodes scene.create_connection(read['output'][0], pad['input'][0]) scene.create_connection(pad['output'][0], crop['input'][0]) scene.create_connection(crop['output'][0], null['input'][0]) assert scene.is_fully_connected() scene.remove_node(read) assert not scene.is_fully_connected() def test_are_all_ufo_tasks(self, qtbot, scene): add_nodes_to_scene(scene, model_names=['read', 'pad', 'crop', 'null']) assert scene.are_all_ufo_tasks() scene.create_node(scene.registry.create('memory_out')) assert not scene.are_all_ufo_tasks() def test_get_simple_node_graphs(self, qtbot, scene, monkeypatch): def connect(read, pad, crop, null): scene.create_connection(read['output'][0], pad['input'][0]) scene.create_connection(pad['output'][0], crop['input'][0]) scene.create_connection(crop['output'][0], null['input'][0]) monkeypatch.setattr(QInputDialog, "getText", lambda *args: ('cpm', True)) nodes = add_nodes_to_scene(scene, model_names=2 * ['read', 'pad', 'crop', 'null']) read, pad, crop, null = nodes[:4] read_2, pad_2, crop_2, null_2 = nodes[4:] connect(read, pad, crop, null) connect(read_2, pad_2, crop_2, null_2) connections = [('Read', 'Pad'), ('Pad', 'Crop'), ('Crop', 'Null'), ('Read 2', 'Pad 2'), ('Pad 2', 'Crop 2'), ('Crop 2', 'Null 2')] graphs = scene.get_simple_node_graphs() assert len(graphs) == 2 num_visited = 0 for graph in graphs: for (src, dst, index) in graph.edges: assert (src.caption, dst.caption) in connections num_visited += 1 assert num_visited == len(connections) # Create first composite for node in nodes: if node.model.name in ['pad', 'crop']: node.graphics_object.setSelected(True) scene.create_composite() # Create a second composite which will cause the scene to have multiple edges between two # nodes (the first composite's outputs and second's inputs) scene.clearSelection() monkeypatch.setattr(QInputDialog, "getText", lambda *args: ('cpm_2', True)) null.graphics_object.setSelected(True) null_2.graphics_object.setSelected(True) scene.create_composite() # Composite must not affect simple graphs, especially the multiple edges cannot be present # anymore graphs = scene.get_simple_node_graphs() assert len(graphs) == 2 num_visited = 0 for graph in graphs: for (src, dst, index) in graph.edges: assert (src.caption, dst.caption) in connections num_visited += 1 assert num_visited == len(connections) add_nodes_to_scene(scene) assert len(scene.get_simple_node_graphs()) == 3 # Test disabling nodes scene.clear_scene() nodes = add_nodes_to_scene(scene, model_names=['read', 'pad', 'crop', 'null']) read, pad, crop, null = nodes connect(read, pad, crop, null) # Disable padding, the generated flow must be read -> crop -> null pad.graphics_object.setSelected(True) scene.skip_nodes() graph = scene.get_simple_node_graphs()[0] assert len(graph.edges) == 2 edges = list(graph.edges) src, dst = edges[0][:-1] assert dst == crop.model src, dst = edges[1][:-1] assert src == crop.model assert dst == null.model def test_set_enabled(self, qtbot, scene): def check(enabled): assert scene.allow_node_creation == enabled assert scene.allow_node_deletion == enabled for node in scene.nodes.values(): assert node._graphics_obj.isEnabled() == enabled for conn in scene.connections: assert conn._graphics_object.isEnabled() == enabled nodes = add_nodes_to_scene(scene, model_names=['CFlatFieldCorrect', 'average']) nodes[0].graphics_object.setSelected(True) # Create a connection scene.create_connection(nodes[0]['output'][0], nodes[1]['input'][0]) scene.set_enabled(False) check(False) scene.set_enabled(True) check(True) assert nodes[0].graphics_object.isSelected() ufo-kit-tofu-ed0e5bd/tofu/tests/test_flow_util.py000066400000000000000000000036671521054151500223640ustar00rootroot00000000000000import pytest from PyQt5.QtWidgets import QInputDialog from tofu.flow.util import CompositeConnection, get_config_key, saved_kwargs from tofu.flow.main import get_filled_registry def test_get_config_key(): # Existing key assert 'z' in get_config_key('models', 'general-backproject', 'hidden-properties') # Non-existent key assert get_config_key('foobarbaz') is None assert get_config_key('foobarbaz', default=1) == 1 def test_saved_kwargs(qtbot, monkeypatch, scene): registry = get_filled_registry() name = 'retrieve_phase' # No num-inputs info monkeypatch.setattr(QInputDialog, 'getInt', lambda *args, **kwargs: (2, True)) state = {'name': name} model = registry.create(name) assert model.num_ports['input'] == 2 # num-inputs specified state = {'name': name, 'num-inputs': 3} with saved_kwargs(registry, state): model = registry.create(name) assert model.num_ports['input'] == 3 assert 'num_inputs' not in registry.registered_model_creators()[state['name']][1] class TestCompositeConnection: def test_init(self): # Identical source and tartet -> exception with pytest.raises(ValueError): CompositeConnection('a', 0, 'a', 0) # OK, must pass CompositeConnection('a', 0, 'b', 0) def test_contains(self): conn = CompositeConnection('a', 0, 'b', 0) assert conn.contains('a', 'output', 0) assert not conn.contains('a', 'output', 1) assert not conn.contains('a', 'input', 0) assert not conn.contains('a', 'input', 1) assert conn.contains('b', 'input', 0) assert not conn.contains('b', 'input', 1) assert not conn.contains('b', 'output', 0) assert not conn.contains('b', 'output', 1) assert not conn.contains('foo', 'input', 14) def test_save(self): conn = CompositeConnection('a', 0, 'b', 0) assert conn.save() == ['a', 0, 'b', 0] ufo-kit-tofu-ed0e5bd/tofu/tests/test_flow_viewer.py000066400000000000000000000272341521054151500227040ustar00rootroot00000000000000import pytest import numpy as np from PyQt5.QtGui import QValidator from tofu.flow.viewer import ImageLabel, ImageViewingError, ScreenImage, ImageViewer @pytest.fixture(scope='function') def screen_image(): image = np.arange(256, dtype=np.float32).reshape(16, 16) return ScreenImage(image=image) @pytest.fixture(scope='function') def viewer(qtbot): viewer = ImageViewer() viewer.images = np.ones((10, 16, 16)) viewer.popup() qtbot.addWidget(viewer._pg_window) return viewer class TestScreenImage: def test_image_setter(self): screen_image = ScreenImage() assert screen_image.image is None screen_image.image = np.random.normal(size=(8, 8)) assert screen_image.minimum is not None assert screen_image.maximum is not None assert screen_image.black_point is not None assert screen_image.white_point is not None def test_black_point_setter(self, screen_image): screen_image.black_point = 100 assert screen_image.black_point == 100 screen_image.white_point = 150 # Black point cannot be greater than white point with pytest.raises(ImageViewingError): screen_image.black_point = 200 def test_white_point_setter(self, screen_image): screen_image.white_point = 100 assert screen_image.white_point == 100 screen_image.black_point = 50 # White point cannot be smaller than black point with pytest.raises(ImageViewingError): screen_image.white_point = 0 def test_reset(self, screen_image): screen_image.reset() # We can test with ==, the data types are the same so the extrema must be exactly the same assert screen_image.minimum == 0 assert screen_image.maximum == 255 assert screen_image.black_point == 0 assert screen_image.white_point == 255 # Going out of the original gray value range must not cause exception on reset screen_image.black_point = -100 screen_image.white_point = -50 screen_image.reset() def test_auto_levels(self, screen_image): screen_image.auto_levels() # nonsense values must pass as well screen_image.auto_levels(percentile=200.0) screen_image.auto_levels(percentile=-200.0) def test_set_black_point_normalized(self, screen_image): screen_image.set_black_point_normalized(100) assert screen_image.black_point == 100 screen_image.set_white_point_normalized(150) # Black point cannot be greater than white point with pytest.raises(ImageViewingError): screen_image.set_black_point_normalized(200) def test_set_white_point_normalized(self, screen_image): screen_image.set_white_point_normalized(100) assert screen_image.white_point == 100 screen_image.set_black_point_normalized(50) # White point cannot be smaller than black point with pytest.raises(ImageViewingError): screen_image.set_white_point_normalized(0) def test_convert_normalized_value_to_native(self, screen_image): assert screen_image.convert_normalized_value_to_native(128) == 128. with pytest.raises(ImageViewingError): screen_image.convert_normalized_value_to_native(-500) with pytest.raises(ImageViewingError): screen_image.convert_normalized_value_to_native(500) def test_convert_native_value_to_normalized(self, screen_image): assert screen_image.convert_native_value_to_normalized(128) == 128. with pytest.raises(ImageViewingError): screen_image.convert_native_value_to_normalized(-500) with pytest.raises(ImageViewingError): screen_image.convert_native_value_to_normalized(500) # One gray value must not cause division by zero erro screen_image.image = np.ones((4, 4)) screen_image.reset() screen_image.convert_native_value_to_normalized(1) def test_get_pixmap(self, qtbot, screen_image): # Empty image must raise an exception with pytest.raises(ImageViewingError): ScreenImage().get_pixmap() # Downsampling pixmap = screen_image.get_pixmap() assert (pixmap.height(), pixmap.width()) == screen_image.image.shape pixmap = screen_image.get_pixmap(downsampling=2) assert (pixmap.height(), pixmap.width()) == tuple(dim // 2 for dim in screen_image.image.shape) # One gray value must not cause division by zero erro screen_image.image = np.ones((4, 4)) screen_image.reset() screen_image.get_pixmap() class TestImageLabel: def test_updateImage(self, qtbot, screen_image): label = ImageLabel() # Empty image must pass label.updateImage() label.screen_image = screen_image label.updateImage() assert label.pixmap() is not None def test_resizeEvent(self, qtbot, screen_image): label = ImageLabel(screen_image) label.updateImage() old_size = label.pixmap().size() # ensure the label will get the resize event label.show() label.resize(8, 8) new_size = label.pixmap().size() assert new_size != old_size class TestImageViewer: def test_images_setter(self, qtbot): viewer = ImageViewer() viewer.images = np.zeros((16, 16)) assert viewer.images.ndim == 3 assert viewer.slider.isHidden() assert float(viewer.min_slider_edit.text()) == 0 assert float(viewer.max_slider_edit.text()) == 0 viewer.images = np.ones((5, 16, 16)) assert viewer.images.ndim == 3 assert not viewer.slider.isHidden() assert viewer.slider.minimum() == 0 assert viewer.slider.maximum() == viewer.images.shape[0] - 1 assert float(viewer.min_slider_edit.text()) == 1 assert float(viewer.max_slider_edit.text()) == 1 # Test viewer and popup window equality viewer.popup() qtbot.addWidget(viewer._pg_window) np.testing.assert_almost_equal(viewer.images, 1) np.testing.assert_almost_equal(viewer._pg_window.image, 1) # 3D viewer.images = np.ones((5, 16, 16)) * 5 np.testing.assert_almost_equal(viewer.images, 5) np.testing.assert_almost_equal(viewer._pg_window.image, 5) # 2D viewer.images = np.ones((16, 16)) * 3 np.testing.assert_almost_equal(viewer.images, 3) np.testing.assert_almost_equal(viewer._pg_window.image, 3) # validators viewer.images = 10 + np.arange(200 * 8 ** 2).reshape(200, 8, 8) validator = viewer.slider_edit.validator() assert validator.validate('199', 0)[0] == QValidator.Acceptable assert validator.validate('2000', 0)[0] == QValidator.Invalid assert viewer.min_slider_edit.validator().bottom() == viewer.images[0].min() assert viewer.min_slider_edit.validator().top() == viewer.images[0].max() viewer._pg_window.close() def test_append(self, qtbot): viewer = ImageViewer() # Append to empty viewer.append(np.zeros((4, 4))) assert viewer.images.ndim == 3 assert viewer.images.shape == (1, 4, 4) # Append 2D viewer.append(np.zeros((4, 4))) assert viewer.images.shape == (2, 4, 4) # Append 3D viewer.append(np.zeros((3, 4, 4))) assert viewer.images.shape == (5, 4, 4) # Append wrong shape with pytest.raises(ImageViewingError): viewer.append(np.zeros((3, 2, 2))) def test_set_enabled_adjustments(self, qtbot): viewer = ImageViewer() def assert_all(value): viewer.set_enabled_adjustments(value) assert viewer.slider.isEnabled() == value assert viewer.slider_edit.isEnabled() == value assert viewer.min_slider.isEnabled() == value assert viewer.min_slider_edit.isEnabled() == value assert viewer.max_slider.isEnabled() == value assert viewer.max_slider_edit.isEnabled() == value assert_all(True) assert_all(False) def test_reset_clim(self, viewer): image = np.arange(16 ** 2).reshape(16, 16) viewer.images = image viewer.append(image * 2) viewer.slider.setValue(1) viewer.reset_clim(auto=False) si = viewer.screen_image min_converted = si.convert_native_value_to_normalized(si.black_point) max_converted = si.convert_native_value_to_normalized(si.white_point) assert viewer.screen_image.maximum == pytest.approx(510) assert viewer.min_slider.value() == pytest.approx(min_converted) assert viewer.max_slider.value() == pytest.approx(max_converted) assert float(viewer.min_slider_edit.text()) == pytest.approx(si.black_point) assert float(viewer.max_slider_edit.text()) == pytest.approx(si.white_point) # Pop up window must be updated assert viewer._pg_window.getLevels() == pytest.approx((si.black_point, si.white_point)) viewer._pg_window.close() def test_on_slider_value_changed(self, viewer): viewer.slider.setValue(5) assert viewer._pg_window.currentIndex == 5 assert viewer.slider_edit.text() == '5' viewer._pg_window.close() def test_on_slider_edit_return_pressed(self, viewer): viewer.slider_edit.setText('5') viewer.slider_edit.returnPressed.emit() assert viewer.slider.value() == 5 assert viewer._pg_window.currentIndex == 5 viewer._pg_window.close() def test_on_min_slider_edit_return_pressed(self, viewer): viewer.images = np.arange(256).reshape(16, 16) viewer.min_slider_edit.setText('100') viewer.min_slider_edit.returnPressed.emit() assert viewer.screen_image.black_point == pytest.approx(100) assert viewer.min_slider.value() == pytest.approx(100) assert viewer._pg_window.getLevels()[0] == pytest.approx(100) viewer._pg_window.close() def test_on_max_slider_edit_return_pressed(self, viewer): viewer.images = np.arange(256).reshape(16, 16) viewer.max_slider_edit.setText('100') viewer.max_slider_edit.returnPressed.emit() assert viewer.screen_image.white_point == pytest.approx(100) assert viewer.max_slider.value() == pytest.approx(100) assert viewer._pg_window.getLevels()[1] == pytest.approx(100) viewer._pg_window.close() def test_on_min_slider_value_changed(self, viewer): viewer.images = np.arange(256).reshape(16, 16) viewer.min_slider.valueChanged.emit(100) assert viewer.screen_image.black_point == pytest.approx(100) assert float(viewer.min_slider_edit.text()) == pytest.approx(100) assert viewer._pg_window.getLevels()[0] == pytest.approx(100) viewer._pg_window.close() def test_on_max_slider_value_changed(self, viewer): viewer.images = np.arange(256).reshape(16, 16) viewer.max_slider.valueChanged.emit(100) assert viewer.screen_image.white_point == pytest.approx(100) assert float(viewer.max_slider_edit.text()) == pytest.approx(100) assert viewer._pg_window.getLevels()[1] == pytest.approx(100) viewer._pg_window.close() def test_popup(self, qtbot, viewer): # Close and another popup call must show the widget viewer._pg_window.close() viewer.popup() assert viewer._pg_window.isVisible() # 2D must work other = ImageViewer() other.images = np.ones((4, 4)) other.popup() qtbot.addWidget(other._pg_window) assert other._pg_window is not None viewer._pg_window.close() other._pg_window.close() ufo-kit-tofu-ed0e5bd/tofu/util.py000066400000000000000000000407221521054151500171250ustar00rootroot00000000000000"""Various utility functions.""" import argparse import gi import glob import logging import math import os from collections import OrderedDict try: gi.require_version('Ufo', '0.0') from gi.repository import Ufo except ModuleNotFoundError as e: print(str(e)) except ValueError as e: try: gi.require_version('Ufo', '1.0') from gi.repository import Ufo except ValueError as e: print(str(e)) LOG = logging.getLogger(__name__) RESOURCES = None def range_list(value): """ Split *value* separated by ':' into int triple, filling missing values with 1s. """ def check(region): if region[0] >= region[1]: raise argparse.ArgumentTypeError("{} must be less than {}".format(region[0], region[1])) lst = [int(x) for x in value.split(':')] if len(lst) == 1: frm = lst[0] return (frm, frm + 1, 1) if len(lst) == 2: check(lst) return (lst[0], lst[1], 1) if len(lst) == 3: check(lst) return (lst[0], lst[1], lst[2]) raise argparse.ArgumentTypeError("Cannot parse {}".format(value)) def make_subargs(args, subargs): """Return an argparse.Namespace consisting of arguments from *args* which are listed in the *subargs* list.""" namespace = argparse.Namespace() for subarg in subargs: setattr(namespace, subarg, getattr(args, subarg)) return namespace def set_node_props(node, args): """Set up *node*'s properties to *args* which is a dictionary of values.""" for name in dir(node.props): if not name.startswith('_') and hasattr(args, name): value = getattr(args, name) if value is not None: LOG.debug("Setting {}:{} to {}".format(node.get_plugin_name(), name, value)) node.set_property(name, getattr(args, name)) def get_filenames(path): """ Get all filenams from *path*, which could be a directory or a pattern for matching files in a directory. """ if not path: return [] return sorted(glob.glob(os.path.join(path, '*') if os.path.isdir(path) else path)) def setup_read_task(task, path, args): """Set up *task* and take care of handling file types correctly.""" task.props.path = path fnames = get_filenames(path) if fnames and fnames[0].endswith('.raw'): if not args.width or not args.height: raise RuntimeError("Raw files require --width, --height and --bitdepth arguments.") task.props.raw_width = args.width task.props.raw_height = args.height task.props.raw_bitdepth = args.bitdepth def restrict_value(limits, dtype=float): """Convert value to *dtype* and make sure it is within *limits* (included) specified as tuple (min, max). If one of the tuple values is None it is ignored.""" def check(value=None, clamp=False): if value is None: return limits result = dtype(value) if limits[0] is not None and result < limits[0]: if clamp: result = dtype(limits[0]) else: raise argparse.ArgumentTypeError('Value cannot be less than {}'.format(limits[0])) if limits[1] is not None and result > limits[1]: if clamp: result = dtype(limits[1]) else: raise argparse.ArgumentTypeError('Value cannot be greater than {}'.format(limits[1])) return result check.dtype = dtype check.limits = limits return check def convert_filesize(value): multiplier = 1 conv = OrderedDict((('k', 2 ** 10), ('m', 2 ** 20), ('g', 2 ** 30), ('t', 2 ** 40))) if not value[-1].isdigit(): if value[-1] not in list(conv.keys()): raise argparse.ArgumentTypeError('--output-bytes-per-file must either be a ' + 'number or end with {} '.format(list(conv.keys())) + 'to indicate kilo, mega, giga or terabytes') multiplier = conv[value[-1]] value = value[:-1] value = int(float(value) * multiplier) if value < 0: raise argparse.ArgumentTypeError('--output-bytes-per-file cannot be less than zero') return value def tupleize(num_items=None, conv=float, dtype=tuple): """Convert comma-separated string values to a *num-items*-tuple of values converted with *conv*. """ def split_values(value=None): """Convert comma-separated string *value* to a tuple of numbers.""" if not value: # empty value or string return dtype([]) if type(value) is float or type(value) is int: return dtype([value]) try: result = dtype([conv(x) for x in value.split(',')]) except: raise argparse.ArgumentTypeError('Expect comma-separated tuple') if num_items and len(result) != num_items: raise argparse.ArgumentTypeError('Expected {} items'.format(num_items)) return result split_values.dtype = conv return split_values def next_power_of_two(number): """Compute the next power of two of the *number*.""" return 2 ** int(math.ceil(math.log(number, 2))) def read_image(filename, allow_multi=False): """Read image from file *filename*. In case of tif files, *filename* can be a regular expression matching more files. If *allow_multi* is True and there are more images in the *filename*, return them all, not only the first one. """ if os.path.isdir(filename): format_check = glob.glob(os.path.join(filename, "*"))[0] else: format_check = filename if format_check.lower().endswith('.tif') or format_check.lower().endswith('.tiff'): reader = TiffSequenceReader(filename) images = [reader.read(i) for i in range(reader.num_images)] return images if allow_multi else images[0] elif '.edf' in format_check.lower(): import fabio edf = fabio.edfimage.edfimage() edf.read(filename) return edf.data else: raise ValueError('Unsupported image format') def write_image(filename, image): import tifffile directory = os.path.dirname(filename) if directory: os.makedirs(directory, exist_ok=True) tifffile.imwrite(filename, image) def get_image_shape(filename): """Determine image shape (numpy order) from file *filename*.""" if filename.lower().endswith('.tif') or filename.lower().endswith('.tiff'): from tifffile import TiffFile with TiffFile(filename) as tif: page = tif.pages[0] shape = (page.imagelength, page.imagewidth) if len(tif.pages) > 1: shape = (len(tif.pages),) + shape else: # fabio doesn't seem to be able to read the shape without reading the data shape = read_image(filename).shape return shape def get_first_filename(path, valid_exts: list[str] = None): """Returns the first valid image filename in *path*. If *valid_exts* is set, only return files with the extension matching *valid_exts*.""" if not path: raise RuntimeError("Path to sinograms or projections not set.") filenames = get_filenames(path) if valid_exts is not None: filenames = [f for f in filenames if os.path.splitext(f)[1] in valid_exts] if not filenames: raise RuntimeError("No files found in `{}'".format(path)) return filenames[0] def determine_shape(args, path=None, store=False, do_raise=False): """Determine input shape from *args* which means either width and height are specified in args or try to read the *path* and determine the shape from it. The default path is args.projections, which is the typical place to find the input. If *store* is True, assign the determined values if they aren't already present in *args*. Return a tuple (width, height). If *do_raise* is True, raise an exception if shape cannot be determined. """ width = args.width height = args.height if not (width and height): filename = get_first_filename(path or args.projections) try: shape = get_image_shape(filename) # Now set the width and height if not specified width = width or shape[-1] height = height or shape[-2] except Exception as exc: LOG.info("Couldn't determine image dimensions from '{}'".format(filename)) if do_raise: raise exc if store: if not args.width: args.width = width if not args.height: args.height = height - args.y return (width, height) def get_filtering_padding(width): """Get the number of horizontal padded pixels in order to avoid convolution artifacts.""" return next_power_of_two(2 * width) - width def setup_padding(pad, width, height, mode, crop=None, pad_width=None, pad_height=0, centered=True): if pad_width is not None and pad_width < 0: raise ValueError("pad_width must be >= 0") if pad_height < 0: raise ValueError("pad_height must be >= 0") if pad_width is None: # Default is horizontal padding only pad_width = get_filtering_padding(width) pad.props.width = width + pad_width pad.props.height = height + pad_height pad.props.x = pad_width // 2 if centered else 0 pad.props.y = pad_height // 2 if centered else 0 pad.props.addressing_mode = mode LOG.debug( "Padding (x=0, y=0, w=%d, h=%d) -> (x=%d, y=%d, w=%d, h=%d) with mode `%s'", width, height, pad.props.x, pad.props.y, pad.props.width, pad.props.height, mode, ) if crop: # crop to original width after filtering crop.props.width = width crop.props.height = height crop.props.x = pad_width // 2 if centered else 0 crop.props.y = pad_height // 2 if centered else 0 return (pad_width, pad_height) def make_region(n, dtype=int): """Make region in such a way that in case of odd *n* it is centered around 0. Use *dtype* as data type. """ return (-dtype(n / 2), dtype(n / 2 + n % 2), dtype(1)) def get_reconstructed_cube_shape(x_region, y_region, z_region): """Get the shape of the reconstructed cube as (slice width, slice height, num slices).""" import numpy as np z_start, z_stop, z_step = z_region y_start, y_stop, y_step = y_region x_start, x_stop, x_step = x_region num_slices = len(np.arange(z_start, z_stop, z_step)) slice_height = len(np.arange(y_start, y_stop, y_step)) slice_width = len(np.arange(x_start, x_stop, x_step)) return slice_width, slice_height, num_slices def get_reconstruction_regions(params, store=False, dtype=int): """Compute reconstruction regions along all three axes, use *dtype* for as data type for x and y regions, z region is always float. """ width, height = determine_shape(params) if getattr(params, 'transpose_input', False): # In case down the pipeline there is a transpose task tmp = width width = height height = tmp if params.x_region[1] == -1: x_region = make_region(width, dtype=dtype) else: x_region = params.x_region if params.y_region[1] == -1: y_region = make_region(width, dtype=dtype) else: y_region = params.y_region if params.region[1] == -1: region = make_region(height, dtype=float) else: region = params.region LOG.info('X region: {}'.format(x_region)) LOG.info('Y region: {}'.format(y_region)) LOG.info('Parameter region: {}'.format(region)) if store: params.x_region = x_region params.y_region = y_region params.region = region return x_region, y_region, region def get_scarray_value(scarray, index): if len(scarray) == 1: return scarray[0] return scarray[index] def run_scheduler(scheduler, graph): from threading import Thread # Reuse resources until https://github.com/ufo-kit/ufo-core/issues/191 is solved. global RESOURCES if not RESOURCES: RESOURCES = Ufo.Resources() scheduler.set_resources(RESOURCES) thread = Thread(target=scheduler.run, args=(graph,)) thread.setDaemon(True) thread.start() try: thread.join() return True except KeyboardInterrupt: LOG.info('Processing interrupted') scheduler.abort() return False def fbp_filtering_in_phase_retrieval(args): if args.energy is None or args.propagation_distance is None: # No phase retrieval at all return False return ( args.projection_filter != 'none' and ( args.retrieval_method != 'tie' or args.tie_approximate_logarithm ) ) class Vector(object): """A vector based on axis-angle representation.""" def __init__(self, x_angle=0, y_angle=0, z_angle=0, position=None): import numpy as np self.position = np.array(position, dtype=float) if position is not None else None self.x_angle = x_angle self.y_angle = y_angle self.z_angle = z_angle def __repr__(self): return 'Vector(position={}, angles=({}, {}, {}))'.format(self.position, self.x_angle, self.y_angle, self.z_angle) def __str__(self): return repr(self) class FileSequenceReader: """Image sequence reader optimized for reading consecutive images. One multi-page image file is not closed after an image is read so that it does not have to be re-opened for reading the next image. The :func:`.close` function must be called explicitly in order to close the last opened image. """ def __init__(self, file_prefix, ext=''): if os.path.isdir(file_prefix): file_prefix = os.path.join(file_prefix, '*' + ext) self._filenames = sorted(glob.glob(file_prefix)) if not self._filenames: raise SequenceReaderError("No files matching `{}' found".format(file_prefix)) self._lengths = {} self._file = None self._filename = None def __enter__(self): return self def __exit__(self, exc_type, exc_value, traceback): self.close() @property def num_images(self): num = 0 for filename in self._filenames: num += self._get_num_images_in_file(filename) return num def read(self, index): if index < 0: # Enables negative indexing index += self.num_images file_index = 0 while index >= 0: if file_index >= len(self._filenames): raise SequenceReaderError('image index greater than sequence length') index -= self._get_num_images_in_file(self._filenames[file_index]) file_index += 1 file_index -= 1 index += self._lengths[self._filenames[file_index]] self._open(self._filenames[file_index]) return self._read_real(index) def _open(self, filename): if self._filename != filename: if self._filename: self.close() self._file = self._open_real(filename) self._filename = filename def close(self): if self._filename: self._close_real() self._file = None self._filename = None def _get_num_images_in_file(self, filename): if filename not in self._lengths: self._open(filename) self._lengths[filename] = self._get_num_images_in_file_real() return self._lengths[filename] def _open_real(self, filename): """Returns an open file.""" raise NotImplementedError def _close_real(self, filename): raise NotImplementedError def _get_num_images_in_file_real(self): raise NotImplementedError def _read_real(self, index): raise NotImplementedError class TiffSequenceReader(FileSequenceReader): def __init__(self, file_prefix, ext='.tif'): super(TiffSequenceReader, self).__init__(file_prefix, ext=ext) def _open_real(self, filename): import tifffile return tifffile.TiffFile(filename) def _close_real(self): self._file.close() def _get_num_images_in_file_real(self): return len(self._file.pages) def _read_real(self, index): return self._file.pages[index].asarray() class SequenceReaderError(Exception): pass ufo-kit-tofu-ed0e5bd/tofu/vis/000077500000000000000000000000001521054151500163725ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/tofu/vis/__init__.py000066400000000000000000000000001521054151500204710ustar00rootroot00000000000000ufo-kit-tofu-ed0e5bd/tofu/vis/qt.py000066400000000000000000000133721521054151500173760ustar00rootroot00000000000000import pyqtgraph as pg try: import pyqtgraph.opengl as gl except ImportError: pass import logging import numpy as np import tifffile from PyQt5 import QtCore, QtWidgets LOG = logging.getLogger(__name__) def read_tiff(filename): tiff = tifffile.TiffFile(filename) array = tiff.asarray() return array.T def remove_extrema(data): upper = np.percentile(data, 99) lower = np.percentile(data, 1) data[data > upper] = upper data[data < lower] = lower return data def create_volume(data): gradient = (data - np.roll(data, 1))**2 cmin = gradient.min() div = gradient.max() - cmin gradient = (gradient - cmin) / div * 255 volume = np.empty(data.shape + (4, ), dtype=np.ubyte) volume[..., 0] = data volume[..., 1] = data volume[..., 2] = data volume[..., 3] = gradient return volume class ImageViewer(QtWidgets.QWidget): """ Present a sequence of files that can be browsed with a slider. To get the currently selected position connect to the *slider* attribute's valueChanged signal. """ def __init__(self, filenames, parent=None): super(ImageViewer, self).__init__(parent) image_view = pg.ImageView() image_view.getView().setAspectLocked(True) self.image_item = image_view.getImageItem() self.slider = QtWidgets.QSlider(QtCore.Qt.Horizontal) self.slider.valueChanged.connect(self.update_image) self.main_layout = QtWidgets.QVBoxLayout(self) self.main_layout.addWidget(image_view) self.main_layout.addWidget(self.slider) self.setLayout(self.main_layout) self.load_files(filenames) def load_files(self, filenames): """Load *filenames* for display.""" self.filenames = filenames self.slider.setRange(0, len(self.filenames) - 1) self.slider.setSliderPosition(0) self.update_image() def update_image(self): """Update the currently display image.""" if self.filenames: pos = self.slider.value() image = read_tiff(self.filenames[pos]) self.image_item.setImage(image) class ImageWindow(object): """ Stand-alone window to display image sequences. """ global_app = None def __init__(self, filenames): self.global_app = QtWidgets.QApplication.instance() or QtWidgets.QApplication([]) self.viewer = ImageViewer(filenames) self.viewer.show() class OverlapViewer(QtWidgets.QWidget): """ Presents two images by subtracting the flipped second from the first. To get the current deviation connect to the *slider* attribute's valueChanged signal. """ def __init__(self, parent=None, remove_extrema=False): super(OverlapViewer, self).__init__() image_view = pg.ImageView() image_view.getView().setAspectLocked(True) self.image_item = image_view.getImageItem() self.slider = QtWidgets.QSlider(QtCore.Qt.Horizontal) self.slider.setRange(0, 0) self.slider.valueChanged.connect(self.update_image) self.main_layout = QtWidgets.QVBoxLayout() self.main_layout.addWidget(image_view) self.main_layout.addWidget(self.slider) self.setLayout(self.main_layout) self.first, self.second = (None, None) self.remove_extrema = remove_extrema self.subtract = True def set_images(self, first, second): """Set *first* and *second* image.""" self.first, self.second = first.T, np.flipud(second.T) if self.remove_extrema: self.first = remove_extrema(self.first) self.second = remove_extrema(self.second) if self.first.shape != self.second.shape: LOG.warn("Shape {} of {} is different to {} of {}". format(self.first.shape, self.first, self.second.shape, self.second)) width = self.first.shape[0] self.slider.setRange(-width / 2, int(1.5 * width)) self.slider.setSliderPosition(self.first.shape[0] / 2) self.update_image() def set_position(self, position): self.slider.setValue(int(position)) self.update_image() def update_image(self): """Update the current subtraction.""" if self.first is None or self.second is None: LOG.warn("No images set yet") else: pos = self.slider.value() moved = np.roll(self.second, self.second.shape[0] // 2 - pos, axis=0) if self.subtract: self.image_item.setImage(moved - self.first) else: self.image_item.setImage(moved + self.first) class VolumeViewer(QtWidgets.QWidget): def __init__(self, step=1, density=1, parent=None): super(VolumeViewer, self).__init__(parent) self.volume_view = gl.GLViewWidget() self.main_layout = QtWidgets.QVBoxLayout() self.main_layout.addWidget(self.volume_view) self.setLayout(self.main_layout) self.step = step self.density = density def load_files(self, filenames): """Load *filenames* for display.""" filenames = filenames[::self.step] num = len(filenames) first = read_tiff(filenames[0])[::self.step, ::self.step] width, height = first.shape data = np.empty((width, height, num), dtype=np.float32) data[:,:,0] = first for i, filename in enumerate(filenames[1:]): data[:, :, i + 1] = read_tiff(filename)[::self.step, ::self.step] volume = create_volume(data) dx, dy, dz, _ = volume.shape volume_item = gl.GLVolumeItem(volume, sliceDensity=self.density) volume_item.translate(-dx / 2, -dy / 2, -dz / 2) volume_item.scale(0.05, 0.05, 0.05, local=False) self.volume_view.addItem(volume_item) ufo-kit-tofu-ed0e5bd/tox.ini000066400000000000000000000000771521054151500161330ustar00rootroot00000000000000[flake8] ignore = E402, E721, E722, W503 max-line-length = 100