dxf2gcode-20240509/0000755000000000000000000000000014617100260012321 5ustar rootrootdxf2gcode-20240509/setup.cfg0000644000000000000000000000004614617100260014142 0ustar rootroot[egg_info] tag_build = tag_date = 0 dxf2gcode-20240509/PKG-INFO0000644000000000000000000000066614617100260013426 0ustar rootrootMetadata-Version: 2.1 Name: dxf2gcode Version: 20240509 Summary: 2D drawings to CNC machine compatible G-Code converter.. Home-page: https://sourceforge.net/p/dxf2gcode/wiki/Home/ Author: Christian Kohloeffel Author-email: christian.kohloeffel@googlemail.com License: GPLv3 License-File: COPYING DXF2GCODE is a tool for converting 2D (dxf, pdf, ps) drawings to CNC machine compatible GCode. Release Candidate based on development branch dxf2gcode-20240509/st-setup.py0000755000000000000000000000601214617100040014455 0ustar rootroot#!/usr/bin/env python3 ############################################################################ # # Copyright (C) 2017 # Damian Wrobel # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ import distutils.command.install_scripts import glob import platform import shutil from setuptools import setup class install_scripts(distutils.command.install_scripts.install_scripts): def run(self): distutils.command.install_scripts.install_scripts.run(self) for script in self.get_outputs(): if script.endswith(".py"): shutil.move(script, script[:-3]) setup_requires = [] if platform.system() == 'Darwin': setup_requires.append('py2app') setup( name='dxf2gcode', version='20240509', description='2D drawings to CNC machine compatible G-Code converter..', long_description=('DXF2GCODE is a tool for converting 2D (dxf, pdf, ps)' ' drawings to CNC machine compatible GCode.' ' Release Candidate based on development branch'), url='https://sourceforge.net/p/dxf2gcode/wiki/Home/', author='Christian Kohloeffel', author_email='christian.kohloeffel@googlemail.com', license='GPLv3', packages=[ 'dxf2gcode', 'dxf2gcode.core', 'dxf2gcode.dxfimport', 'dxf2gcode.globals', 'dxf2gcode.gui', 'dxf2gcode.postpro' ], py_modules=[ "dxf2gcode_images5_rc", "dxf2gcode_ui5" ], install_requires=[ 'configobj', 'PyQt5', 'PyOpenGL' ], include_package_data=True, data_files=[ ('share/metainfo', ['dxf2gcode.appdata.xml']), ('share/applications', ['dxf2gcode.desktop']), ('share/dxf2gcode/i18n', glob.glob('i18n/*.qm')), ('share/icons/hicolor/scalable/apps/', ['images/dxf2gcode.svg']) ], cmdclass={"install_scripts": install_scripts}, scripts=['dxf2gcode.py'], # setup for py2app app=['dxf2gcode.py'], options={ 'py2app': { 'iconfile': 'images/dxf2gcode.icns', 'plist': { 'CFBundleName': "dxf2gcode", 'CFBundleDisplayName': "dxf2gcode", 'CFBundleIdentifier': "org.sourceforge.dxf2gcode" } } }, setup_requires=setup_requires ) dxf2gcode-20240509/setup.py0000644000000000000000000000460214617100052014034 0ustar rootroot#!/usr/bin/python3 # To create MSI installer with automatic Menu shortcut installation run the following: # python3 setup.py bdist_msi import os import shutil import sys from cx_Freeze import Executable, setup version = "20240509" base = 'Console' if sys.platform == 'win32': base = 'Win32GUI' # Tells the build script to hide the console. # script based on # https://github.com/Fireforge/PySide-OpenGL-cx_Freeze-Example # http://stackoverflow.com/questions/15486292/cx-freeze-doesnt-find-all-dependencies def include_OpenGL(): PYTHONPATH = os.path.split(sys.executable)[0] path_base = os.path.join(PYTHONPATH, "Lib\\site-packages\\OpenGL") skip_count = len(path_base) zip_includes = [(path_base, "OpenGL")] for root, sub_folders, files in os.walk(path_base): for file_in_root in files: zip_includes.append( ("{}".format(os.path.join(root, file_in_root)), "{}".format(os.path.join("OpenGL", root[skip_count + 1:], file_in_root)) ) ) return zip_includes # Remove the existing folders shutil.rmtree("build", ignore_errors=True) shutil.rmtree("dist", ignore_errors=True) includefiles = ['COPYING', 'README.txt', ('i18n\dxf2gcode_de.qm', 'i18n\dxf2gcode_de.qm'), ('i18n\dxf2gcode_fr.qm', 'i18n\dxf2gcode_fr.qm'), ('i18n\dxf2gcode_ru.qm', 'i18n\dxf2gcode_ru.qm') ] includes = [] excludes = [] options = { 'build_exe': { # 'packages': '' , 'includes':includes, 'excludes':excludes, 'include_files':includefiles, 'zip_includes': include_OpenGL(), 'silent': True } } executables = [ Executable(script='dxf2gcode.py', base=base, icon="images\\DXF2GCODE-001.ico", target_name="dxf2gcode.exe", shortcut_name="DXF to G-Code Converter", shortcut_dir="ProgramMenuFolder" ) ] #If you want to run the script directly uncomment the following. #sys.argv.append("bdist_msi") setup(name='DXF2GCODE', version=version[0:4] + "." + version[4:6] + "." + version[6:8], # converts YYYYMMDD -> YYYY.MM.DD description='Converting 2D drawings to CNC machine compatible G-Code. Release Candidate 2 based on development branch', options=options, executables=executables ) dxf2gcode-20240509/make_tr.py0000755000000000000000000001311714617065372014341 0ustar rootroot#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # The list of source code files and translation files are contained # in dxf2gcode.pro. # # Note if you add .py files to .pro file from the IDE, they will be added # to the DISTFILES variable. You will have to edit .pro file and move the # .py files to SOURCES instead. # """ Generates the translation files based on the defined PyQt Project File """ import os import subprocess import sys import getopt def which(program): def is_exe(fpath): return os.path.isfile(fpath) and os.access(fpath, os.X_OK) fpath, fname = os.path.split(program) if fpath: if is_exe(program): return program else: for path in os.environ["PATH"].split(os.pathsep): exe_file = os.path.join(path, program) if is_exe(exe_file): return exe_file return None # # Linenumbers may be of a little help while doing translations, # but are a big problem in a multiple-developer environment. # # A change to almost any source file will trigger a change in .ts # files, this leads to many conflicts while merging branches and # submitting patches. # # Thus, the default behavior is to remove tags in all # .ts files (and keep the Git repository clean of them), but if # you're going to do translation work, run make_tr.py with the # --keep-ln option, then translate everythin, and run make_tr.py # without options again before you commit. # def remove_linenumbers(fpath): print(" Removing tags from", fpath) inf = open(fpath, "r", encoding = "utf8") outf = open(fpath + "~", "w", encoding = "utf8") for line in inf.readlines(): if line.find (" 0: collect = next_collect = True line = line[eq + 1:] if line.endswith('\\'): line = line[:-1] if collect: ts += line.split() collect = next_collect return ts if "linux" in sys.platform.lower() or "unix" in sys.platform.lower() or "darwin" in sys.platform.lower(): # On Linux, the executable are normaly on the PATH LREPATH = None names = ["lrelease-qt5", "lrelease5", "lrelease"] for name in names: if which(name): LREPATH = name break if not LREPATH: print("ERROR: Cannot file lrelease tool.") print("Please consider to install lrelease tool - to use this script.") sys.exit(1) PYLPATH = None # using lupdate instead of pylupdate will ruin translation files # since it doesn't know Python. names = ["pylupdate5"] #, "lupdate-qt5", "lupdate5", "lupdate" for name in names: if which(name): PYLPATH = name break if not PYLPATH: print("ERROR: Cannot file pylupdate5 tool.") print("Please consider to install lupdate tool - to use this script.") sys.exit(1) print("Using platform tools \"%s\" and \"%s\"\n" % (PYLPATH, LREPATH)) else: PYTHONPATH = os.path.split(sys.executable)[0] # To get pylupdate5.exe use: pip3.exe install PyQt5 PYLPATH = os.path.join(PYTHONPATH, "Scripts/pylupdate5.exe") #PYLPATH="C:\Program Files (x86)\Qt Designer\pylupdate5.exe" # To get lrelease.exe use: pip3.exe install pyqt5-tools # LREPATH = os.path.join(PYTHONPATH, "Scripts/lrelease.exe") #LREPATH = os.path.join(PYTHONPATH, "Lib\site-packages\qt5_applications\Qt\\bin\lrelease.exe") LREPATH="C:\Program Files (x86)\Qt Designer\lrelease.exe" print("Using Windows platform tools \"%s\" and \"%s\"\n" % (PYLPATH, LREPATH)) # Handle command line options try: (opts, left) = getopt.getopt(sys.argv[1:], "hkU", ["help", "no-pylupdate", "keep-ln"]) except getopt.GetoptError as e: print(e) sys.exit(1) if left != list(): print("unrecognized name on command line:", left [0]) sys.exit(1) QMAKEFILE = "dxf2gcode.pro" SKIP_PYLUPDATE = False KEEP_LINENUMBERS = False for opt,val in opts: if opt == "-h" or opt == "--help": print ("""\ Usage: %s [options] -U --no-pylupdate Don't update TS files by running 'pylupdate' -k --keep-ln Keep line numbers in TS files, use this if you're planning to use 'linguist'. """ % sys.argv[0]) sys.exit(1) elif opt == "--no-pylupdate" or opt == "-U": SKIP_PYLUPDATE = True elif opt == "--keep-ln" or opt == "-k": KEEP_LINENUMBERS = True TSFILES = extract_from_pro(QMAKEFILE, "TRANSLATIONS") if SKIP_PYLUPDATE: print("skipping pylupdate") else: print("Updating translations from source files...") cmd = [PYLPATH, QMAKEFILE] print(" ".join(cmd)) subprocess.check_call(cmd) if not KEEP_LINENUMBERS: print("Removing sourcecode references from translation files...") for ts in TSFILES: remove_linenumbers(ts) if not KEEP_LINENUMBERS: print("Compiling translation files to binary .qm format...") cmd = [LREPATH] + TSFILES print(" ".join(cmd)) subprocess.check_call(cmd) print("\nREADY") dxf2gcode-20240509/make_py_uic.py0000755000000000000000000000534414617065372015207 0ustar rootroot#!/usr/bin/env python3 """ Generates the python file based on the defined uifile """ import os import subprocess import sys import tempfile import dxf2gcode.globals.constants as c def which(program): def is_exe(fpath): return os.path.isfile(fpath) and os.access(fpath, os.X_OK) fpath, fname = os.path.split(program) if fpath: if is_exe(program): return program else: for path in os.environ["PATH"].split(os.pathsep): exe_file = os.path.join(path, program) if is_exe(exe_file): return exe_file return None pyQtVer = '5' if "linux" in sys.platform.lower() or "unix" in sys.platform.lower() or "darwin" in sys.platform.lower(): # On Linux and macOS executables are normaly on the PATH (on Linux please install packages like lib64-qt5-devel and python-qt5-devel) names = ["pyuic%s" % pyQtVer] UICPATH = None for name in names: if which(name): UICPATH = name break if not UICPATH: print("ERROR: Cannot file uic tool.") print("Please consider to install uic tool - to use this script.") sys.exit(1) names = ["pyrcc%s" % pyQtVer] RCCPATH = None for name in names: if which(name): RCCPATH = name break if not UICPATH: print("ERROR: Cannot file rcc tool.") print("Please consider to install rcc tool - to use this script.") sys.exit(1) RCCPATH = "pyrcc%s" % pyQtVer print("Using platform tools \"%s\" and \"%s\"\n" % (UICPATH, RCCPATH)) else: PYTHONPATH = os.path.split(sys.executable)[0] UICPATH = os.path.join(PYTHONPATH, "Scripts\pyuic5.exe") RCCPATH = os.path.join(PYTHONPATH, "Scripts\pyrcc5.exe") print("Using Windows platform tools \"%s\" and \"%s\"\n" % (UICPATH, RCCPATH)) FILEPATH = os.path.realpath(os.path.dirname(sys.argv[0])) UIFILE = "dxf2gcode.ui" PYFILEver = "dxf2gcode_ui%s.py" % pyQtVer RCFILE = "dxf2gcode_images.qrc" RCFILEver = "dxf2gcode_images%s.qrc" % pyQtVer RCPYFILEver = "dxf2gcode_images%s_rc.py" % pyQtVer ui_data = "" with open(os.path.join(FILEPATH,UIFILE), "r") as myfile: ui_data = myfile.read().replace(RCFILE, RCFILEver) fd, tmp_ui_filename = tempfile.mkstemp() try: os.write(fd, bytes(ui_data, 'UTF-8')) os.close(fd) OPTIONS = "-o" cmd1 = [UICPATH, tmp_ui_filename, OPTIONS, os.path.join(FILEPATH,PYFILEver)] cmd2 = [RCCPATH, OPTIONS, os.path.join(FILEPATH,RCPYFILEver),os.path.join(FILEPATH,RCFILE)] print(" ".join(cmd1)) subprocess.check_call(cmd1) print(" ".join(cmd2)) subprocess.check_call(cmd2) finally: os.remove(tmp_ui_filename) print("Please consider to not commit any auto-generated files.") print("\nREADY") dxf2gcode-20240509/make_exe.py0000644000000000000000000000122614617065372014470 0ustar rootroot#!/usr/bin/python # -*- coding: utf-8 -*- import os import subprocess import sys PYTHONPATH = os.path.split(sys.executable)[0] pyinpfad = os.path.join(PYTHONPATH, "Scripts\\pyinstaller.exe") pyt = os.path.join(PYTHONPATH, "python.exe") filepfad = os.path.realpath(os.path.dirname(sys.argv[0])) exemakepfad = filepfad file_ = "dxf2gcode.py" icon = "%s\\images\\DXF2GCODE-001.ico" % filepfad options = "--noconsole --icon=%s" % icon print(options) cmd = "%s %s %s\\%s" % (pyinpfad, options, filepfad, file_) print(" ".join(cmd)) subprocess.check_call(cmd) print("\n!!!!!!!Do not forget the language folder!!!!!!") print("\nREADY") dxf2gcode-20240509/dxf2gcode_images.qrc0000664000000000000000000000101713253251616016232 0ustar rootroot images/custom.png images/blocks.png images/collapse-all.png images/delete.png images/dxf2gcode_logo.png images/DXF2GCODE-001.ico images/expand-all.png images/go-down.png images/go-up.png images/layer.png images/shape.png images/list-add.png images/list-remove.png dxf2gcode-20240509/dxf2gcode.ui0000644000000000000000000012661614617065372014557 0ustar rootroot MainWindow Qt::NonModal 0 0 1304 696 DXF2GCODE :/images/DXF2GCODE-001.ico:/images/DXF2GCODE-001.ico 6 2 Qt::Horizontal false 2 0 200 0 false 1 Entities 1 0 0 Collapse all items :/images/collapse-all.png:/images/collapse-all.png 24 24 0 0 Expand all items :/images/expand-all.png:/images/expand-all.png 24 24 Qt::Horizontal 13 20 0 0 Layers 1 5 5 5 5 1 0 0 Collapse all items :/images/collapse-all.png:/images/collapse-all.png 24 24 0 0 Expand all items :/images/expand-all.png:/images/expand-all.png 24 24 Qt::Horizontal 13 20 0 0 Move-up the selected shape/layer :/images/go-up.png:/images/go-up.png 24 24 0 0 Move-down the selected shape/layer :/images/go-down.png:/images/go-down.png 24 24 0 0 QFrame::StyledPanel QFrame::Raised 0 0 2 2 2 2 2 0 0 20 0 0 0 Qt::PlainText 0 0 [mm] 0 0 / speed 0 0 [rpm] 0 0 start rad. (comp) 0 0 [mm] 2 0 0 0 Milling will start at Z = "Workpiece top Z" - "Z infeed depth" 2 0 0 Feed rate XY true [mm/min] Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 2 0 0 Z Final mill depth [mm] Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 2 0 0 Z Infeed depth [mm] Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 0 0 2 0 0 Z Safety margin [mm] Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 2 0 0 Z Retraction area [mm] Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 2 0 0 Z Workpiece top [mm] Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 2 0 0 Start X [mm] Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 0 0 2 0 0 Feed rate Z true [mm/min] Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 2 0 0 Start Y [mm] Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 7 0 200 200 Qt::DefaultContextMenu 0 0 16777215 100 Qt::ScrollBarAlwaysOn 0 0 1304 26 &File true Export the current project to G-Code &Export &View &Options Mac&hine Type false Measurement &units &Help &Open... Load DXF or other supported document Ctrl+O :/images/delete.png:/images/delete.png &Exit Exit DXF2GCODE and close window Ctrl+Q true false false &Show Path Directions Always shows the path direction in the plot (not only while selected) true false false Show Disabled &Paths false &Autoscale Ctrl+V, A false &Delete G0 Paths &Configuration... Ctrl+Shift+C &Postprocessor configuration... Ctrl+Shift+P &Tolerances false &Scale All false &Rotate All false &Move Workpiece Zero &About false &Optimize Paths Ctrl+Shift+O false &Export Shapes Ctrl+Shift+E false Optimize &and Export Shapes Ctrl+E true false &Live Update Export Route false &Reload Ctrl+R true Split &Line Segments Split line segments, e.g. can be used for compensation (G41/G42) in combination with EMC true false &Automatic Cutter Compensation true &Milling true &Drag Knife true &Lathe false &Top View Ctrl+V, T false &Isometric View Ctrl+V, I false &Save Project As... Ctrl+S true true &Millimeters true &Inches false &Mirror All Canvas QGraphicsView
dxf2gcode.gui.canvas
MessageBox QTextBrowser
dxf2gcode.gui.messagebox
TreeView QTreeView
dxf2gcode.gui.treeview
mytabWidget entitiesTreeView blocksCollapsePushButton blocksExpandPushButton canvas messageBox layersShapesTreeView layersCollapsePushButton layersExpandPushButton layersGoUpPushButton layersGoDownPushButton toolDiameterComboBox startAtXLineEdit startAtYLineEdit zRetractionArealLineEdit zSafetyMarginLineEdit zInitialMillDepthLineEdit zInfeedDepthLineEdit zFinalMillDepthLineEdit g1FeedXYLineEdit g1FeedZLineEdit layersCollapsePushButton clicked() layersShapesTreeView collapseAll() 41 85 120 309 layersExpandPushButton clicked() layersShapesTreeView expandAll() 80 85 120 309
dxf2gcode-20240509/dxf2gcode.py0000644000000000000000000015334014617076150014560 0ustar rootroot#!/usr/bin/env python3 # -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2010-2016 # Christian Kohlöffel # Jean-Paul Schouwstra # # German translation & Python 3.10+ compatibility by Daniel Luginbühl # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from __future__ import division import argparse import logging import os import subprocess import sys import tempfile from copy import copy, deepcopy from math import degrees, radians import dxf2gcode.globals.constants as c import dxf2gcode.globals.globals as g from dxf2gcode.core.customgcode import CustomGCode from dxf2gcode.core.entitycontent import EntityContent from dxf2gcode.core.holegeo import HoleGeo from dxf2gcode.core.layercontent import LayerContent, Layers, Shapes from dxf2gcode.core.linegeo import LineGeo from dxf2gcode.core.point import Point from dxf2gcode.core.project import Project from dxf2gcode.dxfimport.importer import ReadDXF from dxf2gcode.globals.config import MyConfig from dxf2gcode.globals.helperfunctions import qstr_encode, str_decode, str_encode from dxf2gcode.globals.logger import LoggerClass from dxf2gcode.gui.aboutdialog import AboutDialog from dxf2gcode.gui.configwindow import ConfigWindow from dxf2gcode.gui.popupdialog import PopUpDialog from dxf2gcode.gui.treehandling import TreeHandler from dxf2gcode.postpro.postprocessor import MyPostProcessor from dxf2gcode.postpro.tspoptimisation import TspOptimization from PyQt5.QtWidgets import QMainWindow, QGraphicsView, QFileDialog, QApplication, QMessageBox from PyQt5.QtGui import QSurfaceFormat from PyQt5 import QtCore logger = logging.getLogger() g.folder = os.path.join(os.path.expanduser("~"), ".config/dxf2gcode").replace("\\", "/") class MainWindow(QMainWindow): """ Main Class """ # Define a QT signal that is emitted when the configuration changes. # Connect to this signal if you need to know when the configuration has # changed. configuration_changed = QtCore.pyqtSignal() def __init__(self, app): """ Initialization of the Main window. This is directly called after the Logger has been initialized. The Function loads the GUI, creates the used Classes and connects the actions to the GUI. """ QMainWindow.__init__(self) # Build the configuration window self.config_window = ConfigWindow(g.config.makeConfigWidgets(), g.config.var_dict, g.config.var_dict.configspec, self) self.config_window.finished.connect(self.updateConfiguration) self.app = app self.settings = QtCore.QSettings("dxf2gcode", "dxf2gcode") self.ui = Ui_MainWindow() self.ui.setupUi(self) self.showMaximized() self.canvas = self.ui.canvas if g.config.mode3d: self.canvas_scene = self.canvas else: self.canvas_scene = None self.TreeHandler = TreeHandler(self.ui) self.configuration_changed.connect(self.TreeHandler.updateConfiguration) if sys.version_info[0] == 2: error_message = QMessageBox(QMessageBox.Critical, 'ERROR', self.tr("Python version 2 is not supported, please use it with python version 3.")) sys.exit(error_message.exec_()) # Load the post-processor configuration and build the post-processor configuration window self.MyPostProcessor = MyPostProcessor() # If string version_mismatch isn't empty, we popup an error and exit if self.MyPostProcessor.version_mismatch: error_message = QMessageBox(QMessageBox.Critical, 'Configuration error', self.MyPostProcessor.version_mismatch) sys.exit(error_message.exec_()) self.d2g = Project(self) self.createActions() self.connectToolbarToConfig() self.filename = "" self.valuesDXF = None self.shapes = Shapes([]) self.entityRoot = None self.layerContents = Layers([]) self.newNumber = 1 self.cont_dx = 0.0 self.cont_dy = 0.0 self.cont_rotate = 0.0 self.cont_scale = g.config.vars.Plane_Coordinates['std_scale'] self.cont_mirrorx = False self.cont_mirrory = False self.restoreWindowState() def tr(self, string_to_translate): """ Translate a string using the QCoreApplication translation framework @param: string_to_translate: a unicode string @return: the translated unicode string if it was possible to translate """ return str(QtCore.QCoreApplication.translate('MainWindow', string_to_translate)) def createActions(self): """ Create the actions of the main toolbar. @purpose: Links the callbacks to the actions in the menu """ # File self.ui.actionOpen.triggered.connect(self.open) self.ui.actionReload.triggered.connect(self.reload) self.ui.actionSaveProjectAs.triggered.connect(self.saveProject) self.ui.actionClose.triggered.connect(self.close) # Export self.ui.actionOptimizePaths.triggered.connect(self.optimizeTSP) self.ui.actionExportShapes.triggered.connect(self.exportShapes) self.ui.actionOptimizeAndExportShapes.triggered.connect(self.optimizeAndExportShapes) # View self.ui.actionShowPathDirections.triggered.connect(self.setShowPathDirections) # We need toggled (and not triggered), otherwise the signal is not # emitted when state is changed programmatically self.ui.actionShowDisabledPaths.toggled.connect(self.setShowDisabledPaths) self.ui.actionLiveUpdateExportRoute.toggled.connect(self.liveUpdateExportRoute) self.ui.actionDeleteG0Paths.triggered.connect(self.deleteG0Paths) self.ui.actionAutoscale.triggered.connect(self.canvas.autoscale) if g.config.mode3d: self.ui.actionTopView.triggered.connect(self.canvas.topView) self.ui.actionIsometricView.triggered.connect(self.canvas.isometricView) # Options self.ui.actionConfiguration.triggered.connect(self.config_window.show) self.ui.actionConfigurationPostprocessor.triggered.connect(self.MyPostProcessor.config_postpro_window.show) self.ui.actionTolerances.triggered.connect(self.setTolerances) self.ui.actionRotateAll.triggered.connect(self.rotateAll) self.ui.actionScaleAll.triggered.connect(self.scaleAll) self.ui.actionMirrorAll.triggered.connect(self.MirrorAll) self.ui.actionMoveWorkpieceZero.triggered.connect(self.moveWorkpieceZero) self.ui.actionSplitLineSegments.toggled.connect(self.d2g.small_reload) self.ui.actionAutomaticCutterCompensation.toggled.connect(self.d2g.small_reload) self.ui.actionMilling.triggered.connect(self.setMachineTypeToMilling) self.ui.actionDragKnife.triggered.connect(self.setMachineTypeToDragKnife) self.ui.actionLathe.triggered.connect(self.setMachineTypeToLathe) self.ui.actionMillimeters.triggered.connect(self.setMeasurementUnitsToMillimeters) self.ui.actionInches.triggered.connect(self.setMeasurementUnitsToInches) # Help self.ui.actionAbout.triggered.connect(self.about) def connectToolbarToConfig(self, project=False, block_signals=True): # View if not project: self.ui.actionShowDisabledPaths.blockSignals(block_signals) # Don't emit any signal when changing state of the menu entries self.ui.actionShowDisabledPaths.setChecked(g.config.vars.General['show_disabled_paths']) self.ui.actionShowDisabledPaths.blockSignals(False) self.ui.actionLiveUpdateExportRoute.blockSignals(block_signals) self.ui.actionLiveUpdateExportRoute.setChecked(g.config.vars.General['live_update_export_route']) self.ui.actionLiveUpdateExportRoute.blockSignals(False) # Options self.ui.actionSplitLineSegments.blockSignals(block_signals) self.ui.actionSplitLineSegments.setChecked(g.config.vars.General['split_line_segments']) self.ui.actionSplitLineSegments.blockSignals(False) self.ui.actionAutomaticCutterCompensation.blockSignals(block_signals) self.ui.actionAutomaticCutterCompensation.setChecked(g.config.vars.General['automatic_cutter_compensation']) self.ui.actionAutomaticCutterCompensation.blockSignals(False) self.updateMachineType() def keyPressEvent(self, event): """ Rewritten KeyPressEvent to get other behavior while Shift is pressed. @purpose: Changes to ScrollHandDrag while Control pressed @param event: Event Parameters passed to function """ if event.isAutoRepeat(): return if g.config.mode3d: self.canvas.updateModifiers(event) elif event.key() == QtCore.Qt.Key_Control: self.canvas.isMultiSelect = True elif event.key() == QtCore.Qt.Key_Shift: self.canvas.setDragMode(QGraphicsView.ScrollHandDrag) def keyReleaseEvent(self, event): """ Rewritten KeyReleaseEvent to get other behavior while Shift is pressed. @purpose: Changes to RubberBandDrag while Control released @param event: Event Parameters passed to function """ if g.config.mode3d: self.canvas.updateModifiers(event) elif event.key() == QtCore.Qt.Key_Control: self.canvas.isMultiSelect = False elif event.key() == QtCore.Qt.Key_Shift: self.canvas.setDragMode(QGraphicsView.NoDrag) def enableToolbarButtons(self, status=True): # File self.ui.actionReload.setEnabled(status) self.ui.actionSaveProjectAs.setEnabled(status) # Export self.ui.actionOptimizePaths.setEnabled(status) self.ui.actionExportShapes.setEnabled(status) self.ui.actionOptimizeAndExportShapes.setEnabled(status) # View self.ui.actionShowPathDirections.setEnabled(status) self.ui.actionShowDisabledPaths.setEnabled(status) self.ui.actionLiveUpdateExportRoute.setEnabled(status) self.ui.actionAutoscale.setEnabled(status) if g.config.mode3d: self.ui.actionTopView.setEnabled(status) self.ui.actionIsometricView.setEnabled(status) # Options self.ui.actionTolerances.setEnabled(status) self.ui.actionRotateAll.setEnabled(status) self.ui.actionScaleAll.setEnabled(status) self.ui.actionMirrorAll.setEnabled(status) self.ui.actionMoveWorkpieceZero.setEnabled(status) def deleteG0Paths(self): """ Deletes the optimisation paths from the scene. """ self.setCursor(QtCore.Qt.WaitCursor) self.app.processEvents() self.canvas_scene.delete_opt_paths() self.ui.actionDeleteG0Paths.setEnabled(False) self.canvas_scene.update() self.unsetCursor() def exportShapes(self, status=False, saveas=None): """ This function is called by the menu "Export/Export Shapes". It may open a Save Dialog if used without LinuxCNC integration. Otherwise it's possible to select multiple postprocessor files, which are located in the folder. """ self.setCursor(QtCore.Qt.WaitCursor) self.app.processEvents() logger.debug(self.tr('Export the enabled shapes')) # Get the export order from the QTreeView self.TreeHandler.updateExportOrder() self.updateExportRoute() logger.debug(self.tr("Sorted layers:")) for i, layer in enumerate(self.layerContents.non_break_layer_iter()): logger.debug("LayerContents[%i] = %s" % (i, layer)) if not g.config.vars.General['write_to_stdout']: # Get the name of the File to export if not saveas: MyFormats = "" for i in range(len(self.MyPostProcessor.output_format)): name = "%s " % (self.MyPostProcessor.output_text[i]) format_ = "(*%s);;" % (self.MyPostProcessor.output_format[i]) MyFormats = MyFormats + name + format_ filename = self.showSaveDialog(self.tr('Export to file'), MyFormats, g.config.vars.Paths['output_dir']) save_filename = qstr_encode(filename[0]) else: filename = [None, options.post_pro] save_filename = saveas # If Cancel was pressed if not save_filename: self.unsetCursor() return # If automatic save paths is checked keep it up to date. if g.config.vars.Paths['autosave_path']: logger.debug("Save output_dir") g.config.var_dict["Paths"]["output_dir"]=os.path.dirname(save_filename) g.config.update_config() g.config.save_varspace() (beg, ende) = os.path.split(save_filename) (fileBaseName, fileExtension) = os.path.splitext(ende) pp_file_nr = 0 for i in range(len(self.MyPostProcessor.output_format)): name = "%s " % (self.MyPostProcessor.output_text[i]) format_ = "(*%s)" % (self.MyPostProcessor.output_format[i]) MyFormats = name + format_ if filename[1] == MyFormats: pp_file_nr = i if fileExtension != self.MyPostProcessor.output_format[pp_file_nr]: if not QtCore.QFile.exists(save_filename): save_filename += self.MyPostProcessor.output_format[pp_file_nr] logger.debug("File Ending => Postprocessor Nr: %i" % (pp_file_nr)) self.MyPostProcessor.getPostProVars(pp_file_nr) else: save_filename = "" logger.debug("EMC Integration => Postprocessor Nr: %i" % (0)) self.MyPostProcessor.getPostProVars(0) """ Export will be performed according to LayerContents and their order is given in this variable too. """ # Prepare if any exception happens during export #try: self.MyPostProcessor.exportShapes(self.filename, save_filename, self.layerContents) #except Exception as e: # logger.error(self.tr('Error exporting shapes: %s') % str (e)) self.unsetCursor() if g.config.vars.General['write_to_stdout']: self.close() def optimizeAndExportShapes(self, saveas=None, post_pro=None): """ Optimize the tool path, then export the shapes """ self.optimizeTSP() self.exportShapes( saveas, post_pro) def updateExportRoute(self): """ Update the drawing of the export route """ self.canvas_scene.delete_opt_paths() self.canvas_scene.addexproutest() for layer in self.layerContents.non_break_layer_iter(): if len(layer.exp_order) > 0: self.canvas_scene.addexproute(layer.exp_order, layer.nr) if len(self.canvas_scene.routearrows) > 0: self.ui.actionDeleteG0Paths.setEnabled(True) self.canvas_scene.addexprouteen() self.canvas_scene.update() def optimizeTSP(self): """ Method is called to optimize the order of the shapes. This is performed by solving the TSP Problem. """ self.setCursor(QtCore.Qt.WaitCursor) self.app.processEvents() logger.debug(self.tr('Optimize order of enabled shapes per layer')) self.canvas_scene.delete_opt_paths() # Get the export order from the QTreeView logger.debug(self.tr('Updating order according to TreeView')) self.TreeHandler.updateExportOrder() self.canvas_scene.addexproutest() for layerContent in self.layerContents.non_break_layer_iter(): # Initial values for the Lists to export. shapes_to_write = [] shapes_fixed_order = [] shapes_st_en_points = [] # Check all shapes of Layer which shall be exported and create List for it. logger.debug(self.tr("Nr. of Shapes %s; Nr. of Shapes in Route %s") % (len(layerContent.shapes), len(layerContent.exp_order))) logger.debug(self.tr("Export Order for start: %s") % layerContent.exp_order) for shape_nr in range(len(layerContent.exp_order)): if not self.shapes[layerContent.exp_order[shape_nr]].send_to_TSP: shapes_fixed_order.append(shape_nr) shapes_to_write.append(shape_nr) if self.shapes[layerContent.exp_order[shape_nr]].Pocket == True: shapes_st_en_points.append(self.shapes[layerContent.exp_order[shape_nr]].get_start_end_points(PPocket=True)) else: shapes_st_en_points.append(self.shapes[layerContent.exp_order[shape_nr]].get_start_end_points()) # Perform Export only if the Number of shapes to export is bigger than 0 if len(shapes_to_write) > 0: # Errechnen der Iterationen # Calculate the iterations iter_ = min(g.config.vars.Route_Optimisation['max_iterations'], len(shapes_to_write) * 50) # Adding the Start and End Points to the List. x_st = g.config.vars.Plane_Coordinates['axis1_start_end'] y_st = g.config.vars.Plane_Coordinates['axis2_start_end'] start = Point(x_st, y_st) ende = Point(x_st, y_st) shapes_st_en_points.append([start, ende]) TSPs = TspOptimization(shapes_st_en_points, shapes_fixed_order) logger.info(self.tr("TSP start values initialised for Layer %s") % layerContent.name) logger.debug(self.tr("Shapes to write: %s") % shapes_to_write) logger.debug(self.tr("Fixed order: %s") % shapes_fixed_order) for it_nr in range(iter_ // 50): TSPs.calc_next_iteration() logger.debug(self.tr("TSP done with result: %s") % TSPs) layerContent.exp_order = [layerContent.exp_order[nr] for nr in TSPs.opt_route[1:]] layerContent.optimize() self.canvas_scene.addexproute(layerContent.exp_order, layerContent.nr) logger.debug(self.tr("New Export Order after TSP: %s") % layerContent.exp_order) self.app.processEvents() else: layerContent.exp_order = [] if len(self.canvas_scene.routearrows) > 0: self.ui.actionDeleteG0Paths.setEnabled(True) self.canvas_scene.addexprouteen() # Update order in the treeView, according to path calculation done by the TSP self.TreeHandler.updateTreeViewOrder() self.canvas_scene.update() self.unsetCursor() def automaticCutterCompensation(self): if self.ui.actionAutomaticCutterCompensation.isEnabled() and\ self.ui.actionAutomaticCutterCompensation.isChecked(): for layerContent in self.layerContents.non_break_layer_iter(): if layerContent.automaticCutterCompensationEnabled(): new_exp_order = [] outside_compensation = True shapes_left = layerContent.shapes while len(shapes_left) > 0: shapes_left = [shape for shape in shapes_left if not self.ifNotContainedChangeCutCor(shape, shapes_left, outside_compensation, new_exp_order)] outside_compensation = not outside_compensation layerContent.exp_order = list(reversed(new_exp_order)) self.TreeHandler.updateTreeViewOrder() self.canvas_scene.update() def ifNotContainedChangeCutCor(self, shape, shapes_left, outside_compensation, new_exp_order): if not isinstance(shape, CustomGCode): for outerShape in shapes_left: if self.isShapeContained(shape, outerShape): return False if outside_compensation == shape.cw: shape.cut_cor = 41 else: shape.cut_cor = 42 self.canvas_scene.repaint_shape(shape) new_exp_order.append(shape.nr) return True def isShapeContained(self, shape, outerShape): return shape != outerShape and not \ isinstance(outerShape, CustomGCode) and\ shape.BB.iscontained(outerShape.BB) def showSaveDialog(self, title, MyFormats, save_to_folder): """ This function is called by the menu "Export/Export Shapes" of the main toolbar. It creates the selection dialog for the exporter @return: Returns the filename of the selected file. """ (beg, ende) = os.path.split(self.filename) (fileBaseName, fileExtension) = os.path.splitext(ende) default_name = os.path.join(save_to_folder, fileBaseName) logger.debug("default_name: %s", default_name) selected_filter = self.MyPostProcessor.output_format[0] filename = QFileDialog.getSaveFileName(self, title, default_name, MyFormats, selected_filter) logger.debug(filename) # If there is something to load then call the load function callback if filename: #filename = qstr_encode(filename) logger.info(self.tr("File: %s selected") % filename[0]) logger.info(self.tr("Filter: %s selected") % filename[1]) logger.info("%s" % (filename[0], filename[0])) return filename else: return False def about(self): """ This function is called by the menu "Help/About" of the main toolbar and creates the About Window """ message = self.tr("" "

You are using

" "" "

Version:

" "%s: %s
" "Last change: %s
" "Changed by: %s
" "

Where to get help:

" "For more information and updates, " "please visit " "http://sourceforge.net/projects/dxf2gcode/
" "For any questions on how to use dxf2gcode please use the " "https://www.ltspiceusers.ch/forums/english-section.67/
" "To log bugs, or request features please use the " "issue tracking system
" "

License and copyright:

" "This program is written in Python and is published under the " "GNU GPLv3 license.
" "") % (c.VERSION, c.REVISION, c.DATE, c.AUTHOR) AboutDialog(title=self.tr("About DXF2GCODE"), message=message) def setShowPathDirections(self): """ This function is called by the menu "Show all path directions" of the main and forwards the call to Canvas.setShow_path_direction() """ flag = self.ui.actionShowPathDirections.isChecked() self.canvas.setShowPathDirections(flag) self.canvas_scene.update() def setShowDisabledPaths(self): """ This function is called by the menu "Show disabled paths" of the main and forwards the call to Canvas.setShow_disabled_paths() """ flag = self.ui.actionShowDisabledPaths.isChecked() self.canvas_scene.setShowDisabledPaths(flag) self.canvas_scene.update() def liveUpdateExportRoute(self): """ This function is called by the menu "Live update tool path" of the main and forwards the call to TreeHandler.setUpdateExportRoute() """ flag = self.ui.actionLiveUpdateExportRoute.isChecked() self.TreeHandler.setLiveUpdateExportRoute(flag) def setTolerances(self): title = self.tr('Contour tolerances') units = "in" if g.config.metric == 0 else "mm" label = [self.tr("Tolerance for common points [%s]:") % units, self.tr("Tolerance for curve fitting [%s]:") % units] value = [g.config.point_tolerance, g.config.fitting_tolerance] wtype = ["lineEdit", "lineEdit"] logger.debug(self.tr("set Tolerances")) SetTolDialog = PopUpDialog(title, label, value, wtype) if SetTolDialog.result is None: return g.config.point_tolerance = float(SetTolDialog.result[0]) g.config.fitting_tolerance = float(SetTolDialog.result[1]) self.d2g.reload() # set tolerances requires a complete reload def MirrorAll(self): title = self.tr('Mirror all X / Y-Axis') label = [self.tr("Mirror all on X-Axis:"), self.tr("Mirror all on Y-Axis:")] value = [self.cont_mirrorx, self.cont_mirrory] wtype = ["checkBox","checkBox"] MirrorDialog = PopUpDialog(title, label, value, wtype) if MirrorDialog.result is None: return self.cont_mirrorx = MirrorDialog.result[0] self.cont_mirrory = MirrorDialog.result[1] self.entityRoot.mirrorx = self.cont_mirrorx self.entityRoot.mirrory = self.cont_mirrory self.d2g.small_reload() def scaleAll(self): title = self.tr('Scale Contour') label = [self.tr("Scale Contour by factor:")] value = [self.cont_scale] wtype = ["lineEdit"] ScaEntDialog = PopUpDialog(title, label, value, wtype) if ScaEntDialog.result is None: return self.cont_scale = float(ScaEntDialog.result[0]) self.entityRoot.sca = self.cont_scale self.d2g.small_reload() def rotateAll(self): title = self.tr('Rotate Contour') # TODO should we support radians for drawing unit non metric? label = [self.tr("Rotate Contour by deg:")] value = [degrees(self.cont_rotate)] wtype = ["lineEdit"] RotEntDialog = PopUpDialog(title, label, value, wtype) if RotEntDialog.result is None: return self.cont_rotate = radians(float(RotEntDialog.result[0])) self.entityRoot.rot = self.cont_rotate self.d2g.small_reload() def moveWorkpieceZero(self): """ This function is called when the Option=>Move WP Zero Menu is clicked. """ title = self.tr('Workpiece zero offset') units = "[in]" if g.config.metric == 0 else "[mm]" label = [self.tr("Offset %s axis %s:") % (g.config.vars.Axis_letters['ax1_letter'], units), self.tr("Offset %s axis %s:") % (g.config.vars.Axis_letters['ax2_letter'], units)] value = [self.cont_dx, self.cont_dy] wtype = ["lineEdit","lineEdit"] MoveWpzDialog = PopUpDialog(title, label, value, wtype, True) if MoveWpzDialog.result is None: return if MoveWpzDialog.result == 'Auto': minx = sys.float_info.max miny = sys.float_info.max for shape in self.shapes: if not shape.isDisabled(): minx = min(minx, shape.BB.Ps.x) miny = min(miny, shape.BB.Ps.y) if not (minx == sys.float_info.max or miny == sys.float_info.max): self.cont_dx = self.entityRoot.p0.x - minx self.cont_dy = self.entityRoot.p0.y - miny else: self.cont_dx = float(MoveWpzDialog.result[0]) self.cont_dy = float(MoveWpzDialog.result[1]) if self.entityRoot.p0.x != self.cont_dx or self.entityRoot.p0.y != self.cont_dy: self.entityRoot.p0.x = self.cont_dx self.entityRoot.p0.y = self.cont_dy self.d2g.small_reload() else: logger.info(self.tr("No differences found. Ergo, workpiece zero is not moved")) def setMachineTypeToMilling(self): g.config.machine_type = 'milling' self.updateMachineType() self.d2g.small_reload() def setMachineTypeToDragKnife(self): g.config.machine_type = 'drag_knife' self.updateMachineType() self.d2g.small_reload() def setMachineTypeToLathe(self): g.config.machine_type = 'lathe' self.updateMachineType() self.d2g.small_reload() def updateMachineType(self): if g.config.machine_type == 'milling': self.ui.actionAutomaticCutterCompensation.setEnabled(True) self.ui.actionMilling.setChecked(True) self.ui.actionDragKnife.setChecked(False) self.ui.actionLathe.setChecked(False) self.ui.label_9.setText(self.tr("Z Infeed depth")) elif g.config.machine_type == 'lathe': self.ui.actionAutomaticCutterCompensation.setEnabled(False) self.ui.actionMilling.setChecked(False) self.ui.actionDragKnife.setChecked(False) self.ui.actionLathe.setChecked(True) self.ui.label_9.setText(self.tr("No Z-Axis for lathe")) elif g.config.machine_type == "drag_knife": self.ui.actionAutomaticCutterCompensation.setEnabled(False) self.ui.actionMilling.setChecked(False) self.ui.actionDragKnife.setChecked(True) self.ui.actionLathe.setChecked(False) self.ui.label_9.setText(self.tr("Z Drag depth")) def setMeasurementUnitsToMillimeters(self): self.setMeasurementUnits(1) def setMeasurementUnitsToInches(self): self.setMeasurementUnits(0) def setMeasurementUnits(self, metric, refresh_ui=False): """ Change the measurement units used in DXF file. Helps if dxf2gcode was unable to detect the correct units. """ self.ui.menu_Measurement_units.setEnabled(True) self.ui.actionMillimeters.setChecked(metric == 1) self.ui.actionInches.setChecked(metric == 0) if (g.config.metric != metric) or refresh_ui: if metric == 0: logger.info(self.tr("Drawing units: inches")) distance = self.tr("[in]") speed = self.tr("[IPM]") else: logger.info(self.tr("Drawing units: millimeters")) distance = self.tr("[mm]") speed = self.tr("[mm/min]") self.ui.unitLabel_3.setText(distance) self.ui.unitLabel_4.setText(distance) self.ui.unitLabel_5.setText(distance) self.ui.unitLabel_6.setText(distance) self.ui.unitLabel_7.setText(distance) self.ui.unitLabel_8.setText(speed) self.ui.unitLabel_9.setText(speed) if g.config.metric != metric: for layerContent in self.layerContents: layerContent.changeMeasuringUnits(g.config.metric, metric) g.config.metric = metric g.config.update_tool_values() self.configuration_changed.emit() self.TreeHandler.updateToolParameters() def open(self): """ This function is called by the menu "File/Load File" of the main toolbar. It creates the file selection dialog and calls the load function to load the selected file. """ self.OpenFileDialog(self.tr("Open file")) # If there is something to load then call the load function callback if self.filename: self.cont_dx = 0.0 self.cont_dy = 0.0 self.cont_rotate = 0.0 self.cont_scale = g.config.vars.Plane_Coordinates['std_scale'] self.cont_mirrorx = False self.cont_mirrory = False self.load() def OpenFileDialog(self, title): self.filename, _ = QFileDialog. getOpenFileName(self, title, g.config.vars.Paths['import_dir'], self.tr("All supported files (*.dxf *.DXF *.ps *.PS *.pdf *.PDF *%s);;" "DXF files (*.dxf *.DXF);;" "PS files (*.ps *.PS);;" "PDF files (*.pdf *.PDF);;" "Project files (*%s);;" "All types (*.*)") % (c.PROJECT_EXTENSION, c.PROJECT_EXTENSION)) # If there is something to load then call the load function callback if not(self.filename): return # If automatic save paths is checked keep it up to date. if g.config.vars.Paths['autosave_path']: logger.debug("Save import_dir") g.config.var_dict["Paths"]["import_dir"] = os.path.dirname(self.filename) g.config.update_config() g.config.save_varspace() self.filename = qstr_encode(self.filename) logger.info(self.tr("File: %s selected") % self.filename) def load(self, plot=True): """ Loads the file given by self.filename. Also calls the command to make the plot. @param plot: if it should plot """ if not QtCore.QFile.exists(self.filename): logger.info(self.tr("Cannot locate file: %s") % self.filename) self.OpenFileDialog(self.tr("Manually open file: %s") % self.filename) if not self.filename: return False # cancelled self.setCursor(QtCore.Qt.WaitCursor) self.setWindowTitle("DXF2GCODE - [%s]" % self.filename) self.canvas.resetAll() self.app.processEvents() (name, ext) = os.path.splitext(self.filename) if ext.lower() == c.PROJECT_EXTENSION: self.loadProject(self.filename) return True # kill this load operation - we opened a new one if ext.lower() == ".ps" or ext.lower() == ".pdf": # in case of PDF the two stage conversion will take place # as pstoedit is not able to directly convert PDF->DXF # Stages: # 1) PDF->PS (using pdftops - not pdf2ps!) # 2) PS->DXF (using pstoedit) if ext.lower() == ".pdf": logger.info(self.tr("Converting {0} to {1}").format("PDF", "PS")) # Create temporary file which will be read by the program tmp_filename = os.path.join(tempfile.gettempdir(), 'dxf2gcode_temp.ps') pdftops_cmd = g.config.vars.Filters['pdftops_cmd'] pdftops_opt = g.config.vars.Filters['pdftops_opt'] if len(pdftops_opt) == 1 and len(pdftops_opt[0]) == 0: pdftops_opt = list() ps_filename = os.path.normcase(self.filename) cmd = [('%s' % pdftops_cmd)] + pdftops_opt + [('%s' % ps_filename), ('%s' % os.path.normcase(tmp_filename))] logger.debug(cmd) self.filename = os.path.normcase(tmp_filename) try: rv = subprocess.call(cmd) if rv != 0: self.unsetCursor() QMessageBox.critical(self, "ERROR", self.tr( "Command:\n{0}\nreturned error code: {1}").format(' '.join(cmd), rv)) return True except OSError as e: logger.error(e.strerror) self.unsetCursor() QMessageBox.critical(self, "ERROR", self.tr( "Please make sure you have installed {0}, and configured it in the config file.").format("pdftops")) return True logger.info(self.tr("Converting {0} to {1}").format("PS", "DXF")) # Create temporary file which will be read by the program tmp_filename = os.path.join(tempfile.gettempdir(), 'dxf2gcode_temp.dxf') pstoedit_cmd = g.config.vars.Filters['pstoedit_cmd'] pstoedit_opt = g.config.vars.Filters['pstoedit_opt'] if len(pstoedit_opt) == 1 and len(pstoedit_opt[0]) == 0: pstoedit_opt = list() ps_filename = os.path.normcase(self.filename) cmd = [('%s' % pstoedit_cmd)] + pstoedit_opt + [('%s' % ps_filename), ('%s' % os.path.normcase(tmp_filename))] logger.debug(cmd) self.filename = os.path.normcase(tmp_filename) try: rv = subprocess.call(cmd) if rv != 0: self.unsetCursor() QMessageBox.critical(self, "ERROR", self.tr( "Command:\n{0}\nreturned error code: {1}").format(' '.join(cmd), rv)) return True except OSError as e: logger.error(e.strerror) self.unsetCursor() QMessageBox.critical(self, "ERROR", self.tr("Please make sure you have installed {0}, and configured it in the config file.").format("pstoedit")) return True # If the return code was non-zero it raises a # subprocess.CalledProcessError. # subprocess.check_output() logger.info(self.tr('Loading file: %s') % self.filename) self.valuesDXF = ReadDXF(self.filename) # Output the information in the text window logger.info(self.tr('Loaded layers: %s') % len(self.valuesDXF.layers)) logger.info(self.tr('Loaded blocks: %s') % len(self.valuesDXF.blocks.Entities)) for i in range(len(self.valuesDXF.blocks.Entities)): layers = self.valuesDXF.blocks.Entities[i].get_used_layers() logger.info(self.tr('Block %i includes %i Geometries, reduced to %i Contours, used layers: %s') % (i, len(self.valuesDXF.blocks.Entities[i].geo), len(self.valuesDXF.blocks.Entities[i].cont), layers)) layers = self.valuesDXF.entities.get_used_layers() insert_nr = self.valuesDXF.entities.get_insert_nr() logger.info(self.tr('Loaded %i entity geometries; reduced to %i contours; used layers: %s; number of inserts %i') % (len(self.valuesDXF.entities.geo), len(self.valuesDXF.entities.cont), layers, insert_nr)) self.setMeasurementUnits(g.config.metric, True) self.makeShapes() if plot: self.plot() return True def plot(self): # Populate the treeViews self.TreeHandler.buildEntitiesTree(self.entityRoot) self.TreeHandler.buildLayerTree(self.layerContents) # Paint the canvas if not g.config.mode3d: self.canvas_scene = MyGraphicsScene() self.canvas.setScene(self.canvas_scene) self.canvas_scene.plotAll(self.shapes) self.setShowPathDirections() self.setShowDisabledPaths() self.liveUpdateExportRoute() if not g.config.mode3d: self.canvas.show() self.canvas.setFocus() self.canvas.autoscale() # After all is plotted enable the Menu entities self.enableToolbarButtons() self.automaticCutterCompensation() self.unsetCursor() def reload(self): """ This function is called by the menu "File/Reload File" of the main toolbar. It reloads the previously loaded file (if any) """ if self.filename: logger.info(self.tr("Reloading file: %s") % self.filename) self.load() def makeShapes(self): self.entityRoot = EntityContent(nr=0, name='Entities', parent=None, p0=Point(self.cont_dx, self.cont_dy), pb=Point(), sca=[self.cont_scale, self.cont_scale, self.cont_scale], rot=self.cont_rotate, mirrorx = self.cont_mirrorx, mirrory = self.cont_mirrory) self.layerContents = Layers([]) self.shapes = Shapes([]) self.makeEntityShapes(self.entityRoot) for layerContent in self.layerContents: layerContent.overrideDefaults() self.layerContents.sort(key=lambda x: x.nr) self.newNumber = len(self.shapes) def makeEntityShapes(self, parent, layerNr=-1): """ Instance is called prior to plotting the shapes. It creates all shape classes which are plotted into the canvas. @param parent: The parent of a shape is always an Entity. It may be the root or, if it is a Block, this is the Block. """ if parent.name == "Entities": entities = self.valuesDXF.entities else: ent_nr = self.valuesDXF.Get_Block_Nr(parent.name) entities = self.valuesDXF.blocks.Entities[ent_nr] # Assigning the geometries in the variables geos & contours in cont ent_geos = entities.geo # Loop for the number of contours for cont in entities.cont: # Query if it is in the contour of an insert or of a block if ent_geos[cont.order[0][0]].Typ == "Insert": ent_geo = ent_geos[cont.order[0][0]] # Assign the base point for the block new_ent_nr = self.valuesDXF.Get_Block_Nr(ent_geo.BlockName) new_entities = self.valuesDXF.blocks.Entities[new_ent_nr] pb = new_entities.basep # Scaling, etc. assign the block p0 = ent_geos[cont.order[0][0]].Point sca = ent_geos[cont.order[0][0]].Scale rot = ent_geos[cont.order[0][0]].rot #mirrorx = False #ent_geos[cont.order[0][0]].mirrorx #mirrory = False #ent_geos[cont.order[0][0]].mirrory # Creating the new Entitie Contents for the insert newEntityContent = EntityContent(nr=0, name=ent_geo.BlockName, parent=parent, p0=p0, pb=pb, sca=sca, rot=rot) #mirrorx=mirrorx, #mirrory=mirrory parent.append(newEntityContent) self.makeEntityShapes(newEntityContent, ent_geo.Layer_Nr) else: # Loop for the number of geometries tmp_shape = Shape(len(self.shapes), (True if cont.closed else False), parent) for ent_geo_nr in range(len(cont.order)): ent_geo = ent_geos[cont.order[ent_geo_nr][0]] if cont.order[ent_geo_nr][1]: ent_geo.geo.reverse() for geo in ent_geo.geo: geo = copy(geo) geo.reverse() self.append_geo_to_shape(tmp_shape, geo) ent_geo.geo.reverse() else: for geo in ent_geo.geo: self.append_geo_to_shape(tmp_shape, copy(geo)) if len(tmp_shape.geos) > 0: # All shapes have to be CW direction. tmp_shape.AnalyseAndOptimize() self.shapes.append(tmp_shape) if g.config.vars.Import_Parameters['insert_at_block_layer'] and layerNr != -1: self.addtoLayerContents(tmp_shape, layerNr) else: self.addtoLayerContents(tmp_shape, ent_geo.Layer_Nr) parent.append(tmp_shape) if not g.config.mode3d: # Connect the shapeSelectionChanged and enableDisableShape signals to our treeView, # so that selections of the shapes are reflected on the treeView tmp_shape.setSelectionChangedCallback(self.TreeHandler.updateShapeSelection) tmp_shape.setEnableDisableCallback(self.TreeHandler.updateShapeEnabling) def append_geo_to_shape(self, shape, geo): if -1e-5 <= geo.length < 1e-5: # TODO adjust import for this return if self.ui.actionSplitLineSegments.isChecked(): if isinstance(geo, LineGeo): diff = (geo.Pe - geo.Ps) / 2.0 geo_b = deepcopy(geo) geo_a = deepcopy(geo) geo_b.Pe -= diff geo_a.Ps += diff shape.append(geo_b) shape.append(geo_a) else: shape.append(geo) else: shape.append(geo) if isinstance(geo, HoleGeo): shape.type = 'Hole' shape.closed = True # TODO adjust import for holes? if g.config.machine_type == 'drag_knife': shape.disabled = True shape.allowedToChange = False def addtoLayerContents(self, shape, lay_nr): # Check if the layer already exists and add shape if it is. for LayCon in self.layerContents: if LayCon.nr == lay_nr: LayCon.shapes.append(shape) shape.parentLayer = LayCon return # If the Layer does not exist create a new one. LayerName = self.valuesDXF.layers[lay_nr].name self.layerContents.append(LayerContent(lay_nr, LayerName, [shape])) shape.parentLayer = self.layerContents[-1] def updateConfiguration(self, result): """ Some modification occured in the configuration window, we need to save these changes into the config file. Once done, the signal configuration_changed is emitted, so that anyone interested in this information can connect to this signal. """ if result == ConfigWindow.Applied or result == ConfigWindow.Accepted: # Write the configuration into the config file (config.cfg) g.config.save_varspace() # Rebuild the readonly configuration structure g.config.update_config() # Assign changes to the menus (if no change occured, nothing # happens / otherwise QT emits a signal for the menu entry that has changed) self.connectToolbarToConfig(block_signals=False) # Inform about the changes into the configuration self.configuration_changed.emit() def loadProject(self, filename): """ Load all variables from file """ # since Py3 has no longer execfile - we need to open it manually file_ = open(filename, 'r') str_ = file_.read() file_.close() self.d2g.load(str_) def saveProject(self): """ Save all variables to file """ prj_filename = self.showSaveDialog(self.tr('Save project to file'), "Project files (*%s)" % c.PROJECT_EXTENSION, g.config.vars.Paths['project_dir']) save_prj_filename = qstr_encode(prj_filename[0]) # If Cancel was pressed if not save_prj_filename: return # If automatic save paths is checked keep it up to date. if g.config.vars.Paths['autosave_path']: logger.debug("Save project_dir") g.config.var_dict["Paths"]["project_dir"] = os.path.dirname(prj_filename[0]) g.config.update_config() g.config.save_varspace() (beg, ende) = os.path.split(save_prj_filename) (fileBaseName, fileExtension) = os.path.splitext(ende) if fileExtension != c.PROJECT_EXTENSION: if not QtCore.QFile.exists(save_prj_filename): save_prj_filename += c.PROJECT_EXTENSION pyCode = self.d2g.export() try: # File open and write f = open(save_prj_filename, "w") f.write(str_encode(pyCode)) f.close() logger.info(self.tr("Save project to FILE was successful")) except IOError: QMessageBox.warning(g.window, self.tr("Warning during Save Project As"), self.tr("Cannot Save the File")) def closeEvent(self, e): logger.debug(self.tr("Closing")) self.saveWindowState() e.accept() def restoreWindowState(self): self.settings.beginGroup("MainWindow") geometry = self.settings.value("geometry") state = self.settings.value("state") self.settings.endGroup() if (geometry is not None) and (state is not None): self.restoreGeometry(geometry) self.restoreState(state) def saveWindowState(self): self.settings.beginGroup("MainWindow") self.settings.setValue("geometry", self.saveGeometry()) self.settings.setValue("state", self.saveState()) self.settings.endGroup() if __name__ == "__main__": """ The main function which is executed after program start. """ Log = LoggerClass(logger) g.config = MyConfig() Log.set_console_handler_loglevel() if not g.config.vars.Logging['logfile']: Log.add_window_logger() else: Log.add_file_logger() app = QApplication(sys.argv) # Get local language and install if available. locale = QtCore.QLocale.system().name() logger.debug("locale: %s" % locale) translator = QtCore.QTranslator() #logger.debug(os.getcwd()) #logger.debug(os.path.dirname(os.path.abspath(__file__))) #logger.debug(translator.load("dxf2gcode_" + locale, "./i18n")) #logger.debug(translator.load("dxf2gcode_" + locale, os.path.join(os.path.dirname(os.path.abspath(__file__)),"i18n"))) if translator.load("dxf2gcode_" + locale, "./i18n"): app.installTranslator(translator) elif translator.load("dxf2gcode_" + locale, os.path.join(os.path.dirname(os.path.abspath(__file__)),"i18n")): app.installTranslator(translator) elif translator.load("dxf2gcode_" + locale, "/usr/share/dxf2gcode/i18n"): app.installTranslator(translator) # If string version_mismatch isn't empty, we popup an error and exit if g.config.version_mismatch: error_message = QMessageBox(QMessageBox.Critical, 'Configuration error', g.config.version_mismatch) sys.exit(error_message.exec_()) # Delay imports - needs to be done after logger and config initialization; and before the main window from dxf2gcode_ui5 import Ui_MainWindow if g.config.mode3d: from dxf2gcode.core.shape import Shape # multi-sampling has been introduced in PyQt5 fmt = QSurfaceFormat() fmt.setSamples(4) QSurfaceFormat.setDefaultFormat(fmt) else: from dxf2gcode.gui.canvas2d import MyGraphicsScene from dxf2gcode.gui.canvas2d import ShapeGUI as Shape window = MainWindow(app) g.window = window Log.add_window_logger(window.ui.messageBox) # command line options parser = argparse.ArgumentParser() parser.add_argument("filename", nargs="?") # parser.add_argument("-f", "--file", dest = "filename", # help = "read data from FILENAME") parser.add_argument("-e", "--export", dest="export_filename", help="export data to FILENAME") parser.add_argument("-p", "--postpro", dest="post_pro", help="Post Processor to use") parser.add_argument("-o", "--optimize", action="store_true", dest="optimize", help="optimize before export") parser.add_argument("-q", "--quiet", action="store_true", dest="quiet", help="no GUI") # parser.add_option("-v", "--verbose", # action = "store_true", dest = "verbose") options = parser.parse_args() g.quiet = options.quiet # (options, args) = parser.parse_args() logger.debug("Started with following options:\n%s" % parser) if not options.quiet: window.show() if options.filename is not None: window.filename = str_decode(options.filename) window.load() if options.export_filename is not None: window.exportShapes(None, options.export_filename) if not options.quiet: # It's exec_ because exec is a reserved word in Python sys.exit(app.exec_()) dxf2gcode-20240509/dxf2gcode.pro0000644000000000000000000000476114617065372014736 0ustar rootrootTARGET = dxf2gcode.py SOURCES += \ dxf2gcode.py \ make_tr.py \ dxf2gcode.py \ make_exe.py \ make_py_uic.py \ make_tr.py \ setup.py \ st-setup.py \ dxf2gcode/__init__.py \ dxf2gcode/core/__init__.py \ dxf2gcode/core/arcgeo.py \ dxf2gcode/core/point.py \ dxf2gcode/core/boundingbox.py \ dxf2gcode/core/breakgeo.py \ dxf2gcode/core/customgcode.py \ dxf2gcode/core/entitycontent.py \ dxf2gcode/core/holegeo.py \ dxf2gcode/core/intersect.py \ dxf2gcode/core/layercontent.py \ dxf2gcode/core/linegeo.py \ dxf2gcode/core/pocketmill.py \ dxf2gcode/core/pocketmove.py \ dxf2gcode/core/point3d.py \ dxf2gcode/core/project.py \ dxf2gcode/core/shape.py \ dxf2gcode/core/shapeoffset.py \ dxf2gcode/core/stmove.py \ dxf2gcode/globals/__init__.py \ dxf2gcode/globals/config.py \ dxf2gcode/globals/constants.py \ dxf2gcode/globals/d2gexceptions.py \ dxf2gcode/globals/globals.py \ dxf2gcode/globals/helperfunctions.py \ dxf2gcode/globals/logger.py \ dxf2gcode/gui/__init__.py \ dxf2gcode/gui/aboutdialog.py \ dxf2gcode/gui/arrow.py \ dxf2gcode/gui/canvas.py \ dxf2gcode/gui/canvas2d.py \ dxf2gcode/gui/canvas3d.py \ dxf2gcode/gui/configwindow.py \ dxf2gcode/gui/messagebox.py \ dxf2gcode/gui/popupdialog.py \ dxf2gcode/gui/routetext.py \ dxf2gcode/gui/treehandling.py \ dxf2gcode/gui/treeview.py \ dxf2gcode/gui/wpzero.py \ dxf2gcode/dxfimport/__init__.py \ dxf2gcode/dxfimport/biarc.py \ dxf2gcode/dxfimport/classes.py \ dxf2gcode/dxfimport/geoent_arc.py \ dxf2gcode/dxfimport/geoent_circle.py \ dxf2gcode/dxfimport/geoent_ellipse.py \ dxf2gcode/dxfimport/geoent_insert.py \ dxf2gcode/dxfimport/geoent_line.py \ dxf2gcode/dxfimport/geoent_lwpolyline.py \ dxf2gcode/dxfimport/geoent_point.py \ dxf2gcode/dxfimport/geoent_polyline.py \ dxf2gcode/dxfimport/geoent_spline.py \ dxf2gcode/dxfimport/importer.py \ dxf2gcode/dxfimport/spline_convert.py \ dxf2gcode/postpro/__init__.py \ dxf2gcode/postpro/breaks.py \ dxf2gcode/postpro/postprocessor.py \ dxf2gcode/postpro/postprocessorconfig.py \ dxf2gcode/postpro/tspoptimisation.py DISTFILES += \ README.txt \ dxf2gcode.desktop \ dxf2gcode.appdata.xml \ MANIFEST.in RESOURCES += \ dxf2gcode_images.qrc FORMS += \ dxf2gcode.ui TRANSLATIONS += \ i18n/dxf2gcode_de.ts \ i18n/dxf2gcode_fr.ts \ i18n/dxf2gcode_ru.ts dxf2gcode-20240509/dxf2gcode.desktop0000664000000000000000000000033614011526166015572 0ustar rootroot[Desktop Entry] Name=dxf2gcode converter Comment=2D dxf drawings to CNC machine compatible G-Code converter Exec=dxf2gcode %f Icon=dxf2gcode Keywords=cam;cnc;dxf;g-code Terminal=false StartupNotify=false Type=Application dxf2gcode-20240509/dxf2gcode.appdata.xml0000664000000000000000000000310613253251616016332 0ustar rootroot dxf2gcode.desktop CC0-1.0 GPL-3.0+ dxf2gcode 2D dxf drawings to CNC machine compatible G-Code converter

dxf2gcode is a tool for converting 2D (DXF, PDF, PS) drawings to CNC machine compatible G-Code.

Some features:

  • Integration in EMC2,
  • Fully adjustable Postprocessor,
  • G0 moves reduction by route optimization,
  • Import of DXF and PDF,
  • Improved accuracy for splines import by Line and Arc's,
  • Mill parameter specification by layers,
  • Drag knife and lathe support,
  • Breaks a.k.a Tabs support,
  • AutoCAD Blocks and Inserts,
  • Multiple tools,
  • Multiple language support: English, German, French, Russian,
  • 3D viewer.
https://a.fsdn.com/con/app/proj/dxf2gcode/screenshots/piede_20.png/1 https://a.fsdn.com/con/app/proj/dxf2gcode/screenshots/Frontplatte.png/1 https://sourceforge.net/projects/dxf2gcode/ dwrobel_at_ertelnet.rybnik.pl
dxf2gcode-20240509/README.txt0000644000000000000000000001643214617065372014043 0ustar rootrootDXF2GCODE: 2D drawings to CNC machine compatible G-Code converter ================================================================= Getting Started --------------- These instructions will guide you how to compile install and run the project on your local machine for system-wide installation as well as for development and testing purposes. Automated installer for Debian based systems -------------------------------------------- https://github.com/ltspicer/dxf2gcode.linux.installer Prerequisites ------------- - Unix machines: - Build dependencies: - /usr/bin/python3 and development package (>=3.5), - PyQt5 (>=5.7), - PyOpenGL (>=3.1), - configobj (>=5.0.6). - py2app (>=0.14 only on macOS), - /usr/bin/lrelease-qt5 or /usr/bin/lrelease5 or /usr/bin/lrelease, - /usr/bin/pylupdate5, - /usr/bin/pyuic5, - /usr/bin/pyrcc5 - /usr/bin/productbuild (only on macOS) - Runtime dependencies: - /usr/bin/python3 (>=3.5), - PyQt5 (>=5.7), - PyOpenGL (>=3.1), - configobj (>=5.0.6), - /usr/bin/pdftops (>=0.45), - /usr/bin/pstoedit (>=3.70). Note: Depending you used operating system flavour different package names might provides required dependencies. Please use package manager to retrieve those names (e.g. on Fedora Linux use: $ dnf provides /usr/bin/python3). - Windows machine - Build dependencies: - python3 (>=3.6.2), - setuptools (>=28.8.0), - sip (>=4.19.3), - pip (>=9.0.1), - PyQt5 (>=5.9), - PyOpenGL (>=3.1), - pyqt5-tools (>=5.9.0.1.2), - cx-Freeze (>=5.0.2), - configobj (>=5.0.6). Python 3 should be installed from: https://www.python.org/downloads/, during installation pip package should be selected to be installed. Using pip remaining python dependencies might be installed using: C:\> pip3 install sip PyQt5 PyOpenGL pyqt5-tools cx-Freeze configobj - Runtime dependencies: - python3 (>=3.6.2), - PyQt5 (>=5.9), - PyOpenGL (>=3.1), - configobj (>=5.0.6), - pdftops (>=4.00) [http://www.xpdfreader.com/download.html] (Xpdf-tools package), - pstoedit (>=3.70) [https://sourceforge.net/projects/pstoedit/], - gswin32c (>=9.09) [https://sourceforge.net/projects/ghostscript/]. Note: if gswin32c is not on the PATH then -gs option needs to be added to pstoedit tool in Options->Configuration->Software config->pstoedit e.g.: -gs, C:/Program Files (x86)/gs/gs9.09/bin/gswin32c.exe (above assumes v9.09 and default path installation). Note(2): pstoedit needs C++ runtime libraries if you don't have it please search for: "Microsoft Visual C++ 2010 Redistributable Package (x64)" and install it. It is recommended to run both pdftops and pstoedit from command line (CMD) to verify the installation correctness. Building and Installing ----------------------- - Unix (assumes bash shell): $ ./make_tr.py # generates .qm translation files in i18 directory $ ./make_py_uic.py # generates: dxf2gcode_ui5.py and dxf2gcode_images.qrc $ python3 ./st-setup.py build # python3 ./st-setup.py install $ dxf2gcode Note(1): depending on used desktop environment you might need to run: # /bin/touch --no-create /usr/share/icons/hicolor and/or re-login to make application’s shortcut appears in the system menu. Note(2): On Fedora Linux distribution (version >=26) dxf2gode can be installed directly either by using: dnf install dxf2gcode or from your preferred graphical package manager (e.g. GNOME Software) (see also: https://src.fedoraproject.org/rpms/dxf2gcode). Development versions of dxf2gcode (from develop branch) are available in: https://copr.fedorainfracloud.org/coprs/dwrobel/dxf2gcode/ - Windows (assumes python.exe v3 is on PATH): python.exe ./make_tr.py python.exe ./make_py_uic.py python.exe setup.py bdist_msi Install DXF2GCODE--win32.msi (located in dist sub-directory). Launch it from Start Menu by typing: dxf2gcode - macOS: Note(1): It is recommended to install python dependencies using 'pip' tool. $ ./make_tr.py If 'lrelease' is not on the PATH use something like the following: $ PATH=$PATH:/usr/local/Cellar/qt/5.11.1/bin ./make_tr.py $ ./make_py_uic.py $ ./st-setup.py py2app # builds standalone application To launch application use either: $ open dist/dxf2gcode.app or $ ./dist/dxf2gcode.app/Contents/MacOS/dxf2gcode It is still untested but in order to build dxf2gcode.pkg use the following: $ productbuild --component dist/dxf2gcode.app /Applications dist/dxf2gcode.pkg Configuration ------------- - Unix, Windows: Basic configuration requires verification of location of pdftops and pstoedit executables in menu Options->Configuration-Software config. - Configuration files are stored on all platforms at the following directory: ~/.config/dxf2gcode Alternatively the following python code can be used to determine it as well: import os; print(os.path.join(os.path.expanduser("~"), ".config/dxf2gcode").replace("\\", "/")) - Additional information can be found in the projects' wiki page at: https://sourceforge.net/p/dxf2gcode/wiki/Home/ Development ----------- - Development: For development/debugging purposes you may run the program directly from the source code directory by typing (depending on operating system): - Unix: $ python3 ./dxf2gcode.py - Windows: python.exe ./dxf2gcode.py - Tests: It is recommended to check if program can successfully convert all DXF files from the dxf directory. In order to do that please run from the source code directory dxf2gcode_test.py test as following: - Unix: $ python3 ./dxf2gcode_test.py - Windows: python.exe ./dxf2gcode_test.py - New releases: - Source tarball (for both Unix and Windows) can be prepared by running: $ python3 ./st-setup.py sdist --formats=zip - Binary packages (installers) can be prepared either directly from checked out sources from git repository or based on previously generated source tarballs (see above: "Building and Installing" - build part). Contributing ------------ More information can be found in the projects' wiki page at: https://sourceforge.net/p/dxf2gcode/wiki/Home/ Translations ------------ DXF2GCODE uses Qt's built-in translation mechanism. As such, you will need the usual Qt tools to work on translations (lrelease, linguist and pylupdate5 from PyQt5 instead of Qt's lupdate, because the later doesn't speak Python). To do translation work, run 'make trs' first. This will prepare the .ts files in i18n/ to be edited with 'linguist'. Then you may run 'linguist' on the .ts files you're interested in, and translate what you intend. After that, please run 'make trf' again, this will remove tags from the .ts files which are a constant source of merge conflicts (and blows up the diffs). Finally, do a commit and submit it to upstream. Authors ------- Christian Kohlöffel Jean-Paul Schouwstra John Bradshaw Vinzenz Schulz Robert Lichtenberger Damian Wrobel Daniel Luginbühl License ------- This project is licensed under the GPLv3 License - see the COPYING file for details. dxf2gcode-20240509/MANIFEST.in0000664000000000000000000000073213554645444014104 0ustar rootrootexclude dxf2gcode_images?_rc.py exclude dxf2gcode_ui?.py exclude i18n/*.qm exclude *.py include COPYING include README.txt include dxf2gcode.appdata.xml include dxf2gcode.desktop include dxf2gcode_images.qrc include dxf2gcode.py include dxf2gcode.ui include dxf2gcode.pro include images/*.svg include images/*.png include images/*.ico include images/*.icns include i18n/*.ts include make_exe.py include make_py_uic.py include make_tr.py include setup.py include st-setup.py dxf2gcode-20240509/COPYING0000664000000000000000000010451313253251616013371 0ustar rootroot GNU 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. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . dxf2gcode-20240509/images/0000755000000000000000000000000014617100260013566 5ustar rootrootdxf2gcode-20240509/images/shape.png0000664000000000000000000000034313253251616015405 0ustar rootrootPNG  IHDR gsRGB PLTE>tRNS@fbKGDH pHYs  #utIME 3FIDATc` XCC! P0ClJj3VA11@` 0sBM^kePOCbHIENDB`dxf2gcode-20240509/images/list-remove.png0000664000000000000000000000205113253251616016551 0ustar rootrootPNG  IHDR szzbKGD pHYs7\7\ǤIDATxT=oG}w$AlJEB vۅP$_`r >F8K6@)-Ȗ"C"ivB.sѱH3xݙy3e,h0D~~st8H/CNֹg޺+ĵ` ăB͛'Ol. X_ǻׯCNMRB7braA47qPښ|v4ɽwt<ܹcW^|Ul4>?\yp =GN"!MT2S{Ur?GBժU[|)pAvv֓ahB2`p~ cX;;?Ϥ1eeBZWZZ>^YQ숧#'L S~cxR"`ǾV6/ ZK(‡׮ybYT9A*5r5~Z#%Oӧ<2Ge174 ;\fM?G V~ vozpnŽo/j͌<74X% $%Ѥb0Jk5 =زKȐZYI%mI"4`E~=BFEB&) `,cX'ߝ"zTXtSoftwarex+//.NN,H/J6XS\IENDB`dxf2gcode-20240509/images/list-add.png0000664000000000000000000000271713253251616016015 0ustar rootrootPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<LIDATxŗoTEǿ3sΞni @C1B "D0i|21ÓȋP#ojOK !BjD@)KK={ficbҘf93ngW03wok~lhֿ #h˭{z `Cbmz[k u=wK{S@N>)M{>ա~V)'I^a\kA퇘ęط-LaTiwIF3+/W153 E(<]2#5!$!uVG16@ !BGXcYd`,ji֞j bD:^MyN\69wAdCJHw81!2Ơv9b ul{<_uF56ڞNE_Ti=mA[$lʹ8wMXؘ%@D^ck(pW564֞hGoFwmׁ`.Au\ܓ5 r,?!$p{GQP҃'{g !܉nύw#zڻ0T-4 QJJ7(Y 'LJXLx"2XQ:4yLvrƦ02uEQNVpH̲Dm0xúz̕1} gGF0md|T[k8 $K+A8dTV0 10o J(2Vv@RYf ^ ?Ll>I2,]G D"hÓ!h"DS@W.N.-Aw .@9 A$H('܇5H-rkea;Q73L9)[cUe1edu~qBkx1P +)^ {zVT3 !%B.j!%=@YyK B&cY, 0@M`;SU\kC}%@{DxNڹDвNg|M2 G*Jr$ ;#RMH&bb|Lh@)p3 TJXF+E( 8P2JR1 (DF+F! , k<)D q*VPĮ,fdz^FAEQKڴU)@=1B.Rgނk3nRDVނ\m]U,>fX\}m20ٞUՓv}sCvC9%./߼)-mΨ*g5%_-h FonZ̨ "P])%6y۱l3yp3u;:`fT{ 櫇9h-=%J"NA`#l4MC)sJTYiMJ Qۧt[3Ms&4XU!%TAD6"rM7غo~a`nH)?fiXq|X`Zlۅ"װ|Cw^88j)`Kyv)Bl03B}6yqhccswm;a ޗʢed{vDCE&KR/`?'M{pU5(./߼;? @d:3^<z\0C\;_aӴ-tWg8;әuͳg?\DغHc;{":<'14 IENDB`dxf2gcode-20240509/images/go-up.png0000664000000000000000000000321113253251616015331 0ustar rootrootPNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleOptical Drive>g IDATXV{lUݯZE #0PT4ŨaCEeDA *5$h!ӉPGVp( >ul~߽=hclIw~9ܛÈZCCC\d֎'PSScfG"G&O8'%Cv-RE6 0h-7+Lv۝ p:ZF/;2>0dPpn`нYX$DUzNR*DDߜ>toq\.Kw1@=XpUàYîW Ս&-nkߧuȜ;tp TF !̈aʻӦy6?JJ)Ra1[JIJ):xp?Ko;vjϪcu"9sRJ=xkIπwKyBB6؉@X,&w>Yîy8:.r8zp a1V֖*vq"8#>|3,xvW,ӱƱ7CJA@i H޽f0bμ`d0X.87;}FdX4oS+)qGFc Gb19*<* >̼gc֬z onե_tǏO)N;FpR0sTx=8}zv<9mFZ>}YSO}hnitmiM"XI ڢi}^8p8,tMc JJ@T)Hp80,\cLcYc)4)@ ["n;=!d1vgE]S7df~I?|V(ƘtTQ{1Ù͖C}Y:X-l!|爸E$x ڻmƓvF-(BM IENDB`dxf2gcode-20240509/images/go-down.png0000664000000000000000000000330413253251616015657 0ustar rootrootPNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleOptical Drive>g "IDATXWkpTE>2A2Ark-?vZu.A11$$ Qu B-qBbEEWcE)% 7C2Lss>#+fRU>u}eDgĊ(!.JoobaP]4mB$Lo<̚95`I1{l, LӢP%']£bKX,i}0 HdEfa;O~]0ۇVB|cR#@|w?|;ϙ茳[h[4%b+ ]R"\+M܂_r+U E\)$fiFF֯sUimڛflq$:YS)3-5+;;&]C3-Niʮxco( a 7'+3=м96 4D5qbߋn"LXx>ΰUW}=8A;!<^t }0?N4ӑ#_ǟ/{ֿ?ȕS|hh'!8E"aZ|焀OǙjY|whV$ڝkfϾDas^ UUU%z.XxEpu1ro9ug>O]|S `\RR2dIBI: &W$cCE9_m/=>KMN`i`բeY,PA}2o{T +嗻x E$$Gː$^|uk;ri1YWr p~n#K2$YBuuG^v,UnRX__難@eĩqeyTUrꎼ1}uY?GXc,T>둼|!$I$IظɋÇIHm60rLD4}u9_}bcIAQTl~m3>%XɁ1vD1iP, 9)Edba߾>@ 0 H} ȃCf4uGeS9xp h#/'F́ `lo =A"?IĜÐ 8v@ ޖ) }KIENDB`dxf2gcode-20240509/images/expand-all.png0000664000000000000000000000221213253251616016327 0ustar rootrootPNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleOptical Drive>g IDATX]h\UgfkUjz_$5] &)M| )[%U|(nP$--JFlf7Z{ΌۘXPssfΝ#Rl:iJ3kKB{YYg<]ouiNHH%]}|_;v5 #8$R”&LSBmi+9`#aC %)&}0Scា- H;rR$qv#͘X7S'V<4C~6f6>/`ݫ1xQy8$jfֽxC ݧ'eu^"^5̐J~dR}p-_?񤍰A ^~Es:sdȣ?~@Y)H6sg8(̧wV 4¯2u\Y"h&S WnQ(wnm{{[o:EB줦Pp8!iz4->7mq7OWr,"=9@,Jۀ'Wchb[z\?ÑG?:W篶q H]‰H,,vr"ӹ r!cxf{w oMכ/t9Aę.JuR6# ~`ix|0.JB^i3 31_jXQQMknX,#[y"ֻ^Kmxhg.zZvj7\``3咘2L⌞S-a0;;\$g(Rk*djMbkpHd]_ oN^P\IENDB`dxf2gcode-20240509/images/dxf2gcode_logo.png0000664000000000000000000024507613253251616017210 0ustar rootrootPNG  IHDRB3sRGBgAMA a cHRMz&u0`:pQ< pHYsss"yIDATx^Ǖ[ҐaԀF3bff-ffKؒ-e1Ŏb;̱wMІ6!oh8I=5n3}QCuuWs:Nǧ:z:z@==ps=|[nyG׿:z] .~G{gʕWz9K=亮Y2<%N П7a)b{:@>%l߾}„ L5jԞ={cWhLo=}Kǭy6r4Yi>mm }|bn51rA/; /4il@&Pn#ꄾQЯMߘ&@?(hmBIۡlRw3rw[ ;nt@/Gtöjٛoݶi6;͆:&U۽ǎ+:@VA<ӵ4h]jK&qi9 &- ;uIs ^`-z4x?yB+WP9X$^UKh:th5V`YH[:@qMPZwٛojhe~CR/%XIO?-zǓ xvx~3=MzCv*Hbw ?knbK\sl"14o+̛8R2.90|& G6?$oC ii:ӑ^%S%Y֟49p$*5(^ygڈQ!`UH'ÝZiiiLk掬("%4`7xSgux׍% -ɽKC/~NےϢ1QY!:Xpn";=?D[0*$S(nR2Ө{(k-*8p0f e&rq3@1GjF ڰPqMSC(5vFk0 5/r:0#M}+jZ j4%dBՐi|,&{xᘄ1' ^C>udH #-Bp9\d6jTڢy$c4mh%RŒŦA zI~WCF @U1OzCߕI6n#ڻ, 21jٛ]H6#6rjI4xݒf YsMY0" dӠQU58oIEv{'Y "Y´yrNd;@PJ-$p#ȸ;`}PRn,}2i..pKs'I2+϶x3Mb&֧+!5PZĠIz:ăC/N vǶMUr7ƛNOlS'Ro#Dt疦Ք`$`p[.tHfcUPMimctZJ,VK{Hcf83_aiV8@bviiLxFR0ƙ>K~n9Ƒ'K *-jJ{[$4m+L'YC_šPmП18 M/x R,;mriЫ%_q5uL3@HOx t6$7tT_ DJ*I^4nE8E"Ӯ-^AZ^]$,in(у\hy U"]T Tqb+(Z=@a TYFJohî0uK.()Ne6F^$CQmh@%-&PZ&K>M U{ +-ƦAS$eIE>\bx85tܳj1 yB4'2'8[ tmGJ;(ڂzp҈ 4@5>FZrt4T~bvHh%iJI\qv8"5vن $BcQJ[+YRXlbS$'IMؑJkg%m W0 Ű5Ku(hb|zk}RaE4X:V[Yd Hz5&\Qrn&xleJSRZ*꘻qm5ARE'\*2]7 exz@<Uw8F8ɠjJ M M ǜtiue_ұo7M@\Zmw&gU1<%&*#A*mτ9O$͔ЬRH/vgJn$))mvDͥNOH'!%Lm7s3Me0FaWS_w(Om[_)b6osBQgWMTs<,a{.tR} $<> @Cyq#Y4Zt^@fՔ!^ȵ: =]%4|uBP#q[?D*P8nRۍW`"?aeJ( 현IDtHۅPmX-yӊI @D'sR?4V$C?-.Ճt#%!*bREqADaҾɁI '|\lR=_M[D} X;vlCWVayY<2ٞf~DM "WJÄ$RTpP+PbҒ?ɥbȮ<u$N 4X 4N魥ǭA\Z7}61޴WS'omjQ"E. 0 BW $ =hqGbᣞ=V]zƯFjkoHBLv#O*e*:/r! ma%f>1v nEZfgbH*5O$:R{8Z R1,cWoI_|~WolIk%ѴNDi"8y52ܱ #aQ30eomj42ĀHbXcBEI%.m/$ϡޙ, $fFM&hQ)<2nĥ6=7\e#Ү? $Lڛ^l%&d.:PZ#|?D[-h=I0$٪& Z |b'(L.듉$0=Bq^E!Ke%$Pd3 1&ד{& .Y&IKIMR䧅7#M&2-\DS%1c+Bo͐=Gg5["ЇDHU`h--$ˎz v^@$ 09Ca"t$ja[<^Td2}n(mRHc 5%B{}>I}qSjm *ȩǔڡ9)Ĝ@drhZXb<0Ҋ*!,d$^MVFx-m-PײGXŃie^yc=^n@P@sRI}$nF,vWv@a5Ҹp|4iԍ4v>Xo8D*4TcX.MC mkfȏbw߾}C Iw)JRq})ޫ)9x@M'SHlkKZCRJq%!}BMMGLה~Ð䉵js$Ԅ`֊%wkΊ4,d&DpC&bK̂ t 1&a(nj@DZb)y$ՍS,CKVNH۩ġ¬"A\b"= 'u^ t1hInFÎWۣqFxdP4KK<яҠ-[%(z6Aj1r 0wy/VS(V!Bb=Ē/@m+k"1TC2 ADW(t,Ԍ1,H, 34K"޴ 8 iich\WSFIA6YwoЋOfCgA\_}F=j5K]"F D-լAV5@seLrAkKZCJyb*.SZjBaf&i̎-R;QMԛvCǍ"% RxqpJcXټ(#m4tڿQF1`B=-( f={zW2#L &IcLrAl҂E$,hddȊqMo=rin $v^%T ĠҀ`hk MDUN8io?) LK dC&V~'@\hQwUH+%j$-&֢U,jX}^;p>@oJνPKM$I\L`c\XEp1% 5L  sȁ$$[RB!$]t)>7n 4[2󥭉ĥȬ@ tK G:&ŽWɧ}^WVvگ(5iH:U@*djҮSZ:HۀRÌtɻ/PD:*\cr)5h#$Ş޶VT'JM UW #{KBLXia[,hN1 m7GÓd* .!M/r9,Lwlȼۑ`- RyuPi-&;mv=cRAJ)*1TCZ=X3ia qeP2-C7F4aXi HLtcx0lRЅЙc!1$;HZ m%\޻Uy E䊇J2cZijT_*d^ⱃ$,ո|QHKEugEJDlo^[5,&I̟A=Jŭ\v SՔqjl_4cV'I/I.xL#[K~2X"уb(&UM#6ǨfuU@&MHwCU 65wkiUկ~5:5mK`ү DkmK<^P! +#Gڕҕ#k|N$(I]$2yz{;opXZ|O:Ȱ4IEegH&4o|U.L1Li^h:[UQZBIK 5 /(IrƝK[ .E4Y e<Hc(K|iZˆ}aaK nFIB;(4'ƺba*Ԯ4 Q=k #ͱ;RbB&=o*hV&[%Gz-kjK;Q (!Bj}Y MB@*м^y 4/1Oor=qXq+, "@<w鑥u|u0!To Am,f)ם!ĥɖK7t櫂fg*I̫i1q5T]YDj)!jzw1'[3nݺ@OwH0tɑa}ȢR'KEB4xHw4NZUMDVhn[yT #C5$a>J+(©> @)T Ae7M NKhrHVwա_2 Lx8%*_ÌCVY#q}tzm}Kokt RCjJl*jMJXawV#6+2[ah6)?&83F vɃb)jbS_cǎP$ $Hv )rjۊ3E*gC݃d 05xpI(  siÚM&>‘4b_0To*ojWT2!'@\_1T?1& hKSX%0GsM`iϘw?PZ%Aє/4 O&܃⿗4@1ܰ؉Jɗ+]\:FVdfi'7tqmR7RnA s4>7wn)椧䕖g?,a>4RHJm9p9)tBPɷ6@iDA;ƄL/ex`Q@$Nئ4"͙gu4M|1 ѼҐ7z#@<;t+*HX{7ɕꤲMrl)kݴeCOz'> E]=zmsϝ;駟ܼysd3]gE]*E$H FZyɊ#MUN+"ĥX I?G>#G0i5w/iIXKXzuM  -z?F =bkGtA})h z%c#44 nM!#m_<z5%ǣT V[JAEn>]t^Xw7?*MK/4s4d=KА!C0U>OLcncRTK^!Sw%y5ڹ6VyqdF$>2Fy#\R  V:=5 xzKݫFA<Զ #b(ɥk֬8Dʌy+Vr׹n;~I%O~B"ӕ$''#:'FV‘Jt N ^z 1)D%934ciD ޞU][ ԛTC$gI\?6ihh8wц{ƫ$C-kiR\?}"ŏCCG?}c$ΕoR{$GA֑48Fd4"ov)Ѡ@/pbx$:\uUe؍[⡹l[hB#*|VlSi$m۶ :eHmm~![fS޻Ddc$Zvx Wg޽Uà'yjuP"(LVNTUFA$CYb~5Boð[H--ߦ~m G7<`@*޺=A[]9FO G[ s5 C'A(=[Ihb[9T@hYz`=ߥTGkB16^X4mq${Kci ~Tۡ5eIJ}%4)Їqċ~glEǐ(`各I;K.Y HOA܊[Ԭm"FfqcP;p.&%tA<8a$Pz^ҍ I1N>qFrNAS w,qIo+y>YVH^7Yii3$xh5Zc/jHTX"4N;P5 wi)=K4}*u@<@6$ZP2zL!7njgʅz<&`OuL!߽I+1>|E|_U'(A&Ջd _0ɠ$ucR1&& nEG`n5ϫslJ Iɸd敧,qn4%2`Cڶp,_ n7a*n%>SR| y^hYgi&0%!*3],c镟[X"&4CB:PIImbTpƥ_ȵtt[fi,2k\1a+iÄ~>o{ɎrF~8SNO?}G;#a0ybZ0}ռHQd޵kI1P,^?~6GZ#t$ӨT#A%22qKvIĭd&[;@YYَ78JmSs7_`dᅱ9 +n#ێD@ ie8|C\~ᣰ Tvwө#GH}܄)\{Wi'N?uڵxzW@Ņ 2{ D*˧F%7'@rB.|Sb%Sф}xL[a'ҟAqr{ ZuɖD &2/JWiK zʹD(9 Ka9|3λv]˖-'p\`"B؋/$N9l+69t ;8]%G| vZ ӫW%+||ʔ)0398Y vo9Rk<%$fHYD4 4dkdmEVnȬךhg+T#{6$$*21,SHCe5^H|0m:oӉW KAx Rgtnj/Hi ҦD_H{lYl TDh&STI +[e6l q( UphO#/;mŨDnbKC\߉VfH#& QRХ7b+j@m>mfff^^~cc/F" AϷ>x]p<9Xy sܕ]v=K_.b=aJ>l}w$b'SNKJJX3Bsn#ʢ#%8u%QpB16xMC@\M(qLA*&4vy#'~|G4^+}Dd~-t(L3DK\;&^H !g ְgF,*Wænιh(gB-?O$͟o["}>3=J˽A{\s j^ jɏ"=R4n0p`;BH YiqMdi?n>IGDFI ^I {0*Vx K{ 5 IyRݻwOj~JLOMGIK<4ѤH)=A3qB+ݎ0HULC\*N=&ԊLr!@ }&axbxY9tB_y6FuctC^C@jrĔ&! `cW(tǺZݻ>SO=E`+kz" a _"wS94yHdׄkJ/%VmJuMj)ō^SNő !Ĭ=CBAzknXY@0q&s>,GlCحԕ0Ԑů Lh:H_}ţG/HPs_בwmfafARV "NQh1!pG! 7iR55v [0 I mb^ҁшd 1zN@\YaыHp^sd34h /cwy ^>XʊtB翸_λm+.'xۻ/:w^1jHūH[]1^.LH܎cl{JRA"M)j R.gh.-RdyUA\gV'yeUcSȍ-\J[ȚU92m c,uS}= 7re|V2<7to~scF{XX?*2a(A )y8"N%74SH.g򾚳KL@ ͎Tģo$h Uqۢ_)%TYfh0;8TX&N ׌-8iwgRD7$+*aZY0 AW#}&R7v7vt3a8F-! T!~S{Tum 'aSm֮\N2,v19=#xve,`'jUOo;SfGɡecp¡">&D,u٧V/iDOc2u:+Rz:$Tv.҈hȳXxlA\zV=M $/:\#[5d1 `5V #;*?=)0m- 牿;s睋>\)s!]y?͛9*$@K9N&Er7'so^=-_DuphjVmIr`+I ô.(x$6IcVgE4)mLR\$qiY ģ@BBa~VQcCaGZʹΌ.m}G;KqkS}}NﱮpŵY;]~_t{Ep.EOr\o~^~}_~HV(+NFV Ds(&[)[@f 0+i4~نsUZ Q!x05y(J[UزoA*Xlq6oձD`EXBO@Igԩ23tp;k.uDK};{uxDOe/g _s۾-vm[#̝-7+ ǬmSa xUCAJEz˗"ͬHKTK͈D4Q"%Wpb ^FI5=IHKzjcJR [l2[R꽰sZH6oq -)lma{NMlczBoșùS.qל:*Z>] t99Kn)o)YN>^x? !qмTԟi%^*#ۓREJ z8U8U0@ !b #Z'%}C՚9179)q)ڱAyd[]J5mSEZV{}+LA]ĕFdw#xhx;t<j$9L liM!6A ǎ07 NV:~Kd}ΕxOy0׸\qtqvTvVk~K<%Z=SH/4LJņou"CS{ n*+$.ԧ>e5\R&S)[uΪ ]r&Erla{l熯;~֙y;!WG/r}p5ユ+uyBWoڮ]fϞPoiK6F"aL8%]?[[Bgf+}$L6G0f'|m4*A"fՕR*H}U[H*J4a"gL -)8BFTtD<&qi*ANٽ(Lq={Sp?^(wqM|]/t. N D?jVpfk9 +7n4Xc ]64[B*4+XV /G$42[Cg A\J{K]?mAFi04a`] Ri`y؛di>VB$`)^e+N7ɬ"6E$xǹ.4u6p!']Kfk2ѣ!xe0 7nS&T(foi_IXel#5#Rְ5vSI@'#٦0dUgO.5䤜 N ͈a[Y05tR74O}Bqiq?cI_-jt?&/Yi +?Al؆dzR0R+z:tJ'u8R@$ǽ/_.fgr'ǥ4?Iʔn{a{]jLm xjd3/ŰoSv&`}c;(S~KY)q53v&"*n-5j{`;1҈]v i 6~O+C.37R Ciܲ[nc<"چ*6,%šgZ0)$5- jukLU8KO0k,6gmK͓$K'X㱺zŊ_ͱH%:|>9sTvɅ]J&I/sJѭ|*dR?UcѯyPSطoL//._@*2sg%4YxKƒat2&`})Ҥv[a&x"q)[jrHσ[2R1 l4{z-%mWQD6)C9?hhr %+ɫ-VxY*=tkSL!<65ȏ[μws;E? C2)7H\p2 곅G2o|[m1,oV)e &E{xaہ`,676R?V&&P1IܪV@Z]ۨyUِ.[D^z929bYD_NgK)Glq/Dm^pZzI%բ{}[ڨ{~\ y}51Q:?A~wɐN)=ؽ&ex{{NY^#GM 6TPj7<|%?qJ߾}^D}kj.y80Bߑ4nC2/-n۷ÞGb~IA ^6U%ٱmZ5&Y,p2 |ĩvM|:!eOe-4y()qɳ:trv TV(L z|#'OS#9}&u]pj׃gjdg<׼)JC*H444 8q"J7'?o ox "a*HOTTTr}*-Gk:.^9*ՇZ5 Tu$C$KMbXJIcLZi #'; a'c,>:Pm=$*,ayv"߫w[:0ѸSg;/Cc̙3gǎ ɿ#K[4G6N ? *Jeuյ5{Ü=˫v+{Dg?+zV֭[M̬Nٮ<|ƌlJCGF8l1\۶+ 1нsO8-O` ĥu  SJȨW]L^FJ wCWt]d8+ɬqe(533lpyتv-dE5[& m? pƋK?n<լ6Kӻ;r=f(k윙U[S{UWh^Ӈ6zwS{{PJdbJ&kcQƹaԮdċem UۚVcC ה"8gip<;P+xlz .mHxh&K#&CP'yb*8{9tK𮲲r…8塆C?jjZ* ,N;|} 21hkCwԇ3v^^<2bCZU?v~궲՝lWl#c9_ϛ7ofz+l۴Gn{$d_4m)ivyϥ.94r+ǕS`ݼj9o[pK\P+u}K,w̽$ i&[<w p(`wT)((Pw]ݏpC DQ,$(6n!iX.Ҽ]7"F\yEmev Ҽsn! +Hha=Xxn[#Z𓥢[eFvV@L:/AHb=_kaodXHo00Kƻ$!HsP$9$dR7)bK[ qٯ̱;R9q}Cy)^RfҗB;7I,֔FIC@gB OF{|4XS\\8rM54 ;'m ^.'['[Qb#|#V_S;@mΪ2AsZW8is kTw _'dQ9\+Ti-8;믿r"0ZIv'o0}[UUURVY]۴dɲ;4"9 IS XU~L0c$$s0mR0K5iVJ)"C)ILI'5Z%p z 9C{9F\~nmad#,^;ncǎM%IPY\ve86_P)h&fu7!A];59>0w`TǮO+D|Y<ִ*Ư/1ꍷԃ[j}u#kw͵@6x}#}/zΥsTtI N&{W~x8L*ipbCm&08|0Fzw0`=*8ؓheCJY"[6vVJ{۠$ .9W )z^Dmq#!5:֥p!2 A7x#$Uazs `w,@~SU4?x~qґq\ xýLs>8ibBnvOüC6/929W/]sM-LˡgYs>0n@p%ť`7d\W\qŒ]NecQ#A\;CT*|7 AV )-I>RM"[%Ns$w됂xhK rȺKK,P I$9Ё•1(xf,YR'?$fq);>]6S[lsZ%4= m2jEт`' Iwד9*s69Re+5k[ mw|_\6F*6~׼CE=\ѣѡ#0WڪG]_0yS7n4%wfEK &q]FexRwIL)E:m⑼Nb]e0.vK$!U=`F\DMşg9abCVa8m;\SM0 >k5c+{,$Aep|J}'up>Sвjҭs`IBߖm:MoU'~S{O~u"A+Tn$ n@vK=7?tne=/B`HE 2d~%E2yKң= jܘ_H}$zF>|<7{msPl|ҦR@6r(d70 } >;iQܓ<{^$ U *0X'5VJ+І<[O%(Ym*ĻN?K;Iz~[x9R~]aO~jlxG HCXw.qK.Nֽ*;9-<RB Ϸl]QTNq0gddȨj:q ^'֫m]mjH֌~I3^( Y Hˀmk*;N?gARK_ᬔ+&  Y8򘘮 b`VHʰ uylyI] gBUZ)*\J\v@p<0%' bܚJ󬿹`uC+V2vp.I7sTH&[Hs"wv}*"d9<< a"T@|g}߶íi⁸4zQ$l6q[%C K )\S߿?V)= =<v ^ޥ+B&VI8Mj':e3q)ĉ` gw 7"<^(h$]7\p w2-Z76e3MC|YUB? ;~])w\1jX{]Y3[S0HrVo6hĥыE4;(MC!F$mAChb2ƀ.xzaRXkǦd3 ݤ 1OM=hX -W_}\kct`A x#!`%dn 2@$yb1]*u(9.j= KKE'*S[ .Ժ3*y$}m[Oh2k%I'_l[nB`Vdf8nkׂҜGE7)ldEz4tWhYQQP*H=iGl:8HLQy i7VDqj. *sUnX1Xrm|BXP͵TIE[7QHMC,& 04b@~>m K.g` 1>h_(vx9 jWho~A@p(%]2Ƭ*;'ZASLBsϸЛY%y,Wmⶕ")O yՆh)RS^m`ښ 3ouL u@[lMZly5y:ќ/Bs~@zܛ^\Ӟu#;XI]pt+uMSw]D`fȃo;z ĥ:;&mlt/9VQ76R$`(hKcK˘CvRaEz55 ׍I ~MJ,Ir;l~*ώ?>CY22;Z,G OڡB{Guv`Hkne~|4qifyR&N1D5_;pJs"! |s d0fuHId/ˁevWh3?萐WW֢,X[V1![ &*S=ڶ& b{5cngBhzAF -Oa"tʉ EB~޾nk6lG4lЕںlIK5l9zm'ЖӓC"%Fjv'Ap΍'i+kd0AZ *9lVBCF%^/MCbƾ .‚Sܹaxן=[p_[g():#$X.c+a)zB4lvh) IcP4k@X>RF q58ZcDkJn ]l=IV!r*ՄJP8y4+a* "BZ&놔*I00hn]VC1c@ij;Z*t( e -PwFD (8<{S@DKB\Gz֓$6_Xni Ͱ1fN ! '|MA&WSF@rf 1c8F*OvԱ{%ϼ?E?;d"Xq !gBd>KKTXjHMX-mxɀ9onJh@ܰ"DArcRzKt+#h1c80슪;ORFmLbcCXlj hѢ/&gI#E|a)ISXbm 6Is8fJ#!D0HY3`at&x$Sp풄RĜawԴIWQhi!*d?Kgժ*?IO8k߷PPcb(J#4z̕PZZBJi-$fKfg5G2쁹#9̤j_9k@ !8JdK OQaj$Ez5ys_mU~'w{&Si†O T~ɗw}bQ1*Rf\>% L`tIhYϼMBL )GjvKn= ¼".zLm]-'jq7$vK{@_Kǎй3ykɎz|NIcsɋ/g#4 W/Gbi`9 j)M[--<$ ڬ!!m#*{ArijI6$fUՎTܐt"m , >ns9-J|4JX[ 5yNB/| YΠ9]7@RhDu R-ƾzd5m1|X/8 V?I %y!TmK_U+F+g*\XX&<ʫ)Y;Jc[|o7n|UfiT\2ߴ/|NUVxM]HĨH5RRW.J %ߌG߫']QåE,zjK+ Ia~Izew! STe}M20`soUJ63I"5ת (uOlanaƊK zms_PCrDyuoElVE~H*2GVRN;~x I=BQ5KȔ6sKb!g;xvOpLA%?mU0^wz.qXv䏑#kkk[jAd< dKkE5T=+oP+]Czo')0/-.{CHryiUY-姛D8`^ S[H" P+(j}TN87lI즫\WҵKesNi])Ci姵^d 1|7PbC Ї]ÿpoӫ>35&`c⅒^GuU߳lH7 hMC$?cjvJYV+Bp\ؤZzIm\/Iz=U^kd}ү*+k+EV/Z}[> e?<}&u) rgt#W,KFi;v= \楠6\0`zP/eܚ9Wn2գVy ]y"}6md&KlboǗ)2O$jBC xF,ոL-oR\>/F$.6HЛ$U/"4V3wͳJZ(u[mKI,5h^/ѪثmΊP>w\Қ!70hnιښkPǓϩ6+(ɩ꓋6 O;tU6\RJG1];8K^ȥE[ gVUnzYjHugtmݩ[E%86U"oEDZs̽]+2j!Cmpvh6?Fk ^H_ಀImUۦK% Z.=.euY i-"] sSeU@ =iEn5|QY @\<,:kqĉ 4!;w2U8v"_ [=e[YQMvV42a?g2mgyY.)Ά8nf8<,|.N3sƬ.hڴiZQ .zܶw0n 8L?&N1Ggs4-ׇg[nf]@<57<< AmUIܾa 'V|ŀr6ݻw[]s,6(Pj_TS?4"#&/V &8D DvcaU6]6B AwKj:L6͛nj 7Ib0it47#u6%/ZJMM|TҞXϥHDb5Mi8!1c?,6x(Pn$5` )^Ml4tdMxm)88ͭ[vr\ldN8qlK W^Yxc-E:o-'^&2ӡ UH=W]]ƶy^*p;ʘcHrCv meЦr;LѢXGO.[V=zF&.I~} 9C]OsI[9ynk6Ow_kJ?\UrҌPmdi)Ũm`_ѣG3Iؿ-~ 7! w~Dwv[TӬ}1]K2nۭv}[~ԓT%uV_ع?#c,Ӆ撑*ٲE6v#]S" 47!%C,Ϯahy|Mm\b5mqq7MF}UI6EMH)I$uyNd7j[w^p\K|"|c5ygTbqm'^W:Q?FvhWP/Ty\X4UǑ잹!Qہ8f us ̝oi~ Ɖy-r;R@wV y)2ǾA fw0Ƥq wyR*A%bqW7"ʑz,F,WNM@ۄp nvP9Do5b8_#q:IuAB9tbAӞæ(y_cہ8O^ dŋM]}֝xzVdF VLHZZ.  )%a@'DZ'L#mgavluK_hަ*i=@̍P.&+Y8y*S~Duuqr.?z@ _D/8K1lx7֭n] %  c^M]Kʮ{M}6QϞ[ҍ~FC^BLqH.aӥY)bxH1e>ni[|j[]#](0$)HNUI6)㫿&#s+QVo+p_T^VѹsIJ+tHɄ%/AΨ&|9}L W~:^`q`i@fD7A#"<'؇^]]]X\޵,{: `[I4O( dرJ/+⡡T&<$ƱSL\ziJfJ2熀^I XJ*j}-7$Fz5y}w, ߮_b`w58Nu׹v'@\f$֕ }ʓϮ .Va]f\s_7P^qyiq[aN_ מwu~br?ma0w4XR~7/[,$jN3`$wIeFΕW0)?&c&*E3MI>*ch5 g! .uj9)oBKt944j$3 8הdLǧĽ,sNJlyIJI${ꂤ&NH)[2XM{>AƸw۸h~S ΫW7[30wϮCʎ|&H ]P4@9<݈%EJ`nB7Wl%ӊFO|G񿻶vjq-&ӈF3IUH~dvCv>nsj$U*QWd ҉ NE.5ɼ>FC*gV\ۜVo7zj $ .s3>%2)!ʗ]ﲣ5Xg}%ɉD`$XW8hNw:M]@ 7չh@WLHq8p].^x' :hSj+sâC 6IX$ē[nDV: .e3l vYHi"$fj۶m-O}Sga԰1I "$^BSkQ2Sm$ Ӝ+> JR$MVѶhs_ŀS Qt)cI_%yBBޚm]S2Ɂ%qܡcN` gz)}usٝ3rJ7#!T{u]]:wYd7w}# Fx85܊M;&HcިǗXeS,@\Zx\ *Ep+*hS,mSpNIrPکlVjP+pdaC uD)uuuPcKQhM^޲t _|MjI\G`ɒme=1zmn;1[Sg;[tdI^^-ddZjdMIfRX3Moo#F]Q([aG{7~7?Cqӗ·w쵗`[9NWE ;sυ  Ӭ1/ܡ=~m-ܴ0"dX4U%16%Wiǔ$F Ϋ ' [d7q^PT'5>jWSK;MF>mniI ;Gۯ렶F򗿨dȨijNqŎ7q~)FjժN8ip Fd~z ӟ4pԌI v:V1k.Y06o3SLYLz HX֫č[tsպ5 91GM(8 )`~gwN|gg2})' 7iGȇ>vBw\uaj< x-P(^~;| տakp5N1u%GpD]Vٯ 7-"- K*<KM;V+&!-&mSyeM3.8zmW[{5B7g <;U|75eǃSꑋgA}}R_~ķ,A_YlAgqm~1~Q#'f OƒIi:aގ3`*)#=-ZID]VٯS}@ͅ&f8{OՁHGv^ ՔB"UrLjd^OUİ WtR)zdNLZrIE&O|#˶uծk>'h2ĸ:w?$Ӭ '4KNT}K/ZފBHRoxra7 \AQpe&*46 j## $mǕ%o\ ڎ]I 앤쬩īBVG)f[aǀ&ސ):%*+iC5t_]*G 8d͘Ȥg :#{b)WO7^dUN.4'q-f%u*pɐx PY9R GI{iFpN[C[Ȥ ڰ՛sr/yrh۾#JVphOn@}N\^( ׵u>8ox|ȨԿJ)J7[LĎZ x 60H$l[E: 4;4mfɉ)#]b5lsyȎ&Ph_a&/`Z ."+Z%^ wKz{Zv. xjrh׳ږ`맡:,Y8XRt¢ǝ|xߡ+۵kWkƜ^0-Wn|MMMЦB1+9F=L洟 ~G3V5p P-<5 ˜R<@nÌCBb|^DLZG#-<,x!m5oH\Bq dL9c\PsґAUқZxIJrHRZ|~IKPg|H#$ٯR9Гԁ1S?ף%fhpi*ZIڦYKhC-#}VBo_jFܬp)V\4ݍN3?wκz5n=O 2%]F-/^c=u`;n(3L3ŎqRuɓ ', ;;[8r)UC&j16Hl 5.1?M%H<&JS1߿4@&>\jN"A9)Io%4ݟ2sVxh,DNy$~œ- /PL Q!#Å~9m K9[pU\f3&>{Љd555=$W]%Y6R! Y:ZQ"BzniFd縜 Z/6W_}5=L9s4\DHPF$+aYj( 6bNѴSNɃHf8)iդx_*tzs Ó#o"< jkDxl$jH0hx4x0 بJMp(Qۯ j4ŲLP{SV .Xk֬3=ph9*O^aְ Zvqñ@oYH![KVD$f U9>vB94O> {0#1qZ$zp^q5 R?i! Z5_o S[)Aji-WG r)$6ĥ GNYy5,&hh;%7)_t$n&sUsdk Zdz\;q%/۴O1eq3vv-;cO_S^092#SAqVa'.|}=͍-L'?B'j1P-7eGzr+z _TDvƷVD[,f899b̘1/rhWFx$ b4|*ßbشIʐH-雭1#A>~!>GV%6ugή$)qG6q {z5yCI/tTHPK2Wb.*q36lcBj͆Qcdf4|b瀒xmoͳvϯ[pӌ1 z(iM32 Hp5V1WK20Xe4kqfB6l¢@lV'*Bms0d<0 .n%W ʫ)y Wk軗~!Pr Ћaxջq4)h߿رcŗ^㴣EeU>9~w?|p㛇y=m-FNlWRoa_w$5|MկKz|Nme#X\D9YZv7אݐKoeEV=^)ĹDU6 $6 R =p/RVSCYHIQBUn85x3VI1SPz`B=]R{%n \pĈO',E.U)VE[+gĤ.)@ d$^ipIoYihvcK]qޅWΟ?-4b8~л>36n,,))r?ml~7gl|m݂L\2q5<+cSk1VwsoetȦ1K.HWnl[l%K{,/w6//VFjESѣnj3o6ew3*| 43.A=5.i x>?Ss0$ W`s*9 ?2 nik Aƶ<$?g 7%ED[fDW1@\KA MX86H-=Tԫ._9$]3UI0`=tпW|(EEi"?MWudר6_zcP 5ܳgOB]no~rΊӺA,iƓv&pKNOgl}=})7[c-&ϙt;,up2C￟gl)+2lAÆK)c|aԳ0`<޹s'[:03fl19yNWPM B8q:'3,q4F[W?zCR{(Hx2{u?5%3T@H#fu{ 9q\lN4 ɳ>;rH ġ\Вր)H T6:#@+EC)j3ԤY%dh c}$h,Hडe˖nI|Huy~77n4¦ºu6ew͝0g rie)/i).Z|¸ĝ շncVv I&7ZVqSMH_մ" gѩFw>/~;y*F+xZpAO_|y$XKDѣGˑҒ8P]d4-87խ~ u5m~_}%Lԍg 7 Q.P28wNuee5P_WTZL!(,N^ {Sq:uKT1CZ`:o&C0FH@R6:25R.%zrWM?< ̋UKőXM)?$"MRR8>fNYj3$mp^q) j-2%%% 8Bȁ3[J$/h6/B[8c'VΙYUԿO/xe#@ vnޛVtY5( ͤaݚ: ;E`pE]ū_<k96q@s0Eh]}74oHd¥Wդ9(7R+RjN] RI2f)cΫPoa-[Bdߴi˖:]2q ?wǗ6h 4:7qdv]hԧ>dxĻgм~eyAAfܥGkN{Zv_m!S^]<`s*pͦMt>N:irU-[??rh1 +}K PA:"̓0CE*(mS44􉺼 |LLo+s(h .%r&5Ir& k8PLjuW( GU<)>:Nd$g)}~]wzo:[\su'vB-^B,7+ֳͤs^(őow׺uazyV w@ L w." PM]3nm~l,A2;Rb+c'y! =njaWp!qہA?i$/7}SZX#U3rk$PHSBEՕ!Uj8 #Fٯ"\( đ F)hlR }ԃ!JҴE&{R 8rb2 Nϊ@JY ;g[ۖyb|^ m8q=?ٽ f第~ \4Y…Z@Ӯշt &} K<*@㯼rﭷ6d1q/>fc$&RB9qku3ǰ3S6,nVƸS?aSCXo0J< l Ps&IA\ ? l^OZRrz)+@kӸG8sI3]Qv\ TB'o]1lۡ͟\5{A!{KuRjon>a ,+ 3:9qIt8*?i??o_2Oq9%54yL?7?/`*. 4sɚьgh^{ԾM8LsC' ok*~߬It-/,)2P$-qs#z@d-cgՔrH$׊>o9WBc_}VHYbEYEcٛPcy~L* I +2'O,<̺++ukQc (%Km`~GV5778q@ȾUZN0,]&;jJ䌔A}K]YՉ)Ñ#iLlT'Leʋ77;_^>sb]Um Z1r3qk\΢J7,,J/rQ~x7RbJUi3/=nK.2Da n ]^ߕ>jj3Qx;<,XTدg9?POB{N@)id>FSgyurfdft*4;=θ:;1wa~cfҨc;<ՙԬ]94 @eo>RgqfJi;`K$ 5˦U ?}wE;ɴj$YUs)q`}Ȑn=;9E*gz/g~gqg@gQ_gHSq|{?ޣ5}Wh`x$T?<)]9eXvClC#"%x!m_<,bC6)K)a5͕|۳=Bdご^=%ڶY9෡u1 v=^+kmu,>E.񤄡,,ʢkm`; 7I{h„c]s>eΤgAgg@gq?g^o@z8{٠ql2Z=#{ fsX73Ǥ7fe׾1WZ2cH eꧩ 0϶!d6uP@z74ɍ,C_\ī\U, }fޟ~ٳgĪ5,'h;lFfxe4O}ή-~w3-)\|yhxRBi )}a.mXYQ\=beTBX`=)w8ʞ#a $VB~R_G8ʝ\~r\clE'It'"ʾ3ƿoa8Y\YCﴉ ;؁f겞D'Wdue#= eK ,m*]M- H>u6RbQ Ĥmawwy.Lc&M_X/+VFǖ 0i@{]V^\=}_9%x   J)̦wD .|/)k3YP )Q8^=?eSe<ȑp J =c:x$.V./#LĞ,Jl* ^'C3@q/# d}V,#8 .y5#= @zD~򓟤epD^ۉ' ] 6s%EEz}v,[gWROd$J ,)V.-^f>1q<XϮhj-ttmp{)f.s:3uΎΜ'g~|7|1ꞻ5-]-Pwgj?ycq(mjQI ^P`qcҕL@\R|ky5հ }O*>/)Hl5Rc4A|k .+mju'W͓@ޓTXR0sA"wL*w7v64EZ8o|<8_bShFBQ`Z]u%y&T; 65&<1mj|BJK[-6EjRMm6MV)1 ;,^2CロbǙ]rfg-u C&fkܼyV#= -i0)8=8K5^Ms9 F>GX9\4zs1UxoҥKvf68|)5fWew\RVN^2@)~9].5 X=rWWv4ͷ79Vla][eg9ck] N!>_3۹lx+j+$T\/h'R%n#rXИㄠW-Wռ4G2[۰2 Ib"wI84&r-qIBJ^MsHɠAEmGpDe KTD_{Lkn.,,贮'Wȗ36}k3tFf断[)d%$nm4fTWW+ -.:P9%yYSwA`h|PYav+ V\Og@3Ej +FMx nes81U{SIlL ȥ [/\[$!c'!RH{ (6cD.|+:4937 '{?mS\F۵k׵۶]q /4"8C[..v쩓 1zpע˯AA|M='']jj T +qAEoQ~K|3a=۷v'ҙ#Q~是(^ V% ;=եt(B"!.#1x-qiy_|EI^NBĖD>& 0Dr(S]5|p*Sɫ@ȄщIij>AHy`0 K ? AМǁgQ efb1x:Aj+HnzqFsl39)RҗrJWe]^ܶ36`犟^K&8 ٳz9Ԍxi0h`=z6',_W>pwWXBG'/|%^^,#lKBvvs C\qSps1[B`&c '5*4xUCZXZlZ8z|rx8 vV5+u nO c$7q#1@e Moo#YEpn?+^pݴѿ޿ 3v0|qmV9 >W-sd7kK7?pͥO6mwⱣSztw5z5I3KY\(gU;B?)q"~(=ZHuf|O$5+:+@;+vx!Ik,*\^a5c%DP%3ܟ{փrMT9dpR?EpMn.) ޯ]s&r & vִܪN}A}6\WZ‰,e~o7Ff9LtA<(-- N: <# TdD$PolWM:拊jbn- m`TR]X*VV9zlT^'`HK\c{u|D%ض0;udA;Lդ^z)Ihu?qUlqsW,y9zNY%s\KSюs|kʿGA\Q3 ŧ3|h O Wnjܵ|DE[=I|$͚n8t z8ݺifk4)*$8OAA3Πmg 8E$F`ILѴ0K2c_3^r; K ?W2 aIc2XVfg!֋"5af}_ o !*9cTWwB{S])n;ȆG*E,Ȼ`П :7.|+9c: U}j4`تbnR{B!@aYoW-\bgeQeQsNuZS>|$zW׾,K [z xjNvxh;?%]746yQ"RL+&y,qs3t^*IxP =W #ꈙpAeEض+-\}/Dl0geh}rهO>@%lxdI6o{Fe~QKfEK4cTtuMƮ{Fk9rH7g+QnݺeBxg$ ^hܤaI^:K-F%2x}q٬t>.tCvE)Oc24X-(%KP"L:C\(Q*)3[`ސ\,33gfuԧ7/ɩ֭ B79>Γ 7ƞuV+Zd{ʨ$akkS Z-q@\88@ReDsV:suFqFSZZe `71gcA3R#ۙO<Cy!UV@9B9f8JЃ;ZUupRK\ZRhkX p^ f91|4&H@|:!2ga^OϚUӭc9iʂss~oI);J(ɖ0/c|c_6aj OH1CpUm׃&m.-v;3t|*^WtNӫ3ȥVF|^SE/SoSE,I@vXW<wL<ɿ9[b:ٳǥøɐG zuɱ9{h}zr&]$8HB hc7.O tʌ[S1%RЌ/}.-y9{~}9@^v/$qp8|0l23#w|M?+.IWS]f0XFq~4R ݜQb"KBqĘ )mn#i lI ~<~ P[1r5j%{yKyBAfy<̆MXmV]#yK( 8$.M/IS+|KIi٩SFN9YY#/ݷ& vڸ.7g?)y%lϤ _{m]F(&~w=4lɇ+{uqBmM&'Ǖ8~)s[-w 84fmZQmf6=/פc{;- |>{\H@9Zx5%.i Kv 7#uk[;_;K;w%$=7'dCyPűo߾<&gф][\U;imj-s,/ꜗtw~;g*7 :C*]!9lyN.Vf8ѡ 4D. + _&]_]wGޝ- ^܉\R=plg|qŁEczd:А:>5|ق3W& P3a+kϯ4ʙM&ʇ+rBtuA$X1 9"##<{,Q9 #y6QzW(vZ#c(7qxk'G)*y;aT,(Mp>LKhQĥIxBqf׿SOMˋSV;η/!`mc|?}W<ŧ/[ Z&~M^kP#v|Wͽ(GZlr|2<əի AP++ 㙮׿LfB1XtuBio#ٰ'qMqㄦƱ/4c8M[TDF XFH;ƙRC;(T,OHpRcÓ4#}_\ֳ'B{6ksa dg?8߽qlؽEքc8-Zv|FpUn,E6PSl!8ϝoszEnN<3[u V<)X #Pvt8HbqbItWXV _y- lIaw_#yʘq;'99ﻱ/7~)5S֕ޭ^Qʟn"ʞG{9߸9Y5]OӻK6cUwuj^uU$VB̲ HFj CFSa`I>7Odv1+r6J!"c|@#HR<)IpH}yܤҫ7qɬYwot]uu?|FP曉W~O$:u?l>Pl=NQj 03G ُ gFi+}"C JzΆ+L((97gV>dff֦ ̟q5Β1R 1z_u/0X_bo@KD\mtTV xC3^읜K d{խ|J.rHF4Dl*R >pʰB÷IM? $C~_h8.W twrc&wz,Um F -uT#73Ƙ*oBno|z;nw}O^խ6SWN}0BpOu.[.]\ kIЙs'/YK=a+CRAO9b-o'/8q"i HAسr5wⳓ x_NKI'6~tM89"7@\!xCt+hκg< ~Qy=b o(/? ϣ߿o6S:rMc3܃o4?"[ N K٭2krHK1{eXi!X?Ӵ} y!j ]Oă#De|`Aa9z衴؋=,="2+V|GP-RLx=sOKrT!yG=asV]kSz(.e4G?@Y(4 {g#TZ58w嵵$#lC< GjpŊ'hyZz F&o"F1iҤaÆy晑>-CP'n`deevizw8lY6 xM Y YfHx:.7oUW}}{Qzpm{:eƘUw!_ I nm\GUnK t @vx;e "C%j:F=`dM^[SSIF}9tVsصkAɨ̮8;}GY A7cۥ A+H R bQo[g듾Qu=ci1]磽-,&PC֭[Ӓ$;8{@g@TւMMMިyaǥp|q7x#"+0nfJ'tU#T1BqUw\SwRa}g<᪶ܹ~~9KzdYuu- 2d^vTNR+9hh^ Ytʀj#xΜ9l|k~%떺{a)e0YX77_ TYǠ9I1:4|8OuUjYyaqŅEBR\泮J-SRUZQǃb0鄎c=D2pքD']QgС;vHKqtp|'c`D3ܶqV#xdS#eh_bm_9 p)&?r22uʿͱȰaC j-:R ɩnCC/9fxԯ-ʩ?c}X%.!ޓ6ٓvzwr"5d{.e=GuZEҤu,.kE[vxWCkȐ!AMP))6U c^@m۶)Sp6'68vzcoOl"߀̎V(=y@jEAqe*k2yd@-'t)SbF8H0M w 6E޽%q9aC[НDQgr=ݼ^3dC;rQ5ndhJڃ3{9M%N~7/ ~6'[hp z^ňU<;pI[=_Mξstq[!FfKFKs;9EX.s*יXhp659+eNu5tUG3M=@2HI;5k֐,&ʗe{.c)hoօj?=+~tQ/=3ͿLk#w滋d=⁸ꉦ6q(][𱵮0sS,s\:ܹlsgq ر=Ou])߾}çĩO \{F>yb+_OC&NUƋ_}umyϖynᮬ3ZusU: u8𭾀8tɵN M!.콎V;zm#pwp# 6/ qFUeb߾}B0\^";c! ΅z/uix-89x@t_OyS&6+Xwsݡc|\y cWf:]nX&nj]<׍ j_1m5W些Pq=>;UԆ8MlY$wҔM*|A{'WˆPNu1+_7fԃ{zTth] _V#e!s=H35YHA޳MһsJa33Qn1xN4"LXP$YMr@)ٍ@ƊG,> ~-HY'8]Tc2;5}~o9?~x̢V})F& ~K[UXӹS!ږ(- >S%Xƕ D½5\;q!4xplCF ɻv@>€\/'?~% &BG_yu?8gҵB ՉtW;"+7)*p1Õ%>ѩ-tr5.s0Ár=\///3w.zyqwM(Kb:zD7 >n8y4ce U)b t>2$/_J^noeo:'/P{ >.- NRx5g7;*WKwqA0<6c8tWǵ=@ϴiqOJ7mYXD.uOqguz(AQY7^3V>T֐K[Ny/ *Ԟ|$<nجuヨ#_Wp ŋh k׮%LķmP$sΝl $fAW<߀K[mt0xr7+_ѻvL^]q.cjq, 19[p@z:yfܝ j$\ z^HI(}~p@G7E /߿?u>3ffP^Hv22$8μUޑ 0R+Z K}c|s'_ҫ)wR%q ~%~FEvN'0"^0@8Q?]T:6=W!?qR Y?j(J^Fp|X̐y.2:҇{Dk χ: Ry츏-Oބ)Dp%MQIk@ ق/{F'ܽ{㯪˹= سK:Zz&q)/.M j mRNm N%MQ 3#ջ%=B9GQbJ5aÆ|@&#3i$NY:*; Bcuu5rH'Cp$dҍ^yA ޝ'¥Ke<{_d-7u3>ǐ'Uu\ {g8KCkG\iŀ:^A*i~wNTjb=b%%(e>|0~;w#wdOg'u_װ8<,1諯"suGU%+q)N! si{y iأ1OܛTh+̩qvq)4d~s@glL;7;.)\6Z7\լ:,p lCPeʛOࠨ_ 8FBawተbeT_/f}塛UM\[D B[rlanDɤ`J&Fw gb-nМ[UI8LvIGrxtX1:]{ ba"P>;ӶU@s/;tAwjo?΅C#o/;T<"77 h P%+Ѵ[6O.tlE{ m̅Fw{om: ~ӵcm'ڒD;:Ѱ_N'0zHKފt}y5ZAoG9/zGI6WSYYJ}2:5 7ݧl/[zQ} Cr:wr5vx 2-A‡~IK"_ O?xdGK~1 7x> %~3;@<~uHM3Owǿ)j8ㅴ8jEH K򊳝pL&C%h `/T FV$Dɻ}hxm[ 8ٹNySNUߜAs__2ys钋j]ǖ_ع&Uv5}ds֚vH3h&/]ս'i~˺F7imNnk̡a㔡5k֩JvjOGwA.e mgo|coaeO}/<5&(z_xy$DZkkO{ =8MQ Y*8\ӟ#GTNyE*N*bm醊w<И^=5;v`nF3x2lxˉ)srp'4p'ڏ]v%3=9"{˝ Nv~qýN}ϴ|v/T\Lit+N䀤IaQ  aWZӵxnr[*/åy/nhVCr=䓿/3 O';> bO泯?glP{5ϿtǍg-)M@ ]0pVVO^''DuJ,5[?_|1& үfyώ|ox37v)*jWgw/"gZ "œlw(j-zZ9zY!fDdtgW_Y3`AqrgR ԫ-@J;'d5+G9~QP^ .5yCpKeCQȤ>j;16%wH?fo=uc?f g%*Pc6WniOR:yK)1qciiZV9r@7O~QvΙn¯e'KnAEn<{@|5}gf79Z,qUXcJO׽gZuiLrlpT+m(p纵 2ZhYCO4->Rwj9 =NN0>;@=/ _N>;/ b5G#r,ʊ:`"›oo aKw߿?INA{<UE,;ID xnհ*֤kW85[+̈́y]fȆzq4:(OjoʾKeI-ݒ0: +!lz즗{H{3Fc˅h2f=C a8>1FRVz-#D/G >$|odљ,PC\8NE+vXX;LJB1)3M|>o/;mIܨe GLr ?xA=R FvNV]BeH_.̏F,iiS.TL0T'_3b.m %c)#/h/?l)ziSĕX[zh cLr Cȡ}:F-y _❎ Ъ͎Hyb)E]u3w9I4ZL9B3 =E0-l!x UsFH_[B*!h 7~-{vebhưs('a~%P1 qZlcu}FcfAwK.}_*Em, NJ M$'\ vRJB9b$̢̈{,VPc+|&$uQ9fw L Yƙ]mqg3d(RAhc B?uN&:f/ AJUakXG$N>?A}BF "o_9 MTc}:qjQ 123@3H l["؄vmBBBJFm •{YtŐ2}ԡ@9=*PE$ڢH|ߵmts2r@p{phX@Hh ԌɁ? m\9'wkrRO[3jNTI:d"A[ǁ2y#Aٳ>E'-~Rfo r=E^GE<~:Wx1qu16: C-1AوzLpqh+M%2sw9oOLuS +n\#o_QPq?޽5B;!9Mcwso߾}On '7]+P5 $9Z}Az0a)Qq^/ۉ OmjoD*5L-v4tc]+9+ S6I3LQʱ4*}@$347<|J"IDATu@ E.nv/k|*Lvܜ4xsX!\YI0&bpA6 4j=S8bY|.TelXeKiiW|_)>x,.!(hvcTЮdX9'6F,JD#UH>__z%p꒶ j]wu#Fnĸ5+\"m@w$[y½PnC &c˼i+"[)F4w:fwhz,6KJQx+] 9@?F8x0_`M, kM$$^jSP^z58> `1J`w9Ԕ|3aL,DMKĸߦđrϐZ訂U+/c0ۿ Ŀ4hAK]B|| D'N&P?Dи-zb +| F1qKLh!Q'$קh'u榉7xP\_~sr 2PYC)r@m8O?^-+6(O~ .]Rmؐ X:'z~4mNvRUq,3wxz)aZBiؐ*-lpGB-[P:|ДBwwIMQhgK.(7 zU8s$Yw_ q'O"!Ⱦ@[aFp:hxBl>Z2RTc %8qʈhk٬A:%Ϝ9sРA4 :8X 'Q1&\XNۄ8Ab4.QDNq Z K 8¥`1OriǟK]L)WC8ɩ^Mt] 4ˠX>BZDzKqjC6CSWP+YڤRj5F* fx)~O>"qJHHBhC )9X!X8pCBYҥKqm_~!]h 5"|%ޤƬqTA'%ʍk'/=k>lPkѿ(Y|d!P쏎Q+-qlqVnik!hhyiҘ$AYz0CrDsβW2Q5X*]zh#c}̳ 7ZbA5U'eGI=t 4V2Thi*a@uw) >`->S((&ّ`M֋2J3\ۑ|X|bS'XwibyD)MJqT @#ܕ>}aQf-\m4˄ŝ2o g k<,>`H\x/(WX:0D,܂MO5,lDga1yѱI"ZffrWb@VDY+8YtbR"n./~X7pRfS(GȀmXgQSж`P[Q+椡Ll VRUQBB!+m>8W%z}Wx|DNQkР nz\& q[\|rD WٔxO:`ȡC"qG[&my`k Q8 w!Q:ԀC R{ ⊔M /04إB*Cq#@(CBOQbWr{](y ibjHr*ݍGL6|sp^/&*-<:rKHeЉFND1]AsJưg=،WtI!o-((!ӦM#,~̘spQ| *U,SځKxI:`h@aomU;`|w\.nΎJh7( '|`f ܦ8|_( xeh^!]q\RpFuT<oaCpg@qzD cA*UIRC &]" b\HQ$P ^y^1#4*$4@G*%&3N3"ƶǃD׋$9`n=6h=Qu# +kT*u#(rJR*Fk-`_A7,|x; r @6 |ןWۻ}p -w+=*Xd)DE/( "@\ 1Awydm)t"IHva- &~"N^CAM1S!s ։yƒ;GlKO|6<|[nّ GBSդ/]~~ƍہE-| ÕP X v)u#ĐVuv,wpӻŁl xM=7Lĉ|Q`xH-D`f.) 4!."]9F;plH??ǜUژcWQSntVI욐`}je칱Jh/X಄F|9lN% GVLQLZG$ |&9D\isA߹1\&dId!6m4w}ׁ!+fE3@2@xxt #ϕ4H;t_McfA-_Xן{~nֳՃMU󬀸7jR;bRKC`)$[ ;lT ippM(Xr)Y'ݤzaxT p@왽 ԗA4wNї5N'H뜣 ?#VǜgӪ X O;Įζxo?N ;JƘz)0@JݙR"' ͬGiY/njGQ$4??h@LMHzC=o)bУyCt҅ЉD ow:5:>W/޽{YM_$`c{!1=-R {͇ogb;).GLs0Dh!C*~0鲃ɢ|`vxZqnhtig6vCcF.(#WuJVvߔ<{;T}.s߷ߟm.{Eq~ubf9 ^Edze?,X&+@qࠢh* #E$]Gw9+B=jƭVJNJǝ:Y,,QS84)lRE5ݖstM@ jώ"9WQ[-Mgߚܰ{Y $ڱ9kٸ[?w]mj]$SY=̾>$-u&{P,Gm: $璱B>>D B@R)$ yhRs+caÆܹLNp4a.Ǟ.qb&K̎֯pWv.E0RШܝS}eG5P9N5\<$u ]R{7&<!1# 6_Mpcp8QOm::4WE+`tLjz8= ^=ܸcp-w?}׍/L~Q~\q" Ѫ.bQY±.|ITiY+JfM`+&t,H9&ӳRTr33@. HV I?裰^*3l*UjGrHU)@Ȩ_P6i)!ؖx啘͘1bm0 ovY߫!Unؙ^;-bqWtE߯1AR\vϣc! s,JJ0k6[1A+jx-Qɗ3%tN ^AVpQiC2m{btKAaŊ{&o+~o*~˕/+~ZW^ty c"  uސ!S-A,GZGj`cg=Xnt#[7P^[ q ^E0]T\J$Bc o x' Ħ +j ={^yypf3I7UੵQbIn9?ɗƧSB3CƁI/=|]݌;+s}I1W Enu>;u}Zkdt]N@f`AhF+* AZ9W8)B~=\ 6H8/4bS WmlDۋC˪.tHcxPN(P%ƪ }L3j&Gx 2ZU|_P_Vwmj^z,o,{F 1;=FX2t?Jq9|#)ɲh'ZtеʮRf2 VF j( ,?S@I&(܁Af@89z쨱mKўڽT ( d늗^y6g_~& 7K5s9czV]a0櫣L/= \1GI*xt.oE+B*!Ϭi$"UţM/ہ:gl[j21,3O~6,áGZFH{sw>0aMܷu3(%oebCo ͬc6PJHx@0Dp1a"FRj5hoe'G+18D 2dXW%/  eYtguH\&Eցq"a:;'/p}vsշ}agf _5Nd2!jԉQLƯ\%O~ V'MY^ֽleԫKeZ!Y/kÒPc*BGĂP:bܑ&y -1KA( <,&nF?&i-U481eJ8A .o?^W)gü$wmG9]滰 Ivg"iVۯ5/>;tppXϲAP-7i 0=R* ?5LZVVE {s|$]dc1\0F{X&U5"9 % C˧ ŕaW_e$"&gZ]C}γ7$X˔rQ u~Edu׎n]wFs7_W2=|OV90&WSsBiO<URԎJ$sVCXorkCkNML`Bm7&2]g~  ʕ+mF~Ag.I![OhK9W2nK /8ɶuxs=\h.y;)&?}o퟿T?`֬Q3KFvy St*QjE‡YJY S 3qrCU#RX)ݴa)κRepO0q}/O%W_PzMݶlr,\;th"fY||ʙ=>>$<]tv"irLp~e%sV| AlUZ]^KRATu,,2uީ"uF6@v,!b+ML/6 a3C8Y7&_9 {np+VT^};^% 5MŅK⮿*W}TvicYsqEMc΍de%]L(:v nI*U^xQyrLAZqނKr& NMqL"tUi3Q&`_mwC7nOsw?^.u ^i{qD.1=L0`QDsF17(Fj"vAP) [EQmh@%<6&4XYj.]] 4PC/@Բ ]"## V|{㣂4j!,O#ڳ~rMdPkgE(gx5e>g6Naxs4X_Q: | !58~Xtww&!\}r7)o xXx^ ׉0QvU"¯ɖ$] )1\`("Y<(:DPv@m$!68>Aba컯A[wJ')n&p޼y~:"姟~ڇ~Ha) &f?ʻΚj[>O>(ߺ1~|#?U†b;<5LvO )_n6=6KK_64>IU[(loV'>N~11'[>2SL 5â'],ԔE퉵#2 ukV%2!pK<>a2_3'""9/yS?PAU g?骄Y;esqG2!8 Q>P]cKQcCM=䚍1yQXd(4w-?/o躘f5އؾkNM1&īV>m w%HrN8VEIiM9ҘjqQS,,_ `5,W.>! 'Sځ-,| {{oѢEY!uFF6pdNJTU<ƶ䑛b_' [bGJv*8>x+OUWNCRS:ƙW^d~ϒT5mIX͇e,q{|!O򜖸8@y6ky7sZq@9q&)w]p?8y)JIF XLwLJ$mG!Qӆ2/7+h),Bą3kp'Yܷ7=7xFk[| &x~]7EF{ dxHFZ(=⩇_霏R~N XhkAG@VctG;9ƜE"sBcUUELzB7nu!b#خBMx~I íwݒʷ,ݲ>9'KgMSN5O0];LL'\kaddBpCW;BD$!qR_qNHQe: E ©q8+&>?C9gJTg3 8%*ȟY(oov9 2%nwW?\HPhv?/D35!ͦF)tuQTڞMUZZM:P`Ơ}xsfFdo_U*c`?#O[84x D[AOCPy* 'hJN^IҐ$iV7 'KBr9q9 )N)QGծpRI ?Kt(U`ZS`dP̄:;֖6Zn*mF;ǭ-=d;x_t߽UYscI"Ǖj왶mvdgG̼.Ѵ]cD[/p'oQJR.I{nX4?&3C@%Ƚ("̻h>|Hŧ GF'6;$ՒblΤi0kGŃ$iT4)<,WcP/yBz%eSR@nAs8(/Jًi7QԆ{ҥKۭ᯸Żvy5"xԤ` y1iڲi;v^6XEDHָ\,Ya[BB(먙23.NV5#ꫯJ駟~JQr N>L7i4p/=Vgf(VfyS+Bs [E=jqx쯀!ZYJ5J=lҨDi~jA1 <_DqV#,S3:Y*JWW.=ߵpmSH1O5`xNx8Nj KsO3բoҘH5x|~eq1|x /=Z:ԍF?|pijO ^*qYj~fKU(4rn8vEB/q%9Ruِ"bs  RZ uRS ,1J+oAfMRF'9J^]w;'\38rżƘe)Zlk'@H\.v=dCCCȾf< է$~!^?Uݶ[jcS]93bEr* 9F8+2E`Q ٪2. d{<.*reΟvp7n\vv"G7rhO)M6*a(X E# m D)2zbw iG[Fm?=waV,oPi'۸\8找ڒs]?rR<䞘z/{".]p쳝;v`Iitfw 8^WnKV6 [g82{Mp{ 1NQsߕ6[F-u[ŧLlDp? +7:% W)FN"Ec6lŧ~{r=DېNRGCrhv?%2i0(f3iL|N[ NϚ_~oWfuEX?T;rsqod+ bܞ3KJ'u`Cӽ2?_ɞ?kyh c#I x޽O8ۤ۷FZ_} Y-Nid/[|\7Tbu!ܶ [ڒ1( S|@%^InN3:CEbqy&z.b _kXս0eZ &0_!RP{~˗{BxceZg6![cM6Xz=6, W0,nwk4r{<ܫLkzN"a| ޥNpw?s 2X=wUp-*Q\>U4u5Ͳw ibawHG6@=H5xIq*?53AA#Ta'Qfz7DbMV7jt/ʷ0=+LM1oJ;UNϾ! u ?iwiVţKǘ<ѦxټE?-Ypk@$z7; ̢soy| [_|g$q:(Gr{kmtdejC2&]OK˼+VZsYcg,Dz/:E;H H<Ã>n5^YroNqOSմp5Zxa}VE^6o ,C0ZԒ,Py~iPTR.[לPZlp8#\nѫxF瞛;q"n QI)a[GK8aܐTMo8nj_;8k.SŲQ:ofڂTё B#7^+h3;0sLu9w>ﴗ_5{" ;kMd}9)&ۏ.ٚkTuoXE`6.W;K8~.'Qȍ1}Eؐ?6MJy']Nu> _fMg텺k-**@}Hk ԇ{i'V7UM ZkFے%oACΉ즎=┄WͿ\'^={n߾KcVIݻ{+=~.l?[6;ehu@s|Hvӣ^@wzT,mn +A0'O:d6htcFX~8O~GrpqC "曁Nk!J&MB:) ڏQzɼU]5%40:#z 5k[\M@kpRLՉ/?[zbZ^XXHl-r_2{[7wn}V ֢If\(l0iscR1&)/&2I>18ZbT}WM>m29`>|ecF5iNCTCz|P+ Rԭ7d?!$Wş(P-S-ћ%tn3IgbCT<4>(R6d1Fvh,vkHi~H>f`wͧ=pWw\i޸aD3&Ok׮-Bgke4.ӭZ(s| Pj@\6 zN;6L,J!RnwބW^Ԅn ׁևv󍶺%| V#F?>q8gddxR2Ǖ?+fsk %ֱŢ7!;ubަa:(D->/[/)28:*HX?|Oϱ!S<ĒB088޼yb32f jq?W>*mbnT(ވŕ ՆiuMg&sC:P^uU]@ ].v =5gcBn !h]8 %`>~gN)r!~zkPrn'8¾#tbIϣݭ`e%jš)(d|/~iٟWmYg&113g;#Ů\.8N=(I[Wj}4 ( DPj܁r>ʩ`1!y(HpElhgh񖏕G=O= "pHυ| e G+ +]kqtiƉ'qhAwdz_?ẹr^x"ʲGU+Qm gV(bJUŖhsFF--{kÊ(<7Vr%oU^5R-O)iZ0;] Χ?TtצoX8c-#n-!xA\O#架,0W1Fgk*[(Z;rG E}ovسsݸq#T#kfq\⟖?NP;%?|Yȕ+?4X8 [n @]X><(&UMg۲1&Q+ƙ d 4nuYk< ~bU0'4%㩮 4jW($#+^(O>$Yݱ7-w֭[AX)3z׆o=YgOr%k-1HenPJ}D*M:aZ;"B?xP}+b!-^N>x=>%*)+'!qa?[sv0v97KW[e\0ywAB3oޗ3⽷f&8ua, uL{7>r(ISOn8F$p_x4ӷK_)Zo{{ҽ÷\ԳHg&ķ8)Xk歷Z+v>_|>S w95uFe)I$sҨ1" "S0]HӅ<fk-!,1Cz]?pz@y@vϯSʢD).<˗/OOOi6$WHq֞~]8wݐ!0]p*c{o >v,0-G!7 ~}O-< e~T'e_TәhK\fzNs|&{3jt[cnH6ŐzEcNr944Q)jB8ǔ*FҨ"bU,*B>HS.说CؙG%񖌒5G%{pJhSC;9lRϧ/T` #|$,J6Ofߴ.W.Iy߾=֏REiW>|OgOvcڤ铣 sLAtlY5T3pn?/* G~ p|L$[墓oXη[$,թ4T!jwAEy "O3mbTm5wR|>_BL;,qPCyTRpiQߦi:g}#(k+ɎQȄI>5Annرci? -x:FW`ɡW\YQQd:7b+J Dݳ:|dۂ=K 9YZ\bх Yg37K(w'B.cQyξ!EKBD{RC3tk5Ͷmqd)VUF@i9}{ 4ZCmQz0y9fď؉N@>x7ے{]cyJY5 )kg~7a ߉+B}9O>9''M4{J빃Pxy׸?:%::Ww^e%>OC;w}HaFZWWGgUkA7~x(N ? 4oԻ}嗈X-Yo߾|]q<+}MMͺuPBpl]YĻɏTե^Jҟ f.?ץ444gĉ`:U!LQ-\}q c+#-Lx4we^VyAA΅|xAq/\񖏕-~<؇DIs.[(vLsݲe lqyhnE~4˲.luZHȇ BF/{:V߫76?(ovN˧r Uİ}8l,ItDay s|xqQB.o{1}G6mڄ/Őx>}Ȃ0V\qFUPNȶ%粲b.?..P.ϚN. l54FP6}ڴi[ pXY=>eΠ8:oo\0pi ._@qBAU>n+;w)s3 wug+x&1FGZ&X<TKDA6LFC2QHeՊ糅oa1zjj*)GőR^٠<|'ukBN~4FZ5]DFFzcEc66T.!qr-0x| F6^{I"$<7佧vLfk!!c1clG dc@P 5k't>'^]:s0ùKJI}Oo|#.<>wo| |#td dxf2gcode-20240509/images/dxf2gcode.icns0000664000000000000000001473642713413457762016362 0ustar rootrooticns3ic12T_PNG  IHDR@@sRGB@IDATx}tTٶ>R^q!@BwwwmݭqݝA$ĭ,Uuϝ Mwќԩ-KZ{m9D_z%h>ɟdv!Qe9lΩ$SŞ|Ń4˴Se`^$ɱ:ǂr5 4A5ԙ!kW!ѷ|OR)i|OK&aJ{kleiNHvFvVv!qu%e˃/O/I?^!y/z`5BVAȶm )aIHۈi5pӆnǻiGڃNͼyرKHGFx \HHf+!gs]:v;%DWFWQWO?4-ܹx~Dy): !o~!--~lKHU ͜B$O<*# GKUիW_D[B`%QwJD CYC<hG(7ҟCE F(X9Q9]8>ܧ9W!WY/}!'|ڄn"Fcx\Wb0 A_ Rfuv ªq80 |zSMȗ#_n|CʄT OE&b4ٚ*gWXa>L7@v-{F́؃VZ RǮho DwBF5Gg/x?!a'$<5 oJ{{  !%?ϊW[-Ix^.8?y"xDwP7xVq@聀C[#$b|2 S/sP2j!!A+d6Bqh(+0IbI"Ў&E1W] ˩ Eds]fD&U CSOC"ׯߜ= l*n#]"e.ًX-T2ZCعϋqV6>yŔfiy @FHg_%u]d?(KՐK;;REVICӱⵦs~4O7!=jƊSgFشػͮ9[bvjxu Z:Bv5>!?֏7GLpRۦ6KR9Bq1@1h2€Ӓ5:' [L )6RɅ+@15,Mq!ַwF܀$ζ>Es>QZsNv!ک.c["ܷAooId'zxbSiZgQYȜaqvP!/:mL; Wꗹ]X"]g8vj@z_n'E7%bM.#2$%J荡hY_?ɫ)o&29lU@c^A?Nob 9xމ[EH]gNzB.S3?A|_er$ܐB&'LN'dn@W;drVm78~"*8zr$ƪ23A";hPO}6zDknGhk_Cu0rnB$)/9)*ڿ wh #ҷ~ >V$qQ#޴]e\ 3u@4L&y{4rΞ+< ;Ę`>SʐH245ۇ3acNN B˺j#Zڛ[ Oވyل5j=?.m4:xh; 4cN ! ]L0w *P = rr9mA.v:v2Kdˑ\(6ˬP~х7 ˲Ƣ(^"ǩO8t@rk0eCq!J߅`J `7ڏC__6g@jplqp<`cjjyhZ"[ RŒ+ s[WzL;zݯa:ٲ̅ڈDt1O <|.wB9/)؛]= e_ɜzn*=ʿT|>K> m3FAYJG+lK8m51IMCs'էyJCUկn¡<җK,]#;Y׫F^&ΣLeYi:wB'3/a*L||YZ&|5|R1p xt Ix8]:xf5B`(* ΐ Yߺ2.uԋA iī !xeڃ/Bc[3<4p#EiC,>/a ~"i5tQt^ Ib?o˪F)g_- E9)S+n/n^!};#穨Zo3x1T+a~0F21L]8NggI#Qkأ yo73B[.u@s^=$pQD¾ 4F踆r4`!&RNjnxjDqg`,I9H܏+R [<*L.R=[sklq⏘-|*2=t#P)ab01};*%sZ5TpSt,o{z[g'"5170 f-8]Xiύ早Q)*(sT͇=I) 䪼CeP8輱!fjhr^HO$3]xs#4x&'w-4Vm%1}iaU5s C僼,X8*&p+  tb2dVB`8$,*放 ;f ,_!,xOihP'km+GYOLȍ78AH=;ИD zJW #p"[zgMmnn&P4.73uVX_b^0{ERneNqJL!iEz@xioCQ9,bh)r.,JN_λJm(HEi83JdqG)I'Ԋ>gR$I80fCpV]#Q%w@CL 2mI qG<:(! Υ{2a\֘נZ?`m9P~ak(K3! ن*åneJO ;_ػ mƋ=VDsU 1P'.ܾ)lГ-.\r˟<`#D3,O^(0ڟػ~ږh{W Wp">g>#H|7ƪ~7 3,yψab ҷ׮WA=c,Td^rZe`lE Σ]~RI[()AֻHMk"5jxOT T}'d1~ĺEP: .<>䙠O%Kv(ՖB]|0GbCRB߁J\aZ3EqGdu\G#.A0 _$z?k_jzYHHdK眙fy:=J"""z l.Ob/o 9sh |r8n`M~:Oӗ)" `sB<]{_Chym1jH%Cjj> r PV{}@(TxL0A#/UȒ+9Pi+Ю)YgK'aE4U>: Pd3b8~[<t8:!&Q;_V&1  xbK?*'tH:[ m>>Ms.V[S@Jo#aͮ1-6# 9t XCi؜}{ yGN:"QxH,JXI_/͜R{Ho|P[U94 kj0-sFn P o(|bR$8/ʫ9|jJ(\޼ pk{a<[E1aJe(#sF^jy m&| ʦrx>XX`?1K:ܾpNyR vqIf$[ ,/w2Rs:xƿ@iӇ~DJa E*? ͊JLz/U*/ImnjrT+*@b;OpN,m8mj>A/U\`rqtـ5F,ʃ0:s6\BĴ8C(~SVl.ה_zw l, *PeJhVq~4 >q˝T_ ~Q:殦^TnE:(V5}uXI4ne*C*kee(FG"Я=YHam @۟Il#? ADiL=|^<5Qjtdh[{Y0T aGK@+0s}n67*; d$/ #tZk{Wݺg` +m/F9Ki;0ԝ1QL=@8T e1&W_ WJ(v,i{vF苟-/X ދ k[jPH˳2A8B/׻ gȬ7YP{(kq{Cmzr39A>+a*W(m*M Lv_ԫNra[k /+wg9/&+D2Q7V;ɬeFݞr) ia?U/0C.^`F`d ea a&`41=i CӦ:#eB{,QםC2L,[ X$&/PSSW,G=nCUWX9U9~8?!46Fm_Dxr~;4(pBrE!BF9-rA mLOzS$@8MĴLIrL*D~.#`hwO|H_ϗ[7Ta^h["mPp š}YtI![\t,9a~r@ I2TywlAqxpfrY**FkpihV*.!2nYt0kXx:'JD$Qz.>I|AΥIBRQV7ob'C6NqIsU} y\L'f|$~C 0pmC9AN>>@a1֠)@ceC3sjq6YpMEx/S[VA;1eVivJT<ʗpO^ m]ҚڈphԀ ~.8ȋ(x_;˅͝&Lx6.8^xGqtY$[(hf >7'lU܍.nQddF$H HR|4aVE.VP[]=l6G!ϥ8|**a͑¯t3J? PV Ad~Ryy~!5`xSު}k5ZOw׎;P?Kr"H Qo#[Xt$' hz. ni8iD'̩pO1!F]ߗjtÄ~f08ՠeWPyf<|hxi7\(iIhU\"\c 5Tii%1/<۴ 5mF׸gvKh>/UWO6/QoB_/H{r`{f6O- <+Q, 47BIYgՊ(=_M˗x(3Yjd&zvcX506;O E G /Al * ;p^ߋ^D4f~@dr]!*PPS6z"p*#G˕񅑘-φWdac5#vSrYȡ+Ġ|K<fG QweXu? o1€ɁM$ :wz.#=f#ptvM,f]?z/9tZ le0~/<|qV7Mf@d2UFXEd9A|dyeȶ`q?C?ӛN0+>]pK'Cūx Ƴ8ָx|9*H:{Fc,!:TB7JGT̲@2bcM L+XU 8NN+%uZH?"tU_~:eOp%k8@Ӿ|P76-}gW=w g ϼvx.Aec[5q+y. 2 stI[JҼDZdy}<\?Z*ACwCnZ! g{aʠzv~ \?C bghiGV1פ ?T9Fc{>Q9B~pQpt iu1]%h6 "!D^MO-އŬ͙0|\P\8vBQVS;s2=y@`wD'4+WG<CX'1R09/JMa_3 ,פ5ܝMG],")Z~vK8L?/xOm1rqe$eeczw5 ;u X'[ї_ /L-sMq7kI$WleI?ws` -]YCJFqSLyV)p}}*}!)WwM.A[lj9|_̿Dir8UVG@`_(Fuc ߪHQ4=QUs-"B ^h+bLP0V$ D6! Xo⮳$ZW" zUTÀH`nbs} {1@6Ur%, o=b1 /Sa˖DV7j*cwXa OW(pyv \*+]+ 9S'{~u>)Bm۠v#v,} -4NpB Pp5ðE8gx1zh7w}BdnGxg/|zۥ4܉V[: p^ CGQ( ٜ>|J 5b;m7炟f|.L/ a܎S2Afv5m@~@i3>^|~0Ol ,W߇Of+Jd7 BH9RN_<|J͠f& Ԟc&Vk!1}\PxMw(?>6߿cD$ahH33Aъ(VB<ղr {$d)x4;|9D,=@Q^1)I-MCr0{e- @|ފ_gUWD H ӱQ#YVWc%Fd0k9Bzoޅl}/|q=`ȫ!ڐV`\F.glИ_"SpyZYz[*ˬ>m[;78bh^@nۖU]4O*(|nfC08R, :y;-cnUcI#gHN\+mDz [>O5ghM)kP;Yl!f0w"[6nݭT Fܝ]=w8B@MMM#x>y*~ #&uwCL/̊{O3E֯4 @r}x!#+8*b(heFنTT_^f`>u~ =G׼ =YQ>bnr)~t-&dR <{.׀6Sk2ôl?*~2}2]"ynV΄ߞ^&PJ-&p "\A6$ OP>8nn[l߂PMㆍGʽ{* jC~{|a,$>O px<z=A<KSt[G2ѱeGSº!սj`E7`d(7R4z5,=|1j]aoR^R0EG@(w{CXcc f X@ c6d/{X|RBꛬ'lKg-\]lN@Rk>Jqa#؍50Cg>İQEZ(08;89Bs @ml_J{$%܉ʗjK 0] 8SB`% C x,!r~Z !; q=\MwOG!X?|S_Eds `)nTLWPOOmQd+9Q'7 ^(6%^OB lBA{A;xm[Sa`;1k TکS}[BDF H %Bab55zMQ+cone2Dq4_BfS,y4NrvdGԤt 1w3<44ʹ3QBF PB%%D*S@)" W%yP;#@o%슿m#i!2O|R rz-xU)q1-xlhڑn##%Q~]M*450>99ވS)"L{Jl9p@ ~C cPoe B y)A(A 3%nSR<Jh%̊QClelbR_[.r4$$mη~4e#k<ۑ d)^[:+8Qxe&נ&GV#މo1" C׾zfIDATr(;~AmJ`|%%Q,J`WJh-%ԻK ǻ u ìΆF ʟaUqgB4NX9A?)2ܪU!]4~E@$JN˧jY^< ڎmw:Jh$%ٙs(?Q¬" ~@OoJ>%x! (!"_OAPBԝ6$%@ !A XR[Eۗr,.bvwx'++ۮR=Fq{io9O tJРBK!%'%(%BSB0TRBVJ%;%qo>}x:Y1%b7~yB奂\.1SD\:](z6碷e3!s2wedKM N\(T%K]H!r=rUKhNR)Ao(a1yO @@ SP^S’V]))(aH SмW=ztt`=C ,ܚ5o+~5GdY0mø [AI[drJ '%Yi'l#Jl7SSѹxɔ腳*'ƪ[ZkQs~}ЏK}O'c;w i%ˣ*\~זOĶ:5xdY~k|'pE+F+Vƴ5~b %YTQ7)^%{(&YU0!2+)!)I 9(Q%42J.S (!9O ^q-%$ (a̜D !&%(v_r<ޑA6l0˗_ 1CӐ $:ndIɚ r$u6w@r|G %fuX yNۜ|o_? D G,ܭdFPB*qH ط(}omvfPBRs D?w}5X,d O!OpW付`k"FN:i6=Ɲ5u4^7C.Y>lB&׷Կ(ϖd,:79WY QB.QD 5)!7RBNtNx]!%$O%/\J.UBYBYBkU)mAod>"U·";NgגT)ļWI@y|-[t" J_͌(3 jK( I'" wPp;!Cq^?Vh堣VJ(!/W&!i4Se 0J;sp3>QOge"=8*pJ8A'N/ RXA˿͈˳!秽|@R"r>{k>/؅Fֳ},cq ݤIjUeцN^{P 3h#}|JÔ0;(c 4Œ}YǔM LO}? rނ<3Qf)^108,<4jy'36542CDɮqmzx?>0nIw~g/!/ԝd , zӟԕ°9kϖ&de?LЛ)K#},_њ7D23%'LoZZLME!ǩ51R ¹ŇYb/ Gu;4#8#ۉNd.I!Uybbcۇ[֜෢БV\:O'AEy8zH&]v+ AJɝBEyˋ׳z`_mc]J OqH(PОkVhu@\9Vjk {K]8Js$aO. FxZgv[waHH"V˻o{G$4:iNF|xX2F4J.vZl E{)azֲUůΥ iR+Ml%nT9Kd4wR"P:}|tO|uoCџ/~T8xb<̹#⳾>_>JEh*q!K>TjmoÑ蟡ly]u}RlԲDMnO{FC4!N(˜|*p*92\{M]_^m± i>̉pI҇U"RζaxnԸv]{|^uH뛁nZ,NJTQ;ҹ񃃸]qo"cZPbR'Α_t)#;ǫ^"~Rr8rxw70h_9Lߎ^t-媦7[0!=)xB-뵐S)'+ Bwﲻ.+,/@WT%%#KS0G̴'f QS "CewoQܹ3ΙsΜkn-:<50SU8`Jg[,Q2ZGR`.z"dӉ&P샯iqM%YTʀl6SHe!Bz: 򩳦E g_a@ < Ə ij?:uuk.>~6bO^M|k -C.tȀr>D8-5}4Gǔ _m6C, VTC׸~0خMN c\măh;km,=  ·&|="zT=Xpv26H)LA >V (ׂPYؽhdY UiXuNhς$ͨi.!(d@0N;[N0^y97TEJ0=c]▩ =%թgBK1 H8\16kdҺ3WaGam]+D$_Bd|>zVQ|' ^CF@BlmPx&LB-U3;) wSP@7v  S.ܼ1ׂK  D`L wը؊ Wp<4ۘVq}e@notp]&6y_-~>}]hO\) Dg#]1| }870[0u~}vdnX b9PG#4 vY._R cy3p,B6|i,pZ~v K+MtȒV+]TrN(*Pb3pu6JY_:86-IxlWX<|`։M]7i"i'V~j<|Tv|꫊SwՀCwmkTzao0C&!k'If,DZ@{Ynݹm| A), ;CJQBOܚx<a.UY|Oc#6gi7܇(]82y x*1 -\™D{iG=6F2X) L&iu]3!kȧ\{uF̪t8_l=>Cveٰd/ĵ$`I;q S[@"xgb2ȍ K/ׁ) Y!D~52H[֑L)sg|`~&mmm4XN Vha V2fŻ~V-L|$`B/7w4`Z|8rwҼ|cU1tNCDOh<ƅN{"P_Gae5C $z}_/oG/q DQt{gT4[=9j+@C4WCAa 7 ڂȕGo.(W"t&8_| !\2& +M ulTy>9 s [1"`BQp,<=7$d -|-2KX_\wc߆woUR1Po"w$ "@,{Yrhv Pn(x7+gl orLhmY@~q&t&t-I廏uwۉ?吂9IENDB`ic07 YPNG  IHDRsRGB@IDATxU{=y!Ð$(ŀ((IDDQ$" J"a`"wq|A_=sse^VZRf\,Tv,Pt@(UnJ?(yl%P;(&R?uR}(U⛊V:RS"V6 J*PV@{3Z@rba 84SpJ஠iRc͖Y!|ZLRJZv47L_4mVYQ,_#~iVLPq?孫tr,{5ꃫ45wf0 /k0.f-+D9[*,0:,_&~ihWuLs`043v P^+/)ۓz^("Pg;J-,PJe|z3MzեVVP{[3"aJYBW:SLęnZ>*t jz{@3?&TֈWj ZoU;JEVrk;зSE-zkDNLoBܼvJM}bSSbE}xμPw [VzDYfJ}>q>|S8t(V Z@R(urZPЃY;~X杵;-P*@ :Eo @ " 4\:3K+SO)kYkR jQYWf]&pPdTN-OjJ}yΗ//1D@qg9??J"(?OgZSO! WJ3$z©:.<صM#.<8IZ=U_HVZ`XޏL-(+ja(xjxb*Z' n_dRV|bkUʌ7{_4vξ CeoùlR߷BW¸[|/&R`%sD:m8~q DVoU%4 wss( XbC@=ރb9gGTCTyjλ+tTXDXeQOԑkG~>+\V D%k6(9W##_bplC(us]ϕ|/*x RgϮҤPTEl`l#Oj(H27%015Zɞk8>w{(sjӫ]ţ*PxR |{zFx*(UB٪u2>Yʱ@+ocO'JÃޮJu-ѵdW<,oB 8E]R| ,x0hҞ1ʆYy|ijل/ 9I:iR ^X\%#3KgH@W(#H?'mwy@ mڑGP@ O[jDrL juAN,WyCWP=(Tx Bo:; }7<@XTYV̥'׺,.K Eq{j"JX\NEgQxjzxi['}nC^OvD"pE>-R1D_'Ğ径bPTo-fAwK`ovvޞ`@;.1>\䵸l;wC]W:_~u 4>rc/z)/iRǖy#tq~Dy>w%gT|&Bmܷ]"cHWy! #yle Do20aGf Q&ݞ|h%!PrWLT}ɥ^TRfl 9?[rm]?Pf a)}Y%Sϰ;=skFolv+4 v$syvR_|y٣JiT1u(@/vt(3aJJ<-PjӠR}jM=ք(P귡[LKkWK[OVY'u/mX kSb[XoX1v3K J~Cj\~jFa4?35|~WxmaVGlCr_#| 2փnE/[؍ebHȁ%8ƺ:Dm|Wa? s\܀^zG:3Xu Lw YGDb?~>rtI |vaYlo+xD:=s\=.=-C T:FXxtJ jhZeY) ~+ArᷞOP޾}a(3 n|D@r§Jzs}Gth饔2rA(o!??"Xyd%`ow}Õ:Wp+w3; cXo c\ mjm>%~tp96~)ʹ.=gܙ7:C?E0Mb4|m5}B?m$5uw+j݁(@e_ (;;B 3n#v6,B+BsyDTcv+ݯM00鿤G!Cԯm~mksܜѻ4~N㰵¿0ӵq0"PU\WN}ԓ˙+ګ99k{Xu ∐b薪76D3)KŴPc%)Wp B;YཛqcM>}- 3g$Zfgԧ [szb\Kp/D*=Q s 嬯;bjG=,dVT/i*9w~\_Եt'*2!%:ŚȪU5G*0YuD sV{g["nJ=Q?FZ=yXg jݲ,"XToz R\ $PY@C`AG^}#3-Wp\`tEۗ}(3, ^8D,44`9RlBER%txB_Al;/n=q1Cf-F}m W>A7#|Kg[CIc5$%{W#z]?[hu{}SO6Gfޙ]>@F,Qd ]06tnqwLo'z~(ڊz5;6+ =Et\諎sJoNυizğbyE\6q aDRK] ٟ ;* 959O!qQq=XyKQ }hR|(kN4[T;m7_n+G × sg˽r5J `tn&",U?w?f)X~1X_#Pj̠1Oq#|#2FWjrɥ'ӓd*EcebBgd)^4NYpl!cɼkL"̞#mBXKmc^-,z(gݵ5#lK,!jC(.) U2g+C>#FPY%P c2ED4D=#AFo6^,wғp叙q["\iU5y|!U4 IX?5ԯ\P [q~ ayTM`Qw> 8 am}N}r> ]]|/ sB~Ƚ?8Y1Y\6kT |~7덬aspǟt=|n\GS?.ڴ}3- >}1ӊį?A CܻsOYޗ6QWGԆ?)P!?2i~GHJѹsg/aV`o;NKJ+E9w<ӫ1ZnQ_D~H_xpNPooe?}* ]=G @F9z_?V Ɯ2~B|jR06;=FjAc j'Xu9Ravs ɧp >urVt,ooESly18A,mil2O~c[_d IVߙQ)S3ߢ^7 ~sPr:X'Q@{bv Yߘϡ ?p=FOx"Xb'w* ?N H?]Wp>s4|;!˜jgWI)q2rW<Ŝx0ғh=¨Mycu9-#CY,t<..pI͹f/B* @ U5P0S{:abHpD_2\Y{J@}7+'I(#UWٜm1^' toBӖ.yx׍BL@c޶^ 12(,>jQ ?Q\E녊 h ZӞGwAݠ>*(i)C^_Ӄ z&!hNgH莴WQUH 6>  $~ǟMJB1ꨇ eiF3g<-`Σt. lyDC . 1O/&Hט3HК}, l3^? 0/ {]u4$#‚쿿~=vzbNjӈPN徒bzf: g7N/!Y9x-Ih_6g@ofE(` ^;ɴ|Txrx/>eao Л{Jr=`-0m:pG]GGP{rd*2T]/;E :#(A/ Wc=D>%7m`ӥ}8SxRF=]z("H`*jc4P=S_ä.:tC!XK ߝoQ6T%U_?;h6HʪAC$л?1O~+Vb A}<& 'cH=Mwz+Ks̬ Sߒ:#rEWiN ղB#46j|u l\{W*g:YhgA 5UُR/+ϗsm# 94hVAK`RPܶyY[я'NNZsū_ 7>X) ƹ$IXEmLN詖Hy7_z\Y]'kFeekZ覢O^}Q` 9Y;RpoHyKSko{#Og_rFN93lnxn*sEdfjkk8/?l:O['G2;ɊOgo{6{^L@(+ (Mb 8s C`'x@̦abK`m}Tݏ9²7")zX=oW^>#`% lH]OX c"I%*2Y ʛIӒN%KXCzYﳥc~u [BZ*^ExH Q='~2iY*O;;L.y潗[| +Юy/fçlFUA=M~#lORb`9jڱ(iG#/Q32Sa4Of`˹E{n/y)ʠ3 #ȯ_7:jƽà#jt!x~]w<ߜCrVpv(҄r`!&?I վy ճ `B^Od-}0t"Wg8nlzm$\DX8=]Е9=嬖d (Y磜Y9Ȼ6QO40ƓF{9mj3 q(aM5F_<r@ge LU➵޵ͫpn_+-)l ~,۹.rVL*5) w9H f#7&nYs}9*rWNtt419`MgKF:p7E\JtFII0VkM^Tùa02Q`Lk@A<ɐ1ZJʕǢp5pE Fnmi%zTƾW˶xmЙ/js_w׸x;_vͭ!`wBV*`~X-V ik7cٜ Tl#Xr^fҫ)$c)7Je@^{,ɘ"ĹܹT0T=M6=.0#Q^sIxꡑME%+Ge tCcXK0EhnnK~jEC+=8lCzGNܒ)q=\-{Wu gĢ{=r1[LLL^ҕȉ1rX4*\`f`oKᇷ"IobM-]_ީn Vهˎ-KF4F{`. -n uu}+=+Ӱ?z*d@"E~!!~)=`0:@O@ >o#y9J ,IB9IC@j?G>#IgXvm4m,w9R$Puo ]fe%I ='  Egv~ [_X3rbJR/ޠ|Zy$xSSnC~7cgbzIZNKե}f HM?A[!ֳ]SI'FsPK3`s©{ؗnI}efHguc+HhLea IFu@M6kG֎r*Xy ]֯c\ $_z[ 䦃*eg'-S%@Ma2,l0+MI+ԼO: 5?^ k+_q%,LvyqhE@ar)O}]iZxْw_b>H~?yVadj#7 NprOI0 Qz^Qd$^8cp3 6x/OZ[!p%ȇ=]6鱞0*y076FE5(9:Cl+l}Qt >a6 66]ʙbj<@=6ג`+'˒N2E+2yB@͓AzV4Z#[? Aq]+ܻ{KϘ<.ŔKF)!d6FNOJu#|NV? wsEqKycՎY7ޮ3)0sck޷oRn\|3k9r!Ԛ (O>fff[UN~{wWix'4]_Hxԓ~iYT]@̃^Jg Hl(FC/&U:7 ռ<C8"(z"KVFWS{^"=o3Ӟka fӃ em#4wRlHAJ(3 șjr,J3$`zIXˠZ;1|~.\vL("Ϊ3;G}g-լۡwQF@ݼ ;4n Zd:*-M!7*y晛0ӊnx `;h z)x3B /_e1([FK{Tx R5AxbKt}~o)l*i0W,wO5 5-r e˛B~#hx8+Mz2W5CZVz`^%(s{\;{)գ@ 8p4RgtX@$rW)*=/y񴯻QQлDoe=ǽqdNI\\]8/0mC?w$ujkawٙ@iG~8>JA'{0y<`RN#;M;0#Q"]bA:$6T&yƷ L5+"/&]m!+Vn"9_CJ`y-, 2[nB]y%wji6 ǔ)ŧRc#cZ\v|A@AyE!7r]>--'ZlRq{#O_|CNnfMrvˏ_ [T~r/ [&r&FkWQwBWYj]u|x&?Vb{:&g~DV{"czz 02frr%-m52j$O:O5쉃9k/su]`T5T뢌]rZ`*z<(=Occ hM:-;e//H"hxsK0049X[rL[ nog<(oР-Q8rhy%  ~OT,2ۙM}rM/ &}Nk5Coحg"jۛwۙ=;&t(xgŖ2^#eUpisqqс?/Z|jP,'饬)K8q?bٿH˾t{E*طžNNaj[wn ya fU`<@9/w_]omogU6M;6zv~&ߪn2>|Q 6EQ]X2CI`"#NSCW@M?PYU(饉o}0ml\h=<7wY+/dsqi[vss֒ 4jZ"{(((sA`e WڗBy2rg!~+։[,FK;./a=aw./^9[ijԲtJ:9m9kݗP̬7޾"}l졞k,-+qCQ8]^!z #"V*ЛbKlT0"60 wV; =X2 C1|]^$P¸ ]2.Xh>5 ]] +'@9jyabC&Xnc!HϗsFX.prh!h =Zy˰>bsNGsa\}8irWJNjio#o=OM&?Ã:%Fg@3 < s:7Cmm ( =W .BTq/!XR{^7+Sݯ.hجZ|+x#)կTR z*♈p x?A+,[w~C7)I88-]ej=A$ <Ա+,յ>x<@Ƥ`&MgV7';tAH^xiVq̵kjP3T1QT@Ǐ>G*=9fӬ}$,|U> C_g?r@OM2^6nc=vfCì6ZwJ%|g%8-dൃ<ϼ)'ۺjL#y+[{g $򲳵4Kݭ+T| /rn|"c# %]'UKU-F騶"|9rWD.@._2vNQ13܆;!>|O65yPJ=C`@2/ޗ y,ЍQ="_[Z+x<_ˇmn,6s` n6|@Pt`y9o$L,# |miCoD[{ eIQ ojr$c,F%c0*TQS4`U9'E 0|/rIFI͍|ށ,vGp h2͛T*)oG W;1$@Tb,em7k)E6W+`tAa-Euǯ,\1!~R33J-г~r:3'@@Q!C^9D}R2t^?\6%?3~&b to*c2eAQޗ$d޸*Gd[ p xP­_XL25.eeVګR53$1 C5ڐeAa.O=G?>jQUQeD- 7 3Z@]ˊ$gm(u~8*ˤysX֯mx6q nkK𾶭l2Ӌ2Vp?^T$,^n1g҃3/?v/֗k_XX-`R|򴫧l^q_փCF%6YCtz:0g܌0\C/jyWkokgIIϴ`cvLYǧŰҩVg4x6 Ƞ#{SF?Zd3!9.! w`9̚JP 0P}+c5 .ٴ_a6DmxIF[9X-P\t^)/ /<卦y)̪iFyS(7*/:>놏 nc$hwf]fbã(~2mXEI3D@˽?>Zy=҆?xxf/Q9,qCn܇q>iC;y'xv@6Y ^k GOߓыXG0㲶 ~:&R]ivl"6KV1pf?TYٖ{u@N&ޤ'onZ>Eò\(uK&7-/sc`cM*ޛs 0 4/@IDATK|m*y m ЀCzBh[4vϏOO|'>9ؿt (, ,Zֶ](Mh]}yA\!-BZ h\~? p&%Gp#BWDaXM!+}C|-zTww!Q `gBf)Y.FQٷβ,S9R@-髪wOI7V ỲYV+1XC Ot[|<!kCѳ,Z.~en= m ~Bz9zV!}g1;0 /o!e0%`~|"_,Sy+Qgiz7 -Di_/Qv,7I(P;,gהwb^,Q5jًPKGXWy?6gmڈHOoZЇ#9!\k%$Ncё?}q[s` UOqz=-cXH/gU ", ɦ8-HBczmOB\GKt2c<8S9֫hBtsa5=v,nG.xՏַ^s ˎVȳf'7 +9xuf9Eéx"\WVK7EC= }ŲΎaS2Gy^# ܗ 3G}Rx`YP!ߚ +%"3@*N Sν˞fmAВ&QGQ1PeBaC!@`jM@~a8؟B~:%[eEdtT|>3ZDg0h]&| O ҢhO'sh?0iDR!ƿLodX ONӠg6y!"L_*8UE qB{@y<49ÚPQ-O/rGE_8|O}en)㥔&6Q=|u%(DŽ)BJbÖ ‹*cϕH#ɛ؃:R y?{N:jOtQ{3 eڶf1E: VtϊpKOޫEt~a@R[ !8#1,s?.@6u(obWi5e?;>ZXq%b'}LrW/`z'SsO;+{Φd -Et_ 4 %eQdaDKMk.<>kX@9 |u~=1fH1,ot9常[CwM>]-%@O/Л1pw=oБө}%btiw*"(nxM4I#|ɜ=.;]p+_.xY,(y?`1-`:x6& *C9[O #QGq\!lP^t(tyFT@}p>}@~j^5/R(X᧱ X?G~QaȨGv_ubl#?ىɣ}|;Kேb_$YSy߇ׇ& ^vݑ4%wP| |8"vpʋKUy+\}`䶳a9 [1֋r O~`kM]J0ܸecɴzW?~n@y=W< s5VR`d Z׊ TX}b|vdȾ#_Gq!z /H-#1O?Wj+n`άg{,!K- p%;)ceϕ0jՐ4瓵7Tj;-P`RoټKK$HQ $"J0b H" H$KsX~/w>}vk9Nb Bd2#$F3[Lw=N~9V-M1^W?HHur`2qBNLO%NKtoTh]FS=h͍kOͅbrWנ7vz-(wczSơ}ZGFAcVCr]v*?D/l|`{cv!0@ )Xg17Mv}Gɏ0SS贜@QF֨Y+vrMg0|?^pfipY(a!& 6T X[@D4x#6DD72Ti!=8'4ן# u߉5 j ֎5xO6zs\]P3 gQQ!}o<{VdrlF ZsGi]iET Mk G@sqTaѡ0UI2 ή/<;uתTSIl ` o+N{}9txB GmM7YZtjr 486}4Aϩ'Sy݌#r5R;"P_ `GRVg9{Pl\s=0e6CY1\V_eX 'c;sZ֤IAzL޲yy] >+:QzepI`:vA~ˠ؍/VKG(ๅfjTq(qj?e=detVUßF#m;!kwuJ: CqvݗZh[5r}dvU{ϠЪ葮O77Wǣ{=E)L 0G6Ap'\/dMg) 'G,P{l0'h$6w( W[c 27Ƹֺ P;,֤`F֓uHSMTYNqdI-:#D"ɜE2{Y#!epy.lk S/)3ꟘE8RTA=_kvp?TH?OñAâ@aP1$KL1^ɉB O%ދʩ}f4[_ |Y/ PeL0_ x/G: $7fydQwd-YT)x.tk֘/DwZHG?BO;R20Хlb;W7ح(R2]zvG P(#ƪKϡz[mPXRJ@gY3=<$=qloG/!@ei@>ڍ/~{ >ws#`~[ 棁fA[wߣ2.#Nhڧy!@_E3LUt!"߃Зg_atؿЃQ(eT+L MMJ=g)E V=W>)1QO{oތ]Ƨ!ygi.,i8|تTzQ??{-ykF=:ztLј6݋iRa0'p?RjrTiS>V5P:@RO al:NkE  =Rpo=0s/EYmI6?&0{y,㲈Uì.sl-o:Knb᳘UGMN ~yH!^MiW.'eSbRF:ʮ؇Bj:g\EEA9$rlxrP wy_dd}hmWc&~y  2dWWO'|TxӪc./`k&O)(dJ|T5w2TW 渘G|| "S 鮯x}e5E`|~* 4s4ᇡH( {Fl"z-v:fFΉ$?g9hidO 7j-7 |KTgvEipt{rQ!Ad~E* _;0Buveo{NFǧ%\|ݼSwH<='Gm0"yfsmc@AVz sK]m*`U@9 fowZ$j*Gg >1 I|7RN}|V]- [[nw~wi7d2+`02Cs/K8B0psk3ny<]Rj0^FGvhws\^uՕ;sqt&@+b&Ġ5ZcR`9 C[:~5|7|5؛plגn9"r"|m*|En:kl_"dM" pY\\*ݦ DiqvrYbySv!P#fzv=.Ae}[v! (g.ʙMKz"Z#}<2=B;/H=^ GpO*`M0>tD=Εt驻D|ӗC{l's [h8K[\3 %j3LLy ʼ4JaHFw)2ؘ|mf[˪//X1QϠkobmQOZ7).ӖtrW{w [oqg7}#[+ȡ縜ZNx|9@TqSZm15*="hoyUAT5ՓZ> Fd-N[B.عd(8|e\-"$ANwF,l<#s V5R{alDeOOfw_c"wcY:ŤT[ 6vV'g9'rB_ l5Bu\Ns1 }oD7n?YaEy3?vy4uF(sǬRi4 xFҋ[,31wE+̏gg[²˖HR:T*S֬/m2[pX0i3QYm ɂ;*9̙uK@g) c RVpXob؅v 1A0Z1/K &,ԯӘZ xRQ16^0^޶X[+wYmc+ O<` P~Sua+1;wDŏ|ЉJx<*a6V #j.q&r xY$A){Y(Tbw~)4O%nTJ|LW_efo}7\{9.Gܧr'4PP󫟒>0TԒ a(70}{ղ" 4BUͥDO pOAYYd.`&P8{8]p}|_@;f5,m#5 A2`!1S7o _Mn7[; };D@zߝ *R1ۇtEo{61YyFbH}8}ķOS00oMS˹G˸d?e~zWdo5%r{uvY\\d3~Q.DUuNSvuugR/ G|~@Q@g5 ۊx]ҟӚpovgyEpGD<)ȉ原\@NLO%T7(_UV/C?%9mQUC6[(V3pc#!oe7ItYHa;z k>L8vзW ~c7E5AE\YT:ߴ=knMͥjWI˿#ȓ1->󋢌(?Mqx%`T2Єo0;/{J3'_Mu"tG|8oyzQ7Ӕ1w{ȩZ=CVcn+Z6]fCDZ4ԑ kJjuI_2 *iB٨eH0?GF\rnzZD[íw -CUwbb^8'+?]0v˜g ;;ŭB%4ޛŧ(}lh<Iik_ywjK'~;S2Ş͹|n0WH EL FtRhȩ}ڢټg?,[r;A D^p~P@4 ?~zcO\g9l狈oaē{Kߙ#] NW_VXBGOdyLq1XB"OjՃOB3nMeȚ.ۣ9`-KVF LIz/Ow:Ff rrA}I,*wX/2eՅ{WЬC wi7.Bc(9b+Q4oA`xP7 s#Ƃ̍5jP3-U:m>\{)0sz[*qO^ ȌLhj̔;MobПsgx,7[ͮ/2{ $)xf0JY gv EGEFJH2r]=[}wP'^]tOS{E@╢Wj2 ŅmvU. DC]06 'uߙ37شsGVB8SSRwϋP+-3#((%Q$reNPU6.vxQ/BNFk_xlﭿ]D-q(w!SyoJ= LP^ ۓW-66TYwXOrwt}-"W? %mtU@ eZs{J&- w3r"*f/7i-+s4iYQa+FAџ ƏϿ Pu˼C<㐞Bhog(]S"|.m~pi 8dGY;Z-BPQݘ@(A6ԗ_˫>~gʱ '%bd4zԧvN^4acOxs~e~(p*cWu%0f֫N]{VuVwgc?{x"0G{+oCYK^{"=SnsLFY}3 P2&kY#g䕭F_k&UGW\ pۮTDrB>4AM*ӈ;[o\)YK9#;yD,ⓘ*4s*>vA7є{ЎQS?gv 5==w/O÷\[}_#wdɊZw"ҢPbďa(;Ļ62w/@:r7Ihǡ︎sWCcn%Gt91N{į `{hiS;3z:)72)?U'kgjޮj9˖O}kF7P0o >0-14"6{UgYd\"]y.MD\Ws1ZmC7.m%z՝/R8[,((q]`D-2 Ap퇿_ΥȀ9RvCŁǓpD Hw^֨L 쿮5~ǩ9siHY$xKNک{uFHV`4's%p})eWԯJa(}M#韑|a:W+<=> JҊh1x jo%[upW'տdZkՔ&~1!uh9+15CoGE~22 +6\om~G7LM;ַAχݚ䳾"{9ogo9A[7!3 XcqWtt6΁8Ի u*>=u.\`M~!q.С=j}/4 Po4uf9kb5]{9͡[ܶv2̵ܸi֓YX}5P;FC<=72^i @w)-`LPK1mI; Mvu:=yFpV9ϡsTlH OFve侮JY'O*\P${F[j琯8=aſMS*w2>"+)/)0W t.>>~*!M==‡@I(WP.:.o(48+i:לɲW* &zihBݩIUCP0Do"|֚˶\Ծ"l%@v>qAt½ 0n'@OfTˈ6z(>uP& T3JN6c1-B>tsQF{  us?BԷZۀG1-#<5qꑑ@!DcOVi(*oA;!j@u'&Ow,%G(Ak̴P ,Kj^?w[Xuyu#8  m<*:,|cO'RFPާAtZm0O %> ,WoMﱟ2?]7ԏ^;#]Y8,7\VVa\ Ҿ~^mHn,#Ѽa Hp`"[H,g$Du³{Hx{ҍNZSRy ߰u<;e䄢o_+3{JϞl i˦'mI9܉Y=\]Cl~`ʍ%FhqCeV_$'G~bwL#j0hJՆ"773Կ'a[a=?8@|ZXWmzB|B#GN0'HcxVF5qcM݅{;%ê߻8ݘ_$(`7 +2 Y'ޢڻH&]0 e>6ճ\ -YG Ui?TP\G1/@{?n3:ry!EڻnVf`!@&?a«NȢ]MݳKlZɡHsՁ΢F>Fv]Зxˈ}m(]C(= #&H盍묹pchZ# s֠t_JػPk1sQױIvzY=E%R]=}h v J w]@EtQ^M;/.Ar(jJo:z߅ 9ĢsN!1כN{ښCǂhs2^Y Wn8n^g\d97iPm<&%D<.E/k&`N  "n\N BPumx9Hガ(S"5] ?ԨDW`-6J<]ct2,is3 }$CiVxYfװ SPe\)/Pfj3lHCsl;jog 1.N/= -#b.Ebٲ|5Zz)7"95X D.]x0'[iˎKGlU<ꆶR X;8ĵMCRv4Kb%&l͸3gr BT:_jX,gդov3@pȹ/ QKrP\`ZcN?E䦇-)2VMzf24]$;z$2o ع.9(8{{6Y8[2Wbx7`N d^wn6F"B3@+]E?dwBهcuw]]ORQ%9:~=kRu\dbŗSgQraFٓ[lE|Ak`\g]yn ǸC'}cRk2y8Ev0#h=+b/YeE<0ͺ!/HLy*sO݀~09Uo Cc!@QN3YWHˍT} VViMNCc̾!1BmB& nexwNCc嬵:96C =pg~݆Q K\WA݌ٞV$D}ﭓb۝alCǗu< ͎/W\p|zc9޷N"ZjSy2KT7냩(u*0&XKuu!Mz+F.2T9WO> H_Yo~fB[ڻ kh7Zr‰塛ţ`xh= eQ՝<}|FԊAPg̮@88OHME6QpN Œ>TK.1*=j\x*pWbߵsU( w+=hjLe٭XjTjD@O9<됿ur,yı kGq\4a։mr=@F fǍQb;vs|1S˨%cYuy փ!ގ(G1Z{o^=5ݳwO)g (诹y'4^SLb|3"ol@Cevo\Vqqa:F6XMܕ'#Q(N@B8,w|&`4"F>H}]`)T֔]= ky0ؕ@$YNZ M"0O-=1;Q| ͨj(ke/Bұ[Ʋ_8RdWӤ S_Ҿ6@xMdߠО4](b@4W/T(V=" 7X.S*cdKc[ޒpGp'gj 姧&꼛)\eL%VYDG[N o9v[ܜlȷl]0^aY(=)Di0bիOSii||s0;SKN-+h$1NV&{;2Qe_0 U:%'+S\m]0)w3uҽ:9-vZM + `=)R:#XJ^_ (Q'|m=CŌc6]{A2w?Xc]jg-; H~~ƙ_?HcΈ-Hl'SOFtK2􋆠0&^stpӌbK,S [W,Zp-ϯ ̼rW(OL~IA8ODÈ}W_4 ~ vvrk2Sfc9õݚ l` Y6})0fSdphz5 jh<#@Nto,<ѕh#j~f/Ȇ&(ŞJzݵ oLvT /Nc(h$A`HHg,]KDU/)bL*߅b] mgwxT+/;5 !U7Sf0Fsɑj  _FEHA [9N7yS{Ȗ8+tucz:D%)d5qTLN[ƛOZ'g-VO09?oR /UCi]Aq3T/NW=JwQo|iV@ a~YgSΡ9碅U9+^wN'q:u;x\sdTu9s)ro2$\C_ldћv\ѼX?1k׍?1qO  H'ɠ$t2{h {`6>ٙ# ܿ8k903vfDDW'x߶ȶ+-OCqqxam\:hUӶ@YDםEY_ ˜ٻT |t(_7WG'_f}9CyG]!#8ޑNN71.Z@'_E *T#L 3`#N A;Y}FL\0@H6z\Iև|Y=G9"ܒ$KbD ryЉ]_\0v߄B0%jT'n}s+tq9[u4y wƆ>n\Q[EK P:(T\-ˤ;Yo̓䣁{T@;\ؖN"_qϕݳvl7f+^ y]IQ3z.ˋg3 :0a1OB(c8vCC֧#s9 }H@n 3E@Fr;ќ!X؊ Je|Ϣ҈e=Z*F;07/Dj߳:;%d#^CP F V pt\׉tnxU/HTOp83lG=kWu}joӖoKI){wZC_ɐKyD*c9,)!eԐYw6)Oi2ݒƍ>hv1!`}Q:/  Ua0_iPn.^.3/K晳Lgx Ӄ.Q:[6fvER3˻6:WÄu~ڟuiS`pT%  j$Ei-93[Brbc8sNjU1a~VG O=̾rНpHkܥxo3aЩ,:@I9X$7f"x WԽשjo%nBq9n~oM\' |"VͻWwRVRJJw')r7pH{,f V7fn 4zX<\rEj ''O 9ڛC@At(2BA)vU2 r(2tKA OC Jph^){|suoeS!ϏQ{zD#}mҩP=)2uW$=6o %S|$|=*pgpU{NJ;YkMBcFcE^Y?LƭC ܛ詽QH'hbn<~thC}h [~whgTt' >Q~xfSe%9EP|_* |o2WHË]hgMyEхylPn+hBdx6H6s I0jgyp affJkVQVJC^r,_L#-'5`^KM{`cG>]74{ cq*tohmtJtOi,/G}1=n3%ϖFƄ \of @ #" ׼+5+{)G̩uDu܎cryj<׊Lj :U8E=EEYJHvykϬ JCo(LCb_.5Vt۩& vt29|ZZ>9.:1@}'D 'x|Qg#t<"@L| z$a7=?<w^/3>5ȤT.@w}%5Qv^ L1 Cs6g!eQpr>Bl@P<njLo6zߛ0PCNB*NG(, qh@c9N}׏ 8_˹ $uz^CK3Ձ[>N4sXT+K\Oq;m{SKHn9i H8 %LJOa[1`tdswzn2L BǼ_Ƃ CMeS 1Ft0 8[}:jYAWjVZjҫ!a͈/( )arjjS BWyEp,Q4^hB *u\%H܏.T DFL y6G"x =NG@ >kÁ/D/U^>.CͰ[moR(<} Ho5T,ct ޣL_z1}P'G5OXڛ4רNyW4C\>^ ٿ EaSs}!7tjtSwS7@>Ux+?D`$wNWQPvņQu>]I[x0ȥR/Ŏ7CW^YO>uG` Iu,"P\xRyS›*^jghgs+?PH XZ`0 Y1E.e k\u=ƞȼMKuԅũ& L*e\п=[&#.^P@JSQ`ƅgMAƳ3ca' \ v&Rɏpܕ&$v2ޠj'6NuGS[c[}`É6~Nޛ'fu9yqDdEr$F< )0L]ۈ8Lv$6F䓹dXol7h稹;?eD`.$2pKT>)\U\C] AUVZ+2R{kČC\`/MIŸ2|<҇"`QUGSu}yLs H'{IHXJZٍt f1_А2+f TʑfF[W)G>.XSFG7"8O ЫCær*a-4qZJaWB)̵ w vuVӖ״nz +jƟ pi'~I\OF "Z9MiN +O_SCЯ %9T֞ҫ@){0mJl uvAOtWsЗso ]d׻el`z'K$lFZD ))? R0׏|Po{gr4jt$| ^*UU] H=.j"?aդoepH!-ɚ5 .BS S"8הr,=]QB@G=G yNZ+O_nNI9n"^1o.1_^ a"ԧƐ=㲎?mZt$ ˜[Ul-S?/kmcJgCք cxp===7 /]'-?(EMyN)u~#tzL=1v6nI e#}uHgb+}icS>;%BpO^Z!_4tTv:WgGoeӾ$"ҩ(a*a(L$ 8CzJW}fĎ`< SWKz>XC~pnU(D;5L 7uq '|iO#_; g` c'X O533Ewe밻Ww獍MAS3Ra67eTCuPК>P,EVwL?#`UbTp qÔ (rb{.rQUe{(OCWL)R|Uk&;u3'0uk5ҊN .zb@Gґ˿Ll 95`AHyU[fMV$on +%-<4b}ߎ?i@}` agc&4 h zWh/I5_A`cs3jMzy1sbƐ-"gW˔[)s&}<;8* b쌅 =ӭ?zx_#(,d%W\ŝ"0wР˄@mA}JeBք۬X1*02e|oёee֜EA@lel󭹾t J '0 h>mn{K6r8ғyc˻vd,]jm!^e]w"ѣj೐GwjҗE46@,>)هrtk#&3eg\wSa'j~Y:ƙ`izѾɖW#_(eBUmߊ9uC??" LOP3 f/ډ`ِf+liF=;9n9bH2 EH%lg_NtrWZe"о[\Ʋ"keqL s;jd`{g 0bt\W֧bT@| o 򠳲r~b@مw8`-7t*tR²Yϒ UrgHbc;|J6\kK?u 2oL=_'9D@>Ը![Ί'H))\ћS`?S.1KN/+ 0XTlwOHMΏnt4L#!˜08gs^vTbv1#+5cΜ*trTGq) SAyHdP]=n_Ӈ=\X|qPݟ AuQيًQ.22r񗞔kRMcA(FEH91wv*`U\@y<6$oq:=G1n 6֠(Lα^@95P@sI>̭g(r7>'ѫă{pyavخ2*1_QjcF;^PrnX Ű};yqPq\c9.VmʤQ ,҇/KCpSAam.k$?@ ܯt/.w1n^ G20FXseWYL zō<u%|iE &a6JEnM7ik0l_&|fG٬ ;80P%<>>gOvheX uk 3Hxk YH=R,7=ܧž_iu!uYt2{J4۽Jo+2ٚxCrӉg:alWC)H:[5ar2PyuzLnQN6:ywczy9$nqݘOn TZ SVJ|td>Y+@0,f'.3S݌Kڢj3EV۰Ys5 ePҬbT#[T@}-؆ rG~փxKGS(س|¹YS/Wƽ[^{Fm'z `9ʅ"UPg_(q=kW ZC}\62)!n!ֈrwrB|c9&~;f{SO7Vl <*zr՞c9> 3Yo^?<Ko oc_hC*􌓱VP?ЀK &YZdh}gUm`.$M MKp}O!LkꄫnECOD&!40X|ѝv3ׇJT08vkI-u Pū^*W>*gZd  k 8t>^/tŃ|ev+|~eA"J)[I~3`.ۗ ˼e!C|yy50̻cNV-9]VŤ_݆%C]_qmQ0\7b;Ew$.sqb,ٞ4uAx!ir+I.8n1pQ܈s0O϶ma=yyOټyܺK 9|d=Iˣ٩i7W+2fN?vis>]\! ծ[j2ksB_}5<;*C&?t[3Ll=tӤ&ɴa{6Bw`F?ԏs@_chtVgK29ЫTRu?C@6 ȧ˚n=5xC #~NPe깬#q0si颁ƧKRg~ e@̑Zq?amyqkI1tvj +>yMrnԩһe#N? Oea/Wp"1 '~J͛Siϥ9#/h{:+0%"l4e袧EԋG=wʝ ")~Gq,=ٗ:٩ z\G 0~F`\~i'tnzdt)pOחFP2,}Nr4RE66mM WI@N@] =5 0:w]6_pM}N'nRRz^gM@[R+VHdw[felx{dX$6JԳn!KO:45QnN{/ Dhp PO:BRQM+ߑIUN>z ߩ.cqٿTΗxɼK?!K<)) ڔmOM'ïaK2;@~CW3^Jf\Qzk3y*=θ>s0Il|=co}Sh}Pq 0xjR5ZŦkxBiz8߷_y9(%d~\]jO>ODp>hUU\iz%:`bȳugPj#eXrq{/=AtrQO!ٌEpm7[~_)؇`mz TL'L7zz}9[لF&/9;?!Ȭ!g bZ=s˃<]ـz+ _yD@q$[  8W!f3Π%·gH{C9mS_'CCi6OWh&@H>ڤ=z ُrQ&iiseÔb _%Ϲ6 G}+f7%kc7aRU5}D-:Mmo@Л#kW$t󨺎 `ao7Y X$@/ ]zv축L&twmwuO4^!_y'rI&\y,RoK} :6N31,AɬM=L~Q8.˘KZW^wUD+G9^#83ГW2hUֆbrpe!UNr4rHALWC?e;i-^}j bű~AVw+A4#g%cֺ'2<δ5tY ,@_^R=Uʮ4*v zKN7qQs[CK'eֹJs措TjC+zapQ,O ' 5!7?Z@OZ}nB q~ɘu_r]"˘Uӵn+9;hdiT)݅]L@|k^7D#w9;[γѬEu7| 5HSS–<23 ?qo\ki *eڈtO8zVe*6D&]3WYY%Q)8?ɥ@@} P:' ^u  r ϻE@Y 4rOҹCîOebuSϝjqJ˺ IZeL)C?O}TM1T06"J,u#Xg]үSN:yg9WU$&z}o 7Ag$Ԗs]d3@0W\]9h_xO>-ўz  ~]*c f~kq{nl:=btĢ"Dln䄷e˰q)ޛxMFCUV 0nr>g{h;IŗK᧦vݏ.wpvK~A '|׋*z7B<hNc' Pɇ ^# 2}feHʡ5_"%nI, /n^ZNSoU\0~! (o eC}:[iNEƬ&%>&E~M]oY鵌29w,wGQ]þwꭙ[)/:\IgV=&ɮf~~9} Mv :CZ{ %ұ!@$ z.A3Kcmع.+E@*[ #00J`NEpAq3H@@ ~g^yeŕ; eR--N8cOjTNW)ڼ9c mY\sPG?L|z)ҹX'{Z m}z?^}9q$6͔!^ΡSuG` euۢ|*[GQ v>ȼmWj5 Y#`v3m_&W YB 23g|p춿W T>r*0]ʜ) ȇKH-\j12[ʌM-X>XYkY *EA@53abOL, A\Nk" ߋ%LjSj"}ѕ)ǪŪ6IN;^»o McC0xmZiz'C 6-S/0T@IDAT[;$4޲vʕfCXλ0ƄLSPsPOL'g̓~k%P/Vz75#5|vQq͛ 1j Qw7 LQH_ @W/ ftOZb}i`Aq::7B!@Sr&L hQgzth%Eb}v^.rbT?9Je+Uc*TrBEyϣJJ0*YwF‘gtUWCB%QRjgHU0nߪL2@pW8; _i+ IU^) (*ggg>t%wc-44=>uk0LRn()1*3$,xƞc|-76HUd1||O#h|62ظE٫I'.ꑢ.>{%`Ճ块':_}H_љJpuvØηSҐUU ^?P,OԗOҀdР0|wLb x PE-"m^ =\5m f[5 4#ֈb`Ot]OC=σYwr_.o@g>:5PнNs^$3O$X+G$]}@(f%*w<@v xσd|4EO@]_]!mۿtIzϞ: jhm+#PzWX#_~cWvKmY.0NmJ6;bym3%=]vLuVlaREŵt):n!b#>#{:s1(4@@x,hx|Ϲ>*P// V3~!{w= +ttQ@}}&[zn: O)={݂A{Eрt[Kp<ef E&@M<%GG%u\]yGSV#({Ōok֡-{*Y8 P&g'|7Gw ,&#HS\TǜsdI<;0sPr]$"2F+IOg<фY{f1KNDlFؠqV@E}(k! C9Ztd 7#{>^0֯ue&C¿d0UuB'N\u&TDXh&nFUsr?A޷՗r_TI@כ.ǵwT3Y)Ǚ2G4qgbPkֳqfPt;^dKx5h`t`4D Ho@=LyQnE T@*#^+|Ɠ^qDSUtH@Q'pЙl੠-[(BCݓe1eWUdv *`Vr]M$k" }ˑ#؏ߵ.!۲۫TEa,P`rkn6 9`<#y~ϗɡAEK&9e͗"]i+G_G؇u!uѫRhM1A@N}KN5iLF ,, V0qX@q?;=;c:\<" Ghj ljՂy_=h0  `ohP63Ԟ]˧Tk $W{j^v{zH&y'Utc0Y\2Vc 0tPs]@1=0aHG ~ 6 v_$.'O8YТfxWV_MM^&pĽ %jx@Uj4Uv"p̥bT߅{^L΄Pu5w3Y (AqMӰK=J}fVGGG]Y1,Iѱi7-^\S'=[eH/'2;7|1Kt{V@O]]}q&PNڞMW d-(%?zva bxF$8'Hr~+@/\g#޹5G@7E +'r[*zD,u+0bt|lA@}V0#@C  HZ u졇o ^\pB.خXsf"7գ~AsSdwo/& @{Hw8+e3.@[TXi7 R\l 00_aA@zd{A% #R>[0 01-Y Pq{W@8ϱ_A S`Ui"@?{9g#M O 3"/ߟIy|nS(i?N+&oEne3wt2M:&B!m (g+S9O/w 6ѯ;s6wM1I+ܶN<3Nn_A28ip`ОC S$)2vs]CrvܾE9鎊 L8:gY ,C4l,sY?DƂ<Bg mh;L$,\OA *fx*ZAiRp*v!7d~P4)*tN{/RޯAPq4Hӹk,<uF9]o^t֔t h75m!%ӤI=~.+]+@2? ZOYy@ju$Kkķ'>6=CH=,r-%xW؀}b;+#[fn8;G@;|%glNίYc 䞬cW*9ۡMPw8~7ԋ{΄fC//YWG?*v֊@){^H$`5#wkԬ;/C{m>[o˧O4=O=<* 9|EHR$zk'!#Hj~+U&C • c]C?#dqIG@k`n3FV&jPB vfM >r z{vW@.=hcFq ( D~(› p 7\p+^Ѐs- I0'd}s!me;*45A6@6Ӫ*}CLҀ}qemoSN'6.4`ڍ²\ua@nLtZ~7\.t֩{d"8J-lZ{p^A)@Mxn%1oRz)u6,嫬PN`/1f՛f3E$7:b~I~>,QNejP:l, 9zbu_4-J#2O/Bm!'R03߯#_xjR0pڧW(s}KM hVw5? yHSKGUz3tWП}Cr 0 ؙ_2WZ@5NUbɳHE(7hS@C<.=CO^ HZuiQ^*=ƿ}ܪd^9 ̡WUETaPݷߥ)t[4ט@{WUM:zloI,nP#S؎[k;QkŴȫ\h`}72 ʝ ;'X)W܈)p h[,l/fMEVhz.Wl={Mw"<$ Rݳqv@Xx&@!@&:~1MJn dWWgH0xL*@0/~!+x<ң˧ikC#j㷗Հ2FxkH&AuUÓ,͘K˯<^U5W|,ᚾ,ߢBX&Qw8yXM ?R{45Z/g9Z7TtSLV+{[ +ZW`7-L,=9ыznX2 }ûr[ӨpcfJSVrY5k~k8.OX<8IEĿ;ڝ' ?;kl#`ny-`?CKE_:φO qXLyfU??H쑴 됉jn?fxONon/!r\"J|%Qq %{^49|Y6~juX?.DY=Q]6*)0^nK $ }4rM"?Ͼr 4D@@.kx4BO|(RzNĬSgKű֥h[ 7U1ćV*gĮW# MGՏBY!O~ćV&獘L^W, gOy2Poxzd$s侘:tŠ쪬UNlkיվ)WO]ѺFqNcEc cmNm_jm]u5ّYCvugj|g!ROS0?z)n#_6S-2H*]>_j< Q41$wO~/׏_߮Ǖ;=f3 m{֭,&jcO`y\Uk1{}[ܷq(XEiXl閄a =Q-YRoD,O"7gMэ6M}F̽_%YnخO:6Ҳ)bqgp/w3ܮu \V.rTy0u1x s"}Yg+G~;ilq8"AvsWGS唀$Lqio&nO|t|^Yjwfc5?{ [M&d!=n؅ f:m¯g6'fD¸w_VsEgy96Z{=sƌ=en֣Ty6(0\UNa*& Q+j2FQJtL^^{s-תNkZ xqףga|֎"W~~wGKT[ARcl|!z~WSye7[ &P$)Ǜ~IEٵ]}C Z-6R<3?(-xz8jQmC Q{Z^>3dBIWFNھK  IT{Yq#j;KG鰎xyjm@}Y4 ur0~I0h6Д "|󔧃Р`y$OB_Dv'`_asFY|ݚw]},=tjJbIv1~~qq%^ħc_ǠơxFT ܳ?յkd91IPhۛӟf[*gnsԯ%?>!kudQ/L_7kg˖%,l;yҫCFM> dWOxOx^k_]{z}{Uc[}\}ý^=Rأb/S;.p~_U}qcGF~ #L8dr놯ٱi*9HMr_/F:S3ͫ? VwzzW1+gØUg|*+5ؖؖъscww D^FX[[#K¥ZFk9qwL`DQGQݡI p\8h4fG>@rwU.o=@hHrcuz%/+R?BBl3f44ʼguBf: U'=}s/t;uo/^**`-PAɊoNuszb3w¿撱< ɚsΙhUzMr?} =*ڞ@FFh=wVr9@.Ȟ(D=jWߺ};T8ͷmINO$\ZQ܈_XW&WWCO{LoR׷:tB•s,L[l#*C}-=qxgsfMM<P _zav ,Nm85Lp*bK#=RHcGcW#|fB~vՅP+#0#=<fܧ_@p#)va lk6w]-ĿzSɧN1G1pWQS]Q17$ʗVFw/@-Ɖ_u *7)߻)ph@~\JTе%!l yp3nHxyxǙ>M=_sÎħ8?ہj.,ºي]7#U;Ԟ`.kQ -趀nf kS@3ͼ[_ SaNRםz|hJFJu =9[fǎ,sV.Q|^_MAvӋ[Km RM:]mPyN+wߐ=lbϬl~t,@,Dzt~rK& *n䅠h~X3= ȕ6Z+5?^@}_\ueYLRsgާ =>H٠Rh_N)@CE[0)y"ܢ#RZ&ᭀ fo-9k8kb/P/А&jRvVX57L6ٌqTOhHՇ}:GnQTnv^~VFį-K+!+Ѭc"hfdh:clVZ'=:Qdڮ[\vvq yg}.jV8_4M}+ Z[&uMqn̺k)\q@w.C0O}J^$Zq=sVLW 8cK? ,Cu. :Vti-wbe7(+5(e1y 5M.\ݡjV QH4 /ܾXD"gYgEsþ~ \Sk/&>m_H[B/Խ6DQ]foo:Ư؉H9:-oP*cTFzH€m@# }3e$Vj58VIxOKlї $'*ķʹ:%Φ#Wb-tώ̈́!c0ͮv!(Th?)w-A: LyN3d':S\:jjq$1zt+ PKi\eoݷKSО ܢɴNHXV:eIjƲ$d(E51vkوgG;?ɶfLL(ZLU:xTp(ШC_Kd4Jd:&o5By,npE!;_1XE򻦟ȗ+t܁j$r1.Q!1\3!W:j~cɶ65 \E_r_;n. T>v wч-ٞ#:*_s(,b&)A~Gc Z>ʜ%Bp o @{GܜUb*n5cA[r{.iC?oZPUU| 7k#֓F/oL& WHcalVp:v8|aknpz3sQeٮwΪO+w ]Ԩ`/Mfsȫk1MJKaP=TT;3ItGWs=7(y/5e AR`EB*#+k0a#|P5W[D`M/p63 2'ӿ|<[z~܅KQL-w}nber[}ѳED16&l XשBG1^!֔+ߧM鱆:w_+=QPғ" aN"C WJzXκ\o9g"nH%&![少r^tsՉe HP|1@x K)zoI\χLyMtg5s6цbZM'}0 i>g w}ӊOJXIߝjXamnJʸe A»y0o 9lO닪' Q1|)VWY:95xp\B,~oehhۋ(~ћ:Q}FYz0vWd><&?|,Z}maIaa0P7mϫ!nA]3zVrv uQ bu S NyT)_goِtgyx 9w=|'{qMý" Dc{15PvFY%slEw=m9Ǒ8c=911a*TU|+\<E HSSZMGaoƉT'ŷsanۚ FSoC>},̉KWVf}߹RN2:LQGTHK r9e3G~gWkc@@+Tooɘ׻[pi{~ ZRj:49/5ha٫+~E|y4Z2`4l_LM?g9˦O8 9;,tۼkycLbIL]wtGM͊7վ}WoTTўq?S3lXq#* pƪבr 艏Gن[k$0U{?J/Yr…9?spnYSeYD'L 0๥X 6:S DxLfQI 8SGƇ/AEzQd-Qǭӏm|\TÈp֓mq=c-%`|㳬4)}<]nj q⡧`H-;J '?bж,:j)̇=tƢF@Y5Kw7rJqb=bU> ;֎a& :0 ޾yupɟ(^uI6!gRlb 9K@sT6r0 yO0dⲠDWjG~a6c>MёtS|r$@Kcȝ!OF?`d օ4 &e \DP4beGO!eL9Rp#31g>%60`ÞKbZ]Yڴ/5lrus @2A;Ӵ=Ql "t9&5k[|ZjE-0>9 (Y% kď.6,8]e_iʝ&QTqiPF5]_M7 htx㯙=221x!li8Eh4@t=@; a3-]ʍ׏[MSLt>.JKA0# $ʲ,@b̵WCF b KMe-D)\A9J&&Vs.Q GY4 Y-?16F`耰xBBE;!{بzr14 ^@ C61˹n$ZL6gǎ+:aOq_Sׁį<M_ZLF"QI+Sսt>/eoosfiX&C Eܳ!#0"E1B0Y /ȥhHIDF>/=ގ?+LSɁ8lI#uቔ p*h`Zh NL*fdp^be)/\R&p s$2.aOJξz * ~6V7H0(Vyn yXJv 5OTxWipjA0Myk0JO:i„[h[(́QXpa@z6 egx,svwZZ 4 `s5 Jw%32*4 *!sGwe:h|a/Wش٦jTɳ ùCLM@HlfH$÷!Fӂ!,?l|TJ ^cxFF$7%a%WdjWDWLԫf5whsX>&gвu6,뉝¼CwIhUM[Euu!® ;l(){aX a.y7Sc@֫мQ|0H/Mem Uۏ4*8DNj؉=m?wS>;'t9`mf{? K]wwB(D6UNWDQϩ@槈93t̃X {3܊ >IL)@@:zZlkxs~pEk_ƔN{e%owq*kyM *vߡ8˿-YXsg @_X_+C,)ט>{WlTbUH䑻_siu"Hj_QBs}].v[z`y;yVG^} yP[K?e\-a˝A/iLFOD5Q/kԏe|%"a-|> Uת܃ul;4Xk PmG_qͫ_w9+CGoWfv*CuW:u`ccU>3[&cu(0Xk,1֘@֚RGK,_da&PxVVWo}$#F@Y4m'h0w٘[,IQťbfۓM>es(WΏ@a)M}zS^J|%-w:΀+4!@3HCv DNK0OY݋ `hCP`j" ҚS(}#ѦqoUS+5 ~QE0_"3)5o/zi@`{fK*=ɀ>\齷!(!'@5E-B@ xV5^_0S!@şF}@o h/nȹ@Y$~ & zS/N."rIENDB`ic13PNG  IHDR t%sRGB@IDATx|ڇgBibW;;(*vQ bCTTl4AD&E#{PR~9Kr(xٝ>Sr9rI#)70&a;‘8s)`QH@clcw1 c6,[0dOaL1 cbE/0KG<GR{ Qq C7l*%IGt"^x{f+?wD1C_1 c c7˜)˜c.(9>A bŘFw cּ'Px;aLodQ$Fv)ȟGRGn;c hGMG cF}!0R ȷ6A1Xsv]aɯ IgQ$i#<,Ήc޺S3d>M000G X81]˜1Wƴ{@C=p|]_/P 1n1ƴTŁ戽#)H?#GbOb˜w ~ȱG=WŘ\̼˜=ׅ1~X?V5k1AFa7cfn<.k^~0w1x˙wS).a+y|m"%li'Vcc#1|';a}_[{GF_q&dſ$ ӱ/.MX.s +F`m˜s1O.Ƥ7܁Kqb[=LXA ^T2MfCyݹÔwěG&iat0U1Ik LI\'!q=1]&i! KK]SgӁko#s7vY_0G0~8^/\f:*Lp>wkE!MxL,r0R˜# +>G82? 8CtAk>V6(02W`1Ӆ1uGc:VƔ[)S,aL˜o+JBi^FYux?!ZߟiZ12uŠ =N01: cq)C˜noN E1iW(Yg1mp[s'}%,U}˜Մ1c c*W,r=k0goa̬͂pVbT8C7;+) 'N9'19]2k6m{9/8H7_obgfdFr70椆˜sJ:߳UwNƌ!(USCA '9`f0jEQ$>:p1_E6@JޯўO`;6afFCa̒c1 cVƬ[+0]f+y!~DЮ6z,K̵(}yFC' D]3y۹ݒԸgn8^ o%5\y676AiݪW缈dusW}D8ދL?c~+hh cQ1MQD0G?R7_ɎzC|S*Ï!1Uw6}<"|gls9oK5&+4`f-X9jfaK֐lDXO[_[5Hƴ"x8g#;ߞ$^)j8;O;CZptsSj:ڔ+_?-~Q~ǯ8gf6#N/,3DflGuz0+2aLR[f0 ǂyEO2FPz cf_(0' F8R1NT{8P{+𧀷PyXoavǕ,yp0枰0}ya̝1/|*`N`(gyg_г, {ѐ-yc$E\0泆Ţ@а=*hr9롛b k5@?+2(;ck'ز/w w-Q+US=Ms]3bPlQ=sEnП12K?6HlǣH2Kk|{ttcnuw-FLYLԯxFKr&'{0f^D0^$x|{Ʒ$ʵ~ʼnjgCz'S,IF*f'S.J\XZl٩)RE\ 8[ 'U$o?je a31_vz.Hg/s1֩x<_#9i-X,n'XPɑ?)5(6HF3V0,}&\[sO b!Y 0̻f 4.~ʼn3Qaf=kpw[@3\d*^6cVDpPd֯US fJ}}և"j;569}:u0jWc7ơI2 [:`.:Ej*VN([{ "ݻG+.S`_|A\`uň9"/=?-uḩfuBg ꢵvE&sZ:+[ R_3&dZJt?onUM:@Y`bp}sM,C_kX41W%I{0%L0/:1gވ9sxR7Yf8aFf#7O,(>>A>'xq^F=#^qLAA{*YOIc|`<,b ᡴ QS-aN2W0Jj/SJق]йCWz=x`J$_טTSͦ7#&%Ţĥ'u+Kٶo5,L"|q3Dz+);j9Y-xA{?],`/`n\#h$0AN̅…1݋˜/!֞ε<.ЙnhH)6YVK[d%Z#hG*b(G'VS-C~?;!([Xi! I[V`)]Lrk A:4xי⸟|鱖]1^>7ف"R {hNԱ39k~zL2*u]}3[q(y% %^t̬Fn[>񂩀Sw!Xz$ܒG'hR\k xDT`nqKs#h4eAL׷$}'~练|bÔq8FsH CCn> pP8 ~54j S[3d0ʹgbM V c(~BA;?Hz̯et^?G"5pX@܌q_PV` Qwf\}͹ݹyt◥GbR$zݹw>'y  3rCFG0%mU(g xRlR g;V+eQ5m(xZW!ʍ{@#)VG@sEQi3qvxe`K8m𬷮& [<@׉ž^@b7$*,S)86|Cچs/mWT8O:8ט9 Kq+A f|EwA. '~!ebAT\%ZPOLu4ʱ9IԷʾzTm~Nĭys3E+!r#ߖ- [f}?:l.:S  *7=+xxMSڕv1K к`sQ*娀q0˜!s *s@,A860&BWeO[?ъ.wrfS0C''ĮEPb ڄSf%$#ŌJyK]< u}s2 = 9xS-ǩդGDS31& h!|"'♭:ES )5J7H;gQw~zpF|!&)wY2: *aLs<_7L|X~YA9#pğQ*?: a4vvb!]:id蕘]Ԙ9pkMÝy`'Vhiv@тWVzN1Sbdj-!?J|t:M9>kS@)u%oZKtY6/HbmVrϸNpWPT㻓(BqpV#B1ǚtk!)/i3}-k7.\X~/(n\"KfaLw}&8q ^ ^bGu0xX$ LArP x=;\)-i#ɖTȟ:.Z[$(whݙu^UIƙ$'ԀB?u98i[q4w׫zdҸ48v߸ -&6K?7թ)œl8bdv]=߅W7ܚt&:M['Vi944u5{ CG \So׈WP(7=SKT\{i"c{4@fӗdQb'|`vU84X ۅ3t]Ղń/ef}{SO=~IqSƜek>B9F{<M ۯwcq%͂3E˞1H_|ݜy&)O!x7jX-ȍEݰC+ֱu'6'2(>NR"|KyV]A)m$ R0vxg8Ki],3}E#Chzc]iv8G"0Z|3vTz1ic%+hyYƕ<ꢏB6ft]o9Wq?./v$&?\)+(M0As:aL˜? q xT+"#S9&Z^O0jefO#'{9NӢħRgTC[C?`ν냱iZK($O8z:wX_ dY“$8Q,n5N!^cn:ct`dD/}ÂYZ`2-eA6g قrPC02Z^~M FkALίN/2o?=Cc c<,^/h%ܙwsQp: 14A(-/`'LvcΝ>>%qnڋ 0t!-j*v}ʼn=ۇBSc=nV+8_k09: A?qyU')S@:z ڧނ`(X ;E=j8r*%6OEC'݋Ʋ4 >&>Ozɟ #%^0Jh`FUl~bXW9b~~Ec>&?>ҢO0]ţi{P ?nI撞OXìt;$$i_gPP򂙼@#Pd{^ו |t^ ,iWpWkM _*(]*҉g qo/MI*Deۻ ί[9w(}iۼvUjP1xN #%xZ,=-ᵯ.@TWRTd6aaEr{ =?.(UVLf?gO0Uzk ^9/_T7SE pmdzb뷂w&gzxd/&^W5T^FbŋcwHМx{CT䟟{;X^/+<]Ow#F8QA87G9෽CC0P8]Nr٧_,Vr['ǃ*v{3Nԋ޶ ORn9EdoS PbjI=k7r[tq&{` _;j`L0TYFuwL?_؇t? AmT,AA~V`@nOkYܒ@+ _ ZPi( A/=ПU}NsIƒit!:Swfn~ߓ"m#p"곸= Xyl{v3m:Tz/j#y4 ^Eq2"k!v s _b|wA' ŪbnEq8&} bv#v9;u85+·ؿ!X$7gN1C ¹Vו[_4x [,Oߕ1֤)'}ʉ<=߿Wec>vY ֋C8G&^ysۊmL| {E}cұUK1 To\ .&5DY,bm81s$^d:{QJ4`wJ|.wUNgSPNW HN#n0g*z'dZxނr/IgA ILc՘5mMLԿ`x ]F1KЊxU`̃| MBJ/O:89/9'Yڜ?i$@_ӢzSGtMԫd&< B"~{ONIl!!tEF8PFuH&KvPIǯeOIxvՔ]@fk[P$ϼkE܂ wyB吓9]v' 17&;:MTRU=4`/ ]ꑔ& oADc2;jj) e}G} Pay9K`WVFkVp| MPS89z>~B^yyUVOq_LLA%x^\#zmdƜk:&-bVyYWܖtdv9TwG<*P` ᢑ:z.LڗJ(Cuiu2k`}E1*,c#X;G7@ 4 ?$H5Ei|Vi t3)'> Ïy Ł`6 K #(VƭKA Io2 ug)} oZwYwҁPpoƐ`h} 9OPۏccv)(~//H׹COjt=;qG'(.oIQῈ?p5*=),v˔Q龵ʍuv':T5vq28 c`LzlijPxV׬kxݘ}r1q$Rs vvOI9a|g?]7S_,]d `AnWV `:ۉDaoDE)5zK-5|GLNb(Z6^P_XwL^CVL䊄_0؉ $cg\>,PNѵ ܩ+ GYh4`A4ak]GQs#|^RdN%\y' DX@x]0WM0"Tp7mBP$Ipm+cQ֑;cOZ1}q^fbFY: ć @K[W`y4i f~ھlfH0h}%w'0LvA/UN OmxnC;+BJYl J/] ]d%Qu?;1>3k>xFjLl7,)g'7S_ykO@wy퓏na| lUTig?CkScӻ(p5T鼟jX( N6abr7 ]Hۗ}+*BgXmaf/f6X"|8fd/Mp_7}}Aߺ@JuR.E OH|d#˹/7`aSDyψhN%7 }S ܟ}{AЌ)签gՑ9hp1ϽQw-J;>=v3w޶(ꡚ3b0GszQnNL}GݑšM˖I|P ֞\"x}ȭӛϾwN + &AZv@H+ ݇LEگǐӤW\Ȑ]OmܗU f 4 ${Yf#Ap]/ G# nhHupU^ipB?\ ؋̝Iƛ+kPF \~bR5b|{Mw1ɗ ~g0ĉa%[44/E̍tiD 1]5g^=w6~uG篊MA4|. Gs$`76 uK@|*M3E 5d=>@t2$< E(b  fݖ_pcM,U%=h' 18}g7Y=Z2u _{.Wr'z-D7.ojA~Y-^?%DoO7{0 T eYdwJ&礍ꫧ$-/XzvvvX/Лri%3!\[ \3_CgtC?{FP|g#z_\/)aXX3B"V(KXoz⥯O2"壝SKA KϒNz C'ŝYCAyv<{^p/7MulxP3/Xft`JQQ=Oa. L A#Ȃ,& OE:^bmNNs}֞l75Z,E yz{E`A8 {Ha &KsYSaoZHG[ 6 MPS{)l-o*>6~IKp v9nW7S g ;0/27Zo- >!l_ @>+z't|>Jkܻ('((H( AA@Oy\PN gDE̽KV75aL2C)5ǗMx^ۜh*MpRA,E{ `֯ ʏxyi@k\zJx~B/ʶP)u'>v}76x}<-D]ky=&>X TxzO/ֶb339_ ^TʣğS>qŅ+Dhp.ŧ~W \bP~yKOGdGğO𷂆u;}]4UWs OşQ|5r*Ri 7ov ފ=`M X*LO>赥B].x᯻tVWj~?#C3u~9~/F}z'-j1~=p/zfţ U.QBŰ;]uՇZ\v(lh7%7KzqG|*Ool_o,,-ci[X}Xs\E?*,,+U{.fG3A}L{#7Ŕ>>_)`|LGOcX̣c^.慫5H0%򋠼NTn%A9؋i_۠< t `'6|nɋHe{ +1mE8A}m`$ (xo؟' ^# ;Hs,֘/X{`GOAG!C E^"O?(iihhH͂U*X5*lڤmBDFC?5F/tζ`do[(o+M(?恤e?(`gE1I V]Wlw]nj#`IhjwB4*Zf}vKY`*v<7p9&B| 6銏V l Z 3ǯAF4\w'>fG?Yx S-1c i se"39緘Z t-/^Dulx(4 |Qc Ep\tL dK^(|okw5a&n&p2!m.;2;>/b8C^(xݞʑЁS?漸V)3HlH~)NU \ǟũgO (+bPfd  GG:yL"ML[w):HFZلS ?1 IH,m讖Q$Q7] }LTg[Ѻt/]FN=n Xp(;ίx w20p1˱bȺ_no첻P{b@LT㗄1L([)xۥONu{yhAr0k1},hGv qw..fF@vl`;xQ$X@P+ "pGJPa#%# v^e^+xUkhĘ]L$A(|Y}O kۏ >Ng9wB`Ͻ}ѯCu|)'[[0Ox5JW4@3T="F,ň vrk^{_soє05[sI7`{pϹCF]F:rȗ-k׶rk_vTn^~ad q^!TWx=e`J% ԩG;y5\Ľ,М~dҢa6OYCUGrӳsZֈL&]}iR̭l_=^Z,uLOT@: ]M G0O2 YEUm>G[oLp? ,@a|]bP.*(-jz:/T.C94m\̎帡;;>8s~վ>P܊PBXϓv66iG?w_"A5'~'8^{}YE~ħ^`kٿ˟%+N ~DPn|;q)hi uo#zϢO|1N g Ĺ;:4t:Jfe2 pŜjW2+nyق+4ľ aozh&:q/Q ;`r0P=C\;~Gp-}0X Mw G0} og |`%*CrOΊ\^p; i[~qڵW }xRtw ؑ[W6wx5 @*friAzNhr1`5T;ϵ})S'6b'B>?ՠ,ƌ݈ )GҼijlvcfv&`ks]Fʪc{ΙNNFLNO^-_Sgg,6S Ұ/$g»%E)m&Hն<'[g×Feڧ77rcyv>>"wu乄•b3۽Fߔ4 ×q^ L]ꆞd [b =G)HR,D>hlA+P|Cc.<*jЎ7W ޏ{g[&To3|HVRĵ(%I#E'-=~ʚ(x=˵D[./:K)Vo¦kL>Թ1.xKYF:DρodтIv="odge'/s[ $a;usf,Og~o`XceZ~ѼWu1G>ak6{F '20޶&[g\s4|JWA=_"P^5؟7 3( ;o\kR^{2,A+o(4G>(7 *wn|g5_kI} *ۅQ!" i)g{cV`*=~DL:aib)X,Ȇ*Ѕ F`>{g9b6acN>[^P|d,wYWwyړsO>rVIg6> q4շѵ>d(t4!%m<ұs/0-0c߈Zm,C#) {{9Bͣϣsᨉ}{_ƽxn_#K2tuPMh4ѱTV_- BO*8S EAu"8ƀMغɴ'JVQ8-sG\~bn -mH@N<)8f&I0]o@`?: ~ gˇ`y~n!MۦDuqpbޒxFN}Zg$%ߩғ5G_V>id`ą%g^|3+vf`Ja}|;0[+ ΨyX\RiOn滇ۥNlo  (xo=>gjӃ8n:Ό0X̜Hr8@ĹXryR h8}On ~ovk]= V- ?YRh`d7[5#߇ߧD%\W{jE8"D^#jn{m`nZx{ @b +L'T+{Φ$̱[V%@//fqW,ptmW 14ě!3azN!s=AVjO \LA~mm]^|1c%#,HOӇ9؏r)pw>3>^q90-j:I A7)$`cܳvGK+8_B%lW̚S|{* [!vKfdA9M{9BԚa^wweB+<o{66nOzZOq|}#iO/bhױ0u @AnۃƂ96 A?YKfEti&s S&}rM$`]9!"ȧ2 ax=KBuϩ P8!6tăq^5.oF܇w ,V*O#?k6> Px&w|7Rn'~7>=e,V&1V񾪁<_7w[0-ufާ9xش0A7GP_/-&َB=}hOYy0oF_s`yExZfm==D^+7#i7+D>a?ɺ,oav-VQap.R=|\MʮyVo,.0D@!\=~Sÿ艌̘n_/\ K7B[(2ev Mk[R}M9>.5{^8eFB##y羔5]ȿ>G z#¢\umfjڪgb߄Yd-V_(Im$ݬЕk;'8{?lN0%hO }^LPH}Fn2.zv۾C:o~;Ys/@<3W}\X.bkdqFe/cFPۣn~:$]!9&dvȺU%AO.G>+ܵMlCӔK`gv;B.-dc-]ҁdn ]JͷC_MЮtrZɄoӺ@^#y=1F=J:_`o1'# @:h;X,u$Mc%3;nA`˪Aýz ^G :} ;i m_Oiޚ.NKm ]519*{`*MD=ib؜&^{g`_sH6wiOC"iYj߼oidN m?Wܓޑ! yl;[eDo^jw K9r-1.e5Dɐx|NV[ZEލ{Og1'􅏊GoZ㌻-{]3Rڱe|斩"]?=2ɕ2wQƤQs6b: _:Pgů3s%rbJ Ab`eZ4cV_ kZN _/[ W aҚfӗ*uEy6`RWAP" Aذ""("GEEc)*E{݅]u=9vNI2)O$OvT1!:|#9E=|\ 78E</4v*_0=xG !\#s1.qs]4wkICwkw- \<į/];lPV@H `{Sk~r;&{Z/RE "|;и1[ ~ 73Øz{c!Ϙ2M=@,2<L\p~ϸ̼|S4-s8+uAC3-f_$Яӹ셁0B5fIz rSf)gt܂pVxH2x]cGzgf*) ZTxȘn֢"*=Ѐδ$p h@~ sC *A &xW41+ G;9Qɹ^ۺ_`ˤ@7 <»:|\lo|kR$OSI{|h%a/ztu؏p9-c,͢kĢ҈Y\4$v:Nã,"A>Fg ()~ G {{reXV]ŖgCג~{"x,/Eǎ]G '@rvXz ? :C:n& FRDw!^r%je|oeEwmHG #gm`v2v޿ :W30vP#V _> G~:Nf(>;?p?n j{`h';Wn,j@~TN'.hCuv})ڀ&Fl\<eS'eIG \EJ0Z-/*O繹5ֺ I/~*KFf]{6K ]γw-a;#+c{nCoϽ`_⻋i|=;NIxz>wx؝@^O(PܽZ]tWVx)F+,1/m2T qWAK5= %ّ`s̼}sJ}HAgV񆯡ti]¯o-h['BbsT ХA;kGf)v@ y[|gkk0̬_&QS?(2'b0n@͌ W;uYO^|~a-j_]ι7pŷZY`Ȫ8Y깤;읅.Y@J|47;:[AܖI٨t?x10Y@{rW7VA X&/3aP{Tʜ@U`L,ʻ5Ka0Az&jgT >pdZ 4W8Pj l=`w5m\ڷƍ]x܋J'ILkҝr ˉ'0eЏNW  alP(+SUWq!zP0 {f(v[%K3ոZ 9 7>كuN~?q|OQΡTﴦqo9TlgT$A@>y R%!|񚱵ac" @}l9%uZ 5}{4c[OPZqh{2 :pAJ ď+uN3L&Kss9bgqa@vk'qV5?1-e@'L*D{ l(|q*fZn}_ͷOLg^?g>cmofմ͏.|kϜ7a9^U J/%,FB%d/xB! Szf\SyU+ t4~](hA^nV)2,W*E'=v=Oe=w.qj Xγc¯^v;ps(D;8RSKñ=Sְgž$!zl-yc3Q!f{Ryc 5 FzBαl\%' !^ а{;uoc+3 p(8 B13̽ȯ],}qf'<ߧ~~.#@эs@t5ӷg0i`@I67]CM<}?m>{F32¹RE=gilB~sଝׯ$?]SkӔ=?MߒiT|s:eObϋ(=n898o Њ3mma^ @LH@ D g/[̿HB90 zfaC`B2Y,| @|||grRQ'~fn;B`m07^@V3N<^fW)2 %c.-w($[Agbm"Q3>7pe%ރ@l툶pܓ{}&.XxM0){Q2)~X0tf7s4hK~@Lj% a!Ю ,-:BR$-$~ТgG_GAh&frfϿb<=[MowyuJJ?,JC'.1" e^cҾ ^˽g/hEMYCp28M*JY,@߾, :?u]{9.?|M>"$}qNM}"\WeGBi<txr3وR9.[ssZWK^/UOc(nVxn@؟90?(wwK Qx@pmwp<bEggx`,g oce[GE705aXWog"4/ eNq*O3-:νQSp&O}( v0!Y1RYUd͑f3KĄZufG.QygILyPZɏ cK[wDU:1~@3a8e S[߱}KAw/UuO4PXG^k4_=x Bnf Sr0 #chI#H^ I 0r#,Ic|ƺn]0+-'gw0,,زaT4gu2b{6vCB굷 P /HF`clʗxvFcO' CɯY4)#?~FtKj#l@+Ĉ `eoFH<6{s^'UE`eX tJyg};isr-T)rk( 9 UXi[%FWsMc,P1Ń pI؞pSéW$د>-ݖ镸3)ABŽd_Iy1 @-N w<wo;175ލlVORF-Uvrx AZ |I[y?g=N y^*iAu7]S@Z] ;D7JCe.lzEXTdM>nS;u=r-SYI9~{`E'm7v?c.'hvP[6V|UgҨ\Zz2R>GSM?,_Կ\cOgϕ ZWI .Iφqd)|/ԮuHF'ҷ(B 2XoHX }uwp@9)f,&V ޴GZ_@ұ |_eUv7=.UMRk)z|M|u!URK?(?gxw@< CdX7p)?2PL >ZPnl_oHAg fsYO82ƒa1Υ>}9F=CK-Pᔯp 9^|TRYqLy#)'W'}"|J!]ܱC7%ÿLKݜ: f{@p Dο L y\0a0}"=@~ Do1C:%o w.1 Upz7M9w%$4pD ~Ou8&4ϞN4$<ƄO&T+(M@;m&\+ޭἁR;3zg6%#7SHvlAi5Qo ;yL;%ʁѪM5\x@z@=}.L)@)_0tgo؝s w";ѷt!j XlH_C^k?dc$۰[=?tnѕ0=ȞmiA }q\S9 dUkyF%"s;¾Ww{,b]2@xs<Ż / ䷏{W NxGo JŴG6{]j-#[InL~C݂m >o4,n5祃 O6n€;3Ȯ |ʝw#cLז%NBf k_(")zJЋI+@xv?OC<4|H=|7զ^&Y7#7%j/: ݻFo-Bi. s+-4E|ұ2|?[t/ON6ʳId9ml@gh;%mU1O@vǩ[$"@R^%cWA/!,/:醙:/ aKC‘<%@ 8K@%G3qRDz|㞏/1q5"0H޶ʫ1|1󫟖^ CUX^ &nGC(3l؇a@~K[ռ)q){ ڬȩH7V}72ߔ# ),ok7VK[ {lx{ Ed0=C` o/p8&GxmL У9in`b|tD_tq1)^? zupk#~و,)P:9J^&P-T0-܏tER`Ψz(*h7$>%mq_=4U ϥo(#'0ы}|r5u_;_(-42ǙuSx*ſh&! LX'; [h"1XO_yW 5R W |g&y'Rg1(0`:d4[5ȯw<1<ރȋ[=¹BފvgɁM[#0U[{敜;O{s!Q~9Z`\( o'㊢)s|/36&aU0(0Џ̢[ cV*F3A8=k9Jpر-d)x=cFbU4RU+;@?%k>&tK N1WYl@p.h_- V&`u.#sh@8y!3`ڭ)C(~3gl?45{f SM ;P >O31Vlx.rF`SĐ8Wu]豤zQ,Oژx hb;FYf 03kF̑nM]Zr4G1Zqse?D{ ޯHIX=>E& =E55j |*CC~6bDw[$;-6. G;x3$c=uc^ uʀ3l|y,'܊sSR9}c4d|P݌懟Z)&5]0N™?${27}ñ+qʬn؞fu^zcϸŜlwk̀9[ |Қ cD kB/6XaC/Fxփ~VBOZ0vP@9pVvpb.cjݗ~(_c_K3άcIE椷Kj>$0 :]ϙlPpɘy?kqG1[3XpƼʁ 4 ӺƧ:%-VZL4Mj,191ޜ~x 3ֶ4n JcAɿdn)g~nʞѤ1E0z|Itzūt~Ʀq' yKpEܟq 0ϰZoﻠE Kl F|ϱu=uz+XG7*H`@ oU.\vit?I: u~%ghSpf0q6BiE {?kL`۶~U`LlfETg=ڣ,&?_ %pv@ xo{, K:2/uSx-!6K LJuwJ6ܷH^`b$կ ۶h7 TV!pvFͮ0n<f@0!}W[Y:4EVˁcneaMb+'$6W2}9weюܕ ;vønIrzBRaxWa4:Ï߅,D4Ojj==-Kk;0 0Pm}BDgwfk및l㟍_301B?6C^붃Ct?kY? XQ*҅ h/'ӵ%峈zT(=tMޖYj07hs*.9~`VrhXvP¨2]^"JKjjWALH, 7NXsgf#䪒=/TL3Rhɥ~{qf?ESģ ֐\J3 Ѭl2 ;["teB!mBgd? aΩgpaQ:8VG c{X(M,|\۬`ցu`7'Fuhpwj<%fqץ9"(8I(M=G 3-g/Xc ?Z&-Y1-"6#Ε(IZIzYs'n̫hOv:y7, Q$~!!G=w_M}&~_Ha?;;za?s'B/f=G?׀2Z \cx9%"+^_trr*!K¿=jbRFM F|[@ wUk# ;G &51Z^3˻x? #T3~S[6MhYLsCϚ]лoh.d=b%w (1K(<| xwK|rX|j7ZP$2w+2}Np"xmIWց7' 2ہSOuܛMF)A:a?fi6j >y`#o7V26Y;39]82е$ ^V3v'N 3U 3M~Ul|Nنl-ABmO$}\e, g\QY(_{7\Je$؍7 @IDAT%ipLa^Zk1b%ؔ8lRyw:0R/hk)3w"5 G.=>Gl$5aW7ټ{@4g &<Whsl߷btg@OImѡ\n"@3‡oC;5kURΨ2e go%b.DQ<] vu~  sPZnfNy{B/f#Vꨎ5<ao0,CU,5Ytvt9ЮioFqgK>΢UӮ_-<ܜxω!3 L?ܗXN& s_u--v\$ X7G7 'dI?}w^tq3@0Og+Ri?#M*M{w2/Fݕ}GN= o ҳ跮lIq@{H0JN=e%d4~N=ģh^ fP)oPr!!) qÉsP"=B}]u4+ů7`{  !&r%D}%~4fƉlXTު,Yr)y6h`]{Kc6n"La#F{MpuRw8ecMK,]`(Fl.1;U5׫vxw1J\=ڏf,3I}RVMfg4Y[C}{zJvX ~-Nj3+R>dI<笊͙Mے7,vɒf\UlFqcȳ Y3Sg| ryf3TwהF0"U$lJ!dnz` _{C=]OBk6n$$:$N_KuEGb$riH$ϝ >pi䊭u7CV%)χ=[1vςKrFY_閾%cwFB"c,TuXy0 _FtA?rM`7^O|?i}ďG;'P>"JrD%n+$F$~mDW8@}E;o' OC&"zAi^o?s/v 0^* Oru< u8WRW3RXZ ޾ O.c&ķE}-(L`&:bud LO4BrӿroYɚ0iE DcՄa4]_"@0p_..jV"GK= tQ0?ݍ? y} (|"0n+&kݥ0n 1"_`D؋*qK#Lf`oW މ(jnE10 OrZzJ됉oe ou*u*`S;&B% My1+w庵`Y["UM8dhw@1l8@Q1,ΜDEʕeʇn-(K{߉[V+R)F ,8/gj n ؀DkӮL$i(1 #ˢkK=/ϖ`.λHǶcz.!ړ3ZᏎq| ;j/q|COtLL}5>3L2x@*mBmkU/bb4=;(N\v+jm-_sخQn 'ʭH=$oy K {UO|?n,ڍXd?3gw<,IϽ@~oJ| q#F\m]9Ǽ|og~i>Kkh^ÐFP4wKS@6%&*N{$V5) OE/eZt_i)^ LyYR{_`%w"K0Bwo#BV= |Wnd 3=O(j?#~[r>:N؛:<:Y1ցJ9O(yC?DoӮt B;}%|쳇j !Hi;Q]è>^; Q`a@ꜴuUiqOJ7ܥ*B2H?sQԓ}o/GҷC cOLc^و 4-2r\<^VT~/155{(#g HoHn^-sR`K@}?#W/xd9g@,\L"aTMR^p ϟ(ƥ&(}4|}>Ƨ1O0 2Qь7L(lis[N` f,Z6 E$%wy{Am`ȟ˘93MD=g@O~-ڙghi,_Ip 8sMS*# 4{y_FY RKW<9݈r~K{3 iɘٖ\]$T03Vt9].Xl`'65.xhO7>a7Ls :0iKw`P4];Cfj8?fMl]Qd&GCO{}@? |ns@C5RƠqƷ_7t/ ?Q#"8xeRxutf| zyMo\ʼr< ̿Աe#?s``1Fk7HWui'/mDQ gK @`tli OF~Ĭ`[wa7&OnN= B wh3S .ت6^lB'u GqZ) 'ޗ8HAq\!7\pQ2ALwo۾CA]!пW %iWѹz&б G{|T3L] {ܥlT F+? WY )*T̔ CXzB|L'>|tOt]ucW\}3@~np )O/|g>&>'Y63 fdX{_\ۮl>yƛzu?),@WQt B|W 2%K@9.W.a)oXyF\sB!mнs୔'ƈ?=3] g (A߱˕CI mM_9Ԑ|>drf Jo 1ZGK=(ĨnͤԮ@kWJR7q 0|Yƿ1Bׄ X0RP]PrXZslud6 D8=c7e]2y?Aa/Q0ALӊ%oG4;vH\Av9z { Sf2%j']P =ឰ-^ͤE+O!7v4FM`4Xy?wmùK|O` upVЖ`R^ֳ[ ߋ؃Īebw? L_~+OBe& Ɲ|Qz#`EX;4N]]!p#J^<$>A+`[jfu4$d@C64XdJcJƽo_vf1P xퟌ/u ܬT*wbjl8 :BDn71[ e]M_ ^A: Re0rʡa?Ҵ^w |.L\x jgfb|P(lra D5zz{B*֊A} MORly;x4|5ţg!s0K 7~/ I":gH3C:COɃr=!?P~Tx<;pgg˭/P +#~3txdo _ zRsĮ`,/ۤUKa~E8SKѓc QvdJt.zc=߱|Ig1Z$M< -2gK @>G5_|R>1( ɔt/~9/yfi(R@!y+`@3Gg>Z맱k3c&^}ёq 4F;0B@ǧj o(}aV\ |G@`{KG @mK,GY7[]BmH9&E`Īc'nqSCu['W=1̿SOeR&8K[]d6߹\2e:h(z@/Pr?rG:-_ŝH‹'p;s ^NPW0:[ๅ@8~4#r D#MvvN,^71|3UMgo* +,NCw!I'3` 1"pAS][3h [+xA%P[gq6^ϧG &|u0禇2 ?So|#څqݾL&#pXpf ݥW }suՅ-{b'E<YYx58W?x]}ЮV=_>|&|(.hRԣ$J]?^}{˙w3SnVFS Q{@9p-14e\uOd +%V {P @Ope?t.+<4e(-B8lW++ (pIꎆ9.B`&|k L h^dSo НtNN̏weW ## 0>˝Hqz 7 { .gx <5;gEv-"75ځמ6A` $"sjTuM.wPM, Y A2Ow%(Z];G 7@~廗8{T5-"m'õa8p 3iI t o: P(>G٢9qp$D2\X)Vvfg=nLʲ_wIJF)g\*Ro5>LlM}Kqt}|5j̩lom=%۱=#xȅ΁mVŌ0 6x$SSOSnR9S3l1pO x.r !Aܴn/w8o% +AR""pƦz YQxxN I9U?, {i_+0wX":p7>oJh+kdoyjYNJ~۟51X]hƯ*YYsy~[D6:(QTPRŽ+ig>07:mܾ=.|r[FΕZ@i е>.(Mh_6Y[@ɾeNl+?HEY"1O/fmHzq0=Sl'OuܗB orC/+HCr u@7#~ P%u:z!nð1` L 7-_VߋyX;~} W)|0c<ފ u6pa yCRѴ3n%bͥl@%];(%N x ?*B%>Ş֫䳾/XT"I0QƱ7_lEXsNݙ1(P.ţ[i۳@/ \kŖL!PO'O 6v:F }'Qvv@mga2 *մ/xفz F;5#>J5;l`8n"] (38Kڀ~MG<d@ cc"fO^ˁd+!?߲z LF1֧"V|JQ/@P_w_7a>t` {ةo1d!-^E5Xƀdv޴B?m=c'k~  jo?0&:aadMzo7ZW"US~<8@_L n{@o乖JH#4=Apprd/å#qz,مg6g\ٌY},PCw@^¼:Tq^>6B@ҡ3Nx[l+w4k^_[]&j@Ȫŝ0oJ]tY!v#94sezk}J} .ƿǽ5P{_5NGSN:!s)[4Bjkڝft+XB{v" +F4;B$Fb=:#>!|P Ӆqׅw V B{^=qK?6 v(<@+X[:7oiwuE8_c_i# Od&C0N)0{\ cU~YBx {ޓ{zP:pfXz%y@;19jj1 G+W[q;u+~OA&˒hk++FۉV\nY׻~\+[),wėG9\!3~Th*w-x]pԸڹfSKW<8+7b뀵̹T"b ,b1ZZ>xsF.$9A?\0JG}qrU'^ P}C:[لCE;[ {ŗա-ov kr7Mn{s+PzjzϚA0K*vm߆w:s"\u˔SqYL3H(-+4g #u:&*m5beސ o֓3S8&ܨּ?;9NbEBm74F@F` $@RI0~Hg@_'/ zA>.ahkϕwx=u#_}b-7ϱ>ъT:#p?-) }Ҵ& 32L@0ON)Jd)MsV |@c`j&>7Y5lpЈeD0b'Gf b qgCY׾-M)*B"ОZW*7J RdVIde93gΜwvA,9G{?ESf M?{Yʛ΀<}́x.L'0ʭ7`5%9NjҔ)oV=IHcWpG+2ʩ,՗e,SLm| g$Jg<2wNvFUޜBxT!^wJ>JՂţ{#[N}*'/>9T֥Svw6yۋ.4OreNc7P*)o"ҕJb^6lvv8=>L =TALVV6ɗ/|B`Gq9h2{JWc15NϚM(%fEKNo^Ivym`CAa``2ܩY+|aǂtTo 2bVKɞdNdAYbRJ{(O< c_*~D㢼; ]}s"r_xE;/AF}&Y~ /Up4)-lF/K/ԾHfCk=״ͨ$tDE˗}ͼ.$ Bjb-B~/q8ML *ńawA0&t| !xOP`XJA.q*Ȓ]ޚƸR1N!|_O<"]2i\A0t ks% *#"#ٌg AJ4QvJPݜ:Bf̆l{G6 _^p]{/ d6Gd{S_8MU u}uƣ=Q&+=N쫡g9z0@t`y{Uf,u>?TOҘz<2'~a ,۵JfEOKXAt؎ۿb`5;.[Ç8^UH赘1:CZ|$֦M5J^1U}hsBU(`^mq~({} j4)eʜKyug2m֡{MWLڠm߻xJnZ598ݔrW~ EmDQ(_7p<[R6MX~U}vA@(i $q[82Zz^^KvSn)usK'/0c;(IƊul"sE)G6~ӗN28R~yKv/@vg AJr| izv y\p[M`#!l>θ~VRɠ.09|"2)=`2sOAB ^#П<$``UN]Q{Gjh#`AU[W,ۚw]%gb&=Y؏L'Zp©RHG{}w[*Uy{i'/ z w/p_H#$5WԮ|F=!%7O`22C лMtuJ\CܽG-sqKMSid[WpyZ0W38hMWN<]]ks3HΛD>m~i>}"E:\]PÐWkRU8R(V3/5&~Ŵ1c1-OF,hYO/ g/%H ~ƻF- >P GpV!uwv2!I:qkqG3L~dUQ^M6ܲ5ªf^@l} C-y 9N?P5_4)zGxOx(uUP:咣?=һ e秙Au?}tIk@i?"\)0 $:<$:~|&!8u ヘeUV}d,dk݅;-x .-hD[/eFCjU_OJ Hh~r$?xt9wS_P//}:.s(ejqb|wC]v 7ET +yל.I:}⑅:smž8)CXLvJ OK+41vf@t E:?y4: F;ɞ'WZU^snټ@n)AfAw ݕ޷]`80)PdO=O }id u [#{ 38ޕG| K|{9ϝ]Ȓ8,h&ӌ4Y63( Ak7r_X .CjKANxV}|IvHɐ/Kմ,Scr}ߍ}GoK~dH4z`hZA|OL'B};p=?dm›MZwQ֥\$5P@yi  J}0Tu)1hO1Ÿ,\}L)|Srqu@D#u 3 ܟV[yY} ?${Sb"?O IoEŚ[-Ɲ^ВK]yڙ4yH\62@6d +d$®]C軡娇Mȸ&ܦk/+߸@IDAT;8̪-3@?틹X,J0r N}"HHa_V-3o{"y&^x/ፅl0<3]zW"A$!M"w[qdߍL #?GbG' ^-s#HaODtZ\C~Q-H0<(pW#ZOEF׳jI@CJeKC7X*[N 9ZoO\RcvNAr'S>m |1rn(d(&}/Pч PaVXRsѵSlf|tw[UkvZdE =$k ȥ[2aI%7-=܃\v(J}j?-yޛ]y&oB\DK3AR'rdZOcGAP \/.|"#\pAD_ NA)-xO]A+\zHheFLwia{O>Z-LE.J|w?gy]+J}E̺H+̷{4[eEs;cxZZ1^%/(-)zV}p&V% nU#ePmRZ~AUI|AyxaU.mŕO)qUE\pb}0#۸|~9ړg+}:̪1)(>φ\kDž˛@>}5lT#l1O1W7ѭ}'Βi>dPsI#A<û:i!%g%Pƭ&:JGcogr"L!!ڈk]u.) ( ?"i<ow;k`=crQ!G[=*{L /I $"2ws8q6Ϸ\f*]a4 |Cs6z?jK]N2i*4X }a98r)<,qxB1Y KPd}oZjS@ggy6L^{[=>K /#ݡ.(Ch~)Y􃉃gѲr?T2Rzzo- /-/N|/f>E tgA X`^r[;W6 [4}Tjڦs*JKǟG\QJHNeggoRk3>>17礵09m/`nsw. Aŭ/o]Cg~VyO3l{ >S!<@P.( g]P\P0^&( @]-ڙz*AHu7c:a]-CIoIŒEisxSJeNJ#>\W 6ׇ-e?Q@[Qe˥F/uYGU_40 ^6٠c's-x(sYC.h{5ݘwjY{snxbR.U؍tL/a;ny=e-OXu1B9? 6R}2A}©yiē27LP| -̝'ebrRSg)[cv1y- ߇-6t&|ّқi 3:IqBfGᩳ>qԃ s |H܇>CH?Kk#zfJg#/"_+믍& ^O`~)fg֖$+혜}/zѵ!m->əD'_tp] e)n7wCYzao ze`q +u4"_I1Ēw`_>'~C91 %;ÿN'?pT즊.#|_ }}j`9g מHz]PNGۄar ՅT=7e*hG 36t5\UruµГn`* =|{@/ *5"AsaE&`'Vu.l@^xw3`* /c z\R ĉ9ؗyXPIw!lLklOt Lv/_pTVI( ݝ`4%mm2\an(~ zPѳ ]`6oɈ-ZȼYC{nFc^ FLj$~3a<+FD6:xn5$N\c΄$zpUTG)J^'7: nm#`,m}>A;Yxu{/Z=/$a3sp.%9~st;:]OZYt-K!`Fu\O՛gIM؅P-" }&T&IG3T &@WB]-N<yqbK: %SAP&Ȉ/ {^$=1e84IRosGjƔj;/AS}~/bixeWϚZ>-16@8PҫJL95gYO[CLj'0~T`~U8#~J&[T\-Pe øbE^GSϔsj7}70^וW*{{ ␷B DžB;rc.žHCA?s0l5kr,"? 8m:|ף̚r/*P`r? YH< {TX@Gc?0 7x"lk@vxD$bL$I "7W?8) 011=2(O{c* '=I~C Z;籡0* vH']pkiH9>DU]8OXWh"G-#~9?ȜlRVj_p P1'Jh7܆}iلȹARECa'܂ڠ6T^|?*F6ߘ3RjD6Fk~r, HG #N U`$?i†m@E~D ?Ż *A@`32B*F>0{0}ɵ$Lpn;bJAKvA<".sbwfogżq=TZDFE> ;DUIJ]?sg$Fy@ +1tE#N "I_0v~#=6W7Ph۝1WAyzebA.0Tjp{3Dtvׯ+MW2x2Y!f'Axg  x>c>P`Z̔Gâk0ro1D kx`#4:Lyxly 7?\_"}RBR]-E:}t3V[=/_d[r: AǬʙm 5n *\3{>Š:ECE۳~ԽZ1=\0*p¬}žHee ySه>}xE]$$fwH*`茳зvKA1H6 W Ng?r wP*8N=)afZ*(oz=}sx[0O}C?SqD{=wщ gfTUcs:dhѰSnu]#0G .aC@yZpS(3`鋣OP/CEtX#K[GIon{d Wth<ЎI0q`邡 z. 0{>Td^V a@ ПT_w`!$6四YUY]$i P7@CH0\A}}W  ڊt`B|1vK?{N6k}҉?Fq/7Ω @`L'GT@~Zp7m뵺߃_*8<&>qsz!n`* Zub=-@/x \'k#[SX281磍^k:˘\_NQAIp:p?~wsU6b&QsyW}x_|&GTI| B_py y*_&ϭw~I-l;7ۭN@%݂T+ƙD" R@Xw31}sK3>Ft{H`٥+] '[JP?c Y|A!BGs׏+RRH\a2f_MD{)yi{՘ Յhdx/)hY5 "@ܩܑ$| IH:."`⬓D57`@FR$8*2V|W quMt'o0CsF`찆?W&vpv$gd2꧍;Ї735j6\ AT}_OP =*&1fݮ #cSۍ̍jFV.(d sq;%(D23y "å $撂Y I}]Atp9S6?(3&vwu/,wЅRKpu:SPz#?zԋKo- p9غ#<>_ :mX1bnj~B%?֡!iy^Proץ{hW28h_3 2C᤾+7' p0. M@;E6wsibeXu"˘ɭ4=`uG;7.,t:z Џ <ʡ/֎Pqg{s}'K#}ب*2X$ )SM3KʡkoEǘ ^Ӛ}vߗ%TK[&3ISs*Vjl `gޭ.WN%<`L` V~ZEIE4NVkAO1u"yy'Š*xn4as|DIy}WKsWTNm/xrbzlzd:،3θ ٜAg>b{#'O\]otí$zTq7-==/hۓث\;d z.C9a8EE,c/ *ʂz`訞 mkE>|X-}*!*-_:_'l6db_j9 Ϗ?5SC2TѪyZɥZZ,,0~C ܤcpgfEMo~ =!jUy9Ul/Ï@1DV)P&.vj]9N^8<+m:(-',45W`g)lkQeس36Z(O> PX_NY(|;4ܗS@`Gn`Ub{~zno">/ÃyYNeԦ(j`u^+6Y\jy Ғ0DAAMQ8(xG J*w7R0T Gs4ѕ`!#7 .AD [@X,i'{fuB=:CI2vm>.c-z3ԠH:N;V ,po; -1 |z|w;C'C4AxSzx  'I- &>FaܸX3w8SrO)VC./GͻV.k6: Z=oW~6lS5r3HK.Ya<ÉPn\zmfϜ^G.c7BL7Τ<8/rU4/TLEʡØ` Kr =Pms~@`.Tdg'_ˍ {jdr]\n= -L 3 u ͅp# bOk^zw0@cjO!]Ң<*#?N,c,GѰL{XbHQ;5r_ceK N̷V|(@O:U0iy`*9 :;Mqx/LJpWd$R~ip)rNQnblǰ 0[P@tΊZVK \%BtW&1+;))ƃZӵ% ]H< Q0"RcS%iw2*%8AżGذ[P(@CnTPmy~ a0ﲾ`0-Jt1w(NN"y(>Wn`'a&Frg8-wOt*hnTmޓbf309$iO cAR xz"xǧun7ӦM7qٳ1]zɻ"u%xtsg\Z©hxw@xY!$亴ݝ ml]ͫN=NA}!_\a>rf  A|O>?1D?t*˙-ZpN%NP܁hC>L.-wHpNl <ؾ ߽̭?g[ok,|c?e&ϟ:3EбP0q0lߕ(0  bz8`ΰ~Egxinsss*pԟ7 a/aj*}Y'Oh҈?P=O̙tu@yp +`#{N7&{el3p@@Z!8H`̍dk=ea+}2HQo 'orne8B Xr9:ZvGJ; uf &?*BQ92E6mۮB{m3Jii{{6=ӱ#%}9ߓ1:GD`jtv_6[_Č.*K,لw(~^Tɫ>!W)ye* y(eU[lt#Pߪ0ZFтx%>f$skO$m аŷJ;9ɏ2Ҡ ȷW֋vCA>^}YOG|`*!Gi*zzH; ?fsKbAo t w'G.zpT~'>d`҉5~=a\1Nx/IPy@.% k 7cl~!2lךY/sgGAm~^q ҩDۂr""{vtMm>#X3gOgD%d?.W&c@rv?so5BEUO$o>l ֺ53JdYZl@ŪsyqE=TpU>"<=G~LM {|gEZ+39%R&e UmUgy]$1{["RdF*65qҤ?2 8[ċVG }`ΨN=9nM' cNǧOGpYjBT*juɶ[,$_-}d7"EװhFꚓ[Hu927yқ=i<(;yKxcAYX,p<o@v[ít)R9eCtўyǛ"|/SCQ 2; ~F^nN)Upi$]OڼO W\W߃ެ Ap5>`#(u:G?<;é2jv[ˤg}eˆ!(:h @pXc< TJ!7̟K+"F)3D%)) Ӌkx3BA|}(w`ϮmV#{,VYS4׭œ?YQ=z sXvh0$0(r w=m[uj yo >87R/ 6l`#<гUFZcWпB땼4%|p -Z#? GE4ı>jۍ =M ɝ%1z8u>Yŏ}Jn6[lw;Aa'Da¿ "S?S6 _*p7XCC1<]$A1G_]+#uyq/ҸFE7ӿʹjl*y;E6 (t-*o>1jy#3fwf(C39ԣK> tfs`Q:q1xKݏfF==aWͥ3hȌ+LMǤo/voߛ2Y]x eik;Hr|?‹O,f7/D(HYh7|* d_Øm`{;*HWNl>tHfeUGVD8 1oq*վWBp6b9:=Nx/f.#X8f|4B)?;N]TRKCT^=g'GjE;7gvrsn:עP>Axz|+<=TG9MNJP['0g0#v!T8ny#cߘYS>;ױfvqpFa`h^!s(mtYpSAEnͷ?4Z:^ x8}=w9Ř [g7Bx4FUvX)ޟjvx~wgo-S=zX ܙ B=W'ȗ>{̓UcYڤ9#܆n(U /]xo |w~`3ͼT1ˏ;JP2wЃ$-TD3 >XIR Â[}. 58S\ I9Eߪ0>6}᫰x\]-;E4q$o@&r:u9څ03%؇[S ;n-MqyA.R :G!%cA`@} 1T?#{sIe@+ .@5*mV~* rkXmuwOK>k]j/t!R%(Z񅏱u ?$tֳq@f*>ve?q~G^WSp?wgf;c=Vy[\,BL>hG8wa,tV'՘qÞ/h =.0?Iux [lg%Pȃ1#f)݆-rc#"<Y&锡O||Z2F`>]d{*` {cdU1m`]}` %/ÍFaI%:ظ Nyy!6ac%;gwMnfឥ%0 Z4˨OdyO]*%iVw $vq`ffG# A؇=ʠ? w c5#2Q:}{(V%:E*4TY>\/殓~}m|> R}[K_\C4ƁE3Ok|_ &y[xs.×d_`Ցup7 y  곘 5hpCo/>ph`wnD~ܛͧkwfXA].ݏ?{Z;|س+l}y/فp* *TrE㰋(?z OT[ˆC^=a͎Gb0=s93lrh'ǮT>T( 2|o4ms~;zʃ xdxInK+L{[z%:~Lă+}x̺;oY"}" yIp;o%)!(=Ek)!pྉp9]$j3Z1׆K*p:<72yy:1(K D,c?OK p!TFO Y$QƙqkK[2z:`.zP,.}hvBiSܧ+`n;yc2^ХmbO قQT.]bȽi;: s(tF0* 0/1#C YA85=3vሗ󋬷1OxS8!r߷L8eqOFF@..N{ _=,'h'nnODµ߄0d\; mP|n-,^ODE_O5u4/^lʿ/Npv'oGz\vJvcZOZ`$i6z.k ny~g?S3UTEs^<sԈP n !C k=ܑ $p{ܓ` "/ܮ`.N%Z/btwN!jT\U?+($J",S bvd>Z̔g9[*̞{1^'x{p(H?IwVaI% ׌Aڡ)\]E3Ʒ $|+ ?'y?@\*`_M9&ޛTuy}rC2/nqqWϥ`H~x8>,_j_CC3(^9敬1}a{gO޶$z8{s!3> 5Ú"('MO F ZJ f% Nܞ{CO%˕$FR~ k]|]7$Zťuڝr .Rx*n5 IϦT/"vMҗ?5g_M<" ,NGh ( [3In 3#Hף.&?$&ThU#nF0Nc︢b A^q'5&rgh|V˓*Bw*~11ѿ1"Q&0?An@t=b*=)wؑݔsuйѹ2NyF;}1/N98<`Α>TaTpsoT#߹<6ND!6 Mm$BǏiY`^'s;վۦ7p|ѳ]S0(޷}fx_  ŧ~/HȞIۧ'.=/[uԒ )S=;γ:]"k F(&Xq`z1!?yW  M"mAK.:j \d+#[;܍ǩ#ª@ %jӣQ]W$q?Mgj**ktb ėZXQgܔ} ċյ{>\SBǺv'2@-n^J{@8C9̏ 9f["E/MQ|t On;e2P5؍8d@juѱ؀4F* {G=k]AAygq cU'q o6|hڥ񞥛'.ˣ:YK$GM/55s X2a7-/̰W]\5@IDATT,=Do_+'U'Ko5s9nde"f.rJ(ݏS$҉{T'AC*)q`W)fNuQ/g斫*\H|'gvoﱎ,,kmHs>xRZ.T*wۺ璑SO6>v6t8m'vʸp2B/yI%bVd>z"S=mv3͝.9r65?~ъx>9$~"Qn*G0A||ǛCwE"3,F@Ɂ'T'v~K=xm&ocD1=e_b"Ԫbώ&5]yBx5sH^^ pÏMQO{Xz ੘C6-TOyŖTWX |Ro/0ot4A2Qp`q~ )? a l\Y7̅!@7;ql ϔ𑏑|q?A!x * C[S!d!3M-*qtv;ո)@T qT A CyL n"veH0Uf_s Yai4=ڑ2|qI -h7(9vq!,G 5BI;ՊyVpJ^::*XBn!ȯĉh[wG?A|kwd﬒H'O/+RݺB|9͞hEMEJnw>&-&?~j4,`{H/8$p 2wr*S0w'q$﷖1p1$D@cӫG 9\ fI L"svpZ\f]>y8s8jkn|k#9L:a^Ҭb6FUI>/{7a>EEMkU&=^:jgUow{>%;ŻS, 6*F , k؇"Mf3szܨ=y/$0w_id􇦿2 g5|k*]WU_w.W:˸q˲Oqx. dk _U1`x5AA:ł_Ąng׽1( v˺'*jdm bK78E z?[o `;g}2%Sd=B@:`R2_H{m2%O.%UmΪ.PQ)bpIJUx,Ux͊LɕśXtrv%/FޘLrwe:H X# 6\ #8QԇGУu$j _G|Dud52@N>pd'S3zQVВHY=6( 14T׈:s7-`Nn:0<ѦnkrMl2[;loyݚ[Ȧ_ۋ#\2ˮg ~WK׭ך^= yޖ^'gذGs6 PoxJ7g_ff8gxg䚫\"R33/b#}O?g vx%Ѓ1gw]$z׌-}]yWUl}Srzoi"Q,] *^ņE(*vbTTRP&Uz ogoFrz;?Ȝ=3{f5k̬ ZǪ091.diCh/OVXx/2Xױ%s :ut@S2rx1l1pgpI~_mG ~ ;S 4?Q@z ^ ѻ:Xee>U7po/ >$s!}&ln>TBSץP}r4chRNT.ˆ|$Ћ =䬉{= p%\L<]޳"3wyrZFje%tA?yE. a ;'H@fn . }֝Q*5Ua:8%]\3*'0*Ơn'Wq?,Tp_=aM/źEt$ֈE=->w.,K `/+Z"߉,k(sV/>3|O~b-q׀ p '4^/y !ITӒT7}Zњ!)nÃ@/rGBÞI()X} ೺ P3:C xonk/ s.bn/EL9ܳ `JQTB&JJG;o, GEB|ԛ k^Ys(? :Mmm*e!_bOyNz&h__r0g}=A=oyoE=;l8K'7dSSwNsh ;]ۨ|vD\&LdO8]=t /?nsa*]`*t0wþ7Xɹj :$j${$lJr4*RCFpɌ@%{?։)5.D57͵_@Ǖ;q_$gnKmq'Iȏw=/ f/kTQ]lNڌLM5^yy0`+As0p%Y+D.pZk طb46i*&IHut'҉~!UA#uħ'ٗtނgy 7 ^IFt@Do:P0({jC =ƍ|7;7JV={F%UgW[us*WF.`Rz5n1T-|0Yb ]QlD8ἐw!w;Oo*  V?N12_ T5gkĹ`= HܻQeP*tzz2"^?Cp}NϑŻ\ ^݂y3h&c~INN<ٗtQT !)͒kiR7o\ gx7"){gud-lcA?L>\BG 6B)nA^m<}H*b]hGMFߠ_a-?㾲CGlJoټ{]sR?Ł'~{ Z@ T-C (4;=ʉM2M #1> UԳ m52S1&vFqC'̦`{ "ۅciE?o?x {"717c]oce 0 m[p+cdwx7xoo"ZO lvV9M Z rf,_>Q02g֤`ON ;bF, @Xz #)9:E+! ms%3 Wl,35*rEզތ'8hSXk6 5h\sU:a%@q){4x-zw >o$OXr>;W8.>f8S鋒~|8ci"ӊa$oH{zAk3JSj_]hI/wy`7-:%b8%RC }͸1#i40:o\*^HiIMW~$c*~-feiN BS{{;쑲GBW_՗ݑ;vqEhߤü|{|F*ءq)|'I0а _(^h6XqX`"phSH{I`/ tgll{[|?Z$]6S i{bopaDFSB8$?s2H-\hO־%qA`{lt&`syYcG8a\y wBaUw<fϕXZ1﷿LA86 N\K9&G݃{: O Sws!k3 WۡPiS{:%hc>1;1Uv=u #|K. eax-t72G[~O7a2>4-)w}Z6UPO Eky߁)O0 ƓrKN1C*' ZZ(wn:; ` ;P`F/rcIE T-\ktZAy+vgsM%trƈo=0B6@Z8^a<(V3cM9=,:?)P#}T?ёGڽY ė E'vPhlyCՅ% t "ɥcG:|Aw^#LE(AeH9ld<$~u/3/q/ F_*%?W$ 8lbɥGx|0)r0>,PgN7`0 3S@RwǠ~nkOiFR髭_YRybg /qRӴ :wlsj*KH"Gd CQ%ە2I)fvSh&rov댅Ҍz^\TLڳ4'OУQ$sErNCSZT$&/F5Vt"-$ w[6 Ys%* %S7&2&=ex )9@tҿ3Ay RfTyǩ( I\K{v롺7<Y :%&X㹳5&5lF'@os]$B(xj{|&3J :>SF)NUS*n[z%^cm]ߞs]$34Tϱڡ+ hX"%b;LA]#`ncF0v{,X.b)>I9.%{5Ż(Ѐ* ǒ;_C]sVEq^-+K =p'WhPUu;xt$E$fA xi2 c 84\ B2-?ʬOɼqwc {&2oƩ 79rݍp\+$-ߋ< ?Xla|abD[PNW`KW1B<1$.rAcq3!97pݽ4܁ٗ=(gqYsءv9xطGf^fp#%bs5`D H) H$c[>f[*KK-BmrxI`S g<uu@A' *҅`H1\Z`<[`|IY^f]KUoΦ˫{',W\U2g(B>ugmQK}z=}m8 WB*w<,F)ʯ;p#$0:~E[^>|Ï$(Nzccu)ߎӓRV='\fԡ=|7I9i-YIq'0~. ~D' 0)a^tqF]f "p2,Ff{$cW VU\P {SBn;fP[qʗpS4+5w 1NfH4ʳ ~U(:s`cij@rOO[>d:: >v@G]}܁qn &Bc3Vl$7T#iL Ygj w}&:](%ZmylRتG= fMb[yὅؾُ VJLR;抡^{mi7zxퟒx͡Yڷ xZomd&+mc֢DY+LŁ/^`p&PXX@[˾<0wYPk'ųqDwPGYC\hk>L%;@dLޣ0Gi;T$ a xI2xvc4|Dfӓ3y#Knh` c0B\b_3F>@頨?ՀO. d ^B"?DhPdY}V lts'0˱14阹߸w&Mgw೬|М_䃼sK5765 %+-AlsHw`o)Ю Ч?X;?S&|ml9+O2?9f }ڣ!:@6O ɝ u@|3f{K{زa-3Iެ%1:Rb:ԼUqʣ"_r9gg?&?Mݺʲ0_SJJAC۱ʒ{r}=m-SIDŽ|e}Tr҇LДMW?QEδhO%44@X?pn4_T)= cţ]tmN7Mܞ}'0O4޴ ^꡺`&}z55 䥔SmɎDx1\{+%p?ZoڣW㭍Zy=z ޽Yc @S61ܠ!J:;-P&3M.CD/ݦue\ &p p Hwmn J_Nc<ٻTL0u0M%Epj\{{WCV j|, W^0.GJw&E&E~p7S&ZE@pN'9U!bE2qBmKL!.ipK?3IoH;ƪX@uW!3aHN]0{DSݚ׀=a畒)3= _DWtϔ&s%deUN|wxe6P,.\Xj0~E'6b.m{ Wp>u5UH]8`! ±9:o`ZY #G+nJZWź2PX?[]а`FxYaz];0sݿ)4NH| q?9b@1.Д{}m]I#cohsPo(# iO,8X7?c^\g^no A3lV2p} QH|?=:깕`&t C a`O,:p݃`HeA?k)&Zx kܶ>4 Q;_{tmXG22`zl;*0(*kMw;+4 >kmN W|s4]vҫ#޲v/ / 땮]K#W|b: {cE?$aˮY?Z[KU_ڴ ߹Xcɟy@nǷj y8 ]G%PG_@W =67,L6rm]H"\UV-02[|?*lAtHWz 1ݿd5Zp]N3Hx {)D,aƻ-q\\(xiܟa؄9WZml|=*`m#_(wn1w%/:1vR0awg3yIC4[6Hg@>i5vv -5{Jh^:{1OcەƘE5@r,k?wVm,s/dQX>#05_=!8~*3},7fOc 51S(,`|@5UمXL^ޞwؒOy&FBFo {&o@n4J9˛bL;-x/2HLG&$@%9N"FroC*95q7&,Um@~߶޲^'U 8O^gj ]6֙B^Q |mP_i@rjkrs>B_!̈́*R bo+]=9f7R o{eJ ̼3ɌЯ_KtH^#Ո A/7u-mꈢW~!ɾ&"|YQXf;jP Z`h"PDNkww[bG#xݱm}8+,ܻ?>jj{[}מlrW(fZLmF}WX`X.g $fzI Pڡ^D~vI ?UJr8] o3;n_YX|tqot5ߵi_e2"S|ʼn~"9s? APugC)јo23;ya ?qE<;ڄW;O$fB3 Si8pX}@87v25ϘձG#`4`l!)sɷbtaL( |JpH[r(F>[iW\VĕxgԤ//g]}kh'h3|oB d- HI˰nnto1!*qS{0~e-$wԕ2Y8ZH8G Ts|nk|bj`w执y.o0[`{מ p̑* b4\єfhLǎ4hLLI՝)HvqA!PQZܟ} g@k8h&8_jZ T'5M:]%p[fl58j< ~Wo?r B,LuwclW19(Abg@&MuU֡^_G )+M Hy|k-ƷKt`7 x|&͛HyVΌ;bWk9%af"_ԟ=&&f_ʽI$f/o\{k?즽[c?Ş.?M{c }ڗy {K)u#|贪; q8exǝ9$DѮvuB oܿ?/>„dU'7^YZnL:zGZI9m{ f#m)d-?|)ApEI'yUbd=T.}l`&5Ri+f12#225:\pM+o㓴 $ITLK<wۑaGM+M:cRӉ)ߵ+u={i5w ~,; ط {k<`??-0oEqyOp?@ypwfэi#efwc5-fv{͏_"YS~ū HX?ޒ=gׁ7?4 M^?dqhB.$9˭A,<pyO=ƪ );O%]!xC5yIc uLZTX۫Kʡ#FЎS[g~hgy_Snٰ+,]judI0뢴wPb9<8'ܥm3pk Ob@+T8gb"~ӖCL_2Q8|?5Nh| Z7CH^=׸Xkd:@%FgL@M {"؜+t W6t(@9Wls(VxZ4fEnY[e;7dD.(;yٝ)@HK |5ޟ|3Dg4Ndm11<\c*w3R? ծ!z +$?!Nt;4K=_W"Ś{.4K"odt^#-ll} {Uǝ\wCI2)S60Iʑ cžDxUjE;& _aagp`a>YrpsHԁ0e-\h#kמ_,%`T^bg]!vQepxf6y]Н|*&n@'1ۙnr pzIJX6 K"/CgW`Ldrql{F#D =yzG* c0d2 ]^ߧ:ưAGr"S4 H䣿@˝x˞'DO ߉uGWQbr_ཾܯJ?bi^gtS^i CO9\/.s:NzR8QT]{ {/FhrރqFrh*^-hxり'~HyŠش[gƠqqOHn$W*GzqXg`^"@81|Dz2)ס?:Af#?9F(G͟(>lMMAj1T+%9g <\3^{z8:I|ڽNMtK\m8#].Ky'6;~vP_";m*Pє$3SG=q\'r5[Ofbx"!Bwn%P~.Nӿ)邩5[3)`9s½J߲دyOP~͜CIvVAS,8 x8$0 +]7tS%j6@sY"0.6s-]0l{QNH|ߖ.>8֤~Mk+ILUbfɡS=* vƾ=[`.HĆ`X9犳y-1zt+!'tE/,Z ͠1o\| {?;'O9pn֋1u/2m+Jᯔ{Z "`Ul^~tk|nh# =mj5_) fFekrW~V%8xO Y)E9qΡڼt3^y,܃~ m:3J.O}Չ:nنY#`e&͉tkD=Br1N1CH}Ops[FپA`VO2Pr(. k ~$& xQr@5X[MHbJFbU)oCTUi륤@c|{lg0֓a:"<cR]_C{WjKmS_VŊ߰ϡaU~$w(qX#xh+Ua4nʥ|/Ҥ m@S@4 Aĥ|Q􊲳  ?oѻ g颽* ƎcE3 â#NkP'%6cnY 7^Ѵd|o;Ɂf+(-~~ZWsvضn^~DXb E6/I'GBTO)2Ol3K.)oD\Q"68z]|o=Fik31|L`>=BS5CXS}؛86  ߌ]JX:'`@wԎЅS6Dt{@idw`pkx% 9{~\| ?u'~$3jܳXV8f7CK׹g~98nC5KJ -ogGo"e#問R:~O!}^IrhF,vꑪ%ص[яw&M!^8<[[Ki/\h9K \ bC/js,Ŀ#o54gCx7~)h  ䷷@{~I9P<q\Uz h Nsdq ꮘSqiPmpIX0M\ (+@IDAT3{b{db8ypTrƹYa oͩcx>M Kn O oB.ZGv Dl#D9ΨdeL]A" *OiX<&a&Bpm=A軤=Q>~$6.9b+D!аLŒρzp^ra#PKf\wfﯵ3+tRjhG3KЎCz1>[9b1e+}qVfZtE.A:nѕe X^i 1yodnc CdP3І׵ɇg;HHdv%“t|w .蓜K>&D>#w@ #wPsDӜ=0~ջ =jHl!]OSbEhk̋?9i[}Sެ7d{vEve.Ԣ^I7 omb}7 )v+7m`I3?Cp79 !F1V9Gg|xd $PMa&uMyPtjyf{" 22idS R*S̈́F;V Zp7I-ʴ(p(H[C OS遴tM.T vw$RcC9ڳUet#7tziɚGF@"qwE<W 0@88vus)ŁEvs=a jE#4>H|"N^*f}jJ@&ke m@T,UY BB#8+(}삽1{$!éHnñ-q>;K/_6BZ6 Ǣ/;(9[&oLhc1F3&&_lzhny? DbH=^Zk=u)H21lٞN v%HMcrM{1ݬ uJ@Ǝ'bĨbu T"׹c)=K" d2D{S?8+v JH)IhVr _ANY)9Yqh2qaXlODG4t sk G__m3yz͂Ujkjl]ދHaԖGg/x뻝 75pT\VI\PVy,5J]- "t"89Q`{@&02B>-* xhLfRwVZ +E,3^ `t E kx`-'cvWq~3)wWs>ȇ^r*ڵɮ*Al%Ue| AgX.tj.H?5p @pA5ځx|!rDHo'+yK#`)=' gA5tRBQum)6u]I377Jw%L8ICҐϘo25NY)] }LMSON#g+C^Tqa T*야Yu@(\@`Pu3kC2ˡh`P @VPphg(ݩ֣v`D0$N,O{. '1+;z;U b{u@v;=+0#DņKE}qٛH$ j >+I˜aw ̧lUn\nʻ-8 b Xa Hkf_JߋiXcu<{,~cFz^#w[(@B_I?)@: У!l_ YNG ίgG5\-J 4j4xc(xeYĴwz~FZ8:LA-&m,'[r]L?Tm2MYU͌ƋJ{Fk9ŵRsL:7\daz;Qgrۦ'xk`YA>Fl3k)gEpvp<NvʻL_ϧNE*t{7'ʏީ%\z=yN;Kj8KBzjD`'+t]uH2/ݱrFSig1!Hϕ{3}$@VnkS {%joa`g|-UNա)7$_?9wMpԞrKVI]Gs=3&@tPA.0N>+cg9B9Yl+ijHӱ=MHJ;Gbqм ۓ).ny VJg68K^0 1[s @{>gc[n8וxx &]?-Ļjim\ |p(T&)MPO҉MI6 9o"| Ў9vnzvDNhNRͅD\Շ^t8M~Ĺ3AfV X6>K l%94r])?M8 dR޹ݓcC"?I47X8LW@ELb:/[yQ&ߓ~ئh#{pps|Gwŧ.?C `ovUlw ^͗|~Pc-&r^Q˚j^omhS}3H n&t[{^oO ֒sچSыy(IJJt Anu(Fy?Gߗx̫Lұ{Mau~eJ¨#ĩOd&͊0B GIgP{I E">/ fI32y=/9j8p;T Pp5p,p5\Wg0[Yv`K0>݉j:q(^:I؛áZemu@zl550dLr`h5Gh))q!_6Ob{h 8I,-p^*P7 0=SwfG`X{Ea8xZHR~o&ĢӬvz4ٔB)8O’-/"A6sipiCN,A%e*'3 =au3~ѮlLw>%_}9 :BJsZ˩@ͺ ;a.$?1.[O'k GSCO{E\k 'ىƢLNj 3gXƁt*QM"g(@O |)3ڂnM[U!d,lQ.ƅDmѣ{Kt{{w$ylg#ak" l~C R" \QD8(Ў |EC?5-v=K.p E)ŎO?Kw3N"*1U?raf[ T>Q<{WQ jG*ܐzhILNt@kL3  ` tx {Q9Cħyy:31IL>[K0/%_=fCyxJ BvW;C_D;'*<(0Q鉶BX7M~%ip Xb4:Pbi"7v_s8B?WWL *D .UcN:FHtIpU ePx*y@.gA!o?#ԍG m_ұ7֑'1$)%x^ }S>d[=՚%[`V2W.!Mfį\I&&O)g,'믡H Cڿͮ=ot%_zο2ϟ~0S?C [פ6.F?@A.29|E;E/^68"L]C<;:%k5^#sYLeenl]$0j^+g^ :|a Q[RF2 :C^!Imqz|*y(1x< ND@ppbc"b&8mI =q_͕D_a3æ~zɶ&p8%>$]w 09+$u_,h <ۚݕ@h1o۞ moI# E iW6r.̈́ػC'}=VYރ?qqQɍM#.C!Ɛ>)F ƫYrJ&!@-M @^[ 6!rcّ4&}ͥNwo@8HCJ {2v { 'UaPLqf>B 5Nr* ͨSK|8+\!9rsRKy؞~P-2a#V$ES(VϦmX띔qo&FΧ_N D ߧqj.fB>xi+A2#NQfV&h%rB>ξ6>mfȝ=΅% W,'_ B,z X)7qD:r!P[.98ravSg_3<4ީ&;^lj U.\gƾ^(ɱ͛{pU v`mxLB;"epmqU{t>!ޘLzXP5M\=!솿&_@ ?N*ZN=6|~^U*C EDh.ZyKzZ_-P>%πg .͉@1 [@q;g ,]7bzKM'3׭Vf,a*9Yj]1oʿIC^*ׁal`kվ|fH# 2g-Ԛ\s90|tmgr=ks}ugD" 9`u_ |??VYk`A?\((k \COŐSB>B_e,ߧ_ L ĻΚ+0A[?Db)(gMyd<]F|'?7^usJHD*U3/JA5tZ 2P '.$_Ȉ /h%S#WPNf_;jn(+<]`}+V $$5L:6eiyϥ"22Pӯ-Si xJoZv4J@;0HYB-hF@0c;<$)}]9kQ2#$}w@{wW.'&0klC q1L' 4Bs<* K-hE}z.pH-qo2@azMMR9aï %c1pKZ [H{s &C /CoD޺3yML2x:OWa2֕@b_LV$#Wٻ1PwNP<&T8XozQ:WLxy~Ǘϵ3ݧIJ ,s?$= $~@E0vd m2>-;`` )ֽ Z0Qf܌wsy;¹_8,697 ?)_vEX h&zC%?;xV$c~3aW#f;Xһ_0c\]$Y <8ւ:quзTܱ8{CB%|)]VιJMޛ1Y0Qb#eUO r;/(g+ne"X Oz̳NYc*ek;]=osY*=kldd"f{ թtz7_~^?s=Xcwsnˣ;E u+ooA<%/ˆ=R8gE}t<6Y?/~EQ bO7.CpLH 2 8NJ$>oӓ Dt:^b>@?rC gMKGνtO%=@pb~ցk:\-d\;pn"V2fuD8ڧ@ k+xlbllMI~ +_WOHV¢~.·|jBԬvo;sW%/Nx*"F9| Īw/oTw o=!󷲨\ =+νhO!ܽl >{$bQ~tGy5E:Z-=_=06Y{ԍ|&VT{|l֎w <ޥ. F@X 7{r,{Ie堯/ĪSKu^ )_ϿGd's$A~Jѹ:"_@@ Ļ!h&F2[z$So1ϐmEBS|D_US ϟ"xOܽo {|s@DPnHH|e ms J#~cL7'zz6 q,CPP u W)?(< 3|GS"gtzr.m3`kRޟ廭Q @ @%7)83wow <7' |1KG=1sG e9^xns9Sc&oO9 o1Auf PbMe~c"Nk~@ A zЬa';,>|֥ɎDJiB:$,$0^ϻ 2zI  N^BDBlw 33qQ`&x* n  ;"e|gOsg?jF˼Q|vmI} g *!t!RB%>vX?QqLzά˹۞sy[8!<{gACЩ8?N6>cp/f( \ľs_릔  = B*GDg8v3_<7Fz!3<ոJ6Kc gEr]\,y3V9!X|΁~J+) l]%3~vpg۱f_ L :扬v,d1j߄ʫ 1F"(?whژ4ڷBv1}a,߂гr&fON{?!qSSj@7활%5>nnW`r@Bs_4q@0 gIb@lZoLtcŖSYʬBx(PI r9&]ll25s(-K7Ň xWrrߨb3lF("=if >d {0LXa!\&㋚gF^3ꎄc΋}w>%uB| <.Ip:#yٗpЇC&,'W  D:8ƳPc]jAH,|R`H?$xe#b@1k;3i)'?{#ϟ_Pdd?`C?KF]]!7C r#5tʑEDlK" sQI˕&J[S-_(4 Ҽ̿H,G0eQ0{'; f^ƹR|LD؊n9؋wòDU-ޛCt~Oxo3^@~K%ޠ=]km>n/9aZQܸC_W0k/>H/ RP^fFֽ>?U+BF/iGpCU{Q[%BJFqB|?vli7cӿ/[Bt$ɌX³j|;nNPJf,tW9NBM'rLJt=oI-CvdvWH/`?m4i4%Yk[K;j/^>zᴢyY! ( O@;;m 8?Nn%Z|Ӯ߽I°ͯk=sM)ȥ@@1PR32B9}^ AKWʒ!WN3##50ӟڅH`,-R`E ]d_i ~Y1tuVG+ݎ,AX=z@6g L |Q*>sЈjK/>Z `,mc#\GڋxY(0| |@ uG?O[7YqzaTr{ox!"/xw !}+!@ qC+E/9w\$;}XQ^Q,㵔9OCZ'iHi ]8tsj\a#ȿNsx٢~%ʉ; .kbG6]Ahs՗)iK)oY߬@gŔaT[VfډzY,uYAՆd\½s$unI>}%ߺStNH( )pp@8ǪDxct*PԚ^⻒jru[Gzpu:w_;_UPU#t1ݙh?y7/eV|l(ĭh)R=StflOZ_%ZT^.g'ӿTt, x{~Cla{뱾niWʡu+b:RߍhW90Ѿ?{0]_廚 = N?3Z'sO\aOpѨ{`#2F,h P!=>3M5V7\}7l$YW}W6Tk)lUA)О,V3L\Z4 EAY o?L|XMt1zǘ?ʭ$PZ Z,K֖6r-h"|ES?4_#pu+d0z+}Yj`|v ~M$ضdoMNO^DNr`SʻM uG]-p3q}*hS^s^ꣂ5dڹBr@̮3F Z]"@>H5-Yt)a]nca}.Ztq~ X 4%I|@{ϸo\f|~B3wdz"104ִ1fa;vuR~~e-!=9HxŸpJ`)n%<Іe Jrff uF}nJS3_v`>.O]AOλNtM6Ohͅf/ @tt'LBSaX_ 5tZ։oA?jY6. |79#Y[%bC㴇 0P؝?>m$oOeXVVN=#1w_BO l <l>3IhX/"j3bAe\G7œۄ=b )P*TM{o \f"El]*ٓ[Y0?F_W\75l%[WF% ,]:^-~+C=NveAڋ'c:~f9;۞l_abfr{{@ uE  =mx@&Q*3fgt)K?g$~י,ꩉN&?wKw@},P/@n鎘y |П]>=ecɋKSIC[X-w`D [}"GXw\Esp AglOrqxߟt鈇fL #x/iOY{c kI? 4,~jhȪA߿/ .SV+;TDDX9= (}L~#Z Ļ./G^ w 9in5iH R`3Ԝe6"݉fW)p{eƈV0fndvbe((牅5koP@Yˆ#긥WRFP$^m܅4:8%܆\ #*-|QA,j@H{]j~U@@i|&I}d;>ۆqkW\K´z+a?HmQfeĞ-mq7Y_d V3W.BÏsn:\DVڔ#TιϦK[V1' ##^yt%JdhWu'Gs۽Q9k /wM։#lKwߗr//ښCtfC~`xY6F(o5C*Xh 3BfDvú4g^Ǣ}>K<=wgD-΂~?NiI#X(R|GyA6o$`%i |T`±MHwZw`pҼfuֺ; c= dՊ|G0|]F;~/t!tZ C4Ql]eáƥxyy!p^dw/l@zk | SdՈLЦsQru|% JD!šw ӵ;^0: Tz+@oN>\2GP]rqs(+*~1܁Upd+ҹ&pK3*#%DCN¸-]V 5[d8B!~:Kv\+0p^/А|\}0V)g}tm HF<+Z>2Ř+(|S⛽!h-WN.CU%e":}ol+׵Ș?rw}8!R sMé"%[|\Mxb`)Q=K s޹_ ZRP]ٙ9wE^1uC,$h_x:zᙾtA[y{2C "pb2:NasIv=Z***eVjt =c1Z2 f|0~>#'~O_˒e3o(,}Gm]h_jX}2xSا_5_e}7"hU:Ӣ_;YPJJ ='z}/G;5mJ t <<9mL.-)H'_O'O:0dg0>C hQv,h"7@n"/}, qm[?dtPf:[9'aF0e\:Vl \ 3 B?>H56 X %ShlICH]Gh-wNKKʷI cB!  n/NGp]ڏN/  4+i:~Ka֥|K^`HZ7< @.ґ⻺@paC00mqPP7N}&4xuxҐj-5jbQQOk f:X m{kV?,U.)աl.\>4uWQw$3(D^Ӓm!1ѿ w0К(';&Y.W P)6Zz)3z-?Σ~k`+^Zn'C` J{L0;{Wb ǒj!E_ e'sfM~+0T`@n&o: dsZ~?"P=*t-'k ~<"1ܹDJix֯VJ'' l&@ymN/tts%&{_/̪OVGƃC͠g)(>Jn곶{Hw|x߃=}y~o*wVHBL=/:MxsQ' y㭻2sMlQ0^+0(@=K~=GEʡlstA އ%@;>ټafK1^)P)F#Ov @B~Hpe[ /jbCp-aEfԥNGPKs ${|59aEgp8 +XE9JV'd U'56PxZr8?3!͍\?K`&z>WC#>*Po Dryg+:WpLq? :YZqq@;l&(HXz!5G2Gkib^́,kIVZj aNNF[wg0E?~y{ `x#(_V"p!yq;&;&98 ZoZ៱:f#r@ vq@pJQwрtU\bӅk$+p@$í!P>@z'iLȵ J}:p^d=PAs neQGuf0=cF5%9PvIr5t}?jy`/#@1J$=]-~%'92фt-19tewM7 =2N0 =7tC[wÀu0J. dO-_]Ԉ}Y& ,ͱ’a-Q8K`÷Uxy9DSXVB:SXy7ʌ#kfe%sߺ;}=V`6dnDV:{.͘Yg~ꤍS= #i li4i&l,&|('ύͱAu/FuzvP)h r?[?染hgsazwh 6_\@xQ ]0\ߥRM(-@;чkIke(9ύ]~/`\;0S@ Pi`Nq8ؚkJlpny@ߋ**t{1 v83c&JŶثd/9%"N S١[ (׾ 3W7 1w v"Y~2W/oWS8 }F3y58166߱|s@:9z-di7f^s ` c{wU9 FW}@=;z/|OOIw}DŽUscb 4kL °$\HC8)2J<}SD#;/PC>;d˴t6:nF]  ׁ'hn&HSJ ' ..%AU4`'?L໋&q:V"J@$DCF0 l/ 0p|gf)B+~@=TWVN z|:'-ѱEsvR_̉&2av`sUE9{)MNJN?Y6sjlˏQ.мaa%0Xܱ4ߔQ%gC1Iuq-9T,9{)q:rUc!g,;d8\|lc[}ۘr,-U-M Ctn Uڠn2!ɂaVTH9OF}nV鷗<- g/'_Ibqu^B;l^6_۳);|~گ/dZww=v .iI"9owPTړ_sb x/LihSsjPW=m0 Z3[8\V@Е}X&]Kļ؅n}VN~̑ ?RB23BMژ7Ćk-ڵ`n.s)vS8cA ELҁaPd7KbSYg(3|,Q?h%}x maC t|UZ1 GYwy "״+E_?IMGn.0O+Be r(h1fPgB)C0zВ];?sL.kͱh8+0=.?WӱL`@k\O.FlVT3}xjгluw끳_Mŧ1laTս0 |cTP J{%ga+?*ܽH;AKPK TkSQø~B ] #4";_cو_Y$ѕ2I#:Z(wz3j[nK-g @K}@8A _Y^3p!I4n#γ0RC}|..\L"G$tԒ䷌X'%ȝw f羟X|_nkZxgu2ƯPjV_e-}ĪXBJ{lƞvwcd{3Iy){D"5lP8]p8@{s&Jar`EP#pF_cqyM_u 1@/j@k/%ߛ.}-!#X-7ClxK=iEO}*Ԛv(QGCHf ѭilc5&u*it"D:OJ@\G^/W9)}\ +)o ޝ0{e)^y|g` FâYl.UΉw3K $~cfKOS-aۛ/ihtC 0 `UO;W)x3|S5Ǝw4}00Q "{p`~F[cs'p|;w:>uMFB1p¹=zdcyI~81Y#YI r:%ј,)m W h z!HW w~`am1_K)FxE^3{HWcv \ un[yt{/}<*T܉1ad|){)Zʫ rxB358 [$6v|3Jb`{̬NYe 2tA@+5 ag[-~o:V'C߬dj_N=?2c̈́э(i탑6:*#)׽VFQ޷(7\cGo۳Xh$fcgXƢZ)ٿhG^uٗfwM2fƧ^,lݯ Pa>NL Nw{ k 3ӱ\tq^ V\mpHispl ?$YHa ۲n]\H·~b_cgCt)|ݖ,)j򻢵bum2Vm~q+~e1iꃍ6 >{D_i6|9xAtJņk :f#hѤ*OfgBOu|ڻ Ƹ`|~xkdrx"PؙnP8cų{@+؂{I;k ĻC/rr.}'6[j`u¦$+tB[ީw8-;8yt$M*ĸ5*ە^-3#F TCO>Xɒ1 _>D(ԋ $[?1uyZӵڪ?h2>ڙpvuւgT$1N336NtfO;s9F{EN9:zJv31VTGC;6 O=f>deA򿃕?fL_8sU)~v9|bt6fQ]w %rW8\L@Upm!BS" 4orlȘg;~/+~5u T^Ss_W uF U*LЬt0"]@{ nf0. UJCW &O.A9v3_ !Ӱsz(0H߁fi4. M_b7wjJ+~ƕ0_3Ec/~U0-`{4a}~iĨcC?8{w7,F;.~SH G oKv n s 0Mm'FGH ]%ʴa^泅} ;+Pi0EoP3tVS0?}OnwOG;iD_}#^72n*]\foFCl~]z(gq}>V9leԁjF|%ӳ V%~ҺWǚߘ[{Uc? ŚMi'?UqI},8O|[lݙFkbM0;1}uϫ r+wXO?'_^ e9ױo ~ɢA0Vw ķ[ ]y[ތtvhtkq幸E-h;~7ki f[ RVD`^&Gq}P`9M ]Ks$cD4c!|(xbTR`KV_D|u.x;uu`<3nw}.lqcD8\(@,^0?%x\XY$J+]$TEG;,zָV }kmZDAs2S!W9+qVͨwワ}V+O 16x 1nA-4`t "(3lv"]Kʭ8d> %!{~@=G dL@[OϬɖ¬ &"4). $k"kڿ'Ѐ毁#Th#:֭لKWK`}I.fGw{V޻,"ҞϪE8sq+~)Ɂ^:Ol߄#Z̀~׉ e['=T t)LL% jn Dy*scK;uw!w``ҹ3O{hc^s~64N- FO=Ya񮣌2k<.r3R-.v@v@; d6tHȲL}m;aDv5VRO)3tv (sBv{޾LDoIYJGxľؠS9-=*>+k#N+rG˩`$gx1рg*z+Jӎm0| ._-lk*,kLq b-+;a@ܡSm䗢"(D,] Y:5EN|-|8B lfC _h|fÏưyUx#@ h-]e`3#_E{pK?!pz]ְkHnم0R6?z.աcjQVnj|2-Q=fb<rp(Tq30gtigMXn!ԵTUہ/CX/ 3rħ`|q|,>!7=_0+&+6U@{@9H_f'?`d%+y߹μ?%5ey\731KW-Mbl&ޜ\B,Tc;1#^$+)`EVb HSOp`pL yB|zʔC 尉ىV}cjvbsHQ.?Kw U*8E`pP½c&_܁ag!U)M/pkoHϟsC[JT!б0 h.3,~vPo]gVނogw$SoOm% zU :&v;W(&Hנdyx+:?d&%~_so?k Tyt|@;MH[~n{L?3D;g+hpV0nJ~K,P9_Nou v3>LOh@٢N$0,y :N^)P*L+_Q'@O6PzoQDC&Ҹf̥5ou6 jn) ='@x*li?{?̊bm^a3sYDHVE0cbFADDDRĈEJ$!0yfY7nV;5[olN359+U^|˺zT-#U78;{SjŪ? PE˞cطqI3p%Ed>1qn/c@IGbH o-d2+&?T,^LE=*D}{k(j1;r/||5{W= ˑyy#*>m>>b^ּ&}-hѵ{<='YΦ4OxtDmn}+? /FPlKH`drB^K )t6>@n_p3Ć̩3Jej3CLqdENTS} OYu E=6Bb)_1C؛tdLg҇? 9{hh3*w<7sV̮Hт^6b#mg2n%R`\'{`a~9=\[!I62_>wWk GiDM. u ڕt<vmsnpbY'[46fF`~d`Ҷ3XE% zv"^mW|\EM95:CZb)VN ̛^=' O2 7$K\o@x[X[*KϬD8gƲGx(ɬ?ecxg t6z@=(P.vw m}t*TCLrα6;yy"~{;b?egvdv{ ZtkmXs3_5ATKۑS0Χj7/~rЙHPQiX AW^A[A9C s!~ #`Ȼ M 94SK}Y0 = QźݣWߞӁp\Ea<+c|Yœ< ,׿xjKn!z!E9_}q³1:kɌ&XөMPN0.վ5Q)-6iG(W;#؊h[6ʏ/e,E:@ 6* Xakzl;ՌԔn<&D8v4 6FR mKFsq? 3dUBN@s^8]etY[Lgp-xqo9;PeZGO6(}P O23Ԕ#GV~75>R*'ろ& qΕRP? CdRnzP[zNizP]P3oC{ 8-z½ 7gيvoA 4;V%[ɸV="mW9[tlD0ʛ;DPR:({Bd|WuN{3a}AvuhQP|2o\\`i%=xD\Ե$%Ɔ:q> N[E~ոFu8_R8 :81LH+O;'%tL^ Fp}t1:Yn@ sܝ*!ړE 8/xm\lGGx Xm%}|q z)SF7 ๣ տ4y@IDAT +!\~# Mehʦ u=VF-A`]/H t oZ)4l_AW3FTy^܀NnxG" +ϒ<(Ymvgm~.:!G&NE~c 3;0hGe1uzQNu*V=ݰZP<۴ۢBEuB {䯒I\,ΏEme(Mղ/-yAiwy/?FRroJ&%_˭ ͖ق9 "n޹y.sɟq z6 {kQ*G3\I2re4%\Pn٥yzD䇠FCBmݍ ucCV$!x8quH W3ofh ̃EΕImT1`a6F_..bBM"R١ gh;E|2{2*I \e!H+<Ƣ}%  Pc}Ws6",~L9{&;ZYyLs8crrli)v̂0$m=rT{_8^ G6QZjQhQJp _i Y*Dps4갤JU9 ْ0]m sstAy>3mO)/ ƚ?o"_$)y/{8QH1mn񅹟Eg 1bTdF{ n^-Ѳzr69LXŏY)3ױ¡AO_-|4oIP =U`==Q*BQ';6$r?t>Z"r5<†l>NX esfb9`aA<:HeO|O ;lNz6p|?ܢiRI%݃U} -,`:datSS<75z$j}( ZpY~zuݪznj4xdnD[?ւ/zdRN'3e 8N];sōrU(<,?eDd>kc?)W Gs5Xz &EA~6RVThtk}BcݙҶ@K'7i@LZ~)WQ @~4(59S'Gz媢}G( &AΙ!5/x̕2v{B܊5݊557}׬EOŔiW7\w:{:?6{**ͥ"H kT@w$ U0 ;WV,@{z}?>\Y&_9~pq]چyWUs:}}/OmҐcl@Me5R*F:tq U/K΁w5@A,{ zc z+vA>)k-q4:*4{#+3v ]5Z. a0|c{7=aoXܶ6T@y ! 07ǺFBՂ۵>)vE%W`@ј/xQigh.ҦD",C)Үf"Msp[u' ›+xiok{uRM;^.x]JvNRazQ(0p^tW #|E XSY]_칂!vGG2`,tqfYÑI7ǻ[bVFwB&k9Q^u asWقA>j PSnM lgP_;y{HW_Ix,K9;#H=b|/3qR$3~;"UO'}ꪍVTV V9avirr{]u9Jo7 H;?ard`arzAWqjz/J9 /e!pc1oǗ孁+p( O=@ GW[/z2T>}gYei$} ok- ]Hh U%zaA=\W#C#T<1S{ w=4d%c elML\5A ZK)A!;>h0|߼X^r _29Zp_gQ >%,{Em]m@C@Xqc6 DžF>s y-Aa/h;'y尷:2S$"ghKw ȠSΡ@+xTF䥂 m t+#o =tvX9Mp dT.ܯ*xiy[,<^s*c2Y7/$V@GGFbdo>HO#*#']Sģ^kθ7; i;-w lxsW:|bQ,z0o[ KUr3wwg2[7ŚžtQ*H%(JX`wn `ZA+ۣe'?ҝAC2!|^ ō2<7x|DvX>GqmM傞{pnAOS9Z36S1ĜC8 ɧ?%ϐ,“}szyܿSm JJ5# ңss>ߕ]IC\D/'A>t&Eb+֋$7 { ܡnWk&HИ G sU]<#moHР&w1 n|ӂ.8O ݐ@ass؞T>)j䇡5귢"%^]GkĞj #Q`ia+#xϽ5rneï>lA2f[+I[`Eٯ9T(QADp'(è]|)䲥(3i؄e_BH4t{יł }&VPgAkB_k$#vOn;Y`Y(|8ͻжaŤiH#P>-swVpi;Ӻ=zH-PR(Ϻ=;r6d/` eG4w{Ŵ [%(ЫP9f-_i=}C<C#w7F6Ѷa4voC@1E \!xƆ?jH𿾠_-pլ Hڬgg=3nIqe\oOb24mL|ʓ`_-/SU?/3=JAFikRI#= ީ򱷥|z" Q̅5^ o#=ƣ8f[;fn;ALQk#8e S*]g@N,KGv%`'1i:[4d6 N?A +NqL S˛Զć|҃`av]$d'( ~O@>[#z.虹Vf_Xq;;$Sf{FŽ;"#̤b˼fҞU>]Pp *_ ;j&{LpX>-r;Wߓm>kYI+AAz_DP 2XEfo淨 zk۷8fFjpu Laxo|ϧ ])~g'1e`v3?ll+j6߆jKSdi/H޴u{S otvnEeܕwZt|R{ǭ(XKf:`ܢPHN{$F^&Wy&E%HbtOlFgaR(cEw*0sqJ%2?k,YA5xE:Q?>gwbG&]es@%'He!Hw+ grzS~~qҘn","+f32%=c(5hc9 $P u('^4҆(EQ* LTkY@:=+๻y?zS3xpAr)9iҝFz;g}G9EΟqAp ;O|swKr䯘Kmfk0vq'5(;&RO$nE.0)Sn'Ml?=2#:5J7CyW]i`:èE`}8og[d5$s)yaC) OeΗ t~}w"Ԓl1HSk=c{80'+5Z:B2RnANj>p5U,C*e{1/ f`w#Y'O{5!.+5%ÕȘdo֥qc"~M]q9ה9.pB$0!x qGJk{y< `[*Ȃd )3U& *@`pfݳB>K̍d#4 !<!f>aYCsJ Xz'xFHs-;33K|QogŃaCu{Ҭ;4&9y}ACP| ˼I~g(z T-Tu' Z:;IWS=N ڙ݉}a}[7*"Z^Wg'&MT.PVKE):ig:hzzzy&yj2x氫P;!EHF/I\1SCxF8dKṆ 4ύ0Qv42V ?]f&~ϧEGSK nd5;Nb +WrxF邍KAAOΏH^} ~wVҐ= ;\]n׷]nEc"{t7ܭ1/D늙ēgm _]%O1{> (/ 3M`9TwcP|u[^4䟵6扌Pр tخݖ+tH dNtX~%t02m9)A=g&P 8vP;˄τј %~ɫrf}{C$T/7BÞs3 Mᯃ36d=q[c/\qb(fuȉ//!}/Vָ:o.PP4/}w|FѸ5$*Y(#mPS1{߯j02%(X{0-bnGݞWg5wsg4 x`s֚Zʀ2}go_:Tys-].8Myk S!/$#rvsKƙPY,i ~+nXnV#rŨX{S؛D˸?Y)sB4 i!D:G,Z|\^: †%pJ Vm>wҴg5Sχ 5r{+GYRTry8=꣸t%ǗjY0>2]؏#$@3ÆPJUq]g2HΚ{}e}^kEf$yDfyQ }VW{Hw2RR]-Apps~TJ:ŭy>t$Qt1tX`{<0VhuR~aEw/Ln ΙSMj"}Wlѥ4从۽Tn*4)Rgϖ[ck.*Q(=vY|xny`VWt3 YGI;̲O}>Uz5> w@r?ŕԬc73DqUŝodpP-S~)hV 6Na,V ܊[3:>[a|}啕'&5%!w-v#O އ?7ffg3ϔ^)1ܝϨQ+j F QǨg{ZGOg&w屗|X\NcoVl}C8b C6ld;|1{qw/bziY.xn!#͙u']۲a3ٚ8#V,hb7B9x@ޯ>BkOFfVZWw{?La߃awk:s"7Tf=>x4C82Jou*<,#P"8]3*g )M=KoCJS>濿T84ObcRÒ _ w@W2g{S|x=[[{zc``0FmlP=& )ڿU k J23j‡.Ni^qo|ؗ+:͉vvm.We b DL {9V`7Ox8; `%|yhR lP9 @C{>O bAwH`+{A|qF>OҶ!qN2ElwRu^֙ɇh}w]=u}dHs9³ *~dΡ T`S-e\<ѭ/=LY_r s.@R,vk s9Wk|cT~/O|(澔C{}BZ|%ꮬN:ݬkKf:ߏjwP<.RPm"o"kmK}s󫯟"??b|f,Hi"f86Y?efαaP^T " A~}G02{HMwK&t|+~{eɗf?Eyrb,]ƺˉo\yvqEхM>YWd;K%V_c/?#vb%SLT.pxp>BG|6RIAY089`v dd5J9snƤw!'\BLI(0T"JrV T>1vbgA5Eg!nl?[ (O ?!G/P1_gAn%cv5{8!A~:(pIf7[r(2r 2=UG*et)1D؂4^ލ\hdT7\RQ ]f4; 칊 bk`QGvDNF w.V[ٓ_2z[ P攷w:R/ńS#Q /il\.;exD"O^\Șmv/\ۮk g57سѽ& 넱M)mo@ߋ?bs3Q>v*D&ӺɥJ!pP(gvI{]~(`he`(usaHPA|+ "j  x"8.7!V!9M.6z^#>%,7ĞӼ=gh}Aˡ3(l|DvPTs>n+2r{^K,@v3F1>A9&0%`2bqcgqg^byi>%N'\[0p;]ϝɁ."S9.~5Ͷn >_|1yW:m\tqP Ն6&daZS~)k2Z4CKZA;*iogbhUto:4X6H;)Ǖ>iCdSpz{uo=O>2dy0l*W!k%!+a:1GW,~j1㳱O>v)ĉsIeXjuMo2o~Ϫ9C,~񪆱x%'H5:S3zC޻n_v >H6X \xn^IJ_JB\?J\VOHugupʵk Q!`kV`+S53.+ A1zA`08b@'yYU0dU V'}<~ݎqңn-Go &]'-a=L ].}ڛP ML=f?j*CtC;ֿV?A Q<[tF.5פ$L=*>u2ke;bPSB(dž\#Ē4trT0?S [;R.̇ sҋ /w@2b0_iCd[Dw' :Fsn?³9|Ү0g? @ gCή.*:cCv|<ҿ&a,w0 hm2Sq,`ZsfS{_.j$-'6sl@^*spɈtgk.&?*x/n2gsחs""DO!`((`et3fbc]Ep[|_Od"hZ~_}匪f~;g*`3]o H68>~;xotkGw@q^{ʱ7٧.C.=wvv>@32 '>2D_Wxm{?ZZ`*} #5}^Τ?x[AI; U m?q3/BB%T%C*|M 7usںe)O/U >}WD,y\7KdE@mr̂>9p:e/6Rifg}Ou;ږiӡmV8jSxwM/;pbJx#%{-e*"uZڑ%yᒷ([-Y ْo([b_fdYp}{O*oN U1W죊wM(;Ev_V&ꕬie7?pCS#G^ՠ ^x"P@vnHݐ,&*7bqAP#0BBCLWi=g2j0`GНЖqPtV⪇Qrȏ]FvoԚ/ס['v˳;K}N}ܩ$(G쵗){)g)t:G0T8Gc[ڊNg5'vrIANE;GF<F1 {.e.?k2d0E͸/dnVuQ|f<<G>Xrܯ6Qr9(. Kԓc}Krm6b12 Op/^yv\u+mq'H~ԒI7r7 'y:h҇5b]x^FGF2*857w T"/BgCif@<쯨.{GezbyΞ­Ӎ߄gq#׏Df? c ;gD ܯ"ފt)n +Xs`%ʛyGPAZ"ީځ{/SI %~%́܏W}KSw簞k: ̭+W`e:뷭< s*(߱AޕEԴ=|gwo 7zPQrEğ5x*Jt=5px?=TGAOq~/P\_<Θ}Ᏻ<0E𻞍"gXpߑT|vC?y.;^_yDF`֘m\L//C**;J?O"Ǹ_eMjx1Hq|ߡ\,xvHgc9t|c~ʏvGQ~GorXrr?{*Ի򝣐z{YR@ _jpnzkdMf |}ci+9%ƹF@s[K ׂlC;( p2IBNOCQa^e>cf_K#'́%FXdOFK ;G[O]NW"/›. +[-0Ĩr&gzSw^C>5lP/3p-R0]sKپqZe>k1@-@& ϭ,̽ * ; ³Tp0g7\om7Os e 8+?w'r0Kd?ؼӕp@Do}3Q=rPC ̓^[ş9moVʋ=u9ŶRywM6jꊩY_JN_~D/D;YՐ1I'hI?{J,.hM4r3ьzA3?4$bv"8J\zl~ 3Pnt%2S 3kJhAiἓ{;p.,2yqLi^f# w FЗ9\[mmk+$@O4l 1Љ-;?w6&>s8Bz5og!A~-+PEbc4` 1E$,No} 庅'7̺vy%\swY^N`o˹$+T`ΣMo=, z~~wS点w62 w)n}K-#q)=?N=p3meO1S廛#+E 6WH 8[pIΫוg [#nr*XOz<4ڿ]7ӵ[{2rgt] =k:_;yJ]^R$М a4Z,'0]09A"(ئ@δGa ~]Pm@Xugɿ!"wRl <4 o7h3'tɕ%Jwu3q,[\Q~eL&a": ɔFi.6ǂڜ=z=#Z`Nέ~ $Ra9Zo֢e|?fwOv)΢]{#yy".<%^}y)7Űцon Al&^Ŏ&E&Ifiwe# +59 ! b Uüa⃉9(1klʬEJ-#\){}:#nJXmj33O`\^di *aiH/K6F\w{ڲ)ᳲѣbb<]k xJKi6So¯m@E|ܧU!ew.Lp9oK%1XݠI&clP?I[ͅ%ތq6FTACfgG/G zk ]Rv`(+,O {.`)ٮTRd3B/ݪY]Y\"‹j3m;4PB?\<,.0;I=#pg36@<^"oȃEJi1TG9 3/݋y"Ad'O_A,p\3.CD|U E7/Cs3BV+a!۶P@/J!Oƛ:)7o3\ѱu|g%:E(YѾx6 {%bH\[4J7ް~J',"YcqJ,%:65cc 7 *G+<՜+H RJ:``. gGPPNXKp;-%e=zc>Ackj߽XBP?F}+_bb"}ظA-Q&͐΢yJZgoA<]"xF ;c6DP>_[ptJAųI R'ASP?؏ 36R!rTo-fgQ(,~Y%uYo2.ZYkA~2 +4MP׶M2NnJ?"wil 9=fg3' [tk74r @}Dž2Jyt{eɉK-ޓ6 | pk)ݦPZv賧prT),Jweͳo_ou/w#Oq _ g"M|G_FNnOA}:VnrQ7 u7A8S@ 8ݞ@+A>+^0. 㣅Iv + GBa} &5UPi/Z: 0hM﷡"f(o0hz](\;ZJ!EƖ5XYDa]rބ& ^8LY|9-]K^]_ѓW@Xqy1:^0"*yt`>%x~@xLP4( ]nTOQyz+Jx4t=}f^oOsT͔TW9gTC#AԒm {&s_^s:NĹ-h-Iۅu~!jU5xvϧA*6'bUG m@D@X AAk35m{!1;*W 0KQ~ yXp͙2k F1g@ؘ( Dtf̲-ch2Ttcz"*)KTգk{1c֐HIS<727{ž3VHP6@y[箂:aSp.T C֜>)(k[(s6 P8 O$"3'Ң8w`&t!KK,;8^jrkG;-wfX .(8ϝ+F0z@NO1+3P XYG|]V:mi}Aw!u?6- R~hy=$ sSP '|\Qň"\)#& 㨹$Ҿ}_FB)\&5,L v'矹l7Nn-X~AP4 ̉  sE'wU?{9pF UĿ!@~K  %1M  L^iYBAWO >V:9Lyxz]P^(6{6IfDR]Pu{tPټyC6%$]5rnߌУ?=_h;)6-?#8=$4 @FXd6F vླo|E{I&U6iX ^ذbvl(*]PDz @)$1I@glΖٙNp5сxD 7e(Rz,@&ͭV!sɚ}//+ۖn,bDAfS6vںZLdZPf H{z8-^O ^pz$|`8Fpl%Ap47m^ͅS/{ k+ \9[S4o^qNm?^~O:2Y'w-{`(B_A{Zpx[/7/[wLޣmI${l#w^X='@Zd¿4vM68P"1 _NVKnilL=Xpydۓ(xfj+7!fn|wW$/kjs`N(E'.$؇ԠF=(_ov~tU v  iG8 lE܃~/x)#E*s@n(_A{O؅='\n[zsjɗYeI>o~>R\cm~- B.$ *&W #.+/wwxA9=SO 7]RQ,]}߰6~K4hRwPؽ*" ?ݏV` @ɵhvW}|6쒕ń[7-;Z1pL!$`8}^paW#NLN'9/w$LYG* v(互#_k$$3_Kߘ.v 5@!.jB|5_QpQy h^WkC)ؤ :dZ9֓@.ی¡a8jәCt渝q}H5xo7KeqJ^T yۅ`o뿬 >ѤW# .|_yɗuWgYV. Cy]Kgg4H|͂g7 f>&u\{EP61g=ckG6) C&9ީO?@7듽> _N |%7O[;-[íl˺wEvI }9|@qb_p01m_=PjRM={k+͌>*C뎖rv*LlSu7 Z8B(M󦋡zo}𥉂/+t _]!h$( QV5w/т|퍙, !^aθ>Qm׉tԘU5A|AL05-Ta{=.(h"_/0H f ZA B,|/L=\~S?R/IJ%JJT hOؿƬ!2bm8SV bxMJmO)Mu9"cv3I\? <$oIyʑT!Z%ă%Q %P"u- kKwq* +(s=[Vuˎ^T̿cI?|+UCKMHjAB7,JA$>\';v(iS ovƐλM~)xゃg)P|łG@[3bG Y,)ρ,B9}dPZ~Wpb<Û y `}X_zdA nk)h*P/=( AR/1~hD ~QAp6-wi3E(`ZoL'ier)ܱq:ѽJO^i`L3b"{>>>]iGTs3}% [8_`8$C=Avo5'~'w 7[q`Uʮʛvћ *U RR ~[;oƀ"˞g u7#v;ն%ƝaP쪈9#P l|M` $0k 2A/XΣLӎ&\ASV2XG?݃[6" .w+\.? ]b$s͜o p?']YiD:s0}k$L乫'PMAj h^F{+F4?iR? ,yX+5Z2\a\4#3‚IG:?:+#`6&&/õHq],iս. |/ʮQ)v*f,Hj=i1|MjWta`b?*5Xy}DDWVxIx~~T]AYgE/`wf^+/^)i5Bׅ8Dݑݚ&P_J3ƽW '0KS0wM&j6 Bo+NըV#ɃV(vlGr}N5Ͳ8jnAy%ޭ$=x_nFqpo;f_vQ4ٓ_((ϧ 5ONULVQ(:f/X(ƚ&sۡ-Gi.ks|i6|\4x}im}5{_iNCLGrPDT76i>AJT C(7\kض-t3gOx6Ṅh|mk~~2l6f x~- Ň*6;qpA%‚A}oS#7bW»ȣl9* *]vvQN ?^PS^/=LwQLGk=D[fqʣ`Yz4LWI Awȩ@P.=x󷃡<Ś}k6c@ xRAyU ຋tDrSTܙ7Bk Gy(P.8pm\CQ0Q\_hMu ' 誨M#7-[9}loѢ__7[0@X>}xkmht9}ײ^,xET;d`mow#o>js_/xD+Tw XǨƮл99(Ȍ|RWd\1^I/1i@1.eۊ>Ȗ3hl-&DS9'L[K'<9Sh ? `6EKЇz`N>/T(A2WnÜ NW, i|M~SzFC Nqq+I$Nh4-W3!tm16%N+cMW|308;?Q-K|PsٞF낓FQf·]? 6wdDsu v(M[9ł:L]'wcay@L|GӮ绫eDnt![-7USv)SN"o hB+3-_ AWA(=[L ?5X?B[s a]ArK~#eL)ٺE!׿}~Cvz5- D WZ| _CoX7K3|]N߇ nfښ{H¼yY(y% ZkW7j&W -ȘE;MpEgF~ uPHak{֐p˩ag߾>(NtAt Lf 37o /ot_ q$((/ ,7 rNmPP?V-^*9Tp 5 ,q0 C>BAaᆩOó^Hm 5փCt|=´pc.sч߅ONe@'lqdn4yPlO^"}A i_kU\nR{+.᳝ jϗԖ*݌OCG`QpFOUt/MoQNx@jc锅`ϗfTzo{AXvLȮ3 PKi12Ei5M]̋r|^cz- z,!??o{iwO`&ƈ?_U r8c=6k~,^~ZM씦m5O4c(\!Me->(`+X|4U]o`1!2{e!uLӟw#r>/*_b8?EG?۟Ń|q'h_c7ԅ.Dߴ:tnkv\z#_Q'ȶ<9o|H;!8iǪk/DT ?yl{-_pz'ޯ5I85q^"̦~/ſo(A^"s)]M q*~3ebDԨ 2q7;+b`JA=v9xےFNҨ{](zcP+}43cA_ۦ8M?m3(gd78}iv-MGy̙?[)^ }-KN; r˫(z_EÑb$735{c Q~ğ':9ֽw}֓ιx>i{颟'fLAނ}q9q`w|oq 5£NXKH! uF/몍01`ɉ2Z ZC+;%ÒwF<o8;K4N1vhhG!Z^࡭uC<䑌7&yC56W.Ծq#ߧ_GsXJk3JB쒰[t3uS(ɂnMDC Χ^T?Ḗgb4&xڽؽ;9,| ggBoA|47nf-}3[-(BM T+ pbD'XW<[Rݸ{TgvXG͙=SԔEZ0}o{-F6FäV|tOkZ1Tٴp ,Sɿ0Bo\$6BZT?ٽN۽x) pdw&_Ů} w KM#:˛0DD!O)&Wb(8_"qźΓ 04C|'^SF-|11m;/w>S#t~3N}5#Ě#r]f^ 8ď&-6]+f(_ֺdcWN0de Vq4^ִh! fh RSbMg["b{ߕ.o%AC5vw4G8[f#l]E`OAPJU'Az x~^E"B[|MZ_3wU'Zzv++zk_M(L. ]'=W("ݖEugԁZ?EwP{cKy{yWt#yMwUŌ A##7C>UpQhNU$ aAWSoQ~Dj:`_$؛&z/#.}.0sv0KyvU"/MAhj} 3!v@M)E%rYog{+H(ד$@ܜ8=7 .m3#YL[{;ΠZ{VRChD3e?'S|?#`OR^MQp.BbM$wY|{ F ߵmq`/ sDcLH%*~IU1?νs~0eO$?ˬ!S$]x\ lCGi_071海;0!JJBϰ`xI.kZ]'%Zp?_gz8K5kX(Hޓg|)P߿D~w "uSh,70ѮQ XAm(zTU쪸!Ŀ vyLHΦ,\Gq*~ 0-yf3 39Z>[ ͮ%Ӏ |v %8M`WͤO'=B&mM- BJV^&Zp缾X;,ǭ6?w^CMnq?$6Ϣ 4{V*/ #rpS>@/ N*]ܖA Z/ś唶cx?C}2xп-U.5>`Ay'[{ ̊yC}%ۿ;I|Z=QJ)~ORNyۇ\~/e(b {*xc1Nlr#V|35 _TtZ q &艍lAtL*kiQ rjKXdwmӢO {5=EsՂI,]M_q+))L[|Ғ" ^nnjnp ȋvx>+.lL'kR;x(#K*ar`6l ~E-(y/c\LX$.xY" <3ޱMI`mZ3M|=OcA E[9_KQ= tAhMcepR`owr^}0r-}@ 7uih~YS"I_wseK݋p5l{(ILS  1Xt}YN] k)ЁhIGޣ`\v0Xط>9 =tz2&\|%Ѿ`IEYGO$iw;vٖ)}}zȣw'fy _2; bY$]"0./eZ|-ADy| !(my-iM4i) ri?7;K5;`8%( nⱳP?oi (rǏ nGj`O-ZH|Io%#gJwZNC-9-S#蛜/C9ÿJEg3)os +tWVa) _]ɘr-Ɖm%YH48Hgϩ'KW(Xe7tNw'?.D=%gÃKDz5vۺ^`>,6AFk>dJ=A7 ~L!S *Mw |#(ofӂ5xL$g ]I|t l.(?YkEqp' \>-A^[g`2zPEzlN22$|SXEiR; Ar@KA,[ZOY?p҇ *y-/Ϡ^Jz&3U/ -Aq-x7 Չݛ8nH>*men2͵}_7ČO?'":Z!nK'{PI& L8-  {5{[L>uz SuOx(ss/aVwh ,Lw=Hpkf,_mw m;Q^I Dp! mYE.fW rH]c3T=<η6[ Z MW zc@E֮:@8AAqTyq dys00 p%| kA9~<ۼeGϡ_XҪ\L}uD YnnJ[#f7t:?wp@`bAm.\ւxgJH!6}@˾+簀(o/)vu@IDATQ8 Z J E 73-tvoC%I G ϳO}ikYu37434!0\D7=ul-ێpn%*ܜT"'Ds? CoF/Bu kXrCnb> ,z/Mg(1`O("sYi< Q֟860VG A:e͑aߛ|SHw׍{e?'6*V˦7R@#(BS7fm4gmt2(ǧ.NHh'GRc JY}y3UW[E%k{ZB ݰf-$&5f- o\n=`5$[JS!^} NƼ̾Nkq#f _9b#臏rB{_Ob])mah 'w)fP{Y|@?% * O`?"(Oi}}ވ}rw'-͉bw GI{:.ծ"q'#FORaT!vZHs;S)$w1{-}ur 魠q E'>t [ 7`"H){ 7K<5o >k'@ !K)?{HoV.e-%  S݃(]q ='RaV;L~;6uE`rNGeK@4k+::,_ߐh$ ‘ůbw#}GQ0:Ŝ|4nbǰ?[Dž m{Cat ?>g] xEx Vx>Fe=Q&3?oE㇢ffbdGzXKyzWЪ>Ve%}EvR#qK5#H-zΈҚsӨ2& SSr/U1ΐah pNM} P8 l;ߕ~%0G.ȫ.?.ꍹy 6 E+ų™?4 n/R-5<Zjqf-Ϝ0P]A6_f|Fk`Y Vq $ Yv^|;!m- 1 Ŏ!^]3?`"/vYws&X 鱳?c=FG2I>L?&]~N98oy8ygC ɣ>8JP0}"3zi5H4E̙jmvխO@𜶂9D= "[S:iXeK>RRQGBTAڌEN;d q;m(c .978[iҦMjtK}?Dߎw2:'7U H|#dzw@עLwiԸ-MB(A=Yx~# &ݫ)}MJy1Mw䗎ʿ@^]cI3‚A!KwBP_5M}vQe!WFMKӍ7}5=F-/03ߝYwfQ#Yk@z>9i[TlkvS&G$⾝Lݐ.޺bۖ;TF=A8NAT2%  .:ل=n eA_ϑpǹN^,q :AK=zp X܅Cwp.>|Mc#74(.@Q^*\@A_"HdAl$Pk jn >߇ 6W%x@0'g2b/>^Tgi7fK+J}DJ[vf}wξM{M}&^o|Lc-9` ۗWn"zǂOp~,L9ޅBך| BKj|kss =`;)P|audo\eW8$Pe=CM}N_&[ xFP~sW\|$X JJ=Lȵ֢B:Ti%AyIXEl߳ⷆuћQPwWCmΛ Go&u;XNom^ 8|~zdeF4l%ƒ?Z_ n| W \yъqG*Gq-$Lb1m8ﴹ g+4O8>_-49 AG_G;9iLc Ϋ{oWZr{zz|f'`pߒ-qV2;4r"yZP -vLCjp1D{!c6jGp$i+#cxZWY_Tv3)z[TqƗ} +& h,x  *( .53`UVUuc AL`YmsSm\ߗ퇬e}ke36 Z Fl ,{.Zş{ͻj7h4K3^-,6$ ZOw̹m]dy#Coڲxj'Ѣj1+s Ӆsl- XgXT1xTx߈Lҁm{_4ѶK5}9(K§Ң42a jb~K$j4ܯɖ+=۞?V.ڊW&I \P+ <0WD>%(_Z#bMb(_jdV'-oPAKMGC]SfPUѪ B.z95LA: -w[&;v J  'x`'q@4'U (o{PPCp_ 5qiat: 5>%fp`|;شdlSǀ?9h6GfYr,E[7o-nuŬpTwm (FD6?&@#c`+cx4{AeBC\t=oqf!F`%G?~K $ `kΆ1|Ughi|[L /݈ߞ[!>z#(fPu['_:|/K]?l@ w{5ϫE(6pN׋oF+]ޡ)]jta,l[WE?ag%[/:9B7_ZVWOo֠Q^T61h1[QA"{nܓؙ½9cu?5ϴ?9Kc1}"h*hY&*g' ۮ2hYVmDX`7ANPVQ iXzʈ!Qp[ ggU}ᇱa 4Y S0i`'ل1}5_д_$HwL) RBY ȮRf糗]/#_v?XӇRKɇezSVOBP" [X&z֙"tow_SGAdzph~)(̻>Q>}+_&eow};@mVԙsdM>3!&Зx?)8Xҋc}#fMJ:!=۞ؓ)Т:^G`ႊ"^[0`/$Aۣ@xPN ZvG [m J-Y}䗿_ed_^SzL ,8h D .Q%f5(zP*h)Y *|J Uf{oG8|  m.鴤R,XHY(3 Ƅv?#>}c;˯E3}.)DUj>p}w6 |ٴ(fU-x1Вqe'6ݻylw%^Xq6.JxEA%,xEM#=)7)ypu 9#5OTTACFljr{fR=A ~>2ETuΏv~I&,A,8g-t_9@m;Aeʁ>xGTonC{ܓe)`mߝ9Q34AUNV0vk3KUAp;:?&5HyNDyeG7+xRi>p;?2q?b0Ҕ /tZ"GD_& ޝPn'D(BG0p|]E)΅|IpްwWA|h'*3r,Sm_TleVNJqf8k&Гvz·+XA_hN1FT&`?wſ V0b(^2(*>SU01 jYH5two/56śյ`w Qs_+_:zhGg=ӂi_8m`y(Kۥmԍ8j(0п #QvwXCx]*hx -2yx,H ⮝.o .Z^wb\P7}eKYfB5QTSfT}Ş3{R)XAzl;,iORKr˳4. -^8W# Z'8:?8MOm0f|2HRi⧍Gi zM+߾7J޴y }iSq::gۓ{R`g)h#%~`M C1 ="4[6'Uеx`m TO&AjAOU5]X 41 ˼n:8:i$/l|T 5/a8Eĕ6jtjhʼn]":΢-&2hsb bH]RAfwk/떽c57/*O*fmh#{=)'LJ:X`PP<V0D ؞u󾞨ƅ3rA9O_{.|"g.{W^ѵgjnCH 'hqw)Z(Phqh-R )=@MnG "yܵٳsd̼,&+4Keh8AW-|~5_RP*'L_BnԚR.czƖ񰬹Ac7nׄ]Ŭ{4qT4>7I,f$pwIQըfXr>@"t_EEh^BX%*acW7Tq{nh(c8[qƁ?+c-S~N`tU&N~#p2;2+T(} FOA o_GWChhD!1v$YD1%m#%yU[ۨs,P"-/T؈Rtʜ zj"\kXYZB9X/?HqߝhQ` RʁD&r65Cʖt| ]#=~tFI{Vtퟍ6 }}Y' NC~_#d1;w(hN.~}F^#WZ]o%*2婢O p`6~M\M /Jdb|Rεqs y0!!:p/忩Yr,"`ǧnQXRJ1n2`2m052!I;T Ҫc. 6:y@4oNE%}Y*hp"Q}v_ၓ]joK68x@-p w_Zڹ -FX 9?\ 0\~u+ՑkЩ]!`Y~*%`e'ຖ^ʗllx0%@V\nw'\y4@samZOKrR/R庠XH>?8c4YN]]x}XJ! ;pM.E+,Jۂ3͓4 r#q (RhLO#<N坽#XG$α%lo8`9Ž11ocw>`xsP'8?n;ߛ;$ңWޑ /Īƌgpc}C&^涳lHC`l^eϙ)蘂}Ab& vB *ẉ @,z)oob\<_[:&NG\qS(At4#J;}b2m<H~wA,2ς_?!~CsY_qƁ?o'^F$?C:Jb @DZۗ4 6W=R^aU6j0ijXwĪ`U0,bVH +i0 Rw@,>#З 4'7IfW_c\ HhkcxvbN@$*xxZ/We{i?$zqhP2ue*R 9wT7U7q:KNے69|kX&sNkq8@I@Pw?'/GVaH^p\Z~el@h`,g!gJk4x˛ ‘(9wfKEX&9Rc(QW1%:hԾRgN$'5UHjK柈?euh֤H@{28/ A/s7(X`PAX0cѐU@'{@F^s(GU^H5&P"RP[l՟0rV0HHQ a!] 8V?'IZ^Uu"0lŸ\i%u_Xh8U,^uS?EVv;#Ρo>݂dS _4o:+)Iqr/+Il wf !>@-pTrD3jO} [6p\ JqTJ l8`* Igy_EYinh/O00|U#\zn\tXi"=^:Lq;>tC%͓ %i8^UԃDhSMb*QY/9,'DݿT%ʻI1.?H4l1(.0:EM>| awua%Љ{xU` ~ v##`'3SFPЕt=-*%2Ym wXt S&`{PKU! P\^M8"`<]x9-Y x /O x+o">~7GYhȁPz3eMh@ 7 Tv*5,]hG[јbt=,gd]JX]-5h}rXo~i֨`8bB$8Sl&zsQ0$C `r_'7#PB9 hȷ@/ް@!x#D["g#$ σOLc ]#@1K@~{%s1FCR~{wb_F*yXc}iV< VNՓh!@l?^/{Fٌ!+OxaN ~C&+.Ax|)61֖@@@k:MPl[ywp~:׃]q .6;{}v O͆qGI-<  MEy< 3P<|3 F 0H5wtD#h:1HqZ<̩&:+,< ڍ鄮{${ ~+ B!s7<9[n^z>z+Mo"ʊI9C[帻f(+ņ_ހ,x(}FT'.ruuL>@bA,Y&i)\"*l%u'+~[0Yk%ɇxFew&-WzTscs$Azhy}Bi#t&AT7hɁg?.lgWG lBln'ytNð?c}p$Uʽ.כ#1 w50O05h#p9'@jI& n8Ī K"-`&KLi)$C?N`HBW7ET')|1,$ .|syKSU} ,q2  +(d]C@'tbޏ?s~xSꅯݏD(!Q&qD ri/lUݗ2#QwEEa=&RD@)2jpΡey xYWhF@C^;%xm{aS˚uzRa!?C \p#c|Mj4X/M1eGgbC$B+E3W|ڤgQ` ȿ1J\N4` Dn0Z ťC]%+r(ҫ-O |O0.aK,Řڋ)[STI7awPOJ~& w/٨/v]T[+R-Aʅ+`/2z?]ѥ7=KR*LtJg?mJoo*ϵ!JIpId}Ţ-}DSVOeu%3ʄF"|xZiITSuFֹI@h&Jс\^Qm>^'`w [c?Xޢ?=)3Ko^ĥh >,m)UUb'ambL cnL! yY6Oò֬Q!u[$['gƜPDV}F!6 i3yWn ׊rI=P ~6 xrrw5.Qpm n堨 -أP09pIWsa.êP=MJ*OE<؀n Ar_6ؔ+S.Me[]&aYcӡP ^hmo=d, 9ߐ,Uh`7_eAǒB rXw>7Gtb|*pC\I~xTWwr)GxgTH)o&G+ i>ׄNtYD5VDnjsT?NDD(o(sRjyc6u=xd*D|AY[az?L7C#c,̳P&DMɪnMU>!dYDɂ%"g"9D#5(Hn= C!:mfqU% U'^P~:eQ*C.0F!={'EBfoz3]kt15~y A kC@!([z}ۨQƨ(GYDDE%5qol6âq84vJ;//<_dy#v +}RaaVmh@_Dzؑ3݂<\`R>_Рb*c7<`/SB0%WVw_w~kP_ු!0v q -MAytGo[gC"Qɢ4iz`s`@ wGs"r(Pe#AARbUlΦQ$!|9R/, #>- &L\OէI؜kOo5tD gta^ϴ ̤XS܈Fȑ<*x$P#] F꫌D @VGr7R5r]eJ >m0f.U~vY kt!@@TQPؒ$%-2co/YjMxoۖ?XR÷GoW^-_a@YNz8 ,2n 'l4߇ JA$SL> 3 pG!ZʲPTҸsK!S;V/XԱ^CE(QE$X)ds ԗހ] 9^>gIn=u#zWI7۬Tֻ!(a7RU}ʲsFm2CAϹ8l`qD=@(f;hMN:9LtdY;\-F&MYFTf v]n zd,ʏ눞7)yEDxh2Fx%wgA#) ir=<fq6sR>m9;S+bAXVt>)) `gnCZ6:aar 7uTO!}56mhlOe#)(n~;2 & /_tmlx/ȮE#6Y\9N~! wN؎ Fvئ8 XPGq!0 2 b-蛜q &zi%/vH5%PNdQyK$1M`J\Q:fY3(DN|76e(*aEmR;4[L,Fx~ HKk+H7t(3,L}>C8z5g=wCQ[9؍ͧGf$'caᡩC!ff d^ELJ{6LWh s:QuU `wh](%m)_)8\WhyG(@;xL(L][=48\$ź4ꋅLXĔl]o𝌽2r%y>xîG]3z|/_q k(=IiP]54ճ[-%_ɻsPVԦZI'QI y-mg4Ė83j Curqی[-Cc#9(Hb=5nGj}/h)l{zY~XĻm O95_jI ~z^*iOڌh~99Cu' 媬@ \GwK +8:Q/%]$*hxACŵxa1O?\G]xdLA OIx TGlLG+u'bFݮC j m׋ƺxq4'_|MUGo1^0>l .r튱\ P/XDZ˵end1w 8X; ]G%;L< y L9DZ'Ap<üCEXbl8wAZdɌ_>[ca|~;^A5V#ޏb~6]u?<+?m **e%ZC&S1YzHMrW{ ςݳ]Қ6MA`Gu6ŏQ,rR?NWa;#Ւdٳ4 卺vn ΙoY%277|wiAԂT"5(uF_=SQ?+VD|YX@=z'۶)׶;f&'MYZy,*>Pusp_\u>^G8 X{(;W;PXۖꭁ%*ΓM7A`tZ+|GPrW*~V>.,RiAft6mO߶e;POֽLIﴇʸYPlXi;MM`XEoZM;ӈb5\ }z zd!?ax}NN!4s%2Vi4ڠg\*&j9K>޸WŮo,8l{B ݾ6]ojT?E$/&W~$N8_8C?OH>c $\f'XFk >^e<qA vp/yf:]U6|͙cӇ#Hpؚ%G 8}>k*?1I6 TsΠJGS5`t/vB<U0Yr*_Ϣ>i /_Wuwlqq@6i~onr7ffƩ'F 7j Nzv QULKC'd}A(' vq0 . d"- 2E!؃n5S%{:g1 *K?%巏ߎKY?8QjhX^8:p~a(cD^Zv'dnUb'O#5!bK'quAȱrN8Y_r}E tF7Bh5䰤~bW D 8Q/=CM1xF.sZ4ȖMJ,'n}|kIs;uy  dF憕W ݙOK*1V&r:`Kku.F IԊrQt;6OuVTVQ:*",iyY ^w.>*)=4rcaF)N7K mJPp -EEᮚE(>d/fa(Nb3I`'zqYX0ޕ4/WKb<}Vg2(v%Kdajkuo؝5Ղ!"jjID44YYھ21y.O|q5$ AN*EHcQ E^ B,oꮮ_)ED#.K]&H??An>%Rh/xX>l#gb}аnrt"T!Wj'P q3q>qja;I">Yp51.)W^s9iDQ *gqrdZLxR\ rD,΍p;aej DeL\D7ri¥K@Tք|M Px2ER<5ci;N&`U= *W>k;R9%K?|ȥSMGDBގn?[{T_Z弙_<;4qe5)I2^GfY$ dz(W( ~i{^~9W{`Ok;sN+2 UZ/j_(X8o-b.y}zDQ=P,|f'?c~}d && Ćn'!XJU͖lp`E~bx֒Mf='`F{ũ1.|ήg4q ªΡ=`D%(,j 6NvuPv!"g Ѥ,Xl;$ģw'}=ǥ9vr0vahL'`'@g4YxX~G?iKRK!p*QVh ^yc.X*Up*E*TaN.WF*%.UO %oZ0SERτbM2;;Ɵh }}'fW7FP&uz9=?Ygӏ_\!_tVS@muɔp , v51Nc+@"=[gef uqگ+7u%2R7$E{=)f 4hO#ܷYG %dUlZ1}nYpI_Rv!LPtgV;&HoC@WTKmxwB2?Y49"Qwj{B6~-f9gv[cTȶݪ!_=B98ܻ+/ܵ*q,a'uiOȵ R9R{k G"<' ꡾I XZpY. cwb!x"F|+a,k&rf ĂrZe*{Ex"֜ln>BP]uGL5^"*;¡~7MiIP JiCAE;|> RO &>W2K ˵tUNK14arOW/ E * nt )0$)W CǹMcB1E˕qΡ^U5~\uV(mEMwe0{P+r_JY]gu 66=0LmlpGђh~$PE FG#GLk,\Ebr$\i q $KMqNۂH]#r-8'p8" *:^/9$Xv"\JXp44$*k'jMic)v 0rۦnjZzz,'AG<6>S f= _] s$ؓM'i[U Gqq Ki6ho(!׽VDiϡ_nᡈװ 1v,K;舐UTP =c!{,~ztJJDuxBkN!su;Ԟ ,eJnJg$}I4s"Qv.u% `h?Z".\GVq -=!ό?J`./} AgkWbRT) I4j ̍ӱ1u#\Ld >\` :g._y:/?S`wƁwXݞ-@~\F8s,.-7|Z>5.|7B-IT> QsC|+ wiDes k9Z(IۊlQJDKR i{uS5? wљ%6췔hZ^sir& rn yv,~ܗ4 {6fq@'6tC߻VqWhDt#>mLAҚ}fML4Q]O3ZqfDȗ W9q Zk9N{b@9f?">9/򅠴{ɛ'`)x{/x%PRkgC"3EWuI  eث{"IrLS=m>D8^tO) I˕'=JD0mHQqKXBf&i8 ;WklӂD)/"2S8bTD6 ֪oc Ij' hW,5L)ɚ ! /`V>\;^I,؈ Qk~O7)?KZRQg,*4~ 0F_6JqkcYh>ŠP G)]]=p40u?Eff>tל \(Q"Yf(i;$"dghU"*<+ZE ,\8/\lA4s-,]D=L~Qڎ05_-婝fC {qE?yv%F 2`,N#VX , AGt" g34R͉ţwb\"/t%xO >t$h"`4/wFL+fz>s4?A]ٲ\Zx}u*\2v?I^ATO ^?)L9n'Nlhd0 8,KV|enUog#Ou=xHvȡ|:3n6<`QXFg'J&١.ZvR?oh~G.i{p0B~ٖlq; ZX!Iui.} ݡϫ'T]2vϔ$c__O @_Q&bnomwK.&5>>G yR2lK#3;lKAr!? 54,OVPnA4+\Nh/ܿ͝W;2YK7"$KhҶCaӎViq8=v1]4|:qt^,lyXXq ,\.HиpK9NV|7:8e$D*ƶ 3@ b܋~ʆ닳s9 4]7&wG)x4Yƞ3B0}ER4K\|_Kg)_%;Sivb:huk̀Rml)xL)M%xW`q8xMx GIa^L\ȓTġZ?Q̡豸_kށY֞Pmf>'mz)ѶLԒ$R >bΌج6fv (aU{:4Gⓣ3ARy`盗mG? p;K~䥷U?FLsՍV;-Bn_'ט-۽5"a>+U֚I΃F3P0vt1O˹! M`N#~+;m 6sF`5z : ]:~oxo.ʪ&hS=v*K+ȳ1o A*!kip0=ɂx*آ NI.+S,@{@ XS3JNH Ɓ])fF eO,:8˧ ~ &MX^ $8CPX??Mj@dCX;BjyܑBC7G XDc(oҊP)4 kJd%&$j[jU7$5ä`$n]\'χIǹgD%p_q(=rør> 7A7<)f\Y93.-PũVZyC-sgO!)-Q/oy G|Rj35;8Fm{mj}(;BfNQR`Z($v>EĽ<Fyl? Qs}O: +ME>@0NP!q\'3#fh⒜8'Ȇ(VSuEJ]M}+W#Y7!];}ڗpٺob3gb*]zJqn}$"> 'G6lpkV?GG)f|?u XC1%Y&vшna ݉,dv\^f !|żxh> uJ7Ϗ oXpl|^zƁ  kMoTGyYVI.v{ *nC;X}hݎڮe-KSО` F {[Od|W(shP)+{ཧ١A7u WJ ʎDwDS4Wl6زhzWtIP}z64т.rvsKؒAQrLbI[~vCI鏨y ie|xAwV AC'ܲI4 vؗ?CCZ8 {aEsG7yV谰ڛƛ]ɨo[oAqɬԧp'^isl,䭁,5TuqM-C+Ru\zݟT`r vʑt G<ȭxa5&I"E8J]'#" :A])2|uF}R)s&o4B}7f) Q#t;zA<PlFq7CeL7UxjOۻAèTx2=\rd|2^SbvsV3jX=xJ[tn.fP(*\_E-N@-?E!5Xհ욳k?z=PD&E ŨbU+wQ)k65?ʋl19(umHq {[pﷰ*@j!ώ?#qb^gV .ZB͇5 >2!zZGes*8?,X^~V'_ߥ!W&kP/n-e~NjZyH{[GcKBAĦ^(#0H7voGˌ-YҌ5IO4tMZ+gA81zXSRٛ.WhXP[dT]_PuޡifEoi@qgGɠ85\xNUF DX5 dP9p|;P197=7,:JIw>)KGӒW -ĸKpK 8FϡE'}[!x;w꿳}~s{i׍6'%zO] R=]1X~:}~a)ELs˲eF`z~_tǀ[@Y' -,e% Vb `QGO桐V[X{i!yMԃ{wr րQVZ:; R,a9 Cg$G} ;fC鈵(E81'H36)`e ,9'އ9~1cib"T "`L :!øS^#p˱moGJ*7b0?0&(חK s5(En&˒qA *p8 3VNK]G4σ PYDQNMx?QqĀ\W?zA`hGlYJke(x5v&?S1xQ?Gkpennp]SAq0i\=qdqeԽd))_ Y+3aghY Ci1C/ۏmi|v Πouzb ]قp],iV5{=HPfcgB@yR (wȧo'*A~, d\(IʝUǢo_/ whЮC>YIUޙ%]XzPKCB Qii$EJ@JJBBJCB ec}fw^տ/s~3qs=~\ge/JG6Cp\.;­'o1˒Bkkuaق|[{I?ug}X0|YuSnO|7J{'T7>uԯCqz谄]ޗkԾe ƾR'0ڲ!3Y"5}Ƒ;gd>("ynpZ\H5g%I*Ct yޕ:n~{[\mzF|?$:~q|Q) zB7f rNdEl,5<Pk ; `Vv;p[B4&n AZ4 B~hDT:>Y40?w0꺻72Zaؗ8qL }<^+Ed2̜.@IDATwQcҭ}  RMWXxƯd"A}jYG5.qQ7:K+Ư&@#M]NiBdWY:~OPTO42]oݝ7a 9^+ڳFX@l aP9_ga ?en $Q&E9T Ž[G\S;={.i)?k`q>7tVq`c܏j#(*(]1ڤ53wTO5|(bk XSSe,4'E<&jFTeL: s/@r{!{c$#zm 6U/fR_y..&O1@}exOFׁ:ivV ˃2*!wϯb "3`1$bz*GC<!dyZr8N31ޙd>Dÿ<0Es)\'ӺYO %s\e$zS)E}Y&>OJ❫5HlkY*JC8m䜢L:7u`NK˰=I)XFt~(((CX6Y鿵zоW5n_d_PLocbȻ0~`bN q]3wq5DқvdO-z1w֒ujS" Y2$vTMLeێ4e\uk49v t8. &q[j?`e}*`+sG[33*)yg{Y毢N"ZAJE@S̩w4sc:0Q/zJM'yI ._.v'j4WZ e+u.iػ1A`Ng_oqm2: ܊Ex W/@7k4^*㕸:}! >+^Mo_<pw#jB(\i!ګbV%Zsӳ`BUtFz֠x!NiPTS[) ?[I\uLih%͏'Xjva2VOn,AoCd}Iz ZCr|WBY#qJD<  Н <w0N+az_xqYZLzKL κxm ] NR3DG. oθ‰XirZ) GFynޕ.+7}[A#c}1^h{^B~#R(}e~;U}@joKM_XR[t0Nj%Zc IX Y.謨ԗʀ)F:dϾT[#z$lEPf|ז-|"y?9Ex"XR"eGŌ9p*Q7T3DuPgC.}@6#p1yᐅOuȩYoX!'T/^m^OSHYA=؂8mSF SR\BzMVb+Xd}o'@Q*`~l"Ůq5rJ=)'CG@Jyyߝț՚Rмt+KYj~U\YGkA-(s>Y#}} ۓV$^gB9oH;USJg{ϕ0T Rt)[RH4#r^>̾ :I##D[y%u4gn6BA|SnUtFd2`s$MӡC<+0~wވ:G7S hE6”u`1.NoN8kWAbv,({#𧍀f]keE{M6~` n;f ς69Ko'o@3M:K `{-!'o@VgQ~2T:D_Ud{Q{u=H#eo@co1$Cs/\017.wZh{򊦠e~>y'󔔰4OoGޥO+IcǍN~,o7;'=M "A~Gxr3Q#0?+ !#NKM>潒O]V"fd`LaE;50"FUAoj>~)/f#^{" PI^Hb(0B15b`> Fcbֶ; bbnO&A镞=|@h<K\tQxMsbesSb+DWsjR *NUKK1, P˯Fܗ,!ht =5˰TDQVqXAr y%?rc}<#ެM]? W)_&6j/ć| %Fhڳe95Vbq7Җ=!Q47S .2Y7RZæ+)I0 o.uH? ADg>ǯI=Ko9=Sgې{F]/m3N9t8VG0)XTW=Gv)':6AYN eÛbo_0Yvcn;) ӢNj3ʺz{5.Kk0~͠R'JFA(v;H;k2.PQ1bRvk NTwIGɎ 90w/z}ϣG;n=K,\0͏#S90s]K,; 6,EfhngS Sz7߹  A0&ЀG*=XnVy#G3w,D"j\$=E_(Aį(¦{A}vs_Z P$Qa0Ƴs)y2yԉ &RHwK"ސL!5 &YKR[H~9Su~;yZ<8^Z~{<~Ͻ+uN1:u;QR[^nQt݉bߵh\*U/7O>)jwYm QI=z /tD+~S<4{AhKc/Ҡ$w3bo /WT_z`]'4RK4!,kȅBpϕSf9z @ rʣY ޲GVQ=qNJ֌wo];ա `Aq/J?-?,NOתm$Zy9OFx~!S#jjO_**S@|S^/{wCql?8l$[Zomِ9Q.0w]ǫX\r{Uv!b#-d xmREVhhX|$U:"pkWOiDSCM<_|iahxtn0{7°anMku.8E54t7*wOQf盻A >LiP|F ؘ#xDLɡk.Q{*y.l٠JGҩ˓=«6$I;WM 64DG/OV<(m&Z|ሸ}b7aݚ{0Θݵ0?cKm/%P⛁&Ĭ3u2AGEG6^XxiD~h‹Fy @o_ 3Qq)Nm[ӧ1>ve %KYA~V;+[b!YYajcޫZ) 5x17b @l3.-0Lr{mG5+$+S%aQ*,<Üg?H}ЩCA3x;Zi@GulUTG[Q_<>}zcL,ҷH_FmayoYr{waJLIbꂂ\҅ R2=ifqQLa:2 tdۈb6MsWXOVP5S_q- _P;amenG^ /[3 ٠ 8h=# 1vH|xdt`LVu{NƬ;T,.z&Cۣ2xU_Cɾ_ЊPo3;-A!y;|cٙgkݫ@ ӕ0fJj`7N٪F̒,#90*k\oqivоUz@|:!ɲj,kN_0cSVW،F׫]tf~E/h.䲫?WKa}IJʑ'e>hBz!2k4WzAH{4s+)-2:H bVS?tݸC|G^ؖ$ \&3RNYu*~c)H݌PQ>{<A?W\M M^ake_zX aG+ |W*=9ECt~;`t${޺{|6bndgGTumͶ5cW#ʍ(F7]" Jj~H,*ڮWh]i@ʟ.ZrKyeГc)G,4zzϦh"]B!Nݒ4 24L5(d )$F ?%UkԴ?*ل"qi;|Y)ɱNZ[M9)hJAqc]z5.ÿ~,e^C?ؙ"x  J. wwg F0NҰ}}l:̿zn[-&s.~xn .nOpջrޖQq)U$3r69cI"7\&2lU*O3S]^aNI$쪿h, o8!4`/-??~]QA=[ƿC ū?]'M{_x&i5k)|F[cl-Ieݣ6?6#hzsuu|0U_ic;ם uAC'f kġ9_]1ߟzf2&[!G- 5mƒ;4ugA-zYl6*RPYۑw ChdI- ֭# UuLaE;ᒊOrF]0ja) zЃ%O&Ǣ~Y}7ʦ) K /&z{uu0kNAk5ν@;~dv?>%8(D^ļjwJH 8KL*ZGYmrٺPoʩ=/ >K1`yBT+/Ht"`i˱]l%q;Btؓs?fM: Hs|ULrże˧Wvv}~}FS: AKo(fOgC紜Ƹq0f[s6cW@Z(+9 # vOkH,`_<م}I ]NM6b uNsB@'~ G Z, n9|߇uys? C9f Evȴ @&R2  R5&M2-KDtg;z&Ciю_jk=ʿtdZ~3]>k Oxު1/Mhk&iig5Ҹ) lM>z\F'mz+?_Q 4  cNb>OtnAp-'%Nũ.YGw,^jh3f牠lfaM5Ȝ(`jbk5>z؞ЅPիjT4UnN{(pglqv(>%{^Apy;d߿#w@t\陵HkHA0TG4D9aM2C(~z9R amiky_I:a%Q5Еe㻛@){ގqcw&V%brt&9rzSA8~ 378@DlUb&]wMskeHH!?I&m}!?693'`'`upE@} pryR}-eMk"wIs{!y/]S6gc9J5bWLA@\8ĺq_Ww_F|r$rip*s?E!8Pj[<1Answ=g14Ol oW lSB6\ PqD`KMKM\3MSMSg0mp|E#XO4fmޘ[l98'@:Wƙ ޤDF|.QQ}`JAYbaUKez k)=Ѩ%73a"u)9B3&o}]V*2$. b!z@4rjv@5W508 <͡ *lvuw{}:Bk5GX{O^'mn䖨>]' \H ,OD1PMKVBb2S8?qu-I\/VbYלuw4 -9r(¾){պ E|D_ŃI}(nWץdpҖ7zk ;)Jo9 x"<Ølf, cDM7Enrd74C tF*jUm/^ꖌ`Ega̿|ޡ]'j2?Z\e7B,dޱկEnB31%чL5"tTHyZLh3ck0,ZY5o%KtgaX<ſً}##YCS{||K>ssiZ.w+=VYV`nТg0Av`Z iOf3~H3㮶hyƜ#6G\|z[\anH*1m[s/554wXƹbh*;қ0o4r  WsASVBŠUtQ qs2X "@޺x9"<^m`^Όñ#jȮ!t0P(WO 3}K=ȭ,F6 aj/>Hq!_? г&F>(CȮ `OֶCAf6%ylc@{Xӆ3%"9,Qa(IUGbj1Bb/-gykkəMD Jb4Lc7!0˲+[q]ז^{q-RU`0M`SOT^1r |ujl#ڹvb*=QnyY)& { ˝֡)tu֪> y ~G vD!hިgUo|ky<zh _{U0W\Lvf}~{2h:G `l^A~Yt5e-઀e/1nR:@Q`گ"' E8 VM7wp F. |OXQ|hjzJ~ze??^\3CHP v2ĀQb.SߌgiQA62{.Zh~,.ﱽqbf 5m%8k И А6 ĦdC* 0n+ZV@9&(r Il9Vd.m^W~{LL]O@œ<\@?E h+Ó/Xa_+A5v"%֗DPY߸ 0rؚX,) FaؗgmN^ڊ / 7rl_!`QZ :TB\ysSv dDoZt:T\#wD,L 03Y xd?E,e1R{iU@f?(sN|p$+K+=|\䒚ڻ g,@Q |RU.Q?lxbЍ~eqhN-,.G@vAyG؛{ h5+[ 9 ]qYŦ`w3J{+~AP ;Vڕ\n `d]`)/@&`5 /$@ , W|L x_V@] ~3+]Y~匦'ڹE@ p1| =@ +~/v s-}GXZ@CŠa?{T 0@x[+a*Y[@1PqL~+R' q M`aCH@AgqN X(ٵ%7h&[.E6 $qX? z X޷]>g},`q+ X,`@Tt0 !EpN<*[ם.ucm}~s[ px+Pɬ}uI,W_Ҋ߼Οv;` .~&pE_Ze|PWhXM< ~,`.XWiwa+!+ kyĜ8 ?}wa|@u 벏Nj=)CpIENDB`ic08PNG  IHDR t%sRGB@IDATx|ڇgBibW;;(*vQ bCTTl4AD&E#{PR~9Kr(xٝ>Sr9rI#)70&a;‘8s)`QH@clcw1 c6,[0dOaL1 cbE/0KG<GR{ Qq C7l*%IGt"^x{f+?wD1C_1 c c7˜)˜c.(9>A bŘFw cּ'Px;aLodQ$Fv)ȟGRGn;c hGMG cF}!0R ȷ6A1Xsv]aɯ IgQ$i#<,Ήc޺S3d>M000G X81]˜1Wƴ{@C=p|]_/P 1n1ƴTŁ戽#)H?#GbOb˜w ~ȱG=WŘ\̼˜=ׅ1~X?V5k1AFa7cfn<.k^~0w1x˙wS).a+y|m"%li'Vcc#1|';a}_[{GF_q&dſ$ ӱ/.MX.s +F`m˜s1O.Ƥ7܁Kqb[=LXA ^T2MfCyݹÔwěG&iat0U1Ik LI\'!q=1]&i! KK]SgӁko#s7vY_0G0~8^/\f:*Lp>wkE!MxL,r0R˜# +>G82? 8CtAk>V6(02W`1Ӆ1uGc:VƔ[)S,aL˜o+JBi^FYux?!ZߟiZ12uŠ =N01: cq)C˜noN E1iW(Yg1mp[s'}%,U}˜Մ1c c*W,r=k0goa̬͂pVbT8C7;+) 'N9'19]2k6m{9/8H7_obgfdFr70椆˜sJ:߳UwNƌ!(USCA '9`f0jEQ$>:p1_E6@JޯўO`;6afFCa̒c1 cVƬ[+0]f+y!~DЮ6z,K̵(}yFC' D]3y۹ݒԸgn8^ o%5\y676AiݪW缈dusW}D8ދL?c~+hh cQ1MQD0G?R7_ɎzC|S*Ï!1Uw6}<"|gls9oK5&+4`f-X9jfaK֐lDXO[_[5Hƴ"x8g#;ߞ$^)j8;O;CZptsSj:ڔ+_?-~Q~ǯ8gf6#N/,3DflGuz0+2aLR[f0 ǂyEO2FPz cf_(0' F8R1NT{8P{+𧀷PyXoavǕ,yp0枰0}ya̝1/|*`N`(gyg_г, {ѐ-yc$E\0泆Ţ@а=*hr9롛b k5@?+2(;ck'ز/w w-Q+US=Ms]3bPlQ=sEnП12K?6HlǣH2Kk|{ttcnuw-FLYLԯxFKr&'{0f^D0^$x|{Ʒ$ʵ~ʼnjgCz'S,IF*f'S.J\XZl٩)RE\ 8[ 'U$o?je a31_vz.Hg/s1֩x<_#9i-X,n'XPɑ?)5(6HF3V0,}&\[sO b!Y 0̻f 4.~ʼn3Qaf=kpw[@3\d*^6cVDpPd֯US fJ}}և"j;569}:u0jWc7ơI2 [:`.:Ej*VN([{ "ݻG+.S`_|A\`uň9"/=?-uḩfuBg ꢵvE&sZ:+[ R_3&dZJt?onUM:@Y`bp}sM,C_kX41W%I{0%L0/:1gވ9sxR7Yf8aFf#7O,(>>A>'xq^F=#^qLAA{*YOIc|`<,b ᡴ QS-aN2W0Jj/SJق]йCWz=x`J$_טTSͦ7#&%Ţĥ'u+Kٶo5,L"|q3Dz+);j9Y-xA{?],`/`n\#h$0AN̅…1݋˜/!֞ε<.ЙnhH)6YVK[d%Z#hG*b(G'VS-C~?;!([Xi! I[V`)]Lrk A:4xי⸟|鱖]1^>7ف"R {hNԱ39k~zL2*u]}3[q(y% %^t̬Fn[>񂩀Sw!Xz$ܒG'hR\k xDT`nqKs#h4eAL׷$}'~练|bÔq8FsH CCn> pP8 ~54j S[3d0ʹgbM V c(~BA;?Hz̯et^?G"5pX@܌q_PV` Qwf\}͹ݹyt◥GbR$zݹw>'y  3rCFG0%mU(g xRlR g;V+eQ5m(xZW!ʍ{@#)VG@sEQi3qvxe`K8m𬷮& [<@׉ž^@b7$*,S)86|Cچs/mWT8O:8ט9 Kq+A f|EwA. '~!ebAT\%ZPOLu4ʱ9IԷʾzTm~Nĭys3E+!r#ߖ- [f}?:l.:S  *7=+xxMSڕv1K к`sQ*娀q0˜!s *s@,A860&BWeO[?ъ.wrfS0C''ĮEPb ڄSf%$#ŌJyK]< u}s2 = 9xS-ǩդGDS31& h!|"'♭:ES )5J7H;gQw~zpF|!&)wY2: *aLs<_7L|X~YA9#pğQ*?: a4vvb!]:id蕘]Ԙ9pkMÝy`'Vhiv@тWVzN1Sbdj-!?J|t:M9>kS@)u%oZKtY6/HbmVrϸNpWPT㻓(BqpV#B1ǚtk!)/i3}-k7.\X~/(n\"KfaLw}&8q ^ ^bGu0xX$ LArP x=;\)-i#ɖTȟ:.Z[$(whݙu^UIƙ$'ԀB?u98i[q4w׫zdҸ48v߸ -&6K?7թ)œl8bdv]=߅W7ܚt&:M['Vi944u5{ CG \So׈WP(7=SKT\{i"c{4@fӗdQb'|`vU84X ۅ3t]Ղń/ef}{SO=~IqSƜek>B9F{<M ۯwcq%͂3E˞1H_|ݜy&)O!x7jX-ȍEݰC+ֱu'6'2(>NR"|KyV]A)m$ R0vxg8Ki],3}E#Chzc]iv8G"0Z|3vTz1ic%+hyYƕ<ꢏB6ft]o9Wq?./v$&?\)+(M0As:aL˜? q xT+"#S9&Z^O0jefO#'{9NӢħRgTC[C?`ν냱iZK($O8z:wX_ dY“$8Q,n5N!^cn:ct`dD/}ÂYZ`2-eA6g قrPC02Z^~M FkALίN/2o?=Cc c<,^/h%ܙwsQp: 14A(-/`'LvcΝ>>%qnڋ 0t!-j*v}ʼn=ۇBSc=nV+8_k09: A?qyU')S@:z ڧނ`(X ;E=j8r*%6OEC'݋Ʋ4 >&>Ozɟ #%^0Jh`FUl~bXW9b~~Ec>&?>ҢO0]ţi{P ?nI撞OXìt;$$i_gPP򂙼@#Pd{^ו |t^ ,iWpWkM _*(]*҉g qo/MI*Deۻ ί[9w(}iۼvUjP1xN #%xZ,=-ᵯ.@TWRTd6aaEr{ =?.(UVLf?gO0Uzk ^9/_T7SE pmdzb뷂w&gzxd/&^W5T^FbŋcwHМx{CT䟟{;X^/+<]Ow#F8QA87G9෽CC0P8]Nr٧_,Vr['ǃ*v{3Nԋ޶ ORn9EdoS PbjI=k7r[tq&{` _;j`L0TYFuwL?_؇t? AmT,AA~V`@nOkYܒ@+ _ ZPi( A/=ПU}NsIƒit!:Swfn~ߓ"m#p"곸= Xyl{v3m:Tz/j#y4 ^Eq2"k!v s _b|wA' ŪbnEq8&} bv#v9;u85+·ؿ!X$7gN1C ¹Vו[_4x [,Oߕ1֤)'}ʉ<=߿Wec>vY ֋C8G&^ysۊmL| {E}cұUK1 To\ .&5DY,bm81s$^d:{QJ4`wJ|.wUNgSPNW HN#n0g*z'dZxނr/IgA ILc՘5mMLԿ`x ]F1KЊxU`̃| MBJ/O:89/9'Yڜ?i$@_ӢzSGtMԫd&< B"~{ONIl!!tEF8PFuH&KvPIǯeOIxvՔ]@fk[P$ϼkE܂ wyB吓9]v' 17&;:MTRU=4`/ ]ꑔ& oADc2;jj) e}G} Pay9K`WVFkVp| MPS89z>~B^yyUVOq_LLA%x^\#zmdƜk:&-bVyYWܖtdv9TwG<*P` ᢑ:z.LڗJ(Cuiu2k`}E1*,c#X;G7@ 4 ?$H5Ei|Vi t3)'> Ïy Ł`6 K #(VƭKA Io2 ug)} oZwYwҁPpoƐ`h} 9OPۏccv)(~//H׹COjt=;qG'(.oIQῈ?p5*=),v˔Q龵ʍuv':T5vq28 c`LzlijPxV׬kxݘ}r1q$Rs vvOI9a|g?]7S_,]d `AnWV `:ۉDaoDE)5zK-5|GLNb(Z6^P_XwL^CVL䊄_0؉ $cg\>,PNѵ ܩ+ GYh4`A4ak]GQs#|^RdN%\y' DX@x]0WM0"Tp7mBP$Ipm+cQ֑;cOZ1}q^fbFY: ć @K[W`y4i f~ھlfH0h}%w'0LvA/UN OmxnC;+BJYl J/] ]d%Qu?;1>3k>xFjLl7,)g'7S_ykO@wy퓏na| lUTig?CkScӻ(p5T鼟jX( N6abr7 ]Hۗ}+*BgXmaf/f6X"|8fd/Mp_7}}Aߺ@JuR.E OH|d#˹/7`aSDyψhN%7 }S ܟ}{AЌ)签gՑ9hp1ϽQw-J;>=v3w޶(ꡚ3b0GszQnNL}GݑšM˖I|P ֞\"x}ȭӛϾwN + &AZv@H+ ݇LEگǐӤW\Ȑ]OmܗU f 4 ${Yf#Ap]/ G# nhHupU^ipB?\ ؋̝Iƛ+kPF \~bR5b|{Mw1ɗ ~g0ĉa%[44/E̍tiD 1]5g^=w6~uG篊MA4|. Gs$`76 uK@|*M3E 5d=>@t2$< E(b  fݖ_pcM,U%=h' 18}g7Y=Z2u _{.Wr'z-D7.ojA~Y-^?%DoO7{0 T eYdwJ&礍ꫧ$-/XzvvvX/Лri%3!\[ \3_CgtC?{FP|g#z_\/)aXX3B"V(KXoz⥯O2"壝SKA KϒNz C'ŝYCAyv<{^p/7MulxP3/Xft`JQQ=Oa. L A#Ȃ,& OE:^bmNNs}֞l75Z,E yz{E`A8 {Ha &KsYSaoZHG[ 6 MPS{)l-o*>6~IKp v9nW7S g ;0/27Zo- >!l_ @>+z't|>Jkܻ('((H( AA@Oy\PN gDE̽KV75aL2C)5ǗMx^ۜh*MpRA,E{ `֯ ʏxyi@k\zJx~B/ʶP)u'>v}76x}<-D]ky=&>X TxzO/ֶb339_ ^TʣğS>qŅ+Dhp.ŧ~W \bP~yKOGdGğO𷂆u;}]4UWs OşQ|5r*Ri 7ov ފ=`M X*LO>赥B].x᯻tVWj~?#C3u~9~/F}z'-j1~=p/zfţ U.QBŰ;]uՇZ\v(lh7%7KzqG|*Ool_o,,-ci[X}Xs\E?*,,+U{.fG3A}L{#7Ŕ>>_)`|LGOcX̣c^.慫5H0%򋠼NTn%A9؋i_۠< t `'6|nɋHe{ +1mE8A}m`$ (xo؟' ^# ;Hs,֘/X{`GOAG!C E^"O?(iihhH͂U*X5*lڤmBDFC?5F/tζ`do[(o+M(?恤e?(`gE1I V]Wlw]nj#`IhjwB4*Zf}vKY`*v<7p9&B| 6銏V l Z 3ǯAF4\w'>fG?Yx S-1c i se"39緘Z t-/^Dulx(4 |Qc Ep\tL dK^(|okw5a&n&p2!m.;2;>/b8C^(xݞʑЁS?漸V)3HlH~)NU \ǟũgO (+bPfd  GG:yL"ML[w):HFZلS ?1 IH,m讖Q$Q7] }LTg[Ѻt/]FN=n Xp(;ίx w20p1˱bȺ_no첻P{b@LT㗄1L([)xۥONu{yhAr0k1},hGv qw..fF@vl`;xQ$X@P+ "pGJPa#%# v^e^+xUkhĘ]L$A(|Y}O kۏ >Ng9wB`Ͻ}ѯCu|)'[[0Ox5JW4@3T="F,ň vrk^{_soє05[sI7`{pϹCF]F:rȗ-k׶rk_vTn^~ad q^!TWx=e`J% ԩG;y5\Ľ,М~dҢa6OYCUGrӳsZֈL&]}iR̭l_=^Z,uLOT@: ]M G0O2 YEUm>G[oLp? ,@a|]bP.*(-jz:/T.C94m\̎帡;;>8s~վ>P܊PBXϓv66iG?w_"A5'~'8^{}YE~ħ^`kٿ˟%+N ~DPn|;q)hi uo#zϢO|1N g Ĺ;:4t:Jfe2 pŜjW2+nyق+4ľ aozh&:q/Q ;`r0P=C\;~Gp-}0X Mw G0} og |`%*CrOΊ\^p; i[~qڵW }xRtw ؑ[W6wx5 @*friAzNhr1`5T;ϵ})S'6b'B>?ՠ,ƌ݈ )GҼijlvcfv&`ks]Fʪc{ΙNNFLNO^-_Sgg,6S Ұ/$g»%E)m&Hն<'[g×Feڧ77rcyv>>"wu乄•b3۽Fߔ4 ×q^ L]ꆞd [b =G)HR,D>hlA+P|Cc.<*jЎ7W ޏ{g[&To3|HVRĵ(%I#E'-=~ʚ(x=˵D[./:K)Vo¦kL>Թ1.xKYF:DρodтIv="odge'/s[ $a;usf,Og~o`XceZ~ѼWu1G>ak6{F '20޶&[g\s4|JWA=_"P^5؟7 3( ;o\kR^{2,A+o(4G>(7 *wn|g5_kI} *ۅQ!" i)g{cV`*=~DL:aib)X,Ȇ*Ѕ F`>{g9b6acN>[^P|d,wYWwyړsO>rVIg6> q4շѵ>d(t4!%m<ұs/0-0c߈Zm,C#) {{9Bͣϣsᨉ}{_ƽxn_#K2tuPMh4ѱTV_- BO*8S EAu"8ƀMغɴ'JVQ8-sG\~bn -mH@N<)8f&I0]o@`?: ~ gˇ`y~n!MۦDuqpbޒxFN}Zg$%ߩғ5G_V>id`ą%g^|3+vf`Ja}|;0[+ ΨyX\RiOn滇ۥNlo  (xo=>gjӃ8n:Ό0X̜Hr8@ĹXryR h8}On ~ovk]= V- ?YRh`d7[5#߇ߧD%\W{jE8"D^#jn{m`nZx{ @b +L'T+{Φ$̱[V%@//fqW,ptmW 14ě!3azN!s=AVjO \LA~mm]^|1c%#,HOӇ9؏r)pw>3>^q90-j:I A7)$`cܳvGK+8_B%lW̚S|{* [!vKfdA9M{9BԚa^wweB+<o{66nOzZOq|}#iO/bhױ0u @AnۃƂ96 A?YKfEti&s S&}rM$`]9!"ȧ2 ax=KBuϩ P8!6tăq^5.oF܇w ,V*O#?k6> Px&w|7Rn'~7>=e,V&1V񾪁<_7w[0-ufާ9xش0A7GP_/-&َB=}hOYy0oF_s`yExZfm==D^+7#i7+D>a?ɺ,oav-VQap.R=|\MʮyVo,.0D@!\=~Sÿ艌̘n_/\ K7B[(2ev Mk[R}M9>.5{^8eFB##y羔5]ȿ>G z#¢\umfjڪgb߄Yd-V_(Im$ݬЕk;'8{?lN0%hO }^LPH}Fn2.zv۾C:o~;Ys/@<3W}\X.bkdqFe/cFPۣn~:$]!9&dvȺU%AO.G>+ܵMlCӔK`gv;B.-dc-]ҁdn ]JͷC_MЮtrZɄoӺ@^#y=1F=J:_`o1'# @:h;X,u$Mc%3;nA`˪Aýz ^G :} ;i m_Oiޚ.NKm ]519*{`*MD=ib؜&^{g`_sH6wiOC"iYj߼oidN m?Wܓޑ! yl;[eDo^jw K9r-1.e5Dɐx|NV[ZEލ{Og1'􅏊GoZ㌻-{]3Rڱe|斩"]?=2ɕ2wQƤQs6b: _:Pgů3s%rbJ Ab`eZ4cV_ kZN _/[ W aҚfӗ*uEy6`RWAP" Aذ""("GEEc)*E{݅]u=9vNI2)O$OvT1!:|#9E=|\ 78E</4v*_0=xG !\#s1.qs]4wkICwkw- \<į/];lPV@H `{Sk~r;&{Z/RE "|;и1[ ~ 73Øz{c!Ϙ2M=@,2<L\p~ϸ̼|S4-s8+uAC3-f_$Яӹ셁0B5fIz rSf)gt܂pVxH2x]cGzgf*) ZTxȘn֢"*=Ѐδ$p h@~ sC *A &xW41+ G;9Qɹ^ۺ_`ˤ@7 <»:|\lo|kR$OSI{|h%a/ztu؏p9-c,͢kĢ҈Y\4$v:Nã,"A>Fg ()~ G {{reXV]ŖgCג~{"x,/Eǎ]G '@rvXz ? :C:n& FRDw!^r%je|oeEwmHG #gm`v2v޿ :W30vP#V _> G~:Nf(>;?p?n j{`h';Wn,j@~TN'.hCuv})ڀ&Fl\<eS'eIG \EJ0Z-/*O繹5ֺ I/~*KFf]{6K ]γw-a;#+c{nCoϽ`_⻋i|=;NIxz>wx؝@^O(PܽZ]tWVx)F+,1/m2T qWAK5= %ّ`s̼}sJ}HAgV񆯡ti]¯o-h['BbsT ХA;kGf)v@ y[|gkk0̬_&QS?(2'b0n@͌ W;uYO^|~a-j_]ι7pŷZY`Ȫ8Y깤;읅.Y@J|47;:[AܖI٨t?x10Y@{rW7VA X&/3aP{Tʜ@U`L,ʻ5Ka0Az&jgT >pdZ 4W8Pj l=`w5m\ڷƍ]x܋J'ILkҝr ˉ'0eЏNW  alP(+SUWq!zP0 {f(v[%K3ոZ 9 7>كuN~?q|OQΡTﴦqo9TlgT$A@>y R%!|񚱵ac" @}l9%uZ 5}{4c[OPZqh{2 :pAJ ď+uN3L&Kss9bgqa@vk'qV5?1-e@'L*D{ l(|q*fZn}_ͷOLg^?g>cmofմ͏.|kϜ7a9^U J/%,FB%d/xB! Szf\SyU+ t4~](hA^nV)2,W*E'=v=Oe=w.qj Xγc¯^v;ps(D;8RSKñ=Sְgž$!zl-yc3Q!f{Ryc 5 FzBαl\%' !^ а{;uoc+3 p(8 B13̽ȯ],}qf'<ߧ~~.#@эs@t5ӷg0i`@I67]CM<}?m>{F32¹RE=gilB~sଝׯ$?]SkӔ=?MߒiT|s:eObϋ(=n898o Њ3mma^ @LH@ D g/[̿HB90 zfaC`B2Y,| @|||grRQ'~fn;B`m07^@V3N<^fW)2 %c.-w($[Agbm"Q3>7pe%ރ@l툶pܓ{}&.XxM0){Q2)~X0tf7s4hK~@Lj% a!Ю ,-:BR$-$~ТgG_GAh&frfϿb<=[MowyuJJ?,JC'.1" e^cҾ ^˽g/hEMYCp28M*JY,@߾, :?u]{9.?|M>"$}qNM}"\WeGBi<txr3وR9.[ssZWK^/UOc(nVxn@؟90?(wwK Qx@pmwp<bEggx`,g oce[GE705aXWog"4/ eNq*O3-:νQSp&O}( v0!Y1RYUd͑f3KĄZufG.QygILyPZɏ cK[wDU:1~@3a8e S[߱}KAw/UuO4PXG^k4_=x Bnf Sr0 #chI#H^ I 0r#,Ic|ƺn]0+-'gw0,,زaT4gu2b{6vCB굷 P /HF`clʗxvFcO' CɯY4)#?~FtKj#l@+Ĉ `eoFH<6{s^'UE`eX tJyg};isr-T)rk( 9 UXi[%FWsMc,P1Ń pI؞pSéW$د>-ݖ镸3)ABŽd_Iy1 @-N w<wo;175ލlVORF-Uvrx AZ |I[y?g=N y^*iAu7]S@Z] ;D7JCe.lzEXTdM>nS;u=r-SYI9~{`E'm7v?c.'hvP[6V|UgҨ\Zz2R>GSM?,_Կ\cOgϕ ZWI .Iφqd)|/ԮuHF'ҷ(B 2XoHX }uwp@9)f,&V ޴GZ_@ұ |_eUv7=.UMRk)z|M|u!URK?(?gxw@< CdX7p)?2PL >ZPnl_oHAg fsYO82ƒa1Υ>}9F=CK-Pᔯp 9^|TRYqLy#)'W'}"|J!]ܱC7%ÿLKݜ: f{@p Dο L y\0a0}"=@~ Do1C:%o w.1 Upz7M9w%$4pD ~Ou8&4ϞN4$<ƄO&T+(M@;m&\+ޭἁR;3zg6%#7SHvlAi5Qo ;yL;%ʁѪM5\x@z@=}.L)@)_0tgo؝s w";ѷt!j XlH_C^k?dc$۰[=?tnѕ0=ȞmiA }q\S9 dUkyF%"s;¾Ww{,b]2@xs<Ż / ䷏{W NxGo JŴG6{]j-#[InL~C݂m >o4,n5祃 O6n€;3Ȯ |ʝw#cLז%NBf k_(")zJЋI+@xv?OC<4|H=|7զ^&Y7#7%j/: ݻFo-Bi. s+-4E|ұ2|?[t/ON6ʳId9ml@gh;%mU1O@vǩ[$"@R^%cWA/!,/:醙:/ aKC‘<%@ 8K@%G3qRDz|㞏/1q5"0H޶ʫ1|1󫟖^ CUX^ &nGC(3l؇a@~K[ռ)q){ ڬȩH7V}72ߔ# ),ok7VK[ {lx{ Ed0=C` o/p8&GxmL У9in`b|tD_tq1)^? zupk#~و,)P:9J^&P-T0-܏tER`Ψz(*h7$>%mq_=4U ϥo(#'0ы}|r5u_;_(-42ǙuSx*ſh&! LX'; [h"1XO_yW 5R W |g&y'Rg1(0`:d4[5ȯw<1<ރȋ[=¹BފvgɁM[#0U[{敜;O{s!Q~9Z`\( o'㊢)s|/36&aU0(0Џ̢[ cV*F3A8=k9Jpر-d)x=cFbU4RU+;@?%k>&tK N1WYl@p.h_- V&`u.#sh@8y!3`ڭ)C(~3gl?45{f SM ;P >O31Vlx.rF`SĐ8Wu]豤zQ,Oژx hb;FYf 03kF̑nM]Zr4G1Zqse?D{ ޯHIX=>E& =E55j |*CC~6bDw[$;-6. G;x3$c=uc^ uʀ3l|y,'܊sSR9}c4d|P݌懟Z)&5]0N™?${27}ñ+qʬn؞fu^zcϸŜlwk̀9[ |Қ cD kB/6XaC/Fxփ~VBOZ0vP@9pVvpb.cjݗ~(_c_K3άcIE椷Kj>$0 :]ϙlPpɘy?kqG1[3XpƼʁ 4 ӺƧ:%-VZL4Mj,191ޜ~x 3ֶ4n JcAɿdn)g~nʞѤ1E0z|Itzūt~Ʀq' yKpEܟq 0ϰZoﻠE Kl F|ϱu=uz+XG7*H`@ oU.\vit?I: u~%ghSpf0q6BiE {?kL`۶~U`LlfETg=ڣ,&?_ %pv@ xo{, K:2/uSx-!6K LJuwJ6ܷH^`b$կ ۶h7 TV!pvFͮ0n<f@0!}W[Y:4EVˁcneaMb+'$6W2}9weюܕ ;vønIrzBRaxWa4:Ï߅,D4Ojj==-Kk;0 0Pm}BDgwfk및l㟍_301B?6C^붃Ct?kY? XQ*҅ h/'ӵ%峈zT(=tMޖYj07hs*.9~`VrhXvP¨2]^"JKjjWALH, 7NXsgf#䪒=/TL3Rhɥ~{qf?ESģ ֐\J3 Ѭl2 ;["teB!mBgd? aΩgpaQ:8VG c{X(M,|\۬`ցu`7'Fuhpwj<%fqץ9"(8I(M=G 3-g/Xc ?Z&-Y1-"6#Ε(IZIzYs'n̫hOv:y7, Q$~!!G=w_M}&~_Ha?;;za?s'B/f=G?׀2Z \cx9%"+^_trr*!K¿=jbRFM F|[@ wUk# ;G &51Z^3˻x? #T3~S[6MhYLsCϚ]лoh.d=b%w (1K(<| xwK|rX|j7ZP$2w+2}Np"xmIWց7' 2ہSOuܛMF)A:a?fi6j >y`#o7V26Y;39]82е$ ^V3v'N 3U 3M~Ul|Nنl-ABmO$}\e, g\QY(_{7\Je$؍7 @IDAT%ipLa^Zk1b%ؔ8lRyw:0R/hk)3w"5 G.=>Gl$5aW7ټ{@4g &<Whsl߷btg@OImѡ\n"@3‡oC;5kURΨ2e go%b.DQ<] vu~  sPZnfNy{B/f#Vꨎ5<ao0,CU,5Ytvt9ЮioFqgK>΢UӮ_-<ܜxω!3 L?ܗXN& s_u--v\$ X7G7 'dI?}w^tq3@0Og+Ri?#M*M{w2/Fݕ}GN= o ҳ跮lIq@{H0JN=e%d4~N=ģh^ fP)oPr!!) qÉsP"=B}]u4+ů7`{  !&r%D}%~4fƉlXTު,Yr)y6h`]{Kc6n"La#F{MpuRw8ecMK,]`(Fl.1;U5׫vxw1J\=ڏf,3I}RVMfg4Y[C}{zJvX ~-Nj3+R>dI<笊͙Mے7,vɒf\UlFqcȳ Y3Sg| ryf3TwהF0"U$lJ!dnz` _{C=]OBk6n$$:$N_KuEGb$riH$ϝ >pi䊭u7CV%)χ=[1vςKrFY_閾%cwFB"c,TuXy0 _FtA?rM`7^O|?i}ďG;'P>"JrD%n+$F$~mDW8@}E;o' OC&"zAi^o?s/v 0^* Oru< u8WRW3RXZ ޾ O.c&ķE}-(L`&:bud LO4BrӿroYɚ0iE DcՄa4]_"@0p_..jV"GK= tQ0?ݍ? y} (|"0n+&kݥ0n 1"_`D؋*qK#Lf`oW މ(jnE10 OrZzJ됉oe ou*u*`S;&B% My1+w庵`Y["UM8dhw@1l8@Q1,ΜDEʕeʇn-(K{߉[V+R)F ,8/gj n ؀DkӮL$i(1 #ˢkK=/ϖ`.λHǶcz.!ړ3ZᏎq| ;j/q|COtLL}5>3L2x@*mBmkU/bb4=;(N\v+jm-_sخQn 'ʭH=$oy K {UO|?n,ڍXd?3gw<,IϽ@~oJ| q#F\m]9Ǽ|og~i>Kkh^ÐFP4wKS@6%&*N{$V5) OE/eZt_i)^ LyYR{_`%w"K0Bwo#BV= |Wnd 3=O(j?#~[r>:N؛:<:Y1ցJ9O(yC?DoӮt B;}%|쳇j !Hi;Q]è>^; Q`a@ꜴuUiqOJ7ܥ*B2H?sQԓ}o/GҷC cOLc^و 4-2r\<^VT~/155{(#g HoHn^-sR`K@}?#W/xd9g@,\L"aTMR^p ϟ(ƥ&(}4|}>Ƨ1O0 2Qь7L(lis[N` f,Z6 E$%wy{Am`ȟ˘93MD=g@O~-ڙghi,_Ip 8sMS*# 4{y_FY RKW<9݈r~K{3 iɘٖ\]$T03Vt9].Xl`'65.xhO7>a7Ls :0iKw`P4];Cfj8?fMl]Qd&GCO{}@? |ns@C5RƠqƷ_7t/ ?Q#"8xeRxutf| zyMo\ʼr< ̿Աe#?s``1Fk7HWui'/mDQ gK @`tli OF~Ĭ`[wa7&OnN= B wh3S .ت6^lB'u GqZ) 'ޗ8HAq\!7\pQ2ALwo۾CA]!пW %iWѹz&б G{|T3L] {ܥlT F+? WY )*T̔ CXzB|L'>|tOt]ucW\}3@~np )O/|g>&>'Y63 fdX{_\ۮl>yƛzu?),@WQt B|W 2%K@9.W.a)oXyF\sB!mнs୔'ƈ?=3] g (A߱˕CI mM_9Ԑ|>drf Jo 1ZGK=(ĨnͤԮ@kWJR7q 0|Yƿ1Bׄ X0RP]PrXZslud6 D8=c7e]2y?Aa/Q0ALӊ%oG4;vH\Av9z { Sf2%j']P =ឰ-^ͤE+O!7v4FM`4Xy?wmùK|O` upVЖ`R^ֳ[ ߋ؃Īebw? L_~+OBe& Ɲ|Qz#`EX;4N]]!p#J^<$>A+`[jfu4$d@C64XdJcJƽo_vf1P xퟌ/u ܬT*wbjl8 :BDn71[ e]M_ ^A: Re0rʡa?Ҵ^w |.L\x jgfb|P(lra D5zz{B*֊A} MORly;x4|5ţg!s0K 7~/ I":gH3C:COɃr=!?P~Tx<;pgg˭/P +#~3txdo _ zRsĮ`,/ۤUKa~E8SKѓc QvdJt.zc=߱|Ig1Z$M< -2gK @>G5_|R>1( ɔt/~9/yfi(R@!y+`@3Gg>Z맱k3c&^}ёq 4F;0B@ǧj o(}aV\ |G@`{KG @mK,GY7[]BmH9&E`Īc'nqSCu['W=1̿SOeR&8K[]d6߹\2e:h(z@/Pr?rG:-_ŝH‹'p;s ^NPW0:[ๅ@8~4#r D#MvvN,^71|3UMgo* +,NCw!I'3` 1"pAS][3h [+xA%P[gq6^ϧG &|u0禇2 ?So|#څqݾL&#pXpf ݥW }suՅ-{b'E<YYx58W?x]}ЮV=_>|&|(.hRԣ$J]?^}{˙w3SnVFS Q{@9p-14e\uOd +%V {P @Ope?t.+<4e(-B8lW++ (pIꎆ9.B`&|k L h^dSo НtNN̏weW ## 0>˝Hqz 7 { .gx <5;gEv-"75ځמ6A` $"sjTuM.wPM, Y A2Ow%(Z];G 7@~廗8{T5-"m'õa8p 3iI t o: P(>G٢9qp$D2\X)Vvfg=nLʲ_wIJF)g\*Ro5>LlM}Kqt}|5j̩lom=%۱=#xȅ΁mVŌ0 6x$SSOSnR9S3l1pO x.r !Aܴn/w8o% +AR""pƦz YQxxN I9U?, {i_+0wX":p7>oJh+kdoyjYNJ~۟51X]hƯ*YYsy~[D6:(QTPRŽ+ig>07:mܾ=.|r[FΕZ@i е>.(Mh_6Y[@ɾeNl+?HEY"1O/fmHzq0=Sl'OuܗB orC/+HCr u@7#~ P%u:z!nð1` L 7-_VߋyX;~} W)|0c<ފ u6pa yCRѴ3n%bͥl@%];(%N x ?*B%>Ş֫䳾/XT"I0QƱ7_lEXsNݙ1(P.ţ[i۳@/ \kŖL!PO'O 6v:F }'Qvv@mga2 *մ/xفz F;5#>J5;l`8n"] (38Kڀ~MG<d@ cc"fO^ˁd+!?߲z LF1֧"V|JQ/@P_w_7a>t` {ةo1d!-^E5Xƀdv޴B?m=c'k~  jo?0&:aadMzo7ZW"US~<8@_L n{@o乖JH#4=Apprd/å#qz,مg6g\ٌY},PCw@^¼:Tq^>6B@ҡ3Nx[l+w4k^_[]&j@Ȫŝ0oJ]tY!v#94sezk}J} .ƿǽ5P{_5NGSN:!s)[4Bjkڝft+XB{v" +F4;B$Fb=:#>!|P Ӆqׅw V B{^=qK?6 v(<@+X[:7oiwuE8_c_i# Od&C0N)0{\ cU~YBx {ޓ{zP:pfXz%y@;19jj1 G+W[q;u+~OA&˒hk++FۉV\nY׻~\+[),wėG9\!3~Th*w-x]pԸڹfSKW<8+7b뀵̹T"b ,b1ZZ>xsF.$9A?\0JG}qrU'^ P}C:[لCE;[ {ŗա-ov kr7Mn{s+PzjzϚA0K*vm߆w:s"\u˔SqYL3H(-+4g #u:&*m5beސ o֓3S8&ܨּ?;9NbEBm74F@F` $@RI0~Hg@_'/ zA>.ahkϕwx=u#_}b-7ϱ>ъT:#p?-) }Ҵ& 32L@0ON)Jd)MsV |@c`j&>7Y5lpЈeD0b'Gf b qgCY׾-M)*B"ОZW*7J RdVIde93gΜwvA,9G{?ESf M?{Yʛ΀<}́x.L'0ʭ7`5%9NjҔ)oV=IHcWpG+2ʩ,՗e,SLm| g$Jg<2wNvFUޜBxT!^wJ>JՂţ{#[N}*'/>9T֥Svw6yۋ.4OreNc7P*)o"ҕJb^6lvv8=>L =TALVV6ɗ/|B`Gq9h2{JWc15NϚM(%fEKNo^Ivym`CAa``2ܩY+|aǂtTo 2bVKɞdNdAYbRJ{(O< c_*~D㢼; ]}s"r_xE;/AF}&Y~ /Up4)-lF/K/ԾHfCk=״ͨ$tDE˗}ͼ.$ Bjb-B~/q8ML *ńawA0&t| !xOP`XJA.q*Ȓ]ޚƸR1N!|_O<"]2i\A0t ks% *#"#ٌg AJ4QvJPݜ:Bf̆l{G6 _^p]{/ d6Gd{S_8MU u}uƣ=Q&+=N쫡g9z0@t`y{Uf,u>?TOҘz<2'~a ,۵JfEOKXAt؎ۿb`5;.[Ç8^UH赘1:CZ|$֦M5J^1U}hsBU(`^mq~({} j4)eʜKyug2m֡{MWLڠm߻xJnZ598ݔrW~ EmDQ(_7p<[R6MX~U}vA@(i $q[82Zz^^KvSn)usK'/0c;(IƊul"sE)G6~ӗN28R~yKv/@vg AJr| izv y\p[M`#!l>θ~VRɠ.09|"2)=`2sOAB ^#П<$``UN]Q{Gjh#`AU[W,ۚw]%gb&=Y؏L'Zp©RHG{}w[*Uy{i'/ z w/p_H#$5WԮ|F=!%7O`22C лMtuJ\CܽG-sqKMSid[WpyZ0W38hMWN<]]ks3HΛD>m~i>}"E:\]PÐWkRU8R(V3/5&~Ŵ1c1-OF,hYO/ g/%H ~ƻF- >P GpV!uwv2!I:qkqG3L~dUQ^M6ܲ5ªf^@l} C-y 9N?P5_4)zGxOx(uUP:咣?=һ e秙Au?}tIk@i?"\)0 $:<$:~|&!8u ヘeUV}d,dk݅;-x .-hD[/eFCjU_OJ Hh~r$?xt9wS_P//}:.s(ejqb|wC]v 7ET +yל.I:}⑅:smž8)CXLvJ OK+41vf@t E:?y4: F;ɞ'WZU^snټ@n)AfAw ݕ޷]`80)PdO=O }id u [#{ 38ޕG| K|{9ϝ]Ȓ8,h&ӌ4Y63( Ak7r_X .CjKANxV}|IvHɐ/Kմ,Scr}ߍ}GoK~dH4z`hZA|OL'B};p=?dm›MZwQ֥\$5P@yi  J}0Tu)1hO1Ÿ,\}L)|Srqu@D#u 3 ܟV[yY} ?${Sb"?O IoEŚ[-Ɲ^ВK]yڙ4yH\62@6d +d$®]C軡娇Mȸ&ܦk/+߸@IDAT;8̪-3@?틹X,J0r N}"HHa_V-3o{"y&^x/ፅl0<3]zW"A$!M"w[qdߍL #?GbG' ^-s#HaODtZ\C~Q-H0<(pW#ZOEF׳jI@CJeKC7X*[N 9ZoO\RcvNAr'S>m |1rn(d(&}/Pч PaVXRsѵSlf|tw[UkvZdE =$k ȥ[2aI%7-=܃\v(J}j?-yޛ]y&oB\DK3AR'rdZOcGAP \/.|"#\pAD_ NA)-xO]A+\zHheFLwia{O>Z-LE.J|w?gy]+J}E̺H+̷{4[eEs;cxZZ1^%/(-)zV}p&V% nU#ePmRZ~AUI|AyxaU.mŕO)qUE\pb}0#۸|~9ړg+}:̪1)(>φ\kDž˛@>}5lT#l1O1W7ѭ}'Βi>dPsI#A<û:i!%g%Pƭ&:JGcogr"L!!ڈk]u.) ( ?"i<ow;k`=crQ!G[=*{L /I $"2ws8q6Ϸ\f*]a4 |Cs6z?jK]N2i*4X }a98r)<,qxB1Y KPd}oZjS@ggy6L^{[=>K /#ݡ.(Ch~)Y􃉃gѲr?T2Rzzo- /-/N|/f>E tgA X`^r[;W6 [4}Tjڦs*JKǟG\QJHNeggoRk3>>17礵09m/`nsw. Aŭ/o]Cg~VyO3l{ >S!<@P.( g]P\P0^&( @]-ڙz*AHu7c:a]-CIoIŒEisxSJeNJ#>\W 6ׇ-e?Q@[Qe˥F/uYGU_40 ^6٠c's-x(sYC.h{5ݘwjY{snxbR.U؍tL/a;ny=e-OXu1B9? 6R}2A}©yiē27LP| -̝'ebrRSg)[cv1y- ߇-6t&|ّқi 3:IqBfGᩳ>qԃ s |H܇>CH?Kk#zfJg#/"_+믍& ^O`~)fg֖$+혜}/zѵ!m->əD'_tp] e)n7wCYzao ze`q +u4"_I1Ēw`_>'~C91 %;ÿN'?pT즊.#|_ }}j`9g מHz]PNGۄar ՅT=7e*hG 36t5\UruµГn`* =|{@/ *5"AsaE&`'Vu.l@^xw3`* /c z\R ĉ9ؗyXPIw!lLklOt Lv/_pTVI( ݝ`4%mm2\an(~ zPѳ ]`6oɈ-ZȼYC{nFc^ FLj$~3a<+FD6:xn5$N\c΄$zpUTG)J^'7: nm#`,m}>A;Yxu{/Z=/$a3sp.%9~st;:]OZYt-K!`Fu\O՛gIM؅P-" }&T&IG3T &@WB]-N<yqbK: %SAP&Ȉ/ {^$=1e84IRosGjƔj;/AS}~/bixeWϚZ>-16@8PҫJL95gYO[CLj'0~T`~U8#~J&[T\-Pe øbE^GSϔsj7}70^וW*{{ ␷B DžB;rc.žHCA?s0l5kr,"? 8m:|ף̚r/*P`r? YH< {TX@Gc?0 7x"lk@vxD$bL$I "7W?8) 011=2(O{c* '=I~C Z;籡0* vH']pkiH9>DU]8OXWh"G-#~9?ȜlRVj_p P1'Jh7܆}iلȹARECa'܂ڠ6T^|?*F6ߘ3RjD6Fk~r, HG #N U`$?i†m@E~D ?Ż *A@`32B*F>0{0}ɵ$Lpn;bJAKvA<".sbwfogżq=TZDFE> ;DUIJ]?sg$Fy@ +1tE#N "I_0v~#=6W7Ph۝1WAyzebA.0Tjp{3Dtvׯ+MW2x2Y!f'Axg  x>c>P`Z̔Gâk0ro1D kx`#4:Lyxly 7?\_"}RBR]-E:}t3V[=/_d[r: AǬʙm 5n *\3{>Š:ECE۳~ԽZ1=\0*p¬}žHee ySه>}xE]$$fwH*`茳зvKA1H6 W Ng?r wP*8N=)afZ*(oz=}sx[0O}C?SqD{=wщ gfTUcs:dhѰSnu]#0G .aC@yZpS(3`鋣OP/CEtX#K[GIon{d Wth<ЎI0q`邡 z. 0{>Td^V a@ ПT_w`!$6四YUY]$i P7@CH0\A}}W  ڊt`B|1vK?{N6k}҉?Fq/7Ω @`L'GT@~Zp7m뵺߃_*8<&>qsz!n`* Zub=-@/x \'k#[SX281磍^k:˘\_NQAIp:p?~wsU6b&QsyW}x_|&GTI| B_py y*_&ϭw~I-l;7ۭN@%݂T+ƙD" R@Xw31}sK3>Ft{H`٥+] '[JP?c Y|A!BGs׏+RRH\a2f_MD{)yi{՘ Յhdx/)hY5 "@ܩܑ$| IH:."`⬓D57`@FR$8*2V|W quMt'o0CsF`찆?W&vpv$gd2꧍;Ї735j6\ AT}_OP =*&1fݮ #cSۍ̍jFV.(d sq;%(D23y "å $撂Y I}]Atp9S6?(3&vwu/,wЅRKpu:SPz#?zԋKo- p9غ#<>_ :mX1bnj~B%?֡!iy^Proץ{hW28h_3 2C᤾+7' p0. M@;E6wsibeXu"˘ɭ4=`uG;7.,t:z Џ <ʡ/֎Pqg{s}'K#}ب*2X$ )SM3KʡkoEǘ ^Ӛ}vߗ%TK[&3ISs*Vjl `gޭ.WN%<`L` V~ZEIE4NVkAO1u"yy'Š*xn4as|DIy}WKsWTNm/xrbzlzd:،3θ ٜAg>b{#'O\]otí$zTq7-==/hۓث\;d z.C9a8EE,c/ *ʂz`訞 mkE>|X-}*!*-_:_'l6db_j9 Ϗ?5SC2TѪyZɥZZ,,0~C ܤcpgfEMo~ =!jUy9Ul/Ï@1DV)P&.vj]9N^8<+m:(-',45W`g)lkQeس36Z(O> PX_NY(|;4ܗS@`Gn`Ub{~zno">/ÃyYNeԦ(j`u^+6Y\jy Ғ0DAAMQ8(xG J*w7R0T Gs4ѕ`!#7 .AD [@X,i'{fuB=:CI2vm>.c-z3ԠH:N;V ,po; -1 |z|w;C'C4AxSzx  'I- &>FaܸX3w8SrO)VC./GͻV.k6: Z=oW~6lS5r3HK.Ya<ÉPn\zmfϜ^G.c7BL7Τ<8/rU4/TLEʡØ` Kr =Pms~@`.Tdg'_ˍ {jdr]\n= -L 3 u ͅp# bOk^zw0@cjO!]Ң<*#?N,c,GѰL{XbHQ;5r_ceK N̷V|(@O:U0iy`*9 :;Mqx/LJpWd$R~ip)rNQnblǰ 0[P@tΊZVK \%BtW&1+;))ƃZӵ% ]H< Q0"RcS%iw2*%8AżGذ[P(@CnTPmy~ a0ﲾ`0-Jt1w(NN"y(>Wn`'a&Frg8-wOt*hnTmޓbf309$iO cAR xz"xǧun7ӦM7qٳ1]zɻ"u%xtsg\Z©hxw@xY!$亴ݝ ml]ͫN=NA}!_\a>rf  A|O>?1D?t*˙-ZpN%NP܁hC>L.-wHpNl <ؾ ߽̭?g[ok,|c?e&ϟ:3EбP0q0lߕ(0  bz8`ΰ~Egxinsss*pԟ7 a/aj*}Y'Oh҈?P=O̙tu@yp +`#{N7&{el3p@@Z!8H`̍dk=ea+}2HQo 'orne8B Xr9:ZvGJ; uf &?*BQ92E6mۮB{m3Jii{{6=ӱ#%}9ߓ1:GD`jtv_6[_Č.*K,لw(~^Tɫ>!W)ye* y(eU[lt#Pߪ0ZFтx%>f$skO$m аŷJ;9ɏ2Ҡ ȷW֋vCA>^}YOG|`*!Gi*zzH; ?fsKbAo t w'G.zpT~'>d`҉5~=a\1Nx/IPy@.% k 7cl~!2lךY/sgGAm~^q ҩDۂr""{vtMm>#X3gOgD%d?.W&c@rv?so5BEUO$o>l ֺ53JdYZl@ŪsyqE=TpU>"<=G~LM {|gEZ+39%R&e UmUgy]$1{["RdF*65qҤ?2 8[ċVG }`ΨN=9nM' cNǧOGpYjBT*juɶ[,$_-}d7"EװhFꚓ[Hu927yқ=i<(;yKxcAYX,p<o@v[ít)R9eCtўyǛ"|/SCQ 2; ~F^nN)Upi$]OڼO W\W߃ެ Ap5>`#(u:G?<;é2jv[ˤg}eˆ!(:h @pXc< TJ!7̟K+"F)3D%)) Ӌkx3BA|}(w`ϮmV#{,VYS4׭œ?YQ=z sXvh0$0(r w=m[uj yo >87R/ 6l`#<гUFZcWпB땼4%|p -Z#? GE4ı>jۍ =M ɝ%1z8u>Yŏ}Jn6[lw;Aa'Da¿ "S?S6 _*p7XCC1<]$A1G_]+#uyq/ҸFE7ӿʹjl*y;E6 (t-*o>1jy#3fwf(C39ԣK> tfs`Q:q1xKݏfF==aWͥ3hȌ+LMǤo/voߛ2Y]x eik;Hr|?‹O,f7/D(HYh7|* d_Øm`{;*HWNl>tHfeUGVD8 1oq*վWBp6b9:=Nx/f.#X8f|4B)?;N]TRKCT^=g'GjE;7gvrsn:עP>Axz|+<=TG9MNJP['0g0#v!T8ny#cߘYS>;ױfvqpFa`h^!s(mtYpSAEnͷ?4Z:^ x8}=w9Ř [g7Bx4FUvX)ޟjvx~wgo-S=zX ܙ B=W'ȗ>{̓UcYڤ9#܆n(U /]xo |w~`3ͼT1ˏ;JP2wЃ$-TD3 >XIR Â[}. 58S\ I9Eߪ0>6}᫰x\]-;E4q$o@&r:u9څ03%؇[S ;n-MqyA.R :G!%cA`@} 1T?#{sIe@+ .@5*mV~* rkXmuwOK>k]j/t!R%(Z񅏱u ?$tֳq@f*>ve?q~G^WSp?wgf;c=Vy[\,BL>hG8wa,tV'՘qÞ/h =.0?Iux [lg%Pȃ1#f)݆-rc#"<Y&锡O||Z2F`>]d{*` {cdU1m`]}` %/ÍFaI%:ظ Nyy!6ac%;gwMnfឥ%0 Z4˨OdyO]*%iVw $vq`ffG# A؇=ʠ? w c5#2Q:}{(V%:E*4TY>\/殓~}m|> R}[K_\C4ƁE3Ok|_ &y[xs.×d_`Ցup7 y  곘 5hpCo/>ph`wnD~ܛͧkwfXA].ݏ?{Z;|س+l}y/فp* *TrE㰋(?z OT[ˆC^=a͎Gb0=s93lrh'ǮT>T( 2|o4ms~;zʃ xdxInK+L{[z%:~Lă+}x̺;oY"}" yIp;o%)!(=Ek)!pྉp9]$j3Z1׆K*p:<72yy:1(K D,c?OK p!TFO Y$QƙqkK[2z:`.zP,.}hvBiSܧ+`n;yc2^ХmbO قQT.]bȽi;: s(tF0* 0/1#C YA85=3vሗ󋬷1OxS8!r߷L8eqOFF@..N{ _=,'h'nnODµ߄0d\; mP|n-,^ODE_O5u4/^lʿ/Npv'oGz\vJvcZOZ`$i6z.k ny~g?S3UTEs^<sԈP n !C k=ܑ $p{ܓ` "/ܮ`.N%Z/btwN!jT\U?+($J",S bvd>Z̔g9[*̞{1^'x{p(H?IwVaI% ׌Aڡ)\]E3Ʒ $|+ ?'y?@\*`_M9&ޛTuy}rC2/nqqWϥ`H~x8>,_j_CC3(^9敬1}a{gO޶$z8{s!3> 5Ú"('MO F ZJ f% Nܞ{CO%˕$FR~ k]|]7$Zťuڝr .Rx*n5 IϦT/"vMҗ?5g_M<" ,NGh ( [3In 3#Hף.&?$&ThU#nF0Nc︢b A^q'5&rgh|V˓*Bw*~11ѿ1"Q&0?An@t=b*=)wؑݔsuйѹ2NyF;}1/N98<`Α>TaTpsoT#߹<6ND!6 Mm$BǏiY`^'s;վۦ7p|ѳ]S0(޷}fx_  ŧ~/HȞIۧ'.=/[uԒ )S=;γ:]"k F(&Xq`z1!?yW  M"mAK.:j \d+#[;܍ǩ#ª@ %jӣQ]W$q?Mgj**ktb ėZXQgܔ} ċյ{>\SBǺv'2@-n^J{@8C9̏ 9f["E/MQ|t On;e2P5؍8d@juѱ؀4F* {G=k]AAygq cU'q o6|hڥ񞥛'.ˣ:YK$GM/55s X2a7-/̰W]\5@IDATT,=Do_+'U'Ko5s9nde"f.rJ(ݏS$҉{T'AC*)q`W)fNuQ/g斫*\H|'gvoﱎ,,kmHs>xRZ.T*wۺ璑SO6>v6t8m'vʸp2B/yI%bVd>z"S=mv3͝.9r65?~ъx>9$~"Qn*G0A||ǛCwE"3,F@Ɂ'T'v~K=xm&ocD1=e_b"Ԫbώ&5]yBx5sH^^ pÏMQO{Xz ੘C6-TOyŖTWX |Ro/0ot4A2Qp`q~ )? a l\Y7̅!@7;ql ϔ𑏑|q?A!x * C[S!d!3M-*qtv;ո)@T qT A CyL n"veH0Uf_s Yai4=ڑ2|qI -h7(9vq!,G 5BI;ՊyVpJ^::*XBn!ȯĉh[wG?A|kwd﬒H'O/+RݺB|9͞hEMEJnw>&-&?~j4,`{H/8$p 2wr*S0w'q$﷖1p1$D@cӫG 9\ fI L"svpZ\f]>y8s8jkn|k#9L:a^Ҭb6FUI>/{7a>EEMkU&=^:jgUow{>%;ŻS, 6*F , k؇"Mf3szܨ=y/$0w_id􇦿2 g5|k*]WU_w.W:˸q˲Oqx. dk _U1`x5AA:ł_Ąng׽1( v˺'*jdm bK78E z?[o `;g}2%Sd=B@:`R2_H{m2%O.%UmΪ.PQ)bpIJUx,Ux͊LɕśXtrv%/FޘLrwe:H X# 6\ #8QԇGУu$j _G|Dud52@N>pd'S3zQVВHY=6( 14T׈:s7-`Nn:0<ѦnkrMl2[;loyݚ[Ȧ_ۋ#\2ˮg ~WK׭ך^= yޖ^'gذGs6 PoxJ7g_ff8gxg䚫\"R33/b#}O?g vx%Ѓ1gw]$z׌-}]yWUl}Srzoi"Q,] *^ņE(*vbTTRP&Uz ogoFrz;?Ȝ=3{f5k̬ ZǪ091.diCh/OVXx/2Xױ%s :ut@S2rx1l1pgpI~_mG ~ ;S 4?Q@z ^ ѻ:Xee>U7po/ >$s!}&ln>TBSץP}r4chRNT.ˆ|$Ћ =䬉{= p%\L<]޳"3wyrZFje%tA?yE. a ;'H@fn . }֝Q*5Ua:8%]\3*'0*Ơn'Wq?,Tp_=aM/źEt$ֈE=->w.,K `/+Z"߉,k(sV/>3|O~b-q׀ p '4^/y !ITӒT7}Zњ!)nÃ@/rGBÞI()X} ೺ P3:C xonk/ s.bn/EL9ܳ `JQTB&JJG;o, GEB|ԛ k^Ys(? :Mmm*e!_bOyNz&h__r0g}=A=oyoE=;l8K'7dSSwNsh ;]ۨ|vD\&LdO8]=t /?nsa*]`*t0wþ7Xɹj :$j${$lJr4*RCFpɌ@%{?։)5.D57͵_@Ǖ;q_$gnKmq'Iȏw=/ f/kTQ]lNڌLM5^yy0`+As0p%Y+D.pZk طb46i*&IHut'҉~!UA#uħ'ٗtނgy 7 ^IFt@Do:P0({jC =ƍ|7;7JV={F%UgW[us*WF.`Rz5n1T-|0Yb ]QlD8ἐw!w;Oo*  V?N12_ T5gkĹ`= HܻQeP*tzz2"^?Cp}NϑŻ\ ^݂y3h&c~INN<ٗtQT !)͒kiR7o\ gx7"){gud-lcA?L>\BG 6B)nA^m<}H*b]hGMFߠ_a-?㾲CGlJoټ{]sR?Ł'~{ Z@ T-C (4;=ʉM2M #1> UԳ m52S1&vFqC'̦`{ "ۅciE?o?x {"717c]oce 0 m[p+cdwx7xoo"ZO lvV9M Z rf,_>Q02g֤`ON ;bF, @Xz #)9:E+! ms%3 Wl,35*rEզތ'8hSXk6 5h\sU:a%@q){4x-zw >o$OXr>;W8.>f8S鋒~|8ci"ӊa$oH{zAk3JSj_]hI/wy`7-:%b8%RC }͸1#i40:o\*^HiIMW~$c*~-feiN BS{{;쑲GBW_՗ݑ;vqEhߤü|{|F*ءq)|'I0а _(^h6XqX`"phSH{I`/ tgll{[|?Z$]6S i{bopaDFSB8$?s2H-\hO־%qA`{lt&`syYcG8a\y wBaUw<fϕXZ1﷿LA86 N\K9&G݃{: O Sws!k3 WۡPiS{:%hc>1;1Uv=u #|K. eax-t72G[~O7a2>4-)w}Z6UPO Eky߁)O0 ƓrKN1C*' ZZ(wn:; ` ;P`F/rcIE T-\ktZAy+vgsM%trƈo=0B6@Z8^a<(V3cM9=,:?)P#}T?ёGڽY ė E'vPhlyCՅ% t "ɥcG:|Aw^#LE(AeH9ld<$~u/3/q/ F_*%?W$ 8lbɥGx|0)r0>,PgN7`0 3S@RwǠ~nkOiFR髭_YRybg /qRӴ :wlsj*KH"Gd CQ%ە2I)fvSh&rov댅Ҍz^\TLڳ4'OУQ$sErNCSZT$&/F5Vt"-$ w[6 Ys%* %S7&2&=ex )9@tҿ3Ay RfTyǩ( I\K{v롺7<Y :%&X㹳5&5lF'@os]$B(xj{|&3J :>SF)NUS*n[z%^cm]ߞs]$34Tϱڡ+ hX"%b;LA]#`ncF0v{,X.b)>I9.%{5Ż(Ѐ* ǒ;_C]sVEq^-+K =p'WhPUu;xt$E$fA xi2 c 84\ B2-?ʬOɼqwc {&2oƩ 79rݍp\+$-ߋ< ?Xla|abD[PNW`KW1B<1$.rAcq3!97pݽ4܁ٗ=(gqYsءv9xطGf^fp#%bs5`D H) H$c[>f[*KK-BmrxI`S g<uu@A' *҅`H1\Z`<[`|IY^f]KUoΦ˫{',W\U2g(B>ugmQK}z=}m8 WB*w<,F)ʯ;p#$0:~E[^>|Ï$(Nzccu)ߎӓRV='\fԡ=|7I9i-YIq'0~. ~D' 0)a^tqF]f "p2,Ff{$cW VU\P {SBn;fP[qʗpS4+5w 1NfH4ʳ ~U(:s`cij@rOO[>d:: >v@G]}܁qn &Bc3Vl$7T#iL Ygj w}&:](%ZmylRتG= fMb[yὅؾُ VJLR;抡^{mi7zxퟒx͡Yڷ xZomd&+mc֢DY+LŁ/^`p&PXX@[˾<0wYPk'ųqDwPGYC\hk>L%;@dLޣ0Gi;T$ a xI2xvc4|Dfӓ3y#Knh` c0B\b_3F>@頨?ՀO. d ^B"?DhPdY}V lts'0˱14阹߸w&Mgw೬|М_䃼sK5765 %+-AlsHw`o)Ю Ч?X;?S&|ml9+O2?9f }ڣ!:@6O ɝ u@|3f{K{زa-3Iެ%1:Rb:ԼUqʣ"_r9gg?&?Mݺʲ0_SJJAC۱ʒ{r}=m-SIDŽ|e}Tr҇LДMW?QEδhO%44@X?pn4_T)= cţ]tmN7Mܞ}'0O4޴ ^꡺`&}z55 䥔SmɎDx1\{+%p?ZoڣW㭍Zy=z ޽Yc @S61ܠ!J:;-P&3M.CD/ݦue\ &p p Hwmn J_Nc<ٻTL0u0M%Epj\{{WCV j|, W^0.GJw&E&E~p7S&ZE@pN'9U!bE2qBmKL!.ipK?3IoH;ƪX@uW!3aHN]0{DSݚ׀=a畒)3= _DWtϔ&s%deUN|wxe6P,.\Xj0~E'6b.m{ Wp>u5UH]8`! ±9:o`ZY #G+nJZWź2PX?[]а`FxYaz];0sݿ)4NH| q?9b@1.Д{}m]I#cohsPo(# iO,8X7?c^\g^no A3lV2p} QH|?=:깕`&t C a`O,:p݃`HeA?k)&Zx kܶ>4 Q;_{tmXG22`zl;*0(*kMw;+4 >kmN W|s4]vҫ#޲v/ / 땮]K#W|b: {cE?$aˮY?Z[KU_ڴ ߹Xcɟy@nǷj y8 ]G%PG_@W =67,L6rm]H"\UV-02[|?*lAtHWz 1ݿd5Zp]N3Hx {)D,aƻ-q\\(xiܟa؄9WZml|=*`m#_(wn1w%/:1vR0awg3yIC4[6Hg@>i5vv -5{Jh^:{1OcەƘE5@r,k?wVm,s/dQX>#05_=!8~*3},7fOc 51S(,`|@5UمXL^ޞwؒOy&FBFo {&o@n4J9˛bL;-x/2HLG&$@%9N"FroC*95q7&,Um@~߶޲^'U 8O^gj ]6֙B^Q |mP_i@rjkrs>B_!̈́*R bo+]=9f7R o{eJ ̼3ɌЯ_KtH^#Ո A/7u-mꈢW~!ɾ&"|YQXf;jP Z`h"PDNkww[bG#xݱm}8+,ܻ?>jj{[}מlrW(fZLmF}WX`X.g $fzI Pڡ^D~vI ?UJr8] o3;n_YX|tqot5ߵi_e2"S|ʼn~"9s? APugC)јo23;ya ?qE<;ڄW;O$fB3 Si8pX}@87v25ϘձG#`4`l!)sɷbtaL( |JpH[r(F>[iW\VĕxgԤ//g]}kh'h3|oB d- HI˰nnto1!*qS{0~e-$wԕ2Y8ZH8G Ts|nk|bj`w执y.o0[`{מ p̑* b4\єfhLǎ4hLLI՝)HvqA!PQZܟ} g@k8h&8_jZ T'5M:]%p[fl58j< ~Wo?r B,LuwclW19(Abg@&MuU֡^_G )+M Hy|k-ƷKt`7 x|&͛HyVΌ;bWk9%af"_ԟ=&&f_ʽI$f/o\{k?즽[c?Ş.?M{c }ڗy {K)u#|贪; q8exǝ9$DѮvuB oܿ?/>„dU'7^YZnL:zGZI9m{ f#m)d-?|)ApEI'yUbd=T.}l`&5Ri+f12#225:\pM+o㓴 $ITLK<wۑaGM+M:cRӉ)ߵ+u={i5w ~,; ط {k<`??-0oEqyOp?@ypwfэi#efwc5-fv{͏_"YS~ū HX?ޒ=gׁ7?4 M^?dqhB.$9˭A,<pyO=ƪ );O%]!xC5yIc uLZTX۫Kʡ#FЎS[g~hgy_Snٰ+,]judI0뢴wPb9<8'ܥm3pk Ob@+T8gb"~ӖCL_2Q8|?5Nh| Z7CH^=׸Xkd:@%FgL@M {"؜+t W6t(@9Wls(VxZ4fEnY[e;7dD.(;yٝ)@HK |5ޟ|3Dg4Ndm11<\c*w3R? ծ!z +$?!Nt;4K=_W"Ś{.4K"odt^#-ll} {Uǝ\wCI2)S60Iʑ cžDxUjE;& _aagp`a>YrpsHԁ0e-\h#kמ_,%`T^bg]!vQepxf6y]Н|*&n@'1ۙnr pzIJX6 K"/CgW`Ldrql{F#D =yzG* c0d2 ]^ߧ:ưAGr"S4 H䣿@˝x˞'DO ߉uGWQbr_ཾܯJ?bi^gtS^i CO9\/.s:NzR8QT]{ {/FhrރqFrh*^-hxり'~HyŠش[gƠqqOHn$W*GzqXg`^"@81|Dz2)ס?:Af#?9F(G͟(>lMMAj1T+%9g <\3^{z8:I|ڽNMtK\m8#].Ky'6;~vP_";m*Pє$3SG=q\'r5[Ofbx"!Bwn%P~.Nӿ)邩5[3)`9s½J߲دyOP~͜CIvVAS,8 x8$0 +]7tS%j6@sY"0.6s-]0l{QNH|ߖ.>8֤~Mk+ILUbfɡS=* vƾ=[`.HĆ`X9犳y-1zt+!'tE/,Z ͠1o\| {?;'O9pn֋1u/2m+Jᯔ{Z "`Ul^~tk|nh# =mj5_) fFekrW~V%8xO Y)E9qΡڼt3^y,܃~ m:3J.O}Չ:nنY#`e&͉tkD=Br1N1CH}Ops[FپA`VO2Pr(. k ~$& xQr@5X[MHbJFbU)oCTUi륤@c|{lg0֓a:"<cR]_C{WjKmS_VŊ߰ϡaU~$w(qX#xh+Ua4nʥ|/Ҥ m@S@4 Aĥ|Q􊲳  ?oѻ g颽* ƎcE3 â#NkP'%6cnY 7^Ѵd|o;Ɂf+(-~~ZWsvضn^~DXb E6/I'GBTO)2Ol3K.)oD\Q"68z]|o=Fik31|L`>=BS5CXS}؛86  ߌ]JX:'`@wԎЅS6Dt{@idw`pkx% 9{~\| ?u'~$3jܳXV8f7CK׹g~98nC5KJ -ogGo"e#問R:~O!}^IrhF,vꑪ%ص[яw&M!^8<[[Ki/\h9K \ bC/js,Ŀ#o54gCx7~)h  ䷷@{~I9P<q\Uz h Nsdq ꮘSqiPmpIX0M\ (+@IDAT3{b{db8ypTrƹYa oͩcx>M Kn O oB.ZGv Dl#D9ΨdeL]A" *OiX<&a&Bpm=A軤=Q>~$6.9b+D!аLŒρzp^ra#PKf\wfﯵ3+tRjhG3KЎCz1>[9b1e+}qVfZtE.A:nѕe X^i 1yodnc CdP3І׵ɇg;HHdv%“t|w .蓜K>&D>#w@ #wPsDӜ=0~ջ =jHl!]OSbEhk̋?9i[}Sެ7d{vEve.Ԣ^I7 omb}7 )v+7m`I3?Cp79 !F1V9Gg|xd $PMa&uMyPtjyf{" 22idS R*S̈́F;V Zp7I-ʴ(p(H[C OS遴tM.T vw$RcC9ڳUet#7tziɚGF@"qwE<W 0@88vus)ŁEvs=a jE#4>H|"N^*f}jJ@&ke m@T,UY BB#8+(}삽1{$!éHnñ-q>;K/_6BZ6 Ǣ/;(9[&oLhc1F3&&_lzhny? DbH=^Zk=u)H21lٞN v%HMcrM{1ݬ uJ@Ǝ'bĨbu T"׹c)=K" d2D{S?8+v JH)IhVr _ANY)9Yqh2qaXlODG4t sk G__m3yz͂Ujkjl]ދHaԖGg/x뻝 75pT\VI\PVy,5J]- "t"89Q`{@&02B>-* xhLfRwVZ +E,3^ `t E kx`-'cvWq~3)wWs>ȇ^r*ڵɮ*Al%Ue| AgX.tj.H?5p @pA5ځx|!rDHo'+yK#`)=' gA5tRBQum)6u]I377Jw%L8ICҐϘo25NY)] }LMSON#g+C^Tqa T*야Yu@(\@`Pu3kC2ˡh`P @VPphg(ݩ֣v`D0$N,O{. '1+;z;U b{u@v;=+0#DņKE}qٛH$ j >+I˜aw ̧lUn\nʻ-8 b Xa Hkf_JߋiXcu<{,~cFz^#w[(@B_I?)@: У!l_ YNG ίgG5\-J 4j4xc(xeYĴwz~FZ8:LA-&m,'[r]L?Tm2MYU͌ƋJ{Fk9ŵRsL:7\daz;Qgrۦ'xk`YA>Fl3k)gEpvp<NvʻL_ϧNE*t{7'ʏީ%\z=yN;Kj8KBzjD`'+t]uH2/ݱrFSig1!Hϕ{3}$@VnkS {%joa`g|-UNա)7$_?9wMpԞrKVI]Gs=3&@tPA.0N>+cg9B9Yl+ijHӱ=MHJ;Gbqм ۓ).ny VJg68K^0 1[s @{>gc[n8וxx &]?-Ļjim\ |p(T&)MPO҉MI6 9o"| Ў9vnzvDNhNRͅD\Շ^t8M~Ĺ3AfV X6>K l%94r])?M8 dR޹ݓcC"?I47X8LW@ELb:/[yQ&ߓ~ئh#{pps|Gwŧ.?C `ovUlw ^͗|~Pc-&r^Q˚j^omhS}3H n&t[{^oO ֒sچSыy(IJJt Anu(Fy?Gߗx̫Lұ{Mau~eJ¨#ĩOd&͊0B GIgP{I E">/ fI32y=/9j8p;T Pp5p,p5\Wg0[Yv`K0>݉j:q(^:I؛áZemu@zl550dLr`h5Gh))q!_6Ob{h 8I,-p^*P7 0=SwfG`X{Ea8xZHR~o&ĢӬvz4ٔB)8O’-/"A6sipiCN,A%e*'3 =au3~ѮlLw>%_}9 :BJsZ˩@ͺ ;a.$?1.[O'k GSCO{E\k 'ىƢLNj 3gXƁt*QM"g(@O |)3ڂnM[U!d,lQ.ƅDmѣ{Kt{{w$ylg#ak" l~C R" \QD8(Ў |EC?5-v=K.p E)ŎO?Kw3N"*1U?raf[ T>Q<{WQ jG*ܐzhILNt@kL3  ` tx {Q9Cħyy:31IL>[K0/%_=fCyxJ BvW;C_D;'*<(0Q鉶BX7M~%ip Xb4:Pbi"7v_s8B?WWL *D .UcN:FHtIpU ePx*y@.gA!o?#ԍG m_ұ7֑'1$)%x^ }S>d[=՚%[`V2W.!Mfį\I&&O)g,'믡H Cڿͮ=ot%_zο2ϟ~0S?C [פ6.F?@A.29|E;E/^68"L]C<;:%k5^#sYLeenl]$0j^+g^ :|a Q[RF2 :C^!Imqz|*y(1x< ND@ppbc"b&8mI =q_͕D_a3æ~zɶ&p8%>$]w 09+$u_,h <ۚݕ@h1o۞ moI# E iW6r.̈́ػC'}=VYރ?qqQɍM#.C!Ɛ>)F ƫYrJ&!@-M @^[ 6!rcّ4&}ͥNwo@8HCJ {2v { 'UaPLqf>B 5Nr* ͨSK|8+\!9rsRKy؞~P-2a#V$ES(VϦmX띔qo&FΧ_N D ߧqj.fB>xi+A2#NQfV&h%rB>ξ6>mfȝ=΅% W,'_ B,z X)7qD:r!P[.98ravSg_3<4ީ&;^lj U.\gƾ^(ɱ͛{pU v`mxLB;"epmqU{t>!ޘLzXP5M\=!솿&_@ ?N*ZN=6|~^U*C EDh.ZyKzZ_-P>%πg .͉@1 [@q;g ,]7bzKM'3׭Vf,a*9Yj]1oʿIC^*ׁal`kվ|fH# 2g-Ԛ\s90|tmgr=ks}ugD" 9`u_ |??VYk`A?\((k \COŐSB>B_e,ߧ_ L ĻΚ+0A[?Db)(gMyd<]F|'?7^usJHD*U3/JA5tZ 2P '.$_Ȉ /h%S#WPNf_;jn(+<]`}+V $$5L:6eiyϥ"22Pӯ-Si xJoZv4J@;0HYB-hF@0c;<$)}]9kQ2#$}w@{wW.'&0klC q1L' 4Bs<* K-hE}z.pH-qo2@azMMR9aï %c1pKZ [H{s &C /CoD޺3yML2x:OWa2֕@b_LV$#Wٻ1PwNP<&T8XozQ:WLxy~Ǘϵ3ݧIJ ,s?$= $~@E0vd m2>-;`` )ֽ Z0Qf܌wsy;¹_8,697 ?)_vEX h&zC%?;xV$c~3aW#f;Xһ_0c\]$Y <8ւ:quзTܱ8{CB%|)]VιJMޛ1Y0Qb#eUO r;/(g+ne"X Oz̳NYc*ek;]=osY*=kldd"f{ թtz7_~^?s=Xcwsnˣ;E u+ooA<%/ˆ=R8gE}t<6Y?/~EQ bO7.CpLH 2 8NJ$>oӓ Dt:^b>@?rC gMKGνtO%=@pb~ցk:\-d\;pn"V2fuD8ڧ@ k+xlbllMI~ +_WOHV¢~.·|jBԬvo;sW%/Nx*"F9| Īw/oTw o=!󷲨\ =+νhO!ܽl >{$bQ~tGy5E:Z-=_=06Y{ԍ|&VT{|l֎w <ޥ. F@X 7{r,{Ie堯/ĪSKu^ )_ϿGd's$A~Jѹ:"_@@ Ļ!h&F2[z$So1ϐmEBS|D_US ϟ"xOܽo {|s@DPnHH|e ms J#~cL7'zz6 q,CPP u W)?(< 3|GS"gtzr.m3`kRޟ廭Q @ @%7)83wow <7' |1KG=1sG e9^xns9Sc&oO9 o1Auf PbMe~c"Nk~@ A zЬa';,>|֥ɎDJiB:$,$0^ϻ 2zI  N^BDBlw 33qQ`&x* n  ;"e|gOsg?jF˼Q|vmI} g *!t!RB%>vX?QqLzά˹۞sy[8!<{gACЩ8?N6>cp/f( \ľs_릔  = B*GDg8v3_<7Fz!3<ոJ6Kc gEr]\,y3V9!X|΁~J+) l]%3~vpg۱f_ L :扬v,d1j߄ʫ 1F"(?whژ4ڷBv1}a,߂гr&fON{?!qSSj@7활%5>nnW`r@Bs_4q@0 gIb@lZoLtcŖSYʬBx(PI r9&]ll25s(-K7Ň xWrrߨb3lF("=if >d {0LXa!\&㋚gF^3ꎄc΋}w>%uB| <.Ip:#yٗpЇC&,'W  D:8ƳPc]jAH,|R`H?$xe#b@1k;3i)'?{#ϟ_Pdd?`C?KF]]!7C r#5tʑEDlK" sQI˕&J[S-_(4 Ҽ̿H,G0eQ0{'; f^ƹR|LD؊n9؋wòDU-ޛCt~Oxo3^@~K%ޠ=]km>n/9aZQܸC_W0k/>H/ RP^fFֽ>?U+BF/iGpCU{Q[%BJFqB|?vli7cӿ/[Bt$ɌX³j|;nNPJf,tW9NBM'rLJt=oI-CvdvWH/`?m4i4%Yk[K;j/^>zᴢyY! ( O@;;m 8?Nn%Z|Ӯ߽I°ͯk=sM)ȥ@@1PR32B9}^ AKWʒ!WN3##50ӟڅH`,-R`E ]d_i ~Y1tuVG+ݎ,AX=z@6g L |Q*>sЈjK/>Z `,mc#\GڋxY(0| |@ uG?O[7YqzaTr{ox!"/xw !}+!@ qC+E/9w\$;}XQ^Q,㵔9OCZ'iHi ]8tsj\a#ȿNsx٢~%ʉ; .kbG6]Ahs՗)iK)oY߬@gŔaT[VfډzY,uYAՆd\½s$unI>}%ߺStNH( )pp@8ǪDxct*PԚ^⻒jru[Gzpu:w_;_UPU#t1ݙh?y7/eV|l(ĭh)R=StflOZ_%ZT^.g'ӿTt, x{~Cla{뱾niWʡu+b:RߍhW90Ѿ?{0]_廚 = N?3Z'sO\aOpѨ{`#2F,h P!=>3M5V7\}7l$YW}W6Tk)lUA)О,V3L\Z4 EAY o?L|XMt1zǘ?ʭ$PZ Z,K֖6r-h"|ES?4_#pu+d0z+}Yj`|v ~M$ضdoMNO^DNr`SʻM uG]-p3q}*hS^s^ꣂ5dڹBr@̮3F Z]"@>H5-Yt)a]nca}.Ztq~ X 4%I|@{ϸo\f|~B3wdz"104ִ1fa;vuR~~e-!=9HxŸpJ`)n%<Іe Jrff uF}nJS3_v`>.O]AOλNtM6Ohͅf/ @tt'LBSaX_ 5tZ։oA?jY6. |79#Y[%bC㴇 0P؝?>m$oOeXVVN=#1w_BO l <l>3IhX/"j3bAe\G7œۄ=b )P*TM{o \f"El]*ٓ[Y0?F_W\75l%[WF% ,]:^-~+C=NveAڋ'c:~f9;۞l_abfr{{@ uE  =mx@&Q*3fgt)K?g$~י,ꩉN&?wKw@},P/@n鎘y |П]>=ecɋKSIC[X-w`D [}"GXw\Esp AglOrqxߟt鈇fL #x/iOY{c kI? 4,~jhȪA߿/ .SV+;TDDX9= (}L~#Z Ļ./G^ w 9in5iH R`3Ԝe6"݉fW)p{eƈV0fndvbe((牅5koP@Yˆ#긥WRFP$^m܅4:8%܆\ #*-|QA,j@H{]j~U@@i|&I}d;>ۆqkW\K´z+a?HmQfeĞ-mq7Y_d V3W.BÏsn:\DVڔ#TιϦK[V1' ##^yt%JdhWu'Gs۽Q9k /wM։#lKwߗr//ښCtfC~`xY6F(o5C*Xh 3BfDvú4g^Ǣ}>K<=wgD-΂~?NiI#X(R|GyA6o$`%i |T`±MHwZw`pҼfuֺ; c= dՊ|G0|]F;~/t!tZ C4Ql]eáƥxyy!p^dw/l@zk | SdՈLЦsQru|% JD!šw ӵ;^0: Tz+@oN>\2GP]rqs(+*~1܁Upd+ҹ&pK3*#%DCN¸-]V 5[d8B!~:Kv\+0p^/А|\}0V)g}tm HF<+Z>2Ř+(|S⛽!h-WN.CU%e":}ol+׵Ș?rw}8!R sMé"%[|\Mxb`)Q=K s޹_ ZRP]ٙ9wE^1uC,$h_x:zᙾtA[y{2C "pb2:NasIv=Z***eVjt =c1Z2 f|0~>#'~O_˒e3o(,}Gm]h_jX}2xSا_5_e}7"hU:Ӣ_;YPJJ ='z}/G;5mJ t <<9mL.-)H'_O'O:0dg0>C hQv,h"7@n"/}, qm[?dtPf:[9'aF0e\:Vl \ 3 B?>H56 X %ShlICH]Gh-wNKKʷI cB!  n/NGp]ڏN/  4+i:~Ka֥|K^`HZ7< @.ґ⻺@paC00mqPP7N}&4xuxҐj-5jbQQOk f:X m{kV?,U.)աl.\>4uWQw$3(D^Ӓm!1ѿ w0К(';&Y.W P)6Zz)3z-?Σ~k`+^Zn'C` J{L0;{Wb ǒj!E_ e'sfM~+0T`@n&o: dsZ~?"P=*t-'k ~<"1ܹDJix֯VJ'' l&@ymN/tts%&{_/̪OVGƃC͠g)(>Jn곶{Hw|x߃=}y~o*wVHBL=/:MxsQ' y㭻2sMlQ0^+0(@=K~=GEʡlstA އ%@;>ټafK1^)P)F#Ov @B~Hpe[ /jbCp-aEfԥNGPKs ${|59aEgp8 +XE9JV'd U'56PxZr8?3!͍\?K`&z>WC#>*Po Dryg+:WpLq? :YZqq@;l&(HXz!5G2Gkib^́,kIVZj aNNF[wg0E?~y{ `x#(_V"p!yq;&;&98 ZoZ៱:f#r@ vq@pJQwрtU\bӅk$+p@$í!P>@z'iLȵ J}:p^d=PAs neQGuf0=cF5%9PvIr5t}?jy`/#@1J$=]-~%'92фt-19tewM7 =2N0 =7tC[wÀu0J. dO-_]Ԉ}Y& ,ͱ’a-Q8K`÷Uxy9DSXVB:SXy7ʌ#kfe%sߺ;}=V`6dnDV:{.͘Yg~ꤍS= #i li4i&l,&|('ύͱAu/FuzvP)h r?[?染hgsazwh 6_\@xQ ]0\ߥRM(-@;чkIke(9ύ]~/`\;0S@ Pi`Nq8ؚkJlpny@ߋ**t{1 v83c&JŶثd/9%"N S١[ (׾ 3W7 1w v"Y~2W/oWS8 }F3y58166߱|s@:9z-di7f^s ` c{wU9 FW}@=;z/|OOIw}DŽUscb 4kL °$\HC8)2J<}SD#;/PC>;d˴t6:nF]  ׁ'hn&HSJ ' ..%AU4`'?L໋&q:V"J@$DCF0 l/ 0p|gf)B+~@=TWVN z|:'-ѱEsvR_̉&2av`sUE9{)MNJN?Y6sjlˏQ.мaa%0Xܱ4ߔQ%gC1Iuq-9T,9{)q:rUc!g,;d8\|lc[}ۘr,-U-M Ctn Uڠn2!ɂaVTH9OF}nV鷗<- g/'_Ibqu^B;l^6_۳);|~گ/dZww=v .iI"9owPTړ_sb x/LihSsjPW=m0 Z3[8\V@Е}X&]Kļ؅n}VN~̑ ?RB23BMژ7Ćk-ڵ`n.s)vS8cA ELҁaPd7KbSYg(3|,Q?h%}x maC t|UZ1 GYwy "״+E_?IMGn.0O+Be r(h1fPgB)C0zВ];?sL.kͱh8+0=.?WӱL`@k\O.FlVT3}xjгluw끳_Mŧ1laTս0 |cTP J{%ga+?*ܽH;AKPK TkSQø~B ] #4";_cو_Y$ѕ2I#:Z(wz3j[nK-g @K}@8A _Y^3p!I4n#γ0RC}|..\L"G$tԒ䷌X'%ȝw f羟X|_nkZxgu2ƯPjV_e-}ĪXBJ{lƞvwcd{3Iy){D"5lP8]p8@{s&Jar`EP#pF_cqyM_u 1@/j@k/%ߛ.}-!#X-7ClxK=iEO}*Ԛv(QGCHf ѭilc5&u*it"D:OJ@\G^/W9)}\ +)o ޝ0{e)^y|g` FâYl.UΉw3K $~cfKOS-aۛ/ihtC 0 `UO;W)x3|S5Ǝw4}00Q "{p`~F[cs'p|;w:>uMFB1p¹=zdcyI~81Y#YI r:%ј,)m W h z!HW w~`am1_K)FxE^3{HWcv \ un[yt{/}<*T܉1ad|){)Zʫ rxB358 [$6v|3Jb`{̬NYe 2tA@+5 ag[-~o:V'C߬dj_N=?2c̈́э(i탑6:*#)׽VFQ޷(7\cGo۳Xh$fcgXƢZ)ٿhG^uٗfwM2fƧ^,lݯ Pa>NL Nw{ k 3ӱ\tq^ V\mpHispl ?$YHa ۲n]\H·~b_cgCt)|ݖ,)j򻢵bum2Vm~q+~e1iꃍ6 >{D_i6|9xAtJņk :f#hѤ*OfgBOu|ڻ Ƹ`|~xkdrx"PؙnP8cų{@+؂{I;k ĻC/rr.}'6[j`u¦$+tB[ީw8-;8yt$M*ĸ5*ە^-3#F TCO>Xɒ1 _>D(ԋ $[?1uyZӵڪ?h2>ڙpvuւgT$1N336NtfO;s9F{EN9:zJv31VTGC;6 O=f>deA򿃕?fL_8sU)~v9|bt6fQ]w %rW8\L@Upm!BS" 4orlȘg;~/+~5u T^Ss_W uF U*LЬt0"]@{ nf0. UJCW &O.A9v3_ !Ӱsz(0H߁fi4. M_b7wjJ+~ƕ0_3Ec/~U0-`{4a}~iĨcC?8{w7,F;.~SH G oKv n s 0Mm'FGH ]%ʴa^泅} ;+Pi0EoP3tVS0?}OnwOG;iD_}#^72n*]\foFCl~]z(gq}>V9leԁjF|%ӳ V%~ҺWǚߘ[{Uc? ŚMi'?UqI},8O|[lݙFkbM0;1}uϫ r+wXO?'_^ e9ױo ~ɢA0Vw ķ[ ]y[ތtvhtkq幸E-h;~7ki f[ RVD`^&Gq}P`9M ]Ks$cD4c!|(xbTR`KV_D|u.x;uu`<3nw}.lqcD8\(@,^0?%x\XY$J+]$TEG;,zָV }kmZDAs2S!W9+qVͨwワ}V+O 16x 1nA-4`t "(3lv"]Kʭ8d> %!{~@=G dL@[OϬɖ¬ &"4). $k"kڿ'Ѐ毁#Th#:֭لKWK`}I.fGw{V޻,"ҞϪE8sq+~)Ɂ^:Ol߄#Z̀~׉ e['=T t)LL% jn Dy*scK;uw!w``ҹ3O{hc^s~64N- FO=Ya񮣌2k<.r3R-.v@v@; d6tHȲL}m;aDv5VRO)3tv (sBv{޾LDoIYJGxľؠS9-=*>+k#N+rG˩`$gx1рg*z+Jӎm0| ._-lk*,kLq b-+;a@ܡSm䗢"(D,] Y:5EN|-|8B lfC _h|fÏưyUx#@ h-]e`3#_E{pK?!pz]ְkHnم0R6?z.աcjQVnj|2-Q=fb<rp(Tq30gtigMXn!ԵTUہ/CX/ 3rħ`|q|,>!7=_0+&+6U@{@9H_f'?`d%+y߹μ?%5ey\731KW-Mbl&ޜ\B,Tc;1#^$+)`EVb HSOp`pL yB|zʔC 尉ىV}cjvbsHQ.?Kw U*8E`pP½c&_܁ag!U)M/pkoHϟsC[JT!б0 h.3,~vPo]gVނogw$SoOm% zU :&v;W(&Hנdyx+:?d&%~_so?k Tyt|@;MH[~n{L?3D;g+hpV0nJ~K,P9_Nou v3>LOh@٢N$0,y :N^)P*L+_Q'@O6PzoQDC&Ҹf̥5ou6 jn) ='@x*li?{?̊bm^a3sYDHVE0cbFADDDRĈEJ$!0yfY7nV;5[olN359+U^|˺zT-#U78;{SjŪ? PE˞cطqI3p%Ed>1qn/c@IGbH o-d2+&?T,^LE=*D}{k(j1;r/||5{W= ˑyy#*>m>>b^ּ&}-hѵ{<='YΦ4OxtDmn}+? /FPlKH`drB^K )t6>@n_p3Ć̩3Jej3CLqdENTS} OYu E=6Bb)_1C؛tdLg҇? 9{hh3*w<7sV̮Hт^6b#mg2n%R`\'{`a~9=\[!I62_>wWk GiDM. u ڕt<vmsnpbY'[46fF`~d`Ҷ3XE% zv"^mW|\EM95:CZb)VN ̛^=' O2 7$K\o@x[X[*KϬD8gƲGx(ɬ?ecxg t6z@=(P.vw m}t*TCLrα6;yy"~{;b?egvdv{ ZtkmXs3_5ATKۑS0Χj7/~rЙHPQiX AW^A[A9C s!~ #`Ȼ M 94SK}Y0 = QźݣWߞӁp\Ea<+c|Yœ< ,׿xjKn!z!E9_}q³1:kɌ&XөMPN0.վ5Q)-6iG(W;#؊h[6ʏ/e,E:@ 6* Xakzl;ՌԔn<&D8v4 6FR mKFsq? 3dUBN@s^8]etY[Lgp-xqo9;PeZGO6(}P O23Ԕ#GV~75>R*'ろ& qΕRP? CdRnzP[zNizP]P3oC{ 8-z½ 7gيvoA 4;V%[ɸV="mW9[tlD0ʛ;DPR:({Bd|WuN{3a}AvuhQP|2o\\`i%=xD\Ե$%Ɔ:q> N[E~ոFu8_R8 :81LH+O;'%tL^ Fp}t1:Yn@ sܝ*!ړE 8/xm\lGGx Xm%}|q z)SF7 ๣ տ4y@IDAT +!\~# Mehʦ u=VF-A`]/H t oZ)4l_AW3FTy^܀NnxG" +ϒ<(Ymvgm~.:!G&NE~c 3;0hGe1uzQNu*V=ݰZP<۴ۢBEuB {䯒I\,ΏEme(Mղ/-yAiwy/?FRroJ&%_˭ ͖ق9 "n޹y.sɟq z6 {kQ*G3\I2re4%\Pn٥yzD䇠FCBmݍ ucCV$!x8quH W3ofh ̃EΕImT1`a6F_..bBM"R١ gh;E|2{2*I \e!H+<Ƣ}%  Pc}Ws6",~L9{&;ZYyLs8crrli)v̂0$m=rT{_8^ G6QZjQhQJp _i Y*Dps4갤JU9 ْ0]m sstAy>3mO)/ ƚ?o"_$)y/{8QH1mn񅹟Eg 1bTdF{ n^-Ѳzr69LXŏY)3ױ¡AO_-|4oIP =U`==Q*BQ';6$r?t>Z"r5<†l>NX esfb9`aA<:HeO|O ;lNz6p|?ܢiRI%݃U} -,`:datSS<75z$j}( ZpY~zuݪznj4xdnD[?ւ/zdRN'3e 8N];sōrU(<,?eDd>kc?)W Gs5Xz &EA~6RVThtk}BcݙҶ@K'7i@LZ~)WQ @~4(59S'Gz媢}G( &AΙ!5/x̕2v{B܊5݊557}׬EOŔiW7\w:{:?6{**ͥ"H kT@w$ U0 ;WV,@{z}?>\Y&_9~pq]چyWUs:}}/OmҐcl@Me5R*F:tq U/K΁w5@A,{ zc z+vA>)k-q4:*4{#+3v ]5Z. a0|c{7=aoXܶ6T@y ! 07ǺFBՂ۵>)vE%W`@ј/xQigh.ҦD",C)Үf"Msp[u' ›+xiok{uRM;^.x]JvNRazQ(0p^tW #|E XSY]_칂!vGG2`,tqfYÑI7ǻ[bVFwB&k9Q^u asWقA>j PSnM lgP_;y{HW_Ix,K9;#H=b|/3qR$3~;"UO'}ꪍVTV V9avirr{]u9Jo7 H;?ard`arzAWqjz/J9 /e!pc1oǗ孁+p( O=@ GW[/z2T>}gYei$} ok- ]Hh U%zaA=\W#C#T<1S{ w=4d%c elML\5A ZK)A!;>h0|߼X^r _29Zp_gQ >%,{Em]m@C@Xqc6 DžF>s y-Aa/h;'y尷:2S$"ghKw ȠSΡ@+xTF䥂 m t+#o =tvX9Mp dT.ܯ*xiy[,<^s*c2Y7/$V@GGFbdo>HO#*#']Sģ^kθ7; i;-w lxsW:|bQ,z0o[ KUr3wwg2[7ŚžtQ*H%(JX`wn `ZA+ۣe'?ҝAC2!|^ ō2<7x|DvX>GqmM傞{pnAOS9Z36S1ĜC8 ɧ?%ϐ,“}szyܿSm JJ5# ңss>ߕ]IC\D/'A>t&Eb+֋$7 { ܡnWk&HИ G sU]<#moHР&w1 n|ӂ.8O ݐ@ass؞T>)j䇡5귢"%^]GkĞj #Q`ia+#xϽ5rneï>lA2f[+I[`Eٯ9T(QADp'(è]|)䲥(3i؄e_BH4t{יł }&VPgAkB_k$#vOn;Y`Y(|8ͻжaŤiH#P>-swVpi;Ӻ=zH-PR(Ϻ=;r6d/` eG4w{Ŵ [%(ЫP9f-_i=}C<C#w7F6Ѷa4voC@1E \!xƆ?jH𿾠_-pլ Hڬgg=3nIqe\oOb24mL|ʓ`_-/SU?/3=JAFikRI#= ީ򱷥|z" Q̅5^ o#=ƣ8f[;fn;ALQk#8e S*]g@N,KGv%`'1i:[4d6 N?A +NqL S˛Զć|҃`av]$d'( ~O@>[#z.虹Vf_Xq;;$Sf{FŽ;"#̤b˼fҞU>]Pp *_ ;j&{LpX>-r;Wߓm>kYI+AAz_DP 2XEfo淨 zk۷8fFjpu Laxo|ϧ ])~g'1e`v3?ll+j6߆jKSdi/H޴u{S otvnEeܕwZt|R{ǭ(XKf:`ܢPHN{$F^&Wy&E%HbtOlFgaR(cEw*0sqJ%2?k,YA5xE:Q?>gwbG&]es@%'He!Hw+ grzS~~qҘn","+f32%=c(5hc9 $P u('^4҆(EQ* LTkY@:=+๻y?zS3xpAr)9iҝFz;g}G9EΟqAp ;O|swKr䯘Kmfk0vq'5(;&RO$nE.0)Sn'Ml?=2#:5J7CyW]i`:èE`}8og[d5$s)yaC) OeΗ t~}w"Ԓl1HSk=c{80'+5Z:B2RnANj>p5U,C*e{1/ f`w#Y'O{5!.+5%ÕȘdo֥qc"~M]q9ה9.pB$0!x qGJk{y< `[*Ȃd )3U& *@`pfݳB>K̍d#4 !<!f>aYCsJ Xz'xFHs-;33K|QogŃaCu{Ҭ;4&9y}ACP| ˼I~g(z T-Tu' Z:;IWS=N ڙ݉}a}[7*"Z^Wg'&MT.PVKE):ig:hzzzy&yj2x氫P;!EHF/I\1SCxF8dKṆ 4ύ0Qv42V ?]f&~ϧEGSK nd5;Nb +WrxF邍KAAOΏH^} ~wVҐ= ;\]n׷]nEc"{t7ܭ1/D늙ēgm _]%O1{> (/ 3M`9TwcP|u[^4䟵6扌Pр tخݖ+tH dNtX~%t02m9)A=g&P 8vP;˄τј %~ɫrf}{C$T/7BÞs3 Mᯃ36d=q[c/\qb(fuȉ//!}/Vָ:o.PP4/}w|FѸ5$*Y(#mPS1{߯j02%(X{0-bnGݞWg5wsg4 x`s֚Zʀ2}go_:Tys-].8Myk S!/$#rvsKƙPY,i ~+nXnV#rŨX{S؛D˸?Y)sB4 i!D:G,Z|\^: †%pJ Vm>wҴg5Sχ 5r{+GYRTry8=꣸t%ǗjY0>2]؏#$@3ÆPJUq]g2HΚ{}e}^kEf$yDfyQ }VW{Hw2RR]-Apps~TJ:ŭy>t$Qt1tX`{<0VhuR~aEw/Ln ΙSMj"}Wlѥ4从۽Tn*4)Rgϖ[ck.*Q(=vY|xny`VWt3 YGI;̲O}>Uz5> w@r?ŕԬc73DqUŝodpP-S~)hV 6Na,V ܊[3:>[a|}啕'&5%!w-v#O އ?7ffg3ϔ^)1ܝϨQ+j F QǨg{ZGOg&w屗|X\NcoVl}C8b C6ld;|1{qw/bziY.xn!#͙u']۲a3ٚ8#V,hb7B9x@ޯ>BkOFfVZWw{?La߃awk:s"7Tf=>x4C82Jou*<,#P"8]3*g )M=KoCJS>濿T84ObcRÒ _ w@W2g{S|x=[[{zc``0FmlP=& )ڿU k J23j‡.Ni^qo|ؗ+:͉vvm.We b DL {9V`7Ox8; `%|yhR lP9 @C{>O bAwH`+{A|qF>OҶ!qN2ElwRu^֙ɇh}w]=u}dHs9³ *~dΡ T`S-e\<ѭ/=LY_r s.@R,vk s9Wk|cT~/O|(澔C{}BZ|%ꮬN:ݬkKf:ߏjwP<.RPm"o"kmK}s󫯟"??b|f,Hi"f86Y?efαaP^T " A~}G02{HMwK&t|+~{eɗf?Eyrb,]ƺˉo\yvqEхM>YWd;K%V_c/?#vb%SLT.pxp>BG|6RIAY089`v dd5J9snƤw!'\BLI(0T"JrV T>1vbgA5Eg!nl?[ (O ?!G/P1_gAn%cv5{8!A~:(pIf7[r(2r 2=UG*et)1D؂4^ލ\hdT7\RQ ]f4; 칊 bk`QGvDNF w.V[ٓ_2z[ P攷w:R/ńS#Q /il\.;exD"O^\Șmv/\ۮk g57سѽ& 넱M)mo@ߋ?bs3Q>v*D&ӺɥJ!pP(gvI{]~(`he`(usaHPA|+ "j  x"8.7!V!9M.6z^#>%,7ĞӼ=gh}Aˡ3(l|DvPTs>n+2r{^K,@v3F1>A9&0%`2bqcgqg^byi>%N'\[0p;]ϝɁ."S9.~5Ͷn >_|1yW:m\tqP Ն6&daZS~)k2Z4CKZA;*iogbhUto:4X6H;)Ǖ>iCdSpz{uo=O>2dy0l*W!k%!+a:1GW,~j1㳱O>v)ĉsIeXjuMo2o~Ϫ9C,~񪆱x%'H5:S3zC޻n_v >H6X \xn^IJ_JB\?J\VOHugupʵk Q!`kV`+S53.+ A1zA`08b@'yYU0dU V'}<~ݎqңn-Go &]'-a=L ].}ڛP ML=f?j*CtC;ֿV?A Q<[tF.5פ$L=*>u2ke;bPSB(dž\#Ē4trT0?S [;R.̇ sҋ /w@2b0_iCd[Dw' :Fsn?³9|Ү0g? @ gCή.*:cCv|<ҿ&a,w0 hm2Sq,`ZsfS{_.j$-'6sl@^*spɈtgk.&?*x/n2gsחs""DO!`((`et3fbc]Ep[|_Od"hZ~_}匪f~;g*`3]o H68>~;xotkGw@q^{ʱ7٧.C.=wvv>@32 '>2D_Wxm{?ZZ`*} #5}^Τ?x[AI; U m?q3/BB%T%C*|M 7usںe)O/U >}WD,y\7KdE@mr̂>9p:e/6Rifg}Ou;ږiӡmV8jSxwM/;pbJx#%{-e*"uZڑ%yᒷ([-Y ْo([b_fdYp}{O*oN U1W죊wM(;Ev_V&ꕬie7?pCS#G^ՠ ^x"P@vnHݐ,&*7bqAP#0BBCLWi=g2j0`GНЖqPtV⪇Qrȏ]FvoԚ/ס['v˳;K}N}ܩ$(G쵗){)g)t:G0T8Gc[ڊNg5'vrIANE;GF<F1 {.e.?k2d0E͸/dnVuQ|f<<G>Xrܯ6Qr9(. Kԓc}Krm6b12 Op/^yv\u+mq'H~ԒI7r7 'y:h҇5b]x^FGF2*857w T"/BgCif@<쯨.{GezbyΞ­Ӎ߄gq#׏Df? c ;gD ܯ"ފt)n +Xs`%ʛyGPAZ"ީځ{/SI %~%́܏W}KSw簞k: ̭+W`e:뷭< s*(߱AޕEԴ=|gwo 7zPQrEğ5x*Jt=5px?=TGAOq~/P\_<Θ}Ᏻ<0E𻞍"gXpߑT|vC?y.;^_yDF`֘m\L//C**;J?O"Ǹ_eMjx1Hq|ߡ\,xvHgc9t|c~ʏvGQ~GorXrr?{*Ի򝣐z{YR@ _jpnzkdMf |}ci+9%ƹF@s[K ׂlC;( p2IBNOCQa^e>cf_K#'́%FXdOFK ;G[O]NW"/›. +[-0Ĩr&gzSw^C>5lP/3p-R0]sKپqZe>k1@-@& ϭ,̽ * ; ³Tp0g7\om7Os e 8+?w'r0Kd?ؼӕp@Do}3Q=rPC ̓^[ş9moVʋ=u9ŶRywM6jꊩY_JN_~D/D;YՐ1I'hI?{J,.hM4r3ьzA3?4$bv"8J\zl~ 3Pnt%2S 3kJhAiἓ{;p.,2yqLi^f# w FЗ9\[mmk+$@O4l 1Љ-;?w6&>s8Bz5og!A~-+PEbc4` 1E$,No} 庅'7̺vy%\swY^N`o˹$+T`ΣMo=, z~~wS点w62 w)n}K-#q)=?N=p3meO1S廛#+E 6WH 8[pIΫוg [#nr*XOz<4ڿ]7ӵ[{2rgt] =k:_;yJ]^R$М a4Z,'0]09A"(ئ@δGa ~]Pm@Xugɿ!"wRl <4 o7h3'tɕ%Jwu3q,[\Q~eL&a": ɔFi.6ǂڜ=z=#Z`Nέ~ $Ra9Zo֢e|?fwOv)΢]{#yy".<%^}y)7Űцon Al&^Ŏ&E&Ifiwe# +59 ! b Uüa⃉9(1klʬEJ-#\){}:#nJXmj33O`\^di *aiH/K6F\w{ڲ)ᳲѣbb<]k xJKi6So¯m@E|ܧU!ew.Lp9oK%1XݠI&clP?I[ͅ%ތq6FTACfgG/G zk ]Rv`(+,O {.`)ٮTRd3B/ݪY]Y\"‹j3m;4PB?\<,.0;I=#pg36@<^"oȃEJi1TG9 3/݋y"Ad'O_A,p\3.CD|U E7/Cs3BV+a!۶P@/J!Oƛ:)7o3\ѱu|g%:E(YѾx6 {%bH\[4J7ް~J',"YcqJ,%:65cc 7 *G+<՜+H RJ:``. gGPPNXKp;-%e=zc>Ackj߽XBP?F}+_bb"}ظA-Q&͐΢yJZgoA<]"xF ;c6DP>_[ptJAųI R'ASP?؏ 36R!rTo-fgQ(,~Y%uYo2.ZYkA~2 +4MP׶M2NnJ?"wil 9=fg3' [tk74r @}Dž2Jyt{eɉK-ޓ6 | pk)ݦPZv賧prT),Jweͳo_ou/w#Oq _ g"M|G_FNnOA}:VnrQ7 u7A8S@ 8ݞ@+A>+^0. 㣅Iv + GBa} &5UPi/Z: 0hM﷡"f(o0hz](\;ZJ!EƖ5XYDa]rބ& ^8LY|9-]K^]_ѓW@Xqy1:^0"*yt`>%x~@xLP4( ]nTOQyz+Jx4t=}f^oOsT͔TW9gTC#AԒm {&s_^s:NĹ-h-Iۅu~!jU5xvϧA*6'bUG m@D@X AAk35m{!1;*W 0KQ~ yXp͙2k F1g@ؘ( Dtf̲-ch2Ttcz"*)KTգk{1c֐HIS<727{ž3VHP6@y[箂:aSp.T C֜>)(k[(s6 P8 O$"3'Ң8w`&t!KK,;8^jrkG;-wfX .(8ϝ+F0z@NO1+3P XYG|]V:mi}Aw!u?6- R~hy=$ sSP '|\Qň"\)#& 㨹$Ҿ}_FB)\&5,L v'矹l7Nn-X~AP4 ̉  sE'wU?{9pF UĿ!@~K  %1M  L^iYBAWO >V:9Lyxz]P^(6{6IfDR]Pu{tPټyC6%$]5rnߌУ?=_h;)6-?#8=$4 @FXd6F vླo|E{I&U6iX ^ذbvl(*]PDz @)$1I@glΖٙNp5сxD 7e(Rz,@&ͭV!sɚ}//+ۖn,bDAfS6vںZLdZPf H{z8-^O ^pz$|`8Fpl%Ap47m^ͅS/{ k+ \9[S4o^qNm?^~O:2Y'w-{`(B_A{Zpx[/7/[wLޣmI${l#w^X='@Zd¿4vM68P"1 _NVKnilL=Xpydۓ(xfj+7!fn|wW$/kjs`N(E'.$؇ԠF=(_ov~tU v  iG8 lE܃~/x)#E*s@n(_A{O؅='\n[zsjɗYeI>o~>R\cm~- B.$ *&W #.+/wwxA9=SO 7]RQ,]}߰6~K4hRwPؽ*" ?ݏV` @ɵhvW}|6쒕ń[7-;Z1pL!$`8}^paW#NLN'9/w$LYG* v(互#_k$$3_Kߘ.v 5@!.jB|5_QpQy h^WkC)ؤ :dZ9֓@.ی¡a8jәCt渝q}H5xo7KeqJ^T yۅ`o뿬 >ѤW# .|_yɗuWgYV. Cy]Kgg4H|͂g7 f>&u\{EP61g=ckG6) C&9ީO?@7듽> _N |%7O[;-[íl˺wEvI }9|@qb_p01m_=PjRM={k+͌>*C뎖rv*LlSu7 Z8B(M󦋡zo}𥉂/+t _]!h$( QV5w/т|퍙, !^aθ>Qm׉tԘU5A|AL05-Ta{=.(h"_/0H f ZA B,|/L=\~S?R/IJ%JJT hOؿƬ!2bm8SV bxMJmO)Mu9"cv3I\? <$oIyʑT!Z%ă%Q %P"u- kKwq* +(s=[Vuˎ^T̿cI?|+UCKMHjAB7,JA$>\';v(iS ovƐλM~)xゃg)P|łG@[3bG Y,)ρ,B9}dPZ~Wpb<Û y `}X_zdA nk)h*P/=( AR/1~hD ~QAp6-wi3E(`ZoL'ier)ܱq:ѽJO^i`L3b"{>>>]iGTs3}% [8_`8$C=Avo5'~'w 7[q`Uʮʛvћ *U RR ~[;oƀ"˞g u7#v;ն%ƝaP쪈9#P l|M` $0k 2A/XΣLӎ&\ASV2XG?݃[6" .w+\.? ]b$s͜o p?']YiD:s0}k$L乫'PMAj h^F{+F4?iR? ,yX+5Z2\a\4#3‚IG:?:+#`6&&/õHq],iս. |/ʮQ)v*f,Hj=i1|MjWta`b?*5Xy}DDWVxIx~~T]AYgE/`wf^+/^)i5Bׅ8Dݑݚ&P_J3ƽW '0KS0wM&j6 Bo+NըV#ɃV(vlGr}N5Ͳ8jnAy%ޭ$=x_nFqpo;f_vQ4ٓ_((ϧ 5ONULVQ(:f/X(ƚ&sۡ-Gi.ks|i6|\4x}im}5{_iNCLGrPDT76i>AJT C(7\kض-t3gOx6Ṅh|mk~~2l6f x~- Ň*6;qpA%‚A}oS#7bW»ȣl9* *]vvQN ?^PS^/=LwQLGk=D[fqʣ`Yz4LWI Awȩ@P.=x󷃡<Ś}k6c@ xRAyU ຋tDrSTܙ7Bk Gy(P.8pm\CQ0Q\_hMu ' 誨M#7-[9}loѢ__7[0@X>}xkmht9}ײ^,xET;d`mow#o>js_/xD+Tw XǨƮл99(Ȍ|RWd\1^I/1i@1.eۊ>Ȗ3hl-&DS9'L[K'<9Sh ? `6EKЇz`N>/T(A2WnÜ NW, i|M~SzFC Nqq+I$Nh4-W3!tm16%N+cMW|308;?Q-K|PsٞF낓FQf·]? 6wdDsu v(M[9ł:L]'wcay@L|GӮ绫eDnt![-7USv)SN"o hB+3-_ AWA(=[L ?5X?B[s a]ArK~#eL)ٺE!׿}~Cvz5- D WZ| _CoX7K3|]N߇ nfښ{H¼yY(y% ZkW7j&W -ȘE;MpEgF~ uPHak{֐p˩ag߾>(NtAt Lf 37o /ot_ q$((/ ,7 rNmPP?V-^*9Tp 5 ,q0 C>BAaᆩOó^Hm 5փCt|=´pc.sч߅ONe@'lqdn4yPlO^"}A i_kU\nR{+.᳝ jϗԖ*݌OCG`QpFOUt/MoQNx@jc锅`ϗfTzo{AXvLȮ3 PKi12Ei5M]̋r|^cz- z,!??o{iwO`&ƈ?_U r8c=6k~,^~ZM씦m5O4c(\!Me->(`+X|4U]o`1!2{e!uLӟw#r>/*_b8?EG?۟Ń|q'h_c7ԅ.Dߴ:tnkv\z#_Q'ȶ<9o|H;!8iǪk/DT ?yl{-_pz'ޯ5I85q^"̦~/ſo(A^"s)]M q*~3ebDԨ 2q7;+b`JA=v9xےFNҨ{](zcP+}43cA_ۦ8M?m3(gd78}iv-MGy̙?[)^ }-KN; r˫(z_EÑb$735{c Q~ğ':9ֽw}֓ιx>i{颟'fLAނ}q9q`w|oq 5£NXKH! uF/몍01`ɉ2Z ZC+;%ÒwF<o8;K4N1vhhG!Z^࡭uC<䑌7&yC56W.Ծq#ߧ_GsXJk3JB쒰[t3uS(ɂnMDC Χ^T?Ḗgb4&xڽؽ;9,| ggBoA|47nf-}3[-(BM T+ pbD'XW<[Rݸ{TgvXG͙=SԔEZ0}o{-F6FäV|tOkZ1Tٴp ,Sɿ0Bo\$6BZT?ٽN۽x) pdw&_Ů} w KM#:˛0DD!O)&Wb(8_"qźΓ 04C|'^SF-|11m;/w>S#t~3N}5#Ě#r]f^ 8ď&-6]+f(_ֺdcWN0de Vq4^ִh! fh RSbMg["b{ߕ.o%AC5vw4G8[f#l]E`OAPJU'Az x~^E"B[|MZ_3wU'Zzv++zk_M(L. ]'=W("ݖEugԁZ?EwP{cKy{yWt#yMwUŌ A##7C>UpQhNU$ aAWSoQ~Dj:`_$؛&z/#.}.0sv0KyvU"/MAhj} 3!v@M)E%rYog{+H(ד$@ܜ8=7 .m3#YL[{;ΠZ{VRChD3e?'S|?#`OR^MQp.BbM$wY|{ F ߵmq`/ sDcLH%*~IU1?νs~0eO$?ˬ!S$]x\ lCGi_071海;0!JJBϰ`xI.kZ]'%Zp?_gz8K5kX(Hޓg|)P߿D~w "uSh,70ѮQ XAm(zTU쪸!Ŀ vyLHΦ,\Gq*~ 0-yf3 39Z>[ ͮ%Ӏ |v %8M`WͤO'=B&mM- BJV^&Zp缾X;,ǭ6?w^CMnq?$6Ϣ 4{V*/ #rpS>@/ N*]ܖA Z/ś唶cx?C}2xп-U.5>`Ay'[{ ̊yC}%ۿ;I|Z=QJ)~ORNyۇ\~/e(b {*xc1Nlr#V|35 _TtZ q &艍lAtL*kiQ rjKXdwmӢO {5=EsՂI,]M_q+))L[|Ғ" ^nnjnp ȋvx>+.lL'kR;x(#K*ar`6l ~E-(y/c\LX$.xY" <3ޱMI`mZ3M|=OcA E[9_KQ= tAhMcepR`owr^}0r-}@ 7uih~YS"I_wseK݋p5l{(ILS  1Xt}YN] k)ЁhIGޣ`\v0Xط>9 =tz2&\|%Ѿ`IEYGO$iw;vٖ)}}zȣw'fy _2; bY$]"0./eZ|-ADy| !(my-iM4i) ri?7;K5;`8%( nⱳP?oi (rǏ nGj`O-ZH|Io%#gJwZNC-9-S#蛜/C9ÿJEg3)os +tWVa) _]ɘr-Ɖm%YH48Hgϩ'KW(Xe7tNw'?.D=%gÃKDz5vۺ^`>,6AFk>dJ=A7 ~L!S *Mw |#(ofӂ5xL$g ]I|t l.(?YkEqp' \>-A^[g`2zPEzlN22$|SXEiR; Ar@KA,[ZOY?p҇ *y-/Ϡ^Jz&3U/ -Aq-x7 Չݛ8nH>*men2͵}_7ČO?'":Z!nK'{PI& L8-  {5{[L>uz SuOx(ss/aVwh ,Lw=Hpkf,_mw m;Q^I Dp! mYE.fW rH]c3T=<η6[ Z MW zc@E֮:@8AAqTyq dys00 p%| kA9~<ۼeGϡ_XҪ\L}uD YnnJ[#f7t:?wp@`bAm.\ւxgJH!6}@˾+簀(o/)vu@IDATQ8 Z J E 73-tvoC%I G ϳO}ikYu37434!0\D7=ul-ێpn%*ܜT"'Ds? CoF/Bu kXrCnb> ,z/Mg(1`O("sYi< Q֟860VG A:e͑aߛ|SHw׍{e?'6*V˦7R@#(BS7fm4gmt2(ǧ.NHh'GRc JY}y3UW[E%k{ZB ݰf-$&5f- o\n=`5$[JS!^} NƼ̾Nkq#f _9b#臏rB{_Ob])mah 'w)fP{Y|@?% * O`?"(Oi}}ވ}rw'-͉bw GI{:.ծ"q'#FORaT!vZHs;S)$w1{-}ur 魠q E'>t [ 7`"H){ 7K<5o >k'@ !K)?{HoV.e-%  S݃(]q ='RaV;L~;6uE`rNGeK@4k+::,_ߐh$ ‘ůbw#}GQ0:Ŝ|4nbǰ?[Dž m{Cat ?>g] xEx Vx>Fe=Q&3?oE㇢ffbdGzXKyzWЪ>Ve%}EvR#qK5#H-zΈҚsӨ2& SSr/U1ΐah pNM} P8 l;ߕ~%0G.ȫ.?.ꍹy 6 E+ų™?4 n/R-5<Zjqf-Ϝ0P]A6_f|Fk`Y Vq $ Yv^|;!m- 1 Ŏ!^]3?`"/vYws&X 鱳?c=FG2I>L?&]~N98oy8ygC ɣ>8JP0}"3zi5H4E̙jmvխO@𜶂9D= "[S:iXeK>RRQGBTAڌEN;d q;m(c .978[iҦMjtK}?Dߎw2:'7U H|#dzw@עLwiԸ-MB(A=Yx~# &ݫ)}MJy1Mw䗎ʿ@^]cI3‚A!KwBP_5M}vQe!WFMKӍ7}5=F-/03ߝYwfQ#Yk@z>9i[TlkvS&G$⾝Lݐ.޺bۖ;TF=A8NAT2%  .:ل=n eA_ϑpǹN^,q :AK=zp X܅Cwp.>|Mc#74(.@Q^*\@A_"HdAl$Pk jn >߇ 6W%x@0'g2b/>^Tgi7fK+J}DJ[vf}wξM{M}&^o|Lc-9` ۗWn"zǂOp~,L9ޅBך| BKj|kss =`;)P|audo\eW8$Pe=CM}N_&[ xFP~sW\|$X JJ=Lȵ֢B:Ti%AyIXEl߳ⷆuћQPwWCmΛ Go&u;XNom^ 8|~zdeF4l%ƒ?Z_ n| W \yъqG*Gq-$Lb1m8ﴹ g+4O8>_-49 AG_G;9iLc Ϋ{oWZr{zz|f'`pߒ-qV2;4r"yZP -vLCjp1D{!c6jGp$i+#cxZWY_Tv3)z[TqƗ} +& h,x  *( .53`UVUuc AL`YmsSm\ߗ퇬e}ke36 Z Fl ,{.Zş{ͻj7h4K3^-,6$ ZOw̹m]dy#Coڲxj'Ѣj1+s Ӆsl- XgXT1xTx߈Lҁm{_4ѶK5}9(K§Ң42a jb~K$j4ܯɖ+=۞?V.ڊW&I \P+ <0WD>%(_Z#bMb(_jdV'-oPAKMGC]SfPUѪ B.z95LA: -w[&;v J  'x`'q@4'U (o{PPCp_ 5qiat: 5>%fp`|;شdlSǀ?9h6GfYr,E[7o-nuŬpTwm (FD6?&@#c`+cx4{AeBC\t=oqf!F`%G?~K $ `kΆ1|Ughi|[L /݈ߞ[!>z#(fPu['_:|/K]?l@ w{5ϫE(6pN׋oF+]ޡ)]jta,l[WE?ag%[/:9B7_ZVWOo֠Q^T61h1[QA"{nܓؙ½9cu?5ϴ?9Kc1}"h*hY&*g' ۮ2hYVmDX`7ANPVQ iXzʈ!Qp[ ggU}ᇱa 4Y S0i`'ل1}5_д_$HwL) RBY ȮRf糗]/#_v?XӇRKɇezSVOBP" [X&z֙"tow_SGAdzph~)(̻>Q>}+_&eow};@mVԙsdM>3!&Зx?)8Xҋc}#fMJ:!=۞ؓ)Т:^G`ႊ"^[0`/$Aۣ@xPN ZvG [m J-Y}䗿_ed_^SzL ,8h D .Q%f5(zP*h)Y *|J Uf{oG8|  m.鴤R,XHY(3 Ƅv?#>}c;˯E3}.)DUj>p}w6 |ٴ(fU-x1Вqe'6ݻylw%^Xq6.JxEA%,xEM#=)7)ypu 9#5OTTACFljr{fR=A ~>2ETuΏv~I&,A,8g-t_9@m;Aeʁ>xGTonC{ܓe)`mߝ9Q34AUNV0vk3KUAp;:?&5HyNDyeG7+xRi>p;?2q?b0Ҕ /tZ"GD_& ޝPn'D(BG0p|]E)΅|IpްwWA|h'*3r,Sm_TleVNJqf8k&Гvz·+XA_hN1FT&`?wſ V0b(^2(*>SU01 jYH5two/56śյ`w Qs_+_:zhGg=ӂi_8m`y(Kۥmԍ8j(0п #QvwXCx]*hx -2yx,H ⮝.o .Z^wb\P7}eKYfB5QTSfT}Ş3{R)XAzl;,iORKr˳4. -^8W# Z'8:?8MOm0f|2HRi⧍Gi zM+߾7J޴y }iSq::gۓ{R`g)h#%~`M C1 ="4[6'Uеx`m TO&AjAOU5]X 41 ˼n:8:i$/l|T 5/a8Eĕ6jtjhʼn]":΢-&2hsb bH]RAfwk/떽c57/*O*fmh#{=)'LJ:X`PP<V0D ؞u󾞨ƅ3rA9O_{.|"g.{W^ѵgjnCH 'hqw)Z(Phqh-R )=@MnG "yܵٳsd̼,&+4Keh8AW-|~5_RP*'L_BnԚR.czƖ񰬹Ac7nׄ]Ŭ{4qT4>7I,f$pwIQըfXr>@"t_EEh^BX%*acW7Tq{nh(c8[qƁ?+c-S~N`tU&N~#p2;2+T(} FOA o_GWChhD!1v$YD1%m#%yU[ۨs,P"-/T؈Rtʜ zj"\kXYZB9X/?HqߝhQ` RʁD&r65Cʖt| ]#=~tFI{Vtퟍ6 }}Y' NC~_#d1;w(hN.~}F^#WZ]o%*2婢O p`6~M\M /Jdb|Rεqs y0!!:p/忩Yr,"`ǧnQXRJ1n2`2m052!I;T Ҫc. 6:y@4oNE%}Y*hp"Q}v_ၓ]joK68x@-p w_Zڹ -FX 9?\ 0\~u+ՑkЩ]!`Y~*%`e'ຖ^ʗllx0%@V\nw'\y4@samZOKrR/R庠XH>?8c4YN]]x}XJ! ;pM.E+,Jۂ3͓4 r#q (RhLO#<N坽#XG$α%lo8`9Ž11ocw>`xsP'8?n;ߛ;$ңWޑ /Īƌgpc}C&^涳lHC`l^eϙ)蘂}Ab& vB *ẉ @,z)oob\<_[:&NG\qS(At4#J;}b2m<H~wA,2ς_?!~CsY_qƁ?o'^F$?C:Jb @DZۗ4 6W=R^aU6j0ijXwĪ`U0,bVH +i0 Rw@,>#З 4'7IfW_c\ HhkcxvbN@$*xxZ/We{i?$zqhP2ue*R 9wT7U7q:KNے69|kX&sNkq8@I@Pw?'/GVaH^p\Z~el@h`,g!gJk4x˛ ‘(9wfKEX&9Rc(QW1%:hԾRgN$'5UHjK柈?euh֤H@{28/ A/s7(X`PAX0cѐU@'{@F^s(GU^H5&P"RP[l՟0rV0HHQ a!] 8V?'IZ^Uu"0lŸ\i%u_Xh8U,^uS?EVv;#Ρo>݂dS _4o:+)Iqr/+Il wf !>@-pTrD3jO} [6p\ JqTJ l8`* Igy_EYinh/O00|U#\zn\tXi"=^:Lq;>tC%͓ %i8^UԃDhSMb*QY/9,'DݿT%ʻI1.?H4l1(.0:EM>| awua%Љ{xU` ~ v##`'3SFPЕt=-*%2Ym wXt S&`{PKU! P\^M8"`<]x9-Y x /O x+o">~7GYhȁPz3eMh@ 7 Tv*5,]hG[јbt=,gd]JX]-5h}rXo~i֨`8bB$8Sl&zsQ0$C `r_'7#PB9 hȷ@/ް@!x#D["g#$ σOLc ]#@1K@~{%s1FCR~{wb_F*yXc}iV< VNՓh!@l?^/{Fٌ!+OxaN ~C&+.Ax|)61֖@@@k:MPl[ywp~:׃]q .6;{}v O͆qGI-<  MEy< 3P<|3 F 0H5wtD#h:1HqZ<̩&:+,< ڍ鄮{${ ~+ B!s7<9[n^z>z+Mo"ʊI9C[帻f(+ņ_ހ,x(}FT'.ruuL>@bA,Y&i)\"*l%u'+~[0Yk%ɇxFew&-WzTscs$Azhy}Bi#t&AT7hɁg?.lgWG lBln'ytNð?c}p$Uʽ.כ#1 w50O05h#p9'@jI& n8Ī K"-`&KLi)$C?N`HBW7ET')|1,$ .|syKSU} ,q2  +(d]C@'tbޏ?s~xSꅯݏD(!Q&qD ri/lUݗ2#QwEEa=&RD@)2jpΡey xYWhF@C^;%xm{aS˚uzRa!?C \p#c|Mj4X/M1eGgbC$B+E3W|ڤgQ` ȿ1J\N4` Dn0Z ťC]%+r(ҫ-O |O0.aK,Řڋ)[STI7awPOJ~& w/٨/v]T[+R-Aʅ+`/2z?]ѥ7=KR*LtJg?mJoo*ϵ!JIpId}Ţ-}DSVOeu%3ʄF"|xZiITSuFֹI@h&Jс\^Qm>^'`w [c?Xޢ?=)3Ko^ĥh >,m)UUb'ambL cnL! yY6Oò֬Q!u[$['gƜPDV}F!6 i3yWn ׊rI=P ~6 xrrw5.Qpm n堨 -أP09pIWsa.êP=MJ*OE<؀n Ar_6ؔ+S.Me[]&aYcӡP ^hmo=d, 9ߐ,Uh`7_eAǒB rXw>7Gtb|*pC\I~xTWwr)GxgTH)o&G+ i>ׄNtYD5VDnjsT?NDD(o(sRjyc6u=xd*D|AY[az?L7C#c,̳P&DMɪnMU>!dYDɂ%"g"9D#5(Hn= C!:mfqU% U'^P~:eQ*C.0F!={'EBfoz3]kt15~y A kC@!([z}ۨQƨ(GYDDE%5qol6âq84vJ;//<_dy#v +}RaaVmh@_Dzؑ3݂<\`R>_Рb*c7<`/SB0%WVw_w~kP_ු!0v q -MAytGo[gC"Qɢ4iz`s`@ wGs"r(Pe#AARbUlΦQ$!|9R/, #>- &L\OէI؜kOo5tD gta^ϴ ̤XS܈Fȑ<*x$P#] F꫌D @VGr7R5r]eJ >m0f.U~vY kt!@@TQPؒ$%-2co/YjMxoۖ?XR÷GoW^-_a@YNz8 ,2n 'l4߇ JA$SL> 3 pG!ZʲPTҸsK!S;V/XԱ^CE(QE$X)ds ԗހ] 9^>gIn=u#zWI7۬Tֻ!(a7RU}ʲsFm2CAϹ8l`qD=@(f;hMN:9LtdY;\-F&MYFTf v]n zd,ʏ눞7)yEDxh2Fx%wgA#) ir=<fq6sR>m9;S+bAXVt>)) `gnCZ6:aar 7uTO!}56mhlOe#)(n~;2 & /_tmlx/ȮE#6Y\9N~! wN؎ Fvئ8 XPGq!0 2 b-蛜q &zi%/vH5%PNdQyK$1M`J\Q:fY3(DN|76e(*aEmR;4[L,Fx~ HKk+H7t(3,L}>C8z5g=wCQ[9؍ͧGf$'caᡩC!ff d^ELJ{6LWh s:QuU `wh](%m)_)8\WhyG(@;xL(L][=48\$ź4ꋅLXĔl]o𝌽2r%y>xîG]3z|/_q k(=IiP]54ճ[-%_ɻsPVԦZI'QI y-mg4Ė83j Curqی[-Cc#9(Hb=5nGj}/h)l{zY~XĻm O95_jI ~z^*iOڌh~99Cu' 媬@ \GwK +8:Q/%]$*hxACŵxa1O?\G]xdLA OIx TGlLG+u'bFݮC j m׋ƺxq4'_|MUGo1^0>l .r튱\ P/XDZ˵end1w 8X; ]G%;L< y L9DZ'Ap<üCEXbl8wAZdɌ_>[ca|~;^A5V#ޏb~6]u?<+?m **e%ZC&S1YzHMrW{ ςݳ]Қ6MA`Gu6ŏQ,rR?NWa;#Ւdٳ4 卺vn ΙoY%277|wiAԂT"5(uF_=SQ?+VD|YX@=z'۶)׶;f&'MYZy,*>Pusp_\u>^G8 X{(;W;PXۖꭁ%*ΓM7A`tZ+|GPrW*~V>.,RiAft6mO߶e;POֽLIﴇʸYPlXi;MM`XEoZM;ӈb5\ }z zd!?ax}NN!4s%2Vi4ڠg\*&j9K>޸WŮo,8l{B ݾ6]ojT?E$/&W~$N8_8C?OH>c $\f'XFk >^e<qA vp/yf:]U6|͙cӇ#Hpؚ%G 8}>k*?1I6 TsΠJGS5`t/vB<U0Yr*_Ϣ>i /_Wuwlqq@6i~onr7ffƩ'F 7j Nzv QULKC'd}A(' vq0 . d"- 2E!؃n5S%{:g1 *K?%巏ߎKY?8QjhX^8:p~a(cD^Zv'dnUb'O#5!bK'quAȱrN8Y_r}E tF7Bh5䰤~bW D 8Q/=CM1xF.sZ4ȖMJ,'n}|kIs;uy  dF憕W ݙOK*1V&r:`Kku.F IԊrQt;6OuVTVQ:*",iyY ^w.>*)=4rcaF)N7K mJPp -EEᮚE(>d/fa(Nb3I`'zqYX0ޕ4/WKb<}Vg2(v%Kdajkuo؝5Ղ!"jjID44YYھ21y.O|q5$ AN*EHcQ E^ B,oꮮ_)ED#.K]&H??An>%Rh/xX>l#gb}аnrt"T!Wj'P q3q>qja;I">Yp51.)W^s9iDQ *gqrdZLxR\ rD,΍p;aej DeL\D7ri¥K@Tք|M Px2ER<5ci;N&`U= *W>k;R9%K?|ȥSMGDBގn?[{T_Z弙_<;4qe5)I2^GfY$ dz(W( ~i{^~9W{`Ok;sN+2 UZ/j_(X8o-b.y}zDQ=P,|f'?c~}d && Ćn'!XJU͖lp`E~bx֒Mf='`F{ũ1.|ήg4q ªΡ=`D%(,j 6NvuPv!"g Ѥ,Xl;$ģw'}=ǥ9vr0vahL'`'@g4YxX~G?iKRK!p*QVh ^yc.X*Up*E*TaN.WF*%.UO %oZ0SERτbM2;;Ɵh }}'fW7FP&uz9=?Ygӏ_\!_tVS@muɔp , v51Nc+@"=[gef uqگ+7u%2R7$E{=)f 4hO#ܷYG %dUlZ1}nYpI_Rv!LPtgV;&HoC@WTKmxwB2?Y49"Qwj{B6~-f9gv[cTȶݪ!_=B98ܻ+/ܵ*q,a'uiOȵ R9R{k G"<' ꡾I XZpY. cwb!x"F|+a,k&rf ĂrZe*{Ex"֜ln>BP]uGL5^"*;¡~7MiIP JiCAE;|> RO &>W2K ˵tUNK14arOW/ E * nt )0$)W CǹMcB1E˕qΡ^U5~\uV(mEMwe0{P+r_JY]gu 66=0LmlpGђh~$PE FG#GLk,\Ebr$\i q $KMqNۂH]#r-8'p8" *:^/9$Xv"\JXp44$*k'jMic)v 0rۦnjZzz,'AG<6>S f= _] s$ؓM'i[U Gqq Ki6ho(!׽VDiϡ_nᡈװ 1v,K;舐UTP =c!{,~ztJJDuxBkN!su;Ԟ ,eJnJg$}I4s"Qv.u% `h?Z".\GVq -=!ό?J`./} AgkWbRT) I4j ̍ӱ1u#\Ld >\` :g._y:/?S`wƁwXݞ-@~\F8s,.-7|Z>5.|7B-IT> QsC|+ wiDes k9Z(IۊlQJDKR i{uS5? wљ%6췔hZ^sir& rn yv,~ܗ4 {6fq@'6tC߻VqWhDt#>mLAҚ}fML4Q]O3ZqfDȗ W9q Zk9N{b@9f?">9/򅠴{ɛ'`)x{/x%PRkgC"3EWuI  eث{"IrLS=m>D8^tO) I˕'=JD0mHQqKXBf&i8 ;WklӂD)/"2S8bTD6 ֪oc Ij' hW,5L)ɚ ! /`V>\;^I,؈ Qk~O7)?KZRQg,*4~ 0F_6JqkcYh>ŠP G)]]=p40u?Eff>tל \(Q"Yf(i;$"dghU"*<+ZE ,\8/\lA4s-,]D=L~Qڎ05_-婝fC {qE?yv%F 2`,N#VX , AGt" g34R͉ţwb\"/t%xO >t$h"`4/wFL+fz>s4?A]ٲ\Zx}u*\2v?I^ATO ^?)L9n'Nlhd0 8,KV|enUog#Ou=xHvȡ|:3n6<`QXFg'J&١.ZvR?oh~G.i{p0B~ٖlq; ZX!Iui.} ݡϫ'T]2vϔ$c__O @_Q&bnomwK.&5>>G yR2lK#3;lKAr!? 54,OVPnA4+\Nh/ܿ͝W;2YK7"$KhҶCaӎViq8=v1]4|:qt^,lyXXq ,\.HиpK9NV|7:8e$D*ƶ 3@ b܋~ʆ닳s9 4]7&wG)x4Yƞ3B0}ER4K\|_Kg)_%;Sivb:huk̀Rml)xL)M%xW`q8xMx GIa^L\ȓTġZ?Q̡豸_kށY֞Pmf>'mz)ѶLԒ$R >bΌج6fv (aU{:4Gⓣ3ARy`盗mG? p;K~䥷U?FLsՍV;-Bn_'ט-۽5"a>+U֚I΃F3P0vt1O˹! M`N#~+;m 6sF`5z : ]:~oxo.ʪ&hS=v*K+ȳ1o A*!kip0=ɂx*آ NI.+S,@{@ XS3JNH Ɓ])fF eO,:8˧ ~ &MX^ $8CPX??Mj@dCX;BjyܑBC7G XDc(oҊP)4 kJd%&$j[jU7$5ä`$n]\'χIǹgD%p_q(=rør> 7A7<)f\Y93.-PũVZyC-sgO!)-Q/oy G|Rj35;8Fm{mj}(;BfNQR`Z($v>EĽ<Fyl? Qs}O: +ME>@0NP!q\'3#fh⒜8'Ȇ(VSuEJ]M}+W#Y7!];}ڗpٺob3gb*]zJqn}$"> 'G6lpkV?GG)f|?u XC1%Y&vшna ݉,dv\^f !|żxh> uJ7Ϗ oXpl|^zƁ  kMoTGyYVI.v{ *nC;X}hݎڮe-KSО` F {[Od|W(shP)+{ཧ١A7u WJ ʎDwDS4Wl6زhzWtIP}z64т.rvsKؒAQrLbI[~vCI鏨y ie|xAwV AC'ܲI4 vؗ?CCZ8 {aEsG7yV谰ڛƛ]ɨo[oAqɬԧp'^isl,䭁,5TuqM-C+Ru\zݟT`r vʑt G<ȭxa5&I"E8J]'#" :A])2|uF}R)s&o4B}7f) Q#t;zA<PlFq7CeL7UxjOۻAèTx2=\rd|2^SbvsV3jX=xJ[tn.fP(*\_E-N@-?E!5Xհ욳k?z=PD&E ŨbU+wQ)k65?ʋl19(umHq {[pﷰ*@j!ώ?#qb^gV .ZB͇5 >2!zZGes*8?,X^~V'_ߥ!W&kP/n-e~NjZyH{[GcKBAĦ^(#0H7voGˌ-YҌ5IO4tMZ+gA81zXSRٛ.WhXP[dT]_PuޡifEoi@qgGɠ85\xNUF DX5 dP9p|;P197=7,:JIw>)KGӒW -ĸKpK 8FϡE'}[!x;w꿳}~s{i׍6'%zO] R=]1X~:}~a)ELs˲eF`z~_tǀ[@Y' -,e% Vb `QGO桐V[X{i!yMԃ{wr րQVZ:; R,a9 Cg$G} ;fC鈵(E81'H36)`e ,9'އ9~1cib"T "`L :!øS^#p˱moGJ*7b0?0&(חK s5(En&˒qA *p8 3VNK]G4σ PYDQNMx?QqĀ\W?zA`hGlYJke(x5v&?S1xQ?Gkpennp]SAq0i\=qdqeԽd))_ Y+3aghY Ci1C/ۏmi|v Πouzb ]قp],iV5{=HPfcgB@yR (wȧo'*A~, d\(IʝUǢo_/ whЮC>YIUޙ%]XzPKCB Qii$EJ@JJBBJCB ec}fw^տ/s~3qs=~\ge/JG6Cp\.;­'o1˒Bkkuaق|[{I?ug}X0|YuSnO|7J{'T7>uԯCqz谄]ޗkԾe ƾR'0ڲ!3Y"5}Ƒ;gd>("ynpZ\H5g%I*Ct yޕ:n~{[\mzF|?$:~q|Q) zB7f rNdEl,5<Pk ; `Vv;p[B4&n AZ4 B~hDT:>Y40?w0꺻72Zaؗ8qL }<^+Ed2̜.@IDATwQcҭ}  RMWXxƯd"A}jYG5.qQ7:K+Ư&@#M]NiBdWY:~OPTO42]oݝ7a 9^+ڳFX@l aP9_ga ?en $Q&E9T Ž[G\S;={.i)?k`q>7tVq`c܏j#(*(]1ڤ53wTO5|(bk XSSe,4'E<&jFTeL: s/@r{!{c$#zm 6U/fR_y..&O1@}exOFׁ:ivV ˃2*!wϯb "3`1$bz*GC<!dyZr8N31ޙd>Dÿ<0Es)\'ӺYO %s\e$zS)E}Y&>OJ❫5HlkY*JC8m䜢L:7u`NK˰=I)XFt~(((CX6Y鿵zоW5n_d_PLocbȻ0~`bN q]3wq5DқvdO-z1w֒ujS" Y2$vTMLeێ4e\uk49v t8. &q[j?`e}*`+sG[33*)yg{Y毢N"ZAJE@S̩w4sc:0Q/zJM'yI ._.v'j4WZ e+u.iػ1A`Ng_oqm2: ܊Ex W/@7k4^*㕸:}! >+^Mo_<pw#jB(\i!ګbV%Zsӳ`BUtFz֠x!NiPTS[) ?[I\uLih%͏'Xjva2VOn,AoCd}Iz ZCr|WBY#qJD<  Н <w0N+az_xqYZLzKL κxm ] NR3DG. oθ‰XirZ) GFynޕ.+7}[A#c}1^h{^B~#R(}e~;U}@joKM_XR[t0Nj%Zc IX Y.謨ԗʀ)F:dϾT[#z$lEPf|ז-|"y?9Ex"XR"eGŌ9p*Q7T3DuPgC.}@6#p1yᐅOuȩYoX!'T/^m^OSHYA=؂8mSF SR\BzMVb+Xd}o'@Q*`~l"Ůq5rJ=)'CG@Jyyߝț՚Rмt+KYj~U\YGkA-(s>Y#}} ۓV$^gB9oH;USJg{ϕ0T Rt)[RH4#r^>̾ :I##D[y%u4gn6BA|SnUtFd2`s$MӡC<+0~wވ:G7S hE6”u`1.NoN8kWAbv,({#𧍀f]keE{M6~` n;f ς69Ko'o@3M:K `{-!'o@VgQ~2T:D_Ud{Q{u=H#eo@co1$Cs/\017.wZh{򊦠e~>y'󔔰4OoGޥO+IcǍN~,o7;'=M "A~Gxr3Q#0?+ !#NKM>潒O]V"fd`LaE;50"FUAoj>~)/f#^{" PI^Hb(0B15b`> Fcbֶ; bbnO&A镞=|@h<K\tQxMsbesSb+DWsjR *NUKK1, P˯Fܗ,!ht =5˰TDQVqXAr y%?rc}<#ެM]? W)_&6j/ć| %Fhڳe95Vbq7Җ=!Q47S .2Y7RZæ+)I0 o.uH? ADg>ǯI=Ko9=Sgې{F]/m3N9t8VG0)XTW=Gv)':6AYN eÛbo_0Yvcn;) ӢNj3ʺz{5.Kk0~͠R'JFA(v;H;k2.PQ1bRvk NTwIGɎ 90w/z}ϣG;n=K,\0͏#S90s]K,; 6,EfhngS Sz7߹  A0&ЀG*=XnVy#G3w,D"j\$=E_(Aį(¦{A}vs_Z P$Qa0Ƴs)y2yԉ &RHwK"ސL!5 &YKR[H~9Su~;yZ<8^Z~{<~Ͻ+uN1:u;QR[^nQt݉bߵh\*U/7O>)jwYm QI=z /tD+~S<4{AhKc/Ҡ$w3bo /WT_z`]'4RK4!,kȅBpϕSf9z @ rʣY ޲GVQ=qNJ֌wo];ա `Aq/J?-?,NOתm$Zy9OFx~!S#jjO_**S@|S^/{wCql?8l$[Zomِ9Q.0w]ǫX\r{Uv!b#-d xmREVhhX|$U:"pkWOiDSCM<_|iahxtn0{7°anMku.8E54t7*wOQf盻A >LiP|F ؘ#xDLɡk.Q{*y.l٠JGҩ˓=«6$I;WM 64DG/OV<(m&Z|ሸ}b7aݚ{0Θݵ0?cKm/%P⛁&Ĭ3u2AGEG6^XxiD~h‹Fy @o_ 3Qq)Nm[ӧ1>ve %KYA~V;+[b!YYajcޫZ) 5x17b @l3.-0Lr{mG5+$+S%aQ*,<Üg?H}ЩCA3x;Zi@GulUTG[Q_<>}zcL,ҷH_FmayoYr{waJLIbꂂ\҅ R2=ifqQLa:2 tdۈb6MsWXOVP5S_q- _P;amenG^ /[3 ٠ 8h=# 1vH|xdt`LVu{NƬ;T,.z&Cۣ2xU_Cɾ_ЊPo3;-A!y;|cٙgkݫ@ ӕ0fJj`7N٪F̒,#90*k\oqivоUz@|:!ɲj,kN_0cSVW،F׫]tf~E/h.䲫?WKa}IJʑ'e>hBz!2k4WzAH{4s+)-2:H bVS?tݸC|G^ؖ$ \&3RNYu*~c)H݌PQ>{<A?W\M M^ake_zX aG+ |W*=9ECt~;`t${޺{|6bndgGTumͶ5cW#ʍ(F7]" Jj~H,*ڮWh]i@ʟ.ZrKyeГc)G,4zzϦh"]B!Nݒ4 24L5(d )$F ?%UkԴ?*ل"qi;|Y)ɱNZ[M9)hJAqc]z5.ÿ~,e^C?ؙ"x  J. wwg F0NҰ}}l:̿zn[-&s.~xn .nOpջrޖQq)U$3r69cI"7\&2lU*O3S]^aNI$쪿h, o8!4`/-??~]QA=[ƿC ū?]'M{_x&i5k)|F[cl-Ieݣ6?6#hzsuu|0U_ic;ם uAC'f kġ9_]1ߟzf2&[!G- 5mƒ;4ugA-zYl6*RPYۑw ChdI- ֭# UuLaE;ᒊOrF]0ja) zЃ%O&Ǣ~Y}7ʦ) K /&z{uu0kNAk5ν@;~dv?>%8(D^ļjwJH 8KL*ZGYmrٺPoʩ=/ >K1`yBT+/Ht"`i˱]l%q;Btؓs?fM: Hs|ULrże˧Wvv}~}FS: AKo(fOgC紜Ƹq0f[s6cW@Z(+9 # vOkH,`_<م}I ]NM6b uNsB@'~ G Z, n9|߇uys? C9f Evȴ @&R2  R5&M2-KDtg;z&Ciю_jk=ʿtdZ~3]>k Oxު1/Mhk&iig5Ҹ) lM>z\F'mz+?_Q 4  cNb>OtnAp-'%Nũ.YGw,^jh3f牠lfaM5Ȝ(`jbk5>z؞ЅPիjT4UnN{(pglqv(>%{^Apy;d߿#w@t\陵HkHA0TG4D9aM2C(~z9R amiky_I:a%Q5Еe㻛@){ގqcw&V%brt&9rzSA8~ 378@DlUb&]wMskeHH!?I&m}!?693'`'`upE@} pryR}-eMk"wIs{!y/]S6gc9J5bWLA@\8ĺq_Ww_F|r$rip*s?E!8Pj[<1Answ=g14Ol oW lSB6\ PqD`KMKM\3MSMSg0mp|E#XO4fmޘ[l98'@:Wƙ ޤDF|.QQ}`JAYbaUKez k)=Ѩ%73a"u)9B3&o}]V*2$. b!z@4rjv@5W508 <͡ *lvuw{}:Bk5GX{O^'mn䖨>]' \H ,OD1PMKVBb2S8?qu-I\/VbYלuw4 -9r(¾){պ E|D_ŃI}(nWץdpҖ7zk ;)Jo9 x"<Ølf, cDM7Enrd74C tF*jUm/^ꖌ`Ega̿|ޡ]'j2?Z\e7B,dޱկEnB31%чL5"tTHyZLh3ck0,ZY5o%KtgaX<ſً}##YCS{||K>ssiZ.w+=VYV`nТg0Av`Z iOf3~H3㮶hyƜ#6G\|z[\anH*1m[s/554wXƹbh*;қ0o4r  WsASVBŠUtQ qs2X "@޺x9"<^m`^Όñ#jȮ!t0P(WO 3}K=ȭ,F6 aj/>Hq!_? г&F>(CȮ `OֶCAf6%ylc@{Xӆ3%"9,Qa(IUGbj1Bb/-gykkəMD Jb4Lc7!0˲+[q]ז^{q-RU`0M`SOT^1r |ujl#ڹvb*=QnyY)& { ˝֡)tu֪> y ~G vD!hިgUo|ky<zh _{U0W\Lvf}~{2h:G `l^A~Yt5e-઀e/1nR:@Q`گ"' E8 VM7wp F. |OXQ|hjzJ~ze??^\3CHP v2ĀQb.SߌgiQA62{.Zh~,.ﱽqbf 5m%8k И А6 ĦdC* 0n+ZV@9&(r Il9Vd.m^W~{LL]O@œ<\@?E h+Ó/Xa_+A5v"%֗DPY߸ 0rؚX,) FaؗgmN^ڊ / 7rl_!`QZ :TB\ysSv dDoZt:T\#wD,L 03Y xd?E,e1R{iU@f?(sN|p$+K+=|\䒚ڻ g,@Q |RU.Q?lxbЍ~eqhN-,.G@vAyG؛{ h5+[ 9 ]qYŦ`w3J{+~AP ;Vڕ\n `d]`)/@&`5 /$@ , W|L x_V@] ~3+]Y~匦'ڹE@ p1| =@ +~/v s-}GXZ@CŠa?{T 0@x[+a*Y[@1PqL~+R' q M`aCH@AgqN X(ٵ%7h&[.E6 $qX? z X޷]>g},`q+ X,`@Tt0 !EpN<*[ם.ucm}~s[ px+Pɬ}uI,W_Ҋ߼Οv;` .~&pE_Ze|PWhXM< ~,`.XWiwa+!+ kyĜ8 ?}wa|@u 벏Nj=)CpIENDB`ic04ARGB}PMIf]r_}`|yfMSjQH\aVQT[W_s_SdPxrMQLljciwjs~J]Njlpzgc]_z~K^GfcapjhhV]OjPYD^UIch]dZT[TVMe?RMDLU_]mctWUTd\UhytJ}Ykʹ}QǕhp bSo nHi;_Loޥ R[|_C ^gNŸñĀV[TojzmmnSYqWOcg_X`ddg{iZjT|wSXUtmhr~tƄPcSlpxoj~QcRhhkuybUpW_N`YQh|`d`^Uj?URJRbtl{aa`leZk{rfp§Ǘ ؗ| ֡zw ƴr oycçǷƇcwh`fb\rrpgwtx}jt]`ggsrǏ¥]m_px~YZ]^nglq2 8nb{cjcccat0J}uwmhs?\^X^8%&n~uxw}weqW.yTDǜ3g "~Lk߂ %<_%nݛ MA)3 -;o4ic14mPNG  IHDRsRGB@IDATx|EׇޒWATQ]+EW@*b@@EE@)H-/p (>?ݝٙ3s4Ǎ $H @ @ $H 6+6 a $H`[@$H @ @ z*1@ @ lB 6H2ϱ0+]-YSoQl"8 $H @ m@m A $H`C$+tBf) l ,1aaVÊwf3f f~f='e icYN ,<\ff3YhAħl9Yq_%)c0 $H`딀uf\@ $kHxa%Y{a.P#@'X@JЃ0 a6HagH#˄ =0 t ],vN"Ztf ofy dG࿯? X  6¬(/B;̢l4e $H`@`ت/| @!&m(pw_a 3= z?f5{ / f[UNIaf7z¬WGaI?YGED/ 00al?o <,\_"P Y6l,my+GR\l,ӣԅ@ ؖ$ H !C=+>ff>(G { ]_ЃXOH `=G`/P`=mYO +-JeI"-`̽MUu]>Fb<#p㿋*>C~cA|Zz Ay!PTiY#$0-.̆tLP`)}A >Gatrߗ;ƌ ܹB5y\_*x_M`W @ llY$ @ U=sO( USG o%C ^|7(1K-X/Pnt!ql 0ˮ&&̎f{/D.~e .mS&0x)fo,f=OG?$ȗ'\‰ J,*x00;{EHC=ܥl&wfVff"0'qQ6/Gbm|u$g ,Mf'.f{^&PI ^V@)$H`@`z.y @۩Jz݄=-P iڍ%7_kfB+̮/P4 c"(+ 7g .+P|]kG/ }% NmxZNf/-/ ^cDPα +yV0;`Fb8Ul$H "{G @ l7"P#-GdC<ۻjFO?bSP0Š0{ ~޲a.Jb;QKf%X|=QPfb=Cf=]p`&cx6-Wwf @B+m}cGԯ3aٸ^`)x%6v$ $H`sK 0lH @ $W&=-_X@ax@ZP^)W(+J<f5<0~c\3 /uj[w`F-/6}LX;lȢfdnWpGݳإ7q_sp[wJ^>56a΂|>L}0=H /˥L [ z O=G)%y e#0\%?Lf"6 $H`@s"bD"@ @)_ 6Iqdc"=WH! z(_ %8.W[=/zؼl^ma G0U`ACQkw' c/HM_x⾠݂7ʵkg0Qw0Cʻ(ic3k?|urb7шqԖ G *pu| g[O 1<VLtf,Fx ?Ȼ ~nj,'ߗ$`aY]o0~ |Zz˗ XcX1w:ԇd-M n(_ܡ\8E}pkf_r"X]~0;ۚ8ׄY-{C#Y:UA5XOۇr0z#ill᮰Bܶvsvss1B6X`mA9+M`D0@!,ooᅫ@Ώߩ2٢kނM zdXɃE]<,BƻV }wC>H~ @$` Wps @IiXTxiq z4O>AL(< O т)=#sz  e¬C^Ved2 X@_,̺D ۧ B=o/E.q z֚Q 9!\e[i!w)t%Ԃj֊VÑbru{t0ag ?,XW1t^7}~>܄ ftiipA$؉tcpp^Ȥi9ٕ>Y"/ 6GD o?s9Nwq~->j/&C39gu>zV _Bn]wLl'W7/Va l`Q3#o/Q`wyނ@ֿ^ >w BPȑdh3󍭍srK*)Aľ,k . Rۑo_#>ȳW5ff'%x~Xk0!ԭ/ْ$ݞf-YYvE vw(pCpzly$>@ K 0].@*R0h,}Wp s մ_z0_W0Rm}{]5H`U`0xX{eca&럅ٹKٱ %욛7vA{wz7?*u; 5=%w X5ٯnw뤹6ƘpV9?>D54Z`@%}T0>̋m!a_E}S {ӛf?_RRل t&O=8υlTxpp%#nxc- :@_qï߃?`SC' WY]k{@d=V+N QWnk&5M:\=De\#ן"MپJY@U)G @^HX@o&P@)(" :<$Y^#(!w4ZC,_\o-*=8 naŹb ~=Y_=4 #>zR~ ڃO  /o?d{;#bG3RaFZَ/rg@374$NBcB]"(:(ٵJ.pOmv4\*p6:yKT2f?+\0/AHU={:6|<kmS_Ny gDOoܿP_w>Hqچ)c/O;rѶu(nQlH֖>i1-6(OZ'٘ւ](?xO)}]l賂0YU|jr{wO6˺)2skM}-7ɕxC'zX!?r銳ȯ:\4zYK'^{̳ VV.})Ny\'V+cw H%.Xvw&>cȉz fX @oY|8Ov䗗,O^dGgߧKٙS7"b˕  CA (GqYc+Cxt( 5 AC^0t?  'mn\w(:T C=V'6}?'e4tt+6PF(9B0P0AC  t<#4@No-(hVw@A]([ gn]K% yJ{sfg 6 NMج7 ~w}m o~N2\{º7D[\iߒOKں ]3>uǍǡ'I2g8u.{eC38{zg_;u ܋cuD ' h'gK=`04 S5vso\p{I_cٹ_3~Y-`i9}wX줒3E[?;'be}\ٵ Ip)s K'sp%fFWAȮS鍺tӚ_;jѯ!=NwӖ߾y(}Eㅅy3iXQN9BBRO;U3NГy(f҈ tA "G.w'Sfͨtx5kpZ7q'y Zq6m?8o 8ޘiER.0l'mW/L#HK YAvvQ~G'b_U]kQS aWBm\,6u۠RT ghEjO!ۜ6!J/{`C- Nj# <5({+9d^":#yT^.H?RK{ɏx-ȗOY뷅-k'Xnnr $H  @ X~Ck P"D+ Ղg  }-A&ރWBCϫ'Nw\@֗P&XyUO&dɗ 3 B硆(pqt7.mV6S/VckP2'. ' Q{Adn#[nzCҳW* v%3_2xkdh/{8O Z7FM7G F|$rQ0hAT"wW nKؗQxHdR+,8fU0(>V CR`nCޔ b6ZwcMۡ/q΋(xlّνS֪: ky,,#6}1`lW ر 'Yh@]E^Äs+~"TcH (T$H`IƂmtApF4Xp~pAzA;9mdMd|p>Hz9{?=[{AzOEnI@!'w |:>=o=4+P.mQZ3Ę4pSq0,LgWA(yv95{wMz< ڹ8Yr7+xj( ?T ߄d5W8R*u$'r~]}߽Z3? rc8'Q?ϘS]sُ !ycϕ#?3w ǗBOY}w} f 눴7 $Xw :O'FP2V;z j^mF8;؟Hu]ΥULH=)F! /9-\2 0iW YX "x.xz֣Y&l^wP#NT WGzXu`@qdߏ'iڰV4eͥ(N9,CSz~8@`(Nf 0(| @[bjD<'Ds 3 L@.&|,:E6{0{`쫧O VyviW V߯7AMQ2j!4^"Ǣwϸ<,-N5mA<ƒA0T_0`(QʛMYSO0왂L D&nu[[-Y6q cqGE9(8AM۴;V7 p7+?;;uv/j~%5Ky5IQLoDoք߫ ~cc~`ׯ:$_߆mnoG)c944vQ QȔ$ދR30_pu^NaQi~ϬUr$s`aA=6Tͩ$H`ے@dJN@[G=ҏva}AD\w납xyaJАH4 dǚjib*ekzg$U[( }>k0G=^ک_;>#XִC. ]' 3^t${enkXϗ z2#=LV(r^&~PG(E[ nۃI%tӏ?vI)0W?y}鸻0}d3j _{6wK^|5<"<9UG4!m6+v&جKDzG|-;+0P])y)P|Y(>08ZiI) RaPĪƪ?:9 *w/}"+rϯԬI4cѼOE[~"`!CG -"'E9N:^'Jvvy$xڜ?f-FvTC_WΈJS2rZYclA7YC*5{9؇AEc%pF1%kݪ&̨!:qy|y/A+*ego_tł =~%xN|@[O{wxN`#|#~+_ZdGtirqoqq@CU蟙z)|?i;dߪOO̥wLIL>Ku[v|W/]faE3Hs3+ZK4|C@+>æ8 yZ`zNp%k 08H .}#@ +6xE >SO }Aݝ&V+=b_ w{mCPwy5C۞_oW!jfr\B02T}XFAv ec_l5#~9V١ <ئ%;|pV#7$MsդۥOo3Z] ug/0G=Yh@J"h n^}0"B]b}Pb113kZڳIߑѫiأNqiyTQr:8KːΙ<7#=w(/̛6X׍DZ@V ,ھb^Q*nq$ҷPUCÁXz:x*= BZML{Us2\~_GPR ߇k6nwYK8m ?[ʥ}}۾ )ֵdV rvvZ;%V!`UOyߣ͂ƚ%1ã^Gg씶s-q?+(7ÏEGm|K4[6WT!tҮ)/gqBybb7:xXn󣂆Ikwٟ--CӲHU bWjmBp u=0TkTa9,}P0 ~p_{S0T]2 Fjuwh~?nE1I)c|zHBs"=TwyqעKxUw<k[p0lA9Mp`(p*g6@I~.<`TP0M߉pYiJj4'Ϛ?؏{o?S+^,A ^$%E@=sR^ή`(gn!E{:qwKp ϊ>@Op~?_諼{s\y\0&_-P&G$X8A聻 RFr}C]@3iWE;uvx]S(1QB;Q_A zTK^6ٴwX^*2X\aWa=A8gxldnQC$Ahj[Ќ#LRops˴3Ϭ L:rYs~h`x읾8VٻnfW)*V,UTbFncJ`¬G;F +^pfs6(t0QQr~c⌫o $K 0lE`;?w]V 5ݺ=s=_WI[MA/!>VЀ x9#a<>)4ۦ98'SNGE祶w}K ]1O%אZ4-I~{k僅yıVK' CGy3X`0AyC khعyI$, *8XH;|O6ye<-ŐZ+F%җ1>S|[ u޷C˝] ?+ F=$vNsXSL[ڙy]pL(?ڔotq ;r5{?Rߌq߇n; 2{y.K;ޅ-;_Y[WjYËC>:wnSOOgaWϵ]Mb+( F<.(BZcdauto]#0xZ) #%V/X#v$9|2v¬oOv_ fLtU 'V/6`QW=+߃>VN,E<Eg@{Yָ뿟Тc%^IIuv[+}{I%4bb%pK[|BoM4ˬ4pNȾp/C6k@rZ7|;,mE+;]ctίs6}i0}P]z`ߵJ4Ps>ܽ "O{ wrOi<j IN^OND,{ݶ?Jnڵ_AkRrk`h[ ^"x" X GŴ_%ߝgtww;kiXv%&? 0%LwPŒ{UWx$!ZD*|iſ}<7#qE"1-!Z=uzQ? 4EoчCM0Tڧ 9z{)isuW$H ?_fDR_lï_`db y nJk&p"2οq%BYD=&s{3Ai穡*QNNyi{Q깄? +|P-?O`D 'EBߛBܐG`)K,G f ώ d-^]P\R՚/4nOu}ZU B;3#{OXLA0|{Q7Z .K߱Hɯb6fFj-nJK|;y&w|;bAf=R ĿԩMgac,SN|!p | v8B0@R1;XJY*{>H`@dHC@Ko{nZtT)pG >%ٸ_,._/p4: ]m٤\<ױةx;͈݋W28Aێ" !: 73K^1urg>("|ddXR=O<'?SfJ4$nIiSR34`vO㎳n/{{#֋掰. Pĭoj5=616 ږ>Ȭ>>;k8]jXp2`wׯMNVXIJ1rk;/` }%>5jζku?>Y}תqՐcErڇƅ#[f6C?Y|ʙ[(4s#kO &5 ]M Oo4?<%Z#DZJJ5n*omnbw` E~j`+ZOfcs} U3͍\Of&frvjt~nmm?\Tᛧ|{ 3_>DUVPsrOBЇٓvzcӞ g>-`8Jkr$uYy"F/`N g` @=E4K]( :{ fG,a1)㾜bpVJyϮ yyd3c e > 3p]##fSe0'tR87:o_!۲?u:9^ F f^mSX|@q }IX)吟߹#'"E@[=(ܪGW-}쇿(Enm)diodMr9wbY#CQ7dpw_&/t- i! jݲ(@vbt1#"ۮ nP-_"S"Q&x. g}|{KQN>Om}TwݹuO q~Cw)o9?obQW bQ띂C;;DP~xr[ #8InkΟL]R홝~ʐ`ͽlK;^P')0gЕz=qN{7UΕb^72WC FV^T}GQ? fNvxO8e.׿e['/L/ XדPSYvM38k=`¾}Pt! K=s A]Gp_˩?Q#0w {;#?L)x\av)˄ A_Yp_եzG`iݪ5Q@{ݽz#{s=!s@IDAT){YΓ'nL|dϺˏ+VwW )cَ7|GRF| Fsv7'2n,|jdBg$Ŕeϧy.醴ԏ#.ߍ=` k ޟEBߛCr-=k/A=J^f7=CVVc >`>ܹw1fQ*kC'uLHM뜱Uޥz|cN #FVJFyx׋1VOjp{[{` j@Tk#0,@Y증)zc!AYl<9! Д @ .@.)H!'ɿ}[6~n;a.#A}wAݝ-<1".~}=Y.>;_lT1&) C!= ^?z?ڋb9a 7, [챐ZD5&EJ2c3ﰷ눽/_v@|Ib+R$KLB}hSFU#ޡr}ރz#[Q ^Ďє)dI~zsxpg1_OyGõ=#Ss}[*O;Ƞdaf5a\"7 #Mc $PUlAۼUeO(ޝC˦>5W5쑂RQJz~(ui+z/ z|nh~,W" ]{7{%&pihFfDNtEZϿ6\7rd~~C"%59)oQ7nZM"o+ޑF'vcڶWfAø0NysQ7PAb@'5_LĒdr~bYhDDU70f"eU& /RFDHCakTבNv~E3JɈIWTޱZ@]Ꮨ.ʋD^/Ah`mLAe1]'Lg5҇তi{xkC(G[ӤНI )F=z枕PHP ('b{뢔2kݔQ,yL`+x.Ӿ(S ~W -x} 3}]8. #t,lt`[;ڷ#ONf b&(:%@|m|] h,;u=P @.̚7fg G ⹡?41EO>dG N0#~Z_1To?I>OwapkP(<߃Bأ!.J]}ǩoX1=`.yz?m-d)¿h`FAv/}1l,؊SpG(luǟUs~Nbsv\^Ղ]kaG[nsSң8$(W;peyC bӐdK?+r'rW8% >kS;K+"OIӆ.S,M6Gx!6CV? KRlOEVyG'7#ޮ Il󔤣ҦMz3u\miS]>;%oP߼A~Yn @xHʌv *3E pQpC߄ji2'T%+J~Sz_uP.];u$߫yRܧX;È^`ėS P/(6߻6;&;|.s_?v A~?&U`xj^F:;0ՠ~>*7#NN([!nCH:$0.~8aXq-pSGnbp\6ԽVC:S4 ~tIZ%wAʎ[> 8V 5u&,e SŚ,$(gyb8%(' )(wyi푚ޢF5BNG؅Σ4IS $48|F<=GQO /{\74UAO"qKNk)~j3ȞLh`dI+jtkRihwbDB=;ݕPC6nj=0x0{X_>-/gǿ}ȟrׄ kd Ĭ/(̮=B-巂قr/A"#i-$$ ?*~M%*g3 fOvb;A^&h -Ύ@1GHm)/ $ zdՏγ>Ig^ŇfOn3}nطjz|Wk׿7 X}N(EM퀿>UA(yRTO^ ս SQi1ބ$p>?ooe[g C#hL_vjnt’MܯcI?Zy= ~bM_+ V)_b8:_4}UWH7·n a;v%gtHm%5N8+̐@HkO,-X[@o{B'N~p=fd)OE1FsiܡU9L1I3ӺR"$eq~}a]֑>!z@H/Xς"A9m)0mwcl=N}@7yYj)O%^oӵ6B@'jXwsr+ǂ b+Ғ3 h8K?r2I B}ezuO/9?-b0Ϧ\ߡaN9\3}8RN^NMoxz~G[A{(B ~o?W~/5EWǻ?y
WyV4n9 V$ԎPip0$:hv  s>>4vKBO1vSW[#q{a%O죘ˇ F~{|j"IU٤ 41X=n9T;|5- 8o;ߧݨi*S/Kr]`(hSQ\fs Syafkd vɘG-4/I} gkٯYDI' t هH_Ƨ,Xz̚5#9rrMfYqG\'_, (FRf%2F\Px_Nv(OٙHNd%wxmK| ]"J)*) ^9ڇN5kV ;7av9X๼Op$$Px n _(ѓ/N#&(^D-vv[rvk=ۃpnZw|)g FN3A;}B;B "wSKW"8i CDQ g *G 7lk:TjT*^h7AE"9 n'`V@ AǷPSg9#4gc%q" ={= kH)YtL߽żuە]LnQ΁[|Dz?zweθj. c[p98{f^ "aye= +h&V?_pGߟq=]o{9>JxRg~Wܠ\ϙ@z&|t Ap:M u [z)Jݿ z)/ޟ~M?C\Oz+rieEuޯ-Ү&*\-?l[rg吇IIGv:Df?O'yG`i$Pįw]Ƨ岼E:_VU>Sa?FN9 QXnNzD3|`ݓ_%]h OX%#n؏E |tTաL!Xꥍ ] }|3=YW9셹C?I~ uu# c[1Q0 g&zNKtY*jkm'CgA=y`E%6@P?<&x|`C6mO|hi>p^{B,8;8)Wu&vQrA#P0b:TbSA9c19瀢 d7Ӱl;Y=]ouWUw[ofϵy )?*w:9r%9$+c/7{usTOz_kr t@_#(<1S7Y')x>t_M?ܺR`wrQ~UAAP`Y'aƼ:A`QP )PT=?Y𻓷? B،<)X^CCTHncCz=R $vCer9В_C@s}x;Q@ ogZu.ajI>*BG-xdkR,ج!ɔaw bC-yA / {7H$m 2vR@vGK@Ֆ28fs/C8!(.|]PLS `UA;:.KNM*sf~M#ح }ROQ޷;w` yOzqTPQ~Gxӻ|[ՋxOaиN+{#ۗ;G0r.G}# FpC `h/^(ίrN |0gGӝ雦jڵev#1nMډzZ<1uy,ɱ7/;=@N5ؼ4&{TXd~&qTz(g>.x|9[1w^=OP~6<_2}Smo[ OmIQ~bW_ 0s`Q˅1 `1DAyq [{>"}jm)B2ك8j94/-@q@hOxe.'F#yP h d?D4^O?-(fz]lU[ow1vsPP^TNrE"T{z`F*w\;P_z,]{dѣqGf*xg͍^?x&zιݣ {e/&y_2-@^/(w;p#(/>C`(ϯPT7 Fdub͜^#Wڠ A޲TίsNw~t3pp &2~m:g * \/sw,~B61'MU]kyJ}J9-#.Gϛu4~2ofv<)8Abo5T ͓8ST p5c9%rrDSUPP(׍HT`?Q.HEhnB,&|EMN.F _!o.gȐjks 榭?lI*}zzjv{jHci919U`ك)K/4cݶou୿j;?g(}c; c^9S&S+AE;傂/m0瞞m `PXEуI'ې.9gssC_`X?A| ēCeIb=9c,5GXHl6;!cxn~v%|W%ڱCu !_x@r߉L@t[Gv  ^lbj7A>E+se~& ˮLF``(a F=7~f9"Z';DԐ vHҖqe_/5;nw8(h5q< g_KŇ %Ba7i~v~α\Ojl~7tWGNB&]7WQQ]Pg#{4Udx|(GT =PJvV`6|9=6qNNJ!(ҍԫm>]8#<snX3W?;#˩rIUk-d&54Tm@ݣ[Պ5dvz);Cq_:Ѻo5nLgɣ11FЌ)QZAD#x/\bsL`Ä1?e+M+~n)U(a0C`>EP(ɞK b9F%Pe<*zLq~ 3x7ٍXf}BPP'$LL.,4j7(;eב:;h_Mfe)F]#ӎYЦ䫢kR~\ɏJlzxS8&9>)˜N6Xlo{F89%ց;0cR&-g?^Sۉ"5m1:*tAOŶ`5iAxaZԭżWӊٹ8΅ogo[n_6P{?rq#@:M^Z$ >Ϸ{ؤȺ4ΰ9y;e(e-xO Ry\ 5ZS9c+|7dܓC:xs<2.0' 05U"T:}s7Bo KLHw\|}Wbee^vp2م`YkjA4嵩3xs8xU_Y-XC؃bi_)Ǯ'Rnw&weqZEzwDq9⠘nd>DNbRPv*I_<So[sYd.0x45 ?ZEG4GOYpa6ygWKʏCr pQǎw<(rJ'@5lK$X!a̻ N/ʄ)6@K?&k{ Xf0? cVA\~_=7j^kPa7E/^w *Ay=L 26sž˜TtĦ|;"IXp]*XT +Xj;,oa5UAy_i~= Rr{C3Aű ]vs|Wp 4(oFeן(Q).Px_L]z1bNjqFꞦi%b{X/Ф,h$??*w׮vM斦hݣ]+R m8O&6\UX`.OyDJ9)Ϝ`=mf*=8ZCZ@)+υtq>q/gRv}JP"bʤrA~|Tz|Ǻe쓪-ѢҼ)gY6ߌf?"ͩV9أӏ7KPϣD>5L?SJXG\o*}Yꎈ4S 6nƟʔv9e7B{+ ؗ׽J sQɢTX:񺩟-#7]CU;ǎ|@?WPa'G,:^޹Q^)֪'yAξ3oLېgUyFچ4n?ҕ]0gYCW{:OC uC0а^{&B6x(W^,&XA<+6xedH  wZiZnsߛ)s"fг9/re iqFH\!#~F,zhۿ*վ^xxNEio^flwbdwʻ9G槴 Ϋ!1WP~}T3mo xwO5;|{|+z`p+kulr=4{+2.&;KvsS)6<*AÔ"_E?o&-(pxi?~^׽,z=^Nߏ_4%lƈciF[Od˝\)uI522`\n;wW f5{M7ŏFoe汚b XxO\0ivB&֒ѭ%^gAE }E^tJyd({wgǛ8T [ hHչ.wRMxw~X8;׫O75SLhG3߰)\?صP_'gy`mOPPڹ3]eq1" {ܢi,WҧH .O|!0ؖO(wHz7a(8ݻc2`_s.t{>+ǖpFycͩ/$Zx{ğZַ*AR:󾂞= _%hdj  &|?;vB^ }v*w4}4R%ݝ N e ]baR_q-&i #v67o rf;)s)1n$UOhyVdǑnD[_F"T*C|  F,'u891^^?|rTJ릲ūgD$zZF)ĖcsDpH[Dx{bݑ ?xwȦϺ!گqR;:-/k]=:{rˆ˜ ;ͱ=X~f ~Ǔ|A1Ax|8TH+{΢Gb4U>=*U-!e]86=ܰ]D[HX*L_Jk׶A|5D`VJycEFѻS`!0fl=Jj--•=}K_AlI?$ѾJе-4xZywn7rcpfKwX,_oZX2'nP{kQg巫/\*TǺ'Di~GӃ?sp : K/ ^#"cr(|ޙÎv )9N>e1Q3ڒ{֊^LwX?GiD,Y-;H!WˊvE4W <)ܟ>g{Ttd/Uu&p?rW[MvqScs[0G ʵA@.cfZ\߿ߵHu2m^ >P/rޗ4جȽ^~i:hx8GhG͜O晙޸#|-H_>%4J:2rk#kL֚O rf?G~ȕ \j;[ ۣJ|xƵ9J;hj# S`m=0sN|_Ri_(N%b5}ҖGmF j"N7!-4 O??g0-yǻ2И -^9}У5)m%M ձm_ˢ*ES=]}w_ n;\##ʜ[ z-aJQ3 ZW$_]p#khYj]߹-;9]zql..U32gb5gxuҳ8uOLbF4tlWs,kJ1NA^@/aL'srr|R,sy+Xtx 3DwGURL|$K3x^A[n4aÞJdAO3vd@vз7w-Wde[inwn,+!?>+m\꽖hQz-k?QC2SG.4 Zj{ u ˣkf4$?kVnS?Жv&*tg;v%3JC;O'^({04?gNA)/CKI3HOĬS.GpV)X#&a'Z?6<%Pt^5AmAsHS"oɞ`܌#>SG0"H Afn'1Y!^yu)X󈟕zNcA3rڑnÕ&/ G -*KR==zYkn_FwN޴EmY oAASm)#++>K_h~ltH]7^nނo(#l )EO  c&,dӕLP:׭P˶j\J'X ՂN WmPh,zk=jȾ@5mpz.V=b4sJo7ൽKl=, qwI ݉16rH3V{:?*YQu>vCe+{?PkA)fV 8f#-i&-&Iw?\Y ۗ)`WtNo5.9Ò W7kHkҜO{i/!D('" 5 JNq z4˜ Cu݃m0;){Ǫd`}Jh盚vZ³o]Eh{7ܩ˂? `s/XN~d[71 Y vqǨ)>{=/.'z[w}xRP/4T ޓEE^D] 7#(b}t.a̮NB4?-_EPAOCCdԐỳm-=K򯩋MEvPJL1+(ܷDb,t3݈/K؄:ZA9K{#LQ'~C|YSLԢXwT_gAjQJf).-;vm}ĺ>ا {GFvxrxR@𼇉4Ÿn#{Cd5{/|0we㝴Cs3>&->bm.%@.aRKjޗk >Mkރ/uyƟҠV,MY}t7HQwh~Y=5.>w vR fw~k)t?;c `i%ya? c5H0Cb@9A ޓ8ɇ 3x cfw(A8Qɯ|cGAۈlgoןzP) 7PYP(H)]=̜ih EFg +@`L@Brb[r%ʇ"\[ŌBy[Ⱥ0#zs}h=1ܸ _P!R4 z@<" [ۖ 5==w_P@ewIUI79 Qڿ*`@IDAT#LFgp@Bw#A:$bSo lL9?#g@~KT * "'1c` WT0"TھiA~,x,3(v`<ω4pǻwD_Aaskuz٫a/9)D;jQw4V KS k'uh~j^g\9 󩻏;#Zb4]{mʜ!@V|#O srТIPzNTW֯WoXoxPnnǗ:+] Aj,JsQĞ:o?7Z34=hbM`ӯ *&"MAÂbr@љj7l[; yHf rBYq;[W,TWQJz >_ 4rՀ*s\ú@|Gy%+]`xD+wr}Q!/reYe9w\f#8.cIu߽s+U(3i9yܽt UWۓQ+0 ,|N4 {Ǜ܆1^ĽLm*եz_{"81dS5oI1 !N~+ {HC>_4h/) !k{; GqNUiXP>5do=ؖ*cdޔ8R״țQA2t|tf szpQ\ȥ1v!r/d [Yۏl=Ź}WG&ﮚ4c[jY0VGgU1H+XGA1SWJ ,A([*;X^ʸ"䜙x$з1o.y,[ ˜1(( Wٚ"(A}wfDXm$X3a c^_vRa c^x@0_#>FPQ7e{k zxKi&T!Va9vcP},s/?_(R79W+#(.X]AvH-LIm$WY?as1@Sb%Gb{J:⩩XqS4< *<5QKR!3]Wt4{{A+Z@}K*ƽy$XUq _tp>#HF"p$;v(ԯ>MJ9?HවIsDZ;$s`/(5"c` Nz%S޻s.v=Aaɮ?N' 1@~k4=->jqSIȅ`;LIm{*>HPgޗOOلS!ǻ˜9gG;3>>%G3KvL(uȿvD>J=%Kʑmceyh1_U\2ql4R(~ʕ$ g#:"cgdRtJ8pduStsNb/sWv{O7VSGSwp0~(#U;+se~&S z>aϑ#﵍*^.ܺRzpQv_s5$D6ʹ.˜Q "X"a#c^<@0u-&KA agcm#'W _}Uq_ J_mWrG'γslN\=S߶P{f0  qwMC}6:Nr;#91/h)$+j {z(\'c(\ sы'&*I[!Un/3C΃/]'8x av[ *„6 YGP}.ȷbcgc ?Z/̕NչߦNpJitrT=+O x;~F/0)2@ACD\Dbe+OcW1}Wzݑ|QLDK-8;:ıPNKUp`+^T4ّ'08ے7qTsh,؎YHkCs=se2~OXAYRr Lxl2:q`771W v8C`<Ӗ{1Ad a^8AA4@УLp\+8VEEU ,Sm⯜qe7n UuXװ4Wesr[ (v =QOyjR˞(~ DjoM!(y闽Ɵ멂B0)S~]"+w NVߑ-C7RPߝ"H~r ~>i;ڃ-ޏzl.^i|h ExzJ"څһF`]?+HװE`qYs? w=yx֌?G>O Vܣv Gl68ǟy}Bؙz.{1 7^p]9'ƚe=M~/yD-5ٌMs*Xd8`m84ݻ#=/5MYQ3 }j “;vgVb8ʠ2h-XA+Uy_YWdw>sߨB#XP\g H} {eף룯rQKX/w&ͥkV\^x_a3y{s{m!0!I_%`M+Gz}jjA(˜O}LA;Y˜{_<0J0T: ^Jפa9}x/6 VDPUArjlqYI19WŽT!=!Xd) %KTAPGp|oXUZ6Mi͕^Ŷb/ -rUt{Þ(u_B=Bȝ$h.R--0\ ȗ"Wꙵ9ݷPfgWEISN0cl j.ZA!1Yca¤ӂ'uu\` ;ORϹƇFDi)Y].1хi&ir;lܛ{x }OQ-> 3z[/ h*P%}o TC1h}Aa-/o ʁws.Yr_jȦw;rQ{ԠyO`HsYx 7,h 3W;#Ej% W¿:X*QmEVs'<{[MttEjQ}8*%q|Ws+ӷlJ=諣nS^_T?ťDoA=~ }}WEps Q㽊ߔY,BSܼ2֪ߓu=Ghk~zl~~U 6?f/0|#g; o7QAxsmug80ܓӈWKvW3{CUI)zi2A)ȅ .7etxXN#" w6ޛA}{q]~͙2\@|*Wߞ_$ {Ӌ,`2zc*g| F kۈTR c;}H9bH"xSl9G/ 萝-}`k|!6 u9T4L yT1"xA(c/xQChF.xg_A8CԀn#`If^.mF McM+o)\m((vh3llgȝ݊mNf[ Sp~&\cS/Cp"G8@uwV%X:?~i7ՄtW[W]t@o| !OSR 껗^$hh&6A.)CpA >z"3z},/0[EHHd4^3Z5而9"vw49*,q6#HVGw#%g؏^AyJ!ٔ:'h!O{܈Xw {GW}%/Pou+y4$[~Gv;kt T;ł}(aC#ρ+-x .>jS|Ý}\_w/I"`XJc)5|j>i{\%o~dό!Tן{/N&dqO,w`\_99?fVs='!97h=̉ 1 O:dFN;[sGUZt_  W",x!g^I4Mde Ÿ$P V+X|Tp|~6r>D=O NDR>KJ(_*V9NE7+/ tT?vIx {neU E\c1(&{lUy`/{q*2瓊OP(U VɂK]%gO)k@wלd08%lAT]0 FXތD7E/g썆>xsX+ٽ.D[Y׃R9(F;C.\eh2kD?tzoΛ8>EOEћgƪqgO}*MىV5ˠ5\bdKr;6| Wjƃb|7 D VOX;! qw\^).߱ӤsSwnd ܡoy?8D90ܜi߈ K_ao(}[x19"͛@(})p 3~FKyNZN-qufpSy)iy;x?V'4 s8<{<E5O]0o|m:[kOG.dE~i$BY:yf6JEj$.$ht-Rѳ"'D'gd#w,%}Q!H Ώwkj4:̺ɱO33s0g4|FԌer̩V: q ,݂%N>Xs@>Q0 cnF1[C%O$sKMƌ'S傂d,^5a17G`NAOEcLQ W>4\D4l 719Q_SYχM/{њыmxXCd6q *bK4l|bcϙP;85ݣ3߮R_mn,!7*za<Ȣ|44jH%i`[m*XAE >x RJ0`{%}}"/f ߈IP]@Nkip{sG'l T#o|O Ǹ@.1I8yyyYM!_]ҐOE*׾Ndʽ_s )rd;Č#`lr =Cs[\Xl6a0\˹_EAr @/0R(*19(62@,938g/_ZkTpyi9}I';*?gڥ1n)[P__,“{E  goʐL󐦌e9 nhnHmUquZoo.wZh_*ޥ @/Y4A}?_pZ?z3B;Ax/t}xh’o(7,A%o#>?usZ%K9d$b4` ќh10$gKKГuD11fZ.3 z4o|Q yZ̟ASO|'><m1vi[֫xnN%T 'WM|UTD{M/V϶-hH& ]i|OsOs5%CvԹ41YgN^>aQn{ P Tk$3ڃ)Ș=^r}i1$3gsi*/O9wwK4Z&Sm'~.pvs3Un"^SE  _Aq|p>)bW'ЀN*lW b 1|R_XhfhNm5b7f{Rϰʇt'/"]a(H|T 'u@ύ s_SQ5O,#UGoky3>el~X$' "Lj;l)pё4@9ia[1\'f="t~;'x~ɨOZT1[R'8z"T~0:rF@>ldu8ks"s'Eo@,a;h$wo O _aJN+ F\Hyl|Q}lޙI /V[3`D˜8Kނ 抄=gpc~}4Z$kbP{NfCeePp7hb<@*ZW >&7ThAE@.POlb=|]^fgճMՀL lWWȵ4JlLN< S\] Xnx/}5Ҁ>"ce QAe;WH1&=UP&OG p1LP#xCĆJ.cQ5;ԡbw^e]Eo$UN.ttV1mMvkm 40ϤaRQ|p)kPjGfz7)D aҡ<[Cf~/p~,)&w_ ,TF:_ɦDGT{ʰ)շKќVu]LI^!X(.xBUsf}ƪI/ ]?p1P_Y[PO3f_"BLS*\ЀTA4y}HgeY'v<Ҿ[鿒 DW(UlF\7ejuXg YW䃵ARos'o:,0?8wGxBxk:]q:Ӑ^_bE受ܾ6,)+[ ϊ0 ׋k ʷcSl]HQȝ ʺx{G.@~1t5mJ`m0˯t(+R c];J>_HXE ? ߣ7}Pl=k8c//@ a\]P$'xoE$Y3`*LE@ wm.Ƞ{gSWp ? ރWF*UVbמNju:"7!x11CnVͮO>o2ۜ n,_`ԟ#KXق /4cJ;=qWiOO" K )C>\y/Fמi嘮 :tpntذƂm%6\Ok.suG~_ #,t*&`5YJ F1. '0d r ,8_gS&KdOm5*|IIt*~caҒDA3ۑchy{Vg ޿Ƃ( >(6 sw( J)1ĴM-ѕ>剧K^.}o'7v+?4c8 ˍ*wBo9\ QfGKW\*틻μB]k-w֟K -xE=f?> eىDmɝd9=A@#yTꭩ&% [-Eg|샾<.p639|? hgO{+?K8ni(t26~T9e ǺrmGSNS3\h"/VR@yNC1z> wO\^_+Wȥ31J -5*Cz@Ώ &p <~nN_g2I#NK ߳O 5[Q|`Jzs0O<>0U.F.ߛj 돵v3Fo}P7Ѩϧ ə"TjI[3bwWlRuVV\w UN| ߣd>%CL:ԛD*޴b;- >82rss"XSf{{Gv}d/:*cH # od=)K1$' F A#++W-hwXb c@E&rHdo3 8 ksVܛ#:Nlҷ jwԽ qU9Uy{=^Ld9Kn+@M~(nKDj+{>abX`owZi(`deqĴo<7egM!ntU7Nⅇlv@-6[2GPO=)_1?#su0kZ [AN&NWN@ IK8*rAÿNߥ w` {RGOhbtO)U.j>Ң!wOmfN&UO6d|OS\l,0R32hBcФ8[=r_;2CSPw,z|Y1bEmOoG4,ˈSr%s} AMV+^l1MjӲ "A|j %xTjc0w:](t/GKEd]|tgo>[ycE}kae#j8M\٤cT=+dr #%^1_`FQX#be,pFln8mKq^۟_m\zȚ@>?}Ez\{qEf4)tL@=Bꢭn 谌Yאx {C}÷QltNA1!OBzr/w 7-nDMjM7-mU_sVvE@?0 GsN|WE0}WL+.|/ .oo$}.r}թEy; *(|. :8aCs{Go$"!/r.ʃnXDrqc<ࣨ?>5$R(Xw@QlXyX}* v}XQJAjh !}&;$$ms˹{{"0@0OV <ХBq/ʽ+NE$2if s/0(JgO]j< ;w0٤? MWqV: 5Ú= W-.=#MuuK #*X艑9;l<,# }0҉A8z8NsmcC#~L_@:e*Q'h$tX0!~&Ի@D:Q (˸D~@*y`=aO.U04DNt:/~0D ,*LˁY/ Bxm-ar$ ) 8[  1.?̜_{ƈ5zs_qadE5F||>7G.'q5"`D?H8cdZz#{5W*2P"ֱ֭p?6<g_̻X.# 5fS[0~ZK?)|5w].#۾O0c{^%Pj"(ǚ/=¯ OU{N=3l-U;;,N۔곙Lp8aYϵ`̲*+% 'ys 𝵷lEj-CYr ׿s 9LI+( R@@2C;SJ*h.b݌7p3޷"% F>d>9S{vQJ_B W8Q Å -@^gxƘ''{!{[RnǸm#;NSGoRUR;[?="υۈ NMFpΓTإxkWx1yy˼k BDi7pq4K[6+v1K`j+0Xn(dB}|@:ݾ*ߨC/7f[P>][aL<5:OrbhwUo0;øZ+t=ͬ=@@L@dWm\ 6N1(0$16i35z vП+¶QH3Q QEtJtejŽjCDj#;Gzb`PrbEGs@ _oK/Bsd. kK'~3( 4-NUk̀ n&A=,zQ1Έ}/$!IӏZʸEF~EvA{?[ _$(>*D~v}׆ `w.vϺ c}v-'59߇ѨzF",} pNNUjMwRW`q],z8IǪs (sltm%p#]ƭxnt5 M}{4~GƌY!dQ"H?E`2FsqugqPڎ|i⿅xgcG;NLћx5#z}W=BC L>w#hYKu#+p-a~u_YӾ/KtN󝟔Ls pX+y_ yB!zho7:^ ;-8ZM=ӂ* =N1eMw,w_Ϯv^Fv8h 켍}3j*[[v{P|:gZ/S8xf`"_b,M.%,DTCg L/ ay@,P¥ڈtp&|, \>Mt>ou30=i1{zhhw\DfywHJ M9\Ly/]-@_jȞ]v+_`<&0OX~F:hO+%~#(ʐݔ`Ԟ/jcb\2~H5+JKrg~~̾fiTk Qw΃].ߡQ6#co{`ZԻӫ}wYu*Bk@Y3H$1w^l1C5,H`WvW(K^@Xy<2Q |Xs޹ "k8^0%Enmp>4 y8>1WP~41F{H8*^+@pm{@_J~4(7ьs'҉jb|/\t~^,y1|=Oҋ/j ^Q4Z0n膿 1Z۬R94GpYtvN 4أw 06i9n]sIKƢiX;yn-&ȣ;sMW:tvړN]I] kUCvLJhm초XjyP~#?~JXr\7X+Ep9]8&zP;(7EipF| 7^B5o,'b?3L5=zSF>7YңHrnL;lh8~yh|z뫜 bٟkd+watL>6\#W|' .4z(~R A@@ ѯ8Z G)sq1BDCK? $hy} /A},85T{&&0,xFEo˨nOc/w[xonU&)5h¼9lMiR=o1LGCjwG>%0.   xوc4si7O{t}ح|,J#2uv)h(7Mat2Qs}K}ws  A(".cXVW[TBL74FIs.N@,Swhg!٤o !\hQ7zD2Yͅ(:]Ŧ@QDGC W[ov8yfzK߭B l˂8˥E^Oޟ_L6@籂cRn2׷=H8)E_Ċ@b2ILe%oI>M $pOLoǧ!1 ֫EOy*>**}*: $72$@7K poHh,g[;F`˼T}@Pl^wp[Muk'HSFqdo]d O9^^pwgX~ θI3[QW68ö~/=HTV5j~ ;;H;.ōaX4؋t*`}x.z=OߡZ*V*<筫W5g>1.O Sr+k7mɥ@*!2fniیm iW#`}:?{V+e.pwz>{j>1Nތ- [^w&T.+k@<^q&U>bmqӱ[n{N9v.~ڜβfB>#1n7]J[mχO_+`/ N" 4 cYFD@cP tNlUE:GbPS $QDxr0lZ酱O0w2O׺kOvJ℔1V_jZ۰bN& 1݅(j_s@=*jꃫ}/(审n&|.@ x&cKzCn o 5F{orjru(0 PG Fz}B# E?6dn3S+a jk[-2ϙG 0.,z~gO/2?(>"ރ`/&06Э7J:$ qi}TJuѾnss^_+_- n,=,,Č}2= ¤n7ў&'4޴3hp$iZh|l*hq(+m!+Qҡ/:q/+"~u~K^CM~bʏwm3VߒUş[#N}#Z-r 2D-q ҙ8b]#t'/]Nɸ~xΖX R3᳤j?mVLwbj~^w}Z_#sLAoEs[|Z Z}JoxFEoIJ g]d=gNAm̉of!⿗73)G׍XϊL4F4/*y a٨YSHʄ>[:"BTlZa(rbnhھ⎃ϛjwQ ;e⍤ø`\TřGFM0"Ү] {` c|' uE!޾d@D]Hxv@]#QMi6@.:wRVݰ`ٺE<FYQz笧QߒԔΨlEbH- V!P|x~L#Gr4NEKeюk߅$WTGDf%i 盄2Eg >y9~^TDiu|ژ? ˧: 1{Lp]| Q-7qs0ב#ϣ+@ ! С͙ȕGoa/ٴE'[,\dԎ4·?V Cj;ښ] RLd8:LAPȚCoª1#rzۏ8=JrR**]-;rIއX&wdC[LȱOq0<QW4#>?kk3`3_H2_ N سJq/]G_dޕV'ͻNF1O~zlB1\xN΅7-Fc)4&'zti/>P~^3>@@p&˗B'%W݀Fw[߉jF[ZsyKE%lr¯s}R_JGh‰B=n`e-fc`n_߰!M[u wm]'9pD3~c\ <@$XՙGƟ;yX`~`=- &4`}zڧUN$;bE=R]ѩSk m&pm:z$hKSㅲpE`C;jFy|a^`O[_ě8̄QqlP{)X+?zM\[.u@ ZbM#7ȿݽOa~q0{Mi?.DP M*pQ & `DcK G(?nΦ^dpS:ްCg~:t~YFViA5D7=O`u noo >X\-~U7qUd'.bag?]f$Z:~cn+kCGuNA?<]2̓Ssa_h Ԃr1T x'bI!vvl wĻGpW t3UE!Dw6+ik\zSK'6^4cl#H ǓюJ)2+kmâ kӟ,Y$ ªOGe~G4>4- _ .c=絢^\HB%[ֱov:ll^ckzx#Z)-rC +plgI}OHMF{tyG=CV!ɖ"ߤD6tC,,@h"Ù \buhlhh$%2h.?qV:A$Sޥ9u :=}K@A(1\QUAm?ۂqgocx1gVbg ?49vmpf&H}-u[ i:`qWIniu#"1R){' ' w u`6Zz t,4j0/0X &P@='Չ*j.Unz˨Z>^lĬv2N'3C}>2~Tb`а9. ‰əiNLx.t|GnQrrP䧇@mV[kcDZ&NgKcǰk`2 .r$`lw ;/a~Y`@Im X ğ#Ti7~j_'QO$>W> oYW@9HW"# OI [bxVO@xS*=qStk &BZ^+j! ]90ǰ0 _f>JLX^J{d{Y*ح^9ԏJAr 03 >ZM?|dо̄.Ȳc_,C ۶v6 <>Ȋٔ#p00YT0eM#b{B?UZE<9p{Fk,ӉQpÁGyq}EW 2Dw 'V#=xU6TvpZkvC|'Iabo-u2&W!?b,eosf2>ϼy'ͩpjcUGIy F$f}%zS)= j 6#͂nqb7:U:doV"'(>al|A`{VμOT%?E3SCkfsØE@++j/[lNQ]P E7y+u_n7VOilTf@j]m#zb9RMb'ÇðIIc`K8ֈ:1#N 0 q%a@C6*gs?ϱ*O%Hh.+5v͍Ѡ^y>۸8bs·~6`\M$С!T{lk-I`z>^x;ƭ(Wc171EVaKiY ڱmbyBD[ƯoQc'%j~3ͼkw,+cEoCXϵ+z!STP+uyYs7zkA }54sN.9g>+sdrzq302]0 c!Μbk~Ϝs_H;.:%!XΩz| :x+-ht)ztom $V ׈*lYJq)]1SY;{{֟{!hax:q1Jt1kش!ܸZ0~ hd3<c =ɎG.tb|\ l7f/R\':Sw4>5/IpٚO$_·N]1УӏXS-@IW$EjjFӜb5߇Nںi-YGnKpnj\kqUV>k@EL8~sLw#"iyEO rf6=tBeLR`gi ymTXlqVM(1^2Bc9^{Ds1 pTw@U*BU _rܣk  "a\{F_k ܯy/o8+P be#]C!zo[=9Rf['i!yq-\"~5@: ~זcqwyV3o eg㫚.b](` h~PM((}Dƨi!n[pZ`'dʪ`w]cÓ2u8o+Wk%&e 蘿!95$,t-iC)==jF`L2,&V'KD;-M cʡ G DJO"SЈr{ 2OTwM2TArP([UHL.~ѳ\wJ̓6b0vWuY~>-zWܥbQ#v6뭌4[RQ5LI|y;zY|-W;{v:O^~fI# H䧕r/qS |)I۬&QQ%Z('@­K*p:BD*c .p _Ĩ^"oC}XYTЭyǞ]w ߏvcNxΊ\` _ȿm,㎥(}Իt-3vN]MY5{LoD9 7j͛ӡ_KRm`[ qGa@B5َ s5UPZ@dw v+}jGX[Ix, ;_ xW-/3Ɍ{3ɽv8 }qI _p)tmG~7i,-fßF{.:ZCw=CHw)$&AS.K2 s~T!9K*fuds@POD?e*wwVhٗpl 3yۢ4-HMwN8Ǽƥ\bt%cўh)HUyZӝ1{o*) rl=lPQ@zA4*ŠQ{8?GZݹ-8{\DMkd$ݝ]9%>ZMDlSWE˄jUxeS(@>kkV$K&&Gu\ +xT!]8bcf}]ullte;I^m OS/h*笠wOmfT GЩ@0~! _[QQd>X`޹mtV!Ûg ODa.KɠC5hH0r1&nH^Tƥ!qmӚ{:֞S?nz?&a@&:U7E$BͿJQ G6bGT5Ul:ppb5 ְe|h80H>&0Lhpܾ_Dp+W 䫝PMxBw!,xZy3`SʹyiWk1B G5΢]'ۇǬc6GŞOfr%#[!*DVo!(cy:OG?k0ۚsqIa%Ywz1;n`>^/˿6)0+~G ! ƯGZCQyb1ᛶe;mM6|LAЙR90Fm.L 6*z_RL)zo~%~iS:`ǘ9.2H, (˄Q6F45sJ&u}"1޻nFi"9tB٧ WuT:"P@n(8&WgX>kQExR{n ']#cGT7Iw!eiVTs?8:z\|hPHXy9<%~FTUئcAg:6P9ևT Bek5:.~?;Wc(rul@q9:f^i}:>}^3x a \ ^!@'_Hh!=ިC qoOq8μުMG3x?]w 9t@/^@?/ M~8NJk"-31v+# X);D=bES2k'=pS!@cZSNo~l,k:k0LLd:VL5 4~+TU@@w^.TWʕrb}53y'Ƣk5ҨY`k.-W c_fk+im:z[:Vq+t̝D=:' H5\j"ΖLf"??%]ds*&$7,J9+J qX`v?hOgBcJSLJ (|iH/pDz֞sV kvC.=$oĘnA[ F{G Trow;_;c,WXxv1"(2}vV;EUh¸X )Wg Ѓi'kHT,Wcz5>\qߢ`#lgtֱN:9f{` r&w_ ocje!"wvWЗs > HiP٫R\e_`2u'y74Ve46g?n L*FwIjI>R%&*BwpL0jh^$!΢iC B{cV~xqf}曮V~qkn5C@p@MHRa7P5Ef|i&LQ.9ŴKBCmydJ? eQ?bg0LLZڌUg§e/غߪ|@b!u[\Gۖ#r&\~ W~>[bM`@>A_[Ta1)77SnV-I=`|od:㽱?|J& pNx п!J5&*, V78j}$fc WF];=Ӿi &'oAbT*&›lKMo[xG{C&I!am#tU1k#qxI>^\a6jL0t\;?N Op`avgz)8 I^:7(WF4F`}A`|@ Ä(?^bh wW/+wOx33{pI8lU~(pYPcl8zJ`" ip1^x==)%<2C;333z'Lk:`:~u5ޢeu cglzo߽v/@a5\km0qF/߱W\͊U_f >[DwmRG=-w- Pf?Y\?5s\9ՙ&;g!|foQѺtC>өg v ٬xVZ8SuB-wOH0[UMpGECI H ~p&f {Z -&e6G G&?ΫL]Z EtCs/]Zq T<%@pՑj]IN"\#Z;uXN"2 w7/+kiE&̒cige[ j^~qطP/4 ˅cv,Մ,Wp]dbi%4Z9+K o#vsr~ykg$Ei~5S;M4 gE%="`N1;N^@b. ϑ۠lDϦkzL8vm!;+|שI 4 >#OWE2ȱ Uq\QSA=FwNH(N 8P<~_Rz_|B+7х ?g|is藙7-&;2f9嗵lKm^>f:tk0mfՈY ?n}:u~hyI<U[&/摟<3w~^oSmjP3o&Z PVWTrΖN%h}R0oЁ8t/uR|{eT{[6V05 T~mH"GM$560߆N)Kc;~]݅7V$X"*eų&& ["T#Pe}[ey`|]N&cS5IBCOpQd^,5,<#@c0lG𑨭Z/-H,ogQmh?xvNPy3rR:y/?|N[6dϧe76in)lk<. 'g= )rzMuש*'fmo-la5Ja$UmDOTayi}N&>$+md@cqP)X2ۄ2WcW3 Ⱥq+;W#lq@XF@kmT8И|¦Ie( m2[S 7541@1c'qYCv7Wn&BK `-~:~O XJ%y?제 x)1VC{Yn_)Ȗ8]L N/Tm$ NΩ=1<2/޿`e%}u L`!WSO1C slc4kO ޯi/M},d*i ^?Ow72hc}@8{R!t `NZ"o?~ bTpiG~..9; jɻȗ1 q\#{X+SwosM66 %E U#rmèTn\D>όI[/~[x_JCޒOǭV"Wwj[oLjr]n{'_x6&Pm~c<+*ߐC+..)8kОӋߵzvXވ@`KK c 4TNRl(3%eG;/BPO ;`wX ;X8_V9k.oΡq;rRr"~˙O _cؖBP4t/C_5Κmm84O見~dlMXug^iw/fwjM6vٗ؇43eo5NSkvhةt v@p^=qU8!_'{dfwh` гaHnɂг W.v52vxu_a8Wd;L8ծC9Ժ^;h^2bmlݳRA}ƿO?7Y!ԺPwY= ΁\&4q` R fD$0;N wްPYaQ`jxQ W gX_mXSw."=gw?*0*0Όn@f9q-13e6fNi,u)sf5xVKCG3& u|vtMwr9p_}S{ ȏ~DU\e&BG_=aˬ:}TBLgm5O'vNjy?[cp+%M:~dBd\o ..G(ҶRN<]О1K0˖ Ts5GS,=84'+D—s'DžJᵳӼd p2ݛUh} RCx+@=z7-8~*OWeqn7j#o˄UÒ5`/@r{1onȼ[/OCwwLD C=2o20> tukd筡gk[_ץ޼?Z-M߽U)gG_xL["^[$>u>+ B(wʿQ;jl<rGs=~C|O]mIyH~!ŝBGCQKؠBlY4޽T ߫;YTe,Cbl?9sq[g/k=={lk+X[w"*7S[~_+b}[+}->ⳖzǒzǴ #{YEr%$b_[5x!k@~v0[{ 0O!Pw4A!EЕ\OF{i ;+3 ibe#>M bgǵS`G@M w(QY˭; MO|"={/4qT4E4g2VVᮄJ4V9 /r8vzQT- ko ;wzǗjǑIY@ se]5%wL0& lg"]_ g@8ZR1S&+s ,?;>V2oT>hf1q/^ZPCi Ǜÿ́Vbd%H&?1ʩzox*>ib)+}Cmn(D[Gʿ ,YS f=d W|+=q] h?, K]:*ŕ"` (13QM:; AN L8PY71>{L-dώ1.KT[; UdC8GlT0ʣLdgkBh-~Ӡ-<3@>ӅdM/َ]9:лx35>ET3iT|f'r?qFceM; h| <*8=9B@ ;rRe)nZ[;|\ ԥz"F BY6 gP>IZ%oML$䧈nM4FYF # 2n:l1g{{ߘ V>]jfР@IDATxZSHyN=+wo?~q+wA઎3镫FfiP?=V\:m@m#BTWHllD#lxz_ߖSۆr; cE{tYP zQ|{L|vU÷9i<(@>b]h`@29*WQcdt9;`}G\[ c)Z?3㘧>6HIߦn![\2b4v߽^@^󕀢ޱBy  H,xR. xi'c{B~ߓ Al>XBSl{"0%PbI[dw+b ϶U_`›*0Pf P~plĎ/cӱR֑kB×"\g\'rmn2.D\c8ss!F`k|+AM'r+ϛs\c l{7ҸE§/F"g/Ûx[*Q]X{G(TU@:CGUYI.V r'˷.%PsC_睖|1ڡW X.iz=1,=E¶FՏwyi?OU9 ~xxcvUQ\dW`mh/ 06$z-` _F?Q=a\t:OW0zw1aJ\(at@>Bi 3҄)!c{B)_c8U#Y ړ7,s07geO7ĎZ-͗ q4_.P/ ;F"+ȽPP-Y^<9F{#P;lM]ѓ&"Lwm. Om#jtРR7e#ij;ѶL t gуFtzΡV=ֵb]-V$ V }&d"S͝8vp=gLw;4T_ʱP@z˽QK }YS΄rc%\8)4Bȧ&ŗDsSf fv#[9n'عɘl10y IyBj;եpzl)ਜo*̄$Jh67~h r&UK*dvhRF|" >C=اZ@ivS`R1c5eZ *phFCe@$ 7C0v"`3@/~ q|*&Rwe~O{XR^t+Ne7!\+ۋg%j,'r'=E((v9'n ./9"sګc> k Ea| sb\oQs_Kf'L-Y9Ql ' k`8̝KՅk  5A&fj< VAT!l<#WAo朱 ͱ#9+q!@v^  h:h'!z\ۅB x y;2h6=v~Є>"S t+rWH;6t #;W`{@9:ֱpe;8ݭ8CNҟr,[S$ 6換N_r=;WQìmc4{pUy/ wΞ l.B|siorn*!8F ='WZXW;Mm0T5rlk}G?K_O8o8 -ÕnyGlq j)v3,.7Szhk ! 7`Y ~ђ\ƫW+]ru@ܑ$UBtQ 44mfs66abeN7JGba Vu|ϭ9,An7#wY(B~SaHw脿ֻutKTO[XH:+CV=N$d^ym&^k=jC Bl3Pno}$F$ZZl`p\/(z?%tOWE*1֝qIǃ &0'? 5BpŜU a)-=V|n1&/;xJoPs5%XF-YO;4[3{Dz C3GW#@/ Ղa. w  㼶a *7ø5Jw [l4#6#<(%$ E@@*6{ػ>b/ vb.R,XBm~.d7>>σw~dΙz̙31(֨]a+;i qjXP^s#ktU_UJ`Ǘsw CJSqGٱ?θrjB˶U2Vt>eˣڻ2j"|tcQBg"M`8SXOJ;<}ߢG1a+vk|s Zj?k\c\y/)[庰p}]<¼0&}ªcw@[BƢyWٮku}+q>ų!~4T)H:͏X](qf0?E8AFCEBy?"Qs>Wj؟O/?u`x`zR3_|{L<@3Mt v1N]&޸:& VzO; ڱmў2!@N;Zcߑ/"C|݉1w{&W F5 \o U;Rhԫj.n~"D\Ցʊ!= =2O'=BB0𳑭s*گx r`q>|@ 猫;Ot|཭ : 8nwW%o&@gf,GډtZ53~yСk #0Fm:TĶr~|*&̋f P4tgWѐ_3QBV@Po*d~hP`eL N6S/$ ?7w~ "@:N.iƕZl[ "Rx|V_D@0k*p}@Zz@M~P`s@iOT_ @8 jF U?.j, t;B{_1o7[igQ ;v{gke[ӆ2̦*%qelg[Wky;>uc/pu+ GOߘ65 _i 6;ƣԏve\U}sz~hk^/r|[zi ֐T媵-C9'UrDvvb^K-`N2X 4 #\a˷vGG}A~8l~]˲Cef.ce~ΜK~8+Kzd"Ügn-~kc9փkܼZuFiD`\m܉#%5=:6Y+ cCC4֜7+1ظ⢵ϕ./gag8.F}k mCa?FIȠ> swyDR6͠s`M41&NL9NԂ E{<Wʷ6XqS+grxߊnExׂPNqP=G 6xxȍyg{˧ ?j;{{2eP#W Mw:5 mW.6OO5VD eL4p߰ yŋέ Fz.τ$8âY- u O1h!TVXseY?H`>j?T] ŕOG<6{wٔ݌boV=vqw P[iU&]|,۹ϼT`3l"C8e@絣$>JtfQڳyly8 }oKv;i$|[-#mwػ5ȟV lT &? cݪ<~f}&` =AG<#ؒo!&:#8 ~:ZF[ qKכlxӿ #x!Un!ص@aؿ>>2\`h/ ˞cg Jr /U2n DO}TC,d_l\cwaUʟ+Kq\`+pO~\!Sm|GKEǵ%ԷfG ۙnD2A?]#]:&q$H*MAԗO48Qa} >/ J?OatvB4sjR|O?kG { ԁ精 ^ _>COy=.@k8o٦}+*Ǘ[u@ 6w5\?3*2@96I߾ɥw@<,*͆Bp xNwO 16A Z Ck#c(%76zD^CxVc\m&dM̎Vl FBtYm/;m]|5.IE8*ocب[$wPZpvI3nF8a@;ڸ||h?>UyskS;߽٘%yK@,dw/Ke@~<+d/}{/kÒ~D\ 1VWoܽ[;0V"P? ݂GT+ jeJ7GmM_ur5MQwnSt.ۅ>˱Ґ- F@=H5!;_\y"9NQ~]ggqp2jݡ旦iZ>pӋЎRoflM~D6ߒziVɹhya 1h!#$ie۷("v@p+9G}1*qOYk+tuYgd c] Cܓ }3cKD}n:*ŻՑg^'FOu _;E(Ϟ7w:~; LE*?im71W~(E#v +d;*ꩣ]7_~w c;$z[ն ʖeg?f5aHz?~Ob+{@8 H W gtU=t"Rkzyq$9Ei*>*P OHKBpL^ǤWGn% &QCs}}ow͡˖g+{D&豷3K톶.NܙfMz\ P{ qVXtI:%3dE41u4B:ՙHrj۪)03PfbFNNrOཱ?v8tIJ6!U<xi K, DY^Awǂ?U@@x(bJƁǓC<iKAQ^BrzУb𳦧o6}[O6&?q1YռN8 )xU|&: 0ȳhtL,2:@y*PQ%a !l>0FGocj@vC X@ǽ{c|P&tD(n }hiJ=,Zl/Ns@skF[Kˣ7z\I Ձ݌="T3Nu|KQ[a1&1^]:OWE`A`?x: M9:RN.7'vz @͆f3=( |9x,MSЬ"x+&nX o).f [~F4uhڭ\0kW+_*_,Rvŗ2am5w5 XwT)@Z_C;H |-OqM'].MDuasc*7;d~X]6pU|HXky|wJPzT/;+.։+_?j0;-lӔh*Źjgtd8Jx~U<Y! m|sޡ"POƙM98Rw HȯG Y&2Nw Zñf!eZ>׼|TfCJf}_BF͓?I*NC{qVW/yO"@;q7Q U)-?R#;v+>>w}'v Jwßk6l gA&lFӖhg+:Rќs'+h uB{]ՋU/!oxt|;;[cOe\Uhγ-D@ x`$nȖnB^,w>}3lҀY:]AgøM`6ρґ2 3f#WGUŕ'7^ڷF!ޓ_-ceLR(N~X&S;xe"qq$I[a u|x\Y {,h>'_F?l!"ijcMO^Y)=9u &'w#C_$@ŝ@~߻+l^c:_5$: C- }Y*㽘5ɜڃb_bH"5l785NBM8&Ϭ'e\gs# PsZ1 RX˞5j sc\Gī RVP22ϟlIL\L^4XPrڪxwOO2 .6J_Ҁ;_*df< c?O2A~k{a%3}jQMO^Wya,>s˲3:ި[yS 0N4R*HfAaHhfx4h/7c@/UBG^j =.@?V#65ӊ@Bk#J畹qyuҒwE ;V``q|F" uDK7´3g@->U_g@lZUyO`W;~Z`"0}[@ j! @ ;0P ~)St<`C՜2䉪>W͙@~]w ɼ-{d-`YOqE%[}7<\]]IA}Ess?}lJ5eSsj(чGZxNi_viqu֓'DbO1_|6.@cJ5cEuW ja}OvM|13)d-]QFOSӕ_O]Ma{Vj>Ǚ}(V'ƀ@naOW \ 4H(`4'P P U Hob=_ #`޻:*O84X[[b{&9nEj9Vc}h%uGDyq(۴N0>叭@4L$bÅ7ՊCs:Ut5"^堆\+0B+Cd MFzIl2lH߹.뻀sU'X$.H =/tՁ_9NJm cޒ`LUz&4]63qC+9V"❷fU;!q\jzz"C*k,:0sU{Vp~G%KYy1`\1Re[0--BXWT:Z{YY o5狍9p@Rk`ZmY;{҉ HZL._iO1Qт/U XW{XzDĄ8ܒV~7YWX8>m_^~ s $)uW|ruD7mX yEFtBuhWTxkQI &=&#/4xS}M}pX;ykoc0O# 4zˁQ8I`gܻ|r7zaO0uv3P ܶ ڹy GqMF׎q (hgOzNгrIS7&?A]_s0޷4ڙuգ:U7Q\{࣊͹k7Y@ 5V}(Ϛ>'6i~w6c)ɰRg2e Sr6?7/*W-n4v\7C Wt =eɚ&r51mc_%+Q`Au #rN UtT M ֧\f%v Wnֺ2k{j;U`8V?Ff% AE'D]{ue󲇋+;27M5{|H`@M|rxl.P+:e9ӗ%b\|猷D;ط4|QW{%L I0E`*MWlbq7|P&ɆOM`tmB- ]yoi0.ZVJ;XgWX3Ώ (4> L/@H=kA 7%g臂?7:ӧH&FQ޺NL \ ww >a<`f _#G/D~GO- cO2͗LJ>ݗhR{Y={^ޛaj/0N}I`@<{ tʾ@  J&S35cWQ?TJ`5 r5זBӄ.y@.8׉=-(?|b{ rjr-gr4% _o9;^{Str(ǥS;kȹ5B ? q5旡/Ҙ]FL6[?ɟ )O!ΞjFƫ?A{jןV'_({E;c.i =Ľ4PcZc͊y EVI ŃkW^sL.۶):s *BD5+dz\2VQ/Cds%{2eelZC(k@S跴GCJ)}P n!|>R d VzqyUL8?25?tz(O%ΨNzM_)NHp/O [3H?}C.4@:;t3QzW4Dj`9o gh9K=oh2P``yPߩx[Im= {$-ķ˲=g{Y;9>HU{ mib\L0fl܁l@$( (7V)QᖔϰXy{oWo`C*7 QRX D%)Lĸz *01P@36!_}P`eW]PN8K#~5-N[/ )o5|\`a0aToX+彨ja^p OF+}85/래cirHv#/\[]a~_}uIM“bݢ?W1<{лq:8K*!pmWc jwI sƁK ~n {(U\ۀnnb%S^*J$> [Z/\8P5U,y^Y-o݈unwg@z_,؏H~_YJ%ѳ!dI\JMl]ǶK.{?n} JׯNaYD^Uou{:)J5(Xn FGF491Վs`8N 'GLM 4-Q*𠿃8Ɗ& AK1e: Efd̎0?CS#_O24*0utCY\nXEN~~c6$5gd9O XǸ>#8@vXi+0ojVyB jCl*+8SN?F8eՆ^kbR'zU1&XtkBYAY`y`::%f0=:9Nb>u zZ;ǀ9kߢ Tq mh~(-#sSi,h\J:^ =Y"7(JU%LI[a hva ;E fQCC+y~W;Wx#HU-yag}j3G\ H w \532H[awx Y|o5I5Lc[+ʊd!}_D+$gS)FX* #ִ֧=d<_076BE/KxʯJ:@UYh*ޮ6u^;}XuG d)RWho|O൷gvto}rEU}xI$YO1~&ee?s] 8/hyLhSѾodD^bx*Dd5u3F\O[c}~R!`q΁WՍrB7l)aB`;kn)bUi 5rn4Cn 4`< X. :XO8Wx|}(E;9>FoބoY/lB#5UK w̙'`I1 =x++LL%]ƀ8 H7V:]xzDбNa="Հ|!kK g:/h0)O{gOZK=O+֡EO8*eC=kfC߅Df c] $+jj3?I$+']]I>hFսn~% *m |7k/D໓wP cP"TU' B #ػӄd@ƚyˤ{ vM8C`bQ40lxv<?&~ KȠ ?r9<b\co5ƴ? g_.Bn]VεQ:}G]~ Whn^:N)h`9 |ΝX#}! ww`t^+z{΋Ccn-COB|ޱ`|I`<"7v՞t3}i+z0JL(7ë]sP a{5j>4ih=jҹO8s$3#^L'g$4?+f%oPT8+q@@ ^`+P o,frË.Hkg˂ˑVr+K?=ӱ3<'TL44`p0+ u|=/do\W\8/<_uE-3)l\4`a՜޲Mq(W5~iUS)vos:. 6@IDATWHW" L^ku ]5|E#F"!*T  AOi; "'3Cȟ'eSWY'=TwR'4ڗy`R" =hF461踯WbB;'uԠz`$QGj1P>C"&\G3~?֋PN9rbY±ϧ&׹6[uغ|6ӗ"P8֮`)0pD_d ,tvB ܻ A7&Lwۭܺ9sRz 'z1^Y~=PٲޝI?9?!Qiz3.y ׹圮] I?gkmIJv}7$| G2Du峩'ї2O}s'< w}6d^hEĸNӀ0sriA%n$k.icev\C0,(~B}>=r> ^{[ɔQIeU)ŇmD=2@$T#>[`B:%~ix f_3Ջ4QғS M{ϵт/࿰d4hȒiǓ}%N}96a׼lu|R5_|M=ѤQ0zZ1Hl_he?~/Hb*!z8gjØiC85:|5 ~|Ls]B7P3) W HlOW%o[EG~4F[5~?-IMM:E=60;_M ߹s~6RKqvHGBNaxśfADOwZc0hi>nښl]\2k4|bS-=$X {ݽd2ԚAaϲ_J &Oa$Xɶ>ygHCa͟`*1 cmV#PG5PZ?Io~6=ʊ/6AC0Z ADcFCc|CX\1БWco;AR|ZF4oU;td \RKX"@zoS }qksCfqba ӱގ|{F&{ڛiWjSLJAĝ4ze&JrZ,ͽ8Ox:<:nxZ]՟o>|L7k.:6L],!ylI^[B"o1"y5ӕt+?܊-O8=-sgji-wa C"k3ßr#{#k%d`=. )s4($/XQW2 aįy#}e홥XG{\Mħ7c为{0`wou@=xE7/M |ȟZCR<&KEi*{_T2QڌD}诋.~u:` dwtA?] |@,PN{ u2ʱH۲`!W$ L5Y}P>qT(/[ʛKR+U<ȹ[X K AĮsL,+kFijDkN9 tg B/W#<cLЄo{ \'bUN!.M}hSOx29XxaEs'9ApجQIwB866麼ɬ)''%pY6ukȎP]lZԞ՞DwHWg&}\F}xAɒj,}Ȣ\}Թ2fg"}}>nƉď;xȟ20S_X9# `]+qft@:hl`>Nz)RU])a/p3MCoU8Z" B}? 0Mv3{RC8ή`>Zc0|Fc%}ًpetU XuzsD^Y66u FtXJ_!5֖:H3_ }@Hg<p嫖 {zºF6|CܕZ(j$C+ >FJΰ =W  jc|ZCbD~MMI\;&Y7ZGr x[& aB`\Att/~f n&YaM#o/Po8&OǙZYbwG4$ g;oM{0 fΓ@PGZw|\6]=+To!ɘBGt}ݝwt#x͞crp΄CKhWu/K73K'@{ [6& >7Ǯ~EL0w0d@BSt -$ FVx2zi3ǖSK1>uZ rl]l"&@~ñrI$Bkengz&=>I{J>O;"ӯI%-qep뜳~(Gy?<o\> :YH@ٹ0qF /_gk]zpYt'߮q&̴wkS N_܃KS=q |sP'/ 09F_6RrNԤ$ʷK+j'/k6# obXC ]'iG\ʟYk/Ϻ~bg98,M_.N4sQjGɰY_.}bbL=+*rJ3{ DVwP{jt 2v)AjqW([̎9g{QވSưT`}ѵ7 TA!oi;sv|̓9O0<5/7{C}jp.o>S)2yG#,!pWPYj29SILY%z'Ncg2P/&B^7ShTL?݀6 lAΫn<# Ğ/ ?9Kd߼\/Cpߧ^{{]1ho/|OxXħsuXWѿ;Vw!8 ]IO|$@n^A +lLS>U_+t1y1ˈ?ojw3t!Bz+vP# _?Mཫr^kX-Cw z\3ijmnk&1Q /$ŏ<&ԝT-~^l]23`LM{tU[~,4SGO?]#ϒxۜYyq u2߁ ,P{hÀ @>,x/,P>]? ґcgO$\+]s6>oif*Iٷ$Y2:*~D2yN@~^" ~o{|%"c _0mZo£QbhTpsGUIj4aG<NGIB0urN:$4b lQ4^*?^թiT@d9wL>rwiƾ>+5C^dTe`"|>(2>7ǚ#)8uK]jL?N)})ltbal1A`lP _Wȟa†~j+bMkEztsU=yqV0^v8#r kM|_ bTu\t-dsޚD^~|S ?̿x!L{Չα;`Jt{#&\2<}zts%R]-chѽkm$_άں8dg_%& KV/=LX9#Z) Eqe߸aF_8QuLŵk;>vc̞s{M>Z~ dΪoryfW[M0|w~EAl~+NMk0ӱN0:kcbMguslC̞W21r:>OyPm馦Wpey~qY~Ṷ h\g/2>ڂ{̀igΌ'샵"U1t's7+ߙ:U> '䃜7'†ףPQk( < ;؛j5>b;ۮՄ\[oL nBq@{l?C]svD9ft3L_'l,8s9$4${wܕ6- O;p;Ggl9(cgdb*hzmY;~C}S4CQSѯ:W=vbB 5tcb| ؔVR3?ܾI~T+JCP~| >!6ļ dZ5/r@k&$I2W8?=9ZF'~u˴3e ~8dGssci"&orZ5xh5J\tֹ\䀠x.@v6h/#fc/#H+.6/ātP!74W?0K!*"W? 8Ҿ,)A=LTF&S)nH QODSAh9$X**f|=!n\>V]n=7$A kϛX`ӄܓ:T\cN!4AKM&7֝ |o-1:)3WC_r_p *Fm^!+?bW<>PDF_Z5F:&R 7ߋ+@7,0O^"R!rPXgCcڼ 3b]zO+:Ao$#vjvJ ֽqmK.(W ]I_ހHd3S(sͻ_xޘwӏ"Q|\stXL ?q<Aw@<\#Mj0;:|2ZqdggڹꝌ^M;:-\ea mk{1? H5ȧ~:s废3ٸy~s^1/@pYʯʒEsJք":7^f &|`f t7C_C| q+az@r k^3]$`4k@f@A!7x?Qݎ ] =96rڳ8ȝ`^)#Uj7Ƀ \a87: MAJ Tޜ/JNk,grYb?r蟣.m}<u>q@}C`i@3!@c~p(̇uXxY!zT_TR"nv(b2k9bN.HϷB DkǂF ÞB`(tl̈́4| pr Ξjwl>dfgz o/$G 48ApX)4+4~l&Uj3q5{+mvX_8][ފfVYPzK^뻀cC } , ]\&`x^^%TG:/}/W$%2 kj!? w$cOsL)RA p]QB^ŭ(BQb t @L(oUWHF` &\(%o4|c:Z1#^t>gUv1t:t&F;Xn3[tO;vM~mkbxçvwD|hj{8ߺLL!;UlUҮowO ?5OpELj]\Stff鎩Iv&LU2YHЗA߫,O;{?OMRX1^A:J;y;C?tdho0,@Z䇧|Q&W<C/ϥp"֝z:ɺȣ鮹'lNtTD<sgaU TZJt< 3a gO^;iU!1,ڰsV%=ͅ:-]⠎xe߆vy! /c\su 4kJhTHVM} {.Nm:o;7}#{_b?*Qe53=r2عTo2Ȳf38?nh?Kl_kB|Hh'= `ru% GɯT^|ψGji] Q;{,@.Gw{C| ha-=~g#sdzEX@g x 0̧=*M"X k\Ffi=tkD*zY߉mq3:s 81}Nb-*hnHLǏ ~04??!ֲP|n@K4؋_Po6SJXbsV;yhJH0N pZ@(H-Woe-zC@Ab@%^7>!0],p*1*l&EU\52Hs]`ŮӢ'7hFETTD DLVD^D݁((Jto>1fgewA93s{{\ˆVl'Չ)y?Ezoj9KbC-rCZz΢ouE:tTg|Mc 7语);d$EE{ߓ.Z+}{ĚُԠO0m w|0Ԧ#|ﵟ~]é6s>&Ғb ]񅸓X/![F xWwNOg+d9Ur0F겫FT [{"ڡQ%\?y68Cمx ؍ ;D N? C]CWGⳳ9"}E/=$G@dk$K@ډ2h;)Y):f_4 ;ramh x{=;K>X3zsΩoKc93mCDV/Z9U`=O^r΂Y |7f&VYLךV*U?rCJx/6ǭ8mV!D1MI4!D u@Rpe~ 1[p{QE5Փ*3gJ}\_/ H-!؇(OmP$ssL-rV6;]TX 9vc\|@gZڔ'HK]zY:~"c"&c}rn.#n휹ةT!A@hG]L y\-BU^|SI\DM5b67v:D&_L:>}\YMTѻ"( ?nйM6xofg(;;&G1RBނ3#K0KĻ@xEo!G%F|6_XW3Mm[)ɬkYHk@TACH`AAS`E 7ZTM᠎ofX`*U˜ dm "b=O˛)6#P0H7:tVއ=-/>EB8PT4xPOO-SLJ}}%#99*A;XA`7㍢8۷frRkhk^t˝3&~֟AR n xm/Hfl '~o#rU#ow]d^t 7yy荑vTu16L}ѹMٞ W2>O3RgG a]ﴷ,c62NQo=>0j׋]^r#s قk&ՑtS|ONx1:ܩsiڀ[1v}ԷdtEK%Xs$A8A8y.koWI5g gR> ]iܹ߱~ww Pظ6ް~Ns܄҂"TOOc 燻Tzm68,Q9m  +:.2c1Ƽ͠Gx&>d5K _Gc]>}Mn_ޜx!5Hp \چ Uԉo7^{#/g]8l~tr@"`2Y}"-'M)@43Ϳ,* TdLޢAXOALC' k o HGS nٳ3($/]/{-+k黼'ſXg,S⢚s6FbFm3 !{WX&E9`Q+UT4節{/JZ]NUkyM0Gzб 祝R^dz9;Xp/$Z߹fȯ#=O̦Y!il}TXٹCa&VL0,R/sǜ:fgcg~drLwcd}!j`r?O3mYFؓ-Kܒ}/W極rg ^:_C0טm)&Lr:d2gP [`:a'a̫/ &&(R`sl@M.<@@:JЕL?#>U+f6q cX-^MOG|L"hi }v(L 3jjK8cb `yF֔ ګ?/ h'@z2xr=3E"gmXX.hP]$H'Z߹d>k䫷#g'{)l#JM! ida<ɜgKN"9/LA #;5!7@POL\o+Xr|C`#<l䌸* ʁ Gk>>SK*L މt~%9y̝ i)!#_&NtLVda+{ :>eQ_: K ˜TKG<_ m!t=;6ӟ2;1=bk壚صvM# c1'̡>x?e!uZ:J,LrxևWcX1 Iy!*ļ-MqWP/築_D4:Q|t2C0jD0-WXwmΞ-Ř\LOJ9}-o ^"rxz/4nڞ鿅m}\=X' !Uo`s5tpKdo<4;xKÍ!yjcm>2g#7`AEGBջWgۭ_1| WxF8 DX_޶N gMlѠ}By]YHM`_m2oq~]0y}U=.#{t0jBDODoçd$ zory-\{hou3fA:hjsvG|G_aK XYu ʻEYn?oX,y;\Ұ}+U`3(2&u᧶] t^KRk=$TOtY{=&p5Ğgz/sBV_ÜR5/ԫ/ۺ&md?.ɶ-42 n T&|O>GpK  I \1|uzP۠dȁCRo% $4{| X"Z=z2Q&@WC!/TAd}cAGֱ@3 ^ )ret 7fe* 'StKHkWP'T<N[R rSA\]#/+;bFhG8K:~ 4,HVO~.h 0qwq])8*8N<_aj,@(U}l^.[Q~oK`ѹɑ$ 2'PGk^hK9|s|uҌ{-CQ8c՚HOM`Sg :0lG|8A1Vбp`-}#G^zkvm(O)bl&:8Qt;+fc|Op*9L`21IO I0f'0 ;1'ly磍Xn,u~xnSem7 K]SG]sf݆ݶf5r9e4P'd/#}%np஍{k /[ fČ5xo;\baكE5Q]0ݞ~cˍLlD*t>vO2O`5}tuZnod8c2eW+]hnqʚ"X곭]-D3z5OpUjj!}{dgWBPj <7@@P[p.<(!?m=`?,o.oigoӍ<ZW}4H,@:0;bQjUSo.h J`|--1-.._r *_LLZ~G_sbX2yy,rq$%]-^̉ 7?||\ r^GI ם罵>~hEĩOlԙɾ5'_wDv 8߇ci@=VF`}]<$A][QZGpcdz; 7'XoCSȍ<ޱ(~4/jM|h5(n\mDhiS)N=#E2^a^n T4]S] &:4,yfDA]X.jU,An3$ȯR=<¹Q#6gL2q ]~b*X*䣂bl;Xk֥m cΝ.XF¥X`iAk]&HoG *|G$b1C 1;|5E=]Np12g.|V=ɠFwJtDA ģFJF{;AQ_(|=#Dͷ^:?u. ;,>t(yF6"D蒎M֨!|BbTurkwyhJ߷_!zRU˜<@u 7f|G!_p׸mc'>;ڒ2;8ӄ|=4zoEhg}",BQ.F];J/o ..  ЀOѓ[ z=1FF`:ҡlP߹8s 9k}`|ްR"WhyּSo8ٓc) W+3}*^zc6AAӝa k|$De=y돈끿Kb;Ld7f46/Kn\4-ti`Ƈw캷|e x^А~XPM#4~/(/9eG VL ( ?_"+ ,ծ.h`. Dq| b${7Cy=ԀtK;;|5oܞ3g+[F<JmHHᶍH/|Imh0\h z*u|$T[=<)ʷ g1aijPkS/3H5RttAC`U.9 Hd6Ǿ,;/c9uten&?\!bo{>$/~T;PtΞr߹> gh,֘.|kN`lu3m:U\+gI._nvHo+JLRbafb6OZ+MrL5c79i]60 !Z@*=Ep:ȘZɊֿ&{5J;`{^?ODWvdS<8 EOg[\ßg#+{ d*<}zXu$ \t#K* ]Mwz;5mD M3X/V]q !>]=̠Vܗ/~F/E΍XmrԸMt=BT 1L'&h ^UrB>uf#4)s2e*xec8҈x  ^.Z z(Vȩ L\WSWCǿB'c>Îsʕ߆< |Ou' 6G:S/`WMd@8,0VO0S=vƿgL1\)9y?=z}&_>7\ԒFt ;Oo:qTƩs?9zj{.n+hҕ?3(!['th1}mH^::Qх8~&Χq4h?g2›BzyHScJ)~`Pӥ` 3 #Il"h '0g1$qO#*Kϕ+j%x7 Klnv6جmyZڈuf[8I=|73ە2f!O8i,A 뾑H??6>\o7vio(Z`9,7q ez (&˻|CewtPԼRmu>q7!aC* i"(-M%XP3swG|=F3{lAn=(lWkyâ\X%>fky?fkmAUV ap1}gkw Ky^K=cw֮/5i RGǰn1?!vj4?z+Ǟ^Oί;=A߈c ﺄ o#HW-wIrb &{KKbv^]0)((q:` Jj|&Hw >d55nߋ8{Rl"v.eR'6k0: I[`VT6#.X TpLjj%zug~>Cپ.(f ;4|ɑFgI)#~ |xϼ[לF 7-ua^٧gh+z_5jFiS5mf[AA](WP*x?ޚr Y_g$Pl8^78 %B谽LK49štե ?K)$.=x,A0v˜': cD`daLArcQ.վтhkArbC3 t(40*J:.:h^ς8>G#?z*@I6ј{n\sWzսJ~o '3ٯ&-hKy.n*BTGa{vWi,E*2;97Lc(AN`l电]3fU⍌Ѝ \6'c]G{t Z傎S ^$Ab>u0楧3Vɟ__K ֧wQБa.921zZ*tάЮuuTM(~;9TA=@{UI1mJF[,[zPР[J|]E@3t v7 nGIѱ kgkix}Mܑx\3/ q/`" il&c%@tc(f3(gF30vY* 𖀤t$Hw~y5غ%vc|!B1긏+.`tK챙=`uҐ (PRᭂos[*V3ǯ1^&7+=yy妞f`5.MG_sg `S7BR/(]N&DtX[-]cv_lאڹcgq9o=m(L&T<`m\kh]Q)g\m]oy"{=pQ2z;* @aAu !>,BPAw~^j}5 ֯| =|Go"cUF=d ;:-,/31ǾӞH;|btIꂒ/XK`[͆KyLju&=G0E@.hb^_.efF^-<ا fꌙn.ojΈ἗3}Rg~ƳUKIEtbnK{cby`MIc[Arh!H_ >K{s t $]4ا v9pbaiPyk@.s% 9I澖ԛlz}eINw\*N5(YBC(sW̶[ʑO]EM獰e^x˽aPEvx=t'{Ӵs<_ޡH>u@Qɗy ocif-Y.kߣLaWRj03F f*CS 뙂{3B}gks9ϿBޛ/kTIti ŏ3); 3MP 0~9J{hyё\B˻*ȏv#AB0C-Mٗo,c9 {žݜ3m0:'+7%)עElsJW^Ni73ZSXA',;A_r6v6٤.AT.~$*c Ա[yYT_p>}O!(yy%RM%t ~x}(QV gq t~z;eOB%0*?{c[TTkX+ϳtf?*o *7죲Ѕ..9HPsU[HE)DP Wd՟̓YXYs9ϺZ#kmqGrEk&Iy?d2ϙg_2@w^%Hw#D/aT *.5/xBT?,ߡY',ڵt}@[-6R"Å鯬7dA.*/?QP`m.}KzF[h͔S輫]2Sl v{h"<7.;RG Sr /^Y2YD~lR`_m|S%i[CV0aqPZ+wCU"RQJ$%yo*!SKhHG=l/Gz|2s:Bq^=kHQC0D 7/< 8B^+o9UO!8K`+_N:B>m))'$/iv5(:k:f~`@ZsI"`Bd>+Z||:ٳn.(Bp~4^v#xa(b,ʠH:1n[̿ޮt9[Eͻ{R3KПY6؀j*yÌIm?Q>3zOFCA()5p-vg9s!6 fQ.~<Ǧ1<c Fl~M G l(Ё-ך^k=*Ϥ|*y!g0b4<ϙOlyiQ/qe3{X gћ9BvoqϲSÙiCP:O: t^&_ =4 GFNsݓ+ibiF9"(NBwz_5.^A Sr5gT k4,"cq< )rkWϷ1bx*< +~~b~yPs-3>OK X”o5)U@èAx>&kwI?jyt[+V޶*(3.4O:qYK6 *L6|D.;~ Ubխ`>+H [!؆iWӮ@V#A=װvڍrfTz][C:`͋>1GC`*ʗ62}!dECl6Eтu.p?sDDψ"lq z;پѳ}I0"@%0@0 :6bakw<,Z~_sk_z]ʿ19O]߉w2r _olAY]LO@C#.:(=C6e={mYhia_}ylC:``co\S:oIOf# (s|&:%bGQGPbNJw'"t=!fawȻI1;M[ H^ j^_R[C~uJ' \Լ }O±;o ,A:D}_l'c-}Ġ|/Z%?R[Jϕ<|ltw nyOfFتÖN}#(~ŭj_8a_ܺo@^.<./k:dtɪ88edSp!V1R ^ךNK,(x]C01;n-S ak { 1~>ߵA%kI5Z0%;y$.[)RqW&L}3#S$S1K]kS4αk!9]yo (DyY; Eus~'Xu ݹs[94\5ИrfY[I~jt]:_@ߊѦ Ds{ u+zb|?(4k_ϥu@Vrm8Q&o^;goͼ6/Lz&~ 5Y ߝ$3Ǚ %g㥗ٜx8gWOs~]ULk'A>j%(^ bD-O#8[-^J8|4'] m\v`9]l,il:k'qt`LK>5nnsܪ.IZÃM.s+yo%6<|ʆ?\,H׉\7 ^Yq  v [Y lɓ(Z}]!S|T4m-&a O)O([ kb5:?|ngδJ ENƲ[o"_w?isCEoR؁yG[M8[εJ=q[;eHKgmV?o-Dob(?VP]+ [!gzN>a)| W![jcNI=b%:-xD|Ao+fv8A8A}/6|g>Mwj9562fA+mʪ+H 6o,ft9%KH?Z50:HUc3$&4}fƨך <8N~K&fpYBEuQҘהĥ]TU{z哳AZ;Lqj1@1{ƛ-X20P|3M; >C0u1K/>tDeqڎM'.PʝP e![403Gv-A~id\t 9"} cZ&z`{ѳi N2'\-r2MMq7zf?.5%'1g.+4Ǒ=wBg{#RvRF;ߦl;2iAƈ`ć;]ʛǩyo#m݁|`Y"<Z&=٧Uޅa +;?:`6e^Ke#ӂ(w5FP}]0jq}R9d%V^bJa6ÂnLhF;"gs^}(vlvFo]33ڦ>]~Ϣ?MrL>(ݪ ^m\g7cq%g0]f}OG;yE?doa6KJp>{]k!3()mm[tU]E>'8`TATxw|s]S÷!5$=,{ rePi]PC{S@ U>瑎ܴB ѝ'AGe 鹏 ] 3g3yۍ>X GAcP)xVTك+g¾n> #EǙ* `@اW'q&^&ؽ$}SPݮtl"8]$Ea/ |q#"ͥ$B9\. ޚw-9p ,> s(d.E51^D{$;gy,]Gt$OQtȒCxKB(*!C;'˞׳>7rUd_aswdTla!>&F4se)/ c^jwztkU{B F6ǹ%o&Ov3]Ep!ʷۚĥG9%8@Ϛ=^nkVljBfV_(OekFz̞ؔrƬʛ-y=y3n?btrc\??=Yrv{n۞]ig1:б8jF)y;{;>+x/z{c3?D~A~ ,fet%ו/_2$uuEN_t|jg]g$_Pnd\[ޔV޾p4s@ǒ'N=_*V:5"Aq Mh{FἧvG<5Y;Cĺ{3/|mN W&-x/Λ"Uu-V9 ʲ 120Z_,9FlZߞ\OUDuVCMAXs SgO. gU됯~I0rYl>\ݼيcH#?+:-o ߫ 'YH`pmf'$Xg %{CxM=ƅj0bzN-=/%8M%b?WyNFhE=XW]YHg簓2p2ңsѦCY_) 3D7ߣ>ic{Nj1ѷp>[:VgI[o*{f渾T:pt:!yʹS_:oIlۊ@@uBU=ud"Zk\[#oG1s3, XcތfGs<`BsE,QeƱ5UѶÓ(GÜzk]3KXXD*CP~xGsK]wQL+؜ho&(]ST]>_e[#X;!KB2ܢכOCaYGps\Sw2PniZ$EW+V⾞mjV[T!+x N r߫x[x.O4YtvFB=%~\An=(d~B,?; 9jA[ոLI=k!hJ.g0 \':n++r}wI+l?qٰZXG0b Byh*o,*c~+ߖVV4֨=K%[p_T_^Am{> JO@fc&!KNd˜7[@s <$HGmEPˑ~ByI$hN]~ [VO۰Tx]I.͙J:\fIp/gGp-O}prZơd}.z.A5Px(UD pgK{n5;H~|'9ߏu717wB3WFsrnIkK"5Ti*KKZyۢ[ks_RTQ q@:[ JΗH觱.ȥ(!yuWاggVϣH @75l$7DTnjOA̖ ʗu[)P( syKm -y`T½Pϟs6<~\`$89|#j tP2-.sFyxX[Yʛ7#OtN|@nasL- EEJoqΣ<913b2)6S' *׽m-x&HE-Ǯ})*÷6L1Y0GaE31G>"ٺQه ɥ2WfA:xA EN>l0iftA(okv{h``dJo_Ȳ}qv5a'KT$A"HuL~=ᦽK8_D{&&%?56c'3Qk]Gjk򝽣~!3!}bH>PW7%N!^T'd`'jvj4D-ZFA^_Apy 2}X'Ywʇ.VOv(d3 dv=GO -*?sf7R)~:'##KbFtfHr 'B iOpko_Hx=6+-CCHGuZ4`iҕܴqI\H0gCgM^Чf7a[o{0Bz"FJҎX4.{wwɶw[lSߡ4h3PyB5?3-]h~֚w([R3Ad6҃`+= }EsX2M~izYK5dU &^/>~H?cRT.g;wN>394ܷDYX# 4> }B$go;u8:b\YbrA4OXs8/z}`y|W-O앦*ۯxֆ3!WW`YCGq~#t >a,_xh&[ӾKBב},}l0ϧ"+5@eq /҄`S1LƼ,1?@s YkMM=r"sW n-Hy|DSԼGHKeo&UOz G%H=ܟȊ(oo:\/ɨ TŘʠ\ n_XJWx#WY>$T:>88!Lw/" WBWaxw{ 5G|ukA3-OJ2q1/ X8F_h&3b8='l 칠vb-_0 ӣ•m ]Qq$;l{X+SzM¾oDiٟΊfWg\Ӗdn\|u!|(bx wvN{rd|Kfo5qws9/βx`Aأ7 vci4ۤĝ!%Wݝ3=ں97Ml}g3>~věmL}z~M$I+H:5LF;y98)*>ݽ>R(T3wg F`@$#&J0Pm$hm;.^뀚]4lקKhP7F_!*:A)3,KlqG(6^9w~)*؆K:S?.Zq=~:;KTHNvI_n^?~ICϸ(TSbohT3i|h*KAvOōweU5J){\[>ОWJJ*Y2ۇOΑu9'h4¤#Bj5|YU(@ j/`NSTdlj,B: ϼk hۂ৳voxy y#nvWOR}&Ws%CP⹣pIK)k„'SVlBc/αG C>f줂Xb<1J`0 _!q炵W w|דpvQ77 |wj@_ %?\K#hN_1@N9D_R>Lԫ$ 1)Cؿ޼|M(f%θg~ഷgF?VܫuG좜 E`̛ɴ./˝- PD|7O/RnNk&|9D_ݤ>'M.!ZWQt;8g n7/g z3S`+c`=uvho֤1tn"ֺX{orEu+pieh"K,Nk1X`f %<ۈ'H5hlܹVb_;Ov:J莫q'(g _%p0`;WS7\WO)Ż- uI7rg<ЈTe3;0"X[bgD?|d]96;ÚfCUeIPތb*u[S_[Q` C=5BP+)0xG:G38V%6nCpg)_%ETF6WOw<9z X@$p,ҐxmA&(hTΘC?iK::yѨo Z(`5 -)VN%qvL#Ӱ:8S:E+Qo,as$qPKUD(h7VIzM)xRG`EnFQAj-\;ԊqF䣜I֚θ_GG};!R#0y-)K-jW0{?ONf?ustbn_$#ݢ0s!k49WQM)r~$y}t]/_nbjϘH!<r!&^ٻ/&w ;Kt;3s(`ܴ]jm"lPF[ >N.Ff_w z^@A1X`/_qW\/p2po7 NGP1zs |s*v2o0VSO9ST*,Uk0ZGOPL>>e:#>KV70x5GUrYC,Bp^ yW] ucײ0Zy M'QP{zAr`;̫g}ه>]ժ-4zojoܜL5x[FS0/sR?v7 @*EIxrlljy)!@-p,rOZq(\{FvA=E0ڟE ${Kp3e-dfh[9̟CxG060>Էޘ?Ru&5rRܣgWsy2`Niܢwh;Y-8F7~!R/ &pYOogEZ["⼝%iP50:Mw>~MsIw:bWo:v\!>Q2S^0 c>yC euicviС|Op{=zEz﮻|xMEgC ȗtJ4_|KV # 39uռoӫyLgŲ?im,XߞtE@R9Ag n*v݌V[~P.-sj?Ѫy$s6\v3H@Y**J|gCEO/iuea Ѡ?˼5zՋX/(F ҫΆީ}MdOeW}Ih!p7㟷R]Y ڮ֊/V"=IGGݹȡ`"ߥjmw"Om[ ! ? TxOY6wIEcc0f`_-ooduՂtu6TrS~F'hTIֽg>|g] 1 qC{q*5C0spk?y\P>ۻ$eOK|憲.p{Cvk:%*5CӺOZzDΥ<37 ,RGVxZz3qeD6!{QV֙ QF(WHZJk=R);:!Ft.eצ~̲HAyj =#taV%,o"y?dWpu|VY!8҈y=y}!љ/b\sr W@+=2ڳC2nՎ pq[7۷N'yV[稗w)K9X-a߫cT.ޱR)6)#}>Q HiJ,0{fm&|v;0ǰUc_ACťLaS631qί&$+_T9y0l +kW^#:3 "Nfoj_/R* ; |I)$l2i5\6m?KSTV]Јb&"T&uRP`~;&t]-.q1t%6=rԬNTgjz|{13 Rx+s75^*p!^C{ [f&:@TOI96mzxۙ@>#rvN:V:8rw#N =T' 4=;{жT!?H8$'-ѲaʱzћJ>TVr Z?1Apx# F}ip^h,}} TB~rRYIJ"'g3c(\Efi1xA"i_PŽ}\NY%p;!w*54J>p9xϖ _>C=Y ((N5B礇CB˸c״N񍖨{ۛN1k/;m2,#j!~obf uw Zg}5pC:6Sçoto[k>l+X;~Jt, O(E`Q: mfN-/Bҥ?C^0 EBW H5vOb݂۲ s[Q^ePV[Ms8 c>*[exI{)!xpkforQV )!*.إѿn!8.FFG0AMt(pzlb-ņM+n(oT S.6_|+STyЙw(:cVӠ(;uSNJY]^rsl2nOwK )DEb%9zM'@|7>9 k":Kl=ߩ^0ƀ%)Q1zqZRb KYr2Nqd!;Z֑S[XnNUs:S7qRQU` µmu6.G1d?7XHf*\/ڈj.r΢0s ҀASZ*" Ёl;4 y8nx>݂ʂrZA<^*?G^L\r1~dt8;ZVNyWkΥ|–1곆W#̆k_cܶ9i ˾".Wf H.H k%U E^$r6W X.Xoւ+7| k̊K2iӁ8^zjL5 i:ήݼtTG0w{ H,xb#O"}5F~KP08Ap ?Ip} Z FW V'%ȇm!~=%,W Y/0?XnAA# /# AԻrW^/9X:Q>Wn Xr (ޱ^,9W> 2!lRy B+RVm1V?2}~@n#MAO9#Igg"};O ut((9%8 DsNX:Zuv PUV"ٹ)䗍PNҦ_(١lٔWIbg:RWN9M?qw/J?۩g?lw-zq b%ȏU5FM5_ԇ)}vqF$J bSC' Z3ABqiX:%޼~7'-qc9Uي*Qq@>/%(3kd{QۥD;yPXAe Ohmxo¯,x{. =SݡR%}d(6_Dm 4a0uU+Bo.|cEJ3FzA;b\ ^'zX&?J3zd`5z~niO4\q/](?j?(G#rOAZ5WsNұm}g}s ?Śܣ=U%BjZ^fcv'bF xH'nil!Fk_⟎ 7~r!ۦ#|k ٥.-Ҟ8~7Ro@x݈*"6f_DFʩ *3 &w3褂z# q Pܠ>*2rs6MqM{5 Ɉs|-Km*CSbWudQq?1brwr / uC]ox0UjMRh 4hHO)3"Hgku1p4F2C '=}!XP!. xTs04&F*cKsjFCjˉhŜyGl6GN^;h(-}yX^XJA._ذbÊ x^gXp]M &萿& $ػA[n0AP] ֙,( V[9o9?߬;,ĸ0 wܓB~ǒ,n\H9pV6[S0 ~3f)]fۥE7n'~tSlDqU h?veJ X5/."} ob<V}ws\[*O{{:N ں$3}vR 0OO[_s" (L.],=w L՝ 4I,?iA~[/$B쨷i;U7_[[m0rkVi >6_KgIPɸA^!ڔ:788ݤ`=/*y۾#L7ZGɰr8owW+* gƷ.;.r9?P}NР 5EEvხ"^d{H7iI9-)N|K&g5>",jRk{}o"3CRj+" #i ^tl[uA>Y4\ ͂voW83c@NJWW<翶3Yw^M\ܨ&W[TvQ9ʿiAS _ZX)/BB4o Q$b+HaJ].$l|FwݞU~ FKW7ʊfB5ה!ۘG86ܺâYVjW<`y^M/A^ 7Ma.-fG=y%xE# 3Np=[`n-hh<-[)|$8K kA:Kn2`D ظTއ]0*$eAD7AmswLpN;9o q 7(c)LUc0əq݀1oekd%x{bftG@@W]Edk?P^Mup0eׄgѮ Vԭ%tkjDI+ĨcsTo742;o%(o4Azo 6yS\9~{5\+[1^bRѡe};0S2'x#ȗ/ ABϕ}e KiOCoHG 1CJ#F"EjWps _>0֟~}G$wPxB}ahb :UaO/i1ıGX #A"zU"2~Q{oJA}{g 1SrSUA~:Qb1poi1sE`rG7QzmruKxg|Kֳ4~|HQ AU:)^dT;>> ڬ)x gqV[C-88չ& Y9wo~ y4,R?SƍoQoݦ}@FfԷ'?cEJc5cc@oy;cy>_9lr}M:wl%m`X#h7\.=$|C{=!w$p<&`L ^LjI/韾yv' ^UG|6sq0# JW211!l4}3C(ƅL h@ѝDlk5{:ҮT Ӫo\+y_x5**Z'x6d`݉x/ӳGF<y\v^>yv/u  wگD|{>~`fɹtxH:cOzIv~F[/ǝvgQ7e|%s"so9UӁxR)tCP@aKV#Plё$Le󚑂 ҝ+<8~3\{S_ A0d 3 q 4){oi-ߙ5T)Kw2x^F!\{$6t wEqߟi-I" f6|.xL_vBP,|ABp}0`~^2ePU{ =f( KAWNA\"_ &`69], A:a-}OdVz 5( &9|pfJ_~k ɤtP"jʤ/譑X,51.) (JD& O$.W;G9_ 9p|;Q8,7~pLJ6#!._9C=owlf;uvrMr #u>x0 fL.%8gM@27Zn,ΐ_}GORRcCB\d{( tGڟ=L~CEJr?Rn.YvoG@  g%iׇ͂`F@=/LR7]tOZy RV$m{1CcAY)IyT=@g*G1|maa! ۣէCZ ʫC-:_WA>-.{n&#p C , c`P 6?UΆ'(sj|ג7׸XqyůwV O|0zOpJA]Ax ]/|ahCQQξ A @1]͂ Rw V f 9PP=&m(? ff9I4bC|8V+{w {#4RE|%ꛮlL?Nž%@՘^"}'TͨໞH~HjG'`)ݞ6{]5B"0B_]%kwEf@Ռ@A/WS}z \eCN:T^xJP>#>}N00d lPs03'@n_{JE|/8C%ê&-0>z'(NjEEhܫBOl^ fF%{Д򦩳ԦbV@.+HlD)J2b6}qp'7 Ts%[3 \<.L NA#/w"%T !A|v߲adoxkr etS$=$zs3Zp"ӓ?^L]4r?E@` ]"p&\Sɦެoy_Rv7%,Ʌt5~S=Mܺ~;XA>,3ݫB#6:Ĺʞe!cf %{XFn}f(T]d@I50뙯` SsEw]Nwl~3u>_(O Au(biL9@IDAT/`)Wp\Tɽ9FZ앋Lqߨ.~2N^d=3#!|o7`HU8|"6|#qLk'걷$!m[J0B.s:3@UfoEJ~[\> #Ͳh Lc2zkձߴlqCٹ.mQMKG~]Q.vJ੫".]ޝuw=Gji~G[_ +ho )(&EnK"8YAqK0A:"h8_- ?"p??&U(=,M3辀xۅwS3|uEKʟ6QӬoRS+DB{l^)H iؽhsY;/LXvuܫ&^`B#N >ev7Z@9? ASK&Jpd3\CCc6B.iUn':5L>hO̚t-+FJX7Oj&>X$Xn&ڄF$|oZc]M`ߛKF$I< YN`zF+3_a{ϱt]S\[kkǾg0/ W{@ +]u[{}ɹ~(PћCwX$VjD0 M& sm*ؼأpF F -YS"{ #"h=)hw}o`1v{؍Cde@wXc_ccRP"{VY;{%,~ ƹSL'h'+DU5F%2< Nr͞%JžLIgI4>h`_v}O8ӱ-_hu5pՖk!H)23;Hu*:ڤcy fxg3HGƇS$X#kt\iзIѧH)ݯYE_6MS;Etl#鲕]Y0@2΋x(l_y`AqV]PQvuN9K8_?bW.'FtO<~(" ~ <,0Rh1 ^+Bv`FHAL0_^Fl0Aa< VhALA%^o0xEbY?H|Ji_z螀 CU;3W%&cD\{ ~Jsޱz fy0u9Dluiy {>q;6]rr-A}-|jblt33wLmE+zU泗˴ L}9-,'j ų-i3DrM%v;{5m)S%h|Qȗ㗝M ,$HI^'p9f5tZؕS a}X~AVܫ:9=a+оH$F] 1x`?]=@6r*oF/h.ش~o3@:AGvIng,iI; g-N"zsՐku\)xca/CQ~")KAZrmOE?>& ]U%ےq+d3Ğ5RλwqI&YxC؏X&4[M0j?@kxj._&E1\Dxj5+w m'm Xx't`-,$@(8#>YU m7]U0<|wa)g0/\/;&fNMy =4{ou49ݝmñ;g8tKwLjwFg !pߦ4OTjw v5`bO՘oZ0m;@`a_z"?fǁfcҍ}))OiЬߌl˂p໦vYAzP'xe?}5z2  EK,̘-T#`?K  n:hCDxR?D dO6}ML:8+1[ Y ƖbOTH8Ϙ^řoݳ 6|V|@~0-B@G?(|N:@^pb 2\L1bC;ɺ5vnt#z md)6G/+FTMU# b[##dxH%!KТE9RS] YXzHxίH6,Wax$քočy ]Yc^bBLV>iv 'Xۢd:ثxY98 B;r'$FEnW?to"y! A^|$"K50=\7m&lj)|PP_s#߃%G0տ}8F4sŌF_2Z9V&} =<&<_m^[?ľ_N"jA~`ўzXS ;?Ԃ w QZĵ  p6%Y, \C}L L|;8S*,kK7w˃lu6Y)H5%x;3& 3N$l#x$ˆVۂNψ߰WYȧUqڴ(G#6l+RԓES~Gȭ69l'f:XNM{z*(My ~7MN_=joǧ_pYtoiol:bJOT5\;`ӻޘi#x@=Sj,I\LzA{?' \ibB} ξzz`iͼ B]|+3r X_HHkT 4N0.s/UrRKpoG^w""OD 9*K8Xir{^+h p,52heGx_I+N5'",(K V) V~\C$^A;L`xK[<8FdᔶҢrMQ6̈́04OK7$gLj>Y,΢8CipTN%GY$ve-[kVXc$vy0q=f}U3g݈|66$o ^c6d7l{ATsv}A`#uKQ:qR'#nHB{6;{8#տ LAyMFSu\XBo`ꍂMKG {}^ru _^'sDr^)\* WO{K!wV$i`JYcݏ/ӱ8 M&h{Ǎ8ZSB"Ȍ_ɟu船o I1bF@ł?uǖQǸ,U0WU"} RVPu8숹[0I5pUv{ >:16{sz*THI0R ?b\!G _Q.p,m>֪Q>˝däHdž 5QbGX "1/WY8y֚_m-{z#G ^ZC8['l{e&t7nh{9_H!]1|y뎆+`'}|R\e8[+x1\%E=<*XZ^plz? 17/Hrƒ)w{j/%qf2)S@ ,%!R*a2wC/ZMtmԠHVeRQKAՍ!}KHG E998;cl"MGnwyZx{(6=rDTӀ]=p߹!Fq9M?OǨK$uTYMIGSҫӋ60#AAzWcooNP8Jxc5$ 9Mf7Ytuf&Zѓ̠ލ|_9n9)H ڻ+?\ "HkP !zAǿ`{Am@ \ H!cp { ]-g_71͸PhK߷FA>yYp(ȅ/X}?^pFm6N0o7]`TSAR _{ %^+_L;}I&2  `v<҃qEYe ^A{F7_yds86ӊ|[:xmDkl ]VZ#P4/C{u|uetY.޸ص$7f[ [ķ}"`}#xtZQ\KZ*׿溟g!O/ISjn]bD%_8N}[ ZV{zq'0B [JWZ`k3SWZR{3ÿ!6,>lZh\zo1v|5ܩd|/k,-A>E=QP)0~Kn?r| m<'Lw\kaq9O8П%Or'z9`ϾZ`=Xn 3HG6\[Y'Ex[V1m)pگO;O*ަ}{ {X솓1d)ϣHARrXX.*8TYMz -rUE18'X:u֊L7fqm?&{D3v5YQZAye9 _-eneYa YgHΓ C[flRt0΍Cl7Xh(_-gS夗#U6A+['.nؙl$16|ڌ'!vnp%Yi|ΘEP 7s'M;Im0>L4)ao.@|}e X_W f xMH("AFt0aXM{e <uĢY cBބV{ϼ b`KP>uWOz|GGw7w R'% b#\ ,Xra,zEP vx`ArH[NN>FQ#$R4(0;PAcgaϮI=F4AhH%7 +w4p7$V9Sj!^o L`gqm>^zp_h(x}f`&T`0@p^2r9TL{]k"tr([e_ v߮>ϘV{*_r |oo_bo.jXCCJBnTqHɺLtC `{=#RWM'}`R]MBd~Up]Ϳ̬rA/m׻$pjg{ _*[=֡SՌ {S\bO%=UEDyCu??`oCK3|wA k(-"~+8_v!(9Ǭm>o8`;:_;ْ)\jL10aQh̸ a.jbaH Y7^Fɥ>5'/r;So8xSV);&w3[pדAeFLEANTqo7VAQ PPDd,P{7MZlM 8ϧ=79''gQXB9_ E#"ᠭ-%+uya+Ri8#d*21B͌OJS9̡Wat!tUb]> "f7H.d`'WNjmiẀnbA^&\$Z-{dr uK fXbX"=nZBT**k@x0F R 2A+xpͣ)Hz¥٤4=5iTqKsvg2w3>6-N+!x?8R}Ϸɨ[Fa.*xി;wV F]Jxj>zXPr`GodJ_j~??*xMǹ/ qgߔ/HP10D$:2y.ugB+^9_Uus z7td(Qp=AN5U\c^M>9Q}ZVOt&Dm[}_yv'g**g0BF>O*Rs_3BojKl[̐.Ⱦ2,h(ˆL \U(DMpj{AQ8уӔǘ/+^Yi;tgoY$g %|4޵֥? 3JS]Awؘ%i)ق{R|ƩF }(ezoЄ1E D[ g%$dv%kcp7PYZə~uQ14nD-P Ql{9[pb~P@x h$d j!a1Tl(X)b!S-`%rIJ*F;QT}ީ$ 5 t@1źt74, 01.5ߤ&qTr:潛CEcd\J՛t[%atn M`r- elV$A g??݆X  sD::y5vb 5*/Θ8yꐠA%}3;,Ax!O[{h5>A~0 V42Iw7s]b ۅE.҅;%=U"=|]dօN? f /' ׌_3տZCzkO_3CfmPV7 :=E׭ՄVxe{l3+ T=_6CL$ލv,l|/63m1m[煦SJGӮ`) ^{.u^=yb NJ @~p/Jx=5V9} _ʇ@Ք' ~Wɏ$SUl'0tNmug<-xE0lw vz3I`UsJpό늴ZiDŽV4V$yyY~@X#!‰r`]{\yd*_o"ķytdѳ*$P9 fr]Eb^ Q~cDNHlM; \}D*ӿw&'B?ߩkѮk\tJDΘ{ û>*pK6K<ڵp.2 ?n\\[jU]γ'1g׷/Kv+y:z#rO$VK˶z}?rc[;ԇcAD [p^\bT+8vM}^ږȶn^KB.K1?Ɯc^~9"JCbt;h9uai%d<|O(WF'>E?Onav̖ZuCJ[z$V6y5+o“R^dPAVKDIS۸\J2٬`8r(n}'7 'tl$CRC>H}i#H0a }^/,8QOG`?cr3FQч/w>CdYE# v^ }N(gTi_L *rFKO͂ jEu w=5_0}0.Vwb+{aٮIk ą'-<w/ rnȹ7dzKY*]/Pzv_z͹G3u疟o2̔eh._%W_fM̜+ }׍0%C0_o ܻň+hOtxsO]n^n"M7} ޟ=0sF@G=GR~L>qğӬֱBU׭b(rɕK..98Rcn X[)M|8]G l#-|p\[(DgP&/@Ux"''n'?!Y&H/ f<`{vlx?oᏤ#{[5QFz :XO$8YO~\}!xD;hJAsc\]Hi9Rsh"vEB+=hd=K=m$!Fȉ. : {qC9|O_1s!߳"mG'OM=+uR8P]j"@[E}(=pgI=Aʬe41ۑ#Ol p@Ts+d  .PhgtCN{HNm??JOݮf>kW;eb. -2_]Փ5c Vf# ȫvG} ^,DaG\mWqֻx[)}9tJDiNK{(u`<{#xt+o$m[" {K(6Ejt$5 md=\p֚3|b ?iO4g-(^Gޡ_g&g @&3ė38Ρbݘ|)kZl}W xf\7qmm\)W* h\P"R.-w.dv&9 Պ6"\1&tӥA?TP1 l  wrY_3F?LK7,< ử>V I6r#iіr6󤊓`MjVt-&t8hniI򻃩8ioNyswϝ" MHG7.HCoI-V{ܲg|7pa3_:s[ nXq͊8rɏϤ"CSn>#??0taD >q˗'^>/hg?VH}{6To8 _K-u0KYE?7⧚ຆ .)b+Fف|zdV&gBd^'Z$DbO?weVtJC fzN[A96U$dY!f1 GjzIf$;L/,bSj/׾'I:%'šNPRkG_3[{ ;*K-wg`(]`LAHGh/asU{*sM7R׈ PNE=&#:58uL>\J9"r; }*x\<[ \:U0C:B=xbCWp&?q|-y^Aq=5mh a#+_܍.\2咽/E$P@,'_瘓ԯ)zLn Q&ZQ_A&Qɕ1qNXOE+3=I_ (Q;j̿s \* w>*x_6Q5C0C00Z[<[[=ٹ?K'K ߼sÄÆɉ ~yeVe-+SҼ}CiwK!yJͺn6@wm[@7w?4z>}h-CLGѥb k caEY}G=J⍍o VL\[:-ʪWͩ ֬҅KLl9xf#(k_V` !ϿȊcG˦=riǬ0wQ-g G]AeA{q(c+4Z ʹVb.Uڱ[?5 vcj4>{H*hin#nAa޿Ԉ }c}aA߽X0?z<2'rn,%[keG2WG_[3!a~Vդґ.jJy AUTB 0PbOAAypa曼ܡ|w{}̫O_4[?*,0tuNBV2 YW.8h5<#}K3X`o#bˉ#ؓXHkr%RxP&n/h{*D%U~`W[e"؞oyUG n9uk 1i4fW=] RGpqu.~cI'b'Ϙ^Z|4QP봃~`jTgLI*~|!4NT 槤nnA/hcyo2^;蟣!7Qh!HRI.ɲ.eΘ暻E@9Pi_oQ.Gq8}H_'&/iAh՘ż)H#"7w%M w t)~7PJ^3 1P[`_TbA;`s;( {m.<{x=N~hSדxbw3-=/HO[2ȡVxʽ>1+Mz;7^Bқֵc&{.٠vKި ++ߋ5#8T31`@LPGA}܊Wُt?̽Q[-U;5w#Ei9 郛_w15{>ܯ[xC;^R ! V0 XС|^K3+ fT RlĒ;W^:= m^x`V0q_E}lֿm/7?YݣYm+ϖ^0s˅sYe>'I8އw=8 -&I|^!қ|f>+t"Kѹ)L,QV`Cs.X/ˬ]0%@IDAT(}ƿ/"vAʴ?խOg 76N8/à@otd#ĆZy]ByJǜ_M}n']~̝i7!oy g w3kRNL yi&N`cz7cҪa;.5knY5DYf3~xY`1o )߮J1Zҝj!=>7Pɼok - ZNKLL6P!k'>]#"ZB* T4wUyy zt| FhtC% j܌@uױ|MS)8l0t;Hp]%u$K zl수_b>iv]tԯlq~6㱧Z () A-HKD?y13ڔ5I! y3nmxOqZ<#hf@x$4mr3sިSվBw/ @N ¿g0v\iddzmy;6% p(@ji}q)m @xBHyt|ؼ% ʘj@]gs/ĚNm5N3ibl 68o~\ۼ?5~`RAJa;m+(%ص%,-J9%p+Rc~S,o ۰YAf;pw|9.,Ղl`O|K3 [yc!(qAw}Ay,K0قc>SepMi=ޙ{5{U+Mq#dc0l<]LJHϥy]Sä w/cӪu}Ʀi)k=>jholٴ0055W[i4-Q}jMz%kKok黼XUQzM7`+lyos&vlG~БЊGx"0h#c|_ K-o|k#\#{q`+SݹB> {J 3l!8L eνPʵp˕9ѹ{ ͻnܦF4A?"[le>ẟga;Po['5l!)7665a|J~(s ޻D|. gw>QdD.vqXtm]\O S YL㚩R^{%COA;6O_%M-i]N$# ,wsƙJ̲OnV;[d:C//zWH{8clB=&qL.,gv(2&vXOAVW"s:w"F^dO?U*LI&)VnFzR]gJ%n=鐚 S)o%ۄZ3Љ=Dhk9|#r3Oq+/X_c8y7fxFZYP)A>~]H5Xչ.i*Hzc֌|!6zH6ZJj@ǘ$s()-zˆ Z Kd +pKxgcnEWh 9;i S #wYU`/r\Fpbc= }1%Q1 BɥK}*KaQVȤN:W"z$II \jO_5,9oyo\41âTT0ȧM^sIi}{lzKP1 to3'V"5 p@tU+(ڧP: (4J*7|%!4dA8尿*h+tKS˼O_y! 4@)fBZ)=6LT=j]{?<5>hp*ܾm] ڸIz{JOԕk9ΑSXzdlt~{ZT>fvwvՔcmEO,zu8PkghA$aoƥc$`KIGk 8$sp:m xo͂ן!O WI6lx=V~ʋKMt.Iڸ]"nym?qb+,nm`yDyWhAf>hn6oM2xnu$ӬV=⭔Ie辿nCd^Q`KXeeD:E1}9\ ,LB#Zv?딂vݬǒc4bv=amLlm.^RqXJG ¥F^ZS`Av [KJV pB!_T-Z̩QqfR{,*_GsSw!;*N(2 2bQ*<_L})!F 2[U4U2qgɛq TTAO{CuqU/v5niI~۾wT_TƋ ›j'gKi"M.6MHJo+f@o+OxJRAbm2EG<0Y 櫻 D D[ L@v{@}D`_P;K"`r72O}fL ~6+I)38ka|6(fAG.xn%5=#igg}>+ 󁝁ͬSe ha#ċ[ jږoX?UޕPvg^v>{[aO󕯂ߟb{lj*O ,JHK{wCtX#~Ŷmǵ ~rw _AS4l34]Q{mlĖQ+ͳ" )p'G߉hMbwNt;oS2 O藿IiOoc?59ri:B0z X-QputqMo[w͞0 |QrWN: %Ə۶3r gLf*gyoldt{`>k?NPA7)BAy?6+n"?;W eK;J/)P b aS{o y2w1Ҿ[_b+_[0q`aF\>?LpTIP߈#=ki\"=rPynG{sp.K?ÍUTDIr/B#b/xDs?95V*?VήXzjK_opz\G-}FI3f<6Ɩ>_J_~/佚C^dYmgqes$ÃJ-]egӪO3Q., o\`'y7ťS ^,HLK9Z3Rцh^) HӱFo,[V-.#MB8) 4(Fzs#p=]"ay*C׬yaJs5'95̚52sP&]E#(ػ%;f$`[aWndR33j_^!:to ²}8Qo V a!(; g; v)kle@]d5c_eѧtz3B㚖2]sq@,J aԏDF=>NڼUpG ȔJ` usg!L|+d"{OԢq; \Rԃ:ߏ[ s =/;-ͮ˛&='߸[Bw'_ Ts";y9]gWw49OlyDpmke.{ԡԞ% uӦ Y\Yv+#4}gT}6ѱq_`v~z&&(%f88#xo(iױ#B8=jȾJ߁PE_0@ɐ`D6O17??Say& EJ%)]͚ :fs,#O|6װD~nJ[%օ֦eO^X k7ћ5X'(ƟF^Ɯa,J;YG."X?M. ]r/%|/;c"[kVrV|lV(\)SJ6,=>#ٲ!}K?Azm)7]#gd^֕Z{t{t"*FǓ\՗ܛE\̺ whRwA4~4Ycƹ\6v{8'?|5\$=3ur"/+|[EMCˬ8mkck)浙Wi^ ۮ*1s`B/&47j|!# 62@6/0hGs{m9 PNU)e^N%-pTˆ7"ֿހ`u \ >;lG[$/ŖbbW=a6d pQY$ľi{2 A7Wwd7D&x"KB߬i9ҶvLڿ+rh.I dp֝[s?&h"0uo +w24cάd({ dcܵ}Ǟ5p_F)dj!%x5]Mh:1'As48.8xNǞk]{͍f/20jQȣȎ~Ec\0| ڵN{g% kY-?oœ$IОӝ3R]O4NPç86Z||7 7sX%8)\LGP)0I=Mav& k4Izz˗n{8]S7Q%3)!ꍰg p7S]B8}Fr ? a/rV5"EQ1v jSA%om$>.{;_%!8*_B*cLݟ&1ILvbQ񤵦 l).-?1cr"A9{ <Ց[uL=w/=JfΑퟖ%\S=ƆUt;59J{e˫d'{P-EêXVE ]uX>ZG&]"}_tkQs]t5.v;+FǖgqHdMkz3mvuͭy nN-ny)\{%A"H DO˻ WAC)GKic#WlRZ 磍K @Y,C__~T_ٷ_[`>2-isM p(mv"'z"e,ch2"~jb[1-U3=HwSknV<~eL\PDfOť=үK;͏"7cO`+BW\//+9N=ƃ rdv|?cm[&Ndp>Uj@vkr %( [[ɂa'&5|S 9;zBezzy;R:Yc̭e>@ ^sފbtaK>M4}ƫ nЀg2VT/q& uZ!֐i1?A=9L+) <؅M^(f!|9,GD/qa[ǰ$a_;zoo$pb[F3rBA< `W/ uV 7NU|ŵj:6t Kw)8P. `N  ,0 \OAx1u\6N;~VHu&=͵NdJgê aT#H;vRGs &z [-Q OldANl!ښCz=jWNz3Β> uѪu&Ǻzktw^;pDJm]q@E3,ƼOcs@1WӀd|=?p^UݽvN56{c/}ɸ܆O&I+ԀCsaCʠ:4)y@V]C}<) o/|D0INɼL.5xÒBXGgӠ;!Z=z)6h3Ԛ9۝jkBw]RoZC HW'+7rApH'%ެnq~sܧ?nJ&߾VGMB'KI_k VzqOI*c.4;'zL!5ȟjKryzCpKdpѡy92HNsz{6;Ƽס.f 0b'+~OSJqxw. / Ct];u OZ&&}_Jvn[_aW'b `_x2@72(z֩Q++dS~}`:U\EnGXhߝѷqH8p/T|\gy*Be &(2QhA,4%v:Uqt.q6Rf$/%tS4uP'&y~YٛR0*w3ݫ\ǥu Xĸ=MlVM#т:NkY:Ψ4*,Bs]^!&g'G*bAUcP1C04S>Z`o(mNs!qֳrʇT&ތL|I/ݿIUwwnϳ(whtrt~ҋJp g쏦e֝W5!=zlܶZ0^V* dtΛWSl@e\uɚgRqty!Ԉ5ծ.¿A%7 ѥS*/ z;~ȠҮq9/+ە&h -2ZSg3`y&*@n"5%ȝ(e \Oe r8vQ^L3cɔbic띕KvO ehcOשVW)vAvW&xG lt r4753:IPhBʔ{f&:F`t_xޝ9[[=Nj}#U'H3Q{[t0Y%&ʻQVCw^ pjGsiUҮ4^Po:ބ݉ǩiO]#"0}0tև)>º>?_޶5 Ht PK{`kvLgAĞ!Bi3oERqT)_I]+g1[]cSw<[{bkw "%8Pi3V$BǍPBn{~<o`8D:z&ra~+4}"4e`0βJ̥TV9t6#g@o *M_HXbxB  {rK蓍&Ys)?B+m?sQ{Y2jp>C h!yF#/\;sʩc \ |]UyA$4p;'ڿ%i/ړ"qG& coEe_Bw\[&o.l0/4 }op>rδofHH*aO/]#*B DhF1q9w馓a1opq Z|lA9 #HP \{*2#Z*Ƃ,WV:\mdH E\F]:s?ɐ':TvIg_2g^IcoVx\ټ/`8d^*Y|tqFg ~4^twKTduXy<%tUYȥ*Tˍd>jrm؈CZWw' «m} >hcOo*ޢٌ"Dvt{ ;O>/ Xpߴ,ԎL?:cfP[(Ƅ[>N]'#Y/*:.HzŹվn`EJs;Q u(UAP}i"QsW8{?zntkw^?7CBVFO=Aw?ӟo~B@ Uy/_}:Z S B -xĥ<!x33B͌~&GeXL fWWYsݎ:}l [a@jUi?_DƍC~;v^9rlDj) k_I%^F;wx[rtmʛ!0V;=jJ a~c6JX;*x$=kf?|{:7;GI @O]&H  OGYGiaQ| %VbW7z;s%Z?V>Hi:Aw౷T74݆h#zq\4BSKnö׮K$ NRN(] ̯q)bGui1i³ z]J[Rη{mţk{A*[P) =~r|ǻ NL /_scI`'{B]hvUwr/`*$M (6ֈ F:WtN@GORQToD ڙ/ Ow vGZ`?S/FFwi:q7ɰYyc76<|,G39%:= ,,loGM=,Hw "4gb~y[\ؓCрsM[{$>p>BAx)@(8YНFOg +/qDA?ߟ;k aD P^sJqg7 1=WO[Gd.}t=+[ Zz؍hUQ\]=5@M^ҌTDzֵR/GFH'U6pPCDHjB5fD'})}+Ͽ}W [*O1ʾY0u BmAy( xYb0 <sj(擾p02=ly{DrrTŎK3t WpȯjoPʩeg3cRs7l[Q.C*_a>`f,F1/5?s_i*ICloY {6Ɍ.젉D67E]O庼[$p; ȝ@ gd|?Q`a@gQKͺ楑3_Mk #lN64B|lӐ[~.Fq7EH  Z &Z$3:&V'1:$}&߿Grޑ0xc- m,UXzɽd{O "c]NC8#a鄟1!&˵p RkIQk)o3a 9JzK ]@5 *Rf!nI omD.#0`}="[kG{6B3 Qnb C,xȥwT)\YB T%#C|7ɦ$kv.6E%|A>W?_ ,?!\ˢV٫$ 2+'#CF_~#K7N'nK /X!>ƸؤIe02V]l[P48%lBz^/#n (ICdDZ$݇V]Jz~M^֎l f ꧄]Tnt`R ~;{_i+X0qDh(iN% (5G(}onM0VyD{wOtvY#*,KNyhx]|79[TSzp0+0h(#cQNwr>XV*U1Fz̯G&}}/JIxu?/_BTgPf%FaX#=otNcA^ߑBA:_ݾ0Mo&ϸxŬLXôdg\U#idORa̺v=z۴rxQ%kMAnOo1% dkk3o! 6sJl P]I1k$E\i_\}?=Hy6#<]lyڔ%h.p+`wW d{5A{8muf; t(.!9uqGnYW΂aUhXŸnid'fM>蚘ڣ=8q&OȣqpZA=E>J|܉ w%WER.n^5 #o)Cgd?L#B2<<\ ֛pRɎ}w й[;_#g-GŞM'9ƢvpXU$xӡ/'g5b;wpRU?&twHb v7v+&v+ERݝ[3s̅uٙ{{ƩimԖw3;JJ~בZR+@-o$J>5;{){/8=ϣX3KڃG T I9+K7 mLnwpP w)f8%hjvR~TPn!_JΩ}?d 9ÔsC /KY d^4z^'=]\3\cŏ 4kWlsTv;jsvw$ƪ+ư1 .fWTdw$fHvʮ xG?eR.5\EUˑJVCSg't xz$È4x]net:xXNSR_J)}O5)FkW6 * S[r͂b/{e{iA8\00m+5u:6TPa*YuT*4˜qqH=Vp>֊ ^+'w Ax ۗ tYA=ׂRG|,b^*V;s sSQ|~,/Y]?#ͶK[ ?\#{W{(sM!]wxt8^z zv_㤿 ;ßpM[Z(>"HF /!rOx>OkՁhXff=FՀmaR]H1';ɾ <6kTh\Q*҉LSFQ#YP#'6%O.M Vҩ 5youc`nlTsHM$/ENN_rĴuy:hJ2Xu@wzp`j˜_@qd(w 6΢{E`Ud;ۙT&{FdE3d Z7ic]-k*8{("+o<b/ Rbc?[,}+x92\ mŵX)_zK+W* n I0wuy[K[#7GsO_wrW9oysIwuT; o7 9_Oyw_Yip Ï$=0U'3a?OT`8١UwEG(q2;gZ}/IP Nl+oc*!^P-B.5TWIf"` ~?F7܈l.yg4Ǚ#d_W!tlGR,L;g>9e7_|>^ _%;~$/4&Uή^:23דU* ԯ$fyCvmT1Y**LVj\ϮTwG$t iq 724;,wE\}tFAbPJnU$|C)&/?,=i軫N0\P!/(o1MNp]PhiuGli8$:C;(MyU14By@t1k>qJ_đ?p".|D ^<}IAʾھ[ҩ\NdbE,)߽p=1Mm3*rU "z@|Mо@DOףgx fDe6~W"7m}x ƿ5|w5[4Á@IDATkINl{*]HQv_ř \f`%C O?d`_8?AHq1Z{qTe$ \(O2~W{58BNװeggPpe:G#aIlݷ2V߳4r Y w`m_ꋜzڈ8dFѹE(&jTt)E8'Ng&؄jX^!â/1c?S3"Atߐb.%h 2 eTgÄSc18?[*,V̡g^WyvSS Ww"_y!RwUVƛf_ 5.~@YZ=ڝ*,);ɠX[` & YS% JGYir6X {%Q-Ps۬$5s&6~bۖ ۉ0 VmqD ?!^,xnXOp۬) ev-N?鸿oS|gN]vúI35hJ/[h6(fy?X`GW6ߩYvrP"wTp!eSY[&Ղ}K> +Cwp '#‚tzc?n}@%nIqC]RS D~ %vt?t~ǓJVuX\R_p?N_<,~qmm |!ךo5Žr\ qymarRGքu`q5"5|ݜyƮ5YW95O  \Ħ5ѿŚ uxPZx8).:^\ҷTFU-^Իz=[R\̉3[>*8Y#y*_H`}mΠ`6 䈉MSӝG`7tw8'jBW;`G\#K5 48N!\o>(@Ol#"^jPXS M%0v/6j* %f};;E0c m,F`}`˜7u@uƒ ncYZSSc-G[m=q` ˝8ˌDn*aZoXY"Y* leZ.zUu,j$i?/skj;|s%䜢bEVϘ!xDWYqM=We fQx?Cd 'Sm "w#;'~?Cysv~ۑ'x~7@yv ~Y$r3D|~uTo'P2;n'~FK"]9sߒ>S"s++*߹HB~D( v;HOw *W *:1m~t`-x>[}?.V( ~*hؘ)HWdz)lQ%'L!{Ťg|@粛=tZ?Q df(Y]$w\7m{.2j/!620鹥>#G+竽}(s{?+g7meOC--ZV?EvOٛN]5] ULmjlzX}z̧4 czėz4Q>BeSs!Ϙ5 4Gjof1!ak G}k}/xפ s V7E֡6L L>l<(W ӭ&)xdߝ[{Ш4ҥz%t.EnֱgNBt1Ҁf;Lls{@-o7۷GKA-FN}{y`#b[ʂ*i3iwot{^Ϳ(Pr4v1mEs&=gHߟb{Zj3iK䚰 IƿMl.g oAa"7jHLd~ nHjȘ.-<8HM- 8:cI !+HNzƊ+G/GRNT3|ۥ%=Fb R/ڏ%^HcФY'F) ¨%|&?8q 9MBjbV'`"؁r^.~hX_a>+pWk @T#5d6pUOO{ŽP"۽Go=oq68sk^]\]Tx֥~{=Zk]~Jod>"O)SQʞ5r>zME˸ \us J/=W=ճ!XS~EHdT(a t8VЀP0>{JNy@o η4u*? /k΢hߣ=ߛ̢}Hڔ͏^vF!}F77 M}J~ ];:Q(|Ů<ʷ2䎱N. m؉&nPrG;(н9zO$*1%~%4MTC ُ 'O7z:1.tT* m4lUwf-դ"Cÿ4eUcs* Ce*Az"xS̆6bB.OJd/Jy|r0Wͤ:5‚^pDJ:w> YT0h*GJ>dy|H'LjgE <3L$s:ކoO{30ť2H\ӳS}joaҢtڤL_2L?Kd` ?$U1$Dw:.&I'\9@0Z_CZAmwxo{j0Ϋ/%g?i)u . \t29CpGQd깟f*gsT>ޤ!,N'}yw|kA$x:edPdj ;.%YW| \̬g}x{}0Y5lg*T4+~9 RAn;AgHIWƷҋo vMyS)85x㘒2$%8[EC5]};&w\9[l?wݳwɮЅ~S3nz{;8[3ުQf󧼊)ʇ~#{ℯ=a!xuy=n,ůY 5UVi^r.-g2f㔳ӽ }`ZpOﱧZ}<{ug϶((zhL`k Ϙ˞ktJxxes|y"sC9RY8/'8Yqқ/ .{}G#Lp |fW+|y >H俇VXO~BX+k$dV;9;J~4 UyUL,Ζ83m.푄1'Ӄ)x9^k"״dn_g ըҜU}} 7JW,_&%[_57W=F4:]0E mJ{^<׈^N{_E( `L?o ٽ973;NDpkK|#eb$3(*mm<녶3**;MT|YtlP J1Im<{DGr\|?Co? 8kEQg%>Sn(8Н*_5s!:(LAn0l5l(FV=~$ vv@dk}bG oﷳ IhpH+?jy v]Ȥ4PV54/AL;#9o3rlYs";os@މbA<7v^E"gk&gLQ;gWako81]|їXί}ܘ{[ m=E4FDϺ@MRP%cW8 m"TiӍ yc y_̟N.ӡ "L8MsbC @=K[  UP^zR <.wV#sJCaɌ懩3'(`}S?'xr"ͅz֣K}UHƪm#\;GgE|У^[%MTvg [Jb(r<`n> #[ѣ`wJ鋘&nM,JFJ;7|έnOIot w|M|wwC@ nf}^ L!{bEa.IՐ׻-oiuݘkq E#Დ(!P~F>T}qqޜ\4H_j`1:9I6T4uGIˣG#/tԧ.=|@GBj3p@ Dv&C,>]kHeӿʤߨ_bPCx|WNN8kßNȭfq]jdoj˜/|J0Qgx~j$ (TpTȏ-M:٪eRGasg;(`c"s`Sė'krwDJ =:,|FMUĮsTLicA}EULvq)nqE緌#&k2.Ɲ?&9$Wm|#j ~XG?Ay%Q'!0vל@;_ 0} :a|"ԁk=ހX ]'#'*=y?#fN]^KE*I%>)^EЯfc۽Vkb㡀v۳S`dMN  viudfgs-KveRTG7ij5YP8j:)]lǰ^m:fOJ_%{E\T^cZX)K8͒vGEi(lr6)X*@bk`LNGbڅQPj!(DD4,/ϑ:"_k)pևaF$45t85KF?zKuI(L$( <`d9Lr,Yw׷ { M+RAUW$+"z \W(,q RVrKb\QlHC 4ECD.wk +J@*fL ;ͻvsJO\53|F#(&WCTK6}\*6dP6MŸ?%%6!f cVt_Le(໿?@[kɌR+x_EPl}G^;ۡG .g,xli3oXLƘz TRG\ڣgv"mcE y, 9,&pb=Ȣe>ۀz6#\gaPs6}0 "iwDl;X^fw{D~.5pZ0"`˜j ֛tq* {=-Y ㈬C4 T3UqvoSeηQv7by#̊ ~pD# }ذegL;ӿgws3?CÏ~ ,w C:znυxC)y>eB-!4~'?nQ%>u&I<}d[̡㧒~~=_ksw= mop,s1VcWz[P_(𧆠AeVk;ڟpW'}S*y;ˢv5xB{λOA{_~Ž&34 pM>[2F?770 ʵUkwG~A8ϰ)Z<9BSSQչ}ɩ#hTJlEY@~&&`\d*HHϵw> 3K 9/ҷ "jYHpxsC9Gd7y o ^Bok 9ϗl&r>ju}N L;k- cFo1V THd+FԖ1b<&둬:@"aɗM9l{Ԭ&>&>;'EF@:;@AV [ _!f³LJVyz:Rlޅc%'WGoadڡ,L;zk7 \{JBzl5_ ,hCr%Q@o-pi͜_x$y+4g,c[d-ߗ濘 8{Ķɘ+Yrm'Db"6|\ cnaNeydP:_T`LRHՇ|a }<w=f;V~n!(.pg~1OH 1{񡦻T { ZH7DREGF v;Qpƌq=}<+Z:ZOOl͌wƸCmN-yU." Nб%( F4|>¯LMn[ =(FB zm\oDZ Un_j)fpk|4Z|pTh1u*O~twoNZ{(iF=(ym k7-iCJo&AD^" Lw(rhz=6Y̫"wC=D &obd.p;<YQ]3Tô=~78Y:GAb5ilfFL**G)E% ұ\g_ue{>8p4Xu֞tIQۭdnoݗ| D&6 iH]ߑ+h/Z 673]wk`:Gy/"6LQj5 /0XE:Q𚜭Z%v֯^"y}ui&Y|%6!tS\5㰯ņ ԺHXgAQx]K^N+iXՀ\FPxѡ[fo C[]1ZJ?y03Bv4sik_na-fzm|`c/{ud2(Q٬Q{Un,2˝]QO}Щ-XxYga ?=#)W7t,5[z M5+@p [ d[$h+/PLpZ^o]fEjq](O]u=nN0-QΧRY$e0LAԝ|d"h%ys穆5c !}~Hsv  -jaPyIxS7>zFPK_&?b#얂@$uoNz \<7=>ι3LJM$E{nbXK<{{; 4Eb%w]US/ćł\${Sku!ѵFyJf+?LG/y; RII [xX 6[$D P .(䪘jA3 n \GG~Js6Lo*36 {t=SF|}]AĦ|o|FH׋Z9}E垃/3iz5ZK=( ΗYmmoHE[w!끾SS)뽑#?|(wA53>}=_` "q܎s>#/xy8^=V~)]Y^7}<:?BAg>o;v|!} x_pBr]ejgc7T)E$4*՛6ȏxq1EU"Nb-VdH' :Q~tFlr! ݷ"M 0q2"ZvӃ @j1ƿ$6ֱpAZ$g{N2$QZZOwsEAd=g7 q~s_՚[N8W:o>#_×I-b qߩH^|_]ق**+HNO?ܵǾ_/K@?{ .T\ Ο!H=Eq'}S|.zJ}STSn8zLHW _Sy~:F<.mz]jW^2WiWWj h>7Wo9y9a=o.ar<#~D%e^9?LZnQFkׁ(sƌ`޺fg4.?7_|%]3 |)=$J~_g䷙1}z?^ ~.@aEm5JtO6'-xڟ;y_0NA85b'^3V`PkxqduE,!գϛTŖ.Fο3?/x]$px0 T)Ưn]z*wXĤaCKn|^ ɥO/D{)؊SSIS|GܳTٗ$A˜OߍK#~q5n]/s<(0|JE ͺFds(hj*W8/:HC"P8*m .8n\&OlNV { hv$ i^ גYdFQā1߼#X\+A4,"Emq300RgVCZݫ)^:oT˷jQg$~R>`KtpA!9mO@(wdBHFgJfNJ:Ŝ 2h Jww-kkK WE_._xK^(^i?|;5˻g~0l~pqa}u9c^W;hJZ8kM,J7=OJ딖)STUen/؍y\VLX&hPX%H&ږq|ոRE/dQT!~M}C'gګG 3FzFiHhdž8Aݪ ,7|30f˜ ԴDBÓz"N@? 56)ib=l;/rG5pmPZޣryƩ96I,w_#J$xEb(s[}?7dZWC=\lDE1>"F̯C~ƦQJuףʲ? Gu׎xXjrQz2o4HnezO;uZ)V2Am = wsҧ'|.cO ~"ߖBDP&B_W77^,*}_X B89~A_d5ban}ްI{2G#3k(z§{ݠX @:S_I('gv*\sL@}@Z`}dt$ ͑~z$糂H(, _'M4w*u\(wlw~??bv@q zS~>ҸWOw{W^dTPy7 NFAH4oSV&? g#ă5u핚BwAQR_w+&E'T)[(M7d;|A޼<>'hi*]7LpHv2*΍_~i˛"-"S$--::ſ"5CjL$Է]͜V ?LL^—wUa!??!Cyk[;hh]Sb)5(ۦލQ˪.ȁxH--LzDrpY{sQq5_Niċ!Q' ufjUxQ6,qOgA -Eo+O yH0A8SI2? v>nA] 8yGa=j37ށԔa׌T渓?;˦bf;2tT|H=O|Mjd}:L!?:ز8KkBϻ(l5S>'6Qj1"­&HG ]'O5WmKH]q*Z5XNίѷoxNi(kZ`Z:c?kl i"/#&}Tn畿y\͌XQˣQi/;d\; m[X/a%<>w)k(%4P7,@8I_:Fė]Yn4}ז}E: 5PtZ) 3FD<%?3A z"@$\+%;A|RU F ځ6 P|w 9ڃ |.ͬ>x[O0H,.r\A+ޮd3.};@̄_S6#p*!2*tkQ43Zi7Tg5.׈ny-S;ICО@%.BG=F_ГZ0A~t(g݂z˜#u:DPAN +!g1oz!C|c>tQ?3c*R˕C"8S욳/yxVv.6TчJyWb_0m;e>=mVfݼOhOtksѢKK%(>#gcDZa̐;ns)7'7弙YL=O=פvܿ3)G G_YO@|̙Sh3u$mLS-7 $RfO]]J7W菩R_{RΒR};a(]~HGS>2Mw,=6F5,j&8H Jꂥ"xT={[NiEl珞S; D|^q&L }G8QѠ?Xpvtay;__H6 =Iy' ĦV'nr~Bsۥ\`(8I5W^YJɛfv\*f.+vjd&xvKd "8)G;%hF٬19-z*L]:͏,H| <)ȷw #.Y'{bR1(Yx&qv/5bONc 4JjM<ІtS]WBM23m&_zfkYssXɨ8{}XS$6h T "`20BŁcZŭ,w`b"b/Ȁd ^%9k6WpPsǘsHZ3kjZ( }Ԝ톜c(Fɛj$jD` pG\{ _CP>)ʳ0 w,rfs*{y*?:k Kcr"?/"]=4xy_s|,`hyϩ'{O2i9Y02=h(4?vsP=QMZl,ol?w>JxScYǮ^mÞ&M?Tp"  A+GR/=uqJ{1 wcoo,{5Vl-6`6黦9O,o 5O)x/\[-}Sx)#xGH1x`Dbov<Σg iMS6FCk5Af3Om#ۘxT#JwW:F/GJ0MJ=LZA|<`ߜDϡn&G\OTo'jZk`^T1k䤍1%:f5:Yy>L|ɴ[lȻ[] ,3뒖$ vz-xfG\Ru|/i7>ёau{ZZԐмcI[w v;?APJv*;t.[SS*! ܢyӊ<݁Ϋ8,0_9ʻ;f;ϝ?(w؎8u85.W=q\6Xkct= ?,} JӟO OD}+^&֛{-{ eNOkqWk[s܈Z N>_c3jR[G/UGeX|2ٗ>lqE(G>V#bT-]R_V ID;bBϗR[{ Ν*x8Vhr&ej?g(߱OtrK?SGw\fwpc˛rDL~`"ߛNH=~.yQCcʕ>w |a+=9@@zY̬ױPu18՝ZkwG.tq*R.PX*3"UGlkwYx=DuP( \!'ŚR.)iݡw]z m8w-0aGoin9w? DNU ;b:b:D d?5~E]磷B } |=QldIL*|U}d(zx(c򝯴<]SBv[kZz>@f$߿+1*c( wYίnwXz4c'.(7 *\u\h9} @uԥynoIOP)Gewd2.7e Oy N5͕uqn~K>}-ߓa|']DκmA>v8t9s |=O.~*PIñVW햒}p \(2]HPqDi l]a6Vn;<`.3g:~lj2-7jZR_77ߖ "7Nű|"7𾭢ȺW6!mEI/roGvď˜W7 $|8;/KE λ͜D\9w= ߰p;}t_G9 ̗͞63gPK{is7Oj>p YB|ڹ?sIxJ@ pP;v&lcp*~Yįd0[L[xcd3Z?e9}.vsEozS¦u6X~MLmӜT17xc4" In0+ gzSfOO@."Ix]m:~z+GEyB.ݫd}ލ+hďc"n[E8c]by_a? &H yE Gomz+X4~@^'jTBT)s&SQ4Cwwx<Uw-2ߣ Gݳi=†Kv#=Dp r~7i pۈ &?T}2ቂ%(^Y.⹆Ъ<; 881=0 )** *([۫ )9 1LpE7{u]z/7[q5x#C[<_BE F1&"U @z };X pw d{8?|jm}H߱EcBz .¹Yy΄.iiXY WsgJC3 n#1}KE+8fakћtnfHy^\`n|HaAW~Ċv:qx[Nbg>P5оn;/]( Lzh*Eh2E(+2g`i,7;jfm;=%+<-32'#ޞ_yBy9vvM =}|"c@vSLDh[6G̰9ʦ=sߋCO+m~ݵ='v):vG(c@{"M3{1VqO \OF=h:Ƙnfα ]z~zS7؟|Tglf2ә xYb(oƧs|ԋo}I ]AH)tU:bM5 >aISR˙qF9&EOOdکU;QI|Oy g]{ l::m+1C{C䔒c6gN39p'@N{0tZ0ZHHn6sRjl `Rg7<;{CG6qqLDF_a@FV_@8׻K{Ss@XI::A ζQsRSƅ&Gi;rT)_ F=<|n4^и<ξ@;z,*&Om3UѭCo , c,5*ҵ2gc}XY3anv4\uohGn,vz@|C*ܭw0Q8}7řpwcbOwnuw`Whfo!bxW Hwp$-gSrρhO)++}< RP\s:~Q :2!>yeWK юj=Ɲ&C;>! ϰa/Wstrq]\yEh#ʿZh$qPZ 0.f"7vTƕ2'`Tu@dU6ޏH(ٵG 'lˍNdbi8z=,b K?7IT1{s2<j%DӢ1(b^ EGed*7։0`1m%[!VL9DZyE<׫(5| g7w8c8lp8o`p!3drɜH:>.hU;YovK~OO^.,nC"KFN9DOv$VIo0 ". s1 4<+P Hl(y'yZl|H޺Sm6o%fu5Z>7ax=wMV7OYU pkI@?**4ܿp5+:t}۰DzV -rϊ&;\F~Yk+~t %d }uA.#JiuZ"wk;Of Tﴃ#R`Fi؁%غ5y/+N`m3[:KI苤-G!z&IlZt,ZC%==]Gb L@}d .?#mIjk9  4͙̇:jB֯UO4ݗ6/޶Q3Mf qȕ QS`ÉwhX EteEd& ĸyZy"ޓ$5&p>~!Ύ| j(|E0v0$~VisKcZj(#ݫCbP!,7+ݝM@imNq}˜v]nC@>/'S&ؽUTFdB`_-csa^FܷC=v&!/e,%`쟝ĉ]k=6>Fg|g@=> @+S^x_kp4ʅQ|_zEHH֭@@ixٌì lʧOΠ>~𔴳YEaf<35pYw))]=IEJi–H_1.K*/r /ja@>=*G9 Ŕ'ڌ5~j!tr/3ҽh}wό<8:eɱ%7<`]Jeљ3g˱z̘bXBƩq]$Md]?vFhX!Ӏ11o+؅̉أU k9abQwQ0Ҽ4?gM)-Y@X{$r6Cs>A qŸi?(.uxfkdA?W^[`[ɔSw%t,5'*H^G2 [U0IleY \#[<6CsgOu ;;kt %x#w.?^8o!}!us;˱IG@>B *jZ _DՅB9 (. 'Yu7 fD]XYe3iN-xs=ޗ/L3 |_t/˻}@J!Ag(GgOy]Fџ0`'6dCWXey#\ThSocCg!Oe"lg_{1ov`[SSw:"Z[2Wќ2ڣGA [W`k`WcFFyAw/ϟ!J-[ؗ$G-P@I$~'k =/Z#] =XB$-\ń`O b/`K̻& MG gҩ M >}$PNRiqkg_Myco tqљzj,B8ͅ{Ηru7<+%΂%l~Uܵ ,~~_}C$C@Cqÿ9^@_"`=DXOF@[z-WBdH|ˋϗ|O,/;N tQ-ck /"nRusS(SЍT-91[04cTNar9w{қ<ʹHPB1:Rgδ(ZU s"D;VAAS3caa-IywCU)G648F;;Bc@U]ɨqga"B΋56>OfМB{rEMLWj{j .^<mVe[Y^vtԥ;s{2;jIL99\5}tty9G;]0+q~F.vzdVmt/Z7PVuD}O8M_PMv7&L:LOwy >ֈUZ@K_xޚRUWB?*Tsۚm۷eM0[ڍM]3ϡr''X:^v.yɘ m]~0*sc&4w#Qͻ:z-Vxk`[=E SvkGz/:Ta~@=_"b "о8rTUZzwI(ல)nG?' 6w+\aҏ`SmE! \%~\7:Wb4L 0:P M􀟠EV`vٰz۵_S-SO^?ƙ_"KΠY3Nw 2%;U\8Mf[w@fżj;;+Tʹw+ÌǝB5n~me i,Ivdﻋ-`x3t3v >P 1s9pʀIjj0ON?绢q˻.~@y^"_a7}%m/e1~-~UnD t[)UʚR#3aWLjUڛ 4ua"؉/3#Ip5ko=bM+(uVhBBd o"4)@$aF ?CYGzyBs@lXXL'=|{q4X7>iQZOuo&=!@Lpq E[Nq4?? ^~'MH2,ޡU+co Ŀ^cN!sxbM0롼irWY|Py&K ^.+(Rܯ0M9MT(Y!߸4Ђ9!>&z.Wo-\n„OY}k^<3gaP`ª@[$0P^*@m o opa?Z {+P] !K|>V hG)v‹7/B(wXaK;11}Tq(F!3%5gW$ŵ7. 5vZ=f<ͮ]kZյ)ŭ;ŎƣR^H=6hر:2+-P-J!챙v-W7E ̋7s+1F91~`FQŘ_wvHabgV3Gw`_Fox !V؂ag˻.M1FyqI;X[&;i&Jq)-#螌;2#K&b|oL^ڥL_9$ uB_POgm)UU BԐ٫t X`Y{ sߣN N)c 7;9`m_ /Ykפ3mlj;N.La[klCSS9P8Q \vS=ķ^xrI.؋O]$. v@?FD`+?7B#S}cCqʡ"m!k]ڇglsI{n3 (Nra <"uk7OC㿀m k ֈhpKNSq$1cͧ@?U/s: >WF} Wd|aʒp~ PaHs2QDGDQb]=3*?"F+p_Y%Y8u$~4({P c"l祿FAB bkG T?J:%Uq-wTg&v ;DPIj*w{ |?Ey{a2ZknN ̣ZwѲ]r& o"#;q ثYTɾБG#/xUO+o TG 5󭸻SIjuBLo+w}ʇ/ZpJKޯD$ޭ&%B%,RICs2NfBe}hݕFm -Kܺ<Mc5 tˊ)P _4Ϸ0`%O|}okh<%LrQs`G},@Cٻ/uY7X'@-7ٜJSi7k$-0zPp;ͅq+#a:u@SpNʫR"WQ+"qAGr_f ]_'&fץ`ީ9S>粳(ĸzG2to0F#-pظo&?O\6={S"Uj~*x&D._*^ ke͛(gɁߗl 90zgZ:IYbx|8 g5 0b"ۊ;џw<-,Vz7O{&{܎sg3X b|n' ؛?oVfw_ &L?8*)'(B@.R9h/΂`-.^)߮#Sg-١k"aLL='oZp<:C]T_sRc@X{I% =X̤8 F@,LY7Sotx飔(Xk.^o|F}uŧ}$kϺkmlRn  ^Uz^ђqtsa$DhIu G'*ts@|Ir.<}wPB|{TyZho[ПHwlew)ώՎ {s]utSwt4y;n_[T cc|׭{x):7[k+ ,*2:oԉ hj/"аV )aq9*J $]l hU@:0?uO4&0\/Pӄ";_xFLzQb17N]zsWSI6E敩r1]Só+Fh$RP}|b|[_a#3}/3_3!aa:}k?Y}x B"}u$B/q&}ܷ}P2zzTʙtH)9-oqus{mYKB-FAفeYߺ]J:sBMu~a4*)7 ՁZGE$S:k޷`iz;NtV(n%Oxq~1Oy͸jeR5ZChvO4=D;3UԖ|Omt5!#B5 K)1{!\"n.A7fW]~NS),][mΨrv-c_E/wSlQډSʶ/;3k_C95<1,`Zdd¯U@;y/g]:&5s&%2X1G"D3U | aX Z|XbI.Dҵq8>~v,B|wzy(>$<짐K(·([J4nIsl*ifmi. <4~Y)ᣜ%sli!MyʯJ{wmu`HKC~@mL_-z͡SnH .̻g34OX p!F{5LB9}0:.2Ʉݺ6ϻ uot_ \lh^֧wŴ/s$ []\_e._[ (#p/g|Qq$ݻmQN](1v`uċ6~7M"Ou:6.iO{lf= l1#ߛoj<3@ATE θ0"Y!D|Z2Dd=^O F;q}I®9㴉[Μoo. I tg~.t!BEF9aNU:fڑY%Rd qU"3a4T D$_Wzs*z#sV*fU AmͶP`:x;tmUyeqEvb繟(V/nkrfAt1ʼ-Pd,ŶqUۙ%`qs%w<џ\W³zX8vV,3yi*CXsGt1({eR ^ @IDAT5O$#xa k4ՍLJXhflp^nOdGkl9-=WK 0޺o|S]{W`?.#5z29\@-H$ 膻M^@z[NDp34}SCڿR'"s a%PW.:V}MQk1Omy)}mXo n]$l ɍ,%}/ Wq i0Pl=H ޜNøzWGcy2>z*"`%$׿3,аa|"y`Rj6bgP x-q/ p47!zؔL fج:p_f+b!xtrmI2bkQfe \*5t?E0 Ļ@I'r7T E _ \~,IG \DC<*݁%?ue Bu})v^A!k)dv`[$0 𕜳,]߽;3C`k]bP |Y.F˾>$ky\hFmt:nՏ/%\OߪtFĞhQ s]:=x>Aw $!q;+Ā$@|>oѨ>Q޻K`!r4]#y'}ree' 2gZspolk R?%/a00ޥ%VF$ l+r=CW멧 U. 1BcGqk$>2_c¤kJ8{{(TƓjSdGS}>鸨֗AKL SoY$)7!T5i[=veE߲i͊ߊAQhYI{F4#ڣR@0όPstԢhǹ0޴lyy7t֗JǙgSbtlf]8(Mrt*Pʐ&VS@4Ru;~v- QIc&3_e l O: C"]YH#5i/r=rE`EJhKXz?t;{k,]gҵ~EӧNN tCҦEآ%RTG ;䧝@^xNh 7Ǐ`%].}t׻0b)̔%~i|ǧ^ҙdT/F$mW?WN% yE$ҩ|:20ʧy.ef++$ŽBg9c tǿ*,ky+;q  \$_L(/DO:J瑡GҠQbG M ǥ'sZxk-J yhY8q@L _ "$ Bhy5B=9 i*>9qw `L!q QB2_|m-H+W\88GKSz Hy'!%`Ee==n>#v6J5G"\x:dM׉yS_}O|&%mh${zM~Ql?iK^ Q1гݣ `( }-}*1.3tƀG (Sqc7ŲF^z/uZx݁߿:@/h ߵQ@E}%;sgAac64|5tsvt ʏ#~)يȚR ?%ggW` U&T!'_4ϓ{;N*@*p6}gwԇ{,v;o-g3xV2 aw(W'@'8@~Qav;`&avSM ?ưezzƩ=w|VL)Ks:A p"vzj<}, 7=ie#~VܾrU}3,;ķܐK7X~8~Y?DU?mڍ.jFK%0S7)ה*אyDXF;pqIJ8xӎ6jK( 3`^60NyՒ'^.gNJIʓ|@/'s5$56L;L\qc̣۰MZYyFmotuws ٣ھG!_ W?ٴieƊ+3Pо`"%qhD_S+y=K}$VՁ偅.Ryw^ "].:sGm=s`_ |; S\t<:&Uli+ΛEPyh3Ωe7XL(Y[0| *G$GXV`3[kaP%3B@ef'r@ xƴwIWŨڠɖT_dմp~% K`'4ɮ/OOp=EBoö3y>=0P]+6|bq=%.+W^tc3qi[N)Avnr|ώ.\Ml|ɉLYk@nB`v8۠kU`ms0%۸O&-[8t{z3? ̇ |<ׅ謁r풳yByohY 6HdCvO}xv'UGSn+Up8[hhsB~Q޷a<# vU!=݄}y%37DX qs(ClDUA8m"Ȇ1ƚE/EOuvJ黑aX:-ЯxoU(rE$0|+PуJ\]{!l:=ᇁ$v._{i)HNxbKXakcf%4) yRwɹ?=ͳ3~aL8i/¾Vv#4K=N (Q, / _:.IQA󧥰c 7A1+;+О8x <㮁PEWجqװmn WgD]8܉ˈ\[V7~Gіq( Y9T@! .xr%|a.!@|w[_ |X .ŗ5S@zF|X&@ H"['߼mU.kq6SRTt+6.-8Df`fǸ}մsi^تiP~3 9ũ_]3,ᴌԽu!#{e-?չ Z{--!I񗜼8?z;Ҟqa,6bҳ% ,"(as[IFX}V{[Y?H9py&t gh'}? &אB"zbL*$G:|'ꬂo޾*ޞ yuG2u. ·<Uмig뾩`$0 O w&}iW}k]*ɊR2G(h$rs1ϏGGh0dtl@ʾph?ܣ!6sJ-`XQLFJ̟YoSen 5&!cw[>ÿKn4l 6nO’%8f-$Ht_6 `z/OS2mSڎjw*G0.-l+5f:XB֟*z@9"W d$ϓ@^ ])b#RV(={z+*q#ÌQdƗtpU0oSR nu,;{hgOýބM?h{0~r,j+{ITR[t8c2.AQg& :iɈ_g PAm^v{Y37!Ůgam@ ؇\mZNe#JO]Orsd~>tę.Sd0 +]5AAp̟-888]l_exl|Pc|AdfsŜZMn<~ UBroMHI l cҡzݼߢ;v[sdNbE'&.^S}xOǿ@AT,0h mBAA좟|jwpRc^?"xc~|@j%(-(!| Y `?̋8Fzld)kHIym7R^|bsA3C#Xب,2b?DP?&zpUK2W}&;Xd:/e9?c_[J`)nO,P';Gk~O0f ;1Ⱥ>vَjaf7>+j<:VgC޶~bAٴ$3k1q -T%h}C.HgcF2vzdv>!B%=Nb}Ͳ3Js_w-K"N/7яȾƿ}XD{WUmQCisKlڔ^F{?rܲdߩ;;S j_-sUu Uht~}淮HԒ_5Y,a8uΐr0@ fPuB2;F%)Ӻ'}6.x]@g E5C'p؀E?-g12{Bt6fK?W/ؾں45Gm|%>H Y: Î bM[z=_K!qGtA(7yFsN4wWHy6zw[͇/?~;_;a`xbȺT@*,y iH[h[!d[n8JT28HԋbG-_ Ÿc%&O3ۗ @H #ǁ#C2q1hFӤ$HlCd.v%,e|]hftƳmkxWW _ӅD~+:zp̣̓PsOO?30g~Ǘ5^>o\eTLOGsVRgQz7p8V(vs$S#S`a}C6T,KTr @ @L ` gaA|XlXAD njqLYX l{8s5߼x?MarpBk.@x N--D9i}k*v-hA7ܻa&G5wժ{vG( -ǞѰN v~ËC]'6"k\fZmve~)pv*ocmydvYC̞a}O:Ӟ˸5<ֳ.vu ]\0:lPŴOSc5SF[jc/Nr4Ɨ+kd@og\5mť;iF/] {ګgo3^HUBzGy
WyV4n9 V$ԎPip0$:hv  s>>4vKBO1vSW[#q{a%O죘ˇ F~{|j"IU٤ 41X=n9T;|5- 8o;ߧݨi*S/Kr]`(hSQ\fs Syafkd vɘG-4/I} gkٯYDI' t هH_Ƨ,Xz̚5#9rrMfYqG\'_, (FRf%2F\Px_Nv(OٙHNd%wxmK| ]"J)*) ^9ڇN5kV ;7av9X๼Op$$Px n _(ѓ/N#&(^D-vv[rvk=ۃpnZw|)g FN3A;}B;B "wSKW"8i CDQ g *G 7lk:TjT*^h7AE"9 n'`V@ AǷPSg9#4gc%q" ={= kH)YtL߽żuە]LnQ΁[|Dz?zweθj. c[p98{f^ "aye= +h&V?_pGߟq=]o{9>JxRg~Wܠ\ϙ@z&|t Ap:M u [z)Jݿ z)/ޟ~M?C\Oz+rieEuޯ-Ү&*\-?l[rg吇IIGv:Df?O'yG`i$Pįw]Ƨ岼E:_VU>Sa?FN9 QXnNzD3|`ݓ_%]h OX%#n؏E |tTաL!Xꥍ ] }|3=YW9셹C?I~ uu# c[1Q0 g&zNKtY*jkm'CgA=y`E%6@P?<&x|`C6mO|hi>p^{B,8;8)Wu&vQrA#P0b:TbSA9c19瀢 d7Ӱl;Y=]ouWUw[ofϵy )?*w:9r%9$+c/7{usTOz_kr t@_#(<1S7Y')x>t_M?ܺR`wrQ~UAAP`Y'aƼ:A`QP )PT=?Y𻓷? B،<)X^CCTHncCz=R $vCer9В_C@s}x;Q@ ogZu.ajI>*BG-xdkR,ج!ɔaw bC-yA / {7H$m 2vR@vGK@Ֆ28fs/C8!(.|]PLS `UA;:.KNM*sf~M#ح }ROQ޷;w` yOzqTPQ~Gxӻ|[ՋxOaиN+{#ۗ;G0r.G}# FpC `h/^(ίrN |0gGӝ雦jڵev#1nMډzZ<1uy,ɱ7/;=@N5ؼ4&{TXd~&qTz(g>.x|9[1w^=OP~6<_2}Smo[ OmIQ~bW_ 0s`Q˅1 `1DAyq [{>"}jm)B2ك8j94/-@q@hOxe.'F#yP h d?D4^O?-(fz]lU[ow1vsPP^TNrE"T{z`F*w\;P_z,]{dѣqGf*xg͍^?x&zιݣ {e/&y_2-@^/(w;p#(/>C`(ϯPT7 Fdub͜^#Wڠ A޲TίsNw~t3pp &2~m:g * \/sw,~B61'MU]kyJ}J9-#.Gϛu4~2ofv<)8Abo5T ͓8ST p5c9%rrDSUPP(׍HT`?Q.HEhnB,&|EMN.F _!o.gȐjks 榭?lI*}zzjv{jHci919U`ك)K/4cݶou୿j;?g(}c; c^9S&S+AE;傂/m0瞞m `PXEуI'ې.9gssC_`X?A| ēCeIb=9c,5GXHl6;!cxn~v%|W%ڱCu !_x@r߉L@t[Gv  ^lbj7A>E+se~& ˮLF``(a F=7~f9"Z';DԐ vHҖqe_/5;nw8(h5q< g_KŇ %Ba7i~v~α\Ojl~7tWGNB&]7WQQ]Pg#{4Udx|(GT =PJvV`6|9=6qNNJ!(ҍԫm>]8#<snX3W?;#˩rIUk-d&54Tm@ݣ[Պ5dvz);Cq_:Ѻo5nLgɣ11FЌ)QZAD#x/\bsL`Ä1?e+M+~n)U(a0C`>EP(ɞK b9F%Pe<*zLq~ 3x7ٍXf}BPP'$LL.,4j7(;eב:;h_Mfe)F]#ӎYЦ䫢kR~\ɏJlzxS8&9>)˜N6Xlo{F89%ց;0cR&-g?^Sۉ"5m1:*tAOŶ`5iAxaZԭżWӊٹ8΅ogo[n_6P{?rq#@:M^Z$ >Ϸ{ؤȺ4ΰ9y;e(e-xO Ry\ 5ZS9c+|7dܓC:xs<2.0' 05U"T:}s7Bo KLHw\|}Wbee^vp2م`YkjA4嵩3xs8xU_Y-XC؃bi_)Ǯ'Rnw&weqZEzwDq9⠘nd>DNbRPv*I_<So[sYd.0x45 ?ZEG4GOYpa6ygWKʏCr pQǎw<(rJ'@5lK$X!a̻ N/ʄ)6@K?&k{ Xf0? cVA\~_=7j^kPa7E/^w *Ay=L 26sž˜TtĦ|;"IXp]*XT +Xj;,oa5UAy_i~= Rr{C3Aű ]vs|Wp 4(oFeן(Q).Px_L]z1bNjqFꞦi%b{X/Ф,h$??*w׮vM斦hݣ]+R m8O&6\UX`.OyDJ9)Ϝ`=mf*=8ZCZ@)+υtq>q/gRv}JP"bʤrA~|Tz|Ǻe쓪-ѢҼ)gY6ߌf?"ͩV9أӏ7KPϣD>5L?SJXG\o*}Yꎈ4S 6nƟʔv9e7B{+ ؗ׽J sQɢTX:񺩟-#7]CU;ǎ|@?WPa'G,:^޹Q^)֪'yAξ3oLېgUyFچ4n?ҕ]0gYCW{:OC uC0а^{&B6x(W^,&XA<+6xedH  wZiZnsߛ)s"fг9/re iqFH\!#~F,zhۿ*վ^xxNEio^flwbdwʻ9G槴 Ϋ!1WP~}T3mo xwO5;|{|+z`p+kulr=4{+2.&;KvsS)6<*AÔ"_E?o&-(pxi?~^׽,z=^Nߏ_4%lƈciF[Od˝\)uI522`\n;wW f5{M7ŏFoe汚b XxO\0ivB&֒ѭ%^gAE }E^tJyd({wgǛ8T [ hHչ.wRMxw~X8;׫O75SLhG3߰)\?صP_'gy`mOPPڹ3]eq1" {ܢi,WҧH .O|!0ؖO(wHz7a(8ݻc2`_s.t{>+ǖpFycͩ/$Zx{ğZַ*AR:󾂞= _%hdj  &|?;vB^ }v*w4}4R%ݝ N e ]baR_q-&i #v67o rf;)s)1n$UOhyVdǑnD[_F"T*C|  F,'u891^^?|rTJ릲ūgD$zZF)ĖcsDpH[Dx{bݑ ?xwȦϺ!گqR;:-/k]=:{rˆ˜ ;ͱ=X~f ~Ǔ|A1Ax|8TH+{΢Gb4U>=*U-!e]86=ܰ]D[HX*L_Jk׶A|5D`VJycEFѻS`!0fl=Jj--•=}K_AlI?$ѾJе-4xZywn7rcpfKwX,_oZX2'nP{kQg巫/\*TǺ'Di~GӃ?sp : K/ ^#"cr(|ޙÎv )9N>e1Q3ڒ{֊^LwX?GiD,Y-;H!WˊvE4W <)ܟ>g{Ttd/Uu&p?rW[MvqScs[0G ʵA@.cfZ\߿ߵHu2m^ >P/rޗ4جȽ^~i:hx8GhG͜O晙޸#|-H_>%4J:2rk#kL֚O rf?G~ȕ \j;[ ۣJ|xƵ9J;hj# S`m=0sN|_Ri_(N%b5}ҖGmF j"N7!-4 O??g0-yǻ2И -^9}У5)m%M ձm_ˢ*ES=]}w_ n;\##ʜ[ z-aJQ3 ZW$_]p#khYj]߹-;9]zql..U32gb5gxuҳ8uOLbF4tlWs,kJ1NA^@/aL'srr|R,sy+Xtx 3DwGURL|$K3x^A[n4aÞJdAO3vd@vз7w-Wde[inwn,+!?>+m\꽖hQz-k?QC2SG.4 Zj{ u ˣkf4$?kVnS?Жv&*tg;v%3JC;O'^({04?gNA)/CKI3HOĬS.GpV)X#&a'Z?6<%Pt^5AmAsHS"oɞ`܌#>SG0"H Afn'1Y!^yu)X󈟕zNcA3rڑnÕ&/ G -*KR==zYkn_FwN޴EmY oAASm)#++>K_h~ltH]7^nނo(#l )EO  c&,dӕLP:׭P˶j\J'X ՂN WmPh,zk=jȾ@5mpz.V=b4sJo7ൽKl=, qwI ݉16rH3V{:?*YQu>vCe+{?PkA)fV 8f#-i&-&Iw?\Y ۗ)`WtNo5.9Ò W7kHkҜO{i/!D('" 5 JNq z4˜ Cu݃m0;){Ǫd`}Jh盚vZ³o]Eh{7ܩ˂? `s/XN~d[71 Y vqǨ)>{=/.'z[w}xRP/4T ޓEE^D] 7#(b}t.a̮NB4?-_EPAOCCdԐỳm-=K򯩋MEvPJL1+(ܷDb,t3݈/K؄:ZA9K{#LQ'~C|YSLԢXwT_gAjQJf).-;vm}ĺ>ا {GFvxrxR@𼇉4Ÿn#{Cd5{/|0we㝴Cs3>&->bm.%@.aRKjޗk >Mkރ/uyƟҠV,MY}t7HQwh~Y=5.>w vR fw~k)t?;c `i%ya? c5H0Cb@9A ޓ8ɇ 3x cfw(A8Qɯ|cGAۈlgoןzP) 7PYP(H)]=̜ih EFg +@`L@Brb[r%ʇ"\[ŌBy[Ⱥ0#zs}h=1ܸ _P!R4 z@<" [ۖ 5==w_P@ewIUI79 Qڿ*`@IDAT#LFgp@Bw#A:$bSo lL9?#g@~KT * "'1c` WT0"TھiA~,x,3(v`<ω4pǻwD_Aaskuz٫a/9)D;jQw4V KS k'uh~j^g\9 󩻏;#Zb4]{mʜ!@V|#O srТIPzNTW֯WoXoxPnnǗ:+] Aj,JsQĞ:o?7Z34=hbM`ӯ *&"MAÂbr@љj7l[; yHf rBYq;[W,TWQJz >_ 4rՀ*s\ú@|Gy%+]`xD+wr}Q!/reYe9w\f#8.cIu߽s+U(3i9yܽt UWۓQ+0 ,|N4 {Ǜ܆1^ĽLm*եz_{"81dS5oI1 !N~+ {HC>_4h/) !k{; GqNUiXP>5do=ؖ*cdޔ8R״țQA2t|tf szpQ\ȥ1v!r/d [Yۏl=Ź}WG&ﮚ4c[jY0VGgU1H+XGA1SWJ ,A([*;X^ʸ"䜙x$з1o.y,[ ˜1(( Wٚ"(A}wfDXm$X3a c^_vRa c^x@0_#>FPQ7e{k zxKi&T!Va9vcP},s/?_(R79W+#(.X]AvH-LIm$WY?as1@Sb%Gb{J:⩩XqS4< *<5QKR!3]Wt4{{A+Z@}K*ƽy$XUq _tp>#HF"p$;v(ԯ>MJ9?HවIsDZ;$s`/(5"c` Nz%S޻s.v=Aaɮ?N' 1@~k4=->jqSIȅ`;LIm{*>HPgޗOOلS!ǻ˜9gG;3>>%G3KvL(uȿvD>J=%Kʑmceyh1_U\2ql4R(~ʕ$ g#:"cgdRtJ8pduStsNb/sWv{O7VSGSwp0~(#U;+se~&S z>aϑ#﵍*^.ܺRzpQv_s5$D6ʹ.˜Q "X"a#c^<@0u-&KA agcm#'W _}Uq_ J_mWrG'γslN\=S߶P{f0  qwMC}6:Nr;#91/h)$+j {z(\'c(\ sы'&*I[!Un/3C΃/]'8x av[ *„6 YGP}.ȷbcgc ?Z/̕NչߦNpJitrT=+O x;~F/0)2@ACD\Dbe+OcW1}Wzݑ|QLDK-8;:ıPNKUp`+^T4ّ'08ے7qTsh,؎YHkCs=se2~OXAYRr Lxl2:q`771W v8C`<Ӗ{1Ad a^8AA4@УLp\+8VEEU ,Sm⯜qe7n UuXװ4Wesr[ (v =QOyjR˞(~ DjoM!(y闽Ɵ멂B0)S~]"+w NVߑ-C7RPߝ"H~r ~>i;ڃ-ޏzl.^i|h ExzJ"څһF`]?+HװE`qYs? w=yx֌?G>O Vܣv Gl68ǟy}Bؙz.{1 7^p]9'ƚe=M~/yD-5ٌMs*Xd8`m84ݻ#=/5MYQ3 }j “;vgVb8ʠ2h-XA+Uy_YWdw>sߨB#XP\g H} {eף룯rQKX/w&ͥkV\^x_a3y{s{m!0!I_%`M+Gz}jjA(˜O}LA;Y˜{_<0J0T: ^Jפa9}x/6 VDPUArjlqYI19WŽT!=!Xd) %KTAPGp|oXUZ6Mi͕^Ŷb/ -rUt{Þ(u_B=Bȝ$h.R--0\ ȗ"Wꙵ9ݷPfgWEISN0cl j.ZA!1Yca¤ӂ'uu\` ;ORϹƇFDi)Y].1хi&ir;lܛ{x }OQ-> 3z[/ h*P%}o TC1h}Aa-/o ʁws.Yr_jȦw;rQ{ԠyO`HsYx 7,h 3W;#Ej% W¿:X*QmEVs'<{[MttEjQ}8*%q|Ws+ӷlJ=諣nS^_T?ťDoA=~ }}WEps Q㽊ߔY,BSܼ2֪ߓu=Ghk~zl~~U 6?f/0|#g; o7QAxsmug80ܓӈWKvW3{CUI)zi2A)ȅ .7etxXN#" w6ޛA}{q]~͙2\@|*Wߞ_$ {Ӌ,`2zc*g| F kۈTR c;}H9bH"xSl9G/ 萝-}`k|!6 u9T4L yT1"xA(c/xQChF.xg_A8CԀn#`If^.mF McM+o)\m((vh3llgȝ݊mNf[ Sp~&\cS/Cp"G8@uwV%X:?~i7ՄtW[W]t@o| !OSR 껗^$hh&6A.)CpA >z"3z},/0[EHHd4^3Z5而9"vw49*,q6#HVGw#%g؏^AyJ!ٔ:'h!O{܈Xw {GW}%/Pou+y4$[~Gv;kt T;ł}(aC#ρ+-x .>jS|Ý}\_w/I"`XJc)5|j>i{\%o~dό!Tן{/N&dqO,w`\_99?fVs='!97h=̉ 1 O:dFN;[sGUZt_  W",x!g^I4Mde Ÿ$P V+X|Tp|~6r>D=O NDR>KJ(_*V9NE7+/ tT?vIx {neU E\c1(&{lUy`/{q*2瓊OP(U VɂK]%gO)k@wלd08%lAT]0 FXތD7E/g썆>xsX+ٽ.D[Y׃R9(F;C.\eh2kD?tzoΛ8>EOEћgƪqgO}*MىV5ˠ5\bdKr;6| Wjƃb|7 D VOX;! qw\^).߱ӤsSwnd ܡoy?8D90ܜi߈ K_ao(}[x19"͛@(})p 3~FKyNZN-qufpSy)iy;x?V'4 s8<{<E5O]0o|m:[kOG.dE~i$BY:yf6JEj$.$ht-Rѳ"'D'gd#w,%}Q!H Ώwkj4:̺ɱO33s0g4|FԌer̩V: q ,݂%N>Xs@>Q0 cnF1[C%O$sKMƌ'S傂d,^5a17G`NAOEcLQ W>4\D4l 719Q_SYχM/{њыmxXCd6q *bK4l|bcϙP;85ݣ3߮R_mn,!7*za<Ȣ|44jH%i`[m*XAE >x RJ0`{%}}"/f ߈IP]@Nkip{sG'l T#o|O Ǹ@.1I8yyyYM!_]ҐOE*׾Ndʽ_s )rd;Č#`lr =Cs[\Xl6a0\˹_EAr @/0R(*19(62@,938g/_ZkTpyi9}I';*?gڥ1n)[P__,“{E  goʐL󐦌e9 nhnHmUquZoo.wZh_*ޥ @/Y4A}?_pZ?z3B;Ax/t}xh’o(7,A%o#>?usZ%K9d$b4` ќh10$gKKГuD11fZ.3 z4o|Q yZ̟ASO|'><m1vi[֫xnN%T 'WM|UTD{M/V϶-hH& ]i|OsOs5%CvԹ41YgN^>aQn{ P Tk$3ڃ)Ș=^r}i1$3gsi*/O9wwK4Z&Sm'~.pvs3Un"^SE  _Aq|p>)bW'ЀN*lW b 1|R_XhfhNm5b7f{Rϰʇt'/"]a(H|T 'u@ύ s_SQ5O,#UGoky3>el~X$' "Lj;l)pё4@9ia[1\'f="t~;'x~ɨOZT1[R'8z"T~0:rF@>ldu8ks"s'Eo@,a;h$wo O _aJN+ F\Hyl|Q}lޙI /V[3`D˜8Kނ 抄=gpc~}4Z$kbP{NfCeePp7hb<@*ZW >&7ThAE@.POlb=|]^fgճMՀL lWWȵ4JlLN< S\] Xnx/}5Ҁ>"ce QAe;WH1&=UP&OG p1LP#xCĆJ.cQ5;ԡbw^e]Eo$UN.ttV1mMvkm 40ϤaRQ|p)kPjGfz7)D aҡ<[Cf~/p~,)&w_ ,TF:_ɦDGT{ʰ)շKќVu]LI^!X(.xBUsf}ƪI/ ]?p1P_Y[PO3f_"BLS*\ЀTA4y}HgeY'v<Ҿ[鿒 DW(UlF\7ejuXg YW䃵ARos'o:,0?8wGxBxk:]q:Ӑ^_bE受ܾ6,)+[ ϊ0 ׋k ʷcSl]HQȝ ʺx{G.@~1t5mJ`m0˯t(+R c];J>_HXE ? ߣ7}Pl=k8c//@ a\]P$'xoE$Y3`*LE@ wm.Ƞ{gSWp ? ރWF*UVbמNju:"7!x11CnVͮO>o2ۜ n,_`ԟ#KXق /4cJ;=qWiOO" K )C>\y/Fמi嘮 :tpntذƂm%6\Ok.suG~_ #,t*&`5YJ F1. '0d r ,8_gS&KdOm5*|IIt*~caҒDA3ۑchy{Vg ޿Ƃ( >(6 sw( J)1ĴM-ѕ>剧K^.}o'7v+?4c8 ˍ*wBo9\ QfGKW\*틻μB]k-w֟K -xE=f?> eىDmɝd9=A@#yTꭩ&% [-Eg|샾<.p639|? hgO{+?K8ni(t26~T9e ǺrmGSNS3\h"/VR@yNC1z> wO\^_+Wȥ31J -5*Cz@Ώ &p <~nN_g2I#NK ߳O 5[Q|`Jzs0O<>0U.F.ߛj 돵v3Fo}P7Ѩϧ ə"TjI[3bwWlRuVV\w UN| ߣd>%CL:ԛD*޴b;- >82rss"XSf{{Gv}d/:*cH # od=)K1$' F A#++W-hwXb c@E&rHdo3 8 ksVܛ#:Nlҷ jwԽ qU9Uy{=^Ld9Kn+@M~(nKDj+{>abX`owZi(`deqĴo<7egM!ntU7Nⅇlv@-6[2GPO=)_1?#su0kZ [AN&NWN@ IK8*rAÿNߥ w` {RGOhbtO)U.j>Ң!wOmfN&UO6d|OS\l,0R32hBcФ8[=r_;2CSPw,z|Y1bEmOoG4,ˈSr%s} AMV+^l1MjӲ "A|j %xTjc0w:](t/GKEd]|tgo>[ycE}kae#j8M\٤cT=+dr #%^1_`FQX#be,pFln8mKq^۟_m\zȚ@>?}Ez\{qEf4)tL@=Bꢭn 谌Yאx {C}÷QltNA1!OBzr/w 7-nDMjM7-mU_sVvE@?0 GsN|WE0}WL+.|/ .oo$}.r}թEy; *(|. :8aCs{Go$"!/r.ʃnXDrqc<ࣨ?>5$R(Xw@QlXyX}* v}XQJAjh !}&;$$ms˹{{"0@0OV <ХBq/ʽ+NE$2if s/0(JgO]j< ;w0٤? MWqV: 5Ú= W-.=#MuuK #*X艑9;l<,# }0҉A8z8NsmcC#~L_@:e*Q'h$tX0!~&Ի@D:Q (˸D~@*y`=aO.U04DNt:/~0D ,*LˁY/ Bxm-ar$ ) 8[  1.?̜_{ƈ5zs_qadE5F||>7G.'q5"`D?H8cdZz#{5W*2P"ֱ֭p?6<g_̻X.# 5fS[0~ZK?)|5w].#۾O0c{^%Pj"(ǚ/=¯ OU{N=3l-U;;,N۔곙Lp8aYϵ`̲*+% 'ys 𝵷lEj-CYr ׿s 9LI+( R@@2C;SJ*h.b݌7p3޷"% F>d>9S{vQJ_B W8Q Å -@^gxƘ''{!{[RnǸm#;NSGoRUR;[?="υۈ NMFpΓTإxkWx1yy˼k BDi7pq4K[6+v1K`j+0Xn(dB}|@:ݾ*ߨC/7f[P>][aL<5:OrbhwUo0;øZ+t=ͬ=@@L@dWm\ 6N1(0$16i35z vП+¶QH3Q QEtJtejŽjCDj#;Gzb`PrbEGs@ _oK/Bsd. kK'~3( 4-NUk̀ n&A=,zQ1Έ}/$!IӏZʸEF~EvA{?[ _$(>*D~v}׆ `w.vϺ c}v-'59߇ѨzF",} pNNUjMwRW`q],z8IǪs (sltm%p#]ƭxnt5 M}{4~GƌY!dQ"H?E`2FsqugqPڎ|i⿅xgcG;NLћx5#z}W=BC L>w#hYKu#+p-a~u_YӾ/KtN󝟔Ls pX+y_ yB!zho7:^ ;-8ZM=ӂ* =N1eMw,w_Ϯv^Fv8h 켍}3j*[[v{P|:gZ/S8xf`"_b,M.%,DTCg L/ ay@,P¥ڈtp&|, \>Mt>ou30=i1{zhhw\DfywHJ M9\Ly/]-@_jȞ]v+_`<&0OX~F:hO+%~#(ʐݔ`Ԟ/jcb\2~H5+JKrg~~̾fiTk Qw΃].ߡQ6#co{`ZԻӫ}wYu*Bk@Y3H$1w^l1C5,H`WvW(K^@Xy<2Q |Xs޹ "k8^0%Enmp>4 y8>1WP~41F{H8*^+@pm{@_J~4(7ьs'҉jb|/\t~^,y1|=Oҋ/j ^Q4Z0n膿 1Z۬R94GpYtvN 4أw 06i9n]sIKƢiX;yn-&ȣ;sMW:tvړN]I] kUCvLJhm초XjyP~#?~JXr\7X+Ep9]8&zP;(7EipF| 7^B5o,'b?3L5=zSF>7YңHrnL;lh8~yh|z뫜 bٟkd+watL>6\#W|' .4z(~R A@@ ѯ8Z G)sq1BDCK? $hy} /A},85T{&&0,xFEo˨nOc/w[xonU&)5h¼9lMiR=o1LGCjwG>%0.   xوc4si7O{t}ح|,J#2uv)h(7Mat2Qs}K}ws  A(".cXVW[TBL74FIs.N@,Swhg!٤o !\hQ7zD2Yͅ(:]Ŧ@QDGC W[ov8yfzK߭B l˂8˥E^Oޟ_L6@籂cRn2׷=H8)E_Ċ@b2ILe%oI>M $pOLoǧ!1 ֫EOy*>**}*: $72$@7K poHh,g[;F`˼T}@Pl^wp[Muk'HSFqdo]d O9^^pwgX~ θI3[QW68ö~/=HTV5j~ ;;H;.ōaX4؋t*`}x.z=OߡZ*V*<筫W5g>1.O Sr+k7mɥ@*!2fniیm iW#`}:?{V+e.pwz>{j>1Nތ- [^w&T.+k@<^q&U>bmqӱ[n{N9v.~ڜβfB>#1n7]J[mχO_+`/ N" 4 cYFD@cP tNlUE:GbPS $QDxr0lZ酱O0w2O׺kOvJ℔1V_jZ۰bN& 1݅(j_s@=*jꃫ}/(审n&|.@ x&cKzCn o 5F{orjru(0 PG Fz}B# E?6dn3S+a jk[-2ϙG 0.,z~gO/2?(>"ރ`/&06Э7J:$ qi}TJuѾnss^_+_- n,=,,Č}2= ¤n7ў&'4޴3hp$iZh|l*hq(+m!+Qҡ/:q/+"~u~K^CM~bʏwm3VߒUş[#N}#Z-r 2D-q ҙ8b]#t'/]Nɸ~xΖX R3᳤j?mVLwbj~^w}Z_#sLAoEs[|Z Z}JoxFEoIJ g]d=gNAm̉of!⿗73)G׍XϊL4F4/*y a٨YSHʄ>[:"BTlZa(rbnhھ⎃ϛjwQ ;e⍤ø`\TřGFM0"Ү] {` c|' uE!޾d@D]Hxv@]#QMi6@.:wRVݰ`ٺE<FYQz笧QߒԔΨlEbH- V!P|x~L#Gr4NEKeюk߅$WTGDf%i 盄2Eg >y9~^TDiu|ژ? ˧: 1{Lp]| Q-7qs0ב#ϣ+@ ! С͙ȕGoa/ٴE'[,\dԎ4·?V Cj;ښ] RLd8:LAPȚCoª1#rzۏ8=JrR**]-;rIއX&wdC[LȱOq0<QW4#>?kk3`3_H2_ N سJq/]G_dޕV'ͻNF1O~zlB1\xN΅7-Fc)4&'zti/>P~^3>@@p&˗B'%W݀Fw[߉jF[ZsyKE%lr¯s}R_JGh‰B=n`e-fc`n_߰!M[u wm]'9pD3~c\ <@$XՙGƟ;yX`~`=- &4`}zڧUN$;bE=R]ѩSk m&pm:z$hKSㅲpE`C;jFy|a^`O[_ě8̄QqlP{)X+?zM\[.u@ ZbM#7ȿݽOa~q0{Mi?.DP M*pQ & `DcK G(?nΦ^dpS:ްCg~:t~YFViA5D7=O`u noo >X\-~U7qUd'.bag?]f$Z:~cn+kCGuNA?<]2̓Ssa_h Ԃr1T x'bI!vvl wĻGpW t3UE!Dw6+ik\zSK'6^4cl#H ǓюJ)2+kmâ kӟ,Y$ ªOGe~G4>4- _ .c=絢^\HB%[ֱov:ll^ckzx#Z)-rC +plgI}OHMF{tyG=CV!ɖ"ߤD6tC,,@h"Ù \buhlhh$%2h.?qV:A$Sޥ9u :=}K@A(1\QUAm?ۂqgocx1gVbg ?49vmpf&H}-u[ i:`qWIniu#"1R){' ' w u`6Zz t,4j0/0X &P@='Չ*j.Unz˨Z>^lĬv2N'3C}>2~Tb`а9. ‰əiNLx.t|GnQrrP䧇@mV[kcDZ&NgKcǰk`2 .r$`lw ;/a~Y`@Im X ğ#Ti7~j_'QO$>W> oYW@9HW"# OI [bxVO@xS*=qStk &BZ^+j! ]90ǰ0 _f>JLX^J{d{Y*ح^9ԏJAr 03 >ZM?|dо̄.Ȳc_,C ۶v6 <>Ȋٔ#p00YT0eM#b{B?UZE<9p{Fk,ӉQpÁGyq}EW 2Dw 'V#=xU6TvpZkvC|'Iabo-u2&W!?b,eosf2>ϼy'ͩpjcUGIy F$f}%zS)= j 6#͂nqb7:U:doV"'(>al|A`{VμOT%?E3SCkfsØE@++j/[lNQ]P E7y+u_n7VOilTf@j]m#zb9RMb'ÇðIIc`K8ֈ:1#N 0 q%a@C6*gs?ϱ*O%Hh.+5v͍Ѡ^y>۸8bs·~6`\M$С!T{lk-I`z>^x;ƭ(Wc171EVaKiY ڱmbyBD[ƯoQc'%j~3ͼkw,+cEoCXϵ+z!STP+uyYs7zkA }54sN.9g>+sdrzq302]0 c!Μbk~Ϝs_H;.:%!XΩz| :x+-ht)ztom $V ׈*lYJq)]1SY;{{֟{!hax:q1Jt1kش!ܸZ0~ hd3<c =ɎG.tb|\ l7f/R\':Sw4>5/IpٚO$_·N]1УӏXS-@IW$EjjFӜb5߇Nںi-YGnKpnj\kqUV>k@EL8~sLw#"iyEO rf6=tBeLR`gi ymTXlqVM(1^2Bc9^{Ds1 pTw@U*BU _rܣk  "a\{F_k ܯy/o8+P be#]C!zo[=9Rf['i!yq-\"~5@: ~זcqwyV3o eg㫚.b](` h~PM((}Dƨi!n[pZ`'dʪ`w]cÓ2u8o+Wk%&e 蘿!95$,t-iC)==jF`L2,&V'KD;-M cʡ G DJO"SЈr{ 2OTwM2TArP([UHL.~ѳ\wJ̓6b0vWuY~>-zWܥbQ#v6뭌4[RQ5LI|y;zY|-W;{v:O^~fI# H䧕r/qS |)I۬&QQ%Z('@­K*p:BD*c .p _Ĩ^"oC}XYTЭyǞ]w ߏvcNxΊ\` _ȿm,㎥(}Իt-3vN]MY5{LoD9 7j͛ӡ_KRm`[ qGa@B5َ s5UPZ@dw v+}jGX[Ix, ;_ xW-/3Ɍ{3ɽv8 }qI _p)tmG~7i,-fßF{.:ZCw=CHw)$&AS.K2 s~T!9K*fuds@POD?e*wwVhٗpl 3yۢ4-HMwN8Ǽƥ\bt%cўh)HUyZӝ1{o*) rl=lPQ@zA4*ŠQ{8?GZݹ-8{\DMkd$ݝ]9%>ZMDlSWE˄jUxeS(@>kkV$K&&Gu\ +xT!]8bcf}]ullte;I^m OS/h*笠wOmfT GЩ@0~! _[QQd>X`޹mtV!Ûg ODa.KɠC5hH0r1&nH^Tƥ!qmӚ{:֞S?nz?&a@&:U7E$BͿJQ G6bGT5Ul:ppb5 ְe|h80H>&0Lhpܾ_Dp+W 䫝PMxBw!,xZy3`SʹyiWk1B G5΢]'ۇǬc6GŞOfr%#[!*DVo!(cy:OG?k0ۚsqIa%Ywz1;n`>^/˿6)0+~G ! ƯGZCQyb1ᛶe;mM6|LAЙR90Fm.L 6*z_RL)zo~%~iS:`ǘ9.2H, (˄Q6F45sJ&u}"1޻nFi"9tB٧ WuT:"P@n(8&WgX>kQExR{n ']#cGT7Iw!eiVTs?8:z\|hPHXy9<%~FTUئcAg:6P9ևT Bek5:.~?;Wc(rul@q9:f^i}:>}^3x a \ ^!@'_Hh!=ިC qoOq8μުMG3x?]w 9t@/^@?/ M~8NJk"-31v+# X);D=bES2k'=pS!@cZSNo~l,k:k0LLd:VL5 4~+TU@@w^.TWʕrb}53y'Ƣk5ҨY`k.-W c_fk+im:z[:Vq+t̝D=:' H5\j"ΖLf"??%]ds*&$7,J9+J qX`v?hOgBcJSLJ (|iH/pDz֞sV kvC.=$oĘnA[ F{G Trow;_;c,WXxv1"(2}vV;EUh¸X )Wg Ѓi'kHT,Wcz5>\qߢ`#lgtֱN:9f{` r&w_ ocje!"wvWЗs > HiP٫R\e_`2u'y74Ve46g?n L*FwIjI>R%&*BwpL0jh^$!΢iC B{cV~xqf}曮V~qkn5C@p@MHRa7P5Ef|i&LQ.9ŴKBCmydJ? eQ?bg0LLZڌUg§e/غߪ|@b!u[\Gۖ#r&\~ W~>[bM`@>A_[Ta1)77SnV-I=`|od:㽱?|J& pNx п!J5&*, V78j}$fc WF];=Ӿi &'oAbT*&›lKMo[xG{C&I!am#tU1k#qxI>^\a6jL0t\;?N Op`avgz)8 I^:7(WF4F`}A`|@ Ä(?^bh wW/+wOx33{pI8lU~(pYPcl8zJ`" ip1^x==)%<2C;333z'Lk:`:~u5ޢeu cglzo߽v/@a5\km0qF/߱W\͊U_f >[DwmRG=-w- Pf?Y\?5s\9ՙ&;g!|foQѺtC>өg v ٬xVZ8SuB-wOH0[UMpGECI H ~p&f {Z -&e6G G&?ΫL]Z EtCs/]Zq T<%@pՑj]IN"\#Z;uXN"2 w7/+kiE&̒cige[ j^~qطP/4 ˅cv,Մ,Wp]dbi%4Z9+K o#vsr~ykg$Ei~5S;M4 gE%="`N1;N^@b. ϑ۠lDϦkzL8vm!;+|שI 4 >#OWE2ȱ Uq\QSA=FwNH(N 8P<~_Rz_|B+7х ?g|is藙7-&;2f9嗵lKm^>f:tk0mfՈY ?n}:u~hyI<U[&/摟<3w~^oSmjP3o&Z PVWTrΖN%h}R0oЁ8t/uR|{eT{[6V05 T~mH"GM$560߆N)Kc;~]݅7V$X"*eų&& ["T#Pe}[ey`|]N&cS5IBCOpQd^,5,<#@c0lG𑨭Z/-H,ogQmh?xvNPy3rR:y/?|N[6dϧe76in)lk<. 'g= )rzMuש*'fmo-la5Ja$UmDOTayi}N&>$+md@cqP)X2ۄ2WcW3 Ⱥq+;W#lq@XF@kmT8И|¦Ie( m2[S 7541@1c'qYCv7Wn&BK `-~:~O XJ%y?제 x)1VC{Yn_)Ȗ8]L N/Tm$ NΩ=1<2/޿`e%}u L`!WSO1C slc4kO ޯi/M},d*i ^?Ow72hc}@8{R!t `NZ"o?~ bTpiG~..9; jɻȗ1 q\#{X+SwosM66 %E U#rmèTn\D>όI[/~[x_JCޒOǭV"Wwj[oLjr]n{'_x6&Pm~c<+*ߐC+..)8kОӋߵzvXވ@`KK c 4TNRl(3%eG;/BPO ;`wX ;X8_V9k.oΡq;rRr"~˙O _cؖBP4t/C_5Κmm84O見~dlMXug^iw/fwjM6vٗ؇43eo5NSkvhةt v@p^=qU8!_'{dfwh` гaHnɂг W.v52vxu_a8Wd;L8ծC9Ժ^;h^2bmlݳRA}ƿO?7Y!ԺPwY= ΁\&4q` R fD$0;N wްPYaQ`jxQ W gX_mXSw."=gw?*0*0Όn@f9q-13e6fNi,u)sf5xVKCG3& u|vtMwr9p_}S{ ȏ~DU\e&BG_=aˬ:}TBLgm5O'vNjy?[cp+%M:~dBd\o ..G(ҶRN<]О1K0˖ Ts5GS,=84'+D—s'DžJᵳӼd p2ݛUh} RCx+@=z7-8~*OWeqn7j#o˄UÒ5`/@r{1onȼ[/OCwwLD C=2o20> tukd筡gk[_ץ޼?Z-M߽U)gG_xL["^[$>u>+ B(wʿQ;jl<rGs=~C|O]mIyH~!ŝBGCQKؠBlY4޽T ߫;YTe,Cbl?9sq[g/k=={lk+X[w"*7S[~_+b}[+}->ⳖzǒzǴ #{YEr%$b_[5x!k@~v0[{ 0O!Pw4A!EЕ\OF{i ;+3 ibe#>M bgǵS`G@M w(QY˭; MO|"={/4qT4E4g2VVᮄJ4V9 /r8vzQT- ko ;wzǗjǑIY@ se]5%wL0& lg"]_ g@8ZR1S&+s ,?;>V2oT>hf1q/^ZPCi Ǜÿ́Vbd%H&?1ʩzox*>ib)+}Cmn(D[Gʿ ,YS f=d W|+=q] h?, K]:*ŕ"` (13QM:; AN L8PY71>{L-dώ1.KT[; UdC8GlT0ʣLdgkBh-~Ӡ-<3@>ӅdM/َ]9:лx35>ET3iT|f'r?qFceM; h| <*8=9B@ ;rRe)nZ[;|\ ԥz"F BY6 gP>IZ%oML$䧈nM4FYF # 2n:l1g{{ߘ V>]jfР@IDATxZSHyN=+wo?~q+wA઎3镫FfiP?=V\:m@m#BTWHllD#lxz_ߖSۆr; cE{tYP zQ|{L|vU÷9i<(@>b]h`@29*WQcdt9;`}G\[ c)Z?3㘧>6HIߦn![\2b4v߽^@^󕀢ޱBy  H,xR. xi'c{B~ߓ Al>XBSl{"0%PbI[dw+b ϶U_`›*0Pf P~plĎ/cӱR֑kB×"\g\'rmn2.D\c8ss!F`k|+AM'r+ϛs\c l{7ҸE§/F"g/Ûx[*Q]X{G(TU@:CGUYI.V r'˷.%PsC_睖|1ڡW X.iz=1,=E¶FՏwyi?OU9 ~xxcvUQ\dW`mh/ 06$z-` _F?Q=a\t:OW0zw1aJ\(at@>Bi 3҄)!c{B)_c8U#Y ړ7,s07geO7ĎZ-͗ q4_.P/ ;F"+ȽPP-Y^<9F{#P;lM]ѓ&"Lwm. Om#jtРR7e#ij;ѶL t gуFtzΡV=ֵb]-V$ V }&d"S͝8vp=gLw;4T_ʱP@z˽QK }YS΄rc%\8)4Bȧ&ŗDsSf fv#[9n'عɘl10y IyBj;եpzl)ਜo*̄$Jh67~h r&UK*dvhRF|" >C=اZ@ivS`R1c5eZ *phFCe@$ 7C0v"`3@/~ q|*&Rwe~O{XR^t+Ne7!\+ۋg%j,'r'=E((v9'n ./9"sګc> k Ea| sb\oQs_Kf'L-Y9Ql ' k`8̝KՅk  5A&fj< VAT!l<#WAo朱 ͱ#9+q!@v^  h:h'!z\ۅB x y;2h6=v~Є>"S t+rWH;6t #;W`{@9:ֱpe;8ݭ8CNҟr,[S$ 6換N_r=;WQìmc4{pUy/ wΞ l.B|siorn*!8F ='WZXW;Mm0T5rlk}G?K_O8o8 -ÕnyGlq j)v3,.7Szhk ! 7`Y ~ђ\ƫW+]ru@ܑ$UBtQ 44mfs66abeN7JGba Vu|ϭ9,An7#wY(B~SaHw脿ֻutKTO[XH:+CV=N$d^ym&^k=jC Bl3Pno}$F$ZZl`p\/(z?%tOWE*1֝qIǃ &0'? 5BpŜU a)-=V|n1&/;xJoPs5%XF-YO;4[3{Dz C3GW#@/ Ղa. w  㼶a *7ø5Jw [l4#6#<(%$ E@@*6{ػ>b/ vb.R,XBm~.d7>>σw~dΙz̙31(֨]a+;i qjXP^s#ktU_UJ`Ǘsw CJSqGٱ?θrjB˶U2Vt>eˣڻ2j"|tcQBg"M`8SXOJ;<}ߢG1a+vk|s Zj?k\c\y/)[庰p}]<¼0&}ªcw@[BƢyWٮku}+q>ų!~4T)H:͏X](qf0?E8AFCEBy?"Qs>Wj؟O/?u`x`zR3_|{L<@3Mt v1N]&޸:& VzO; ڱmў2!@N;Zcߑ/"C|݉1w{&W F5 \o U;Rhԫj.n~"D\Ցʊ!= =2O'=BB0𳑭s*گx r`q>|@ 猫;Ot|཭ : 8nwW%o&@gf,GډtZ53~yСk #0Fm:TĶr~|*&̋f P4tgWѐ_3QBV@Po*d~hP`eL N6S/$ ?7w~ "@:N.iƕZl[ "Rx|V_D@0k*p}@Zz@M~P`s@iOT_ @8 jF U?.j, t;B{_1o7[igQ ;v{gke[ӆ2̦*%qelg[Wky;>uc/pu+ GOߘ65 _i 6;ƣԏve\U}sz~hk^/r|[zi ֐T媵-C9'UrDvvb^K-`N2X 4 #\a˷vGG}A~8l~]˲Cef.ce~ΜK~8+Kzd"Ügn-~kc9փkܼZuFiD`\m܉#%5=:6Y+ cCC4֜7+1ظ⢵ϕ./gag8.F}k mCa?FIȠ> swyDR6͠s`M41&NL9NԂ E{<Wʷ6XqS+grxߊnExׂPNqP=G 6xxȍyg{˧ ?j;{{2eP#W Mw:5 mW.6OO5VD eL4p߰ yŋέ Fz.τ$8âY- u O1h!TVXseY?H`>j?T] ŕOG<6{wٔ݌boV=vqw P[iU&]|,۹ϼT`3l"C8e@絣$>JtfQڳyly8 }oKv;i$|[-#mwػ5ȟV lT &? cݪ<~f}&` =AG<#ؒo!&:#8 ~:ZF[ qKכlxӿ #x!Un!ص@aؿ>>2\`h/ ˞cg Jr /U2n DO}TC,d_l\cwaUʟ+Kq\`+pO~\!Sm|GKEǵ%ԷfG ۙnD2A?]#]:&q$H*MAԗO48Qa} >/ J?OatvB4sjR|O?kG { ԁ精 ^ _>COy=.@k8o٦}+*Ǘ[u@ 6w5\?3*2@96I߾ɥw@<,*͆Bp xNwO 16A Z Ck#c(%76zD^CxVc\m&dM̎Vl FBtYm/;m]|5.IE8*ocب[$wPZpvI3nF8a@;ڸ||h?>UyskS;߽٘%yK@,dw/Ke@~<+d/}{/kÒ~D\ 1VWoܽ[;0V"P? ݂GT+ jeJ7GmM_ur5MQwnSt.ۅ>˱Ґ- F@=H5!;_\y"9NQ~]ggqp2jݡ旦iZ>pӋЎRoflM~D6ߒziVɹhya 1h!#$ie۷("v@p+9G}1*qOYk+tuYgd c] Cܓ }3cKD}n:*ŻՑg^'FOu _;E(Ϟ7w:~; LE*?im71W~(E#v +d;*ꩣ]7_~w c;$z[ն ʖeg?f5aHz?~Ob+{@8 H W gtU=t"Rkzyq$9Ei*>*P OHKBpL^ǤWGn% &QCs}}ow͡˖g+{D&豷3K톶.NܙfMz\ P{ qVXtI:%3dE41u4B:ՙHrj۪)03PfbFNNrOཱ?v8tIJ6!U<xi K, DY^Awǂ?U@@x(bJƁǓC<iKAQ^BrzУb𳦧o6}[O6&?q1YռN8 )xU|&: 0ȳhtL,2:@y*PQ%a !l>0FGocj@vC X@ǽ{c|P&tD(n }hiJ=,Zl/Ns@skF[Kˣ7z\I Ձ݌="T3Nu|KQ[a1&1^]:OWE`A`?x: M9:RN.7'vz @͆f3=( |9x,MSЬ"x+&nX o).f [~F4uhڭ\0kW+_*_,Rvŗ2am5w5 XwT)@Z_C;H |-OqM'].MDuasc*7;d~X]6pU|HXky|wJPzT/;+.։+_?j0;-lӔh*Źjgtd8Jx~U<Y! m|sޡ"POƙM98Rw HȯG Y&2Nw Zñf!eZ>׼|TfCJf}_BF͓?I*NC{qVW/yO"@;q7Q U)-?R#;v+>>w}'v Jwßk6l gA&lFӖhg+:Rќs'+h uB{]ՋU/!oxt|;;[cOe\Uhγ-D@ x`$nȖnB^,w>}3lҀY:]AgøM`6ρґ2 3f#WGUŕ'7^ڷF!ޓ_-ceLR(N~X&S;xe"qq$I[a u|x\Y {,h>'_F?l!"ijcMO^Y)=9u &'w#C_$@ŝ@~߻+l^c:_5$: C- }Y*㽘5ɜڃb_bH"5l785NBM8&Ϭ'e\gs# PsZ1 RX˞5j sc\Gī RVP22ϟlIL\L^4XPrڪxwOO2 .6J_Ҁ;_*df< c?O2A~k{a%3}jQMO^Wya,>s˲3:ި[yS 0N4R*HfAaHhfx4h/7c@/UBG^j =.@?V#65ӊ@Bk#J畹qyuҒwE ;V``q|F" uDK7´3g@->U_g@lZUyO`W;~Z`"0}[@ j! @ ;0P ~)St<`C՜2䉪>W͙@~]w ɼ-{d-`YOqE%[}7<\]]IA}Ess?}lJ5eSsj(чGZxNi_viqu֓'DbO1_|6.@cJ5cEuW ja}OvM|13)d-]QFOSӕ_O]Ma{Vj>Ǚ}(V'ƀ@naOW \ 4H(`4'P P U Hob=_ #`޻:*O84X[[b{&9nEj9Vc}h%uGDyq(۴N0>叭@4L$bÅ7ՊCs:Ut5"^堆\+0B+Cd MFzIl2lH߹.뻀sU'X$.H =/tՁ_9NJm cޒ`LUz&4]63qC+9V"❷fU;!q\jzz"C*k,:0sU{Vp~G%KYy1`\1Re[0--BXWT:Z{YY o5狍9p@Rk`ZmY;{҉ HZL._iO1Qт/U XW{XzDĄ8ܒV~7YWX8>m_^~ s $)uW|ruD7mX yEFtBuhWTxkQI &=&#/4xS}M}pX;ykoc0O# 4zˁQ8I`gܻ|r7zaO0uv3P ܶ ڹy GqMF׎q (hgOzNгrIS7&?A]_s0޷4ڙuգ:U7Q\{࣊͹k7Y@ 5V}(Ϛ>'6i~w6c)ɰRg2e Sr6?7/*W-n4v\7C Wt =eɚ&r51mc_%+Q`Au #rN UtT M ֧\f%v Wnֺ2k{j;U`8V?Ff% AE'D]{ue󲇋+;27M5{|H`@M|rxl.P+:e9ӗ%b\|猷D;ط4|QW{%L I0E`*MWlbq7|P&ɆOM`tmB- ]yoi0.ZVJ;XgWX3Ώ (4> L/@H=kA 7%g臂?7:ӧH&FQ޺NL \ ww >a<`f _#G/D~GO- cO2͗LJ>ݗhR{Y={^ޛaj/0N}I`@<{ tʾ@  J&S35cWQ?TJ`5 r5זBӄ.y@.8׉=-(?|b{ rjr-gr4% _o9;^{Str(ǥS;kȹ5B ? q5旡/Ҙ]FL6[?ɟ )O!ΞjFƫ?A{jןV'_({E;c.i =Ľ4PcZc͊y EVI ŃkW^sL.۶):s *BD5+dz\2VQ/Cds%{2eelZC(k@S跴GCJ)}P n!|>R d VzqyUL8?25?tz(O%ΨNzM_)NHp/O [3H?}C.4@:;t3QzW4Dj`9o gh9K=oh2P``yPߩx[Im= {$-ķ˲=g{Y;9>HU{ mib\L0fl܁l@$( (7V)QᖔϰXy{oWo`C*7 QRX D%)Lĸz *01P@36!_}P`eW]PN8K#~5-N[/ )o5|\`a0aToX+彨ja^p OF+}85/래cirHv#/\[]a~_}uIM“bݢ?W1<{лq:8K*!pmWc jwI sƁK ~n {(U\ۀnnb%S^*J$> [Z/\8P5U,y^Y-o݈unwg@z_,؏H~_YJ%ѳ!dI\JMl]ǶK.{?n} JׯNaYD^Uou{:)J5(Xn FGF491Վs`8N 'GLM 4-Q*𠿃8Ɗ& AK1e: Efd̎0?CS#_O24*0utCY\nXEN~~c6$5gd9O XǸ>#8@vXi+0ojVyB jCl*+8SN?F8eՆ^kbR'zU1&XtkBYAY`y`::%f0=:9Nb>u zZ;ǀ9kߢ Tq mh~(-#sSi,h\J:^ =Y"7(JU%LI[a hva ;E fQCC+y~W;Wx#HU-yag}j3G\ H w \532H[awx Y|o5I5Lc[+ʊd!}_D+$gS)FX* #ִ֧=d<_076BE/KxʯJ:@UYh*ޮ6u^;}XuG d)RWho|O൷gvto}rEU}xI$YO1~&ee?s] 8/hyLhSѾodD^bx*Dd5u3F\O[c}~R!`q΁WՍrB7l)aB`;kn)bUi 5rn4Cn 4`< X. :XO8Wx|}(E;9>FoބoY/lB#5UK w̙'`I1 =x++LL%]ƀ8 H7V:]xzDбNa="Հ|!kK g:/h0)O{gOZK=O+֡EO8*eC=kfC߅Df c] $+jj3?I$+']]I>hFսn~% *m |7k/D໓wP cP"TU' B #ػӄd@ƚyˤ{ vM8C`bQ40lxv<?&~ KȠ ?r9<b\co5ƴ? g_.Bn]VεQ:}G]~ Whn^:N)h`9 |ΝX#}! ww`t^+z{΋Ccn-COB|ޱ`|I`<"7v՞t3}i+z0JL(7ë]sP a{5j>4ih=jҹO8s$3#^L'g$4?+f%oPT8+q@@ ^`+P o,frË.Hkg˂ˑVr+K?=ӱ3<'TL44`p0+ u|=/do\W\8/<_uE-3)l\4`a՜޲Mq(W5~iUS)vos:. 6@IDATWHW" L^ku ]5|E#F"!*T  AOi; "'3Cȟ'eSWY'=TwR'4ڗy`R" =hF461踯WbB;'uԠz`$QGj1P>C"&\G3~?֋PN9rbY±ϧ&׹6[uغ|6ӗ"P8֮`)0pD_d ,tvB ܻ A7&Lwۭܺ9sRz 'z1^Y~=PٲޝI?9?!Qiz3.y ׹圮] I?gkmIJv}7$| G2Du峩'ї2O}s'< w}6d^hEĸNӀ0sriA%n$k.icev\C0,(~B}>=r> ^{[ɔQIeU)ŇmD=2@$T#>[`B:%~ix f_3Ջ4QғS M{ϵт/࿰d4hȒiǓ}%N}96a׼lu|R5_|M=ѤQ0zZ1Hl_he?~/Hb*!z8gjØiC85:|5 ~|Ls]B7P3) W HlOW%o[EG~4F[5~?-IMM:E=60;_M ߹s~6RKqvHGBNaxśfADOwZc0hi>nښl]\2k4|bS-=$X {ݽd2ԚAaϲ_J &Oa$Xɶ>ygHCa͟`*1 cmV#PG5PZ?Io~6=ʊ/6AC0Z ADcFCc|CX\1БWco;AR|ZF4oU;td \RKX"@zoS }qksCfqba ӱގ|{F&{ڛiWjSLJAĝ4ze&JrZ,ͽ8Ox:<:nxZ]՟o>|L7k.:6L],!ylI^[B"o1"y5ӕt+?܊-O8=-sgji-wa C"k3ßr#{#k%d`=. )s4($/XQW2 aįy#}e홥XG{\Mħ7c为{0`wou@=xE7/M |ȟZCR<&KEi*{_T2QڌD}诋.~u:` dwtA?] |@,PN{ u2ʱH۲`!W$ L5Y}P>qT(/[ʛKR+U<ȹ[X K AĮsL,+kFijDkN9 tg B/W#<cLЄo{ \'bUN!.M}hSOx29XxaEs'9ApجQIwB866麼ɬ)''%pY6ukȎP]lZԞ՞DwHWg&}\F}xAɒj,}Ȣ\}Թ2fg"}}>nƉď;xȟ20S_X9# `]+qft@:hl`>Nz)RU])a/p3MCoU8Z" B}? 0Mv3{RC8ή`>Zc0|Fc%}ًpetU XuzsD^Y66u FtXJ_!5֖:H3_ }@Hg<p嫖 {zºF6|CܕZ(j$C+ >FJΰ =W  jc|ZCbD~MMI\;&Y7ZGr x[& aB`\Att/~f n&YaM#o/Po8&OǙZYbwG4$ g;oM{0 fΓ@PGZw|\6]=+To!ɘBGt}ݝwt#x͞crp΄CKhWu/K73K'@{ [6& >7Ǯ~EL0w0d@BSt -$ FVx2zi3ǖSK1>uZ rl]l"&@~ñrI$Bkengz&=>I{J>O;"ӯI%-qep뜳~(Gy?<o\> :YH@ٹ0qF /_gk]zpYt'߮q&̴wkS N_܃KS=q |sP'/ 09F_6RrNԤ$ʷK+j'/k6# obXC ]'iG\ʟYk/Ϻ~bg98,M_.N4sQjGɰY_.}bbL=+*rJ3{ DVwP{jt 2v)AjqW([̎9g{QވSưT`}ѵ7 TA!oi;sv|̓9O0<5/7{C}jp.o>S)2yG#,!pWPYj29SILY%z'Ncg2P/&B^7ShTL?݀6 lAΫn<# Ğ/ ?9Kd߼\/Cpߧ^{{]1ho/|OxXħsuXWѿ;Vw!8 ]IO|$@n^A +lLS>U_+t1y1ˈ?ojw3t!Bz+vP# _?Mཫr^kX-Cw z\3ijmnk&1Q /$ŏ<&ԝT-~^l]23`LM{tU[~,4SGO?]#ϒxۜYyq u2߁ ,P{hÀ @>,x/,P>]? ґcgO$\+]s6>oif*Iٷ$Y2:*~D2yN@~^" ~o{|%"c _0mZo£QbhTpsGUIj4aG<NGIB0urN:$4b lQ4^*?^թiT@d9wL>rwiƾ>+5C^dTe`"|>(2>7ǚ#)8uK]jL?N)})ltbal1A`lP _Wȟa†~j+bMkEztsU=yqV0^v8#r kM|_ bTu\t-dsޚD^~|S ?̿x!L{Չα;`Jt{#&\2<}zts%R]-chѽkm$_άں8dg_%& KV/=LX9#Z) Eqe߸aF_8QuLŵk;>vc̞s{M>Z~ dΪoryfW[M0|w~EAl~+NMk0ӱN0:kcbMguslC̞W21r:>OyPm馦Wpey~qY~Ṷ h\g/2>ڂ{̀igΌ'샵"U1t's7+ߙ:U> '䃜7'†ףPQk( < ;؛j5>b;ۮՄ\[oL nBq@{l?C]svD9ft3L_'l,8s9$4${wܕ6- O;p;Ggl9(cgdb*hzmY;~C}S4CQSѯ:W=vbB 5tcb| ؔVR3?ܾI~T+JCP~| >!6ļ dZ5/r@k&$I2W8?=9ZF'~u˴3e ~8dGssci"&orZ5xh5J\tֹ\䀠x.@v6h/#fc/#H+.6/ātP!74W?0K!*"W? 8Ҿ,)A=LTF&S)nH QODSAh9$X**f|=!n\>V]n=7$A kϛX`ӄܓ:T\cN!4AKM&7֝ |o-1:)3WC_r_p *Fm^!+?bW<>PDF_Z5F:&R 7ߋ+@7,0O^"R!rPXgCcڼ 3b]zO+:Ao$#vjvJ ֽqmK.(W ]I_ހHd3S(sͻ_xޘwӏ"Q|\stXL ?q<Aw@<\#Mj0;:|2ZqdggڹꝌ^M;:-\ea mk{1? H5ȧ~:s废3ٸy~s^1/@pYʯʒEsJք":7^f &|`f t7C_C| q+az@r k^3]$`4k@f@A!7x?Qݎ ] =96rڳ8ȝ`^)#Uj7Ƀ \a87: MAJ Tޜ/JNk,grYb?r蟣.m}<u>q@}C`i@3!@c~p(̇uXxY!zT_TR"nv(b2k9bN.HϷB DkǂF ÞB`(tl̈́4| pr Ξjwl>dfgz o/$G 48ApX)4+4~l&Uj3q5{+mvX_8][ފfVYPzK^뻀cC } , ]\&`x^^%TG:/}/W$%2 kj!? w$cOsL)RA p]QB^ŭ(BQb t @L(oUWHF` &\(%o4|c:Z1#^t>gUv1t:t&F;Xn3[tO;vM~mkbxçvwD|hj{8ߺLL!;UlUҮowO ?5OpELj]\Stff鎩Iv&LU2YHЗA߫,O;{?OMRX1^A:J;y;C?tdho0,@Z䇧|Q&W<C/ϥp"֝z:ɺȣ鮹'lNtTD<sgaU TZJt< 3a gO^;iU!1,ڰsV%=ͅ:-]⠎xe߆vy! /c\su 4kJhTHVM} {.Nm:o;7}#{_b?*Qe53=r2عTo2Ȳf38?nh?Kl_kB|Hh'= `ru% GɯT^|ψGji] Q;{,@.Gw{C| ha-=~g#sdzEX@g x 0̧=*M"X k\Ffi=tkD*zY߉mq3:s 81}Nb-*hnHLǏ ~04??!ֲP|n@K4؋_Po6SJXbsV;yhJH0N pZ@(H-Woe-zC@Ab@%^7>!0],p*1*l&EU\52Hs]`ŮӢ'7hFETTD DLVD^D݁((Jto>1fgewA93s{{\ˆVl'Չ)y?Ezoj9KbC-rCZz΢ouE:tTg|Mc 7语);d$EE{ߓ.Z+}{ĚُԠO0m w|0Ԧ#|ﵟ~]é6s>&Ғb ]񅸓X/![F xWwNOg+d9Ur0F겫FT [{"ڡQ%\?y68Cمx ؍ ;D N? C]CWGⳳ9"}E/=$G@dk$K@ډ2h;)Y):f_4 ;ramh x{=;K>X3zsΩoKc93mCDV/Z9U`=O^r΂Y |7f&VYLךV*U?rCJx/6ǭ8mV!D1MI4!D u@Rpe~ 1[p{QE5Փ*3gJ}\_/ H-!؇(OmP$ssL-rV6;]TX 9vc\|@gZڔ'HK]zY:~"c"&c}rn.#n휹ةT!A@hG]L y\-BU^|SI\DM5b67v:D&_L:>}\YMTѻ"( ?nйM6xofg(;;&G1RBނ3#K0KĻ@xEo!G%F|6_XW3Mm[)ɬkYHk@TACH`AAS`E 7ZTM᠎ofX`*U˜ dm "b=O˛)6#P0H7:tVއ=-/>EB8PT4xPOO-SLJ}}%#99*A;XA`7㍢8۷frRkhk^t˝3&~֟AR n xm/Hfl '~o#rU#ow]d^t 7yy荑vTu16L}ѹMٞ W2>O3RgG a]ﴷ,c62NQo=>0j׋]^r#s قk&ՑtS|ONx1:ܩsiڀ[1v}ԷdtEK%Xs$A8A8y.koWI5g gR> ]iܹ߱~ww Pظ6ް~Ns܄҂"TOOc 燻Tzm68,Q9m  +:.2c1Ƽ͠Gx&>d5K _Gc]>}Mn_ޜx!5Hp \چ Uԉo7^{#/g]8l~tr@"`2Y}"-'M)@43Ϳ,* TdLޢAXOALC' k o HGS nٳ3($/]/{-+k黼'ſXg,S⢚s6FbFm3 !{WX&E9`Q+UT4節{/JZ]NUkyM0Gzб 祝R^dz9;Xp/$Z߹fȯ#=O̦Y!il}TXٹCa&VL0,R/sǜ:fgcg~drLwcd}!j`r?O3mYFؓ-Kܒ}/W極rg ^:_C0טm)&Lr:d2gP [`:a'a̫/ &&(R`sl@M.<@@:JЕL?#>U+f6q cX-^MOG|L"hi }v(L 3jjK8cb `yF֔ ګ?/ h'@z2xr=3E"gmXX.hP]$H'Z߹d>k䫷#g'{)l#JM! ida<ɜgKN"9/LA #;5!7@POL\o+Xr|C`#<l䌸* ʁ Gk>>SK*L މt~%9y̝ i)!#_&NtLVda+{ :>eQ_: K ˜TKG<_ m!t=;6ӟ2;1=bk壚صvM# c1'̡>x?e!uZ:J,LrxևWcX1 Iy!*ļ-MqWP/築_D4:Q|t2C0jD0-WXwmΞ-Ř\LOJ9}-o ^"rxz/4nڞ鿅m}\=X' !Uo`s5tpKdo<4;xKÍ!yjcm>2g#7`AEGBջWgۭ_1| WxF8 DX_޶N gMlѠ}By]YHM`_m2oq~]0y}U=.#{t0jBDODoçd$ zory-\{hou3fA:hjsvG|G_aK XYu ʻEYn?oX,y;\Ұ}+U`3(2&u᧶] t^KRk=$TOtY{=&p5Ğgz/sBV_ÜR5/ԫ/ۺ&md?.ɶ-42 n T&|O>GpK  I \1|uzP۠dȁCRo% $4{| X"Z=z2Q&@WC!/TAd}cAGֱ@3 ^ )ret 7fe* 'StKHkWP'T<N[R rSA\]#/+;bFhG8K:~ 4,HVO~.h 0qwq])8*8N<_aj,@(U}l^.[Q~oK`ѹɑ$ 2'PGk^hK9|s|uҌ{-CQ8c՚HOM`Sg :0lG|8A1Vбp`-}#G^zkvm(O)bl&:8Qt;+fc|Op*9L`21IO I0f'0 ;1'ly磍Xn,u~xnSem7 K]SG]sf݆ݶf5r9e4P'd/#}%np஍{k /[ fČ5xo;\baكE5Q]0ݞ~cˍLlD*t>vO2O`5}tuZnod8c2eW+]hnqʚ"X곭]-D3z5OpUjj!}{dgWBPj <7@@P[p.<(!?m=`?,o.oigoӍ<ZW}4H,@:0;bQjUSo.h J`|--1-.._r *_LLZ~G_sbX2yy,rq$%]-^̉ 7?||\ r^GI ם罵>~hEĩOlԙɾ5'_wDv 8߇ci@=VF`}]<$A][QZGpcdz; 7'XoCSȍ<ޱ(~4/jM|h5(n\mDhiS)N=#E2^a^n T4]S] &:4,yfDA]X.jU,An3$ȯR=<¹Q#6gL2q ]~b*X*䣂bl;Xk֥m cΝ.XF¥X`iAk]&HoG *|G$b1C 1;|5E=]Np12g.|V=ɠFwJtDA ģFJF{;AQ_(|=#Dͷ^:?u. ;,>t(yF6"D蒎M֨!|BbTurkwyhJ߷_!zRU˜<@u 7f|G!_p׸mc'>;ڒ2;8ӄ|=4zoEhg}",BQ.F];J/o ..  ЀOѓ[ z=1FF`:ҡlP߹8s 9k}`|ްR"WhyּSo8ٓc) W+3}*^zc6AAӝa k|$De=y돈끿Kb;Ld7f46/Kn\4-ti`Ƈw캷|e x^А~XPM#4~/(/9eG VL ( ?_"+ ,ծ.h`. Dq| b${7Cy=ԀtK;;|5oܞ3g+[F<JmHHᶍH/|Imh0\h z*u|$T[=<)ʷ g1aijPkS/3H5RttAC`U.9 Hd6Ǿ,;/c9uten&?\!bo{>$/~T;PtΞr߹> gh,֘.|kN`lu3m:U\+gI._nvHo+JLRbafb6OZ+MrL5c79i]60 !Z@*=Ep:ȘZɊֿ&{5J;`{^?ODWvdS<8 EOg[\ßg#+{ d*<}zXu$ \t#K* ]Mwz;5mD M3X/V]q !>]=̠Vܗ/~F/E΍XmrԸMt=BT 1L'&h ^UrB>uf#4)s2e*xec8҈x  ^.Z z(Vȩ L\WSWCǿB'c>Îsʕ߆< |Ou' 6G:S/`WMd@8,0VO0S=vƿgL1\)9y?=z}&_>7\ԒFt ;Oo:qTƩs?9zj{.n+hҕ?3(!['th1}mH^::Qх8~&Χq4h?g2›BzyHScJ)~`Pӥ` 3 #Il"h '0g1$qO#*Kϕ+j%x7 Klnv6جmyZڈuf[8I=|73ە2f!O8i,A 뾑H??6>\o7vio(Z`9,7q ez (&˻|CewtPԼRmu>q7!aC* i"(-M%XP3swG|=F3{lAn=(lWkyâ\X%>fky?fkmAUV ap1}gkw Ky^K=cw֮/5i RGǰn1?!vj4?z+Ǟ^Oί;=A߈c ﺄ o#HW-wIrb &{KKbv^]0)((q:` Jj|&Hw >d55nߋ8{Rl"v.eR'6k0: I[`VT6#.X TpLjj%zug~>Cپ.(f ;4|ɑFgI)#~ |xϼ[לF 7-ua^٧gh+z_5jFiS5mf[AA](WP*x?ޚr Y_g$Pl8^78 %B谽LK49štե ?K)$.=x,A0v˜': cD`daLArcQ.վтhkArbC3 t(40*J:.:h^ς8>G#?z*@I6ј{n\sWzսJ~o '3ٯ&-hKy.n*BTGa{vWi,E*2;97Lc(AN`l电]3fU⍌Ѝ \6'c]G{t Z傎S ^$Ab>u0楧3Vɟ__K ֧wQБa.921zZ*tάЮuuTM(~;9TA=@{UI1mJF[,[zPР[J|]E@3t v7 nGIѱ kgkix}Mܑx\3/ q/`" il&c%@tc(f3(gF30vY* 𖀤t$Hw~y5غ%vc|!B1긏+.`tK챙=`uҐ (PRᭂos[*V3ǯ1^&7+=yy妞f`5.MG_sg `S7BR/(]N&DtX[-]cv_lאڹcgq9o=m(L&T<`m\kh]Q)g\m]oy"{=pQ2z;* @aAu !>,BPAw~^j}5 ֯| =|Go"cUF=d ;:-,/31ǾӞH;|btIꂒ/XK`[͆KyLju&=G0E@.hb^_.efF^-<ا fꌙn.ojΈ἗3}Rg~ƳUKIEtbnK{cby`MIc[Arh!H_ >K{s t $]4ا v9pbaiPyk@.s% 9I澖ԛlz}eINw\*N5(YBC(sW̶[ʑO]EM獰e^x˽aPEvx=t'{Ӵs<_ޡH>u@Qɗy ocif-Y.kߣLaWRj03F f*CS 뙂{3B}gks9ϿBޛ/kTIti ŏ3); 3MP 0~9J{hyё\B˻*ȏv#AB0C-Mٗo,c9 {žݜ3m0:'+7%)עElsJW^Ni73ZSXA',;A_r6v6٤.AT.~$*c Ա[yYT_p>}O!(yy%RM%t ~x}(QV gq t~z;eOB%0*?{c[TTkX+ϳtf?*o *7죲Ѕ..9HPsU[HE)DP Wd՟̓YXYs9ϺZ#kmqGrEk&Iy?d2ϙg_2@w^%Hw#D/aT *.5/xBT?,ߡY',ڵt}@[-6R"Å鯬7dA.*/?QP`m.}KzF[h͔S輫]2Sl v{h"<7.;RG Sr /^Y2YD~lR`_m|S%i[CV0aqPZ+wCU"RQJ$%yo*!SKhHG=l/Gz|2s:Bq^=kHQC0D 7/< 8B^+o9UO!8K`+_N:B>m))'$/iv5(:k:f~`@ZsI"`Bd>+Z||:ٳn.(Bp~4^v#xa(b,ʠH:1n[̿ޮt9[Eͻ{R3KПY6؀j*yÌIm?Q>3zOFCA()5p-vg9s!6 fQ.~<Ǧ1<c Fl~M G l(Ё-ך^k=*Ϥ|*y!g0b4<ϙOlyiQ/qe3{X gћ9BvoqϲSÙiCP:O: t^&_ =4 GFNsݓ+ibiF9"(NBwz_5.^A Sr5gT k4,"cq< )rkWϷ1bx*< +~~b~yPs-3>OK X”o5)U@èAx>&kwI?jyt[+V޶*(3.4O:qYK6 *L6|D.;~ Ubխ`>+H [!؆iWӮ@V#A=װvڍrfTz][C:`͋>1GC`*ʗ62}!dECl6Eтu.p?sDDψ"lq z;پѳ}I0"@%0@0 :6bakw<,Z~_sk_z]ʿ19O]߉w2r _olAY]LO@C#.:(=C6e={mYhia_}ylC:``co\S:oIOf# (s|&:%bGQGPbNJw'"t=!fawȻI1;M[ H^ j^_R[C~uJ' \Լ }O±;o ,A:D}_l'c-}Ġ|/Z%?R[Jϕ<|ltw nyOfFتÖN}#(~ŭj_8a_ܺo@^.<./k:dtɪ88edSp!V1R ^ךNK,(x]C01;n-S ak { 1~>ߵA%kI5Z0%;y$.[)RqW&L}3#S$S1K]kS4αk!9]yo (DyY; Eus~'Xu ݹs[94\5ИrfY[I~jt]:_@ߊѦ Ds{ u+zb|?(4k_ϥu@Vrm8Q&o^;goͼ6/Lz&~ 5Y ߝ$3Ǚ %g㥗ٜx8gWOs~]ULk'A>j%(^ bD-O#8[-^J8|4'] m\v`9]l,il:k'qt`LK>5nnsܪ.IZÃM.s+yo%6<|ʆ?\,H׉\7 ^Yq  v [Y lɓ(Z}]!S|T4m-&a O)O([ kb5:?|ngδJ ENƲ[o"_w?isCEoR؁yG[M8[εJ=q[;eHKgmV?o-Dob(?VP]+ [!gzN>a)| W![jcNI=b%:-xD|Ao+fv8A8A}/6|g>Mwj9562fA+mʪ+H 6o,ft9%KH?Z50:HUc3$&4}fƨך <8N~K&fpYBEuQҘהĥ]TU{z哳AZ;Lqj1@1{ƛ-X20P|3M; >C0u1K/>tDeqڎM'.PʝP e![403Gv-A~id\t 9"} cZ&z`{ѳi N2'\-r2MMq7zf?.5%'1g.+4Ǒ=wBg{#RvRF;ߦl;2iAƈ`ć;]ʛǩyo#m݁|`Y"<Z&=٧Uޅa +;?:`6e^Ke#ӂ(w5FP}]0jq}R9d%V^bJa6ÂnLhF;"gs^}(vlvFo]33ڦ>]~Ϣ?MrL>(ݪ ^m\g7cq%g0]f}OG;yE?doa6KJp>{]k!3()mm[tU]E>'8`TATxw|s]S÷!5$=,{ rePi]PC{S@ U>瑎ܴB ѝ'AGe 鹏 ] 3g3yۍ>X GAcP)xVTك+g¾n> #EǙ* `@اW'q&^&ؽ$}SPݮtl"8]$Ea/ |q#"ͥ$B9\. ޚw-9p ,> s(d.E51^D{$;gy,]Gt$OQtȒCxKB(*!C;'˞׳>7rUd_aswdTla!>&F4se)/ c^jwztkU{B F6ǹ%o&Ov3]Ep!ʷۚĥG9%8@Ϛ=^nkVljBfV_(OekFz̞ؔrƬʛ-y=y3n?btrc\??=Yrv{n۞]ig1:б8jF)y;{;>+x/z{c3?D~A~ ,fet%ו/_2$uuEN_t|jg]g$_Pnd\[ޔV޾p4s@ǒ'N=_*V:5"Aq Mh{FἧvG<5Y;Cĺ{3/|mN W&-x/Λ"Uu-V9 ʲ 120Z_,9FlZߞ\OUDuVCMAXs SgO. gU됯~I0rYl>\ݼيcH#?+:-o ߫ 'YH`pmf'$Xg %{CxM=ƅj0bzN-=/%8M%b?WyNFhE=XW]YHg簓2p2ңsѦCY_) 3D7ߣ>ic{Nj1ѷp>[:VgI[o*{f渾T:pt:!yʹS_:oIlۊ@@uBU=ud"Zk\[#oG1s3, XcތfGs<`BsE,QeƱ5UѶÓ(GÜzk]3KXXD*CP~xGsK]wQL+؜ho&(]ST]>_e[#X;!KB2ܢכOCaYGps\Sw2PniZ$EW+V⾞mjV[T!+x N r߫x[x.O4YtvFB=%~\An=(d~B,?; 9jA[ոLI=k!hJ.g0 \':n++r}wI+l?qٰZXG0b Byh*o,*c~+ߖVV4֨=K%[p_T_^Am{> JO@fc&!KNd˜7[@s <$HGmEPˑ~ByI$hN]~ [VO۰Tx]I.͙J:\fIp/gGp-O}prZơd}.z.A5Px(UD pgK{n5;H~|'9ߏu717wB3WFsrnIkK"5Ti*KKZyۢ[ks_RTQ q@:[ JΗH觱.ȥ(!yuWاggVϣH @75l$7DTnjOA̖ ʗu[)P( syKm -y`T½Pϟs6<~\`$89|#j tP2-.sFyxX[Yʛ7#OtN|@nasL- EEJoqΣ<913b2)6S' *׽m-x&HE-Ǯ})*÷6L1Y0GaE31G>"ٺQه ɥ2WfA:xA EN>l0iftA(okv{h``dJo_Ȳ}qv5a'KT$A"HuL~=ᦽK8_D{&&%?56c'3Qk]Gjk򝽣~!3!}bH>PW7%N!^T'd`'jvj4D-ZFA^_Apy 2}X'Ywʇ.VOv(d3 dv=GO -*?sf7R)~:'##KbFtfHr 'B iOpko_Hx=6+-CCHGuZ4`iҕܴqI\H0gCgM^Чf7a[o{0Bz"FJҎX4.{wwɶw[lSߡ4h3PyB5?3-]h~֚w([R3Ad6҃`+= }EsX2M~izYK5dU &^/>~H?cRT.g;wN>394ܷDYX# 4> }B$go;u8:b\YbrA4OXs8/z}`y|W-O앦*ۯxֆ3!WW`YCGq~#t >a,_xh&[ӾKBב},}l0ϧ"+5@eq /҄`S1LƼ,1?@s YkMM=r"sW n-Hy|DSԼGHKeo&UOz G%H=ܟȊ(oo:\/ɨ TŘʠ\ n_XJWx#WY>$T:>88!Lw/" WBWaxw{ 5G|ukA3-OJ2q1/ X8F_h&3b8='l 칠vb-_0 ӣ•m ]Qq$;l{X+SzM¾oDiٟΊfWg\Ӗdn\|u!|(bx wvN{rd|Kfo5qws9/βx`Aأ7 vci4ۤĝ!%Wݝ3=ں97Ml}g3>~věmL}z~M$I+H:5LF;y98)*>ݽ>R(T3wg F`@$#&J0Pm$hm;.^뀚]4lקKhP7F_!*:A)3,KlqG(6^9w~)*؆K:S?.Zq=~:;KTHNvI_n^?~ICϸ(TSbohT3i|h*KAvOōweU5J){\[>ОWJJ*Y2ۇOΑu9'h4¤#Bj5|YU(@ j/`NSTdlj,B: ϼk hۂ৳voxy y#nvWOR}&Ws%CP⹣pIK)k„'SVlBc/αG C>f줂Xb<1J`0 _!q炵W w|דpvQ77 |wj@_ %?\K#hN_1@N9D_R>Lԫ$ 1)Cؿ޼|M(f%θg~ഷgF?VܫuG좜 E`̛ɴ./˝- PD|7O/RnNk&|9D_ݤ>'M.!ZWQt;8g n7/g z3S`+c`=uvho֤1tn"ֺX{orEu+pieh"K,Nk1X`f %<ۈ'H5hlܹVb_;Ov:J莫q'(g _%p0`;WS7\WO)Ż- uI7rg<ЈTe3;0"X[bgD?|d]96;ÚfCUeIPތb*u[S_[Q` C=5BP+)0xG:G38V%6nCpg)_%ETF6WOw<9z X@$p,ҐxmA&(hTΘC?iK::yѨo Z(`5 -)VN%qvL#Ӱ:8S:E+Qo,as$qPKUD(h7VIzM)xRG`EnFQAj-\;ԊqF䣜I֚θ_GG};!R#0y-)K-jW0{?ONf?ustbn_$#ݢ0s!k49WQM)r~$y}t]/_nbjϘH!<r!&^ٻ/&w ;Kt;3s(`ܴ]jm"lPF[ >N.Ff_w z^@A1X`/_qW\/p2po7 NGP1zs |s*v2o0VSO9ST*,Uk0ZGOPL>>e:#>KV70x5GUrYC,Bp^ yW] ucײ0Zy M'QP{zAr`;̫g}ه>]ժ-4zojoܜL5x[FS0/sR?v7 @*EIxrlljy)!@-p,rOZq(\{FvA=E0ڟE ${Kp3e-dfh[9̟CxG060>Էޘ?Ru&5rRܣgWsy2`Niܢwh;Y-8F7~!R/ &pYOogEZ["⼝%iP50:Mw>~MsIw:bWo:v\!>Q2S^0 c>yC euicviС|Op{=zEz﮻|xMEgC ȗtJ4_|KV # 39uռoӫyLgŲ?im,XߞtE@R9Ag n*v݌V[~P.-sj?Ѫy$s6\v3H@Y**J|gCEO/iuea Ѡ?˼5zՋX/(F ҫΆީ}MdOeW}Ih!p7㟷R]Y ڮ֊/V"=IGGݹȡ`"ߥjmw"Om[ ! ? TxOY6wIEcc0f`_-ooduՂtu6TrS~F'hTIֽg>|g] 1 qC{q*5C0spk?y\P>ۻ$eOK|憲.p{Cvk:%*5CӺOZzDΥ<37 ,RGVxZz3qeD6!{QV֙ QF(WHZJk=R);:!Ft.eצ~̲HAyj =#taV%,o"y?dWpu|VY!8҈y=y}!љ/b\sr W@+=2ڳC2nՎ pq[7۷N'yV[稗w)K9X-a߫cT.ޱR)6)#}>Q HiJ,0{fm&|v;0ǰUc_ACťLaS631qί&$+_T9y0l +kW^#:3 "Nfoj_/R* ; |I)$l2i5\6m?KSTV]Јb&"T&uRP`~;&t]-.q1t%6=rԬNTgjz|{13 Rx+s75^*p!^C{ [f&:@TOI96mzxۙ@>#rvN:V:8rw#N =T' 4=;{жT!?H8$'-ѲaʱzћJ>TVr Z?1Apx# F}ip^h,}} TB~rRYIJ"'g3c(\Efi1xA"i_PŽ}\NY%p;!w*54J>p9xϖ _>C=Y ((N5B礇CB˸c״N񍖨{ۛN1k/;m2,#j!~obf uw Zg}5pC:6Sçoto[k>l+X;~Jt, O(E`Q: mfN-/Bҥ?C^0 EBW H5vOb݂۲ s[Q^ePV[Ms8 c>*[exI{)!xpkforQV )!*.إѿn!8.FFG0AMt(pzlb-ņM+n(oT S.6_|+STyЙw(:cVӠ(;uSNJY]^rsl2nOwK )DEb%9zM'@|7>9 k":Kl=ߩ^0ƀ%)Q1zqZRb KYr2Nqd!;Z֑S[XnNUs:S7qRQU` µmu6.G1d?7XHf*\/ڈj.r΢0s ҀASZ*" Ёl;4 y8nx>݂ʂrZA<^*?G^L\r1~dt8;ZVNyWkΥ|–1곆W#̆k_cܶ9i ˾".Wf H.H k%U E^$r6W X.Xoւ+7| k̊K2iӁ8^zjL5 i:ήݼtTG0w{ H,xb#O"}5F~KP08Ap ?Ip} Z FW V'%ȇm!~=%,W Y/0?XnAA# /# AԻrW^/9X:Q>Wn Xr (ޱ^,9W> 2!lRy B+RVm1V?2}~@n#MAO9#Igg"};O ut((9%8 DsNX:Zuv PUV"ٹ)䗍PNҦ_(١lٔWIbg:RWN9M?qw/J?۩g?lw-zq b%ȏU5FM5_ԇ)}vqF$J bSC' Z3ABqiX:%޼~7'-qc9Uي*Qq@>/%(3kd{QۥD;yPXAe Ohmxo¯,x{. =SݡR%}d(6_Dm 4a0uU+Bo.|cEJ3FzA;b\ ^'zX&?J3zd`5z~niO4\q/](?j?(G#rOAZ5WsNұm}g}s ?Śܣ=U%BjZ^fcv'bF xH'nil!Fk_⟎ 7~r!ۦ#|k ٥.-Ҟ8~7Ro@x݈*"6f_DFʩ *3 &w3褂z# q Pܠ>*2rs6MqM{5 Ɉs|-Km*CSbWudQq?1brwr / uC]ox0UjMRh 4hHO)3"Hgku1p4F2C '=}!XP!. xTs04&F*cKsjFCjˉhŜyGl6GN^;h(-}yX^XJA._ذbÊ x^gXp]M &萿& $ػA[n0AP] ֙,( V[9o9?߬;,ĸ0 wܓB~ǒ,n\H9pV6[S0 ~3f)]fۥE7n'~tSlDqU h?veJ X5/."} ob<V}ws\[*O{{:N ں$3}vR 0OO[_s" (L.],=w L՝ 4I,?iA~[/$B쨷i;U7_[[m0rkVi >6_KgIPɸA^!ڔ:788ݤ`=/*y۾#L7ZGɰr8owW+* gƷ.;.r9?P}NР 5EEvხ"^d{H7iI9-)N|K&g5>",jRk{}o"3CRj+" #i ^tl[uA>Y4\ ͂voW83c@NJWW<翶3Yw^M\ܨ&W[TvQ9ʿiAS _ZX)/BB4o Q$b+HaJ].$l|FwݞU~ FKW7ʊfB5ה!ۘG86ܺâYVjW<`y^M/A^ 7Ma.-fG=y%xE# 3Np=[`n-hh<-[)|$8K kA:Kn2`D ظTއ]0*$eAD7AmswLpN;9o q 7(c)LUc0əq݀1oekd%x{bftG@@W]Edk?P^Mup0eׄgѮ Vԭ%tkjDI+ĨcsTo742;o%(o4Azo 6yS\9~{5\+[1^bRѡe};0S2'x#ȗ/ ABϕ}e KiOCoHG 1CJ#F"EjWps _>0֟~}G$wPxB}ahb :UaO/i1ıGX #A"zU"2~Q{oJA}{g 1SrSUA~:Qb1poi1sE`rG7QzmruKxg|Kֳ4~|HQ AU:)^dT;>> ڬ)x gqV[C-88չ& Y9wo~ y4,R?SƍoQoݦ}@FfԷ'?cEJc5cc@oy;cy>_9lr}M:wl%m`X#h7\.=$|C{=!w$p<&`L ^LjI/韾yv' ^UG|6sq0# JW211!l4}3C(ƅL h@ѝDlk5{:ҮT Ӫo\+y_x5**Z'x6d`݉x/ӳGF<y\v^>yv/u  wگD|{>~`fɹtxH:cOzIv~F[/ǝvgQ7e|%s"so9UӁxR)tCP@aKV#Plё$Le󚑂 ҝ+<8~3\{S_ A0d 3 q 4){oi-ߙ5T)Kw2x^F!\{$6t wEqߟi-I" f6|.xL_vBP,|ABp}0`~^2ePU{ =f( KAWNA\"_ &`69], A:a-}OdVz 5( &9|pfJ_~k ɤtP"jʤ/譑X,51.) (JD& O$.W;G9_ 9p|;Q8,7~pLJ6#!._9C=owlf;uvrMr #u>x0 fL.%8gM@27Zn,ΐ_}GORRcCB\d{( tGڟ=L~CEJr?Rn.YvoG@  g%iׇ͂`F@=/LR7]tOZy RV$m{1CcAY)IyT=@g*G1|maa! ۣէCZ ʫC-:_WA>-.{n&#p C , c`P 6?UΆ'(sj|ג7׸XqyůwV O|0zOpJA]Ax ]/|ahCQQξ A @1]͂ Rw V f 9PP=&m(? ff9I4bC|8V+{w {#4RE|%ꛮlL?Nž%@՘^"}'TͨໞH~HjG'`)ݞ6{]5B"0B_]%kwEf@Ռ@A/WS}z \eCN:T^xJP>#>}N00d lPs03'@n_{JE|/8C%ê&-0>z'(NjEEhܫBOl^ fF%{Д򦩳ԦbV@.+HlD)J2b6}qp'7 Ts%[3 \<.L NA#/w"%T !A|v߲adoxkr etS$=$zs3Zp"ӓ?^L]4r?E@` ]"p&\Sɦެoy_Rv7%,Ʌt5~S=Mܺ~;XA>,3ݫB#6:Ĺʞe!cf %{XFn}f(T]d@I50뙯` SsEw]Nwl~3u>_(O Au(biL9@IDAT/`)Wp\Tɽ9FZ앋Lqߨ.~2N^d=3#!|o7`HU8|"6|#qLk'걷$!m[J0B.s:3@UfoEJ~[\> #Ͳh Lc2zkձߴlqCٹ.mQMKG~]Q.vJ੫".]ޝuw=Gji~G[_ +ho )(&EnK"8YAqK0A:"h8_- ?"p??&U(=,M3辀xۅwS3|uEKʟ6QӬoRS+DB{l^)H iؽhsY;/LXvuܫ&^`B#N >ev7Z@9? ASK&Jpd3\CCc6B.iUn':5L>hO̚t-+FJX7Oj&>X$Xn&ڄF$|oZc]M`ߛKF$I< YN`zF+3_a{ϱt]S\[kkǾg0/ W{@ +]u[{}ɹ~(PћCwX$VjD0 M& sm*ؼأpF F -YS"{ #"h=)hw}o`1v{؍Cde@wXc_ccRP"{VY;{%,~ ƹSL'h'+DU5F%2< Nr͞%JžLIgI4>h`_v}O8ӱ-_hu5pՖk!H)23;Hu*:ڤcy fxg3HGƇS$X#kt\iзIѧH)ݯYE_6MS;Etl#鲕]Y0@2΋x(l_y`AqV]PQvuN9K8_?bW.'FtO<~(" ~ <,0Rh1 ^+Bv`FHAL0_^Fl0Aa< VhALA%^o0xEbY?H|Ji_z螀 CU;3W%&cD\{ ~Jsޱz fy0u9Dluiy {>q;6]rr-A}-|jblt33wLmE+zU泗˴ L}9-,'j ų-i3DrM%v;{5m)S%h|Qȗ㗝M ,$HI^'p9f5tZؕS a}X~AVܫ:9=a+оH$F] 1x`?]=@6r*oF/h.ش~o3@:AGvIng,iI; g-N"zsՐku\)xca/CQ~")KAZrmOE?>& ]U%ےq+d3Ğ5RλwqI&YxC؏X&4[M0j?@kxj._&E1\Dxj5+w m'm Xx't`-,$@(8#>YU m7]U0<|wa)g0/\/;&fNMy =4{ou49ݝmñ;g8tKwLjwFg !pߦ4OTjw v5`bO՘oZ0m;@`a_z"?fǁfcҍ}))OiЬߌl˂p໦vYAzP'xe?}5z2  EK,̘-T#`?K  n:hCDxR?D dO6}ML:8+1[ Y ƖbOTH8Ϙ^řoݳ 6|V|@~0-B@G?(|N:@^pb 2\L1bC;ɺ5vnt#z md)6G/+FTMU# b[##dxH%!KТE9RS] YXzHxίH6,Wax$քočy ]Yc^bBLV>iv 'Xۢd:ثxY98 B;r'$FEnW?to"y! A^|$"K50=\7m&lj)|PP_s#߃%G0տ}8F4sŌF_2Z9V&} =<&<_m^[?ľ_N"jA~`ўzXS ;?Ԃ w QZĵ  p6%Y, \C}L L|;8S*,kK7w˃lu6Y)H5%x;3& 3N$l#x$ˆVۂNψ߰WYȧUqڴ(G#6l+RԓES~Gȭ69l'f:XNM{z*(My ~7MN_=joǧ_pYtoiol:bJOT5\;`ӻޘi#x@=Sj,I\LzA{?' \ibB} ξzz`iͼ B]|+3r X_HHkT 4N0.s/UrRKpoG^w""OD 9*K8Xir{^+h p,52heGx_I+N5'",(K V) V~\C$^A;L`xK[<8FdᔶҢrMQ6̈́04OK7$gLj>Y,΢8CipTN%GY$ve-[kVXc$vy0q=f}U3g݈|66$o ^c6d7l{ATsv}A`#uKQ:qR'#nHB{6;{8#տ LAyMFSu\XBo`ꍂMKG {}^ru _^'sDr^)\* WO{K!wV$i`JYcݏ/ӱ8 M&h{Ǎ8ZSB"Ȍ_ɟu船o I1bF@ł?uǖQǸ,U0WU"} RVPu8숹[0I5pUv{ >:16{sz*THI0R ?b\!G _Q.p,m>֪Q>˝däHdž 5QbGX "1/WY8y֚_m-{z#G ^ZC8['l{e&t7nh{9_H!]1|y뎆+`'}|R\e8[+x1\%E=<*XZ^plz? 17/Hrƒ)w{j/%qf2)S@ ,%!R*a2wC/ZMtmԠHVeRQKAՍ!}KHG E998;cl"MGnwyZx{(6=rDTӀ]=p߹!Fq9M?OǨK$uTYMIGSҫӋ60#AAzWcooNP8Jxc5$ 9Mf7Ytuf&Zѓ̠ލ|_9n9)H ڻ+?\ "HkP !zAǿ`{Am@ \ H!cp { ]-g_71͸PhK߷FA>yYp(ȅ/X}?^pFm6N0o7]`TSAR _{ %^+_L;}I&2  `v<҃qEYe ^A{F7_yds86ӊ|[:xmDkl ]VZ#P4/C{u|uetY.޸ص$7f[ [ķ}"`}#xtZQ\KZ*׿溟g!O/ISjn]bD%_8N}[ ZV{zq'0B [JWZ`k3SWZR{3ÿ!6,>lZh\zo1v|5ܩd|/k,-A>E=QP)0~Kn?r| m<'Lw\kaq9O8П%Or'z9`ϾZ`=Xn 3HG6\[Y'Ex[V1m)pگO;O*ަ}{ {X솓1d)ϣHARrXX.*8TYMz -rUE18'X:u֊L7fqm?&{D3v5YQZAye9 _-eneYa YgHΓ C[flRt0΍Cl7Xh(_-gS夗#U6A+['.nؙl$16|ڌ'!vnp%Yi|ΘEP 7s'M;Im0>L4)ao.@|}e X_W f xMH("AFt0aXM{e <uĢY cBބV{ϼ b`KP>uWOz|GGw7w R'% b#\ ,Xra,zEP vx`ArH[NN>FQ#$R4(0;PAcgaϮI=F4AhH%7 +w4p7$V9Sj!^o L`gqm>^zp_h(x}f`&T`0@p^2r9TL{]k"tr([e_ v߮>ϘV{*_r |oo_bo.jXCCJBnTqHɺLtC `{=#RWM'}`R]MBd~Up]Ϳ̬rA/m׻$pjg{ _*[=֡SՌ {S\bO%=UEDyCu??`oCK3|wA k(-"~+8_v!(9Ǭm>o8`;:_;ْ)\jL10aQh̸ a.jbaH Y7^Fɥ>5'/r;So8xSV);&w3[pדAeFLEANTqo7VAQ PPDd,P{7MZlM 8ϧ=79''gQXB9_ E#"ᠭ-%+uya+Ri8#d*21B͌OJS9̡Wat!tUb]> "f7H.d`'WNjmiẀnbA^&\$Z-{dr uK fXbX"=nZBT**k@x0F R 2A+xpͣ)Hz¥٤4=5iTqKsvg2w3>6-N+!x?8R}Ϸɨ[Fa.*xി;wV F]Jxj>zXPr`GodJ_j~??*xMǹ/ qgߔ/HP10D$:2y.ugB+^9_Uus z7td(Qp=AN5U\c^M>9Q}ZVOt&Dm[}_yv'g**g0BF>O*Rs_3BojKl[̐.Ⱦ2,h(ˆL \U(DMpj{AQ8уӔǘ/+^Yi;tgoY$g %|4޵֥? 3JS]Awؘ%i)ق{R|ƩF }(ezoЄ1E D[ g%$dv%kcp7PYZə~uQ14nD-P Ql{9[pb~P@x h$d j!a1Tl(X)b!S-`%rIJ*F;QT}ީ$ 5 t@1źt74, 01.5ߤ&qTr:潛CEcd\J՛t[%atn M`r- elV$A g??݆X  sD::y5vb 5*/Θ8yꐠA%}3;,Ax!O[{h5>A~0 V42Iw7s]b ۅE.҅;%=U"=|]dօN? f /' ׌_3տZCzkO_3CfmPV7 :=E׭ՄVxe{l3+ T=_6CL$ލv,l|/63m1m[煦SJGӮ`) ^{.u^=yb NJ @~p/Jx=5V9} _ʇ@Ք' ~Wɏ$SUl'0tNmug<-xE0lw vz3I`UsJpό늴ZiDŽV4V$yyY~@X#!‰r`]{\yd*_o"ķytdѳ*$P9 fr]Eb^ Q~cDNHlM; \}D*ӿw&'B?ߩkѮk\tJDΘ{ û>*pK6K<ڵp.2 ?n\\[jU]γ'1g׷/Kv+y:z#rO$VK˶z}?rc[;ԇcAD [p^\bT+8vM}^ږȶn^KB.K1?Ɯc^~9"JCbt;h9uai%d<|O(WF'>E?Onav̖ZuCJ[z$V6y5+o“R^dPAVKDIS۸\J2٬`8r(n}'7 'tl$CRC>H}i#H0a }^/,8QOG`?cr3FQч/w>CdYE# v^ }N(gTi_L *rFKO͂ jEu w=5_0}0.Vwb+{aٮIk ą'-<w/ rnȹ7dzKY*]/Pzv_z͹G3u疟o2̔eh._%W_fM̜+ }׍0%C0_o ܻň+hOtxsO]n^n"M7} ޟ=0sF@G=GR~L>qğӬֱBU׭b(rɕK..98Rcn X[)M|8]G l#-|p\[(DgP&/@Ux"''n'?!Y&H/ f<`{vlx?oᏤ#{[5QFz :XO$8YO~\}!xD;hJAsc\]Hi9Rsh"vEB+=hd=K=m$!Fȉ. : {qC9|O_1s!߳"mG'OM=+uR8P]j"@[E}(=pgI=Aʬe41ۑ#Ol p@Ts+d  .PhgtCN{HNm??JOݮf>kW;eb. -2_]Փ5c Vf# ȫvG} ^,DaG\mWqֻx[)}9tJDiNK{(u`<{#xt+o$m[" {K(6Ejt$5 md=\p֚3|b ?iO4g-(^Gޡ_g&g @&3ė38Ρbݘ|)kZl}W xf\7qmm\)W* h\P"R.-w.dv&9 Պ6"\1&tӥA?TP1 l  wrY_3F?LK7,< ử>V I6r#iіr6󤊓`MjVt-&t8hniI򻃩8ioNyswϝ" MHG7.HCoI-V{ܲg|7pa3_:s[ nXq͊8rɏϤ"CSn>#??0taD >q˗'^>/hg?VH}{6To8 _K-u0KYE?7⧚ຆ .)b+Fف|zdV&gBd^'Z$DbO?weVtJC fzN[A96U$dY!f1 GjzIf$;L/,bSj/׾'I:%'šNPRkG_3[{ ;*K-wg`(]`LAHGh/asU{*sM7R׈ PNE=&#:58uL>\J9"r; }*x\<[ \:U0C:B=xbCWp&?q|-y^Aq=5mh a#+_܍.\2咽/E$P@,'_瘓ԯ)zLn Q&ZQ_A&Qɕ1qNXOE+3=I_ (Q;j̿s \* w>*x_6Q5C0C00Z[<[[=ٹ?K'K ߼sÄÆɉ ~yeVe-+SҼ}CiwK!yJͺn6@wm[@7w?4z>}h-CLGѥb k caEY}G=J⍍o VL\[:-ʪWͩ ֬҅KLl9xf#(k_V` !ϿȊcG˦=riǬ0wQ-g G]AeA{q(c+4Z ʹVb.Uڱ[?5 vcj4>{H*hin#nAa޿Ԉ }c}aA߽X0?z<2'rn,%[keG2WG_[3!a~Vդґ.jJy AUTB 0PbOAAypa曼ܡ|w{}̫O_4[?*,0tuNBV2 YW.8h5<#}K3X`o#bˉ#ؓXHkr%RxP&n/h{*D%U~`W[e"؞oyUG n9uk 1i4fW=] RGpqu.~cI'b'Ϙ^Z|4QP봃~`jTgLI*~|!4NT 槤nnA/hcyo2^;蟣!7Qh!HRI.ɲ.eΘ暻E@9Pi_oQ.Gq8}H_'&/iAh՘ż)H#"7w%M w t)~7PJ^3 1P[`_TbA;`s;( {m.<{x=N~hSדxbw3-=/HO[2ȡVxʽ>1+Mz;7^Bқֵc&{.٠vKި ++ߋ5#8T31`@LPGA}܊Wُt?̽Q[-U;5w#Ei9 郛_w15{>ܯ[xC;^R ! V0 XС|^K3+ fT RlĒ;W^:= m^x`V0q_E}lֿm/7?YݣYm+ϖ^0s˅sYe>'I8އw=8 -&I|^!қ|f>+t"Kѹ)L,QV`Cs.X/ˬ]0%@IDAT(}ƿ/"vAʴ?խOg 76N8/à@otd#ĆZy]ByJǜ_M}n']~̝i7!oy g w3kRNL yi&N`cz7cҪa;.5knY5DYf3~xY`1o )߮J1Zҝj!=>7Pɼok - ZNKLL6P!k'>]#"ZB* T4wUyy zt| FhtC% j܌@uױ|MS)8l0t;Hp]%u$K zl수_b>iv]tԯlq~6㱧Z () A-HKD?y13ڔ5I! y3nmxOqZ<#hf@x$4mr3sިSվBw/ @N ¿g0v\iddzmy;6% p(@ji}q)m @xBHyt|ؼ% ʘj@]gs/ĚNm5N3ibl 68o~\ۼ?5~`RAJa;m+(%ص%,-J9%p+Rc~S,o ۰YAf;pw|9.,Ղl`O|K3 [yc!(qAw}Ay,K0قc>SepMi=ޙ{5{U+Mq#dc0l<]LJHϥy]Sä w/cӪu}Ʀi)k=>jholٴ0055W[i4-Q}jMz%kKok黼XUQzM7`+lyos&vlG~БЊGx"0h#c|_ K-o|k#\#{q`+SݹB> {J 3l!8L eνPʵp˕9ѹ{ ͻnܦF4A?"[le>ẟga;Po['5l!)7665a|J~(s ޻D|. gw>QdD.vqXtm]\O S YL㚩R^{%COA;6O_%M-i]N$# ,wsƙJ̲OnV;[d:C//zWH{8clB=&qL.,gv(2&vXOAVW"s:w"F^dO?U*LI&)VnFzR]gJ%n=鐚 S)o%ۄZ3Љ=Dhk9|#r3Oq+/X_c8y7fxFZYP)A>~]H5Xչ.i*Hzc֌|!6zH6ZJj@ǘ$s()-zˆ Z Kd +pKxgcnEWh 9;i S #wYU`/r\Fpbc= }1%Q1 BɥK}*KaQVȤN:W"z$II \jO_5,9oyo\41âTT0ȧM^sIi}{lzKP1 to3'V"5 p@tU+(ڧP: (4J*7|%!4dA8尿*h+tKS˼O_y! 4@)fBZ)=6LT=j]{?<5>hp*ܾm] ڸIz{JOԕk9ΑSXzdlt~{ZT>fvwvՔcmEO,zu8PkghA$aoƥc$`KIGk 8$sp:m xo͂ן!O WI6lx=V~ʋKMt.Iڸ]"nym?qb+,nm`yDyWhAf>hn6oM2xnu$ӬV=⭔Ie辿nCd^Q`KXeeD:E1}9\ ,LB#Zv?딂vݬǒc4bv=amLlm.^RqXJG ¥F^ZS`Av [KJV pB!_T-Z̩QqfR{,*_GsSw!;*N(2 2bQ*<_L})!F 2[U4U2qgɛq TTAO{CuqU/v5niI~۾wT_TƋ ›j'gKi"M.6MHJo+f@o+OxJRAbm2EG<0Y 櫻 D D[ L@v{@}D`_P;K"`r72O}fL ~6+I)38ka|6(fAG.xn%5=#igg}>+ 󁝁ͬSe ha#ċ[ jږoX?UޕPvg^v>{[aO󕯂ߟb{lj*O ,JHK{wCtX#~Ŷmǵ ~rw _AS4l34]Q{mlĖQ+ͳ" )p'G߉hMbwNt;oS2 O藿IiOoc?59ri:B0z X-QputqMo[w͞0 |QrWN: %Ə۶3r gLf*gyoldt{`>k?NPA7)BAy?6+n"?;W eK;J/)P b aS{o y2w1Ҿ[_b+_[0q`aF\>?LpTIP߈#=ki\"=rPynG{sp.K?ÍUTDIr/B#b/xDs?95V*?VήXzjK_opz\G-}FI3f<6Ɩ>_J_~/佚C^dYmgqes$ÃJ-]egӪO3Q., o\`'y7ťS ^,HLK9Z3Rцh^) HӱFo,[V-.#MB8) 4(Fzs#p=]"ay*C׬yaJs5'95̚52sP&]E#(ػ%;f$`[aWndR33j_^!:to ²}8Qo V a!(; g; v)kle@]d5c_eѧtz3B㚖2]sq@,J aԏDF=>NڼUpG ȔJ` usg!L|+d"{OԢq; \Rԃ:ߏ[ s =/;-ͮ˛&='߸[Bw'_ Ts";y9]gWw49OlyDpmke.{ԡԞ% uӦ Y\Yv+#4}gT}6ѱq_`v~z&&(%f88#xo(iױ#B8=jȾJ߁PE_0@ɐ`D6O17??Say& EJ%)]͚ :fs,#O|6װD~nJ[%օ֦eO^X k7ћ5X'(ƟF^Ɯa,J;YG."X?M. ]r/%|/;c"[kVrV|lV(\)SJ6,=>#ٲ!}K?Azm)7]#gd^֕Z{t{t"*FǓ\՗ܛE\̺ whRwA4~4Ycƹ\6v{8'?|5\$=3ur"/+|[EMCˬ8mkck)浙Wi^ ۮ*1s`B/&47j|!# 62@6/0hGs{m9 PNU)e^N%-pTˆ7"ֿހ`u \ >;lG[$/ŖbbW=a6d pQY$ľi{2 A7Wwd7D&x"KB߬i9ҶvLڿ+rh.I dp֝[s?&h"0uo +w24cάd({ dcܵ}Ǟ5p_F)dj!%x5]Mh:1'As48.8xNǞk]{͍f/20jQȣȎ~Ec\0| ڵN{g% kY-?oœ$IОӝ3R]O4NPç86Z||7 7sX%8)\LGP)0I=Mav& k4Izz˗n{8]S7Q%3)!ꍰg p7S]B8}Fr ? a/rV5"EQ1v jSA%om$>.{;_%!8*_B*cLݟ&1ILvbQ񤵦 l).-?1cr"A9{ <Ց[uL=w/=JfΑퟖ%\S=ƆUt;59J{e˫d'{P-EêXVE ]uX>ZG&]"}_tkQs]t5.v;+FǖgqHdMkz3mvuͭy nN-ny)\{%A"H DO˻ WAC)GKic#WlRZ 磍K @Y,C__~T_ٷ_[`>2-isM p(mv"'z"e,ch2"~jb[1-U3=HwSknV<~eL\PDfOť=үK;͏"7cO`+BW\//+9N=ƃ rdv|?cm[&Ndp>Uj@vkr %( [[ɂa'&5|S 9;zBezzy;R:Yc̭e>@ ^sފbtaK>M4}ƫ nЀg2VT/q& uZ!֐i1?A=9L+) <؅M^(f!|9,GD/qa[ǰ$a_;zoo$pb[F3rBA< `W/ uV 7NU|ŵj:6t Kw)8P. `N  ,0 \OAx1u\6N;~VHu&=͵NdJgê aT#H;vRGs &z [-Q OldANl!ښCz=jWNz3Β> uѪu&Ǻzktw^;pDJm]q@E3,ƼOcs@1WӀd|=?p^UݽvN56{c/}ɸ܆O&I+ԀCsaCʠ:4)y@V]C}<) o/|D0INɼL.5xÒBXGgӠ;!Z=z)6h3Ԛ9۝jkBw]RoZC HW'+7rApH'%ެnq~sܧ?nJ&߾VGMB'KI_k VzqOI*c.4;'zL!5ȟjKryzCpKdpѡy92HNsz{6;Ƽס.f 0b'+~OSJqxw. / Ct];u OZ&&}_Jvn[_aW'b `_x2@72(z֩Q++dS~}`:U\EnGXhߝѷqH8p/T|\gy*Be &(2QhA,4%v:Uqt.q6Rf$/%tS4uP'&y~YٛR0*w3ݫ\ǥu Xĸ=MlVM#т:NkY:Ψ4*,Bs]^!&g'G*bAUcP1C04S>Z`o(mNs!qֳrʇT&ތL|I/ݿIUwwnϳ(whtrt~ҋJp g쏦e֝W5!=zlܶZ0^V* dtΛWSl@e\uɚgRqty!Ԉ5ծ.¿A%7 ѥS*/ z;~ȠҮq9/+ە&h -2ZSg3`y&*@n"5%ȝ(e \Oe r8vQ^L3cɔbic띕KvO ehcOשVW)vAvW&xG lt r4753:IPhBʔ{f&:F`t_xޝ9[[=Nj}#U'H3Q{[t0Y%&ʻQVCw^ pjGsiUҮ4^Po:ބ݉ǩiO]#"0}0tև)>º>?_޶5 Ht PK{`kvLgAĞ!Bi3oERqT)_I]+g1[]cSw<[{bkw "%8Pi3V$BǍPBn{~<o`8D:z&ra~+4}"4e`0βJ̥TV9t6#g@o *M_HXbxB  {rK蓍&Ys)?B+m?sQ{Y2jp>C h!yF#/\;sʩc \ |]UyA$4p;'ڿ%i/ړ"qG& coEe_Bw\[&o.l0/4 }op>rδofHH*aO/]#*B DhF1q9w馓a1opq Z|lA9 #HP \{*2#Z*Ƃ,WV:\mdH E\F]:s?ɐ':TvIg_2g^IcoVx\ټ/`8d^*Y|tqFg ~4^twKTduXy<%tUYȥ*Tˍd>jrm؈CZWw' «m} >hcOo*ޢٌ"Dvt{ ;O>/ Xpߴ,ԎL?:cfP[(Ƅ[>N]'#Y/*:.HzŹվn`EJs;Q u(UAP}i"QsW8{?zntkw^?7CBVFO=Aw?ӟo~B@ Uy/_}:Z S B -xĥ<!x33B͌~&GeXL fWWYsݎ:}l [a@jUi?_DƍC~;v^9rlDj) k_I%^F;wx[rtmʛ!0V;=jJ a~c6JX;*x$=kf?|{:7;GI @O]&H  OGYGiaQ| %VbW7z;s%Z?V>Hi:Aw౷T74݆h#zq\4BSKnö׮K$ NRN(] ̯q)bGui1i³ z]J[Rη{mţk{A*[P) =~r|ǻ NL /_scI`'{B]hvUwr/`*$M (6ֈ F:WtN@GORQToD ڙ/ Ow vGZ`?S/FFwi:q7ɰYyc76<|,G39%:= ,,loGM=,Hw "4gb~y[\ؓCрsM[{$>p>BAx)@(8YНFOg +/qDA?ߟ;k aD P^sJqg7 1=WO[Gd.}t=+[ Zz؍hUQ\]=5@M^ҌTDzֵR/GFH'U6pPCDHjB5fD'})}+Ͽ}W [*O1ʾY0u BmAy( xYb0 <sj(擾p02=ly{DrrTŎK3t WpȯjoPʩeg3cRs7l[Q.C*_a>`f,F1/5?s_i*ICloY {6Ɍ.젉D67E]O庼[$p; ȝ@ gd|?Q`a@gQKͺ楑3_Mk #lN64B|lӐ[~.Fq7EH  Z &Z$3:&V'1:$}&߿Grޑ0xc- m,UXzɽd{O "c]NC8#a鄟1!&˵p RkIQk)o3a 9JzK ]@5 *Rf!nI omD.#0`}="[kG{6B3 Qnb C,xȥwT)\YB T%#C|7ɦ$kv.6E%|A>W?_ ,?!\ˢV٫$ 2+'#CF_~#K7N'nK /X!>ƸؤIe02V]l[P48%lBz^/#n (ICdDZ$݇V]Jz~M^֎l f ꧄]Tnt`R ~;{_i+X0qDh(iN% (5G(}onM0VyD{wOtvY#*,KNyhx]|79[TSzp0+0h(#cQNwr>XV*U1Fz̯G&}}/JIxu?/_BTgPf%FaX#=otNcA^ߑBA:_ݾ0Mo&ϸxŬLXôdg\U#idORa̺v=z۴rxQ%kMAnOo1% dkk3o! 6sJl P]I1k$E\i_\}?=Hy6#<]lyڔ%h.p+`wW d{5A{8muf; t(.!9uqGnYW΂aUhXŸnid'fM>蚘ڣ=8q&OȣqpZA=E>J|܉ w%WER.n^5 #o)Cgd?L#B2<<\ ֛pRɎ}w й[;_#g-GŞM'9ƢvpXU$xӡ/'g5b;wpRU?&twHb v7v+&v+ERݝ[3s̅uٙ{{ƩimԖw3;JJ~בZR+@-o$J>5;{){/8=ϣX3KڃG T I9+K7 mLnwpP w)f8%hjvR~TPn!_JΩ}?d 9ÔsC /KY d^4z^'=]\3\cŏ 4kWlsTv;jsvw$ƪ+ư1 .fWTdw$fHvʮ xG?eR.5\EUˑJVCSg't xz$È4x]net:xXNSR_J)}O5)FkW6 * S[r͂b/{e{iA8\00m+5u:6TPa*YuT*4˜qqH=Vp>֊ ^+'w Ax ۗ tYA=ׂRG|,b^*V;s sSQ|~,/Y]?#ͶK[ ?\#{W{(sM!]wxt8^z zv_㤿 ;ßpM[Z(>"HF /!rOx>OkՁhXff=FՀmaR]H1';ɾ <6kTh\Q*҉LSFQ#YP#'6%O.M Vҩ 5youc`nlTsHM$/ENN_rĴuy:hJ2Xu@wzp`j˜_@qd(w 6΢{E`Ud;ۙT&{FdE3d Z7ic]-k*8{("+o<b/ Rbc?[,}+x92\ mŵX)_zK+W* n I0wuy[K[#7GsO_wrW9oysIwuT; o7 9_Oyw_Yip Ï$=0U'3a?OT`8١UwEG(q2;gZ}/IP Nl+oc*!^P-B.5TWIf"` ~?F7܈l.yg4Ǚ#d_W!tlGR,L;g>9e7_|>^ _%;~$/4&Uή^:23דU* ԯ$fyCvmT1Y**LVj\ϮTwG$t iq 724;,wE\}tFAbPJnU$|C)&/?,=i軫N0\P!/(o1MNp]PhiuGli8$:C;(MyU14By@t1k>qJ_đ?p".|D ^<}IAʾھ[ҩ\NdbE,)߽p=1Mm3*rU "z@|Mо@DOףgx fDe6~W"7m}x ƿ5|w5[4Á@IDATkINl{*]HQv_ř \f`%C O?d`_8?AHq1Z{qTe$ \(O2~W{58BNװeggPpe:G#aIlݷ2V߳4r Y w`m_ꋜzڈ8dFѹE(&jTt)E8'Ng&؄jX^!â/1c?S3"Atߐb.%h 2 eTgÄSc18?[*,V̡g^WyvSS Ww"_y!RwUVƛf_ 5.~@YZ=ڝ*,);ɠX[` & YS% JGYir6X {%Q-Ps۬$5s&6~bۖ ۉ0 VmqD ?!^,xnXOp۬) ev-N?鸿oS|gN]vúI35hJ/[h6(fy?X`GW6ߩYvrP"wTp!eSY[&Ղ}K> +Cwp '#‚tzc?n}@%nIqC]RS D~ %vt?t~ǓJVuX\R_p?N_<,~qmm |!ךo5Žr\ qymarRGքu`q5"5|ݜyƮ5YW95O  \Ħ5ѿŚ uxPZx8).:^\ҷTFU-^Իz=[R\̉3[>*8Y#y*_H`}mΠ`6 䈉MSӝG`7tw8'jBW;`G\#K5 48N!\o>(@Ol#"^jPXS M%0v/6j* %f};;E0c m,F`}`˜7u@uƒ ncYZSSc-G[m=q` ˝8ˌDn*aZoXY"Y* leZ.zUu,j$i?/skj;|s%䜢bEVϘ!xDWYqM=We fQx?Cd 'Sm "w#;'~?Cysv~ۑ'x~7@yv ~Y$r3D|~uTo'P2;n'~FK"]9sߒ>S"s++*߹HB~D( v;HOw *W *:1m~t`-x>[}?.V( ~*hؘ)HWdz)lQ%'L!{Ťg|@粛=tZ?Q df(Y]$w\7m{.2j/!620鹥>#G+竽}(s{?+g7meOC--ZV?EvOٛN]5] ULmjlzX}z̧4 czėz4Q>BeSs!Ϙ5 4Gjof1!ak G}k}/xפ s V7E֡6L L>l<(W ӭ&)xdߝ[{Ш4ҥz%t.EnֱgNBt1Ҁf;Lls{@-o7۷GKA-FN}{y`#b[ʂ*i3iwot{^Ϳ(Pr4v1mEs&=gHߟb{Zj3iK䚰 IƿMl.g oAa"7jHLd~ nHjȘ.-<8HM- 8:cI !+HNzƊ+G/GRNT3|ۥ%=Fb R/ڏ%^HcФY'F) ¨%|&?8q 9MBjbV'`"؁r^.~hX_a>+pWk @T#5d6pUOO{ŽP"۽Go=oq68sk^]\]Tx֥~{=Zk]~Jod>"O)SQʞ5r>zME˸ \us J/=W=ճ!XS~EHdT(a t8VЀP0>{JNy@o η4u*? /k΢hߣ=ߛ̢}Hڔ͏^vF!}F77 M}J~ ];:Q(|Ů<ʷ2䎱N. m؉&nPrG;(н9zO$*1%~%4MTC ُ 'O7z:1.tT* m4lUwf-դ"Cÿ4eUcs* Ce*Az"xS̆6bB.OJd/Jy|r0Wͤ:5‚^pDJ:w> YT0h*GJ>dy|H'LjgE <3L$s:ކoO{30ť2H\ӳS}joaҢtڤL_2L?Kd` ?$U1$Dw:.&I'\9@0Z_CZAmwxo{j0Ϋ/%g?i)u . \t29CpGQd깟f*gsT>ޤ!,N'}yw|kA$x:edPdj ;.%YW| \̬g}x{}0Y5lg*T4+~9 RAn;AgHIWƷҋo vMyS)85x㘒2$%8[EC5]};&w\9[l?wݳwɮЅ~S3nz{;8[3ުQf󧼊)ʇ~#{ℯ=a!xuy=n,ůY 5UVi^r.-g2f㔳ӽ }`ZpOﱧZ}<{ug϶((zhL`k Ϙ˞ktJxxes|y"sC9RY8/'8Yqқ/ .{}G#Lp |fW+|y >H俇VXO~BX+k$dV;9;J~4 UyUL,Ζ83m.푄1'Ӄ)x9^k"״dn_g ըҜU}} 7JW,_&%[_57W=F4:]0E mJ{^<׈^N{_E( `L?o ٽ973;NDpkK|#eb$3(*mm<녶3**;MT|YtlP J1Im<{DGr\|?Co? 8kEQg%>Sn(8Н*_5s!:(LAn0l5l(FV=~$ vv@dk}bG oﷳ IhpH+?jy v]Ȥ4PV54/AL;#9o3rlYs";os@މbA<7v^E"gk&gLQ;gWako81]|їXί}ܘ{[ m=E4FDϺ@MRP%cW8 m"TiӍ yc y_̟N.ӡ "L8MsbC @=K[  UP^zR <.wV#sJCaɌ懩3'(`}S?'xr"ͅz֣K}UHƪm#\;GgE|У^[%MTvg [Jb(r<`n> #[ѣ`wJ鋘&nM,JFJ;7|έnOIot w|M|wwC@ nf}^ L!{bEa.IՐ׻-oiuݘkq E#Დ(!P~F>T}qqޜ\4H_j`1:9I6T4uGIˣG#/tԧ.=|@GBj3p@ Dv&C,>]kHeӿʤߨ_bPCx|WNN8kßNȭfq]jdoj˜/|J0Qgx~j$ (TpTȏ-M:٪eRGasg;(`c"s`Sė'krwDJ =:,|FMUĮsTLicA}EULvq)nqE緌#&k2.Ɲ?&9$Wm|#j ~XG?Ay%Q'!0vל@;_ 0} :a|"ԁk=ހX ]'#'*=y?#fN]^KE*I%>)^EЯfc۽Vkb㡀v۳S`dMN  viudfgs-KveRTG7ij5YP8j:)]lǰ^m:fOJ_%{E\T^cZX)K8͒vGEi(lr6)X*@bk`LNGbڅQPj!(DD4,/ϑ:"_k)pևaF$45t85KF?zKuI(L$( <`d9Lr,Yw׷ { M+RAUW$+"z \W(,q RVrKb\QlHC 4ECD.wk +J@*fL ;ͻvsJO\53|F#(&WCTK6}\*6dP6MŸ?%%6!f cVt_Le(໿?@[kɌR+x_EPl}G^;ۡG .g,xli3oXLƘz TRG\ڣgv"mcE y, 9,&pb=Ȣe>ۀz6#\gaPs6}0 "iwDl;X^fw{D~.5pZ0"`˜j ֛tq* {=-Y ㈬C4 T3UqvoSeηQv7by#̊ ~pD# }ذegL;ӿgws3?CÏ~ ,w C:znυxC)y>eB-!4~'?nQ%>u&I<}d[̡㧒~~=_ksw= mop,s1VcWz[P_(𧆠AeVk;ڟpW'}S*y;ˢv5xB{λOA{_~Ž&34 pM>[2F?770 ʵUkwG~A8ϰ)Z<9BSSQչ}ɩ#hTJlEY@~&&`\d*HHϵw> 3K 9/ҷ "jYHpxsC9Gd7y o ^Bok 9ϗl&r>ju}N L;k- cFo1V THd+FԖ1b<&둬:@"aɗM9l{Ԭ&>&>;'EF@:;@AV [ _!f³LJVyz:Rlޅc%'WGoadڡ,L;zk7 \{JBzl5_ ,hCr%Q@o-pi͜_x$y+4g,c[d-ߗ濘 8{Ķɘ+Yrm'Db"6|\ cnaNeydP:_T`LRHՇ|a }<w=f;V~n!(.pg~1OH 1{񡦻T { ZH7DREGF v;Qpƌq=}<+Z:ZOOl͌wƸCmN-yU." Nб%( F4|>¯LMn[ =(FB zm\oDZ Un_j)fpk|4Z|pTh1u*O~twoNZ{(iF=(ym k7-iCJo&AD^" Lw(rhz=6Y̫"wC=D &obd.p;<YQ]3Tô=~78Y:GAb5ilfFL**G)E% ұ\g_ue{>8p4Xu֞tIQۭdnoݗ| D&6 iH]ߑ+h/Z 673]wk`:Gy/"6LQj5 /0XE:Q𚜭Z%v֯^"y}ui&Y|%6!tS\5㰯ņ ԺHXgAQx]K^N+iXՀ\FPxѡ[fo C[]1ZJ?y03Bv4sik_na-fzm|`c/{ud2(Q٬Q{Un,2˝]QO}Щ-XxYga ?=#)W7t,5[z M5+@p [ d[$h+/PLpZ^o]fEjq](O]u=nN0-QΧRY$e0LAԝ|d"h%ys穆5c !}~Hsv  -jaPyIxS7>zFPK_&?b#얂@$uoNz \<7=>ι3LJM$E{nbXK<{{; 4Eb%w]US/ćł\${Sku!ѵFyJf+?LG/y; RII [xX 6[$D P .(䪘jA3 n \GG~Js6Lo*36 {t=SF|}]AĦ|o|FH׋Z9}E垃/3iz5ZK=( ΗYmmoHE[w!끾SS)뽑#?|(wA53>}=_` "q܎s>#/xy8^=V~)]Y^7}<:?BAg>o;v|!} x_pBr]ejgc7T)E$4*՛6ȏxq1EU"Nb-VdH' :Q~tFlr! ݷ"M 0q2"ZvӃ @j1ƿ$6ֱpAZ$g{N2$QZZOwsEAd=g7 q~s_՚[N8W:o>#_×I-b qߩH^|_]ق**+HNO?ܵǾ_/K@?{ .T\ Ο!H=Eq'}S|.zJ}STSn8zLHW _Sy~:F<.mz]jW^2WiWWj h>7Wo9y9a=o.ar<#~D%e^9?LZnQFkׁ(sƌ`޺fg4.?7_|%]3 |)=$J~_g䷙1}z?^ ~.@aEm5JtO6'-xڟ;y_0NA85b'^3V`PkxqduE,!գϛTŖ.Fο3?/x]$px0 T)Ưn]z*wXĤaCKn|^ ɥO/D{)؊SSIS|GܳTٗ$A˜OߍK#~q5n]/s<(0|JE ͺFds(hj*W8/:HC"P8*m .8n\&OlNV { hv$ i^ גYdFQā1߼#X\+A4,"Emq300RgVCZݫ)^:oT˷jQg$~R>`KtpA!9mO@(wdBHFgJfNJ:Ŝ 2h Jww-kkK WE_._xK^(^i?|;5˻g~0l~pqa}u9c^W;hJZ8kM,J7=OJ딖)STUen/؍y\VLX&hPX%H&ږq|ոRE/dQT!~M}C'gګG 3FzFiHhdž8Aݪ ,7|30f˜ ԴDBÓz"N@? 56)ib=l;/rG5pmPZޣryƩ96I,w_#J$xEb(s[}?7dZWC=\lDE1>"F̯C~ƦQJuףʲ? Gu׎xXjrQz2o4HnezO;uZ)V2Am = wsҧ'|.cO ~"ߖBDP&B_W77^,*}_X B89~A_d5ban}ްI{2G#3k(z§{ݠX @:S_I('gv*\sL@}@Z`}dt$ ͑~z$糂H(, _'M4w*u\(wlw~??bv@q zS~>ҸWOw{W^dTPy7 NFAH4oSV&? g#ă5u핚BwAQR_w+&E'T)[(M7d;|A޼<>'hi*]7LpHv2*΍_~i˛"-"S$--::ſ"5CjL$Է]͜V ?LL^—wUa!??!Cyk[;hh]Sb)5(ۦލQ˪.ȁxH--LzDrpY{sQq5_Niċ!Q' ufjUxQ6,qOgA -Eo+O yH0A8SI2? v>nA] 8yGa=j37ށԔa׌T渓?;˦bf;2tT|H=O|Mjd}:L!?:ز8KkBϻ(l5S>'6Qj1"­&HG ]'O5WmKH]q*Z5XNίѷoxNi(kZ`Z:c?kl i"/#&}Tn畿y\͌XQˣQi/;d\; m[X/a%<>w)k(%4P7,@8I_:Fė]Yn4}ז}E: 5PtZ) 3FD<%?3A z"@$\+%;A|RU F ځ6 P|w 9ڃ |.ͬ>x[O0H,.r\A+ޮd3.};@̄_S6#p*!2*tkQ43Zi7Tg5.׈ny-S;ICО@%.BG=F_ГZ0A~t(g݂z˜#u:DPAN +!g1oz!C|c>tQ?3c*R˕C"8S욳/yxVv.6TчJyWb_0m;e>=mVfݼOhOtksѢKK%(>#gcDZa̐;ns)7'7弙YL=O=פvܿ3)G G_YO@|̙Sh3u$mLS-7 $RfO]]J7W菩R_{RΒR};a(]~HGS>2Mw,=6F5,j&8H Jꂥ"xT={[NiEl珞S; D|^q&L }G8QѠ?Xpvtay;__H6 =Iy' ĦV'nr~Bsۥ\`(8I5W^YJɛfv\*f.+vjd&xvKd "8)G;%hF٬19-z*L]:͏,H| <)ȷw #.Y'{bR1(Yx&qv/5bONc 4JjM<ІtS]WBM23m&_zfkYssXɨ8{}XS$6h T "`20BŁcZŭ,w`b"b/Ȁd ^%9k6WpPsǘsHZ3kjZ( }Ԝ톜c(Fɛj$jD` pG\{ _CP>)ʳ0 w,rfs*{y*?:k Kcr"?/"]=4xy_s|,`hyϩ'{O2i9Y02=h(4?vsP=QMZl,ol?w>JxScYǮ^mÞ&M?Tp"  A+GR/=uqJ{1 wcoo,{5Vl-6`6黦9O,o 5O)x/\[-}Sx)#xGH1x`Dbov<Σg iMS6FCk5Af3Om#ۘxT#JwW:F/GJ0MJ=LZA|<`ߜDϡn&G\OTo'jZk`^T1k䤍1%:f5:Yy>L|ɴ[lȻ[] ,3뒖$ vz-xfG\Ru|/i7>ёau{ZZԐмcI[w v;?APJv*;t.[SS*! ܢyӊ<݁Ϋ8,0_9ʻ;f;ϝ?(w؎8u85.W=q\6Xkct= ?,} JӟO OD}+^&֛{-{ eNOkqWk[s܈Z N>_c3jR[G/UGeX|2ٗ>lqE(G>V#bT-]R_V ID;bBϗR[{ Ν*x8Vhr&ej?g(߱OtrK?SGw\fwpc˛rDL~`"ߛNH=~.yQCcʕ>w |a+=9@@zY̬ױPu18՝ZkwG.tq*R.PX*3"UGlkwYx=DuP( \!'ŚR.)iݡw]z m8w-0aGoin9w? DNU ;b:b:D d?5~E]磷B } |=QldIL*|U}d(zx(c򝯴<]SBv[kZz>@f$߿+1*c( wYίnwXz4c'.(7 *\u\h9} @uԥynoIOP)Gewd2.7e Oy N5͕uqn~K>}-ߓa|']DκmA>v8t9s |=O.~*PIñVW햒}p \(2]HPqDi l]a6Vn;<`.3g:~lj2-7jZR_77ߖ "7Nű|"7𾭢ȺW6!mEI/roGvď˜W7 $|8;/KE λ͜D\9w= ߰p;}t_G9 ̗͞63gPK{is7Oj>p YB|ڹ?sIxJ@ pP;v&lcp*~Yįd0[L[xcd3Z?e9}.vsEozS¦u6X~MLmӜT17xc4" In0+ gzSfOO@."Ix]m:~z+GEyB.ݫd}ލ+hďc"n[E8c]by_a? &H yE Gomz+X4~@^'jTBT)s&SQ4Cwwx<Uw-2ߣ Gݳi=†Kv#=Dp r~7i pۈ &?T}2ቂ%(^Y.⹆Ъ<; 881=0 )** *([۫ )9 1LpE7{u]z/7[q5x#C[<_BE F1&"U @z };X pw d{8?|jm}H߱EcBz .¹Yy΄.iiXY WsgJC3 n#1}KE+8fakћtnfHy^\`n|HaAW~Ċv:qx[Nbg>P5оn;/]( Lzh*Eh2E(+2g`i,7;jfm;=%+<-32'#ޞ_yBy9vvM =}|"c@vSLDh[6G̰9ʦ=sߋCO+m~ݵ='v):vG(c@{"M3{1VqO \OF=h:Ƙnfα ]z~zS7؟|Tglf2ә xYb(oƧs|ԋo}I ]AH)tU:bM5 >aISR˙qF9&EOOdکU;QI|Oy g]{ l::m+1C{C䔒c6gN39p'@N{0tZ0ZHHn6sRjl `Rg7<;{CG6qqLDF_a@FV_@8׻K{Ss@XI::A ζQsRSƅ&Gi;rT)_ F=<|n4^и<ξ@;z,*&Om3UѭCo , c,5*ҵ2gc}XY3anv4\uohGn,vz@|C*ܭw0Q8}7řpwcbOwnuw`Whfo!bxW Hwp$-gSrρhO)++}< RP\s:~Q :2!>yeWK юj=Ɲ&C;>! ϰa/Wstrq]\yEh#ʿZh$qPZ 0.f"7vTƕ2'`Tu@dU6ޏH(ٵG 'lˍNdbi8z=,b K?7IT1{s2<j%DӢ1(b^ EGed*7։0`1m%[!VL9DZyE<׫(5| g7w8c8lp8o`p!3drɜH:>.hU;YovK~OO^.,nC"KFN9DOv$VIo0 ". s1 4<+P Hl(y'yZl|H޺Sm6o%fu5Z>7ax=wMV7OYU pkI@?**4ܿp5+:t}۰DzV -rϊ&;\F~Yk+~t %d }uA.#JiuZ"wk;Of Tﴃ#R`Fi؁%غ5y/+N`m3[:KI苤-G!z&IlZt,ZC%==]Gb L@}d .?#mIjk9  4͙̇:jB֯UO4ݗ6/޶Q3Mf qȕ QS`ÉwhX EteEd& ĸyZy"ޓ$5&p>~!Ύ| j(|E0v0$~VisKcZj(#ݫCbP!,7+ݝM@imNq}˜v]nC@>/'S&ؽUTFdB`_-csa^FܷC=v&!/e,%`쟝ĉ]k=6>Fg|g@=> @+S^x_kp4ʅQ|_zEHH֭@@ixٌì lʧOΠ>~𔴳YEaf<35pYw))]=IEJi–H_1.K*/r /ja@>=*G9 Ŕ'ڌ5~j!tr/3ҽh}wό<8:eɱ%7<`]Jeљ3g˱z̘bXBƩq]$Md]?vFhX!Ӏ11o+؅̉أU k9abQwQ0Ҽ4?gM)-Y@X{$r6Cs>A qŸi?(.uxfkdA?W^[`[ɔSw%t,5'*H^G2 [U0IleY \#[<6CsgOu ;;kt %x#w.?^8o!}!us;˱IG@>B *jZ _DՅB9 (. 'Yu7 fD]XYe3iN-xs=ޗ/L3 |_t/˻}@J!Ag(GgOy]Fџ0`'6dCWXey#\ThSocCg!Oe"lg_{1ov`[SSw:"Z[2Wќ2ڣGA [W`k`WcFFyAw/ϟ!J-[ؗ$G-P@I$~'k =/Z#] =XB$-\ń`O b/`K̻& MG gҩ M >}$PNRiqkg_Myco tqљzj,B8ͅ{Ηru7<+%΂%l~Uܵ ,~~_}C$C@Cqÿ9^@_"`=DXOF@[z-WBdH|ˋϗ|O,/;N tQ-ck /"nRusS(SЍT-91[04cTNar9w{қ<ʹHPB1:Rgδ(ZU s"D;VAAS3caa-IywCU)G648F;;Bc@U]ɨqga"B΋56>OfМB{rEMLWj{j .^<mVe[Y^vtԥ;s{2;jIL99\5}tty9G;]0+q~F.vzdVmt/Z7PVuD}O8M_PMv7&L:LOwy >ֈUZ@K_xޚRUWB?*Tsۚm۷eM0[ڍM]3ϡr''X:^v.yɘ m]~0*sc&4w#Qͻ:z-Vxk`[=E SvkGz/:Ta~@=_"b "о8rTUZzwI(ல)nG?' 6w+\aҏ`SmE! \%~\7:Wb4L 0:P M􀟠EV`vٰz۵_S-SO^?ƙ_"KΠY3Nw 2%;U\8Mf[w@fżj;;+Tʹw+ÌǝB5n~me i,Ivdﻋ-`x3t3v >P 1s9pʀIjj0ON?绢q˻.~@y^"_a7}%m/e1~-~UnD t[)UʚR#3aWLjUڛ 4ua"؉/3#Ip5ko=bM+(uVhBBd o"4)@$aF ?CYGzyBs@lXXL'=|{q4X7>iQZOuo&=!@Lpq E[Nq4?? ^~'MH2,ޡU+co Ŀ^cN!sxbM0롼irWY|Py&K ^.+(Rܯ0M9MT(Y!߸4Ђ9!>&z.Wo-\n„OY}k^<3gaP`ª@[$0P^*@m o opa?Z {+P] !K|>V hG)v‹7/B(wXaK;11}Tq(F!3%5gW$ŵ7. 5vZ=f<ͮ]kZյ)ŭ;ŎƣR^H=6hر:2+-P-J!챙v-W7E ̋7s+1F91~`FQŘ_wvHabgV3Gw`_Fox !V؂ag˻.M1FyqI;X[&;i&Jq)-#螌;2#K&b|oL^ڥL_9$ uB_POgm)UU BԐ٫t X`Y{ sߣN N)c 7;9`m_ /Ykפ3mlj;N.La[klCSS9P8Q \vS=ķ^xrI.؋O]$. v@?FD`+?7B#S}cCqʡ"m!k]ڇglsI{n3 (Nra <"uk7OC㿀m k ֈhpKNSq$1cͧ@?U/s: >WF} Wd|aʒp~ PaHs2QDGDQb]=3*?"F+p_Y%Y8u$~4({P c"l祿FAB bkG T?J:%Uq-wTg&v ;DPIj*w{ |?Ey{a2ZknN ̣ZwѲ]r& o"#;q ثYTɾБG#/xUO+o TG 5󭸻SIjuBLo+w}ʇ/ZpJKޯD$ޭ&%B%,RICs2NfBe}hݕFm -Kܺ<Mc5 tˊ)P _4Ϸ0`%O|}okh<%LrQs`G},@Cٻ/uY7X'@-7ٜJSi7k$-0zPp;ͅq+#a:u@SpNʫR"WQ+"qAGr_f ]_'&fץ`ީ9S>粳(ĸzG2to0F#-pظo&?O\6={S"Uj~*x&D._*^ ke͛(gɁߗl 90zgZ:IYbx|8 g5 0b"ۊ;џw<-,Vz7O{&{܎sg3X b|n' ؛?oVfw_ &L?8*)'(B@.R9h/΂`-.^)߮#Sg-١k"aLL='oZp<:C]T_sRc@X{I% =X̤8 F@,LY7Sotx飔(Xk.^o|F}uŧ}$kϺkmlRn  ^Uz^ђqtsa$DhIu G'*ts@|Ir.<}wPB|{TyZho[ПHwlew)ώՎ {s]utSwt4y;n_[T cc|׭{x):7[k+ ,*2:oԉ hj/"аV )aq9*J $]l hU@:0?uO4&0\/Pӄ";_xFLzQb17N]zsWSI6E敩r1]Só+Fh$RP}|b|[_a#3}/3_3!aa:}k?Y}x B"}u$B/q&}ܷ}P2zzTʙtH)9-oqus{mYKB-FAفeYߺ]J:sBMu~a4*)7 ՁZGE$S:k޷`iz;NtV(n%Oxq~1Oy͸jeR5ZChvO4=D;3UԖ|Omt5!#B5 K)1{!\"n.A7fW]~NS),][mΨrv-c_E/wSlQډSʶ/;3k_C95<1,`Zdd¯U@;y/g]:&5s&%2X1G"D3U | aX Z|XbI.Dҵq8>~v,B|wzy(>$<짐K(·([J4nIsl*ifmi. <4~Y)ᣜ%sli!MyʯJ{wmu`HKC~@mL_-z͡SnH .̻g34OX p!F{5LB9}0:.2Ʉݺ6ϻ uot_ \lh^֧wŴ/s$ []\_e._[ (#p/g|Qq$ݻmQN](1v`uċ6~7M"Ou:6.iO{lf= l1#ߛoj<3@ATE θ0"Y!D|Z2Dd=^O F;q}I®9㴉[Μoo. I tg~.t!BEF9aNU:fڑY%Rd qU"3a4T D$_Wzs*z#sV*fU AmͶP`:x;tmUyeqEvb繟(V/nkrfAt1ʼ-Pd,ŶqUۙ%`qs%w<џ\W³zX8vV,3yi*CXsGt1({eR ^ @IDAT5O$#xa k4ՍLJXhflp^nOdGkl9-=WK 0޺o|S]{W`?.#5z29\@-H$ 膻M^@z[NDp34}SCڿR'"s a%PW.:V}MQk1Omy)}mXo n]$l ɍ,%}/ Wq i0Pl=H ޜNøzWGcy2>z*"`%$׿3,аa|"y`Rj6bgP x-q/ p47!zؔL fج:p_f+b!xtrmI2bkQfe \*5t?E0 Ļ@I'r7T E _ \~,IG \DC<*݁%?ue Bu})v^A!k)dv`[$0 𕜳,]߽;3C`k]bP |Y.F˾>$ky\hFmt:nՏ/%\OߪtFĞhQ s]:=x>Aw $!q;+Ā$@|>oѨ>Q޻K`!r4]#y'}ree' 2gZspolk R?%/a00ޥ%VF$ l+r=CW멧 U. 1BcGqk$>2_c¤kJ8{{(TƓjSdGS}>鸨֗AKL SoY$)7!T5i[=veE߲i͊ߊAQhYI{F4#ڣR@0όPstԢhǹ0޴lyy7t֗JǙgSbtlf]8(Mrt*Pʐ&VS@4Ru;~v- QIc&3_e l O: C"]YH#5i/r=rE`EJhKXz?t;{k,]gҵ~EӧNN tCҦEآ%RTG ;䧝@^xNh 7Ǐ`%].}t׻0b)̔%~i|ǧ^ҙdT/F$mW?WN% yE$ҩ|:20ʧy.ef++$ŽBg9c tǿ*,ky+;q  \$_L(/DO:J瑡GҠQbG M ǥ'sZxk-J yhY8q@L _ "$ Bhy5B=9 i*>9qw `L!q QB2_|m-H+W\88GKSz Hy'!%`Ee==n>#v6J5G"\x:dM׉yS_}O|&%mh${zM~Ql?iK^ Q1гݣ `( }-}*1.3tƀG (Sqc7ŲF^z/uZx݁߿:@/h ߵQ@E}%;sgAac64|5tsvt ʏ#~)يȚR ?%ggW` U&T!'_4ϓ{;N*@*p6}gwԇ{,v;o-g3xV2 aw(W'@'8@~Qav;`&avSM ?ưezzƩ=w|VL)Ks:A p"vzj<}, 7=ie#~VܾrU}3,;ķܐK7X~8~Y?DU?mڍ.jFK%0S7)ה*אyDXF;pqIJ8xӎ6jK( 3`^60NyՒ'^.gNJIʓ|@/'s5$56L;L\qc̣۰MZYyFmotuws ٣ھG!_ W?ٴieƊ+3Pо`"%qhD_S+y=K}$VՁ偅.Ryw^ "].:sGm=s`_ |; S\t<:&Uli+ΛEPyh3Ωe7XL(Y[0| *G$GXV`3[kaP%3B@ef'r@ xƴwIWŨڠɖT_dմp~% K`'4ɮ/OOp=EBoö3y>=0P]+6|bq=%.+W^tc3qi[N)Avnr|ώ.\Ml|ɉLYk@nB`v8۠kU`ms0%۸O&-[8t{z3? ̇ |<ׅ謁r풳yByohY 6HdCvO}xv'UGSn+Up8[hhsB~Q޷a<# vU!=݄}y%37DX qs(ClDUA8m"Ȇ1ƚE/EOuvJ黑aX:-ЯxoU(rE$0|+PуJ\]{!l:=ᇁ$v._{i)HNxbKXakcf%4) yRwɹ?=ͳ3~aL8i/¾Vv#4K=N (Q, / _:.IQA󧥰c 7A1+;+О8x <㮁PEWجqװmn WgD]8܉ˈ\[V7~Gіq( Y9T@! .xr%|a.!@|w[_ |X .ŗ5S@zF|X&@ H"['߼mU.kq6SRTt+6.-8Df`fǸ}մsi^تiP~3 9ũ_]3,ᴌԽu!#{e-?չ Z{--!I񗜼8?z;Ҟqa,6bҳ% ,"(as[IFX}V{[Y?H9py&t gh'}? &אB"zbL*$G:|'ꬂo޾*ޞ yuG2u. ·<Uмig뾩`$0 O w&}iW}k]*ɊR2G(h$rs1ϏGGh0dtl@ʾph?ܣ!6sJ-`XQLFJ̟YoSen 5&!cw[>ÿKn4l 6nO’%8f-$Ht_6 `z/OS2mSڎjw*G0.-l+5f:XB֟*z@9"W d$ϓ@^ ])b#RV(={z+*q#ÌQdƗtpU0oSR nu,;{hgOýބM?h{0~r,j+{ITR[t8c2.AQg& :iɈ_g PAm^v{Y37!Ůgam@ ؇\mZNe#JO]Orsd~>tę.Sd0 +]5AAp̟-888]l_exl|Pc|AdfsŜZMn<~ UBroMHI l cҡzݼߢ;v[sdNbE'&.^S}xOǿ@AT,0h mBAA좟|jwpRc^?"xc~|@j%(-(!| Y `?̋8Fzld)kHIym7R^|bsA3C#Xب,2b?DP?&zpUK2W}&;Xd:/e9?c_[J`)nO,P';Gk~O0f ;1Ⱥ>vَjaf7>+j<:VgC޶~bAٴ$3k1q -T%h}C.HgcF2vzdv>!B%=Nb}Ͳ3Js_w-K"N/7яȾƿ}XD{WUmQCisKlڔ^F{?rܲdߩ;;S j_-sUu Uht~}淮HԒ_5Y,a8uΐr0@ fPuB2;F%)Ӻ'}6.x]@g E5C'p؀E?-g12{Bt6fK?W/ؾں45Gm|%>H Y: Î bM[z=_K!qGtA(7yFsN4wWHy6zw[͇/?~;_;a`xbȺT@*,y iH[h[!d[n8JT28HԋbG-_ Ÿc%&O3ۗ @H #ǁ#C2q1hFӤ$HlCd.v%,e|]hftƳmkxWW _ӅD~+:zp̣̓PsOO?30g~Ǘ5^>o\eTLOGsVRgQz7p8V(vs$S#S`a}C6T,KTr @ @L ` gaA|XlXAD njqLYX l{8s5߼x?MarpBk.@x N--D9i}k*v-hA7ܻa&G5wժ{vG( -ǞѰN v~ËC]'6"k\fZmve~)pv*ocmydvYC̞a}O:Ӟ˸5<ֳ.vu ]\0:lPŴOSc5SF[jc/Nr4Ɨ+kd@og\5mť;iF/] {ګgo3^HUBzGy
  • ^.4 0?oS@.grXЀ@ZB;>j/>߶ m ;,mpl{;cO8+Am9s/&ba~v_A3Vпfj8  pqiM{3nz̬|+AoLr UFz?P;X[~LLܿ#3:863=ax56)GWgPkU7Jo? Oh]ikxX}Koϩ<#%V`5s_V%eKːJN.Wr2诘93 ?±uo.OY|Op;V@|[{ L7 |0Eji]SDraH - .,[:]P+0BkB`tF='l]>'P}k.@q?-wQw{L&n>BZU!xH;Y4u 1צdڨD3ك5&vo>ٝQ"l'@ k8s};nTSOc=wrY:DnBpPSdS!q> j-`gݗYzpl~y|ex--~aǢKgYx~闙U/-QS-Fx3-3v6W츂GӜ@; ԇNuh,qz>,h8'pÂp`Oi ZO|[ 1_q:3 we{ȥP n$M_3˶?>ȏ4 f|N7˴Λ2\|=35Zv'N DoM|%2HYݲep5Vٷe'_?VO㧸 ;v |!=gv<u5Q/q/7{asT-_Ge. \@4n钇\S7@'Hl<;igf Ά7# <,X8X-tT~cN. wVQ~-C?a{X3YsC)k0mm59;k |AKv³ vt#H[T.0R'!6T?]\<b a@"b?+=Un zX*P Qc \lj-C:/87 Xq :-xbn9Z [MCFX)AQ>0c&2l]d*|_"M|wTʳ7r{4: |@yR V |2MR!"j;n~P0MgwmtZw{s ܿ|{)ϡ+u4-F{SIZ>iQ{<ꎂB-ۊQo=g:qiȢ Ц L6$|.lsGpʴS),,IpL%O:#e"/|3h3KSKK槮)@=S7U@iLt^9N2]*Sj\3uN_i\sK)Tk[qI_3Qlޫ31,t$0?ojcU,Y $XIٳFС0s43ۜN90B(׵NߝC~T]ڟI@?R_`!G?'熚I~cp-ȿPl!#@/ <@|! 0~$I1 9& ;E ]A#Ρxp~kρ_WV;ESw{QF;#S^H #? ?A`@f%BМӀrJݚ5=#kYL'W CYMGS -~+6z5؍,B h09J ˛ pRk@~( ԳqGr/Pf-RT[ CH0]E0q%;mޤ j<)V|7mh͂I]&ߠz71_A[s$:ձ&ٍ  ̴nî=ܦ&4$%mr?s% I:CCm.p~M3M|ѽٛb(Ϝ'/4,9,/=CG{-8'ׯ,/$w_oنYSݗ٫K˃/M agZsJ㜅AϠnGTҨ7L NC7_=?'O.P#Ho/YF*WkIpP4RJ^yZ0yF\z$q2tKU@ۄ-a[EOG᠗Jh#3xm){ .ן0 q9Fݾ>I;Fk#t"=WUU?@VR 'G6SIho&>A=CzLj>^=|NYxב~\(&4ѭw`j)fKYjigu!K/9Yr҇fgD5.yG Y{aB♐U. w/lx/滑mAt;|~D%nr½[ _ :ۇg44Lw gU|]%{^ڭ/7lz@K[ ijgps$ނ2,\ "\@^&1v' OCss=顭UbK; Aٽ-,ڿ,h5@?[@jzX8l;d `l#?se^I꡹y>THQmUt4槠fĵ `RWkӟb4-$&@tuGB/MeI.TM27 " ȵGd@+1B76fG ekb3|۝YFaG o !kiըG,\9,9{OFG! } v@tq1Gk3@;X,^,ݍg0^&oK-~(\M8W-t7vhtYjz~5\ܹYz"NxW"8*kyP]0~ ]|:(hUݥQ$q?65[pxʫJ 2ow, X-`m9pXhSt -gwӌ>tv{sh^9BONvfWfs'PU?A` $~()%nOR/N>HDs:{3 OBfUxGX3-'0QWK0"s@S XpM[&˧gQ5L1oPXO@ū?!bShK>?4y.VL-$d(0` bGpp[cs/@' Sp_\E-Ӷ{L 繯9]gAWWteZTC2Oܻ쵇?Sq}̋ߞkzo]{2Έcf}3:pt!A0S+ڡvb`" g쁕i}m vxڌ xii/fQ MԩToe6&'eb^G@( Vq:bKK XXM`"P~pst@>[z ,^! NT1|ckYĉ"WVf3] nZr_zr%cF7 lmS?Y=ZS#Z_]` ϗV`]eoN ]zr#~%f5+߿~z70*<^@Z m'PF$jŦw>~I_@z'+fg'Pc@?1U;vx@={C\X{S@O X`A@}xA+, `q؀tVˡ;cL??V[\I 0b 8y\䞂5WzQ>sMW +Q? )~)A}6' NmHn]K佣ȇ r/Nng p{եvl\Oc%֖C{6^7g,j. -?Γ! ~UI˲7,q$:~K9y'Q=ED"'Q$3?[rw-w)ײѫj\Ѯd4۾pvEf;=2|OYXcG@=^tHE/ mN;ؕxjڋIxv\1JɘsU;B0`zZG 8*CncpV6$dL5G],ю8o FBt+@?Mi;MzA)b$rv6ިvRmU ٱdkл~NyqwOx&,Sz|zF~R׵|wY4X5&{Y]&H)h /F?S10lww0{pAR N[ht8 o@3zT.odr%0|,PEK{sjLj>ttKIy Aߩ:̚~-1ds+|ǚ94$7|tw`yNa֡1ގ%E5KABD^w_CB%g#U:lHcMHO5h&  DtE61%; V{rlzu@/ԧiG) N8Cg#nҽrˇNr:SɎe6ţR|@ħgNZ"k~H ]MުnTmT/Bo=4rP~W2ߚO[P;9KxJvNሟT13pU]|ϒCכ+>;M ,#;^E8:*$~[S aY8v_8YNr fnþDz =;; 8 K-PJ?HE*:7qLӼ/}@GT]̕!EG  @/E.W/{S~`[M7t[\vfg 5K7Gϫ]IzDj|q-)%^b8-8]XP) [.%uQK`р8d_Ƽ 9?~ /x"xeILwY=F1,עhàz?+NW*i}N8Ǚ1ω^|9|ڔk0RRpyipxǫ,nC1/-)/u{fWsmkYEg=EŘS[[6H &J-o}*X}7\ k ⫹{d0X3[sbMH#+|G C"Ŏיψ { T_;埧*mIB[ }opB=4ȷ|]2IEv´[@I3*N=WqFryID ʧK2\h0v۵$$ߧ`إ},{i, N _eLqK;.4~*]M4aP=i 7]<,S%vȪ]s$KbGp}o>jq$7܃ԥ%OOgn~zJo ɯzٮNg%V%hǢ@~GX|LQ/?Z{}nkb2D^KZ׏p[ ;[>YLD͝-eYi^Ms l5Hƅ#Y_Az w%#&w3uꋡ]~u o;hg'Od2!wiNCCYxK.ڗ%@Ow_u&оq3r9z;s V҇VV̏k Ȯʛ[^Cq<va)(/ 5gZwmR٤q<]v2 -@\..#p=Z.[,))/|)./uHwNsd޴jOOɐA93lu#53ŷ>| qK^@>M<~8y{d[y} bTK0RT一aN [rc}y(ܞT 3=gmx ,IvYe.j?&)wt@,Q o(UYB6 d-@"L6#W(*#x[ }SLt2_ x^G*:= BOb~o#7cIMPba>ig7:KV-`v(E9eG|_:#|+xA?`ۉᶟ_RV?㝾ED~@~UOZNB}bk_-H|7z@.؄x4ىGM 8f+9Z=z$1:=؅S/{B?.Gg`RPj0mLWCU806/C|{⹷YFB9ޥ~Cuq=;jOqN./ 2' 4  @"q. ˺h5}>?y6#̩D?kS'ts!?¾\LPٟON|2ç΄p0m| ,l懵Vrb'%[ȏ[jY|) g'P/"6NG[d F P z9,&<)0S_r!Ka3Ռ)tvYɖt1zi U{H@uq -)FUBչX `^E'{#{%v8f6RۮT^ds^h+|T0<[>?7w YԬ6hTC e|g hS~Է1_{O6qZ]ٺX~wQ'RTioe_,a>"6 't  @P-$^;UO|6X Z 1N5.4@n0Hg^8/ :߇ :N&RVn!Tu } &@#Ӄ@a3bzqM9zkk"&ހƂnQ+Z S(2h{siPǘ1F`M[Pwc8 5]6-W[Sw> =k P_qvS*gTl.Y[@-veEogBzArk]dzqe#F_#ؗSƺG'yLS9wws>9˽=~Bן87]y/vKL9 }ʸQt~~oeQU}hw5e @_ -f?0 k&pge>cCK 2 3]0Ny140]\곻t1/A+By3A*hҾٺd.ꝝvE/Wi gXnD;ғ/z\SKwҥ>ALO;(\U} 2=&uWԓEZ N\9v#ܒf[s")J/S@{w_:̎LYn-&fȻ){&`젦N(7|vr,CRә}ϹN޼LNhrNM| 4FqmE3;ݕyCG?_{VR'QO:]>2M5qg\vV 3)-9)Z76:ݺ3ϲI}h# ]G>ͨ^^ O Mש/;sߧblYs%M]`y,JdU~5e'5>IGRHp:J{@zX~kmSC? 䵓if-n6Mx{缧x+9tG*BӁuG6rP? Ż6 znܟL 'ul]~%P TgW( ۛsf nV)#OB賜 t*gZZ) 2t2`A#駠xAngSBQrWŊG$G3&~p8=?(B.xT.}47ܾж1wKxݙubww=k!sRnYDQQY5l]ɽK5 :TKz,o<3eW"3巳Oܜcn##MQ.OcKX*o *{'&/3 fF~@AV(CRu*_e0-+qAS+YlC:ung ^ :w\G&^gx;߻f/ޙw $F τ͈*V5#Ƽn5`6#HS>+WQLo';)r0<zD?tz6l`2:r;Pnm_ /s.t:3Mf2@޲pܗev;_wx lc3{ ,x EN67;ş!;7 <.5ޕ9}􅾇ˠ Bj@[L=! 0Eǹ\v.6e[?+.=лzz\&vBD&p6|?MGT,_̜ Hu ~Hl`-m n61Y=|bp7gBr*lj)9mX|w2Ӥ||ɠ2aښ\]% S˖ɼAܘA J"a{ x]1.3\/~[=0 /OC䈁H\ۖ~rTuJva?4-1rdA:&NzB\'xDE8G /Y/ Zxk;N?@+3& &xL@X @X m6XxL`z@y yR`aC5ŹP=)PIىx4m`s}J KDDS)v"s_p{&7FhB;$߳SN~[C|o*urTWZ"7 ^C h[P?(Ȅtx@<|Ɗj*F4q7HHazBp^)kޏ wxG߭ _Jҥ:+90 M<#ߝ}]f/IZy&T ӹ>я-ƂFg̣]Rd37VlE.F'&rޑLBrJܒ3}Iw \j9+s+\71GhIPGuw$L-pbT013(ߋt'/ Okݙ]UPwU~VkO)=NM}Z,7{[kQs;1J(]RC{Juޘ6$>,)dZq/oD~>Y;utY0E+eX;օE@: ^>( )МG O?_ʎMp8FNm&%ʡMkPsJ~䭢[_DΨ-y}J :^I ޔ$|"0do>gb\h{X ZsNs{e!?Av>$ڙo [/pI'#/ǾCl _tGuY@ 7  I uςG;} &RHiﰮ8huE"_wYAݥ7RZ`OHM[Hx#C B{9GM\:k;x}7@IDATq!b%{W@Q5_ g/9mxZ^m76vg ?fUL U.ЫȹI.\>_3zކ||GO=XāX _8*Msy-9=6sD|Q*oKAD3-3{7CCdo@1j"8ŦinY{c[e# 729!J@BvOPGI:HȹΩcrS+gRXB~f=֌=C}N.ͽp- 5 w)flj_04hA}OOG{'E]Md楄,/|݉E5.  ^AHBlr~ ?46uqG/!?;w 150͵uVE4#ïXT2g[ڣ ~s`9 Tpƙhiv,`[K~@@d vL{bSRNΔmFTJ vKɲXC:HrM lZC\:FNi\#S,6d *7@{llϦ?x*(bzm[w6:y0F@[&PaT8?/:U`!f+yۍ, 8_t؈i})7ݖރs LsXfz+x.dE37T63אh4Hgaf儱%c\ʙRb#(x@V 4lV1/W )֧ӀJ cSob*i~40SvwOY]M=۶d^KB^v GLTXr1l5-DU+^#{2yk OtۣX^rn [shmpkh{Z N5U&-EO}!߽weE&_Sv0|tI\ى-$_ y.vފ_v?K<{b0!^X?$'O^ܒg^m/NjT[V{^"dYI~D{fGՖj:{y9 MKa:J+G[O 05}lzn] Go5JrieRX8^F\):[EDcz sp @L'}ZC=@L[yϙo{ r1))k 4ᝪWzop _=Qsy;9+zrβw|z ܀~o<"A#JLB˝8|]mdG}ll?Pp6=- 3 (Ӥs ֺjj|2| |&{r)ȿ,3ؓ.|CJw,xt[~{]~<"~Ȅsp*e(o;<lmS|N55{3Ll4ݿ_k _OsGU׹bILf r/o wlq,Z Ypw) wCp9 )0# 'kl; R|l$P#\@G#&D⋴k&+8l;,Oa9QrG7.v_4[QNjvWY=:x zaG?Ϋ(BjPiYCά!Hq븾q IJJbKl]tV$IaݎGBsmY>YOzX |o ];,OS,[H<|z1yPNOH"ؚj'u#;!V C+At[D9'd2ʭ.NsgzsyBXЂoZ~.m69@. D@DXa5|Dbh#C-~ɔm #&|iL;睔Z럤EADV@*@j@$'2M; |̓T7RgM@pjQr OI7/ޕv]fi!ܵ|ڗ|:p Nj3;8aSf&޴ קerݴoaiˆA JP_3ф:rZXۇ(ɽ WːO<'@;O`s#n0Ɠ$ ,*nv(oótcN*bQqz]h#.Hibv8/M+8`305~7KKf|tzgHt3o=Qou53AYzw%`"d c랖jrGeEW'+z΃OP0Sޝ;Ƭ`y/'ñZR-ՁI?Y*.aYY|m +:Sd!rfq꫎nZB:[QC.+opBQFj|K.Y~ef;3sn7ģRH{W XBqZPN~*N^8,I RZߕ)(AR<ʿC3#c(ڭ:Ӡ=-/;ҵ"L-a`JNSp| GGҿ YR%9k>} ?%\,Ohr~%!/ֆp%*N$=G^$2j&6;~v 4ẓv=߱oI%3*WS0y}$#a'>/}j|~Q+PSxMj6KG߮w+j{j]\Uй3 䊂LA`zco&?-~kȹGȂRc^{U{{jѾ>=pПbdzS%3J2Gz.`qgʻWL7~ey#P3z>1YB#Xd!w@v,Y̋X`GQMW;[c>(u'@),L X+P}qZ6C ky+0a]!ОZ>Go{b'C=&H;&6%|req|5\OsY b GᏒ9]kj"le:r& BL}0kFЁ+ߟ ‚/ pφe'Js0c`8:*v8T6k F{0ޘE7˼ ! >s)\ [oҙ_;FGۧۖnu]Vnk'4]~)jwwrPfMC-0=ڡY(Wџpd.a@'%V=נ0 wB]P'Ċ$Q]L'rbN@_nzsbH_`A}W7 xzJf{o$8Lݛy~}3C | q!`v<|$\]vv[*6DvRx?rǝ ׺[n !AsFDev_eA Cg| W|vH5>#8a}- 4a* B&`\g-ZO-x2 <Ģ*X3Z"?3rgc rZDe-&^^})b]z$hm0/y b[A:%z[Uw4ȁ^?Nz|}07\.ӝT@{Ŀ+v] SP=izߏ GX'QbǶgT;cʭep՟2y{ Sy7Qnǘ a`U`weFܱ>si4:L#꯹wvd$:dv78pLj[WDRaOib+4cE(>Kn }u<USr[:- },@*)lE9e'H`H!p: HBM0}j_*F-ÕʣCH骼 .4&QNdzsVbFWn33x4crڣ{;3B)ƧpPh`9j\ޟ@)V:8bH^^o:)̜5r`ޕŵ]ҝOH>^ v%Q-w<dGgqVnSʳlau+o<^x\'Beɦ\ݞKe-J;?-vW6PརcQ~w-n,.cabܯ_m*-P.y@#Pwd3rl \.7X%;f}H`xI%[lx}h'T@yHbCU)T$b#ǨPK[ F q< Y ғiu ߂O}SskYa`C 7ee__c໱p@wXUM^, ]5ej>C ?--u1l q {$ם);6d,/c8G˷rCeJwgQ=GkRAs\pzHHYxkݫDG`k(0 POoﶱRɢ9YSp-2<6O]Yޕ|Je`ac2x1.Dn lz8GdWY8|<%}?M}ZP-,!xf{rx<6V7(U?-J'I]IQ| J.> qF81<^W6EmUʆH#w@7:E`@wZ T6R|Wv%^'YUӾ"B辸־ ==L.lZ!WdiA- sN _;a"C7_;\n 3U6,$w /0A!@2W? 1צ fXp7Ʈ# (aO1e\w3ۙ\/3Q8EAkw =ҧ> 6@6 n{Gs=;\nwM'ZAz_&PezA崯Y2eLX <7ۂp+q>c%+N0\@Cز"jOd[4gw7҂z_(Y^;3M3w}E(Sՠ04pu|4 3|ww+߿`&S^*L\]avY٫%Bߙ<էo-]EZTERtL?Q?kA.`_cL[޲Z.*fOHs=͔KQp,k:}QJQUIB'Xɥ]{34UQͽ]oLW~VLqi|VT4n7 Os;ZHe1LpB_D*yD gS`D{p9XugX8OzG'}/@./=S/ W?Sk@3Y`AjaBjQn/Go❊wO ov$~}Yr!ݛOig-iE“aBr+t$_xI|$ѼPv\]k/ >W4U  :,E`A?jZESl:G*ýA>*m /ys--Puv#u|=P5+HTzbtRj$of;%5zWF yCƇ9xe2d׍6wIcuf xd wb/9Gϱ vf=H##g|Av{^7Z} 巇`hvenwYޟgi5۔quN;fScrNajgqb@| yY(0L],P}' _(/#0a܎1-l(/+)xtr[R>Mީ/N*?$'dV#ZAR63g )CF 1[ |UOH)mߓ"l*?1$ 1G!މq~*w"f}Cuxzq};Uu. ?Ƴ\'W~қn vzŖ[Il@+T:<,9bic$ ?kѼ7bI!w[舎k1i+~Fgq4S;fa&>3礟TyH_eC9Q; `4w1HddzRGbGvr pR,Ϙtqep4 x.s}mU"?/hg׭G,J>:m0>c> \(-~=M6>yóc9}Ï]wĖRM~ &xxFvAzw\ଝ~VȄ!pw-'8>P h33ؘQǏ D|O6o.EF? q;+%߆=7[(MX mvpװme*g Ny,k哏#@|Cr6)x(f\1 88v@oe@ X#S?skϟNȵW[ ,6(z &_)J0qb($OɆeM9ncy.B ÝnRZDH-$Z6FA'lk̓>|n}-vYNqUջC U@!Dx[ %CϪR$黎WNA5Bw5;/Í?=/VU؇eldoH:AWQQl*n'GξLN{|)_.xO8K}M3s*F f7@)ЧvXhR> /^.p/'w#T@@>~oj2^ym+p%']uDžT`'0/-moC>MI4Ҏo*^%~E^fFky̿rSMϡ6ue%(zJ[;^uH#,z~Uzv5OaU,8U08Qt Q/j:!vW.AR($/o.;i(X  _ Ȁ}z&~ L xIV29zmr:h'|8gf]1R/'YQb~#)F⽆vq 2σ~xyX量Q;-lI-?EĻ$9C%:_|Rּ<1>~GIgJe\`vpd1ʛ2~Uթ >(Dڱgi'n@{+P?u`q!S C[PHl/HbWR|R))R#7[@!(d@5]./'>řUq?wZ azÒآ2t6jwEp*}wOgLG[))BT~ՠ|ʇ!wn** =D-$^߅߯XTYxDqxKMrB377ό36a\%yԝ)iG`$wdy 7E+;^R!0>$G9M`IPNr;ÍG`qW@?J,0* \ OgYP`Q&+IԏX^e>n8ff9qX7PsۉuM#e0?2ɫ~UN58#l:58"}_{#gy@a4~U)^ 4asͼoSz@yD|kQəHӧb97l'uV-*[0-diw/dLv%n/2 r68A׆q}.%JOk"fƻю.H̠O 0JFG2$n߱|jSق.*-:W #WY\!VjMgLSȉ! `BO0\N;s3^'_%iCGgb4:g+he\,BU 䫳4P%pRg/,Y.m}AӪBs+0*Sn:U"Cq0t1@eHnl䰭7o+Ú5AB|$m@]ĥƿ~+nn|F ڛE#/C(xBѭ?oL u USg3\K~5OP^^Aye'юRo$ Ꭱ>dDl{)',sCot>tRǔK\ۍ75~h^00XXv. ;dq[w{uLl+ PX^&~G υ9݂y 4Ϧڵ̬6gg_i a/BǙj}~. b#gYW6`kS+K(D &y!*ib[C(wNnž%ϔ@l{25R`u".\ d8,If+jXxyA@!(zϟ+.#w8s|{lMk(M>[0 mgNIɻ;ܔ}YK9g**7-i[@mM<j̕Ī/QSt!)Gy7τX3=Bus?|iFyrF]u>\o?sqّ}j&wAV~*'BR'PAQ׼ cyzt2P?J>a=i̻Loߪ{ `$"}.CX9 Q7ݵ"\#z;R*VCw\qA(X&*5-@mYoViʯǎiLiIҏ{qcڛ6Ûُg 2 jPeK}mk$@Yk@:ߛ1Y#T󫂳 ToA%%+sK^5Mԥu =ڱ c xq?h9:bN!K>[ P{h8~@y{ 䃍S?z(Q_  |CǙsQ+^&aj F1}騧o[ hX-T>ʈf%\tu/ 3{Z5inKoE]jA#<_fb.l :N: AkAmxZea4^h6JeSy->.eh)rx@+A+oPq$B<|L{#dꣽЇn@q!V6BvW>lDS!:&|?x<{CǤ^QrխUBl@*0^Y5Tz/ .!P?~*[/Fop1?M@IDATɝGwbcڙ| 9#[T?a[Hy2ޥ#@mҴ𛠦68R18O1C<$|p')P%)j$'XWyd[^jP#Jr,bC ݼ=hz|N)m" ϨPh篻Cza`Fz gץi7'zgvd""pNh\ ҍ7VՎurG)9MSa50;ݝgUk&ABU̝>)SN{m* j <CQ˯:h41Y+8xЭX?d\?0g *v@nNn*B*SbWcӪZe^z;>Isxy&ӝڄݥc:K=lPqA*BC rgop7_`Gy&$83<)Tx'ol n# LbQ0כ!:c}cBcv{͡=vAl|B&6K_m]iy[, gG0#lj#d̎leQ{(daSYD1.-@:DF q_>rwhfg6Gpb L+2]UwER,%8&a<3;LkfOY<@4lnbQO-,j W ?YK/r9p22{^~sgbBi nc9{j"_h=?:#*&E=̝r.>I`@w.п^/ YQO T`@@`^S* .+3 a#8YO KvLn)^Yd 6L_*V5%s=Z.[*۞z?E݃dg9ID ?t_1P8,+y(ԵgYħC\=.n҉]׈/lwWή.TveaqGܐF(}CPPfC̝N@M(Of9r?ԟkfR_9N_";s/y-`&Vemy2iՅޞ =}>- iyē;`ryXzy#-;⨶yycn6gأL.2J GCWx Hp9Q: CeUXKXr7O1|*:s(f?Z7k/kPM/O3^юt]Ӄ pݶK=&ͬ+6ǜ]i@\×o'^2./w ;H?y~V~=j{s: αgKcLs&*s'K 323Lv eZfY ύbM:g[o ZԺ9^ @^Sl{aT$f㎇Q;̝B.yox_rجeV"v8oK+<55HQFA,OCkNҺȌ7Qb 4?`0M}9 ѯuq>aFC!7tdq$&xQHw6zI/|8܃#rB3<7rsKzOvߧ j_,o7έ:0D; N+ߧ阦|Rw{î,_և?(0>*(!(1nvqSVܳ>0mU3\{X؜GGk|U4:=V$ E>p"!Z0+5[T7ЙOX-W,5׏c2WG{>| !W}c64DL;<=Dtsw@.->vҾV0nZʑf'2Vؐy .+M"Cs@Y,0\/P[ χaOb-Ьg G#0x ڋi.i/,gA3d>!uZH[ڀzy-Nui#aN =g:ܴE哏cCz@ E9r^4)O vʣT ٘Mf*:f2ˉg  ([֦6t@q}UmBhG+3<݊[5';wh%v7=G҆r>%waE54.^ Zex#C.(c}o"fJ8b;oa>à59Re<ב|2'JB@#s|J;ԕ-ƨv Gq!Pe* tvs@!0,@PE"Ͽ`)}O'5/Ss-tj?] *39<v"NCXQn^4P*Dg7*Ќhh RĢ#~+YVrW@)0Ѫ-kv kXq[eVjzYnKA-Spj[?)nPd@r!S Mʡk*<V`F~ r@/P % \+7XPxT@ty' 32t ~l{X.ПZyZ/xEN̿|=l;nX!м' = UcKx?Af48`|akkW܃5/~ [ O6!N^Ņ5Snxg(߬V;9 ݂Ӽ o.œ˫03ܽ0EKR3=oF ec/=hV M~D *oɺPɱ U۵c6u>yxRSsz京Z`LB<s<:wf w[Y}}k_ɹ{Hg+p<:2Yxz/}}D6҂"K~%l-uB:iJ*@<*'Wei D)ۅ^fw{ܯo?HdhēfQ_cJ> rƜuGD.ݭqlսVM}v;s 8,- zi鴛 d'I{f^$x#=ӬaH0ja~p {u 9Fdp[JQH4T*BYD+HY:h,^(?$߹|yO+?s>'Wh8vCrf/bvV;(plcŶ+.r 9 y#,MoR01Q\g{Gf |8yו YF2EsmHk|_4Ȼ¿+r=t_{@*3؞؊ HƄפ߮I-.zRz~ ǖ b$TĆQѺF@X _ki|yMd`q(0Uɟ8~ܙK++_ P%v6V@1ypWK ywvaF*bm~4qQ!x]>}{ cA?%0q%0NūH:rP%3ĢBt'T-3Y.f Nw\+BBy#Rbc 4gWx/'-4c(oWgXU j,Raő Y(s;A5_:aFM؆t'`+WUnJP}uU-|5l'\ mÏ9yjW:PlAhϠPa n?Z# @=U|Mw,;;柽']@!6Z@&P ~aUm&)j?Ymvq7B)u }ۻ;{WP9g*32Q_ Z.P{/fs[gG{6纳9ΨNvjd1j jB+8[AxI}$H%mnw'u`/ЎDl+8*RjQc '9ӹ|L};j\v*տ}OW[>fu% pt8;~~># MHi3NI|^ZԵ)V?bbxH!N9B Ah;e&`B) knسKu\23!OtX@^`ypBXEžv@I`,>H'J/##eb&{t <"ގkG~Wpzmi7W?)0yplpDCe=ZH_-'%gN{$ j]xr=~t췋{yPoV;c|qν;O l<}+ L*oQ:!x.‚q0%B jν-ޱS>JD%B;7ݩԄcP:C3ܛzBssډ%n}gY)י9ssSyyP[o}Fėݠ`>WgT {-mKć_2kzS2xc.tsk1;P/$WT.4&Z<^73(k8[OX'w H*0b ?+2M|ru8~"śHNI<{(XD?}#\*#= psɒ0,KSY0pp?rdax`;F]#-ߏ2efy=$"vu #lYiGw2̽4Ȫ ϊrәμ &vjЇjw),~h@[&z`xm Kr] (q1 ؎&Ǚ!9牾ɜKvG,P>Bk2s[Xg\5 M'2$'gAx/L?nCX^,EnlHEYWj Y-;b-Z9AAԲ>s吵W^t,/7?_z>HySݽ;5u} à_P: lȤGW'm{&ހiG05]f%vSu |0tu{& S@yJHm%>;b( 3Fr|/pټ`/mز04|a9E>|fہsGɩ[ܐ qf騭`FN O? }ܺ՘T#{HcZ 3b.J% ֖'49 lJ?\!h ~%vZX ) YQnn<`Q#]gMNT7aJ2W Hlt >NNHp ~?ɇhmڏ%P-C\)``wTwL7Ig[~EHmks+Rv2ǍY-BOp6uZ#V.0`Ao#|ŞDJ.JmP,.F敧%gxEf)PVGeVm~c;UW?ɻ?cwN&` u]>#MY{2P\5@Uce=}n2旔g3V\_'|Ãó>5tvZKaPC;IhSaS^ZKB[ik{gpq&Ӡ[j8F-*zi]1.$]>gEA5ɇYU{ͣ%[epy,8l7iCROo]~Nꦲ÷>lƜ_e[v@8n}< zmT MAN{j?n9!Ӽ*L,MlUA!ty*BŧZ~*N R-JL1Mb&{}ߧLk*N'Sp)sq%(L1Eyau2Wb\pۋ:.l>h@:Q?(FZ "Ю*I |3vYyp$'L#1J򧅰 ٔîv?#Xx|“>g](@W ܟ 2?Z`L [ T]x}{>Bux{,4KxM/ t+HD;Yg@_@rR׈ L#.F:򬈲^YlUUB1|[BtL'NĎߏ<ĄvgkMPeeyC Ěg5Vxt3 )@ܕ˃xNOpP9@}VD%Ȁ|_y@yA"&~UHgq~]֝ >5df!361MyL;)Y p <=͎ }ܔ~x܍ih_M>v8[P@]y Paqc:|Fp_ą?*6~O{RV|gV~8|`ot^/ :VUJl`ɟ}v'@޹ {Ӣ kb'R|J3RU(ĈSīRj+= Kg&tNs!tvƚ~}ih+)i5鷹.ر~cd YZqR!2`0`O 0E0 /%:`k'p}ⳬaYh7>#MykJRW2Sd.h-o?yߕ@;(?]⤦oB:hs_CiڐrDxD Fw7K9M0bN>t J$^өoZ{s0x63=7u &vIONvv8_'AT i~+b)5J"@9S-8e:Vx* rպ@u$Hj+@o`c=}?v9_FkO g<'ϳp+cG~MA픈، =c =lqvPX i"PO(B|D8Z (co]څ{ë^C/ߪZ94"KvG iw׹j7of-&5Hia?fsoo@=D `F8ù=f]P\,^?5Mc$GŢrugSX/E}@pi2 )}hyz |riwq0XdO,.,hkHMhi(ڄ!Ի c;bf!#Q-"nMN e ߿:}E㓽Ocg'3'oq}Zf*8:kwۖY5gfqFG5wέ5T ٣$Qp nHh'?vޓ%"DOυ/ ׵0ioLau2A?E}΂*liA}mmitFϨG h'?h8[v'2IC92<˙mǂCR O--Tڷ4$`iٝ J/ne]m|۴@\2j ďמo%[Wepw=/M~oH.3'g%kk^.yy oeP>CNty#`B|{Tvq&aBeϧg@Yy^BB]1}UgfL ] T><6ffiӓi34􏇠Ya{ta< ZVٳ}`v3h NUT/7Bd7. . W v>]J(#jw}L9(}6{?% 9vًp B (W)97o.ɋ3WyDlgkK(pS^%;^3K5i]ۿ_khW(Ggnї?t-WclTס|?w`Rꞙ̈́%g1+愈9`P1bFQ0'@AA9 0 $$;3/zE>p{+:u)qj@9&\t@^pu)9tƇvɝ#%'/琅|5D;|DCs@ymrrm+lQ*~=G @r:S&?Ke@|]sڵ+#Qo.4@/cBhJg8F t\GCG:v;\}.8YrMd Ы>ņ3C0 ~B|@!͟U G|k-ھE lL{6Ǎ0/P~MK hUN%C9wZgbv0[|fK|F1=PM% UM?e!RϤ u`ςz}`|9{P}gz,: YAFq0Gٳ(p@W}!lpюA 2 l%y]1xņA}GOr1X&08ʙ!ױsr.&$wBױC!Z: `!Ԣ~п^0/h_ cYmwg!5T_B{Yw.} s3ɃUX[p/4S@8T {gSGz8xhv6#?Dq!3 9ױ=R}{4.@Iݦ XS< )~?se(@>]huN, []@.p~P]nx"&vtpp-8&.pE35 r$8c txil.n5=CsW>Y,bULo.kGHg} -HYv<r[*E'8C!h8N$8eN0Hz3(C|X@|[= /(p}@ws/ܿH Lpjc& ) lX,=Hw-X~*4yw*BdA]G;SF H G]=$,w<)!٠ 3(ЅcjrzzPpl= P-r9#?-ק]^-OjN%ל#:h8:69$Aծ7 ~%y=x-T"8S5ޖ&L{:"c|%.-q{wɣ= ʚٽk7KѾ֬Y?X3't^4|3ץ'J*tpT\SbzAm/Cݧzorzµq hRp ~r{" 4J*FC@:+{bm2w9|1mZ{{(3mPnsAS楹zc֠Omk=VKߟҝA=^5\;3/M$PgkGf#ą3'$O;(ۯք CϽر$4 =)'Q ޮ@4)7Q_*uV\[/}]:V?xVpiZ6e=X2f<~m>s7Яg§3?/y^qD[EonIp)3H>Pr/r8坊{kf˃Kaي.xlwv1jqcfs#rGoО#?=$}ǝqVB]A|^pK ?2^7WǬKDME|ٞҔzPG@[: p']G߶Y*P W? d `絟_zugkkW4ap=l觘Og?Z~bdzZ"Zd`MٍuBMyBtۯAvg {hk$jE%gGsX#SvF)b05Tv^졳f8p\. r}bbh=(-(̣^;0M|oD{hZ];b#!cRon5^#OͶRȡ/AY&K슳%P~4=_Ǜ IjsGPzs5b,JQi < GCdQ hCYS @ hUdz|].h' N ]O*/T/R U^%$eq]-uYC:$EC_OY>s1# ]h~S .U_YAcs)I% 'юcYPЦ:D\ Wh|+,[Po{g34=S f"*򃠲D06C2Bh 𿏃;X-7vJgv۰UHD>Cq (S"p]$g{VGaďTn!Ǘ$ O tA|Z`;W U>/*^W'~ <@:SEPhw? w Shm} -Gyx5 g!tl!p X8+R?BP e.["gy=p1r廖D)\J3ApN3;ӌܷ)vo&o/oxo|4a8dZ%Z(t`bwz2t; 5~aa7ϚK 쇹#C 'z͉gAR3t{(NGAyUEQ!js W'ReQa;{tfB&$j<;?Iq6e;ט^f;]u͛,PL24:(dT?L;Ip?n|Q'6#.FdV>/,_w\Zx=1;zP^K29< w:w_ADm7y6.4S>g&M;_K6D2o31\i➬1}G g{ًGQs݀ a1;Tpci܎R\G.zXEi?J `sΊ> ^ry7jy7|9lƹO yܥc2=iWyfkQLלG:4oi?/{xOWσ_韅mVvH z-?I*:xZ-̗[ݖZ;Cm2L-k_=ͦ̾AVFϜ>no5ǥCBT-eTrk+d]|iyCn$vAK^}7'9m20Hptr_`xS{5v?T,so_ w19w,fF|%,L/Pp) Τ\zt7ߛޞvp{bڐ\-sᱠ)єP1Yɳ"nH=վQԅԿ6/rMy_=? +㝙ft=G43~d>rB U C*S sU|U)bLHMK{+z@BSjc15;U8[)y= #|\v@|g;z(ߋ?ر=/+}ĺ)J-P >s.z{cs WU:R\ ;}MOyfr|T<ϟҿlv#h1 'C^T@=]舎aeh([4"bq{-gzO#HQ4}X5ЭL{xle{ vۘINo]aßrB' 7t$f"3,V'- M&*E)yi;[cnr8*[)}@@h(0<"elpcJ  98JUɟd[8s8 \Qh2u3 %v\ոX]!r%Ύq;T FAǶ@_"ϫ^yB'c/ ? ӳh|/v; ㅪ2n-_'f|yiLAx~9dֶHW)K,e"wOI0m5O\pHJ z_!ڸV4 |&P{l1_ s HyqO+mS2Sk|-ހ66m] Z۫$~?=7r(cDV>hS`VKGR==<`<h; ^JmvIVDU,kx8-6@W-:hah[zg< '@eHwߧ4/Z/i<2OnM 7BS^/pz@v& Օ_X˟BR Eps&X \ME(0ϣHD 4Y ~ οb&,*oǐk)bQ\w`X@1WG\"đxkJ؄ÝK|юM?"G"A7N@SΟmhM)1櫜dZQ; ux {Oh]SLT0?{03qحš? Ő 2u@JDJV:i=ί#+b_vtFk@v2c#(x̩c9~3U;7Qp!tW\)h*$ ݍ+ߙo/p<=7U4^GBY8_ϯo d'܉/%@<),AK1b=L"1j|j8N nH%l_3}t*N|r~5B^!?gt$mcavػڍcߐ}kG~Y>n3r}տ=N0[;Z?:9}-Bs)s2eM҂]|ZN#~mT򇃖%ğ^z,Ӌcj/zK%/Y73ͭY9RU2|1'Q8K[ٷKGiC&dYZ뉃}Gj]-P<בrƏ31bA1/F;2}JɞR5y3|!n v8cǕOR\Vl.BWsZM7493]R;S3WM  w!{=gYkP%ٞ0\'D WE/c3RGSw1ݱpڅ}A}f p|]18`-Q7˝ΥdhՁx!'f<Է@ Ƹ[_ѿu,-TZ ,Lb.XR#cyے}O++xͥxnlp-'] {&4'_71ӎw(u1 O:p<7qxaGN.-]f 3 'x bX1iVV ݗ#oe|y\<0b&bD)Zq cM[a;1M|%!ꇑ@'rf,97(=[Ord3tDEOks۞Qc7y qtuѽ|-.h5żG:~пxxżY֣Y/P~d{HAA?‰2h7[%jZ3%J(qcٷ䗝{_7TW䫈F ,T"˼Y^mgb k{&.1.],G[8%~ }-/o _&E;t`6v"Z_~g^%B@o"@_(^OE sUAe2Fxyg?ךݳ(A3IQD|Vp2t ?C| 0GaֽjE ;ȑ K bU~GxgPoT 8f/Yq #C C5Y>:Ǚp3G=M)rkȟ[4DuK`hF:Ig)ΪQ(ƍ6z2>}Q&52>'Ɲ_l"|D$7bR_x-| kx&J$q610a٘&)ڗM\ nc 7 M5ri'{ \O`w Г-t8?wZZT)/ȐaG[6\=śv`(ay/e1 wݶٰ :CugXp ?$*-tLV$ 7U<Tw_O@h(P. 4עIF+yyb|%1ki[tcdlQ!_Do*ܣzxƘz9:j5W?w t7Xgs B";V(\̵U#\sBtdS &ڸU (O+Cݳșmǭ!M$9H yZC_SuIߨ?H/iN w?$tGyċ̫x;iU"Z""Xc/Я\}] T%ǻ?-]LX+:H ˩p0cb!Kb6fWYhĒzt*hph^Y3mU>&F CMڈDz#Aj`=I*01.h q^tteO߇XN>̝ 6Phq/ϭa rCd.C h=h3! vE1x:pMLN\qCr|'w' |`[&_"Ha׷ <R`A/f>X LLxo`ř\CswM;WO/ Y<' P##P =\lW@y P o@9%XT,8e S/ Л+G5oYs%>)/",2mN rjBW{vl%dc\8J0j’DpP_=k8; M_N[ljC똅d>Nq5g_630#=ZCe2}K>g^ T6*Y'<5y$cfη|GA͟cq=,dt$ rWXT p*%JBd/ wKr]_-C_wIc/[9zQ3x~al{)cmylËK;K ć {<|ʉR!>+ȥf|&٭jŨWԬ5pxo>{P̙=~|WQwp"^:R'"g@F,s ~+&i?/OwbΪKA ﲧ>rt;g;n#O(9+ŷjܠE oz{S 4BN1}¡\ !C<"[ k([>$(-BSyV>e 'lN|pt'muCVܳe }bF׎vLݼfqX!1 I9brH V}9䲫dFv???F5fo]܉Nܟ# =G~ߐ+` 2,gY> (ahr޳wY}H0?VNƘ GӬwHb<sn.MKmPW}bw o+͗wk C#WO@*p+Z8@.\k '@)7oTQو6P\/0o!PO Ր^Ef#u~M@NT:<6v@$ё-t3h; =`h2u^)؅6P1@Ə66;q T{V$COwh#2fnԶcŷ~!zD1g F9(Q'PbAUeC_X7<=\2O[9q<ƀu<ɦG8)hZ'G?oTё'Yۅ|=FUJwNiu\$rG0C#or% _j wE>U!?8AÀtm)p@Bцª] bg=E `\y``BC4r鲜i =a2I+pe%P-ʟf vg?t ٟCkaY Uhi0ث({ I.ҷ Y%~BU a*T=hVq.N 0n[h S0PTEv((l57MDO|{~%IiclQ<&E"FQ UcuF mdy$)3 [_w ,Ь d,:;2J2X@O_xE}ZCE3ArF%8މAxs[˛Moh F3ОY$Gkw*g'#SS`e7Xu)6Z&W \*9U:/Hm]Fe(J4A83cY.}}t1;۸O9kAgO.U< XGfloф 3Zc<*%ChUCl,{$B@aU@=TNkh 0I`Po}QnGL \5Y4;8G@>W ܏\C&_(xu6`cKz@k',7Y֖i*>(B\Wxw=r4wN3|<Pc1kO9!Zfe^7bCs~Q wKKO-8gunpaPhX;A-IU. >Sp;j-m:2Fs[P"Eѝ5Wvnc0@Gdtr%ߞO&75qnOmZVzo_v5#1`^>;N yܟף?o$j\}vZ<nb?α,9eqsABޓnKQ3$鰧d:ePq;:+HnWCXJtb5Oή-~9' ˚ww!_;"T.ZS'&k8-IoeYiXד4XMܷ.]@;+})}Z`vW+7ٴoy~ ;hw ,G![D4t1Wv>f:,؆Qnۧܔv.Mzzd,H;ҭu$^YSzx"O=/)#P hv@>2TGG @=Nh~GSݿߢ#Ng P{&:DUrw\?h#ۜoӲÜ+DLuYגe鉩ݡ'-JyƘ/8_X\O?3rPٳc+GEpL)?EJyK+w\ϕ_c %C:dcŖO5hW'=v@4??B vi^a .}L ~߅eExCn&\-;mT/ >5M}øceHH5<[_y{ZP5{Mnȍ] m&zI#R xRճy+\ OW 9+$sjCR`O A(IXp_xS/l6\,߉~.@?%@h')5B':ds= y)/fx;@;cs?m^!{h\ίV6sI^"7ٟJLi0m<)2!::^ 8"Hf ХHT>dQ҃{=ᘎ;Q< -9x7w>2+ܦÌaq&:K^y:{[*-]Y-|j *n2k;h  Ք_MJeX@?_`^(0jTt}nvbPm# M&qh>vuumY ZAr-4 F;Co.ʐu7j5et{?N2h)Pcw<"O &Oq\,)8 #Ϝ.v&߱3 ,?--kUhPA~ AlB{ 5hri:feۅGDɷWwO^+ thfT\vx.)WHڍ7P`ak@6\$T6t]hBM;Eac3Ȑn#d 86dN h]<8gvL3)XhAioHevt+Pjm YJoʫ_qu3WNCH el0Čeav:lo)R '@W>V?8z-/|cMR&O-J;b&w.2ϙ]e`c$~ot5 Lw5xt*,:߆ӋF?USSnO(R75dcCOE<_m1^G\0 :C_Mݣy4czYκ fGG~i)*+){%À,{~֐zFCYYYXGIY_޹x9rϒC'g]PG Mֵ\h:Ys9*_^"_m c4[ DV/: GY|C Rt3a2&](%Yh[2-RܟuK9 NΦX'M· K (X|$ú7E%߭YZ:4tٺS љ27)sݡrxJ[c[VFYG4EBZ3n1scܭ2}y'|7to1VzD "f-?|V҃KkZ Ck Gv'-P5pBtBC.@=ÕM,-X\6L@@@lE љQ+kv6 گ+ʧ]: )019:1垜Xvx祧'WmAVռ#ߋ-,,!oT:DGG:{/36$`s]YXSW " ~-!@ox.Lb@th^WdFX **p& \TCxFg7's3eb؀+E7!D;jRXcsE5$'G:[Qy7wMO~y UΥe~hOZ~8u^As-U}/nSlkEmWXDi?:t?Arf~#~GᶑKrϖLTх_ԫ!͇ +hH]-ᆵ8'h sȆXN #?Ƞm:7'Wy%z9;*Zv,tF{@"kec-qdUƠkYk!=y2#;@?ͯ/xnGlLh_|Ye( [T#T$-7߮{߿1\t3~yfJ=Wg_!P2 \d%ſ4XAER>k yzܢ3ɠF^΂^6(yC'3⺭slt10~gwMPBF-(Wu .V|/0P(+'"uOߓmZ\n(`i > =mS3wx ;V$Ei< 88qhsb}=ϟE W¦hAwaQ7Y^.o$0g6[ x*K!=^_ɔ{>H 5lWyǯb)>Tg %0w&Jh?EyH|+MO_b _]wwO-f&szVYj="KVnU*c4%P"NM =ٿ*__s$ʇd|Uul_MCK(@ бx wW ~@gZ8Yx/xGN5M(0:B9|!`eoDw0Ȁ06F`t0lWEW&vB8ΥZ |l}:=g@/%0cy_ft_Mnj 9vtY00T9y*nk15Oc8؄(hcz 4v_Sߵܽl0a"O׎tc,񟬂s6c;%ݸ!6ЬgIalljЃwtL4,~8c34UU|cvvaT SiJr]@ԁ =}H> Y޲6>|#7%eWRCʊ?#.}m- oQdc{w}9m d=c|L5UsLG#*[Q;`Sa.'0Sdj$:s<B% }Y}|KI1ռ yuuG2USew? O^qL*e9.M_KzA]bAuދՂޛZlgRs]!ٟ _v|u_[/}iw ,D>J>*ǒ%ϲ.euI[| f4B’_]eB]N汗OD,nEB739R.P|$E9h&jXT1 ?Vr1.{kf6}(~Y˺|5-~ٲkUqۂ)q騤H G N  @YڑpC@< ϟ!6)$(C>@vhI`vcPxwiW2jW2/j((>n] w\ryz|$!(o6fwQh<66;tlxw 'h-v.C0-hW a\{-@x.s3VR#on'?Q|-z^VGx^g--xrg>Ty;K+6Xgha6aP<+RaQ-IzApG~@P GQԾP,1\g$MlW^8x~8NcoE]k !9˸N>6s64rzS9GzC,`Qe+Dm'VOB+nj);f^@IDATs{2w;ݑ L~;NyËP+͸Q/wAz47r|$!m=`FyXad@= '^dU I+ @$|pm3ERPȗ -Cc۱L̳S>="rp6^VxpKp@9p@7>80_-}<.LʥH m&.H(~|#zd( U5R 2mg.ގO.rė]ԓ/E$)kDAn% Mcht+?1,`WJ}L/@-ho;Ţ3FӒ=RQQk@?.:}5 {$Xp^kG;Zq8n\u\[( )"˓{@Û&  >8J=K߼,P^ 'nBߦޏ\T㜄o,S`.3?N|R.d}+3GTMH$bD_#_?R5h`ߖD/MJ!2]E@})REܤm p]CL(Z(͹,Eѵ09g]3u%Tx*s]gx6<LL9foNgq)cZ}Ap ;Cd2qj?>_J" UaZ #ꍎI?$ X/h jH]Gpr@ $z6 ŗ|n%gbr pJ0tks/j<9poBt@CI"SODe:#,xп(Mcn/(dj-٥ 8gWvd cG $6#YSGXp/|N-Y ?:!PfK SC*\w ?鄖,܏,#I C1+ ,B@9G +%87_` ̻:ʲ  g=hrH*\K e&ix?J6ZzJ{7olf^xqۍtB1rI35&R'001mj'~.*\ՌF~nI8N`ɣ|Mei_ /K4t!x~4;&KOM'~A )Yi'9{<~۔`d/$V;ZѝH=$q@_fi[d=,#y|,?Ik۳mׂ_u4VyvqQ-^3HqKr{2e(V#6G H7,hhQ;xv@?mtN 11ŰuE;0ȥ[sqi<10YPlq6NN٫r_^P؟b^7U#>@8R^4)_Tm`bvGb ef 3zupSl>Q:!nvUYތhn/`oq&Kv0(XūMwe)I,{Fg&Kwj/#)7/]x!C#lK`P'_ٖS:T&=O}Y*ha,8|Y V5{|Gb\ј1Qvw5|2iRR ToCGcH}w Et9^ }eB"P9FG¸.4%<~F5c"yFHrȿ_%`ԱhE6&}do.z޿-(FxpK:G[8)8@]th; ͝19+.fNa6p+t3'}%u2dƑHoФ|6絚 ,撿N~5'zC/.>`1yIS7{ҎԌ] k*CgI#[wd:oSo(&|/N,EAH`], gf]ܮ0=dd/Kز.YQ?SH9nw{{^Q>QO&-9ySԻ#<#i@1t@{j&`x˳0 iy#I͗=-8G 7B; ‚?>qȏqkͬf46g9_}ԏh&Avi?)dkW(w8@y PNz-D|0>IUWq;#"Օ$XO{B_ Åm?~wXLv1u9xwןW_]G  T*e0b v?| 5{<8jו?B >f2|H|#@\KpҝZV!N|_5=#BeR;MI2h!3̟Y@%FЗ{58 ;2&w"M5UJ7/8&Npܞr] #Noޫ?1dmud8 p@9 Ru@ *P8pcehwR(= xjh,] ww) 'ce,*vW{KW-]O{7k@}oř>I+6%?s>sRW6;^؉`'ػ߹#]A?bg;CʕŴl)_k{JMf1-x*<y&ͣԋ:`̘%)K?Ψ5eij9L`3;:Rj|!my^dcJ`&/cBq 3"Fߔg[l?`ٿ?| !շ)$* *ީ5t:c-_k3%ܑO q&q lVӒ_l27ʀVx=q"c;6oGJ~=uNX49ҹ3}؋=ZF.R;Lt=%W빡|E kv&I~Z%|i #v} hQǙ9i2=MHҹԼ*q[^ t4̘ޠZVDl߆'qݪ,'8:d׊]+&l&܃<%ot J$e>=t^gx;%<^8K v4 iR*%$ΒbYY:lQQCCJY} '& ?uK_H֬xfS;?Gb~O_Զf)t$d!L𼡝jgcܻG0wH%'%d]8 3ǃ#$[?ZSVS{Nď=)8@B5_qYFYbCG:e|`1}>y,@>QͩV_.yt@1!''';wKQ*(BU =`q hfB:t0{k=¡UB*|3&WQSW7X&;jAkO_W˦Kj}-L'zuYw*ͪZΥ&޳0-y{{;7R/@wx~@zBp0rBFS-= G4L`::D@@}L d.4DY͜42)FL6[ 1h[~}8hٴ kFNL4*g\[o ߯9 {=ɟl>+ KLB؊܄@ pN}q#0 hw@v,6稪iS~c)4w3mE~Ns=aVĜ:chIȖq\%9~OPnb_m<B¤^Z` #Zp%Nt o@+P PN6O zX,zC9 ]o{~koVG@ R; S(u_%! "gQ8 ߗA;@S_rC`rvmodz+CxdN((q~@+[TT\.Ϫ +<@c5I*뉃h.IVs9^ldi#p]>d'c9F.Xn}ݧï4 ,kɭ* YL{b|+w;o3~jW^sLvg,9m5f{Ϸz >`\<ߣ%x92!I?5R/ F$K pc[eG,hvJMxilm.Dwo7sy2TEyTq ƙz2Η!VWɃfK@Kq&*籩G2c)8PH &mxQ]cUU@,Jٓ`]N$" "դ3м"PVn-s]S0t.\_N}5PjBn{ / ( .h[XB 0`S{z |g\kMHp]x#r.0]$H/U~ C?kM(h"&@ԋ)$i|߉\<< rmn-` W@ :]^q'߯ ,*@' GZ@5wDBރBB D;áú^gcg׼73x Ӽ^Q\—&51>lД ƔB/t^.w; :Ѳ $ԋ}cjvKT6tdy#D_vQS_-P' w!/0\I4w F"ѾSvr^Igwa>vdPj'd:TT Fm8;៌ob`\9}NLjÝ)KKJ/S8>H ̷II#(y C& U($ {  ;S@Q@&Rgf pGf~M't_9)}tپsg|q=Iy- ]{̟$NI`.w^+ v/]Q>&e藌]c{2==>8gW7'oweȻJ ñY5N{ `'SNsܟz@%, hĪqTPRhE#ͯ(ҙO;6cA?v ,&H\Tf]"F| "$Ƣsӣ\q5bocP;g|6ңB=ʗIWgJ+&)NQkWAiV;FgD?!od"q54ӗP績TsWZ=:W"[3_Fog,屄#oLd>#W9NK L굣2#*>< z@c~ :2xzzx? _@1^aL1$CN*'^Ji]m[]DT$vAo891N82d$kRގn&ۗ~qx-\*3Ixݡ^Ks=_yf>zoWE4?0C'2v9jcfq]QifmJ|UɌnrghՒ; yn>JF+J6\;;К)rg0䁧W~ hnn;_N;ҿwԈwp$٦] v[~k8 wC>$m')_v|9;lcع*O2m䶋opQαzf KNS)_ZEl_޾SqdV%5~d߲OKOg>^+P]s@|wdl`5,MS']ڭ wπP&L~Ga.BT=3Yy"S3h}mBtv3eu-$ILm/҃+B]{.=4?1<_hQSn&s27#gbOyL8N  L#d`Vs bm9o_~UQK`|$P' dl -pduUem{eP?Z3~){#(MD;#_GȣYyg܉vWF]_xb`)홹F~៬#-,rRܢAj%k^ iўw<`|(@r -9X"My\@R,Oj 0υ]TA/YlN2\( 1Ҵz_WN8 xr%*2<-W8^'u_1_(BYFa~T[,K  ?𙏹=#p=N?rZPUؕ+{g-',O9F@a],/pCEWhA7`@~sBawY/KخV)VZv~ ʼiPӾХΑTlTH\sC*IZf;XvBrvgM'_>3fY'2=/WS!So@.u :j"t*߄!/};sW)0ķ@~O2' <ǩ%EEq'L}$@PXC/pB] ߏ k-.S!7+ >%0Z-x5k}|>T:t ;Fݠkp}=SfV(ؔ.rAY ttEw1-Rts48^<\8Aj-!Up #߹VFd(u]\^S<P_ j#O0P)f&uZqPv7uBC]QxLK/۰F=!Xq5xlzv<.CފٝAR7]yeg2mP?9y/Tr)Hm|i?2SwvV~ۓjETWhu[ͩC:Fp5XB}*;qTVMhveЛn\cR}=}l#gf(ctuPQnDLkoNg&h|oD={T,!IrV]u'R`GN=2ng܏䜌q@G<Ρk;x;FkVL@wݩ}D;q"e3%t>JRV@,`2৘ QaNrEkB8t)l5~_ У8)y:R=6_vbf]e2QP9CSW0GĮ EF$MN~^ |{O#QI1ghu73'`zT$95 46q|C]fCp<,)(6ƵG^\*[J'3BjwtF+3__!$b=\l1%X;KwQO7WOswWשѡi>Á>>Ix~W06`5Q?8 CcYADŽ;;C(ydP::Ű:|h~Q^C@+ .t[ʩ@n3@'3ySJI;߷y].Gk#Cy7C~ļ5qB(QO_g*]buBrEŰH\LMl CFO++0hPkKCX?-F׷ rbF&qrBCG"@C b-?}fe"H.}/i\1{crHGw| x5ڕ ~_N=:oc[COtG܇ o/4g&3} y/%,#-$:[.P? 7P~ , "z'5y"(~pgxNJy+=)'a)Jy7տ`vjf #0;՘5vG;*U2H4H\,0P^48](.~B 3OX8ΫZKl~o0Exr3ʹZzM" twῴGG#\*= w"L=QOݙgC4['s?kdlI/iv3<3i#8ޛ|*p@yxGUJrs<F :q -aq^,av:OS 젦 oKU޷;qO7ĮboG k}f^bzW~o&0n4ij?&h g\K>YRƂnWgZîۑ =^ι8yXo6 a7"Cו\{}ZJŖax#48.bww  33hy9g<ϘUS9H$wTj'xi!qwt9 ;݂ꕝQ8G)z&_/8gT9\ƒBAwxMnzTNP[ڙI,; Fj ˗V,CsJt!ft>C;ʋשS3ji'/R$'1Xew DzYu.3wܓvI% Q撌?lו&jo :'BzL?Zl4ں4œS\}[Kw > t&ryq_~l>8e/>TY!S'??+}R*'ぬ'661_ћ_`ξڊ}+O4BwGOpFHH I2,16epG0=l?-Sٚ5pA^?w;3/+_-ZT$۫f/"OHrY\\dMo\0٦#)m0XGK >$X.4}q8>ݩ\ si/b8? ,a/-s^x2UNso){W} OxgM\k A~}'AB8];!7e./ nΊl2Nd?+EUُ~l~dKPB̩vq$]͏2_GfNO8; $WZڴr 76@;X@5!@y'-6:{j /cLnG=͵=I,IОGyV? R=dQY/\3NE5a6ɣ3fWBAAnۙ!qr)%V@d$w&v!%1,n}]e IHcʡ;?Jē ia&4GԔrYq}ڟ??YWsi8ڏ8bz9 t`4*a}hkpĬS!B}x.peK`;\>!Kr"IFP\f/[Xs-{#gS."bY${$Kj?'!) &Zq8=E!ym'ÏBwmzO!i2` }<@Ts/ΒOt` ;e (ԙ~Vn&#r%qw'L w `!B^}p\ 翜_;1=\^ZVPHk*Dh r: $T`@zۚ+^)D Oq { )m)MuS ~o'GȻ.9"aS~Y&!_mEP~|fzaqM oSʎ/h7k,Cn[dޣ}\''>(oD6(^mӽ`A~۠`/fDֿ/Bto,Ehl,Kj W'BM%wMjי{;^/'s߼.xgYCyIGoz(=FWVY^ޖgN|%6ͤʪ^Uٗt s#(;mS8»B}neyw{-97ЏOrwύ+{sw ds`əs26Ѿ]1)-&)c"?4ww f /q+q,;oh%c`7U_ԵAxRULUf,dߔAz+~EAY@fz诳D7otwe>/ݛG32}8A*\oeF?=7?r%ﵦκM;7Y.{wǝ˪kjiKkoz%aiW>~W2fAr˯l04e'|E_{VA{elsOJASiُ_?YTN\̮y7xw Y#zob>51wN.ߚwK>3[ɬo%" Wcg?H;#Eaf_\A| n1 GvXOQKΆT $R<"Ũ3lԢ{yd;ideeԏlh7p3e/JQQz瀼92HOɷhre;v#{NW٣^_n#'Evs,g,7՝n/ǟμxsKr7;50lD.#gܞ32wJ`>$%W9aO vÜy\E~p_skS.Ƌxո< K Q_ = ~Ewr/~v.*RO(<1G Uy99v{n;yd>q:7éנEP _8%Be.8o]ifq$GjB WA6R@I"``v %|V OreZkW6B_C(zrL߿ПRu/k| *3DÝZ?cV@j94.[*?#qؼu+ypɴp?~{!B{w'@IDATFe]^gk'nCWYsqș 59Gq~I6ªMF%"Xj5,(E1e|غZ8k@ygv) ䷷@%݌|AtY#փⶌ)b~g [Z*=ϟik%z WCIx47<VI: z+W *I N@Y/^MbVz"$Gz8X`#/z2rG+nT }i!{|ftaQ;stw_18ERǶ Єɲަ鱤\7K^a*{<}M6#<Ui>ziocHna+Lc\;_aнyĚz% }v$WrYhArQ(fՉ,j9fɠ54GQve9t1)Qk+RK^DbXr|x4ׯ='uu.k1 7zCsΫ}\ȭWkpa4WOϳXU !+>U3"ԢϠfwf0P[PV_ƚqP_${cC:,R43wJzF&ʀ.=8>~K7<%J'64Ke]uqkfS2o4B:ԥ_'j5Y_ (/CikGn{U+;z82A]YQN9d޲ZD3P>2+x(/yݣ_D̼м MĆɠ= dAO>&olD=JO%KW}LKvVeoIk௎ b8?>Fȕq_])E1 w.|)_w)qVԊ4Pg^Ǹru Q!3, ^Iͻړ ?{AJ,٫>nu{kFy[H*3H O [{l\?F:0o[.byWT-8 mJߐ-wp. +XYm{ΩNmֳoIW;0#GL-  tz09Wjp #9 $DTcj0,Kiwp@<GW ܿbӼaFzKCb?H-)9iB>u:"1>\ۋbs4R#27F;jyg oKrrCЀLḞh̫NV6ìe\*XD:U;ո=֐k$RNp; )F`cA_]U'eT 2W E@#H#j 9KG9瘹PƁkG`wotDz{3fY zƾ0[ |o 3Lw,w9tNrArIp3g̏%p)F^iNvskx8|u@yb͋+ ߽.HH_aYHH?z"/ѷ`A6 "̜㶃>hݹ?iNw>בL["oܸf8Gg #>|*4.~.I.<:?"@{# U#xI" w <B޹$h2?C0K6|P%ߛ(3ߏ xf*z-ߍL?<&$rg<<`32R3..)=K^P $sh H#W W|Lbxt󞏬yDrEgshweK=G'&qqߎ ^ k(lh[CR <6|kk@gXlMJiSW;uV:)Ie8)V' sN=M,MC-Cy5zAxߟ9\xr턉?'C~Ï[6==69Ut\L4W%N(h:?B8\Z@Ot"hpZ^짿! Cpb9W(`*dy!eajh k@qzIwgVoӚ b8&.WEeZR4g\ >|qehCk9XtqUKQFUa ]ÔU H;ٿ:p/yz_ hėKm<~% >L#Ms S*/(WJ^ \[XSz'&snz>0] v:YEuuv~k*[ߡ(- RHRLWm<;q/!rAedzP3W{zm䁵5rGk~sw,.tf|;(gZp<0ޜX3_#>9?۝8,6y(izPx텊G$9|NC.? 9䪜L?be|tXQN\j jd)L )(|pEy Oe|ni =F{%o3ZTS4_ 9qٕ)Hw@s+L_'|+x@[>ytR|ZZ2߅|PF̶uAH*<8@;.-0gXh3ks丆!`o?nV01lCk,?߲X\Ktִe_8&iPx? @To<;& t $ *Be?HZjcV'|eu z{| |^u D2$"ӒOE>*G Nۍ ǐtߟi4.RHwRM_:|* ' :=\ Ug<%1C9r kQ𧱤O"Fwj*&aGG9O^`\0 xlt1CfޓvH0.jp{@9$ P^L; ^p3Q#ysHiwW 7IƑcmBiQ9+]_YIh' [a+'"}Z  i| #0IF+TqQg.|pm .(s Bh= Oa0ˇ //e<94T70T'C#<ܙ:oI}^ NCW̿zr~K`\!_ <|dQ*t$QSragz굃ey.@[w8$(Q6~TAﱂw>y?x>_ߪ)8۪I-h-m{gd(HY$()g ['>oL~~D#cȭ(xdA,j>3=[CF Ŕq,)= ]ΙYёH 0(J z lwRɷyW_= RUne DtvSLj0`y&#^6r8{4:w[v*JxR*YL˥H)냞RkiN sn'3໇ù|ĎH7x‰M V뻋 zxHeG T U_ˋԀ +]#,ޱDE#FKB+O7 q\`=t|Їof rZI\䚌3ˠ)~UO|RﻴWbK]Ӕ䏃< " a~Vn2RLW~X6 (״=̎Ϭ8&!A[+Tw? L`Et>8A`rʏ\y}}S=WxN Z:g6/#>N@?+0)wyYvHхKGoL"]vٚ7qX y9tGA_]< z YQ5%NaaCҎv .=ߏt_$K(x4 g4!:2EkG8gtUǂ־+X %a/Y  f ~'ؗq ymҸ[-Lۗtu[_ҝ9mcUg$OkW.}\)WSš\?SdsOWA֛_ qì+^M/8mՆ$ݘ*/A/&_ueIe֑sПv%Ȳ`k"aʿXn5bp]?rWoB6CJ!A%_@ EGb^}Ɨ}J? DNzN"o.}4R׬"j5O+AEϦ^kzkR]+ tQuۺg jwWg\rp#r0y4{DVEiA$E3j|F}`X#N6{ODߒDQ:-t؅]k)bKu4]M=֕0 WG 16zPO͡b@._X aaqt ivMFo>e<`Ys1j_ LsYޜHyKM ~0-u ^Hz=⡞-Wg[2יzHLyd ܮ&0mX9((GԆ!ABUJ}3e@~WZ 65ٯe74DBNd/g+0J9_' "PS*ԑh0iHTʯJޛApߝ|^7 zwe ,h#𼶅Lë$>1dyƥGO6LW$#r?[yDryG; onJ]+F K]-໮)WIm` =&-BEVygz53g&qhyOZ|5-F{0T|hh(ğiihjre标D:+٣nGSS5WUDV`x ;b.Pp< 6bJ@rc,8 GY8oL};,bo70o-Ҫ|VuTlqd\# bjn_h_@|Bhl0X@}='TUN ^ &CjnIM|Sj=y/RiK!0T@: BfN>%0`>/`S`Z)=9E 0)l_rhܾZiIyEk۽Nt Zd*N8|꬛<߳6x|퐼%ٜufc/c*7 }[k1a#8=כm i@YlQUPk|Vm~E s-6n)sqM SC]qLlL K#2hVZ ;*ӡ{1W ߗ=6[guL"|ޜan҄0H#,<:Q廒p8rOyjI4HK`^'VBQ' n!-Ɠʩ@>HCLgi_p Ef2?e)_e'\gYzW'yQ7}4Q ZE',o3G9k!@>ȵؑ&ϟ>J.x~EWu x3]w,qbk90SUh#|8@ckě3Hj>[`c@>Nh w^'Y!OIH=!h+N`"T1'W}azǽ5G*22KQH'9󳿗!`q5c/EuD0ox]CХ@;N@[af26 BH%*_W2lor&ԇ3b5k'w:%|;RA,2O*li 9ȥvE"z㿜l\O\<@AUޤQ;wg{8 v>K78gjg>rxrV~dIk%:[:23ϴjEIPN(erSΟv/c\̐('59ώk9%Uyv__$]w؆Kr#a)}V vO;4,v!5 Z߭Q޽)5 gB.'A6`tRbOm]#J\wʚڣծ ykAG7ޡI%:Š]\O>Yb)c_e S2Oƻ>y[V (v{6y9 T>aތs \y=tR0.@d@<ƵWQ%RφPYEj=9 A <v oy?ho>7wɢ=[kt0ğL.j%^5_~QS1׉*(X,:*[+o|YqλZ`<^}~G:%lnV6C)Bfȕ9 ?aN? 4T(#rnm(PWOClC G챳ml`9<_Ԥ/ Zp={#3X_]LKu+"(DRC$K#4f=j cNux6L-ה8ß9 @J;1%QBU?m'RGi_3<<)%U kW i>L5c翽w}>:M+=f.w!6&O_!Ѝ"x<]kGL'D.U*,V 10![cO40sO#Stpwhc;Ӷ!QDNW:Q. ,RaŸD t#@9+]^7fj3s0r17,^TpyYU7ӝQs? RqȨ8 v4\/BٛmۑPzGyv $*Č#7?+P IUy9hNJU)Y cKBwxxC1r?{͗! NHΦ|j%)@I N ?`8SH1kR} f[&N|/crWvvq8ʾ*]ݘ\>#>]VG lXJO+_|{ph7dPC[SsTLh:ޗxn[#8MY58Oɕk6*_w%vp*"'EI`)ohwh>6S`ީzr^q,<:>3 )om=a:~h53A6XHJ ٲehŗQL:/j]v]<…cVˤ]R[c¼XP'QJ7xx :(TkyM@g=dZ(_D-ysY38D P;hd((T<\G0ng8>JyF֡ VXJDyO »dN_-GppOxZ,nCl=aI? bJ=!b4Mຶ@zЛ 6vӿO](q< L)[1 ހpVT $^R/|򯦿s+sUqCf[;=ީro;@}5(;PH͑QHsWx7V$ KslN+P_ut@-h(Wenx 3,:^ơǂ@'6 s(yhtE;ϜjLI&l;O)s%:J.s?Fhq0˵K*Bd&MAm)R'~>Wz9>!^ǻ 3s3O3t4'^gAncVoݟ%oĮg[=nH}Q0V)LLfe\(g.X Q`A-L ܏΢p EP'>N\`HĿ Bp>HbAȇ],z\r@quw82t # Dmvj2 hSd4_;5y? db鉓SsL_i{[%+Mc/eΚHЎ b?Gf# 1}%i},^O#[ɨe@\|-C%S[WS&f*H{5W5a>0Bcr 'OrٔHWzD)==]|a4h:2Eϋo1&Bd O`:G~J/3_"zaw@4o'@h g76Ro_ lLTٵN gi^/{lN+$K|̉f#lߋś~ѐsvId9g ~o*r A;>t'J|;hw5QQ::ZGm潥;zXdOr႑ie-7+YF}g*f˿V- [hl!Ez'gbtyMy^,YL/g&{&z1|t 4gJ@s%պ?UyFB>ݙy f'8mmw?:/!gz~`)1tji3mwu@!'ԏw-gPwϧ?ԛltmM7OMa}S^ktZyWoKR_WgDbw/+z?xnH>by ϵ,v%*޲ip%~87e84<_7V,En.}j 0]*g΋#A#K^eƸ`{O1GuOsO-)8ztTPzzδʠ%{!<[$v 3[H;OD~J 'G7mδߦ~IvRppUy@Ϳ,z>d;̙yOo8~ݳ44h/;cQ*}qQ.AaPgyslHy;~_ +.x F7̾%XH{ ~Amt^><@1ɀüeh|4tfҌ\;W֦\ L>7NAªm4O(|urx){Sf'ߩPq̘å=S='@?='P 2/X .e2[Ks鼏{КO̗HMS̿gdZCcBNq )MP:__͒|s@Womދ+kEG͙)Eɓd~`8Qܿ, gbV_- 1,Ş/d޷>?lF {3ե\W ri~2l5T. k@}] >jqd. Iq RpGov_x@nH_lCב^G"-s0g'+9ex|6+?蔣ШT6z2ǐll(h(P>'_t=v~;OhrO1mmؙY3i/#CKr0&&o`GY^ 3<;E ^x=ya+y°+ pk1#ؔ% NU#?mmt? A|#|࢘Ͳ*Wm+yCA^.+z{yN=0jMv1om*{Ԟ =]iGDD}eoC>yz>G,g_ ]WDעh2ʖ#C5 4c_Ysr0_etsEǥʠt:ֲ7vLn@CeP ߳{ގ^ $W*[ ]O _Tn#v!EDOl 7Г3أ.X,vǾxbCߡemBl4DOAeɪ5D!Pd.CI Y'&Ev+b-QN(Xt{e>]ZR'C&p9 5XkBl%-[P~WCP>jOt=CCl^{ e;#O(MY'E2# ,0Z@/p}B~#>&D‹'nю 6Iۀ~R 6%L`Ƒ|x"O!,},W.P%N/.2;uoA'*|B|[3e\~:2 6@2Q_pFZM/Px ;I=葿f'sҠ2{̳"KHe 7!GŎ(ڳA2otwsf{+<%zInQP~}XP/VgfA]0qpPv>deFwzg_^86畟[W/doA+4@ >e6+cx &(u^{ΐVM'Oum;M1{B!|ꯇ4۫B>:P sIJrO'</)^RЬQ>3ϵ]ʸNC>_>5`:{$mv犏^У|3EOo你<'Yf|.i -x }wx'/GME}b@kvrt܋3>Wj1_Q3YzZyc  #݇׉?UY's)4tHvs+օ%ϛړP ;s[@U.WDgH/Ug,i" |䮠V0-q:DTH/͗-.'n*T{}U> a|_lfբZo! +}z郴n%G,َhN/ e{?8GdV9N 7 |guoo4BlrJ3"\oP\,S4noc'W_`{!HXgC't?%HɑrP#os.YE2HC7@;"/xT/ qov _'}x>kKc:2HÐP b<࠰d^h#,}~cP;v\wwH}9zL$e o>f;7,3#{yGϨ+ c, .3/I!I⨖4«ZziƏJK"z[,FCbE?,&kËmZN>~@R<ՐFT,d>k9xvh> [ 2 T;CǕ߿@'=!eDa!& k1kT.K@[|[6'u8DPZg-wf#ׄ(6}<lz1Z`Y:䍘z3JOL-.wX|/])\E0ԫ_K=|: |N⹞hi)'g0.]%QHS2O83;,@"F>MȅHɋ17cF}w&~ksC| x/3;Sr >v|:>MW6e eXY~:(5aO@ ţRdθN*, 0MH,3֔_a0Dt i4M " q֔ΪǂA\u.lI}69ߞbo"~,JIuI\>Oq 46Y5uC؀A}bNkz24Xv\m1׹ 񙞑A\P]B"ptŀ>@^('◣`MT*;_5۪be EP?4[{_/YׅG~nε8o3~ A/gbh}] Hw@ Y|UBrl&P} ,`}{}@9(舡l˰@{Hv7/Jvb].0~ T +++qz0,_w S/!MTǘ#Ey{xB%Xο/Q v墉 ~^`۹¯O\?b8Kq8S7"mOH{ڶzj>/ 0ViP]p+kPU'ɵ'p[ȑ튆05UTPϟ${ [̹H[rډ̠X@{LNG˫\ J .zRGӨtg'j'\QU?L s{]M6q7j^0lڵ8Xؗvr8;Q~Հv86@x>;?WO$MozFmT[!ҼiU#~Y0<$ hGcg~9 q4aOET$jKg;e/w Z?G/Ў,U1Q.ؓ&$hz`dkl>-ݭ|"t::;. j[5hW4*D3 ^PArU+6g9Ȕ0Rpƣffw+2&m F62;@W'>G C#a_à·uT^!>< Ɏ9D*JoXkD{uh7 ܟ"&x]#6[#!owNb΄܅ERk,b|+}?@KcT,7OBbR;gNBn1Û`Qo;n)yӶ\XEk R'Ğ&ϐ/1h#PW sLp9)f)L$̎ f3:8ԉ.uD\֢ ic;'_{2>=}iu/uG1.U:W!Z7s%S@(@$CR]kIm9YB`tg``]Gj%L x$1:̯$V*cCá|KD3A­x4,^]ǂh|?~/xTN`{_(ITu_Vb {o41_xʹ p@}kR_{30L*WAqaKCv>n={^ j:Lm |k (EM su A'<S#eu)m UPv ̲((c93#~S{>g٣ zK!_@p3 nSRދ-^cWW 4Ry>P?;QN$lOsW}q=MX~=69 qL)ƑK+Z] V9@"w9kaqEgr7qX"{Zrpto;=O1Sc=Lw^={8Iq}+ZD9"GdwsCMĹB*ge C!gSW`K`J M_~ 1xz'2@sMd~'ONh. oc}8])yUvjAOZ3Z8..2 [*)?vGr_T-90cxCv ~3Od/@A;`%k|Ϸו, (Eʿ[^}T^j;'˾|}~ԏ 5A75gjefxmSgo<4^I^Sdn:J"h<RIKj(HN-(?<D;7*yZĺ{O8#߰l̿?ܻ&Ybk0щߟ.\ÿ[zw9D.N{YHqsdiՒCK) <{l9:Z-FP}eH& kjl]}=d5f÷U^>]T9i{%`-I/)9jjf^@\P%e-d㬮(V_*/P|m䡫g7%W;CLttϓ: lgn9ZpB{A~y\eL׶E&M{3.n5oQG1U4wN2=Sе:gGe hՋ_1õVjXywАyFc{&d/rjd@z$tÊ 8Z*'-"=d`6[;~򘀋0؝V<@nA!vj㻷hN{ .ݱkm-;F~l;Lmcg}^c6ua8Tb^q2naA攣I,H2svu5+(,3O *~q<jY.<ưMjòbGsɇ Vג7T$C?ީyL)Йz }ƽ:Z xCG6 7կIşm\7s~6iZ)Z D4OyW'z znBO¦8٪x/1ZK7hCި_|MS-If1>\xnÊdGW'0.XƹZ_(;F HRml3ϲ!6 (w3op/|o˜0Z/Z5^F+^ɬOJm^X6O~1Wyqh"!^c=4i(l@1̻ L ˝QẲ )}2ʿ3F~o enӼ͞[yR"躰vƷ<33#hqn9M-nv2Gk0F/fH;Z"ОyĀD>Ncb`4sl*Q--#Eo,@7ceF/uj(*,|K EwLᓱr PDzstLG35`2yР9orn ײb YcРfСs ْPAz="ܓgw'q<@Ż-gVa*G|_k{x.WGS"eK?xC A :D;oRߚ" O F&>G@86tSУR3) >0kjR'?*,H)4c )ߚY~D*)Mr^MrԓC<*Js'xe{ בKs@(T:Ř[1Ϧ?AN,+ .g@eC/|"=n;Z{sx 6~~ݜa?FHBu[zç|< BRSH?3S< A  -"WK0w@+0nV8;C~HXsɛcY=b7J+qY5WqK6k?̗ZCWS.pF-`+{H` ()<',Դq:z9`yS.H&h( ׁ?:(")gv4 !Ͽ)(kTU_e9;cSǙ+%[>rG&j]XWTQ7b2 y~>;X5c_V5r=>M,>g}] s9;䄼Ͻ\w67I6Fgo^P Zm/Qls3j ClYp'1ۑˌC0&h'ӂ 4-x\ߑ%fS/Pw\rvu1i~2ǘE/&c 3!RfPgoclcp\˿yϫ͡'^guB×+G/7 ӏ!_V!kso8x ܏.Ӆ,WzQ0:&J=Ǥ-Yߨٴ\:u>ubo0=nQ>TzEL.N{^noS3;  5ܨd#0^]YRBYKQ#/o'P·  g~'WQ_F OT.9ko։)0y$nxhە )Z0s>k_@y'ѾLE" 6찒K&NoyIN?Nį24[ C3sX_ &|4< 4|G rD H/$)FnϾP<`J9wr{5Z22w>He~Iepp0ԤS7rS|l@g:^z7n]_ _vQq7V6k88gICj-{ _?כe Y*ϾkF)$V P/ K~*@;8T?wgH :48_'s=ό56G0zj0P糝'fvJؚ~{ A Lz,B@],=ӼcPMR2_/6]зsX| L>NANb߲~=\!K@4K`/xܥG.Ra5lԿ9摢 {S|_kyۢfy$uj g#qw;FqKý9ϳ"YӾi Fk JB!d$PLT쳖VBdNeav|Urf72P[~AY{pEEM\$ h{W?{nة -M@57AQg_p'2z,JSFyYN0nׅu%P01}Grm«a؞t!Zƭ$=N;~\koI^'>Y|*-|GN-+JG6(~sE1[;~CUȀ `Ds~?C7Jt#;`Ab6HBs v+x.'ֺd};)8L 4x>6~P>&Jz!Ӽi7;5,d Z+7:]؄v?8O'szR[|@mz Z6 jBYO|$ZN)6ةPx;zL $G Od8΀ s\st$'is6*t6 ȁnެv/R3|w}wytg>Z#\$}ZxOdg4m/8S]].5ń2eyb 4[+Ʊ-k(!f~^{hαhJ䠷e_${0=u"1> 9|76hZ׈<ldp,?06Uӷ|<_-9UH \!~_#u@>80v>cBYB m]W (4>ٌhrϜe,$&-W´,RNޓjTb3c?SB^: .𥐓<,hNӣ~3ğl/E7z3*8o x}HgmY[hR\rRlHď %ݟªY!i>lC7mڨ7%EY^I%u ߍ%;܋igfG3\;y7jC(k NO[ŏׅ"C'ZkML/=o3iSa=;p݉|OVAs5''"esq7B]{ )O TtM|-rLijA81/gr.`гQI#SCі}Ihp 4 x䊢b76hr#I'^MhŞ51O3N@f1g£(a F xb*/ךPB.t,M{BvzԶBgxP|uDF+[Ctf&POg ok2B xC)>`uTb>^'AVw{SW9m&ݿ$)&Rtfefy{~WC¢Avei(xM(;{f~=ЗȄ4?8%UќsLl if򄐳T+K _  ;F;̑*܊cAd!'M9EYv ܯ5ij^xM\Mi?S-^l8OxG8& wN\vFv \u귂Ǵw  @zr#`~7 JG0(K({L2K_%P]/ s~~R`M W ݅?)ϒ4wmeڲk+S`4lU*Mj|h@{go/A1*:26QOxuR/Ҟ0E1' eizOR uTI{^L>wyzy/~9Ns ϏOm#]R'֜WrR?ɍ[n'p1z=H{4+䱄 e7ѧ#(JI>kVBʩQ%7 Nǩ5-jwmwvIwrW{awk{'z'$1 >n~H&N4MUpayH|aҿj[BI}W;2w@?O%L'_N;y3n$ewLhF%K<i\(`|PQ'u3J-s8M3i9zWUm|t,L} vcZĞ)G{_5Ny`$ltDޡ2G_++v>_sf;sB+( k.UN5ʭEU@;ף w%s(I|\o\W:;ocStA -b/t8(J'ʋqF4(m,p *ǐ\VɆI5݋7Dp@ dJ^q]|s@)n{w ${@ ̏72MbȮ [Ծ\?'igoc?2?{zd'<.q y/!wN*ۈ5 xIϸfq)9F| x6̝@f=`ۜe_z_zi30?z^3A{f^ow^:z>1Fldܣ\/a % N O Gdȗd({8|@In"P ES:B〖gdw=\xzspnGkfxNzl R\1) 'm;"?TY!vb6a~BPfe9[ _lE QM P/ohtT}IK=rH?q/ {[7v>vK6u7J #j?@ż.dg_ ;;CϨysUwªs {Dמx4E{BtƔm 0NYABf r5bS ӃIw ϳO@7#]mfGCxgB5<ׅ(2ȢE@/{; Ѐ/ ={8T8?|,Հ\l>{F]+ۅG`4**/t2Yt;N)0쮅0]* Dm~n:¨ANY_~u.N-ZHӠ4_,t(wa'TR}98V W!wV6XᚾW wf:'n,* ?_`}BA wV;xnaEy>/B~]u  蝆 7*ϛ=xh0՞f6X ֬ôzq@X( irfrV~j}}K\wO;/ .tGce;ᗒ0^|$)I ;U] ꍲI)5_Zj@%7yӾcQ$gvކ^<_- P{~Ne웆x_;  ėqI9P_aY85z:%7oJIs25?3xp~V|;γjإղmgt#"?]?|gQ?ߚ _vOg -=޶'a-c\Ë,)1qE)u*Ht:WG'ʽ _czβRd.RD%!z<R;˟*9 AK 7ktqB 8zu;d=qWs3=SS7,. ŋdнxJ3v./H}u!y~yj#|vTN-AJ;wWTn ږ*NP @VJ,^]@R@Z,P OngI)\@4I]P'#dI>P`ߡhEn\C,\!˿ԻR*\D_9ߧUZws) xK4qƅ ,$O?|O=-y+W!Şqx愵? ^ٻl-}n( :%ȹSO"󤡟Wҿ'F2?ls:x5t*shkD^6wG9ҍI˒p}~lTA+#F#h#E|(O= /2[ϕZm`*#?3+ڻy̯\D ?hkeΤ~ U_6hV^Ւ"7K,/n\>i>Cc4G$mrTY('%'Ѱ!Џ _+ D;(xf_O"ZO+SiXF8?B_HĕvA"12b7sj`BBh+;6T^v24rEXq/151)kr\ }?ٛݖiuhl+_/R(Xӄ)؝C]b0ɓCei:JeLshuO ^R_N.(t,S+ ]g,S\pQ[ sGZ4e)?J\DhOgݡ y>Dks]-UF7zB RȷI\~uiDpTIެ hǫXAӂ"o eօX+hD^ $6i𺇀7r 0@{F}Vfa)?`zs}HуQ*U*VpٙFsP?[@a.4*dYRl{Nj7R )gQKDz{WL'aJYJ}w_c|ޝ-#,D#7nr8&XA J)OieڝԦ9E{ ^: 7iɒUәX_GnqN㵂G/= +=t%pA+O^*އ^_gBw  빞ɞq:<.P96Է?amk32)وyȥݬkzp\[Hxz9ۋMc2#/jPm0AKG{jYrƿN`DL rbg3j o"ևpb@mZg !9\ζ=<bB b.RhҬs>b]*ޖ,̇$ͪRL{a]aAv3/@ׅlK 6P)eS6P2BX)*hF~Tr\y`@= c@8_d{Ax2}}m߃FvP.qAւ>The%heor,hRx.nl]h@,p@|9p ݏ*5+^w&k D3n,| {Üo>sqjCbڍ͝n'ۏ4#w!yAC܂(ZʴxͻkY@!G\X%SioyHmYjq,N޷nA\w d9|#x?g'h]Cװy_zCFHr# 3q_wS-v"ܞmµ qA&/ ^6 p=RGG,7,˕BQ.%H;&ixvm# , yh"^ |5xISy7xG^!NL4cxuH-B$ivSs73|x8OpƎ}XX)؅XO,ȿX%n!h[ֱ63Gu@yS[~@Dg'{@.~+U* F?vsfΘO-(3wvETIKPqDq^:$hލ.oǚ:!{'E%.T(""fTŜ*k^*fP1bLD1p # EADrޝykvA؝~SoLwWWUWc}Iq^8$ T@x[>-z!}ς!c\?JÛ捰tΞ=>|r,֨={Sݼ:> Nn<̃6ow{’KI[ޠ ,zÁB{~0?汞:ż)h;ʝ"/Ǥ/^?޿|*;g*WĞA с[F՜' +E6|-@;@"0$[A-T-Y}In(7}B|kZGELaMj/e kg3@ͼ[~)`-xqj:K;W7v$(D]N ?rw.*PnԏP[rʼ<5ToEf9n Dž!W~l.Nh֛AOOT)?ikZum3RwQ嵸/Q;{?T ) %@oK16A0܄r4B`|Z PzOj4NC#ܐu${EuӯsWqc蚵4{OAv`T-b`m A= ĩ̯̣_.{ǟ篱|57mo=D}D( :>Z V*G aZg3c\l%|v^*?l\]1ۧ@m:E6)E}ÀMznEj ϻǘ?)jՕZX-v :7a0zX2I4\}~IP? kHY ]L:1M rfv[(oRpa0.h=ŎiAn9jaiNx^mÐ`KfC4Pz JQ3`|sbLxΛm@Ns&"~Im';ʁO?NG5N`B>O-M`A Aa@pɑ/' Tþc)h7gğрG|ѰkYJ[2 ރ6lpIqqPziw¤%ۑ8BNl j'ZviBPpiTs-Y4MnH!'r`F)vb۝XW9F||-3Ҽmb$Ogљ5%w N 1K7Ň%P#Ȗlڐe$gݨEVrB%7zֿYfAM>YYu-_|{٤exhk?\vTKL)rYy| cshj -D^Oh.[4ð<93N$|7% zwyᖲlB/Z_;  7 &5cn!BNMSRָ҇0ulddA5!UOk,P?o{)哠(߆tΊ&RYĤx/XWnh7c΢ܐpz׏e~a,E?摨gSPs^(p@vq<ÅzaT뷖Nv6yԢm~Ajn튿59KDZw6N4"yg(,==3=2?;fN+?z2o䈢cmY ٙ΂go_^ҋ}CZ`8ZS./G @7 ?G o P^ UNR/HqR@8hz#ż? r 2/9\n TCN˛vƏcʉ#Ts2 Q/w'2Ya@ $!z7~.iech:ԟj|& so[ԅft{q}yQ /w5}e#Y 1n#hD\zA9skh7ʜYNAiQcN60kPC41Q7 "8LG3lӑ=1.<ӭ /}Tċ3r_EGPdCWpg%g-`w?_?2"W2 o~'OBh4g@ ׉;OD`&|kSvL2ag-5TIF4uk l`w{c3[i|}9k߈oagyx=CW8J_ H_x@~-( .D;ۅטT7JGj; 0HgTz+cwq8%ŽpLh}`b'?мaSo{?ȇEP}P!ڗ L4?!믊ݜG$3/aC|:< ]nќ u-?~0͖V Y D(p2W9sI T_2M M~!rS9ĕ[7sd)4txS/w0PbЗI)I]5y]3؛ӆM;*2p}MXg'!ޅb&4U3d$~0 @Dt|~bח@?TO8@`RvmbA.0>(tH rgy3wF{=`wH/6$oxYj t`%O}ΫFl#"{7bJzwvh^Q%/Wr|Y|XKTa9OW4M#>uo@ 9wnTmE.L ȀZ3 Nq-?bKeӯvd~h aa11# rQWY2JEoK7,Yhnf(vԳ V_7Sߜ E2Րk{oɥ?M]~$'/Mzו#p lI$O[p2uߘϝ{DbK 3K;1'ܐp1r ߘΚE)15oH;9$;p쩂wau@Ly_D ^xFnjyLaefj֌>-*ђ20hߎ'Z7> _Uevw,N>D;q^;31ό/ܷphi5M !&A.֩yyǰzw6 ;Ky[ءnGt[0&qt95g%~EZ+* Hc{@9LHǑt@}*?ܖ$=^9PxQL8tT|Cb1_:倷P#;3X}-=ٹv/YFﶗE9f-$K3tXc}*598z[`\)oGP.zߐdt@P9X HoRL`Tݑ/:XNcjPӓ3$j^ 8Ҷ~o/б٣mC0Zn94_ΛB ;^3J&,"[Nm?:CF_vڛ1m_µ/3Qc֔'L'<6/ \n1ͺ|W)tb]Y{%ly~ X3MT(^ tvd|mھmk" /h0 fs& T}(jx),PMЅ-MbZ"B?^? X|+w{.uՋ\b7q4zy<.h 㡢kqQ|9Vρp=K|DP78L0GR-h?# oğ_́ Kr;! (0*Φu@WH/DbcC12}4? u3};os^gI$68BOtK;sPG_嗄@ٻ*| -s@>(0\-\`Y" }U@'Fv@x\&5oK h @ Nc$$Sh%onEn٩I SLj^xeO1j7]8(}1;>Cv[3"_:)@! 9PȁB,^ k~zv >#Ŋ L 92}ԥ\Dk:h!Jq؏r O36͞&Վge_gR'M`Z_@6ϧ8,z wvrdRېSN]ӧM1r45kg澓H^Uv9v v4_dm9'.MYsB { !S>T.?_ <{^RW`+B E,|r:uƁ|}~@GD'Ō|Es8_Y* ?YW?$P; |/jK)k3 1A7i><0z*5Y;L; kmoBdc-<5tD`3>|m7'Eir:=xlD)ڃi.ie/+w0v[r@TUTkk`}n|h;<.+?m*sq*I[A\;qi@$: HWpET/)& W Awv@=z-f44r=e}ɶ%4y~ɏg*`r/$\buB$]f, D h/oGy9lKobWb601N#^1S+s'0l#7-0,q]s˃ƥP4Y_$1zg&1BB'qz7l*yQ&ɵG'n3=دxSl F/N?r(@!|dg4KY3ܯWQ4^g7_m;4_b&Hq?W9Z6:qsL]3ߞO)XF?6琜h)Ж(Y.ܫlWƸ8ṣ|κˋ1 0 kuߞP"V+k:tF 0ѼUoca'։I~ntǟkaCx؃71k/x ªw~ )3T`Z@`7<`W%b qCS|fꗝٸFSqF;~֧-ͨ(M;3f O14-`m h`x![lHAo:-7T_.z@. ugv) h!Tzq@[8ȼ hVys.5^ >:]k6lfoV??MLۍq+$YM^ٱ?mW;o[[Exm~͵+["35q $j*D=18ml KJĸ~L溾Iwvv6?]>4KŴvɍFj.@A1m5~%Hȑ/-b$GDISƥ'!_Vw(ҁYn~BePU5.%::J<fƨ}|ժK3e2j{NoQaAH(Mj@6.Ϟ/^w΁^f&#BA(sCO?XP)-5N)ڡr@!Aj g^?=|_{2HW@;ξ q+Ў aiɟ@K :eeL5&8Yh=ζvd!\M(DOƄY6cZ"0LhNy@8^CW4_cHސ 3取$*f_ЍҤdulXIP_KRT- [5axl>8wC3`(x׋uuW7rZۍSc{@tw4e+ X`VX(c J{O~q` imLtD`RӋIG ᯋߐ^Unzwh/P%y4&zq\_iF[O;AO&ٱm?"z@qV¹(ҹ!0 \{AdI19\#,̎ ait{8hJA0vRuW./ ) 3sY9 }q5O7:KM3 2cs"Z;Bzg9cm!s4  (!``{# <Sa{J>?S{UgAH yZC%Gk}іvީwZt8!SAGǒ C՗qv`ڛm+'py)&al6Ͻ o(+@! 9PȁB,+|dX߳@='| x}]6 @cL'&Iފv0եx ׃)҇Z tbvG:t}Ȥ8B1@|f#e@d>*oq756f '7XA+|"ek!( 0OJ`P h MH Sb~;Ff`'_E I|gM}|gƢvr~ !4G@b6cOl)Q;*nN@R->䚈ұ)%h?HpX/o.{E\ߟUn2[G ^B^6ԟ^ ? gyK ,( q|jߒE`[;uG5lZ}{PA<+<@I̅y.L#Xc?N 8T^ٝi(@`8O '\=6 g3{hvga$ߞtiͧф&1R:% ʩ;d:W_RXqRYU M1 J9!*1ct`/t̃dun|QЩteV d >c8خ#}~(f"Ǧ1 ۙKiխ~A $pb ' FɁ0 C/)P>'­n' 5 `Ojӭаit[wUpv~nv΢O6-9|LN3 sΡ&Gh2o!y?!?cQΙxόH>-P\ !r-Wt)p=[ Tf YiB)s4+0&2 4Bhrr6U, 4%>"s&7ʨ?qr`(&aęLtFk*&` ƫ|{ !h ds#Я~*_ YG`R`hJZ!FWN$Tݞ̸kEW0 %y\r@ݫIOkGm_m K L aPqG}+o>ZkE`(@! 9?)bƮd 64?}˞1 琤oc/^Zl/(enP!vgmS8'7mp\n !Jo҃ҷog~qV:Ox|\$sc_ŻfПm~Β]<_&s*|ClezƾW N y*~5ern#+ĕ9W},_-Ă_SbAq<?@z.w`^@ҁUtZhBN3j^1;E=RԽQ0z#u%Oan Yv*[0VxUu%YR+sʒu2-?A1Sm$`L*5`A~K;X{ s//n$|]zqP$uH],XUё=]q; 7LM4Y?Nќ@@`Q4I 퀷9%ϥ_ZJN䣼J> cW 5V=(P^ (AoOAz@\:y&=/a~L ۅ槆B7>sdb# u=,Y}v;8rX>A|P5g5кl_Q<̄y/CP@&˗ӆѩ\PpQ\ &ӣ7M+kc (G@ v,(d;"=(2ՀN`5 w_w۞0A̋{I[S -/^,jH_K'n"1EM7ǃ z0Pu'LMTa(PӖf3 N5W [3% !ȵà}14utIC4O~!XP T}G G }Yv~g 8e\l,D)s);͇fo-a aqԃWgPЭȩP-r04&{ڙbFve@;נK$oY00 VJ=`Δz@NWvh̆{ vCEGj'Uuծ؉Xzb5;LQI*U9|*7Y?>Y3]Xh^@ g#ɷ%)_{:sp_[?5_[^Idv9@a'+cHו|½!@t~M~&d\`gNiaGMLi3lcn7}?-pJ%;ʡ}BOq;aO`!IAǔLcT$0<%1!( /.gMC|U`f\E*V."< TѦΩx!ݿ4?ռ^h?&-KCޓm3N+1j-$`}&eBO+YF%>Bkhv]+6.PN ?gbt( ZWo ̮awҵ'(f8aܦuNw -a ԡPgMh{fExgƏl;:ر⹧ H"-ʫ@=++pGʿ8@G G{VۯY&{3;ko6Ѱ 7%Y=1eǕ@HYOSbsu\7{蒆ZN2_ ~,ѽRg@/П)RXn(V^0Ֆ;lC6F;78Vz!fv!/(G& (` Au!Jm v'W( S#MB"]ӭjAgZ hUW];4(Kg:{p(1jg72Z0ȼ">.gٙ9 M45КuΗZӄ@LHt?aő&[%1)x?t1[ +o}{@9A 90aԭ|y}W ]P OM/G 8)|ře{r~1CIZLŨ Mu{0[@GrwF˫:CW QL3sJ{&R'2wwZ)bGL'NYQQ&kAiӴ~6 Ŝ\nB;G'B0WOpԜIÈ%gqwHַqAKWp~riE@2(vbVS@FIn%g cLLho #Ŏ"9Su:jzB=oa[hO2 y[;ܾ&֤YSB'ξ#܇A@?@6ȏ݄ܣۆ A_/G  _ !q b\NǛ&^ >iN{]GmD4{G#4rc^IuS<va}RJc_yNT;I;R:\! 9PȁBrz9Hu\g10*{f%о‡?3G[s:;4SS5aC2l#As0mx) Ou tik]- uo~[waݯXWq ?Yd/fs|?fT4\v/5/? s!\sy'\bj1TY/ X 7@Pźj% \`=T$,BoUS3U!y8f|Q4שyE\̠uT}%"hb~)T5 `G6FY)gڕGKFC'߳X2(.̀F_ x=ڬN~%2 Ezwg |H!hMȟSAtr)v}|itLBWU?~/4e?uZ0j< @IDATb,4w1x0mWc7WU[nPԱ[6TeGCK2m@σJ1y'Z@su:о](н!@9$Pw]_" U ?8mdʓu( ZӜlƄ7h ?ۅ5P-hO% an&KjY5zK7_.gg  T=1_Wcwl#/B{9R?;N,|rtg#C.ѦkWcbs q9^|fV+Kꇱ[2 -4_GLEnv,N L{LY)p?hWpZBtr4iLRQǁ߁wzVgi9<\~ }L{Yw [|G< Na\Z)z|;@$+,%|0^y[!r 9pws΂gf!q#O^4SYjx+r^i͠ $0Y7);6v"gX ,{޿ųO< t3O:/OB9cɧecO5j__s&[!y7n/%SX/ N?YTDin.VpBrVgp ɿ͐p #|4zzf[{ vL0 0~r+b+O.?nٛOGQ'?1i \WwqH ~gTM7Ew6)|62熇Aw opwO)+wG'w@0'""iL lWz`,s z p#͝9V|bI+(/[^^lTnj^t+P3Zg9TN]^8Ku]-)ђU-D[Dw5=)8WgC{-?v"Ϧ600*-uM-D*Y) ^uZ䔋8r'@ 9PȁBr+ȁߓorG_$h{qGoF)LS6[ts֨?!HާU"^^T~#sJvN&yAAhµ9A&K[qBf+t\h/#,ts;)U[(C̽ϭrbrOM8';nUP|XG% B`Z _ $g/lg͛vyԧK)>zpBWSEvlw }(%9W(Aـ-u4ķiifb"z,[g6_Kmlf]Gu,hhC\7HI)B4^)fLQoEu9>5݃=5/3G36XNgŪ̋!Inxtx6qGg^ܩ\H[#?)h%@`E ^HLi/?©'N{- ;6_`j+ys:8^a{N6}E^Kb*,~o}9lTӕ\E09H$FBf&y{ϛow/^$P~q 吿e*{]NQ7R|LMʁm8W/MC2LZpa30:>A<ę rL̅K}fC@ <$̇%Y {@)p? Y1pZn[&HQؔ~ zK0Ѭ /]ư9l:,/V /Thݨ#x=$~"x-{g& h%ܴ`!a@!1$0 K|l nz;v* %kRη=.|IxHH2ۄgCo4ZhKc vkEa34?_[<3v@}] +ƁFn@CG{$ޟɗдt.yeϓ­ÉMBŻ9Eg,g5]ED"V~; 6W|k|[yg\{}%7'磖' h g'&gaG$UH c*P@npLG! a~Ġ |KDF~+<9ḿAAVs/WA>a bSHQ`3V4| 2sS;ׂ|7"p XA_yNyC!_V!Rv@wr@zG w xJL}LR(W,~T1 כ(1G?E͠uæ<?;ds}ŗ~ wBZ(IvW*I_! 9PȁB? U'jd>($ R<7=fu҂PqZ;`â iW|[ЙM 3nr2txo^z~m +{) ǔ]z*չYz7+ !ʡ0s_TjUr~5qGll EX34 ſn#͗F[:'i'Bm5 ɂ!0-@cgEM,-K YK ܝ_b Ð4(ٓQD%8\:}PdrزVR,wR wbYf̖KX`4(m1{ŴZQZhț[Q3['|@˹!Z`P{R@m[ҳr|"tз?Qjǟ,ܶj?yY)06V>o_ȟ]r;@vܐk:}?0^`ẽs0.8ZVwۻmLa*d>UGy=Bݞ+Н&o@F'Q ]Y*ܪ~ 2h~Ǜcw×u`ss {5C)%(Vi?i=dEv?v_20kx'Y K9,QWK8abArW;]#e/t5K))f33 ̩akB 5bYD>k-;/K51'gj) D#n˔np :ұ' DCB7s$Y~Ɏs@S"4#.l`j0U%,jMk}`+ j/=<܆?hYH4_b~dme8Sbx33:gS5p̍+@! 9PȁBT#E'3vv3 #xw!`!$]&L=֌e"4;ǔ#15,L}L'e'n@?H T⺭O(g75MSS7tgng 8y6 YxZU'~Aߐp0DN.SSn-:Cg$= & Lc^` [S~rdPn+}k|yPn/>jF!Tȝ|)J b]ehFuay_ | en@@픸3q;(?b P_|] ?4l⎹DԻ^6 9MDl&mwW]%-b.۟/U$ >tʙIWCw Gq7Nlvş$_hOeMh>^6_r@huAgyU>Rܰ--(Cb]pnJ-0%LPƉ^I[cG{ qy?L~.:2S;?T>NC3wr臘51Wm]=vAA~T{OGuW*4 `@R8R }FVxO9rLޚ7q`, u7>Q~`ꊀv^T|,ZRۄ mYg(kKnքca_;ETwxf![&WȁBrnѸqQDxt{K0GGIpk  z]\b.i]V4OGG#v>ƽ k7EQ[ ݀d]X\KA0~:޵')R0u4BS(,%XY;?y^~jmcF|=əNO= C搿3*kQAw‹S-x~kJQK塣#Hg^!A?O}~Hw_[O/QnÓW"0W ԋW ˤY?x8q6XZU}ʡNz buxAjּdHW0~7˫B$^4YYVe׃vh}AeyoӖ+۵b!+I>r* EX0IG`Ube>)B{ʋG' aw P,mW@V]7*VV7φx?Dkh!aIsoWF!r8-#{琞Qq }gøn;LTN&Q5aL<~' -op +ӄ&0R`MLo ~28{AM&_l1et hhHsrޠάMp~Z( RKMvF3莗߮h/: ~R3Ei1K +_x6=Vz$E8U}L H`Q `|&i2jHB1c%h`"IR56|k_uBӔ|Ƞ% o,\k?&cnO&eD9u9[Xz9X  D(Bb]9D:#dTȟGlЯuCM\-C- P2\ %as+u ,ӱ |'K%?srO{w%0D)]8e@=$PNԞ#ΊEaxu`o9C %MWԹhN.l4:ّzy, SeNnT?5"o]=$(sY0g s^1s Y"%gXtߧ Eo=3]]U]ԩSb1ڇ][ͯɁɁ3$Kb8 )#nukJpJpthZ~8J 4[],@@-Q ^1,8U7=^q ⳘϞ (ApAY >|6% $ұثx/\%ƈ ani!{[U>KF<\tH]9 wȇ?x KMj귷 /1`)$؛ a=rRyK< ;LH-/P//F@{(P_j 珄|#}X0 {@: ;D0Y&_ۆrnj{[R;ğ_\? ?3|+6EeV0v+oBO9& (l#W'PZ ?; ft&v荄ZY`[ؖvv.+%T'{>6 )Nj_CK=Yq[#{: ۴rsZ V_E<_FX<Xl"P~ESXZ~E3uXqhXމ!9P8WDƟe?ٔˋfk`PHj;pɠ,Lb@yQ +}уNVIS6/7%Hq6N=. U"sS|ule0QYA@ժ_9ӠKw9wH$6ڝ Sn 9t\|D=W ^ 7{T@{ >C帟9>mؖP)nO8Kv |1v>n 2ۦMxDz ^/PhVBbWSټ:Es@&gIS*eK 3{bR1\ĺ1/Gm+}]n: _FE%kZ%Sp{B w_+/|]`! |ozs&g_1*=߱S895a84?֟MϿt*Guҏc:M 8:T7:({q3릛&钝, n'M(yƵ)DYo~ ͢ p 0 ӛ1Bhnz$;"̓v&},&‹? -2{sRcX`5?uQPR 5&jr&jr&oD^c>@?#GM= [J͵=߰s}ps+ 0l2̎-˖뼂}zĖ̷OJjKϙ܎,0#x-Kn)?WN mn> ?s x;8k3bÿ^ï\b=Vk@C@Nq@T .Hy{9G>$ 9 KpūZНKi ? {Z |;,mg{3rX MO2@{ekgN&? #w@;#P/D÷XCO.1MW$OTr꫖vx @GHR˓KwjRˣb h薞' Ռս@%qod徏-uH}#u_>ƌiWr2bmϋFn/7׎ڠpӑ|mnP 巫+r'֗*EOu4cEr[8"_4?d'Vo*!Yɱ7;ӈgm%8r{+ G1 ?#{}Ɔgb"`ln8]PfAeg,~'r@^+ʒ{\"K4n/ +T8wIDy_Y ~ iR5-]NY| DS\D1ۂ㩍ŝ"jݙܳgTJ^Y^ ]y[lV_W}]HS1 % U%geoW Q&g7#г?-:-ЁҙL2K ;Q603k(oR*^ww}$M.Sa$S>x GB`7JϜ$1 J BBrW&i(?#']7I7RǘC犝J9`(qs$o וGE|,#HcpQZK@vl#]v/l#?E]|_#rW{3|^ !}z:-=fxAh+ĀG5P契U =.HO9 ºk0uuB9w9^}w ) ,I4~' q l&&1<2 rpsp`WhFEe%W*bC/y;klsoEKTn#S6 :v!$ "^Zx?(@5AT%A'0ubja5cIɜDLه]P2 +(]KN E8j-}>x>iٹBS92̧ʅU&jr&jr&@n\X/$XhȞZ-aւ |w8%8qݓqped74O,NS?f&Leyqi'M?{Q,O玮D)V։g^ 8 ɇ a[Gؾ!jo vȪ#s](~>9ٮ+<#_*@?D Dǯ¸l~"ttAͷ ^ O5(bVǼjN7vЗ:6"ČUaT>ĵ/O~G|GVFO'?Ωl;}5EL)SdҮW̿(l)|`SX%Dz+xY4T>ڏFcyr7{suK;șUy"WۜߘJl[ΆncNOwi?CM@;6}r,巉9ډ2P-Rh ؀]"p}J S4I@?mewtM+ o? -qi?g` V8~;J.mn,Tە=j#6asB_wgtqu_.\ mä B]Pt@w6M@@=([I;mdK Rf  L >j,Ak|vBB'Cu~Bvf Gfy~;˩^\Mrn@`=]%@[ ԳPHEJ=wh(ZD\46מQ(|67Xi<0\F 茽QAf/A0 !)wȹ% Y}haőܛ9zT1hl8ȪI(P9S|1qǵZ&azoEk>Vxo^qWٱYhXo%e3@Ky lo?TLy& y/@UM\0$VQb@@ ?|l c+Arj!Ox>0\b:;ö{zSo:; fyoCzhuk<a& 7^Hyi25`-loMՄnz1`;>jS)Jjɽu",Ɖ#,UKO%[^񦼓@ 0PdAI^ECT.*`)ʥ{C#l@&P.T4YDnv|vC6[C(Kf 31;f @ȇ)x/j?ZVukͲG=ʱStڌIȤN,(xn p}n5t}@nh_uG)w {߳2 ZdPU&$4wU&jr&jr&?569.ZYb ;9 w~;ɼH:g `pR>mb;/K&+Y_N㠁Sr6S5%FnPpr WʤK wϚlG|XnɿUW|h ^NBk!ifgK!׼! &ѫFn>R7m !E}/~Z&=Xra)I;,?kh7ťk6vԇu v[73ڑ0F%[9m_%d mIv:z@> X A /B]&(?zӥ žjNw6@lhOxS-ſoØ c=l?|y,) {G`%|@L  \(FAG;+b_jtYhӌ+E͹O/}zlXbDLpN9ĭƨچWn~G;?#jE[h̶smK$}%/? 'r  1LQ'Kr)@9'޳FL ㏪lHJp%еV0'*Q!;Pzy' iR 0i'<;\>3_-4PQ`Wh#/_)ܹwDV ow3Î/?9R˸_C{@v9ʶ>8 TT+bU-5A-[VQ[9=1dޯHr7K|䅙bz1c涟~ŸgT[+6_}lTGb<T4^%-bUk657`~u ("&S(Kq@I-1q(- /T7Ue-σ7ۣD]`vrmzuݘSW]J&k -p'9"(x }:IB"=t s: pzF(ӎ~MCK f!.scvHi-B2i3p |QE&g'WnJζbM?P\ -׋(*2r!0qo'~%0,,7?Hbw@l$@] _%oiF}҄yۖ[ȇ3 `pRxlF5|=m\4 z$')P+''ƅJ%[_̱!9؝Okmf0vmB{/jK]OQ>1L2z@( ? O0So HL^O +c,9P&M{-R'RCCwس# Y85O2Gxtct9 H7ZDM, ?eF0IH|&_".@5AT%… ܽ˛]Q{؈ޤ!78!_N`|;V`44Un1ըvj ђqq ['J&! Z@qߢDbqQ9&5&jr&jr&vy}c>O6d7 ?&1@?s Q!7qA:c6lhr7/>/iěKͼRޭɄ,b^Y sc8L=14Ϛϧ›6TOJC]TZݙ@=5)|@T1)w F1q @RAF'SqyMӬYXlc>lvvuSuԯg3JzVǂCe7~*7eu X2w45)-d`Ԯ>psfPwV7e™C"l ȏ B.B7te_/\f|t$יS[/&XyP:f{$q^(;s' ԏkEt@IDAT€aц=қx)AL~eΥJrbfL۱ɴ ӗ@?]__`[A' hJ<;!4WQw*f$̆)fa5L::U}珶]g-y0>~*?e kMq!/ٙ^my_V\[Ԥoܖ-lb݂l#n_@鵎lq|G /,yw;E|!w"v`UZ8-}?XSYW oNY@8@[E_H ?((cB/5jk|3.wf$h L=wmipa\H,Qd]j(-W Ȓo\MhnV>wb7`JP Po}ΰ?#˗fEPN9c'f޷>&ќ$"qȍׅ*vRx PC擬\ Z.ڥl, c:-2w4ƛKs{C3ˉ)(=cRƫs O gQj~jh>E7c|ȼQf0y ;G3ґY>MzK#bFN~/^gK<>Np/sJ uS;ε0v0B T7h+zPX5[JJ(X3{Nc4wOBL02Z# )ßgL8-FWEQ(M1(u=ϧa*Lc׃%+HOp> /Vit@?ua5z}/ǐ?c>:xًk7Ý˃a;o0ftJ&8`ȉUG + >Ӑ/N(58ף.K7 0 NPfn!"P7 B}wLp2 wF Kmt H+풅iabHX)3\+ti94uE1H8(C~)`:LʵG% _pxii~=aN='@ A+F@vU]K yM*Bu#C7s(|@s[)?sE UMJ)xτXC`7ua00HCx{ T/Ю܆0C;GfUwxNl I0Mz | yEY?1nB}>8c/% kI֭ kXk*b۩M_Z9MX FQVLO&jr&jrɬ'd@Nz#~&>eiGkxBz˸VtT>ƽKvrV*{c,\ '} }W]Q]ֺW$˼?יo-bUoަYZhf'-f|}2=ꂻ yniIK #h9L@># D-MoQ o<(K]O"0Ɛ 5qgAQ=d'Gck[az:*+uakO_?~ϰSx):-:m,4W"si#fl|_LQ߲s+{O7+O(/Gm,QJl]ҳ].jo&>ub?8F g&WC_J~Nˑ|摋Ӊ|Ͼbi92E )`/vpU?5b B@x@{>A?/T%/Fs3ϧ ۽/Uw Wg3cX#f=vO.A=>}kITgF,G9꯼ I%GsQ,;Rқ*^>^I~qLǸQMd4VЕuEcX]+0 /DW@?@*l+Λwaj’WŷJQ~4#5K=g3! M}u->#)p{WnT1Cr~SxGĨIv J3*n#m kQq](-x2Kr|@~  p+,H$gH,.y3_(фkLci}֑rΊմ}=3¹kZyޙIVB?6W\d_Xe{ժxU(~ ⊬UǂЧ݅ CV{F $@@b+Å/ *ґtcXa܇Hu&pgP_(jAnpO4( >~dC;77;c u4ᘊP*f r"m?I~!UhCtV?<hϚ |_ ;s(ha,8'1r";>M @GF_:h7Ƅ:ݷq\3LP4cu9XBK0&AI@^sw"B4\r@>T|lba 7?bf1t?Tf?Euag]TǷ>E'G&fi"vR/ YHrgo7'7MpSp>tE8D`XMH`fne'^M%Cn ZKZ1T@@5V.c 1+߽~JU` KЛҮПcEPԂ!7 ChB37K7l8hlL1OFsy*@% %;Ad7DLm!Hkr #wXz~k`T27RMk]"Uaj׺|;U0ܫT4A 2SROM@M??̄ob9,_p{1ٰd|_&\\{5R\?OW [B@Pvts0;nq :.9'aJ_=PP< BpP{_<#YhU;?N~=t!n&tbI\V~iׯy~ *[A);Z;ٓVZU}׉[PZ*tGF0xE|KQw,I;Cf9ʡ"x6%C<VP[CV~ ZmƒП?Orںi.Gigy?τ_{oSKػt ?wS?.jP ޙtmg7azznZ3C\ᴷG?:=,7ݙ>/ʭ>?zɾx忇[ '{'J*؉95"'dlN$ߝsf_VuUm-ؽz@@?R(TpT(LG*p=[ƠE?-0-"E3[1 4߆)t Ix1r'M6wsy{n=iz6 Ʈ`.1'4vk @@gѭ bϙ=: ']^NήG[( ~쑥!۝7!YY4gy;hday W= vO;!@}KYp[!kB +b$5NAO]!>^ҏf_o/LM`cTj72WV^#yD<~{, 0yΈ bD]u';!"D +RcT7*.4`>a;r DM=h0voM:.8;߳'`R2/o^LѕMMtT_Z.>S'q "JRQT_o+Ỉ̗Icw[. TC8@{ |Ru1 y]- h=J0fz@^G[mENmŵ-^/lj}QnG#8=*c!@P[ ~aJGZj>Q]_GxA~v7qݣkُ3W'/W.~]l ݴ[n:& lG ph g {^PX"n2ﱁ)gtI|_ FE&o:c/ksQ7PKvpI=@7u@ԇ A:u/K^)>'5M,14/Yb|I@M)hဳSG3{r.428'zWxe R'8k9txr)\qki|:1zDr~lB>z@`8F { ˄%9F`H ݣ% |cHoAxIURǫtֱ<86h u;'[m?ޓfPTHb]/.Fg\ºމ&+rُG?gܺc)Ɏo4bm%{^{4-PM Ո֏,D@~ T"o xaWR߽;# !?珬ШӘOC;b)8U~1wy[B9o;QP CȮ~oP{Y ,p3(yן ˛+\2S:M4H,q/wf} &8,,YìOڊk %?gALiHNa/­-@[DP5q| s^] ˕W{``c<-Lǥ@=@:~lI?ܭdaR>Mb4ZUs^`o߷@9 tECBS00l/ +zCo_>-LR^e~@ /ł E0rg1W4 m`ncZCV^Q3>Ҷނf3>IƂ9+>K@=W=<$T5<]m̃ח#<ݫ?26XnmFF#6CHj)kdW碎Ffnzĸm4G90O9hL JJ+CPH0J Rx }F[P_@;=̵I+jl3ῠ 7 &or!:/Ԏ6b#3ncW +愾ob?IE@M@M?^@=ؘDtki,)4#p꬝V6?J^` njI( صmmS{PUe :L ލMX3vZ%?2/,;wF,(D{MfX`Ela#FfI$3F)v󴇂ZiԦEr; "?{xHn > 泋2 ƻsW xN "0G ܼ X&_qn^ ݩa?)Z3.LG M Fi'ǽ-vWg.v>]#iC*vn00JNz@1XXHrUWF1*p+ve|? O _;O_NgְfJbjoxvo(P_n o&. 'Ѝ7OJ'Yr}@$^-ӹiHh":O#ONoK:q}^u8v +'8<hX!qn;Jaeg.#3cxx5#S??"/<KFXlhv8z'%W/Pz?Kzr9Bz~ Iw0(&GjZїOdiXN#W'BCc$Ikɍf]=Éan 4Q0l)~lzQ0Ђ`#yN6V62뫕ݣ{ , F70Ig.~3(_*ԇcPxNN/ly s7Yl.@cV-(jXsr }<0rVF禸yS:>&C=~]-|/b.'ώK, +xV_*Hh~j 'JAC7?:鑅s&1: U١wQN*'­Oۡ^t5Y2^*Մ=:fU9VtIn;g27Ô`PͺȌ~o#Hg0.;A ԘC w35W`'˞+zQhXPOZHp+z lG& P/\>F0*`^4uyu Ua}_8lubx\t7ӘirKz R*u"vP͈( tw+]&$\wxl cZXqU crF}õo'Ѓ ?C`W:N&ʲ#$0H$N*Oyj cR UJp+u',zK@n'hYSP+ÐqCo.hxqbϗ NyСIoq2fi4gnɾC5iX8緡)B9T0d`H~h;/JCvDk ?v vzY T,{>Fe@g ~Կ fӏ2c!\t{egAעK1i'FS*?>|x~vTFw5(rĒdOxe.u&j]|ïo0 Nmp,Ϯ3)8^a-tShDvE9I_jr&jr&jrȁ؈ 01:nZ7wqWy;7}KN`j9__\&&1_;zٱ@`*$ WyyL6 gsc{Dp |ְ%/_|gC87լH]QZrzܧ`6jmC5>/}oIuf-|/ce|)0MyN ?.o īv„_X*iS?5SmӡmvRm ~ _^c-x)CZ( =SJ`E kÉXo-Ю \g;Fp}}BUw>\qk3 {Fg_բ=owko{aBeGeqgn5C>I >K?mbKaC+;,u[xcU&0o[@b@{'\XiDtn&oC;A?RE ^yg=*hm} .v~ZAuhEs2{ɲJcQCwE@_5l^]UM'l E׉qx߾anT``C6ȇ}J6Nڵ wgn,w4^+, H Iwk|OsѸ օIQYu^2Q谭M,?g)]n{J ug\g}# {rcףM?%?=`\V ңUi|#~` 6b6nZ8דS*v8=h[P`fj/RkB¹iWqй~Ƶ`n@h@ * +_ ׄź܀D%ȫ!918U3t ׇ`!/0ߨĦ2}5}I̓UxiJ|-<)q ǘ+P) jhSP/gQT@4|XV S|Ȫp$ B`Z7\/ƶ+A/jX,4v!xW_n_c_bta:w߷knz9 bκg_ 7-[~*J)nP4oLޚV}q.aX[CB : <(~SsBO"(>ICϏrGF ԧbҹ@8(@n\Ԃx_\ӟ#kQI#cG7h]|[Ah!d,1;GS5|Cwr"ˮ+<1=~΍x] x Dc1D-/#D3zez-_p/C_C7璏5wJ)<[:,# %U kP7KB[F]gT/òO'LvP}|(|(-|%.'>ʥXO⬊HT/ٌ|=*30V^y`UN;x~ %u^DT1\4O؁5C_7-,"$:v#_pϹLLwuP_fo0ꑬ4xƛ}ʎy3-DGfv!1GR0.Y3oB ~osRRQ5Nh3vIڸ2'>t~,ݿ7mig .-$ \e@~+@ Vzopfgۅ.菶Vz1iHIa$iS40ct8 b@GS0y0Et@: +gmkà$i4+q9* _Ȁf/5OXu(Z UGS/`5Ec=#׏R>3(jGdw(w#8}5e`(3/7%Q0( f (`n 0N܆ yĴ^cWg r}F 61HZO'_OأeLFtVۇ} h[pbcAX@ڍo'CS*K&SG )8 _&޺@^cP"Η% .cjLy ;@Â}x!'Ʊ3^s:Z %9$fL/^D rg0R'@2ڜI+~Sx\-'ݥ; yXrur{Ah\no%#SaJ6nx:O==!(FZ&T&5_*RnxGVX|TݢUc KŐK˟@W-/"0R`p@| |A{y_'eQ5 v?p'5,c7tZ[C+ޢ?41][ؽ OIս k^֑-(Y(`b fK|Lˊ׸_=_&BbF'݋{ή9hv3#-1?iBqϟ%d^G{GW~5&`$ ߿ϣ:/L'naw@;sO{g6W>HN3) o7 ./eG' L7_z@ȧ!/jg&<)٩nu!ZCcJ>?g?Z# yilPkf48:6{1|Lk27W>F;ReM7Tǖ$M[v>+ȇOnz7)9J^W d[@>,1M%,YZLƌf_{ApfH4 ! Tk/ϯ8YhT"ضukEvdߍWC]32KN;*ޛ`^QP,boرwEQQDC ܻ~swy3OrN=s̙ۡ-XɡI}nU_m؝h@@~O _\ߊoD0U OYdXGIFGni,s.Ƴ#.=JxVGH#\8.ۜn'㵳M_8 R`3-ز: u&[Hy71@:`S g@d^`@ȟӶROOI!|>\ aY3ם1ŢPGTkldm?p.;/o 6ٻLy9<{ͽ9lgT")4p{@K?W;{ZӂY-mB5w_PEP,4PQ? @IDAT~Ϗ7Xy/MUX?0x"TX*RW|%D;0U%TÃNZ@QiǑ7<MFJ`-Xe_JrI錡yrd?ZAXG ,8/}2N>@Ooʢn/3'ÉɖQ7i^Yf|<-("V(Y KHY`xY:_'܂1`sjQt%-_$}cs$@OFd^2Mm a _ॷd8+{z/w~7Y>z0]'f@FgU϶l(_IP*$ /6쇠2w4'bsOt_,dP?'g  6ga:[W g sXB?BFŀ #F;ĔҶzfpƩN)KZt&4_kFçwOeؕe<ΙՃ@@lh<$p~ȰFJkT~[h1?Rbj탮EN /n! w lV>7}N27Q*L{;GH!șJ0"q:r_4gԸɁɁ5ӑN1aG9A709n)oMYe*n7ޕuoQhE ¼U(:/ N&>M+PԹQ81G0"OSd^F:@U>xgbp.v#~& 7IhrꛂQǿw(IzǢy>!|Ev7՜C BdgM+]&۳3c23cDu_G3௉{pvp .XyN ? 'OuGF4wF:HZVPyn&r˂f _kJȟi`px2)-prmQ,T(t|HGx! !H >Z  TrQ _c?"|9 D~m:rHBut5cӷ*;oȯm;ƗR>Ge*ʑGOf;?MUou,ߩZޫDniO_  ԫ@j1*'0yt}ZpU9-gT6Rݹ.68M10?9ߔ"@a{KGgyq#>+^+;/G 2Q2Eu% YSȏHWɎh; o ԇ% ._WHB(9gh讀"?NI=\p2?&cº4K~+jc$ֶ\^-qcW/B5^ UvOOiZN798s@792pɛӂ>+mn C DžIgphԉՠK= zERiZ^#f/9.[@?be=\UчdճUAtK.;^ܪcTq.ǧ15eA U?ttgY+FM9‚80緙ߍۃ=3cP}j#xo^|O. L?ukkX:,WRP9R{KKֆY8\ab{@ڼ,0 (_NȖ/{Gj.9l; GCO +/ fͿM* &h-'(1pf :ozMf*_4 "|s0: 3;9h#hq+3Qx(ȝ=ɐv>&MtNP<-_n#L+rS0ϋJL E *5^8, 3/P^Hj神cٽۤ{uoG O^,nJvxa_δ(ߙ T3@ 8ɹx \֐ɁɁFE9Nr91qb?DJNg>|'qrHgeZy_gRaɂ~<A,7^zJI?4nT3/NF^ ]e5S?CxvT[mm37,i\߹‚YYEg6O!<"E|nN=s?& 2 7vX* @QBGHhs4n,L'\  ~İ? Rg-zRj+zA񆧧_L)CU"=&{-ȏ2*X脙 5aoк&''$+f@;Ou \*/Af[t@:g%;d˞8rѶg0*ۛeqĜ~Q^D/SfGr:Q3d-Ѿ9q7ߍӛ#K3/q8|ocT7XAUHQGj$~/hۺtPHy[v" ?%m.鷡C2Z4F=OMV;~C9փrg˸oyq&KgAϤ+cڴ` ZKHcy)Y (Np;g+ғʲ?'SN,>+73"#,Vun! PC9-*TҼHmdw^YKJ4}F$=ý3w-PANUʁW<߭hMS ,3쉗{G'c.]0/6?Vs?T)%9gxasp,`|e ȱpGel\Q"We?{ZzlA=Y9>õ SUtvɆt@Ua)x~CKtK]Ъqd/J;LWH> R_pBN"1hCp_>A?+:@1;^t# aցƩ4P ?r 9 #t3^8N]St^xd340@k\r@!JLsb,؄'#MA<ב&n-q3/NQՒ.|OwB^b\n 0( F> n!%F[̋kxL1աc̃[`45q%DFK$P|50B?rwRgs4b ?ڐy=#Kl.~)DO ϠYVy_u(c$\eAP^ Ku='das}V IHlԸ?h."q582ӣKz߹L0\9ipte#[ar;s]a9;ګo(p}@:z?3_`V?wLpDGYgp 2O3Piuݑ^֏g8y `#8KոɁɁO@(pj}8'-6u;Nt2=F?_"v:#$n 1=R2Tj] s@\?)@j^([xX~œ.@`H/Cnv{g?x! \W@pVo.2aPW|iO$gTwQW ^Ӈ>Z-]Z z2N崐luq'YNˎTyoE[tz0@ _^ s8tdzChF< 4Be1t }_(Ǡ8Ɗ Tk2IvxSD}hIp-j+|Zӗ|Oղm.͚4+7*?z5ـZr,orK.nWX [;AZG@ժ_;:ь[X _Ϯ,%'6)%{ c~2Q_9՝|-~,QvXdZ_zxƜϸMG3>sګhs( q㒟fP3ۗO\;{N|+vo] )(CaP%o|?d>w_}Оg7#,Od>ZTc(iSLˏV}"Qm"{DBeʯgo@{L%9::gk`W75j"ͥhgsQϜ *+`* NC"֞e&@՝u3 Li1'~B#@}@8L  xH:`W%ޮƥXVnÈ!tDiƓk-3eƬrr7Q]Q|o]02zTiz\ug%i8P4?{@t@1h^vQ6G`s #gQ2wwYzH2_m\ϴt<;п'.h׊JoCDR@ Nu#? אCy~ָJ@bJҩ_罫;`p:0֙(e~l%YW_T A ~e/~AYa]K ɫx1 汐?&3!ؓrSq0ᯘP501bD@ЇSYDʴ7۞@Ns=o{BAquLwC2ɝmUk]O9Cqt8h+ 5ߕSjBLvlQG/SKHEuz eJVFM+RWD[;KiQ7Ӎb@|խvk`}m;~KԪ7Uuy@M@MAhӼO%(::R_< "N u _ǯZDuG >J!Lz ;j~̎3}$Snynxc D> `{ ĖI+eH@F|dJ]G- b=<)8c& & ŧ4wpPްRS#$PGiA}BF~J-p^1ٴ|Kf3QCҙO2{'gCy^]O%&QpDAd, F[N +}>OqQ@ ʪrgN&'Z0N6Ѩ Niz,XYʧ9Y AEyi2cQbW3U@.Q [ȧ©|olt`Cn1wyxlo)H:r=z4E?䗵Ù{9 Q[%2oAm9|蹙>kJ-FǢ7N#2Qhw 3x>O ] u $co% BՓM53[)80"/>/\z)j LJ#rǣ4KGv{ğśfz@yy{="C+vA@t  م-,Px@+o<) 55qoGS^ծx(TyAG YP{z?K{P{8> rk&$Y|wo*@䯣pXc6lv!}ECo y)hEP3u*8{S kK^D3MȑWCuy~FSŜ傓l~*^-s~uJ|~ȶ%̠Si%{?dYO܃DZܶ*FyC{ɷ̂;ׇ]55ߪ Sdz׫omLN/C7l={i/@ ?/  $P;W{J<U~{75Z]#Pi;9)831'VR :|5tX9vm|H3sH'u(bɕ>a t/{!/\xK#v|+X%0/f_asYF,[8 # K x~69;4 -8Z;v QM0Sl ^ Hhq |yy/8vH`*-L:O՞h}>D  @Wn) 3f5/f>10l<~KM*8?R_461`sv_;HP*2Cw40W_” %\*qMPtU\ ĵ!dF@@s__vY!-}+A)v2-I#:[0"ؾf/¶4 pxbT':g܎ V,5Uv^ӛZ{&ZУ85m\1x?o8UZ'[A+|y߉-H u@X$^o[5?Waxo9B|E;sݼ}laBcBoYF}o֩o:S47=E;ei";s? a鳬Y~Fت.59P59P59_q0{o>%@ۄ'Ly&,W+tͧ8 Ӄq<})Ayΰug^`zH#w;iXuӷ;00  Lc=,) ˉ41]l`OPE`v(@-+~!{in#_VUck 9i?M.8e:b:RJ1uˏ%Yũf|@; O32]:isIXbOR$mxkD{K[ػHᔫ6߹UA8Ч!p SL ϛѡRұNxzz/wv"Q wn)+eEX$9#|#ק \m '9Ȱ*dbf86Ā~ɄfǐhhJIX>PCs)3ƀN/7׫Iz]$K]@CO9DjhA^!)J3H3lB 曷K | v܁$g@%-p@kX aԧ%h|woS. cXzB:/RҘZOL@OǿӯOtz\z,g( ܪ{ ,[,PhQe)%G4=j/k}(ĵf)-R\gDAۄ/sM3*cT01AԕOV/1p6(e=S6!!X/*\ȕqegZ~W!EP]sA<<)d\%fRs g<;9̎F}v#`}׿ew$-bV1bq)OrCoiVDԛaRD`+dQ{H>},|K=i)HD?mS&MA[jxYa%P(C2@$TuW#\ϛӀ /F>oAuFWS{,M0ȾjH]uUdN%Lz_#,%^ P{/ω`?%ޮƥNV[@2g[G=DžWtP!FJ Kة#x.v!tqQNp_)tM-t}- _ŪŗأBLB%?d.J; l,&ʩ@Q T8!/` |wg:pv ,aP̷2>!oٲH~P@]\D&N"8 ":?jHGоt]=W?ZqWk\M@M@MĕN+8!Wx!WqhO]淂4ZjYg^ɩ߂=õNߤp' jٳ̍&B՟)T|璅P9\]n$z5@sx9c鎳ӥow X=C M@~t@$ ~_X8:ԜE> wN:~+j^y4{g)P;ˋ:ϰv'aݼ@qvY>٣\}.\ ӕ2X = ?󐒿!)B-Iw3ELZ=^!@0ͯ_׫M6$;,7tf(|#b`p !ft*M;_fG? LkȆg!_.;%hm/ /?ȁ WY68(12? G_O\iAO.D>vM=_@5~]$) ]U6zmݩ[e/G_}:R͡ɂPXQ`x@?8Y  ԫs|tHg,d@6ɭN!aƇ;#Ⱦk!y#6Im6IՏ~aϨA@ s:{l9{|+7N) iׅ&;hSH,|x  w ʫ-=rl ԃ^o%GeRj.(1IP&`iZ՗̴Zaz0ʵ_B{/88+9oļLm>ħgΤ: ?d"!P @;}K_yU fuJb/Fn$sKޗctD۠u'yYٟ>?j/IaA1|( UerK<). IMPS9NVArjYE";se/̶|_L!{Y%1w;`zז3k_[43O9̋GO~n%k~B?޼x lͨ?;6_ؤU=|Ocq ~e}}mpS@UA(0aE9gt CaaHXf*wvI^t)QG(LCpaBڗo'ݬ0exP}{ϘYzi>l~1Αfp,ExcttŬu3G $-3/ :`6zAU_':h)A!=: 1=wY*_o@Xh1"=/ ԿQ-'bh; o&SL ay!UY9r(*AJUwèys8K*;SX4 \gtd7||X<":upUf -TMCd1*~Lq ~ -j15?~_ckgwϣ hq\"CHq9&}9r\P\{ϥ&(f+(vD =Nc mg>KPzk5&jr&jr&r Qgg!sVv1 xm3, OpdW2kE(Scm}Fb9 KI9̛ѓx~6ޅ)Yg/mX+0. x~%;R C0R`BJ:ͷwkax&ٟ߳` ݙaumj(lX).uI[lm?W= ͗[Yo`Ί8d)#*n.'EuyWQ[icyk{ wX l%PNHO"waA|gpHBӼ_Ba%` 9h;5 ԽnWoR^YiTNfjx^D}Otxr?<@rUtԮ8J@|w|R|8^J.ĿR _a%4;YlGvN5o bZp^qj/)g3ۙ\(9yWu>A&;c賉VBkoY{dv,_/sۇڒ$NbނVU7MgHDa( _wbV^!P6Hu vV2ƿH8s;yO3Ɵ6zysuXkNhZo任ڭȹv=T5پ{@}~U Y [eUe;Y`}\@H6zl<}5b0hҟC8Q6M_FϤZ/?̂7.Rίl, ܯ˴~|gvZ$y ?]ѿBW>p}@[ ,oIӱ /Uh 4{{8,_oۤ#``ZW{m G0*h&D6xI_-"30ڗ0݁`l{腙*6-{ߌahOg %u Ԇ5K r\dq9(+P]p 0Y_ >/oπ*{Gկ/FJdsK~aLMLYD֚ПrO Urz?\ anTt053WL߾En g/{Ad́<a5m 77'FKB$6XJv>^A.!HҥP-' ~??#C]Rj) hrv\|@CtS8v_ZZe?4f$g j$;W|MNe)43ѴDMu8{YG opZklʹtLLC}:Bpv 8X<S ._( #*+ُZo?请 ;,pZ]&D ut1C` l2 ~ p]{?_ڹк3sbS~ԸɁɁ<fM9mmh;Tbx_ NqyMk|]r]!:9Ķ~10<)5h'L!h:J]UC-|*uHz(@IDAT2 mF@zyX|RXvٷϽo"H*p::H/rreG'd(t;ޙ^*x͙uv;lMa[Ӄj!I5(xcwfzjc[̟'ۼ%EZgZ3=yl[;ẹwJNT4 ZQ>E5R{z/ k%PNy#z9a~gInTAvT :{ksay!K~s6&BD ԛLAvYЍ50/A76;bH0ʠE{r? @ wf 쫺W+,%4ZX 򼒷 T7 6 >Co"Wn}27~ssahڂ=j; #n{3Й1׫!t^"D:8]+yfe)1ʯc{<:ݔ޲MPtZϼ:&g:\\}d΢Όә\tUR9yIA.9Y^'G 4}QKcIPs;Ʀ <%wsea(%EqLHaӨUvlzbܜ|?eujґ_6+gv >wQO˟xVG7/Q~I @7Q!N*b)ZW pVJX9D6fb]RH#[bV,O{HfR'BZܪe/X`.$?Q,6m|3Wx>"c%tJӪՂD K$QQ4x~Կ;痞9 Na6108.umD1|8ԏQmxx3]lgd jp9;'V֘n{I/ud{K_$s(o0;K7BO )2>/TG~vrXؑ8P bu% sY^@E>ݓ䈊f džR+xZ @R܂r=ip+/ΛK4Sͩ :s|SޑNI d3ܺ/|ßb< NNl󽉕f=Xdu {*1%Yy XAI{6Q -xݸlMXl؊R"\Q߂A`B@?8X`:W7ia)Au;ؖlqv^ALb ԓc9< b/g )lQ[uw,_c{&'~;,{:ƷgM`5\ɁɁɁBHdžj,"1>:" I-ʯ+0hf+ʥ$&㫸;?y[88bmtYHo#Lӛt}D|Īs܄IZA¢k sOc>+YwS A0Hd' RNoWWBTBx9Ah&irX`XU); xS;(aI`OG JF܇'cߜDm4A44ըT荩Gj!` Pu- l3$x}g?wȶXf&G9.Ȓ @H2N\ }#! J i4|7NK辦G>+9:~i}ΗG}zUO"ٴʱV|~mޚC17/x_㔯W'(sPp9X)[P,XxRv+)G?ޥ9fdJnN׾x)t]1r˴[ysU2lf /ůBqOc{rS$GjīKu~ZA Æo ncgCx" 6M]<1oGǶI$u(Fg0`+ԑ|jSys{@@x!ML0%]w@x#BKv5l2?NJ_N&(g ߌ# 'I6G4,󘙦7 YȰ.kaU; P_6^o:{GG20(Lg n IP|t^ab^ p `W TB.ڼOg)0Xc% ,]wZxV#&<[TGRS# W%? w5D[yޘ$hXЪ:_>! Y<)vfH1!ˊ7˷fagC͙dޜ4cu+#7'M3jg$֕% f"Pذl )Vħg{Re@A9f"w84A $E_` ]aj~5nZ@ a !^]bxoBϮ,V3 E}kʍȽW59P59P59ˁdrIFS? )p$5M̯:`I<is|~rYE|# qiH}jר_|^ponp+EqܬKΊE.w |nsqA_axւ/EV)#hÀ(/}1Qk6-ܢ󁵾FLޅ Zf{4wbq+/vb,YFնܿcٽ2+{V< #Bl$ERjiSPtcI _vfS]ຽX8O ozqINqoaXq@.Z`IE:uRVљ^Ŀ +2AkS>wW6^@,1 Y|+V6K3n%>=L-.\&{=u~#L.3G;yu噵 ,?2Glڹ]2]m_eޓ)աnG{$ Sq@$x@>=- 6@@N霜%,CUd@\QMs_4zaI*~ay|ޜ;kZievvj|Z9=3{v|A2 rZ[ Yw \'B@H ӓ"O6H=&fkblV"fy1z:\/YgN}I. gN1ۑ#V^^zho3~7hf.2-ؘs7ʸXqك(8*N7\g6mߋr}'Z@Efq/zӏlw{@$:I~ҔW+f-&M  lBvjͲXA/3 ڃS˩hޑ:@YHuO{ҁ,pY*W&pjtMbW h?W r4kR21qJWxM a\x?ׇBp|hhQ,ҁ;F=]IZ XC i q1:1$Cvwu.gQC?X§s;kG t tm|~@|*#,ӏu8΁!.CO~h=ꊿ&9E ;ϸYXd1 Զ[/{|\sKy-g'?9@F1D&'zz %:cеgx1=X?ϔA/vs_\7~9rY_tJt Q^k>20ȜIsd}h!mP}*G-+*o 5D%,T!Jb@C|9J pU2x/sO&خCO 7⏹$?<>3 t2ӎGh+b5@=.KpdM\fPi.ڱE5\rT }K&7D@$1!v0i8zrNrQCjr&jr&jr& 3Y; {2h"ɵ)ګh: K¦!8®i7wiz 4.Wi dq,ץ:?׾`D-UP,^#,m||y*&o$gf_ /$s /Α-E"`|kz{ 7X{& ěLw޴ב׆EH_RE م=kͭ iBInFN)[ǧlW|9b~(E0kYݓ|]~k*]j~0~۶[X:Ղ?_iz _i)/ w~F~' @*Kd 冕NJ V[UTs݆(쌜*'nM䨌x@u$] ԫk*)%({C@<9w@xo@["J__r0+;(5pTwzƒEJ)l]ZuNǴj3m7_Ĵ{N;'A13=9{s06>^weo-),]V6H@3O q܉{?zMX,Vď S{ ԯ_?R mVy g}w1p?@H2!Qcl:yN^v~foEaED<3/OsAwMڵkz/_ Or;Oz<&/S*D۵_x["輎ͧ(#A;6_Mc( ռퟢR~/̑5nhb Yfn _/Qv~U& #`/kxE1 Y1Yb E"9- [ӽ t[{+:u忙> {d??pP,#[W?K\MG8G8wDzn.|+v{I'-޽ƩpOh~,ZuZxO{/pxA>CUS?O6^Mc;ǔG0 H.pp@p6܃]Y*ΖΖx~Q߶%ϵY}̎BVGaLk=/0BWOEy,oYdZ.VھwUt*cWO _GqLxKxJk\\N|:bi>p:f,le=:zA ~B*v\Ee/f?4`hBlaȀ4d=\a_{eݙ&+47߇ׄGN`Oe}h8#h-W d gu{@:Z ?x. q\(V4cgs-xۛ@cd{qqh!Lnbfy?UI-j֐Z|Dc*|;}*hp<|,1ЍWS1c`k@{ ӭ9* X)òռ߅өP] F 0yr&E2 G;Gs]~؎])IwVMؽ7& fKt5vb|l?3PM*EJ:OJ[J_'~;+ -:췱t8//1Z_w!t Ht]xMKI>>ߨW7.b봸/ﭢC=5x) ܞtuK5ʿ~Q9E#S^wFݞ̝MH9LdmorH@G@>u@w?T;%vOf`h?[X ' N&cړIPR 袳%#>~MɆ% \ܳM}&/mѿwP2vrsy~O7U{:gVDo@V% _u9Pu9Pu90?J^~5&c9x"5/,6;m{L_m4gc688yYf,3s4p1nߒv$"/; T+׻ Dw@,K/ Y,TZȖ@ooʇ ٘GSkF ͡'{hKb94[NKrxy&\,ˎ K!E>'[n&Q/% ;;bTՎ_]S_`_ώ>-Ol_?2TxC3~MUSmt  |n#K8@lA ԱjUu!+/?<e\R k~yPGK+)Wm{]1N <c`eIt=OUw! 4^ '_W8&֟HR֕#pp6ㄥ,<⷇(IN{/+v(Jybu5E`qhT5ɖm1 +Ziz@u^$6U%eF@i^! ȜmhߥKCǚ,uCaT׽mRpi6>7ZcB\h|87xR;7+1@*Ż(|>yNijۢ{f~k\PchWOz2&D#O]/%}ՅgMo]p ˞)`[wF˘8 IϦ}TjA\+N (>z8>$߰Evl_)5~ Q t c7uF0~ rP("xSii;)&̫:3F%G}Og> Lʠ2-67(~#OI,| O!}1iA5񯭋nљiQ&nCmc{ 9[[m|{/?vޜymP8-S`7[ [q>;/|,wtTrt+h6F78?-+Ab^__&^O1Oa@nf 47BˆV@ 'Yzc|?_)W^D,ip Rt~VEzA`!@q*p+&|L 2Z0XUDso9ᗨ31O}r.j[qD=B/бf],G2NJF,ι|>P|}lξtGLYZ`ȹ wԯoF=|q@<"KX \"ȪR+W9M\Ws~z%z&ä.L,])(x_y%΅NƂUFs8O,B/ρ=}~Q 0A;<.yٚOn ۷{5]ƲH-ЮF^+; ~Ce,tv g(xa:k|<K~  Iv6t*{r"LA  R(f /#M?CTekrғ-#Gx CKjk@y.Ўw`O Dص; Շ9'ۚ4e{kKl*IHsާޮ`PYUY{SvXs=|#_BlSрŽdXFŗMP Ў+X@|x? |Uiܻx#SC䳟 {7]ޥvK,u5nhxy|nf gy>^7?4p)՗Pa@{PCNR~XA)|S:{Bѵ bf_2%EKUU9-LM|4V ś[AE|@}Im"d%t bwLAts4{ D G'dQIUQF-lJy <~P t ʻpp3]Yĵ%ǴX}] [o[@{w1"kNg2 5[ao&ݏy'Pj V-yi}wlܽ'bMu18+PN/4ܰ{;l. -vuXO­X0>`o ̯84jcJW&H> |R';dήWz 7i@)㖁8 Db䑹 DR Iʁf+gr*]搪G[9;#UHQMQ%ÐG%/W˖(xo 0l@W.2ۼN7jX.Z_H1[E?nꍄ~)I͒2KO]|!gIqnaVc n8:{.PhA`  LQys[)ǭ9μ?m/vDҳII .b8wZɿtzɿS䯓'gj/5:\w;_VVٞOtzn~hnvkEE^Fe |!)Ouks!#BArx>F ,5ur͇:j0Re/AGY]6k t-wZ;={SVt sϗy 3 j kxQ"jOo 4/ Գ*DחU^Io!ЮK@ᠱ@A|6N Zhzzr&K>:?A&}z7B#(2~`l͓onhԎqb7%d꿔>Mh'"wa(Fں !# +yݎ뭻 7Mn@>" $gjr4ZA+F‹,>/\7Cu@`xcpy+IuǠ61\A@NMHSK |}o.*Zz\ssSn0oSog.eœeyy@<Ԁʍ^BlE ',d_m*l|OMjAUf,PTDKi~0X+ph)%=OD`,g/J/a4wTz[ tg<1 yq08/5pgc@y'ol{;AU\_#YVr{sm>79K30ϚL_GV$E9' |ow (9a곩@|;T"τ;T&<]9C<Ljsq꣼ H[Oy uS8g)P g7=C]:;'jW|.xҖ`*v*{x)BHt g:E;ŋQ}X?J߶%?򥏐h#~R9Y%Xc(P~*٩1o8* tpL &1;>j:MX`x83z~p8lNEǝ |h|V*?n;1n< g3U jRɅECurqPH_c";ԃX@VY%.oW +_,l?dק7DW8n M7\1<ړqyѰRE)̛u]鉟H#S.CМ@/jEˁˁXC/76:I«D/l,{{qWNx#MukH_gfore^g8mj?Z t q 2jxtS`2O@z>D`̄1 ,P /0_B`ܓ6$M[Dkhȯə9ɧ93K=DR$O=F[-S08n&(w t:.PDy|[ jvǟ&J΢娍B@9 '_#S,ΜBJ4yRs x6a u4B0*RQ 3>6#4ft |L~ufbz2?WǼgx%\=a&`4:{b#HB0 ?>^+0|EB1wdJEKK 4($cKkox!iy̑B5vGm=ǒԎ9Acb# Rxz6tm-P|5iuiM+Yrp{EoȧXN]{_'+u F0ށpsa%I'?+]dX@v@@#~o<@L6W_,YH,@O7qwz>ݕs9uXVl:_Bl= \kyaM3.{6 ?(#;$ $*qIPh+^= ?(-Ǚ_/VUy =!9C$x~%[#$w $]Ng.WlxNbTz?/2@=;=݇߂EPqzOr.R7P%nG K",V GG%mZ$FRWK$V5>t4 zv?ffzvNJ sԏDpY;]p#!G2 #翦U+D\`t7L$ JWVM:o@ەu L7۾OzRy-%[-탼rc&[|sVs:Sˏ[ޝf^o۬/[.V@I|C}(@#9k㭵=a.Pz_keE5x3; {h  B* KwBOQ<{KaYhY\Ġ\ q1I~ 8/H$ gaUcjv ߿xGˀ8Bf:?N $/M0-I^~YpcZ 0x~A:+r`bQoWܢjmxq %r*ݯ AnPSJp^8%S^E#r;?M_Lڙy7%NQq]Ub( ,v{+La8)~cy~E_D]g?Nqy.>k'z@/H՘4L{ _#-تӬ_֠B\rnPzJٲWC̞_΄cvXyaoYmMtLEd ß*/ (r:x W ȿQ< ەPskj"_J0'`O=܃pfxQIaO9>PqE"tkg:} 5p@ N#` {%/|`59zq\A|aG @=pY@@Gg#QM$@IDATw߯xv|nGƹ鏀>aڹÞwh%̓Wm<ih7kB/DZčJtq:OˁUK%Πr [w4g(b}ؕy?x}ѣ s'%y+_]@]@bJW&hu?E2K^-K1iIB;-t_*:ò{K7)vL&CpojL+wL^#XDŽ}x8BR["XGW7i LPx[`=c{?c"ϒ@81(^W7OۜQnܣuQ+3ӓ7\C-x̟MkygvnC|R'%g 1x:=i. 5_vІm6;<$P, ]tX׏6]m4apߖ%5wmr>i# ^n۲~39ȥ6ұG5^ul0#T!+jnzRHGE{Zz\|ǖX%Psu5twb 7_ϭL/Š·;Z@<7 (XOBT\s*{OUd7z'Cwj5+ϯC9>N OSn ļ)YKO$@}?M ?J6hϧ ]ELM,T9'~g? #bk"4'q_mܿɌvFV,z+Ez]k/˂n{B`>LhnC}q aC[@P˄ 2ơrjq/;;m+p?5MVX˱r,dsmsw[߻S]=/A=4Sy|8sF:IIAJ hZ2&AԿ?VzjṐAO|ؠg EpFp t }iV55+-tchfgV=(௅{P,q+3ap]&qћ[a:Ks 8_POm)= *.=5i`,+w~գl'l\D!LH^-O.pr `|)b7DK%u7v \kChs;Qw͛c刂9ˎsTå2%zZ\]@] fw3RF`r\+3̫ο@ͥ/ikɃKRKG0I@d=uqΦ/;W7jpbw~ g`;+ ?ʂ/+g?x%^[q];( .ށ}RpT ; +-Y@zz x.snyHT\p$5rsHXA(2>Ȇ,)̈#Ė8TD;f'5; E=ڠc?J5uJq#Fۖ*>~- +&x/,m qWj ߬?pħ W}&_-6>ߖf}ޫ(JQeZejzmF6-(bɧS͂Gf|,$֠< G'lq_LE'@7𼳃P{R ,vHN`u/&nz 6zO"rm6 8mbRna74r|XH̹ l3=~fF(#Оw7?Vs~DN_mw?B/ 70y#ڃU.z.V:i$Pe |Nܑ*xqz?OT7Uo4G|Z`Z c0H_$?#IN.,Ԁ7X5,^kT%~(>66 G-IYg^M(},x,V?k ZC^uzuXeH^l"6A/ kxэ p~JRdYď&Ũ~|xخn %ŽdtgfT Z1CgV$4hz*H@ c\/@hHޟb"AVf5*/5:Zg'nL #y&Nmmik[dS֟xi:!c_U#LT>65mrF3WkD |W*+dHm@ƚ"@װ/Spʐ<7$>Kz[A&N[I#9 *&tb3 ۀnng|Joxx߇}9WN?pPEtT+,=Oz1sڶ{B_~锩",c߿"oPq(_Tx}b u8{nN3 @]|v"M$0ug=?q$`zGFYKPt6g8W { [t@mZPp X\!bAcF`@9TS7G1>n?(J:NЛ4k>Gh"M'0tC Ta3+zOBctW/ = h \w"[5KbS؉6|'hkR<G0o*bJ{{,7+.Rx{I67hcMy ެsk32b]4moswn%a)ش/G&bp,p5nmpVrZAϺˁ́Tܐ/1#ΉZV?~qBXdrKu.jˊN\v1% t@:>+xf}2{!8Jyڵ@03@ XE7KScs/#Olrr{x|zXcN4}V ^A.8"[9`̌%'=&0/_ $Hg;ŚS4 t4|e歉7|ߵ@;,nD$F&ѼpP/h %P:cj][NGi<0;!x>+/y`F=1ml em@,XNzx-,0l;hv'մtvU@ƭ  / d}"*^XW`̂oMaCv\u.ȷ o+AiN RhNS6m oakCI~cGѪZs-CUH0 HT߈ ,$JN&B.դXJ \ȎXng_Sxp2$Gx3FS,* kj+`|ьͫ{'_Qn}Ni`/grsjHy+OxrA*eYslwI~$(jm*v|"xv@@}|!L4߆[;w4,M6g|C'mwbX㻑I3R3*Cޏ?H~e)˨e<)__h?[rX+^lzsp0u.c~+x&5EnBz{>;kއل|cAQWl,]!ocQHlmC UA.M|yĶ?ܽj S@n٭`x<@@@t ,H+iB) %7~w{پDM|i>1yU8YqYNH:Y$Իw[kSG!0FDZPbMF DL{}KU^go* l?D.׎8BUFtA~EW-::wPH[3kM]+o>'=ޏnT,u)_4z6l&h0,Q^wnnxi-]5<KT &6tApgÈܣZW`<<ƻ[`@ю x, 8Z$p.F? 3N2AcpEW =<8 Er}3{NhU~vZ3rќv&4<)\nZv9+3'`P=6 6,mxSW4n iҽY؀x;;|{J$ 1`=d9n!ZBuv,> nƦ.Q2ѭZx)Vz@yD)o(~(CINdV ꗡvz_v~{;!x~}ROddJeg҆dq`_`;<[a^)MNW]E^]+"x򭃱sB~{D_&㛭ه@~x1ݔ w tTQUO;{éXs+r o.,'Se/'u_H s}"×ZZѝsADŅߝZW QY8Z 2CZΝܞ]\dw14:tGKoe1)RhpB—OȀt\@]bhW,-"Y!Yn},ʿ,֭&`y?Aٮep-ʞ+۞[0X.y 4CYffGI &W#?p<Мe5y}.؜t޿3LϹ`']ɏ>ih 35#4_Xq9;ћΛ&/O ̇?ȞEÐ)# LqxHs _R A,G #08DTafd!$O|;Ŗ2j9RVTفN3?jkdyO&s:&H}Kz{mG𢤩_. ܍â'"` OTFPv߹B ¿Wƪ;eC+ST{PЗr߉CoJ8)D̸~6Hp'C9W0K>bۡ^9;VOлWi6` lhn2aǓs_\H,?D;W F?~Mbg'{l۸PGg;giCj靡;pwcv*=Ο€l|dݺGb~mEGTZƜL='P}G L'-x}禠XoJ}᝗|(a|w69'KRJLͦ?ָ. mi6"&KzC.grfo |*_o?O@dLcK;3A#^;h*pNI[|N7{79Q̻/q[P̀J2_YBC6б}Xѧ{7+8 :|#;_-]|tRN&u:_0f3cS@LGNw%@[_\?j=qG\/b~GڭTL3'&8y,R{[Ć+EZ^zRYb-y E@~- o}U|Stz|%CP&8ÞOAhz˴ gdsO*.>$Њ~/8 kK+މI@7y)0G{ +d|Cm-2s2d{])v O y (’e*D枃?4e#aXCНkuxhçʏAToc5i: Cbw @7z@yjkPz?%P!/VmKYN 3/ﵳ'ґxWs5u&ZD sӽ_L~>r>0/&]a2Q"TSt&+N&y˦+<I: O/o*%d Y.~U{CݴBt~DL|99Mj\y:+VAE`@t(+hֿB?x[l o џ:4g/ 0mTvg{{wp>d{1j{Ok't} ݝ/|ctS v{N+'1ںlXCĀW ]jkkG[b%}1n*+#TirO|nlvt Lp0|3quR(I[6܍z59H&3|.N`9:`ij…3oNdCZ* uQI#:7 +xՏn{ךue郣$/y*K1)) ͊'.?=Wu9PȌw]O\YvόOup6Cp gZ3z3#g2k|ݘ0r0mF/NvG<-Ia7oxoXx+$@_/QaYk V-;frzǾ#yy3|gȿ=grF PrXpW[q$f.6 JV$aޘ.m=Xf^Dq{ yZd# ML5oz4Og'TVƼ!ݯG_ \#0[T#5yv [Qcz5H jo KŠ5_+F?Ev]rDYS_x3?ean mgm`J^z"w&tTNܟ:F>%]ZZf4BeѲe ? ҡqU'8@ osᢂ65w1ߊOC'm5=yK@yo?:zOql5l$ttL652 :i+.*}>hQ[!P)lTF ]ȯyC$`Ʊ16QW?],]V E&] )FO1mF|#ZoHb8/\6P ^Wz_ #vN7C9lN/7 )W6G%?h=neō{; D@=Y\)< ^H^qcHѭx}:S.AN1w@z>w'lx8vMgY"ZǛ16B(#!@wozN0-3?7$T"@c MP<x'&^S@4 ObhFF6\^V|f8bl~V*/_cU::sP@w_O ^H 1-'#R)'`hw ' XS`0ιZ X\=#4(A4H[3Q/Z5hdE=+^ǣUé^֧QEVfF]}# x+;P#lU8u儯B;`|v={D; OaнOt|a瀁ęަXߝQέH:n`rIz@[Wˍ>P ?]>ܵ`%a#kogy{x~X0٪jjI+{SGp  1v.`X ʫ 4[.g1WoPHA g |]Ěz҈N)  +sɡ70S301fP$F.ׯ%toϖLsV,GnUX:J 6CsFi4ȟoޓ3 t5Ԏb[0I_ݺmD"!Ka$n_$g Y3Aq3`d1r4@>Г P`e^.\coĉަi77kNʚoOp 68͐(=8߂c8^ J?sXzA>6xUnB b9p\L>?NGw - 9SԿ)S >>?l<ք8Qb'eJu`Y哃1˂kA`[ǎKv7A^v "J  ̓'Z{jDԈZ%Vz!|s?,P2B/ݾTWVT:3-{-gz@v83'އ otйU,@VQYA?pW-縼c?uI΁L[m x>YVnaT[ 6{h-Fۘ4մ!B!-y^|̻ܔ[kMf!oH%IbRj39qF r?/6L$p6c$@\ߩ/٤,ot" C$w056LkLڑEvXƿ oļ,e ɹ!]'5rό%\+gS#O(?&=b%uČ@?[QuZ$4#(=}aB^g6p@~6:޲l!3W 3J U6R򐼰 {RqR',91r8sowjH޾ d }׃CԾQ:$gAlk#upؠfZ}*KJX^$~0 yvu0gwÿ΢ È1O&!sk $X _2O/PX2 *"=1q2wv/w~`${&,q͜Pj#^vH' 4-ptŇK ?Q5HN[HfbhK д=M x 5Rj|j1Fhlw=S{ݜlJ>.f#ё v=$( %~_Dyߖ K~3 L˃vc~LR>[eP ^}YH 4AKY,zvfc 1 =ۻ4 NI ߣe45ћPgIaFDfŕ ߻h }=qF_mɟQQ۱T]~,(wJm%[򧫠HWqq=*2 @xFWU=ExD']@у؟v8#l+p++NQ iDw"x, _ 3/c5,QzE`bxt@duj}Cx/ʿ,M6IЭMV]'&$/R<0gSOZ[* Qxİِ(?VpyڟmW (jnz b"nSjkㅢ2#*&rʵ~ieVW姲ߔ*>'K=Yq%W;.|e 弿ap`8zp>mkx~B Xr aZUa>nY:~^3":ц/e"zvԹ52'fS\|W3:W?:W/d'*K\Tsu9.@)Pɕßpy*U?:uϳvm;G;_:,{t2{6bDRn3}9,"+xv;oz";\"jޣvybPv^mL~cWg|2șGmf&.U@-iܝgk; i]$ÖУsgsO/[O#v_o5ͩP?/Zsr!) E=8v1#пyԸe??HR5s~Rdx#N6NE;% [@@u/P "f@F(ZR6rŋ3%~nJz' 1g~ N-KZ0TO&!m5\!=&`a\8Cm'R~W$NmG~S%?8tCuxjQm[pOowL"н#0^$_F /Y&b!S*wڐ[H{&hSς9|Kܘ/qbs-ΆR?TNkg* ' H ;bi&"<.8l)JO(#}u?"l d 5@N\w1´@:rSB  {dDk$dW[$0A:=SWK|-g?y;y'e0Tӣm)|Hmp9֥_R7kGup7#hiXvp/Zn3;I ȲCjs~ s0\\#p?а T+?[ƕvg8At4AzR aQ:GK^[: ׇblN,5vgY(ޏ2Y$. Dw`Lucv\0fN(p2@z@Q- X5w5ϒy{8){f39JF1a`0Y1`ssEQAArݝL?^z>p{+:uԩZ7k%K{"6bl:8;A?TthXrf(:-ǎ{wJ{ӵ< @tف1d\ly5̀5'5 P_D1>f "J|cyR]P/f\ߜomN\ws e|R%G*'$20`B|; GϤCab@>/Z!٩@|GYɭ;G cCX'%0') 6g#7ܥaspqa~ezpz4|tΔϾe-v7:ӘZЛN0Gs5xn2f?i/e鎉( %^l SUg|N#lqPUn< n*+ۥK%󆥩E.Ǜf4f EbsE:wbw#JØS!Yj4Ҋ&,A7dž_U6&^qXϋ{e/ |W{Q?jRl(<7`] jU¸ߺ aC 2㕑xzBS$g}h/vl;yml{S }.f8<ݧ-𵝹;ZIo-Aoe zw:C|惉}.b(UҥۮEk a~y"jccSpb\!*ʼ; ( aj]Hy亴vbۼ{x` ^Ǻ.MW|o]xAP9VθyСͨ ҩЛҧvvYll3ʆ°.IE{|v|zSʯ@;zUEK~?T;ǡ\MtǶ?,SiS麨~t$[Y: .X#u 40%/.I\#(&14o!-%}gIr;+I2mX$ɳ :i%ԃV4m7XwX7W YDV^"jUޫ2kF{m7Ty^e4˹!5H%nGr/sDvЙ= &ܮ Q.8I|wevFa4rlS9GyNsl}Auu[r)"x#gLW{%U$0!п_]\˸ǙgxVl9e#M@S>)=2T$x6^ҼX-o~Y݈&@{gN!=ǡ|:bi<r#~g7v ?G!W.x/6Ö\*,!l^Go?F>2r[d0GD'ȝf;yEq^-C5oo754:DX%OְCЙ4WojלZ=1jg/7h SoO7*P@1n>@;Q_l cB>o~3|}~HP؍|;8%cDhI߃V64gA/WpyT-.mnP6ߏb铁 yhJn =4܋ȱVm}A9_"~o (VW>ϟ$Į# 90!}M~2m7W?o]Ir/kGB+9;>|BXw;t ϛ;ء_-V{5ќ ?,A? M?;s$8RX9 \SS˙pmu2H 3탤6CPN{Mpծ{gf|T6H UMuQF&_!0\֩UVՉk7e|%x\$A'A۳\7|ԚLX(vc{Wjp7Er睕m+%Bz(y;jq}i =ۜל  [k'MzhYp毽fL3/?cX sAbɗ!^e%'"Ch<^F0rM0"+0)纀:?\S?`~qGʀln׎3ۿײҖ z>W5/RO\v[b&Z'bVoP< ^&3"zk|G^ލ: pϒk3ߪך[=-~r;󼇧-Ⅰl_0O1|Kb|owOGO(Nzq|'mdz+XZ]q#h_h2 sҌ,RC >2 }q: ҏ9f/{N= cѿ$ЎHdP {P xVva͜/߿yՄ? L'F nz&|RG9gk{'`DqZWg:;hmAݒi}V_(f8sfxg6uaB%χN$e}pyjgw%Gc eZI1׷xGZLdíG>2~/bY{!O SCǞc^{\S~#8ͻOG Wqsy<{:UG .j‘՞cԯ|x zfto>ɰ&t{ =i :'SQg,G%Ze7`#"#xvd;\*&Y_XB=L6}-c~̀j[`3mY=m{*!#qL=4=(!m^>$|ƓGeؐ-z⟝(菗 |mGOHv_GbB` MPK{c{MZ2rwHqGh>)P˄ϪlNʾFK!"PYe\`W <0;mNn;=(B&l΃nb`nyވQ*|BD=;%N.ȅšMFq3{R4[{f 4š['EP#8Պow"(N |az}O`@ˑgAd>Ov$2{7uuN}QѿyN.係cg6 :g!>%k&P_w w lWͣ"buW,u3Fv=Cf&S_}qp4gV>f2KLs /T~a KoM;!ոtۖ3000 *C{r@ 6 'gVkc'%AªB:/co:llZLd37S!}bʄ` (+6o39$'5H g,,0LlZ؟C9O4 %3`_0#jF§5^UgUC\F o|ydLVCf:{FyC<5lw9þ濏+j _`ooD{@:Ԏu4S"ͽ宝n00c˛&Rmn_;*i=%/pZSwzk?3h%q3R!6D7 %P vRhu-3|JaGL6F[nKY:<~x{a7ۖ^F*ףW џ?Tte-J*Т&5'"'GFƟBeۍ\x9!)Gs`W'7NmLKO-Ek"wm\x^|? w4;ݼa  )GD$N˫/QKo?ҿ?oF>}H4k 1USs?%71= eJ¥ˏQp/轶ݒ秱Kk qY/ϲ(Y П|>DVI.+S}@~03VXѿdQKw"~76gC{?pUP~N硭IY?1e{7,^H{]<ky2&_4-:QCo1RTl 7 0عZo"'69[YlW Mcs3h{`4~^z9\W>d3Qȿ2bώ'/@[Cz(Vx6Z2<"^>Bt7:N 2 jbۂCe@"#H~A'pFT%&=trUX/9[(n4Ditf^ZW,tܐ*Ӂ֔nD4;atOGSBN%PPC%g!kR:{rbwTmJ@,E#[1jX^PV03ߚ| m- BمX Čsy؇%$]K {dx120h}jkkNZ)_sc*@`n +Bmt E$.$WıVHIO7E"z}|&`hC`/^;cڡGj}\hƎyuSk腐r OU0{x,Yl=shBse T8S==n'(8pwЛ= PT\Y~"BxS(%ڿ x9(y$0 %{ YO^ zӍt(ϖBe/P(]eτ::uDE4RbܼmΕ Rp}y kԌ+PM/9 %iHlJ~Q^mt="z8֞c95h3U!YVU3 w҅^@3;R?)Pm&,x+R +Nӣ#ز(OOKC{7`<3KM3gjAΐ's5\B_զ+3ᯊ@{t[X߉'g+`g.h^AQQ'͸ T󞹀= Ό0ܚ7c_r9a֗ggm#֜3DyQ@h*7Ei54rҫLM!Zv~"`!\ /2嵡fc$S^)fAҳnɴS jw9;T9RE[)/[RY͆*Y2PK2hC&gdF" ͩ2,OqD; ޷xn|ŧ[=umݓzCs(塚{d^԰VQa› p̫3;Io r#(o}bY^MZ)`pBGksyEۯl{ K9kT:bp7x$U *, M?-hA=v.Q{j#'+~:sVA7< kP_'l6{c1}gTf>: y/,LXvi1oNyx >]h/oV~`Yidl&@x*wg"T͜bNdi3g!0]dlSC#F%kq>@zњ(9S> ϡn &湖pá#]J9vȎxV@=E@&\ְ#N{ أ.pcv{ӯ:HO$xh!OF%ʱ,g{s Ջw*A_NJ{Cu1TS̃ώѭiUx~vЍҥeLJO4QσG^j huI\vq*ϦU3Cloh¸-a?nU_leB,LUMGSwAOg\Weˍ(4Sr{gmikCnD?TrmNO* *Ob \ po*j>GKD@fh|U 05c%~1|?<`$,/lc& y WY͵z?z"d /H, G~JNl~yWz_*3\// 迷 TvbC)Q ? ^׾eOA00q _d3&@v~%2_ON/1@|l'b'FG(w-qn&?ؘz$8,53mh#HB@YZp2Y{ZӞm{F𼍟08H} :X|{lj@9T Ѭ|~S̾ !?UKzߐ̺ aH MZC.iพ|8^|v΋fϱ//{M|i-:WaCC"3; \vXc@EE/x}]_]EbTQ`X!A A3oX慄D/Rt\]S؁ߧaqy[B!; 0 0VBS4fzxv;F gcbchszDz$7i"IyNDu&(  B8WX;w6Ӌn&`R{!Eg;ƶ)E&7.g qrz-2$3d&Sh^Aiv3[9 k9ٳJٕceF@_jOA~-_\Fp?f; ": ; |Kv_t; GOxG8ȡ h*b{1< SPI’ٟ\ 4dڲ-LE,f6(×T15)݋_8vjǪPV5Ăs>@?N`L$NUMuq |%+',]P^#@kjj^MOK z-1D*5:՜FIiG.3g@`F%(gפ`aʁ[S=)oy(0EHr͠a# r_lk~vhuc#ߦ 3ك}M)FO?irI|iFm*Il+3~LGuJn!T1%b9TpZ/˨,liM? gDyg\ ve I BC4DAJܟPk,"ƻOёjI7n|Q`Fe#=\_6&js%Zԥ[Vo[}+迫Wv]xT)8.#8\n\zRqur1 WC1s KKGs*߱IAjcYE / (]kI0;w279ܾ}\d#=H.X!E[ė4aFWܑoax<]sFQ7B-y|A/bzOx֌`fqS"_42< \/UR%Im碯w@f/ +9xEƗR)P; KAO@$!Q #RE!!ژfys-k񑕥n=WR־9,mH΋P~'|P<|!}w< e|GRQ xWHaӣ꡻a^v_ (pNp1W~S Ysԁ8-ajG^T'puIpq9LޙE̯?)ܹ;-x0N Ʀ6]_(q}g{챉6f҃J^d6 KgA_`UOHTaF-$= ě{DQ?q῭dLN>}<݈_61мJ0g@ "CA|dm۞{poGGgujtLx;/2?@.A: 3$ohFzxWn&P,O %QLJ /h$ |^Τy{",T*x<@ 32gHwrfvDS0N ~ϠY7hH6L W暺(s!y</h/!߹~6g3|an1M'E`BC;cW碽C|tsbGQzGZe=͜\[7vw#0B@IH??OWbzdc`Q6FYn/>_۶_jߙ.4\D~MG\l6Qn|\mDj:(~[G(cs򸟷ya/l_Q8V~zy.u^H7r6MwJџW3#qW{rn˯^W>-D[4ݠ)7VP!s );~p1.yV?Whg?\!2fBn\+Χ2a6'Z([ʮL)}=wv:ޛ:)8?7)!WC $N&w7Ǻ1v<9>*=rГ !1#<,;L-pU`׻ =@!XdS:/#4? .ƥ6y??UqI+)h^2-/<|IHwZWDe^k ڃgOuhaO@k5fIÞSw^.^0{P Oyu ⳣ,ts; 5uv*]rȞLKꊩ!C< )EPW[}H@mH_'tshH8xGq|]Q y1=AO>\[2qWGl.5C)~EʹSԿdqq\{/͘5Cz3f܎~Ns0 Տpo}ی~ogUV O`|3Q*{*}*p?kW?!w6upً#>||kHACzwi%ׯ~]B=ޔf֋> b]C[ph~U Db85UiU7 z>q Y]  ΄jB@ɲl1&уkҠ]=3Z)2]r!dv tÍ9i{ԻWm:!1к0hnyg-pPOC&uš_NRsix+6+D[zlo`G)CBv|Dy)8+DgAiNRx9q(-CDozjeemPی< :5TL\wv8>ݏېlݬef첇bMgήxm=u})l{=ڣ,]^.s~hJ///?Sl ܠ^@}&&q=ܴ9.> 4G&Yl0?4\,P{ UOV ^!}?vB[C\R2 AC4-{}&o =룉ClÁUZJ7ngܭ(ߓ/~¾`&suAx U=Ċ>s@zN`p@(\֒ oamJ L@qG~2DX%؅eX$\;$Z௫ R)E=)Zrɱ{#ŗ?q* 9(:8<%}N֒eHUZmыG[h06qA~,ڽ5lϷ.;SIg66|Yn!cBg|<c.v)6O; ӛd1*;!BQZt&q ! Q#Y{o4_ fK{9:2w{7'vnR;m;JI=S~qy?/x\= J`g|bh]*Ctd%j-@{"yg/=G.5`^8^bw)kwY?2LM,$:v8?Eؗ;Zvx3ĥ7FK*IDD.ŷ6 %6%/oHB-]Y&MM8&Ћ O,Bk_-TK?z|Xfs\Aj1@kO۫vģ#BcCpt!wox'\#CN]C|/LޣGo߀(VGQ˓>{?ΊZfŧS0MXPHb2XiK{nojD*nj7J*|{  bZ \/(Վ" r@y#(d9nQK"C swT1ٛd_!$T2^ٽjGE s98Faaf jaLzUn?z޽(hiNF>;BM5h_C qodrקɉwyfQ;Yf]OpFL$h4 Sږ^˷]tGԳi|873mrvx@/;,=K?(0LM!oxYl2?hʰMc0詋p8<΀ꀏL= DZ~ʫOю,x5.oƥ̼m13?=~6J;qdvAf0gjpyy5c9yиw\r=mzzg{})*ՙ)lUE4<;p ~\k_?\v#n/x^?KX)/x~#@6 Tm#a}gn$qڇ94f{kǛyNT7g&cѣНlWG_հ` Dař't'0a͉F V@$+P[skT~rӝr~aԜ(Q`ߨ\*i *5HtԼ@GI$!d"&ڑNɂhҫxRb˩"Hz.(_Y!h0_t?'Ō'20ig9! $KD=P{]d,TOZpxk2*ށѰJQ֗}%lEO;B}m}սZPh.#+tܗ}8Uۜ:s\?n b|DЊ{e-A syn.$\὏?'A'%x+?Ϗ*dwx T@o( (QzL3Vm#ֽB;B+#6=<[=2.6wi"Be8@=,9Uuƀr!N.ODH&v$0DiQ Ǯ6{__&W 4V twv a}@P`tz`渝@duǏmk\k+U Ọ?q3'Π`|ÁF ?M-~=| ɷ>fq*d'*Pc|xVyGBިv>\Q}фH -Nr,]!p{(K{aϗm] [~ 4٢f H!.|}+S8u3o @B6r!u8G;t\)A7FڗX &>J)7Xݝ)EY]t ;wG43Y W>O7iю_pFvuk[@hW7sp/3e+^?xTSm9륯E{N\bbyE[ɃrQhSK?Ӽ+uoV_#C<1nԶ{9gC]/Rz†R Ğb*C^rc#:kyۇg/\b|5XN|h`^x{<,(^ܾ}M[{i2l'u=5ha߀Jl@%rp CڏUs#{gΎvyt ?'jƭy09ObN~,K|TzfO(^|G2R0>YTzsG1fqMr?) y)_|l4Lgo>.&N GWY؀+OG! ;oy#L$׾g S*z*/O ]ʹ%xMM>d tss;sP%Y?*K5ޒR@IDATE?Bz=m|ξbi?_#^Y htz ryU/-.L|ReSw-߯ym%p$@ZQc9Y ^loԣ^? ͯDr _6W:O([&)Z* :!DԱ)s; "e/L00ɉapRdnfA6?/TWcM8W;ԕRXf] MXsX\H5GOMOa !)^Eĭ\_o* IAc럞v _+D~a>XDj>'Bs&&ʆYÄ  ħGsP]`+"-?OxfVƾK/P{c0xv|8*={ۘx;c7hE%yy ṫ3-Bҹ">cyK2Da fE~=k %YC܈DZ39$CP7@0:N80k=$c\vlGdY UD|yUz#3I88ۨ)fc(Gʹr{V| =-x{睸~"3qO|Qba{1Cm^?3c8=/o8vo v|m&-0{v=yͱ@,Zv:p-˨TAfΆJ ^PHAz15mسGq&Z ԡY^h[⽵RlqoTfFKEz9oxD(%Sm_ݠ0;<ʳ(u?ґ%K.MKF_xSb#R n^zzw~n;,,9qoil}ij]"亲>%XQO>Uy;J~pEi w%_:Z%&PK.q<dC\?fclP W؂e ҙ#p?ƃdgYv`0mP tuR :גAok'㱩濫#IJs0j4ҷ㷇ǖuvwJ]\G-_mI ,];*ґsuؤ\Efp o(q~"9!'%O;Џt}w{,\a,p~#Vi!葼/QGmDӳfZ7nUۦdg.S?(Ώh{ZEL$L?'LoLRy4߿S[UmdmjoS5׀.p)d5r-CXf`a;3]u,o\k|;#Ci6:~pĠ#w/(سڷ(V!ٹoEU߫݌G"P3>uߒ}f\PPij-ds=9e[RmcS}6t<> vf9j|@օ@95 L1*jB};W,$g]R{V.H9M;}Ͷ,?M2})zkOp` ׀vfB ߣfj\_A;_2proè{{壗H?$,GuiVf;g0P$ ?r Iyd=)~F(P]aTog:\M$vw]$P?9a1Σא/$|9PnuALೄمIa M3{\zz-ohs#lG{G耵xK- /6xsFdCz{B`\/Obt`V$0ή )ʩH(J1{p(b6Rz:: X&]ĈCK;} +ӵ}t'w~H!Aaj8N70\hokw.4ٜ?D<02†?OAȞ=? y-*ҖyN~JЭdrUr Fo L >`/ ڛݪ /X|+:N@h*C@ue@Co8Ro#O=Sd. 1l,h]ItArEirQ3]mpׅQxS߄;t&0gn[?woyeLS\Bڹ&t.E5beq1@H/bV!ahV]Qo/qJsw7fwhNB}1߳nZ*ԣ\Y۹r*P>݅'!@8[6H tⳬa6UOoE R3J Uf9x?7r>ȟ%Gh0Ax EP.D]ߜA=68:=zT41b"C;Ly\'U b_(nH.{V#!7+0~,hYzwvJpg̗F) uRMA]F>}Nº,"BBf2TezМ0\a|+^PwxRTߩoת"—ޓb3o3H\iN{^IʒKMMDso'om[wau<3>8;]&~e[k½9J&sث,õN޵R۠Ŏ !wg%e(w?N.:_]%\ .6-Z9S/xO Vo`~NLoQ_7.1n/{o>9_|Zx({ẉۓ ܿ~8)Nkz +>pP7иt4K,7Mgfv5˙y/3ٌtށN/ЅI.wKɆy#?WR}1]뷯;'=Pz_h |}.|OO+0t?9Ce[ O a%N.ɕ>{'ͧ)n]t|ε٘TQȗ \f75gx 8}G0sU>_6kҼ^km+yqYNAށnG?%[ VrI~sKk] sL(ix1E'.۽LShwB$|Xgw2T;iWSYR/{6KjXdrs:7V5d 2u@9 ף~JX%؀`K#ݡjع҃}F{rQNgbei=&ڙxAyttڟ'{h?M.#mK{O.?q4w0u5}qx|G>%~7=\R].07sN]]1U8۪] Ʉ7!%gU oV4F{ʫo~Nc-`f P{ 4H7 ۇW(Rem{)G"'&n| .z((G'`9^`r-KA<2 vc[ Q̍Ҁ|l[x../yVWĀ=k$G9oڶ]lB%ԅnMhUC sHHU@bO:9 'Vo?'xzϻa:^ё3iwL4a{¼E v:Ej&}0_u4Ar$?4Egr82*A@Ą90@ fP9G #f YTTP1D |w'|gvxUxA^Qf{Cuuuu5C3s~~qC.ZɳPt-hbn|QJԃFII?F֒Xv#9Ju\&Nzݸ g-~qƇ5\11n4G֕ː_cC? zQieɶk!(xÝ۠l~SFQN_l7Tʂ 2g`Kɩ!ONZt,@\=#j&$I(GXꯋ@Vm*vtRxPj|*vPEi@33R3+@;V$SKM) mSa!brC_S ƻ [φ"T;y^OT ~u#h&yݾ@" dB[ ~֭]P~ie&kd@y:x:U#!ifeA{#ޫQcϥ#?ʜvL9J;|e`#)CS9v)2\?1('RƉZQH I>1x/_F>9#!*^7kjs8Q>kUZH0MF`0AkYQ?r8$('MKŷz#%ǡ@i噽)҂UV]Z_vXR56̮[^GiQr >qO^_JoDŔ/J")`:,4[t 7(Hj!%r1wQCllp=9{q~ ׇ v$sYcӞ;E~?Z*s!aDނ<ȫp3^lslix;A/?$w8 U-%R {y@;SN˺~|Xg~`; H`kb-@y4aƍ S \O%,eSno\=Oh֌MG=.f~ueANkD>-H&ds}Cf7ePiT/a95h7GCС7y[9 ->q)csC;˼ג(5Ì( ש1"..<_W+ -,|4p"DXUs1_[ٴ }WBt4k`\w>)4uQuyl6iQQ{m\ϵB#gͧE%T$XHsqP/~ /H򍷡hG)\')Cd[IO}?&rm99VT+4l9Y]=F.oG9p># 9^W\7ꄤr`q&O仯@#<#M}{o =MNaS݀Qw\l8ꈌlᏸwt0#OO=.߇GZzF% ܐ&~/qog*5Z`Sp]I:N"Ga@m#}ⅆ?ȹc 8i+ _"  &+ k?8:U#p3;L5 4[W2S gw$WT_Ԍ1ooHZw7ExC^;$x38` -GVͰ3ׯ~W gĝ&j)]!hX8{ I Wo?/Mg#!ku90OH#yPINl?U$<2| ;S/xWrŇ[7C1ȸ7Ȭ80 ?8w']ۗ Kꩅ@&'6kv C 0I<.@ (7?+&PD5x;F`G~ 7 5T X `gUASë!?$k!OA'K MIo_J`(jM<_#2C~G? d,- ȧ ~֚`@6%@%{ ;b4}'GGR#q63܈J?EvXܯЈ῍) yZXqO\l |DKZgBxfrJdxC.pa=i8-i $1$@1`%CYf?28h49[g|J E&ժg`*i^#4u-G0vrψc46whGš܋c / :k<щZ?O~3mjZ5Iw:UI;; 2L`?gqfE) lc, ~˫' ȟ!LSȵ#i +B fW ɈS/g=lVPŀIx\w 렊Z Bv:J VqŻ|{3뇰Q_ɴBh=FR⻕ ! $HHųP\Ưb |*֯Gryܟd Ӊ"Cu6dAo7jWkԎpaWKH#/MꗀjC!Q?m uX@XWI`BƱ8*'pj&6{2DrcWwpE߶s͚߫srH<A`;1Jfe⻐NFaw.;>Xwf6eph}~G @1:_[?muQR APFq"*nmHyg3n!]*R'7꽞ywc5ZEh&FF}k*fp}&AsosZpVT1hs1hw̮ʆpO M.e3K(8؎G-gW%|uirzYb8z2X1Qa:T?өP)_WU9~0|%P=|*f5>k=!,K.3¬E S8L;іq?ϴo%*K59 0S;zM[v;yq8-}<$ L 3i%ϔ`g q`9 xƠlwwR2oɅys'W g@OvN+߱.?*ʄp!$߁weus/vfo{ y+Ȩß&ެ}=@ (~*󁕌sc!^ڜ(^0Vz}[iݾ(О.(m2 ɝkTHHf=Q;d]뷀A>NS~w`, M˭5ĈIUd4W2m.& c1Cr5 |o @f5?8sџMzv1!C:wYv ,K7r0; DU rI6VXPпܾzC:m.`Iw'89`1iXLb£$gZ((U{[5V,K3q6=qMJGDvS;3`ϡT^kVMP? V|@{( Bs/@oH?tz~3f7oQΫl mOeКN艢9g5%RDe?yp/s߉v9'A/;CV@`nIHI@;Q ~5%N^+z,xpVqpVEK;bhwb/c\h]q z8u/03&';߼Ofʂ!+Cs ~ePi)HƺS SZ s<Y)P 'ﮅygf3B+̃N}U% ttwxb|gstVׅghgN˛ǻS/΢[c)烖NL=uX9~11_Lz3s*2&Z̢ Idxq`Ig&;ˆKM;^Ğ~[q4ukqS&ާۺӽnoiޯ|}q(x_x^T Oa_ xXJ'nm %^ IH::d5gGvgu45vv_WُcI9]~J;Yq^Ev@%E'Vlfٌ;?V7|{k 5<͏ߔ f c)y~ ! _p~ )W+pLKfn)gnψV{\7[^hɹ mo2Vg^~N9\vNе3mڠL )ӚgSwJ!q&۬yWOE?'m3gZ$o g_!/Hʴ,U&HH(**qo+jl~5`y{Omdz}#>Tw;3O1+ N8t ^/!I6d~>@.`@ #ن1MNu$JzГ#(^b&swOhgߞ_H]y# Ǡ1ȂO~POwvI+Ct#aT?x0g=-!aKã3N(]M i JR gi_j<]jtw4،;]q͉vWh/iq8P-k %]#E[Bfx'ps/GB)V!ɍ@(/J^vG # /(֋}@>YGXBCNj<z礍;L;#ze:YVud;#h%Áɟ?<_gY7}2 xoknKs G=$|Sw@!0~.\r%~ ZcFRSYj ǡk=N:rL1~ Z!85Ey. Lrn(~M^l5>[X:?/;ec*.3`jZL~MB@A2\ܯwY)~M,N%}C 0Wg XX&`Mx>q$l>MƐD`'ϱd`Z~fOi9ÞyZ_w$P *W?xЄluWk,8G}t;nԹk߻C`Jmd \L%PS X/l`Л(dhhi {Ƶ, |KE*`v({qoHeiS=>^ϱl`aSa f_o6MG@>B u_#w㺣{vIˎ}nK KP~?AW!?GQ"KvAgSp)YQְo.B. [H;kkt1?:6n0Ɂ ?j(rUro莞@3TBD[¦@#;vaB./fed0oI~ML"6sQ(K{”*GÉ^Rɜ| ;{[ap+:@|y/|jLa'quݍVw ?%e\V|Õ-!˭R% W :cXNRZN mG_>o{C>6EEJi#\W9 NpNzȅVOc)ogaSvI_{3%T,{{w5 GxZUL;埮5saX:iI[T n{F~Y14~>U&&9"dIpdUzyycs>%ֲ,enŶG;-fy2XWZٞtx,~{8󖌉 $^}EWslUϽ[|ǃu16JQchb"a2ۃxԳb8\kt#Xp,$ s)) '>oڑPLiנ ۸NXӜ}fYQz(hphl y;T⁡+VUTѕ>zϫFRxeȵwwv@EIzOVW_DfgZ"'qRǑx7$Į);D򇋗wLNqE;hL,'(9){VDA5 ^pb6 B 3ȥ7w YsXdp~1E~ηz+򮡿/^׭Zn UZj8Y[M-_֝ሳ7Z_#n~_%ړBЬ1'jҎb7\oSYC9K?>J0$k=ݙg̭W;uS<-r^ ?8:绺k?0}=74Og1y7˟m14-vp^ CgM=F'у`.4XǂzqP{fMy )Z1\ jJ7a<8ZN~^~e9yhE?j$8~L}:Rtm~'@>vO|,h^'P)y@y,P6

    :a3ɯTϤO'0!BMe IZm x)XΟ Aw@y';a =ltRIy> ^(PCJ_iNx#*p@X:DmB]uZ^b1 ػ[.2OsVsƥ"k/AJJRKZ/ оHX` hL_ T  L󄪇uH.P(i9FI) mZoG\gXs-We.tSnLFpc="W@@/{e} FkDc sKp\!` ׏B 4mo>|%\$~ھq(N=55=UD;IgV9d]RĻѴobg(^},{pA;:n_|0,|S?hw `?ԥ~<|S?։j/i`2^_Ov2I=M*;{<7~9Fq&8ģ0\ n$z C3T~X`^rgE| P Y… hM'ܖ>!Ht:M(r$߯@D{'иi`rS@,`dUi3߹L/lB8WH': ~gJ TKj@IDAT%0~/mˇ`ؗ*aQX;?O!wԧu/"j|(  T X`6qK@fB;0CM~G0dq=%wPz=ﴒ"w0lhnShu}_zink3#li`!'y?0Ǿ~X 5ca:urw&ne{wW/wkn]6 F*aAX_+v)^͚o1?/DkZV,?=x&;1 ?;H;BwchD -})@{_8ɚvbezow=d*x3Wme0ȕߕUzK Ѡ$2|D}8t}\ _-N I)|[v\nL-\xH[vok.]_}|کSxYX?}^quٯo.{(9tMR"/ᔏaxj?wi׫.rSuVtpKo^3}Ǖ4LWhnIfvE Sєi;ط ˅tų{A{Ug:r])'.mȲ.5j_5y(ْWHUpS̠DZ{dI-~ %Cz7ݼ+cPmƘՂeg yZYSv5kh=^\O &.-g+EǬkRuk-&9+uAz+A|%H.:>ء)t2#{FzmS'RM#Qid^gjp"au,-~^fsX8/NRvçޮZ hց_ԩhܓMI/=wt=Ɖ3[պ26(ǣNF S^yI.҄Gr׃ __MW{y[J,~$A鳳S=z톔u93c=م $n aכ[at0O;F.צ|kSg˅qas3R*$Z[, ?Y_ ie1XqlK?tM=^ow`|ar!Bk߻mgy#Zd8^=$/v="T> w@=$nnl +%Bwߟ^QA4CV@TFGV|>c[ڵP|,GFgB/G~dn]Fyw:Kv%6Wo`3oj6|?+B$Q G l: z;r!%[ysiu"D^U=Yi~Z"wW:$EX] p{+rMm?@aN"~3gh}=G H㟸~>p]nKR, ^%V  p@&y[KrxVJZRjE*g_wih` *@zL E8 nl4b0"7#ډX.bq5FM!s zK χ 2!Kw5 Y*6bmZ{r`&3>8~ :u`S;ZY8 ,6J_y{{ 1 ?zZ̡rg9[ E\σѾiYLpCE'y|%}h#V^(_E~qs"R$;0?]Н!ulW;h'Eŗeozw3a| s=/hYcG>\p_`x/ݻX;;Y@ۘfHoήתhŔGUsvMbQ?p'cYl<<6LZA;]9vKfCјqޯdŞ(/oJy0vE4|/S>zf{%;_ȕu <;9WNppe0ȃ9 N4@i҅n %͡'lژh!w'mb?~G&nt|O3Xi;ƽFPцFDzF&uJG} EZ˅KZzX'>LY*lu}:޴3qПu@G㇑!qֺaq@+x P!S(!\ihi)*Gp#:=c^/'7W%w 2Wav5څy5^O~)cܝY~To;cw IJknAڬ ^2$*'\6ŴS)3;ߤ=Ձ7r{f z>9 Mɦ~2xG/wӱuly~u(t2g,pߡj,;ٍEwC~/nd_s96$PտdPy6tkF^<~bvߵ!5S|k^ށtU_lC7͌7.uvsTK3=ܴ1dB"/kԁ@"PB3-[ Q< PM{7t'T>C,xh*l;>sȡ)OLi=-gsvҺMEA}w߅ j$uȡui_m1Z~&>7AG8t{bU:6!$ $,H@( F3C5oݕlH"Kߏ"GD/nS&^!ZfGtU-Oϲ~@Dcјz]!PHMutRt6TLD$ ,F۬HnIaLgFM{MY Ts/ɝ"6V-ݭsײ}{xL؍swpwlh=?O7rͼt(Ð;5 \D 4jεZ7j4,0>j$I"@,P R9G7}G8 @>T?0'' |+D??0t{mTSa^Cҡ]cZbx\x}\'=6VX&BXs3- zW۔aY8V>QOhv ,0L`*g<xQko\W~j=uvsK3WYTk^ŅlMzgr mQƸAAyLN̹5I }s] /FLOvY8[;GquS}ϒG$t/އ~Z|v~(#*]oN6ҟwNޔrDRp21$7p,zGH~-bԗ"[^^2\|u׺o vol3t:`}hkW cL?A w| ^OؾesٳkS!O3;*{;3B9gM/xBbGEp']{FiK|Lq}\ۏqsK'Ő/)=[޺C+[~ܸz%w K#EmStE b(:4]Z7O4_3aR.i}eYFl1Ͻɿਅ3cC%C/|gk?'>KMΗ~i{l/n=uKYMeE"4cqX)yr j;%%Z"*Vdbk+R;ƣ0-]f nWْ#+֕Z]㫊]ͫgT|$߾4^G)Ҭ,D_kۼL[|tipToGj\ɗ%ߖL%Ae^" A0z͂Nޫ6NIY9;hSQ=#|y6;Sƥ=FML|qzavwh+rRmS?ȥRwO;gyn}@sGHy"- QAH*~%t9m)T_?CKwP]O |=C9VH^0" | ?BYɭXF?~V>F /셮Yڀz@]\)P-N(T?吃v$ fg;aR2a0\u@_-fK•b x!q9yoLwa! V/9mͤ͸<3FۇFg'#I:- >.TaK݊KO \̷wǢ? ΙC{{OrY~r=>y-t?bSXWs?T;/ZC.Cw>zjh] 7ǏxzsJ#O (p\dayU#zPܐ Q@y(,efa~ FwOx];g*.ǫZGA;YiigGq|oٌb57Xy۝ 蹮ƥG34<2GuF7R|6iDwOUz/p?yT;A{eD_S UGگEL}=@u)z]3n{UPJ1Q)cg5Q 78P+f_1~C8֝ hknwGGqͫVPO; ';ƅs%H7x J])/Ǿf~^n/Le tN6d G0?tTS,~6tG9A>+q$*xJ0h kʹd_~_'<Xߴe:@]a}X: r u,iЂ'0l'<_*\@$8V`\O~#oG 0tSaUkxZX!UtàU"?Mv\kٮtCs1CK k dY:RyU `Z zhZ)T?GZ ݏK$~xT.o rR})8L[mOh/YAyYy "*E@zm)1,?Q;nhˆyl;&FCޤY'`GIO#o5%P)0 螅<fJ#T(?u>wc^Jc/{fFw76@g><8HIO^k]E ̑gsH4?`W(y|\J;ka?~UY팎u*ExEɁθTUȭїL$b79#niR~ԎƑ-~5w"~Nҵ1s:D z ෂON=Ʌm#:8@Xw16ˠs@#U"7eb0ɼM XVo{9F;hB2\{ӌۙS/v/|UC=niد,ߵX{qǨ_.,1F;ZuY}PSA n+/girjW\L旧zWrOuKߌbcdi˱[g^4vU.{4[Suk;h327sy}FiKjiڻTJ/SbYxZdA_Hh+U^QzQ5o@ MziOTM|XK3R.%93yxj.әǺ<#3/X=7ޖۥ+ɹi{1?hP؆,Qf7>=2]^*ތ3?9{3w~sbȿ;+wZŢX&C[IxHC=JE7j|/Ȑu?7_:9~?п4/3 H1ЂP)lQc%֨`#LTrO0*1ڠoJ_v_4~tp~]^v u {w̜6?J51 Vj}swh{BN%3t|ZsMpÚ67Z՗m*}a [h1Tz\'W%1 ys!=}/>ons~t ۛU>'ijɝ~|l@]XԖG7R`*O D˛ p  "$4 Q8nd W`Z(`p!@@2 {T!(ͷˇZ ɵ6&حPj4 ΓLXbv \en0, Y0ZkufNǎ켆!„rk.ѯ$IJ d#NKaa}x|)g DKZf]CSr j #]η0@GR"|;p)  IKUSj`\o)T'/vޛwU3h9|;Bk*g@]{xHcg ހ٧ ŴF l{$b\g@&`'hP&ºI3G`xّS)=ϏVQ պ9P,!nndcұ x\xGͨRvh rM= qPp {.vXðԳ. }ӊ} K)ۣb\FTσY@ # u'=p/GxE,hCRT=&BОla{hw UB dx2bɴ \ ,k h*WXO lif #nE< <*Zyn}/ f.>=,%7O|ע=kr~ <-5bn+oS:I?>';H!%Adh M[&`L1)!&ڶ[2Ԓ+y-z~n"ts8KEyb{f2wtg_t(}EEj3卼W#tgx?rT5q^1)|81 v*84ĪSK;pbfho<D RfSX-YO5#eh֦]F~ĘJ&}--O&C8paRM@1|;L&p=<sZgP^v5ԁj:vado7:F ^+/)Mՙ%ϡx3,޵0#ޛ']2K缜r{[\q<_VҳN'juyz߹dzjU. N履'>!%&QFO%ʹ RZI~#M| /Qg8³Vπj!-ޞe5yuH_-C錉 p^;Oy:4bx$ ]g>>H`rds8BMVr ;c3Ky^r;4In{O8ՑyMhLI)M_MK\Vk1>&8A}T3B'׫GGYejvL A~r ʉ'2<;}^uok˔ٔyMdc OPfVY^/P^c/@X!,T\(J5eelJP9vЯ8*k~o̸'tD9 T?hQ 㐔nỿCIM@]smyu(֒rg@=$i 5B9[_[| ̛ 6k_aH` GMm}s8+:3[ [{w8YP`@9Gb}៾#2(O?ǸoaD[.Cv0ӁHv6%( 4ܠZJ4RWZZX1E4@GxX!uiPPL+Ё:P QG\L'#\z@9g׋M CbױIGly̨ 僳™b2Qd7u =A:X"XFǮY7;n(2܏ Rg 0n&/g.woN(C7<٥gj2%"s6^ŚC{L;"r?A{AÂ\uN`Fp;i3BOL+iM  @eL <:k-n֠\3 t 4| p\0oy?Ċʬ,}bc[L7qyJMexy~除vG{vAɝAOO%- :Jv=On\HyU߻W@H`S ]Ƒ ߾_f F0r23=Z(f DgZ8M6v QZ S?Si;CJLGe^w0b#<¡x7V׹KC|:}LG-x^Gf:qd ˂xت2(ׂhoJ&;OQ¿0{Gj~%*^CVX-نǔqڜ K?}C ߵ߶K!?+ЂjL.b{J_O~3!X{LZ?8\G̻¬ϜŸv%l)@#ՒaF1vtx8(y9gVr@KFIfûВ\[gfKH|sy@?8L <:ĻѼd? H7ډ~Tm@Sk擣0%~xf_s[o1465mQ{ᕿ%D :}Qrw3?u;󹺹V;ũY.nyM9.[NlWzH_Ÿ,)FR1r-a{:t}"'0ɒ g]-sjWENݡjW.ή1ڥHKcqI|E.`\c_%RC)A}\?߳$I9\M َy!L7o(wvbFhcQ>K [u'Q7$0v>LH a'މCylw,gJdW{㐼U~@ znl"<g [ 5Gj>zy^7!@%bG+9Fw;50kPsmx𤠗D3fݡG,0omM!0N|%𽃅"}N@@#-]E9,kZ@/XMyiweD~SE| &ygx~K)VM6[NܶvӎB+8c9R'I v6![O:?SJ d̄*6A/1v0`Bv,[\{S+ڑ|,cdҹҼ3B9|hI$oN/x~@s:] k[Qs j%Bz9L@As_U35hWUZquAkV6 H4~Ԋ';P<g꺳VĜ sw ԲT]3ݟ[[g DFMvHd2")1J@Ogw{'&ւft;H,KaKHv ҏˮJn!v7׍Ys2:_ԜO3(R2."?\r_K^_r\.'`}s03K?Bd?&u6$s1b<̏Ǿ$!T:Q8Tg꿍jFv! _|@Ne/o7pfNv͠9/{C KCW眒3%l48v[ŒhGǑ,3S^f y_Caa33;\`q*|eX%dQo@wO6+iI:ȕљ- !HOƜ" * I4vOBzIhLjөy(PyƳ\A/Pnu™a[p{Jؕߛ?Ctđc,5!Y'*Mff^2sTEv2@IDAT^Pzˬ^.tN{(7#syIzH RJ%*R~ JPO:cSVti{:B_݈vX5偪wUݧ$ /6 | (h"q)%MW|oz-.!ܧh5~ q*PRneWS؞U|jd< ێPy (C $)xLd wh+E@_C;; sSBXMUJ8/51c7Һd滶>=}n;lsAyWCazSڴ)Ȟ8OCےuÓO G_mPgk}̱ډΨRgeR:ٴ|;rATݫm"P>w@& /J^QAA 韑j'3b'm?\(@2:هwQr)x;8wS}S >^'V?T+(eڅv PE;- KKf&^+L轛'QZ/ƛtu ߑ (oo Q*- 45ɑ?T;b(z9mxU3k0W3o32|Oˌ]4FtmV/?J_s?3xϘKku8 G*OzK/5m|bfZ-o0G&{ءB0yBMC''m?Sٜk~tjnR'cPBmLk AF"/1h(y,LV4ohb< gyK+.$l|(|! r7n7ǷG#5 gQngvvF/K20\GAԤgxw}^c%n@IzѠ-u(yUZ2b6.`EbGf!#[39jdWOfrȓ2deat~h-9]'Y埿[¿zTbH;`7HHg$误q+>y/ٽY?v|CSVky?|3\uNGwc8˾YxWh+Zo+qtVARoO6\o~v7^I0<vJ˟[–p|L#T4Oh閰`G9!yK'M\R|l7 O彦^k-69DadE.7 { P= [E ە-H#&rEJ\ n7A ޔ|-){$gR'Е}oq/%1?r -!RdVTd+2Ƽ_Oy>~Q*9{3>gOZsϯ&geɓc3/پb_`;`bFDX'tڳ䀹5Ώ[?vxiy2+|?1홌=w9s.G;+W-~h|gD;frz>TXWTjg~ނ~~aX!"ƑLZC6$"XF ١#~$0rW`Xsr~B^6c| r@{zRz@: 9C99Nz/~|؞- _(34l^n2,;C_TS{-D{]ut+.H.oa h"@ČPa!e`ꣲm) (WE뼑f3f:~[@_9J"`y8 X`w *xN'C5P30I  n_l_1̘$H40UTFp;,iP}f.ZNpRU*@ßR̢/KrśBS!MEx[;8z)*:-gυ6ߌM5Sh|uʍHUvn0\&hApedɪAFg)U\6vHbId 0ܞ4_lab^`zS |_.lZ ;(2e䏌QO>| xsQs@Lq첦&a<{T\|nyY;ERX0d~WG)kaACB`.Kw=q\a"ĠaPb$ʨSh/{ę;] 5:YP?ӥg!)! v)]$#5ް{'Ñe?>pr ;清F3C4#cqڱTLeQ,eCeL(ORvO>vpj~UЎ?!z"ߛr7H.)\CƗ@@s+Xk!?~ vw%jURh,\TWʯ„0 ~a[OC۫.ZKɕwЕ(h.*Ns ѮvOm D&b.''hC鬺&[ƕ@TRe.Wg?҅1I q|bzCZgN\aHq<5i~AufUdø{LOd@:WPqxL:y)XfwZ@c!yȀ<p&=mg9m&u=vg ,٨_Ɯ|?+m\o޿D1Ǡ I9zY+y];T써#ޥޱ`1˒|ēs*.m?# L[v?B;o9qDsΫҽq%ٻW65X^|yv^jз08SG\x+"hr]QZ&k/{T(|kqt!eױEkȵfDȱd.tqu/wjNi Z_M9LXCga`)42TDE\o|qux`i^| /כǷbӧƦ?,WWd1V'L|=8g-#M92,kdӑx2~pHߙd}1G p@?MxMJq/1_ܚŪ W }t@~ Ӛ]&OѴ\N/F=mm.фb jy|`IPi)kmM yv ~?bq192w Su|0DwtG=B|hE/`bؗnKtPDQwc_;D ʞ͛e ?S_SOf ƺ9jڛ}~.tzo"]q^׎rO3?UhЄZ|LK=E׼),%^wNsl@ŅmQslKt?J+P ӯF$W$ fxoHd~-MM7U*Xʱ *}Lښ}mYоfu<לKu5oBk6KVګqAܛ:4V磣+\!읉LsD`[ gRZugK [`.`@'P/~cYf DofW+ CQop]Ti\/O&])?FⱢI+焧 ?SrLx<ϲq hw\>HA][ʂ`ԟ>Oh'rD}t#Ή5q;8642 ɬeNHkY0QߓXE|~F#%Ӟ3gJL=3j$#;>8}V"@TQ)1Q }hgFookaJR{3C"{؈'9jܾ/g?֔bsG?)i',O+ߓ!X7KLKЫ&=PZ1>XA3:h9kܲD.y u?R2aJ=n6yAIw&g[ieDZv0ˬ H3oC:d/I%g[kWC0 ZIt)ej̪ūG|P2x8_s:[~.ţδ3Qڭ_[–`EdQNecc,1-q=M"H3+٨Dz05 d*}gSd - 3^RgFWj(nh&%hñzcĊ6[/}A_'>rFbNYKg!H0 ([l]@V|&r#2Z?/q]2~b`x"^9dsO UY{KYu'뙋r\E=l[jJS#_qlGW>xtP|\csJwD<"6?7ۉD8Տ..1a*{quv_j!}_sG^z( $OY"VWnΆcvTR]W;$d|JPyDdPnU~~^pNܿQW\ 4lrwu5:"Z&omא=՞az~,(vptM7-hL:B+*DdHV*п q!PLEGMDOڲT;мM4O1{<϶{?XI\wGFr| ]AUoﲆ VopsaeJ.7J4:zeMl=ϧ<X\N%/'-A& kw$(k'C=8"}0%.!g ~E@z@{Jy X3C]?sR vECMH;u(A@`]430^ZLT\sg*@u:p} .0]ҞMk,l@ ?U2 L/ 0f_ _ ji;CeYD&3,p /aL4/(?t`E` 6M$磶r˓T(Jdm꧖*_5E%VHLQPG 0Ma-)F:\D. N0+Z #%M,gyrߏk)H~6iEA$z[`gyWYzI~X[3A [gKOX?)8̲&Z+1k?a2Z'|:G M mn 9;j|B/]꿔G 3v!_9րz,*?, <>TP0 D24  ]"@)B F }Y%HP6=Ȃt1kVP-+c;]Ϛ|}ZY8Z*gU)ۇ?0v0W= j=}Q}"Ǩw7 rp]6;!~ۜbB!r!OK."Bꡰ\Pvbv^"byUiOs.1{ Etle\5W'$&Am{:0;UfSR(prvmG]P_R/E7Co*իVgat5VO0^Cv;ޅ/TwfTz%,*I]PA/Zv1m:kE",@;j!" aRsSz <]nJK*g)-%v{@ayce~Oh硽$~7[+|n5KȋS܄"l & hj],4r4ʐnjC:*z@|΍U$hHbŘa6vn}l>>VZ*)GXZ4\o~5N JgԇL:0#vs!v|1 IOiVe,a>+1ȩ7؅KTP+aHv w*A/ 罬Ƽnb#c:sJgU}FsbXQ! ~ݙjG~4Yy99?iTˇX?&HKG K7vEM,yhZɱ#SN?5+Ģ-)ejj2CPsZS{ RRE/֓;|' &=Dwvpʕzܨ[Q}c i7א"=GbWqXP;1j'fWaA~nkb|Գ)<ꨑ~qw;U;UT\I"o.7ɎnsM*&X/ u'9FDS2m?w5tmqYCK߬ qG6lsfSA SO(G6e~#wwخB>3w?u .k6U,r{^m_wGμ &ky[Cg^g87ِ:NܛU w aQ#EO#r!т!v ) |y幔D¾ΰ4O;ƯXUwZ3@]^j8Oe )#ԠH~{3~I(_ymqe4Ͽ5D (v0 zAKzn &LNѬH /܈[D"-NMM۟5e0dGOt6+P@/5]`ZCʟh@;IMqm΅Mr]S ,p ]̭󹿻q#rrQFV~S(k&B|1|lFef^s+vkb%ATw+DgQ K@S{,R=r%/.l|@7 rFH{"v?tjn{~?1 Ͻih_lSY^%nW O* N5Co7;6_- cnb7QNk 7g(US(R`{iQ8H#s~ArcG6Z8/9h lκ˶ Ѳ^Rw ^ a~\.ftmEHSͬЧ9)qOO!O@'nSiO\?>*?Ԣs?`kҩrr]+gT?A#rU g:2@ǣU_7Gbe FDZz18qĪbMɁ &d>ޖ-DZ$\qHZ Y?&POy]k^ B@=2-ʀj D:JysfOeg+=6z*$ȰO|" n vb#v }TvWH&$7ژ[A-II깤GKӧ'Q$pBS K2uMIVOQ 'i3o, +c으e}۽Ͷ<ֆd=g>9a%ґ}y9八 -h|>>Gzp3ொ т<@9 t8^ o^Yہ) OSzSs)nSd.UMR_?{2?@f+7*sZo$ҿgoy#[gއ`'rMx| ua#U\y0i<1}žj U OsBRgD)>݃1K@.xC9=.HBu ߢG( :d?q@GB , &D#W چGY82o_;*$ țj1ͫ.\!n:'6~u(@Ka;y_\$Psދ\Dvg9c3y%bԟF:C oC KP\^ P,V [V/.~짳,Xr *iB䠁O}M ^"\,@0_8KBN@}vw({k}Cw'?56J8^& N,x~sK)ߟI&@7>ȥO[}^g7'H<?x$4 Jݷ3|fot(@k`)URWg103mҞr^¾5k 84eq)KpԏyOo-F=YEOTX]-p : t&t e&z'>AI7.:Bft71TebK[}%X1 ?ygu8Q9|C }-줸@gӆ;&Iwd@hXdԜJD /NHl@yK?Wo ]p@}%P_ǦwI?gY= ӟ:zڐ4)B東$p\ٍ̆ȈVlBC=Rn&pRM –#\1HHG ov'3JAы _bߨ{̫[ e3x$R L~۴΂m޳c[ZvrFn*p%= @I.>gLy1~2o1ԍ=et2tӍ58|yٮn7hzLݔ|ڧo#ό˲~}ۖݥrD/ߋ7?(- |O =BK{mقv:h\>f\4|kc䢦#ʟBlK.M6z-NO[rիBpP2k7=F(?Uo_g0QHqbFu5/h熹x,Cԉg>Bs߳f g#O|Xedq9v}=x_Cq27%Ix0\qb =כ_?@TgQa keCgLjvzwvޅwSt%hQF;b.M:z\cv_,~8$bhw_Dfrʢ+}=/ +~Q0>qR^@eV=#jBS%l)mii ~!zPЙP™0}]KI#2KbYw;#Y$ԮdX }:as{${_Ote qCja!v@w$@/H@l:ѯHo$ <>瓻@=<_Ϡj;e"J]/_Aua>,OA?4ބrnzNvOKvF󁬛s5(^͂m-R+~X~dބ:BTVt`[j!'f_YZ=V>{*{nmhOV ю+WN]kXyv,Xi lPtbǧIg3!,m"/ -fCu4"h QDB<@q`A+'C$O-9M,0"}/Z3nI_ yBnmdX#|5lkn[d0G+4/6&=Rpd/ eZ ,+p}HV`xY":G`~2F~gd6 xRuX_OŷR]hzH)0չn>>qeI;. AF,ڨufw#Í#݃/z81X@$G[I2_q,i!fpR=.|@d ˟謹9xGiav.܆~_Sͫ1}=ʲæ<_ _.ʿ'}E% % tt2$&q#[:-,B;hpaLz(kQ!T@.tSC41IY$4I݅ 'NP8'@;du6ż6 M\V">[WcǙbfƯ<:+'`Ϛ' `0SuǍC4%ߩ#0<(@;PSֿ. 3leA3iS3ɤ?>.#cytL6>)D ܗq={L ``Z|׭15tnܿvYSX D9,kZvG>y8{#vކ\A+|ͤ6=Pq{{9Џ8қhVJqI?-=CT;fU` \?z@9-ʞ}F [ N/u6= "5`GBٓtoKD{5%lFi=P\ Q WLP ?kN iOAՒqWa(J`@J7ع hN9~M--2 X0B`>C@QS {WQ"w|ǹ/ɘHg1E )^8ݝ{yLHáۙzNAQnv_'zWo(p 66] 1Y[_` ~TjyichԜv jN;Ȉ-4?M@B\pPoYBJ,Xv\Rۜ@IDAT4oŔQ: ILҎ¡+K~|'K34,M*j뿛J?e?̨0̱^lA G;;g#t\z5OĖiٓU|Bx 7h)FKБ8^_8tf5#b٧>3S-@NK3P_R~;iL;rT={bNri4w&yAô3/vfm|+%i 33?d}eb mةĻ"^U<0^3{v, $ewYPws1s'al` ao쇘y='JFnO-ypu(3ꗸ N=d7B+4]͏4mBrN`\&@_\T:{b; X >+:RskܘےG(O9l@:?Kσa c {@$c顶q c|grJ/c*v-Ǡ>㤜[*9*OԸLCm|zv+{jo8VߦͼZ4_4Z?7ziy~zuQ+ouz5?׮96u2> ja]оPt$Kaf# vz'Q=4Zk^K::܊O?LXt:Wk/瑳O;new(Mi0-#)Lv,P4jSc1.|IQ ȱYx`|uDVePRhu82%ŕ揌ѾMOv@CN?c>%zOX:A6'>B2?eVig]>h&0&6`]LCfuQwygX g:u\^ +z޴`&XqEHtc[u~& \|Pⲅ"|mir|ڙ?֯Ev}bP7u2nj$꩟=y8fX10 ʵ.HhKA PF E@_Q_TT|Q,.!wsH2u6a*ձ%c_@FU~-;Yݑ믽$%PM"rYU+hw`*a/յyח;ePqAӁN0c0xyaPQQ lAN}k$A'HXuM rqe>D}UW/@o#8!zi4ȕ' (4_hny3{ wwk2̸ s-~W:NxA:Bs3?1 8L=3%VM*'VQݓז܈`kl%xw,#p;o FU'A_iǿ]i oMdMh_Z0#ٜo*{sљJ2LUL0M pJy@=/ʞf@ L("c :hP$Kߐy"!Wx/ -1cbH%PM#w!!;5쐐|ɕ ž%!়I}¯쿉*XMvML]4q~Sg@W5hooE]?֜*fpho;j,g9>x7wdƧxI|}J'Ur疰(-"dҟW4!Rs̑Mw 凙{,˴vFM8Gn3ýp 3,(r]MKɽOԝ%7kS\ݭy9bhvŇa~/ޟc<(}$f` PAD1bf1a\] ] `f1Jq=oۈ(9+:UuTXKMkYe. Y(؉ی;);4- L,<ԠSfcNw!ld 'Ի):\ȺE cI3ͺB7kk!^Pˉ@K q,\jܼzt 6`ZQ"VbuVEϹ҆gp/ʇM($SVm9;% y]CYYq%S5tD[8bSǻP^n+ɕeSyof Nu3w5V䴨A{̝X[.6AWR?}CNc,Xs r${$,9dyНdb|(IajWʁ􋃠30QK^ޚx~xpТOw'>D=:zoHkVi 렟sU8iao `9 T!{1!/)~֤7?o7n3h >3`sc)1K0(\`yhB2{f2Z_ ldG t+r;OtZh\=f;^~á/ZYX בѝ#f˳Y8:$7.vomD~~\# .jܕ{lM{6Wcs[\*hg6;!I^ԯNy}7dͨz1^L.(s_kpr!ߺ0}^RXӎ~<%;orK|Zg:GĴ!dn 2Ui<+X7Wgk Kq?.\z@b@K$"ż 1?C4}d!Jl2[lV^\u񙞯fRy)~lv;CPi`.xo'zD@3ZW@!$ E`뵫 l, : !ܮNrjag{vM>'+mIp_MRߑDKpUkW G|@uM =vZak/~Hλr{,rX[JW\#9(^ = EJP40U v vE"]w*"cnyzF _ Аr@^@%Tޅ bu#ΔG_`(~w:zӠ9ES)5PRj*;i+}r@tF`mӹ; , % L_^OkpZl3?큅NAPkAa|x޾5"VEzvuyR#0fm=zŽG0N`JbK=sD TsV܅W(gsX@B \em6(ų@{w%*p%N*/y;C43c(o"XWh{V:oGHq!69}Aa(m'$ns?R@7Yy$p%MN\^JwnF3?w&#A8:vM`LGIOޞ@sr_r8ǡ *)Uſ7Np;nТ8,i5;r4mk]f(4*qɕք*D<@5Z`PWP~@x _Bpg zproQ[\(IjVشsÀǴ}xzZ\(b,Y7=zЕQg!Ο=ߟ'-;~{Uo+OT d\oq!7o'oWv?+]h' s-R|iٴg3WA37K*A![34>q)vN\@I.h7.˫ߺZ!*.ϟJ\*9z^O=|)in.A^</+<= Z',vwE/1ˡcwi3pOי-?|EuۑCwtzH6r[fcR=|;^#}[xކoG2o_s.#U#̩_oIC|e<*9,sl̓#L w7*;ĎjF vY1>=;_0%[y=x=)vX|܅Dw 'mS(ԯ9BQV~ |,k8sg²v0%?nc{wPUntCk[3g Vd^} ?cXoہQjwÖhT+[IK]'/{ 6+G$Hf>}(Kc(.S:L?TZ'Y!r~p_8\r~0%Jc׮IJ{աewWeWP0~U6|A_:2^W1u^ґ Zu<ߙSrZ7GFb XI ZUU9ށ";8} MbpsEc#%zo:r8leq.@- OE_fgڴQ{Tv?}4\_|Pyߵ/#PN]d9 X|[2f蟤aSf4rZxto (ב<^/H.LWhbe^!z^+h95?K/`fS3͢f$J/SG 8F~w7j#$67:ݡli rBT_ Sj %jB WUzڢbЖZM%^ȟB# ;l~3sZZ;(?cx>L09P GH U_j1,ĝb|>i)B"ʿj]U@j^ j2?J g +o w@XS&UǮCO׼NTɲ~ԫ `'S p =h>+y՜V'\\VG]:י*$T_GC,s" dP<$վ]~NpQACmz-I}#{ ȩB;["͍ f@Vge3Ҧ87bz=Ebs?Aya_30|b jv7"';5ss0?ՠ)λo;} D 8e:^[Dw2-0,>sfzs@}Q=?xv9`3>Q67'G~k\A YاJQw /b-g> w_=;2qEj|c?wV𝑵u!G> ڟS3dN{0&_Hsj57w$yݻ?:/_>;Auaծ:(X_Yy>/>_D>8~5 },t5Zi 3E`0}"NSu'nhgM,X(tOeP^=- #n60g*yпKNP.=8sos=&xƟuuV_2i98sFtY!vc#vga:I :wCݣz[8A[#tw߅/ZchHސ~끲p"KY&ﳮq{̤vWv:m:.)07_-A@y kwj>;iߑUO/^kJ-<>?w0WCn>1pS_'~zff(I=qWb?is}BM"o*s;mۭd t(ݪ~D.٫L+Ry|}Qp|gl@~}&о~K pcgerX~g q,f0Ol-7H='c`fv>=?½2>$g!u]Xi\z0\nmW' 9:׼7ŴI<ʛ|B?r 넪p`E?ȿ37D&VCmऀߐdv r&Ck?1#`a"xۥAbOre]P {`&_I=->; YGPp*plٰ{@S%TA|ATf9 op7 5(T5C513iwiC}ۻo<&D*'W|UH`NJſu g !W1$u j7gmZХO ,Sj{6N2 {v[ךW&U,ςT*.wi԰|(3X M- O@<)94@T=Hc—bFʧ5qDd`<11><_s^6-FN=?6]zC48A;hϼ#K1<\;Dw{zyApFMSϴZ|&B!+iMg>KLbȸD{[ƒ&RFV:ױt>t{$( 3%گ8~2iԚH)CFut)P& Dv1:[zIw_C$9%T .]H9^Oqr}*NOgAꠋuU\j-dg5GLgp@;bih?lMJ8,V? O">9oT1F L)&h/MG-nxoK\rg>ޒ͒0i_hop ͕wnYx Jv7cJzW:8v7ҿQzu3 piSR` D f9J[AjT2ԝXX } Iz!+~iѴӁ3׳o[j]>?+k+H̀-g3|!W,j<@̿X?cjyfvNN6 _׹.Jh4- ϯݸKuzF2us?2{} N1MrJ֑8{~0X-j7j61TSΑ|KG;Z~k~&VQD쫝?HQ4X@S"#+DOo{s"alEra?XQ cN󂝔yύB/ [9K DS#q,v?@1gn>mk^F6%K@.:%swY>N5D>lCLmJ㒛u]}KfW_ր\SE>ug"S95ЋwZqՇ5XF;r.r`ˣ=?ig5gh&B΄^i Q!"iZ@solՕ~t^2_gV&7]=037CpY.: ~wlhg|F\iԽIj m4&,kxL{\7q:toop2a(YCͷH^Eˁp|q2/7Ig+E7]G]MW)ܗV6j|[F@hj T+}IDA`̊t@`)@%"Lw.=H3īkcG?eCۣ v1q j1A¶/TgeAuE%ښn=wUe1x9|mD 󃣐,{=.]j?iG"7(.4+sfTA@` tv@00-y;wr z+@ ]~o1 e=kʾ-q3K_>] iUsdގwB@^@~{C ۰4,|YF|WKHI kWCKyI;|?C~>kٕzkUБ5ɣH-d\# d,+("g_lMU^(B2?ą7#!-&AmwrIo!p}"z |Nr.sWƭ)'lOj{z'񭴏S3Mq}]@2̉_Zv0GR9d=:q:X;v7[C ZX<&l~oߚ^0nc99)\>lnL|Z3ux}Vshuk\9wga}+c!Too\xFڄm #{DĤP @..~M Ly|~Q-Ȧ(߿;}=^ _K[mE Utb:<1 tZ[|fˢ|FTT?T2URWmNup&Xn$>jyKQ?@'JzewWcD`u9] F*mu5 ?~eZ l^e)`QE68뻬I}j5nCi {˒(ۣ=*>Oe0GD}ad޳ۑR7GxLWH~Xxh8 DHyYeHf$1O#[ť|u2yi&'f|6u ;"o1 TΑ(բH6`RE?8@j!-Z8) xk\ zߕ]o( H>XsqԮ!\d}!`ރ(Pg=V\z_ԣCQ,Po,S5(my.P _A NPP!9o#[*f/iP=\j_[pLޏg"dLdS`5/|?RB,'|G.,%>.f#,Sү33[<(jcFȣb ?ͫfPlwϹ1ezhGf΅r:#P }rEй |GMz@ P/ oaKyVx9Çv'{,{s&c@\U h"9< $jj/Kٚ8j! bqʅJ@Ml:bӜ-|=CX8T­ +7HjF{tgd2k7f=O 8hW~ayү)rօJ;=<]I6If^aw"#3,#X-V6mr-UunF Nca^4M{|njy~9V-6~J v^{P__K9*杽GA;3K3U P hi# c}Z!:l#Nq6B, xpݝ *VbZU斠+Xv|$&*f ^ Mo5m= 4GiB- aXoyŹso~ϯE .8^$lpMǵ"C7Ͽ{׽ioXr_p:"1KCPivJ^t1`96 G!}$ @/p &6 _7zP} M::`̜nv hIّ, f{'[g9n_s}al磖).]hܯ>CJ\L\9Xr\ H!=pji8m ܖ+_γ~W:v8)  hU:ܧ{.f'l?ҙfy92s?Ϝ d@4XUt`j﫼̽ լ%p-6ڋHL MP n.YL 7Y![cZ?E{olo{X^WR\ھùM˞=r"?άGpbZ`Ά#rslG|hȰR̒Zv?q_Dseɸ_2tʘ}|Rcxψ_5y- t&1ҕsV:E\C>xc;@/t#ӳXopjeL))o;}Ȗ^~y8\|vH95PRfyR\;Ρ::ͼh={zjgWޛ|w7\;;:{@\ŋL7MT N֎F*Vzb/QV0ں M>3{PJyGKkg(y=(ǣj4eG!I̳\\y1~!=J^O1 \,Aᩕ's]7$_+L[9F3/Z@Wv5ګvAjUmE-z΂eӬ8^g@. >Xb~EZV]q{P7|2>Xw{'u8m9o"F7%oG|ϟeO;c*>%z^/Ӝk4Z]M,b4M^%LQ65/IL,3*}?4vNfXcYN9rp6Q&/=-PӆmzXdg\$ ?C&;41 v~:=϶)͸-=xc]J\Q/0PU (a |ԧ&W<'z0Yާ?:\gYyø@~q#ۭG/?'l{mSbC-wֻg؎z-1U__u KM㌻&zPۢ?4'OGr.7_]$0nL C [/Q{+̻f}><,z}֥A]gTI-d\Xi]YiDh?6!7t܃opPhs Q=n_8@ |Bj4W ": ?׾w `+'M[lZL\ɫoP?, +SN6_ck74y]$9:Q~N{t{{j?v˛W@)$Hp/MX4aΐ 2]r -TҰT{ : ^NIZ @w ?\`6.: ԟsBۖI@H ƛ fArϕTGauQgL6t M&s}BF9;](2Ӯ(ZTj M½}H``dW *g[́>&  O^K+Ġ'$^hOhC.[_Ѝfd"^J{Ք坲b{]>]t*=TPY@IDAT+~`aj5-~̗G4s9jWE}0k$T( owXy>s/OZL Di;{Sdλ[Rxz_Pf}LIe?9>v3W#Ǒ y/vR־v] 9a"#w`#W4:/<-j[V! hm|^eieR~̛x[x\E>5{?c_3vs!0\ٕ 5ڷ&[Az:Nt[JoD8|#9?10'LH!!2֨?w\ݺqkMhu(إձciyL^XPA>\{neۻބXоUTnerq.ä99-絫J,j3V5fSG :vB)0lrk𷻗s$rJ뻻|{EٓPMk.w1iR3IGrCϲ<8\T|Hn }\9sVshNX(\O]g+X?yuR,YqI\[L<o,U%${{{?맋"_k 3֗!%]Kz7~8iw;HB?߻ąY(NՂKtp[0dz@_͈Hσv+[-җx>Nw0~|…Ŀ?N wL:B`n,i!Я4'^b]HQh\%Zv6tlo/7"6vpjWmbNu]/HO~veJ/Bf͚^a ڙ,+gA` ȉ k{@z&yvwf .0 (#'[bhOSq%ןfqL2r+#yV R1 p!7Q]?rFuP;+赝re 0¦+67cC.; }ygRO{G-_?p:Y!_XZHEA'w.n'e^[/9;e#=ORR{ 6a$۾i]c-;ג?3'&{$UB@I.<}$Bչ~; #w-Ьn0WB_1%d>uieզ0t?hegue@xiM&f4o)l;^@2xJQxcLv[j&sk}=IDT*2.L)m.e Og|=7c8`ZK@p_ 2ww@;R @7F*߽Qw&CGj/ٵ#f?"w,4yBVhQC*K KAeyӣ}r@lhO7Β3j+ui ԖP?8d :TW.?;F@L " p,'yGG*Աn.r2y0Zq ]؋4t aHyw`g@mVhSaݼlbuwڇ9|5E&QJ}yU`0 \ 0nk5}x/ Yv w jW 't<vG^DZi~v 9GG\RɾK|-MO*M/v?)N#8*h&?'ݗ>ggr%EEȔI5%WD>$EDy!jW|Q;I^jo.pC3z^=F~ dNWG(3mF>^װQvqx3&r5:%rY](㈜E#ȧphss~fD$踌w[L:NuG_ -R~s>'nh0z9BoE2bo=[;%>ꟿQ̲4}JiMɏ;ͷ|vy+sZ_ȥ$?s׃Ak1%W[JznG`b#`SF2o[>aAImqtݑ}_Xa.P{<}[[rDY{g$nLt/YX -&e&H7 %mz"D21ʾ\%FGK:HoU5/BP[2ҋbcwSOk % 3KC]fTV`z=%&|wuy+~R"ϏK7Y _y f@t@<|o&*J|̞|  ?Gg"G{_s_g#OGr&EWVs ӟ1l}kM^Y:n$w{P9%G;l v?KUklv Zm +z1}Mj-=m[_9c hãw D@zx4[ O?B*rk0;3|c2:L~ L_!kϭgt˩i&r(}x{9?`\J< )?.2l;pAV2¹,qSE6q[λ'\Q#Pˀ9+-=2jt7@S.TlˆdsC7ݐhG;.IFԾOt? ,NSH\jv*oɉs;,`EoȞowwt  3ҹ@"uPwh=Y|=zC /2+>+Е]+pw: @5xLM@H7=QDžZՒ(³CFv@UB V},&01ΪhG&ٟQ_ b0X͡U X:i³w%Xw w'NG|͂0th3ȏ7gCntnz34 gП7΄,LycI ({0qgpP.h& M=>?P& .M(m2@f-~/!?5,0߷vCw&^QmNϳfoF}dUӹ': Ó@/ Y8-A.¯gHͺ9&'(jINEdp ܥpb>%3 EߔI 0ߖCpk; "$ݬ.Fc&;㦯L4bdQH ZOO# ׾)Pmԗ_)ؐRag[ȿ7"o@G8D΂^k>WAe_C_Y<&ԯ%pTi1)~FĆQ5궏>̄Fc`RY`d)8~zXJoEqL/e˟; qi&rtuc_'|ҭvHckZcQo]L@QMsn?lY񥭽^ԣ׿"?vI䕵S.+{ mkdl4>2qywY^?O?Z,ɧ}%Rݟ]ɱ\눷(?evM{b`T|TR{o.nG7H>f?o]mb$p^@ʅ4}YM+s 5tp{{h|1yL E&`)yLvd,[ `jz %]g@&\_- nH*WN~@K [?hj\Ce}7~gk)BU6s \lj"K]ܫh^'Zw<1B'yc򼟷"9T0:44w=QXQ,@{{\  q{۲pz ˟ ӧ dF,D_4+ymlYc05KM* /o|?3;9ղE>gȰ $WgIN\7t6+3.A>fwǸ74}#~.=/fq 0zg֙l'LԬg?_a>D`tS=Y%Z% nég?;;B_~.Ww^^G0Ov( *($F/@X?"LoT_U@s./1% *x @ Npgߚ?4t :3^kPY?&`x)[ X`c tq~='6WQД} ܝ,@k-[ǝQ0"FsIk<I N1}ߑ{Jժ?fT,X`=8yݒ|{Y:J4ϥZ/ퟟU^cZ`h`v ܞ+' c1r[x), W 09J`\Y"9}uY-.ehBIcYVv7N1O)nI<ϵϕbL))b3k;dJ{?cB̒U\pW%WvB?e1@˗G[o(2%ĝؚ=Mzڜ),`r@.} BēD SB6h׷?hXֆ@ ^Gݟv,w@^'@ȯBi/y@Q|;8+mw s!GE@AD0c@ T̸̘ 0+b@T F0JÐty{n7fT]]SUN <҃Vy;i7(_ y&?:Ӭhkhζnz_se nkgdSBa1f#Y9oǤ/sOsG_?{*&޸+@3 7="/YRܫߓ$B@~$ YA}ֿ\J]6t%l`r$:iCoH{Od!ܗԟaգc|.zz0g,ռo6[d@q+zTv1sjz '羦C=!w9= C^VrR[ZçɁ6 Лj$,+Iv\yh?2kȠ.n&CSnE,=uKtK_'v&7ֺ|VFśzDah?'Q҆ޘV6S}Ul2!RyM1U Dbg;{yt5|ku6roLQ)fWeckfCk9؜m㻮tkv&))k津^ZZߩңfe;yQd/t,{C/LUsHo_/_C8n>H"\m&,v:1Xa8ڇg@tvǞ]=Z_y}F4?';jMGlM]H Js?S>F7b1)!Pz%\//e' 9C a5 C3ӆYo v>Mn| caEG5ݚl(Dže^du (1~pO )'סIoT$~WK9ބC]5_秭Nj{(a䌳}{?񝲍q0)iY1nF[XMJZm?&~YuVZ+ߗKRd,i>֗h?%NOYX7YQV @H HDF[< C|V-gst3Zzh֔g>̱6FKj}'z@u-y -.dc8vJ'ʛPO2{]wy.€دoİg[T//4^ GRR2WRoR -g& 41@y}/U pZ$9c5L!tU~"Ǘ7Sߊt}ޏy+CB:hj[hJhߏ E/xo%0x*|Omi@ 2oNzFFU]&z Qfy+5zȱ<;]'\FIG@^7@oB'93oho&p"Crh )-KO^iz0k 7y0fw[@5 Մ?gN[CuONq7RỈh` [١oy4ףsV u^K&8ᬵGp} N)O)rD%{&x|wP@!ar@:H߳H%U@qWic Gkr>c.3[s80&<@uƿ# V)$5>pGi+=ǹyf8dE˗tTz= RHミz=M+ j}/2Ү"ocZsP.8!ЎHf'UթOuH죔1~s_U긫dvQ|u@CRK6R.=os <Q~={֡f0Lw:f[k՟t^hZٺ*91˹om` W*{V)WweVv!ЊE^tn P,`FA5!)V,+8)!uX[SP&}v ) xU+}ybE&xnk.Wv+ {/%im fZ-]oљ&kΎ"6/_y:ylؚw\Va]kNx"gٺ6:hWk kEwе s&)e}A{yTuGE Oﺳ1uR la yG#w㴁.LGC~|yk c{OZǟb߸QnWF#v]z q(؜䃓i- suq|`qL)z&8 QZ~QMNJh&,?9 kp]zOȿY 8^`tGL M*X&]fXVPۃ7FSNg*lCOl+9A|9p{CG|0 A:=~!oxF 4Q/}! ?>3s3Fdz5%}vl SZC~Vi fZ{_0/=Eo9Dz3繒=ϜL)E\D5` 8+[!Z%ps,u oЪ׸o1{4OCH.0WxY 8/Tf F'/3h Po^.m}HƐԱfߛpm7*+T5h7h# %q~GBk?PpA}ϊEŎn,]Dq5d9EKkmXew,  g@<@?H_s*K֜"s1۬K=8|? ڞnОѣ|kʒfabM{8;?C V봳,~VS#VVUa!# ,yŊ׺@>"TK΁?OYkhL {4t@ /gxC ~GDvΓ?.f- A7:覞=d 2h:.[ན*01Dss <ïO~={֒S(; 4 @7{i]jGе ~U + ru]b-g%rǵ#1"7yܙR$nwA$}(09A@*'\$09R @|k=f W5ߪAyLf̺Sx qth\ܤ ;w }n@uR2i?G={ۑ!*  إPօ,B=]nr7hE$bx+G$gHQgB(.L׀YZ`¼2?H{nr=9>Nc hcOh%@W BѻϵG 7؟PV~'bS.35~Sbb wO?& ̓A48fltcP`ڏ"=JTIS}fWr@.="OzA@,~ 70/8n MxǙ4뛬<^H-Z֣hz~JBy —bjugڴ҉[޴@n{ .6.n/gV+ؼ<ngDCOtC9wПsͰЋhR`u1F ^)HiDK=; |$eZ/&~k^\vC=*:yawMmK#YPxErҊ,M.g肥"t'/[^/>|=tG]4Br= *ݺyZ{ǂQe5,h\6Nt?L,s<E=@,WnA]rhyMYK;oTN[?siҳqK"1=e](%E:&ڹ4N}~"vۅ|>'WeVcdaT0opѻqZ ZW8~րC:4[I4_a{.庉|o/ElmCR?`wN)#:=}IBux(0s”{^ y,M #Od&۠n)&~ty ; *'&&-cYDN n;ȁ4~ՆVV.E}{="FF 칱g[qey)4lVx\` ` by1^_v؞NП\zL/ |ggk*OjM4iL_}DݾB)1c8 eTB>W;M8'PY`|pn7]I^Vܲϱ_"̼z +a%|W֒.=NAD;Z@G@.{CJ7k߱N@n8P wy`oYE} %uͫtku%ysI[]/[x/#v=1IZZ;'Ҽ+sG%^֜dMM}k 9=ѯpOMy' QUivWìEVN 쯅 gПHl-K35%_޹Tτ%㹷1N9-sX[S7%gy8aSINr.:ԷXȻeS>/-bv@H|xk|<(4\ ?{ )<+5N Q)4)T]hՁI@qD)R^wtwogX1ӳ[o:( n'%[}KѰ* VZaAc@[VGT?'11Fr0Jล@܏z AL%}ν=N4k1@{; {*yd{/wO p@C(v'hP #@W1( u }$mf9 3'=/F)I&f_6(<,c:cC1KjٟsSpA:NT (}sYto`Na|kf31ټr&4D uH:μ=&8yzV`brr ۜ8z~|I-'o괪w &,~d—k/PFknY8H{{i CO ^-{veԋ5~ZyWheyJ/++=l^IДy^ =s#ܿNk̿l.҅e5Q;ܽ隿rUѕG0&M[cWAEXoܶB;Hw˭<`Ƅ6 ^BL.8M{f(X:(}Dy6Wԫ&oMv7gVagmaulS89#m'z'r)l_3*4o$8ց~sur<8RLnvPȍ#aT ׋4q-Hz}Z!e 4Qo#:y(zZ\W%ݏؚg";6 Jar韥}Icv/DZC+Cн<-,ī9|_$ ܇>hN?V?$}=pt62vF}V~6#嵹~{(E`m#j<kW}V8W`8^yE@_=B|<ĺRH-|~;KKnd"C_̥}گpKvți!zqա:*'pCkdlyXq+zk䒋oW@2Lm ҏ*2G ~zG@\,0|~Iྦྷ=#^,~lY|?x 6 ?փ6aV 53gmݬ'WQsi=x4َTcD/aK?3OZKC ' NB8f-訌58p}ύmL\H=Hf <<6sm<ځMJOcGT;}F:cJL~KE/*[{>7[jA;P[0[N6QAOsp{k /9&p6lBdi⪔o3}7ߔk#JlrT7;)̒cI_;_'=_STSA[ƴ$GnG4*\CDк<VέMH{ P#bNZ^)@8Q QU)?'׼wv\makV\mJlFa=H 3x_T{c3 ʐ8܍: (3@*g`y|#TK΁?ρeFvC"p|@b.c_td0ڞaA?Vа`w_D_$KgO]P]MwnFvQ3 G}@KI= [ U~*pM3^]"mO"-Q`Ngz, 93Hqw>&VUe$" ʤtL F!6S`ൃg@}_m c_~=[W=SRv˜&Xj"+-nn711¢[ `r84Qxr83ԅںӒog>,Z KFlIGz^Zjl9K!ۏy>VI87֡:073z&9j2/ 4s+LDzR'ۺ3\y̽vɗLRN Fb㴞S{ Ԍa9o۠FN d ;wu]<aQVo_iwL&)3ߐs(E^tRЪ}>Sz KyϪ\sǕRw4RsV<ϭ- k膅:brҳ3#ϺzmhIߏYz /KcuUܻeg~m65΃on+;] +vhXĪPQS :c]Ga.W9MGכ) yL:Ң&4یs0畄[S(K/wjԵ+ZQj\X[oY噴$@S9*܆ߝ}lp.;fp¤yP?/W:>-%E'ɋLO+<4( ljKOs2$vnq9Fo 2`FuYhu2Oo/RqjfG߰G 6NU9YEb0AV8^pXŬV}vnpnu/X\ E0EVM"XkD!lRkSbӼ7xc|1}@L+J۔ˬ-@Yc*#QQ}ʝMh}|XⰭӐI|>.J6tche圷R4$5%t=O_93zF.A.ٳc7o^c*th"d`B20$W 9S ^^=jX5کX/KePA=<ncDf%Ap&~J z:T_N 2a2<9flTzFZ y5\ѸmWq']?(=r@n"0<. "N@ |к'"{{cX~oasx {ϳi!~î<9Fvw!t{/t@ǰ >:z5?[_$d5Ϲ=gj}ƫӊ֡_OVe}y~l 0{J}) uHns<.X9bln 3r,<W Ęwܸ!LuS><}(jaj}l W_a0* #X,0F@A!h?% ȏs]cOqo_Yqrc?*\ YX#vPQb~ aJ=;gBO-@TS˕ Sx"HkzZS!KTiemAxC%ݱNK?њF#LH JŊe'$85Wz,A9DqWB/QupV F7^^uyPս֜|՜a\HA0L*S[g@S|򗺳[;-P"P -2?IGewMCVgoO;*j}r8& OC>T <1LfEָy~p[з(h= <*gc(O )3&چά{n_7c8i31Afٴ$#5A >69Qg-Nw²tr->tS}9l(Ս##iI%`E疻-[Wyߦ p $03`=!NlDꗎ%6=eJ9[7#ڈyV}]~]El6xMtp#yTes8qX| 풼YP?1-M\L"y\f0R{8R/0L׻<~u_Q֣-$ŘP50dR(yVJzngeB 5b9~yc6|(@yTفځZԧ;BЏCMln|r@wk@~h7 Ѓ*+//M07sN˝|X8Oq;B呌VQ$JK_PsӝAcbGD(؄U5c% >,,hoJ! _ mY#}0* -!w@{Vm_yD7`[n ; {:<]:p!z=ާ:" $jCyW"hKЯ}c+"uƋ-4(GC&d{^1c# T#]#9};T7$9WC@^$Jxдf%~Fk{1~n&q+}ŌbTɤ.-ͦl}~ \57_~Gzps˲N9W 3'Jm6=q Acg%\e53Cky w׏UՊG1exr,C5ϤD35}Rϙsoo[JW^^ iZ3#Z)U7qoQ$PLhg)F2E /'.wX >~;Mleɡ1ϖy\?Ѹm> -lepRɐO"eF|P/ݏwh9nJ4k|}4*l @/@W x^ZOuyX~ ' {.ư}K ȕ\+Wsc eeodZYsJ&jSZ{B hO`]?>g͙0&^(VKx.@65"+ I idqW?("g3tycb` 1.S[ q}O1p#UbTT1R@$)*r:dA9 K']$hY8UEznIZ[ۈ8.H-h>wmcCQx9uQ8ߨ/Voj wLj'4)-gw3tv:ahs\n͖+>Vaٽ{x'?A &ZׄZQOefXADGA(U:1`ۉ m'0@8Moq'~"j @;d`Dyr@gqoX5ͻ7Ї]kiPy$U~ǭ|k=c5NNGAmh8lW"B\-7MV=[~q5=@.}PC7_T={ݫ(&b c!cg*o,`)kǮ}ip2M0u}UnچU^P9|nel{*,9qAB PWxIrVϟ7+.J&vww{RelsYBԯ/,7I^>#~ > ?:Dɧ}{Hdje/~sIHx'Sz:O'3NOhښu]뭠e&p5ox4;845y$,@ah7G#&?7Ho4!Y]!]悂A|+s_ >,T,u% hl ;=]z;iX#*`*DjI%1Eޱe,TEf;t*#0?x [)/guF\sBtQF0xȏf ^Z"޻#3mW9vݨ6^CM9M><^V|ָM[oeh/tѳ`-e[7Mu#nY{%_OLm5G ޓ 5H=7r)9- |*J~L{CZ㞯[wg B6#O+K`u>TO`BS`` *oXdNnt,oKS2×'^%\TsyUck oE@EiO֯ppB7Hsa?AZe[9nM8?B7')oϜT 1BaV-p׾ZYt~lP1hW曞J}À]Yt tik#-+7% kQ+h_0YǠC|q5C?abܹ#eFYo"6vym5{%fKrxg)]VXJ! ŚvCiV2+bb>ݧ<׀٤v<Ϧ#nӊN~2h;j(oV7=+|jZyG~7yD;#P4g /Mp=R=2#JՃW?=M=W8tA9_vp'i|Khl؇`5y6xsKy]&T&7=.Z_S; ӣː`%ދ.^R/N|OR%s>3AL)Vf5z^[:IR9@BEWB$3/Uɰ> dd%h8^rOFMJ)ݽz4.U򘳘ʞw Q<3o?ke[é77y> COЊ])g \_*0xmt_\#П"hP^&P4y{PsYۙh'F -K4#Ymhu 9ܙeAoq_r~>O] tze͢7aܦC?kQOKn@L9կuFw_1U[.63CAxGu΁?\Hz%r?r֡l/?ewupusO_ א~}U [=Ogr"v~_gFEy=O"9Ã? Z#WV_Lpbƻdk遛)P/'w>hCbYg1n-vKٱ+!?`9i/x0Ni>NH-P^I }-ίH.=MSK8%@r%FC?ʕa1 ޟ}|&͟g}g;2bn#w׷{BT]-÷ܺ )u%ZwU怺 o |F ko^ [`o- #[qSLC:xoʅ'q߭T-=6=eL&|~ `!濿%  ܞA.| EL@t߄%kIz->8C@bˀ]]Dn0aHbɎ p,X*tDl] t ܗGtO_|b Y|:8^+TX{nz'O yCX[?-F{*>0*IDjOHgS oC7ծǿ_i=`,HP N%WRZSD8B!eP )H1ODVssFlj呛~Ԋ,.Op`?\Vt{ ]}CF~^ZP`̓)Vc&N&,3Tg |4&!?߈1 WT}I;-F|VciSM[V7-;k&RMCpЕL|N>.rq}Ή@/L,QK7y.z)bC7>.*@OSQ̫߼Ɨo.U, ?h w~ Ԭ5"tOyu&h @sj"-z'֮;@Ը:+wy,:;\·}4Ѭ/uptW³9~#9R#&us]_mR08:[k#Ln6x4N 9^O/>~RsBϞ&˽oo_IH{hfns}Y#ícI=@'m;Gz!U 0v{䅒lB۝F |Q?l;nC6lðmWĐێ.2Fm;$ĎY'm>2F?,~y:s ԇ@pHjD9l I5*s2,,X"Z$| ]@s40ߝM^00CjP $reaG8qA7 OuczN._ƹn.1\:˩Oz|Ә%caoqR=zYt;~Hs"|}\W%Qߓk$\m=F@/p_h=N7>A%OuH6>Qҁ6sukvV>t:˓[4r~"o@:o?hmR)ثFQY M>E 侣ݭdB+5h:zP܃,m"wOw;x' Q"Юx$f7xIqZ)jҫ=| ;_) w9EZid{c~Ҏ *~V|H"$8)m;ah8WأeReeS8nwXZhcVB|qw2(P}`'#ϭzCnɻ}\o{oָ=a!M+yv4I5jx 9luM '>?~Q$ix/@[QsÓB$ׇM|%u9|wET,įZ䤢 M?,%e )j٦d YZΣ'מr~6gN=kO{ zZq}AuqYJ<ጆ5GRƑ* A/J!gY]I9i@d_R%˩=-j~EnL۞w&ΙcOk<7a5{}a?^ʘ$?PSA Ԟ5*=E:%}wElA#XE폢VgG B}=O):jI~ F@ ẋnO5]˟nؠ|}yWz δū5~nnDZ-J-@ _e"V{RMoLe"@`{'Zap'4p+hD*-!vX.y"cuA*[~I&kW$ 'M]MxUK;L0L@#w bكդ R>@]WФDҿ,!!O+]GqǩSc9HRgO|]YWaBr;py:Z⎬: LqPCv&4o@{N44nbkIWf6Cևˠwv`' uB_Ad~-ʼn ]@ fLy߃q&<]C_Qmo=\`$ y\?߸[Y y.z?ۇ?Ӵ՝v_ Wi/lws }-0J3UP= ASv(ޟx_Y}/r zZ G 1˳?(g{*W)nXx{xLeaԻ޹eES#R~S鴷<^/V6F.$nv۝amQG:3Oml0QZZ:´=*^x ?_ʒ^! ~+|莔uO=R黏1rJc|*tV'Ky٪̀YhY1Yj 8F;S 7|=<5nhSP΍$\qW'=_Ѯ[8qx?"'6]7r@ȫհ(~]춬 }BONΩ\N~:}^89A@ C/d[OJ2r&';|;t$e4~3Ee 2ά:x%&2 6u~$5xU#kG\P%WڟR|󀯢{z'DD`<l(^aC#x19:j*2 Yۅkoƣr}yL |Uwvnuܱ9X3@6Oz 7B##-Wh;N֙g|ssKzh]LιDߴZ Ca!:樆@1HIWK2"o<%G9k ;|FWOQg/@̟z5ZԚv=~̼+Nžmk^V[c#AWcmSjlPU3Zm mmyφ]Z^}LӖ}uf u7=~vW0s 8|y#~[Yj@IDAT=.#e6Rx JΤM%B_&$3A;eo%G\ _@)Fu)Q 0^!ͽם V T@y+Yr4Fx[Af>?9HJ7^i| <)ܦa`0岇CUφCr a]2Z8z4UzWy_P(ؼO 4@.<ڱy+mEy&8V={cd2-/_ Lpw[3m87G&{76vb;C4`@|`@r iwdi*wa860ifŎ`HvnB9r"9sR5k᯾ 1dWc-,Lzy8(x U,p(a8e/ oa޻몛LW)L.g^ޏKg__V0A]klFΛ}Mx3լ7/N=6W"?ຽ@PO`|\+ .h@,0^> 8N 7Z;)n}̬z6[أMcjςI }+z6_3,EbN;nNw2>Ffi~~Qz|059>b '(KK 77>aTa\ALpbuƏOe׻ 4O_5\H(hG\zȍ%fgB]z^Fδ=OqޖBt}:s}wӠ' n觐R ӥWWs -WVXvov>A5L˒^\(zx]vban>[KXnmɕ^EG(.`m1T,ƯOڻu_ _x̓@@og 28\k7ᵆJ,T</S v~"-dq`lJD)6=ey bE:(qvflKnY0(Cc^B[_|Xп: zkє|*8G[}}ևAw5o]Ia=Fmu#tZ5.ZkL!yoH:o߶&OW36;UF<1gΪweNȠ^0cyVےz*B۪ė:-=uY{AHv/L{^jǍ' ?=MG&LF 6VP%P1rL66'( ޞ"@HybR;崼^xC62Sk%DV#+R(AZ~~X5ɲY^R/ \N`蚴;M,Yjw@]( $p!" *~;RB~ywoa4GY::Ao/$l^l͚ih= ==^ g|{JhCGg*#ZIά,22tl/$`[8A;T{-J7bs¯͞S$vNg7Lg9jA' 0t˿i|iSΑ2 ̹jG5˩_ ("ϚBL+01++[zx#8Ŕ֘˚-'V;Vd0]bj (_5C^BIyozxDs)YϫfT&fAd0+Z'zx;kQn72P?À1^8W홖pvq{pKƗZ2ԅ.qԿ93F}9KwqaF1G1k-TNTYX A{Ѓ'O;_xMyJ(c*'l`YR@[ Z +mЮn wg )T6~ZO#7&AM;c 0+͏^4_ܚZ > bRWOPqb!|cx / нBţ s y4__/^-6 ,W#KsPZx`x#رP>1ކ76!a6xMjDwvPyKiwzGhp7 Gwi&|R 5[~2hn. XAtIeO&u5?NO\s׽C4]L[Q/^eCP̪p2þ G(KՄ+Ki0LuaxfO5Թ;:Yӡgמ8R[J psPS ܆!۹~4?ɘ@~eiy>[zﮣ] m{jrBa?($Igx⧬~.KX+׍mx%4Xߏ}XݔۼzMӿ l^@lTQ3xQF 2dV_gP޵n)lq:IQ}zkh^*32\jcs.&u EpmUɽ J*g@@,kP".YbJs8#$c'!:d}L.l1+rpս?=+c ?Mh^a~|S.o 6z?K:K&M&M!(8_BRs޴3פnUp:3(M|>\D>썉ym 7||_ ~:}9*Oׂ`>E83mv̥^\#@]@ ]g@ 6R6XQ~0i|؍^wHG_@ 9ф50܌Fqu8ሐyN򯦝 >^ᢈ A%/r9 SȃݜnΥУM=/iɚiJf f7=tOkd\c, ^Bfy[ !32k[^;I*0$M?--*aU-'8Y6=y؝F?q] {$vWf;n+k$D8[Q!㿑(h.ʰ׹3]w-u1xW{zbGAőyc? Əim6*iܤ[Q"RtGBg\$0 *@; ץ¦{@l+P- YI<9LG!v6(o]"rΖ g9Y#vRJi=6\τK94)M4,l2 'Nhg X^Mb *~;+~Gsa?knQH:+_A80t5W}i؏tvɁ~R}hZz^Yn ; btp:ȔF 8z Џ:<״tԂ~ݾދ cǐ6ysC`)42]_\q"_8q&NL{utdž7-MCo茤iB-崦{s@1-P=/6i ȕ[ |B6PfY8([T_8De,0x0ql/i3]vt1YbfmA2vלB'<>%t;x> ܝf$z$w-khoY(3A0j_>Pk'- JVWx0OcܵaD?b Ǎª(Jǃ}&z.zPvDf@{Y#0}T^紩+w6)S0i2w?wL'crx{ b̃P͍ۢnU/i_I!=Y! 1hN8,M+̒`zOR*,Ev)ux&vl*=ƍ D=~#)i0F†vJq oD@51?4q`t6~|g4l%ml.[t|>e-)wT̓?FkpP7 ;5j#HϯN뵿MPjӮsw6;9oVk }ڡ1;g8~"Xc[ZkBSݙN;7: >NM EM>| zuvpZ^fk2'/O[\2feݫ#愫b#t Eݙd'`@nY,C0zr_T $WUYPʀazV2UX)O9@f=_vBY=[+ݽjs_~|j w ԋe?5ޏ|rJ;z@=-p?S4K@Jihuqpq2  ]X;w*QP'$O?绚e!0B|7:[Uod=ܣ솀[#_SZTL{(=5orz1+'fiU 15s!/P _6lug{]\9H'|H޲QBfe.iA>t>NsmD _0>.){o'|y*$X,ruBB8 nWH[! 9WB%oS;p28hp]yPYʀO*K]li <qxEv@ ]g. rgUحU'4}4kZR Cȇ:/W]W@D%-L\'\A5bZ)aQ_6 #*93HAD} K< ,؀rљ]@Co-)Yw ,w$hḇ HtT?{^-3n7yW3[7'@Krn_YmuG0l':Z ;'Wp}|X;/Lt8]J:m{SLUn6u͢k t :w6?tk @y5Ȏ1ȷ/"iS lHs,))?:W[|Oq֙,8B]@4Z`4r*5yҹlG9>,{_=~ž4y;ڣޣ~=^R)ΚzZ Af'#h8*8#\q=3#f_?b+;_DRHӹN;x]Pyw{[gqq`l*.Vl Lh XM@?E\2: ^JǙ{.ޡss; *}|7TzQri9SmD+;\U<O:, cj.RPpK4E ٜըۍr#9M`)@_"P/xyFpK> ԳIըϭ]^E֙wD0m֓sϺ+#Hr> _Φ]_8XjR{/>Kt{<dw3lKrSc֜mk\s 5H%LG yl+ f+\^mgOw<gQٲI9ys ufvVW^&T rKl/zUR m<ټE[fEx?\6&w >gJi Ź IqB{XJCOڤC~dQgYA4/2pjdn-B&C=^~Bq zŎ=V]/’|7=}YsSGJGwʡ5pJG@:t $D,i1;' AҗSݗ86 blғ!cɝ[\)e=S0W≬G;h. M/uy򍧠n:8XUll\PG[3cԝ*WTxdj%ޑVQ6ߴ'GK7K:-d^U",~}5  ΐY2yfljGn̼*(fNxnF.u#g@Km,pz y @}&NEϿ-k^nfy$Kn4L^Ƙ+eBfrPmxͣ!/{`JKjDޕ޹t jCt5 tK_`=@}_/YŦ_߹SƱ@[ Q|DRmZ^˅L/a8\NIڳƎazAЧ3{MEZkogwf\nmU9䢣:pv$<4s496!kϡWz=_ ,.JG QIoH#P/>y@;_(hM#bh~ԝ;ໆ ӞN  &TiyPrq:z/]{yƊ׷⃡<{$jdT7NT$$)Zɟ$wۗΛ6|mG,󙹇pls..II'/sҊj8.ÂHYIghvٌwSqlx GB*J{4mbG N- E}ېrmм~9&gdaΝ~NnE؊V:JOl<.R6M&<Sh;B2^! |)4Ճ.ouh1Klh$@?FhdUWǏR !\r@{y6FLsDRePQC@2]=åѡ}anH IFQT_iDZu 'vu@K1$lk0I`XZ*D]4I ){BR-kKcLK 2Пbqbw] xK۰7"L" fGDOSE$W3y~Gf+DѾso g_p[1wFS'Wgޡ{yLe0Aerb1˄އQt0sw ! & XN_|Yz;;X_T: |ςNn+JBiտUG v`M^ Ў<9;4v vGq\DH - G t ԋfD6ex zXH*mF%IURvtw lݞ~Xhi0r^$WhD?C߆CeY"50^8#Kdo[Z%1j@(Lԧ]V #sh {9 T:;c._G S t#,^8s{k^uIG7-#`܈Ku њ΢;|!5e!e󔽞Nk=_ޏeSAy_ `O, ~A>lHf V&Ti=ŧ JѮԧx܃d)b'P_ C ,'@ qm mq |gup XAě)+\h_*"4Q^V|v[gXŇϹhCfKt3|5:9w@ayt2OSa4E?ÿ)߷{jp6_'GԇDƋnpmd"_"w{mշذKq aXYew@;X ϲWެ%|m_Խe|uu׹{Awv?pKyH^;Af_Q=/ȓo3x&N)V.u6KCe( ZYn-ipT,-=ʊ*H ~YK^a$g֕ ,a &i+2=kb=}.u#,Ӄk~eg!Z *_K;WpiF|z@G}@E5,6 ;љ*٤Rj;{tWv0\E3|qNw56D^kDO}IOw(PMPI ?שR)G)L-d4Mʱ[pm)orloq}bް .CVr]k,5Ke`sMxd0=8; !A#ƚPWvr9}Z;vܯ?^w*4L[$ήWG4=D 0#ʎPx?=~O)aNSRw{4/"t1oq8CG3bF&?"RZo+&ۜo6̿M1ul{vN7W]fOeG8/(*PFeV塬()*04W.fh$h'AHQ0uٌ8eŃ+WŭJ(ت*ءg jւ\pYaGXv[hK헽Vrbk7''/ۆg0SX bf|eO1 z;P0hWHF |ܬr΁(#E ET9$<or/FQ@}AY(A=),- g9i❁ (瘵_hFd.t`2K3+@XG,1kX tY෸K-i_mPQ(W^fJ5Wg Ksk:$tiVdgIP4YQU{}wnΨ*"KeQA$k|c;>nrx={)ԆЙW@*Y4ŋǛ람na%=̗RC(: }BU nMRצt[T?/~͕jjrJ\+ ÁUݙ7<~a3ƜB^<8[V ૓uJ>1i1ؒfA ~xƙG0홷Z 'Ω׏=әt@:оK+ T<#pxx/=} Q>yG?KhJ"%?(PƳ h/^ŸO!RkV=ؘn|n738l9tpRKKn&K->1$#69q@ÎvއWTH*8dLNdVI [ɝ3f@h1>KLwޮ\,գ8O@g~EA4ɯa@vp+QxQ~*-vYͷhZʀ.8@P_`h&fgKB 8Ψ=9#HeݎvWҬaMg ;.|Wc;IABc(Tntvֿ֠\ԟn3u-2 G^ݷ1H? vdnKTc\{j]Nsیvtl? =yݧ#) \.SI[2>R  \gvn#n鶺^`Y!7$]Fw ^_y]PLU/oFO 'dSa6Q;Կ'^^opٖ#.?qIq^'eBZgEu<ŪM㲣(9jEt|%px*meO };JGnq˴'yKGIߌIU,^\y.(ܔj~7]gy=we^q?:ςŅbك; 9֣9KM+ v=JK;\W=ws ;H=z:>M )uJ_=BY'[U?so?T?>avqӛƾ[|v{*US_U;a?tJTR:odu,x:n(}.0L,l |Vn]Й -Я3JgCϡg@g?[+'Zּz܂Ѽ4Fgz2Žϒ0f(ĻSW<_~4I m.3MPxrjqw%x~fu@1yۗ3׍W"7\m> l,!WK Ȕx# <$UgabYBs˱3Nx`8?t'aKߔj#6eV$_&zbEh&856w]^_Z]u̳81g8ﺌ7(?N/ґ~onh/oQx7r'8B`# 08\lfF JeIQʤH,T-Bfv@s5QqWP"1lDV+E[a섀oou_s%b_ t^to-?XD ?Q_+8p6v{w!}5Py/LZzc+'ȿBtK]ʗo{$Uk_io8Ş(SL| Lp~O1-;+J!gxܕkU"AAxpd_G1 E'I8kQ}:3neϔ:aS@*>iktiXͼcCs׻ݢ`(=30L G˲IPzTN뾝Li1;9ܥQ8UZ@IDAT3T"ݸ{'s? #)ՠ@}D qBo w9vMyL H Yvп-JHe~qw]XNzaGp6tnw@K>n_^o1­4v|`tQ#ބ˃y>\n{DOAт[CUԎ+h5@;ɽ%BE#zr -PXXhS=/)p eXVc"H?v9A۠-ZpDLW5_`${NFsft k/[5a~#ƽگi i^:+#V\^Z[Ѓx_3-߰w wLrVAlݽXr[/s/z_WWhDbl+B^ r8ӰŸjևs#_2}C=FF|_;ĵr%s)X^~wR7`+rM]GqW.:9UKSPߖG+!A\Xw'y#l]/GE}cqw+J빨4zHGpIke_8U4(>\~>7]<3 3Ft>^^|pg jq?yM|*o'ttok kwwB NN t.4H\2>91>вJ߁?LژjcR)]C~U<뢒]aڲ#WA.S;\QLGݩBsD&^zO.KmtrO EEF'BOHPr?F˃;.6:ܛ2ivU^Wrd/EN/L h7¢V#fvp@7ZH-=݄ Dqn'8jQe`4$|HX;+x|Z/:31 __31~ N_ӟQ_Z9Y5J.s Km1s.f{P}u17"K̥kz@m-] |uQaF, ,r$ TN#cաGy{Bw&ٍ1矖_6;U9ih_x! nghG['dwY5Ù>|%j&FB}vPoi]Yr, _ X tkc^`<^-zN`R]~-? *YU99x%eBM@:B'2}7 JbĘ#^/`Zj>.I-wtbTjN/(HpawR',|BHiM V>PxR9|\<Jf1\w-=υ0ㅔ,4Ae9@h[86 L(ޙBٱ| f w 8:R(;?1PN>uBx+F;76&qeOY ⓡJY( VC۞rb.¤1\*pMQ0jFyAzZ\x@x_5b~OQGuN\#菩v̺|_sTrV34:Kp}4vҟn5n;ǻz75&ȉtVz/7we3ypw_v0^~ eGw [H>c b{ >WhcOy=ڷ3uS!ܚr?Nzs~/}I 3f:oğيCjrDLzZ`ych5NK RFRC󣀿-("0.=+0)п)^r@L,/>H`X$P:  #ۯ,JL.q| ÏaqGrJsпj̸;ڧ_²|v~h,}+Y\lW}qLu|-\،l_k 3ΞĎ{ůw$yLw7{p 10Ip5P{/J/%`[U1Bjvv/ǯĩa[µkR_%9='Q}7eF\ʮ?oQ@9|E!>e3e#6 آ3$?=,u7R۸4SEStFUKX٘BZBodnlw OƄ.qe4ުr;U^YX1 K-:&Ю,s@N=>- vrd^R@/~~M^/BXPZz ֒MoBD3t:|~뭢z71adaVfu8fbޔgs33O9C!4/L 2RGXPiKzE_mF\Rlzt,=zsv%6pҀyt x/&>PC鐆^J[fT7t{j\ڍx/r[Q w@QK!+cLj?}Cyv Ó˹^sFYQjضrk9heؖuwߑC;-Ӡ߾aƇ%ݹ^)g2#R4'/#ŬHk<6* XjX:C@8N`| ''O?GFF;\bd(Bx{C<;5|{C`AfvZªp[Be6vHQ}7Džiϫ:C$w-v}CI w"֮*i^.~UXży1Xn$,o`u_3C~]U**;`hD&㢎Jݥ!+- :hg).:y8׋XHi gS],h%9@`iD ̛@C[w o(a$bJwKݏMXnxZI_5R͛nk[h<<ԖP9:N"Dv Uߵ f%d 6+_&EmʋJp/lkw([Pv|>s>ȏx;ls/BPhCg&Ϡ޸#uA#^[JDz}nс NS Ϲ44c(A$['-pH0{Uv![`wF>Yj?".UMHثOm1zS1u/#d'F,&ܰS{×j#7H7cN] 4{V5%}s ;URc aM D7NEGʎ3F __HNtx`=Z,fQ]}w_Ÿy?trhJ\~Y3:{AjE%YЙm^^jzD3}%VPKt> K4n^P4!k-&  ]c=-6^b9T@Y`\/#2m [>`q/qԙ؍'d6x_q^md{,_r.Kɨv}g7 jM:@8+rM?3)yf/.mc=OZdv:gysŦaM;,eLHS@.,Rb*BjY>( ztnJDz#^ r{D1劸A2B_GYus2֭HSK7(W*Q*t?ejq-9ˇ iʁ 8FTbT)RO7]B;˶ijey8ћIޡZfxN])%n Ȗ"}WYkp[[;vk>.&sK7y1kiTɁlZ9QXPZC=*m8vp뷡gK_>]6 tO8Ze*W-E_j/@$^.h?oH{Y+_zF0/ЍJoo.Y+e-˘cn;?&g8Pw;1XrU99Ѥ;.IU+G5~Үg J>p)F }ҡ3ΗiT|(`C\?nd t3r¦һZ(| be 56}a|wpV\̽K_:X@`{{]T{E  ""]:,{ހ>6$Lɖ:|i~~HmL 7ӌ`bpTyK". T@?̧̆803b{%FM7d)as`!H_'藟^݅K:XY WvB׼ߡge1zSo^ӻBcؚ4p5-+o^K(vkX al!#0!*M*2G*[OÑ @>k 0o 5H 'ޤW _Ƚ4rU Kµ_~)lޔsEOiehYnjg%.]\oF Y2C`26&g'@!6@A,J!.p t|wt%ƫpRG9:UH ~@1!M~W G&)I-a؛]SW M6f+W 3>:[ qWrTXt6zdaZ`;OqOt:DZ x$ǃc0bpjųad>> Krgr5_;-f?+3Zo'~nE\b'zc)j|Π%3GOfNG^q1k%Qѝva nfwY:RIͳj]W~訢.@*]ٿH]l!iQtv@~ y<"X#X'x!ZIOE>tW]$ M"_^y4$S9Y$c|eqG[8!&H9`͛E47~v8~(xk_AI4F|2H@z8f|-(KN=ÞʷIRf}3EWn~~N.lL8vߗyyRP7s*Qr@e$DY))ÎAg||hlR ro-aS~/FpN.xHGF6ϻ+>[Ah?o*}ς<#I8LsX6_lQ7Y>k'Sbz/{gQqG9Fq tzj< ٯ(>wQ{,˛?MJig(v%dxwPK{▮h*^t҇\l'ҟ$T<]=I}g G tL(_?Tf"Ic͝N`v0M?4cg!s;\˅m^n_Q~ݾao}J*Ntg2,ꛅ? 8x.ʑ"05a"~x bc N²H1A&k'ˢX_Lta<-᪖9N|!vQ e9,ʎte-c~Vȉo]9j VQ-$pƬg]I"Acrva1;bi}u&AtjTߖ]?ܕ0-Et^@=;i#3C! MCSCq IchgصIІLׇ1 M ־Ig@Vx.?!6~D!S0\HGI=fjnG \_Y,0t6%ߐЧb`> ž~|X@*/'hRa[b_xR&lҭ&:=7 F'aVj&0VD8*!> ؋1ݺp?Ong髝ʲR>6¸giSRotv/w098Xt9A&ӄ+*Bk|\~aK^Rצ.ޮi!+:hQT~-{m8L,QgJgQxEVg -R3JzSˋ!f}eAèWcjozDERGƧRNLO)67 I7kMg/srs9) J)*DznT]RBuNwr~WTq"K]ywȕ4od*&u9T{fAs%tEZ|M^y/@e仄~|?6mAI #ݦ\8:qFY gj^wX`FͩT= a\zfNͫ7Z!ux}5$G+` 4s?B`&0mj/Axӟ58\|&:_BUQȧFox,S[qe<<>ۡцЂw-k9RlĎ$- ?f;9@Gؼ%[ F`{Gpvz1h^6CDl3%r@)5u 5w6yυYz靁b#~;,FX7-~?Z$4sl.PnB%%?F{fv!It49w+-W^( /`,Y O++VCT d%EIynBDcJ[]QZ'v#]F{]SͣipG4 B50W?-YkNuAv,D;dfe: ߈N,-UĬTo6 .ZW`Q%0/!IU4^3rxR __ T.(?Y X8:+x[DAa~|^dBLF8[%PѤ5a]gǗɂUQv=hcU M1RlZ?3ND 3 -Jf ;@h-v;PK&s*HuggLoׇnl#,rGA]epK"n~J9ʿ3hYXe׶0w݌鯃_"pe9YOlt Sʥ_%(hg|xkboY`OOzG2,ى6 9+n.BTaQx`bh't':f b&];ơ2:%,#%)Coޗb"$FBxw&/Ut,"71R=9shݝ BUnh0w2":A`~6 YNRbm#mաkpfz jJB俞kL@@~&P>~\ɷ? ԣ/{SWn+-ez84.^EKAcWSA7燇s}t T L,/R3*&_ځSZD՘?[ 0 _U*fUB*'4t]@bPjg'Tetsd+MucLoo:}OrcYE}w8徭<uJ\PgW̪sk_&^\kW6>Sz}/}yJϗg}1,lnːΒo_Mʟ_?^O&N~sk#0isLL dZ袪W]ߔ9>jrtE k!ƪY:K5K9)Owb1_GeTG0 ouz)n8uQfAcE֥Fpe0of9<ozKAԞ)oe0Da[: ٩fJn;7d^c[|̥>KH=2pDk);ٹN;_.tZk|!ϼ(0L๷L+f T _~z{&p=c,p=Kafo,n.j`<,N~ml$poۏ_ȩҌH/}n1|x@ogߎx7{szYX鰲a-:.sm ^h}' ?131;pm3>H%z@:Kr@C["|~O <؜s*K(gYHA>N)ҠݟޞXIvNnUv5*Om,gutX%*g|'w)ru 6{NmH;eV9whQY4`[(~ldUF¿) _ _UnY! &vU%[Ou bJ7?s4a'p˛*GxArSkVp]]ݛHҬ1B=nhձ~ZЪr~7:G2 UA" yCn27voL?"r6 yS=jAKL L3b 9?ixmBGBwяY;+:?C:IIru(@ll1忶@`h{/:qNG~}n.V_|$t|C.Hj}RӶsya/=`3a ōAmӀ{qq{m# 3hWI;W#8ۘC"e/H4$)`;Pchp͟7Ʌ~W1DY"-iT|}<߻/o~htnhXƄb~1*U by@}x^{X(PN/+&xsE&Qa*ze1Oabg7Ҏo.R3pJG[H,MOυNBL]a*lxRv;i"ecιY,kixoUyh_Kc74Ilb/_#Əl 3] 4;OW՟$~9QC'S'fx~.\|zqg2t,7YrIQzUv03h2@O Ll685ܲdFş̉b} KhWqqsO;Sj[z~SxKqg_kO` MV.J1~Hhͥۗ1MT/* n)䳽kIv&Vq0Ҷ J<#??oJ yݦeamK?\-!4 Ksӓ`;߭^7YY:øx$Ȣ@FmƷ|~Xr>a\/4S:'*B03=(9ܞ1lU{-m5kn\v\gx+odݑєhJr P|Pt~gYtX<,F~j]g26ɛ|NvOv25 khI W$$\//r;Kn.@_E }&Zg3 S4$Ȱ?yE__nngy dIN߭˦^ʳ%KwhAf öBWۖA+:bHsX ,XHh$\hx"{]#]6hC37 'z;@ ޮ-ha%~Wvۊe݈llZ(hRTiBY,n#@[MW:#/S~~ 3i#f2=*[wQoyI4+Ӌa^H_U8GJfΦ}W+ .y[@9#P.7zHa(wSA0v{xlMvC`E:˝ʅDo"#MAz۰/Fi7Sj:C[3Չb|t+AWyF1/@K]&P/>fawBs^**|,DdraCfpX/}uR;9HMU8~ZL^9Z&Y'س}NVۓg~gZWdՍW*L&B*JQWƍy fs7c ɒ|RJ.]Vpz Ƒ,5Ƴ_F`ԋ.Iܹ,]ůgooy~kS/0Ŀķ"bG_zڡX:|1s mvZ Xa(Z'vQC%/qk)Cc\c ,f!^LFfC'tx+sP~B(}i{ o#0?[j NF +6݉n8ѭW?~ dh,GصนS UU⍪YdrПq*{u%?+vfԟч|v2郫RE!0!? ׽߿{:@xM@NkB wb'Y 9hA_dQ?Y{*9T-3TXi 4Ri_}8n2e<8)X}R^'!AlF}>zad@C(&T7DVHQl~" L]IסQ 5 ^uiJA0觓;M?}qQP[""~!H( *J:H5?c͛ D#kiXdl[ in3"Llyt(bzmkcmHӽ>PKx&56?ّ1 4;s\Q QU W5Kв]v#iKߖWgg6N3N!<)oX-h^D|w)%3uקYx s>Fa t*@_c>ЍOD,E)AmiVXY 4B)7Z ߲#l]{W^lDfk6Hً!#- |chUUhu<%XI򀫼g@)79Xek^ui@X 6;vk!ގb:!튿.SŇEz1T #TnxT_@k;Ln 1{(@S{T)~+U9K0ҾIyR{ ,b Bk5cЦԂߒ hr:C)Ml ;ܙq߳yIpژ.~DVr3y#. U`~ 0 ob|DtMM`8x¨zI] T# aY:=? RgJrK nV//TyD,6 Y4V rmIS\{Z?=gsμwmq̊J4ki/?љ|e@_~2K,z&;iQvD FZ}хInb~V?qfr|{꜄i.L/W'Kȷ8N1?[ y tcV,p>@5֗ NؕEL&kSNO%4;u63 ,V7=|bI.i|hA/sv'#Xڸ9GArn|? Y<:!(W=+S^w-ꙭG+}CsbY#ϩce 0=S<-E!:\cisǟKnGޕIdCƽ%vxZ2z[ֹ|go&ܷ'F7f:$_nlw-wse WѦ ;!Rca\M[+d+4LgLһuu?hppB h!\Iqj3UjU@u Tg%;g$ǡлQč?—SW S;3^~lĢEY--=?L+kn_N-tGѩ,Tz@L|Ihp~MPc.3|X jßѐvg_=L0]Tw'>e-ƛ½*G;ӳ]ƣ[޳8vY) 6I d~+mSfJ& (c|N<2>:#j(ljoV#7uwp?y{sG񏍌o_ g6zr_a.rJ_@*t*Tosgj|y3RRMeßDR~6qNGoMC9 >P3E=~x򖱼|fiMeqq+v=Ўւ`2۩rnd!r1yZ?h)| Ys Ty_{8Jo'tϽ@9W.3|+@ .p}^ t@oOK=/,; t|(T; aYii?Y"&c3;ezf"7io lQp4S(ϥK|~L}ުW QMr%Q/>ψJ~ߒ]q'+;6%oNG1 x*DU ƿGdaS[?n-#ϝ$|8J/wdGEwdT>bl 8CwS÷7IV|EIkpr2nVJYGScoH]/v}zvI1"wO۴` 3z7t@$C+ظ-Š٭} m/98Vs3|Z _ ƕ؊ڙe NUj=qŒ# o9E!am&:~.˞|K;[RQ9_K=!0? 5 UluL%Hb=AR[c*E O9wvtU4F˄$(A̒sZrqt0l_Ͼ4?^*oCLJa)@ \V`z`]Z(2C`N^Ig+|H~`XQ K N=]k=Sԃt 8*[pՉ:t6{Jd&g }*0j5&x'X {h⴦3^s"/h,0B>VOVL,`P'3|+FzWYv"As俨/7ϐ(=icjt?7?KoC~. ,RXM@}=_TsmISsbS2aʼݢTmɕa9)tbˣ't*L9`34wFte&sl/):`ceϽ]o.D:ۣ(GuCgjq#$w8 ~CXigRM]sψʛԌoH]z@9(=?OG d~BؘuYЄQ:}10dROOh΄,V֩ծ0:xI;ʣOL[g`-A%ZB= o:@3jrPX\,/ ByƕD2S=iM_:f+ 7ͫLw;d 7}oi8~fڅ;x,O &KpLJ֍ע%q/;[erQ9gvMVNr|pWXXcv_û_Bڤva8P9NJn(t '_gVyfq|]}_?O]9 ?x=~q;v͞.aN.w|h'\D6ԟ+mFc Mx.o nnoX uCR/,^r{4%dP2"~l__YV /C n;gR;S=Z /m;"_?h'?6[W],/wgks7靜%Nr=EC`-Y)\*p?o-!H)/>n =f[&TaCsugkiyN|'="ꕥ^ۯYoI$|> _HεBA}=ϭǷKx#;GnbNuR[piJF㊗rYy^vkOǷc߿3Zfϰ%&ˋhoɔ_:$#ھ|?'d$\IrZܟwvx~J^Sl2!U5wbb^Q'gf+lEš'T:m!a²jWϲN%yMnh/Zp c괂9ìp˰=K1qrb(]meY6U %n; {ڏ]dݲˡ2ijOg -yJ[_U |7_c@5#t|H|QT?;5m>ٽg5OoA+" sPmPuyK-Fu#";>/@ϲWJJzrkh)Rχ߀kU򖼑%;h~\-^BU$XGu u ~'0;[$oHbgeB5֫$Dwjy` B4iF-htgb't8w#Xd;,5Ŕ$0{O(Cv=!@g )c갌keZӄbB} [3Ƞy5Nÿ$tsSXʎgv]މaW]k6Y&ɉdc@|AfG?m''"ߑܔS 9FӁ/ q7%!0 Cx߳S&] Сp@VApòOdY_vܠp^|,%ul\OA_15;)Ƈ,)F@_=j_;ϸ&`=~M)|2%g~zx?!֘˕tېO$УD&NmiroDƎA9]Jx'M0;xKa`P&8;\&|i/Sj{bA̓K)̢?a"bo"@o/G ɽŠcп=)@ oeswhNJT?xX dOT`n0SGAg%8j2eJT/46E7xKP'fvqar@CE CHox ~ Z02pGbTkXY^TU|Z^AlMǷP@zHjDE{)h; i<2hghwv_?j'mBch'nEOwP^I}||b=d{Ꮓ8hw=3~K[/8;mzOG0]ѱtKԦ־! N*pM`snNMJ| }IUYnzRS/'ڜSK.?K8&WVfgx-L;-M7`p|2-9'a~ZrbF=3[MeXvKAX84 n߫XnlgٰtHuT%Kx6di<#xZqfuk^Q`yJ`Y_y_ _ + d\9. s@zIxɎ-k8ydf2ƽͲGtx kAg^YOp5n \M@ |/vaܿmT9.`稽JmjR彵M vKMܟ]ux~\ ݎM>iUz-fa׋ܘ3r{u -7gךa"iaOQ M;C g K W ]xv@'6Pv Ap4; \Glς;BwX\p@'| >A#Ηog^Na~&} P؎qx/O 1n D0 7^~g7w#DpNAgiC~dd>ZL [ ~/?!`fmAo!|n繾x9х6]]ɮɇóFYKCF}3eށ>:C?qͩ01;W}E #}V`x8]v>7@Xd2W} ,w H|2W%7JEe+K#1ڇp?m}P8XP t(=)Ю +&<-> ﱖ@ė U8zN&M>B{%Wk$l~18 ֛ꗳЊ8C; ꇋ'H]y5|apj}Yi4YsWbN,7T :hzT?Q])tEZ3v{xD_* ~@ 3+bIQȓ_p1k֋q=) R^䏟YqzMxH@p,,K#Z_`v pyKw$TTOҎ';ka٩;k@8ps5)Iˮ˕ؐv$Αy~ߧWGtRfK}R+>pkd3mW]6/ ޯB:']ʠ#}Ϯ8K5WhM/Lˆ`jr!$Em0\fw ?d/T_{ GN;k.C߇#x2`7I(0.z&? B$26 Nkڹ љ':?'1aޢjb{W]Rہ1ˎ?+JnFNWߕϟN.+NAQ ΀ <1|29;tB0I yg 7gp(~b~^Q@ l^ Z+("Ø)vojƒM4r\/ޛϚSjjuFusu~l9GǩAzŭ2\O.HE.-mPҭ{e/ԗ_$?!7˼j I3-_/Щ*AjdV^X ʂ{*CiP mc [k½ʨ/y֒?ZKW5{L}/4T$GZ!Ng] :s,2>պ; 0Ikop4a H7[qja.ڙgMļͭR;lcjz? -KC>e \v%P]%_X~_1Kc|7% ֎lsy)\01srS$A; 320aĺ}is\z\Lgw1Ŧ(?A|x<~f{0yY 98F is3~U#a8 Зݦ1#T,=B{vxV~@8,5F X̹A\b`&Ev487drS JU%s 64;sKLcl3cHnsrrp/ Gʷ-hvGA,yKE5{/h IOE_ W#:J⏜SP?] :37aKSn6 :&z#5?Q9]*r"\5^jkZW߰A qЅ4kX6DuO麜5u?ύa#<(! >P5.HWY2²3:ETrXvGёV;v #3{E}U4ă7Qk"Sl𣊜7g ɼ(_"1.0"h!.V ԲGWpԵTLO9QʡI&>p+ũ6;;l|f?/CwZ>րar7(86Ԇs{R3@zX@q9 48LO ß._ 6L^F`DQ{v1MН hIaMo,a5)nI%;şeL?azdo!u3פ0m󉆫߄eoO ?:\h Nxσ mc{ɔ1aPKP&BN_Ƅrqv`7O;p7Rk_ A x'v1&@P%9 ch [ dCBtvN|no;ijy Kfax95\+u0t̀`t'-NRǛN!du%ю?M{U-0towg3RM2gpk됎vdBGOsSb3rs◳w0go?5 Ͼ#O~"0N7~?X"!0~Gߡ|zG:5&C>0N2rB{u(mDra}Q$]>IP. ~N-pG0<&E2?앶\xvL#£g݉Njta>h:dqfzI'm"VR948ĜJ~> J4x0iLL+')Ý\Hr*ZS>jR]%P]HpdI Ӂ"0ߘ}ͲR 'V 2w'跟[pv\z̽70QпEff2ϔRZtO]\c:R,zs6)zĈ,z1n yTi~dwՀ :Ro/]ۓRޔ,G._yۧ?/`LJ.nv7=_ks7/h?d;pOHwvޢ^3nS sM{m6ߎ7P r adi}9x 9Y9r(~6_ɶ,]>cs}覌ӕkg#L#_Hzv sGP.m~yYQdm3挠"0Ŭp]1bv9bQ9 vOO0iv̹]]U]]}ԩS.dTR6Ԁ惪qs `~0kG;[G|- {h6P<8= w2rfܿ #ls{@h1#=&G 40D~`>diO7İ+?(u/㞗Ը;%S |c+KƿnuVf < -\MoC?[YNOriuʞ;!c\)@=6UGj\3|Q 0%Q]Y[iV4Hz8C<&Z0"V1l#Vvks Dt"I/f|/qK:W@|RmT6__*⤏lӴpYN7 hĚ;En^̎Rx[ dzCMX<ρ[B  fzfH{GRx=uMQΡP[9HW!>I/< 4<] VB)'i_Fn+L֖N6#{=W0k}[O=yO_FsGXYu {=ّ)'+h~4 6'r*=|O@*_db1I u6˗ƻ,? 8&Cbc5tûs~lkg5H0An)t[gh+.u.+w7.>טr+2l}c=- vA^"h>o ij.fep??Badjjݦ𻣒}S'JΧ@_{̭p%Bn 6/& fA0ȿ㽘P ]Jo-I!Q`8E+P=9'[ t|lH.` 4~z@@B@zCqyzP[W: Pn# tO{/P_0i֣ZgYZ:9}h<. 5Ћ/ *<1@{n!KR7qlp` 74 a'?;O[ ^jɿn5NAKN9 ɣG& PF@dyzvsv"hJ}Xw0gx@iqV54r|"݌uɿ]M?\B+ѩj)B yL`Lݎ &GZb] xYr/Ig+{I?PPD>_-(B'a;.ǟ $4(r(*y錌q6}M'!A^N([A >6L o~iǶz 6EI>Ws=q)O2]+ϬgiKDžyko]5zKw=MȠNqBGŸhcK$ʖN q@zYx ˹4Ku-MS% Lo6Cbr[up,G OW*H5P=i# o/* 66I_  6bS(3~Z8aId33w|¯6'55=gMK2ݿGp3Wηg5 T*'|hYPr˿ ñ\I@=uT@J;VOT@7nv_,S~a$l7K'!4¶pW 9Áh3 [pVׅ5-2)q&̺ Nv 0x"&_2_@F*Nw P,p%l |q}AP7WkNܔZ-N^>8X!;vPLRni-[oX?x:`她{:r?&hөC72<;춲 8v>LlMv0K[Ż\`}W#p]!k-cx[Mxk4pģLNL yYRm_:ڷ" OA;4V<>/u]Tt'8k tRX3Mdž* ٕobfhN3] cn w7r<rnnX[*I8Q[5HL(z3i";.جsQ51ax* !@~ʆ`?{LV 7f*Ίmt-XY{jBA6& Mu*1Q@Mtw&J[JP(j((Psc[mCӸy7(~=gW("ur{9(PSqn6PL%+Ua%1{Z-@I fx@ ?AD+lx')4_O x%P eL{ϓ}\Z!_bcml=[Ūm6^W&; I:T`"-bS*L`WLf%&$_sw[ > r'LZ^Q ׃.3bOu ISOE^nuΞ@IDAT˪uXÈ7 y.GjGX7rE\/ g%k`V<-uVDI Ji)p{_~ / ^c!eHkmT+hU(+;S>`nRjW<3g@zjk&x@:R1m) uMxey{.xf]pS[[T+^ߤ8nc5q}0ʻn=Fsʙ_ f@!Fp"m,?j_``X;^ǝ(/@@q9^d)3W!{n 7;:7>z>v/I+k\Soh^' Vtxy9!% $?!pi=X}'Qx`@9/Ǯ|g 3O*bHXk ,㦘jz [Eب?kh6=lqyl"FD!$ vʴ"ELx'ϲ3;M>aaZkfP9\`."ݚ$Ӄ.FC랂^PxڿQy^򙅧Pޙ Z~T,G {2͝%6`tg[MlɥR?nx-{&D64"*-FJ3\G"ކT3͋|hsKn5aЎއH_ϪPU@Oktwbcm=kz A<:in\G2NVҪծcFM'$o|;c<ӧG{~?b[*[YďoP׹Q[waG f O3gB?ûcZb]f6t›8ۆkehlr>=@[h Qz\|"կ0{ 5JU@ni 4lڏnz긪*P@ VeUdۆlJ-?K\D$_-_?pnoBKLX`1`P`VpvL>Q@N.䬠oY<9I]{z3FsF+PQ[s۩(īts31f1h\64(B0-3`A{ի)9?_ӊO?- _ :ӂ\-%򚨠!'p[<zM@qt]'o J-WOP x_ w@:F(sy_pwFI>K^fGWrwq8%d؄ښ"킥rj?%l;Vr vʈ ~V(`m R _pQ'c@6*d^ !%.?K R^K->!llKН"| *RM?Lxkj/~n AЧݎH¿2@B['}1: | xA{[=(/sPp8:~}Q_5^wVioqKv{:|q .J@zų'qNY׎ Woqp|Ԍ حώ\?.u[Z` iz.ARR BV {gdO&{> C#@ D Ο'n ~7FH<8S@1P/PtH׮pDϺ> ԿZdnQ{^@8n!/[.S !k`Mwk)ŊKn=ͽn}15羔N7NQ93FxstUY.+18stxlHٞzޮ*Pvj TR/kV?=hQä;%"KqJN.Ε~ jjɍwOHX OWSSVQJ6lL}%ߙR(Rrc_ɤ ip(~ޡby8g9v0Ao'sЛw_{?~m<εeiuG]+{2Kf2*âcp|ɧ9ծv93O>VdL5svC.F͟j'0=hsEr^1qt~82z]!>CxkVpwt`Oe^whzyŠlJL[¦5`)Qv [>?/B@giz~<F{ӌo݂&Bάwr_#о V?pK͎52V@^/^qr8n%8'[dQ`'tA MVذ!^%}ϥʤ7{3J z4}v|doy7ϡ~~XHxz @%Qiɿ?;Ўۇo}zрqz;sR=(֦͟j+')Y<0 C:V6or nc|Q߳`yĶԼVj=Hz`D0B ;vf-zBJb =萙7rq,Hv3[e،`8V9al6Gk#O |; em7|  M\C [Mxk d߭ACgn5μ%c9i{?Uش;p6KuB/|QF~O~m]L쏗| C!Lj",!|RN`V7ԘG &&6p_/STr$Ul)M9$dJϛ/=/f tptR0ɟ ՝\o$Q99US NbY#@ r:2ֳ~GUج$ʇȥ`sגi0(,x t-ڸbAȀ?HQĀM\/1\oqZ2xX,Xt6_Rx($Yb ~PZc2 4'x+GGޡ> \++U!\L<&X¸F?wncWS[ nxߔcN_,*]G?'Ϻ(g8~/ =|)z ]6`"w?hI G?*/XbBN$P ;kr]$"8 ukz_@hJ n/@; 6~shX*0ps}.@C|"he,5\O C8*g $2rx.fQΠxj H>ffQPI)ݝFxx-[ڥeY$)KhlKmxrY`rtG %/8_s2e>`}|u_6ͣ'NM~>y:2P8^}sr>TwfakeϚ,8,]bK`k9 7-*j)OTjj7S([H+Dwf&G(M`\OpIǎe"-6]xH3k_/j5#U}JŖ!|pV4aU͘p;1 &5G75n޹FV|}Ep[H~n|݈8lnܮoeMsD D#wKjq[-䶌-=HڞWrVzH5 /"Nbɀ%Û 9+>ǧ;gfo:eJ(CȢUxHus/8 սB3p| /qS >n(e|gd#!2t]OkXA = cwz1G:(ÆNczO}>c3~΍Cy> |KYqM\M1 2| `innyG 8nzv7}?!cwRRx YfwJFfU\dx.>2!J/Og)߈ӵ2C{ ~|TrQ Jq7 u0mx6֢<»2@=G kv[Cm2IǩV{Rj ^* BS@2&^ _ [2-$TK{?-Zq&oK\n͡s,~vZ!=X#PH?sa䦠}5mToGi/9Edب5tsJI箴hA~3o(I\pC|_ V{, c:d@V/Ep2 Fhj/b*$QA(H}#NNVN[XWvH]H;boF p_(k\ycד%V$ _Js._W|@w:C"W8 ?p >}>Aa0 JYqgk:H_8{҃\}WRArw)Y&8h'|+reNmÈ7=;ͶzR_{V-%m0+f7St$W{L4OŪ6!=T+3¾зү_|G9 k3\&J=V؍7S?DU <at_\笆ʠ4 Mn4PpRtc7UUU5PUj@_P%KJ&B%8af$fE;_/\ҋ .+߂afA婥xpT<ĔK%i{yƣ^&dB:ˎ%+]uMhެy3 iަ9}v5r+?fN ioUyVq7&OK"oi]C)hn&aQlzr'}= =#Aeаr:@p9S7\|Mo~ ¬-̞rj$q&~-(L߰Uj`Syztȃh"z7N/C z'~3"tyӹmjȰc$Xp:r/.]s"zMCSu(Ή'&ex!v.Lp&8% 'xj)5ĵn/}侻\͈ s*\l-oA=4%a-.s/{4DtE/1כMٔˉv̆>-h6աh9Q=Yc1i#s&w/#pKQű Ia,AX U6]HfZ0_F#EO=㎘քuŸ[*#ʚ9Lw׸ր$< ц>"ROEag/ ~0X[1:뻅Kxw5t&F|[oqV\/0lsG |rS_`Eี[C  'yje8[C. xcv&;C'5_L''s^5,5-X'P~R.UhlZ2 ?>Eff0|xM|1vfH I>,gO9ނwu g- L(xkل>4,pR^aHm"QkrLt[A6ǻq~;s!ts4Tfn<6,@?׿=C8>;yy/~R˓҉{]@' uG 3BU TJ f"DEaC׃q9$4Q}z,6~XM:Wpg (> ^ir+ {k( u)O\†Rh~ſH2{a(0"{S0sKڎrbG=2K KpZО+D%4Xp.+pt!r"LVi6Gp,E#9pswP='HތNfqP`Cj| /j)(0!sk?:er(bEͬY\|J`_t^ -k[c!^?qtPү|+g1WжLKp-!r; =wd#5VYs ӓsy[рg8OkC|6+kGt֢y * hvę|9彘A7uV!¨ &$U7>*^v ׷tl' K 3E;⢠HH`8 ~T8sS;_~ ZCv_>vpf̟_꿪pDPiT7k[vÉLN$pù;*.(p|@9 hsZGc:Y~.@0z-@iؑy.ǞW0 4o L\t @zFGʐ~8&C0z 7M?N -K 곦sUkNAM|IAw4h g{{; svd~uN\ 8p܊9qmIݓ|üHI^FeA¯'̍E+|SA=tuEcs,{Yra{pGÐt>%}vэ4<;3o<x̻_n;Q!;vVXQ!+~QŷVԀCp~B8Y!2r+}Tbs{20043ڻU `Y|&~z}W_O(θmUd (ɦS.2sH^Hѐzg; qDM2|至4 K4@O+^ފ\ߥ3//BGLKӒ ' f*M"$n5(pl==Uf&_ߘ]2΁^fI!\A^u f@%G?3h`:ABjűZT̏ʏWeh3Gg z{u4NGA`+:_>О3Ӌ/@NTXm ƿݻx&Н ナbmzV%t0@]@#z'd k7s@u~.@/ViOiG%ҟ=Q:[$r{fZ~ %o0Zd2+¦_ Χ=|] aATgB.$Vcule[%t 3. Rgۏo+?d K7 CsAPPj)2 slK.PE~k1MwwcXh<.HQV>n A5Ĵuķa:>򦗓Y[Pԃ`j#!GٖJ @( #G kKg%п#@' <["֓,]ekjvhW 7VKRkbu30 w-5d1ސ|\}4 p󱠟OA614Y>‚H?^*~OGsD{Y@Q` u  h)[]UQ{k2ړ/R'{!&CWD+^k9 @m0{\VjWǮms1yJ@sC"l\QYl_'/8'{7ka@6 7@*7gıYr4\`sP4HD4ԅbӼi0P \#ڭ_KlHC@0n-Бn/5'^`>z}W}}!vvR( h%.%.()(R PٷB''oI(C@/WCgsGTz~0VY\=hF7en2QQ9ع"xOp@XKsIh͔ g8;~a ̙ŗ -$VDMoe^ݛ8jOH+$ Npq&Po \9+Ԋ7t@LzTJ K) bL{ꧩQFj%>%Pq$_A\aNT%A/u zYm"QR,kH 9~OSO%p}E/Q |k1ט\Yt1?Gss G #9Bd!Ujo*+3rWLqY:G@e$S),!~-=֫?ߞh |ۤk>9}{׵}rSZ&8$4Vo7*ԫ?ꗂ7{]uoYc\q:GY=s6S sXtw:׹r74*E[4M9>f9 g䑀閑HIvE&TL{ GhR#_Xu@w9FH~d^i- &FyP"W/5`EҜtGذ? SkVVZgpw̢oz#t'_Gt+o_K?O9ίr1t r}PU͋d"Ў?Φ a۞t3:%R.vxFEGﴊƣB&.žХixxݛ]cK1ܑmەvL]-^ Mg&gD8^a"D6:;xohp+2T} [h5ZChp?"SZkm=Z8Ӹ9%?g^,dQɺǣi}_ g=3rfէr;Nm kD߽O@0J`|v@ނ ?=k|iy#8'n/s-vɩ kP1N[KJg|1 GMMItVUpgXx.ǷGCa` Ji@ U?؃k9MAF rҽ ޤtBpp?ͻxv}JޤFzfwG3yRzDy:Y9y Yb)chB_1Cȷ [s?\8!zm․psQqt3+Ciީyk4 M跂N=oֿ sӠEí` b~ p89I鹋l>T,(7r/?Z"p!˿q?tr۟X`2]aab$uJ;VlT˾E0m#QgTah](,!b: M@v-.`U6N(dN7L@GũPP2!yOSɓRI9N1NыؖaP5{{ap\z}a^/y/3Df@{mu=wBe ݂>[%&(? ujANdžm ?O1͸ ؞q'pL65夾9ߓz;z*R{"}n>jKƮf5qEFAoJS_hϝi6ܷ]|`ne؃P{6 >g<^ @+B Q2[s-/ |! m+нyk{C' 7ODx+nHQlx?.rI&ةۃ :_(3k XA'O@zE}*Ў& [F;P-pqXw;ry 7rJsyW"cڍV\gNX&]p^:zyҝ wg"a%U@Жe^8꧗7 N 8 ^ 9={rL3?'OK5A^rpIߋЬ'ݛ<,s07s@Hdx8@%" 4+dőVtl|(i}M4ta< +औ͜7e6EBW_풥y+G-薁|u~kl:܀K|^#[PuP5bqS δN M E716m8!{~6A9r1|#KniV-9wzx6bfYoP `F$oO13${w& 轖5n'TGpؕh+ė5=\KYWY\esH{?I S;ګ*%]]gӃ C/>zqϠmf2C>ɫ&ȕxd}V1q<L~~]-p=֫ƌs^z#xM'gE.:m6ڵٜ9v]ރ  5yM FuvxHOx?6n+ԏڀd863?혞MP=7ӋuZEuИ3@:{x-!][k,oh/}bxKcҵS~!؉&[OEz#P .N7y sCy84Y+42l4I! -Ɲ_IWD;KsG٤ذ0cX=z[Z\Y]:[PVrЇ젅)z|K xi ރt$Gkyht~P)Nx@yh 3gn Q[(5H9\ aSP~W'|duusqc.q{BwqZz[LA]5euq\ow!sÆG-m!>51Xz*5+&м\W+# ]*8`{ -!j;O[[Mue-k TPIj?W]>v Qc3{9eЇ2+:|{ǀ<V9Izv$hK^ҷ ۛO`6,F wG,ҙ}cc8p,(T)^%nz&`rpi>LHc{%+◴ ǗYL&1"Ѓ Os&nMtV7+~™=ҋB&ЎV  곁@: u5r2[r*qkyarq?KU)BqdrjA rHU 5t{ >U8 :|qܶ+ ~Pv ]QG ULxnak[i|.]<+$B{,x a@{\kѴV]lTq R+3K#~~ˇzL"/9a [pz0K\/tC5og#5^sψӲgwgKLQU-}ZkO0 HBחx s駳gקݧܧw{STB!]]]L r-0axq@6x(2'khympn|OS_) wVʭ;cs 3l=lW!o%@n>w˴L2 G%酅-~qנKp'ʛ[ dB9cbq/\YV u_@  ZO@n*oz T#T^{6zz {O^{ȭ$Onȥ|me.c?` bM<LvW9۽k3UbWqnD02[qֶMߘ/Հ6  -ޤ̋ˡ箃O3݆#"~^hn? ۭ h'6x)!W[1E Ԟ7$KWUʂC)xW|]v߁wv4SY` &$*fX|79A ':Ex˔#oD=f>EO0]!KZp7>p$X@MV}i' [gk_h:֝>+ᰓ*/ؽ>:ko A ~%–Ps+jvA!p>MP\TPdw` -@PN1 tf8"K}`cyN+M½HpwTwZЅμp?8=Kr&O=iG\J,V[`F'>SPu?ps֋]Nc:  \ckڷ6+=VAa+Gs@ĸ? %(:Ox~Z"p>^A'p;}{ +;.+)ieOt~.Hab$rgA련\ oXpV:l\p ' v)|~yF<ů1` ,ꥨ˼FX:'{ abњ2(Zw$&d>rAG.h~`Q(]5#Oi#h: O'hAKg.wވ.azc5E>zM}:RU T@U Tv S]qj] |]h8@ *aJHEl6yAwI>:OG<&>ZKϋF%VjW . n/p۳> kOEvh_x({^ND@A gs@|9"*`}\G H;.o mJ}it2S_YVx?b iƖ"[~8F>NN |{ 9l5~ĻT@D9.xy+Bho QǭҹI }";*Xr3[Bx3I^jjK-SjXb*iylC;0I1Hdre#υroD]j~M\*cqL.b ZK}Z`Op Ͱy5uzv;8)wKHRé #fSĜs<g̘ s Q@̊JΙM3z@}mTWWWxիWO9mMa1OFM z&SY4QWApp>-0Ѐʕ(c6ή*:;jb  hoj8&v5NѢ?$@ V^;8 B4SD%I?!%N|\FFVDhn¿@NB;fozf]CܿDŽV̴a!$OtS 3NHC SKcxgXue>wkJ:@tCorvGT={w2S:-ofzǙߡ}c0PXYraM>@zwbXej3ʾH⷇VWpG$;"\$I2Hc7v.O&>َ /۹(ap{H{۫|Ru k9S ~"7`,}P_XY&V]11?66l!cw ?G"w&-]ѭ/zK~vܿg_-;%K~,AsA{nkem~h.뵺&6߮F6_i굯?ӧ^48vvD.sI~?yBh[ v ׅw5Ş|}oٮYus>, }v"1f$pK%񏰀#C\{6lRqXnIŁ&_d;NMg,,Җ p[3e ZL9T=<,wY:!uzO Pd\Qx3Au2s9oC/4妜yn/FZ<>cG#}0 8g?P`zS`zu@>D4KwbfƬr_B){Eg> _˞!bw0*^G2&m 8Qh8V 1OpviC;bR[r ;6IccZ`ok(h2HNw [ skn neOX^&1O ^ `{ sͮ6H2{9S:\mѣ2nV4EHBKM4n~WĻ0gh6Ɏj[2s}&${;vmy73GZ3iOu+<G8W~Dhv v>܎>ɎTH, FDpivԇm+m-ad@s$.'V' ̗i\7# "6% '$ P \x1M?"?|[ݩ_Y) n>?Oѐӯ}F;t&1YoffZɸYy-H+_<@LM (gz.l Ϲ\]j.%_/ Ew_H<|'U@6W_s퀟jB5@!:haH2{ؖ22n_^#8+WKGHgoBG_P\( 5Gbx%*ƽ տ5Wݟ"@O{wGOn ƫOѫ3݀ u-{<IMt3#7vS_j]+1i}#^ϰ`D 3E yj ΐ%6Ri@}.0 30g8ߛDWp@So/W 1fc Z<+}CzyC`o$mS(()P $ 'LX^"-˦]pVQ[բ]0Pͼ$8EoK{9TE OOtη]HwLF4>f؆w-?:!L6!efIJ1:&oS&NM3!M\Χ; 'qaY/M|-g;;7G Qv Wcpʼ1@ø<?N_R캬[hfN^/-! Q𚛽6^=Bfj9KdH[!-Ƈ"[ D$ |P}!q8n5W#Q/w3dq x,ѩ2ތL"n~UW;r;e JF6MF $ 27f@- A_@=[09+WnA?P?s@z'$m;L,A;ߦ_Slvq8C}\wQ; :f~ /x%{1>~Pa|7:c=IuaI+7Z]ou\[vm^YLAli+y\gJi&æ,xELQ^4O SãƳ|Wx|~zIo<3k" ^ʜkϨOxgm8q?Ik%,ק|&+"YL ԣ1*& *젘N#.5jJV S֑95~L1x'ے:X¿?Y7De>oNn0VK#'E ?rtzkIɲigڑ`u"[0~cZvxÛ7ڰNjY-3K:-%\/? gEpY\c_}gL2^ڦQ}GϭC 25-ʯsp+iѮ=_ 3F^zXˀYp>V n{YX^q@JrʧstC(B{;W/_ 'Ϲ"p 1M0hJ=fOQ/-rw&Җs/F˰\mb@_wHix҃2Te pbi.ύFMO |t+~~:Q >"G"Ȝ' a/ki]9!>GAL>kl*)x#> ֊xyV<-9}Hľ]]g<(gÙih4!PB 4??7hWȜGq]]gT]QS6LGjY19c}HpNeNC [fqxj+$9ðtJXzتw/ ̷~Xg[`xAeg69&Krt7oomcW8W/ҟ&P'`[!= FS7~)s3s=??';h0&!N3oɃv{@~^:z×RY,?$@g#OeA(FwքƖun\~p$^xeMy #BلM;hǸ]^lN><,{2̶Y^>>`jϱlU'UZK5O[ !m&`@s)h [U2_o#@g |c`a!!LA?(_sPP4򱄭v3keh{. _@~x.?%q%ֈvֈhMQM}C@"`W[@`mHb/`<8X}<%d\|%WWڛ[2XQ&G,Ҁ>h-^s\,P.7<ֱ/ \;(ěOG?[عhӰ)< <[mܕtW &1;Ă|{d2{oAYj7d Vr~-v6<7\ @[ dg Rxu"}ewcC"FҮc&-MF#~QUG9 b}0gϡX> 9@e)lO /2+v>}szV>fPZ(N rbZ?S8Ē>"P =U5vH6>c wO)KML2; < VTvF%"|v",>Ssq[/7Fo8Gfݸ<=n%c(:enREmhKY|mُ?pxEwQjޝb46ھM;<[ lڿg괭߿H;f|GIn 3}4mиu#ބtOQE7xKS?ͼoi"Ce[B>g̸"??sŹݸcX6`]Ë[qaztBKj}ڞyLwj4YIc³ :ǛJ*PL@s 5њPS5%(y2rI:EtrLuW=Oޛ*lssø~N/Dw#xw+^žN\4$sxn3;΄n7kS P㗵]hQ{Aqҿyea PH^ {P}'5x'>\vïj\瘦ul0D j?noa[$%SyvT`W 0/ {N oqD`t}J5IInn5-^_O8,b\f{B'7qf'ދv:sT}IokB#1̻PڎvMx|yb渊Ue7w{|aagqٕr9^& _ ݨR[Mxnf -h &%G8woPK8\?M\EoWvϗ1v_EGO ^93!; ĺЕ[s oG{ h_/9v'eS/Ka\ă% )߹vG9Czkg88P4BOn;$ǹ/aa !xkG|uQCmg ГaӓpJ`@3B mN F@wY( 't[`>G$G-{vt/כ ?9{<kt|ykE:(h)5dEˆso6{xhR/C3/z4dȵ==K|:|,{@FtBnB0t 0|m'P^Tz@GU 1<KG #->-m.f  n3i{NYkT8.7z p>Cbh-Ln*O_+#t+k[͋M_(>|.c:I*?/J&I:Eөڜ݁Vj^<Ïʽrcwlff9]Tp&rPQz!%(FyOٿQ# ^['PK&Őa)o%o>@ 8H{L@=U}7K>=[=VjOï<̄c:ГRxKҰc\h-3`īлOq!F~Dy G n>XU Xj'^_@QmdpğU Zۙgߞ}Hݟ_5*(@PsOL ,76f  P?W y M)nheW1Ix>p3A00n,j} =#ub_tfZ) DU KzlBݳVsW'/ a|bk*;É81IUG6Vz9" qA N۴S!q1AJ|0s@:Y{' uXY@tYt@{k.NrrWk| %?,Uiv/ÏHmsӘݙy7Ӕqʺk2C2W M oooHo7 (Đ%m _/gقhpG%2(य۵ٛH⛖(/8%TSp@{y_ ?K^՗oJΒ{;]'/{ZOd~l6<]Ncŷ81 \$G/ c $;v\px]|uso3ϸkS v>jM ~C&A3۳9Gъ3*6Xxf/XD?Y2rɫKވÊ##CƧҴwjV )KkwΩy-'_V2X4ۺ/\g˺ | V%ۯ; &sj IB{{2ݲ£/ r3C7eʜ }?/l:,|_ e'ņcXA.JK/3/"%~od+b L@c\Ai%wˇ|}%5jJU AJ/o3gJ>`Y}~k~{sH8\= >ENs&嶁-Q t鍲-MZsy|ASqP(`Tu&n o`a@ z?Gm>b=] ?g}o[=!ƅl8.}-nNO͇1= C;᳿ nu)0L!P\=~sƧK 1V-Ջ:mGܺ^s zgj&*8P #`Oj[#{^L#ׄj/5j=z">z+.c+sVK c:؅Um#/ fRO )-g՜^ {whȏ S U"p~ Ed`@-wr JÄ 2:2; w4nex^ ^]pz-_Z =Djl@kks/ Ax_e|M'cb~M<[ O cs\wpa[ KWz(>؝k`88Kb٬+ L G |v 5+8K@aK ,pnu=>ۤ0_.h[ I_.9o8X4TYr{@=mbnJlVhBӌԍx(Ž j04$isWF ,}]QॷXn@9W 拾ʷ!yaBsnOXu{g&BgzS^_GGFQy&gIWՂ+OMŧ\9AbJ}`dfC]K K jR"7¹tR*Пb$&Fw #kQ4aJTBhϴw3i߆Nrg3<;({eΎg+ӓx~ N4tҟC78k7Ra_+ ṻ{uv:NcːD_ ٽEnL2WW68 WwM]qC*p@nnb&l<>:D` E ]DԸB-Fr ;pvOBOJ+o nHQ3^cr2C&bg{W\Tq#ͣxYm߃Kw9H?)Ю2鰱_*\MaG .(hSzj%ù{ku}N#ʿΤuBl`ˣ(]G7ؤaĸxE|Q?>IrgUj)ʇ]"{ͷo`/ ?zcGǎvgv2=*/x~r{_y9 S1M߀|y.2 UmxΔzw'1ӚU!dzk!UFPS5%]gF $P71 oSq$ہG041oŊ)7Bd=12RWv*:btJ1ܛp&{bs~!ϗhp0nTe] ,e-_=p`lUس zg;<m3y͂6 5pɐ!Q>9|jzYrn*G$7: snDK m} З%Y}%(W ~bOIA0x֝m=_'+(1ړ,㐝as_]rQ}1ƣ~k'jBN|^4|=i.KMAAf-@#.!2^Ү:tZdm%yS/9$ //s@I ;:X9Zd_h2@1)PM[ |0M&yp ZxTI#a4G'&ep}hcvςuZP\XUHdP.xvCl`$ # o.@%@9>?en&{r" 2;yo N sz3qPks#<8۳-_@UcA=Տ#`ck٫ F.6K6-j9y(%v+ |؍ |]2? İ>:E 3pG8>Yg|7ӻ菂i` Oޠy+zo;?)HQ8O_y[Bd}!Pm)|w|4jhctE {,gx|x|p<E^M 'Bv8AGr q,Ę<,߸N(pzUW=hd=e|oM9=%,+O=Xr.* g{>`Ny|_<ρvP4˅'R{+/7&6Xgm7pEOg\D,0g}<+/K庪-OoM) s urCEa&27_|izG}l(P*/8yYa:Dv8{;Bw`E5Q ^H@{Y`I ̵.,% OXmr^fo:VbxZ7|ǙTOvf?3ii67zԟV؜|)SUةi}9uczK5_rY= 5ÂߐxgAO/qĸZynY7ȼe,87AweX6nϙ騀z4GO,*N幻6lRS{m;lmR;ϠSSgi<5~>cl! Hr'o|mjJ$k1_ˉfs$Gia7-uYASN`g;G2,{xf Fpڤ,yфYe92&JyDj\M/'ß~/ yz-궀/W%|vu`ufzEEKӗ/fL~ǝaqsmB%FO%l(.JZHr :U໾~Hz~߹|Ң(v)t#lhHtsIаc(j\J@'Z^5m|ʠ17Wߘvy?zwTz̥xoN?}jcQ]Ř_ `x Ġ?^RX-(Mʧ@y :@nq ¾+@/ x^ }] _#WKO̽usz AMǘcǐaazDA"oH, ?WhGݕ,‹nֆ`DϠV߇ZyxK䭿Tç& h)}#Ԃ?yk{㨽R 2e@GEdy0n o:+rcQ'%;U}.!ߖ(<ۇ] 4ž|ع gO-=ޠJ}Ypa4.Ѹ!5󟇆(,wnK˃}/j~4 _80رrYt#Yd?=i-2x'ڋSl.+$á1XzWRx5b&e&ܿq9ˮڗ1V`2)FB 5%PSk%|tAH>E%C$7,C.sIdHhvfPdއ /"vZ *͛Sv/r+=6蘒俕'ìp]v#[~H0\hɣ٘||߽ :ψ7ڻh*`>D)C< ?^ M7vɟ)>G`PW*J(~O )`A%jBu@Ib-Li.e3eg3lgã#w1R;?CGHhAӴ kBSx_v ^*0T9l\ bpVvycMzne9|z‹Ux5@ >>-?(y}#I|Zg1@ vA44,N Oz+Q᭏tZhϯ88}[O<-CvGaఀ#8*>/_ 𗚐Jvttg թ7% 3BJ6`(Z7lbh|!tܒvo- _}3;Z7@'е 6mNP_+ 'PG /M<'ʵ7pӃVI4o K~vFd@'ّnzr}V:?96\SNy߅OCoF)oypʭS8 ۳lٞ`f5Gh_隻9kypzXzͽD#CzASv9 ^x5eo/3^ٗ_wC6?GY~k5SДxw$#͋kO IzĞ>Co}iB7VP'׾g A^Cۂ=(BdW^Ra}l&ݡ)^}jU<я֞")V MOm"_c@M"8SIm_'o``=kJD2c>T.LPҽjp_:Q~ 6hfwy;%56}f9je],{\?@g_ӪX_8O{;lOJ~@`i=9!{'Wo|K尟x@zQ+7*uפ/-Rw k"7кZV͟&ZȵW}_\'X>X9NC9M%}3G Mww{Re;}O4fL WMoXf4Z a)d?f, e);1:/|xƃ"Q}fT?<\W1w 7W{yu/>%P@aV*  xڹ`;3X]jk}L\KqliG20+\R„-5;ݸPҼ#|Z_C=(8l'x‚`RFܦ+iG?OuˠmVSfws=M4X_L KIABAi'a-2)?æ:)%z`R^Ǿowv&D7:N<H`)naٞ@NX|G^H?c]ϽK68s^.~8.^; ~rn﹇4s{930qa] m\\&L 15 }״_IՂ64S_dW!";)M=ghؾNh*~p4zotwtZA sN']ՕYrvww7&`"qu~!F| Zܼ[S>Z"oIuP?C Q`a DxkQ2na5{ rajIux1b:CN/vb;:DϑP`3J`> \G[@~pA/سQЕV%UXrs?6曧mR)we:^-+Ȫ+/7pՄBsmp_\ƺgyn?/`+}@Ge}~<u yK@9_* V^&0 uu3ofޔp@ҋ}=x=+Y8F(k_|N?;s<& 2\IX[S*iv1cy0,`0Q`\%wB?I%$z)-;}*Ym}q=YfSl.gB7D?EcϨ]-t)iX../L3s= zƏHQY|`Je#D,60p7 ?8@>o߱\w'xNMb Ƈ}k.߫_EkBu;#+tg670X&Qc22 H0ZY@!Y@҇g@Ѹ[tuH3RxgchBghFDl40%\w0b[uV:P!a0(DZ)_ d0f^ #U |ϕC;|ɍw@_`=;x튩7,Ejn[x_QPg ˟U |8h3BuFRK<액+4~28.<^$.Š: Ll^|j kʡT@1wDrG$5/ۤ!fKt.f(Zȶ/Dj7 U hc̎P-BM:q4ͣI\ APsjH,,,A; h33;,zI`>c/00X.n"ڂ v{g eh2-\W ?K W`-szS=_9vӡYB^n39ofsC3ZQb*3vʻ'Kp-jbu]:9K:+f#5SvVWWWrx@6o?o [Ë\]Q7rnB&..^ @q1DxP-P|S gpg!oJΘ]},K~n~w{-;e6ַ~C^/{\KP& ݇5TTVY *`wWki_SAL?F,ؠ`ɴ~b,݇`D   tTq73&w++?), E !-Npd?rk{]q3?:ylɷeHuc3ʵҭ罡^<-҈mm(P>ǽ %ppᷯR|T|?" ꧶@+c,[*ީa}p-r2,Ϳgm3A=\<ĊV'.6WYsȗ$A<+8C\Gm>I;;"?f,}D94o6js0EhG9v֦>nz>^@|U`p7y9Z#OwYA':x/ Z0Kۓ\1}ԣ\r'hc^aοkq3˽_l\ pG63rgdπ 8/h 헤.ѣ71@>[!W&#Tv&g̿}؊kw/o}9ٻ΍.NAѲ$4h6Hm tГ]!nZP~RLvSzBo4!8 o|-`hw䁟t0G<:jGX $#m#} g8_|̉3 +*Spzn[BT$M%lnG"4x,#n;NL uЂgʝ^g}+k+TSG >1979;~(䨥ذA !{{u26 OPmtpϹrSȏeq"s6'l:QCʽyxhiA2 D6xWPN\?w>U!+j1$z_+$Phv@?Pct.\_c aw$eKA<=k/퉷y4,m`FLIgê.\g7&ȉ?LX?o3xAnm򼳠ur;Ü5ͧwӿG 8x*a!HP;4ҎӂT[}:9-9Ez ? gk8m;u"7?y}d:Y_KoҔW5@*OĖ3W:q{B5|Į_ץ-bU|c񵵚qDѣE_:6M{4Y8<S@?+2 HHw%?O,?~t˂ڼ(?禚 &f}T~z#g6 k ֺWpV,0G~t@>V <79 @P|gYE~xgFz%?-NQw~ ?>pj6Wg'W#MBXc/̢! h&û}=#y!d DzwD[ _Gnr#0xZKX@:vgY64K7fG\Ws95{clG~kfFLFS:W/y[v!||W 99y3;킬t$&G9 ǥszwkV$zh%@%Q\̿b?Khv*; FNL=@Ӏ٨@>wǚ|=aD:P^Eä:2CcC_hj>tHp7F:C咚u٠(w<|X)eP(|,T+j )l['J^(@ S; $;U>z8S&Vǭ^¿]X1m _ Lpg&?l9,GRx..{r?Qo~USXƪ^mawaA::7"y^&hvPw.w`_[,GFm/G/ݯ~j̷Nj{T`zqPHk>mvh51o, tv:0 $G '*-F.KZ\7A'hJ0!+¿oU?ΐPBhs`9ʙe-n4(H<vX;Y;Eg?8'?svqf@x WcXފ0A gEېH©ccw$ߩqsapm@78Kj:?i/ b)`it&A ̓3 B'z.F_,@ ~;'Ok\pWU`G ZD628!@yU433K_~o[b⬢>R԰^p_%v1D4aۓX&v Zw.αZ7\iƮ4 jB/qyWۛJg-s2g|%wUFGnH/=q SL>t_}/S$ӟWt(XUp%4|>F\/wGc 69&~TFUULcot۩Rd|WK;Oib5I >saIF:ZNoLByz{8$;x0d\.ϟ?%^2ZdAe1{}jYq\o7Wr\V:wZ]dD湞bş5ʬWYsF?L2Tgo382`\HwFʙi|).5 4@˄숺B.oP(Rзi~;L#s3~PA̫Rp*27)qKU8̧^]ݯ'<39c${}o-[HUS5 rDJ Uz!~;QAW@Ƒ٣;έu &rD rMSz [-թu~&^X +!i vaN>.(;m~p?u pjjiH-a3J3q 4/j7'e;QWN(Fo}dt${пF.̑oL3F;v^@{[N'R0xCբʟё֠>h?9k@9D e!dTX'cI 9߫~T|WzxfpW},|Wh1ȕ>ZPdNGp،%8Q ,Tu@}]"_Q g@{Z| Pp0x?g'A䚝نwyg?,vzɠZ{&ɬnWC8# 5gg0%8T @[ PF~ɯ^ZޚxM==R=(+SW&'%e'>z'N`ތaAb6 ǠAƇ0?.[ trAuye-;;sAY|D̑;+@zfM`4T3V C@%bRk:r DZ,Dk˜xk:"?V<XJF~% 0P9)@]9raZòSWY(u`Oc|sA@Jd?Zuyxg'e. M׼@NA޻ G"930ٜ|18)lĺ!H~DqS`A@frKS a#i;pP kI'`~@ؚLJ.ӏ=IsqCx~xn/؅%L}!l4!*?K0%@ &="A9[D< c+ͨ6Mp1ˢ=*ܞͤ@`|uxB8t}؅Mɟ>BAs h߸)8B7P P?&!:H"M ЉeԫLIIΡ=xZڶ´l4qݡ̡$vcĆ.̩:pL@++kPQ@PxPN;v .fQhO#=]BK: ,Kӑ>줈ϏQo~wv JPql5rD;N0Iw?&.. &nTWufd!fZ\3n33U^&MRK7<7w9}àRx?ƇEAG/tWIy#Rt3ŷQnJ^z\.ljCu^בrΎZo'9%F>''J_S'=~=tx9?Bd9C\2T{sCd8G'z|P`H@ ?~ #lKS@'YyT݄Ҿ}e_ R|4:b[ъC(Kb/Ľ5}t#F;;zג`%t9Wr3Y)|ߦklCVUr_5joڭ]uAk<[ =n|BDX?Xf舆sŸ]t$P79DǝWg`i3ggu$U1/-MCRe\k8APhPࢅI@IDAT&G=Ꮡ%wwV>hlY ?b \U-H@jp\ESr@+  HǞy^ ӌ#0c(z`GB0><9tr0U.ӽҽRh_SR3N,/B:(rU6XrqƩeNmv#a74E. R%ĜЈF$)dg[\&@ g߁vO 0L쾗! |T]E~}Ф{x=zi_pQ\'CQnwb$7޵nyhT`'S8ٿ|t1qLSiXP?^;,!)n\M-{3٪xw3|?qhS2 DŜI_ɯn4gsI_ZgI΅2q3[,Jkrwb߻gOzy>r`3 kԬѸA>V?k__&23(yB'q<#̂`GX ٷ@$vq4:*W'&{Ыꫫ@( [@SUt 0yG59x6ClYA 4ݔx k.v}̙ՙo︹/YY1s? \k8/|!d{{oF<~?9(/ pg [/陬?,hq~@x!ʑ#k{N|@Uȓj,,ւGpX0U;j*t[oN77WGa >;E?f9`!"XaFJG[@]K{gsy9y7,=)Hܗ Ն]wW-B6Kɉ5.x߹z<*(yRRw,S%y\!;xm]+EVnn"f@R@}P٬o Ta [Q,ws@ӄN(n@<~:oefjlda0];=B=&Hom]1rZ7 G$7$O9VShʿWf:R/gr6?HU~`*N:4ywR)y,%~vCbCӼ_$9@0 ?CoH>d@N?Ut/ 생/pTۂL9V`>NԏP?AItKPb QRW<b`/ "9`!$S=\$Ѓ9F0~ `6,S '{6j&_ȖĘsJ)qI΍}☬rzY9Q ܷ7ٚ|!,e FOb)߅;(ވdž,ƙ>;U ?}S{ٙ?;xu}4`náRΕ wm"-_`\?GxN'Z;c=,Ld;ҽ:LP<=\_12~?)oss o;GӋ"  e zPJIw"V?C`õM>*r/:Rr;AڻuMdWhG YGf L ĿZgeM@:G4 K)vvrr]?ߋDPK|p]ve@#D83[gwhh5 lc1pi:ζ?#YݸgtiON.T  he{6`tYPG໏Ȱdгi/yQWtॏyShx.bCThґ2@v`-#ZԡEuO,v5AX[q^! -'cz-#ǚXQ{TO\.P.P+crߕROk- +zcJgKAhWOWהf56i| 6=u@=Y78<DdQM~h)*Ȑ1smֆ,}{@}ïsq.1! {N m#ec!ЅhCO zB&kݨ?aջG~'&. ;/ ]jÝ<(`(W@W]U 22xXdyYYc]W2;.c—}}2RS6,Q_y%4|ŹFfm{E#R&H,'i|Ι%ӋR."S=tcacMJdf\C/O\I5:%9cWfN89FeO۱I ?|Vt)ie;d9ߧް -ɬ_zμuwGفYs#FTS+jWYGkըu|܍l^HG䍒'ݐGj':/.[Bl0u_*q_^G;|\ cwg |Gӥ^|P>rcշO(lo󷉟Efΐ>!Cg$7Nбa䯦ׂ;7s|sJܻ\BT5ş7KP h~u~2 !xAxrмIŇS68{;[p^GwK'^Gn -ilSAn  t׏ c A6M}K' /@G O"Omڦ7M'p}@ qPxP{x֘ 7ҼN#6z3P yt*σoo=t:cCtsЌp΀~g^NGu9qߜ@~3׃,?S<U=uIU{,JJbowhjat"o)6e+h׷vfr%S's=B+YG9?;yS=*x .U5.C=cX3K -~c/xgyX7kn8Gف#9$;xcr!tLK_|Dϒk/~ &r|Оb/)w(w 3^\fN0 ꖑ%,ڝ2wF}"-%RR(dԔRd7d̑B]AS3ǹ8q=L*1~(h ۣVEHɛ,ǂwӑd̬8гݖf>l 2TD9>w|ދU2ߙXнYxla/quj׭xSwsFlwXOSQAr6 $Pεr+Wx.:p<V L L(Wclv t!W'$}E]jar+l<5KJ&;:&/G W/LŅ;֖@ TtyYBfA栳vafs cMbt8M^\?Wi~n'iM17`AvV`b3^W9tQ0H| r\ AQllyH NZ.P={ Y۽,[ST,#k;g:/>KE{9*Rz&|gT}uꠈJ/ :[^5gcZJ><_mtM9S=`^F+LOb<,' BW6'])p%&Z}Q2KǓr3*%]ۈ7_ dhwg\kg6 vh#N`O[ +Yqs$@#;ۣm{D1h7֓ekJ4 \[co/1Cl~Ǻ۹v::qq[C/o9TK6^톫14߄BC;y£9^ NAu jmp}@?l iytjbj)@\Nxy0:2=VwДc㼦h'o | ВܻH/v9*ḭwvaV0~[i6D "hKe]mZ̐<)ocOn^ k 'ݜU9Zzr2@z1퀍-GѴur@^7uzjلB/VU޷>}ojow3>}{IS:!.x/k]KcDG4{C 识 88X NZS}]5W&lXxdKM/wӣn$8 +wxJG3l$ ,~e* # 0ԾW:Ve{_$^}HxY6ȩ|"-EV!ytwջJ!{9G8YV&xNP׆;k4-? Uz`; |`߈x֦3K6㾾_q!3C`>QuPk+~Rm6#gfzHw*/_t/.zq'P;cmLo30`( uQsP.o3jNhSYeyGrzxXjW`| mN*HԂDyC0@ sCωr-3[|.7Y ~d_J X+X"]LCr}y(M?v_JԃG(&/:!|Xy4*,t&B5T G0%l)|HA~ MO/χ6sLKMhuO'XXpDvtWיf,Vŗ)䍥OJ:sZϹ5 _,nZH-w{crÂ.F (<rvTG>| ( >/'+7J|B_v*zN[.?{ w}r|I> T'ǣ85C96u}@ hU$BflaGg`?/F𧽤%B_%o G.ƛ]T2u%PQՎ+3r2OWƼͻ#yT =KgAw?K2Mi)P]/G#_)2N] w (ۅӫz_ퟖ^iW_OzR;@;<99ȩR2g^ZA?,&9'1>4|@h&`ە5 }Sоg23I/)p}D-4moH?W}Oy]`v>5?G&W~J&:b~xr1157B^o**`@zpŻJ`60^#| 7Hq~Bh'zzQN3x}0pm ,?*oK趀ٿ,t6ݒ-حy/ ɰyBUlj+t~n Cq;\Pp̡h3~K|K:fQ.!~~đ$ߧNr@{K'?x'Nhs++"lBG@ B~NcpgyΊ-;vɢ 1ެo⏅Rj%lX %ݷhl`D ܗ{hvkh84hEՍ`߱ڌ#}rvz{Q?yYf̆2tZ_FxSaʟGGnv5X~\&POf a/߸k+!Dfޭ~%%%@UR:z+`0 \ ﲮY*h:3 ?Fq5: ]OP?n/j%pT>m/fNf:1qΗrU#͛Y5^`wèa:͟oA Rc:hg";ǽnU鯒N$WA`f M= 4L2;Ny<*v^5ZG o/L# 'NP=' d }Gr|ݷˤ{={bkY]qnwV\iė@J{[gi1p'H(azE :FM&Uʣ@y<*FLre*a7R>[8C0Su'p%{tjp⥓9PsSH7۠a 3J17M/@1C,Xr -51 f>iйC[{;פ7џ̩dYD}0FgWH&d԰U!'O$_NtLhD|!?Urs1-ȲqJ[6v))SS/ R92)_e^TfY$E~bji˨^vQUfnxſ?b)f`j5=yɐّ.ԣK=SkBoP8Z$5 ^ʾS0@pBHGDݱSO=2S Nߺ+Jl [J࿬dv*n"ѮfwdoT(y|W_bƆk'=)̇ jZ)R7G ?~c~hEg/},`?_TI뚬ytYXڥP oVW{ޥL[^`,oi2ĊkWgօWMrEa=矆MS4 h6@ @y 5may@=Ǻ;ZʫBJ5j@:}Bv\/zeN(\NߙW;ȳLϗK6O>T 񦰃FN݃U>-h|H@' 7>[`_(l[i6OQ/HnL+y⢴Zc&|G)G]32jJȌåpT2fx1z;4X.bu2MΥ巳*u8xgO5OUaK5fhwkМxm[E+{aZ>áG.a$٠mq{Q ʋQ5; +x7 L:,'0}l.@z[O Ы# ce;G`mOGֽ\%묤`~fq$hY+,p2]u ]9Ш ,E[sQ,VARSɒ vxY=s-o vUg;E{89k[~_ha"̂q?4A.vV@~?7POB77NTjwHVt:1={OH.K<7e\-{,gDwA/g s* WDd$ulgwyh'ۧ%:L O M.Sr$(M &o+[oc&+9L;M\wW: k:a[o9U/+oh, 4ϋz=F& /А/⼟V{'V?n ߈-tsy0xWby})~! o64sY ݟ]xۻNOYvIIjst(ɇ#כoކ^MgɽT}J;UeBYc͝;Hy\v$ ɗpHaO8 Ӎ'ϟ[o,<%e;:}'*%os&LC6L޳W uf-SEmLF}9}MbqCaSp.idI{q.xb j_ r;^~S30:GqƫmT^Ar -%_lvߘ^!z,~r+|c$\ÝWbp=;x@nt>CK%7.{ǜ9u[OSv(<=铲`s&nD<8׉N'#{ Ms;rQV#F(굪DmNlU3YOjPGew%ڹsj+Eӱz a/l Xyoxw{p'L:ǽ's@}H1z$^h՞jƧOĽƭƳ]OT.M3ۜeI_uNY zzrb?` Feޔw} =ZsQ34{e$B&sy n?dq%j/\dVsQl}w%'k8\w] a P o꽮?3L‰藧 j BxTpPs:d#O.TUs<lS|/ܴƔ 9iÇOE3m|Oiud`g`&G cC`C@"Ǖ< #)ɱMv įF{?%FR_$O}_ۻLhٚx cƗK ~I`|OVB_5E \7(/Ѡ3/)B6E@IDATչ(ԟ>vu'r4Gﻛ+сZ /4E-UVf] z 5[Y,?%hwv~;hOBG} 7 {~o~ 7 :1fMri \OxxӘ;iKzZh]"rjtw`VY{f9c &EEW]FtuYTs `đaM_O(* K}N:u0ާ~'~Cw]|z@z,|o,ܚXnЯ(tmmг؝[cXq%~5ZIAaMЗ De N;b}=qs(t >%_fhN0A#iF7o dEK>i*rʰpwF 乭#9Q#~hٲYe׃j?D P\  g/8|}\9Gdu&Y ;伋)O+2Àqz<V~h X:nD3-)<&0>ЯӳR܅)f;,j!!9J{ٿ=̧g"T _ |Z K~*\' O#0`%W뒨_(I-j=!Y6 9.;5Uƞ5"bx1엟Byj*R2w#K#H?؎Ӽ4EUOO.̃&@ ׋_ k<<'{M 98DtŜتa1֧tO]8(=)h~GyCA|0(276WjGjw$9|q`gփj`(t4fG \& v_B/Ɏ ˝KD ̘4rYJb2+<`I3&Bxlor4Gnf0 s; W%pV ߲nބ&gs0 XBmSu7KB ߭^kgՁdh@XoX9Lwx3$IIk?σW\?|'2{+hoDgC}G\.y %q*:rjt/Ըx{`1FĭM .= "8mI5 Wf/O˹&sfk'2Gw ?Z@zS@o"yګ?!"#)t)HBbX&t/]3 #ouqL0d6̓<s}25,oz઩ld4XuK&.6?{so'b0wы˘/߹<jV:db~+~Ry MA߻.r,"oC;h}(΁6s^&!@ puq=&1@VP9S9hb*Tœ'QS&e氹6L;3qML״B`9wWm, {UX_uvzoxuwW2G}tTLwzr^lKQ2r.,mDzsYor23*Ro%RBi5bO>g^IvfV[B ww>M^N^<^yG,ł9\^ ~Ӹ^_7vB|P()S;z"[?]^QA OpI}1{f޶=~jjH'qs剈ݏi͇C?J~[^羄S˫.eeqh0üBX{)@|P?>ߵ}z=|F~\:{G, {|W93USm_ӡѠ5py?J}@x^(V3y嵅@yy@>ږlzvD3<_y-B+:O-^%s 5~&YEyGuhL'i{N@=BG T.M>Nif 7xs% _Q|d^e}ue}W*1k |g_`M-7כFE9W逫Ql^HmH`97z0N["G&T9m< ⹎ AR"ݙH&c_L͇F٩-IOqFx0 "KXbbs@yd τn dN%V󷤀@@ qAQTB؎apsmlXN0ց3/߁pA2 #H]ml8YY/=;͉׏f (*W 6$@,0 ~qf\G7=[R: xȫH?}{(OwNv_LL 5X"cPުYrڙ#jfOhG;jw'Sv\*( f`6L:@('WrW! /c@f_ӿh\g1S)І􊣡.KZܐe&fܜy hoGl]>>,`C? \g 6 '.o4j[|DC'zH. tʑ/f&>").2#1{Z{~~ZGh gh|c$"GFȉ~"'˂^qފSe',|0Y}N9k#~Gzww]%Ua}B7NLبȝLp^ݮ񞅌hR\_*XGi/f?oUL^+_S$7V|zNGDݘ(~:o~_ cl$CH_Blʩ[3N%#3v؝Z\)'tYpdMЦ<K-7׵z$R0$՗z||Dže.wӌ%K+,lK5_0ЯΝ_NVQp$T?!l1ܐFN8ޙ1͵+\LvT#E/)?A`"ٷCs9 ˸hI>Tyu |{+΢EJM7%%`ڑiW%n+RZ) 6hM{LO':r uLh8yW>+u}:'q?P{.7e=} ^L¯V( &$-,V6]]@]P7?gy˜=^9 EҨ쇳_ /Gay zEՈ58_)CWMn_" P)SKυ5_ ߉l&S\}9kD>)#~8R 6$0vP!P.$drhk͖5t1X kRĽTetD*Ӑ-ko{ךǠZ\5) G ;i{wQꞪ)=7U\SAU73*43( w@9,lMoW׋EyRw Ζ!WNJP:$qy9^DA;Ogs0@L?3cf\!ϛ#? V(#H C\|@p_#pm)C1>T ŀ-@whCrA! }&MZ RѸUmfafG;ө5cqg09ΰL?1,]-P@?~Q>+7Xhi[W^ak݇d=TOȹ c:4XՑPIKjnf;^ z;zLൗ #7D@rT[@b]3mtgc4k40'XL_:]чu%@z$Рz#{>lU|x Gl2#~uT˭M8oMt Ƅi5{sюu}]?yb,OqrE ( Fq~+_*P~H7vL,Jg>dL{[C {;V[IS>[=.EXX lk&ۅgzm3l3iTxBwO71 w; ӿ xIyҨk =7G>\șҌ: #[L %8^< +8vvzGȇ%$z1c¹>02'tґSSVo,;%+ݶ3w%",\74tCsnd@u(/.rg~awrfu_~j;`G+^Qp ci_K>܋%e3as4H,@ӈ0}x|ym1+|)FxcJzyYx/<˥+KΉ.Az[ۣ,٬el<$ee㬶?2s쥣v(m-vϗ"ޚ-be P{?ųp`튉L-wŸħ/QICt-J kuTFas lB Ԩ_jZ% ՝z~\iL 7o#i-Y㜎6)xf˟C3/JGoNJR7DA2WW*XU>>}ɋL]OjY5%ϟ\}=_@+9S|gu+Us?yf/ʂ?9o9$y0o=vx0 C/=\ L |?Zf <@O?̑K,P~D~f pB@a6._*9Pe?E 0\%Psm)XnZfЮ9<y;{1>,JWq5)"WG;fm8|{lI=M> '燰hx!j#8Kiy lzbbYhA|z9~$<ɰz ?n_@ϔ!@\& 6 u@xڎ,8 -jrl-G T;9I)OrmP7]cd@V>yVZ{/bߐt̎> Y.A٣ܿ|d7Fd`L(hEr v{j\Ei])G'^ /(}zu{eOiO6/!r3fg-yneJ:?FO(ƨ@ \N:|̃- P,m#KA()oo;6$<32R/@nq=~ݡ1qfc*ϲ>Qv-y^̐'>qmwHvtN_> V>h!|A;/u{;c * _5|,X%"g4_TI<2 iϱ df(p TO;Dvwc4Ot, P^MTZTuuV1;^.ѵlD@7(}BN#p@zf]g^z]⯺k ƲLÅRH g^?bLp_4yן(Es.W?s 2ґ%v_MI:FP脤 膆؞˜6&/2I_?4?Z?\xxRR\_J6BWY@ "pB@ b@xO8Pr-՞G8x5Tq:Cb ' GFrbbLT؟{y0=r-~ug 7wv;@ax18wJ?;EN}/.I\+^IK% ][l7f4 ٸΚ.P@y@9TNY.о[(= S:c]ES>b?f?͖`)hg|@GY2S+ `؟룦ږ_b%%j X)rϿ37A>,t /UwxwAm2oB.*)ڑl/Z؍-Q_UP-Pš뇰ʌkfw |}\l#Mζ_t{nN_Eg7{wo53P3w&5;=R 9 \.!&T6lƥ~:9S`Q/hvF|'Nf-g޵LE%WΚx&{]M͆M)Txz N}c*+(ܚ?ﲖD?0N<&GrpW:s㈢"O:|⽔gsgM8}4;B99' C>Cc;??q|J ܊zucQ1XV 5J=ےe ʧʲsːʼn&̟>qXW qՊ$_M%C̲WJֈWTYj*}e]]5wUSwW_y"`kaۅx)B=4"1qI2ZsE2,ifsI E] kQ Lt]AgN+IUL=T/5ۻtrbT2W+U!wݗ:ITEW^ si^(: iW\i oP8- 2C,1X`/|+:LtMq^rrI<I .}[ڲ؅Vr4tMe^ŧ^tT~[rYIWI'W< [7o&mrj z~33l@ggvU8(9M-0?"n(WgP<~*O/S <@ȟ9| |l Fivd,/QԘ\u- *@9l%&|U _eɗ1`_#;3mL<"F{6G%"P? Y*\;6qY91$(:G]S3*w6كrKkoKc=3 aj ~}z6GEj߬]^F˸6TQ+O[4Z5Txfp_L`T"Ty:#G@,/7& /;: n 3oy[w161sW>@1r?M؄baYkkboyv!ս`tEb ]6lҡ1Bߎc[ mKBh u×o<}Y߱{dM-KNȃ'cҝ__FWT^4HwyI,m|㡫7ºvZp"[MOh oY|7v k皝ʳ: џJoͼ:ݴC[_1ng!Ȋ@LXji /?C x@ *mnf=sz?]'i}i&UM 0U{nbX/x;bx@KQFݛ+@_s:Xr)?m {1)Zϛ¸%QۡGO%}xІ!4F8cL0~o)쥡s@! ?J9B0ӮifpF|؊RDb(|{z2C{"Gfm=<0jzsBK @2ݼ=Djj&^4 %}:o][g (8: l:\"t@y-ovu=i6\hgyHoO?jZ6 zZJk;-6K^booM{{~y3S qn`)(`'D|&l .[۝BxX uK-7qW{/(vL/{I~0gÉi ~Yg{c0'.z+Eiݿ;-r:{=ҚL Pu^^50+ DPh k@:wjJ53A < p,{ k}G u/Mqɾw9)9&hN36$N28aAv`z Bu+'%tVϮT~E|l/*TUc+wKqtƀ˿+T4y9E[E qAd,IN)[|rոbY{cee'`\_s=R-wov `uRj4>f5<};5ޞߗtg 46?EŤNnb-3euI~"7z>[W ~w7?\y35/tkK7n}4\~`⻒'B3~*q<&bn$,(Uvϲt VV;jr7Mڮ"-x{ԋ=)ɍҮZdl-HΊkϦܗFޕkN9LΡZ%mCx?uQ3QB-1@ >CRvڨTf"* %5QZA L4ĐGzYJԻځS9Q2PIGoꌚ>A;;&1z4 y?`IrC?ȃo#c='cGv YJ^\g"W~(}MeT|a\*_grk ~+觷,-9so^UWz#)vnCV{c.4f}5)q{woO]9vR. + i#3;h`)'SF!]VMJM g`Rdݹ~n>GF.JcV|zXȅݖĵRiφ77]1 (!s օTe+lzaM87G(Dc?|Z8<{૛jڅ-Д-1iuU*o]"^Kf}GA \G o ]R1~7 Lxk ͑~fChS 0ఽCNAbA9ܽ5ٻ3\uWත.do8f9H0> W^-h. .t# >| vBIw _@XDHMGkY׎~be|XNUd 7}J-OK/$_Qg؜>QهGПtr;ť]Pu'ɮ++41݆Nqj'O[.7{CHc\,ϧ /2 pc^kӿ6qD&~\i{o{לӯ"%eD^\>%F0FoW ?٥G+,ȃK.g>hV C77y#Vg\ԴL#L9>raFFgj2צ|1~zQ7,?*;Ro^8`Y_\&`_\%zAL{cO?+ź Ft T4uT$0ѳ}8;qv@ P^0YKs-OL˵3}yTЊP,OH2y{Q8b|[EáٽPG቗VCFm{c7ـtddhO;p]~v)߹7dJF=fo~5uORkjSv.Wv(@ߔ%brv?/K "oEEk|&|88I~c7{qECw+mi_>M\τW󆓲)=bz7ZVCaи<'M:1)h2_sťʑ3Xp@!> 'I/}4/ ?M;{dHf=h=t1sJ;gvBW=|ߒzjR._ y/8;yF`iaw{']!?~Qτ)TY [9HW/OC#~U:x(h7~`ZDTa[k~nc m;.mo=on7W}2ttڇϥU;&y=3Riv.;+KmGeuRWVCJO땝cxH_A;Y|?Ѓ4#2ey`=~/rp藑"}A|7[G\(w w@, @>f746;:N1N'@: &#U\N}3/8 |1ﲵ#޼Uxx,P^/ 4%#~P.i7>hV?u+;{]r/9V>hAʣ5}%;<+2*:9Z?>, g\%Zel[bь0Fp91C#be .d=SY}*sGg.imx'GO0.G2qDvoD`˃Z7j:]Oa<D i?I/݂<o1_cѺ {$b\˭z_9QR|iiT9tآL;n99̨XSsA|.c:L93ܷQ͐Nmpk8̲}<; uH,z{q&+%ƃR~0֋ 'io[ l0~RٻBfy?;V9"ǜqb?K7N81fGg؏kpfFxoY_p?ZzOH!πwB|ײge ey@7~gۜhz{%t٧^QN}Ie@;COS.N{C<tc1jk g>Q]͛3/h' ЩovWNvw_%_)t (7]IH9@IDATQ4܅ -gT`B ?x3~Y]%D;e _cQ5F;h5V ,ck)7nI[ 3~s.۠qV-kೠMڹ1d1 l@{НڟN})k?ݻx~#z)w 2Eaj& ÿhHYU 5K;%ZmHC襑o<|GQ`{:~~۾ Nv1tb1m<\Vldт_o3Lqy>o:L3ܬ- ?*"62zr}^+,d8Sْ9;dKclU39E#˜^#Hwjzݠm .ཹ潞yed ȃ7:,]h9fs >#v׸HC?/E. ::SnTݚp ot^5d15@]͔q Fy /jQ^.ZwwKW.Kg|#!>q g8cVɀ4vkyvS28|GâԃAj'~/\#oy%4:Oh'Ku o pYx=jsy(e]"]vnC_7H;ߡIMadRd!n@9v|'uCwߡ6`h Ps_/FAO CmLhܪ4[@9vjo1 9lGKͦ(ڔb: }%%nܽHurZ(QpY],ku\A[,?~=ӛ,3hևrf@;09_x &Έ˃׊nqLe/KW {JrO6ep銲@{'ha!Ykg4L'{WA'ZSALIfANy7?qJCbrom0O#0Z`,0mV& l'0%еZEsjs_*]!_% }# ( h Pшxz)rSio'+G2&Ҍxll@GKB0|f2Fzc7NgR~hj,{tU/ُ$71K_rHOI4-%oyG;ۈ;Q{߻-WߥǩM0pGI".,I==D1[@zDFO|v9ܰ2g#i _~#@( ${+a%AzIPyGWAb , @Q_9Gf?aZܜJ}-ȄDfjjʻ\{~![y?M8Z-T\&q: )<˼)r@o!;oDfo^B̏1ۺ F~IfÜhg}-[}#(gdߙ\g3uͼ+*`.c ?)@w~]* ] |^0xcؘOݞjtv|v>EL:[p"'朌y; ;3VDp!?S7>.7?k}F λJZ_Tp게TOgfϿQ._;#>Ymk!'#bTqd7?L^ր^qtR٩mjXj.S埸Kr=3AG;ٶاBOu}FԀvwh}pOG{Bً,{?`kc ƫ[*) S#%9k5PNjO/-7Sy9[`QOGj]gd߲9Zgz?];P ]c h+gI@ ůsKeT }>j%ڹkOi%ד.,L~.>̲y?cm8GJ§%:ˤ32wu[%S %%8ʺ3}!/c@_+F (D2Īn@7qxRpg9cCԳe-@ x V3/3 [|@>͆}@~rmqo<aGAX7lϟ |_(FE0tu q>S_r :)5 I {g9U WJ4'ܚ_=)GH H!Dx3Sa{,)- Z*zfe@}۟4 fnˏ ߕn0@(0,A@z;;*58\5풟T~Bh~{{{ȓYtA]()xh+>Ts^P^zOqKQy[E>?AGjDz#o'ڕO$ꍩbW2n䣨p|BTyA`޴F`ܾZ`<" P: $(w vvWxvt>e0{2MjE[Vpl̐нuB0; ]_'Qo<9 ?| δ˼LMO%T-go8 vջo{K9:oioiwv{dxD( /`/ g"lkOb `ͫ+OAI)w87+ӜZAP`+C+6%}k-PY~7?tO:J䙁3W1 Ly<b~WX޸IpAeSz4f4͹)2,v"w88%7n:B @3{K_*`; w]XW ,N8``Y7?=Hf]_Y?uFpN'` "pUнqYVWc8D1ԕGc4D,zqMjᮌ0\^~t'lՄX[Ja8AW׎9hH{*Te厁֍ZG4S Zc<%adi#((,{@V@q@c9|]g˫b&"Weأ3vB) ܑ'p[bІ!0XEQ6ɔ2=sI/#:ɵ݋xXJ~r[gv٣ V</κ9V;ҳJ?D3Q1sHM(${.#r\{$+ύt O8OB\F;m_]}>y1M:Ҫ7W`xl*q ~f)~/l{'ǥO3N,2W[/cO顪ykJ`%Y['c̎VUoz+ߖ~W}~bMuust><9Yy\p^$rtg6˹9ksw:]Yx*jOuFS 30@N2XbY@S<54?'cu}#S2ԡZ}PujRUJUr3; ZBurQB ~][9G̻WT8ENr}:ho(E-wQ!zUA R ULmP-*<\xq=M[oȮ~gP*ʓBӵA:뮠$/jxفq'><&ù~j?+i]Brw[z R|Hj.Zǒtu y J~V}JR hGڥ;oۭ蒞{ܿbiQQxw6 =(8ʃ ֓V, ;4%I8<8Rj[Uorh~S΂[ (W?'PCywVI۟pMpA@AQ5a"b` ń LDAPrN9|JwuwoI== ~ +o!. '.y*-q f+<̕JX2b袬8;V \ڥ(q>HgWT)q٩GfV%?&ѮS/L"YiᾒA.FyA)φy 5qCm?A{$c 2hJgXɯ:DӒ~9dJ:<*נzv=@@;R`x1ܟ'K [%xϿ\2l}s|I ?"rzd]MEQ;$ѕhG(gAMw'@@9Sz/ȇ?zKO`wz@<b:B a7z7gp|M9wrk=_-F  (_*f>8e~\-yEU8N:gC_k?qs{VԻ͵C`B.uwQ)2V@3zOv)%wKl>s$kwg(nT'xYSDs8y'7@7_9s050x͵VQ_9%GtGB ;ns+[b-p=Ҟt-x/9lޙ|t@3zW@&(E1z9g*̽( M~c@1?d(s?ZCx]_~+}Кۣ-FkW~@~sjru>9uA }_,f 6|0y s 6-LM.݌ܒY~'N*~p /GNGU+LfU0TYI ^i@&*Æݱ;q2f^<3X+5VF/@B M\GE~@1W)4L c1\LN՗]zǐB߆e^xzƣ}h6_ºW*K'_EʛŸc(l ={>{y^uϊC̻9z·dʩ0P/(9ؾf:}V-QF-laQhQuB#6[42+ZU%!OU d0)ӱ{[ݮ]Ϥ!|CVFWf_qSӫOa'ZK +2W{2Ji`&c+MS؆g"!m!GiP5`Թ|zś`ZNBR_PuW*qd迊lMw VE\j*pQ#7+ F`2 o9@B54X96Op;a %WuSsq\җ~A矕<6-&+N3g! 5"=Jxe'' wKrdhsy<S9}frI<2=39~41ۛo\j\̮dħ .w+7`~n%tZ.#W #?&}h<&PQ|c;C`R ,P'@ [5aW,W;k[nŻ٘v>Ἔ9!y"ar{Ta9Ɖf.S/CQG-Cx1Тf-Q;w}Jz~ \}&8?s-4VL2U?-|?RU{WA~ȽǙq?prXLW 53G }!Pk?!(`<,B=|% }lY'POυ|@SQ๡> Z@߈j~㰷}5gd=Op)w\~WsQE"49zg聩LՄA<[߰{~ɓQ?1fA|E)'o8ZM91h "=yv̅;S?gώDW?_ F/s4&$y*47}Dͣ_%.g0,{F )LfnHe ;gY`@`ܒ.n0>oFsO~6V\O;i!$c|=˨/M\?e+NcQK>h#=m gXls%xUc^{F?ߪl˸ugoGĩglIy;}6C~i(Yg3m"?%|, cw5}E;6 8 G cٓ*CyKb5%lPohIWc@0iH61[̧gCBWB0x<\kKFgmMFT3H 5Ɓ<wt9#]?9w$o.s Rd#iv˩ ^oz[aK;X%`$o /";]_Lu8ȷXQp z-p[oT?U_TJ/.r!-XI֙1ƙ?i+@1t&5q[.U@-/P`ExwibU7v1?6cQ^\gcx|E,S&'(0$@SԷ6Hז]q]Qv? .a+q[qT!{Wlܧ=#_; `[AgwHoJ~$lq,l;?DZ8m#s@uZgg އ.S f SV֭v[w6~xw'L Ť?dĀ|+oZŁj\o9. E#ӯ֌.-+/1G¶{υ?=b7Ş%S5Wė͸ħg.ڦiGޛދΧ!AqoC /(nVe1WlVU9r_H>o~`cb=-;di G#i]lwԏ܃8*xxE zayvAKy]Ñ ?γc,u#xo0ý|*XsQ] ;9aɰB*WD3uM჉ cy҃ˏ' ?k_C>w,KtoF)+a-%zw6||O[Чҟr.u8:$ׁPYs?pk=oKH~[E\9,}X"s&T3_)JSbtmJ?v'Ro3Y/8ÚAXa9߷]<x4w-]v"Wȷ{+zJf˪kg xkp9#ioVf>MmSVG2f`Qr?3`~ٗ (V'yr{Bp_U9=g16C|5 ._}(BJ9Np酤 A+(nіx7bM}} F|/VhBƼ'ޒA /*P~eS+?^ͺk=1 D"~'S<3xzCmɃ[|&d2ФPS21L7Owϣ]͋]&ûGI]poKߕa^+eҍky҆o/7 gW'{`&O]Q3]R߻CHfkdo A} ٖ GAF7 ^*K!'wwl֚24]5 Kr[ vOE?}}}lh׷ ߇&&hSO> ԓ1\*FnIN(+Pg//{Ca^b/—!^kz55H[MLy@<& 6 ge*%_v(={TΜg]`f 4ZWu' |? y$91d5}|˾ 'O g9QjEk<_-0#|]Ы\ar&^43SBs{][&G- _|A>#-W'xbYqNRp'nD}c8fyS+u]bdI΁HT]eC}$A &zh?@/ 7 !9C`O_@9g0bȗy@r' + .Gs'>\C$Y';d AXo >Nvj7'(9t>zS㣳"f~Az]-ᶌƃo 8qw|<1{=oٙkGdNLGRP٩73W=ybC{p!1HSr鷊ZtGKυ3@}zxީ?b{U2c|yq8߿ CJQV7 .VW[-<H.~b"hSYdBUKh{<%CёuNqz᜔-Lh K] ;e(/@XzEԉrۛ,m)#pJ·_-cCS@zgs,~x=~/caΧ?nK}` ^؛i߽yKp wۋ$ =אXO4As@9=qй{#o'kd(AQ{K "iž+&)xXI$x-E :zMaf`0&{Js{mIzj"j⹊f֥a4hC Ad0X5I^^4>Ju9QQ s <X涉j~fp-X⿎=q`oEރA:^ߕ:86wٛk }Mޗ73=]1Oy- &tX20A)}N9 Rp $'/0/8[+o ܗ[^ o9/S`9ߊe'g;;MD}c=+.U:.]1l.Z'4tLxy5RFk\('Ztk30ul{@=ypp@/BaQFL,58f6&C/ 1ۼ89[|h4 MrΘ}>dP_Я@Zjf{i[2T>o@r9Uox@+Ĩ5~ c ?w$a֠>RpE `(f^)VߢhL<rM"\ȾCAyOJ\=KjYwd凨lT`%/]T2\󿲮vo\LOwO{͠i'̇}_!rC̒O ErWޞӋ󽳗vGi v -uurQ>c-3(d+HSy^+_ZN [W;|mKPawiweʖ+%I|8t/s#D󾺃eի*e>**~|sE r~t$wf-Wv;ػ}]Nn3_eCwj/2:w\y9\n⽅fޕPߐtt*\YC {qӘјM u1sf Lj͜aWսV :Mt2SiWٙ} vAJNqʋ[^5{"A _>8 . >P:\=Ա 4JS|WBesUq_|՜% Do$y:Q|[6ǜr)&W3'h`FXuMՆE+ݨ3 ?{N/"?sU 䜧=C/5 Z y9}]HkS?Ͳs.sTl\}&),W塍3p݀ dbf-ύR2R[PP[r.ϷY-ΗΗGԬ,Z) ȯ tB9:?]Y0ׅ7gنF2$O, DZ\[M\8Y-MHk ;43[k/ПP@7 -rA`OaטqIE$_AXB|'ssa_&&os?#ד퓬o~ =G~~/,>8}77X#Wa4p g 3řB:Z{6U.JZA9}j20zD!_j>gYGN߻iar(zU]o!V!JSgANH[O L98p@IDATE-W4rd;C _aPG 5KaeN(!!~tuµ`s=7^.xva;Piⱹ#e&2SP&F@n/v9'M Pni*,/Z?/$s諾h'$/܊<7g e3xwY9$fS?xXZܙK}JdwN/8TzDc&KBtGC0NιG=z5U0>C|Mز ~/B cZO02 J>H QAXJ`}وlomֵϢ|Ǻ'Bao3U'or UM{f,x#+7sOqԋ3lXsM@˦_\yBi^$ "X+|a_eFi?Y -ܟlx҆\v9[~:փ/_XyϱV=lˏexA^DSI~/S.4L}/Rz3smǪCx}}bC1)>Z:PW05=VtGzE6h8>G-5FZcX|{(ؖu;--{@Se5DF`@=wS U;{Sy PCUb\C gAӇ Y1`aAvSÉZ-B5@`-E"b4y7\Dn,k͕xW+üFT 0e.w>G \h@=[㎢ci.ҡ\>_2bHٵf-/5V%?`(>QVɚ>+M`@QYx@Cϭp w@(gj$1N @_pk1ǻlZ:N-@902\ =B9B+z*La9I.NՎMcɯoy~|iI=ctލ<(j]h2(Gz<'POÅ?~@.@k <󁫴maMR&A~Nm6.Er1;`/ fEg~lSƳfOk5/A_ Ow_:Dx'θ~E @0`.{|&4X *I!nuf;վ 8NNg50-/(eLWE7ܑJ½x7{01׼ Z UDmxܩ#3?zt7Ho;P8t52N%OPҨ(_|_'U'H k!q ~&khrGm9G #05p}C3K΃ڍez.!ݽ.u9 s&e얐.Zh%Hf:hy=tcfZ (-bٱ}w6:1:!ғjjѿԟ^~3OW2X5"˽)<+{oX9w5feN}Daz5aśޗC3џ, FaHpB/y1pWi fӪnbt_be%pa52a5ݤ<|nbyEMl dK9z!84\5aC„P[ηg]&rIY<署9WW4gZ//?}⹱"ʳE".wǗnljÕ,<1rίMvNq3^co}D yyD۬ 2VPNiΗɤhW&j~/5=1MLRv]L#h>=O|)owZЦvF~} -<*[#4Ϣ5}YKmѼXWrA͕v?Wj2_$,^r`XV^ .B0* 4BG~NȪWQx$Z8a|_3/D_*9N$9o$%aLPw~9qbzCoܶ!j2$Cs3y0Vx٤qXi.C4̾f Nbo5C2[jB֜0|f'IȬJM~_{_2OxQ/bE.?m;8{&sPNgnCViN8;L/6.8||<#@z_N:vYmEdsN;g'[iSowb#g ƒM ܦR>}g3ivRLP˰c<#:J=oAEe/ϡr+O}/;ws{{ 33Է²~euϯn6|s^{Q .:ToHP~~o``hKW//(PV~7v,HzlޛF|it҅sded%(""YBoPPSf{A < @z/$/cr %3>$_\ʕ b|m"[T@X`AY@*>ƷnMrA*Y0}lt9IO8݌.Fׅ>@9`Ckm+nnKj 6MFy@gW_L'SO DZ(kfCH? +o<6OxF8|Ƚ7PnZy8V~LWv]Ү[.o6QqVԀ*^;Er:p>X@"HN8>]]< Ds pg|kyI z@97 j@s)5qU *~p*sQڱ90hdے;O 3_&p0ij4N}_K$jFTۭ6M,Aft`һLs| k?\hw,<蛂 ׀_j:z7-Vsz-S@uOqR~J_̡6$vzM5ʸnHzEUJ@ 3Q@_@9p K4n`^mS;37Fw b 낭\v(߸Y|37^ bć<|]Ckd -w mu΂~;όoN/*>3cy5FoO̪+S#SÊWDG2+HYd]dh?sÐ;c =/sQ1`*!5(7\ .kF yuzSn)-l<[y+cRph>(# VE(8fs Jb?S/К yw`nP(k–So-\R:9rK89:aXC!pݵ3L/WF#+u ΅3aYj^lKĕ vM?w(,hiZq=!O g-p>!@pν}J`txD@p@٩K{um1ءDosڅqr-~JZ sM׼OC#h[هhe5{Aהm6ho &GZ@d aR"5XaXz>ϟ/N}%z&k߽ϩ~ܱ9 7=?~zz9]CT9ō@}__A|),wWߍ%p-UͿ)fʻL3-e,%_8"ߡ5`iT xx*8Mc̋-mUr!29#/Ӟ/&kP{8/T,h}~_yKJ3TkS4ڙ:u2S_=W9c25h)m׹襂O*x wT]¨]48:h*+IUrsOSq2Y_!T?%Isw>kOu>bm"EKՖ]@ouHE|{?ru'nyCQ !¿V)X\ҚˊIu !ߕUfg&:zJ[*+oBzb;A>&*-8ݒ\P+k N7hSs߽/W1|h3iOo 닉Q֓s A@WdmwfktNqO#k]|M șQV_.(U-ث6ʹ9~ rsE~,fRoXE^OP_e4+LGz3Io`EΉrG =8b|q޵ 6aܷq t=Es{ȣ K[2u7btAJ;rjҫ SG!yjL~TB"o]_/|K3 [[*ջڣ[g5Gsݍ(1Є;fM 8q/?Yh&F0UP7?&;uFm`id0 q^ø~)=MLKzڲ&=q_ٹѩzRP.¯R#ˇpf1S◞򒟹0ŧQ-#Җy\{f? F]_.ٗzSSϥ')#c`t⍴ǕW͊^ѽhGFΌ o{]ٮqKP Jvs LA cY ÜԿC52ꧮO]OSzբ늋W\B&BEx8⺊ha+rl`3AZwZwrkv=Y{ X H8EYq@-l| 7`~NnŃ}-  k L?.ϯϷ ԷQJe&˿+Uim7_72Rb+DTaxVԪh8QⱺYIЯ~AHrabg6fA zG[v 'ahzwSih018jt+C2 u.tڎ_c5tswQ6ǚm3+1$9 1vfe6Ԅ[V*(w6㆜g {>@~0mN(* -[^Ɵ4Ĝ{G ?7 W]*p3':?8>A>7(6(m[ls#!MG|Ϲ< 3z~bGC%Ww?qަ>~fTON{BJ9?6RؿD+ZX/RB1]wC`㗾_Q1-\ߓo}`G=$9"}c?]qW_gh&IJϧoJtZf`yb1Zߺ/⁈~nՓxM{_ D@>% jqGR@-u@x5_W9tw^?蟂sZ,P~ 0X' 8]1?y#8Co?'˾ ]wsq8)8^+_`[g{v@g]<.]ͤC[ǹ6~:}_6;R >8fFoy6Wg;W<3ӆ[r˾\g^S( ]!lĻͩ, 6ߝP`;[d[j`?7\oGpQ>,c!w6ʿ)P$+7f^;@~,@ 4XTW] v<Մ߲ёVZc= 4 aaX %! wxSաϻ3wz_seJrOwxzC3Rܻz[ww+6rj>Jvx/ Am9 3> c3T@'P9N_#+*ac=bß՜m诈X҃\:65?P䥈C;AĞtM_wJT`~zyi@.=mPeVNmuGb7t|H3M%-Z >E37؂ZupmosK}P!h .%2\G$h`$'ɝ“:(7{Q@.W/@ g'Nf=,h@N5 ZI{z@ȼ׻@CN%H9ȧGɸzj w֯_ 3ҳWOr"[Nvik/`#ÇYu{HhUkW(:ՠ3gr}'_S49 Ýşw5|vvf„®w)@{ m0,lV |]qȇF{y;"H n ls3goRsIiٱS >1Üɣ!_  ALP)]xdnʢ;3`+A?dhJ% x72oLJ>/793[\{'uR@`; 0|zvzCmaԛ #j $"s{iK` WQ⤻F}}VhH2{P&2:%D11yLM.ƻaH0F~q:Rng |otuΠp1rB:9F껊ʭϻCur\(9~X WuJ 1 /#&:D6K#Kݷ9w\#XI~ſ<(TE06oZrζ4y=;i?M }"ioN''>p AT}A>N!^(ZMK3ڨO93n BY|f{؞ ڗb\JCc7oY+U1YtG^Gw2jh>JjAwWVS{)]~ुEJǟ5c `"o> 'vկ"'Xɬo3dOߺ!^o&mxkQ[\9k魒NtoĒTAYd3cMf}f91O|N7?6|<y ړ VbhhyP.VuFiX>TcxhgPM)Um/gQ_1P,@a$ [6\ׅt[z-^Kw'oLtw_kzQ2,}F!ﭷEǚ5 VL|W/sc(vi|'֙8B?tĀ)}w}X`o Zј٘*C?P410ueCE7Ԭ8o̓3%!lwS(CH__-j ||}0zKC75u˼]>=ړ8#|z92,: Vh+O f^ܭp\S&H9wnVҞ[²cK%k/cW[RCGTcJA@{$^X9W^ +zկTTM\k,< OE~e{aa719N]6ߑ%"#PmݞVjcwmk}H|&&Q윎I#gaEL.@ƐO.%aRs"3ٜr9;I{ u<`87nvEk j];Զ[96Iң(! % Ց?%G7VxOxw@AGeZΐܒ'WɃ]6O<걻ؙ)?zx{?钾ksyrsX_g=*[^L-,?-|xmwbډ_:y2TtbA #\SKn*?BG#t3c8%3^=FWJFD8nEϦPjGCKew-z\m,uSR{zM>oinb=<,QƇHЪ|ӛʅ?yRgi$Wyyp,_Y#yfHfܳ (!P/">Uz0aȣîs<[Cb\࿿ToY2z@֊[Abxs{S>+O^nry$,N=I1`>/@>V,<Ҿ\OE;F)Gv; >QΌ-;+EXaP`fZ5|^δfA׃uԃIa.6SXz>T+Ai-kBG2sp056DRnӠcCԪܿ1ra&5񿃟~{ݙWnԛ#bϙ LhW ԗHH!~V@)W0O&@<-D(%rz 7+/;p}GKB1GpUWoךv̹&ݟސ/ytdBԟM%mu@zNۄ`O lsi7\I|)WWǘ3xs-OWT|L)AsNzP-Q<4'-,Ql)}$P/`"Ulv}yB`^@(9fCȂL?j8 h@|Ϗ6m^o߸~1D>ԯ3Vs}{+Bh8 D>9qT 8tSdt?. ε;#\d%7W1{in?&IrqdnjV!-Cfzժ&߮Wpi0 ߜ@е(~܍yīpGC"?K?[kJ5,qHho_ZoRù=k؃/ WaǣOzP?ޫi{gz߽Z{ zֳ&cv{K/OYY6w ?FVz=u&rࢷ}>w0BC 5(O*(UԾ4 l C8N'yk[)AGNcvZޑi!wx_%!w,P d{D~)_\Ke $)tH^e Qh[{vWx/Eb qǚf>jSNmO)b ~?nTD~}5`A*w.s~GiB-!qKxXZy8`90r/eDjen@Z0Qh~c]H\kPkJ&s6jXC}eҷˎ+F##b5F匼okc j(64_yn:5P-$RD$ ZQ 5p*ʫ+̨I1kcߌ>c bԏ1Zذ0͏Ex ΊP_^Eb )v^g֚p|=\s@>8\B3+E^қͣ>8N>mHksix[ |+OཟB?H@ dhsEwC=Xg}hL`Z8OY)K.Ppc+jY kSl6:%ўxbãMb٣@0/KzZB=+^ra` ~1t ZO;m>vXQɅTsYtY.fl嵔3٠/!Ǐ%g¶`zz0Y1?{^j6 Va>PP\/N(b@ l9tO1d=,{Dm30'RNzHǿB5qj0|f~0C$rئ0ڧq ~i=,1G.@tdkЮ%N.mGx !!#.Adǰ.|#_U: f+c6>0X(?-`U-H' '^6 %tDfΐ|^ʀmΔN~:i5iԗǟ927x ] M @+@:JIq@IDATo]`))gvAGy\LPf,!P;??X NLrZ$׸G\ s[<0X;^g=@<`YM(z\e.1G0 s_9 V0}(ތ8l\򱃷+?kB"ءĭ``սc<*7e,5J.An[Iڋe_xN(FKqP]X6 NXg)o*TeDլ'0T _G(ߎw͞ {}K 8f/߭ߚ*fjÁQ·VN.4Hۃd)x>?ZN32|Y%~kX1`AtUC1#; ] ||"P͊F4jx? 7\˵X"sl~QhY@"ݫzТi:j+4But_w_NO;hgw?܃߉utVlԵXd4VW]eַ\#}:#3f¿gVWf8]0܇ƙBozFt&PhtЇe{VQdh<:8v5چvsX{OS4NH3nNJ<7LHW0n@{oe1[{j}aנ:͍ -mx䦓S.jmDK:sC>Z ֋',{.oi6l*.r8㷁,5PwGzeyU;kGt-,-a?_'agFk[K)q^Dfd4ޚʡ -y] .|vw?wa}*V5#X|x~.RkI[|OęZIgƊc!c#o_}Bz & OzbPF;bT[=@]:"/泯L, -׾ K% +Q5>Yb)s?CPfh=5HG<s q] 3m( x3|7k*at0eȇ'$B6hL؋ȵϸKݥ˧/^{0223jodR {twm5ք4jk_Kgj"@?4KYC$1 ,<| 5sn"Z<}}= Pڽgc1\93د ''a~i~ ]$p_,JA ae/ʡzS v7 o "*PM +ƥ pukyb̖Bf_@-K/B|im\ʱe\?c,`D΍<kqv{9g "b_@Л`8vYs~mjB"^ V9:퓅b`@3C7?5^GoS?A<ΐd)?=h-rL]\~&/u0PW0/pz\mj VG @{A@yQ0͉>!N#8$aY =lCTnh/ A;53[" <z?2)گ4 ОG"LO ^@ƶdc6fs "? ^JNA}^aC9%_ ٩ }-H>ƕZtڪlI~YC`{qa\/Ϭ sa\G/d4)-ZB/G_Iw15ugPƗt /gaeE<ۿI?K O8N91s \]W١?oyJ1[O/v{軐!*dm^iuSȵqX{ HCty2;.w+݀'uBbު*nT5d[)m"P60(| ?jjh=;MxgoGZŏ=`=άJ?"<7+(dߔ([I6)?0J`hAxƇBws)6/t_'E y]Q21c3L3aIn ` ]i9N ry Sg_$tv1/_@}Q@a@_x>\pb |!E_ikEȄ qS8_}r@=}&"׬R(,.HoIZI<Pt#l~^cF~N&&G R@you"ۓ'2' V\OdC/4|7xYQTV'×\*X]Du)ІƧ(yS<;HH EжR`:kJgY-paO!U,!;@3gJ?w;xe*uwP ݎV=r8ֺ~fʣ4;Mxm |9t=*2 dڊuPp?ד9mxh2?{;䥃jT5,4YE@1/@g |g74ka _\f]ZbP 0P+ʹwp;躳f,f'NN _{CkH~A71anz7g4e?TݎFMW>jt-~:8ǁ)w* sa#%{(Oy+~nBy~n^.ϭz'Xy햘X0ִsi_ӈM{A+iM9\ƍ5rQV#'ޅz 787G\ySr,{~d fa,sIm@ρ,f=Q8xU%w-^i&3SۧHwu'=YSy?v,i]~oE`ؓU\ 1NڦSOuw9g&n*Ab~?Q.Y{ןatB/P)~T*/T9) i OsCrV{JK0k/FUTy?RޅlHKut`!̿x*P0 *R1Cc܇Bn-1ç(W<S/&11R?B;ծIO'$NeO=7J!G.8qzd&@] Og #+.ٌ1g~Mt?L!wtb12wMϮ`LgƷ>Gd |4:ArEuPHa(P.Ϙh~g< 1!< #µ<`xT008]kntrb %vTN4>PQv0n1_0rHyfqfcS&Pʻ@&f0cR[N;7A02G!|z?ibl#xڻ]%_kWm:] B4nfϿa H) Ƭu1Lq0ڸV==3FBB=&%x/d+~hu5nut@"gjZ ruс?vu5n-6 }5 ? Ȍw[ҤSwyS?dgK%(}Jb{nS$x8ͼB}S=sp_)ԟx;}^H )#@޲f=C0lAaWa,D{ Q9-"h%H)`o99p&"], BaݢMa|j70&阝dii"doU4A\:X%t<DžC &JgFNp}&mk9]^QTl  R wPN0e|d w ?Waoe-7 ! # {t,E G?ͅX =<5pwSc\J0~ $Ph4GL (nvr&'/1cӴ;I̳> 9 *!,p/a|.ҁ]+u\0C,3<2 ]*W~?u^M=TqӫOB5 CAA:ܙ ʵ֒+5ֺoNFPTW!';BCF 6kP`mU[t\ ho#a5vu@[LYsH) g=K{2 w}${FRozo{oҏ>v?Q,-kRozԼ >c$Sԙ7gšؽZ T.LЏ~|lS}{o:DvS:*'O&^K :Xd=O|7q #b tdr3fПQUQ({ly hJ;h(GE8o줯뽥Etf}NrE=ks6bFrTLm~s\كe;5< x"<6k^n$p)&5ou`9ґ/8>N]\L/(ZX{{C~9b SY{|MW!>}t]f/E;QjI,;ؙDc<.te;mc^2`70-t814nHUryȯ_ RL+o'h3pZvx9gћx!]Xo֒-S$x TgKs?l#),ƠV֕cR7i_@GQ(g Ё4jeP?º Cy7ʛ--MӘ{Ebm",{KQjĺ1u~|yY?IteG1u:Owzr5o7$q<3hG>LټN@HkS}7ƣ2|ޑ:=K,C^I>$u8'"9gg;<;J;( ]8޹{3wG$gL0fh#:0^~LL7AEv?uƳ+\o&;H4]¢5I)L傀LR<$پ2ԅ yo۝O ˲ QK4#M-aHP[ FDz:ӟ,Lե9nK2rg;˅-jE kEsՙ]C;SlM{ NBYx#bo!p ~3?p31\Qy |g7ko߭A@}Gn.Nyȗ/i"u#kRs]VB|Wsvӌ & |w6=鍃nb:e+U1`^ \g|OZ,{URท|Ƅy=CW2M(ONxoG@=g'&\' U.FZ7CTj/8a6YK.uItg1jYhٞ4kg)ۻ:Ӌ_DEo[G PSρ%.I\ t2] ,> ˜(:W͢kp6H~:Hųeo.Žqjz&XEG`LNI4&sי r S>zV9+>Ү^chg>&o1u#N37ڰXHg1]Two,\#V\TV\a,Wk[~w<<^7nf$?:D3%,)Qʁ2\&GuO|K!m_P[b֙w;,L c.pEeC|?2UryGo.[]ОS5$m_!+C^мjNC_ýO1{cCuvϕP,Yړ뒲YegeeYe?FAeCs{Lʁ \Aaoީ$ٳtg\I2h?:FAEU 2H̎L>Z ~!߳=E! D?9̅%άJ%>nW?FLvӌϝCxԽnή|e{%]xʑg{Ik>zTBW)SbG\e!Z=WWGW;oվX`A`B)rI\ SI lmg] PkHA:Llw*0J`"FV@~:NݵHy" [dC;|1]uZx[AɳJ :NBdY6"G?S>Z֤#)| wQ]kB@{A!}n7Xfa+E/YA4c#\몆0py[sI[ %?NEj\<`O60`_`f-B`S~I#G-qo,lI)g DQ@aG!Lx6Z`+_-m_)?S,d7o;PwQP5n'0W"5< "0tELO' \Ni>Qe7`'6Z*J_섐sz՛v0 4.vHgNϬgt7浝u'YRݗ̔?D7Q3,m5!3o٠|ɕpelϨyP puQBU&eiUH3^0le $ǀmM[@dBG3x\͞&14? v,DU(L`#"#{D>'@;& -B݃1]Մ8OU<:,@v2E^L@1_јݩa? ބWA8A[rz@g*P\BWka}[%zcIpyڙYh}n{v:_+YG&*}rRJ_/ ,Qy)_VLB|)uO>f~=.4tb*'Mq/ "yov~<&x G3hRGr^ ʦ%{\XUiM,9KI:C |9)'D;]wWnvڝ!w.soQxI>}}Y)fHi2hmLHf03c4i^Y<7Ɲ2Hr/b>M=Jw,,:Rgf |dyۜji!g&~^7mwc+U\w*=wD~¯,wx"MQA9=RjoN,dN'ظV)߲07t 3s@f{8i[3/[~ls<_hX#+1E `26r`lՓQN?z}*øE.Ei8Y.(heӯr,Xh_jU蕆E[S''+8A.u^H݁^6Q6EK>ʃ/qz"޻#)S3Rm`$$>_=+|25,T}Mttm%ez%J[G9sK.; j\>7ϮgױP^# # I. wO0X龆=ЄK;6(fp\-F2/_[@{뷃bS|źPK Uf:b'H £~;m+E,wb'PO mq@1'VE(7ͱj!KAa gճ?o#*wIʸ2Xx/N)g9^nρX8ah@eIq&7yЭ NlyoDe ֋6x}]`|dw'@C١>Yt@+;Bѳ@ :pH2Aᬫwct#z9%HKo{'jvD"M v&ih;16sՅPB<' vkNqlNq[X`^3?37zƭ.s=n/=e\b-4xge{GS+)>GU_?y<9LrtCac? @sP6OCA5…^`I ۷@!y/G{&en!2v>/y18|wo^:AV}~ )~n}j}H?yb+ϬG/G{ 4k3Q8+J@lYǝIΨ1 Nt"1_èo׃A6yY>'jy I!`Cm(Fa*{ ҍM? x;@!7_ՋVЅ Z?>{&4{Xcl2XB/a=늒S7êi$g+|n5Q2p5XFN (/;f]Dy5}֮ƿ.A.O @+U ٍl ,$hfH".!@9rֆff` u^ ;cKI{󉼓Ypj3p3pN_TC}n ҴܘYbgrMs {ގPhP\z D9:*\CK<p~su6f)AHl >Ch%LxCkpDh0oZ2G2JZ ]:>:Ab'(U\T>#l8nxbvpf΄b|o2HaYe)Fp|>psdczdpd(<>4r(,оpԆ(@|;PO^ulA7wIV?Z!C.P31TS ;5VlM.ɜQ lՔhBFAg1k^%PZ:pRՂI:+gp0I>Sw5\dX- >oQ*8wQ7JB,K_ aeн*?LdNL— 4/ ֺL|o8gN4I[QqǐnGc+,Чv w5~.|ǾٚSn{SYG[Oo[cܿ$N@Ͽcߨ1-M˵UwZbR/09T<ҥ_)'͡ $o9^\(6?8^J| } J_0]0EtFjaɟlX uF NG{l|\k&j/IvKU3(L%/r- n2v?2ye5񲞷޲HuS+>u=If$ENC۲< >ذ͇3 7"н0q_G//f)ebb>2A(P7pB?@ToWr=JOg|ԛ24JAWI1rS߇̝p\ܖ^,YJE VcV|5e|̓j\#iOEjqFYZ؏*azrȣ?qzRD;ԺNss}@XvS?hU><O))gꗕ]KfئEk,><ԯY\m$W}E!oV蜡jA9)2tveΙ+gikJ@ՃVbg"]wVYÝC1-Iz=F pkUmi'' ( 47?#z+MGnf\LOn&Ç"p@;P[0p\īp34*t%/P|Gu{C y +\ SP>Wq*g0e"?Cҩ'<7TJ$w w1^} EaunZy)H0jrJ9uz'N ECW\z7?xn`gWsfk&B|- *mYk7{$Яz ,-`^n䞳Ha"۾͏uY~yѐoIX!`S_@j$' ǟ^@0pp?񿭟#u&G0e8^GŬ/+w'#cg'Kdk~iETG p]~%>8aر_ 9/0f܄_ڰs/`E.'{xB'uuǤ+0+GJ@;BJ;ptqߊv^r7B>6]'J ~Ru$T8@/9߀\}4HU aK(dסCGR27A,zB,в.ti^'P t] +zRE9dC.P;Ů+l=h]]gbsB^R VףUеN7Sbmsgϣ8".,YਮӀˠ,`%q MS%#0qzXv@L{o i?z{w/ܝϳ8m҂m/4.$+@}&P;>TGDQRl{@-fg jU8ni)\ lp>ο\GGGx>2[T[C !'B˽ cޔK{gk,Ե"#61DϪ8…O-+P ]˅Q p@ #&yEs!~5{QvL{\Ϸ_lkyUl>A< t+֦'AgV'q#I`yC V@󨇦P@Zdi)Qd uHNx.{FzZ޷C%l@nh/ 3h{ cLso%t[DKLG|03IIw Cn܏ǹv;oEW9sƦ֖ՃK]y-h=T!KYXYAN1}\~Ds )~fg|(47޲9|ҿmKܻRo},~ ֖3$dm7.ʝģM1.N>9'yFFD68zm4JhK&,@hp0.3ccJvcI7݈JG_φcWW߰J6wX)>a\7(l(,ξ^GQ_Gn]6vp{3uxs]H{K"F`' Yً!g-L9`46 4lD68Ey"AoXB|@2/|7s,8@#up|u- O(y#~A]ʭcm#6m(ǘ@y!P?v2 3u8h̓qZvkY UGl맰sd.6Kn>00s<()|8!9N6R(2_JYH^\,ϧg+;rx3 y;|b{X>[X{+ 䁍ߴd3[4*dS1zFיVKONQfw )_APNqŵOˑ">Y.gHZ{_|D=/w j54?)FN::ڄE?_fM7WEd5tkiȺtv,BriX(w |lRήr5myA'G?Ϊ'˂4"`` "6b`#bw!݊- vH{9{fQ;sOM3֤zZVi?2nO](iµijSC` h {@|D?:@4; :{.2/2./O@lVF W]CԜ5o7op5F9 叙_hl "q8y #s?)uP,-X6*=n.ޝඍH94wB|;l{X 5J@ 9\@J@:o?DS^mW,lr{YD֩s lG~WcG@}, kǹ#QpTpF0B="YXA?S}bGGάXy[]=u;A%J)=͠σ"φR_LO^?h!v/`]G0+xah&҅uf(&w9g _A.knDѨ[gYxJ?R?TU2RvJҝ|5թTcp':}c9* \OCX Bi ;?Y eFHG14f$%zHw=G k,|lh`|kooOrL{ c{F;刜b$EP(+x~99Nc(`nΨzPt>Ѹ <(gJx-#hoA,nti>-mø=)YI܇j٧Rb*r=G3 .r'?kڧ?(l񑛼{WM*rsN5h^uf9!~F&u"4g9cZhPY0׭ JX8]{ Ϋu\ާ!78!Sls&e,<QS(@au#4 i`4K%{%4d}*VxuB=0Kh5b3vȟa<*|Z _$}K(<@=5;DzC'i\V[Yf04h}l`@Gf]OzbOXˠϒ{@fJGF@2y6atz2$V y~so8{"j*lxZi&P^{ qLIdnH,+)G@aRZ^UzM2t݀l `tʔ~7oJj %^ W켂rPMeu(aabmew M/yN&A19΁00=\hBcb&&)((%akK˂P'Cvһ~֥_>vjz' Dbcm A=z~>^@yo.~%3npęV`W/F])}\`@kI铐_4@1 d="@ A |\iǽɯH!qGr^$N>apmL?nd^,a:ڂ 'lɩESq'nEpΚwZړ…LzSk}T:ݪV_=WK?yɬ fJDHWvZuB xCQj@53/u|~F˕|'+/48x/ nD>]-y ǖ,o^9e+3yDZcǿ+sLDʸo3}yEf\3OOQA>& mB!+I򧩽ݚx7tx!7#RrQqM})P,qp: &Z%Pno ]=BX%{mjorF`!?ёB EFH0To ^Z }en͔١K7o3D{/ix[BcCŘMɥἩvk!ڮdId͙ $pEzr՟oGȭ]O_WGDwOBAI'2Jz8E]8![ 0t'n$9$PߚW鵨oBgأza=/,)$>*v(ĸ{r^n_i~vcC_41tӸ[.˸(vhh6һ@pŦgww|C|#+H&j[0'CLTޮCɽ¦`KmjQA; cݫ)~.\* @m{oh[x v_ZI0_3tzޛoX Duu'&@z/`!? D;Rl ola)xlt"9U=Rtwvm&glZ֏/bg>qj'3Pޛ½`#s+$X2}@<vrY.!~Ym71r6aJ]T`_]JJ,VyJ1Zf|'l> +Z0+ Ah؞~>v<@`\ 9}g}~,?.d,:$=)@ѳ>7ƒW1 a"-#/3-X=z z S!Y@^%]?{[v!׌q=9@o!<ÝoޅF4X<ǬΉ(a&E_;+ڸ)cyN?Zn0X*P|kz|39tpT&N3M팈^>NەmT" #PI;;DJGـZ݉A UxMh`+杞XZ G 6 thTh@(ߗaQ k]u a9{ w[ {2r0 $fڠW[MxUsuFutΘ : Yݡk(ѯ27T\C\W\LJ?|՟-Y9)|g7=v[Ʉ~'}~!(ӨH x* 6'l wHpdv3*ustN~;0F cbz?Z2 #cg~t&k{)htf}%M1 +v|nh~'Ih`S~y"1l@]8c$Hߝ@fLPE ~ ,ԟ]F&gVz@}@=yH `/ ,Ѹ OE9p| {> F{es#CCVwg}lĉj5AMG}$ڱp΢epNDz O-VUߩN3R:su%k `s?̆6lse֗ dT'&nWG|ihWYJb7 v =OH˕?Ug_ZA|ܾ~[XwlWRnY^_ӯuʞ,QQƨjQ>C83vw y"{v%z {7:Rc6@։ ꇛA׺ OM=G ~-cmwknDurҷ[O`7j, ID;ȇ?[ # ;EoAmʳ@UZ^#ݜԯ],{-Y⵪>}dq~ŭ'd;;~eqOPJesDsC慊h&6᫃ _CM+gvΚr= J=z  +<-`b~l`,ZD;??D]ɇH~ȿPdbPh TGwPF@Kp1unHq@̅'U!n9qMkng=?Wߨ}FM~^U1S4N7298z ஡wrVAϵw\eMb iep?ϋ#=0)Lc,9shOV\Za|jA|" ? ֆq]`n}ROy) cni.?.`OˤW:G^I~#@g ?N=c ([n5l0  4(!ק krf a9AGBq2tok,L'pҍЅJg'[ꨳy: C#h{O 7T;4bQR"`&v0ׅ@ޱUF;RT!0x㓭;h# fp` k CAApg1w#g 0-&h?/~YK8kQH&HS ]h»B{" p*4cI5 WrNݕs/AG'g1 [#w8?7_St}K1 ZLDKm` O뉆PiEy77brO;@uL1joBkmu]u&ҙ-@W Ә5g܋;# ^_P"? `f)RXgp\4%2fBuqXo$2zv@ ,Ӕ&zلg+TΨ9 FVr` t6t ůdmnD;Z)\ᓔ-v֎H [L}vsbPIȍc5so&w|lKifdg3=¹|MƒfBY*ޜsr57sY1vaƙRr'{bW$'Ҙ'{!CC9~ &uAebw}&&">¿ybH *.:Yӱyځf<*n>\v4qcZ &qU`ŗi.ɖx\@ &w9%UwS߶sG~?.!ݽM*{6$YrΏПPz>4wZҟm3G2ۊ|lqqN>>6P⿧C3-(ݤ\mm[{yJW[P:dzrzE5o|7oBGiqwAh)~׀kOtgÝiїx)d C+q넵GpEuc6с~!,v&ȿ qly|@K1GeE1cap͵Y,dһ@}3V堍Kx~#BPp!T a|_bpaya]>,upqNtMzOkwfs'Ycy5zs:JKc@?LNԘ砤/oML^nr@=13\W(Gn2$AI[ _>:P n=Zx.TjL?dFF}_@_(0ծLMP㟱cze~F.|H 'eA7pqU8Umzi!|w.93s^P%f>:*o?w&yĝ<}0t {CxOIh<$j̑O ni@?@XQZb,F`o;4 "a-1`U6Ux&NY]CagL9"1q@~Toa+s(nL.He90u4فJD{sh4: &h+=!Shq4SfB!-fDÿ6EK$^J=>A[),wjat*t#]LCtbȳGt+/LZ *3q+/g^~{|z -ig.&'!^ߌpȠ#tZ:&vP#~. BD` UZ#SG~->KZLtN]u 3tVBBDvM6 F`{Y`q9[ryYV(l(ж ȷ-4C\/ /H"~,ט(^'{iU7ZB& DsWh1cg#Xk4t>ԜcV8 T' d-BӳIHJ8=g"ϯaGc? *'>WuRP(ڟ9}HNwKJw(Oda\ '&N򝦃fRL-OC0NW~UQPGAӴ }=BAڬKA&Eye]ћ-DP8Ź8YmNŻ.:E;r1rS`b@hëzVP9E&dxe@ ='U=Tͼ7vKߎHr 㴧M.z8+$yFOֆg'Df4! 0xXm;)ApI T&[kgHYd7'W? +ޭ|[TR<ϋ&B!򧫶'ܩՌN \"yU E$VoߜZ"O8~:.Y{xRO[íůR1^ʙĘKă=T $3GrLĴwCX~'A i@;*^s(}ƍwd)\F~ )dƎrb234H&S]}Yr_g-tNV?N(tNǿi9{ׂ6. AH-Z;=aމ F ^0K4 YkH),0gw\Q[Fi7 2H"9Oˡl]7Q MvVE"zV~ޕ BwdoܔC#2/tڑa\F0dZ |nFR ĉ^Xn Sxou -G")k{9qb!7#BK?+pe)&v}|Oe}נd"ىPJ#c?ϙM ߾'_ nJ]UwH/7pO@4R^XS\)B*?Y4dm@5C*?,XVf|~C)@ l!4a.(kg(ǀCXBY{|/U@w_}KZ_%@G xe.tˆGeo͝--FT1{Wk7w:uv_O|BAtZĦg4^)ZK-7 gLo,;ew8|o=ӯ_ GIunR>1XRq߽zY sGt5^ oވ!F9s^4^4Z,P?z lxHPD2i*Rf.{`Q~M/ơ OdGfa-1_A W t ԷyD@Mz+ۭ\r~nBBl,[=8 rvggr`|ޞ#TBW#-p%&|E(gIj9l%kh#p=9O&}~ck {[izىmWvS,TIKBp }%IڕEj^՛GSWH?6B!O PD`g3xp: Ϸ~"O ChSXj>(w>V6JgYP86&+-"|hjw<8Rwkl{|ս:>YYyyG z J s{GO`ʐ^q?;npZ9f]uL;#@~?U`#i|rn M?:ˋ3ObMyr@}$R|?QU@XBqe  ( 6 ѯ? W Q8-!\r]'A}s/]cwV,X>MH_dNoyқXu%Aj / lSBY)4!f$H HauE-0~R@>j%̎(S-fYJ,%jY.`n{(>-4 &|do nS?byhSAwf~ T%Puxԃ:ti 1ˤ`P=7?>K;PyJ;/w yz* xhʅE+cÂpu >:qY;nض0Fc^1{|o~j>_7gU D8uL!T ԃ`uAXrOG־:qfG{407ht@$B,Q'Qzbff,1v^ fI9O(]RI: :k93G8L;ޠ H?QGTy&x:gRO.Ϭzc3Wf19<́%̮;@ɹG@! h'ɋRoo*g~fyy/8I3{KN)S={6s0lKGM=,+vfzf4M轛b0v/v݊wΠr>#Nrc ŗVwމK)oԷ1whKV#_d"_ ns81n7xڷ;B w0ӳ Ϛzhh֮e3K9rEm^)δ#od"e&t.ξpg%B Ȧ'/O@{J} p 峵@/>*P=>>b%vNjZQDzk(٩:S }VGIރ7RL< 6LXd"ܩi۷;1IYmgғޅ kV%,o w7wEA 8mFC&L7S - Bb^^GQ|(h~9D7<o|?:V+P , 7JpR )x-u4ۨ^{ǖdN :3#U+ZF gwvص>%vO]iᑦK1Pߢ*WT5X^K==>H9*܉;ƿ]XO]wL#*uAYsK糧XS*Q~RO-E'1̮]MX3By Up- aC7 * 𮧀zJ ɷ(&FK,GB5؉PSUrt4@4i 9@1|&_? ?dbmbm`:uaA07}  ?{|w"y// W@ٰĖ%mjTJÉnIINa(оK}y͑F|>ܫyGo r)(*j')9}&#WGAB?Ϳ6\-t܁кrzE̽9P п*$u_P68b7$gӱ'߫:d\36k1bݩb?mݦ1`qsߎ9WaXr-ؽ;?5ysK|?7rTA4f * ?Ԥ'tVw`""fΪBwԤI) s%u,H.<ȯU~&gLOyp QR9]`$Oߑ"@;|o\l$Y%wj4.vNݮ*Vi8qsw3tlr9ؒ9zCX\6ǐ\p0?ʧ~z9pVҩom(1@ϰBAy/L12 b_#PG d/=+.]9BScl%H, w]&p@zx,N\65>itY3fY0ۊp;;{ ĭwSH]Y*.i]u]:(~ow-;Gr}?\5/4E 4F:՘b lvXA[v\?96f3t]pL rax~I_ 8T ߇{H<Twr /R/+亮Qt1;:wƅ͍@t 5G\ 2;0EwNjvzZ lt@?KgJ`^@Z|iv/efvʙ#'A՞e]?[BC1^MXΕbb0)?td0ZzXMXD`bU@> *Go s|9kM΍L~[rdlj]u'v{\>|ۼksnS?AKI[˘zt¿E 󭽴yěQ郿Z9K:ct]E|3x5EcKg᪊k79ki΅ ,\IUU@=xlYŝރ*9L? ^=dn\sH2^W;3A=.ߞ x@yg L*0q]$ <$Pn P'9GV@}uSl1: 2|UK%3ǡ>x.߮ZZ'|<[Pu}8`8y!]p,>%K)Nw8 o~|՟=X}{ ok#ZA&\ 6q96:gjT3QFɗs구גv1.~[X5g N5k֓]90 URJ<ݳ/g'JO2o^v+)C*PS mƴ:U]cF8%զ _"E;@>)!,g[x pc&.a$y$/j6.L67HGN"Pxo"a\ v a_ 8WDv(L៤لg߷~FAz}oq- \¼Դu` 'W ,f (lzW@{!YT swx`d 9[cmxxG KGq=&5$~(q@']gY>ɇCӭf<F@@(̉?'~(8{}0]S~ֶb~woS0P ^JBPz2_W?|/:~wzIz X#^I)R{ >:ǘ.N! EZ- |&_N_7|*R\7jP:qS6|)h_z^x>2Ixoj ߿Lz%@}n{n|'2𷫫6zx>~zj0bi|X}|yu\p|~D/ÃGRT!9ԧHX-`;q!]bܠWñiCr)cCdE rNR':>v=u+3Ys͜RQ`q3o?q5hb_} RY8ps>R$ 磕 juFA%S8l Qh(s:K>1kg0Wk9OǘH[>kY*Xb2|v֥vCN!n yS 燠Ax&,4vFpZ[bv$# H>I&R˒THG*yu&ϻYbڕ`Y4vF@W` o P` $F -ߙM"e =^)0>gobX^Bw~"]47sb2~+i]&З@\k`ߔ GN*:ćh?Lȳ s8l|~qЯҕ/Y V P˜l̿U,$DZQ*\i`h[Bu?ڛsCaĒL >eee_[ ?4gDOک}UD5ݣhoa--_uk0"|+KzvOt5gF~hG W )^1\J2F0|ij!w&}@Dž>|' SP@+*֍l*U|O B D]fKJ]#\qyJHk[L}Zj*j[}/n!U[ zMsssEm!/X=W _\ s@7O[ZUR;a޽cHTO,WGyV V_yy$}3%0Z3=yut@d^·tOjľEBfg4syz2 UN>d~sVUUO.% J[֢哫ev-͇_4ٴugZЎ3dA5߬W_qK`(:Ac񡸝 c#L{1 2fGODk105aLF z]! VrN]$P_FM}.P˚@6(BzxׂL%KQ׳,${6t!dX{5w[B=LVҧ?/mZ0u;<қC8r0"vRiy ;!mٖsU'bIW2>T #5PFԥe]sTȭ%PՌ:7NAX4 &Zird-[9X杹9o笅:ϰ̮tgX?=obS8 e!{Ad MB[A#P=-hs˜5 rۡ >X^dݫzq_񑌟}5;e4p@i+vlb/~rO>={}.gP O:4;"#FgAvj؉|I49)bٽɧХO,}M1x`$Xr}Ӗ1+k|m˗~``Ǖ?2xG单7ϡ& 9v~u"o$ʩiRߘDY`x}Y #g$@q4P~%9𷚀o`l@-7N@1 O %_L Z k:.(k*Bl4(\c9ZuG h9; T3IBC>o @^w??p#Fr @}Tj^#ㅱ4@N/ n/LON<[b܆σ}-!7OK3_=&:b ~g.I:{ki`XBQ~G> Lnuoz? _YX;1f\E\7D)gpI/fM~xa<ܽ'oޒj4U [{*%W?W2E#Sǭ,?Jˬr k! k]6l”TEbe-љ.ދߛiBbm,v3 /ȷhg;@ ;^x>R@FN7 &GK'[]*3ţWυs "˼̕^g/z=bjikp0+Ԇc#m@0}0қخ3QO+:ܕk,<>ϣzj$H>]Ty<eS+y[z-$0+,lkt#Q;vR/NElǹh5}h@;:&6<GcXOsC~sPous~>3D#Gu?(d\rJ&#Zcu]hdup#=(]{LQ71j]6,su䢁@vYWX;ЩrdSKXDCdnH :#83]矚bZPI|7LBp :m)Ζ| #d~CWg^'ȹU O$ws_(T|&.Mwg9  F&X&_ %*xq`U7K}K~mUY [B }_%'謿`c]C;H._9f &\&7 L7i&)gAYY5>m284 >| S"zxr&1EsAxu҇Zٌ=y{L$}<DsAU۩U0:%7Zy7t&KaSv?*?7E'Ý5gE}zW?\`p "x~@F Ĩkt<͎haO+Z`q vG L8 5߽yiAU:ǖU  ޺fs,_QLC-Y 2?+#[ [s[:F&}'/WMJQuk[t|k#ݴՔkP~+HUH׸g^}M7bHs4}11x:݈1\JF9:+C-/Li'юx3ys?RK$˰䦼:\ ~['/,6W.A_Y]OYEN-)9c^襩g~eoJ=^_w3.}?LF" ߷z5.U__<0O`/;׭>Z}q9'w} $W=mE6hkxK\($ b vd{uvpLc6z37Ψgwv m  /ʆ»I3h75!I\w _eyd+vjF)%Ff+y8%G, 8pBPi[ϾM*]2Wd'5'V7l84=>ɻ~tz3"^,@87.@ )0%pCP!e#06~\B`>aR]!8H@%P^gh'Hྙkhm 6AΆ3#h٠)lz_` ;/ {sgnORR!Y#3("R7JY6  Rwu8|]sݷo/ߺz|θ5z_l}@H e?__;.<+mMv,/{(K@;A 1w7r ⽣@_'h6'@n"k{ yW$P;@Y@`'/H F|+cxE3v*[f!'d:L(,tɍEr¨M47q<9:=~ pDRdK&Ÿ{#1Ў(ok:J}O7S= +[R*nH~R~~/K/~AbTqEIq֛ԴG[h&*~ 9ccj'd~|=OP= h|e0MNh33jX62,ߡdX,‘i|WzϓRMwoo&{<'Owʭvl "Io ֖TȮ )a{nt"A&ioF"u^;L3y^mAzIrXO'b\uOtZy& //qJ7 z()W?k,?g=['.ud|s:2n@5ra"[,+NdAsݺFPtovh6勵4ۏg' F.-b{GǴ?4Vqvw.UyL!zp!v}>ʢEFD 6 \}2=ÃYĭ9lFG> 2b,)=XuG6mw Ͼv($3Z9Nw# 7$c%\׸tξ 4+ߢ"G_:} {ybGsW VœFHx~H2z=+B*&jc5kDB?f- gJX3-F-z~b2kICJ OL>[Nŗ>]c`3 CÄ ٶZ#4i _ Jxo oMD<.蠯'ДSeǼݣGl+ 2+?g^D¿Y 794(ddU`޴r*ä[*iB+ӡf [K \ະP礨*<gcXe̹Tv*i2jL!򷥳:9yJ;~a=V3׎h5  OJ[8D{[cceo&<\׋.PR\3N3U ;g 7Ժנ_Ղ ֱҡ[@(d#6Z }FNC$*p>(@LQ9 W ;@; RA4Yp;mmY'ؕ %8^=TR~7jA 1E]YW`FAr \8olX^,y(Riba [ T*A vpyJ9W0Ab JrD0FmVBi%P֘'"}|&JOTUκsvęL{odn- AϨrnl۸C.uWiwp=_YIM#P^yy۹+<D6$~eseIֺdˤ5{{VueK e#j6yhCh֍?c(W ?+R'e {{n#??Knmmx=Kڈ ;+Wd "L8q?䣽_T8NG~ <*x^X_{/pů]7HnvSvI">LJqe0L3@?@9:$DR'bܝ4祜gx!<"w,O. .t $/4 \M`&esʉ*XHup# ۜ*_Ƿ ¯L ^YHz:UWڽp#5 _KAuWwc.xx@P\.HW1ˡfOG/?q5%z6*2[A2%Cw A|w#dO^z;5>R 8~dYvNljV.w'R֖\]ʻ17J맿K _;7Yc/::>/57zhP'og3ys;»Y,>;?qFt sZz='}yz<}OC˖> J[g닩CRϔq߉Ay-*p0ս-]8 -zMVJ Nj c>QHA8/O ؙyϦ?Ξ'8P~ Kā{ ο+H?7F ; <`~4%(&xnhQbA=-N t9J6U bg`+xU^οM=D9!=9݈)3M5AsO#0r[yCIׅ`A)GA,Hb[@ ?Z'ASYSo,_΅K^ntiRʋb\3ZqAӥNnG=" &~~Nnn9%\m좠D T'.4 jp}px';s:O(EDƇeGEdYO๵ Sՙɬyqԡc{S\3yȘQb8@[ W@޴ۛwH=JE QB ei:w<$g+L;Pi%p/; *p_-x*QFkvD#j UĿ0/1~3/xOv+H7I&(ScͲ ZQ*h1Cvzּ6͜hׄu{q֟ORg WZ'r~rt(SJcxw䭶BɩPv=AIOk#h(WL0u5olh U2_Fp}K\#ml+8byv}utў|x~* gJpfJvO|Qq"Xʰ:*M="41>5fe4iv%% Ig^7A>pc5!4"n"/S{1]^0_L0O?#}8OK ?s BbLѭp8\ڛ Tdo$[>îD>[? ʥV }_p\!1P w2=_p0[~6/w@ L}0'ݻ w] Էقdz8"{U0<&ydH!ocrYKS .k!uuȇ]"0LI_ӡ⟗MSEf3Q뺧$BvȽ(,>Ͼ8k*|)C|>r ϻ\z AW~J I &~j$f&/!^lȵt}pkGb}WGodt"oIw>t:'!&徊+Zxc+E/sʢÊk]Ƀ'&)!c#3 Ét{j5u Z9#Ώ5TZ̩ЉQr}qf*4}<6-$ ^ |G d evbg/L WW ( ;y[A%o+x΂p%`|t,= P&I>zwwEмsU/hF.rF0L 5y''=ȋ.3rќq.\*SL%11_pC~a ɴkԻ^l@̈́#> l"EǮblU52 tkboCucr %NjY߃۴ߠ ڎ¥Pf50}@2t|1Iջ>b IZ ?qZoUw0i)Wpi-iY8>ynsu0d淋ϱiKIقz>!;_P<-عNAsL<'ϳ`^4eWբ7HNh~͟ A8Lklg&7 L6Gz#궂t+znATvQ?c/_ae'0)s>*C5lgLS`g6]GvMuG|+I7(SS^D5ɦ|Ȏ9?rbc=Қ_O#}t>r&ԘdW8Q r5isl3'+Rm*ǽA_M,hRNQƨ2p]r<$<^%+_ ʃW Õx?+'l ]kk k="?É&rң%@w; @< ůwEE ufop;SI^33{QX7^UCKX] `'_{:S<{{n?9&Ab[9Z C$Y㶌eXAk믿L @S.W4dЧ}9oD8n`ūkjvbݏ@IDATR%7m#CZx>z^rhk-ڔ_l918Drm_y:-%Pu[=nAKGaދngkэZ6߉O}Dw``LLbWWۨsH67Vrsz'Գn]%BOxz\h;FPl/P "&58`( f;V$EVmk`Ny إT Ys]yK ) {ۦH{Ω~ @ŦkH59 A-W'q5/Alc<)]zf}u('/UuGqJ'D+p2&Fg}ISᾓDLM@ V(B(]L|&CrT/b3# f(Cig\W3PottLZ=; շBSOַ{!/'ZB:V3Eƻ?'vv;!'Bjd=mknC& /+ ZFI}sk9k ?7?@MyqxO Bv{AŰ WbwX,/gUZZ TMI{ϵ XیO[5M)>A{)9_ԕb57E "a7S"QHϜti>g!sq{rx{Zn "-XOH,p[!VO6@݌){"ew |NEڽSQ޲>:fxv@<8agF[,uugX0rEw:k*ip\]v( ޲dBvVf{?k6Tp\#΂z\>'W :CSPOlp؁8yVЯvA 9EU9[]Aveps Ⱦ룂~~DN ԫ]Eh(Z&+x`f_}!q^Wc,wbTjU]Zg=7=rWf:.cyG1uñD4\9͏WWsZ#eCh#=t5"P2ϖ=޾5!Bi2<(v>N9O0\u?#M{s'gp/>$xXD*b{jBKu ((HYsjxxQu'N/׽}|jHTToG{^$2f3q ;ddn%ʱY9<-0c%(6ژ=IDq<25 YR$ߣa*3Pu#o ~tA2?TPΞ#8] O+>&yWZJ;qHo'ZCOpxx&^w!?\Eys ?3T+qfܠOaZ>k4F>tK+Td) v" ­-i i ?彨xBPp ! J\ReVD stᜂǐsH\stW} Hv:oaI*Ժ1{r*#f ܷ5ݗ W;k*"5ւ'zA#/ :tp30ereAlW⹊, >2{v=~ 2?]mdfPu#RXT;8uN~*N^Sт"L&9a4>&l2jMaWև{lG ˗:A+=ř605חd j*|O]y={^J=0;!B仚a__ ֗5 [[ȼ'z,WGK2E2 Х/Fg?8ɧ  `zM7V]t6x x;Z<ڄ^wV.%~rCQѴAVd>T-" ?@tdt$Ϲ'i[_c"3y+=2{kN3FU٣hX6[sfG^GEy]>T@o bOAt.-v]wb+?$b-w݅mjDʉDVsy γrʎp+ e{NN\(H=OP+xpS{3_(>^ H=)[_p]hb52YC2Ԛ ϫma[Ps#H}K/__dV^Na8m mEyEtۚa 7y&bo`ZQtD ez&t~=L}s ޻\7,xAz3va P'c/1z{k r@if_P퀶mG8}kYRE# A O {k$tA<7y -x-%#٭āPAX׀ Ua^|:=~S~%+_YNlwwzp-[r- c㴟$A0}} zpRdi3 B UWa  ~| ӏ3:9>  @ w =m1Qu>|eN#ӕ."4&$s{D &q=5w$ɑ,ڽ^' ?j+Gz3ܛxΧzL-8N'/@1 }>!!-_{r){yc~0,W*˥]((?ʁ@z HnA [ ю@Lk"Lv(_uO9rs=iTl_Mre>C3n!$( ٩ugA_?AP&Md'|F  *C@T_~GM}`wq5'6^.r.r n,܉lkp}\oz?B N N3,܄v̯VrgG:5z [gv0C5hy1TQ:@p؏EP2 -@̯lϰ\ Nw"P,KP@;$}(30PEBҍR>PcG6Evξ=?]yfg3AABytdswm\}۵G0@IJ<^L+٘+H"U~T335}(o5 6YljI8W=A5H1U/Ť+P$ + }cW}ui*97_&Ioũ"cuzQ>ar TZ2Cmd hc0_^C|5L^X"M9$; mMDô8Mvv8G8n[ATPcS=?v;e CS=ЃCaCZ]-x_B𘵂m:Fյ"(B3E^594"ۜd٘_p3r] d`g o:[C(]e&::(_,vR+n[ր*HnɧkS3nW`!YK i:')#_裐38Wd"9x:?k"^c9CH]`t?)%u>)ףڬx&z萹^x4ў=JzQ?Jnciq9eYi|d6ϯ] -[6sGte1+_Zq{~ɂvKwXJbՇ>dnD}eTy {KP\<&AR CE鵣@Q๡"%Ћ& *{{ B'Zw9Am%8-}gM g k dJa$>k: G75QZcbp>92D]s9#sK\ؾlLNxW=x׋fz0 \ 6U3Y?xa_'a[}dOL{wKO8˽۠xvc4>Ι''Ho. <ۑ޾BV:_hés8 @dwP>^rJ:4Olۊk`w/TYjYMH?>1}CXUvs=rS&.1vu?ѬP|`epxrM|qdȴ َ\K>tKIPP8+_ $mr7 ֛k:a';TZ mQ16TњBO#D^z @f 3K|\`|_a'Xn3=혉 e`vA:X'h 'v{ G@{X=Ӛ8$ D:PUѳrd'~WO&t:k ^w)o]'=-x3ڱNU:]WROPvprpmeV+-=|+ ̍}A/x߄&mﻦڭ[ju"{TqCV\'ti~i>8Yg}w(k+Z ?ZWdt\N.eྚ[ Nd{ g XϱzxW ;GMKk⧟ o §Hp_8#d ^F ;~Q^. }*]5xU&q" TGt3ݝ_q/0=Pϭ`FXo$i_u }*!3.epM;̱ uBsk3L<Žנp*w$~Yc'˻.9|3bL?nYchgkyGE{R[_ޒ畓NpLu>fHzڍ-d[ڢ.x ! Js'и}tXlf66ʃ'נ8G^uй6#l$eY^_9$3rX#`LFENm!(=Jkٮ0'yg ½Te kt†K.d>\l'8e0lD\A8O.dA^-H{ rux{C XZ0 d8 Wƒm Aa*wqv ZZ^rZ !X ·[Vim?Ds`{´A}@h({ aos/08X7jO*Kzr(㙽+'p+B_ V 7rd ٭E7 jֳr>A9dA-H&|7L&cGlmk6.P487}xVI2#e*YRq{l@v3=wv'/(nNLM'˓% L#%F{V8e)sjuVg&"Di=ߤڎqɭf [s+M]0 /|w0$l;l=BS€jmɂ@P^7Óѳ@%&~ӶS喖f/ .;I]Y |a9brGQ ϕѝJAG'/OJFcH`VDцts>@8pi3zjejA=d8" l.\L=b-p撿SO`&!gnqA{YBJjf_@ML(^~jf){,SxNs+D~ʉnjju a{ Pj#n/2AzCV> W/9ABr:cw 4 96Oxnd/2ig ?/j{٤&>mp>z\: xH69z8Nԇt:Q}h4&h+*衂P8{wWU˩BI @ec@k}$z7Fsܐ*][Tw}.KH0>y!9;)a ?ϑ#2 ;t\w}QR*`_7G+H'&zs~Q C49˜Zb T~iv`NϚ*SBf6G!c <eV ]O|M] .lgѿg&~WD9 45"9t]BKxc'nM:q4$Pܞ 1nۚj{pg(_Թ(J{Z~45"NCSlDK|S7uw08& HP+PNtKv,ٙ/1}%5&xmv ᗞkN7 i+ ZҤkxzM7e*R Z9Cg5nr*w@CG/! ZhK (8ېuŭdxv rӁ;]9"vrO/7r_P 5~OICtOmYt\G>tҡi J$ SNHS0mr.RGHĒ }UjvϿ8}7rLc@)NwXZ v/\/O9T W #\1e +lZxd3;L@O"NABP/)(o i@{IpGor`@B &eW LSv`Ďrvp,A ;l; %AвA2AGQU ;??>==$}.}Aŏ5Lu:sYe.~_觚 wnUa~YOG68wa(םvrg=/]i$IPrN8&T<뗾T:3q#eM= .oサ[uȆoݵ WJZ׬|jjK W? ; =g 8[nC+ǣl{>=ʼ@]NpW.ŀm"O H\$i 3h̽DuS7 +N0Kp6 0Т\I-0eZiZtA_ `Ax&/Z.ߔ+*7vyGuYL85y+ܝkcM`#Թ3.'\tjf?e\ 8fdfMH i)0 dzfʅ,ƥ5x^aECʍkXKyPe/.C_->~JΘqT'"SyYzgFgSvkģ. 3uJxțFq*Qu)u 1`K ~o/􂿈[vx;>\.Hg-PsaP97ZPNtL]cm>A [ Ka)ROo Qp\[YA9L0Z0`\\~q@Kvc+퀍O7eݚGvK*HYva7HsqfX}+lb Vu' ȶ\ =z%;b5l۲PG)._J=1 /?%K&j2<$ѳXK|/x;DFG=9ޤhlB{{hEs\Bd2\Ͻ%]xdzپ-Ă ;8;h6zm~ l:yt332= \;N\3OHig ө9_ގ*~(,&ǥ%>{/BldtI ކS9N `{8U Ԛ ޟͽԖwǂlNa+ ]n)x͆}kUoԕgcښdIR@ ᦪ 2L$`f]wA 2͂Zg;@ '8T1-6߭'HQ]D΢k<==J."L{ "'FiX/Z]z5Ubj6Wv#KN/M]<En^3ڲƿa[ 3IWRj&"񏝑hM+(Zggy/Ȧ5_T4~ i=U48ua|A ٞEX!34155j˄kMjf2@z{N'r>!G]f8_vƜ(gK.1Ү9- (OfLmxZp˄BD۠{&EBirOClN-܋#mrf-:kQց~e,ߝ<Ϲ[]!̓Ԛp󷺱K\›II44wF86뤇ʗzAqukEw-#/ޯ.̺v̼K )8rr.斑K"P\q 3'^l_LSv%f3xJFR%/H?ۜ |~e'e,o\M>\V Znm9i+[>1 |f81np"XA<_$(/) &,PB^ +.G mdIH9:^Z 5@f ㊋zc =!vB%զw՟sZp݊>P=2O-1H՗1RuU3/m{}fm # fwt ԇ[ ԯp-s 'xGo,GT/SK).HRS D#@]PO|_8&}oW!Q?\׍^n7l~3he?ePYwo >e>nIs7-t _zW[wR'Hf`J`8ֆ[)d:J|C7gݨ~܏kNP[ 9 lns6(0Z0t}IL-=?[~ě{#hwG)͵bq( s & iv@R_tDo;} - YK~mAx ٚjn̔檯Y:e1;~KQmB/2yW U(OYy} =8x?'`E{Jե$&g8;.m'Π?r*/.Q-oS=$SWmf;;c:è͐FDuS UORkF 13iGܮo&$q<_D}G[T']FB̹mcԣwIuwܲAoUI|Ql=ʓH̹F7CSi.P_ø[a1Kg; K Ҕsy7"|@.A*2 RHܤ 2{Y9^+!'zV ?vo=뻲p iVHo˘PjhLGuz̹i#}`| *dV(󋸫sދ,~.@IDATU!Muo3Yb1M y%3w.~4j?' 'x_uwhh"{^:/Hn_ X[/2د?yo2饜Z[j \:<~̛>=R~Ȉ PaOUy#vԊz)w,84'˴>5"-yDjM}<8I׎d pod-85'X러-/G'/Eޚ_jH䷗R*QOp|wrp H'esg&!E#:W2N udn\6|E_P%Q­;}opͧ̚ M}B8_+7  Wڤs"O ڙCz < ʳт<((r, nkZܫ\ia/oV?mK>TCNP44w589bU@ɂ}c2xMkHA)*.Z)?{  (pmee\wyNbˊ*UPASޥrZve0~rߖNc~Gc,(?'n)TBx%VDlAn@A>9;/y_=3{lﵞKw/UQz@L.]>b0ju/>sYz9J-9PU!Ss*::4AMȿ Կ>D݁u(l~:7c8صȆƱ&\׺nmw[,7g:JnN70Ӵ}w<7. tn 8K9*y$ngt'K'2 1n&hAr),@A/:/7`2ӵ..>?M#~E16[< {M?z\o:#Z7R_$8#=D.uWUOȱ?)_wM.등GmsA4Mp:{1:@w~WMJ]] =,ѼgxVIzhB}_%ob>ĆT*_E)f^I“X#Vmz7 ä24>;>dYN~cr=rqܳryn9?D139G33s[!_i`rwK=+mcY$4:\Ǥ+2L ӭKK% MEIK )=*9SRR=Ö"9' A`cO녂v)PA:9R η#Ks4rc@.oU2-'_)G !0X2iAA!Ǟ~pb%Υ?nm%ӻF?uV8F~Ңk9-hQ@s"L,AyPy)(W%M8tl4՞8i@K[h6sC'A{dK^`BUGA>Avd|p9XȂhgv+ .W _WJP>m97_iYʃpB3k%;(Q9g٪{OP~<%xHP/|n|>pXA%H?Du{-Az/P3' >__]x} _^``IȤ#kpqL/"f]+VCU@)ffКLc /3F{{}: "neu*; xLJ&KQϖ]r%iʵʇN*~!uΙc+u[^GH 4̥i5{>Hg^JQgNwzT)0}ٟ.1.4 쀐5un@8*߰?|2(p%V KIsoXu ๔bW؟զ_xA0q@#H ڇ; a 㺝UP|N&#}-3\c,d=zl =mA!I>X|Gv(Mߙʥ\? 7gO)薇e9SsxX!̻Q^a4h`EV+-t.F )=t^u Wy3Aӵ {4ڊ mչN~8?rzl#2qgVFةQ{I_pຨ6"8*EO+sn~_t([ Yw/HO ;-em)a:a~0mz41<H8ZKD8/?h>0] 8լ,f%Nwd[hb3w;ԣr6ٌO >q?OʟD9qE"?2ԏx:xleǺ≬L=2/+["_$f9wrYy6~aCx{A6Gwr` ϕ@(] HM=lddަN>ns$3gl%8 |-(.?D"dž^춬->?G{ 3SP P z`Osל\Uz,_ Msm_5`=YŦ[l*H'/čr.')x0R @o8A5q [xn_H/\&D ;\yA])hg'.o^z uvHPD 6?F\}{h" /} $%_ nKɂ΂vJ/A>Mo/͎eбo #dKu;c.zx`f'5"=w^Lpju}7푘gYl>rXIŎObPV,ǘ)<|'͖!~p8hDžu&LtcosmMPVl(w篳xf Ϲ\e~u.]▿S=IӉGV1C̏f_ >(/Ӎ+/J?\`щ]rv[M+ ܿ^!l`.Cеu{pEzFQA8SP.߯w~XPz @ mY&_/!gYҥ_;XP\u YbkRb흖ff L;x;?lJ|HoӐ/kyZz*:7-l]AJ8{S>5s0FyMZ-M.)u9F' (F/ں< x; Ohٚx_mW8:Hbh2Aw`b +>ep !Nގڻ{7쩽 9)2RV^]z1é#˩1x^&I摥x~e'(\*Pt'xPW{db`IKWE{HɂhO#Vߕ.E @eMfWߗ8-/=_vqƧv򽰷+&Ej>;_#|s‹:|Yi`t_{,Ѵa0T+ V8qOhh=%DquskPnuԘ; U@Zv݄w>oep-~T8ʐS÷6%uXCNC qSAHx"Ő˦r|VX Idv{л#͑"|t[BdeLN!gA2IK}iܯ 2Vٱ^ʑeG!M>AL LȆ@ǓטMag$;Ӷ<":<"\{YcLy\ $t\SV evOLh>㻼MJTGI Od4Ayr ' Stp2 s !`, lso s3"ˍ_1 DuQ:7#d$T ϼ 8v a{Ah67Jp=/h,輸zpAw?A9^OHjM+j֯ӦN+wB4q|M:~)Rw):`E6H5q:F=0^nTRjej4%x߻/o ]-sf[hr|GAl!x@E+l͋c VV:KQz5j!}>'é+`(a}ؖx'wC AQWF}NBT娵{st.ǵ1PoڕF@®vB}_~4?.L98J \$֩#1)C;Y v0HOMy9;dS<;DẠ|B#md/>0N;Q.P|(k0zK]z/ ;L)}8V(h lֆFp!dVQ.M/y"+Y6u3"I]bM.#GppQ0' |^pdOD+EH? ST_OEP M@>"_g1ˬ gϖ-zҡz KTo*HO  axYK7'`AĄ=YJ[i͟5.~ZO𤨞fIs.܀E40X"^& bݾreE{C-g;-n)s ,cT&H3K~\L~7ut ot .6<і': ֿ,+hMqm1aU[e heqMp{Ѓ-( wTAzPP sE! ʭ3Mpf&YlmN'YRY)Q>t01eA oTbb7摟+>e(s{X^םdMu _xkO^ j^QȟDw[$>˜32p~E2m^S#=Nro_-=QvDbϼIO_jq ,0$U,{iQ߮%-OTYQ}6~,raLՋ4h e](P_MK^r`8.A>O$8.YK%H_ sn,vh_ye7 ZQ9_p_nf^,]eAôP ~f3Z<{mޣr!=S!_b@m~s@BJ{~}JV 2v\;-^b{A>N ;B,k 3vUӍ ph%F!ft3yOl읥=32R+?+#S?V|E.2kP}-oD]P.w ʅhQRHKg *[DuAP,uu*n9򞣢c&w(ȱ i`Sqafc1zw e\u Qc:Q\̃y^ @vc>.! l}Lk!3amd 1$^ILb. D+2u:>٠ = r AC|AD@~WF{-ЙvAdA:L1NȚү(nbw -S{ :@DSL ((.\7Hw/ڂLb>r@*o{ปs4H'~:+{s-ߣLKw ~ {!o`٥rXX^]z';?41뛛C1ػr/kx9$ߡZɷ(}iX³ 2㠖7¼ @$ZQYFKX>q+-&~~?[6=`V>gA<=u{8¢:'s]N\_bo4bVVj7p0‡Q}O߷_O\s'+@z)Ћ :, |R:o  vZN}λVъ.;L)łx =yw, p+[IvbM4=})d 4"cns|w-7ЊjӌCzpJu/9YP5%H7lԙI] |.iHJI봍V?ijHWƧ=s@5#vޯ8(s zr,ZH~$siJShZpDǃh4jr{Z/'s|xo})!mKO+= nxM4^n?8:e$H*/)rnEk= /R  s[O;}ax:Řk/$0]=3$~&5V %+AhsԯiS{M4,:G" y *(n' [e'Zec^h; l@^^E}bV@(nW%-"KTLRhM,D3T 8v۫p =A #org'P'*G4ҏ }l*Hld27- -+zkxVX_ dazZx*tozH83u+/!|'rs(r&b'\qɝ)7=cÓgMV~87%k?s!~a#AV·hVħ|Iϓ 6nzP1MBW*" /`*gזLEoA%vs_1DMFꝫeOdqNˑ4is5T"=i/g[⻳qz\w8p &"{%bh:ySxf3,Ps(EG^)d* {OFBwgQDgb~i#A}) dO28:[İL^PQty~~m9Rp`fWA;L> C40meM2i/!_XK>Y$HX<.(]ycwĵΰ2ǚsku aw~#NTz(VwGTlW UR'e!`wu]ԑ~-7o(xAPLڋjƭ ŃJ?gm撯bLjۗT5H꥾4-Jޫ۱ T{jA|:ٮ*{KCm#8̮ Lvjwv[ՊHpLs&jT0࿅ vAF{j{'< B˨uM$ Q&@z&w<#jij|>]"ަ$/azfwrgrw\KDž!wx7YcV?7E^_]4s]37xm^6֖ h'G)wz^C/{^Ѩ%'fR~.?0HoU9GA+եڻ/Jt/(k O$-ݦߦsYb0`z"/A;fs+T=Tң=UѨ۩>Mɺ.,H6>9ʺC+UVr+1ȧ9^HDKuVF n[Iמ".// ^\>|{Ϩ û-OrFn A;RA~^,F#<Ѓ-^XH7aeG rEN8BT Ë`ATPo.=A]Z(x)׏?UK2-kun *N湳~HO | n<|0jm gӑcbm{cm?Xdtt}W.ҿ*qyBlyN'T<ޞpL0%G6gk!>  ;F!:*3]-#.HOXbӘ ]?KVۛdŊ"2RO6.{l1ߡ|z e鱋҇TZ|%vX6=&f%]qK|q6=ؿ?WD 3\P~,L*tN'[ @" {%Y&+8J.< _*o ;G>&{BpJkۮ%mxb!B~SG9ik{ m*bK&gʿ1/7һRtr,nkao.6צ|͝]{mm*xW&9~咿)Ey8wm?OS O<­uK4ci(@Jd -lq$&TA_blhM .]OsIP--\?h<:ӷr**Gt) *><a"ˊUeH:EPT^;u *޶dI)7CtA=y "~j*]n`&kP /f¿O|zȗ rRi7+6A~c"]|*)¸S.>|+# [Xus,Gq.FUs@F (6 @;Yd2ԫыF:Uo }?A.fv-BUY/0ӕ%fډ,wwo9\X/ xߣ0cj_s cMbXRRVVL)k"I4* (䅏|dl^gz#PB+?N~O?̆rzV]u We;IS ut(((΂ߛ d{$GCAr-X?g Tp_<}Bp\Apw:6`I^s Hdu ~A.;X|E{gqṂbwnw5[}VW7R.g&X>1 kLG?hG&gǶ!lm _fze'UnBOdٻt|Ro>{e^LjSZd0:V+PH\ed&xߍc_>"NST Ti@/-{ELi^ϿG𜮂<{ xZ.ܕKdu΂ FF𺑩YDEq!qўβ`%߂*ɻǒ--7!]cm=*ﲡajU򤜙6Zѱ\Ur e dw=Qy`>དྷOO?g&,Up~p' jA{$}w[G _\9 %A1(lф%bExA3A ? "v>{޷hJhӮZWdǗf8P @s`RTY\W-8O 3lf=z&j{'N/*}SR;#F&fq܆XuXabF@T9W\.{no7`^4t$l(` k;=²7Q/q0⍓I&fh_sr ZEi6_!V׵1cł=-iitԍGN7bҋ]VPlXԈqoPhܥ{rs)LZ@1+NO ۱[љv.Y?L1E"Azp,N3V"UTl-&SӜh,4$SXIO~+a 3*ub.!4hQ6%cnj.v4#1njRHx&H]"*ΙI8Wۍ::ےi ə";؄ގ}Vv<6Ga=tܐ3rFDkI7fhYP܍QmЙ~VeA,yF{E\YvzyHrݚfSҾ"zgwA1Q/•89?q}sȏy(**k-+ϣ.[*SK7xr? Vw@y0ub d^y4opq‚^؛O93A#+, ,D8Z+~f ~ ~.𿹥*Sf .:F;p`@HA/NAz(H<7oCt+wN¿  LE!&؎:$l]7@IDATSqsd*&WRcA14zټ`Luo,?94>fcքB's& rztJ_gbHGbzȍ]e.lw 5bτxoқTпRyGfKѥ.Dz|dgjk>oTvAxB״Fj\6RAʐ\ag#Z |_P_0PP?"(?Olamxggdu?Zq\ϸ~G}j}~N!@_!68W_ob! ^~p,\r-~@6},c_Eޜbn7s8NaQ#RPD~_#հw }X ݈q+}X1kb>%@V-#w灂ۢ..xXH ßM7s/tpldgP̋ӖHt`C{ؽ*`= \ߛic}Ėzj.Ǘ3}7I:4 8?;֦yvz3 *x:¾j4we F ͙ދϖ 2 Tj/,/]nn"Ί0#ƺizXKlPܷw(m5M.G?*.!d 3_7%/B? >ٞz=)7wB8,uWncVjuk\ *לZ<@F{6>dNTm-'9nEbl,( T=-kOZ; ݂j"A8 nvn b} |Ҿ3NOty z G[6\"H׿Qew Lc"'*G=Ǒ3 _"8ZpQK\3SIj@@9[=o|_rJ"`!* ~tH/4'Vt`@jW4_9A,)xsDu9LuH W~Y1?qI~= BG ?؞s@/0Bz`+Asv+A$h_'/JG.T3d1v|BqpGn{D7$h-W]_7x@2~wr?θa]T 2"(;`4 LGM ev|#tNA`4%r!~Z3l 2ǻߴGeX7@:=7J5.ny7AW /Otͻcx<58U~39>.e.?ힳ \`ɚIـ`"ۓht{r 0<}tC6g[X}O HSuğIߌ+- >eW$`VXB["^L4ϫ8-ŷs܋U}-孋ȷҝO¿-ûia+W_9Gjw&> y1' ;AAwA?ԇs;}7AˇDl1ގY67Ki`~|ɂo⿦:⢁E7ļ%]ج)mhjh/\,fxb^4-Ǒ_ GwpX"q.U˥+qيRIH2ph׎L37(}`oOSg,QMݝe,$AˆW% G:'4(O|I}HgL3ɷj侓krKT.ta'j' ٽ.c 3-ny-hrA9K} f :jS }.p נrY+)W2ɹ`^Ƃ,(G5䢕+\M7#<@; g=AƂ}Ck&ȶ7 Xu]R  o 9/xA.<wA6xKr nb0Ǒ%yt[_JIq\lO^"˾_LqE;ݭGoL;%#[^[N;'%#%*w2}0_2y囕?%e`mSe3`x哩YR7g҂_jёװ{N /٦Mߪw\ބ93x' sxLuG9.s& 3}A1 ~-| RtLY&\Z{\R1A:% 7Z7+'m,gRYY[J:HmY\b6H>AřtJx{VCS15YW298}F0X5\wB5XJECîZ3/r;tpε09/-9iv٬RlK,zցfPuL ԇg:ʤk پH[ O Fd9isūP Ѕ>s4ƭOZe^M>7*Y=j-ޝv'gf KGn]99;saWӵ*!OO(:l.ƥ7R2ʧ3 nR~OHfˊs}eQEf/D2ֿydy#M+xvC7OJONeS>c,AAr&ysag˸*˭{I鏋$+[~5_~@9h|8]M-`Ȝ\cm&D LBP~"(?" xD[TMtx+^h jB{4:M m]TNx ~Ϫ^ wOXTܺ,ٚ|o)0q}9 ٚk>u-nq{%S>C`pHfLLT#;Hנ1Ixy@~"x^_K >MqDSj}A3JP -tlL<*]`ǀS67DK@pOzONu++!92BdC*@+5%NJw)ZN#Up ?xŋ]&( |\/+ls}dBbCT97\>@`b5QE©i5':/ƟKOKl@su0p}bD'̅Z}>PP~ p̾iIܹ E+\zh,~;,PuLVu(En@1Pw_P+x(K+nFmEq7 d!δQko]ƤAp'/"CҬů˳s%&H1qi^ ">*@nŻk8VuUe`SWOK9 | Hk7gA@ [ ~twN?iMWqHLi*KKX#?; yRpW?-7 yo^A" )"Ӿ<;]!d4!9@Kvb]=nu@N?OQG9#AEw&WF}MN{\3+S {\tC}"<["nB8t U[9R9׻|姻ύDE[3_hς|APLpJ0`._/K{?R4mMKnKh R9MPh 0-(Pg).w ݔ p?AG[F j ǟRf5^3w2͐ M6Ez[X-8ӌGrf0Uª{̤p"лZ~9"1oe:U< ӗpy{,3b=M| rVUoV|/(G63w'ݕ39o Yⅹy;9p<(q`RW0Cn+K޷R(NO`=+c!2ɡ2\؛2{Ϫ8o^谜z05hi1mW坋#+w+݉"s{$9)\Q2{ w.ߛ[U \*us%x?*QOP~\$Y|SPMD/*k^[˪:a<+7&G; S Ք}'ٍXЀbSa(䋷͈b8Hv{;#xu?k۱itw َ艏 {OKU}MfA ԋ? AvM:ʽS~a%Q|o垉{Ɨ#XKCg8gOVVܑK3+[;1K`6(ge;RS ߋ5\͊3ۗ ."gs4Ww> ;ݗs>T=1 }D35ʞ KL^ڞJ+|}P;e)LJcGuYy]r_݊Իࣂ'kS:#n[r~`IBaoFߙ'*E{+ۧH^;s/ u+6YlÀ1)^4AtXӝ/6o:oj hg̈>ݔ@QS |}(-d(RobؐU.͉Bdz&hkOOكXE }=W{;׹ ptbS5 5#+~z*quޙKW1R7 G!rQ9)$Wu!]ivv??G- C^g g 09S$E?<{a fO$^"}_ǖk<+QF؉~&:2>e{6i>T ݳ %=NVre%]ggj:p ' 읛-@h-P!tRp>vɆTAzKxAyr9C`տtG"Ǖx S%qA] jy hʵ`[G3s }ag\( }7 ZJ?+}_l9d;,`7 DG Ny >,$Ax7 ^ ޻PΆV+!f׼c?LJQ7\xѸ}~T\juyCM(Q}9?F7CϡOҟ%UrD+фp||@/FxJ^WK/bF"{\E[ϼ{Y\e/P_ *t~rd )3ǨC0!uSɗߗ)HWef \'Ahacg hNۗ`f,D'(L;Yp>Eg )xxmᔹuF2c̞PNE,?w" ݜ[x'O!4*H` 0x*a RlFfO%23e0 pfN. ],RWrxϞ-~ G[wZ73cW %H/[#o>m;Bss9b^38Ce@ƈl%RW622?#%,h قx# MΦaSgg3x3YK?#՝ G:/ ]{lQ$Hׄ]J,\.HR3 A^Gu +d+1PΣ{ꩨ|< :imo(.M%mhV#1O4/H }!;Р8Z3[AߵO6\:)ޡ;K8A``S셚m|ihxr٬ⶄc/#>'eMWjՌ^=V,3N?Pe5Ǐi~Msg2w,O, T/WF۫t$Pܒ)ba4,lTpzڼVk䭅m p?~-h8Ԭ/CgP|d!-ʯP*%([ -N0Gæ_[4whf IA.Ǯ2hfn0Tm3|_M;%:r*Bt)-{؎4Hp$Iط]2 M?8Y_},~fzy{)hլl&;Zj 5Gş0t(ޢ:$MtA=2fmgr:Z{1aKƥmv,?f ׾;48a"F/wM_Nl[Kx{Р^fvYެc5Io3shkdoS3Mu=g )+m}靈\IC߁1sxs(- CǷ#`RLw 7˺ ͑%p(:zgΌюwv5xdp]^6|^+aKBƞ  䭂z5lRKeӡ-#{:(` }7d7 +|GAo*tM6odrgv ;P[dSx+8O ;GTT9D[٥co]̮\XVG^(H7 }FT-f{;@zUp7dw GP_ZAW 8J^|mme;\j7<N6_X}3x ^d]AS[ٰ$ۡxP O\Sע&+^Bź{u[;9B6$҉ 4lr(9{k#_oiD?q(OX =4|'hp'3rL2񉷉Njb$_>罘c һ',ĎHP~CzŎ+ɡϝ :r<V[&<%:MI]:EGO+eNM0z̮`iLZ ;֟'ޱt|pKc@϶<Σ-Vg)l\q]AgxL<^Y6S7&j܎ѹZY<\v%!>;P`Xߩ gmk0ělz^_`!يuUp竂O{.C.rh3E11|{ S H5]"[D@9, rssrf3k8sa ̜K 8?1tpOWäA%Իr 9eJ}V v\| ;SgFƜҨ>m!ȶKz}@\-Ч~A+H/ i;ł Lv@_QGi\z4t}$h'HnP䬝qe*=e[[x e# ݣoѧe9eʶEzmK*y2PeggMWZ hpsns97nSN|7g4 uKԒ ^(Y uAəe.K|}o眔ۙtS5"m {zsԀ]Q(wD. 6$ F:|ۙtmUt,pԐ_p:M+Wpߊמۆ~;6Qp)(f <%;˗:vhq@yGm \[WΏQ}:j/O0 ⷳ@)A dq>GQ% Twȴ]US-".13Xf/y5/ q3);޿߇[)S R~@qlFc@(wSn:u[dfvQ<ٍP4  'ͷ Cϼh_c"hS!NHiWɎ|Z ~%ޑIn+~/:'=j-rnW={ @d_fy^`'A_ðVWhoQxZfYi}xom-UB;pUk/Xkvdإ{{ځ~ wA8!xϭz+logsUPA - CV¡A U69W܄2kR̂hf֑G nrywA9A~=xr[;k(viÉ ̬enO֢ BNEBwqAp ޯH[cО"|Z:4sTg^ 4a?AL  ivkzx"gvixn"x j2 Y%}u*6de)#lFG>窜>G/\=zv]NKcgnϹA} ,љRKAyȷ\{{~3fy-d(6sG(c'Z]$y7.v -fg><4Iw@HSۥKoޜn]B >J  tF{sMӜo& LT Uuh8w8mk'- 僂E H߅ iĶD|D[z \Ay ^IDgM F⭘MM>~psgm9O}<0OΥ32!i5xPf0#,ϊf}a2ܔaFw=*;gh0@?C9Mk4a_RQU55m^5UwC*fIήO0ϷV)8ǥ`8'AwE~HepgoОإj }  ||C+|  UA^02cAs/| A-yX>V*tLf Nαe;}݅bh3Cd#cq<:fϚ xVRY; )3X\SG9i:)-a5Z1!3}۰hp;9vvςo#8VO؆a}OB=)xnv$xeV\ 72(N_n:DN @"n\v|.psE 3Q7ೠ<<!ZȌs/d0 -|4(STȂRN+EJDUyqұ|fT(䱙S/ν]{4e5G579V`y.RLPA@А t\m$0clk:6@D3o x{n!xh5ZV/[{!ߦ[$UN"](h(hKXo yB5v=GB,h|fKwP^S`gqޱeT.tt4QgznÞ%ho֡pfleqi@'yphTtk"+WSfY:' &:=> 6iH9[P_4ЄPվȤ|yE/gޙ)l;l Mvk#Q`2K7|牂 AHߊ+2;* < xM~g P\ h/D+ ف!##55l n =@}gH=.MB>DonJFsF1j8w;0AƐS~,gs^?qv;JMCC}Ҝ7*Xlz ]*WdsM哻{V\r7㿳fetd'438ЯM{q`fIprPtg]Q'4 @}.Š рOI}iByH;拕RSP^l`0 I'r򬅞k<`G矒]i(gΠ\KńgD廬{켚0xv`k/9î _$p`=(зmgtU!UnχMfw[/3ae_@EvV 2 Σ-~5QTH3 5@'sA>Rn]ٕ-*53[VOf@6w/Axv3#N;Ixj4'el~^d.p7l"pA8t%{ɣn (T| / Հ|[0^B?B0 4.'A8^/pDpaCW)/x]QH@-6*-,H/ m]a/qp/ iiA]6kmTcW';0Oi94}c?+So//tf3H톷SٜtG"uo=ۿ?9?%]< @IDATYZzbj7&Ta'̼'C 4(禱ybp rX$sIC~{72󘀆>0QYq]æ5/ UGP-8Uw !׉dnXd??rXb1[x  ~'XG 4ڒ/Ԫ4"92u&G ot7{&.4c%a6iG>gS=?픆 j `bx 7F/0&Vz)N ډIx\~nw~U (RS4N@9GVlW2a|Th 'kpT̴{DP* =َ`%(G tX013WQ<(.0|\(b)XI|C>jR2Z9a/acN)|'\ 6ޮY(ض4f.MQ qOp&7@A^!xG, t|"hE`H-E/ |;s6 D#Lhԓx`<=έ!_Z4 2Q" 8g'k/=ѹi VfHQ_Vt][m~m["^bWeahC?Ϥ)%^3o_zH"_8k1k`e7o_# +E3_ y|*9C"lvXGK0czE`_$Hfy'N킏ʵηh 3칭 _ >%8"}p/z6m񂆎   EU?}˵{n}uF)nYz\zɩE.q$>Loľ[~7']k2cZ5rQ/r2˩RPzsٻ).d~,:d痔nZH;{<lp(+d&߱MI6 Ln>9z!6 &p_c鸆ʽgэey^Y|\A'1_Ώ{VٙwIlGg3_aWi7fƓ,. =7Tkn%܊|ɮ4c1&pByF~I^f&L 42pXί Պ^ oŸȗ7Xvg^t/JCCp8<ہzukvu?:r_pn;FrX.luerpGW`#A=C䃻.op.=M ۑu. AR;7 Lp\}Fve_}7YYt@ǖ  dWb;bY4vCABvۡj>f? ο+vk_A8\&8A[p~@(RV̼.{w)Hw ʍKyy<"xX{>,@_l((/ )8fݚH;?cWGh࣠Iov'_ RgO\΂yH/BYK_[bA90BN㺆#W\`ja1+(ʥw1P/)MRQCAAh&9;MX,"âw78Wpl&w^"H\>^brfS9/!o`nS+%.Ԋq7ƙss~;0s_\&ȠeFZmmC8jlÛw eVU\n>5ksyUߣ  $Û!zsƾOS NJU 1g@fx耯o`r2[%[S(|3l|O3Rp_%TG7!5Ÿ? }Ni/ѥfZ%#cytĪۄJws_qҒoMCٛ+A2>>*@e}fgE銁3 2Ŋmy]nĺYWg^3>A* :Z AP \-ޙ9N^koz1oizACm8N{Xaݭ|[wf@-Ȇt%x/`TٽH6D ??D]2I)箥SKt p:4-Igce笽w Ym9 (պRZYl2y֟<@z@ 7ن- lm뷝a-e[.Fm&Vb|_R`}(He Z,9;1{Q|x :;JW tF:Bm3jtnpCS * iÉKaWډ&@ LK>+&~3|`WGr7#wLDYe|"Ї v%PECkYD;q7ZNq[ֺ#[cZPBW$N&^^tzo {' >d\nf{_͖ؗ8!!Z|Y+_iCGѐ?9j l*]Zà4n*W }Aص +)3M;{EPUI k%:j;A~KT Hs7߻|x.M:-ݍ=˼b3ms{;\ ̮0|n hgD}8CN`btBx+X5qgحd[5ћ;Xp~^YU^:P16(f.U6(lBfpd) L&uj鎜埒°c}! Ȼ^JmáE]'o 캏%0{t?1w n܄(|dٛW'.bSܫSc0kEil,b[/H񹼡d~9]}6Kc> 493(b f&pǎ->s̪[@Wf"k>fC} wwhFϟ:Buj7T.mIf{5쩥dEIz`Ĵ= ~o^/mx:(~bkveoOZ Nypoޱc9fV }]v}"9sB}A*D&o Y}>> SAx"QGcG?Sy x(A<%>ףt8 /j&N]#gOom-*dliP.mW( XZ $_Nf%Bj`|U 3Ptöa?LQDwwҍE)YVw _p V/#}OqZf&vIАAbDlآmOú,nJϋ..ٓDqR_$O$^{H y 4S;w Hݵ5~1O4LPG3 =n.UmӁvFcg)33_OaYN-;pn̟QAekߟQQl >[gV**?}nJǢd]"m^c2P/v|8ww2ۅP7zG>>ښ 224? ]h7vn sݔZRoMl9dc==-MrC6W=)}GiWu$L{aYIcxZN sޙRPzr(kGJIs.re)vV?l_ޛO?^W6deM3M+I;j|:8UD|~4z1ykD>;>{X5Fo:ca 1^k5rQAl:-p4;um1zrٍ9XP4G рT;S  )9WAFfZf7KȎ  #n-~. 3Y\Li;E,o@%Xi>la{1,lm o ;r>-~Cg3n7"KX'|uΞHi[ߋ0+ o7z`\IqZ&r0ק`Y^l=і붽_ G% GYv~x\6gNź ݓޙ{O{Mc X8vwcL}\sH)S_S2 y,Dp_v"Eyhczꖂ@Im ӵؙZկW!`;2dn])iH_v 3/u)rN$ A[Of wGs{+2: ~ Qfg *W * ] _Qsnm(w{ لfR GN/#fǏߣ5E ${.xK.ZC+r~]=bBه K_l9܎\̣) >1AN w'%bJ/\x1|Nԛ˸6JCz%Cn3׹3z?3T_s]gJ-BNWtL|2w\G ɞ?`Fn̕W҇҉ r T!VB(_pϙ#87=fԇ=тpA]$X>@/  "$A+ѝ#HW4-V s[! 03_vwsK {}>3Wowȵy y1Iv a}^Onz1ZY}nH9f߯E߂`:as֛y-ڻgu0ro9z>v/Ɲ^t|\<7䄲36as$wJ?LHLSAQM5y 󸟅i%濪ۃMM}{xT m>w{ %h}Oi:mlFA7A N] ~)B/b {ur=vچM6V(33~f&qH3!dWd"гGO>C?,ZlN=zA1u3dkd뻝 Lk9w\Sdg',I#2M~Œ]|GM3å \z|Y` `aYdtzp!=X@VIY/e7OKJ?8 ]GT8ҽLf'&wN$[/yO+ _w:hKUI8=ϻkϳ{?Xa/!*):AB!7.!vzof5Nl:(9:9zZ#--3fgռ';ƏN^v2?7x(x;ң M׽f׌B %ިnMyG Ƃߵkoyd+-a?>adWu : wDV?mb8RnZR֞@?|)3O梙No$H}(QQ f s@6}ǷV}tG>^3D wk5{и?G dGC gG9u2݊%j?=.{g.h|/Kpv9`רÍ /jqw)Ly5{T_!`w-+ѷXO>?!_Pl'̨$߁tS [ * @)??݋|K(_|"}a+ $Rj#7ri '>\ؑWe-nn'.SH1dȓ|)2\[~EkWxz@{ӝs } k%h_$x>ZY| l׷ܗ=F=Ug숙}S}n'E؈b)ꜨjqG {46s՗ʄ\~>!_h>C:( - )7#=tB2ӋbX@u$Çz٭AIb=3t:=ȀCɊ4'ezɌOsÝ wFۿ1eX# 8s@O#h-hPO 2jCgm j}S@`|;%ݡrV³0I1]=kEK_.CQ,{qAdGD,r۰m =ug hf2קv-oN֌A^7'Ŧw:Ơc fLZ  Σ=L|O- Lu2yRBrG4 =pb)v.Ub٭pyJ|&R51S]J.\xrF jiTtg%]:05`Y.?ꣁ-~N٣k`fV^?> yG0(Aw?<%*X4hԌs C-:ۚ1fZȘC";2X҇X@vYB]4l$RR\%>ćV>TTD&: ̻ZP!)'#lQ`FZ8Φ;9|!absB3Z0c@!H ,AF[0HEa&1sAFdw@?6ܷc |1W!}_&Sа>R/YNZ}نTpf^n`ŭPAzJNHNHx_g)eKz'? :QK:*ϵ4#q"?]'_My[yJ$6i*%͊&94a׼{Fn=;5jQhFcZk{j9ukҿ zUQ9GvOT~^wRᧅ7ߔRlti#f^:!v;Gh`{/ G3Oa돶<'=|) ΜY[7dFe{?W $A l[CpSaPG0[ ϻ|{ $W-{ j65)UsD[ڕj(6y \ e }4S^_ȯnȮ.hȦG۞df( hd.k;`= kcxi+ ӢzlOA86T,!x|%F #h]r ȶ>[{ 9>~v@Uf+ALO6Ƚ;3w_A|$hMP&0vD˦vq^ 3rv"#r]qh#w=J{|OT\.hpv?}ݹ*">gXv{nIGN nUV9A<3U\ vf`"L+A:!hg+UYSyLV/VT{v = hD[NakvbX Zw65w۳ Ze,N{WM2\ uhOf@C*vdXNGႂR>JPؑ n4-hXU~tKّKSycO-1LFNgLD\ Fb4Oh-)5Zmu8twv1 e٩*/]L J>̨t$mÔ ]#զMu_qf>>;#h HHös[ #N_Bk KḝΔPQxVÚHTcodOS1  >3Ӓop؏ߧ+48H3cXqSCg=:z#3|#SAۇqO8n5cw#e87@ڙ^"a8L78{~E{J3ie(؏'[-^I M5$@O$a]PQ A}wnn[}/ )1X(8dp|h>Y*x3! DL>B4 V!{!5Z )Ҕ xh +pwlhN}~](݇rt{6K{No):+Pr-H=F7sڸG2kldcB;c)i$En[6*3dN-) yj@9(,{N*?uq)Qn _HBt v_ւE{W ?B NbcG~VIp#P?&<h5;Za4{ Yu A<չMXϻ9l6{1{_kC3Öa_!4:9Fɴ(I7/4#<35ֆI䷥Z+Ϣq$64 fސsGO΍e#2gc#9׽ލjk˯p]^F ;םLGzpt8&6"6^o5[8K;Uu=IP$8ׂ.vA]A5%!^/{`A@`V dc!5#ztG-m^Tol=~mVUzW-f懯 J``V% ?RPl <1!qݴakBZzɯJXD{^YQU+HȮ>L}榿hkor[b9S 1{_siXC.7f! wv= 2\ZI?4dؚsU$v@`4 }`& }Iʹ׹9ysMss)h/.a'~A}A`)00/+6/h8*(M4c,pF/fqo.}Jaƾ]^wGl r33ggW J3=Ya P;V&R@?h˜y:u(urB1 /ҹe}P0ߴwur湊B|dRW0~vIv MvDeyŎzvD5w9N>vi/2ZmucTLi^jFDr63;ލ/4]0D)󴅄 Cd&tex,rj"[ ߒ˯o\WXOviAk hI}@\k ܢ\@`~ְؙ+Uؕ&QqRQE6Fy@GEVjhF͂;ٮ` y@)/ dAP  nAx-kGG+rЀ/ܘ GQ| @A;p[^$}X^ ]}֑h1 [GK͚Vy Һ[-!`l|fQo~zG_3iٮ(^d.la;&?܅4\e䓼D"썗&NÝ7ܾux9ۡ##i&ގ2|ѲvM䇯rfIGt$ߓOI4N?t5½%> U~mp!sA*0: #ȟ~Xp٥P;l:-gьT;S% ݶ9N~[ sw*<[.UY!p!Aږ=eC/M»5&GZ;qx 4ߘ#4xpQU]M@2.r_|3؝olnsm-኱ źHثtF@\l)DӋL,I]P^'e4\ƗLI}2:.U4oQwut޻P{f~J-:ԋy*g0Ď^QOԑ^-SOpKWf! Wvs?^+ PsP#cT8 OI^-mE?_ev 'cy<_`]X&Eޝحrр(mZ6'L\s:t"S ?v%FCt JOf# G"82]3ң|ˌ_w ~Nl w\ 3 Ch ;F#8!Cyèɏ!ף> ECAy]Hv "ED}AOOQe  ߤ֥c-^-ȗGA.76O! ֣V7זl}' g" kwpVk-- * v+("vŮXc{Cņ^+*{AŊ]HorNϙU\ @dL;*(F Mzmqx(S6 9N$8P,M>|d  \>a?n)pA=TA NO>xE=rG>+'r@V7_V#b]| -z v|ɻ,BA1A_^5[ K4;+W}.c:A@: vO'w!%f_{r @ @b+e߷5_ŀ/3v[`ok$Xl v! ΂~ ܺ}?q)>P^k dǛ$זhi`[p+a@ \F a3m ΛbX}O1?f1P<#&٥nNzZm9e|3#,,#gCʢ$Ey# |Vӡ@ ;:}|ܻR0b_ȿf'ChzX#Y5QeB檽.֔HxǬ92- !vW=g \c!0̹[m}nDbuE B ܢg❆XLtt({m)PM?[DTjVf,lJTsmes\otC.o~#S h7Uʵ~ ܧ53%mY\v&UF6wXHwy8oK=JkL- 9 (FE*֨X> 9qbfb)a)1d=^CbS+T?z@$X&j_aeu6Ӳ$=[N֙MWұ޹r_WҪ{⾜4"YON<6 h쓯O~~uŀTl߇|"K~z@+{U+=˗Nm}욢B|*Ll#䏅?I2FLu|dՌ<%9q`:(h6# nS'L{~jǦSG2,^bR `%3K(?An&qU*l$#5a+R]@IDAT*I$_f*&dWɮBGMM6n1n(CY%*w**Zڴ_~wixUëw.z5~(<=\M|(8~]d,DuK˲9=-Pϔο$H ? ǚg i[&H'?P K㮏ǹ̃ v rE|C|@UߝG+,qiu6x"(m `Aqn-M;^K\ATEX$8{vskwzX>f r34 z@>!7__zEA~\[Ί+A^c :rt.h&wƬq@xRwώ) 7_FRH:tFU2Na⼀[d/Hi9{Fϧg[\:϶ Y %}Edy\Lo}Ǚ[#+(8%s [ XAz,/@>!|VD$[ oւ}DŹpܹ$ 6熂\C2-x-`A@^mEM5HilGr:[P#|x} K#?gν*hOH aApXj;N6篽 :H܌xELyZf3{ٻϦ{1S`덦}3_ԿT츠OXtH KQSC¹(\=̲?EYx1n1O-cU Nv~" 8 ^jiLZƯpG 5tvdqyq n:8՘%ԛ5à ߽/8s,  8_h -W.04=!$xZ|$_íeE,|[Āo܌poHI{b:_0QYAiJ|D^t|LƦ?d.!K{[+ɚs% &0fUG7}5vU䷹gO+߉w<CsEUvǼʏZr)bC VQ|J=+3^2$E}*>3j?l۰$o@2wgtd?r܇a$>͆Yy|:@x)Zh-2/f^&5_?"x  z޼gHGsFA_KSkYb:_CjoIpzmI~L%akAv3t{) Ҁ[G{+ cYF/?~~tqOAFP~!lx3/cA>!S¤cw};&eY9qop`߷0>^ƣ7 EvD􍠜RО/Pj 7 }!bh ȇ'.W ?RP_&M@xN~K=T[*PNEG~)LnJr๽Ix.? /SvVyny/{&񮨽}+To~`g!? V Y?] =j+ p{k ʄF CoAR_gK@-L%v?XhՐ4JjPn龎N muݞb@O3dd/˓Jc{NkXsP3COyVO _Ʒν_*ٹ4r>ϑZ;r{;W{; _@.Ecb`y RaT?JEfUkorW$g&-{KInfgx^E0oi(|>AA3V𹽋PzQf1C3e5(K?XiS|2'vRSpS5cj7oϵ&!wr+ٟ{0Y3KQ|rs_'&xJAA_חA-h_&(=k "BdY|8E W|r` VU!\XE|p~YP1 FU7>z70:gAKoj![8-;tA|.}oA|eE-zތ/",[t lqyC*H vV~`$g*FS3IsP$郟k]'D=1vƻm!RHS(l=SE!TkK\7v@5m)"姜 |A٘" Wg:f˚韟S50~xv&mE㮭&96wܭf͙bn6eozӯ'~)GyPuBU8Mjaܯyɠ4AY"qJ)1V~StGPrU0d?_g7IPC2_J7KLw[J0A[/-ssdەoc6w\n3Ù|UŜsP^G{nF(sH"K:IsЦJؙ?T[[t3'eNi*ݹ=lg68X&7})~.^o:Sֱ#۰hMWnMJZ~H+@7)@=R~@cP.F.f?^rh|f##jRVQ&)ߑSk\S D"?wH-"7tv=W.q#iNa:.L'62]-gN/{#zh/Bw8Wpq{{3CpݖZEW4*?j EfP4͌,,Zǟ ;|_Qs[5cS3~udTl׈NNO;u?CʏUêu߫ i\@MnNV'T 0,xu̖.(gڑ+r~C^*֭0!ز@1j/a-VA64tm#_ ~-j~ O t*k}ACPA1v0f˜7 X#|n0B0 g@ u ^l#A>^7dvCn%݈\E ϴhg_ KB\#Y 05GPdoYCdL)sZAZR7 j!K\_|i{ug'OL6yK Hi7&{E;hmp @|5M&u}L Q-:/_U[*VMo}vނ~0ъϟZo1tm;@[A\頕аMnzKSkzo;މl#(W EP~X Q)xﱳ#r@?#H9Qn.'m~~^D ~F".a0Tҷ<-9Q*gK%&$y/Gͭ zQORZN_-͛BHjU||a?y~-5?~# {1&7iRX|BZc:p3r>uQWTe߷KLc˪qWGٌ\;wa :g M]]d*9~Y"AL-rAQ{dP~~7e_g(_(1)O0]Zd5RSJf?Kp|Tgɒ $Kf޵L$}dN~̆RĚؽ #<&dHޫSuIu tUnfn&4'X?&'zJ|}Ԁ"d@+~*eܚ Of'6JaxMLuIuAO}"Y0Ŏvk`I>j d`ߕA?ug dcAx _;&P~XabgA=<@^f~f}^PF7 v`} YV۟ay@~''QןT>g {φN_*[3qx6fƼ@&^ 2y;[jGvOg d?A3-%>] MłVAׇqXK?`՟rF H6wyNp c[h{BvJ`yHw@z#%j`+Z w 7 :Ƭ`~ڂ .yȆ; {F[Av ]!H~ =߱d`<:5:~o,ϗ=ž~@~~Xag zYpXYģ,ĸrǫFQh`@{{-ß˖6VJSҎ s)%uS2{;R+t72W8K$f_%fR$'sq>4^f {^ =}҇ 87Q'`@`^ :9 ? [}ܔOsB @]<(d50,q\FBd'Mס85vU+$zΉ6J;"R[?-TVwkESiky4/ژ|6sF Wocq#42Qӆ9ܪ=0Z+>B.95|iJZg!zqrkV偩7/d陙ITӣÝ$S&O&Ǯi9,841ZHn dc"8_m.}(ͅZ^_DƷ8;Z#{%k'; ͫy{鳋4,.ɂOHpi(BQ)r{nGM>7Z/Ξ<.h reOA9I7X o뛥<z>> ~pk4֔}-PL=#'vC*8h__p8;ӕ&?0b|Էs .dD* @_[n;Z WO'M ?-0wdA* AzM Z#wxS#t5fߍl_%U.@?qx-O髿@U?#o-sěvwNonFM D? yՂ7￸/Ylƒ70[huz)ydij_o"6S(oEt72)̥Z .'˔t~1h ,x-'pAb;' n'/pu`X ,No5)|*aToAq[ap޷ν?⣈ӚGYh~EOrP8ߠ{~G0:^#^d^O#3䉿WO$G2}~^?ژ X{'FyFSCd7RO|zum2zNSU3")go(YrX C%37S×%qD$CfYi4Gٙ`ZDI.&Lᯚi&'~J2.gH?A d1%>ړ:Byv Mzl!{L\5fĢ7gk@[V ge\RBfO, MF'c1n!-5˵x@Ct$& kRk0CDkwb|ύJZnT y5ij/'p̯*#_Y~c#j->jcUp ȃ𩅑zB +h"~Җ^N 19Cr{wt.R޾Sc:WN.*eO~;7p6|M}A9 -_wqYWήl,ʷAu?Jp7s޸XcEs rE ,b 6Dl"PϮW@ȽH W.9c8<2pd6orvOaX8r =/#u&A:& |g|BПϥbgo 7Kݎa޾ K%3T?n6 H&L S:<ޓ|\-1vFJ4LDKUɓh|Mr!CRyfwPslAZIPnqp#S9ְBw*Ds}v%Ss]uS9.$؀w+fg?CCez?/fs)wULlO@}laU[p|t42%w!~ >K y[ nްs fA`kB-_m*Aq^@:Ops|#ق%jBJܙH.2 .JwɐR$ >B E&8TjͲdU^X`Շ 7 |sr[Dޛ2w"iᕱ m2=0{g (}W*xZ"U+=+ܾ#wt  8BpS`#rsA,Sa0Wk/A$8ŇJ?)b`@#zi2^p\$x,y:/ox'z7 ) Hvdւgu|D}?/[ զ6.kՎO?FA0U3Y}{w$G Z (~&>?2y}xK*ѮFtD bη7}|^PIkGP$z_ǀ/|;yzc _vƅ%bL)> _}skr#zF?@23jHsW=f#`z !~lc1| &xX'h3A|&6v$}c=A @)hW^-ho w A|ZW 9Lv`{P( j{8~BG' _yko%o ^@'y)5Q.$QBxAn "d/-}y.`~~Z f`~3~Yvȧy7Ě^!1IN|=R|N\~'̤IV֜YƌHO~7lR6J ~CMCcжtGk#G/I:%s_,5 e@psu =T3 m|w!H%OFQl8(7M}K1pν`ѐxۡT ݓfZ33u.$cN:Otp~ j3r#yyڎiH>e, )|@ 8G,5RAm !m-Yd;:j䢃cLÙpN-#V166}Ny(/B!Ca&܊On}rRWj*] -NU8P48 fٗl]\6rx zμXsaFtflZ5xx> _"ȿ 䙂|` zA4YpytՓ0.ސ ~n#j\5#w{(ܨ3bϜ kܦԷ|=A9pZP'}EƹdYP&h,(-GԾA;.2j F/ bAW**g]ry8w9͡y:B#o )nɴKߟ-a\jE)Zfvl/=+G51l7RC!4gPǜ`ʓ ~S}R{OJRSi~‚+Zb[[7W`Lpiy?  m\؆0_.ŀ/-ݓm+NA:}ޢsKyAߪٞa)u0jSiһN_K5k|LI["Ɯ m~K_!\=K1p_/AK+ d3ryig4/\! ' Ut"V= \mB@4=޵x߫sE3֬v_kL]I͟g]wiuսMO0w!Uv.t9k:H}*ʦzr좵=@׈EC 87dj<\Ga@Qz$2:=<<ɡy &Q^2~td;Q|T6^2sZ8F2\9]O2O3c%O'HQm3a@IDATg{ӟIj+.-~<;⛂ [y&>Th:2Nzu W~2XB-zhHۧ6= =׸P&$vTty0;)7F}o侣r3As uԷXtԃdA\<90C.-:ȥ~I.uuj ׯ- \{%w3mz3~|s zA<[|'p긷Vr AwK+ {.ʴ䗃?7Ӎ8?B K.]v7o.d3:!}K@9U䛳]g 6xZP8%?Op}{A~xJ= mQ6_>n((?!@[ o-xܗ,DӫG3\O)(O " >XA|%7 mA?*OCpޑ }A=@~]V⽽ox! 0j~"Gk94t c.H/- )\m*H^Oț6h :~W*;Ҝ#,$L OrqxAz[_sq<,)54'$YxzEޙ( 9՞=>>F. K3婎>~AB>AQ?'$'{1S"CX-[-,;H?:\(ot hp*W +ׅtܔ%V9~[yߢAꅫ߾[n~}K6Y`Gn>(&tھs:Θ.v2р|M('l :Md:8#m>|yC n^YE.2mn(jBvkN08物O(<=:L8'%uY]jrZQ4z&2GK[t+do,?d]T× dz]If*|h=ǙxL2_ĘK?4mr$N_#YvSm%OGUlZ–=.<'Ÿn/ג:DܕəvN# 9cZ9Y-jBs20zš ,t&\IR_8_(iKlw\zJCwM_\7B9"sꃢ׋^'M* 3x@u Kœp$Y^KTX翤qǸ#`6Y_zS׳#x7s/w>((z r[x 5+xBgjb#}a-A*ຍ,n>@Xh⧣ ,-<)H/5kگ]ۍhְּsY5N(A(HnmC' fF,A)p.(l_P0tقHZ]C 餷-ﱂ|s YPVs`/1h,5n|; >O҈͍4v4dw TA 'w>||y %0+P|G%S 8߆UCh(3IK'b[ni!~bN8jÑm7tpIhd#'> 8 GrhM8s&y 0oЃtLPZoppKʑaR߼g( =YWPNGzǞt<73FÖW{R4>ˈa¿M-.~VtZUf݂p?eMxYYԑlIAiSCSo'\S=퐳}"| Cqzzz\βZb'5 @F5;dǕ\E132gԓTVJܝ^u;ϙܙtftWTs'frb0*t&5W"{=5hεڊgÒЭMutvqV17G^EN?]Ue5?Ue<.ΈIgg>~ye 4!xZv/d{IwK/ /L#9CxpOFwEdU|de|^r81~_[rKWta#T>d|X^EE'IV ;e+ǟK4&6\Z#{,`Hw'^Vyfi񏂜]xSdl߉PO(^nΓo9_>2t܀4I#vi0 wkNzo5h7bmnpߴt|x껉E]W>.4fBp]wAl^[f#x~m-0Q}A:m-({]o鿃 Y"aYdp_$J/.  # T޲GkMzطO|}x}Y9A9 ~|cZzd@f&&B-Uv=?t8#3ׂoͥ^njǑۣ()L?dk+77;9S85ru#ۚ93ȵTM_.8=s&xEP.|#('z :B?+qs> }/GH 2!Û-(28>R 8 `6Pqp7W>@!n?GLjJk$[# >Co/QΚޭfϳU-96LjH>nWCYJ -=źf=<˼Bڈ֏R[mPSkfkc>_aH $V 3۔6 's+Bv)tȤreO?r~avmn$``@| $'[ Φs-ܒ?GgX| 9 J/see{x]Kq`߀X /xwus{ 9\u/;؉Ểrr@Ǯ i㙖aI H xx]&3?Urm\}Ck37 v!x} a;{mFfu`{ Az G9Pni  z"A: { ߝ o+'š@:>+?)6 |J ϱLp}[63 ɯ{s<-S5 oYm!О?՞'\f1@é|΀u%T́0aڛ6/k:du:6@@@uƋV0yz%KH__?>$2T8 D݂v4W"0/S;h4Q݌5 1nWg9B|[,:EPQ,#Ko 0LNTdn$v;vvcWK@Qy-[4,%9P'-艾}^x "oԄ&/^r@j`Y`S )L\֚4  К\0~ 2O [\s>E nzU>0 a? -2v5:W?dFp_7CtU׊s #aryM#mA{%H=yA+##u &J'<G!ٲv-**o60@K?Pƀcԍ?S_V>Ǒ'֋9(c ΜTw{vQݘ pO^t}" 8\$H7t '= Ht˼ؿ?;w]{̾6J^p[ 2gȥY 5л!dA9ꝋV6v:X+]4Gbp?~ l@8nsܾ03̸7 >+? P{x*E_\=13.7LƼ}-È֟QK6[ /1%=o:6 =ΈAEigbSy?X(5f޴t'UC{w>ꝅcy~6f(10~Q֒^ev &q%z9ozn$GC}SJr +sspwI~1NpxL8c(NLNP!?khQWa IH,\?dx?%ȺN5Vݟ+Y{9vV>D_JP _<̄stexJ&vfmS+"g~I{BZrnvה_T)3 -`M%H%^&_ w߁ rm8x9=;{W~|,G'PW f$ȟiAi?A@وKS39?C)6{O&? &OB?Z3eOC.Le2Z5Ϫjq꫗"?9v/9ޮ(zSm$OY7ᙾ,t0v{h=lf3FbHvnӈ *58gq-cH皴IkS 37moBG~{~Xa?_[>zy`1۰Z?NɟtZl5?h?+J;EYd\$f{K3Ejd?ߥe )dbdJzs.v?]\:qk HAyT.PG }1Rv Jѥ\Z-ڪ1yOnMxL:H=&h棂AAԍnj!zt3Ϥ`1OCcXC?~ GA%} !^3"0ϲ Wq#xd_PP4!$h"h.^$x_jf 3 g̵se7&Yo3U}RZ4&.FhCR u@ ܊x~2`ɽ{-eekoL 0EuhkH<&8i,d,b[l;9#/_ŀSVE@+: ՂǿMP.*Hσs9O>7[u"^:$[r]q]L/'TVĀsK|Y >#xCnMw`p`X`3F´ +#-N-wPG62t=QEhz@Җ|&:3&veڰTLA.E7(z4gGfv储yu~*iszy^ Gs,C W\ЃahCۅmN}'ѭ^-; =Z ^9._ 9Wt(.=K6e~K;b+ѽ@!3'Af"qjnLtLJKyV1$S$[OJKD3Ih9ev4I2Z~dY!$C'(+a*NS$[.Bf$y_ !}'i/Ho棷x'9 ys \qdbԽI_ls)_'[4fXTD-Bi#V&cLƻMxk\f))$4ͿSPNIn*ܺs!IqaqQ11|y? Ri j]rԃ;Ql[ 2.+/^,5|Wtq]=~#An;@*r#VnAhYyee xqK$H|~GAy\{ A[]Oc{,4RO $+AK,$ %)RwxENM;9S,嗟(Eެg.A<4>Ko "0dR9z v1{d#vKbey9^WDqx{'aY9{tн_aE| {/AFx=\`Vu+J 7òԾ j\ZL^ԃԲ+'cϙ0ԝJsl?:VvFASA~Pޜg[W?[r"4_"Ԓ~w-VM?:=lc.Gz_ȈYYty@1q%ib;<*FO ?1GN0 iZ7`. qL&@!0֯cw?_ e/\O!n~}rU`@}%sg!  GGE!2CgM?qR-H,iN09GAM4Dp^Zb[}ǽVP@p.턱x NЯ`x鴓@Ģs8A?#f GxYw ڷh >Ehm!h](P3I0Q` "xcS`O`PHQc͞myxMHxD/ŹuZeocC<{EP ]<.`k@\XqA AqC 7Ruu%g|߿.=}@t׹rk#AdfU!a!3kS+ ?yPxtVny5$DFyWkHg93ӈ=׭찡؆4*/' `ɛ;j39W-Q{|%O\)ȗ A@/ "ѭtśW\m18વaKB P2u5Y8 *޲ +Ls(IwINiXxGL~K욌4i.F^KCUOTfS1DgFcxN񿂎m|}_kҦx1|lqam1y103Wrba޳$=+n/XtZ74rg娇l+>agLg2{?okr:xԎzse`&%Lw\=/J<4c5m&x6lW#%K6n{fK^&1ob{DP kJ69t]}o0bɺtnf5Ʀ/~v):q3}%S|QܱCt:Z}5Rj)mZ>nc2Wp9}Z n9~;;;zí{jU ,難YQV`X0,&I: eيlJׯ(@ RcKCOF/<{*`vU]:TWwi $f ,@5^ڮrE«礏W~yk6/hE=(绮z˟ns,a.r0f~3a~]Aq\{SP#Ng4⃾~%\}U3]s|\P(!^Jn}uz7u0+_퐉Ecռ7p,oAlvob(H 5/r `]NKxO~#A>$qǖ<ҒGzmArA)@e=.g1: 4:r!qۏ܋ƇSv+H}j`E*~kpURkdC>C[pq%5C-R'e:6{oޯrWvkˢX\uI4;O>qVyϑ/$F$F{Ko[/+Y8ظ⳨GQSNW(Ml%ʦ~ڡ^9KJ# + 佂i/=M_Ay$l.ݶa6DC{CV4^0w@ϼ(.mr T;#+; w@>$ 䳂 d'!o;aPmrhámŀZ[#@IDAT\0LVAl*8eDz3$Wwg1ט=FN3C5!/jNքmoycB'ހIz ni us~9yxˠ1oXJt`[m&cI{ ,{H?!ЛW}ҀksW?v1 dfw{^xCG.Өt@7CȆ8:exT. 'vbk5E%߯lzfa`_?!=MsFkEG J#hX;hw+u7$21ia$T{@n \ _O8IRxtbagj+,bI:EŹl<7 FfGÑy5ȕ?lFQv)2A0wA8,H]+x"jfYsTmWWq~ ,h 0'h{+(P'V,[ dWA|+0n.'ւz٥YS \L}^I7XJx7 m=F>+3*誦GkW .訞 1@~Mw?yŸ^; "A>Ϋ] Tymմ3vZfx? !?p0kU mP:N`VOR/4g@-dc>2?T9Xny~mzw |^? |hiE2?3|LbE~ɒrK8?KkI2hdqV (%--Y-k4y (qwě({C_z&q5F6IeXa{)oSI RQinnפs0Vo 8CH̊'o'S).l) >GT2D~p\))u~7YRDJ3X1:nS͕wN?xi7P,?eܧʁ Kk5z@6|^΃V*ݖjpTnRvB})8`A$Ğ򂮂w ͂t1-'ʁNO񹺟Ŀ#_4v=&%TyN?]X\\ݏօ֘spK[KbM.>\/M  n-x;ĉuws偋X/y *}{ o@#{ lY}|,,^:X9/M䇡A*XLǠ;+`z5ʚ>f@tC$al%+ '7/8,Lv+ i&) n8ZΜoލF2ߗ0md@~ʶ֔(djq}&e<ѽ!sءw={z@)!/;>5,no|Z,]:FQw*{;_)QY  ۴F9{ғ-)Pu@/v,%0MBo(L`8 #G]h;Ó۷33LA+Z~DxdC\M~oj!}.NTg",qH64OZYkd=0,n*_0ۇ($RސyR ԃ+_6TL9~zW\WȊ yob[<7Il5;  ,+D~U}?~kc\D_ ʥ]Rт仫|#AтA{J_Mry2n%L3Dft"05/䏭=X䣧3g-dd u2x?z#1t n1SnxM)7 Myz7c@x(3G_*S^P@< 2ևUg1YLpA7+zE/B/.ha9ÖSJ(!+yP") Z')?ӷ$+MIK9Bk}>e{p'Cx&fJ7#zqKĹ mն9ci`TmS4 }gy+A}c8(@=~\ M*?h˾ +~y_ud=^JAKK?sw&aMA+euֈ:4[=-@ tRrd%knV:3Rטt"d:lT[7x*)[:^QncɒXydX28""܇5b )7~>Wy/y.~3/ G #LJHpR!|'O w:(]~wOd -A^7[NEN{<3/*~&% C%JWC2 Þ3 k_CF({Ȱ{4C| |K]xˣ,|,Q; JR0}+K> 5̇6[VӦbgnA6[r4Qp$ܓ§@{k?q,x;\PO  =n@e4D_vV^ 9]Pw} t7 ǿ wkĮ,I^gHuxFvX_pY_  xTJ ; OABp)cbbQr[ge@1n ٹVtK[&"E[ e0˂lM4!1A[NC{jb՟t:S}"0t=-_k@=~ຟw }tS:Cm9\7|Ø YB'..>/z؏ `P\7öx`]t(~OJs3Yi{C?LpܙF^M®|ʟ1 0+RrIt6#]MoMK4yt\v '9y 2 ȑR;z4j{)z7K dEãEC˵C^9eCV֔|xDp I9\{6o+;0)JiǠ@1Q){;dz&j#"53J ?xxre{imx.pUjMJO ҶE}_i) }H+odkId7D!Vo`?z& V!b;3O%  ¿bw Y}Z-xD{cuU!X5#jM\}Ʌ{Umwۯ9]ǹH&قtB ӂ3A%A=c7Ar{;5-aƿk'~x=bd y 7cxC%7 ~Spxzg-0>Mԃ N| sx>Ip卑s]ŀ+uԗ_'x'-53D&ܬZv ޴[ݿbϕg>%mH}&' ߫yoU{ʳ7?)A߿o|Y!>z?z66m呏2}O[q>ˎҰמJMz_ŀb`Gt8 )܊Q>`3CͿ.f@倁MWӃbaO  .ctӵ7w?_:6B ,L]Gc@+ %25ey x&"~/׮.ۼM9}~~L+g@ve%?Q_~N`&O`>*8>JM9Ap} sX}|3Pq24Z8$ cԀ⹳799??8xDpX85u_ λkݜhZ}, {Of.d#nsƊCŶKߙMCt-f?e/r4~c 3ǔ4 Q mI>)pH!/1}"@a>)HrA>Ip{li1$ab<\V6hVu [ 4tIj7:UR}็%e#,U#鞭\ú*?ք $^Ͱb@Cr⩊3R$hlB8KjCU2^{GXڄ{STYInM?Jn#y FWtPaAn Fۨ"U +bZs#~V/s&xȃK%,V,$;zgxK&gj`ԜrQ_Rʃ '`q NJg7hPD#_S00 IMIOq_jVgKug-+ח[fy!\Lq~ i.#1sv7 fmD9v;2vU}.[d, & */X%qHwѻ-aS]5F`仂s>Bjuӵ7Hss1We>EsmF?#Fΐ4U#̥A(7aTȖfo+pKd.F_m'bh yk$bpaHk5\]~p3A0>%cA{J[ QT<o<ʵ_1ϗ4k}HE!~ N N缷rfkwG5<5pTĘ?ޑ'ۧ,?办K˷Dn]vxawN,ŀ f(i- e| Hh#} Y5#č\a tnȸf?ҸI1A+-g@]^(0-({\ sl1TEe=X^W3(zHh] HZA}sV6-3-Ƕ^SL{o,żLˮ]F}"[fJR99^)wT" e@W xaYQ1O c:a--7G/Ų]w7;F] ѭ786#} [x[~V- I~FnTſUP <ݢtw.*=ڙ)Wur .A㍕wf]}=~CG3TAĦ*\;Vn‹y@O'qv'XHظCu0 ?@J0_cЋ0>I<*((-X(F}ȿTp^}ws˭!7<VQw}{ dy!\,ؿQp~!y\h Yz[c`k !bWb,xT MO s#˝K{ Ud c[X81бN'O^'?PgDR/lay!Grdd*T|*=dcWrmsןؘo^0y~df,57=%7P^T(C!=O{.wÇk[t1Mu_.x[ch1v."M#}dD FZ;|);:yvht0dO _epPHy,YȾB}ygy9%KoV)fj:x5;ֆu| >7vHy*qp3T $?Uop߁g70\A>,x^Po/HWB,Saŧ3~|R@m`>Jr[^RqzxFŁ!K_vC|ڊ2\1{sԜwQ?;_u6=Og%EY1Q?[_٪dߒ=m<ݼXo 'ڬLLGIogoOaʮVު3=]AM lJ.ziYWg'E js5o/Mzb+^"<x/=EkH'+ڟAGl{$+Qwئ҃ -ĝo<&!>/AT?zM)gMzoqng-؟mׄfQ^c޶#x@ݟopAej<˃DH֢FXy>锧l- N}ox+`WӫIl~ooLL@ޝ'CyQp[+qdǹk'&$ 2zXHĚ5?ĀUvďm3Z g߰HO0(=?35~5\v./A}}r=LP,TB}֢a˜ ,(/ƹoK8{kx^HA\-[_ R -t]=+2 o+zÂU=A1YwᮃQVr}Zjd2Az!mk˪<' ^)NBAQ]sr O iGc2ehv|ܡׅ7WLXA}(f;57&oPp\1ԾP>ϐ&Y/ G''|tGDx3'lH`r<&À!R߁M/yMݱ.Io1$j#_ G2x?&(?ZOb'Fp$poZP#'KO\ԧ6FǂL6]Eݭ:t ڙn =>`m`{#sN(ԩw3%Bt~"Ci 1m2OE7[#ʭ1fn,𵠿B}`kAŲ8^^LF>3E`s^q{YBQ!RnpnŒ ^+T xddDv@-SffzXz D6GpZGlO-B@do]!c3tt:H>Lp} ,8,W_N߱/#"A~9E 11W,|-~w,nF"Ъz@К:U{׿+8Hp~A&ePv|bu .A;$AxG[>΂I? 3X[nBڟ1pzd.>#"u°>^")G=F\ /gIki".`ƹ3[~9?J?=(EVpNOmWq“k4.hL;'գxƔ#c޿.t>_g}-(&] {?96K)ڻ} v-}:ʛnhvesTKނJ,8ĪxWB)3kTwb%d87lPpf_OS+ o>v ipUj O*Y ? T8Wsz }w p~u-dpfșr ]3o$x7N'P32d[B`Y@#2G⿧ye`#u}n"dUU2sJlִiM70qd=bþdB$76'K2WiՄl}g8!n)}& 击h-RaK{&Fq~;'UU.ߔv ڙ9%Hg "A:$h/~3b$*&{{z_x_bЋ\47;-j 燈%?̇n?3` ܧ((uK_ uAzCp=u@:Kwn`gE(NJ.hJ,o ]Zм^%Me-"_~7]=MN}6VNFaxNЊal"b-4,Ɯoz{ F(bA:)@pv${A(NZb֣?ܥWWn& et[s{rb+_s[+nrNX"5J_S?ҹ-9zpfD0Yl6+7{nEw / 7˽41<ݭwYP읮UK;[=9r#YK"޽3RY]ogNnYMiyl(_R?O_Fʑ[]Wr,A?LV~d<-N-9gð{@qo?roiN=PW GHzwY!" ri31ߞZ!U-ڬ"2^7sV@@^zv3kn,˅ѵpߧkjog󎋞L ucP[L9A#,P 2N.Nhո;_vy 8_m|s٪(vBM@A³E] ͪ?)}veSz _xԁh>,uցWfSzn_0"p  wp _aL 7!,TuS>Sr'8נw2Z1k?A<Ӣ?+# (Hj +8 (h])b:?Ң(B7F)ʻ|zMA w4鴪\SP m$xk-Q@4ßf0Aup W|2V,f'_QkQo??/-kvU5{ C$M4xS2t\VðFR<4I8wy7o͔*CX{^l}V^Vc kzB# j޽0&7\}* Wb#ld(3Aw={x՞}鵥6S)v 7T{qaL>t66`ں?[3n>h't$z淇MA} =/x~dA!v཭@>/ 7V ۉ[3(À:η0hA6 JPw@0E aZJVNdbr5{+I@SbиͰ&W G VJ$L)qRqݹAZf,W'&K6p276aR:DmILӂ@n'Go-E[_}>M l%/sc1@&/Q3;Kp_'Wϻh-Z_d[6I(h Z1r+\Ypu_Ϻz#2um} ]*5@IDATr 8 gnB=\8]?5jb Y,b/‚,n/Ⱥql{,mnKѺHM޵?~ @KsO!pH8H[Ԇ'FR#Lŗ?gZ7;LEͣXea_&Luߎ_bYԜRy~)܄#G~69'.ކ>-&o=lM"K۪(bDyDh*V[jȡ؏y (7 qVx gZtHR.J1f<[,H AG 9KN)X=K P\5i(,c~;.BA+N=SFۃNQDgTe:'w%/j0n K/s_ Ek&w(B XvnUكz0l9APsJzx5nU/lHrڢҙPՖ1^r\;ۧfD9 Ϲ=- #'vU3ɿy/OTJCƙOps ԍEM=o""Hv' ԰ a& >\95᷵@F+KO~v. 70txFۍ8v3\ź|+g<_:N:K'~vn킉MBfry $(ל"uh\z\yBg!) @"rŢ^&~O:x[+"ւjbvWFU}H͛5o!z씲S0g?}9h11&N|0/^Z|U Gvo)?Y@Hol͘M?e!7JM%35>y-uKs8C@~g/X'wlc҆|v t[Z2fLxBz#J]7έ_n J^i !U3cx"vݚ Q.8V&I7i'_ThC=Z_]Y||r[,j}Xg!.Lk!F%h[~7_[' {& u~g!@Ӗ xtKlo.B^H˽W?wt^A /ƈ62]4v.d\葲gS;^8u䥳wO^I]-XtSdvjc5j|n3g~+vD-2΂LKg0Oyؤ]>c[3ţ+vX#2Lm{s܄eʱչ|o#S]4Ax_ykWOSRd4 23xu3[Cot.V%,VAD ƣ`Xӷp|ȹnV:QQ!,3Uᶂ}uJkAA@/P8'H_^Go53k['p`K˩gNZ!~-U!6ue:>** ULcͶxH'TVs&ɱ♁ʅo }:=|A| |ŠyN!L=@]ۂhaDbchcA&j>$ <{+ vALB #(* krxA:~RP~!x*&=w{|0E?bĶmͰjEQ,)/)'~,![l:Yҧp'L4i\4׸ çNJ 3Qa_gp)Wn͙54蓧kMS'{3iLn 4`&tFX|[ذz&,*?"Ͻwl}7'|FB&["}Ż'*0d]W$7M'HwwfMwwqe1gg|DMgMh>~?I39̡Q5Y.%= [_޿u@(7Hou W:knم ' _ `N %+\rAmvSAz"7UnWV;ťp!k@o4K ;Ӵ B=&TRҁ3Kp~@.ҩ X\⤑O(,"daH]龕XpR %x^4:`Y_;KhnC&L8JP 8n%H| gqgc,?P}'Z{;mFz=1zOsy}ezǒh@~( #d _ O BZV[6YnP4ϵ[c O -ǝ݂x_ܛʡ5>X iMh_0O?W.,C_8;3ļV*eP*+_.TxK4k v[m.xcIJs ռgom+t`=„LMfY"h}!(. A \$hH?*O s !Wǫ~ SƌC=B|~ESM_dsyɎ~ƬVmioXtF(n6)lx)6ݼ!_tPa''nU^ ?6tUcq'|׆;'v*,xbũ 0N;",<h"ldziLԒ)7VOn" &O&k;<Q5q2+HDd3{: Ղ|Bp~{?;"73"I.ɻe^zA9A.)fMQ\i <=uw,x`[Ս$=ZtZC Λ%H!_˼}|Βi'MQnN$rexÃ>#Yi@6_4p%LPGk*tn^2Q }omh,̢P5u P9>c@> 6]=|wda_-$c4т=+Y1Si Oxw#eZ=+!$v}l56>NfMF&K\+eۢmʆ{Wu>Zl7Io-^ aMjj:OQfHv=!mP߻1?ОœjSTCo?#[ RY?3@;^ҵsϵ]yOq7aۻ@ -ƛ'2Vbx bs KE+r{.~D|u!ꩯجI׽%H;I2Y̻{`p~#ltjѩW5tzBpĠ>^R{!/O h.QP [k w'}] 軅)[“o~-p?ɛ+c]8cw =G+Ƃl15[,[k[x_܎\#Mp,*t3v{ ʡ׿- >"KS9]>:ȉ?bR ם`Y,VH,(%.KdPk鹗ע8?y}<SWf:VYB=%=zm`q/4 uUӌeS=r[gOKBh alW\)Q kth"AlAzs9[=>EP7aޗszyeX[WuҹXk#YnOjWK%(ܔ1of-J–#Ws#s(<=~׾QB)qf7xr96`̕ʔ+. *[*P*hh?*~}a[nz^(ީfv k¹{6^b0sN OS=aIq˟P>B ̬g)G,)  `l0L4( ~Hm7s4#ML-̮\&D/ȽrO!łho/bs8_CC͔so>Q <ئF0S*.h`)(7 V ^L9)]G/y{yX+AusnWn~xh1 O.<ߧ.]D0RrcOpFCV<>7>c@K8ODtAWG\gW54- ȿ)1Q2pGˌfFSM&Mrbp\xΗLkk Δ4Mj?,cJ67O#% OHWqLe'[Ћ#A"SAreqV'c|pGsp5r2dx!Ӑv X<"HRoKP6ՑҾveoeJ+WܬPP< k3Ҫ(Ў9r#֬M9:w_1ıjp dAKo]:D.@%x`v~5/m&$(?|߶L?{3,P?纊Nc1sHROYVDU2U"?*οʹ t;Ӝ_Tt7 Ԡ⪂ p Co7t׬n)R6"SU[h& g{ 2|Yӂ:_ YH~vb c| #(:Ay&įz| x=&LlRl\l ,|uşJA[0y!3UyAy+ۏnv?o1`8'C%̼dvSi/|zAUVͭ1\E5>6B|SLkpL0OlN~h֢CG coIۢf4'Z-U;Gvt O O~>13 SYmF~/_KXaNP~6>I?I=W0zݲof?&=i\3fM)}Ol[cm?مȳf{ go}zTOLy~Y͏MMƚ͜9/sϿO G {z wp忓\w06cvSH  v-\Cwn >u XI>8sVլQsVWoYs~X{RsvEvRY֊G{ ; Ȼ)xX2+5ٿwO.ޱ=һ)P}KeZc6ݷ4Lc[h՘Jێ-@ D;֚}11G"&? <ԉV'?;ײ؟ĶRtYsgR2K]>!ꭉlnʀ/ ~-/v f1Ke<Xan Էb(l&hwmMS? 3 /n+!c2K@r` % MZA/eU@~ke r^_y>e%5Z vKrodwг_d;Đ\v8tEf)$ dȥu†UAKcld>L}iF/Z?&SESYKyu`QgL64a@"{p_Z&؛m3tpJ^Nf%_'_u/|$9 }ǿ-,g6)(Y%|1WXpJ{\ٙ\:xqr[a0~+hN] k =C~2Lh`;Ϝ9S4]un񹵐H57L $]VzT7+\q/ٜY ~?"{7g/®yOpU۞p~n_0ydI.]釫U ςƚxV]0^Pio!uk|FCe>1 ےgBx [zuF] fG̽5uL1%muܼf{|!YFJ~U,yXCnI+oR|^&$=a=b.) dqEԯPOLnbuPB r̈́xJ)b2lXq))cW> ?}_k!GP:>n ޣbYHAjIO\Vxlwȇ_7Ĉ c[J|0S-hAa =MP["D]]>^!17Py8  *l=6whE \w ܖKZrt.}_ûB&|Y 4 [ VD[F:=?%<;>՟O|IRpNX4xQȡHU3Uͥ\];Ͻ\)[3nef >8kG+ o3Gobߛ *Z ~rj#SVWp~&,Ot! TP ҉VB6ǟ:@o &jX[|)Y0f^];u[{|j5V#tKɧAFҹS@vZG,DeW92q},^V>f \xY >GP-8*(GOωBccwnٙ{74XG' ).(.:3u[6~)7ӗv`i'M;~2|#oy1Y;ZHC|&^V-P VU{ߗ9⯠gY|PѓN ZK{Rip!3O)Y6= =-0Yd7tv}(|:27mS{8˱>뉏\ L(OmY@pBxSc5.Ur͛M']vkݤ?aɤӝdD M&bo??mm jwͦjB(3qE[0[`:BHU`JP+_37Q˔(.ւC?}5VA7L?E^®3V>ъCs뚧k&=L9񇼏ȷ 𼓊{x~tjxۻ%y>|f#)l5Һ,ku?/5f 0GFvzkVCsC1!6=PNn i ܳ y^;pGIt𯑌*-mm<uY״=^o:p3%kgf7kCǸCL>5z2[$Il2%WcJqFIf` WkM9/ǐSNŢ54 4qK9R[\bd-F|e8<u0GPu_L2q?\"LAj-8>R&Y⥱A]'dek TnBC`MDŽ,POGxGZ{-jӵCb' E>Riafeq~pbC` m%;hz>q0d1A>{SpFpn"wXqCy\nO/@Q#] yagnB@]",إ&L;]0h"X 0RАxUp]/}-&DSqD'9oM`1|fpIt |Az~C--'V;dե^noeG[iQT4t{ sA=Zx9?G?WPxYA’%[TURV5}s^qď#tDj|w2qO{ hgM5~ϦlCy^i5 /_0Gj&x$~~Ro1kx`ɪ'>P's%mBsJ[2KyC|[2߆0 k"D y]@ MۉƟJa*b%k㧩c[ntTM6 I2`V_qxEw=RaήYtnv,vڝ逗HS.ُ?2&ֆwkCtfnq[pݛ;Nq©CEn:/t#_| Pm~S)W)C o'""8i2%P<|{tuqvHtMhՍ$rKY E֧|G˾{&86Fސ5$& (ƛ <;__s&uG{@(M+f #ۋcA3ɬHbj_bHk'+%nW9KL.#=Ru/_Z%&xđ\+kڐ4.nrzڴYc-m;T'YGs1d=v0- :kǻ~DSjeF MRfF_>6J6HIp`#W|HL>w(ڐ~ # o%(z ~nM_z7 MOA4JP1C>VpgAMAo*U/|P_zQp%'O[%| s4,6SO/[ ~,x LH.w[.rR:.ЍW-ZqN?>lo5o}kQpwsKU|߅Ұ*`0pGROnRIݍ~Ճ{a}:{.'b#M Z/ً̢RS?.5LQ@Cڢy$ss apqLkb 3FZh1v%mHp~_lB  fX+i$D_'}p k%;5cm`!za24d[d9=9!C({P]f#~vwzgg˞GTke>}{m`}ϼ[!&0Ȼ/Gi' 2=2=ҧ^JWe(rku\PIk§iwd$ICz۷sQǎMvNhvat]ܥY 1?G5 yOqf,-߳a8G*w&. IϏ?|};9XT\Cl&!'/(SѼL\S8ik a|BGZNx. ;a>oq">|y[(܍ݬ)fW온!/odl=ryHQbDQnP ?Aڷ T[WƘP{b\r[2$&vĒ#Vv`{SnwTbr 9'~r[=2_37u͈&L,v=WVpl9ܛU:; ~3%ziz+ȎΤVpC7%Z$oh= Yb}!o'[XNb~U~u'v~Ân1z^~TݻRP^Mx{saFo?zvuKLJF &_*x_A/ : L ImB{ { xAd|I_7YPJבjoq/>hpoNf }oyꏯɔdHAEPtMgmε niB8 9bco>x ˭}0~Y')XB-L|7 ޭmw_]{/6=W׶2_y?ZZ ~V}[(^o6ixPQno8Y6OӋ$k}"zrw.Wge1_%=~uY+ٝR݊Eߗ©&3iPTb75)%@IDATJtu ZkL*/AVM% `F"sb@E&\gv\zj50J6["ψ_ykH+Y>w`UR0jkAEyRK!{O9Lh-{)H p-;6~?V˜7 c:  zO0N@(խsE bG{'cMA )h3S(unOF7.8#02bb -+#(8((_N/QC /yJ%sx, t7ؤ|$/%݅s'x>L`}yŮ}EtsKz~uԥrUl:KFߒ`ُygPo<_Ш)l?<5q:H\z#Yy}5?E^_Sr)%oG!'IR^26r*;[^on3OqtnDᇉK2{SK{>"ojxksM&+~'C֛}̕!w ^ ^| U1uԓѡ:( չgNEvwKDeqdWsAA2!o^Q:a8o8(l<_Mҫ %b|^ [܀ӎ{פfwW79;J^fLlhkH>y;~O|: 4^Ll/<?<h^ENg:2G[D5턀4;QVKǚ]8 ȝ9^Vce-sگwtԊί)NMm9O*opG 'ل#asdpp{)=}_n:6 pzva#309ȁcחڿD&׏.EQr+n_kDeOKR\hb@YPM.Z ;2UrH&OyP7a??#v_~+7]?Q&v<]-& ߜ)kRE"? g7v AWpVv>w; п?1\ϥLlZ@!r.G[%g e+i'^n<sp(?ܖnE[[: ]*jA?UA$'; 0ڇHWogCoj~s(1VпC^*-JpoͣQV0Dz׻%^gA`'k vNBm(A.3<6\?R s9O#דJKg-=rND7rVs|לW'n @QRڥ;O+\ژm2ayr7?b3{yPQB1@ż؅bwb"vc`b(b7gWD=;3p~'s2.$sp78yh;L0A0-R  K;X 㯎.ַ ՞y4 `钼K)X V&");_ge3vc{~:bYr3’0 :xsXLQ@:rPtrtzQ3#<)c+g3ݓscٻp`tL'33]5V΋NKOKS_IN?m̛.N}%; n{l@D&-,u+Lx&xh'Q9; {j*[-i_7Rѫq)V@FONoO `{c9Q 㕐QAl8 qvT䇤E+N~<:B-~*|zGl0R[{7'xZ?|HP) #6N#\9Pg᧥?ʔ+E<W0'?Ua}]8^P,+J <-$ _ȏ(a6XEt3R3Bԃ zͮݱ3 b`y?^f֍ DAo 7g ^o=-uB1_>-^@g!-P8I0v`^X(BBԟP6@0-```+q0S@ KaLE? Gi>+2b+OԣKly;½=˾|N$_l Mh<"Оf^.{z Й/M&?ͽt3^ô^3o`yNj.#|8441LX0mUg,͙é>f\9l&;}#Ys DÝeЙ(܏X^>o)xv@|#HO | +t o)SO{ AR4vݙ݊㸚]*(jXޙ 3kޏ`,8hPCkX05EP`v {-U.@n8{6Ê4֤h'g@ |7` V,X&`5fkC1k"i5Ov|+,' :Ώ> oePzŋf4$*h txgu8LgA >@u;NnA9d!?|yc9I>A:+(gg&t=UP>ڭq>ǀ/O|~# fIL $@tE=z껰]>Ԝ[s.+ߩ|y1q5_ZU%\{Yޟ7ѩ_Eg23rߗU!SiJACke,xΕn߰S5g1])vkCVewweM\M&r_Go>fjew}K/ЀMܔqgh|NNl2fNsis.)߮|{fϛC*腢VY\S-慨z&SC|~U<8ݷAe _?h;N _hߘi:dl+dSޙ= #}mkeXI?mR#qDL`u,&kRDIN/yFK/kٍ¾y-R;?r.2xy'Hb=M/J \3z Lu\şC&X۞+}$&n{J&/E5cKvahwq&Fp~у}&˛{E|36䮈-đr'& q >. _T1|}#G{ nL ,rxV{t}?R-]J=RkYKb(1OsN/2T|;Ɉc*tNϹI~{vh@mh*coAh#L 7Ȟ9)6:+^& |!Mg *;PAvp2xߛ:NuȞD[am"9zT_7[.-MͷU> bƻ&  ق ?-Ϸ|>'?|4O?4l,g$qkB:i'vw=ݴG+ͅ1n"PP`譾0f~%xUӸ ].͎ 沽 ~^G.\Hw**&PzEbA3fw w"\Wzaң/o/*8SI滏(}*3=Ξs}dieF־]oyrYxfjZl?-i4cHY '}wo[f>*-MYQ6j<[HV6`:`IMdB$qBKkJA~3=dzPa0-,N{p9S&$uV'k`wkUiQ@,P:'x{bP&K.¦P_)ί Opr4낛孔kȕ:S˖ !RWD XMx1%59'ה,z:មhP?qůGF!%I>87wK>V1_FwtIdQ~ˀ|g [FhMl{'bX;Ҏ^I&\F9?IG &G.5ukPDۭt=H5d-/~~(Q[{s(7 RCl9ˮ)~ߗqCl#Hu ߏK/OX ]vNG,߃|S7'MO xk.QX LXƂ| -8p,x7pb' ق簕Tp ?/}l H+`('Asϋ:ľZlOhHMzC i`L>GՁO gN<,_&n3aCC-VLW,iZ곂8+ik}mv/ZVKMs>-`܀@{؀qhpuzwd25ޥ/> wf43fgLmVmcK>;bƌI+"_f7ʼRM~F IUgk)rl3g~veoWF7=0.K\$K:ΚZq7:%V1A)3Ntޏ,A+؋.+=]S|cP!e˪,Em5pl7 Ǽ?h`CkfK6o~J;%9/uGB rp9u&HCQu ?:cua0[ ׉!\; 'wIԓL$k4wGJDzNvI^/U0%sG`(<\2}AxdfBy,uJB\+C;E qgcJX`E &^K[ޙN::>u<ߥOnVE[Wd/{Ʀң|^;o/*ン+&u Up? x.\D񄚄y" 1x1P-RA><]OӾtOhK?֣L)& ˾By?^&'2w<+\8|=an:|EvTW´vhwqH% 䉂 L[FcXc; |{ var5}&Ա2 ӴLF CAcƒ:jv6'2Tߣ@6VH ceXLדzbApKBƂvı Y,hOL0`z\ 乂GftQcr` oY[c"Y,H={ZN?QVߧse_ǒ며6[Q|v^vnUS2kWݳ4cyU@-skr҇w ]XVcQ\wPCb:l 1w:>Y ܬ(/Ru42OǻP\::2G{ u΍\,%7F.q%u{-ja' V?Y9FP4:ߘ*fF?prOL4t dIm}^J}=sFm NnD@s`XI l %St𖖋VDP\AE@JA>>M,v܁yn~oB}ɽ\:OqG=&~DXO6'^˜ƴ}OUł4˜G ~t$CY, gl}YAܱtfyx~%T=[9E~2hGP#~  ׯ/h.a1[ т/H @2V\ _xfm%-n_AGLʯ4XI}/~݃1x̬i_"LɅ'etL^ҾǴ'8*o$g%a˖uNW%Sk%+oҟ셒Vyۊ O+rC#Us r,!Yb#s\͔K,9t<7o4GUzjW\y$uv`v _t69U_'J.]Ozз)(tM a,"jp I~B?݂_ O .-ٹO0?QK>&\?3| C >ܾYA,A{l T 2d8}?/l߁^soW 1WTcG %tC[ W&h_!3툫aR@WģW c/ _ i=S0t~[>uCǟo/uq̷KiMӾ3?D_j薈vQ- GByST1k&W{3Nxs'|6}I=)efԶ<4愤 s[϶\pǧۭƫZ5eq7|Jp_B3FyN2vp4TͶA׿H'?gs&}e4 8(ΊpbEvݴ-Jc0ǟ˅kbV5 }=.Fc3TT@r&!w3ʕg)iȮvۚ#8nfZd𒺨FxD[~-8xYHw?mX!(; n <^?.fe@ Śy5 /`{a̪5M - &/ DÖt@C×B0SGBP.B9^;r!Τvx m$gL,( ; `|O+҂+ǀlS&Ƙ䵂tXp@~.n 9@.qWXK<^.(vԓ ?_h'~ nu,s'YQ@=NwriMZ~ΔݏVA7u5^zDrħ,߳d⏩gvv)kN+_LSzDڰ'azT2^1 ph}ޯkPx(xJ$ocǐLwKżN2 !0q5sg^^-8l5!wc3) W|P^7wiWTq\5藨?Խ.qSzHDs]41HR ?T*( LӔ@:1 ~H׹ѹqhMx}.J܀C꿛|ZمM.nFdgEw)EbÂ2MbDzuKSٛ]{%skg=w+ҿ%%XY{1C 4-rq +=4!E̬L&::Xks%@A僱+ͯ:#a1F܊-$@YK-mM%F7JBC*_M%RDhp%^'8ʛNDI,[> ܱWH --R*Iz,:uiKdh,fWɮB,n'uJw7gqilÿn􊃱IF{ VkQA7(]"W}u,$B3h"({wtw Cl[zY 11 >`>./}Gˢ|%xLA9@F~TMpW78#[K 'o X!`% ul"։K+' ĿcSCcOO|!~Fp<\Ps{#/ڡƂ㠁X b0a#UW+>c jA=}วx-AtOo* 3^P>( mCl|1~mvm4鶚9 V@ $z?80EEH0}Ld7X B3!āwAz.H)t}  ҡOLVWXݮ/j#8^k갩;Yپn6~YftIU3>S=z.nٓ_T?F٤W N /J$vI{ێvjЉW[^@AcOtI@6/8¼E^|1LY`N# $.aFs$v y!6_x˂iQpq \TŐ1-*\B"8s&!8+y`>ώ)^n?ˑY¿ QU8YAH K7k('Cbn59 J9߾ּ'(xU: rq7OdԿRPo!PY⑯}\SZMA@.кmFn^·,=≵=&SA| yML#T /T[4 @,' >gB`a=A<ߙ+pDl;zWy |boҌYy~s0A>" ~KP-hp8J7DAxE1 aZqbŖ=|"xMMSoF dyoB81׾";BP/-(ț:`"CwױSe~7m3vבN\~%Q8>^<]PNU3*l% [PԖ/ f%_>J6 v>2IߔGWvjI׹-k:{ϐ^{RZƖ: ނ&OAz + G򖎒 ꍂ$׋<</y3p]!~-O3V /9I0>DN ɂ|k~9_.2H#o ׂ|~@^%H4>߅sbGcjA>M'+_?+WػC=A= 9mŗ|*(2 g_+[tP/C {wAixV1~ݪf&DUƣ7uh?AdR w/]$h_+; ʥ%22un9M=wȷㅂDZ"b"k{_VF3AHp +K 7cck ($i5IЏQ`A?v ^JC {-嗠 q:gJP@~ʂ5|' -ԥA?9y':t iމsFfjk-s!Gw5]Mt9,>ܘX + jqRsŜ7OdQ <6"|YcOP\\W rDͥH}{E86WkFS'ERi.5bK ]^)w|Rxx?cX"%` w&Ӊ >M9mΫ0Ůr4&ͯjK%\q[Qٹ)7g|YTĹ2ՒAf~])&l2 v~4. {VC0NW|]\}Rw*طW^wZGXW ^QX3C+e7 c6&|%0s`aX@UCt|6n o䫍-ة!v4djA:[G*g~#6 Xb>y{s/sȘ'^h ~2ւ%_4dA?HAu 03^llIh3k6veWJע6/CWgMKofg3v;IgZBX ɵ*܇ԥv֓@=jtLN \<^(-}*CQQ5GEOjSWiWߣNPbӜD.A>R(sWN/_9ˢ#e ǽiKX'a~g*Oϻ|CZܧh}u4.{0A:lFF_To$"A_ۊꨪ r{DH&Ew ͦz܋.ᕒƅu:Oy ];@q)KEUCW&w E{ ^+Nʽ^X_|i[󶗆'*^+c~L'U/j?#bA^ۆ XocS]&GW;|v <7ig ' <#QpX:1q^(TO^HKA{kA8a߸Z$A ?bX!_ЩŸXf1'6b~H(hF _wr2xWh},E{ _,}qY<|*6Ҙ@.Vv S]F: +xg Ϗ7-+Wx_h nFHA;|?A'i9Yϭl0Y``^A`$zO}  ~;3Q.vK/nƴ>P0r0f-1{l#)az -o --Z0-4/и}ZzOzB?3g캨Z+Im8Ȯ=Y55佳O;T}GyG`b'L|ňԌ;=oF$8 gkgT~Hn, ΍DNgMsJo'l!6qoʍhdXKM5籜~HƾTS YǬdYbL[n˾< ; [%u{@F5 iG4#{eJr{0aXJr5PB[ 0?4m(NYMU2ڇ].YY|YݫN[foLuP^l`@j\9mcN NXIP-h4M)z}ݶ{<$(WJU_W X>v=ޕ^. d)YºN_W 'D0<]PGx?OLxLW^#6dЖ  .<*yB7a5^cBA>  *: MT \A>_~5εSJ]x.x1#hx]"HE&_xT*y<VDvl= {Wιu]@IDAT_5n~׺M Y*.^վ4|1D#'}Ub0ڭ|p$0zFј55&F2TpJ-]4]k[)\}^CP \!'X< 9L4JZiL4 >u@Np#|j?*h%NGllJ:9(%}<[459e9˒Q9P{.% 7%XM)^+[|ZxHZ\C7Bnp.p0*'*\Ǥ\;5Gr\T4AҾ7Wu:W@bJLg D+ot4||k=#Qox_Y+ G:M̸nDžǣ HI|>%嚘=4n(prKW'9"~*Gq<,ֱIq($W4 ޜxT{.RQҰtX|Bg&{${0Qf̖e7n@tȬYײOe{^H߿+|'c׹!9Qpu@$ok k#gշ}}%F ޳IA8x;N\!~7|z { 7\|Y4B&H?g+p}M>?|ސ҆\!i Ϗ]߲[#@'o?-qWx ~ o~[؞滴k[W`Øc FWU@-﹊ 'r @P=%h_. d ;lit{zf GumgAl _dD̄7luvoVU=8WnhQpb~N#]jٓއY.z"AD&5s >.@j#y( 䢮$^/U8qpfSsFxlr ݧ1 @E~ 0.XV[.oP>cյj VhZm0dh +/O2@C{a VML smlU9{zO뽚f@̀B.?pЉZ,@7&`f7QU<2Xljw)~GP{$\aW"7/ΡY?9W_W zbzA`ma ,l`r`˖ lm!xޛ=[ aQ.q<ܛ0+Wkw9v 9WY&8?Wp_A;Ts+xnǂ=|^SN> x#ACF ʵ=d&d~Gcy3$SF@_ U;`A}/I9(ƒo\XRW9篟wEl_ꗛI/Մa0WAj('Am?9u;*Ƥ͒~|b:^0|15>{衭:tL>:zꈙSA+~Y.O&Td<ڳo0|dmn,}јP~u$\+Rml9Gg.}R"ΘMŹhz,IrQǨ,"΢z:2; ;lg Q\=f(ȩ+XpK+|y+Jv˜6u( we[aל0QQԘq[pn:?uLJsm kG"7qןO_|ᄩ{ןsf]ӽ'}c֊k+1|`74lٍLk,D)&+N2wA,m,(B,&*?d0 ݁bd<{b>_QSE1a|jtd5Q mkh^1qr r ؒD{ 1Āva_m{AMWb1*<@g{ܱ`A^.K 1bO_ /{P0 [Ă",h-y~>[8yEy 3 Oc;E : !ݵg`ؤs,U`A -8`½T)&?B#(wv }~MWs,k/ W-%^딷`m\s]6:5|5&_nĢhEj/nOR;GPǦ r4x^.rĪ󩠣ECpS?"w/ơl+ζD{|ɉp 1-G,* t$ q#{8+p~ǻG #yEUv;HxuTfcA:Z[P,tN{#a݂i$xrD~ņ8OAb`iƀO~`a;J 5;i,4{l-Ͱߣ<`(7NtD^Ħ7 ߛ[i@Q8@. ڹ鱤 h_ DIN,(:.10q݉H'vݝtnnkvTlV5 7dƿ|,T ن-N|}%{mu+:IuE&pׯh||9&pzі7W}9:W5qv&Sq?ݐ ׁjxs{[kƍ~>niѕ-7G7dfdf$kٻwrݴfG cH mPzL=q;[ ^|/t@wC] ~{ /A su9cF3E#R?$F_<(kIi!Tw I3WH &_z|zMBFμ4݌ɹǸqJ䔢0YP0%ܤՓ1LjIT86R^1dK zA,7.”K1|jj_#[`kd!i t'8(%hU B/Nc43Ts8#87/ӗy㽢{5tގ`sc8Ųw~zc~R`q4r[{)E;]3?PI;2{My5E&ދ8.3s_3ysxc(8 |T~|ŕX%N] O7ݲu.%¢`'f`?7ּŨ=Vn?{XyBGh{v~c <\1oE"J @lˑe|O{c`# a^}$ T1e4BN5ܔ,A+@4t1_4@R1ima'A#x˜Vm+67}|ܢSaOKCkeĦ: "26;+âyJ yTt/4K(Xɯ-PZw" ~Z.t =_'A5Ak;>tXxv|?uk |&W*c{ ^PQ|(8?"^m.n?0Z+h" 8|G\QkA9V!H׭r|sAcӈ32c_.g0SMveůDwʗ2G/֋Ps7-- hڰ:[u9-:Mn<~k9l! |^P.nԲG W>/WPkÃl W귻p%A ˷7|ˏ,Y.8H @n%m\>\~"bBS>q0jnqwhsA} '~}*i T?ԟVhAȸUFxpv~4۳~v&Ufges2_1k9?Q7ɼva5~oX1z&Ima5s~!֢'ْq^|d3_Ss:gep}!Q'[ _9d~ `H bɼZVėZ߉ʃRS6&]ݱS*y!oXt6%i.XG (L}ҒHo*?ø+Y{c֞-D^dد\ \; ~ti OA vr(^ۤ_WlwHJ4-x Le MC0Z 8? :W aAc&z[p+*?> xo AEX"/5]Rl*U&hh l߱\90-8^\Kk0A:v(W}BPo(Htؙ4(܎'QL+858+|>+Qv@ ʏx¿N]A$A=sׯ\N:Nmyaa0,/`8 WI{ (ڙjݲKm]vޒ54wFhvUyx 3+5tNFurX<ұ^Idw\Y23CGdsfΣC8ksuLl}",z[ hS>fP{6 $=:@)eA0$Sq;i8 '$=>WhmۛYaNEҥσ!!?t7jw-H;p>aB)gˤnȌ9)ꄶ̚YsܶkrDėZQ;IV$3ӚX\4.k(p.wɃD;dJ~)3qoF利#T2Qh(\bOoЮ9kd~@oX̻}^墌> nc@)Xh 9]+rF+>3l\%ق9Yq3㘒 J6 vJJT&v?A%E|įp[M1oXo;AA~.$ۈEXt.|n p\"G IdJ֥lL{jFj\ _@|mI :PV )_/0G1bqCq7̩k~%o7 o^*ItԞ,X` YgA1]?7 ),d<W'eYT` [$(zDz &+qv? БIXb#^ 37?,7bʹs2`chaC+A?ނv@BW ySrAD ⏲G ,@pzu4A0d O_^h1%خU9ⶺ]U0]-R;b w4ʗ#Gg-啗I5dYhU 2)~-eʹUZYyyW3Pspaq~K䟒Gʆb:8d?hYWF㊽27z\j7׳!zDw.9 >k_{r0S}-W²xlz3;N&>@ѱI#00RXe&58D`a}j'")짅+Bipu@xۧ`dwolp3+@zHmN(gV0\y#1XLfA4g-`=A=o;=/v{ 4/ķW{k׺$/ޗ &>@NBVs}RF/eVP6^X5 7}CjHm諭ֺ@GZg|‘UC3傩>{yђŰkTd#<~BZVz~ .2߈@W3E mü-{/l16 H 2m2O2}[5;8C(j;$[‡%y+[D\cR'߽A[x=K+V%1%S|w_t&C%I}>9C ?s~'&0x0M Ŀ| vc& IJg̈́|.  3L`g2X_>1FޫQ?MQ?A=A3AB`픹M U .t].!',[_Ϲ?qH+Դ!՛^ cpڏUOf\]3³YM\o|~p`@̂Y8OşNT{<?B<בELG/ۄA3~_-كEvAq),~KXLeAZn}dvԻסu(,kWP Q(*BwԡtQ}tCY~|iuA%4,3#2[qәS+ Jv+.iq+>; }*PU .t(7^Vn o(ش[ƒ$9>Qg_pP} /bҗsc+Pd =_B~ &8.8WO @P& ю ^ >Ok}XpJߊo֌.f y.>NPEv@ O&\LJWNb`MĀX:D".s ʍ#)ڒ>>Zk |hw,#h's)Ld{{/xf^]?[` :ujzlb|޳pR9~fƿUzъ/`;n1#uipRt ?߃p6v?sꧏ1tXNL)fh8)ZF;zIz]GDBW6@^}lv[{pp㰜 G9ux8ˈC9s!񕞐#{01)SL<wMԇkQ`S$ք 2C"ʮg ѬN{(߫M+3WQ';HF -T|d|o:I |\W+<ҟ,{?D&]qqRTQ0O2hK L N‡obw"!5uX9NT[hi8fgGdMo+YU3s2}H`×. nabӐ MGo o 5zX144v\8nƜ[NH@~6-zwҝy"kH({>%_c1>v}ԉreH MIXʸvRW5YP%tA*xk4`]9屜kw Lm/G]?v@b #xn;˲a^ޙ-@{tA dny.z!]_W.Ll1%O ʛVtzu[{( VwgFhDb`Wn~)Ln"%șbۈEG%eqs•Ξkg 8= ,)d}/т` ]EGf%?FY(O:^0`' I#u 7KpxR] }$'0f3t%X0uAwJxb)Ջ\Un<\>2#2{s#5BNO܀oLVԪx'O79S}]r^qiwSp0>ns{;R^rl_>OGGzvoQc#Wq3#>0TP?&/xU틿{JB9:b`=a@'2WȈwV5+%CW.}g#AogCnWFIn-pAï`}`Q_sBMZ7P wK?=Zнm':H08U( J7gO $ϖ9k`B }1 ٤`~%h*z;>(,nE- v8au(E/XGX:)A|*(DP/Op9Zas vuV"]Aß95nDN@ (/9| =Tz>&HƟ|;?n^CA$(o +~A@'3oj͌H~ɑ̻ݻ+7#i|wALH:kLy<*yxr;~TNleUIjQ3 .\dx9Rg.]|) 0-l|!v%21`R^՛42}p외; o|IKad97 ЅDܴה>*;%|LjfHc[[~7z>+Ag7# ̒_rf%c{3@ls+?}X _h+Wo+bnfv_xkj`Nu'.8V }[[$.T63xüSaeN'}l`ۨ[ZIE3c/⵳~'0DDh}O"sewO7` V{Τhw f L'6̧~.yOZ}F\<܏Wy^r˓!~ IyS+Js0)z?ɛ.d~|M5~)~d^$4R!&^#Y58CWkɅRX SHV}!|`N^ϺN:Z\i2V|{(HDX3 Վ mUN,{EU}ӯIOvdFk/fF&{g; M=aVWvhW[7%Zr>  m|Y*pweq9"/z}/hn%h>&H57 ?RϢrA?5D6'5kwmbOv*(H_3髻9߬u__]}>F l/(' d;"}[ϧ9I1PBa Hn<';&1S.<([=M8?K^?Аs1clMև0a v@r鷞rdAZ%`sZpW?u;тh;:!/?ϥV(A`A+jgݔM& \/Sт 9q ,_O,׻ v'ABA{f{ ʃ[< -xBӲO6t/Pr|*+kNy}4聻c-HMwVmKk~WGUqU] ?7 ˙_ŀ+[β1 b ]z gI>le67{H6BAT镒`V~[25?yTdLCd! Ħ ݀mEq5ɏdO2hRQS; :LKhuc[g㩽@ї @™'P@  5B} c6X0pK |"̗ N%_ NMDh~^СU"h-P s5W,TdfDEQ3.\:u 9YF F[eAt t uAm=7N=/; D] :*:^Xrb`ecfz}F.QnRL̞E\EN)*rfpnJ4;]O4tn/>R5ҎczċpF5"E$ijF:sIs9CGEi/5A>W Sȩ+FgͫYCu=˧WVܡΪ6NIz “s>Ⱦ$HRIs*Y%|f7l<[7L2.uNIIw.;\O R9o7//þ+r'Vgl+%S`"3!51ߒَ 0QEv lܜ =j8ĀKNK@Zb2,(w{`]Ah5ྏhsԾ^vuր^ͳCkm@r&O}.mC.1t$\4UtM陘5Ko/:Z+mO2oz 43 Ϭ +_DBlW#N2.uס@Ս~]> s[ye8Mj3CmT협,Yu쥕AaM3aLh"MQ#ҰtW>Vﵲr[Sꣁףm~7ަl򇉍H,GA96\ ɼb5d\LɊ3|Gz$/eRQE!5Nk`ygu_ml+%.1%bbyIru;tʃ?Rޡ$+ΌL]aߙeDQZnAx y<8^>3M8oV?UzlX\/=՝:Z LYwޓO0~ |S,bvZN;q/o <],ZgWA8neeĵYVgs=15'uN&('vK/A?՞VQBJz\ZB/hǟ"  yFoςZ˜֧ Ət%ٱ`i`Gḱ!w)ɴkM4lMĶUJr?5:ӖS煛#sM3Zʺ~3o|&Y6 z2ەl0!ڕ}ZRNu /I"ܿ:h]o@IDATԎ{a?eWM#+k\95b6z@n[׹UʙUBN.'TdIN EYln WAS(06cѥۊVgưhaR+ l`u? ' ~Zd`F 6(  Aw3Ų >㶠& l.;˜3,,H0M0fv(鲻@,(`WOAۂp&}:/v7*4NSάD 0@A`A-yB3~ $ۆ"_ߝ+sñ1¤՞Q_-g*:␫PFH@LKc * + e#/r•4Z.Ê^N*{I ]CgVV3-~sU*IW+TN(Pl xp&StpV֢.!SkL3{&HV]ֲ˟B7$Fdُ^=Us}w4^M{@]&$2a_x(;DL;uxWz:Ve/͢|qpC_+Wϊ^^S&'WFn >gRptwྏ!oP>$lljJbFi֢'kv2[1pMq ΐVF('h-b- {;MD>Z'fc [S:@|_4Ճ}B8ɊDZ&B[\⿶v嫉M}c޻{%oʛRl@6s\zO@Nb`mΣ nAkA?RnԲ-',ǽu,k>ڎ_ߏ ,Hw0֮K2 T#OzNК&h]!-oJ vAeWЮ$XP0fقG  ; L6ԋ;!Mpqξ:djh {ͽMg'_|jmq{c՗L+aIlDa?d&XW|t` eR.v ?Ss34{Ѓp6.;g'Vָxg>x k?/Narf/eYW4j:vM USӐC2Gsi>(/w do{OXhE8X4q/ >rA:"h|,h'hD;XZ|Sׂ=/Z Zu9Ģ~';r,ȲKj%3q,0pi^D\e xcpUa)ү< g54a:Y w0G'q+ ৌgi@_.p^];Hp>|=N+,3lP..V>Q)ct&G3kEIW)0,*}?sw9r0 ^Kљ^S((G *x\}g7pA(Ə*Pg u IWQ}) saJ =:mA]9AT,Hw۲`_;L .0v~ /HOIf๾-w? tbk(#uvZ?O`pvp u_dd@hE@0:;m}(o{ ]}ξ v¥_WD/zC;_zfg}߈ O~?u)Ee;YdǬ92r}B+l65zUAʕЛuy̐޿rP5"V@9=?YR=>S+s%w&8w?넟2Vez{de+u0-/FudjJMH)+5mGfrNQ 8}V4 LJ:|ꨶ| TO )? fI/P)َwO>wY*c?hBLt+z;~wmc둞/瓆n xxVEu}5ZG5mIkݹyU^1:+<(|vX^.g$Ɍ@P”WwW]2*e4ɕ6Wz;pBxH1P(6>Ao~Wx.?W+bAV{=|֪s{D>'ٷd?|cafz9bW[q:ryOŻT2dA,w>oe}>> .c/gΑ,&]0?ɖV/YICT'sd`dfp$ 4e>fGF1AH'eC Gp ѯ؛G<ߝ4|B?@ -Zz_~(W FjW1uA˜ F KA,"ڬlkoLA>MZinL n:3gցp٢^&ȥ O4_Mʋ ~?I?~6F\,x _ */ \Ax >JkwXES\|.=ן0s^Z=TP޼$,,,Pe珶ȥUjb 9Cr['W޸*Mα\ d z.ߍ2@>-xOZރTËa7AmA,7mfa ̺~%E17~545b=t|=ڡ%|^P]W / ^_&z~s`lcAr~Xӵ`;TG|'(/ C 'c!cYLi+WGzG!䵐! #I_o.%Sc>I;]\f|F}p== aCܟE޷HCPmcY\*xcDGI7SN3$:q5sgHKί$yme *.VR`/ Gxmx(2K}ɨt`[dأ TA1 wCkߵ,tkBFб@1$ >shƯ@|l„2!x~a~'`--&=T`޲x!JP}3\gc/] qKάD è&*J,:YLҝOwvVH ʋ~ZO46M2:w7q&Mx tb]rh+  :@ :vhq;,Cn"2Ϛ¬a BdXVzcb5Ho}XOAk@;rDgZwfc)~d%$ku딻é'ő Kmۥg%}!^veVϟk ^~O U-1,s ?ܷ+O8az(tę͋ k2!G8;[gm&."O.9dČ{FF\jk5R4˺Õp/}E`w|iᄆ DF,~S)*yVMdͩ-#~V 9VY Lc/~ß9l܃<xO}VnRw,q~{Ԫyֳ3 #mnHfP ]JeL@ƣ\z.Qd_\K/Y.15|NB},㽫n"<{O z hWczNV>/bm =J!3&7y VY4xxgC{=xB6>)2=Kmr=?g*ԞכwJz'{JOx7J;$rlJ?S2V{ ]|)jJԏX;h(C; hZ od=Eh!3NLv鏂dР?1/%n&WY`թxo.8}/{p 3OJA$x Dp xO4Χs_tVim!ž\roK+rm!XG qu7 :\}՗W̷֖p#QvxvɻB[ { ˂lS-vrn ęނr  n5,x/wX3W_P^$(l,'-hU"h. ?V/7&v~ZF;^N3u&4Eva.P2YI83HqKfvMߒ:} 'j0Iu@lzF! Ak-(Kx^`HhAo29cc@M3u .pcYwOv`Ȟw7^ p;ᩤWٞewB]ͼEtL秷$O^Wu5/k\V&,j5p'X׵%\k?\7A7XLCޛ .A>H?Ma G3L \H1{iҮqfEz)kM5iool:agmy^:kS4ᣬw wa~A xH(ȯS䇼|M۞`&lJD?[x?z? {NSe?S9-,tEGh֝GnN+. QO u4YY0O ɯnk~h8Pbɤ %^K>[e8rl1ؒ,G< c 3+?GHhN:iDxivb x~‡y%)X-.M<)^ NevU)aW`*~$_K>!뙑7Ye&RvKGbbd mAIJ})8FCVfIU~ACK8In器c+㩍`~-A,8rAlL@r?lYp] 6^g+Or~vK;ޘ-H]:TJ~WOE_7ab{ĀkH#*UNN'<ɲl\{Hn1y|m$SUA>RO v(cZ@}Zp 7rD'#\V϶/ MR~X"w.}-q y& 'P ?,H һ&&PZ1;o[\ DF;ۃ݋ր #vSAm)Y8,+_ec_'W@ł@#xKCvS0BW_l15c[ U?,Xh󝠕`q1LPU ]E[{;%kK\Z%jT_U-VzA=014I[${#<ڀ禲iހ+ep̞F Ay>Ph"Js|5l:Ht|ÚN&.3 x'%gȧYwIO]uNYnkKoedIK=}Ww2dQĕ+nwQ^ c%],Yk3 w@.@Iн  Dknc‘dMt??~ND{䄯 ӂqقx }]$H7 =An-Hg]Av?أ!oWOh>&\A,w Mq3mA/g\ v3[ip@o*A>Moc3wr[nݿ˥{WOq3ӣ)Z%~Kob DS-%(cS_U,} $?䞒H(YN=sTgeEHTϖȤOLZWfw<еew t\o+p ?&p |z6Z beX˽-r}y`t tb%Fmm)HQҜV&F)LW 軍΂w@u= Y О {A[OC4dbqO˥W|~WF}|Wa[7ӈEZ~;9 M՘rt M48W_OG,{幗Uqn"@4Qӻ\7nV0AZ~{S1{-ٷ dm{HDك L7@'8aPCQxmMTTVRV,|o.5V?;@U8V׫oςl: f]cgF:YK1m' 2M r@a6t}&puh9BX:rJъ='~ݿ}Āp;. Nȝz/[LA9Z  ÓEnaCcשO:O%n7vԈV>}+oORc ʉY^ 8}ſWK ;AZ ʓ|(P dzYv`,?Kn{FT,l4iDptV墝1VWCZ.Zsǭy=v  ^4CЏĆ z4/_Uuof'nIȌAOTR!_QI_ АػX;95>6O`Z?C_z|׍.:okyCP9JoK2ap[SVJp7yIꛪSyoy?TԪK>V>l.L|{/k+vsG8IG9d:˸>JfD>QpF<7|!uFNGO! s*B \b\>r;0EGFrpHw?NJDwn +G ˇggeuꢪMݬq4oKN@u6闃J?LoCy tD{G;_ķۃ_3uN-43 >sZ?dkY_uė ygieXp,&3 ҽ01tP잠]9v?1k/䈎$[x!2CcavŮ ǩ^ük$c%Ύ=)YVhQ ?-ͳ+J3 snT -D`x\|Sά1O.~?{xO2Ak ٽ %کmrkVͅxAS Jv\g7vLjޝs%<\y桯%c A=s XAlA;[~}ǑǀK_N,X$CiWRKo%h'H }Wr_vh_z[PN\&(XOоMPEpZ-;A`i]=ӅKI%ZВKQxnX ;U Sҫ=I|Y;̹{dk)RO$ [XiM(Z <-p^%OU82mgjת71Pmő M~jIJ:tp_lCG u9&+_4l1n|7W:d]AxbfB-#X4@UJ]_P!!_=+,MhY܅i 8NP lXL{Xy vA񍠠f)PmO#q[ h^ev+<\=_owA-(@|}@MϽiYbfs]sU\pĉ0.ПA~8X`+Чy;)N_.. "ϭPsٽo]?(:ꂕ@m/Hک]zgWA>.g/=ѲWm՞r3of` XE51&0Gˌ )4,:Zgȿ%][nWuH#wzJUqwvxЊp{᭲ _Pܲ] hw Ci _Ѫ'y#!>Q=2~s7wkޭgJa5/N)S] 3lޔn,yPwy< X˳ll4cD,.;d{ fYWht M%H1?/2>"^+&Ț>],Ab܎O=T\S󌚥tm|]鵍zi1{xNpǛKHWt;'hRJVd&>Lh<.=; S|VVIfDFV7dg%ǨϐJ$ߓ}Acj.X_ IJjY23#ῪIʼ;5Auqҳ)T}K#$罒gaju_W,~ZĔI>%Y9dC>%<7۳WL'Vr~.ƴ)ؠB#zx|{Hy"ڻzt#Ij#'A|BAnvߍ܏k<."  8B ho~]/F>Qz"Uߋ!Wvs3wswu\*W<&C ^9E#"#HрSmig-S[֢qe!ڡ$â.9V_WQ]'ѭ^%~xrOC3فDkfLs$NLa8E9`Ի{ :Th?/ӗ 3S~-A~YMvOܙ'p.u#iG]40n-H }#%JgEi]4w(u2D #X'HQ+G| %F6AASN/$~/=_ZPx;>[r6зn?(ņ9Ip41;* OnnӷnC:f(5pbwpVT?3scEbABDEP,, D;[LT.yBE,ATv{;w.d=<;s'ΜxN?g q<%x/L[;bLR/\zf]bxGNFyY;=f'20Z/ڏI[1{Vʞ)WcXc+O_2>ˎQ^ar:[O,zc>o4-{܃۷iO㾂1hk1_ɧӜ{*mECE>^E`O[U?C:ێ^A;&Hvٓ@ `Yռ))SYiѦ o ӂl 6T';C̮$-ܸ[@q8@mٛԱ 8O{M[jLAFuQ'BvAM5)Vy[,䋖E{ ?"Ц (A"' ?Wop Sa8q?Q.xVVK:h\z_sݞ_ZOO>xHXV!=u1xg cOhoS_ ?@~!'_,xܯ C`)uݑtJ"7Tj+hMg ?b0I|*h] 00[`˜ 'oG*}RPԧ NcvG܂/we^U^ϱϷǸw x|ޑ iS[,EZ(,Rr㏉pO ߯ߺݟX/t[+i.Ou{L,})b4sX4ϣrM < ^wΥp_XV4P\*:1Y_Q(2Ȗ%@MR#DUhno+0[5t ]'XZ@A3zή7[Ln'w$C^ |Olp, ] PW`xuiq*He}0V/XV@IDAT#-NM tZ)x"H6}O4ajVaXO+b/*F A_OK{9-΅Kq>tAL|}A>QΗ @}ق|r _ I{V[~V44 Y ?!4*ȯ@z0U+Oȍˍ]yZZb'+6D K fg >AЇfP>~I U3$[7@?|s.O*-=}3Gr{߯[Lv A#)pdbAi%K}8_u̲4]i'ۻuOL?'iO0_ÂVkf_?0w=(dfHdvpsI~@o3{~T ]sׅ_E6T}H#ɾ ;Pިcv0 w Tg\/grƐ>Y#c,:W?rg bA..G Rp|[Jg BY^^M!=NW<: doh/(ou{ewj&1ra!|v/ ?L9H=n_f] R?a/WzK?N8t ߍDA{>r+5]Zgp_w {GA?R= x &/ ?>,w Yd O-t* =Twԗ҂Z+Ǻ#z!^׏/ v[M 362JqS/I jd 仸~Yj*.XDL Ab*˃@me/7 _yVWw .̻c XAP,ƻDp|対mNQxE#LO x/:6 =-u.u8b|-~@nMJ3 *9m~r~;;>ުf[U1 7C\3^ZORpMAt*Gs+"h*P8+Z &Lx?+x[[Y/j*rWQs%[aA~a[ AS< * :2O sMoG K+^%т$ƎM#&$h> 9T>xw #.%I.8}&ZE|k7Zu #6} {-B-2//Ṹ1#Twg߂뺂 dO}qw?NN:I6NxLq/ogˏ ]ÀjIeתYܷŠ xP6 TX1Yߚ]#j_w<;ٗl|FQ".M[|vӶ w'pYY''^ܶmDŽ_v {L셄ܤ܏[Z^.uâpONٙ}m=5сDoI#5z̑[wY<`ԭ)5释{+S؇ d_˾F}f*V!wqy*߭| tOv:N>ܒWc^p  · =vwgA|\'X0fr'~0Zi{ZgQ ̇;;(v{1n -?rI=GC!S/VٽHW{T.>Yrt)uq=}5u+MŜpHBڋ~fC$m{ݼS{Ԍv!pzw^aGwA?'179npdo蝕_y̟y qJPvgzlTvD $6Ԟ0aIL_mv1Q ^xB@8dwA J^ RIMfLlڢhdQE 7ls+)Yi{|qIYɠSdt&)Vp{*_#IXҜin5[KƦ:lq} 8co EtulY"tU?zVˑ 鹻 6ـ'&::ޗ_Lx@vV-ﱂt۟T|Qen৸")zk#nnM2S j}:]>f;-%RP|Lz.yU,5>]ׄE_b n!㞂Zln}'}?vh)Pk7>Nc`N@.R `0fτ1 'X,-߲vcAj?[gZW .`<  ~b_ 0j\Ϊ8]S7=(x0ǨWCҌqu425CUmuX通߭lL:$+Φc0[QU4J;z0)w帹Y)<_KItXtTt,\༝?U [_Aw wTL(o|A_K4\ʹvtbv[NO-~m ! 3AnA|[D_w[3,я>/p#@v@{+\ZAvbhf4=^ uŔr=ѷCA^`j`-܎g2QM%>V%J%bjS'rʽWydGhpl64ukQk7;ō cg{\ov+B `mIHEׇ!rNՆQ#*T]sMޛCn\L⺲Lj2z+0LFo' \S;v98]xak9ݻ߻~\5#>\86yd;epb9uneH:XϯЋ\x-. y@%8 ^bz¹zjǿ aEE-Cҳu xR$9YkMM&$]Suvjy%~#$@G!aY0!9|IGD^&DZOR0AzY^pWF mQ,"i7G_ӕcn`Mu#L ߌ@'(O\sJſksbwAn#/ [ n1W?]u=W.3NŖ_ co 䳾RMA~^xL;}޳w~ZPyIp" <" K9pԋǣ% PR t_ŏTo= J#cxJP?Lo-5{` W١|yujbCwxbl *o/ +'ן SU vԂ zB2YͲgן.t[`7 HqƟ'?.G ,QS}.y_ 6˜%˜ c&/:Q01HP,(O=^&8ncCWs>p}GO7ǧ ~wuqnƒB.snۀut" )ѲxX6wI0bN7'ո14ȨL_[h[y&y4dYv~H8 Kc`[hdfW$.SǑ4z3G 0˜պ cZ7>X2XZ#^aw w{DE:@sfxt 2^= Ŧ«<Wɽ|GPM(葂reB:w{-tqFlUC/)a>c`m/4~>;fnI3%2LsY ~u<(v"2_pAo>K2Oni=熗DIH?-lH!K<%zT93~>ߖ2kO2Ar~fB}BF((q`w~Փ]Pv tkowDp  v 6Lڝef tA:,H{ @?nХg * ,!|\nqZ6S3MACKZ\ 3@-}! % e'rE?6 ~@.D77@>@-' w 96kXxrRYj!,<ȲͥC' ";+ W dX^zXf Ķe$;OJۓohF7~ݦQF _ke%Jk'&]9F~%S8+mDOJQf4LF ߐ9R #~KR^/2M!_*U4BqI& ΕLda~+Ww %꿛Ykn#< APȃ>-~ߍFTa{B5 ~+䑛h*v?V% A"H͂r,G:g|"`ܹv01yn ,Ἃ  ^ȭg-Ay1WܛݵC];J\ޑ}MrT?读g \ zŘ-"xA?\}hEkׇ]>(Q"=*H#DMPpwե3w~iKWv\q{2Wtz!𷄀 ^')8>J-b1| 9}O¾ A9[*8zOuH,C-ݢ+wW S;Y-'Hix; 7Gͅ ?tj-X_Q)tp[ m๱epOwE[~ÂlӜhQ dž Jlma\w?nvi ,3_xͪ*4&l.ҊuL6V3s4֚NL&SYT6s95Zħ"X@xq@A *x`ߝC*?,|Kp~Ԙq35\z s+^jeNp a ȭ_@pSAMYJ ?3TDx呟Fg /h,.LW~V 3x`}ǭӃnq{cRl(&c9Q 'nE!,0ފ(zRn PorA89Ai'yAԲ11+}jT:,]ڛr`x'/42AzSldqyntO0޹Ll`k/x7߻ǻì~`wAZ#Wxc!^c x\ut|w%VNnH;;[a]Gx!6 hnS&p hB=kA~vOA9[9A-xκKZ[ڹ1f(t95zyyN0US(^xl`;,$7Vs[tU!_c2=*s}T:fch/Mݝޏo61Vk̿X.8!> <ʅʅo:8Sh GEoa+;+=&.U vkpoݍ7L|N<}W:. zk@S/j}a&5 U=2dnh8\21)[nK#l; P.b_M$D"4o1 8>8Zku\ $rEv_&`p~CtGib LGD=I2ap_7[{%{C!-3[`j6ׄRa削dA9F ' l$m޹=!Cw Ah.Gӻ^+ӗx]gc ȫj Q'OYN7q5 sڅt{0P[ƻO V#6Sz [{\BrQ]}DvN'/f*&xYaC' ~?RN%Q'}wxJ >: 45tmP{ivdCᓛݥ]2eoz>gA5f*΢ZQ}S:vOȾ/ 2[3/~t^+PTBy ۶|終/)݌p˭ v[wA]"H#PAKP+AG݂l@~)PO Kc?nF|s3z݌x3mLG :\6/EPI u}ƎF3+*+Lt"Np PgJ<6ygpA]%hN# +:8, nHMOMs/?>jnWѾ={O?Uf3oyӢ3D-ݼx򦿼 Dz_ǧc5#Oޛ*O''$'{&x#xM̛6r 'uo9 `]G:|RĨxWQzt/]Rcj*چ|rD ۍG"1EQ)S Ⱦ XkHAX@.H|X!rTTsodŖNWs+nɗLSЦr"g- ؿљ:<9K:)p@ ȳ߿@~-jLgA~9N { ~PWo)h{= L|J0_kAp}s4v_W;H`GK?:{Z4>*\p~)<u[ꕧߡ|_SX-ge.Yn0V+YNо!*X3ar5mm]ep%5ܾx϶Ơ=>̗Ƚ=w6:]$ZSLya .*ﭼ.|/m6m;%MxeL m_}@Dvoӄ};و꽶xeb=2{;uH5oA*@ -w>Ǧ潵,Ħn'T /t ^O6kZ4IP[ҭڡҚ~ϥu9 Za{ Y|R%bZG ʇu@~$}]R4?.b#}&} /i

    1Dg%`*p&ng_)~#{{'_> 2Tż˧;_\*ٕȘOx&u˛)t0_OY@FGP[`rq  ?^^Ƃ _%>6a]27_@x;H')~7eA:MЁBPac)|t2YpG 9I!3].켺 nCnN?4FxN7A/ / Bx~^S * -{󽅞f /ԭ0;}n̞Fh@PAE"< 1`_i,YA+xJl7A .x4'ϽmYG/9PMe2ϒ֧>`lG^o:䰴TQ$fm:泣ӐC8?)]3`/톝ǭټI=ǧwS scSrAȲDREߺ܄x"f@Ѳญȣ2pOtd# W؂FAwwU -F>Ap#*%tcG ac#`6)Tс}}mgKJC%WKC}#]0K&ԋ~-'$${s`SفRgQU~t?騈i3JFs>Q'$icm 6OYĺN "1|ndIMQlhx~nc ?bQ{GԸtX-p(~C^$哂%-/ Ay>T~W/\>b}?B`C@ڡ.~- 463/գ[zOˠ u\v0f3t_'W/nGWpOÅ9bk̘OR Ibb{`b? Uթx47ih'0P{b\#%l^VI.-_ylӯfj zx{ 0xxd˄,]^\Vzbvc CDGCAFXOԼjBzY~|pw7\E+DM/*7UB5Dt 0!TvkwƽߵkS <ýڭM{/ }A"j:$W\7\[z,%(#@P4Xd[8߭xҥ_nfdo%s` -ɭpځ_w8bs xy(GXjnr?+t+=|OP\48* Ԗp~MX.\ׅWw7KDȿ -a BoQZ6G]4ڷѾ;[{~B:yW =`Gp"{dnܶ)p@C+f/S2/CjbサƂݙ֜4?E3oI<"Qż3C#:'FoVios9ʏɹJKo0p-o`J;ڤZaOVyR^~& 7;ݛ.Lܗ5ˍ1ruMGT j:܄^^I𽍅Eݽz+~ÙύW%O_dAH_Dwr*8fXPެN0 9 !WM3kQ }F#S0=G{ԧ'Ytt0uф`4`LU>%wW]Wn\?;&&hp*~":L) xW ",nk 0Lc>}F͉2vD!iG.s9OPVLV@Vp {9?QfUdT!z|@IDAT̽W66}E={gr!e WRe?"Kыj{oG'~ւʽ2&F#_IJ)l!F{X9Q Wձ+l}ɰ+yG]ԥ$g V0x"wike[WUn,)Ǯ7` ?&ȫ+~_:"n}Z+nG5? ]&F.cu >G A<,H-c/MtFG ~?MzZ ~bLlQYV ~wl?wq.7P"=E-&xEvW :OSD,P/|k֜뿅@vv#L?%ZE,*jAw-&:Wp ֹs\WԹ|@] N5λ$R"H΂@ߟ*x~QP~D ?P=e-,KW WoU;t-xp|Q~~[(.GpߕݢQ2/1 &#W胫~gI ^Ot17/YZNT+O [<ϲ|<7|ɢ?$ߡk.jQ= $vϻy9Xшp,'nfALuVŀyM!#^ƌhJu~r7Uޖ Q #VxʛjU3k^;Q0Ey.x@!%߳>gZ5 -gRe@}Y!.=U1}"vjѓEO"o/ܫp/&ߒ]wsx贈V(yKM7dÁ+Qĕ!O}?cN75~?'2-Jۊ ֣RVGYʋ[AC2fWeGEkphW^Ey z{#kk/Ho$I9ff'_$+~w̉'񒤐aӭtu!Wwδ\wTG? Tz]n/G^=}_P!H7Co-/[#%(^#E[wW>r2JƼ +Gx sMr_*pCx l1;3>=F֏hAޗ+8d9M閛cZz[ 4atE|Q~1S 0$uX%pfoN\7 G7Tb!PDP"&.8oY| 9hrebA?"Pk zׂ_ւ?*vWAοa]D-݄xA 'Izɂ^KM9=T\?Uu/8Og& ꧛ M N9]w!dB/`i0~^ ׹d kZo ΕI.ɇt7A=aA庋@&ߧ ##;>pKHP/M* zLl9=\v?8.pdy%'T[īz c(e8Bq0fz e 5#b1^w;9.i鞯^ɏy/{ ,i,/K,/C-4\%WB_tJȅ{DhKG彇W2Hh#syv\cU\2wb~ znl`ՠ1l%NM|?\=:;9a9;(J~f[B{SJSh¨J_\u.:=[K Z'EՂN Z d Ay^gnA~"H7U;w 8 x>4qM QA8̀PJ ȏ| Y75|WaZIxu\4aGFmxnnο5lLNo!ݖ*rbFOw+MG&V78 @4Y7>׉)7Ll\[NNB8}&W~ ;R!/R~ŋ?*xC3 /UE.O}?xI]Sjfb\t|8o$Δf ܝߑ4+#> [YLąDkq$x0A;L&9^˧񭦣$zdm x+9<߼3>?֗ƛ $9ɓՒT8{\^*KrUuVV7آG4\p`ݡwͯ?5ʙ>Z石T/L(Пiʸ?l%LAP Jڷ}YXp~[< iA=@P^|#(' ZqwSgsOj\01SPf9p = ȗg +n<ɅG/cxw 0AF\0azD~Ϸ4|[!]FRS]}wqSJǍ0aOAz.(CuVc"}7\pw6?X{TƦ P\ xAxwTO'P<(":JS}@]Rpkt#W?]/Ḯ#Q4Sͯ; !xzxLF s9m.o$&sK*.ŭ9J|^QBw%4][K&Zb=|owdKӐ}͐ԋ,Q7,}=b'&uOx-̅Xvf]oxZX.ƃ " td%Jp0m֓XTjFҳQ*%ǠB2Ae["D[;O3}ʟsq-ɲ.Vn}]o' !ά-𷫇S٬>6yeS;̍`BݲSfA໏ ,W  A@pwgJr]g_c ;f/pXԖw ʣh [!ȗ@=lP"{9+o6Q>0{<-Ha)-$AAnfXƾPU1`3b}ir_vA9JN/ǻxKS:n+9p.(ן? O.˳ NJ 1` `tSLk%_o!S{ __>z[435]^=p[J0~x|:¸R &o4Ϝ}coo{"l) c&S*6~6k+J)~n~"m't:*1ڲ8YN\EۈKސH:nŶ۸1wt5.mJ5$?63iN`opn:7S]7LYH^D$'ll&e^gn XAk *yxtA-H !t(H*c`lx906ALRY5scaݾ}̭%˦uNIа޽s5 _5iM):@; z|ׂ0lMcҹP+[xHg ѥ .uaAʦqn3Och^*'Y01SW5[ۋs`A9uhWtf߼IÓ{{)v/(iTovKSr?xIU*hdjvh!V\gk׫] qG_Ex[xi/ǝLJ{Kk3?u#]2]6pW7kQODMڒ<[m 0ƒGqŨuAr>hs⾚Zͽ!Uyؚ\w=|[1|;wms}s}'L?E͒% O&$&r|c   /f :@  %.x%>aѭ$x߻-#oB7 k} A>N4z@p]7A|?"8#zk[Pϼ%?_&Pw%д||f'ʒw<3@\O9 Ś33_j ܨxF{#QV eO'=m i1G&ͼBauy .'KK KY';?".O x7A5K1{[fE`^\Gp|Aˍ/)D\?m3#~k]mX UNt?RJwaq^NoX؄#8ny1WL#PwRv̼Q4.O \g5%~ɓv51`+[TQ w'po }-A9`6œE-\0pm ,.u<%Dc;:9lvō& ]q敂J gf e'zvfvɇV[-~\'(|\ }"AڝW61` %6 &[ "('üϷnCXNfU򺸅/yi7,'P{+101`[ Ѻ#q; ˛ N,0MM{dv·pnrz`C~sĂy~s禘cWp~xc'ox\fCΈo[ %C7Z _( Ҫ5jOACoA3o3IStf>wW.o% ]/odׯ$T:nA9w_,H ~&XWSCPpZ mc ^jL|_DA1s m%; Ƃw1 w0 3KU vAO '~ΖM EF:8}G&$$hUrur5㓃!6SURdf 3/#VT)Ukp_'6HRimxA%ɇvvf==.z!~15&6EN7".|/8j'•n: '+sLýX}N,g-,1VffI1~VHss&\'K O_̝JK)$Qr J/ kzV-&xа([F0a[P@pѕ6g%A8\7Z`u K ;ko+WMs [?V`F4+Ì7Ū⵪ mCp_06@xYg =s}ցꡦ[-iߟ.C=ZW{#wM45,ߟ+V}1nj]>`ЈP7'\?  7^K$@c|nYʉVE8)!.ǬBs`h 7n -OSHK-»_oun;U3ro{E|['5U15P_|zBgW67¤^u;%I/MXM3Z?c~)OagxZq|nPʱh\\^? q?x-YRliO~X#7C  t0QV ,(vO KmZ 5<'ȗ t:vN8[f.( 3gBSo6vK&@B؅w⎉T ӬǸg3CM$^MGN4|lx cb߱~F?#|{87.T$ϋknşcmL=366PƩڬ%tĔMO ]DA{L. x}L*x s Wxku\ǀ ZsY.K: HWfx w#A:$a |dc#_Ԯ*xKk m8z̢ 3$x>sx_AyEAû"a s??LFIdF˷h6?a=<"Xn q]фK\Pb3A>Zp<@fPDL[[a6Ʃ |f3(JD ⩧ ?qo*d$EOZpS}5N0).!y=y[ymϮ?YzBq|!;gJg0^)e\nj)/4yzyg-dfcX W 䉣n9)y5Y'Yt::Īz#wG |M!rG%7jFɰdīo;NMy}굋 -TE^VӫL%S]>\_TƔIelI8+)ԟ_T=ȆeHs 7h$Em)zr"zIH{^,'x>,`l-h1A8;,aٗG `"mq>S<@s<]YA8_.A%&-_O`0`)bhA SVzĨ-GeCSQh,>9I?`[5\QkH/khߧm[]m;fbXsQLy3Ѷ\Fz[wxd)3p"Нsipَ:$YwW:"쵌%nI.[?Iy'FJ̋2KH7MZ<~,n:"eIc8̀^Sx=+@={Ta[݉8\M#HB:G._YEnI~D C+-}i'5A`\PX ZN#Kڥ~A.{@҆oJ?QDIb+|v#J.nѣB7!;Q +Փ^Q/6Lm(_rU~1`u`F`K4X22 NL7$>B[q ?,co{ -HfDA v_YPޮ"8?^p~`s ^:퍂ƒN-zalβl3R{PX0SU _Ay8N w$ o<JK]b˦M> G :qL\Tȡ 5طfIjX[*ʖb I|Q+ j@NB ?+ogmo`[N[^͞LxW .x_W.><$0wʻL 4/f)Xp+[˴ǾԫsO e|{ _.n 8s{?\{g+<XW͋6r{ \%(F nn?1`4Bh=0RT- is, (gܚvwIoZ 9+AK?!.n';G>  ڄc wS{3!`ׂrl,'SP s7 V_!ս8~$] ͏Hn+B"A9XB mM*FkpnO 6 2UU1`JPq!'7:~cBt Z4~U!`Lڼ铂[ ko ztq¹[ 8/^| bitm5Cf83hɞiB~Ƃl:^0an" w|\uԉPT?Z2tp'=)Ǧa'i#uϨf(ـ-rw} ܥ52s k7͔Y9g_v2JPn%7 ĂxO6mfOdj7=>EH g |ۆG|a놭#I:٢۽2:03Ǜb^Ο?]zVğq-\)oߕ~QMLnH"Q13DGC#WU>ƓwGiM~%կTqzx5԰y潚Hc^]А`Cp{:`57*&&p%hl6:~6.SpuĿ΂8f; ?q݂0,R Aa-`.' ֔{O4Ձt;ʊg3--nrq|q1]26@evm/mr}@-^9jct 7WM2=7&Qՠ u]ouMPW8)_ox=e&nPeύqkFKGKMWI)~>m-_@#D Qn XzMnMY6!n@~(>o^)a8n״zC)h--{  4}UY;L0w&6M~-~$|LMo+' gi듋Gw-}_p}7bSLz /"`? dk6Ϙ+wj1[gpG]rBxA`wA%>X_Un*p/ Lh~7AA/s :QN- G 9w}v{Id:XpH#,<$y93sHDúuǯ@]w?wĭ3OT3./v-n\y:FmISn!VѝՒݬAӾςazfvCQ8|@a%9R9J9\-ic PnL8L9LIuw߿F̩`bXgX4gv[>)fQ+,"}v5d91DiFgz kϵC~Ypy\{^g b쏸e>HyAYhIK#f]pN 0}?O2eѕKK%dGd>Z՛ԬVם.`}ռUͪ33?; 6tl@r-Ʈ9|ja@ ;o^y)OO!_hOtX{_8nKJnqWkB-uu@)|==x͉s=s=q]v\`-6*-4@ݛMŃh &.:_:B Z*Aot<@p:'y]c mr[ ;;aM4ݢˢ~({&Z{z߭sZ,9T uKhQK<F2saS5.pwY1>rb#3͛^6K[WLx]].},q? Z)w0dM~Cm]QڒocQ0ޣ]7KyȆ@O]akŨ_t;tvrޭQfQXXse/֌!5{o7+] i#Oϯ~vݙ&G:@7L)//ނ@{Vl>fbR5U:tEӂtt)両Rri}kQTIo.n+“k`q[yYny[p|OLzl / p{s\GX_%\͊10we6+k\LKxG' +&=ẙi>rLi}OKK.kɬ)8#_,(nWY]LP]eyH0U^/(G ܂]@L,3E9#GU l++~_r-$8>A(])Owڂz*~~^P-ܿh|=%e+bv6@s%E*2ZpP┎u' a +rW7 FKpb@z},j5x'Q*X2Nn&6: ¹yV(\(د+ĘazM>_24*@ 4Qύ 8[ZP*H 6 kU}&Hw 鋕Za l;Ow-t|*8 3  gэb:"5tx$ t ou6m4P5J+ bLXs2 *-֞ k8Z7\a&m,Ԃ(`2pQ^c lIyݠ&8lZ6RаH0Qln\skzݬCi̹siQaRuFu[аy oTQ=1qs)][/;]<Ӂ7+Oۗ0pxQU_7SKkGst0ejNOLO|YLAc(UZM=yI_'Wni\MY,<,AniV|,;1L.. CcܶurQnnP]eNy[ϐ3dN{g?f9-)0қx*=ֻ|TFPW~c@63IKGpd*"q)\O,!œ( K7xœ{)Ϸ(yK7_{آwm7*B{h[W.2"Ԙa#B@Q'#Ɵ^ս9Ra#o21T ]YC~lqm@%\_|=TX@ cz [1 &`ri| 7'<*.n<2Ŏ)]4>z=~W<#L n7v}YyE+=sb1KVv3y2p5~™pKiwSԶ rNz`>I@p\ ܭן"%&ۿ {{ʊar|O;Nε  _(gŒApԃG ܗRG\ |Ư_om3q{98 JA:Hp2A؄=X !&ώ[ok/ smgכB lNka?r f \\+(cH^ oo_pȻ 3 Y|`mlbq_hY:H =0A;GA>H#0ƕDvW PO ڟz . !m]xZQ.%ڻ'u#֪\wKU[ ~M3/0+:Mݾ=$펕 սKܢŤC|߭F~_^w6|>Yh4nh"ϙ7 .XȘ3ـJ/Cl0Z,W໙'ZPPl,HSБ=??+j&ÅJ!POhHb; @'.pW_.  9f w8fU ̀q3Hby0ɧyz :/' w@ *0 L8V$G :Vw=*ĔyZuYt{ Ww A~|]':[CfLE:|-ȶzAx ^ f$Roaat`4O`Mc}eh 1 PA~T_>As4ǫ_m\surى.ug,ph!>S|k^uUR6~J$}lcX6ZKwU?.]:]qH'#5@aW{5hhީ~AʹKkezfM<f+Mh)9~9"O %7SזYTY'qДf4Jxx?/,q]XM/.\z%/4.f-̢ϗN8фB-pHUv SMr%EbhA{jh7Z#ww1>ĭ|U?/ӵm.jSfs:N kkɬ1s[XGԯxo"]=:']G'rs䏧j9FU s w'478>8=_3(;P(+D47PrsHJ׵DWqcxxə C4cҝ=nHWgHO[ψ`XՈmvV#LWPS5 o,Sw .-r~B]l?]%|*԰HLnRR7]NSkm n .SHwCI@ےd"p.$ߠRB\_Eoؿ23M#݆`Ap U7#cgΟ#a6f?#julAm6gyS=.Co-,%J# 3ؒ'AI"/'/(j cj^j,a?e3^]z&LpZOٲ@jr<)m6+ydN0L|:> 02 <]<(#eup1ݺ%wcxWeǃck^ uuܸ~9x^%v8o =9`fCak#Y3`&kfh*0P"{V t`iAmOA  A0Ú}he?l` bn[QE' _B4]}F=Ip0}A<"YLgCRNGfLzW_' )#" 38Fo 4AE@yAffV7$ڸgϷbgB0TP΍ʉwtf;14~,ނIA@/ q{g;'.f~g>0pb"6g ,!};uBq\/a&@ A/)J'~OymhY1\3K+7cAK׍<6of5+ud_Z yjiG>Ŷ\lK1{MXwed x -&^5*ʗoڟuXIy4q-:@ M%cNCÎYQN@[D٫eqo]GQ\T VwPp)%7piɓfDF^Ƚۥ-onh;[Nʹku-rv=0 `oWo:n0E1U8o,@E{ 4[N. D/4͜ ݵ(4rj?A"-,Ha϶ƙM3w͐>ؾæyίٿy-wju+ل[mWg(M21t&%KPT:%Ec4  &>id^Ͱq/6\-{:U|HLUAMA Me1TAQrEyt_ e!L~mLy?1wmZJ)sB] gv纭GO?0wdL^_,z}u:6ݵ@¤ǭt&]^=z0Oe .΅bͭ@;v7)EOGmb+) 4l[;;tҹ)j 祤yIo+m5m ޓbʨpL4S6lp3go[|Ղ|U\P{a3<ŵjJ TbvuKѐ!_SR\ϡ\pĶȹ &ۡP,/ؿKP̏K 5JK1 ϻFp͂`ZP 3@8|YMp~cwp=4lxT>n?,xU #} AzYV <,v\ xǥW ?,t.ug q9eAh)8+4^_2}pt\NP=hq'% f&K`c9-)'X>2Y?S?{Wˊ%Lp}Ok6+:2; ˳u;w@Y /8^+~W1wQl'~uOرiXMʓ(~@oOcT mr'C14]ZkG U|[AmYPwx]?BYG­moStwB|¹tL8Fp]$:X'?̽-h$0p-¹.?"!+~&Mw@lU3 aCB2Z 0x,V98ꏘ^ğL$})l+3=˼_;fj7K^'jn ,pno @h-@ g,-xȖƎ̬`pTY;,hE]=.GU+(H/ {*{ *΂tu ϱ~+m]@ka1(L AL_ *tD=-f{{CM&PyT wMo | jqqKA~k+޻A45 i(\*ñh9qNp L$6h S{0ƹ  Z-҂N8Hפ?6\,8oT[Âxy@ vVn\z]r7Z#ufkGO5?'u#<-Ҕ 6~˸K79θǽ󓾚_c#l"A~JL(\.=4#*]XycF:Zzɭ껄y|R&7Kn:F7̓%7P2Yxx31rmos?sn1ǵ߶ܳbɢJ=*Owqrv2_%&wvqn 0{\ );-tzD{ '0Aj|&-aFLJm/O~ Yw93:w"}qE#?s;H~RI0w%$cAkV&2?E9xN2@r YӤR }ь4t(Z2D :]ߟ [GX&#oz˘YaGpß|'쉬z1n~Hjޘ ?ٛr7FϪWZ~9v2uxlic"GӿHo;qNәWM\JMK!0 s@ &k q@V?Gʇ2,<xJy/^=AV@>BF˫2Tb`:cL݇/' zD@P<㙖ǩ:ݛ9UP$'`DĤs':#ȿaY(|(/t;?!"0Pw Q1YhpM#&%qrsԺֈ+ ̳ >}}ԐtW)ZZceSa:%91}Eqs*am@~o@2 ИFU3b2tAG¹/-i4j0£lN w2پ ̆w[ })pHZw<\ -H P/JӗgsBbc 5{e `mAyxo ^4Ј_ηʻ KkF_ٴ .}+LaYl`6}4>l@h6|\OG yAf>SͮpZ>D >*aI3h&XX"QOp;|X{G'5C¹:[Hm Rכ& JzyWp ?QpiL_k,)7SDʬRZV_?T?=Y=Y|7XͰ=\46lY.#989;ˊ튤ddP2t)W^ jux)MkSNL Jz%{VϐyFJ$͜P:^Vg jY=U&=mo-o\'K&a-3-i`WV'w+Ǭ#2dY.̤ZAѱXL.=S؎E+_=ŏKAF0y@NZ``|r[Aӌ;䑲bڒ%^CⳜr Ue(mu֦sNgd둛7n5==:~!VOwu;5w/3cQ3ݹ#[*_kik*]=G7*'aYDc+*e_mO2};ȈDһ;Ό6\a׸5oC:Skͬb?٣EI'V}BjL&-,Myq]\?qѵ!ٿv2ooJ%k-t<8֢"6:|ɤʪqX ?mk'MfSl\~;zpvbt~/O? qSpJ TbYkGA!(k"bZw=eǛlzo4v3z>]@%{ 9c@gg ġ~y%oϙK g'p%>S#-%yR2IZ[`PDINM:MR;/)  #^B 7s??ˮ+gT5f&^YTpaAK ZQgW pO\di);0q5V@&pZD]Џ@~][oҥW7 ;&= df2\nxL o״lL!gYd`/øM ꁗ* څ.V™`Gk+_V-"ȷ1|;^P~bESPO WXJfQ 'X9`d+Aw7D 6,Yt+6i(y_gVY{ԉrsEf ͦʷ|M/r?YP n/`|k@`'A{ ]} oUފ.N/^gvlWۻ>p}d)m[(ߪ?!+ӧP?bnzr;/uQ*onqyhP(}V#<'t=MvĽ)]e%@MyZ|[=Xp|uYk֜*lJ^Ĉ*T2&pGQ\/:S&rݦj|̍,i&^1ܪVQ~d&P.YWN~lS.d%ӆG&N&}=_HJ}ӁmX[gnbSA/0qs?ͿSO~5VNtc`{XsSlK? n~s{{\ ~Gɮ3L1>_cƏgabFjA1yPU/2NkzY?ھ}qt2E+?,G[[0`}AYEMЎ>IP(h\bSA3{ "h_ f锃Үzk pW1* 7O&uHPt)id礷7_dC/55s22<ҍ"4d~:pBa~YAhafV 'ؼ\k[|+xtAP<- g++reLKX~]@f&5CH3,)@o/H *ႂs͂Br{zʦ<, DekVX5N, E{*' fnuaMܑ4YScg{D#BnA8O4'")tsA(l" fta$ [nm'\t=ŒsvA%u !y\yƬ-f)h^wܷŃl^A2kDvErђKl.Y:Ҍ6}g)W;[my[kYN~wցDfV׵{T?P!>*>5wroFy3vZq˗VNL{sb Rv,Td@`y~y*tv\{CPdxab 魺{1rZ=}I s,mR[4-|";qϱŜ#VhXN-c:nt#. $-^ W>'nM`,`n-c!0%jJ[a|1+[F+[HVWbùB>ZMz/ڔ꘺@H.HQ)-J$24⻲DTe} SoGS6Xk.lQx+]kBT|x҈%qy}an)Ү,ِPfww"\ 6 OvAzk N; Ѭ ?Ra@/·]N|/.,_P<3 VrJphsl +mo2ʹ0 M M-[:*$ =5/-=tq6YtxGZ+)2w$_lVryYQs}83 , *(D__ 6"]Q{/XPDEv "P^doq(fJ&s&Ir'9~BEa/^S߆*\onÙS.O>CϯCނ7|YBT&9-9|Uv}RW̾Njyԇ_ܚj֚Xk"lݺo}ךּ]-9p|^648< 0aWΥFLPٕn@+x&Zl!hn/Po#0r0fj3A5IAv*s>'878˜g5kcbSd&ݵ4Vj NC?uL˾;4-rE{ސ9fM3~(*zR{/#NO>4wػ#.@MDkc-( 4M|XFE2 WI1"$M.a{l%Q#0_y.}p!OȘi^/ wWpLp1Am Vfdخݔ?Eh?^%fQ/xJNL/87_)_xs|eƆOfCE_>3xb8Zh&g`K]AsrAx`.tt\YR$I @$H*\46фh1؃~;˟}]-3(G//ԟZHNԇԣ?NT.$XsR/Mpޫx/?haz{gᒧ2Kt/l 7 |<6XhXxY M/8Zpށ~~X5g {s9.;,+HJЎ!'A\fERKɭ7U^Nq,f|y@n -r=P N$+~3 6hímQjMm/-,*l%Ay1PPNL4$a<֗М3 Y!{B7R#Cq V LqW%*܅|h wi_g ,\"x: ( X-dgD vϵ{np|^ 8HzepL*ӂa 2B Ba2h{3]F dJalhJ{V+9G:t:W 2ۂ5;A`QX\*"J8B&8@Pea ̈́x~#'oB] L)-+*Kr 6Ŧ|_϶( *uM=aY}1W=⯷tVpWWPδ>p' R"n˷n(W5OS^R fkYп)]C p -7s@;+FEY&?5]*nR i^W>-E_pЌXf~#sSݫMWnn 2)r47tģF%k .3BPT/L+P$n)T}55d>eA3Uj0tņ] HkߒF8mw(nԻ  pIF$Syl%8)`_eyk\~[6ۿRP/>LKz'w*a/YAw\j؏}-o"L ޛpÂ|9^p8AAvm5G/od x^e~ւ_"iiA1aYTqN߰?B>|q}k uLpY*:I^\+Ly ᄘɂŏc .=(u9vܒUenS՚tv;n P..:=@7ʭfƆ~mw , "ٺuA% AjB :AnҥߥlO2H=O6$UP"(@YA HhLFPм Z(]'TAv2Ȩ2)Jՙ C 8(e6w]t}ujoK駗T~KO ʗ,PQVI 'E๵'bق l$ÂԴ?Ook1lg ?e77 tow '8~ P^ :Nbb9x& ޿0W|{; 8x9zZDW;H#:b# U>߱*ǿ'j?5e"?-kDatӖomb+q9?6hڠ)4cSk/SV6 b|?2a%NIr^vbuO?V{(6h:|\s)>%مtXA\^ŽxﺚV5mrM;9uG95^fqG;8v&ckgSL0A#S z^M׹Yb [b gPg K.|R:0`uINU- .Үiz3~=G{xx8+o cs3ЬcIҼ\Qܵ Xi1hs `quO_P4^i}CTUe#}3;o;||7:mЂ81I&S[ wW.hv^w[ ccOJ$e?&{t/1p~!}8d_l?"[exI,zcK&"?X漻ߥXPNG &)@ =M5]e1G" D$I @$.WoX qaaq;WyC*cXi̟Zi3տ&sg# iU_pd8o})8(Auw7wK\;wRA~/7=f6o8vdžtȝذsAk輊 o'<{y,X&NYt3˿6e\{ޕ7W`RG?$CKn~4{ླྀQy,-[]s`rrr/F%le n}+d'"[wqb]o>WoAdhw4lcĪν]u+O8ସ@ &-L=#x26U=ϕZlwvV%Q)]epĎ[k$(‘AG'?D"AGΉ`1˛ 2`[UP\å͔ݔd9=`v#dC{jcs*+(%md@IDAT >Ÿ*xЙ\w#bۥks~ksoNnS3Xl(h/G^H+(<^eq$Сb*gDA^$*\[>b!Ȯ *{ Ar ΂M j;ມ}],-%x Jߍ~[! s&ۺg~i)kȅC _a[./|1&okstBJ-)#Ϫ?|5'QhRIT\GxpŃE;g,rI^߼O"wZX2}B: Oӛ P|!NY{Nbɂ%\7}Ȃ PteYP;A:0>)Nd<I5nq /ݦ6H3I瘬jYJcǔE ^~((o9>:~5Q2}S99^pa}/{Zl1f+jR*' 7܂}#S5c;(F}>4 λޘ֓6l$3oc:r E|F.x:M7L|f|1B_,ߺuK۪ __Ǝi`p>{5+8ٴ3zyƌҭJ'.fG*hUp-Դ\3 9L:9Hg=<u/2 ?zv{2P^'JlҢ͎/{%y3!IR):`8dP&8 Kp~Eabxཨ&_!(W[VK-]%I @$H" %CUA}XPEP{\@C[OA=>qU ˺~P>^ AÂv,?TH[W9{ 7 L_*+P\/xiL a?[aׯ(|PҤ`daO|ZxNOAx   X'UIs d+Q LP-&O#q0I=AdoAXaRP0 /s-߇<,C v xb?*0/ |yFp^{Gp1t5z슿(K+J7D?r՛"pS\k1_.p(f fh].~๹Yʭ5Nn$ o%#LmAEa?N}>/VZP *^+  Ο| _*8+AA>?W΂r?Wp\'ว'{ŒbL`hZR޼7av #x-ƻU~RU/kDx5y?5^ʉMqO?77ї n{u~s"}jѥEVKޒD|Ɖ1bPJF.|zWSw=̛I1֨:o3p-TG{Cw7h0!4߮hX^O/TM2dE,~<ﶌhVjZsmʇu@Ij=y釥zjR[mw'{,|aD?4is@,+õټg,ƙc{𣜻w-l)hzmOB>~` s<+yt䞕IrNghMߗA[/<~2ָ6rxu-b̽~޸t8caǢIGd$oM];Է2.CT}AFZ**nB%ǿ>.;4UdO!WޖZG_ Y[L* ? K7cIam9EKm=/'p&q&.fEy>/ 9 3Uwqqk~>nJOJgv3^T$ʭ'-G<9WyT-ݔo7Vf6#6(5aLH^hDR,d0gniðd؟+9M`Mү Fg|7v ]PyuIdkF~;9eBZit044[+יg|u/R3/_S5Ztx[ Fp!y Yt}o͖߽G^_ a8ο5rA0OgI9DnӕǢ)* lYp|,.BFS]c^ΡCgloQT KY%U"ԕS(p#?\PYPO?C'EH" D$I &pqdވpFq xVǰhz$ʈSԭ=Uqў' "h]%(?Ùˮ'p¦BR_'ׯ/շf  zgA{vG-R/4{ #h\ hG'hW,[@~=ɈȭʗnX#L総 wƳyvO.W(-޵)\*h?`"]3vw AUОWp}bzpoD٠[9_ ϯ1H|v4wѮ:rtϿNJ~Kk c~/xoIcnKݩg ~o"P<@Z*LurnUQiX|skU6I.ݡiтC1Y/ ًk,-ᴃ ' 2NAEqnm"W8FAt$fr y )*^A^P ?$\_ > f)~˦iVmq: 73~9 k<9s+ܛ˦/u_ۨ5I2L^ ڌ6Uvx,Wi 2{|uY^UR7̜i)x m0Ky੼ar[NJտ{~*%UNo܄A*a.߀R& %)W2k$-yDsq,3y-#/Jϔ,q~IE.]u%vcrJ';b+m~F$I @$H6i 6T6TӽلĢ g1Aj|=~g1 Kف 3KMػJ.=N6 l`A{|~`˜yf N@6!MЬ#h_*h?}(ϽNJ^u0] 7,cI!h^&h c/?XЉq 7ŷ˧|]rC nl%Po#qG`i%Ay/WSdpin̜̥4A܄$a9ySۜȍOD7B X+m3Nr? 邤w cvL0 (+P}'!RSv&$a%]&8Z$8#4͙6VBZ5TP {]iw UV}D@c9 ynkOf> dTʷcMCxCz1AS2gihu)(az4G0uWAz ]Wu7tuJOgA?'[禴o4Ks4?34`'hd æ7(hBZcW d~LNTMns}@5~3Wk w1PC:̖iD"xir?~mĺ"xQalV; F(G:/tPn%ۖ<`PpI[3يh+9,YdQ}^|4'YLr[ނ/ǹnj\$H" D$I @$\xx ڗ; &<"h~+h#h^'H{"b[b-)M4sPҗ\Y 'b%/ ilA8_+hg_)G . '  r ]ᒺ޷(l(9m.q 'G7 @v=^G w AAAJ YUPY987L)y`@Уq$_zJ0_1Ao-h*q@+w]0%6\^ R[‘Xs !p :\{ M >Vӥ1l,n#x! FG 3v\7ւ -+ڲa%[a[/9m {!x}.xo|lԌF/tCW86jnƙN<~A}XAdQcmܪ{U݋ M.&V+NOeL# E 0Ƅk+mU@NoBޝ]aOAG~APP.eqzS]&*U=w5I)'އT^=<~7P8Fk Ex?RPh5~_  ~8tjSA!A5h?AdA2"[bJQFߚ~8Wr:Z?1U}6+{qbߛ&ϧa1 wCo̹t,hh'ԧ=_/@蛾߄ F*0 !AAlʉ_mt ^%ʾ a(n8T܆ݳuWS[4_gv`1)g)_oX״nɷx=ُWK.3Gi=܈2ZoXߏ] w ڛ-\/,y_" D$I @$H6G T4 l=MJA;py~}-TOK̸K & %[=`c)Z+ק>Xp\sKqBt3ݒ= w  ')POTAd?\7ϯvˍzCp Nu5ANhEю* ,~#Ra~ . $0UЯ2Y}YS->LXl>Y:% &do%W:]ЯiDZˤ݅1Mߦ -CΧ93Ri_ה7A炂AO$5Z]JJoľ d5C1ƴm$(3 ɂ#mo`{ 5 (iW/OK5`D_+Y4 =~_>]]Mj^yӼjt9 t[,4%4^` j0Y9]#)27h-ʧ{`@AGhqut v$Wˆ+ I;"wHvҨ'ϸGџl+~x%JAfn?2 vg¾.z\MKh%H&O~ɼ} ϣ/`',N KŷQ_Ulu[:^gȹ˶ݴR3탪9=陵^3v,.a6ZJMINzeauWD@9<3Tp)bo⇎1@?}eZO ǂ|aN"?@$H" D$I f*YdsĆ ڗw7 {O Wg^yA} Фxr{`p4g٫TlwKo ./]`w>N>{ 񱠽_:š8ĕ\$?PpSj]k(hD,aD?Vi-$Gz3䃺챥`PAw|`zS-eS" i ן{z J * .~69>. cX~\`@/;EA;pA%J+,8_ _K _k/{cY(T( 1&V0pA  -(w$~:D:#rDyr73}] Hu۰wBB_.(H KT8 'MewL žZ RRFwk 9)3__~h"*prh1;Z# W3oS37w[B}E> ˂糯yw|`F@t9'$I Ɨ7[r*a}J zDUV Wס9UZ*,5886(6r9 qno X ¹M hc@ ݔ[z#4Y&hԧԳo7G: -#W#l_羉,M` 1^3 {xޫԓ~26YŞ;}B7@:h~,%byiEbt$i5w~LXrX Oz:Hf ~kvHo5<\Ac^3# K:PAm%67\rvz@jrp8t%_lzu_2[WL0 vT,n%5)О-V0Ih%9WLӋ (P? ɷDv%<(,SFD.@$H" D$I K߭U ;?mA9`=>D}^^ >~wig1m0SpTqW8TA{$xYPo*/# ǭr 'Ι-ey܌p`SW-No/w n.犕LRZ ߋGDfnI'#L&ĺ nϰ&L=8EOL`9On] +F>W0OAL4+xOpky+RxRqURyK?3#L g2ݽخ Y XAC2NcdWVA:@d']#x~v\(/P?7i& ħ%vt uEGAZ(7Jo{AbCnfkӘ,eFW@zi:R ݟ,eEA \:!X{Mp`{LpJ54YppSVo] A` n޺r[\$HZyvD(jRR#MpD8eڟ ]^ђ+iW<ϚnLKp)0Ɂ=> A8w|lS,;W^TxK0 =2X^qX+~P {Sgu?3̵6Kj.XT@ƌ _`K1ԗ *?ٓ>H#[zuznvߘz#|΋uox<;t s?cdZrPlѿ&SrˡӖY-'0â=Æ<-44Yмgh _|P)2"R*B෧[$F9x~4+_^(y?!i<⎂j%G_LKNR0#A[AC)q.=w=}=%z. OoãUm0Y3J] 4.+d@ߒMKrvҀzAm}wփcˉgz|e鈈MW&U_5'W׬YܦPD*͛ճ䲬}4l-ޑ (1q=wQ_ģ6<[n<ͱUB!(dp${py݋fzmNF]ga^0^kq6NZ7?R 4 ^b-y O j`֣ %5ڽN)FfQBnuЧc\}$G&{߂@awY1; *6} V;Xp3NhG9>6ەH؟m$I z5={B7˕ֈn7ܝ7f6 'aPWڥܚn|穛y,xWh؈,$ 걗F1 ړCf9}EuQ/.B"$%$L5l)O.,dYgk=O LaRoϐh߱r,x<1@'(ϚoUN n7_V8 W| x&xRHbLz%sdx`HA/V83{S(6K;'3[}Y{ ˄MQQH" D$I @$HJ 8E_lMRhD;c/@'h, .; @y 6\p8 q[L##Kf7Q^/h(@W- ^eIv ,r hfxGpa  \{);B︠ٽ AI"O'bh/]vY;c3} Я oNPZe] ?7?#ş nqeJi!K\ diS ҟ1 |3j%\3ԷCB u_& ~N9mB8Lt*(:wmp[ZUV{o Y?AMWA>r@u({ .|qSTC&Qf=ݝitI ӯ  [!/%&; |{~3cN)c,\EEI @$5@?O>6%ceggãAL:`R###t aJRKLvG ` gQQ!{#<4s>@HZ?}>.3-A=X߉/|_`,k|d>{@@/:R3?v yO#PmtTAT:f'ݰ̡6ٯeQ?9(gfgȪ{1WW8>x=půlŁ ^)R:^^rɍԃ'iU3׋Q_ulll' Dif{pt|7y(`C˜,dwFbpz?|+w$zǐ +EJT=mKmՒ!:f ΰ%E,qR?;w9nT8jtř^G h @^@311|(N @9\{, h!tE+?%wꥂdYE|4\K^z55fWǡ?I0AM ?+EL^)I @$H" D$I_/\O^K_õO }~S_ h/#?-l+.hg'CNC~A:>@9@nO 9[Ў#h(D]oO-8OKP0=b_g>o r"r*qsp.ً><-NA;YA"KK뚠 |躵m.PUoå;G &~)'@>G?G'8C*ӦTgMeJ? 3%:Z` cE%g +($Z㢮w/."$FNƜn1m-Pď<ۻ /x_p߉uj > &Οb2h8d]Ej1v瓤=] d ,=E& X3A`ɂ+K#aꝓ+WƟwX" DXs R[ywЛD)z l*~_/hFJGۈGJwj ^BxIj@M/n@($i@c\3bPvZB%!@IDAT{Вbw/Vuw Lc{M:A7Te,ۗzⳋ^pXJ@&wwuLV̅h8}YaT?siIޥ\M}8\碉ҏ/-ϑ6qhVu?I-.J톪cmhu?zGa  ٷb{/*Ȱ 1/:~N*_Rγ^ {uԳh굡-dL;#%5c6Xlt8`:0|0;cS<>y9,X`f&#x(dͲHaz}0o8CԻꝩt0AQ v-0#5T.# D?suk͗y.#1c1n}bmR*~@PP >.(RܥQWi9S nւ+gyf{Ak(  N:K?;a\l?Y.o"𫉲p`AxN%$qO ҷ{\8# D$H 5Rm (0Zڥ^ K|Pl7=k03[_]^f jN}?G]8>:SPGҀNa1A[z+s&\"QAQ;'<ƘE3j49eK]r$ ɒ–40e*/<>x+y|||JCmy*GS__Q+o~}DL-}q G 1^O3<}kZ`ށ"9;^ ~ch J¢ d\jZ-YT|,B$o+ ~z/q! 1xךcFj l|z\m~2oOjo$G:H_-)-~])lW|nP'O$`:I#}u~GgO]Av͂y .do9!xğY^pOΨT̝S_pጫhx0~dc [P$Z 9RV@7e\s`ޗk@6̴#舮'_SǷWWpwɚOWWT hEO|Ы DJAV# $Ȏ +Wpv)m[F cj t?.0A ur|F y>b S6O9W^νwNzQ" DX_hjyü嵷ث{ͽ1/Iv~{kkHdj]#'ɽ]:6T,bCEŎg ;֧}6; ;˶[7{ SOt;9ds朙8 1`pv"ZoaJNP|F [ .cnyGER,K$#4`'9󨙽+7`sư*[v!/J+9|}w 0;숼۴"p#nJ^Sz3貛g!{.<1s>ڣÞԯoAw@;A@GD7$%]X2"उ¼:kڋb,1o#@x|$357 = m˯d.p"٘׻pntړa̔&Zj>p:ڎq{Ӽ.#jgg՚SCh[~KVegk;g潒EpN~ #>I1=3aOњ4fsa0ţ#g>9D?)g/ؑO 3|7TҼ 6t4 ?+o soYEԻAz 1zM#_9 8 8 8 8 8 8 8 8 8 }4d\|]R"dЛKՆ=~_4L}[Oƴ^W7 O 件h&PIZ=3VO4{ k =ә;TL/Npv,Xd%r~;sޏ#߶r3##?X-\AO{O o+w F7{Ep?'h o!W[7~*JJSʲ0zEsntACx&A4?3U[[xY80TI|}ݸ8xGޡYN: .Cn m:Z~VxQ"_hĢ-3v8/:EhuHS?TQxt8)ߏBXV,}g =Rx>!SǥXzc[|]d#4`^>/6NwLDZX_[l^= &M\m۱w;o0Ds[ # w!bAEϴ,Ɲ3Gp9#=pwcٌȟ:u0(1:zjq5)GfQlm߰]ԻqQ>ToMBW} S`5<eVg4dF,u?{uG"-onTA=\K#c ?O>Hw:hӇƔ`]Z2Pr-kA/{t]:J_:^$Sw x 1>iiiiiiiiii`5@Ў63s2瀯vq2X  &#k 옻vwpoub^`L$7Ca&A/?^=UO}Cc{i"gg=u@n,8^ [b 3曳3{m--lm16'`pY8a ?␿r3*D]z=Wp aA`"chi*/SdA a$)p(傁{WAF:,񷫝Lv%7v|?c _ʆ3  ~@*;y<5I|]7X<†ܹ!N5kG醂Ak[ $ ? ?[P/h|>"W2~wA99c7~s[j z-+x' ^b'_"vpp;hw3cS1L.O"`U8;9zaz8r W⿧xBV2W6xwO`lH{c=y?.7*f{ HC!cfuuȬyX8| O+FWgQ$<|٨N5{t( Xb9O]+)qE2'Hãϸ/H=yz^V<4P,+y^痒>Ws 8;]sU ÕCj\}B%᧤+:9oyM)~mxG{h9}C~<K.Ȃ?Or?]h<kY|6L+pc=@7-&[`,Lp+{\_`U 쥦|C v'w  =A90%-%m&H`a ,r(-vTy2@dE`ZjZR7P0UT)`w@o3S+$o4㪮(ooV}HXNKp %AdACMqQlZҹH86R3QN5^ꪤX8- ?׈ESF{0rk鴠?rPeyEpt]# ~R7LpؕctXgqnqH."}f vvĩkaڦ`PV~I`Ѧvyo_F~ܰgopGт t4 ؑ񽲿繎gd1wz==Ӌ&~N؍޹zPDGC M~G;xb9 kN[! ˾9KIwzjWYц'gzui7;4e_u &R#a{ůIi2 $Ғr~mg`/ <(kNpVx 罡r횪yѥ!Bm`~ky=}yv%gs Dat@dAA~(}ӀӀӀӀӀӀӀӀӀ*/-?,L F+KzD@ / (E v=i =V`V 첣v|GuK-0I 27wx bXAG̲”8.ӱtܯZ-8b"Ѷ}7迿z*>Wp3*\|*˰g'K(^,hY"b3Wo65XUVrzo{Q d`Fnp@#JH!k#^$^BOIb~h$uEG27LG ~w=IP5Mw>=TO@2zw~fv}D`s̈DJ ,&11`|pۯ4G,$\%) 70;ڥ:yr=wA^#BE$.3LԦQHGю߄#Ȧ{!ϳt,T-6hfKhSsW%ʁYՕ6wz!*>P`N'޸F!fDIߖvӡf`aJl.<13Ay>(ߖ|z{>gwAW60ێrL6~76 K‘+Z\/"0T3Ve1we^{:.޾=IpߔbwPc[g ‡ KN: 8 8 8 8 8 8 8 8 8 5;xc*(\A*%Jy9DYs6(lA>{SEpuiE; v|~uYy<{ fLx b^#؟ipwhOc|Zl_'tbN<7}:BK3 հ`va<)hwWfLf8V@.م,ʮS%SOPlˍ;N :dF :|>/t^(xp&h"71,t$I>]p\SA߿%ȯ|YRV[e~E}/߸=q{FژV<>{pcӫom[Z0˜!9l,oC|U,ƮGD= Dblhϯ>U(+>3I vཪ<Ű+Nyxhl7%w=,fô?Hň3Mi6[ i_+{GtULOgG7ޗ8p''1M(9Xnq|=CDԗMl@h O@~lN4<+YICblXgXVp< n^6E ~=o608v[ERVVB?ٿ,݂h_ L@/>"})qsJh\~ U;qKethdMa_u# V{(犒KKhu؝+d„NNNNNNNNNNl %WW ] e}&q ~@>*n0 Y.w' RC`'*gyv ߗ$ `' ߉z!h"Xjc{Z ˺  ҂![~em(rm-7cY {XeNBrj0w&h/3' Q.Jy?AskOQ)7Uz {Ḁϙ0w%G<UqË/k;L܁5]`EVa{& !XS#AG)~ :F 䖂 _kA - ;G=NNNNNb#/;㟩%#!{E฼V>4B>`S2~˘=P\_08+f\1|;` {jhmq7[r WfAyq^$F:WNb^Yp8l[C/t~oo ߎ} oB/&6c(G+)MQI!Q++Rdh' vy6ThV3.3M*e3\go2ty{{KM3HC;0U !1vhoJ#O[0n$+QҞϛa뼤ɣjuhi(w,S]UEz" 9S&-,V OɞMЍh8l:YկFwsS9hso?ƒ-o}o8H^$)[Оs39 8 8 8 8 8 8 8 8 8 8 oMR{S`e Nnx>;.Fn`ja䖂 /],vʜ.qn%%7Lpr@^%+Bv`#af 60b zvq(I>ڭ.x]>5i!gyrTd&7$~)>_2yvt#GC)ǵQn&2?+7Zd+9װl~ot-3tU7iS?Y#k"wzw?һ]J oϖhφNͼE:~8gl_kWVFW]̽DS>VW&\D9."JIϏvKh 3;1cfr NϢ#oAG{5z_!E7 mDQZtM~+r] Ay h#8g=IĪhzrFdH}LݳFts'mO{/Z{{-h˧t}_dYA44444444444hB#1[0n2]s.R-vHA`_ ymQJ4:Z$`|cN`j,U(O N_L`/v>k G'/H@+8A /:KP,[O♭ qDC/%j o䎋 ҳ,tf"@:-j1z]_c-qq3/H$(bg)MުGA=oe:ti#[b\o1-W Bi 8u1'[jo<:ŢV$%?}ES֌f1[^F* +ŧ  | b:MѲ؞_q->w]NNNNNNNQw }K!ł,k)x]y@- /Fv,co[\_`؏L~+9~b]1;:ih2l;KRsٟ0!)0h\'Kpwխ;Yq*Pyb<avXi.ҍgzK ?>Q+͵*SľlQNES@Q{hOo<$#X;r!ib1ϛieh.^!zbNsfxV7( &ސ ӻ 柝9[BΗڹrdDOUS/zDG Yj 3P؛E6}>` X.%̫<:"\.ϞlqaOsyvaR>ѕoFIt{jXvg<cۣө:fmy3m`jrvgf]@Quo hZ598kA.;Yl?~x$f)i %?/Wk P= 1sN=XO/ >L~g좦` ,F"mA9uW 9TP80 7U|' vߣTBAJA4Az@e2Zس[-Lt |n1vmGnm/ˢ5cE.,yxO oF6u{IpdJږ { }_wy3˜g v/ԻuJJ<~V-*7Ѝ.܀k.A'XUAhOA:v Ǒ5qz~f&q5icYB#w{Q O1~9B $ra"I:م wF:߁B%mA)zP^^--=@+u9#tI?Jau46ݧI_!%oOV(A@oJi|$z 졵%.CfnUIAؒw3A`vY% 䣂z'3R 8.)G ǝʞx)A,t7S|O?Y g @2dZ5ugZLDp.\6.8nۢڂ5Lx> +vWCb c1 }\N:b ~[#^3vD _qnY \D\pc-s ,܀ Ak$8S;J4ÒȖԅ~Kjĥj _Ť߹)/[}Df(a;[7 )i6Om-8;|q~gos}+]a䥺%b/ԲKwڨ1#UaMm0kXUB-h`loKz#1H/ɛ)qTuHjN#k &mwO( ؂Pw?c=t:05ڊn`;bGf>I-ǧy/pԭR/;i\׍Tf%E?Qr]ho{!V y׭|o(jomSႜ36z$"y?dA +"Y-3G~8Os6Mth{KY/RP^Gz̻vF-A0v9r}rSkDM ߿ yUp2t~e6{d<  _ _l)F {p## @:C oPX'.ZTAtunR=~ ػ%zJL \  =y7[t0s~[ܿT\% +PP %νDP}%裂>/%Rd0AЯt`F+Z=z@/ Գ_iA}YCߒl4{~ax ;R]@{T.; ~byh,lM"^ 1#LS?=+x@cI w7%p? n3F~?'wӀӀӀӀӀӀ=%I)v/,q$x,uܒ5`fÂdX]5bLN{?zGWU8}^3qQmrF55U396|b} mP:.5 )c?&`FeL xIgn_vv:ږ\| !o#rx G ݷ%!B."d wp~m垦uk&ADz_G^f4V-0鴲SHax{oJIn6kg4?:?qo'z"ž :/dk$oشMaRD6%xV5Jz%o:I~бꟍv0*R=3t rp1YT|ygV3DԋkFD%7NfSs L?^pM˒ٺӀӀӀӀӀӀӀӀӀӀk [SKs`v뙂~=.I,$`G,ܭ^,ѽX0m~h?-W,cwnڙTd3вhbkܙr)& .&oX @/ 2[`ƞ+ Y>J wmvC s#Y;JPl;_Nķ'o" x-د_%J~/9  d,^<db`n F5Oo ; :$  @ ^-]8jm:;ZYbS+-x%{F;Al,f ` 3ʲ]^_8 8 8 8 8 8 8 P Ć = 5] ~B[M_|F ՆW7|49٘fÛMΟHfo{v%p_>P#6O1L N"{,Qɼf/>]E}.<LL7B>nzz muc;_3!<{jMkKFv<@NI; sv:>H]ch5 {/;e@M'OqdFF/skӍVU?{vf _$Y5Q۸/JFwL_ Qڿ;E2`yݐif^S:txS4U솒 LM!HGBlI󂡃vM== ΂Z'hc5v6[iiiiiiiiiii`5g1Mlx(; w Q@>$8n`0fzBA Xz-X bu qA}wȳI6A`u 0oGP?HVp;A9vl(czV` ^tA,vV `Ű0 #yB`T@Z\Fa˜& DpwNPU3ĪY(ՋF:uItt@>-x479 [(X -òXqp%|*)c h!3tQ*PǮ<*twsAG= ˈtt4kdM:qV,oʚŲrߓ҅DZ0a[ATAY| ]$}`Ax8%dv ,>c]NmЧ ҇J&84<*?=܇5?9iϧxofUkd} !Z: _7MyoM D~0T{ FM ]u͕vUf;&׆;n%!"vMʎ/B+I꾅 ׷1=fL'JCfyXKIjkƆ̈kh?N ah?2k8ocj X0` zÁSwcs/ 0Ƀ:#(]$drsnm}kgWmؚ3{fa9ΦokSvi̯ﭯ7-f:`{#ت$14jo!my@`#p]:O`7]+8[}NQb9NNNNNNNNNNN *5`ӂ {Dp3+}X,X `wc6P!@IDAT,/O؏ 궽eVw~?eֺr3d/.|ň>Ft_@+/y[pܣb{c]ؙ 6=Rp;@6\kt=/a_P/8 .<(ւHɂwLECtmb\N/ .0y?dv:nrky'/G&3F0l}1u G茷g@BGf:cvJ;so|_< d ~^x!wN09~־V9>dh Cgf 9.oIfk2xۼ͙I9ڟjU9(=TV%&l$LAm7jy M%l7ӀӀӀӀӀӀӀӀӀӀ@^QO'4z]`'8nu^` ͫ&0Km48nN`/&W#-Gg- @ W^8襉 0X`N?(݃?k:uE ^O # 6}=-K~Ee3FbQ5B0nQAPADBpܝvw޾X0C勂R`!0gXVaW>:b pM]bLpYV+ߠ?~pT',xP{Ypc*T 'c3^ 8n+AGVA ,k/NNNNNNN, Ik+sfBEtH`8},p78vEmnS nɵeP^QY]ɞ Ҳ`_ޯ[%pl]3G8o 2N?krWKUao>}5FT4{`*ƝpE*Ys>P.ٔk.׷di:5c;b";]#j^M>s E8DzwyUowO0}Pw:>l9)ڛvp`G\fp1 vsg\NzY#O þ8_ܩOF~b-N7"F/>!Y3*N~Srw:Lq_MM!n2ɼ :0t'I 2 )ͼ fQo75!c2I6[EHI?>@aaOH/JzW{o[9Kd!Sy*4<] r#o҂Y} 7,u.4444444444451V.?ܜ%pD"w rt}% +vhXZb2X/~̵7kr@/o mA@ : ޏ ]r:+n Vn3AY(eJf.@P/3H cm$`]}'m="^&^p]RU:S\Ϲ;6Dł ]) :b,0e0E7d7XAz@(Ӎ̑μA\AyF,X.:}rppppppp#-䔭#08H Q{@oM1/>lR6G%^gS/x3r|pUC~I_JI~.ZvoPUIo BvM‚-z#yO}~~ΉFPHh۔#[DrRCd u;aNYx O?èLًUb?#s'8-ʹ˴tŽ!%e :UkE&M_$)7ɺ .N4LҼP'}5ΣpAv%!D[]Иw-(SJ+רihtm&6G;ƣc*Md 7l0FVY匆zzWaAO D 6ԮnsppppppppppX5@:XW'ɫv[˜5K$O/ap^F`g^ !H / bac, :$tE_0T2?U' 2X[kռ%IjsV 8ѴQr+o++`W:FdM4N2\ ߷fB;k!*^vSxZL^)+[A)6hyG_Lr8ܼWf0fۄ1##*Jgk+7P5D`ev扂yk'd)H\QC@r '+"\QW-|@mT_%e}x [ HXKNsld   8+>굋寫*r*R?^Fp-{KyIr|B2XРG1t*~q@CXꝻ1zȝrc޹ȟ~ۦwΗ $P\>KKNNNNNNNN]Ah R`AGn=``.k XYU{6c8ͬYC_pxfW- 4xgL5n4e-+ffPwa7Mp*Ꟑx{  Ey7mSlֱ#ݟ5j?[)eo_4bC*u1%^ @e6#y67DDSﰿH"ꐲN"~3O ɝS\Ly7]P֙~x]>t80Y)'W2(6; D7>rxc4y6R;3a\ @0 gHD3N$ӭ$3GJ?D%fQM6".L00{ S˿ voK]9 8 8 8 8 8 8 8 8 8 8 X xgc>`|%w8U v 5V~Um%8?@!g3b˹خG)]^ {=^%1s'8XL#Ƿo#~`n,0rS^7(]=>tFu4GA7ӱ ,4  T4$v7X,1< $ 0Dr@2D#Pn!]1[%^Ӥ }#jT> wX\^Lzoi)1.ԉ ,嵏fx@ǘ+%gr{HFGkXrҧB (0 ^2R!{?grLgh7|hfsɪ k*ev+t.\$YY3pKBϓdAْ5[yA{vչƬ]G`r޺A` d[$=HӀӀӀӀӀӀӀӀӀJр_&d~_o,/$O l)0 gǂ[ ~XiV*?hY)u+N.֘'c+H_$(Fg@ B%^x@Fsi-^Y< =TЏt*̩P?P.V3#xXcC,h *8>7b2h=W78` #GP3-ƿMsL 7Tm%耺^ W~@NBȖH ?,[E+ye}44444447Fx [n 0̭)UId#ogFQzIgM̛3Fy80Kz6NN5VQ7-.}$ק/,kZ}SNw+S“ &$zBvk>K+mN׳sq6w)ܯ`<7_ ?b mEܵ1!k7 Қׯ[Y\fYSuNL{i5ƤSKw!03c8~ZEi8L&3cɻA戰lMiOKx?Z,j:"~J%Vfm1(@G%3І8d>M_6쓑|PL?^L v('Ks3<)avD[j/BbtJ2/3P2{EX3·3 h[}0!W;#; "L9Epeؼ~_ljK8 8 8 8 8 8 8 8 8 8 8 u/ '_48]4Bp6뮛P`] \(RA:SPW`1DPg?b F= 8~cA??{Y]UMX_/\53AozN.H#ˮ~7j b>+&۬Hg)+64 W@ʲ 15gc1D XjOl"O=AGMkO]A8yw<(e༓-ZR0ee?_iiiiiiii`%j +x<@l'0^(H*8n[Ayw+|rW%NdhwfuPOUכ5O`kb~)i`D ]v ʍu.44444444444 h }:BOc/:1l-pl"h(U7b u:޾.l9:N09P_1^`c?eb@?' +~@ůORۭvJx.DЩ$L&/QP㶲(UG<~M#b΂[RPAȖF@Pύoo ?Qrt4=.8>,Wi9wppppppi K8Kߵ?E+߷,[m/=yޅrp6,Nbh6| Fg7;o$${rj3 :0±_>bl oޜ=lh(m v,]3x9DIu}4pcgˮ͢(1{8Աm򞨭۬#=ӼpY_piaO̦3>JN_.#a¤vpY\{ CÍ2{?oLbԩJ>'Yn:uʻ&h?l:h8st4]+0;Kz{mz/3Cp/;LjBvRSZ:ۦwI%Ypd8e6?sDhhآk$ZiE["[|hf[ wjf (iӓ8#[6Uϋ6-x >N֥tj4-/{'EI% ` s@051gkœ1f,fQQL(DRieLw[;A^{Pv9U%b#qv,:p 8NS)p 8,1YN^s7 AJ.H>^0r [)I?@(pķ," J U^؞D/PA [XAf`Uo㗿s(%AA|]L|?[T+,rr.zݡGG. ѐ/idȬ* _eQBQ{b =1[[W ^+^bQ= #.4-!$' Z ]ACҗjoYt}OGё'S)p 8N?SR/O/ g 1#x4K,lu/:_}slQ7Ն7I7TwKv'zyv!C람i]{pʽhnC7"G5Ѱhw= /ßWrFJeO_-7U¼\y/>$^JLm+^C\$%"CJcӊж3Lk_ƚXn]a}uݐgh8xps&ӷϑh1o]a=T7܈SM0$!d%ӉK؞tN!1@?kNHjwl|25j:[5cQa$u<)~&4J*K> ]W:ڶZܣ%\{2x60=d{Px?'xwxhtbOc?i럋x٨+ҔxPt|Ƕ|~NgRx>\hC^^*'nΰ %4gNS)p 8Nr2FvՂM`}KI` Zz`<m.!z_J '^mK WXo ^'Y.˸ ?}qZ -"?bBpv@;.jY,᣿],# V 3bSoCZLN+굏!hcARA<׷@peucޭw 8NS)X>jeA I#!t㽴#W@M |Q@Ai6<:o 'Q-ݨj&dFͩ.~UWߚSJ@=3,P\Ξ&1#!u2Sm=lV mG:Xx_$ 9grm%_of^s}k<; |[Y=魂LdI٪L#1T2755ה-zwJ,9~88:VS`ԱXiqo^뗙xH[ͧx<&=' |;A쾲;.RlMuoZ[Q! zq[- ֲy)Ex9= ܉]r)|Yu6QRl>!=N,ܘ,JTϲS)p 8NS)(ĽW-N ;т80Akz `DC#, /{Z͊X踜LkK? =`º'#^u@-^RB%/'`+'vv/Asх;Y^4]\@`GEn;ULj=bf2]Ep; ~[ ل凔??rw>[r@@ ܲHWo-;%GXx.>hr\/;0Gu5c79OwZ{n˼qȮn0d xgPӽǝsmU?^ȴ=}Zb~e/MՕ}a4n.el1c&zνeݳVF>߼⨐礲ͬ69Ce^>;]H.W1.gw8U4${+}56.|^ dz')Ƙm0Hq7CF>v&xOl.eJn|COM^&[+[T]{ٚ~ 9/C˦Y}BD3zSlIODA.Ѳ NP]=!LͭBPW~#-/yHěoX\/D?X.<ǟ6#8*y}ۥ6qNS)p 8N_+S5x[U8֮;Y~`bAA3Ak0fPA;A#!P)pw(/yro}>[ADN_]%hL;.ayYx}Np sW!hOINtp?C\mGpXOԎ?ah$#xUl7â"-Ԋ0u(#405w `тf-? 3?Pp,KUfYz}aM!S5,q)p 8NRhN@?,pO'NS1'"8a/,EC'1' IHT/5}*'#Oh.aEz7;=5ܽnGdWu飡§]/=w7|+~c'gx8Gj f vV)|gߐ||^pJ簯@:֖C4w)X&jhz <l6y(_0R=L{s8 < 4⃙X-IM57Zb⒧RGƄɗ~ң!2̴vR7(LHvIiP9ю\`cc7OdO&[BQ>.[Nba  1NSa-:9h-[< As]<[ f'db{x{?kEqcYsy_//бl' 6m1Lr ?$˯˭t 8NS)p 8˵ w'Yaւ~P;;RVjM֟.hx\n"6e',JނSOn!&.Z blaJܗ7]XnKap=cMA+PAv Z% 7 C,U揜0wa~9F/!8y?r_' nÂ7%BO_04'ߟ1TQ1aQzt=, #X#rj^_ ~A}~ڕ?mp 8NS`eQ P@'ҮyA Q:"z> ‘F10N8Umvj/ShWiӲO8:hWE2?Fp7V`'l`t6%|0W6}m=er~K2\,- 9"W#[5&{3Q.\O?eKLm&Sl䎲$l%ZN|81/ˣd쒻QvYnltQDo! 06_)angL}Řu,r)p 8NS)p  x $~z:R3-+h? .weߔF%+xm / Aˊٿe,wS.xBp݃FNO~3L~>!л`5X@;тak!h.h!PLR"xv}ຏ[N!?T?4OCa+_;ksڅPoAKbzzWA{izlb - fŘ--"8In#x>4K&Xn#ϓn*m9&᭰"o *.PXv)p 8NS`TWGo?io1iS؜@4taHgLWi&8V?}sxh􄆖^Pf{qqf S$w%S)[Ӹ #ѠOzx~#nJ?b'aGϓQ|cuᯅ L-}?Ȏf)z+A=w:U?\okjٌՐ@ xMҴvjL dJmHgQugZ/.7J+ȔB2ikMRQF~ OOrC4QA/O G :pGο?k@[r֖yof{x҃Zl(3M`I:NS)p 8NU 8kw))iy;7 }Wp?5KpKYwlcOrT{~|?͛,k&OO犌Qt䞴5I>o7¾,8 #S)p 8NS)B+QEuxg[ H~J05;tfi@- 7ShYϷy #W [f-&0fֽ?>9{K>Tw> Y>,"<$hEO2_7`BՍJS)p 8NV1O7{ 3L"AwV5j G}(eq#p[ObMߔj2I$ﳭhuRq쮫l=MJ'ϼCóiNmag|>l8;sswp[g{uo/B*s8eV΍,ř4$!ɲ~V>ߡ:%lEؿ5M' 5ݨ[I j7]pAQ}D5<uW֜h#!v M6sl#uYWYp[G'gvd~'J mqj٦fmiL>FQ=oԍZn0=9W$7M&{%m@/ZN̖MQz>S{/MaAz}dIJ;S_G$@ƦF*P~ј"O%8]ӖAq 8NS)p 8+@7Y5.x_' *^oxAp3vnҞ6?Q,P$XpYr=]-Yؐ1"XO} б@#1Sa Kt[OKSjp>#ρo A'96LmpY񸏜iY#X t26]59T|jhW߿& T=ZK˵scd͗11.4lf`wٲm 4~+lvGӸ&=Ce&uldxYP;iYn6ִM˹iGt9NS)p 8NY֤siw(̭]a} ӽLЎpR,65(m1[һjEH[ lƴ,61_,$X+NpB0 q΅0%{ k>@h$ 7~N`T=WPШ^, PN3@>J 2\L3Zp4@-8~Ҳ0oY@!f}Aۂ֩ 3?Mpт S[h9ک,&x^?O~s o|diqT1S)p 8N~@2S{ Gws/!i`-RLf>y8g7##ެ]ӖMy}9h\7 qO+x!ܙGlWmTۃS;\ ۗy-bޟǤxY2w.aqb>oG4Wܳs vdԗ{zl@0y/dyM 4 ;IثaV\?n兊Mlש:;; I؀}њI7QjVd,id\;ڋģSɯ359E nNv:ûe ѻS5t>#l-jb2_mzzRi4JYwّsd>wȯ_Ŏ0aK}ێ@a!v9MɃK@IDATV7]yު;ڣ>.+2?RiOZU~qD+&`6S)p 8NS)+P~ F[kYӲ68n/o:T753.p^$B {cu7|QоG,<ݢZ.fTFX^p赇+^Ma%H4fAuPbnPsxs~zwu[* T;K!#%?ֲp)˜5nƴ8N W*l99دvc-@pG-Ɵ$$hW/R*0ZpYx_rs$ +hVJjx;   Vp%KA%׻eS)p 8NP #p| gs Z*×?!n_'}npƵYީ3Y|yq+:s9#c !_#C2/ V_2ZG\^=Cp Bo7[%<<.Lٕ]_5|pߝ;D gt2I -+q &NoxD^?d<+J2z|JsM;/m@D+dkڀtPkҿxʖO>馲͋2Y slGɖ7M}+[NHȷO i$\'Y7q#IƔ?z?;>3-2-5%i65r>{<$_I5V;l^1Mvkq Y?T]`P:+NS)p 8NS`EV0bwG:#|&p^$&pVx ^ :8".$-nчB`}|*R; l7AG[Mm~> Drz=( ?E:+vdžk?^f -x> xOPBG02_{ +]B@{sاP0f1n~  S`y`yn# ,hV&WZsA~SpUU.-&X>5N$<"XP총9k%z)ߺNS)p 8N'`#c1)MZ2{XFjB8wn{uil3Z^ݿ{{W3_;kFYe^9o/O>sb+2+ 9e}Y|-wep&0j>\lAf;fg?7x:p72PMCOxtrWRm&̉oTw]S7\#M5Qx7w0VF|vՇQc2[֝wyx'*D>s'6A$Vb_[&Zzcd9 ~=R2T֯ Q\3r?ybjjL'Ұkjf˶JYE6Im@G'q[{x&7'5˕q_k57'c{  &Tܳ#1%ϩ$m :hs>K>+lAڲjse/=x`]p]q 8NS)p 8+pw dAI0!;  9^/ ̦{\0|m2tyX\L  :f$E|A-ze8[~pMq?F?Ak6^(XFP,KWz[zÿǚBo_m!CԈJa̪G c0@F E4 悀 A8 @+#AN˜6 &V~sx})~Ƃ]%H(Bx ?Ӳ/R_NS)p 8NV >Ex;Go` WqC18{ӻ8 ( ޻>h̆ʻ&QC}^ ¿Osܳlx;b=} O;}lvos^۹=p0?}kb[űߙEHH<)!_S̋,_g8o|yy_糖JS1K[݉s1_>}iڳ<aNCbSUރOʬyHIAee'e ?W oZ5%:rڜx ̎pމ޺C~7 %ȼ &}`ozg%3>ކ=՚H؛ v fJ \b9T¼-76дW`:1 ~K|SA1LnڗcL"e_W=9""}X#]o$6S37߭$6;yoϘh!-3d 匵6!Ŀj9>~O6Dw~~aӲÉ^d'ɖm\_βM3d<|R6WA6ȳ ~e^>6alof6dCaR?%@|s>"? x1p\ : :ᦂv+^$wFg=T঵cK<=%жeYj(4x @uo-5A :JgoLpi>,%ZSp] 5,{ǝ:,_$-,ǵHot`T0?|{0f!??h;y zI/AFr|S}ұ /8ZpާOH˲q=;)p 8NS+d?g|G^C<x|J8Jmrm`mbÙ =z {3SxƉn5§˪ts'ky$T1Ewzw{lA'1ך6^+*gl{m;=;j\|6{똽MO^k.l%X_ udȂUCnXpA ޚM8Xm1>G{#::PcU-''d.~wf.M&*]7G-:jdcC'#Kv,p?(Dֿ{K)?6%O6~A6O`Z6u2#%k~4v;2z~"kWioHHkZFN_?bԟ'|<^Gl2 6b&h΋wg/EUߟ{ |`Et)p 8NS)p \b x{¶N~+F X` eG ~ cY$i o!a1!>_ on1u n뙂vk")q,haşT摞?s[LX)ȃ3) ]A+G6,O'I_aOPx`*6_˜fs@ 7*'3L`n.x<O lQ O47(8n 2]nCd^9 ,|XFYgBNS)p 8V%+mFCPLy1H 1K,<!5ztiEryOfyDiy@3SL4*ThZ{Ut YO\PW29$Kud8&Nm"9oP/#hW,k/d175+d:GwVWf?:N1e~r~<nMIm_~ 6*xkA;)h&h]PO ֋y`<^y {&?RBe!Seclkz { f~\-tBla̪Cl$qXз-4|7$A=_0dq ַlW!xŒ7˅7NS)p 8@ u/ s]+q@ҨhTxok.̞ $ZV1o~i7wF{7~;Ԭ}B&wQxx d v/F# $OJO$Awz=sڼgz9`+ = _/缷?QLyLE4l[FYrbz*?S!UnJǚM8O؀zfĞZN]@y=qUc,J xs5ggS[f:H)eyC6lm,es={{ɚd+{3A}VLETJ6*R_.#'s Љx )0>D6^e֣=I~D6~ƚ}>6cb~wѭna3`P +zS)p 8NS)*7Tn+V*K|Z0B[3RAG"gbַ?&Cn'w["$*H,负`{-ƼmYx?Yt;8 z^ AF,pWקaA[ꯨ'M?3M]WPɠ{q3TÄ1;aF 2TJ.} l]А@;9R0j1 (x,|z@kS)p 8Nߥ@a쵂G6c~!.]c]:Э&p6&8Hö# 97q.$yP eqN{!GtUu∭[;"yar܅>~U>o(ofW}eh_Ijc: 9! ]+x;|)瑃/L`a%,/7{Yg̚,7ñk]-&\sfefU>?p#+FsGT>RGHaI<(loC1Mk|i8Hmes lCdL+Y[vU?EU˩f~7k?SWl6GD{yД2M4@/BJ&w%\exϘ7 ϓ{xDp[sC[?9ܸRǼ=GwIZ19 5]jcr,$>쟴耮8NS)p 8NSeG,An `!p C@$6˜n Yxq yqsů";~ijWb̝.~LN = ׇ ޽:])8ӖE>O~,K_ k,o *Ya1?+i-̟R#AsP~nyL2 K7(!8\!+ M\ ,دPba s5%qNS)p 8 >f9p/ =P ;T ٮXb3Zb[0eZۧG;|Kɛr$D_e-L?)/. Vv7fv ŷ`q =}q\?{{韽yoXc;s97ͣ,&A-b {:WҢ 8%ɀN^o;iwsQF%NgeoY_QruÖط+~i]vĀD`tNNÚdOkoK|&Up!,i=  MCgD?hndHB6r[Z;5Ǎ5Zo&޵m?x3ekseE.w5Yѿ+JTƜmͽ^#{"K=>>O낢[K&gy~_*Y>ѻoW ?WNS)p 8NKo[.p v; :$(H3?\A;\A ~v" n;^OB\A$,4x{  N13Z e { "z' gYD:}7[[P.xn bG_Epv`|b?–Sz4-ާ!P1 J#S ## 4,8VJ̷,6. *)p 8NS)?S ?WxtPRh$-w[^k78po.Tz_YNo#%󂃰o76іxK%a )'!!wLmT22NTG4:yT>!q̒&;equ>RzkǝmO)(P]Xo_ƊE})EAAkj//=;`:3KU pr{]Mˈc^ /FUMx>o#y@6ޑ>~|c$H+Tk[꿯'0͆{\>wrtj0DR}x]R lצ`o޺\>SPP÷mLh6?u&[5,&W{[}p 8NS)p 82{ t]LG xY V.2Tޖ :Sg Tò[H1-E#h#VH 1?|"xS/:/A7v΂;z*\eOl?2ʥP']2ud!ϡ9@ nh='h_G3BM ˜{Yۛ\67ؐ@[tLQ pj,/:`oޟǧo|iΉ;hwu@M/w 5]G|\BwHNRO 6qNrG0gu6-͝+x@ܥ>lͥ̑OYoMYoC&CPj5{ucA5ܿU/Fk'/XAMqC~~HA,jW&Ґz s`1hK,-``CfTfzf: U(@>n ic G>4S)p 8NS)7S&Cn+"^x|׶ `{['hx\n`^ݾb8dZbSZpq@35vo cޯ[hك@A5 zU!-V>>w=d]Spł\ϻLjrߖ%~lAF-Z`d =G_k LtNS)p 8÷ł{[a c&pj 8 OI2v?%`?]$O[]ei[76wcjV98ı5s_<}-8V<;͋I-֨26x! ֧7X$5 ^Rpw/g{yo;S$a\r薛^gGXjf߈:~i%ݟ(q hX"MH 6rpXּkGb`={G׏,j=L^;d W?Ter ឱ"aY4%]q/unWNS)p 8NʧS_%.z m~U hGAGztM A: ܬnVM_"AWz kaE#lcB9w t:NQ^`7d>-1R{0CЊP"hEL+MB,' ?jV%2[ -Z ?~._PYS)p 8NI0aWA+1c~%O /b̈́3 ,9ǩ&s~nIbF8ttX'qc?5%n~ OƁ:{\D /Ur7[q=e+qitfฝZzn8g#xŇEskc︹ϱ"36lJ}iZ+i FKcy|^_HךcDkY7\?cwJPsM.q? kf^{Y|QοϏ09s~=9j`HSPçHV}&v`Z.S65п]6ywX\!X'hpe\Ǿ<9}._~+.0m|Sf Y.OBsҿIJNK?sT+:uaꣲe4,/_2<,}h_',k`TtaA߬p)p 8NS)p < lk Nx[  |/V=. |+{ݣTH#1ً* Co%S*nV K}VAs72[-h?:DțX,:R_,p[15-v.&h'H0"łEA@g/ w> hWp 8NS)UǥYK3sSW%pFg88*Q9C'GxGL8zOlxR fJ05yqX^?ZcՇ+`^ܵsqyr_rkEpHevh06Gg6y5AxZC;զ2ZCJԘ?ʼLf|¦Vv%@'X;za?7qn3ͲN8u$Zmo ~7;k5]ύ;lv5meֶ7OX{S>Iޠx3*j_C6yMOOi ^b[)3ykvf_3)J!JPM~rm8 (аK}Bwm8ј S햫jo?ZwOnܑA:%.\ T={puv*ډHܕVVX;H5 neܢS)p 8NS)X Om y òh0ك[ qO@]#8w? qт-t.|_!A/ޏ?wo\0AR~;lTCo QK0E #h$h#hj&h/NpSFK- zܽq 8NS)p k88  쭂!lwrxL؝"dA7^֋;yK~;YE;_ndSz8eb-k ɬxbHCۮį ݙ=E/ 8OG'Fs6 ;hgbd+oUFsZ%sQe[E,6H!ʿAQ?:e;!si]3Fdkc aVDcn=ǚ)Ȑ&SBH󾾏o6_Y;FM-ޒ MϐMfM]6U֠l)=kxm={^[=o& \vKMu@Eڇ'@QAĜE0`,Μ3F3b0x9 H;3;Oz~nuOTx+L4MS q~B)ɠ.3]YC@)PF^?P 4L 㵃k,qccc9_%?|>{ nش!"].% x^W+ xD $S#IͰֶq[#&S՛ >A|AGpKAŕX@υՈw#ah O䴝K-GXZh_#)=kB9?sXAz/|\ l W :L|ϵo*7E x^W+H{xS=چT0fU MT)dc>0e/Ǎ9|žJp+9d,n=pAP*лLx-f5J>r{G^c9c]WW֏r UxfOB[[LB0$SNWhF[3548YfUmtw9ك9.(rD# }wFky8b9W+ x^W+)NU-ҷV9DPzFv v{0c= :#Qp>Ü]ДT^alWA-`{t\-ة>uhNtK:[ yz t:MG|xOԣӎCc`{;Ağخc!cf!OOW+ x^Wϩ@R*7{BFK2W`w|V4~EFg%T)6R}.*ΙH*Ac׋Έƹ-N7;5]Cٝc]f?*^̮f*b6ƶ6ƴҌ83!NΦdHǹң7NrH)Ǹ; 1qH^  m-M_Y:q83.qMgbq#EdȐ;fhLڀ8]2'@acgy|W9aұ9J(fN`Hr:tVs[P(I+8*L̙򳊳*aꄚb 3%Ԭ]Ӿ=`έq6!xq >G}اם$Kg3#t״^W+ x^H(LW+ x^ET7O;!NTd>صØ.̶RA:!Kp"~5dn7v Ƌ7^+{>ܚFބ?ҥHO>&tiJ܃uXބr1gS AvnMR>e{=X„T8qZOwm9-qaΩ8;h>i hMxW#*ضsϋ0Y}j ]& Nܣ7);Ꙫ9×ڞ x}Cס 3&RiV &ݝ=/cnĂ1$#inp)R[qӓwвR4+n4/88c4#m\ Zx tXrN| j_E&7ٽ ׭ܻrδʹu׹a N R[p7LpύpIy^U*uI+ xG4݃e(hXS0^bc1JA!NLc@^PzGP)Hx3?G2KL+A=tM`?FP  K;̓]s/)xI}>tXGH,1Yh}1dt ܂&K?dt_FЫpA}a_ ޗO#Ϋww,Ȕ/REE x^W+XTWHJo ?!Ȝ&Ȝ'x?~*w :*̕[V6~Ә}= Q5T/ rm~NU *Aa6/%9U3`uz}"F9 /xflg&e7{L}^A>!|xt%qv+1s堰g+Sr7.fn@!? .f];}!d+*|cCd3m^KFǗ/}R]teT>6{p١bO6YM b<_{ٞ2Cb`M-xc5*#f\kWV W!s~<߃sj/{P;YCK^=U23Bp0:A`NSWF, QRW+WRg% ~Y.? x-Nv{{C@A}"A-t AjeAs^/ zv^K)CssveA}t_A<#Ы iL-Z'&"nvtWv@N3ĥ9:d~0f=J%}`|f@bAxѼ6^W+ x^S Y6 qt*bVP@Pa? r(sX*>;/~KG'=wV;=Κ=}pf~r}6Z1Ef*RSؑTLgY|~&@IDATT=H)qM7sk55wQKV`O' ²⾗a21@e0ㇰq<8.;;2D̎ >dǯ A4_ҭ ܰqPjX-[\%q7hfaI\ <]##fYw>P8tAr|ѶB:׎vxh o(!.**&ͱB%n{ǡُ}hPJyKPu!*\!K^l (G,o^WO0f.L.uC]Z}:4PA6,9ƞ/l23(8oyW+ ѼLI] ] :,-6dK69B &/8 B v!HCX8̋+o h>"~`m$p? pmÿ 0fIQz H&շW+ x^W+s+f3 8 gؾp V]7Wjq~^LGW7b.B]YDflV+Loޭ6jyŒKkƦ3)]K$KW[iL\30ALOמhwkѿ3Ie#)#kNṖT0PoJ^7Rq;Ḗ~װa- 1}<-ˈΎw\L]Iʟ7ЬX+;]0mokX&^Ѯ*[<8 Fo^'j*[<7bN:/Hg9gMހYQAC(RoPɈm5U \f~>ن//_'kntKViΎOdkM"&ߧ.nx WYao%OKGnrPց>x^/*K/nqG rs-Mֽ=Y0n mX`l>e1w{] k.ЪE/N[П4W+ L` sWj+m&3!V hKpт;4PJCm{Åʂ췯%'p7Tw׍u C|g /f4m?A`qONv zԯcA{vG*~1,%iSp0ziAGɂzxwS]?mZRS x^W+Xw4(*| c~8.e}Th̿9s\2ٶ轐Զ6@hx3V)g=RA 6;ڣPZ0ggS?/E8}OL]Ci%7")$9K8FzލSMА g=Ʈ$/Øqw@^V`ӌ0ܑ +S6Gǹ9gaUIhA*%f'\[Aj8wGu;>*_P!եܱ|0&G ɹViA %(&ȿFwcΈxzK wp̵?$eB cv\(?| x^?n"Ot.; %S. >QPUp~?c 0`-bvZB m-&bM7AA^%x4i&b]@tl)o,V^pļ]q73 cZ#wlOfkFP~.(ϼ(Fb{QM>x^W+ x Zv Y˜ mqPM5lqvbccLE0r- rvTNSUP]ˇ7z;oh|(^1K> ;GpôGg kaߝ8{ͪuVz)Ϊ]/JCTfJYCFv4C^se?}9H3y9jWs _$rjƷ+>F/c2_ܨk֏饍QQ+)'|Jtl<] ͺ2TXth9nڂw_r)%c$GGo"궯}0aVqO*c{r'ķWx5`vfI.IngAT잻xwvZqQGm/m$jD F/Gj7 +BO2g>&>4|%| SpcO@pCU 9OqqW+IRqs^Gq БҬH[[WqNw\#AO u5P3A.[pā$ug p=AFq~-i~oav \ōUS W[Op~,cħ(әn~KK(^W`R $3LA ARI{ [ؽz#p,\Z匍^ X฿UP[pbǏ'a#LJp{n.2:9.-vd[ f GAyRpقH?^| x^W+ xisw5c )PixZRAcYA&fcn*55,Պ3+6|Tb*>kV Asn+Z#oT>,_~tD/'O^?g w5>5P!or^Wk 8}* r"tzx^O*Ka{JMZ2؞ \Qk.}?X[*!( 3B@?Sp54uf}kw,ܶܿN#Y8VP.Z ScA?PP~ (?Nɂǘ$~{n+tA~ ~ k/=Y}]+1OH;4̳G^W`W w&X_P#ȗтgMA5]н^(ȏ)ւx7FIGxXx5+.xT<ӂKgcpRb|%8.-}A9|~'h/(+9: +)p#^W+ x^@|xMyۤa84EDr: أ-ͻt>={@|rhx)kfeƒ0Q8 HS*/QA>NOpܥ-Wŋ4hW~){ne} {G7:#ؼh֊_:32n$7|"[U+MDA Eˎ`|? .!Y-~ Za6m rGYZ nu ?oK'%XcvS;Wēa`|L?Zƶ`re]/ @GuV0ʖ.m Z\\|}=@6j%a.c/N:l!}9Β]]4A$}콌W w-IGS{l.EwMJ|LeqZvRK{L>q_9+_>,niyvA*>\/0gc-}W1[9W+(3KW Ƈ ~\}9)ڑ`Anp $OdBA-/i#k6cv̝",&X*!(<-h9U]3SS_ϑ8ʂu+lP`%G)R}}GPnh#Hcr;N}k-s3$\_Y^W+ x^E;mgW·b٣E[[○J-hR'i@,wzƇ4^!d{mm4ؾ] qr*T {Tv˸NcC6/ [4<QѮ߲~lp_b=n5ڃj>7ya7Q+9ԮW`eEܷͰE⾄9sy+^HY:CSײ#N0y>mqPggs7p0%:j4,04Nk4BSR\>c\+V[=p>w<,i%4(4-w06,3I@P'`# pMe KG֟FQjaaOY|&>1t%x ܌:VulimtC"WS?Sk hP-9*{ O+Wjy^jTQ˞=XzF4tucmp">x^@8O9in4\};)And 2F\bwPur[\ w\p^V=?n#?n C{ 0n#Ǿsk lN?_]AA`䛇 t4h'zB _PH;q_)sd#ǯ: x DjjLs`w7w=˜ p^`7w9_pq'B?5Xo ҿrlO?y1{c7/v{ ?>_Mj02( F Ju*4v\lLDJ{x^W+ x^At4xGS EAہ >@ô=v`2}/ő0oqFoN:& 7l5=+}"hi+^%"]\hut|<@kSM{ 4\?/42{{f!q#[*rUSA_]wi D)t0OƏl>_Ք᳹WiYqDp'6:8 wYwF'eNѓ$J/DaM<  kv=Ug &.~'s(| ׸ ;^83͹C$3&0,ꪋ}KЛkduwe a#],+ksk8d) l;Vq`ry{:p7 &~]k<#A{MqLÑY,c8-*jbVU_2dMZ=S{V-*Vh; M>BIBB6@.W+S -^1PlF}| ?Up9Sǫ :0P0B w9WP'N8>SJ~l AlgAe| :02i:m^k٧J#00hǜ~a {V;k6 GpJ˜8nK tCP*o&H_2@΂bo~olQp߻s^`^W+()֓f}{&G j7 :"(8,Aq O-?X- 8ة+.'nG].tҎi4uKb'7_t:~z:x1%-_%h+>̣>x^W+ xNCue) ܢS ٕ@KYxwLih2W4?lMs}k80kvJԏּ슓]9,Cjwaf=~SE*3lQzˢힽ?N=pΜ[CDlVbL[[l ,PtJ`/(I¡ɻ#3Ϲ9a6Z.4k2rUZҡ {Ry+6o6,QZM(~5Vmع+ gCb+오dMQޱ#C?esd+g_Ưm"fx+.o;&[/l!]:x^65fsg?4dy>Ύf`ů5iPx.Y`m IGeoc?>rXm 6a4Q݅4݃]/Զi `󄴡!uv|+ ,r #҆Yu`|>mFC&($5F `}_$p T3&A rdJ G?Ep A.sR}A>ӻa&>F;.ص@Bz$#Lk/+aws 䗳n0;W ʝ33 e~ @P=V`ܾX z^@ڦjMVƾd@xeMuC͂%G{`q 8~Ri鑩#=x9Tz8ymӎi9ߚTe~y^W+ xR ]hX*h =SPS`mX М~hTi({< Ł>?$[UYuT9 Ov4ǁ_A4<؎(3QІ_/GL)ݧ>Qu&ߊzPQd7:p,oVuFp;RЅ;#=+rn!qU|뫰˙c]ŞFs2ʠ>kQLDEf|n   r%wd}d|.?_2L;v֬nĚBxv#Y۩܁:,nsѭgYc"P5=jVy՛ oFj.Ͳk6̣%]_p* x 󎴚Ǎ  #Vk`dcmMÂr,>|w0fLSrM-~c.ris&XA6Wr\^Q#5ӑ~R T% $+Yons厫vu\T, (7N跒|C(AOOiA/M/p`@1cy0 ҙ.ß>x^"@Qm #}Td|KA6>v xHL,y xCO!]+GS&U$B#u;Ya/~R{Fs3-TS;V8oڡ3'=.?_ O x^W+ `A~ゆJAȱ 8Ѱ ?UҍlϬ6OpPq̖4nXbf;*̽kۦb@ᣙh}F}3HxڛSi؆ܮ5r0RqgclR}J@xźU?m;Fkmx:fD#{31_.nVP@Kr l"CfP sGʅ7=x>G<.z&< lSAUᥞ߷Z7v=8eosqdeG{^ƥ$JK3N+Ԡaݠ6\o7s?˘~qI aNR<`qQQy ~USG}GkR;WNsf(s0v&ya:v]E$>^W+ x^EJh }[tM&HtSr4`v :5xdjbj 2p`_<8c q7RhfpSD؇qv7ѷ)&_SCI 4OqGDk+Ϸn^[uiG[mI&n6gn*7Ypkb aO;BXD.FTuaQ LۀcOMw-ό/ -'Q# WYJp \SÕ0S,/7Oޝ|)P&XAA4'``  ރ##xy;S(24W+ ,Prg|%pw<'uiv/΂SGMBpF阞v| nq~+{ AX'aA(Y x^W+ 4<!hB`?4.h>AЀ@fuTX97U{z;*Ï6kEu >ikIڷ3RKr[+NϨ> 8R6֩uƉuJ}?<7r?Gk:8xMmZ']g㥓1C)e?:%Jfi*S+, &^% A{SQ4o9`Y62g c -Q|,{Za$6n-Ut yxs<YⲌg_M'')~˲w28I-*Xp줏puZ6 .'o4)3Q`_:ϻݮaUaepck3OZayGX|_D|ܨ3Ce@a+mk\k);w`E8Mp.޵c:tc^@OS3°0ŕ3{ uW× rD0{cZR?TBp;$HTw_+ Kָu`r"!ؿ >̏GAr#W:aL2B`WMA9,}P`t+l' Ϸ );FO.ȷJ'M6+8 A~4Npc>x^Bl`u*A}Aw=/}GP+ ~ן{.+ Hf=۟CS寷(;,$OW+ x^KR7A#܆+ ܡſi s_,i"*pϱv]4h~LůyFN!~W0FTYD k &sbK9KgZHoC#B'u#Ø b\6kIT O ְcf9|rdO#e-v,3XWMtCEaq3/2¥F~Sz3&sW5iسD_ެKf>1n擓dxf秙 gٴ02zGi4W}]RׯH>ѥd6s哾n#knw̎C"0Ύ ){ PGÛe{ee J_ECe'S򞖬 ~l'˅j7Ud}VܮC6sL:v9OFQCLg]y=~@0_0z[eq@¦ vג+W╊^Husn 3wF+ , tDfHF!Â87GW lb}Hp3xuQn.ߟH1R\~컈.~nSOe?@SұNra̓WK`Ƃ|u|QR0ʂulTA_&(=|+[+3e }BpbhnT| x^/;mνYKAUAm _/W\2@6<l~c:aL_E'+ } x^W+ xkҊRLǽne o F2)pKSqf~oLExpCzn#1 4dZzf*4ʅwqoemA|Y**|FP~5ڗmnwvk$yi`,vR7OL6t-.ifp;cK>5e w;kfl<tjtҭ:iO-P|ntLM:x){뗚ri ۋDKs"B̔: Ӳl9-F{c swٶ<%؞e~LW-=ΛroÊOo@wޑͷ oX-QzF؉/]&Ȇnx\tXj.ϸ4.Tۣedo6b[+8 $5[dϒ@(Qѻ┊S^oF<Op6T%^ x2ґor>W$^࠿B3*&^ M1"D򩮂C(A~`fҵ_dd|&wO_Ty*mG^+{6MMSA~| GPz9IO(p,i῕`mbo{xp PDx^+k@j{g0awA+ApR.It.A>w]`@Ƿۛ [N:hwp[i\S">^W+ x^A8Jq!_PZ^\x NPPpV:%mzymG; 涍Np2;$^П ʎZ+>|0?~/MziJ†1#梸PDC7o'%7"f|'rhO3YR`H'\vfl0ֺd>a*^oSo.nPŸ>x^@y3{~U+M,rDZC(A ;[O|kA\`'u[nc=axc~*42\1 >|ܧ5|G3kY>MtFO 쉂+ J~[Н`{_A)a} }G2$(\+(*~A+N;JC^_Yw``A&@&csaA|=}FpA?%짅 R32就y6t4%|)ld+ x^W++eqnTu)"8.0ϟcX\ q0i,`@L#zSs2t={fY_Zc>(Y*n4@f 3.j2 י5,`%{_;?oeyu' ܜL,6|M#b'%"C3rN7'KOSͱf;\gUэg5kRur\- &>èV*wts{gVN-TcѤAa)}1*bĹdg#Ҧڬ ݺesβU tL:Dd뗷F?W6lu@'m,(#L.^X>bu-+;Cipܛn1o4enfL\'Pqpg4bˈRQ {ZpƴsW+HH6izՂTP|v8KGF sǿ,p,ؿW~An: ~GK``s>l<-*p4?T/j/$ wN؎7>+}G{ax - Yst$vT!*=ogq48;X &L˼*k1:!-ޜe7d Ez?LݩZw5KO\osltAlixf?NmFSDKV|(0F3]pR+نJ{xwő +S2qΙ2%%Jy:6>O݂=-:w6v@|,:эf?} x D%6-(|j ICw ~ ~Uk8B'}`% ĭ _Mn/\ _j"(\.H-4#4]F7k 8𣐎PSЪ/m_Yl']>6<7aZ2sS箮1FW/!AJa"s(H qhQ|:ry&Iw$['pK.}<&Z6sr/w,'C,F49. SPx.-k% Iy_At,& >GERHTD݌G{ro#[Ӿl@QEyt@il̿9kG%cNGﮂk_` :Ţg ^[ k o;[p=R;W+0 $v=eNԡ|`;JzBQPLP.cvw}O'A& >\= >?@g^W+ x^(1 suSJ=XZAlAExy.oKm#ۄ9L-B əlw¢&^0a:&#7i;*&1}v1 mQS}%T/8j6**ϱxWSmIswCy?m!uX|Gevuװ9Vd?R7K*즹܌y.s Zf+d`\{5pٝy. DL{I*q"7)N.} {k^`B#۞E#'a.Ĝa)Īan 78)slfeez&Ι /\}~JDdm3 -cO֝#<)B<' ">QfE15 pg'qt G@IDATsY{UY=lo `;|&T^W`Hf7?%ҩW5˜ ~ o#ؾGaZfݫ8kgqo9i6ct1o==Fc̸ǵGp>oƹ3:!V-ZUcᭆ YfHt#{ϼ"vp_8V%ؽξlOpgN`8!>μ{n{)[6e;圷 gϵ/ڥT."]<^ќ(3+=-k?uv[f0!~7q:@[k؁a[4S;-].q2] E3K˥>X3-џ~.% hx9B6:(vE7ۺjyt#cek,kk޺I ~f5AɈ0"y,k(o0(_27F/Cao-~MJ92w5 3ᙂ<*(7%7tJ Ao$~/#>H9?&}]{c^¨@1-&7iMBS{ya}y|?u| zXP^Kfz!(ϵwPA9mUA ED"NLW+ x^­@25]\`wAu_vhuK Î$.7Ϝdקwݘaqհyc v;;)f1MbêM+ h22;~K6NắW~֙b7Ȱ>&nUB]ҌtK Dq@zI| n *fHtQmΏo0_cN>ARVbX@t mRf~5O44V 83ΘqSgN:zISzM9i褚I8dǾ:btx׾2zFGqp><ɏp҇!ʆ+:AS0WQeTq/L~woם~?m[YM&><ҽ#J_˚^b(Wq!A ݁۟۾඿x΃1 #L|tN4N \G?LF?UvffTfkd^kA^ kJf$(0^…n}''Ļgd7dGmpj^"dȚ݈Kfs'l`u:O&G16*/%)J{N:tF.obW>[657IVGi-PNA{I1EbHv 0W0UA7I/~~W+XH : lnڡ%kF̀P_pm wg {e $R@^W+ x^CFxu A҂FzzAlP¿%=#ܨP\,,!шGԀ4wP@ݮatm>qv;5xǽ~ H#7UnvOYyNʟW Fmt!ڣ32/k[_Ds%727DsL+G6-.XoS`!dAb:-~7?+Nrk40۱Feȍ v}Xl" a]K7{4bҿ,_K@^ڽеx;P˛ŕޗT>;"QQ"A"Je*EIJ$ "eDyz_|{ߵϹv]yY{\묵ʼ1y/~6lܤ\rޟۇeȭG.9Ⱥ3v+~ ퟶ?X|;pgkBk;vZq-# Lb+D-׀oA+Z̕y˃&vPl%(Ip-7m /a PU!.>P+"mG iVd[1.DӋ*@cyl9&Pk 2\{>] K7>?]d0$TtNG?&B j"tOy~L+3@Vx| Q|&~,(wq @?w58+nlo&          ^  ̠SPI@ނz!ERGF4 /*W%O?3 tZn ICrK$Hulڭ({0ݱj\ݝEBp( M 0KցyMxEf`lF:,0]411_[c25|9d Zm(x]6C`vXiv.߇5־3Im`R+9#y7Iwu7@zс..^7 go} ַE$/>.BBMb00P|[Gj$>#Y[],EBLDɐT~P8jp@NKqw  3'TY,V{xnlA|EqHp("$q3nL#]a_rt?O"{C=հs܊΂EPKt;yDGݸ[\>;UoN3Rg" 6j@%dx JKt@EMmn\{&j7ٛG8([ŎU$p '(T-A{Q@mqpo)B\{4u)!~9E c j;(܆ pH7n DR '!0@Ǧ8_Ld$`$`$`$`$`$`$`$`$`$%H ]H@~׾"bGn]q": e3@RcR!R\qڗPK{Oڳ'L?p@oPOTYc+}8sDab`"<Ȥ"Xi^?+ !*.f`a_QCɨ-}9 ih,j6h$ڲBvK.< jjMa$gUB_p^+%" - {;X(;VY]0/GȾAä ћ,.gZ|\#G3uV+ xhnp]}'\XX1h펼@|2P8؃C@aێ~.qAC<90h,/HHiܿUh6z(k W+uMG]MD$;[ rX{ =# hѮrr|KEE싥c.qogN쁻l(#(8o XXŰ#/7ڋnHjm]C,!gGNX# I w׻O,y˟k%uHvsK{eC'uyS^<|Vrh yz*Ar1)Ii9̤Y)qRxT/rt?N51}7orQ_WDrK'=ѿ"UXR nsi)P G};u"{(-)7|B*ͥD#d@uG4x{ H;c "9oܔ۫@@jp&>ZDd$`$`$`$W@ Bi;[C`S K!dEDؿ[K;&E%EowK͵۱\(8J:|e} XsDQkUfӯ GЀ}Npa t΂=bGEzqd E5h״PqEU<95QahMejb|218~?ψŧ| ?x59G˻>fXaapIR2/'ݮ,@I{JOC={3sjYEU=u% xzVԨĩd A0BKN?g 6 Ef:IFFF F gӓA;??168{^G+(BW+oY菛u6>zGЉoݿ ^=0c? 9 r`QF=g]=5ЗIeAzt]O`4Q@)o#px I@Jq0S9bZ76jO)xC6#~JK0?83MFFFF $3V_=^8IFR `b@Msrqj@=<]k(c 'oz*P ,N$ FH6Ё;==ms ƻA"ۥ>>},B8#mR+Tߤv!Z ?a3Y .@YnBn(TYX5e*Y$5_Ms 3bϑ#Xa;nI?[|) s :VUl'ulTk wg?@6ퟦ0D;{ HH,RcяvpzNa;ˌ51ޘ[fDl=pI!-E8`w> тn.x}Ob{ƅhoGGGwUEoqs&Hv7GDxBr_y} WXr L~j~aZwEȴth ]<غ h&/L+<)Q9_(19(\}!Z=R-\1v>Ekg9uqPTCE=d:Y r%&vz=9Has`{|!OvIkdײW(]`T\=.nFAbK;oK/!юAi3\4y0+HQ,'Y#tv8p !u=N~7Gry8Fq;MwiNQ.8@~aÝrw4w,Lx.el:!=q9rp+B jF(&7_$(Րm7&0@mH _@m8B@ ď`t (vFFFF Y#PB\AH$#80HHHHHHHHHHwJ@."=H  l߽|Z>B"кfaOupa|[@9P pP5Ugм)/ ͅG3+sf<%[a.44}0օzy-uGKUXWH@20.d9Z```V}f{Y 9̶%N .A*|܎3#m݂%j&K) *#n*{H7*w4L| 6߻R$; CXq\_*@.VfvjɼƟoH~Hf ;ܮK&6kg?0/{sD'Bz~J{闋K'd-^j)WN#M200H(~!G$&&,UC/=9=`o}7kvBN;̎[P~oL~'}B*Gω>}Hȑ#DDkhGw[9/ V*bq%F'w0 ۳9ulV,B#d3kv \"f NPpUs2p\6Ll%]mݙ$|/S?Xb"8fשlsbrqָ`GqO,poZuZEs9鑀 /90R)z g<-|X$_t=97K%wêο=ELbJH4yn~gύ;D In3WJIUAcոx~SqSp%Drjw9-2dU/idPs07j3HjY<D8 ٩R5|9𞵀lߐQ˦|C7?"܏qqr\2 ݧz6ߛE{35N6TCV,%PjJ]2F>'(ۊxsel!ȋ^ %P{ܧ}.8QDđDsbd$`$`$`$O㹂Tr5Dl$bhSO<_Y_̳         $P%!޾@H|(Bԛ ?'_@*hjM%O r0VjQi{?7a %(C@z1`論ڨJQB^k&wcHm(Syӹ /V΂|Ad(2#cȫ}˯\"y%HE`~ᔰ3KKRu՜!>%c`߰36%n(P#_$s0?4|Spz##[J*T,XS[.0 r6j;jkُѵ#pCx/ 7VL20@O鰅d)kB/[۱5d7h MQ |n I_X]K;{4Tət OM4ɩiO0\i/2j%H8\돎vЯNN/k D?9ڭ"P^s?2ڪ^d|nLtfy0"!"Ǧe˼Y׺SÙwE)O"# ʋzx3_zBh9b d)ܞ *8S}C`\"!D?//f޺G?73N3+Y>/y}E'ȑ0}"{+:"mZzoxԆ \{ a=B6t'p\'* D '\DܚDw%FMHQWoƉ'|6N|2003H 1~ u'K%0@?M`|xoDĔ$0Y0 $ .<m(o*C@]y%͛4X!d9oCpʫzP`}˙)ᔩ\ʲ_p`0*,0xf-/ v* һBA{ͰzZQG׊*c-XnU 7'O-V8 ?Xh*D[X^X $HZ~Tԡb5^yjxww/k]],yV׭%r}&A;6Ѕ":?7gŬ=SwcAh%v9˟ PR}I`@%*Z -|5iQ|{LCP}W`UG:f6og u?sZ!YqA`GIq {k[ !'8{^J#4B0HHI~>yϜ. !FjՀ@x^ .hvM5c {nL; Op94Ѓ&1G>-Zܯl՘?y>F-7W=o[T8]R6(ӪҴ2M8n˜NtJ39 +1&}ǔC{8~ru+%_*ɁK*m Xj&y$4ǂm?(IA2N4i4-y׼-LغB7Y4  '[pgB@m*0&Qv uٞe ~tL<8;s1O_ڛ|QCv/T-[>Iv2% YV5aN&dk5WO=ڀ 2p W/8=h'J)vze~,Nj;盥.PPnqW~?s>3FHXE~e*Kb} e:SXOnnMT$[ -i'H͵1Kv ϊV OcU'WOgAK"(UiA}}{KM2000I I5"l'6/e\O+ "EQ2d$`$`$`$`$`$`$`$`$`$%^Bt^խԑsK#6=H3]8?HWY?1+l+ mvg tw G<v7BPN3Ӭ ۪>Fd'ɑn*b{U|KP,#[Am^~nQ8Y ]0,:^]ʵT*nV[bؤq):'WX@3}0PIv^X;R7,T~~'{*ی2SpHԓ֠)^E\o)؎qUb(xdbrp}.9͆5k?CGRFbfO4!˵A 5]o}ߔ!5U3*׆6v̫Xids"CNdӠqJќ pn8q=HH+Č4 ghqk(xFxdy?pS;q^gw{gPqchR̝^q:sܺNȃrX^u _Q4p> fj`K,k5=p_ݎ7 iۻBf݂[}A?' 8@8C{;H!ы$Ydr#X6\:uyDo9z>)I p-cwĜ*0œ61椸߀fOoV3K'dd,nw8wc,)|tB/8!E9ٙy3;:no@nA=x='^\R)JF:q/ j;_"B>>7Ɂ%tPreMdG"wί'}Mhnn'ɿ3m[,wZen!_$`YA`z.&k/ MR!|g߷Vk&σLں)$ =L[@Qv[\k7<6]j&^)u3~h~X{ F}㖼 /bvuz- O$&09vgB~џ!1Rҳrhy:ļ)P3Z!"i "UWV:r4 JEL6yyý[!{{fvcho8j OP^Ig]Ik8s As a~j3PS ~_?'`_N o0}Emֽ0BB 3.h]O|gBK=p\gq>hw#VByJs'/ JʺOmQܮd3CI,K>mhgr~ꔲs? +=)e_ (ECHȎ0o“iQ.iEv">.r< 0EG-U#Ȼ@`i 'jCs$0R;8ް#Dc @p.}P9 ZӔ@q*o#PILU$=y`#########~9~=M@񿅀j3 lL@qW(! jϰߕP{&CԦuCQ KnF Ad_!….9!y$kpdET#F^ x]!Ϙ U36#{ʽ4lU |!23&N"=yz|o*Gps%IYC!PHw+,uB~~\ (zsVG:TH.Qp#6A}Yܠ\ȼxU pl ܣ{3 ljJV7+kV25 x[{R!Δ0^VP@ƙ'UJ^dju//yn>G@vW5`-jXA'b6dY1%z<6şI9 ȸ5-6b{!^WZYxb5ݛk:eì0HmlCcX髝BԯP_" {k ?Q+Pz.[Q0u ,9}-Hp*1nR16pZV%ٖ,IGmMcz{[QL gdq\4lѕ [91450JxDz8-~O"p;F2 +ha$~1t-4 No!=C`|#wg=s8g Gs|`Z\$eRF9ȋqS1 ߋl7v\gxW!'cB,\~}1M(Hau27U`%,.}fmDy%/f)UNQa9=B~7JV_W˓Ҷ5'~/O",p5~΋q9cn"M:%cq;%|yL/eWť jJ;Tj|-: 9ZkF.VsٮC9Mtờ``V-2"K|LN*"? @IDAT$]nlKoO#9J#28Q87EG]֬_Νd$`$`$`$OI _-"Bd+@ohnNO~؍b("`G @?&P{WZ]b<~W.3q]%pp Oء)v85IAuba ȅ5kё/`~xdʵ!j5x_4F0TJC]ZK&qa@b9.? b_e.aL$ ֨-Rž%rt^@k:!~9:ヤ%ޱN^T5xH sa/xBn`i7JgҰnl){ G*\vm; CU_NGǣ܁hgv_3("G}011T \k,pSy\؄ѺX5Ca0][^jD1"X*)C 'p9@G]}pX`vk&ɷeviFjõ()я$')};|w}Z#{WLE_*k )m~r"Hg1%/dP1n?ETӻՑ,1Q˽OcȅZ>JKGJGܶ?~xSFU}s`+pK573"d׉Ӑt$:Fpy\zT.Î-3Ԯ<'ޥ50v\^oq?#!{8MJ%m&p  ؀& iP8~7=H8U:hȏ#^Eݤ)_^_          Pa"^{a6Cx6Bށ=,zPYZ [sr9,^# i07aV_\2B/',R!ZMFe܌Gj+ʺk[YC}}2<:<cG|?07JCR<)Is>x+'P}W2l$`$_'('GQ_2񧠝@q:J-G%`ktF-)\v؍tSLhnG`hwvC#]ND~3C#R1J\OVj:eq6 I;o si #4l˽9s]uCd9ȏaIܯ1IOL+t{@38Tw,0j,RuG> 5`{h_E#m8'1'OSeTU&ewJՍD7VPWc 'רd=.X; %IϬB:GGjƌUe].`^bF&aHJ8Jv.ilO/U{7{ ]4ͥDA,6\?5kDyq6YaQ$5%HkKӬ#86)SҁaXT)6B vo$L.HA^@/F`Ҳq4䌦伔$8*뤧p hgsX:NzQ;4NV{-hȍ5n32ݒX5WԋrN? 5. e4 ( "q/2H š3n4b! ]0q)8Fwbځ@$iu H伆HbxQ@=2i@<;#/Pr#_xQ -UQQ6ţcX4OvikHjϊπ S !@ՠ0?4 \5?7n Frx,~P]0Omsb<5[ pV|oB"}'c>  IWW0!ZN%`]O`FWyh wE2ЮF7ר  !ƦR8ϨoLDw@osH8ٛO-[ゴ/90&UL+oÐP Z/4*b݁SyR;~?C\#Zyw`IW`~=}O'8(/i_)lk + jv(7l$2 @"nE \ Suǫr)ywLnr A4:\U+91Duj5 Qګ5w Y-'\yuRO>^m-f>Sxә/I)fMQCm ׿$S /!5HSSD;pq/w#z<+6Q?>#!Ħ]pq|! _r1~Po/֗mrr l+q{xP$9`٩dk,gqzh\JBdugGJpNC0{/QIM1\[uYuPyYC[Q9sexyb`HAy/%Q! 0RS%09īZ[L@JЀ#~t{ *03PG###!_W?)["w0M_F 2_(9Hg$~fd$`$`$`$`$`$`$`$`$`$$p c؟p# p'ܻ 03=+'$ֽuN"|ih"Cܙh&mχuzh'p-YyD| xWϨU+!U+Uΰ.TP8zU&k&|g(a*8mCyV}!Zm-&$ ZGo88\I6P; _,D/A8ȳ S?hvfe \ !2 ^Nʃ›3>|Jl/㶃3P$Sr Uɝ|Ud.SV0AJ׫$Cd/~s O3U6 Dݤ/xBLLZwyM K|wX;l_!P$sW^W2HH&x_mJ {-5PV = M$Ȑ n򼣍 ]] }͏,лk]n{SL>dVg)wȏn3Tk"8rauD8/(geT`جc@%_6NEwz&R!e3 uUCp\=3?،yǐ_ӆi`j00ntB =1j MZ'n=Q Chb 0^AIin!\^3g/WeIhе3@Xc-8.~x\aI pg:y|lGdCiuvo`':y72|X\rӑV䇝69I8?X+q{C5"DӎP~# gO/QH,"&[OIgiz?f|kq0*JQ9tOӱE6dI8̇s3HF^nvqǩ+xC{@H%J5v ']e]AҵpͬP+P =8o@h5/BF*<9^ǁ+}8~ e/v} *MAl*ۜm#Go!T][b3we煬u4D6)@7N[ 5"'qۯ'p'nh?[c@B~f~?@Ek wp0}@i /k_uE0G Z `co@5A',E@Qהah5@|cu}P ЪCusE`f`3|Y(E^q:dINTލr=r wT8'P93g2K=n! OYBNq|Ơ^%1WAQb+joq TO5. ks1NńqC04Xyh>8oWQ_{kZmcU =P2.Q7}Q[ ZϻPO K uk&  $0`%(k9O_issq7z#"h?ޙ x?2'E}'`A4`f}EbĞœ/q'5@83}cG{;& n$HE f_n #bjgH*^jW{ƪ# `vt1la 6 + ìD! vaeq_G{?ζ9 8ϏRis8.be3qu^TWׅmZΔK$7ƥR_F#:j|$wh=_'rp 0ʴπa߽mȼDί+$g}YFN!lp9yu'KUX޷YW7߃ڠކNY[@.#);C-f-&=Z|ey}I92ѫC=$ƟxywVrhmu"w(:ۗ:Hn>+Ƶr6YZ e&}v}%U%l }(O`a86{}AzlF}[|;1I8/:hb=Be nw* 'R d7"<(ׇʵT.!P2 p EGm-Lֿg>    8? b~rA>F`{'CL`tpKgh09#)T5~ K=ax#wCD1o2!!ɷ9Sǩd`iawIk[#$ r\۽ZZa)ٖ dY$P|[w<[f`pxۏ{`t@v=WZ ?؍cNDᅉE C|![4G=* ƔVz 48+:uQعNY!o }/(xEаe/:| Ɣ} t[@>._hBz0'#I ^Ԗ лPF 8/˻{Ri/xC29 CѳTwWzM&Ciٴ˵B{q}v=2$ >\\&  $џXlVk1IC lOz {`_H.! !#VP:m@:lT ,@Ъ<fE{T/$NU04*_1Jؼ;^ ` A $H @ KC?И<noE!L%>q<]}OC[% $%!w $H @ @ CJE)B6%b= f}nfmۓsY#6a[,oWNwI(4o@lV>=F>*)#_93 -33VEc=~kzs2JUJB1*9O&ȁsqIbQ4>\QJa )YtOp[~a(? pJ3vg©x/"ii(2.//AXx p]~}QQ?Ej }Bq[^*Pk[$;?:\a>V"pVZ\iKk*B\ܺx/5A D !kq hVBchG0K^A` (d{$D`'q \yD07ov-veI1?6"=H8r&O(O&&gm!X҃@bFznK$R*J*2@ L H.1f &~ %:Oт@zn`aw. ݒTwv 65 s_{ @ $H @ @?@C,̚,lo% B8f41u oPߪoOט=5/6{3ߝ((fQ[*PL%oey u c'ucBE%WR\l OU4"WpC@1ʨq[J ŽscLObjgX߉ ƣ~]gq^̿ernaPބUEX qbDh 2P(>ǚf(gL1;a}w7+VfNQboii x;.#fw5}ʟuF g. >)VF(¨9QߥIg>Tz,KW0"Opo܎.w@w4_o}د 0<_9iJGs?<ΤvK[ v?iA!!ΎD.Ѯü^D8I;˟ͽzD?EF&#Db+,`13?x>_/5ވ1-y? VC#L;1FA:]NRDVkid19r;}ą"Odzu]e]sO8jg#m yH9#cdgc a_O_CFF O:R43Oܠ(k kRWb>6,S]qyq>p/b݆1S|D:{rZCiaKV=YCɈј$k \TLQ|jaY !F {xiN2F<0^{y ]U9>>B#QE 8LvZ5C䇲Q[kiN ~}[~=ψ18dqo "pD*AʕtH?A; Z*^FՉsTdS)@ @6ír3mwg&5sD~ B|ߞ8嘕#H_/H @ @ $H O@3`@rbF29g 6&hD҇j,azZ8f:J@\Ng 0 כ#րߨK$rdUũZ` Ŷ%[ ]&2]%ޠUק+ށYwIտvN R8vϐV]K jT-L|5=0Cm-wr% i2OȐ\sY-Q­Hza7-2 ZtTgЕ0ߍ5yyP@/w1h%O4 7'\ߓK e2GMQ CN Dn7&pvQ ГQ(-8n?\_L}x(/gaS $Rt& x s0O3'0v f.fb#/?B/'Љ@7 ??D1^¢/13*; :dEU^ҁ@l1fRo?QbNHuc- sh:9C8iK(^bfcA6~'iǦ0JRyr[pUIyИc\s΅_WKfn](~8F`T@TB~q \pH蹆2=$&d:DYn"93^p1.B͚G M{yWG3T;f6pDۭ2lX K>MJB O7=I|‘OHW"g6[0:$cmֈ,n ;PՐ*bqwxGCєQ9KmYd#tAZm5fN?@Ê_"f|L$0\X; O˃[$SџGX̋ MQP_diYZzSG=Z!^R5в}*ŇMaHs?՗a5ri󲪉$$Bڪ|ڳGX$&'UinG (I z;r y4#$b-Ta*hw(YIKDBKq g1,Fn3'=m&?.~M Cj$nipq3#݅c*؝#^%b' ?C{ZX?w ^OYow|wPghꪧaEnPmtAu6qDY9%zN'H0qdgp<@oֈ(d BBo@W+ysBp,< b9bdiDD!bP#%\* g#sSյ̋yRx{5trxhl9:ٻS{BוPE';_Cc3_0h!O.PlD\0z#ٓb7ɔ(6@\),Pdtٓyq~.~rR)1דs{DPĪ{e"W x㨂U:} 0N{)P,!`8.$BOӮUE6z,~KI/5׻ BNPp#! 6|Qձ3U9VRN5Ek 4/ lB@g^ri$HFahoH @ @_z7nz whNj8 #%`'H @ @ $HO+EsB$țCMBIEw̃Ь}|bEX]Uѣ`=ǵm%˼a U9ZWC b :|2C~Ef(ȘG=쌜v1)oi 0|:{@. SQ:2fY}1ۑk5@eml 6uf1 ZE-%OwG  BMݬF?T :Uv`QCtpT)OC'A(t\! 1-܍yw'#_]npH7F!O.0x]iUGDV9 JΰZ"\y{q]\M/PǞ=VYՀ3 $H 5?)r,d 8+h3kK`qB !v%?N GhfC{Zq~uW8)z'B' .vA [T\n`>݌Q+tKCT'ɃdCBCfhq Cf';q?C`~~3hʺh8Wj{ޘ,dTQ;+X$TXXm N3)TTHoaݎr|!p/;a)q&;ȿ)hUU\E!tt{DP 1rw%6H7.x-<^$g|9:]1D[/.Γ?H5o\$ F/T÷湅XwzY7D?3ڕ{bYDn$ujm:帓\p';ST1;K 7L΄,m#Ĉ{LLCD|R$w>ݟTf<'U š_GZ%} abzaahVM9ˣ ta3e 8fڌ(y0 2n6Ͻ&v&r1Wйp?qvKy8po|6bM ѡk8(I`_Mv=W%H M1xmA=_M cybrD:?~@~\s(K)Փ[k $H @ @ $$of@%)8ϔ3 4V6P_-ыz 7Ӄ1au31-]IF`r.ry[sn(ȦX]VҐZm91vf Bazr7]N!q1ya_5HmjԁaJuzEx|%噜/K1?yv0M5Ry:߂toWA| o,92 ჩ2XQ7Qoa$fFHOGcaMǠh>a<%C@+6: 3^|a+~4 `^;&8r<ӷ898~RD?Z/ំmz> */fV5ӳ=*HVwG}o߆I3PQ@IDAToɡ1J1Ob`_VNܞ;t>l#/ ?Œ(=N[h]wE?܉h,zY[[jE8N/YJ4La3z|cza! ĭLTKEI_ 噉%N@ӵ .('h=dK)|T Jbܒد|@?5\4 t_plPIwF^a~! c;ƵHE3ç+1Fc 5]%:t.:LG&xZ?G~YE~? XGo8whx:b}xj 5n(QT<ՏEIwx1A.vo _/vFc?0rEpY`$ڡ19kE`]E=ߒ]Ǜ3{K//#pb֗+?}=@M\@M> (_If+g~$H vC[v@{@k,4@9kaG&J 0$R @ $H @ @Y[aB:tEZ&nGUq &lŅ 42KR8 's5zTSPCVR0RP^Й_BЪNÁm>-ZP"on]0~cXs&(Le29l @GZX.c9ED*ķ3QCz D<>SǛuezV3xUsìs,+bv?`T ҧbKRg (oq-N\k"/o}_8ؿh  ^ZҟvD:Bx{Kxox$!:S# 'H v P Ɇ{N9F`d{i־>30!9_;`vhv[`{ s&Ii&͌t8h0ǘ;Z篒|lpHqS3ћCc/'ދD^72,rn8Ǎ~FvTgn{dIVs\XH=Du2UAvcg`z;/`..o!ndޗɽpt|0D0|ۻڜi/*f)3ėtxʦ|/e}1o8]#ʻ|:뜷Ph0WQj"b(zZ 룓{#CXO^~/\8.mU 綃 M[qȆT+`6 lU$ÇsXI`4v6]Y 4%Jl߀lƩo=f\ )wT86- >&<,3[8حEc֭PMI5 #8`<|5p.j( ǎ14nިwZhދ=X^5Mh_ ~+C$>P@ 3ƵcLn0q' da^!' 0@.ӗQ"/8;g Cb+!G=)_Sy 7i~ eQغ>#QCj:g!z,Cj>#Qduy>(.CRd'O4k8b 1 3\W}ary̵ WOW܃ !7?!`\Mh?%pW ^eU%څ #pޝ^Ta2K-EF蠟3 -cUq$nFבEKz6~uƆwcq$_R+ĚD^w|--n&63Ǐdu/3 ;pxp}rl*b0 #DSaHL6> S P$"VKaf)Fgo*0g}jChތ/O "`v잜i-ScBZNs=ކ~\BFpqcz"ᐁ<̤;gpr Z.&mo#g E^mfVhQDZdl‘ rkΓD-6\`NN/ioļ3B%diM0Cl,V%^edkJ<F؞z'gLw4zȽza.{78)܊1wx3{G}Ώ` Wu'd7#9],[]P1OkBr#u4r 8"⾗lo7OC.mTBjM7br?^'[bܠv7Q5 KG B<Zf u0>^_[c):A}YUdc qFx8סn>E%5үHG/>xr_E֖1e)fLFR|58O+Ό5T-P5 g,̘ LW9)3D.u7kׂbzz#֕t> Gtg:wB1hV&8O(O I4HaĠNF;G $0xZ&z[A,@w@S3ÛMG9H,3h0T8:'3r %Ep-oDY ?|48 K<|>K.g$E{jY'í %,ጳ5?H97wnݷ}mu6SCxR3N#/lG{%R߂x!O+q}0]|`ÉRTJ>zj#x)O@ 74O;§&{貌O'" ,Ciŋ4gH}%%h7v}cW= C>Am_ ҙCO2er<矛\ `<ɼxj굆gVL7c@fPK 2b]]3>]7_']?f,og>sgXZhdrD}BRk)ig eWxoB2g[BzɯqwM8D8gKi?ypx_tcϸ #n^3ʡzXkᰘU6%ppi)eT"NjiS 9?t󔱎qi}@x_u{+Uv;s?D(.zyx5 E-OuFwRs)˵O;۟%QG7'pwY7d?H @  ^~=76~W{gXܩscA'..yҧySed#)ߙO_}9O̯  $H @ @ ] > ( pk@3p;ԽA-hzE>VY3=*T5,itΐ:S^l y.ܫP}͙ͺG+6:;T*VݩV[lsP 'P_:*aY6!f\QWӨk'ʼnK?9_ @ ̔YZ.S `^">!PkJ"qp*ÜJmܓ@ pV=:bSpR l=fۡIUiWd nCp0T3xc8%{GWW"]yx/vPGEF?f  28Z@F08} ~≂; B^_E ؗM*qs %K F3oJ G{ZHywY9C-KA["~ߐ0\h{dw?\pK {80Cãl~t!Y7A kW2%@dci-'쇭*+?PV1mf"kM ̕WL2>3o&s?Se~aszst}/T19UiuȺIܝ[N8N{Fn63uq'N3C5@y$I$=TJo'f[՗̇߶.#)GBmv=H%ME8DLeSz޹z=cx-g[9W"vgPrګ6"C6Ƴpx9Ma}-%d72I~?} {!Q<ϼyy#^pbjF+ wg)Yg((Zz4N?WU5,ű4OUUz;CV݌YrQRgZ2- $]Ҹ̔~.nB8N>9j#ru*Ej wE֧r<|U2'e-X rOs@Ap澺vH\&P&3`椢fP Rq|#JgQ8j`> W ),(B,Q[bQֺ@RSQ T\ވI [Է/ G) P7'WLN&*FqifO*c+~cow#`SH?$O֏4_դ&T3cŚVloef>.\N;z;[o2*^uaw=M3cX. -l ^W G ߟy*(O^HlR @L^f:f95p' B|'}iw0J{ܟu`8<'^Ki~GDF]dX-RŇGțoB|Eg d{9^ٙp]D+chgВ ?GCWC^MN};,{ViXWl΋ߘ80™B˭ d ;[767ק!\kѮ1;~oKޅ;`l;y<í+0frGl[Au^BG+ZRVLBq Dd< tf bYsElk#B\'e|s{/XGrWERr% Z9c8-լ!^RO3W RF9\B92. %zKC|x-POZ䬘ZrAWK &+7i>ax ,IJڗ9;*iw:P)1=76?5rqOp{֑]̝ "qH;acˎ#Gw\ d f!rso6x).1<_2jN03WXY/jyWj]W9݂"vm~/jmyq8؋xbܬmcaG- ~}tu1\t!X kƉD3UlT,Xs<6*b+a^%t338̟+ x,TZ) nbK$T 'vwN:aZ"^ ]E^0 +PoaPsVa}K_Vger !zTtn796k0([CC~7lw }+hC`4B}  ϗ?Jo$HjB{ }E zmcB LE]D}1t},ˠWmil0X W5pjq\5 eWV,3lPzP#AN73/YiVVgVL+3pDo I=sBOȘ?gkS̻M΋|?= S09*>0,Ka_C}Wq&9R -j=$ Bܛr&LXnI~/+" Û Kt%#> k F)wDp$gprƋrreqi\4FAj"R=Ieo\#Ups.~X9Щc}5ԋ$ʑ1h;UBY\cN6ޗpyRM{a>]pf ~Jh2%!2r9)'YWu̖_b"A} ]"7(N_Ae9d/< ӊ0 !b؉Y'I{_d;9+"pg>G˴ [D ̀!'' $H @ @ %8;m$d@љ >k^|x|GG/0mخ4|%cb>ˮzB]JhޮmOT=\ şIT؞5>'a0R[QB⚣B"WƇ*>0 "+P} u0ԑdA $iv2^ DDQlSlpC}S36CӷY0;\6:d ##MxFj/V;u'>yg?] ;_ F6}K qxЭG| ~ _@Cը̿R3B0#~ߌ@w37" s@5BՉT1$ 19 G-`yCcXh%ֆb䒗]rq'Ԅva&C6'_a#L8WW37ң47={oL6n/ؚ v-fhX]=EC]!(Y,nwY ȓ tpW7p6|9O)ʞm_]QH$mɑF*;ۇW`rw#kOE?쵃K^YKW{C`C73lE[x|Nk湫w,Bσd}&kU+a>xFtCRESa֔J9J[@UzMV$[ /RA8ʅ&~N-bW/qcSIhea.lj #0ÅR#&t=M=dϵdue2O0s>1!Ԣ ׷l!(8^7N/84Ћ.e?W_2 qcÝdM!ŷy-ɅYqd<+6 mPA,@əOӆaHx gwpY:sJ_P/T5kq:CsI!1/@X|~Ҳ%?MJbx.1cU&"@-+i][ #z 7K>֫4EZ)E+9י0 R?] _{b~5#(?J C{{!9υ\2ԂrGC Dd(0'8O P0ށ0H J B_" b&}TCsX  'IXg|XMqerKCI g{u܁f/ȲGq*J؋%K< ln%AG6"HR pH@ $H @ @~RP>s@! PE|>z;LhՋ+% h򸗙6 4E18Y[D_oIǗ'ԔL4(*Zk$$5k#{>%΂@T\Ƹ/[ ^HMdȥ4XA9_1) o^(Ka\;T:]`[;Paoeٛŏ3raڅca2\۲/.֫(T)Q 9 Hxo_"p .(G7lmK@@E"OL*4Ċ>""0<@4,9$ 8'9{Yxj4߱Oj' |5ٮã*->D>gE* r^*rg. B"}̇:[sInI >lwP~ދ^/rAkJM #ȑN#rZUʩIdyib&\/a^5}AAT FCF} s;…/?ߖ_9Vȟ3!+Nצocs _d*z]A%s1D`s4T øE zp9%Q zqOh_neW%β>gyB+?>Qۊj@*˷.UC.YmBđ*f5y,ca}wn.ECp^czKRl U߁W&Nyu9>qGwd"BU*C.!W1GiTbf'X>Q_N$8 ^X̐Z4Үl нz/~7Zfdh_ pnkdg""F4k=y]Uٺ)Qydvj}/)Z;\).*=MʑP)v%q˨ϔȪVs +7:3:p"5C=?|o!? D%+?Mza0{]6lgX~@\p)ȗ@$.\Wޮ F , pm>P/2N+q˭?k;0﹭ܝWB\3"Y kctgc}S ܕw [/G{A׽/hx: "4^R *!`C $_*_:4̈́LpWh/@>@Jr1LF7һ13.[gErVw|ul(aG,]9uʕf,8_%љәJb[(DJ CJ6u%dG/!4vzsYÞNt 7^y+i+`Ϛj6_,d j-wyijB{8@c $Pp\d(SS(L.@7_`t@^H=Bo+0]yW*8uu[1Û[/83Ho6CLGG.4)< iSa)Z;S$ũYfvI?.O|%'w\X1Sr˾N:Cn ttQ"+^|vx0q)~$}w{TLQ>$P<;v&8n 귍3Aq/;>&% Ģ:mt bp)vgR;SۋJIE6%+S~ҒVmqýżspoC]94SVI4μ [o\&و_{D:E{%W#W:Jaw؄+nRْJE E?ϛĘvożgWU.n'Ȇ~=ite ~k}a\#GqaoلfҨr s}0 PVE+&v)۵Cc1Zn'NEmjGyrlo) E7^N;&Z =DVki;g񤀣^13F?Kj=_ຯ;RH%KO/29vs/ANU;~@7X`0nw , YD@Rjq@ OG³Oe3^Kqo@c@ !+?Bb1I@Cb %K @,Xb g%j/}kyjbCs<;3 [;#(c#ٳ   H/JN%v_G4CR, GQO |H>Q^Ѯ#1c%I[yr(<E|S/ìhB}$??HW{4P3޶{?.v!} O7SZi]܂B+jqx橚p^lmw}f^@rbxd Og wz!X. )M{ - 0[[H='P\@Yh~_U5ZtsցE=5? g㕮0 ۯjrCU4@”SpVt%/68S<1w4୤41r|X0Jnn,޴lfxG˳Q?탞t;]"fz/cRcns-捹7vm?~(na fC7c]ն2ٍ3s-鷢1gޗ}y퉘$Y;TB몖{#R0g~YE^h2䛵w7kD72E찄% ܹcMFffQ)1` Ѹrm孯t(ENHhIis!Fz_p<ϧMrKRpυw vKtSgcȟ9}KɅ/ ?%SE:-^E(<ӥLto]E<fבhhwv|3s'1ϖ:Y61m]<33G.,0o p9fj>}D٨u{)QѫD .Gx-u#_M κYF=mWKӂo#}Di?' V`vf3 uI3>9+9ݩt9U5%#=r@8,UdSEi[Ly9Jdz\uw%/{iUx)~3p2\4{hfqJvNEj[S clp@z|/,{x.r#+amwɊ 1{;5D|ȑK/wi\93+<ƛoqn)V@IDAT`}Izs1ɧ|w܌u=9>sYd=;Lq˗㻍{Sgl48X\3̼>$J,-lWMTP/7œWeJ*@W-G`frMAs?탌dw#̦53< =+*\͝W*œoT?/QMq^~o{%gZAҿ-]sNJmY#>X~U꼒wQcQ1%I4ȭdV"P_8 _asf;dIjIb [Ke?)̬~Q_,X. (2c%ZE0ߏ ç+ƹ4?<ѺۢMЖyv$Ño IMCW gfg0\39$naǟ/$|J0ሴ{3ێ mn%hzyճJy]_u &|Cæ*sm,$YU•vk[JW8K֩G>R Yt_ÔnG{G1R?&j7<;Dd\xS![4sW>"SP"Qx pO((*^P'fNӮ~5JCrցn\I.SQK$0Tt{#Eyo_Z\H^7?Pb{@t=^=C, ck,!zsx%4+yrZ{RŽDjs+ߡyA5{KYhboud6dmN)}O >aGoxA{ڻޕA5XŜѸRdKdq-紜آ%M0p=WbsdoqX0߾[aIx<2%@ hhDMV|y0~[@{iu_6dg5~Y:rm;yx)MƅhgWLKw ?2=wU~ Zj~Oy*pQEQ+X!.R hS,Xb %K @,XR(Sz)֎tK͛|չ+0϶J ^OۚweE'EHNjķ(Q_kփ&01ۙ}0p4}"~1oS  CeH6?gAiLGD;#-AOrA~9?xWsYC(J v7 KF~"$|&~O~u!M&xB@ܱ +ԧEz@@^`f %N0W ,Cmv18OC5#uX, z*?N9CdcRuSzn:]tx}ċo{*m ~Vҋخ@;'o_gcgyL!65W?m PMmsw{xqzgg/ Ȑvs1&]8[o;~w3';GSMMO7F5˧*_"d\>BυOazH@Pwtpݖ폟ws(\uHjows rK?!khcN1J7jq"[v3 VQ8 9<5:Ǹ=} ޹~9DKep5vF 1&'4Aks`[>4s߫.uso9=u`0F>83{3?t30eqh'|%B7D!EgPLE0ڿ)͂;>^KR!Um\7yQD3|,RѲvԆ-s{=F9> 1%K+%EZB8@Q`| a`s=s/ϸvj-AѺ?sJkQp̕i;8LjQcڲkDFĀ1""sy ,p|#@~*3jH Wy9b %K @,Xb %$PPL^^;ť2xelkm_y]P*QuP&J #xntۗw^}b% JچiQ1Pb{Yژ5G<]=y46uOIOv(O5]/~v0rpv#2;fp-[jζ4n9N`{@El\P#pxw+P|".)8<~3N$PA1-['|ك?8GKf.+`ic?Z4I`;LzpiO*_ގ~g n7e1yy?¿DNqU`HP$zcă<E~l%Q,`5hjZ)*(k]+sEʍy9zӶi.3&)ى-^/}N;WMț_0FfeǗ/K 9 }7U{Q'~rM ;NDK@bvo9q{~Ḿ.}yv Ǜ7ȝ /kƽ Al45-ŚPOu2焔Geڗk3pS`XqS[>sk8$q'9A_.E8lO` S,PlŔjm/.?ɏB jbd.G8H{ԙPJxH cX|J2pTd*pv Y8&n[33'"&|:At5=5Y(7FKoh;흉'PC81/J"Dao8\ 4+ҁ"ZCzM<ģ.}ːd7ˀixv gqnY"_Ϥoc~d[^tf3BgFP&O:m/thaټQ nVr7ezΥ;|뉨(Ɂjc?F;LB3GJڇK;z:R`~Oqʋ ׆ PU>g\- s]$6X3Yxhڕ+ԯƧ+m1;{=wʷ7cکeT+OT ˻KNCڛU,R:F!̡ܽci8u6G06'%/)ՒG??.͟3hӖ;e4JlF{C{Zٮjwf+둍Gho$KM]箩Du|7x소_nJlhKJiL;8+8 yn?uv+㞺j߫[~b̂糽jT{Wf8'/p0V(܃o  ҅c %oG81bZ`2W O4s> Ϙ{sH[P`&.1?/4KQisGDsۉnDv!+1InPl:VG ЛP@hw&nf 8׶9Bt;X2yRG >>+.oʵrG9.tAl{$PT.z2|m1^ރf A7f  67Hߎaht-(lzh? E12L;4 TUBK ԳxS df68!O crPN@?1^((0P@(  ;3cf\(jX HN}ޙ}ԣʙ+RFPSړXTPLrP"Qb?*^~GbtB%wU=dV'7xʨXҞPֻvɇ֌rtBi:P#EvS`OiPwxyc'QC-!E]vcVO6oxΠl]Lω|/δ'-Q3}2'gvy3 ]+yu<{;ȑKsk/9D$qP}Eql7cyAKWmsSspֈO-NT;\W!KVO-GyfTk̄ÐϏŖ;msX`5p=jq|oQx[JDo&ol5#(}vB18mnCeKBkéٵ,:J](U냔øj zBS,?LRrRDy V,}x]L`.~O8oE]PIl׷4M1&aHIJ2ekBaҴ`IPd9=Ӱ[9n1tu@>~w _KSaI K((" |i?ٓV u!ؾ@M`FP@X!pNEses%[7)og mlfL޸Z}OS2<]1#&y) H//.LUϤ/)A=.8୐]u1Yߨ]Џ= U):z[H9BqgSM]3b^Sy<.T{bЃsη.ݜd,|_vq␨}C:Þ|1$p- <(*ϕwSn[yǕN?;翀 Wɹ|$_N}]93܈C;֞GN]a^No( 1Aig03Z/之*9Vv~2,n=]{| V)ίudeW_>,缒m8l>W^glggY VQֹ׸t!'WB:T>qU;C)|-115v"UC8}1sh]46-^}w3_#\G9>qaqf}{Yr iuq2| n+q) 0"n8ږY㈐(K,L<㽱r   6_8 d3ESb %F[!(D")\maV >jǎ?/7 -~Xb %K @,X2 / u\na&J0}|!Dt9 =P>ѴfEx4DؔVv~V@>;%n_@}w77ܿO,?LAFad1jb }1(Q0ۻ̪xkWnR<mGsB[ CVmHlzdx#BFhH-ӷg5?Ѽ; o(﮽zvEQ$x$@}/pM{z}^~rX᧵QA'/%P0x!4g^gnpyfPO(fjtk/@?Rp8Y`g@}'P/[e 웸5̧3q.CzޫFA^, 5Wr {WaSk ceX4UǤ?O9Q>@E Jp|7]~P.ymygoy$xk$G5ԗA>*^y2;sM|En$;Ch-dXc` s{}:i %hO«99ourHF"3|ymyGB`|=Gi/?ϋW{[%Psޮ-Nݐa~=g<.~yg$֑o&?&; ɬleLÞA].GJ"%f ߈G}>/-:#;s3壴\i7A[SMwwx`Gwq[a]ygtD*_A\2nt˭fQ&\E!ʴV3P\=ۢl"3#YQ˦eցѦzݫ4-K[ڼzU{}jwUc6q5j{ީATN\kw+J{zugQOyf>񯾆gG\A*\-EkEZ!)E{s-$KܠT(2@s[as Q2'J~k=mٯn,a6mSiyQ3ZZ4xHHUnsB.旷۾kW ,CwZBCĶ,7}U0VjؾawcG ՙ;{Ez !?tb %J`omj؎vRK`ܫn:گƽzsf W)q-hɩJW/{j3tow9q$߯SfӲӓ짜? b2ؒvɾ`51)p4c|ۼ` Ʈ(' j/D(DWK 8b %K @,X% _|y"hKB)짘5v-TEyDまkcq!ko͠}v,MQ J_y'zY.p38gp u(Z_><0p?S,[oTRC+aNC!m2l4cӉ>__$PH{sLXE4΂_Ovch: [[gά9UM4MBo~Gշ`l߹̑W^Zq%K,FQ ܁#x&p|⧳y oxiLpӟIYO/a).3p9w0v@N4k ((g {n:tE7.{38GUW|_#@ˌ՟[6][6su#}U8d'e'd#5n]Nqys f*| fl67j{q:p=NȤSjV=.rCWrRgn'0xE5nv3 {"5Np)HeRN:ε/hD&";cSiL3$Oyhv.$#?C<mv3Bwp/ZLo)@ju3w4׸3-g^/@`RNa]ĸlͤ2G߅y &x. ġٔyU/H<ݔީߩAeNO q8$cDg鉳ߴ}Av/7=69'(N!]k|8R?.ɘZP(Xb %K @,X}XZˉV°Azz> ADM{h$SH%-/{1u|86\pEx;zmTGD+d.Sj4\XqMyRnb%{IPr z/?Oj]Ɲ9@y MCv~Nl(K/@ᒺe ;+a0nˢOcӲèO7݈h{\4 EMkys @׵{++6ɭ@|/Q0W KPo8^ \g'O» ghM9:F]| 0#` ?LڼFՔEk LrUz\>xCg 5P8:=7{56 kDLD~+iP:hBG_EB9R@}}1&E lKDT'L P= Qq V܃tDж #oqRnW̆dw ;S2^h]-~If#J\ pϵ8 AgmO<+aw34>"'CŽ' sWH3~zp4-G&F n: +s}~~7.o%K 7*xE,r[wЛ [seU ⴷmہi6w6h{Fgc{격KџmVrQ_&I|?:0b<^-RQږw">g[RɮM&w)Y]7hPƔ2iځ 8 ;bJrLb %K @,Xb $ mQAݿYmi6Ȝ>>2FSU|MVԵp ޯ>ijkU̺PB[fP &'Pcx"gc85gPtkf&|(uTL$PP Yf(HQϯN-IiΓc7; E˔`%kMpA2V{q LN? {9n'XsIj0 lvB?R=ԃ,cDz]*8wT +s|EkO%9^ =I <خ )xAQÿ1J03`+e3Q~KV/O0?P0fvꛪo<,NU؜s$}E+~׶ۺ"S0_ y+ RC MQRKM /I CbO:C9ɛ]ORܔ_lp~$ygb_7q+Jj9z3r\?LoRK*lWo)j9]4f̅^J=5B OJ?߯5ֻ`9,!t⬙~`Uβf =]^L'-b>7sWp0<w_ˏG^wq-_7̉nm9&Hzp83׼e1`_] w\KsW5)<neͼgQEZ0٘63"Z~|'x۾ɞL4Do{,/nW忂tk3-ISգmIv_tyKT 㼵OGr*7^Mc}ry[a# @y-mL 递I9)}ۜ;DFq/`MƮik'PNRt.mF%r柭+xx> T:xj+=$ψSI[Fm=N4_{%2h23}Gm !ANO xG3V*p m&[Lb $B+W1/=Elگ,Z/$s2i?;(ڇ'H0o^v_OvAngj;\/uK Z^R̹Apo.MҾ6ewDc^Kٙt >@>3Ul'kדTDb %K @,X~ %才YA8Fkh}=Bo,:1{дZyIsE4gmEQV76C!91{7{ٵ m=eo@$(^qلK ,7q,q0/%X!ur^ǟ4L3:$Cjx@~wO 7uN0AS`HCm~8ϲOOqaFd0\3 (CCZ H1OWrخ!l4h^iͽ'^̋]3/. {ۚ8.JLŧK,K"^/"MJXSW1Dm Cq•7=~AMO3V.T:!A< SRTwkƧX~Rlc .d:Olӳobtg/ذjnv|4%%nS>TÀ>WpzB釸NN⭅Az*otRk\Vqs1^Fo^.sݷ-<<63Cq滵6J߉ /v׳:۽OO ;U_em=,ȯ]){cvuoT?w̿7W p OHY|QQvb#HvfvMv_⽛qv ͑F5ؠIadRcU&*_t *ץiYO(OU\}Xv0J{6/DI^ >H H-Jᴘ{yz=l11oEYdDk87K/v#V1[_`\0Jq/yoSX '$ o6O t$G6h5ѥV"?B..4໵xvgKWxPKkCbEiY!m9p~iNi\oLC&*,]IpK&bd .?%K @,Xb J`+Lς9r`XOkxkP\&)0-5tfp.jsvnxf`MK?ɜ7tmӫ!5>߰Bs6QH* V5lt@IDAT 1w{M7PQ8&>gWMo,KyҤ+wmI&yo"oOm}4(^vq볍ԃ5!iJ͇ٝEme;):YkSPٝ쟦WnqOgg6>}m iuUG>KSoS;vJ/N%RdMuD>Y 'v{@=|ثXC! ㎶[iio9]$9[P\I/EDzsfc87#nrVc + ; |tc^ʠTٴ+VXxxՊG?xuua&\>{ a^k2hFoe;ɵ"JIO!=(MR$hhr^$l&?4;MzQGp Kͻ_xs\Ŀ~|ʽEȁr񧹎9 :]9މzXh:8%pңX^\m%5$؁^ɀlr5X~EȯeLNuxV~Ob~~ _iV=WI=^F]/.nۧP r*<-K>@\ %NI@~^^Vy{xy\,LCuhn e[߱C H w$Yn>R:X/1CbC;oRœ>g*-7e@`Z˾#eX`=7.ǷTsNp\G ߫ \[OcVW-F@xZzȧ H9>1%K_#ˌ`N΂1Ռ/t`7=~}YWsènYuZn6uOtR8h3WQMWҤNvB;i3'L=9d㵌L;u[WঘG-qS?Ps8hһ8p=ÂzBTWN1%K @,Xb %OJb;I|G }t.mWQpDh9bu|Gub[ٞ ~l1دHa89{BǧoإaBxkyײ:)ڽO•\TYew Qˇ#/mN&`)Vw͗⡅ym(D0{|Bi[j_!;_yg@>f.bI| +7W} sIPsޭcnl?;o7Lf'jp ɄE߁47g&->T'%QZ|[(T-`xW{6%9[>EU%zL $Ly^_Cj!?]:|:@;}@9,EE@@5IW @q;X`9sqiX4M(~ihFp_ݿ sIuMcSū:n쟜F|⥗&7ă=IA|gOAjS5gʐ*;MX")H"J2ѢȪNmկe8ovϨ&wK0JCkgfXTrYQ;EuMi3yo͞ qH_c{'EWwFX`@A,`Ί1YAsETT"戊9GE1!A% &ų/{h9[OW>ԩNN1Ɏw|6H\ۅh ,!I s)sW{quvyWl{&?`|.rG WJp Sn?Ӓ]m@:m7XёR,@hW!d%֯9s ƁRĒ~ _8/=~g3ߜE9Z3-M^vjr [ϧ.ĉAaޭ zyuJ 0^C$,oӗ|P.gCBhGʞf_9!j)T2udVR_PF3>6Ś?zj s޵#Dn9YwSOKkԵg2?EsYMF`r"} C:W_}5pM)XS+ǕeW-CgDDV@3D~W @p'sweIׯ5ZՒab)PoG }I Lk8k   E ԯ0stk۟"-D[I](rLe2E&Wi7'-˸5M{pE^WoQz:Le>5C.OSʕ-Ԕ$Gԃ JbyZʋÇzXcJ2|;lq0֓kmhH䟍wt}h 1}w M7W/gv"tݘG1ӬJP&YPH *g=eq1tiI-2_(ɇ~|z13(6ie p']T1J|)O[>|q{^e?hh!:os+A YgH*6Zz#UW6ɃɡzҚZ/G[˝g'?ݚ NYʒջ=51cTkŕ'Q{%Rn!xq}'?< ؝];nv(7g:Ġ^ÿ+\GPH&.*joh3Z+sRiz';ǧ>f6&ElYudqOJAW=Dtp/;N4Ru?Dz?)zh9#>D7!|Wa\s;8:Zޏe~+sxct6Zm P?(My_6j_ó1Dw%O`P\jkN9}Q*Պ݉kދxq7˛fo0vΠ{7^ȿ;/h&wg3+O_]nJvrh7SLJKKǴa$؆̉?.@ w/FcTpX.]/)h1b9s @́1~/u*j>6Pln+I@{=GxpazxAڛ49Z[f`C?o1r5.mT&ZrKo?*FIW5j`( )I;ҝs#w|hn1ZrQOgXl>ߛi^K芦֬54BTZe]_288)0+X&̩Ű]Gڌ^B-0 @U3;~UvmOX"Zr̤\x̫}Qӛ/ʢr11SרIb*{]#E7EF7y9ze>[oU|e .]p3Df d/pF]9h~/p+EvhV W\8 TZ(sāRH%g->w@=:El&`?AŇ&?+PCluee7>'?)^Cf*9sKFEy*} U?BRW^`]ǔ7hzD\P6X}&zxًk/=♅ɯ|j52 R9J#i! XWwZ]KZwJ+箿VK줼ww?zflJzDncwwFN'ȹhoo2 `'NnfzOwȮoޏ joo0\MRgl-. a`4g3ck6/ wif5IPWՌI^&VG"c/!`6m}u%Z0L3ݓ|ދ?߄`&|BWd\4& . ?YEQa;2KnM~x`W7 6<UGEnW͔k^89^6iϲ#ԙFW)=>$ϑ)lVEqkև/[Iϸ7h;2tj=qYf.k]} /OCzypͮ?N;r`Sbnss`?9w҆#_(57 nFH~6l:LPe\?w7vg|tn_1`%{w/&$Ψ. Q`9&ю~O=W|4:ɖ=tM~ni3ŒVNNZ5k%<&;)|E EMNe=w].Z>Z` 3Ԟ#k|-Ыm*^{ ԟMW7*]r@a~WG9w@I.ƊoKg v0_Y{E|8b^gSL[L7BcwL~W\|FX|b|-~ c1+Q o2'Fs3=d=MgI \}Ҟ( / *~G/-H,-s @́1b9sF nn;Ln 3hڶ'bm Nkl+Iּ:7q*KlG>>x( ˎx.x2~H\ʄ˼}kM(P_s(s=7ۇ|C̛у(͵"/82xLڇHr !Sq@ Wj`H8X M(K_i850Qgp/Yap(# i6Z~+m/F/s#i{+]L6H}yr-B1W3IVO})O8)@TPf`=P sθT{,\8!g'ة G*&Eð)Ի(H}ỵz $y4S6;0:o2wBs[p"*LK$Mz[3e:Gy;ZL Nc|5K@Á5V(n_!%3Ȉz}ih:C"Szrc6|Ccxo±\{%lGH h/x{xj$E01?vx8%R69hMzIvO[t,)lwJZD[fq,E/A{he2?n ۫D}B{NQzϟY{%n4 A/0/@ZG.Pu <ïnUhB$_s ߔ%\*G;Q@'=󐊟-+յ 6 Oӓ҃2g[k_i޲#-IKxkeǶ`_շ:=Xjbvfv_8y1}rtF6GN~d\Kyb!]. /j, ;_^7_c|ā?`ii\\֘1b9s @́5>6Ptn/ -겭­b3Lv|96@7d(?.@%k]inG%+x0*eZD06KiwFhBX5+Cu~MC.ڴi8V\)Շ_ZtߗYҬfhhL{|@qTxnj+ml@a8K1ڿ󂥞Mo^ jhӤf2_5 @  #ę Qן4(h9#{?%_=k@vڵ(Z26-γ/` 븵1չ]4-\PO@cNC#½~A@^)l (& kuDc lP8,AK4qk[ -PN L/]0 ԛ"_,pr|@skUz*ɷm i={9աo3FMޤv1,s=bl Ķz/%I4qwHqi)hıģ-J*Z ~@o &z2~ z=P\~BC}%,7iJH+am$X!r(Sԕ۱߲0[ylIvOt3._ŧIW$N.b3DpT)s7̿= L+gU$c_b̥6C[.n\Dp>-Z0HTa}9 K${BۛպPgf/pg . 9/rè[ЛujǶʶ!cw{zbӠOy1-vj*GKY>Je)Z W/^NMĕ6dHc&G?*s,aNWSիTbZZ3zcEZxN!wCmk||dtְ{_Sߎhy [<xwqbp]{|=e13޽Bx}stX@l ʯhQȅZK!oK%lT;Ь [;"rfWϰ{ntlrVR;%gyz"Iv[FAq{^C}HjxFœ2WgemE[OֲorG<~h}[4WWN~dtKDx%Κ#VSIԫp|Y S Ӟ/%9sh0y')G`~ _4ÛnBNWϷMFJ6o?{S Դ` qU2ڹ`Z8Dd}7FCvnH_!ƒkjNчƍ[;SEnV /,0j_Q_t < {KJ)@́1b9s @́Ɂ.0윟 |H.pJ{Уi0<2<%H˜`=S`h@|:©:/'>81 Vp`'î[NКZ%Oq4 mCr%>VmhAzA"-nP՛ Snt`ƄSΉ >W;chZsvr.,5 ȢlBU0\GMWghE3P3S(E}"~B-_1&O;Xy_x ,{ggbl8)u5mC;K~`d% !(ʰC:"|3J?*R>%Ю(ϑJKKr"h6J'(ղۋ3޼`ؾïJ@qeBsc3B{@Կ3C Cs&cO м@^Cl+pP*10k{9^80DyrA0 j~ZhE^hˍEkN^$J^49ܿ@4uVphy:h';aIќhZv+(]+ _\˔{"-^.XWBt),ڢqf\99b5pJ"B䘉γ +wEqt@{AO_XJ b$Ej&85֒)e~vP~'6Wy&A!%u?qdu3[M~l+C!ü(v=UG =p٣o+_)w)IڣR6#□mmz(?wDõf >NwPhzw=.y:G\\cLbdgmݤ/1Z!ۓ{?I*A4MFb-h L.Q8/ 3K4& اm/LT3[AOW w{<ϛ<@3x(0zZ-oJ3.YHD0b'RlPR8ǟLE`aXĄCXandHOZ'7=ww7O& ^soG&p90{c8|6i& e.*'\o^tyxh3~Wʉ - >蝼U4 Z7m:(  ̟iۦ^S;_@^!On"P6(So8>%wS / ?b ޔ 35j̥FPW`7^7s8kTSP*2WP)[4H%ŁRJX3dxBbXݬYX;Nʎhq,m 7j> 3ĸbvy62Gf\:](뿏pQOj6qk]w=yN9zB,sVl!Ʌ5s݂~J^/pX_@sE0fv@{hORЋwu))pW\ `H`{_RbGq`Iwco { (#vV]>Iq\ Bp' B0rs< T[rb[Vg:Mt*xz˝'G2SJ5pJ#aN~M+Dq5̦lNfGem9C3;`FPJ_\~J-¢8_"%E3QlD­@F""/7AN;/ߤ|r h#/9`Kn9e^4/.!Aa-ƛ30>ȏǫ!Vk(j'y>+'ۃ0&\5b=۞ O\YH)@+t%n%Om)zsU}AU盡FWx{(5;!n$  M+;S堙815 &s.18P5ewOz ʈϘp')S6a݀C,DHN%z4sՀIdK7{{7i(1xkof%#Z umVs=V9Yo7pNbr0:z-꽔ڹ*dy~KM/sNo?ٙѡ 7?=4Gܞ ǝ+&^Of?PqlX $;e=d/T>z ͵VM_!L7׈.q㞆g3+igq ܄ 2]ݙH4?5WEI+Bƨd,'u](0Fՠ@s=OT['rA_"Kgc;p` L~?)xZI@ ܻv Eiz;!BN;m!xke[W.3UnP"TYL>U'-':DƈquBX泦CvF'E.p4&Pe(нV *>>O us @́1b9s JuZ>z;cٺ#w~wTuRTI2gEM1 3v$dpa~̡o=ex3I=z{|hWg󚁙|֊lta1׻yhcm"ajgrEG <{+I7ʩi9ѠŚ"$Q^c@P݀PPJ VAS^OV7>Ŵ^ŜS $Q}x]ӿLv7Z/a~{,X~ƥYίbʹ#>xP?>Dq&yngWMoDk9;…xHqeѡvyh9J˗R\Jpx8vtn }}_,\j:@3*P'u8O+Pg%A q Ā/:p`q×S"#aY8~m*0A~׵`̌g 8~U>FĽ\ koBQ>=~I5Rϋ:nm.[[褌5chcRR&Zɺivm'r"m kGcʚra suŞ& H( - |3tb$F*t5tm<9){< ɿ1y m}BJl)z?pZ9GyGFO9  y |oқ_R>{s(M#bqht-=զ0C;u0 7n!: "lނBn:wD.3عT{.K oM^,<5ۙ9fwxfsv$j9w ~ݦ5 w{zۑ_;#mL6?<.C{;"œ/HjJ*տ/>pAe\"xM"v[(\{w{ه\ -B\ݟ~Tb.go!Mˠ#|~ Q|һaן:^Tr]ѝt--h-3rىD1J;OchH>\c;£>r}GEM[?Gۊ淏m(hcP=+]2^#l|@>mo&Z9Y,*I _I^)Z%hoԶkJ ΢:hG;eDo@V*s#+x#Pa @0P ^6g O[; *ޗaPHLc8P4KF@J-# % |O MO׍{]acԶ&4]c,-ɘ:r}VrPВ'?E o?q/4~\<#lzQ])!6mv"HED^G+#׎mEa< ׇ_C>:Ƈ.MP1b9s @́1~/#-* p @"0319*'YڷSnJNۿF], aO eXrWhwV{cހ~Q;{x+Y޼Pnv}obPE ]~G*YfK'qs+>j' jk z%7o1Yx_IzU5lM簇L=lNo2oޢ~JtMGaQM67JE ~l͈K5]:^;?S _(" .dI+̸$5)S*zVTP,*WBi>fEÙB({{ \;%\;m)p|9H@!u [ Z@]!(|C[ 3tyordCہrsE )T4D uzq,f{Za+Ι]FKK|O @T'(&Ae.Ls),ڲ!hGMR˂ .|0#1p k>;Ly3))ex_!Rf +5~NTYa߸3Vb pT1o$K޷2'p;`Íȵo9$+s9 P>*&T$G*\|.ZBG|HDPV'H_+sIxXK;G4;/R5sߴbf3Z` #]~<ZYC Hڲ64{K%poJ[9W~M&\%rPvd ը}FǠͷv7ßƌkO:{D5ލW'U85[F]î?<ܕ6HBԷ_YfMF)Fi4eGHC ~V6wO {4+~UP3 җJ`F#bmVg=Pީwt"6Mp\Iɾ~U<7N0~>5m 긛 ]bY*O*u\h\ Uc~Gl%T#̗yH&玫+gjL-(qhEzCDjMe]Ey&zbr'G'9 6{=[۩υr̒?jRS 4JV "P ,,y?v ěb,\VRZXV|,{@7^~EБp*}ͨnom \d?o:1L򆊞ZҪ]}|H>_,;j99C{5-&3-'%t¾*qeZ1${2vh9IbI{P& "n]ep0B`1b9s @́1~/dZ6r ?_)ph3+mLi B8EF[7;kvp1uvgՌ4>l9y^ѱm3K|Bͮvb]K 6?} v7*GW3^9u!(>ڹaZ3+\}h!Ph::NW<} +`VB:E^MbnuόQ_0}+yvV7\>.6gKLG];7ru]1;W0 ~uQr&y;z*^eV˰8S$R043`ΗCgܻ9hO'\uJ=.pܺ"  (f8IR(%L:VR` M%#>q0f{x_]jdž 6+`aVp xLM=wz/ co_:ׇ`/R4e䠓7AT]D[byH';zLaYΞ<֎8ڞt]q`*8$~E&bJK tw37}k08w.tE ;|9 ')[^+f _CWsJK~ТO P9۟|Ѣ$B.E0AbwHwQŜ{ :~= ۯjp8Wa5syf3헶԰1z`92Fs-A#Ue~moJJiMgW/Z]0[k/ @IDATtht 8dL#_ΨPiw"01zN/ݳj_A[>TK]?UJ_gz e)<ƕR׎3Wqlߏ.a@{r*HhG^ҟJ%B&ݽ_ʽ2s,tE{=!Fr ͭHgmoZM_D߭hs?W c/+ɘqBhho*= j>˙Qh9$}fo̿ 0t@Ĵ?~-)WO.,P~ḗD1iZMn-n.YahןEѫv f9WE rşCxD} ]k__!pxH@n!@/w={*Gbq4 1FmDR)ؓ7_3Q{F|ᄡpboF/B8cHc jl f vx.9p-iA;A8{1[@aI'q}P@-&@)3@TWSZ1 M;7s0x!Km.0zA[nj}H"?*X[Msg02VC}BJe?֍N)Pݦh >n&{j]3=^&]'5D /aXdr'慂l`_$$-TS=|J8Ի-0)vhݐx~ޭy\l!?#ˆ_X :RŎj?VNxUB`i1P9Z:,794sm&Pc:ȕٚ,/-|eKf]F玘{##; i5iHHoW)vk3a1i}@]ZԴ;$h-|[5cWZ~O sg[f)@4<<^OrBJy@PJ߃^;9P7u_{.Jg"()~+w倆pq9s @́1b9sr`!\JoaDQW f @*~2OQoUSztWTsu昤4c#*V)^80' N1Gm\=Sܞcsϼo۹dC_oM” : %s4NW1L s&7zu+ޚhޕh7wPmkRkDj'y Su\3?R.̺! /ʣ%tu&Кc^׭,0/ ؃:J-||b[Qv/ZG&Sʑ;?}|6{|q Ř9?v&zY.xPo(`EP04.p9L,P/d@IcsY_RHUq5 ݣ}6 f.@'|7U!0@A<(*_3emu)†q?]Qќ;%j4V&zEL:{hKJؑe$HqjCzE1o3J!I:ft2È4hDֻTBJ+eC5͞!'48oruOLa\ m0}h]:h3͛pv,@~ &ܔ L+ UK^˂K z sfqgR0s+|ww\0c{Vys=[H_1+-ĉ CUygHo (j`R (4t9s,~.XqUS*|Kox}.Qg ԯ1^H3f'^)!P^h}iNWjHM<˼BZj=R(Va7f+DQ,,y|~P˯Tύ9 ěD oEcE)ESТɲhOj]*ȋb?HQD-4^0\J{]f(3滋D9 (:OeGԜs  Y4lp˗dړE>Rs#B//i`_E&ޓ7`s.U"U7خrw;'v3?外>K"B\jP›V~%9JF`9BϺ?:BG$Ì4^76Zd?R̈#ihCdk=qٱon[蹳6͎P>L#rv0" tH|C AM uh˶e(lߚr&lʦD+Ѳ !`^ItrJ/0*hFZ{ (D]_a_x[&zTO?N,q ȇ/<,ɧZr%o*_B+f"0^~| x? 2 vke3#V I)ᢉBm *LO=w m ukd4dyNJc޵>apO!ij^3߄\dL=FNG{oe(-PN,7*s|p"OgnΤ|I,m".{iS]CDͽ^NޔQ'W%:Yf ~fL1s[7>c 3h? 2grWG\WHzgʕz"kq sImv 'Tev.^H%>1-H^)/}yy_TGj\=4򊰤~Z*o9ܥ>PC2]GrL)ёVaіUwwtm{kA3W#c3%$33L$y9 t\0ce@?9%'Tpzޡd͠?5hzxsMqڰ_[E3>a[ܬwos25oxp3gg:ErfBS͆H=贲[s60u9T풼U<BPa&lEh4pJbYK+IMW,g h;8J_Ky`mQ-M?=LY9PC*9Zl?TNTDŽ3e3o*x_].,aZ~.®0)I~4|KD-ЧwL ovy\>|-_ձM`oVĊ~ =_8c)]l6{o4Ƿ[8-NKp@3Jt.[j%[ۖ6h4,7 1 Ҟ E1xWxC7ꁭ>גa]e,ztlQ3(#,5EpcQVo;k1ʑ\Ҩ_)_4`(Û ;_酙KoJt-[ٟ,ۙE^HѥsQa#E͸Bh|f\?bU>dthod1'L뗬w7^,9>|D4yhُLGq؇R(x.@bS@.N&O bDT7{9;JŚKJ %Da742~;n=2țy1߽"Ɓ0"6=NEg#Zoȸ7%"5s-n #GN}E2Cόo=M漆#SÁ&EqNN߆>(D G ȹ'ʳ4J@^6. !K3Tq9s @́1b/qk3%=d{fEm]᜙33 9#E%(A "AEP1 F AEEPQAE0yNPZg뽾k}tW]wծ4%~?2:J?E\:.+ۛ%oݖӴanLft(ז7a!_gJ8D 2xՍ6r-򳌆 ]wB\r\#o? dR`|i+R"auq ٗ\VJPDΖ8/  A0|o~υvNw/C/(j╣,Ox"62AL8`zYdñj22p-OX+uE!ˤ>NTqA!!0'z0\. {%dnCI SbpB U"܆S_0ǵ"K'_!'< <%gs lH_cF!>[4ox:AOvܙ~9ЧGp~I8`3Wp:=!zyCAؿsiH|okaߤ(j[*g*Uh&LiJD 5g`8-yeg8yl3`>ZIjZn$^OreG˟rp=. "׫BVž%e:Uм OZ//Q*mZɡ3B,V唏*BMhlKQ 4?=+T}pK9d8橙bGNKL|((mtW,B/\iҍ{|ZG8c3p%6I|#[%>T/ոM!eQ20͙)mL81L(CA@cXe43s\Z!ͬ1VϷ9 a~SGَIn{#ۊߗyo)ma `nHmNv)؏ܨHp sꐽIieϹKu䲫S>Js 9^E9qў6n0s?°P JjurO؋@H9fw'# !v֤E-9@ g@@<w?WT<űS=@MbԇDX~$!ĺ"R!0 @ !7"0]5&'  bo;+:4P3čr7)=`ka"g-l&,<#浑+Y gBSLvbҋ5uQtq_א}Rӕ'u~fz m 2{ >1W\';}"˅9oB]zb!u5B_iLr |3 T'֏B-q:r+ٸȸXZ۵Ϭg/%G}Feقv7:e-)lтzTh{)`mTa+8qϩqsP[222B15_,XnulvG#d)\w(PTZx#){ixeq,!@?rƧ3|\^fo+}KCo{:w K`8\-tpZW;@(ut00H/̭'јy7>U 2{Ə/[~x90w;/ORU1 )WBh#u+}h~WWZ_>k-DSG;,gɑÂH7-{{(wLZ;E``B}lk m{T %J@j}*ʑ?pʁ{ߍY~f\Z6/vTg1ȣErZϠuqS#C>Zc&+8Pэ5A0Gm+9J٣`eQ;2sy.{0ϵ#k{I'vRTg0$xR;fĽ-.M:rj"a 1k *QUt8'Yl\kh޽N-Br>b2%{x闲fbqX^2Xh'Mr86D37# qD@N+`&ćcLTw$}R0>"'r݋hh8|~K3' 99I@> "9@BnF/sB 5t4~*_ʯvxZ# 8ną8[`qLTρ#>AVC @Á&YZ0.wư)W9/WпߘJ啍ψ*A(yWFo=o$CUͱnZ=A ǼpeǼ[n GzmɱWE6[ZO:Rp(<J$!HzI$[;w,=9Y+@rK/j?.j{ Kټļ9uc^ PhЯmO(>oom?ҙ^]8n  KRB!ߊ>x>8[qW|̽`/wD;AOV%W>{ٻzRwVi3U7{RO.~uznK7Ff|B3r7<}'M u@Qð~ZOƹ 0w&E@]J:_h G%`K>@(PB %J ElCt u \™ܢ*Cl8J(LeɈS!/©wC@9Y@qFomYg}&c9$KaX?0Yўb>7!@pC 2>nc rv?Zx _+ҷ6xKk6zma,'2Sb49W hpwҢEA38)q {8>kY^DvMnA0j F ^8VfLdmL`CQGdcJ6T[Ǽ+X07"'e)\OR<;S-"^mIvNǩB:n' y!3r#`H' 'p\!^?@@O% ՗aη@hl%{ʗ0 txJ ԟ.!r?2{8~8|kJ@;w1qž{K8npj%6#ggG^VGhʑػvurtUJ60(:~CrGeOz^'c;!F7/ 'zyK }\h,Wi>+$_@^!P23Pet Pa{hRP+X[[p1Nom0kq7fyZB&GU[#H$*ΝH] ڍv9WK*sA QZލQ҇5[Fn#'s<,7<d.7T3=~KtWHJ ?vh K-At&œ$j!PNT 30|?U^gn"J *֯ڟ?w}XQhn|<{ ;ο3pWk+}KОZWb4ژ^w5NL $.}9uFek9=Qi_EKs^ar[3&axAk6'rwG|if s[q|RۓuC,|" 8wui3 & r"#`M-[[BZI `jO"r;chJ:u%SEM 4@׿#A+%xNU>=a57+j"`y䟕\3TL0 <'y)Zy\>8GNl}IF)Yv.4r-izng||w:éyP_B]XM›흨FAl~ h Dz~E@L:{40C_8şR+OYСB %J @(P?J"tv_0jsϡ#k^ sJWh0L}Cf^.#'j>HLoޱ+#?wTa 5 Y=7ヵ|F̂9wFwso0sWn_-F+yZ'sVѸoۧ3Zj#J Cq~8t Ѝא@E &VyDhW;b^Xb5?[ Ex*uC/vrel2 W``*I<3gp2Ye&cdY]~GY@8gN1 ҇^Oo / =}@IDATb N1%v8ONCBG{x/wִ*mxYݦujFA>RNd)4 OPBTKa{if S*FHF>iOouL(P06Q~a>e%p3 aјE <4$09/Il< õW~^˕`I(5hp134U W%ӣ1ibFPQ0ôaVe\-ǒ1A2f ՜J#P.Y믈?P/8 y@Iíuܩ^j3SjjNvjQ{O, Bǟf3/w~d>yǼo 0G8o&pj'EC \EOGkփ|A:iwc?FS J1i?2YAև!x9?;.GmJކX2# V;\B _S7^ǏMϿ-9\P[Dx;+0}׳g`<?<[ uV}E777K+V9oѓnf"+bW!G \k<٪8GV zo֓LC̖̏dXX%72nhǏX(hzAoVBMHn]dE+RI K Wh/\a8G H|LYxZ:IvL1=sؑROuhrq?yWN.4p#LMj=rNj=T"ՀSu>Knױ"]R( xysrV=RD}72:Hn Z_~ﴸ^Jn/< T|s;9!b\́U*1Ano5@>Tkjj>_G`}ԧj 1RCWބ|z!'To9ϩB?o %JډL=6n)1mVxށvaݝ֪x* C8R7&G{tteWr}=,$e"E0.&Sx7ڐ3N5ٯS)Qļq,%#AzUWF0Bz(="/0mǁ|nre@n1?x;̶<> "ٻ?:lʻڸՊr֐ 'SRoVzC1NJL 5ϳ+\ij_$pgI3Z9Ea :!PXOkntpOʲեiӅney7-wc =Ds{8#gY^#ͼ3??MǨE$l~ gܗ_F}w!vfjB TT X;!I%0]ؗ9$rվ#p?Hh}{({O!T])m \t翟@yp' q sw-#hyC}ٝeR\ 9*f5 ?moee@O@AЫÌ $72f,P [1 yeWgo6̈́Es/N[Tms 9ދǠO(nF휚?43gʍ/~y$Ct6q00:9 i-!zY58@1| wCOriDvW{}w(~+9q{ηKxU eAlH%i yjgi"1#_;_GĴ1`:_bˇ!51-S>7x/l"<|Q:& JN utn!*rw99.Xè-w2^HΙA=.#gȧ kb>Ŀ~@K (u(YmӸ\ŵ3ZĶ7mk|icit%\ueldjN~|G/-RsBB־`#fz AypXrG&LB %P2=}*ZEaXTp j Qm <3tytDEB$':yAB NbH32@Ûɞ]"ila40H2Z0Y' ]*=.׺R t!'s~]t~rwF[. 1cX>F7/K $sJ(ĈN笃?IY7 w :x{罇!?@^U$~/?n; PPЪ'@gA+ˋf_r;ؠzeF/Zh)q3.ڈZ1sM6F-ﬦL1=^%A#WSN"KɗsW>rZ(GU*~0+B`?N@'PK >>#f+r7!3h|o]=vB %J @(PB H8fi 2 |^B ?giK; [ +iM$&NmIS:dJe(fR1$;+߅|:ʷ{:F>c5Kr!$'/v# y窕_(0Q?|oe2T*saZ(bos!,cù75]O6mcn,|AhYuE8VMqo/npĭW5Qv 0~\G>ۧj;Տ"ͼWeoWzGAΐp*`r< 2uj{3TgP#M9Ѹo/\gمY0*;z! %nG`83/$`B 4dGKҔw{w Hnf=J{3q `;H`QBng7drM YrUs{> X%Bs<ژ3~˖)7<ΙV^|=g@F4:. Jw֘fÐVcs2x@L \X:k݇E - ʬeKIaI>5IyKud5Q!U7 ޣ+ҡu OcOt?ry3KWz*pX'/%!_xo0ӿzW AQ!4q9gXKrf W<{j`W H&\>UESxϊN*?pQ38mkYOOrMlv!5(OnN 6# 3o~h,`+GdVwtILZP%#QFpgx)xC6rucȄg#[ CqR"y32=j8 ['Kz*Y'1۠e}}7KLWK`ji\VNj$ǠG 9c$ͪ/U|/xoى-x?mo٩9=?Lj Js<4xH}9*O ~Վ(@_Z]NuЏ {3.zMSImhSОeh;r{f} u괷aȍվߥ.747qIw^_%f藓9eNGuvSqwe}4@97&0t-hA_X@_DC$Pr6C %J @(PB $P |BM#PCK4A' 7KC/T Ar'}Uw Ǘg8p Z ;y09{RϪh݌xAD7s9c<޼Uk!Ҭk''iHtL܏EDrwo5 +N9BsMSxV|‘K Ro \hϡ+lo!0H }[L%)~lߌ}hflq!r疧0];k]2x0czMu/2Z-{1*wKz=}>hRtO}֖J5RčD}\'YT9i7 E9[7G;c%GO%p\l)HR~N{K'@ ?B %J @(P$}IJ6>_Ic>5+bwCP;pV|X˺{ JU)<ԭx{ǩ0콊&e\vsFy`-LLӖ_'q^ZHJ> #F ̢[m^ n(( z8 cߺ1U|[Tp5!`J)Er6~)p3vYԣnSt)mBC=,0}J1q߻(71?}~L',..88mj]F%='L1@`>n10cvCb,Oxvz?1ǭ̼-ZDIy.!W/v =Sɕ/#Ǻ׃#tY!.`q+ dIC'[7AR6ǀ}DYMF".@5ZeK&!@pOG4+EN)CԹsOy*~x!~\Jno#P[<?(omA\ ԇ[ 8_& O%`;/.:!'"F\|şz7vQJE.0ٯg W{oForC f^m::Tnnϯ2΂#&b⼙YN8p cJ& eٷ>:ȷF1߬#o"cDZ)lx~& i8NR,+y,0nĝ"!bG?z&X3>mr,˦A(icEa l~7:p N~ntn;܏ _r7Vͥ}dFM#l8c1.E!6i@) \9R׼Np$ | r[60_}+#9r`G3#Gs{"uYgE"g֞01/;%<N;˿v I8 z27s׊[k:"m9` VF\jì?+2?kk/9Ue܄_O8C8 ׅM0%𯕀zqMk|Bya yqQ%Hf֣l&t7zJ( yӾtĚu%BJ/!pJ@qȹd9o<رFn-)}JD63|/S|,A /O&Go ,V idGٸit [N<?\!5~~@1o Wq!p*>l*fWo#~BmM{ c6؀~I[oA?FaEoבc9`<5 e;Toa5Z~͙R} %,8MV7s›9_RCt]1Bo?}[r,7q)yQ,WiEOD/<[{)Ѷ*wNVk+jú]e_]3s1jjZpW::ɬ>3ݪ_M76ϕY[y\9o皢9Q<= .o A@QEAEW9cH'I}zָjc)/&9x 5,F8^8#yJ܁$ +, լ՘\>5Nr|V糸 0>X~H*!;&*)+XOK1(~!H:zOQ0Wx\[#̈#-}F RO4a>6ױ4}J3Wԙn'rGW|dH|ɵŽ~7Fp0s#ETz,FRQoEPΪ2r9ja}yiN/s-ѧ[ "_$s8 ϗz ֏Q_3)@(vf#S1 Zpf#?JgU݅a;7qk-o~Đ37.Gt.$u@}CGz߮ ujGO fs1G`scȥ=d{ _/g,<[W]2,RB#e5PzrZbjv$.d s7;bhyd<(v$?瞀U'i!X*o#4EdS,RKeה(WB." Hu =$vYBzjb tPor(PAqÆbϖ< |8&(FrugooGrk^pY>d [Uu ReJp3?~xg0{ Ҍ{]nGCNcQʠ!_syD9Cx?$:CO{ߺ_s@ݔ1.a|Qu&jvpHMh6޴AO0[H9Hi d7+Y$/鐁e&CѪWPi LIaXqKRr P\;$;\-qs lΕ瓱y_x3/a!c\%+ۂ+C5D˼Q,䐉doU/T3 -b>ʟZ2_!;%_MhUX܆!p# ڵp| /4O18L O6|n:b? =9H .C\=ߦ/-GncHx;;O" 8@~Q# b8?sw٦h'M#󞜹f U[?>3sV`*/0:˖76{x*9t=N\Gw0$jEcepD-m {hƨp6V3x^v<6O;RGB+A^#b^mz A _p8nR਑΁Ƽ99`!O_3r8Kk'Kvz&k90Jo Uc .JekQC jnx iGSŚS60> KnhZO[l6"Gא3϶?;}){(9s}9Z՜K673O\5T[nrYG.4f>"Yg}%S2/%``x_"K/P0 !!9Y u|8?4ebl Ns+ѓy_t.ޛTm{y1ITn"*c%"ф"*YJIФE"d&39~s~~^/yΰkk;0$Ɣ„vb&zk-4gUm "0AlU(Pp}m\i`qxT ɵeC=`Kzް?!09 P^j#8(FIN '0AGSL%2hWWRQ^QwgQɧAHjU8_XOdJKDFEUCfK 8ߤ;ݾmT`WE/7gʻr u~x@祂 ilNl#p/b޺P@Cd汢=ҀB &Ēi(Ѣ'㵝>Ē7lWݮfD>фO8Y4Lx_q(A``a sfS>Y x> P#ɒLa0F OaͿ kE_>l-B=faKs3o͏Tߌ3pޒq^׼8~^^'s!.2>y7Ɗ2ԸE.c s<ڃ{EFP9OJ=X&ԅe| z$y\i6Ԕ/SausgJy..T\qnqDH[mYӱ)os +spzկ<.Xv\N+CX"}\w,љHt ʕ(1υA~~'߻ywz6-أc{LcY`7@]_>>xWccsHY]`&MծqzSbǑ56'ƶ#mM-O̫$$3ml)|O|VI 9{ТnLizn}}JBiGds\K--ߢ ,7a8K|Li0QT`y $N9˯L A[LOPZC6oDy(f?Ę-DG( pnCqﯗlqi=G_9zklPٓe1oy݂Zօ$0jKB?Ck2qXx!zz$AM0v:lσ{Y)%%&'&$1tvZL4_NeEqE7i{5`rJֻ~/ke{» &JoX']-J;=;V긓0*ylB+2 R\#{GR}1 ]L]N.<"a 9r @ȁ!B9rr ^$AT HPGIP%aB6mi$6Э@b ĄP'fM N m](O;ĩ "0L-⺑3c8?6!{9C³ayL+Y Y`i>̐/=8l{Y[3ONT7̵bOzѥ03C~.] L#[=sC@OK0S) /;܍FE}ź4j0F^ P+l56ȣro8Ok8vVH;6i*ґTPA{y*v O)> TtZtANS˴@xՍ<>Ok&ưhT#`P?gED yw?LY x L'<&Fr?_U|B9B~)i *"S_f<8]\zT÷*#g]G̙P&UÁY[̝kfNךHb x{\j žlӹ"R4hG/R\C_4,:{>\r^|W7US X%x 6>߆^fWgP`HM/ =滦p=A><\i>. - H/~pL?˯up_c\ "!w=׍L01.He^cOSs]S]\/^#I#YUor!{j+JS~{ l%܏N矯 It\|pTbnO{1$1uGf;UN 2CZa>]Y?*ﰝɒ)$;?xL*UWU!\f+RS #jGNQ_ȕdm"O;D2OƫN|h08a Sȁd"3)k\چ~ !D#ګGP}a2΃aq dc] DV0vH;_%9iFLoh唹NjylYJcفǭab2N J#{.a$ 9rIuBDz̗04Q!vq `vqSkU8 x RGI}'c炿(o`w沯 n <$tqod3\ w[][h5 5qh=#CpHMIxoI5 a, / %]5{G9-L!B9r @ȁ!BYȕ$j,і$L%A z/IG„#e JR@2 v;¾T[f'~ֽhWZ͢E4xgDWѐmm.NFvH͑EGp^[Kmt8O#&6;9]b"\7}sg#q*Ba!w` NLe3, \}U`>3=w[Y+;@%>h&L*@. "6j E\ah-4x lD1XH"ry:' LtLHja;)K5$aybWuF6S_R{y:Nu/Z da-/RNuvn6݅" =k6[$r考igFn7d>%_CSn=6ᝦZ<T52W;υDgx%tpov8+,قhS1E썏^pvx&gSǐY oJm1KN,z822N!?ш2Zd\U"qZu!-boq>ܻݾ;k/C>V>Ϫ]`=.;J3y{Qe93NLṀJ4&IcnclDG<%̫~h񌺝yzTcC< =H%~}˺74E5\]5H;zOz1+u](Dqcq:65y܋*(XtCv./ֆ4pгI7kV,#-@Bhime>k][u;2|7{ýkӓ-SI|,Iڥz9 ohiyW̺ sh1ԓӪn'*q+E;4ɑ:\Z!8bc`-|2Ae6Ђ44$!m`kx Aa/ #ݱ--Ѿߏ<(!cҜ5"̥"z<яvJ"@z5 (`k2y+j"!@̍!$/C~WCT#:ܗ$=1ڐpSb}4beyl i Exc$5Ii@!&(iw8f \Oi^ypu9aG.% ESlDb 9^1u{@&.R}B]頟8_'j.zz<匂_^$"$|OhZ|j % R_LȦ f+3C 9āL?nU WǟysϜ= Mn/ơmvڋqiŲ q'co4lgdw%tnQskO0R[v#-9-!EDfq99&w8=}wz 5%mKLy3q<.w:j ˬ$`*@)ׁ~D&$"4΍â"84 Sȁ!B9r @ȁw!0.&IPH0 AA m$ w}ݘP%=Ԝ!<4ifPw 4g@GE7y?a}C"cL*"]ť`ڿ EtM=҃W8>!F:S01Čxș<39 UW8`=U8M\[-dW?fv\,O_&wϼ"5#VaJʲ)zlɫ";3>3}_IV7[F2]I]BDc ? 0=e3tvu̕8r3e_cMDgG6WhÕ8ކ[u%3xYh6#SgK;|n(sJO ); $IP!_x2%ʄ@Q}7 *mTݶCb9b'n64 ubD."ņVQ+/> : @+OkHo^aiX"0`UT"~Ae*0e=&*zР!+Uͭ 򏯼~QnSKFA_ZsC²{pa_haycAkt~^$af"R*Il &9TG\Fy1ͨ]'~B;`oe>7 bmqt3nN!zv'2P.f&(n/u)n`[%*Ѕ~GC!{ ­qhE{X2ohdk,ei}ҁX^r]rf*:Љn +bW:|IsEonrI|߶POT GUoS]yLѡ=Hrx[N kQ8 [JX>bNkdm`JB9Yn{_oaS= w8X?Y+p -w"ݑͬ߸ ߂ڙ_!Ǜ:q~kTQt*+[[uA~3 sV5<x0b 5L[[?tkq,_|V O 'H֔kk)6]BF:uƼ;!B@:$ɽ'+zA8qO%ܟ}1敂 !?2̥Ve;'s<\h5o!'ԍpA[h_rqeUIm$p\ޢ7 _m >$n. OݟR Ly!9@H""EA_5xƫߗw߈q{F2p|'.ن";0AGOcq˫VaX,JB}74sv\;`byaNk92<}?k!b`^LYQWow^m n3-ȫ+#J"pD*W8O΂{- ܛ%p"P'DcpHřӜ : E> 2brQ9ZR[{`1`G=>lD haWё&Q=EY%xDvo83ܿAyU ..(; bR\=yv,FVZx:#Q_JOĠ>ohy&?UnQ{0//r)_/ bfvDkh_=[.G~{2R~B0u\e$~1~I"xJE*l+k3k=iy8yFنW=g!G߱$w:T7 JOex ( ;֛-; n3D~L7-%JgP\uy/seLCMH mrOSiLo8\h# .Whk4b?%Մ)@ȁ H>R-o/X)[FLe FnGRE:|ٱpYCN5CN4-8dBeiGQ8su{Ź3˕/m~dH8.쿀5})YO -/0 wW«1|Iʽ~8ox} Ox};վݵroGwt-nɶIZxCZ*Xz Ѿ˽݄\*Pf\j]"M0.kSj)@B HwA4 W'sOzh N/{:'bQ*R< &H $boƍ>SHn$<$ȕ-$&l!9drȁ!B9r @ȁ#I}G&lMHp?NVƑ=d &)8OND=RwVqOLyY_Wp@ic[To{ոjS#a}XL8,8!d|(DBGV.&)o Wʴ!Rrg+T4<}"ߠnPYu㈖(/Hf\G.~0 M1[R琉&9~<w4PiC֠yB `HS.'F&9nυGncHl1,(c+EbFb|~& "y)[JcDW0K*?Ejqɼ1Y@݌M .?ȏٿG2^ 8N@'2[}<&ya3`hϺSZ-v^.<(UY.Wl߁Pz(r5e^+!ժ&C{CiK ;BAnz;U/ׅFUMf(sFր 0ȫv=b/_p H]#-Z܏TNqE`eΜ {bxEI~7Nfԍtub-1} ż[%W*xԿ üyєht!e846@REיNKDqevZ~&se}jb>5QcO-M,/-M"@Wh@UBޯq]U?> F_6-~=v:}e/(^;5nW&L,ZڟBXZ:6?xQh}V?oS5o, e=do0Gb]٫su`GU==bWhD;p &SZOȁG:02hO:rp5e2um VȉyM W)mB^N;τ\oݸzP Ķ2HJ^|(F`wp˳slW w{?pHj#2GeǧI$\|GB b |oxJb$GEQ._{U nFx1 DdЯgځJ rk17ac|ڎd.%F1D~?$}3z$!v! mZXs2 x Ǔ$mCBs _7B-> 9〷[7@C*=5F|}v?nX s9d*h{#ˎ+_Â.wj5g,Ղܴ/)纉th 58о7'0K-Bȋ]ƕ`lp$0gNZ H|sVU1 ؕQ$WiׄVFD?ˇKsK}!B9r @ȁ!YdB1fWǐIbH/N҄ݦII?H&@fX;]ERJLWνܫ<&kÉ=pa!1!ZOX9*X;yt/`9DTP> ^ >@ܣ> B$[ SV;_9dLqbga}jMtF:=KKt ZbSmrpac9`Yѓɿ!eIK~ȇ%ԆHm֜`#Qc !]j y;9kp@5!fL}۩Aa@4'0\"D[;!01]5H tCJ6שKM&/N~H2Bȗ:tGl)DI^?.IxO0"Y)j1DyAGO4cM6cK~)vrr#TMc>2n\a|M|bN ;Dx@x7azR~|?¸G|F&xP}4VAP/ԅu?MS?vZIh`F`>cxӍgr? Hqh6 7na S$H-%{ lڜ_[!$_ISh qQ HҶ60yv4O_ 7خ?O!:%(<6:x7Emfa|Ņt .JV^φu+51?0onGH/Q8:0y)x]` $z/'; }Lăԗn sxmd5;-3OC,2 ew`DB[ }p~ I]<ܟ9,_>@ȁ!B9r CEMD =SC0AlF5aa7 q%IU{-SS̗TW܎25~GuaMˀeMz̪6߷9 Ԯ۬?i/q7\ .a BeJ::XO9zO JM GIAG^ ?:6Pf^j4)P|2e*A^|=X7 : ydZ3o6Cg]b`>l11U{zSqjCOkP (|n3O?Qr VYuE]re/#:'!n xm??1XS[ dߠ?|)iloNIJ::`UT?(D3ʛ;^]bkoƄyX[Mt*_єqHǸp {oԁ$+J11DnOy5[d/ xl ]#e[ \*U2ύڽښƁߩ9Cc_X1WfbE͂N,?6 @ނ|,^BpQA#WbDQQcϔa(Hm9 C5˄q@7G{*nْݯpynmZxnwУu {EtIf-@2C Ch+sί`az ϸ[. *T~'!. ɗ ׭]fn!tGҠRmd@d"i8AqȣKHd8Xc;:rB&(K{eޛwf2*9(;'XEݜbK&;S(Ja52c阙v3 [*!gVlEgYuЀkW˰C,~s8a}skT zn(L!B_;p`r MbvQN^|rUK1[A:LI|̨K=Βp1r蕢gCJ&:Q==5y/27?%xrZsrYM ^#z< ?!`m0S6pm* ?Lq~ 1_Arc"y "H3p#K4OFNLd>3)W.CxMե\ME"@ _!T%߸$D$8$f{IxR's$![Nr࿈*vW7=}Oz0V uÖ[zݾsplp0LZ|kpp:#W~7wiphoDW]5vHe_DhXG^Eм%0x Va{-Ӧ@  $HՋBK+#O7՝=H)_^b2ׅӟXH,ϩM>FLw#:('׆\?(oe Jf:JCKGР>;~_l"LoQ[b#(l{f_Uxy*ӀNPb-s{Ohܨ4$[}W ,uq?zeuKgMflQu|VZ1g?~$+m7&Se~WZ(e/<-=95o^$ xϤY ~wwN(?ACB⪵Oi_V<;nCYv%z (~^E^@L$L“"3Eo /o#9MԠ>WQ;~wXAlKHGW|@Q]_Q_%yA]?1]tCĐH!L/eOfHHj+bQ yQ(S#L[R7#JLblv@&Or;`;&5ߵ`Ȓ(mBWj T:r(iAFYDn( L!mtNtLPjWRt x[ַX )័!TƠbCQG!UnR5ѯLcf8o0{::f# ?`eٟ+HLi{0Sb /jƹDkݮ`ngB~:!С O:# ?nSR쐄<[zˌDs1hw5^%9&[Dď$1/6Ļ'╁H58I? N%4qmhf*_wr_Q[tWQ^>Xtzv%u?}jOpIF?( Iy$ R$pYnQ|r࿐?͔߰~Io͒^)E-_m9K;llǸ'=uxY)ykuQE5߭4̞|E󹥠YՋ1:/yrǥZ/9:Jqx0/Gj9"uҸJORCwGqݟ:g$  o +F2\VW:=(RR7]48?8EB7k 5p/Lg䝘XYgֆ!՜7JLXPA8}DY^U\;%R>ӽ;]3#O5D-J8HFbJWC2ܺ<Ł:cܩP_gPӵ6 $|Q~70`n\i J0x\_Ì)P?.Hf}+\L"}a⧐g[4y_ayj.wDLy_=+?\-87 ` `:43K5ZxOPS pGLydxϔӴ|fc0$ڛNDFu6a7qtɲqg㜫K&1!v :-|aa̻uyi Gzm0p Rz ҄KzoH?s*#O~ 8`mV_2HL"{W"g{9vԀ]/*Yi]z˂pG^uT@1T}6CuTo֑g)iɆ W}.M}Q_smFÿ)L{d^zUj!w;5 YzyR8 0K#g9W8h*v(kQJwJ]ײ=s#EMd'%(f Gq}H* /(Rpqpy_VFJH֎JLo.[oܽwe+ҺŕTM.g$*"~ej.Zntc By{Df5yIՌPh]c-9/}bybfƕnh{.p]u-[,]w3sBMd͇6z09DIAαnAi#)0KO&yќk{tD=b79,\#i}iݑsK+'"vݟ(O0>$/ uL5 p~6b՘':^ǭ0NXG4f}W-2n|@[bU5rl]Kzw}~808Ǵ)pWG$afOŸ}boЏ ~z>@kq z;W/aԥAXOOWw=[`ABSW$$4ǐ  _2 ][ۀg $G /85r\O_ϧѬl]=͍RԫZ٩3Wq3DHC5OZa"+]!@ tq4uW ^}/fh=M+?Zrnkl(+L6Eu4xy tK Zo()ѐHoK% / BHV5y Ƚ&eP5u$:KiW+|mz5{TMȺDw 2"%. nc; -5_XGp}Qk)mp  e2~Sr'NV=ck g@>Fla;`l0 c\IzRSzP@ZnTpW)h;.~!_9ܨCDDy)b<YgP"F ?l!Bq #ib*>GHz>pxًKj֙CC-lѱ9빷Vc-)"-9I;]kʪ;/⇗u c:Zq \ :Y+uDwG5$%r]Z& Ў쯐wXotTUg>tzp?9{D[yjlMtn^Hm{4faMDMAKaЇ1{AT ۂq H @cnejG&re/8ޛDTO+bO_^ {'H-%} ZQR/^}!_?~(<ρL;GY֦9v>ڵ߶mXWps֣~f_0/z6]}q%`ܶ/g{E;G!Go/9Z3hWo _"VVe#Qq7&kC&a` 7}z+{0Dtڤ` CǕ|w:8ϵG$2bjT1sno( /"xI8o Ͻkr)-KB9r @ȁ!B3i J>$c{Ip8j~;dmo>bB5lM%/Kcn/L@.&ƉdrWbl?d|GKme5EYcx 5$ Qy&y\^Ǖ@ H4*b"\=C-0%N%3XϔjVm]K(N֓ 2 W L B#P\>%Q;<{ i-kEPXm ԧPc;.WVaZ0)\GXˍbc-8CVBw$]@<.=*Wī;~D/ qBWR+YN{YY͡pLK^Av`wB Ή@]|Gʬx*`-w*[@AvYG]'6Zw+6} 9Υb 7W#4|+;@,fx @*8Ti75ncިƽ끗PBp$bi>g<WT.~HG~HkL}|..Kƫ5j';vţx]QjbKs9 fG2#a#o̸̢[a`Y%p˖MxJ49q1: 2`r.K+:Z8qwoz??[^Jȷ4a zbOӍ\_ `:@IDATKb { <'=AR4'0}shI%%dSeNSYKCv2xC{q7x\z;xfjG1};X;/Hou_^Cj]r1"/ׅ9|[SW+ǚTkob m!(oZ4҂˝R4NjN.WDO%8axwb3C8tN./² ʉHe?o/М+I]$CAi~E Sȁ@5.[!B9r @ȁa$B&ϒAe0mDFD=#j,CbM됕e78J_N6(6]\?qDl&ILܾ@$ t &>*!#tXu%{=eC.Cq&ouso|NS =hKjxDPYgfg?ў0 kvn^}u WόVe-^hl\fubxVPGC")0KVߠ/ѩ$@RўpXDt@EAAM\-^g9X;~5N}Ax>@!柘UjQ.Wa'Ky(ҵTj9`U7 p^Ԧjx2_4f>=[N[*[5D#_K}|# \boZܳ"ۈyE [?(#>$r̃[CJb<"܎^Fy IZfD6ZUJMoFl ^vB\>™甧™~HG˩K,]o w R A)9 #%ϟJl\_Q%@DQ@iϻλل{C=)VΧ/^4NNq*>ZK5jh%'ofM3LTnuBUvWJMpl% l 93wNUzhj犷ڨ_O'$?$6` 3 Os<(xy\&G#,%n [|^oL Qί~cH0}$?'G?%[ D$d2e̋vcjޏ ̧C.>x!(#}~w!zG5-_p-j{3g8ƞ':.H8y=*Z G~q[_*[u` ~seFKvn~U%(nK6\n̺Rrhɼ<Ə OuyU:wp6x*]Cӕ̗,tے,?b\rqy%OrvXzf=-Tp|Itma.#`>E{x(QDT@s9g`9aP1+&T̊ (Hg~>3gguܩ}RwuwuwUuuIg<#Bрb^wO?+89>Vz{{03-~gvM}"\-p?|7 G{i&>9ʭ= *?ԁM3u?0l`F[B13| 7 ( . wg>>^w_-Q_Pt1[KK 4+=|e9#F|.6>U)KNZ2kLm=mc_2>Ow&U/^fM=3d6uOԽWcm x_;Znj 30C4|OUO/8h?vg*H$E&LYl+~<ֈ4T7B'ԬMg6@4| 5ըDZӆcw:)wriןﰆ+ᏙA7eN qoOz{ 8|&?d9&}S 2p)~(P y)nڗAN0 B qtu 3V |o`6ơ5#&0gz\ku\ N\"}dzExD~ mh gc ^}$8+EB%u5t|lA/RɹۋAX(O%ncsr7KljzAMUO%grnjcg Vc/x&*Q/9!I俗~I&UڑO X8X={ ͤNuJj̏WYpD@Bˁ\,E^rكcF]Z|Tcٔƻs gxyOm1F+\O-'F!=Nҿ$S|nVA1bVCĥ*og[`fT=1xLgBƒ32έm3mϸuDC+gk}S*kGgfqEw;ꏨ|[_ٽv'K /5+EO8ǬsJ:7i|Wܞ]3:-" ~NY*uJCО4˟bjp\@.5)_o:L(ԪqAvc>)w{z戛pꕲ{dz?sm~l(走]AOCVO~Ztn 4W/ZewYMg`)< W Nn-  w%f3o2Z4m=PPR%~]" vK>TY_~'?Z}HzGR9w&)G?\PsR *byJ@zI /~gȞmEnT'|L>ͭoLMyVCԷhWogV7)x*#y(`|CҼ|FXؾc|}k7}0#ٍ1k+">8d7ˀP(/-_9ъ72]ߌ_Es^~1<"*OM^( 3~y!T$#;0<3=2١?R>n7OWQ<0Os[sp\Kzf]gnuŧ{Ԍ5S/#Lݦy>9\73 \&vP{ppp$_`t@ JDJ_M-%(P@% (P@% (PG;' $@0S)`03\O ⓯jh= ?%z(r`!}Բ,WGgyۻWg7H{P*`d0J.3eGoUºd@{sVyni?swvNkC;ϟ_t%帿l'M; )yoLq@+/kF%$;@ey⸔1H gQ ~/`Ul8\HoX~gp;*\UJq~k>"q(z%\srn7 LԷGE*ŭo;K)ɪrὟ%8p;]!8C\r Ru@ _4SA=7痭%,W ӽ@G)O.ૃ8tmueW^2Il;讫T|g7/Hrc c0oZTܩAO*~l.sII ,um}c0GGyÜu2Amnkoٻ} haN3wTDb(ңO#C5wvm[5DD|[-7x)3uvӵ'Uϯq&8/uFIuP:;I"Q;Zv3f݉k9pwo'mjpDC, }Ofw}37|Q!_%r`yQQ|YnI2Q(Mb/.KwKZuIymaRIkSFgPIb~'I+QdYvnպrE_FMcmL_+>j>ܙy~fiv6/lx>&qh3U3ljn\qZ 9)s r鍟FozeC"Quo!m>qF4 r %u` Ty a\ÏS ۖ8lxEԆ)(&gOS<)!~+7|F|pn<;%7y['ړ r\v;6yr#3w*}*V}L~6iQ%}c?iBchC ( D!1]5(;7J :jtӯu0;L@!TN_ްՒ,x)(9l9yflM}(W9yRaY=E=^@9 0lxLUp#|<.|~JR% (P@% (P@% (Ph0=gsYP @1W+o-xǟDGCh.hzJ ekͳM^/cЈEyBeU1`6 ͂ HTeEx6_9rߖBw\Ss4ͷGj>8ld&׏Ο\.3Zwxޜ|:c$h?︫-1P7 CjՉ TGy~ڮg_|lNF0Q8N@@qjw5%Nm5!\vPuX嵃TtZNKvH!T+yU,?+tc^)*ŕktþJD"xdgX4ymw|zS"v&*}?D"8m>Wo$[r!/GEqu^E,?'t@.?-y9g&h68$P->;研Y߀ݶn!`&΍ 535DTۅõ L<3ǵ:۞|dHb'*y(DۮVDo.)Fd䶂K]+K߅]ij1?iډ,~zt$Cl0JZ 7W;6N{)dl^\*t%=\Ͼ׸N*F}o-}Nz?pBy]vop% Ťfn_/frvi1V="I1B~.R wap\' ;1nO>CkҩQ\)TU[3Xl^S=ΩlCC[cl>SO o%+@xRf ƾ.#JmɎ6F`ohyʨ}/j gaV:v݅ Tq$$t0(Qa";O?C}c/ j"ƭcwI vd>-(Hɾc+c/C|n-G]xWޕy==~瞞R)158̲lvgpP?LHyo&z_,.qdESԱ+~')oP8 PONUWC+YO]"|wE!ϵXiz%jk5o 3)0Z.9-DT`mNvǏ%|O {؁>&/7o|hVݬCf-`&Ӟg<;-i\zр>WiϏOSiӓFeua0pNO[4-z-9'n&?΄yN TOGk}\?`h0.\E;pw A>ijq2oCqZ-|;H|/|T?M (N Y*\% (P@% (P@r ]<,-'X`v K@]n_&b& jcsX_vg~]c,k^OcsYܣ,3cW,R[ݟbayZŢIG9 lז?|MWĽqw#M!m8kY7Rx: =Ŝr*〷\8rO^ ,ܑGO"RfKA)BG ਿg)įy uٙ-J;>}EQuʡm.|ݶwjOĸ=?-^I4]`%Xq#s^6k&.q-jAI >E>9x+ppdZxyAz&F {_ QПVDB~rR饖ؚ"Dn@$Pƻ |~.GD !z.q?Q[KFxpEW85!QO7H(52p|j$)v^q-$'(jJܩx| sB=*. (Of݊mƣLm*d:+7 [}W^}S3inpvbatSZǥ­)E/Jc1>_a*Q)F34*BŝE@ %,G-a1j Kw(z̞7{5$v{Zs 3aDRO?u+W~>i~EQoEs>_|5b-brL[%|ڡ{Wz[2{w6>eM2+̖Da ]~Xӝf2$s;|/3+qL.f5RE6qw: j0 ڗh.Ԯ2O?NڽjRPPۘP{[߀:cZG+R{e~?SyVS;0-̶4eu+FSӁ50wg;mkN=| UɁ4ΕnP;*0G/xI?x2^ϴ+{<GBwNYKMolAȷ}޸bt0f˄VQKSM]nµGf)-v ۯ};2.iiǙY[7Ͽ^|lao!M `~HU(##47*]@_Qq%z`~X 0-`<{3GM`O7yd߷~l≋X iqQP`h\YeQCG;6~Ko|ʇZZp*>O22V7 ø="0ciInG~raS>װyV|n`o>~q6aK~\wM E:s䫿<^@/  Rx:#(*45+J(QDJ(QDJg)^"ןe\2$|= B bn/r|SwQBwg9gz VY2>e23"svo.<ap*"d>lBZɞh M݀sf: vG6bˮy`?dYn|;n=܀j3#oS IEA?evK\*?n?8Rm[Dhgȕ{01N6UZ+z'h/0s5^0i)7n{Y T>^(RAbPޞı*>}B"q_ϟBxYQ7XO9fǻsB/[rRtq~'8UwSBaL!M:P WhV4AgaB?M;3¹:R0 e),Xr^ (TwCG|}O3(s7 ww{'߷7t >52?f]~I9}=?yW3U~_pAn |ڨ_gqP (7|ZZ˧?IVj}dZa\Sy؊oNT{7`PZ 3WJϲk7\]zc VDۂg_\/v6ȹE1y|Y'#[< G(=8BuV /&GheTj=bw3W ' Cz˖s?)R?3ïÖɑQ60yo3PSR޸ 1_vP{H00NwnmTL@Z \q@@ |iu ]"cfo1{٬6)C#'`iN,`‚וs{f.w k^Nю. D`[^u./tm4ZlE;?( 8w7l}m%ŘaK#~LG}Lf^\Úd6ϥ_T+ZH&.M|Y3QO!v|xX7/ yS񑠅(,`z^'nwxJDJ_M-%(P@% (P@% (P?F8'f_X(`]vx$`^ΐ_F+fAȢ͚Wc||=,TۼzgYƷp=@Ǘ]\q(T Ugz`Y -ж1<^ ;۽^EvC}CenKQ0ƏpJhw#/έOP<}EZg5`O_D41'H qBb! /fG>vZ=h{V8!q9Fݾryhws ߗ!X]4"Eһ6nɪ|XǸw=sU<+.Fwu^׈1w< Twv=sk>HQ;O EE5* Q[.sRѩ>a_~P2fRx^B-7L)K8#{lcvP%vٍ\o2?؍7Ŀc gL2.dM 3X ߍh j+1a^E~ZK 7>3ҙ(``k.rDȚxh4# fA!f)dʖJ3$nEvsB`b/x>\N#pu\n<|+D<~U2&}}+(t@i~0ٽ)'Tn)|^xQAjҪ)Lf'Н'LxB| 95 "2 .U٩{;tKSu;57b2ziov;yfDFxvnZ.ۼd>1#W؆!`] #6ɖzgf'+6HAG -O.Sz>k1f&=9qD]b'Y )=Y81[^ioRsÄD~i+p@3'ha3-~Yȍ'B6[r-ǎn,rA֍?sM$p30f7Gh%3|IlKˆG-_-!(\jѷojQ'vcLDzP1Xq8o-\3*ҽ`fuo. ~\+`rO zFUP?SP)J(QDJ(QDJg)P wpA,`o@IDAT"`B|D}'j-7ucƂ7> qb1nBlIϲ >.{cUޝSuMp\D >f|x'< FԫX`NY??o@qm(1·^#>6G aGAپIU7΋t:34@C&aQ6[\MG#FjhGV68O &6(z= 9 + "Ϋ034wp~+4oxã7rc<=lZܛ>C85* 0 upaT_{̭^ tBcod+joK(hgxk${`hG vBm\-ܴ+L:o6gW7Uܖ'gsC |L4+0;BOb'W<$Pwѽгn[4w֮gP.tܸ18|JaCVn[OD9//e(2jx)GT 4U/,o/ Gaz~+8:S+]g'}UU_)RN$GjJ ˮotw{'WhDqh`!/Ր_GDܓ1#U.8vlG|( WEO? ^L?|.qwm(1CjGGrF[CI<&~vbs[0]T\)D+ߔ-OR5^b8Quyzn_BsRGd?`0X\w}4 -|.̯+ch*} }GHܔ5x1quv%7{ىlhTO <ؔ&W ӶB/kt ʮLEPAմ*t\_YT`L gX% ڿQ̧1KRBkΪ9a}g4ۦ9ޜϧF3bN?d[Вj=zؽpOS0A3m^z 3tΌ`u6멣A2X8le21E'Q1ʷ~_h`a̍lǣ\9G|ܪv%gE53اaw/s=x Q>d g@@|LFF@?^@?Nwg?P*q% (P@% (P@% +(PtX8C1 ;w ^BZB|d uڙɢ&WiUEeϽ|ҜYv٦_8^_:J8j9>sfYpE O; 5`oFmx(v]!8r eml; 쾾ƾI_)wi<ޞlZj\maQ~d]ݽ}Hynka_cRl !]S[ݟ^A8}ixp67Kd &~r? ol0Y+}v]΍w/1h8 =m빗1gq&|^}3K;\2q};MOfڣ͌F*ާG/`pk4z!aAIy%cCqzC|sS{c 9&dY.{2zr=/u/ĢPTxHw@Z'쏕@\j|c8>EpE=B9AEafdp;]./ӗǴܾwYfOˏ[䡂A`p{8l~EDf$މ#+~qc-w=i6zSvPvd u( RGY L[/+ #GfO)T"2\AnW 9߿J-|?vDD¹biH Nj~O45eyO#_?q8!!N% nluuH(s' G ) t$x ȴܠA|ho}[|'gUg;o/E:@E {>*%O)U9YyH/ ubPRutw]qNe "[w/>}#=MG"Bq%z QP.0ϻAkuߩ* $-M~A_?b(*lAP:hH繪uKʰ*)G* E,whsgpm'?8iO/gxO{ZuM%{Fl &@^?mS.yoV7ef.h^媚#7 P_]qjWQ3O>hLF7}4!_->O//ae{;rT,~qH s8jjCnͪX_x5Sǟ:+0cS4&.+UTg"CM)(P@% (P@% (P?MN@w쳀? )`Seh/ Xx,@tz#Hdf_tΊ446FaSӯvhcv`Qm>CL\_8Eؔ$^;9҄M%ofLh:+;esJm2TfahȲ`>h K~ ՜I HjU{$η2mB=ybZ+g x7f Jp5bPzc),;Ȯ!Ki"DpEbx~#1m{H{%gA -!}Ǝ(0~MSM0~$^C?!b/3>`S©{L?XN|=3si爤 .[$K‹ϴoFDMΡ~$)^! "!ST%;QɅ6G'*j-x;Q;[ؗq|^$wli =Qsi-yn!(%\.5R8 Q]v9a#V_8~U2!Ԩ5wG2|كSM6\u86`e]Nij0n1{4wd r;Bxve_ rq[㓸P ‚aS1r6_{NvR,Gm̅_N`ڙkr5?^H:aD[}nʵNLLl \V~WaS~|jn;;NSP;{3O<Z):ؕtvq6bmL͏G)uۧ>&3* (ޚou{TFy怟+uS;ђPy sH yoqjW"T@"cJV(ɟVǪp6pofyʱٝ ߖ4^c<78ݡ)]i'֟ю,Q@/^WuTsg;J8:=-cF~?Q<v+0!T|\8S~pS`83J8516΋\srp'-}6nhbpVJ3_)ק*^qr>#|M88&J{j])g/8N-#0n{d3kgYϊDM+W~L;NaBWU1e`:lZՓ>J>nZ\Hfr6eeHLrJy+rZ׈$#9d?yLqP;V{Zxy%ax@~@e$S8 D_}vhE;-ڑKΛz WNӧ>=0ɃiO|?i I,4ėO啾RӥU*e(D=J* T}5ӻ6?`_N\#P#\I XF}&UăSV+Qp$<*&ɠ?}ʷbGhylzÜaTD~${ӆSOe˹=S=Lt!QH^&ãCmr86ХSWKPB!sxZDE~r &W8cMGG%b=/Xgңt/ɫ \j?vWR`ËvOW_'ZVK?G?r+? y{ ~+;/{/ۙ'xR{KU7'S1ܐpjc btc3w YG `WoC;F= ˤL:梦;0efx_ϗvQ|i:DxTm2&{'Un@*.):û K}=P#ޜ+pصb_;OKoն+ [ 7 pF3.ϙcXG޶FUa/~ٌOS$;ȸ"rě+Fzzā=P!D}`'kO{O/{ W$xyUǏ1\QxE݄Ǽlx*wo7{T+RHFƌrGO]q˟g&V=EsJWvq*Jħe}Z|s发"e=.!՝ܱ:wP/,xa}.|)LBAnԼſ^j=rFK0ZRyh'4~JZi'e>H; =]S)M"li 5 (jFrX/C#%Ŷ1-_]eg;e]N(UϘ_nfUI)XݞԽwxAS"LoUd(GnOǹMI/%ɢN_om<9t'3,tD:j+FUr<']Av<6m'|$2$3eyArޯ~|cr|Z4]~w+x9ffEM|SHhXOʚq|YR_:uK)SxXY/m'I\K!wvR6%)x'_* #Ea-+L驨qYPo̊++Yk"LGS&n6D+.R8O)T#S3xK1| &.Fט㤿oɽ2q]62wIAƋp(‰(̘3B[Lt5`[6* N|A3@%1o~ՎqU#nwRV[ I;֙O Fdv2o~NB[CP~jٚ=H ϱ?=DؖՈ:[?x^C!\RZ!W?qm&#%Bm pi3Fx}xjcwIEےx掮|ՠ"6uVQ|]Kat v>F>~[b0Lh&N@q=W>Q"BP -%roV `x ۿj3IWM$ EjKzH-18e{融4ić1]j@<Ҿe L 7$IdžٔB'O"Yu:?mPqBdU|W5qylb yOKǼotwNjHOAl[ oךjo'\-'Rwyl7?K"/\Uqb]%BC"T(l]8Aڞ'{ 1V ~fo_W#XTS=Ɨ|l}m+m1|is{,9PWEkr?N~=4qҎ>hE׃76#xu[8K ^pЎ7-c1LuE3L7[0_ldcsC'ǨC;%>@zN>4[)!)90^~P[S;%Ҋ}b5DoRgXi( 6y?H&l yC8^:,}f`0GH \;2e("| d(@ d(@ V.`;VP=/v)H|ɍ&ce[ ~@<s|ܥ>H ?EUE7oYa b8PHiwNOIe}eA3E*Y4+;nE`!A}zZy 8i`!_W-# O %8_$vnӷɏ 6^}r6޵}t/,DP8T_,Dc"SEnѓxڄRؽ#HhiCCP'I= G"ib=Q0We8P"ZQ^58Z"Bt1\$-$G&}Ts:A%tV2eUl1"G:|:~z9^ /"Gן, ?LC ^jO-3iZRQ/g^zt!0³{l}~?>YT˹u<1ƙ뮂eHDle-?m]۩AkĠST l}|J~;'`^#ju?8l~auJ(M$A.X6.{ p(zæ1 60 {̀ yJ<`->aQ0 jxC:ԛ8xkD# |l7r%y#~Ԉ*RwT]RSXy9\w'? ~aNU9-hp/R_A{uPF6|+ol3.$`#ME:aܷγF'//qi:jj/[oPxClBҏ->~Y͒`ce5?5GOULͳ%862Iˌz/{7 Qбf%o>=_mv _AUb][V_(FQO :峜?~M^iu%)m3-KVz+,4k-02yly_lґ0inDĀ/HׅHJpb6d8DiB E<Ñr3 !/43[(Ha|%_>IpetGl'/‹.u>Y`M IR~^i2GB2]fs>:8DHynֆ=Wc~|?Gyfޥ՗a[5__ekpC;lA'\|,v9C} |+7NElNK/3N7ʤ b~/P7 Кh(Cb-ac7@oIԮv5pDYwVIv\ .Ikzn:9wHh|b/U*MMҞu3q׬N@%06)Sj1lǛxxn6Z &qjLȻ~+\UK=0亶>(/M+^e .٤y@dVNNdn8,Kd- FQmlXB;g TVU+j3}  \yL5;]-;%DiY8j:j{ы6,'d#!i_7T<|o{BBW5@k㫫ԕxv#fAxm@w%q. Etf 1): q46R栉Qdy\"!urY"SX*)p{7_u?@<*x }:*,Ah(7| va cBiom6]T?Rci<:2m/η [nzx ٳ<hW?`͹5wDGcߟ=}9( gV[j&4);U7eQ rUjVya;|( m뷊1{AB/x6SmijY/OՌSy4+{ |N![VT*< e_!V-6m@$%{fjGUioE8D͆'D/D$IUjnړ̏g3x4RDhDm1ڗϮb^ެvw}G=};/亙n2^V<GJdĀ 5* ѺT!i_fU垴{eE^1㎕Dɺd>Bg(h썂N6t37[f^` EVtcQ#V:( v^z+'(OJGbN h@IDAT6"i_)G|{1`=~UwIQIw#o?z7|*~KvKW+ͩoiB|I,¼fGtkYs%T$~5//S]2x|B:K# Y#TyI*Yܗ,P[P1((0DZ$@$P~.N T(>#vWSG8|+x:O `RA8 =~c%k8$ϺV@]ȹ6v&wcrrk7z1ٚB׳FH(}F2=_ ͖!azi8/>r0`M8)|!xNYp[} ( ~$@%o?,?-OpKqDO vtw52šH䞢_1Iž`pY(F+<).e ErD15`]T~[#} RU _/QHzxtڥك"(%0$3?;^n)eUD .;"{PfT_$<;-ss~t-7 :T3åqiAZ\@HS>Ny*3 1Ȓ׊"qyp`5v&% ڂKPш_I_ Z,xϖՂf N-=(0$g ]ϷT;--зOǧ7 !2tvǘ4c`Q0hoQKq#J,z9>*ʵƀdO5!9D_qx EA}}T(me0[շ\SyP^u5wJr$u{_`Ï?Gvdc㱛T\d7srD pđa#UY>ۿHM ]k$Ɓ%$w^.+k5R͙1h}oy1_CdUy(qg^4s?\^dtҞ׆7L.?QEz*Onȷ&J|4cp v,E1h@v] Iep%N7XRԚ?%l @a~-ﳎ|GV5-C'G_{ :2h]:U¼ʳe*];o*mDGcdGvX8QܽSc%]S("*J6 {ş*FYH=_qO_Pŕ_Ywg03P/kӳ:YS"tki[^_zi}48 =ZCybU@NuZVIpir&f^[RkC :/ OŇk˙W3v.::g5vOݏ=})Wq~-[E+s> <8{u=#+c^Re_=d . i⟖O'*Q9oحj 8s{~RpD`dh~%]qYy$_pJIzô lxL:PL' oIv&[fO^KP;/1=;L%WIoT$Z#8U/ , dlwn10'ٗwc"i5=B>1TYs+۟ʾ]IeI?Réc\1z9[B͹c韛\Ng="Jj%x(2>*g$ ~7-,x-6] wU@?P+Y-Q.xnWQ|V6`Xy[Ef"Ĝ'ٷZ0;)WB*Xp9?y`^1&򲍇l٣ۭd`Icλ͗E˛ΏLFQ .?޼_D^+ހ573(DW91#<ղ!FNX]g8>~jJ@ n |C_3Sݟ`ߑ_cH L%CnL[^ڰO5OG925`ӣCՐ n%]ck pZVr] ONGL'd_{i9J="h~9\B:u#8FqHcZ>cKWj+3 KZAĩL(ndg@M}Yd!G*r|E}s] ? ] 7ZE\nbq'_\S4';xʿCzu勂xҗV*6RI՞GgNS:`H>_Y#׺gQnK8o1Zc#Q+b`Fz݁?v/=Qᵆp Wy)KwJ Hڗ7,2r~_#F5|jɛ-2fq^eɡ0E|̉[xjmTyS"|O·RTʹס`IN9΂?N/NIwHuDq|]'g=uOH9qY7S^B/_U?Őm߮;{?ѲUq19 Ͽhz.N15꧷it'EE/?&N#X ^*{UQٓ^sT82/~H|3)yڝj@4 Bv8ʪO`;_ҴYdp3ƫwtrQӨKct_c w>ǰ&/ ~sn>L)Q~> wؐ “sV#}eK0Y48z%Ig H\vEm 0+@k#}  P@L&e(@ d(@ d(ߚ>@ ,`!L!Zf FzOy!%1 EtL}DB~UeC+v=KRW!?ykӉ%1;D/F S( poCY #R_-Dv4Dp,̭,g` |K|B:»,[1W,+Wu E`?h 5$YX;GVZ]bn=kw~A+w-nE0O d_jv&sP oGjS9vzG$7؟z^喰#Ȭ3 OuUU/8]"LM/=-e-y4D k O=y5z`cRp~-8[ZYOj~U0W?$XI)E64FѯyrAyԣ#n<"1*+kxo`B m݁jP,rV3H5lH>/V6O nO-SPKcvS5xRNQR='5@2g{{EOEx}V Ubc+kܹo^}1t;@; 2OKLl~κ~, vFvc0n`fEEGJ*.!ċV]'G{(>ז\eK@~r. q'M4K~7:%@6C $UijIE/]}9h1؁iqNP_m 3!ܧ-<Smm1h1f4d47L5oLhM|32&J໘UBXMdѪwFKĈ,kl5d]gg rݻE֏^/Cc MIY9,2.k{Dg][,>i Ly ^W衂5I_"}_WY8GIN 82OKr^GI߱ YL/$z$|?iSz8H9?k ҉o$ yw(!CRI>1)857-47uwfiQg/-E 7g]5ȉ(>Oj.uܳ ~ryì:?Yf1 _ J[^ ^z+b=$׏t{D6{.I5W &ʏ(՗.Oţ95jt,a8`\p|4%w1lTڤT2qEu@i._Iu|֟m/O ]/ ]E8Gx__t\[pDvU8< 04`r|$,akad=~3#}壑ZjP]J|EyyIEi~LF :ODvlr0i/`Uo[ CXe+ 0~oOg/8U>fNI4qds,;֤ߚ*$fJ-)^À|)4\9>opfH ? G xYP;}S|#Ƃms,X eZްHwWUvV;eDYn#?b8usBڃ WN}Bc{^ӊzo"va)8;{,cr|'~&)@b㷈4? {AhE(-ͤ<m=ĨI(is Tw81nSDZcX Zsn}o/YTnlCSy JfxZ[iiƓR(i%ui*]p Jʴ  w $\H=UxVxrRNP- 6~aPL2?2W@X(.YF_"%4UEtL31) D `>A_2~>91<hfbr(ﺪg]  ^=['\14̊F;C\_뜕횽~|EeqDL:HW:-̸!y!awA+xXI}&ǥ/_ ?O%dkdT:Q[=xWRDHz+({Ŝ#*@8ROO ,]_k{ >K :5hk@ xA >2Ts?. T2U@1P!b' ~JеTiF"B8쮳|y|z|#@=}V 㘰8nj׽ԃ϶՝hδNm[7{$ҏ?Q{ "a.s kT^TXxN#Fٝ|o-a1lž8y .hJÑ RW"#py[Bg])g2an1IWɼ0~]YB;Tu;YE4b^ͻҁ>Uyußaۅ٘Ωʫc}s'^1 c@xrpM\ W 0Ι$t[)@s\z=$),3LP C 2P C 2P C|=> -q w, =CԞ MTQ)pO_D@{c \X,wX= ;E 0yvs^ c=KZVO=vn7MD9c4 Zg>YuAk|XWx|f>f}~@N 9=Q"A"Rꕢ0dOG7+|fr +dԷ\j~3?X 8(ZЦ^*g&{#Xҗq+xDl֏So X\%gAHzEAWXAء@cFY?&\D~#|~ 7FZBQXeIQwYIispN^_`1X|uk_c3OUf1u̧3" =9сYYS9~VԳ:(' hVmB3ѫbl?sGz[1\R͠%>Jݞb849鵲Uoz#rkRpK?;P)W-:|LEW`>J~P|x*([읾k7M`H 0j>?5ٓ66 S0(9+>4u 9|R/`D|-`#' \{ O ?m1vtq1'rzO9P#Έ٦6iG;ppG[+:vO1a—sŸB=q#R_6rH=}Y\#8sRSI~0`2_j]A=xo/ sjKlBmx PE6KYHssPE4C51s@|\'"HwnїX.V?+[> :y fzE0gRd (g@Ğ`kzV^)FPC|;nɇ$iHZᯟ׽$klP'45\P)7HVNIˍ”D;_w;'`֙Ijڑ%}e㙲wt$=/y8r<@#44oQZ8I Q =dj )`d4|2S(zu L|o͞b ^5M]қM}]%=$O nF=b>OεV)\e_IJEqpOvTs?AߢVӂ|u _]$҉)vvj{]"$}_&iFzS}`hF2=%?=xqX"Ǚ<^ wEEۻUuLQ{d<4RwjgrD0jw}I9#[kDspm#9SjZV_L*uJ^ .T<Ԫh"yL'#*뎬{ (6}z]/׋uuz̧ K{E,*%:X_2l?a>QV)7O&;ڻ-nEPwx,25skl4Biʝ dfYT/1vIB'QxI桪QSw61RĮ+e?B;:*;rVN'{8?v$wv'xi鼪{.qV7R.6-KRxN$ {˥]պ=;[S&` 1I6$JVCSҳ5Y 8<(R7vDe'[9/IHyw?ʷr{1@`!p2& &j󨷤]5J\O6S"*H;ݏZwmENA vU* 򏞧 S+ 9&OG(7T#kpH8/C zx_z\CUEt4qoy46ʧ9tkA vwd\^vݷ! g?Ϊ"Y97L8$ bN*YT"H#YTE@@EEDAY 8pp߆o۷~}7SO]]]U]m]s12Ő{Yi3Q w|4\S/NۘGۓ\^v^"Ni9'XNӴ&\?[d?B934(7D;\6VN-\1TLloFD5@azZ*}(^,!@P}w|`;MzW z+p/r}?+oK 4yqzzᝤJOmPP|7VP?/ @ז Ƿ@<C  @W,@=_) , g4VNU[\!P:&^zʍSpeL7rZSXi&-.Jk.__nQ <sړ >EP`ً`W7JP8^kՀ2k_2)ڕ᎔{cW9Gˑ e I P.hφ.YYi9bTQ?~aq+Yĺ6P_}sG@L0WiO*x&DWS~Ch @@ub)?tTHQ ERHQ ERHQ E΂o pNXV w0Jg QoZ8wD #E_VP6}Zl\ Ÿ`3 ~9y.{ݎDOAcNP Ozì,yVڍY^T_!y'?i xoo{s"e(.΋(<Lb/a*-UK/W5&bWE}v|j4 풽jfuȷiGs<=}ma2; z2ej/riEHp䉏Gw}DmǥC75jK QҦ_f_v˜!W5, _ul0dq=䫆|C ?*V<()ibNuŚD >pHdXtoo;N qs1nޥ0@txE?HӉG|(^Ŷwq/kTֹ{ʁ͸f޵gIݼd$G@̼ETD 6l C5%; _Rx)!4g'׆;ޡIaw:%8Q &72÷Q|3trx^fƙa5ۨ:>\f2ΤoH$^nlץ:`CϬWXO{'w&/azdS%h/p$%W\Jr$zGF8'rsF=6+6|>#}52_"9jZ ? 7 Z 0%>`[ PDPah WWs4ڡ9ξO!qy76&Ǻc ~qw䈞ɵ6?]V z򙹴lQ?G,">=б㙬'ZUU +C%L?Tl̅2΅Rԍau 3sẌ=-K~N;q2׿SewZCbʽ:9@?E8i(,gQc6~:AŁ0N؉ 3@܏~Q!@WM4w :ꝉ3Q@T<81r0BX AE*(-6pYw;՛V|<*3cٵfַj=uZ+,/3EdƖ5G =+v_A ܤ}s\~Z 6(AR`ll 8!SQ9[t-כ_[/X:YKo%3Bp c[E1$N S> >W}#h4`؋'5.%GI_|(NxʹPp)v&q/{8xe( 4+i킽1 ?븸_&`;9;g˜USf 'K34|1wMLCa33DJtW8IK֕]Ÿ#F=q=eb).->KGDYz\2U?>q<+n/WiCzJQԨԳJ$a&K9Ҹ s 78۰?y9{$st`gg;&ۋ3y8:ߛ35ss9D-|8+pFFh]9-[COڧ/ϴ#xjZKҝF; >1<GKsJ{=HK~Fb;YȎM}=wKO% q*pVVمp56ͪ,@>_kzGeGm̴2WUXkuQ\˸p}֨p>b"'ڡPt?̉˨ ?N,GPI6 :N¿/>ѹͿ &iKT/j?[M+0(͹( K ֥LUhSa wCG: D^cJ2_\c{?3H4F=ꥢWIT XHOf7Yk0k6=~N(11h  򝖛eZ?^8x::3Di<7hD/X$A#G{О҉rž*uۺN#KݢwHy[,ڼa o4I1ZmZmwOJiݳXg $zCC(7$[$_aڍJJ|-tP+V/W.>^(wS[nkt4(PY5+z5pGK55J'( `DF OSu s >Uq^:Ġ6n n lPcrٴfu5NlLp+ 'k}2nὂ*s9} sqQ QPfI'H,؆*I3BA)M =[ѝv,_ځwjׇ:9xcʂt27s/ g< I?L^<`4C' ;uAyPK7ddGHMw @+0xl)` : @ Pg OX?s$RHQ ERHQ ERHQ@SJ,U`]l5 lH'B *rNQWW:tzr: :_ jM,=E/{;ΙLgasƉ!@7ظҙp?'M&nhŕ K.rYC˯ʖ#) ?B*`WE-A!+51+⏧!w 67ZvU8;w`|#`hK|>ycd9^qһGvkrLvpn\ 6t Zko6f<ȬԂ_1X@ )8j5Dv{_ 6>Ku`xQö:G ͫDKZuF-i{k|g]k̇M hO'3):x./*܅]R 3o:rhI2{{^g[y&wqtHx{Ci|+xO\$wG0b.c ҸTů c~FBF 9$>o)*_ r?')yf´b88+$|5wKWiwj 0.~,@tK&x s@s [~^\gy4.~8r@nbH`e>J}M09m{Ƃcyr>X5ANE9 KsߎNٹŃd&% 1^Y3OPoAvMP}9E EIܯNAsa0S ߗ^R2u&2JVZ>'J{S >ןV: UL~oZ*9E_4v@[QGzd{ oBdqTR ̀uǃ ӮLupC}lN. P2WR?s"lAdv?/z}(^oXQǿ(?Ǫ|^ CP)wg9ZD|LO D$O j%eeٳ􏃙Xl@m% JxTobuw(o$#hLw|$^Nچ= s5W}7$/2kov5!v_AF^FlJs ᅴrnWiU$ ִZ@ݡQz ?l_$PW  ^Ex<5t5 ]}t;&M ~֊(*YguG/#JcxIzZ.'@l`=UvR/۷S`W|P $5R54)e]$,8Pg }Tk"{?U~|nWgl\9X[<} 3`gIQ[jԵu`-# nk7,1 lzIx=67s%gc z{K:xU|Rx*p.= | 9AqPЧ]'{9Ev7u#Z4,F5k^!yNbIIq A z1\7x0/j=Zh07@bڥ%@NCxUr|#9f PU~(tTHQ ERHQ ERHQ EߙFzX=.q rdŵ_ nmF>*:(@'1p,8K~(Yhdlǂ4|2SkjO6*0'`32tuX`=H^k,k/t . &Y4'&z΃{YX߮<9[>9,M+@eErv".u-R*ԩ/Ye_K_ @ BTׂ4>5 ٫>jBVvljɓ^Չv1uUw;CO)20^ a܏=bHjQ v0d} vl |{AM2 E6}6YyHU;-}6;et%nO6:k⹀I IsW|RDB'5"`;{PU R,Qf mt٫H@'\/g=^ݳD!>X#+,k)Ja@F^FH7cs ̟=`z8͜dgo؏>D`H$;B]ϙ|etzW$fXk}-M~+|5֨N;~\sS QZf?S!E[ %S[oD1JqRq\Dus/F`RB[ڨ-?׻`:O?H#1"#mc`>pπ-׷7nU6כ";j%:ujLG(52Afg 7(zc/ P}t9ۚ-G$F/"}\{Y:E<1/L䊫 񫝠0YB'H<<|f=#ޥhxI۽O6)ŢZ=&䕴e8+2!_hMVgfvH"cفm #hGCųZzWZ^-Qy_u~m,7Rz3qG<"I3R%DN Іhs b>yA}hn_q# ZL8UF/W_un.cFuelfʣõk{k`ݛEoIg,y>KZR葎BL|[}mAPx~o!Jut T2ڛ_g.ߪ;4]{Y϶^:fe?)i'gO(4s_'p<~xq8 $~', |^B\sw_$/ZqԬ?ݻU~dc/QLP'̫̅Rދ <{c+/GJKXͧ}Ovo>iȼ.4$vmXӾQ?!{ 0J=׎?ӝ!fculqDj0Nfxw7ʵACKkLW|}\[{\Ot\ B|@@EGm5`,@9(Lw|tO 9{X qcrt\/4?2!;Ÿ%?;_Ț&)v,"o;l{soG2_%(|!Nr%f&25Mڷz CVr>\Êy7AOaFm|ZvXemhMtN{{"~%\M:qcAAgD{Z0IHOvcZ '-~EM5>-!|c_$7ⷈXpBi)ܦ_r~q7c/k& pwuRڳeBqT0]+SG 8}[rX3cڒOW7(|$y%pqlcl@Zke]?$liN V`{W",zo!OltkI<2,Y*|h2NH#Uי¿7jI .ϟeȿʦ_ԲzQ9 :J,3>8HEfL5> b\*>it+B*(oL9B8U !^É|\h9;%V#BJTI!|R &-{uDG7x-`6SIЯKo޷ZtZ A|@TF UG͞R} FݮՉ(N.?+Q˾⇜n'iGq/MKK޼hq2ñE;Q`o-z:b w`JdCb|)x'J .*K#L:]iopw==/ZbfYAFg^G~#Q# 26oNcc&Xx-m4 )/*;ɎGF |N92S}蒘ح(O|\q-:;:ӻrPz .+~hHaUYo5^&}{£*G3ljǾAgh.boo٠FvDZ?gnVAǜ#|: ΅.qr|~vtj m~ga]'Gŗ䯴,=oq}Lt䢸O}{~-}ՄY@Ӽ+ٵ:96 > k+GT9F\FG=Pd f B`uT}4U57 zFAf%rɈ?Y^~vѽYM*]x˜B/sI,4|Ku1k[80J}Go?̏n y Te5CĸX-Zz|'NٽbDVxn5V_-xoo4+dI:JEw ?m?3Ȯ5.,/iԷ*("FٳI:s8=۹Cso3{ 92^&7E=\ge[Po-3SI 0x޿׿V\sp=e\%f: QOZ[YSX+QEg irDhF&.oE}uMsW?|'T}F!RvWK6D/& ^ n(ҭP   I <[P}#${PLjx_4ƧSx K8.CrXF_w+x\seU}{{H:=|)"z#UCиmyǛGx/䷇q;31!WǤ'?J#vk"t.m3?u w&,~+{qH<|Xͧtdg%{܏>+ }4QO0s̏^`Ti Qckmo`UW+--Y)yC8ˑ)23^-Du d06(zv5/ %Z[﮳5uNAhz6׃no6[5N!N7\ \Rg:G]oF|=]? G:8W-8RRrEbpT>l(>(3]Iﱲ3sEswjLyPsz-KC=b'܏Oo#xNUat?O_֟\Dfz*Hә!WDzY^q/hqo):6.q[3Fg@xV|.oe<=?LӞj0"}97u.KNć.Aͱ>Q%?/sMs8I9& D,+yz~Ak!79V!vӸw<;R#!)x;|Y| {ߍelQ2h*?yv9(˼rewG ݀']Čvj,~D+b0~3`JCR=QU2:z[e/-ť|%8y]5>^^}x4ljJ|Sh.{9Os1qJ'ۃgCнQl'8p5]Ld<{C{خ/#/^;2ŵa<חIW- e/z>Fj`V?wߤ[*=XLuۘ9I}@WJT]o8Q\!Q̃E;oaDaU@-& +zѕrO4]c(1VjA$v?bEi=[{!9-F̒6&g;5L<%?U qj,IZx'ë'R[ez!bIIfDGI(LhRpd>_潪9` uRT[lnp3s7UY?D%)ojv1RK8ĎڐsbpxƊk*_Uᇑi[W6 +ON .۪6qjq_uQkh" Ha>>س2OUA t +>߬xl}?,՟93]?!OZx t74J\Rw%TB=YtF.7+W҂IO8ݼٌ΁t1+i\>3ȍn"10̻/onƙHAfDkUtOWq7z9BĴ6x"°)uⱄ1bx0{ @|g/.|6Nxi/i@BI;TR)`^TSHQ ERHQ ERP$}8Ջ\`|YJ=Mx"oRE,G"NW*܋"<[/XL3a3Cr3_74\X̋kvr^OvZph^3uHގx9 n"x!9o/p^tĂ-s.a/a׈Fv셓z5!ZƃUJ37R_BjUr>ăEf?()^/g1M-ŷh"P~u>@햊vn7K-[DǢ6pL}KՋtNH?Ct,-p[/v"|ozEwQ ml(9/8 9Zt' 6U`Plц ɦ=#9bLNռQ@lh*qsBDN&Ow3a?ė{akr_O>s=YĄ[ jj3#1C| {gSGs_Tya!;I'c܆cc#m3siOfz>\T(|Qc^@z2ٛvF41(;s0t+jVTL^N$돬?$㹩5f;߷x.0DֶbVN჌*/G&Hyj @^}y<EئQW8sˏ8iEg`1.E=}M)rE/uI/pYjirOeB{=9'sٗQVh.4|B>7pgNY/#gdgd(g\ J\1U}F7TC>2` 1S(xܻއBɰ:f(fGT} x۴~RXӻ7_J~+'}zOˎk&:d'p4p0쟥]@jvQ?ӈ|+ ,р} k~igt[Y˞anZ3y~' {]"JmvdcWQNd7wio |D"?Z[?Y?R͙&Rߌa, 0]p6⥌`Vj@heҾ`A1S5{ |:2x'JBh;Ë0n^!~lO0;uv/\w@dןv}ʯpY:w.lW ̙lux2wu3_ZCOu?>P'@Z@nJ4,m‹UT>:sWs+oH\ahq ڻW謡ED.qOed'ƫ_ &1LK y536u` w?5| I9m+P)9qaIEt]tcď#c|w #0`{w 0(8U0~DGxi)@:4Hʩ?ʯ /NQ ERHQ ERHQ ErX~)IF60 yNCɔ^n$@4 1vh~kB@jY#X 2Xh^ga]s2fZ"h3'XT> ! L-+aane,7uOt1znE_ǻ#5F҆5HwgViw_Y? +byÍB-pųndU*C4@BC$4)DYs2 ׿GN{(fnt`2 Sϓ(HWrޢ$wuoC4l*L>{Eo\q `ؑ`MrpEFp~8 ~#`ԓU9s?);`Aۅz@xα8{&695\#E?i 'ZxvI2=_Y: N;{E3f!|mA/[]:`{5O].GsBྪ0]/FLh RZZ g|pX\Š~עD{=hoklE.ʬUizw-' nƋN~1I)&Zh1Eaj.΃ >j6A%<" 0R@Te곃NBWb)hD8!;ۚhr$ݤeKz7PA<(ƒI֭ZL+z=[3y/t3Cs-(~*y5cZEO\>} 3/8(;4W%mKKZ骲.?&Q.$&eNnG7G(ċP2.qOzF!;_氿J}І"={@aTෝ(-DA$Y+ Q pϢW`+5@ 6'=Ok 4W.3.j:p-(bU",PJ8api<8x6;w<J]5zCXќNaz~b$I|VQ Y!Ƒړ9I ,v#\-|}u1UvLiUG WͰweoӾU90 p?3 g7sSw9C:h/~fA6´V=v(kNwx8igmъ$CL+b6Eܫ\'qVNPU2[.lpsؕzOusҾ[§x7W+VmZM( ux0oD=%n(VIWc.Ȕ2oZt41 >;?JWsěx.X~YPl53>Ko,dnBHBNj:˷ZR>!EJڡZ\l˼Rc]i\]5n8J1y46B88Rq+-;o75cE'ߟA S=%tmޙ"3ũ?![p05_%70{=q D 0jz ly9 B(3$\ڧI#R'QGꫲa? <_!@wxF?O M>t4G3xJ .a,9WW 'ΓyS O3 ָXIܤ(֐ʣvur둓ق?O<>~Z{LUiQ!YDZi VpF]B/QeZ yogs4T)> 䟨5?_~Ypl@IDAT|G(SBGiOvg0zKkx*pUKt-wtfY7/F_o6cP~ˣ3Pdo8wo+x12#?z[Ő|K~^S@6`9} 8mdCpAi+@9|'R'P@THQ ERHQ ERHQ Eߋ"k ,ٰz ǰXwf,t,@NDujwyJvdԠYr3 9u:kB,p;  ȘbwՂm˂8xMyeOQ,[;(*4qwxlwx91~(79+ZQx[*a7י,pv ;e.iT L*3@ǘPH7#niwW[Eg~b},@4O{& k9Ͽl6M1; 3PM2pH!W1c:5qn<`V-+XlGui=¿}f eGvk!XjdSpAZ"?e}Q8ݛw-/GP3+M?^,}n>橹jxDF KQN!N2^ o+@` |A@i@z~ M>]g!څ@6_JR837~/v]Jm2Q6Uwu3*yD~Up#ۗ3K.v߬;2XP|Wl2:m*W ;}p?Pٹ3džNvuH}D$XdÃuy rش[[:gק1r;vL-V #cW9Ͻ~N170 1|ҊlFC-:14[B[D>q΃" ! dY喝8 +>c=.ǥ?| ʅrUkvU?9҇ ą8KAڗ\)_$ G)Z !QR{ xÑ\v")TF}~iw>E S7o1o|u|q G-oC7GQI~Ǜ9|ҾW .~ru;}Si)g.oI5b}*wU[s_HuZ>׍R^4Kb?^Y`" JIRr5mhs 1$k p#+ͪB0S? F %|~Cpڄ|\C]gQ/ Îo>p 0},!|O1!Y5f lJ3 uO0(Vs]O{ڣ}^.օ2˚'Yzh(H9=3ZУ։5!(1ܞÏxa9r\7cüsIwt?|Db6~\ >TKqh?!j  } P*O# ) S( CU*(@) (@) (Eo8^z i `=E"sH,?7S#gxQrsQr6yP?G7'oa=('lvYrFL@DDEQDEPAD"*ĀPb@TDD@ I]6=i[<{<뽞{}ӿ[<zj3DVdVno.\n5{Q%yPOMG%PoXXGѰ{iHe _֗[FݭŠ}Q 3uͪkmYB}|Q ٺSw(BZ[Q/bfG5q:I wG㌅" XYci쌢nS[+޹9m18 >,z`64ߛG{GQg:W3`:Cn;Z6.y_Byުp]NjN_s1,]9Һs+gayE`+blUT9rww_|'=(8W5|Uܥ/ryam6|<,ޞ 5nrEU.Sd4yB.=[<ڔ R3_Td\7K=8d^x-u@Yb3*Fzn.rqe_)k!o *vIV o#KJkK:ʤ}(1+6`oMPZ)0tUhPVПhh}ʖ-r\ :W^5II&^!I&ImA$o2)[IwU)gzI7'_1Uvc,s|&)ڴ`.#ojͰ *3qBs+_[VLIc>@ݷ;a?)r|e]kJ锢V(fv̛zrfis?8D9GSwM9yLܮ~R}[?I ?FF3<}J|.JԇfpgqރK4ӟ5u7 =.M?ZAKG >ͽEgMl868_;_ $*3$Ϩg-g5@*hz]mjF^?<*'́ߋUi9@i9@i9H 30q0Q߹{'.c[;WǙze&Y[sS_x+-YE9ZU 5(׷2eεQ/vܟF{轠b"weL)>AVlnJwNElpΦԆ(T1k3rLMn U!29N" ]he  ?Be!ǟEm' QSrZL9>.M+|]oX31-}.6E9TCG0ȸxGV滴~)+]=YǢJui_'w:T%v{- VXCC ^-DɣFf/ZkBGԼQ<곓|pf7ߟ*IH(`T%k>IdOU_VH&F^ P K8e^G" COB%nS˃<3똽=s氎t˿ocVNICluރ *`b|mQ=P F9> Ψ1 b!o㺒0i /ԒM=znԱ(楝XfL2IIs/j7rS1;.iz:y*w4d5&S?GJy6&uܐX+1c="J[yc+wcYyoKzB񈴛w.Eph~.@.|>i~{F !m7ў~CNᇍ|H5E-=ɢ"q @rln"ʏ/{EJߚuDh]ȻGl:󩛻EǡqgEĚ.kfJ,Ŭ:M0M_Ӝ x7388\,-m3y/^w KI}.'DS['(O.~TCG#h3WRϢ==b'ODOA>#/tx6J1\I)0)lƽN%S|P޲uEmp~W)5wOWkWh3Ƕj7\u3竌fܿZߣHU7^bh6;5v'O:1C?\Thf}lM:ė=Q1ŃpTk6sǔ%"c7ShOw{V zG[x{R%<]P29~ e/9QB3'!Vw ˼4$IF^=";M - u!=f$~7tr*FJ QB/t0~ӟzPnJM{PH\7=L/ȟ;z]|J{  }6ʵWot`Ќ Cd?G+>KL|1+mC58,_=%-ۙ=WeOt?vj%PTŌNU<{ mﱾw.4VӏyͼIfdk%L.=1a 7By@n+Ij[U͑SD>V+LNs"b)́4Hs ́4Hs ́4bR(n0* '>{ g8ʛ*em [α(`Ϋ8$-:d|c=de2QݢpN Y`5eߺy{L} }yi]outxV{KMsڢzuLo^/~Wxgg1;eir9dh_U0۬RaW<A$P0e? w3+"Y!G؏AԏAs_ʾ+;Ml*jq;zrZ">_">3XmQ{\p-/ۤpS$'{C)_$V}<ebZ1#/΁)G;9PN蟐ska c *9X{۽Sص]T.!pThgb0)?|cN h&(u p[ Ե@~kYmL XguCA&ݡG.9G}jd+ۜ}w3#F;z.#-I0( NŁR圀]y^a]8#v/3N(>9:27PVb25g0l;S{|q hp&0[VG u3XG kVU3`!n @Oԏ3tw {2Ae|u"#p~zqH&CNt?>,޴5ROשF[Gxq l{Y۽ܠ ({j0_ODZ5ۄ>}h`W> ,~Q8<󕑚_TH=<=Vrh_evG[O#7<ڧ3/:UmQp앞>̺]JńwYV}(vMg`E{ zjf31;| [S٩*BD(hI4a.;n3ZfGq9&[*693KB)5urf$vS)ɷ(ٚ~~Y1ϖ%sT/hS Rtsܫh%[;++tp9bMG%Y8_U~uUn(K[Ugyߥ"% -}.>Ah|cγL:dhC' )tm"= ZGMtqԢ&mKFNRJ=E?$4G;E| BӽB_&WJkp3Y337YM h0Êv᫊繦jÒ^d2!zЅBC5m2`غh$4;(P_XZ[űZjYC>wv!$N#*z(录{q_i^Iykm-ljfG%"s<xS"~QoDDLLH<||[p*a{[:QV).ЗSVOg+=a1DEvP9oJdMl#,ZAaS1=ɞ#4PiBLKC> ekX'j=Q()N4lyF%Ar/BQ'SY{±.xIS+8‹4 ueO yJH1Zb`xe2d;^BI;'4r󄡛#lGnBOeGN#?$~஽ e}k%ߥe w^6g~]K`JޠL[qO`}FԝkV{eAy71p Kq@T`[Ai遲1"pfԄ=CF}kZ5Q~)F| -9Vf 07(!<+Ǐ#*C*g{Fua˂FO ]ʲvM~|?MJ2wy/ r $dK/+.{Q,.,jxmE1@:{M ^,fߵ0^z 9)z|-oZW  c{%@C+ǝE.ݤ L?QF"dߥnJvsySM 6Pvm 1$Xcu,nSMq _On ^pV,PVQ~P,@/s`yJ]} xH"؃ݒ%q<<؂ʕln3RW){"T/Vˌ{WUoސK+u+(穻[]?1![Xd_\(~{^{/slL3gWFv:dms޵N NIYZq1n%G;'繒kz[ꁽH6Sqcꕸi9ΊQkFjuo j^jhf v_:_ c 6`*Tp@FglO|DIk] G-+'C)d,Fs!H"<.TJ<[r8#eċ8ОkJ }ٺ =M)p=W&[M].=4 3HQ_d/ִ/Rd+')(ivu˴hyұ=Q!$R(b%2z%XX25#{~{XYBG2?{?V󣄆 4A."&;i򯹴k~E1,ļ&P<밤AѶ Rd~ß?M;'fFҁjV .<ޑsgSnXh-*m^f^)MM%oJn`6_j#D/w ̜}*(9en">b5w@)gr|l]}97g>3df" tWc /-i iarrpp| pFps)!fYv.9]W{!zKo8j׻&7x]=rdݓ^myaۦH'c =R{xT.gPTS~߉jorZ{|3;?@_'JMs_@U'}}i9@i9@i9 P{%`"ytEZI 2!0q(`B{>j%M|}Q 7FQ8iTL֨mD:;G BUY'b]յl+^){7Z۔oENsN:v|.&4&1 {?\A{OhWmt} ٩}sL0]bG|%4js,@R!!f%EQ}Kڦ7#^6X|GAf:L@JdOQ:@,lZZYys)ԏjda2zf\Y\IƮANĺRVYkEW@wT1%b^Z,~ [B-s^iioq=$Y)u{ V- j (7(jyBIVJ2 3-ɹE++l\KT:Ĵ&&ڔ_?y~K8wj[(țNK}mr1C7rE<֩Zmk(.*㜜SRej>5njJD9q{:Ug/ug.:F;@%.\J9 sS EΠ7{x$w??ddH̊rɬDAWXVVrê'Ȗ\\527c*PAF?ǀy޹|ʜnh]D?xޓcšC(upaӛ2iGm11 Nh| %ќyAh怬VG6-1ķVz8T<\WS>H =wgO6QQ?^W-[gm͊y?{.Tnuzk|| 4o#ϙx=^柤-+~'}ȥQ+ FLpOT;@Q{aMu˫># j '_+@}! ,)<=߿R!eg2|%><.?j޳s8lܲ//,50p=t?8" }U Н-PLU[U~gyqebD8(bt^Mm?d}yKxay÷O:wyjaτw[=.qaVWvYc\x8ݏXaK#Bgޅj:\U޹ ;#7x?H\Lk5 c?PVJN |}'wIww/D np|f| m7ZԨ~)Ọzx29b3IFU7!C%M$UI2,8 TMS_0}'Ê`mԗ@': G\Aqz[|.7*=PL]s=R熾 |̼;Sl^a솤ֱ%n,4.4U 4AOFZ? βJfNiO\ ?Fr//Z~.qL.?ЉCE["h;7(49inGC{;w uy eB [ T1`ujO0n皋c-9)A\~['cm+C|7TCH BC;wpsb^r@5W2f1HNJ R,X.n?1C׉ÇTA, Rxފ:ogڽlF{Yiw[6 #Uto<5$_˽Z2SGpe<;;/3twr|["O_ W~GYm^lGd~Q;R{ p*"<7J]s8|*uiNq$`[ 1F w jmKT#` Ksty@i9@i9@5P#`{%`{:\+@=FDys1_&wGQ3#ẘ (ο)3:ECkDa.yEL`Fp^dBT--+ZIЗ: LVoSݻ(n 1FT%fql9v9%BXޏ"j@.E33~Be{Z K]k `}{ɇfڴyvjpzG E]7 W ; [P\M:6V\nKG}fp1ɒO"'C긞"y֜${TY2hjavm^-4^ OC yݛ mNmx`}r誚/>F61ȇ!TuPUr7J$k=v(- ,+LJfQOcڔ$jtJs@պ-1 I#(Oc]꿾8C4pcx; ʫ~%t]bQLZrCY@=ix S!ww8WKʹb l?زkӳP̢.X^{ )ݞ"׽ęCz^>ιҭbϹ Cs??QID}۟n? M"7"dd3o̓uq]{eWMz ,RqC>٭{V`(8\X~W"U p /&)|%Sp} +pc'< \5PH@EIuԕ9N%畾f/,H %q|~hT>Կ5N@ykWy)8e>W:fԷ;Ý^k֞*ad%_~+v?꩗ItϘy|٧_M,KLhVSo"d97:@Kάl#W퀾YÏ.B͒u`I휄Mlixr*5!6!<@~єV> L)_r _%o u4IsO@Ozni9@i9@i9q=4ILho0\!@ϓ =Wm#&!A?PFl{غ+w,2a.U3pPSKKk-jQXd6m=W" ?ߧN|j(&_PMW^͙HQ9;EF93("1LQ(_\>z~SZCOFN{7[݌M51\)~_ӝb>p:i}Yfe%0.]hFXw œ ;Ƈ{Ͻ#^7iO̻ R Z0ٙx94:qg9'L?T'/2p{i3xcm^T7/ 7Kekv^ѻ:_M=z[3ǕUĖv}zPɩ*:_Q}Y]*my+7P6;>ˑPCD95K? fp]=U~/ PrhkF GGՐLhk-p&^NzhSEfl |&:U|WNBle²6c~~|[;ԗ3~`ofo(vֲ *hnAj\?31}Y}?޵ʭ¡=P* -Ǽ*i!F j z܉h7^WXYt <ƇW<xY7tߖsW2dO;c^ o k$oǘ[5=yNIøeŕgIh~BXO(48@,TUFJ~`u%FY? ݨxR_ [y!>r{=CR:W'QH^WʅIօBY_"$t7Y!V^@VE> }=.; =s>Z&G PBR/'v`e|Ԗ5P`}w|{ڲRCy+t/huDolQP]Q<N*~98IVըP-Ms:Fw@AԨEǽ[LʖrY M +5ueSrNEa("w/D& 5Q?'+u_wHb~懋TWCk ?ym p/E [x $Bb/\ ̓=fc] ͫ(x'Q@^BˑO]fu5N[ d-R',crY?t:簋m14/6)Ed{UQNJ40$وgS0 ȣiS1xm"W]|?ȧDNx!"?b*$_ZX}>#XTmSNAh7 pn=UY( VjA6rv3Nϝ55rܯE=ױB-E[`rbD"P¾g8&\Ua[H} c͟6ᅭ aY_\% TxS(`G j/qYOAI11xk5mkȹ>p~j\@] (@i|ZW@?E@7[C>InxR@o&.}},.\FįO;w".TBVy&^+']?y*ޖr4 9?}_i.=cw^0n}{ roO. 28šEV^6eWk3>ܓ(\ ef%ΡwG?RW[}cܡX5gM=Y 2:掗- tL"w/BN^/ D+:! B6~qHXo8n7y5]͎1ѕ qdw/f/t zLjB Uٮ1G?L4|aaj -nCswWH?œvJ8p1ɕD(YջBG}'ƠT}h\?a GH{7۞cq #"9NꙌ(Kj2=/7+S.$cdyZVȫP$|Z3߃慠vjޯDĂnG*{&B'#,ిQLBOMnoO:F:ɏ%t?j~L#Qv 櫫;z.ő4>R&|V=e1Q!%lz]q mg\t#=U1%Ǻw!qK-WD}}b)*'FK 4+*1;&6zUjXY9v  o.xPx=O [ RdOKC8C~Hi9@i9@is(` d0ѝ%@1=?(`{ B>?8KY|1%Rķg=ġ7P/P4U~WZcZ byľq|ʥz$6!6 kC?˞d$+<d] eW )2I9DqPxԵZ!Pu }c0Am>ެ5 (d7RfEA:E8PȬZn |j* LF)釨]oA1#^CeF Ηt?eڋ@0Ճc|/B_ؓZr^!i7O E_(.Խh1gO㩧ݝkeKwE"_achH+ yЗ#;bʱ%RVئP>y[ @iPa~ڧ~[y$;7$&HqZW"TgMNH{ O@V0ey #oV׾00sU& ۄbx+3'3{V^ȭxf}+}]/ yխ! gQA(HQ8rgW.\S4jeVvtm$Q {XmW03dUlSV _Ci 1W/9~};1߱]ʧ>\F5_w;C(~A,+|Yn(s8f쎹YA.Nsi^Acq]2xK+ply g.iF!{w;C}|7+c_1_꽫MJ>f# O3siOwsy6 j{0/O[#7z5(KW{sq`1C+owBcB)ڨ{tPI1HɕZJTVX$B}-Tߡ(~PiW"8B~PqW*ϓ){He)Cb&5>FM?I*M{e,3$[#eOjlƷ*$8{=_u;kI^]ʓijPﱤ2} QO?{eILLWrth`]lש-G2RMIMU_>ݨ-| s>g)EO/#_-[%Tl+༙Hْ񮌃2e)[٭[ _' *e~LqGAR]φdWF[[7$0Àd/V4,HNi9@i9@i9W@**F*S)~OwE`h=VP\PtG%e%LȫZse0-{L{k%?_>~vЫ7n =‚LÃ?)N=K"Pxō(5D1!s2 W*ퟘH 6 I:_s[KHk?:dAcuZ}*ړus7kGޝ D ɱ'!2=h1ts*R8nw+%P|%(>cI(!V CrݖpQZlOiZ2d/B}WO:K'SߎhnLf4(x<Mt}'WTdW| [y%- |*  ׌>X;7 }Q ,C!vW1!S㶺{'n 6 _LHoEBβ:񇉡sL2 wd|_|ucjtJs˒ 44^,/d1R9*:i'ak3T)6PSeedV|),_B?q_!)yf1i(Ϭ+[Ty};;]F}V:cyF9sjunIwyB´;W~GϢ\Ł)6<{GrㆍX?l[ӼʽD.<12v/ōKf;Q+\h{q\'WAN-)wGUJ1\J~Ub|As 4\vz}>S!rG)wGdp^yU*"`x*=MD2 zD$ ^U ?V9Vv8ZP_nm;`zͫ}V=X@=#@.  XAL B{ 0//4G@w]_@Jg+~ ]t]yQQԲT6 !slO琐3Tq>NuW.jcN'cu5)Wb+'Qo@p gп5a0ח<5Gf=CH-Z9A7CSw-.JpҮVe> EbbegJd,+-t^`nUq|3ÿw#4[ҿO~2@)ʀ%9 ٥KX8M]aX$4LBסZtF{>"Us][""U,it!RI;ZyE3TKXjr*( LyYt; !ؽ%+%Ҕ_h ޣqȓ p]uk`aD{Us@p:9@i9@i9_6!t U  p WW  gCK4mU_]~D-B[;ū"weI{Q P,oc[h2k4#-  zo0Pyv> 73gmb⎢b$ z)uƚ(!%L,n f^K}Y1Xݮ=ٿj(Pjx`}foqY+GyQ~$R)H43bR.f6ŊAI(HzVB}j s?fPwf{UpTPzPO{Q~B {G64+UFVjD_ ]Q>mƾͬݐYVlZ*o~[C;#^g8_24$LLO1 &[,d◜B7 ,E!rUu>¼6P̮և k'6`g@aC<> 0bQZP >G,_:9q ^$IJă".՟VyIջP*=GӝX)~Nt~/jvE{%z"7lms>es|DMsh񬊓~ -ȧ7({Z:CN:&J9Þ^lB dь CIIבcx}O$nV[KfIlϫ{+xsa8Ҟe>/Z[L$reE;= hrۗÝI§Y߭!AAXo'@.@, or{Rx#.܍M!kȱY5gkPYSo=ϯ^9qcp;WʶAPPO w 3E@~C}_ c `q#.3\꫻_` :~D;(VwܜxO0N-)9iLwm=C*H]ʧIԝ)u]K- #;\_'u ㉤)elA\%{/ sW8?G03W $2`)gLm12&z9'*l )ÀcG5ͯI[ Q?0J*T8R_`""H~\r%)En% 5gOrU5/wާ_>f|6/'PO7=Xw >/ЇG9,7>@.J)kF=)ju@4G  0/@T@??Q@?{^L-"_9G9s>|9[r\ºi]h7 t@ /.`aeGm~5n[&g'Nq碠XT>n} ޾w`G'gDVԩibA<3y:6<.fB d'i8@58UY9sF(O^/gF2iDrnMH\}(0 P({%[nD1\!$n+i#?8`v"J~"彋W`(څ:W} #Aq% {uhq^G} ϐ-3VlL-RuR@cِUF{IWO0Id%٣ vN|#1NaRv.Ź(gH=E_JbHWXF& Kk]eTo4]̮+){{`F`Ǯ.ڹYnkzN4Oi__~·~9r @IV<&!B-5s"B(~A@ޙ]OB|Pik8A&E;1^5({ؾEX}g.34V{ƷӊXw0>O(ϵomw,9/e57|r&-[ǵgMveøM.kiB[5OlJƻZBV|";~kO _Ն(NQq}ځ =rÎvۑ}Dv}I:ӿ i>HO770d-`~S @>KT / tG S_ J[!_&Y(@ 4 ?S M0'>/o,`]'}tlp<ЌDw 1ӜZ.zdvU!_E8,AV1lv0 VڛtN^5󻶑fsG44wrfq:osTeᘙoMvSUP$Ʈ!eUSPﺆ1(n/I;t?mu|q݋Pd3tԖ_;AgsЕnbyS=>~D28#fN4 b& pҔK~@_WNVY'#V֝Qߣb@rC{^YΞ:9xb׍I 3|=atjBuiҰE4* S3oR3ISN}̣鉿nO͸Gz +s@Ġ?'rly9dqs<>#O) "JXb@~(Dw\OO e@hܙ'{[MݜT!'?>3Q_] a/T޿8&]  /ܑRx&ePy.+81Q{1Pk.%^>vK] G!}&͠ax 1n>&*ngYjt|ܭ˸0b3Zr\mNWjЊqfwv+BTwB}9Z[󪪜 2~$=Ñr# 2Np / `Ɓ!L1y$,~9;p)|9s>|s  X^,@O |E {R <R.=_Nzq:k\&F ֕Xo!ZO;0>esqts3]fYY,pIwB Bp[M -}5C,T||orٱdII/c5:fk~ކJB"T"lGv({")8q=1+E`8iʏ@ )&C8.oDȎ\y-q-Rž\] چOհ?#H}@_ou:Uߠz*Zǔ@9Z9Q_-Kq';_6Δ̶yך(3KlKts૛۽zm L-5-Gr KnJ"6;r!=l8GYgh94@o@ծXDʛ) |8AXhǕeOrj9b79o1  qE/A)_DqR+W"xJ}QZa,}4ǘc5f-E==_b;3Ifv {Olak }쒯u%D_i漪﷡(\7txRU<b3蒩 ˱ZoSN" \(P5t__`UEa~>,_}$usP@| [?* Nfg+Fi _{+ަ]$/(d f _|R6< ,ص`7殺Ca}@g`yk7v uEWUۮ^>RxY,tVdۗ7T1'x%\.wS;L"+RQj;Q©r96, uN?Y*lwb^ݩsT jbҐkҏ~s<[r5#Wg{5t  ~,4 FS/FZOBk%(UΓ#V"{KX\z^@kܬ&7Tp_-TץE_ G&q@[Ɨ5_dW꼤7J/a{J,0Fz(1t%<3|ρߟ?>|9s>|#drK,Hf,t/(sBQ F oJFSZriEBkMd#`f#Yxo`tZ_F*3$#zRg"0o ҙȺ@*5Añc$A Л}tۚONy^JyQĜ}ϫ5|-( gqԇn\1UY;zKs/f (be \ZGͪ|ysXr^=9x>lG{}4*W$Ҵ`營$m G3ZM("h <|[#gHz{'I HA9g3eǾ}d+H*H0?+,|ތkCK(NgW''szt4鐁3-7fўZqlsțf%+ {CA}"Sv>WUU>omTjo7VovNev7Z35|}7D+5gUp*9c Eb(zs%n9_j =+8qZ_-_%g=(3JWliʷIbw x-+E ٩Q3Vs? 8XCa|kG4Ehj7হ>.`\%=l: PCkxo ?>^10577hOS)62= |B5;}`GCScӹJ,gow/]NqZڷNl ݡiwpgmۚΕnO j'sW C95q74djr3B5}+Pr_l/l2>iY7<:ռУ#BU{ 7%>S˛y$eK]rŵ/<ʽQ['}H:JBfħIw:k uZ=Rij݇R_JeIkMrfwT7I{DTJ8ǩd{Ǡo 4b.t[|g3Pnr?i_eF@;u7gβZ1 zFX~pU./fSݩ 7 aV'[1o|dkjk r//,闘֥OXxN$>ڡl؞<^P9Do|s.C*WD|[@|,l"Rp@|9s>|s@vxgay   s( XH7@v~]YX-7{S0e^TE8źvSxVcc"Wd\n3{=z7a&.1XAXˡ+=F,cp![ g6##5txD˥M(|w+ uxH7'Eڒ^LGaB孥 s7@ZVTL그~1vMՏN_GO"!z J7/Ťׇ_:oF%yvGf}g`V4:ng۶p+ :nMqW߉=#ڡ5@_Z_ ?ڭ kjlqf.fesh/K NDZ0d D}S 6UDs7Qo{AFa6seJOyQ>AƟ&[#{Cvs1iI _ 0[E?Z@9_p~Hk/P&('[e2w__O+'C_O_mP@ )(i.J@c Px.@__]5 FTƋ(mG(ˊAr*0_$"VwU/Ɵ66j"GF9Ig՘JcG9+&V^j__,/v?'F{>0}#񰌭̻w nz>ޚ ^\-@a'Te=ey{jGX +J (OI3xD9MAe&T]ֽTɔ}7Ζ? Cb8)/nH}jsrJ|;Tqjs3E=>O '}wnsj.&o}W~C-);ނo,n덛Y19/d]']o0&-hcċ/OoMe\&S9͑wUL`!!ZZIO #K "݁;I'4bJ{tASu%  {f 8@(Sߕ,ESrIOE),H˽N㤷UhV4Oح.`>QJc&<-ΘՂN2`L7i*`|D7rb-FݰͺXehu 佸Sҗ1@a8K}^ rOUC*9&%/#7xҺkCY{rLmcc-󥧫 ^#(d Aρ? d>|9stv, $"& O X /|'@jqk.HHH汔F rD0Wn ('rz*V' C7Vuda<'oMy{3 ]uX홌Wݥ7 4ݭ,ħfSSTM9Y qºyxXX>۪<ƊoNx% &N7׊_ouwz;[+ܸ'0sJLd9 D]?T< fJ€Cޠ(CS(D};_Unܭ>RyR{9`*TKYW\,/cep*A935'Y#޴=9zbGT 7@ E)O$sNw 5|lO!ĉ+BYr d'q"D@IDAT1,"> p6)?B ZWjpςgJzql&"TʝVr>eu} /HϦ =h JԫoF?w6ꋥ)X_vd)~jcٕkdqs(-O Fw+va'޴T9 U-Q %[JXm޴iܰ@\Ð=0/yE< cr\|n|{V@wy4t.F|Hk_ϖ^T` 0\&~]'o!`qz1=~)`=M"fX6n:s #.jX nq_rM,;vm-N7A92R g-(]~elVCVj Oμ`~7)W e9VE~/;4bNd^4zu!Ovf:]f2xL#Ɂ믂/7ydYL =U:_'43i}eB~O@M<JpS餾&NuaA2w)qǨ!v8#wZ$jUKhlsP{xj 5>9z >* yE7rSjWa;>NoB~t&g<$=߼ CI2'NƝ'43Gf}GL{=+) ՛n+̧A)* UnBic xz{9ƒ:B0?|XVc !m|ZF b'MPE'0PWoU|;տƾb{IE k<\>=!_ј$_ \zgc 0(QV?A1K _9s@~9s>|9sʁ0{f OI~~@ &uEЅ[[R|f|&Ӡ$ 9mOqo{{(z9sH_g0.3> 4끬 fHm}?Mпw~=`?%ysފ!'Hԣ*\-.٦¼=/p #U6!ervq(2VOXΓ9+Fe -/\<tD +sJO`Z>\$~zyPSj)\4.~3p -*&A\6S~ T&Ż}xNC1 㗇Bs zwR^tu ՟x_ mc>q}QCz7~:sK',QtJĘ^f~oO> Hms {(5^[gvzcH1Gĉ)ץx >{? 9cY؇3ؓy(./vQFUZEԚ>IvdV{M꽽Dv..7oб{Zy(4Kس)bg2|,NLwd:@/opuxoyXV3zDk F|\N@>PvTg p_[ vr_@{̥br[ _7L(xi>E(Sp+/'%VVm {} '^SP'I0O'@f^W@cNE7G7Q 滟_A_sgN{8yQD]@KQ-V9ìk͹$6j8ƥ{Ye'7h'M6wm=;&P] ҾrdjB{ݴ{H ٶgﴒ?zMV;Eq8<3X h=rVS GݶE8hdݞ[j+wriGF}M$iY-yz~ d|nԧT0|n8Wš2{*]S]JV"@ 0 uB yu{S1$15`o{t,{K's2M3B_ 2u6nQHs}LҵZypJo]4Ms,y/$p AHu7$X7rʴ -e=%bqBB2G%=%g\!7uG/yq;߃/;ly;[o'$dL/6=Ǽy&R y.g9EfHE|rG 卸f7x66*FkI?77RC<)P|r zINܤE (}(%΁}9s>|ƁzI>jgC=$2(2~ʑ*7GGTМD $_Dv9$QuH!…-e"nfABOj.Ʒ4B<ؠozͽڹ|R.hs6c{N0@XK~?*s5k`&93\s񱺞 ?xODӞxBH9ZKr+R ˨.(Px!QPj\ow4jY-{R$)E ҵ<3H TE!.!NviN=QL;=E< xG?CN#M; 7 jū SLj7{~TK6tٝ^|߳kZF?:_QTO 4R\II3_.yMρߐz&W 8UW=Ru){zgr8?#ѱv3CA>IY}v#?X0<wl q8x] Ktgd>w1Jn)p[GyCgvwTY3F_ׁEFa (8Bm#ΫԚkW@Y۲wWU!pߖ(qV&]aF7)^KO4F !"R<># ~߯ϿfĿ:RV_ G^0 0)"y^3N|Xkdx[@f RǺO-~ZភbǴu,lKE >$QU|G;js2vs!׺e`~{s)Si]s4^ј uk؞&5Xiwlx"4Gz==ow?<Ȍd#;e|2 z+|@zo#ُO} OkhƋ )9à@Ɂ֩J0WsRĐ۫ 5fj1HQ|9rk9u-@B"Tэuu.*' (CPzTiҮ%ZT$*P8;R{{N:_Ͻ_σ(;\huu@XMC7;>X!'Xh7^t0I 5`.V49?BWY$sҼA3o f-ǘW!,00u|ҾJ#r- ; rqZA 7d"=| ƸHCyuOA×:u:5ӭ v0gIbHE,!Z)ZK5I}}7ԕ: VmÝ1Xq8o#TT=ƫGQ;?.,?TH8ՏC}ÉOE}(ן{~poW\=s>BE-M1}ɧ>~3)1ҾjBjZ;} [9ɶ#wt8vp8}z=Mx8ZF:CLZ ;+>-yB jϰEoO; +}5НBwrVa6>{  ۳u#V-.͚FP4}>quYs:@YIa6)) |c( HMV笭Wym:G6NܼD=zڭ+f GA݃26?0~& +; (l[)@kMTk_ w x?rOrK _r_c'QVA{Ƕh/G0+YyE_h~OeǖXFU>H̴Pdٳ~iQt_V̷?U4()ܡ]ޕzz}rMc_r~JwF|Fn3ggmaIVY[gwBYM~%O*FJ(mSYAEQOk+QO @o=z~RQ(48 _$j;ϫZ|r}zThn)XNڋAC1'XyN@=޷4M4M]IȁxjF\r0QZjT1[&9 b Cg=|ɕq/^yp|q;cj/e8Fx:J{P9J"zRѮaBcq rީ#N߂b2f$&뫼:o ?wg峹SO2q7G0/p9GI>z9:0sn}3K]priJՍXkN՟п3ڋoB/x}e-[w0߹zSNU3==-Qayw M( j[@zSW)}{]?V>|9s>@(qy m`oK,h dv`JoC{O)S3"xI|hޡ7M dO9#()=* h_e,mLf}A'@4{sf]O,,EЁp1D̨)*̳Xߝ. #Ȍ~,WFۯe_YޟAb}C ™wxZ¨GY%Y1>{gq}[XWO:Վ,csjoclGo -o̪K7Q,7?;۶of O 0Fc|;c_V q?eϕ#0XuE{6VԎ51 X! G^N/EE9鰋}|$-0!@@~@={qyQMw KRGr%}|/vy&}rŁi~oM0kBNy\[K(P-0ݍ UQ=%Z@{@͡=OPμj6ݸkS )C6Uy6y_ƾ#3n X|;!.+~H tv?K=A^5:'b0%S]ˬFdž;QOEΐ E:[9;ovCs,춄]"wi|i^dLh7ІgSY[y;.iDc<_9 ʁ{lXy#3Rt3Rye_ ԇ{f^wYGSV3 }|oe1X\aIlC}u?MM,&ǣAUbwCu  4 Z8J z;xP3O5Bc9/oB3W J/fJEO@U0*XUӋoR{R1u xsR4'JM!=SwOr&INI/s~s(ꬠ/F'Z3q;Fϳ/ >S(t{x-9rpBj1%w15  AHLtAtEUAr-Av]mm R?̞ij6ܟ7'p8M-vsw^jO6$ujA{[ g-?PC}(_r%]pvNgϑ;&IԒnM\L`cA۝b` ƃ͍lJhϤX6\WÂWģ]̓C/S0 (ǓG 5g 0h- ~\ǧ]y߄x+5ߟω>|9s>yb_:X!`a4EraO+,ȷ-6﫷 v%1\[^*FaN-˝,}Nz(y>}W?ҊҾ2i_Sd5b_.O]DыoZT8+gZ%EmbtU_TƑO9(Rb*n^xѮ8Ce^&#>3vZ"aaPprFDE2(Pl^qk3:30Ǒ7>^ikƒs[{KW\]+zVP3=ޭ( ˊ$ U'Hg3SB{U UJ7St0>G O.\eESsrvsL@zx)ҏu[ Go)MyK)PtQ_ kԣOzJ308->&@ \̼qM:;T LTJWN^z/K+;{<;hǑzʢ!̣l6ү4_ّ.nʺ%(^V= 汱o^NvGi[.Là߁VK-8Ǔ߉!M+z= !Ӹfhh06kڭ]\wܧ'~ǡ_H;4.W9ǢLs9J[!po?e!mwˤ~b̌m}.w2/ɫ|GQn:(yFmegY:F$b&kmpJ Bl:h%4t9\hBO_V^Q}$wn.EH"7e&49z|R!?CKASLe#2=J둀@rے{|3!} ^󎦇 ;!=SO4Hpv% b'fAkЊQ.^Dh"] 4|ɣ 0ju,JKv©#"Fʽ6ia΃uJ(!~-ٍ3I=b ~ʘd|~eeX}T+OdN ll1: zTXtܸR Ux^blCX_|u(YՙW'3Q}F/ܝi٭(F7 wWQx#h}2/:l[h.{ M3#)W1M̯~ s1E;%#[> R]A=޹>>|9s>|Y9:+7̃& řK20^<-ol#/{ <߭h]њ} ŦĦ 7lW(&~-n}w⍜TDՉqYPTֽ0X{h1,ia>‚|^ 6R='@u(TSװX&s f٭MkPVP~  (hRYVK\Vִ~C`Ȭ~*4tcm);)\9u*,.M7<50~ NßiNb| $ $RM׃?w i*!M}W!> 9 GHHf y8Yw0*j$#EG⃍:[~>gn#gDoqNc\I{¤fvM%kZm̑sK+ xҳl^ZBWe:bL7dY";{!ƭwf<>>k؍E}yzTg*ϫVm?g[Ӫ8|ƆUomuDbέzqccn+z䝪.Z\3Aǿb~l& )׸9P0^* }]ԑw(P~sq~Nc3@wr;yIgÈ)#d(zr 9x[ޢ"0;[砀ynDj N~_Sw(iʗ'6|B{hc?Ywb\[\鼘}b;]hCRei?G̎UȎ~-y]ӦA\u3\辌!KE[E!w!~Ϛ Ӭ8fk=wGeOЎ+i̛㡐R[%FwEsrکQN|_s\Gsus=E'_}5U-'k}A8FmݖV(SԻm0eo6fXO;!?ϸ!e{cO:Rw$ sڃJ$8_sx:YZ2Vql!k`UBl/~ŗIB[C Pc/<,RxSqB{&Y7 QEp?xGTRy/܀-sFmh#ByHhV=d_Z  zZW'=(%~/YgufxU9)}e]nBkЪ }E$4H\n:z4<*o 'rC3Vٗ5!kpOK}q W=Fߡ2Y[?sQOoW,>rԇ>ǝ{M_og!hIyC )}0h+v5.D@m/<,9^81qTwzCP3l9 h.>vL@zOm#aO_|ρ?o>|9sx@y9~~ / Y{kXۤmCpC'#.PXgm"ٽYGKN)9ELk6_ B5Fqd%xѳq;zm![!}z :kH,ZQ&`t"4RS )ۍ2@W@"w^5YX{v1 Q\R@(HdoDda kk:"t:*1 k!]3U].;.ϻpI3 PMO@$Q iIH+k3!]tiJ8ޙ68GQycn" qq': zץN82Q~1 &·^5 pl8޴Q`$T/sY/NG]0 no~[D o!`.;>c;Jݲӯ΃95 =ϻ%Pڠap;eۚ+TU*+*1V1mWv &n#md/Þ_{?R_K`qcZ! ]0\-@PVkw (dч x/ (-!~`wSkоN@ h+\ 01󵜧bZ{/ \Zmq{KwdGSP1o;1g\*7ON[^|df% ]ūG;,9Z7C6yOZwm{~Kϭo~b9y4_RHy3L y!>~[,9 +/G]=Os^hE&| z홽_ ߏTޒ>7I[QH7 K=@}HӞ0[V\z+S챪pFsP(,G^7#=}qP"`7%~<8q7lf{Pcf\EeK Ҩʎq +Ը@_.Լ]c3[!ԽaHpz, p0;^= P]3 Nj %N䥥~弚:Mn3fGOE4y[*p,Bh`6/ÅF'="|2u:- {i!N\?#P.4`cZ!!&v}Y5B%*JdʑxJW/oVҍOJfmcXׇɪeO䴩J`#κm#N35@u^?rnf{.?GPν#͞?-]D>'~ 6_8=h?'ϩuEB<徲7/`sWw_j_IiOz'Rݐoمyy9҄꡼P%PR7 wW :!x H>Os§ys>|9sʁ Q;%ԅ<@__{ ڕc!}{^BGbJAJ9  EQ?:9nI_ {W_s2Qz xvSCp!Sr! |uȎtnG_l$.s^IAp\u9|n,=?sի6K >NuK>^#r}dx&_zF _֛ O៥KJqOqb@I'P\ '%?c8VRbB$t1e s@WG #gǫ;@?gNW+/tK`#`.?gv>;B/$1.)<+q}1Td!xLҽy܅gƮqB%n=d!n~]s33qS3!@,oDqexpҙ >;%g~_aLєHԭQƭ̪"[΁L(( $'A$ ( H%H($$ n:wSzgg~3ή9֮ZUVժ,q ɷ7ׇ`Vnf ^dC/#'Acx4 @Gy:`C@60.Lb|1|n@c |x-- 4p4 ڠs0|xPz'ܴՒ ~ )?j̧X?VP[ ur`]AB\8u(%CNDY/&2RA%B{}1S˷N=6oaZ z-<|v2VFry|g e&8F~aQy/І&1ⅾI  N?~lf7 L0CDåLfoUEwMY:odԠ/yt%*جFimK1ibGpCcȍ~ȮyE)ZU%3 Ç ZHnHhas%̓J*NL/k(sr>7ʙ誉'뇐N۬F%;LTD[0cfƙ4x xWyWx?bQߒ{h)?0KAN.c'p_ʿb29p8p8p8E.UE094Sw75sHŷ*u@Lc uA A v vEtN vc¦h@7#@N?NC0>z[˴[s R.,]Jsu7fI0]|D`CU_hY~U>!\.<J+`*ޥrȞHQQFa'ܱkU0|ݹ]s#d03;l1L,|y 6wM:I Zi<BfvSH(ⵈ7k%xV"_-JDE39m!6Jvh(wԏ)X m(6GёnyGa8Nn<,a箂΃~, 4M,/d(h{D3§k9 z-떽EWq xT (}J9oLm) 4轲@ޚVڦ- 6mjoAWm)WS_ԫ3n/Ab=qK@Qn@B6~S6G·ZµvۜyL@XA@M#N#`ږD@v"1O~E?|?׏~־06.Wͺx c@^\M#6UՑnU~ ;k9 em!^}6ggn 3,7m{I޸180Yg-}wNq]@{VV.Rz2A^l%|C hql#]VD]h/V(=*hCZT_ueeʅu!zR[N_j]"2f;77?r qhmy1:wsЍE{0rz4eAԚ0OOAA"`5(kM|akXţa 3wH`5E{) k2v$Ű_b'%@a2?POQX_\8E<Ư>pp >e/m_ @K]K@J@C@ؐsXBZBCKSpјaI7\8+FP٫c_w J:ޭd͔?Z"/ m ?ǫn lH8ժ J+rUEsYj:^RC=::y)M"} rWNQuސ!O+lͮ04 Ɗ,Ϗ=?$BE ȎW8𗫨"+a\`wNAI W5 _A>0E_E{=W'B`VWQ[NcB:Me.ΓkR\_TpavѦABۡiu`YQ џhَ(_d_AM%ܑ t;jrIv\7Hп' l$FP |"q {Ǧv;gb(MqcMTҲ4@`,E*ќBDEE:Q' /z<'?@T1$DW9Ȧ$$œ -).oH.q"IطX?y *u䂻)$YWApu`Qaw3&wp 4?S[*| '#_qeYn~z_T )=&q uI;u (*l_dgHcnB~@:ˑz oEȏ{)N(߱yHh¶y2jE %p68~+63"aИ\p~6Xq?O^.ח!#CquFCU֟Alq:yKuqhNn%&ҹ~ jܽT(Nb+ۥt J* G.x'g[U=pr-??#bƓn3Z7/0yL0_}?%vz(wy5@3`|DCBo'!GA8^e q9 I;Q `J@P߭$wx* 9}I@ڠP6kwpc+/2L?E/x ")OR,>ƨZ tԛuSNo< ~-<9x>qɐCXOϠ4G:i>in++M1 okInu \@'XaDg$>Y!f3ljfH1Xa+jq)$7Jˡ +n;%{t.Hܘ0E~EP'}f,#K`~ ʹ9Жy1-}곾'U?>SF9:J: E2;(|z"nu mhbAA ;Q8 88(<6)R'&$' Hr.TߛxSE]|QVXC`AY}͝P? ͺ?T/ƁK廑ѨފV̑_p_H" řgK]~(O?xvc]jIRƇ\P:I?˷ڄB=@)]c2`C`H ) (bEOlM+}"0V=ZT pR wS 0t'པ"m? 7r@Kۀ\ =a yG 0$྅_~yk4rg>B> TE'EW G5kQ3m|+`4 YSʕN\e"f|o{UVL] p@D fu@}K11/4Ð=sːEffon*pܮ`8rh##Gߋs4Hx{@y7[x6XM(smC+{:$F<Ƞ=:/'0ɇ xA'B ̡ u##E_jeE 7>R"ήI_1S)KpuPNNc}l0i &JJ>e`;=nX"Zh짍gttz\Qs .; Y%jZ&[_DW[ Dc[v9C+Lo|ƛW5.O2'kIqz" aK_֯y cDeCTo/UFlua݌!DX}jEr"l'=SRl>S[N4`/s1g~R*'wψ2C9Ȼ{N6u͉c#/R~D+U:z.ӛSqpKJW? _ІpHs-XKʼnK]`Je ƘAnOkc엎W3Bx>N.jW?eB^[Km+(g&/*"`ׁ "V:Dsl;OlLpߋNz_Ni8p8p}KpCi+* P00j! G y.: ]]@2d(~'5KbgPC͂"ė ܙy/PL޾r2<Z$;w] ҧ/ hnx>R0o^$%K9ʋ%|#>CD'"+FRH\WcnF=wB)m,uD7z$]tA.+=)@w ~=]]ގϿl]ov.3O@!`! TbPP@i+\P0G@'؜pÁ?#N9:iH )2(ϼ-d+rU4Gd됯YV8N4}$7!~GRiPHŸT6kÇ~00ς=jo c6r{%j k|P\K0ʳ'Ηkø¸rgIGz(v Praűv8n?߬A Es3׺ 8m+ #Oa@~p1 ÅpE!+a 8}KO@w>zE% tW/:@!Ȑ0hI+5WE@Gu  70L#?A@By6v]p ؚʂ[W`6,^yj mQ";#o?ΓH^H0/oKWpFC42ʕcmSF$Tx ү5@z/|[w 536צfuV]ƯXeer߂y\YL\9I9͵%QoC؊  ۨ'㖶_z@_5{tE(agl%F 1G(شtC>!'#7Jhc|lF*CI!}c1-3a0[HGr%> ޡjqPSəLj%uv(J : gژ^"kr&|F`FZE4p 5>Rψ[x"QqI!*aI *-ω !]ؿ!vю'1hDq@ƀ&kQ`p{T7(v7Q& SnXg~EpGuaGTQbQsQeZD/DGG#&iZ=leO' JZzZ{oˊGW(xLǵ_T9Gސ[3=hHWHLЧqG J# t};l=Q CK?P]}qOdez,76H}WxȎ'(g5:+{AOTr%>r;4eh=ʛCUq@'~㯾 .o)8p8pÁ\/J$Nׅ:DP> KeN,1HQE\$h;#\nIZt9!f8Á?5\F'D$)2:GHܗvJC9RX Lĉ, sO2,&IjC[jPdg^Dø2[_l= ȉ+ǃH?y@}5ʵ8puP}z yُ xaD3`R?0y0& .u;K Y#}!)3hJ^?r:'s~[m~?#{LzyӚP~w5;/N92c ,ў06f<tC@-A'q7149fYQ1C妐y><}΂+:&r\ xtt G^Pnu3lme( s.{oZ;_Rr8tץ){ƸIr$qB~K#il y-i(gcWњ~&N!opzo+vײ=7$ >GxA)f= Z.=y6ij<}#yDIJSy=7SNO6?aWQBe-Q_5 =SJs20}dttXQ[qnKw !JڈMO j$66&NThp- Яqc䓨w ;GeR-. Uj{m1c}̜'(,64~}Tʽf@OkX{;7?`J@c 8PyQupE@Zc@FpŸʟ>Nu8p8p89P_"oBQVdfp\I]]X _['*V ʡ +7d,%1-5  >-ڊXG++BAĬW)H7*ORp3z6F}ÌYQ́{j*?D ZV!bTD[e"b5X="5DT? %"3շ_ln{&ʔ9;[ѡ HwiWKߏsVr ytuȐN SSR?NO[lG|ʱ vkq-Ma0W 8pA(V8 KC zShzB'=)B!qY}#3ΟiIvIۖۀ6Pkf^AWn1V/BI J`o t[}Wca>I2)j-B1N ?jw0d9dzmn7|EXFk <瘱*Ål|x'(] :'cƺvb6!~rjG rC̗A%&7GGnjXίzxJjmX.դjI$|9V1`GB:{}JKq YWU^ 65okP:5>] N"w >aĎpv$9Qve8Q^_CB|U H-*=o]K͏`>5d=TJ̏[︮Љ3eOӕ(ĊJ>st re$UJH/F:-=LL!QT .+s%μlh(eϖ8 JLr ѱyJGVN?1燷cv2=6dI3 WBeB_U x\G:0́fboE\ 8(,iS hꄞq'4Q ?JfVK*9R8Gɵ&foV+mR )Xn|OyKj" RLU%׹RcGzq%v(pz>8p"7Q\w z/` Q-$i ]%WYG3kZ_f?eg# |6-.°r6-GoBno,>!Fςt/3 Pdw#@2V0(@">{ȻeηGr@ d /0/yTyD$=d)dʮɐ݁I``ze'|ٮjt!a^,ƀf6q(2;ݠQEG+񨟣(`ӧDe9Oٰ+[m9BUqAy-]I$}'\ΑxP]wН^*Ou bb'~&!g*F%U}{x*K@gu:;U(MJ'nGYiZ7QP0o;F<|-&1¯RNp8D8p8p8YBa/<7X8 !!0W)jJx")RԌ_g&gkka0in"euCta~E4}" A5 cnyP@^&EZ֕!E@0ݳFu*l8/wn3 WѸA HOt\DXy: d.22vuOا[=B3Y00]O-&*SQYW~ɴ|/]C=\IPb_r#,]|T(gkg|6?H>G־ %6!P(n_ߦ/8u8p?P*ebX#C !gY lo/Te9prf#@GT60E񫅛sPVLkHwfd} -6)}ո't'ZXҤ mg<K/A!Qr0ٚc: Kg;?꽜Phh38h&0i+ |Q۠~>N{ s+Y{|p?';v'6 r? _dM|{W`&q"f}OUj I~C]Y!k"&Ax'|Kl(τZSeoCW˘*|Zd>An$:|oUs¹; wԾoʹUnaf1tRWIw="G9Ԉ4 XO8*enf%&.-~@}`x/~3Zz1ʅy@ eX:âmo=yfxOy&}֕3-?"IюΉhw^ hf1#ZL#Ў'Zh_sLcFj!f _&*`~k&}FKUaBXb_!@)izQ'>975Yhqզ ˬXq]oϭ=:H(\wixa쁭D`>|cIzk+SQY􊠻v} O_ 2W2[z9Ȟ@Ρ 6\$_/CؘM@=?%$mlwÁ?3?s场9p8p8p8Ɂ+48 n8m%m #x^D]Š(Q.CaY`#?NDKK`An0v@QŸχBG}0rױΟ04R <(WZ K w̕  R^~cޑ[rgG+ldT- V r.?U5|dQ) jA46~V}_?R9r@1y9`Pj+PXVnt[=EwqIpߋq.`G1Td+Scx9``ԴGB*`a\ȷağ06PoM Ð{E>EimLLwiIb3?29Oøz(^q D;arZZ0EK0>_| Ij_#Ob#`.XquAB[u.ƋW|91ތ$(ís0 έY[wB0D\ұ@G进 />!Ĕդg.|vWGn2pbt ϱ͎6 G7L3"@_NyA6[zE;LÁHJȅ菽p1݆9U~>~Kf0/M#{$N\tk@[2Fs C3|f a &N123J/>sOԒb~wA9CSyjł\/sȀ5Lݭ|hFwՊ8꯴QOϒ*f#t6n$v䨨G?Sx:1eo, '=pa{0"!UL;{V%8#\T 3Hvgkw|S/-0N[oi9C/mP!@ͮQ7oDkZAds}%EL7]DcoDyd6 0>EQ+DMDl5)֒CMZ2e.Ll(` 'u,lH@?@a~-!.%E@HAꃳb@?Cu0?b]#$~`ь&&+iyJ/~~_(-@'07+7oU/vf6iϊ ˔iJ%F* `{oy(mwMȫyxJ ޒIxcoA>.tzFB:1#9:]ʾBZ<r}޵D!,NKXML.ZI-wYk;7Fs|x1=IZZm`#tr-|Ujr(B)% 5]"[s$xkBC%XÊF} uqR%WYU }j=Cm[}_&џ6vUTP /f⊉a+μIT)}FTz<\.4 9tb4Zxi`MP7x(P҆Iv>ȩ1|1vK"݉$OڴyN01OZi"wG*8{ZToiֿ)+ϛNwbYcGDRgԒ;4+ -Gi?2wֻ}6rn|uŜ&eL}^_m{^9y)Ξg%Aom4#Mȵ=d7ȍ [EWL@{YO eG@=b y VR0>=@@m.DOyZaȩ8p8p?QSV8/=on,b'{{  Bq _OAAaZ;~"R$N_~U8'CzB!6PX&&'bSI!W ǻl hd^D_:PWHbx<8PdH啛>J}Ca |a!ݗVxqR< ծo TrIm`G%UZŢ]~bg UyȮѺF P퉵W5-1.(zy4c6INO]owe9c&_@.Lp%<7q$SZ u9jtO/v0Ioa@ ;E^C]q9X\V"0VO`יx g!|' l?QoE;V(Gϭ&`~7Z~}d п.ra=Wa FXCDyE!Oz}+6<Y'CZD~3%+^^' $__tuRmG|0(>U 񯱍 _y4#_fʬV),19o[O&s\_8U OK y?BN{9@![!IaC-"[NqXS`0xɎ[ѲXt^jbdBdf2H *b+Zߐ s+?̊j^ݽr`I $EAQb@,30YDQ@EQP0SW=={^^ӽ{P]ֿjRĩ0X]iykmtMxZlqBKUF/ߨ/~u:=oqTqfo$}lB^\hn )6G@FK~.k&v:ʱ{;bC%m8w40?Oِ9܈"W6Y܂в!Cs x/jO p#wf#Gpl%hĤSvV=;/HUՉ,׵y G(vʥd<{/^ |9s>|H>&=r"*y*9} 0kl X;!w6%J&L+P{IvĖj284%񭳘r_*aLnc{1HVؐͻ5[>4Iw0}ٓK';XRhZ}dVZw y[>qvwY{m(z9 qvm d.&[ hj4aO6?LS1!ALd`gooԩ{][N=O i{@m 5~sρ.:(z>b@{B"U 6Tb/JD䕆yi9Mw?B=.Qrv5S'Fu>d%/7&4Mcxqgח|Sr=rQхf7pײR,ȣ:@q 8CnO]ΫRlh=+7_٢*nU 77{,t:r>;aNXI a#/hoўwMwLxB"8qmj+ѧAPB]XbJ 1BU @G#].Db|(Jc>T<~z!Bl!ϫxo' x!"!^0lp"Láнj[:]K[=Rs1r$R@ĉ j#w[+0[ya;m3iߩ}u~A rqB%`yr } ͭ*n 2>GZ:3 ^O&Bgx*2;d+g⿩1'=1=:GC=;$c;.w܉PP گfS_0S#/ǝǬco -3exqW{Iߡq,Q+y&C\Ufۦ#Ifs?t6sy{ia䝬tϠbܙ⬕a2伤3S7Rs=Npqid{.cv.N*U//q CZX';z)(@Y!e4Hq]x%9ݑ[;e z}oNuNd_e] %7$?'}X]M} ?io 6ļ3goGı0q@>hU`2Y 橡{RSlh"D5X<>G{VeE,*.[T38lW/jmқoEO)t$ksZg w_(q3l&<'(K1qpB@;47ɸ\C{BDDZ%D}  ю7|@>7rG@|9sei"zS)gz1f@`k8Z,o²d߁ch_y &OHлzl5Znq&.У.Ty5-} Si m(I*їTղ`$7!+Tk`# Fʹ\Y9$U)'o,vFWfZsU}xac@ze2Y18)<+^cqIH]g/Ѓk3!cƴ1H`E8 @yx}5 'pK.`~§sρ"E~M1F䌁 Y%08&ifXjE|ݓ?߱NPR}[G,ͱtof/V0cMĦ ڨ~yi^vۓ%ד7wTѣpp&fO6H()ӭSץiϧ#[*.҆oA2zIBwG>Wta!oڽ6{pػ`}b5WǓ^?0.V%ZsI`6ȍZD~;t7 P/B`kT*&€YB82RSB]!nuBWNWc>}?gww ^?,c! U !a'xr$! ㄨJ '8QVTm3Ƚ|=݃!nYyPqmsא3ڗ\71}C3$Ws]wOm}YQMC'f|J>$Z2|9\5.iw8lm*dV!G8Fߍy˙D/!?0#\ ll B8@b(=^xblrofwzWxRٕyQ7i9h."Da~%qR-Vxn'n׺uZ>2_k4P8zǥ8Ap^a34eE-Քs1O >]u78C&1GiϣenrbK$˧c%˼JD$w[Es^v7z]! Oj-HA5ˍr>F} ii1o ix~:UNB[Cet%,{|U"蝌խA[/2i/irZxU)Ӑ3[9NSï)F槆N\c8Q`lu֪}swWrFG$nqh$uhO<7l$@m7Z`R߱B7MBG8?IvOEO!ʋz$wQ_9oǁ]9s>|9q^=BOڗ+GD 2 fͪuiP W+_jW.&?&1kGƏy"K؂'X]9Yv[Vp-h>mKq&f4㺬B#=/H:d_a0{ts$/CRMe#.#p'γw]d?qOL<nh}NN/jj~ `V j34mR ] pG5PFg<1(+ZjXgNv<]:i,Lryݢupgs D#HF-/rߓ!O&dngnN'_#|LL Caֻ#vYWGSlĵJǞ 1rUug@FCBWO.<.z'kNډnP1 Xk?`{Z7!S⿢"a .jrV9r/M]Z?F4-a%8m!l'hC{p$DyI ve|)Uꤪ&cbyUYmf`eB_͊QCw \B߻Y!0!\!߿'AyW!~ eSSÙDTv+6$89LYo!OͷqoO"{Fzyncbr*X)^^H8<$Gi`QN}ګԿ~LBGj8ȥ)O/sHa{{+Vu|ZsKxgլ߇5`77E');KJOu؉eOf sɎ"zOo=>w?fnכM}5u)wu=q\{R3R=ro<,ǜO# L&nh˪H*zQ)gu8*_Yr9ʝ/ũg{wȕȉO*%Σ=(BizP i(z !ÄB\T\#D=?|U9οj~9s>|9/8>0'Y xL 8ѠF_ %CzG =k3zcF˥eFD$ts)&'}=CAa{k%tt VG5$+0/5\y-t6`Gzk;8xOq5qv7 8K#0GG /%4k79^rZUi9s@NqJRz֌㹡y䗄cނo4nhGxȊ*j;Z{ ]{uLS_/9>| :2N bZAzF?J;KH"듵+9=Ew+gl_`MqOBJ(1۽KJa%X=yA)aC)ޤ5#+0̸^ӱٌ#Oz7mtő"?$D s_"@}R ;=R{Bɛx? !.=O}2aXMGc 9 `NJef=i=emF}unij^Y*~x9OK>fqOo8q>ER`H|+cocԕiȕs)c@\zބ-v0 <ȿ3k 62Jg/H\&e{j*BvgJh^oSȱA]Gk!UCݷߋąf.b0>O?wU~snrt}/3+lFw#e3`(ו"}+'F i댇EZIP/5g\WbUA& 􂹅K͵9/Lc^5t%/gl:[xl/$7-Z=|Ԇ;ğ`h5oR[ /MG@Vm\Uz$ICZm5CUwϔ-}E믟%RjRWf`thk|-ZFO;0Gl^ t*p"x0wmqb:('msKKcDďľkl=\5x%2Lȡ]O|H}SOe;h1mix7J1yyUy9ZZZZJ[9kNkG (7!T!;#*+r Wg>|9s>-,b}KV@OQHL'gn܂u11&vtIt Uc:J.͖XPaLܣo>} ќ#+yRhHᣅo'w!GDSi`"DQM\XS]Zت vhp mZK=slʊKOmʋI͉>=ɷ݅ZGNrl^(uI;9~&&~9#qC FyyWՕo{&y_"`s=ȽysɉȽ58 _-``࿠y_qV@9ށ&o%U S?9kc3Um2h ۮYݪ,C:͊ic)#U"hp'WSYIsZ). cMnc\h#7ԦҮXUR(;Yy !Y|\vΓ'\ ǭ_W 3X+ON oA@X1wi$D")+D !; 1n.D Q7I"W*7?}/pޠDQ)vPB F%2f{}5<oVN$f'j7@Q%a55yu CmtAI7p.rnbFo\_pMh|j8*5gD @BG.IJ\ߨa} Vi>"Bn~Fg#gcl?KazM;BGD^{ATݭ}NPq0s /"@:\STS ;ÂHqΔ{eP(q|Sp(ܕ`['n?Wi|iȷ-{2.&G+|jVbXV1ps]-!fz܋sg6'Iw7Qo_yiŔDw\v|_ݓy2[tgv`WS|+QY0`̓<0g';G}LzGO'<[%QwǩZ֭qړ_'iq:.J+| L 2.z8(>¸~=q\׷AI ~|Fq6ρA68C;7G9lrdXm ;C5zs>qܨ${IœF.lq-e]Jٶrg;^?~,6-*:̤ƵشϽʙf .>~WBWПHJ(~ w?g (-Dr~dT|2_${>|9sρ?S+Ij/+E'zx %$ᄜ90,ΫВVr NYaqAq8ؿG((ΙLgs<)V=.@Ibxq''z|<Ҿ(UYC\K Pjpߧ,#z"CjǸ"YZrn- ᮚEm??Gj-/|`K/Oɑ~+ Uj\?x1ni#o1n}J8HY `=VC!LvB- %D95B3#l!D=ۅ8{R=]>|?ˁ@rBx:Aȋ F?<B ,z96Rbu[,x<_ ߜvηV)Fp4ACT#"t&7bP{s:zٍ }FWEȫ<\D.^b›{>۷&1kQEW;F9k:8W+N=8xfz{ڳYCCKFpg5I= :g'p%D;jSbm>Vz+iv8TEC}:ZgN7lٷd{}M?#z`> ݏrx w^! } K2ݸ1J|& Lp+K$eQg?K+C͠{w  x0NH[u!f/!Y!ʿ#M0?+q WW>|9s>$:[1cײl h*I NbSoਘWVZVua%Xcv yBMސ㻬{de$/UEߓm=p0v90(l ;0;2@;N2"i|m{%n`:|콨Z&j/3 mH`Tm @ )'SdeElPSܚ \(||XC*{~dodePFN%Ӝm\BW~QhbڍM礻Qh#,(@)]5Vs< .{WbW#\ (P]EA ?9u05k],8x^ PB#Ƕvv4z usoΒVdJ !ycgWWXbՊ6l=VC?"[͐w3ߥ 5 F>F?; Fu*=w2iөiv!kShw#Jk΋70~,2G1`\8[6)-#fC!5!Y YB5B7 ׄ(>!_Y|B ,1z$wWկR?9#h0(=MWk!br%ı ['Y}cvԉ"%O@~ vV>T90~fܟ;$OVkO'{wpݼVgrJo!Y^[^} JAl2!v` MJp{=ֽ ]ԛ eafɗ!T;r͆0Q.wÂ6_+ypPB0$Oʽq2kEF 5QWVk_rQKuy f3rz;BYDf9|)VzQL1iw>`.ⴜڝoE [sk3RH/! 7=LVUps/.s='ٱunĥJnkr'V1bGXc޻5}fdCSȞjOmKvC|zFC% :^SZ觐 wZʬ0N>({Lq]ړ<5޽1]4W-佴_84RL$uwѮlUqTe&gcX?oǬ'+dp`j>Z 6COHBbOkXy!%B6BB8"!&!BzG׏#O3 :s>|9sρ2WDȔZ uy:{'u Fi5i5L7k8u} rcP-(fx$ʄik'+(797 MvP{r-VFB4g ~Ssd}O, ݫ}Kj'C (de?PO}0C(,# Y#U)څnnhsv4h$+@r^$޷*.7'[H3Vkvzz%&[5.[5}x`48Vk[J%5C}r d% Ixr$Ħ\%}PkE"ǁU5+%ؓV_SBrpW+Ng]Zߴ4qѺl՚&'3$t=պ5T*yc9>ڲA>WZӭo'ȯ%SJzQ^jG'V"_|Ǟ[V] Ygi'aP:a5ӫj~r" Қp8uZađy9t/|9s>|rMĩ}r+2 d-= [/qWMNM.XVo[fp2:\frsQ=Z%Пy9yQF( c@PO1hWaG R"zwc3gI $"GM#>Rw#uC.2:'R%'DkW)Ӗ. daM3°ٝ;mı ltMmg 1M#iuK:~I}usp PNw%Prd}L_6? P]`+FDI|Ɓ7 ik؝+S6(1h'h}X-ָMW">N\ sO.oWf y9\/q|x<ϯ~ء\GO~S~+ÍUA!!S=2|^ӠjV6Bޥ٘/)\M? 9j}g"6$skjgmj)҃7+Q$_BXoo8{h7G*i%Z1PiBJpd%[="Yrb| Q)uG9~ρW9Sw}z!BFPK|!]_t8Cəc*FNbm!xb=Bo}Eos"vy~W&r)}&)U$+yvaU٤uѓݬfyON9mPW󄂆qc8l^yJr6Sg|Rtg#HF{kPRhIxH2L4ˈ]S]"vyxY1~tnp&wmu:jL!ܟn'3/^Q=n|: OVpk> y9Rübew65Nc<|y6lxS"%G{;$q{83%d=FrϑXkqF -Sz'qTkMV/S5&^|Qub@IDAT V#u?n=W渲,Oo'5Xh_Y)$Ms=&ӈY=:Rn wVzihs<ݱJ}=L#kwƟ[rwN4wЋ37sk,dO-6Bp5j~!Ds/XyX/D~9s_r@ĵ|9s>|9??#XdB)5Cs|fDzEzZ0 VVDˌF;`lh :yzN} U=K{xtjd冽>Jb8mqS Lk4|S8MV0c,BeƹNGyolTb ovq7uiBfw}[ `Y˳ Lt˺ϴЎյ6r{, Y# N 777W;zb0<=P$q/g-;s Ů£E Hޅe 6!7! !G 1=*İ _*Kp?!?9WTVgB6C/">z=s\" ;"j|tD\о:F/10ZYB B+S~;{蓱剨 uMڅ.ƄN,^zsjN9ڛ4erHE!w-*-HBW}Ans }\*9ҹ='`\H}i.JYX#=?C,z\{ R\ M(G4 VFДk[\̻"Li \N 8z^p/R;=\ьYMW~IƐnYn h'>, (ܰm@9!w8bϚ?Ids~I33?O{ҘsY2;?D:9\cbvs:'PDP ZX>U`/y1~/!xp=w7"!N˶e ciNgHԯC)vf38CyWݵÜlg6dCO_ֺyv9>7BP^e-?frAI.˘xDHOrI]hMX\kDekwoswn}mnwůHZv.%J}=l ||.`Y@*iy~9s>|9sR@5z@Ci&3Oo:POeF_>=U@3~j"IM?K0DL*$^eO ڡS5Q]MDr4 ,}05TڡVG* W\yP ɴv@T*T8P> /ݷW%p~0]B6mVecWJxrU)wWna빂I*Uf5m_caFoڕYVTȞMeڛ4'N95~myH}${{w G 6TN%V=lJ@ r^H$a|9 :x]T#կpb&Wg՜IsXGZ[4ϖ!Z@2{K|#:@fvC&`X߽ko*۷cWu ގ.vB|^ˌw>'輱c~R:bquJMm3ܝ{f9oVToNqlM{JgB{ -Es ..-4^v|lV?Ӹ/YvIHs՝Z/8\,A!<%D\W!?_ qoAʗQ%>8B#aa!B_%jJ>p.)P_\dT :?DO,+K&skU'5 B86Y~Yb䉞薜X3G'ʫDOڥia|z'Ǭ+slٺe5qje# kJLdtUڹf8:+đL;7 ]Y N<1/ZM弶)qGћ;pz쑘?qw R>ı2<JL_șܥ2Gp[ m"qc9@[$%[lM6EYٮ]Vkגe9ޒG>=O}5txbN۫ŵQ;92:4 u;+Mpw}{kU㩦} FNσ$WqX%IV0ǖwxΏ ,CtB;R73i[AKОkw;ԛ} K;4cZSbj7VIV71Ӝ"Z{AzZߊ]ϼ_# &yʾ{DK,,nfGĦqi0/ Q~qY)5gbJ/8$웕{}?~2JϨg^t{|u8p5.sBByB!?pЍȽ{!z ( D u@!&Nзs\~oBתFXƻZ?49EBWP\WSQ^@ZXa g3]J{_cHud?ꁜ~,9n Mp'Տz? x. >ds‹BhoFߺ۞A;6{]-O"Ec*"/L$&O׏ܯYyhaNyΉ>iGi%TگmV*MW<88?IR"i}3ee |V7+ؔ })el~\͹;ؽ@I}!ߣ=*8Z3,ѴQ?O^Vu@"f_үl*\16ADu+ォ#Byh_ ('XES7WǨ{ڛZ1. ޮQ'ʊ2姽MA> !vSj>&D{\!(nKz}9怈f?9s>|9s@J:DI`H9n}7z gbxݥ@)Mc)v@ᓵ-k1lUΫlVٌuZ;1--[/G8ǹd&>oj`bͩmlgl|ZX\4pv"inK 0N |;/N0;@4WGȖՑ:D`Fyl \T픊_s)jpSbi_7cqFJ`*4*8p5;¥Rƨ0ԖÂs;^3R`wަ ն1S0880: u `l.,7cwi.Do)ZL㆜y.s$?AxUnuuoO! &t" H$OړWȃq94BO<:.ɫ*vr"_\^&[FC6FJd/jz9p1zf5 u7XdC _c] G.᪼6 ]5S x s?#=w PZL7bS  q/j3o!b&kU_=V}s`%ԧ`1`kg`*i$W.-}Jr=ߛwvR/hs(-%xNɞ +4/cj'&R[Ssgr2\{S~b菉c~SOkekt^-`"{P?zXY? bQ(q /w 7ym%ths?%feM y+#tiwDJZURl·5%ū@Ӣÿko~"Qz׏-{C+¼iI[BMїnC|c <ڳD۽\}Z!&}n(D=|u>|9s>|c_Qw5F$/n㵬8}41`5(s3eҶ'K|^86)6 `[6@ussT@l .r )x5KiłRv>OOr9ItK}15,m|->-SVϣ?kkn@iwϳCNN wP;==fWpAa螣cGψ_Mi{R©@ѷmxVr3$}f}slO;blJ½G'~SέbD>WwHy1 FZY(4}X :Cx~BO><8a,7a|PQbA[[@!B~)D ̄faPq߬=^E^-D}@!GHGfѫ12\r#Bjrk:!w'3GqR*fT^kB^ɷr~ѣgNeZ6|T˗HLu7y1zv"W?ΞH}۬FCZ!'WN3SSr;eqc8[ ?o|c}ϲоqY}| ej=Wyu C.%^8IaP(!iEON_ijv7#9#ɎE>.{=qKƠ6oϭ%g9+䭹D8t.g7}ڿ QVSTӳЀK<,޻}<{y;W|EwQ)UsvopulTαY0a[sF&~7Qc~efo7O:pBUx閶) |P?,o'g`gTG'iosykemHeԚӀ@I%7HJf}9s1N*ʳ@w?_L-O$E`K9? o)l%e\pIfɫa刖GrhVl$_ޡa{7uHO ?e#ۻ37|@C9?plY9j |nf:軜c}7F(/ /98uNCPOo'B=_uA!0 6_\|`}qNɉ焢6oc V% ۠vCTOSkl=_2ژۛ]4;ȗa(4Syj$3_ݹ;tC^ #/_#*_ mzLaZs 3Ӌh9e*DBB?Ot! 1B5dq0.\?c5t3dkB ! !_OqX9zP!?M5rm!L7$+vHZxPԉȿkchmyv#v\xuzf)C1 ?iHҧ j/g^,9@~~Ƚ1*]IWq؈ȩ_}Kâ1'-+s2xOBine /O;VE_ֆi(csq36r7|/y1 g[C;j3HIRx^g9 ;QE a̙/岚u5{bȩl>B|ZרDQ7y=Tm@3\+zr8H*W~ރe(u>zټwN}BR<.@yo4ڔS/AYjՐk'O(o)96?M80t]ٮtaj_b (,1Yd =649bE_Yc{ uxdn q1 w'l_@l˴nq67|9X0>d~T.^]p@/xC/o跙_ BDz\ QEBs8%:ď$&佈w8gorO17p9r.\p9r -ŰJҌ/7`xM* @.zFdd?ח_~(vn\ ~V0_u:22vGl;L sI?/F)8 efEl !y=oa},!Vǘgl_pgeRڇ|2~MmD0KE%z=P|R[R+vӆߘ(M-O;w7W>_^4^G0g?)OR߱?Xʿɯ *6yp5c2I  e޺^cG*3Lc@JH@y嬵E1D^lwft6p֮\h_/ݼF FwD){o# ̻QkrVIr?N6N G9[b#.R Tx܏ÐڂגՆڮ;D; UkV }8:FYmX׷1G. j0Vy6K]#B{yXWw_-O}ɩ=1(gZCR˼Oc pk5[ z kn_|JxN{Ջ4(snr6Ǿ&LJ;h~i| B'##"+Jmdޝ8<!A(!?"D{Nn-cl!&D q~+!OoU/6?]p9&|`7ǽ-Gy!R!pc!0!Ƈׄ3?LjhRT9#+S,j9d}GͅOQluas_NCL '~`ބ^#,ЛB8D;yBq!k?QqNˁ?D\p9r.\p9́?>} &vM֔ZS ދRuWGQd"ad$dV{1MTL ՙzٶJ8Yz~eh7<t@NR `ZriG%}_ж~Ϋx}^_$/rw-Bk;_얰D 5:x?<*)0דCG)X&iz?n3Ԗ٬u-!UWb X[{I֝=ww[CUoXI>SJ=R&E埞xW@Щ+hNQю9 4aU=5{Rn?$kS+hg6Pvx~aWEG( g;{P  [%^7wြK ؓ /) \({N7+*LBiJNGLB۪KH{Uf+}2[ͦؽ-Ml~sZ˄y*9'Nޫ*`~"gȅH~YsMAVȵHS=}2{6`}wM^o.Ðg9uL[ Kj~M\{C?b`O5#ȽKk{ҍ_Po3eƜo#=0O߳%3?CUȇ #C߄~Ǭ(+ D%_?p.:\AZ)%;hg .%|OG>!p:!AB烄w {?+UB=BܠC'߹ˁ?p+ 1WYBȣSOBBu7nBP}jY6l5쎊Q8@vەf;,0Wv?Yjox5%.ɛC&=`|0ya}yWQ9>'/>:Iii5vs8r|B`/}?rd\TE;&f~dof*}={n3~7pL8zFS[p6u5Ϭ{m |M'k\tSIAMLmѐd#шK 1Fj Xso_8lP0g'Tg\c,)^.IsF #k&G~b|iݵYtMQS"ktЪFO駏vyssws[B1΋42:iCuf0GC1v6GȪ'-ɢŧȜc~,kޮZ!30??jֱQ iί)Ʃ^9~IHmúC.x:| xM}H :[O~3hsv5~ú=ۿ > و)>|Wiw&K6eK5[NNx?űu^=/Q>oYcƮ<ٷGFu[֣w2L.ճԷȗAχB^B?[b@!5B#K*Cmqatr.\p9rˁ-~mUm__RH}̱zPX9%r aS}" %!nΑaXh =vyrd~L\ibaodvzBɸ_7t.-NN+[fLO E1SvSvo3&m70}2;ӳU*īkYjwDRw>8${R>5~|m$/kyXG7Li\+G^2#Who%_*P4e<$DL'(h wI|&[oYႛ]8@sR5%𫼡NUy_:R9rߔLW0X9x1؝옔hZGF̌ /-/1So582/6<2-ޑ~nU<wqKT!9(2u /N$ɾ&&o!8ڒǷ漜tu/N << :K4L{ {28<~~O/Ց_=1ڒ'9Gfwy u|j' u*IDW)"c []HރӌpP0`= 0:v'1pp? 5r_ q By!N"k;ďH.Pq7p99k9a^}K0!Ä ! _΀Dm#Ӡso@=&["3=]R焤=ز:_Vl 7F;k磡PԺj ؙ&X"Zv?E_ vb޵zAq$%D=rX K G~nu9rx].p9r.\p9r_΁_0q%rvijw*ڧX]X_}J _#+-uuXy2OG TtUQkWWZ6U;X{;\X+vwٮ7̍nv%@H? rs@ UَrS 97K9Cf8]C} T=$MҪ 4F3$ H k"HN7W* 8 O6'+qzy)/}X44_/˺Hg^'TY)Jzh'3@nϤW4 gkY J;-F=_Y͊—+-Zbnb$,6 uص,֘I紟<n$l6"eYKTܒ\1gɌ#IzLfzr7Pr9^ˌ/9Rq\STHy:#CµjDQQ?Pg*ڴvWy/b\kڦif o3Uz]7{Y 7j4~ُN~3z~3lq~hPQ=ƺڻj?@ξ5ޛT[< ~Oo9ilkOؑ8c\4yz{ݐ3)ItCʥ,3Fnaԧ}&])R@N-^dP',3~Ԫt3#&ƚQoK&8[3bRO?Pfݞi||eL v aW ? 0ɳB緅BW;\p9r'=ߦ)iBeB u!Bȹ|!*Y9}60b~\@ o/]|ofJȞ,c OG 9ƞDo<\?L @IDAT'=r8TqjE+8sFفpԺ12?M/muk=^>ysG^Pv] 3c3O+r)(Y! DM枵'?evnIث-E\_ Rg\yٷrV";*29?$Hy~W%Tm :h I̿nGs ϊo-_ h}Dc|OJ[d2偸* 7q9?D=kK\͓xGU168L;0pc)jcVmf +5$x-Z&?Nlxe'IH}j#> 'LJiɥz}G^ZȠk>RO5ury=4wi r%%Z@Ws (>LJm3O_g ѯ q݆M.\os@ 7p9r.\p9rߋqokI?hQ'3^qqkjk]u7 =s9_Qv_fPBjQ!Vb0gk1)f[(,؍M6 ,r ZOSl-u-JP2u=c{P72B{LIUNiVjyQϪ~RzV˘s*< {[{b;9Bh;o3ãal'hϊ۬:&.4C l&'o҆<\?+<1F{0%8fdLٛ8Bxy×KI}2scױ߅!p]FnzUڧlTj攭 |/3pP)<%3-H921ӛJ&N%NRrˁρ8w0>bޖJ܃TEy,b!+G1_wo!CKMA%X=}/y7m9Vgf+UZߕnVjHdw}_QNꑄsMB~`M. \U6zWzÍ~~s"ݹz $w،)ɯ޷o1yM1rauYb(B[!|H `!rhuԷ^F1ׇiO)?SB' !7:!\yBQq[.\s@+/BNQB8&E/qBNkA{:^vfE̼s<m4UĂRJg6.e{N}nng2>^~@/n@7Ҧz:;Ymt-m !}hkCͩ{W 3~VĤXpR2Lj7m&oTYM& fCPu<4Pn@ؾE|hr/ Sq<:*ɪ?OytZI9s|(Hhը5PH-vR;#wľ%bÃ,ߚ[]ogfGonsyD6o>>Ws:e5O|-ԭ7IQ3lrBO~^mhWUp{%S= .ƾw~l<?r?5uC>.\p9r.\]T,ݤhw|}({[x$| ޮޮ7h۴m\0eNP~Zi-#*K+BCb^ 04(_*m 0Xȱz[ aFŶSτOP(=Tec~-ej}z i.Dݣtf^;| &C{3.bexhww A-Qi9IMD^=z/}ZMxfusٰp?/'EBpQ^6UO%w@sca9Uh;Z4/iPGcўC'J{s5_SBȱW@ȿk+/h1!E9 7IF! ^h)s;_~SH BP|om.˝x뫋l'V7!BMB8RMBf gBo0 䶵 `!^hY.f &1#6r3>F>,sqDTJbC)w}>,!MEa49FvyKUƃw޶{Ba(}bDe- WG^~i ;,xVu ~zxGi;aOvP[F{n qPHM^qg}%lBVN^^WWչSpq u _ā}1~/}J6y:HDu,z68p|)Xdn])K "3>}+[GNjWr?z^:葹sȧD OCoPyD?n 2--Lqn9WˁAjF.\p9r.\ MtiL 3pev'Ij̞3댫3!@쭴//,;O)[9r{̩Yk6TgH3P9V&P?dFH9[{nF]DEZ)g7y3J~۵T Z)^r' ]z}wlM{ :i1x v)q>XJu%<9) EIsLORM9Oz0w(QzQcU͇pHfӾe ZP82XT*3B'i瑶?AIH63W = XҞQ7yzt3œUH;^%SeQܾ1^bRv>` ] +dvЪ6k8@. $R$^)U;k![$lQ85Il xI"IB˓ S߯/g_HWʽ7%Jڭf9k/QLu5j?jsoxJB3k*[fBD0ȣnW83K֘ѯڔ58*#y Fo,TbwF; 3u%:K ZdzV&2Kf/m#(3kyVʫK_7Zxe5ra{}> %]2jWbc0Ɋ}Ġ2 Sl\>t"8|mƪ(q_*M:Lo+6=k:XAVE[Zof^@1;imhG Nh3}]}u7о\ Ѯz@} PE9T!҄ȧ q1B\Y!Iz[v9r!dzj mmV@w7trx/ ǴK*c =8}~<ƸRurxJA",c8Ț_ci[kߠ%`kkqGNG?qwj[|m ';f=uGUN3aJM7vp \ogY*z[ѣ`V9rUq◍(%ġc!~u}E#!ܕO녟b{wzɕZJ)e qD/LVv^/&Zoyz<V9aq)>m07 ѓɟ^ >UЇ]__?Ѯ e[L3of|Dxs'N9K_C/,-~=N[gܑ1|w5ŵVEozƗGoL4lпv}Jrc=YྣAdN?؝hNZAu|? 8jhC['{ wB*2˫s9o.h`.\p9r.\s8^{@>ʌO s b=`d1lUZrU''DF̬9yr ( Ř?HV\Ya- S:`5RHj[ٞgXٟK?@i*@gp2C%7o# @\{,@YJW}|`螾{'37|e ;bJ>}fdNf'%8 >Г+[B~R,~j1|z]1|]ק(E" ˻Iҏxo~jB/7?XO'$^* (>/ډ?7=mЬ[Z*e'=Gu LURWͳϢ܏HȽ5@w5&d)Vg~W-ϴszH9NuSr['s >Z"CdI)߃^3d{Hv &d=&1&HR֠W 1!q OBKRDž 9Btnr9r(~eVaBoA=t!MBiBg!;@?Dy\ b9M]Ar[9ٷTQAfluQe;`ƁK-ݞۣ&W[2v+cL.Fg2U?`\]:0+H.%񴄷=?ks]+Z0 C d{y7!q8?ilk_%ݫn־aZKQ'Ň D(#euv.W9oXh՚aS ;6ȋh56ǡ73^T(3yFW^$~|=_#͞FHDT6Jy1'#ɱzëQS/ ijsu5`l +_糧qMUW ;ƞ?^rv,T }685K=gC/ompmoT !vB'B\t*ۉ'ߞnq9rOrO+7p9r.\p9rߜUiՙK¬23WvV5sz&$j_֞R{~gb 7''| )#b()t^<0y{m#9K%+ISvh? TS $t&筍f?(1k -(o4ӼV(I'oڑSFϳJ)B;4oiJ)|i^!LY, l/ U1W$%i=Re>k %H:z4(V!*K>WRWfV&EΣ~97 a>Φ/ʗZS32$18O{ꦤϴl6YH!%-s3F/NS>?͡]KW{H~i=LBpϫGerW.c![coy>'-Yu  ,q"I,#0-*pT rRěs{1!,yyĝ5a\ER<$_o46R @[=ȑs##i'$k뷠܃>y˚1 07ߞޘ㞣ܥ ?Og';o@7k:ZJ}=ko;Dzwؽx햄3'6ȑѼFby}#9=$Ū,7,rOu11-I}l=D?xY;r gy#O~2]G*/@p̞Y}Ge&V?7p6%u/PYF#qr*3eK.m 's&' gttP[-BǃOIGѹS1Bɱ͘D;{$5|C[K7+k ig@7ȩ)y7I'yQDz^< .\7h6u秲`ͩw;WsSW qڋBA; ᘕ+^!BO ‘Ϻd2tU+q}F#EsO(Ѫp,8%M]*CoRYݺM#ǰ莒>/uF7!g- f!`ؚm1]dTHȸj)5aʢo}tEjse0qg)4FEZc7T0q ljU~-`+Oen ȷN~J2T8VoMTvXQtD/T幫'+̇&Ą<5cg3ƊvdqGŶBEǀ^}:e%F:>Lߌ(8~6w['sVNW^c:d{ߠ}u.)})~T {BW7hʅIOjݏ> qyO~G/SGI+՞Uh1 e簀@e"ew=l>1䯴9?;yܤ9|<]XCYl.uRu{Zla Xy^Kq,F]%ſ۫o4UBI埓5lLS;m/i٣>P2-Vaj#'kԳyckm>6`~'Ό\|u;۟,%u<_ m?97WC jofi8KC< Rܑ)8~ϐ/gsa]A~!\js~#~ ׫9P]o'Q6Ɇ5%_=q/3?'i gb(PT[ g{c )Oq8z4G1g40zu2Km-`=v;ntRȕ ~YX&:נr,Qգd1eѽ%\u#֍=9!SC> NKދp~ jZƇvsڝj'jmE h*\ 4fet6W%=sQJη>^ˌ𑫣`gl=9c}0+Ew>y9CuSΘV'UVB\K=Agҟh P?dɴN> < ѾCBB!+D{_U-@18=Uvsַ%< 1b|yWrH Ruu!Ɲ;wt''! 9_94b*)$<\@o6:;䝫Vq]-SB7̭_7Xqb~|OW%q.|wb/4*piQy"95~i/?b=bg7Wn~C=ɵgb5c=qjxEY0,n}:쟦iB; Z&5zf-%y.QFy^h^O%tPZSsvj;'CAQVc Ӛ&oY׼Zz=svƮ|(lr=9֥“E|mxS7T;.2Vx] ֩4Y"?K s fYέ8*|TO?:jpcJ4b-_}?~?O_~zU?4΂qUK ~zq}r 3_.I`w.\p9r.9`2`* $7ÛiSґ#~BImrL.]e&{:z:4 M`xUxix)W}ǯ\ .%@Rv1F`i!Bw~Ff~^VמF@[vwhlBi}#Gb];=λDޤ'2~ `6vKo{ B_S}~A=` g ;[=xKBu'~ivw 3N4`)GWDork ĢG"+i߲整',W癩{FdssmfƇܪ/]i !+:ɯfB4Reio3vWUuwNy=MsAA]DafQa3ɛr8/0瑟g6휡%lq,ܻ[g)>?r\m}7; Hcr49>+J+Rcp']Z#gDQBBUPǿo!-TAɖ#q?+2UדgTqsn[1ܧ"VO%/ ˳^;xDW}?>h˸e_}F;') ҥw-.!n.<ɾjە>lc~Iٷ3E!Ur:u.t_ŞGsL0TI5'yejCFF,okVy>mu[^@x_\uUng ;Hik2 \Ž9%kE5,s)ݕ}=4K֍u`GR2;~ y>HdtxiS;NG.rwX5Tg@r U?\ < ϖ]8" p'bJu)\/U!W= X>79ח/_OJ2$,p%.<(˜ +<~O0N]_g|qD^az:Mt[Չ1";)X:dw }t^,Ń4{yƽݚMxv9XmOk Wf$DSTAۙqW삕6f{A_z9:dI"EYoGѮv8T@.rN'4n%NB༤cJD,K0.OZ葒V$q0ȓ/OFg Rzee^Sޙ/{K b<>wlO~:Vȱ?3]@W{P.6M˿~K/%PH(37}*zX=q$g:@v9Y si1~P6Yr,t6U:lD8=({ֹ{O1n&W/|6^Y˸1%f(,8[YՓqy[\B e`;ඔSZ:ZT1,Yƅh*`xY @e7{G]UW].o#DʝB,)I?h*+ޞco,rDDաtZGbhs< tG}W{EWx3w4z.aFO30^|`v"h,;,5Qy~sUb17p%s Fja<(~ţkn Gu( Ⱦ:=.mDb VuоYʦVdCm6ͲtZ>z8Ўo+@lԓ#.M(rLR~KL=ZWK/_| %K/*#N$BYutnaJmlӰMkV9kYJyumlxƇ7>A!rWLpP7 QҊcheOb':ES_xGh%t+P!3nVn<+i3f/8Q|*l;_PDU3uIL]a0[6FQ6Uxy VO'1Kww+14u_;΁@~R^Ն *P32eˀ-)aƍ%2~ז`=8[!:#{n!4ԵvGgOb.m=8RA50^\vTmd?yLSW( 9,09Re1Chr&|gQgVC-iVsQ: rLD0vNGv7.4$tgNٮc6\؜p!5r3=d80}=^`rXnxy7$ 0GK.3˭n}t{wHffz| bޔŁ2(_;$Ǜ >0;4,īhؾKҭʺTjI~9sS{ıjZָxu)s8-dm`w \Uυ/SPN3-Cїf)99 6ϙA3t-sT͠V O6_*Lʩj$Hϸ.udܒ5YUY "!Wן?z a//=uϚO|ҭݲSDuH2,-}8h#oݦ%+6~I#<'1 /Q r~`xyzqU!@D$h2OX ẖ8:t]ݺ\_S:p&{Iz hML\s2%K$P`w xVqVpj*BW wɵ[6~:q_75@u>qw'@<*Ml5 6&h*>1o!&j'|PmƱ]ڷƝ%sh}(88t[dUt(+cS싨8Oa1-Uus^8o04WwZʁ̡̯4f3. ^.K:Ň^9oA஖n,)EN\0c>"8O?4U K$ \d"6W}&K@EG,D1KGrD$Dt䙼qIU9=HP]*]F|gȌqqu]eirA,Pb߷y4{M}ѣV~zKb<yX_/S R.}u?\cÂwΜ B;wJ\nkٍ{WEqwq8zpDv..qD[8o앧7阃1E>9BsE@;(uqN\3} wV~%K/_| %KR If2\69 ¥:0Ce4mqy V@hB pV?B@IDAT…?|=^G9!*UɣloTKz u,*Z;` l:9&.r_תйy!+ޚ@.Jml8Cl_G1ZV!I[&n bXlI^Lrdۊ\hZq\(cr\m|\, %^;:e+@߬ Lkݏo [nįH?6_،>r)}0"*:ds/;MvXҴt?z~hF(3k)B IH c+r;oּZin r|=q=2=(J+ #j|X\ )ۃø{CgWb͚.3G Kg;UTe#}spb<[_6T~Z\NQi g rv'c?vy]`!ÿ~Xs6RÏ`-GA  &=f\}jA7 HpUy%K? zqͻU׵GSQBpm~Ɲ蹊&j}ULGhs|J^Tm[ɀ Y,$=RX2_hxQc%" 3噸Wi#T7edTw#ʾ-LfGlD[EyGO?t?>q,P6 Lc]ے8jR^T=Y$q~uB!͸*~9|:1~G/=oda?U^˙N9CݳŢW1VOӮ6w* 0s2R>DŽ+%o'a߮a~| %K/_| %K2~! y*bhT~[\E v ͺnAla!`&T˩a!ӷkp4!Օ  "8Xձ2r럕 a+5I?N9$ e( }3I_oA~!Ce)lkX"H^ qo}匣|VܙAMycr[ȯ)x_,pwpޗ O;KF8~Yqp pxUsM@_ -Bt `=HpcrI2MS>IzacD l3~q0ę!圗ߢT}آÝ+W8KE.WwFo&_?: &_H[Fy=A9Z@Ag2\4> \wZle޸ Rqɀ>l4bGENK^&#U.( %[Rihm, \7Yja1H=7\/j5T۬Y- vv-.Z A-) "eWxOx@`~Md؟-V .+ 5!Ww,[W){Y`䲭tf/ daP_sK(S- 9[\H?+3<$0c<нzヽu#kئ!ZU ҝ| H-) mZuoA d#缪O!ʛD;a{[@崰/5m#0{j=F7*rA3!)Kc} 6-gh|"DXb ,vkblHw^FܳՕ^-fnohoazC&HWflf!U7SM54F5úzjJ;=ݜvIWyc)VHsXJ{tk!US=,w&؎A?R?wC'{kޛA[DءdLb5sZ_̌ Oҏ\Kp)/0˿Aw0ĭDk_k# s }Kf͙bSվ~;&n_ 'Z[Bۗ4?Qó2lo/>:<@ƿ(KW T?u{Q~x5|OKX56/ëGǥ\Nv86x&xp 7h2R Z<?ȤGn _C_\G=Z"~_Z4jC{vYy~F=ʮ--hP߳'ܜS=@X1ǀCbb oՅ{?e]Lyg-r"j WgK@`2$xy̲~W@| y8Jt{I|п7 ~S@~g%KYz%36]UƳt L`HL|T>8A?-(nbŘVTs2v9 3$~S*Fwsf|9~I7E YbI:G;@݃cƟMƭ2{;1޶-il5=opc>,HE%z•pJiwd~vg㌃ev?ppGv5ۻ=~9g}oXx{A? O쒥IDx.45odO?( dDI=)-ī:jt1jЎsl6uKq ǟ&.M;^Gr<"0+@ T,߾%.3<}ɗ/ T4o/_| %K/_D B,b19PyzZ HnK ͨvKФ2oɼ;M*-ͅ1p#M-e (en}-P&=Hſߓd~NgK vv+U<^& sq[M%ܛ> ?tTmEg@yKڅCT}RKZ)T :2SY"3 twŁ8~ZM>̼.yruSR nu\/(Ƃ}i{] f F!>hxfXe wx0=E)`CFWFO"-6<~) msg0lUޱh}CjǨA{WftF>kC*BXh+gD$oJcJka%?zي{%o ⸗5̝>z#Ct~HZ1a]fݏӾw0ޙn􃽹$vSΉU.zTါIKp.KL}-^>~cKVe:3x}Jke)3DCYHʚgw:~&Ic)E_j  a 4V+Kg  衲x:_| @߶e~| %K/_| %J $d QEjqjp^ o a'mr[BrojOה"s\7+!_ W^6MF'ogB WdƕFB0 wP8 *^Lg $^s m 7? Ů!lYn~bxBň[CȫvQ՚AdGI\FAf:y3U *u$eӽ-G\*[R>0 ԂGig@%5JZn>Ac}]a|;?5CbЙ3b(_|׷{r^R?&Yq܀ȜdܰS)lYV0i+OX #{&ׇI'>b<$rnKhw;c )ms vJ ZR,]bq?(uu/AL-bPSզ?~Џʗ-"o;cy.bN`9*[y2#s|s1~V"$<Fmu&6~7wvH9iF=qH IUz?פl3yRV)4'izsj>"dj:&ދ R^zr_rfQګ:^|O|q~W;3z Ѓ垔IRTj \0^ `r_pQg3t*0 ˆRkOO>9{_V=9x`e;c:z~YAgi,PQg֥`evT6;]E(p+oѢ'/qZ%gwC{֗ɹ+q =Hsw0*^*mxevz۪~&=ѥ~Bz[<=/9DBBK$2/ث>-$"I,%%?Iǽr/%\B''ʛ߈%$v[\jcvhSw{WMG #zĩxOpGp8{,٥DkwJD$ȿ,n>6=H^q%YU sO% {ZYH=)^vWⓥ=}4b,ߚJqWpPg6jYp8/I\G8MPL#6ρĒcE׫j-?|п  @.˹޷cCT_-[;3=| I ?T_/_| %K/_$P +Y = #!~R@4=T~;ȋ `v#7 S0ZWׂ@X\̞fO oYx/O)r°f?* ʽ`fr/?u+Z>Cb 1<΍?g~}^i4MdTFhghȭOvV 飂]!NH g 4w#GERU 9`ʞ$!N%oVhY]2s>帴n3L1`J[x7A;QޑH~!~5G&:#OC]^ 0CY-X7C>bSN|-ވy4o>,k:|&ۯieNwcEGEyW t[SksmЃ!osf8< i zm2'37^/7o )yU3 '1QzCѤF=^;OY\j<#N6ị#<'L޿ԏ׎[puHAN3_D_'kګ5*9%9z8ϡG?C,Lѥ}lc௄r5jzh]*KOnj"CfxNDe `h2.)™>J? VÍ)9ΪMԫg6ҟ2J3^~-y#o&m. ?=򮱇z.Jz |sS: T/Jp΄~>CڢGȲ:i}[ bp׹}Fk񱽱?*1ʕyk|:tyJoBN!ⲓ8~ERyDu8t2H\! !@nl/p{>*?V|bQ3 ky: _.Vs_|  / pk+Q3jƹƟ\4`&~('&Wy'[{fxdF8Y/4\RZ"(48ug-eyՋߵo ˭cjVi;ksl]q)_;zU7e{TYj >#/wZ"|1`B" 4ҷ>`zR;y&y  uOw܊.Rm97 Fޒ6eBgS<t[g\F: 4!O.X"95K$ғ{[S-'7Fwǽ;uw oo_tBL?}C=EFvrddΥHg-򏋞rSӨE|8D҉M }H/0e5ΖXNk\ yTГTɶS.D [.Gz3kF7h!n)Oqi'!^_w,@'}J_}?*Ojw%$ /_| %K/_$ kDBt1aI`I'i~y HQo.)^(5a~BһĠiةiU^11'&NשY@5XS"@z\@Jǿ#x5;-JVMxpy %i[ q1W)l_q甝-X,]PtePm䰫jS6 ;5'/v8 #'ϐ'E^1"#ތ"i.sj_2 %7Z9ou1fgAթԏR&UUe\dv, Nั7 gQnKy;~y\G^<͏' niq=G__NԴzFqЍ-qHPMtvΔa櫏 @EnlЉ #W$ɾBBZ}]sWɚ8C#6x3 Z_*FG qG!l}8ZS}_HCirWzKZ|x/SeF Z-8/'4Cj@kXy.W{-"{:"W`‡B.e{ˎ&\-''kb8|y^yǑkeƎr4ofu8]rw7}KPq gT?d;8]<*,ip#*3n2|^sS*LOz6bϦkJ:Y<9ó7K("z2,MDXg׻ "z8*^#-{\B+i}sG{q|鞤x<\ { w-^lNf= E=!ek HϳNy g)q6˯Z/_| $dG+0`pO`;-p֛Tjz|LR l=bxp1V:f>lvR|(M Tv&a4:JctX=NYB;oPH} ՟zFeeD~U끕p;0׳w-_V8.wt BwO鉴7]B}1]]9΅*e|^5zj/^@MGYs8,7z 4d< =h-UHU9gC'1W;v߸*I័ 4C&ߏ**riR,ٷv=^hEj(=BoT{ B=i!|T=yWYCܶȵY]K9BߢP~J}ҢKW#sYG:LK|I36jRaXڈKms XP#̒~d/u8b$qtFoޔHBoPyg'P$k0z ;|CQ#ߋыaj?CT?O+ &@[JG~D +Z#{}U v {7| $ ?~%K/_| %KZB-H߷.r}ЛASBhUlS',;'`antQ`9@= [IIVîǃ @)()8#0Мf-`]$%IXS9#rʓ9"Qa˱Uqņ!/p0[ybH?xv 1PǧqwJγ!E e?%4iU?`(=9YF@3 U9U_Bfվi".P1KyV Ӽ!Յ$; =G>A#~\**xFAG7)d^G2Gyk=6a&j6 ͣ>>5PO='̋?&uJJ1J*=L 2L3 });L FigK׊DesK~uۢyއg`E^9%GrKbauwɽo %ȼ2%:X L"H^_mу ۩ 8.vzD~WO'7Lw:.w\-~\UqG=-lޫJWKHkEG畾/HkgP_vdMt=}4T:vY3 |"?9e',xl _ԩ9y N}Gb;qswO|D\+]ͺ}D?ULw Eˆ SiX72l`lX~v=l@[ ks}.]@;W@EWyJ~ :?%(`&%K/_| %/6D'X+JAC q`HFz=Of\`: (u^!XG\ %9;?+A3A4iqNq8M@~ Oz B @!@^nvyPo(@!oRe{+ bbɷ_yߋИ@I\;K^>!Jo,}FNHb,z!MlՎp]]R4,>\g1^_^ `W:R.5YS1No4#Y_H˄x%*r,q餚2Oj1LpD2؟91tVh>J~HF@}]n'F~iԑ,[^v|-+- kFߌ5{p2 f;:kHRkWKV7](_/3ugh/0ޝ^% ^dH߹g0S{'I^ı8;Ӽ%&fA; / @Nu=?i|S= ޳N!)ydG'mVM270U#jmZOz KGK{!s^֗:]oBx׼Xx ?}yG\'3BυΖOS(sOOm%K6dxҏQ 9#λ0tA 2ژO7093эi_ww;v-t/bqDy{ղZqpXFt iUA:D7;;8k Gso[Il,?^MO(|{xDrԧjoyٮImI~N%'Ȼzh6Jh``/@,܏zfy8H@}?pG}7oGhg#?%K?Hz\o}s3 PƋƛ}φ: leCx*LNއ齷cQsU斑s;{H5`B_L{*|m5ufH ,ǀ.'&Jx>ڕ:qe_֗"*~Z"$ԙJ&m3hߡڀ C]u/@(`?Vi7] V@9sr| %,qLe<#R/ɸX|qbۃdMRY>z}4$1uqbt_<03Sdp۱m-_TwE?ԓI#?a{P@Rf|DaIx CJRF臩Rԗ:Jw1Ͱ>|{B#b+ͫma; WJ9-73)v۔q۔Z&u$^7Si;άn/ֆaz/L:qȷa4#YgmsJ 8~7TqY$L9Mny9[Yኡ7pIྩxDt# ]O_ Px#9. 8 t wpRSlcai  {Î]W`GAT`vE^ew6%?0#_"6{M&9LN9\`kVVxb%`%`%`%`%`%`%`%`%`%`%7I 5yy8LSH9vq {{{Up->17SO#UdMnkax˔153J`"|6:hPоF`ls>rr`+;pX8Y뼻"l/0t`?$r0?b*S@#įV nnPh>|.Myowv$ ^wGC^F7j̵7-C~V  /w}w8=)|>4E5:st끁$chC^˼qe?`4 B] sU[B3n001F+ϤNx_i7ȿWDFD(_8;c@Ǎz2rܚ">UoH^9K,>ӡɿ%X- mJĸιMsc8_^4yGߊz~'z{8Nc߸ ʼn;u@JClBx{ 4g41:ԛ͓mӃ~a+3[_eR֜</Y : 69䀨@9~u.uεnOnf9}XNo+]"od  CFUBCL*̉,1=liĞ+je~pntr[PNRPxm= CY6 9\o"yXwj :L,?`;<+>C:Eui%=_7'ẗ6FjvK^#[mQ.wXu,oz4v=(|;ǟ!8>/~, e[_K $F/,P㢯6 N8Io$P``>[p= nfګ yZNJJJJ`78CUϩ%Rc{< ϱ}ly~%tEp15)fu6y@-]z}_ym~Ky߄ux>?6(Ay<ҞOiP:Z\>["9d}mh[]}r]ь8[R`S"ff2Bd\_Y*׸#3\G=LcB#9Ek]8D `d2^\?.F8fCヒ['Jɰ{hmqN4[2GE Ky륭n2su*YMAnEjM?'%O;]xE6ʶt[_Gω_3sM.LN+cj99}G-^P4k~!F5d{+@Pwz(a0 &|xqr^o!C`Vy5߿ۿ_f4)r?, z̯)+3ddz]B ࠍ~~T ?kvS w~n[ X X X X X X X X X 3$ẋ`$Hc6|覅3AF:8F1yk2(cƓ Ǽ?K}=+ #R`$ԩ`>FPWV..h7.0,OfjAt`#BP3ټ!?Mp.b9~EiC9Q1(v05sHt8+U} 'xG>+{zst"wˆ09g^0w tb~ɜv1e*Zrw/^]7<*?9|8zQCgѿ+#y ||GosG5>in3ԟ[ I9' l - FU)sL ˷Coӟb'*[[ * WͿ&W^nD>yx KY,w"A1|s _>G?QcY?[#ofEPf\Z&0F_uU9 BI9_z5鷘܇2~>~`^v8JL4`WFs(Gt_Tnqx89cҸ2 5 vh'پFl%sbؾhE:\ˀ\ܵ)eb?C~bIC)U) L4giyq+8lK24skp7;ya,>Kִ#C_uf4urN}#[Uj LC,+G8 ,?}@v2Pw3t7?0c qI-b%`%`%`%O@ja\#w5˜LjLsLD}xNVF}@Jg|=QưQ9OeN}MUE8pG9xCpw[^;s2I<ܝ}rQ͓C YnODa!h&\q?P>$A@VV @ZůDža@%աވ۽z-y6q${ބ9Klqq{@i-${|u,PX'Q}}Q&D_)~L%UInNGϏ{sEO_':Y) B3lv6)ʹڰ;7s=u.:>yS LJO*ns-cqB6q~?zaс#0c[* u&> C-z^v@ H0^p@//x]_(^7ޗ:ylWR o]ح%`һ峝%2V;,OPh CI7K35NP25{@$'` sSP_&h?&~42\09B'V_`0J$plf > F.UJ^&hA'JI ƥ15~WaQIMJ ׍9j*wr832mJ#7ҿrgC]9C?CtFM7p'3[rfV>zNýrw].ޔ:|s^&996; 6ӥ#q=h¸.mpbp3M ԛL\d)&G5SA6QA|_) ܏nP3G9KCfZC! vDgp]gfW zwH=])3>7 ǻ#0\fuWռcXe⋾ڟy`sa̵[wC ]ʖFd5˯P7Ouep4',q^BM_L[֧!I+p!waL䐴Gs`wpL&)1hٿ{Q&V!?vKQة8ocS1w~I24Ɗ|ԍLs&nM纝=^ظpFQno7oc`ޔ;v&v: ǩeQP8J/ ~r;o"^OZE>Wt]/jGa1#{ ,G6$")V$ %wɂ[DTcN|{z$}L. {+JJJJ"(_b?b݌9r.0A$xޮ詣V y^xCq)Fxnz(U&(+XL'u~ugGs#m#ӹ~ Hg&ܣlPjʘ9!i[Z~SJ[LUuxUW.nJ;9ӿwho#{+9㰲УFN9!yeѯ*y=I/^E# eJ8+eI/R}3{hK-|D}|Mّ$N7spk ys%/%F/=)37^Mͷ#ƻ`vJ'UҺf4tѫ2/qNC2![R;2}iL6}@l =gou6g8^b^J=fDzq,˧TmwR͠}@[ܕUяvN[]Ѝ}y8N=lh:y$^Z*'WG)`{5VV»YmwI,El $dK50MMbƠϡIqqf,cl|1y D0^`Gz_KA Є[HPh``iC۽%hw/g`ss``ߧagU"{C94CR\S%jb ԖĥXcc0Vn n+İ^sE՝^';ܽ=Ks] 笼5v>+_1|T|Tb 0 v,l|O ߣS|`A0b ` Nckqྜྷ)8/ ͂e~)u~Eo/ef؝%! 1;Nai 馂ev~|@_8_TE$,>+p3F;VnЫ,yYS ~z =μG\Yy<2&Ag6pe,K;\k~B=mLNQ2t)XRS[yz(G7)&j>anrq=P,D7g%lx>zbKmϰo+lsn]}$&?s@N9O̭[tY0o_q?Y[^A.p,J?@ :h{EP:T:+?YQgeOJJJJJJJJJJ`t Ma>3߬T0CCcڛz= OQ`JsX`A 0ǂ :! ?'~p9@0pma̚: B/J!f2ȧԭ2`/;;WhJY8%ُ9[ȿ se#jvJZW.W]IEjk\Z; `wUhA.9^$k5iwậ1-WAWyl̇cpz{gs9`!jj뜉qUd2Ddf 9-0uGeBOgi=4+S6s֚#o-w$k }AIn3ӫ *:etݺEP2Aɚm3|ktaׯ$\\-,:rM޾[)͋٠mcF pHRwf^;9]_ky~.?O*9y>ߙܩ>`Ze^3'j5Y=N(E` K09*w /7'p_ \,d X)`T Z X X X % pdWxa̒S|[^'s7l?L/<׉m_e^}zK[Vi>TϞo=>Ɲ]=ZHARo\8P-[Y>D&+bKV.@N(Stlq~?,/?ddzIB{}{vu.g ɾ"4̺_̑ S>_W*š``)PϪ&a5?ϴ`kMLF?g hG.}2nXC~ KhʥD7|ޣ=JN强1QS73 ..$wvzew:5;qs{~ $73i{oRKyWw_il_;IL3EN}> 8\\{c7w}N :}T^Hse1{%@.Vr މ;MvG ףswn-3 FlMibmm,c$ +?? p 1qZ;:o8H(7GP?*Xa)0$Mۖ3ކ> 8uMLdSpZP& 3L0U7-泂z 0AbL]:E`Lp~MPp ,0=.0~lʰ?u2N%n$<7,\_3qyd38  bUWUs1XXt[mdpg58g Kg~ydXp  Դ[WsyD=ƻLCy Cnp=9lM= tW5:C>L݇3ުM`JHwJe'EIIPIlF?wO JdA#)BAI PKG]8{z^icg܁ov5m~ق5!J>p}&ӽL].sQ'~xI0e(XY l.Z{Z1u9jFnn{0FslIS=Vݟ~ܟ@D{+7u~ow;Rc =-~ i6Zp%SW&8kLH3[p[O| Qp; |_?STюg$+7!P +G.xn_!xw/czǂ`bx3b~v2I> JҪIz.o%xGD*8G_cJ'5E3^yo#;fz2ёMXuJ,2LR2u%91u ޝlZ4*GyQ- knR_m.JȦM>_^| c3\i%s2!&| (:4J}$^E=Z%NÎ}^^xX>ߓu=u8 n1l)gÔꕔ1L7}5__J^_W_ S0&ЀLrb؝-&<>>p?ԷAEyt],>p7 lAxAܶd}_O`(*0(t܏y N<+++++]WS~RAN˜v qby?T/ LE~-rnv*^6=YQˎDa4"YgVp3~3k}[Z%sʭQB{K L &0BC8usySKbKٯicT*)-I}+ujffg!g}3~φԛcLuY`ՙǦE\v]h$ڜ4s`?TFo)}%RAJ4OLp.(@-&V!6?7={q5uᦋ4uSanᥚ2 R㙮$>Бӟ%K-}C z3~R25"[ǂe <^@/q s1 R ZqcG}UAp_JJ_,b%`%`%`%`%`%`%`%`%`%`%WK 5\cG#PHn ލY[LeAr~@Pq[Ƹ-EFoB`ԓ)cq"ȻkӫWFq*83=,Gpʂv ) şWRW95@3e<$7]*CpS\D߇~f$"Pm[kDs{~GYS@oO0xNW$zFD?p;Ws1D$ď{T~ɼq8u y~ی^k3};{Iz1"&h 5uU8d)ɚ04A1?|L+/e^Avj8_l(g唞z;cY?uὋlYZgthpӏrqgM\Y2?@#6Y/9-ts]jڮl<@e|<3˽z.hJ7<λ$d9]8]SLIG- %J,/*{=<(K# XI([LQ0u['cZ:aR}Y0Zvl&ѿVOy൤ར@NCǭ"~v++lŷn%`%`%`%`%`%`%`%`%Jcj@`Y خ!0bCTs0D8 L1,A]Ap.#`C`r&0jN?cH*(`#w |LP3~aB#VyThtk,є婻g>8<^GY /Gـ|"O >( Y+(0$ hgྜ%Qp6$K `)4:+[[ X X X X ZҦS`p<@@AF\AUy`m\^lӟWe >?VOO!Q_vaLPg.^5x7,>w\-]K/Yh;pS%'4,/N2'9ʼoD@?SE. ].=dVu-($Ihjя>H@T@nϪTR`jrL #9=y=&+G9嚅WzzMsJX?=<2l 4lF_c=-j>'Ƈ%wowrTػO߲!=c Txw){OOk)Bz`R8n; $CS}_,0ELK##˫Uz@n')}]S%6&|z%|rKYSza/A~U'^"xYy@B=(k9ꄭv\ni%`%`%`%`%`%`%`%`%`%`%H9J{]`ApT*ˍ0>Ͽl_(XLPM{=W`( &048&l|@IN8#P,X8S)0l]-0h!?=Up%)v)<M7FD \>vvzYٚAi ٘4#s{.ݨ)WR\qZ122D;FPeUa.ܕr}gu=[h'gt?vq uT󋨍yITF${,%}Ju5+iw>&_啡?JzF;C=We$đfV0㉇} ^B2agϧ^Mk94?sV:CnVM^}Q}Κ MWc *C3M9ԓ[ X X X X x=o \d*A*tҙ0?F\gIτԪ BSzM.dkI$Dj Rשw%l_J0 Z/giϟFq4@a5q$B&X0AHAb)OtOl4'p& 5@VynwԟqlVVVVh}WJS=śo# 02w>%a|nqouu腼w!cIy[, ~N 2@]*0A:,w/?O?@Ϗ_ڋ.[?Nr3IDATٶiH;|nC-{CPn(&!v?s?NpvACb}4$0V ۚ}cIqqoHȔ@<#;w3u _S]\cƧM™T Aţo3eCMs8[41Zϧӟ ޙ&w"kÍF \AC~Up:oT x])* 5M =@ދr*łsA< 0KscK*ߝAnk7'.# F(sLTJLtA?T`8A`H/0|ݚ (XB`8AP'{Ϋ N?W,TP0pPå+{ UN`T`oJNY;Bp&~|~ഏ{t? + !LP-X@t(!Q|kNvwג;A4aѽ3K)XNpWO=>Q;s?pYpصJJJJJO@JA?roL0豧}*^ &G%Y:JP0?"XQo6= k ;/8Cͭ8|"Sftph;kr zFOAcc0ޝf*&ߒkG WmfLg{Ϲڠ>=eEBj8ƆFj6N6L?vߓ\m&cb2 cu< }g1Twm$ _jp޼_20^IP?% .@e 0f,A~G}*8Z!A`4྘). ) u1 [vW +++++++++++]KHY.zY'pȿ E-iA=SP(05l / MW o"8΋ ꥂ)  '2 A4E0rɴ 0b: ?@Ƽ`̩5b]# ,7iG`p @|AI@۷MY %`ݞ.[+:J@^`|K`J+Xn+۳`:5 )z`'ؾ`9G02g_6`)$0!pɑrȧH2PP#hCGVVVVbF3<ϯB穔k Z\r>N}jorh@ A>@o" z`7u,8|Ms7+g"ErxyR@˩;,mJ}ZSSTuy 2ئm6˜}K sz]{W[Pقz`ւc1uo +X#}Y*x-)xM&8BUYPa>8X` z-!`R O-VVb%`%`%`%`%`%`%`%`%`%`%K ;xA7`.{U{B _ m`$R) yRFЏC =5!UO _{<+Y1-ϒ/H  qA}/)Wg  h G iЯ"d&tqTP_ 0%0Ȟ$0No]l_`g1W<=}Z X X J^K{;TBR z5w/6|>W,=A{ A:;/ ~ R^?]㪤 =%>REQ?U5oSGVw籣LTTj'ÂZp x/-a;'~ ֟* )^U|_  m@\*Xl@ό  6[{M?ĝk/ؾ@/\(8[{`}-A?& i.++?\b%`%`%`%`%`%`%`%`%`%`%Kv#Q&t@_`P.0$.Z(0&p$ (X"Tr҆b/00 $XN E2W.ӵ3$?$pPTHo8> 5K^ >OLtZM)0#0'8΍߽ggJUˆ a lWAЯ LkPHP&_`@--8lj\jW*0a/#i`L6JJJJ7I L JOɑfcÀm0c^O0~`MAF.^lwȏtJon A;Mqnejv)>T]jq 0$Xe1bwϿq{N z;z_aƻO\p=Y%Gܛ?ݗ·ˁ+\pOgW  cՂ/U5l`u:SPlw0fS "9"_\KDjzf1fh18RnmB 0fRnБ)b%@}v RZlqo(N ]g8 F}+0, NCtVT~g ͡*[xS8& CCuD`$ fk >%{R@/ő?SԱg R+V_` 0a7 Il 4p,ԕZP*mƞ_&0 z9LO~`@?n-pPV8dֺEP{9TEpVmS1꺂ͽ%xn/| 0wWǟ(H&pvԋ}0DA{/ ʘßAÈ/uxvR)&a̡?%Kw~Y"m0zT2L=C-3G >TP7lZkeW/p$z_S kq Oߓ%~ P c/^Ip>' !G?&k~ 's`E/~b%/@_pvw t4¸ /IA;1N JzqZa3P){O?DM:ԼEmA[AAPT KJJ@ґPE`C%0L- >Q ?Q}rd*J`Lf< !0Rgd2` {i+p*p)U0>?.| ~o/) 7 f &X>Yi,2++++"ۓ^=@oHP8B0>;Tz71G2ߜ(M1k c~8MY˜@O[~)WYx@m"7 WG+))RyqJ+?Y٧iJJJJJJJJJJ`@jHDUƈʖ1: c~CP_+b4&B0>M ApBP.0P\)0$~&4J`(p="olw`CL,t `93[2L|L`\QOjM-gAǓ#Va̜c>0frCvJJ`%JUeN!hrCb#`U1T^cw`dL\˜5˜*AvnJqU@[Up(X!0 ɵVP"X`C^lX X X X   / +zl#=fZ8UP$>&~`JAPaaʐ@-HPs@?Z;\'8T }[i1`$XN/ئ7Tz~AB14`ڎMm$1E.#(e`L)}3~mjT #wvNwsI$ԤfB+k LLZCgҢT&3%n-Tu[JѺU%0Q|Q/=y~no묵rE}jD1/ſeīǴ(+[&:Lt<@#buAC:4rx>Sc[$} D@$ D@$ , 3%נ0n1q71Dǀ]D̥Er`^TX CE轢n)AzW|JTX)Qq8r4$9ےR:7k76w5"kֆiI=;B󮤔.RH1,3k)-@mx_,ːvTO|cE̫]E쁢lMQJT>$*jG~V:Nt<8WT>"p$ Dwh?E (^)ʯ;Dcvb~Q^@XbE!hDIbk`;\m\xfRtۯa4| M k4xg ؽRE=tQ>bNёY:ZTX7|Qa8@TpO-{JX`0V짞ZEɻeDPLz%\վ-Ie1>ab3.qG"H` ʈsQO+SQ_zxes[Y_F">U=jQMёju(>'Koq@$ Z;n!FN{s6{{81OQ]N\+ʭˋ߅TQ>(/X Eyz+%R-#V1@k? Xo1Xάkhl$?VL'*#96㏸E`_:gB|D/>tho.>_N?YW#ĥAMK??Mlwc +z]׽$q@@$ D@$ D@$ tg3Ɖyh-F][TL{+Clw^/*.. Oę<#_QJ#IL(_˗3nEq$?\|PB]..ҼN{5TtT(o$Ox#\%X4P#K߫+_RoogaW}=zu-O|>#>Gbgd\{/KLj1>Y!>ǧ'IbzMz.uǟqzq  D@$ D@$ , t_(*覉DhQQxx9QQ ߱(LS4T]ל15~&8q-DvNJ {R?b ! JiEEb;v tΗuo ;*A?MY+OHo'IK0:g3mֺA)7VL!\8_wZqn7@$ Do-y3DG9E_Eqi1]IwYXE4`FtJlw -ʟwfr=b b?Rs(_.|ZsEgn(.zF0h6?'-;1kб81b;NJ>Z+:>!&%VܻdlzxʥcK\-.!u(O^ m1=^)b1B@?h]+vF})/\#H "H "%4z/ ūř3  LݢoCʃYjFËk EJbtuQ],wXogm2jV,=7B)=QAy8q]r71WR5s$"f|]{<%'{A^ I)ݔb.1)*KAg`xP|wR{:$,ܭV`K'kP;V˲+Twb;_R;[c#7@tn*-1Zl|/9 %qjT||2)54c^3Gv҇32fgd?CO Ҁ*bkθ#n@$ D"F}[ά?X'mݢk1/ʉ߉ v~%ʕWEꏢ|(^#ʝv#;[Y}Rzt1X_(#Dz4K8<3Xl/D?Ҽ :U<+f1[~UEnb;1AWWȃJFOWHCGtiGKyq@ؤvˎ1}~F)l.202Zov۹Gc<7\k3p?ƈ(F?H?D) =U?E7%_I)U3(^[$W&n@$ D@$ D@$ , 4/Ru;Y4@,:ݒK {r IK<ϻD)-8h'Ѿwh|Z,~PL헊~5 `罙FT>+*<k!+.RCb<{juqb;#7RZ=X!cjCd6fux>ˋ>"z}LL'$^ž?- H-&PaqWNLeǣQ1LsxZNѱ+w2b?)bX~E- >=vǦ֗reĔ~gKę[kuG~R -^Y`C O-n@$ Do>^5{ˢl(DytLeRl9qޭb/9ܵW,wx[gܑa|h^4^/$XnEry#j , :LWrhqfdQ.B< ۭ`Z˵eq5DLW̯*'>f_T1-st8vK@VELx<=px ~a,+F~!ӦkǃR~Y=qlϾ#H "H "%(g85ϯT vWm_tjRa._ϤIwduXy3QQVHj3|X+Ҭ+ ybhsʼnORkX[T&q?UTd_T|A4čKlV.Qb{K .gZ?WܿᢂRq<)Kfmo<;ig_=Ӹ]ar8Ney-Kbg]<Ɖ:Ŵ?/@bH-$PFTTVJDef>/gdՆ,Sqnпz*h"߁b+#O̗߳3Z|9CkbσhMb#n@$ D$IIL^;7]cc ŵX_:H=m]-rfzzOzrmH/b7diFyvQB4*WRmQ,0)(:^$~f(gb{㯾3L4JO KP5'_0/EDGϛDyQ+|T@(Tw3|GtQL'ʧs񜤷%m$"[$ D@$ D@$ Di?#Eę'+EP푥ti>[<^ƻ% / kv?&;/k_㱎T0owQaxh{LT,.'.5pR~hx\l |VTl3^LV!aKERcb'n2qGg.\knx$X $))*8OP@~&`PZ?߿}tK\9ckQcqq&gDE,_I,wYTOI=Kڷbwn<ۊ GDZjo&"H :gߕbz%6uNF;KY5NKIlSb{uznCr)6S=#}=7\W/Sr7%:[ݖ^X~C;~((:l":Q_}+z K5?KG'2@퀲-RZb(R,5'rK}z#}k6X t- "H "H "H O`1ooURULGOe)}:F3F/KY)sRb2Tj\qrp=f+_ 5E䭢bz!q~b1 Lyf_a9\eQ:S=}W^/:C^a0qo^DEJQ1TL[DM}i>1ALt,+c44<&M,br-7~R^"u*"H&Pjdz +7rFbz(O.ʩCg-kǚw,QZ,(/'SFzB-EEb;cE9c4no@ @fѯ(on,p(/NibqWXrсwCik~qcQm? , D%E D@$ D@$ DL(W1&eD2"q8d)m4<빿Vt]JRX'9q|sqm,w)k=& z@m}IRWL'пx$v D@$+ `߇2"׼SN]EyN˙i,5eătbEywN<~(ZLOMFAVӎ3ITGh_B⫝Cꦢ8U'R3LRZ?K7~"yh7ʯ׈*bE@I :"$"H "H "^$NA.g0ÊÈ"w0z;2"H _w3)n@HbƳg cH "H "H "H5 Dkˆ?#>@=Nh #H "@mѷ_ D@$^~v$ D@$ D@$ D@$ D@$ D@$ D@$ D@$+z D@$ D@$ D@$ D@$ D@$ D@$ D@$ /֎"H "H "H "H "H "H "H zEW q@$ D@$ D@$ D@$ D@$ D@$ D@$ DK[wWTIENDB`ic11PNG  IHDR #ꦷsRGBIDAThYex^gω{N ! XKx )VX^HpP4HB@čH_swt֏9ٳZz׻Lac6WWk`,[;!E1E|[oqϣ^*X^0QXR@{ //}jJ"*41h[/^.!z"FwkbTDm ;D|oFV<#͑1(dv_X~G/ۑhqԼ)ۈ$w$MDFBo؉ b`D{#!C:=vσÈ4ï!D%|w4U[7 /ab?'QÆDI._NރWڼ'Df8z"um$ S3^$re! yJ/2S{?%^o (B^tOْ阸V_}uxL_}<6|O~7;iiMf$vt\19o&v%$~-yx{,< =B,ypc2MyJ\wT5!pQ?Œʼդv#|uħEOGDD/K^=.-x?"CMJÈ5_픋J"cDYs4݉rKs)~N>`jě4r f_$, 3},`&Lͼ֝=Q鲭D,UJ|1L't2g1r VuliN<X,LpsX x- `1VAyw֞`3)b銾1UU gDa@u _$&"Y1> F4giZudk7Wz&WHԽϛxniqn(DrC)ND )2e7[3&!͢q߽JE32HD $uh_~imsV5mB’/g흈>rj9BpJ$nKuE?"G#"{$M/cßլ=f*:'}a3`\p.hӋqa5/'DW~|9i@E,jM$wD@;m.v 䦉'}Ђv qJ>7 녀MdP7^DٷMF$Z=tQ佚ȥaAƀgd%^@.'+oPb/-~nZe3} ? t}2zR1(᫥c{k hߚѻow1a2&ي }"'ʻ~{>@'8\/_US[nOuq>_M1S5$$%ѨF֌ Vk]Kˆ9 sLW&T7p@Tpb 9bJÚeޘW1H@ӌ͍ъݭZQNUƃbh0점bBZ2jֵ|"DT 4Nu0^<ѶhƢlPҳrp 4'p.r)L*D5k 5h.RyCXu̴d_ؿ}w ĨuM!n vTQ?N;xl+lloɼ˼n$~mtrv^F*H#sOSp]jӡz~sUchA9 nLR{U.EGI{ր՛rN!';y(]^?|Ə&ښ\8r񹋏`( e=q}xu3sK".OGDjf房gs.AX|Mlli&ϛ3 _20V1PJAʫ{ >汦O>ՠ%xލfK|4b/m9PґW [Uy QF`n.>:C $E5DioR&o tt7ոЄ$q9 P {۾xp\aXwB$dhq~+# gԔoޏ^̝"򢆠^V^ ۸`TzEEd% i QpyU\:*-IPϓ1,'i32%y#OR!U@gO%L_B|,eN\ehna_+&+(ŋ!©Ws[/,C%Z~MDCQA8-g[~>˓{&)a8V˶gYѳ)-h`{L5kVӇf޺*'8JWr=E"T@xu >H4TvT>F3Q 2SNƮG% $me$0FtH ㆘q^c#]0sIzC[ٯQJ@=VKdKP(vsk->F bG _p " kg(qk2w"P .ʿQʊwrrs9Mi66S~YjBh?Qbh2 ʮPs~[iI?B:yGB!y뱮N_> JB$g0V;*M%0D[(}_/_71wDH .:)2ԬčNàj8C9 꼥x_}0æf[xdJCŃMX?*@Ym\n u%4D5CW BK'Q,*tC<ni5ZVʉzZ|Oy"})کWzļWxטVҰ8 (s4?NF(ubLdr5 {>m_Z.ka|KR\@X- E6ZN%H1K@_|Z`> C@nW?'L>Z7;d<\*\<%UR(NhFe$pKRͺn!;[z;hVfoܰӄ a0@Ttjǒ*oDșw怄-sM-B[q)c@o<=q@=kCo5F"ڭAEi&i 6AtW0A ̊C"~몎f$o-3-@sT6l76k=u5ek8h16džLm!z~>x"G((~`ʳFĩ+]׎!nh$! 4qPe@i?Da8osz hZ|hr:tnTaLJX`Rg>ތ!LJҷV/'7F`z3kܮMӼڌ |oZִ^#HJ[wۥ'Z2, W\RtT7C8晩}; 1Oع7C. o?me-MЦ1fu2lss;%Oi1>L0L'cP,\q{OEJ_C+eukh-QJ?~:-펎&Q왼 :ǽ|m4įm@Q`/XouV\}{Z _&~dX# fR1OrIW1.kۇPk0kJ7gvk%zpbˊ I?Ӛf/hsͦz|!a 2m: )6}ka1Dl4uFG!{u6f8o袉ɱSD{݂8* rQBG[rvR`5YSئь} O!> ~34Kr-AUc̏R1@_"Wl1UPe*3 sSc/%]3w/qAc& ql$PSXưW(sG^ֳm؟cZ峠Zk_uVZqe`[A3gTRFgk 6\#s[AFኀ\~?u5=Cu X>/4V'! ,+=eDH` "$}oTѴ<16LyT|f)2)=gHqEDmqU|7P<qgpV@m2CY>qn8OGfubJGvwږaf ??8U89?_ge$ͥǠU7A]>1bQc@6 U)q+QJ~W5 $fZ݄8~quV۬Nc=| 4 uA[IENDB`info bplist00X$versionX$objectsY$archiverT$topU$null WNS.keysZNS.objectsV$class TnameTiconZ$classnameX$classes\NSDictionaryXNSObject_NSKeyedArchiverTroot#-27=CJR]dfhjlnsx}dxf2gcode-20240509/images/delete.png0000664000000000000000000000147713253251616015560 0ustar rootrootPNG  IHDRĴl;gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDAT8}KhSAI([5ZPڅ]v)-BIW΍ ຫ+QDE UV#Ŷj4ndN>?fc<&~Pgk m ʜ!Q^laawJ"5鿡!*uwS,f6(WiS)*P)T8hp`ZBK ]oUʴ4Rx Iз>R}mV:ֲڥ֠H;5.)mB4MNቬiY֨SykuO>ڠhM=+IENDB`dxf2gcode-20240509/images/custom.png0000664000000000000000000000334413253251616015623 0ustar rootrootPNG  IHDR szzIDATxڵW LUW,"*¢Pj1BҪ&%UhY A!ҠHڦMق,B]0"9w߽gfΜDfdd%Kf^ W=x@o544T,---9z?0ŠǏK> իW{ihh \}׮_VRRRfffׯ1::z`Xߍ󔜜,"[[[:|0]v222ښ\\\$.\P|rJHHQjhh Z277_p ֭[+##LYYhpp+^III 欬4# ҆@WW7$s "555z)І f < Xxy@ޕq{Ϟ=F>>>S'O|?x#ݚ7o blO:U8/lVaǎ;w;6ioo@3Qzi?bcM+"cAӸ(nyQl(44 ,&AL?B @݋6h]1l³!t@xDg/>g!:rw}eTC,N(0 ܹs>ࠁײ-NJ=IENDB`dxf2gcode-20240509/images/collapse-all.png0000664000000000000000000000122013253251616016650 0ustar rootrootPNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleOptical Drive>g IDATXn@d偐oBT-% x2pYH[RX;>rW-Y3> hn='̖z8Si)MvaaEucZ/*3wyڦ] trr2^)52u) F!Q!G̀u,S83`ʩa %t&s"W66kJ81r͋30r[g^FHg`ݗ%vŮrDmGl'7su_8Yp~݆9BCs!ab+%" -hJkk6rό$KEw2>7|C?M9 "hIENDB`dxf2gcode-20240509/images/DXF2GCODE-001.ico0000664000000000000000000014407613253251616016052 0ustar rootroot((ιlllQQQFFF>>>(('!!!444KKKgggؼrrr[[[>>>&&&!!!555^^^XXX)))SRRnnn軻OOO;;;bbbܱnnn%%%  13BEMP[^\^]_Y[HK 13/9:z}}OPP  *&$$ \\\쥤AAB  57or&++))*+*('%vx 8:/0V[[`hh/0 94Q;jC{N}OyOdG ?1acc닊#$(*y|.+!~w\tLRV\__[\b w" DF..ossZZZŁ4QSWXr k!b%o$m$m$m$m$n!je93%V-x1+uI35sFtX 86LRSTTT'(.1ʺ#n$m$m$m$m$m$m$n fRd:U.V.X1zL"i$n$m$m$m$m$m$m$m$n%o]h!45)56poo޹xxxbeV $$|2#v#i$m$m$m$m$m$m_f9;)%&':O#m$m$m$m$m$m$m$m$m$m%o!c`%'im=?(==T\]qssxzy^hh/EF57bbz q]$n%o#l d`a"g$n%p"j`6*&J)J'E0 & mB!h`:58?@gii <>1%!c$n$m$m$m$m$n dd470D!TD52\/ d$n$m$m$m$m$n$n$n$n$m$n$l`#y,*"vz\`OSVYef~u!w i a$p$m duIR-K$L%`8Z dsH;).21`_`}MLK(!e@ h!gZF*33!1Ľb$m$m$m$m$m$m#mNB4A)o1+tH2O[$o$m$n$o#m!h!g!g#l$o$m$m$n"e!k&33.& {od b$m$n$m!d`9.  '30 ;K1+A8nno٘Pj^!uN euN BBC *+1$"e$m$m$m$m$m$n!fb45<"[321"^/BY%q$n"jZuC`2]/`1qC\#m$m$m$n$l!e#r$x$w!j[!c$k$n$m$m"jtE- $7 R']6 >?@k{t$tOW*z||GI1]$l$m$m$m$m$m$oaJ&,@$b1&iH* e=c$pRS!A 3++/ K%Y$n$m$m$m$m#k#j#k$l$o$n$m$m$m$m`G"+6&f0&k+@?@cum SV5^deko'Z$n$m$m$m$m$m$ndM-#<GJ/:A6gggpopMNN#9/D+f@K'8 A LMJ6)M(\#m$m$m$m$m$m$m$m$m$m$m$m$m$mZ:: W2(oENUJ=hSjC LLMYdd# {^$n$m$m$m$m$m$m#k|N8/   UUU֩jlk*82 J+s.z,w'g>-P.!f$m$m$m$m$n$p%q%q%p$o$m$m$m _M;R%i6MSJaC,LZ['|k b$n$m$m$m$m$m$m$n"j}N; KIK鯭[Y[/!_/32%a:.Y$m$m$l$o!fTuKsIxL\$o$m$n"gj251-FIE(l2)o!E2P$l$m$nVM-??> ?L!R$o$m#kM. <>:{~>* 6EE*&"h$m$m$m$m$m$m$m$m%o!hfEoqp5:3+XU@; V$l$maB#0/.178BV$p$p` 6!.-+(C7|}|KUV%("h$m$m$m$m$m$m$n#n"jW(VAmol-;% 2H!a$m$mtG35C#]%`$[::b6"nUV78IB8@<ghgZab* b$n$m$m$m$m$n"jyML+ 4'4,겱MMK T/c$o%ph:>:*q11/| R8=R4"9A=ababbbnqqVY-c$m$m$m$m$m$mWH8&)-#ׅ=UJF0 S2rGL)-<+s.{/},u Y  TSS aaa35-d$m$m$m$m$n bV-58-(;ћU]Z$4, " $=<<sss33(f#m$m$m$m#l~M6 !AL%i'S ⿾aaa<<<4444649:8OPO}}}ۺ'yyymmm𪪪000DDD1<=vx q#j$m$m$n"hj?5;2+(ά...444hllEF"^$n$m$m$ncZ3/58"llkqqq...***ooo¿8:!_$m$m$m$m$m cf?; : 1NUS􍍍\\\ľ...'''888ǿW__\^{d!e$n$m$m$m$m#k!f!fuH.B9ٗ***jjj///'''())PPPſżBDy[%n$m$m$m$m$m$m$oWA.пÙnnn000/+*>62())ZZZĿž**Kbb6@Agfj$k$m$m$m$m$n!hPX1 %gff¾rrr000:3/uYJB82+++zzz˾eewggw >45faee 78}h!d$n$m$m$n ac4D ?)LPGľ˽ك111 000:20hVtXJ/+*666࿿89MABJ-1Z(*]ĿŖ"89ld[%o$m$n!ff:@%F?'37.˾߽ڪXXX)))'''###000:2/jWmZWE=())iii՜/1TD)+C-5r_\ghcag$l$m$nT< ;6NN.ппѽ˽ſjjj0//&%%E94C83%$$vvv222:2/jWp\_P50,667III...ZZZ,.M(0i(1q@N]~GHl"g$n$nO2 8=,w(o4 usvþܿž̡eee322&%%70-^J@fTgPD(&%lll22292/hWq\mYWE<)++wwwIII"""%$$+++JJJ{{{>=X1;|WkKZ=?a66iY a$n$nQ0 : P0(o1hfiҾÿι¾ϒUUU---&%%6/-WE=~^Oo[r]mTG)'&aaa22282.hVq\o[xZL,*)LLMmmm#"!70-91,%##111̧KOjHX?K|}¿$// E<V$o$nW62!K)n*t6b`bɾоſͽ^^^$$$(&$=50]I?_Po[q]p\q\tXJ+)'WWW22271.hVq\p\gU?61556&$#VC:zWGH81(((eeekkksssƿܮ=ErDOBLM C?T$o$n!f[7'9 O&h<bbcȿ¿ſֿOOO&%%YG>eTp\q]p\p\p\q\z\M,)(NNN33371.hVp\p\lYYF=,--yyy(('J=6fThMA('&TTTrrr$$$"""...CCC^^^ÿLPmAL¾X^^41wP$o$m$naR02 9:# dcm¿ƿͲlmmWXXUVVkkkWWW)('mTGo[q\p\p\p\p\q]_P.+)GGG44471.hVq\p\n[pUH*))XXX777<3/dS|]N2-*DDEmmm&&&3-*90,-)'#""***333???QQQiii^as>abb(((eOCmZp\p\p\p\p\q]bR1-+???44471.hUq]p\p\aP3.,CCDQRR1,)z\MeT>40789ggg(&%S>4tQ@^E85.+$%&%%%'&%(%$%$#&%%```˴qrzANRXRXY20iF%n$m$m$m%n$o gxL)Q?ml~WWbƿﳳ[[\NNNZ[[ӟ+++"!!+'%2+(;1+I91WA6ZC7C6/$"!===vvv)++_J@lYq\p\p\p\p\q]dT5/,9996665/-}_OiWp\p\hVE93456qqq)&$jRFiWN?7,./|||aab'&%YB6ZErP?<2-%&&$&&=41XC9F81&$#GGGDDDFGGghhQQO:By?MqsȺKVXFEkH%o$n$n$n$n$o%qV*PAvs|LLWNNU˿fff.//%#"*'%&$#/00kkkъ%&&4-*[C7jJ:uP>WCZE[FuRAF70&%%ddd,-.YF=kXq]p\p\p\p\q]gU82/222999/+*H<6TDlY_J@)))sss]^^(%$\D8ZEkL=80,%&&#%%G;5]KmN?/*'?@@uuu'''/.-CA@77602BAPLWFGN442>?>HHHKKKlkk+35 ::U9XWWW[!e$lrG,:CA`$$4MM_ccc344&%$$$#344rrrɿ***/*(O=3\D8L;2-)(,,-sssȋ--->3-xR?U@WCYEYEYEZEhJ<1*'>??012RB:jWq]p\p\p\p\q]gU:3/,,,;;;%&&%%%%&&M?8fTn[lSF)**___***I<6iWoUH)'&iiicdd'$"_F9[FhJ<5.+%&'$%&>4/|XHtRB5-)788~~~+,,=51C71#""E?<:@uN`@J//83/,.+*$"#000;B? " - A) >' 7# 0 3 M0lDG/&,+P66BYYnccc)))2,)M>6K;32+(%$$jjjBBB)('YB6WDYDzS@WA6*((<<<1228/+qM>>&&&'''''')''ZH>nZ|]N.+*NOO;<<;3.dS~^O2,)UVVfgg)%#bH:[FdH:2-*)**'((8/,uSBzWE91,011...=2-^I?"! NFB63?BPL\78`<2/-3,1'E0W9c=gAqHuJrHfAT5 B* 3!& aaiaadggu234/*'eL?_MYFdH:3-*,,,yyy҃&&&?4/yTBYEWCWCxSBF70())aaa7885,)mL4/BCD]^_.(&hK=\F^D8/*(233-./4.+nN>[I>40,,,2223-*eM@2+(RD=&"<'.i/4#\9yLa#l%q%p%p%p%p%p$n#j auK ;%&fed_^^yyy±YYY'((O<3~XD\GZFXDWA7(%$DDDLLL(''ZC8ZEYEYEYEXDfI;-*(:::Ġ>>?2+(kL=[FYEYEXDXDYE]HyXG=3.9::?@A?50dSq]p\hVoUHH;5&%$899DDD&&&''')))555*((aLAjWG;5678sst)&$iQFjWO@8355fffNOP5.+sUFcN\E9,)(AAA6770+)kL=`ME93***:::-*(eK><2.t\Q4*'%\7X#m%p$o$n$m$m$m$m$m$m$m$n%o$oacA'<2())vuwԤ?@@/)'iKYE]IZFYEYEzTAD6/*++lllIJJ.)&fI;ZFYE[G\H_KaMgSiVSB;&&%FGH91-aQp\|]ORB;-)&,--QQRFFF(&&)((---VVV+**K>7iVWEkXaKA---EEE;;<<3/~_OnZ^I>*)(XXYEEE-*(nQCgTK>7(''˶BBB*)'bG:D83[G@++$ ;%S#k$p$n$m$m$m$m$m$m$m$m$m$m$m$m$m%p!giA ' [[h鞞566>2,uQ@ZEYEYEYEZFYD:'%$QQQ)))<2-|VC^JdPYEXDXDWC]D8)('JKK\]]+&$eJ=bMcOfRiUlXnZp\q\hPE(%$oopOPP4.+`PjXL>7&&&EFGIII(''-*)///ppp555<40cSeNC**+nnn***H<6iWpVH.,+,,,))*B73bRp\[H?)((sssWXX,*)pUHmYQB:%$$XXX(((]F:O=5!V8]%p$n$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m%o"hfC#8?{yፍ-..L:2zTBYDXDXDYEaL|\L5/,333mmm'''M=5aMkWjV]I]I^J^JxVE70,889mnn)%#gOCo[o[p\q]q]p\p\r]z\M4.*PQQVWW/+)|^NhV>51)))LLL(&&1-+///zzzFFF2-*|]NsWJ)((^^^===;3.cR}^O71.$%%#$$F;5eSnZVE<)))ggg*)*jQFnZWF=%##())XG>VD<J/c$o$m$m$m$m$n$n$n$m$m$m$m$m$n$o$n$m$m$m$m%o!f^?.=@mnm,,,_G<_K^J]I^JcOkWlYI<6&&%aaa(('bK@mYp\o[jViUkWlXhUQA9-./yyy'$#cNCr]p\p\q]q]q\p\r]eTB719::YZZ,)(wZLkXD93--,NNN''&5/---.~~~^^^+(&oUH}^O-*)RSSUVV1+(y[LeSC94#$%$%%J=7gVlYQA9,,,uuu**+dMBn[]J@&$#,,-F>;;L>[$o$m$m$m$m$n#j"h"i$m$m$m$l!d^_"h$n$m$m$m$m%pcM0AGDjijMJItXKlXkWjVlXnZp\q\aLB&%$mnnXXX)((rVIp\p\p\p\p\q]q]nZjRF)()eee݇%##\H?q\q]p\lYjWnZq]q]kXQA9+**YYY+)(rVIlYI=6(((QQQ''&82.,,,{{{xyy'%$bLBcR4.+GHHttt(%$iPEjWRC;$%%$%&N@9jWkXK>6/00+,,]I@mZdNC(%$ttt:::.--Y<"l$m$m$m$m#laSuJQ!e$m$m"hSnEc?vJ$m$m$m$m$m$m%pO#@3\[\TOM{]Np\p\p\p\p\p\q]y[M.+)FFFIII,*)|]Np\p\p\q\q]p\p\p\}^O0+*III×%$#VD7^J@cRq\p\`JA)'&oppYZZ++*lSFmYO@9%$$TTT(''<40++,uuu%$#VE=fT>40=>>%$#WF=kXcMC'''%&&RC;kXhVF:4345-./WE??0.+bQp\p\q\o\nZq\q\p\fUA71899%$$PA:n[_O<40'((&'()('UD%$#ZZZ)''B83***iii**)F:4fUTC;/11?@@:2-bR~_O82/%&&ZH>o[bQ<3.ABBʪ678J;6jXy[L/*(NNNM5"j$m$m$m$m#lUiBkE'_%o$lY D+ 2 c> d$m$m$m$m$m$m$m$n!i\@MG?hWq\q]iVz\M|]NmYp\q]cMB'%%rrr011:3/hWp\lYXG>+)(''&82/rWJq]nZgPD***jkk111D93iW`P80,JKL(''^J@o[cS=40>??QQQ./0YG>mYbLB'%$wwwyyyQQQ]]])'&E:4++*bbc000>61dS^I?+,-WXX/*'vYKfTC94$%%^J@p\~^O7/+JKKҵ;<=C82hV_P4.+CCCX:#l$m$m$m$m$m ckCWiCyM"j$m$m#la\`"g$m$m$m$m$m$m$m$m#nhDMLAiXr]iW[H>70-61-dMClYq\vYK,)(TTT//0=50kXp\aQ4/-233XYY'''E:4hVp\vZK,*)TTU9::?60gUcS>4/@AB022I<5gVhWF:4445III-./SC;lYiQE)&%jjjbbb.//!!!aaa('&G;5,+*[\\66692/aQfOD(**zzzvvv'%#eNCiWTC;,*)fPDr]y[M2,)STT@AB=3/dTcR91-:::cB#l$m$m$m$m$m#l^"h#j#k$m$m$m$m$n$n#l$l$m$m$m$m$m$m$m$m$plE?C6dTs^qVI3.,122%&'2.,xZMp\cR3.+<<<...?72lYo[jRF(((]]]JJJ-)(qVIr]aQ5/,FFGDDE;2.cRfUE83799DEF91,`PmYPA9---BBC-./M>8jXqVI-*(HHHIIJ'(((''###ggg'&&H<6-+*TTT@@@5/+~^OoTG)()kll敕&%%SC;lY`PjRFcSr]sWJ.(&\]]GHI7/,aQgU>50222 uN#m$m$m$m$m$m$m$l$m$n$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m%poF>G;fWq]VE<'%%|||ggg*,,UD610//ppp,,-B93lYn[WF<())%$#VD7%$$nnn'&%I=7/,+OOOKKK0+)xZLuYK)((^^^泳//0D93fUp\mZo[q]mSG*&$fggNOO2,*_OjXB83---^@"k$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m%ppF70-,JJJVWW,)'rWI|]N,)(TTTCDD90,_Or]p\p\p\gPD(%$rrsVVW-*({\MmYH<5))(*[$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$phA=G>3.+`PnZ\H>.//ccc^^_/*'sXJmZXE=**+'''bLBo[jQF0-+444+,-;40bRlYhPEdNCcSmZr^gPE'&%ooo{{{&%%K>73/,FFFbbb*'&mSGaQ0,*MNN\]]-(%pUIr]p\p\o\aLA'%$~~~\]]*'&uXKnZN?9%$$  gA#n$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$m$n#l S302+cTbR81-=>>ppp))*cMBo[lSF+*(///'''E:5lYiV=51222WXX+('pVIo[gPD,,,TTU^^^,(&lSGn[_J?(((󒓓***WE&%%ffg)('oUHnZSC;$##- b$m$m$m$m$m#l$l$m$m$m$m$m$m$m$m$m$m$n$n$l$l$m$m$m%n!g <%v\PbS5/+CCC.//O@9mZkRF,*)'''&&'E;5lYhV;30222sss'%$bMBp\sWI,+*GGG]]^+(&eNCo[dNC''&}~~򡢢/01N?7jWy[M60-3440000-+{\Mp\p\p\p\p\r]rWJ*('[[[%%%J<692/<<<}~~&$#`KAeT<3/>?@'''QA9lYq]q]lYWE<'''qqq))(iQEo[ZG>$#"KKKeee$!sI$n$m$m$n#la["j$n$m$m$m$m$m$m$m#l_wLP!e$n$m$m$oW6&G:3oWJ70,DEE677?51}]NG;5%$$AAA***C94lYhV;30222%$#UE=p\{]M0,*@@@^^^+)(^I@p\jRF(&%sst789E93gU`P:3//00--.,*)uYKo[p\p\p\p\q]x[L+)(RRR%%$I=6<40777%$#[H?hVB72:;<445C72eSq]q]kXRA:***|||))*bLBoZ`KA(&%hhhsssXXXyxyK2#k#mXUXVSX e#m$m$m$m$m$n"hTnFkCiBmEX#l$n$olE"1) A6/1-+IIIDDD3.+J=6('&QQQ...?62kXiV<41222%%$K>7nZaQ60-:;<[[[+**WE=o[pUH)&%hii꿿@AB>4/dSdS@62**+*++*))pUIn[p\p\p\p\q]}^O-*(JJJ%$$H<5?61445%##VE7//0+,,\H?mZkRF-+**++;;;LLL```;;;YYY8D>pF}O 0#%* G,lD_$o$m$m$m$m$n!g~PkDvK{N}O_$m%ob W>=A?/-- //.YYYSSS((((''///000<51iWjW>52111,,+A82kXdT>50567WWX-,,RB:n[uXK,'&^__HIJ8/+`PgUC83+++/00)))lRFnZp\p\p\p\q]aQ/,*DDC&%%G<6B83233$#"QB:hWN?8345abb*&$lSGq]q]fUG:4345.00UD?624.--+*)(),,,999xxx:::  2329:9788&('0mD!f$o$m$m"jSI.+$#( 4 J.zMrI-F:<:;$$$/(%L>8<85ABAeee***!!!{{{222930hVjX@63011333:2/gUhVF;5234SSS///M>7lYz\M0+(TUURST2,)|]NiWG;5,--333())fOCmZp\p\p\p\r]wZL/,*<<<&&&F:5G;5001&%$N@9hVTC:012&%$]I?o[r]cSB71::;234O?8iWp\mZjWeT^OhQE2.,222222222ذjkk!+% A(X$o!e`=Z[Z[YW&$# $=@?<==NEAgXcS<3/666}}}(((RRR44471.fTlYD94///===5/,aQkXN@8/01OOO445G;5jX_P6/+KLL]]^-)&wZLkXL>7---222''(`KAkXp\p\p\p]y[MC94%$$bbb(('C84L>7.//''&J=6hVYF=-./(((QB9lYr^aQ<3.@AB789H:5hVq]p\p\p\q\jX=40.--@@@qqq򛛛(kDX7 >;2麰ZRN#"!999/01E:4fTgU>51122ooo:::3/-cRlZH<6--.KKK/+(z[MmZVE<-..LLL899B72gVbR=3.@BBfgg*'%rVIlYQB:,,+/00&''YG>jXp\p\kXjQF82.%%$[[[*))@62QA:+,-***G;5hV^J?+,-'''TC;lYs^~^O80,EFG<=>A71fTq]p\p\p\p\mZB93*))777db\)+$ay_eQ*XVV###%''D:5dSiWB72...CCC/,+`PmZN@9+,,YYY+(&qVInZ^I@,--III;<=>50dSeTC7289:opp(&%lSGmZWE<*))011'((SB:iWq\}_NQA:+*('''jjj,,,=51VE=*++yyy,++E:4iVdMB)**}}}&&%XF=n[r]bQ?5/;==ABB:2.cRp\p\p\p\p\mZJ=7'&&MMMtttzU:Y(V9{qMuOUhX7𙙙999*+,A:6aQlYF:5+++JJJ+*)|]Nn[UD<)**iii(&%iQEo[eNC+,,EFF=>>92.`PhVI;5345xxx(&&gODoZ\H?+))777)*+K>8iW`P>61&&&>>>...;30\H?)**qqq-,,C83hVhPD())uuu񄅅&%$]I?o[r]iWN?7+++HII5.+`Pp\p\p\p\p\o[QB;$##>>>VK4^R7$S8  kG]]]].//?96`PnYL>7''&SSS*)(vZLo[\H@()){{{xxx'%$aKAp[lRG,++AAAABB5/,z\MkXP@8.00󀁁(('cMBo[aLB-+*9::*+,E:4iWuYK.*)?@@00/:3/`KA)*)iii---C83iWkRE)))pppyyz'%$cMBp\q]n[]I@&$$OPP0+)}]Op\p\p\p\p\q\YF>%$$7-_Q7 =)O5P5^d!#$$.*(|]No[QB:%$#^^^)((pUHo[eMC'((mmm􈈈%$#YG?p\rVI-++>>>FFG2-*tXKmYVD<+,,􇇇(((_J@oZeOC.+*999+,,?62fUz\N/*(NNN11181.cLB+**aab---C83iWnSG)))kllmmm'$#iQEq]q\q\mSG)&$`aaWWW,)'xZLp\p\p\p\p\q]`KA&%%vvvNNNGGGb\RrLhU8pKM4/ di u[-..2/-x[Lp\VE<$""kkk(('gPEp\nTG*))```%$#SC;p\xZL/,+<<mZiPE/,+;<<-./92/cS_P2-*DDD3336/-dNC,**YYY---D94jWpVH*))hhhcdd+'$nTHr]p\r]|]N7/,GHH___*('rWJo[p\p\p\p\q\hQE)&&hhh uuuE:#wQbjM0(+,.ok`sgOaaa-..542pVIp\]J?&$#|||'''_JAp\vZK,))QQQ$$#O@9n[|]N2.,;;7mZdS2.,???)))F:4lYaQ81.<==YYY,++YG>o[mTG)&%lmm四-..UD;lYpVI/+)MMNAAA.,+wZKhU>50///xxx'''%%%MMMBBB0,*mTG60.(()555-*)hQEq\uXK,)(_``GHH80,~^Or]o[o[o\dNC'%#sss~~~**+aLAnZnTG-+*&&&,*)4.,60,%$$EEE...)((KIHdžYSP+&#...>>>000???666&''\H?mZtXK.)'SST---A83kXgU93/555+++D93lYcS:2/<==^__,,,SC;nZsWI*&%bbbݛ,--UD;mYsWJ0+)PQQFFF,++qWIjWC83---fff&&&.+*''&IIIGGG/+)z[MdNC50-/+*H<6dSp\uXJ,)(_``>?@<3.bQo[z\MsWJkXuYK/*'UUV,-.[H>mZjRF-+)011MNNEFF<==555UUUBBB:76RD>eee000N@8mZxZL/*'XYZӗ*+,VD-+)DDDMMM,*(}^Op[z\MnTHaQr]o[uXJ+)(```789A61fTfTD:43.,y\McR=3/=>>/01TC:lYsWI,)'RSSиkkk('&iSHp^K=6%&'$$%-..F>:p`fV91-()*```788I;5iWeT;3/5559992.,cSmZPA:+,,///A72jXeS?61=>>kkk666I<5kX}^O5.*OPQŏ())[H>nZrWI/*(YZZYYY,--fOCkYPA:)((,)(M?8}^OcS2-+???RRR+)(x[Lq\q]r]q]p\o[sXJ*)(```跷233F:3iWbQ?62'''hQEgVK=6+,,345M>7kXz\M.*(KLL+**L?:gVjRG,--888666=50eTeT@50?@AÈ>???50eTjXC83,,,әHHH-*)|]No[_KA())www///A72jXfTA72=>>rrr<<=C83hVaQ;1-FGG'''bMBp\rWI.)'^__ccc-./^J@lYnTGH<6eNCfUq]dS4/,:::WWW*('tXJp\p\p\p\p\o[qVI)('abb箮-..K=6kX`P<41$%%ZH?jW\H?%##79:F94jW`P3-+BBB0001/.QA:cOF+**///...92.`PiWL=6577}}}GHI5.,`Qn[M?8&&%&&&MMM[[[))'qUIp\oTG))(\\\,,,B83kXgUC82>?@zzzCDD>40eTeTA61@ABiii+'&oTHr]qWI-)&effopp012WE8gVmSG*&$eff绻<=>?50gUcS81-:::ϡ|||ZZ[DDD}}}BBB.-+C71RF@987;;;7783-+vYKmZ[H?788ccc~~~TTU.*(y\Mp\YF>%#"}}},,, <==rrr'''cMCp\_O/,*FFF*))F:4mYgUB82@ABKLL91-aQhVI;5678bbbACC90-~^Os^pUH,(%jkk~~~455P@9iWq]q]p\p\q\gU92/000fff)&&jRFq\p\p\p\p\nZjQE)()pppꚚ&%%TC;o[xZM50.!#$?62bR~^O5.+IJKBCC91-cSgU<3/333___)))%#")&$$$$JJJVVV*'&oVJ|aTGCAEEE=>>.+)iQEp[iRF555cccrrr`aa)'&pUHq\hPD)&$ghh|||+++82./*(,,,mmmggg'''UD7nZfUB72@ABUUV4-*|]NjXP@:%&')*+*))WEp\tXK3/-#$%4/-wZLfUB72344JKK3-+`PjW@62---CCC'&&PA:aLA.+*BBBkll(&%gODhVC:6233@AA-**]I@q\sWJ.+*eff///$%%WWXtuu(((eNCo[y\M0,)IIIttt)**ZG>jRF60-$$$>>>)))G;5lYlYRB:*++%$#VE)((.+)M>8`Pp\r]gPD)&$yyy;<=A71gUp\p\p\p\p\jX>51,,,vvv&%%aKAq]p\p\p\q\lY]I?+,,킂&$#_JAq]pVI1-+$%&+*)jQEkXRB:&%%SSS.*(|^NlYE:4*))VVV*)(qVIhW82.777&%$\I@jWG;5+,-GHH,++QA:o[`P7/+GHH332'%$$#";<<׆-..YF50000fff)))lSGo[ZG>'&&HHH///93/hVo[nTG))(TTTkkk(&%fODr]dS?51ABCkll+&%oTHp\{]N_KAjRFdSo[q]q]bMB'%#?@A;2.dSp\p\p\p\p\mZA83+++~~~&%%]I@r]p\p\p\q\kXTC;/01vvv'%#eNCq]mTG/,*%%&&&&[H?lYcMC&#"zz{\\\+)(wZLmZJ=7'&&mmm(((gPDkYB83.//%$#WE=lYPA9-..PPP333D84iWhVI;5234///A72PA9/*'..-678K=6hVo[QB:%$#UVV+*)vYKq\`KA''&___>>>/,*`Pp\eT<40.//mmm===2.+{]Nr]cS=3/CEEuvv($#hPDq\p\o[p\q]p\p\p\]I@%#"EFF5/,bQp\p\p\p\q]fU;30)))#""SC;o[q]p\p\q\hVH;5567jkk)%#kRFq]jRF-+*(((%&'K>7hVtXJ.)&[\\ddd)((rVInZUD<%&%9;;QQRbccrss[[['''[G>mZQB:*++%$$TD;lYVD<.00^^^DDE80-aQn[`K@'''uuu蚚)**WE8mZfOC)))ccc&%$WE=mYZG=/00iii\\\/*'tXJr^wZL0,)KLM'&%`K@q]`P8/+OPPQRR0,)|]Nq]eSA72...OPP)*+E:4iWp\[I>&&&yyy'&&\I?p\p\hVbLAF94TC7)))UUV-*){]Mo\p\r]kXhPD0,)666ttt*++6/,gODhVr]p\xZM-*(QQQVWW0+(wZLq\bMB,,+YYYKLM1,)xZLjWH;5,-,ppp*++fODnZnZfU`Px[LpUHfODL>8'&&%%%'''?72jX|]N.+*===YYY)(&^J@nZ^J@-./nnnwxx(%$dNCr^gUN?8.//WWWJKK/+)qVIs^`P8/,MNNfgg)('nTGo[p\jQF3.+#%%.+*hQEn[p\WE=&&&(((G;5mZp\q\lYeThVp]p\p\}^O0+)RRS͛&&%VD&%$rrr,-._KAlYq]q]r]q]p\p[wZL-+****)))50-eThV@72&'(000,)(kSFn[cMB,,-ppp&%$RB:nZp\vZL92.#%%())K>7dSt_~^O7/+LLM˄++,]I?lYq]jWnTHWF=iQEiWp\o[QB:&&&33360-eSq\p\q]r]q]p\p\o\vYL+((YYZܥ(((P@9lXq]p\p\p\p\r]~^O7/,CCDeee*))sXJlXy\MK>7(%#889㕕FGG#"!;3/UC<5.+334DDE91-`PnZZG>**++,,YG=mYjRF*'%mnnppp/11YF=jXp\p\p\p\p\q]aQ0-+000000-+)|]No[dNC*(("#$:30aRmZdMB++,www111A71fTr^mZtXKRB:WE<|]Nn[s^}]N6.*MNN֣355J=6hVq]q]n[kXmZq\p\nZL>7(''QQQ+)(tXJq\p\p\p\p\p\p\n[nTG)('fggꮮ-..L=6iWq]p\p\p\p\r]oTH+'%]^^ooo+**VE<[H?80,##"LMMfff.//***ttt;<<=4/cRlYVE<++,466I;5hV{\M3-*PQQjjj234RB9iWp\p\p\p\p\q\dS5/,111;;;)('mSGq]gU`K@PA:mTGn[lY`KA++,HII3-*z[Mr^q]n[hViWn[p\s^z\M3-)QRRBCC70,aQp\p\p\q]q\p\p\mZE:5)))zzz%%$YG>p\p\p\p\p\p\p\mZbLB)**yyy334F93gUq]p\p\p\q]n[ZG>$"!~xxx,,,,)(%#"667sssާ566C72hVlYRB:-..FGG:1-bReT?6199:^^^234K=6hVq\p\p\p\p\p\gV92.///MMM'&&YG=o\p\jWgUlYq\kX]I@+,-kkk(%#fOCq\p\p\q\q\p\p\r^vZK0+'WXYXXY)('qVIo[p\p\p\p\p\p\kX>51++++**@72iWq\p\p\p\p\q\jWTB:-//9::@60dSq]p\p\p\r^cS@61111'''...abb///>40~^OfTO?8001YZZ.)'wZLmYO@9-,,LLL/01D94gUq\p\p\p\p\p\jX=51---eee***E:4lYp\p\q\p\p\kXZG>,..%%$N?9kXq]p\p\p\p\p\r]pVI,'%`aa|||*++[H>kXp\p\p\p\p\q\fU71.222DDD.+)wZKq\p\p\p\p\q\eTB62789AAB;2-`Pr]p\q]s^mYaLB&#"WXXȋ011#! ;3.J=66/,555pqq'&%iQEo[aLA-+)899*+,>51dSp\p\p\p\p\p\lYC94+++}}}6664/,cRq\p\p\p\p\jXTC:./09:::2.`Pr]p\p\p\p\p\q]jRF)&$mmn566A61eTp\p\p\p\p\q]`Q0,*???ttt%$#WF=p[p\p\p\p\p\_O2-*HIIJKK5.+}]Nt_p\iW~^O^J@1,)111⑑VVV333##"777)**XF=n[uYK3/,,--))*:3/bQp\p\p\p\p\p\nZK>7)((ZZZ*('nUHq\p\p\p\p\jWK=7234^__)%#iQEq\p\p\p\p\p\p\aKA'$#~~~OOP-*)uXJo[p\p\p\p\q]sXJ+)(UUU/..71-bQq]p\p\p\mZhPD(((eefVVW/)'eNCrXJYG>D944.+%"!111޼YYYiii4556/,`KA]I?4/-())&''4.-aQq]q]q\p\p\p\o[RC;&&&%$$PA:n[p\p\p\p\fU?509::򐐐&%%L>7hVq\p\p\p\q]mZUD<%%%}}}*+,UD;kXq\p\p\p\q]aLB'&&sss___&%$]I@p\p\p\q\hVI<6/11aaa! /+)-)&%##)))?@@eefQQQ"!!&$#*(&''&&&&%&&,*)cMB`PgUmZp\r]r^r]\I?&&&1115/-bQq]p\p\p\`P2-+FGGBCC3-*wZLr]p\p\p\q]fTG:4../:;;4.,~^Oo[p\p\p\mYJ=6'&&.--4/,y[Ls^q]n[nTH+)(FFFttt666XXXʙuuuTUU666///)))###+('3-+=40I<6UE40--.ӪèvvvVVV@@@//.'&&&%$&%$*'&/*),)(%%%ggg,,,4/,w[Ls^r]jWL>7-..=>>2,)rVIq\q]q]o[eOC'$#ffg::;-*(lRFo[r]nZZH?&%$gggYYY! 2-+A720,*)((dddévvv^^^III999...qqq!!!;30fPDtXJXF=)'&BBB'((>50wZLn[p\|]N>40---,--5/,bMBz]M`KA-+)222ppp343'''888wwxddd###('&-*(&%%333ccc###2.+J=7N?981."!!___yyy+++(&%0,*'&%***ʹ]]]OOOfffrrr333%$$%%%***```四WWWAAA[[[à????????<8@@ xxxxc|A|<<< < < < 0  @  @ @0 00@0@?@À1@@@0>   ` p 0?001< 0?dxf2gcode-20240509/i18n/0000755000000000000000000000000014617100260013100 5ustar rootrootdxf2gcode-20240509/i18n/dxf2gcode_ru.ts0000644000000000000000000025212414617073574016052 0ustar rootroot ArcGeo Missing value for Arc Geometry Нет значения для геометрии дуги Builder Undefined Name Неопределённое имя CfgLineEdit Not enough chars (expected {0}, found {1}) for the field "{2}" Недостаточно символов (ожидалось {0}, реально {1}) в поле "{2}" CfgTableCustomActions The cell at line {0}, column 0 must not be empty for the table "{1}" Ячейка в строке {0}, колонка 0 не должна быть пустой в таблице "{1}" Found {0} duplicate elements for the table "{1}" В таблице "{1}" найдено {0} дубликатов CfgTableToolParameters The cell at line {0}, column 0 must not be empty for the table "{1}" Ячейка в строке {0}, колонка 0 не должна быть пустой в таблице "{1}" Found {0} duplicate elements for the table "{1}" В таблице "{1}" найдено {0} дубликатов The table "{0}" must always contains tool number '1' Таблица "{0}" должна всегда содержать номер инструмента '1' CfgTextEdit Not enough chars (expected {0}, found {1}) for the field "{2}" Недостаточно символов (ожидалось {0}, найдено {1}) в поле "{2}" ConfigObj Config file not found: "%s". Файл настроек не найден: "%s". infile must be a filename, file like object, or list of lines. файл должен быть именем файла, объектом или списком строк. Cannot compute the section depth at line %s. Невозможно рассчитать глубину раздела на строке %s. Cannot compute nesting level at line %s. Невозможно рассчитать уровень вложения на строке %s. Section too nested at line %s. Слишком большая глубина вложения раздела на строке %s. Duplicate section name at line %s. Повторяющееся название раздела в строке %s. Parse error in value at line %s. Ошибка разбора значения на строке %s. Unknown name or type in value at line %s. Неизвестное имя или тип значения в строке %s. Duplicate keyword name at line %s. Повторяющееся имя ключевого слова в строке %s. Value "%s" is not a string. Значение "%s" не является строкой. Value "%s" cannot be safely quoted. Значение "%s" не может быть безопасно окружено кавычками. Parsing configspec failed: %s Ошибка разбора спецификации настроек: %s Reading configspec failed: %s Ошибка чтенис спецификации настроек: %s No configspec supplied. Не указаны спецификации настроек. ConfigWindow Please correct the following error(s): Пожалуйста, исправьте следующие ошибки: Invalid changes Ошибочные изменения Duplicate the current post-processor Дублировать выбранный пост-процессор Add a new post-processor with default values Новый пост-процессор со значениями по умолчанию Remove the current post-processor Удалить выбранный пост-процессор Duplicate a configuration file Дублировать файл конфигурации Enter a new filename (without extension): Новое имя файла (без расширения): An error occured while duplicating the file "{0}". Check that it doesn't already exists for example Ошибка создания дубликата файла "{0}". Проверьте, например, не существует ли он Add a configuration file Добавить файл конфигурации Enter filename (without extension): Имя файла (без расширения): An error occured while creating the file "{0}". Check that it doesn't already exists for example При создании файла "{0}" произошла ошибка. Проверьте, например, не существует ли он Delete configuration file? Удалить файл конфигурации? Are you sure you want to permanently remove the file "{0}" Вы уверены, что хотите удалить файл "{0}" An error occured while removing the file "{0}". Remove it manually При удалении файла "{0}" возникла ошибка. Удалите его сами GLWidget Using OpenGL version: %s Используется OpenGL версии: %s GeoentArc Found extrusion direction: %s Найдено направление выдавливания: %s GeoentCircle Found extrusion direction: %s Найдено направление выдавливания: %s GeoentLine Found extrusion direction: %s Найдено направление выдавливания: %s LoggerClass file logging started at %s Файл журнала начат %s file logging stopped at %s Файл журнала завершён %s MainWindow DXF2GCODE DXF2GCODE Entities Объекты Collapse all items Свернуть всё Expand all items Раскрыть всё Layers Слои Move-up the selected shape/layer Поднять выбранный объект Move-down the selected shape/layer Опустить выбранный объект [mm] [мм] / speed / скорость start rad. (comp) нач. рад. (комп) Feed rate XY Подача XY [mm/min] [мм/мин] Z Final mill depth Конечная глубина реза Z Infeed depth Шаг погружения по Z Z Safety margin Граница безопасности по Z Z Retraction area Отвод по Z Z Workpiece top Z верха заготовки Start X Начальный X Feed rate Z Подача Z Start Y Начальный Y Graphic Area for drawing Графическая область для отрисовки File Файл Export the current project to G-Code Экспорт проекта в G-коды Export Экспорт View Вид Options Параметры Machine Type Тип машины Help Справка Load File Открыть файл Load DXF or other supportet document Открыть DXF или другой поддерживаемый формат Ctrl+L Ctrl+L Exit Выход Exit DXF2GCODE and close window Выйти из DXF2GCODE и закрыть окно Ctrl+Q Show WP zero Показать нуль заготовки Show the Workpiece Zero symbol in the plot. Показать символ нуля для заготовки. Show path directions Показать направление траекторий Always shows the path direction in the plot (not only while selected) Показывать направление движения всегда (не только при выборе) Show disabled paths Отображать выключенные фигуры Autoscale Автомасштаб Delete G0 paths Удалить траектории G0 Tolerances Допуски Scale all Масштабировать всё Rotate all Повернуть всё Move WP zero Перенести нуль заготовки About О программе Optimize Paths Оптимизировать траектории Ctrl+Shift+O Export Shapes Экспортировать фигуры Ctrl+Shift+E Optimize and Export shapes Оптимизировать и экспортировать Ctrl+E Live update export route Отображать экспортируемые траектории Reload File Перезагрузить файл Ctrl+R Split Edges Разделить углы Split edges, e.g. can be used for compensation (G41/G42) in combination with EMC Разделение углов может быть использовано для компенсации (G41/G42) в комбинации с EMC Automatic Cutter Compensation Автоматическая компенсация инструмента Milling Фрезерная Drag Knife Резак Lathe Токарная Export the enabled shapes Экспортировать включённые фигуры Sorted layers: Сортированные слои: Export to file Экспорт в файл Optimize order of enabled shapes per layer Оптимизировать порядок разрешённых форм по слою Updating order according to TreeView Обновление порядка в соотвествии с древовидной структурой Nr. of Shapes %s; Nr. of Shapes in Route %s Количество форм %s, количество форм в траектории %s Export Order for start: %s Стартовый порядок для экспорта: %s TSP start values initialised for Layer %s Установлены начальные условия ЗК для слоя: %s Shapes to write: %s Форм для записи: %s Fixed order: %s Фиксированный порядок: %s TSP done with result: %s Результат задачи коммивояжёра: %s New Export Order after TSP: %s Новый порядок экспорта после задачи коммивосжёра: %s File: %s selected Выбран файл %s <html><h2><center>You are using</center></h2><body bgcolor=<center><img src=':images/dxf2gcode_logo.png' border='1' color='white'></center></body><h2>Version:</h2><body>%s: %s<br>Last change: %s<br>Changed by: %s<br></body><h2>Where to get help:</h2>For more information and updates, please visit <a href='http://sourceforge.net/projects/dxf2gcode/'>http://sourceforge.net/projects/dxf2gcode/</a><br>For any questions on how to use dxf2gcode please use the <a href='https://groups.google.com/forum/?fromgroups#!forum/dxf2gcode-users'>mailing list</a><br>To log bugs, or request features please use the <a href='http://sourceforge.net/projects/dxf2gcode/tickets/'>issue tracking system</a><br><h2>License and copyright:</h2><body>This program is written in Python and is published under the <a href='http://www.gnu.org/licenses/'>GNU GPLv3 license.</a><br></body></html> <html><h2><center>Вы используете</center></h2><body bgcolor=<center><img src='images/dxf2gcode_logo.png' border='1' color='white'></center></body><h2>Версия:</h2><body>%s: %s<br>Последнее изменение: %s<br>Автор изменеий: %s<br></body><h2>Где получить помощь:</h2>Для дальнейшей информации и обновлений, посетите проект <a href='http://sourceforge.net/projects/dxf2gcode/'>http://sourceforge.net/projects/dxf2gcode/</a><br>Для любых вопросов по использованию dxf2gcode, используйте <a href='https://groups.google.com/forum/?fromgroups#!forum/dxf2gcode-users'>список рассылки</a><br>Для сообщений об ошибках или пожеланий используйте <a href='http://sourceforge.net/projects/dxf2gcode/tickets/'>систему отслеживания проблем</a>.<br><h2>Лицензия и авторские права:</h2><body>Данная программа написана на языке Python и опубликована на условиях <a href='http://www.gnu.org/licenses/'>лицензии GNU GPLv3</a>.<br></body></html> About DXF2GCODE О программе DXF2GCODE Contour tolerances Допуски контура Tolerance for common points [%s]: Допуск для слияния точек [%s]: Tolerance for curve fitting [%s]: Допуск для кривых [%s]: set Tolerances Установить допуски Scale Contour Масштабировать контур Scale Contour by factor: Масштабировать контур с коэффициентом: Rotate Contour Повернуть контур Rotate Contour by deg: Повернуть контур на угол: Workpiece zero offset Смещение заготовки Offset %s axis %s: Смещение %s ось %s: No Z-Axis for lathe У токарного станка нет оси Z Z Drag depth Глубина реза Open file Открыть файл All supported files (*.dxf *.DXF *.ps *.PS *.pdf *.PDF *%s);;DXF files (*.dxf *.DXF);;PS files (*.ps *.PS);;PDF files (*.pdf *.PDF);;Project files (*%s);;All types (*.*) Все поддерживаемые файлы (*.dxf *.DXF *.ps *.PS *.pdf *.PDF *%s);;DXF-файлы (*.dxf *.DXF);;PS-файлы (*.ps *.PS);;PDF-файлы (*.pdf *.PDF);;файлы проекта (*%s);;Все типы (*.*) Cannot locate file: %s Файл не найден: %s Manually open file: %s Открыть файл вручную: %s Sending Postscript/PDF to pstoedit Передача Postscript/PDF к pstoedit Loading file: %s Загрузка файла: %s Loaded layers: %s Загружено слоев: %s Loaded blocks: %s Загружено блоков: %s Block %i includes %i Geometries, reduced to %i Contours, used layers: %s Блок %i содержит %i геом. форм, уменьшеных до %i контуров, используемые слои: %s Loaded %i entity geometries; reduced to %i contours; used layers: %s; number of inserts %i Загружено %i геом. форм; уменьшеных до %i контуров; используемы слои: %s; количество вставок %i Drawing units: inches Единицы измерения: дюймы [in] [дюйм] [IPM] [дюйм/мин] Drawing units: millimeters Единицы измерения: миллиметры Reloading file: %s Перезагрузка файла: %s Save project to file Сохранить проект в файл Save project to FILE was successful Проект успешно сохранён в файл Warning during Save Project As Предупреждение во время сохранения проекта Cannot Save the File Невозможно сохранить в файл Closing Закрываем Milling will start at Z = "Workpiece top Z" - "Z infeed depth" Фрезеровка начнётся при Z = "Z верха заготовки" - "глубина реза по Z" Open... Открыть... Load DXF or other supported document Загрузить DXF или другой документ Ctrl+O Show Path Directions Направление движения Show Disabled Paths Отключённые контуры Ctrl+V, A Delete G0 Paths Удалить команды G0 Scale All Масштабировать всё Rotate All Повернуть всё Move Workpiece Zero Установить "ноль" заготовки Optimize Paths Оптимизация маршрута Optimize and Export Shapes Оптимизация и экспорт Live Update Export Route Постоянный экспорт маршрута Reload Обновить из файла Split Line Segments Делить линии на сегменты Split line segments, e.g. can be used for compensation (G41/G42) in combination with EMC Делить каждую линию на два сегмента, может использоваться для компенсации (G41/G42) в комбинации с EMC Top View Вид сверху Ctrl+V, T Isometric View Изометрия Ctrl+V, I Save Project As... Сохранить проект как... Ctrl+S Configuration... Конфигурация... Ctrl+Shift+C Postprocessor configuration... Конфигурация пост-процессора... Ctrl+Shift+P <html><h2><center>You are using</center></h2><body bgcolor=<center><img src=':images/dxf2gcode_logo.png' border='1' color='white'></center></body><h2>Version:</h2><body>%s: %s<br>Last change: %s<br>Changed by: %s<br></body><h2>Where to get help:</h2>For more information and updates, please visit <a href='http://sourceforge.net/projects/dxf2gcode/'>http://sourceforge.net/projects/dxf2gcode/</a><br>For any questions on how to use dxf2gcode please use the <a href='https://groups.google.com/forum/?fromgroups#!forum/dxf2gcode-users'>mailing list</a><br>To log bugs, or request features please use the <a href='http://sourceforge.net/p/dxf2gcode/tickets/'>issue tracking system</a><br><h2>License and copyright:</h2><body>This program is written in Python and is published under the <a href='http://www.gnu.org/licenses/'>GNU GPLv3 license.</a><br></body></html> <html><h2><center>Вы используете</center></h2><body bgcolor=<center><img src=':images/dxf2gcode_logo.png' border='1' color='white'></center></body><h2>Версия:</h2><body>%s: %s<br>Последнее изменение: %s<br>Автор изменений: %s<br></body><h2>Где получить помощь:</h2>Для информации и обновлений, посетите <a href='http://sourceforge.net/projects/dxf2gcode/'>http://sourceforge.net/projects/dxf2gcode/</a><br>Для вопросов по использованию dxf2gcode используйте <a href='https://groups.google.com/forum/?fromgroups#!forum/dxf2gcode-users'>список рассылки</a><br>Для сообщений об ошибках, или для идей по новым функциям используйте <a href='http://sourceforge.net/p/dxf2gcode/tickets/'>систему отслеживания заявок</a><br><h2>Лицензия и авторское право:</h2><body>Эта программа написана на Питоне и распространяется на условиях <a href='http://www.gnu.org/licenses/'>общественной лицензии GNU GPLv3.</a><br></body></html> No differences found. Ergo, workpiece zero is not moved "Ноль" заготовки остался там, где был Command: {0} returned error code: {1} Команда: {0} вернула код ошибки {1} Please make sure you have installed {0}, and configured it in the config file. Убедитесь, что {0} установлен и сконфигурирован надлежащим образом. Converting {0} to {1} Преобразуем {0} в {1} Python version 2 is not supported, please use it with python version 3. Питон версии 2 не поддерживается, пожалуйста, используйте Питон версии 3. Error exporting shapes: %s Ошибка при экспорте: %s &File &Файл &Export &Экспорт &View &Вид &Options &Параметры Mac&hine Type &Тип машины Measurement &units &Единицы измерения &Help &Справка &Open... &Открыть... &Exit &Выход &Show Path Directions &Показать направление движения Show Disabled &Paths Отображать &выключенные фигуры &Autoscale &Автомасштаб &Delete G0 Paths &Удалить траектории G0 &Configuration... &Конфигурация... &Postprocessor configuration... Конфигурация &постпроцессора... &Tolerances &Допуски &Scale All &Масштабировать всё &Rotate All &Повернуть всё &Move Workpiece Zero Установить "&ноль" заготовки &About &О программе &Optimize Paths &Оптимизировать траектории &Export Shapes &Экспортировать фигуры Optimize &and Export Shapes Оптимизировать &и экспортировать &Live Update Export Route &Отображать экспортируемые траектории &Reload &Обновить из файла Split &Line Segments Делить &линии на сегменты &Automatic Cutter Compensation Автоматическая &компенсация инструмента &Milling &Фрезерная &Drag Knife &Флюгерный нож &Lathe &Токарная &Top View &Вид сверху &Isometric View &Изометрия &Save Project As... Сохранить проект &как... &Millimeters &Миллиметры &Inches &Дюймы Filter: %s selected <html><h2><center>You are using</center></h2><body bgcolor=<center><img src=':images/dxf2gcode_logo.png' border='1' color='white'></center></body><h2>Version:</h2><body>%s: %s<br>Last change: %s<br>Changed by: %s<br></body><h2>Where to get help:</h2>For more information and updates, please visit <a href='http://sourceforge.net/projects/dxf2gcode/'>http://sourceforge.net/projects/dxf2gcode/</a><br>For any questions on how to use dxf2gcode please use the <a href='https://www.ltspiceusers.ch/forums/english-section.67/'>https://www.ltspiceusers.ch/forums/english-section.67/</a><br>To log bugs, or request features please use the <a href='http://sourceforge.net/p/dxf2gcode/tickets/'>issue tracking system</a><br><h2>License and copyright:</h2><body>This program is written in Python and is published under the <a href='http://www.gnu.org/licenses/'>GNU GPLv3 license.</a><br></body></html> &Mirror All Mirror all X / Y-Axis Mirror all on X-Axis: Mirror all on Y-Axis: MessageBox You are using DXF2GCODE Вы используете DXF2GCODE Version %s (%s) Версия %s (%s) For more information and updates visit: Для дальнейшей информации см.: MyConfig errors reading %s: ошибки чтения %s: Missing value or section. Отсутствует значение или раздел. trying to rename bad cfg %s to %s попытка переименовать ошибочной настройки %s в %s rename(%s,%s) failed: %s ошибка переименования (%s -> %s): %s renamed bad varspace %s to '%s' переименовано ошибочное пространство переменных '%s' в '%s' created default varspace '%s' создано пространство переменных по умолчанию '%s' The configuration file version ({0}) doesn't match the software expected version ({1}). You have to delete (or carefully edit) the configuration file "{2}" to solve the problem. Файл конфгиурации версии ({0}) не соответствует ожидаемой версии ({1}). Для решения проблемы Вам придётся удалить (или внимательно отредактировать) файл "{2}". Tools table Список инструментов Custom actions Специальные действия Software config Настройка программы Machine config Конфигурация станка G1 feed rate for first and second axis (2D plane): Подача G1 для первых двух осей (плоскость 2D): G1 feed rate for third axis: Подача G1 для третьей оси: Output settings Настройка результата DXF default import point tolerance: Допуск координат при импорте DXF: DXF import spline check: Проверка кривых при импорте DXF: DXF default import fit tolerance: Допуск по умолчанию при импорте DXF: insert elements which are part of a block to layer where the block is inserted расщепить блоки на составные элементы Automatic tool config Автоконфигурация инструмента Separator between identifier and value: Разделитель идентификатора и значения: Define the tools here: Список инструментов: Define here custom GCODE that can be inserted anywhere in the program: Задать фрагменты G-кода, которые можно вставлять в программу: mm мм in дюйм mm/min мм/мин IPS дюйм/мин By default look for DXF files in: Начальный каталог для DXF файлов: By default export generated G-Code to: Каталог для создаваемого G-кода: Location of executable: Путь к программе: Command-line options: Опции командной строки: Axes' identifiers Идентификаторы осей First axis: Первая ось: Second axis: Вторая ось: Third axis: Третья ось: Start and end's coordinate Начало и конец координат Third axis' defaults Настройки третьей оси Retraction coordinate: Координата возврата: Safety margin: Граница безопасности: Workpiece origin coordinate: Начало координат заготовки: Slice depth: Глубина слоя: Final mill depth: Конечная глубина реза: G1 feed rates Подача G1 First and second axis (2D plane): Первая и вторая ось (плоскость 2D): General settings Общие настройки 3D mode (requires OpenGL - restart needed) Режим 3D (требует OpenGL - требуется перезапуск) Display disabled paths (default) Отображать выключенные фигуры Live update export route (default) Постоянный экспорт маршрута Milling Фрезерная Split line segments (default) Делить линии на сегменты Automatic cutter compensation (default) Автокомпенсация инструмента Machine type (default): Тип машины: Configuration values use the unit (restart needed): Единицы измерений в конфигурации (нужен перезапуск): Output Результат Export the G-Code to stdout (instead of a file) Экспорт G-кода на стандартный вывод (вместо файла) Cutter compensation is done by machine (check box if machine reconizes G41 and G42 commands / uncheck otherwise). This also disables pocket milling. Компенсацию инструмента делает станок (выберите только если машина поддерживает команды G41 и G42) Retract to drag depth ("Third axis slice depth") if angle exceeds: Вернуться на глубину реза ("Глубина слоя по третьей оси") если угол превышает: By default enable the TSP optimization for ordering shapes (TSP = Travelling Salesman Problem) Включить оптимизацию ЗК для упорядочения контуров (ЗК = задача коммивояжёра) TSP optimizer Оптимизатор ЗК Optimizer behaviour: Поведение оптимизатора: Mutation rate: Скорость мутаций: Max population: Макс. население: Max iterations: Макс. итераций: Starting point: Точка старта: Parameters' identifiers Идентификаторы параметров Infeed depth: Глубина погружения: Workpiece top: Верх заготовки: Retraction area: Область отвода: Tool number: Номер инструмента: Tool diameter: Диаметр инструмента: Spindle speed: Скорость шпинделя: Start radius (cutter compensation): Начальный радиус (компенсация резчика): File used for logging (restart needed): Файл журнала (требуется перезапуск): On stderr console log messages with importance minimal to level (restart needed): Макс. важность сообщения для вывода на stderr (требуется рестарт): For log-file log messages with importance minimal to level (restart needed): Макс. важность сообщений для записи в файл журнала (требуется рестарт): For message box log messages with importance minimal to level (restart needed): Макс. важность сообщений для вывода окна с сообщением (требуется рестарт): Cutter compensation Компенсация реза Drag Knife options Настройки флюгерного ножа Cutter compensation is done by machine (check box if machine reconizes G41 and G42 commands / uncheck otherwise. This also disables pocket milling.) By default save Project files to: Update paths with last used path: The configuration file version ({0}) doesn't match any of the software expected version ({1}). You have to delete (or carefully edit) the configuration file "{2}" to solve the problem. Start and end's coordinate and scaling standard multiplier First axis start/end coordiante: Second axis start/end coordinate: Scale first and second axis: MyDropDownMenu Invert Selection Инвертировать выбор Disable Selection Отключить выбранное Enable Selection Включить выбранное Switch Direction Изменить направление Set Nearest StartPoint Установить ближайшую начальную точку Cutter Compensation Компенсация инструмента G40 No Compensation G40 без компенсации G41 Left Compensation G41 компенсация слева G42 Right Compensation G42 компенсация справа The selected shapes have the following direction: %i Выбранные контуры имеют направление: %i Switched Direction at Shape Nr: %i Изменено направление формы №%i Changed Cutter Correction to None for shape: %i Коррекция инструмента отключена для формы №%i Changed Cutter Correction to left for shape: %i Коррекция инструмента изменена на левую для формы №%i Changed Cutter Correction to right for shape: %i Коррекция инструмента изменена на правую длс формы №%i Pocket Mill Set to True for Pocket Mill for shape: %i Set to False for Pocket Mill for shape: %i Set to True for G73 Drill, for shape: %i Set to False for G73 Drill, for shape: %i Drill Bore Set Sharpest StartPoint MyGraphicsScene Update GrapicsScene Обновление графики MyGraphicsView Autoscaling to extend: %s Автомасштабирование до: %s MyPostProConfig errors reading %s: ошибки чтения %s: Missing value or section. Отсутствует значение или раздел. syntax errors in postpro_config file синтаксическая ошибка в фале postpro_config trying to rename bad cfg %s to %s попытка переименовать ошибочной настройки %s в %s rename(%s,%s) failed: %s ошибка переименования rename(%s, %s): %s renamed bad varspace %s to '%s' переименовано ошибочное пространство переменных '%s' в '%s' created default varspace '%s' создано пространство переменных по умолчанию '%s' read existing varspace '%s' чтение существующего пространства переменных '%s' The postprocessor configuration file version ({0}) doesn't match the software expected version ({1}). You have to delete (or carefully edit) the configuration file "{2}" to solve the problem. Файл конфигурации пост-процессора ({0}) не соответствует ожидаемой версии ({1}). Для решения проблемы Вам придётся удалить (или внимательно отредактировать) файл "{2}". Software config Конфигурация ПО Output specifications Спецификация результата Output format description: Описание формата: Output file extension: Расширение файла: Output type: Тип результата: Output options Опции Export absolute coordinates Использовать абсолютные координаты Cancel cutter compensation at each slice Сброс компенсации инструмента на каждом слое Perform cutter compensation outside the piece Выполнять компенсацию инструмента по внешнему контуру Export only counter clockwise arcs Дуги всегда против часовой стрелки Maximum arc radius: Максимальный радиус дуги: G-code constants Константы для G-кода Units in millimeters: Единицы измерения в миллиметрах: Units in inch: Единицы измерения в дюймах: Absolute programming: Команды в абсолютных координатах: Incremental programming: Команды в относительных координатах: Startup: Инициализация: End: Завершение: Output formatting Форматирование результата Prepend numbers with the '+' sign for positive values Записывать положительные числа со знаком '+' Number of digits before the decimal separator: Количество цифр до десятичной точки: Padding with '0' digit before the decimal separator Дополнять нулями до десятичной точки Number of digits after the decimal separator: Количество цифр после десятичной точки: Padding with '0' digit after the decimal separator Дополнять нулями после десятичной точки Decimal separator: Десятичная точка: Line numbers Номера строк Export line numbers Экспортировать номера строк Line number starts at: Нумерация начинается с: Line number step: Шаг нумерации строк: G-code codes Коды G-кода Tool change: Смена инструмента: Feed rate change: Смена подачи: Rapid positioning for XY plane: Позиционирование в плоскости XY: Rapid positioning for Z plane: Позиционирование в плоскости Z: Linear feed move for XY plane: Рез в плоскости XY: Linear feed move for Z plane: Рез в плоскости Z: Clockwise feed move: Подача по часовой стрелке: Counter clockwise feed move: Подача против часовой стрелки: Disable cutter compensation: Отключение компенсации инструмента: Left cutter compensation: Компенсация слева: Right cutter compensation: Компенсация справа: Placed in front of any shape: Перед любой фигурой: Placed after any shape: После любой фигуры: Comment for current shape: Коментарий к текущей фигуре: Export all arcs as line seg Апроксимация дуг линейными сегментами Windows line-endings Окончания строк Уиндоус Linear feed move for drilling: The postprocessor configuration file version ({0}) doesn't match any of the software expected version ({1}). You have to delete (or carefully edit) the configuration file "{2}" to solve the problem. Custom GCode Define here custom GCODE that can be inserted anywhere in the program: Задать фрагменты G-кода, которые можно вставлять в программу: Repeat Drill move for slices (only use wit abs coordinates) Linear retract move during drilling: MyPostProcessor created default varspace создано пространство переменных по умолчанию Nr. of Shapes %s; Nr. of Shapes in Route %s Количество форм %s, количество форм в траектории %s Export to STDOUT was successful Экспорт в стандартный поток вывода STDOUT успешно завершён Export to FILE was successful Экспорт в файл успешно завершён Warning during Export Предупреждение при экспорте Cannot Save the File Невозможно сохранить в файл (Generated with: %s, Version: %s, Date: %s) (Сгенерировано: %s, Версия: %s, Дата: %s) (Created from file: %s) (Создано из файла: %s) (Time: %s) (Время: %s) Beginning export of Layer Nr. %s, Name %s Экспорт слоя № %s с названием %s Beginning export of Shape Nr: %s Начало экспорта формы № %s Postprocessor configuration Конфигурация пост-процессора (Output format description: %s) (Описание выходного формата: %s) (Generated with: %s) (Version: %s, Date: %s) (Used Postprocessor: %s) OffArcGeo Unsupported geometry type: %s Тип геометрии не поддерживается: %s OffLineGeo Unsupported geometry type: %s Тип геометрии не поддерживается: %s PopUpDialog Auto Автоматически OK Ок Cancel Отмена PopulationClass Wrong begin art of TSP chosen Выбран неверный старт ЗК Project New/Unrecognized shapes added for layer:%s; %s Новые/неизвестные контуры добавлены в слой: %s; %s ReadDXF Reading DXF Structure Чтение структуры DXF Creating Contours of Block Nr: %i Создание контуров из блока №%i Creating Contours of Entities Создание контуров Warning reading linepairs Предупреждение при чтении пар линий Short Elements Короткие элементы Length of some Elements too short! Length must be greater than tolerance. Skipped Geometries Слишком короткая длина некоторых элементов! Длина должна быть больше допуска. Пропущенные геом. формы Reading stopped at line %i. "%s" is not a valid code (number) - please, check/correct dxf file Ошибка при чтении линии на строке %i. Проверьте и исправьте соответствующую строку в DXF-файле Did read %i of linepairs from DXF Прочитано %i пар линий из DXF Element ignored: %s Section The key "%s" is not a string. Ключ "%s" не является строкой. Value is not a string "%s". Значение "%s" не является строкой. : 'popitem(): dictionary is empty' : 'popitem(): словарь пуст' Value "%s" is neither True nor False Значение "%s" не является истиной (true) или ложью (false) Shape Shoelace method cannot (directly) be applied to this shape Метод шнурка не может быть (напрямую) применён к этому контуру Analysing the shape for CW direction Nr: %s Анализ формы по направлению часовой стрелки №%s Had to reverse the shape to be CW Пришлось развернуть контур по часовой стрелке Clicked Point: %s Указанная точка: %s Old Start Point: %s Прежняя начальная точка: %s New Start Point: %s Новая начальная точка: %s ERROR: Z infeed depth is null! ОШИБКА: отстутствует глубина подачи Z! WARNING: initial mill depth (%i) is lower than end mill depth (%i). Using end mill depth as final depth. ВНИМАНИЕ: начальная глубина фрезерования (%i) меньше чем конечная (%i). Будет использоватся конечная глубина как финальная. Z infeed depth is null! Warning during Export Предупреждение при экспорте Workpiece Top Z (%f0.2) is lower than end mill depth (%f0.2) Initial mill depth (%f0.2) is lower than end mill depth (%f0.2) TreeHandler Optimal path Оптимальный путь [en] [вкл] Name Имя Nr Ном Type Тип Base point Базовая точка Scale Масштаб Rotation Вращение Validator Bad syntax in check "%s". Ошибка синтаксиса при проверке "%s". Check "%s" has no default value. Проверка "%s" не имеет значения по умолчанию. self.self Error: Z infeed depth is null! Workpiece Top Z (%f0.2) is lower than end mill depth (%f0.2) Initial mill depth (%f0.2) is lower than end mill depth (%f0.2) dxf2gcode-20240509/i18n/dxf2gcode_fr.ts0000644000000000000000000020563414617073574016037 0ustar rootroot ArcGeo Missing value for Arc Geometry Valeur arc manquante CfgLineEdit Not enough chars (expected {0}, found {1}) for the field "{2}" Pas assez de caractère(exception de {0},trouve {1} pour le Champ "{2}" CfgTableCustomActions The cell at line {0}, column 0 must not be empty for the table "{1}" la cellule de la ligne{0},colonne 0 non vide pour cette table "{1}" Found {0} duplicate elements for the table "{1}" Trouve {0} éléments dupliqué dans la table "{1}" CfgTableToolParameters The cell at line {0}, column 0 must not be empty for the table "{1}" la cellule de la ligne{0},colonne 0 non vide pour cette table "{1}" Found {0} duplicate elements for the table "{1}" Trouve {0} éléments dupliqué dans la table "{1}" The table "{0}" must always contains tool number '1' La table "{0}" doit toujours contenir le numéro de l'outils '1' CfgTextEdit Not enough chars (expected {0}, found {1}) for the field "{2}" Pas assez de caractère(exception de {0},trouve {1} pour le Champ "{2}" ConfigWindow Please correct the following error(s): Corriger les erreurs suivantes : Invalid changes Changement Invalide Duplicate the current post-processor Dupliquer le post-processeur courant Add a new post-processor with default values Ajouter un nouveau post-processeur avec les valeurs par defaut Remove the current post-processor Retirer le post-processeur courant Duplicate a configuration file Dupliquer un fichier de configuration Enter a new filename (without extension): Entrer un nouveau nom de fichier(sans extension): An error occured while duplicating the file "{0}". Check that it doesn't already exists for example Une erreur est apparue durant la duplication du fichier"{0}".Vérifier si il n'existe pas déja par exemple Add a configuration file Ajouter un fichier de configuration Enter filename (without extension): Entrer un nom de fichier(sans extension): An error occured while creating the file "{0}". Check that it doesn't already exists for example Une erreur est apparue durant la création du fichier"{0}".Vérifier si il n'existe pas déja par exemple Delete configuration file? Destruction du fichier de configuration? Are you sure you want to permanently remove the file "{0}" Etes vous sur de vouloir détruire définitivement le fichier "{0}" An error occured while removing the file "{0}". Remove it manually Une erreur est apparue durant la destruction du fichier"{0}".Détruisez le manuelement GLWidget Using OpenGL version: %s Utilisation d'OpenGL version:%s GeoentArc Found extrusion direction: %s Trouve une extrusion direction:%s GeoentCircle Found extrusion direction: %s Trouve une extrusion direction:%s GeoentLine Found extrusion direction: %s Trouve une extrusion direction:%s MainWindow Open file Ouvrir fichier All supported files (*.dxf *.DXF *.ps *.PS *.pdf *.PDF *%s);;DXF files (*.dxf *.DXF);;PS files (*.ps *.PS);;PDF files (*.pdf *.PDF);;Project files (*%s);;All types (*.*) Fichiers acceptés (*.dxf *.DXF *.ps *.PS *.pdf *.PDF *%s);;Fichiers DXF (*.dxf *.DXF);;Fichiers PS (*.ps *.PS);;Fichiers PDF (*.pdf *.PDF);;Project files (*%s);;Tout les fichiers (*.*) File: %s selected Fichier: %s sélectionné Reloading file: %s Rechargement fichier: %s Optimize order of enabled shapes per layer Optimisation ordre des formes activées par calques Updating order according to TreeView Adaptation ordre pour TreeView Nr. of Shapes %s; Nr. of Shapes in Route %s Nb. de formes %s; Nb. de formes sur parcours %s Export Order for start: %s Exporter ordre pour départ: %s TSP start values initialised for Layer %s TSP valeurs de départ initialisées pour calque %s Shapes to write: %s Formes à engendrer: %s Fixed order: %s Ordre figé: %s TSP done with result: %s TSP fait avec résultat: %s New Export Order after TSP: %s Nouvel ordre d'exportation après TSP: %s Export the enabled shapes Exporter formes activées Sorted layers: Calques triés: Export to file Exporter vers fichier set Tolerances Réglages tolérances Sending Postscript/PDF to pstoedit Envoi Postscript/PDF vers pstoedit Loaded layers: %s Calques chargés: %s Loaded blocks: %s Blocs chargés: %s Contour tolerances Tolérances Tolerance for common points [%s]: Tolérances points [%s]: Tolerance for curve fitting [%s]: Tolérances courbes [%s]: Scale Contour Agrandire/réduire tout Scale Contour by factor: Agrandire/réduire par coefficient: Rotate Contour Pivoter tout Rotate Contour by deg: Pivoter tout par degré: Workpiece zero offset Decalage origine du brut Offset %s axis %s: Décalage axe %s en %s: Loading file: %s Chargement fichier: %s Block %i includes %i Geometries, reduced to %i Contours, used layers: %s Bloc %i inclus %i éléments Géométriques, réduit à %i Contours, calques utilisés: %s Loaded %i entity geometries; reduced to %i contours; used layers: %s; number of inserts %i Chargé %i Entités géométriques; réduit à %i Contours; calques utilisés: %s; nombre d'inserts: %i Closing Sortie Z Infeed depth Prof. passe Z Z Drag depth tirer Prof. Z <html><h2><center>You are using</center></h2><body bgcolor=<center><img src=':images/dxf2gcode_logo.png' border='1' color='white'></center></body><h2>Version:</h2><body>%s: %s<br>Last change: %s<br>Changed by: %s<br></body><h2>Where to get help:</h2>For more information and updates, please visit <a href='http://sourceforge.net/projects/dxf2gcode/'>http://sourceforge.net/projects/dxf2gcode/</a><br>For any questions on how to use dxf2gcode please use the <a href='https://groups.google.com/forum/?fromgroups#!forum/dxf2gcode-users'>mailing list</a><br>To log bugs, or request features please use the <a href='http://sourceforge.net/projects/dxf2gcode/tickets/'>issue tracking system</a><br><h2>License and copyright:</h2><body>This program is written in Python and is published under the <a href='http://www.gnu.org/licenses/'>GNU GPLv3 license.</a><br></body></html> <html><h2><center>Vous utilisez</center></h2><body bgcolor=<center><img src=':images/dxf2gcode_logo.png; border='1' color='white'></center></body><h2>Version:</h2><body>%s: %s<br>Dernière modification: %s<br>Modifié par: %s<br></body><h2>Ou trouver de l'aide:</h2>Pour plus d'informationds et mises à jour, aller sur <a href='http://sourceforge.net/projects/dxf2gcode/'>http://sourceforge.net/projects/dxf2gcode/</a><br>Pour toute questions sur l'utilisation de dxf2gcode aller voir <a href='https://groups.google.com/forum/?fromgroups#!forum/dxf2gcode-users'>mailing list</a><br>Pour rapporter un bug ou toute autre demande se rendre sur <a href='http://sourceforge.net/projects/dxf2gcode/tickets/'>issue tracking system</a><br><h2>Licence et copyright:</h2><body>Ce programme est écrit en Python et est publié sous <a href='http://www.gnu.org/licenses/'>GNU GPLv3 license.</a><br></body></html> No Z-Axis for lathe Pas d'axe Z pour un tour Cannot Save the File Fichier ne pouvant être sauvegardé Entities Entités Collapse all items Condenser les éléments Expand all items Detailler les éléments Layers Calques Move-up the selected shape/layer Monter forme/calque sélectionné Move-down the selected shape/layer Descendre forme/calque sélectionné ? / speed / vitesse start rad. (comp) Rayon Dép. (comp) Milling will start at Z = "Workpiece top Z" - "Z infeed depth" Usinage débutera à Z = "Haut. Z brut" - "Prof. passe Z" File Fichier Export the current project to G-Code Exporter le projet en G-Code Export Exporter View Affichage Options Options Help Aide Open... Charger Fichier Load DXF or other supported document Charger DXF ou autre format accepté Ctrl+O Ctrl+O Exit Quitter Exit DXF2GCODE and close window Quitter DXF2GCODE et fermer la fenêtre Ctrl+Q Ctrl+Q Show Path Directions Afficher directions de passe Always shows the path direction in the plot (not only while selected) Toujours afficher directions de passes (même objets desactivés) Show Disabled Paths Afficher objets désactivés Autoscale Affichage plein écran Delete G0 Paths Effacer déplacements G0 Tolerances Tolérances Scale All Tout réduir/agrandir Rotate All Tout pivoter Move Workpiece Zero Déplacer point origine About A propos Optimize Paths Optimiser.parcours Ctrl+Shift+O Ctrl+Shift+O Export Shapes Exporter le parcours Ctrl+Shift+E Ctrl+Shift+E Optimize and Export Shapes Optimiser et Exporter le parcours Ctrl+E Ctrl+E Live Update Export Route Recalcul parcours auto Reload Recharger Fichier Ctrl+R Ctrl+R DXF2GCODE DXF2GCODE Split line segments, e.g. can be used for compensation (G41/G42) in combination with EMC Diviser bords, par ex. utilisé pour compensation outil (G41/G42) en combinaison avec EMC Feed rate XY Vitesse d'avance XY Z Final mill depth Prof. usinage totale Z Z Safety margin Haut. Z liaison Z Retraction area Haut. Z sécurité Z Workpiece top Haut. Z brut Start X Départ à X Feed rate Z Vitesse avance Z Start Y Départ à Y Automatic Cutter Compensation Compensation outil automatique Split Line Segments Diviser bords Cannot locate file: %s Fichier non trouvé: %s) Manually open file: %s Ouvrir le fichier Manuellement: %s Save project to file Sauvez le projet dans le fichier Save project to FILE was successful Sauvez le projet dans le fichier est réussi Warning during Save Project As Alerte durant la suvegarde du projet Ctrl+V, A Ctrl+V, A Ctrl+V, T Ctrl+V, T Ctrl+V, I Ctrl+V, I Ctrl+S Ctrl+S About DXF2GCODE A propos de DXF2GCODE Drawing units: inches Unités du dessin: inches [in] [in] [IPM] [IPM] Drawing units: millimeters Unités du dessin: millimètre [mm] [mm] [mm/min] [mm/min] Ctrl+Shift+C Ctrl+Shift+C Ctrl+Shift+P Ctrl+Shift+P No differences found. Ergo, workpiece zero is not moved Pas trouvé de différence. Ergo Zero plan de travail n'a pas bougé Command: {0} returned error code: {1} Commande: {0} renvoi le code erreur:{1} Please make sure you have installed {0}, and configured it in the config file. Soyez sur d'avoir installé {0},et de l'avoir configuré dans le fichier config Converting {0} to {1} Conversion de {0} vers {1} Python version 2 is not supported, please use it with python version 3. Python version 2 n'est pas supporté, s'il vous plait utilisez python 3 Error exporting shapes: %s Erreur lors de l'exportation couche :%s &File &Fichier &Export &Exporter &View &Affichage &Options &Options Mac&hine Type Type Mac&hine Measurement &units Dimensions &unités &Help &Aide &Open... &Charger Fichier &Exit &Quitter &Show Path Directions &Afficher directions de passe Show Disabled &Paths Afficher objets &désactivés &Autoscale Affichage plein &écran &Delete G0 Paths &Effacer G0 chemin &Configuration... &Configuration... &Postprocessor configuration... Configuration &Postprocesseur &Tolerances &Tolérances &Scale All Tout &réduir/agrandir &Rotate All Tout &pivoter &Move Workpiece Zero Déplacer point &origine &About &A propos &Optimize Paths &Optimiser.parcours &Export Shapes &Exporter le parcours Optimize &and Export Shapes Optimiser &et Exporter le parcours &Live Update Export Route &Recalcul parcours auto &Reload &Recharger Fichier Split &Line Segments &Diviser bords &Automatic Cutter Compensation &Compensation outil automatique &Milling &Fraisage &Drag Knife &Cutter &Lathe &Tour &Top View &Vue de dessus &Isometric View Vue &Isometric &Save Project As... &Sauvegarde du projet &Millimeters &Milimètres &Inches &Inches Filter: %s selected Filter: %s selectioné <html><h2><center>You are using</center></h2><body bgcolor=<center><img src=':images/dxf2gcode_logo.png' border='1' color='white'></center></body><h2>Version:</h2><body>%s: %s<br>Last change: %s<br>Changed by: %s<br></body><h2>Where to get help:</h2>For more information and updates, please visit <a href='http://sourceforge.net/projects/dxf2gcode/'>http://sourceforge.net/projects/dxf2gcode/</a><br>For any questions on how to use dxf2gcode please use the <a href='https://www.ltspiceusers.ch/forums/english-section.67/'>https://www.ltspiceusers.ch/forums/english-section.67/</a><br>To log bugs, or request features please use the <a href='http://sourceforge.net/p/dxf2gcode/tickets/'>issue tracking system</a><br><h2>License and copyright:</h2><body>This program is written in Python and is published under the <a href='http://www.gnu.org/licenses/'>GNU GPLv3 license.</a><br></body></html> <html><h2><center>Vous utilisez</center></h2><body bgcolor=<center><img src=':images/dxf2gcode_logo.png' border='1' color='white'></center></body><h2>Version:</h2><body>%s: %s<br>Dernier Changements: %s<br>Changé par: %s<br></body><h2>Où trouver de l'aide:</h2>Pour plus d'informations et mises a jour , Visitez s'il vous plait <a href='http://sourceforge.net/projects/dxf2gcode/'>http://sourceforge.net/projects/dxf2gcode/</a><br>Pour toutes questions sur l'utilisation de dxf2gcode s'il vous plait utilisez le <a href='https://www.ltspiceusers.ch/forums/english-section.67/'>https://www.ltspiceusers.ch/forums/english-section.67/</a><br>To log bugs, or request features please use the <a href='http://sourceforge.net/p/dxf2gcode/tickets/'>issue tracking system</a><br><h2>License and copyright:</h2><body>Ce programme est écrit en Python et publié sous <a href='http://www.gnu.org/licenses/'>GNU GPLv3 license.</a><br></body></html> &Mirror All Mirror all X / Y-Axis Mirror all on X-Axis: Mirror all on Y-Axis: MessageBox You are using DXF2GCODE Vous utilisez DXF2GCODE Version %s (%s) Version %s(%s) For more information and updates visit: Pour plus d'informations et mise a jour visite: MyConfig errors reading %s: lecture erreurs %s: Missing value or section. Valeur ou section manquante. trying to rename bad cfg %s to %s Essai renommage mauvais cfg %s à %s rename(%s,%s) failed: %s renommage(%s,%s) échoué: %s renamed bad varspace %s to '%s' renommage mauvais varspace %s à '%s' created default varspace '%s' varspace '%s' par défaut créé Tools table Table outils Custom actions Actions personalisées Software config Configuration du logiciel Machine config Configuration Machine Output settings Paramètres de Sortie Automatic tool config Outil de configuration automatique Separator between identifier and value: Séparateur entre Identifiant et Valeur Define the tools here: Définir l'outil ici: Define here custom GCODE that can be inserted anywhere in the program: Définir ici GCODE perso qui peut etre inseré n'importe ou dans le programe mm mm in in mm/min mm/min IPS IPS By default look for DXF files in: Par defaut recherche de fichiers DXF: By default export generated G-Code to: Par defaut export G-CODE générer vers: Location of executable: Position de l'executable Command-line options: Options sur ligne de commande Axes' identifiers Identificateur des Axes First axis: Premier Axe: Second axis: Second Axe Third axis: Troisième Axe: Start and end's coordinate Coordonnées de début et fin Safety margin: Marge de sécurité: Machine type (default): type de Machine(défaut) Output Sorties The configuration file version ({0}) doesn't match the software expected version ({1}). You have to delete (or carefully edit) the configuration file "{2}" to solve the problem. Le fichier de configuration ({0}) ne colle avec les exeptions de version ({1}). Vous devez détruire(ou éditer soigneusement) le fichier de configuration "{2}" pour résoudre le problème. By default save Project files to: Par défaut sauvez les fichiers du projet vers: Update paths with last used path: General settings Paramètres Généraux 3D mode (requires OpenGL - restart needed) Mode 3D (Requiert OpenGL - Necessite redémarrage) Display disabled paths (default) Montre les chemins déselectionnés(Defaut) Live update export route (default) Route de mise à jour réseau (Defaut) Milling Fraisage Split line segments (default) Diviser ligne en segments (defauts) Automatic cutter compensation (default) Compensation outil automatique (defaut) Configuration values use the unit (restart needed): valeur des Unité de configuration (Redémarrage nécessaire): Export the G-Code to stdout (instead of a file) Export du G-CODE sur la sortie ( a la place d'un fichier ) Third axis' defaults Troisième axe' defaut Retraction coordinate: Coordonnées de repos: Workpiece origin coordinate: Slice depth: Profondeur de la tranche: Final mill depth: Profondeur de perçage final: G1 feed rates Vitesse de déplacement G1 First and second axis (2D plane): Premier et second axe (plan 2D): Cutter compensation Compensation outil cutter Cutter compensation is done by machine (check box if machine reconizes G41 and G42 commands / uncheck otherwise. This also disables pocket milling.) La Coupe de compensation est donnée par la machine(Vérifié si la machine reconnait les commandes G41 et G42/sinon corrigé.Cela désactive aussi la fraiseuse) Drag Knife options options de glissement du Couteau Retract to drag depth ("Third axis slice depth") if angle exceeds: Retour a la profondeur de coupe("profondeur de coupe Troisième axe")si l'angle est dépassé: By default enable the TSP optimization for ordering shapes (TSP = Travelling Salesman Problem) Par défaut l'optimisation TSP pour ordonner les couches(TSP = problème du voyageur de commerce. ) TSP optimizer Optimiseur TSP Optimizer behaviour: Comportement de l'optimiseur: Mutation rate: Taux de mutation: Max population: Population Maximum: Max iterations: Itérations Maximum: Starting point: Point de départ: DXF default import point tolerance: DXF import point de tolérance par défaut: DXF import spline check: DXF import et controle des lignes: DXF default import fit tolerance: DXF import par défaut des limites de tolérance: insert elements which are part of a block to layer where the block is inserted Insérez des éléments qui sont des morceaux du bloc vers le calque ou le bloc est inséré Parameters' identifiers Paramètres d ' Identification Infeed depth: Profondeur de passe: Workpiece top: Dessus de la pièce: Retraction area: Aire de repos: G1 feed rate for first and second axis (2D plane): Vitesse de déplacement G1 pour le premier et le second axe(Plan 2D): G1 feed rate for third axis: Vitesse de déplacement G1 pour le troisième axe: Tool number: Numéros de l'outils : Tool diameter: Diamètre de l'outils: Spindle speed: Vitesse du moteur d'usinage: Start radius (cutter compensation): Angle de départ(Compensation coupe) File used for logging (restart needed): Fichier utilisé pour les journeaux(Redémarage nécéssaire) On stderr console log messages with importance minimal to level (restart needed): sur terminal affichage message avec un niveau d'importance minimal(Redémarrage nécéssaire): For log-file log messages with importance minimal to level (restart needed): Pour fichier des journeaux message avec un niveau d'importance minimal(Redémarrage nécéssaire): For message box log messages with importance minimal to level (restart needed): Pour boite a message affichage message avec un niveau d'importance minimal(Redémarrage nécéssaire): The configuration file version ({0}) doesn't match any of the software expected version ({1}). You have to delete (or carefully edit) the configuration file "{2}" to solve the problem. Start and end's coordinate and scaling standard multiplier First axis start/end coordiante: Second axis start/end coordinate: Scale first and second axis: MyDropDownMenu Invert Selection Inverser Sélection Disable Selection Desactiver Sélection Enable Selection Activer Sélection Switch Direction Inverser Direction Set Nearest StartPoint Créer point entrée à proximité Cutter Compensation Compensation outil G40 No Compensation G40 Pas de compensation G41 Left Compensation G41 Compensation à Gauche G42 Right Compensation G42 Compensation à Droite The selected shapes have the following direction: %i Les formes sélectionnées ont la direction suivante: %i Switched Direction at Shape Nr: %i Direction inversée à la forme N°: %i Changed Cutter Correction to None for shape: %i Compensation outil Forme N°: %i Annulée Changed Cutter Correction to left for shape: %i Compensation outil à gauche Forme N°: %i Validée Changed Cutter Correction to right for shape: %i Compensation outil à droite Forme N°: %i Validée Pocket Mill Fraiseuse de poche Drill Bore Perceuse,Alésage Set to True for Pocket Mill for shape: %i Vrai pour fraiseuse de poche pour forme: %i Set to False for Pocket Mill for shape: %i Faux pour fraiseuse de poche sur forme: %i Set to True for G73 Drill, for shape: %i Vrai pour perceuse G73,sur forme: %i Set to False for G73 Drill, for shape: %i Faux pour perceuse G73,sur forme: %i Set Sharpest StartPoint MyGraphicsView Autoscaling to extend: %s Agrandissement: %s MyPostProConfig errors reading %s: Lecture erreurs %s: Missing value or section. Valeur ou section manquante. syntax errors in postpro_config file Erreur syntaxe fichier postpro_config trying to rename bad cfg %s to %s Essai renommage mauvais cfg %s à %s rename(%s,%s) failed: %s renommage(%s,%s) échoué: %s renamed bad varspace %s to '%s' renommage mauvais varspace %s à '%s' created default varspace '%s' varspace '%s' créé par défaut read existing varspace '%s' lecture varspace '%s' existant Software config Configuration du logiciel Output specifications Préconnisations de Sortie Output format description: Description du format de Sortie Output file extension: Extension du Fichier de sortie: Output type: Type de Sortie: Output options Options des Sorties Export absolute coordinates Export des coordonnées absolues The postprocessor configuration file version ({0}) doesn't match the software expected version ({1}). You have to delete (or carefully edit) the configuration file "{2}" to solve the problem. Le fichier de configuration du post-processeur({0}) ne correspond pas au exception de la version du soft ({1}).Vous devez détruire(ou soigneusement éditez) le fichier de configuration"{2}" pour resoudre le problème. Cancel cutter compensation at each slice Abandon de la compensation de coupe a chaque couche Perform cutter compensation outside the piece Mise en place compensation de coupe en dehors de la piece Export only counter clockwise arcs Export uniquement des arcs sens des aiguilles de montre Maximum arc radius: Angle maxi de l'arc: Export all arcs as line seg Export de tous les arcs comme segment de lingne G-code constants Constantes G-CODE Units in millimeters: Unités en millimètre: Units in inch: Unités en Pouce: Absolute programming: Programmation Absolue: Incremental programming: Programation incrémental: Startup: Départ: End: Fin: Output formatting Formatage de la sortie Windows line-endings Fenètre des lignes de fin Prepend numbers with the '+' sign for positive values Précédez les nombres du signe '+' pour une valeur positive Number of digits before the decimal separator: Nombre de chiffre avant le séparateur décimal: Padding with '0' digit before the decimal separator Mettre a '0' les chiffres avant le séparateur décimal Number of digits after the decimal separator: Nombre de chiffre après le séparateur décimal: Padding with '0' digit after the decimal separator Mettre a '0' les chiffres après le séparateur décimal Decimal separator: Séparateur Décimale: Line numbers Numéros de ligne Export line numbers Export des numéros de lignes Line number starts at: Numérotation des lignes commence à: Line number step: Pas des numéros de ligne: G-code codes Codes G-Code Tool change: Changement d'outils: Feed rate change: Changement vitesse de déplacement: Rapid positioning for XY plane: Positionnement rapide pour le plan XY: Rapid positioning for Z plane: Positionnement rapide pour le plan Z: Linear feed move for XY plane: Vitesse de déplacement lineaire pour le plan XY: Linear feed move for Z plane: Vitesse de déplacement lineaire pour le plan Z: Linear feed move for drilling: Vitesse mouvement linéaire pour perceuse: Clockwise feed move: Vitesse de Mouvement sens des aiguilles de montre: Counter clockwise feed move: Affichage Vitesse de Mouvement sens des aiguilles de montre: Disable cutter compensation: Désactiver la compensation de coupe: Left cutter compensation: Compensation de coupe a gauche: Right cutter compensation: Compensateion de coupe a droite: Placed in front of any shape: Placez sur la face avant de chaque forme: Placed after any shape: Placez après chaque forme: Comment for current shape: Commentaire pour la forme courante: The postprocessor configuration file version ({0}) doesn't match any of the software expected version ({1}). You have to delete (or carefully edit) the configuration file "{2}" to solve the problem. Custom GCode Repeat Drill move for slices (only use wit abs coordinates) Linear retract move during drilling: Define here custom GCODE that can be inserted anywhere in the program: Définir ici GCODE perso qui peut etre inseré n'importe ou dans le programe MyPostProcessor created default varspace Espace variables créé par défaut Beginning export of Layer Nr. %s, Name %s Exportation du calque N°. %s, Nom %s Nr. of Shapes %s; Nr. of Shapes in Route %s Nb. de formes %s; Nb. de formes sur pacours %s Beginning export of Shape Nr: %s Exportation de la forme N°: %s Export to STDOUT was successful Export vers STDOUT réussi Export to FILE was successful Export vers FILE réussi Warning during Export Attention pendant exportation Cannot Save the File Fichier ne pouvant être sauvegardé (Generated with: %s, Version: %s, Date: %s) (Généré avec: %s, Version: %s, Date: %s) (Time: %s) (Heure: %s) (Created from file: %s) (Créé à partir du fichier: %s) Postprocessor configuration Configuratiion du Postprocesseur (Output format description: %s) (Description du format de Sortie:%s) (Generated with: %s) (Version: %s, Date: %s) (Used Postprocessor: %s) OffArcGeo Unsupported geometry type: %s Types de géométries :%s Non supporté OffLineGeo Unsupported geometry type: %s Types de géométries :%s Non supporté PopUpDialog Auto Auto OK Ok Cancel Abandon PopulationClass Wrong begin art of TSP chosen Mauvais début art de TSP choisi Project New/Unrecognized shapes added for layer:%s; %s Nouveau/Formes inconnues ajoutées au calques;%s;%s ReadDXF Reading DXF Structure Lecture structure DXF Creating Contours of Block Nr: %i Création contours du bloc N°: %i Creating Contours of Entities Création contours des entités Warning reading linepairs Attention lecture linepairs Reading stopped at line %i. "%s" is not a valid code (number) - please, check/correct dxf file Echec lecture lignes arrêté ligne %i. Vérifier/corriger ligne "%s" dans le fichier dxf Short Elements Eléments courts Length of some Elements too short! Length must be greater than tolerance. Skipped Geometries Longueur de certains éléments trop petite! La longueur doit être supérieure à la tolérance Did read %i of linepairs from DXF Lire %i des lignes paires du DXF Element ignored: %s Elément ignoré: %s Shape Analysing the shape for CW direction Nr: %s Analyse de forme pour CW direction N°: %s Had to reverse the shape to be CW Obligation d'inverser la forme pour etre CW Clicked Point: %s Point selectionné: %s Old Start Point: %s Ancien point de départ: %s New Start Point: %s Nouveau point de départ: %s ERROR: Z infeed depth is null! ERREUR: Profondeur de passe Z nulle! WARNING: initial mill depth (%i) is lower than end mill depth (%i). Using end mill depth as final depth. ATTENTION: profondeur d'usinage initiale (%i) inférieure à la profondeur d'usinage totale (%i). Utilisation de cette dernière. Shoelace method cannot (directly) be applied to this shape La méthode Shoelace ne peux pas être appliqué (directement) a cette forme WARNING: initial mill depth (%f0.2) is lower than end mill depth (%f0.2). Using end mill depth as final depth. DANGER:Profondeur de perçage initiale (%f0.2) est inférieur à la profondeur perçage (%f0.2). Utilisez la profondeur de perçage total Z infeed depth is null! Warning during Export Attention pendant exportation Workpiece Top Z (%f0.2) is lower than end mill depth (%f0.2) Initial mill depth (%f0.2) is lower than end mill depth (%f0.2) TreeHandler [en] [fr] Name Nom Nr Nr Optimal path Chemin optimum Type Type Base point Point de Base Scale Echelle Rotation Rotation self.self Error: Z infeed depth is null! Workpiece Top Z (%f0.2) is lower than end mill depth (%f0.2) Initial mill depth (%f0.2) is lower than end mill depth (%f0.2) dxf2gcode-20240509/i18n/dxf2gcode_de.ts0000644000000000000000000021417214617073574016015 0ustar rootroot @default syntax errors in postpro_config file Syntax Fehler in der Postprozessor Konfigurationsdatei. trying to rename bad cfg %s to %s Versuche falsche Konfigurationsdatei umzubennen von %s zu %s rename(%s,%s) failed: %s Das Umbenennen (%s, %s) ist fehlgeschlagen: %s renamed bad varspace %s to '%s' Falsche Konfigurationsdatei wurde umbenannt von %s zu %s created default varspace '%s' Es wurden die Standard Variablen erstellt: '%s' read existing varspace '%s' Es wird die vorhanden Konfigurationsdatei gelesen '%s' ArcGeo Missing value for Arc Geometry Fehlender Wert für Arc Geometrie CfgLineEdit Not enough chars (expected {0}, found {1}) for the field "{2}" Nicht genügend Zeichen (erwartet {0}, gefunden {1}) für das Feld "{2}" CfgTableCustomActions The cell at line {0}, column 0 must not be empty for the table "{1}" Die Zelle in Zeile {0}, Spalte 0 darf für die Tabelle "{1}" nicht leer sein Found {0} duplicate elements for the table "{1}" {0} doppelte Elemente für die Tabelle "{1}" gefunden CfgTableToolParameters The cell at line {0}, column 0 must not be empty for the table "{1}" Die Zelle in Zeile {0}, Spalte 0 darf für die Tabelle "{1}" nicht leer sein Found {0} duplicate elements for the table "{1}" {0} doppelte Elemente für die Tabelle "{1}" gefunden The table "{0}" must always contains tool number '1' Die Tabelle "{0}" muss immer die Werkzeugnummer '1' enthalten CfgTextEdit Not enough chars (expected {0}, found {1}) for the field "{2}" Nicht genügend Zeichen (erwartet {0}, gefunden {1}) für das Feld "{2}" ConfigWindow Please correct the following error(s): Bitte korrigieren sie den/die folgenden Fehler: Invalid changes Ungültige Änderungen Duplicate the current post-processor Dupliziere den aktuellen Postprozessor Add a new post-processor with default values Füge einen neuen Postprozessor mit Standardwerten hinzu Remove the current post-processor Entferne den aktuellen Postprozessor Duplicate a configuration file Dupliziere eine Konfigurationsdatei Enter a new filename (without extension): Geben Sie einen neuen Dateinamen (ohne Erweiterung) ein: An error occured while duplicating the file "{0}". Check that it doesn't already exists for example Beim Duplizieren der Datei "{0}" ist ein Fehler aufgetreten. Überprüfen Sie, ob die Datei nicht bereits vorhanden ist Add a configuration file Füge eine Konfigurationsdatei hinzu Enter filename (without extension): Geben Sie den Dateinamen (ohne Erweiterung) ein: An error occured while creating the file "{0}". Check that it doesn't already exists for example Beim Erstellen der Datei "{0}" ist ein Fehler aufgetreten. Überprüfen Sie, ob diese nicht bereits vorhanden ist Delete configuration file? Konfigurationsdatei löschen? Are you sure you want to permanently remove the file "{0}" Möchten Sie die Datei "{0}“ wirklich dauerhaft entfernen An error occured while removing the file "{0}". Remove it manually Beim Entfernen der Datei "{0}" ist ein Fehler aufgetreten. Entfernen Sie diese manuell GLWidget Using OpenGL version: %s OpenGL-Version %s wird verwendet GeoentArc Found extrusion direction: %s Extrusionsrichtung gefunden: %s GeoentCircle Found extrusion direction: %s Extrusionsrichtung gefunden: %s GeoentLine Found extrusion direction: %s Extrusionsrichtung gefunden: %s MainWindow Open file Datei öffnen All supported files (*.dxf *.DXF *.ps *.PS *.pdf *.PDF *%s);;DXF files (*.dxf *.DXF);;PS files (*.ps *.PS);;PDF files (*.pdf *.PDF);;Project files (*%s);;All types (*.*) Alle unterstützte Dateien (*.dxf *.DXF *.ps *.PS *.pdf *.PDF *%s);;DXF Dateien (*.dxf *.DXF);;PS Dateien (*.ps *.PS);;PDF Dateien (*.pdf *.PDF);;Project files (*%s);;Alle Dateien (*.*) File: %s selected Datei: %s wurde ausgewählt Reloading file: %s Die Datei wird neu geladen: %s Optimize order of enabled shapes per layer Optimierung der Shape Reihenfolge für jedes Layer getrennt Updating order according to TreeView Die Reihenfolge wird auf Stand gebracht wie im TreeView dargestellt Nr. of Shapes %s; Nr. of Shapes in Route %s Gesamtanzahl der Shapes: %s; Anzahl der Shapes in der Export Reihenfolge %s Export Order for start: %s Export Reihenfolge für den Start: %s TSP start values initialised for Layer %s TSP Startwerte initialisiert für den Layer: %s Shapes to write: %s Shapes die exportiert werden: %s Fixed order: %s Feste Reihenfolge: %s TSP done with result: %s TSP wurde durchgeführt mit dem Ergebniss: %s New Export Order after TSP: %s Neue Export Reihenfolge nach durchgeführter TSP: %s Export the enabled shapes Exportiere die Enabled Shapes Sorted layers: Sortierte Layer: Export to file Exportiere in Datei set Tolerances Toleranzen einstellen Sending Postscript/PDF to pstoedit Sende Postscipt/PDF Datei an pstoedit Loaded layers: %s Geladene Layers: %s Loaded blocks: %s Geladene Blöcke: %s Contour tolerances Kontur Toleranzen Tolerance for common points [%s]: Toleranz für gemeinsame Punkte [%s]: Tolerance for curve fitting [%s]: Toleranz für Kurven Anpassung [%s]: Scale Contour Skaliere Konturen Scale Contour by factor: Skaliere Konturen mit dem Faktor: Rotate Contour Rotiere Konturen Rotate Contour by deg: Rotiere Konturen um Winkelgrad: Workpiece zero offset Werkstück Nullpunkt verschieben Offset %s axis %s: Verschiebe %s Achse um %s: Loading file: %s Lade Datei: %s Block %i includes %i Geometries, reduced to %i Contours, used layers: %s Block %i beinhaltet %i Geometrien, reduziert zu %i Konturen, Benutzte Layer: %s Loaded %i entity geometries; reduced to %i contours; used layers: %s; number of inserts %i Es wurde %i Entities Geometrien geladen; anzahl Konturen %i; verwendete Layers: %s; anzahl Inserts: %i Closing Beende Program Z Infeed depth Z Zustell Tiefe Z Drag depth Z Zug Tiefe <html><h2><center>You are using</center></h2><body bgcolor=<center><img src=':images/dxf2gcode_logo.png' border='1' color='white'></center></body><h2>Version:</h2><body>%s: %s<br>Last change: %s<br>Changed by: %s<br></body><h2>Where to get help:</h2>For more information and updates, please visit <a href='http://sourceforge.net/projects/dxf2gcode/'>http://sourceforge.net/projects/dxf2gcode/</a><br>For any questions on how to use dxf2gcode please use the <a href='https://groups.google.com/forum/?fromgroups#!forum/dxf2gcode-users'>mailing list</a><br>To log bugs, or request features please use the <a href='http://sourceforge.net/projects/dxf2gcode/tickets/'>issue tracking system</a><br><h2>License and copyright:</h2><body>This program is written in Python and is published under the <a href='http://www.gnu.org/licenses/'>GNU GPLv3 license.</a><br></body></html> <html><h2><center>Sie benutzen</center></h2><body bgcolor=<center><img src=':images/dxf2gcode_logo.png' border='1' color='white'></center></body><h2>Version:</h2><body>%s: %s<br>Zuletzt geändert: %s<br>Geändert von: %s<br></body><h2>Wo man Hilfe findet:</h2>Für mehr Information zum Programm und Möglichen Updates besuchen sie bitte <a href='http://sourceforge.net/projects/dxf2gcode/'>http://sourceforge.net/projects/dxf2gcode/</a><br>Für alle Fragen zur Bedienung von DXF2GCODE benutzen Sie bitte die <a href='https://groups.google.com/forum/?fromgroups#!forum/dxf2gcode-users'>Mailing List</a><br>Für gefundene Bugs oder Feature Anfragen benutzen Sie bitte das <a href='http://sourceforge.net/projects/dxf2gcode/tickets/'>Issue Tracking System</a><br><h2>Lizens und Copyright:</h2><body>Das Programm wurde mit der Freeware Programmiersprache Python geschrieben und ist unter der <a href='http://www.gnu.org/licenses/'>GNU GPLv3 Lizenz </a>veröffentlicht<br></body></html> No Z-Axis for lathe Keine Z-Achse für Drehmaschine Cannot Save the File Die Datei kann nicht gespeichert werden Entities Entities Collapse all items Reduziere alle Items Expand all items Erweitere alle Items Layers Layer Move-up the selected shape/layer Verschiebe Auswahl nach oben Move-down the selected shape/layer Verschiebe Auswahl nach unten / speed / speed start rad. (comp) Milling will start at Z = "Workpiece top Z" - "Z infeed depth" Fräsen beginnt bei Z = "Werkstück Top Z" -"Z Zustellstiefe" File Datei Export the current project to G-Code Aktuelles Projet exportieren View Ansicht Options Optionen Help Hilfe Open... Datei laden Load DXF or other supported document DXF oder unterstütztes Format laden Ctrl+O Ctrl+O Exit Beenden Exit DXF2GCODE and close window DXF2GCODE beenden Ctrl+Q Ctrl+Q Show Path Directions Zeige Pfad Richtung Always shows the path direction in the plot (not only while selected) Pfrad Richtung immer anzeigen (Ebenfalls für inaktive Pfade) Show Disabled Paths Zeige ausgeblendete Pfade Autoscale Auto Skalierung Delete G0 Paths Lösche Eilgang Pfade Tolerances Toleranzen Scale All Alles skalierene Rotate All Alles drehen Move Workpiece Zero Nullpunkt verschieben About Über DXF2GCODE Optimize Paths Pfade optimieren Ctrl+Shift+O Ctrl+Shift+O Export Shapes Pfade exportieren Ctrl+Shift+E Ctrl+Shift+E Optimize and Export Shapes Pfade optimieren und exportieren Ctrl+E Ctrl+E Live Update Export Route Live update der optmierten Reihenfolge Reload Datei neu laden Ctrl+R Ctrl+R DXF2GCODE Split line segments, e.g. can be used for compensation (G41/G42) in combination with EMC Linien teilen, kann z.B. in Verbindung mit G41/G42 in EMC verwendet werden Feed rate XY XY Vorschub Z Final mill depth Z Frästiefe Z Safety margin Z Sicherheits Abstand Z Retraction area Z Rückzugsebene Z Workpiece top Z Werkstück TOP Start X X Start Feed rate Z Z Vorschub Start Y Y Start Automatic Cutter Compensation Automatische Fräsradienkorrektur Machine Type Maschinen Typ Split Line Segments Linien teilen Milling Fräsen Drag Knife Zugmesser (Drag Knife) Cannot locate file: %s Datei kann nicht gefunden werden: %s Manually open file: %s Datei manuell öffnen: %s Save project to file Projekt in Datei speichern Save project to FILE was successful Das Speichern des Projekts in FILE war erfolgreich Warning during Save Project As Warnung beim Speichern des Projekts unter Ctrl+V, A Ctrl+V, A Ctrl+V, T Ctrl+V, T Ctrl+V, I Ctrl+V, I Ctrl+S Ctrl+S About DXF2GCODE Über DXF2GCODE Drawing units: inches Zeichnungseinheiten: Zoll [in] [in] [IPM] [IPM] Drawing units: millimeters Zeichnungseinheiten: Millimeter [mm] [mm] [mm/min] [mm/min] Ctrl+Shift+C Ctrl+Shift+C Ctrl+Shift+P Ctrl+Shift+P <html><h2><center>You are using</center></h2><body bgcolor=<center><img src=':images/dxf2gcode_logo.png' border='1' color='white'></center></body><h2>Version:</h2><body>%s: %s<br>Last change: %s<br>Changed by: %s<br></body><h2>Where to get help:</h2>For more information and updates, please visit <a href='http://sourceforge.net/projects/dxf2gcode/'>http://sourceforge.net/projects/dxf2gcode/</a><br>For any questions on how to use dxf2gcode please use the <a href='https://groups.google.com/forum/?fromgroups#!forum/dxf2gcode-users'>mailing list</a><br>To log bugs, or request features please use the <a href='http://sourceforge.net/p/dxf2gcode/tickets/'>issue tracking system</a><br><h2>License and copyright:</h2><body>This program is written in Python and is published under the <a href='http://www.gnu.org/licenses/'>GNU GPLv3 license.</a><br></body></html> <html><h2><center>Du benutzt</center></h2><body bgcolor=<center><img src=':images/dxf2gcode_logo.png' border='1' color='white'></center></body><h2>Version:</h2><body>%s: %s<br>Letzte Bearbeitung: %s<br>Bearbeitet von: %s<br>Deutsche Übersetzung von Daniel Luginbühl<br></body><h2>Wo bekommen Sie Hilfe:</h2>Weitere Informationen und Aktualisierungen finden Sie unter <a href='http://sourceforge.net/projects/dxf2gcode/'>http://sourceforge.net/projects/dxf2gcode/</a><br>Bei Fragen zur Verwendung von dxf2gcode besuchen Sie bitte dieses <a href='https://www.ltspiceusers.ch/forums/deutsche-sektion.66'>Forum</a><br>Um Fehler zu protokollieren oder Funktionen anzufordern, verwenden Sie bitte das <a href='http://sourceforge.net/p/dxf2gcode/tickets/'>Issue-Tracking-System</a><br><h2>Lizenz und Copyright:</h2><body>Dieses Programm ist in Python geschrieben und veröffentlicht unter <a href='http://www.gnu.org/licenses/'>GNU GPLv3 license.</a><br></body></html> No differences found. Ergo, workpiece zero is not moved Keine Unterschiede gefunden. Ergo wird der Werkstücknullpunkt nicht verschoben Command: {0} returned error code: {1} Befehl: {0} zurückgegebener Fehlercode: {1} Please make sure you have installed {0}, and configured it in the config file. Bitte stellen Sie sicher, dass Sie {0} installiert und in der Konfigurationsdatei konfiguriert haben. Converting {0} to {1} Konvertieren von {0} nach {1} Python version 2 is not supported, please use it with python version 3. Python Version 2 wird nicht unterstützt, bitte verwenden Sie Python Version 3. Error exporting shapes: %s Fehler beim Exportieren von Shapes: %s &File &Datei &Export &Exportieren &View &Ansicht &Options &Optionen Mac&hine Type Maschinen &Typ Measurement &units &Messeinheiten &Help &Hilfe &Open... Datei &laden... &Exit &Beenden &Show Path Directions Zeige Pfad &Richtung Show Disabled &Paths Zeige &ausgeblendete Pfade &Autoscale &Auto Skalierung &Delete G0 Paths Lösche &Eilgang Pfade &Configuration... Konfiguration... &Postprocessor configuration... &Postprozessorkonfiguration... &Tolerances &Toleranzen &Scale All Alles &skalierene &Rotate All Alles &drehen &Move Workpiece Zero &Nullpunkt verschieben &About &Über DXF2GCODE &Optimize Paths Pfade &optimieren &Export Shapes Pfade &exportieren Optimize &and Export Shapes Pfade optimieren &und exportieren &Live Update Export Route &Live update der optmierten Reihenfolge &Reload Datei &neu laden Split &Line Segments &Linien teilen &Automatic Cutter Compensation &Automatische Fräsradienkorrektur &Milling &Fräsen &Drag Knife &Zugmesser (Drag Knife) &Lathe &Hilfe &Top View Ansicht von &oben &Isometric View &Isometrische Ansicht &Save Project As... Projekt &speichern als... &Millimeters &Millimeter &Inches &Inches (Zoll) Filter: %s selected <html><h2><center>You are using</center></h2><body bgcolor=<center><img src=':images/dxf2gcode_logo.png' border='1' color='white'></center></body><h2>Version:</h2><body>%s: %s<br>Last change: %s<br>Changed by: %s<br></body><h2>Where to get help:</h2>For more information and updates, please visit <a href='http://sourceforge.net/projects/dxf2gcode/'>http://sourceforge.net/projects/dxf2gcode/</a><br>For any questions on how to use dxf2gcode please use the <a href='https://www.ltspiceusers.ch/forums/english-section.67/'>https://www.ltspiceusers.ch/forums/english-section.67/</a><br>To log bugs, or request features please use the <a href='http://sourceforge.net/p/dxf2gcode/tickets/'>issue tracking system</a><br><h2>License and copyright:</h2><body>This program is written in Python and is published under the <a href='http://www.gnu.org/licenses/'>GNU GPLv3 license.</a><br></body></html> &Mirror All Mirror all X / Y-Axis Mirror all on X-Axis: Mirror all on Y-Axis: MessageBox You are using DXF2GCODE Sie verwenden DXF2GCODE Version %s (%s) Version %s (%s) For more information and updates visit: Weitere Informationen und Aktualisierungen finden Sie unter: MyConfig errors reading %s: Fehler während dem laden von %s: Missing value or section. Fehlender Wert in der Section. trying to rename bad cfg %s to %s Versuche falsche Konfigurationsdatei umzubennen von %s zu %s rename(%s,%s) failed: %s Das Umbenennen (%s, %s) ist fehlgeschlagen: %s renamed bad varspace %s to '%s' Falsche Konfigurationsdatei wurde umzubennen von %s zu %s created default varspace '%s' Es wurden die Standard Variablen erstellt: '%s' The configuration file version ({0}) doesn't match the software expected version ({1}). You have to delete (or carefully edit) the configuration file "{2}" to solve the problem. Die Version der Konfigurationsdatei ({0}) stimmt nicht mit der erwarteten Softwareversion ({1}) überein. Sie müssen die Konfigurationsdatei "{2}" löschen (oder sorgfältig bearbeiten), um das Problem zu lösen. Tools table Werkzeuge Custom actions Benutzerdefinierte Aktionen Software config Software Konfig Machine config Maschinen Konfig G1 feed rate for first and second axis (2D plane): G1 Vorschub für erste und zweite Achse (2D-Ebene): G1 feed rate for third axis: G1 Vorschub für dritte Achse: Output settings Ausgabeeinstellungen DXF default import point tolerance: Standard Punkttoleranz für DXF Import: DXF import spline check: DXF Import spline Check: DXF default import fit tolerance: Standard Passungstoleranz für DXF Import: insert elements which are part of a block to layer where the block is inserted Fügen Sie Elemente, die Teil eines Blocks sind, in die Ebene ein, in der der Block eingefügt wird Automatic tool config Automatische Werkzeugkonfiguration Separator between identifier and value: Trennzeichen zwischen Bezeichner und Wert: Define the tools here: Definieren Sie hier die Werkzeuge: Define here custom GCODE that can be inserted anywhere in the program: Definieren Sie hier benutzerdefinierten GCODE, der überall im Programm eingefügt werden kann: mm mm in inch mm/min mm/min IPS IPS By default look for DXF files in: Suche standardmäßig nach DXF-Dateien in: By default export generated G-Code to: Exportiere generierten G-Code Standardmäßig nach: Location of executable: Speicherort der ausführbaren Datei: Command-line options: Befehlszeilenoptionen: Axes' identifiers Kennungen der Achsen First axis: Erste Achse: Second axis: Zweite Achse: Third axis: Dritte Achse: Start and end's coordinate Start- und Endkoordinaten Third axis' defaults Standardwerte der dritten Achse Retraction coordinate: Rückzugskoordinate: Safety margin: Sicherheitsabstand: Workpiece origin coordinate: Werkstück-Ursprungskoordinate: Slice depth: Schnitttiefe: Final mill depth: Endfrästiefe: G1 feed rates G1 Vorschübe First and second axis (2D plane): Erste und zweite Achse (2D-Ebene): General settings Allgemeine Einstellungen 3D mode (requires OpenGL - restart needed) 3D-Modus (erfordert OpenGL - Neustart erforderlich) Display disabled paths (default) Deaktivierte Pfade anzeigen (Standard) Live update export route (default) Live-Update der Exportroute (Standard) Milling Fräsen Split line segments (default) Liniensegmente teilen (Standard) Automatic cutter compensation (default) Automatische Fräserkompensation (Standard) Machine type (default): Maschinentyp (Standard): Configuration values use the unit (restart needed): Konfigurationswerte verwenden die Einheit (Neustart erforderlich): Output Ausgabe Export the G-Code to stdout (instead of a file) Exportiere den G-Code nach stdout (statt in eine Datei) Retract to drag depth ("Third axis slice depth") if angle exceeds: Zurückziehen auf Ziehtiefe ("Schnitttiefe der dritten Achse"), wenn der Winkel Folgendes überschreitet: By default enable the TSP optimization for ordering shapes (TSP = Travelling Salesman Problem) Aktiviere standardmäßig die TSP-Optimierung für die Anordnung von Shapes (TSP = Traveling Salesman Problem) TSP optimizer TSP-Optimierer Optimizer behaviour: Verhalten des Optimierers: Mutation rate: Mutationsrate: Max population: Max population: Max iterations: Maximale Iterationen: Starting point: Startpunkt: Parameters' identifiers Parameter Bezeichner Infeed depth: Zustelltiefe: Workpiece top: Werkstück oben: Retraction area: Rückzugsbereich: Tool number: Werkzeugnummer: Tool diameter: Werkzeugdurchmesser: Spindle speed: Spindelgeschwindigkeit: Start radius (cutter compensation): Startradius (Fräserkompensation): File used for logging (restart needed): Für die Protokollierung verwendete Datei (Neustart erforderlich): On stderr console log messages with importance minimal to level (restart needed): Protokolliere Meldungen mit minimaler Wichtigkeit auf der stderr-Konsole (Neustart erforderlich): For log-file log messages with importance minimal to level (restart needed): Für Log-Datei protokolliere Meldungen mit minimaler Wichtigkeit (Neustart erforderlich): For message box log messages with importance minimal to level (restart needed): Für Meldungsfenster-protokolliere Meldungen mit minimaler Wichtigkeit (Neustart erforderlich): Cutter compensation Fräserkompensation Drag Knife options Ziehmesser-Optionen Cutter compensation is done by machine (check box if machine reconizes G41 and G42 commands / uncheck otherwise. This also disables pocket milling.) Die Fräserkompensation erfolgt durch die Maschine (Kontrollkästchen aktivieren, wenn die Maschine G41 und G42 Befehle versteht / andernfalls deaktivieren. Dadurch wird auch das Taschenfräsen deaktiviert.) By default save Project files to: Standard Verzeichnis für Project Dateien: Update paths with last used path: Setze Pfade auf letzen verwendeten Pfad: The configuration file version ({0}) doesn't match any of the software expected version ({1}). You have to delete (or carefully edit) the configuration file "{2}" to solve the problem. Start and end's coordinate and scaling standard multiplier First axis start/end coordiante: Second axis start/end coordinate: Scale first and second axis: MyDropDownMenu Invert Selection Auswahl umkehren Disable Selection Auwahl disabeln Enable Selection Auswahl enablen Switch Direction Richtung umkehren Set Nearest StartPoint Startpunkt hier setzen Cutter Compensation Fräser Kompenstation G40 No Compensation G40 Keine Kompensation G41 Left Compensation G41 Kompensation links G42 Right Compensation G42 Kompensation rechts The selected shapes have the following direction: %i Die ausgewählt Shapes haben die Richtung: %i Switched Direction at Shape Nr: %i Richtung der Shape umgekehrt bei Nr: %i Changed Cutter Correction to None for shape: %i Fräser Korrektur zu G40 geändet bei Shape Nr: %i Changed Cutter Correction to left for shape: %i Fräser Korrektur zu Links geändet bei Shape Nr: %i Changed Cutter Correction to right for shape: %i Fräser Korrektur zu Rechts geändet bei Shape Nr: %i Pocket Mill Taschenfräsen Set to True for Pocket Mill for shape: %i Auf „True“ setzen für's Taschenfräsen von Shape: %i Set to False for Pocket Mill for shape: %i Auf „False“ setzen für's Taschenfräsen von Shape: %i Set to True for G73 Drill, for shape: %i Auf „True“ setzen für G73 Bohren von Shape: %i Set to False for G73 Drill, for shape: %i Auf „False“ setzen für G73 Bohren von Shape: %i Drill Bore Bohrung bohren Set Sharpest StartPoint Startpunkt schärfste Kante MyGraphicsView Autoscaling to extend: %s Automatische Skalierung auf: %s MyPostProConfig errors reading %s: Fehler während dem lesen von %s: Missing value or section. Fehlender Wert oder Sektion. syntax errors in postpro_config file Syntax Fehler in der Postprozessor Konfigurationsdatei trying to rename bad cfg %s to %s Versuche falsche Konfigurationsdatei umzubennen von %s zu %s rename(%s,%s) failed: %s Das Umbenennen (%s, %s) ist fehlgeschlagen: %s renamed bad varspace %s to '%s' Falsche Konfigurationsdatei wurde umzubennen von %s zu %s created default varspace '%s' Es wurden die Standard Variablen erstellt: '%s' read existing varspace '%s' Es wird die vorhanden Konfigurationsdatei gelesen '%s' The postprocessor configuration file version ({0}) doesn't match the software expected version ({1}). You have to delete (or carefully edit) the configuration file "{2}" to solve the problem. Die Version der Postprozessor-Konfigurationsdatei ({0}) stimmt nicht mit der erwarteten Softwareversion ({1}) überein. Sie müssen die Konfigurationsdatei "{2}" löschen (oder sorgfältig bearbeiten), um das Problem zu lösen. Software config Softwarekonfiguration Output specifications Ausgabe-Spezifikationen Output format description: Beschreibung des Ausgabeformats: Output file extension: Erweiterung der Ausgabedatei: Output type: Ausgabetyp: Output options Ausgabeoptionen Export absolute coordinates Absolute Koordinaten exportieren Cancel cutter compensation at each slice Breche die Fräserkompensation bei jedem Slice ab Perform cutter compensation outside the piece Fräserkompensation außerhalb des Werkstücks durchführen Export only counter clockwise arcs Nur "gegen den Uhrzeigersinn Bögen" exportieren Maximum arc radius: Maximaler Bogenradius: G-code constants G-Code Konstanten Units in millimeters: Einheiten in Millimeter: Units in inch: Einheiten in Zoll: Absolute programming: Absolute Programmierung: Incremental programming: Inkrementelle Programmierung: Startup: Start-up: End: Ende: Output formatting Ausgabeformatierung Prepend numbers with the '+' sign for positive values Stelle Zahlen mit „+“ Zeichen für positive Werte voran Number of digits before the decimal separator: Anzahl der Stellen vor dem Dezimaltrennzeichen: Padding with '0' digit before the decimal separator Auffüllen mit Ziffer '0' vor dem Dezimaltrennzeichen Number of digits after the decimal separator: Anzahl der Stellen nach dem Dezimaltrennzeichen: Padding with '0' digit after the decimal separator Auffüllen mit Ziffer '0' nach dem Dezimaltrennzeichen Decimal separator: Dezimaltrennzeichen: Line numbers Zeilennummern Export line numbers Zeilennummern exportieren Line number starts at: Zeilennummer beginnt bei: Line number step: Zeilennummer Schritt: G-code codes G-Code-Codes Tool change: Werkzeugwechsel: Feed rate change: Vorschubänderung: Rapid positioning for XY plane: Schnelle Positionierung für XY-Ebene: Rapid positioning for Z plane: Schnelle Positionierung für Z-Ebene: Linear feed move for XY plane: Lineare Vorschubbewegung für die XY-Ebene: Linear feed move for Z plane: Lineare Vorschubbewegung für die Z-Ebene: Clockwise feed move: Vorschubbewegung im Uhrzeigersinn: Counter clockwise feed move: Vorschub gegen den Uhrzeigersinn: Disable cutter compensation: Fräserkompensation deaktivieren: Left cutter compensation: Fräserkompensation links: Right cutter compensation: Fräserkompensation rechts: Placed in front of any shape: Vor einem beliebigen Shape platziert: Placed after any shape: Nach einem beliebigen Shape platziert: Comment for current shape: Kommentar zum aktuellen Shape: Export all arcs as line seg Alle Bögen als Liniensegment exportieren Windows line-endings Windows-Zeilenenden Linear feed move for drilling: Lineare Vorschubbewegung zum Bohren: The postprocessor configuration file version ({0}) doesn't match any of the software expected version ({1}). You have to delete (or carefully edit) the configuration file "{2}" to solve the problem. Custom GCode Define here custom GCODE that can be inserted anywhere in the program: Definieren Sie hier benutzerdefinierten GCODE, der überall im Programm eingefügt werden kann: Repeat Drill move for slices (only use wit abs coordinates) Linear retract move during drilling: MyPostProcessor created default varspace Es wurden die Standard Variablen erstellt Beginning export of Layer Nr. %s, Name %s Beginne den Export von Layer Nr. %s, Name %s Nr. of Shapes %s; Nr. of Shapes in Route %s Gesamtanzahl der Shapes: %s; Anzahl der Shapes in der Export Reihenfolge %s Beginning export of Shape Nr: %s Beginne den Export von Shape Nr: %s Export to STDOUT was successful Export in STDOUT war erfolgreich Export to FILE was successful Export in eine Datei war erfolgreich Warning during Export Warnung während dem Exportieren Cannot Save the File Die Datei kann nicht gespeichert werden (Generated with: %s, Version: %s, Date: %s) (Generiert mit: %s, Version: %s, Datum: %s) (Time: %s) (Zeit: %s) (Created from file: %s) (Erstellt aus der Datei: %s) Postprocessor configuration Konfiguration des Postprozessors (Output format description: %s) (Beschreibung des Ausgabeformats: %s) (Generated with: %s) (Version: %s, Date: %s) (Used Postprocessor: %s) OffArcGeo Unsupported geometry type: %s Nicht unterstützter Geometrietyp: %s OffLineGeo Unsupported geometry type: %s Nicht unterstützter Geometrietyp: %s PopUpDialog Auto Auto OK OK Cancel Abbrechen PopulationClass Wrong begin art of TSP chosen Nicht vorhandene Anfangs Art für den TSP Export gewählt Project New/Unrecognized shapes added for layer:%s; %s Neue/unerkannte Shapes hinzugefügt für Ebene: %s; %s ReadDXF Reading DXF Structure Lese DXF Strucktur Creating Contours of Block Nr: %i Erstelle die Konturen für den Block Nr: %i Creating Contours of Entities Erstelle die Konturen für die Entities Warning reading linepairs Warnung während dem lesen der Linienpaare Reading stopped at line %i. "%s" is not a valid code (number) - please, check/correct dxf file Fehler während dem einlesen Gestoppt bei Linie %i. Bitte überprüfen/korrigieren sie die Linie "%s" in der DXF Datei Short Elements Kurze Elemente Length of some Elements too short! Length must be greater than tolerance. Skipped Geometries Die Länge von einigen Elementen ist zu kurz! Die Länge muss größer der Toleranz sein. Überspringe die Geometrien Did read %i of linepairs from DXF Habe %i der Linienpaare aus DXF gelesen Element ignored: %s Element ignoriert: %s Shape Analysing the shape for CW direction Nr: %s Überprüfe die Shape auf CW Fräsrichtung, Nr: %s Had to reverse the shape to be CW Die Shape wurde umgekehrt um CW Richtung zu entsprechen Clicked Point: %s Ausgewählter Punkt: %s Old Start Point: %s Alter Start Punkt: %s New Start Point: %s Neuer Start Punkt: %s ERROR: Z infeed depth is null! FEHLER: Z Zustelltiefe is null! WARNING: initial mill depth (%i) is lower than end mill depth (%i). Using end mill depth as final depth. Warnung: Anfangs Frästiefe (%i) ist niedriger alls die End Frästiefe (%i). Verwende End Frästiefe als Frästiefe. Shoelace method cannot (directly) be applied to this shape Die Schnürsenkelmethode kann nicht (direkt) auf dieses Shape angewendet werden WARNING: initial mill depth (%f0.2) is lower than end mill depth (%f0.2). Using end mill depth as final depth. WARNUNG: Die anfängliche Frästiefe (%f0.2) ist geringer als die Schaftfrästiefe (%f0.2). Schaftfräsertiefe als Endtiefe verwenden. Z infeed depth is null! Warning during Export Warnung während dem Exportieren Workpiece Top Z (%f0.2) is lower than end mill depth (%f0.2) Initial mill depth (%f0.2) is lower than end mill depth (%f0.2) TreeHandler [en] [en] Name Name Nr Nr Optimal path Optimaler Weg Type Typ Base point Basispunkt Scale Skalieren Rotation Drehung self.self Error: Z infeed depth is null! Workpiece Top Z (%f0.2) is lower than end mill depth (%f0.2) Initial mill depth (%f0.2) is lower than end mill depth (%f0.2) dxf2gcode-20240509/dxf2gcode.egg-info/0000755000000000000000000000000014617100260015660 5ustar rootrootdxf2gcode-20240509/dxf2gcode.egg-info/top_level.txt0000664000000000000000000000005514617100260020414 0ustar rootrootdxf2gcode dxf2gcode_images5_rc dxf2gcode_ui5 dxf2gcode-20240509/dxf2gcode.egg-info/requires.txt0000664000000000000000000000003114617100260020254 0ustar rootrootconfigobj PyQt5 PyOpenGL dxf2gcode-20240509/dxf2gcode.egg-info/dependency_links.txt0000664000000000000000000000000114617100260021730 0ustar rootroot dxf2gcode-20240509/dxf2gcode.egg-info/SOURCES.txt0000664000000000000000000000465214617100260017555 0ustar rootrootCOPYING MANIFEST.in README.txt dxf2gcode.appdata.xml dxf2gcode.desktop dxf2gcode.pro dxf2gcode.py dxf2gcode.ui dxf2gcode_images.qrc make_exe.py make_py_uic.py make_tr.py setup.py st-setup.py dxf2gcode/__init__.py dxf2gcode.egg-info/PKG-INFO dxf2gcode.egg-info/SOURCES.txt dxf2gcode.egg-info/dependency_links.txt dxf2gcode.egg-info/requires.txt dxf2gcode.egg-info/top_level.txt dxf2gcode/core/__init__.py dxf2gcode/core/arcgeo.py dxf2gcode/core/boundingbox.py dxf2gcode/core/breakgeo.py dxf2gcode/core/customgcode.py dxf2gcode/core/entitycontent.py dxf2gcode/core/holegeo.py dxf2gcode/core/intersect.py dxf2gcode/core/layercontent.py dxf2gcode/core/linegeo.py dxf2gcode/core/pocketmill.py dxf2gcode/core/pocketmove.py dxf2gcode/core/point.py dxf2gcode/core/point3d.py dxf2gcode/core/project.py dxf2gcode/core/shape.py dxf2gcode/core/shapeoffset.py dxf2gcode/core/stmove.py dxf2gcode/dxfimport/__init__.py dxf2gcode/dxfimport/biarc.py dxf2gcode/dxfimport/classes.py dxf2gcode/dxfimport/geoent_arc.py dxf2gcode/dxfimport/geoent_circle.py dxf2gcode/dxfimport/geoent_ellipse.py dxf2gcode/dxfimport/geoent_insert.py dxf2gcode/dxfimport/geoent_line.py dxf2gcode/dxfimport/geoent_lwpolyline.py dxf2gcode/dxfimport/geoent_point.py dxf2gcode/dxfimport/geoent_polyline.py dxf2gcode/dxfimport/geoent_spline.py dxf2gcode/dxfimport/importer.py dxf2gcode/dxfimport/spline_convert.py dxf2gcode/globals/__init__.py dxf2gcode/globals/config.py dxf2gcode/globals/constants.py dxf2gcode/globals/d2gexceptions.py dxf2gcode/globals/globals.py dxf2gcode/globals/helperfunctions.py dxf2gcode/globals/logger.py dxf2gcode/gui/__init__.py dxf2gcode/gui/aboutdialog.py dxf2gcode/gui/arrow.py dxf2gcode/gui/canvas.py dxf2gcode/gui/canvas2d.py dxf2gcode/gui/canvas3d.py dxf2gcode/gui/configwindow.py dxf2gcode/gui/messagebox.py dxf2gcode/gui/popupdialog.py dxf2gcode/gui/routetext.py dxf2gcode/gui/treehandling.py dxf2gcode/gui/treeview.py dxf2gcode/gui/wpzero.py dxf2gcode/postpro/__init__.py dxf2gcode/postpro/breaks.py dxf2gcode/postpro/postprocessor.py dxf2gcode/postpro/postprocessorconfig.py dxf2gcode/postpro/tspoptimisation.py i18n/dxf2gcode_de.ts i18n/dxf2gcode_fr.ts i18n/dxf2gcode_ru.ts images/DXF2GCODE-001.ico images/blocks.png images/collapse-all.png images/custom.png images/delete.png images/dxf2gcode.icns images/dxf2gcode.svg images/dxf2gcode_logo.png images/expand-all.png images/go-down.png images/go-up.png images/layer.png images/list-add.png images/list-remove.png images/shape.pngdxf2gcode-20240509/dxf2gcode.egg-info/PKG-INFO0000664000000000000000000000066614617100260016767 0ustar rootrootMetadata-Version: 2.1 Name: dxf2gcode Version: 20240509 Summary: 2D drawings to CNC machine compatible G-Code converter.. Home-page: https://sourceforge.net/p/dxf2gcode/wiki/Home/ Author: Christian Kohloeffel Author-email: christian.kohloeffel@googlemail.com License: GPLv3 License-File: COPYING DXF2GCODE is a tool for converting 2D (dxf, pdf, ps) drawings to CNC machine compatible GCode. Release Candidate based on development branch dxf2gcode-20240509/dxf2gcode/0000755000000000000000000000000014617100260014166 5ustar rootrootdxf2gcode-20240509/dxf2gcode/__init__.py0000664000000000000000000000000214011526166016276 0ustar rootroot dxf2gcode-20240509/dxf2gcode/postpro/0000755000000000000000000000000014617100260015674 5ustar rootrootdxf2gcode-20240509/dxf2gcode/postpro/tspoptimisation.py0000664000000000000000000003746513554645444021556 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Vinzenz Schulz # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from __future__ import division from random import random, shuffle from math import floor, ceil import dxf2gcode.globals.globals as g import dxf2gcode.globals.constants as c from PyQt5 import QtCore import logging logger = logging.getLogger("PostPro.TSP") class TspOptimization(object): """ Optimization using the Travelling Salesman Problem (TSP) algorithim """ def __init__(self, st_end_points, order): self.shape_nrs = len(st_end_points) self.iterations = int(self.shape_nrs) * 10 self.pop_nr = min(int(ceil(self.shape_nrs / 8.0) * 8.0), g.config.vars.Route_Optimisation['max_population']) self.mutate_rate = g.config.vars.Route_Optimisation['mutation_rate'] self.opt_route = [] self.order = order self.st_end_points = st_end_points # Generate the Distance Matrix self.DistanceMatrix = DistanceMatrixClass() self.DistanceMatrix.generate_matrix(st_end_points) # Generation Population self.Population = PopulationClass([self.shape_nrs, self.pop_nr], self.DistanceMatrix.matrix, self.mutate_rate) # Initialise the Result Class self.Fittness = FittnessClass(self.Population, list(range(self.Population.size[1])), self.order) self.Fittness.calc_st_fittness(self.DistanceMatrix.matrix, range(self.shape_nrs)) # Anfang der Reihenfolge immer auf den letzen Punkt legen # Beginning of the sequence always put the last point ??? self.Fittness.set_startpoint() # Function to correct the order of the elements self.Fittness.correct_constrain_order() # logger.debug('Calculation of start fitness TSP: %s' %self) # logger.debug('Size Distance matrix: %s', len(self.DistanceMatrix.matrix)) # Erstellen der ersten Ergebnisse # Create the first result self.Fittness.calc_cur_fittness(self.DistanceMatrix.matrix) self.Fittness.select_best_fittness() self.opt_route = self.Population.pop[self.Fittness.best_route] # ERstellen der 2 opt Optimierungs Klasse # Create the 2 opt optimization class ??? # self.optmove=ClassOptMove(dmatrix=self.DistanceMatrix.matrix, nei_nr=int(round(self.shape_nrs/10))) def calc_next_iteration(self): """ calc_next_iteration() """ # Algorithmus ausfürhen self.Population.genetic_algorithm(self.Fittness, self.mutate_rate) # Für die Anzahl der Tours die Tours nach dem 2-opt Verfahren optimieren # Optimise the number of Tours de Tours to the 2-opt method ??? # for pop_nr in range(len(self.Population.pop)): # #print ("Vorher: %0.2f" %self.calc_tour_length(tours[tour_nr])) # self.Population.pop[pop_nr]=self.optmove.do2optmove(self.Population.pop[pop_nr]) # #print ("Nachher: %0.2f" %self.calc_tour_length(tours[tour_nr])) # Anfang der Reihenfolge immer auf den letzen Punkt legen # Always put the last point at the beginning of the sequence self.Fittness.set_startpoint() # Korrektur Funktion um die Reihenfolge der Elemente zu korrigieren # Function to correct the order of the elements self.Fittness.correct_constrain_order() # Fittness der jeweiligen Routen ausrechen # Calculate fitness of each route self.Fittness.calc_cur_fittness(self.DistanceMatrix.matrix) # Straffunktion falls die Route nicht der gewünschten Reihenfolge entspricht # Function if the route is not the desired sequence ??? # Best route to choose self.Fittness.select_best_fittness() self.opt_route = self.Population.pop[self.Fittness.best_route] # logger.debug('Calculation next iteration of TSP: %s' %self) def __str__(self): #res = self.Population.pop return "Iteration nrs: %i" % (self.iterations * 10) +\ "\nShape nrs: %i" % self.shape_nrs +\ "\nPopulation: %i" % self.pop_nr +\ "\nMutate rate: %0.2f" % self.mutate_rate +\ "\norder: %s" % self.order +\ "\nStart length: %0.1f" % self.Fittness.best_fittness[0] +\ "\nOpt. length: %0.1f" % self.Fittness.best_fittness[-1] +\ "\nOpt. route: %s" % self.opt_route class PopulationClass: def __init__(self, size, dmatrix, mutate_rate): self.size = size self.mutate_rate = mutate_rate self.pop = [] self.rot = [] # logger.debug('The Population size is: %s' %self.size) for pop_nr in range(self.size[1]): # logger.debug("======= TSP initializing population nr %i =======" % pop_nr) if g.config.vars.Route_Optimisation['begin_art'] == 'ordered': self.pop.append(list(range(size[0]))) elif g.config.vars.Route_Optimisation['begin_art'] == 'random': self.pop.append(self.random_begin(size[0])) elif g.config.vars.Route_Optimisation['begin_art'] == 'heuristic': self.pop.append(self.heuristic_begin(dmatrix[:])) else: logger.error(self.tr('Wrong begin art of TSP chosen')) for rot_nr in range(size[0]): self.rot.append(0) def __str__(self): string = "\nPopulation size: %i X %i \nMutate rate: %0.2f \nRotation Matrix:\n%s \nPop Matrix:"\ % (self.size[0], self.size[1], self.mutate_rate, self.rot) for line in self.pop: string += '\n' + str(line) return string def tr(self, string_to_translate): """ Translate a string using the QCoreApplication translation framework @param: string_to_translate: a unicode string @return: the translated unicode string if it was possible to translate """ return str(QtCore.QCoreApplication.translate("PopulationClass", string_to_translate)) def random_begin(self, size): """ random_begin for TSP """ tour = list(range(size)) shuffle(tour) return tour def heuristic_begin(self, dmatrix): """ heuristic_begin for TSP """ tour = [] possibilities = list(range(len(dmatrix[0]))) start_nr = int(floor(random()*len(dmatrix[0]))) # Hinzufügen der Nr und entfernen aus possibilies # Add and remove the number of possibilities tour.append(start_nr) possibilities.pop(possibilities.index(tour[-1])) counter = 0 while len(possibilities): counter += 1 tour.append(self.heuristic_find_next(tour[-1], possibilities, dmatrix)) possibilities.pop(possibilities.index(tour[-1])) # if counter % 10 == 0: # logger.debug("TSP heuristic searching nr %i" % counter) return tour def heuristic_find_next(self, start, possibilities, dmatrix): """ heuristic_find_next() for TSP """ # Auswahl der Entfernungen des nächsten Punkts # The distances of the point selection min_dist = 1e99 darray = dmatrix[start] for pnr in possibilities: if darray[pnr] < min_dist: min_point = pnr min_dist = darray[pnr] return min_point def genetic_algorithm(self, Result, mutate_rate): """ genetic_algorithm for TSP """ self.mutate_rate = mutate_rate # Neue Population Matrix erstellen # Create new Population Matrix new_pop = [] for p_nr in range(self.size[1]): new_pop.append([]) # Tournament Selection 1 between Parents (2 Parents remaining) ts_r1 = list(range(self.size[1])) shuffle(ts_r1) winners_r1 = [] tmp_fittness = [] for nr in range(self.size[1] // 2): if Result.cur_fittness[ts_r1[nr * 2]] < Result.cur_fittness[ts_r1[(nr * 2) + 1]]: winners_r1.append(self.pop[ts_r1[nr * 2]]) tmp_fittness.append(Result.cur_fittness[ts_r1[nr * 2]]) else: winners_r1.append(self.pop[ts_r1[(nr * 2) + 1]]) tmp_fittness.append(Result.cur_fittness[ts_r1[(nr * 2) + 1]]) # print(tmp_fittness) # Tournament Selection 2 only one Parent remaining ts_r2 = list(range(self.size[1] // 2)) shuffle(ts_r2) for nr in range(self.size[1] // 4): if tmp_fittness[ts_r2[nr * 2]] < tmp_fittness[ts_r2[(nr * 2) + 1]]: winner = winners_r1[ts_r2[nr * 2]] else: winner = winners_r1[ts_r2[(nr * 2) + 1]] # Schreiben der Gewinner in die neue Population Matrix # print(winner) for pnr in range(2): new_pop[pnr * self.size[1] // 2 + nr] = winner[:] # Crossover Gens from 2 Parents crossover = list(range(self.size[1] // 2)) shuffle(crossover) for nr in range(self.size[1] // 4): # child = parent2 # Parents are the winners of the first round (Genetic Selection?) parent1 = winners_r1[crossover[nr * 2]][:] child = winners_r1[crossover[(nr * 2) + 1]][:] # The genetic line that is exchanged in the child parent1 indx = [int(floor(random()*self.size[0])), int(floor(random()*self.size[0]))] indx.sort() while indx[0] == indx[1]: indx = [int(floor(random()*self.size[0])), int(floor(random()*self.size[0]))] indx.sort() gens = parent1[indx[0]:indx[1] + 1] # Remove the exchanged genes for gen in gens: child.pop(child.index(gen)) # Insert the new genes at a random position ins_indx = int(floor(random()*self.size[0])) new_children = child[0:ins_indx] + gens + child[ins_indx:len(child)] # Write the new children in the new population matrix for pnr in range(2): new_pop[int((pnr + 0.5) * self.size[1] / 2 + nr)] = new_children[:] # Mutate the 2nd half of the population matrix mutate = list(range(self.size[1] // 2)) shuffle(mutate) num_mutations = int(round(mutate_rate * self.size[1] / 2)) for nr in range(num_mutations): # The genetic line that is exchanged in the child parent1 ??? indx = [int(floor(random()*self.size[0])), int(floor(random()*self.size[0]))] indx.sort() while indx[0] == indx[1]: indx = [int(floor(random()*self.size[0])), int(floor(random()*self.size[0]))] indx.sort() # Zu mutierende Line # Line to be mutated ???? mutline = new_pop[self.size[1] // 2 + mutate[nr]] if random() < 0.75: # Gen Abschnitt umdrehen / Turn gene segment cut = mutline[indx[0]:indx[1] + 1] cut.reverse() mutline = mutline[0:indx[0]] + cut + mutline[indx[1] + 1:len(mutline)] else: # 2 Gene tauschen / 2 Gene exchange orgline = mutline[:] mutline[indx[0]] = orgline[indx[1]] mutline[indx[1]] = orgline[indx[0]] new_pop[self.size[1] // 2 + mutate[nr]] = mutline # Assign the new population matrix self.pop = new_pop class DistanceMatrixClass: """ DistanceMatrixClass """ def __init__(self): self.matrix = [] self.size = [0, 0] def __str__(self): string = ("Distance Matrix; size: %i X %i" % (self.size[0], self.size[1])) for line_x in self.matrix: string += "\n" for x_vals in line_x: string += "%8.2f" % x_vals return string def generate_matrix(self, st_end_points): self.matrix = [[st_end_y[1].distance(st_end_x[0]) for st_end_x in st_end_points] for st_end_y in st_end_points] self.size = [len(st_end_points), len(st_end_points)] class FittnessClass: def __init__(self, population, cur_fittness, order): self.population = population self.cur_fittness = cur_fittness self.order = order self.best_fittness = [] self.best_route = [] def __str__(self): return "\nBest Fittness: %s \nBest Route: %s \nBest Pop: %s"\ % (self.best_fittness[-1], self.best_route, self.population.pop[self.best_route]) def calc_st_fittness(self, matrix, st_pop): dis = matrix[st_pop[-1]][st_pop[0]] for nr in range(1, len(st_pop)): dis += matrix[st_pop[nr - 1]][st_pop[nr]] self.best_fittness.append(dis) def calc_cur_fittness(self, matrix): # logger.debug("Calculating current fittness len(self.population.pop): %s" # % len(self.population.pop)) # logger.debug("Length of self.cur_fittness: %s" %(len(self.cur_fittness))) for pop_nr in range(len(self.population.pop)): pop = self.population.pop[pop_nr] # logger.debug("pop_nr: %s" %pop_nr) dis = matrix[pop[-1]][pop[0]] for nr in range(1, len(pop)): dis += matrix[pop[nr - 1]][pop[nr]] self.cur_fittness[pop_nr] = dis # 2te Möglichkeit die Reihenfolge festzulegen (Korrekturfunktion=Aktiv) # Second option set the order (correction function = Active) def correct_constrain_order(self): """FIXME: in order to change the correction to have all ordered shapes in begin this might be the best place to change it. Maybe we can also have an additional option in the config file?""" for pop in self.population.pop: # Search the current order order_index = self.get_pop_index_list(pop) # Momentane Reihenfolge der indexe sortieren # Current sort order of the index ??? order_index.sort() # Indices according to correct order for ind_nr in range(len(order_index)): pop[order_index[ind_nr]] = self.order[ind_nr] def set_startpoint(self): n_pts = len(self.population.pop[-1]) for pop in self.population.pop: st_pt_nr = pop.index(n_pts - 1) # 99% of the time we don't have to reorder the arrays if st_pt_nr > 0: # Contour with the starting point at the beginning pop[:] = pop[st_pt_nr:n_pts] + pop[0:st_pt_nr] def get_pop_index_list(self, pop): return [pop.index(order) for order in self.order] def select_best_fittness(self): self.best_fittness.append(min(self.cur_fittness)) self.best_route = self.cur_fittness.index(self.best_fittness[-1]) dxf2gcode-20240509/dxf2gcode/postpro/postprocessorconfig.py0000644000000000000000000005126314617065372022406 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2016 # Christian Kohlöffel # Vinzenz Schulz # Jean-Paul Schouwstra # Xavier Izard # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ import os from configobj import ConfigObj, flatten_errors from validate import Validator import dxf2gcode.globals.globals as g from dxf2gcode.globals.d2gexceptions import * from dxf2gcode.gui.configwindow import * import dxf2gcode.globals.constants as c from PyQt5 import QtCore import logging logger = logging.getLogger("PostPro.PostProcessorConfig") SUPPORTED_CONFIGS = [8, 8.1] CONFIG_VERSION = SUPPORTED_CONFIGS[-1] """ version tag - increment this each time you edit CONFIG_SPEC compared to version number in config file so old versions are recognized and skipped """ POSTPRO_SPEC = str(''' # Section and variable names must be valid Python identifiers # do not use whitespace in names # do not edit the following section name: [Version] # do not edit the following value: config_version = float(default = "''' + str(CONFIG_VERSION) + '''") [General] # This extension is used in the save file export dialog. output_format = string(default=".ngc") # This title is shown in the export dialog and is used by the user to differentiate between the possible different postprocessor configurations. output_text = string(default="G-CODE for LinuxCNC") # This type defines the output format used in the export dialog. output_type = option('g-code', 'dxf', 'text', default = 'g-code') # Used to switch between absolute (G90) and relative/incremental coordinates (G91). abs_export = boolean(default=True) # If cutter compensation is used, e.g. G41 or G42, this option cancels the compensation when there is a momevement on the 3rd-axis, and enables the compensation again afterwards. cancel_cc_for_depth = boolean(default=False) # If cutter compensation is used (G41-G42) this will apply the cutter compensation outside the piece (i.e. it is applied before it is at milling depth). cc_outside_the_piece = boolean(default=True) # Used for dxfs which only support arcs that are in counterclockwise direction. Turning this on for normal G-Code will result in unintended output. export_ccw_arcs_only = boolean(default=False) # If an arc's radius exceeds this value, then it will be exported as a line. max_arc_radius = float(min = 0, default=10000) # Set this to true if you want to export als arcs as line segment export_arcs_as_lines = boolean(default=False) # If you want to repeat the Drill Move for each slice depth set this to True, for false it will be only be performed onece repeat_drill_move = boolean(default=True) code_begin_units_mm = string(default="G21 (Units in millimeters)") code_begin_units_in = string(default="G20 (Units in inches)") code_begin_prog_abs = string(default="G90 (Absolute programming)") code_begin_prog_inc = string(default="G91 (Incremental programming)") # This is code which will be written at the beginning of the exported file. code_begin = string(default="G64 (Default cutting) G17 (XY plane) G40 (Cancel radius comp.) G49 (Cancel length comp.)") # This is code which will be written at the end of the exported file. code_end = string(default="M2 (Program end)") [Number_Format] # Gives the indentation for the values. pre_decimals = integer(min = 0, default=4) # Gives the accuracy of the output after which it will be rounded. post_decimals = integer(min = 0, default=3) # Give the separator which is used in the exported values (e.g. '.' or ','). decimal_separator = string(default=".") # If true all values will be padded with zeros up to pre_decimals (e.g. 0001.000). pre_decimal_zero_padding = boolean(default=False) # If false e.g. 1.000 will be given as 1 only. post_decimal_zero_padding = boolean(default=True) win_line_endings = boolean(default=False) # If True 1.000 will be written as +1.000 signed_values = boolean(default=False) [Line_Numbers] # Enables line numbers into the exported G-Code file. use_line_nrs = boolean(default=False) line_nrs_begin = integer(default=10) line_nrs_step = integer(default=10) [Program] # This will be done after each layer, if different tools are used. tool_change = string(default=T%tool_nr M6%nlS%speed%nl) # This will be done after each change between cutting in plane or cutting in depth. feed_change = string(default=F%feed%nl) # This will be done between each shape to cut. rap_pos_plane = string(default=G0 X%XE Y%YE%nl) # This will be done between each shape to cut. rap_pos_depth = string(default=G0 Z%ZE %nl) # This will be used for shape cutting. lin_mov_plane = string(default= G1 X%XE Y%YE%nl) # This will be used for shape cutting. lin_mov_depth = string(default= G1 Z%ZE%nl) # This will be used to do the drilling of Dill Geometry (for each slice depth) lin_mov_drill = string(default=G1 Z%ZE%nl) # This will be used to retract while drilling operation (after each slice depth) lin_ret_drill = string(default=G0 Z%ZE%nlG0 Z%ZS%nl) arc_int_cw = string(default=G2 X%XE Y%YE I%I J%J%nl) # This will be used for shape cutting. arc_int_ccw = string(default=G3 X%XE Y%YE I%I J%J%nl) # Generally set to G40%nl cutter_comp_off = string(default=G40%nl) # Generally set to G41%nl cutter_comp_left = string(default=G41%nl) # Generally set to G42%nl cutter_comp_right = string(default=G42%nl) # This will be done before starting to cut a shape or a contour. pre_shape_cut = string(default=M3 M8%nl) # This will be done after cutting a shape or a contour. post_shape_cut = string(default=M9 M5%nl) # Defines comments' format. Comments are written at some places during the export in order to make the g-code better readable. comment = string(default=%nl(%comment)%nl) # Define here custom GCODE actions: # - name: this is the unique name of the action # - gcode: the text that will be inserted in the final program (each new line is also translated as a new line in the output file) # Custom actions can be inserted in the program by using right-click contextual menu on the treeview. [Custom_GCode] [[__many__]] gcode = string(default = "(change subsection name and insert your custom GCode here. Use triple quote to place the code on several lines)") ''').splitlines() """ format, type and default value specification of the global config file""" class MyPostProConfig(object): """ This class hosts all functions related to the PostProConfig File. """ def __init__(self, filename='postpro_config' + c.CONFIG_EXTENSION): """ initialize the varspace of an existing plugin instance init_varspace() is a superclass method of plugin @param filename: The filename for the creation of a new config file and the filename of the file to read config from. """ self.folder = os.path.join(g.folder, c.DEFAULT_POSTPRO_DIR) self.filename = os.path.join(self.folder, filename) self.version_mismatch = '' # no problem for now self.default_config = False # whether a new name was generated self.var_dict = dict() self.spec = ConfigObj(POSTPRO_SPEC, interpolation=False, list_values=False, _inspec=True) def load_config(self): """ This method tries to load the defined postprocessor file given in self.filename. If this fails it will create a new one """ try: # file exists, read & validate it self.var_dict = ConfigObj(self.filename, configspec=POSTPRO_SPEC) _vdt = Validator() result = self.var_dict.validate(_vdt, preserve_errors=True) validate_errors = flatten_errors(self.var_dict, result) if validate_errors: logger.error(self.tr("errors reading %s:") % self.filename) for entry in validate_errors: section_list, key, error = entry if key is not None: section_list.append(key) else: section_list.append('[missing section]') section_string = ', '.join(section_list) if error == False: error = self.tr('Missing value or section.') logger.error(section_string + ' = ' + error) if validate_errors: raise BadConfigFileError(self.tr("syntax errors in postpro_config file")) # check config file version against internal version if CONFIG_VERSION: fileversion = self.var_dict['Version']['config_version'] # this could raise KeyError if fileversion not in SUPPORTED_CONFIGS: raise VersionMismatchError(fileversion, SUPPORTED_CONFIGS) else: self.var_dict['Version']['config_version']=CONFIG_VERSION #if fileversion != CONFIG_VERSION: # raise VersionMismatchError(fileversion, CONFIG_VERSION) except VersionMismatchError: #raise VersionMismatchError(fileversion, CONFIG_VERSION) # version mismatch flag, it will be used to display an error. self.version_mismatch = self.tr("The postprocessor configuration file version ({0}) doesn't match any of the software expected version ({1}).\n\nYou have to delete (or carefully edit) the configuration file \"{2}\" to solve the problem.").format(fileversion, SUPPORTED_CONFIGS, self.filename) except Exception as inst: #logger.error(inst) (base, ext) = os.path.splitext(self.filename) badfilename = base + c.BAD_CONFIG_EXTENSION logger.debug(self.tr("trying to rename bad cfg %s to %s") % (self.filename, badfilename)) try: os.rename(self.filename, badfilename) except OSError as e: logger.error(self.tr("rename(%s,%s) failed: %s") % (self.filename, badfilename, e.strerror)) raise else: logger.debug(self.tr("renamed bad varspace %s to '%s'") % (self.filename, badfilename)) self.create_default_config() self.default_config = True logger.debug(self.tr("created default varspace '%s'") % self.filename) else: self.default_config = False logger.debug(self.tr("read existing varspace '%s'") % self.filename) # convenience - flatten nested config dict to access it via self.config.sectionname.varname self.var_dict.main.interpolation = False # avoid ConfigObj getting too clever self.update_config() def update_config(self): """ Call this function each time the self.var_dict is updated (eg when the postprocessor configuration window changes some settings) """ # convenience - flatten nested config dict to access it via self.config.sectionname.varname self.vars = DictDotLookup(self.var_dict) # add here any update needed for the internal variables of this class def make_settings_folder(self): """ This method creates the postprocessor settings folder if necessary """ try: os.mkdir(self.folder) except OSError: pass def create_default_config(self): """ If no postprocessor config file exists this function is called to generate the config file based on its specification. """ # check for existing setting folder or create one self.make_settings_folder() # derive config file with defaults from spec logger.debug(POSTPRO_SPEC) self.var_dict = ConfigObj(configspec=POSTPRO_SPEC) _vdt = Validator() self.var_dict.validate(_vdt, copy=True) self.var_dict.filename = self.filename self.var_dict.write() def save_varspace(self): self.var_dict.filename = self.filename self.var_dict.write() def print_vars(self): """ Print all the variables with their values """ print("Variables:") for k, v in self.var_dict['Variables'].items(): print(k, "=", v) @staticmethod def tr(string_to_translate): """ Translate a string using the QCoreApplication translation framework @param string_to_translate: a unicode string @return: the translated unicode string if it was possible to translate """ return str(QtCore.QCoreApplication.translate('MyPostProConfig', string_to_translate)) @staticmethod def makeConfigWidgets(): """ Build the postprocessor configuration widgets and store them into a dictionary. The structure of the dictionnary must match the structure of the postprocessor configuration file. The names of the keys must be identical to those used in the configfile. If a name is declared in the configfile but not here, it simply won't appear in the config window (the config_version for example must not be modified by the user, so it is not declared here) """ cfg_widget_def = OrderedDict([ ('__section_title__', { # This section is only used for assigning titles to the keys of the dictionnary (= name of the sections used in the config file). # This name is displayed in the tabs of the configuration window ; if no name is provided, the key name is used. A same title may be used for several keys : in this case, all the items that belongs to this section are regrouped into the same tab. # Note: the title may be specified in the section itselt too, using special entry "'__section_title__': Title to use" 'Custom_GCode' : MyPostProConfig.tr("Custom GCode")}), ('General', OrderedDict([ ('__section_title__', MyPostProConfig.tr("Software config")), ('__subtitle__', CfgSubtitle(MyPostProConfig.tr("Output specifications"))), ('output_text', CfgLineEdit(MyPostProConfig.tr('Output format description:'))), ('output_format', CfgLineEdit(MyPostProConfig.tr('Output file extension:'))), ('output_type', CfgComboBox(MyPostProConfig.tr('Output type:'))), ('__subtitle2__', CfgSubtitle(MyPostProConfig.tr("Output options"))), ('abs_export', CfgCheckBox(MyPostProConfig.tr('Export absolute coordinates'))), ('cancel_cc_for_depth', CfgCheckBox(MyPostProConfig.tr('Cancel cutter compensation at each slice'))), ('cc_outside_the_piece', CfgCheckBox(MyPostProConfig.tr('Perform cutter compensation outside the piece'))), ('export_ccw_arcs_only', CfgCheckBox(MyPostProConfig.tr('Export only counter clockwise arcs'))), ('max_arc_radius', CfgDoubleSpinBox(MyPostProConfig.tr('Maximum arc radius:'))), ('export_arcs_as_lines', CfgCheckBox(MyPostProConfig.tr('Export all arcs as line seg'))), ('repeat_drill_move', CfgCheckBox(MyPostProConfig.tr('Repeat Drill move for slices (only use wit abs coordinates)'))), ('__subtitle3__', CfgSubtitle(MyPostProConfig.tr("G-code constants"))), ('code_begin_units_mm', CfgLineEdit(MyPostProConfig.tr('Units in millimeters:'))), ('code_begin_units_in', CfgLineEdit(MyPostProConfig.tr('Units in inch:'))), ('code_begin_prog_abs', CfgLineEdit(MyPostProConfig.tr('Absolute programming:'))), ('code_begin_prog_inc', CfgLineEdit(MyPostProConfig.tr('Incremental programming:'))), ('code_begin', CfgTextEdit(MyPostProConfig.tr('Startup:'))), ('code_end', CfgTextEdit(MyPostProConfig.tr('End:'))) ])), ('Number_Format', OrderedDict([ ('__section_title__', MyPostProConfig.tr("Output formatting")), ('__subtitle__', CfgSubtitle(MyPostProConfig.tr("Output formatting"))), ('win_line_endings', CfgCheckBox(MyPostProConfig.tr('Windows line-endings'))), ('signed_values', CfgCheckBox(MyPostProConfig.tr("Prepend numbers with the '+' sign for positive values"))), ('pre_decimals', CfgSpinBox(MyPostProConfig.tr('Number of digits before the decimal separator:'))), ('pre_decimal_zero_padding', CfgCheckBox(MyPostProConfig.tr("Padding with '0' digit before the decimal separator"))), ('post_decimals', CfgSpinBox(MyPostProConfig.tr('Number of digits after the decimal separator:'))), ('post_decimal_zero_padding', CfgCheckBox(MyPostProConfig.tr("Padding with '0' digit after the decimal separator"))), ('decimal_separator', CfgLineEdit(MyPostProConfig.tr('Decimal separator:'))), ])), ('Line_Numbers', OrderedDict([ ('__section_title__', MyPostProConfig.tr("Output formatting")), ('__subtitle__', CfgSubtitle(MyPostProConfig.tr("Line numbers"))), ('use_line_nrs', CfgCheckBox(MyPostProConfig.tr('Export line numbers'))), ('line_nrs_begin', CfgSpinBox(MyPostProConfig.tr('Line number starts at:'))), ('line_nrs_step', CfgSpinBox(MyPostProConfig.tr('Line number step:'))) ])), ('Program', OrderedDict([ ('__section_title__', MyPostProConfig.tr("G-code codes")), ('tool_change', CfgLineEdit(MyPostProConfig.tr('Tool change:'))), ('feed_change', CfgLineEdit(MyPostProConfig.tr('Feed rate change:'))), ('rap_pos_plane', CfgLineEdit(MyPostProConfig.tr('Rapid positioning for XY plane:'))), ('rap_pos_depth', CfgLineEdit(MyPostProConfig.tr('Rapid positioning for Z plane:'))), ('lin_mov_plane', CfgLineEdit(MyPostProConfig.tr('Linear feed move for XY plane:'))), ('lin_mov_depth', CfgLineEdit(MyPostProConfig.tr('Linear feed move for Z plane:'))), ('lin_mov_drill', CfgLineEdit(MyPostProConfig.tr('Linear feed move for drilling:'))), ('lin_ret_drill', CfgLineEdit(MyPostProConfig.tr('Linear retract move during drilling:'))), ('arc_int_cw', CfgLineEdit(MyPostProConfig.tr('Clockwise feed move:'))), ('arc_int_ccw', CfgLineEdit(MyPostProConfig.tr('Counter clockwise feed move:'))), ('cutter_comp_off', CfgLineEdit(MyPostProConfig.tr('Disable cutter compensation:'))), ('cutter_comp_left', CfgLineEdit(MyPostProConfig.tr('Left cutter compensation:'))), ('cutter_comp_right', CfgLineEdit(MyPostProConfig.tr('Right cutter compensation:'))), ('pre_shape_cut', CfgLineEdit(MyPostProConfig.tr('Placed in front of any shape:'))), ('post_shape_cut', CfgLineEdit(MyPostProConfig.tr('Placed after any shape:'))), ('comment', CfgLineEdit(MyPostProConfig.tr('Comment for current shape:'))) ])), ('Custom_GCode', CfgTableCustomActions(MyPostProConfig.tr('Define here custom GCODE that can be inserted anywhere in the program:'))), ]) return cfg_widget_def class DictDotLookup(object): """ Creates objects that behave much like a dictionaries, but allow nested key access using object '.' (dot) lookups. """ def __init__(self, d): for k in d: if isinstance(d[k], dict): self.__dict__[k] = DictDotLookup(d[k]) elif isinstance(d[k], (list, tuple)): l = [] for v in d[k]: if isinstance(v, dict): l.append(DictDotLookup(v)) else: l.append(v) self.__dict__[k] = l else: self.__dict__[k] = d[k] def __getitem__(self, name): if name in self.__dict__: return self.__dict__[name] def __iter__(self): return iter(self.__dict__.keys()) # def __repr__(self): # return pprint.pformat(self.__dict__) dxf2gcode-20240509/dxf2gcode/postpro/postprocessor.py0000644000000000000000000007736714617065372021235 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2016 # Christian Kohlöffel # Vinzenz Schulz # Jean-Paul Schouwstra # Xavier Izard # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ import os import time import re from math import degrees import shutil import logging import dxf2gcode.globals.globals as g from dxf2gcode.core.point import Point from dxf2gcode.postpro.postprocessorconfig import MyPostProConfig from dxf2gcode.postpro.breaks import Breaks from dxf2gcode.gui.configwindow import * import dxf2gcode.globals.constants as c from PyQt5.QtWidgets import QMessageBox from PyQt5 import QtCore str_encode = lambda exstr: exstr logger = logging.getLogger("PostPro.PostProcessor") class MyPostProcessor(object): """ The PostProcessor Class includes the functions for getting the output variables from the PostProcessorConfig Classes and general function related to the export of the Code. """ def __init__(self): """ The initialisation of the Postprocessor class. This function is called during the initialisation of the Main Window. It checks during the initialization if a PostProcessor Config file exists and if not creates a new one. For the Save function it creates a list of all possible Postprocessor Config Files. """ self.version_mismatch = '' # no problem for now self.postprocessor_files = [] # store the postprocessors filenames self.postpro_file_used = None self.output_format = [] # store the postprocessors filenames extensions self.output_text = [] # store the postprocessors descriptions # Load the existing postprocessor config files, or create a new one self.loadCreateConfigFiles() self.config_postpro_window = ConfigWindow(MyPostProConfig.makeConfigWidgets(), title = self.tr("Postprocessor configuration")) #Enable the config file selector into the configuration widget self.config_postpro_window.setConfigSelectorCallback(self.postproConfigSelectionChangedCallback, self.postproConfigAddFileCallback, self.postproConfigRemoveFileCallback, self.postproConfigDuplicateFileCallback) self.config_postpro_window.setConfigSelectorFilesList(self.getConfigsList()) #Set the list of current configuration files self.config_postpro_window.finished.connect(self.updatePostprocessorConfiguration) def tr(self, string_to_translate): """ Translate a string using the QCoreApplication translation framework @param: string_to_translate: a unicode string @return: the translated unicode string if it was possible to translate """ return str(QtCore.QCoreApplication.translate("MyPostProcessor", string_to_translate)) def updatePostprocessorConfiguration(self, result): """ Some modification occured in the postprocessor configuration window, we need to save these changes into the config file. Once done, the signal postprocessor_configuration_changed is emitted, so that anyone interested in this information can connect to this signal. """ if result == ConfigWindow.Applied or result == ConfigWindow.Accepted: self.postpro_config_currently_edited.save_varspace() #Write the configuration into the config file (eg postpro_config.cfg, ...) self.postpro_config_currently_edited.update_config() def postproConfigSelectionChangedCallback(self, config_file_index): """ Callback function called whenever the current configuration file changes in the postprocessor config window. The current config object is updated accordingly (this object is only used by the configuration window, it doesn't affect the export functions of dxf2gcode) @param: the file index in the postprocessor_files[] list """ if config_file_index >= 0 and config_file_index < len(self.postprocessor_files): self.postpro_config_currently_edited = self.getPostProVars(config_file_index) self.config_postpro_window.affectValuesFromConfig(self.postpro_config_currently_edited.var_dict, self.postpro_config_currently_edited.var_dict.configspec) def postproConfigAddFileCallback(self, new_name): """ Callback function called whenever the user wants to add a new file in the postprocessor config window. It creates the new file from scratch, then reaload the list of configuration files and select the new file @param: the new filename """ result = True new_name += c.CONFIG_EXTENSION #Add the extension if new_name not in self.getConfigsList()['filename']: logger.debug("New postprocessor config file {0} is going to be created".format(new_name)) postpro_config = MyPostProConfig(filename=new_name) postpro_config.create_default_config() postpro_config.default_config = True self.loadCreateConfigFiles() self.config_postpro_window.setConfigSelectorFilesList(self.getConfigsList(), new_name) #Set the list of current configuration files else: #File already exists result = False return result def postproConfigRemoveFileCallback(self, remove_name): """ Callback function called whenever the user wants to delete a file in the postprocessor config window. It remove the file on the disk, then reaload the list of configuration files to reflect the changes @param: the filename to remove """ result = True file_to_remove = os.path.join(os.path.join(g.folder, c.DEFAULT_POSTPRO_DIR), remove_name) logger.debug("Postprocessor config file {0} is going to be removed".format(file_to_remove)) try: os.remove(file_to_remove) #Definitely removes the selected configfile except: logger.error("An error occured while removing the postprocessor config file {0} ; do the operation manually and restart the software.".format(file_to_remove)) result = False self.loadCreateConfigFiles() self.config_postpro_window.setConfigSelectorFilesList(self.getConfigsList()) #Set the list of current configuration files return result def postproConfigDuplicateFileCallback(self, duplicate_name, new_name): """ Callback function called whenever the user wants to duplicate a file in the postprocessor config window. It copies the file on the disk, then reaload the list of configuration files and select the new file @param: the filename to remove """ result = True new_name += c.CONFIG_EXTENSION if new_name not in self.getConfigsList()['filename']: new_file = os.path.join(os.path.join(g.folder, c.DEFAULT_POSTPRO_DIR), new_name) duplicate_file = os.path.join(os.path.join(g.folder, c.DEFAULT_POSTPRO_DIR), duplicate_name) logger.debug("Postprocessor config file {0} is going to be duplicated into {1}".format(duplicate_file, new_file)) try: shutil.copy(duplicate_file, new_file) #Duplicate the files except: logger.error("An error occured while duplicating the postprocessor config file {0} ; do the operation manually and restart the software.".format(duplicate_name)) result = False self.loadCreateConfigFiles() self.config_postpro_window.setConfigSelectorFilesList(self.getConfigsList(), new_name) #Set the list of current configuration files else: result = False return result def loadCreateConfigFiles(self): """ Load the existing postprocessor config files, or create a new one """ del self.postprocessor_files[:] # store the postprocessors filenames del self.output_format[:] # store the postprocessors filenames extensions del self.output_text[:] # store the postprocessors descriptions try: lfiles = sorted(os.listdir(os.path.join(g.folder, c.DEFAULT_POSTPRO_DIR))) """ FIXME Folder needs to be empty or valid config file within. """ # logger.debug(lfiles) except: # Create a Postprocessor File if none found in folder logger.debug(self.tr("created default varspace")) PostProConfig = MyPostProConfig() PostProConfig.create_default_config() PostProConfig.default_config = True lfiles = os.listdir(PostProConfig.folder) # Only files with the predefined extension, stated in c.CONFIG_EXTENSION # (default .cfg), are accepted for lfile in lfiles: if os.path.splitext(lfile)[1] == c.CONFIG_EXTENSION: self.postprocessor_files.append(lfile) if len(self.postprocessor_files) == 0: PostProConfig = MyPostProConfig() PostProConfig.create_default_config() PostProConfig.default_config = True lfiles = os.listdir(PostProConfig.folder) self.postprocessor_files = [] for lfile in lfiles: if os.path.splitext(lfile)[1] == c.CONFIG_EXTENSION: self.postprocessor_files.append(lfile) # Load all files to get the possible postprocessor configs to export self.get_output_vars() def getConfigsList(self): """ Return a dict with the postprocessor files names, their extentions, and the description """ return {'filename': self.postprocessor_files, 'extension': self.output_format, 'description': self.output_text} def get_output_vars(self): """ Reads all Postprocessor Config Files located in the PostProcessor Config Directory and creates a list of the possible output formats. """ for postprocessor_file in self.postprocessor_files: PostProConfig = MyPostProConfig(filename=postprocessor_file) PostProConfig.load_config() self.version_mismatch += PostProConfig.version_mismatch # Get possible version error encountered when opening the file self.output_format.append(PostProConfig.vars.General['output_format']) self.output_text.append(PostProConfig.vars.General['output_text']) def getPostProVars(self, file_index): """ Get the parameters of the Postprocessor Config File @param file_index: The index of the file to read and write variables in self.vars. """ self.postpro_file_used=self.postprocessor_files[file_index] PostProConfig = MyPostProConfig(filename=self.postprocessor_files[file_index]) PostProConfig.load_config() self.vars = PostProConfig.vars return PostProConfig def exportShapes(self, load_filename, save_filename, LayerContents): """ This function performs the export to a file or stdout. It calls the following dedicated export functions and runs though the list of layers to export after checking if there are shapes to export on these layers. @param load_filename: The name of the loaded dxf file. This name is written at the start of the export @param save_filename: The name of the file which shall be created. @param LayerContents: List which includes the order of the LayerContent to be exported and the LayerContent itself includes the export parameters (e.g. mill depth) and the shapes to be exported. The shape order is also given in a list defined in LayerContent. """ self.breaks = Breaks(LayerContents) self.initialize_export_vars() exstr = self.write_gcode_be(load_filename) # Move Machine to retraction Area before continuing anything. # Note: none of the changes done in the GUI can affect this height, # only the config file can do so (intended) exstr += self.rap_pos_z(g.config.vars.Depth_Coordinates['axis3_retract']) previous_tool = None # Do the export for each LayerContent in LayerContents List for LayerContent in LayerContents.non_break_layer_iter(): logger.debug(self.tr("Beginning export of Layer Nr. %s, Name %s") % (LayerContent.nr, LayerContent.name)) logger.debug(self.tr("Nr. of Shapes %s; Nr. of Shapes in Route %s") % (len(LayerContent.shapes), len(LayerContent.exp_order_complete))) # Perform export only for Layers which have at least 1 Shape to export if len(LayerContent.exp_order_complete): exstr += self.commentprint("*** LAYER: %s ***" % LayerContent.name) # If tool has changed for this LayerContent, add it if LayerContent.tool_nr != previous_tool: exstr += self.chg_tool(LayerContent.tool_nr, LayerContent.speed) previous_tool = LayerContent.tool_nr for shape_nr in LayerContent.exp_order_complete: shape = LayerContent.shapes[shape_nr] logger.debug(self.tr("Beginning export of Shape Nr: %s") % shape.nr) exstr += self.commentprint("* SHAPE Nr: %i *" % shape.nr) exstr += shape.Write_GCode(self) # Move machine to the Final Position EndPosition = Point(g.config.vars.Plane_Coordinates['axis1_start_end'], g.config.vars.Plane_Coordinates['axis2_start_end']) exstr += self.rap_pos_xy(EndPosition) # Write the end G-Code at the end exstr += self.write_gcode_en() exstr = self.make_line_numbers(exstr) exstr = self.make_windows_line_endings(exstr) # If the String shall be given to STDOUT if g.config.vars.General['write_to_stdout']: print(exstr) logger.info(self.tr("Export to STDOUT was successful")) # self.close else: # Export Data to file try: # File open and write f = open(save_filename, "w") f.write(str_encode(exstr)) f.close() logger.info(self.tr("Export to FILE was successful")) except IOError: QMessageBox.warning(g.window, self.tr("Warning during Export"), self.tr("Cannot Save the File")) def initialize_export_vars(self): """ This function is called to initialize all export variables. This will be done directly before the export starts. """ # Initialization of the General Postprocessor parameters self.feed = 0 self.speed = 0 self.tool_nr = 1 self.comment = "" self.abs_export = self.vars.General["abs_export"] self.Pe = Point(g.config.vars.Plane_Coordinates['axis1_start_end'], g.config.vars.Plane_Coordinates['axis2_start_end']) self.Ps = Point(g.config.vars.Plane_Coordinates['axis1_start_end'], g.config.vars.Plane_Coordinates['axis2_start_end']) self.lPe = Point(g.config.vars.Plane_Coordinates['axis1_start_end'], g.config.vars.Plane_Coordinates['axis2_start_end']) self.IJ = Point() self.O = Point() self.r = 0.0 self.s_ang = 0.0 self.e_ang = 0.0 self.ext = 0.0 self.ze = g.config.vars.Depth_Coordinates['axis3_retract'] self.lz = self.ze self.zs = self.ze self.keyvars = {"%feed": 'self.iprint(self.feed)', "%speed": 'self.iprint(self.speed)', "%tool_nr": 'self.iprint(self.tool_nr)', "%nl": 'self.nlprint()', "%XE": 'self.fnprint(self.Pe.x)', "%-XE": 'self.fnprint(-self.Pe.x)', "%XS": 'self.fnprint(self.Ps.x)', "%-XS": 'self.fnprint(-self.Ps.x)', "%YE": 'self.fnprint(self.Pe.y*fac)', "%-YE": 'self.fnprint(-self.Pe.y*fac)', "%YS": 'self.fnprint(self.Ps.y*fac)', "%-YS": 'self.fnprint(-self.Ps.y*fac)', "%ZS": "self.fnprint(self.zs)", "%-ZS": "self.fnprint(-self.zs)", "%ZE": 'self.fnprint(self.ze)', "%-ZE": 'self.fnprint(-self.ze)', "%I": 'self.fnprint(self.IJ.x)', "%-I": 'self.fnprint(-self.IJ.x)', "%J": 'self.fnprint(self.IJ.y*fac)', "%-J": 'self.fnprint(-self.IJ.y*fac)', "%XO": 'self.fnprint(self.O.x)', "%-XO": 'self.fnprint(-self.O.x)', "%YO": 'self.fnprint(self.O.y*fac)', "%-YO": 'self.fnprint(-self.O.y*fac)', "%R": 'self.fnprint(self.r)', "%AngS": 'self.fnprint(degrees(self.s_ang))', "%-AngS": 'self.fnprint(degrees(-self.s_ang))', "%AngE": 'self.fnprint(degrees(self.e_ang))', "%-AngE": 'self.fnprint(degrees(-self.e_ang))', "%ext": 'self.fnprint(degrees(self.ext))', "%-ext": 'self.fnprint(degrees(-self.ext))', "%comment": 'self.sprint(self.comment)'} for c_name in self.vars.Custom_GCode: c_code=self.vars.Custom_GCode[c_name]['gcode'] self.keyvars.update({c_name: 'self.cgcprint('"'%s'"')' %c_name}) def write_gcode_be(self, load_filename): """ Adding the begin to a new variable. If the exported file is from the type g-code in addition the dxf- filename, dxf2gcode version etc. is added to the code. Otherwise just the defined text in the PostProcessor file is added. @param load_filename: The name of the original dxf filename to append it to the begin for information. @return: The Function returns the begin of the new string to be exported. """ if self.vars.General["output_type"] == 'g-code': exstr = self.tr("(Generated with: %s)\n(Version: %s, Date: %s)\n") % (c.APPNAME, c.VERSION, c.DATE) exstr += self.tr("(Created from file: %s)\n") % re.sub('[()]', '_', load_filename) exstr += self.tr("(Used Postprocessor: %s) \n") % (self.postpro_file_used) if self.vars.General["output_text"]: exstr += self.tr("(Output format description: %s)\n") % re.sub('[()]', '', self.vars.General["output_text"]) exstr += self.tr("(Time: %s)\n") % time.asctime() elif self.vars.General["output_type"] == 'dxf': exstr = '' else: exstr = '' # In addition the text defined in the PostProcessor Config file is # added. if g.config.metric == 0: exstr += "%s\n" % self.vars.General["code_begin_units_in"] else: exstr += "%s\n" % self.vars.General["code_begin_units_mm"] if self.abs_export: exstr += "%s\n" % self.vars.General["code_begin_prog_abs"] else: exstr += "%s\n" % self.vars.General["code_begin_prog_inc"] exstr += "%s\n" % self.vars.General["code_begin"] return self.make_print_str(exstr) def write_gcode_en(self): """ Return the text to be added at the end of the exported file. @return: The Function returns the string to be added. """ return self.make_print_str(self.vars.General["code_end"]) def make_line_numbers(self, exstr): """ This Method adds Line Numbers to the existing exstr when required for export. @param exstr: This is the string which shall be exported where the line numbers are added. @return: It returns the string with line numbers added to it. """ use_line_nrs = self.vars.Line_Numbers["use_line_nrs"] line_nrs_begin = self.vars.Line_Numbers["line_nrs_begin"] line_nrs_step = self.vars.Line_Numbers["line_nrs_step"] line_format = 'N%i ' if use_line_nrs: nr = 0 line_nr = line_nrs_begin exstr = ((line_format + '%s') % (line_nr, exstr)) nr = exstr.find('\n', nr) while not nr == -1: line_nr += line_nrs_step exstr = (('%s' + line_format + '%s') % (exstr[0:nr + 1], line_nr, exstr[nr + 1:len(exstr)])) nr = exstr.find('\n', nr + len(line_format % line_nr) + 2) return exstr def make_windows_line_endings(self, exstr): if self.vars.Number_Format["win_line_endings"]: return exstr.replace('\n', '\r\n') return exstr def chg_tool(self, tool_nr, speed): """ This Method is called to change the tool. It can change the tool or change the tool speed @param tool_nr: The tool_nr of the new tool @param speed: The speed for the tool """ self.tool_nr = tool_nr self.speed = speed return self.make_print_str(self.vars.Program["tool_change"]) def chg_feed_rate(self, feed): """ This Method is called to change the feedrate @param feed: New feedrate @return: Returns the string which shall be added. """ if self.feed != feed: self.feed = feed return self.make_print_str(self.vars.Program["feed_change"]) return "" def set_cut_cor(self, cut_cor): """ This function is called if Cutter Correction should be enabled. @param cut_cor = The new value of the cutter correction (41/42) """ self.cut_cor = cut_cor if cut_cor == 41: return self.make_print_str(self.vars.Program["cutter_comp_left"]) elif cut_cor == 42: return self.make_print_str(self.vars.Program["cutter_comp_right"]) def deactivate_cut_cor(self): """ This function is called if Cutter Correction should be disabled. """ return self.make_print_str(self.vars.Program["cutter_comp_off"]) def lin_pol_arc(self, dir, Ps, Pe, s_ang, e_ang, R, O, IJ, ext): """ This function is called if an arc shall be cut. @param dir: The direction of the arc to cut, can be cw or ccw @param Ps: The Start Point of the the Arc @param Pe: The End Point of the Arc @param s_ang: The angle at which the Startpoint Starts @param e_ang: The angle at which the Endpoint Ends @param R: The Radius of the Arc @param O: The Center (Origin) of the Arc @param IJ: The distance from Center to Start Point. """ self.O = O self.IJ = IJ self.s_ang = s_ang self.e_ang = e_ang self.Ps = Ps self.r = R self.ext = ext if not self.abs_export: self.Pe = Pe - self.lPe self.lPe = Pe else: self.Pe = Pe if dir == 'cw': return self.make_print_str(self.vars.Program["arc_int_cw"]) else: return self.make_print_str(self.vars.Program["arc_int_ccw"]) def rap_pos_z(self, z_pos): """ Code to add if the machine is rapidly commanded to a new 3rd Axis Position. @param z_pos: the value at which shall be positioned @return: Returns the string which shall be added. """ #Store the last Z value as the start value self.zs=self.ze if not self.abs_export: self.ze = z_pos - self.lz self.lz = z_pos else: self.ze = z_pos return self.make_print_str(self.vars.Program["rap_pos_depth"]) def rap_pos_xy(self, Pe): """ Code to add if the machine is rapidly commanded to a new XY Plane Position. @param Pe: the value at which machine shall be positioned @return: Returns the string which shall be added. """ if not self.abs_export: self.Pe = Pe - self.lPe self.lPe = Pe else: self.Pe = Pe return self.make_print_str(self.vars.Program["rap_pos_plane"]) def lin_pol_z(self, z_pos): """ Code to add if the machine is commanded to a new 3rd Axis Position. @param z_pos: the value at which shall be positioned @return: Returns the string which shall be added. """ #Store the last Z value as the start value self.zs=self.ze if not self.abs_export: self.ze = z_pos - self.lz self.lz = z_pos else: self.ze = z_pos return self.make_print_str(self.vars.Program["lin_mov_depth"]) def lin_pol_drill(self, z_pos): """ Code to add if the machine is commanded to drill a HoleGeo @param z_pos: the value at which shall be positioned @return: Returns the string which shall be added. """ #Store the last Z value as the start value self.zs=self.ze if not self.abs_export: self.ze = z_pos - self.lz self.lz = z_pos else: self.ze = z_pos return self.make_print_str(self.vars.Program["lin_mov_drill"]) def lin_ret_drill(self, z_pos): """ Code to add if the machine is commanded to drill a HoleGeo @param z_pos: the value at which shall be positioned @return: Returns the string which shall be added. """ #Store the last Z value as the start value self.zs=self.ze if not self.abs_export: self.ze = z_pos - self.lz self.lz = z_pos else: self.ze = z_pos return self.make_print_str(self.vars.Program["lin_ret_drill"]) def lin_pol_xy(self, Ps, Pe): """ Code to add if the machine is rapidly commanded to a new XY Plane Position. @param Pe: the value at which shall be positioned @return: Returns the string which shall be added. """ self.Ps = Ps if not self.abs_export: self.Pe = Pe - self.lPe self.lPe = Pe else: self.Pe = Pe return self.make_print_str(self.vars.Program["lin_mov_plane"]) def write_pre_shape_cut(self): """ Return the text to add before a shape. @return: Returns the string to be added. """ return self.make_print_str(self.vars.Program["pre_shape_cut"]) def write_post_shape_cut(self): """ Return the text to add after (post) a shape. @return: Returns the string to be added. """ return self.make_print_str(self.vars.Program["post_shape_cut"]) def commentprint(self, comment): """ This function is called to print a comment. @return: Returns the comment """ self.comment = comment return self.make_print_str(self.vars.Program["comment"]) def make_print_str(self, keystr): """ This is the main function which converts the Keyvalues given in the Postprocessor Configuration into the values. @param keystr: String in which all keywords are to be replaced by the variables etc. @return: Returns the string with replaced keyvars (e.g. %Z is replaced by the real Z value in the defined Number Format. """ if g.config.machine_type=='lathe': fac = 2 else: fac = 1 exstr = keystr for key, value in self.keyvars.items(): exstr = exstr.replace(key, eval(value)) return exstr # Function which returns the given value as a formatted integer def iprint(self, integer): """ This method returns an integer formatted as a string @param integer: The integer value to convert to a string @return: The integer formatted as a string. """ return '%i' % integer def sprint(self, string): """ This method is called to return a string formatted as a string @param string: The string values which shall be returned as a string @return: The string formatted as a string. """ return '%s' % string def nlprint(self): """ This function is used to generate a new line. @return: Returns the character set required to get a new line """ return '\n' def cgcprint(self, cgcnr): """ This method is called to retrun a string of a custom G-Code which was added to the post- processor configuration. @param cgcnr: The name of the called custom g-code line @return: The value of the line. """ c_code=self.vars.Custom_GCode[cgcnr]['gcode'] return c_code def fnprint(self, number): """ This function returns the given real values in the defined format. The format which shall be returned is defined in the postprocessor file. @param number: The number which shall be returned in a formatted string @return: The formatted string of the number. """ pre_dec = self.vars.Number_Format["pre_decimals"] post_dec = self.vars.Number_Format["post_decimals"] dec_sep = self.vars.Number_Format["decimal_separator"] pre_dec_z_pad = self.vars.Number_Format["pre_decimal_zero_padding"] post_dec_z_pad = self.vars.Number_Format["post_decimal_zero_padding"] signed_val = self.vars.Number_Format["signed_values"] exstr = '' # + or - sign if required. Also used for Leading Zeros if signed_val and pre_dec_z_pad: numstr = ('%+0' + str(pre_dec + post_dec + 1) + '.' + str(post_dec) + 'f') % number elif signed_val == 0 and pre_dec_z_pad: numstr = ('%0' + str(pre_dec + post_dec + 1) + '.' + str(post_dec) + 'f') % number elif signed_val and pre_dec_z_pad == 0: numstr = ('%+' + str(pre_dec + post_dec + 1) + '.' + str(post_dec) + 'f') % number elif signed_val == 0 and pre_dec_z_pad == 0: numstr = ('%' + str(pre_dec + post_dec + 1) + '.' + str(post_dec) + 'f') % number # Gives the required decimal format. exstr += numstr[0:-(post_dec + 1)] exstr_end = dec_sep exstr_end += numstr[-post_dec:] # Add's Zero's to the end if required if not post_dec_z_pad: while len(exstr_end) > 0 and (exstr_end[-1] == '0' or exstr_end[-1] == dec_sep): exstr_end = exstr_end[0:-1] return exstr + exstr_end # def __str__(self): # # str = '' # for section in self.parser.sections(): # str = str + "\nSection: " + section # for option in self.parser.options(section): # str = str + "\n -> %s=%s" % (option, self.parser.get(section, option)) # return str dxf2gcode-20240509/dxf2gcode/postpro/breaks.py0000664000000000000000000002026513413457762017543 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2014-2015 # Robert Lichtenberger # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from math import sqrt import logging from dxf2gcode.core.linegeo import LineGeo from dxf2gcode.core.arcgeo import ArcGeo from dxf2gcode.core.breakgeo import BreakGeo from dxf2gcode.core.point import Point from dxf2gcode.core.shape import Geos import dxf2gcode.globals.constants as c from PyQt5.QtCore import QLineF, QPointF logger = logging.getLogger("PostPro.Breaks") class Breaks(object): """ The Breaks Class includes the functions for processing shapes on layers named BREAKS: to break closed shapes so that the resulting G-Code will contain rests for the workpiece. """ def __init__(self, layerContents): self.layerContents = layerContents """ Process layerContents: Each non-BREAKS: layers shapes are checked against all the shapes in all BREAKS: layers. If a shape is intersected twice by a break-shape, the shape will be broken. """ self.breakLayers = [] for layerContent in self.layerContents.break_layer_iter(): self.breakLayers.append(layerContent) logger.debug("Found %d break layers" % len(self.breakLayers)) def getNewGeos(self, geos): # TODO use intersect class and update_start_end_points new_geos = Geos([]) for geo in geos.abs_iter(): if isinstance(geo, LineGeo): new_geos.extend(self.breakLineGeo(geo)) elif isinstance(geo, ArcGeo): new_geos.extend(self.breakArcGeo(geo)) else: new_geos.append(geo) return new_geos def breakLineGeo(self, lineGeo): """ Try to break passed lineGeo with any of the shapes on a break layers. Will break lineGeos recursively. @return: The list of geometries after breaking (lineGeo itself if no breaking happened) """ newGeos = Geos([]) for breakLayer in self.breakLayers: for breakShape in breakLayer.shapes.not_disabled_iter(): intersections = self.intersectLineGeometry(lineGeo, breakShape) if len(intersections) == 2: (near, far) = self.classifyIntersections(lineGeo, intersections) logger.debug("Line %s broken from (%f, %f) to (%f, %f)" % (lineGeo.to_short_string(), near.x, near.y, far.x, far.y)) newGeos.extend(self.breakLineGeo(LineGeo(lineGeo.Ps, near))) newGeos.append(BreakGeo(near, far, breakShape.axis3_mill_depth, breakShape.f_g1_plane, breakShape.f_g1_depth)) newGeos.extend(self.breakLineGeo(LineGeo(far, lineGeo.Pe))) return newGeos return [lineGeo] def breakArcGeo(self, arcGeo): """ Try to break passed arcGeo with any of the shapes on a break layers. Will break arcGeos recursively. @return: The list of geometries after breaking (arcGeo itself if no breaking happened) """ newGeos = Geos([]) for breakLayer in self.breakLayers: for breakShape in breakLayer.shapes.not_disabled_iter(): intersections = self.intersectArcGeometry(arcGeo, breakShape) if len(intersections) == 2: (near, far) = self.classifyIntersections(arcGeo, intersections) logger.debug("Arc %s broken from (%f, %f) to (%f, %f)" % (arcGeo.toShortString(), near.x, near.y, far.x, far.y)) newGeos.extend(self.breakArcGeo(ArcGeo(Ps=arcGeo.Ps, Pe=near, O=arcGeo.O, r=arcGeo.r, s_ang=arcGeo.s_ang, direction=arcGeo.ext))) newGeos.append(BreakGeo(near, far, breakShape.axis3_mill_depth, breakShape.f_g1_plane, breakShape.f_g1_depth)) newGeos.extend(self.breakArcGeo(ArcGeo(Ps=far, Pe=arcGeo.Pe, O=arcGeo.O, r=arcGeo.r, e_ang=arcGeo.e_ang, direction=arcGeo.ext))) return newGeos return [arcGeo] def intersectLineGeometry(self, lineGeo, breakShape): """ Try to break lineGeo with the given breakShape. Will return the intersection points of lineGeo with breakShape. """ # TODO geos should be abs intersections = [] line = QLineF(lineGeo.Ps.x, lineGeo.Ps.y, lineGeo.Pe.x, lineGeo.Pe.y) for breakGeo in breakShape.geos.abs_iter(): if isinstance(breakGeo, LineGeo): breakLine = QLineF(breakGeo.Ps.x, breakGeo.Ps.y, breakGeo.Pe.x, breakGeo.Pe.y) intersection = QPointF(0, 0) # values do not matter res = line.intersect(breakLine, intersection) if res == QLineF.BoundedIntersection: intersections.append(Point(intersection.x(), intersection.y())) return intersections def intersectArcGeometry(self, arcGeo, breakShape): """ Get the intersections between the finite line and arc. Algorithm based on http://vvvv.org/contribution/2d-circle-line-intersections """ # TODO geos should be abs intersections = [] for breakGeo in breakShape.geos.abs_iter(): if isinstance(breakGeo, LineGeo): dxy = breakGeo.Pe - breakGeo.Ps a = dxy.x**2 + dxy.y**2 b = 2 * (dxy.x * (breakGeo.Ps.x - arcGeo.O.x) + dxy.y * (breakGeo.Ps.y - arcGeo.O.y)) c = breakGeo.Ps.x**2 + breakGeo.Ps.y**2 + arcGeo.O.x**2 + arcGeo.O.y**2\ - 2 * (arcGeo.O.x * breakGeo.Ps.x + arcGeo.O.y * breakGeo.Ps.y)\ - arcGeo.r**2 bb4ac = b * b - 4 * a * c if bb4ac > 0: mu1 = (-b + sqrt(bb4ac)) / (2*a) mu2 = (-b - sqrt(bb4ac)) / (2*a) p1 = breakGeo.Ps + mu1 * dxy p2 = breakGeo.Ps + mu2 * dxy # Points belong to the finite line? if not\ (p1.x < breakGeo.Ps.x and p2.x < breakGeo.Ps.x and p1.x < breakGeo.Pe.x and p2.x < breakGeo.Pe.x or p1.y < breakGeo.Ps.y and p2.y < breakGeo.Ps.y and p1.y < breakGeo.Pe.y and p2.y < breakGeo.Pe.y or p1.x > breakGeo.Ps.x and p2.x > breakGeo.Ps.x and p1.x > breakGeo.Pe.x and p2.x > breakGeo.Pe.x or p1.y > breakGeo.Ps.y and p2.y > breakGeo.Ps.y and p1.y > breakGeo.Pe.y and p2.y > breakGeo.Pe.y): if arcGeo.O.distance(breakGeo.Ps) >= arcGeo.r and self.point_belongs_to_arc(p2, arcGeo): intersections.append(p2) if arcGeo.O.distance(breakGeo.Pe) >= arcGeo.r and self.point_belongs_to_arc(p1, arcGeo): intersections.append(p1) return intersections def point_belongs_to_arc(self, point, arcGeo): ang = arcGeo.dif_ang(arcGeo.Ps, point, arcGeo.ext) return arcGeo.ext >= ang > 0 if arcGeo.ext > 0 else arcGeo.ext <= ang < 0 def classifyIntersections(self, geo, intersection): """ Investigate the array intersection (which contains exactly two Point instances) and return (near, far) tuple, depending on the distance of the points to the start point of the geometry geo. """ if geo.Ps.distance(intersection[0]) < geo.Ps.distance(intersection[1]): return (intersection[0], intersection[1]) else: return (intersection[1], intersection[0]) dxf2gcode-20240509/dxf2gcode/postpro/__init__.py0000664000000000000000000000000113413457762020015 0ustar rootroot dxf2gcode-20240509/dxf2gcode/gui/0000755000000000000000000000000014617100260014752 5ustar rootrootdxf2gcode-20240509/dxf2gcode/gui/wpzero.py0000664000000000000000000000612613413457762016700 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Vinzenz Schulz # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from __future__ import division import dxf2gcode.globals.constants as c from PyQt5.QtWidgets import QGraphicsItem from PyQt5.QtGui import QPen from PyQt5 import QtCore class WpZero(QGraphicsItem): """ class WpZero """ def __init__(self, center, color=QtCore.Qt.gray): self.sc = None super(WpZero, self).__init__() self.center = center self.allwaysshow = False self.color = color self.pen = QPen(QtCore.Qt.darkGray, 1, QtCore.Qt.SolidLine) self.pen.setCosmetic(True) self.diameter = 23.0 def contains_point(self, point): """ WpZero cannot be selected. Return maximal distance """ return float(0x7fffffff) def setSelected(self, *args): """ Override inherited function - with possibility to be called with multiple arguments """ pass def paint(self, painter, option, widget=None): """ paint() """ painter.setPen(self.pen) demat = painter.deviceTransform() self.sc = demat.m11() diameter1 = self.diameter / self.sc diameter2 = (self.diameter - 4) / self.sc rectangle1 = QtCore.QRectF(-diameter1 / 2, -diameter1 / 2, diameter1, diameter1) rectangle2 = QtCore.QRectF(-diameter2 / 2, -diameter2 / 2, diameter2, diameter2) startAngle1 = 90 * 16 spanAngle = 90 * 16 startAngle2 = 270 * 16 painter.drawEllipse(rectangle1) painter.drawEllipse(rectangle2) painter.drawPie(rectangle2, startAngle1, spanAngle) painter.setBrush(self.color) painter.drawPie(rectangle2, startAngle2, spanAngle) def boundingRect(self): """ Override inherited function to enlarge selection of Arrow to include all @param flag: The flag to enable or disable Selection """ if not self.sc: # since this function is called before paint; and scale is unknown return QtCore.QRectF(0, 0, 1e-9, 1e-9) diameter = self.diameter / self.sc return QtCore.QRectF(-diameter / 2, -diameter / 2, diameter, diameter) dxf2gcode-20240509/dxf2gcode/gui/treeview.py0000644000000000000000000005405214617065372017202 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2012-2014 # Xavier Izard # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ """ TreeView class is a subclass of QT QTreeView class. Subclass is done in order to: - implement a simple (ie not complex) drag & drop - get selection events @newfield purpose: Purpose @newfield sideeffect: Side effect, Side effects @purpose: display tree structure of the .dxf file, select, enable and set export order of the shapes """ import dxf2gcode.globals.constants as c from PyQt5.QtWidgets import QTreeView from PyQt5.QtGui import QStandardItemModel from PyQt5 import QtCore from PyQt5.QtCore import QByteArray import logging logger = logging.getLogger("DxfImport.myCanvasClass") class TreeView(QTreeView): """ Subclassed QTreeView to match our needs. Implement a simple (ie not complex) drag & drop, get selection events """ def __init__(self, parent = None): """ Initialization of the TreeView class. """ QTreeView.__init__(self, parent) self.dragged_element = False #No item is currently dragged & dropped self.dragged_element_model_index = None self.selectionChangedcallback = None self.keyPressEventcallback = None self.signals_blocked = False #Transmit events between classes self.pressed.connect(self.elementPressed) def setExportOrderUpdateCallback(self, callback): self.exportOrderUpdateCallback = callback def setSelectionCallback(self, callback): """ Register a callback function called when the selection changes on the TreeView options @param callback: function with prototype functionName(parent, selected, deselected): """ self.selectionChangedcallback = callback def setKeyPressEventCallback(self, callback): """ Register a callback function called when a key is pressed on the TreeView @param callback: function with prototype : accepted functionName(key_code, item_index): """ self.keyPressEventcallback = callback def dragEnterEvent(self, event): """ Set flag dragged_element to True (we have started a drag). Note: we can't get the dragged index from this function because it is called really late in the drag chain. If the user is too fast in drag & drop, then the event.pos() will return a position that is sensibly different from the original position when the user started to drag the item. So we only store a flag. We already got the item dragged through the elementPressed() function. options @param event: the dragEvent (contains position, ...) print("\033[32;1mdragEnterEvent {0} at pos({1}), index = {2}\033[m\n".format(event, event.pos(), self.indexAt(event.pos()).parent().internalId())) """ self.dragged_element = True event.acceptProposedAction() logger.debug("Starting to drag") def elementPressed(self, element_model_index): """ This function is called when an element (Shape, ...) is pressed with the mouse. It aims to store the index (QModelIndex) of the element pressed. options @param element_model_index: QModelIndex of the element pressed print("\033[32melementPressed row = {0}\033[m".format(element_model_index.model().itemFromIndex(element_model_index).row())) """ #save the index of the clicked element... self.dragged_element_model_index = element_model_index def dropEvent(self, event): """ This function is called when the user has released the mouse button to drop an element at the mouse pointer location. Note: we have totally reimplemented this function because the default QT implementation wants to Copy & Delete each dragged item, even when we only use internals move inside the treeView. This is totally unnecessary and over-complicated for us because it would imply to implement a QMimeData import and export functions to export our Shapes / Layers / Entities. The code below tries to move the items to the right place when they are dropped ; it uses simple lists permutations (ie no duplicates & deletes). options @param event: the dropEvent (contains position, ...) print("\033[32mdropEvent {0} at pos({1}).{3}, index = {2}\033[m\n".format(event, event.pos(), self.indexAt(event.pos()).parent().internalId(), self.dropIndicatorPosition())) """ logger.debug("\033[32mdropEvent {0} at pos({1}).{3}, index = {2}\033[m\n".format(event, event.pos(), self.indexAt(event.pos()).parent().internalId(), self.dropIndicatorPosition())) # Check if a element has been started to drag and if a index of the dragged element is given otherwise return if self.dragged_element and self.dragged_element_model_index: logger.debug("proposedAction = {0}".format(event.proposedAction())) event.setDropAction(QtCore.Qt.IgnoreAction) #Ignore since completely reimplemented. event.accept() else: event.ignore() logger.debug("Event is ignored") return # Get the drag_item itself and its parent drag_item = self.dragged_element_model_index.model().itemFromIndex(self.dragged_element_model_index) drag_row = self.dragged_element_model_index.row() drag_item_parent = drag_item.parent() drag_item_level = 1 # parent is 0, so we need to get the root item of the tree as parent... if not drag_item.parent(): drag_item_parent = drag_item.model().invisibleRootItem() drag_item_level = 0 drag_parent_row = -1 else: drag_parent_row = drag_item.parent() logger.debug("drag_item_level: {0}, drag_row: {1}, drag_parent_row: {2}"\ .format(drag_item_level, drag_row, drag_parent_row)) #logger.debug("drag item: {0}, drag_item_partent: {1}, drag_item_level: {2}".format(drag_item, \ # drag_item_parent, \ # drag_item_level)) drop_model_index = self.indexAt(event.pos()) logger.debug("drop_model_index: %s", drop_model_index) # Get the insert position related to the drop item: # OnItem (0), AboveItem (1), BelowItem (2), OnViewport (3)... relative_position = self.dropIndicatorPosition() logger.debug("relative_position: %s", relative_position) # Check if the item is dropped on a valid item and not on the Viewport. if drop_model_index.isValid() and relative_position != QTreeView.OnViewport: # drop position is computable from a real element drop_item = drop_model_index.model().itemFromIndex(drop_model_index) logger.debug("drop_item: %s", drop_item) # If dropped on the Viewport just return # TODO: May be changed if dropping of last item on viewport ist possible. else: event.ignore() logger.debug("Event is ignored") return # We are below any tree element => insert at end # drag_row = self.dragged_element_model_index.row() # original row # drop_row = items_parent.rowCount() # insert at end # logger.debug("\033[32;1mACCEPTED AT END!\033[m\n") # dropped element is on the same tree branch as dragged element... if drag_item.parent() == drop_item.parent(): drag_row = self.dragged_element_model_index.row() # original row # destination row (+1 if relative pos is below the drop element)... drop_row = drop_model_index.row() + (1 if relative_position == QTreeView.BelowItem else 0) logger.debug("\033[32;1mACCEPTED!\033[m drag_row: {0}, drop_row: {1}\n".format(drag_row, drop_row)) # we are on parent item (second test takes the first column # of the drop_item's row. First column is where child are # inserted, so we must compare with this col) elif (drag_item.parent() == drop_item or not drop_item.parent() \ and drag_item.parent() == drop_item.model().invisibleRootItem().child(drop_item.row(), 0)) \ and (relative_position == QTreeView.BelowItem or relative_position == QTreeView.OnItem): # original row... drag_row = self.dragged_element_model_index.row() # destination row is 0 because item is dropped on the parent... drop_row = 0 logger.debug("\033[32;1mACCEPTED ON PARENT!\033[m drag_row: {0}, drop_row: {1}\n".format(drag_row, drop_row)) # we are on next parent item => insert at end of the dragged item's layer elif (not drop_item.parent() and \ self.dragged_element_model_index.parent().sibling(self.dragged_element_model_index.parent().row() + 1, 0) \ == drop_item.model().invisibleRootItem().child(drop_item.row(), 0).index()) \ and (relative_position == QTreeView.AboveItem or relative_position == QTreeView.OnItem): # original row... drag_row = self.dragged_element_model_index.row() # insert at end... drop_row = drag_item.parent().rowCount() logger.debug("\033[32;1mACCEPTED ON BELOW PARENT!\033[m drag_row: {0}, drop_row: {1}\n".format(drag_row, drop_row)) # we are in the wrong branch of the tree, item can't be pasted here else: drag_row = self.dragged_element_model_index.row() drop_row = drop_item.parent().rowCount() drop_row = -1 logger.debug("\033[31;1mREFUSED!\033[m drag_row: {0}, drop_row: {1}\n".format(drag_row, drop_row)) # effectively move the item if drop_row >= 0: logger.debug("from row {0} to row {1}".format(drag_row, drop_row)) item_to_be_moved = drag_item_parent.takeRow(drag_row) # we have one less item in the list, so if the item is dragged below its original position, we must # correct its insert position if drop_row > drag_row: drop_row -= 1 drag_item_parent.insertRow(drop_row, item_to_be_moved) # Signal that the order of the TreeView has changed... if not self.signals_blocked: self.exportOrderUpdateCallback() self.dragged_element = False def dropEventOld(self, event): """ This function is called when the user has released the mouse button to drop an element at the mouse pointer location. Note: we have totally reimplemented this function because the default QT implementation wants to Copy & Delete each dragged item, even when we only use internals move inside the treeView. This is totally unnecessary and over-complicated for us because it would imply to implement a QMimeData import and export functions to export our Shapes / Layers / Entities. The code below tries to move the items to the right place when they are dropped ; it uses simple lists permutations (ie no duplicates & deletes). options @param event: the dropEvent (contains position, ...) print("\033[32mdropEvent {0} at pos({1}).{3}, index = {2}\033[m\n".format(event, event.pos(), self.indexAt(event.pos()).parent().internalId(), self.dropIndicatorPosition())) """ if self.dragged_element and self.dragged_element_model_index: logger.debug("action proposee = {0}".format(event.proposedAction())) event.setDropAction(QtCore.Qt.IgnoreAction) event.accept() drag_item = self.dragged_element_model_index.model().itemFromIndex(self.dragged_element_model_index) items_parent = drag_item.parent() logger.debug("drag_item: %s", drag_item) logger.debug("items_parent: %s", items_parent) if not items_parent: #parent is 0, so we need to get the root item of the tree as parent... items_parent = drag_item.model().invisibleRootItem() drop_model_index = self.indexAt(event.pos()) logger.debug("drop_model_index: %s", drop_model_index) # Get the insert position related to the drop item: # OnItem, AboveItem, BelowItem, OnViewport... relative_position = self.dropIndicatorPosition() logger.debug("relative_position: %s", relative_position) #compute the new position of the layer or the shape if drop_model_index.isValid() and relative_position != QTreeView.OnViewport: #drop position is computable from a real element drop_item = drop_model_index.model().itemFromIndex(drop_model_index) logger.debug("drop_item: %s", drop_item) if drag_item.parent() == drop_item.parent(): #dropped element is on the same tree branch as #dragged element... drag_row = self.dragged_element_model_index.row() #original row #destination row (+1 if relative pos is below the drop element)... drop_row = drop_model_index.row() + (1 if relative_position == QTreeView.BelowItem else 0) logger.debug("\033[32;1mACCEPTED!\033[m\n") elif (drag_item.parent() == drop_item or not drop_item.parent()\ and drag_item.parent() == drop_item.model().invisibleRootItem().child(drop_item.row(), 0))\ and (relative_position == QTreeView.BelowItem or relative_position == QTreeView.OnItem): #we are on parent item (second test takes the first column # of the drop_item's row. First column is where child are # inserted, so we must compare with this col) # original row... drag_row = self.dragged_element_model_index.row() # destination row is 0 because item is dropped on the parent... drop_row = 0 logger.debug("\033[32;1mACCEPTED ON PARENT!\033[m\n") elif (not drop_item.parent() and self.dragged_element_model_index.parent().sibling(self.dragged_element_model_index.parent().row()+1, 0) == drop_item.model().invisibleRootItem().child(drop_item.row(), 0).index())\ and (relative_position == QTreeView.AboveItem or relative_position == QTreeView.OnItem): #we are on next parent item => insert at end of the dragged item's layer # original row... drag_row = self.dragged_element_model_index.row() # insert at end... drop_row = items_parent.rowCount() logger.debug("\033[32;1mACCEPTED ON NEXT PARENT!\033[m\n") else: #we are in the wrong branch of the tree, # item can't be pasted here drag_row = self.dragged_element_model_index.row() drop_row = items_parent.rowCount() drop_row = -1 logger.debug("\033[31;1mREFUSED!\033[m\n") else: #We are below any tree element => insert at end drag_row = self.dragged_element_model_index.row() #original row drop_row = items_parent.rowCount() #insert at end logger.debug("\033[32;1mACCEPTED AT END!\033[m\n") #effectively move the item if drop_row >= 0: logger.debug("from row {0} to row {1}".format(drag_row, drop_row)) item_to_be_moved = items_parent.takeRow(drag_row) if drop_row > drag_row: #we have one less item in the list, so if the item is # dragged below its original position, we must # correct its insert position drop_row -= 1 items_parent.insertRow(drop_row, item_to_be_moved) if not self.signals_blocked: # Signal that the order of the TreeView has changed... self.exportOrderUpdateCallback() self.dragged_element = False else: event.ignore() logger.debug("Event is ignored") def moveUpCurrentItem(self): """ Move the current item up. This slot aims to be connected to a button. If there is no current item, do nothing. """ current_item_index = self.currentIndex() if current_item_index and current_item_index.isValid(): current_item = current_item_index.model().itemFromIndex(current_item_index) current_item_parent = current_item.parent() if not current_item_parent: #parent is 0, so we need to get the root item of the tree as parent... current_item_parent = current_item.model().invisibleRootItem() pop_row = current_item_index.row() #original row push_row = pop_row - 1 if push_row >= 0: item_to_be_moved = current_item_parent.takeRow(pop_row) current_item_parent.insertRow(push_row, item_to_be_moved) self.setCurrentIndex(current_item.index()) if not self.signals_blocked: # Signal that the order of the TreeView has changed self.exportOrderUpdateCallback() def moveDownCurrentItem(self): """ Move the current item down. This slot aims to be connected to a button. If there is no current item, do nothing. """ current_item_index = self.currentIndex() if current_item_index and current_item_index.isValid(): current_item = current_item_index.model().itemFromIndex(current_item_index) current_item_parent = current_item.parent() if not current_item_parent: #parent is 0, so we need to get the root item of the tree as parent... current_item_parent = current_item.model().invisibleRootItem() pop_row = current_item_index.row() #original row push_row = pop_row + 1 if push_row < current_item_parent.rowCount(): item_to_be_moved = current_item_parent.takeRow(pop_row) current_item_parent.insertRow(push_row, item_to_be_moved) self.setCurrentIndex(current_item.index()) if not self.signals_blocked: # Signal that order of the TreeView has changed... self.exportOrderUpdateCallback() def blockSignals(self, block): """ Blocks the signals from this class. Subclassed in order to also block selectionChanged "signal" (callback) options @param block: whether to block signal (True) or not (False) """ self.signals_blocked = block QTreeView.blockSignals(self, block) def selectionChanged(self, selected, deselected): """ Function called by QT when the selection has changed for this treeView. Subclassed in order to call a callback function options @param selected: list of selected items @param deselected: list of deselected items print("\033[32;1mselectionChanged selected count = {0} ; deselected count = {1}\033[m".format(selected.count(), deselected.count())) """ QTreeView.selectionChanged(self, selected, deselected) if self.selectionChangedcallback and not self.signals_blocked: self.selectionChangedcallback(self, selected, deselected) def keyPressEvent(self, keyEvent): """ Function called by QT when a key has been pressed inside the treeView. Subclassed in order to call a callback function @param keyEvent: keyboard event print("\033[31;1mkeyPressEvent() key = {0}\033[m".format(keyEvent.key())) """ if self.keyPressEventcallback and not self.signals_blocked: if not self.keyPressEventcallback(keyEvent): # key not accepted => send it back to the parent QTreeView.keyPressEvent(self, keyEvent) else: QTreeView.keyPressEvent(self, keyEvent) class MyStandardItemModel(QStandardItemModel): """ Subclass QStandardItemModel to avoid error while using Drag & Drop """ def __init__(self, parent = None): """ Initialization of the MyStandardItemModel class. """ QStandardItemModel.__init__(self, parent) def mimeData(self, indexes): """ This function is called by QT each time a drag operation is initiated, to serialize the data associated with the dragged item. However, QT doesn't know how to serialize a Shape or a Layer, so it throws an error ... since we handle Drag & Drop internally, we don't need any serialization, so we subclass the function and return nothing (trick to avoid errors). """ mimeData = QtCore.QMimeData() #mimeData.setData("application/x-qabstractitemmodeldatalist", "") #mimeData.setData("application/x-qstandarditemmodeldatalist", "") mimeData.setData("application/x-qstandarditemmodeldatalist", QByteArray()) return mimeData dxf2gcode-20240509/dxf2gcode/gui/treehandling.py0000644000000000000000000024762114617065372020022 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2012-2015 # Xavier Izard # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ """ This class is intended to deal with the drawing (.dxf) structure. It has the following functions: - populate the entities treeView and the layers treeView - allow selection of shapes from any treeView and show the selection on the graphic view - allow to enable/disable shapes from any treeView - reflects into the treeView the changes that occurs on the graphic view - set export order using drag & drop @purpose: display tree structure of the .dxf file, select, enable and set export order of the shapes """ from __future__ import absolute_import from math import degrees import logging import dxf2gcode.globals.globals as g from dxf2gcode.core.shape import Shape from dxf2gcode.core.entitycontent import EntityContent from dxf2gcode.core.customgcode import CustomGCode from dxf2gcode.gui.treeview import MyStandardItemModel from dxf2gcode.globals.helperfunctions import toInt, toFloat import dxf2gcode.globals.constants as c from PyQt5.QtWidgets import QAction, QMenu, QWidget, QAbstractItemView, QTreeView from PyQt5.QtCore import QItemSelectionModel, QItemSelection from PyQt5.QtGui import QStandardItem, QIcon, QPixmap, QStandardItemModel, QPalette from PyQt5 import QtCore isValid = lambda data: data toPyObject = lambda data: data class QVariantShape(QtCore.QVariant): """ Wrapper is needed for PyQt5 since this version does not accept to add a QGraphisItem directly to a QStandardItem """ def __init__(self, shapeobj): self.shapeobj = shapeobj logger = logging.getLogger("Gui.TreeHandling") # defines some arbitrary types for the objects stored into the treeView. # These types will eg help us to find which kind of data is stored # in the element received from a click() event ENTITY_OBJECT = QtCore.Qt.UserRole + 1 # For storing refs to the entities elements (entities_list) LAYER_OBJECT = QtCore.Qt.UserRole + 2 # For storing refs to the layers elements (layers_list) SHAPE_OBJECT = QtCore.Qt.UserRole + 3 # For storing refs to the shape elements (entities_list & layers_list) CUSTOM_GCODE_OBJECT = QtCore.Qt.UserRole + 4 # For storing refs to the custom gcode elements (layers_list) PATH_OPTIMISATION_COL = 3 # Column that corresponds to TSP enable checkbox class TreeHandler(QWidget): """ Class to handle both QTreeView : entitiesTreeView (for blocks, and the tree of blocks) and layersShapesTreeView (for layers and shapes) """ def __init__(self, ui): """ Standard method to initialize the class @param ui: the GUI """ QWidget.__init__(self) self.ui = ui # Used to store previous values in order to enable/disable text self.palette = self.ui.zRetractionArealLineEdit.palette() self.clearToolsParameters() # Layers & Shapes TreeView self.layer_item_model = None self.layers_list = None self.auto_update_export_order = False self.ui.layersShapesTreeView.setExportOrderUpdateCallback(self.prepareExportOrderUpdate) self.ui.layersShapesTreeView.setSelectionCallback(self.actionOnSelectionChange) # pass the callback function to the QTreeView self.ui.layersShapesTreeView.setKeyPressEventCallback(self.actionOnKeyPress) self.ui.layersShapesTreeView.setSelectionMode(QAbstractItemView.ExtendedSelection) self.ui.layersShapesTreeView.setSelectionBehavior(QAbstractItemView.SelectRows) self.ui.layersGoUpPushButton.clicked.connect(self.ui.layersShapesTreeView.moveUpCurrentItem) self.ui.layersGoDownPushButton.clicked.connect(self.ui.layersShapesTreeView.moveDownCurrentItem) # Load the tools from the config file to the tool selection combobox for tool in g.config.vars.Tool_Parameters: self.ui.toolDiameterComboBox.addItem(tool) # Select the first tool in the list and update the tools diameter, ... accordingly self.ui.toolDiameterComboBox.setCurrentIndex(0) self.toolUpdate() # The layer/shape which is currently displayed in the parameters box self.display_tool_layer = None self.display_tool_shape = None # Don't change this line, the signal _must_ be "activated" (only activates on user action) and _not_ "currentIndexChanged" (activates programmatically and on user action) self.ui.toolDiameterComboBox.activated[str].connect(self.toolUpdate) self.ui.zRetractionArealLineEdit.editingFinished.connect(self.toolParameterzRetractionArealUpdate) self.ui.zSafetyMarginLineEdit.editingFinished.connect(self.toolParameterzSafetyMarginUpdate) self.ui.zInitialMillDepthLineEdit.editingFinished.connect(self.toolParameterzInitialMillDepthUpdate) self.ui.zInfeedDepthLineEdit.editingFinished.connect(self.toolParameterzInfeedDepthUpdate) self.ui.zFinalMillDepthLineEdit.editingFinished.connect(self.toolParameterzFinalMillDepthUpdate) self.ui.g1FeedXYLineEdit.editingFinished.connect(self.toolParameterg1FeedXYUpdate) self.ui.g1FeedZLineEdit.editingFinished.connect(self.toolParameterg1FeedZUpdate) # Entities TreeView self.entity_item_model = None self.entities_list = None self.ui.entitiesTreeView.setSelectionCallback(self.actionOnSelectionChange) # pass the callback function to the QTreeView self.ui.entitiesTreeView.setKeyPressEventCallback(self.actionOnKeyPress) self.ui.entitiesTreeView.setSelectionMode(QAbstractItemView.ExtendedSelection) self.ui.entitiesTreeView.setSelectionBehavior(QAbstractItemView.SelectRows) self.ui.blocksCollapsePushButton.clicked.connect(self.expandToDepth0) self.ui.blocksExpandPushButton.clicked.connect(self.ui.entitiesTreeView.expandAll) # Build the contextual menu (mouse right click) self.context_menu = QMenu(self) self.context_menu.addAction(QAction("Select all", self, triggered=self.ui.layersShapesTreeView.selectAll)) self.context_menu.addAction(QAction("Deselect all", self, triggered=self.ui.layersShapesTreeView.clearSelection)) self.context_menu.addSeparator() self.context_menu.addAction(QAction("Enable selection", self, triggered=self.enableSelectedItems)) self.context_menu.addAction(QAction("Disable selection", self, triggered=self.disableSelectedItems)) self.context_menu.addSeparator() self.context_menu.addAction(QAction("Optimize route for selection", self, triggered=self.optimizeRouteForSelectedItems)) self.context_menu.addAction(QAction("Don't opti. route for selection", self, triggered=self.doNotOptimizeRouteForSelectedItems)) self.context_menu.addSeparator() self.context_menu.addAction(QAction("Remove custom GCode", self, triggered=self.removeCustomGCodeSelected)) self.sub_menu = QMenu("Add custom GCode ...", self) # Save the exact name of the action, as is defined in the config file. Later on we use it to identify the action for custom_action in g.config.vars.Custom_Actions: menu_action = self.sub_menu.addAction(custom_action.replace('_', ' ')) menu_action.setData(custom_action) self.context_menu.addMenu(self.sub_menu) # Right click menu self.ui.layersShapesTreeView.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.ui.layersShapesTreeView.customContextMenuRequested.connect(self.displayContextMenu) # Not used for now, so hide them self.ui.startAtXLabel.hide() self.ui.startAtYLabel.hide() self.ui.unitLabel_1.hide() self.ui.unitLabel_2.hide() self.ui.startAtXLineEdit.hide() self.ui.startAtYLineEdit.hide() def tr(self, string_to_translate): """ Translate a string using the QCoreApplication translation framework @param: string_to_translate: a unicode string @return: the translated unicode string if it was possible to translate """ return str(QtCore.QCoreApplication.translate('TreeHandler', string_to_translate)) def updateConfiguration(self): """ This function should be called each time the configuration changes. It updates tools and custom actions in the treeView If a tool or a custom action disapear from the configuration, it is removed from the treeview """ # Load the tools from the config file to the tool selection combobox #self.ui.layersShapesTreeView.clearSelection() self.ui.toolDiameterComboBox.blockSignals(True) default_tool = 1 # Tool 1 normally always exists current_tool = self.ui.toolDiameterComboBox.currentText() self.ui.toolDiameterComboBox.clear() for tool in g.config.vars.Tool_Parameters: self.ui.toolDiameterComboBox.addItem(tool) self.ui.toolDiameterComboBox.blockSignals(False) # Load the custom gcode names from the config file self.sub_menu.clear() for custom_action in g.config.vars.Custom_Actions: menu_action = self.sub_menu.addAction(custom_action.replace('_', ' ')) menu_action.setData(custom_action) # update the items (if a tool or a custom_action disapeared from config file, we need to remove it in the treeview too) i = 0 if self.layer_item_model: # this is not set until buildLayerTree() is called i = self.layer_item_model.rowCount(QtCore.QModelIndex()) while i > 0: i -= 1 layer_item_index = self.layer_item_model.index(i, 0) if isValid(layer_item_index.data(LAYER_OBJECT)): real_layer = toPyObject(layer_item_index.data(LAYER_OBJECT)) update_drawing = False if real_layer is not None and str(real_layer.tool_nr) not in g.config.vars.Tool_Parameters: # The tool used for this layer doesn't exist anymore, we are going to replace it with the first tool logger.warning("Tool {0} used for \"{1}\" layer doesn't exist anymore in the configuration ; using tool {2} instead".format(real_layer.tool_nr, real_layer.name, default_tool)) # Update the layer's tool and repaint real_layer.tool_nr = default_tool # Tool 1 normally always exists update_drawing = True if real_layer is not None\ and (real_layer.tool_diameter != g.config.vars.Tool_Parameters[str(real_layer.tool_nr)]['diameter']\ or real_layer.speed != g.config.vars.Tool_Parameters[str(real_layer.tool_nr)]['speed']\ or real_layer.start_radius != g.config.vars.Tool_Parameters[str(real_layer.tool_nr)]['start_radius']): # The tool used for this layer exists, but its definition has changed, we need to update the layer logger.warning("Tool {0} used for \"{1}\" layer has changed, updating layer's data".format(real_layer.tool_nr, real_layer.name)) real_layer.tool_diameter = g.config.vars.Tool_Parameters[str(real_layer.tool_nr)]['diameter'] real_layer.speed = g.config.vars.Tool_Parameters[str(real_layer.tool_nr)]['speed'] real_layer.start_radius = g.config.vars.Tool_Parameters[str(real_layer.tool_nr)]['start_radius'] update_drawing = True if update_drawing and g.window: for shape in real_layer.shapes: if isinstance(shape, Shape): # Only repaint _real_ shapes (and not the custom GCode for example) g.window.canvas_scene.repaint_shape(shape) g.window.canvas_scene.update() # Assign the export order for the shapes of the layer "real_layer" for j in range(self.layer_item_model.rowCount(layer_item_index)): shape_item_index = self.layer_item_model.index(j, 0, layer_item_index) if isValid(shape_item_index.data(CUSTOM_GCODE_OBJECT)): real_custom_action = toPyObject(shape_item_index.data(CUSTOM_GCODE_OBJECT)) if real_custom_action is not None and real_custom_action.name not in g.config.vars.Custom_Actions: logger.warning("Custom action \"{0}\" used for \"{1}\" layer doesn't exist anymore in the configuration, removing it".format(real_custom_action.name, real_layer.name)) self.removeCustomGCode(shape_item_index) # Reselect the previous tool and update the tool display for the _selected_ layers tool_index = self.ui.toolDiameterComboBox.findText(current_tool) logger.debug("reselecting tool : " + current_tool) if tool_index >= 0: self.ui.toolDiameterComboBox.setCurrentIndex(tool_index) else: tool_index = self.ui.toolDiameterComboBox.findText(default_tool) self.ui.toolDiameterComboBox.setCurrentIndex(tool_index) self.toolUpdate() def displayContextMenu(self, position): """ Function used to display a right click context menu @param position: position of the cursor within the treeView widget """ selected_action = self.context_menu.exec_(self.ui.layersShapesTreeView.mapToGlobal(position)) if selected_action and isValid(selected_action.data()): # contextual menu selection concerns a custom gcode custom_gcode_name = toPyObject(selected_action.data()) self.addCustomGCodeAfter(custom_gcode_name) def expandToDepth0(self): """ Slot used to expand the entities treeView up to depth 0 """ self.ui.entitiesTreeView.expandToDepth(0) def buildLayerTree(self, layers_list): """ This method populates the Layers QTreeView with all the elements contained into the layers_list Method must be called each time a new .dxf file is loaded. options @param layers_list: list of the layers and shapes (created in the main) """ self.layers_list = layers_list if self.layer_item_model: self.layer_item_model.clear() # Remove any existing item_model self.layer_item_model = MyStandardItemModel() # This is the container for the data (QStandardItemModel) self.layer_item_model.setHorizontalHeaderItem(0, QStandardItem(self.tr("[en]"))) self.layer_item_model.setHorizontalHeaderItem(1, QStandardItem(self.tr("Name"))) self.layer_item_model.setHorizontalHeaderItem(2, QStandardItem(self.tr("Nr"))) self.layer_item_model.setHorizontalHeaderItem(3, QStandardItem(self.tr("Optimal path"))) modele_root_element = self.layer_item_model.invisibleRootItem() # Root element of our tree for layer in layers_list: icon = QIcon() icon.addPixmap(QPixmap(":/images/layer.png")) checkbox_element = QStandardItem(icon, "") checkbox_element.setData(QtCore.QVariant(layer), LAYER_OBJECT) # store a ref in our treeView element modele_element = QStandardItem(layer.name) nbr_element = QStandardItem() optimise_element = QStandardItem() modele_root_element.appendRow([checkbox_element, modele_element, nbr_element, optimise_element]) parent_item = modele_root_element.child(modele_root_element.rowCount() - 1, 0) containsChecked = False containsUnchecked = False for shape in layer.shapes: if isinstance(shape, CustomGCode): self.AddCustomGCodeRowLayer(shape, parent_item) else: self.AddShapeRowLayer(shape, parent_item) if shape.isDisabled(): containsUnchecked = True else: containsChecked = True checkbox_element.setCheckState(self.getCheckState(containsChecked, containsUnchecked)) checkbox_element.setFlags(QtCore.Qt.ItemIsDragEnabled | QtCore.Qt.ItemIsDropEnabled | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsUserCheckable) modele_element.setFlags(QtCore.Qt.ItemIsDragEnabled | QtCore.Qt.ItemIsDropEnabled | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable) nbr_element.setFlags(QtCore.Qt.ItemIsEnabled) optimise_element.setFlags(QtCore.Qt.ItemIsEnabled) # Signal to get events when a checkbox state changes (enable or disable shapes) self.layer_item_model.itemChanged.connect(self.on_itemChanged) self.ui.layersShapesTreeView.setModel(self.layer_item_model) # Affect our model to the GUI TreeView, in order to display it self.ui.layersShapesTreeView.expandAll() self.ui.layersShapesTreeView.setDragDropMode(QTreeView.InternalMove) # self.ui.layersShapesTreeView.setDefaultDropAction(QtCore.Qt.MoveAction) # self.ui.layersShapesTreeView.setDragDropOverwriteMode(True) self.ui.layersShapesTreeView.setDropIndicatorShown(True) self.ui.layersShapesTreeView.setAcceptDrops(True) self.ui.layersShapesTreeView.setDragEnabled(True) for i in range(4): self.ui.layersShapesTreeView.resizeColumnToContents(i) def AddShapeRowLayer(self, shape, parent_item): icon = QIcon() icon.addPixmap(QPixmap(":/images/shape.png")) item_col_0 = QStandardItem(icon, "") item_col_0.setData(QVariantShape(shape), SHAPE_OBJECT) # store a ref in our treeView element item_col_1 = QStandardItem(shape.type) item_col_2 = QStandardItem(str(shape.nr)) item_col_3 = QStandardItem() parent_item.appendRow([item_col_0, item_col_1, item_col_2, item_col_3]) # Deal with the checkboxes (shape enabled or disabled / send shape to TSP optimizer) item_col_0.setCheckState(QtCore.Qt.Unchecked if shape.isDisabled() else QtCore.Qt.Checked) item_col_3.setCheckState(QtCore.Qt.Checked if shape.isToolPathOptimized() else QtCore.Qt.Unchecked) flags = QtCore.Qt.ItemIsDragEnabled | QtCore.Qt.ItemIsSelectable if shape.allowedToChange: flags |= QtCore.Qt.ItemIsEnabled item_col_0.setFlags(flags | QtCore.Qt.ItemIsUserCheckable) item_col_1.setFlags(flags) item_col_2.setFlags(flags) item_col_3.setFlags(flags | QtCore.Qt.ItemIsUserCheckable) def AddCustomGCodeRowLayer(self, custom_gcode, parent_item, push_row=None): icon = QIcon() icon.addPixmap(QPixmap(":/images/custom.png")) item_col_0 = QStandardItem(icon, "") # will only display a checkbox + an icon that will never be disabled item_col_0.setData(QtCore.QVariant(custom_gcode), CUSTOM_GCODE_OBJECT) # store a ref to the custom gcode in our treeView element item_col_1 = QStandardItem(custom_gcode.name) item_col_2 = QStandardItem(str(custom_gcode.nr)) item_col_3 = QStandardItem() if push_row: parent_item.insertRow(push_row, [item_col_0, item_col_1, item_col_2, item_col_3]) else: parent_item.appendRow([item_col_0, item_col_1, item_col_2, item_col_3]) # Deal with the checkboxes (shape enabled or disabled / send shape to TSP optimizer) item_col_0.setCheckState(QtCore.Qt.Unchecked if custom_gcode.isDisabled() else QtCore.Qt.Checked) flags = QtCore.Qt.ItemIsDragEnabled | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled item_col_0.setFlags(flags | QtCore.Qt.ItemIsUserCheckable) item_col_1.setFlags(flags) item_col_2.setFlags(flags) item_col_3.setFlags(flags) def buildEntitiesTree(self, entities_list): """ This method populates the Entities (blocks) QTreeView with all the elements contained in the entities_list Method must be called each time a new .dxf file is loaded. options @param entities_list: list of the layers and shapes (created in the main) """ self.entities_list = entities_list if self.entity_item_model: self.entity_item_model.clear() # Remove any existing item_model self.entity_item_model = QStandardItemModel() self.entity_item_model.setHorizontalHeaderItem(0, QStandardItem(self.tr("[en]"))) self.entity_item_model.setHorizontalHeaderItem(1, QStandardItem(self.tr("Name"))) self.entity_item_model.setHorizontalHeaderItem(2, QStandardItem(self.tr("Nr"))) self.entity_item_model.setHorizontalHeaderItem(3, QStandardItem(self.tr("Type"))) self.entity_item_model.setHorizontalHeaderItem(4, QStandardItem(self.tr("Base point"))) self.entity_item_model.setHorizontalHeaderItem(5, QStandardItem(self.tr("Scale"))) self.entity_item_model.setHorizontalHeaderItem(6, QStandardItem(self.tr("Rotation"))) modele_root_element = self.entity_item_model.invisibleRootItem() self.buildEntitiesSubTree(modele_root_element, entities_list) # Signal to get events when a checkbox state changes (enable or disable shapes) self.entity_item_model.itemChanged.connect(self.on_itemChanged) self.ui.entitiesTreeView.setModel(self.entity_item_model) self.ui.entitiesTreeView.expandToDepth(0) for i in range(6): self.ui.entitiesTreeView.resizeColumnToContents(i) def buildEntitiesSubTree(self, elements_model, elements_list): """ This method is called (possibly recursively) to populate the Entities treeView. It is not intended to be called directly, use buildEntitiesTree() function instead. options @param elements_model: the treeView model (used to store the data, see QT docs) @param elements_list: either a list of entities, or a shape @return (containsChecked, containsUnchecked) indicating whether the subtree contains checked and/or unchecked elements """ containsChecked = False containsUnchecked = False if isinstance(elements_list, list): # We got a list for element in elements_list: (checked, unchecked) = self.addEntitySubTree(elements_model, element) containsChecked = containsChecked or checked containsUnchecked = containsUnchecked or unchecked else: # Unique element (shape) element = elements_list containsChecked, containsUnchecked = self.addEntitySubTree(elements_model, element) return containsChecked, containsUnchecked def addEntitySubTree(self, elements_model, element): """ This method populates a row of the Entities treeView. It is not intended to be called directly, use buildEntitiesTree() function instead. options @param elements_model: the treeView model (used to store the data, see QT docs) @param element: the Entity or Shape element @return (containsChecked, containsUnchecked) indicating whether the subtree contains checked and/or unchecked elements """ containsChecked = False containsUnchecked = False item_col_0 = None if isinstance(element, EntityContent): icon = QIcon() icon.addPixmap(QPixmap(":/images/blocks.png")) item_col_0 = QStandardItem(icon, "") # will only display a checkbox + an icon that will never be disabled item_col_0.setData(QtCore.QVariant(element), ENTITY_OBJECT) # store a ref in our treeView element item_col_1 = QStandardItem(element.name) item_col_2 = QStandardItem(str(element.nr)) item_col_3 = QStandardItem("Entity") item_col_4 = QStandardItem(str(element.p0)) item_col_5 = QStandardItem(str(element.sca)) item_col_6 = QStandardItem(str(round(degrees(element.rot), 3))) # convert the angle into degrees with 3 digit after the decimal point elements_model.appendRow([item_col_0, item_col_1, item_col_2, item_col_3, item_col_4, item_col_5, item_col_6]) for sub_element in element.children: (checked, unchecked) = self.buildEntitiesSubTree(item_col_0, sub_element) containsChecked = containsChecked or checked containsUnchecked = containsUnchecked or unchecked flags = QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled elif isinstance(element, Shape): icon = QIcon() icon.addPixmap(QPixmap(":/images/shape.png"), QIcon.Normal, QIcon.Off) item_col_0 = QStandardItem(icon, "") # will only display a checkbox + an icon that will never be disabled item_col_0.setData(QVariantShape(element), SHAPE_OBJECT) # store a ref in our treeView element item_col_1 = QStandardItem(element.type) item_col_2 = QStandardItem(str(element.nr)) item_col_3 = QStandardItem(element.type) item_col_4 = QStandardItem() item_col_5 = QStandardItem() item_col_6 = QStandardItem() elements_model.appendRow([item_col_0, item_col_1, item_col_2, item_col_3, item_col_4, item_col_5, item_col_6]) if element.isDisabled(): containsUnchecked = True else: containsChecked = True flags = QtCore.Qt.ItemIsSelectable if element.allowedToChange: flags |= QtCore.Qt.ItemIsEnabled item_col_0.setCheckState(self.getCheckState(containsChecked, containsUnchecked)) item_col_0.setFlags(flags | QtCore.Qt.ItemIsUserCheckable) item_col_1.setFlags(flags) item_col_2.setFlags(flags) item_col_3.setFlags(flags) item_col_4.setFlags(flags) item_col_5.setFlags(flags) item_col_6.setFlags(flags) return (containsChecked, containsUnchecked) def getCheckState(self, containsChecked, containsUnchecked): if containsChecked: if containsUnchecked: return QtCore.Qt.PartiallyChecked else: return QtCore.Qt.Checked else: return QtCore.Qt.Unchecked def updateExportOrder(self, includeDisableds=False): """ Update the layers_list order to reflect the TreeView order. This function must be called before generating the GCode (export function). Export will be performed in the order of the structure self.LayerContents of the main. Each layer contains some shapes, and the export order of the shapes is set by populating the exp_order[] list with the shapes reference number for each layer (eg exp_order = [5, 3, 2, 4, 0, 1] for layer 0, exp_order = [5, 3, 7] for layer 1, ...) options """ i = self.layer_item_model.rowCount(QtCore.QModelIndex()) while i > 0: i -= 1 layer_item_index = self.layer_item_model.index(i, 0) if isValid(layer_item_index.data(LAYER_OBJECT)): real_layer = toPyObject(layer_item_index.data(LAYER_OBJECT)) self.layers_list.remove(real_layer) # Remove the layer from its original position self.layers_list.insert(0, real_layer) # and insert it at the beginning of the layer's list real_layer.exp_order = [] # Clear the current export order real_layer.exp_order_complete = [] # Clear the current export order # Assign the export order for the shapes of the layer "real_layer" for j in range(self.layer_item_model.rowCount(layer_item_index)): shape_item_index = self.layer_item_model.index(j, 0, layer_item_index) real_shape = None if isValid(shape_item_index.data(SHAPE_OBJECT)): real_shape = toPyObject(shape_item_index.data(SHAPE_OBJECT)).shapeobj if not real_shape.isDisabled() or includeDisableds: real_layer.exp_order.append(real_shape.nr) # Create the export order list with the real and unique shapes numbers (eg [25, 22, 30, 4, 1, 5]) if isValid(shape_item_index.data(CUSTOM_GCODE_OBJECT)): real_shape = toPyObject(shape_item_index.data(CUSTOM_GCODE_OBJECT)) if real_shape and (not real_shape.isDisabled() or includeDisableds): real_layer.exp_order_complete.append(real_layer.shapes.index(real_shape)) # Create the export order list with the shapes & custom gcode numbers (eg [5, 3, 2, 4, 0, 1]) def updateTreeViewOrder(self): """ Update the Layer TreeView order according to the exp_order list of each layer. This function should be called after running the TSP path otimizer """ i = self.layer_item_model.rowCount(QtCore.QModelIndex()) while i > 0: i -= 1 layer_item_index = self.layer_item_model.index(i, 0) layer_item = self.layer_item_model.itemFromIndex(layer_item_index) if isValid(layer_item_index.data(LAYER_OBJECT)): real_layer = toPyObject(layer_item_index.data(LAYER_OBJECT)) # for shape_nr in real_layer.exp_order[::-1]: # reverse order and prepend if we want to insert optimized shape before fixed shapes for shape_nr in real_layer.exp_order: for j in range(self.layer_item_model.rowCount(layer_item_index)): shape_item_index = self.layer_item_model.index(j, 0, layer_item_index) if isValid(shape_item_index.data(SHAPE_OBJECT)): real_shape = toPyObject(shape_item_index.data(SHAPE_OBJECT)).shapeobj if real_shape and real_shape.nr == shape_nr and (real_shape.send_to_TSP or g.config.vars.Route_Optimisation['TSP_shape_order'] == 'CONSTRAIN_ORDER_ONLY'): # Shape number "shape_nr" found in the treeView and Shape is movable => moving it to its new position item_to_be_moved = layer_item.takeRow(j) layer_item.appendRow(item_to_be_moved) break def columnsSelectDeselect(self, selection_model, item_index, select): """ columnsSelectDeselect() """ if select: # Select the matching shape in the list. selection_model.select(item_index, QItemSelectionModel.Select | QItemSelectionModel.Rows) else: # Unselect the matching shape in the list. selection_model.select(item_index, QItemSelectionModel.Deselect | QItemSelectionModel.Rows) def updateShapeSelection(self, shape, select): """ This method is a "slot" (callback) called from the main when the selection changes on the graphic view. It aims to update the treeView selection according to the graphic view. Note: in order to avoid signal loops, all selection signals are blocked when updating the selections in the treeViews options @param shape: the Shape whose selection has changed @param select: whether the Shape has been selected (True) or deselected (False) """ # Layer treeView item_index = self.findLayerItemIndexFromShape(shape) selection_model = self.ui.layersShapesTreeView.selectionModel() # Get the selection model of the QTreeView if item_index: # we found the matching index for the shape in our layers treeView model self.ui.layersShapesTreeView.blockSignals(True) # Avoid signal loops (we dont want the treeView to re-emit selectionChanged signal) self.columnsSelectDeselect(selection_model, item_index, select) self.ui.layersShapesTreeView.setCurrentIndex(item_index) self.ui.layersShapesTreeView.blockSignals(False) # Entities treeView item_index = self.findEntityItemIndexFromShape(shape) selection_model = self.ui.entitiesTreeView.selectionModel() # Get the selection model of the QTreeView if item_index: # we found the matching index for the shape in our entities treeView model self.ui.entitiesTreeView.blockSignals(True) # Avoid signal loops (we dont want the treeView to re-emit selectionChanged signal) self.columnsSelectDeselect(selection_model, item_index, select) self.ui.entitiesTreeView.setCurrentIndex(item_index) self.ui.entitiesTreeView.blockSignals(False) # Update the tool parameters fields self.clearToolsParameters() self.displayToolParametersForItem(shape.parentLayer, shape) def updateShapeEnabling(self, shape, enable): """ This method is a "slot" (callback) called from the main when the shapes are enabled or disabled on the graphic view. It aims to update the treeView checkboxes according to the graphic view. Note: in order to avoid signal loops, all selection signals are blocked when updating the checkboxes in the treeViews options @param shape: the Shape whose enabling has changed @param enable: whether the Shape has been enabled (True) or disabled (False) """ # Layer treeView item_index = self.findLayerItemIndexFromShape(shape) if item_index: # we found the matching index for the shape in our treeView model item = item_index.model().itemFromIndex(item_index) self.layer_item_model.blockSignals(True) # Avoid signal loops (we dont want the treeView to emit itemChanged signal) if enable: # Select the matching shape in the list self.updateCheckboxOfItem(item, QtCore.Qt.Checked) else: # deselect the matching shape in the list self.updateCheckboxOfItem(item, QtCore.Qt.Unchecked) self.layer_item_model.blockSignals(False) self.ui.layersShapesTreeView.update(item_index) # update the treeList drawing self.traverseParentsAndUpdateEnableDisable(self.layer_item_model, item_index) # update the parents checkboxes if self.auto_update_export_order: # update export order and thus export drawing self.prepareExportOrderUpdate() #Entities treeView item_index = self.findEntityItemIndexFromShape(shape) if item_index: # we found the matching index for the shape in our treeView model item = item_index.model().itemFromIndex(item_index) self.entity_item_model.blockSignals(True) # Avoid signal loops (we dont want the treeView to emit itemChanged signal) if enable: # Select the matching shape in the list self.updateCheckboxOfItem(item, QtCore.Qt.Checked) else: # deselect the matching shape in the list self.updateCheckboxOfItem(item, QtCore.Qt.Unchecked) self.entity_item_model.blockSignals(False) self.ui.entitiesTreeView.update(item_index) # update the treeList drawing self.traverseParentsAndUpdateEnableDisable(self.entity_item_model, item_index) # update the parents checkboxes def findLayerItemIndexFromShape(self, shape): """ Find internal layers treeView reference (item index) matching a "real" shape (ie a ShapeClass instance) options @param shape: the real shape (ShapeClass instance) @return: the found item index (can be None) """ return self.traverseChildrenAndFindShape(self.layer_item_model, QtCore.QModelIndex(), shape) def findEntityItemIndexFromShape(self, shape): """ Find internal entities treeView reference (item index) matching a "real" shape (ie a ShapeClass instance) options @param shape: the real shape (ShapeClass instance) @return: the found item index (can be None) """ return self.traverseChildrenAndFindShape(self.entity_item_model, QtCore.QModelIndex(), shape) def traverseChildrenAndFindShape(self, item_model, item_index, shape): """ This method is used by the findLayerItemIndexFromShape() and findEntityItemIndexFromShape() function in order to find a reference from a layer. It traverses the QT model and compares each item data with the shape passed as parameter. When found, the reference is returned options @param item_model: the treeView model (used to store the data, see QT docs) @param item_index: the initial model index (QModelIndex) in the tree (all children of this index are scanned) @param shape: the real shape (ShapeClass instance) @return: the found item index """ for i in range(item_model.rowCount(item_index)): sub_item_index = item_model.index(i, 0, item_index) if isValid(sub_item_index.data(SHAPE_OBJECT)): real_item = toPyObject(sub_item_index.data(SHAPE_OBJECT)).shapeobj if shape == real_item: return sub_item_index if item_model.hasChildren(sub_item_index): found_item_index = self.traverseChildrenAndFindShape(item_model, sub_item_index, shape) if found_item_index: return found_item_index def traverseChildrenAndSelect(self, item_model, item_index, state): """ This method is used internally to select/deselect all children of a given entity (eg to select all the shapes of a given layer when the user has selected a layer) options @param item_model: the treeView model (used to store the data, see QT docs) @param item_index: the initial model index (QModelIndex) in the tree (all children of this index are scanned) @param select: whether to select (True) or not (False) """ for i in range(item_model.rowCount(item_index)): sub_item_index = item_model.index(i, 0, item_index) if item_model.hasChildren(sub_item_index): self.traverseChildrenAndSelect(item_model, sub_item_index, state) else: element = sub_item_index.model().itemFromIndex(sub_item_index) if element: if element.data(SHAPE_OBJECT): toPyObject(element.data(SHAPE_OBJECT)).shapeobj.setSelected (state) elif element.data(CUSTOM_GCODE_OBJECT): toPyObject(element.data(CUSTOM_GCODE_OBJECT)).setSelected (state) def traverseChildrenAndEnableDisable(self, item_model, item_index, checked_state): """ This method is used internally to check/uncheck all children of a given entity (eg to enable all shapes of a given layer when the user has enabled a layer) options @param item_model: the treeView model (used to store the data, see QT docs) @param item_index: the initial model index (QModelIndex) in the tree (all children of this index are scanned) @param checked_state: the state of the checkbox """ for i in range(item_model.rowCount(item_index)): sub_item_index = item_model.index(i, 0, item_index) if item_model.hasChildren(sub_item_index): self.traverseChildrenAndEnableDisable(item_model, sub_item_index, checked_state) item = item_model.itemFromIndex(sub_item_index) if item and item.isEnabled(): # FIXME when parent was partially checked and a child cannot be checked self.updateCheckboxOfItem(item, checked_state) def traverseParentsAndUpdateEnableDisable(self, item_model, item_index): """ This code updates the parents checkboxes for a given entity. Parents checkboxes are tristate, eg if some of the shapes that belong to a layer are checked and others not, then the checkbox of this layer will be "half" checked options @param item_model: the treeView model (used to store the data, see QT docs) @param item_index: the initial model index (QModelIndex) in the tree (all children of this index are scanned) """ has_unchecked = False has_partially_checked = False has_checked = False item = None parent_item_index = None for i in range(item_model.rowCount(item_index.parent())): parent_item_index = item_model.index(i, 0, item_index.parent()) item = item_model.itemFromIndex(parent_item_index) if item: if item.checkState() == QtCore.Qt.Checked: has_checked = True elif item.checkState() == QtCore.Qt.PartiallyChecked: has_partially_checked = True else: has_unchecked = True # Update the parent item according to its children if item and item.parent(): parent_state = item.parent().checkState() if has_checked and has_unchecked or has_partially_checked: parent_state = QtCore.Qt.PartiallyChecked elif has_checked and not has_unchecked: parent_state = QtCore.Qt.Checked elif not has_checked and has_unchecked: parent_state = QtCore.Qt.Unchecked self.updateCheckboxOfItem(item.parent(), parent_state) # Handle the parent of the parent (recursive call) if isValid(parent_item_index.parent()): self.traverseParentsAndUpdateEnableDisable(item_model, parent_item_index.parent()) def toolUpdate(self): """ Slot that updates the tool's diameter, speed and start_radius when a new tool is selected @param text: the name of the newly selected tool """ text = self.ui.toolDiameterComboBox.currentText() if text: new_diameter = g.config.vars.Tool_Parameters[str(text)]['diameter'] new_speed = g.config.vars.Tool_Parameters[str(text)]['speed'] new_start_radius = g.config.vars.Tool_Parameters[str(text)]['start_radius'] self.ui.toolDiameterComboBox.setPalette(self.palette) self.ui.toolDiameterLabel.setText(str(round(new_diameter, 3))) self.ui.toolDiameterLabel.setPalette(self.palette) # Restore color self.ui.toolSpeedLabel.setText(str(round(new_speed, 1))) self.ui.toolSpeedLabel.setPalette(self.palette) # Restore color self.ui.startRadiusLabel.setText(str(round(new_start_radius, 3))) self.ui.startRadiusLabel.setPalette(self.palette) # Restore color # Get the new value and convert it to int val = toInt(text) if val[1]: selected_indexes_list = self.ui.layersShapesTreeView.selectedIndexes() for model_index in selected_indexes_list: if isValid(model_index): model_index = model_index.sibling(model_index.row(), 0) # get the first column of the selected row, since it's the only one that contains data element = model_index.model().itemFromIndex(model_index) real_item = None if isValid(element.data(SHAPE_OBJECT)): real_item = toPyObject(element.data(SHAPE_OBJECT)).shapeobj.parentLayer # Shape has no such property => update the parent layer elif isValid(element.data(LAYER_OBJECT)): real_item = toPyObject(element.data(LAYER_OBJECT)) if real_item is not None: if real_item.tool_nr != val[0]: real_item.tool_nr = val[0] real_item.tool_diameter = new_diameter real_item.speed = new_speed real_item.start_radius = new_start_radius self.tool_nr = real_item.tool_nr self.tool_diameter = new_diameter self.speed = new_speed self.start_radius = new_start_radius for shape in real_item.shapes: if isinstance(shape, Shape): # Only repaint _real_ shapes (and not the custom GCode for example) g.window.canvas_scene.repaint_shape(shape) if g.window and g.window.canvas_scene: g.window.canvas_scene.update() def toolParameterzRetractionArealUpdate(self): """ Slot that updates the above tools parameter when the corresponding LineEdit changes @param text: the value of the LineEdit """ self.ui.zRetractionArealLineEdit.setPalette(self.palette) # Restore color # Get the new value and convert it to float val = toFloat(self.ui.zRetractionArealLineEdit.text()) if val[1]: selected_indexes_list = self.ui.layersShapesTreeView.selectedIndexes() for model_index in selected_indexes_list: if isValid(model_index): model_index = model_index.sibling(model_index.row(), 0) # get the first column of the selected row, since it's the only one that contains data element = model_index.model().itemFromIndex(model_index) real_item = None if isValid(element.data(SHAPE_OBJECT)): real_item = toPyObject(element.data(SHAPE_OBJECT)).shapeobj.parentLayer # Shape has no such property => update the parent layer elif isValid(element.data(LAYER_OBJECT)): real_item = toPyObject(element.data(LAYER_OBJECT)) if real_item is not None: real_item.axis3_retract = val[0] self.axis3_retract = real_item.axis3_retract def toolParameterzSafetyMarginUpdate(self): """ Slot that updates the above tools parameter when the corresponding LineEdit changes @param text: the value of the LineEdit """ self.ui.zSafetyMarginLineEdit.setPalette(self.palette) # Restore color # Get the new value and convert it to float val = toFloat(self.ui.zSafetyMarginLineEdit.text()) if val[1]: selected_indexes_list = self.ui.layersShapesTreeView.selectedIndexes() for model_index in selected_indexes_list: if isValid(model_index): model_index = model_index.sibling(model_index.row(), 0) # get the first column of the selected row, since it's the only one that contains data element = model_index.model().itemFromIndex(model_index) real_item = None if isValid(element.data(SHAPE_OBJECT)): real_item = toPyObject(element.data(SHAPE_OBJECT)).shapeobj.parentLayer elif isValid(element.data(LAYER_OBJECT)): real_item = toPyObject(element.data(LAYER_OBJECT)) if real_item is not None: real_item.axis3_safe_margin = val[0] self.axis3_safe_margin = real_item.axis3_safe_margin def toolParameterzInfeedDepthUpdate(self): """ Slot that updates the above tools parameter when the corresponding LineEdit changes @param text: the value of the LineEdit """ self.ui.zInfeedDepthLineEdit.setPalette(self.palette) # Restore color # Get the new value and convert it to float val = toFloat(self.ui.zInfeedDepthLineEdit.text()) if val[1]: selected_indexes_list = self.ui.layersShapesTreeView.selectedIndexes() for model_index in selected_indexes_list: if isValid(model_index): model_index = model_index.sibling(model_index.row(), 0) # get the first column of the selected row, since it's the only one that contains data element = model_index.model().itemFromIndex(model_index) if isValid(element.data(SHAPE_OBJECT)): real_item = toPyObject(element.data(SHAPE_OBJECT)).shapeobj if real_item.axis3_slice_depth != val[0]: real_item.axis3_slice_depth = val[0] self.axis3_slice_depth = real_item.axis3_slice_depth g.window.canvas_scene.repaint_shape(real_item) self.prepareExportOrderUpdate() g.window.canvas_scene.update() def toolParameterg1FeedXYUpdate(self): """ Slot that updates the above tools parameter when the corresponding LineEdit changes @param text: the value of the LineEdit """ self.ui.g1FeedXYLineEdit.setPalette(self.palette) # Restore color # Get the new value and convert it to float val = toFloat(self.ui.g1FeedXYLineEdit.text()) if val[1]: selected_indexes_list = self.ui.layersShapesTreeView.selectedIndexes() for model_index in selected_indexes_list: if isValid(model_index): model_index = model_index.sibling(model_index.row(), 0) # get the first column of the selected row, since it's the only one that contains data element = model_index.model().itemFromIndex(model_index) if isValid(element.data(SHAPE_OBJECT)): real_item = toPyObject(element.data(SHAPE_OBJECT)).shapeobj real_item.f_g1_plane = val[0] self.f_g1_plane = real_item.f_g1_plane def toolParameterg1FeedZUpdate(self): """ Slot that updates the above tools parameter when the corresponding LineEdit changes @param text: the value of the LineEdit """ self.ui.g1FeedZLineEdit.setPalette(self.palette) # Restore color # Get the new value and convert it to float val = toFloat(self.ui.g1FeedZLineEdit.text()) if val[1]: selected_indexes_list = self.ui.layersShapesTreeView.selectedIndexes() for model_index in selected_indexes_list: if isValid(model_index): model_index = model_index.sibling(model_index.row(), 0) # get the first column of the selected row, since it's the only one that contains data element = model_index.model().itemFromIndex(model_index) if isValid(element.data(SHAPE_OBJECT)): real_item = toPyObject(element.data(SHAPE_OBJECT)).shapeobj real_item.f_g1_depth = val[0] self.f_g1_depth = real_item.f_g1_depth def toolParameterzInitialMillDepthUpdate(self): """ Slot that updates the above tools parameter when the corresponding LineEdit changes @param text: the value of the LineEdit """ self.ui.zInitialMillDepthLineEdit.setPalette(self.palette) # Restore color # Get the new value and convert it to float val = toFloat(self.ui.zInitialMillDepthLineEdit.text()) if val[1]: selected_indexes_list = self.ui.layersShapesTreeView.selectedIndexes() for model_index in selected_indexes_list: if isValid(model_index): model_index = model_index.sibling(model_index.row(), 0) # get the first column of the selected row, since it's the only one that contains data element = model_index.model().itemFromIndex(model_index) if isValid(element.data(SHAPE_OBJECT)): real_item = toPyObject(element.data(SHAPE_OBJECT)).shapeobj if real_item.axis3_start_mill_depth != val[0]: real_item.axis3_start_mill_depth = val[0] self.axis3_start_mill_depth = real_item.axis3_start_mill_depth g.window.canvas_scene.repaint_shape(real_item) self.prepareExportOrderUpdate() g.window.canvas_scene.update() def toolParameterzFinalMillDepthUpdate(self): """ Slot that updates the above tools parameter when the corresponding LineEdit changes @param text: the value of the LineEdit """ self.ui.zFinalMillDepthLineEdit.setPalette(self.palette) # Restore color # Get the new value and convert it to float val = toFloat(self.ui.zFinalMillDepthLineEdit.text()) if val[1]: selected_indexes_list = self.ui.layersShapesTreeView.selectedIndexes() for model_index in selected_indexes_list: if isValid(model_index): model_index = model_index.sibling(model_index.row(), 0) # get the first column of the selected row, since it's the only one that contains data element = model_index.model().itemFromIndex(model_index) if isValid(element.data(SHAPE_OBJECT)): real_item = toPyObject(element.data(SHAPE_OBJECT)).shapeobj if real_item.axis3_mill_depth != val[0]: real_item.axis3_mill_depth = val[0] self.axis3_mill_depth = real_item.axis3_mill_depth g.window.canvas_scene.repaint_shape(real_item) self.prepareExportOrderUpdate() g.window.canvas_scene.update() def actionOnSelectionChange(self, parent, selected, deselected): """ This function is a callback called from QTreeView class when something changed in the selection. It aims to update the graphic view according to the tree selection. It also deals with children selection when a parent is selected Note that there is no predefined signal for selectionChange event, that's why we use a callback function options @param parent: QT parent item (unused) @param select: list of selected items in the treeView @param deselect: list of deselected items in the treeView """ if not self.ui.layersShapesTreeView.selectionModel(): return # if invoked from updateSelection() do nothing if hasattr (self, "updateSelectionInProgress"): return self.clearToolsParameters() # disable tools parameters widgets, ... # Deselects all the shapes that are selected for selection in deselected: for model_index in selection.indexes(): if isValid(model_index): element = model_index.model().itemFromIndex(model_index) if element: if isValid(element.data(SHAPE_OBJECT)): # Deselect the shape on the canvas toPyObject(element.data(SHAPE_OBJECT)).shapeobj.setSelected(False) elif isValid(element.data(CUSTOM_GCODE_OBJECT)): toPyObject(element.data(CUSTOM_GCODE_OBJECT)).setSelected(False) elif isValid(element.data(LAYER_OBJECT)): self.traverseChildrenAndSelect(self.layer_item_model, model_index, False) elif isValid(element.data(ENTITY_OBJECT)): self.traverseChildrenAndSelect(self.entity_item_model, model_index, False) # Selects all the shapes that are selected lastSelected = None for selection in selected: for model_index in selection.indexes(): if isValid(model_index): model_index = model_index.sibling(model_index.row(), 0) # get the first column of the selected row, since it's the only one that contains data element = model_index.model().itemFromIndex(model_index) if element: if isValid(element.data(SHAPE_OBJECT)): lastSelected = toPyObject(element.data(SHAPE_OBJECT)).shapeobj lastSelected.setSelected(True) # Select the shape on the canvas elif isValid(element.data(CUSTOM_GCODE_OBJECT)): lastSelected = toPyObject(element.data(CUSTOM_GCODE_OBJECT)) lastSelected.setSelected(True) # Select the shape on the canvas # select all the children of a given layer when clicked elif isValid(element.data(LAYER_OBJECT)): self.traverseChildrenAndSelect(self.layer_item_model, model_index, True) lastSelected = toPyObject(element.data(LAYER_OBJECT)) # select all the children of a given entity when clicked elif isValid(element.data(ENTITY_OBJECT)): self.traverseChildrenAndSelect(self.entity_item_model, model_index, True) # Update tree selection for both layer and entity pages self.updateSelection(self.ui.layersShapesTreeView) self.updateSelection(self.ui.entitiesTreeView) if lastSelected is not None: # update the tools parameters according to the selection parentLayer = getattr (lastSelected, 'parentLayer', None) or lastSelected self.displayToolParametersForItem(parentLayer, lastSelected) if g.window.canvas_scene: g.window.canvas_scene.update() def updateSelection(self, treeview): """ Update selection of all tree items in a tree view according to value of .selected field of the object that corresponds to this tree item. This is called after massive item selections/deselections. """ model = treeview.model() item_sel = QItemSelection() item_desel = QItemSelection() for branch in range(model.rowCount()): self.updateSelectionRecursive(model, model.index(branch, 0), item_sel, item_desel) # Block actionOnSelectionChange to avoid unselecting whole blocks # (because they are part of item_desel). self.updateSelectionInProgress = True selection = treeview.selectionModel() selection.select(item_sel, QItemSelectionModel.Select | QItemSelectionModel.Rows) selection.select(item_desel, QItemSelectionModel.Deselect | QItemSelectionModel.Rows) del self.updateSelectionInProgress def updateSelectionRecursive(self, model, root, item_sel, item_desel): """ Helper routine for updateSelection() used for recursion """ if model.hasChildren(root): # always unselect layer and entity rows, otherwise selection misbehaves item_desel.select(root, root) for branch in range(model.rowCount(root)): self.updateSelectionRecursive(model, model.index(branch, 0, root), item_sel, item_desel) else: if isValid(root.data(SHAPE_OBJECT)): if toPyObject(root.data(SHAPE_OBJECT)).shapeobj.isSelected(): item_sel.select(root, root) else: item_desel.select(root, root) elif isValid(root.data(CUSTOM_GCODE_OBJECT)): if toPyObject(root.data(CUSTOM_GCODE_OBJECT)).isSelected(): item_sel.select(root, root) else: item_desel.select(root, root) def clearToolsParameters(self): """ This function restore defaults for tools parameters widgets (disabled, default color, ...) """ number_of_selected_items = len(self.ui.layersShapesTreeView.selectedIndexes()) if number_of_selected_items <= 2: # 2 selections = 1 row of 2 columns # 0 or 1 row are selected => clear some states self.tool_nr = None self.tool_diameter = None self.speed = None self.start_radius = None self.axis3_retract = None self.axis3_safe_margin = None self.axis3_slice_depth = None self.axis3_start_mill_depth = None self.axis3_mill_depth = None self.f_g1_plane = None self.f_g1_depth = None self.ui.toolDiameterComboBox.setPalette(self.palette) self.ui.toolDiameterLabel.setPalette(self.palette) self.ui.toolSpeedLabel.setPalette(self.palette) self.ui.startRadiusLabel.setPalette(self.palette) self.ui.zRetractionArealLineEdit.setPalette(self.palette) self.ui.zSafetyMarginLineEdit.setPalette(self.palette) self.ui.zInfeedDepthLineEdit.setPalette(self.palette) self.ui.g1FeedXYLineEdit.setPalette(self.palette) self.ui.g1FeedZLineEdit.setPalette(self.palette) self.ui.zInitialMillDepthLineEdit.setPalette(self.palette) self.ui.zFinalMillDepthLineEdit.setPalette(self.palette) if number_of_selected_items == 0: self.ui.millSettingsFrame.setEnabled(False) else: self.ui.millSettingsFrame.setEnabled(True) def updateToolParameters(self): """ Refresh tool parameters for currently selected shape/layer. """ if self.display_tool_layer is not None: self.displayToolParametersForItem(self.display_tool_layer, self.display_tool_shape) def displayToolParametersForItem(self, layer_item, shape_item = None): """ Display the current tools settings (fill the QLineEdit, ...) for the Layer / Shape passed as parameter @param layer_item: layer instance as defined in LayerContent.py @param shape_item: shape instance as defined in Shape.py """ self.display_tool_layer = layer_item self.display_tool_shape = shape_item # Selects the tool for the selected layer self.ui.toolDiameterComboBox.setCurrentIndex(self.ui.toolDiameterComboBox.findText(str(layer_item.tool_nr))) if self.tool_nr is not None and layer_item.tool_nr != self.tool_nr: # Several different tools are currently selected => grey background for the combobox palette = QPalette() palette.setColor(QPalette.Button, QtCore.Qt.gray) self.ui.toolDiameterComboBox.setPalette(palette) # Layer options self.tool_nr = layer_item.tool_nr self.tool_diameter = self.updateAndColorizeWidget(self.ui.toolDiameterLabel, self.tool_diameter, layer_item.tool_diameter) self.speed = self.updateAndColorizeWidget(self.ui.toolSpeedLabel, self.speed, layer_item.speed) self.start_radius = self.updateAndColorizeWidget(self.ui.startRadiusLabel, self.start_radius, layer_item.start_radius) self.axis3_retract = self.updateAndColorizeWidget(self.ui.zRetractionArealLineEdit, self.axis3_retract, layer_item.axis3_retract) self.axis3_safe_margin = self.updateAndColorizeWidget(self.ui.zSafetyMarginLineEdit, self.axis3_safe_margin, layer_item.axis3_safe_margin) # Shape options if isinstance(shape_item, Shape): # To avoid segfault when someone passes eg Custom GCode as a shape_item self.axis3_start_mill_depth = self.updateAndColorizeWidget(self.ui.zInitialMillDepthLineEdit, self.axis3_start_mill_depth, shape_item.axis3_start_mill_depth) self.axis3_slice_depth = self.updateAndColorizeWidget(self.ui.zInfeedDepthLineEdit, self.axis3_slice_depth, shape_item.axis3_slice_depth) self.axis3_mill_depth = self.updateAndColorizeWidget(self.ui.zFinalMillDepthLineEdit, self.axis3_mill_depth, shape_item.axis3_mill_depth) if(False): #shape_item.Drill == True #drill removed self.ui.g1FeedXYLineEdit.setEnabled(False) self.f_g1_plane = self.updateAndColorizeWidget(self.ui.g1FeedXYLineEdit, self.f_g1_plane, shape_item.f_g1_plane) else: self.ui.g1FeedXYLineEdit.setEnabled(True) self.f_g1_plane = self.updateAndColorizeWidget(self.ui.g1FeedXYLineEdit, self.f_g1_plane, shape_item.f_g1_plane) self.f_g1_depth = self.updateAndColorizeWidget(self.ui.g1FeedZLineEdit, self.f_g1_depth, shape_item.f_g1_depth) #self.ui.OffsetXYLineEdit.setEnabled(shape_item.Pocket) #self.OffsetXY = self.updateAndColorizeWidget(self.ui.OffsetXYLineEdit, # self.OffsetXY, # shape_item.OffsetXY) else: for widget in self.ui.zInitialMillDepthLineEdit,\ self.ui.zInfeedDepthLineEdit,\ self.ui.zFinalMillDepthLineEdit,\ self.ui.g1FeedXYLineEdit,\ self.ui.g1FeedZLineEdit: widget.setText("") widget.setEnabled(False) def updatePocketMill(self, shape_item, enable): """ This method is a "slot" (callback) called from the main when the Pocket Mill is enabled or disabled on the graphic view. It aims to update the Mill Settings Frame according to the graphic view. @param enable: whether the Shape has been enabled (True) or disabled (False) """ """if(enable): self.ui.OffsetXYLineEdit.setEnabled(True) self.OffsetXY = self.updateAndColorizeWidget(self.ui.OffsetXYLineEdit, self.OffsetXY, shape_item.OffsetXY) else: self.ui.OffsetXYLineEdit.setEnabled(False) self.OffsetXY = self.updateAndColorizeWidget(self.ui.OffsetXYLineEdit, self.OffsetXY, shape_item.OffsetXY) """ def updateDrill(self, shape_item, enable): """ This method is a "slot" (callback) called from the main when the Drill is enabled or disabled on the graphic view. It aims to update the Mill Settings Frame according to the graphic view. @param enable: whether the Shape has been enabled (True) or disabled (False) """ """ if(enable): self.ui.OffsetXYLineEdit.setEnabled(False) self.ui.g1FeedXYLineEdit.setEnabled(False) #self.OffsetXY = self.updateAndColorizeWidget(self.ui.OffsetXYLineEdit, # self.OffsetXY, # shape_item.OffsetXY) else: self.ui.g1FeedXYLineEdit.setEnabled(True) #self.OffsetXY = self.updateAndColorizeWidget(self.ui.OffsetXYLineEdit, # self.OffsetXY, # shape_item.OffsetXY) """ def updateAndColorizeWidget(self, widget, previous_value, value): """ This function colours the text in grey when two values are different. It is used to show differences in tools settings when several layers / shapes are selected. @param widget: QT widget to update (can be a QLabel or a QLineEdit) @param previous_value: the value of the previously selected item @param value: the value (parameter) of the selected item """ widget.setText(str(round(value, 4))) # Round the value with at most 4 digits if previous_value and value != previous_value: # Several different tools parameter are currently selected (eg: mill deph = -3 for the first selected item and -2 for the second) => grey color for the text palette = QPalette() palette.setColor(QPalette.Text, QtCore.Qt.gray) widget.setPalette(palette) widget.setEnabled(True) return value def disableSelectedItems(self): selected_indexes_list = self.ui.layersShapesTreeView.selectedIndexes() for model_index in selected_indexes_list: if isValid(model_index): model_index = model_index.sibling(model_index.row(), 0) element = model_index.model().itemFromIndex(model_index) if element.isEnabled(): element.setCheckState(QtCore.Qt.Unchecked) def enableSelectedItems(self): selected_indexes_list = self.ui.layersShapesTreeView.selectedIndexes() for model_index in selected_indexes_list: if isValid(model_index): model_index = model_index.sibling(model_index.row(), 0) element = model_index.model().itemFromIndex(model_index) if element.isEnabled(): element.setCheckState(QtCore.Qt.Checked) def doNotOptimizeRouteForSelectedItems(self): selected_indexes_list = self.ui.layersShapesTreeView.selectedIndexes() for model_index in selected_indexes_list: if isValid(model_index): model_index = model_index.sibling(model_index.row(), PATH_OPTIMISATION_COL) element = model_index.model().itemFromIndex(model_index) if element.isEnabled(): element.setCheckState(QtCore.Qt.Unchecked) def optimizeRouteForSelectedItems(self): selected_indexes_list = self.ui.layersShapesTreeView.selectedIndexes() for model_index in selected_indexes_list: if isValid(model_index): model_index = model_index.sibling(model_index.row(), PATH_OPTIMISATION_COL) element = model_index.model().itemFromIndex(model_index) if element.isEnabled(): element.setCheckState(QtCore.Qt.Checked) def actionOnKeyPress(self, event): """ This function is a callback called from QTreeView class when a key is pressed on the treeView. If the key is the spacebar, and O, then capture it to enable/disable shape and optimize path ... @param key_code: the key code as defined by QT @param item_index: the item on which the keyPress event occurred """ # Enable/disable checkbox if event.key() == QtCore.Qt.Key_Space: for layer in self.layers_list: for shape in layer.shapes: if shape.isSelected(): sub_item_index = self.findLayerItemIndexFromShape(shape) # Get the first column of the row (ie the one that contains the enable/disable checkbox) sub_item_index = sub_item_index.sibling(sub_item_index.row(), 0) sub_item = sub_item_index.model().itemFromIndex(sub_item_index) if sub_item.isEnabled(): # Toggle checkbox sub_item.setCheckState(QtCore.Qt.Unchecked if sub_item.checkState() == QtCore.Qt.Checked else QtCore.Qt.Checked) # Optimize path checkbox elif event.key() == QtCore.Qt.Key_O: for layer in self.layers_list: for shape in layer.shapes: if shape.isSelected(): sub_item_index = self.findLayerItemIndexFromShape(shape) # Get the column of the row that contains the "Optimize Path" checkbox sub_item_index = sub_item_index.sibling(sub_item_index.row(), PATH_OPTIMISATION_COL) sub_item = sub_item_index.model().itemFromIndex(sub_item_index) if sub_item.isEnabled(): # Toggle checkbox sub_item.setCheckState(QtCore.Qt.Unchecked if sub_item.checkState() == QtCore.Qt.Checked else QtCore.Qt.Checked) else: return False return True def on_itemChanged(self, item): """ This slot is called when some data changes in one of the TreeView. For us, since rows are read only, it is only triggered when a checkbox is checked/unchecked options @param item: item is the modified element. It can be a Shape, a Layer or an Entity """ if item.column() == PATH_OPTIMISATION_COL: # User has clicked on the Path Optimisation (TSP) checkbox => update the corresponding data into the shape item_model_index = item.index().sibling(item.row(), 0) # get the first column of the selected row, since it's the only one that contains data first_col_item = item_model_index.model().itemFromIndex(item_model_index) if isValid(first_col_item.data(SHAPE_OBJECT)): # Set tool path optimisation for the matching shape toPyObject(first_col_item.data(SHAPE_OBJECT)).shapeobj.setToolPathOptimized(False if item.checkState() == QtCore.Qt.Unchecked else True) elif isValid(item.data(SHAPE_OBJECT)) or isValid(item.data(CUSTOM_GCODE_OBJECT)): self.updateCheckboxOfItem(item, item.checkState()) if self.auto_update_export_order: # update export order and thus export drawing self.prepareExportOrderUpdate() elif isValid(item.data(LAYER_OBJECT)): # Checkbox concerns a Layer object => check/uncheck each sub-items (shapes) self.traverseChildrenAndEnableDisable(self.layer_item_model, item.index(), item.checkState()) if self.auto_update_export_order: self.prepareExportOrderUpdate() elif isValid(item.data(ENTITY_OBJECT)): # Checkbox concerns an Entity object => check/uncheck each sub-items (shapes and/or other entities) self.traverseChildrenAndEnableDisable(self.entity_item_model, item.index(), item.checkState()) if self.auto_update_export_order: self.prepareExportOrderUpdate() g.window.canvas_scene.update() def updateCheckboxOfItem(self, item, check): """ This function is used to effectively update the state of a checkbox and enable / disable texts when item is a shape @param item: item is the modified element. It can be a Shape, a Layer or an Entity @param check: the check state """ item.model().blockSignals(True) # Avoid unnecessary signal loops (we don't want the treeView to emit itemChanged signal) item.setCheckState(check) item.model().blockSignals(False) if isValid(item.data(SHAPE_OBJECT)): # Checkbox concerns a shape object real_item = toPyObject(item.data(SHAPE_OBJECT)).shapeobj real_item.setDisable(not check == QtCore.Qt.Checked) # Update the other TreeViews item_index = self.findEntityItemIndexFromShape(real_item) if item_index: if item.model() == self.layer_item_model: self.entity_item_model.blockSignals(True) # Avoid unnecessary signal loops (we don't want the treeView to emit itemChanged signal) item_other_tree = self.entity_item_model.itemFromIndex(item_index) item_other_tree.setCheckState(check) self.enableDisableTreeRow(item_other_tree, check) self.entity_item_model.blockSignals(False) self.traverseParentsAndUpdateEnableDisable(self.entity_item_model, item_index) # Update parents checkboxes item_index = self.findLayerItemIndexFromShape(real_item) if item_index: if item.model() == self.entity_item_model: self.layer_item_model.blockSignals(True) # Avoid unnecessary signal loops (we don't want the treeView to emit itemChanged signal) item_other_tree = self.layer_item_model.itemFromIndex(item_index) item_other_tree.setCheckState(check) self.enableDisableTreeRow(item_other_tree, check) self.layer_item_model.blockSignals(False) self.traverseParentsAndUpdateEnableDisable(self.layer_item_model, item_index) # Update parents checkboxes if isValid(item.data(CUSTOM_GCODE_OBJECT)): # Checkbox concerns a custom gcode object real_item = toPyObject(item.data(CUSTOM_GCODE_OBJECT)) real_item.setDisable(not check == QtCore.Qt.Checked) self.traverseParentsAndUpdateEnableDisable(self.layer_item_model, item.index()) # Update parents checkboxes self.enableDisableTreeRow(item, check) def enableDisableTreeRow(self, item, check): """ Enable / disable all the columns from a row, except the first one (because the first column contains the checkbox that must stay enabled in order to be clickable) @param item: item is the modified element. It can be a Shape, a Layer or an Entity """ if item.model() == self.layer_item_model: current_tree_view = self.ui.layersShapesTreeView else: current_tree_view = self.ui.entitiesTreeView item.model().blockSignals(True) if not item.parent(): row_item = item.model().invisibleRootItem() # parent is 0, so we need to get the root item of the tree as parent i = item.columnCount() else: row_item = item.parent() # we are on one of the column of the row => take the parent, so that we get the complete row i = row_item.columnCount() row = item.row() while i > 1: i -= 1 column_item = row_item.child(row, i) if column_item: column_item.setEnabled(False if check == QtCore.Qt.Unchecked else True) current_tree_view.update(column_item.index()) item.model().blockSignals(False) # Update the display (refresh the treeView for the given item) current_tree_view.update(item.index()) def removeCustomGCodeSelected(self): """ Don't concat this function with removeCustomGCode()! (since the action that triggers "removeCustomGCode" sends a parameter, the "shape_item_index" is never set to None otherwise...) """ self.removeCustomGCode(None) def removeCustomGCode(self, shape_item_index = None): """ Remove a custom GCode object from the treeView, just after the current item. Custom GCode are defined into the config file """ logger.debug('Removing custom GCode...') current_item_index = shape_item_index if current_item_index is None: # No parameter passed => we use current item current_item_index = self.ui.layersShapesTreeView.currentIndex() if isValid(current_item_index): remove_row = current_item_index.row() # get the first column of the selected row, since it's the only one that contains data item_model_index = current_item_index.sibling(remove_row, 0) first_col_item = item_model_index.model().itemFromIndex(item_model_index) if isValid(first_col_item.data(CUSTOM_GCODE_OBJECT)): # Item is a Custom GCode, so we can remove it real_item = toPyObject(first_col_item.data(CUSTOM_GCODE_OBJECT)) real_item.parentLayer.shapes.remove(real_item) first_col_item.parent().removeRow(remove_row) else: logger.warning('Only Custom GCode items are removable!') def addCustomGCodeAfter(self, action_name): """ Add a custom GCode object into the treeView, just after the current item. Custom GCode are defined into the config file @param action_name: the name of the custom GCode to be inserted. This name must match one of the subsection names of [Custom_Actions] from the config file. """ logger.debug('Adding custom GCode "%s"' % action_name) g_code = "(No custom GCode defined)" if action_name and len(action_name) > 0: g_code = g.config.vars.Custom_Actions[str(action_name)].gcode current_item_index = self.ui.layersShapesTreeView.currentIndex() if isValid(current_item_index): push_row = current_item_index.row() + 1 # insert after the current row current_item = current_item_index.model().itemFromIndex(current_item_index) current_item_parent = current_item.parent() if not current_item_parent: # parent is 0, so we are probably on a layer # get the first column of the selected row, since it's the only one that contains data current_item_parent_index = current_item_index.sibling(current_item_index.row(), 0) current_item_parent = current_item_parent_index.model().itemFromIndex(current_item_parent_index) push_row = 0 # insert before any shape if isValid(current_item_parent.data(LAYER_OBJECT)): real_item_parent = toPyObject(current_item_parent.data(LAYER_OBJECT)) # creates a new CustomGCode instance custom_gcode = CustomGCode(action_name, g.window.newNumber, g_code, real_item_parent) g.window.newNumber += 1 # insert this new item at the end of the physical list real_item_parent.shapes.append(custom_gcode) self.AddCustomGCodeRowLayer(custom_gcode, current_item_parent, push_row) self.ui.layersShapesTreeView.setCurrentIndex(current_item.index()) def prepareExportOrderUpdate(self): """ If the live update of export route is enabled, this function is called each time the shape order changes. It aims to update the drawing. """ if self.auto_update_export_order: # Update the exported shapes self.updateExportOrder() # Emit the signal "exportOrderUpdated", so that the main can update tool path if he wants g.window.updateExportRoute() def setLiveUpdateExportRoute(self, live_update): """ Set or unset the live update of export route. """ self.auto_update_export_order = live_update if self.auto_update_export_order: self.prepareExportOrderUpdate() dxf2gcode-20240509/dxf2gcode/gui/routetext.py0000644000000000000000000000654014617065372017412 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2014 # Christian Kohl�ffel # Vinzenz Schulz # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ import logging from dxf2gcode.core.point import Point import dxf2gcode.globals.constants as c from PyQt5.QtWidgets import QGraphicsItem from PyQt5.QtGui import QPainterPath, QPen, QColor, QFont from PyQt5 import QtCore logger = logging.getLogger("Gui.RouteText") class RouteText(QGraphicsItem): def __init__(self, text='S', startp=Point(x=0.0, y=0.0),): """ Initialisation of the class. """ QGraphicsItem.__init__(self) self.setFlag(QGraphicsItem.ItemIsSelectable, False) self.text = text self.sc = 1.0 self.startp = QtCore.QPointF(startp.x, -startp.y) pencolor = QColor(0, 200, 255) self.brush = QColor(0, 100, 255) self.pen = QPen(pencolor, 1, QtCore.Qt.SolidLine) self.pen.setCosmetic(True) self.path = QPainterPath() self.path.addText(QtCore.QPointF(0, 0), QFont("Arial", int(10/self.sc)), self.text) def contains_point(self, point): """ Text cannot be selected. Return maximal distance """ return float(0x7fffffff) def setSelected(self, *args): """ Override inherited function - with possibility to be called with multiple arguments """ def paint(self, painter, option, widget=None): """ Method for painting the arrow. """ demat = painter.deviceTransform() self.sc = demat.m11() # painter.setClipRect(self.boundingRect()) painter.setPen(self.pen) painter.setBrush(self.brush) painter.scale(1/self.sc, 1/self.sc) painter.translate(self.startp.x() * self.sc, self.startp.y() * self.sc) painter.drawPath(self.path) def shape(self): """ Reimplemented function to select outline only. @return: Returns the Outline only """ logger.debug("Hier sollte ich nicht sein") return super(RouteText, self).shape() def boundingRect(self): """ Required method for painting. Inherited by Painterpath @return: Gives the Bounding Box """ rect = self.path.boundingRect().getRect() newrect = QtCore.QRectF(self.startp.x()+rect[0]/self.sc, self.startp.y()+rect[1]/self.sc, rect[2]/self.sc, rect[3]/self.sc) return newrect dxf2gcode-20240509/dxf2gcode/gui/popupdialog.py0000644000000000000000000001131614617065372017667 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2010-2014 # Christian Kohlöffel # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import import logging import dxf2gcode.globals.constants as c from PyQt5.QtWidgets import QDialog, QVBoxLayout, QFrame, QGridLayout, QLabel, QLineEdit, QPushButton, QCheckBox from PyQt5.QtGui import QIcon, QPixmap from PyQt5 import QtCore logger = logging.getLogger("Gui.PopUpDialog") class PopUpDialog(QDialog): def __init__(self, title="Test", label='Value1', value=1.0, wtype="lineEdit", haveAuto=False): super(PopUpDialog, self).__init__() logger.debug(title) logger.debug(label) logger.debug(value) logger.debug(wtype) self.title = title self.wtype = wtype self.label = label self.value = value self.result = None if not(len(label) == len(value)): raise Exception("Number of labels different to number of values") self.initUI(haveAuto) def tr(self, string_to_translate): """ Translate a string using the QCoreApplication translation framework @param: string_to_translate: a unicode string @return: the translated unicode string if it was possible to translate """ return str(QtCore.QCoreApplication.translate('PopUpDialog', string_to_translate)) def initUI(self, haveAuto): vbox = QVBoxLayout(self) top = QFrame(self) top.setFrameShape(QFrame.StyledPanel) bottom = QFrame(self) bottom.setFrameShape(QFrame.StyledPanel) grid1 = QGridLayout() grid1.setSpacing(10) self.lineLabel = [] self.lineElement = [] for i in range(len(self.label)): self.lineLabel.append(QLabel(self.label[i])) grid1.addWidget(self.lineLabel[i], i, 0) if self.wtype[i]=="lineEdit": self.lineElement.append(QLineEdit('%s' % self.value[i])) grid1.addWidget(self.lineElement[-1], i, 1) elif self.wtype[i]=="checkBox": self.lineElement.append(QCheckBox()) self.lineElement[-1].setChecked(self.value[i]) #self.lineElement[-1].stateChanged.connect(lambda:self.btnstate(self.lineElement[-1])) grid1.addWidget(self.lineElement[-1], i, 1) top.setLayout(grid1) grid2 = QGridLayout() grid2.setSpacing(5) autoButton = QPushButton(self.tr("Auto")) okButton = QPushButton(self.tr("OK")) cancelButton = QPushButton(self.tr("Cancel")) autoButton.clicked.connect(self.cbAuto) okButton.clicked.connect(self.cbOK) cancelButton.clicked.connect(self.cbCancel) if haveAuto: grid2.addWidget(autoButton, 0, 0) grid2.addWidget(okButton, 0, 1) grid2.addWidget(cancelButton, 0, 2) bottom.setLayout(grid2) vbox.addWidget(top) vbox.addWidget(bottom) self.setLayout(vbox) self.setWindowFlags(self.windowFlags() & ~QtCore.Qt.WindowContextHelpButtonHint) self.setWindowTitle(self.title) iconWT = QIcon() iconWT.addPixmap(QPixmap(":images/DXF2GCODE-001.ico"), QIcon.Normal, QIcon.Off) self.setWindowIcon(QIcon(iconWT)) self.exec_() def cbAuto(self): """ Determine WP zero automatically by finding the left/bottom-most shape """ self.result = 'Auto' self.close() def cbOK(self): self.result = [] for lineElement in self.lineElement: if isinstance(lineElement,QLineEdit): self.result.append(lineElement.text()) elif isinstance(lineElement,QCheckBox): self.result.append(lineElement.isChecked()) self.close() def cbCancel(self): logger.debug('Cancel') self.close() dxf2gcode-20240509/dxf2gcode/gui/messagebox.py0000644000000000000000000000560214617065372017502 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2011-2014 # Christian Kohlöffel # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ """ Special purpose canvas including all required plotting function etc. """ import os import dxf2gcode.globals.constants as c import dxf2gcode.globals.globals as g from PyQt5.QtWidgets import QTextBrowser from PyQt5 import QtCore class MessageBox(QTextBrowser): """ The MessageBox Class performs the write functions in the Message Window. The previous defined MessageBox class is used as output (Within ui). @sideeffect: None """ def __init__(self, origobj): """ Initialization of the MessageBox class. @param origobj: This is the reference to to parent class initialized previously. """ super(MessageBox, self).__init__() self.setOpenExternalLinks(True) self.append(self.tr("You are using DXF2GCODE")) self.append(self.tr("Version %s (%s)") % (c.VERSION, c.DATE)) self.append(self.tr("For more information and updates visit:")) self.append("http://sourceforge.net/projects/dxf2gcode/") self.append("For Configuration files refer to folder:") self.append("%s" %(g.folder,g.folder)) self.append("") def tr(self, string_to_translate): """ Translate a string using the QCoreApplication translation framework @param: string_to_translate: a unicode string @return: the translated unicode string if it was possible to translate """ return str(QtCore.QCoreApplication.translate('MessageBox', string_to_translate)) def write(self, string): """ The function is called by the window logger to write the log message to the Messagebox @param charstr: The log message which will be written. """ stripped_string = string.strip() if stripped_string: self.append(stripped_string) self.verticalScrollBar().setValue(int(1e7)) dxf2gcode-20240509/dxf2gcode/gui/configwindow.py0000644000000000000000000022455414617065372020053 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2015-2016 # Xavier Izard # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ """ @purpose: build a configuration window on top of ConfigObj configfile module. It aims to be generic and reusable for many configuration windows. *** Basic usage *** 1) Let's say that your ConfigObj spec file is declared as is: CONFIG_SPEC = str(''' [MySection] # Comment for the variable below my_variable = float(min = 0, max = 360, default = 20) ''').splitlines() 2) Declare the corresponding dictionnary config_widget_dict = OrderedDict([ ('MySection', OrderedDict([ ('__section_title__', "My Title"), ('__subtitle__', CfgSubtitle(self.tr("My possible subtitle"))), ('my_variable', CfgDoubleSpinBox("My parameter description")), ('my_variable2', CfgDoubleSpinBox("My parameter description2")), ('NextSubtitleX', CfgSubtitle(self.tr("My not needed second subtitle"))), ('my_variable3', CfgDoubleSpinBox("My parameter description3")) ])), ]) The my __subtitle__ is not restricted to be placed under __section_title__ it can be placed on any line and it is also not restricted to be named like that. You can even leave it out. If you do it's replaced by a line. If you place it on a different line (with the name:__subtitle__), this subsection does not start with horizontal bar. 3) Instanciate the config window: config_window = ConfigWindow(config_widget_dict, var_dict, configspec, self) #See ConfigObj for var_dict & configspec config_window.finished.connect(self.updateConfiguration) #Optional signal to know when the config has changed *** List of graphical elements currently supported *** - CfgSubtitle(): subtitle - just for displaying a bar with some text - CfgCheckBox(): a basic (possibly tristate) checkbox - CfgSpinBox(): a spinbox for int values - CfgDoubleSpinBox(): a spinbox for float values - CfgLineEdit(): a text input (1 line) - CfgListEdit(): a text list input (1 line) - CfgTextEdit(): a text input (multiple lines) - CfgComboBox(): a drop-down menu for selecting options - CfgTable(): a 2D table with editable text entries - CfgTableCustomActions(): specific module based on CfgTable(), for storing custom GCODE - CfgTableToolParameters(): specific module based on CfgTable(), for storing mill tools """ from __future__ import absolute_import import logging from collections import OrderedDict from dxf2gcode.globals.helperfunctions import toInt, toFloat, str_encode, qstr_encode import dxf2gcode.globals.constants as c from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QMessageBox, QVBoxLayout, QHBoxLayout, QLayout, QFrame, \ QLabel, QLineEdit, QTextEdit, QCheckBox, QSpinBox, QDoubleSpinBox, QComboBox, QTableWidget, QTableWidgetItem, \ QPushButton, QAbstractItemView, QWidget, QSizePolicy, QListWidget, QStackedWidget, QSplitter from PyQt5.QtGui import QIcon, QPixmap, QValidator, QRegExpValidator from PyQt5.QtCore import QLocale, QRegExp from PyQt5 import QtCore from dxf2gcode.gui.popupdialog import PopUpDialog logger = logging.getLogger("Gui.ConfigWindow") class ConfigWindow(QDialog): Applied = QDialog.Accepted + QDialog.Rejected + 1 #Define a result code that is different from accepted and rejected """Main Class""" def __init__(self, definition_dict, config = None, configspec = None, parent = None, title = "Configuration"): """ Initialization of the Configuration window. ConfigObj must be instanciated before this one. @param definition_dict: the dict that describes our window @param config: data readed from the configfile. This dict is created by ConfigObj module. @param configspec: specifications of the configfile. This variable is created by ConfigObj module. """ QDialog.__init__(self, parent) self.setWindowTitle(title) iconWT = QIcon() iconWT.addPixmap(QPixmap(":images/DXF2GCODE-001.ico"), QIcon.Normal, QIcon.Off) self.setWindowIcon(QIcon(iconWT)) self.edition_mode = False #No editing in progress for now self.cfg_window_def = definition_dict #This is the dict that describes our window self.var_dict = config #This is the data from the configfile (dictionary created by ConfigObj class) self.configspec = configspec #This is the specifications for all the entries defined in the config file #There is no config file selector for now, so no callback either self.selector_change_callback = None self.selector_add_callback = None self.selector_remove_callback = None self.selector_duplicate_callback = None #Create the vars for the optional configuration's file selector self.cfg_file_selector = None self.frame_file_selector = CfgBase() #For displaying the optionnal files selector widgets #Create the config window according to the description dict received self.list_items = self.createWidgetFromDefinitionDict() #Create 3 buttons self.button_box = QDialogButtonBox(QDialogButtonBox.Discard | QDialogButtonBox.Apply | QDialogButtonBox.Close) self.button_box.accepted.connect(self.accept) #Apply and close (currently unused) self.button_box.rejected.connect(self.reject) #Close apply_button = self.button_box.button(QDialogButtonBox.Apply) apply_button.clicked.connect(self.applyChanges) #Apply button discard_button = self.button_box.button(QDialogButtonBox.Discard) discard_button.clicked.connect(self.discardChanges) #Discard button #Layout list_widget = QListWidget(parent) self.tab_window = QStackedWidget() for label, widget in self.list_items.items(): list_widget.addItem(label) self.tab_window.addWidget(widget) list_widget.currentTextChanged.connect(self.selectionChanged) tab_widget = CfgBase() tab_box = QVBoxLayout(self) tab_box.addWidget(self.frame_file_selector) tab_box.addWidget(self.tab_window) tab_widget.setLayout(tab_box) splitter = QSplitter() splitter.addWidget(list_widget) splitter.addWidget(tab_widget) #Layout the 2 above widgets vertically v_box = QVBoxLayout(self) v_box.addWidget(splitter) v_box.addWidget(self.button_box) self.setLayout(v_box) #Populate our Configuration widget with the values from the config file if self.var_dict is not None and self.configspec is not None: self.affectValuesFromConfig(self.var_dict, self.configspec) #No modification in progress for now self.setEditInProgress(False) def keyPressEvent(self, event): """ Reimplemented keyPressEvent() function so that we can catch and ignore the [ENTER] key (When pressed inside a QDialog, this key apply the changes by default) """ if event.key() == QtCore.Qt.Key_Enter or event.key() == QtCore.Qt.Key_Return: #key [ENTER] event.accept() #We caught the key and we "eat" it, so it prevents its default behaviour else: #Default behaviour for all the other keys QDialog.keyPressEvent(self, event) def tr(self, string_to_translate): """ Translate a string using the QCoreApplication translation framework @param: string_to_translate: a unicode string @return: the translated unicode string if it was possible to translate """ return str(QtCore.QCoreApplication.translate('ConfigWindow', string_to_translate)) def setEditInProgress(self, edit_mode): """ @param edit_mode: when True, the configuration window swith to edition mode, meaning that the "Apply" and "OK" buttons are enabled, ... """ editor_mode = edit_mode != False self.button_box.button(QDialogButtonBox.Apply).setEnabled(editor_mode) self.button_box.button(QDialogButtonBox.Discard).setEnabled(editor_mode) self.button_box.button(QDialogButtonBox.Close).setEnabled(not editor_mode) self.frame_file_selector.setEnabled(not editor_mode) def selectionChanged(self, text): """ Slot called when a category is selected in the list of the config widget """ self.tab_window.setCurrentWidget(self.list_items[str(text)]) def accept(self): """ Check and apply the changes, then close the config window (OK button) """ ok, errors_list = self.validateConfiguration(self.cfg_window_def) if ok: self.updateConfiguration(self.cfg_window_def, self.var_dict) #Update the configuration dict according to the new settings in our config window QDialog.accept(self) logger.info('New configuration OK') #No more modification in progress self.setEditInProgress(False) else: self.displayMessageBox(errors_list) def applyChanges(self): """ Apply changes without closing the window (allow to test some changes without reopening the config window each time) """ ok, errors_list = self.validateConfiguration(self.cfg_window_def) if ok: self.updateConfiguration(self.cfg_window_def, self.var_dict) #Update the configuration dict according to the new settings in our config window self.setResult(ConfigWindow.Applied) #Return a result code that is different from accepted and rejected self.finished.emit(self.result()) logger.info('New configuration applied') #No more modification in progress self.setEditInProgress(False) else: self.displayMessageBox(errors_list) def reject(self): """ Reload our configuration widget with the values from the config file (=> Cancel the changes in the config window), then close the config window """ self.affectValuesFromConfig(self.var_dict, self.configspec) # cannot be in the if statement - it is possible that the changeOccured was not fired if not self.button_box.button(QDialogButtonBox.Close).isEnabled(): logger.info('New configuration cancelled') self.setEditInProgress(False) QDialog.reject(self) def discardChanges(self): """ Reload our configuration widget with the values from the config file (=> Cancel the changes in the config window). Don't close the config window """ self.affectValuesFromConfig(self.var_dict, self.configspec) logger.info('New configuration cancelled') def displayMessageBox(self, errors_list): """ Popup a message box in order to display an error message @param errors_list: a string that contains all the errors """ errors_list = self.tr('Please correct the following error(s):\n') + errors_list error_message = QMessageBox(QMessageBox.Critical, self.tr('Invalid changes'), errors_list); error_message.exec_() def setConfigSelectorCallback(self, selection_changed_callback, add_file_callback, remove_file_callback, duplicate_file_callback): """ Define the functions called when the config file selector is used (respectively when a new file is selected in the combobox / when a file is added / when a file is removed) The ConfigWindow class is just toplevel configuration widget, it doesn't know about anything about the data, hence the callback """ self.selector_change_callback = selection_changed_callback self.selector_add_callback = add_file_callback self.selector_remove_callback = remove_file_callback self.selector_duplicate_callback = duplicate_file_callback def setConfigSelectorFilesList(self, config_list, select_item = None): """ Define the functions called when the config file selector is used (respectively when a new file is selected in the combobox / when a file is added / when a file is removed) The ConfigWindow class is just toplevel configuration widget, it doesn't know about anything about the data, hence the callback """ if len(config_list) > 0: if self.frame_file_selector.layout() is None: #There is currently no file selector widget, so we create a new one self.cfg_file_selector = CfgComboBox("Choose configuration file:", None, None) button_duplicate = QPushButton(QIcon(QPixmap(":/images/layer.png")), "") button_duplicate.setToolTip(self.tr("Duplicate the current post-processor")) button_add = QPushButton(QIcon(QPixmap(":/images/list-add.png")), "") button_add.setToolTip(self.tr("Add a new post-processor with default values")) button_remove = QPushButton(QIcon(QPixmap(":/images/list-remove.png")), "") button_remove.setToolTip(self.tr("Remove the current post-processor")) #Connect the signals to call the callback when an action is done on the file selector if self.selector_change_callback is not None: self.cfg_file_selector.combobox.currentIndexChanged[int].connect(self.selector_change_callback) button_duplicate.clicked.connect(self.configSelectorDuplicateFile) button_add.clicked.connect(self.configSelectorAddFile) button_remove.clicked.connect(self.configSelectorRemoveFile) layout_file_selector = QHBoxLayout() #For displaying the optional file's selector widget layout_file_selector.addWidget(self.cfg_file_selector) layout_file_selector.addWidget(button_duplicate) layout_file_selector.addWidget(button_add) layout_file_selector.addWidget(button_remove) self.frame_file_selector.setLayout(layout_file_selector) #Fill the combobox with the current file list self.cfg_file_selector.setSpec({'string_list': config_list['filename'], 'comment': ''}) #Select the item if not None if select_item is not None: self.cfg_file_selector.setValue(select_item) #Load the current config if self.selector_change_callback is not None: self.selector_change_callback(self.cfg_file_selector.combobox.currentIndex()) else: #Item should be a layout or a widget logger.warning("At least one config file must be passed to the config selector!") #Remove all the files from the config file selector if self.cfg_file_selector is not None: self.cfg_file_selector.setSpec({'string_list': [], 'comment': ''}) def configSelectorDuplicateFile(self): """ Function called when the "Remove configuration file" is clicked in the optional config selector zone """ title = self.tr('Duplicate a configuration file') label = [self.tr("Enter a new filename (without extension):")] value = [""] wtype = ["lineEdit"] filename_dialog = PopUpDialog(title, label, value, wtype) if filename_dialog.result is not None and len(filename_dialog.result[0]) > 0: #Call the callback function to duplicate the file if self.selector_duplicate_callback is not None: if self.selector_duplicate_callback(str(self.cfg_file_selector.getValue()), str(filename_dialog.result[0])) == False: #note: str() is needed for PyQT4 self.displayMessageBox(self.tr('An error occured while duplicating the file "{0}". Check that it doesn\'t already exists for example'.format(filename_dialog.result[0]))) else: logger.warning("No callback defined for duplicating the file, nothing will happen!") def configSelectorAddFile(self): """ Function called when the "Remove configuration file" is clicked in the optional config selector zone """ title = self.tr('Add a configuration file') label = [self.tr("Enter filename (without extension):")] value = [""] wtype = ["lineEdit"] filename_dialog = PopUpDialog(title, label, value, wtype) if filename_dialog.result is not None and len(filename_dialog.result[0]) > 0: if self.selector_add_callback is not None: if self.selector_add_callback(str(filename_dialog.result[0])) == False: self.displayMessageBox(self.tr('An error occured while creating the file "{0}". Check that it doesn\'t already exists for example'.format(filename_dialog.result[0]))) else: logger.warning("No callback defined for adding the file, nothing will happen!") def configSelectorRemoveFile(self): """ Function called when the "Remove configuration file" is clicked in the optional config selector zone """ confirmation_result = QMessageBox.question(self, self.tr('Delete configuration file?'), self.tr('Are you sure you want to permanently remove the file "{0}"'.format(self.cfg_file_selector.getValue())), QMessageBox.Ok | QMessageBox.Cancel); if confirmation_result == QMessageBox.Yes or confirmation_result == QMessageBox.Ok: #User has confirmed the file suppression, so let's go if self.selector_remove_callback is not None: if self.selector_remove_callback(str(self.cfg_file_selector.getValue())) == False: self.displayMessageBox(self.tr('An error occured while removing the file "{0}". Remove it manually'.format(self.cfg_file_selector.getValue()))) else: logger.warning("No callback defined for removing the file, nothing will happen!") def createWidgetFromDefinitionDict(self): """ Automatically build a widget, based on dict definition of the items. @return: a QWidget containing all the elements of the configuration window """ logger.info('Creating configuration window') definition = self.cfg_window_def tab_widgets = OrderedDict() #Create a dict with the sections' titles if not already defined. This dict contains sections' names as key and tabs' titles as values if '__section_title__' not in definition: definition['__section_title__'] = {} #Compute all the sections for section in definition: #skip the special section __section_title__ if section == '__section_title__': continue #Create the title for the section if it doesn't already exist if section not in definition['__section_title__']: #The title for this section doesn't exist yet if isinstance(definition[section], dict) and '__section_title__' in definition[section]: #The title for this section is defined into the section itself => we add the title to the dict containing all the titles definition['__section_title__'][section] = definition[section]['__section_title__'] else: #The title for this section is not defined anywhere, so we use the section name itself as a title definition['__section_title__'][section] = section.replace('_', ' ') #Create the tab (and the widget) for the current section, if it doesn't exist yet widget = None for widget_label in tab_widgets: if definition['__section_title__'][section] == widget_label: widget = tab_widgets[widget_label] break if widget is None: widget = QWidget() tab_widgets[definition['__section_title__'][section]] = widget #Create the tab content for this section self.createWidgetSubSection(definition[section], widget) #Add a stretch at the end of this subsection if widget.layout() is not None: widget.layout().addStretch() #Add a QSpacer at the bottom of each widget, so that the items are placed on top of each tab for widget in tab_widgets.values(): if widget.layout() is not None: widget.layout().addStretch() return tab_widgets def createWidgetSubSection(self, subdefinition, section_widget): """ Create the widgets that will be inserted into the tabs of the configuration window @param subdefinition: part of the definition dict @param section_widget: the widget that host the subwidgets @return: section_widget (for recursive call) """ vertical_box = section_widget.layout() if vertical_box is None: vertical_box = QVBoxLayout() section_widget.setLayout(vertical_box) vertical_box.setSpacing(0) #Don't use too much space, it makes the option window too big otherwise if isinstance(subdefinition, dict): vertical_box.addWidget(subdefinition.get('__subtitle__', CfgSubtitle())) self.createWidgetSubSectionWithSubLevels(subdefinition, section_widget) def createWidgetSubSectionWithSubLevels(self, subdefinition, section_widget): """ Create the widgets that will be inserted into the tabs of the configuration window @param subdefinition: part of the definition dict @param section_widget: the widget that host the subwidgets @return: section_widget (for recursive call) """ vertical_box = section_widget.layout() if isinstance(subdefinition, dict): for subsection in subdefinition: if subsection == '__section_title__': #skip the special section continue #Browse sublevels self.createWidgetSubSectionWithSubLevels(subdefinition[subsection], section_widget) #Recursive call, all the nested configuration item will appear at the same level else: if isinstance(subdefinition, (QWidget, QLayout)): vertical_box.addWidget(subdefinition) if hasattr(subdefinition, 'setChangeSlot'): subdefinition.setChangeSlot(self.changeOccured) else: #Item should be a layout or a widget logger.error("item subdefinition is incorrect") return section_widget def affectValuesFromConfig(self, config, configspec): """ Affect new values for the configuration @param config: data readed from the configfile. This dict is created by ConfigObj module. @param configspec: specifications of the configfile. This variable is created by ConfigObj module. """ self.var_dict = config #This is the data from the configfile (dictionary created by ConfigObj class) self.configspec = configspec #This is the specifications for all the entries defined in the config file self.setValuesFromConfig(self.cfg_window_def, self.var_dict, self.configspec) #No modification in progress for now self.setEditInProgress(False) def setValuesFromConfig(self, window_def, config, configspec): """ This function populates the option widget with the values that come from the configuration file. The values from the configuration file are stored into a dictionary, we browse this dictionary to populate our window @param window_def: the dict that describes our window @param config: data readed from the configfile. This dict is created by ConfigObj module. @param configspec: specifications of the configfile. This variable is created by ConfigObj module. """ #Compute all the sections for section in window_def: #skip the special section __section_title__ if section == '__section_title__' or isinstance(window_def[section], CfgDummy): continue if config is not None and section in config: if isinstance(window_def[section], dict): #Browse sublevels configspec_sub = None if configspec is not None and section in configspec: configspec_sub = configspec[section] self.setValuesFromConfig(window_def[section], config[section], configspec_sub) #Recursive call, until we find a real item (not a dictionnary with subtree) else: if isinstance(window_def[section], (QWidget, QLayout)): #assign the configuration retrieved from the configspec object of the ConfigObj if configspec is not None and section in configspec: window_def[section].setSpec(self.configspecParser(configspec[section], configspec.comments[section])) #assign the value that was readed from the configfile window_def[section].setValue(config[section]) else: #Item should be a layout or a widget logger.warning("item {0} is not a widget, can't set it's value!".format(window_def[section])) else: logger.error("can't assign values, item or section {0} not found in config file!".format(section)) def configspecParser(self, configspec, comments): """ This is a really trivial parser for ConfigObj spec file. This parser aims to exctract the limits and the available options for the entries in the config file. For example: if a config entry is defined as "option('mm', 'in', default = 'mm')", then the parser will create a list with ['mm', 'in] similarly, if an entry defined as "integer(max=9)", the max value will be exctracted @param configspec: specifications of the configfile. This variable is created by ConfigObj module. @param comments: string list containing the comments for a given item @return The function returns a dictionary with the following fields - minimum : contains the minimum value or length for an entry (possibly 'None' if nothing found) - maximum : contains the maximum value or length for an entry (possibly 'None' if nothing found) - string_list : contains the list of options for an "option" field, or the column titles for a table - comment : a text with the comment that belongs to the parameter (possibly an empty string if nothing found) """ #logger.debug('configspecParser({0}, {1})'.format(configspec, comments)) minimum = None maximum = None string_list = [] if isinstance(configspec, dict): #If the received configspec is a dictionary, we most likely have a table, so we are going to exctract sections names of this table #When tables are used, the "__many__" config entry is used for the definition of the configspec, so we try to excract the sections names by using this __many__ special keyword. #Example: 'Tool_Parameters': {[...], '__many__': {'diameter': 'float(default = 3.0)', 'speed': 'float(default = 6000)', 'start_radius': 'float(default = 3.0)'}} if '__many__' in configspec and isinstance(configspec['__many__'], dict): string_list = configspec['__many__'].keys() string_list.insert(0, '') #prepend an empty element since the first column of the table is the row name (eg a unique tool number) else: #configspec is normaly a string from which we can exctrat min / max values and possibly a list of options #Handle "option" config entries string_list = self.configspecParserExctractSections('option', configspec) i = 0 while i < len(string_list): #DON'T replace this with a "for", it would silently skip some steps because we remove items inside the loop #remove unwanted items which are unquoted (like the "default=" parameter) and remove the quotes if string_list[i].startswith('"'): string_list[i] = string_list[i].strip('"') elif string_list[i].startswith("'"): string_list[i] = string_list[i].strip("'") else: #unwanted item, it doesn't contain an element of the option() del string_list[i] continue i += 1 #Handle "integer" and "string" config entries if len(string_list) <= 0: string_list = self.configspecParserExctractSections('integer', configspec) if len(string_list) <= 0: string_list = self.configspecParserExctractSections('string', configspec) minimum, maximum = self.handle_type_config_entries(minimum, maximum, string_list, toInt) #Handle "float" config entries if len(string_list) <= 0: string_list = self.configspecParserExctractSections('float', configspec) minimum, maximum = self.handle_type_config_entries(minimum, maximum, string_list, toFloat) #Handle comments: comments are stored in a list and contains any chars that are in the configfile (including the hash symbol and the spaces) comments_string = '' if len(comments) > 0: for comment in comments: comments_string += comment.strip() comments_string = comments_string.strip(' #') comments_string = comments_string.replace('#', '\n') logger.debug('configspecParser(): exctracted option elements = {0}, min = {1}, max = {2}, comment = {3}'.format(string_list, minimum, maximum, comments_string)) result = {} result['minimum'] = minimum result['maximum'] = maximum result['string_list'] = string_list result['comment'] = comments_string return result def handle_type_config_entries(self, minimum, maximum, string_list, type_converter): for element in string_list: if minimum is not None and maximum is not None: break value = type_converter(element) if value[1]: if minimum is None: minimum = value[0] elif maximum is None: maximum = value[0] if minimum is None and 'min' in element: # string found in a string like "min = -7" element = element.replace('min', '') element = element.strip(' =') value = type_converter(element) if value[1]: minimum = value[0] if maximum is None and 'max' in element: # 'max' string found element = element.replace('max', '') element = element.strip(' =') value = type_converter(element) if value[1]: maximum = value[0] return minimum, maximum def configspecParserExctractSections(self, attribute_name, string): """ returns a list of item from a string. Eg the string "option('mm', 'in', default = 'mm')" will be exploded into the string list ["mm", "in", "default = 'mm'"] """ string_list = [] pos_init = string.find(attribute_name + '(') if pos_init >= 0: pos_init += len(attribute_name + '(') #skip the "option(" pos_end = string.find(')', pos_init) if pos_end > pos_init: #print("substring found = {0}".format(string[pos_init:pos_end])) string_list = string[pos_init:pos_end].split(',') # remove empty elements and remove leading and trailing spaces string_list = [string.strip() for string in string_list if string] return string_list def changeOccured(self): """ This function (slot) is called whenever a modification occurs in the configuration window. It enables "Apply" and "OK" buttons, plus disable the configfile selector. """ #There are some changes, we swith to edit mode self.setEditInProgress(True) def validateConfiguration(self, window_def, result_string = '', result_bool = True): """ Check the configuration (check the limits, eg min/max values, ...). These limits are set according to the configspec passed to the constructor @param window_def: the dict that describes our window @param result_string: use only for recursive call @param result_bool: use only for recursive call @return (result_bool, result_string): - result_bool: True if no errors were encountered, False otherwise - result_string: a string containing all the errors encountered during the validation """ #Compute all the sections for section in window_def: #skip the special section __section_title__ if section == '__section_title__' or isinstance(window_def[section], CfgDummy): continue if isinstance(window_def[section], dict): #Browse sublevels (result_bool, result_string) = self.validateConfiguration(window_def[section], result_string, result_bool) #Recursive call, until we find a real item (not a dictionnary with subtree) else: if isinstance(window_def[section], (QWidget, QLayout)): #check that the value is correct for each widget result = window_def[section].validateValue() if result[0] is False: result_bool = False result_string += result[1] else: #Item should be a layout or a widget logger.warning("item {0} is not a widget, can't validate it!".format(window_def[section])) return (result_bool, result_string) def updateConfiguration(self, window_def, config): """ Update the application configuration (ConfigObj) according to the changes made into the ConfigWindow. The self.var_dict variable is updated @param window_def: the dict that describes our window @param config: data readed from the configfile. This dict is created by ConfigObj module and will be updated here. """ #Compute all the sections for section in window_def: #skip the special section __section_title__ if section == '__section_title__' or isinstance(window_def[section], CfgDummy): continue if config is not None and section in config: if isinstance(window_def[section], dict): #Browse sublevels self.updateConfiguration(window_def[section], config[section]) #Recursive call, until we find a real item (not a dictionnary with subtree) else: if isinstance(window_def[section], (QWidget, QLayout)): #assign the value that was readed from the configfile config[section] = window_def[section].getValue() else: #Item should be a layout or a widget logger.warning("item {0} is not a widget, can't update it!".format(window_def[section])) else: logger.error("can't update configuration, item or section {0} not found in config file!".format(section)) ############################################################################################################################ # The classes below are all based on QWidgets and allow to create various predefined elements for the configuration window # ############################################################################################################################ class CfgBase(QWidget): """ Base class used only for setting the Layout. Want a consistent look. """ def __init__(self, parent=None): QWidget.__init__(self, parent) def setLayout(self, layout=None, indent=True): layout.setSpacing(2) # Don't use too much space, it makes the option window too big otherwise layout.setContentsMargins(10 if indent else 0, 5, 1, 1) QWidget.setLayout(self, layout) class CfgDummy(CfgBase): """ If a class inherits this dummy class then it should be skipped - it only serves display purposes """ def __init__(self, parent=None): CfgBase.__init__(self, parent) class CfgSubtitle(CfgDummy): def __init__(self, text=None, parent=None): CfgDummy.__init__(self, parent) layout = QHBoxLayout() if text is not None: layout.addWidget(QLabel(text)) separator = QFrame() separator.setFrameShape(QFrame.HLine) separator.setSizePolicy(QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Fixed)) layout.addWidget(separator) self.setLayout(layout, False) class CfgCheckBox(CfgBase): """ Subclassed QCheckBox to match our needs. """ def __init__(self, text, tristate = False, parent = None): """ Initialization of the CfgCheckBox class. @param text: text string associated with the checkbox @param tristate: whether the checkbox must have 3 states (tristate) or 2 states """ CfgBase.__init__(self, parent) self.checkbox = QCheckBox(text, parent) self.checkbox.setTristate(tristate) layout = QHBoxLayout(parent) layout.addWidget(self.checkbox) self.setLayout(layout) def setSpec(self, spec): """ Set the specifications for the item (min/max values, ...) @param spec: the specifications dict (can contain the following keys: minimum, maximum, comment, string_list) """ #Nothing is configurable in the configspec for this item if spec['comment']: self.setWhatsThis(spec['comment']) def setChangeSlot(self, changeNotifyer): """ Assign a notifyier slot (this slot is called whenever the state of the widget changes) @param changeNotifyer: the function (slot) that is called in case of change """ self.checkbox.stateChanged.connect(changeNotifyer) def validateValue(self): """ This item can't be wrong, so we always return true and an empty string @return (True, ''): """ return (True, '') def getValue(self): """ @return 0 when the checkbox is unchecked, 1 if it is checked and 2 if it is partly checked (tristate must be set to true for tristate mode) """ check_state = self.checkbox.checkState() if check_state == QtCore.Qt.Unchecked: check_state = 0 elif check_state == QtCore.Qt.Checked: check_state = 1 elif check_state == QtCore.Qt.PartiallyChecked: check_state = 2 return check_state if self.checkbox.isTristate() else check_state == 1 def setValue(self, value): """ Assign the value for our object @param value: 0 when the checkbox is unchecked, 1 if it is checked and 2 if it is partly checked (tristate must be set to true for tristate mode) """ self.blockSignals(True) # Avoid unnecessary signal (we don't want the config window to emit any signal when filling the fields programatically) if value == 0: self.checkbox.setCheckState(QtCore.Qt.Unchecked) elif value == 2: self.checkbox.setCheckState(QtCore.Qt.PartiallyChecked) else: self.checkbox.setCheckState(QtCore.Qt.Checked) self.blockSignals(False) class CfgSpinBox(CfgBase): """ Subclassed QSpinBox to match our needs. """ def __init__(self, text, unit = None, minimum = None, maximum = None, parent = None): """ Initialization of the CfgSpinBox class (used for int values). @param text: text string associated with the SpinBox @param minimum: min value (int) @param minimum: max value (int) """ CfgBase.__init__(self, parent) self.label = QLabel(text, parent) self.spinbox = QSpinBox(parent) self.spinbox.setMinimumWidth(200) # Provide better alignment with other items if unit is not None: self.setUnit(unit) layout = QHBoxLayout(parent) layout.addWidget(self.label) layout.addStretch() layout.addWidget(self.spinbox) self.setLayout(layout) self.setSpec({'minimum': minimum, 'maximum': maximum, 'comment': ''}) def setSpec(self, spec): """ Set the specifications for the item (min/max values, ...) @param spec: the specifications dict (can contain the following keys: minimum, maximum, comment, string_list) """ if spec['minimum'] is not None: self.spinbox.setMinimum(spec['minimum']) else: self.spinbox.setMinimum(-1000000000) #if no value is defined for the minimum, use a reasonable value if spec['maximum'] is not None: self.spinbox.setMaximum(spec['maximum']) else: self.spinbox.setMaximum(1000000000) #if no value is defined for the maximum, use a more reasonable value than 99 (default value in QT) ... if spec['comment']: self.setWhatsThis(spec['comment']) def setChangeSlot(self, changeNotifyer): """ Assign a notifyier slot (this slot is called whenever the state of the widget changes) @param changeNotifyer: the function (slot) that is called in case of change """ self.spinbox.valueChanged.connect(changeNotifyer) def setUnit(self, unit): """ Set the unit of the SpinBox (unit is displayed just after the value) @param unit: string with the unit used for the spinbox """ self.spinbox.setSuffix(unit) def validateValue(self): """ This item can't be wrong, so we always return true and an empty string @return (True, ''): """ return (True, '') def getValue(self): """ @return: the current value of the QSpinBox """ return self.spinbox.value() def setValue(self, value): """ Assign the value for our object @param value: int value """ self.spinbox.blockSignals(True) # Avoid unnecessary signal (we don't want the config window to emit any signal when filling the fields programatically) self.spinbox.setValue(value) self.spinbox.blockSignals(False) class CorrectedDoubleSpinBox(QDoubleSpinBox): """ Subclassed QDoubleSpinBox to get a version that works for everyone ... DON'T remove this class, it is a correction for the guys who decided to use comma (',') as a decimal separator (France, Italy, ...) but failed to use comma on the keypad (keypad use dot, not comma)! This subclassed QDoubleSpinBox allow to enter decimal values like 3.5 _and_ 3,5 (the default QDoubleSpinBox implementation only allow the locale as a decimal separator, so for eg, France, you just can't enter decimal values using the keypad!) See here for more details: http://www.qtcentre.org/threads/12483-Validator-for-QDoubleSpinBox and http://www.qtcentre.org/threads/13711-QDoubleSpinBox-dot-as-comma """ def __init__(self, parent = None): QDoubleSpinBox.__init__(self, parent) self.saved_suffix = '' #Let's use the locale decimal separator if it is different from the dot ('.') local_decimal_separator = QLocale().decimalPoint() if local_decimal_separator == '.': local_decimal_separator = '' self.lineEdit().setValidator(QRegExpValidator(QRegExp("-?[0-9]*[.{0}]?[0-9]*.*".format(local_decimal_separator)), self)) def setSuffix(self, suffix): self.saved_suffix = suffix QDoubleSpinBox.setSuffix(self, suffix) def valueFromText(self, text): # result = float(text.replace('.', QLocale().decimalPoint())) # python expect a dot ('.') as decimal separator text = qstr_encode(text).replace(str_encode(self.saved_suffix), '').replace(str(QLocale().decimalPoint()), '.') return toFloat(text)[0] def validate(self, entry, pos): #let's *really* trust the validator #http://python.6.x6.nabble.com/QValidator-raises-TypeError-td1923683.html #print("validate({}, {})".format(entry, pos)) return (QValidator.Acceptable, entry, pos) class CfgDoubleSpinBox(CfgSpinBox): """ Subclassed QDoubleSpinBox to match our needs. """ def __init__(self, text, unit = None, minimum = None, maximum = None, precision = None, parent = None): """ Initialization of the CfgDoubleSpinBox class (used for float values). @param text: text string associated with the SpinBox @param minimum: min value (float) @param minimum: max value (float) """ CfgBase.__init__(self, parent) # skip the init of CfgSpinBox - we want a "corrected" spinbox self.label = QLabel(text, parent) self.spinbox = QSpinBox(parent) self.spinbox = CorrectedDoubleSpinBox(parent) self.spinbox.setMinimumWidth(200) # Provide better alignment with other items if precision is not None: self.spinbox.setDecimals(precision) if unit is not None: self.setUnit(unit) layout = QHBoxLayout(parent) layout.addWidget(self.label) layout.addStretch() layout.addWidget(self.spinbox) self.setLayout(layout) self.setSpec({'minimum': minimum, 'maximum': maximum, 'comment': ''}) class CfgLineEdit(CfgBase): """ Subclassed QLineEdit to match our needs. """ def __init__(self, text, size_min = None, size_max = None, parent = None): """ Initialization of the CfgLineEdit class (text edit, one line). @param text: text string associated with the line edit @param size_min: min length (int) @param size_max: max length (int) """ CfgBase.__init__(self, parent) self.label = QLabel(text, parent) self.lineedit = QLineEdit(parent) layout = QVBoxLayout(parent) layout.addWidget(self.label) layout.addWidget(self.lineedit) self.setLayout(layout) self.size_min = 0 self.setSpec({'minimum': size_min, 'maximum': size_max, 'comment': ''}) def setSpec(self, spec): """ Set the specifications for the item (min/max values, ...) @param spec: the specifications dict (can contain the following keys: minimum, maximum, comment, string_list) """ if spec['minimum'] is not None: self.size_min = spec['minimum'] if spec['maximum'] is not None: self.lineedit.setMaxLength(spec['maximum']) if spec['comment']: self.setWhatsThis(spec['comment']) def setChangeSlot(self, changeNotifyer): """ Assign a notifyier slot (this slot is called whenever the state of the widget changes) @param changeNotifyer: the function (slot) that is called in case of change """ self.lineedit.textChanged.connect(changeNotifyer) def validateValue(self): """ Check the minimum length value @return (result_bool, result_string): - result_bool: True if no errors were encountered, False otherwise - result_string: a string containing all the errors encountered during the validation """ field_length = len(str(self.lineedit.text())) if field_length < self.size_min: result = (False, str(self.tr('\nNot enough chars (expected {0}, found {1}) for the field "{2}"\n')).format(self.size_min, field_length, self.label.text())) else: #OK result = (True, '') return result def getValue(self): """ @return: the current value of the QSpinBox """ return str(self.lineedit.text()) def setValue(self, value): """ Assign the value for our object @param value: text string """ self.lineedit.blockSignals(True) # Avoid unnecessary signal (we don't want the config window to emit any signal when filling the fields programatically) self.lineedit.setText(value) self.lineedit.blockSignals(False) class CfgListEdit(CfgLineEdit): """ Subclassed QLineEdit to match our needs. """ def __init__(self, text, separator, size_max = None, parent = None): """ Initialization of the CfgListEdit class (text edit, one line, strings separated with "separator"). @param text: text string associated with the line edit @param separator: the separator used for the strings (eg: ',') @param size_min: min length (int) @param size_max: max length (int) """ CfgLineEdit.__init__(self, text + " (use '" + separator + "' as separator)", size_max, parent) #Store the separator so that we can return a list of strings instead of a single string self.separator = separator def getValue(self): """ @return the current value of the QSpinBox (string list) """ item_list = str(self.lineedit.text()).split(self.separator) item_list = [item.strip(' ') for item in item_list] # remove leading and trailing whitespaces return item_list def setValue(self, value): """ Assign the value for our object @param value: text string or list of text strings """ joined_value = value if isinstance(value, (list, tuple)): joined_value = (self.separator + ' ').join(value) #Join the strings and add a space for more readability (the space will be removed when writting) self.lineedit.setText(joined_value) class CfgTextEdit(CfgBase): """ Subclassed QTextEdit to match our needs. """ def __init__(self, text, size_min = None, size_max = None, parent = None): """ Initialization of the CfgLineEdit class (text edit, one line). @param text: text string associated with the line edit @param size_min: min length (int) @param size_max: max length (int) """ CfgBase.__init__(self, parent) self.label = QLabel(text, parent) self.textedit = QTextEdit(parent) self.textedit.setAcceptRichText(False) self.textedit.setAutoFormatting(QTextEdit.AutoNone) layout = QVBoxLayout(parent) layout.addWidget(self.label) layout.addWidget(self.textedit) self.setLayout(layout) self.size_min = 0 self.setSpec({'minimum': size_min, 'maximum': size_max, 'comment': ''}) def setSpec(self, spec): """ Set the specifications for the item (min/max values, ...) @param spec: the specifications dict (can contain the following keys: minimum, maximum, comment, string_list) """ if spec['minimum'] is not None: self.size_min = spec['minimum'] if spec['maximum'] is not None: self.textedit.setMaxLength(spec['maximum']) if spec['comment']: self.setWhatsThis(spec['comment']) def setChangeSlot(self, changeNotifyer): """ Assign a notifyier slot (this slot is called whenever the state of the widget changes) @param changeNotifyer: the function (slot) that is called in case of change """ self.textedit.textChanged.connect(changeNotifyer) def validateValue(self): """ Check the minimum length value @return (result_bool, result_string): - result_bool: True if no errors were encountered, False otherwise - result_string: a string containing all the errors encountered during the validation """ field_length = len(str(self.textedit.toPlainText())) if field_length < self.size_min: result = (False, str(self.tr('\nNot enough chars (expected {0}, found {1}) for the field "{2}"\n')).format(self.size_min, field_length, self.label.text())) else: #OK result = (True, '') return result def getValue(self): """ @return: the current value of the QSpinBox """ return str(self.textedit.toPlainText()) def setValue(self, value): """ Assign the value for our object @param value: text string """ self.textedit.blockSignals(True) # Avoid unnecessary signal (we don't want the config window to emit any signal when filling the fields programatically) self.textedit.setPlainText(value) self.textedit.blockSignals(False) class CfgComboBox(CfgBase): """ Subclassed QComboBox to match our needs. """ def __init__(self, text, items_list = None, default_item = None, parent = None): """ Initialization of the CfgComboBox class (drop-down menu). @param text: text string associated with the combobox @param items_list: string list containing all the available options @param default_item: string containing the default selected item """ CfgBase.__init__(self, parent) if isinstance(items_list, (list, tuple)): self.setSpec({'string_list': items_list, 'comment': ''}) if default_item is not None: self.setValue(default_item) self.label = QLabel(text, parent) self.combobox = QComboBox(parent) self.combobox.setMinimumWidth(200) # Provide better alignment with other items layout = QHBoxLayout(parent) layout.addWidget(self.label) layout.addStretch() layout.addWidget(self.combobox) self.setLayout(layout) def setSpec(self, spec): """ Set the specifications for the item (min/max values, ...) @param spec: the specifications dict (can contain the following keys: minimum, maximum, comment, string_list) """ self.combobox.blockSignals(True) # Avoid unnecessary signal (we don't want the config window to emit any signal when filling the fields programatically) self.combobox.clear() self.combobox.addItems(spec['string_list']) if spec['comment']: self.setWhatsThis(spec['comment']) self.combobox.blockSignals(False) def setChangeSlot(self, changeNotifyer): """ Assign a notifyier slot (this slot is called whenever the state of the widget changes) @param changeNotifyer: the function (slot) that is called in case of change """ self.combobox.currentIndexChanged.connect(changeNotifyer) def validateValue(self): """ This item can't be wrong, so we always return true and an empty string @return (True, ''): """ return (True, '') def getValue(self): """ @return: the string of the currently selected entry """ return self.combobox.currentText() def setValue(self, value): """ Assign the value for our object @param value: the text of the entry to select in the combobox """ self.combobox.blockSignals(True) # Avoid unnecessary signal (we don't want the config window to emit any signal when filling the fields programatically) self.combobox.setCurrentIndex(self.combobox.findText(value)) #Compatible with both PyQt4 and PyQt5 self.combobox.blockSignals(False) class CfgTable(QWidget): """ Subclassed QTableWidget to match our needs. """ #Define a QT signal that is emitted when the table is modified. #Note: this signal is not emitted in this class ; it is up to the subclasses to emit it tableChanged = QtCore.pyqtSignal() def __init__(self, text, columns = None, parent = None): """ Initialization of the CfgTable class (editable 2D table). @param text: text string associated with the table @param columns: string list containing all the columns names """ QWidget.__init__(self, parent) self.tablewidget = QTableWidget(parent) self.tablewidget.setSelectionBehavior(QAbstractItemView.SelectRows) if isinstance(columns, (list, tuple)): self.setSpec({'string_list': columns, 'comment': ''}) else: self.keys = [] #No columns yet self.tablewidget.horizontalHeader().setStretchLastSection(True) self.tablewidget.horizontalHeader().sectionClicked.connect(self.tablewidget.clearSelection) #Allow to unselect the lines by clicking on the column name (useful to add a line at the end) self.label = QLabel(text, parent) self.button_add = QPushButton(QIcon(QPixmap(":/images/list-add.png")), "") self.button_remove = QPushButton(QIcon(QPixmap(":/images/list-remove.png")), "") self.button_add.clicked.connect(self.appendLine) self.button_remove.clicked.connect(self.removeLine) self.layout_button = QVBoxLayout() self.layout_button.addWidget(self.button_add) self.layout_button.addWidget(self.button_remove) self.layout_table = QHBoxLayout() #self.tablewidget.setSizePolicy(size_policy) self.layout_table.addWidget(self.tablewidget) self.layout_table.addLayout(self.layout_button) self.layout = QVBoxLayout(parent) self.layout.addWidget(self.label) self.layout.addLayout(self.layout_table) self.setLayout(self.layout) #Ensure that the table always expand to the maximum available space size_policy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) size_policy.setVerticalStretch(10) size_policy.setHorizontalStretch(10) self.setSizePolicy(size_policy) def setSpec(self, spec): """ Set the specifications for the item (min/max values, ...) @param spec: the specifications dict (can contain the following keys: minimum, maximum, comment, string_list) """ self.keys = spec['string_list'] if len(self.keys) > 0 and not self.keys[0]: self.keys[0] = 'name' #name of first column is normaly undefined in configspec, so we use a generic name, just to display something in the header of the QTable self.tablewidget.setColumnCount(len(self.keys)) self.tablewidget.setHorizontalHeaderLabels(self.keys) if spec['comment']: self.setWhatsThis(spec['comment']) def setChangeSlot(self, changeNotifyer): """ Assign a notifyier slot (this slot is called whenever the state of the widget changes) @param changeNotifyer: the function (slot) that is called in case of change """ self.tableChanged.connect(changeNotifyer) self.tablewidget.itemChanged.connect(changeNotifyer) self.tablewidget.cellChanged.connect(changeNotifyer) self.button_add.clicked.connect(changeNotifyer) self.button_remove.clicked.connect(changeNotifyer) def appendLine(self, line = None): """ Add a line to the table. The new line is inserted before the selected line, or at the end of the table is no line is selected @param line: a string list containing all the values for this lines. If line is None, an empty line is inserted """ selected_row = self.tablewidget.currentRow() if selected_row < 0 or len(self.tablewidget.selectedIndexes()) <= 0: #Trick to be able to insert lines before the first and after the last line (click on column name to unselect the lines) selected_row = self.tablewidget.rowCount() self.tablewidget.insertRow(selected_row) #If provided, fill the table with the content of the line list if line is not None and isinstance(line, (list, tuple)) and len(line) >= self.tablewidget.columnCount(): for i in range(self.tablewidget.columnCount()): #self.tablewidget.setItem(selected_row, i, QTableWidgetItem(line[i])) self.setCellValue(selected_row, i, line[i]) else: for i in range(self.tablewidget.columnCount()): self.setCellValue(selected_row, i, "") #Don't remove this line, otherwise the subclasses won't be able to set custom widget into the table. #Resize the columns to the content, except for the last one for i in range(self.tablewidget.columnCount() - 1): self.tablewidget.resizeColumnToContents(i) #Resize the rows to the content for i in range(self.tablewidget.rowCount()): self.tablewidget.resizeRowToContents(i) def removeLine(self): """ Remove a line from the table. The selected line is suppressed, or the last line if no line is selected """ selected_row = self.tablewidget.currentRow() if selected_row < 0 and self.tablewidget.rowCount() > 0: selected_row = self.tablewidget.rowCount() - 1 if selected_row >= 0: self.tablewidget.removeRow(selected_row) def setCellValue(self, line, column, value): """ Default implementation for filling cells use Qt default QTableWidgetItem. One can subclass to provide another implementation, like inserting various Widget into the table. @param line: line number (int) @param column: column number (int) @param value: cell content (string) """ self.tablewidget.blockSignals(True) # Avoid unnecessary signal (we don't want the config window to emit any signal when filling the fields programatically) self.tablewidget.setItem(line, column, QTableWidgetItem(value)) self.tablewidget.blockSignals(False) def validateValue(self): """ Default implementation always return true (OK) and an empty string @return (True, ''): """ return (True, '') def getValue(self): """ @return: a nested dictionnary that can be directly used to update the ConfigObj (class that handles configuration file) Example of returned value: {'pause': {'gcode': 'M5 (Spindle off)\nM9 (Coolant off)\nM0\n\nM8\nS5000M03 (Spindle 5000rpm cw)\n'}, 'probe_tool': {'gcode': '\nO CALL\nS6000 M3 M8\n'}} """ result_dict = {} for i in range(self.tablewidget.rowCount()): key = self.tablewidget.item(i, 0) if not key: continue key = str(key.text()) if not key: continue result_dict[key] = {} j = 1 while j < self.tablewidget.columnCount(): sub_key = self.keys[j] #Column name value = self.tablewidget.item(i, j) if not value: j += 1 continue value = str(value.text()) if sub_key is not None: result_dict[key][sub_key] = value j += 1 return result_dict def setValue(self, value): """ Assign the value for our object @param value: this is a nested dict, with keys going to the first column of our table and values going to the other columns. Example of received value: {'15': {'diameter': 1.5, 'speed': 6000.0, 'start_radius': 1.5}, '20': {'diameter': 2.0, 'speed': 6000.0, 'start_radius': 2.0}, '30': {'diameter': 3.0, 'speed': 6000.0, 'start_radius': 3.0}} """ self.tablewidget.blockSignals(True) # Avoid unnecessary signal (we don't want the config window to emit any signal when filling the fields programatically) result = True if isinstance(value, dict) and len(self.keys) > 0: self.tablewidget.setRowCount(0) line = [None] * len(self.keys) #sort according to the key item_list=[] try: #try numeric sort item_list = sorted(value.keys(), key=float) except ValueError: #fallback to standard sort item_list = sorted(value.keys()) for item in item_list: line[0] = item #First column is alway the key of the dict (eg it can be the tool number) #Compute the other columns (the received value must contain a dict entry for each column) i = 1 while i < len(self.keys): if self.keys[i] in value[item]: line[i] = value[item][self.keys[i]] #Get the value for a given column else: result = False break i += 1 if result is True: self.appendLine(line) else: result = False self.tablewidget.blockSignals(False) return result class CfgTableCustomActions(CfgTable): """ Subclassed CfgTableWidget to use muli-line edits for storing the custom GCODE. """ def __init__(self, text, columns = None, parent = None): """ Initialization of the CfgTableCustomActions class (editable 2D table for storing custom GCODE). @param text: text string associated with the table @param columns: string list containing all the columns names """ CfgTable.__init__(self, text, columns, parent) def setCellValue(self, line, column, value): """ This function is reimplemented to use QTextEdit into the table, thus allowing multi-lines custom GCODE to be stored @param line: line number (int) @param column: column number (int) @param value: cell content (string) """ if column > 0: #Special case for column 1 : we use QTextEdit for storing the GCODE text_edit = QTextEdit() text_edit.setAcceptRichText(False) text_edit.setAutoFormatting(QTextEdit.AutoNone) text_edit.setPlainText(value) self.tablewidget.setCellWidget(line, column, text_edit) text_edit.textChanged.connect(self.valueChangedSlot) #We need to detect any change in the table's widgets else: #Normal case: use standard QT functions (and we dont need to generate any signal here, it is already handled by the parent class) CfgTable.setCellValue(self, line, column, value) def valueChangedSlot(self): """ Slot called when something changes in the table. We emit a signal, so that the config window can detect this change """ self.tableChanged.emit() def validateValue(self): """ Check that the keys are unique and not empty @return (result_bool, result_string): - result_bool: True if no errors were encountered, False otherwise - result_string: a string containing all the errors encountered during the validation """ #For now everything is OK result_string = '' result_bool = True keys_list = [] if self.tablewidget.rowCount() > 0 and self.tablewidget.columnCount() > 0: for i in range(self.tablewidget.rowCount()): if not self.tablewidget.item(i, 0) or not self.tablewidget.item(i, 0).text(): result_bool = False result_string += str(self.tr('\nThe cell at line {0}, column 0 must not be empty for the table "{1}"\n')).format(i, self.label.text()) else: #Create a list with all the "keys" from the first column (here a key is the custom action name) keys_list.append(self.tablewidget.item(i, 0).text()) nb_duplicate_elements = len(keys_list) - len(set(keys_list)) if nb_duplicate_elements != 0: #There are duplicate entries, that's wrong because the key must be unique result_bool = False result_string += str(self.tr('\nFound {0} duplicate elements for the table "{1}"\n')).format(nb_duplicate_elements, self.label.text()) return (result_bool, result_string) def getValue(self): """ @return: a nested dictionnary that can be directly used to update the ConfigObj (class that handles configuration file) Example of returned value: {'pause': {'gcode': 'M5 (Spindle off)\nM9 (Coolant off)\nM0\n\nM8\nS5000M03 (Spindle 5000rpm cw)\n'}, 'probe_tool': {'gcode': '\nO CALL\nS6000 M3 M8\n'}} """ result_dict = {} #Get the keys (first column) for i in range(self.tablewidget.rowCount()): key = self.tablewidget.item(i, 0) if not key: continue key = str(key.text()) if not key: continue result_dict[key] = {} #Get the values (other columns) for j in range(1, self.tablewidget.columnCount()): sub_key = self.keys[j] #Column name value = self.tablewidget.cellWidget(i, j) if not value: continue value = str(value.toPlainText()) if sub_key is not None: result_dict[key][sub_key] = value return result_dict class CfgTableToolParameters(CfgTable): """ Subclassed CfgTableWidget to use muli-line edits for storing the custom GCODE. """ def __init__(self, text, columns = None, parent = None): """ Initialization of the CfgTableWidget class (editable 2D table for storing the tools table). @param text: text string associated with the table @param columns: string list containing all the columns names """ self.max_tool_number = 0 CfgTable.__init__(self, text, columns, parent) def setCellValue(self, line, column, value): """ This function is reimplemented to use QTextEdit into the table, thus allowing multi-lines custom GCODE to be stored @param line: line number (int) @param column: column number (int) @param value: cell content (string or int or float) """ if column > 0: #we use QDoubleSpinBox for storing the values spinbox = CorrectedDoubleSpinBox() spinbox.setMinimum(0) spinbox.setMaximum(1000000000) #Default value is 99 computed_value = toFloat(value)[0] # Convert the value to float spinbox.setValue(computed_value) else: #tool number is an integer spinbox = QSpinBox() spinbox.setMinimum(0) spinbox.setMaximum(1000000000) #Default value is 99 converted_value = toInt(value) # Convert the value to int (we may receive a string for example) computed_value = converted_value[0] if converted_value[1] else self.max_tool_number + 1 self.max_tool_number = max(self.max_tool_number, computed_value) #Store the max value for the tool number, so that we can automatically increment this value for new tools spinbox.setValue(computed_value) #first column is the key, it must be an int spinbox.valueChanged.connect(self.valueChangedSlot) #We need to detect any change in the table's widgets self.tablewidget.setCellWidget(line, column, spinbox) def valueChangedSlot(self): """ Slot called when something changes in the table. We emit a signal, so that the config window can detect this change """ self.tableChanged.emit() def validateValue(self): """ Check that the keys are unique and not empty @return (result_bool, result_string): - result_bool: True if no errors were encountered, False otherwise - result_string: a string containing all the errors encountered during the validation """ #For now everything is OK contains_tool_1 = False result_string = '' result_bool = True keys_list = [] if self.tablewidget.rowCount() > 0 and self.tablewidget.columnCount() > 0: for i in range(self.tablewidget.rowCount()): if not self.tablewidget.cellWidget(i, 0): result_bool = False result_string += str(self.tr('\nThe cell at line {0}, column 0 must not be empty for the table "{1}"\n')).format(i, self.label.text()) else: #Create a list with all the "keys" from the first column (here a key is the custom action name) keys_list.append(str(self.tablewidget.cellWidget(i, 0).value())) if self.tablewidget.cellWidget(i, 0).value() == 1: contains_tool_1 = True nb_duplicate_elements = len(keys_list) - len(set(keys_list)) if nb_duplicate_elements != 0: #There are duplicate entries, that's wrong because the key must be unique result_bool = False result_string += str(self.tr('\nFound {0} duplicate elements for the table "{1}"\n')).format(nb_duplicate_elements, self.label.text()) if not contains_tool_1: result_bool = False result_string += str(self.tr('\nThe table "{0}" must always contains tool number \'1\'\n')).format(self.label.text()) #Note: str() is needed for PyQt4 return (result_bool, result_string) def getValue(self): """ @return: a nested dictionnary that can be directly used to update the ConfigObj (class that handles configuration file) Example of returned value: {'pause': {'gcode': 'M5 (Spindle off)\nM9 (Coolant off)\nM0\n\nM8\nS5000M03 (Spindle 5000rpm cw)\n'}, 'probe_tool': {'gcode': '\nO CALL\nS6000 M3 M8\n'}} """ result_dict = {} #Get the keys (first column) for i in range(self.tablewidget.rowCount()): key = self.tablewidget.cellWidget(i, 0) if not key: continue key = str(key.value()) if not key: continue result_dict[key] = {} #Get the values (other columns) for j in range(1,self.tablewidget.columnCount()): sub_key = self.keys[j] #Column name value = self.tablewidget.cellWidget(i, j) if not value: continue value = value.value() if sub_key is not None: result_dict[key][sub_key] = value return result_dict dxf2gcode-20240509/dxf2gcode/gui/canvas3d.py0000664000000000000000000006615114011526166017046 0ustar rootroot############################################################################ # # Copyright (C) 2015 # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from __future__ import division import logging from math import cos, pi, radians, sin from PyQt5.QtCore import QCoreApplication, QPoint, Qt from PyQt5.QtGui import QColor from dxf2gcode.core.layercontent import Shapes from dxf2gcode.core.point import Point from dxf2gcode.core.boundingbox import BoundingBox from dxf2gcode.core.point3d import Point3D from dxf2gcode.core.stmove import StMove import dxf2gcode.globals.globals as g from dxf2gcode.gui.canvas import CanvasBase, MyDropDownMenu logger = logging.getLogger("Gui.Canvas") try: from OpenGL import GL except ImportError: raise Exception("For the 3d mode you need PyOpenGL.\n" "Set mode3d to False in the config file, or install PyOpenGL to run it in 3d.") class GLWidget(CanvasBase): CAM_LEFT_X = -0.5 CAM_RIGHT_X = 0.5 CAM_BOTTOM_Y = 0.5 CAM_TOP_Y = -0.5 CAM_NEAR_Z = -14.0 CAM_FAR_Z = 14.0 COLOR_BACKGROUND = QColor.fromHsl(160, 0, 255, 255) COLOR_NORMAL = QColor.fromCmykF(1.0, 0.5, 0.0, 0.0, 1.0) COLOR_SELECT = QColor.fromCmykF(0.0, 1.0, 0.9, 0.0, 1.0) COLOR_NORMAL_DISABLED = QColor.fromCmykF(1.0, 0.5, 0.0, 0.0, 0.25) COLOR_SELECT_DISABLED = QColor.fromCmykF(0.0, 1.0, 0.9, 0.0, 0.25) COLOR_ENTRY_ARROW = QColor.fromRgbF(0.0, 0.0, 1.0, 1.0) COLOR_EXIT_ARROW = QColor.fromRgbF(0.0, 1.0, 0.0, 1.0) COLOR_ROUTE = QColor.fromRgbF(0.5, 0.0, 0.0, 1.0) COLOR_STMOVE = QColor.fromRgbF(0.5, 0.0, 0.25, 1.0) COLOR_BREAK = QColor.fromRgbF(1.0, 0.0, 1.0, 0.7) COLOR_LEFT = QColor.fromHsl(134, 240, 130, 255) COLOR_RIGHT = QColor.fromHsl(186, 240, 130, 255) def __init__(self, parent=None): super(GLWidget, self).__init__(parent) self.shapes = Shapes([]) self.orientation = 0 self.wpZero = 0 self.routearrows = [] self.expprv = None self._lastPos = QPoint() self.posX = 0.0 self.posY = 0.0 self.posZ = 0.0 self.rotX = 0.0 self.rotY = 0.0 self.rotZ = 0.0 self.scale = 1.0 self.scaleCorr = 1.0 # total (squared) distance traveled by mouse while LMB was down self.clickTravelSq = 0 self.showPathDirections = False self.showDisabledPaths = False self.BB = BoundingBox() self.tol = 0 def tr(self, string_to_translate): """ Translate a string using the QCoreApplication translation framework @param string_to_translate: a unicode string @return: the translated unicode string if it was possible to translate """ return str(QCoreApplication.translate('GLWidget', string_to_translate)) def resetAll(self): # the wpzero is currently generated "last" if self.wpZero > 0: GL.glDeleteLists(self.orientation + 1, self.wpZero - self.orientation) self.shapes = Shapes([]) self.wpZero = 0 self.delete_opt_paths() self.posX = 0.0 self.posY = 0.0 self.posZ = 0.0 self.rotX = 0.0 self.rotY = 0.0 self.rotZ = 0.0 self.scale = 1.0 self.BB = BoundingBox() self.update() def delete_opt_paths(self): if len(self.routearrows) > 0: GL.glDeleteLists(self.routearrows[0][2], len(self.routearrows)) self.routearrows = [] def addexproutest(self): self.expprv = Point3D(g.config.vars.Plane_Coordinates['axis1_start_end'], g.config.vars.Plane_Coordinates['axis2_start_end'], 0) def addexproute(self, exp_order, layer_nr): """ This function initialises the Arrows of the export route order and its numbers. """ for order in exp_order: shape = self.shapes[order] st = self.expprv en, self.expprv = shape.get_start_end_points_physical() en = en.to3D(shape.axis3_start_mill_depth) self.expprv = self.expprv.to3D(shape.axis3_mill_depth) self.routearrows.append([st, en, -1]) # TODO self.routetext.append(RouteText(text=("%s,%s" % (layer_nr, shape_nr+1)), startp=en)) def addexprouteen(self): st = self.expprv en = Point3D(g.config.vars.Plane_Coordinates['axis1_start_end'], g.config.vars.Plane_Coordinates['axis2_start_end'], 0) self.routearrows.append([st, en, -1]) for route in self.routearrows: route[2] = self.makeRouteArrowHead(route[0], route[1]) def contextMenuEvent(self, event): if not self.isRotating: clicked, offset, _ = self.getClickedDetails(event) MyDropDownMenu(self, event.globalPos(), clicked, offset) def setXRotation(self, angle): self.rotX = self.normalizeAngle(angle) def setYRotation(self, angle): self.rotY = self.normalizeAngle(angle) def setZRotation(self, angle): self.rotZ = self.normalizeAngle(angle) def normalizeAngle(self, angle): return (angle - 180) % -360 + 180 def updateModifiers(self, event): wasRotating = self.isRotating super ().updateModifiers (event) # short Alt+LeftClick restores rotation to default if not wasRotating and self.isRotating: self.clickTravelSq = 0.0 elif wasRotating and not self.isRotating: if self.clickTravelSq < 5 * 5: self.rotX = 0 self.rotY = 0 self.rotZ = 0 self.update() def mousePressEvent(self, event): self.updateModifiers(event) if self.isPanning or self.isRotating: pass elif event.button() == Qt.LeftButton: clicked, offset, tol = self.getClickedDetails(event) xyForZ = {} anyHit = False for shape in self.shapes: hit = False z = shape.axis3_start_mill_depth if z not in xyForZ: xyForZ[z] = self.determineSelectedPosition(clicked, z, offset) hit |= shape.isHit(xyForZ[z], tol) if not hit: z = shape.axis3_mill_depth if z not in xyForZ: xyForZ[z] = self.determineSelectedPosition(clicked, z, offset) hit |= shape.isHit(xyForZ[z], tol) if self.isMultiSelect and not hit: continue anyHit |= hit; if self.isMultiSelect and shape.selected: hit = not hit if hit != shape.selected: g.window.TreeHandler.updateShapeSelection(shape, hit) shape.selected = hit # If clicking on empty space without Control pressed, deselect all shapes if not anyHit and not self.isMultiSelect: for shape in self.shapes: if shape.selected: g.window.TreeHandler.updateShapeSelection(shape, false) self.update() self._lastPos = event.pos() def getClickedDetails(self, event): min_side = min(self.frameSize().width(), self.frameSize().height()) clicked = Point((event.pos().x() - self.frameSize().width() / 2), (event.pos().y() - self.frameSize().height() / 2)) / min_side / self.scale offset = Point3D(-self.posX, -self.posY, -self.posZ) / self.scale tol = 10 * self.scaleCorr / min_side / self.scale return clicked, offset, tol def determineSelectedPosition(self, clicked, forZ, offset): angleX = -radians(self.rotX) angleY = -radians(self.rotY) zv = forZ - offset.z clickedZ = ((zv + clicked.x * sin(angleY)) / cos(angleY) - clicked.y * sin(angleX)) / cos(angleX) sx, sy, sz = self.deRotate(clicked.x, clicked.y, clickedZ) return Point(sx + offset.x, - sy - offset.y) #, sz + offset.z def mouseReleaseEvent(self, event): self.updateModifiers(event) def mouseMoveEvent(self, event): self.updateModifiers(event) dx = event.pos().x() - self._lastPos.x() dy = event.pos().y() - self._lastPos.y() self.clickTravelSq += dx * dx + dy * dy if self.isRotating: if event.buttons() == Qt.LeftButton: self.setXRotation(self.rotX - dy / 2) self.setYRotation(self.rotY + dx / 2) elif event.buttons() == Qt.RightButton: self.setXRotation(self.rotX - dy / 2) self.setZRotation(self.rotZ + dx / 2) elif self.isPanning: if event.buttons() == Qt.LeftButton: min_side = min(self.frameSize().width(), self.frameSize().height()) dx, dy, dz = self.deRotate(dx, dy, 0) self.posX += dx / min_side self.posY += dy / min_side self.posZ += dz / min_side self._lastPos = event.pos() self.update() def wheelEvent(self, event): min_side = min(self.frameSize().width(), self.frameSize().height()) x = (event.pos().x() - self.frameSize().width() / 2) / min_side y = (event.pos().y() - self.frameSize().height() / 2) / min_side s = 1.001 ** event.angleDelta().y() x, y, z = self.deRotate(x, y, 0) self.posX = (self.posX - x) * s + x self.posY = (self.posY - y) * s + y self.posZ = (self.posZ - z) * s + z self.scale *= s self.update() def rotate(self, x, y, z): angleZ = radians(self.rotZ) x, y, z = x*cos(angleZ) - y*sin(angleZ), x*sin(angleZ) + y*cos(angleZ), z angleY = radians(self.rotY) x, y, z = x*cos(angleY) + z*sin(angleY), y, -x*sin(angleY) + z*cos(angleY) angleX = radians(self.rotX) return x, y*cos(angleX) - z*sin(angleX), y*sin(angleX) + z*cos(angleX) def deRotate(self, x, y, z): angleX = -radians(self.rotX) x, y, z = x, y*cos(angleX) - z*sin(angleX), y*sin(angleX) + z*cos(angleX) angleY = -radians(self.rotY) x, y, z = x*cos(angleY) + z*sin(angleY), y, -x*sin(angleY) + z*cos(angleY) angleZ = -radians(self.rotZ) return x*cos(angleZ) - y*sin(angleZ), x*sin(angleZ) + y*cos(angleZ), z def getRotationVectors(self, orgRefVector, toRefVector): """ Generate a rotation matrix such that toRefVector = matrix * orgRefVector @param orgRefVector: A 3D unit vector @param toRefVector: A 3D unit vector @return: 3 vectors such that matrix = [vx; vy; vz] """ # based on: # http://math.stackexchange.com/questions/180418/calculate-rotation-matrix-to-align-vector-a-to-vector-b-in-3d if orgRefVector == toRefVector: return Point3D(1, 0, 0), Point3D(0, 1, 0), Point3D(0, 0, 1) v = orgRefVector.cross_product(toRefVector) mn = (1 - orgRefVector * toRefVector) / v.length_squared() vx = Point3D(1, -v.z, v.y) + mn * Point3D(-v.y**2 - v.z**2, v.x * v.y, v.x * v.z) vy = Point3D(v.z, 1, -v.x) + mn * Point3D(v.x * v.y, -v.x**2 - v.z**2, v.y * v.z) vz = Point3D(-v.y, v.x, 1) + mn * Point3D(v.x * v.z, v.y * v.z, -v.x**2 - v.y**2) return vx, vy, vz def initializeGL(self): logger.debug(self.tr("Using OpenGL version: %s") % GL.glGetString(GL.GL_VERSION).decode("utf-8")) self.setClearColor(GLWidget.COLOR_BACKGROUND) GL.glEnable(GL.GL_MULTISAMPLE) GL.glEnable(GL.GL_POLYGON_SMOOTH) GL.glHint(GL.GL_POLYGON_SMOOTH_HINT, GL.GL_NICEST) # GL.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_LINE) GL.glShadeModel(GL.GL_SMOOTH) GL.glEnable(GL.GL_DEPTH_TEST) GL.glEnable(GL.GL_CULL_FACE) # GL.glEnable(GL.GL_LIGHTING) # GL.glEnable(GL.GL_LIGHT0) GL.glEnable(GL.GL_BLEND) GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA) # GL.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, (0.5, 5.0, 7.0, 1.0)) # GL.glEnable(GL.GL_NORMALIZE) self.drawOrientationArrows() def paintGL(self): # The last transformation you specify takes place first. GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT) GL.glLoadIdentity() GL.glRotatef(self.rotX, 1.0, 0.0, 0.0) GL.glRotatef(self.rotY, 0.0, 1.0, 0.0) GL.glRotatef(self.rotZ, 0.0, 0.0, 1.0) GL.glTranslatef(self.posX, self.posY, self.posZ) GL.glScalef(self.scale, self.scale, self.scale) for shape in self.shapes.selected_iter(): if not shape.disabled: self.setColor(GLWidget.COLOR_STMOVE) GL.glCallList(shape.drawStMove) self.setColor(GLWidget.COLOR_SELECT) GL.glCallList(shape.drawObject) elif self.showDisabledPaths: self.setColor(GLWidget.COLOR_SELECT_DISABLED) GL.glCallList(shape.drawObject) for shape in self.shapes.not_selected_iter(): if not shape.disabled: if shape.parentLayer.isBreakLayer(): self.setColor(GLWidget.COLOR_BREAK) elif shape.cut_cor == 41: self.setColor(GLWidget.COLOR_LEFT) elif shape.cut_cor == 42: self.setColor(GLWidget.COLOR_RIGHT) else: self.setColor(GLWidget.COLOR_NORMAL) GL.glCallList(shape.drawObject) if self.showPathDirections: self.setColor(GLWidget.COLOR_STMOVE) GL.glCallList(shape.drawStMove) elif self.showDisabledPaths: self.setColor(GLWidget.COLOR_NORMAL_DISABLED) GL.glCallList(shape.drawObject) # optimization route arrows self.setColor(GLWidget.COLOR_ROUTE) GL.glBegin(GL.GL_LINES) for route in self.routearrows: start = route[0] end = route[1] GL.glVertex3f(start.x, -start.y, start.z) GL.glVertex3f(end.x, -end.y, end.z) GL.glEnd() GL.glScalef(self.scaleCorr / self.scale, self.scaleCorr / self.scale, self.scaleCorr / self.scale) scaleArrow = self.scale / self.scaleCorr for route in self.routearrows: # ignore uninitialized arrows if route[2] < 0: continue end = scaleArrow * route[1] GL.glTranslatef(end.x, -end.y, end.z) GL.glCallList(route[2]) GL.glTranslatef(-end.x, end.y, -end.z) # direction arrows for shape in self.shapes: if shape.selected and (not shape.disabled or self.showDisabledPaths) or\ self.showPathDirections and not shape.disabled: start, end = shape.get_start_end_points_physical() start = scaleArrow * start.to3D(shape.axis3_start_mill_depth) end = scaleArrow * end.to3D(shape.axis3_mill_depth) GL.glTranslatef(start.x, -start.y, start.z) GL.glCallList(shape.drawArrowsDirection[0]) GL.glTranslatef(-start.x, start.y, -start.z) GL.glTranslatef(end.x, -end.y, end.z) GL.glCallList(shape.drawArrowsDirection[1]) GL.glTranslatef(-end.x, end.y, -end.z) if self.wpZero > 0: GL.glCallList(self.wpZero) GL.glTranslatef(-self.posX / self.scaleCorr, -self.posY / self.scaleCorr, -self.posZ / self.scaleCorr) GL.glCallList(self.orientation) def resizeGL(self, width, height): GL.glViewport(0, 0, width, height) side = min(width, height) GL.glMatrixMode(GL.GL_PROJECTION) GL.glLoadIdentity() if width >= height: scale_x = width / height GL.glOrtho(GLWidget.CAM_LEFT_X * scale_x, GLWidget.CAM_RIGHT_X * scale_x, GLWidget.CAM_BOTTOM_Y, GLWidget.CAM_TOP_Y, GLWidget.CAM_NEAR_Z, GLWidget.CAM_FAR_Z) else: scale_y = height / width GL.glOrtho(GLWidget.CAM_LEFT_X, GLWidget.CAM_RIGHT_X, GLWidget.CAM_BOTTOM_Y * scale_y, GLWidget.CAM_TOP_Y * scale_y, GLWidget.CAM_NEAR_Z, GLWidget.CAM_FAR_Z) self.scaleCorr = 400 / side GL.glMatrixMode(GL.GL_MODELVIEW) def setClearColor(self, c): GL.glClearColor(c.redF(), c.greenF(), c.blueF(), c.alphaF()) def setColor(self, c): self.setColorRGBA(c.redF(), c.greenF(), c.blueF(), c.alphaF()) def setColorRGBA(self, r, g, b, a): # GL.glMaterialfv(GL.GL_FRONT, GL.GL_DIFFUSE, (r, g, b, a)) GL.glColor4f(r, g, b, a) def plotAll(self, shapes): for shape in shapes: self.paint_shape(shape) self.shapes.append(shape) self.drawWpZero() def repaint_shape(self, shape): GL.glDeleteLists(shape.drawObject, 4) self.paint_shape(shape) def paint_shape(self, shape): shape.drawObject = self.makeShape(shape) # 1 object shape.stmove = StMove(shape) shape.drawStMove = self.makeStMove(shape.stmove) # 1 object shape.drawArrowsDirection = self.makeDirArrows(shape) # 2 objects def makeShape(self, shape): genList = GL.glGenLists(1) GL.glNewList(genList, GL.GL_COMPILE) GL.glBegin(GL.GL_LINES) shape.make_path(self.drawHorLine, self.drawVerLine) GL.glEnd() GL.glEndList() self.BB = self.BB.joinBB(shape.BB) return genList def makeStMove(self, stmove): genList = GL.glGenLists(1) GL.glNewList(genList, GL.GL_COMPILE) GL.glBegin(GL.GL_LINES) stmove.make_path(self.drawHorLine, self.drawVerLine) GL.glEnd() GL.glEndList() return genList def drawHorLine(self, caller, Ps, Pe): GL.glVertex3f(Ps.x, -Ps.y, caller.axis3_start_mill_depth) GL.glVertex3f(Pe.x, -Pe.y, caller.axis3_start_mill_depth) GL.glVertex3f(Ps.x, -Ps.y, caller.axis3_mill_depth) GL.glVertex3f(Pe.x, -Pe.y, caller.axis3_mill_depth) def drawVerLine(self, caller, Ps): GL.glVertex3f(Ps.x, -Ps.y, caller.axis3_start_mill_depth) GL.glVertex3f(Ps.x, -Ps.y, caller.axis3_mill_depth) def drawOrientationArrows(self): rCone = 0.01 rCylinder = 0.004 zTop = 0.05 zMiddle = 0.02 zBottom = -0.03 segments = 20 arrow = GL.glGenLists(1) GL.glNewList(arrow, GL.GL_COMPILE) self.drawCone(Point(), rCone, zTop, zMiddle, segments) self.drawSolidCircle(Point(), rCone, zMiddle, segments) self.drawCylinder(Point(), rCylinder, zMiddle, zBottom, segments) self.drawSolidCircle(Point(), rCylinder, zBottom, segments) GL.glEndList() self.orientation = GL.glGenLists(1) GL.glNewList(self.orientation, GL.GL_COMPILE) self.setColorRGBA(0.0, 0.0, 1.0, 0.5) GL.glCallList(arrow) GL.glRotatef(90, 0, 1, 0) self.setColorRGBA(1.0, 0.0, 0.0, 0.5) GL.glCallList(arrow) GL.glRotatef(90, 1, 0, 0) self.setColorRGBA(0.0, 1.0, 0.0, 0.5) GL.glCallList(arrow) GL.glEndList() def drawWpZero(self): r = 0.02 segments = 20 # must be a multiple of 4 self.wpZero = GL.glGenLists(1) GL.glNewList(self.wpZero, GL.GL_COMPILE) self.setColorRGBA(0.2, 0.2, 0.2, 0.7) self.drawSphere(r, segments, segments // 4, segments, segments // 4) GL.glBegin(GL.GL_TRIANGLE_FAN) GL.glVertex3f(0, 0, 0) for i in range(segments // 4 + 1): ang = -i * 2 * pi / segments xy2 = Point().get_arc_point(ang, r) # GL.glNormal3f(0, -1, 0) GL.glVertex3f(xy2.x, 0, xy2.y) for i in range(segments // 4 + 1): ang = -i * 2 * pi / segments xy2 = Point().get_arc_point(ang, r) # GL.glNormal3f(-1, 0, 0) GL.glVertex3f(0, -xy2.y, -xy2.x) for i in range(segments // 4 + 1): ang = -i * 2 * pi / segments xy2 = Point().get_arc_point(ang, r) # GL.glNormal3f(0, 0, 1) GL.glVertex3f(-xy2.y, xy2.x, 0) GL.glEnd() self.setColorRGBA(0.6, 0.6, 0.6, 0.5) self.drawSphere(r * 1.25, segments, segments, segments, segments) GL.glEndList() def drawSphere(self, r, lats, mlats, longs, mlongs): lats //= 2 # based on http://www.cburch.com/cs/490/sched/feb8/index.html for i in range(mlats): lat0 = pi * (-0.5 + i / lats) z0 = r * sin(lat0) zr0 = r * cos(lat0) lat1 = pi * (-0.5 + (i + 1) / lats) z1 = r * sin(lat1) zr1 = r * cos(lat1) GL.glBegin(GL.GL_QUAD_STRIP) for j in range(mlongs + 1): lng = 2 * pi * j / longs x = cos(lng) y = sin(lng) GL.glNormal3f(x * zr0, y * zr0, z0) GL.glVertex3f(x * zr0, y * zr0, z0) GL.glNormal3f(x * zr1, y * zr1, z1) GL.glVertex3f(x * zr1, y * zr1, z1) GL.glEnd() def drawSolidCircle(self, origin, r, z, segments): GL.glBegin(GL.GL_TRIANGLE_FAN) # GL.glNormal3f(0, 0, -1) GL.glVertex3f(origin.x, -origin.y, z) for i in range(segments + 1): ang = -i * 2 * pi / segments xy2 = origin.get_arc_point(ang, r) GL.glVertex3f(xy2.x, -xy2.y, z) GL.glEnd() def drawCone(self, origin, r, zTop, zBottom, segments): GL.glBegin(GL.GL_TRIANGLE_FAN) GL.glVertex3f(origin.x, -origin.y, zTop) for i in range(segments + 1): ang = i * 2 * pi / segments xy2 = origin.get_arc_point(ang, r) # GL.glNormal3f(xy2.x, -xy2.y, zBottom) GL.glVertex3f(xy2.x, -xy2.y, zBottom) GL.glEnd() def drawCylinder(self, origin, r, zTop, zBottom, segments): GL.glBegin(GL.GL_QUAD_STRIP) for i in range(segments + 1): ang = i * 2 * pi / segments xy = origin.get_arc_point(ang, r) # GL.glNormal3f(xy.x, -xy.y, 0) GL.glVertex3f(xy.x, -xy.y, zTop) GL.glVertex3f(xy.x, -xy.y, zBottom) GL.glEnd() def makeDirArrows(self, shape): (start, start_dir), (end, end_dir) = shape.get_start_end_points_physical(None, False) startArrow = GL.glGenLists(1) GL.glNewList(startArrow, GL.GL_COMPILE) self.setColor(GLWidget.COLOR_ENTRY_ARROW) self.drawDirArrow(Point3D(), start_dir.to3D(), True) GL.glEndList() endArrow = GL.glGenLists(1) GL.glNewList(endArrow, GL.GL_COMPILE) self.setColor(GLWidget.COLOR_EXIT_ARROW) self.drawDirArrow(Point3D(), end_dir.to3D(), False) GL.glEndList() return startArrow, endArrow def drawDirArrow(self, origin, direction, startError): offset = 0.0 if startError else 0.05 zMiddle = -0.02 + offset zBottom = -0.05 + offset rx, ry, rz = self.getRotationVectors(Point3D(0, 0, 1), direction) self.drawArrowHead(origin, rx, ry, rz, offset) GL.glBegin(GL.GL_LINES) zeroMiddle = Point3D(0, 0, zMiddle) GL.glVertex3f(zeroMiddle * rx + origin.x, -zeroMiddle * ry - origin.y, zeroMiddle * rz + origin.z) zeroBottom = Point3D(0, 0, zBottom) GL.glVertex3f(zeroBottom * rx + origin.x, -zeroBottom * ry - origin.y, zeroBottom * rz + origin.z) GL.glEnd() def makeRouteArrowHead(self, start, end): if end == start: direction = Point3D(0, 0, 1) else: direction = (end - start).unit_vector() rx, ry, rz = self.getRotationVectors(Point3D(0, 0, 1), direction) head = GL.glGenLists(1) GL.glNewList(head, GL.GL_COMPILE) self.drawArrowHead(Point3D(), rx, ry, rz, 0) GL.glEndList() return head def drawArrowHead(self, origin, rx, ry, rz, offset): r = 0.01 segments = 10 zTop = 0 + offset zBottom = -0.02 + offset GL.glBegin(GL.GL_TRIANGLE_FAN) zeroTop = Point3D(0, 0, zTop) GL.glVertex3f(zeroTop * rx + origin.x, -zeroTop * ry - origin.y, zeroTop * rz + origin.z) for i in range(segments + 1): ang = i * 2 * pi / segments xy2 = Point().get_arc_point(ang, r).to3D(zBottom) GL.glVertex3f(xy2 * rx + origin.x, -xy2 * ry - origin.y, xy2 * rz + origin.z) GL.glEnd() GL.glBegin(GL.GL_TRIANGLE_FAN) zeroBottom = Point3D(0, 0, zBottom) GL.glVertex3f(zeroBottom * rx + origin.x, -zeroBottom * ry - origin.y, zeroBottom * rz + origin.z) for i in range(segments + 1): ang = -i * 2 * pi / segments xy2 = Point().get_arc_point(ang, r).to3D(zBottom) GL.glVertex3f(xy2 * rx + origin.x, -xy2 * ry - origin.y, xy2 * rz + origin.z) GL.glEnd() def setShowPathDirections(self, flag): self.showPathDirections = flag def setShowDisabledPaths(self, flag=True): self.showDisabledPaths = flag def autoscale(self): # TODO currently only works correctly when object is not rotated if self.frameSize().width() >= self.frameSize().height(): aspect_scale_x = self.frameSize().width() / self.frameSize().height() aspect_scale_y = 1 else: aspect_scale_x = 1 aspect_scale_y = self.frameSize().height() / self.frameSize().width() dx = self.BB.Pe.x - self.BB.Ps.x dy = self.BB.Pe.y - self.BB.Ps.y scaleX = (GLWidget.CAM_RIGHT_X - GLWidget.CAM_LEFT_X) * aspect_scale_x / dx if (dx != 0) else 1 scaleY = (GLWidget.CAM_BOTTOM_Y - GLWidget.CAM_TOP_Y) * aspect_scale_y / dy if (dy != 0) else 1 self.scale = min(scaleX, scaleY) * 0.95 self.posX = ((GLWidget.CAM_LEFT_X + GLWidget.CAM_RIGHT_X) * 0.95 * aspect_scale_x - (self.BB.Ps.x + self.BB.Pe.x) * self.scale) / 2 self.posY = -((GLWidget.CAM_TOP_Y + GLWidget.CAM_BOTTOM_Y) * 0.95 * aspect_scale_y - (self.BB.Pe.y + self.BB.Ps.y) * self.scale) / 2 self.posZ = 0 self.update() def topView(self): self.rotX = 0 self.rotY = 0 self.rotZ = 0 self.update() def isometricView(self): self.rotX = -22 self.rotY = -22 self.rotZ = 0 self.update() dxf2gcode-20240509/dxf2gcode/gui/canvas2d.py0000644000000000000000000006221314617065372017047 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2011-2015 # Christian Kohlöffel # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ """ Special purpose canvas including all required plotting function etc. @purpose: Plotting all """ from __future__ import absolute_import from __future__ import division import logging from dxf2gcode.core.point import Point from dxf2gcode.core.shape import Shape from dxf2gcode.core.boundingbox import BoundingBox from dxf2gcode.core.stmove import StMove #TODO: check if can be removed: #from dxf2gcode.core.arcgeo import ArcGeo from dxf2gcode.gui.wpzero import WpZero from dxf2gcode.gui.arrow import Arrow from dxf2gcode.gui.routetext import RouteText from dxf2gcode.gui.canvas import CanvasBase, MyDropDownMenu import dxf2gcode.globals.globals as g import dxf2gcode.globals.constants as c from PyQt5.QtWidgets import QGraphicsItem, QGraphicsView, QRubberBand, QGraphicsScene, QGraphicsLineItem from PyQt5.QtGui import QPainterPath, QPen, QColor, QPainterPathStroker from PyQt5 import QtCore logger = logging.getLogger("DxfImport.myCanvasClass") class MyGraphicsView(CanvasBase): """ This is the used Canvas to print the graphical interface of dxf2gcode. All GUI things should be performed in the View and plotting functions in the scene """ def __init__(self, parent=None): """ Initialisation of the View Object. This is called by the gui created with the QTDesigner. @param parent: Main is passed as a pointer for reference. """ super(MyGraphicsView, self).__init__(parent) self.currentItem = None self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse) self.setResizeAnchor(QGraphicsView.AnchorViewCenter) # self.setDragMode(QGraphicsView.RubberBandDrag ) self.setDragMode(QGraphicsView.NoDrag) self.parent = parent self.mppos = None self.rubberBand = QRubberBand(QRubberBand.Rectangle, self) self.prvRectRubberBand = QtCore.QRect() def tr(self, string_to_translate): """ Translate a string using the QCoreApplication translation framework @param string_to_translate: a unicode string @return: the translated unicode string if it was possible to translate """ return str(QtCore.QCoreApplication.translate('MyGraphicsView', string_to_translate)) def contextMenuEvent(self, event): """ Create the contextmenu. @purpose: Links the new Class of ContextMenu to Graphicsview. """ position = self.mapToGlobal(event.pos()) GVPos = self.mapToScene(event.pos()) real_pos = Point(GVPos.x(), -GVPos.y()) menu = MyDropDownMenu(self.scene(), position, real_pos) def wheelEvent(self, event): """ With Mouse Wheel the object is scaled @purpose: Scale by mouse wheel @param event: Event Parameters passed to function """ delta = event.angleDelta().y() scale = (1000 + delta) / 1000.0 self.scale(scale, scale) def mousePressEvent(self, event): """ Right Mouse click shall have no function, Therefore pass only left click event @purpose: Change inherited mousePressEvent @param event: Event Parameters passed to function """ if self.dragMode() == 1: super(MyGraphicsView, self).mousePressEvent(event) elif event.button() == QtCore.Qt.LeftButton: self.mppos = event.pos() else: pass def mouseReleaseEvent(self, event): """ Right Mouse click shall have no function, Therefore pass only left click event @purpose: Change inherited mousePressEvent @param event: Event Parameters passed to function """ delta = 2 if self.dragMode() == 1: # if (event.key() == QtCore.Qt.Key_Shift): # self.setDragMode(QGraphicsView.NoDrag) super(MyGraphicsView, self).mouseReleaseEvent(event) # Selection only enabled for left Button elif event.button() == QtCore.Qt.LeftButton: self.currentItems = [] scene = self.scene() if scene and not self.isMultiSelect: for item in scene.selectedItems(): item.setSelected(False, False) # If the mouse button is pressed without movement of rubberband if self.rubberBand.isHidden(): rect = QtCore.QRect(event.pos().x()-delta, event.pos().y() - delta, 2 * delta, 2*delta) # logger.debug(rect) point = self.mapToScene(event.pos()) min_distance = float(0x7fffffff) for item in self.items(rect): itemDistance = item.contains_point(point) if itemDistance < min_distance: min_distance = itemDistance self.currentItems = item if self.currentItems: if self.currentItems.isSelected(): self.currentItems.setSelected(False, False) else: self.currentItems.setSelected(True, False) else: rect = self.rubberBand.geometry() self.currentItems = self.items(rect) self.rubberBand.hide() # logger.debug("Rubberband Selection") # All items in the selection # self.currentItems = self.items(rect) # print self.currentItems # logger.debug(rect) for item in self.currentItems: if item.isSelected(): item.setSelected(False, False) else: # print (item.flags()) item.setSelected(True, False) else: pass self.mppos = None # super(MyGraphicsView, self).mouseReleaseEvent(event) def mouseMoveEvent(self, event): """ MouseMoveEvent of the Graphiscview. May also be used for the Statusbar. @purpose: Get the MouseMoveEvent and use it for the Rubberband Selection @param event: Event Parameters passed to function """ if self.mppos is not None: Point = event.pos() - self.mppos if Point.manhattanLength() > 3: # print 'the mouse has moved more than 3 pixels since the oldPosition' # print "Mouse Pointer is currently hovering at: ", event.pos() rect = QtCore.QRect(self.mppos, event.pos()) ''' The following is needed because of PyQt5 doesn't like to switch from sign it will keep displaying last rectangle, i.e. you can end up will multiple rectangles ''' if self.prvRectRubberBand.width() > 0 and not rect.width() > 0 or rect.width() == 0 or\ self.prvRectRubberBand.height() > 0 and not rect.height() > 0 or rect.height() == 0: self.rubberBand.hide() self.rubberBand.setGeometry(rect.normalized()) self.rubberBand.show() self.prvRectRubberBand = rect scpoint = self.mapToScene(event.pos()) # self.setStatusTip('X: %3.1f; Y: %3.1f' % (scpoint.x(), -scpoint.y())) # works not as supposed to self.setToolTip('X: %3.1f; Y: %3.1f' %(scpoint.x(), -scpoint.y())) super(MyGraphicsView, self).mouseMoveEvent(event) def autoscale(self): """ Automatically zooms to the full extend of the current GraphicsScene """ scene = self.scene() width = scene.BB.Pe.x - scene.BB.Ps.x height = scene.BB.Pe.y - scene.BB.Ps.y scext = QtCore.QRectF(scene.BB.Ps.x, -scene.BB.Pe.y, width * 1.05, height * 1.05) self.fitInView(scext, QtCore.Qt.KeepAspectRatio) logger.debug(self.tr("Autoscaling to extend: %s") % scext) def setShowPathDirections(self, flag): """ This function is called by the Main Window from the Menubar. @param flag: This flag is true if all Path Direction shall be shown """ scene = self.scene() for shape in scene.shapes: shape.starrow.setallwaysshow(flag) shape.enarrow.setallwaysshow(flag) shape.stmove.setallwaysshow(flag) if shape.Drill: shape.starrow.setallwaysshow(False) shape.enarrow.setallwaysshow(False) def resetAll(self): """ Deletes the existing GraphicsScene. """ scene = self.scene() del scene class MyGraphicsScene(QGraphicsScene): """ This is the Canvas used to print the graphical interface of dxf2gcode. The Scene is rendered into the previously defined mygraphicsView class. All performed plotting functions should be defined here. @sideeffect: None """ def __init__(self): QGraphicsScene.__init__(self) self.shapes = [] self.wpzero = None self.routearrows = [] self.routetext = [] self.expprv = None self.expcol = None self.expnr = 0 self.showDisabledPaths = False self.BB = BoundingBox() def tr(self, string_to_translate): """ Translate a string using the QCoreApplication translation framework @param string_to_translate: a unicode string @return: the translated unicode string if it was possible to translate """ return str(QtCore.QCoreApplication.translate('MyGraphicsScene', string_to_translate)) def plotAll(self, shapes): """ Instance is called by the Main Window after the defined file is loaded. It generates all ploting functionality. The parameters are generally used to scale or offset the base geometry (by Menu in GUI). """ for shape in shapes: self.paint_shape(shape) self.addItem(shape) self.shapes.append(shape) self.draw_wp_zero() self.update() def repaint_shape(self, shape): # setParentItem(None) might let it crash, hence we rely on the garbage collector shape.stmove.hide() shape.starrow.hide() shape.enarrow.hide() del shape.stmove del shape.starrow del shape.enarrow self.paint_shape(shape) if not shape.isSelected(): shape.stmove.hide() shape.starrow.hide() shape.enarrow.hide() def paint_shape(self, shape): """ Create all plotting related parts of one shape. @param shape: The shape to be plotted. """ start, start_ang = shape.get_start_end_points(True, True) shape.path = QPainterPath() shape.path.moveTo(start.x, -start.y) drawHorLine = lambda caller, start, end: shape.path.lineTo(end.x, -end.y) drawVerLine = lambda caller, start: None # Not used in 2D mode shape.make_path(drawHorLine, drawVerLine) self.BB = self.BB.joinBB(shape.BB) shape.stmove = self.createstmove(shape) shape.starrow = self.createstarrow(shape) shape.enarrow = self.createenarrow(shape) shape.stmove.setParentItem(shape) shape.starrow.setParentItem(shape) shape.enarrow.setParentItem(shape) def draw_wp_zero(self): """ This function is called while the drawing of all items is done. It plots the WPZero to the Point x=0 and y=0. This item will be enabled or disabled to be shown or not. """ self.wpzero = WpZero(QtCore.QPointF(0, 0)) self.addItem(self.wpzero) def createstarrow(self, shape): """ This function creates the Arrows at the end point of a shape when the shape is selected. @param shape: The shape for which the Arrow shall be created. """ length = 20 start, start_ang = shape.get_start_end_points_physical(True, True, PPocket=True) arrow = Arrow(startp=start, length=length, angle=start_ang, color=QColor(50, 200, 255), pencolor=QColor(50, 100, 255)) return arrow def createenarrow(self, shape): """ This function creates the Arrows at the end point of a shape when the shape is selected. @param shape: The shape for which the Arrow shall be created. """ length = 20 end, end_ang = shape.get_start_end_points_physical(False, True, PPocket=shape.Pocket) arrow = Arrow(startp=end, length=length, angle=end_ang, color=QColor(0, 245, 100), pencolor=QColor(0, 180, 50), startarrow=False) return arrow def createstmove(self, shape): """ This function creates the Additional Start and End Moves in the plot window when the shape is selected @param shape: The shape for which the Move shall be created. """ stmove = StMoveGUI(shape) return stmove def delete_opt_paths(self): """ This function deletes all the plotted export routes. """ # removeItem might let it crash, hence we rely on the garbage collector while self.routearrows: item = self.routearrows.pop() item.hide() del item while self.routetext: item = self.routetext.pop() item.hide() del item def addexproutest(self): self.expprv = Point(g.config.vars.Plane_Coordinates['axis1_start_end'], g.config.vars.Plane_Coordinates['axis2_start_end']) self.expcol = QtCore.Qt.darkRed def addexproute(self, exp_order, layer_nr): """ This function initialises the Arrows of the export route order and its numbers. """ for shape_nr in range(len(exp_order)): shape = self.shapes[exp_order[shape_nr]] st = self.expprv if shape.Pocket == True: start_en_points = shape.get_start_end_points(PPocket=True) en = start_en_points[0] self.expprv = start_en_points[1] else: en, self.expprv = shape.get_start_end_points_physical() self.routearrows.append(Arrow(startp=en, endp=st, color=self.expcol, pencolor=self.expcol)) self.expcol = QtCore.Qt.darkGray self.routetext.append(RouteText(text=("%s,%s" % (layer_nr, shape_nr+1)), startp=en)) # self.routetext[-1].ItemIgnoresTransformations self.addItem(self.routearrows[-1]) self.addItem(self.routetext[-1]) def addexprouteen(self): st = self.expprv en = Point(g.config.vars.Plane_Coordinates['axis1_start_end'], g.config.vars.Plane_Coordinates['axis2_start_end']) self.expcol = QtCore.Qt.darkRed self.routearrows.append(Arrow(startp=en, endp=st, color=self.expcol, pencolor=self.expcol)) self.addItem(self.routearrows[-1]) def setShowDisabledPaths(self, flag): """ This function is called by the Main Menu and is passed from Main to MyGraphicsView to the Scene. It performs the showing or hiding of enabled/disabled shapes. @param flag: This flag is true if hidden paths shall be shown """ self.showDisabledPaths = flag for shape in self.shapes: if flag and shape.isDisabled(): shape.show() elif not flag and shape.isDisabled(): shape.hide() class ShapeGUI(QGraphicsItem, Shape): PEN_NORMAL = QPen(QtCore.Qt.black, 1, QtCore.Qt.SolidLine) PEN_NORMAL.setCosmetic(True) PEN_SELECT = QPen(QtCore.Qt.red, 2, QtCore.Qt.SolidLine, QtCore.Qt.RoundCap, QtCore.Qt.RoundJoin) PEN_SELECT.setCosmetic(True) PEN_NORMAL_DISABLED = QPen(QtCore.Qt.gray, 1, QtCore.Qt.DotLine) PEN_NORMAL_DISABLED.setCosmetic(True) PEN_SELECT_DISABLED = QPen(QtCore.Qt.blue, 1, QtCore.Qt.DashLine) PEN_SELECT_DISABLED.setCosmetic(True) PEN_BREAK = QPen(QtCore.Qt.magenta, 1, QtCore.Qt.SolidLine) PEN_BREAK.setCosmetic(True) PEN_LEFT = QPen(QtCore.Qt.darkCyan, 1, QtCore.Qt.SolidLine) PEN_LEFT.setCosmetic(True) PEN_RIGHT = QPen(QtCore.Qt.darkMagenta, 1, QtCore.Qt.SolidLine) PEN_RIGHT.setCosmetic(True) def __init__(self, nr, closed, parentEntity): QGraphicsItem.__init__(self) Shape.__init__(self, nr, closed, parentEntity) self.setFlag(QGraphicsItem.ItemIsSelectable, True) self.setAcceptedMouseButtons(QtCore.Qt.NoButton) self.selectionChangedCallback = None self.enableDisableCallback = None self.starrow = None self.enarrow = None def __str__(self): return super(ShapeGUI, self).__str__() def tr(self, string_to_translate): return super(ShapeGUI, self).tr(string_to_translate) def contains_point(self, point): """ Method to determine the minimal distance from the point to the shape @param point: a QPointF @return: minimal distance """ min_distance = float(0x7fffffff) ref_point = Point(point.x(), point.y()) t = 0.0 while t < 1.0: per_point = self.path.pointAtPercent(t) spline_point = Point(per_point.x(), per_point.y()) distance = ref_point.distance(spline_point) if distance < min_distance: min_distance = distance t += 0.01 return min_distance def setSelectionChangedCallback(self, callback): """ Register a callback function in order to inform parents when the selection has changed. Note: we can't use QT signals here because ShapeClass doesn't inherits from a QObject @param callback: the function to be called, with the prototype callbackFunction(shape, select) """ self.selectionChangedCallback = callback def setEnableDisableCallback(self, callback): """ Register a callback function in order to inform parents when a shape has been enabled or disabled. Note: we can't use QT signals here because ShapeClass doesn't inherits from a QObject @param callback: the function to be called, with the prototype callbackFunction(shape, enabled) """ self.enableDisableCallback = callback def setPen(self, pen): """ Method to change the Pen of the outline of the object and update the drawing """ self.pen = pen def paint(self, painter, option, widget): """ Method will be triggered with each paint event. Possible to give options @param painter: Reference to std. painter @param option: Possible options here @param widget: The widget which is painted on. """ if self.isSelected() and not self.isDisabled(): painter.setPen(ShapeGUI.PEN_SELECT) elif not self.isDisabled(): if self.parentLayer.isBreakLayer(): painter.setPen(ShapeGUI.PEN_BREAK) elif self.cut_cor == 41: painter.setPen(ShapeGUI.PEN_LEFT) elif self.cut_cor == 42: painter.setPen(ShapeGUI.PEN_RIGHT) else: painter.setPen(ShapeGUI.PEN_NORMAL) elif self.isSelected(): painter.setPen(ShapeGUI.PEN_SELECT_DISABLED) else: painter.setPen(ShapeGUI.PEN_NORMAL_DISABLED) painter.drawPath(self.path) def boundingRect(self): """ Required method for painting. Inherited by Painterpath @return: Gives the Bounding Box """ return self.path.boundingRect() def shape(self): """ Reimplemented function to select outline only. @return: Returns the Outline only """ painterStrock = QPainterPathStroker() painterStrock.setCurveThreshold(0.01) painterStrock.setWidth(0) stroke = painterStrock.createStroke(self.path) return stroke def setSelected(self, flag=True, blockSignals=True): """ Override inherited function to turn off selection of Arrows. @param flag: The flag to enable or disable Selection """ if Shape.isDrill(self): self.starrow.setSelected(False) self.enarrow.setSelected(False) else: self.starrow.setSelected(flag) self.enarrow.setSelected(flag) self.stmove.setSelected(flag) QGraphicsItem.setSelected(self, flag) Shape.setSelected(self, flag) if self.selectionChangedCallback and not blockSignals: self.selectionChangedCallback(self, flag) def setDisable(self, flag=False, blockSignals=True): """ New implemented function which is in parallel to show and hide. @param flag: The flag to enable or disable Selection """ # QGraphicsItem.setDisable(self, flag) Shape.setDisable(self, flag) scene = self.scene() if scene is not None: if not scene.showDisabledPaths and flag: self.hide() self.starrow.setSelected(False) self.enarrow.setSelected(False) self.stmove.setSelected(False) else: self.show() if self.enableDisableCallback and not blockSignals: self.enableDisableCallback(self, not flag) class StMoveGUI(QGraphicsLineItem, StMove): def __init__(self, shape): QGraphicsLineItem.__init__(self) StMove.__init__(self, shape) self.allwaysshow = False self.path = QPainterPath() self.setFlag(QGraphicsItem.ItemIsSelectable, False) self.pen = QPen(QColor(50, 100, 255), 1, QtCore.Qt.SolidLine, QtCore.Qt.RoundCap, QtCore.Qt.RoundJoin) self.pen.setCosmetic(True) self.make_papath() def contains_point(self, point): """ StMove cannot be selected. Return maximal distance """ return float(0x7fffffff) def make_papath(self): """ To be called if a Shape shall be printed to the canvas @param canvas: The canvas to be printed in @param pospro: The color of the shape """ self.path = QPainterPath() if len(self.geos): start = self.geos.abs_el(0).get_start_end_points(True) self.path.moveTo(start.x, -start.y) drawHorLine = lambda caller, start, end: self.path.lineTo(end.x, -end.y) drawVerLine = lambda caller, start: None # Not used in 2D mode self.make_path(drawHorLine, drawVerLine) def setSelected(self, flag=True): """ Override inherited function to turn off selection of Arrows. @param flag: The flag to enable or disable Selection """ if self.allwaysshow: pass elif flag is True: self.show() else: self.hide() def setallwaysshow(self, flag=False): """ If the directions shall be allwaysshown the parameter will be set and all paths will be shown. @param flag: The flag to enable or disable Selection """ self.allwaysshow = flag if flag is True: self.show() elif flag is True and self.isSelected(): self.show() else: self.hide() def paint(self, painter, option, widget=None): """ Method will be triggered with each paint event. Possible to give options @param painter: Reference to std. painter @param option: Possible options here @param widget: The widget which is painted on. """ painter.setPen(self.pen) painter.drawPath(self.path) def boundingRect(self): """ Required method for painting. Inherited by Painterpath @return: Gives the Bounding Box """ return self.path.boundingRect() dxf2gcode-20240509/dxf2gcode/gui/canvas.py0000644000000000000000000003466014617065372016626 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2011-2015 # Christian Kohlöffel # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import import logging import dxf2gcode.globals.globals as g #TODO: check if can be removed: #from dxf2gcode.core.linegeo import LineGeo #from dxf2gcode.core.point import Point from dxf2gcode.core.arcgeo import ArcGeo #from dxf2gcode.core.holegeo import HoleGeo import dxf2gcode.globals.constants as c from PyQt5.QtWidgets import QGraphicsView, QMenu from PyQt5 import QtCore from PyQt5.QtGui import QMouseEvent, QKeyEvent from PyQt5.QtWidgets import QApplication from PyQt5.QtCore import Qt logger = logging.getLogger("Gui.Canvas") """ This Canvas function can be called as any class. Since it will pretend to be, depending on the settings, to be the canvas3d or canvas2d class """ def Canvas(parent=None): if g.config.mode3d: from dxf2gcode.gui.canvas3d import GLWidget return GLWidget(parent) else: from dxf2gcode.gui.canvas2d import MyGraphicsView return MyGraphicsView(parent) def CanvasObject(): if g.config.mode3d: QtVersion = QtCore.QT_VERSION_STR.split(".") if not (int(QtVersion[0]) >= 5 and int(QtVersion[1]) >= 4): raise Exception("For the 3d mode you need a PyQt version that includes a Qt version of at least 5.4.\n" "Set mode3d to False in the config file, or update your PyQt version.\n" "Current version found: PyQt%s (which includes Qt%s)" % (QtCore.PYQT_VERSION_STR, QtCore.QT_VERSION_STR)) from PyQt5.QtWidgets import QOpenGLWidget return QOpenGLWidget else: return QGraphicsView class CanvasBase(CanvasObject()): def __init__(self, parent=None): super(CanvasBase, self).__init__(parent) self.isPanning = False self.isRotating = False self.isMultiSelect = False self.setMouseTracking (True) def updateModifiers(self, event): """ Handle all canvas keyboard modifiers in one place. """ if type (event) == QMouseEvent: buttons = event.buttons() else: buttons = QApplication.mouseButtons() if type (event) == QKeyEvent: modifiers = event.modifiers() else: modifiers = QApplication.keyboardModifiers() # allow only clean modifiers, no combos wantMultiSelect = (modifiers == Qt.ControlModifier) self.isMultiSelect = wantMultiSelect and ((buttons == Qt.NoButton) or (buttons == Qt.LeftButton)) wantPanning = (modifiers == Qt.ShiftModifier) self.isPanning = wantPanning and (buttons == Qt.LeftButton) wantRotating = (modifiers == Qt.AltModifier) self.isRotating = wantRotating and (buttons == Qt.LeftButton) if self.isPanning or self.isRotating: self.setCursor(Qt.ClosedHandCursor) elif wantPanning: self.setCursor(Qt.OpenHandCursor) elif wantRotating: self.setCursor(Qt.PointingHandCursor) elif wantMultiSelect: self.setCursor(Qt.CrossCursor) else: self.unsetCursor() class MyDropDownMenu(QMenu): def __init__(self, canvas_scene, position, clicked, offset=None): QMenu.__init__(self) self.clicked = clicked self.offset = offset self.canvas_scene = canvas_scene self.selectedItems = [shape for shape in canvas_scene.shapes if shape.isSelected()] if len(self.selectedItems) == 0: return invertAction = self.addAction(self.tr("Invert Selection")) disableAction = self.addAction(self.tr("Disable Selection")) enableAction = self.addAction(self.tr("Enable Selection")) self.addSeparator() swdirectionAction = self.addAction(self.tr("Switch Direction")) SetNxtStPAction = self.addAction(self.tr("Set Nearest StartPoint")) setSharStAction = self.addAction(self.tr("Set Sharpest StartPoint")) self.addSeparator() #enable pocket mill only if all selected shapes are closed allClosed = True allArcs = True for item in self.selectedItems: if item.closed == False: allClosed == False break for geo in item.geos: if not(isinstance(geo, ArcGeo)): allArcs = False #if all are closed and compensation is NOT done by machine, # since I do not know how this should work... /SZ if allClosed == True and not g.config.vars.Cutter_Compensation["done_by_machine"]: self.PocketAction = self.addAction(self.tr("Pocket Mill")) self.PocketAction.setCheckable(True) if g.config.machine_type == 'drag_knife': pass else: self.PocketAction.triggered.connect(self.setPocket) if self.selectedItems[0].Pocket == True: self.PocketAction.setChecked(True) else: self.PocketAction.setChecked(False) #ONly allow it it's a closed shaep if ((allClosed == True) and (allArcs==True)): self.DrillAction = self.addAction(self.tr("Drill Bore")) self.DrillAction.setCheckable(True) #HoleAction.triggered.connect(self.setHoleGeo) self.DrillAction.triggered.connect(self.setDrill) if self.selectedItems[0].Drill == True: self.DrillAction.setChecked(True) else: self.DrillAction.setChecked(False) if g.config.machine_type == 'drag_knife': pass else: self.addSeparator() submenu1 = QMenu(self.tr('Cutter Compensation'), self) self.noCompAction = submenu1.addAction(self.tr("G40 No Compensation")) self.noCompAction.setCheckable(True) self.leCompAction = submenu1.addAction(self.tr("G41 Left Compensation")) self.leCompAction.setCheckable(True) self.reCompAction = submenu1.addAction(self.tr("G42 Right Compensation")) self.reCompAction.setCheckable(True) logger.debug(self.tr("The selected shapes have the following direction: %i") % (self.calcMenuDir())) self.checkMenuDir(self.calcMenuDir()) self.addMenu(submenu1) invertAction.triggered.connect(self.invertSelection) disableAction.triggered.connect(self.disableSelection) enableAction.triggered.connect(self.enableSelection) swdirectionAction.triggered.connect(self.switchDirection) SetNxtStPAction.triggered.connect(self.setNearestStPoint) setSharStAction.triggered.connect(self.setSharpestStPoint) if g.config.machine_type == 'drag_knife': pass else: self.noCompAction.triggered.connect(self.setNoComp) self.leCompAction.triggered.connect(self.setLeftComp) self.reCompAction.triggered.connect(self.setRightComp) self.exec_(position) def tr(self, string_to_translate): """ Translate a string using the QCoreApplication translation framework @param string_to_translate: a unicode string @return: the translated unicode string if it was possible to translate """ return str(QtCore.QCoreApplication.translate('MyDropDownMenu', string_to_translate)) def calcMenuDir(self): """ This method returns the direction of the selected items. If there are different cutter directions in the selection 0 is returned, else 1 for Left and 2 for right. """ dir = self.selectedItems[0].cut_cor for item in self.selectedItems: if not(dir == item.cut_cor): return -1 return dir-40 def checkMenuDir(self, dir): """ This method checks the buttons in the Contextmenu for the direction of the selected items. @param dir: The direction of the items -1=different, 0=None, 1=left, 2=right """ self.noCompAction.setChecked(False) self.leCompAction.setChecked(False) self.reCompAction.setChecked(False) if dir == 0: self.noCompAction.setChecked(True) elif dir == 1: self.leCompAction.setChecked(True) elif dir == 2: self.reCompAction.setChecked(True) def invertSelection(self): """ This function is called by the Contextmenu of the Graphicsview. @purpose: Inverts the selection of all shapes. """ for shape in self.canvas_scene.shapes: shape.setSelected(not shape.isSelected()) g.window.TreeHandler.updateShapeSelection(shape, shape.isSelected()) self.canvas_scene.update() def disableSelection(self): """ Disable all shapes which are currently selected. Based on the view options they are not shown, or showed in a different color """ for shape in self.selectedItems: if shape.allowedToChange: shape.setDisable(True) g.window.TreeHandler.updateShapeEnabling(shape, False) self.canvas_scene.update() def enableSelection(self): """ Enable all shapes which are currently selected. Based on the view options they are not shown, or showed in a different color """ for shape in self.selectedItems: if shape.allowedToChange: shape.setDisable(False) g.window.TreeHandler.updateShapeEnabling(shape, True) self.canvas_scene.update() def switchDirection(self): """ Switch the Direction of all items. For example from CW direction to CCW """ for shape in self.selectedItems: shape.reverse() logger.debug(self.tr('Switched Direction at Shape Nr: %i') % shape.nr) self.canvas_scene.repaint_shape(shape) self.canvas_scene.update() g.window.TreeHandler.prepareExportOrderUpdate() def setNearestStPoint(self): """ Search the nearest StartPoint to the clicked position of all selected shapes. """ xyForZ = {} for shape in self.selectedItems: clicked = self.clicked if self.offset is not None: z = shape.axis3_start_mill_depth if z not in xyForZ: clicked = xyForZ[z] = self.canvas_scene.determineSelectedPosition(self.clicked, z, self.offset) shape.setNearestStPoint(clicked) self.canvas_scene.repaint_shape(shape) g.window.updateExportRoute() def setSharpestStPoint(self): """ Search the sharpest StartPoint of all selected shapes. """ for shape in self.selectedItems: shape.setSharpestStPoint() self.canvas_scene.repaint_shape(shape) g.window.updateExportRoute() def setNoComp(self): """ Sets the compensation to 40, which is none, for the selected shapes. """ for shape in self.selectedItems: shape.cut_cor = 40 logger.debug(self.tr('Changed Cutter Correction to None for shape: %i') % shape.nr) self.canvas_scene.repaint_shape(shape) self.canvas_scene.update() def setLeftComp(self): """ Sets the compensation to 41, which is Left, for the selected shapes. """ for shape in self.selectedItems: shape.cut_cor = 41 logger.debug(self.tr('Changed Cutter Correction to left for shape: %i') % shape.nr) self.canvas_scene.repaint_shape(shape) self.canvas_scene.update() def setRightComp(self): """ Sets the compensation to 42, which is Right, for the selected shapes. """ for shape in self.selectedItems: shape.cut_cor = 42 logger.debug(self.tr('Changed Cutter Correction to right for shape: %i') % shape.nr) self.canvas_scene.repaint_shape(shape) self.canvas_scene.update() def setPocket(self): for shape in self.selectedItems: if shape.Pocket == False: shape.Pocket = True self.PocketAction.setChecked(True) logger.debug(self.tr('Set to True for Pocket Mill for shape: %i') % shape.nr) g.window.TreeHandler.updatePocketMill(shape,True) else: shape.Pocket = False self.PocketAction.setChecked(False) logger.debug(self.tr('Set to False for Pocket Mill for shape: %i') % shape.nr) g.window.TreeHandler.updatePocketMill(shape,False) self.canvas_scene.repaint_shape(shape) self.canvas_scene.repaint_shape(shape) self.canvas_scene.update() def setDrill(self): for shape in self.selectedItems: if shape.Drill == False: shape.Drill = True #shape.DrillType = "G73" self.DrillAction.setChecked(True) logger.debug(self.tr('Set to True for G73 Drill, for shape: %i') % shape.nr) g.window.TreeHandler.updateDrill(shape,True) else: shape.Drill = False self.DrillAction.setChecked(False) logger.debug(self.tr('Set to False for G73 Drill, for shape: %i') % shape.nr) g.window.TreeHandler.updateDrill(shape,False) self.canvas_scene.repaint_shape(shape) self.canvas_scene.repaint_shape(shape) self.canvas_scene.update() dxf2gcode-20240509/dxf2gcode/gui/arrow.py0000664000000000000000000001372613413457762016510 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Vinzenz Schulz # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from __future__ import division from math import sin, cos, acos, pi import logging from dxf2gcode.core.point import Point import dxf2gcode.globals.constants as c from PyQt5.QtWidgets import QGraphicsLineItem, QGraphicsItem from PyQt5.QtGui import QPen, QPolygonF from PyQt5 import QtCore logger = logging.getLogger("Gui.Arrow") class Arrow(QGraphicsLineItem): def __init__(self, startp=Point(), endp=None, length=60.0, angle=50.0, color=QtCore.Qt.red, pencolor=QtCore.Qt.green, startarrow=True): """ Initialisation of the class. """ self.sc = None super(Arrow, self).__init__() self.startp = QtCore.QPointF(startp.x, -startp.y) self.endp = endp self.length = length self.angle = angle self.startarrow = startarrow self.allwaysshow = False self.arrowHead = QPolygonF() self.setFlag(QGraphicsItem.ItemIsSelectable, False) self.myColor = color self.pen = QPen(pencolor, 1, QtCore.Qt.SolidLine) self.pen.setCosmetic(True) self.arrowSize = 8.0 def contains_point(self, point): """ Arrows cannot be selected. Return maximal distance """ return float(0x7fffffff) def setSelected(self, flag=True, blockSignals=True): """ Override inherited function to turn off selection of Arrows. @param flag: The flag to enable or disable Selection """ if self.allwaysshow: pass elif flag is True: self.show() else: self.hide() def setallwaysshow(self, flag=False): """ If the directions shall be allwaysshown the parameter will be set and all paths will be shown. @param flag: The flag to enable or disable Selection """ self.allwaysshow = flag if flag is True: self.show() elif flag is True and self.isSelected(): self.show() else: self.hide() def paint(self, painter, option, widget=None): """ Method for painting the arrow. """ demat = painter.deviceTransform() self.sc = demat.m11() if self.endp is None: dx = cos(self.angle) * self.length / self.sc dy = sin(self.angle) * self.length / self.sc endp = QtCore.QPointF(self.startp.x() - dx, self.startp.y() + dy) else: endp = QtCore.QPointF(self.endp.x, -self.endp.y) arrowSize = self.arrowSize / self.sc painter.setPen(self.pen) painter.setBrush(self.myColor) self.setLine(QtCore.QLineF(endp, self.startp)) line = self.line() if line.length() != 0: angle = acos(line.dx() / line.length()) if line.dy() >= 0: angle = (pi * 2.0) - angle if self.startarrow: arrowP1 = line.p2() - QtCore.QPointF(sin(angle + pi / 3.0) * arrowSize, cos(angle + pi / 3.0) * arrowSize) arrowP2 = line.p2() - QtCore.QPointF(sin(angle + pi - pi / 3.0) * arrowSize, cos(angle + pi - pi / 3.0) * arrowSize) self.arrowHead.clear() for Point in [line.p2(), arrowP1, arrowP2]: self.arrowHead.append(Point) else: arrowP1 = line.p1() + QtCore.QPointF(sin(angle + pi / 3.0) * arrowSize, cos(angle + pi / 3.0) * arrowSize) arrowP2 = line.p1() + QtCore.QPointF(sin(angle + pi - pi / 3.0) * arrowSize, cos(angle + pi - pi / 3.0) * arrowSize) self.arrowHead.clear() for Point in [line.p1(), arrowP1, arrowP2]: self.arrowHead.append(Point) painter.drawLine(line) painter.drawPolygon(self.arrowHead) def boundingRect(self): """ Override inherited function to enlarge selection of Arrow to include all @param flag: The flag to enable or disable Selection """ if not self.sc: # since this function is called before paint; and scale is unknown return QtCore.QRectF(self.startp.x(), self.startp.y(), 1e-9, 1e-9) arrowSize = self.arrowSize / self.sc extra = arrowSize # self.pen.width() + if self.endp is None: dx = cos(self.angle) * self.length / self.sc dy = sin(self.angle) * self.length / self.sc endp = QtCore.QPointF(self.startp.x() - dx, self.startp.y() + dy) else: endp = QtCore.QPointF(self.endp.x, -self.endp.y) brect = QtCore.QRectF(self.startp, QtCore.QSizeF(endp.x()-self.startp.x(), endp.y()-self.startp.y())).normalized().adjusted(-extra, -extra, extra, extra) return brect dxf2gcode-20240509/dxf2gcode/gui/aboutdialog.py0000664000000000000000000000435613413457762017647 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2010-2014 # Christian Kohl�ffel # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ import dxf2gcode.globals.constants as c from PyQt5.QtWidgets import QDialog, QVBoxLayout, QGridLayout, QTextBrowser from PyQt5.QtGui import QIcon, QPixmap, QTextCursor from PyQt5 import QtCore import logging logger = logging.getLogger("Gui.AboutDialog") class AboutDialog(QDialog): def __init__(self, title="Test", message="Test Text"): super(AboutDialog, self).__init__() self.title = title self.message = message self.initUI() def initUI(self): """ initUI() """ vbox = QVBoxLayout(self) grid1 = QGridLayout() grid1.setSpacing(10) self.text = QTextBrowser() self.text.setReadOnly(True) self.text.setOpenExternalLinks(True) self.text.append(self.message) self.text.moveCursor(QTextCursor.Start) self.text.ensureCursorVisible() vbox.addWidget(self.text) self.setLayout(vbox) self.setMinimumSize(550, 450) self.resize(550, 600) self.setWindowFlags(self.windowFlags() & ~QtCore.Qt.WindowContextHelpButtonHint) self.setWindowTitle(self.title) iconWT = QIcon() iconWT.addPixmap(QPixmap(":images/DXF2GCODE-001.ico"), QIcon.Normal, QIcon.Off) self.setWindowIcon(QIcon(iconWT)) self.exec_() dxf2gcode-20240509/dxf2gcode/gui/__init__.py0000664000000000000000000000000113413457762017073 0ustar rootroot dxf2gcode-20240509/dxf2gcode/globals/0000755000000000000000000000000014617100260015611 5ustar rootrootdxf2gcode-20240509/dxf2gcode/globals/logger.py0000664000000000000000000001102313413457762017460 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2009-2015 # Michael Haberler # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import import sys import logging import dxf2gcode.globals.globals as g logger = logging.getLogger(__name__) class LoggerClass(object): """ handle 3 log streams: console file message window """ def __init__(self, root_logger): """ Initialisation of the Logger Class. Only the root logger is initialized and the console handler is set. All other handlers needs to be set later since the config / window is not present during the start. """ self.root_logger = root_logger """ The level of the root_logger needs to be the highest in order to get all messages into the handlers. The handles may have higher logging level """ root_logger.setLevel(logging.DEBUG) self.console_handler = logging.StreamHandler(sys.stderr) self.console_handler.setLevel(logging.ERROR) formatter = logging.Formatter("%(levelname)-10s %(name)-15s %(funcName)-10s %(lineno)-4d: - %(message)s") self.console_handler.setFormatter(formatter) root_logger.addHandler(self.console_handler) def set_console_handler_loglevel(self): """ This function is used to reset the Loglevel after the config file hase been loaded. """ self.console_handler.setLevel(self._cvtlevel(g.config.vars.Logging['console_loglevel'])) def add_window_logger(self, stream=sys.stderr): """ Add the logger, which may be used to log to the window. This stream will be shown in the messagebox in the canvas window. @param stream: The stream which shall be used for writing. Here the window will be used. This Class needs a function "def write(self, charstr) {DEBUG, INFO, WARNING, ERROR, CRITICAL} """ self.window_handler = logging.StreamHandler(stream) self.window_handler.setLevel(self._cvtlevel(g.config.vars.Logging['window_loglevel'])) if g.config.vars.Logging['window_loglevel'] == 'INFO': self.window_handler.setFormatter(logging.Formatter("%(message)s")) else: formatter=logging.Formatter("%(levelname)s - %(message)s") self.window_handler.setFormatter(formatter) self.root_logger.addHandler(self.window_handler) def add_file_logger(self): """ Add the logger, which may be used to log to a dedicated file. This logger will be enabled all the time. """ self.file_handler = logging.FileHandler(g.config.vars.Logging['logfile'], 'w') #create self.file_handler.setLevel(self._cvtlevel(g.config.vars.Logging['file_loglevel'])) self.file_handler.setFormatter(logging.Formatter("%(levelname)-10s %(name)-15s %(funcName)-10s %(lineno)-4d: - %(message)s")) self.root_logger.addHandler(self.file_handler) def _cvtlevel(self, level): """ This function converts the given logging levels as they are: {DEBUG, INFO, WARNING, ERROR, CRITICAL} to a conform format which is required by the function e.g. logging.DEBUG @param level: The String with the Level @return: Returns the converted string acc. to logging needs. """ if isinstance(level, str): return logging.getLevelName(level) else: return level class FilterModule(logging.Filter): def filter(self, record): """A dedicated filter may be added here for debug use @param record: The log message is posted here in order to do some checks @return: If the value is true it will be shown in the log """ return True dxf2gcode-20240509/dxf2gcode/globals/helperfunctions.py0000664000000000000000000000423314011526166021404 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2015-2016 # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import import dxf2gcode.globals.constants as c str_encode = lambda string: string str_decode = lambda string: string qstr_encode = lambda string: str_encode(string) ''' Following two functions are needed for Python3+, since it no longer supports these functions as is ''' def toInt(text): try: value = (int(text), True) except ValueError: value = (0, False) return value def toFloat(text): try: value = (float(text), True) except ValueError: value = (0.0, False) return value def a2u(text): """ Convert ASCII string with encoded chars like \ U + xxxx to Python Unicode strings. """ cur = 0 out = str() while cur < len(text): idx = text.find('\\U+', cur) if idx < 0: out += text[cur:] break out += text[cur:idx] for cur in range(idx + 3, len(text) + 1): if cur == len (text): break if "0123456789abcdefABCDEF".find(text[cur]) < 0: break if cur == idx + 3: # "\U+" without following digits; copy to output as-is out += text[idx:cur] continue out += chr(int(text[idx+3:cur], 16)) return out dxf2gcode-20240509/dxf2gcode/globals/globals.py0000664000000000000000000000476513413457762017643 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2009-2015 # Michael Haberler # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ """ Container for global variables accessible to all classes """ from __future__ import absolute_import import os import sys import gettext import locale import dxf2gcode.globals.constants as constants # logger instance, see http://docs.python.org/library/logging.html # once set, use as logger.error("foo") logger = None # Config instance config = None # Folder of the main instance folder = None window = None quiet = False #------------------------------------- # determine Platform platform = "" if os.name == "posix" and sys.platform == "darwin": platform = "mac" # Language support # langs = [] # list of supported languages # figure default language lc, encoding = locale.getdefaultlocale() if lc: langs = [lc] # if there's one, use as default language = os.environ.get('LANGUAGE', None) if language: """language comes back something like en_CA:en_US:en_GB:en on linuxy systems, on Win32 it's nothing, so we need to split it up into a list""" langs += language.split(":") """Now add on to the back of the list the translations that we know that we have, our defaults""" langs += [] """Now langs is a list of all of the languages that we are going to try to use. First we check the default, then what the system told us, and finally the 'known' list""" gettext.bindtextdomain(constants.APPNAME, os.path.realpath(os.path.dirname(sys.argv[0]))) gettext.textdomain(constants.APPNAME) # Get the language to use trans = gettext.translation(constants.APPNAME, localedir='languages', languages=langs, fallback=True) trans.install() dxf2gcode-20240509/dxf2gcode/globals/d2gexceptions.py0000664000000000000000000000347113413457762020767 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2009-2015 # Michael Haberler # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ """ user defined exceptions """ class BadConfigFileError(SyntaxError): """ syntax error in config file """ def __init__(self, value): print("bin hier") self.value = value def __str__(self): return repr(self.value) class VersionMismatchError(Exception): """ version mismatch in config file """ def __init__(self, fileversion, CONFIG_VERSION): self.fileversion = fileversion self.CONFIG_VERSION = CONFIG_VERSION def __str__(self): return repr('config file versions do not match - internal: %s,' ' config file: %s - delete existing file to resolve issue' % (self.CONFIG_VERSION, self.fileversion)) class OptionError(SyntaxError): """ conflicting command line option """ class PluginError(SyntaxError): """ something went wrong during plugin loading or initialization """ dxf2gcode-20240509/dxf2gcode/globals/constants.py0000644000000000000000000000354214617100256020210 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2010-2015 # Christian Kohlöffel # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ """ All global constants are initialized in this module. They are used in the other modules. see http://code.activestate.com/recipes/65207/ for module const @purpose: initialization of the global constants used within the other modules. """ import logging import platform from PyQt5 import QtCore # Global Variables APPNAME = "DXF2GCODE" VERSION = "Py%s PyQt%s" % (platform.python_version(), QtCore.PYQT_VERSION_STR) DATE = "$Date: Thu May 9 08:31:03 2024 +0200 $" REVISION = "$Revision: f105a0fd51c894c0c8326da59149b920a5f6e49e $" AUTHOR = u"$Author: Damian Wrobel $" CONFIG_EXTENSION = '.cfg' PY_EXTENSION = '.py' PROJECT_EXTENSION = '.d2g' # Rename unreadable config/varspace files to .bad BAD_CONFIG_EXTENSION = '.bad' DEFAULT_CONFIG_DIR = 'config' DEFAULT_POSTPRO_DIR = 'postpro_config' # log related DEFAULT_LOGFILE = 'dxf2gcode.log' STARTUP_LOGLEVEL = logging.DEBUG # PRT = logging.INFO dxf2gcode-20240509/dxf2gcode/globals/config.py0000644000000000000000000010524014617065372017450 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2009-2021 # Christian Kohlöffel # Jean-Paul Schouwstra # Xavier Izard # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import import os import sys import pprint import logging from collections import OrderedDict from configobj import ConfigObj, flatten_errors from validate import Validator import dxf2gcode.globals.globals as g from dxf2gcode.globals.d2gexceptions import * from dxf2gcode.gui.configwindow import * import dxf2gcode.globals.constants as c #TODO: check if can be removed: from dns.rdataclass import NONE from PyQt5 import QtCore logger = logging.getLogger("Core.Config") SUPPORTED_CONFIGS = [9.11, 9.12] CONFIG_VERSION = SUPPORTED_CONFIGS[-1] """ version tag - increment this each time you edit CONFIG_SPEC compared to version number in config file so old versions are recognized and skipped" """ # Paths change whether platform is Linux or Windows if "linux" in sys.platform.lower() or "unix" in sys.platform.lower(): #Declare here the path that are specific to Linux IMPORT_DIR = "~/Documents" OUTPUT_DIR = "~/Documents" PROJECT_DIR= "~/Documents" PDFTOPS_CMD = "/usr/bin/pdftops" PSTOEDIT_CMD = "/usr/bin/pstoedit" else: #Declare here the path that are specific to Windows IMPORT_DIR = "D:/Eclipse_Workspace/DXF2GCODE/trunk/dxf" OUTPUT_DIR = "D:" PROJECT_DIR= "D:" # Xpdf Tools from http://www.xpdfreader.com/download.html PDFTOPS_CMD = "C:/xpdf-tools-win-4.00/bin64/pdftops.exe" # pstoedit from https://sourceforge.net/projects/pstoedit/ # and https://sourceforge.net/projects/ghostscript/ dependency # if gs in not on the PATH it might be necessary to add -gs option # to psedit in Option->Configuration->Software config->pstoedit # e.g. -gs, C:/Program Files (x86)/gs/gs9.09/bin/gswin32c.exe PSTOEDIT_CMD = "C:/Program Files/pstoedit/pstoedit.exe" """ HOWTO declare a new variable in the config file: 1) Choose the appropriate section and add the variable in the CONFIG_SPEC string below (Note: the CONFIG_SPEC is used to set and check the configfile "config.cfg") 2) Set it's default value, the min/max values (if applicable) and a comment above the variable's name (Important note: the min/max values and the comment are directly used in the configuration window, so carefully set them!) Example of correct declaration: [MySection] # Drag angle is used to blah blah blah ... drag_angle = float(min = 0, max = 360, default = 20) 3) If you want the setting to appear in the configuration window, fill the cfg_widget_def variable, using the _same_ names as in the CONFIG_SPEC Example of declaration correlated to the above one: 'MySection': { 'drag_angle': CfgDoubleSpinBox('Drag angle (in degrees):'), } (Note: the list of available types for the configuration window can be found in the "configwindow.py" file) """ """ ATTENTION: _Don't_ split the long comments lines in CONFIG_SPEC! The comments line are used as "QWhatsThis" in the config window. Any new line in the CONFIG_SPEC is reproduced in the QWhatsThis (intented behaviour to allow creating paragraphs) ATTENTION """ CONFIG_SPEC = str(''' # Section and variable names must be valid Python identifiers # do not use whitespace in names # do not edit the following section name: [Version] # do not edit the following value: config_version = float(default = "''' + str(CONFIG_VERSION) + '''") [Paths] # By default look for DXF files in this directory. import_dir = string(default = "''' + IMPORT_DIR + '''") # Export generated gcode by default to this directory. output_dir = string(default = "''' + OUTPUT_DIR + '''") # Save project files by default to this directory. project_dir = string(default = "''' + PROJECT_DIR + '''") # Automatic save last path to config file. Therefore open with last path autosave_path = boolean(default = True) [Filters] # pstoedit is an external tool to convert PDF files to PS (postscript) files, which can be further processed by pstoedit tool. pdftops_cmd = string(default = "''' + PDFTOPS_CMD + '''") pdftops_opt = list(default = list()) # pstoedit is an external tool to import *.ps (postscript) files and convert them to DXF, in order to import them in dxf2gcode. pstoedit_cmd = string(default = "''' + PSTOEDIT_CMD + '''") pstoedit_opt = list(default = list('-dt', '-f', 'dxf:-mm')) [Axis_letters] ax1_letter = string(min = 1, default = "X") ax2_letter = string(min = 1, default = "Y") ax3_letter = string(min = 1, default = "Z") [Plane_Coordinates] axis1_start_end = float(default = 0) axis2_start_end = float(default = 0) std_scale = float(default = 1.0) [Depth_Coordinates] # Third axis' coordinate at which it can do rapid move. axis3_retract = float(default = 15.0) # Third axis' margin for which it needs to do a slow move. axis3_safe_margin = float(default = 3.0) # The top third axis' coordinate of the workpiece. axis3_start_mill_depth = float(default = 0.0) # Relative depth for each cut (third axis' coordinate will be decreased by this value at each step). axis3_slice_depth = float(default = -1.5) # Relative final third axis' depth. axis3_mill_depth = float(default = -3.0) [Feed_Rates] f_g1_plane = float(default = 400) f_g1_depth = float(default = 150) [General] # Enable 3D representation of the piece (requires PyQt5 and OpenGL) mode3d = boolean(default = False) # Write output to stdout (console), instead of a file. May be used to interface directly with Linux CNC, for example. write_to_stdout = boolean(default = False) # When enabled, the shapes that are disabled are still shown on the graphic view. show_disabled_paths = boolean(default = True) # When enabled, export path is live updated on the graphic view. live_update_export_route = boolean(default = False) # Divide the lines in 2 parts, in order to start the cutting in the middle of a line (usefull for cutter compensation) split_line_segments = boolean(default = False) # Automatically enable cutter compensation for all the shapes (G41 & G42) automatic_cutter_compensation = boolean(default = False) # Machine types supported: milling; lathe; drag_knife machine_type = option('milling', 'lathe', 'drag_knife', default = 'milling') # The unit used for all values in this file tool_units = option('mm', 'in', default = 'mm') [Cutter_Compensation] # If not checked, DXF2GCODE will create a virtual path for G41 and G42 command. And output will be set to G40; i.e. it will create the path that normally your machine would create with it's cutter compensation. done_by_machine = boolean(default = True) [Drag_Knife_Options] # drag_angle: if angle of movement exceeds this angle (in degrees), the tool retracts to dragDepth (The dragDepth is given by axis3_slice_depth parameter). # This parameter depends on the knife that you are using. A bigger knife cannot make small corners like a smaller knife. You will simply break your knife or destroy your working piece. Now, if the angle your knife has to make is bigger than this angle it will move to a different depth (a less deep position) such that the knife will experience less resistance but still has some (otherwise it will not change its angle at all, whence DRAG knife). drag_angle = float(min = 0, max = 360, default = 20) [Route_Optimisation] # If enabled, it will by default check the TSP for all the shapes in the treeview. # If disabled and no shape is checked for TSP optimisation in the listbox, the export order will be as defined in the listbox. default_TSP = boolean(default = False) # Path optimizer behaviour: # - CONSTRAIN_ORDER_ONLY: fixed Shapes and optimized Shapes can be mixed. Only order of fixed shapes is kept # - CONSTRAIN_PLACE_AFTER: optimized Shapes are always placed after any fixed Shape TSP_shape_order = option('CONSTRAIN_ORDER_ONLY', 'CONSTRAIN_PLACE_AFTER', default = 'CONSTRAIN_ORDER_ONLY') # This is a value of how much it should deviate the order with each iteration. The higher the value the more you allow alterations. mutation_rate = float(min = 0, max = 1, default = 0.95) # Number of people the population has for path optimization (values higher than 200 can make everything slow). max_population = integer(min = 0, max = 10000, default = 20) # Maximum number of iterations that will be done. This is internally also calculated, based on the number of shapes to optimize. # Values higher than 10000 can take really long to solve the TSP and are not recommended. max_iterations = integer(min = 1, max = 1000000, default = 300) # Different methods to initialize the population for the TSP optimizer. # - Ordered will start with the defined one in the listbox # - Random just random # - Heuristic will search the nearest neighbors and starts with the resulting order. begin_art = option('ordered', 'random', 'heuristic', default = 'heuristic') [Import_Parameters] # Tolerance at which similar points will be interpreted as similar point_tolerance = float(min = 0, max = 1, default = 0.001) # Types of check performed during spline conversion: # 1: Checking for Nurbs degree (polygon degree) and similar knots consistence # 2: Checking for Nurbs degree (polygon degree) and similar control points # 3: Performes check 1 and check 2 spline_check = integer(min = 1, max = 3, default = 3) # This is the tolerance which is used to fit the converted lines and arc segments to the converted NURBS. fitting_tolerance = float(min = 0, max = 1, default = 0.001) # If checked, the elements (shape, ...) which are part of a block will be inserted on the layer that belongs to the block (even though the elements might be defined on a different layers) insert_at_block_layer = boolean(default = False) # These settings are intented to be used in the DXF file: # - By using MILL: as a prefix to your layer name, you can define milling parameters by using one of the following identifiers. # - Example of a layer name: MILL: 1 Md: 2 Sd: 2 FeedXY: 400 FeedZ: 200 # (This will cut shapes on the layer 2 mm deep (in one pass, since Sd == Md) using 400 mm / minute speed for X/Y movement and 200 mm / minute for Z movement) [Layer_Options] # To be used in the DXF layer name. See DXF2GCODE' wiki for more information. id_float_separator = string(default = ":") # To be used in the DXF layer name. See DXF2GCODE' wiki for more information. mill_depth_identifiers = list(default = list('MillDepth', 'Md', 'TiefeGesamt', 'Tg')) # To be used in the DXF layer name. See DXF2GCODE' wiki for more information. slice_depth_identifiers = list(default = list('SliceDepth', 'Sd', 'TiefeZustellung', 'Tz')) # To be used in the DXF layer name. See DXF2GCODE' wiki for more information. start_mill_depth_identifiers = list(default = list('StartMillDepth', 'SMd', 'StartTiefe', 'St')) # To be used in the DXF layer name. See DXF2GCODE' wiki for more information. retract_identifiers = list(default = list('RetractHeight', 'Rh', 'Freifahrthoehe', 'FFh')) # To be used in the DXF layer name. See DXF2GCODE' wiki for more information. safe_margin_identifiers = list(default = list('SafeMargin', 'Sm', 'Sicherheitshoehe', 'Sh')) # To be used in the DXF layer name. See DXF2GCODE' wiki for more information. f_g1_plane_identifiers = list(default = list('FeedXY', 'Fxy', 'VorschubXY', 'Vxy', 'F')) # To be used in the DXF layer name. See DXF2GCODE' wiki for more information. f_g1_depth_identifiers = list(default = list('FeedZ', 'Fz', 'VorschubZ', 'Vz')) # To be used in the DXF layer name. See DXF2GCODE' wiki for more information. tool_nr_identifiers = list(default = list('ToolNr', 'Tn', 'T', 'WerkzeugNummer', 'Wn')) # To be used in the DXF layer name. See DXF2GCODE' wiki for more information. tool_diameter_identifiers = list(default = list('ToolDiameter', 'Td', 'WerkzeugDurchmesser', 'Wd')) # To be used in the DXF layer name. See DXF2GCODE' wiki for more information. spindle_speed_identifiers = list(default = list('SpindleSpeed', 'Drehzahl', 'RPM', 'UPM', 'S')) # To be used in the DXF layer name. See DXF2GCODE' wiki for more information. start_radius_identifiers = list(default = list('StartRadius', 'Sr')) # Tools table: define here the tools used for milling: # - name: this is the number of the tool, it will be used directly in the GCODE (eg 20 for tool T20) # - diameter: diameter of the tool # - speed: spindle speed in rpm # - start_radius: start radius for tool compensation when using G41 / G42 moves [Tool_Parameters] [[1]] diameter = float(default = 2.0) speed = float(default = 6000) start_radius = float(default = 0.2) [[2]] diameter = float(default = 2.0) speed = float(default = 6000.0) start_radius = float(default = 1.0) [[10]] diameter = float(default = 10.0) speed = float(default = 6000.0) start_radius = float(default = 2.0) [[__many__]] diameter = float(default = 3.0) speed = float(default = 6000) start_radius = float(default = 3.0) # Define here custom GCODE actions: # - name: this is the unique name of the action # - gcode: the text that will be inserted in the final program (each new line is also translated as a new line in the output file) # Custom actions can be inserted in the program by using right-click contextual menu on the treeview. [Custom_Actions] [[__many__]] gcode = string(default = "(change subsection name and insert your custom GCode here. Use triple quote to place the code on several lines)") [Logging] # Logging to textfile is disabled by default logfile = string(default = "") # This really goes to stderr console_loglevel = option('DEBUG', 'INFO', 'WARNING', 'ERROR','CRITICAL', default = 'CRITICAL') # Log levels are, in increasing importance: DEBUG; INFO; WARNING; ERROR; CRITICAL # Log events with importance >= loglevel are logged to the corresponding output file_loglevel = option('DEBUG', 'INFO', 'WARNING', 'ERROR','CRITICAL', default = 'DEBUG') # Logging level for the message window window_loglevel = option('DEBUG', 'INFO', 'WARNING', 'ERROR','CRITICAL', default = 'INFO') ''').splitlines() """ format, type and default value specification of the global config file""" class MyConfig(object): """ This class hosts all functions related to the Config File. """ def __init__(self): """ initialize the varspace of an existing plugin instance init_varspace() is a superclass method of plugin """ self.folder = os.path.join(g.folder, c.DEFAULT_CONFIG_DIR) self.filename = os.path.join(self.folder, 'config' + c.CONFIG_EXTENSION) self.version_mismatch = '' # no problem for now self.default_config = False # whether a new name was generated self.var_dict = dict() self.spec = ConfigObj(CONFIG_SPEC, interpolation=False, list_values=False, _inspec=True) # try: self.load_config() self.update_config() # The following settings won't be modified after a change in the configuration window. # If a setting need to be updated when the configuration changes, move it to the update_config() function self.mode3d = self.vars.General['mode3d'] self.machine_type = self.vars.General['machine_type'] self.fitting_tolerance = self.vars.Import_Parameters['fitting_tolerance'] self.point_tolerance = self.vars.Import_Parameters['point_tolerance'] self.metric = 0 if self.vars.General['tool_units'] == 'in' else 1 # Standard if no other unit is determined while importing self.tool_units = self.vars.General['tool_units'] # store the initial tool_units (we don't want it to change until software restart) self.tool_units_metric = 0 if self.vars.General['tool_units'] == 'in' else 1 # except Exception, msg: # logger.warning(self.tr("Config loading failed: %s") % msg) # return False def tr(self, string_to_translate): """ Translate a string using the QCoreApplication translation framework @param string_to_translate: a unicode string @return: the translated unicode string if it was possible to translate """ return str(QtCore.QCoreApplication.translate('MyConfig', string_to_translate)) def update_config(self): """ Call this function each time the self.var_dict is updated (eg when the configuration window changes some settings) """ # convenience - flatten nested config dict to access it via self.config.sectionname.varname self.vars = DictDotLookup(self.var_dict) # add here any update needed for the internal variables of this class def make_settings_folder(self): """Create settings folder if necessary""" try: os.makedirs(self.folder) except OSError: pass def load_config(self): """Load Config File""" logger.info(self.filename) if os.path.isfile(self.filename): try: # file exists, read & validate it self.var_dict = ConfigObj(self.filename, configspec=CONFIG_SPEC) _vdt = Validator() result = self.var_dict.validate(_vdt, preserve_errors=True) validate_errors = flatten_errors(self.var_dict, result) if validate_errors: logger.error(self.tr("errors reading %s:") % self.filename) for entry in validate_errors: section_list, key, error = entry if key is not None: section_list.append(key) else: section_list.append('[missing section]') section_string = ', '.join(section_list) if not error: error = self.tr('Missing value or section.') logger.error(section_string + ' = ' + error) if validate_errors: raise BadConfigFileError("syntax errors in config file") # check config file version against internal version if CONFIG_VERSION: fileversion = self.var_dict['Version']['config_version'] # this could raise KeyError if fileversion not in SUPPORTED_CONFIGS: raise VersionMismatchError(fileversion, SUPPORTED_CONFIGS) else: self.var_dict['Version']['config_version']=CONFIG_VERSION #if fileversion != CONFIG_VERSION: # raise VersionMismatchError(fileversion, CONFIG_VERSION) except VersionMismatchError: #raise VersionMismatchError(fileversion, CONFIG_VERSION) # version mismatch flag, it will be used to display an error. self.version_mismatch = self.tr("The configuration file version ({0}) doesn't match any of the software expected version ({1}).\n\nYou have to delete (or carefully edit) the configuration file \"{2}\" to solve the problem.").format(fileversion, SUPPORTED_CONFIGS, self.filename) except Exception as inst: logger.error(inst) (base, ext) = os.path.splitext(self.filename) badfilename = base + c.BAD_CONFIG_EXTENSION logger.debug(self.tr("trying to rename bad cfg %s to %s") % (self.filename, badfilename)) try: os.rename(self.filename, badfilename) except OSError as e: logger.error(self.tr("rename(%s,%s) failed: %s") % (self.filename, badfilename, e.strerror)) raise else: logger.debug(self.tr("renamed bad varspace %s to '%s'") % (self.filename, badfilename)) self.create_default_config() self.default_config = True logger.debug(self.tr("created default varspace '%s'") % self.filename) else: self.default_config = False # logger.debug(self.dir()) # logger.debug(self.tr("created default varspace '%s'") % self.filename) # logger.debug(self.tr("read existing varspace '%s'") % self.filename) else: self.create_default_config() self.default_config = True logger.debug(self.tr("created default varspace '%s'") % self.filename) self.var_dict.main.interpolation = False # avoid ConfigObj getting too clever def create_default_config(self): # check for existing setting folder or create one self.make_settings_folder() # derive config file with defaults from spec self.var_dict = ConfigObj(configspec=CONFIG_SPEC) _vdt = Validator() self.var_dict.validate(_vdt, copy=True) self.var_dict.filename = self.filename self.var_dict.write() def save_varspace(self): """Saves Variables space""" self.var_dict.filename = self.filename self.var_dict.write() def print_vars(self): """Prints Variables""" print("Variables:") for k, v in self.var_dict['Variables'].items(): print(k, "=", v) def makeConfigWidgets(self): """ Build the configuration widgets and store them into a dictionary. The structure of the dictionnary must match the structure of the configuration file. The names of the keys must be identical to those used in the configfile. If a name is declared in the configfile but not here, it simply won't appear in the config window (the config_version for example must not be modified by the user, so it is not declared here) """ coordinate_unit = self.tr(" mm") if self.tool_units_metric else self.tr(" in") speed_unit = self.tr(" mm/min") if self.tool_units_metric else self.tr(" IPS") cfg_widget_def = OrderedDict([ ('__section_title__', { # This section is only used for assigning titles to the keys of the dictionnary (= name of the sections used in the config file). # This name is displayed in the tabs of the configuration window ; if no name is provided, the key name is used. A same title may be used for several keys : in this case, all the items that belongs to this section are regrouped into the same tab. # Note: the title may be specified in the section itselt too, using special entry "'__section_title__': Title to use" 'Tool_Parameters': self.tr("Tools table"), 'Custom_Actions' : self.tr("Custom actions")}), ('Paths', OrderedDict([ ('__section_title__', self.tr("Software config")), ('import_dir', CfgLineEdit(self.tr('By default look for DXF files in:'))), ('output_dir', CfgLineEdit(self.tr('By default export generated G-Code to:'))), ('project_dir', CfgLineEdit(self.tr('By default save Project files to:'))), ('autosave_path', CfgCheckBox(self.tr('Update paths with last used path: '))) ])), ('Filters', OrderedDict([ ('__section_title__', self.tr("Software config")), ('__subtitle__', CfgSubtitle("pdftops")), ('pdftops_cmd', CfgLineEdit(self.tr('Location of executable:'))), ('pdftops_opt', CfgListEdit(self.tr('Command-line options:'), ',')), ('__subtitle2__', CfgSubtitle("pstoedit")), ('pstoedit_cmd', CfgLineEdit(self.tr('Location of executable:'))), ('pstoedit_opt', CfgListEdit(self.tr('Command-line options:'), ',')) ])), ('General', OrderedDict([ ('__section_title__', self.tr("General settings")), ('mode3d', CfgCheckBox(self.tr('3D mode (requires OpenGL - restart needed)'))), ('show_disabled_paths', CfgCheckBox(self.tr('Display disabled paths (default)'))), ('live_update_export_route', CfgCheckBox(self.tr('Live update export route (default)'))), ('__subtitle2__', CfgSubtitle(self.tr("Milling"))), ('split_line_segments', CfgCheckBox(self.tr('Split line segments (default)'))), ('automatic_cutter_compensation', CfgCheckBox(self.tr('Automatic cutter compensation (default)'))), ('machine_type', CfgComboBox(self.tr('Machine type (default):'))), ('tool_units', CfgComboBox(self.tr('Configuration values use the unit (restart needed):'))), ('__subtitle3__', CfgSubtitle(self.tr("Output"))), ('write_to_stdout', CfgCheckBox(self.tr('Export the G-Code to stdout (instead of a file)'))) ])), ('Axis_letters', OrderedDict([ ('__section_title__', self.tr("Machine config")), ('__subtitle__', CfgSubtitle(self.tr("Axes' identifiers"))), ('ax1_letter', CfgLineEdit(self.tr('First axis:'))), ('ax2_letter', CfgLineEdit(self.tr('Second axis:'))), ('ax3_letter', CfgLineEdit(self.tr('Third axis:'))) ])), ('Plane_Coordinates', OrderedDict([ ('__section_title__', self.tr("Machine config")), ('__subtitle__', CfgSubtitle(self.tr("Start and end's coordinate and scaling standard multiplier"))), ('axis1_start_end', CfgDoubleSpinBox(self.tr("First axis start/end coordiante:"), coordinate_unit)), ('axis2_start_end', CfgDoubleSpinBox(self.tr("Second axis start/end coordinate:"), coordinate_unit)), ('std_scale', CfgDoubleSpinBox(self.tr("Scale first and second axis:"))) ])), ('Depth_Coordinates', OrderedDict([ ('__section_title__', self.tr("Machine config")), ('__subtitle__', CfgSubtitle(self.tr("Third axis' defaults"))), ('axis3_retract', CfgDoubleSpinBox(self.tr("Retraction coordinate:"), coordinate_unit)), ('axis3_safe_margin', CfgDoubleSpinBox(self.tr("Safety margin:"), coordinate_unit)), ('axis3_start_mill_depth', CfgDoubleSpinBox(self.tr("Workpiece origin coordinate:"), coordinate_unit)), ('axis3_slice_depth', CfgDoubleSpinBox(self.tr("Slice depth:"), coordinate_unit)), ('axis3_mill_depth', CfgDoubleSpinBox(self.tr("Final mill depth:"), coordinate_unit)) ])), ('Feed_Rates', OrderedDict([ ('__section_title__', self.tr("Machine config")), ('__subtitle__', CfgSubtitle(self.tr("G1 feed rates"))), ('f_g1_plane', CfgDoubleSpinBox(self.tr('First and second axis (2D plane):'), speed_unit)), ('f_g1_depth', CfgDoubleSpinBox(self.tr('Third axis:'), speed_unit)) ])), ('Cutter_Compensation', OrderedDict([ ('__section_title__', self.tr("Output settings")), ('__subtitle__', CfgSubtitle(self.tr("Cutter compensation"))), ('done_by_machine', CfgCheckBox(self.tr('Cutter compensation is done by machine (check box if machine reconizes G41 and G42 commands / uncheck otherwise. This also disables pocket milling.)'))) ])), ('Drag_Knife_Options', OrderedDict([ ('__section_title__', self.tr("Output settings")), ('__subtitle__', CfgSubtitle(self.tr("Drag Knife options"))), ('drag_angle', CfgDoubleSpinBox(self.tr('Retract to drag depth ("Third axis slice depth") if angle exceeds:'), u'°'))#u for unicode ])), ('Route_Optimisation', OrderedDict([ ('__section_title__', self.tr("Output settings")), ('default_TSP', CfgCheckBox(self.tr("By default enable the TSP optimization for ordering shapes (TSP = Travelling Salesman Problem)"))), ('__subtitle__', CfgSubtitle(self.tr("TSP optimizer"))), ('TSP_shape_order', CfgComboBox(self.tr('Optimizer behaviour:'))), ('mutation_rate', CfgDoubleSpinBox(self.tr('Mutation rate:'))), ('max_population', CfgSpinBox(self.tr('Max population:'))), ('max_iterations', CfgSpinBox(self.tr('Max iterations:'))), ('begin_art', CfgComboBox(self.tr('Starting point:'))) ])), ('Import_Parameters', OrderedDict([ ('__section_title__', self.tr("Output settings")), ('point_tolerance', CfgDoubleSpinBox(self.tr('DXF default import point tolerance:'), '', None, None, 5)), ('spline_check', CfgSpinBox(self.tr('DXF import spline check:'))), ('fitting_tolerance', CfgDoubleSpinBox(self.tr('DXF default import fit tolerance:'), '', None, None, 5)), ('insert_at_block_layer', CfgCheckBox(self.tr('insert elements which are part of a block to layer where the block is inserted'))) ])), ('Layer_Options', OrderedDict([ ('__section_title__', self.tr("Automatic tool config")), ('id_float_separator', CfgLineEdit(self.tr('Separator between identifier and value:'))), ('__subtitle__', CfgSubtitle(self.tr("Parameters' identifiers"))), ('mill_depth_identifiers', CfgListEdit(self.tr('Final mill depth:'), ',')), ('slice_depth_identifiers', CfgListEdit(self.tr('Infeed depth:'), ',')), ('start_mill_depth_identifiers', CfgListEdit(self.tr('Workpiece top:'), ',')), ('retract_identifiers', CfgListEdit(self.tr('Retraction area:'), ',')), ('safe_margin_identifiers', CfgListEdit(self.tr('Safety margin:'), ',')), ('f_g1_plane_identifiers', CfgListEdit(self.tr('G1 feed rate for first and second axis (2D plane):'), ',')), ('f_g1_depth_identifiers', CfgListEdit(self.tr('G1 feed rate for third axis:'), ',')), ('tool_nr_identifiers', CfgListEdit(self.tr('Tool number:'), ',')), ('tool_diameter_identifiers', CfgListEdit(self.tr('Tool diameter:'), ',')), ('spindle_speed_identifiers', CfgListEdit(self.tr('Spindle speed:'), ',')), ('start_radius_identifiers', CfgListEdit(self.tr('Start radius (cutter compensation):'), ',')) ])), ('Tool_Parameters', CfgTableToolParameters(self.tr('Define the tools here:'))), ('Custom_Actions', CfgTableCustomActions(self.tr('Define here custom GCODE that can be inserted anywhere in the program:'))), ('Logging', OrderedDict([ ('__section_title__', self.tr("Software config")), ('logfile', CfgLineEdit(self.tr('File used for logging (restart needed):'))), ('console_loglevel', CfgComboBox(self.tr('On stderr console log messages with importance minimal to level (restart needed):'))), ('file_loglevel', CfgComboBox(self.tr('For log-file log messages with importance minimal to level (restart needed):'))), ('window_loglevel', CfgComboBox(self.tr('For message box log messages with importance minimal to level (restart needed):'))) ])) ]) return cfg_widget_def def update_tool_values(self): """ update the tool default values depending on the unit of the drawing """ if self.tool_units_metric != self.metric: scale = 1/25.4 if self.metric == 0 else 25.4 for key in self.vars.Plane_Coordinates: self.vars.Plane_Coordinates[key] *= scale for key in self.vars.Depth_Coordinates: self.vars.Depth_Coordinates[key] *= scale for key in self.vars.Feed_Rates: self.vars.Feed_Rates[key] *= scale for tool in self.vars.Tool_Parameters: self.vars.Tool_Parameters[tool]['diameter'] *= scale self.vars.Tool_Parameters[tool]['start_radius'] *= scale self.tool_units_metric = self.metric class DictDotLookup(object): """ Creates objects that behave much like a dictionaries, but allow nested key access using object '.' (dot) lookups. """ def __init__(self, d): for k in d: if isinstance(d[k], dict): self.__dict__[k] = DictDotLookup(d[k]) elif isinstance(d[k], (list, tuple)): l = [] for v in d[k]: if isinstance(v, dict): l.append(DictDotLookup(v)) else: l.append(v) self.__dict__[k] = l else: self.__dict__[k] = d[k] def __getitem__(self, name): if name in self.__dict__: return self.__dict__[name] def __setitem__(self, name, value): if name in self.__dict__: self.__dict__[name] = value def __iter__(self): return iter(self.__dict__.keys()) def __repr__(self): return pprint.pformat(self.__dict__) # if __name__ == '__main__': # cfg_data = eval("""{ # 'foo' : { # 'bar' : { # 'tdata' : ( # {'baz' : 1 }, # {'baz' : 2 }, # {'baz' : 3 }, # ), # }, # }, # 'quux' : False, # }""") # # cfg = DictDotLookup(cfg_data) # # # iterate # for k, v in cfg.__iter__(): #foo.bar.iteritems(): # print k, " = ", v # # print "cfg=", cfg # # # Standard nested dictionary lookup. # print 'normal lookup :', cfg['foo']['bar']['tdata'][0]['baz'] # # # Dot-style nested lookup. # print 'dot lookup :', cfg.foo.bar.tdata[0].baz # # print "qux=", cfg.quux # cfg.quux = '123' # print "qux=", cfg.quux # # del cfg.foo.bar # cfg.foo.bar = 4711 # print 'dot lookup :', cfg.foo.bar #.tdata[0].baz dxf2gcode-20240509/dxf2gcode/globals/__init__.py0000664000000000000000000000000113413457762017732 0ustar rootroot dxf2gcode-20240509/dxf2gcode/dxfimport/0000755000000000000000000000000014617100260016202 5ustar rootrootdxf2gcode-20240509/dxf2gcode/dxfimport/spline_convert.py0000644000000000000000000007465514617065372021645 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Vinzenz Schulz # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from __future__ import division from math import atan2 import logging from dxf2gcode.core.point import Point from dxf2gcode.core.arcgeo import ArcGeo from dxf2gcode.core.linegeo import LineGeo from dxf2gcode.dxfimport.biarc import BiarcClass logger = logging.getLogger("DxfImport.SplineConvert") debug_on = False class Spline2Arcs: def __init__(self, degree=0, Knots=[], Weights=[], CPoints=[], tol=0.01, check=1): # Max Abweichung f�r die Biarc Kurve self.epsilon = tol self.epsilon_high = self.epsilon * 0.1 self.segments = 50 # NURBS Klasse initialisieren self.NURBS = NURBSClass(degree=degree, Knots=Knots, CPoints=CPoints, Weights=Weights) # �berpr�fen der NURBS Parameter �berpr�fung der NURBS Kontrollpunkte ob welche doppelt # Innerhalb der gegebenen Tolerans sind (=> Ignorieren) self.NURBS.check_NURBSParameters(tol, check) if debug_on: logger.debug(self.NURBS) logger.debug("Next High accurancy BiarCurve") logger.debug(self.NURBS) # High Accuracy Biarc fitting of NURBS BiarcCurves, self.PtsVec = self.calc_high_accurancy_BiarcCurve() logger.debug("Next Analyse and Compress") # Komprimieren der Biarc und der Linien self.Curve = self.analyse_and_compress(BiarcCurves) def analyse_and_compress(self, BiarcCurves): """ analyse_and_compess() - Compress all to one curve """ Curves = [] for BiarcCurve in BiarcCurves: Curve = [] for Biarc in BiarcCurve: for geo in Biarc.geos: Curve.append(geo) # print ("Vor Linie: Elemente: %0.0f" %len(Curve)) Curve = self.compress_lines(Curve) # print ("Nach Linie: Elemente: %0.0f" %len(Curve)) Curve = self.compress_biarcs(Curve) # print ("Nach Biarc: Elemente: %0.0f" %len(Curve)) Curves += Curve return Curves def compress_biarcs(self, Curves): """ compress_biarcs() """ NewCurve = [] tau = self.epsilon Pts = [] # Schleife f�r die Anzahl der Geometrirs for geo in Curves: NewCurve.append(geo) # Wenn die L�nge mindestens 3 sind if len(NewCurve) >= 3: # Steigende Spirale if isinstance(NewCurve[-3], ArcGeo)\ and isinstance(NewCurve[-2], ArcGeo)\ and isinstance(NewCurve[-1], ArcGeo): Pts.append(geo.Pe) if NewCurve[-3].r <= NewCurve[-2].r <= NewCurve[-1].r\ and NewCurve[-3].ext * NewCurve[-2].ext >= 0.0\ and NewCurve[-2].ext * NewCurve[-1].ext >= 0.0: # print "Increasing" anz = len(NewCurve) triarc = NewCurve[anz - 3:anz] Arc0, Arc1 = self.fit_triac_by_inc_biarc(triarc, tau) diff = self.check_diff_to_pts(Pts, Arc0, Arc1) # �berpr�fen ob es in Toleranz liegt try: if max(diff) < self.epsilon: tau = self.calc_active_tolerance_inc(self.epsilon, triarc, Arc0, Arc1) del NewCurve[anz - 3:anz] NewCurve.append(Arc0) NewCurve.append(Arc1) except: # TODO remove except pass elif NewCurve[-3].r > NewCurve[-2].r > NewCurve[-1].r\ and NewCurve[-3].ext * NewCurve[-2].ext >= 0.0\ and NewCurve[-2].ext * NewCurve[-1].ext >= 0.0: # print "Decreasing" anz = len(NewCurve) triarc = NewCurve[anz - 3:anz] Arc0, Arc1 = self.fit_triac_by_dec_biarc(triarc, tau) diff = self.check_diff_to_pts(Pts, Arc1, Arc0) try: if max(diff) < self.epsilon: tau = self.calc_active_tolerance_dec(self.epsilon, triarc, Arc0, Arc1) del NewCurve[anz - 3:anz] NewCurve.append(Arc0) NewCurve.append(Arc1) except: # TODO remove except pass else: Pts = [] return NewCurve def calc_active_tolerance_inc(self, tau, arc, Arc0, Arc1): """ calc_active_tolerance_inc() """ V0 = (arc[0].O - arc[0].Ps).unit_vector() Vb = (Arc1.O - Arc1.Ps).unit_vector() t_ = (2 * arc[0].r * tau + pow(tau, 2)) / \ (2 * (arc[0].r + (arc[0].r + tau) * V0 * Vb)) te = arc[0].r + t_ - (Arc0.Pe - (arc[0].O + (t_ * V0))).length() tm = arc[1].O.distance(Arc0.Pe) - abs(arc[1].r) if tm < 0.0: tf = tau else: tf = tau - tm # print("tm: %0.3f; te: %0.3f; tau: %0.3f" %(tm,te,tau)) epsilon = min([te, tf, tau]) if epsilon < 0.0: epsilon = 0.0 return epsilon def calc_active_tolerance_dec(self, tau, arc, Arc0, Arc1): """ calc_active_tolerance_dec() """ # TODO why does it differ with calc_active_tolerance_inc # V0 = (arc[2].O - arc[2].Ps).unit_vector() # Vb = (Arc1.O - Arc1.Ps).unit_vector() # t_ = (2 * arc[2].r * tau + pow(tau, 2)) / \ # (2 * (arc[2].r + (arc[2].r + tau) * V0 * Vb)) # te = arc[2].r + t_ - (Arc0.Pe - (arc[2].O + (t_ * V0))).length() te = tau tm = -arc[1].O.distance(Arc0.Pe) + abs(arc[1].r) if tm < 0.0: tf = tau else: tf = tau - tm # print("tm: %0.3f; tf: %0.3f; te: %0.3f; tau: %0.3f" %(tm,tf,te,tau)) epsilon = min([te, tf, tau]) if epsilon < 0.0: epsilon = 0.0 return epsilon def fit_triac_by_inc_biarc(self, arc, eps): """ fit_triac_by_inc_biarc() """ # Errechnen von tb V0 = (arc[0].O - arc[0].Ps).unit_vector() V2 = (arc[2].O - arc[2].Pe).unit_vector() # Errechnen der Hilfgr�ssen t0 = (arc[2].r - arc[0].r) D = (arc[2].O - arc[0].O) X0 = (t0 * t0) - (D * D) X1 = 2 * (D * V0 - t0) Y0 = 2 * (t0 - D * V2) Y1 = 2 * (V0 * V2 - 1) # Errechnen von tb tb = (pow((arc[1].r - arc[0].r + eps), 2) - ((arc[1].O - arc[0].O) * (arc[1].O - arc[0].O))) / \ (2 * (arc[1].r - arc[0].r + eps + (arc[1].O - arc[0].O) * V0)) # Errechnen von tc tc = (pow(t0, 2) - (D * D)) / (2 * (t0 - D * V0)) # Auswahl von t t = min([tb, tc]) # Errechnen von u u = (X0 + X1 * t) / (Y0 + Y1 * t) # Errechnen der neuen Arcs Oa = arc[0].O + t * V0 ra = arc[0].r + t Ob = arc[2].O - u * V2 rb = arc[2].r - u Vn = (Oa - Ob).unit_vector() Pn = Oa + ra * Vn Arc0 = ArcGeo(Ps=arc[0].Ps, Pe=Pn, O=Oa, r=ra, direction=arc[0].ext) Arc1 = ArcGeo(Ps=Pn, Pe=arc[2].Pe, O=Ob, r=rb, direction=arc[2].ext) # print('\nAlte') # print arc[0] # print arc[1] # print arc[2] # print("tb: %0.3f; tc: %0.3f; t: %0.3f; u: %0.3f" %(tb,tc,t,u)) # print 'Neue' # print Arc0 # print Arc1 return Arc0, Arc1 def fit_triac_by_dec_biarc(self, arc, eps): """ fit_triac_by_dec_biarc() """ V0 = (arc[2].O - arc[2].Pe).unit_vector() V2 = (arc[0].O - arc[0].Ps).unit_vector() # Errechnen der Hilfgr�ssen t0 = (arc[0].r - arc[2].r) D = (arc[0].O - arc[2].O) X0 = (t0 * t0) - (D * D) X1 = 2 * (D * V0 - t0) Y0 = 2 * (t0 - D * V2) Y1 = 2 * (V0 * V2 - 1) # Errechnen von tb tb = (pow((arc[1].r - arc[2].r + eps), 2) - ((arc[1].O - arc[2].O) * (arc[1].O - arc[2].O))) / \ (2 * (arc[1].r - arc[2].r + eps + (arc[1].O - arc[2].O) * V0)) # Errechnen von tc tc = (pow(t0, 2) - (D * D)) / (2 * (t0 - D * V0)) # Auswahl von t t = min([tb, tc]) # Errechnen von u u = (X0 + X1 * t) / (Y0 + Y1 * t) # Errechnen der neuen Arcs Oa = arc[0].O - u * V2 ra = arc[0].r - u Ob = arc[2].O + t * V0 rb = arc[2].r + t Vn = (Ob - Oa).unit_vector() Pn = Ob + rb * Vn Arc0 = ArcGeo(Ps=arc[0].Ps, Pe=Pn, O=Oa, r=ra, \ s_ang=Oa.norm_angle(arc[0].Ps), e_ang=Oa.norm_angle(Pn), direction=arc[0].ext) Arc1 = ArcGeo(Ps=Pn, Pe=arc[2].Pe, O=Ob, r=rb, \ s_ang=Ob.norm_angle(Pn), e_ang=Ob.norm_angle(arc[2].Pe), direction=arc[2].ext) return Arc0, Arc1 def check_diff_to_pts(self, Pts, Arc0, Arc1): """ check_diff_to_pts() """ diff = [] for Pt in Pts: w0 = Arc0.O.norm_angle(Pt) w1 = Arc1.O.norm_angle(Pt) if (w0 >= min([Arc0.s_ang, Arc0.e_ang]))and\ (w0 <= max([Arc0.s_ang, Arc0.e_ang])): diff.append(abs(Arc0.O.distance(Pt) - abs(Arc0.r))) elif (w1 >= min([Arc1.s_ang, Arc1.e_ang]))and\ (w1 <= max([Arc1.s_ang, Arc1.e_ang])): diff.append(abs(Arc1.O.distance(Pt) - abs(Arc1.r))) else: del Pts[Pts.index(Pt)] return diff def compress_lines(self, Curve): """ compress_lines() """ NewCurve = [] Pts = [] for geo in Curve: NewCurve.append(geo) anz = len(NewCurve) if anz >= 2: # Wenn Geo eine Linie ist anh�ngen und �berpr�fen if isinstance(NewCurve[-2], LineGeo) and isinstance(NewCurve[-1], LineGeo): Pts.append(geo.Pe) JointLine = LineGeo(NewCurve[-2].Ps, NewCurve[-1].Pe) # �berpr�fung der Abweichung res = [] for Point in Pts: res.append(JointLine.distance_l_p(Point)) # print res # Wenn die Abweichung OK ist Vorheriges anh�ngen if max(res) < self.epsilon: anz = len(NewCurve) del NewCurve[anz - 2:anz] NewCurve.append(JointLine) points = [geo.Pe] # Wenn nicht nicht anh�ngen und Pts zur�cksetzen else: Pts = [geo.Pe] # Wenn es eines eine andere Geometrie als eine Linie ist else: Pts = [] return NewCurve def calc_high_accurancy_BiarcCurve(self): """ calc_high_accurancy_BiarcCurve() """ # Berechnen der zu Berechnenden getrennten Abschnitte u_sections = self.calc_u_sections(self.NURBS.Knots, self.NURBS.ignor, self.NURBS.knt_m_change[:]) # Step muss ungerade sein, sonst gibts ein Rundungsproblem um 1 self.max_step = float((self.NURBS.Knots[-1] - self.NURBS.Knots[0] )/ (float(self.segments))) # Berechnen des ersten Biarcs f�rs Fitting BiarcCurves = [] PtsVecs = [] # Schleife f�r die einzelnen Abschnitte for u_sect in u_sections: if debug_on: logger.debug("Calculation Biarc Section: %s" % u_sect) BiarcCurve, PtsVec = self.calc_Biarc_section(u_sect, self.epsilon, self.epsilon_high) BiarcCurves.append(BiarcCurve) PtsVecs.append(PtsVec) return BiarcCurves, PtsVecs def calc_u_sections(self, Knots, ignor, unsteady): """ calc_u_sections() """ # Initialisieren u_sections = [] # Abfrage ob bereits der Anfang ignoriert wird # u_beg = Knots[0] u_end = Knots[0] ig_nr = 0 # Schleife bis u_end==Knots[0] while u_end < Knots[-1]: u_beg = u_end # Wenn Ignor == Start dann Start = Ende von Ignor if len(ignor) > ig_nr: if u_beg == ignor[ig_nr][0]: u_beg = ignor[ig_nr][1] ig_nr += 1 # L�schen der unsteadys bis gr��er als u_beg while (len(unsteady) > 0)and(unsteady[0] <= u_beg): del(unsteady[0]) # Wenn Ignor noch mehr beiinhaltet dann Ignor Anfang = Ende if len(ignor) > ig_nr: u_end = ignor[ig_nr][0] else: u_end = Knots[-1] if len(unsteady) > 0 and unsteady[0] < u_end: u_end = unsteady[0] del(unsteady[0]) # Solange u_beg nicht das Ende ist anh�ngen if u_beg != u_end: u_sections.append([u_beg, u_end]) return u_sections def calc_Biarc_section(self, u_sect, nom_tol, max_tol): """ calc_Biarc_section() """ #max_tol=0.1 #print(max_tol) min_u = 1e-10 BiarcCurve = [] cur_step = self.max_step u = u_sect[0] + min_u logger.debug("max_step: %0.5e" ,self.max_step) logger.debug("u_sect: %s" ,u_sect) PtsVec = [self.NURBS.NURBS_evaluate(n=1, u=u)] step = 0 # Berechnen bis alle Biarcs berechnet sind while u < u_sect[-1] - min_u: step += 1 # logger.debug(step) u += cur_step # Begrenzung von u auf den Maximalwert if u > u_sect[-1]: cur_step = u_sect[-1] - (u - cur_step) - min_u u = u_sect[-1] - min_u logger.debug("Limit u to: %0.5e" ,u) logger.debug("u: %0.5e", u ) PtVec = self.NURBS.NURBS_evaluate(n=1, u=u) # Aus den letzten 2 Punkten den n�chsten Biarc berechnen Biarc = (BiarcClass(PtsVec[-1][0], PtsVec[-1][1], PtVec[0], PtVec[1], nom_tol * 0.5)) if Biarc.shape == "Zero": logger.debug("zero, cur_step: %0.5e" %cur_step) if cur_step<=min_u: cur_step=min_u else: self.cur_step = min([cur_step * 2, self.max_step]) #cur_step = min([cur_step * 2]) elif Biarc.shape == "LineGeo": logger.debug("LineGeo") BiarcCurve.append(Biarc) cur_step = min([cur_step * 2, self.max_step]) PtsVec.append(PtVec) else: if self.check_biarc_fitting_tolerance(Biarc, max_tol, u - cur_step, u): logger.debug("fit1") PtsVec.append(PtVec) BiarcCurve.append(Biarc) cur_step = min([cur_step / 0.7, self.max_step]) else: logger.debug("else") u -= cur_step cur_step *= 0.7 # print cur_step if step > 10000: raise ValueError("Iterations above 10000 reduce tolerance") return BiarcCurve, PtsVec def check_biarc_fitting_tolerance(self, Biarc, epsilon, u0, u1): """ check_biarc_fitting_tolerance() """ check_step = (u1 - u0) / 5 check_u = [] check_Pts = [] fit_error = [] for i in range(1, 5): check_u.append(u0 + check_step * i) check_Pts.append(self.NURBS.NURBS_evaluate(n=0, u=check_u[-1])) fit_error.append(Biarc.get_biarc_fitting_error(check_Pts[-1])) # if debug_on: if 0: logger.debug('u0: %s' % u0) logger.debug('u1: %s' % u1) logger.debug('Biarc: %s' % Biarc) logger.debug(check_Pts) logger.debug('check_Pts: %s %s %s %s' % (check_Pts[0], check_Pts[1], check_Pts[2], check_Pts[3])) logger.debug('fit_error: %s' % fit_error) if max(fit_error) >= epsilon: return 0 else: return 1 class NURBSClass: def __init__(self, degree=0, Knots=[], Weights=None, CPoints=None): self.degree = degree # Spline degree self.Knots = Knots # Knoten Vektor self.CPoints = CPoints # Kontrollpunkte des Splines [2D] self.Weights = Weights # Gewichtung der Einzelnen Punkte # Initialisieren von errechneten Gr��en self.HCPts = [] # Homogenepunkte Vektoren [3D] # Punkte in Homogene Punkte umwandeln self.CPts_2_HCPts() # Erstellen der BSplineKlasse zur Berechnung der Homogenen Punkte self.BSpline = BSplineClass(degree=self.degree, Knots=self.Knots, CPts=self.HCPts) def __repr__(self): """ Standard method to print the object @return: A string """ return "\ndegree: %s" % self.degree +\ "\nKnots: %s" % self.Knots +\ "\nCPoints: %s" % self.CPoints +\ "\nWeights: %s" % self.Weights +\ "\nHCPts: %s" % self.HCPts def check_NURBSParameters(self, tol=1e-6, check=1): """ check_NURBSParameters() """ # �berpr�fen des Knotenvektors # Suchen von mehrfachen Knotenpunkte (Anzahl �ber degree+1 => Fehler?!) knt_nr = 1 knt_vec = [[self.Knots[0]]] self.knt_m_change = [] self.ignor = [] if check == 1 or check == 3: while knt_nr < len(self.Knots): if self.Knots[knt_nr] == knt_vec[-1][-1]: knt_vec[-1].append(self.Knots[knt_nr]) else: knt_vec.append([self.Knots[knt_nr]]) knt_nr += 1 logger.debug("Checking Knots: %s" %knt_vec) for knt_spts in knt_vec: if len(knt_spts) > self.degree + 1: raise ValueError("Same Knots Nr. bigger then degree+1") # �berpr�fen der Steigungdifferenz vor und nach dem Punkt wenn Mehrfachknoten elif len(knt_spts) >= self.degree and\ knt_vec[0][0] < knt_spts[-1] < knt_vec[-1][-1]: temp, tangent0 = self.NURBS_evaluate(n=1, u=knt_spts[0] - 1e-12) temp, tangent1 = self.NURBS_evaluate(n=1, u=knt_spts[0]) if abs(tangent0 - tangent1) > 1e-6: self.knt_m_change.append(knt_spts[0]) logger.debug("Nots with change of direction: %s" %self.knt_m_change) # �berpr�fen der Kontrollpunkte # Suchen von mehrachen Kontrollpunkten (Anzahl �ber degree+2 => nicht errechnen if check == 2 or check == 3: ctlpt_nr = 0 ctlpt_vec = [[ctlpt_nr]] while ctlpt_nr < len(self.CPoints) - 1: ctlpt_nr += 1 if self.CPoints[ctlpt_nr].within_tol(self.CPoints[ctlpt_vec[-1][-1]], tol): ctlpt_vec[-1].append(ctlpt_nr) else: ctlpt_vec.append([ctlpt_nr]) for same_ctlpt in ctlpt_vec: if len(same_ctlpt) > self.degree + 1: self.ignor.append([self.Knots[same_ctlpt[0] + self.degree // 2], self.Knots[same_ctlpt[-1] + self.degree // 2]]) # raise ValueError, "Same Controlpoints Nr. bigger then degree+1" # logger.debug("Same Controlpoints Nr. bigger then degree+2") for ignor in self.ignor: logger.debug("Ignoring u's between u: %s and u: %s" % (ignor[0], ignor[1])) if len(self.knt_m_change): logger.debug("Non steady Angles between Knots: %s" % self.knt_m_change) def calc_curve(self, n=0, cpts_nr=20): """ calc_curve() Berechnen von eine Anzahl gleichm�ssig verteilter Punkte und bis zur ersten Ableitung """ # Anfangswerte f�r Step und u u = 0; Points = []; tang = [] step = self.Knots[-1] / (cpts_nr - 1) while u <= 1.0: Pt, tangent = self.NURBS_evaluate(n=n, u=u) Points.append(Pt) # F�r die erste Ableitung wird den Winkel der tangente errechnet if n >= 1: tang.append(tangent) u += step if n >= 1: return Points, tang else: return Points def NURBS_evaluate(self, n=0, u=0): """ Berechnen eines Punkts des NURBS und der ersten Ableitung """ # Errechnen der korrigierten u's # cor_u=self.correct_u(u) # logger.debug("Bin da") # Errechnen der Homogenen Punkte bis zur n ten Ableitung HPt = self.BSpline.bspline_ders_evaluate(n=n, u=u) # logger.debug(HPt) # Punkt wieder in Normal Koordinaten zur�ck transformieren Point = self.HPt_2_Pt(HPt[0]) # logger.debug(HPt) # Errechnen der ersten Ableitung wenn n>0 als Richtungsvektor dPt = [] if n > 0: # w(u)*A'(u)-w'(u)*A(u) # dPt=--------------------- # w(u)^2 for j in range(len(HPt[0]) - 1): dPt.append((HPt[0][-1] * HPt[1][j] - HPt[1][-1] * HPt[0][j]) / pow(HPt[0][-1], 2)) # Berechnen des Winkels des Vektors tangent = atan2(dPt[1], dPt[0]) return Point, tangent else: return Point def CPts_2_HCPts(self): """ Umwandeln der NURBS Kontrollpunkte und Weight in einen Homogenen Vektor """ for P_nr in range(len(self.CPoints)): HCPtVec = [self.CPoints[P_nr].x * self.Weights[P_nr], \ self.CPoints[P_nr].y * self.Weights[P_nr], \ self.Weights[P_nr]] self.HCPts.append(HCPtVec[:]) def HPt_2_Pt(self, HPt): """ Umwandeln eines Homogenen PunktVektor in einen Punkt """ return Point(x=HPt[0] / HPt[-1], y=HPt[1] / HPt[-1]) class BSplineClass: def __init__(self, degree=0, Knots=[], CPts=[]): self.degree = degree self.Knots = Knots self.CPts = CPts self.Knots_len = len(self.Knots) self.CPt_len = len(self.CPts[0]) self.CPts_len = len(self.CPts) # Eingangspr�fung, ober KnotenAnzahl usw. passt if self.Knots_len < self.degree + 1: raise ValueError("degree greater than number of control points.") if self.Knots_len != (self.CPts_len + self.degree + 1): logger.error("shall be: %s" % (self.CPts_len + self.degree + 1)) logger.error("is: %s" % self.Knots_len) raise ValueError("Knot/Control Point/degree number error.") def calc_curve(self, n=0, cpts_nr=20): """ Berechnen von eine Anzahl gleichm�ssig verteilter Punkte bis zur n-ten Ableitung """ # Anfangswerte f�r Step und u u = 0 step = float(self.Knots[-1]) / (cpts_nr - 1) Points = [] # Wenn die erste Ableitung oder h�her errechnet wird die ersten # Ableitung in dem tan als Winkel in rad gespeichert tang = [] while u <= self.Knots[-1]: CK = self.bspline_ders_evaluate(n=n, u=u) # Den Punkt in einem Punkt List abspeichern Points.append(Point(x=CK[0][0], y=CK[0][1])) # F�r die erste Ableitung wird den Winkel der tangente errechnet if n >= 1: tang.append(atan2(CK[1][1], CK[1][0])) u += step return Points, tang def bspline_ders_evaluate(self, n=0, u=0): """ Modified Version of Algorithm A3.2 from "THE NURBS BOOK" pg.93 """ # Berechnung der Position im Knotenvektor span = self.findspan(u) # Berechnen der Basis Funktion bis zur n ten Ableitung am Punkt u dN = self.ders_basis_functions(span, u, n) p = self.degree du = min(n, p) # logger.debug(du) CK = [] dPts = [] for i in range(self.CPt_len): dPts.append(0.0) for k in range(n + 1): CK.append(dPts[:]) for k in range(du + 1): for j in range(p + 1): for i in range(self.CPt_len): CK[k][i] += dN[k][j] * self.CPts[span - p + j][i] return CK def findspan(self, u): """ Algorithm A2.1 from "THE NURBS BOOK" pg.68 """ # logger.debug(u) # logger.debug(self.degree) # logger.debug(self.Knots) # Spezialfall wenn der Wert==Endpunkt ist if u == self.Knots[-1]: return self.Knots_len - self.degree - 2 # self.Knots_len #-1 # Bin�re Suche starten # (Der Interval von low zu high wird immer halbiert bis # wert zwischen im Intervall von Knots[mid:mi+1] liegt) low = self.degree-1 high = self.Knots_len mid = (low + high) // 2 counter = 1 while u < self.Knots[mid] or u >= self.Knots[mid + 1]: counter += 1 if u < self.Knots[mid]: high = mid else: low = mid mid = (low + high) // 2 if debug_on: logger.debug("high: %s; low: %s; mid: %s" % (high, low, mid)) logger.debug("u: %s; self.Knots[mid]: %s; self.Knots[mid+1]: %s" % (u, self.Knots[mid], self.Knots[mid + 1])) if counter > 100: raise ValueError("Iterations above 100 cannot find span") return mid def ders_basis_functions(self, span, u, n): """ Algorithm A2.3 from "THE NURBS BOOK" pg.72 """ d = self.degree # initialisation of the a Matrix a = [] zeile = [] for j in range(d + 1): zeile.append(0.0) a.append(zeile[:]); a.append(zeile[:]) # initialisation of the ndu Matrix ndu = [] zeile = [] for i in range(d + 1): zeile.append(0.0) for j in range(d + 1): ndu.append(zeile[:]) # initialisation of the ders Matrix ders = [] zeile = [] for i in range(d + 1): zeile.append(0.0) for j in range(n + 1): ders.append(zeile[:]) ndu[0][0] = 1.0 left = [0] right = [0] for j in range(1, d + 1): # print('komisch span:%s, j:%s, u:%s, gesamt: %s' %(span,j,u,span+1-j)) left.append(u - self.Knots[span + 1 - j]) right.append(self.Knots[span + j] - u) saved = 0.0 for r in range(j): # Lower Triangle ndu[j][r] = right[r + 1] + left[j - r] temp = ndu[r][j - 1] / ndu[j][r] # Upper Triangle ndu[r][j] = saved + right[r + 1] * temp saved = left[j - r] * temp ndu[j][j] = saved # Ergebniss aus S71 # print("Ndu: %s" %ndu) # Load the basis functions for j in range(d + 1): ders[0][j] = ndu[j][d] # This section computes the derivatives (Eq. [2.9]) for r in range(d + 1): # Loop over function index s1 = 0; s2 = 1 # Alternate rows in array a a[0][0] = 1.0 for k in range(1, n + 1): der = 0.0 rk = r - k; pk = d - k # print("\nrk: %s" %rk), print("pk: %s" %pk), print("s1: %s" %s1) # print("s2: %s" %s2), print("r: %s" %r) ,print("k: %s" %k) # print("j: %s" %j) # wenn r-k>0 (Linker Term) und somit if r >= k: a[s2][0] = a[s1][0] / ndu[pk + 1][rk] # 2te: a[0][0] 1/ # print("a[%s][0]=a[%s][0](%s)/ndu[%s][%s](%s)=%s" \ # %(s2,s1,a[s1][0],pk+1,rk,ndu[pk+1][rk],a[s2][0])) der = a[s2][0] * ndu[rk][pk] if rk >= -1: j1 = 1 else: j1 = -rk if r - 1 <= pk: j2 = k - 1 else: j2 = d - r # Hier geht er bei der ersten Ableitung gar nicht rein # print("j1:%s j2:%s" %(j1,j2)) for j in range(j1, j2 + 1): a[s2][j] = (a[s1][j] - a[s1][j - 1]) / ndu[pk + 1][rk + j] der += a[s2][j] * ndu[rk + j][pk] if(r <= pk): a[s2][k] = -a[s1][k - 1] / ndu[pk + 1][r] # 1/ u(i+p+1)-u(i+1) der += a[s2][k] * ndu[r][pk] # N(i+1)(p-1) # print("a[%s][%s]=-a[%s][%s](%s)/ndu[%s][%s](%s)=%s" \ # %(s2,k,s1,k-1,a[s1][k-1],pk+1,r,ndu[pk+1][r],a[s2][k])) # print("ndu[%s][%s]=%s" %(r,pk,ndu[r][pk])) ders[k][r] = der # print("ders[%s][%s]=%s" %(k,r,der)) j = s1; s1 = s2; s2 = j # Switch rows # Multiply through by the correct factors r = d for k in range(1, n + 1): for j in range(d + 1): ders[k][j] *= r r *= (d - k) return ders dxf2gcode-20240509/dxf2gcode/dxfimport/importer.py0000664000000000000000000010244514011526166020432 0ustar rootroot# -*- coding: utf-8 -*- from __future__ import absolute_import from __future__ import division ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from copy import deepcopy, copy import logging from dxf2gcode.core.point import Point from dxf2gcode.dxfimport.classes import ContourClass from dxf2gcode.dxfimport.geoent_arc import GeoentArc from dxf2gcode.dxfimport.geoent_circle import GeoentCircle from dxf2gcode.dxfimport.geoent_insert import GeoentInsert from dxf2gcode.dxfimport.geoent_line import GeoentLine from dxf2gcode.dxfimport.geoent_polyline import GeoentPolyline from dxf2gcode.dxfimport.geoent_spline import GeoentSpline from dxf2gcode.dxfimport.geoent_ellipse import GeoentEllipse from dxf2gcode.dxfimport.geoent_lwpolyline import GeoentLwPolyline from dxf2gcode.dxfimport.geoent_point import GeoentPoint from dxf2gcode.globals.helperfunctions import a2u import dxf2gcode.globals.globals as g import dxf2gcode.globals.constants as c from PyQt5.QtWidgets import QMessageBox from PyQt5 import QtCore logger = logging.getLogger("DxfImport.Import") class ReadDXF(QtCore.QObject): # Initialise the class def __init__(self, filename=None): QtCore.QObject.__init__(self) # Setting up logger # logger = g.logger.logger str_ = self.Read_File(filename) g.config.metric = self.Get_Unit(str_) g.config.update_tool_values() # Load the contour and store the values in the classes self.line_pairs = self.Get_Line_Pairs(str_) # Debug Informationen # logger.info(("\n\nFile has %0.0f Lines" % len(str_)), 1) # logger.info(("\nFile has %0.0f Linepairs" % self.line_pairs.nrs), 1) logger.info(self.tr("Reading DXF Structure")) sections_pos = self.Get_Sections_pos() self.layers = self.Read_Layers(sections_pos) blocks_pos = self.Get_Blocks_pos(sections_pos) self.blocks = self.Read_Blocks(blocks_pos) self.entities = self.Read_Entities(sections_pos) # Aufruf der Klasse um die Konturen zur suchen # Schleife f�r die Anzahl der Bl�cke und den Layern # Call the class to define the contours of search # Loop for the number of blocks and the layer for i in range(len(self.blocks.Entities)): # '\n' # print self.blocks.Entities[i] ent = self.blocks.Entities[i] logger.info((self.tr("Creating Contours of Block Nr: %i") %i) + " (%s)" % ent.Name) ent.cont = self.Get_Contour(ent) logger.info(self.tr("Creating Contours of Entities")) self.entities.cont = self.Get_Contour(self.entities) def tr(self, string_to_translate): """ Translate a string using the QCoreApplication translation framework @param: string_to_translate: a unicode string @return: the translated unicode string if it was possible to translate """ return str(QtCore.QCoreApplication.translate('ReadDXF', string_to_translate)) def Read_File(self, filename): """ Read_File() - Load the selected DXF files @param: filename: name of the file to load @return: file contents as a list of strings """ encodings = ['utf-8', 'cp1252', 'cp850'] last_exception = None for e in encodings: try: file_ = open(filename, 'r', encoding=e) str_ = file_.readlines() file_.close() return str_ except UnicodeDecodeError as ex: last_exception = ex logger.debug("Read_File: UnicodeDecodeError: {0}".format(ex)) pass # If that happens, please consider to extend the list of supported encodings. raise last_exception def Get_Unit(self, str): """ Get_Unit() - Get unit of measure English (Imperial) or Metric from DXF file Return 0 = Imperial, 1 = Metric """ measurement = None insunits = None for line in range(len(str) - 2): # Set drawing units: 0 = English; 1 = Metric # Metric will be treated as being in millimeters # English as inches if str[line].startswith("$MEASUREMENT"): measurement = int(str[line + 2].strip()) # Default drawing units for AutoCAD DesignCenter blocks: # 0 = Unitless; 1 = Inches; 2 = Feet; 3 = Miles; 4 = Millimeters; # 5 = Centimeters; 6 = Meters; 7 = Kilometers; 8 = Microinches; # 9 = Mils (thous); 10 = Yards; 11 = Angstroms; 12 = Nanometers; # 13 = Microns; 14 = Decimeters; 15 = Decameters; # 16 = Hectometers; 17 = Gigameters; 18 = Astronomical units; # 19 = Light years; 20 = Parsecs if str[line].startswith("$INSUNITS"): if int(str[line + 2].strip()) == 1: insunits = 0 elif int(str[line + 2].strip()) == 4: insunits = 1 if (measurement is not None) and (insunits is not None): break # Use INSUNITS if found, otherwise use MEASUREMENT if insunits is not None: return insunits elif measurement is not None: return measurement # Default: Metric return 1 # Convert the uploaded file into line pairs (code & Value). def Get_Line_Pairs(self, string): line = 0 line_pairs = dxflinepairsClass([]) # Start at the first SECTION while not string[line].startswith("SECTION"): line += 1 line -= 1 # Continue to the end if no error occurs. Otherwise abort with error try: while line + 1 < len(string): line_pairs.line_pair.append(dxflinepairClass(int(string[line].strip()), string[line + 1].strip())) line += 2 except ValueError: message = self.tr('Reading stopped at line %i.\n "%s" is not a valid code (number) - please, check/correct dxf file')\ % (line + 1, string[line].strip()) if g.quiet: logger.warning(message) else: QMessageBox.warning(g.window, self.tr("Warning reading linepairs"), message) line_pairs.nrs = len(line_pairs.line_pair) logger.debug(self.tr('Did read %i of linepairs from DXF') % line_pairs.nrs) return line_pairs # Search the sections in the DXF file to recognize Blocks. def Get_Sections_pos(self): """ Get_Sections_pos() """ sections = [] start = self.line_pairs.index_both(0, "SECTION", 0) # Wenn eine Gefunden wurde diese anh�ngen # If a has been found for this attach ??? while start is not None: # Wenn eine Gefunden wurde diese anh�ngen # If a has been found for this attach ??? sections.append(SectionClass(len(sections))) sections[-1].begin = start name_pos = self.line_pairs.index_code(2, start + 1) sections[-1].name = a2u(self.line_pairs.line_pair[name_pos].value) end = self.line_pairs.index_both(0, "ENDSEC", start + 1) # If section was not properly terminated if end is None: end = self.line_pairs.nrs - 1 sections[-1].end = end start = self.line_pairs.index_both(0, "SECTION", end) # g.logger.logger.info(("\n\nSections found:"), 1) # for sect in sections: # g.logger.logger.info(str(sect), 1) return sections # Search the TABLES section of the sections within this include LAYERS ??? def Read_Layers(self, section): """ Read_Layers() """ for sect_nr in range(len(section)): if section[sect_nr].name.startswith("TABLES"): # tables_section = section[sect_nr] break # If the DXF blocks has, read this??? layers = [] if 'tables_section' in vars(): tables_section = section[sect_nr] start = tables_section.begin while start is not None: start = self.line_pairs.index_both(0, "LAYER", start + 1, tables_section.end) if start is not None: start = self.line_pairs.index_code(2, start + 1) layers.append(LayerClass(len(layers))) layers[-1].name = a2u(self.line_pairs.line_pair[start].value) # g.logger.logger.info(("Layers found:"), 1) # for lay in layers: # g.logger.logger.info(str(lay), 1) return layers # Search the BLOCKS section within sections def Get_Blocks_pos(self, section): """ Get_Blocks_pos() """ for sect_nr in range(len(section)): if section[sect_nr].name.startswith("BLOCKS"): blocks_section = section[sect_nr] break # If the DXF blocks has, read this??? blocks = [] if 'blocks_section' in vars(): # start = blocks_section.begin start = self.line_pairs.index_both(0, "BLOCK", blocks_section.begin, blocks_section.end) while start is not None: blocks.append(SectionClass()) blocks[-1].Nr = len(blocks) blocks[-1].begin = start name_pos = self.line_pairs.index_code(2, start + 1, blocks_section.end) blocks[-1].name = a2u(self.line_pairs.line_pair[name_pos].value) end = self.line_pairs.index_both(0, "ENDBLK", start + 1, blocks_section.end) blocks[-1].end = end start = self.line_pairs.index_both(0, "BLOCK", end + 1, blocks_section.end) # g.logger.logger.info(("Blocks found:"), 1) # for bl in blocks: # g.logger.logger.info(str(bl), 1) return blocks def Read_Blocks(self, blocks_pos): """ Read_Blocks() - Read the block geometries """ blocks = BlocksClass([]) for block_nr in range(len(blocks_pos)): logger.info("Reading Block %s; Nr: %i" % (blocks_pos[block_nr].name, block_nr)) blocks.Entities.append(EntitiesClass(block_nr, blocks_pos[block_nr].name, [])) # Read the Baseline values for the block s = blocks_pos[block_nr].begin + 1 e = blocks_pos[block_nr].end - 1 lp = self.line_pairs # X value s = lp.index_code(10, s + 1, e) logger.debug("Found block pos Value 10 at: %s" %s) if s is None: blocks.Entities[-1].basep.x = 0.0 s = blocks_pos[block_nr].begin + 1 else: blocks.Entities[-1].basep.x = float(lp.line_pair[s].value) # Y value s = lp.index_code(20, s + 1, e) if s is None: blocks.Entities[-1].basep.y = 0.0 s = blocks_pos[block_nr].begin + 1 else: blocks.Entities[-1].basep.y = float(lp.line_pair[s].value) # Read the geometries blocks.Entities[-1].geo = self.Get_Geo(s, e) return blocks def Read_Entities(self, sections): """ Read_Entities() - Read the entities geometries """ entities = EntitiesClass(0, 'Entities', []) for section_nr in range(len(sections)): if sections[section_nr - 1].name.startswith("ENTITIES"): # g.logger.logger.info("Reading Entities", 1) entities.geo = self.Get_Geo(sections[section_nr - 1].begin + 1, sections[section_nr - 1].end - 1) return entities def Get_Geo(self, begin, end): """ Get_Geo() - Read the geometries of Blocks and Entities """ geos = [] self.start = self.line_pairs.index_code(0, begin, end) # old_start = self.start while self.start is not None: # Load the currently found geometry name = a2u(self.line_pairs.line_pair[self.start].value) entitie_geo = self.get_geo_entitie(len(geos), name) # Append only if something was found if entitie_geo is not None: geos.append(entitie_geo) # Start the next search after one just found self.start = self.line_pairs.index_code(0, self.start, end) # Show debugging information if desired # if self.start is not None: # g.logger.logger.info("Found %s at Linepair %0.0f (Line %0.0f till %0.0f)" \ # % (name, old_start, old_start * 2 + 4, end * 2 + 4), 1) # else: # g.logger.logger.info("Found %s at Linepair %0.0f (Line %0.0f till %0.0f)" \ # % (name, old_start, old_start * 2 + 4, self.start * 2 + 4), 1) # if len(geos) > 0: # g.logger.logger.info(str(geos[-1]), 2) # old_start = self.start del self.start return geos # Verteiler f�r die Geo-Instanzen # wird in def Get_Geo aufgerufen # f�r einen Release kann der ganze Code gerne wieder in einer Datei landen. # Distributor for Geo instances ??? # is called in def Get_Geo # For a release of the entire code can be happy again end up in a file. ??? def get_geo_entitie(self, geo_nr, name): """ get_geo_entitie() """ # Entities: # 3DFACE, 3DSOLID, ACAD_PROXY_ENTITY, ARC, ATTDEF, ATTRIB, BODY # CIRCLE, DIMENSTION, ELLIPSE, HATCH, IMAGE, INSERT, LEADER, LINE, # LWPOLYLINE, MLINE, MTEXT, OLEFRAME, OLE2FRAME, POINT, POLYLINE, # RAY, REGION, SEQEND, SHAPE, SOLID, SPLINE, XT, TOLERANCE, TRACE, # VERTEX, VIEWPOINT, XLINE # Instanz des neuen Objekts anlegen und gleichzeitig laden # Create a new instance of the object and at the same load ??? if name == "POLYLINE": geo = GeoentPolyline(geo_nr, self) elif name == "SPLINE": geo = GeoentSpline(geo_nr, self) elif name == "ARC": geo = GeoentArc(geo_nr, self) elif name == "CIRCLE": geo = GeoentCircle(geo_nr, self) elif name == "LINE": geo = GeoentLine(geo_nr, self) elif name == "INSERT": geo = GeoentInsert(geo_nr, self) elif name == "ELLIPSE": geo = GeoentEllipse(geo_nr, self) elif name == "LWPOLYLINE": geo = GeoentLwPolyline(geo_nr, self) elif name == "POINT": geo = GeoentPoint(geo_nr, self) else: logger.info(("Found unsupported geometry type: %s !" % name)) self.start += 1 # Eins hochz�hlen sonst gibts ne dauer Schleife return None return geo def Get_Layer_Nr(self, Layer_Name): """ Get_Layer_Nr() - Find the number of geometry layers """ for i in range(len(self.layers)): if self.layers[i].name == Layer_Name: layer_nr = i return layer_nr layer_nr = len(self.layers) self.layers.append(LayerClass(layer_nr)) self.layers[-1].name = Layer_Name return layer_nr def Get_Block_Nr(self, Block_Name): """ Get_Block_Nr() - Find the number of blocks """ block_nr = -1 for i in range(len(self.blocks.Entities)): if self.blocks.Entities[i].Name == Block_Name: block_nr = i break return block_nr def Get_Contour(self, entities=None): """ Get_Contour() - Find the best contour the composite geometries """ cont = [] points = self.App_Cont_or_Calc_IntPts(entities.geo, cont) points = self.Find_Common_Points(points) # points = self.Remove_Redundant_Geos(points) found_cont = self.Search_Contours(entities.geo, points) # for check_cont in found_cont: # logger.debug("Correcting Contour inaccuracies if found") # for geo_nr in range(1, len(check_cont.order)): # geo1 = check_cont.order[geo_nr - 1] # geo2 = check_cont_order[geo_nr] # logger.debug(geo[geo_nr]) cont += found_cont return cont def App_Cont_or_Calc_IntPts(self, geo=None, cont=None): """ App_Cont_or_Calc_IntPts() Calculate and assign the start and end points """ tol = g.config.point_tolerance points = [] warning = False for i in range(len(geo)): # logger.debug("geo: %s" %geo[i]) if not geo[i].App_Cont_or_Calc_IntPts(cont, points, i, tol): warning = True logger.warning(self.tr("Element ignored: %s") % repr(geo[i])) if warning: message = self.tr("Length of some Elements too short!" "\nLength must be greater than tolerance." "\nSkipped Geometries") # Always display warning in log to help user find the wrong blocks logger.warning(message) if not g.quiet: QMessageBox.warning(g.window, self.tr("Short Elements"), message) return points def Find_Common_Points(self, points=None): """ Find_Common_Points() - Find common points """ # tol = self.config.points_tolerance.get() tol = g.config.point_tolerance p_list = [] # Einen List aus allen Punkten generieren # Generate list of all points for p in points: p_list.append([p.Layer_Nr, p.be.x, p.be.y, p.point_nr, 0]) p_list.append([p.Layer_Nr, p.en.x, p.en.y, p.point_nr, 1]) # Sort the list p_list.sort() # print p_list # Loop for number of list items # Start = where to begin the search of the same elements anf = [] for l_nr in range(len(p_list)): inter = [] # print ("Suche Starten f�r Geometrie Nr: %i, Punkt %i" % (p_list[l_nr][3], l_nr)) if isinstance(anf, list): c_nr = 0 else: c_nr = anf anf = [] # Schleife bis n�chster X Wert Gr��er ist als selbst +tol und Layer Gr��er gleich # Loop until the next X value is greater than yourself and layer Gr + tol he same ??? while p_list[c_nr][0] < p_list[l_nr][0] or \ p_list[c_nr][1] <= (p_list[l_nr][1] + tol): # print ("Suche Punkt %i" % (c_nr)) # Erstes das �bereinstimmt is der n�chste Anfang # First, the match is the next start if isinstance(anf, list) and\ p_list[c_nr][0] == p_list[l_nr][0] and\ abs(p_list[c_nr][1] - p_list[l_nr][1]) <= tol: anf = c_nr # print ("N�chste Suche starten bei" +str(anf)) # Falls gleich anh�ngen # Attach if equal ??? if p_list[c_nr][0] == p_list[l_nr][0] and \ abs(p_list[c_nr][1] - p_list[l_nr][1]) <= tol and\ abs(p_list[c_nr][2] - p_list[l_nr][2]) <= tol and\ c_nr != l_nr: inter.append(c_nr) # print ("Gefunden" +str(inter)) c_nr += 1 if c_nr == len(p_list): break # Anh�ngen der gefundenen Punkte an points # Append the found points for int_p in inter: # Common Anfangspunkt # Common starting point if p_list[l_nr][-1] == 0: points[p_list[l_nr][-2]].be_cp.append(p_list[int_p][3:5]) # Common Endpunkt # Common end point else: points[p_list[l_nr][-2]].en_cp.append(p_list[int_p][3:5]) return points def Remove_Redundant_Geos(self, geo=None, points=None): """ Remove_Redundant_Geos() - Does nothing! """ pass # del_points=[] # for p_nr in range(len(points)): # if not(p_nr in del_points): # for be_p in points[p_nr].be_cp: # for en_p in points[p_nr].en_cp: # if be_p[0] == en_p[0]: # del_points.append(be_p[0]) # print ('Gleiche Punkte in Anfang: %s und Ende %s' % (be_p, en_p)) # # #L�schen der �berfl�ssigen Punkte # #Delete the ? points ??? # for p_nr in del_points: # for j in range(len(points)): # if p_nr == points[j].point_nr: # del points[j] # break # return points def Search_Contours(self, geo = None, all_points = None): """ Search_Contours() - Find the best continuous contours """ found_contours = [] points = deepcopy(all_points) while len(points) > 0: # print '\n Neue Suche' # Wenn nichts gefunden wird dann einfach die Kontur hochz�hlen # If nothing found then count up the contour if len(points[0].be_cp) == 0 and len(points[0].en_cp) == 0: # print '\nGibt Nix' found_contours.append(ContourClass(len(found_contours), 0, [[points[0].point_nr, 0]], 0)) elif len(points[0].be_cp) == 0 and len(points[0].en_cp) > 0: # print '\nGibt was R�ckw�rts (Anfang in neg dir)' new_cont_pos = self.Search_Paths(0, [], points[0].point_nr, 0, points) found_contours.append(self.Get_Best_Contour(len(found_contours), new_cont_pos, geo, points)) elif len(points[0].be_cp) > 0 and len(points[0].en_cp) == 0: # print '\nGibt was Vorw�rt (Ende in pos dir)' new_cont_neg = self.Search_Paths(0, [], points[0].point_nr, 1, points) found_contours.append(self.Get_Best_Contour(len(found_contours), new_cont_neg, geo, points)) elif len(points[0].be_cp) > 0 and len(points[0].en_cp) > 0: # print '\nGibt was in beiden Richtungen' # Suchen der m�glichen Pfade # Search the possible paths new_cont_pos = self.Search_Paths(0, [], points[0].point_nr, 1, points) # Bestimmen des besten Pfades und �bergabe in cont # Determine the best path and Xbergabe in cont ??? found_contours.append(self.Get_Best_Contour(len(found_contours), new_cont_pos, geo, points)) # points = self.Remove_Used_Points(cont[-1], points) # Falls der Pfad nicht durch den ersten Punkt geschlossen ist # If the path is not closed by the first point if found_contours[-1].closed == 0: # print '\nPfad nicht durch den ersten Punkt geschlossen' found_contours[-1].reverse() # print ("Neue Kontur umgedrejt %s" % cont[-1]) new_cont_neg = self.Search_Paths(0, [found_contours[-1]], points[0].point_nr, 0, points) found_contours[-1] = self.Get_Best_Contour(len(found_contours) - 1, new_cont_neg + new_cont_pos, geo, points) else: print('FEHLER !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!') points = self.Remove_Used_Points(found_contours[-1], points) found_contours[-1] = self.Contours_Points2Geo(found_contours[-1], all_points) return found_contours def Search_Paths(self, c_nr=None, c=None, p_nr=None, dir=None, points=None): """ Search_Paths() - Search the paths through the Contour """ # Define the direction of the search (1 = positive, 0 = neg or reverse) # If it is the first call a new contour is to be created if len(c) == 0: c.append(ContourClass(cont_nr=0, order=[[p_nr, dir]])) # Suchen des Punktes innerhalb der points List (n�tig da verwendete Punkte gel�scht werden) # Search for the item within the list of points (ntig used as points gelscht) ??? for new_p_nr in range(len(points)): if points[new_p_nr].point_nr == p_nr: break # Next point depending on the direction if dir == 0: weiter = points[new_p_nr].en_cp elif dir == 1: weiter = points[new_p_nr].be_cp # Schleife f�r die Anzahl der Abzweig M�glichkeiten # Loop for the number of the branch can write ??? for i in range(len(weiter)): # Wenn es die erste M�glichkeit ist Hinzuf�gen zur aktuellen Kontur # If it is the first possibility to add to the current contour if i == 0: if not(c[c_nr].is_contour_closed()): c[c_nr].order.append(weiter[0]) # There is a branch. It is copied to the current contour and the # other branches follow elif i > 0: if not(c[c_nr].is_contour_closed()): # print 'Abzweig ist m�glich' c.append(deepcopy(c[c_nr])) del c[-1].order[-1] c[-1].order.append(weiter[i]) for i in range(len(weiter)): # print 'I ist: ' +str(i) if i == 0: new_c_nr = c_nr else: new_c_nr = len(c) - len(weiter) + i new_p_nr = c[new_c_nr].order[-1][0] new_dir = c[new_c_nr].order[-1][1] if not(c[new_c_nr].is_contour_closed()): c = self.Search_Paths(copy(new_c_nr), c, copy(new_p_nr), copy(new_dir), points) return c def Get_Best_Contour(self, c_nr, c=None, geo=None, points=None): """ Get_Best_Contour() - Seek for the best (in my opinion) countour """ # Shortlist of the new contour best = None best_open = None # print ("Es wurden %0.0f Konturen gefunden" %len(c)) for i in range(len(c)): # if len(c)>1: # print ("Kontur Nr %0.0f" %i) # print c[i] # Korrigieren der Kontur falls sie nicht in sich selbst geschlossen ist # The correct contour if it is not closed in on itself if c[i].closed == 2: c[i].remove_other_closed_contour() c[i].closed = 0 c[i].calc_length(geo) # Search for the best geometry if c[i].closed == 1: c[i].calc_length(geo) if best is None: best = i else: if c[best].length < c[i].length: best = i elif c[i].closed == 0: c[i].calc_length(geo) if best_open is None: best_open = i else: if c[best_open].length < c[i].length: best_open = i # Falls keine Geschschlossene dabei ist Beste = Offene # If no Geschschlossene is best = Open ??? if best is None: best = best_open best_c = c[best] best_c.cont_nr = c_nr # print "Beste Kontur Nr:%s" %best_c return best_c # All the points in the path from Point Clear to accelerate nights Search ??? def Remove_Used_Points(self, cont=None, points=None): """ Remove_Used_Points() """ for p_nr in cont.order: # This has to be 2 separate loops, otherwise one element is missing for Point in points: if p_nr[0] == Point.point_nr: del points[points.index(Point)] for Point in points: for be_cp in Point.be_cp: if p_nr[0] == be_cp[0]: del Point.be_cp[Point.be_cp.index(be_cp)] break for en_cp in Point.en_cp: if p_nr[0] == en_cp[0]: del Point.en_cp[Point.en_cp.index(en_cp)] break # Return to the contour ??? return points # All the points in the path from Point Clear to accelerate nights Search ??? def Contours_Points2Geo(self, cont=None, points=None): """ Contours_Points2Geo() """ # print cont.order for c_nr in range(len(cont.order)): cont.order[c_nr][0] = points[cont.order[c_nr][0]].geo_nr return cont class dxflinepairClass: def __init__(self, code=None, value=None): self.code = code self.value = value def __repr__(self): return 'Code ->' + str(self.code) + '\nvalue ->' + self.value class dxflinepairsClass: def __init__(self, line_pair): self.nrs = 0 self.line_pair = line_pair def __repr__(self): return 'Number of Line Pairs: ' + str(self.nrs) # Search for information in the line pairs (both code & value) # Optional start and end values for the search def index_both(self, code=0, value=0, start=0, stop= -1): """ index_both() """ # If stop==-1 then stop at the end of the pairs if stop == -1: stop = len(self.line_pair) # Start the search within the specified parameters for i in range(start, stop): # .value is not passed through a2u here, so always use ASCII value as parameter! if self.line_pair[i].code == code and self.line_pair[i].value == value: return i #If nothing found return "None" return None #Sucht nach Code Angaben in den Line Pairs code & value # optional mit start und endwert f�r die Suche #Search for information in the Line Pairs (both code & value) #Optional start and end values for the search def index_code(self, code=0, start=0, stop= -1): """ index_code() """ # If stop == -1 then stop at the end of the pairs if stop == -1: stop = len(self.line_pair) # Start the search within the specified parameters for i in range(start, stop): if self.line_pair[i].code == code: return i # If nothing found return "None" return None class LayerClass: def __init__(self, Nr=0, name=''): self.Nr = Nr self.name = name def __repr__(self): # how to print the object return 'Nr ->' + str(self.Nr) + '\nName ->' + self.name def __len__(self): return self.__len__ class SectionClass: def __init__(self, Nr=0, name='', begin=0, end=1): self.Nr = Nr self.name = name self.begin = begin self.end = end def __repr__(self): # how to print the object return 'Nr ->' + str(self.Nr) + '\nName ->' + self.name + '\nBegin ->' + str(self.begin) + '\nEnd: ->' + str(self.end) def __len__(self): return self.__len__ class EntitiesClass: def __init__(self, Nr=0, Name='', geo=[], cont=[]): self.Nr = Nr self.Name = Name self.basep = Point(x=0.0, y=0.0) self.geo = geo self.cont = cont def __repr__(self): # how to print the object return "\nNr: %s" % self.Nr +\ "\nName: %s" % self.Name +\ "\nBasep: %s" % self.basep +\ "\nNumber of Geometries: %i" % len(self.geo) +\ "\nNumber of Contours: %i" % len(self.cont) def __len__(self): return self.__len__ # Gibt einen List mit den Benutzten Layers des Blocks oder Entities zur�ck # Is a List back to results with the use of block layer or Entities ??? def get_used_layers(self): used_layers = [] for i in range(len(self.geo)): if (self.geo[i].Layer_Nr in used_layers) == 0: used_layers.append(self.geo[i].Layer_Nr) return used_layers # Gibt die Anzahl der Inserts in den Entities zur�ck # Returns the number of inserts back into the Entities ??? def get_insert_nr(self): insert_nr = 0 for i in range(len(self.geo)): if "Insert" in self.geo[i].Typ: insert_nr += 1 return insert_nr class BlocksClass: def __init__(self, Entities=[]): self.Entities = Entities def __repr__(self): # how to print the object s = 'Blocks:\nNumber of Blocks ->' + str(len(self.Entities)) for entitie in self.Entities: s += str(entitie) return s dxf2gcode-20240509/dxf2gcode/dxfimport/geoent_spline.py0000664000000000000000000001612114011526166021417 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Vinzenz Schulz # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from dxf2gcode.core.point import Point from dxf2gcode.dxfimport.spline_convert import Spline2Arcs from dxf2gcode.dxfimport.classes import PointsClass, ContourClass from dxf2gcode.globals.helperfunctions import a2u import dxf2gcode.globals.globals as g class GeoentSpline: def __init__(self, Nr=0, caller=None): self.Typ = 'Spline' self.Nr = Nr # Initialisieren der Werte # Initialise the values self.Layer_Nr = 0 self.Spline_flag = [] self.degree = 1 self.Knots = [] self.Weights = [] self.CPoints = [] self.geo = [] self.length = 0.0 # Lesen der Geometrie # Read the geometry self.Read(caller) # Zuweisen der Toleranz f�rs Fitting # Assign the fitting tolerance tol = g.config.fitting_tolerance check = g.config.vars.Import_Parameters['spline_check'] # Umwandeln zu einem ArcSpline # Convert to a ArcSpline Spline2ArcsClass = Spline2Arcs(degree=self.degree, Knots=self.Knots, Weights=self.Weights, CPoints=self.CPoints, tol=tol, check=check) self.geo = Spline2ArcsClass.Curve for geo in self.geo: self.length += geo.length def __repr__(self): # how to print the object s = "\nSpline:" +\ "\n\tNr: %i" % self.Nr +\ "\n\tLayer Nr: %i" % self.Layer_Nr +\ "\n\tSpline flag: %i" % self.Spline_flag +\ "\n\tdegree: %i" % self.degree +\ "\n\tlength: %0.3f" % self.length +\ "\n\tGeo elements: %i" % len(self.geo) +\ "\n\tKnots: %s" % self.Knots +\ "\n\tWeights: %s" % self.Weights +\ "\n\tCPoints:" for Point in self.CPoints: s = s + str(Point) return s def reverse(self): """ reverse() """ self.geo.reverse() for geo in self.geo: geo.reverse() def App_Cont_or_Calc_IntPts(self, cont, points, i, tol): """ App_Cont_or_Calc_IntPts() """ # Hinzuf�gen falls es keine geschlossener Spline ist # Add if it is not a closed spline if self.CPoints[0].within_tol(self.CPoints[-1], tol): self.analyse_and_opt() cont.append(ContourClass(len(cont), 1, [[i, 0]], self.length)) else: points.append(PointsClass(point_nr=len(points), geo_nr=i, Layer_Nr=self.Layer_Nr, be=self.geo[0].Ps, en=self.geo[-1].Pe, be_cp=[], en_cp=[])) return True def analyse_and_opt(self): """ analyse_and_opt() """ summe = 0 # Richtung in welcher der Anfang liegen soll (unten links) # Direction of the top (lower left) ??? Popt = Point(-1e3, -1e6) # Calculation of the alignment after Gaussian-Elling # Positive value means CW, negative value indicates CCW # closed polygon for Line in self.geo: summe += Line.Ps.x * Line.Pe.y - Line.Pe.x * Line.Ps.y if summe > 0.0: self.reverse() # Find the smallest starting point from bottom left X (Must be new loop!) # logger.debug(self.geo) min_distance = self.geo[0].Ps.distance(Popt) min_geo_nr = 0 for geo_nr in range(1, len(self.geo)): if self.geo[geo_nr].Ps.distance(Popt) < min_distance: min_distance = self.geo[geo_nr].Ps.distance(Popt) min_geo_nr = geo_nr # Order contour so the new starting point is at the beginning self.geo = self.geo[min_geo_nr:len(self.geo)] + self.geo[0:min_geo_nr] def Read(self, caller): """ Read() """ # Assign short name lp = caller.line_pairs e = lp.index_code(0, caller.start + 1) # Assign layer s = lp.index_code(8, caller.start + 1) self.Layer_Nr = caller.Get_Layer_Nr(a2u(lp.line_pair[s].value)) # Spline Flap zuweisen # Assign Spline Flap s = lp.index_code(70, s + 1) self.Spline_flag = int(lp.line_pair[s].value) # Spline Ordnung zuweisen # Spline order to assign s = lp.index_code(71, s + 1) self.degree = int(lp.line_pair[s].value) # Number of CPts st = lp.index_code(73, s + 1) nCPts = int(lp.line_pair[s].value) s = st # Read the node (knot) while True: # N ode (knot) value sk = lp.index_code(40, s + 1, e) if sk is None: break self.Knots.append(float(lp.line_pair[sk].value)) s = sk # Read the weights s = st while True: # Node (knot) weights sg = lp.index_code(41, s + 1, e) if sg is None: break self.Weights.append(float(lp.line_pair[sg].value)) s = sg # Read the control points s = st while True: # X value s = lp.index_code(10, s + 1, e) # Wenn kein neuer Punkt mehr gefunden wurde abbrechen ... # Cancel if no new item was detected if s is None: break x = float(lp.line_pair[s].value) # Y value s = lp.index_code(20, s + 1, e) y = float(lp.line_pair[s].value) self.CPoints.append(Point(x, y)) if len(self.Weights) == 0: for nr in range(len(self.CPoints)): self.Weights.append(1) caller.start = e # print nCPts # print len(self.Knots) # print len(self.Weights) # print len(self.CPoints) # print self def get_start_end_points(self, direction=0): """ get_start_end_points() """ if not direction: punkt, angle = self.geo[0].get_start_end_points(direction) else: punkt, angle = self.geo[-1].get_start_end_points(direction) return punkt, angle dxf2gcode-20240509/dxf2gcode/dxfimport/geoent_polyline.py0000664000000000000000000002056114011526166021763 0ustar rootroot# -*- coding: utf-8 -*- from __future__ import absolute_import from __future__ import division ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Vinzenz Schulz # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from __future__ import division from dxf2gcode.core.point import Point from dxf2gcode.core.arcgeo import ArcGeo from dxf2gcode.core.linegeo import LineGeo from dxf2gcode.dxfimport.classes import PointsClass, ContourClass from dxf2gcode.globals.helperfunctions import a2u class GeoentPolyline: def __init__(self, Nr=0, caller=None): self.Typ = 'Polyline' self.Nr = Nr self.Layer_Nr = 0 self.geo = [] self.length = 0 # Lesen der Geometrie # Read the geometry self.Read(caller) def __repr__(self): # how to print the object string = "\nPolyline:" +\ "\n\tNr: %i" % self.Nr +\ "\n\tLayer Nr: %i" % self.Layer_Nr +\ "\n\tNr. of Lines: %i" % len(self.geo) +\ "\n\tlength: %0.3f" % self.length return string def reverse(self): """ reverse() """ self.geo.reverse() for geo in self.geo: geo.reverse() def App_Cont_or_Calc_IntPts(self, cont, points, i, tol): """ App_Cont_or_Calc_IntPts() """ if abs(self.length) < tol: pass # Hinzuf�gen falls es keine geschlossene Polyline ist # Add if it is not a closed polyline elif self.geo[0].Ps.within_tol(self.geo[-1].Pe, tol): self.analyse_and_opt() cont.append(ContourClass(len(cont), 1, [[i, 0]], self.length)) else: points.append(PointsClass(point_nr=len(points), geo_nr=i, Layer_Nr=self.Layer_Nr, be=self.geo[0].Ps, en=self.geo[-1].Pe, be_cp=[], en_cp=[])) return True def analyse_and_opt(self): """ analyse_and_opt() """ summe = 0 # Richtung in welcher der Anfang liegen soll (unten links) # Direction of the top (lower left) ??? Popt = Point(-1e3, -1e6) # Calculation of the alignment after Gaussian-Elling # Positive value means CW, negative value indicates CCW # closed polygon for Line in self.geo: summe += Line.Ps.x * Line.Pe.y - Line.Pe.x * Line.Ps.y if summe > 0.0: self.reverse() # Suchen des kleinsten Startpunkts von unten Links X zuerst (Muss neue Schleife sein!) # Find the smallest starting point from bottom left X (Must be new loop!) min_distance = self.geo[0].Ps.distance(Popt) min_geo_nr = 0 for geo_nr in range(1, len(self.geo)): if self.geo[geo_nr].Ps.distance(Popt) < min_distance: min_distance = self.geo[geo_nr].Ps.distance(Popt) min_geo_nr = geo_nr # Kontur so anordnen das neuer Startpunkt am Anfang liegt # Order Contour so the new starting point is at the beginning self.geo = self.geo[min_geo_nr:len(self.geo)] + self.geo[0:min_geo_nr] def Read(self, caller): """ Read() """ # Assign short name lp = caller.line_pairs e = lp.index_both(0, "SEQEND", caller.start + 1) + 1 # Assign layer s = lp.index_code(8, caller.start + 1) self.Layer_Nr = caller.Get_Layer_Nr(a2u(lp.line_pair[s].value)) # Ps=None for the first point Ps = None # Polyline flag s_temp = lp.index_code(70, s + 1, e) if s_temp is None: PolyLineFlag = 0 else: PolyLineFlag = int(lp.line_pair[s_temp].value) s = s_temp # print("PolylineFlag: %i" %PolyLineFlag) while 1: # and s is not None: s = lp.index_both(0, "VERTEX", s + 1, e) if s == None: break # X Value s = lp.index_code(10, s + 1, e) x = float(lp.line_pair[s].value) # Y Value s = lp.index_code(20, s + 1, e) y = float(lp.line_pair[s].value) Pe = Point(x, y) # Bulge bulge = 0 e_vertex = lp.index_both(0, "VERTEX", s + 1, e) if e_vertex is None: e_vertex = e s_temp = lp.index_code(42, s + 1, e_vertex) # print('stemp: %s, e: %s, next 10: %s' %(s_temp,e,lp.index_both(0,"VERTEX",s+1,e))) if s_temp is not None: bulge = float(lp.line_pair[s_temp].value) s = s_temp # Vertex flag (bit-coded); default is 0; 1 = Closed; 128 = Plinegen s_temp = lp.index_code(70, s + 1, e_vertex) if s_temp is None: VertexFlag = 0 else: VertexFlag = int(lp.line_pair[s_temp].value) s = s_temp # print("Vertex Flag: %i" %PolyLineFlag) # Assign the geometries for the Polyline if VertexFlag != 16: if Ps is not None: if next_bulge == 0: self.geo.append(LineGeo(Ps=Ps, Pe=Pe)) else: # self.geo.append(LineGeo(Ps=Ps,Pe=Pe)) # print bulge self.geo.append(self.bulge2arc(Ps, Pe, next_bulge)) # L�nge drauf rechnen wenns eine Geometrie ist # Wenns Ldnge count on it is a geometry ??? self.length += self.geo[-1].length # Der Bulge wird immer f�r den und den n�chsten Punkt angegeben # The bulge is always given for the next point next_bulge = bulge Ps = Pe # It is a closed polyline if PolyLineFlag == 1 and len(self.geo) > 0: # print("sollten �bereinstimmen: %s, %s" %(Ps,Pe)) if next_bulge == 0: self.geo.append(LineGeo(Ps=Ps, Pe=self.geo[0].Ps)) else: self.geo.append(self.bulge2arc(Ps, self.geo[0].Ps, next_bulge)) # L�nge drauf rechnen wenns eine Geometrie ist # Wenns Ldnge count on it is a geometry ??? self.length += self.geo[-1].length # Neuen Startwert f�r die n�chste Geometrie zur�ckgeben # New starting value for the next geometry caller.start = e def get_start_end_points(self, direction=0): """ get_start_end_points() """ if not direction: punkt, angle = self.geo[0].get_start_end_points(direction) else: punkt, angle = self.geo[-1].get_start_end_points(direction) return punkt, angle def bulge2arc(self, Ps, Pe, bulge): """ bulge2arc() """ c = (1 / bulge - bulge) / 2 # Berechnung des Mittelpunkts (Formel von Mickes!) # Calculation of the center (Micke's formula) O = Point((Ps.x + Pe.x - (Pe.y - Ps.y) * c) / 2, (Ps.y + Pe.y + (Pe.x - Ps.x) * c) / 2) # Radius = Distance between the centre and Ps r = O.distance(Ps) # Kontrolle ob beide gleich sind (passt ...) # Check if they are equal (fits ...) # r=O.distance(Pe) # Unterscheidung f�r den �ffnungswinkel. # Distinction for the opening angle. ??? if bulge > 0: return ArcGeo(Ps=Ps, Pe=Pe, O=O, r=r) else: arc = ArcGeo(Ps=Pe, Pe=Ps, O=O, r=r) arc.reverse() return arc dxf2gcode-20240509/dxf2gcode/dxfimport/geoent_point.py0000664000000000000000000000507614011526166021265 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2014-2015 # Robert Lichtenberger # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from dxf2gcode.core.holegeo import HoleGeo from dxf2gcode.core.point import Point from dxf2gcode.dxfimport.classes import ContourClass from dxf2gcode.globals.helperfunctions import a2u class GeoentPoint: def __init__(self, Nr=0, caller=None): self.Typ = 'Point' self.Nr = Nr self.Layer_Nr = 0 self.geo = [] self.length = 0 # Lesen der Geometrie # Read the geometry self.Read(caller) def __repr__(self): # how to print the object return "\nPoint:" +\ "\n\tNr: %i" % self.Nr +\ "\n\tLayer Nr: %i" % self.Layer_Nr +\ "\n\t" + str(self.geo[-1]) def App_Cont_or_Calc_IntPts(self, cont, points, i, tol): """ App_Cont_or_Calc_IntPts() """ cont.append(ContourClass(len(cont), 0, [[i, 0]], 0)) return True def Read(self, caller): """ Read() """ # Assign short name lp = caller.line_pairs e = lp.index_code(0, caller.start + 1) # Assign layer s = lp.index_code(8, caller.start + 1) self.Layer_Nr = caller.Get_Layer_Nr(a2u(lp.line_pair[s].value)) # X Value s = lp.index_code(10, s + 1) x0 = float(lp.line_pair[s].value) # Y Value s = lp.index_code(20, s + 1) y0 = float(lp.line_pair[s].value) Ps = Point(x0, y0) self.geo.append(HoleGeo(Ps)) # self.geo.append(LineGeo(Ps=Point(0,0), Pe=P)) # Neuen Startwert für die nächste Geometrie zurückgeben # New starting value for the next geometry caller.start = s dxf2gcode-20240509/dxf2gcode/dxfimport/geoent_lwpolyline.py0000664000000000000000000001760514011526166022333 0ustar rootroot# -*- coding: utf-8 -*- from __future__ import absolute_import from __future__ import division ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Vinzenz Schulz # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from __future__ import division import logging from dxf2gcode.core.point import Point from dxf2gcode.core.arcgeo import ArcGeo from dxf2gcode.core.linegeo import LineGeo from dxf2gcode.dxfimport.classes import PointsClass, ContourClass from dxf2gcode.globals.helperfunctions import a2u logger = logging.getLogger("DXFImport.GeoentLWPolyline") class GeoentLwPolyline(object): def __init__(self, Nr=0, caller=None): self.Typ = 'LWPolyline' self.Nr = Nr self.Layer_Nr = 0 self.length = 0 self.geo = [] # Lesen der Geometrie # Read the geometry self.Read(caller) def __repr__(self): # how to print the object return "\nLWPolyline:" +\ "\n\tNr: %i" % self.Nr +\ "\n\tLayer Nr: %i" % self.Layer_Nr +\ "\n\tNr. of geos: %i" % len(self.geo) +\ "\n\tlength: %0.3f" % self.length def reverse(self): """ reverse() """ self.geo.reverse() for geo in self.geo: geo.reverse() def App_Cont_or_Calc_IntPts(self, cont, points, i, tol): """ App_Cont_or_Calc_IntPts() """ if abs(self.length) < tol: return False # Add if it is not a closed polyline elif self.geo[0].Ps.within_tol(self.geo[-1].Pe, tol): self.analyse_and_opt() cont.append(ContourClass(len(cont), 1, [[i, 0]], self.length)) else: points.append(PointsClass(point_nr=len(points), geo_nr=i, Layer_Nr=self.Layer_Nr, be=self.geo[0].Ps, en=self.geo[-1].Pe, be_cp=[], en_cp=[])) return True def analyse_and_opt(self): """ analyse_and_opt() """ summe = 0 # Richtung in welcher der Anfang liegen soll (unten links) # Direction of the top (lower left) ???? Popt = Point(-1e3, -1e6) # Calculation of the alignment after Gaussian-Elling # Positive value means CW, negative value indicates CCW # closed polygon for Line in self.geo: summe += Line.Ps.x * Line.Pe.y - Line.Pe.x * Line.Ps.y if summe > 0.0: self.reverse() # Suchen des kleinsten Startpunkts von unten Links X zuerst (Muss neue Schleife sein!) # Find the smallest starting point from bottom left X (Must be new loop!) min_distance = self.geo[0].Ps.distance(Popt) min_geo_nr = 0 for geo_nr in range(1, len(self.geo)): if self.geo[geo_nr].Ps.distance(Popt) < min_distance: min_distance = self.geo[geo_nr].Ps.distance(Popt) min_geo_nr = geo_nr # Kontur so anordnen das neuer Startpunkt am Anfang liegt # Order Contour so new starting point is at the beginning self.geo = self.geo[min_geo_nr:len(self.geo)] + self.geo[0:min_geo_nr] def Read(self, caller): """ Read() """ Old_Point = Point(0, 0) # Assign short name lp = caller.line_pairs e = lp.index_code(0, caller.start + 1) # Assign layer s = lp.index_code(8, caller.start + 1) self.Layer_Nr = caller.Get_Layer_Nr(a2u(lp.line_pair[s].value)) # Ps=None for the first point Ps = None # Number of vertices s = lp.index_code(90, s + 1, e) NoOfVert = int(lp.line_pair[s].value) # Polyline flag (bit-coded); default is 0; 1 = Closed; 128 = Plinegen s = lp.index_code(70, s + 1, e) LWPLClosed = int(lp.line_pair[s].value) # print LWPLClosed s = lp.index_code(10, s + 1, e) bulge = None while 1: # X Value if s is None: break x = float(lp.line_pair[s].value) # Y Value s = lp.index_code(20, s + 1, e) y = float(lp.line_pair[s].value) Pe = Point(x=x, y=y) # Bulge nxt_bulge = 0 s_nxt_x = lp.index_code(10, s + 1, e) e_nxt_b = s_nxt_x # Wenn am Ende dann Suche bis zum Ende # If in the end the search until the end ??? if e_nxt_b is None: e_nxt_b = e s_nxt_bulge = lp.index_code(42, s + 1, e_nxt_b) #logger.debug('stemp: %s, e: %s, next 10: %s' %(s_nxt_bulge,e,lp.index_code(10,s+1,e))) if s_nxt_bulge is not None: # Bulge refers to segment between current & next point! nxt_bulge = float(lp.line_pair[s_nxt_bulge].value) # Take the next X value as the starting value s = s_nxt_x # Assign the geometries for the Polyline if Ps is not None: if bulge == 0: self.geo.append(LineGeo(Ps=Ps, Pe=Pe)) else: # self.geo.append(LineGeo(Ps=Ps,Pe=Pe)) # print bulge self.geo.append(self.bulge2arc(Ps, Pe, bulge)) # L�nge drauf rechnen wenns eine Geometrie ist # Wenns Ldnge count on it is a geometry ??? self.length += self.geo[-1].length # The bulge is always given for the next point bulge = nxt_bulge Ps = Pe if LWPLClosed == 1 or LWPLClosed == 129: #logger.debug("sollten �bereinstimmen: %s, %s" %(Ps,Pe)) #logger.debug(self.geo) if bulge and len(self.geo)>0: self.geo.append(self.bulge2arc(Ps, self.geo[0].Ps, bulge)) self.length += self.geo[-1].length elif len(self.geo)>0: self.geo.append(LineGeo(Ps=Ps, Pe=self.geo[0].Ps)) self.length += self.geo[-1].length else: pass # New starting value for the next geometry caller.start = e def get_start_end_points(self, direction=0): if not direction: punkt, angle = self.geo[0].get_start_end_points(direction) else: punkt, angle = self.geo[-1].get_start_end_points(direction) return punkt, angle def bulge2arc(self, Ps, Pe, bulge): """ bulge2arc() """ c = (1 / bulge - bulge) / 2 # Calculate the centre point (Micke's formula!) O = Point((Ps.x + Pe.x - (Pe.y - Ps.y) * c) / 2, (Ps.y + Pe.y + (Pe.x - Ps.x) * c) / 2) # Radius = Distance between the centre and Ps r = O.distance(Ps) # Check if they are equal (fits ...) # r=O.distance(Pe) # Unterscheidung f�r den �ffnungswinkel. # Distinction for the opening angle. ??? if bulge > 0: return ArcGeo(Ps=Ps, Pe=Pe, O=O, r=r) else: arc = ArcGeo(Ps=Pe, Pe=Ps, O=O, r=r) arc.reverse() return arc dxf2gcode-20240509/dxf2gcode/dxfimport/geoent_line.py0000644000000000000000000001111214617065372021056 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Vinzenz Schulz # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import import logging from dxf2gcode.core.point import Point from dxf2gcode.core.linegeo import LineGeo from dxf2gcode.dxfimport.classes import PointsClass from dxf2gcode.globals.helperfunctions import a2u import dxf2gcode.globals.constants as c from PyQt5 import QtCore logger = logging.getLogger("DXFImport.GeoentLine") class GeoentLine(object): def __init__(self, Nr=0, caller=None): self.Typ = 'Line' self.Nr = Nr self.Layer_Nr = 0 self.geo = [] self.length = 0 # Lesen der Geometrie # Read the geometry self.Read(caller) def __repr__(self): # how to print the object return "\nLine:" +\ "\n\tNr: %i" % self.Nr +\ "\n\tLayer Nr: %i" % self.Layer_Nr +\ "\n\t" + str(self.geo[-1]) def tr(self, string_to_translate): """ Translate a string using the QCoreApplication translation framework @param: string_to_translate: a unicode string @return: the translated unicode string if it was possible to translate """ return str(QtCore.QCoreApplication.translate("GeoentLine", string_to_translate)) def App_Cont_or_Calc_IntPts(self, cont, points, i, tol): """ App_Cont_or_Calc_IntPts() """ if abs(self.length) <= tol: return False points.append(PointsClass(point_nr=len(points), geo_nr=i, Layer_Nr=self.Layer_Nr, be=self.geo[-1].Ps, en=self.geo[-1].Pe, be_cp=[], en_cp=[])) return True def Read(self, caller): """ This function does read the geometry. @param caller: The instance which is calling the function """ # Assign short name lp = caller.line_pairs e = lp.index_code(0, caller.start + 1) # Assign layer s = lp.index_code(8, caller.start + 1) self.Layer_Nr = caller.Get_Layer_Nr(a2u(lp.line_pair[s].value)) # X Value sl = lp.index_code(10, s + 1) x0 = float(lp.line_pair[sl].value) # Y Value s = lp.index_code(20, sl + 1) y0 = float(lp.line_pair[s].value) # X Value 2 s = lp.index_code(11, sl + 1) x1 = float(lp.line_pair[s].value) # Y Value 2 s = lp.index_code(21, s + 1) y1 = float(lp.line_pair[s].value) # Searching for an extrusion direction s_nxt_xt = lp.index_code(230, s + 1, e) # If there is a extrusion direction given flip around x-Axis if s_nxt_xt is not None: extrusion_dir = float(lp.line_pair[s_nxt_xt].value) logger.debug(self.tr('Found extrusion direction: %s') % extrusion_dir) if extrusion_dir == -1: x0 = -x0 x1 = -x1 Ps = Point(x0, y0) Pe = Point(x1, y1) # Anhängen der LineGeo Klasse für die Geometrie # Annexes to LineGeo class for geometry ??? self.geo.append(LineGeo(Ps=Ps, Pe=Pe)) # Länge entspricht der Länge des Kreises # Length corresponding to the length (circumference?) of the circle self.length = self.geo[-1].length # Neuen Startwert für die nächste Geometrie zurückgeben # New starting value for the next geometry caller.start = s logger.debug(self) def get_start_end_points(self, direction): """ get_start_end_points() """ punkt, angle = self.geo[-1].get_start_end_points(direction) return punkt, angle dxf2gcode-20240509/dxf2gcode/dxfimport/geoent_insert.py0000664000000000000000000000715214011526166021435 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Vinzenz Schulz # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from math import degrees, radians from dxf2gcode.core.point import Point from dxf2gcode.dxfimport.classes import ContourClass from dxf2gcode.globals.helperfunctions import a2u class GeoentInsert(object): def __init__(self, Nr=0, caller=None): self.Typ = 'Insert' self.Nr = Nr # Initialisieren der Werte # Initialise the values self.Layer_Nr = 0 self.BlockName = '' self.Point = [] self.Scale = [1.0, 1.0, 1.0] self.rot = 0.0 self.length = 0.0 # Lesen der Geometrie # Red the geometry self.Read(caller) def __repr__(self): # how to print the object return "\nInsert:" +\ "\n\tNr: %i" % self.Nr +\ "\n\tLayer Nr: %i" % self.Layer_Nr +\ "\n\tBlockName: %s" % self.BlockName +\ "\n\tPoint: %s" % self.Point +\ "\n\trot: %0.2f" % degrees(self.rot) +\ "\n\tScale: %s" % self.Scale def App_Cont_or_Calc_IntPts(self, cont, points, i, tol): """ App_Cont_or_Calc_IntPts() """ cont.append(ContourClass(len(cont), 0, [[i, 0]], 0)) return True def Read(self, caller): """ Read() """ # Assign short name lp = caller.line_pairs e = lp.index_code(0, caller.start + 1) # Block Name ind = lp.index_code(2, caller.start + 1, e) # print lp.line_pair[ind].value ######################################## self.BlockName = a2u(lp.line_pair[ind].value) # Assign layer s = lp.index_code(8, caller.start + 1, e) self.Layer_Nr = caller.Get_Layer_Nr(a2u(lp.line_pair[s].value)) # X Value s = lp.index_code(10, s + 1, e) x0 = float(lp.line_pair[s].value) # Y Value s = lp.index_code(20, s + 1, e) y0 = float(lp.line_pair[s].value) self.Point = Point(x0, y0) # XScale s_temp = lp.index_code(41, s + 1, e) if s_temp is not None: self.Scale[0] = float(lp.line_pair[s_temp].value) # YScale s_temp = lp.index_code(42, s + 1, e) if s_temp is not None: self.Scale[1] = float(lp.line_pair[s_temp].value) # ZScale s_temp = lp.index_code(43, s + 1, e) if s_temp is not None: self.Scale[2] = float(lp.line_pair[s_temp].value) # Rotation s_temp = lp.index_code(50, s + 1, e) if s_temp is not None: self.rot = radians(float(lp.line_pair[s_temp].value)) # New starting value for the next geometry caller.start = e dxf2gcode-20240509/dxf2gcode/dxfimport/geoent_ellipse.py0000664000000000000000000002530614011526166021567 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Vinzenz Schulz # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from __future__ import division from math import sqrt, sin, cos, atan2, degrees, pi from dxf2gcode.core.point import Point from dxf2gcode.dxfimport.biarc import BiarcClass from dxf2gcode.dxfimport.classes import PointsClass, ContourClass from dxf2gcode.globals.helperfunctions import a2u import dxf2gcode.globals.globals as g class GeoentEllipse(object): """ GeoentEllipse() """ def __init__(self, Nr=0, caller=None): self.Typ = 'Ellipse' self.Nr = Nr # Initialisieren der Werte # Initialise the values self.Layer_Nr = 0 self.center = Point(0, 0) # Centre of the geometry self.vector = Point(1, 0) # Vector A = semi-major axis. # a = rotation of the ellipse # http://de.wikipedia.org/wiki/Gro%C3%9Fe_Halbachse self.ratio = 1 # Verh�ltnis der kleinen zur gro�en Halbachse (b/a) # Ratio of the minor to major axis (b/a) # self.AngS = 0 # Startwinkel beim zeichnen eines Ellipsensegments # Starting angle when drawing an ellipse segment # self.AngE = radians(360) # Endwinkel (Winkel im DXF als Radians!) # End angle (angle in radians as DXF!) # Die folgenden Grundwerte werden sp�ter ein mal berechnet # The following limits are calculated later self.length = 0 self.Points = [] self.Points.append(self.center) # Lesen der Geometrie / Read the geometry self.Read(caller) # Zuweisen der Toleranz f�rs Fitting / Assign the tolerance for fitting tol = g.config.fitting_tolerance # Errechnen der Ellipse / Calculate the ellipse self.Ellipse_Grundwerte() self.Ellipse_2_Arcs(tol) def __repr__(self): # how to print the object # As elegant as printf in C or Matlab etc. see the first line! return "\nEllipse:" +\ "\n\tNr: " + str(self.Nr) +\ "\n\tLayer: " + str(self.Layer_Nr) +\ "\n\tcenter: " + str(self.center) +\ "\n\tvector: " + str(self.vector) +\ "\n\tratio: " + str(self.ratio) +\ "\n\tangles: " + str(degrees(self.AngS)) + " -> " + str(degrees(self.AngE)) +\ "\n\textend: " + str(degrees(self.ext)) +\ "\n\ta: " + str(self.a) +\ "\n\tb: " + str(self.b) +\ "\n\tlength: " + str(self.length) +\ "\n\tNarcs: " % str(len(self.geo)) def reverse(self): """ reverse() """ self.geo.reverse() for geo in self.geo: geo.reverse() def App_Cont_or_Calc_IntPts(self, cont, points, i, tol): """ App_Cont_or_Calc_IntPts() """ # Hinzuf�gen falls es keine geschlossene Polyline ist # Add if it is not a closed polyline if self.geo[0].Ps.within_tol(self.geo[-1].Pe, tol): self.analyse_and_opt() cont.append(ContourClass(len(cont), 1, [[i, 0]], self.length)) else: points.append(PointsClass(point_nr=len(points), geo_nr=i, Layer_Nr=self.Layer_Nr, be=self.geo[0].Ps, en=self.geo[-1].Pe, be_cp=[], en_cp=[])) return True def Read(self, caller): """ Read() """ # Assign short name lp = caller.line_pairs e = lp.index_code(0, caller.start + 1) # Assign Layer s = lp.index_code(8, caller.start + 1) self.Layer_Nr = caller.Get_Layer_Nr(a2u(lp.line_pair[s].value)) # Centre X value, Y value s = lp.index_code(10, s + 1) x0 = float(lp.line_pair[s].value) s = lp.index_code(20, s + 1) y0 = float(lp.line_pair[s].value) self.center = Point(x0, y0) # XWert, YWert. Vektor, relativ zum Zentrum, Gro�e Halbachse # X value, Y value. Vector relative to the center, Semi-major axis s = lp.index_code(11, s + 1) x1 = float(lp.line_pair[s].value) s = lp.index_code(21, s + 1) y1 = float(lp.line_pair[s].value) self.vector = Point(x1, y1) # Ratio minor to major axis s = lp.index_code(40, s + 1) self.ratio = float(lp.line_pair[s].value) # Start Winkel - Achtung, ist als rad (0-2pi) im dxf # Start angle - Note in radian (0-2pi) per dxf s = lp.index_code(41, s + 1) self.AngS = float(lp.line_pair[s].value) # End Winkel - Achtung, ist als rad (0-2pi) im dxf # End angle - Note in radian (0-2pi) per dxf s = lp.index_code(42, s + 1) self.AngE = float(lp.line_pair[s].value) # Neuen Startwert f�r die n�chste Geometrie zur�ckgeben # New starting value for the next geometry return caller.start = e def analyse_and_opt(self): """ analyse_and_opt() """ # Richtung in welcher der Anfang liegen soll (unten links) # Direction of top (lower left) ??? Popt = Point(-1e3, -1e6) # Suchen des kleinsten Startpunkts von unten Links X zuerst (Muss neue Schleife sein!) # Find the smallest starting point from bottom left X (Must be new loop!) min_distance = self.geo[0].Ps.distance(Popt) min_geo_nr = 0 for geo_nr in range(1, len(self.geo)): if self.geo[geo_nr].Ps.distance(Popt) < min_distance: min_distance = self.geo[geo_nr].Ps.distance(Popt) min_geo_nr = geo_nr # Kontur so anordnen das neuer Startpunkt am Anfang liegt # Contour so the new starting point is at the start order self.geo = self.geo[min_geo_nr:len(self.geo)] + self.geo[0:min_geo_nr] def get_start_end_points(self, direction=0): """ get_start_end_points() """ if not direction : punkt, angle = self.geo[0].get_start_end_points(direction) else: punkt, angle = self.geo[-1].get_start_end_points(direction) return punkt, angle def Ellipse_2_Arcs(self, tol): """ Ellipse_2_Arcs() """ # Anfangswert f�r Anzahl Elemente # Initial value for number of elements num_elements = 2 intol = False # print degrees(self.AngS) # print tol while not intol: intol = True # Anfangswete Ausrechnen # Calculate Anfangswete ??? angle = self.AngS Ps = self.Ellipse_Point(angle) tana = self.Ellipse_Tangent(angle) self.geo = [] self.PtsVec = [] self.PtsVec.append([Ps, tana]) for sec in range(num_elements): # Calculate Increment step = self.ext / num_elements # print degrees(step) # Calculate final values Pb = self.Ellipse_Point(angle + step) tanb = self.Ellipse_Tangent(angle + step) # Biarc erstellen und an geo anh�ngen # Biarc create and attach them ??? biarcs = BiarcClass(Ps, tana, Pb, tanb, tol / 100) self.geo += biarcs.geos[:] # Last value = Start value Ps = Pb tana = tanb self.PtsVec.append([Ps, tana]) if not(self.check_ellipse_fitting_tolerance(biarcs, tol, angle, angle + step)): intol = False num_elements += 1 break # Calculate new angle angle += step # print degrees(angle) # print self def check_ellipse_fitting_tolerance(self, biarc, tol, ang0, ang1): """ check_ellipse_fitting_tolerance() """ check_step = (ang1 - ang0) / 4 check_ang = [] check_Pts = [] fit_error = [] for i in range(1, 4): check_ang.append(ang0 + check_step * i) check_Pts.append(self.Ellipse_Point(check_ang[-1])) fit_error.append(biarc.get_biarc_fitting_error(check_Pts[-1])) if max(fit_error) >= tol: return 0 else: return 1 def Ellipse_Grundwerte(self): """ Ellipse_Grundwerte() """ # Other values of the ellipse that are calculated only once self.rotation = atan2(self.vector.y, self.vector.x) self.a = sqrt(self.vector.x ** 2 + self.vector.y ** 2) self.b = self.a * self.ratio # Calculate angle to extend self.ext = self.AngE - self.AngS # self.ext=self.ext%(-2*pi) # self.ext-=floor(self.ext/(2*pi))*(2*pi) def Ellipse_Point(self, alpha=0): # Point(0,0) """ Ellipse_Point() """ # gro�e Halbachse, kleine Halbachse, rotation der Ellipse (rad), Winkel des Punkts in der Ellipse (rad) # Semi-major axis, minor axis, rotation of the ellipse (rad), the point in the ellipse angle (rad) ??? Ex = self.a * cos(alpha) * cos(self.rotation) - self.b * sin(alpha) * sin(self.rotation) Ey = self.a * cos(alpha) * sin(self.rotation) + self.b * sin(alpha) * cos(self.rotation) return Point(self.center.x + Ex, self.center.y + Ey) def Ellipse_Tangent(self, alpha=0): # Point(0,0) """ Ellipse_Tanget() """ # gro�e Halbachse, kleine Halbachse, rotation der Ellipse (rad), Winkel des Punkts in der Ellipse (rad) # Semi-major axis, minor axis, rotation of the ellipse (rad), the point in the ellipse angle (rad) ??? phi = atan2(self.a * sin(alpha), self.b * cos(alpha)) + self.rotation + pi / 2 return phi dxf2gcode-20240509/dxf2gcode/dxfimport/geoent_circle.py0000664000000000000000000001104014011526166021361 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Vinzenz Schulz # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from __future__ import division from math import sin, cos, pi import logging from dxf2gcode.core.point import Point from dxf2gcode.core.arcgeo import ArcGeo from dxf2gcode.dxfimport.classes import ContourClass from dxf2gcode.globals.helperfunctions import a2u import dxf2gcode.globals.constants as c from PyQt5 import QtCore logger = logging.getLogger("DXFImport.GeoentCircle") class GeoentCircle(object): def __init__(self, Nr=0, caller=None): self.Typ = 'Circle' self.Nr = Nr self.Layer_Nr = 0 self.length = 0.0 self.geo = [] # Lesen der Geometrie # Read the geometry self.Read(caller) def __repr__(self): # how to print the object return "\nCircle:" +\ "\n\tNr: %i" % self.Nr +\ "\n\tLayer Nr:%i" % self.Layer_Nr +\ "\n\t" + str(self.geo[-1]) def tr(self, string_to_translate): """ Translate a string using the QCoreApplication translation framework @param string_to_translate: a unicode string @return: the translated unicode string if it was possible to translate """ return str(QtCore.QCoreApplication.translate('GeoentCircle', string_to_translate)) def App_Cont_or_Calc_IntPts(self, cont, points, i, tol): cont.append(ContourClass(len(cont), 1, [[i, 0]], self.length)) return True def Read(self, caller): """ Read() """ # Assign short name lp = caller.line_pairs e = lp.index_code(0, caller.start + 1) # Assign layer s = lp.index_code(8, caller.start + 1) self.Layer_Nr = caller.Get_Layer_Nr(a2u(lp.line_pair[s].value)) # X Value s = lp.index_code(10, s + 1) x0 = float(lp.line_pair[s].value) # Y Value s = lp.index_code(20, s + 1) y0 = float(lp.line_pair[s].value) # Radius s = lp.index_code(40, s + 1) r = float(lp.line_pair[s].value) # Searching for an extrusion direction s_nxt_xt = lp.index_code(230, s + 1, e) # If there is a extrusion direction given flip around x-Axis if s_nxt_xt is not None: extrusion_dir = float(lp.line_pair[s_nxt_xt].value) logger.debug(self.tr('Found extrusion direction: %s') % extrusion_dir) if extrusion_dir == -1: x0 = -x0 O = Point(x0, y0) # Calculate the start and end values of the circle without clipping s_ang = -3 * pi / 4 m_ang = s_ang - pi e_ang = -3 * pi / 4 # Calculate the start and end values of the arcs Ps = Point(cos(s_ang) * r, sin(s_ang) * r) + O Pm = Point(cos(m_ang) * r, sin(m_ang) * r) + O Pe = Point(cos(e_ang) * r, sin(e_ang) * r) + O # Annexes to ArcGeo class for geometry self.geo.append(ArcGeo(Ps=Ps, Pe=Pm, O=O, r=r, s_ang=s_ang, e_ang=m_ang, direction=-1)) self.geo.append(ArcGeo(Ps=Pm, Pe=Pe, O=O, r=r, s_ang=m_ang, e_ang=e_ang, direction=-1)) # Length corresponds to the length (circumference?) of the circle self.length = self.geo[-1].length+self.geo[-2].length # New starting value for the next geometry caller.start = s def get_start_end_points(self, direction=0): """ get_start_end_points() """ if not direction: punkt, angle = self.geo[0].get_start_end_points(direction) else: punkt, angle = self.geo[-1].get_start_end_points(direction) return punkt, angle dxf2gcode-20240509/dxf2gcode/dxfimport/geoent_arc.py0000644000000000000000000001310714617065372020702 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Vinzenz Schulz # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from math import sin, cos, radians, pi import logging from dxf2gcode.core.point import Point from dxf2gcode.dxfimport.classes import PointsClass from dxf2gcode.core.arcgeo import ArcGeo from dxf2gcode.globals.helperfunctions import a2u import dxf2gcode.globals.constants as c from PyQt5 import QtCore logger = logging.getLogger("DXFImport.GeoentArc") class GeoentArc(object): def __init__(self, Nr=0, caller=None): self.Typ = 'Arc' self.Nr = Nr self.Layer_Nr = 0 self.length = 0 self.geo = [] # Lesen der Geometrie # Read the geometry self.Read(caller) def __repr__(self): # how to print the object return "\nArc:" + \ "\n\tNr: %i" % self.Nr + \ "\n\tLayer Nr:%i" % self.Layer_Nr + \ "\n\t" + str(self.geo[-1]) def tr(self, string_to_translate): """ Translate a string using the QCoreApplication translation framework @param string_to_translate: a unicode string @return: the translated unicode string if it was possible to translate """ return str(QtCore.QCoreApplication.translate('GeoentArc', string_to_translate)) def App_Cont_or_Calc_IntPts(self, cont, points, i, tol): """ App_Cont_or_Calc_IntPts() """ if abs(self.length) <= tol: return False points.append(PointsClass(point_nr=len(points), geo_nr=i, Layer_Nr=self.Layer_Nr, be=self.geo[-1].Ps, en=self.geo[-1].Pe, be_cp=[], en_cp=[])) return True def Read(self, caller): """ Read() """ # Typically all Arc's are CCW extrusion_dir=1 # Assign short name lp = caller.line_pairs e = lp.index_code(0, caller.start + 1) # Assign layer s = lp.index_code(8, caller.start + 1) self.Layer_Nr = caller.Get_Layer_Nr(a2u(lp.line_pair[s].value)) # X Value s = lp.index_code(10, s + 1) x0 = float(lp.line_pair[s].value) # Y Value s = lp.index_code(20, s + 1) y0 = float(lp.line_pair[s].value) # Radius s = lp.index_code(40, s + 1) r = float(lp.line_pair[s].value) # Start angle s = lp.index_code(50, s + 1) s_ang = radians(float(lp.line_pair[s].value)) # End angle s = lp.index_code(51, s + 1) e_ang = radians(float(lp.line_pair[s].value)) # Searching for an extrusion direction s_nxt_xt = lp.index_code(230, caller.start + 1, e) # If there is a extrusion direction given flip around x-Axis if s_nxt_xt is not None: extrusion_dir = float(lp.line_pair[s_nxt_xt].value) logger.debug(self.tr('Found extrusion direction: %s') % extrusion_dir) logger.debug("x0: %s; s_ang: %s; e_ang: %s" % (x0,s_ang,e_ang)) if extrusion_dir == -1: x0 = -x0 #https://de.bettermarks.com/mathe/trigonometrie-am-einheitskreis/ if s_ang <= pi: s_ang=pi-s_ang else: s_ang=2*pi-(s_ang-pi) if e_ang <= pi: e_ang=pi-e_ang else: e_ang=2*pi-(e_ang-pi) logger.debug("x0: %s; s_ang: %s; e_ang: %s" % (x0,s_ang,e_ang)) # Calculate the start and end points of the arcs O = Point(x0, y0) Ps = Point(cos(s_ang) * r, sin(s_ang) * r) + O Pe = Point(cos(e_ang) * r, sin(e_ang) * r) + O # Anh�ngen der ArcGeo Klasse f�r die Geometrie # Annexes to ArcGeo class for geometry self.geo.append(ArcGeo(Ps=Ps, Pe=Pe, O=O, r=r, s_ang=s_ang, e_ang=e_ang, direction=extrusion_dir)) # L�nge entspricht der L�nge des Kreises # Length is the length (circumference?) of the circle self.length = self.geo[-1].length # logger.debug(self.geo[-1]) # Neuen Startwerd f�r die n�chste Geometrie zur�ckgeben # New starting value for the next geometry caller.start = s logger.debug(self) def get_start_end_points(self, direction): """ get_start_end_points() """ punkt, angle = self.geo[-1].get_start_end_points(direction) return punkt, angle dxf2gcode-20240509/dxf2gcode/dxfimport/classes.py0000664000000000000000000000767313413457762020247 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohl�ffel # Vinzenz Schulz # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ class PointsClass(object): # Initialisieren der Klasse # Initialise the class def __init__(self, point_nr=0, geo_nr=0, Layer_Nr=None, be=[], en=[], be_cp=[], en_cp=[]): self.point_nr = point_nr self.geo_nr = geo_nr self.Layer_Nr = Layer_Nr self.be = be self.en = en self.be_cp = be_cp self.en_cp = en_cp # Wie die Klasse ausgegeben wird. def __str__(self): # how to print the object return "\npoint_nr ->" + str(self.point_nr) + "\ngeo_nr ->" + str(self.geo_nr) +\ "\nLayer_Nr ->" + str(self.Layer_Nr) +\ "\nbe ->" + str(self.be) + "\nen ->" + str(self.en) +\ "\nbe_cp ->" + str(self.be_cp) + "\nen_cp ->" + str(self.en_cp) class ContourClass: # Initialisieren der Klasse # Initialise the class def __init__(self, cont_nr=0, closed=0, order=[], length=0): self.cont_nr = cont_nr self.closed = closed self.order = order self.length = length def reverse(self): """ reverse() - Reverse the contour """ self.order.reverse() for i in range(len(self.order)): if self.order[i][1] == 0: self.order[i][1] = 1 else: self.order[i][1] = 0 return def is_contour_closed(self): """ is_contour_closed() Return 1 if the contour is closed """ # Check as this is new... for j in range(len(self.order) - 1): if self.order[-1][0] == self.order[j][0]: if j == 0: self.closed = 1 return self.closed else: self.closed = 2 return self.closed return self.closed def remove_other_closed_contour(self): """ remove_other_closed_contour() """ for i in range(len(self.order)): for j in range(i + 1, len(self.order)): # print '\ni: '+str(i)+'j: '+str(j) if self.order[i][0] == self.order[j][0]: self.order = self.order[0:i] break return def calc_length(self, geos=None): """ Calculate the contour length """ # If the best is closed and first geo == last then remove if self.closed == 1 and len(self.order) > 1: if self.order[0] == self.order[-1]: del(self.order[-1]) self.length = 0 for i in range(len(self.order)): self.length += geos[self.order[i][0]].length return # New starting point, set to the beginning def set_new_startpoint(self, st_p): self.order = self.order[st_p:len(self.order)] + self.order[0:st_p] # Wie die Klasse ausgegeben wird. def __str__(self): # how to print the object return '\ncont_nr ->' + str(self.cont_nr) + '\nclosed ->' + str(self.closed) \ + '\norder ->' + str(self.order) + '\nlength ->' + str(self.length) dxf2gcode-20240509/dxf2gcode/dxfimport/biarc.py0000664000000000000000000002020514011526166017642 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Vinzenz Schulz # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from __future__ import division from math import sin, cos, pi, ceil from dxf2gcode.core.linegeo import LineGeo from dxf2gcode.core.arcgeo import ArcGeo from dxf2gcode.core.point import Point class BiarcClass(object): """ BiarcClass Class for the generation of Biarc Section. It is used for the Ellipse fitting and the Nurbs conversion to Line and Arc segments. """ def __init__(self, Ps=Point(), tan_a=0.0, Pb=Point, tan_b=0.0, min_r=1e-6): """ Std. method to initialise the class. @param Ps: Start Point for the Biarc @param tan_a: Tangent of the Start Point @param Pb: End Point of the Biarc @param tan_b: Tangent of the End Point @param min_r: The minimum radius of a arc section. """ min_len = 1e-12 # Min Abstand f�r doppelten Punkt / Minimum clearance for double point min_alpha = 1e-4 # Winkel ab welchem Gerade angenommen wird inr rad / Angle for which it is assumed straight inr rad max_r = 5e3 # Max Radius ab welchem Gerade angenommen wird (5m) / Max radius is assumed from which line (5m) min_r = min_r # Min Radius ab welchem nichts gemacht wird / Min radius beyond which nothing is done self.Ps = Ps self.tan_a = tan_a self.Pb = Pb self.tan_b = tan_b self.l = 0.0 self.shape = None self.geos = [] self.k = 0.0 # Errechnen der Winkel, L�nge und Shape # Calculate the angle, length and shape norm_angle, self.l = self.calc_normal(self.Ps, self.Pb) alpha, beta, self.theta, self.shape = self.calc_diff_angles(norm_angle, self.tan_a, self.tan_b, min_alpha) if self.l < min_len: self.shape = "Zero" elif self.shape == "LineGeo": # Erstellen der Geometrie # Create the geometry self.geos.append(LineGeo(self.Ps, self.Pb)) else: # Berechnen der Radien, Mittelpunkte, Zwichenpunkt # Calculate the radii, midpoints Zwichenpunkt r1, r2 = self.calc_r1_r2(self.l, alpha, beta, self.theta) if abs(r1) > max_r or abs(r2) > max_r: # Erstellen der Geometrie # Create the geometry self.shape = "LineGeo" self.geos.append(LineGeo(self.Ps, self.Pb)) return # elif abs(r1) < min_r or abs(r2) < min_r: # self.shape = "Zero" # return O1, O2, k = self.calc_O1_O2_k(r1, r2, self.tan_a, self.theta) # Berechnen der Start und End- Angles f�r das drucken # Calculate the start and end angles for the print s_ang1, e_ang1 = self.calc_s_e_ang(self.Ps, O1, k) s_ang2, e_ang2 = self.calc_s_e_ang(k, O2, self.Pb) # Berechnen der Richtung und der Extend # Calculate the direction and extent dir_ang1 = (tan_a - s_ang1) % (-2 * pi) dir_ang1 -= ceil(dir_ang1 / pi) * (2 * pi) dir_ang2 = (tan_b - e_ang2) % (-2 * pi) dir_ang2 -= ceil(dir_ang2 / pi) * (2 * pi) # Erstellen der Geometrien # Create the geometries self.geos.append(ArcGeo(Ps=self.Ps, Pe=k, O=O1, r=r1, s_ang=s_ang1, e_ang=e_ang1, direction=dir_ang1)) self.geos.append(ArcGeo(Ps=k, Pe=self.Pb, O=O2, r=r2, s_ang=s_ang2, e_ang=e_ang2, direction=dir_ang2)) def __repr__(self): s = "\nBiarc Shape: %s" % self.shape +\ "\nPs : %s; Tangent: %0.3f" % (self.Ps, self.tan_a) +\ "\nPb : %s; Tangent: %0.3f" % (self.Pb, self.tan_b) +\ "\ntheta: %0.3f, l: %0.3f" % (self.theta, self.l) for geo in self.geos: s += str(geo) return s def calc_O1_O2_k(self, r1, r2, tan_a, theta): """ calc_O1_O2_k() """ # print("r1: %0.3f, r2: %0.3f, tan_a: %0.3f, theta: %0.3f" %(r1,r2,tan_a,theta)) # print("N1: x: %0.3f, y: %0.3f" %(-sin(tan_a), cos(tan_a))) # print("V: x: %0.3f, y: %0.3f" %(-sin(theta+tan_a),cos(theta+tan_a))) O1 = Point(self.Ps.x - r1 * sin(tan_a), self.Ps.y + r1 * cos(tan_a)) k = Point(self.Ps.x + r1 * (-sin(tan_a) + sin(theta + tan_a)), self.Ps.y + r1 * (cos(tan_a) - cos(tan_a + theta))) O2 = Point(k.x + r2 * (-sin(theta + tan_a)), k.y + r2 * (cos(theta + tan_a))) return O1, O2, k def calc_normal(self, Ps, Pb): """ calc_normal() """ norm_angle = Ps.norm_angle(Pb) l = Ps.distance(Pb) return norm_angle, l def calc_diff_angles(self, norm_angle, tan_a, tan_b, min_alpha): """ calc_diff_angles() """ # print("Norm angle: %0.3f, tan_a: %0.3f, tan_b %0.3f" %(norm_angle,tan_a,tan_b)) alpha = (norm_angle - tan_a) beta = (tan_b - norm_angle) alpha, beta = self.limit_angles(alpha, beta) if alpha * beta > 0.0: shape = "C-shaped" theta = alpha elif abs(alpha - beta) < min_alpha: shape = "LineGeo" theta = alpha else: shape = "S-shaped" theta = (3 * alpha - beta) / 2 return alpha, beta, theta, shape def limit_angles(self, alpha, beta): """ limit_angles() """ # print("limit_angles: alpha: %s, beta: %s" %(alpha,beta)) if alpha < -pi: alpha += 2 * pi if alpha > pi: alpha -= 2 * pi if beta < -pi: beta += 2 * pi if beta > pi: beta -= 2 * pi while pi < (alpha - beta): alpha -= 2 * pi while -pi > (alpha - beta): alpha += 2 * pi # print(" -->> alpha: %s, beta: %s" %(alpha,beta)) return alpha, beta def calc_r1_r2(self, l, alpha, beta, theta): """ calc_r1_r2() """ # print("alpha: %s, beta: %s, theta: %s" %(alpha,beta,theta)) r1 = (l / (2 * sin((alpha + beta) / 2)) * sin((beta - alpha + theta) / 2) / sin(theta / 2)) r2 = (l / (2 * sin((alpha + beta) / 2)) * sin((2 * alpha - theta) / 2) / sin((alpha + beta - theta) / 2)) return r1, r2 def calc_s_e_ang(self, P1, O, P2): """ calc_s_e_ang() """ s_ang = O.norm_angle(P1) e_ang = O.norm_angle(P2) return s_ang, e_ang def get_biarc_fitting_error(self, Pt): """ get_biarc_fitting_error() """ # Query in which segment of the circle the point is: w1 = self.geos[0].O.norm_angle(Pt) if (w1 >= min([self.geos[0].s_ang, self.geos[0].e_ang]))and\ (w1 <= max([self.geos[0].s_ang, self.geos[0].e_ang])): diff = self.geos[0].O.distance(Pt) - abs(self.geos[0].r) else: diff = self.geos[1].O.distance(Pt) - abs(self.geos[1].r) return abs(diff) dxf2gcode-20240509/dxf2gcode/dxfimport/__init__.py0000664000000000000000000000000113413457762020323 0ustar rootroot dxf2gcode-20240509/dxf2gcode/core/0000755000000000000000000000000014617100260015116 5ustar rootrootdxf2gcode-20240509/dxf2gcode/core/stmove.py0000644000000000000000000003102714617065372017026 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Vinzenz Schulz # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from __future__ import division from math import sin, cos, pi, sqrt from copy import deepcopy #for dumps from inspect import getmembers from pprint import pprint import dxf2gcode.globals.globals as g from dxf2gcode.core.linegeo import LineGeo from dxf2gcode.core.arcgeo import ArcGeo from dxf2gcode.core.point import Point from dxf2gcode.core.intersect import Intersect from dxf2gcode.core.shape import Geos from dxf2gcode.core.shape import Shape from dxf2gcode.core.pocketmill import PocketMill from dxf2gcode.core.shapeoffset import * import logging logger = logging.getLogger('core.stmove') class StMove(object): """ This Function generates the StartMove for each shape. It also performs the Plotting and Export of this moves. It is linked to the shape of its parent """ # only need default arguments here because of the change of usage with super in QGraphicsLineItem def __init__(self, shape=None): if shape is None: return self.shape = shape self.updateShape() def __repr__(self): return "StMove(shape %d start %s angle %s end %s)" % \ (self.shape.nr, str(self.start), str(self.angle), str(self.end)) def append(self, geo): # we don't want to additional scale / rotate the stmove geo # so no geo.make_abs_geo(self.shape.parentEntity) geo.make_abs_geo() self.geos.append(geo) def updateShape(self): """ Update start move after shape is changed. """ self.start, self.angle = self.shape.get_start_end_points(True, True) self.end = self.start self.geos = Geos([]) logging.debug("Updating the Start Move / Offset Geometry") self.make_start_moves() def make_start_moves(self): """ This function called to create the start move. It will be generated based on the given values for start and angle. """ self.geos = Geos([]) if g.config.machine_type == 'drag_knife': self.make_swivelknife_move() return # Get the start rad. and the length of the line segment at begin. start_rad = self.shape.parentLayer.start_radius # Get tool radius based on tool diameter. tool_rad = self.shape.parentLayer.getToolRadius() # Calculate the starting point with and without compensation. start = self.start angle = self.angle ### drill cutted from here if self.shape.Drill == True: if isinstance(self.shape.geos[0], ArcGeo): start = self.shape.geos[0].abs_geo.O self.append(RapidPos(start)) Ps_ein = start.get_arc_point(0, tool_rad) # generate the start rad. and append it. circle = ArcGeo(Ps=Ps_ein, Pe=Ps_ein, O=start, r=tool_rad, direction=1) self.append(circle) elif self.shape.cut_cor == 40: #if self.shape.Pocket == False: self.append(RapidPos(start)) elif self.shape.cut_cor != 40 and not g.config.vars.Cutter_Compensation["done_by_machine"]: logging.debug("We have custom offset by tool") toolwidth = self.shape.parentLayer.getToolRadius() if self.shape.cut_cor == 41 and self.shape.cw is True: offtype = "out" elif self.shape.cut_cor == 41 and self.shape.cw is False: offtype = "in" elif self.shape.cut_cor == 42 and self.shape.cw is False: offtype = "out" elif self.shape.cut_cor == 42 and self.shape.cw is True: offtype = "in" else: offtype = "out" Warning("should not be here") logger.debug("Shape.cw %s; shape.cut_cor %i; Offset in direction: %s" %(self.shape.cw, self.shape.cut_cor,offtype)) offshape = offShapeClass(parent = self.shape, offset = toolwidth, offtype = offtype) if len(offshape.rawoff) > 0: start, angle = offshape.rawoff[0].get_start_end_points(True, True) self.append(RapidPos(start)) self.geos += offshape.rawoff # Cutting Compensation Left elif self.shape.cut_cor == 41: # Center of the Starting Radius. Oein = start.get_arc_point(angle + pi/2, start_rad + tool_rad) # Start Point of the Radius Ps_ein = Oein.get_arc_point(angle + pi, start_rad + tool_rad) # Start Point of the straight line segment at begin. Pg_ein = Ps_ein.get_arc_point(angle + pi/2, start_rad) # Get the dive point for the starting contour and append it. start_ein = Pg_ein.get_arc_point(angle, tool_rad) self.append(RapidPos(start_ein)) # generate the Start Line and append it including the compensation. start_line = LineGeo(start_ein, Ps_ein) self.append(start_line) # generate the start rad. and append it. start_rad = ArcGeo(Ps=Ps_ein, Pe=start, O=Oein, r=start_rad + tool_rad, direction=1) self.append(start_rad) # Cutting Compensation Right elif self.shape.cut_cor == 42: # Center of the Starting Radius. Oein = start.get_arc_point(angle - pi/2, start_rad + tool_rad) # Start Point of the Radius Ps_ein = Oein.get_arc_point(angle + pi, start_rad + tool_rad) # Start Point of the straight line segment at begin. Pg_ein = Ps_ein.get_arc_point(angle - pi/2, start_rad) # Get the dive point for the starting contour and append it. start_ein = Pg_ein.get_arc_point(angle, tool_rad) self.append(RapidPos(start_ein)) # generate the Start Line and append it including the compensation. start_line = LineGeo(start_ein, Ps_ein) self.append(start_line) # generate the start rad. and append it. start_rad = ArcGeo(Ps=Ps_ein, Pe=start, O=Oein, r=start_rad + tool_rad, direction=0) self.append(start_rad) # Pocket Milling - draw toolpath if self.shape.Pocket == True: pocket = PocketMill(self) pocket.createLines() def make_swivelknife_move(self): """ Set these variables for your tool and material @param offset: knife tip distance from tool centerline. The radius of the tool is used for this. """ offset = self.shape.parentLayer.getToolRadius() drag_angle = self.shape.drag_angle startnorm = offset*Point(1, 0) # TODO make knife direction a config setting prvend, prvnorm = Point(), Point() first = True for geo in self.shape.geos.abs_iter(): if isinstance(geo, LineGeo): geo_b = deepcopy(geo) if first: first = False prvend = geo_b.Ps + startnorm prvnorm = startnorm norm = offset * (geo_b.Pe - geo_b.Ps).unit_vector() geo_b.Ps += norm geo_b.Pe += norm if not prvnorm == norm: direction = prvnorm.to3D().cross_product(norm.to3D()).z swivel = ArcGeo(Ps=prvend, Pe=geo_b.Ps, r=offset, direction=direction) swivel.drag = drag_angle < abs(swivel.ext) logger.debug(swivel) self.append(swivel) logger.debug(geo_b) self.append(geo_b) prvend = geo_b.Pe prvnorm = norm elif isinstance(geo, ArcGeo): geo_b = deepcopy(geo) if first: first = False prvend = geo_b.Ps + startnorm prvnorm = startnorm if geo_b.ext > 0.0: norma = offset*Point(cos(geo_b.s_ang+pi/2), sin(geo_b.s_ang+pi/2)) norme = Point(cos(geo_b.e_ang+pi/2), sin(geo_b.e_ang+pi/2)) else: norma = offset*Point(cos(geo_b.s_ang-pi/2), sin(geo_b.s_ang-pi/2)) norme = Point(cos(geo_b.e_ang-pi/2), sin(geo_b.e_ang-pi/2)) geo_b.Ps += norma if norme.x > 0: geo_b.Pe = Point(geo_b.Pe.x+offset/(sqrt(1+(norme.y/norme.x)**2)), geo_b.Pe.y+(offset*norme.y/norme.x)/(sqrt(1+(norme.y/norme.x)**2))) elif norme.x == 0: geo_b.Pe = Point(geo_b.Pe.x, geo_b.Pe.y) else: geo_b.Pe = Point(geo_b.Pe.x-offset/(sqrt(1+(norme.y/norme.x)**2)), geo_b.Pe.y-(offset*norme.y/norme.x)/(sqrt(1+(norme.y/norme.x)**2))) if prvnorm != norma: direction = prvnorm.to3D().cross_product(norma.to3D()).z swivel = ArcGeo(Ps=prvend, Pe=geo_b.Ps, r=offset, direction=direction) swivel.drag = drag_angle < abs(swivel.ext) logger.debug(swivel) self.append(swivel) prvend = geo_b.Pe prvnorm = offset*norme if -pi < geo_b.ext < pi: swivel = ArcGeo(Ps=geo_b.Ps, Pe=geo_b.Pe, r=sqrt(geo_b.r ** 2 + offset ** 2), direction=geo_b.ext) logger.debug(swivel) self.append(swivel) else: geo_b = ArcGeo(Ps=geo_b.Ps, Pe=geo_b.Pe, r=sqrt(geo_b.r**2+offset**2), direction=-geo_b.ext) geo_b.ext = -geo_b.ext logger.debug(geo_b) self.append(geo_b) # TODO support different geos, or disable them in the GUI # else: # self.append(copy(geo)) if not prvnorm == startnorm: direction = prvnorm.to3D().cross_product(startnorm.to3D()).z swivel = ArcGeo(Ps=prvend, Pe=prvend - prvnorm + startnorm, r=offset, direction=direction) swivel.drag = drag_angle < abs(swivel.ext) logger.debug(swivel) self.append(swivel) self.geos.insert(0, RapidPos(self.geos.abs_el(0).Ps)) self.geos[0].make_abs_geo() def make_path(self, drawHorLine, drawVerLine): for geo in self.geos.abs_iter(): drawVerLine(self.shape, geo.get_start_end_points(True)) geo.make_path(self.shape, drawHorLine) if len(self.geos): drawVerLine(self.shape, geo.get_start_end_points(False)) class RapidPos(Point): def __init__(self, point): Point.__init__(self, point.x, point.y) self.abs_geo = None def get_start_end_points(self, start_point, angles=None): if angles is None: return self elif angles: return self, 0 else: return self, Point(0, -1) if start_point else Point(0, -1) def make_abs_geo(self, parent=None): """ Generates the absolute geometry based on itself and the parent. This is done for rotating and scaling purposes """ self.abs_geo = RapidPos(self.rot_sca_abs(parent=parent)) def make_path(self, caller, drawHorLine): pass def Write_GCode(self, PostPro): """ Writes the GCODE for a rapid position. @param PostPro: The PostProcessor instance to be used @return: Returns the string to be written to a file. """ return PostPro.rap_pos_xy(self) dxf2gcode-20240509/dxf2gcode/core/shapeoffset.py0000644000000000000000000022615214617065372020025 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Vinzenz Schulz # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from __future__ import division from math import pi, sqrt, sin, cos from copy import deepcopy import logging from dxf2gcode.core.linegeo import LineGeo from dxf2gcode.core.arcgeo import ArcGeo from dxf2gcode.core.point import Point from dxf2gcode.core.shape import Geos from dxf2gcode.core.shape import Shape logger = logging.getLogger('core.shapeoffset') eps = 1e-6 min_length=0.01 class offShapeClass(Shape): """ This Class is used to generate The fofset aof a shape according to: "A pair-wise offset Algorithm for 2D point sequence curve" http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.101.8855 """ def __init__(self, parent=None, offset=1, offtype='in'): """ Standard method to initialize the class @param closed: Gives information about the shape, when it is closed this value becomes 1. Closed means it is a Polygon, otherwise it is a Polyline @param length: The total length of the shape including all geometries @param geos: The list with all geometries included in the shape. May also contain arcs. These will be reflected by multiple lines in order to easy calclations. """ super(offShapeClass, self).__init__(nr=parent.nr, closed=parent.closed, geos=[]) #logger.debug("The shape is: %s" % (self.closed)) self.offset = offset self.offtype = offtype self.segments = Geos() self.rawoff = [] self.geos_preprocessing(parent) self.make_segment_types() nextConvexPoint = [ e for e in self.segments if isinstance(e, ConvexPoint)] # logger.debug(nextConvexPoint) # nextConvexPoint=[nextConvexPoint[31]] self.counter = 0 while len(nextConvexPoint): # [self.convex_vertex[-1]]: convex_vertex_nr = self.segments.index(nextConvexPoint[0]) try: forward, backward = self.PairWiseInterferenceDetection( convex_vertex_nr + 1, convex_vertex_nr - 1) except: logger.warning("Not able to finish cutter compensation without error - Skipping it") return break if forward is None: return break if (backward == 0 and forward == (len(self.segments) - 1) and self.closed): self.segments = Geos() break # Make Raw offset curve of forward and backward segment fw_rawoff_seg = self.make_rawoff_seg(self.segments[forward]) bw_rawoff_seg = self.make_rawoff_seg(self.segments[backward]) # Intersect the two segements iPoint = fw_rawoff_seg.find_inter_point(bw_rawoff_seg, typ="TIP") if iPoint is None: logger.debug("forward: %s, backward: %s, iPoint: %s" % ( forward, backward, iPoint)) logger.debug("fw_rawoff_seg: %s, bw_rawoff_seg: %s" % (fw_rawoff_seg, bw_rawoff_seg)) logger.warning("No intersection found?!") self.segments = Geos() return if isinstance(iPoint, list): logger.debug("forward: %s, backward: %s, iPoint: %s" % ( forward, backward, iPoint)) logger.debug("fw_rawoff_seg: %s, bw_rawoff_seg: %s" % (fw_rawoff_seg, bw_rawoff_seg)) logger.debug(iPoint[0]) logger.debug(iPoint[1]) logger.warning("Found more then one intersection points?! Using first one") iPoint = iPoint[0] # Remove the LIR from the PS Curce self.remove_LIR(forward, backward, iPoint) nextConvexPoint = [ e for e in self.segments if isinstance(e, ConvexPoint)] # logger.debug(nextConvexPoint) # nextConvexPoint=[] # logger.debug(nextConvexPoint) for seg in self.segments: self.rawoff += [self.make_rawoff_seg(seg)] self.geos_postprocessing(eps*5) #SweepLine(geos=self.rawoff, closed=self.closed) # If parent shape is ccw, switch direction if parent.cw != self.cw: self.reverse() def __repr__(self): """ Standard method to print the object @return: A string """ return "\nnr: %i" % self.nr + \ "\nclosed: %s" % self.closed + \ "\ngeos: %s" % self.geos + \ "\nofftype: %s" % self.offtype + \ "\noffset: %s" % self.offset + \ "\nsegments: %s" % self.segments + \ "\nrawoff %s" % self.rawoff def reverse(self, geos=None): super().reverse(geos) # If working with own geometry, toggle rawoff direction too if not geos: self.rawoff.reverse() for geo in self.rawoff: geo.reverse() def geos_preprocessing(self, parent): """ Do all the preprocessing required in order to have working offset algorithm. @param parent: The parent shape including the geometries to be offsetted. """ logging.debug("Doing Preprocessing") self.geos = Geos([]) if self.closed: last_Pe = parent.geos[-1].Pe.rot_sca_abs(parent=parent.parentEntity) else: last_Pe = None for geo in parent.geos: if isinstance(geo, LineGeo): new_geo = OffLineGeo(geo=geo, parent=parent.parentEntity) elif isinstance(geo, ArcGeo): new_geo = OffArcGeo(geo=geo, parent=parent.parentEntity) else: logger.error("Should not be here") if last_Pe is not None: # logger.debug("Current distance: %s" % # new_geo.Ps.distance(last_Pe)) if new_geo.Ps.distance(last_Pe) > 0.0: new_geo.match_Ps_to_Pe(last_Pe) # logger.debug("New distance: %s" % # new_geo.Ps.distance(last_Pe)) last_Pe = new_geo.Pe self.geos.append(new_geo) self.make_shape_ccw() self.join_colinear_lines() def geos_postprocessing(self, min_length): """ Do all the postprocessing required in order to have working sweepline algorithm. @param min_length: The min_length must be bigger ghen eps, otherwise potential errors may occure. """ #FIXME pass def make_segment_types(self): """ This function is called in order to generate the segements according to Definiton 2. An edge (line) is a linear segment and a reflex vertex is is reflex segment. Colinear lines are assumed to be removed prior to the segment type definition. """ # Do only if more then 2 geometies # if len(self.geos) < 2: # return # Start with first Vertex if the line is closed if self.closed: start = 0 else: start = 1 geo1 = self.geos[0] if isinstance(geo1, LineGeo): geo1.start_normal = geo1.Ps.get_normal_vector(geo1.Pe) geo1.end_normal = geo1.Ps.get_normal_vector(geo1.Pe) else: geo1.start_normal = geo1.O.unit_vector(geo1.Ps, r=1) geo1.end_normal = geo1.O.unit_vector(geo1.Pe, r=1) if geo1.ext < 0: geo1.start_normal = geo1.start_normal * -1 geo1.end_normal = geo1.end_normal * -1 self.segments += [geo1] for i in range(start, len(self.geos)): geo1 = self.geos[i - 1] geo2 = self.geos[i] if i == start: if isinstance(geo1, LineGeo): geo1.start_normal = geo1.Ps.get_normal_vector(geo1.Pe) geo1.end_normal = geo1.Ps.get_normal_vector(geo1.Pe) else: geo1.start_normal = geo1.O.unit_vector(geo1.Ps, r=1) geo1.end_normal = geo1.O.unit_vector(geo1.Pe, r=1) if geo1.ext < 0: geo1.start_normal = geo1.start_normal * -1 geo1.end_normal = geo1.end_normal * -1 if isinstance(geo2, LineGeo): geo2.start_normal = geo2.Ps.get_normal_vector(geo2.Pe) geo2.end_normal = geo2.Ps.get_normal_vector(geo2.Pe) elif isinstance(geo2, ArcGeo): geo2.start_normal = geo2.O.unit_vector(geo2.Ps, r=1) geo2.end_normal = geo2.O.unit_vector(geo2.Pe, r=1) if geo2.ext < 0: geo2.start_normal = geo2.start_normal * -1 geo2.end_normal = geo2.end_normal * -1 if ((isinstance(geo2, ArcGeo)) and ((self.offtype == "out" and geo2.ext > 0) or (self.offtype == "in" and geo2.ext < 0)) and ((geo2.r - abs(self.offset)) < -eps)): newgeo2 = ConvexPoint(geo2.O.x, geo2.O.y) newgeo2.start_normal = geo2.start_normal newgeo2.end_normal = geo2.end_normal geo2 = newgeo2 if (((geo1.Pe.ccw(geo1.Pe + geo1.end_normal, geo1.Pe + geo1.end_normal + geo2.start_normal) == 1) and self.offtype == "in") or (geo1.Pe.ccw(geo1.Pe + geo1.end_normal, geo1.Pe + geo1.end_normal + geo2.start_normal) == -1 and self.offtype == "out")): reflexPe = OffPoint(x=geo1.Pe.x, y=geo1.Pe.y) reflexPe.start_normal = geo1.end_normal reflexPe.end_normal = geo2.start_normal self.segments += [reflexPe, geo2] elif (geo1.Pe.ccw(geo1.Pe + geo1.end_normal, geo1.Pe + geo1.end_normal + geo2.start_normal) == 0): self.segments += [geo2] # Add the linear segment which is a line connecting 2 vertices else: self.segments += [ConvexPoint(geo1.Pe.x, geo1.Pe.y), geo2] def make_rawoff_seg(self, seg): """ This function returns the rawoffset of a segement. A line for a line and a circle for a reflex segement. @param segment_nr: The nr of the segement for which the rawoffset segement shall be generated @ return: Returns the rawoffsetsegement of the defined segment """ # seg=self.segments[segment_nr] if self.offtype == "out": offset = -abs(self.offset) else: offset = abs(self.offset) # if segement 1 is inverted change End Point if isinstance(seg, OffLineGeo): Ps = seg.Ps + seg.start_normal * offset Pe = seg.Pe + seg.end_normal * offset return OffLineGeo(Ps, Pe) elif isinstance(seg, OffPoint): Ps = seg + seg.start_normal * offset Pe = seg + seg.end_normal * offset return OffArcGeo(Ps=Ps, Pe=Pe, O=deepcopy(seg), r=self.offset, direction=offset) elif isinstance(seg, OffArcGeo): Ps = seg.Ps + seg.start_normal * offset Pe = seg.Pe + seg.end_normal * offset # logger.debug(seg.Ps) # logger.debug(seg.Pe) # logger.debug(seg.start_normal) # logger.debug(seg.end_normal) if seg.ext > 0: return OffArcGeo(Ps=Ps, Pe=Pe, O=seg.O, r=seg.r + offset, direction=seg.ext) else: return OffArcGeo(Ps=Ps, Pe=Pe, O=seg.O, r=seg.r - offset, direction=seg.ext) elif isinstance(seg, ConvexPoint): Ps = seg + seg.start_normal * offset Pe = seg + seg.end_normal * offset return OffArcGeo(Ps=Ps, Pe=Pe, O=deepcopy(seg), r=self.offset, direction=offset) else: logger.error("Unsupportet Object type: %s" % type(seg)) def interfering_full(self, segment1, direction, segment2): """ Check if the Endpoint (dependent on direction) of segment 1 is interfering with segment 2 Definition according to Definition 6 @param segment 1: The first segment @param direction: The direction of the line 1, as given -1 reversed @param segment 2: The second segment to be checked @ return: Returns True or False """ # if isinstance(segment1, ConvexPoint): # logger.debug("Should not be here") # return False # else: # offGeo = self.make_rawoff_seg(segment1) # self.interferingshapes += [offGeo] # # if isinstance(segment1, OffPoint): # offGeo = segment1 # elif direction == 1: # offGeo = segment1.Pe # elif direction == -1: # offGeo = segment1.Ps # # # logger.debug(offGeo) # logger.debug("Full distance: %s" % segment2.distance(offGeo)) # If the distance from the Line to the Center of the Tangential Circle # is smaller then the radius we have an intersection # return segment2.distance(offGeo) <= abs(self.offset) + eps # if segement 1 is inverted change End Point if isinstance(segment1, OffLineGeo) and direction == 1: Pe = segment1.Pe elif isinstance(segment1, OffLineGeo) and direction == -1: Pe = segment1.Ps elif isinstance(segment1, ConvexPoint): return False elif isinstance(segment1, OffPoint): Pe = segment1 elif isinstance(segment1, OffArcGeo) and direction == 1: Pe = segment1.Pe elif isinstance(segment1, OffArcGeo) and direction == -1: Pe = segment1.Ps else: logger.error("Unsupportet Object type: %s" % type(segment1)) # if we cut outside reverse the offset if self.offtype == "out": offset = -abs(self.offset) else: offset = abs(self.offset) if direction == 1: distance = segment2.distance(Pe + segment1.end_normal * offset) else: distance = segment2.distance(Pe + segment1.start_normal * offset) # logger.debug("Full distance: %s" % distance) # If the distance from the Segment to the Center of the Tangential # Circle is smaller then the radius we have an intersection return distance <= abs(offset) + eps def interfering_partly(self, segment1, direction, segment2): """ Check if any tangential circle of segment 1 is interfering with segment 2. Definition according to Definition 5 @param segment 1: The first Line @param direction: The direction of the segment 1, as given -1 reversed @param segment 2: The second line to be checked @ return: Returns True or False """ if isinstance(segment1, ConvexPoint): logger.debug("Should not be here") logger.debug(segment1) return False # offGeo = self.make_rawoff_seg(segment1) else: offGeo = self.make_rawoff_seg(segment1) # # logger.debug(offGeo) # logger.debug("Partly distance: %s" % segment2.distance(offGeo)) # If the distance from the Line to the Center of the Tangential Circle # is smaller then the radius we have an intersection return segment2.distance(offGeo) <= abs(self.offset) + eps def Interfering_relation(self, segment1, segment2): """ Check the interfering relation between two segements (segment1 and segment2). Definition acccording to Definition 6 @param segment1: The first segment (forward) @param segment2: The second segment (backward) @return: Returns one of [full, partial, reverse, None] interfering relations for both segments """ # Check if segments are equal if segment1 == segment2: return None, None if self.interfering_full(segment1, 1, segment2): L1_status = "full" elif self.interfering_partly(segment1, 1, segment2): L1_status = "partial" else: L1_status = "reverse" if self.interfering_full(segment2, -1, segment1): L2_status = "full" elif self.interfering_partly(segment2, -1, segment1): L2_status = "partial" else: L2_status = "reverse" # logger.debug("Start Status: L1_status: %s,L2_status: %s" # % (L1_status, L2_status)) return [L1_status, L2_status] def PairWiseInterferenceDetection(self, forward, backward,): """ Returns the first forward and backward segment nr. for which both interfering conditions are partly. @param foward: The nr of the first forward segment @param backward: the nr. of the first backward segment @return: forward, backward """ val = 2000 logger.debug(len(self.segments)) # self.counter = 0 try: SPoint=self.segments[forward].Ps except: logger.warning("Cannot do cutter compensation, please check file / diamter of tool") return L1_status, L2_status = "full", "full" # Repeat until we reached the Partial-interfering-relation while not(L1_status == "partial" and L2_status == "partial"): self.interferingshapes = [] self.counter += 1 if forward >= len(self.segments): forward = 0 segment1 = self.segments[forward] segment2 = self.segments[backward] # logger.debug("segment1: %s" % segment1) # logger.debug("segment2: %s" % segment2) if isinstance(segment1, ConvexPoint): forward += 1 if forward >= len(self.segments): forward = 0 segment1 = self.segments[forward] # logger.debug("Forward ConvexPoint") if isinstance(segment2, ConvexPoint): backward -= 1 segment2 = self.segments[backward] [L1_status, L2_status] = self.Interfering_relation( segment1, segment2) # logger.debug("Start Status: L1_status: %s,L2_status: %s" # % (L1_status, L2_status)) """ The reverse interfering segment is replaced by the first non-reverse-interfering segment along it's tracking direction """ if L1_status == "reverse": while L1_status == "reverse": self.counter += 1 # logger.debug(self.counter) if self.counter > val: break if self.counter >= val: self.interferingshapes = [] forward += 1 if forward >= len(self.segments): forward = 0 segment1 = self.segments[forward] if isinstance(segment1, ConvexPoint): forward += 1 if forward >= len(self.segments): forward = 0 segment1 = self.segments[forward] # logger.debug("Forward ConvexPoint") # logger.debug("Reverse Replace: forward: %s, backward: %s" # % (forward, backward)) [L1_status, L2_status] = self.Interfering_relation( segment1, segment2) # logger.debug("Checking: forward: %s, backward: %s" # %(forward, backward)) # logger.debug("Replace Rev.: L1_status: %s,L2_status: %s" # %(L1_status,L2_status)) elif L2_status == "reverse": while L2_status == "reverse": self.counter += 1 # logger.debug(self.counter) if self.counter > val: break if self.counter >= val: self.interferingshapes = [] backward -= 1 # logger.debug("Reverse Replace: forward: %s, backward: %s" # % (forward, backward)) segment2 = self.segments[backward] if isinstance(segment2, ConvexPoint): backward -= 1 segment2 = self.segments[backward] # logger.debug("Backward ConvexPoint") [L1_status, L2_status] = self.Interfering_relation( segment1, segment2) # logger.debug("Checking: forward: %s, backward: %s" # % (forward, backward)) # logger.debug("Replace Rev.: L1_status: %s,L2_status: %s" # % (L1_status, L2_status)) """ Full interfering segment is replaced by the nexst segemnt along the tracking direction. """ if L1_status == "full" and (L2_status == "partial" or L2_status == "full"): forward += 1 elif L2_status == "full" and (L1_status == "partial" or L1_status == "partial"): backward -= 1 # If The begin end point is the end end point we are done. if L1_status is None and L2_status is None: logger.debug("Begin = End; Remove all; SPoint: %s", SPoint) return len(self.segments) - 1, 0 # logger.debug(self.counter) # logger.debug("L1_status: %s,L2_status: # %s" %(L1_status,L2_status)) if self.counter == val: self.interferingshapes = [] if self.counter > val: # 26: logger.error("No partial - partial status found") return None, None # logger.debug("Result: forward: %s, backward: %s" # %(forward, backward)) return forward, backward def remove_LIR(self, forward, backward, iPoint): """ The instance is used to remove the LIR from the PS curve. @param forward: The forward segment of the LIR @param backward: The backward segement of the LIR @param iPoint: The Intersection point of the LIR """ if backward > forward: pop_range = self.segments[backward + 1:len(self.segments)] pop_range += self.segments[0:forward] elif backward < 0: pop_range = self.segments[ len(self.segments) + backward + 1:len(self.segments)] pop_range += self.segments[0:forward] else: pop_range = self.segments[backward + 1:forward] if self.offtype == "out": rev = True else: rev = False # Modify the first segment and the last segment of the LIR self.segments[forward] = self.segments[ forward].trim(Point=iPoint, dir=1, rev_norm=rev) self.segments[backward] = self.segments[ backward].trim(Point=iPoint, dir=-1, rev_norm=rev) # Remove the segments which are inbetween the LIR self.segments = Geos([x for x in self.segments if x not in pop_range]) class SweepLine: def __init__(self, geos=[], closed=True): """ The init function of the SweepLine Class. It is calling a sweep line algorithm in order to find all intersection of the given geometries @param geos: A list with geometries in their ordered structure. @param closed: If the geometries are closed (Polyline or Polygon) """ self.geos = [] self.found =[] self.closed = closed self.sweep_array = [] self.intersections = [] self.add_to_sweep_array(geos, self.closed) #logger.debug("Sweep Array created") self.search_intersections() logger.debug(self.found) for ele in self.found: logger.debug(ele) def __repr__(self): """ Standard method to print the object @return: A string """ sweep_array_order = [] for element in self.sweep_array: add_array = [] rem_array = [] swoop_array = [] for add_ele in element.add: add_array.append(add_ele.nr) for rem_ele in element.remove: rem_array.append(rem_ele.nr) for swoop_ele in element.swoop: swoop_array.append(swoop_ele) sweep_array_order += [[element.Point.x, element.Point.y], add_array, rem_array, swoop_array] return ('\nlen(geos): %i' % len(self.geos)) + \ ('\nclosed: %i' % self.closed) + \ ('\ngeos: %s' % self.geos) + \ ('\nsweep_array_order: %s' % sweep_array_order) def add_to_sweep_array(self, geos=[], closed=True): """ This instance adds the given geometries to the sweep array. If there are already some defined it will just continue to add them. This may be used to get the intersection of two shapes @param: the geometries to be added @param: if these geometries are closed shape or not """ from functools import cmp_to_key sweep_array = [] self.geos += geos for geo_nr in range(len(geos)): geo = geos[geo_nr] geo.iPoints = [] y_val = (geo.BB.Ps.y + geo.BB.Pe.y) / 2 geo.neighbors = [] geo.nr = geo_nr geo.Point = Point(x=geo.BB.Ps.x, y=y_val) # Add the neighbors before the geometrie if geo_nr == 0 and closed: geo.neighbors.append(geos[geo_nr - 1]) else: geo.neighbors.append(geos[geo_nr - 1]) # Add the neighbors after the geometrie if geo_nr == len(geos) - 1 and closed: geo.neighbors.append(geos[0]) else: geo.neighbors.append(geos[geo_nr + 1]) y_val = (geo.BB.Ps.y + geo.BB.Pe.y) / 2 sweep_array.append( SweepElement(Point=geo.Point, add=[geo], remove=[])) sweep_array.append( SweepElement(Point=Point(x=geo.BB.Pe.x, y=y_val), add=[], remove=[geo])) sweep_array.sort(key=cmp_to_key(self.cmp_SweepElement)) # Remove all Points which are there twice self.sweep_array = [sweep_array[0]] for ele_nr in range(1, len(sweep_array)): if abs(self.sweep_array[-1].Point.x - sweep_array[ele_nr].Point.x) < eps: self.sweep_array[-1].add += sweep_array[ele_nr].add self.sweep_array[-1].remove += sweep_array[ele_nr].remove else: self.sweep_array.append(sweep_array[ele_nr]) def cmp_asscending_arc(self, P1, P2): """ Compare Function for the sorting of Intersection Points on one common ARC @param P1: The first Point to be compared @param P2: The secon Point to be compared @return: 1 if the distance to the start point of P1 is bigger """ # The angle between startpoint and where the intersection occures d_ang1 = (self.O.norm_angle(P1) - self.s_ang) % (2 * pi) d_ang2 = (self.O.norm_angle(P2) - self.s_ang) % (2 * pi) # Correct by 2*pi if the direction is wrong if self.ext < 0.0: d_ang1 -= 2 * pi d_ang2 -= 2 * pi if d_ang1 > d_ang2: return 1 elif d_ang1 == d_ang2: return 0 else: return -1 def cmp_asscending_line(self, P1, P2): """ Compare Function for the sorting of Intersection points on one common LINE @param P1: The first Point to be compared @param P2: The secon Point to be compared @return: 1 if the distance to the start point of P1 is bigger """ d1 = P1.distance(self.Ps) d2 = P2.distance(self.Ps) if d1 > d2: return 1 elif d1 == d2: return 0 else: return -1 def cmp_SweepElement(self, ele1, ele2): """ Compare Function for the sorting of the sweep array. @param Point1: First SweepElement point for compare @param Point2: The second SweepElement point for the compare @return: True or false whichever is bigger. """ if ele1.Point.x < ele2.Point.x: return -1 elif ele1.Point.x > ele2.Point.x: return 1 else: return 0 def cmp_SweepElementy(self, ele1, ele2): """ Compare Function for the sorting of the sweep array just in y direction. @param ele1: First SweepElement point for compare @param ele2: The second SweepElement point for the compare @return: True or false whichever is bigger. """ # logger.debug(ele1) # logger.debug(ele2) if ele1.Point.y < ele2.Point.y: return -1 elif ele1.Point.y > ele2.Point.y: return 1 else: return 0 def search_intersections(self): """ This instance is called to search all intersection points between the Elements defined in geos """ from functools import cmp_to_key search_array = [] self.found = [] ele_nr = 0 while ele_nr < len(self.sweep_array): ele = self.sweep_array[ele_nr] ele_nr += 1 #logger.debug(ele.add) for geo in ele.add: search_array.append(geo) search_array.sort(key=cmp_to_key(self.cmp_SweepElementy)) index = search_array.index(geo) if len(search_array) >= 2: if index > 0: self.search_geo_intersection( geo, search_array[index - 1]) if index < (len(search_array) - 1): self.search_geo_intersection( geo, search_array[index + 1]) #logger.debug(ele.swoop) # for geo in ele.swoop: # # The y values of the elements are exchanged and the upper and # # lower neighbors are checked for intersections # # logger.debug(geo) # #logger.debug(geo[0]) # #logger.debug(geo[1]) # # y0 = geo[0].Point.y # y1 = geo[1].Point.y # # logger.debug("geht1") # # geo[1].Point.y = y0 # geo[0].Point.y = y1 # # logger.debug("geht2") # # # logger.debug(search_array) # logger.debug(geo[0]) # index0 = search_array.index(geo[0]) # index1 = search_array.index(geo[1]) # logger.debug("Pre sort index: %s, %s" %(index0,index1)) # # search_array.sort(key=cmp_to_key(self.cmp_SweepElementy)) # # index0 = search_array.index(geo[0]) # index1 = search_array.index(geo[1]) # logger.debug("Post sort index: %s, %s" %(index0,index1)) # # min_ind = min(index0, index1) # max_ind = max(index0, index1) # if min_ind > 0: # self.search_geo_intersection( # search_array[min_ind], search_array[min_ind - 1]) # # # if max_ind < (len(search_array) - 1): # self.search_geo_intersection( # search_array[max_ind], search_array[max_ind + 1]) for geo in ele.remove: index = search_array.index(geo) #logger.debug("remove_index: %s" %index) search_array.pop(index) if len(search_array) >= 2: if index > 0 and index <= (len(search_array) - 1): self.search_geo_intersection( search_array[index - 1], search_array[index]) def search_geo_intersection(self, geo1, geo2): """ This function is called so search the intersections and to add the intersection point to the sweep array. This is called during each search """ from functools import cmp_to_key #logger.debug("geo1: %s\ngeo2: %s" %(geo1,geo2)) #logger.debug(geo1.neighbors) iPoint = (geo1.find_inter_point(geo2)) if (not(iPoint is None) and not(geo2 in geo1.neighbors)): if isinstance(iPoint,list): #FIXME logger.error("More the none iPoint") else: iPoint = IntPoint(Point=iPoint, geo1=geo1, geo2=geo2) # logger.debug(iPoint) # logger.debug([geo2]) # logger.debug(geo1.neighbors[0]) # logger.debug(geo1.neighbors[1]) # logger.debug(geo2) # if there is only one instersection if isinstance(iPoint, IntPoint): self.found.append(iPoint) geo1.iPoints += [iPoint] geo2.iPoints += [iPoint] self.sweep_array.append( SweepElement(Point=iPoint, add=[], remove=[], swoop=[[geo1, geo2]])) else: self.found += iPoint geo1.iPoints += iPoint geo2.iPoints += iPoint self.sweep_array.append( SweepElement(Point=iPoint[0], add=[], remove=[], swoop=[[geo1, geo2]])) self.sweep_array.append( SweepElement(Point=iPoint[1], add=[], remove=[], swoop=[[geo1, geo2]])) self.sweep_array.sort(key=cmp_to_key(self.cmp_SweepElement)) class SweepElement: def __init__(self, Point=Point(0, 0), add=[], remove=[], swoop=[]): """ This is the class for each SweepElement given in the sweep_array @param Point: the Point of the SweepElement (e.g. 2 Points per LineGeo) @param add: The geometrie to be added @param remove: The geometrie to be removed """ self.Point = Point self.add = add self.remove = remove self.swoop = swoop def __repr__(self): """ Standard method to print the object @return: A string """ return ('\nPoint: %s ' % (self.Point)) + \ ('\nadd: %s ' % self.add) + \ ('\nremove: %s ' % self.remove) class OffArcGeo(ArcGeo): """ Inherited Class for Shapeoffset only. All related offset functions are concentrated here in orde to keep base classes as clean as possible. """ def __init__(self, Ps=None, Pe=None, O=None, r=1, s_ang=None, e_ang=None, direction=1, drag=False, **kwargs): """ Standard Method to initialize the ArcGeo. Not all of the parameters are required to fully define a arc. eg. Ps and Pe may be given or s_ang and e_ang @param Ps: The Start Point of the arc @param Pe: the End Point of the arc @param O: The center of the arc @param r: The radius of the arc @param s_ang: The Start Angle of the arc @param e_ang: the End Angle of the arc @param direction: The arc direction where 1 is in positive direction """ if ("geo" in kwargs) and ("parent" in kwargs): geo = kwargs["geo"] parent = kwargs["parent"] Ps = geo.Ps.rot_sca_abs(parent=parent) Pe = geo.Pe.rot_sca_abs(parent=parent) O = geo.O.rot_sca_abs(parent=parent) r = geo.scaled_r(geo.r, parent) direction = 1 if geo.ext > 0.0 else -1 if parent is not None and parent.sca[0] * parent.sca[1] < 0.0: direction *= -1 ArcGeo.__init__(self, Ps=Ps, Pe=Pe, O=O, r=r, s_ang=s_ang, e_ang=e_ang, direction=direction, drag=drag) def distance(self, other): """ Find the distance between 2 geometry elements. Possible is LineGeo and ArcGeo @param other: the instance of the 2nd geometry element. @return: The distance between the two geometries """ """ Find the distance between 2 geometry elements. Possible is Point, LineGeo and ArcGeo @param other: the instance of the 2nd geometry element. @return: The distance between the two geometries """ if isinstance(other, LineGeo): return other.distance_l_a(self) elif isinstance(other, Point): return self.distance_a_p(other) elif isinstance(other, ArcGeo): return self.distance_a_a(other) else: logger.error( self.tr("Unsupported geometry type: %s" % type(other))) def distance_a_a(self, other): """ Find the distance between two arcs @param other: the instance of the 2nd geometry element. @return: The distance between the two geometries """ # logger.error('Unsupported function') Pself = self.get_nearest_point(other) Pother = other.get_nearest_point(self) return Pself.distance(Pother) def find_inter_point(self, other=[], typ='TIP'): """ Find the intersection between 2 geometry elements. Possible is CCLineGeo and ArcGeo @param other: the instance of the 2nd geometry element. @param typ: Can be "TIP" for True Intersection Point or "Ray" for Intersection which is in Ray (of Line) @return: a list of intersection points. """ if isinstance(other, LineGeo): IPoints = other.find_inter_point_l_a(self, typ) return IPoints elif isinstance(other, ArcGeo): return self.find_inter_point_a_a(other, typ) else: logger.error("Unsupported Instance: %s" % other.type) def find_inter_point_a_a(self, other, typ='TIP'): """ Find the intersection between 2 ArcGeo elements. There can be only one intersection between 2 lines. @param other: the instance of the 2nd geometry element. @param typ: Can be "TIP" for True Intersection Point or "Ray" for Intersection which is in Ray (of Line) @return: a list of intersection points. """ if typ == "TIP" and self.Ps.distance(other.Pe) < eps * 5: return other.Pe elif typ == "TIP" and self.Pe.distance(other.Ps) < eps * 5: return other.Ps O_dis = self.O.distance(other.O) # logger.debug(self.Ps.distance(other.Pe)) # logger.debug(self.Pe.distance(other.Ps)) # logger.debug(O_dis) # If self circle is surrounded by the other no intersection if(O_dis < abs(self.r - other.r)): return None # If other circle is surrounded by the self no intersection if(O_dis < abs(other.r - self.r)): return None # If The circles are to far away from each other no intersection # possible if (O_dis > abs(other.r + self.r)): return None # If both circles have the same center and radius if abs(O_dis) == 0.0 and abs(self.r - other.r) == 0.0: Pi1 = Point(x=self.Ps.x, y=self.Ps.y) Pi2 = Point(x=self.Pe.x, y=self.Pe.y) logger.debug("Both circels have the same center and radius") return [Pi1, Pi2] # The following algorithm was found on : # http://www.sonoma.edu/users/w/wilsonst/Papers/Geometry/circles/default.htm root = ((pow(self.r + other.r, 2) - pow(O_dis, 2)) * (pow(O_dis, 2) - pow(other.r - self.r, 2))) # If the Line is a tangent the root is 0.0. if root <= 0.0: root = 0.0 else: root = sqrt(root) xbase = (other.O.x + self.O.x) / 2 + \ (other.O.x - self.O.x) * \ (pow(self.r, 2) - pow(other.r, 2)) / (2 * pow(O_dis, 2)) ybase = (other.O.y + self.O.y) / 2 + \ (other.O.y - self.O.y) * \ (pow(self.r, 2) - pow(other.r, 2)) / (2 * pow(O_dis, 2)) Pi1 = Point(x=xbase + (other.O.y - self.O.y) / (2 * pow(O_dis, 2)) * root, y=ybase - (other.O.x - self.O.x) / (2 * pow(O_dis, 2)) * root) Pi1_v1 = self.dif_ang(self.Ps, Pi1, self.ext) / self.ext Pi1_v2 = other.dif_ang(other.Ps, Pi1, other.ext) / other.ext Pi2 = Point(x=xbase - (other.O.y - self.O.y) / (2 * pow(O_dis, 2)) * root, y=ybase + (other.O.x - self.O.x) / (2 * pow(O_dis, 2)) * root) Pi2_v1 = self.dif_ang(self.Ps, Pi2, self.ext) / self.ext Pi2_v2 = other.dif_ang(other.Ps, Pi2, other.ext) / other.ext if typ == 'TIP': if ((Pi1_v1 >= 0.0 and Pi1_v1 <= 1.0 and Pi1_v2 > 0.0 and Pi1_v2 <= 1.0) and (Pi2_v1 >= 0.0 and Pi2_v1 <= 1.0 and Pi2_v2 > 0.0 and Pi2_v2 <= 1.0)): if (root == 0): return Pi1 else: return [Pi1, Pi2] logger.debug("2 Solutions found for TIP") elif (Pi1_v1 >= 0.0 and Pi1_v1 <= 1.0 and Pi1_v2 > 0.0 and Pi1_v2 <= 1.0): return Pi1 elif (Pi2_v1 >= 0.0 and Pi2_v1 <= 1.0 and Pi2_v2 > 0.0 and Pi2_v2 <= 1.0): return Pi2 else: return None elif typ == "Ray": # If the root is zero only one solution and the line is a tangent. if root == 0: return Pi1 else: return [Pi1, Pi2] else: logger.error("We should not be here") def get_nearest_point(self, other): """ Get the nearest point on the arc to another geometry. @param other: The Line to be nearest to @return: The point which is the nearest to other """ if isinstance(other, LineGeo): return other.get_nearest_point_l_a(self, ret="arc") elif isinstance(other, ArcGeo): return self.get_nearest_point_a_a(other) elif isinstance(other, Point): return self.get_nearest_point_a_p(other) else: logger.error("Unsupported Instance: %s" % other.type) def get_nearest_point_a_p(self, other): """ Get the nearest point to a point lieing on the arc @param other: The Point to be nearest to @return: The point which is the nearest to other """ if self.intersect(other): return other PPoint = self.O.get_arc_point(self.O.norm_angle(other), r=self.r) if self.intersect(PPoint): return PPoint elif self.Ps.distance(other) < self.Pe.distance(other): return self.Ps else: return self.Pe def get_nearest_point_a_a(self, other): """ Get the nearest point to a line lieing on the line @param other: The Point to be nearest to @return: The point which is the nearest to other """ if self.intersect(other): return self.find_inter_point_a_a(other) # If Nearest point is on both Arc Segments. if (other.PointAng_withinArc(self.O) and self.PointAng_withinArc(other.O)): return self.O.get_arc_point(self.O.norm_angle(other.O), r=self.r) # If Nearest point is at one of the start/end points else: dismin = self.Ps.distance(other) retpoint = self.Ps newdis = self.Pe.distance(other) if newdis < dismin: dismin = newdis retpoint = self.Pe newdis = other.Ps.distance(self) if newdis < dismin: dismin = newdis retpoint = self.get_nearest_point_a_p(other.Ps) newdis = other.Pe.distance(self) if newdis < dismin: dismin = newdis retpoint = self.get_nearest_point_a_p(other.Pe) return retpoint def intersect(self, other): """ Check if there is an intersection of two geometry elements @param, a second geometry which shall be checked for intersection @return: True if there is an intersection """ # Do a raw check first with BoundingBox # logger.debug("self: %s, \nother: %s, \nintersect: %s" # %(self,other,self.BB.hasintersection(other.BB))) # logger.debug("self.BB: %s \nother.BB: %s") # We need to test Point first cause it has no BB if isinstance(other, Point): return self.intersect_a_p(other) elif not(self.BB.hasintersection(other.BB)): return False elif isinstance(other, LineGeo): return other.intersect_l_a(self) elif isinstance(other, ArcGeo): return self.intersect_a_a(other) else: logger.error("Unsupported Instance: %s" % other.type) def intersect_a_a(self, other): """ Check if there is an intersection of two arcs @param, a second arc which shall be checked for intersection @return: True if there is an intersection """ inter = self.find_inter_point_a_a(other) return not(inter is None) def intersect_a_p(self, other): """ Check if there is an intersection of an point and a arc @param, a second arc which shall be checked for intersection @return: True if there is an intersection """ # No intersection possible if point is not within radius if not(abs(self.O.distance(other) - self.r) < eps): return False elif self.PointAng_withinArc(other): return True else: return False def match_Ps_to_Pe(self, otherPe): """ This functions adapts the geometry in the way so that the startpoint exactly matches the given point @param otherPe: This is the end point of the other geometry to match with """ self.Ps = otherPe # Get the Circle center point with known Start and End Points self.O.x = self.Ps.x - self.r * cos(self.s_ang) self.O.y = self.Ps.y - self.r * sin(self.s_ang) self.length = self.r * abs(self.ext) self.calc_bounding_box() self.abs_geo = None def PointAng_withinArc(self, Point): """ Check if the angle defined by Point is within the span of the arc. @param Point: The Point which angle to be checked @return: True or False """ if self.ext == 0.0: return False v = self.dif_ang(self.Ps, Point, self.ext) / self.ext return v >= 0.0 and v <= 1.0 def split_into_2geos(self, ipoint=Point()): """ Splits the given geometry into 2 geometries. The geometry will be splitted at ipoint. @param ipoint: The Point where the intersection occures @return: A list of 2 ArcGeo's will be returned. """ # Generate the 2 geometries and their bounding boxes. Arc1 = OffArcGeo(Ps=self.Ps, Pe=ipoint, r=self.r, O=self.O, direction=self.ext) Arc2 = OffArcGeo(Ps=ipoint, Pe=self.Pe, r=self.r, O=self.O, direction=self.ext) return [Arc1, Arc2] def trim(self, Point, dir=1, rev_norm=False): """ This instance is used to trim the geometry at the given point. The point can be a point on the offset geometry a perpendicular point on line will be used for trimming. @param Point: The point / perpendicular point for new Geometry @param dir: The direction in which the geometry will be kept (1 means the beginn will be trimmed) @param rev_norm: If the direction of the point is on the reversed side. """ # logger.debug("I'm getting trimmed: %s, %s, %s, %s" # % (self, Point, dir, rev_norm)) newPoint = self.O.get_arc_point(self.O.norm_angle(Point), r=self.r) new_normal = self.O.unit_vector(newPoint, r=1) if self.ext < 0: new_normal = new_normal * -1 # new_normal = newPoint.unit_vector(self.O, r=1) # # if self.ext<0: # new_normal = new_normal*-1 # logger.debug(newPoint) [Arc1, Arc2] = self.split_into_2geos(newPoint) if dir == -1: new_arc = Arc1 if hasattr(self, "end_normal"): # new_arc.end_normal = self.end_normal # new_arc.start_normal = new_normal new_arc.end_normal = new_normal new_arc.start_normal = self.start_normal # logger.debug(new_arc) return new_arc else: new_arc = Arc2 if hasattr(self, "end_normal"): # new_arc.end_normal = new_normal # new_arc.start_normal = self.start_normal new_arc.end_normal = self.end_normal new_arc.start_normal = new_normal # logger.debug(new_arc) return new_arc class OffLineGeo(LineGeo): """ Inherited Class for Shapeoffset only. All related offset functions are concentrated here in orde to keep base classes as clean as possible. """ def __init__(self, Ps=None, Pe=None, **kwargs): """ Standard Method to initialize the LineGeo. @param Ps: The Start Point of the line @param Pe: the End Point of the line """ if ("geo" in kwargs) and ("parent" in kwargs): geo = kwargs["geo"] parent = kwargs["parent"] Ps = geo.Ps.rot_sca_abs(parent=parent) Pe = geo.Pe.rot_sca_abs(parent=parent) LineGeo.__init__(self, Ps=Ps, Pe=Pe) def colinear(self, other): """ Check if two lines with same point self.Pe==other.Ps are colinear. For Point it check if the point is colinear with the line self. @param other: the possibly colinear line """ if isinstance(other, LineGeo): return ((self.Ps.ccw(self.Pe, other.Pe) == 0) and (self.Ps.ccw(self.Pe, other.Ps) == 0)) elif isinstance(other, Point): """ Return true iff a, b, and c all lie on the same line." """ return self.Ps.ccw(self.Pe, other) == 0 else: logger.debug("Unsupported instance: %s" % type(other)) def colinearoverlapping(self, other): """ Check if the lines are colinear overlapping Ensure AC, then the intersection is the segment [C, min(B, D)] @param other: The other line @return: True if they are overlapping """ if not(self.colinear(other)): return False else: if self.Ps < self.Pe: A = self.Ps B = self.Pe else: A = self.Pe B = self.Ps if other.Ps < self.Pe: C = other.Ps D = other.Pe else: C = other.Pe D = other.Ps # Swap lines if required if not(A <= C): A, B, C, D = C, D, A, B if B < C: return False elif B == C: return False else: return True def colinearconnected(self, other): """ Check if Lines are connected and colinear @param other: Another Line which will be checked """ if not(self.colinear(other)): return False elif self.Ps == other.Ps: return True elif self.Pe == other.Ps: return True elif self.Ps == other.Pe: return True elif self.Pe == other.Pe: return True else: return False def distance(self, other=[]): """ Find the distance between 2 geometry elements. Possible is CCLineGeo and ArcGeo @param other: the instance of the 2nd geometry element. @return: The distance between the two geometries """ if isinstance(other, LineGeo): return self.distance_l_l(other) elif isinstance(other, Point): return self.distance_l_p(other) elif isinstance(other, ArcGeo): return self.distance_l_a(other) else: logger.error( self.tr("Unsupported geometry type: %s" % type(other))) def distance_l_l(self, other): """ Find the distance between 2 ccLineGeo elements. @param other: the instance of the 2nd geometry element. @return: The distance between the two geometries """ if self.intersect(other): return 0.0 return min(self.distance_l_p(other.Ps), self.distance_l_p(other.Pe), other.distance_l_p(self.Ps), other.distance_l_p(self.Pe)) def distance_l_a(self, other): """ Find the distance between 2 ccLineGeo elements. @param other: the instance of the 2nd geometry element. @return: The distance between the two geometries """ if self.intersect(other): return 0.0 # Get the nearest Point to the Center of the Arc POnearest = self.get_nearest_point_l_p(other.O) # The Line is outside of the Arc if other.O.distance(POnearest) > other.r: # If the Nearest Point is on Arc Segement it is the neares one. # logger.debug("Nearest Point is outside of arc") if other.PointAng_withinArc(POnearest): return POnearest.distance(other.O.get_arc_point(other.O.norm_angle(POnearest), r=other.r)) elif self.distance(other.Ps) < self.distance(other.Pe): return self.get_nearest_point(other.Ps).distance(other.Ps) else: return self.get_nearest_point(other.Pe).distance(other.Pe) # logger.debug("Nearest Point is Inside of arc") # logger.debug("self.distance(other.Ps): %s, self.distance(other.Pe): # %s" %(self.distance(other.Ps),self.distance(other.Pe))) # The Line may be inside of the ARc or cross it if self.distance(other.Ps) < self.distance(other.Pe): dis_min = self.distance(other.Ps) # logger.debug("Pnearest: %s, distance: %s" %(Pnearest, dis_min)) else: dis_min = self.distance(other.Pe) # logger.debug("Pnearest: %s, distance: %s" %(Pnearest, dis_min)) if ((other.PointAng_withinArc(self.Ps)) and abs(other.r - other.O.distance(self.Ps)) < dis_min): dis_min = abs(other.r - other.O.distance(self.Ps)) # logger.debug("Pnearest: %s, distance: %s" %(Pnearest, dis_min)) if ((other.PointAng_withinArc(self.Pe)) and abs((other.r - other.O.distance(self.Pe))) < dis_min): dis_min = abs(other.r - other.O.distance(self.Pe)) # logger.debug("Pnearest: %s, distance: %s" %(Pnearest, dis_min)) return dis_min def find_inter_point(self, other, typ='TIP'): """ Find the intersection between 2 Geo elements. There can be only one intersection between 2 lines. Returns also FIP which lay on the ray. @param other: the instance of the 2nd geometry element. @param typ: Can be "TIP" for True Intersection Point or "Ray" for Intersection which is in Ray (of Line) @return: a list of intersection points. """ if isinstance(other, LineGeo): inter = self.find_inter_point_l_l(other, typ) return inter elif isinstance(other, ArcGeo): inter = self.find_inter_point_l_a(other, typ) return inter else: logger.error("Unsupported Instance: %s" % other.type) def find_inter_point_l_l(self, other, typ="TIP"): """ Find the intersection between 2 LineGeo elements. There can be only one intersection between 2 lines. Returns also FIP which lay on the ray. @param other: the instance of the 2nd geometry element. @param typ: Can be "TIP" for True Intersection Point or "Ray" for Intersection which is in Ray (of Line) @return: a list of intersection points. """ if self.colinear(other): return None elif typ == 'TIP' and not(self.intersect(other)): return None elif typ == "TIP" and self.Ps.distance(other.Pe) < eps * 5: return other.Pe elif typ == "TIP" and self.Pe.distance(other.Ps) < eps * 5: return other.Ps dx1 = self.Pe.x - self.Ps.x dy1 = self.Pe.y - self.Ps.y dx2 = other.Pe.x - other.Ps.x dy2 = other.Pe.y - other.Ps.y dax = self.Ps.x - other.Ps.x day = self.Ps.y - other.Ps.y # Return nothing if one of the lines has zero length if (dx1 == 0 and dy1 == 0) or (dx2 == 0 and dy2 == 0): return None # If to avoid division by zero. try: if(abs(dx2) >= abs(dy2)): v1 = (day - dax * dy2 / dx2) / (dx1 * dy2 / dx2 - dy1) # v2 = (dax + v1 * dx1) / dx2 else: v1 = (dax - day * dx2 / dy2) / (dy1 * dx2 / dy2 - dx1) # v2 = (day + v1 * dy1) / dy2 except: return None return Point(x=self.Ps.x + v1 * dx1, y=self.Ps.y + v1 * dy1) def find_inter_point_l_a(self, Arc, typ="TIP"): """ Find the intersection between 2 Geo elements. The intersection between a Line and a Arc is checked here. This function is also used in the Arc Class to check Arc -> Line Intersection (the other way around) @param Arc: the instance of the 2nd geometry element. @param typ: Can be "TIP" for True Intersection Point or "Ray" for Intersection which is in Ray (of Line) @return: a list of intersection points. """ if typ == "TIP": if self.Ps.distance(Arc.Pe) < eps * 5: return Arc.Pe elif self.Pe.distance(Arc.Ps) < eps * 5: return Arc.Ps Ldx = self.Pe.x - self.Ps.x Ldy = self.Pe.y - self.Ps.y # Mitternachtsformel zum berechnen der Nullpunkte der quadratischen # Gleichung a = pow(Ldx, 2) + pow(Ldy, 2) b = 2 * Ldx * (self.Ps.x - Arc.O.x) + 2 * Ldy * (self.Ps.y - Arc.O.y) c = pow(self.Ps.x - Arc.O.x, 2) + \ pow(self.Ps.y - Arc.O.y, 2) - pow(Arc.r, 2) root = pow(b, 2) - 4 * a * c # If the value under the sqrt is negative there is no intersection. if root < 0 or a == 0.0: return None v1 = (-b + sqrt(root)) / (2 * a) v2 = (-b - sqrt(root)) / (2 * a) Pi1 = Point(x=self.Ps.x + v1 * Ldx, y=self.Ps.y + v1 * Ldy) Pi2 = Point(x=self.Ps.x + v2 * Ldx, y=self.Ps.y + v2 * Ldy) # dif_ang may return 2*pi which we should interpret as zero here! Pi1_v = self.mod_clamp (Arc.dif_ang(Arc.Ps, Pi1, Arc.ext), -2*pi, +2*pi) / Arc.ext Pi2_v = self.mod_clamp (Arc.dif_ang(Arc.Ps, Pi2, Arc.ext), -2*pi, +2*pi) / Arc.ext if typ == 'TIP': if ((Pi1_v >= 0.0 and Pi1_v <= 1.0 and self.intersect(Pi1)) and (Pi1_v >= 0.0 and Pi2_v <= 1.0 and self.intersect(Pi2))): if (root == 0): return Pi1 else: return [Pi1, Pi2] elif (Pi1_v >= 0.0 and Pi1_v <= 1.0 and self.intersect(Pi1)): return Pi1 elif (Pi1_v >= 0.0 and Pi2_v <= 1.0 and self.intersect(Pi2)): return Pi2 else: return None elif typ == "Ray": # If the root is zero only one solution and the line is a tangent. if(root == 0): return Pi1 return [Pi1, Pi2] else: logger.error("We should not be here") @staticmethod def mod_clamp(val,min,max): if val <= min: return val % min elif val >= max: return val % max return val def get_nearest_point(self, other): """ Get the nearest point on a line to another line lieing on the line @param other: The Line to be nearest to @return: The point which is the nearest to other """ if isinstance(other, LineGeo): return self.get_nearest_point_l_l(other) elif isinstance(other, ArcGeo): return self.get_nearest_point_l_a(other) elif isinstance(other, Point): return self.get_nearest_point_l_p(other) else: logger.error("Unsupported Instance: %s" % other.type) def get_nearest_point_l_l(self, other): """ Get the nearest point on a line to another line lieing on the line @param other: The Line to be nearest to @return: The point which is the nearest to other """ # logger.debug(self.intersect(other)) if self.intersect(other): return self.find_inter_point_l_l(other) min_dis = self.distance(other) if min_dis == self.distance_l_p(other.Ps): return self.get_nearest_point_l_p(other.Ps) elif min_dis == self.distance_l_p(other.Pe): return self.get_nearest_point_l_p(other.Pe) elif min_dis == other.distance_l_p(self.Ps): return self.Ps elif min_dis == other.distance_l_p(self.Pe): return self.Pe else: logger.warning("No solution found") def get_nearest_point_l_a(self, other, ret="line"): """ Get the nearest point to a line lieing on the line @param other: The Point to be nearest to @return: The point which is the nearest to other """ if self.intersect(other): return self.find_inter_point_l_a(other) # Get the nearest Point to the Center of the Arc POnearest = self.get_nearest_point_l_p(other.O) # The Line is outside of the Arc if other.O.distance(POnearest) > other.r: # If the Nearest Point is on Arc Segement it is the neares one. # logger.debug("Nearest Point is outside of arc") if other.PointAng_withinArc(POnearest): if ret == "line": return POnearest elif ret == "arc": return other.O.get_arc_point(other.O.norm_angle(POnearest), r=other.r) elif self.distance(other.Ps) < self.distance(other.Pe): if ret == "line": return self.get_nearest_point(other.Ps) elif ret == "arc": return other.Ps else: if ret == "line": return self.get_nearest_point(other.Pe) elif ret == "art": return other.Pe # logger.debug("Nearest Point is Inside of arc") # logger.debug("self.distance(other.Ps): %s, self.distance(other.Pe): # %s" %(self.distance(other.Ps),self.distance(other.Pe))) # The Line may be inside of the ARc or cross it if self.distance(other.Ps) < self.distance(other.Pe): Pnearest = self.get_nearest_point(other.Ps) Pnother = other.Ps dis_min = self.distance(other.Ps) # logger.debug("Pnearest: %s, distance: %s" %(Pnearest, dis_min)) else: Pnearest = self.get_nearest_point(other.Pe) Pnother = other.Pe dis_min = self.distance(other.Pe) # logger.debug("Pnearest: %s, distance: %s" %(Pnearest, dis_min)) if ((other.PointAng_withinArc(self.Ps)) and abs(other.r - other.O.distance(self.Ps)) < dis_min): Pnearest = self.Ps Pnother = other.O.get_arc_point( other.O.norm_angle(Pnearest), r=other.r) dis_min = abs(other.r - other.O.distance(self.Ps)) # logger.debug("Pnearest: %s, distance: %s" %(Pnearest, dis_min)) if ((other.PointAng_withinArc(self.Pe)) and abs((other.r - other.O.distance(self.Pe))) < dis_min): Pnearest = self.Pe Pnother = other.O.get_arc_point( other.O.norm_angle(Pnearest), r=other.r) dis_min = abs(other.r - other.O.distance(self.Pe)) # logger.debug("Pnearest: %s, distance: %s" %(Pnearest, dis_min)) if ret == "line": return Pnearest elif ret == "arc": return Pnother def get_nearest_point_l_p(self, other): """ Get the nearest point to a point lieing on the line @param other: The Point to be nearest to @return: The point which is the nearest to other """ if self.intersect(other): return other PPoint = self.perpedicular_on_line(other) if self.intersect(PPoint): return PPoint if self.Ps.distance(other) < self.Pe.distance(other): return self.Ps else: return self.Pe def intersect(self, other): """ Check if there is an intersection of two geometry elements @param, a second geometry which shall be checked for intersection @return: True if there is an intersection """ # Do a raw check first with BoundingBox # logger.debug("self: %s, \nother: %s, \nintersect: %s" # %(self,other,self.BB.hasintersection(other.BB))) # logger.debug("self.BB: %s \nother.BB: %s") # logger.debug(self.BB.hasintersection(other.BB)) # We need to test Point first cause it has no BB if isinstance(other, Point): return self.intersect_l_p(other) elif not(self.BB.hasintersection(other.BB)): return False elif isinstance(other, LineGeo): return self.intersect_l_l(other) elif isinstance(other, ArcGeo): return self.intersect_l_a(other) else: logger.error("Unsupported Instance: %s" % other.type) def intersect_l_a(self, other): """ Check if there is an intersection of the two line @param, a second line which shall be checked for intersection @return: True if there is an intersection """ inter = self.find_inter_point_l_a(other) return not(inter is None) def intersect_l_l(self, other): """ Check if there is an intersection of the two line @param, a second line which shall be checked for intersection @return: True if there is an intersection """ A = self.Ps B = self.Pe C = other.Ps D = other.Pe return A.ccw(C, D) != B.ccw(C, D) and A.ccw(B, C) != A.ccw(B, D) def intersect_l_p(self, Point): """ Check if Point is colinear and within the Line @param Point: A Point which will be checked @return: True if point Point intersects the line segment from Ps to Pe. Refer to http://stackoverflow.com/questions/328107/ how-can-you-determine-a-point-is-between-two-other-points-on-a-line-segment """ # (or the degenerate case that all 3 points are coincident) # logger.debug(self.colinear(Point)) return (self.colinear(Point) and (self.within(self.Ps.x, Point.x, self.Pe.x) if self.Ps.x != self.Pe.x else self.within(self.Ps.y, Point.y, self.Pe.y))) def join_colinear_line(self, other): """ Check if the two lines are colinear connected or inside of each other, in this case these lines will be joined to one common line, otherwise return both lines @param other: a second line @return: Return one or two lines """ if self.colinearconnected(other): return [OffLineGeo(self.Ps, other.Pe)] """ FIXME: This is not working as expected, maybe change to a function going for max distance between points. min max is comparing to 0?. """ elif self.colinearoverlapping(other): if self.Ps < self.Pe: newPs = min(self.Ps, other.Ps, other.Pe) newPe = max(self.Pe, other.Ps, other.Pe) else: newPs = max(self.Ps, other.Ps, other.Pe) newPe = min(self.Pe, other.Ps, other.Pe) return [OffLineGeo(newPs, newPe)] else: return [self, other] def match_Ps_to_Pe(self, otherPe): """ This functions adapts the geometry in the way so that the startpoint exactly matches the given point @param otherPe: This is the end point of the other geometry to match with """ self.Ps = otherPe self.length = self.Ps.distance(self.Pe) self.calc_bounding_box() self.abs_geo = None def perpedicular_on_line(self, other): """ This function calculates the perpendicular point on a line (or ray of line) with the shortest distance to the point given with other @param other: The point to be perpendicular to @return: A point which is on line and perpendicular to Point other @see: http://stackoverflow.com/questions/1811549/ perpendicular-on-a-line-from-a-given-point """ # first convert line to normalized unit vector unit_vector = self.Ps.unit_vector(self.Pe) # translate the point and get the dot product lam = ((unit_vector.x * (other.x - self.Ps.x)) + (unit_vector.y * (other.y - self.Ps.y))) return Point(x=(unit_vector.x * lam) + self.Ps.x, y=(unit_vector.y * lam) + self.Ps.y) def split_into_2geos(self, ipoint=Point()): """ Splits the given geometry into 2 not self intersection geometries. The geometry will be splitted between ipoint and Pe. @param ipoint: The Point where the intersection occures @return: A list of 2 CCLineGeo's will be returned if Point is inside """ # The Point where the geo shall be splitted if not(ipoint): return [self] elif self.intersect(ipoint): Li1 = OffLineGeo(Ps=self.Ps, Pe=ipoint) Li2 = OffLineGeo(Ps=ipoint, Pe=self.Pe) return [Li1, Li2] else: return [self] def trim(self, Point, dir=1, rev_norm=False): """ This instance is used to trim the geometry at the given point. The point can be a point on the offset geometry a perpendicular point on line will be used for trimming. @param Point: The point / perpendicular point for new Geometry @param dir: The direction in which the geometry will be kept (1 means the being will be trimmed) """ newPoint = self.perpedicular_on_line(Point) if dir == 1: new_line = OffLineGeo(newPoint, self.Pe) new_line.end_normal = self.end_normal new_line.start_normal = self.start_normal return new_line else: new_line = OffLineGeo(self.Ps, newPoint) new_line.end_normal = self.end_normal new_line.start_normal = self.start_normal return new_line def within(self, p, q, r): "Return true iff q is between p and r (inclusive)." return p <= q <= r or r <= q <= p class OffPoint(Point): """ Inherited Class for Shapeoffset only. All related offset functions are concentrated here in order to keep base classes as clean as possible. """ def __init__(self, x=0, y=0, **kwargs): if ("geo" in kwargs) and ("parent" in kwargs): geo = kwargs["geo"] parent = kwargs["parent"] x = geo.rot_sca_abs(parent=parent).x y = geo.rot_sca_abs(parent=parent).y self.x = x self.y = y class ConvexPoint(OffPoint): """ Inherited Class of OffPoint required to identify Convex Points in the Offset algorithm.. """ def __init__(self, x=0, y=0): OffPoint.__init__(self, x=x, y=y) def __repr__(self): return 'ConvexPoint (X=%6.3f, Y=%6.3f)' % (self.x, self.y) class IntPoint(Point): """ Inherited Class of Point """ def __init__(self, x=0, y=0, geo1=None, geo2=None, **kwargs): self.x = x self.y = y self.geo1 = geo1 self.geo2 = geo2 if ("Point" in kwargs): Point = kwargs["Point"] self.x = Point.x self.y = Point.y # def __repr__(self): # return 'X ->%6.3f Y ->%6.3f \ngeo1: %s, \ngeo2:%s' % (self.x, self.y, self.geo1, self.geo2) # return ('CPoints.append(Point(x=%6.5f, y=%6.5f))' %(self.x, dxf2gcode-20240509/dxf2gcode/core/shape.py0000644000000000000000000007232514617065372016617 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Vinzenz Schulz # Jean-Paul Schouwstra # # Copyright (C) 20019-2020 # San Zamoyski (PocketMill parts) # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from __future__ import division from math import radians, pi from copy import deepcopy import logging import dxf2gcode.globals.globals as g from dxf2gcode.core.point import Point from dxf2gcode.core.linegeo import LineGeo from dxf2gcode.core.arcgeo import ArcGeo from dxf2gcode.core.holegeo import HoleGeo from dxf2gcode.core.pocketmove import PocketMove import dxf2gcode.globals.constants as c from PyQt5 import QtCore from PyQt5.QtWidgets import QMessageBox logger = logging.getLogger("Core.Shape") class Shape(object): """ The Shape Class includes all plotting, GUI functionality and export functions related to the Shapes. """ # only need default arguments here because of the change of usage with # super in QGraphicsItem def __init__(self, nr=-1, closed=True, parentEntity=None, geos=[]): if nr == -1: return self.type = "Shape" self.nr = nr self.closed = closed self.cut_cor = 40 self.Pocket = False self.Drill = False self.parentEntity = parentEntity self.parentLayer = None self.geos = Geos(geos) self.cw = True self.stmove = None self.send_to_TSP = g.config.vars.Route_Optimisation['default_TSP'] self.selected = False self.disabled = False self.allowedToChange = True # preset defaults self.axis3_start_mill_depth = g.config.vars.Depth_Coordinates[ 'axis3_start_mill_depth'] self.axis3_slice_depth = g.config.vars.Depth_Coordinates[ 'axis3_slice_depth'] self.axis3_mill_depth = g.config.vars.Depth_Coordinates[ 'axis3_mill_depth'] self.f_g1_plane = g.config.vars.Feed_Rates['f_g1_plane'] self.f_g1_depth = g.config.vars.Feed_Rates['f_g1_depth'] # Parameters for drag knife self.drag_angle = radians( g.config.vars.Drag_Knife_Options['drag_angle']) def __repr__(self): """ Standard method to print the object @return: A string """ #logger.debug(self.closed) return "Shape (nr=%i, closed=%s, geos=%s)" % \ (self.nr, self.closed, self.geos) def tr(self, string_to_translate): """ Translate a string using the QCoreApplication translation framework @param: string_to_translate: a unicode string @return: the translated unicode string if it was possible to translate """ return str(QtCore.QCoreApplication.translate("Shape", string_to_translate)) def setSelected(self, flag=False): self.selected = flag def isSelected(self): return self.selected def setDisable(self, flag=False): self.disabled = flag def isDisabled(self): return self.disabled def isDrill(self): return self.Drill def setToolPathOptimized(self, flag=False): self.send_to_TSP = flag def isToolPathOptimized(self): return self.send_to_TSP def isDirectionOfGeosCCW(self, geos): # By calculating the area of the shape start = geos.abs_el(0).get_start_end_points(True) summe = 0.0 for geo in geos.abs_iter(): if isinstance(geo, LineGeo): end = geo.get_start_end_points(False) summe += (start.x + end.x) * (end.y - start.y) start = end elif isinstance(geo, ArcGeo): segments = 10 for i in range(1, segments + 1): end = geo.get_point_from_start(i, segments) summe += (end.x + start.x) * (end.y - start.y) start = end if not self.closed: # if shape is not closed... simply treat it as closed end = geos.abs_el(0).get_start_end_points(True) summe += (end.x + start.x) * (end.y - start.y) if summe == 0: # inconclusive logger.debug( self.tr("Shoelace method cannot (directly) be applied to this shape")) # lets take it clock wise with relation to the workpiece zero start = geos.abs_el(0).get_start_end_points(True) # get the farthest end point with relation to the start end = start distance2 = 0 for geo in geos.abs_iter(): pos_end = geo.get_start_end_points(False) pos_distance2 = (start - pos_end).length_squared() if pos_distance2 > distance2: end = pos_end distance2 = pos_distance2 direction = start.to3D().cross_product(end.to3D()).z # start and end are aligned wrt to wp zero if -1e-5 < direction < 1e-5: direction = start.length_squared() - end.length_squared() summe = direction return summe > 0.0 def AnalyseAndOptimize(self): self.setNearestStPoint(Point()) logger.debug( self.tr("Analysing the shape for CW direction Nr: %s" % self.nr)) if self.isDirectionOfGeosCCW(self.geos): self.reverse() logger.debug(self.tr("Had to reverse the shape to be CW")) self.cw = True def setNearestStPoint(self, stPoint): if self.closed: logger.debug(self.tr("Clicked Point: %s" % stPoint)) start = self.get_start_end_points(True) logger.debug(self.tr("Old Start Point: %s" % start)) min_geo_nr, _ = min(enumerate(self.geos.abs_iter()), key=lambda geo: geo[1].get_start_end_points(True).distance(stPoint)) # Overwrite the geometries in changed order. self.geos = Geos(self.geos[min_geo_nr:] + self.geos[:min_geo_nr]) start = self.get_start_end_points(True) logger.debug(self.tr("New Start Point: %s" % start)) elif len (self.geos) > 0: # if shape is not closed, we can just select between start and end points dist1 = self.geos.abs_el(0).get_start_end_points(True).distance(stPoint) dist2 = self.geos.abs_el(-1).get_start_end_points(False).distance(stPoint) if dist2 < dist1: self.reverse() # Update start move after reordering the shape if self.stmove is not None: self.stmove.updateShape() def setSharpestStPoint(self): """ Loops over the geometries of a closed shape and searches the highest angle between the end geometry to the start geometry. The one with the highest angle inbetween will be the new start point. """ # Do only if more then 2 geometies of a closed shape if len(self.geos) < 2 and self.closed: return sharpest_ang=0.0 max_index=0 for i in range(len(self.geos)): end_point, end_ang = self.geos[i-1].get_start_end_points(0,1) st_point, st_ang = self.geos[i].get_start_end_points(1,1) ang_diff=(st_ang-end_ang-pi) if ang_diff < -pi: ang_diff += 2*pi if ang_diff > pi: ang_diff -=2*pi logger.debug("st_point: %s; end_ang: %0.2f; st_ang: %0.2f; ang_diff: %0.2f" %(st_point, st_ang, end_ang, ang_diff)) if sharpest_ang 0.5 * 0.1 ** post_dec * pi: return geo.Write_GCode(PostPro) else: return "" def Write_GCode(self, PostPro): """ This method returns the string to be exported for this shape, including the defined start and end move of the shape. @param PostPro: this is the Postprocessor class including the methods to export """ if g.config.machine_type == 'drag_knife': return self.Write_GCode_Drag_Knife(PostPro) if isinstance(self.geos[0], HoleGeo): self.Drill prv_cut_cor = self.cut_cor if (self.cut_cor != 40 and not g.config.vars.Cutter_Compensation["done_by_machine"] and not self.Drill): self.cut_cor = 40 new_geos = Geos(self.stmove.geos[1:]) else: new_geos = self.geos # If there is nothing to export if len(new_geos) == 0: self.cut_cor = prv_cut_cor return "" new_geos = PostPro.breaks.getNewGeos(new_geos) # initialisation of the string exstr = "" # Get the mill settings defined in the GUI safe_retract_depth = self.parentLayer.axis3_retract safe_margin = self.parentLayer.axis3_safe_margin max_slice = -abs(self.axis3_slice_depth) workpiece_top_Z = self.axis3_start_mill_depth # We want to mill the piece, even for the first pass, so remove one # "slice" initial_mill_depth = workpiece_top_Z + max_slice depth = self.axis3_mill_depth f_g1_plane = self.f_g1_plane f_g1_depth = self.f_g1_depth # Save the initial Cutter correction in a variable has_reversed = False # If the Output Format is DXF do not perform more then one cut or specially defined for Drill move.. if ((PostPro.vars.General["output_type"] == 'dxf') or ((self.Drill) and PostPro.vars.General["repeat_drill_move"]==False)): #depth = abs(max_slice) initial_mill_depth=self.axis3_mill_depth if max_slice == 0: logger.warning(self.tr("Z infeed depth is null!")) QMessageBox.warning(g.window, self.tr("Warning during Export"), self.tr(self.tr("Error: Z infeed depth is null!"))) if workpiece_top_Z < depth: logger.warning(self.tr( "Workpiece Top Z (%f0.2) is lower than end mill depth (%f0.2)") % ( workpiece_top_Z, depth)) QMessageBox.warning(g.window, self.tr("Warning during Export"), self.tr(self.tr("Workpiece Top Z (%f0.2) is lower than end mill depth (%f0.2)") % ( workpiece_top_Z, depth))) # Compute the safe margin from the initial mill depth if initial_mill_depth < depth: logger.warning(self.tr( "Initial mill depth (%f0.2) is lower than end mill depth (%f0.2)") % ( initial_mill_depth, depth)) QMessageBox.warning(g.window, self.tr("Warning during Export"), self.tr(self.tr("Initial mill depth (%f0.2) is lower than end mill depth (%f0.2)") % ( initial_mill_depth, depth))) # Do not cut below the depth. # initial_mill_depth = depth mom_depth = initial_mill_depth # This will be performed for "normal shapes only" if not(self.Drill): # This will position the cutter on the first geometry with or without cutter comp. G1 move. exstr += self.stmove.geos.abs_el(0).Write_GCode(PostPro) # Add string to be added before the shape will be cut. exstr += PostPro.write_pre_shape_cut() # Cutter radius compensation when G41 or G42 is on, AND cutter # compensation option is set to be done outside the piece if (self.cut_cor != 40 and PostPro.vars.General["cc_outside_the_piece"]): exstr += PostPro.set_cut_cor(self.cut_cor) exstr += PostPro.chg_feed_rate(f_g1_plane) exstr += self.stmove.geos.abs_el(1).Write_GCode(PostPro) exstr += self.stmove.geos.abs_el(2).Write_GCode(PostPro) exstr += PostPro.rap_pos_z(workpiece_top_Z + abs(safe_margin)) exstr += PostPro.chg_feed_rate(f_g1_depth) exstr += PostPro.lin_pol_z(mom_depth) exstr += PostPro.chg_feed_rate(f_g1_plane) # Cutter radius compensation when G41 or G42 is on, AND cutter # compensation option is set to be done inside the piece if (self.cut_cor != 40 and not PostPro.vars.General["cc_outside_the_piece"]): exstr += PostPro.set_cut_cor(self.cut_cor) exstr += self.stmove.geos.abs_el(1).Write_GCode(PostPro) exstr += self.stmove.geos.abs_el(2).Write_GCode(PostPro) for geo in new_geos.abs_iter(): if isinstance(geo, PocketMove): geo.setZMove(f_g1_depth, f_g1_plane, workpiece_top_Z + abs(safe_margin), mom_depth, safe_retract_depth) exstr += geo.Write_GCode(PostPro) else: exstr += self.Write_GCode_for_geo(geo, PostPro) if (self.Drill==True): logger.debug("Stopping after 1st geometry as it will be drilled.") break # Turning the cutter radius compensation if (self.cut_cor != 40 and PostPro.vars.General["cancel_cc_for_depth"]): exstr += PostPro.deactivate_cut_cor() # If its a drill else: # This will position the cutter on the first geometry with or without cutter comp. G1 move. exstr += self.stmove.geos.abs_el(0).Write_GCode(PostPro) # Add string to be added before the shape will be cut. exstr += PostPro.write_pre_shape_cut() #Posiioning is part of the Start Move exstr += PostPro.rap_pos_z(workpiece_top_Z + abs(safe_margin)) exstr += PostPro.chg_feed_rate(f_g1_depth) exstr += PostPro.lin_pol_drill(mom_depth) # Numbers of loops snr = 0 #logger.debug(size(depth)) #logger.debug(depth) #logger.debug(max_slice) #logger.debug(mom_depth) # Loops for the number of cuts while mom_depth > depth and max_slice < 0.0: snr += 1 mom_depth = mom_depth + max_slice if mom_depth < depth: mom_depth = depth #logger.debug(mom_depth) #If this is last slice, remove last element # (no need to return to start point) if mom_depth == depth and self.Pocket == True: popped = new_geos.pop() #print("Pop from geos %s." % (popped)) # Erneutes Eintauchen # This will be performed for "normal shapes only" if not(self.Drill): exstr += PostPro.chg_feed_rate(f_g1_depth) exstr += PostPro.lin_pol_z(mom_depth) exstr += PostPro.chg_feed_rate(f_g1_plane) # If it is not a closed contour if not self.closed: self.reverse(new_geos) self.switch_cut_cor() # switch the "reversed" state (in order to restore it at the # end) has_reversed = not has_reversed # If cutter radius compensation is turned on. Turn it off - because some interpreters cannot handle # a switch if self.cut_cor != 40 and not PostPro.vars.General["cancel_cc_for_depth"]: exstr += PostPro.deactivate_cut_cor() exstr += PostPro.set_cut_cor(self.cut_cor) # If cutter correction is enabled if self.cut_cor != 40 and PostPro.vars.General["cancel_cc_for_depth"]: exstr += PostPro.set_cut_cor(self.cut_cor) for geo in new_geos.abs_iter(): if isinstance(geo, PocketMove): geo.setZMove(f_g1_depth, f_g1_plane, workpiece_top_Z + abs(safe_margin), mom_depth, safe_retract_depth) exstr += geo.Write_GCode(PostPro) else: exstr += self.Write_GCode_for_geo(geo, PostPro) # Turning off the cutter radius compensation if needed if self.cut_cor != 40 and PostPro.vars.General["cancel_cc_for_depth"]: exstr += PostPro.deactivate_cut_cor() # Turning off the cutter radius compensation if needed if self.cut_cor != 40 and PostPro.vars.General["cancel_cc_for_depth"]: exstr += PostPro.deactivate_cut_cor() # If its a drill do intermediate retraction and drill operation again else: exstr += PostPro.lin_ret_drill(workpiece_top_Z + abs(safe_margin)) exstr += PostPro.lin_pol_drill(mom_depth) # Do the tool retraction for a "normal" shape and Drill exstr += PostPro.chg_feed_rate(f_g1_depth) exstr += PostPro.lin_pol_z(workpiece_top_Z + abs(safe_margin)) exstr += PostPro.rap_pos_z(safe_retract_depth) # If cutter radius compensation is turned on. if self.cut_cor != 40 and not PostPro.vars.General["cancel_cc_for_depth"]: exstr += PostPro.deactivate_cut_cor() # Initial value of direction restored if necessary if has_reversed: self.reverse(new_geos) self.switch_cut_cor() self.cut_cor = prv_cut_cor # Add string to be added before the shape will be cut. exstr += PostPro.write_post_shape_cut() return exstr def Write_GCode_Drag_Knife(self, PostPro): """ This method returns the string to be exported for this shape, including the defined start and end move of the shape. This function is used for Drag Knife cutting machine only. @param PostPro: this is the Postprocessor class including the methods to export """ # initialisation of the string exstr = "" # Get the mill settings defined in the GUI safe_retract_depth = self.parentLayer.axis3_retract safe_margin = self.parentLayer.axis3_safe_margin workpiece_top_Z = self.axis3_start_mill_depth f_g1_plane = self.f_g1_plane f_g1_depth = self.f_g1_depth """ Cutting in slices is not supported for Swivel Knife tool. All is cut at once. """ mom_depth = self.axis3_mill_depth drag_depth = self.axis3_slice_depth # Move the tool to the start with G1. exstr += self.stmove.geos.abs_el(0).Write_GCode(PostPro) # Add string to be added before the shape will be cut. exstr += PostPro.write_pre_shape_cut() # Move into workpiece and start cutting into Z exstr += PostPro.rap_pos_z( workpiece_top_Z + abs(safe_margin)) # Compute the safe margin from the initial mill depth exstr += PostPro.chg_feed_rate(f_g1_depth) # Write the geometries for the first cut if isinstance(self.stmove.geos.abs_el(1), ArcGeo): if self.stmove.geos.abs_el(1).drag: exstr += PostPro.lin_pol_z(drag_depth) drag = True else: exstr += PostPro.lin_pol_z(mom_depth) drag = False else: exstr += PostPro.lin_pol_z(mom_depth) drag = False exstr += PostPro.chg_feed_rate(f_g1_plane) exstr += self.stmove.geos.abs_el(1).Write_GCode(PostPro) for geo in Geos(self.stmove.geos[2:]).abs_iter(): if isinstance(geo, ArcGeo): if geo.drag: exstr += PostPro.chg_feed_rate(f_g1_depth) exstr += PostPro.lin_pol_z(drag_depth) exstr += PostPro.chg_feed_rate(f_g1_plane) drag = True elif drag: exstr += PostPro.chg_feed_rate(f_g1_depth) exstr += PostPro.lin_pol_z(mom_depth) exstr += PostPro.chg_feed_rate(f_g1_plane) drag = False elif drag: exstr += PostPro.chg_feed_rate(f_g1_depth) exstr += PostPro.lin_pol_z(mom_depth) exstr += PostPro.chg_feed_rate(f_g1_plane) drag = False exstr += self.Write_GCode_for_geo(geo, PostPro) # Do the tool retraction exstr += PostPro.chg_feed_rate(f_g1_depth) exstr += PostPro.lin_pol_z(workpiece_top_Z + abs(safe_margin)) exstr += PostPro.rap_pos_z(safe_retract_depth) # Add string to be added before the shape will be cut. exstr += PostPro.write_post_shape_cut() return exstr def join_colinear_lines(self): """ This function is called to search for colinear connected lines an joins them if there are any """ # Do only if more then 2 geometies if len(self.geos) < 2: return new_geos = [] for i in range(len(self.geos)): if len(new_geos) == 0: new_geos.append(self.geos[i]) continue geo1 = new_geos[-1] geo2 = self.geos[i] if isinstance(geo1, LineGeo) and isinstance(geo2, LineGeo): # Remove first geometry and add result of joined geometries. Required # Cause the join will give back the last 2 geometries. new_geos.pop() new_geos += geo1.join_colinear_line(geo2) elif isinstance(geo1, ArcGeo) or isinstance(geo2, ArcGeo): new_geos.append(geo2) # If start end End Point are the same remove geometry if new_geos[-1].Ps == new_geos[-1].Pe: # Note that this can make new_geos absolutely empty! new_geos.pop() # For closed polylines check if the first and last items are colinear if self.closed and (len (new_geos) > 1): geo1 = new_geos[-1] geo2 = new_geos[0] if isinstance(geo1, LineGeo) and isinstance(geo2, LineGeo): joined_geos = geo1.join_colinear_line(geo2) # If they are joined replace first item by joined and remove # last one if len(joined_geos) == 1: new_geos[0] = joined_geos[0] new_geos.pop() self.geos = new_geos class Geos(list): def __init__(self, *args): list.__init__(self, *args) def __repr__(self): res = "Geos (" sep = "\n" for i in range(len(self)): res += sep res += "[%i] %s" % (i, repr(self[i])) sep = ",\n" res += ")" return res def abs_iter(self): for geo in list.__iter__(self): yield geo.abs_geo if geo.abs_geo else geo def rel_iter(self): for geo in list.__iter__(self): yield geo def abs_el(self, element): return self[element].abs_geo if self[element].abs_geo else self[element] dxf2gcode-20240509/dxf2gcode/core/project.py0000644000000000000000000002771514617065372017170 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2015 # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import import logging import hashlib import re from dxf2gcode.core.point import Point from dxf2gcode.core.customgcode import CustomGCode from dxf2gcode.core.layercontent import Layers, Shapes from dxf2gcode.globals.d2gexceptions import VersionMismatchError import dxf2gcode.globals.globals as g import dxf2gcode.globals.constants as c from PyQt5 import QtCore logger = logging.getLogger("Core.Project") def execute(self, content): # hack to use exec with local variables, for sure; To prevent the following error # SyntaxError: unqualified exec is not allowed in function 'load' it contains a nested function with free variables # this error is a Python 2.7 compiler bug (http://bugs.python.org/issue21591) - might occur in the earlier versions exec(content, {'d2g': self}) class Project(object): header = "# +~+~+~ DXF2GCODE project file V%s ~+~+~+" supported_versions = [1.1, 1.2, 1.3] version = supported_versions[-1] def __init__(self, parent): self.parent = parent self.file = None self.point_tol = None self.fitting_tol = None self.scale = None self.rot = None self.wpzero_x = None self.wpzero_y = None self.mirrorx = None self.mirrory = None self.split_lines = None self.aut_cut_com = None self.machine_type = None self.layers = None def tr(self, string_to_translate): """ Translate a string using the QCoreApplication translation framework @param: string_to_translate: a unicode string @return: the translated unicode string if it was possible to translate """ return str(QtCore.QCoreApplication.translate('Project', string_to_translate)) def get_hash(self, shape, version, compleet=True): reverse = False if not shape.cw: reverse = True shape.reverse() shape_iter = shape.geos if version < 1.2 else shape.geos.abs_iter() # new versions look at absolute values geos = [geo.save_v1() for geo in shape_iter] if reverse: shape.reverse() if compleet: return hashlib.sha1(''.join(sorted(geos)).encode('utf-8')).hexdigest() #If it's not a compleet reload change the hash to something more identical. This might enable a reload with previous settings #For Rot / sca / wp move etc. hash will not be identical with above algorithm as they are changed. but the Shape.nr will stay the same. else: return hashlib.sha1(('%s' %(shape.nr)).encode('utf-8')).hexdigest() def export(self,compleet=True): self.parent.TreeHandler.updateExportOrder(True) layers = [] for layer in self.parent.layerContents: shapes = [] for nr in layer.exp_order_complete: shape = layer.shapes[nr] if isinstance(shape, CustomGCode): shapes.append({'gcode': shape.gcode, 'name': shape.name, 'disabled': shape.disabled}) else: stpoint = shape.get_start_end_points(True) shapes.append({'hash_': self.get_hash(shape, Project.version, compleet), 'cut_cor': shape.cut_cor, 'Pocket_Mill': shape.Pocket, 'Drill': shape.Drill, 'cw': shape.cw, 'send_to_TSP': shape.send_to_TSP, 'disabled': shape.disabled, 'start_mill_depth': shape.axis3_start_mill_depth, 'slice_depth': shape.axis3_slice_depth, 'mill_depth': shape.axis3_mill_depth, 'f_g1_plane': shape.f_g1_plane, 'f_g1_depth': shape.f_g1_depth, 'start_x': stpoint.x, 'start_y': stpoint.y}) layers.append({'name': layer.name, 'tool_nr': layer.tool_nr, 'diameter': layer.tool_diameter, 'speed': layer.speed, 'start_radius': layer.start_radius, 'retract': layer.axis3_retract, 'safe_margin': layer.axis3_safe_margin, 'shapes': shapes}) pyCode = Project.header % str(Project.version) + ''' d2g.file = "''' + self.parent.filename + '''" d2g.point_tol = ''' + str(g.config.point_tolerance) + ''' d2g.fitting_tol = ''' + str(g.config.fitting_tolerance) + ''' d2g.scale = ''' + str(self.parent.cont_scale) + ''' d2g.rot = ''' + str(self.parent.cont_rotate) + ''' d2g.wpzero_x = ''' + str(self.parent.cont_dx) + ''' d2g.wpzero_y = ''' + str(self.parent.cont_dy) + ''' d2g.mirrorx = ''' + str(self.parent.cont_mirrorx) + ''' d2g.mirrory = ''' + str(self.parent.cont_mirrory) + ''' d2g.split_lines = ''' + str(self.parent.ui.actionSplitLineSegments.isChecked()) + ''' d2g.aut_cut_com = ''' + str(self.parent.ui.actionAutomaticCutterCompensation.isChecked()) + ''' d2g.machine_type = "''' + g.config.machine_type + '''" d2g.layers = ''' + str(layers) return pyCode def load(self, content, compleet=True): match = re.match(Project.header.replace('+', '\+') % r'(\d+\.\d+)', content) if not match: raise Exception('Incorrect project file') version = float(match.groups()[0]) if version not in Project.supported_versions: raise VersionMismatchError(match.group(), Project.version) execute(self, content) if compleet: self.parent.filename = self.file g.config.point_tolerance = self.point_tol g.config.fitting_tolerance = self.fitting_tol # If one of scale / move / rot variables has changed the reload will not identify the shape to be similar. # Therefore try to move those variables at the end and do a second reload afterwards. self.parent.cont_scale = self.scale self.parent.cont_rotate = self.rot self.parent.cont_dx = self.wpzero_x self.parent.cont_dy = self.wpzero_y #New Variable with version 1.3 if version<1.3: self.parent.cont_mirrorx = False self.parent.cont_mirrory = False else: self.parent.cont_mirrorx = self.mirrorx self.parent.cont_mirrory = self.mirrory g.config.vars.General['split_line_segments'] = self.split_lines g.config.vars.General['automatic_cutter_compensation'] = self.aut_cut_com g.config.machine_type = self.machine_type self.parent.connectToolbarToConfig(True) if not self.parent.load(False): self.parent.unsetCursor() return name_layers = dict((layer.name, layer) for layer in self.parent.layerContents) # dict comprehensions are supported since Py2.7 # name_layers = {layer.name: layer for layer in self.parent.layerContents} layers = [] for parent_layer in self.layers: if parent_layer['name'] in name_layers: layer = name_layers[parent_layer['name']] layer.tool_nr = parent_layer['tool_nr'] layer.tool_diameter = parent_layer['diameter'] layer.speed = parent_layer['speed'] layer.start_radius = parent_layer['start_radius'] layer.axis3_retract = parent_layer['retract'] layer.axis3_safe_margin = parent_layer['safe_margin'] # hash_shapes = dict((self.get_hash(shape), shape) for shape in layer.shapes) # dict comprehensions are supported since Py2.7 # hash_shapes = {self.get_hash(shape): shape for shape in layer.shapes} hash_shapes = dict() for shape in layer.shapes: shape_hash = self.get_hash(shape, version, compleet) if shape_hash in hash_shapes: hash_shapes[shape_hash].insert(0, shape) else: hash_shapes[shape_hash] = [shape] shapes = [] for parent_shape in parent_layer['shapes']: if 'gcode' in parent_shape: shape = CustomGCode(parent_shape['name'], self.parent.newNumber, parent_shape['gcode'], layer) self.parent.newNumber += 1 shape.disabled = parent_shape['disabled'] shapes.append(shape) elif parent_shape['hash_'] in hash_shapes: shape_list = hash_shapes[parent_shape['hash_']] shape = shape_list.pop() if len(shape_list) == 0: del hash_shapes[parent_shape['hash_']] shape.cut_cor = parent_shape['cut_cor'] shape.Pocket = parent_shape['Pocket_Mill'] shape.Drill = parent_shape['Drill'] shape.send_to_TSP = parent_shape['send_to_TSP'] shape.disabled = parent_shape['disabled'] shape.axis3_start_mill_depth = parent_shape['start_mill_depth'] shape.axis3_slice_depth = parent_shape['slice_depth'] shape.axis3_mill_depth = parent_shape['mill_depth'] shape.f_g1_plane = parent_shape['f_g1_plane'] shape.f_g1_depth = parent_shape['f_g1_depth'] if parent_shape['cw'] != shape.cw: shape.reverse() shape.setNearestStPoint(Point(parent_shape['start_x'], parent_shape['start_y'])) shapes.append(shape) new_shapes = set(layer.shapes) - set(shapes); shapes.extend(new_shapes) # add "new" shapes to the end layer.shapes = Shapes(shapes) # overwrite original if len(new_shapes) > 0: logger.info(self.tr("New/Unrecognized shapes added for layer:%s; %s") % (layer.name, [shape.nr for shape in new_shapes])) layers.append(layer) layers.extend(set(self.parent.layerContents) - set(layers)) # add "new" layers to the end self.parent.layerContents = Layers(layers) # overwrite original self.parent.plot() def reload(self, compleet=True): if self.parent.filename: self.parent.setCursor(QtCore.Qt.WaitCursor) self.parent.canvas.resetAll() self.parent.app.processEvents() pyCode = self.export(compleet) self.parent.makeShapes() self.load(pyCode, compleet) def small_reload(self,): self.reload(False) dxf2gcode-20240509/dxf2gcode/core/point3d.py0000664000000000000000000000525214011526166017063 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2015 # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from __future__ import division from math import sqrt class Point3D(object): __slots__ = ["x", "y", "z"] def __init__(self, x=0.0, y=0.0, z=0.0): self.x = x self.y = y self.z = z def __repr__(self): return 'Point3D(X %.3f Y %.3f Z %.3f)' % (self.x, self.y, self.z) def save_v1(self): return 'X -> %6.3f Y -> %6.3f Z -> %6.3f' % (self.x, self.y, self.z) def __eq__(self, other): return (-1e-12 < self.x - other.x < 1e-12) and\ (-1e-12 < self.y - other.y < 1e-12) and\ (-1e-12 < self.z - other.z < 1e-12) def __ne__(self, other): return not self == other def __neg__(self): return -1.0 * self def __add__(self, other): return Point3D(self.x + other.x, self.y + other.y, self.z + other.z) def __radd__(self, other): return Point3D(self.x + other, self.y + other, self.z + other) def __sub__(self, other): return self + -other def __mul__(self, other): # Calculate Scalar (dot) Product return self.x * other.x + self.y * other.y + self.z * other.z def __rmul__(self, other): return Point3D(self.x * other, self.y * other, self.z * other) def __truediv__(self, other): return Point3D(self.x / other, self.y / other, self.z / other) def cross_product(self, other): return Point3D(self.y * other.z - self.z * other.y, self.z * other.x - self.x * other.z, self.x * other.y - self.y * other.x) def unit_vector(self): return self / self.length() def length_squared(self): return self.x**2 + self.y**2 + self.z**2 def length(self): return sqrt(self.length_squared()) dxf2gcode-20240509/dxf2gcode/core/point.py0000644000000000000000000003367314617065372016653 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Vinzenz Schulz # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from __future__ import division from math import sqrt, sin, cos, atan2 from dxf2gcode.core.point3d import Point3D import numbers import logging logger = logging.getLogger("core.point") class Point(object): __slots__ = ["x", "y"] eps=1e-12 def __init__(self, x=0, y=0): self.x = x self.y = y def __repr__(self): return 'Point(X %.3f Y %.3f)' % (self.x, self.y) def save_v1(self): return 'X -> %6.3f Y -> %6.3f' % (self.x, self.y) def __eq__(self, other): """ Implementaion of is equal of two point, for all other instances it will return False @param other: The other point for the compare @return: True for the same points within tolerance """ if isinstance(other, Point): return (-Point.eps < self.x - other.x < Point.eps) and (-Point.eps < self.y - other.y < Point.eps) else: return False # def __cmp__(self, other): # """ # Implementaion of comparing of two point # @param other: The other point for the compare # @return: 1 if self is bigger, -1 if smaller, 0 if the same # """ # if self.x < other.x: # return -1 # elif self.x > other.x: # return 1 # elif self.x == other.x and self.y < other.y: # return -1 # elif self.x == other.x and self.y > other.y: # return 1 # else: # return 0 def __ne__(self, other): """ Implementation of not equal @param other:; The other point @return: negative cmp result. """ return not self == other def __neg__(self): """ Implemnetaion of Point negation @return: Returns a new Point which is negated """ return -1.0 * self def __add__(self, other): # add to another Point """ Implemnetaion of Point addition @param other: The other Point which shall be added @return: Returns a new Point """ return Point(self.x + other.x, self.y + other.y) def __radd__(self, other): """ Implementation of the add for a real value @param other: The real value to be added @return: Return the new Point """ return Point(self.x + other, self.y + other) def __lt__(self,other): """ Implementaion of less then comparision @param other: The other point for the compare @return: 1 if self is bigger, -1 if smaller, 0 if the same """ if self.x < other.x: return True elif self.x > other.x: return False elif self.x == other.x and self.y < other.y: return True elif self.x == other.x and self.y > other.y: return False else: return 0 def __sub__(self, other): """ Implemnetaion of Point subtraction @param other: The other Point which shall be subtracted @return: Returns a new Point """ return self + -other def __rmul__(self, other): """ Multiplication by a real value @param other: The real value to be multiplied by @return: The new poinnt """ return Point(other * self.x, other * self.y) def __mul__(self, other): """ The function which is called if the object is multiplied with another object. Dependent on the object type different operations are performed @param other: The element which is used for the multiplication @return: Returns the result dependent on object type """ if isinstance(other, list): # Scale the points return Point(x=self.x * other[0], y=self.y * other[1]) elif isinstance(other, numbers.Number): return Point(x=self.x * other, y=self.y * other) elif isinstance(other, Point): # Calculate Scalar (dot) Product return self.x * other.x + self.y * other.y else: logger.warning("Unsupported type: %s" % type(other)) def __truediv__(self, other): return Point(x=self.x / other, y=self.y / other) def tr(self, message): return message def between(self, B, C): """ is c between a and b? // Reference: O' Rourke p. 32 @param B: a second point @param C: a third point @return: If C is between those points """ if self.ccw(B, C) != 0: return False if (self.x == B.x) and (self.y == B.y): return (self.x == C.x) and (self.y == C.y) elif self.x != B.x: # ab not vertical return ((self.x <= C.x) and (C.x <= B.x)) or ((self.x >= C.x) and (C.x >= B.x)) else: # ab not horizontal return ((self.y <= C.y) and (C.y <= B.y)) or ((self.y >= C.y) and (C.y >= B.y)) def ccw(self, B, C): """ This functions gives the Direction in which the three points are located. @param B: a second point @param C: a third point @return: If the slope of the line AB is less than the slope of the line AC then the three points are listed in a counterclockwise order """ # return (C.y-self.y)*(B.x-self.x) > (B.y-self.y)*(C.x-self.x) area2 = (B.x - self.x) * (C.y - self.y) - (C.x - self.x) * (B.y - self.y) # logger.debug(area2) if area2 < -Point.eps: return -1 elif area2 > Point.eps: return +1 else: return 0 def cross_product(self, other): """ Returns the cross Product of two points @param P1: The first Point @param P2: The 2nd Point @return: dot Product of the points. """ return Point(self.y * other.z - self.z * other.y, self.z * other.x - self.x * other.z, self.x * other.y - self.y * other.x) def distance(self, other=None): """ Returns distance between two given points @param other: the other geometry @return: the minimum distance between the the given geometries. """ if other is None: other = Point(x=0.0, y=0.0) if not isinstance(other, Point): return other.distance(self) return (self - other).length() # def distance2_to_line(self, Ps, Pe): # dLine = Pe - Ps # # u = ((self.x - Ps.x) * dLine.x + (self.y - Ps.y) * dLine.y) / dLine.length_squared() # if u > 1.0: # u = 1.0 # elif u < 0.0: # u = 0.0 # # closest = Ps + u * dLine # diff = closest - self # return diff.length_squared() def dotProd(self, P2): """ Returns the dotProduct of two points @param self: The first Point @param other: The 2nd Point @return: dot Product of the points. """ return (self.x * P2.x) + (self.y * P2.y) def get_arc_point(self, ang=0, r=1): """ Returns the Point on the arc defined by r and the given angle, self is Center of the arc @param ang: The angle of the Point @param radius: The radius from the given Point @return: A Point at given radius and angle from Point self """ return Point(x=self.x + cos(ang) * r, \ y=self.y + sin(ang) * r) def get_normal_vector(self, other, r=1): """ This function return the Normal to a vector defined by self and other @param: The second point @param r: The length of the normal (-length for other direction) @return: Returns the Normal Vector """ unit_vector = self.unit_vector(other) return Point(x=unit_vector.y * r, y=-unit_vector.x * r) def get_nearest_point(self, points): """ If there are more then 1 intersection points then use the nearest one to be the intersection Point. @param points: A list of points to be checked for nearest @return: Returns the nearest Point """ if len(points) == 1: Point = points[0] else: mindis = points[0].distance(self) Point = points[0] for i in range(1, len(points)): curdis = points[i].distance(self) if curdis < mindis: mindis = curdis Point = points[i] return Point def length(self): return sqrt(self.length_squared()) def length_squared(self): return self.x**2 + self.y**2 def norm_angle(self, other=None): """Returns angle between two given points""" if type(other) == type(None): other = Point(x=0.0, y=0.0) return atan2(other.y - self.y, other.x - self.x) def rot_sca_abs(self, sca=None, p0=None, pb=None, rot=None, parent=None): """ Generates the absolute geometry based on the geometry self and the parent. If reverse = 1 is given the geometry may be reversed. @param sca: The Scale @param p0: The Offset @param pb: The Base Point @param rot: The angle by which the contour is rotated around p0 @param parent: The parent of the geometry (EntityContentClass) @return: A new Point which is absolute position """ if sca is None and parent is not None: p0 = parent.p0 pb = parent.pb sca = parent.sca rot = parent.rot mirrorx = parent.mirrorx mirrory = parent.mirrory pc = self - pb cos_rot = cos(rot) sin_rot = sin(rot) rotx = (pc.x * cos_rot + pc.y * -sin_rot) * sca[0] roty = (pc.x * sin_rot + pc.y * cos_rot) * sca[1] if mirrorx: rotx=-rotx if mirrory: roty=-roty p1 = Point(rotx, roty) + p0 # Recursive loop if the point self is introduced if parent.parent is not None: p1 = p1.rot_sca_abs(parent=parent.parent) elif parent is None and sca is None: # no rotation/scaling p1 = self else: pc = self - pb cos_rot = cos(rot) sin_rot = sin(rot) rotx = (pc.x * cos_rot + pc.y * -sin_rot) * sca[0] roty = (pc.x * sin_rot + pc.y * cos_rot) * sca[1] p1 = Point(rotx, roty) + p0 # print(("Self: %s\n" % self)+\ # ("P0: %s\n" % p0)+\ # ("Pb: %s\n" % pb)+\ # ("Pc: %s\n" % pc)+\ # ("rot: %0.1f\n" % degrees(rot))+\ # ("sca: %s\n" % sca)+\ # ("P1: %s\n\n" % p1)) return p1 def to3D(self, z=0.0): return Point3D(self.x, self.y, z) def transform_to_Norm_Coord(self, other, alpha): xt = other.x + self.x * cos(alpha) + self.y * sin(alpha) yt = other.y + self.x * sin(alpha) + self.y * cos(alpha) return Point(x=xt, y=yt) def triangle_height(self, other1, other2): """ Calculate height of triangle given lengths of the sides @param other1: Point 1 for triangle @param other2: Point 2 for triangel """ # The 3 lengths of the triangle to calculate a = self.distance(other1) b = other1.distance(other2) c = self.distance(other2) return sqrt(pow(b, 2) - pow((pow(c, 2) + pow(b, 2) - pow(a, 2)) / (2 * c), 2)) def trim(self, Point, dir=1, rev_norm=False): """ This instance is used to trim the geometry at the given point. The point can be a point on the offset geometry a perpendicular point on line will be used for trimming. @param Point: The point / perpendicular point for new Geometry @param dir: The direction in which the geometry will be kept (1 means the being will be trimmed) """ if not(hasattr(self, "end_normal")): return self new_normal = self.unit_vector(Point) if rev_norm: new_normal = -new_normal if dir == 1: self.start_normal = new_normal return self else: self.end_normal = new_normal return self def unit_vector(self, Pto=None, r=1): """ Returns vector of length 1 with similar direction as input @param Pto: The other point @return: Returns the Unit vector """ if Pto is None: return self / self.length() else: diffVec = Pto - self l = diffVec.distance() return Point(diffVec.x / l * r, diffVec.y / l * r) def within_tol(self, other, tol): """ Are the two points within tolerance """ # TODO is this sufficient, or do we want to compare the distance return abs(self.x - other.x) <= tol and abs(self.y - other.y) < tol def plot2plot(self, plot, format='xr'): plot.plot([self.x], [self.y], format) dxf2gcode-20240509/dxf2gcode/core/pocketmove.py0000664000000000000000000002010714011526166017653 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Vinzenz Schulz # Jean-Paul Schouwstra # # Copyright (C) 20019-2020 # San Zamoyski # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import division #from math import sqrt, pi #from copy import deepcopy from dxf2gcode.core.point import Point #from dxf2gcode.core.boundingbox import BoundingBox #from dxf2gcode.core.arcgeo import ArcGeo import logging logger = logging.getLogger("core.pocketmove") #eps = 1e-12 class PocketMove(object): """ Non Standard Geometry Item used for moving over element, plotting and G-Code export. Generally for milling pockets. """ def __init__(self, Ps, Pe): """ Standard Method to initialize PocketMove. @param Ps: The Start Point of the line @param Pe: the End Point of the line """ self.Ps = Ps self.Pe = Pe self.length = self.Ps.distance(self.Pe) #self.calc_bounding_box() self.abs_geo = None #This values will be set and used # while generating GCode self.feedZ = 0 self.feedXY = 0 self.safe = 0 self.depth = 0 self.retr = 0 """ def __deepcopy__(self, memo): return LineGeo(deepcopy(self.Ps, memo), deepcopy(self.Pe, memo)) """ def __str__(self): """ Standard method to print the object @return: A string """ return ("PocketMove form %s x %s to %s x %s." (self.Ps.x, self.Ps.y, self.Pe.x, self.Pe.y)) """ def save_v1(self): return "\nLineGeo" +\ "\nPs: %s" % self.Ps.save_v1() +\ "\nPe: %s" % self.Pe.save_v1() +\ "\nlength: %0.5f" % self.length """ """ def calc_bounding_box(self): \""" Calculated the BoundingBox of the geometry and saves it into self.BB \""" Ps = Point(x=min(self.Ps.x, self.Pe.x), y=min(self.Ps.y, self.Pe.y)) Pe = Point(x=max(self.Ps.x, self.Pe.x), y=max(self.Ps.y, self.Pe.y)) self.BB = BoundingBox(Ps=Ps, Pe=Pe) """ #Function from RapidMove replaced with original from LineGeo def get_start_end_points(self, start_point, angles=None): if start_point: if angles is None: return self.Ps elif angles: return self.Ps, self.Ps.norm_angle(self.Pe) else: return self.Ps, (self.Pe - self.Ps).unit_vector() else: if angles is None: return self.Pe elif angles: return self.Pe, self.Pe.norm_angle(self.Ps) else: return self.Pe, (self.Pe - self.Ps).unit_vector() #Sets values for GCode generation def setZMove(self, feedz, feedxy, safe, depth, retr): self.feedZ = feedz self.feedXY = feedxy self.safe = safe self.depth = depth self.retr = retr """ def distance_l_p(self, Point): \""" Find the shortest distance between CCLineGeo and Point elements. Algorithm acc. to http://notejot.com/2008/09/distance-from-Point-to-line-segment-in-2d/ http://softsurfer.com/Archive/algorithm_0106/algorithm_0106.htm @param Point: the Point @return: The shortest distance between the Point and Line \""" d = self.Pe - self.Ps v = Point - self.Ps t = d.dotProd(v) if t <= 0: # our Point is lying "behind" the segment # so end Point 1 is closest to Point and distance is length of # vector from end Point 1 to Point. return self.Ps.distance(Point) elif t >= d.dotProd(d): # our Point is lying "ahead" of the segment # so end Point 2 is closest to Point and distance is length of # vector from end Point 2 to Point. return self.Pe.distance(Point) else: # our Point is lying "inside" the segment # i.e.:a perpendicular from it to the line that contains the line if (v.dotProd(v) - (t * t) / d.dotProd(d)) < eps: return 0.0 else: return sqrt(v.dotProd(v) - (t * t) / d.dotProd(d)) """ """ def isHit(self, caller, xy, tol): \""" This function returns true if the nearest point between the two geometries is within the square of the given tolerance @param caller: This is the calling entities (only used in holegeo) @param xy: The point which shall be used to determine the distance @tol: The tolerance which is used for Hit testing. \""" return self.distance_l_p(xy) <= tol """ #Function from RapidMove replaced with original from LineGeo (mod) def make_abs_geo(self, parent=None): """ Generates the absolute geometry based on itself and the parent. This is done for rotating and scaling purposes """ Ps = self.Ps.rot_sca_abs(parent=parent) Pe = self.Pe.rot_sca_abs(parent=parent) self.abs_geo = PocketMove(Ps=Ps, Pe=Pe) #Function from RapidMove replaced with original from LineGeo def make_path(self, caller, drawHorLine): drawHorLine(caller, self.Ps, self.Pe) """ def reverse(self): \""" Reverses the direction of the arc (switch direction). \""" self.Ps, self.Pe = self.Pe, self.Ps if self.abs_geo: self.abs_geo.reverse() """ """ def to_short_string(self): return "(%f, %f) -> (%f, %f)" % (self.Ps.x, self.Ps.y, self.Pe.x, self.Pe.y) """ """ def update_start_end_points(self, start_point, value): prv_ang = self.Ps.norm_angle(self.Pe) if start_point: self.Ps = value else: self.Pe = value new_ang = self.Ps.norm_angle(self.Pe) if 2 * abs(((prv_ang - new_ang) + pi) % (2 * pi) - pi) >= pi: # seems very unlikely that this is what you want - the direction # changed (too drastically) self.Ps, self.Pe = self.Pe, self.Ps self.length = self.Ps.distance(self.Pe) """ def Write_GCode(self, PostPro): exstr = "" """ Writes the GCODE for a rapid position. @param PostPro: The PostProcessor instance to be used @return: Returns the string to be written to a file. """ exstr += PostPro.chg_feed_rate(self.feedZ) exstr += PostPro.lin_pol_z(self.safe) exstr += PostPro.rap_pos_z(self.retr) exstr += PostPro.rap_pos_xy(self.Pe) #TODO: going Z-up can be done as full speed? exstr += PostPro.rap_pos_z(self.safe) exstr += PostPro.chg_feed_rate(self.feedZ) exstr += PostPro.lin_pol_z(self.depth) exstr += PostPro.chg_feed_rate(self.feedXY) return exstr """ def Write_GCode(self, PostPro): \""" Writes the GCODE for a Line. @param PostPro: The PostProcessor instance to be used @return: Returns the string to be written to a file. \""" Ps = self.get_start_end_points(True) Pe = self.get_start_end_points(False) return PostPro.lin_pol_xy(Ps, Pe) """ dxf2gcode-20240509/dxf2gcode/core/pocketmill.py0000664000000000000000000010444514011526166017652 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Vinzenz Schulz # Jean-Paul Schouwstra # # Copyright (C) 2019-2020 # San Zamoyski # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from __future__ import division from math import sin, cos, pi, sqrt, ceil from copy import deepcopy import dxf2gcode.globals.globals as g from dxf2gcode.core.linegeo import LineGeo from dxf2gcode.core.arcgeo import ArcGeo from dxf2gcode.core.point import Point from dxf2gcode.core.intersect import Intersect from dxf2gcode.core.shape import Geos from dxf2gcode.core.shape import Shape from dxf2gcode.core.shapeoffset import * from dxf2gcode.core.pocketmove import PocketMove import logging logger = logging.getLogger('core.pocketmill') import time class InterPoint(object): def __init__(self, x=0, y=0, i=0, mill = False): self.x = x self.y = y self.i = i self.mill = mill self.p = Point(x, y) def __str__ (self): return 'X ->%6.3f Y ->%6.3f (%s) is %s' % (self.x, self.y, self.i, self.mill) def setMill(self, mill=False): self.mill = mill ### end of not-inside class BBArray(object): def __init__(self, bbStartPoint, bbEndPoint, diff): #This class creates array filled with points (self.create()) # they will be used to decide where to mill lines self.array = [] self.any = False #Start point - top, right if bbStartPoint.x > bbEndPoint.x: self.xStart = bbEndPoint.x self.xEnd = bbStartPoint.x else: self.xStart = bbStartPoint.x self.xEnd = bbEndPoint.x if bbStartPoint.y > bbEndPoint.y: self.yStart = bbStartPoint.y self.yEnd = bbEndPoint.y else: self.yStart = bbEndPoint.y self.yEnd = bbStartPoint.y #TODO: calculate diff size based on BBArray height #TODO: and minimal maximum diff (like on circle milling) self.diff = diff self.overUpRight = Point(self.xStart + 1, self.xStart + 1) self.overDownLeft = Point(self.xEnd - 1, self.xEnd - 1) self.overDistance = self.overUpRight.distance(self.overDownLeft) self.divY = 1 self.divX = 4 def create(self): #Fills array with InterPoints arrayIndex = 0 yi = self.yStart - self.diff / self.divY while yi > self.yEnd: xi = self.xStart + self.diff/self.divX while xi < self.xEnd: self.append(InterPoint(xi, yi, arrayIndex, True)) xi += self.diff/self.divX arrayIndex += 1 yi -= self.diff / self.divY def checkIfAny(self): #Checks if any of points is set to be milled any = False for point in self.array: if point.mill == True: any = True break return any def append(self, newPoint): #Adds point to array self.array.append(newPoint) def print(self): #This will stop work if array will be not in order #This function tries to dump to stdout whole array # in somehow readable way. yi = self.array[0].y print("%8.2f" % (yi) , end = "\t") for BBPoint in self.array: if BBPoint.y != yi: yi = BBPoint.y print() print("%8.2f" % (yi) , end = "\t") if BBPoint.mill: print('T', end = ' ') else: print(' ', end = ' ') print() def removeLine(self, line): #Sets points in array to mill=False # if they lay on line if line.Ps.x > line.Pe.x: line = LineGeo(line.Pe, line.Ps) for BBPoint in self.array: if BBPoint.y == line.Ps.y and line.Pe.x >= BBPoint.x and BBPoint.x >= line.Ps.x: BBPoint.setMill(False) def findHorizontalWithPoint(self, point): #Search array to find maximum lenght line that contains given point #values outside the box closestFalseLeft = self.xStart - 1 closestFalseRight = self.xEnd + 1 closestTrueLeft = point.x closestTrueRight = point.x #go left and right and find closest Falses for aPoint in self.array: if aPoint.mill == False and aPoint.y == point.y: if aPoint.x < point.x and closestFalseLeft < aPoint.x: closestFalseLeft = aPoint.x if aPoint.x > point.x and closestFalseRight > aPoint.x: closestFalseRight = aPoint.x #print("False x'ses: %s and %s" % (closestFalseLeft, closestFalseRight)) #now find closest True's to those points for aPoint in self.array: if aPoint.mill == True and aPoint.y == point.y: #looking for most-left (smallest x) True #before (bigger than) closestFalseLeft #smaller than point if aPoint.x < point.x and aPoint.x > closestFalseLeft and aPoint.x < closestTrueLeft: closestTrueLeft = aPoint.x if aPoint.x > point.x and aPoint.x < closestFalseRight and aPoint.x > closestTrueRight: closestTrueRight = aPoint.x if point.distance(Point(closestTrueLeft, point.y)) < point.distance(Point(closestTrueRight, point.y)): return LineGeo(Point(closestTrueLeft, point.y), Point(closestTrueRight, point.y)) else: return LineGeo(Point(closestTrueRight, point.y), Point(closestTrueLeft, point.y)) def findNextLine(self, line, preferTop): #Tries to find line over or under given line to be milled. # It prefers top or bottom, and returns new preferences ;) # It returns preferTop = True if it finds Bottom. bottomY = self.yEnd - 1 topY = self.yStart + 1 currentY = line.Ps.y currentX = line.Pe.x #find closest top and bottom Y for BBPoint in self.array: #We do not check if it is set to mill, since # we want to eliminate lines that are too far #if BBPoint.y == currentY and BBPoint.mill == True: # topY = currentY # bottomY = currentY # break if topY > BBPoint.y and currentY < BBPoint.y: topY = BBPoint.y if bottomY < BBPoint.y and currentY > BBPoint.y: bottomY = BBPoint.y print("topY: %s, bottomY: %s." % (topY, bottomY)) if line.Ps.x < line.Pe.x: xRangeStart = line.Ps.x xRangeEnd = line.Pe.x else: xRangeStart = line.Pe.x xRangeEnd = line.Ps.x xListTop = [] xListBottom = [] #create two lists of X'es in "good" range for BBPoint in self.array: if BBPoint.mill == True and xRangeStart <= BBPoint.x <= xRangeEnd: if BBPoint.y == topY: xListTop.append(BBPoint.x) elif BBPoint.y == bottomY: xListBottom.append(BBPoint.x) if (preferTop == True or len(xListBottom) == 0) and len(xListTop) > 0: if abs(currentX - min(xListTop)) > abs(currentX - max(xListTop)): #return Line(Point(max(xListTop), topY), Point(min(xListTop), topY)) return self.findHorizontalWithPoint(Point(max(xListTop), topY)), False else: return self.findHorizontalWithPoint(Point(min(xListTop), topY)), False elif (preferTop == False or len(xListTop) == 0) and len(xListBottom) > 0: if abs(currentX - min(xListBottom)) > abs(currentX - max(xListBottom)): return self.findHorizontalWithPoint(Point(max(xListBottom), bottomY)), True else: return self.findHorizontalWithPoint(Point(min(xListBottom), bottomY)), True else: print("preferTop is %s, bottom len: %s, top len: %s." % (preferTop, len(xListBottom), len(xListTop))) return None, preferTop def findClosestEnd(self, point): #Looks for most-bottom and most-top y's. # For those two looks for most-lefts and most-rights. # Then checks which one is closest, so milling will start # from closest most-far line and most-close point. bottomY = self.yStart + 1 topY = self.yEnd - 1 for BBPoint in self.array: if BBPoint.mill == True: if BBPoint.y > topY: topY = BBPoint.y if BBPoint.y < bottomY: bottomY = BBPoint.y topLeftX = self.xEnd - 1 topRightX = self.xStart + 1 bottomLeftX = self.xEnd - 1 bottomRightX = self.xStart + 1 for BBPoint in self.array: if BBPoint.mill == True: if BBPoint.y == topY: if BBPoint.x < topLeftX: topLeftX = BBPoint.x if BBPoint.x > topRightX: topRightX = BBPoint.x if BBPoint.y == bottomY: if BBPoint.x < bottomLeftX: bottomLeftX = BBPoint.x if BBPoint.x > bottomRightX: bottomRightX = BBPoint.x points = [ Point(topLeftX, topY), Point(topRightX, topY), Point(bottomLeftX, bottomY), Point(bottomRightX, bottomY)] distance = self.overDistance closestPoint = None for p in points: #print("Extreme: %s." % (p)) if point.distance(p) < distance: distance = point.distance(p) closestPoint = p return closestPoint class PocketMill(object): def __init__(self, stmove=None): #It gets stmove object and do whole magic with it: # creates paths for pocket milling self.stmove = stmove # Get tool radius based on tool diameter. self.tool_rad = self.stmove.shape.parentLayer.getToolRadius() self.bbarray = 0 self.arrayYStart = 0 self.arrayYEnd = 0 self.arrayXStart = 0 self.arrayXEnd = 0 self.diff = 0 self.dist = 0 self.inters = [] def removeNearShape(self): #Looks for points in array that are too close to shape # to be milled. for BBPoint in self.bbarray.array: #check only points that are meant to be milled if BBPoint.mill == True: #check if this point is not too close to any geo in shape for geo in self.stmove.shape.geos.abs_iter(): if isinstance(geo, LineGeo): if geo.distance_l_p(BBPoint.p) < self.dist: BBPoint.setMill(False) break elif isinstance(geo, ArcGeo): if geo.distance_a_p(BBPoint.p) < self.dist: BBPoint.setMill(False) break def movePoint(self, point): #Moves point by particular value (addX and Y are # calculated before creating "point") #in fact point is an array [point, addX, addY] return [Point(point[0].x + point[1], point[0].y + point[2]), point[1], point[2]] def removeOutOfShape(self): #Check all points in array if they are inside (self.inters) or # outside shape. If they are outside, it sets them # to mill= False for BBPoint in self.bbarray.array: count = 0 if BBPoint.mill == True: for pinter in self.inters: if pinter.y == BBPoint.y and pinter.x > BBPoint.x: count += 1 if count%2 == 0: BBPoint.setMill(False) def createInterList(self): yi = self.bbarray.yStart - self.diff/self.bbarray.divY #this while loop will prepare points that crosses the shape. # it will be used later to check if point lays inside shape. # imagine horizontal line from particular point up to the end # of BBox containing shape. if the line crosses shape even times # we are outside the shape. while yi > self.bbarray.yEnd: for interGeo in self.stmove.shape.geos.abs_iter(): if isinstance(interGeo, LineGeo): if interGeo.Ps.x == interGeo.Pe.x: #this is vertical line #check if obvius intersection lays on finite line if yi > min(interGeo.Ps.y, interGeo.Pe.y) and yi < max(interGeo.Ps.y, interGeo.Pe.y): self.inters.append(Point(interGeo.Pe.x, yi)) continue #calculate line coords lineA = (interGeo.Ps.y - interGeo.Pe.y)/(interGeo.Ps.x - interGeo.Pe.x) lineB = interGeo.Ps.y - lineA * interGeo.Ps.x if lineA == 0: #TODO: check if shape like this: # \____ # \ # won't cause problem... # #print("Horizontal!") continue #TODO: joints will propably cause problems interX = (yi - lineB)/lineA #check if intersection does belong to line if interX < min(interGeo.Ps.x, interGeo.Pe.x) or interX > max(interGeo.Ps.x, interGeo.Pe.x): continue self.inters.append(Point(interX, yi)) elif isinstance(interGeo, ArcGeo): #based on intersect.py:line_arc_intersect baX = self.bbarray.xEnd - self.bbarray.xStart baY = 0 caX = interGeo.O.x - self.bbarray.xStart caY = interGeo.O.y - yi a = baX * baX + baY * baY bBy2 = baX * caX + baY * caY c = caX * caX + caY * caY - interGeo.r * interGeo.r if a == 0: continue pBy2 = bBy2 / a q = c / a disc = pBy2 * pBy2 - q if disc > 0: tmpSqrt = sqrt(disc) abScalingFactor1 = -pBy2 + tmpSqrt abScalingFactor2 = -pBy2 - tmpSqrt p1 = Point(self.bbarray.xStart - baX * abScalingFactor1, yi - baY * abScalingFactor1) p2 = Point(self.bbarray.xStart - baX * abScalingFactor2, yi - baY * abScalingFactor2) linex = sorted([self.bbarray.xStart, self.bbarray.xEnd]) liney = sorted([yi, yi]) ang = interGeo.dif_ang(interGeo.Ps, p1, interGeo.ext) if interGeo.ext > 0: arcOut = interGeo.ext + 1e-8 >= ang >= -1e-8 else: arcOut = interGeo.ext - 1e-8 <= ang <= 1e-8 if linex[0] - 1e-8 <= p1.x and p1.x <= linex[1] + 1e-8 and liney[0] - 1e-8 <= p1.y and p1.y <= liney[1] + 1e-8 and arcOut: #print("Good point! %s" % (p1)) self.inters.append(p1) ang = interGeo.dif_ang(interGeo.Ps, p2, interGeo.ext) if interGeo.ext > 0: arcOut = interGeo.ext + 1e-8 >= ang >= -1e-8 else: arcOut = interGeo.ext - 1e-8 <= ang <= 1e-8 if linex[0] - 1e-8 <= p2.x <= linex[1] + 1e-8 and liney[0] - 1e-8 <= p2.y <= liney[1] + 1e-8 and arcOut: #print("Good point! %s" % (p2)) self.inters.append(p2) yi -= self.diff/self.bbarray.divY #print("End of finding intersections") def createLines(self): #This function will decide what kind of shape do we deal with # then creates milling lines and move paths. circle = 0 horizontalRectangle = 0 geosNum = len(self.stmove.shape.geos) print("Number of geos: %s" % (geosNum)) cutComp = self.stmove.shape.cut_cor if cutComp == 40: #no compensation realStart = self.stmove.shape.geos[0].Ps else: realStart = self.stmove.geos[-1].Pe #set the proper direction for the tool path if self.stmove.shape.cw ==True: direction = -1; else: direction = 1; if geosNum == 2: if self.stmove.shape.geos[0].r == self.stmove.shape.geos[1].r and self.stmove.shape.geos[0].Ps == self.stmove.shape.geos[1].Pe and self.stmove.shape.geos[0].Pe == self.stmove.shape.geos[1].Ps: circle = 1 if geosNum == 4: hLines = 0 vLines = 0 linesNum = 0 for gLine in self.stmove.shape.geos: if isinstance(gLine, LineGeo) and gLine.Ps.x == gLine.Pe.x: vLines += 1 if isinstance(gLine, LineGeo) and gLine.Ps.y == gLine.Pe.y: hLines += 1 if hLines == 2 and vLines == 2: horizontalRectangle = 1 currentPoint = self.stmove.start if False: print("beans shape") #TODO: beans shape: (____) elif False: #TODO: "Only lines and <180 angle. print("Only lines and <180 angle.") elif circle == 1: stepOverlay = 0.9 #this is radius of whole shape if cutComp == 40: #no compensation millRad = self.stmove.shape.geos[0].r - self.tool_rad elif cutComp == 41: #outside millRad = self.stmove.shape.geos[0].r elif cutComp == 42: #comp inside millRad = self.stmove.shape.geos[0].r - 2 * self.tool_rad rotNum = (millRad - 2 * self.tool_rad * stepOverlay)/(self.tool_rad * (1 + stepOverlay)) rotNum = ceil(rotNum) stepOverlay = (millRad - rotNum * self.tool_rad)/(self.tool_rad * 2 * rotNum) currentRad = millRad - self.tool_rad * stepOverlay circleOff = self.tool_rad * (1 + stepOverlay) centerPoint = self.stmove.shape.geos[0].O print("Shape radius: %s, circle rotNum: %s, stepOverlay: %s." % (self.stmove.shape.geos[0].r, rotNum + 1, stepOverlay)) currentPoint = realStart rLimit = self.tool_rad * (1 - stepOverlay) while currentRad > rLimit: print("CurrentRad: %s, limit %s." % (currentRad, rLimit)) goToPoint = Point(centerPoint.x + currentRad, centerPoint.y) if centerPoint.y == currentPoint.y and centerPoint.x < currentPoint.x: self.stmove.append(LineGeo(currentPoint, goToPoint)) else: self.stmove.append(PocketMove(currentPoint, goToPoint)) currentPoint = goToPoint self.stmove.append(ArcGeo(Ps = currentPoint, Pe = currentPoint, O = centerPoint, r = currentRad, direction = direction)) currentRad -= circleOff self.stmove.append(PocketMove(currentPoint, realStart)) elif horizontalRectangle == 1: #rad varsus rad*2^(1/2) is 0,707106781 stepOverlay = 0.7 #hRectangleOff = 0.7 * self.tool_rad startTop = 0 startLeft = 0 #calculate center point xes = [] yes = [] for geo in self.stmove.shape.geos: xes.append(geo.Ps.x) yes.append(geo.Ps.y) centerPoint = Point(sum(xes)/4, sum(yes)/4) if realStart.x < centerPoint.x and realStart.y < centerPoint.y: #start is left-bottom corner print("start is left-bottom corner") startTop = 0 startLeft = 1 elif realStart.x > centerPoint.x and realStart.y < centerPoint.y: print("start is right-bottom corner") startTop = 0 startLeft = 0 elif realStart.x < centerPoint.x and realStart.y > centerPoint.y: print("start is left-top corner") startTop = 1 startLeft = 1 elif realStart.x > centerPoint.x and realStart.y > centerPoint.y: print("start is right-top corner") startTop = 1 startLeft = 0 #distance between center and farrest mill line xOff = abs(centerPoint.x - self.stmove.shape.geos[0].Ps.x) yOff = abs(centerPoint.y - self.stmove.shape.geos[0].Ps.y) if self.stmove.shape.cut_cor == 41: xOff += self.tool_rad yOff += self.tool_rad elif self.stmove.shape.cut_cor == 42: xOff -= self.tool_rad yOff -= self.tool_rad #Off = 2*stepOverlay*self.tool_rad + n*(1+stepOverlay)*self.tool_rad + tool_rad # n*(1+stepOverlay)*self.tool_rad = Off - 2*stepOverlay*self.tool_rad - tool_rad # n = (Off - 2*stepOverlay*self.tool_rad - tool_rad)/((1+stepOverlay)*self.tool_rad) numRotX = (xOff - 2*stepOverlay*self.tool_rad - self.tool_rad)/(self.tool_rad * (1 + stepOverlay)) numRotY = (yOff - 2*stepOverlay*self.tool_rad - self.tool_rad)/(self.tool_rad * (1 + stepOverlay)) numRot = ceil(min(numRotX, numRotY)) #Off = 2*stepOverlay*self.tool_rad + n*(1+stepOverlay)*self.tool_rad + tool_rad # Off - tool_rad - n*self.tool_rad = 2*stepOverlay*self.tool_rad + n*stepOverlay*self.tool_rad # (Off - tool_rad - n*self.tool_rad)/(2*self.tool_rad + n*self.tool_rad) = stepOverlay stepOverlayX = (xOff - numRot * self.tool_rad - self.tool_rad)/((numRot + 2) * self.tool_rad) stepOverlayY = (yOff - numRot * self.tool_rad - self.tool_rad)/((numRot + 2) * self.tool_rad) if stepOverlayX > stepOverlay: stepOverlayX = stepOverlay if stepOverlayY > stepOverlay: stepOverlayY = stepOverlay print("Number of rotations: %s." % (numRot)) #check first point and where it is # and build array of points calculated # from self.tool_rad and first point # for CW and CCW pointLeftBottom = Point(centerPoint.x - xOff + self.tool_rad * (1 + stepOverlayX), centerPoint.y - yOff + self.tool_rad * (1 + stepOverlayY)) pointLeftTop = Point(centerPoint.x - xOff + self.tool_rad * (1 + stepOverlayX), centerPoint.y + yOff - self.tool_rad * (1 + stepOverlayY)) pointRightTop = Point(centerPoint.x + xOff - self.tool_rad * (1 + stepOverlayX), centerPoint.y + yOff - self.tool_rad * (1 + stepOverlayY)) pointRightBottom = Point(centerPoint.x + xOff - self.tool_rad * (1 + stepOverlayX), centerPoint.y - yOff + self.tool_rad * (1 + stepOverlayY)) #also calculade addX and addY values, so next time # corner-point will be in right place. stepX = (1 + stepOverlayX) * self.tool_rad stepY = (1 + stepOverlayY) * self.tool_rad if startLeft == 1 and startTop == 0: pointList = [ [pointLeftBottom, Point(stepX, 0)], [pointLeftTop, Point(stepX, -stepY)], [pointRightTop, Point(-stepX, -stepY)], [pointRightBottom, Point(-stepX, stepY)] ] addAfter = Point(0, stepY) elif startLeft == 0 and startTop == 0: pointList = [ [pointRightBottom, Point(0, stepY)], [pointLeftBottom, Point(stepX, stepY)], [pointLeftTop, Point(stepX, -stepY)], [pointRightTop, Point(-stepX, -stepY)] ] addAfter = Point(-stepX, 0) elif startLeft == 1 and startTop == 1: pointList = [ [pointLeftTop, Point(0, -stepY)], [pointRightTop, Point(-stepX, -stepY)], [pointRightBottom, Point(-stepX, stepY)], [pointLeftBottom, Point(stepX, stepY)] ] addAfter = Point(stepX, 0) elif startLeft == 0 and startTop == 1: pointList = [ [pointRightTop, Point(-stepX, 0)], [pointRightBottom, Point(-stepX, stepY)], [pointLeftBottom, Point(stepX, stepY)], [pointLeftTop, Point(stepX, -stepY)] ] addAfter = Point(0, -stepY) #CW => -1, CCW => 1 if direction == 1: #if CCW, change list direction tmp = pointList[1] pointList[1] = pointList[3] pointList[3] = tmp #correct addAfter tmp1 = pointList[0][1] pointList[0][1] = addAfter addAfter = tmp1 #TODO: convert it to move based on horizontal and vertical lines only #TODO: or check if it is needed. self.stmove.append(LineGeo(realStart, pointList[0][0])) i = 0 #go throught all points until center while numRot >= i: print("Rot: %s/%s." % (i, numRot)) self.stmove.append(LineGeo(pointList[0][0], pointList[1][0])) pointList[0][0] += pointList[0][1] self.stmove.append(LineGeo(pointList[1][0], pointList[2][0])) pointList[1][0] += pointList[1][1] self.stmove.append(LineGeo(pointList[2][0], pointList[3][0])) pointList[2][0] += pointList[2][1] self.stmove.append(LineGeo(pointList[3][0], pointList[0][0])) pointList[3][0] += pointList[3][1] currentPoint = pointList[0][0] i += 1 pointList[0][0] += addAfter #go back to start point self.stmove.append(PocketMove(currentPoint, realStart)) #done! else: #this is universal way to make pocket-milling # it (after making contour) will do zig-zag # inside shape. It is not extremely optimised # but should work for every kind of shape. #rad varsus rad*2^(1/2) is 0,707106781 self.diff = self.tool_rad*2 * 0.7 compType = self.stmove.shape.cut_cor #Compensation: # 42 - inside # 41 - outside # 40 - no compensation print("Compensations type: %s." % (compType)) #print('BB: ' + self.stmove.shape.BB) print("self.stmove.BB: %s" % self.stmove.shape.BB) self.bbarray = BBArray(self.stmove.shape.BB.Ps, self.stmove.shape.BB.Pe, self.diff) print("BBBounds: X%s to X%s, Y%s to Y%s" % (self.bbarray.xStart, self.bbarray.xEnd, self.bbarray.yStart, self.bbarray.yEnd)) #how close can be point to shape #TODO: tweak? self.dist = self.tool_rad/0.7 ### fill array with TRUEs self.bbarray.create() ### end of filling array with TRUEs print("Empty array: ") self.bbarray.print() print("End of empty array.") ### check if point is not to close to shape #TODO: compensation type 41 if compType == 42: self.removeNearShape() print("Array without Shape: ") self.bbarray.print() print("Array without Shape END.") #imagine parallel, horizontal lines (distance of self.diff) # this function will find all intersections of those lines # with shape. self.createInterList() self.removeOutOfShape() print("Final array:") self.bbarray.print() print("End of final array.") ### ### ### ### Cool! We have now complete array of points to mill ### but we need to convert it into LINES now... print("Tool rad is %s." % (self.tool_rad)) currentPoint = realStart while self.bbarray.checkIfAny(): #Find start for new zig-zag and go there. closestPoint = self.bbarray.findClosestEnd(currentPoint) closestLine = self.bbarray.findHorizontalWithPoint(closestPoint) print("Closest end line to start is %s." % (closestLine)) print("Closest point to start is %s." % (closestPoint)) goToPoint = closestLine.Ps #line = LineGeo(currentPoint, goToPoint) #self.stmove.append(line) self.stmove.append(PocketMove(currentPoint, goToPoint)) currentPoint = goToPoint preferTop = True while True: #currentPoint should be one of bbarray.mill = true now # so we are between Ps and Pe of next line at Y height #Do first line from starting point line = self.bbarray.findHorizontalWithPoint(currentPoint) #dir #print("Line at Y%8.2f: from X%8.2f to X%8.2f." % (line.Ps.y, line.Ps.x, line.Pe.x)) #If we are not at start point, go there if currentPoint.x != line.Ps.x: self.stmove.append(LineGeo(currentPoint, line.Ps)) self.stmove.append(line) self.bbarray.removeLine(line) currentPoint = line.Pe #Now we need to check if there is any near line we can go line, preferTop = self.bbarray.findNextLine(line, preferTop) if line == None: print("Done.") break else: print("Closest line is %s x %s => %s x %s." % (line.Ps.x, line.Ps.y, line.Pe.x, line.Pe.y)) #check if we can go straight up, or we need to do some stuff... if not (line.Ps.x <= currentPoint.x <= line.Pe.x or line.Ps.x >= currentPoint.x >= line.Pe.x): #we need to do some stuff: go back under next line goToPoint = Point(line.Ps.x, currentPoint.y) self.stmove.append(LineGeo(currentPoint, goToPoint)) currentPoint = goToPoint #Ok, go straight up, and end on nextLine (somewhere # between or on start/end point goToPoint = Point(currentPoint.x, line.Ps.y) self.stmove.append(LineGeo(currentPoint, goToPoint)) currentPoint = goToPoint print("Removed lines.") self.bbarray.print() #self.stmove.append(LineGeo(currentPoint, self.stmove.end)) self.stmove.append(PocketMove(currentPoint, realStart)) dxf2gcode-20240509/dxf2gcode/core/linegeo.py0000664000000000000000000001465214011526166017131 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Vinzenz Schulz # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import division from math import sqrt, pi from copy import deepcopy from dxf2gcode.core.point import Point from dxf2gcode.core.boundingbox import BoundingBox #from dxf2gcode.core.arcgeo import ArcGeo import logging logger = logging.getLogger("core.linegeo") eps = 1e-12 class LineGeo(object): """ Standard Geometry Item used for DXF Import of all geometries, plotting and G-Code export. """ def __init__(self, Ps, Pe): """ Standard Method to initialize the LineGeo. @param Ps: The Start Point of the line @param Pe: the End Point of the line """ self.Ps = Ps self.Pe = Pe self.length = self.Ps.distance(self.Pe) self.calc_bounding_box() self.abs_geo = None def __deepcopy__(self, memo): return LineGeo(deepcopy(self.Ps, memo), deepcopy(self.Pe, memo)) def __repr__(self): """ Standard method to print the object @return: A string """ return ("LineGeo (Ps=%s, Pe=%s)" % (self.Ps, self.Pe)) def save_v1(self): return "\nLineGeo" +\ "\nPs: %s" % self.Ps.save_v1() +\ "\nPe: %s" % self.Pe.save_v1() +\ "\nlength: %0.5f" % self.length def calc_bounding_box(self): """ Calculated the BoundingBox of the geometry and saves it into self.BB """ Ps = Point(x=min(self.Ps.x, self.Pe.x), y=min(self.Ps.y, self.Pe.y)) Pe = Point(x=max(self.Ps.x, self.Pe.x), y=max(self.Ps.y, self.Pe.y)) self.BB = BoundingBox(Ps=Ps, Pe=Pe) def get_start_end_points(self, start_point, angles=None): if start_point: if angles is None: return self.Ps elif angles: return self.Ps, self.Ps.norm_angle(self.Pe) else: return self.Ps, (self.Pe - self.Ps).unit_vector() else: if angles is None: return self.Pe elif angles: return self.Pe, self.Pe.norm_angle(self.Ps) else: return self.Pe, (self.Pe - self.Ps).unit_vector() def distance_l_p(self, Point): """ Find the shortest distance between CCLineGeo and Point elements. Algorithm acc. to http://notejot.com/2008/09/distance-from-Point-to-line-segment-in-2d/ http://softsurfer.com/Archive/algorithm_0106/algorithm_0106.htm @param Point: the Point @return: The shortest distance between the Point and Line """ d = self.Pe - self.Ps v = Point - self.Ps t = d.dotProd(v) if t <= 0: # our Point is lying "behind" the segment # so end Point 1 is closest to Point and distance is length of # vector from end Point 1 to Point. return self.Ps.distance(Point) elif t >= d.dotProd(d): # our Point is lying "ahead" of the segment # so end Point 2 is closest to Point and distance is length of # vector from end Point 2 to Point. return self.Pe.distance(Point) else: # our Point is lying "inside" the segment # i.e.:a perpendicular from it to the line that contains the line if (v.dotProd(v) - (t * t) / d.dotProd(d)) < eps: return 0.0 else: return sqrt(v.dotProd(v) - (t * t) / d.dotProd(d)) def isHit(self, caller, xy, tol): """ This function returns true if the nearest point between the two geometries is within the square of the given tolerance @param caller: This is the calling entities (only used in holegeo) @param xy: The point which shall be used to determine the distance @tol: The tolerance which is used for Hit testing. """ return self.distance_l_p(xy) <= tol def make_abs_geo(self, parent=None): """ Generates the absolute geometry based on itself and the parent. This is done for rotating and scaling purposes """ Ps = self.Ps.rot_sca_abs(parent=parent) Pe = self.Pe.rot_sca_abs(parent=parent) self.abs_geo = LineGeo(Ps=Ps, Pe=Pe) def make_path(self, caller, drawHorLine): drawHorLine(caller, self.Ps, self.Pe) def reverse(self): """ Reverses the direction of the arc (switch direction). """ self.Ps, self.Pe = self.Pe, self.Ps if self.abs_geo: self.abs_geo.reverse() def to_short_string(self): return "(%f, %f) -> (%f, %f)" % (self.Ps.x, self.Ps.y, self.Pe.x, self.Pe.y) def update_start_end_points(self, start_point, value): prv_ang = self.Ps.norm_angle(self.Pe) if start_point: self.Ps = value else: self.Pe = value new_ang = self.Ps.norm_angle(self.Pe) if 2 * abs(((prv_ang - new_ang) + pi) % (2 * pi) - pi) >= pi: # seems very unlikely that this is what you want - the direction # changed (too drastically) self.Ps, self.Pe = self.Pe, self.Ps self.length = self.Ps.distance(self.Pe) def Write_GCode(self, PostPro): """ Writes the GCODE for a Line. @param PostPro: The PostProcessor instance to be used @return: Returns the string to be written to a file. """ Ps = self.get_start_end_points(True) Pe = self.get_start_end_points(False) return PostPro.lin_pol_xy(Ps, Pe) dxf2gcode-20240509/dxf2gcode/core/layercontent.py0000644000000000000000000002262614617065372020225 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Vinzenz Schulz # Jean-Paul Schouwstra # Robert Lichtenberger # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from __future__ import division import re import logging import dxf2gcode.globals.globals as g from dxf2gcode.core.point import Point from dxf2gcode.core.arcgeo import ArcGeo logger = logging.getLogger("Core.LayerContent") class LayerContent(object): def __init__(self, nr, name, shapes): self.nr = nr self.name = name self.shapes = Shapes(shapes) self.exp_order = [] # used for shape order optimization, ... Only contains shapes # Use default tool 1 (always exists in config) self.tool_nr = 1 self.tool_diameter = g.config.vars.Tool_Parameters['1']['diameter'] self.speed = g.config.vars.Tool_Parameters['1']['speed'] self.start_radius = g.config.vars.Tool_Parameters['1']['start_radius'] # preset defaults self.axis3_retract = g.config.vars.Depth_Coordinates['axis3_retract'] self.axis3_safe_margin = g.config.vars.Depth_Coordinates['axis3_safe_margin'] def __repr__(self): """ Standard method to print the object @return: A string """ return "\nLayerContent" +\ "\nnr: %i" % self.nr +\ "\nname: %s" % self.name +\ "\nshapes: %s" % self.shapes def should_ignore(self): return self.name.startswith('IGNORE' + g.config.vars.Layer_Options['id_float_separator']) def isBreakLayer(self): return self.name.startswith('BREAKS' + g.config.vars.Layer_Options['id_float_separator']) def isMillLayer(self): return self.name.startswith('MILL' + g.config.vars.Layer_Options['id_float_separator']) def isDrillLayer(self): return self.name.startswith('DRILL' + g.config.vars.Layer_Options['id_float_separator']) def isParameterizableLayer(self): return self.isMillLayer() or self.isDrillLayer() or self.isBreakLayer() def automaticCutterCompensationEnabled(self): return not self.should_ignore() and not self.isDrillLayer() def getToolRadius(self): return self.tool_diameter / 2 def overrideDefaults(self): # search for layer commands to override defaults logger.debug(self.isParameterizableLayer()) if self.isParameterizableLayer(): layer_commands = self.name.replace(",", ".") lopts_re = re.compile("([a-zA-Z]+ *"+g.config.vars.Layer_Options['id_float_separator']+" *[\-\.0-9]+)") logger.debug(lopts_re.findall(layer_commands)) for lc in lopts_re.findall(layer_commands): name, value = lc.split(g.config.vars.Layer_Options['id_float_separator']) name = name.strip() #logger.debug('\"%s\" \"%s\"' %(name, value)) default_tool = 1 # Tool 1 normally always exists if name in g.config.vars.Layer_Options['tool_nr_identifiers']: self.tool_nr = int(value) # Check that the requested tool exists in the tool table & substitute tool 1 if not if str(self.tool_nr) not in g.config.vars.Tool_Parameters: logger.warning("Tool {0} used for \"{1}\" layer doesn't exist anymore in the configuration ; using tool {2} instead".format(self.tool_nr, self.name, default_tool)) self.tool_nr = default_tool # set the diameter, speed and start radius according to the selected tool self.tool_diameter = g.config.vars.Tool_Parameters[str(self.tool_nr)]['diameter'] self.speed = g.config.vars.Tool_Parameters[str(self.tool_nr)]['speed'] self.start_radius = g.config.vars.Tool_Parameters[str(self.tool_nr)]['start_radius'] elif name in g.config.vars.Layer_Options['tool_diameter_identifiers']: self.tool_diameter = float(value) elif name in g.config.vars.Layer_Options['spindle_speed_identifiers']: self.speed = float(value) elif name in g.config.vars.Layer_Options['start_radius_identifiers']: self.start_radius = float(value) elif name in g.config.vars.Layer_Options['retract_identifiers']: self.axis3_retract = float(value) elif name in g.config.vars.Layer_Options['safe_margin_identifiers']: self.axis3_safe_margin = float(value) elif name in g.config.vars.Layer_Options['start_mill_depth_identifiers']: for shape in self.shapes: shape.axis3_start_mill_depth = float(value) elif name in g.config.vars.Layer_Options['slice_depth_identifiers']: for shape in self.shapes: shape.axis3_slice_depth = float(value) elif name in g.config.vars.Layer_Options['mill_depth_identifiers']: for shape in self.shapes: shape.axis3_mill_depth = float(value) elif name in g.config.vars.Layer_Options['f_g1_plane_identifiers']: for shape in self.shapes: shape.f_g1_plane = float(value) elif name in g.config.vars.Layer_Options['f_g1_depth_identifiers']: for shape in self.shapes: shape.f_g1_depth = float(value) if self.should_ignore(): # Disable shape by default, if it lives on an ignored layer for shape in self.shapes: shape.setDisable(True) if self.isDrillLayer(): # If the shape is on a DRILL Layer set it to Drill = True for shape in self.shapes: allClosed = True allArcs = True if shape.closed == False: allClosed == False for geo in shape.geos: if not(isinstance(geo, ArcGeo)): allArcs = False if allClosed and allArcs: shape.Drill=True else: logger.warn("Warning none closed / Arc shapes on Drill layer") def optimize(self): """ Optimize jumps between shape export order by choosing the start point of next shape as closest to last point of previous. This is called after TSP optimization. """ # exp_order_complete is not filled yet, so we'll have to lookup shape by nr. # Create a shape.nr -> shape map so that we don't run in O(n^2) time nr2shape = dict((shape.nr,shape) for shape in self.shapes) lastPoint = None for nr in self.exp_order: shape = nr2shape.get(nr, None) if shape is None: continue if lastPoint is not None: shape.setNearestStPoint (lastPoint) lastPoint = shape.get_start_end_points (False) def changeMeasuringUnits(self, metric_was, metric_is): """ Change metric units used in this layer. This is invoked when user switches measuring units via main menu """ if metric_was == metric_is: return scale = 1/25.4 if metric_is == 0 else 25.4 self.tool_diameter *= scale self.start_radius *= scale self.axis3_retract *= scale self.axis3_safe_margin *= scale for shape in self.shapes: shape.axis3_start_mill_depth *= scale shape.axis3_slice_depth *= scale shape.axis3_mill_depth *= scale shape.f_g1_plane *= scale shape.f_g1_depth *= scale class Layers(list): def __init__(self, *args): list.__init__(self, *args) # def __iter__(self): def non_break_layer_iter(self): for layer in list.__iter__(self): if not layer.isBreakLayer(): yield layer def break_layer_iter(self): for layer in list.__iter__(self): if layer.isBreakLayer(): yield layer class Shapes(list): def __init__(self, *args): list.__init__(self, *args) # def __iter__(self): def selected_iter(self): for shape in list.__iter__(self): if shape.selected: yield shape def not_selected_iter(self): for shape in list.__iter__(self): if not shape.selected: yield shape def not_disabled_iter(self): for shape in list.__iter__(self): if not shape.disabled: yield shape dxf2gcode-20240509/dxf2gcode/core/intersect.py0000664000000000000000000001412413461333722017503 0ustar rootroot############################################################################ # # Copyright (C) 2015 # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from __future__ import division from math import sqrt from dxf2gcode.core.linegeo import LineGeo from dxf2gcode.core.arcgeo import ArcGeo from dxf2gcode.core.point import Point class Intersect(object): @staticmethod def get_intersection_point(prv_geo, geo): intersection = None if isinstance(prv_geo, LineGeo) and isinstance(geo, LineGeo): intersection = Intersect.line_line_intersection(prv_geo, geo) elif isinstance(prv_geo, LineGeo) and isinstance(geo, ArcGeo): intersection = Intersect.line_arc_intersection(prv_geo, geo, prv_geo.Pe) elif isinstance(prv_geo, ArcGeo) and isinstance(geo, LineGeo): intersection = Intersect.line_arc_intersection(geo, prv_geo, prv_geo.Pe) elif isinstance(prv_geo, ArcGeo) and isinstance(geo, ArcGeo): intersection = Intersect.arc_arc_intersection(geo, prv_geo, prv_geo.Pe) return intersection @staticmethod def point_belongs_to_line(point, line): linex = sorted([line.Ps.x, line.Pe.x]) liney = sorted([line.Ps.y, line.Pe.y]) return (linex[0] - 1e-8 <= point.x <= linex[1] + 1e-8 and liney[0] - 1e-8 <= point.y <= liney[1] + 1e-8) @staticmethod def point_belongs_to_arc(point, arc): ang = arc.dif_ang(arc.Ps, point, arc.ext) return (arc.ext + 1e-8 >= ang >= -1e-8 if arc.ext > 0 else arc.ext - 1e-8 <= ang <= 1e-8) @staticmethod def line_line_intersection(line1, line2): # based on # http://stackoverflow.com/questions/20677795/find-the-point-of-intersecting-lines xydiff1 = line1.Ps - line1.Pe xydiff2 = line2.Ps - line2.Pe xdiff = (xydiff1.x, xydiff2.x) ydiff = (xydiff1.y, xydiff2.y) det = lambda a, b: a[0] * b[1] - a[1] * b[0] div = det(xdiff, ydiff) if div != 0: d = (det((line1.Ps.x, line1.Ps.y), (line1.Pe.x, line1.Pe.y)), det((line2.Ps.x, line2.Ps.y), (line2.Pe.x, line2.Pe.y))) point = Point(det(d, xdiff) / div, det(d, ydiff) / div) if Intersect.point_belongs_to_line(point, line1) and Intersect.point_belongs_to_line(point, line2): return point return None @staticmethod def line_arc_intersection(line, arc, refpoint): # based on # http://stackoverflow.com/questions/13053061/circle-line-intersection-points baX = line.Pe.x - line.Ps.x baY = line.Pe.y - line.Ps.y caX = arc.O.x - line.Ps.x caY = arc.O.y - line.Ps.y a = baX * baX + baY * baY bBy2 = baX * caX + baY * caY c = caX * caX + caY * caY - arc.r * arc.r if a == 0: return None pBy2 = bBy2 / a q = c / a disc = pBy2 * pBy2 - q if disc > 0: tmpSqrt = sqrt(disc) abScalingFactor1 = -pBy2 + tmpSqrt abScalingFactor2 = -pBy2 - tmpSqrt p1 = Point(line.Ps.x - baX * abScalingFactor1, line.Ps.y - baY * abScalingFactor1) p2 = Point(line.Ps.x - baX * abScalingFactor2, line.Ps.y - baY * abScalingFactor2) intersections = [] if Intersect.point_belongs_to_arc(p1, arc) and Intersect.point_belongs_to_line(p1, line): intersections.append(p1) if Intersect.point_belongs_to_arc(p2, arc) and Intersect.point_belongs_to_line(p2, line): intersections.append(p2) intersections.sort(key=lambda x: (refpoint - x).length_squared()) if len(intersections) > 0: return intersections[0] return None @staticmethod def arc_arc_intersection(arc1, arc2, refpoint): # based on # http://stackoverflow.com/questions/3349125/circle-circle-intersection-points d = arc1.O.distance(arc2.O) if d > (arc1.r + arc2.r): # there are no solutions, the circles are separate return None elif d + 1e-5 < abs(arc1.r - arc2.r): # there are no solutions because one circle is contained within the other return None elif d == 0: # then the circles are coincident and there are an infinite number of solutions return None else: a = (arc1.r**2 - arc2.r**2 + d**2) / (2 * d) if arc1.r**2 - a**2 < 0: return None h = sqrt(arc1.r**2 - a**2) P2 = arc1.O + a * (arc2.O - arc1.O) / d p1 = Point(P2.x + h * (arc2.O.y - arc1.O.y) / d, P2.y - h * (arc2.O.x - arc1.O.x) / d) p2 = Point(P2.x - h * (arc2.O.y - arc1.O.y) / d, P2.y + h * (arc2.O.x - arc1.O.x) / d) intersections = [] if Intersect.point_belongs_to_arc(p1, arc1) and Intersect.point_belongs_to_arc(p1, arc2): intersections.append(p1) if Intersect.point_belongs_to_arc(p2, arc1) and Intersect.point_belongs_to_arc(p2, arc2): intersections.append(p2) intersections.sort(key=lambda x: (refpoint - x).length_squared()) if len(intersections) > 0: return intersections[0] return None dxf2gcode-20240509/dxf2gcode/core/holegeo.py0000644000000000000000000001004014617065372017123 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2014-2015 # Robert Lichtenberger # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from __future__ import division from copy import deepcopy from math import pi from dxf2gcode.core.point import Point from dxf2gcode.core.boundingbox import BoundingBox class HoleGeo(object): """ HoleGeo represents drilling holes. """ def __init__(self, Ps): """ Standard Method to initialise the HoleGeo """ self.Ps = Ps self.length = -1 self.abs_geo = None def __deepcopy__(self, memo): return HoleGeo(deepcopy(self.Ps, memo)) def __repr__(self): """ Standard method to print the object @return: A string """ return "\nHoleGeo at (%s) " % self.Ps def save_v1(self): return "\nHoleGeo at (%s) " % self.Ps.save_v1() def calc_bounding_box(self, radius=1): """ Calculated the BoundingBox of the geometry and saves it into self.BB @param radius: The Radius of the HoleGeo to be used for BoundingBox """ Ps = Point(x=self.Ps.x - radius, y=self.Ps.y - radius) Pe = Point(x=self.Ps.x + radius, y=self.Ps.y + radius) self.BB = BoundingBox(Ps=Ps, Pe=Pe) def reverse(self): """ Reverses the direction. """ pass def make_abs_geo(self, parent=None): """ Generates the absolute geometry based on itself and the parent. This is done for rotating and scaling purposes """ Ps = self.Ps.rot_sca_abs(parent=parent) self.abs_geo = HoleGeo(Ps) def get_start_end_points(self, start_point, angles=None): if angles is None: return self.Ps elif angles: return self.Ps, 0 else: return self.Ps, Point(0, -1) if start_point else Point(0, -1) def make_path(self, caller, drawHorLine): radius = caller.parentLayer.tool_diameter / 2 self.calc_bounding_box(radius=radius) segments = 30 Ps = self.Ps.get_arc_point(0, radius) for i in range(1, segments + 1): ang = i * 2 * pi / segments Pe = self.Ps.get_arc_point(ang, radius) drawHorLine(caller, Ps, Pe) Ps = Pe def isHit(self, caller, xy, tol): """ This function returns true if the nearest point between the two geometries is within the square of the given tolerance @param caller: This is the calling entities (only used in holegeo) @param xy: The point which shall be used to determine the distance @param tol: The tolerance which is used for Hit testing. """ return abs(self.Ps.distance(xy) - caller.parentLayer.getToolRadius()) < tol def Write_GCode(self, PostPro): """ Writes the GCODE for a Hole. @param PostPro: The PostProcessor instance to be used @return: Returns the string to be written to a file. """ """ Ps = self.get_start_end_points(True) return PostPro.lin_mov_drill(Ps) """ return PostPro.make_print_str("(Drilled hole)%nl") dxf2gcode-20240509/dxf2gcode/core/entitycontent.py0000644000000000000000000000430014617065372020412 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Vinzenz Schulz # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ class EntityContent(object): def __init__(self, nr, name, parent, p0, pb, sca, rot, mirrorx=False, mirrory=False): """ @param p0: The Starting Point to plot (Default x=0 and y=0) @param bp: The Base Point to insert the geometry and base for rotation (Default is also x=0 and y=0) @param sca: The scale of the basis function (default =1) @param rot: The rotation of the geometries around base (default =0) """ self.nr = nr self.name = name self.parent = parent self.children = [] self.p0 = p0 self.pb = pb self.sca = sca self.rot = rot self.mirrorx = mirrorx self.mirrory = mirrory def __repr__(self): return "\nEntityContent" +\ "\nnr : %i" % self.nr +\ "\nname: %s" % self.name +\ "\nchildren: %s" % self.children +\ "\np0: %s" % self.p0 +\ "\npb: %s" % self.pb +\ "\nsca: %s" % self.sca +\ "\nrot: %s" % self.rot +\ "\nmirrorx: %s" % self.mirrorx +\ "\nmirrory: %s" % self.mirrory def append(self, child): self.children.append(child) dxf2gcode-20240509/dxf2gcode/core/customgcode.py0000664000000000000000000000530214011526166020013 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2012-2015 # Xavier Izard # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ class CustomGCode(object): """ This class contains a "custom gcode" object. Custom GCode objects are part of a layer (layercontent.py) and are used to insert custom GCode into the generated file. Custom GCodes are defined in the config file @purpose: store user defined GCode """ def __init__(self, name, nr, gcode, parentLayer): """ Standard method to initialize the class @param name: the name of the GCode, as defined in the config file @param gcode: the user defined gcode @param parent: The parent layer Class of the shape """ self.name = name self.nr = nr self.gcode = gcode self.parentLayer = parentLayer self.disabled = False self.send_to_TSP = False # Never optimize path for CustomGCode self.selected = False def __repr__(self): """ Standard method to print the object @return: A string """ return "\nCustomGCode" +\ "\nname: %s" % self.name +\ "\nnr: %i" % self.nr +\ "\ngcode: %s" % self.gcode def setDisable(self, flag=False): """ Function to modify the disable property @param flag: The flag to enable or disable Selection """ self.disabled = flag def isDisabled(self): """ Returns the state of self.disabled """ return self.disabled def setSelected(self, flag=False): self.selected = flag def isSelected(self): return self.selected def Write_GCode(self, PostPro): """ This method returns the string to be exported for this custom gcode @param PostPro: this is the Postprocessor class including the methods to export """ return self.gcode dxf2gcode-20240509/dxf2gcode/core/breakgeo.py0000664000000000000000000000574014011526166017264 0ustar rootroot# -*- coding: utf-8 -*-# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2014-2015 # Robert Lichtenberger # Wojciech Nycz # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from copy import deepcopy from dxf2gcode.core.linegeo import LineGeo class BreakGeo(LineGeo): """ BreakGeo interrupts another geometry item by changing the Z-Position. """ def __init__(self, Ps, Pe, height, xyfeed, zfeed): LineGeo.__init__(self, Ps, Pe) self.height = height self.xyfeed = xyfeed self.zfeed = zfeed def __deepcopy__(self, memo): return BreakGeo(deepcopy(self.Ps, memo), deepcopy(self.Pe, memo), deepcopy(self.height, memo), deepcopy(self.xyfeed, memo), deepcopy(self.zfeed, memo)) def __repr__(self): """ Standard method to print the object @return: A string """ return "\nBreakGeo" +\ "\nPs: %s" % self.Ps +\ "\nPe: %s" % self.Pe +\ "\nheight: %0.5f" % self.height def save_v1(self): """ Standard method to print the object @return: A string """ return "\nBreakGeo" +\ "\nPs: %s" % self.Ps.save_v1() +\ "\nPe: %s" % self.Pe.save_v1() +\ "\nheight: %0.5f" % self.height def Write_GCode(self, PostPro): """ Writes the GCODE for a Break. @param PostPro: The PostProcessor instance to be used @return: Returns the string to be written to file. """ oldZ = PostPro.ze oldFeed = PostPro.feed if self.height <= oldZ: return ( LineGeo.Write_GCode(self, PostPro) ) else: return ( PostPro.chg_feed_rate(self.zfeed) + PostPro.lin_pol_z(self.height) + PostPro.chg_feed_rate(self.xyfeed) + LineGeo.Write_GCode(self, PostPro) + PostPro.chg_feed_rate(self.zfeed) + PostPro.lin_pol_z(oldZ) + PostPro.chg_feed_rate(oldFeed) ) dxf2gcode-20240509/dxf2gcode/core/boundingbox.py0000664000000000000000000000757714011526166020035 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohl�ffel # Vinzenz Schulz # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from __future__ import division from math import sqrt, sin, cos, atan2 from copy import deepcopy from dxf2gcode.core.point import Point import logging logger = logging.getLogger("core.boundingbox") eps=-1e-12 class BoundingBox: """ Bounding Box Class. This is the standard class which provides all std. Bounding Box methods. """ def __init__(self, Ps=Point(0, 0), Pe=Point(0, 0), hdl=[]): """ Standard method to initialize the class """ self.Ps = Ps self.Pe = Pe def __repr__(self): """ Standard method to print the object @return: A string """ s = ("\nPs : %s" % (self.Ps)) + \ ("\nPe : %s" % (self.Pe)) return s def joinBB(self, other): """ Joins two Bounding Box Classes and returns the new one @param other: The 2nd Bounding Box @return: Returns the joined Bounding Box Class """ if type(self.Ps) == type(None) or type(self.Pe) == type(None): return BoundingBox(deepcopy(other.Ps), deepcopy(other.Pe)) xmin = min(self.Ps.x, other.Ps.x) xmax = max(self.Pe.x, other.Pe.x) ymin = min(self.Ps.y, other.Ps.y) ymax = max(self.Pe.y, other.Pe.y) return BoundingBox(Ps=Point(xmin, ymin), Pe=Point(xmax, ymax)) def hasintersection(self, other=None, tol=eps): """ Checks if the two bounding boxes have an intersection @param other: The 2nd Bounding Box @return: Returns true or false """ if isinstance(other, Point): return self.pointisinBB(other, tol) elif isinstance(other, BoundingBox): x_inter_pos = (self.Pe.x + tol > other.Ps.x) and \ (self.Ps.x - tol < other.Pe.x) y_inter_pos = (self.Pe.y + tol > other.Ps.y) and \ (self.Ps.y - tol < other.Pe.y) return x_inter_pos and y_inter_pos else: logger.warning("Unsupported Instance: %s" % other.type) def iscontained(self, other): """ Checks if self Bounding Box is contained in Boundingbox of other @param other: The 2nd Bounding Box @return: Returns true or false """ return other.Ps.x < self.Ps.x and self.Pe.x < other.Pe.x and\ other.Ps.y < self.Ps.y and self.Pe.y < other.Pe.y def pointisinBB(self, Point=Point(), tol=eps): """ Checks if the Point is within the bounding box @param Point: The Point which shall be ckecke @return: Returns true or false """ x_inter_pos = (self.Pe.x + tol > Point.x) and \ (self.Ps.x - tol < Point.x) y_inter_pos = (self.Pe.y + tol > Point.y) and \ (self.Ps.y - tol < Point.y) return x_inter_pos and y_inter_pos dxf2gcode-20240509/dxf2gcode/core/arcgeo.py0000644000000000000000000004050514617065372016752 0ustar rootroot# -*- coding: utf-8 -*- ############################################################################ # # Copyright (C) 2008-2015 # Christian Kohlöffel # Vinzenz Schulz # Jean-Paul Schouwstra # # This file is part of DXF2GCODE. # # DXF2GCODE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DXF2GCODE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DXF2GCODE. If not, see . # ############################################################################ from __future__ import absolute_import from __future__ import division from math import sqrt, sin, cos, asin, pi, degrees, ceil, floor from copy import deepcopy from dxf2gcode.core.point import Point from dxf2gcode.core.boundingbox import BoundingBox import dxf2gcode.globals.globals as g import dxf2gcode.globals.constants as c from PyQt5 import QtCore import logging logger = logging.getLogger("core.arcgeo") eps = 1e-12 class ArcGeo(object): """ Standard Geometry Item used for DXF Import of all geometries, plotting and G-Code export. """ def __init__(self, Ps=None, Pe=None, O=None, r=1, s_ang=None, e_ang=None, direction=1, drag=False): """ Standard Method to initialize the ArcGeo. Not all of the parameters are required to fully define a arc. e.g. Ps and Pe may be given or s_ang and e_ang @param Ps: The Start Point of the arc @param Pe: the End Point of the arc @param O: The center of the arc @param r: The radius of the arc @param s_ang: The Start Angle of the arc @param e_ang: the End Angle of the arc @param direction: The arc direction where 1 is in positive direction """ self.Ps = Ps self.Pe = Pe self.O = O self.r = abs(r) self.s_ang = s_ang self.e_ang = e_ang self.drag = drag # Get the Circle center point with known Start and End Points if self.O is None: if self.Ps is not None and\ self.Pe is not None and\ direction is not None: arc = self.Pe.norm_angle(self.Ps) - pi / 2 m = self.Pe.distance(self.Ps) / 2 if abs(self.r - m) < g.config.fitting_tolerance: lo = 0.0 else: lo = sqrt(pow(self.r, 2) - pow(m, 2)) d = -1 if direction < 0 else 1 self.O = self.Ps + (self.Pe - self.Ps) / 2 self.O.y += lo * sin(arc) * d self.O.x += lo * cos(arc) * d # Compute center point elif self.s_ang is not None: self.O.x = self.Ps.x - self.r * cos(self.s_ang) self.O.y = self.Ps.y - self.r * sin(self.s_ang) else: logger.error(self.tr("Missing value for Arc Geometry")) else: self.r = self.O.distance(self.Ps) # Calculate start and end angles if self.s_ang is None: self.s_ang = self.O.norm_angle(self.Ps) if self.e_ang is None: self.e_ang = self.O.norm_angle(self.Pe) self.ext = self.dif_ang(self.Ps, self.Pe, direction) self.length = self.r * abs(self.ext) self.calc_bounding_box() self.abs_geo = None def __deepcopy__(self, memo): return ArcGeo(deepcopy(self.Ps, memo), deepcopy(self.Pe, memo), deepcopy(self.O, memo), deepcopy(self.r, memo), deepcopy(self.s_ang, memo), deepcopy(self.e_ang, memo), deepcopy(self.ext, memo), deepcopy(self.drag, memo)) def __repr__(self): """ Standard method to print the object @return: A string """ return ("ArcGeo (Ps=%s, Pe=%s, O=%s, s_ang=%s, e_ang=%s, r=%s, ext=%s)" % \ (self.Ps, self.Pe, self.O, self.s_ang, self.e_ang, self.r, self.ext)) def save_v1(self): return "\nArcGeo" +\ "\nPs: %s; s_ang: %0.5f" % (self.Ps.save_v1(), self.s_ang) +\ "\nPe: %s; e_ang: %0.5f" % (self.Pe.save_v1(), self.e_ang) +\ "\nO: %s; r: %0.3f" % (self.O.save_v1(), self.r) +\ "\next: %0.5f; length: %0.5f" % (self.ext, self.length) def angle_between(self, min_ang, max_ang, angle): """ Returns if the angle is in the range between 2 other angles @param min_ang: The starting angle @param parent: The end angel. Always in ccw direction from min_ang @return: True or False """ if min_ang < 0.0: min_ang += 2 * pi while max_ang < min_ang: max_ang += 2 * pi while angle < min_ang: angle += 2 * pi return (min_ang < angle) and (angle <= max_ang) def calc_bounding_box(self): """ Calculated the BoundingBox of the geometry and saves it into self.BB """ Ps = Point(x=self.O.x - self.r, y=self.O.y - self.r) Pe = Point(x=self.O.x + self.r, y=self.O.y + self.r) # Do the calculation only for arcs have positiv extend => switch angles if self.ext >= 0: s_ang = self.s_ang e_ang = self.e_ang elif self.ext < 0: s_ang = self.e_ang e_ang = self.s_ang # If the positive X Axis is crossed if not(self.wrap(s_ang, 0) >= self.wrap(e_ang, 1)): Pe.x = max(self.Ps.x, self.Pe.x) # If the positive Y Axis is crossed if not(self.wrap(s_ang - pi / 2, 0) >= self.wrap(e_ang - pi / 2, 1)): Pe.y = max(self.Ps.y, self.Pe.y) # If the negative X Axis is crossed if not(self.wrap(s_ang - pi, 0) >= self.wrap(e_ang - pi, 1)): Ps.x = min(self.Ps.x, self.Pe.x) # If the negative Y is crossed if not(self.wrap(s_ang - 1.5 * pi, 0) >= self.wrap(e_ang - 1.5 * pi, 1)): Ps.y = min(self.Ps.y, self.Pe.y) self.BB = BoundingBox(Ps=Ps, Pe=Pe) def dif_ang(self, Ps, Pe, direction): """ Calculated the angle between Pe and Ps with respect to the origin @param Ps: the start Point of the arc @param Pe: the end Point of the arc @param direction: the direction of the arc @return: Returns the angle between -2*pi and 2*pi for the arc, 0 excluded - we got a complete circle """ dif_ang = (self.O.norm_angle(Pe) - self.O.norm_angle(Ps)) % (-2 * pi) if direction > 0: dif_ang += 2 * pi elif dif_ang == 0: dif_ang = -2 * pi return dif_ang def get_point_from_start(self, i, segments): """ Returns an point on the end point of the segments on the arc. @param i: The end point of the segements which shall be returned @param segment: The number of segments into which the arc shall be diffided. @return: Returns a point on the Arc. """ ang = self.s_ang + i * self.ext / segments return self.O.get_arc_point(ang, self.r) def get_start_end_points(self, start_point, angles=None): if start_point: if angles is None: return self.Ps elif angles: return self.Ps, self.s_ang + pi / 2 * self.ext / abs(self.ext) else: direction = (self.O - self.Ps).unit_vector() direction = -direction if self.ext >= 0 else direction return self.Ps, Point(-direction.y, direction.x) else: if angles is None: return self.Pe elif angles: return self.Pe, self.e_ang - pi / 2 * self.ext / abs(self.ext) else: direction = (self.O - self.Pe).unit_vector() direction = -direction if self.ext >= 0 else direction return self.Pe, Point(-direction.y, direction.x) def distance_a_p(self, other): """ Find the distance between a arc and a point @param other: the instance of the 2nd geometry element. @return: The distance between the two geometries """ # The Pont is outside of the Arc if self.O.distance(other) > self.r: # If the Nearest Point is on Arc Segement it is the neares one. # logger.debug("Nearest Point is outside of arc") if self.PointAng_withinArc(other): return other.distance(self.O.get_arc_point(self.O.norm_angle(other), r=self.r)) elif other.distance(self.Ps) < other.distance(self.Pe): return other.distance(self.Ps) else: return other.distance(self.Pe) # logger.debug("Nearest Point is Inside of arc") # logger.debug("self.distance(other.Ps): %s, self.distance(other.Pe): %s" %(self.distance(other.Ps),self.distance(other.Pe))) # The Line may be inside of the ARc or cross it if other.distance(self.Ps) < other.distance(self.Pe): dis_min = other.distance(self.Ps) # logger.debug("Pnearest: %s, distance: %s" %(Pnearest, dis_min)) else: dis_min = other.distance(self.Pe) # logger.debug("Pnearest: %s, distance: %s" %(Pnearest, dis_min)) if ((self.PointAng_withinArc(other)) and abs(self.r - self.O.distance(other)) < dis_min): dis_min = abs(self.r - self.O.distance(other)) # logger.debug("Pnearest: %s, distance: %s" %(Pnearest, dis_min)) return dis_min def PointAng_withinArc(self, Point): """ Check if the angle defined by Point is within the span of the arc. @param Point: The Point which angle to be checked @return: True or False """ if self.ext == 0.0: return False v = self.dif_ang(self.Ps, Point, self.ext) / self.ext return v >= 0.0 and v <= 1.0 def isHit(self, caller, xy, tol): """ This function returns true if the nearest point between the two geometries is within the square of the given tolerance @param caller: This is the calling entities (only used in holegeo) @param xy: The point which shall be used to determine the distance @tol: The tolerance which is used for Hit testing. """ return self.distance_a_p(xy) <= tol def make_abs_geo(self, parent=None): """ Generates the absolute geometry based on itself and the parent. This is done for rotating and scaling purposes """ Ps = self.Ps.rot_sca_abs(parent=parent) Pe = self.Pe.rot_sca_abs(parent=parent) O = self.O.rot_sca_abs(parent=parent) r = self.scaled_r(self.r, parent) direction = 1 if self.ext > 0.0 else -1 #TODO this might cause problem for recursive loops if parent is not None and parent.sca[0] * parent.sca[1] < 0.0: direction *= -1 if not(parent==None): while not(parent.parent==None): parent=parent.parent if (not (parent.mirrorx and parent.mirrory)) and (parent.mirrorx or parent.mirrory): direction *= -1 self.abs_geo = ArcGeo(Ps=Ps, Pe=Pe, O=O, r=r, direction=direction, drag=self.drag) def make_path(self, caller, drawHorLine): segments = int(abs(degrees(self.ext)) // 3 + 1) Ps = self.O.get_arc_point(self.s_ang, self.r) for i in range(1, segments + 1): Pe = self.get_point_from_start(i, segments) drawHorLine(caller, Ps, Pe) Ps = Pe def reverse(self): """ Reverses the direction of the arc (switch direction). """ self.Ps, self.Pe = self.Pe, self.Ps self.s_ang, self.e_ang = self.e_ang, self.s_ang self.ext = -self.ext if self.abs_geo: self.abs_geo.reverse() def scaled_r(self, r, parent): """ Scales the radius based on the scale given in its parents. This is done recursively. @param r: The radius which shall be scaled @param parent: The parent Entity (Instance: EntityContentClass) @return: The scaled radius """ # Rekursive Schleife falls mehrfach verschachtelt. # Recursive loop if nested. if parent is not None: r *= parent.sca[0] r = self.scaled_r(r, parent.parent) return r def toShortString(self): return "(%f, %f) -> (%f, %f)" % (self.Ps.x, self.Ps.y, self.Pe.x, self.Pe.y) def tr(self, string_to_translate): """ Translate a string using the QCoreApplication translation framework @param string_to_translate: a unicode string @return: the translated unicode string if it was possible to translate """ return str(QtCore.QCoreApplication.translate('ArcGeo', string_to_translate)) def update_start_end_points(self, start_point, value): prv_dir = self.ext if start_point: self.Ps = value self.s_ang = self.O.norm_angle(self.Ps) else: self.Pe = value self.e_ang = self.O.norm_angle(self.Pe) self.ext = self.dif_ang(self.Ps, self.Pe, self.ext) if 2 * abs(((prv_dir - self.ext) + pi) % (2 * pi) - pi) >= pi: # seems very unlikely that this is what you want - the direction # changed (too drastically) self.Ps, self.Pe = self.Pe, self.Ps self.s_ang, self.e_ang = self.e_ang, self.s_ang self.ext = self.dif_ang(self.Ps, self.Pe, prv_dir) self.length = self.r * abs(self.ext) def wrap(self, angle, isend=0): """ Wrapes the given angle into a range between 0 and 2pi @param angle: The angle to be wraped @param isend: If the angle is the end angle or start angle, this makes a difference at 0 or 2pi. @return: Returns the angle between 0 and 2 *pi """ wrap_angle = angle % (2 * pi) if isend and wrap_angle == 0.0: wrap_angle += 2 * pi elif wrap_angle == 2 * pi: wrap_angle -= 2 * pi return wrap_angle def Write_GCode(self, PostPro=None): """ Writes the GCODE for an Arc. @param PostPro: The PostProcessor instance to be used @return: Returns the string to be written to a file. """ Ps, s_ang = self.get_start_end_points(True, True) Pe, e_ang = self.get_start_end_points(False, True) O = self.O r = self.r IJ = O - Ps # If the radius of the element is bigger than the max, radius export # the element as an line. if r > PostPro.vars.General["max_arc_radius"]: string = PostPro.lin_pol_xy(Ps, Pe) # If the maschine is not supporting G2 and G3 moves use this option elif PostPro.vars.General["export_arcs_as_lines"]: # Calculation the min. arc segment angle of the export based on given tolerance. # https://de.wikipedia.org/wiki/Kreissegment a = g.config.fitting_tolerance s = 2 * sqrt(a * (2 * self.r - a)) alpha = 2 * asin(s / (2 * self.r)) segments = int(abs(self.ext // alpha)) string = "" for i in range(1, segments + 1): Pe = self.get_point_from_start(i, segments) string += PostPro.lin_pol_xy(Ps, Pe) Ps = Pe else: if self.ext > 0: string = PostPro.lin_pol_arc( "ccw", Ps, Pe, s_ang, e_ang, r, O, IJ, self.ext) elif self.ext < 0 and PostPro.vars.General["export_ccw_arcs_only"]: string = PostPro.lin_pol_arc( "ccw", Pe, Ps, e_ang, s_ang, r, O, O - Pe, self.ext) else: string = PostPro.lin_pol_arc( "cw", Ps, Pe, s_ang, e_ang, r, O, IJ, self.ext) return string dxf2gcode-20240509/dxf2gcode/core/__init__.py0000664000000000000000000000000113461333722017227 0ustar rootroot

  • a:Nwf@65]#N'_uږ>C:`uYSN_ fK^POo·vG[G*01U %C]>hU7/e80I?5[˝.K?O1[ ͳh՟ZC]KAFÙƵ:kfh߈)#g;h/rƧ` S] }}(Pn E?琌:~2bzC:&9hS͡aX"vo $K &|  Jv >O]|<0Fhq;%e&S!u@1)ЮN9C {3b0x1xFj/o(WI\wHf%ofGZ;oB%#YY\!T¿+u2o ߚN5o17;`l8l:%(!n6 r<Q>o |#:7g55;(%)FdIB+ଗud{8ݟN3RϰꬆIC(_ęНQ3dƗOU?ZQ%B) | sfss%vWZp9ZƎ+5Yi0R!P^ ]Ρ?@>pRv (k:/ve^N@ i=b9fa&llxH@DG37; LJZa7mVB=ح]: Z!ܴNo}lMvҙ5=.;6 XiXoQv?{M <<|}ƚ?!]jl̈́iJve㣣`=/ބ+e`/"Z:HJyq!zR˼".[;V2.u^GTӓ"IZ'O g|y@*UXs5!@7@Ic h|%Xs0AfC}S{܇KY_~6*mŨqn'/l1R$.O2̯hw {>!0,¿(6OÏb]_ov8Vׯ 9ˋe@1{OhTX0'7v;b'Fȍmn6OLF]I3hnC3 mѱo4AFU֜eF(x*빼 0~%wW8k7 L WЪde'P Z ?JKXH^|sΖCȕ3Ċ)؈m&Pޛ|uQ{e_ @_H}=;?ˬ6'_ h1E~0rfy$#TһKpt'9aB2O=uk;ztCv8F0vu9M =-% *Ju':&Y@w9 \ Q*+kmcrHim‹-{Øy$;M0vM?>3@8gqѵ<;\ "}>b⻬=r9cj1د.3ZGvXPNp E+L;bF fˣbM"մ(wYQWF3YE#]t{O+]n!CDK VcLi\By(P|;]{rdXUF1Pj; vy"{ >}Br;ޝ xv]:į)y8G:׵컴2a<(if6$sD(U׌\f1+"bDbB*H9JfӄݝѿnTթpԩSslALxgʞE56a>&p*JN螟OhnDOy%ˑkȋg̝ܖz9<Ϯs|NjE9mdUi%޲ H"qpSՆscY+; h?"'o!s7)߇ȦL#!3O_ H_h| d3~wXgۭe(2yN;W3?{ZP{C/Sw]pu40zsh ԯtlD=i)H1Msy"W|]Sɟd*o(#h>cKY^ֹOL:iW ( υBh=AQFOI_䍬a/7-̯ZY:FTq?wHj\ڙmI#ҺiNK v x8ÞdG/ d8ՙ1N %ڔ:vmofcyW?ti+/O $q Қ4v9w{UNJh (=mQMrZ`<| ;i x@4~ Gy+-#bfWc4E7ܤxjTQe+Na"@%$>@C?C% pz~T+Y'Cz3,a}IkMm{{|&GL!<,l Ut-;ߞd@QkJ0gi8}q\sr򌡼e&$  4BB.PB O2g"bͳ]ݾ) L;+Ph_n wbq}E\(}/ tT' Aox P!Wæ X& ; F ݻ[!Wn L^kũ5Ͻj\ ddyzz+Hw8p}9}Glz\WãAr!2"өǚLGmF X,Y-D E7;:9cK)ߕ_Wem(oX/0j5j;ttA5wtYoFׯEm2+xyQ0<ԧ\Rm dIGuBCW8OnEn t鴰桲Z3 :S-;7P;Da;#טЗtٰH6s.].*|qu7HK;@󩅾#-Gz͕笲19]fdž@}kp`k-jz|cqCY# ux5߉ֶVkizϵ) k?YRtV?:Eǽ-9oM˹zID jX&dRƋQ1:לޠ{F>> Rй^q/`^Py}rǹΠXX"7.@o%BQqgG>=s?E\ @p@{=Wuei$.Jd$֙5r;|S͊OݷyJ>&p zes~.3̹Ɖ'rϩpTtg]{5uԋ+ 2wKGO9֨zk6p "L s˶S(-0>*@J`zqi9|T;TД偃SRabRRf,j&Mr[s y|=zd\lj@"goXOOqkԨ'ʆ;ӱ-^ꫨo)kbyp ~@^iE0[XccA${%ٯtȎ~ݍd|'9`!S'u{-7Xf e ߳\K{I[D3 :ݨ`$7m=DI5}sn޶}!hm"։P'HgT۝s}Y}ߪ?GA} j~WWتm<1lcpjԳ 9uosb_d5ggɩ)ƛyrej%{I7W0M{ ϡ^%巃Ž]yX{|D$lH.ZW/AT";g_Hs02G;B? 3#qɡh._:^\;ZG,޹ >PK?I_|ľ ~Eܱi*z=Og?7VQ㾕:)ٕtlYjcuPAr^U' <] ~%)M߹IfJ^ w3xȉ܁#[ :0 LWn&!=S@![4q5f`[=_Jn{܁)Jy.}uA?@G;I๗ 1XTB$!VN\ҫ4b4e}Q=Չ4 W%?C-Jq'WϑdOjs^7ؽͅNeL̀>'.}=/A]"yi;-k&F o7~ HN:@)T~ٯX h6;r4yg:]L2y]k歐UNɡWk?"^LwusҖ"fd4&[a폷Ym޻DPۇE&0XQ0gxǾ_i/p|dkc lRc |퉤4Ef&f,p>Ѳaq!wob&й۾; ZQso=yt+1/[? "ق=٘jjHblɄ uyԳKuA&HR>p'LN9UoYWk,жFoܷYC;v=AT5iq!lvfDt433"lyrl3{-Wrj_Gs^;Ro~Kaޣ57OsC)?J炭 O WC F$$RV)OTfhebzR;H$[ۻFkK@IDATQ8X+k![7ns3TRf|d< kͥ1:4HCH{UO.xXYSO>\ߕf9:u sҺXPLk!"pE}[-/AY7z%-CV1GkU,1v+h?TAn!w}(C(*UOe^/+Р4^@`w@:]`SSWO֨ܟj{`fO5y?MCN&!)!=#Ǒ42Q:vOB"&N>Cٜ(v yQ1t1v(93=&h0sl''./ŔL&#?)s sE0о*` „@{'`s cd}-ᝄC߯-E(?B7߲1zSΧr'c9Lԟ8P8E#0e]jSު݂м6oMӉ30&q Sb0s]P)խ.} ļNglhcX!{BaN(8l|JH7d}bWY0YY.ۘnsXe-;ŦfwniIygw Hk/:j`K=*ڃzccLx͆J*pJe3GoN/UߔO59=7CNZ XqJ1BIYƩSy.SU Ml0icenʈ^+hwVo))Oќ7l/ٽ^nˏ8F٦?kK ' ?o j~,cd~SK Mg3&8wtFb_# VuO?#fsל d3mGFٱSsvn F;: <_r{)H;DxiV=,nKv;dvF2]os{aS;eJ@!'6w5k^WChD 8)(I M|&Gx/_C[aA]L<}"s~a15fP;'S]פB0^ӌ4244#=p$b<3;q`g[gP2!mrl63Xn;]Nkf!yz!(ʯ}!ȏ>ecl G\nGh\\{*o4JP R3:ITKyyX))%#jKӊWb}TYbR;'x>J+q"uו`ƶ0X9d[G. VKOZݤ؈?bAw>J#m\N^@\=4RG,T'רg=_z899]Ѧ5} Nh1]:pӤ}kt^Qr/OD:/U m{:Ef?7AЬ.AWꉿKE<(P{x=;#iWeX~w P!RU?ۢ^[:7ENg`ǾU$Uɘ`)!G (I%_JQ s!8V?@@{B`QR쯍^[lꫳ1<; T-ϧFۍ8tJê+_C{BBTEpiD?%?VWYqf=;Ms}dh6(9M%%MWKMN^6U< ԏ B?H,J!s5r̗ssFS5,aQMNNd{qvvK>:s'?+M䒔R!/XS|ٜN{NPC]`467 #BF(@s П*^9`V\Y@Y;_J|ƙ&0LHP3K5NDɜ/?޵[\b|O?rne7AgzA6p1I "Bs`x) % ߻k1Kv) m@/1Lq8۟; 4 UC?sٖkH m]ɤ=*1m?0!8MOgˉ,\_5,a3{SxG菾GORI`C#_4Ξ+26F 28FV\2wMۗrhȹ@lHIj|<0d-YX SDjA݇-8UE-D\10g_jaj 3xBպjQa̧B__R$mSh;q3)Q!9e3S,:$&ncNLua.P]?i8 !-uk(6 FJj,00dkf{C9i*y6 6 >>wบl?І؅ޓ됂 }P@5"!c:K@!"MPJuEвV֨b|?M4#3#+g 4{V;Ka@?@,i"u"Cxw8ݠ=toiT _pQ;$[u%/0Ü[ ; {9­y$Q ;3cv@|&wk0.2M?-cZcrhl+R6n^~fIzY.,}`}sh4PеLw*~܃߁5/~WWsRwɷT+Na^:]z$~߸}|S&&WIS*G5>żgj[~ɦĜMlUE<#x#wӸ̃~lG $WὫ|,KŞi[v 燨l [%UϨ3)8ͼ羜| P%eWlIcbB$mkwk}íϽ J(uA~i5BG[^`~;]=w{ؗFΏv6APO݁VK{1nGR+V޾oAW~t% $s+HfM》L_ߙ1s slWs l_d}GP!\;O_zP y(­f1"Ewrt iO$(>5'OYRϐN`۪{+PJNxS)TEY/0([/=t"^zHSB4Ď%'zwM=ˇ;vpp*_劎!}Zjz:& .fMO105L݀>ʪL\B] |*i 0 U6/i<.~$pB&4$kTn"v>5(go{m.M{HOn8Nj!! mxnSYvR-U L|H/^JKtLELP'C.WBgwRgXhc/wFPs؀C. N7 {v߅ч!P"ڔ<'iXbͶզuyM=ݘN48ƓcMwnZzAP9_Χ7;h 4sPMspty9YME9ì_ޙxO=nQT5궖\ YL0b9vnƟu܇jo-VoOgxPf|"?1qsebu]7Tܦ<>@2/v랏!_9kсt l$&O!=a](kL^1ci1bWx;+}#515\w$fs*6}@<~_EK|?Λ׳s&0! s' `{ -T Baly$尗5ܶxQN~LupL>ӞPžR $}#&Jo ! !Pmr`e)])",1<3sՄY+a<}߮"Ahm3!V?ZM:q+"] _!,<<:mɴ{DFeQ0nx44\SNI[kLq =:udjW84_ xO w^o~Ωk^z%>f"@f73@ځ"`0<Ν wX"4T=5BW"c4ф OM|I^ D}ei= N[1OK&`Iw|JCfp:+4}b!G},:Z/ET?ݡR:)agQFFk/?cds}# @a6'Athم6jY6|D7"nJz{&'|g&9k><̈́ȮoΨ\VHKѓj]Yk \'[ I||]阄&|w`vW n`vjon;5!݋^&oaD#weQk2DVG?9׽+\1gxг\\|41#O^iƧ[5MXu:oZZ7 |]bgjTBc%o2}(=FBĊ? 4KW %eQ SE:.= 4LR_^uO {w դ쾡]gMǜї5Ad㪘&T:DoX5A4rѴ}KܐEcLqB3Z m@!45i,kε.#ػE{-e_s%'+| H%6Yn2ȿd _Ȁ>8E6sY h΅diJM7=!h;?cɩɷ miՎbmeOXR!@K> X~we ѿG NiW "ƱeA Igimw}wd =#V1"3KCbVGof;[#$U;w75*Ei ҫGz0.73V4n.*g:P-,Ykd\zO~Ur~sDԭt`KĪoT"<&"W `h~֜ŎڸY0f|:X#9aW6a u5dk PL?4^\MzE" -)GUsNgC?tPӗWf>3Hdv-Mdz>|LH d1aʱkx0c ʹF9(&Ŷ[6GHwU+\`5 ܬKܑ(~/nJv[s-L/,mWLmH]hDh[cjM?V ]o ϟ_mz^ś uڲu,5պ q)?ǭb+*^P/uz65vS p=GȀ7bt2?Dže1mQst8s?jDp( W ꢦY!P.^[ߘYl<+˸k1/QԇI 1īA-_K̓bN #^Zc)B8+n|C5&wL-:(kg@GE</rףGy TWp @t@)C|UC#!swGSlOh ekѦK!75=mN(,uݼ_η@~N2# 0l]!mGgh'>1~kW#揔t-`Uܷ%/L`SKieA/7CK.dWdUo;Q'D9FO6FPd&Csq>^g "ױ䣞uu>!+ 7`,*(*0L%eP1V]޻o+ך9tN9s$ěKJtm#q PR$߭ՎB7Ed?{7{b9Ϭa)bȍH~^w.0N'FO_6 Rt\ Kd0V'u_yN`廵:ÏGDf>;!V8O8eicӓ )tDOLMLwa) ^5#k@9?"{JmѹӂU!Hhx/\g>k܃oe89k4 ;ySRʟV'_ ԻP!}"0X?4oEUv3T"ڣ gZ 4ʦ#89D whGg !Da/;{rr,iK1cjå4*dCnRm1(C6P9r%w]2A ܷ[.fշ,<%ͳ;]G/VAR`Dڒ 7!j\E^1$>FC*Fw=G7 P]EQP 0<ljXD϶k8|eܒ2 *v?8P`d<ܵ+X`v)T#T*<ߥ }24oonx#qq^6JnVo`V%(%ڋ{"4yWڏj}l3!O4M.)`f6ӷBͯi"g8g{/XUޕ=ۼړgis{я/X,(R6#=E*l Y[X?`?H?ެ^BX#SI oho> u&BUѾ8w?3kVHfIgh&1M:v`F0RC&п!LTkS6 oP A1:Djf._O0ymi<ط!<2Jw.M8 U?M9͡).Ǝס6+ W@0L7sהn,܆nV$c5s! ~+!.QN8_j@;Gd!|ԣNO.,yE)?{qdH~B1@=[/P.#Vme.~N[еacg9݆u8~x;b?`~iR̈y o |,$|O-c3;34F s<E wo7m_r?EٿA4뗦Q|@ECx2ړ!\̈|FP`aG[ SZ 1_(bK9-[x(1'eνĝGcdJֈ-iHژq٩R` GP9z%s|k|Oo*Qmb2 baw :2_'sws9#91|Wk=9\a!;VWc J^'aBi<Κkqjt>/=N!fʼn*b/!s'U(,9!s?=!zO4ޔvCw{N(}ӆqۊT9դoMqk9D9C!~ դa_7fnK6qm;-r1%9;qoC@wPG =N% !+)B[6aẍ́on}-Oyk{汜҄OOwKޥe*{`qv ,Lm:,P,>/rj<[7K`"as kIr6=h7 [$t, ϝ,Roq[8s$ޣ)ZDfk=ruoFϾ8adrjft3$oeadOd,.+>4!k{ N&v9)#βGޠC~9)T\6{k&ti4$\A;2>I'B0 :eA*B%2d7onV8kظ7$MLe< YMJ[m-%I ĽHeA{01c0^NRclb,nyB0S٦2gת.u=qn4!ٞ[YCc||EUʯqN?7|!i:͸%^ o#wd W[k SQs = S>/mXx#gI0 V\'&~bE@e8mi#,0&ZZ凜W_֮ECG%i6dfMe7LrwX& BErEwgR]9='2?8w.M⧻ !Hφ3w+^vfs/koK_:EM_&C|:kkcyE{DAR&RO_~Ot~<ٴ/lsc`B~->W <6-Kn4_ZqksyW{,b >ˋvgx,E9\ .MgG3? |R3hxcj~ "gR+1/epl~dY]=g9|M#lü/dnǢ=iR?.<ʡMD=ҟ 3Z Uy[đ5wk֒Fi]lQ00Ep~A~%J>+{smi3x"|;[ 6=)0BO ~aS4 s)^ڛe|^[ZKl>y5чJEf<ؽ X7+ъXyȗ@@Qɾ^a,VHx\2DP!RU?1X:%ыa&d=߁sީJJwsU~;c`_˶c|WWS ۵TrUx@Q7vK p7bUMAOS1z߁$[xaJ&'а:=:-J(X1{nN^ 'ZNQ`C_6V(τE &F;א6.rJ|Ќ`T0'>|*nE.F6O[|.'|"@ʔ( ѯە}ohKpj܁{^A wkU-_x8o=uY&h8Iv9AYzvIbbEC{+~T+o%_B@пY`@*x '/FQhJF=>ӄkunJW2O{pƆ,!=G@@6 !D傋 Tyv6ٔb[랳r9Ӽ$j48~7RK#M|ʧzL {(1mh4%"0v2;4tris5Ö6[|gJQTROHI1?XҰ@y7OoW5F^IrszuIȏ"YoMg71B8o#,n3W:z2RU0P89{R_'hɺKw_ZUKMwm(PӅrqg#jN BxinXJ0N\-LUekJ푤MHVa4)t|߲-kP>bKXY iБeem;}D*Yr^wd@gEj|qP/Qꩧ`R%Ox!N@wS察ܯmNH. N*:90*)􌔵+w0ft Td?8xE:Wr?p[־hxIzRLC#0~o[(ۑ/zxSm(GzZv hW>.#oZ2acsÀ[g*ưL| A@vn43i+YYA4-;7?'FC06^)0 v' cd>*G# tXwKє۳c:/ii^_b'f$^,F{`UG`818})l."4ޘa"e8)-5 7_9 ԓ;#lMy8#8~2Rw Ӑƴԛdv庩sZ|zFDt׷X:B`]b@=:G =Q<sms|uζ9DZ` {Iǝj|'~`0%mr&P#{`XΫۍ7*^GU| s(ZìGˊA:84ܺ ((]C;ԝICzHe rנ[] }X[z}[r9&PLݙ]Eu$K)sSyIOVmX幰5nnb1)]hzرtd1 h&;wc9T̍5vp}0tpTB-j4ɝJr5lRxj5 +i ax'hhumVpK1[s=/I+->MT$n72rx ~D(GW쵃>ᙞW+cяsq`]i =.Q5&48QCyރH$w V=NbWsgoQ-. K)v因C}}=43Ld?_! b/L^oxk탸?w"TB]:\:-R-RWPxo%CxBZ[K jO.+'dc{}a*8]y3:6Ue#ͳ JEq 9moF>Ӻk /"oea]ZLT#5*Me8o=eO暰^qGll%c.=kӆϺP =_PdD&n("`bD)Ìݻ} t%ˏE)&Enh!#)^$q~}R`|D`~&L/t{ ϋ4џ;no{k9 ep2x׽>g}q4on>|m$ w{P.r@0 =L0YP.Ep%lb76-OgrWmq},_iItVb5Y-ҧxI'h+)2nid26ڞ1=~CɠBmɵE;utUsyoі]~ۙo/%8 ~c]zuᬟ^l%|lTD^~fFE:S] 2|697ٛ"G.5tnj[oBsB~ӳ$@IDAT[뗦E74.y5ɦZu@WJ-AB/œ\&`d*@4f9gP|3ݓ=0\6>2cŀS/ chs9agzF*TM/T[gjI{,%By j~L"K{5g;ГW \јIg+bkDuEO1] @Rou1 R"J+qӝaL̷Oyb1WP'yan.XSFfRoK6 t; vwAzvJW;~A{d~Bݐ8ȍZ 1񶺭%%x daSCw;T-N+Y#,ۮd|qfӪЯ>2͌:Pk=,qgOI LxL Qe1{6 ][|اyɷi]b.Qw33/.-,k=s<ǎ~]3{#:\vwNr?!?]u*}1m|y~|(;ƺߢ$]DyÖq9  &LXwLD"/D̙Ny}A.PfG cͺjʵ=zۭ*G.b.u #PNH @+KgC6proGm~.@7[XG0QߗP9zE5TMoxL0Y4H,:4rK?N*Y7%w(,s>Q,Oe Ƌ/ Arz{%aj/z**ONO;k6 ux:Pr/w[RߗK^* We~]<6m T&Pس1h|mg^k?פV Spjڲ+=v4yZp`m<8EǪrI_̽x R0dvIoEvi1t___\\`G`}]{'U?﹛@`>H Uڋa?w}_ְ/t2)cPȅMZAҥEf*?!=!L J [) M]{'E́% L`ˆYYѫ1#""0b" 9aBM7̪nMwש:u)U\=Iuo@35bkh\n{O]k═Tu+B9IUH= K'n&~ d! ,$fY H݊( 2aȴ;ru|o z2 ԛ6BPqo']. k,n=᧚uhO/~"fa6c o]g;^S o2#-W>!`\B9ŢfvG[,y'1L|aÑ̾ _FO'K&B5idzDFt)T Ö?+u->;j.$W;X%-ƙ{o͡A ~"e(A0_lL孱>Tum&[)=,ڑW,rh8X&w@[-TBv}*J[>[aNc8x΋M!\^2|aE(Y#b+ L@f w ̓dݲ@~ oE>Jt)#Xa_^i,wM4q~>;`h~mfY0$fws v?um5_g?8,2p߷M2d3 $vo]$"?(N!;ϪѮvwwQg<2di'4Jҿ3O D@hf'ar?Xپ=~Vؓ#g6/ODGAֆl}*4O< LS ȩXWc{0ob#u|T;43s 38d'R(4p ]z_Fwuީ6ɸxC䭢,նRf[{brDB`E.GX3hGBr;6 Nȫʏ3tCm2kjz/zzFi [hׇ*ٖΫ)5ŋL?Xs̢)LHDz "|/s4~ 6Pw_m|R0x+u&@R( ^0Z}=7wsK[_zlAE)6.zyjC b٥ngYǭOz*]ZBWu>.xy9ً] PxyKAXs</O}|`19y0CDve$[!__w Ԑ$+)Cl "O#yO4|t2:hLy%z˧T gDhZ66rNɻ<\p+/Tog.`,e$+!=`91[Ǚˢ0XMfb%84ۻ+/@iQX_S)J N sL#Bk駞H vvnaUs8?DNJkZsU^&*hQLbwNJVE7Yڒgy05՞wZ׬:hlm 70̩={¶⫣xoG 0]&0CSIC/R(bOddM ==C-9Ci2{1Ge-,o虢 tKk=Gzs !BnDR>%qC,BS|ȭ["S֊+25nS-ȉFQڵ];Lp򤚉H:RTZt>?T0 '\# j],!<֕Kn8'S/#>)_(0/f[[e@?{y_, (>*/z/lLq~֭djL%02{2.^簰Ń7l~d" k H_P/y_nJ|O4P.O/ME,4{J?8(t{*x&d%sFӅx(^*кJ "~ހ}ё\z\jP8ѧ/%dt簗9wAsўTѓfXM3S{( ?+ҕL\kJ7XЎ~ ?'rf#*s=3^D KcoOG!7?6{w$TBڵ]@ Hp4)?l_kV%~M,^LSf17t~*|q@-*GZfe\xX;<)<,̥E@)d] =#e̡}770i Hsil &6NZo([n=^ k?xO%JW`>W}DDjO{ Ti 'L$HZi4w޳aF;y f c1y_\F&(=@o/Qd:y%S+t8 K]}k4lMűE]6uFfU ŏS7 @-ڗ7J(wΰG\'Yi Be>)zP9YlhElt[n. hW4Ǯ|i6:`+3!ݢASMŇt KqN:xo>F\z Jɳb>^:޵P.t%:e1m;M ܗ.*!Vk+DFTT3#8t(T "&T 6(lb3&paGEp.1?X8yor8CsP;\ٯPN XiV4{|`X-I}PU?q!adu}1$JRgεN-e2ֹSˆH[ҘEO2B(6J!Rv(*A$mn@>I }_`@?C@I7~ ]o䮸ߕ~rH%irkU?ܱwiL#JJ $jr[ZD\{[ _*BiMg ?Eixa5ɘj6oGXJ<&r#*s_?DNl@y plTtG}(CROo@A4.7 .x .Aw(f[LgP^|"xlvm`H]ItX&3V ?{9EU9>XT:#/[Gt93;HNKCdST_UDwGq<<56:ﵮϲfA^xˑ3ͯ1V;LҴJ34O(B"Z`@)@zPhʑs.k~`O}f;vK"_ۃ+}{ &f_h /y  Ǝ&=8=VzP{2'snhB\='wgWLܞ $\L2ۙ]M?n }duXo@A&k$e D:s?9~yiy4$O#ajԔ_3Y+wz͐3Ǭ,+޿7ͧ؏;'3w3;WɤC]57yNeI9eF-Wz/#Jy[̑!O.$?քf@4X p44[)@,cxc6\< Ex\i"ׂ IG^_&`qnt=*6/BRU|+0!bYgJ,?~u{Wj|#_tgWq|nQb8;R66e:#x W|HxO e%`ohRۥcf .fyGZ~f!L LP̣3=}V5(FR5< ď\) 0ۂaL pW*ďg0(sFSY􏁶[S3 ܉vN?|EBmtpɫ hFj@7~. g?!j8{#`2V-'?Hjҧ%#Oxz£۫ٚ"Hak{? +_|Nڤ/kQi[3k)ulä"Q/u;݂d ӌO=i=#Ɲ-0dʊ@Ij8̜M0oN{u ~=&:Ƙaz \pzk M Ȫ% 6  h6GwxًوR!:Pw>pXz?'؛䞫 L>a'ߩ^JxkI_9|,K33 FZz?Ǵ%ȣ\u[(0̈4-[[b tȈ վ1)4gwIF b`X@ DVu4 P3+7`_0OtFw3/ne2eunBk;?!*>]= x3('Ws\? . 󏛔i1/27q1a1N}Lx[zu=A +tk]`K4w Lqb~y#rՑ+Fx-b3<'tMb 2o2#Xy+'[ kdМ??ƹ.?K.g|!RU%z&~{ r>DuQP+H1%ZԟF'w_tW+ê_;+>.옷@߰~wIHJ4|)[ ' ʩF u|j>T;Kpڑ?1㑙ذg:Ep& t#Ùj$7T`5F/RZƀU<O$p/8lڂa/0>R=3A r/Dۚ!AaDQɏI7X&@%$MLUw.v TU>QssM:*Z#+?;n#uU9ks `/ :q$Z. ÿd8OPmP97FGi{:4uW+!喿:wOa^L^{'* ]xL!2/5>S˄+ۧFztͽtq*fUr5ȌY_;7ؔg61%VGzzX[Fʁ1A g.v@yKkGׅV@t VF +gʺy ԇj[440Kr V=׎ЮJ΃WuMD?);C!t{KLL }F5J>^t>Ọ83yyu/+XO+ w&Nv%Q#VF'̖voѡ8iI=Ѐ-/'K5o0Ȩx4t== zE9xDž`'uu`C ]TaGWs9g"=JMCxy\_Ay:}nm\by };6.PS }CRz`x@<^* 4s1QYtH:F3餝?:b/ z|iPI hI } ۛ}o@Y/_[ͮ)9ie)k\3*T p9sdg|ixy" Ov/ErBvUVk`;ca`}FU&ҎeLyù]bEւ39K Xf=&$qX8r]q.g;׽$?Y!ꉻ~2`y7`@˻49H n S"+8lX0S~87'MB<R(OX{\Agz#$_`%)XϝcUN|a@( fa5N \'Lx?3-ӐyQ^0JjSPq3ϥBn;>QUH^%9E@"d]Vrt@> ,wyt}2BFR4$65d9k .]7T3ȲW+ 4Xʭ!C2Ǿ;M. 287pTp<J yk=3;c{@ =Kix$mg7 b*XVVPt~F5iGg}}*RK=f+@M(iB" 8Y8xXǣ(ۘ{V۴/옫2VͤȊylmvk6U {#O SN͹)VVXL۠W^1TKRū '7ޭ9P3;' 2*s9پH6YQ{]SmYצA3k1SȚcoOB[`phv,|vǓKh*e w\U0Yfd!+F:exZa=wؙ`*"ˇ@W W ,X|"OwUDX#}FQL * ֏p{HW^u #҇0`)ؙU@etM೟#@:C-W8\`>tO]Sb9~5ypk(íu_|5 IBn}` ' |l"Roqy_ԟ}w㻴&{=|<!}^ _%yEJXNɥjC06˅JķiR|)TBV̑ҟꤷU}Kgi[Ԟ#W4NiS9j\3=K;)*%z;@7}Pg>ѰcU]je嶋c:76+:C^ HkʾkX`@7Bཱིo;`𧣭vVu) {_ b_jN:;V#H輙)u~b@#;TgLJ:wgf BW.bxD +We'9oQ㠓* bE?O3gNfGȞJE!Y睒Fd0}Ƕi"_|1H_9}Y#+&QDc܍uk/U0˓.8 KN+ɢ|NT{\B{V) bG ^m~@Kn#AMuv%߸`r;1!9Tڏ9,Z+9b4W2EGڙ&qK $tmc[R/.i3}݌H$_&_9ksV|+A)eF Q/Cc83ܟ=rj~Zy)si_unV&"3́r',ݴ)|?[5S ;8ͼnT F~Nt;/VZď %P] |AܩDcx. &F6ެV4j%џbf`4c^\'t]ؐJ]N`?]@?`  Ly q {ݤM5Gv:|&nDHu?ȆکդQi2gk?EmIB'׶.@i ԧ/SVΰ5gٲt~}DuX0z/_9+9 K$b9`= w((LF'nm{8]hE|0I|ROg!>2ڃV gu{0?ozC&T;V(05&:V]twxM =|"0_K^ !c Z\ {5141GuH Dɺ1 Eye_,  y Ɓ#Pck(PWP㨧WޓXѭcH5t~$Ѝ8gjeѪK1y g-}+.ǭ..]~ubfYS"e]' '4"#;g/>) [/a{kH֜`]nʢ~'2;K}2\!=& Ku,;x"cO[fJ=J踸=MKϿ % ^w4f4J ٯ |B}*롬4T649 /粜YYC Dk}CV>ޞ2TPwXa'k:|B"p`lrztA;: xmUk3{n]2/n[<y"|l|} D)OooPRwC7p. oΕ݂1/$S` s:Խ3o҆gVsS #\²?}MH@oNY8\@a @ m\01.gߘ y/m@ox&sƄI1v͢[As7V6x&,0LJO |S{Ґr69k\ciV+u@bK@IDAT\Boo$[c75q U;-MBG@Aw0LB| InjkL[M3q1$7]_\|kϋM.CwPFq`gQ4ݘ:L?}f990{7 J-P B+qB\|ƩĔ+Gw"M(' FjUB.Usu(G;Kue4#Ҡ ,GL,,G3iQh -%g`#EI֖;5L!?ÃSh(r2?\l,+RsH׹0 N*HG1`e UYy"[OrlJ:wj0-6#Եl3Z@o&8>#9A ,=;:_8Iϊ4YyXkRuꫥ*??߭zF{FSZ_'1hZ&E9K;aӣ:UaC_n1&J[5r6_4f'y%Rw7 =ƘwϺDʿ$q%zd_ʜO>3&; JR7א߹[~ [m1R^ZSk!//tR;`*:zFø^UŶDo{zht_ٓgy^ͿGL8Y+SH;ʼ̆3lYk4E>G_jҮ#וXp1ղ0z3 [=c]*[@:?X)&Z$ n4@l~9:L(R: R;6Gr5!@طQjD}aq`cr)ʕSu.c -'2UjӪ|6szQ>3078Uy}xد-mAJ:]gz~U^.LM 6B)AZqQr6JC 3<[Rx[\~eDbS21_#%F'4EI&忇@=X(\ 'vk^3D{y~*gN ̀59 a+iA'Y F=-$l8+~`7y8ZQZP7/]iΫ~}ƥ꿎|CO.0( ek$yJSV7]f q#95 zr~7΋`4PTH"Y} ?%%UA*:@m5sk,9 L(_ (xEi~R|ƲC2O 4YW8OD~3zX geքugcL.UTqxKnXj*PB'.ߝ0~I"0N)8{vcc&mНiGbj b[e-vN@|S!A6Fd˘ <OsS#W%He|(ꐟ #v` Է\N8-7:_yֿ. PN~"zZSham]A%Y1"}|#+ tɽDp-+xLu"hN'gW-Urp*e {? I-Y'l* l>3ZUG~[T i-# />-tÿ9_|P~Pgv+hm@L-:בLr&66|wǖLG5JC ֳ8czû~Oj9 PoJi|#VOPiDܩءJoW'=MVc&xYǬ>u7RHQ4sR|߸ 1P ' Ėhp؄y˻gT Щ[y 9 Ǖ 䳑sKڕ& LJu@~0.BwK}CzPH{מ1ɺv2 ;O^f "ߦݗyg7etT _=(pBcol?5솦u 9N,@y0ſ SzCFRokS$엡ʄ4LL MP]9[VF[7 㒉,avz)nJFqr4*[ ݮqmTū$ {村9ҺH1cy>Cgq;fXwQJ:Vayp e *~0GSP eBhe3av}‚-8u1MQΒ :m1Z|W5iSMKIAGV$'`P]HχBmcg@dO1JWl50z +N`ySbCaȴ,CBH]ۊZS{ً/K}W@\ͺ@?k\3H=ɤ~ 3fXx'&T'HIF=3GnQ]Dpuy%w{l4y_k^bǿ{ ˦ 1߻|=c(ZiFEGn yic|')3s;=8.}ǵٍi=@#_e<1CjuwMi:hX5׸fG;\MPYN}FzݜUL-jiu5߼g?\waQӦ~$L{Xv`Fg2!p׳气x;&,g-"~phׁvW8Q\~=12\[$%3ms7m=Sϋ6_5@sY_:æھ|u^ԵxtO\e3rJ}#הz7xQ&7r.h?琎n.)XVqV®^5awaӹi-2Zl`#HnuVꥫW^K}mHChpc7Tr pfdܓ?m~؁~(:6ٳP&hPĽrԃof ]Y5jIL=fvKexi+)UG޴rஈd3ޘ2nf)麝rY%=xA»x7paK ?Jo g@g R[űg%V^RxX ?S)AgsYrZ~=ɋ:=#Zc }AD[ x;{!5g#g羕|:R-"hnsl;9jD7XwJ $.JVw/|u?pˣ ('#+*]?:%,' Ģ<|],BR/F=wG2(;0|9ɵ,I_ J%ik˅l= N'#w/iDΞ2eFqݖ='dbMQ` 2dM[ޱ0+h/R| ;%5z0ܨi =f]ֆBܗu}q'kGnc:93c5"[ǯ>9o?&Xbްul/ N̛X<_V|/l|<ɓ*f$h& t>roeyYhF;`'n(v J,|dg/5$ogʷ5:[+sUIWlvA!r?Yp x/}>/[ mPd4GMWJ.N\^~2/d V䷟[`ӷ@/{ Z@ '5|!~^@Rɒ+d @%OWB{=ĉI979Q-eR[.sJ~<:j/:g[EIDr! mR";x]㈀e=vMafqƀǺ͡~s!*F#qBJʳNU@7<*5"PN,0~$`{&avoo7ߙLJ|Woo'Z&I|9N×-es:QA#_&^ԟڄ.Ѕ9O?~O@d,L9V4yv.{w+c>QTy3 ^' EQ嘶rz֖)M'~[{߾\;`\cv1'L ff9v&^Z%Fq*_Wc0#R;:o>rW x#(RL4}~f"?rͽ} Ÿ 3;O dr&3ηӍ›&t5{(~ʴa%(wkhCeeycoHד2E|ͨ3qh4Bev%2Yzb(|bh6D g*d-WZ,PLpz5?ӻHZjY#Q+P1ʊ㧨Wc0QIWKtUFd.Ἇrڛ¦V|cD3)#rDJuQ3bgn&'Y;"Wْ/1Tm_Jis|UEq<8*1nFL ~ * <>x"wN0 Cj z>0ǹHؒ~ltȴLЏp7awm@ 1vv<|GB^lE3Ah?cRo٨6KND@!xŜv p걁 |;bNƽmʧh`~o|[n0Jq9D1ssM{ *U^Kj QQf`L4 Sˆ^'*?(?50$ $VE \ϧ2m"`hﲅ!&)|g3RPJ@V' B)N"`TѾDB{_g`Ȁα@m@+xugu,6+T8vTU@ e|*@Ur/@w@g=_oRh']4cg% "ˀ;HӴ7ԗX׾Gg*v99~ `c~<EWrد:O{lz\&zܛBOƊJiPʱm$?c^?/$str졟׶÷f8iA/f?rmh_LӠ20wwY} A[6 ` (דx;QzfR0SV)ƙC ˖, L@(Z7xf[ 0Q=KWIxw{Jzi).i7a~MƾjR1r\ eo]& A zr`Q_2!^1EF\T 1َvhva7_ ߧLC?ZC4PfZe.ޮ'VՏդ+[G!UPBC`v|f=16$\z'iӒ٬3FfOW4EUr! Α}\PR3PEƻz{NݗB'>un 6x {Ah[Zz8B%N350JX*gKا4AeqCl^k}J]GM ]B!|>B_x10d$XqQNXQXJbf΂6k|lWsONvn 06NTo: #ʑU^1u+G^rیd? 0_} v hߵ]Ћ|.봘]L#d#5- 7.RWG&J̃d>>ϱO Y׏;Fzt쑝7};|W`hj]#FR۝Z=ԫŸ>Ϫ(l Ug_I%̻g.`^^w-PI.Sn}+ghV Į*F -Tm;H?Wr4;vf#%y2cvtKryS/`k0WK@U^wWՄŔPJJt`|E+@'[=!ne ?Nώ@ x~A%~hjm=r.2QL >fl&;cYYiөI<](Npj(Ӕ xa{N)*`ؙs/ yi:|,ҧzfe35 HUҬ!9 {-HJ}DP&f'եl ͯ" XԖF3ܿһbb?㄁G|RF+j3-+eǼP'Ewf'w~Ḏ7&;IHue}u2C]cɼM})넁|I%N㱧7զ+S{Y:G߷81m?ݹvڽƽ@0K{ \2JпKbEN3gQ <˳{S^z-_?K;º}#hQ@7V RzYw_쉋*qwqE*#Mi/1 B^y .?]9їwEUW_gR;QN+, uX[hKV_0iP_?wΉyŽU6"՞hpM[+jnmN4SRm2Q'm欓%s@;C|U 4 9:P@Ϥ xBEiG@ګ2c:h,&O&ZOk47  @\@m5/{ud|;]IWRV-LEǕ}~O'[>s"j&h ; Ǔ3K@PJzvƜEmџԣjsu=]/%Bi9zWXwЂmv0D J?t*(J)lLq]PrcO2Q!/ !W2.Fݎ&;NGI}N7oj 2>JK{z; g61?6dPi9L@=p=ѱww>aD_@**Ost'=ƨ|_zv[7围[F00d> 1j4~׵zpOiƋ䲚ss?Jů>pD={+;ab`~p哫?*f[0+[9h^Ft XF- /-cL>Ap2.}tïG[ǃE(rCIN}̖qژoi+<.oسE*@qt6v$\4bғgL8y0:6ۤ>U"@g7zg#CԪ9Uuʱt+aSE VP{y>1l[~o ,wY8eKprط<jrD ^W ǯ7 ࿒)(`8R_s r?!~ȉWxQgʤQ<X/_CtٳXJ2AcyIjەp!B&b8gA*S/cohBQ}$q߈8P̗ Q P`C?|N[ /z1兑F fԑXif*?( ̇FÁ? ukkIx_x{KN#P,Jr*{hI݉9.6~CQ!{"r(XyJb|T -1x sm~^QAL=-GPf 3*w^@Irw5=\>7 /?NP,OF=^k r>ӻbWDH1#`D@`="g ^fϯLmJx.lҐz[9ټEi-{)]J:ڸoיN$|2 ?*ϥ8mfbھak6c]~&F MV92Fd{>S7&{FBs';K{H΂]jU.KQ\N|+[M[X )KU/~)+G]B.@ ֛X{sV|@IDATdE .=.&֪ߎ>:/cgrzUj _ WxfY@{bN|OWncfn~a`[LzΥDoʩW)['x[A8gyHAa3moP(bKOl֥Mc q*QM;wU_@HkĹwa(ub?P6iە+C+%‰ruS__RSfG'$6MpAgTP~fbrЩnQ; {>uHRoPk\#I[![Ѵh;.S?K|zБs ΄{eB8#VMtS=!`AVl,>7Nzrٯe܋_~%1xp%+, ػs r34Ni F$ƳH@m^h~.g9IxTE}W==B\d8zc++>f|?.Ǻ*C1'(cUJ |nT.85WYO*ksOh:SrR J doyzk''ՈTCm.KpE֐{̃:^TS A~0` ٛ*y(AKEY;?t1CkD`ŮBq3,3P^%3"փ6Ȋͱ/Ax4u!כ5 w3/[KtT3KyT4,9JwQ`BpQQ(m!39P[$W5m"MP>+ t(pY%*57 _WN<+'W_Nc17 hT Fkt!{d@iqi / um;@z- g2x=i.vJI+ CUJ=;#`Q?ĪO//kAgޠ~ln0sM]f󎫷F;挨QX` 5/R׋OM^Qytt27x;[vE]',U?]r y>.2` ~; \wSUCT!uzXu.- \+>eEQv1d:0Jϥr@=yEDh_Vp^uQYT]!Vi y0.42ͤ)whM)#Y1 F ;Vz^gȱ'>ƈ^jQ]{R2~'SD¼L1_?ebH[ZОvy%q:v9b :63g{3r);sMP(L`BOW[Apa?C}N0eۄ, ȿH|dN& hLx}y5,f`";/Rc$AlW;&!fM*}hUkv,g񿞸ySm4PZ7la8Av(wN-~P3 DɄBxb1{G%@; f,`᧧m& vbnQm=Rq_Oi;l2n&t)Ѳ ڥn[3W5Q}G@a". !6]Vt%儾Z7r|eaY,ߐ͎fcEfw|T ~Sclelj5Ѷ);髩7[ܠ|]* PP=?88$&C~"}!|j4T->M1ؠ>ǽ 8 & Fsh (zl$P.(˖_ZV앙 >;*~};+>4kۣyK&n Lu?kZ2gZbA3[n'+b.ޅg(ݧ+Y86uLTGe]5~l2(Tλ.ʣk7_qrB&futk&gmEI{jYkkh7i_}kuI}~֨&צV6ARKʌb%:g NFDzS_;8m|OkY/ʎA 4$% @wp9ߗ<_yS)o9UsfelSrǓ\ot3.FrrGb޻ `{v C!bRGk B3̅<&@_ ^B a8`i,a/_VKi W,'txʹVrQYI.|]촡&Sr7M@?/IQ˶CLE6Y|[":F]igl0doН.8@4yg[#R俕rhdD={]8󒗤SNʇ).O*ǩ~l< .WVTpsA Y=K08C@yC@}\'H}d(,T;lp@i %/62t l{nc{l *˼0t:W+c qǕCF:W1!SpX~=$ֈn;vЦ `yvZ- w8@*?[gq;Q|.R}#孭"zm퇠"qA&L=;FXO@~>-@U; &LHszvA[s:KC=2`<7kɨ¬F%ÚD=3B qfaDn7f6%žBN 86k>得l҆h ݶsa`~Q>IGw̄1ILS.>|ID>ҧ^~NO%~,=K*h՝P@ϴU~~7}D(| ?D?e.29`0>J; m_{q!9ɺhƋr SpJp迖XB%vazVc0!ZƠ<|kWühW ˄AcW04% o-{;(+5G >3L6#EyvpqÐ== xH#4fr6|?+$ƻndn tKΥXG'´R(xMHZ!E J|d1=Ax!be?-u{eKddD:Xl @MP\"y4.#. OÈͲ%&ov)tP!7A ^\AF><0*Ns Kh6O3m/g9VӭtJݚR('y[(;(Vwш}׷`;^tqi0Ո_+Ԣ^и2T#r['[滍>b1e\MS7 0% hcBBO?~CP]gM?zq2oP Mn|03r3Y.que%AA󱠄p*`NMUbQŶ9%%>t-EیD>? ?Њz [I@R}-yP;{%mѠPyb߸AC0H%rʁJcd,:b0qSBᐧ^'/9׵*n;f{˜sR."0^wz_M:z>0R^G-{Oyxt v -qdwضq2[&㷌steK̑gQrtM E vp`TVs!Q ~ \&>UBAHW"c+ LB Sn}YdtZ.T@QKGOLU,o0{ "8U6,@-";]UO^ju!pEVYš}z(]ŨVDS(7w HP(vpy݁\/ _Rvb K>aC:B;wǔG3CR1{;S;2!t)ٟ圈iW8pKP&ϓd9mwҥ^J| om ~*a~ WpI~P'IYVa.Y9LrA #`tG!ym5&vd"]QLtM9-@wKr8V#]:v0QV1&e/Ӏ"\2[#7 ye!їsАN ]NqIT?v;sG^f9k\^kQj.a}aFrٓ3$-~.y_ em~23*'-NƓBǬ^Uiwݛi{w8BR GJIL(xW߀vSmF`oʟZAo&NbTԒT|=%n51Q{c&OLT F1K*wMiP?\@}~% e'z59Z`hb>S&n u9FNZV]lu[n.˂8&Ksv_P`ثJi:R*ͣL%U W!&ja ~Iea5yZGe˰?I/: W6w:O6P:CC؅]y~߳WPL@ XOޅUPadkmIL&;_j_턀bsqwBlNgzٕMsNzg=!tj=`m94."PELkcr>߾ҹt#T>O@[1Be&:?Y@TBc@A:h͉Ԛj /w/s6Zgg0`=C*M l"},sr@fkp+ZS@悧ܖ22 Jۺa>XD)gUcqMDn08cq`;̸KV&ke%ON-)kKD`j?~N0sU~Ht;).uex<~}m=0~Ld7Vfn滘>yC!oyw,vT]|k짷< 7_3\ozT&qa=eK<-{ylB4Q'{qڸ 4 *Dcb4L8-Is)+3O'N=xȿ~<43N%^\y} zQ Wt? }~zOp4RAvEX3SͭltFED@O}QkC>),݆CJ[P%7ΰ,:P(lǧj]Mف}Ft;nE#Yv\ 550$߂ (Ģa99??4_02~ҕ*fNʉ8z`E2Cr"4 *|ɨx2B _3e;s;,ա:Szjң%^M=f^~5껿XDd| B*@E; \$2U@nG=كt9j':`غͱ) ab0hm'i ?pүmWy2A!dcr?seY m~8j!;%'Ej78A7Fݐs1\k@zM^'!Nkz5|B_]@ iD7q1HP(vp @SB t_Z}D/l7sJeU> qO h6x ø4 Xhl)Q ?RX@@b1CS8z\x 'mԃ! ! cQn&_֎[ m;D=MPpE?|߹)r @ZZ>E}i3YtT񀮚g0 vQW0@'AWw_ni-FOYa=bC_[]KfY:NR @)+M{A?r.tN՗8:~)7ކv67!`O~ ٺ-8a4e= 8#E]J^1uLe}3tEĤ!<ق5ƵQs+?!{u_zk{͹{r.kGeWek9-h;"Tci,/S!"j*:ǣL2c'S4)Ύ vɛSI4R@=PDf8~OIݴshKI7K˼u٘lykL VSa{)P 㚋 wC/߼<`x%+SEW; yqh?GirBV)U_Pl%`BuHX(; tz$ Xbolnj'Ej[j{ݹՠ-vpԑO:e]ϠCs+;Y/gB-?U-7al;N2D PתΕ UcG*k_NErJ@R6l|]$4vbTB'G1!c@w l!`GBWԵ=9)g1XoJkوAfys_%jxmoq3z~pj h,ï %hܛj>N\US]JZ %ZD<[".  PE@ǿQobaxܵBeͱ46s^ tħ~:|`W&ng0Eo'$X0 (lAA`,VtjY(]eDv9g<-_x`"(Q+i}9zT==}; `oD\&t?E[Cqk;?9lqZ +iJ+A. w[ͯ)6ځk{w'`Cх plr\ϫ xx Z%Fd>]kw߬H:j.:)r+*b,u'LT*.xZJ``;"Bg䕱Jrg^6^YѧQc^gڷѳ~oǂϾr?^[<]п'ŴY&y3pbO*ZL wp&Hv~n6*rL\ Iժs~GgIj/5J0,=wTѿ'#TQQj'_V3 nvN1p.>LNSq&FV!_/725V:Y++O~uL4Tڏ5x6{i c8%Rʴ}Q)9FuYqSi8wFnY=g>Ƶ[_F1c8i>Gʥ?n9yM+ } |97G5o'o֚o6u[a7ؙq(yBhWq&:LtNajz=+3/2oq5m8Yit6+ 5ypDs~ipR?̑Rɉ.s*i, LWau)o vgqp񹖀z/>^gA)ɬ͏N}+}|.?]^8v~Ag̖vMV?KUC面2!-sU[dŽLlc9||olN}UƉ)0鍺=[TD*F_֬e2G^m1tEK/ T?Vw[w0釙# ̢|myt7@`+UӨo}' "T>CZdR)8祜|<;ҟjԵBP?XW|>U s{eܯ橘u5߱ӻZus[M:P; 3sAD@yQBDN7SZzV76.'@?梮}{B7mj9iF6< ^| }۬koy<0uk[/x-}דxS\ya&%=ncnkJ9Vu+lXb|1[1ܪo͕л;gQCSp K`1ߙV| 9;5a  !sكQi\rQ-IgM.zW_]~k8+j#襭gUlu5Hlnȇ?-s >>D]D$c=svLʯJ*5"g },@``4^+Pnytja:l,*v޸韟cpzUP+r pY6Z$uwJ=^t (_g^ 3-0A- ڍ=دJ_W'^G:FXي :z)2-ñv | O@ -z:5j+Z; "W_Z7U Dmew7Lh9EtKSɴ}U-'1N\vh$=]aYyhuca⼦]We{23IV-:֜+rf2q\g|ט29]ЖJqJUdy+@S7۔sgWW-B'}܈=u=̊8b\5G{YAx8%)PItNTX T8 'p/5/LcFJ((IV hD:ςb.HL@ Rlw<͒~vNPEyܔS~yD6j9WV՜0t'V<cѾQ{Ҁ+8 ^Mw\gRV;q6tymP(X 1WW7 ˺%Z򙴨j_*EIԲz,hSb΅!|Nr#zox| ~fQڵG E -6Z]jiΏ%~FUq 6uct4~KHan*/;+?|U 0+{dQOfԖlӎ'z>9f9ki h_ ?O8@D  &MwCv"瘓Mڱŀk|y?WOgn?rQ!ҸP9COLB[ 9mWTGkHPpj_-kl9?K3wVQYAՕ/ֹ"ÔJ/ ̻ ś5F=+/x>wء;N[Y ؟v%/!>wVf^xllc 'F+zRƻ.׬ؗyY4YsY 02.лNI8[nqο!|{P[hC>֚pwr AE ь@0cB1+fY`AD@EE7M߯{we^K}nMwWSN:EVީjn;c=BqQ FT"ůp? s0$c/Ve)┼ g%5W[oG-O8k>,;O໵JfwyjCeqR ]'0 ȝ6oI04-\RZ*&(=~z hxhX' wȋtPLI+o&ۋO~V੧9ϩzn̡^a%f^2*#*6UwMO њ9#\:zs9iԧ}Hqǐ$M@H(W~u5fv 5Ǘf<XB .`c}N/ ](VL5ddWkX`E52o4H"|0I$Fa\S`~ToKW b!#ZI\533u[׺1%>.D`v` AA7Mgt9PF+Ȕ t!^H猏SQqk5-%Nɳ94ɉQW@e|_v0Øv)-F$_M*Ri\k} KL? ou $HqS2v2zd|^djt:n|"?ݬY[#S:_ik-!eQ[ Z: ?f|;3yi [/uV7'ό/henqP,LN_=6+0>>~@.G\ƹ{{}1h1sB@]vw<Z~idW`aAh{?B;H3MI{UxlDrqҿ GMZh~eV;!i\SƮfdXY$&3.1mtZ$b-~_T ”%Pa85]r7k2m,) Yڅ[ :jatf L M?+@cJR$i/a0?al˸7q7uOpV䣉bgA3Dߟ lE5},x2k@|\c|xoHgt3j\LygOyn˴wո rk%`d8"+&㼿Uj *Ve7oTAd7H8ce`y^QGyO޶> l3sAgp _ˆ~(м 7SzKl4VȸOƛ!l[_*f&z-!Q`Xpk+pqrdIHUڷFTw'Uш q1OsFT0; .KxC#OWc\OpP j*^UкAW[(Dr'jCE:qiBy%дmgPa-0AǮ|.9[6xyy_orlz4>~ Hv =G+µZiiꬪsZUf7>ÿ8)بp'. 1Sa4ua0 P@FCϳG(2"\^ 333ɘ="""y}FieXΤR\ D+dXw[h6I~1޵U^Z+SX#w 43 |¿^L,A^kn94w F|77ԛc\4Or3Cќ{D.іZt껴{_x8TJG*{{|G ^(̝5ÇbpXKʖ=E\&?{K) raSXUCpu6ѹ?s@|BqXWYQ^ uQSri8h.lD"Mݏ`(TIk1aHߵij9_ \#3/H-bs2N0\ kOk{355BWGo["o~nK<΅, %P,`;`|m3Y -Ưj/v> _M=VP֪<@yՕ ww , $ m+0x(b8wڗ';wr w~wi}'ON OLş.2RE c PQG}A`C`=v_ket +MAn'$yq~}^`}_6TL8h $ ӥW_5bgɇ@(b->5.r6^BF~[W?/ȧS6ӿO.]FCKP|N`\[?UHi5PȪkx.u5J ֛A'3Ӱ$zt1u>?sNއxW!РH-꿟0tЏP}C0"0`VgwܟNa@/$:8WvvOw wtQ.叩b2*fY-EzV]:Tme{N5˭B^pT"l __#]_Ih?a 廞ʼn~lb)p}@lOU*@y_N.G ZL2?դP}lj$H &lPL. sh & @w(TyY̚Q*=a]TX๖]z:A{>uK\y7M?q*ܞn=~Zui ;okDѨW},=P-.{ 382_ t?Q9}}`͛X7Xc9X07Zd$7j/ӱkY5emt^羶[#*G. ;LF]Ɋg [o@mJƲ@@4Ƴ@ h])yS@'w9ϛKM(_V6R O[( C{oa-굵{x@ \- TF ^sS4qh|;FsxQd:s..zgݷKX%|SlVp@.k@{lz3W;keX]bYނs3ZN#A}ȉ1p^wtN:WBjq כkItׇl`sa>j`{@ū) ` # E_#Co3Vf9g@:h  *!Z:#y~rB!5\Ud|g{rru k'FJ<EKKB# Q~ ő櫫T fp;J۲ҜzCfd# xNc ]c_ۙG8uJL[$7k/kpb i/T0ϡ^Xq]e2W 'r+ꫩ@>-r0B0n(Ze]վ1$qAQ?}ȍ(o(}a@Y=շa ̘OUڹu`n4un6? _s]zQҏ.7O.Gl&[\U#F܍[B;W%.FkVj@n];5 qVV3Y?IPTKk'/aoKωdb2>Łn[ZWh%%կxӴ}ӶM"8\@}ܥIOSA [4)3icP#9w,`lQΛlL[ rt|u#o\fBQB :A0 $`4~t@  <yr{+CSHN !Q́Н;(!#CN}9B:/Olm gFv_tj`WC&oP+v0;D)17>A(Q[![W(E^L0 sJ`}}ئKx.V'޼*dB4 =gtnȧa|a19R15LcG0DzʅUlXQx^<[¥llqז Qk}Șաҕ1ğ9 OK0V({02+W1)_`WawL^{vdG5~19 PC]/ >gi `W߳yӀq@y?݅(pj4pau 'W)g9q1Fh+ʥGnw Gkq1. +.g"BNr֣ - '*e#5Y.̟` ȹ?QD0pk][4h'7=k0͹A4.l|Tviy(_nP.2@6,O9ijm`uu.JT 7+}#c3tRz1XEQŹsC "+爸6 d{j\gA w`ˁ?25Ωbw1ApNtm|[0 @z?H s > nڱ}m/ԛprCiby$~W?k ѥ#`QFW{o.  >bP$]uݞh|#ipdf( PZk/]jf4O#0B@`p9R3K_'4p-~" {nT nΠ0frv^ xn _J;‡lϨhV-'iV-@(D['tƘSLK\RU8"GA|{qs9W+ۨ9`iI!mJͿMLxT^JOmi6f@|{I |1 0o РH7pΛ>^++C`Gl| Cfy@:b^E#R|jbB K/3J`0 +2@ ݏ}Y`=I` U FigKyر*7}gܚ a.2XHg SL&ze\UOc^(‘5~I 0rN6sJ}YXA| ]_hl}t2B/;Ðs.[~~FHH??*oW&?(HsW0@;^ƨ" o=J|/wK¼>k7ORĸxbBB L:MoP"rw'" o`ck}o5KTX ]q㵡/EoO{Pn4幛wY_J{9*ök{N# ^,bL kNn j2PZִ(#ro,e KL~ uգ3\4[y Ahl5#F4Zsc?ّ͎d_=ߓ#Z oA ,LM4WWratv%VcR+,z"5ζ+ ODʽ#*W.-W#H8 ցx{c^NyǞM u4Z {x8R $w@PԮLӨ]J~{_}?} u:9ko|AxuvoDZGZ[747/ y$u@?NK#)C#p55@7} ǸiZh?aa6·vFdsE8_)~R@#_s_h$). .RS`Z4x cpP3ga )88p6gQ_+s+JF -sΧFiֵBqHwM`#9ׄn4 i^-e7M˽W'\`/G+/ 3XHij@\.2Ih]rD+ݤ踇K ݗ:5^9YkR1 N(8|}#,9p W̳+u*gk Pn{/ypX0 k/)C`#E7 ox3)s|ei0 ݑˏ3*eFRRՒ$V3=:i ;&ƨ쇟y;stUB7a8P}FVݍ0v"3AB/`7 lg-> |Zg.R0}zxP`nT>ƨ7d"io0,|:1 O;?8c2fEb\!IrW=.!-u@{N1+],Øx~@g?+!}K{@+h'IGEIxV% ~ꯎ48c}XDy 'k\Fnlvv_?pY|鿂sW]{/HBOl5OBKyɪb^K?och֍V>GsJ߲xm {7S/2hz,Éxj>擛OF#Vbd~YAm):.Sڎ_mmEXo1i֧)#zttƙLvhWHޜ$v^gx9o  oJ/o/VNO!xE:]t\@Ѧ{l3Blxlm˦eӝ$к4{J؋vO q.;$[ϧO-Ȅq Y/QjeD\\m3 N|+g#d>L~bR9oTCNJ}^ Q_u,U}+ :ʯ3k:('>q\wL,-h{/y2\~a5z]+X+ =L/&BY'}㽑qzaw{ t~hqm'pg?Ə~\xA;_nyaO#~,3&ƳH_gCBL@Pw@;KWQ%Psywj_][A+/ ઌqYk-;:{?zqձ>aѯɮmƞ&4l=4$xPマ- hkkqRr= }idžȼ0AtiZ̠ sN.ċqx[*W`wJV[_Vca=aePfs5=~e U&`j%1hXf )S)/ {Bs(#g216˘PTr<)qn|nbΎ4@ǼIwμˀQ&#%M;rϱp%h%h5"X=$R!y{S 0r>/w|`ڔ7$72@-[e%ߦ~SOΦ<Փ?)CQs@ * zGF X'D|PWwXI^@=ícw# {d$vK kP7Q}yF{3Gf\aAjϩ'5;V̜($2cqʂXU+g_O}v/xퟯ3/yCC.B B{p5JaX[5s6toNdzdSk_o|]\7ޘ7٧xv;:造/xQNtA7o -{Saԃ8BG]%x]Ϲ!MCV֮VvO2_ }(0{C= _™\=h[l\ذl 'AGEwoO 51h!?=dC лH.j=зAS9n-'7jq*5O?$^6u:uB D|kE#ї6Di7s\}!|߳ 4pTx %E{}H#P]jݞwxK'J}1GN*/o~dS%Beo^/B93@zC ܟML;ظ]?}BV/tugtY ]oC^alXCBpen>|b6BI?P&tی5'_Wв> yڲ1~wC^BArP"K3u XIO4<:8='@H3jL@R9qUS!h >U}_WSo';7KfoDý-9.0A1qpkq^1#Y`EdO\Ech%_V8=I,L}R8%Cu0t](8Nدs%!晞@;xS !%Iܔ\bkN4DI"t 8^V'sLI*Y3MQN I 5_ ]Rl]մ0qd7vDTkv }]4~Od<{;ٟK1T&j@`Bp4KSN ^OIrM+{k/V(QZhRJ>>p 0FG QB~Гc.ϻIgzoo:`|Eީriׯ6Nxp>d|gs+!|׭!~uvvN$P3s4kM3~s }xzvV2%Q%jQVC6큄9nI0er=U?b}RuZjѼ.<~hT{u(gC3gZAqΙIx 8E)~:Wg/$K:Wag=_;Sw11N__9'ܯ(ژ)^P=\:=[FF.lF7n_{%& b~~z)Jϵ>`' | _y-@>R6Kљ)`5pDx"O#@>oh =\ $. @'<ܾ<ŵ47 |_poi}o}#le hF߶!qj:یmS#~ b4{ "@{J.,}gӽi ߪ<@9ө }-rw`q*yny^] #i29(nTF\,vQ6`;-{n3O_ :@MK_cza`ϋ $nw 5aq#Sb[dolJ4kfDH81+6ڼkj >r2\Rj@窭Bhu9*t97O O)L_jQq=OJO_yY'n{feL_pgX$#v_}B06|dܺ B7 c* 05D olr*467]OIV'>y+hg 4/!zݯ_ŠsPOѣGGߜV`DZ`jqQ~1/?]05O滯 `[X`<:BpNV~!0}"/?R?lgگzߘc~֍EsL;Dk5{&KK k[)uIȤ)|'!>JaӏEYHSHH ll'+O< ԋAG]}8'uPI\5f>ήP_)ɹ.AĆÜ%Cl~r cV\f S|%V?',x\2@f.Gǎ|0({lP}3`unޝ!Z{ ^tR+X$} b)Ԋ-A K|37\6#4GwC~ryG W`!8S9…j-LpV/)F1~cH)L:؁R_G3d.?KB88~^dLgD.l3ߥ3ѳXz>2^|1J][P9RvvYq3t 1q J1_ Ku~: [MEg4%S`^F`@J /Nwǝ1dTY/-X!P"F4A#58#'RccyByQ w A^cV)>Y\AOvjMGN^[#'4yȡn / !49>|x췂(O~1UsK*KY4zG 2-Zyud'wm -&:"~l sp b(9m$;@IDATo,RiEڼQxoKiO&OOҾvb{b9}T l `IȞO!ȹ{Ly}fjso^ ,X@>ua@yȢ 1}a/3FEmM d05E֚W߶:3kZua汙qfgwǕ31nVoͦ1fկH^7d}I'X.#\sNoK3,XW1Fvg YmuFc[PJ`1;+v@a YxʨB8qyy1S |3Z憬x_{vAU?%F6_W*lf}&Ȋӻ{oM`ajyw=M*mmh 苅+M} /؟plЖ.l%^g47&ɷnX?I'DAl/PO ht%}O<6| u>D ?_*:>&JD'Q3ږW;l +!]/Hy%<#Pclޘ -hGn7m+Md!>~GM^svќ )(oc95gj#0N]&|G| 5ZN@y>Xd,4 ;3sƽM( p:Dx@bO_rm>s5f} T0k?yswr.zuhfuƖ!b\b&詝#Y@R)#<|P(̝\8g6h &LJ^$T95୩ֈG.|Y^&7|M= L(0jxc lN;$*C)m;Uu5&ڃ4lQ]YZ.@a^ A =R`]".h .R,e">&lP^Y0*ZL-`0a4[ !Iޛ9xNBc"ᯠzFaB L DMj`d\. GF쫫M~'0[$s9M,;z'ǪjayAԧ0 Σ[& D4ҥSTf] wvnOӺf#SQ؀q_k}E D]FO0&%@yZ X&f޷&Qք3^!QU+=&+9OܳR!J he^VIJHg(O-N/kL_=jA2cxJ 1(T<>S/;j7 5[h,'[|\ -՞sW6՞omT/:.ǯZ*O|dntn.1A۝u*gWiw,8D{N7*]Ey[⁼3`EF&@YcY5H2bLM6N_m@ۃ.Je>I{֥ЋP_m{.) '7}k}92d~U@;=__krI;}sT+ݩ/Sŭ3x+f_`PG|=M e@Q 'q1w9y;;f#ƩZ1/x9lRcrnoJ2~ld,ޙh83 w%.H>C>m;xFN#Hʳ2"j<)3O2fHp(vr.aJ dϜN,Hz]Iʭ!b?'zm@|vIyySd,x}@?>V s]m)>)qdޑG" X-P[C]:POQR}_\&cE[=cl?wF&OUsb:e -k,P "uPl YЏ`0 S`4GitJj=X7?S؀nh}_s3I=OG0$ƍA0{P&zyO)[}߹˻H]Vx!ɼf8H5+` Lp L Hs񭲦IY-. U2_#Rk~MvK$8̼NhWoNrO%\9s Dn@+Hv;KoT8}c|OLΩ26vw&1_~Bi YhFtECLfC@su7Z"bFe˸&"@f\1 `0{x2'Å')hi]AG/ӹR6_$@`L(PV1JɛaEE`mC]+_.VtuҤI>1~k $8I|ɒg%zXw5 E͸cm.(7kys]'x0^U0ۮ0v@x8?G&R>Ǻ,  Uܐ;5PAӺ("=$ #R"mr?4@9 8\cd0jX/ǘB⽲s1@`CBXA(#{ʧW{25]PO{܃gp87{;]g"#py!&Bloq)6pc^> } TSB =O3OC=q]~;<-6؟ w =\cV+X\$ eZ1^/Ʉ{l Ppͮ'at | Q0bg /Gྯr*U_e'svav2#FD:`3Mh/kV{cVTic?N\#^z&*/r @?8L @$_0UocksH̗{[H|z V yֳ)} "-MBh6aBlB}ޡnxj>3N`|ftZ9k8:}K*KkBA9X@_3.&_u䳚·R vlOL]"욮hNZYtvEB_rJdNjY%ޤPĈ MM}ޤzY76xFw7!qe,< x59P(( pƍP>/m,L{>N.B}賹hx9$>?@6 j׏;?h="θ/BM̽2Qo)A1 ȇ }]{{ꭗO 8'"pNE; FƠQ<3n' OGFEES[bנw@8qcu gdp')5Ghen߈~|*!2ڼz3Ge7Q+zM5 0OP|L@y>@wA\u"w>t3~[='kueh;^3?";>F*?8oo_ V՗ښK+x*+h< @&1/+T ?X _-.t)Oqqwts5J҅2rskrݖ;? fO!kx+#Mpa./ 3sͤuŻ:tv lTP1,wMW ly9G}" 0j+ _*#(r}'̓ ;ި,C$%>y~CjmYyo>.Z/OEDq'{P6Z;oat1;c5/6 5g9חtb|nxc wqkQ \Ow`+ Ł}9? LK!y@j~UbhZ`mm˜Ϲ_{}M|w@Ut(a.""(* 6 DA"@.%r|y$sww9sL ^N 'wܳx ? iaaYgܫyL@GDV@zzkby Od~j6={jFQ Ho7RN@<p\kJjmpKZ++%uCԀIV{[H"r ڽyoq"{k|tXNǧ㠦6KqsQq%Ue逜\c\(ry}7rc1bA56^hݶ^t8E^MdU7dCDqb[#d3r3:m 7y<1Az%ՌSĉj·w2O=c0Ek`VN sӮs|oXJ_?ݒk0{· . ×1a+Vm'~3C;C?7x9:_9|t1zn^3pC_|>Oڤ7'(O6Aa+X4{-pGOE>Z?$ىJy|d G7UPh%ᓀ@ HqJaV` ˃óWw+zG6Vw;9IK^( ~rŒREraw ^ɑ~-CL\f9N}dr6G{@,9Ӝ9UVP2> Ð7L=nd]5I`ߎ}1o FZ[kE9;L܇ PQB׮ ßr=[@< 'V@jpg/t显KtTut ]qC"O16k\(W OhexfB#c~iWr4Xo܈* ZJ0Pt j(뺧&.^w0jR*ס/[gG8?|V%$9f#0=Y++"sޱSqxҵ*%R_Ľjs:s~br}^Xz,mܓ*?psA9س5A?. ܁ }NbͺOC,a4 +.G|(Űdb2glU1Ze$zB|0[̭d, +^5Ac*H_SESGt 6:흕-}J+! <2J&t h0k7 HCQF@x 'Al2_wUVNd!IO7/szG'C W hȋȓ}ѕ9 g@.+/:::@@@RNpt+kt&Χ&և7A9jkϫnI0P1Fp*S?F<$ӺޘS.q(jȞf6)$XWuAaٿˡeU Zp=s \Ui+]0EFУQ(*@JAg Jd q$^Z{j)] `YOA3^\G Am%-@qO- D7"9r}.upՏGVl-57q|\_ #v-t`8E8k &[6ߋigbf7es'C$oq]ݟnrf _s xl@V{iΎq{,- whGWYKNxrt0-I߬`z=r/{QMi]on jrT٥Dnbh;75NCj,Fν@PJ(023tT]j +v9Ť&sQݡ=!ʓ~V=zgYFs f\ L:>ཤ)zL S\!`&||*QX+;:B7~:af8ga1iNc9+wc5)łmrf΢*KwVzȡ)7~wG)Dy P~X$Ǯuۼeyp"㚪T:0ǃ1MhlwrÈ;2e7Ϩs G"$u%8߹Qkz ;\)߭%`EE{|,>`cdO6$da[ +)𡺸q[Gݛd%xtƿ@Y3*𱏁"y2Qz6&L(q_WEW+/1RToY!]JW;rԽ-]dy kMʩ1Rކ"qAIK,4V}XoKiPZQr [Sm ?[X1W]0XC'{;̀N*ԋ?m+ZH!<-](K?39w5(hÅ$@Hp:\)#|>Lbc T=N< ȬAdsqS~ ~s0qlPJÊ`CLt] i-iY3=Z,KG niL,T+B/@!cp u,qW'] xd-k Y0kR!~`*;!6h1$zwy\Oxzhysg ݨ,u*#\|DM`7(<Ҟ|pt:((G7)` 5^Ŗ5cSNnSoM˛qtDܖ-M ~==n᭫~(˲޷}s3蠣6s>}EJ(ٿ[Oe|jtW= nHK3G /,Xg>POU쎡9#qߨGWDc Sz[#_.+_/ z೾NOJ4fOB   ]OiV>}pGLC.x:Ē^(#1Z$ gx*5o*pa1W|2lD6ǘxY]iT>p|DqVN#|&x,eNh*d~'Xrb C#1'”۩=UQj{Z2rȩ~1O(] [8ŃS  .|Y- x3<S@EDUVhoNtt[Di"WM`{:PBW\ s"UA񗦬g|}^p\f/@?pP-@1^@| Ś-UL Ȋ5S-Wb}SYH'"`sI:P'Fo B>e/qԉY/¢Z-!P./ڞSiY$`=o.b)(` iJ&nF[4K/ F l|ow>r>EVMpoS))gw;T$/r${ky#e~u,(㯁3=;5:?&nD!y<Sekigߧ$c﫶Dǧ\rrjҲO_ *J{J[ɃjШ?_Q䠎roC;2խvϿϨw~YByG󤼥]s}舭[Q׼>lpdC[HпO?˔tr6kutH3=p?Apv`VAW/e<)4V9O]57f*  ]# =8O IDb#=+gr?lc?`PZ"ե%TcXZ. M*i~A%>8&Ȳg<R,+' ),#ȗ( d h#lO]r_V9Fo;rN[?Op|ɔ cq>oʟuVu8!DE~/np( _r@>(@^W0:( eWT~[yRo7ޥy+N9N c*daVrUjx+ߕ݂F}H]6r)ޣtҏ)+>oq ڱ/2ֿt*$:RuDCJ .mXeuW (F)X+|>'`G/fq@QȮ&8#pKQW3G~Jp+<` b $\wcݵ>w9j,!$xw'g8gV;0sQBF!|̂;vPrpksYo8;: (Xh ~&XF ^Q:bOF`bvG6>deqJw=qމ#{;9 nlsF9~_& j{pN_ZAEjE[:PH/ܳbM.Kq-TS4_V±,DlXDm~Dmj .c=k9pgeS1``L4T Gsc T0@2Pjv>%]se.eʥ/lpH/{ؒbNb3A?rnML*C:P&Ao^JjO݂gZy˕~bop_<$B8TȴwqV~ծGA9YGόhL4m ?>9b{0RgBfW+ uf칳>S9mGWBQo`fbĈs U\Ts{7)7C?S'G$s#o-1ʷ-Gjݑ ix?Ф@#(V!53`eGe䝄<_t.DRJu*-a [kʯOұJ{EQSGZ"ɫʰ (>E}]@Ȧ<_$`U `Bu-E~% = ٳٲ߸欛 >[Yi$gf`Dݿe LEKs<ޓO;c3gq@]X N@&]T8;ɬW>R?Y@ DMzrl N˥}?Ϳ|=_&++wܔE:D> ?$W@r8W+Ep -*WiNw"\љU%E4rk~K(_˺.bQ>r SҽNYJ>h$=ջݼ%?2GJ !!!d-vo{/[j e2[VE5&_vl'/G"0nwO"橩0v'VK?l#c/F6i{kqk1^en#;V/e|Pff qsuڎ.ZSgBhgH}jsxNk2a Qp !5@B PR+q",, G=ZLP^%-wQ͏1#M(|[i)3A.c メ)Ta`q`3-#8?6O &`H^0Ϸq U5+!V2{JO/v}{ѨF"`@G R޷ h@FT=k {G4ա!a "&7Ķ1Z8fgYNE=L[Xhn[gh,i5y5AmZ)51 Ww9Ͷ{P]Q~01'ƞM-M@umF BʜJ}*5X(G5}^ҳC5Qx:\rb,ZC;T./t>2zE9V.U-y?锳:[2S]+(csb;RIi ݏ+eFcS}tm>JO&3 B0/8#}#9­ ]`[k#Q1ZhU*,K/3.v/t`.v(с),SɹOw}=VK./,l3ێ{@}vg9쑻5#r(`\~}!QHZeQ&')320୊h7[Z;HNKa~-0+{\)WeXOƀgW?i[.ǪW> ӯ 0`>ŎN~Nu{._@>Už^}MṖob+ĕ7t/lbO7$@ Ҭ% =.g@=4|̨KzKN?$ }ov(YI4[KKɌ{ɁLzҟu1?RT[7OJ`!ɘAų4t?OЫ>lEX[qzLP]i %B׮6f@aAdSEm(t.*H9۔A/s9)Bz_#Ë@!HYy"v%+oI,,(K+TE ) "=}d܂gǻӛl }3ƶ#slA ٚ_k 9skϑ50*qt,v u`41Ire,d;*|k:)s#:^\@G7P@Cm'8=Jcxi~ mǵ &ӡjcY+Hfxø&뺡΅3Yo1yq-҆buX(5 (O\#+( $W2020ᤐ{e&?l<FFކ S)O 4w˺ܢ5 m]$kl .SeO)cATo~6ԆAyV}ݕ6_ղl (IP?W ͂[T Sz)CAt# g^Zi85 ;xP-Rq9q䒣PfE%efzw.a/&'zbf6z[eo'2QiUsc[N}VU>~i-q\^jtolE;@n5XPvL){ƀZ蟁;kʞXAz{F"OlK$f߯ksLZ '7bt=ytmyZR~>{s {=]S4z g_5tE亥9+ fQf;,ɥ # * J},#,qT~T^<>1뵯Ǘ][dS=τPܵI9{ڟۗoo`|f8qH6cɍ$#$'_[@ `>X|z, ' ̕@f%W35F@9lUh+sE@'ryT;p'YXs6^S8L{vYY qKAa[-Ԗ=2;b)^Y5-L;4,\!&~a])5ҁyJ}oC~unX?)g j܂GrR|[guB/߬~O(%TW@zJD^Ju2fEF86B{cp^*=4Kz/'T|y(>\l~aN|iG{6&߇Xct.|E@^@? \9-"ӸLE.`ׂ}g ,Ml!|O^m-]&T:Dh>T3͞9mꍦըm<ԿjG?wa3;4K!, ~3x: Rd&+'S3J꠯I4r@IDATJ,lvbvѡ *vɵ+%nkD;Qpz&M(W `=|-*YyhR/= ͱ@d\U2Qoۉо@MU/^ "IQ>-Dhrh1u :D \<~<7ު,hZipR^5nklS/g")YoioT$(+ ?,̨J}ͳ=qK]? %mk' nFyu !H{&R<%^R\Dh#8=o%uD@{|D@B"\ abKgRÎmkm{Y$;~ Qq W3|?\jyeVvݰn{ۋ/$܃Wth %_C3̫Q ,-[lv:)|4+h[VS3Ezi5h}w 2R`6 ] 7Qx\F,!{O2+៸$ 9BC?n*[|6^6oD6u 6jdlmW =1A|vnVgNx 2.՟rmgYG*b] ԙڝX3̲D?kMBsl+sU(xeq:|]ZY9DR}#EryRle mjg_`^n!cAj>1>@plߎޗ߽rf(l:.?Es׺bE@JCp[En PuGp i/83(^޾  (j y~B`\?gǬ&@qD P 1O9%ur=gwn>l*yu9%G t& f@Pq<I e'NB_mp:!10A-Cʑ2ۗz"qu|~PWofu!zI>|P-o =Y[̅dGzMk3FϸU.ʵZoũ T`_ /{g+8~N6KytTQY/ieM-aAn$zmx[Dpr1Հ)@I} M1>80sV`=K+s~/Dpj`@(D˰,K}l?ᚂ$#h7_oBM Xj UYtOzYyx mi^w kc+&YhOҾ8 󅬮Y °+MłO _-x7ZΞB:ΨU*G}kkUZqD2JpVO Dw Ç:4]۟C<-']O/*z59 \w\2w0 L &[!fz@[_u3]r{" VnOnWރݑ5BhG;ﻢ_wwe‡Vr톂wŶm5Ys%w1_B#]QI:Fcor ׏i,mM.V=~ m/ 49^QɵR9iǎ璯cu>f+EbXh\œpZrooeYe{WjYz\SO`ۻ]wPԡq>o>>Z]AR2(/Α(P>m0Vg3T oK41}E򘑄=Fz +sFm^/4T(6[E<(f PTp DTxH+}Qg;P|~rÁ!}[x6G7&a**N|$V m$>7 P>i(BrťOLMh6֦g)K P)%B9LR@@prdYge4-"oPlƛ3q[^ W*_@:W `~Osr# kEL\Cg/nVsRdP2[9G&C[1bʙ8+rwP%=L9[I++`X5R@~-8#XKATR9 O{I+xD^,a;4;ѯS~wǥ'D5*/BɶM45̪&3f; @CoFýŸV0JP=¾U@: 56V x_ŀ ]NN%ɱ$CeFn/sb.A=p@#O%QV(}6~ǜ8ǧUEY- $iO֡uq n2pa_'uscm=co_I9daH6_~s8 X(;e =,\V" V> BQ;i; Ye(ڂ!<ǩ*E|_i` w`Skk8w)< C@/\~ q،ЃR~?v'r~_íul[]MK=0zQר`OVseF|<_ Wkz)9؁m2ĭpz78_/襰},Vo]O'fWe0 F/_5_5bmۄH#8' ( ʃ/tpБ7r]u;8B}D[-!an꽳o! |kg @Eڳp& h_W ؊s`p,8I f᣶ 7)[ b$s|WkI>z{z~D3Ԓ]W/`+X!G|w6J&T(p0gH^c3呈LH@* gCs! 1bW5pnd N%^+[C}egӲQo=]n=N6O4YJB~zhdodr>z/P]`|/qBv$i3W@x3W&.lkŸ((}epΡҹK@`Hs]q5=ުkCCK-Ʌ|j/O}//ߑkß'>JK՞ʢp]*+s+VQmyRokG g jtl5܃=muun UNdOdsUrtw&qҫ+OT9%ٽӑo(7_ն|/5}L!?g?1+ hUlU@@15 Yd b4 Pҁ\ ;6}byJU._63q&e>\[w#&4aMڇa 6Y?0B$.{RJpXrT[n)GXm33Ԡ{ 3A;|~=PGj[A3Y2GRMǎwL t|蝹rmv^u ̳>=| vZ7Ƴ&SdG| >BYt5N$Z6Cuŀ[2h7廸S _Ӗ+򜯌"5jJhՃ Uğwpt/mƮ^ώQ}S -?WɃ6ݺƊ~O߮?I=mybZhO=aS< ⟗k Ӕ3^]  Ngҽ\pf G Y[]bvf9撾Y*ʼnߕY W -%Z]OْOzq3mK "_A%6a1s':Л/wc;|o`mNĎ4"H*DQ\3sAߣ)¬٦@4r%LirО6Jl| z9X(z.CFe>IVЕeG64bb# 3 ao^$> xڀ9OO|3Y(+?3no^EùH ܧ~6;̯*Ϫ56g0n ^ nc!$ s\l(@>V[*K Ztƫ'2Fb]3Tj^/:~s!߷3vY ڊED?z`x[Po" \]f>Q!$ 5_pW+ƃ 0pa_ A>m78ރkx3ZS}<n$6Ҩ"̙&^SoyPnk@O}(!-aT 6?ee}g6.;@r!"K_nqSL"n{/# 83@8Ԗv'v& j se=M/@.!-Aߜ0ׅ&5T=;1zaSi^rt,Dɱ1tdXu諦|cX.W^ qTX76hX6ֶqk+P~b z]N9li{HͶO ig-s^0um:_)G;4=۪JCkԯVhEiPlߕCNZ  _EH2_L|c8uqs'?3Bυ W({*ծmOrCґXi2giWek_<)Z5.ïjˀaú?鮃CZ2pDܬU{)u,SO)b.+blA%{?nw+Rn}kx,_U08Li~l{Zx|Av؂G'S>{C$|)Ǧf ^8=NAI~uMVٌ}i6z{S>H()aNz3;v Aa($+>Qb'SЙ񨸓SSXaG ପj_RfbLQ :,mgrCnUUIvo?oB7o~H7H" =AX@?0_$)t30M@p9?(᭡]o҉O IZz5t5X]U,/Qrڌ f`oDH ;:k_wS07R_1)sk %E/ӇGa )sIqB-^! -\P@Dwd B|{|L;(K (Ǣ-d֧pg RpmS˸4U3#1K:j=Wgd>Ւ vy^={uT{W}EpK@.{_F2|EVu6A#ޛA@Ygn ʯ-ӲmA`hwOOvLO&sȩzׄ򫮏!7%_%+z Kf;P{Н+%CmCWlKuwZ9o rVI0c@NT-`旆WN%fHu~0ǥ|>oV;/l Z@?RWE4?{_dKWmdI^˱m赚#Ĥǿ_z<;gW93 :޴<`3t,KmcΨӡpIqqqJYXC.K?! n<_Vc?KGrX 8Q2+$\u, <[ه[a#[1@(Jx0ƖW5K`|4Ḧ>R]_`bN:v cϪUig nd]@05=|Ъ/x6p>[u`uNdrm 4oM5H㹋zzm]%l̥aG@f_Mcktp,\K$2%OFO*K#3/~A#:Br@&nʸ3mZ d쐥^!rI+SG[3ܦN6/u[БP^ sS:_gYRs3 O(OvTT6e$b :~`OՃ<94:|=^zulv#Ẽ U}~%^}b%L}o~\UFR^-'y><\TE(b2AZ`QS`­d/W\`R-aeȉ)03tg(5 9%-9-ˡ% ̇6:첦#k.W G~k~# (9 wZI)Sӳ)N΂y[D7桳@\Jw\J B?r nn?]K8Ęq~؀0T_o|Nf(Z5kgŇ[^# -Υ|D b8^Y[)-xERB񅢖T1$ƏY/8w0  Ph"8\H6=EiO9Z7=IOV9YUF} 2MY$tPkx=T ط  3.QQw+_E;s"*|1Րt Ȼ8L Fs #$7C$g0}>˼V@̳X,8;?O8n'=~mxUUm!й(#Ogt^hJ QWs8b++Gɋ- 73("~3ˠ Ъ H] 0S'/bn99.?wmSik >[AʰRj69F]||"Εtg%y<7iI,O:z۟62 >TuT|6dr!)OT'B?|@v M =\B=Rϴd9d4A_vӤeЉrVA?ypLF#?T% }4segW{x'W;XOX㔏R&LD{/PNeM`c䗌̩gG.@n9/6LvivfZK{f+O |$fM*5? ̺Pߗ~bo:HYU}1(h ; W=N0\h BCyr(WIh "y "TNWt ݍOa?D1!d{u{`ڶOP]*#-prSKm._I )[I}wUksNN QA MAQPAQ@T,6,X(V:* b 9unpmoL;ൕoO_:7f>cXײmy3ԡp[`rfc!h`=+hWM`Z :\F4SGVG[ތ l侟EQ:ۓihDo)E>8NS9u'KA)c)AA0t@A#p\A jaO(6*?SLMiQm?hk .nQ#6ZpAe^\K_Iło |:!yPf "u@V4÷NM6 }٤띌hPUT_Y3r 4^.k/?~B:Vh 4Oa/ɥw[ m?_HUeK-쑑F*㙟d !mL;v4nc?#PIv_|;wu(̫st!G$&pxx,o\}R{4ļ̚F&_4j9nei[#){#b[nݧO)'b@75rm\1]zͱ~o&a܆ٔUKk@,߲jR_v6xI]+]uP6̨0zS??UpbY}/ޝk铝}NM/jsz<9̈\g c'oA9kL3g"nghҕIWo໒d׾׼5#Egg(sVq ls6cYJ|$AcwSӃ,6"+`''IA ^fW=wQ#tF#;:z m/j=>Jn.3|}CƳuGUDƊ$K"E-tlnxar <[Q*’|jsRj]Cl^G_sc gyFԀ!ަ T$z5OС3_ɫ_iZҁ\G'H^^|)ylL\|Jss1''kgé&}Rc: : MWhjWRN5cWϢ_|ʅ6vYNѳ{ 0tuw|4|~{ko濒Y$eCu{n^Q.}2e : -q䭴KߋfzzWOrQ|ގt/F( wl2nfOGK`*Ȑ*^@+BMJֱG:GㅷvL+=c- Y30\Ou ?kO}'#Gb+{f33bﰢv\"lKk%zLAeAF>XNxuT(?⨘eǼ -3oУ*}k^No_ZR3TWxK.IN8v؛q _Ub .KpE]ӗ[餇u77HbF9h9`Z[8>xc?Hǻ:.O5M^AvG?T]'<]P* QQ:/.3&vpb<57= w56biojn^fٹ#QDj|C|i8tɶZ˵aóCi8ߩ*yf*ÏE?bf6̆Znr Aju>*>9etgƷ.%~0SF <#ѱSb1j'լͪRհ?ʟ3[;{فa(#K M4 ׌W7GN~)aǙW{ vt ;cgjM|Dd.]'_`\V SHU2.%c͹vycJ4?4Z @]s+f3xo3-Sgtߒ=ߩwFۤyU{S Sc+y4<S"/uYSSōƌm$̰:f5)1SG.JAiq=Hݧ)oCٿE#⌉ɂ{oÜ W qt)+GAkz> %kIK* {S0[`Ah"c"d0Q&Vǁlt1ϾV&!h](hR# 8S59# g O s2wuDa\`~{)^ n,\߱Ygݫ_!oȹ7.g>?FKgw&vA9(xtk xl<9&qiV 85汗}i 3.67NoGz3bGѴ߱kjz$+=2MQf3%qY" V{7]u#"a`d . *̋ϫ)=.x;e$ѡ9sۈrp&=BY]~|"stwSeC q vzknqڴTh{㝰_n'" jlu7_}n jLf}S`t^t2֒V!T\o2k "fҜ/قeJA9rwo>NȗK:?uG< ݷYr+sGG?zxװ29Ia_t9xd2?fn0takn3Rݔ/{ʹ]GHw.>Y I8OIw qtS뿐#s {$F: 'o]I~aB=|}L~ZwyȻx ޣ :S@X672Ԓif뙔2xv?NQ^;º4Q6ŽX颧|E; [ p6Pbc+>#NK`#J`/CMAGZ A怉:>Gfq1aFj;l`^FVV8ڟٷcW1j#mjhC ͪZzU0 ?t,D G+A֯ۖLE؞`4vi|+s/bI N~|ܛ/Dx-%C3A> {z{Yl6}[ xF, &e--&)FklEߙ>h}nωW7ў[#wF7-=WwQY'gP\ȹYC|#.'>za=#Ad`3pD4{OEQHTZ|y)AC$wj޲!8W1ja& 7 t ~&qr(38P"g m8pAz#eB/_ f&؂߳.ō:r/O0o5j*NpG݉,zJ:zT|kgäj^vr'?*2W<۽r;rv=Vd͝*  Az#gOA8$|4hk#[ZHEN)yY 7-yx@[sySOHzt6Ëo@BeL3] ^4wƻK 2arXb;1tFM߁&%tG'=rLE^Rʻ>t,mL:nԪbm|#%-LAץuNGi8yDyi~țH;+m7\zͦMb8'Np7741Ύ6e@qL)S(|/S}!"Z 6PЯ3*+WOKn5Lg侊Qt5~6<6˹o9zA}foud_==kD~TAFڂ+3u? Hߵ5{Myct*0L?f4Ww{|YKbbjnN-L{Bqz hꄬظ OFs1C܅Q')ǂ>QPM|$p[d9r{zSgXRòoϹYZ 3|mԵoSF9v4fM2m!>I8rIBbH[d<6#vl$E'j_y)!} w@MG{p xt[^);^!> z[)V.A>;7h;nU('zKz2j|0vH E[ + C[J@-*/rR*ɲ)Joݳm~:H'ͅT3&PZK)L8QQ~;cs[( iPp-4wK$[`f;-llM]MP@ J{$C3EP!uh;o.#*!0㾲o6UIۧ=ˬUԘ-k6ὢ`׈-9={q)j9?v`i^5A7V0BUIA ;湂E*ʼnY }&MIS={z n7rwߌlמ{Uۗ?M0-xX-cv //,?<8f+8 }us~W1:# I,kY7;}7%biu# /k#f$/q"px{! Zt6UMT|UBiEi+fI;{`Cr} c 4dr-vU|M${zeV Ԛ.mWA_]kS!ݣ~Qò ٿn7gzf@֑#2$]"\/x$m>SoQQRK,}?7C Ɲip+v=P ?'pO+*ssl-bbo$Xp?1[?Zỏ{W^R|;$'5`!/$CzVl_ᶯ{0ǞTSUP^V]|0;x*i6(e{ڑ>[vK^Oy&sO0E67Q{5D 6a<q.5(W = <{ w{\M!N`o,m{`mՏl7<^͞sN#:n8e.( f 'FP 꽭y6Pz=ۜq|z a쭒k洰K3^y&/eta`F 7 Qη y|SSG3;q/8~36 :J1n(mk?nܑ { V@`SG/s [8t!X".H.fiJ{V{ fռq&R[i=q?L~(ޅ1#״}3P3}jxL\u5qlKy67+`vݝ&?TK8Oj}侯kڼ/M)s-ʷC 2c@N3b/~?g~ |Y;wٽ)s& vZ#uV*hR;)}i;b[iH/ VZkSW=r5̸=t¦WH%'|7qg]X(֟q x~Nkp#{L saTn-x.|QI࿻A5wOW"_8G-W q;O/:TUntѸ |N}7QRo7 $B>^&QUplX#u}nk6Z9փدs||QG؍^[-C.ƖD:u1sヌ'oO 3'K(cә? o .;u MVંK~1NK̎j oY뜥gn ;ua;:y@~{uE yQmY2zF2S gWU8{;EGR+oD[zf?_[_KLAvl)H>޼8$As(H-׫=b Lpc4YG&bǬ~TgjD}hq<<ͤCBR+(kDo[y{UWKҵPx@I֬WعcdE yiA햷[4Sࢢr#qDOb׀[7ysT+ ZɗGrY~~f7=*m@75EC/yNP0OZM2a8[8+mQl^Q{)]|k~h d%q3oD^_L?MqF:rɐ>moHYx;줩֡s">"J^z=V}b5nf6@-v9.x<]@0h'K}= )Ų}vG"H'Ǘ XA>#hnN-7;i(ёlv5[ڇ7)%g@o(vYaA"F<}_ݒ 9Ϳ?`]GCgxAA*糄rw۾FoY2]Ȑdnɡ"-Ƨ'8Q?[pߝ~2iz@?d{WqڂGO+cS.)34>ϟepŎ (Dr7~y<ŏײI?:jhQR.c +6aiDB}IQ,mJRBxv/+;'uk"a^ ǨYtX%D\ObMS\/$%C [̅|zr66jM~kcրrƣ@ϊaGe"ڱSwow[A<.Ɓqp=I+0q }.)}7F;Kw'M8OP^.(_W27=@=TpDzyUW{ 4w/C~* Ծ%=|} :Z?7acML9y*iWn{\ 'N_@`uTRx|K:fy?56,r ߎ㞲o~O8p`qC:z9K$_$6A #uAzDTP= ޝu K?[pշ v>CXO_ =3>Ӟܙ(Pst#y11ɋ̂Nn{Od1FUos}FH lA">f5o >.p??XoiWk#SZ~e[oƞ /I~Kg+r{::0"u踠LB!61Z(nI7NC/{͕\#N%~N?틝ݮ8/Ә)xOO.=JJO|YlnDEu1!џK0ڴw 'P #+8j3Kj 'Z|&sFw:,GO")ԑ5ᅯ!G~,97`gj:ac!әG-";N} A.n!vy +C]@3$oSsw-fSm5/ƥ&"q|HFo LfF q9x`NM \~eGݑw F`Kٽvx3,S줒E~oIoacy9OKWhٙ >^H.3HڵΞihg( ͘sםh~3#H/s0*Qouu)( >Z}U䓓ɟWM4b(k5|1#tӝ<3~'O$53K0yV&K2 # ڵo7\k` ^Su1ȁ2?R3 G n7Sq sAvT`_!kzW})a^D A?J ||aח=[rJ5p;5{ś~ `#$Mrc`(AfOIAot|D>-S~/6>WNJ,zs&?}${関E{n܌`h >݋gr=͡vy xAL o[ P1*.@4Ӎ~? S5J`om%mG ,A}^SDP(U K04ّfH{yZ*I3Su/EsV2.Hov _siPG~dtoNES69đȖz(St~*T%UNuz=LVXtaFwP|epD95(nQWԲk!P i.{Rp$ϻNPs2ul6+{_&{^Bk^c`+I+nS0N3҈,;B\#h_)pm{!yiQ =ܑKyB[Foߏ]}tvc4!Vs:sECŜ{,@g̋Tao5gQ;?xa~j }qvee3u4 tחlj;A |`{"Ot;P4?JàjZKQ.Ml%f@!c7"8}W1%(aAõ"XP_%vY|@L*(nwޔ]^/7#P~#A7.h؃A4m# *N+yB4@j]Kݮʲʪ3XLi{3hZ=ikDkI:nѶdl urJ9TAd[3 L!h)xり (օxfz|%nn } U KO?)&FqCzAf,Ltyұس9ӏ]LW]@ƃSbmsV5Ν[푎EK?`>s=dT;&d5d3|#,0}*yE> ʴLȹ#GG\n;7k pkj>,얓F#SB-E@&R{LCJ&IN['ϼ|<\,P]$TтCWt$xނɰ3V=ܙTl*'2}DA k|ϙ‹>l*v#1WsfVwdor"r@^Ȼ4sA}Ao@|'JLoD~|of)anpﯱɑkBpy5~#Hj{{?nuB)Czw-#Rғm|]q<7[ ;' V|5aɷ3m ;;p ?g xV ?IUb5p!*~ަ_bBug{Ae] u(x[|k>%^Xs}}uP^|kWM2ou|ltybOX@:.ڋoPx=VH NF{W0W j9g9P3yCM{z+iL:|Eq*2z.t1]K\P3Wq!? ("nrض|nmL o*y ! =x0M)*4;4|S;kj_H\s<7Ni{fНBh q@9^ݛRu* t<.Q+|A4A>ZA A5b*BA;6kem%D0A}^.h'QtfjTwHȹ(c67?ΏW Cӫm:֠|fd/E~m~VlO{_fIc؏m_[h i1za5j0Ti@0f";` w-_[B17 K'zwJwqצ}[:.pFq;F8 cZA;VF](ȧ{kE1̓:{@@7+z=*42Nu866ɛQn#ȹ%kUSsZ\?IS,v9/L@,j~$s(7M98* um"}ai(~!tumҗOw 0{[|Z xPKAi_&H:FUuwN UǪ)afv56LfؿӤmBg>93'4Ѿ`9~R(BSeV:w@ mӍfo0]Ս̟3f EbL14|e/s{RźQ+qd$4֫:y?is`oU_w*ԿV Ij>do29B]:&s(DRI3 A3"NG'531])~p y\_YqN5'~w'F%^?ȁBo Io MG?-0F C<]z=??]ϱ'`-ɾX%'߇[?W$}/E,%J~$߽PWDBɵ3 aT~Oj ?m{y ̖WZS{F3^ݍKQ.( L#\ HIY( ] ?/~ֈMN'<ҔjPn9=qyaxzGK'swnഇg* AX1QCޭpn<[@r#YmyީCrf6pFX/>#ަKL0ښMzn">ѿ̠&l;2jw7}[ާE5wq]uکm \ Rl bБJo_H GǥG%0| c3R^nlr&Ã9tr*x{2QC΢NZr)U\f>i"pZ$2@S[k,H?B Os3Lj;"S9lGޫy$ 3KN;^ Cp]m M/f>Ulǝ؄v̋cKX =:@Pr+r{DZ3Zp݄c{ /rM:5:ieQ;zỰи#v7i%._f{uܿtl2\kjF1[s(|`}>ѱKކz iRǟF% ݩIw'owB&Bs.n/7QvA #F#4\м뗂&6;7p_hl#9BOlȀѱᯱFQlXg1NMsiNi}+vx ԩ6UF\9PР*hTS3 9hJ @,X3\_Ɛ&0%@Ʃ_ fڮ̠O0Z:>%  .+*Ԁ OgߌB>1= ”(Zggv߻TߕBi<˦&ۤ˅M8Zh1 y,cyW|eO3Fo֚% _eWQ}aWG-&?nXz9YH{Φ#(@,km=&GZ#P'ؼɿ-{aߨt5=@4n]wN:AF2(_zk--N&n8{D.wڈ fN : QhÇV$0)>W6j bK΢ Mw},6 k1i+)WqEܥŭF8k\i=}1P;g_dO;*=1\7J^˫QQ-~-JIx}//wŮ ʶ0CV;kz>HBo37rV)~Xevv\`9{gDN=eA6H# `*\;4TLg {Z{GnGྫ&J?UPq\!/h (F7 ! |yg0%}e+=` g̍U+/e@ʟ摌O7-; .^O=:?6x>gdy+Hi(((!b`^(p9?eWas,Ae y+NeooD@9nۧ"?c[sx^Y1ؔ#"ϛ 5Kpc0˜1i.fqʛ M)#ֻ73M#?N|5SAF V'4{sP1}i6fΠ{tU.t̒!p{ -h'^;2ZNhmX> ] YP̎ꙇc ^߶$xs Da{Dk : ]E̜g ꛟt ?[kʉQc%C^o+&YPXqrrs\|)s"%ŞQ~'h)Mzu{WS~؜Yג c6UI+Ck ep¡TT)ZQ`a {P:do~=&> =M0n&zH;g}y9j/h|jfU >a]R[{_ESRI*("+6,vm(c(EE+ (  D;ғv!+~`rvgggf٬w}1Ȓy>2 ?/*WzXI{ѫNp'+~]ǁ_HP<ˎߨq+4 54,:% ) x$~N|x54,J:N?k•ʊ"1SZ8o D t㹓c@'/a[tC+?+$h85e&_)#sZ efv6?31#7l=fzJ pLqd2{ʩ@7^`S۞SSv +J+rXZ'1Ls~_*BƵQ/N>= iLܼoinOs<jVh Al8Lwe!Q~\0p1PeA98CYWՕ8!_h{J XKSOGii:U`Svrxoӥ"L -|}n« iv%]ԋ~v? Ia)CӨ|tlw%֝LuϣWR?t:~a#:DŽ笜tK[~rȟ2VQivadnd.md8f["#PZdc<Û.//Sj]m}txWkwr8EA1H|7fk> ˬaE  gcG0.xJ?k= ~k~}=A:.(;.U NR iR8A9%_.>NpJ-A}8K\ɂzAz'|z_V!A| zW&h/|dAWCR30z ($ ?Kn !R~F7<|P>ʧҐQx2ZMWR'Cwlk iC~>-. f7_>I f5.`loֳ .vSAu~`e{v ;/A?k-sIo{iS_?ި /~DFgXl} ]J 08VHQc"T0},+]۩+|a/.ILzP+2i7Qzc|!oW[U%"N}YX<*}պ%a-}.4ҕG[g`?L66ݩ_x #= <160qP|ϘLʲL;qa4c+B@*A~ O*J:F+8xhš-jf6׿D*F-u{<9Nv@)86y| F0,s|Q|~gc7`_,)(W\z5S?*y0QoA>5g?g<|聂i/hڈrtA~DQT?؈ˢm0)v9!) ֦v n*hOBCSr&?FҎ)`VRXr-,0Y-8gS rmoFIؽ}憐b#z-{G%qo,}? nwOu/ ėGG# _]}!vk>"_^qN-;XW;c; tß v.4 ;c#ƜjT ,I/,K|NEܟ) Ε(_w :O z= /`}؏'vѡi_}^α 5|͜ꇔ웤C:) VX@C]3sR~f!(sB=#.?zQ?sFu p~t~$͐?Rpd'- o "x<ʟLGՂ/xvo\:ឃ܎pN%U?,ID#6sBjw٧ݙI8.s w>mIJ;VrL~+;|˫Y:_K0P>Y $Ǿ1jv A-:9pzlч? (V A~;E"S~V T%J;  & f^{ʑgwdj#(hAx ~<}s A!#ȯ!ae,IGpJMx=-& ܛ+ӮT@@Ւ-|,yUbAV]8s>'rhB+jDZ9==f ̀3Z8(UݘR xf£т|IY!T7٥yS o :f{Ұ]>#І~Y0nUi>P#1=KE~c}ql{S_~ J=k:VAjL]'ĻD)(w}+qԃ3#5Ds t++Q~¿Lv]LC6Mg7]>%~If/Ova ` 8Xsmx=găzl\u{`SS}g[#xmvPL=;z,>"^S,qKp tYzl­6TH~#roк#XSk݇\o;_= 3`u/ݩ'F Ͳ[\-5^kڪYԥ}VJo {y kѡef$bԣSbn&n~K7 ;C'OcDT`=AU]T~\'++ ڽNPyU}rgt&tԡn3g$'ȧϛ[yek9hl(,<_?a֭K3) | |e[<* vn䉖. k8 (HW 4+k<[% ~$(O5Q.k l0Z7$/ЁG:6VMgdb||5v1Hg&uuR}F|XĮ1_sy+6_gf I;׍IK8`)f%Vmz CUa'e2;Gz#>Lo\83aqj5ٓgt?PX>g +A|DTjvfw>;SLbE_+FбNusl*ldp1Ar`/XAOGd(FjkMŜ<6ξn;w |T<crȽ]v=xf>݂!wIܐcϱ]Y럒--)G)/G 9_iF"{ 0f` :h,%I-x2sz+%+[tA4:QmslejSs\l b!ʕ~]Ag /lL>V=A;^xG}]Y/.v]A>E0'h~|"[!g {[TֳCTg#_Wfzui|Y0i7)w] ~;o| _(UnR <87\ԝ=zF>Q&BzrI5 0"Oӿ [Q:jĊՑI3^=+Nl3\)͹%g ﷂy&lI|o 0d<2͢ffby}{c{ib^^Ghb5-J=öp4 A oUU QbPTbjYM}yh>.g<|O,𚋿 ̃n9nӄ)~Hp9yt>pBҷ^8A<<]%3# ~ILeƿL:[NťKJܫ,{Clp wϟ2reśz ؤi9ʬ*;LYa$x%OHcP8[:Z[z7u.3Ɩ1^{{"t >-*qԂYUze5_#5QaBl+$:( %vө-5V՚qnj;xh4òZܰsC~1᮴(O`7ցkTƚ6WAw F6r{g=[>&uLz&BwrNwoA}V`'p0ہv KX)rs<\0 q8_$E{iڟQeV&?T5c%gDx;[u52PiY_-c@~}</؟k˓3!A.zgm#xHН5ft~J-iODhKGҮqy;k%';LNE3d;4y{]+³ǴscY nIZ~{E> OI-}7wv;q5 ;r]Hz]nB{8WHYǟnwxɂP7:c̊.P(m/Wczʯ'J|5c3T%ê ]HoZi GLiw5bKW }ŽHTRϡ|mu\;;:A8g;^~%Y?Mоt'O Y(Z %?‚s=OXC{Hp  dX=;-Ac'#0A@ -6}]CAF4~L4A9{Ay$p32<v?_ !W|a?e gّKhf-+v~A4eiGmi]#z\p~A7*渾ݍ~822\8':S4v+}Bϴ:9Q\W/I.w_85`r*k@к/ij*'I%|2TQDc:ff%wS='N {~%nmw/湊/Y@+=he. Ӓ_58;ʘLR'(W% @²N8]P~/:ΙuΤ% (,+2ո#W[Ы̢ӊ/ߤ< e-׶8ķ|߯yn6=<4G qޔDW4^M겛%{ FP۱EPZ=y~nFsHK84p 7/B'L~K>\838 AW,AoX?q=MNlٓZPӤ ҕ?ef!Ycz#-Y{R/=zn>0iu?5%3;V{|c֤ke'w*uHoŇ<"xn&;sH ![mO$C0`YtjlKteC ;cWx_h,Hif鈚-f< Pt;`m+h/ * =#q+ 8ҼcG+Z0Az(lwI3~Wf;) x84C綻 @>X" F1 _yp!HP[%& m;aY# oh", ²$ 3 G%AP~ 06:*Jsݗ_7'z |pA}~.@-. ~56&{Vgun?O6+ O1J%2Uᨠ:6C`l)'XWʢ4 v2jIvwkR D_+:Ϋg[+Mv|OHMQA{ %NFq=nDUjL8?t+N/D-0b !>?G)αK8xh_6۵ԋ_{#~/xG1 Z%N~Gn&cWFٖ?͒7?~f 9BN2'pA>T,;P0w3Ry8sE?%ADC[QDDh[ɖ+4AsACf^nl޿ԳP+6sK(5N|׻rD*g ]ԔSN"e͓3IZK5JDV1#?4v3Ӄޭշ ,ڸN(ǻ&wU+_ K |*H%fh 6M1WLx=sH`4!P:\j#ˍRi)j>|[ZC{${;>3yJ#8*Sj%gߗ&Xo3Z7NMYjqs~&e~L>owq8%S荵GpXk_6ZvߝD͉)XvxHv[ĥ 1D̛ߦvmp\2!m?j? 8:xhP7G 0[AŦS?D׊?#f,SAC`t?tX~JKo+[VmvǴGִWwV-$WLpTuYZe_&f U'( } &*~wB9ŘD3;q9{CF֊OkIJڠL_ 3!k|U+ڏ%Y:P&J|.ew{Ay% Kr.~%uxAp o%7x+| ,/~Y+ .i~vG2+F%t -6 `9Ip߬t鎽d[9?i,VYAp"A;ܶ|sӫMTT՘7]:#ƒ@*x2SdA3^A 簠Q!-絲ck#XXOutAxw>B"( \a|*XB qGS k2kJ?%?3lD<êm+*§zf+us섢RM_`VRo7mKL3d5WKhM ڒCLP\&xn=#]%<"bU2=ޚ9@wS 3 MgF{Qu\/d B*/$.CQّc@PS@IKشDf.p(?O]%hxH#`~BP?(݂Df.bQq2K'xNݨ)6y]@ |ǣ&{Ӏo/3Tğ BVv+ /V pjkI:Ո<#vOUǗ֥6I$=ZI~;N EJhJ=V秫caPnrsW̌1S޲u&gf݉j~'?K[f);ç%St)Evi5׆>`½CdsFݍbn.O:̎Qfl;V㦂?ؿ悚 أuC߄Ŭ!%?.vtD`;B*ͱD,.h. ݣԿAϺ ^_{x }d Ay@`/{aR%AGA~LT?bM*CpѬi- 6}#x5_~xkRA-s -4k%Æ oK6=ūJ.>e=ɾ9q%֯L7KqR0PPCi/(΂ziA} cjuxbC_V3Qy Xg ?1!&F(wc؎csY>?ܹ"{3 _I!BM2t%mۊ?۔ S`x([[Rnbb,ۃGB ;XP:Ŧ6,%"Z2K@s_4L՜~OGt܎{abPR7:e~Tl@Ny[W,(tc3 g CW vt?p%%ХJpj=[#3Z xzTuDKX4_Eot,-+Qnn6\* '1;]x{r/+ -֍pm&CЅ{߹]@IDAT##\{05|hq vsBI_$+ ow4gӗ܀]r}qn{"鿧NSlB*t3oԶJ52,_nqHcZ:Kn+M-\6$B?]Dʭk ;uTNWl:<M|){EG^:gˮ76)&{f5ɷl>?"٭Gd'"sv KL4Xfn1jT6 ƽx I qd.2oo8@@l"H'=RkW`b}I`/O8cWV4tL jF0B;JЁ,?^P?g FG v AA([f(۫RAsS‚A#dukVYMz.PP^Fϋ?\Ɨ0oq Z^l/Vn p??.W<)X½䧡em (YVbl_Ў@JQwrA;TP$O/j]A ^=6Nmy_ȵ!r AD`ͱ&O:K0:{N2>+<;bb v%`gk:jUiuZW>ǃ{cl|8;-AhxG9K?M+vA3CG~o?4֏8uF>g6#H: ]b|A8l/UB/4T{ *¸ڌmf@&*x\cV}/V{3v-ϟk=rca7 =.qbmKSnW;PQmGEpS/sf 2gkn}A9PE@ǭ뾖ҿ^!X8XбQ1K+1+HϾVP1v\_$Vo@KMnxwtx7c MCHCE DlִZd {->Ȼ"|Z v}D̵3(/qZ:Pw!s1k=k W'xvi- |8]ެ<1 ^-4Zw`e} }?,}}A !Yv{ 3qݻp7飭O-VwR>ok}_uuc4O;`z+ ^sB%Ow'+sfU;i%+0wn]bR~5]ch)Ĥ"`u7z&NF,bͽd7/ ٩wh&tl~_7 ޻;U@*cqv9P˚E{hæTF^="N9XzپKc=Z++n߱uMʑ*=Gp"+r/O-05`/1.Ës ڛs9RI{nx_wc-(Yxd _m&G\t|c&V`<"x[N{m7*kѧ '=J~? (ww4zo'Y<[SkvzfGw:Ou$)< ke <̣~6MЯ(i4.Ω206'&hY_:V#qMl`'6Uல=Z[H @Sʐ 2FKa8skYho3:qy5X[J̝œ^J&{߸t^%hO̘*zyXFWrXt\ @~$sG 6=s+%ٿXϩ{B.zPS A)j|7_=I)O _tx.<֣|/;6 OY,g{客+KXNj39\V-HgZƣtÆ$7 $_ )T`^~Tϵ&'.xm @ +2bݭ-Xi+;w;z}i}`W2"(-koJ]w fӄeuxfFZfP!ϑ{s=Xas=K"HVtߔ?^- bƿ-hH/?}ޛ`Ų8?N[n*N0#H)L}2ɱ4oDb(|P$'2<凌~RtG(xW̔)kI%=K1Boi/6K-a>*̻z 2éh_}!&>ۻ =A9%~||M^m[*Ժa{E%ȇ?V[;tF3 7h L_r^Zz/8$=/^ReNxH}=\h=)t%/dQB'{g_) 9Lkttj%. j$wmme9^Dn<3JTvM+}E0?֫$}ed~TF3p 3>O (__ln3WRv='cg':y'.Axκ VQ{fqCf OбᐻsQZGG%<@CP;ܙ mo z} }¼uGE۰ơ+bAx$˶+n?ԟ~^O`qsӂIf_X:z-˭W.dJo%}Ծ H}-Ƚ~_09ًyEo K;!僥H\BY$ܥ٬]5 a58BviW$(Xvu#5; q|$4*^vown>,+eǿufvR|e!R 0ˎ7+#l_lãCC)/ /T Ky)%k@CzM5$/b QP(5Қv)9B @鈙;w~ʭ.]P'[v0J;\>?#M BC3c̄Û kG4[j]v+XSf`3i2ڔv.{z~n}[ ) {nf޾u%DluhÙAn?+qzb e++ 㮰'*rKټ1%@yAഢ=reG\՘~lA@Y{:0N [c BNs&vi(4%6}``t/AM$!n221'a5@td j:qmnNCyF^w/k'QL"|T{&lXzBRLO@t'?O{z?kn.(wA-vԭz@L~QkA.΂4_Qf`  t%nvOk\qt>O.dNfS!c{o1I :~O݆^ +uq\(xaCR< ^@5zY- B昬dtɑwdL/VvHMO$MٲWe,s5ͳ@&O餕z\qft%J63rSB,3Ed[_RnN~$y_,xJQwt%]&9ʜ0qW3_ ~u.Nd~kQxTlc+#QlOF􀁎O {\Tٷsh <}  i`A+ym=|6~6P6k#JAH2SaRg?!]W7RKoG"bYR%XG~/uqIMW`fn)_gk-nLWGRg}ÙqXyۯ;qʮJ~*t?1&}2Ɲ4-U;`'|2U/@,dWC7 ?TP%?:JA&h|NFPODjcڗP50/:(%VT &1۳- mWڼl.[+Kұ_42eh#Nߕ]$mr\Ϥmf:pyΩO='ۺ?rȴey<5^y%u=8Kb3sʜgˎ^h%{Rϟ="eMtG62~y~i :6O bK‡=}!f+ ,U6?_O[ɠSxGOSuo;Qj\.hw\֣C8zh[u?O<[Xi A\P+&6tԧq %<9%-+5Cx+?@A)DECkND}k+=$62ڣkz1 0i?pꪅ)_000u'@ߛ 7FQvjz5GaAiy{l9V%oO' ;FGܙ[C\fyѴ'ShP[K6xVe%r:h;$=+-+C 6> 4*wKҺq?';DC KP7{84AG ݎðo;>ST}9=c4{.}%Pf$GVרPSC2s!Y:Dv jy7o?D<ƔZEޒWoJ k!BXtɉsy 4}-;,se3G@;@|L!dG?dOK.{3h4 dV8F5p3? r˔A~!"JՉ?w{Lgcn-aٯb}{}(WC!,xno)-  \{^EѶS@ht& bE]QA,(v{aNJ QPwғS=A:W2gNyd "(σd,y`ƀ;'~6ﲦS pS\jԯ^TG-قhn/(-/N][&vk&^ւt3F{ jxA-r|"yQP$~>]-xIo$*t$pI˪O ${ 6<چ瞗;r ]as >)/#1p͛ȡ7diSTE8#!+/܆}$.vuw*vch?{Dfµ7e5„>ԗCŦT쵸Q9OszH ͟Z5]NA1޾@l{LlhM7"AX%[kC'9Yo6Kp ^<Zo?%#g >$ڄawoUtwOLηZX!ojI6͂r2Aa`־g"xp+UGq8?h *%/2G=泺:;,VcT Iz{PѦUIX %kqt{r;E#v MJ]QN~_~h.G[p5S'הV&<֌_CCzP,&ʲ?8Y~`mߡ CUP:/ӛ ⳯uՔxx!_՝ģu%I8;;@şt@zr:zx@ÐgI!$jD4j[/X(_/*yY&#Kf(͏5#Daz/yOkAS 0f[JJ .JTԖݏn׫J݆}2}0'}ľñyMg(+W/y+ϝb)\=wij(w@>OpSzRmK \r&0g̹|،h,Yu&Oi1"6tw@'(k 3w Nnt"ۢC[@(^P?$xoh=>n x 1=xL$~B&p-lsw\ S.I YҀ?bF Կ5W7C!ObԙعS$IB0{B=plͶ(9թ$\06ۊpb˵U{4dC|WSKBؠ^ٷH Lx)K[wFJC'փII}_5sXK~Sn<F %sa%=mG$!˾tϩ~kd\{;6+0s?r87Hbu?ؾOક1:AC7Mqt]\ \*]'g7GΏtʡݿ-rHP $6*s *H=yNv1I|g%|TPz,xS#ۏIWP/(.w)&' tuAłg w1-;ֶ ]$m#A:Hb^:&<5h9=E>5#=2 R:z>^cFjTm]CF{<)@z"_f\V}C@p (;F w鲃H0 *l6to cUhnuO27}ۂtqX`vR[#i1EssO\TTyqdBAP0td\p-Ьxh~-,,. PMz(݊<0]+GJT$#W<˃lcY26˒FijQ2=Ls̲ J\M|J0t6eYOS5f;?|j!cB_'0!DE_hN«\_daEL,; wW͉]i^\w{~W.v3O c X+ 0Yz}k)"fg)(i0JL=V+ɱsJG]s=:vU1ǗPH޲HWLS)REwޠ XX/+SC\6n<Firg\5okbO|Cņ^eo7 `}9l`3C<,A)ʽNB/ ?P~_;6\\ o;4#LBA;C3X୻6LΎ A"o+Y`WywJ6a;ܲ*$`3V (~gac2ZxZ}Vx>.>oVx3oݴ3vWOUGj I ýapKHC}6b40WCs}sd_:\Ew&sG ro] [ ~](r@Q`W7% =YAx+zn;(@yYKAEOp| xq1/9;@R^R"aGsS4 ?4Osfk++l#cbdM *=fJy+݊ڼ ׭ -^#Y{Ҡc^Vs,)w2=,42/!<.G vL{?q}܂ԲG-F|hsX|Us*ڻ^ZYݍ-r^[G07b=*;!5)\ʡܤ#MJh$1O0;G0⻳T;>Y9}76PjQ}5ə`]g N%,; "Y٠Svctc'G@?׏*?F\A4vqEsj"Jbg.zN¿xd~M֔?D/~nU|zuo=Z` VbM{R NvT sEAtĆ'29*A}ClS x -LSrS 4kGfThy0$?_|WPyՓ{L&`W$0t0c[ւʪ@^)(G և(j)޴/z2FZ:oD14]Af'Ρ:)fU끟uCx0zit?L%}qjNG!E;ě.6vڣmV"r)A 49D\ n KC-Ή܏`}LfWji!Am̨N=q ZbcP8tL=B[}-d΂o' `CɂK-+}FhHdI/A ]9eySqnЮ΢2%l ^ mgm%oHwGb ;ʜlSJ ={HG7nx&oom#4Dj 쇨.Epl#4,P|D%Y#kT۫4Cy=::EH"ߓWX2=pM U͜^N=eIw;kߝMM{_.rYe98&H^?r+3Szٚ˜V` o[QMvw> =:rCӯ_yf)I"fNb Tmgcn]\G`D82Gvɀ7)ulo zr4 P!WR/5 qJn+U O^`?wJEP^/z 䕂@`-PaN-x&u t뼖wwʭo3?|8xvn->o A_pȫb1Vc/P lZeW>(&h #zwA9 ex$;m cu'Kp~XMA-&6 vVBE R$FGGSnU͉,F>+oiESL.y禾SOJ_bO5FR7f?h>bhHrYǟQ[]͜7"U J(_.~Z6Rl УO $Ē޼EpX :xq̙T_Ml{%8YﻹyUk5լ1~{P ^)JStAu3'8PPgT }C/ݧdR  P<TX{vgT}­=ژYrS(OVV,nhYmofy ?ũo ,)~"L>̛ޒW'N?iz7ڭs>Ҷ7c?K=Lp@"W(xÛl DET3Ka0w[{ ٓghҀ8J.+?GVVuX{'&jd]DS/ 3@;Ψ/sOvʁ!!VTwQNQLI`M6 #5xZ4/_T'et,SO-zs*} 2+k 87 ) H!#|wX'HTα,\tsS1)ooAJnU38L*@l_ !M޿zxC +łF;l`SoSkA6x^%;;ONwZ|A~0fn ؎a)w 䡓M1=A c˜r0oG ~j|w gA;NoMz졆]ڰ{^SGdR]lŌ($>NT-|!R_5UHMnOQ*cxO Gc  &p KcAG 5xn_y D)8„t"riR ȴ=ُKL#v(b7I M*㱶gB~WaCb*;}!m]A„("lPp0P[*";)MQƅB >dPLϨF̔O_~]/&~YL;w.'kuK  }g`nͷTOje&xf_1*{娕<0_]j /D6;8n*?omF kDH;aX^CQ]0b|/i_83GzD B{9f vل?) 1`Ģel@l޸ A=ؼ÷T Mاп1;LU{[[%=kL+;3Ӱ;59c#hrdtp5KIQAdA!wK8n+c~Ph_/ٹ˜[`/JJAb BCWYD~A xɧ|Y 8H6[^jvoxC6W 7Sp9LIu=.s([ae,7L0wEA{{P4eӔGC;/]f̐E3ޫ13Z2+u}iNoMϢqaҩyVL_CI Ԁ:{3k$1YeOp 1*Jss:!2wu Z)4"J#Zy8|"Z/uFxm ͋4)h3†Lrr~8Sƨ5iζNS3"ͧsoxʈ2Ra-5{. >}uL@IDAToV/;1V5J}M}hd\_s3˶cRّc?:6k;{s7?o<E<>zՑw}Rޝm/=GUb n L(!`P,܇yr=N*q .VtϮw@X# %*ARvJƖzC)4TO|Φ.P N@ {?ŀ`9:E OλB|ƕ}7WPo e.T˹3rSr{@~Cy3BjvOaLb@[1w()p`-}ݩcBXAzU[in{i)Msz/gSus{NLMqx=F{V-R5vm25[j1~z9G-u Gxل yJlB|k\TEqJt> ۷j|>\Yys^`sPnF'C?D0oC﹛%m^l| 4;0SC8sp#AK)p `Xor *﹞"Vr{]!( wAi!C͡/!V =UA:DC4R^C-cS 9fZʾ6iVo0;l*Ѳ ?n\j )ɫrY?O _\VB}۔c0?O|LkonU}xguՍt;sٜW&ݟRܡ}#T3h5N:y1N@A:]{z3h`|R\\VӉxlXjz od'̨.i\R"reF˃dR8#=5_񼶔yN<]*5Xe PW#6$ YD |nbQ 7{Sd( ɲ֑08F1$O u4ФL[e?.?2O3c'0>˺Sv"Lq|ʁ#Z19qRgp?<ضO:wFA֋rrT,}к˺ W]Vk찖{,T`_* wpFl yNdA,T(MPsleTȻɂ|s؊hF&̖x%VA*LيG쾕$ |j(mAz^pjTkcyʣ;OGAx^sw(M ?M<. J tri_WsYǮB>+DPGDi'(nZLP鵚,(ji헪˜N-@~>a-G([p׭sڗU_qE谊8 M1m Q{!r:=o`z-[QJx׌{ [k}`B7 ʃkګGe99Rf""@F]HO,}|$'='qU9wq?y@d ۵cksM<~4[Ё'hx=-9U0>AF;[^衂pvxo! @8_#s1tM`h[A*WLy#*_&#_#H'MG?]wϞk2S^zGPQPEh߶|eN*~@EM9CE76K'X_@wU7Ӝ#][gk{l*#؄XX *I%\Ҹ7R|#L0IP?*( abhXתMk4,lCǓ8pe4=)bSnZ5U (LNǟزRxggv)`[m-Ҩy ךRSjꡧ|/7/m*)ZNf4Ʒʙn.IX㔖 .Z*Qs,%a_rҕQœIҴ-R ao/6Lj_ϰr7 CP0D|Z::^_{ގS`OSz z{ r̼c\Sߖ 'm^@lAr@q6G_Ć7kp !wϽ"n[Z exmߕ` PHb4#L]AWS3JXЮxR_[l̓v^ylz@ m,h8MQ܁ ߭kA>SP/(#% U1M 1O.լ Ԏ7M*z͠+~õK>@C}NO(VoM`أKH/De9~zrwUz gZ٩7μLz`H8v=$FK+yĪe9?;EOc؛iќgO"#Hx SD`ȯ&B Pt4Ȼ m)Q!BR!XD3ai *%ނy-GZ4TCv3Gs3R" 1nu 5I3uf C -ST{Qᦶ*Oh86ron>E9d>7)Ev`{ 3> EMw0]l^kcolA鈪𧱀UK{!,5=}}o/sƒ n{w ޯ( >{8o᯴ dgv~B{# } > bX_\At?Gw:Q%? r{ZleE'-λyؚpZN?.!Ipg+AmRֆ:R`"xɂ`J ͑3I!8~X0n?M1cMx`%}F W|'>b+"]r rId1zѷ?UPPϟr?륱8}E|I|% ¿~!Lu{FLr@.#שg9Ic$ntRiJWr NF?M >L4<:OY|x+ZYLIKO݂w4# P{a*l-$!&0Hsh>!ha̵99 qo_{oWei% n|z~|3 2 CzS#*"t{J|SwTOj }ڃ.SiULb#Av!(SV]Ʀ.c!O*rP3W>9os]ž&VMڠ"ݕ ӣ}q m6Kr#~N.c3l` WZ ]jˬ9H[C~%SAb>is>Y'  X|Z6wODPfJ⹤;XJ|Gg`:I T]3n_?(!9|7\{۬2Ww/ژ4q'E1FD畝0+ ߅Κ6w"77~d=L \UHױ%.(){NŲɧ\bP'o~П`9u}cBvP|Ұ "ȎR%]h&y > $x?DCs@Qo]{_o 'n]>o&@*;' F LuP9,r1M[:w(ܣwn:)5s(wb]/PM(rwT鎠5&H,`"Ujn \{`%)aL`A-NݱA#xa!ĦFý|a[sX$\9~nhBxejwڥiƝt@@lE^tD }>, Q.ߞ{ErBs-grP{y A6=L05Vm !\'x3&۝3-buBW P*QTs/u(h5aosƫ!9Oaʎ4dP"AК9p Żָj/H7 4 uA7DZHtwsͦ2ΰ>lksh2Ff'd{u$_WG̹1ZJx~[&_hm_QyDEEGmX'1\xlR 3!\Y!m$SX5##t;WrTq+xX{ *Ÿ& ^ykIXiLc#E(Zuy_e5 "`hWGAiU 4H  wi&"Ͷ)/LJ[ݝ*AoVZ `wGi&$>ro+;#&.=fMzE-GaG縿7L WgJI+NUӓLb_J3qfD˪.:-Ivtb/wOco/]ߍo(:.bCkz0ֿ׌rגVaZ50 mE6lwSܼjs4t9yD4zJ. #o#R ) 솽^7]L dxɾdJ_kZ=^E:\s)ǓK'xAyx:P,Y<53$m\P7,y^n_J{ESK%z\;p>^`Q>^*A|CsxvZܸLR}y2ذB3wMd|^ ϩyjW]~o+N߅O1rLn ;g B0WWvK]eW=˓1/r|2g?N3̽Rov< BABS,Qo}\ *hp% wgo;[G٪#Oc:K -NP?PhAz&xsRez =|!(3ns9xC1I(((k ^b 0;9A93HP?8aw߰1А <n;9$HP> ߅ۼl?x8ꕵO? jHAwO)a̩/ c,tJn( S .ٯz-ܟf)i~"ZSG.fl-9¿٧mW./-pWA6W bG;xGc>;$vHt % ?/;p)<;Qs+u ;s07`sgv_ *:*:V' i=Gܿ1ūX:~ju5 >@K K8)}|Sy M | wβsxTx87@/Md ~  7sj-g1+'@f 4F 6SilS#XKxGPtsͽs@)0fϣhT;V{ Tv*T@ל1sG,Kvᗔˆ<@zњ_3ܜm ,~]PP/&RzŦŰcGFrQ,Cw\T2q0 *ē`.o+pBgĕ VO׊VO;fNNx~:ǗP5gCw"`OP>E<~ee?'eYW?K7S&R>.A{? ]YDU->8`bo|VUCd4mGȣ]W&IǸ'A7iSNbg7(0L!A⍦UT -j9 #'ʮLhu[{踠J/K=,;,7s1ƴKDc^w==Xk4xgi ܾ덵!A?-a` [;-7<~dA~~^]Ou0$(ӯHλ{:Ӌ?7%"cܽ 䊿}b~Ag|&‚a|8;k16 ~I@zSP >A~/F w%& 䮣k8 r (P/YYh\cS\[?鋽cz]SHdb/]% Vྛ?v!*7bCA@ wgo j[ṭlL̹?aOGP\Gx.)h!l-(q h[Iܷ ˿7T9*hGNhIEP@6(m8dwW^OBA ܞ&|3OPp{&P*(4Zς ]>B]9`ImdfcعΎa6Cm\NjoT$OhEgPˉBOi֤\i=mPva?>h<N֋iKS/YT:=EߖP=6^0T\A%vJ?To]5 W|Jo,Ѱ?N'_xNy QA~0fw[Z .Z΁h /mvCb2= P,|Z,45Gsn W d2݇SgE6 ,e(nL$I͛Si UQ7Cޑm7^nZ.)W)i؟m( j^ .wpz/,{]>%^08${ޝEԋܛ%.n%=kk1밾7vR$ݹVǿfB? A3O0P9;)zՏXA; A~PpJ FBP~I@qWk_R w1忦Fv7y@^- 1Ћg Ŋ;0w>. !-XDp~A>LYpfq(DXo[s}=ϰnb-n}MhAz^l\6t#9U^oD]l?[|jU_Y x>ڂ@ cRAzM/+z p e9;4l:UK`J?4: ;'W`@ױc(}%X01* z!@_WjOqU ZʯhQܠVl*B#|(ۿt&=# q k-{t0 i5>*xSf\T'u}AC22nvkG*۝HP>^Ś,þm-Q 260s_(ʞ<,.ϙ+2AϩjUcR9 n[v7y.!y-,klZ6G8ykk8_c¡z W yAl'Ez.p{ ^r#J3qȀv?G : l1!P bmmdA7J3o߬8t@DAz!Q`zKd>-HM,oħݧ1ܹꂉq YbC{ })`dwPPK :;m«mx+ٸ-`ry GP^&NAnU̿{OJ!ſ(p7k=1{1`?wnIyAzpO[\h]p~)౹#T]sv7r`sϫ^xeB #I3`Dp@| p ¹:^GĿH[p=<:Η zZѼ @፸RM^d]`y(WVh`$]<,WtvT xQD#eܜf?(&؅6 Kܷ摼 I?;*%WB׵o\8PLr̤$Η| gG&Nq1^;kHi;'s}Q_\Fҁ\T#"K8aҿHXNne QZ#/h;NFL}Y~c *i=4Qwm& M6{`;aS =IChVԇ飲RhϩWjN񟲣۝dsQg=JsyIX# .'NOvuIȻSʮTʐ1JReg%ԒhmCDz=}{[Ǹ= 絤Z3Epm+WL(H/3 K'<wJeozJ''@x ip/ ['{\(^-w@qy #2U{ {^>]~vL `RcW\7)ORrXAMŊӵw« :%}!+h 4Oėނ) Cz7?;{ͥ(DZ*H/W^X=MאHnj[siևby>|lɭ7;DUͿwײ2_b[wk1'*8.=H0@0/[}|g'-xz;#޷=Qw*@_PAE77&d(/$nP Vy9_|uU ^mWylA=(%OxŇ_EnaU>4zu#||-#Z}XqT%]B:>8}0pU&!1Ob/[omּYszGN'^`kkgm I{CY4x6eP=.GmAgh:nqn"y=kxpb`T;x7܁X|/J 7 }snG>(Fd@:m9LZ \ZN j\V_HC_Vz$4FHCVEG" |)z<<;)GaA8ݻe>O:[,G&P/`{.i=Fyr0l8D6jbdϒ8^=Ôd=Xvz/NTd'#X/feQڋf(*r3Mp4kD?Է+׿rGʔGSS.WAuaSƚƌ7^,!m GMA=`⤓>)f9A?Jwt (з5Zǫ?!ŀ-w+p_OysA1`_&z<(P|WufO<9A' lKW۳b}nk>!ϛg՜oN sxbI.X-golx-.OaLEASAwnm-7 Y: #@m- wY"G Ow5JpCQ ^P%\-÷A@ c,N~A;TW󾏻b =A"A3T 0.*k ¾3stD޾5i՝p(xyFj}\J'dx}e>H܁]bܷڎَܳa>YJ0{cF(\?_ 8ߣ$P|VC~-zgӓpSS(XHFvq+F3LN  /'}T>|8g T G(J%K黆]Ą4]-ݢ ( HhM|BH2ybe~ma[VaT~䲸~ @a6$$kM HˬR[ Hz7sz} zN6XU٬e+OCO#u>v!=`h `)wI>|n,۷&dfҕj[խZ`ͅ[ɉ=w`"_ w|x gx-FwA ?|'wW;Cw8:ګ'v;z&T!aA~-_;A`QKA>;K]@RAqv;' ϟ ߮еsऻ}gҷWYw;-'&^`Y }<$p9i-Ί<ÑtЦ ' :զá6Ǟٽ0s`˜ԋEgX9qӐ/zvQ"?u3F*k_N,=4P~!(Z/[Svc{pg#LR3*a.\Օ/zۭxzmy.&X/.ȅ@9]`f2*n^&S@0A((HUqec䋋v@=v|?v44a |zk5-4` sOlפ]Y!LO3B8{hh?#c z=$.68)~l'+7O Fyrpȳ\oV#yrQT]JC0ps޼<-`;++ mwKF#=7ۛy!Wa'?O'2 2V6g˞vΡ;g6t" TB5G@ьqW[e&>aE lFdeKU .;Nvlc8vcgʶC5!s[Yl8Փ ^ Nln7.w򏍕WeAE\18WϮ/{8[ l-7_0θ߰s0҅V0N _F$ ^!𷲛^p 'E="A? p*$YWp 1/aL}}Cy=9v -c+wW/nWl؝8HP^OWY]y&p ]\ TAi|6 nc/ 㶕8YS^Nط`AǠFP^5|q_O~][ӕϒb|)*hXݡ}Wt*w,s|aVzCCp|k'iR uu CJ$iPQ &^s/uXQ}]p^k~z*x/ȇAs@$h$pT8[Sp뮷abO 8 ӂ A;bA ZȾ y&8AbЬ_psi~0π3:tpZjc㋞,Ly$4_%6f}zs@Vd9ļQxa$Bu~s(-XƯW婡4I-(0Bpr0p p=&x.Gp@A8ܞ*~A~J {`I=Ay\K:=YtFU Zo@Pz obQ[D EY`S /"-Uv( .5ɭ^S\?Q(M. 6߅Qz/ş}y5ѰqO;5AߗBpRq9g0=hz;e۵Qb[-5>ckcqgdf՛Y2X|gLuT~+[cr$G +@o)SW`E HWYW}v~WG=]`#UG s: -** ϽŦ^_z,#L4 b[xzY ޵m֞q9I'Z%j Ar"מN]VNOݏ)XQn#([LIMm]֗ohm.t (h&ֹߓSTw]17r[4Z]c'DA[οV^)d2^$8\O}99<9=Vvp1E&u侗4\:"a Atct@URÖkWϾN5 J@* 05 dٰ֚k]> x& A'C *ro*HCB]Nwg{-p)xv{^#h/(~6E~|HFL鱪}LV,վ=ᴂ vF釥G[^/[xr8u~Bʯ"w9&qssisMhz~.fqA((>|_wj1St@@/!+x^Kf wgL[/0A91ZP\&Hs:L.e`L+LJ!I44|Rz<73L~ U25+=Љ0DzK^DRZGaLԖ?h^x[%ptl"X5BA5:p֢}.$I@bsg2OB5Mp"| '6-0k}\d?][PMց'>@gmxhCO]?'U/#3W΋%l=QAwh stM+k6Vn|MTK" xEd{T;wS"9C%8o-Ucvdž<wzдH6|î\r(I]<-x͂cqgo/& MNn,XS`pt@^ ΂5 (7 {awP r.u:ĺzsg@_Rg! @g6S!;][@IDAT37Ŕssì_truSSZg<[UQd/7ig!H ;$+:P0$iA28_W{EV@oxJ0W(AaSq|V.<ڧ ʙEw>Mr|hKLJV!+1yߴኄN>uՒ-Vi@ϻz=CpOf˜AAWA+E-mq*ne 44}I 7wپ7t\\WQ;gỊإ<ߝ9d *@fr@#r8Al|Ȟ,(x ^L.1}#x7+]m~se\;}'ě[pj%PV {ÿ\8)LhT+|;%ðLxry6,RPwTliyH]賙b&"Bdw_(x%MKk~؜jcSX(oPiK\1"陴Yi֥tKFh ³*:?&@>qٝT\$x^?=U q]A<;un_s?=Uy1$sjrG>IM4}z&RKd=^ Lj [ lQv(|bn`gh`T>n<+R~H}ُE5gӫFQD"+^ 0c~ئf~U&Bm!WhȀvwE7[xoQ=N]:X{Y5Xp7. vbt+-#):h];2Dԟ9*Q$- ٰ LQWPN;G›yIe/V\0{Q|JVUe /@@XÂoP`?RP8Z`Q4lV\2j&=emԷt\6Z%0昙u,zL϶6WfT?0M 7gEd@>=S1qFA@ g/  y '=}5Xw *jڌ.I<`i 0vsr4;{Zwx<=[3> Ħb&_!{/ ImA<>fcx#hsl=3E%PDA]dՀ*_ |7ɸE {]嵛UZs3WNK\A:Uvf2{ w&wE*PG|I?Ofu.uR݌gg"Py*V !**Oo6ܑND97Ô@:&c}"({y,}#QO\IpzY*9^b3ruQb {sF.lx i(޲=`qn} LE[e2?i30Ph0uaѠ+`ݏ?acDn$hV'P _|3yqdO|X Qyh3=+ ^4pc66^uȳx wugO9P`!M#|Pn/Nkޏc1 ~ Q¢vבg0>R {%+x_zǫ'$X0=nײm%8E>CP.!xΟ :wbBSAywwlZr wk2 'ӳ|wn!d_{6wZ {H^Q߆7|Eo9 C WIX#G  >ReCw1Z#ZbQ#am\Ԩ8VPz}E>k 'Pk4XXgfކ0`(>,N0f)]= F@ ݊0ˡHaVrQB繢 f`wW* P|  |Y@axYP]'(?|g աȣ# _9D?Ep~+㞁? V-t[l~JFB2s g ȻКwԼʙ5;XjA N~S-;S\ZWUWuyձ(_&&uns ѝF4B\pY-_=k)/B hTv~-#m_j4kuEn;N3r7I}[ ~Mr^ӍT;yKjy+.zEy]j`Gw !7 Թ{f9 8#e>Rme$n&հZ0t$M"Ёis iVa wJoIl'ޖ29x"kN-C!)8[߼5x x큲ʨמ,vU<5qψM إDXAx`H38stƇ3fP-oCıwaDpA:h$hMJAyy.8aqwIAl]>n3w^JsR=_ܧ777Tlsؼ5 XA;A9X9l;]u'w}K8\,ԧnY*m)[8kj'.BPb3Cs${щ˜}=[&v>6*?@cNeòE'=uƾO@9QsԃwZAo;m^ͥ756\$ kAy@zj=D/a ^*Ki ےV> ^Seӂ@^>詂 Q\1a荭%;)LB?*օO_EquA{L7ApAyX_P&ȞpT;'Q`ؽ\p? &߾HC߁v 3Ax  ک/ URmv2$Xvt@o^P [|^+\)JԮ'wXZnq V~Ys?I@l&<uis{a?$x zLTPX|&+dIIyc{ ދ了[LѦIڢkG ΂{s';+ =WRnWj |ca; ~nzECj.=M`~MLUw >ćw׉NOu ZmIl^T;m㶍Qhum+ ZzYw <6x3mU`ǯ՟Sǣf INPay=ŗ:+uo|$y=YS s`B v(OsA2Mo{[[L.AM4Wjd̔rQ~:C"&쟄b'c]p!ugpzF*q]늾X2Wu0ֻ±:Ϊ(6 z4Wl_6?%6BᲠ١!*8 {1}0IErv׬촧Ӟ15kO=1#6y4C%_zz w0kr_s`#sTŹO81FTsRn~}2絛U"C&ͨǐ+*#5#~&8#ulE싈p ×uk +$ڋnG0f(tNŘm7Tg<%:3r'+Yz@]'88ӗ/_v,VLN`CeS@]@xaoc$WF CCqA~A7uzVQ~1_Cx^Dt-<[<Ht'xBW3yU~8.h QLk;N۲yڂVc#9LfRs+ᎂ)n3 d8)+u(s9y 1<vDaIa*Ej-Jd,v^<`L(g_"dM(F?7xkK@E=]ЅEgKo6'`@f t/lֳt;bP|u_juXE6k?Ap yf^Ǜ ڒsT$~Dq$~-@?LN~ݘ8 *xf`\ٿk< m.FiНbJg 8 _ =F S0zZ,gjP ۹فupA2x*s}n+&Fy3Tf\^q'/}K/_,4uAxA~>Vo7w7Sw40vcb@_O q LE L8Xlm s& C{ϔOŶ"+U> [CX`/`J20{掕p^pj_3Gݱ7"9)&p-$Px :aWɝdΛ;'tD<\  Q9<:=ٙgkȝ[®/ǷA6?]_& :G͝(OaT⧝٩B )G`V>R,~TUDlrtfb^yx_u}j)76wǤqDA[]K/_ICxtpN : ڿwf|xU9ūy[9[pRGAx N^PM ]wh1홛y&v@"vx`ovUg-,/x0,^Mt|Bh`=vm`}c\9.T7$a{ 7&mycsS?(3 h_[P@*Pف۾M| ů(wz$(OvN,/Q$&$Ag?uŠiUOHD 2>IWy?R_4 g3q!!8 =?%TZcNOF %AXLwq K嫎糊KpUyVKI[n~sȚu^ܽ-e`r5W γw%K.q'#7 a[y >Cz7Ab@!/!`z3tB~E qC@GA{X6"8[]v%ړ^zu(SpPPnd  ړ,9~KD>V&S66&}N{śǛ;F&xu@Z`),H]v#er]ɃgrV.4^%2#9\NЎZ={yo #5].HzAL ^{ѥȝ> ^ܺ|q(!O_e(5BNٳ ǂT?i>^Po4M_1$Ph0f>Xv{IMg8D#c? '+?/ԢӊH+Vv <}Mf_@CfM|QӊUkp0?D }n"E9`(%-NREїqrfe%RZ@Sb*pu Ffa1-g!\RiEY !h c7nW1mN${`H8͡|_| E(q)nTO+JP#}@QS'Zp/0%?+/{I\-h;ˁ>,[f+·qZп} Q|':FlGWOp?G S[ʿɞJͳd3PxQNi(t6ƾX"$CР  >(!Mbn $.p"PO[ڼm&ԾI#@Z%# q@_"x4Sa]AO.0A8^a?(G *ȰZn@zS-Fw5BaO}WW|7>O7|w c- =rNg9Xz >k b'n͵llA|]M9_]t6~x'zFly(c3#vv`CC0{ z-xIycBo00L',4,2SKH"GuQ|n(g:*S6[Ԟr.+D90|NJ_sH^2FQ5JB&{k)ߖwX]1B!)k$o`;c/s6}z0RUIZ/ku9T>2Fh@οꅼ7҅]zE]T_TU~xPrSk9;u—>2 J&K9::!6+"칼XwW ZskMju0  Þ$Q?/| %PY(Ev~W$ۜ% Vy\'jZYPuvC~'Af=Ŷ+8*{W}/[=z>2OE@0Cu`nJA͋xJ;9Wն?ggw-h-ca Qa\(}`$z`aL x 놂@AxA'uT!^+Y%%1q3dP5Z nߝkh2RقC^ h؛x&J}JEaz1zIPn\f l&pWQufN)v`gS[Yzgj|y1B_7P }xVn0Lm,Fh٥uw,8DzrNw!-NF:G'`;:# WH81X_4%C׈S'^طgBxOW>!6AС`6A|kBA ^w :}=Eb61E d}FG~AO뾈~>f.OGCaD?9~M`j6xӲR):J+b7wC縮K4z9 =}q\5ɤuuQ d2A~9Z| %K6%]0eLgaLYpaGA=`q@/X@yOaPW`' ۧjB_PWAƮ! L0zۡq/吃w6x~t,td QCx0xf cj' hAn86i+Aq{ւU__)Ys=;IܿnOؗ/\\Cyau6y"[+>=8+ *<,|# Lu1 __BQJ6|IP}%GC  SГVpDA Cz uo5F`p0 {b –, ܒ!cgCsz (`_/x n  7 rN?̳q m(h(#h U𢹞iм//_| 3 ,(EW_F z(' N>֡*w)d68;y1 [wjy?\ޘN˧Bm唏KC󨐏~oВfg ;`,vAR: <\~nkߋ;G1hK\*`gs,)97ȵLI|+<Ф G -%'C@xXք140C[==?!nNX6jYEoc lL&A Y~K/_ O\%m# &[*PU>*P/]aL z^h:"'0G<}v %Z@'fw33P5Ué2i  \W\NF /ĴLUVS>jѷklHw5ΠWqެ?V)6eW#W},k560ai$Nk kW(R N}gC_| % la ˜ ;x#U ʁIns2:Lelm)EeA[ pE .䳥@#0$ smu+ktfvbߝd1`av_,hO-b'+KBeϦѸ/XXA3@~VCe޺ԛώxO k;AX7jDVJYm݈I%K`$4-( , ([*T8*e_ho_Аv#'bkA #/ߘ'#Xa&w%O-obMQ[KƆߺfc\ԾIYrqѴyޛڙO31A j;Vna g,9„WH= &Cc7٬p0Oa r)hXa.U,MĪF%vNtA.n\uuK/_vBnAlZ0`Z1W/ؿ[z{=́xA;řTC͟y;ALn張F?KPO/TPۿ,o9Dv9m]U<[p/ ^$wH& AT`:R'x/F-mr3C| ح?U`+Xf`1}WqSnKr0:5cz<ư|<~?sjP~ZazVY\C>8ۦg,r+zk֘ 9.XRicSvȡ^X=g]TlqZzDY[Cr̞IAi_&,U0+Hy_pgɃjgh.>P]a #w+[2Iv{@R*h*t%K/ ",[US?+~oꂋʫcw Kˁtm-h+O[lg{@;@|8WJO A>"bg,kBeͦw z. G I y4l\]0fQq _ D %N%K,SLi+˸/ )qx3=ލcqm;qWh^е nm-P5⽍{cĻ\oĮ9"O-m㬯 =I4<}V\ `omr?oQW6N:@蔎*wv~YFG>~xBcA49RۂBÈuU]v]SᚚOWq]?>:|`.ւvNC_| %$RQX0ϏycAx`{#u@N#Q^jAz4,Vq׺@IDATqDiA롐`ADEQ"F6=Dlv+A).Y?EG-Hs'O5ɂ]E X0c`Ҫ;Tx "0Dt,Q"O~K^&K rPTlިq7`9*{h(Ʒ/:C7n. QqU^nTl-XM){E'8 i둈;;s\I1>pyu͊BhYt^C?~ a~Myi(Pc&Ph=fQױouG5]~a:9fUw~^ ǯYqhZE=H~eYcV6Tdg WX|@Ccc]&x. ;} %K@H x~W0 C9=FHX`N< w(l.RzZAEOW.bs1#:~~~IS|!$ЃfMzfykLr!h #@)MDj44oP[O6Q]l)6v:Dq| %P6}*W"PW' \P̵4SϬ`B*CH ćaQ?bSѫѣX:q:xvu˞bV Fv PP#S"39W؎b8v_4\ɥ>Z5Kv+5WXT<[a%O֥ MC(tw<whXzyT:zNaePD7H ͯ/逤PmCj^?xs Ho| %K`g%PJ/Ji,p][0@E`5Dž1?,&A=@[(>;M+"P c~yQP[)٢D4~-=%[C0 :<#>ojLmyzaSy ٵ4Ra+s9ߡj; \f`8mUZ | ػ$RPa~B pC&fBwBIl亍#768=OUUp@seo`t4w#p-gy_8rb> Ao/o?3y)xN'i^!)MV?? 5&塉-ZM1xФR8iFe``A?5bjսi LK‹zP!}n80QC1 9=[ 3P!Y7_$ _| ( ҋV4cfXj[ZqAp( n>~O3f ]>lgzk9.?SQ\PI|W!| HvbەF{w= ˽ZAWG(6X >w%KK X '}$@Mz~#7I;pE*=)C4^m ֤"PKh y4 Dُv0"bYw_\mwA՗Y3%orYԢE CEUi +.Kv DK= 'YF#?I$*(cuE"=|LA [\YYoo*<خq|xՓ;) 7 '- sEq/_| %Pn |G0sAT[!~KA[p̣FA{1\ &rMO;(lH5d?)hL<+6MuW` :Lp!eFU71 1U 9] Z-/_Jt ~EPOƢP.N;9߬ف3R9w&tPϪy5^]7VX;PpyV :znwA, vA_eyTOptKp48o8b~,Pke?%K@V)p(':zT}DVㄇYfӨQGG3S~v|LsboRz#0&M}6@ }F Ì92#JZ2'au'۪#bkc3m'`UKFw>D=e̻$ ;=f~7 7k9>L31@Sq~z$~ W h( 䳃gA+ 48~LP+1X瘹~?=){Zv-nF5M`o:%K/rMF`%~vE>]`\`Էj#E9tảfW @$8ȧA#J`Y,8#c +DL}56%H+ez=Z >Ip' tAT9ڋO.=) $G柏ԗ/_[s?Ϣ P=!ݢ"1dg{3'K}3Hyw֢􂃰WaG,* 0 8$EۮgnH8Jݵ[{y\CӬ, Ձz|>V ;*Vh`vϒ~B`m=1h TfpMM8%K/@%#m (!sADܱ9S,4>eLAvAڸ༲&?hk `E.A_v[6I1 \r \D /CаS :I`"h$r?S=L/ ʇK/_[C  8POD }ֻQ[V6%y7>f]o&/3>!5|n_D=[(H (Bxms=E}Wn1w4'̢T?jCeb^wr;?`.$`'~XM9GalmyyK涎ܨ0`T=*ѲLG:54(ÂiyGh?c> c f>DX(rwRr*ϯؽĺH<%K/_^~Oۂq : ;HPuy?EPf ҟ)h-3X0 re#q0OuA~BDzޤ%?0˜>1'.P>Ps]]m_պD !xNe* g'6l9r F.[Vo'C#<  R*.#]& ԫ.MıN~赡v# (=T7p[%?5Q@@F`]sU&0 `@wQSv9`ś>?M༁H~[ߝ 51.v%˥f8W-j|R=f>ٿ7b|XheC_%Mg][$>l0[ @8Oڬ.ZC8'-xH=ӅW Z G CE^|aҨ>շjL#L5_T>ԅysT@qM%AW0/ RCS4/x6Hy@1' rys=1LjhcCFB+]yTQ\6l9} $0ێF;[~uU[2 |W9 )-\M@FpBwO=y@'FMxO$ 'ѓ@ t f9`sq eBp5A1`yGJY]bZ!]mL(RK>kDvi`ؗY& 'z2]/uFYMp*?rDꥵ>3]/dULe,wX(ߴ`kar]Jw?Sլ& (ys8v iBc ٠)Ѥm2,`!O6~|#A5_ZWs96jh܇rMaPHWN=ubç+QY5;9`ś8`$`x  |+ 49–)P_FhK! g*>7p* Fm [{ G"0 3 ;ͧ D=N~bVO䈝9`si@m"$PzƮc(5d =0?<|s'h#(SBW{xl!TRϹ0bm 7&i/OQu3ik < akk+˕7~-B5.G濮- OzЌS "Ⱥx"5x4fs.%I B[+1=VExTpxqv)*b{xh,)Q)$iqiizb ; ~́D6>Nwn-#`.N@Jx#x!5'N_5a'P .T%n{cǁC'0 !DL\N;_8[v6l9p 2,x,kV s .Ⱦ )GG *NҍI HZGI/"#eT#2o1R4?A(rip .?SRZ-z($ajr <&J'p6P`v9ps :E4+@kK!p{)/;S  t\_C?O`K a'6~ǁh;xH(C->UH`5[Nn —)ԕRa;b*Z@<$p-B+zH? Q޴Nne7Ǚ/І/̆T("k.u;F9Cd3=g8߱[ `^Gh8/'EJJ+NIGZivSS#Pbw0ؒ}=] _\q|.#ZzG fl*Ca%%eww1& T'PnUo \+ds@uEo{/Z,)I/hm8Rt#}`T οY/4 `_(Aจ'_ t=m8Zν WH{u>z)TS8m8bk93.1,Z<򉈼_#ps ^ S!A[']%89@N: pjgśA_(߮2'C\a0EVVjw1/eX4n_W0(o__/5D:ƈTX| }ܝK<+DG$2όI=Mq:vSAR`@[&<vMiUxj!H@Lʠ26 "oqgHeC ~![H`0I# c8ߤ#O-HnEj8ϝ)ng b7w~)FVǁ`TO o!*h=!֗'X){A!M#PN nO+3H\@_H0YܳtiNq}́sôA I]*>y2%@`|b b#&w{_Qv4ҿDn&p2כHz]6fd&3(@QOݡPZӧ"Zmr@0mBOu#J|s'S|`Ȑ.)q@6P@N< >"t n` 'yTN bz:GK+u+z89VsMj\$ 9H1ah7aYњ@K 0;~:}N J)XʋHgy)PH x|$mĆ ьMm.]x˟#XݓJq?N@`Vr&,,@C@@kmD@p&P !$x'ʏ)V9UG^'"d/PJ.{́s!b Hg6!Baw9ͫGV'"Cij-C;~w``8 E* ĵ }4,6l8S!|_;u2q6K1ۘPcna2_HW [ DžڙPV@i|841{k pU&Z $>'D ?DjMxE+`n o]vk34ewx"u6iڻG+#KjXCkH+TR ^vTvGLjWq5RY^PHյfX"X;F4+/_T1NxN'I>ՑOuÍS@0!P8vrTlIe"0=d)K! o& 0 JNW9:V?U; ~:o" yY@1a*q{vJoO/~c'hՔLg.f_Y w<-mBP25*P8JPR{sb*yaF0(MAdlˇ>c&u5: ('X>&_hYyzEhTlibb`)SX^Egð |Tγ8`(>j O G:B`̗Vp)G`{+ۺEO KLt[?Aqm{ ?z`A`15lj#l@Dc{0l!`("06yıb ~4E膦ڭ Kуw(;9`sÝȜZགۥ 0 -U>*SM28j`"^cD-)wMէCͲPX)[_rU_> )< v=}bww6r_@ ){ɬP`[7k& lb_O!+˩oS* MlKZZ .FFDʉ P {vcS|Z2_I':cƧb%lfƁ?Ꮞ`E'E &|OK1HJp=L}FW1'jQC ٿUN!7~Xoh% [ K0}N @>B2%Z?8dsLsKQeYedg߳mdY@֎@}g>g ?6l(BFЮ !`i})! rR[`qL\8$WV(/*XAJ&*Z7Db$U4/2K-nGeŚNñY z[=Z3,ώ;|xY8bn)R `Tމ1Qk@ZKR _VGa`@ġNZDP02 )\q& Ф룰"pqp`5Ըx{ararFJGyi@t?2a8HWԒޑbs j >!GQUsAO OD<χ' k0~=n'@DB>x9v"z{W`_q1@0$}!<ycqje%m.&0KHW kN[eaśXp:0 kMm-UͽL+z3= z͘˼^x)Tl/҇xYZ./cʭYs$`,NEmNӱhPTn xތ2pM !/iRuِԸ@Ej]%?$Ix<PÓf0o! ]1C{Y+}Hstut0hUMwO̕02<-iQf( SV's r$b! "^';]E,&@ =Tuzx ZAK΢"(N7p `iOC\GqA/B  Oǜq68v Bxk"vF]p!Z* %Џ֓ KVǫu.h 9`s$95ٟ"F`O`\鮽Pk/4jfXO1P!=[?5Or+z/9Khw|j٭f =b]I ESN n?&7ҤŘRvە!k̂厼zFp*ƍLB) fci*"54i\Ri;H꘦*40sǚB{ S<'W;;axB8B=ܦ* s a˘17.0r?cǭox~@ 7=W;D?R AQ$R٘Wj?V]Zt%u/'uo' Vˇ \@U4G'+mGuU`zXb_v)My /I3}$40dDJ(h+q}͠š"N=~Q"@s/~z%^^Bx2 ղ́i ݐئU8 {ğ&iAK7܋@{i+(aήa@di0@5R i]8_cl{&ECPM>MA/kw؟pQ GծZ>]V/18WkqݱBۃɕOJ1oxʽX.[ 1l(0= {(ŷ/ !Ι8S!sjT+jDD= P *CPJɿ%#NZ3%^@ۄ7AYoQߥ_%7r fo(K3Vd,bvnnYEЖx6z-֖F[6Pfe{,A+Z>~2cJ,PT%Z3VF#PdӚ/*U}rl+WP ^;/MTwLZh=uo0}Ji{a!-D߄ M缅4[W'ךR+J2o_18h.ҢB'pb2Rye=ۋ\H Uh r<DžSAڔ'-> lΉ9H!$q̰p@%Ju:1#0hoNZ/7iߞ6iD,ܡ\p#ake`hiAD(=3 D bj?-Gȷ2I(c`lEA\u@,@!AL= 4SQj"5п0"D @9[f^̃aA! G^(\Q~%n(DHKk1cc5ibu~ihn_g6(m#1b;vQ FF퍃"d 7^1 Iq`&Z?ꬻ>ߙ3[<[~oa04osS!vsពx+%EY#XxOLRAuQH}?G!je~{:6)+x+VYBI{?"+&׋Qyz,^I18Jr|}F {ge3Egɝm)IR& &sȷ FzH/5'c@*+PlK|7%u5WWf~HNxBx# jY<~sIxGl{ v_?yE0z±ƎmQ~ޣp6}6lBB0J(+>8 |yg(S_p@g\A3A}Pt~fBܶZWa(32Zں'Հ şgbXh#/30ֹ6kP(rTFt嶹a`VRaQ!9q^ el͍'[#0PP:S)·̋`ؕ,mcT Ѥ똇9:Q㼃@(;8Ɓ,Gxm,Zv|[ +NG^xw>5πђGX fp2P\{J9ԾW9ګ\ CۧՠЀ]f&%P8]/Z~J⟠x lmmݗ<qֻ7*ZwBwV|G]oE7yW󣿂I N\q C@G)|̛wHE[9D`%=|@wjm p<~u\gQOX ,GuW'5w߈mYl_W Bv% +@,}凕ŽN}[0.VDcFڟBOCn-pįF##%N z-Vg'(n)4~VxjkA?)>1?~3Vύ:aQ*}Z_]$s1&9P 4:j(8:&H8eHVJp3Rk2<'C&Rp'eɝBZ lE@I~ o'x?$>'W#F;?{11Bs eCaD(=uW+k㭑`9a(mmh[::8"e*3=沤b-Q˹{^|6j(w!0. pv czn$Dgsz˃Q}q')r=RryY@K)<2/':XI&+Oi}h_LMV搿L#1>&IwBܡuQǓvKdDHS9Cl)5ިJ65i zbLyoOd%&N VE<+2 !6M!`@7ׅ'I``5G?9ʁlU  ISy:0za|d`Bqyz` ..A(KM SyHS j$hpHN C S"} lʁ!2!Xbe!+\?>~}_ْj,#}eb] jl(;x9~yHOQWHf ؏܄TGs5Aϖ_8qKwm)h-60oT0Qy^} 1Aʇj-WFRϕ##̖=7@WGT~-mj4$x*-MUxXQMS?P?/ 3O<+S 6_<;}* ?&t)^RWcGKz'w+hQ p2cP8FF{ L@w@b ^N6}u7M`QgtܿN b_EE@IDAT6[ L@GNVgQȗ%3c?iC8qZVp`߅{`Ϧ1Rxez}WR* /K?γʭ ,it.С$fl iH ɿi/懎P!W6t-'\T)C*WDfZ`[W4V/O 05;*D dM:k!I~B$8jO4(w4<ȗRec%"7ӸpLB;e2G͢/'#ot'cTx}7^֒BD#:KԤM14 1BVO>}_ _1 Y}̊҇M[r0D$A@q)IZ-AAR#EW6O{eȍ!/n98. !0@Ӈr88́s`U54 ΁9KxbgyTˮ6l #0:\+@lN/)ԡҙ-qY*}- o z`S[ ^8Ʒ,P578LpCj%UXcRpCHo^w/k6m0.Hƻ]+cU >+4߂ۿ;o?h >gym@ k'2< __/6ͱcgݳc雡g.uߨ5":ڑ0ZdMzzC#f 9@V7˹ R@k!: 1id_]0t$z4 OrUr*[uLzdM%,ےi 4R PO?+b&$,^&=(IzH!OI1U֨H =_" ŮBT}qǘwqBט8 jL.HAd)U6D kPb ,RH h[ LmZJi;v9pp ffSA" ׬ ΁9Kh{%®6~ǁ8@pA@@@[cz8 +{ڸk1X7kP ' +I.zu WA&5~+1( ,(q]0qb:O{ ʵ{i*:D4þ'Ҭx=EcìH@BĀw/榇2-Һ\uPa 'v2bS) 4fw?O@oFBSD/ާM lrxRU)g?# W58%Lr.˓Gq6k5\|.OKH/!"i nb`{9"[+᫢VCޚx7ygpR6+kTWu<)VN;2`Ih'ͮs7qNE (aA.rʯsWu5qayxB(80ܸ!~87.B>wѡ!UUa~c)x?ޓ{ !Ąp ́J!;L&>0X&8˪fβbWrۣz1Z!H/hM~>arK 1^܆馐S1-3}G͜=5V;Qś4!0/,KاT>&‰|:>*>/-^9ZE~\W4 _ jIܞ&˴zt>;l PcJ݉) ʝ||ډ{urZ7S (X\fݣNU4Y/PPؖ?$Wwdx%X^'5[Y-a=O񂟇rL= }hާ2x?{X*yiwsqB/m~*P&#.&"ǒD+BpQc=4LmxF2V**&R -⮰@3W~YR+No A:_haMWGSoTSR 8 kSX64"ҽO& $t_|l[WR}&(Hf} x פiedU]lNI^ #vm3f#-Iy޽B<߂jGBx:O$"L 9_fv3=E;878{XH[O Dܸ3PK}I6l8Dj10^LRpC@+E ։apE< Kc q`$yb ǹeg%B7}%¥؞C-d2=#d9SzyICũZ%~YJ'yk(!Gk,h!QQ@3B~U:ʅoy]7|Q>mzSع<=e Б}Gi'@9"kY<#} '_Ne2`n5чA W*oiH0uaY]`^zEJ>V2pyJ*c/y?je䵠tԍ~HktP7fLL(jՓQR;F~Ћb5x~hIrZ=>.}C{+*A%|>V3.)E#ޕQֈ1_]GHESdw"?hKZO&s~ . U@;cص>v%-ϥs b^Wn5i|J9@W0:3&K/rYҬv!bG&鿴m#0TSiOM!,Zy஗B*C g/jGRc Y\8ӟ@+F}NWA[??u~6^8!BP+}6eDyf|lj.VgX=GjYk &BPκ;ve6iE๾MARh_kqs ]1owjDF_S~T\&tu,' b[XopJxފo3#D -a= IN1Wd%p~w`aaooCJվfOUv[r)HߺM3k !}b`#3_˞vaN,@ LCo+%E=ĔյRe |29;բnx.ޝotў&ON٥ïדEC Ve(u[8E,WCu' g;VYlOC{wNPRG5I /h|^P,* 4+LM%yǓaDBDCpXGụtMQg#OctG8#71{ҽ7|4~,\H} HS;$/HDKS5֝~/ #_4szh b')_ϋ|q| :+O7p7j၆A7wVZFX8ߚnrҀ;d0$9`s x,|2zvo|A|/V]ɲn>H\+kw#z8DvN$-. FpWzum8Xa{ugCA6U 5NlX19 |߮4vۋŭ{C1jNyPW}HB45Č.ړk8Zh!ozRmtvr eBeY>BW=.g?wى@t-W>(rbfB'`Hs}hxZ;UƗ 2i1K°0V CC]P{&B:bՆLZ>H/bC.oBpͻ=W[րkCuC(/>Wq80MiR8ƃOH!,u|۞2̇ 3]8BZKeZhL粠urYZzO6}&ԈA +J*S+a f!̻MOn. QKsg|K[XrQ˘'  eU'Pے?JGdssB2>BKL-ԯ#V\jҙYZ56F>pnERsevoi+.*~%gm>>*]]ta7%B/Cb…r;iObClAoz6׉.L"W.{k5aFA=@qMr0IoJV%߰D-Gr@lORyOv0䈵"ҁG`@9  8Ng%d %O$>Cv>l[VGޚRŇߺ'S=Rp=x"|X! ^lf3H'8&5K<P8m+bh/ EC ~=LnhaR~bJ3vNR#c) _/nf-q ?"_KeJHq_xM) sI3GIOr-JhA/g>5ӏ۞+Ic:!5:./`^v7(C'X],Byb #"W ߑy$|\}Ia8Py2"#\CZ{}Ocع,loUP~#RSWsi*>Ixڛ8B8^v/֧+%s_VfW-rHz-} I&,H{?{/ ly@G`a/y@=;8#!Zn \V~ 4=Cʭh?M}? yL6'`_ƁHt# ȷ c}fg41QŚBpY˽c${7<EpF\ AgW -#\< K"?- gV#=z#lwN,@^R@GچPTr?GxI a /Jd@I q\]u9h+B&0A-E-.a;8PP ڟH1117~.ή 9eBCgq%+jy^.jѝf&/f> iLi'iIHTubO`XjqN=P7 pVu\,*LwK`2xB[HZY}. fP|[ <n4ާ\RUpOҮfqM?zUGz2Po}B_UHV {n{p|pNҽ_,U >;`0HUw0/^NlA|۷Y1\%J60ؠ6LH4D-8c85HR+Hnuss{'Q,)oA&Ha82>LQtk\*4!D:7NJ?ds SB7xя`-b I^xB˲3<d{ˁNbo796l8+80L"'םFt~B|~wY*2J'($RTEIM}Qq㮩mM0P4E+9S⃊ӡkD(/?1EV^Ljq}tW MiA=޵# 3뒬Oʸ!g" '^ q{쟧~hr+ZbDPB,vLsGo;9=80U7(_Gp)oró銺 '&{8ƹTk*^!u620D+Cm0ӂ92&h7x-ӺjP4_d?rG9t2(n53OjP͉ۗ%r sd-EBA :]<_<żv1w#18)\鐫2ңF<|s\0Y`(~O!ɑP|0HΚ rx#H-"85 -bfl_I#u| C2MA^_Tɗ(57Y{/WORBϢpW_`MR_d],(žzU ǀ},*-Њwwg"j_ŗ'O4}Xr{ rsVZ^pC ="ĒԧQB{ZMԌ4 +"v9p9yX;]He(C1w{:j[o߳>wV!FMG`R,Ǣp|9`s怜B@`@( AL嵴Vm0jj; v_t?}b}u>9>cP@/~9 #SP 8F<-wb\qdfyPpvQo"vhu!@q]E@yy*Zu`.^M? MDqp<O:BY{w06ski/I[;^jyQS<TQ16GzZt-]8#{.zyWH7:[jDEE=*k^v1_VtL?8E/r 28*o@BΖdt#vj{=hp^hDN<9 AE[:vY`.'DrC\~|R"5i| zi^쯯!2$ufu_OC9!-/Tt#MF3y mpfR1V[IbE־J+p[+}peJ>qTCB~-ؿ  nm0U!坐< "bEDk;&(uB>Cz$(@ϻk`p(QՃ'0e^knwa?45 p"PN WZVmC OΞFM%%_ډ;= W5I%}IvxSX ϔ` #@N $NcϑI6l؃t{ &d63Dj>pGQ{zI<be]Q4QvW9e =abKp6yDettCjD}H2"65q x`vv䳞<㎅F88 QT[( A5"w҄? +jAG1iµEb!i\kLA/C5fY{iw9Rf$_ԻыmGH3(IZ4A/4yVp9fxOp?b yb "5o:31Ge\mfaS͉ 3S%_N&;{z!4xr/>DUPU;nq  BPۗ4MwKRGO} irSVy8 ~}ɘ(FCEyjXZR_N 78@"rG:E ϫ}Ҥds:fK[E%"4!7G7vmr1&v䟷'Ae8opv_+\Z8;@+3~7)jpapVNJ?#b>&´Bw1Vn@3 Ex-נL}?~_@GpI`R3k# p?w<n&phM%́ˁ#w0 Џ=kD_Dc S~ CJqL&`[@9AP;9`sȁz*[A,⿦p-DsH8ٛ9c*x]1zg ,06½sWxr}x^_#0Bffq|9h}sSx_Hc3AK;o4A;^T nQCO%5VB~/Q@&PL03 JW9nwxĿZ(Lk,I)ca>g{P&1HHb툻ɨ< bί&u1,Ҥ+\H D`!a COJzhO܉zOlKoA =[}|ޞދ"* JQ( ^P,"R`Ċ"  $!~؞?ʝ'9ٙsΜ9#{C!nա(c2q*\ Q\7R %5nΐƎֆ]04=qii~S[ã=,)b9>.gXx<ҔA噷LB:joUE3,S*Ũ c=  UKfefNt '"ט|NӯHNz_E=/ˌPm*ӽE0q!i?=F0B,UU=cKXI~p:kf]C !4 }N5 c9r7ٲ{yy w<#z>/%gO~uqÏ Deճ/C= 8!}//r@M 뷭?gj,F3;x׽Bxfwa&IQIJ81prn$yԯ_|/z+@q?~L7Tp֊Z_u'DDHQDW@Ѯ #^@ږ.6umʁ˴!`ա0l @ro\ҹ 3#ݡ>\q^Cɞ;G W Pz9♸k# `K= f&fiᪿStHȵ>mϸU?&n%Q#,vV(Jm$[lw|3hA/9цY26U 2Ғⓟ ̵6Kyj]_RTAoAQyrSy]OjFyљm3{Aͪh2C̾'ͳ qϡUuxoF*jnl93%T u/ nK2!UTTK+G0JR^K3l CzlgFݠ^Gxjm.~3A;6e حa\CDGbϵl!^WNBvmRogMi԰|@D@{l(g~k,;1C޳(jϭ26޺Jg|#\ `A{ûMciןS8#0˄(rFwv +X Uc4u=Xdg ο-R19P؍ Bn G,' (`廓KN}.]PAhZLU16 :W}úכk@?/pVDe: !O8o-|k'^ {2΁8oDȤL%xr,ǎ\ =|da,\@z'-65VK1ÁyV]j,r@ 7ob⎂+{ 1Ӽi775fzBޏǚ x AGWYܺk֩:S  #cXS:1x% Yղ ; y9 /%61?|Sޟ uiČ|6ɤ z_WO&{,)WۏQTfi6wOxaZ*0Ebdo2ί8ې6a8M@a/ 3:LrАDk *iΘB2W1ο]s˰(8 zS޼0dgLvU7ȍUtb,hթFFsymwFZZ`!1b߼֊DʇVc Q,3˙ώ~l/RA"-qknpoM'~ 4bdZG|vyvUM"[(xs/p!\AV+lKVY ^JLR.g3̪Me` /S"Ŋ~A>}xVs֟?%*a%p}:#n@^tq9ps ZhG}r7CJ{h_*X}R2 xM q0>A+aws[5/Tiec829cwaq)BPd3Oeu/NBQ.(K$!P+F ^u%bߚ}+(<:hnI^EPȏKà}Ξaf vvX_3IאzEBRҊf7FOQ$*ycs'sA3?)Q61XJw4H$1FXC1Z,N,WGO=ο=ISgH*a [3+AaZFhhe{Mr9˗i}+kdYq[a T~8\?E^aQIlQr*Ò#7[Y?$(8):Z u'= \|{ZCۀ#35M7x" F>"X(u'd(TODBҵr/Y0/Bu5k'$JGEJJO%M#AK^7t RЫ ¶ ӾJxx^Oqy ld\"_iGN/Ѿ.X5hti[s׸+ʙ3 y?1~D@}uȻߞ}k@* TK>X~rbN BV!| [7@7CJbCp[( :  *b4N8LWC05˳'4(f'<ay|K3gx $eUHȩ.?ؘc 19M?B1,xrw&G@ЙJ@YE@W yxC>y~FVم<)Zb3sb&(@!&5+ts+<%^s(b9 jxpSRaS'T?9[(kaGUb̀ r٘ = N\AN1!Bޮ=4Ha *h:VSߙFIhHݍa~j60>o[>sq,} >gx]:M^RcPG7^uv9#"`y6H?8scd b o o6U~==eos~ N/eodRqaUDߏ1Hfq4 l8nNy0jm.{G1L%{Cq~S WU)ve:_7N:n'! D`nxPeKiBFLWz-\@tƾ?@P\>aW8F`ӆ|3mP4{(ǟ(戟ҩB@p\K`&"Т{x?a~*$ -U{i5ؚ<"ғ4F 0Po6%ǫX H@Qc%jPU(.&NPȚD`ƿKv6#f3pYa]-YR\s;e^Tb׍Mh7;c GC w_. }. ī@q9C`DE Xx \|`?!ȭ%IV7nwwo/Tkw;1Əṵ#CPVm@]o<30&"&͍4P}P{.QMzeެȥ=B5~ EoGޕEPAۃP0PlIh)zhD#7piE`j F \WRB ;B$(46^eMWfؑBݫ}0!zT0xoƕ&:w޷r‘Y/a#'ҋcq0}5܉h7p :~_XϜ E ?*= |s$~@jbd@IDAT΁+7qx%N *vDW*+䗌E;8У,%/hޙg.dn0dy@N` vEmpt0>Qq9ps̈" (Տ?jA1/ S"fNbuAe#2UwjRh' 7zkB./"!I4 b;R |T& &SLޕqnymw/ዢ ڙP` 3.P$g|n& c:g_M`.6/"<Z!|Y_.^ӿ+ @2Q%z E-J?'rɵ‰LkS`hHXҋ4JzPB֑Jq 53W06VeWRWR]^-:VsN$ivrit*h7ڤo"kH >f? 0.Hܖ$F-|s؞0\D`;$Fy'T1.qw1MK*Tbß|QԊlAy:f@_ɾx-*xB]DV t4Y˟;2E 9Zk@C4h3W)[bۻ:DX 01(&|F3C}@u- ult!7i.itw}Ң7cAp1k{6zxv#H`7mLPs&9)xs@Wl }߱?¯P-myhGS~lCKSv>=ry;%'C6k Bأ#qr'oQUmCU<9@q(>xW .LTnc1#8`BPb4蝖ZgϘ}ɐ/::ti+oCLS J Kb\\p*ݦI>kwis( N*X< [Hyyㄢdvm =)er,G- +`>,wwB0i6uuo_ 0qّ}@ӆlF B|MJ7:+qcE[B K~|, pm񯪤GZ4CqiՒW:(ZZVх RP!Ds+)LC%cRmZ_p[kRzNk.(/rV!hHs_W i㻉4)KQ7/Gq=7j ^oӚ%>qGi05\?H(FNҊvͥv?-Rӵ) o"hOQ}?JW\lUB.hogRq!S?Q6ေg˙hX l̅:1|U'F] 'L(O&=FF%=N(ZV9T;sK2fEBvcǣ){bBBt:MC+N8..cE򏽆BЇvzm_[F鱉xm ;cpeեQkTs3/;O7/6^888rg)ķiMԅ mv\)L]! !GI|(O9t\RGd!f5^J! p ƌv K!-u?j?tJNkv }W{[1r~?f.=s3pqSD:7Ex- krx#O9si޷@Za1Q%T+T K?>$pI`;@` Ng$p' 6Hx?a|bYE`M<b/ZI%yAolAjmڿl*%0(LƈH[HpgʕJDxz}2S{4F.SlH _'M\e*24`w; dR%8~gapޠ<6NX 6~59X=Q9Ax>2 A{fW1Oh}TrgF8jq qܸUgPUlJܪJw"bV Ԃ?mE hPLT*(DcEވ{)sLZ[l2D:zZxuR#0"IOT]D9(ўv ,: &T قq-!k.WO3b"d+a{,eo߽}ݼs=0m߹ԁe=VإP+0(mLXg.x{#pn)BŸhdJ-c3|g@p芧8s ΁9Rq/D'DŊ"8 h1Yk5P,dl?w%} ݑ˅"PMTߣW7z{H"lñWB7BnԊ&E}Ė>P~|~ǁeIt^mb*Pֆ ~^!iJMf! ^A) !āk eM C L=. ^MŊ;A<OO zG P$N4 )o `~C~EBHK>PAQ2$6bO)Uv290kIѠ97aMaO<(GzR R}NmbThF\f  >T5h'H8^Qb cbV4KYcCn-bg#Yb b ~N7o #_T$wf!#wzF)6Xj6y'3ˑN!ܶPԧ .c:Coc<1d@3 d D$YAP$SB4)C@ xd;,ib5Ťk'deUZCl2| IP[*vu[ ^O ZcBo%КGx޻x:?9UOxff}wށ%p|OڶОWq ˎuDwL|rL|+VE?=־f;uO* !W?bous ΁8>` c Ō}W58k Wa ~QiԾ~?>Ace;_' 3fV&-='MoC0<"Se"<(1y܀GD((׌ƃR{ڧ,Q{Է"r%遣hOsC@bGNZfThgE `L ,| +7{XP+fMh5r v@PrY; Go)gS_<]H&4%yvU-B>C :DwȽ1UUmr=CL&TqLS԰]֬UH'ڽv] Vb!א俴C]7]on@b <>X6@/kO[ Ĭ h;C"Ns\w`vq@;vw3gD/t sfv2KfV9ޣKOP+wo"izm$z0%p$?=Oq9@$B2؆AɎ? E*GZ-N:v@.MC!8xBoЄŖ}ٶr&VT<'Y6=yzPφZZZ6O0{]fDe' .}(9 c[E?cIωc uJaۣ3gH͉LRQі} D`:ǿ1i+4R( diὐc.-6ۙu'7Ʋ_. &6!hbnQ4^|vu 0 U7ꗀ!yZ7l.Ud14KRm<=08CGZMETc"kA+cZA9/orRLWq~=Ljp8RyEȝ(oĖtI_ #་4|0eI+Q7Y6ft_ g q@ v&`;DX@n Quj@ ٭CPL VRʒ>(=l[2>ל3[%jh<=B:]2$31&zXy':!@j^T|8; "_f~#%q=FjdԻ,T;oKҬH}ÝH |7H7t]PwuR:L@MXE* EL#be 3_P/%P#$0"P~l>:WzĭC1|#B4'r% uWGxn|y5Zh-xj%57toT7̧Dsޤ[2"sidE~T J>s3N6&LQƝ;lLBVZӜ w1ؕ)Osz!= 0j,W3h,9(G޻0z M즇}A(y2BkКfM3QBL.I&,HS?qEj匿֏2'ο/dE1H=ڿ0෪l̇&08]G|GHMѭ !~XG IѺ3Jfatp@#* {~ucĔ/`ZTrI֧$|Ex`dVp+S#qzKG*>=n$P) ۉ߻8Sq9ÝHTh<1`7Pk^O4/qyfӢ1hV9\#b\.:â\gbFFb0Bda_du ՜y8CT'!{;0w*ّC} k x+ U %CŋiRӴ=Ǽ+T59㧚! SwֿnBp*h`P'R nhاVx>;_ b fC1!7 L0w X(pt}ϲo3k$mhb}p N(no oa˹pć5n[BvחmAsGU%=`4y̗@Ռ4%}#Hn҄6 'c*zT?ɖ E=R2oavǻy:I<9I7'-$_n+ #EICtr +],c [#p7=]q7KA~YbT1x̻Pg,JEiEwaҼ(.R"j;GJZ:%G2U(hEgrw /I7+RftM,3 bۧFHwIhoB4X(jߘғ4m ƫXv[0)h6!6$sVeņEӹǁ"Кn"OOm|vSkL\ 9*4=&2/~%Ft|QIjyx)o[N}nv'A?m/'`AUf ~{W 9@wpKds؊ɰlh pwa9 %rԕh-C>`[Yg  ȵR=k)12jbI@9ļQ 9(h7Gh-(Z]_kŸs$'T}~ [bK*(VpL)A˕u->BDg? Te>0ܣTgI0@@DᯘA9§  1Ї U 1?QQF"x(x X>F)B ̈&P!WI{@ Lu9w"hdO(reC0KKY T5ML~Ͳe[\uir{o%Cl&=c/oq~xڏx[qubѨsaUb'ibogҽ_"d(w/[EY*XpӜyq1cD E.?կkh9#耔%4tzz9`q%$- Qݿܘ$yIn!=>MS{~N)!n皾f\A@ml6STWQɲx:8[8ѩZBMexyN<ė=@Z\ 5R^j釰f= mލ42Da*RƐ+W3Qz5,izGykS\6epӝ,<0w;stێnՖf 'nޖ`ytNr  `| {'Q΅Z`w8ΕǬMaLN+5ۺvDdy.1.8S毓l,vV,!D!K0~]^uW1΁8879P\myσ`:,߫rf'282AꎼtdEEꚩAqrBX(/@濩`AE~n1ʤGylC} ]G )˃b,8ppJ\_%])n%湦7vSVt|0/癠],仨LXzcR@ӦN%Z;N q3>竈YDdXtooG@p0d"0_w=3 \PJ:i!|G hS}įU20P8em$tN8'iV\pHYWTc0 $^u b[\n 2̶;:'Dh#N7"54&ʄ~DEnh[ m_"tOI~4"8&ߋ09>E74ux&#sjǧb>k 'lj1aG^IJ%M(Iy4g߷&3|q  ̣CkZJRۡ8mihTA`Jnb|WNbwFGhM0 -%/Z%}~6¼2uh8h s|P ZF y N~FY`~]dRPbƊHanShw(hrS=Vii)k,/ٞ@U6|}Qp>nڞ=0AEEJFЮW8;c[@֟@@ ##ph7k3CV`<+y:(ZI0ի{6h{0LXmAp>vcUBkM<'Kb_N8 l^9.^'p (xs ΁889P5(@@0:Dxy*"Pf wݻ.\;Ṉ„k,휕-0߸贙rn~fj`Mt?eӻ!R4T@.@)g#3vczKYOݯ b-A֠yfd C,\{zo \eNREw錺&=l5u݃HFSRϥIHvKZHSo#5FEFX3_4u5h=@rj !Ef ix|SNpVSPpsM}$z#p "hO*c%oe5JMi$P \uOkMt=%Gv;5SovAAIOfo5bzA86m.XjC~.tAzj3bY:?5p4kUloKNO%@al( +H)Gz0o6+*Պvq6k0]9J)0iԽ/#/#M9֑f|3KO丆|ܐڃd~CnR"glmdh>kͮt䷲7;k9~L<3c&J>УZ7NM8ӜZ]$3Љ蠙E*wȫH ~̛}E=<28PF]QN 3V Hy/i-|ǐ-,W+Q?h{##]p現 >fq*(u(AbwarVKв[%Y3ȷS*N@;(_3.wI֒#>U`P{_cM YdTWtbCU(f\R(gQlys9@q́!ܯO@ jN@})M<ͬس4fWB[Ŋ=q- ͕ ^v:B-ɭUq<f +,IzM%fk]1І12P 1(\kiv7ݒۘkZ5lM [4@2yAoב!s )< C%.@̲@5OUIm)uޗ4im&i+&YfW"=m#=2ZTX &r}M3*7DU4e*)"#|0SFl\7|/U_G *kjƩE%,'<e273ه ⺣6Ƈu `.G8׏Q`t6pA{h1?!`v㨶;7zMJ|r(h'W2DEنs ʙڋ@IZxs ΁1P*! c>- "f(ONB@ ue^Td+VMogWźIcFjӢmA_$WUrrZjH{ q_j6-V{#PXRfQ۪ݧXpxIU™ XD ,mIˣ36\Gy}<%DTȷ3qsQ"G3w| *̃1 .OkD8)`V ϚW*^re{#.(H8lKú9% `lC%GYQ)+-Y㝴Zlir8 `Ʒmʓ眡Walvl'ɥa⭹v8پz2[g/!ϤT{E[J 'Qc$AZ@ Ҡ8I*|aؘ|}ᲭLUl-| 4f1<$P"R;<\r6A<1**lnat:6B?wLljl3iA^LLpy+`9lXyq;9J&`l_f߇"nɧ(ĻXzᏣ'4Дȝ w[:0o5{ p䑢'?«Oa|­6Ch;̋1@t lT  Wn{ko&}7ǼoN*JF.݉kN a8B5 n#b.R`?䀩f83&^ HcWd&b:lig6JѸV_{vvl=h4Su+-k~e_l-4*h/U8N=H`4M]f:n6^rq98P>SJG֎~Y!02fv**p`EEI mOc xm G2uWn6SkyLC.~ pA$ nԴ-/iP =W̺ .*ثF5ST \"ؚIr%pXh"cP f4_ {HE)pɗZvi2O"3v܎]Re83o)m{O+pͱ1 ҆ hlף؀hxnȕ`_pL.%nc_KӊXűJasfs'ꕴ;IJB|y ]Ӫfݭ&5q gs`=B%-Z0y 453[I-'IË}J*;f- )hx楽L̐TGvw\miȴBi.K90Z!G^,p8b9V=ȷ`-^2߾ٛh_5{mv~n Mp<. ^kw8QCxR@q9ps b;(LO]fBYϸgM>T+k 5% &'^ @Q}w/uDR {zp;),hjOwBTdJ7x iV@W )D`/)`Hhhа`#DΗ2 z@xI~l1o| a<. [RY0uSNUfֆ *VWsk-~Rk?c^\gz$}xCC)ji ]QP}5Ψ# EAp|'yM i'@ݏ:zg#,L+ڃswl˓r# ofh {yJߓXZjhAY$blQ}g+f^k;,5WW<%`^WA&^$%_h* ʀqsu~Bj}!:%݇LʴdJ4y#~F"٘Z!}Q U=#q3s?haў֭\wzhܲ~|=3s1.U_ب qZˍf?Xx] _Ǣ5m;<5޷[Ѹ_mG=I xsH00 !mF|^]Dyf`L8s ΁tl I\B)_^B)u/KHZ} qQ9Ԛ#0tؐ 1r=iRw;4wV-ٱjQs I +V}:ǹ?LiuzB&cS!|y4Y 56 3Z߰Y%Q^ ׾qdabXdr랑^9U?:*=B+A+~4L:[#]yܦFc&i 'VRícj7C5iaRNg"[|UwMc7/s 7!X){ĥP\\ήi,/ҀBwέ r3"FJ ]h.[anQ%-&KD_ GҊPy(jܿ1rH|z)NѪ`R{FEzDYdbN]sL$W:;[_DpǙGFl~Eb9366U͘ =]'7H--&!YA(asM7"zRNMDҟ )Å^_w2 "\K=a seR+1nb{Oᴠ֋s|ڬ)-u>xܘ P*)W`$͸V.QԷqlXtD8'Wzԗ2=F]ʓ8s9- IS';MЭ?4˭2T$U(ęyx4`HoR_ͤaڤ&(-kJ١،`Tr@p-~TW4*vy+B06w[ΊQG_!#?("6S#hԚpK D@ `Yk9B|sYߢl;}phe,t}9t_0ߏ^ʠ5eVgDdy OacmtWYn5sM, NSХ?^ ?΁889ݜA׶Ƅ^ 0Os`ԏvc|=)ȷ:E!Y  8.yeE +- =ҙ؉ְ s0t )sLgrb0!7a+4D͊µ.ye=l$c0b+ ӤםaE!B5fW4}1qQl4hVlT [bvv\,ˆ5B,c;*ɳ9ds(QD3J (`QQɂD $ses<3zO}7]ݚ-zzp a?ʷZ",pΛK q|HD`c[˜I K-Bñ7]QmA f:(B"& B w_ hi/6?o'Y6E^ڴ N#Q'nowFS&ئgԡ r_nl/`7E5~K 5Ƣb 2'3e" mQ=>Q?X'uxmvǴUG0/^Z5r26*w h_Eiq9Ρ4WY{bPap\m+=Zqv(j JfP޽ZmKKj=/ڰ"_/jނ[2U{_&l(O C붠;++$jXҧ PJZj~eO%FuA{>p P|71&{\'\)FoiAtPHa?n(ີP BQP+!x QB?\<0#T.Sˠ t}VDYZѶiR> Uod"B'P5W_2.ђ^ΎPwtQ>Tژv#ʉNUA%szb; SfnjRS]{|IQ}`C<+w}_zU{bLj 88'k?'zqJj/I(!ԢFwH$'CBa+\[F>[@3`Jĕ{8 Skp DH nxKQ\,3(¯(WƉڠU qAW6_lnQhup` p,6u?8#>pNϻJ)YO`bڝJduXFMaGk )HH&aO/QSjr}¹W\{ g4t4׎ۻy}o#`` zt}կAOP<' 7-@$7#&NSbkb} 0S͠W:Y-b-S~5+'&l t[aEΤB9x$_?^w\q_k% /C0$@ۃ$P @h Fm{y{M7 "F|c }˞*;Pkgw>oXkP0nXkIS2Y2ֳ8YWm*Y}1p/Y0O\Vv!<&ޟȜ0oS!R2֖ԁnUq䓮q2^!l"֠x|)=] _ b0Z︟]^Y bҪ}t߀ YL"(HvH\ Ⱦؑ͢Wȃ+G.O !2$a.v D(H%GݚoD;7C6Kp\Ԏ@>o.f("0Ġu'Yp<\E| ʻV-J.5&4ϒX[,-|6 h 0Ws)9yN #:}wzG|])<^f"+d@Q"_E\O؂~]t9UA.O{t92j>WLlFR(hZBv0]sӄ*Nv;0@C˩YLؾλp*0kgҡC)>X|̫ ~Q20^_v6{X)g @ ;pګn6Jۏx:c>"b#*o6 p[W "c@wkd7nؙg*)Ɵ6v߄~vkmeE6P.,_#+RbͥQwBH!hԷ {aN/).TZ\qoAij`FOv&n@{"o(0 1?P @'Ak 9:@#@S4/Y:} Asñ-7&h=t'IN((G:)ĺ =|Px& ubv4 0l/띠hR4P )bMڏ5C.0@?\1eT\S7(tI+ A!&V" |c h=4t^ߚUJ ,'RSJKg| TKqޑ#}%-X"CC9xErdb.p /6A #tKAo(|sP:h䊵 +C<-TzF&L#2?l.5斨%og(?u@>k/Lvձ(%w'])Wƣ"U$G(^]-N_=13~܄LlWSku$^SzMhFLc"m]60(>q8|`X%aɁD0مMKQP40_O}p/)#gTÚ0kAQ^F(9C7&c;'.`|24,199hc2N(һkvJuQaI AR-37=Fwv;Ym);,VK?J\݄q d dŐPgC< ;/ x:;}ηa7>>8yfQ\5}?R -#k\Am\@@ (Sp [^47W@3 ؤ!(6Q& +;I0s:?D- ~6ź.5c-~mB@cxd=9]^pv W+q {7,PgՕ.)1 N>.(tPő"&]3j3RGس`-I=fw&;\Ib|ň ax4&웨 ^/7b:1~k&4HL4=3\ൔ^+4.b3|r(Ԏ2;觨rJd\ODL~^`A=Za߃PCxsK*85QOb=)RI}`^D=YIFF|+` ?-%&ΗcR%tcFL=+2T%ֵ2)ޓ`ysOɏQ/1wOqLPjBrX w=OT3K7P Ǎ#_AQ5PwX"F}}ֽb,W3FqxS5ZXIEFA|請`JiE'uL}(@qoU|UbiPȤ!^7aTS~<Kޏ|)s;LS[ԁXs#ޚ*- } .VEOEeAAzJ)# .. Yؤ0aauCvtiO!7/(hiO~uzZ|(1eKM__9rdБ.pqnC<h)qIifhOeٌ0Z֮h]wK2(|䴰&4U,Upӫża [.=ۅ:bɎد#L$ ߜ'́ß)* P @'8Z0\\'(&, 7@]F11 A EΕs5MwGͯ@bɸZm 2:$]:YawMxێ;|]!O!Kq쯜!qMٺÛj @,A@7B&ޔo'~~ 563D>s=/?o 8f :3@XJK_ҶX1Yheb@?^Ky%/4vϡI i%7ƁJ}:\ns[B [Kb_q@7(w| y!绳hQjx®}8<݇rc$krg 3޴QN8B'wQ0:G~(-!6ޤ/*-!'z"u3Pt{C2/;som{ř?o>E ̔KVhSx)h_Jkk2w+`^'?$a|8_N{eCбob 4fLøtK.ۦmG}8"0|S;e"M1i8Wf(e'6ܚ%_F+؇Lh D:Iw X`=\N{k뫅/oť=?DztA=  GPISoK /8nJ#J/: {ެ kcoE=vb/EC=桠2X˖ww͈`` > TS2hFґZ(J3yp͋aӺ۠=rY_n *ˍ=;Fέ$D&}%bIS26W$2̼s|իt@W\bpLVXGtT?L"hy@$T|R0D'$!bC(? O 7v#|}u$$ )Q3Xб-%B\|$>ez(TZP]_I܇}ه.b(#Pew±AҨJe5M9ѵwk ?OԾB7C7q~ACu#GB|ܪj2i 5Q mswVκ?WM8K3{hB7ǂ#~,3V=%)<hJ~ZJ>< 'rJk!mgwP|b^fOXYI>V ayxlAxE!/3bZmnl{Sd2tFA'E ~VzHH+X@9xZR!T]p:MWߔJOb`= 6"G෢9U"h{쁂m{%&|~ w,ɷAeR +j]Q2 w&^6aR" %'ayHf;=:V*lxRzH| ]_wK*O!| 3"A񝸘/o/>v!>`{qxk@ ພA>B {Aqu~&_߮\ y|S>̼TV ~Ωc SޙϠ狟:]r]q B,R䌄N-Q4/k ~W\2XRY~[EFNԎ v4ҁH0WqQ؎{ae{ ׇOaQ ZG7 OwJi@B"т?(@]G (@ )P\G0vMGE` 57K}?6%2 +q[ k>:I.}u+W0#zQQwZ7#91%C``]8A"IL0H0Kz%ňWIpQ=JQlCq꠨Vd y7b9|} vmVb9!* &H=()entt| }%T!pTM1"C :(O5D$ꅬ[.XUt<\ݚݟI*41ja# {YwPyWC(}f$E8om/i_; r䧗.TUX{J@$pV>0 ꤂|σB?(MP衹([Pf?P=THlpO/*6j=#>eB_܋$LɯbLlkk_T?^, ,ሰ*pq!vॱI*_p>RVҌt|c+NυxqZhWu#Nlh/؍DyN0F]WG@P:Dj`P}k O Z#uXf70U]Ҡ|+mNg<Y*04|ʩ)P2BM#'n8 0Fx(5D3 ䷿{-P/@Gf{[?iu:L[,|$7>C\(VAޏ; Cg Mp?4Z^7G e.QA1N' TE$ K^>d@D.⃰V2 /.1bg) Xc"v?9w 96gu@ (@Dj \V@{gv䅀xk>ئt,F 14o`@pAI)G ģfe7Uƌ["ZZdO^ r1^f {mD.$?@cUKE'bC_13@PY|Wsj/'DMJ"A|`*běa]i)Rf"!0VicQV;k~h(z = ° hw2{;lZ_ݙsg%,ד4?lE>ޗ'5RVڞ%ږptIZ VC(x)䪫ǾĊn=Ħ[Q⯇!PIEEzc"eUyU]UݎO/ <=盶y5s2P։^)|1#~KiFؽ)8ֳ_|$Vx(U\F"M=uTEB&Vmp+1(ǂ7U0#]ctA0eE~{ ()p7v(>BH}5^P_) Bg@lT!Z`D%_9H0,_섚rׯ#& 32??.CPk\,8yA3MFE!)kߤE56+ ƥ2Ɓ;AoWPʞ܃&[T){_t36~_ӱYmyQp֯GjY@mM tks"wٽoPM?h6(}+!B*U:ǿe T:IgD֑S;y*Ml [(œ9pms:b"0ǾQy0H b0]ڱfL"`]C ςř+\Nn)ZY`tH_6z+5r=sl&՛A1ޔ;( (կ֏0 DAil_9 ʇ+Nm~G F"B-RȓG|CN%-M*:4d)y;q6Y,:+qw0 @&}("P @w$ j@gbPPh1,.ɇXuhB>+%sPD1Ak,)@ѹ}HL˻X*J,Hȷy a{WL1!s`Mm&4QQ>Cz } z> I%w ˵-2~Ob%U7A ]:T'w#akGrL Fs::>PH B4,I_IE>.7:F_&\QåDŽ}#9z[v:_wԴ\po}1!S@ =ɅMmڹPjJ-@! ~=5iN(s&@LU0-O<КKokEo=.ߔJT/{ (M0O5pjt~ļL_ݢȤzI}9R-fiC"-C?>%I-Jx/=t>L+πY՝%Su^º tEq5(tL5书hBI7 4Рzx´@quv7Wiי)\;\:-^3|ۼ޾^''FY}a/7-YaEIsGvC)\v?ݾLCr @7[N<W~D-&$(D؍@-f@ ` zQWO/i)H1dxcuVOuXb;P>yɡ©q%)Am2WpbQ s>Tn]K 1Ս}eT!*5u~K&ɩ b$$}=O?0 ! A@} PP @"zN&$q)UTW>ףɵ/cSraFD+3z}CM /n 0-_} ̋Op< fLytմ"]<5qa@#u!x@N3t}S)qZzK m+jr[{Pl2~ G(h/TljLQAPxSq-qBHnM;B$窅pu HXô)][KS6HC] M MAWfO#c%aDAغ[>h[ʬ}'dq/%EMб㬗2;p?;pG@l lxw oP}4jcsʙf6&)LJ}e7<x_d[|Pe3(PL%o1Sxykq7`^ ʆ|*c&s@թp3qۮOl#b5e g_@*$Hj"=I7D;|JQQ_꣑GCq)L:u|X{Ǜ@F|C9]7C*B= u5T4 {tۉVyP~IFc[w]OUЩZk|^[ӡxt am*+a!(A7I ~MT3jXL_Im^A;bC< Ò k{keK]hO쵠>9? |x#*ˁ>Rc+8j=t G|<1 7KRXg[ .χ!qQP؜q L ?'3F"?\\P @x) %@#bޑt{P+ݭɳs <^?A`=c:.~u~*%!\[ g43-O]Lb.DNޑݘRpC Z?V+V(0+ !3co EˤH_:spZ{``+ ̅Yo:ol.o"qDX7M:KB@ i6'> 'E5D?8aB:@3 Ƅsy !C׼χ@94)BC8(>h1L†ryجI;V\S)'~!+㺘 gcۧs>> ͡ڐH ._NP:8<}@a.+XYOA+mPԕJLOl+rtkc^f+vWQ洖L "FJ.n,@ TuΆ"y.s~WqTT)kRjyBuA33|-f/[gIk;c8#VDD]bk!_эz1N"zIB@vm__= `$_&#_4&j!8~?gGA_ʷv-] 0_&0~Nz5q.^z^·1AqR'3&C7e[_hptaLѺZ*H)ÙI[}HwcuGX Ǧi%1AV/$jWu\ȸRE,S t(kf=mY&}4, ]o͂TGDc?0q' /\G)%+lުPF'~ s;ƿF1!,i úiG'@,.AA+@eO~uwPWx;Wot'?d>6w;;-PМbwZ\hW9&O_94/a/jV;Ply#+|7 6(=_ZZ-"[w2 Lhe_/=TzjY NIq ?kC!CFu7A8 EƛZSNf$zvcץL\wv{dB*E5/X" K6G[PxB/]0,G"4P{ T[d +0$-Qm#qOgqC{W*,Y'3r+ˇ︘e319SySe/3wۺA'O%K@97C-;cifT,gZ>:3a=jo9APx[/&_#uPFCfgeV\.`4ų婙F+gw8 GK)0TL$"[a0X% " _? S?2G<Z a|YkI#k uZO`J܏,^+ F;8,>۫x O?U[ M C޻i| aY{̍rqM*2ȉrk m_Q  ?@ (dR@iJ,c_^!`l!#y/7XKTrLWRߚQx 9ZZ?]_4=c+ܙL}-f\Dz[@{Cb'2.0&=~S&A,f0_+GAg`(~c7D:B?mE=B~0!>@HQ,v{uyi̥Iw ,+e7]ENZu/vJ=R,=_i_=g ŤX[ylxQ6qB !g+^':M z(e!f ' R\p NYvF_ T yw| e/@A`7%P4Xt 3×o-"7x3qZvDPkcկ|gѨv(GEQ9HAJ>~ 里4l%| kl"SKPp'-B2HV9kC p? 3." 7>4 c{ {tuչ+C gTz۫reύM?k2AJ)dh+r\F&Oէ^ )[6|*xki)OA4a4~m!݄wi}}`9f^7?% z|OJ1 ]] jiq8bK%nKE/C/%a|м(64J<(@iK|'@{2ϷxxIh\K3_j9yv * Mϫ|ZOE5+À*(n @7,] #}K4Z6 _S+;W&:@LǥVy.5C;抴4a 2Z5;X"? `lgE$(;xP @'R3(!܏@nCw55v319wĩ-gA` +6#uC/1UOW??77xK;C(|M{aXNNkD DђHVN[m̖e2 4Ap_$;qN(X$|z"H`@8 bA麏 K'$&@YpE؜xI RLP10f@6J,P^U _՟$l٪@QZza'a1?ytN85)?o:wtR-2%(y xnX|MRo?F7AG]6^y }}HʊM]movAɐuuG}r@^@\m~(ϯ2 w8 du2xo . vOWO|a>c.ΏZ9p_,w>9qʇPoxr A3ꗤ( ^TJ`Bi!^@3 gL RZ?8pv|_@v"6)7?w3w1o+)CvqGZae뒡CrH3+o,cGblrN.9ۋN]oH{>iPǝ dR g@IDATci7p3| wiLNm+T.މv~g+)YEߚI~{:Lwwk1@NW^' <nsz^SL1b#tix/ցDuB( Gtto}-umo|# I=zIxAsd XJ#s_VP/xS 6`}w=J!>CIX(v'{[*MX^xSVaGS@Bҋ60>`fe@.aeC CXE@l&@{N,+l/jc8Q0SKG;͋#MZr$ D."zT|*cWݕ`;1PۊhiOeZj5 l*fGWv[U;G*֥`|)&@лXwЬPt<ިۜIjec[@v%Õ߁O[Z &Ik|G@{ↂ g E p@|xO)kL2}ih2--ՖP/#m/0IR900ͥ] 9oaEҶvL{ؼeOa =_Ds< , 1~Po#Tʿe %h)t>j9Ԓpڼq(Uդ=yW[|CO۸I=0X#9[|sXj`` ׬ R;Ӯ y@ru+M.`.RП , )&A2 b@&H (@E K' 8Jq5g LT} rzIM*>Q43$s'.6ɏD,ID0"OE dnXC\5k߾X?'vz3kH/vN  o|=Q6+cILACJ[Lz U)s@w}Л=| Av3Edi>JE L;dn$ D cM~0\!"7.EqRÙX-Mǭ!woZ7gBs)Mnu/j@2|yٴfWT]@'&}Z5R"/7@ڗڂv|H A^b'vP%Jv'{gŌdՕ6_O7j 1uJcRnPr rBU?{>5ݶzaB8r3f7Zz]f+=;=[K *Ķ3 E7ΑŸ'6 ? EV ==žzw opAˤ(_g?yݻ֚+OAhydj55z!0[8F,WfhTƲ+f@?= )`5fiQ7ğuZoWIZB & S_zja;PpW( GM#yW)[I%lɁ+FT҄~_8:L>y)_5: k>a6X;-Yso@O(ۄv/v4%g@{jyaD!ӁI_\G)'>Cg}T鐑]Z qܧe&')y IXְሶvSv[-|fW7XXPX&e]g+"H^D{8.gݛO @30m@9 @!O9j8#tJt. p;E#i 59`Fz$FCG^Sg&Dn) z<#wpZfGvU0-O$~)<`-jNH` jZz!A^<>c}dKՅ1`@ZoBB3(r@OkK24=3R!/i|/O=hiHu'INѤ'9$f_(uZlI| OA={A 5nLƒ0(sae6?Jioǚu ~Cs$}.V ?_j1nԃ| .#lX=V_/-cĚ﫬=E0saQG>;WÇ96UQ@-9Csdn@agB7L+$n+e_]F~"Чfߚwfeß@c`+IPx7#@PDK3  (@ 8Hg9ya2e~pr:CWC⇊6@2P$ Qfou,Qk[QV@4i Q~"v$@1t"Rxhxwj+KV-]cg+Kue\l@uIrstKN#+Z {IJ_o Տ!-eD:KZ*9&W-!gJ7jid#J'$Mқ`Õ؃d擷HZm>(6n'հ]Ӆp;z˨٩w]|4ioFI]zC*iE!mF`$9o๷dl7\k=z'Gd^|SkE㓾6 I:룞BWojT%@H! hs%_"`zF@M{'и0,&WC{ kg;xԲO7~L@hN;O  <<|"9xOM\ kNEyI} Ē/ e:=5[Ifԣ}mq]SX֦-n/}]'~9.c<%-z! Bs rrQ\{E0,R@-h/TÎiDZ " :5w6D.roh5%.HJAFq>dH[R@Bi4SBqA'4Bĝ>`#`F>'o%NJ"Vg((EaJx> {4q:z^=4|*)̾/])@J)O8oRFqMM7+Og$́Ug+D=H@ UE_(p󎙀q#%䟭Ԣr@ :M̼fw.:#@UI AэH}ɬU86]EfH &3KzK9xresOntmux6C}lJ* OW?{ f%|ĄYAܟ}Ky|y,@\?WFPw{zia,r;A?'; 3}O:ނdݶ_ z<ѿ= *>C nW).ZEx+dv4Gv0..IJM0\EMxEC5?Ol厁yfk)B @i489!n4i;/^A/-.+L>/d_&|\-nq$*sg:6{Y 3P~]D#`Iwu񬗧o]("v'>&ۻbE oٶo)鵌^F4xJsm*WJhb;mgBAh\Uj'hO^LvW;Bc5 wҸǎ'7T\?R*_CIyF#?+//;;_P9r@+́oK ;8H"6Z(0Q7vRj",j{n=:7_Q_Io^n? B1M#. %:mӃ[!X!G)Mh?WB/"u}!:f܊7uBq++4vx%PGs ; '`8J@s@@LM+xy*/_)QPQO#q'?2C(֋_];<1 )cnM}glXN CU p$ā)0Jpo-Ku QXz[")MEF? dIPgz..M3{P?L1z&\tn}ٍX+(_"_?$VpIۃ(P*2,5pRV&?5Sst̃P?F*4:PI[ \#0Qu@ ;@/[ݯ+WyZ8TL3|WFH)WrgkL\h[nE=Kd(磊y#n‘8 LNZ]h=]oK9Zۍ~#6d(m1n%0V+ zPq1'w*TP9s@NxM$,}l-qO\ʱ74$Sn9{\Ꚇ+!(rop $O7c¶rcex(n=Xg[j<ږu!qkX u83+Cwbb)ѥXKmw{QOP" zkڷy(`?h=PdOd1Ɓ[(m@qL|΅*q_܏fy~Bn7'䷞}';u #9B[`@wz0S ۧohܓȍ՚fvvu`iZ8 &Uam/9wwU)GsP\W=m(S 0 ~o|"tя*_8rSDqHiS Lȥ?g'C0^ӞH*"fD1ݭp`rK72vwEu S6?2%jvw$XA7=cDa򮑛 S:H&MNť)~Am+F^Ls=j?#k?m/&T@]2"[UyUrX?Qã%ЕN4F̘o Zᰱmhq{𹾸)o_{4=g 7tW 0oԷ3}̰"/;1 ϳ䂰g^~؁Za 2u2ے.$2ǼX-o^*T*5E!zJ`zyyonm9scbW /cm%!^D4,jCŚ'x+cF%fygߞ%Bp|#G Es(IQ~qOA5/v[)(=8E߂|ߌK|{@4߂4R/ ~kZ+7޵NyHw֖ν*{C0.m&c'U !! vF{[ jh wϑMs|Mu[Ku 7'yںs4XG_||QNh#ޮW1:kk@[w??͊\R~)BΆ {X}w:(R%BVSjduh׀2z΃Uu>ts>DJ/֚Cn (k0|]"_5s9{0W=vb›\FIbȄ~!?#ʷ םѱ4QgY1x?IS6yz;ږ1AAoQ>C_n?ZFqkr7ִ= NabyfhlD 3?oJVNb$QqDFr7;lm~M(?_5k9ތG(Ĺpגd{֎M~*Hfgh k)k]R}xPP#(C8o??"5TP9r@8ď\Dy2,q ]#RN%(O(Hz\QL* !v!qes x{\PRKv/+I r!8)v!0ȗI |ɷ) گ+d| yYGiy 8@߮<$/WlZ?QTSa?8?NAKbLLbow[$;x[/;W}Q/Lhǀ/yԯcA(ԡnZte(9y`lO;C?wwV :˞x[&o/Na`L@8$˴Sv8h 6xKc>#3ËRy.IA Iؓ 9ZO7#4ř^ ʥ>1t0!;!۝+#`؏E %wh{3+x8E'*MqumMa'kӑ҃SK#kg@{r_qo:C%( f<'$v_Dw AIw}Yf@u;yW %O%@@)>YCy- O60Fn =l|O@(t_P !*㮧1߈10>jޢF8lMDrox18👔5($ָVJ10@@ x\8R?Nj:B,8_CmQ9OD ,즥PPmnnȊmw0lŮE[D,("B:Up!% :gS 1k̑ >|1YW3>bE=Ưc]pj\!?Bn{$3\[J^R `\yKwEއ~^] jf=o^M̝QͿ'*TP9:q b}U/T[u.s.R&t[GCt|!.Y/&F}BD*1,EҲ2(qsT* O-B~ (h7j~gE=ohB8%KX9PnQh ZE*Tx8U;YY ̷j?ՙE?- A?W㫽|1G{ ɈZ!pzjQ#86("- $ S{Ng~)hNUB0?BxF `lqh!ہÊ i<֪w]<+/׿5Q,Oc6K.oxk5~{?MרAU::ꙗD rϞ}=fOmقGyQU 6)BW }K V㽐:; {6XW{Vn>=em~D-POXH fFE7vѓup%jm)$#M'*In.Qr Q>T1\hc| @s9wɹfQ>N@P /hi=Ў`xSCǩA |]vA4^@ƍh-C4#ߡ["ءi=UR5Lb]ЂX*$[^qiWٺw$zO-i'# h0=G+ω?ԋP9r@ˁls7FvDݱD27[ק.BCV@_HMrG;W[s` \'/SG8%?ZRZ86cTyf$?Շ2ߤ{C,d&$vIeQ7+A!V'SʁC/0@vY9 kX+?VN"4)vО ſ(sq{W`6 F ӱG>+C7~?m# l'I3`d"[S//+sAm1Z|1FK}d@`@!@mF%-eΏ%pwB '`t DoD ԄB!dm0ځ` 2?jfod!wێ]+6c}Sݒ-N wE/c1n+ \a0؎5!l(h-[DӬ/=Nϧ)fh,~;|-LZ;R3l8ɤMr8ͅUSXoR. 1Ml;8UB g<Wv@kuU"8ܹfe3YO}fye#aojz/;DFX2P0vs4$PWIQ}G,S-0єH};JEFHC(Wf8][i,J!?4xsAÔ87{b%P!/.ۄFZSt79t?B `u^ W W"kE*8T5MAzUmv dgegAXӹSvzw ig O느f^D 1@]:q_ #Iy#8- Qu>I}&Ͳ!ĮdT#W3/[M[5 ; kV&Tˇ0uRA!m'kE8o)Ln ;KteP &HZo!@Dp !񕬓W~??+I 0T!>P 07S`s;IrmDN!Oa6 jNӝR.KԶݍY?Z+jGj|X%E<]b:,0 |!\xX^.\/1%QXiOp+2({ gne݉mĻ2/FRD9;`K+S?Vaz^c.^E*^y{ļu<;@35"?hi L}tL>O##<$y?;6K"p/H0 ^Kmkw6bg*x^mB ?g#H*X|O,ߋ*(_jcŒ?Ҷ/ P}o 0j hG/-Dz Z ҃ѭLNc -EjM@4"@C@=4#(ϗ_~Gԡz%*T^H= t == ?,]P]AʭM!X %p-|UK>:BNڽô 8.~KY9tpLsjx%C1Wg_#.ijh^9@OfDU)A0N~;en%VLIZeW2|0/\(('E* az1} UoBOL uCa=v׆>OqO#R卦P½ PبVS!XhS2ӄ=\xl(*[vNi1זa:1_Q~AH[icSsJ >ʷ~s8<cM1^E^PDC:9n;u`4{2^Dfn3c93~gtv4u>'2zm"_İR UT5Q6OhJ#p Hkq!7tG}?ɴ 4-"5Q~ <7`(H3,뚃/";jp"+ qI= qdf$Hs^1k8vrN1 V r-M+V~3o>@ #uȣhN[@+cPU/r@ʁ׈Rޗ$AFW\.@E##(4Gŏ1# VgY}zyۺ=~GxP?9$D6m3Ȕ> <0_3RTB7t |33ȤĠGv)K!(k dbTVr00ND{ݚmtY]uWP1czK$xpE?J4{rO)'`Ug#ާr0W ㄩYM<`WEdf'{ài 顣%{DJqdI5(qw'67Q9r@p!G#p%X #틴/D>t>'v݃K h[lē+, Lw\0D:JWb_EdW4?q\$A] 1g鈦."M%ltB yNZ&:{ 'VҜ>0[ MUp=·[Iks}RRWCal( |-B?,ShP,$ [w ,ha,uءepud) X8Q2 bN'>v -f |~E@6D@3/z|o")]X-,jAxy@{yjHumZ Sdnml;l%h<r`x8 eo62θo緺Z1?u A{6tBMrN 3#oaA q;̹H1zѫ_x&znE_ګ\%{|c}AQwzV.5̽'D7Qx{W2w{9" XsZ`B-+[N3(unra6QYÈ&5!^fs$9̗ ipյg6bp9c̣Sj.7gfNݩlafسn75} Duct{gDTYj(ð7h?%4G558! !`ۛqK$(D0R>E7bVw|MJgGheX޳ ~K@(4]}iAUeΚ!OTFX37 o.5s0L3~`Ubm+NHA.(J+!WUʁ|Ņ;Y4# Y^A&h6ϬNB{Kw8m{߅v%,f|xۭu1ݡ鱀d4 p񃛖u%ߟzQV-Lr(x}?&WX>݄ߪ- /m(a">PMѾhG \Q+πa(3+k6km筼6"D"A{*ekpnW<՛v\NeðD/{ȢCx}DF?  %rQ1Uܒ ,Kq+~Eϛ*;c!9aJ-@Ч͝E0Ou}9jzg/6EL457%> )4ȿrcw"~$/&*LF$m t }:G==~ Ṃx Ƚ-A>i; 7#ԿCƱ avt?E;s^ :+eO OKm~+" &!z,H yEU9R[*^8<'IT"6[jSǏ eLx@4<ܟiRr<:˂b`_p"UbJDK#n p]pdώ6h}m}e<𑥏Z Zٞ>ЋXQkh15>05~A|OA۰fmSpp0%SejGkhbԐB`(+ ?HF !w x ?S?Jr Io<8˯m0T(gSϦa*]v#wB8UhAbky* ~fptbB K2uq$ZJQp lڐZtYo[iojyؖfSbӃC}VG_3rҊͰ~23n5EK655|+&"$ZV(f9xIAva⛞EIpsb}~bi 2*u~Uh*=8OL/Ւ_y{,;9b7&"UhCS#V1/@Q!o >c5"wzBxV۹댘N 7nyj n`CH;7|lӖKkPivML}La=G=/JEQyR_Z*^/h&hOhj’;t8Ʊ !žգVK\GtatoM hLBzKx4:~pq9^!«!*luO(B/C:ux!\9wie?E謷CMuX5Vr_4T(T!bA&SJ"1o-$gHB JGNJ(sw I2?Ԙ SlW`ײGA`[)rX/]=_buxZiPvW^ wG!D B 7JA!d{GkWY/_zr)Fo{MR5XM`gY %q]]hg?9Q^j8?qm?zF "Y>󃳞T ;gh[c}z܉qpSU]دN !7?=w? k[OK,+r"59'iX$XN|0O.EPh& &Ж &f =!xV -sehZwmoin(Nv񠜀L+G $_Fƈf9+5 Q,h|_z\?kM8 kif`\~` ܑ?G0\e櫔ZU' y/%sk~:N'KD& ٟH%w*S9U*T9@S4)ƿ*]"Y;eymZ4xt2<6YX1զ$2elm[R#IYpT !nB0_Ɗl؈P]OB2\i;*diO7tuMMGҪ2W灼fd!I şxeskA+fp; {]=x 9O>>_*wE-א{%zJy1Ǐ0lp*46vu[pv-E29^o!2=݃qFR^ >-w&, œ)W&Ä4A*L Dq+֠-AI \q_|]xdX"!3+}="wj0)jW.'Q9r@́\Hi^h7h7 \ӠD . ƬуH! vjkB.HV]O  [0x0Rhà pIn8%CҚ5 aHp|&B]>k +XDa<+m$낫~wqMVĊHWc.xR鉵Iӆ:` ߐOdhb]P6Y+y3>ZZ kgQI[C7$alߠָF>y@%b('sNq6|×&'ՃaPkput5}@ {ӄIpIgw-s~WC, _a>z FQc1İEu@k ĸy弁&-z/m6dM{F; U1)%JJx˩"16rvaրIx}k0~6e8Hl>109ւʯ-Gכxf0WAM$+qfNE.H[P~\Sߌ8꼍e"Go c l>¼T#̢b7|—p=~EqhơauWta C4/C~ gU1_b^{o6I2 21n~ 6%@Qیad`>Hk8AsP;y*V6}?N.Dx؀x`I!U x.RP Tur@ʁWJ A(/גk ƫFDulALj 4S8}e[_U;ջ^U\W;\IR7X ߨo6 zA/>>[ߗ~V7s' 옔.D$fTk#h{']+c/)>r6Z4# GP gH*jV>O/RKřaFЉqr5fM~a0!J͘ʟ`R[1'Ngka*KgϏ`=b;%}E6~(i-GHt~ BnXITXj2p v(HG9Qnٗ< !+.^~P!t@6rAz7 c/ P"H ތX">r±|EWuQ_숫Cx։t;E0ENA^`|vRJ&~,Ηa`8G~vT )aCzIwr]I{o&?꼀;p7>$SKןu+?DT B޸Gy.ߜfhɞÿNA'֔߱%߳~+I;h~Hc)3KLu ~qsO| @ _y}jv̇޾׸ְ8#·4=~=@ Z~͹ӘΧ-@TOsklgaHgi"bkA]=zQ?5+_oaNz9Ih]#iq~uviS%KC-TT골P9rui n#  9N>b xbbBhmh@r"HwWg)0+AмCa>:[(!euo Bk3Sw@":A'u[vW{?ky2o"=i x 2/ ien;D3vۯA@f\1*A}.#r&HKr @/Sn|4M{ m0_ޤ96QsTv̑~òN=lؓKPXz?-nxWh[ + A7@:naʺRk[^io#iɫ`.Gq5:p0Tp?=C. k P4sS=`|xOBP#@[ ,CR3 >ڗdqis3DLM)*^B."b]cp zU(٧2y0^y‰jo[.BA{j]tgZKF.Fl羇ZX؀Yw K W8B,ħWhjh۷*UwM\k-|J~[?-ۓnǰ`m1'zߜNdݟZ3ޖJ["sekeaI鿗gͦ{ywz"Yk; [1t21|3rAS8~}aM05+cԔ΅- é^Zf4NŴB iݨayCsғ 8Fbx1~j[6iNy`6as Cr03^9RS PVP ރJ]v%I o˜a>~G\z,lܘ~Y czw,ץ -]A'gzh05.N6'}_?zoG?_xFgy%p{d6p@2Ǎ*ҞC+k8]M#s49,̈T0L`]#8N 7p<%] p%pۨ)M-!s[+w]iA!=_f ;c t~gjk}yu./ 2][t_@\<^xtQ(n=z YkLw>2G82Uf]W@lM/,ʭsk`Ex€]Ԭb"ݳbv sRSHc~qt}|rdL|my3 RC<'k 8Ԍد廕Vn$ǻndԀ)12E{[N|:;N BYb>c{"/LN]F`o_[Bfܣb~g%TkZWxd^<[W!YUAzw}X_WNٽd$ 7.l:A} 9pÍ9 wѽW\ [8Uvq+3_sQ N u 1X~@$\f G;ösjNpu-ؑQ!uGfZ*1g{I18q'~@0? {|x I Rݔ\\7C5Z)47Q17DP_n¶,s >ang Hΰ7J\sE+-hD GhdO7S4 !JѤ֛pX\LPQh.LFyoo̿r)< y,<7nvas= .zywܯ@QKp@~OI+AK1ok.%w*z0`DDpܝ@/yݗYx?]]a7Rūf.UŅF\C@!\DL5~* g׶ޫSg yQse|dÃưz_@6ɬ7hD/?+ěljh#uyUs5{{'QEMԷoZ3܉dK6Mo="1u=^_tS3˾;+ΥY9/W[u}.Sd2mEA=_;Kp:[ݤWȝ\ p%J(թזYr'Wrj -jl4)qe?C2vNjɒ1xSC4o+mIn×;6!CNs1@|4u)jqjj[Jj*ߥ+/{rk@YpvV#±lPKao]X|W!5اAU!{1kȼOg5k3nqvYhǰM*@cgl>b#yq 9dd*>~!CMI$r?YV*r^^I疝#[z˔ޘ&վ.&鍖wk໸^Y\5OB"ZQ﫥é}~)k x~ÕlNJ٘JAґEWx?do;ew} FALx.,Ee9+NW P< .PuOìx:iA צ~~Ҳ`RWR%9?v9ۓ{dq(w2C ̎W1v'l^ox^f/שȞe?{8 hͿN`3 d)n gj݋>qqh ryt؜zflIQnD~OZ'.Hc'Qi+lV_zd/zd^|(qh?iEFELGNJ y ܙ=80}8&Ч<~X ʌݩ.?+BE{T4?*Cɫm|tLW[hIfqMc:!3-J\&dN]XW.jZ3|"e<^'+~ξ 6g@c gޝ_0aܬ CJt, ^tpF}]2107)/)gy(U]L&0p.JchVX렪G=3 òbVKa6&*gFӒq8-^*ݬ)q >y(0oʫczZI څڱ Ű շ"zԶaXWߺs:6"Ǭ?z4F$ˡ$O1cp AKL |/2#h?tV{JM56BnG^ :Ϥ(2~:P'Mxŵ#U Ro;q] (D" @` F8j"(?3zr;.(ڮ}|A2l_M}}𵿂1mP#Ԧ.a;ulR#Eo{d1Zpz2r'`hY_?캧W3&qm:6uA^ى/" p;Fiy}V2U˪g_~+re y O1$Ĩr7WjFZ4u!N`z@N' DYy7޳TAJxUA|xlK5uM0U/y7MBsQWgǔx?Zt>U3NZ~̜7 UfKWУ۲D'ѡqIW+BEodž4o"7_0g!ngxV[c0Ew's [KuTќUѓ߀i7fHascyDҥĀ1퇶=$rg4lvlަ<ձY}ͦ3\p(<*/7 zE(w2?@̃[>˿ǢÒYJ[Vv>7\ĢԒfL1:<-afc.^#HxO.81$E,a̫Y0=rQӣ.BߞD\޲\ -5?%K&Yfixl"w> Bbv2zAq ~)HV8SkwDE>W,Vtd8\fJz{!ə'hUs ;+~721|'cu2װ,"%?EVa.0XpF=a˜ڔ6=:eIN.zic)QD AJ :$Yqե19g1j^K&@Vƥ9OlM'm.@x+w~I@;p%J+?OӋz*sѢ8+io^Z Z=^ecFNmû=+pn~Xy&(8{x^ǹ>j7h뚯2;I9 M%Ђ\zT~9Q]=ud|&uvaƌc|Fa.hWkgᰮylڜd !+x;W!?А@*E֥t,K=Y&wr .D늭4; ,#H?jdW2lwrBZgͲU8O$s&덦EL& O]_&ۅJ][UNdyJ;$/W˝YaMCһC-evG#W{@b(nUwh8z˘ӑcF/arЧ:MdV_X @=ǺsXgjބ@yDS8TMX?W{Oqsz6W` Z`{'Z}-pKRI8p#\ B(z i4MAcH>\P.їxh@l_j$U8 .[>mf7sowρ#cW$~RطgxxGX[|к c~:z =~q=LyY8σ_eJeqɕʤW뀞ˬv֗}aKti]G KC~lB&ۋ| TV@HTVmA3@RCEq/5$| ! 0R:35qn>`\R(ݺKǹ. tOߕ+Ws h"̓L0:9SFl%Y_kߤ~iJy r[>syZZ[Uyu1Z:yC#C0h cȆ. 0#teQpw}O q7~ir^v,\BF6ޞ󅧛xoA.QVz.<>_o-z=TS)CML6% ˑz>fX C-3|4YQo1hs^Χ|2ޥsIbwZXn?s=g f9kR2+R;31wVi!;v6(7p^/~i};XN !S@g hAFGuSUG8{>k(% Ͽ_#S^AWUp5D@kEGp̫9;Sy?ͱ7k5x庡L^ Bo$T,{@mv`Cb藴g;^8ڟE Cz(ye0ҋ>FA/ݳhᨙm3Y*A~ҩMszȪc i|hA97Ѝ스rn&rQt!kځyzn=#r--;e tL9rOvٵ8ϷXnjv-#/8J: `(%hx&zE_t% ؘG-o1bng@/zTIHFqpfdwbe Sӿ &pL ݧ̅Ym >~B fv+3<|/>4~v2ݟ0+lDqc{0 j%8f |?Z-9?/^`Je﷓:{0ۭ˜ c; x h.zay}mx<+ }§zx)(ClV"{n~ԆiL۵ V{{ CSqg:@*$˃^\n] ܋(dn;^h_l'MRP2 Ktp~eS_Uj~: L@5*9o^ >jY7Wb=!8Kc }4w[=Pk2,2={ /tO&jf`eR> N~\'oL5PpN^+W "n0(vȈȄGCrۇP+C*o)(@ЂQ]XAA pF!0rUсH,s>_liuxx] wm)18i#1hߘW'n9&S|_ëaf'ax%,UCYG]ȍCK8}4+5([.<%%qj=dPQ>2'uG ) <*rwr_1HO L>~XHTSDȸL+ 4><3kyZ-Wl|;{`x+% bzyQ`>l<`?dxExXxy}\BWH| 3PsHA b {Qu?ݾŒpG uy8GQ0Zb+8Uj8sdW&76`"|q9H"Cխ96vڪc([+Ѐ^g]cT dW 6v$:T_Ҩ67~\zH+'p䌅xM}c/bL,gm- F 8^h z**j~x"$.>a+yZsd} v;ny‹ ?(ݟkggoe0d2 ? Jq]*|d)qDhEpnGCn>WJ+?Of!PF~VEaAQO ""0H`AjI>/%rc`&0^w Cs@Az'oQ<0Y5^),? +,8 ԯ kI'|A}Þi>͗z"ȝjQ_㯪rSʎJOUKŔƱdZ4Yvs'%hC&יe. m5^|]| C جC}j9}U7~ܭ w.}NDnRe[#]B7.oh[+W Zn}_"tTȵpҋJ@xEEY#7 G1?dnu.?߯csuRs@M1'ȩA--8 ope"dB/8P./N)Q&%Kq1z {K ?u(F75^l)"o_.^pf-uN\o6E *|u-bi x' >8N @;[*W`24A VТ,EQ4FշR+&:`H }{˶뉕us hYtʞĶ ͣd~Ay!RcoW{GpHF٧ʄ kwO4HzZpiM]905YD`xZ܏CCPhkRfJ b{zJKF{=2 ׷yS4ߖ[=YS&+p#elrӉ#?C>+Tc%1-$ܓؒ^'N<>?6_] Q"N&`r0B$$ &T\4^\"s!?] %P<K!wř\ժc j*/ !E6cu58Ugy[湨*:4K@f33.P'鲔{3oqG9T16Emu<1;uůx!M|wUTb\ԻOcu xOO|ʼ1H + ZtA:guNL b ǩHV Lt9{Jpw wdqoGp#f o{ɮ\ S$&nNa)meM!3T-seF=)Nޞjss~f[r3Y30^I/mCVV_7miC7Ia oc$>θ+%.#_uSOKzTE`^Kvz@KVU j?_eLCNX1WAApFvzs0kwr%J@l~$c`^G)*8tq|MSѧ-ʔĭ~6)K1ZgE%:nnh_qb.þêsf-N ?˚ ţjZPJb}Md$4vzZ5bq]Tn!~NmՉ~yP|rM#HPdj+EU9qk;(A-"cڞ,l$꬛`NH@;p%J+/F`oaA0Bਗ$cpP@a<?˂TɝB-z~9} +0V C`} 0n|`{P{usԼg߶NZć;Q̅8:mMoE xOyoL2w1_X[?=> I l=L]>="_aȃnʾ"I@[$.!HC)yx+]S&Dc|1KPwX7+sv%J~O_^|꣮i3HoNCmggXvhzCky[YVBNa2yjOt45taMUc,L_{˕Q2eGM~|Al1}úU rWyQw> WdoDfF utZo\\\At?x' C\P\^&*X/GpQJ@Qđ,+eN' J+Px9`8@Y+0X^̧ UP}QjO--ʉU ł` NNA)厂uv?i1a$RaQ5a̐ڒUV# \xo+(\~$~"jo@/ _Pu`X9.Su}c?^b s~}!_ӡ)UB+8 ' e) DF}aC7ǿ ٥'fHZJ~#gz262~t1+J<d> d,_ >PYua1p& Z-M-5w lc\ad|+hq%hQl+(()-0t ZS%t01i6lB,X]E/N11+A+A}~ '5~# cp7 >!X/W]`O $3ѯ}-v-P3.^Or*}Y`),}AM`~K*pCz0[S0(-`9OGA`0tH8Nn{\ 8n$PW14N cf' cWP#0X -i`y@ q'$LP ku9ZT*{"|`|c je%TM\.Am)AeAl%A:.ڕ-\z>&G_ | `Xn8ROV d |R0\h-ߋ+8R8q_Ւ\@-#}F%r@`8qw ~/|!h@0Up~:És+q sOו+WǼǁ( P hM!&0,<%0$ u5$Bqj&? #Eqlq_bwǖP!up0ϋjHx.EC]"g#-cZ -0 ގdషcKtٸޛZ,YAU9A:A |IX& P^8EpóqW$vǕ+W\ {&A_łTC3Q``d /SY0 @ S5A-XDPht=5'0q}qܯZdɂ&^G ;`:j<_3u 4~-aw\ K臿VaW'qa ^ðA8Ǵ#0-#"(2U[M9az`y a`8 nRn%0HlO/,s8fovbEu@oz3.8ZQ ゟ2 ^}pk1gut ."vCӯK2rp%J+#█F ρR,R<~8{`x V 2%HmMvsK@Ɵ@0A`N XJ%\(0튆;Yzux9(.Aɕ(8s$O tX-(RHp߇ W@ v 2S& !)8@#LقWۺPp @]SwWr%@qfn#h\g3*qR#=UyQjnQg V{X`X+w |8Ñ@&2[R0+0\mwd$#Ei-<&8߬+ _PRzA@EUK],9Sw nn1?*Ч"ESq@鯗eѕ+W@ cMyE`,hyZ%p7 >&X\ \m-aYW`Xlҁ/\YQwctAKg їSQۑ9(q|{SAۂ~?#0XG )) #r02~{mp+WGK F/WM{S$xOK {*>0!%聳M0\hAjy5%Ys /P?N,wCszEA9*0Kz7J "޳Q!`^A sAnp%Jo&X$-tExMYWpyƁb??~h!q. [S'?)$)}Sgm* w X#Ǣ`>RlWS#x.濟wQnJ@,ř]h&AS*Ԯ^-d\k;Ig߭=A2jyp0qbwcŕ+Ww W?ޯ=Nř)^ܭ\ 3$PtS >]5qpSt%J+W\ p%J+WW߻w{W\ p%J+W\ p%Jؗ! $cIENDB`ic05 ARGB籏hމgSy\KǕL\FXzH1RTPSSfZU]XjRP}M,٠DjIFYT;MNpUWTT[`SWvpUVcIMGLVOF6CDRLdMHT^QRdbZTIdܱPT{N4Y_YYVL?QRaQi@EPNWVRSgUPSUxQ7lavuG;Xtb_I{oLLCKTSSHM|WA`bFBW\qLxDEgNGD@@EaO`H^조ވ;Fv?CxP=QOLfR]XoȤ '@Eo=CN7UTMjWXStItJgdN\VnfOMN^MJNXL^D>uoKM]7F^LخWjZ^Sm]MYURYWhKLMDj9MROaTذYnbambkXZTKj&-Ogw|vwΛg  ݳgf֬Ib+ + + + + + + |@f͹gp\Wp\Wp\WHM + + + \W溤~AWp\Wp\Wp\Wo,!! 'gWp\Wp\Wp\WE`]Wp\Wp\Wp\$fo^ }0.` ^ V \]Lu 5+ + + + w\Wp\Wp\Wp„Yy`o]jӄY@}faV0#v,0+J,2 X#¬x0K3Ll+ + + +)S}]Wp\Wp\Wp'hKy|U\\ 0j0A'k"~Z ]N@P+Ru\_p\Wp\Wp\WpL0gٮ+ + ©@+<1+`(u|;toa¬}?ܿQn; }MU_)0-0ԯ"&^-&}/F^*H+fND_B5]E `+qU¬HajOa83\/8pzFe_JQiӨg}=ҷ _VZ~79t\Wp\Wp`A]Wp\WpJjM` ̽ǛC|zS`g!q#fc  ҝ)H_CV oAHv"A/8.,oT׍G*aUaAOwf,|cMPW)6AE4avI!yC۱&lܽ+ ff].F.pT J~ @"0O "+H/DI_9\%o PKF,y__AD7^fmfK,":f%ZW nȰZpf6 p ,@ f¬W@{KAlpOQfk6X`{6T + + W#=|p\Wp\WhX T`o`dȾ\ Y1+Ĉ:OfA u&lZ~[Y@B @ ,8 l'X`ԯǂ|uztHW6a+fDH[ {@]x@\' ߋ  ERAz B8Az ;  ϖG.Rn*3AEOaәG;TG _`Jłz 㪂l,%n?i'7fvb&|q\Wp\Wp\P~H+ +  @6v)A.¬2#0H<()~0k>AMrv;Losb(t\`U \ac6l@A})a@PeC}Ca }HP.7&xt_02E00%"Ar8"9! O?:`|R T82 VA$!lJ !=F$Yg ̥V!¬@Pj/lUP?8ԛsSndY8A`&5:P'Șp\Wp\Wp`| Gs\Wp\WECD:@`8_0o]1|_KhDAJ^$0C0HAMW; O~D._k ŏr`#tD](y5"7x&̺ Xr`K+? F/&*F0[ec͂P^P+ L)0!W{ ajw ҏ? ւչ`WGZP{E{pIA}i-x8ތw ~T?.g u2sF~+ + +py\Wp\Wppƙ`_O6'0@ ?PQ`pD`!H ? X$౧ 9 F 66m!#0d"0\dvt`NDpO8;fd޺B@~$-FڋBHkO#Aۗf?f78 By~^,H%/ _-ؾDKa=&s!F<דA57X]£Ew?aX[A Ut/qOڇH;D><"p 7ާ7 vAA}3AC5>'G 3J>&H ͛GFW_ (fO8 5_\Wp\Wp\W`~Wo + +аőP !C ˫ O.6 ' F.0t4>z $<&`ɭ KodK ]sLl%|=#QD K οJA`qPo:GO _62c g: onf ϱc/ۜdMzqGO!:$#y_  * 7;(7f!h/^EB&#GrW ޗ=EAf~uB"h \.py&,9E?_lH;)8~o X;: _ 9#ΎlAs Up>ǝUޒwz;}p\Wp\Wp 1S'Wp\Wp\W`W |E0 ~./0 ~@|\`_Sn%H  v7 29`V5 Ge]3aB5 w B"-x#'~fK+̖XpٞW  ܯu 80{^5m/m((~0ce_E7Y:`IKz@o(/ w,A0.AFN;+ o'plA`-'O|[3$1oÅٗG H Ç"~"H_j韹Ep%X(`vfl%K >҄S06acA[ُMS|#0wW' ^] G_bĐ}p\Wp\Wp~51Wp\Wp\Rh8rgf]VE` ZБ!z~aړ j  _`W@݈8CR?q{4>gDCƒ&̺v L,"0Ll lT0@Hy3DpWuY>w6/zA/fG?JA(誀%7 c#u {s#. "+;Um 7@T i/P?S)&x*x(xo>#z}HX BΦb =KpSSgԚl~_c{܄cf/,yEsJAS!<.gAނuO~sor\Wp\Wp\W~wWp\Wp\W`Q T͇Ο2/>&,}Q0peB1+  IؒmAS>-PɪѠCnB X[~wn!H#5_Y0pz``"l0[ ¬>B,hS}K: 0fE yۉiN_L,O\4*PTt@d5Mޯ? :B&~}J|yd5AFP>o15˫ё :䯛>/m%xn. W 8OhT R)b:&&"z9S|+ + + xVo+ + B@$s f)8B0YD0u6J~c@X7i"G藚`_`G*Ƒ@ 1 `?|FCJ`. {'@178T 68&)  }L0|jo)pXRp XP\gۀ% c)2Q?%7SBoG&>$ODfe3*<)\<}"Je@z V{00Zu2a6~ོzXG~(~yG)*Gǘy.D&,"'Kj.c/:n&NNy / ml7+ + + px\Wp\Wp ލLL _J' B//Y0"ayAcAYc7m X]>>%3xH #7ْ(!& B,%@3t9Ny4HLԠY&l܁ǚׅٻB},~`okAZ:?7w1Ʉ/3@46ai^OR0lba?~參:;f67~.&l|saP / [G\TPN; { [x1qѱ/($LCS"x8-*W Y[~]Kp:"f|q\Wp\Wp\yA|q\Wp\Wp\YV vpǐ.fd*>XQ`8Fv! z,{`={Ä%W/ f5܌0 K.vCn b- /e6*y0]*u,73b?蟂z`5 KKoࢗn 4\G<G&їgVx NnDR_OL}A;C7fޯVL ǹ¬_a&:fc: "4wIW]+ + +0 x9Ow\Wp\WXH1o8DŽs[o!0_.0{v=}"HhCCN ٿu8qD`|T0#A7Y *y߈97 CPu.0ASPN 0,j9R=UZ Ws{EXQRBէfy=Gq}rpSm%֯|t; d_^0Eaֹ0n¬めؿr7y=J,iHPB !D"\ p9UXZH. 8GJ>G|tAS1:ӗybeS)Jm~$Zl* sGuCdlO4y\Wp\Wp\H0}YUWp\Wp\Q uchLؤ0 pO ł F=&0L\쭀%+ :֙I;̥??1i" `gG! [Z`=Y`?m)1%M8<k Y0 r;9%(GI[::y.mb/2P_Y9m`7}`6Y_!3[^Li_E#ldl 2oD֖vz;[6$]8D@HHVLZْl As{>y}ID>J}0+>P s1m$vÃ2Oכ DG=~{xA B̍{W~AEp?1?3|9֏&&6X /7 I࠳0[sAr:uTqJ?*`3 + + 4| ~=+ + @PԄ[&RP(Y08zC>Qg3  G׻ /zǐߙgvO[S(G0z=sp $TtTa18flBNBA={[`|A`y:aXGD`jE.j1]N|HWp\Wp\W d/s~AWp\Wp\Vh #j87܍V?[ 9zzPt7H`%8X`k-=.#6PmY8>Ed~*K   K :-0$>-p+0o.#et SL4|#1PNA;ǏT}V#A0~a6n%AxKPn s}ǓxYOUb) _pHi ^`ɴ3i;/]|$%: 2}(?efWmT`@mŴQJ9[nqfs:6{m &eG9ۦɫפwc4E7" (Ìۧϑ 8@$W$ͬ7ɝ(G)Zb}SbS c{ $+V *G4wCcR ~O3hwkT`D0ǣN9AP$(? ׂ!sLj\ĴId%ꞯp=A= Hཻ@E `@ݣiёraսN4; f 1=4<+ l)$Wp\Wp\@47Ƒ =qC0~am`$U`Db?AGC#/g%iߕ8848V 8Z p'0 _ :N}ZM- 5VK`~R%R`Nb@};U߳e0_:.F# W:;(ŀos̀, v,:Ky%.]ҧioY/ܤlߺl'HC0wʹnῊ]KI=y'%{?7=7]f @H07{ b7$=7['` D~R豢`wcal61St]* 30|U/0'0DXQP{ C"(Ղ~ychX4}tۙdO*/ULL'1u:|+0 ,z3- + )P0sQ+ + @옊z\> ޷1c71%w}|wAv)AWFp]}]\Gf?,u uc ;/rſCo!3io]O&?L`'L}K<~C>w^L + T#|X_0KH5>XZ0:WEZO|/Q;cA=# N.:,—Z87N ؄[ᣙ`2 ס"yzqgs|@/Sk{.KznWfHgZd9SYYf̙[ruJ3 . =>}h.,^֝hSiYO[Fu jiQUJP-WלQ͔ej.旚*]ۻztݪ k='?,{4d%$]H?:v>:\Á+n}/}`J;=DNLgJX/ P;):{ߧ2|e: ޻WcA<wMб] ( .z ̴g&;l_oQ^Lo=Ez_zM(0ceTot67?Uڲ #򋒒 4.W&}7λ6S]88D]w/8d;]u)cҗj#0!'/Hrν\se ]p(!ẕ>KtXcr;l4Jf]: f+?/_4Vh@{g^.0%5 nf$ [;}UA9(H\6b{3Ns!?plgYĆ"ބt\pn<``B@qCLwjT7Dk5eۇ ?#~ *8A/IS)+ ˾*x$ǴKBKtwG|3S颣ן񏮀+ +00p\Wp\@Ƅ:=w!RKrK{ ?DŽie͡l,P_$zZv$ؿ`tATữ4q=fY?onB-y0[0[Z8wԫw`$0L(l#df F/sG X wqD2%Mւ&5f5IYL2LlMF> :_E 8OX^iz{` Eb;AG엂Y]AviOsh7ϥ O ݂7 Xzn-# ͭz?Fz;sQ3}e[[:S~/`, .}{H0,?eq(Ϋ%˱W@~#Yף ;>8<'Uf y0f,M>n"[16ASp%BZ&C)\[0a=UQPY>&l;C] }5P8۷'Wp\Wpa7􍮀+ + s8b4o;NW4a=OV i`{]eQZZ w`_O_*0!eϥ]3Fj.$A%C"CS_ : =di] y-#Öt-%0(;0s}+~ t,8A6S] =Lzw̳HoN^KVe- G i&6סL:#WqUaavlD1!HVXojmǔҁ=Ki4n-([ BI*N.(xWbw` rv #ݏdv*i_"evmd*36E} 7+~,[ܩ C`Ѥ&Mh7K,auaynXVl/>Qi3ln\_k~-uSe޴I:ҫl-1/b^|t}T!DӇrײ]pbk- ԎKd[]Iz~QE)yTW8\sluJ[.鲹{8oyڵnydJx$ N) Xrz|zCb: Q}PD(AR hz<?:+Wd] g2 g1e~.a.9|XTk3kd)݅[9$:s>/9lg+R@zVRXwU߰^Rn+;״F# Sف'f{\gM c%1zTc$9K/`#GAݕvaajAtBX^7ª@t\},ѱu{&=PɩG)Ɨr(,)­NX5N:Z5o&Xo$ CpA:AyQ1 NQ|`v4Y&Z&Oa0́p\Wp6SWp\Wp0be`VJU`тt A1۷ /I k5m!# V)0* ַtt"Hzw /Yp|ߎt8R@cNH DAd!bH+6 [ :f_vW:Oq %Ht@]c2g ܔa<_KW;S:D8bJ?= NOXqd|㪓rOOQEx_mau۰zۣv睕>"i)<} tB&K "/y} 3R`XZFycN_ I83%Cw;2%# e=6+@!)6: .+(u e`Wl &G' 0PU AɃek=(Y;a>3]=9i Է`@ /y)SLz+_0͍No4GpK("]W/:1DhOXoYǀvEE7ۘv?{WE~YMp,(9hǝ;Ǹ/F:Z^\^N2IGc!ɑ o4%|81VĝLq D]D/zOsݝa DGhwPXAdυ k ATp ԻN~N{wTMp#Cl/=+=tO;POzZ7PZ`KZ Gp%糴%{X~:;L:e/T3a~U'O~.[v[ыKCqєI$VڤI>& DNΟ+D}0a|uVsD8LP/?_(—Vǩf D+̹ۂ '(cւvԫNA}=Nz S'w `EGja5 gʨHOwjԵn_u\Wp\Wtp\Wp\X!䅄$e.^VڭuʶnN^v}Z?G9:e᫢RPϲ;.QܑiKÈlG=~Hm<;HU%?RSo$v,0'\83:3z~qf +k.uquKx jS~Ins*i_p]W@OK$CJ9{Ϟ/3Kýp=~J r{tKl⺧]itG'0rw-(c8?zOD_Yை2vH0`'_fV|KkrcdYڝb~t-YB,ܲF.-7nP戂$,s~vIY:(;v} W?ӢO Ū**;NE;IϵIrqq z]L҅1#USgvuwcÖgkvVఱ,x&h+--xü`f׏ S]S3rz-C wۗ oO_ [ TdmS!nea |ĖKcD"NpjU EsfKF ]꺃9)}/Z+> + W+ + 1v><&c4A(Aj`{J"A`jnt#8yyc^-b/]pS}s[VHq/ ?-οt&PwBU5`IC`nb,Qc8P7R]ZҮ 8lcALбnpvBtɿe{ / F ~S :7tJ|g> avS_Vް;XN(ҕYP VPTiOHW(>^.%?<MjD~'_ܛ4-9ʳG19M` F-%t#Dx+8=v|?xǦ\n?hNN>^nzl>6{nEol^t쎶H \qϮW7EЎgUQ^@IDATZp,Y\Ma1un# Sj{F;YtV(kC#&{\%7$d֧jw.9YxZLmuU's2+௰ބ(o7<4!Ms+\p<+J8a QrNAFY0 D_LYzs ~-xύjoaLE ?,sk*jO~X+},=^g?'M~كyU(cIiԥ W/nV`K~P8!;<{]\gd0dw\Yp0ߙ&5%U_zGac֓xUTʄ/x>?iX ~NZe V4~>?jDkgh Nq Nd0zup5.̐V ~.p`maIN17Ch!|_1Gt #-hDItoz ~uq_#o ʂ4,YJ }Kh؏#cӘX.ciQ/ӣnD .r`)yC+iƟ-{\HAD ~o1s#_c.Wp\WX0H`%8DG].0$4\^0}qAS Fn)0T'8mA~w 隂 *a9`sni΂ Rp0g& ) cp|쨋Ic7/S"ĎI&}L]0[og] + o#&C+I_ ;^4v$ie"rC“}ASfҥ<@PJ/;LK]vyS˿o#ږl KzS V-<ο˾O"]%y:ڦaNᄻbK?)]?zXDV%TMW/yGktiAja ^T,dgl3^[cr{i/݌so,iﴇ9s EexwmⰴF/ڭ@n-rjJǔ/ъeO[#'J#CZbyR as:g7%Navqd#Z֤Mx R x+}S jʪUa7~y#ݮ#؈߷9];Q;ǭCs`.wʜ(hdž F & j"~6ȼLsMʎB5YÄ ? MԛOT.4:zLb岶Q38֝mW)ҧ?mq-2&ow.Q'Z"sAFvxB=ݓSWIWH}"C7I/HJjwkxoW[5adѸGEqC֧^r3zF] ,ɤ˼m iW~e,q|.q'E|}o -TOO?~6%`f^#Lqd @K 9UP*`{('h'\߀SI+zt4;욥%?w|Q8^JG b5D؞YW^+h?/ 2"& ʂ'Fxtv\Wp\I]MWp\W`Nc&vugt~#$=Iб_#@n,HC,~a2o:< _-HBпa!@!h]m5"_Wί t>(GWA뒂0z)X2`ӂ Xqtw ` hőYɑ{l~H\D5:v lyR0cvy+F>9tU-)(' / " @бw > ` PM2!+BN%хO3Fs&2f?Bp8ܫd0]hf[gy8,\}gJ?o%缟l-\\OYtwktP9 ?S ۣBDsrj٢^8$;f;e3{g#\|aJy#0W5Գͫ=ۧ ҳ-8dX!V!MCG*+ {{%x#قםi1Ĺc! P|D8塭|{HPDZt􃉺H~?I4m0ߙr_{L-3oKYT uʏhN},i5庬ygڐn7? ؠRc+ҽ2ܒ ŷW0%48OHb@17d󆶫Gve H{LM Źkx+Wk9V߁3ϪvyOH ]* Te`%FpV@SW #Ǜ^A){}|ӕ¬pA;wT}MPE]9<_3rޔ޴h9?Ӯ` њ/G>.~e{e5?rXye`.^(دx@/8(F;\/!SlK)mH{Q~U7icLHQ W_4G:80{s%ӤIQrQ[E׭nc^>^ \>tKvO.a=~?S;>yLX~ ~g*}@ܴ8Nm з'Llh Uz?w&lAGI# NPP{M+)Ȓ(FxD]9z=Jqa4Uu;%SmA}=L|K %~ qR  W;%~OqGJx + ,p kWp\Wp&+;fp9:V.#0!0_'xC'0/.XQ`q!'.Xχ*0\!/x)0 (ؿ`wl\$^Yu6-y u K: 74/B1㈓8Gy4D)vq_DGXN5aO:mw>A }?a܁P V8~<,|FqDN&pd,/ gH? L/ށя(Y%2GEA-4I?vj|nK dWCA>EKO7  S.DrWҒwK'J>|f'2,`L0B(t -]B0\VtjjdlfWsR¥j9EJ5݁XgrN.L_k{ t,|ߧ :TO\E[~{o1zU 8I`0zO>,(q;aIMֈUk^@^|XniZr X67Ֆ D>G-)D\BYE.*YWy^Yp9oPl_a΄!Em/#-]h_V5ؑzkѩfB(#r}sISΟ`l-Ѱܪ]|$ :MsP{;I@1s'S ^pˌL04ಳ9Cir| Cy'ҫ5eTfM΋Ǖ>q5M&Qi=^H=hxV{:_'7 y:ˤI96F^_ץI.L"-tؔL773;nv<)qeɂ38lTM~e.\g->^H&&x)#6~^Y9Hnו9szu=0ւ\AM{eAu^оBQXbZn3Z?̒%ﲃm"8CAyDphIl(׼m+_1d’ٌWT F[^]+C>]?LԽ&+ ߭Ow~Wp\W`V#|VΝcG`AK>dv?>s֛  5#}q#Z :4~!o&Ht/8`!8#r@fGq t'bMd tu!5AL\<25󊠇'kIt t'_Qr0f5aqL0o٭|}g &"b*0P#X/HޗZ-W6.醎=2G:0q<#q(99w1cdhH%>#S94evlOzfJkG(q*C+pەF=>dk~J=-{th.>5ijukGV GT'GjivCA^\@bܪ{ nfm ( Gmg—9T`fVa@aނ |CN>z0|3YN VQiyg{غ=X-lOG{Q>k[AҴ 1;?y.$U{P@Z]C:,jj;949FtyrgqD9Q?:{G-E5U&7'$@L5=Ih!0\%_$ calW8(s6t.n;'wܴmٓ ~m (garSicb~25L/.I&kgr {buҳ~(;ٰ䣼5JHiv80/蕦t^un@)BX׮zgt/JzɁ4{/ל񇉋}4aѿz5ͥG4r\-M'o+ynZjGZyk/jˑjRY]|d+W/~}!̖^CCT7TǿQXfb&b$p^CN`?Z>YV@0ByuF; Ft0+@(x HtG C0qwA7N)г船Qg :Xj[{]"((`bvw"/" vb *vbA"ұ}"_pg܉3Ϝ9aמ5#N3C#JpUiav7#qP6렴KD(,L!b,'}d36Y' %*qǺ?КbG-?*`H>}^(zhAI]Upཔח#iA{Eɟ#`U#5KQdҡݴgۦ sIx9xkJ}յ↴3zH7&~ϑI8Ru )KTzr"uS=8[>tuЗ<p$ʡe,90Fuv#N99iл2!SOJ:Vi3sd::w @7zcftt!ퟦ;ӗ/_i?9ڝ1__.>-ODPn/-/Hwnb}mxoha_AyޱYCK y`@ MڋuP\SCB 5j @ C|[PB 5h:H;"#X[4hc03b1>et1vL3L`/0-0n%p#0W`(LGkyAn\*8.=>@@Hx#(xN;bS 8T(cPY1ގİ]hqi1W`q `9 fan@{OZ V>'h7A.?UCr?A,!}`A2#rV!1#垐O:{v")1>T6;{6FkbvNK>2]I>Q-c4]q?n]2Ͽܬ#N|E30ܚA>QJb3!D9{pGݞڿG` 0^R{HY:m\2~w%-:>EjsE䛍0r|Tʻ)y`wsx0HOtJ {1QTtr u/S^bn8蜓f?It8MrֻyuN:N[|qԭ!}-m<5"}3yq8 7M[这Ɇ`3y޽jrJU<#ʨ%#FbR3yK(||>ŵ8,1Sn-j'ȿu ; E[u5`=kkDf _łgA:Tf^}wA0NyNpn(o+#H%s~~R !Oo@<^̉u3u fa(2Z**;su:?*uA;xK6Ӆșh4JO=4JJåV^bEޥ'L⠦./ 6Ř̔Jg;dޗ[Cp~3o}5U03ǭX&{_QkYhw'(̬D ʁS%HK@S,?|%*h/KUe:8[ b St{B :te aLNv'j{¿B 5j @DaEj @P5tY5ŀYxW"0,Vo# 6}_$p*@nZ :+9ݑ; \pgp?bS'3իZN3S;CZ8~`&[|fv`5XYC 5a&p檎u8e<Ďl#bU0= xGp@kIXi&Zي3]l_ F>-pL-H :'0*ʪutuNohw{7{&6_.?#üC=옿_4s&Ybr)| 8n(;#g> q2WǩYG2,s'?ps:]vnCy<'5~eNQqp]^Ҏٲ t=C;9 $1ְCd{}g f8K0ITpۉqvȲ:De<:Vm~XE% g 5JM# U?uQfyѹZe-2i$۝x$I/Rs}'4݌,I՜>k ?t8miCPSSHS{ WB鹔8O[hv"u7 ?` gϿ5PZz8}Bu%s( W:v)[nR۱FQtVA:Bny_.p1ux0[{5EЎHz :LkͻV\NdəÃZ =yꐶh?S/hÈn#.~&yW{].٪F5irYJp?H0Rcg Q_poЀm%S֔#>𽸗`i=u;A}V޷yy_niO[19/-话_a}.P3Lor`AoCJOfo= 5j @P6L 4 PB 5jk(# {`Uf?m r#0 ` rȧ 8Ay y0@(x]&-cM`C38+Q6IY0ZK1 MAtWOpۡ{ ]nkTO&oFх8')wȥ»{$_#z8ީsfgc;9yb>u|:wki)w\!5 ea+oO&aˢ&mSH{n3#x}?>o?>C/R?TP,;=T0%}ga̗ fOppAtp 6p&1p/i#{j+cVưbFonu@>*0_*8Ύn,6f/NRX!A&OO,1)W 0%;n>;c$OѬ&rj\entPH λއƽĴ9c44럇\i &!^&w [LZ}A)?N+9'00_\TbC _Z2rœe+H,;1dZt1%|Snag!ߓ{A˄1-pPOqLإB5qCokꢖHX(gWpƜ5]vL6L1Eg0mȆ"_hlKKzUg]jޢetp f̉HH(ύbYlTϥ'#i _ssWZ>&/֙HW^{;c֜030hɡ@zq^Jw3¤;ZA?A2/xc҅?I6]`fW$A~/(o.f}viUq2Rg)]}3}t{j%HV{goEAw99yc$U, jh)upK#7D[vsW'g?Yjeɧw.n{dHc&Tl+ɟ+8G ۥcUA|S!!AA?}.*軼=nk 3q8/EP&轄1._,>=A(xL=x=oyRJBnfR{-"?6?*~6]*Ό)2-33bAA 7th\=Q_P/*(vn^Kn5gB 5j @Д;ł_(ߏLFS@x@ =Hs-0,*0<$i ɱy@SvXL~tí?>B~y;%O> \%cȦi'QON8BSg ,@ a{Ar{A9{ྙz9%TOUry&]w O9t)r"Du;>.E;5{Ǽ.rZ>t{YtDv׼_&썴KbH.#Oي((gѣCӊv'yޙד7R߷!H/Eɷ5cfGЌZ/gU^o;UlGzn>H0i73Sh;zO;֫;9}4W3&A= Ƃ[Dz^.H/,1xM?0Vr3lԿ ??Y8\-0b!_-͓I˜#o<;Gŀgټ=5)J , [sɉEeǐu̦n!@}頣<>FP6k nd6 mzU`7?Sߋ;`%wl~@2=Lt&ߑiұyZ##Ďv?nQf&'|^>q}soC9-.O}vȒ ﶼh"}S;w\Ip2&Wn!t;Yp}̢30m&iDxGqK*;+Mq+{[(fFAp\ g ׹￷`@~(oBjwLI!Ssqnq#W ua3ofZ%81."Fo &{_P].(v̼q0I Llvf>ePB 5i 8pPB 9|rUwLQijY`0;X`&5X5cE.S (T]泅1]&20v}8N/EA.X9S{so>A\) 0%uW0k߬pGGN2P'J1a <m?|Nx![&!d|;L oj(oI஖aAƽMpdA ͪhӦW}$W\0@MA*]lPQ뮋QrZ*6)q1Eϋ}5rTc }jp[Ys14F ďyv Hnn ".׵##e]qFX L5yLM>Ng W/> dt{ˁ5k@+3fl!nekơt\CD:ZmEf Y oQ`=~@A;AVM iviej:ߌ5ٱ]ڬ}s_YCk$=ƯIv߅tx~|Q1=C8 $M"aӐ#ؔ7MZ ev1SSxAaґ%[esJE}e*Wy?γH;2VesAZR<1k`DSn!8^.ˡq%-_P cAݳr,2lb[k-y无^otHNgCb kF9OYK}$C; RuҔF+5+OMFh;kLx$Eygs Ȱ|lN2O\kn^@.Lߖwd:=аH"3 y9Q}s}jF6H@&~UUyΞ@F;oA`@v쩂?_pk!V)m5B 5j @d*PB 5iN7żh@!o #9V0+qG Z[ [Ȗ!0L|X k cyQ^Sw8A`I`P(0.0T]2& C:' pqb[u]/_$ $CYYO 1S?1_ܰ̏⒞E} +[2ZC/V{Lk&HA:ApJwM~& #Gg :"`! }lZ\n'fWF7j:_Z#{㸨!kFJw萁ݤ!N]фҕj9rVjO'%Nm{ym3w`TeH)c_Gf AZJzk;ー!L{wu |8Bpuh+WAp  PUr1\Alyxc).B,X3{^ēmsOGGhIbTMd[WOs!UCt6ެ,߻_rDyr<>\ΜKѣ/H=M9vNjx__ﯙVg> PS-3̎4]6? *h'7LPm <(H)F7߇\S㘤=l(rQ):l]6D4'עv Qh?t[7m ߈' j0 DnD_Òe򻡧/"Sbs"SJ]A!]XpU #gb*sP mkA9GK9.V~Um%b=|̧n2sg&mù|Xd2el|h!N/⿤(_"gF Q:wW|CNs83ݭ?E_ZVށC٫z[|>|*v^'xK#\把鯿;B 5j @jkOp 5j @Pg ;/OH  Od9O0RA}/9O`|Yps;@fp[׽V`,B0BR1 q~oOa;bmBn?`F@Ǐ4KV)u ҚtdB]3V+1TߎXѹU@IDAT0@-)c^o9nlWϮ9vsI?:S_<,@sկuglK?an1_qpFN~%ZEΈ*IvoI! l0 ~ۑx @1S;s"/kJFcz?%f3 )FZm+9|npDcM ߞ<3O KEc1{#r*am6ݕWx*OoLg].$>L7ȓQ~۟kaEܑqf)W&Ȧ.V-aL't+X]79>SLmA~;P``G``#H IuEvXK 76[03!$%?Y%#}Gٻ|<߄r;Cc^oE*M匝aa9s̨`:s#rXI[ C9#,rFw㽰9ή(ς:w{LimA: W|] ~`̖xak/p?+Ho{\P+ӱ]l&(1-C 4g|[ֽWפ81{ZMb%̞9tyC%.ޤm_^,Enh[JkTbHNk4uH smM&/t;x։Q̜fsG䖹K"^fif"Q?ьdzg^H%t$֥ѡ$U҆-٦h<;=}yʑߺU)oӓЇ4)yN>UC:r2AG67 / ʋcQY%D5j @PPB 5i:ZBm ~[ݺ@`8T $Vz o'0l 0 ?/N.F?HP k}'p|&iU``8O`_+?N(~fe` ]%"Qi^n5 .pq?QK=q#xIf*s&Z9Yӿy&=*qL9"g 'ZVa`VΫ.pڹؕF{# Ky$e;Sa1}L v_͢7 2깪'gp  ~+Uy4aUᲯ]O 7=)LU2?Y)Û'9duK]Wm'ѿSp?r6<^,F t,иD/='#7$1|Gt3=ߕQ>:26:::UA1; !\ 6 7޸N[ 'Wx/onj >0XI}T>#K5t46'vir[9Nsۼ 8bf$Ks2NҼⲂh8گ~Zp$sa> W7*d̮`Zs}Vݰ7c#Qe:4 3ﱣc$ .3,m*j @PB 50`PB lVZ &|)*g֠'=.=̣G G  Fd  /ȴ@N>F`~]`w hւx U'K9C ,7$?FZ!0(0T+x S6!lg3ЀpaZY;9a}HZiȔ0SP!e6G8.k,JCz1mxD1$Q%lٳu?w^$.Ƕ"c"'ƾSz.}^R逢-IǥNrس<jt`Zao=C@p3;0?EE>P`AD0BaA|R{`Z$tV!Sr_>}l }i,d6EG$/.qu.ao'[9?˿IEG10A 󆳅{/wXEsKMy|oz2gbIW/g/Ue&Tp'o}*78)>_P&y~m&0wCo@'؀+iyt 5SCkP~J;z@f-ߙҙGMmp"R헍!(uFmF7sr'G?MN$|K$p9ܻsjug u辳r^-3c LȠG=p7Y%YU&O4~{D?%kIynGw}Kd()?<A*x"RA=L fڙ#gMtS/wpg4`vƷ!>Ro<\ܽUn6(uT?߫#Jʣ9tr#Mny-q*ѐYeTH̽.=댜FN y+ǩ1<ވ+߃<6[;_ Q%= ݂)KPt6^inzr_K)J-ټmE%-yH2MQN[ Ym9W3B| {G Mߧ c>*b~F .vh4B 5j`@dÉjPB рROC/;uܶF;½hWat *` w?Dmژ=븗8=kG1!e~S)+"{Exkg^.&НM{ohIJOϊ_(|Y#/Ro8wR)U~EOr~ 0(},0"(qgn*WBA \_z{Hp#}Nj&4u)Ǿ}j GfM|}di({h>l/ΟY!YlNFnBX`g؅aS5w^tF7:4o󂑋潽P|r5eKt}V{ot ]HPL$D[A~Vv8~EyC7]ag/6g`3HÄ1\,o ߓ3lzЄҏ1Л>IA,Byψ>8![HO'we7V~?6}'w%I9J8[jk#-G= .F}yqg;'g;{ uM}C6f&}QJ$r]C1X/ t̬!(8/l]ogҿ,To_ + ڢ|Dp䀊#*>AeUcVތH2N;']M\*QB~(j~<;ՙ۹3י:{"-Nq!lsUN.q/GsK|͌63ZL=YQetvz'0הy{*~d [}sdD0aV}yApnUqxj5Xq]*#LA}5W0S [$H}WՕϊVܥ2G9UD"']7;1N3Ȳ" "yRH=Tf݃לNk< Y+tx,?7rm)ʗ AqNs71.zu /Ҭt,wzozo{MPqMobs[,"%SXVS#ʎ(A̷ sCMv 9vUj7ss )˶|+(#z@/3r`!_ʔ р|a 5} 5j @ ZTj @PBKgFYhszCcﺕ`8yL> ywn 0т |+o?iwZG [WwނS|KMrÑ 2SqX+T1yt b}lDk)3I³ӌ 5L:"'"Ob+a3HHhDKi U w0\ص;KS7FEs]YYmfz'F s!_Gg6_t<<q?n(~]CY >g/ypN|AuJ;O&Y,bO@!c4#p СA`+ws\#8nm "ܘ$X⹛5$x,Wz3l{G`5G(ey-?󹋁1vx[wܗԩ&erN}~r/j/0ឿtgS=` .5g?)Gl$;v~ /~(ȿ{eɉC2O1Ay.!>W_.׀ҷŴzf"0C g5㛢%Hr8%?']UQȯw˺rޡAW=dlkϊKBF ڏag V yM^zf,~X :c%뻂tTp1~236[9R\a]t+! ]Nf8N}[=:!Njڻ+ڃ;PPόDjoJVb&Wg0R'D)OiI'۝C(W&{EᾛH-#͛ޱѩRkPN.-]v6A z;c@KhʜOhAjAy*sm{Xw`8f3SD*p=">_p  ' 7Գ_Y\$8~}|Hd-?3?V쇘Iv#s} p7#f Lgtse^k!GxyM#<Y3 [ք;;] H^,216=)&sׁD'Ƨa(,>+ySc3No1Xݞx%l)zy|݅>9ّ/6ML=9nyJk:M<[[: daSEį/Q^ONsL 5Ҧl450Nos]%O ?Np\ծ!lgSvP!Ibu~k?a]%hk95hFw~";y&No7\v;#ܒtI ntF\_(/ 5^TQLfpӶ=k/tp~t??Jqıɶ9sם\Hq5KRϩ5 f^Xe ` .6ݺ^ާƓكƯ+걌rE%rgLQ|%SnCL5r]78HGl+-pP_)hWr+MlfG,ڎ9Ǒ %o ڵΘgD7-t"=:>v9z7>>_d^$uH>?ּ2ޖ㚹ý3|WqGC*}viyh_8+t-nƣvqkF3y$퇾je=G>:SS-e|, K)_]]K{aج>|Yw])ҡئ? >wO"c-&$}B8HO=7mgQ;wx1FGۛMr1׏Os_dQٴ4^2 :xN#+ۏ>RE"t~;(Ic^u3g|-5_+]&=Qڧv6}6=ߞO|1N]:I: }:?SY0fFp*-Ջ͆m؆*.nD<@_j, HOdLt(]oƻW 5j @T PB Wi:Z}H7_;AXA<,YT4L0 |Y@.wOἿa 0fXq>|Iq ȹ3(0A؎]5  2jqCS2Lp~ }f0)hŸ55(f/y|̟hr9]ZYg!_1Cb!"džc"cǝekA8^Q .ncWCs7#qi;^3ݟýkp|g>݇_]=cW;O:]7UaJi!#"!L/S#D?vL+qSs5|tײ#p!d.Q g1ڮz?1NZ[\ `;Uց!c>Q`DY!AUTcEG>pHF %txzMgSs[fhΊ_=|=8gPN57Ss)gw +0^"?cgo9޳Zaq %íngϘVZ0LPL,-P -JvC97Ko!ۗ7ϙq2}^S5a`?QRwߦ$ksS8rUur _k ͕@h0$k's-6cfKk⒜(_8n (-Bjen-Ft,x>T y_nt/.{#mi-oYv1xݞ˹Y ίPpYWQZg'w;W)YEൎ]1&!#tH c\lUȍmVvjF+>3_3]탾ΥT͢}k>@}essDwCv-pBV*-wVNsã5BP(h5LT5plǻU;g:ιYh :~*G/,S~T6=jϩ,'#ۙN =LҭUKy6 G՛H,t|鵊,y)wgs~ӴߛHJ ]' s6 rlïO<盠"SCKEA|fXgsf;󽎄ǸORYV|XNѯ˾z[ߧoA.p*GVU5rzrO@ܷٓ %u,'} [WvIř_>gq Y h+ v o+HiUegpnGRB 55׿N+5j2S/kV8Z>IGA' :Y_;>Y#0ḷ|`m5P`5dӮQkwCݎs!lv$r%+H1Eĕ;9!}Q`7g`»` v l3M"V<4&؜dX,].^dDL 9En!|G^ȟ}c#s#H^ 뵈1y{EN^k:_;C׉ͽNӝ𾦣 rv9ɹߑAQg!rRڸ}.`bW&6}d+hdH̹?J?T#\Q$9Lm?nQ~ҝC٭ }e_|LDbX*o6]aĊ[ .!ݮ鼮7S^PN=)S#FZC 8^Ku:,#?gdL bfzxY/V!Ɛ.2}4Vv3Fk8n?R迥o+4?idSͷ>o^^ 1;voor@|N~Ӿց~!pXٵu2#לgm` u ' ^X``)w`L[`|~Ac`&^`0.s$S^w\X$Yschw{mf0dT?:+Xm O2K?̴5u>유"qn΢F7|fa9Kd:Z[f &A} (p`-+e¢7C]߀wc;'ꡟ߽{n)\A)ʰ17:[g \ nwċFGDzԳRG؏zIlr;ϘΥ[QDc2 8ޣU;6`>1Կѡvrz_׬9Կ틎4reMq8?ǘAH+\okaG#JnV2Lw e$Ho)A|wWAPɛWh:3Sx~)A-PqeJW0n8\ ~B܁,`| jҎ=fƴ+崩CEa5:X1wPܟ/hާ\op} %auBnshĈ{S:rr˄d{7t{~VȎNV+;Gَ#:"O곂yvpFjIߑv&@:`7kHg7sL oc*JP6f HtS73oYK!fSCLL̈ۅ ,Gp!0vD+cuO|Ϭ#@>,}Pq6Nf?H鿶qAo:2mpkh2pt Vuᅱϊy /19`0-nY80 1[a 3+TeREXw3=?dI~aF={pr{k;GqvWn6\~Gݼo6#|[;r<ნ.svs60`'z19/aq"wԍa:GRב{FZC΋ "{Gƫ%1%anoPdg~X"8/=nB^c8nW\qN02} '<| `m| sSXzwC_c^EBg|3Q+LeiczR{u?^) Vc;UWz$]K!<&} v :dԦ(:ӫbb0(q+f{c=uRi!ONihvhP"M*G?yGS9xs뻯;诋@o/bOՀ "ȿ AߟtW{sR&p*F:>v&.+Rۅ+FF}ʪkN#=oY0>ױGrRH΁nՍ0\'HFB3dWBVd.cmY\{`9A@PdSK)N-^֩N ,~7$^u+ϓ@zmրHo7'.!?y=?2;:imud{][i5 ()}f1&C 3ٯ1?LםtwE}7zKu\a$La]AY?ZC~؎kQVmeC|0^ik|])P||Wxie;ݶ_kbKY{rhxD^OG:6Q.מ+ɇaOY aʿZ-vzfsD &E[ a\ \+ꦞ[o h~fe aL~Di,#| AA9S O5j3h! &.">\kݘםx~캌Z7V9u]~=+C>'U#y?n N W3͑O։c3Tyß<]vl|"SHtgVuWcS2TLRWJA.z6I־T#h64oԗg G%Av@/*#zU^S._P} >=.h,o"؟'('_?53RC`  mSf/Lk  PJoi 5@Z۴}P`}W?!-PpI : ' d5\"hLW`ݭHn/xi,b׆VbS#~C7ۆmmi Q^vv؀/g7wraX*3 2s0?31#; `afP\h27o_qk_0&;-h~$hvLUKqV%ZPHZuAs> , nV3]˰kӥRәB1~oGKt|"*ݿɜHcLs?7K Jx$ms)v|f+mV+LG_ g2DY< u`~_E9))V{,#,[x= .*ZͤGupZ"K[^`Dr`A3~`4SQ{~5mӛ)NYA{Eanm9ANA [bܕVG c&`f5* ~MuĻM>ڄ[/Mk 5 +5@Zi lS hkȫY8ąR7(YD0r{y2L`!V# 7 Sv_e߮97 L|Xu4bv [ص:~vߒ=lFdRxx[,{r"H+M58C  Tg[9p1?ZEg˾y,qp2?\96 .4քr`EHMBK\.VOE-H@Üs#Y[ES1p"C  /2pUeXf>4j˓OkD\. nc5m93!侌w.s)@mL0;EZÃMOߓ &ȷޗu|.Ȏxɒ}MM r8m #jiNspAΉtASވLsCFZxd6-gc. < ϑ)#碶sg$^*ܙ1T|?˴xf; #z7COk[E6ON.촎~q$;0#hEMݤ":C76.wG!0|36-ψ}3mRO_u~$E~YFrYz+mMirx{Zg#Nr^Կ G陎w]r]>v-›NA8OGʃy}UX __ua[=X z qBy>y@ej7,:+`ܝv27I8,>?lmb(oCf:8C9=Zpe3w\Q eg;Ú:aU$'} gMk؏YܘG)1i~{&і\kɧfF[YP%h~+Hg kx+ 6}{ݷSl1BLn_WO V?ėT=z|!tt00ێr*Q~_- ֈgLS;F_Z5iFf;S{pUOOWOHgsoVrsÎ SjQ{o_=փ:91ͥ kᴂt(`C2}(wҚ7tw53GAϷ g˦+@mK;cMV^Ld݇pL U! Gj{>~z1E#* :$-s!^ed~jH[O@IDAT#[PF &b.0M?&i7L}Ѱ^ )HGr@A>ֿiJeT\HklvYHk -N"m{rplR&#oo!h 4.4vy=_C1B3YЀJ G 48y_ S-^uB2sdbx=\U8§ I3y)8 ymG~F{3HLGd9odgts@P';~f+ f"{;E)[[C~Hk4F>!~ q_{Wgx6.CaHdʛ]<~jD< |X0#6fMp!`6X@ze$r&3fǤtyEK!,H(bK?¿??$:5TczA^ÓM G|;.P):_7Ë.e6t2 PXR# l7@%MR%CS#*0*ZCu|ؑ0?E k<^>q/~ȭ~|oM|{ /o=Np7AAz_uD7r۬JDܒ[9n@+(GķĻğK!љFH7+qFmsk@g $vs;;tO%\2A=L1w0l~ p`c`MtyZ54AC+;D1{FR+:$уVKTC)hx~رȊ( H}Vkš<^ : cVJ'p^`K@ء˱/_838wt-19?+lTRzv`&g ;B8 Fv ђgbfgԜOWh;DJ Tcu^ȫ=!x^5 W/ |$A !mr༻GAHu"gyO >W_bL?yHk =ӷLk 40hCL1{5= { g ˎ"R W ;6:kDz4` X͘E4YA5~}V#oq5Hsp1;w[o~ύa VUX_YK~(Ƞ /k?#>y_0xGFr]al+4;_pֹz{ L2-\۾cP1At f. ?'d/x84|]ؘYEq0r>f Ǧtx }: Ӹ1g] i{@+"*v3u`Q)g3Ny5`O` 8>Z ĽѾ nj1'җV* gWpQĽ} g_go3!;aT' =BZ ?MWp)!=]U"?CmDCU VthN^t3%E3ȢG)7;cF#TO鮂+ԹP3W0aK?9s8.+kxl-HOg = HO w lGtvuSǤ"c+ wćSAp|G$t/AXW>(z{%KaL/ձe ]ӡy༱m?mc/}}Zi 5kƿ/yi 51sb/hw844L7+}-Z!-˭CwLGr`(n=< {3҂4O" o9>=\6g{+C[N w-2CqxfY{qG=ɺod{ hλNCw'sn<03Ri >o.6s8o1"PUB9ʤ!2c*rd_a1&h^dRۋwgF%; }\<Y$3E! bR8L"7u[J,&?Qx6]`#7U S] 0HDm[dwsn|ςjQMZRK72輌"}h^aOH#TVQ̺GeI?le5مoMgN8l'oY,dGV };zcrr)1jas[WA 0]#p}'(GSSsᑶ[ɁIg+O p,|ˈͺ PX~Y>VT`'3S#{ wA>IpBCWP )qR8,XL纷i~uݩ|[,vw&xGğRnԌg"9]IߧYs|ӑJ8^F3x/x|f5hg봖oK_kY[bbAj)UH# !KmLwтS=/(4T)dzAſomFێnf t Xqc 1G-zLw@$1 hqw`?G ?twGA%*h?'NEj΂r10 :!v`9ԧs-OK}aHk`Ԁ}~vHk m_I/*h) )}p@OvF`aY@@Y$׿Mİ ; rqJěY *ðpecxF_EVwRǟY^gNFFXI>[&?{2@AR3`#R4 ޥe T+93H dpd;Iq;6ޓ :rۖVĄZF.M _R!~@݇tug69t!r*g E Cq3^DO,0p(YEK Qp} 51 2LgK^]=YO,0y8:Sk*^~|" \50tO0 poΈe~ĵ^yWs9ᭊ?gOa3_`@k#<.m-#TA͎ط_ [M0X*(7` _ŽC]J/nI.c:-`CzbJ8UWVd!,78q|UǡBL;3tUp{SpPsv1l~t7?LP "NK¥ "#c^FgA5W9ЍLz]ӆZdOAm#^<.K_~syAбIA:I O$H >vei5T^E'(ߞ,K>};3yλgY-f[-0+;pIO庛qhGJJ_'TQu(·NȁzDx\FwB$3tYxgn5Gx~r ~Lu0g\ :T)8A|(7oGm:S_FWS?Ճ麑{ f ́)vzɈoJ\Si<1ˬXgw%jL ?V%+~yFF+fy5^]Ŀrwv{m?M3$x\ZcA :l<5Ү4UDțA~brm! Z˓/~wuq(HYg7[^ξˏ 1DAA8)Ⱦ !\wC3vX ¬$(7C?,ȧf0ʽp( ۿņ7[N[`!~wY~<'8n gzr}#C;$8*hQDq YOLM!6AtWMT{@^C龦['bF}eSʴHk`ЀUe%Hk Ja;ɝ { 5_b}/Ļ8DB%\fpѝLC?) GK W >0ΧbHnla& z^Ő/"4ܑng${=논;ya&ٲf~G_%va@2 !6*yN;3n 6Ou (6`lC' \VHQ ط653?%Xpہ̫OC/Fc~|t_GF~ū:4LӑYvO8z׎55*KN=/~3{JC#;ޭY`' ^/EiYRɓ(* yJPo]Ay~ |w]Dɻaߦ'At?iI>M\EE͙UxNȮyGkyn%f2uym/mw~w ?VRn3++Yi'4qLw;ڛʗ~ A::[{HCj7syi&%xߝ䪂*T5 K :L}N˜ϮL#A5˜O1_ugE#<*Еuo.ٙ)lGu}Hk -T^Jk D >+hF &  'Kz&E\XR숼АsNhyvMaћ2s Aߠ}ru7Wb3ӓW f?42L¸z0b`Fy g1-5u43g`:t?9cy4 |[ѭb`*c l$^n!`$1g}ʛjHuvkن]5ư{ Z(>Rknğ d7A\ >+q],ԔF n{X_i?IЁ[4+ϋ}y<EGP'ٔce͑E\5{.^9E;>w8+] \6H D/.5nET]` X`-0-x#Rٌ ΄%Lp`^kzW s@v\oY?$36g"bm7ɮkf~+Dca :'_?p MJp N2j`"ݿsm>Nz;F#'&#ˀr;Mռ"OQ جFF ;e'*;ķ}2T܀EVdVJ֦޿~ &UM=7A7dz{D3&ny ~>O3{{ ky C!7mTJ~ύR3>+ 6jAyHСd >Mf=qW4;}x33UO Ԟr 28z2<Ȅ4̯)=`ũ2â5WxBs.Ri8a1hk m. tZTSFwrH{.Ox{:^7j_g0+6鎥v@|SIF7W=d>dORr! ~}2vP?C0n.Sf}9Ff` 2G#Q,o _S: ZIG4+9I3݂н'aw?C ٥V IeRSo 4BOdsQ'A<\(/(|'H_ڂ A\ лDJ//v:J\쉼yO#S ;g":,f9HX} Uw󚓉`+ UڨQ ?ϴPθm?/ co#bJo94cP0|a_᫖ /?;%p$r# ث]y&X+h%,h7 3Aί Rv `.y<o0DKM%g!=-x}=]gb'c6 vۑ;Q3-ݝHO=Q0͸9$S&)0ޏ }M;x RRSl)s.[ݝl|_ʿJl;#LP/ \$Hɧ ,3]7bז_Ã'`Uno;䌫ڃIVH<{=Hk,=m,_\OPAþPB|\((6nzc5p5 -jj!-"l#KE_^o`wm R3m,\2|rLx࢕u'4d ;D ^pOb?:(T>rcd^ o'&i'_x?ӃCYٝAw9&DЃY;fMǍ<ﶻ(r/kYEk"~;! n滞v;]sZ]'kDe;` ''#[% 'Zwyn#җ6WͿ($z-#;d] ~6QZyGpEQ =OPN_yU#LGK;A1`Gw|ׂOb&|-$XE o}ikCxW*nYxc. .0mu8ӛ&^RjGfL5>[O}:>tGdÄί.iʭZr_[-ZaA9p=VP]\%7 bS_TkA^)_~/'sJͨISâWKpZsw%~$3յ*ݖ4i*0F#/[)4`[?ӸmgF.&IJ}r|[HFN=y:'ېca;SK?@w,(g e_iͶm=&  ߣ> _>Hp!=hR]O%Tzpi:zͣqyLD2­p&..7K/p?p]|29ⱙnEm6}&x1UEUogz2QȿYћWu^o?\<AڙL[9lWbܟn swUL0n` ^](6>x'lч%/N J%^+ԏk=`cq sAz~I ˷ +& { c~/&a̐K |$Xb`Z hZ :!E xYle[XnEZi 5Oj@U@Zi  } s5%QxAAg`q30' 2 J `=Ƚ؉=Z ~f;o)vr+w觫T?홼m]u۞0 z/\A~s nZ#R9"tTDsSy ޝW|xlO?яbE<Z-DF:=ٔ卑b Q3Y͝r3ZٙN ;yF}n`\K A!Duuk{n" ^-HVDY\ގY#?Da UߙZi%xCJ6)_Z͎Ncs)$?6Y3@9vX1 %ABNoy+3Hc[>&%2߯%>9s(rA0S`0g tʢכ]R&Nztz`0?OpCxϲ>wglགྷ,& ˂t~ $HW X'T )DOt+.|ўq~p)qcmx_ʃh8rW#pn[/-X!_1 D&dMj/>MM-9~E{I2H[!b̟l:8{X>R`g# b+X !N~$hw<4P<mʑÆ) + 93J FV F$ݝɗָ +y< (MM'FG0Ό})~e֫ˣe yϏ;y=\?-1fwfrP.ZKs 3=]۝7yQL %"mwpܑYq@<_x/;0<֔:_FͱOTCfᇂt γag3Q>U`JlNM /QW9h5%1q^?!:7qv6؂c8WdV7= 6MZrxu%Q5S4k07_`@J:Db=vvl(y㏘kfwtt~wz*2)q/5Lu!r,6#rد8™> gur k0A7!D]s$SHuu\~ՄsUqhJ{6,d#]IrhŏRnNu}tzP`}GpsB5ԔWmu[}`$eu\-PUa?e-W]Z Wv(kf:U{HaFfv‰%#Mg6]þCmi DQy3_O"Gs3h/Gg+dSƦ`a^ T.*z{+s9>FZ_ڦ7 g2̢kʯtp\ID*G%P^:{hfy 8 &>V.EJ_y&T,QϿP ˋR=q![&gSӡ>>^INSGM< $%}'b˃Io8Z8 ͜ҷ8 b~ >LfuF 7orctctӈc߲_@ Kw[HDU*]wqINMվz?Ai-8 kWo;: P 8BO8 ~@ݏ o .?Ji\>GK,І '~x_ӟfwAxgbv9u||w9]ڛp#HoIv]z }F@IDATC&fYjyhN(閡W9W">#+ i1ݸ^b8^ճ祖)S8  AǞv^P*.w/ > v l꾚kFӽQ~[qh6̵ӹ_ cU8j:3N3qdXSo[P^1̑>,ԇp37cY*$ͭg_EXPGi0E{jtOArA\// 3)gϊ{yVjf§Sg: រ9NU!&X%ط3N68S'Țww@pYx˜*+3~˜Z V\,f}]L̈́R1;pBHQy}W(!5wKk -_d+:e}! A *0\},0LL4\M Y ڕ , * g7 { _(*ǽ"ໂ%ٚ: 4hCGpBL7N={ *ȗ O(UJ6ĵXk;mt`ZgaJ?'\3,Ǜ#*{D@轄V4${tsY8E F*/PK|kD'2E_^^/ȿ?3Vs a;T_ԥt GQ3ԎI>4s3]8^;Fs̼2hM-4q4[kaCuT1]u̻@y3c#mH֢?F #0t8VPμ#EU)^xya̼lHłb!.w\wF1=CڪIɵ.3_ hxcGdp+,wH X4ܞ*׵рjXIO w*9#vwC~IM}N!74) #}gRKd"7vKL$DALu  pXV (vxB:jaLMk 1c⪉~]$Ƃ A!eQCQ:_ikSåuo'ԉ$ӣg|HGW+݈n~#Wͭ NKun43+{*E.+7%9?W<7e+BLzf}TPJMj&/f,J{|[M9WEVx~^P͏ AJW)ՑOM%ϟIFHm+"sW_Xّ*Ho2;mX`$k0jfX́.6;#R>"y%䛉6 6[N;]p: @.tF38%ԟr㢿6NhS!< h^'sMwr~1{V^v*ڷUΩCCBc<(>\ݓ6,9QĬ19{fP1r*rY1AOEEHH%.awg{ݬDz~Lof;Vݮu6}__(4<};:|jnSj8 }]b(c2dq" + d L7 p&žhKx#GNW:dG~ohkG|ΉT7|(o2h J\uE1b̗~7hkFZ=6p zQoƾcd![lԆHw8≏rQ: X; :A4j W372 5())1헨)!bZ%I8>*(9,38  ,h׼.({ v* 4j˜^/ [ c>{H`^$:G'VK! lO/R.s! f\O.vᝂlNp`u%LL`*B w(WyW4T;@Q2W|&!{:itMbݐ1L c_O]5Y'eGs.ѲDsv@Bm@VE-ьh)HFCÄmpy?ilvu-AO%e&)nS hh }ӋK>Dϔl 5Z~<0s  `OLj ٭27 A k .UWa5oP top?i(ێ19-?8?g{Z ;u rFYt2ZAT 2#x |{pl,pw[z^.rj'ȅ D#Uw2^nsYX :(Z Ef#L/]_MȆ= gMDžr(tip fNG)pwĶ_00&oR9`{h_M} B pxM샖q]OI#&1ҝ[У7uk }zh`XB ) A:?S7+?I~J^ T{LAA +E]TC/ZX8 -sۖlC*|=FVJX7w2BX_(P?흝)LdOR`_[pZ]A;o{A3KP\+(>N,x?}6u3z̆@66ؔ&вɆmD G$VH*aV/|@ւS  G {ڙwo g @~/ f`X81d( oU 9:[ ]mn8'лooL\5 m 7{x*RCŚcyݗErbQ:4%:Ayk Y9=%qr'/R(3αcnI|zWkD!N+I`p6ˀX<~˹νT C\~FRKA~Ȓm Em _Gt9-}w0+[q!>Z ῶ\̗N)F^/:&ou@N+\?t\)ey86P:t}M成Yx~ e%ߐ?=BL#~ο H|U%7&qZ*f osy u<4sb`i_ \#Hł$:nG_Vetli8soxCRމr:P$\ϣ"̷ sY19z5')!ᓹJ3g 8wSr^g_s<#'"1_A$0$,HC ͂u S=x3A g 'We[o8Bѳͯ>݉k0lƏN>C Oc|{AÁ`n# (vBrѴ!oc\Gitvv3v@frzk S^VA%\H}xNwA>'xLFP|, U@%q\Bԛ ҽ%hO"8^ |kA/EE hR3V`^Pnͣ ?IбwFv|{kjNp1G1!YZmڴ v }3y|[}9 uAA+bL4:֘2 )ӧ"j}.2{ ^(h"SwtKj?A>]P'}@п2gak=cgqnטU|(#aVF.g Yڧs`ŗu>唾Ne+2v2pS,xᭌ$S] R}rէ,9̓\߄aԻvw{xB2Xdw\POv Op|W<1A7/vZ؍=o))G {>(|RFTEMqna6SwCO|=oh^8ҁTL]j2L JKBſ@^lyD x ߄+;}0zj ! S6P2?zt8aD${J6! l.Ȇ@YDHF jPX]q'I}nHAGQ@ p   Ct@.P鱂]zl_T ;mqFKq{K%)i\+P8%KWt;Hޯ9geiؘYC5dGw>%*OB 9%cZ vk'} ЙtAgS9x rqUua/6 5ۘwA|;Voɜ4A>qd? F3K1ow`|?JP.$]P70JAE3A=YSåe[O;pfgtts\i>݋r -bFsd`O p b:w>^C Q:o3 7n3鳬¬/gL7< k~.C o_ 0CQG7V􅢁jfRyik/BB >u~%&ROOLͭA|McN\`/ґx57B JQf)~lj^n. ^}n ~_>+XF|GP[3Dho.Wz ?$DQ]C 0t<)x9x$݅׿׏vZR^H ?;Оml#:;ho.5ۓr)Dۧv3K9yduQl/xZT#ҰCq0Z W෵WUOms.cGկ`YLGzL"1P`stk q"4,I38d 8 `刊vϏ:ggz ˫E]G3ke`m~ޱyɮ+9;S>u"v) f51Dٹ|dI*nkf3=b4`N T5/q%KOFjn\,z׈9}]5ȽKi&Wt~+Kn{4b 5|QH4s SppPggkDtNe(g{yQ9>9^x_,(V`P%(x(*dIsfF`$1rْAK}O9M|?쑧xw vf/XYW!+mesC:rK ҉wFby}fR?jF_UY 0% =evsђkÿW0!  u 6!TD*;M~ !j4}ܻ"֙i7Ky)*Or)ȣCJNsDOyƐǬۈC8|Q:-jkM\brӝ%S#bJoڱhΛi&fWa^}/u#Dn<\ъ%?tԯg \xrZj|j'2z0w^ClD@/ϛ?N'],vz(RNlffZ/=3B@"5G1#[Юbqҋ*vQV 06gۑc@. RPJfGVOA?W !hR43t-ߥ $A|]GP7Dق?0f4`ǡ]u':pI:V{ԟ'H@!ȧg Q DQ\Pބ[$xWh}}=|5~lh@~hdv>fkX}\ٿߕ?Yrr0 KGg,ݍx>{ǖX3vwJ;g*m2(;0lCN+,aRlnuCË?TTi뾀n|_!dAgf#Sݿgnw؍o!ҼSWd>f&jk~ 9s3; m6oy>UpWm E`K_  \kr5 'N(1ART=q*y 4h62;Z;G2h:bQ#qn^gYwsKLh2YW! ]`6^@Uwt|3Q^YHm]5zPAJ> ,@P3 ~NTszuE~A5p  z \ b+Me'X);hO;v5jLJl=NwdXdW*"(F Oc. J0@@|lELn4lseldC  Ep U!)*z)5TZe [vՂ 7C4pV3_@ &hu(F )sO[  ZaY9kTm Er^èa-%^%P^!.9/!ly|u3߹N3#zLAm!09j4Xg;ƉgoM =>fGә=SSyVX A~dvm/9&0pbBK>3zݷHP)d84zy^ʊ9'ϥ##mjfٜE@ƩZ_g)26\ W3C4P@rIxoX{>59-RmLYGUYUtLsR)/ȯo :K\QŇmLG+C]`<f>,(N/VMitE~沶PEgKc]S+OרC~?'&N@>)(~ ̊<*, 5_pαn`ˤǒoQMGޝZJW;:,s>\DϪ ӥ=\pM&[SvttS ­ү ʛg"91@[FT]RV1_5&~$gF5q?m^{rAށ$wۯԳW FѳiGywƆ%ɗlsIl/.λ.ǁ~֘=a SAX{-~?E}s}\)⋏ko/7QG{$3v=N ' §@%{gɕ\l\"$X 3 _$/fbP1gȆ祬! ŨZߝM-ԏ*Q01z0況˜cQCGK-8#CB3\`?8P`H) 5 OEhh^Ewou[ +9 0}OyLf? \ H 0n(6׹Ź\oxg'0`ܓGڿבt8&Յtf"4;gv-/nAz{}HoKU pߝR4mWCՊhYH6W+0$#/1T?5 Vq'5`榅c\.q(ȦYWZqUß[dFZX4wcA))M4J-IqIt92}5Qe+D*3@cO Jsx a / E^53 sJ7;wϩG~*~bΧg17:$sCc V2Pi?Z:q+MC ܲ$Ak#5SQDw Ü牗*tλ>i/?˫?GaҞ\J`|T.UXV [0 |]| |۠bh Ab߆[{tK^˫rR_z5cϦ&s`@0'|n4iTU#SPǏm ،h<p~ፈG:{ c_f9ad:?*p@4G[ :_ !JOk.> A[`xn-xGꯂ|Z7XOQ9pߊL%㋒;痒O̩Osy$9϶e.1ɷr<Υv^u64`Gațlwp2^BlStdGyMbjϵ'ketAGQUqRǐNԻ4[ "PvA~Ww`YfycA *6. ewtG+>>{ F5=IHo*}dsy=7Qn& \Zፎ]joFv7>d۔#]KKݹj5i >4+椟D鵉@,~_wa8 ,=XA8,f5 `Ԥ<_ovhIbAa*Qv>QյivU55ީݭɾ+[z]~pο En6w:d}(pHeK)oO r e4_B>_cgbx~ɖmAR ]"B4z+(}umk̋5jhA>W/qC+G~FldC jJe]6!@qd@@^`(GNj U&ᒳ4fy}vcb \N\Ypfk:$ٟ]y?)fBg =!9 hfg~\`-? .#+٭D|X6@FW=`,gk*0UΔ)'zkE!Ӟ}XnUnd}|_P=xǢ.>mIheNGISSw&Ď4[GEM}*!x+i_C]c^J0Sq}lpzq>,37 Uvci+A2NTi ҳ{1 /x8WVG!3_` ?2^čt7-I6ɭS( rޏf'|_ivon?q!?MMKX:;ܙXފ?ŋV{;e?۟xY~նZAiMy͆>8 0 P9N_~.+Gro23Lz4 3Ax6MuP4@/ GsWm>#*g8LpEM w3cݽB_5o7|pЩS[SNto%UჍЛs֘]{frܓ )cӒ;QL9}D^ssaޥdIm_,aڦVzەl̴#j Gޣ40tAl-#u NV5c?_&_%PsOe驣.DZq(3EeC XT!@ԱKo~(+@ܿS8ڃ &z]0b`"#˜F7 +@#0   b@1l%~rE&#+27^^ᒿ gNOU4"RDKG3.7;=Rpy˪j[۝ɹ=O%{)ޟp?yC@IDATui7*YW'a'x24)v':^IxF,<6`7fkߧ߿!'F甿vkwAM^0Q7SYLĚ_҆vswm\9{DԱH/{ſB5z՗T\KSj[lC<=][ǧ~N9M%dZ+|_em yT`,#ALS#;W+-Qn[` 4A9[SE՝Vm |4wOO;5qMjEj\Z3|0oD7ֺI:h4O5Z_Vqՙ%iuw e;x?k?+Kx5';;!fnN,ʨi뻙NK2_#;J00h"[ YJ+aR Fvh:A׼K .H=ւy#COtrE.ldC Qxч̆@66Xyh xgUpl!h0v4 |C> Dpq55su@)*1cl=Ί|x6Ɯo'Dɵ.|$]8FVmU9I"N\Kz{b-Sc͓s3åaD'\2r>XmUNs7.&^z>P!`+0U䮦abKai)DsAj.3 0پѥp\p7sύ!%/؎7wg=W=ىH?!d]uZDJw3Imͽ6)~.3۹퐏XBOs5sJ>.+0D*X }8:.x[֬C^SEfO`NaQyν3F>NLB";[Ooj-;_'eݦY/{\4Ofgۑ?Gt.wa6߀t`/Wtݯ-h^Ȓp;.y)R릮y^!DZH!e"/ ۢ&(ܵ4%vyGҲc3Aq d3M, 0 kN4U|_yyTFr-\!\/qA$'+D: vZ[CU;3 rc읔iw<>C.ȷ)_}q޳?|S["ЋpY}9 : ~08OXxƆ'gQ곥#>T=(z.lBACgNiMtg5_++(xAzk qjCQuN[|V@7zΰg;:/w' {c)dۏb$s^ta#~bߜ/;ӻ#|1gYگh_vLfUSnz^SmiuiQw嫺/o#ys=kGś&ѧc˝C9v0r:o+qb9Ql0Ea Lt֍-mSZsEhi׊v"畉JVmMi.ȷ ~?XTIu-| ۔ 3"ȇS4ǹNxY@_@NvF9yċ>SG HaΏa͜&3z<.UQqf73&~#?LWK;߸==3i@Bi|99NFWf7bm`F&GyEqf%Ӗb?(n%wN˨99;gHK, K*/oP.{2b"ˆ«>&FNoD&gKLU5PEBV,D&R2%N} "H!KTO:,B{=_HOL)H9XSn p`ɂ (_k 5w ^g])ǟO~ʆ@66p6f Xkh.A傕PsvBo &B+Y`S3[(jS\{BU'P dATTM u4P˅{ 7[Nq^St@ sz_ 9\W(40ohcύss= dZO8 G"ͼdLNw4^@~iZJ ݡU!NWo?*3tq3Uh8UEu^Ԣ|O Z Wp^uɏW1i_w[ד2|ϒ=Sw>R ~n(]Z2g\6\g u:,r>9j>| T݅07m.h6A-^V f(K`мXP=)8o{osX@+ ˠ< BmG&mx=y'oÐ&!՜7LG"7ndmYN& N $~Ϣ)uȃݢ㤿pg5V}=' E+Lk:ǂtTPU׉zzg%Yy-) e =(WC0zb^`(^e.wp }"|ⅼ뽁D`à^6Q9kU:I\U+@Ls޲{&6;&r8C?T_-ĥ> j)Y1q́+0=~ O1j&F"2eݯ@dz \_M{xؗ +J_YV:'.Fb_ἿǭӪWqumh_hyb);c:އG Wv$qo1detSg%@_FP!8΀EMSQoK ʫ-ou5 >L*],kI=]Ԗ=V.Ӝ#NM:aYW!0g@\Xkg5h$k#^p;x9^,_v%Ȩz#@}Il ۂo6j(?&8>U ^eV\jx% <.>EhBwml{m sV`aųvg~ȭ~ |VH$?jŒa89W r~v9f8۱mσcG&wXD? P)hUN[^n҆;P:7kT_[lqnüMJ[>W\F9׬C8%&YcWalb29!]uFwLo뿛]$[ uw,.47jG雏E[Dpb?Wn#䋟1=>^+$J%aldC!UeȆ {0Pày)bLtO4  |\( ;YMc҃'0;A*hs(?S&WrWHqʆ>-່`ȩqZ{1 w8 |vb^@a$\?f:^X)nFHl^`ӽ7> `RCQ8@ʩnt嗽|/nd mA8.ߣ1h_߇yERH 3{=k?vΣX+BÎ=ü`i\ÖŦJKqB@"g͑سin2Sk2krٝgt z:CW/nwm{޹SF ʉ΂l|g {-h!ǟ =Np k8lDž ) -SöA]I}!t.~x}9һ?gC|ԌǬ@!2-0sdX9`okcCs'FîZ[8ĎZ?IJGlkƠAq| FXBjzw(_D+KDK_@{L[4dK#| PooXnbX.-񏔓>y) }d_IGޗ!46X`ҙrDPφ+e X,8'`Tp>|K|罓{^<ԋPpD#--)x~ 5-^O۫;=^jTo{,Q| 4/xy Xj\Vp :{pczM 6j\nMW, =ZAA~~U3{@_-eEL LOs[°K:qc:&viUs9?|=<ם9OS@` ^C`)dE3lV~M{i]NȒZYឦ̴+aL<⧢T1| ?C !L O7NJ؍$t 4A93@ 0D./cYmDjﲥ*od -Xg8ȡKQJ⯐Ӗ:>ly"ǎyLE۳+!U, &c֖aIɫx)wy*.aXoso LfZ)˳قnee1 Y2«n_D^jem+,;-; J;@=33tK{9< ϛm^ Vd%7F`RȘL 1X+*]Gv>nWv{S}UpF} N, 9ԽZ'߼ƾo llب ٧eC`#HAX+Y p :(Xa`iv]BzbRޚkF `\0@&xxW}qd5 1TryƯ!PHpǯ}t/AzkAC@~P0o.*T(Q~CpÁkp}{%!WN; E %afחb{9{Fy#6v)Rc)3g"D9ăGi\2pȓKO)w2-k>Eԡf0}q;qS}E*ʠ^"a}l ӝ[sܒ@jNem!pGf>L&af|A nXed} IR˚-e18[[JЀm"0(4ϯY~qCC˚3Z-g-'9|`:;νޭ.:Nc&*TDc=)NvwG1 xdm. fWO ԘуnMgΉN>^AEFLn !PA:YTC+pFq+3ɷ u)pP 5 63s{㾻:Ϲ+-rObTjc$/vX9O{"{2216X-Cj٭Ad No|Ҿa0JWJH h`̉;q !Ѐ?fߟaa]} Z ڏ/y0\pދXǵx#z$z{AԆ)9/JuA8;tg`>7{ކ u?HeKO`ZsH73y9ʽ&c]) o|>u-9N_|'uguўڍX{f_}HG xL‰}_}~i7f.W |0*^ܕ39x6+76ۇro/DIkMhoi\QM` j4RfhF.C`-$C0тv Z] oY}i5OsSv vG]&Z٬^V8 KzW E{Qه iKwT#L 䏽W+F ը \ecYq_ץ܁=u9_:_}o;vB3dr -i.;)e+rhE:W`F**Ec);J*馣wFlѾE #Q@ĬW'w@0/uuǬԿ :_u>gg#?tp :j)H=6@-1cA~cz7Ұ<+3TciIg/KVη"k(> `Io!`Aɵ;F{'EѴKp Q( b( b & bĜ TrD|;>^nW~~P73=YF`^&O(t3-H&>+h8-e^dozl-D:me{ǣ^V82V6% 50>iuP,9ݗ=ڏsG(@1<gF:#Ba U%BFR,S$~J}-,S`U $r  ˔*f\CGuopEaxg⚂ߙK wx$mNH&T̨エmX*$~>f>Rd︵So85^o/o_~/.RKYCdy?Y 'EXG"ܔ( $0X(@N` |WwE;YVł*5*Tey]换O5{bۑTR특M{jޞamIeuNK+vv?˟P9my$>fr2cԁ>xIx  5黉"?Eiojc oL`?G3_r:? deL6_%*Tِ-l l2%)^BQJ࿎'|(Ƴ[0C zs +e|"aoݿHD,M3r(МpDt? p* m+bW442ª@~v@7 SF~L#Vp.&D־&p1i.Q Dzm딘 ;(iw;o8;ǂ}%jOywu%iΰ|LϤ$0_9ټJdTr4mAXg4K H o@R|o{zAnXCSIC ?.jez^]~ߏFq`8SA}ЋSG0az|J@;UaOcO7NL=K!5HOH|&%~p"]nsQ xQ$ ~teQۭLCi+F̆,QQ݌w`he8t(B"u|rYl ˓˾BR 4k r@3n*o(rce[Xd&Ϛggp}c:rV̛B'TxoiYPM_ #ϒVrP cة,k|^vF _k+ٓrrH/yjY]@2{ g xxL@m3O0ySa9U tdoeK [p_l ln%tP@#\}6]^@,?(#*&&Aq?Fu>hhg଩mR_}ǬV(hW>3Zp> giҳBHnQMPpE 0`I!Sl1Y  Ց/ז@4RO$C"D, svo- ~ m^&5|mL+"py_/ J4Ѭ5/{]/T`^J H'7ʚPφlW?4~.-;Ӊ|{b'@#JWvQlѼQy?WQ!tۡ8R2d>Хt{}z3E>ry;0_A{)~Iwm޴J?m[ g*u5uw֣}ͮ޵!MZg7cd۸o9<׾Jza00pbu111m!twtaw>m秘Hx8Ax_%Lrrh}/0"&%V{so:rs:-l 5%)!%-M Mp=K{$tMi ! |bT' KM|;ܞЏsou\ ǎ|{ƶ vZIkƞ(=Lq-{!H//YG-)^q'd.LE3BnX˜ޱ1 167:EqE^32kِmmp%ʤ8X+Q@L_Yi ;4/ރ熛 HwBER<F -.B,w`q`@| ( "eH].rvQo_w[qil?{*r˂K@lK  yߟ*y] h<K4 SXfBGƉq+z@v_9%ggo.>^c%"oŏ̳qw"Cq'tHg@K.b,,IΖn;5/`sAm.4-̬i`go# ( R+8R'.@z ӛMm|g|t^GlvqAae:!-wAztN\\Mo 1gDK /v53a6e"zi:=h7CCGyU\^Qт`mYm :ׂ)yL@z@?] v¦Wo3@^'-Tv H=UtnWz&௽鹅gbq!{<9]xOOCy3}//[!ң~ =6mZs  5rҹL;A$hy=6sB-0hK}l GDdZ1Ft趡,F0vQ=+绉ODUu72N}&nU~7 qW7N}ݝMsؾ(R@ a 5îAӌ:޾!w!4Iυ8:+W|[sCXͷ&3~*po_as!3if2ƑWƗzu@$r'KQLLW9|Auwx ܺ|6:;|z8ju_&DtfDw%71/ [U)S@%)7Oj:.?֋ck1(t1937~0Oݷ@P=R-Fק~nqDiT3/˷ nqz}ʥ9njX+~@m>t?#[.d|4GCsC d53;Eti!vM|$nL61?^&Џf 1͌l2ȯ1]a>978t-}&,Gm c)2Gcv* e@v:0_bL@4OR`ǖ$~{a[^%?1șlLp^.+]y,17o/1X;s/&3zF!GK`m}p+ nn+0 *~ aG{DHV%,Yٯʖf^QKxN`Hz_E[#WN-@obRG@\.V ]{0N&Kр~> -K8 ?knC*ַhZ[q{7rXa'֔W _rh?ک$6 .o"^Bb ^pb@.L6O`~  $J7?ٺR8Ƽ~]Yyh6⾃Cb)36BS[ f)iIлN(2n*烝AET8W·2N!@ $Rr8 {@;~RH7sk?@gx Wb%n͛Aj~2Ae4C 4 i71znәWvG 1'9G;|xq4<6+mr/-3́|yg Pq\T^dR!~MJ?.C2s6Q87! ?\ `?' ;֑zu< S 3{w$? KEJ `w1د ncJUu~~g@uk)h|hBG G?ן1\17DſȴH &Pi^8j IZS *G}(a*;%ki+Y_ëۊh{V ~&-^+f[aکPz2` ]g%;=z]@9B@l:L~1x@![Ȗ@XYUJ)dK`S,pao&ؼ%pDZ' o`5)!Z db8h/bn&ד(66-tֹ]r#p\i?rw^O~н$Y_}9¸9ρO5A3ol%ϒV>fee- :}W~svœ޼ k.FNV5eviv %y`\Oz+|ֲN"`I@@n$] ;Q_2v@`;?;K~0c%:P1{s8}p<&o*܄2!*FfW1(3o2W#푬Xܑw˯.yr^W`2Z7?٘ 몥 KJAI5XGZs9  ~H/o1Xi`s;Rd_ \494ɲ_B[P3 =/2$KN(i f2F'I#'074Ar#idTE0ee_にA~嶇8'IֹWS\ L3cy ">CfFveޱ;ӽoԅ?A3> _0mݎ] CMoGN^}ھv`=bq&*rg do:/90v`%o{m77;gFax>{bP  ,"%Fufuۜ"wYv wY⦻iY0@cO*GcF|u_@?QH;ղGv?_+ r“|k"P`|(;Fe*tzE9UvfW׽c* {Y ^cZTUa/-oʎ~ڛ==gŧ];m=!{eouGAQ!o lkMSw@zz@7$z@?+0N hؐ|f9[3q#ٿt7ʕ~jس등 rr.T}s, s{(Ͽ?.Tм fIw$:cl|0~|.<qKOZ7SZ&о F:W'Ox|lNꁂ T?gcݟĐ]-Xx?>2,Qjr kWUf}jTjza`x{c͋\QFdžE!gq0lXεT^jncZY]l p%@# azA1R1sD -Y PW{tg?|<6 :w8y ;7v`o'.qy bBpx'ɒEdoɥF%oQ7T_ 3ɷƼħvDJE~)SsbXP#ԧiLie/qp;l{s{Y1}Kw9qr fո g DBZF{qOґ2xƋ~풟T>#ަ]Tޱ\n8R!!0}+ 6d?C`@?$~_H^4#O A6lf%$yh(nM=P>_}3 Qk{vZW IQR?n-0_r ̠QJyRdfًE. 'e90RzH|~.jqH/@9OGdF.ՃlOwiy;'68 9qx7z̷89< 9>4YJ Lr@?-Юg; BH1)i(gds2e-GG;H{&ͱCCd`.üB<\(qa,7߲t,O[5B[uVϱLqPÆs-E+j!*(GO &^cox7?~vw OMrV0%FH5r!BV("Cc_3/`p)E= l1-5u&.}Eog{o@edepldw¯b`RcPGq9吼/(,гr'H9tp '_J`- :k)xL$Qz!}vs_aߣ>[;9;wC;" 9_ٰyi_,eԭἺkl)@SIڥSRLdǧ"L U45`a/d/d"`Aly[i#gJ;:oO+:PPcqm Ng؉D0uOyZzv\ej̆[KYdМ`AvK3 sO N5- PQK keq!c7z@1m'pC[,^hKx?q1Rpm\jl1yCuN7n{XbG+.ɆI h<d8op9˽σu^qP|sKև·~}Fg0% hhǭs9(KӮI6o@??N_)rM߉ 2P sʋ{ rmߓ;3t'N=^fU8?3- \o0;\T°]̏N K#r^M& >(p^GQ{DL-.Y3.y"g;yؑWHfm]98oq0Bh?{\|dP Pn&-ǔ@36!$pW@K],Gߙ.Pn?? #Q'54-9c&v  r}P QвȫbUܶscJ[ﶨG} syUadrVERWs[_` Wܼ}{{'n}mաqg a=  *S!< %`R5hcr:ITY^@qE@@ELXvX^Z[liqjԜ{^9 ) QL%Hay촜k~\9 [ mc ΰbhsd+^v!忼~1`if!))C3 f@rWI=\ |xn,e.NC`8/9u\9qtF|S*zΆͫ~),:7@E ү俞տ1xoؓ5'L!Z)X[pyab"h@ 2T`)kk>OK(!yXC\W%vO8%#X;Q~{ a!T3׌9F) jzjjtJwWlhL{+{LL2#иXվKfh IO#(]T,0ݼ$ߊ5f|EgfͳBك ?t4Zi?üxuAs$s<>oސ,`ً}f"R/d; ݺ~6fCbң36p93u~?CH+ŌQ` @!0̍ "V+ mʵ-r:?2BPox <9xgĐgc^b|ƗؓS1[bOrk!pB,LalA/|}z /l>CS==SvsY9,]FBQ@0]i 7%# *tz*,lJV-Ԧ ?7udhbfF/:qZ;j@_yJZR9qc B_o֔xKXn\Us1gNW7k2.hUf iB@CeN<ko<.clv>C&0*a@}MXG.#G6[̫7ePο#ߘ-ͭlF<1QH>ꅑCKm,_5Gv=|}KLe]< WgU;֝+^5i[=ij~ڤ);vp m[9¸ħlC `~E:(5wz@o58ܰ| v7p])Tә MG H³MK +ҭ+Zh bH]gz\Шv=\ }ӱԜvmЁq` M|TvNjM7(.bZ5^-T  .m6%KBr;/m!~?,u. Qr{A|oL&%D/m.k4Á k "aRPGSD(4cOytT⹼ƫ|9gCʽp T T-3ݾ(=*E< u;e0 ]OcQN?O!п.(3*ȪbFy"3)h"? *s qū[bܓy~(q8V:@QRNSyvs9t3m#.=jPSiа&?'oHi'n%W (~Fx >,#*,pR ~y[6/ysܯ_nZct p W '=9LzCNDorrKoaZ؃lWo𧚗L'ئ1;ɧ1O`a~[Ch~N'L?W ' 2Ld(K x\Z73n5A?wݳ"G,/qT^sm~8G5N4~,S9D|czxDljz7 oZZ)Է=™/πV-EzM `Xm)`:HVʛh߻Ua? t03)gBPOdt3߹kqmq6>~-3}X37J"y<'?XD?SsCZd_t?r[96^6# J.&p?A3Gh MN{B` 0V2M1h^ߝǍ6`Hˆl dK`+#  py r{}+p|L}ЂB}\vE~r|UށA/‡^]xv0h\رR,$Wڧ&d:ծwE'WP&W tD^`ɹ!.v{GY-;kлSU^;:8.;ͅA6ǚPv6#aƂ/ TI+_&=G =G@Y .酮հ6V+˛~Mb=2;*'5N=ĉ9xCnkξ#$v`a@iH(D1Xj `j:kZG/o.ۋ[-L,iOkfgs8^`PlgqpD@ @@ 79 =Pot!?l >0}ˇtJ\aN`wF/E, JQ&/v/RV;AU*5pA'z@{գ O0- B q ]g〳W;=Z.[sAyoc<:Y~Cܳ# [xBB9^Mbc!@-sUڑ Od*D11( 7 S7N0H`e i.ٗ=q`:~(otwklRx<{Vl\= gG=y2abvl#@4=y Xlk;8 㠚A#S'Eq _)"0ME}M4' ̣+ (+ qvΐAGSN e9ȩ^nXU6bO5]-|1J][*N7n  N!+a6s |- uwoK Ӆ~7|=/>.O=)~7VUt _2 ȓȉi*}{|q[pG:TnjNG0ZԵf%fy;U!u]IPw'I dd`|V?`6r䔐"O_t{CmȏX^^a>4e-@|Fym{!t3G ?؎?< F;e(H1r!3lw us>vY"ZxĴ"W HP$NFt0IB8tz_'}P0X]*|_h%г2M8[hIVeH $g`1aE4.|읧gc7QU&(v+ѫhSU[ߋ:Bp-*h[?ȩ sӱr;vr1:3*iOs~ok9oZmeNL,jm#`K-)R:v}">8Q أeEYX\h-!OH0<~o'!T<_ (`LBKd}@zrڴY#xY9ğk/v;Rޝ7B/.N}wg~Vיdx 8EgN 5/7Q7^/%(VV,iULIL\3OM=[VaaTC YNxG DsBvU!ps (JF5?y^W՜~PNNa~=~]/, <[Zy{ ,|^+ q@wi&mŷ":BÇ? tG_Wƚ2u[z&>A\wHr/)^*'8TM#&`ܟzyAŻv7˃:s' ⚵PTŽKbIB6.TWq5y7~I^eEg-PON ,*3z ƌ:Cb![t _ɭFd>~eȖ_P ِ-l lr%V` <2s)N$Iqd^@=#N>*|Ʃ1xHPBt-j]2 c6 ^gAKvNI+.Nm ]ߕZ?.E5 SRwv+[ؖ*4k貀5j{Cyu?|AQ+= }&bV Wf(ߙ~`]en+VN33H@1pC@0ijvڔ1D :8gKΉБޔxSot幃MWY==BEz0[]쑴qC\̑d⭖=#ySHfEJ&*D!8$,/c? qP0x;dx>IJ \( +  <'t6 hz^25o,)pW԰Cם?(uqL.KhNwyɖV7H!ϟ `Z o㡳<],/f 4Ʊ  ( dg@|O(WxX8>zhM;4On+藱䨿wu/&p}W-6yƳf?z~y!(/glx0sQ{35 G ύh=S{1%O_KW (V !E 3B)|MBB_{{3nrf;.n<vN.pP񦅉8(G"f/91,8~ t! ncˑ/ag 4fwKq^Jo+ 2[O?/%` L@>$7{GP VxF'w;tw{/w>?{wEjM"Íx`C<`tr\;g{w DLC$wa6q8w؃||@j>|!l{ - G |LLCd."4;~fWׯz'Φ_srm?aoik<%ĺA igLfH,\зGw{ ո=0580N12m)0Pb& iBکSNɽ!@AH?]G'r3Zc̥T7%yR}1ĪjNg6"`d,y$Zo=| 8P"XfU|:{z]uNj|Fju*!ZP([_0X(%#N[,@:K` =SiPn[ȥ'wXI¾`7 : fPt௷({Ɓv c e"7J~s+gsp6G@P[) D; 0uЇo-^~x~oQv{XoMs yENς?9{f4h;E!e`O 7Pp-FH χ#K1H!̟A6?(XQCHR=;ؑG D@wN}{!JnP+(9ػ[\y7So{ Sχz_~ۻE@(H P!l8g5,bNCII?վΕ'>~n$3_Sd˟Z #P^-)`MI _*hA\Έb<a:R Od ?"@zQ@?_M@SRhG_KS\ǚ}/5CgW)[F|Up|CGIlυf\fÿ>V?`5\=i!}A jϤ[lQ?ÎeOCh6l%y@܇{٣uȇΌ!߭ͧoJ^h';<L*&?yR wr81oН ^D…UVWck84qw_> φ7ycރ ORk}H9.a-y2cy=oωwz}|<ڃ3k7G {@d 4jaJĂ]_ ˋ^Ɨha2|Et'ZUs$λDim=v@lH4/%PuS Mqwsc|<-qOaË@ hnd?P@n۹isͣ[ Wϟ8L@[ "/~+1Fr%^vGt,F'Y ,_/pdGoj~?B`{i{Fx?Pw&0o7(F'l6?Gzk^fK U|ٗ%XeX)`i8G(0/PQzFyًNd9tĿo8K0˟'F?l/ήx[t& (L(K>!P)_FCg('CDono)zCR%P 늠lH 0pS0eϞ8v{\b59;C}Be8W<(AQ;TQ=(fpthW- [%+nK9eKn|b-I_ @-Mk{9-BY³TkX  KtF@ # P,_ o}{: q'4:r>gf^/ZHB{KNOI+:qhEC52"dHQ$6Ç# P<"p?F>9&.phMmc.:` 6¹L?>~NЗڧXFBxwɆ͹"{q'w'^8^'MsN> : ʯ閁Y00;۳[ې%3c<न?RTD|QAaW;l.v"*XAEHnwME?$$y$y"X_PwD\Rf9`.SmQ/ϟ܅8P/9;sr'%K1>ӟ8l@Z#JҕsMdVJ>=n==)qL3ۇ%3/s{{v4: gQ |&(7ƭ; rc"WfFp1X -xf|_O&" `H})W={}?mP+~.pZcnh#Yo򽷝]NxE|rgkj>8ZG>*Y_pdbOwezz'5r!GE?-OO0_])LHPv+*sʷe\<|0fdz˅1!>D3o-v2]˜N` {D A5M,a>VJȻ|s`ɁMgwz#^Qɪ arTnCK 7ӄ&CxVZ2k!'<'\ 3< h—%ʎ5|Ċ;eh{d[v*s`x9q41dZ : ]Qdc2@IDAT;A<`Ņ>&GۣZQ8UpLd:$LlBP]JM#nc$?67Dat`SK/Jߘ[y {6^ߑ ',`0A;8Ix :;M3+TwXXB O]겇W!^'oO:ޫ> b @ f(Z;gBKݗsWO׶kGwΧ.iG̗W9nHa77RǢ pCA9]S@Z ǧ ~Z+/{Ȟn,bR[GaDŒؽRu3HDg S$3:jפNic_wSMc)osE>a5o'~S*,sas[1Dw692 '?Ʀ  Gt~M~Dex+,W)W9%x,٢xphm8?tAɫX 3B̻)^m< wP~_|k8>nk/yߏvY_L%(#ݍقrzz'Pc<u*ElL'GyoMiބf r HE>_[urަ ޖޗהm0/ԥ=*Zԗ ίy/mn_i_X[nChi/2 >nuF`>\A>BIi䎕.^0ZW0lO 3*ȏ-YoWa ^ ,.@Y`A`{@} ܩ&ޒ!KEET{|@s39ρU>֣ƹRnVXz?Vc>a )aG!꾃8هSB)42_3Ҝ".Mn!?%ݟ@!e'ڍ& p4ϙsWl)ru@`;L P!耼$ǭYw?Q|m .(J~ F\t%^0#yH˟Y9" UlxQY%(j3CҳPT`xfJm?qỂz_,G/K{)(j<%B{aF[Gd;;V'H{hɏw"®\a ):3WZZߙcýδNw&, ahyrymoA gPx^N(N Ƃ夗$g^DIjtʪK55NZدHφ_77FESz2-I7'_&T;WVh` a!2h>u=_nV;,ɕ; B7de' "WV'(WG +k I%M pb˗ W/OϥRT=슊g=RG}mKF{N"ꛠV"ʽ}Yаo Z(Ws`Ӵ~#y-7ζcG&o&_{K_Hpg&<[.]&iD5"Ժϣ|`b,q\dJW{t[pB=_Lcy{sh$l}ϻFh"hؖq|L[#|'=~1n7&FzNUtn D׎96e oA;X*f,u\VSICO7j悋09U9ty(Hm" dɰmb˂o/}Kw{sSޭ90kGLMV]%=WDuy*&8LufroDv-#nm#(.gFn3¤>}m [6>"$K[3_s1vCn@gz vx8~Z#yp b&)5_Rn^)~vij^k<6-:.Ӧ'4-72ټ/gɱ17PXAA*'Gnb J2G cf#"` >)(VO _?!r,{y˜{ OK+n"*`_ρ3 w{@xZ/$*FGw.C b-v7aaBþ2{Rр2R+ͅ 0%8jcem J/_k_s7f.)A "h{Y\bRA<#}>&?Fla ^;ͧc毑8`>#A:^ ?L_JpM6 w"_NSw> $K}X֔_ ofcn"KSP~l.^awGRP /iƴ65k@|t{z3;އ&{XkRN'θѺ)VM;-TOc3O2mnl>a&Ӎ릡]_^p,P "_[ kWk+HwX jpJ8$j >ߢP^9&F>XΘ34_x:[mpwH}_DZ̶GNBm=ԣFd=bWo~Rd/W{[rc2%<Ń*Zzx߇z/n\=XGM|6W xeҊȹKo!P,|-AG hANN̲|9p,7ݽS)W-4ߒS~roYܑ57E5¸5RwXOrts2՛G|m~;a:+r ʝSa]h/xGWw痝 Ph"PWPo;A99  8uЀz%8sWՏ^v4 WK3̈ﲣmӐ`\q:Sdj !uޡ;,Dd-a@ =vl "P0GpbGX;sw>v9zÞ@h'4dM(ZLl]}6`?ucWa4@zWPc2ǗKk`02TrSO6c#̯RK`.\znjK"4>TW e YԮXp !#lۙ| 2F?QGQH_%X/لzO'`秃Q-125SK$,hy(D̓!imgkG~.|Kȕ&F /NCSh}@ #r0J`=ls_SGc,??nXE!|嬻1ﯞ9uVէ{Rd73?Ce1UY9jQWGf#$W#9A`nAU[p_cK˙>n&07AKFnj i— f%7'jM|(wn(rOw9MИOx :1B;}Ǯ 0LOH#LX*(~kHz~B'<]P Mu+<-_?SJ>"L,B>0f@pBrib"1,L?A?|`q7O?䀶XӺ`OXaocj[`9^6c 0:]N=.xGE,J?.K<"?DP4IڭlwL~pbf ĵ=k2 |kDw7W}ēP̭Tr@_9¯2 3iof} t]αr&|^Vٹ)7Ƅ೏ns+K rP_ s;p  ZLYĮi_:Zb;yiNUEk]ɫw;C~6i?tf޳id[+1#2ez/z ]O=Ӫ׵:)HSݧw[w}K ~'vnY/I!H_K𷈐LdT/b,/<-.*&/VzG{[9iտ E`£obL3ryYPBgnCڣ \0[}~TwGA ړOE9aAz@T?ڿΒbG;@߸|w|$ȏtϊ)ֈ0S_PO$8]3c"Ensľu1aAxUuN}U96ρVq wԣ5 yjXʿk.p|``T 4\D$pNL8 3*ī-!̴RCӺÏ='@]~.{ 7e\zvrR8p ~ks0wyޞCfRlN𥰒 5Y_/ rN!JA8@P<֮tu_g+ u p -lj/x`˂ YІ:~uKYlSZ`MsBVRkbK'U!1D|g q0pч< >DYr n@h;&Op>z^y<)܎dO7HI]VκgFW>1}î|3w\lR9. ȼ#B-=^\zLi.1WsA@ѹKP"n\RԭџcU fxI0#yE_- \YO{^_'n<߆݅渿IQ9[0#m0[A;SP*)@ ^9^K@ôv|@n9- 6qůf,!Px=Qps1AŅDwCpy%qҊ&H?csmI;z "dHTsXU?Y[hᡇxs,K>>yCS~=J'8}9Ԝ _51Il]㴺_G'_MnMې)Y ҷZmgܾAɌtovI*r+ǿ3VͧϬ#P8-+Xn'XA7K#W3 *f~o Fujsռ 6CAGsA k} ,RH"gJP_l6 w Gg`̣)Jb}A4\OQ4'ß.b| ە]ף??#Xе=T8 !%}gNM1~ؔhd@tdDS=_dd=P![z ‰} @o;S=χC,VCooXASQޜd#L:A$yxFG_ By=܈9ly]dձx;0Gk.b|1_sYȨrKu{_k)rE|*"%\aBOp[)Hn.n[A9%( 9 U\ȑ԰[] =sM>?oK؇;M7J@˜4TQ!JM͎qSNH`)ݱ,Djh RfL ׷w̟Ur< _aˌ_ O t Q'T^a{w^`Z]߫ :_i5Xѿujx7pL/KצnoޗP ]P7^Nl]<0IgA=1AP.fL(dwD&cDpyM즤?6q)IzE=[Oք]?#CZI9 Opr^SL8 cC8/m1q|~%Z1A퍳$q{NA@ȴ("~| ηS%3Uz10]POG [&*5h%Yt3}%׃FG3u~߁6øgVSRٺx_D)(']nAd#/YW Gʛ|!nPcD\M;`>)wNxtɾi_׷Ey7@yOgjߌ %/ cxgy{c]{Ÿ 4Aޥl@~"=O$v7a&bDZomu٦MЖt͹;]p率Q|d={~ u.+Ss _`Ex[zϡNhڧ9=(_%L~{ƫ4ྭ @]ϟUr%H%UtA<既ݷ'zAJ1^''T=WX'& ~C; n ڂ)01Bg˜v컖`\ 5/XQ}70BaFZs[Os9^6Wa͙zI ~M`1k L47R~ٷu&4_\.3ganR Po{KDw{T$,p~d78¤Vc "ʷAʭK*(uւNN#At>: ԙPIT9sjhǂr1A6DDQ{PPN6uT;p씳T1txֵYfs0vtp]юg}++H~B*sjjwγ~B[Ֆ^:Os<* Z|p+ a]A{0]ĦC3i RT\|Lܯ,Wk[nzj$:[Mna<]?QO)lXZ@0;]*3Up]a 8pslsy!wV-䡠E-']Le0~1r (Ven΁EadI3џ0dE@? %kp~?[j~ gu6zkܑoXW8->J)Qm5Gn wSg0irZ6+ϛzSl#Ol1z}jsn. R$FvpDͳе>{'&|gۻڥCxj\Գ16xRA`@M~2AsѮ-ﶕu>#(Wu֏0fpkpzC„=eᚺzVX,,w;Ne@KQ9!;NL h/( #~3n˞s@]7/Q 8»~sA0fjLMłtQf!0!F{r`"S+~v@`B`aL1-w= cEe4_vsqn .޳QOϭ R*>2%ڼ2#Rhwy,3.6cW!. vkrgO l6wD+ Oat]]ג&#y9”&$XT=޲A-A9;UnaY! džôW=vpMSGk9qA:"ky=wC{Un%#Dkuҡ:Ľ}dF)&MR&|`Ť+q{1s4aaHsfFbs6 %gb)yO \ ?G_A!HA2 ar8YZA|'wCt0s_a# 2ռ^¾1̈PMLS~80jgluQ|w,XcҢdќƫmG!y~r{/9wbAΤa6ǽ>}՞onw,ͣ'OuM0L>&U>!( ͤ bk~E_|`\>mt 47/:{?|Hh7Kh%)܏~sœtobee_O:VRV*|W38_ńE,Ӡݎi|v}  $s~-&Ў溟j/CrAx!vT.),m$H+A=s@BCflҏBY>,=gu&L09*?K̻=n0dZǚіXcp|fw!iwxuxUH† 0G? Nީv*|scy>%YB !XAC_k ; B+ &1cG&. &y~EgdIƬ XktW)'|d|Gkrh!rirvt"9VkG喎̪fjG&bϴOeyȎ㽌_]Y3CE\7\a7?ȓY_>.UcRLAq&twsyT܏ƶnqvZQ 5.*zIz9??Y.t)،߿*i'^Fw@ gNlGSmoה8H>-_ԎM&mE"yX$"3?&umۂ&63#Au/j>W71#_2{g5T}c9PɂAYPoD6!-bw5= 2cW@P ~#Sa.q8| OLڞWpABϐh(CM`/Od? 4]v23OS@OGϓ_]@?; = //kh-Y.w IyĿv#3A[٤Rhb|aTލgaqS7EϻQ- l-IfbCjCmڳkRJ_%ӳ ?ah@CEX=z#j[4+Lvg@t,Hr?G0]~((qcA/3&"_=ku݌'C˜_:Rk(Z(u}Gk zhB'\{@IDAT_e5o5Jk>Nkm4A`bzl թ2)˴JCX /F$dw ׭-H߸=ܖ!!"wNK*cf3Av5&!8g;?%q3Q@ƆQ 0{wx*aGRNIRF9{gn ocUbrPZLj KP>#;  xδ3Uǹ՞j^ >3s@v~On7vw z&lyxy8!S?;trN_n%:)B﹊w9xAfW߸~l`Umcg/ضiKx? 0MZ!yO}Mm1iLk6N??>u͑8hz^M0,AS|]-c\D|J\yM/&( :t!HGiET9=%B'HRx𧚅t''//$] uOD1?*6y"O4-mS[u= {x/ټpkwS,᷺>Wb$ub,A (IXN_#L?=?,('g \7 Qᥚ@>CWn/^C/FΞ!O9xKc\x)[F}ۻO1ţlC9Yԛwfڍ|O$T[Uokj.&|m!/47 >։% Ս%ݗyHPG ^s[t`DoRQ` T ۧ _j ^F[|&[W3XC5|紟Bz*ܚt́`MZ>eUW=G">^4, *{ *RaEiA:Zp0h *!cĊ?H7sST& j@yM0#j] g{{W j£Ҽ@gU߼nFXo[m{b?p{>ar45eXgUD0N^'U(\"e; :S m=Dp6[w67Q/_XɄwPOc08,Do<((``[kЮiXz}"4:}H.+ȜkAў0o0]xm w[1e`G;juNnlt$&A{{٩-;DQD.زUFtk]>nCAw1A0GX*X7ԩYtDG|mkO=ݽgh&o΀0_KW_B1/Zr@^(X}^ia9wB;8xmrɕF+v'bcDBӲP0_jA9)ۆ"ت+:\ЭJ-Sov>md *۞F١~M~ʿ["3]gv4a?٤4pIAn2cӓpQ%-պ?٦PrNތ}giG^:M|\|'~&Z_,(v ڥ5'hF ~W\\x~"ȦZ֊187R!:sċ/!%E-Mud/s LP?/ri.Q7@.E;Vp47cAE` y˜/F  L R0cAh,P,vT!e39EnC!-*R.t4X *Vtkf C[ &Г(HoB)gY"^^n h 3>B3x:j"{bS'R܎`.B2e8/w|E(%Xe9סHޫ9\o?${7y;hSV:+? tf/6<¤; (@RO?뉪G:R |cw}g;7!^U l? |k{~߭6%Z\@6C}swWtԒ'%.zT=ߊ'DEfsF J0nt$ } Ct/LM[zd* =:4kPN~yJ ˌ ߗVpLnc 34Z|J9Y [Dx ֏ՓB<%OP>>ԏ3$9ٚLe&a0 `cta .LN&(^`[iffъ!f%@Vnocw¿ ICcvٶyX;s3 VdGɹ K,1oCjmgїs(%C͛{:dW'\eIgf d@[{0= NO IL1f+WDSwԭ&!uTqz[ET9|_Pwm,ܹLlWL}lQL;P[ͫVЌzO|cK.ʁHUڇ$Q^3OqKKėzu ϩ*9'Og"3QQPO'7 ~roL)Z `Aw&?#B"wN=ɿ\ڙWUŴ#A"ѫy?u6h|Rr.*)je=Yk|M M4-SB~ ?[綺'dnsZ O~Y.XKAY$Z& o//jy.0B aJ7ȷ =qG%+tʭx]8~y =nHl8}\9HM~~ ͑+a7o*綾!ǟٍ繾ޙyԬ7ܖ#UJ՞\]័,Lt*<(oI^.7Aǟf9+U{.7[ iO S[QQjҪ/v[)7rh[beJ[܂^7aY.-Ȇo T% pK˜o/X_mu#x +x"?&$,2=9%9pf+W &} 0r#84[ YjMAPqFTԻ ![ܒ(ʛ ;RآA; % &'Ҡ`"berљ .|ٜL&wjة~Cg!A}X^H/X)EJDr i[yO{dNt GF)#7-ȇh^"g ~MT5@{ Xa@ U OkMΞP'F^#(ll+L:A\NP̄<p >*i}hiE0R{noE(9vfgQQ9E |fg Dw %p_@6)[fr1O*ּ AȖ>vdd)=Y=e ef9 5YE==`k_|)ӛ E{k֟8u=Y&@:^+&kc_>V~n@njHE{]G9xPz~SOyvC׷3*R@nwߺj|{]3>KԫTgg !J{p۹>uw9Z#}Nq—3EģZڬS9W ܄]onbAL0{G*-­:P/WD_ ? #(L{#hO,XsCLkFⓁ+ Y;*Wpr*9@mӜcg- ,`'Kᨅn9,t[ei 7DOPo"8~F{5'V5eg Vo#(C]OZ>,\=LXG SLNnUO͵YD`׷=SnPr4!bj8M*ߣ꿼w@cN%u7J4bulwa%[/3aN&ص((嶯_UPm,}Jq"#(޻ ҵ ;)qz4W5q=P89z[ wlBDB] %O}qYx<@gBbxI۴+%Lw;_3QwQk]飇/1b2g^"MXP ȷk ea'5Ɠ{.tQA,(J.`{/?{džbWl{.6ŊR"-l{|gv" . y~pvfL&99999lW9!gО/G&n(϶Hc3Aer+(msrS'{|x%P9>Û,z@GlM65y |tLuˑwء7d <60#G1rkεOҾ熫W͠G#j s8J@4B] ^ Y_\];wt(,az/pf DvJ#\ǂב72##dn'VuJv(`^`(cee?糞h~<3ϱjE)Zų e&J8Dϳ4Gܛ3=A-&\p;7z,tb~Zl:yoS**=DCj)M5qJu5 f"EOz ヶ釡9fA01,*h5J Pz@?/@cdP/2W׀MI>!M^]]rMm_bRhy{}mgA[}\ki$ ~'nAMտF҆|31Jn\,;d%}w*쒳r.D{=qLwlWМOn7`.S8:\}᯹OMB[σa3`[7|>(} ep0bxtvhʦmuśjD nj"n3Q'8G4yDFNH=Cչ`^# s>; q$/#]}4㶬ܿ7̼ TRcMJfwhiƼccQ V\O~>le:h7aB>g~ ~l:@^jJrG:W;j CW{SvuS'ʳ@I<|gɟB%]>ݕ]i|}r/zڰVրsᾄB9̟ v.3L}:#Z6 WxB~u++xUO/=Å!G0zT@9G`ܺZ`} Ç*ۙUrN3؉p?'Pʙ$6cQǰ(dp:F6ՐvNݚD oblLYhk$HD&( ;xfY;Q2+sugHh Xi&9`0=\ fDDl6/o`.qO'Į_m W3IGplKpbQή=&ZEֶ@?E`"8-&o#e 5&aɵ4mu]B&>6PB C{#T4ӡn' 5%5ζ`aOh;T'A/,4’!Ko\soY7g2YXƇ}5~s&3nE>ٴsϱО-§ :>LL<īsޝ|ldBӃMB ;9$ܱӊxMaل5'upr '} 4݃:kR>$N y;~l"u^|@\ O% Bc4hm? 9Y-6=ΑSȥzς>!ƼS6A@2N)@BճYy*H{Sq-82BCIw!P-|XסQ)ĸ:s[~3 ,FEdm@@;@ć1-l|ܞw3CbAw#}'ygZmHia!m)O\`^! iAje>)E [^yn@'!Oe݂f`Z Y8ʼyL[NlzKf : p@%Š~om@ɥ=v->ѻ4D2Ax K˱.Cg̻ yjucW߯[C{gFO 14f @G ^ L>Ȭn?/#PhK.2vR8=;z3`gXẙ䡕P/vamHRX}A,0qx@Rkz; xGJ ` u@΂1/TN!c6Kרӄp ,XGzi+M6*=?Q ~x9 0ADKF`%A O:۩q=~@$?/41OVGgDŽcxlҭչ{4䍲S'(K Ů05,gii0S7,LHuL[Z;*դ77Z}wftiMLDzT^_X"@nIr?%}bbҪs+#3@g8kCm?HhG.]RLs|^D߷~󮋑_DLOTv~OPh9BPq,~ZV R)U@^`[p@;Y)O,j_ꈠOx})5`/}ĝ 9)LFGyiQnDPZZ2(o3zyk;kz7{~GL '9 X9H<;hy3+ˋe~ +s%#4)#ven~OL 6f/{%ñ8rBĽYX2`.ˆA9Wg"ZK5K OLvm1Odw\ukL{_:c69䅊Y<tB/Љqq1y k9ep#7)"~;tu@n߅0lasғH;~#8BDLdəO &yMN&#L#O+Y5 gy/-K~M?Yb~B=&o~`C<_a9ڱ'PHRj&^ix@y#g͆B#Ew~0~7;@C]cXs:tS%@ q\mXKjQ7#N3366%qA)|Aye'wNsDФA;yg|h1O,M@ΌΒ_4o@FPtjw\KT7 K$Y/ C<>oK6^X/@C) o*G]%&>U`Q Nw*=jCfkZ]Z]r\u teMKY ,_!?C``7 .v\A|hJ΂qeZ[~\ I * `x'E? I @=uh䥢3tó$ƚXpP\!ؗZ@ ]hUP ,u½&+=ڝ9; `\h`-ƕX.nC Ndr}ˢl<򨷾Oa#۝嘬Z~&5e&"SCtL  2b-O@A@rnap#T=,T4I3QPf212jws%+i*CZ ZlS;i_I['*z=,yT\ߛSeUIU k"ya; @}(PGcuGg*24հ=rĘ5%<-%S vڰn|@ zϦ,ƼKϦ ڴzě@E|Ɠ --H<8 hf@Je0Pc0&BL+v{1= -fP.:%AKǓ,G թ^Q[ۇ1* ơStӼ]dؚpփ19g!ZrKA++/~iI!|`5E#Z]2ӯDQNyI /lu)S+_4t~,~t z92t ͜3qV[]XVIas<M*6J\)ܪ 5W  &<[zG㗂>ߚHk=zYؖ3 s7 蜚=3k?t .dٓya\[ҞD`bs= -8 Unr;7I].XLK <{*#N_ >@_Dvryy*PcX.Ioџ;b=EY1=1P|ْ&@h.&_VrsjdؚvgÅ;Wr9 UUBZ!:jNaA~Y{iS_ !v f<y*W`@7y@@'P?Kr.4^<Q+m^Li"?eݯ!z1١v;<] ޤ&H65 gO 9ЭTf@ %؏Ё>k{/IAcH3Zy¤7' 'wtw{Tt}]+-D~_z3rW3ʃ#;=IM's}+U]Dr6UʹH-\S2"60>9n.-t65<5IW}P],`]%@aX&3aj[kϕ rݣ@ɶ Q"vrJ!rgf =8_ Rwu}/bV5|Ȑrw#. L: 82^@?N`۹vM ƌ>B`lYᲿy^뿥4dԆu=G|lu ##}_23f;;w}Jp,і?+NCn!NC!/](I{)P,zAAdk $:zB0V~M&pk* %q9k_2[fb,ppVha⹝r: z?DJ$BOt@NH1\{\nBef0>\ lh7k dl (-6s3BO[,~KYi'?z%E;O<%+B9rswRs4 D34- '"ލy(3юA @<Þ&r[qW.0֏мgb~ 1I G27{N/U$]jްS_kwuuC #{QM@~\.!k)PD ߃x7 tǯAS54_3s, UwtFb$SD @BP,+l׍9vK:&3vQ.FYlג?'Hx"+W1ӆBYKmⓒ5?T>w|H]ĵ3LZxpJڏ O”i:w:f@ggoPs'p?F}| }*u_^ڇ9 ~lA.C׆27gsDdOXDOkrPaan|ޔ߻xv49ħ0@o7֪wGE߃|f}bUZnS:\^x8+ RY۪E[!txoOhGa|Q>+69/4U:pO5eLX&׌`R nh{ <f9=x)z  7 (C}YیO(|ۧH=\`08!B.^?@*HeA.=?W)'*_v[~6N.P "[ BXyF ^t@"Lz/sku U.2-L٩i#8{c%W، 5EgJz ̓ 4.Be4[W`^@=K QM=ҌGK0}.Wl7_B=|VKac'D{>6&別cYO8e&IyfF]ͳW7# !kͪ o n_ {C Q/ꏳIfxN>b e/d{QpRP?q~{+oFpop4 8:`T`Q?8$ǀEP7 Na,M 2=L':B0#C9ld.SB&/?^I½sOR,OPzgBmYW_X,*1n_͉uAaz /}OsLx%oܟ_L{ymڹdw訢]Bg5RGc(?goYӛkGEWӻK-|~PR05:*(>:--==ݕ2-ڗ Tf</D"?_Fhca{_fox|!agH4NEw19 }FցN U#g3*㔿?#ޏwbx7/q9d>Tλ21<9}'OZ֭o/t-h$7*c;؏O< *{]1m;:y?\?u' Pj-#,ݩ rnaOnFUqdLCI87c?*bǿ͸)ox_I)/t#P2-@#c0#cr>lNcޝ1^wE|@~\S#v~Q+p ;qq@=D५+<@!M'v&>o:k^G7DԒWSm*{нoq~@;ƮˈsT sWb07C3'^p5u@_i d %#EG֮^5|{b_'x6'/Wr Փ)a*>-U|^m|3F?),~=I'-&ڈb_-0K:G`'_D Pwd_+мn__c c>o ' 'xzo!8\v^6ek[ xLɇ|fȞw X TN$J`1^!QŎw&``ҭhEK/XOgB/J =8f0̠MM@,9v;ȥˢW0Vz;vne (X ǃY@R&N}p6 @/P=\T@1k,nJz_hHolkh҅Q(Ÿ&~)Pk1^ kFzh N\hrbn:s0AJ!0`n$p@ҽB4 @CqGgٳ&~28{-臱&>uKИq'ʭ VfԆ|u{ Pgs\Ro5/w2į,GlJ<*ڨ]gOr g?RܭG\W;mo7s"/v A@,tOgqCfZo%\Lh $J'ҝS;AgvO~_Bxh} oA7t )el/ .ПpœKr׎„Lbo w< g ?͎ӡ:ނ:WYP5nI`s 3>trd{@EӠZlJOӇN~k>7O|d&T.׃Jб-l&eCRgp^%]A(%sjI&|͓~)r-B#,gujຝ=Q`8&nxoCΌ^ h׍1.'ZfeHؽNnK-_\ L\\֋&^[ò#W!*\w5Gۡvk#v%rzayH|ҷ J{OG)X4!—r~T4/PYtTWq=.PTW2ci#{`gaCgl!ts`RTsݸA>_g_M;B E*hxQ߿]gKkuEۀ?6F?Nc[?8LF K0ݶMagr]Pp8Q`.P-El$/ :B'dr1/ e^#Ky#h7[yCisXڰ@_Ձ_nѫq0^u|lIv!C&ٿ.#~ >i' Yg(8!ZƯhCCׅ>x@>(O:GJLm,lO;1tP?81 Gmz^tĥ_F[1':[+ܗ-~V P7Wt^#TVȅ/a@*nJS-"P xn*U]ØVG.`-  0VB*&>G.WZ`+ „26x Npq*[: G@:)0E𹍀Gs$OFnE./Vc3? !WP58c &oC T~0P;uC׎N3p/_eRzxoh(2v% fr:z?: yk;Q@d +OiE˜CgzIjr/G;أ5"3$W CX[cAG# ;ф))ƕ!Wqf)쇶Ip6SbsYU)T׆u­ۄ6:Z L3Hju `CPW46X!Lj z@K 3M8-oLD7Egof ?[?8qM[ir5?j:訅f$z`_֑9%/  [\g X|8yF) #}q3v0]31y} T HNl+;q8\i~fOm&OJeoYEL>UW|- 7D<=)@)}N7i>JZCп:/_Ycclj^;oLy_B/5"`mr>-z&2ˉ@ QwG鰠?藼,X:iry3Y֕>s_y08kKƫfB_wݝшu%HIx%npr3< &}ݝ]$%.`\v$ A'L}m,HC3ވ?V5S -0.}"fP!?"v̫{$۱ ۇ'okUWk?+m8 ?ױ+qy| u;NZ9H*P-{eZO>*W%E1~MJS`: #d l0G|P/Fv+sE A_s*$u<ӔU wAdR . r~yPe͕L!yP(I~u@s^ Qs1%INq;8*6Ķu(xX:;iMEo'j.dr![Nt;RoSzSI%wSwE,u!ߧGA;u7 q(yŸr -\MY\as/m ^x$Vtqۧ£)G|d|,x?!<w8D^}87(,m Y[ѯNo9T*`C}g+nʟ5hY˜ C0(#iy?v{bb@#T3e|TcZf?(61\}qWз8;~o~ᨘp x:6րA6[rC[xx{C<ۋFgNHd[ݰ>[{&\Lg[xHWT|Qq 4ahd|2}xZРDzw!荿{'d}labWm-z/!:Oʀ6gmրAylix`cl8rj㽑l⭏Mcj,,I<5N(X =`%?f \vOcwv;+S_n=q֞n{k#wmw6ZV-ڧ|∫G#ma?$q_v'WCۗm'8@`pkc;A#|:io 90ܜ[3ڃ71H@*PiGrOiEk6 >G"-|m~3}~QnP%,}fBiذXm6|zw[=y(o,7~fI=Mb7yM.tz0>w*iqkr5y :L|oЮW vcF}&!q  m"~o2GV2LZ&Jퟫ^5dV=BY_`ԃͻ Ns2[Lc/PqS\_Su&n><2 %82(ztc :iAWC0 |Fcvv+`Elۿf{׋7a hZ .7瑞q!Tv W.AȕC r]p`%> [ Ljx.h;T@nGx#熉<@R͉C@3C l 40Џ_c +#\W5 % M;N) }7_,ɠɛ_]udݜ$Fd bDpϹQ;1ng> MLw83qr_%;K'CTrkG<6,Wb6 hLqu᠖).mn)nU<9&WT/i;;URE3ֆU6+W ZwpTv@:C{!d0} %1g^YXNpGCk߇>ь>H3H};v=bva(ADH ԢOrO ʭ?{oOywsr)ߟdiswKΨY]G&t]Wh.|zɢ+M,k,MEd^,p9SxnLΎtr=z YcylOiXkbp_d{߽D] g Dj`d#T=~U@}}f{T{ĩyi_D{lpogCBҩN h|zZϜg/^IxL9Y̯33Կ߲U[*guY}*0N](0y^@ @'T'Ǫ=zW@MhGۆƒ勷!&\Lg~vuN y>)O(~NЇd}yӍ;mާQ~[BGioۘyduk̼"h;fs.//W)f?u?WGט#ʳ@,=F 1vX&FA`{By@msQV0r?]~V[$Ѣds}ϕ_ ٟc~N@_p`̘& g 0ޞH!t.Hv$,ͱ )dֲVy14}DŽљ~EL4fg:uc6@PQ vvkIs&">htvs&Dٛ6cuΚ߀o2a(ߌ|1{;P&WDŽhմR(};٣\ rPh 4(.ɷ aY!Ŀ WFTbKO#m{ :S/hg473ç@u6QmXkl*K`x(Z0~Q~LKߜzW-qx(T·V~o w dF Eb: ܯ6nU%~>L(<]-_ty{@ۘ (F.T(gYvDR wP3ݒW_B~e;-8hu/{[^ğ4{G{|ŵ*)_<ƟQ7U/s +̓5(IDG.<,)E-맲)>.ja lh Ubi@R2tGrXv|BcqdV0ښ!ҟ$oQLT&ӫw<&̻ ][ NjyS/#i"n@o%_/3"Ϡso[?.  'Nw꛻N_/fr _qϋN/p% ~>kҽ"xV9lai-[7knj~>0mKz/vSq;?H[F y!yQr&PfC׵P!5񢠄 |Cp'5܂072/Lvqs p;#pS }"a rΥ<0՜a﷏oH>}{xʹqס!̀i__B.RqĎyvo4gtcۅ _ Sw$kTvO ~@-跋*Ss0X`v@[ l Ah2üu6 ݞ`n iU/Fm x 8yho7X:d8nghWhuTٌpVS |^_]'0({j*tXI \o$op*&DeU%"&R$kyt~ֳ^%sdylmXj@f@G#??{gE͵̽wmEA, Vl`CŊرaǂbC좨`+HK߾{|gv||7L$'''''ghaa2>;'9lk & 4|,U6wCV8U-g7L?ݣ_v( ˙u0h&'*ͼ8Dhjs۞*mfVGÚ4FD[sxٰ`ޖuK~ }qR^|o7@ƥSUJz-i* x}Xxe@(G?pL4_`f G5 LrJU5_S!5G v ;O ~Jpf xL%``d>06 kI$58 ??τw4[wCtJX.u:/[ӚU'6F}W6G`ef;nDjnze:`5Ik#ɬY'0aeKsHn(< &Wv۳a‰=)Y"_j&n[,}:1'JnNdOS@B\,.8V4sMpYh \A;!?B?#4y-G$(0ۂ2sI-@\nu4B;~J*3誅` R$t迷 \ebO~p@u~,xUtPuaOeAs z+oz~6eDĺf{ WԠB+:ErddgEYd" 9MRoZٶA6)?R Rʋ6E(l? 0 h|W߽%P8( -BK$J_vi.{; )o;~?n@s+~/P6= YNgiߧ4n6O}:w./'89c]!z[}(gkO*YpQΞJ]LyEzĠ) M]y19] cu 4.oi\攤 0yI8/vie%7"&JVj|2'.>-ݡֳBVƥڕu8C4Jc}Lg;4ڥˉ^>^F+m_ҿ ߘ9ݏ3P], wsɰ$ژ-g~!BgssSw- mV`Kr->Ys}y(⧖_<<>tǻÇ//t|į-$ěL] J,@(w}q wʣa9s`‚˟7K =} Cϥ.򜳇sd2x"W{.G'=vV /:N˵z6:ؗuhz=gi>YmvO.rZHm6Ɠ&_3u;tQ`"}LaZ('*v~Ԗt[R .eç쇿0[=]kU^faͥ.$Ѐ$}>!\FPporI'{J^g*  7*x30jr]F+Ͷdl7> Mo=Ƶ2=) sP C+qg\wu@^0 kcybZa3ՒS2A*Uvɉ,;VB+)$zx8*Ⱦ*i%;8KW&T.~*/!pkx`xRI*ݩb;ª [ 矅QyᙆbR*oygړw/?n5mMr\鯁@Eڙ]TF >gO;J}DJL-́M_V"׽':oҷ),uE2.HC 2yq [rh~eȢ~rG8wPWpx6H{!&w6`kc9@IDAT"q꽳B -O^Vzxq$#P|ג۝}:4;W8^m.ExTb{hTCewDVw+ ӡ8r"h躑WW.b{*rX,}tK@1T؍+CP\3T7k-3.]F=OZ:b6Ɗ9~GN{a;D|rDi):;#򂝭C͜Gf>ͭ=Ә͇0r7cG͏g~3u2nXr[KoK)%f^;`i,\e)K_6s:*NEwR-_~_ *Y~`Տ>)xC' [S I V?_֘=g hSB}NL)[ @:t5ne2 `!~QwN`py#@G:3+F9[)w5ZG}a(Pkq 'S ّNgn#Y/?]ݖ} AhΞI *}|Vt0f_*7| j.0/FSC ֫R[e!}[;#P%9 H^ǎЮqDhKԽA)vƯrgHV;<쫳g7QX\_v"'xGk1H$}>=8a.gQ1?pP^M_CK"م'|݋^'~ qv^4A?wAFAn,AYNm(g_ q/7I\oS"uVIN>}tpYq޹1s?> :SO< _ N hyWa6G&ћ8[77H{l>"Tnolx?t)SЍ%dʦ0(eCn~)Ғ%z0?+Wͽh1reO+o[ȼ:9u[|d nTI6ғ|ze $—& trH#/. Nx|a7)}iɏ-3ŝ~mv7yn9wp~%8h寲Թ,W&пk c;]([xX 06kv>ؾ\-!7F^ ;?<%cR/+[he4&@e#g/yMrgn 0. %%9uHZ4.HrA(OxOOǺB}}%[/#?[z"NgfCuzo@h5 M<J:>6~< qfw;#v(3P߮.Hp ̟ a rJV"3l3qokG Yг~zW7na5fjiEp_&T)Հ4 lpvA.gޫ݉Kތ;צ!|ٛ ]ֆ;#2;ƽ@phףƳW\d~As]/m΋; ;L@lDn8lHQد:m=ǖn#~^1aХlas?*TH[3./ug}gGzQс;@\mμ,sngKS<o:ygGO%}yN~% ̴5{B%͒_4 S_uDu/p_,P}>lzh 8NSO^k::X*nO5zX"zmq۟* x%/n[ݳ_.:SDN{ LwY W8f`=$=km.8f:7 y[!a06hV4ƎVFM,! s?kE(ٱ=tF6 ү_"/k1x'ѧ3:1]3 'V$cdZ( |"YЅO^; FZ5g3(4ό)uT䠘`hGNkl4b *mǝjc^Nwe];Px. x ݔC@'$ ķh'w LPSUOG@_(00)0wxIhCoX> 'q $:g{;2BΎNKϡV[ptD7R?Q͜v3ss*9:NI?dI׋+{ҿ1]xΞyzG~ nG8D=>w}@)P #ʽ@<@\bsKݬb`ΞY EpG≏(FU+" T,uEjW;o#Z*xڎ"Rg&SϴVUiL,HN,m6 yx'J{ojN[<y:7яݘM~Kԁf t6S?T`+b ädlk ((,n~\{꘭ti4j'65vopƭ҇(zx9qGt~E3-[k @}P@|" ' gRp#Y‰P/g&幨.{?џk'y=cen}!dW̌B//_ }RD &i&t?G=z:!I;-yh.(&,zn&ewݍc િCk+ԃs?:Ǡ'լDbu(%#\@"g|N#8cd_zF4,S%?;-RA)~(3H=?9W TSu5P?סBo]}UTD_~ /J W[ŪZI/t?r;ӟ#{:UϸcQdeHz㎬0{ogCv.3oA2/Ae{$_:2'q09~w|pDKc%M76?T%a9fIjG+X~f{77a<͹j_/] IP'm974CO: GrR[Et4P//ѯ.-ݥci%_3-eA{/:@خheG\dQugG\\"}[ W.df5 GXe.{ ͆Bkz\~ \.]l|+Jp-' = QE ޱn$?7VϚ9iՀ 7 /}2ǚ;b@r7+r~Z!r͡1ڑښm yaE|Q@_W LVGHq;G`~SS`^HZzPuAJ_w`;nmllS/ʑyFůvv 'nsWcP06z.m'k7Vuۜo1^jџKήCrf7.B=`QfM5lV N7_r:G< VεRp MãBs6 <(ng>| TU_ )V5k6X4ku8y')8w6b!8΄R :z@IJmڿo5"irUrryr]fz;Cs Q5}}޷Ɣo6{s@a3Y_gi[a5r';d&C7'0s3*E9m9k&de^txu2/Uޔ봫&A*sT= ;pr^``i$J6=(0 SrZ{$|ZZ HWa@78Lo8_\"_&M~%,K-}ş C \i"ǵԙЪ 2'GBM 3>0Ӹi5>_B;9ˡ= 4L1 89PX?l-]` ,F tL:*a}Y6Si"3hOF1_ko6-p1noyK I+gg_sIbl _69t j%PAJV4.]66_@кIϝ* fzJ(/#l>_;E+%ɲg)vo+Yw ζ,T/׎ W?oɃ}IYnMYF)۔ǥ~NӳWY7R{flҹJI-[x7·E&1.¿^SD_"heC-(򊳓9H ~-^fK+J-mZ_O>|>nIsPjjdZF0dqyX%`_D1a1 vsamo0>Q`A<|N[P{&]HJ+Zr9lN׏S_䂏"IJ_u%g7:(S&v­%HzuarHٍ*|'g;-Dn뗿GYit%߯hq4~LI#RO|}WB{Yc`^%9VuVTo$ykGg{i.4A}ⵇG+F_}ASW>\hV4,5K Q3j7ikǟa %qF;.p?xr;`+ߗ ҏ $5* 1lP3NYfr;z$]ؐF!E;x=õ]^GԖ?H[:?ԃszGޜkM]bK=HCJ@HힺSGpV{n[6(h5k#iͻVD7KcՈO.n3=ڇssn9`?OvR` 7cOIm'k +j ̓2n/4+w| yش@' aYsW9_']?!`%\X@QF z=zkd)Yٔߠe+pדuQ&6n/@oXEIN?E;ժr&G`BaD89o}ZM`/k)P{2z,kո͒\{k`@j02yuYPPx#&[䉡Di_E=HKfByLY%屋)Ҭl#[DȠ\<%{clϚJ+ `v( tV9@}}%F !F ohB!EP;;\€7,(=OFWj|J2XqZ⩿{[ےwŜJ;1mߡ%fW7ڇ~wq?%Z`].ٟC3`gP@@NX,@hWy_'QxO̎Սb5KgAuLhEϨlivFx/\Tr)kCd{΃ˀ5Z W.U?"~9Sz{w º9f " 4-f-B KF}-|C_p"]&,\ M,æ]Р>MyWuy*ŧp['C*|u+?Y%T8Cɮ f\@A$PBՅة! ONnMcdRLmfɩP}c'P-`V<񠉡^Yi5KSS}{K-oKLfR5?Zn>Tg17xa'N] ӏƑ%GލJ)k7A~ݹ?Rv)]Pˀ=C˓>J`=5Lv.3_`9Be ;t $~ABS%PuG\#)L^'BsEږBm|[_[M/gXTֳ[9;?pz( gfsw"ȩD:r7,~lD<~QGq[DJ͐:qq8l/y9m;qǤK!O$ 1/[4ԯ 9+7;C(z?a~P|EgC;&2-_}]G Jy+X%fWCWTz@B`&$[ YM|$ g)no2+$j7P\+F`U ˥:V18g 򁻭>Hz3Vt1̯O#fd  5 TTv?N`& -n@z$u@F#PGcU-D.EDdv}{u{ h?+8bKzHH̲\kyOԇqHcEd<4chW3\_7 g2U;x.̮&rR' >|?ô/Xz .p.uo -O&?. '+  *zIpD|80Ač[t_+n* h?x|#8|$ 찠4x+qU_]b/@%tGs ,ޫ0igF`K=ӵawA/ix]k5[mלx[eu;p+zɦ;t#N696˟ =]V@f[a\.ݳ)igH+HG?{J9P eDbwsKOGGKgfFjxSý-Pl.qo=洳BGy)$^ĢYGyD}v _5SG$&p\VdeKPG)pH! n&\@ ;o_9rԲ$oppЀ1(_I:*ӦS1-y{L{#4w9oW8T@qhe=*#rAL#Xt68jƕ[|_ Y{~t>%W8/Si3Nva&wwId~o şUf Tq.LWt!o 0\XEӭ@r;aޗ :e>u)545.q㇡9ܿ)`e;N s<71|k_;qNJYk+cuV`YʴAOЗM#G>I±AY)-/hƒ%ޭ3pڍ=Ɏ?uEڊCF& %pPL+\؎QVϞ@ Bl "?v-3̟a8:; 3u8U5Zf$ߦ;WhB>p5qr)>dDrC鳄e?Dx$9L' LºX?@@aP /\ Ṗ X7 (1 讜AD?$ߟގz*c,OQ oŸŵ23 C+Q_φZOU-IlX8@{%P~1:@@.myހuJ>h贐~>"_R uޟFh3*O_V #7:9GKqȅ xؒPd|inv>G.B{&"[ZBs/$=fk| :,e?J'/5#<7vJޗ*g]tFЅ;;)y;1z2ѕtcMUUk_ڑ ufw=$|S"Z_(_# Lt@3*,dfg(vQg~Oɛ)!ScěP6ߣqiSMPQOntIx$I.ߨI]Z_={0|Kw}Igr=A+,X٢mSV]H{-XE+s9z`=ҝߊ.;$zŧץ3D Xiv")3=x9|1g'Vyq=@b Kٷ ÈD_KgZsAVnVbpk{z?ͮe^Yk*? B7m 'cL(X:\Sh Y*5 Y^ܠqo3$LdfNڼ?>D# Q8gn†F]E,C7BZvXG͂}=ޅ>C R@y~ VP"L@YV;էWsKDdQ?+ϟKЄ5|i<!trB\)4 M/PU =` Tº ph_qCGOBUW \vd@>{Ϥ]~wwvãWdB++:3Ey/JIĂҋ;.BjJ iekԐ W@G…Ď0%j4K䢓᫩,o%hP[R)};Y覩s<z;BPS|i׀#c#˴m??uWpK_L@2Ќ@W]³5@*BEe,9?8ܮe~نZ?Ny(|G *'q#ybH؍_Xԙى/u$miR} [LAkr /93P[lxkGb{b\-t@{sX\q$P%vU'rutQzz9|wًtfҢ)'jI.{X1|CJ./D^-x+wxH=sX<~zF|crwh S)+a,CmکSV<|.;{~_*e[\>uK-< ͣf9YYԪ?VMZG7_;{$¸N.(yC.Z@|<{1dB / i#@*X58$tM1O{e0oޟތ_t?1ƾO^ ?ۂ.sq8%:QGZ?å_g /o@\0c|m76~%߹ݖ6ӓfC[Ö;XZ2`ntN?*߯b޲svZ-H&/tG=}:GL' R\By{FE{u >y R9ތr;z?vXpT |<q]`74@׀~t@)h%'t=Q얿8\(9|dKJ4771}Rc#7Cclѩf;4A}r)\4mΩtyGOV^_X)6rJ A+Z] .k+~[=fۍ[}]y_Nrbh~+~&ӭ/.n#w&Gu2Tr F\n{']Ѹ-n5v' 2:=~Pag}i!-π5ufܟ\F9wt{Q{.wzOz1 2V0eR[SGHNym)'p#0l+0^-v!5HXu_/02 VG y&j,yLSGϧ x}Extz@qJU%\˂=)zYU`L׹Y:3rASYo kv-]|lR-.?esfjnp)ސ0Ruċ0~\ї/亯\9g3Z.3\HLVgBgL'Ɨ+Q"%"'!jaxHuh>,p?.F Sz-fķEC& }w_c4e8C 3qqw;X⏇Iյ^h!>]6^F$<|2ۖt) >S=K`aAgϯix*x6Ä-lG`@?2OḶ%x-MJBs&^Y y=ިu|=F&RWo PƓOߣK S5Ǎ nxg3u.(kᑛ4ω~~$t|L) ƗE|)Hw^IGP礮OBwoZ<5X61%s ڑ /nv1BO (;2m(/5-qŋ ~]6}˙&J-k=_W@k{̿: |nP`~iF '.}un va*w9-M%@Oh1;V ы3?g3+.__=t=߂2GCltgL`0 k 6[;Ҟeq~up^=Rq#15GAmWNi2e%'d\hXM9~ًx\z.ʂ+[3+?石λg"~jŵ .ex s3z@|4}_F?S-ٓ^P|z'w|IyMŒ7njߗ?7` F:Wa<'.< o} j-V*#CɆL~@}?+WגRlu_tg;VG =$p$JsFK#/Qb2i +b{Ϡk>_k`}5 ʚ7.aqlH{: >&=ڽ> Sx˒˖u(@L'p@}H?OXO6/D[lk# NK %+Yg@/ؙ yQM q;yAzEdҼx s:j@?=6Cݗ}&}#^_d7%ěֆh2 Dnt0g 3 4N7r;-@R m y!_LV`ɬhP7\MY*.<*#ãxNX k x#p4 {A[yF 2Լ~*,7ǃuTZ@`B7Sp?NpLX-'7耿$n= #*(xULzB0@_ W$z }ѿGq #3#W{g?Yݲd }z5ԥCEIÈ4>u> J9.P \jU_F*ITH rh*bhW^S3G(ou(_dIA~[ ngQka.4_V߅o ֚('fn5A1ۄF~ m?K _ X^k>ew6h:ruTH}go|B8Y`P 3oDžF774s^` K'XJ@m&zh:o +/?<#3<xk~չOu^kKo|GHF$3t>*:':&,JXx{1f| =;&BLB;^āoLӚ(N㥴3sCgkE_RuR%/dq`ch|P%p9v@d;䚱G= jQP_KTkHw#Zf>{T|#gim3.&2Ul8M e>(qDNK8JM7H|뒏w["],=ל;kk:%7N\C\yp楧x~|=~QIK])f7cx裥"ҋoF ǯ$s.A~Y~|亼vˎwu\Ғ|+Ngo?ZZaIHƍ$&ͣL Aۙ]f\µf3cYgWJ{T?El%@lfL2{"qz`W $U?N~9ŏ=:k.$M?3GO1H:Ί~Zk`}5ʁ̏ʎ܊?#m 4rLpPL7kʷ\yi)RP}z^́J޺QL@ӥ.GVjIJDQo3P`^[3bfy)FdąƵk>޹ێE|Ѱ9o|ާ 0sOrX_'3\b9IFẤ]V[ &c W'lؾH3XGQ(PLvHgCG& 4h*0SO\uX_V(#)W"8΂?m*m P%^ Uq`]h":>gm2ሌw>vqc&V4Ć]jҘƷXZ*I:bA4,TiG 6`]r\s[اPqO#nNbŝ&ttֳg x>Awr ߉Rnh/P7 |m@SH1+T=Dc'GGސ h+or8h?[ H"??wa E_tyj+(+PeL(P|UI>O-KRYK^r~2{wsp A;WӮ.^DRi :U:[ma"},XuJ $mJE&@1pA+;ag &/; D_gw`+Z0~|X2ˢ9?o6Eẕ՗>9r+Jͣpqm2)1s5,c)&,u4Oj 0jFJ+].PecT' LJ-GƸlN9ޱsӂ###m(H_B/She baʠzoSz~Z%_)y66q|S4dQ>ɿÓJXM%qolX98&CO?]@<}M^& d:6#*[MpS<,$24x%StK^ Ƒ7>ؗIbmTerQq--[=w,N 7zb*͎CMlw\")e *Yդ?J(+NNH#Їk0_[_-mt `س/C>7y`d`K%(zYdΎ3flܗbc2YeF{ >|a}UJG;Ayfa74[c.xz^jEu-|wѲf櫟Y OOU!o>r9 HX}9n\ }!&߽Z˽ݟs [j2DN"kV,D>XlYY^_H{NE?6yQ9Ư1>\ fHohV^fZB> o~{/۝ӎxG 3 \ā>WJk |Qx}R >N~v״6 mlT.؅76`7H,T.zF }y\?% tTi^Z#⒌GӖj1@٣ X;m|nm Gs9=!St hXw>`S ZӪa*GprW P\7wkn/@(߳~U~Ih17k1!_ӡW|7"XO~8n^e'֓Oz<,5HXfzY&4m .nv+5#$~v4#Cr+ZKn;ÞHr+$+}~F\n,?Op!ѧ7l\@.F~l^-([L)a6KZC0wXН$0}V`# >h`sgo-/\d kjFPtgW`imvl}31G&KLAKuGF3bQ}3E;Ƹ{٫M~`u9扫&z}gle@΃v~ uN`w/A$";O|W.ߋ˶@zq}F3&`V.E$!Up2'#*u 2M^BH]\Lt(gGk#*GKzGGCG. ~mvn|JW3g+g"빴.6`{EhQkC;A\@|y\=E?1oK?tŴ6Yda*'$tGggs<Gj'|848; mE};g ja7KXXusgvl'(?A[}.f ޔ^_wo'&ހH1rA|mce.N=b7gr?tg|a -@񬒩>_(R -nkkhH-gFho0~,>eybD}Ϫk(o.@G|@f+l0W@7*0w% }.c;6~T]/v<<,_v%c0:?blx%>><(ז6PdOirCkS^: tu9e`[Dғm/*֛'; /4(E@Hn#w78v^z,R]lga9p.9vhxC~üeW$2!a'k Mw \/ 7=-j7rXp' j]%ZKްU$_h8G\_9.zhNǢަ^9!n>~\"x7|}C^F~Vc!|lzeLۧZ`}* CH; !O WONT(p?T#'4(PqUՠ7|"0Rv: HuL\ƂY ~r;w<#HF{r.7' P ҐĞ F^ T2W` >ev KX kLJ 氁t&;0|'~(0=ލ=Eu:qnN'w&}4!0xQ{ۦ9&9GYv>O |y=>H@*0L~.0ʮJݱG^>7 $Ç !6ԴwGXyt1a/wHyY(=rŸGi 5lzsyzR'|Ž֍ٔ;5v &o\'6ێ߯{]'v4YcyÿkaU-!t|O] _~L@ ^5Np _ G=|@OZ}'-o^_ V_/Fa0lLPqfhW :]X ]|Q Z_/p?;9 YbʳtPF}١Y88؆ 37mV{lw zStv<6.KP>1;fZ`ӄ@ P?L.0dGOw=&ȄGOޖD 8CC ed9 )\ῊG8P@>]{&G5>*Y%gE0H k@_4_?\ӽW#@{Y>"y ~`զ(|tS}Xza 2ēF/_v A/0q'  أձũ+@HXK8a$֝]7Џԏ}G2 3oSI5 v^37l#_S?Pg y;qt'KhG-qLv3È/pQ\sYg`'r z@';\Q[#> ķʮS;i?z Kq8vFG1YH$X0Zkm3dQ.67=zt8}f*nJUzX.-k N pV-Hp cםE.t>AE_ ,v?0AuF`DeցeD.&!V&<v཭uSp@/]Y2%XsR5kTd />I'Ƶ A7RO?xWx%˜ũQ|_l -7TCCr&PelvǸ(Crݕ|o62Ñkcb+ˑ_΋}CEgoOKӨ )wfjpla,)ޮ%#Q[fgwy+h>W`o{JG8 @ǡˤ<'5 >y\W6Qte.\fށ>d&=;y{JvG>H.y8~OeJ\_K,s|E;-ˏ (_f:)oMx>b]|]k;=v92+6 z>B̑Cdv{0Uns : ¨ 7d&Wع*“V]0wDzBqmoݗ<'11Y`OgqCS]5/nm$ / ͫ3S#L{ w,ݲ7J95obY/ॣx{K+~yH ZPr]_a:nؕb>#slFLW&ȣuvom, '\Ԑ509/#"\޻@2'Z> Z]8 hTopH਀b' o[=oD;r΅n 1q[?M"d{,Nmgx.HA຺&TZft7e%6rQ:ρs4{//wNck}h;T5@ugy\-̌"̀1n^?-*BOP/ R(kBۖ}a'R}nӼWqqZnY:DiNoef`oךk0hN܎IݱA ͬ 8;L@P`D):G=ڧ?׿ =o2,$>ÂU~נPNhzsvc90,EyVÈLp#EwO `- ^a B쎊pzFtSЌYd|3sث\<V(Bq֌'uZiv^֩fe_C/M8ZN>绱}AmX0y:1$ ,? _(l<;P=r?-XU/HZX\n,s& 5ˮM) Mlh |A8K2D{v`q{3XyH /n;cЯX`pkBs%>%=s[ߕ;&=׳a^#3qi`VwX]X+?*Z;Ƭ#!kȥetݰLoDC2NN2G,'TxP, ڇ#DW~womɎ@~T;I#r]](\W6z7H,Sj<">[`#NgrcL~xndZ?NsLhr w'RsW9f!C"k+vZ*܁=L|OIokLș_ٰ.ߑXUHd k@[w28A"Ǎ&X@ϸϹ'Dnt=hi<96 :Դ$~ <j?KѡzFnA|z}CdMjh9'sOy/Rl_kUz%w~snNI"OX?@C;$w@w  ׆ pgBڦWzo<(a2K%eJӅ҉ 8S|1CCp:j~y,߶ts(&!9R`;K^$~ ~Mehvp|wI9Y1sx̎E|mUA@ &9l=n(:ؒ~ 3V|nOK?52Y|+_aJe͗m{B_ `:A>8XCKB*$S]< t~sbL³VcXzcXMLߕOю7> 2U;?*ɿs#8ѭ5s@(P3Z؅:XP d4l' 4G@2T`/ݾxҩ_қŗH A]OaB ۩O,4΁lڝ'M!&D'P#ӣpr?š+Í!%j` ɜ9~boe0r?&-"| [ V$O`ajrr0a )\Wӟր/nc >єխw ץU4zCD}=PW;u,B+GrXy6^hYftKhOP(}-ϴaq95hPu[H[M Kd|}>M4އчK׺&rY~ǟ 0:\oa h_ -CbT(Ih2Y}Ƌ_=yp7mBltG OO/?Z`ҥrJB=:YK ^ܐ.ut ZtT?^C bs{͆CS k`Ki[sk:Ӽ V}0_  h|1@r͸3qvb7/w@-W c/Η ]js ,~(7LGoHLqMoL-A,f vf=TW5Yp+XïvƷt̓KB(|+GtQ+en|Lj'9f>T p@)Hi1l'PGG4ԫ5}|OEƻ߿u[C5nU)'8:;.8h:{9 AUaz u]g _BSahObZ@;PdS`!ON=d6Nh*>9]Ւh @IDATgCD#?9\rދl~Ǜk$}Ci%SoNE)/QZB}S9lb亪$P'@*`==Xox@@J;WB eٗz=F}}()=\:^ג'̶+Կ*@=Y`xc~8y[dfsx?s"?Fs06/Fe5Ksԑ> Us u;Pq3й,r{ܪ4q^^7Z%{S+S/'#@G5 &B:ۙ6 -x;QP>Q?A40*׵{pPM#>q@{n^uBJ>O,oOn^\`:eg2f^C˯m;\4'cmxr40SWstT|dhn&j^onsE ǚ\6t$;LW K G*,>8B4~Ɲg9uo#0\LV_IE&IXw9o_ay"GJ#}3%~p99?՛wOmp;5w;r+歙3?KGƒByUS+0.yC-U ?U?; +@:H\|,pkˡ MS]y~s T<GxYRS;nv, fУHmN6 ڿ3* Zڬx`,Ph0UY;"{כ%_({y#S=I>)VKDs۠pt!8S 4O &s@ χgbl &%wnU28 cN k%dxkMB݂+! LRKG{!k&KoC];_C Cz3Or_ܝ#f{hDgs}$y>ZϭM =i9H$7NRݼWRH䍉7${ys8ľ¶ZtXߥ xoiǟ ,;Z JC.:oNVK~M=u6Bfc\>|Q>Q\'JJ5ՙ靈n~ܿ:ܹ=vƯD##mW81CI>/0F`n&:7 aέ 9y'Z}8DɉK_}MSepW{%0 '7̱T(Mlx wɝ`~ܻ춢CYI/;$7xxWVk轩h/q*P7 aDWwh?'Ox4Pd=Lc@5_$`?@1vKߞ*Z0il1͐wB-}AE)+^Y[zN.}E y?ҩݼNQo?+U= ٩Rt@'CXK+7SO4Np(@A S;Sk]y+ZoǓ ~|"WzIjr%AY%08KW[(<;C"c3/p8F?b[Hվ]p \ihn0d_>Rx6Эm݋ץ)Aۑ]}2,h B3bw3C0 ]|t+M1e4j3ZnCO@2g`Ny)v/v8NWTt^>213h'精 c__5t  5|G6 SD-DOڎܳF6- r0;uT:ޢ3X~i[6`څM~;:'gL|^Iz]=ӠIFеGpkM\bׁ- 7lN\ G8Ǚh-q~zVp}  XU*;TM 0\-<)>Â(\̩s6\SUq-Β_ ^ ;贶nՎs307)0nA،zzLuB4ЯMSY^mWfWy~i^zYi~rNN?O;-Ux1tهoJO/#˒ W|Qy.qU 2[4/>-?v>_ϥe?®/2)[q>|מ.:rکg^]zу׺tzyߤ'KA|\ k^-&J}ܼm=AFF{{7 ]Z 7RoŃ5$ unpN݀_-M/NK+R5>!۸?ջNvg(1{ԕǽPnc  Lb7r,(:C]z0$2h=_yܟO׉oBU-+# MiZʾv!2ag z>l~A| z@$ߞz#T_;$ׂy(1P4rS,/ç~IIVU_1~7%})5P17>asfrԿMQǕ>֥M  ѠJObwWh K|/(DyiX(P=G@!geʉAe CGbPo(n]f@;1)%/aJO]R?+U 5I^BT?Tf2jOweŠїc2_;\=;"6ĆP;Ͽ$|c/ o}+[YM~'[5ji,@e$*VXctBrҜ1QUUۿ1f+<0X\w9nI+]vh顅s`ßgޓMkc)!Q 1f;5|?3*<[DF $Ch qhnpӍDN/tɩ:s.g0gȶw!<@a2Gt O|}S ` Ig:kh&4΋D/EwXxKRkP(ĸdvhV';%g4jy:a,Br9AgG C!#"g3[ef Y< \XEZ7<)mHZ =ݹ|B}q/q>.y Łve! G P)^o!;ǭg<S(9-0FhO1(ӎCS+Z#V:R;ݹ^@[S@%]7^=A żp .]Ji :Qܹ >>{6֬9 |yW 5c~^cH; dgO̾I_ C!.^^`}hBXWveh  snvyzu7z]'Oo Urgmu;?~M>ߗ`I@Lhu{PPo%0(f3> (t(VK@7a-h9FbB8st-q^M}'2>E>!ޓ-r4G7(_+rB& -x}M9z^&&L{}zpX,X 6ŃMx+\:+Kp2(1P.+sgjwz$N=ާ`Gp'rwTf|#ob{?uFst"/_j`>(/(g^:.&G;ۏ6+Mýe8x}R;INYB[zTZzDu ƥqm_;yLR0ɥ;.CT\7vŘ+ܟ;fV-_FV_hȢk>9;,}Y], ݪsLI~=w+-6=AQM"' u񽔿[=̂i\]9MGH!nwPS)?{?+8U+U#55FŸy>|>3iwO̦]}B&cP+)dx8c{ # f+0Q;C~bt>^5A.XvF?NK}6Kɔa,PDGUA|@(N+}k=#w`+2Lc|mh=.U: <7\Fj+?b_Ҏ䡉1\'ʚs5]g^Vz4|[ r )GzD@/HpևN]!PP:0A>GFJ6%*;'J,I/1l U{?qwH ~|gxHw0:Y}w/}'CXwHPg9NOп*X9󮜈{-9үAr[iK)|{.&'# :Jc><5e(ɸ/ i4kGP*_v^tOiDz[_~xdg'Hc0;w/g3IiGrYBsG/G^eO^L\!:J@eoq;(YQ (rWf䗫)#EcǷH΍ܫ9;SFd6:[~R_vM3\}R7h}gfsڅ]ԐHrufc+eA.z~pl% iuK' "7b d,(-ws.\P6fz>P)Y`8S_ (z |k u@~?-Bq;)6g1; mqƠZFZqYT0ײ{1񮌷̦Lźf1&+s̀L}=:aL cfﶜ t 4j@`M5HUٺؑH1 dv^f0#Ee1 hM a pB\@ BՃ ?0;LypF/F'g\ccNxQfXX OxKCӘ%Q Q?-!ه%]SϞV< =_%:^h ;†RY{-f%`;Y#qsUksH%~}O#{;/!,"l4?%X f}:9 +v{x:6g=D~_+'; =$2Z9&? NsJoydȉ3Ӯˎ*=#崒0VuU.ģ+_G)oRYū##ϡ<_b\[}kg!ot< Y-Q?BXqݐ;.3 4ƂĪ ^W,}|_U09%#V\?~hnqe#J:jl\{K2I?_~5BOx?X&U_'EJd=e!wZfR ?&rVwO $dٗי/ ~G ~(_ _?_;3Yyv#B|{2NY!o)?ce RXA"F.86~} Keח-, :!1hKE{TF jgȾ/j(n*b!)Kw0wSKzͤ@|O`oUJ)TrRWo9OH$nT'v*⻗ݓxLJ/H^EpK%TYū{/ 8bn`Nr.3yo?^ϼxx+KOCNjQf]zb ߃_aqJyHG0n2(wZH'Sqp"WIt.|']rUo0ݘdBk,EGsXWzaKg\h: -Cяj(f=,#'P swxpơfpbG{@StX#l8 R.OYj)9-A=~.<5z*>F4"5`6կUPC8Ws738> ]fze9e\39muLs@=\ys݀^|C,oVd@'x\ pB-@w Q_ܑ.Óne:VW]mYmq6|<7 A atVNZ$"χ#@sg9l ?|f^+bC~Eki1ڽyLrO5. uu9L`k(Ќ?O鯟w@| Ƈ :`x1(4fY-=}e\]u$ uwm!:>y =G֝A;;rtlD܌/gV5; ӄ5!7BO}(^7iYJ[x<|%5< <o-_o nTh>#,/؏ \. 6=,Ю~#gesūCٽp)8wM );TQxw@VB:CyResU3Cy1ARmZ]˷ i29Wߏ"]45t0aby?*xB׃?>Z;͵΋&kfp16"$>=>c;c'vU }qx՗8PX ;9Uh"_n(lr ~rS)&kȮtN|R͇8G{|wڧ8A|?,zK Hk^3w:׹U?{pI b@g;?cz U*IÚh_e D&đ"[n\Gps &>(  ;*2e:if7'k^lI;ٳk vdAIu'<!P/o _-Pt{&36&Cs{'E{D"(6ػbE{E숽wŊ {Î(+ μ(Wf6d2ɓ'OId sW{[pB?65kpmfy#gЎd) +X89:rYZ|م[g932>bsVu1K{/Lޮ_O>D7-v΢A*v$3)du/f>I beOu#L %M-U2R +C?pqɿ7n;@wǕ:w|WfzTN|Ў_}dt3|Վã/>o{byB&j;#By!9y&Y+?ȫ2:9|yʹ߬໌?u[<thUІ'r[@9X\z/F`y}K!N; wm%Fzk闭S3!x:yTKl腑3&3#L<6jLFX 3o?PG + GΤ}K7ğn['`;Uvx>+m-'Tq4?.؍XKgk2ރ7zGfxww .WWamj=#}3~?|G  +#!Vg' fט՞:fF /aK<wOEl|0Θh$ 8s{ ~`v Rxڟ#0\'0=y\<)V|xnXҞv#@XZ\01u$qst62Ǹ1!;{`n9J@%$`Ȳ'CBdXo6{陣oμF=Z"4l9˶TWw:yhҖv"*x{wwhz?ikly).O:qcٙjO~u_W VmpIq.XFrcxm@{U_R;Q }M>dfin cVt b4ި5A&.(ޒl!g6亦gTgڥG@|@}<"PKbN \i_]0O;AC?~S=F?NCEj,DvBۼ 'jܬ}0 @}\duP@(G]yY҇4uωlmJ{nVo;G{{DA(_NcP;ŭu;ŗZ;cIЖ;HQIDΑ `t 񬢣쎽4_H?}?v4O'P/Y~'p; 7ޣ{a$VK1Yv'83G fךv9KRTrf]}g>\kgF;(gΛ[2bڶ,?f&+{[ـkQLe~!8V]B)*N*C"ҩ\RUk4Fe cߗKŧ07(oC9L_.j|lDe{ڡ(cв/m ZtхeYSM _]z#A Kw~TRmu?.]% ^8_Kz|򽋟Ɂ,by?K'~l<+*G{$_bh$HzΉ0k5я)y,pY0/Nl)1io pC{iHZW;kҺJtl?~܊Exowy7#d|k'Mף=iW /QҪ{˓|eew$7LAg>cv4UӪ;(GG@!}70{}gx{@]P4`1u+3,+3+4ݿK. i0~WxDJ>n $V >8G؀q6x۹SG Xhů/*Fq(t5 乮" ` &Z_8Ax|VaOV\Vʵ_% aAiߌޯqjJ~G;1K[m+6,4O`~7F/  l+a๚(K do;[SCcgƚR+G.#ɽg)g/5{z@ J+BU@~Lr/! oh{A?;T~3O'\6SS ߚ/CK N2?b_4?:=6S*(pu< rJgCc%S/#1{&V]Psg8-(Ff&VٕHe,jٸa79Am|}m])Nr\ں P~6Ī\רߤCevOs w(3O Rϯ3^ElT0/r#~ˑ2э2_rz[\k\=h!Y,)_CkCvJdIP1wRmc*n--e>E'>*oP8|y~ US~Lb^ [b\|JNiqj#uqоFhJ^TrQ_Ckkp}} /w~/?_+^ZN hw. ߴđ@{mQx٘ږCt{w <[w TzxOooq m0vgzG7˸zwhk)vMm> ~r6@{>[A/eA !F>Ni91/_Rƣg=6]vp߄nlI^em0`7TnTzᩚp،jp-W;7zgA{ʻ5ʸNFunyޜ&]}ֻڣ~283:>swD\CfrU?\){kCy8q`ÀAsNk/8Z=T-J!l~v>+QJܿRa֩,8]``'O=֭<(h; 8BSZTK`[:K(X:p,\'4eR;C` vq9x[2!D` }spia3)$glo@`I&LC Z0N 9L u櫦zwt 8abPO)]eUԦK> >.hZ |T@1ZLMS4@vZ0lHY,k#gP.u4|Ҍ&)V+XÃc)\n>}dj'sJKd@v['oO'=; /#[˼x_)  v_&kW8s~{x iuFɿE6Oz)AԌ('_ރt\;q,ڨ>SE}M&u}5I@̄ZWaR2@01w _fv_SoszxVş?~([}$#$O.<1{K1/:5bXf>|Y`g7ki+&-z;}΅oIo-܎X-Z՜#w匘 X<$"ecJ_/_],wTW\Q>h&*.Aі_UՉ+yI&-tŴɃ 9z 4A[qzq8r>YA8NC<}#, B0 {w*&,ؿn_׹{){$͝zqrs ohԓܵIF@ҊTǟܗvbt,tLռ˸aBN߫}#8׵ ח\ylLB}<= ڣ=UA$;ynմO )@IDATtw(*רnP}GyH\>Lftt0@A0Z<N\:PT'z|g+Kp w$g2O{o)@h_ ĶG5_k+_إ\*nq aXh,ڗjӌ2>=c"byӸRinf'ry21+/;6x˧=~(%]HPOA!}d\0GGC`x':Cp.*.?o"\# t䐾BiRn_q~IA\V'ga zi]|''Pj_u Osz?YjX۩Ue];x$@N ?<1\o9~s ί8(VwU G5+N@t+[KTѼ,IL|&ٟbsY^_l֫5O/#JE_ӌ[)gڌgAC qUMt]T*r&3O,Y1-wgwE3;yȧEWl8WŊF3sϣ+[󍋾_.>ӾآMT"%mbX:ycQBj>&)+^=Soмn<'}oڸރߙǝӆn2gup!{ +ZP9Z@p@KVRT~)ڧƘl9[Dn~?ai~y2H/;j@;?U[00:is9(|yD@kIl; >@8] W ި[lL@@-s:;  qw.vnXD>8NGE6z4B_8h9'wĦwD|Nf?4s+G޽ t~}=hd\śɅS|OQW}-tzn>]KVQt;iSL(l&gR^YsPg[vE).5]YK58+huICGB|NxKTǍޑQw(wbh&loY-WkF<H;7qYb>cI~c=iEWwqRxWOx$PЖ"p@Bh|jBɐ>2r-3!&ٿo.,NDN=9"99!?AJ2RyǻǍ&+_,=zȓ+.]}rSã ƅ`ǧھUPWP+!p.Py#P_`^!+o┚#Bw* Vy1KNҶq NN/cM QzxN߳? ?C5wAOwn^#gd [; U9+s\\ +0xA`q7xb]c xnX9yr޵ ,'QY^x^h1\_9P.]|wbMvbVϿEPPRu6I0Cr>9$\|⍲/iZ8:>忻dqy.@>,9|Cћ9ywcr(|:g4Čݡڈ}!OM?i{/oWtXjpa;ܞahpR|XT|Ӵbiմ>>=0Ws(Sq ҝ֗81 fB*o+Kzp_RF x~):@`pCH[bc7VKwj1OV(o|pQg0 O>:^&xsoih/a7Yvs|͘PDOh\E[~كtn]>ʙLR V/Id;N݆[m='<;:r"t3oHt f`?s2hjkv"7%}v\0K9ZYfcўp@ LZ7]$d4د鉶1gUyb&o+W0)R3F%$NQssa=, .Vsڼ}R:,IZ1|,Xpl%0M@" o%PsBEP Dn{qQ{5sV;ޠ(5H_S# uwX2[ɀ+98M5o&?OKFcR,.9-5Q|,xz@*  (gW (^x;˸OcXA.\1Sq>}ٸcr zsǘk,eT5&d,U,)P{ISՍ"WX/(ζiAxZ5 J\SJ4N+lM(T.s6(=76R:DgX,{f+KGC7:~U&'.w:.^9~FE-AwGqP=;͒>WߗОC1?*"Cά XPúp=i2 *C4̀ZBT޹圞h9{XpђGk=)=Z?J/eI=ӳWވ=VR]OüqT'F wX{Tљ]W~fY)6ξZƜ$eӮ>(ǭaf7>a}f?ñ5!9>fG9f$3纫]T~a6ISuMjhG9jc De'+QOw;T/z*S+ql<^A`PsX2[ Zz9g~T@U`;G V 42#0i' R%P{Sl'߾̤;s$'!MŕOq Jj fO'B{]i+,q[߯Y;C`.b8@} P1`K~;3Cis;W;6%w 3Qdts gȪN/kkCGssXj=Xvp>r@{ld8Ց4#~.ƧPyOO6@7N<,B@JQX[+7Z$3^ɇ:ILTGL1\ʳK;#wh&~7)?T}f6%N3;_SKá\Em̅: b8T~]Ŭj$ cA QW(T|xTk`^$36C{ M&r |C|Fk>H㉡nӡܞf:n6sV|f ӊx3eh^ 7 ~.-T|r]lBI\nyCJ[/*+*~ ~҉yJ<-O{矲4$ޢ]z.+o%'熔{=cHRkCwi2r@ +nm{}7p 74)M 3uXmDzB8݋P|A|^>T 1!g`^8n/m>4^ Q#oċCGc?`h~FG @7W>i]Xz'DOݏG8ϛN8FJHqVnZU{?dꙵ'sDn0U໗ a3MmszOqM[w4"8ϵPSа.i!+~B]a,2+B{podfn}{"P'O.I{,>M͑' \`bq@N_VyCl6Dp"2)K\' 01Jo.?J>pGlO%SQ?-pTya~W`lzz3o 8ΎqR]UCVF"TH LX  `(prtj[$;Pb_K$s$H<[wzG}?]#s3TkPOs:o+Kwo7WO8/DCJ,}x <Uяo|>C;D~&C<_@q0E{&ҳ$&Fi] w8K9Yг~ 4QShY`u(jW`F^΍?Yy\۹Bg7qv?|&wgNObg:Y/{\:,iUT)y93^٦ +xx򟂽e~p+{ pԩ.fttɇ EGͬ`fy*;4Уq:K砻#e;;ÝDRfr-By0أ-6TP@!RzM=]U ;h{c#?w^ ځ;: aLtaTvggrO;u7Oo_qxR(G]X Z`Դ)8T C8 9_Zܛ"<մK՘䃖,H)5z3!A{bNg=? 2@$f\{\l!|_@vv:vo_{Q/P"|ڀӦTv- }] vzAa&P]kB]ü= )woߌq]{yKC>7-<8 w(L=R$` 8yK'ɻGP?#+o*o Z`9~rHbHas 7QȜȵ?RIIFऱ9zQvE֞.^GkE ұ;m;tY/ML+xeV?̓|DW=xz$!5C{M5t-5/ o tsPWXEZ]m+?Rg7޽ǽUއ4ۻ>uO1{ȭfYZ`Y U;KBv2d^apORg{WL+߇z\j@ropO@:'OP{ċ/3+AJc1Y#Ch ܩiH]x9fM?9yb|s'{>eZܿI'|ӡ:{k/nyg6ߍ]${\)/?mκ-v7VO+vXÃ5$/- tuBjꈟ5K5#(D@2MwS#a"E_Bɸrw~Dr._6m\UA L. JrѮ?|IsV1}''>[٥3 Y̜74]r-nj'ܼع%%6ˮS9|!BOzʉe_ [RВ9A S1{gŲ3[sޞ=񚔞GJ_ur@_?Yțh=ځNq<_Ri:_få9+o1>eߛMV%v'P۸L~.q@Y ^UtQ ="H$S-Huûz;cn4C-j@ZJёM%i'^\?!iCb K~g>R됖KߜDN◩#j`͂=U6i1{Cswi~:_}Gt^A;+Mԇ3&_j^ 3I?ʥ971x̾zn9q4 ks{[wogm`fPS"f3ԗ^-k{ mrڿ;k;Xiy,|@;/?8\`T@,,0.P[/ko-,77#r)T!C{`XE`$6z[ֿ? XXqzp3rɋPߜ9226VDΠtΕ4m貴嶽؁%Ѽ. xd 0>Ou:0-0'@ w@^"P}F3@~YPG0[t ,/PP4N3eEg葺vP2{|n~f? Pۏl*uٙ>z* Ы5?h?8:rFyg·+ fnK4r?{/}" |΁|:}@`fK0{Lَ0'8-B;q^IŮfcn.%~@M;#6ka噪oK_=s*Z@Z{NH/-`M꧿ >][ȞssJ $&wgA[ݞ8O9 eQO-I3R.O9?MՁەZH'/[,ƎË[~ ŚPwnW(k] ~٤Sbg0 ֏=E?I 2&8#y刅ޭxMqfK3\Ӎ}wCeo =K{IT|̅KнB= hnőc65;O~.\; ?L顴*K[SʺL vGW[v[E"reN Foj| =3սړ<5U}P?JZC/#NS~L gr3(6<$L[ӥV.Nq(=H@Ɵul=6CAL e]@>). 3DvmW w@ B\PAՃ`>&n> \@/#w~LΡ$^µ/jP|zN~em8U<0>Av!EUs뙠GR| |eeY`Hv> *u.nz@? Ӑk=[-`@w]' 5 [氖蟦 57;rOƧ m3~&ΨZ/#4+G; "P|-oO;V@r"Z>*CmJҎխHS|%p_Ԯ=A3^:Ûَvtsp)fK\&HiG"`xc+` k[6u*sqozTJ}d")(zFrMdo=i?f9¤u*y-T$m\;~83t#y^4]u-ߤ"8RP;"Lʕ+?)S-< 5q#xhBib|0x2>rr&52+CC"Z@>SKE/V)Fʎ?<عb*cq~u;B/N^)z@G $W @{5yxؿ?ʞ- m ?_ ,kN(NEywQ2K՞h_(FS`yZΟIwz;8zb:%FP0P\qKKoJ%; |B Nr@;M;*!Vy߯Yw#z9Q6ttѿ;!?RR_ԀVы1wl!?;iG{yЅ=\ ]af HYƎ4 :7EЮ[uLɛmTpP@c+1'nb]WOrB5JgoL/nc;#R Y~''v4?k%쨦&`; LNho d]*NE` 0E u%o]ו #!`_謗</^K`ÂIC}9KBfPh8Ua)R *`H$}r]TO}*0aQ@"A[ PL(E8˂ums!4rdtVED\9W83Dc̈ >ID@J4__A~P3['Kn@8K|?&go(VSSi|9gPQ v7Y.!5U" Ki(ъyL7AWiHswk 5 J2TC!AH/Ͼ5 h9hrv= WA⫘R]p!uY4eZɱbcɣpO9ɯm\O Q[pf n= +*~^G?kF$)z{p ^7/6M0M?BCA~GL7gm.\42N ก1|tx[\&@(ޱ.ʵxMiأ 5Bj~d#(%~~_zB 䃚.{0eCWh"N3 iH/p=;cBS|T$owZC@=kdwm) Oj<\`Gt{# g ~|d60/U4 Wj6w?ێ֎РOP3Jd<k] 47h@~d@kAQ@iSs*mo{?4 x(-e$0|egw%k#o ',P Kq-D4Pipp'ˀ_`>}%W`%9}];; k(`^IQ/zFC?v8~nZ_mk;+m{'Яz?Ѝ/̼MQVX__}-ׅݧƵfU?d\cFnAĿ~K 늭JA++1''ܒz?$ec%KGu i_va. uMk;H7O xR 􂕿+6}_S'֯.~?9 4R}:S[ր?`OɏM9؄d6Gj<ܺ: ĺ~Q]H|ޱ#P]yU!"}),ă凤 ݏF\;Yѯ27V>pu9x3 WVYM,lJ{?y<"Vf|MƋ;䭷gg=&q%(/up@ec8Ǭ` `^<G9=FG`x؟= g$W[_xnwHمgׯbsECs-ex|w.u╪؏tKCk4rmו\Ux=yQBC=?C"wwPt4o'y 5l_j{6lO> ף1ړ5I>$T?_+%;| \%;!:j:>Y4/K6@=&l3Mq<[Ca,y<X&S\/S#F7?s[8~H=A e{PO\@Z"i!j-~m)7 !=P!5:%~ `;2}M Ŭ3o| zq!rs_?;oP-HO`USO83azw_]5UfE|bT''}I^ݞt/h+˩ q:}cnY`ۏ]O?XλI [b!{ 4Dg<)*į1 `A+ uZqNdS]f+GE<*Wz9,`9K EdLh;ku06 Gܻ͘"4wPk3޹'?ܬF@ {\MeE`,D0woFD' 2:N= Ly@y焨OlC()/xZ uE^b[ ,αK8x|ʃ|Gp5I? c9 I:~M׶O7t8'=^G=s/igU؋I?08I >îZ@Pj)0` (PBiBm8b@s# "f^U@{d4n͂ م`"5pkP0!tgyw/~ؠ؇Uc͹f!YR&wk.ϩ81H &Y  ;d/?q(,%/ `]\L7W0ۆ=͠qk>|pcr03[dl" ǙQZ,p9wQ15B5|z| R (w>b7vX_^#X0BLMw~=5GcR"74$VFvo  ?~d~(5OG?yrPy8{P_yA|D~p-Eaq^ I,~ ~?r z ;[Ю@րcmX=D`]@@^ז h Ǔgs%Vg ;NHG:Jts4q\4 Cy ܘϸoϐũ[M "ʹg{N@$} [o[o8 _6iKA@x3մr1wF̽wy[F$^C2\U R6K}ChQK bȍSJٜdy#b^lɀJUXwwVARw[W=qo6ƜμqTs PsTj'GR(GguvG&{?x } +4>'=H;ذW21\^<|)y}O?3E O|Szekǭd@΂8{;ǙǩE`( s{9W~#P߇ 5Gp>_|6D 2X#_o_j|ѥѽzk %pY'߭i| h ori}ƊY4Smri0Hh)6A|OL鄟$Z K>Ǐ2yDbn^~RC;3gmhK%0Uc@IDAT@Mc-5}hs ] ^Z/bZ  v &h̖0ApF*{D3ڙZ4fڈy4V1 uR*@RC8{Ύ{\] Ӎdž`H B]̡gq͂v9?cIOoIz~&@3g ?$W'†< [e ZINJU:2ޠZO$ˉ^>*+P 66K> ~Il$0=)K~i:E%fIKpov^'ԧ4ur geN46DHwZ^g!ӏE~E!A˔~%Ѿ[>ëNm#)Iꈛ洐 ;ϫ\Ji$6ak,f4q|sՕIߏVK %)~F #]G{mK8,20s\|z<:T;% ymwc\J>8]U/޿]j"oIV$o{qrșw6}ێuuSҕxd(L`IX-]o t\_홵KYBe\`HE`[@gv/%PqQ'vy252%o94k`cn#i;,R㚎&j[~;r7t4 {/7̇3Yb6:RLu /}$%U}?ygGgg(a0P{$5^uk`6!S wga* ?^j{x7ß޶Fc s.:d#% |A(Xj8h9<#9ӂMY>w0ޣ{_9rwS]Ɠa5liEpAF+mqxF_'UgBJCɚ"4x|4gy"G?&'owKڜv+vŗ\ψXNN'6N$5lǦ?/NQ@*XG9$6& C'I !Vh  wZ ,Do+=AB|2f,ytL{jy ϋ1:fo#L Hޛ\&'dK[b *ލ!,߶>M~Egǟ<>!0ZZ$ד!Atv"UAkBy7~r9TLP V0No;Ԯ90Q4nMGr\+~?G,SG(`HF_&_(o"}ڡ_K{(N}?O=wzuo]#~)bdgډ_yQ IA-fIP)rwƼչpRGLz}@~>aЮ{{{F5 ø[9RP=@ щuUQ5D ݎ'@9l=A n}tFJ/L&&$aV5|OJT:rhfP]jv)2XA5?7;"~gu2Q@5:Ȓ&~+w?lIӷ `wWxOjSWbSyހE]o;A#ӕk*kqYx0?ÿ>I_y'}v):G@䟇Y-gkܺI~ ۄ #@* &gF c wbV .b9g"pϒO3Ù V{ߦ&7C4TX5^de5M5I@+#G ūGuB D؝asB nL Nrk9@:&c@bbf>uB!t$-L-L.ن/3[#$d?!`<5' |ȍjs|Z*Xf   ?7N"]tbtfڻET63^o]3oSˎMUo30K3sV}yĪ6m [=+_9/\c/~Iu8@~68~'5yKfWYecLqw7wF%KIQO''k\Ot}ޛ6:W)UjU5L&sQ˩36߬nY=.Bzr;@p@m%PX5ܱ;зL ?uc8:v\%[nrI|x2(FɁ%p_L\]C53tu/m3)U Ic H;4h+P; _{-%U+yW`_=A "MԨ;U.D)V-}9̅r{;Fs{<.آFOi7l~ҎRUI_ͺCh L6%5m 6Em)NxnƗߏNVuBYW s"j >q)P  Q:~{^{_Ki @ Ջ>U5~?1r{PHqQA;F;̪qh}::aoѥSު5ޠ~=7 ~ε,5[ƒ]rOso 61z0 O,C1r>do-TDMb$1W D:Np7(oWF.&  6ȏ}w LBhxL NWL>8o9\/cC迎?΄sϚ(S*$m -2/+ɄslyqYrwՖJ~wb\~5G!qJ(jNz|F{SLTAO~\3L.oؗGu8)oS$R,Π43~=T5sV,7W3+)!*W |!QyOaÑZKšaaهT·x̼ u<ۻ/yw|s‰LԝWLwcp\,g8kؾJ;F> t S{o`՞,lkO+NGJD&o;:6Oj_*@AlݼmmMŹJB.da!ӓR߿rψ>CEm]H|-oH'֚&Oqm5ģI7 -TPu^zHB?L]x3g௩ mnDgmW3 !,p))NP(vOȯI{hiP,(6ƝZ0+ͤ#ZpM9Z^G @zԧu}5?D'O'@P=FG95[EU. |ChV1 ~҄F|YyG_֮o؀z_ŏ-j?λ8ǛAg`0-GQkQKG8|ҝ9+}z$EwYK>exq OL-+E?3;[qfpyqS\l:*v<"+[ӅC讂\i2黗#r7yDbעOKGc}Ê_z?dc'^R4l>!ygdaWWz'M\|D*3!Z(A3gd, ]g0|AB(J-(AEu2[ۚ7G,3|l}=}yOpIrF8'nP)9}PNgǹ(7%6wAl=Ý:P>VWo9Gώ>F p+_7ۯ{=סI)}O}xOC._rc)㴳xjFv7%pGTRDkkӊ1Jb̏Axhw l8_@_qo/BkfszNzPz b׺gU?4S/ ^X93 3+Ւx[wg^)l7J[~w؛c̗\ 3S(tU5^XϿEG$' ,'R)t`H 6NEuo|y䫛q]@|{1:=9fbi"a'`aXߪK*_jB#_%>Y&ī/tKwL6wǂs1 JuuvA)V`T u +O k"-^`6L#w;a{\36l/ⷙ\zRo&|B~VM )%ۍZоnb5H@^Qr -S2)+l]igG1jd*ȮͶĚz^@SW`'Ў i{5C [%|gCA_Ʀ!1O廴eyoTE;},V??6rߪ`ԋt'Rx+_:Vv62Qm9{]jui;tu#gZ u~]e@)?M- wR(%F`[ԏg>x-@xqΆ~2éꟲ ʟv"l-jgާ2ԕRژvs_;3Z mqݡuh4)ϑ* i 1†#( "w ~r&ȵIZ([.@2U0${5/z{h!o|#YF4W 6ڧEܝmWBAmtkTrw\nV:t\d09o?7r䀭EVv yMU]@R+C}`:#X&"]O`]]b=Rp6 !P/qUpU9o}^NytP\>g\kᜈ?ŚV s"ƴh`@f8- 7|~,ϵ:A|\$!]m@>x@_[Z d?7ԯSCCp(S$kyVQ3QET}<$wBwBщȽE㓎")K,Z`x D@/G L&!PkhYQ?L? (I "=y&8mςM<gt Ue^"#6>Χxv ]S_ҿ%_J@>*W"U/5S*k1꫷}||ڱ{qm& 3nS+ʫ#()ǩğjإ4h?)3whaa8~lnbL[>GpkB85 ,(TRmG" ~G!q';ڲp¯T84~7ٴb(ߡ昵X ;@Ty^3hmv wjay \F(w*@rn '"=1kFXz\;v|r ?H-{ TI<8]xG5CeJcy?okmnHqU>ߓNޔ%2_zwk0XgKG\ _K.J{'X;K]c&@4 >O2?Bpz)6OXT풵|` uTYpM }gKEUOW\|_ &gjs%;;5G>^c͝Rgr]սwȝڟm |W9@}$p?:¥1F}@k$ hzP*﬜Z$6kMAx 9ܩPgisW>!@!HIZǩR?NvxcI^Q V!td(c]b$%Sε?{Ohq{2Fswz#x5ntoj^'aE4{0=>؞yS޲}y7j[yS>Lm'vFVrsGf95 s@Yg j>/0ND{CVVn7?۱N $F>:-=71 n쌥AX,O&kB5?+SC}|HF`B@?'!~8ٜSi6; ̇Z W>S e 2 ${FoCDC2=~ 6y(g!hh_j sVs\sa0 =e󄻕w э1 ?-jn f/Ϛ U@)d"I>ñw>V{b` xZɞE-:?%0|h/?'c3;or:S , U k h Kvȏұ_ w8XVC Ɏ,BǦINOypvawc4kcjOV΅|q~hs4 EAI? i%l?inڳ\aN _\=Z.(Ch@\u|Dz@< ԃS:F@ڸ8 ,-pbt|T2lJ/2Hpmo/z"DK\b t>{u2@;0FrjbA6kga½QMT/(RC)k1C/t:G.T{#Au~o ș{|h z1{gRkx%EL-2gQzS2BN-v+# HO[,P> hOUq `8:]XӾ9LT2t@@=0؎k؍ Éxƴc蟜:YB *Os$jDz8Gsejn+upEcԕ x0 B\k*.'/ܹ_`XL@=\`B#]wVȟM7BEFE~۝ L3'N0bS]c̢|R$3I*8g ܲ Sd%ML==~f">u2}2{ƕ臿i2y/so^_Rkmҿ@*O l;_}^ rzv;(~Ͱs } ϥ0%=vgguZnP{T3J@~/w%wf4/ዱ]O/x\Xm{V`$7|HmhzأdBl5Uˁ8Am#BWN+={FC>wm.J]}$ A3Zߩifw')w4<T/tdC̦pa vx#8A dLh/g U4h`!lle[7s$$Ar9YWu'bw/⺉75wg~/s\D?=ڜ< cTmgxЇ|J{), lK1&KNTO8$syMSO\T_|?TR;&$7-M>wS|r+);S ގ?+ (;YK_[`Cint3ps&ߵ;gM|7g='kϦ#"?ZpB nBg~ kGoO) `{8ͿSL_7 g.v[A3k0-n>m]NWl"JE6qg\=LpSif)0X̂VDrj-D;3uRjX&Ϻ{?P'@/EQP wd~Dh3S=<P7l͝m%_υ5IrR7 G%qLlX81&)W5sAWePwS ULU.lb8!h?͵6LڍxT&W>I@w@@@H`ēz)Z1Eֺtry} S^BŸ@ `ct5n1:rb[4Ƥf3yA;$cf{5CpQ4uLZ-VFVXFt3I&]9Gmbu /{G1 Sjhof;f 2. wzD(}1V^cnMp / Ͽ zG:_ᖮ lxБ&f3#0g?2?.}57SȮ6ϧ 8~ژNLDsI֡cY1Xӈz0ٻ05>%ک=Rga0+g\W["g#3OEct[ߔ`9ǹ,Gz(޷ {>^{tPox@Y9&8Ug?g6O2utdNs׿2\Όm{[W3.(' @(|3aM0eMN?`x|.ժj,t} 1 PaKf9zB~L/ȿJ;RR4˙|=.8K4Ɣnk[.~Vwdp$TpV%{X}9S!8O~$h0o U>&P_ s=+ l(6dBV ? tPp9p{& |$PЇm-ʤe'޳_3|7=vx iⵣsh i2v4$ξ*jܘYzEϣZhmBWyEl ? M߿H ÑT>,!98pW2Q WwyO ?UgN+>?S&5k '$=}?͋wwf8 !S쳀D@)e]ufZM+ג_u|Ƒd-,'35=6qdN\EE:ٲI}\Rqj%0|&3ܨSA=j? X d\p.*NL}h'qҵBNC;]=/ih;P4 ;oW:5ah1syB^&Sp3+m.п͂SEhߗ ,x;gˡ@ŧ9@6ڭg^uw* w7Gs,|rgvTg<; .USȯf>=<$uPF* ^g-؝L5ekMֺ1>$afF >4P.!as+|gSg[*phdƙth/o;iBko!r9OxeM)T@;9ݴz?s6HNtğ כ0@b򦜅g^b&@z7 t-3i;`ʭ=zsYYB*$пIo3"% oXKQ:9CC|x6žUx7_5cC|-oW!eL3C~{=GkZsԣ7^>]x"ƁԨNlܱra޶ek\+rxB? ,i_v|/g4܉–?F ?o .~P 8[=(P. r/P_(Nz)\5| uvA s2˰ϻ4Y΋m|6_Ŧ,S@=t.zt;}3χOܝK"N5Ung 9![h' T@,u]:e?A]>%@k 4Bi*kgߣ7.|sws |3tWkesى~Byp?yE U g];U唚Haa]|Rpc-qzxĖySEq ~X,8΂ݥq Q7'2U:Z7+&o-] _gI0oxyʻpJ1rs $$VhjꅯpU.l^d,o82;ћLCl5 {c)ee r.5OIi@Mtuvr qC8 cF`O}#L֊cԵO.|oFP ?nȇBG0b8̄vmI4٘ifu72 ivy>%hL? bXjF%gN(PSܜ|[<S/Oj>8~cMXoJt P9iRmV6Z.+!,%{u<G zpū'6;`{`+4MowcrL[fIߒZ.9n QF~u#TJC+1xN| N]ho.7@;E%$`wl 2?f< *1ԧ4I'3Ľ%K7;}PVˎ?0 0>RP.tR1o 0 6xsmgF./)@ Эh5FN Ћ]6'jSvᨠ@ >9B`9y&M|&@IDATWig lܚ,HPM-)@/_]@`S`7 WHAH_w5C *P wcɒrT ş'={<)ZL߉=쳡%?G,lKJ} n9}I &Zs̹T#ZDq 򇁗aph`sw@:S Ok) u3?F5_ E<\57an ‹Zv'.PN OJ#ؖepv8{xB}KOUR˪mǰ#2v 'vי!tѸj ;Itt5'gcoL7%璩d ӳS%;S|QP*GW 3&7B`'ozFU>G 𿮳|ݺ7p ɀu (>s@ OXഁp7$6/Hçga@*RBl.Pդ59ih'gCͬJGS[Z+/+zcVڶ,O<ct455uF|D2O-k =@H)/mR>v$?Ϋ uVX_s̝ӎv0v1YS\niBg\.TR pJm;*g2RjBU-J[uҗ .X>,y*vޠV^QBO+3D%' ұ-7^k<[F,2O"킾GkVtNR'OgVEYck ЊPVhFBgĴ56`A5/g޺,XVxͨvPrPvSҽP غ!!+M- -AE3b%yu?8.po1n.9@wĆdp"l?0վ`0.JX3F%[Շ|;w.g"yNe |9Ĝ#Q\#Nd9~ɔ$%T_M[b%FE-K>dagAovm-j9>Tg%+EwZIN9ok.Fa<-xU[@y@v@ 6ZOH *>p ]J2|EvKK'+F+ݖ^DswlqNw [A*5_?#֮oj03OH昕nm]:]"EDO?6;o oLr9/gO&B86}\Qsx1H]6/|_$Wg["(w}򧲼k]ԼK|}.2Gmԇ9+oxg9%ZU'{ң{ gGu^gfWKե_ygWEL8K"Zx'1y}e@=-Wzx8E@sOXS˞6f3:Z e?``?Z Z m1$J jD`^cqOv ݉(LCOn0|@ߦJ̈́*W:[$ if-&t40 3Oc]fƴ+#3uh\Wx{2 \r/HG^2:vӽ=ūn%eR_Y`qPNHS92@<=d8̥P` ^ى&Nvv ~;rzdv}@rOVPC8=sQ%Ly(5ϪALrw"=UI1ӭ}MD沧v9oyVgqlՂoოצoy-ŸG0#7#-r= Qt% 9@9y ֙G @{%xYZ(~8-=Dsgǹ?wAUZ#V.hO-ix@; SK4H:7JMgRdbJ{h*m~_3C(6%}Я ?ԟ4>ZY D;ɿ#ҨJp6%?Kn^9vSzp|tA _ -vDGp;SC DgVrڨXVw#'WO W+yMpc[GeE|E=9! L3;r]#uTB;ɰ|+|٣Rv@u?SRX^|kTҋiW-^V6OIVboNF L*zWK``pg6ZE/OVHgYÇ, o(]/&sfQ ;nWߛUc?p F~߰\ C\;S^|il 7DίgTOn}ВZ+v"NO=CyӠO : #Re#6ʟ&}F?B7;_d ' eY?0:+͓GCmlGNRW,lqVH䀾Ymn ڀm.4)>~+v@&*WG- gN5]F^n뾱0>?$=lwO.qßگJVm|jÙ)WҼk_V[t|qUkVq$/ RPA|[EjGJIdv|JCPzڂV T xgUe~$/+" jhc*z 6,I|-G #\,eGrڲFl+l'hA B`2Py' s F 31ί0AZx=Mo3i_, ٤r@;qz*ԏڦ ?굈1^[{ņsGŃ-9_ѱ5muϪ ovUU dp&Nx}j^C R0VnFFSd&_?wڽǽI,}˙-åЍ9%":/@%p[F]^ՑkTk@=HM|:«kuJkp_0$`݉5 (yvv㢝+W`7m#/-0Y`~8k|Ξӟ#KPI?uv3J^ _[ >aK*T|Y5 ӎ=epN(@Lq'r?ֿ&t:˟8DU b$T !Ïal7{Y升Ƽ.lC}3gQC‰!x`~ d;@c,oBǻΛtk 1h΢glwN/'T k<"0! O>%h+zh) ԪNQI'qQBvbVzF9Mf?녨V-4UxO&L_xᇛy{ H4>i{s3 L4rD(fJ SG/[eZ8Y87GGK삭@@ඣY/-Ԗ7|?O/ $Z8dBKw>(GZBi>@H_'D/CWň H2PfF#:j gzr]//OzOsv3 94~qS q4:"0֎~ w:KzMO __`Pn)0L=*&~4SG_ pJ˩ l_y/pijGLl?(lOBj@>څlWZ`\[.P(m{Vce ^A@!^[alm^hx;|j3ǦwJo@prAoG q5 wÄ߉ Ƭ w-3Xl&PoV \(wBvCSfY u ?POQKB tR \g/_QzIJ2M+ߥ]WnUC2Y1e)Yr!@jŔGUsѣXBׂQMT\АO͕|f2Hv v'T!޷׉"@H]cG`zs87I=5^v y`Gx~x_G,Gj]gNZ}!VԂΣwOt zl$u{bAEGb8J:#h 4G.h)+! t T†# ]_-P Y9BzZ :!r94lO[Qd _Nf/zpu[v͕әL_P8PyW^(s>s,l;?}Km@υpL\P$exnϪӧR^wRnͧ9W,“Ɍ;tjZꍝ'íVR.eP{TZZzsȑ!B=rJwd)V$ԧݥɁ%Jܚ~nL"ƿs7V#^ 7*`\=_\)bmQ"?p3U^&b%\9r`@>jB]Y<`sZW] }CЁ(w-7p? km,*}VlWA"/9ͭ5˿23+jf iwf%-dkmϼ_VZQ=yW_]+ʫy? DvC:ruV!*D b'^%p$QQi *!&Rץqڅ;U2+qb^ e.50f_PsQ2\U $ՠ c.M{8 &[j{6t?<:5evvi;'LaG d+(.s0M+@=`dV/RVPat2 S|`Lv0#4̂^tj}?{=7hIԃ=ܪ<=MY3uGg,gsgv`G< PPΌϿ|L^{E?eTy3;Rmį,p!5( ̱M VEƷwxy& ȇtw]8YKp%S#X˕ nF~`ˌ +yI$AkJuԯPΛw<[3>dA00l׾Bϕ&S#vV;[~g|/PzT]m= /8N- țo0 _<  g)P`iwMX>Lr [pV ȉ,; T@5*?)y<${m@}4*h'z~nqTtf z?#Ů`$oPKѲF726":[z)OnFÉXY{+;w@@ $g&(%!C$gq0Wa ;e7 ЁhѮ@p~zq3dZ> dƧKlG:e଀~dj BÅ(kE[4j8X hTNVAnkf@xG gQQdG`a0˙:'Gh׃zо^àz~U&:I 0P5&LI׹v/7"V<:`šοHU:9-55tF</^Vqgt">?xO L éųPZ*l8ZD~j/{6cAC?N A'l8kMPgCoHӿ U5 APA_ksjWrRZE`(|Հ$azг[І&TԾ8J\"8lsN7D_Z!pL Y1nx/rN|LX,Kcfie⽑6ia.HAE]kJU:'>Ov\KL +9~GW =וh;'vih(%%VI}F!CV>gv{}tznёnHC(B6ϦdYyJ[Xjvb*P3x{mΉj5mvϿci48fswx/ ꫻?I)څuXk-OSJ*}N$יv':>J\6g(7Psѿ?Xy&)w6o0/cEU?؍Os@UI~O=9;QLC4Y,ycAz~$~ kOpPx y ϑ\1 q [, ie:;yE8Ȩ Engsŷ&YVn7۱?-c~^֫v6YZ\ی-u*EB\VnגU+pzK5zi wpR%'A HT1!ńbBTL(1L9'L`8(""*Q6L=];;rwgMwWիW5RZIڍm|;ٰ49} FlHi%U tld++TPǹ"\Riyѵ}Ng 63h 0ۅ;ڸ㴳 t<& ^W9Ďr2$e ӵlO?8A>&{@JQ$ԳUHvk@ C*l;D)yPNyM°mʗԟ3R!#`zcpDždK?$HP)Оo=<۳`_.La)0d0 ]-w;-6=mQEvL.†5}>(3.!/#*Sl~ KPx[AsV1^dC?(6n)BE+g [NX\3_q?_`e +9Q`cq*P R@!"@%-ak )C^SAƲv8Mr#PO{bs`8QGq-ȴ:{6z$`C@/"WS,$JS$[d,=f1LHv;6\0+d_P<5PpgO xm9cy2/'uH=}_=+hQLFeK,>e[/ L&h xPв~g2+NZ?<1\S*M&'N~<\ytm-/ngdɦ.18o\.vYGGȏד;鹩<'±@Zt߂Cb,tU,X\`|# _4l+@*psdjZC,Ҋl<8"{eÃ=?˿74Yn(z;PӼm;||(?A|ϧ.ݝqMQZx}E ?r6Z|7O>ja~Y 44m꿫A->DٺuEovh hĢd7xR;  H<۹ńBO]yb+^<"@R5~=?f&^3Z<Arʁ;}kL͜]$D&㓇O>HLBaڤHNv\*\Jۇsիl:KmD͏+l+Cџ:̌EG~i)mت=D~]x P˘9)b?f,s@yDA_y7 t 2XKXF|@E;[?@@YG$\+cQn~.|(:3yjV? > ~nsy_#kp<|s-t*WRQ-`y%P؏BE ￵ds5'oi"@UFic5 k"," hއ|ඃp.7@e@Q-f~cMjzʧa4{ۗ?RO~tiv)tlXϬmV|j Tr%7 4ծ$aU <,У w!Se}Q鞝KJ ?bioYpL1!􋃛\_ƿjutԁ3A?ϡ1]ۼq}(36])HJtb19KTW=Fχ^]"w[ df,W2%-=jܔH`v8y}4{ɫJ'r'`,g r䂓m{k*'ȇ~G7x^{}@tm\5wM\E^̫ncy}Il_sjwrˆYP5oC->Ey8:}0 S0g9x煼oT(gw{'yCZ`aֳ.0˓MP"PG?Q ދ ,{4, 4,'~QK`C|؊w@@ Ǯ&;ͯI(MbT`Ac )p~< N7[}\]Ay#XJ"*ٸDz&OU'?HJQ>/IQ^ΐ`Tʰq}hn26 o   ԋ|мdN/n42zA)k?|3j "#0Y+=t_;BJӂ%G Xv*+?r墝7pgzCR`aqB|y\e &?)s( /^A15!ޭ{rWdAs7~\O8*/3'36giGޞR? ϖv%?O/^uTP94%NK)cIl`݄@z]`Q`[菣S@ XH@9U(k2UXh.̓G.q%^t]!ߛ:$!K>yLsg(0mv?I9KËr GvxP P? t7;SeXyS &Pxio@ܯK 8=h/wL^C}&[\/^_fyW _ST T?H@efhSta *hgIaER%vy#l2S0J<;S= +NG 4CuO@?`zԀ?c,N#>t ?RnH?|%_$o;0Ε*Jq1t Kӡi7VgqGS~.(C#Zຣ|WIrea?$uljޞF\ \E"ϡQ݉O"Q <lj*Õ%GG['M`ߞ=84?w"kXKΖ཈, /; 2/\Q|:k,]NZHoM>5+=KE˪r}K| s,&@øh˝_g-pOAxoaz|ma|M-T$X_捹Sk!#z5L^%GO x* Tý1R =B[;+FM̹4dQ)pM`kq܂%v1EP ,㺢֋q@yL?k pntyZDI Y >/X'n\RmpڅF}E*{T(7_W8rwpf6v+*Gժe@nw\XSCC`{Kbqh1&\yi*_/`wHKa\br1Eʰ(h Ȅ@bͻg[pkb,nD=({&ԸoA7u1<00 JA6MoՐv2,;f<&N͒ꍎ 9o L - L`hgtmK QTׄαJ Us@C /;"5Q s0V rP?.M NuXZ砵"jD:_1E @{mwi`3ov`,ɟ܆c>S=p?z74L]{=ڣ80:;‰Ok OYՍCA&{7,ϕߘ Ϝb&2QfqODUk;PXR`Me~-AxHaş Xj&`f,\mxYX[us!]S$12{`Y/hu%fӿ(:`wЯom͹/,<@Aϊl*"6 T 1O`*k_agr83X@=m-^^>}޽8 ϻJj3P;o8@puXXށ;#U9|]ܮ#OREu^E# 0 Gyǵf;-8y? g'/"ZUX~[+-} xuR%dYwvv(uUbyԐ ruQ}qv~"Q0E K| 3 q@D^n)$ ?ˤYkKZQ?CcROms8d\œ/s ; c<2|/NKVI;.ّ.{4ņ+BMH>DH^xJ֋v`'>h[ C]^@HOI!{gZi  aEw%wᣉË/αˑ8k^!z? _tS8[=g;Y N~V z\PcM&s+g ~@$@; dSnt~(Eg˝Z =˹' YNOJC̙_uS8 Psĕjf́BF +kSO>3{э~~[=;8b(R7Q=F@5) ':R'*P{ ķL7ѹ;WA xa|?hK-`hպkT_QᆙX-9 k2ұF-Wy&PG9yσOi=DVدk-]{ [U`<)hv4mwʛhS&L5$Ě3YIXMW W;j6@ti2aO^!JmhVY[&)|Lz;aZm]JG46+6g3B ·PwXQgϠL,XLM }:v_S wBDWiw&oJl"NCu:0{7iT}:>e2g3WN4#*fb8o#XDb 8kW~&R_tɂ|ywyxGac'ħX8{w tRYbu e7iGXK籠ə%ԻTd[0 ]vYLrfvf?g ȒGrw⳦SU00,WwJ@41(4ޑ _Q{H-e-7'0@#Brn[$GQПqj =|.8>M6$l W E`#;8ʫB18-yW!re RIYeWz_iǑ@ۡRehS`1fGX 3m0 Zf& ?>b}+թ_r_$5,LJo8'$ӘJJN4(Sx@IDATwp̓S]`b@C`a0: vo:lnQ<W1M=w4rl7,&͞na[e5+s-ue `||< =N }&?6e09sryxc_d LG H1Ԝ/ YAdOYssGxWt?W~}=Hqp=U7?sj9 t7/ L.;/,iiiު鴻%&Za0ך>iml_Z ^KH<{LzdMlQ6F|/rD m!2,#ޘ{VZO<n\4A\C_r Ә!?luC_wN7ژR5+j/znɾ,jѶhQ hj.)NS> Xf~m^1AfOs -ᅩo*ҙ‰_ qs{6 |Bp,ajuEA Du=Ls9ڃz˲V<_x'i.Obۋ\~7wrLo퀭Dl DPt!WG>ݔ~7I;8pG8KP9b)-:z - gm9\`^B`0T`G ʛB8m(];goe#_S ]=~Q7{(yt=I}9ȍeHL$G |Lqf@O ?vh O Z3̓+e,L'k7K؞ӎ?v}[m?6rC$N IbdgSfwxX#L}eZQggI*G tcܩq!?.]!D_OM fݴq=֭U%_ yOSjBZA6Ɠq缀r >7wӜ}P=rLU7 гx {pdR¯w|؝|y:%56s%%,89޹&#/NQ9wթq 5S~>> qE I<͉̟ȿ#p\@uX$о• NzR ډb-y$PN7;1&HXoeqeOP+/{v$v7g8>8brOVikS0'K}{a!S2?6T7\ i?@<(Tfس ʩ"M@=Lͫ Wrvtgo^,C pRU+-" = -}%%_~1דsc̋ Kl*`GcX4׉E=XvS?f3y, lT'0\]#Kwtm{t=^־N= j  ԇKBD|a+*ʴ}W`^Н|.MvZC?~8ϩar[oE`(7{X@?t@M܏S' <.Pn` VaR?#۲A!\z0u{vƟ]hc.,qh Л2 MH^^¸+O )n5Ԅ$*=vt!ѼŖ 4 _ |+p=ghu ;>7̦[^N?׎Y}%]]8x+>LB^IlυJnqQv,@fef|C'8%G'Y ,X2O(B a)_HۣMGёx|(J YO`~{#Ep\vnDe6kyZ,p "Ηre1b;!~<\P^\S sOU:y.cz0ؐ9u J-x+ |~vϯH.i,:{r'^'|.~cul3sc~1/uz~gJ ww3> &r1 Rc*EHf+TAy߱>1Req-ݟ͔ߗͱ4.1O\OFc;"pԋ)?oqaB6m<\4+ d5F-v -2`"mdh9Xґ4rCjLaЮq!&C֨6UdIL42Dz[|q<]+a ?jWth@ cw'lcv:t{]'a᳥ְ·B$2ƹ=_呆W6;#ۋoፋN'C;'j-01,]O`RW; Jƾ/)VOU6𞍵߶L:Av"r,h21= N7KF=_go&?n+0p(@'y@|C,uPqRE{y3/ГN&ĽiCu NVwtN$ #By^ῖ:$Ʉ46ރs8CN`8kq1>ɇw@'&2b?,SBOzoP0B0@,0/ߋ'ZaQ\QP;[Ȉ={9d:}m!qzn0<1mQ9:5P?Oݖ:b&~OF>=_Ӹ_#o-;@eA"i_ʾ bsdo: ^W$U \t&._/Ή?\:M:YE574-Ymog?kWxjP.Lz!JX_ҝR͟?-OײHch"8ED-AD 5?U _`nڋeco_U<ޯ*NfQl` +X\eZԠxcK pY~I?͉/N&PE;GqVZBs8قNCu ,^+֓[/et{czC ˓jЉJCsf!>:#<É9-'&T~Rf`{,j B_vI V=v濓:i\ݑng;ΣWTlϜ:]ȍh@&04W"F kQd1 9P[$/-i{Gl8Q+dMs,|yz)Xue,GD5*g?s&N i[UHg0(}sOvu11_@TƑ*3,vB֓mڷ?=#0!5!w*ZI[בZ9f,&IY6\?]r(a+BGTlvbmO į}' Mo79o8he1[џJ:pAW(џ^0vjL?'/~4U SK] ҿI AMvLȮlѼ>o%ίk %00I_p l|@`y]ໞ' M/zb1;9#vB ~,,v6}R9 yӑ]ˠ3G<+qdJK.K2T9?HU(BPCl8 sE.+b ijzbۼni`t9NbB7!v4hvvZ]Yf7ۍ0 ?1nIթF;ID+p][ B;a@{X3j'M, ?m9(~ƿgfAvͻ|}m9ڡf*˝S]Yƅ79$4(h$q>oH5B @bާBV%`Qx?lTt49A !"q@=J!ʕdE<+;]4 2jW@Ax!V/c40'XQDjN;}Y܊-Zc?BG2 WBU7MМd80ꘓQ@^ݒw.t{el"D7X @_ē(U2^`@r a~E;Uܟ:v;!N(T4yrj\"Ŝ /.V4ՃÁz&ӅW ;N`?v0xBwQ$7x]_I9#Ze)?n?G%=m8 8T&'I?A6댄+S(M@+}9E4ngI&隩i -In;L5 QNڭeLsmo'#&g'ܰMI,[~$ xHc' kGXPjX#QZ#lnܗL[L;C oE^>{sX'vgSs<͉\|p5[z:Ojh}E_BZ6) M#w@y'< EvGB#F4)j/!'xGf[auxΔin-~`V7}ܻz+{WLӄ'Apg ?đm*R J%2-6V~+=2]d ]+;iNc+,^{TR6tg#2$T)dzq@!CGȅӗUƴ}P׻7$>s-VX7@م2aOw:qzT=&!4-P?: ԣgD @X n†R)=<3p8q۸+bw3|}?1k45&pv8֕z<_dKKGE ]#k'~Ӭ#8wXW`Z9L[.~ϖ҉kǛ Ӊs\JA#"w(9yA` Dx0?0 MďW.yɛ+\4fMaȀq%MZ?N,s2@_ӕ9ho4F՟l-'k!<*{y C7T|Q]_*RC;J' ׿N`7_ 'r6iy\|9*Cn}oE˞,wx;l7Ь3?*۝*oOlxyrFsRMɷg]J'G'^a#8- uړ(~nRgiVY|kk \?|צZh!ckz|??z_?Zbtt@R|UZ~b@C-0 $?HW֫jIe>PUYvtpn:)?//baכ3$OZQqΐ\-T߮oBΎ{|p@{J ; T Oo$./{[ >G['dghcf>Rc=iK"ՔH1:i'@>3r,~nviV?ღz Օrc(6"0V*Q/Z4IA%TGAN~ݶ+=;_-ϳrLdJБ,#SocMmO/jQ1bXo00t[9OHw{abŽؤwذ<FwwuQ07>ߐ ǎ&79}" GQD[o`i̙«5f#XS+e^@!6?/J*i>腾~w30dw:WCm*3dB*41 {m4U(P;4nO8k"{*`0Gu | ULޛ/jt|P ^0V߮>BKWr~Wj\r{ogrLEoRvg: ğ7]-@ qPOq(:.uwv "V36`iZ;Hjޘr^dLPobp0 w΄4G#'d\tл%BE6~VvUޠ3ςhHpz&Tx*KlÜH#YXx@W 9K, |"0Az=/P ԿXAYY<_M3-9w;ϋkA3P'xsjo1܌!&KY]Mn8K`Ո?g+\ikJ䠎?Zn6Q:#QX6X@8DƓ Wg -|їRrV1fN.5dq"8skSnӹ~Ӷ F_Ȁ=Sne65zsyGwJKGD 9s7PhQ!v@4@ hyQ'B't[)?Sq, i?WOy\ePb&\YtЄE1sI8TGRO%=}E1"Y8b| OfтY+ om+\y5UtE ]MM  UÓ[Y9k::Rgz{  @U !S"^.3,V&!1ȢF=}P0R1rXMJM9ۿTKq}Bh)4HL p47K $Ds zwwΪ(bt!?u򍲷Ky/ \ͅL3^IOt#ⱅ-f$Q {ep^H3:?rV.*UvX@h@|M cc@vx!z0QViDȷ֩-EOo 9yApst R*A7SP-Q5ъ&)r.s%M5\Q%C-Z[x*ZHHt@~ | "Kx@Dٶ{q;Ļ=\5_~syMIrpZ5xnm&`YR/:1[3u?, 2R]őh>ev7:(CzM-(E@s+@g e7^YkLR>"PO26D>e]#sAmV6uVpk" %yS@0NH7|6V ]c&2o\ߋw:^u>ӑpZp#,Z 4Q`Wg&w:ӋsՎ1)@P!u G\ r^GT+Wrpߏˇ/._%$7#v ;:ٺmPJ`:35}MyI-K;SkS)lߌOT?BC \pWհfV. ZIXӍk*OL" `M7D| b\!dq|j,԰dʷ9۽=#atyh 91hA_ПX zrTљ}ZzOoPڟ.9r,""pXN/ܞ՗tv|~" "N@`Os$E |8>_1Ќ~Oek^o@}o4z>?ǐ\od{sײ:)43hS Z~R'~yR׉] ;ͭ"* )-н40S٨G d=sd:(n5 6!@gC Hw֡BGV47k8,c ٙr9ek;=<(b_N@ҁwʭ@ttm@/VP-P.5%N*M4G4XF ⼏wWJws݋3 BOvaobMF60Uu|sL7ޣޟUt0}v#|rh^}- [~LvX}S&,*nY7[dB<+Ydhkc&o7=CZzAE"+c V/O^uɕ4njSXk>u−+i~)Ռ_j;ٱGpU~'0]n}18cW*>{ H`L]~Q`{䍡ݴּ5\ ?ȯ@~D̹Bǚ(*? ' H󽹱Syr?w{i1 fdՠtk8KORo''C_L\< sja)ax;;hXiiBH~od=R=_5X,' 'kC { o%Po(*| ie"FkfߟNOJ4,0_sv +-9#FQA2.8d%9ķY~;RvO@gxާ3{WT*,[?HEnZa8.v0zT*J0^>[ԳQ;-/$vO5߃pp'ʁ"ky>3xS C8b[_Z^bYJg֠88E?Ǵw3gs- Uڑp' 6&4NvC \z|T3y, gBOi@(@ +'Ak5z.?%P 愐eC!{'JKX =7ngC7/7T_#7}9`T΄exc]h??/ҹD1^|.9 p{r16%j|UE3*TN 3DSg@.Zp\fvZ>ܨ#_ -S^e$؂m{Okk6T%%kmgr}sx?|ň{;}C l=S!\ˎ{C]UyS&|>eرH Cc8w$E*^C %'8; gh!0]c}̹Yz)6QU#<|Fz-04^7)Gqn JDiEWDxTA[VM}%`Jxe`@<3Md4ۉ3AY`'gC=fOYHkhzTi0K68 tߟOLh͍,3='ckWQ}I|Vk@c |$Jx StO1 ]zJjjӗ;̙0S˨hp^;{@tl kю*!OXO:vA e[9O>-Pϣ3 rİ3 M3]|,gq&ܷ,pπD5o ,H!#t:I`Ck1v:Rޝ7Ttkٳ5m?#pG }yu!6rTu>7DG$j K 5jw\7C"#9\pw ZG}NoΈ} XRToX`wD ,?z}[YS&G{߉QP?+1v߽)T]qXe@Q/ʐs؅yn%@'+dr_v41!S3Kٷ6?:P7,gŚ_ މn#Vz y Xp@P-tԯ,mr/L}X*!T-ОZ ;,3 ~-wN|2ՕL~wwZ| E|7-HkxTlEQo%Ȋ;[$NvP9XdHOIW#tUĹ!(If,h= Ƹ$7:"<'&u}D!Dq{h xŀȤ=u:cZ I΋vsДw\?\>Me#jYX>mAe-? \Q?5iI[nzkw!_)·PL>k>]h='!>"?H?]`Q-,!p/mӹָhghPYwHKv`ۭ /qFk^?8ku7oRoފȸ$;OoIZa~/uю[O࣐R_ww#_Ƴ<\P0grZ檙{7 x L`p@{)oc ٧kCk;[`<&+Zt aUJ!TF]z@dRz)Z}/M| [g-Fg}@ |zP 7쑣+YfT4/  qR07zӼ cG̥n3ڲqD톥n4ya#q 2K@wKѼb4[ɋ+^澛z;;{rx9x3;E6a2u.ZOX^'~/,C |1n&l̎~<#xɹ- _{$'SO%YW[mهԃT@Vn{":8 OCNja~YEs @ L,~[ yC)6 nOVIsc F`|><>K{?n^¢h1/J_+qYaܦ? -ZC՚傣KC:g:Dm⣟%|]9r@e!Pn2kk> -qdvG S ?Kuv-:8$LtDj سPDsƗM|~'xE'+Q a]VՆRjiHόa+as@ JqB/sN<կ\T rp-NkwOQg!p}@r;xeYTafwZҊ~@f$"kt!3g3==#vt>Z"?7Mf9a1% [tvv~f`PbQ&^Z$H 8t , |Sљ0BŝOGj."npm}BexHJ#r#׮VYe{5$&s[Åar'7h'(W% +x}߃YZi@1v /߻{%ÄA r2}X4EN34Åi)0elm+0?ޗ׬(7&_j[;^>l}/|,b>7u6*}QX/XerC/QF0.[Rvs靠ܞ0-ٺ Տh粙$PSBl͎z2O Y@h2*?$ k}MdQ;_ 5>z%Tf!%F*Z"E*cѤ$~ W=ӈ|`Or新/vQ~|(yE`^'M7ov@(+8dF#,UW @͠. Y4藛o1j#* =|+_҂>(Oߡ~5hȴA"SQ:Z }r傗b&r_ c_ tLzv@!ִl_̖ܯQ_֫18ZǙ MNw w( `BgV% ~?8u`mj[-Y[QЂL8 $w@{'dhYm_^xO f $dw%͵Ha$ _xB [ e K l<:¯V@-ycKOs&8WCuYЎC6_%ةD &E Nx@p. BO ׏L'! O OGGw*_m>!_`:|T飨OUiɻ?oMtoM!pC9<&**W) O ^?3?*8 >g 4:y@OXbkL#nHmA5CSmf:EhvD~G V Ku6m>\o(PABq!ϜHdʙ%Fw^;ׇ5g?H2eI!)~^皊/NLvޑ70%?O AUѮ,e%?<, m*@="v*> *B}&Pl )ߣjoi|b~T}Zlzԙ~1L~BE @zyj\<(ÂY\[SN2|z)2"/;=l^u',_u/˙ΎF|U6ĿK?$/ o ޿ Fan4h_o_*>Ɲȷ[ScJ'3o]ZTG3k%|Oqmwܮt CK&KX0mUӠlA ̟˚i(\hCg_t?Nb{]ݳ(Ar4EA0c|͘sD朮999첻3=oM ,;;xߟzgSNvd"X9rs {J,_6@IDAT@@n^zLhGvে >pܼ3m/"׾bgSThl!8z^pWļhEs1\ܨRhikޠ_øA<)>F-2CmB5ŷĻA!]`^-~T9̵9s! />G ]Qte3]2`F Э:wvS׸?k"5G`ti3:\Ni㋱iTg˿{kߘ3†vߔY+).g7t51,Ehu]bYdy|EnKOVD\ D3a/̛`Jqy/Λ8]l=S=w|7 rk4 }? :~|銞m 6?̗T虰rޏ$/l${!T>H[C˹9x8mkwp/ 1H"Dޞ_ztt2g%Ь8jeb̥]_` j?(Tй/Kߊv0`l/D-, so?vf1)s =xT`տm{(tAAqAaBsTX2,p_l`AfIuhgOn*\7\A5BS/ɸD`_^&? ЦBr eRx[IAӐndq/~(8Z">5'c3mY-'5!.,l<M/ӧ.ދ ig/Ҍ7qLj|38>-< bw^h_ ,$^Œ+%OգeBq ;rI݂( HP-]xBYr*hQ=\}]r~zԣ؉3yb⿝ֿRڷ8ݲs?#6(0l<%$P lI,;H OA@7@~=$s[nC տܤϪXXC݂ߜ I f0  VBg/Ng$@0iMg,:`%G/(-ߜa}MJ\i.8[U(n^ G ^8^ |ߎVeeKϣ,v' dʋ[sBJY-°0k wyk!Y8cnf|gu-?q&s(Q`vUh_Sgԏ>[6#̳5-gICяl;˭<^/NA!lh2StEui{[B9 }ȷBMLsslDaֿC`$D@@_GX*V:cn8ٍG.E~qW&QvV +GL$?*y|k||۳*;RcҺ')Nl-C93u5!Y"2Kjb{4AUkp={F dg ͇wc?Xrvx%/H>:?ob2Wq'|;Xu9Fk tDMhKFm=mw'ԇY:2*jlƜ6Hf9",K^Aޕޅڠ2AF ᎔t"e/ 윜MQ1dJ@rYfc_S_ Զb+S?NXmfO"HtOA5P 걆³7? P@x[X,T{C-\ Ӱ%ŊMe٤3iǧr]ϿUGJ!TU#j!}nZ'Czbq\'~$OvT 7*?FC7O}2|?yos3]"K((6DWWD 6޾/4C9ILy??ODSii繝@!@hm&QH!HsAvGJ3;{=&P_ ?/0 k s AaO~I%8 ~ #tbiͣg"FnI< }\g^BTwJ^{w'&Zufg3HeyMLs4 :Do{BÏ ?u`A[@7E[`aՙ O3|{4'_Ϧ;S8>i[C#h\c]Do/]]c#0ߜ+ H7z?ǟv^~ hIEi9g4꒓ X>38Z/h[@{SCn4?LDh4+ seJ}! @f :$&iN  @;.^pN@`PxYsx>o"0oC;}] vFS[ZZKS19yd;lT0C g5Zj|οv)BS'a;퐋&2_86yM0\L4,CwV)r-P~_v&5V*|y~1*]cL-)bs*~;0q*[Wa✝ ũDm҃{}q0>ђpVZ7LsZs dN4/:Bm`HΎp.5lJ8{niqD>R /~"x4׆3eC*|bg.+:*9}|)!Swo]|JGt1ne\rvff|-)0|o+?*/yH. %k@GȎ@2^k4u)S˹:&~7>{mÜL]:P~u ̋s o&* ͼ@Ty}P}L'G,vẈu{/ 5?7wvg ˅WB6ׅ#ok1{S!/:2~/hh2Fp]gm9\ⷲTsm/ip3(2_K4 ޵or7%VjWm-L!x4aQGO*׵{Tr.@wN WXUf\T*) 8HfYZpU%%N^f’#J; [rԕ^HG;@3U ]E?AςZr[ei4h:XUP@iI顥=̅Ӟ_x= :F(B,*x _9 ? W`@~\ en|T@@ CS"@xٍC\&U^|a:;p/ƙw׶e}KzNfx{{T5{k) ׄ['s:!1\񑛡KLW\9}m%Ea 4삼#zFlؕ) oIL6rJZoZW;.6ȯ~~$WGJ9fx˳ XpWYn$dH|Z]yƴ2ùڼS_zvEL[«ȿ۔>GP>ga\?޻vf^MA9>LO|(GP䴭r vʲ NLn ~[D~M6-:ŵf[;O#GU[ ɂh?{||@yOhW \vE gx@p,̟2/oߟWZgL($_b =uKsN+KC?rk/@ 6sOQ<:櫚g>0rKX@a?9FWj+(dzu]Mgr.3ߥjvA`I:1kB yC~`ݳOקk2ciVІMst>16s=+0q?L`=9jTUB PpӅe.9FRk,avQ̚6ߗڕSp-Fg|4 dvaEf^v=QЯZ30+?wRN\q4ZE\+{'xnv>|R@`=V ǀ9Z5*ȁD _z M x?_ n/ vAsO7.zDG#%8`~#DgRZ S*u>>~#"& tMaiH|- *J<%{@ 9 m+牥hE S[ L^:Xx R%=}=ēf)gz(lnτyg~T w.)]NYy56u+YBRH:꘬izn܄-Q4/ C HFFkZ|a)r~cb"3LZ?(8lp/+[NIށ\k\Sg^\]ws(zZ8-ݫW~n)u5gp/P'd`t|P3F^z?ˠ)}Z/cb-IBtlx|G fZ@4S|+vo2-2*8FY\9|n%#@K_ ’:6#1\ l<淙@8 3b仝ig9olwlڱGу=wo ]bH%.ǟK!孍ExVI%[kşmQ;I{ wV,0i# u&</+eu(BxBeʂ]Y EFk=`tZHhܕͣx9f1opmn[zx&OՂ/ ̢'܊u2M;5uhuR;:OLp{vP,+OQ!laMf{\)5 o+?-K27 y_tR 켒UrNaڋS__z@?xk-,xOsgxT];ٶ$ hiLqEqΌ ?]cF2;ݩw e.*%EJ0o239GѸ"WFPq: C=Q]\޽Q]yv>|:{Khe6t`CʼX|ރ_YmN|S0?a}}EG3i矄S3ݨ'Jg5,>~tXɔyO{9dѼ=yޢ矌.)LnRqf\>32ΙE535 ]H}ޙd<} K,pro|of#|0 3#WzOs| Ywr~].@,|4iX+z!E:N{,1m}OCk=u2nOC !3mBCZxcZ_ГǥkvOAR}d^ L-h_+*T*!yJ&D oLuXR\(չMc)f.f52.kZ5óldMKX+a3Gg zN&Z04o1d T+Cu]}& (0^*- ߑBu#]ZL`9E' L\ |rVSxD2|_xvױg94D00?F (BIȪzD^DBgyj*{#O_N_^i~w,;]y (>;% /lAcoi*f-fRn [剡kJT( 3Kץ]F i l-.EMPv TW ×Bα.~1>C]+@z/'jgdz݆bi6WQAdPL P5h xo(o0qh4x{[91Y??G<&Yb@=R|?@i`&qe(@&Ξe< >+qwA䟙zip^?+2I:5ZIē_0Dy|'躙yT{?iـ杠P}չ0<,Llٵ-x5>|dFXu^@=#~W YZFpX}ȌOgONcIOq&zUN 1D (iw\?_uPTDDŽ;đK9w !Lv ,#E ǂBrD71͢쩆7 H%]mRq@S;hx1V+UrcA}I!MPRM =d-D(Deam-:{EQ:êo`KߣPI(\;Ev.syGIqBI."h L$ s{?nc d.EJoM%5hx^**˭BRb哬ƿUba5ɭa^}NS{-]i/)}۵0}bl)&+#Y`Oȏ.wBql7hSHQ$CfXhCPu>?iig]K×* 6ȅ1OJZO!J<߹LƓ=כMf׻͍P uᨓFԚ髳|w}=*-#|5.@a<=3 *WZE~*t3Mt~[/> FC/6c}y.JXٳt:3l>9_³,8*E> n.)|afXCm32\?)n1?93n}ʞ'_"X!߭P |65RsBYi݀y8PxWc2dm+M@IG avgSiR F{L Ql *BKX2W ]Zue}ӵx3' ׍?NA#O5S VM#rѣUa Ô/n'z?N@UK`{C d!` 3Oͳ N= k@;)ñ8*z V|jx!΍ o ܎G~+r& |v@I(o#~_ɂwL[ t)\jX0ʗh7mS6:BŸ)o?J*㩭g㹔+ҟNE/E?)bjj 㼹v߽@j"PM GUO!oS W=)(ȂCvaH=nK; 3I`AwO gwX([ WBWP/Ю/m{@ m,$Z2XV=ɟ{!AWZoS?!0v.D$Ku0 d1,"Z=ʆhuSe73&Q,!党 g'U`Xx@s@|Rx ©m Xi-W*E)xzq* ;;Oj?'Ebj#/.;.ѿs@' ۛؑbvC2"BLڛr/DU trjk?38 pK/ÒYp> 'G-I?W>5.^QzqڣܪKq'nk: #rhu_߅ªcL})L~^ i֢;x+'e7g}.4Q鯑6 ]ɴ)δLGd£3{ƻD^;o+ rKD;`T$}_A9 ZRp-5DPuGq9\h1@9Gcbg?=s.2w|KsG}G+ˆq/RO#r?#K[߰`S{O؟S B6yez_xo,*OC߹cg qd;NyŽ樟iSvDtGŷG׼-l>lg@k/GTF9pޮw~Io/_r<@`~r&P? w{'M,(g~em%൱ Bx"Q;y-$6Ǜ yǻAOIJ|(Aů:@;UŬlyeǏl)KjBuKrLlS`]oQzNP@iʚpso4[ 7"UϣYCdL]t38t8̋xb-:>lI4U^uٯJGAПLAD[rўd5aXG99w²rV[,UG"  Bk/]bB 6]s:,OtF1* i=7M.!)ԃѵl&qwDXB {I׀2hA}3rϸ !$K Zi`נQwƩ<Ҥ}շ0vib+H4]]u O(̂Ak5sczRI5FG gU6 9%G LoȏD`PAѿ>Yz`U-މy)R"L0on7?4٣f'A?vJب@oA}#Bׅ? C%ƃY,@g^DlL$d"?)Яm.@ÞB^b\r 1E>L`^@1$P}t5N!P0Ǥ{#=1xz v ,뾴L d2?Q3'ޔ-̈́6492O mhZ@sug–"_{AP/(aՑfh>@U $օ|l6dx%|aۛSx9P-IP*Wdx <.nJb6){|a4;ƏA񞏩GlZګl%ϝlG4WB ߿h?? @ZDMr%QWo?t2{Z;OmPt?){C'DCk'!nw15u_^ǘz9|?*z=#nxIe-ՁoҮ*F/)@’+->HM|zwte$5&< ki^Im ,ny@@>uH-~*Z`&?ק3ӏ} -SVF-ӡĿWKuU)vA* - 7JO^8G5%èWc1bYꏣO\& ,ԧqwSͽk~sO㻋o:tʦ_b~?Ko:dρK[rͤsv2QFLY/[>PNAfyfU#GDQ:g),MӾL9绱?oj-q,|vŊA@9] P>D_g/wdA <׷k V~O u YۖWFJq1,tsiޓf"-5XѨ˵֓h//׫WRB}DAv[%G@Ug<$Q7b O|RVL-VGz3x lZ!,c|H)ޗS&2휥D%&`!7FpN8X_Ŧ{{s`Ú:aoVۼ@9]pv0R :CfP7gUi ^CGk=Nb3_sZ |f@t-Ĩ pY 'OpǟAt%Q@U^, qrZro\sI6g~5X~;%3FL9+ԥOg`{ESP >盚 LZ;+Pr?*֢i)~ !3^@Tr)IeLX9eSDش"45W*ƿzrRd6;&Pk^[Ɠ\>L]7ȇ<;Ss[\d"2-}|=#Sʌ3m5\89th!`;_T5P>V; v/_k O [@ >' U~9(0Ղ탰3`Jj_g!WrVpkgmAO ur '"G3l6<}2t XFϑAۑ/'_dHcN7Fi;7&w oP/0rv͛́erH%aN>%~&l lpNi">t Li|P]/]+ Qm(L+@ηȟX3|{NE|Y6y!y ei?1 @EG_ǠgZQAǒ?GDWw=\WЯƇ@x* N9`jpAAo+--PL%B(Bn0)l2A9sWA?,ckspYd;յD +t' wrZG8(*|vdj;d %!H׼Wpdĉb+n뒳I@ (_zH sPT-/z*-N`.h,UnG ;+ZUwL&]Rѿ݂#9X=v\CلEufȸޓJ?AGzn)9`<1n$ͬSׂu:%bg (l}|{F!UҍQgqǍ)I*X )VR(~&>匉[B'ch(}7yK1{͋u3qٓ~iPm2=ʉ?^HpXZ%k ׎f'gH( ]) ,0 /%dtY%'OAZ9Z yh`qEcǤN*b@C ǦyUwyJ. %7ϺdwQT WVX _>D}f+{tO]b %P/F%K ѯ 8Lȟi](}P'@ nm^WB]Jg^_<`cgqBD?UѢSC˜SFm7K=lQ5#+ʸFIr6l 7P5~M-YgsN4c(~^ e+ewn"݂WsF8v/;_:ׄCySj΂f ;¦wec Oh>;7CGJ8 ye>Դ? &CCm0p|?0Xp }MD@|z cN6C}rG.=76Z%aT.ˬb]oos1z_'z\ObCa Ӂ䷲AY Ƒ'hy6 I&/qE0yRt\G/ymn"ܼ֭OOb墩rV|ï?nb:!N#xI#x@Zs[ E>.V 1-TJx >yaz[)uy΀ca8kߛ1ۑ$ 6י(>%v*lw8fgghqb!i+$&-%`h 3%0g==Y 7"vE՞? #{^dthbfghiBD~e,yɿs; A=:vfƙ6D#Of:bk٧BksOs;|D70sg%StܟܑjA qFԻ|I}_j}!zg.`{k?⍳&l+{N% yDC=O3|g[42qiOe625^ٮ?Kƞ@~ c=\ U` o/@'_ (@Hk-R^sm~`4sʥnmnܮSrwP@Eɋύ!vF2~ѸrA(倿VG1 vpw&~ O(~ xRVA-A=؁?X"m(^!xq^&yogP6ߎQn7 +*ܻ\BkgBش;ḕs;NDL"U`au|N)5/, $'ʽ@=xB~hމ"M0wku{[ ԣM ?VY|_8\@\] ⏄j;`#% R 3h烂(t+߃樣NJo9YD:#Z?}MΔ_}>eKψ{_oG:7D1;+^-TM+O fB+Xhy!xR`U(P_xN,Fį \zL8tg2CE/ƧU\ ̎k{Qc*b&3m|w| ]<|ɑN&:Yx^|;pl}i-n yլȎZw΁N0yӇh47^sJREȮėpd1l ?*ǖx[ޱ_3BhU a )=B P78ɿ\IFMO`o(nhM:-l50cOvގiMofSr1=m2[TPSmVG KL';Lo;ص tnpqwhl\Ò-RYϮ;O",Z FH!,GRUh¦6* Xh&EPH*> y>Q%~T~YK&gxLK)g+Z)h!BMXӂ_05AB:|K(| #ƗB* R /T}cC]yՇ(] mbtSJ> Ӷ> M#{ G{MY> u guUR~GYPH*1P\-𽾀,#%aVCh%K)B ބ`Cr2k ,)R]=i}t46DfܟU`Q.0PVF[Mp@9`ZXI8kU-n׽m] ȁ:5? NO;$o(П=$p@.TC"K{_[xes ;];Mz7矚aI+jnit)9g]J@_4:y4W;ƙ8;Ja1Q 9o:^m0+)zCS7z@,@H_" 0# ?cg\~mZ?-Q)FPPyMj6i Ey{,x0">ghgL;w¦gV=CؙFHKL 3s+9Zc,5xkk[a8pi›;讎O`aS~zq@}^ -44K0Gzΰ[/rE>bPUSITX"@<Ufrr|;2*>3P?Z0jw.q5yJ@;I`o_Uz"#u)/4 M Tg^ӂ X&J\Ut Ѱw_e5+ޘg)K{wمa0[<{EfgmYܡ,܌{R#.=x+%?-bv+Ɓ;2hY  &kW03u#^;>BStTc JS;=|@}O`əڏR|^Wk±v>.0_S@@r@;E}3C[ݬSߥL+7 л{~F/ʑ蝣3ݰt?t;oG^d(vgh5g"pnx~K,Z@وdaN|٫w34HދoF  DX,P~/-_)K6_1U ha:>l^_$? [@J`hZ֧{jgkI4"8Ȏ"ŧOPg!eWS4; DsSC& W$@| ˂,*|JIO5z ewE~!2>㊒A4ZT N7g8>;_R}nI48Ws&ts :`| XK5 /uR SN7v,y@>!n2X^$yO5 _?\W6`z`cV3*(1z{D_j{s{gy@J,T-*^1o(@;B ;,<1 2̢JQ/t>cyw#2,GD#sfLwSIRQ~T)e!+̩z+Kw](~7̿MS؊s+oX,:Rh즱ۚR(H{^ǩcŋ~ٱ|FQ\yD!PO+{g\BQ[nj lN`0tun5UPIG :=0U=J=;ݞ>Ѳmȏϐ%wnO૯$a GDI8zlp1NgC ,2n.T)_꘷Gizte(aiV/{{:*ZrѴg͜>flc,=enVvɜ#"v"6^V\-[k~fU`-s;)d]έ{l w ǧg][,=Z)d/P{ W~F(eNAg@M<u\ލUcxHl.D: #P?CQ1UXU6yP`P8b,˭d:G!L,آ n`x^([سX۹3D(໳{, /hcZњeK =lr]L*4dx܊M=bӍv=fAWC9O)3jnzh3A4,#p{_[,Sv~=j(#m^p@&0m,dMK'p}K|x CqAjƤjm_U\aJYX. @>nRLS3IbeVěmst:`)}g 5{ FPy9 pX }oO_3~_7M1 0 "klP(M;K^g9.Ю ,.0;P='~sɼSKLӎ0?21)XwfG197Eg[AfO@% לowB6u#u!Q|̾-i2gǛğ*:OPͧeW瓄G.|.}+ P S;M3ɜO?LͳAm<h"#Vr :ʡ%WQ(o#htʱPn',`?+Q@Q }N9tebnPk7=XZ0hA7d!f/%~ON嗯caϬG ͽf  ?9=ݻvi.}jԜb$]6%$Z\Z ," Dzrɂ7(5s譂B L L |9I-TXj8~/šW|A<h^KhBNˇ fv߃a^2XZ-.9*ޥFjGZE~.:1[i0Ɵt]igT#Q226㼳0VD9S^!Rã"u՟%x&;O( )<6 嵼ͪsVQtDx͏ 7-,,^{ֿ ,o1~nGU5"^T%S3<qWN$ Zz1(}t;[;boQ]PG*'fZDN4{ |n"OGBxL3T`+]M7 o@N XZ崣xvGe <.pj`޻ΕյKgr9Qx| o- ǟeio K?Ԥ_v3yq* I z` {ͻ[G'TcUM >ꣲo?Gvղ iZOs|/:7? \w#egy5D bQ µhSr' }q?'j<?  f]m3?>H.<<4 XVP玸,) Xbg>1mORӇr`x T̖A9 qndUrqfh!I4ϰL=?\XNHtwpş? qqU¸øc~bĂ2w¬WRdSǷKnАrjmed#G5[kYʝ2\9IJ.mn.0}@_bgSTx/D 5DC][G! l3&FXhs XPC?λN vN߆7b8ӥ%+iDsvb|uyXdKCԹrwЙ9CxCMSH{BM#ߙ>Jc,d֪OaJ!Ȏ|q!!tuLkBrb*bAP򟝰);iؗΖ;t gBy?8؄oKy`dA⟟+MױG0x 385| *k3q?.N黵[ܿȴcAwޗ(c2:*FԯN1/D>P N7<3@`@4 \?,P jM7tI \B+pN'M$G=#m:kq6G)ȿ7%&v=(>wԨ,)|;(mJxYRdB@<@?*@?Bp/G΁"Mf#@,;[h-]%c;!ϔTR+1;WS:~êu˦@KPvzJƿMe /)^ 52tuS^}ޟ.Hqp xgݢ:V|Cu@9O~&9Z 3#54X'P~ [rb$}j`iDCO 1.z1r=* s;u6q+|W9%C4$ӫP-F<`NQav L҄9q<%fek Գ#(QbJ}}s^ +Wx"R1 UU~Էvn@(@H)Q;z'/(!#1m,_(~:9Tvu@58U`x]_`B~Sg90<@=|Rn$; l\m@uX]@.0@]Ggs JM']İV )x;>"ܓǴS/ 2)ƍ 7ڱF#RɚGocv%o]isfCX.$7gg\@{DU`p@\XB޸s<+0^ O\ ,<̒ T$|̾t:8>sT,>:ղBt%9M:^1@wEf ݆r7T\\=w/8j㓇s]9iS+ϫh<($jjZKRA34@G'/ w|]Ђ$bk_)N~O65iQ)VPQD=0]{{@3[]rq!e=O)7?[sNS۪kO/wdM8Gr_S]!n xP|$R_LW}jo K fT[y&oTl9=û?K2sD߅\sIq[*KWw5NBi'L;|x%# Cr_XEpΙ`^FyǛOHwѧ2L;)Cc KcUu_deճb9w7`"^ *RGM]e׻ 1mμE'y t_ƅbk)Tuk9Qv.+Bk-XW6KON2m@ZEw.e&Y]%()`A设~vQځ'm_?sYͰ%q5P(rYJkO<]#9Y:_.7o>x{Y ۛ vvE#*2VL B/G P*d3lsLBQ_.2>?:@pdKx* IHO!#f+fO=2O}x~:-h+X6R:Q{[s L;SF=tFt1<33ƣ$QPWqSh@ q%LtG31OAۘP˺+s(Y" />d_KԎgSS}<Y~dz4y_#2݋߄ONUJyHʽgGanNRa۹#='!6G;VP9T!Y{,s%@^41t m؃tx3Q Q}!;O&+VL|囊Y oFkq\7ډRl72rn\-,(S0K,OJC`" #PȨd|C/3Kc}7)ԯaS̓~ϸRک)y_\y>ki)c\Y^y޴H 9t_Qv>&j)M2mĴy[/W1T|D49sϏJ2Ws}%!w*}=g*LgG?znbnMS˜㷳;з_V &uMC4OU%C#s4!K:6Rެ.T;̩_rLd{ C@}JZ`HLC_\"w*> [?1S5Ŀ9dC;&r``+?3Vknڪ~E [hW(9όd"=2(2e WHI>,B?|X˺t.rAV)btAghݹ4 %L~@~3Y#`@Z崿@O\٘FU<ޓNO XN޿œ : f~@}U;p'x~Oyہ-VgAQ#$Yk@{sf$|J-MsdamhOs >{Y;{h&Z/:'<QVskZhYx/'^˞Ό7hߗ՟wQf!GdOIt=eRj,n9<'oIV T q׉B12#AG sm$U2QnM}&x|Æ1G:t7{$\Rې>vGEBFef娅ю߬ڨZoftut/bK+kϗiYd !`@u?hYn}+_T !:K^toэh Zŗl2/(BϪ<3#(<$ (]2@;"˶+-;DNO+&Sk'#܎qyRz]\ҲYAӓyODfv6@$)OVԋG5]?ɭ© Djz̽-juxB9ñqE=jkPs, _ gOfZjDjSy@ o']{t{K p|LKlΥn&-=IE|Ci<_7F牖^-2#n/gz۸Zvz zmlHԣ4='h 76\_\%} hU&v'8s;^'2NhqLt2ߎS.,ƶ`FW:rt6<_6&*t)DwN==<ٰp-!]R/VF#h+V|W ,r6Q Z LP iə#~$6o&Vcw{w4._Na4Wn"V0ݠb ` c!T |ą㡕u0~6=&^Ҕuمs1 uIЇA ʋuuڻQaRpɱ%Z.c95ǫ!>ާEzax)^;ۛPمhs_Lߝh#07x\e^&@ |Pfxrp9_4A[V.>CbnyOoWg "vh%“duwvTqڱi"Jo-s` 䘇 K+PYO/M_"]>%п(PxP ̈́ϗGGF20qWjf:֜)/g^3o3iu?8x 3A%L_0r@?ly_U{Qp yWtAs Tg |]+_r~Q 56?!@ i2574f`AKh[&[38՚#*hxƦt#]ȂneT73YUb‰:Ff^6̜HPu:e'E@4I:Uy)k (-#f/ܘ^gq}l+EBl[ME5~`U[ߦ;/.d _Μ[o@z Fڹ2*;r:@7XHx^,/%DGGer?ĔX@/P5 Sp$/I^$- xަ D;Px] p?Mrx~3@?@;__-HvNMyb){ԃSR-C5»x"{ Lw >r%L3 rk# MQtz_@@3'O p1{ ЃhAye_^<AL*EW zuDJK9=5syλ:f<`1T]R1zMɱFN}όtczjvz⎴ ?=ӷ_)~vbem\DP9Qsw 5oZK! 'd3͕.2@rS0~T٤cڏY.4e QO$yЏ>Yu+;"GHO_Q6ϥ}k>R|LC#'@IDAT좶{ȗ / vȯ%D%1wpORwq}po&m@?/eP6%րʈ㛱[Wֱz VO׫ڬ ~[[|~G̀Odz潾6yC]N`` HہY(!K?W?wkf~=Ό 9=[T87" 40i4Ih56*ZAJğζ"P*Z,;<\SkS)Pi6QoX8T@ ]% ē4_$X#Jcv(NL;8Y> Zd! U z/x_Wg`M{14Ncv+N}>f=o{ЫCiSV0(?MBkA;O ߘ" /:qv\Km=}z¬Stdz\l/7zA ,6*g#ݵ3>.f5@sj<)P){)!H,6|Zp&5+鏚kJլP~\*ow̤GrJbބ?ѱKr+;U?4=[1`r_%%;xk)Tp\*eȸ;{6 L ԃ,goOi&g̡vYxθL?_U\vfҮsoeof0(;^hfSևQ2wt濗6m\0#g? ><=-uy#(d-Nzʎ}Gq8\dM4.rqZ\>Nj_OF |3ו]k7\=r9h0O%1c`U0f`d寜㩞z9,ň_i)`+( Mu%D-@8Ȯ1Ly ΰ.t\>8\s)WNC4oܠu/{  ihBnϵ[W/fqH,lr@gvJC`9޿B 3AEj^1?1L (TA'S|NXZ@}3){i*7QJze2y'âGN pxI+8o?# K-˭xG@5>Y w[rMKTstf xY#ގiW^CFk6x+O gR?xᒋ:wlzL6ϛR*ܿ5Aӎk'SR g*<\/6^Ʌ'V f"eG) Tm8~'R} BgH6ore,ɂ6 .S@#A?KثzX #Uĸn]E Sm&/&,u+ߓ"D>/{7JRGB7pw̚JLdgbN5݄6^|3.!K77f؄h1fTП38éel@h2O{݃ $x+hv;?<*=JUKܼk`2:EO .,7S7OsqACA%EzEh(\Ht^j"6Xt1|; NWPo 9v;Rmc2U+f_ueE, _VZ5u.^4$p _6sxA`~@~ 4?z |0tG# k9;ޔnO⻶krFVkzn*r/Rȣb&쭝(<'C9MRO& ]+<PX}9Sɗ扭扛#wXߩ݋+r`}80ywB,F}8mMzQpjʆ]sBtf~JsV@gC3g U#kO~~ʳ%/iW9<w#9AO' QQK&^GE}i}R]]ڧe=D 2ւ*W7 arlP7_ҟPn!)?* yt 2t& bsAÜB47P 3Em 50Inl,_(1"Fİtx{LУ3W#1B.H ظYw'x8 Lu}oo* Bz@#9K Pk@}.@Y͉BXG`yG T ~<G|2$; [Nd~c@?@4(hS!dqQϖ I isxb-3x}+*Cr>BzI|s:,:3,R/Nܟ g$C䚻sp,Ɵ wWg]>r67YbL;OjS\nڍ+Nf+#f5*R/9bx✅߂?@!c*YwЩ[1Zc!Rx[xauwB2)(X1/W~;c~Rw \ޙ6/Yx wX` ԼkBK LպsZYG7曣Kj6~ Zw)ϻ=+)UoC/ gݡX1n8?k\y9 7y~o0,K{H K5sY<': ԓZQ wċ=f58Bt\%?&3 fMp!zs6>m Ds a#[p橔q;q`|QogG L`cm όg k%֊OZ|A ;Z.RS U-))?[+<p^zPN9|8ؘrz=Q/1!"ݱ$*Q ]NMyj-Q3'>Mٙ4<̟v]s@[d6TUߢãC9p)uxCt(b[o>Tܠ1۹$fC% ĒX1(auIƄGtȡ}Oc8] Zh=PlHAR1ѯfXYt˿܊:;m IYdgM}a,]3q].\M4`? #i9[`^ ǻ2K+z Sl 9G T:o޽8EhIoў.KU!IA)u͐ p٪]"_!xZk"hg|N)bbFqW9ޟ@l`54C˓ IJ&ĝ%5$ʕE3:D 9q ?;phL'vO㍡V|n|#,Z' L VF Xڋ+O@CZ~=.Ȅ\;~OQ)-o?{}&P3Syw?r8T+De, =@V7}ws!x@{}]vjH*,cK&i-?M,;DKtDEf2ãCRbQcukQJuA$'|Gf{Y({/wCK8rj!;W RPmqG&ۆQ{3&W6{As!~*e5ח!V}=j) hy`\#u?:k:kU-]"7Vfzݎ%i^q4|3|ӜfhX j֣_de~Y F<~e=z}cUm8~S}0nrZ!DT?-=m(?X1߿G =a?௜CqgC+yDaO7d*k|$g֢뢘/'M#(Y\q cG?GI1ׂ^}j@Rބ} [C ^E EqbsYJ*mi.-aq )UpmxmF)ib;+3ͯr{:sF CƱ \ʆ {|?㍤?bj%qT$zsX¡]147(ʿB)IRACGD9ŵ8C kDAo{\ 7Lg!\r;]J$k3G3e`G.jM6=@u~osG訦\"K 1zz5өj4ʌb~nl@ [ijc77?q'"~<_@;)h/ I  Xcn+3Λ~5$)6[.a>?lbsO^3wY?lQVf7\b᧔sUzXթh-PR1qP)k.s GPkh&w2h cKz{B%r 8 |㵂E̟:Ay}5su' t.'> ץTUT<{{zJsbz}l|ux& R,F.9+7R  L'6@7@tbzТFQ.ѳ/eIM`NH߶Hq8fE݉_enG?rp?*PN _}_ 3(^P)օڹ~DKM7^= irۨGpݍ,򿂸xczB |¶tYBP]F)Q*OBsN}>88ڏN ww<_q;&a@}>߈w |HT|øa-3$[-twԋN3/'RwAA;YZWTk{^_s i{^HrrT?S8 } /){Dw-;d6~z{ xw5_| #~EI~Q>k;6:hR̛n-٦C*_Ϋ;Eq*vrϴ@D|]VLˋ&jO󒓪:|16 6 )z@LibprMg@K%t!]LC* ӎH0V4m:nކh]b$@u 1t`lh !H, „?J_xBaqɵ^#iGTN[VK3B208)I_JU/ &Nҧ_1z*4"[+%`wHfM=&SY4_7u Y GPB_>-ˇÄ vK&kc2/ Wm}ӊ^Z-,K8':=b~-MA;:E_ZΫBt df.1,1G(47`I`4aj{dwZ?-[ޅdjVo-wooC4{1SCc(-Pn'h+xc T':K~P y|D`5FXW(#]/ZA,#׬x-:yqC[ 'oy7cn}L8Ϧgqֿ?x/܋‰-V L{#T T9?rIaOF?{Fີ Ÿ /Ql\Y`Jn/z'/Q2q+܊Υ=>wJPpde6jȪ$w@]VM+{+;6gs9QQqto|tʹ-@$ K|@d?;EcFG;]a>!o M̀l]|_ ~_JYhb >{ETrnf#B|_D'=3-+BSUNG3)m@ңcy,!l-lJc|H1Z^. gR@@ZG  $g{Sp;mc z0yq ay'%Ep,uX+=*W? |C-@M+{f3 wr<m I>zP.5{JC*l?K͚"qE) }wFgfӾwIϯJ~ޠb'ύ !C͝N^wh~rMԑao0/8]$&tjxU-~n2S|1 \ --$d\)%KOf"J1iWϰiZvZjQ~.g:{=a=%<@~ܚyLGT~#sWz׊]ۖҽ歡*Sj_#Pm gqD;\͖HavπRƝB<Q ?Q޶5mhaz<6|n4%f\ Y1;K}r."CشQ,u{qT/rY~ROZ!]@bBB6jaJϜB^>-ƩS(k2v{q~ԧѼ:\E]Q~u+/W+Ud,X\{:{Hq ?Jņ>[p,Cc ;͢?J?XW)ttIf4!"1ڎ%١SUCϜBe%7ұCν}/{/tH@> WBfgrT,7=: P&wѺ4Y1 fmaك_O7D|0V? 5ߚ>qvg ~`Y>~ĨȫC/6K}'LZ R:y=u8L<;0. zR >tyP8E.'Z4ӐOD L8'yr̀xHƫEGJ|tP` +ib&\Pm ~ }.gmݛ.LZ ˘skpNbvf Zې^~k=HyS&fz/?O.;!ϖS_o+5zAÖeN^[qtvfJLS z;Bb+pD诣1\fᡇ fSiBPx ,G=(Fw L@v55AVpΕ;;d}]Tũ?Aa:_?> Zxf=E9џcvBi5%?0\ \(chxIp/Gk;yPϿW L+KA ja݄M*Կ`ݶAF}fv3W`b.9g*7}+wnΞ AT<ٗڝ44Φ׹d|) G;h)Rpg'J+o 6\Es"0SQ"7,P~`{ƥA6Г(`cZ 0/Eqf#ǂ/цч O'D8#+3gqsk_vdgP!<1n!.Y2| AP}͞a'7kDh#{9,c.^t+6WL}6wSxkc6*tq5x7N6w5.ɦ%puRgVYj]' XάB/~2~Tn!@' hT^.@{Qh$H6W0XwB%;W}@>H3Z(*-vF; n;#ؑ3[ [ ABLv`[Zi~s@Я&GյH^H-2 \+8G(v%z^󃿫?]Ԛ|mZE>+E=YBCޑȎ_YT 皢~.\/FDtJèiˣיáͺ(d] Un_@"ͮ'C$$ ;QƎ$ ݕ&eߍy Kx^OBik6bËI9ZuMTזwZ̧Qh>h\?23|S:iv }WU@R3)!?aAŎ)s&}X 3yVys  ԋ]{>&N)͉ZSR{Gzg1  <{.p&́g.:¥!uFyP^>Q|XehϷe||]D6gGsJX8W.`'jbc78Z- =8H@1Y =<8sw/&lDS{5.h|D 9|a&QOݡ~·᫲Yp44٨|bUybՏռVΨ+P(.AyQ`\_]H{Me편|rz-6f1[O5o%p.5Ew{¶uk<4~5#B$?O8ͳBRCawrfV |K[9s{P%2.Wzޜz\ZiVNo_s5to[sL*'n[;lpMT`3#| ǹf-KiB=([yܪE wMC#M,drx_!Z6^/ٍĒwW.cTRj76[>}qiՁy=evx|H ɶq'_z*=[\PW`[H+R;nѧ ^*!/| awĹ`^]o%hcFt/P%iXBiB!X Y Ӷԏy:cؿԟzПn欄g Y]90M$Sҵ))i RӸoP1-~v>¸KBcɸIw;=E dC0XlṳT#Bہ%x+ӔN$ٱ]e+XXt%Mq ): ȉ6 vg~A ؗR8ΖFp]]SjMj" (XQ+-GK nO9,Yq M d{eN;r ̐ݐ*2& 7lf& x]Yyk#8"p]*@{&g~>-߿qs~cZ > )`|ZGRk/j H,ZVV|=j!~>KGFe!63Z鷣6љm\ Vq{hh_++w;ʡJn,𼡀ux_+Pc!_N1 4ttwg wkĴbGy%@ .Z ۺ -L *r]!?F:suM3k(WoÃ2/C ~.4ەXȿ+C0 !k[ hϰ OԊGI?/stM} /tC{#YXܬ`OkMK𪣜r3>Wz~͙sWk ԑI4d=ԣk{='4]#G$^ <)\;JG+X ߗ|[5ٵ.|j%0oKC+nTFjB0g{ Ʊ,w !:츸,}]әyBH9e6Wm[SڀѢ%uI26-akX6`Tp;=ӭ 3 oeǮNd#L\ڒq?7ně-CBz+1O0M̑UoDz)%mt:Ҿ^uA r܃X`t7A,:[t XTΊ[U>e¬uP0Q9&Cud^eb1bC"A3;׻@X1قH>VHqNTS3W1pos1DvJzt˫c0uS(kuT 9<]95:D/$˯w5z7+/_<2GO?/ЏF dWXp~gͩ  oߺp() ⥾eDҾ:/fŢ7Je^ʼ^~-,5UfK2^k:W֟DaN7hՒQ8!]/y' ù}Fx5|0:]+Ҁ`ԡR`믃؁ {=|K3wQpNp~gAyC ?| _3;.J&ZR.nɩ;.'/[CyI_+G֘-kuK06X/YTX۹Oq_fSUxN fBP{}/vUrJ+tu8 &w߳-ԳϿ T9xy=\ov9z4ճn[ɓG/)i⇲\V9 bGa Zu:~:C" f pz?ywd@K\w(|~ ?Ғ>fs(?4^D2uoⷊ/膜AL̠<_z +[=G%D{ FA~}`>!v{_99yCFxF> 39MO]} [`Rñښ = N=[bC|OEFoXɈh8vF{E[a*N]3xAx_dUZc-#Rdpx ѫlѣFMS=O:cScCxRue#KOnE3!eYzP ϯ2Um7SO r vPgVUP*0E&4R]uADT;|zx!Y= k_)-<;׎t>P=LpťR?yTFm]QBm2iiI? cȷ{;ऄ15REBmN;Or];8} x qʒ"5I$ޭ&2Pdh%Ƙ킶p?5-}ont(Ћׂϱ]CʷppVFP4磋UYamG N_wiU V,h/rGhE~+`Nύn@!U Pq< qCEbrË) Ū5M=~1R=ֹ@W(, )zynTd׼;czKQ'-.j"KKnt:`rQ*+` u<E!R<'c R˪d6-N+4?@4|d0;_}Yr5n&ovY.3ͱ'_D)#3.ń"݀L/fֹ`ho~A@gsӵgOp dT({N2P/r){o0\mn+o79K^[~֩#Ejf{%=F>vHBESNtj@Tgf뿻-X :^fUp7m}no[ ;)0,8-n\xD |u7pG\rMf G7qf[$8>Xp~G㾃:;C&" ws+D_n^夏đS&W%e޹HC"tмHu!|ٻ[T38꽂\ČK[NJ]I&qo_װu͘|t;[53ueyZ k]%`@¹fG-A?d \ uUFIWIr35~l4y!\Fw상_#hKKӔDNI]W;_+4ޫ̟vQ%=P79V\Dޝ'X9ܪ$A ԣsaun _M$(+H-4w>X^Fj @~ຫ9["+k|Ql7P{7A$V{Tt2 )y[Cx|[zZr sA${3O+X[K5 izJUWq j/MV8|t0WuB6`9Wkϋ NU+ ~ϟ'Q43I?MkӃfS[%(uY_*LYx/L]EIztoaLowWWApzAe+,ȎʁzA>@}♓D "#("`I4ﰔME)?7Aepu0e5鞓tz:n·]WO *6'h*.~tpB\[GlcAܐu&FF؀-_bA=s ~Ɗ2ZM |}uh=;W^xh.u2RJW:U<~ ;|)GEm%NFla;YK-=]2e#8FỜ-`xF h@ui r*s>iJzk6!2ha*O\IdP޽/zGӲx@T~5׵SRTpym#2F񮎎ol yp4z'ycc"=$&Ϡ6`cxQF?tg8ABd_!LuAgC*xLU:vu7 X`j2{>C׉ +Y\Iq];Z;[w^d\G *±XpeP,#& #TK)zrÖTUx=vdqBj^Џ\Oqp@ }5}@MTVx*1OvA|\;ezWзFa-z<[@¿ϟ4niyb,Gu2{2܊[z[l,99wme+k3 mBm{*n%ck%Nb5?p-p][3zm/Gh[ Q^fi~tWqHUem2O1]sOAE?F h]R)%9F^ .`s5ģsTo7P[2l Rwi2d,(pg ~#xTwm*G)R8th֒zfCN`Y fчWK TsUh`1 H<ӻJ3D$\{ WMqsK {BSpl=bwr{ .nL,siUrFS7iߐ):19]C ? HWsHU~ L~)ec[U/E7;H=K%vf AO4w{!O ,QK|74+ybP~; ԙ! 咝OÁX뽗`OJ?A"UڢA(SB:͉4OCjl Cd?u' ['tEt@mqEn//⳦V3{+}d-Vx2laB퓹^i(4O9Va6q#=pڨ]C Q%tmd,Sx 'h/HMqȕCqj{6h * 7ɲ;yl ]l& 0T3|ҹzcp׳fAYӄj0 /dMyO)A?ыlSP^o#VQ)z:S)ǤRAe~\G2w>4`(A`"]ͪ_Srh{uG]7ϯZE<}B,%̰roR< /Ip >M;(v8*E')$MM|QHԪS]+{+xLuLÙӄ& j \t'P?=7oY48?eΑl`ega6Ãsk丷?7u:5s}N7߅ȩCft7+yq+=}fx]1@;!ݹOʃo,{{\)(* >"~C}@+P; Nox{;uk [^Y`ɝ1 y%?_H~TޞϿ[/aְ3zS5s jk؆~RrbUOUxR1afơOuA*( bA<*rxD|֢zԈvñ(1(1 6f[Cb ҭǟert@4 \A9{k U4ӂrk78;QHMd~&ZgNK.RT?z-LNpr?,zA:yN<6Jd^_^G ㉢LWewnvIQyF055aPd^qϰM|MHՊ8P;!?7sAt7{X23vvPΫ˺>_eݸG~ G Y]A/V9>F⻹wno_Zc*?2ACDۯxşTЊ,\oGn1x4zL9ꂓ^^g/Qv6ք-5DzJnĵ^sg η{['e}nIY$& Hlw (Sp. b)PM "[QVށ:Zc {r] 6` h 5ؓeأ`*>ȯ(1)Q<( 4VΥK'̗ؕ91qAjTvux@u$ J*8^Z"ptEϓinNF~ CkFo׵aQM0h9xdO5td(i.\ hvy >^\BSY1C%ݻ̑)4k`jڛݨt,{^wd|rD9@7 oKpލ]iXDc'Qd1|{&|Ϝ8Wq#齲@."'>o=DrzWv: f@~퍑3E`Bn91w/缇(At76bUCV~0Eu+8nHP}oRzuaWp/v3ϙIxϻ *7^Ю,87A`Mxg X새 Y:9`7݂uvy*73C>-͙"[4mӈ ѻR}K?I\+5ҵApOxQ9 l &F-/}F] x`?pA W!/S5Y*g!2Jf.VNx QGB-D^L[m!(x W_%Sgatz=<3sm od泘g}{MD~9虠> }ipZɑ\_;4q.ٻ ђ.xEs!5ZO=Egwje*}{4YL ~fJģuNq.\9 [ʯkh+Pg t|^;^1` W4[>Uph KXּ/d I\Ƿ|w$ }|Ք7q}WMỈ^c4ɯюܐ#~/M;o%9nڥz5&~{`nI8SB`x,a4rխ8FN|&P(Ywti;<>~w߁nDWuat^ &3_.[+@ k1|U>r˚+oE+q+E_XP,e -^9%f~V~oC9y_ N1?s iN&iHќPA76:2EoN~;Y`u@$.ճT><ՏV'/'&)K޺˅/;|b[>ȭ̮f?K'^A|tu2|'wsp=[KÐ}e2tMԟ9s.z>^!_ h7.?ff_>; ^[0ot8d30Ȣ%@cf% PC{<]+MCΥGHDrWL do[v , dB]=WKg>@@4Z4)-}$mAa}t_MXf.J%UReA?o7Ki_?!m w oC88RrwQ_ĀE6,1Ƚ>,4\%X{?t $~^NJ#tlENIWJC i$*~2:N3~?Dq__*ҝ" Ytt+KPR#r6@(QK;,LA0d)W{V`kO1:JG4QX@GdKdGj'58NA4f@yR9ݙ'*Z!w9>ʓ8.+yz•37R\xcf$~@6Cș;rold^O VEGkN *yC9BP/%+z7{&9K`P]=7mgY7=NEgb:ٝ끔{&&~x8x֜}L\=;ByiiS}(?~!/45ΆE[P,p`PߛWcI 痢.i[9n'G Cq3u{A}v`hy/ւ>oQ WV sųts3>{ln-XEHͻ_.Wo8KT#sO%?:2EBZ[SO>}Z!6o[CܧVWmʦ\r>(Bߛ& |+v[!rWA\}vt4>-H ëP|V5ղ0 m*heUkɴJiAПW uvjr(A|pv! vw}{ཻC gBrȕ[ʇxt[\fj;W>ha1UbF_}{|ˁSsHWH~EZr,TXB>d3@s<mV9 z\l)s|2آH"Eft~]՟nip5M yK@.%/ dkVZLGk~4U^ u+WvsJҬ_0׭0&ߘz&?84}?;ͷߚ}{]u5cʒtts)=330A.ifu&^>>y%q4<|3:&NvF_"[FHÀ{vcBcee4T5i:\nv{ sP__Hi eub$C|o= ln(x2``)^}: J 㽭mK`/9N)ȧ ׊P=dR]r ~(_aAz.HoR͔p7'cA"qAzH+SkIyM=W|}SEPl&^)y'˚O)R܆@w =Ny& z 4WpCpO}UL>ڼNd\ )'xN4*uL àN,~:xW _83@`<+A<"(}X`0p` ds ̈́p# GkAQp fZt)nWa0>K>Q?H7P_׊ .rD Z\m)~iHRxeVKS+Ȼ ̣Hܴ+u +VnO\q |l"^vxG0>p`bQ/yS; 7MF BΡu?wΠϯ3 +xj^7A9kA9nRY ҥ; )9G >A j'tߘq Ҽoz껒]SJ(᳚Uc#3c}'O7:iOOC9#8'(NWt^m:1W\^Dw Wp ])H&? OkC ;Ȳ2no |Dn)?3Z!31\ښz4&>=?8& -?r]Mr0#s5RC'3+GZ9sU0}[KwK"ӻ&EtTh^@ x-zL٥3RIfiyU`XE@{A~+;IδFw^ӟ~9Ax etw nFr z,໼ [^z"⍯+>} kw-+cJA A#8Ez 2W>i=00Lv=s/k}P37ϑ//!77Ou2;"+ ne[4Bl 39n1ڄ/a4!2CȪ?\O9Qj:UA=V Vj kCgQ6l`!ԡZAnD1,z_G~Z֕t_$'veڬij56WS+2Fj ⭢ 8"ȟ/ (宿խ e+b!%M0߅K>%1Pِ2ӖVClt0 &~v$;aȏ\+ֵ+ɐz=k&NHA:#ȇnmF'PP߸3L r5G̜cM_>gSd[ w@p7dova|=?%7 FPdf;*cɥ ;%u}{\>, Ib",$H C,͹, ]&PZ {Q\ffrtVa|)# Ȼ#͑ >\ϧQC9kCn }oҺ73ݑ}ϚQ^\7h/{ ,Ls{u&&HܒWnL !/2(Tc"wá|5.)!LqߧK_aGTbM0:)hψy(Ķ[uq[ⵂvf Q_((zGw `YFa2<+Dy}k^~x"O<{6JԁPj4lC:-:#j{ N7Ԓ'i \SXKїx3bgߡ(ZG -SA-ACH* U  VK:n7nt>+ȯ0wF㽺MS?mީ-eJu(uʿ⧸Cyg6iϝAX2`"v/AwXh*x3ws2P3L@oN磬0C9ox?0]L`|MLD?陘c xStpHۚ[ (g__q>bKHEw]@Tpҭ- -|Z\^e9ѢI,>ZP/.g=o+^k A͂!A# W@ f&A3Uivl\doЗ ;oW8$4lĒrf-AyS\4aULf H_P?%Eì@erHP>X9=G + n#CA9;v|]4UȻح>tZsT\ |scCߕ3>0$Rܫ{ګrxdH]O;ҥϹW2 k3A:Lu+vRʁebmi\m53A_)A~ػM]E'GȗÐZW=R+ֹH. ?עU`.|^`i ; 6pE=(a|U^~4@].CnOw1:m?7A aBl-vF1 Kqbr~o_juI-J!uAٙҨH>o =C wBdނr:?;S_2 p^6 !E_f*TJ ڙ 9{dx=̼%d%,*n#Ie~RL"H?]7Cзd{M݃ fRz]̍qlt ULᯃŏ<*LU^G*$uCkzLcοOCDUc7|JK:KYs<7 @BA@GR[liǾ"g9z_3EX𹥋s"rE;O@;`ZaX9E+EJUi:QwTyKW{~gn{x ~E:x1ht Pz[̳27`J/F3xK׭"~w wQu sKWDŽ2!K?L̜K0^YП`@ )(nWo NFwA2O EKBhYV[L:ےn s{cCeqGr4Cx TT]o ʵyp}%Jk eo{f3 {%z3vG/O8FG Y n3S5L"rݨ= o`qg3WM]͔YH_i7| w& lA-G!,D,^r/AXȺpT{ :F sA~?K|71u*ǥu.]Fʓr"R{L|%]AN(?N mygĞ,BRXMQX!|-,u ½SKȄ;*M}{z+t1THxG A/|#r}9/X xE }\_ ]%HGdž Ng8H{Y#v.J7\! :Aybq7! ?]:saZk]dA [0lm *l__?27OYyt=*i>RQ9[Y*t6)EA6䫛hptsȏ KhG+^9:V!Ji1L{]MAD/ q3A,K 8 '-xN󭠜:]P<'(g=U\*VXr+K 4~p"~t\wbH^v jy^; D}cZ2ӗ<^_w46]FgЛq䞜:?C]a wԓ&?,O;'R}]r}î unK5A: ox^o=j'ʶ~] v3߱,4,ҝaRw9I?QUؐU!0_ưە*ޱm(\i#ϯ4ܲrf+B6GY#viB6s 73grl3ȐYzfsrꗕ^05è?ƚ`]̗mFakdqz}ha{!Oȸ-+WȈgȲ/P6lV~g]C`=yC 'nE.r[ :d^'.%4>>.}S]Po,(yC['GmAS0];ē1ok-O;%A]xh˼|'#LQ(A0s% ޾xEVOH$г W-/uj@&.fCY['[ ۢ Oxy@{ ;yA;`S%Hn E IC& !Q-=M<Te5@@\\x>=Cd_Ul 3S{ E{QLPBrs?\u|wSoa^1P_4 Ո 0Mw , ?WB< fOt)9hrL~g8K}@Hͼ!eVЂseH=!k^J`gpXb'V;џ] w$n)=n1GR$؂tsc-So1Rlα^WY/dYM!g +w>%3b;7u~t,gb_*8ZP~54\s#Ny~_ǀVr`K!6Fx^]`NJR Pq/ \ HnuY~X_xk%Ag`G F)c7&}!2bssݖ&'c|2w x1 3V>&WTCPT\'}`}jO(ݟz?Džؑ?ZѴL} vȣJ윷u17 X hP0|\{~7E\yb^iXi1|X~-'3ԧ>0 -u$+_8Z_ gc}W^ ' ot1A]25G)^ҳiIms@{eVCaq]`Tg@T;衐I[ެ&$7U@&͉~,(o-o|(?#?$ Đ2G]v +Mh7)?~ȧ{?o}\ o|;xS>,W0|>&xg8|ba Џ-z㽂'Z<(/siGqrhCr|Cp\ڱ-mvˀe s7 ׌\L2=}uKz}EsE$+6!|2+1oۇzF6k֫u oUwkOկk S%Ax^/;W;?oCA+JHQtT35DG+*U㽖#ש +Ey"w)[ޓ;MJ ݂mWr4wTojEZɚM9sm@B5lnD:!A!l*_e'=9WRJER ^AG>,'_#0Ľ\oAx+<;_㲆Vʶ6qnM L߂#DKZq)r s~x5$Q?錾9J))#n?9mB=Ԯ̆~OVWd]2  rhA] }߶*C==Ed)*&*UO(_rzU(۫yGk{  Ͱc#]5bs@q <"|#((^ b;NhG4PRR{hwjxZ  dNE(ڤUC D*)Q 7mf_rKg> HnIi{f%mƒP/)}QsAq6os /r6yaOk{[M=餟5&ן䋘p5av97?EX vdMzm~W IFJ(NbēMY4#UgTڀ;a , wk߳oԳ2؋xjiڨcOz4}O11% 10 se'<#󀓢HwU,9gP`IbsV * 9``9b:s:T(sܝ5]' w[ oLr ]|*GXũ d?w|SŅz0M"^x ќ0 R9ۄ ]~B7Œ[E uB>7ARЀumW= Bݙ|9j!m|;Vڑ}6)4y\oaUGG~ ;d#g'[ /  D Sk`J:=Cjpl1;({iM+x͘ j U5|<ߐWTG_WA P+w:nC7^$JxOD@Im5wg*ǀ* _kżLRdE[ v +8"q!A~6./=]/faf ˣ}4yGK&ɖg{*1͌ӊ~ff7f=79=3oys)Ŝ;AӬ 7l܈bAsx(*_ Â=#$*@:}&+2X踉fD&KFT|ץCdh6r[jGdxl@~1B[hLNW-Vg '6 >Uo{ w':R/+w2 N9iDF 35>M"wJXԐ,9!?5bj%UY(ִׂʯs.(S-E ̜x 5YDwopLK[rlvªتUv t-2(=X X`) K˜ڂYw\*HIAxrCδ7OYv-ˀ _u} A9=V_ .-|ݘzZ@'Cz<,- 浲 ښg1wjޞ^*|4dzߊ\n趮opG |w u- t>^zC=W/ |(š|[^-P-=;?$}\_psM/|NO:WzKq?MQAKާ 4ALuq.Ֆᝯo}} "0?[d SO>L/n [ﳷxXEm𠻾=_y9h$s Hs)yPЮZ0eOL/vwqRIG]:_\Uv]b*m0= Iί]'JuT[JDb n/ʩh(u~1b OTJ/H3I***^S)bW֕/,%#Pz&|%ORL X&X0t`J *,a. , l(g =^y }m)+O`/8aX+/#89ꊕ]x]x]?N  ʩ|]>(?v\2Wh$CK~%!WgsF]K>X4`3`'hHOv?\BuoD7iO439n =y-=ca?3zd1w=} HO j~-xI^^λp'm%AKx8]Ic*8~BO#:hŚ;# iyO;nL;%Z5"$T1 >Kz H#e&[Sj״x:#MiSxYT7Iص/6-lBAFp o) CgA:&V}Ѽ`+&jz`a0A~^pݍǾI\8L$i' /~ӣ WZ0t9G~:jAp\;_?OA,H޲L-H 9E$6}N #%jǰp8^avZ/?v x D&/{JɯmM }oRt.h/ _,zz57:r x}`kr{5h+) 1LHzٽbWۛ`9UP?'(o~roݱJp>,&Lj5q BY`.n ױsDCIo0KV:?״w{gkw+:7 -r*O#br[@yjdÓxdusXK9r'׻-0񀯆q5k3 ?'8@~!xs>dmVC󍗝@eh/'d3(lCK2K(2Ϥ=Chi?\sT;/7QO6{.;T>|i6&vv4(wK޾x#W;9*ޏQªbKBz6hqÒ^pR@: bD[3&`ǺYX1W:TyDByM0.Xp{EO[ттrέP!xK|k3g=ҳc߳m,ԛ B,hfVX!- "/8rRھm5s@.aqe1 t@R p~d;ֵD`}c*c~&x%S@6ꫜ HYS_X퐏_R;8 {{ EJG?t}\W:$A^.ȸEPm~/;X?b ϯ V'ۂ {#,~~A G ~> +AH.WQї2 cRX=kل\592ZPgBy4ʙYϺfYó G-b į 5'xV{~]YRkIO>Vunx_ܲkU%N/ޏyV}m O~_-g~O/]yȀ7pE N/,T =KX%>M{>߉nW=`>NQN1|,u()x4%|> EyW5]m5PCoM>S+c[Am\A::DnvL*H/ceAzi,(W ׂ|~ * Of {LA鵗x`@~%8'۫s>Uϗ:sbUB.#0ւ n:QW~)*%ȍhIv{NsV_؆|ibnXOǴ€CMIOFTd\W8ŐFׄ/NSΆbMoT-llBjOV|_oe( $xHD||*lEߒ3V i M5 \P-\%nb'\zLҥg~LOH7C BRfF,c۟E^X~CTBЄ%Z_t9)2ut/M~-=:Jn!욦\lmUoc[Fws|af X$b?[G/H D{^*ӰsM{Dk6ȭ&!zVtBgVC"i!Jft~p/KhM6xa/N16 ]UK$8'x7H?47xOWRL/,sԎ'.-aG?pОFxw=["5\Lv mЯn"xT  nP"w n;4yVrXܰ&x]=z%|yD>F״S4_P3M'R.ŗCn}9NǛ[~M9v.]50;0`}9?X=\UbTUmȊ ܓ}6t@[]nO.}wRvG%3g?rdޡFAiIbn q|C/_$¯mM@whAk(&}1n7\ľcsﱥLXfNM*MPUj}GR<ۯ@nG e ނ7㝟*J܀Lk&ͭv: I2\VL\LlsY1RM5&̵[e0YK,zf83A[jg]eI/`]ם'^o~ L0yG]|Sg7Զl@rX0z GO W x-^!vłZ u ]͂~ȅR \ZuZAdߵXpQ^~# ?oAWpvt sv4Csf}R4yPNRU#_`r> adΟmVTz`Mǘ)-(N(|W~^lLOlsA=x`@~A@*j(*^kWKx zpA=q?pn}w/x;ddj7npq[&ǩ{ ڔ~. mj˗ȷe?KK|ܗ"E'9Lٝiy2l]~Mngҟ{@on%gX@ P gkx x 0s Yӣ66Z-l}οh~d&׮[auxxeZ& Q>P?40mĒ" Czr&]E؂,Sl-+Z02ɘx©>ёW8u}ܿ j;]P1Woš& qzyA{kAr_Op|{vl+=:z_ݛ\O,ojHud6FzUr(~&:]PϮ/H6"s_{t6M^d9)y;)9yXm)tEEmeg}JQ<Â:4#TT)f]4ồ:Ŀ]nSw-8n)Bʴ@MFjcVةc \>xY:5l形'‘~/ש[o9ĽaDY/rAxH$*Of c_DE&S`ʭ-  /`{<%F&(njeFЁ}`"Uy/{J#NtL|$x˜⦂ ] ĂMr,zbSeǫqfE+'W ׂr"%y?C+'TȺ4(xA#(F  7$z;kKDDqJrRZ~??85:L"n>W{-y[yϲ×>hKV_Wzъ S/.fSۥ5͎%-ڎ~|{:ϧgw8xߤA WWkv>v[8ZzI cK.xsD0A,8!Iq~eя67 .H{ Q^/JT\2> F`tpġfEr>8Q9uc+oTIwV@ [LANއl,G >w/=L7L,sW4DtѸ~ 9v & A[z5RFEgqbfWVߓYO |6U`0fC &L]z[q,G_n_wQҋ`@v|tvkmJŅ\`gt\ 9Y7ഞ+9 6Qqy&96vO_Iy6Mrlw!E}ph,5 ~Bkq_ RJ><;1 OJ4鋝Y>( 5w>^FbA$_*sc-6Yܭo V-EMS-zm T!$w ߊ=9~5z$:z}wILJ r`kAFK|?Pdl8Π蜘P,2x0?lǹڋQuy;?rZ.F*MHr Gv[dį˹ݸy,UTtx9Wn\,ĠY4s.w-o)fuJϿضdžf>y JTuٍchzɖ Vxm9K\eyc̵fgh;}WseHo6,[|9^pvP98׸  cx8Y '" CMT Y^jFp-K#} t VPGUX-Tkޤ;S'#u\ͬz*͜|OiMcsQ[AL =Y! )j is exقux_D1z2lN}7}$}A86~<]lI]@3/'f1>̏WԟfoƉt$]L܉\OU_[RͽFǟ8=<_j' -IҳWhp~,)T4hiޣwMuC2ߠm~n[L% G ԰xh:>%O<}=g-x,XūpP BpSc?Z_ѐcC3Wگl 91x 00@`wd nH ;? ÊLW^SSaQ5O];کPW_(7 IxSE_ Ɖ RQ@ƀϗoMl1\mSm%H HAyq8A襂=i`y,KcvC[`oF j?+H盈Bw%L{%/EP^7oP}!W T0nCo7s6%,/i&hè TLp,Q~jH)75^B}so8_r}]g3| ~^V|ϥn._3讛nT!\'a&2 ٩ӉӓO9ٱI0,159`NZu'|Jc-ÖģNKo |^͓ѡl6)#EX1KsML&=" ‹㰁ƛ mBfN;7LyOO_L'(t8>'Hs[i$Pۂ^˜qM[^.,ȷ {y)@qpUk;|AD?Fη<G_^2 \1p0|}1oNL}'qIpNb_%|{`uA1\੯S@~yrb=. ':PmعH8L+R=}Leu^,0aGmY~$,}7*V#k_U_Wn˯čpo/WOopww_엂hW,7 'k&p Uw\h)c͒O"e1g!':nW u^шqY巬>sء#U% 5D+0  ^PpYQ pjL4 /j לle= hi^,V`cHܟlGb")B˝):g@aWKD^.dK{t=l`hƮE%@.5 6OýLOد_Q|f;2-v˞IArKzs8>'{fɜm}􎽐50*.''; {LؽB)xMEU6ز|my|?i  ;LhRXrºY Wv*opNEbr^!P\o!rM]t:䒦̓Ex7=?:1u` ~bX&݊Q**1W Ed| U.+Y38}Hw_$-> %Q1lo-FH9镾t' _K&j4F2THIvifE.㝳ǤthrXu1)>1z&3y:TA/8vߏf_(EeOeٗ~Ŷ׻~˛K#AÅ1;d`du+<ImX]o   <e(3Ԏw0@~ow`ibi=~;@=5_@f9KZ0]n"&tųq3C}MiᒰC!)ͼmWf@ѰPy GjKWԛk-&oYPO+OMMA(tnlk- ~m$xi|oQૡg1[2\jGШwԐߧsd5&RR. 3W_:&ãv$At[Ee- Ҫ;|e-T/bB Scz-x}yA=}x+8sCgEGG)vӷg9ƪiu3fԉpCdU]2k槨/r9-&_G_/g~2ː3d{)v(Lʨr}XQFW^bo@.x\*h _ DRgM60v=^+q3o79fTcȽK@9ŃK9tHAЮ8s>}{vY7u4PǍ( t!;-~]L QÂż$f"1q:¾Z==OǑ;E:Eq@46/t({3E(@&F `o#; ōY.'9[.׀Qe'{zNJhSE`͂j ~O J>ZtDiїogTzޑ Ti|A{2dj{hOl+ݐ_d Dm؉м¡_h=@G00w@D"Gk5+l|n"h('y U͚*>MQS3.. nfKw:/mJ'4J^rRgK9cUMOFwj/̰.F7D\g"vSx/ץUt q*HG pBY?VO+^Eϴ 2P'z-X+'Opԏܩ"}7֋Kz vEƶ䓻m0k㸃?ESXx"C,RSh1}<сӪ]*i+7%ĨׁszKx<puHp]lro/O\wgg+͆}VA:}B :8^G ɴy ;~*x]E }T D6)k_gm߳SFHj`ﶣߣi1Hw(?#g=yr,IRg\>n bd4[tu]9! m(# Q]A-G  >-"Y"ћ bYc"L[̥lLDịoGX`|zO+}mߪ)K_~ɑ291~4  hEΣQI.F$_ _N u__w 煂d?H!b-)< HݤgHWA~b{4li/e| G[ 8p-cyRխĀҮʩhEj2gQ49T>u_)wd>[ֲu/P*wl m)h W VgFnmsPC8 OhK;x_)h.z~䖭HAcpyb0򧠧L&v5hvby}YztM}b mXU"9 2 =<~+CSHr.|-1HTk@c^ Jt)E>ޒ=vF H=y;<؞/=az_e">+>x"~*:2*Ee s'*ؑ1: ݇TuA^)~#|߸rҺvS<#o幊ics Leor3O& 9 ..z)*g&=~ )e"w?p[LfuS!x-ceX޿ wrAx~z8˝m͜)&l (WPzXTU=7Io:ۭ8nL:Fr_" ztt@OEP.=/(1.B=_JC!j.&eVA{,rMFjEl.E$ ~X[-(2f"]+p DNuBI9vYk9~?r*r%qS_̅_wCO ʻό1UH!-1\ttQG;5:\+F7 ]/5O~OQ92 r3V&H>\eձMngu, Ab3ſV+޴6&1'yNb;"h9F\9? 5RYgf=Ih`8/ Y)$gT`щ\FޤmaTE5v,mqN$Iž`\XpCvXA>!x傻opI;V[ڲ'~l߹tHqK{L7v_3:D>}zJ|E) P]a(޿wIw- w޸2Sq! (F [l ʛ18 F?ػ9-[%6 K'&%(50%OмQۖim/k>Մ[tL|>/XԩP`QE;/}b咣W4|><)]=thh1`YvoW2mJl]ق,/<ǡߟw~Ez^A Fa٩kvv[ljoM wL:S~L%Mm+gQzIL{x |*smt0;E C \_Sַu9A:$Hw Ʊpa;7>AZHScM  tTn~"Xu`aHaϥgAt^v+= L+y]@P6AtG]Y' @gr`3z7+`ix6Qn=sہq0?%Ӏ|@-[,Ai[͟y;ZE-FX' O _C~ Wߋo@qps > ~χ[lDK x7?s} n\~ʇԉe{4Qw<8rzhg7f#]P3&sFku@D }mG+ʴзS#J{&Qix‡o@H:L8V㕂߽%ГC7bY*RL .M!Z'~,8 ]?b/9]&1#uKxlat7h;eSQ Np Tm P7+ y>B|xÒ>vx2IQ+@ x={ac6'g[m H)y/=c@:`QRa-Ͱp!wF&龔roz?!9H ctTӢ~$x@1:PڲИnNqT&Z>&|R37#dNS0kLTj4Sm"'#߰ C iᮟB?O;OkZi`UgSzpsPfw'݀T9w,sJRh*c`7Cx734ȳgO٫7񻉞u3s<5v>U$ܕ ˌ()WA|mAFxQ ~r >ϱ)BXJB2ٜrjk;(M)*hx-~LӲsBTL:anUCf-Scnuut}`H}R&Ld ,3U12VY )ho>P9GK:: }# ]- 7#}@+h?&ǦN?8NͭknZ 颺_ֻg<ڄ|\[f͗#l8L=]}G05Y꣒RwkRfN} 56ݱpG![c^pu~ޯG@͂+)->Ge>m9tF`n)޸t`[wsd~Ϥgg!#'~x%Rߣ)j]dO;/ "qs:~`"@{A~[O7 ߷'V}>}媿WW.GP7 5@oG{nA:$%6Nt,O2kAB@؛Zen2j~M!{PHGLvݺ\\xA(d `KA}`r s@' Ŧk_A=Z$H_3=\0/~A7s؁n%NI$<m)ʟ]R Q n-l|Qeßg9 5mw\Mז"K5eہZt%cYI:p3y._綝X[a8 {l3&}L)XX?=v&,PM_6 >N7pI&HwI9*y,^Doq-[٤d408&[[}/dbP 쁂ȈS (A4}`PQh涘ض ^< I=` MNFHOZ6@^x^{?MգB̑jq_z<]HI<1 I[ -qVϑ#xGJA|^ x2k vzlJӤm(W<~\T93:󞝉 m.8!q*swDW'xOiee^mi@z4un⼦[Q=KZZiWS݉ ksNDȓ?X+;_[ǚvUOX9_pe (KfRP:EƴzNUe 得,U2d G U/LGSE!4pK|C}]Tu A:N g'+MvoL(V!W# r}n|,3g>!{^߂ ]Dі%/s(G?`K W`'֠s?ԬZtd$P?+w9샲kͣ=i1c"?Ԏ5\{)4Z]8;o|$5ӟy_׫DwL1n '͡(L ow_:[ /hgsT>* 8N }g=U ,);2nɋ gJK lD#"nT@}^#l-BnUT: ;_!pJ ]Sw;+'xf ? W]h5Yoq=ɲ<2M7ϛ"%V3T# 7{N3LߦUMzG%#Cܜ #p[lǾ/i4U]WA Tm=OW Jň ڬ\+!zӌ#YѴ3ZPJ>ChdLwo mPψST{_J7DGXOcGYy}N`|X`b_-xd("PW휠?yD!_ ;{Gːo,څ-Vo@?%0N~HzG[ "<{70Ј㙖%u;z4'SQZ+ qZJm4jg:>uFr ?xa K`TxxPɏ;I.I]ЎL8_-|=g`8_'ÎT?[vnhGij2˿x?:cFZ%MW31$߅өtW\3`"vV/j^!fJh xϔ\,j ;w&Pͫ1_쮬rZRܜFEx :1aZp8@)\=&Pb .w;uz(Gny@\bt96xkZdX'UPOHpc8%%8X d(OG.iZ?m,|?\}l'WLbVGF+0NST$2^unl珖Nupsxc/P|#ppI.I\ಿ'&2mEJ5U׀us>(_莑@^`C@ }4ډew&ZvL]agx9X4|)w`eVci55Ys^mƇ'־.Oկ ϝTuH=KVwxm7΂,8i Gӏ{Ón^Nqk .4WOKs ځ%& [O@]; (GL !~kI_;=הg>~nɔ;֙5-yLqbm1r 6d'Q?TTKs'}0̙. B8]o^t; l|I`Cց-8N  |؏ 8U`=z830i)/0-< KKo+I ;|>ĪpG̝CBV'in-)S;v|Qw{c~}_sNfy*ѻUjt8>w&/BW3x&w"ޭNp'tuS״Rz2k3sNU2 dDq&@IDATOʜ)0.vt4(&P"twd-t;QHc2%aC,7>wQ=K5R.i-'4ݹۂY%40zønX N'dA 8D"H<@!u Hlg{qw?=͎̕%he/9/S dHlKj?w_Rnɽx۹$TC3 bW!.o6&?l# #P:$,`je [i#IAMrO{O=K)B^GO<[c{]{]1`^>r _ ;[!s~ȕAVлf@}e61:A7sșrۆ񗢱`D3K!O|BFM7__ܘrT/UAGѷj:܏k5&]E%jŮqǻߔa$ƹs٫B1&x/Axm(cܿ;)䂷S]e_ & <qS]!PsƋ{~/xZ:(dEL/s wflj85l՝5wş~%)eĤ9^AAHHgb{/nc=2PP9 L(Sѿ76#lj:-P/B8_ %X2Hnwo7[1Ÿ_ |nG e}/8{+yZqU h 7H&CrRL=lv|[y e0]D(:> 깏1l8ng67?yZa@r>r^A?;3.9q_oO9_V8陂g)PM3 dfK7߿Xh A?˿spwotppiЌdv-ՠ!h: TB y?8\ ܷL՛R k83stρ.3;sl@k2PWm? Zח)Noſ 8$3 <1Ky\᫧K ȕ<m0E@z k;G @biGD#-|ڻ,p~EEQmG veנvfy@}4/W^#P?{ \/_7{;X5г \wf($ssy :=x,A;.F?uZY<ׂcM']*~$K[Fw5^X<=ER8yCoKF{W"_&%2?怊oy~.=E.r s?-仈YV(7UYVQGue3MC/ Z ?QNW!jwBoxgZͫ,hʰu[qb#0)= J VctKodgͦvv1'@0{jmN- (cC9E qKW` D _@mB8ɱCYL*c' (F=G)GJ dz០}#/<5d]1P7xg"\Ji_NeSxKp% ENaxUs\=N=پeutsAh ε-830J&(?*hxl"/@BEbL'4=}YzwL zw^1@좗Qy?&8#[t &3hZp{P,0\`|~[ ,nٞZ j&)yq }VlIlD:`su Yh:ߖi=VԎ;~IқuKO61k@8?/s|p,$ gJT > 6>f"؝N(.])0!^.B&rH jGpk mܻ ].X p}^~h-:D`8! y4 ܿd+/b8lB9G園s }|jv[s\wh5M'6n\lL[oPSHj4.jkJn>řbQ|bD\]Ip^vteQ}Wox|:׿ŸHg.NsX"?+kauD3]Lx$x X?V1/qPELRMalhq9 kD~]?4,ϋW}Wy3,] : cW;uBe1yV8 (' \?/pڅ @s(`2^% b cAw9}^i'DCz  0FSG}@'NJK"TQ@qםJV;:"D><% ƕ, icq}pY ? r(>cA;ABNmѿcjI<﮳ԃja#wCoaͣe VT#{Sn| ȇ%\L+R?m  l#a2]\(P}޿ESٖ 9\z,PoHfD?J cSGBlnnyE>p2˥;(>~'ѱZYٴHW[:3浩Ϧ@*,lzs`ɠQoUp,sPU"b<P |7wNl7T۷BU4ta['VȮ@fj,i `!J6;~ u}{s&р :CK]0nsS߼‡ pjVLtax^UR(멢MdL.p]W)B$aϴ`@ B|ULT8땞"">8(vX;feOūΆU|2_Lkm~ ٍ6\)0ww@|2w(-:P7Y$I?k\ (SE<^]LXBY:qn#~->Eϸxq*@lrzBe(%`HB8M'6\`b0_BJnqF>,_ 9syώNW-#cfe!7C#Ѕ|qIhA^%Hq|b1\5^joM% *(ϟ 8ڙ>2cE"5^W8E|4K`8J`xH7&@[~+UͬDܢ:[͙`6>mbU\wFPZ\7;f=Ti۴XCHoW.vg5/-la.Nkd\_.kGE}y@?VV`Կ?rs?rcbY#s;ק([6,! ԧ$ꨒo~^2 +}zS+Y>Ÿih x])2H !6M`XN`Nbxd+>(nʫ>,9ms֞?f@8FW8:P!k'-g,`yZMetY晧qZeA 6~W<XV\pp$dNq^mr@MhC"ۅL F6 ͹Љ9C`0Xt4|->%( ޖh/"Qf\AǦsA(\.\XXFR_g<0vxЅY;0F_ Esh$-Xj`]<qy5SoW^^dU|#; 4,쪮KMDbf|C@p/~|. !ʝ>m/L@{[~-w Qcsx)Qe2&{,Y>;8zn8̧8j?jf 6\f&fz&,W H~W=9zweLO՚2md.D,brh ԭlUDEJ5Aj[N ,|"?-OG &أCO;*ot;՝LrG]Z]`#Mh޶aKP- UYАq7W۫$c_I?9fuxyF$4@.t T Hgp){T!Z ?9 Q>C|;#BS(=;Ar?)XG9xIUQYޚ ЫeqMH' ZK2+yx0b6kBb7S<{xRSʿLHG|o_ew|ޏ0cC& WvLx7{SOixoR`a@I`.P UrQ*v~] }%;|[Q_ lD. 9q&(`0_@O}@3xK.P 5lH}7`{9P@9A:O}ۣzsVoYV&V SH)${)48;V=W5'@gL}$&|oZc.I289>OY.7ϖP-2eo𤰮~sn?)_Y@"ǟ_F9o  }$8> L7x@} $YYi8@+o~@kŸN\I ')[ GNN=I-#Z+}cus>E@@ae >~øWI6>~J~\ OwHX/o;O;$ &'h=U/Џ{)<Ԁۅ#$<ȴ ^{Dciπ3L-c> +Vn3]ӳ|6Z@ !OzxغF.'Ƶ |hчDz;.1y4vzԎqy`ޔ:gֆP6}s` ecKГp-?Ki,ݰzIgKet{F~-a㙺G znqhyh 5;o絤fYЊfsǚm>L /1Y+veI3wWl<⤅CYqﶴڜ>iF.9Ų. -;cMAyWΣ8([|Ohb.8:!ϧ!,y5[*S@)>~^`@҃h>|y ;(usvHB@Q;bKH?hbI#I)dF2k"ǹn4gAsQRaJV$:vJqj]* U)1 hd%5!Fe0; IP/d< L#x: F 47B&BՏ\3v'3ѯOu?Ǽ77I8gƷLtZ:f7r>h&b~: ?_:t.8…9ƒs\C.^3ߏpIPA 1ZonYP!O`}@єxwb=X%ڮre#8`ك폶 A[. g-`7 5eϸlOo @Zhhlo [!Dh4tq/N=0?8nKGJ~I/dh\M\)wp[+yםI>%~ߦ?s>|dP/` 2^XX_5𷨁,b0\%oU4[{Q@yAuB r>7N|\/>QJܚ{\!tEPݵʯ?2=(rTʯ>}ȣlŧ( e ڹ`vl=w{@?LVq*Er+;:E2{Σ^]-cL+r/q~Hb| = SFBےRd847;Q8ɯ8Tn!IT- UBX!\- 5#fb wl{%ti 9O@sF 西ЛǙ>Tp/Pcv8Z]R?B)5ϰ|ҍ%|p9_$+FҮXC\Oܚd;;V% >CڧMyAf d3?yg/*>~>k@|IHCQk# pq['ЯW`9@>>K;(_F[X$i쾣'C=O T@~@: s%6_q@A2KC ܼ<T;V@~-%Izȴ}B=!5|X؜ߟݞq4sG//+663}jcg{#{o'Ov-f'bp 5e#V3Ě@JOM ,|W)VcmOk^C\S4NGNq:y~Wh q;{Bp P@̉{xp@AQ8BjCrV_3̬v8r?>Ƹjne d) SuZ8޿-HrڨwբJL7 gS0s꥚@fCl4WB݆.fLW c`d_K}azlUs`O]]4JTD |z4袣")>!Dl=Gp캃\}@|DV T_)yd*֪ǟk84k!?d(Vgwς刉]Ga 3_E"ya/3c-Bnj{ˎgqC_Z{O[r?dI:,L'wV.vXM~a{Yzpלּv}VtZ@;\aeE'_Ϭ~51p:x^G6#6z5e߃떘d VIE>זsfAjg⛋B wA~ ͥvniCg_ 'Z !̬KL^i44I}d@ D@|W#SȈLY$&HTK]}̙M%[\v溯P%BA<2.S|C5F=y19q@}jcW!̂~v,t!OVHM,u1'+w[D꽔x;{=A HyB(~4kG(Yp|UaY! }$@ 3:4(D(MJ`8.@[ CL#!޻;9~:*Kfv Kh tC/K"ZAPr> 3D"_ ]<#}߸5 @Xpb5.+ ( ZPE l5PZ,]w~浫z/[T?yz T'9#cPX5^ xIƧ7u_09ieniY+c ǻ&0"0]MIЮm(OA*=^>y z Mrq|y@ut3݂oqV/C"^-d.,e9a"iv2>.qfzS|&/wϪC饴GCG.12g|~VA?^I}59ߠ`ܢ )G+kf*A xo~;I~ (DYsUCȣ:\L;:֛3q>2q7U7-,dJ/6XN|ap{|"PSBd`xDJ0(dpⱬw_OSfK׭/3-"#x~~vkn%ָ23 d jƟ7-X M0vW^rLར2 *_;d>#=iiBOuHȉEB_,u藛Gevf>=$dBGRUw0=E9ZB~ MeW/1^h+2e0/W j-́ND {2WК?9cٛ蟫/s^n*eU5 ˃݂rdk%A Β>p?ݛ ĞEセjb+9y'|4;m#箽n<7IzϜs]2zG?c6 crV_j!u0^$*(dsoБ4"`K_Vd=H??l%Hz&s}ߌ=?匹0C:¡ 6:,Q#vȵNdlBK LL,f=C6ζ@Jq?[g X Z 4`qh2 ߛk .(]_C8Luo"^RK3x.Z-&ιrW1T !P`Qdtƶ`%g@aa~3ZzvğiuU5Mv-y &󱙥Ў PT<\[pb ,e "T߫twd 2 az{?^`Wqf a  pڤzkOޏViR)9K.׉OYg2Q7 NU!oskE/Mf'w>ĴQ +J_)QEx*~M=8?tu3]CÕ^8h .Ix]}pnAxGrٝ G@aP҂ (Gw{?]=̎M] ~Y32C!#;BE?+vi$_عlp*?A;YܳP:Id\j'Z ꡑ81]=?$0^ W lnfYn #qYX/<"`p>O`د%оz 2IWo N=h8W^%K/xXDC5*пg@Ğ!)ӭ>S5x|jMĞ  +dɁ.evi)#O1x%<!ousR ~ Z(Z@ֆ|r&6 ~s}W@[*7Qlg wfRwO'6~(п8](OQpgZ lV@5Te#?]gi!\VC(=p22?hY9,5~)h^AIyP|yȤA96+7.0~tM\O_7g`$ lz ZV9 P's{0R ~Y{tc}@>R!wo(?MG)4  Zyzqɖ &^߄ . J:ۅ?xooC8Q<8E޾oMlvU̡}숁ܙ+8PXFUğٹ1b],i-o{:.I<ͼiޖdeE}*^Rgx&PL{mfܙ12wo~Mٓ*?,A_^cxgVw]kɷKr*-^<0GsUچu4XW'k&;:oj9[tmHMJ:˄8/#Ct-C-ȱ[TpB CSK}vјv0BǘeRMݳ]&ި,v+>EakN ]'F˭ l̍ p*.d 3k$ٺ20]9&"@Ot]1ԂzoƥDM)9Nқ)5M@/0)EjMDMwNyGrs*҆_v*ov/0fL@*rT%ϟ %%  6׸ԛ{{xzmJr3 f#Ug|0V;u7<)@\d/~&"CkZ2`@ *ϽHD+% =!I [|ip3\O U1-AXX["ţ9XryacCd,ۊ*j`c[@.2()0 ^@XD@%oG ݝ+op@|Jw2!YC΃(h}<|(Up^; L?^ C, 5 RX]H)kdV4~bKﶎf.ߝ NSv ]MJ͵Ԏ+:? y=`7Z'HCv zBas]٩/e-GT_‰UP&N\zi)@G N~`>ю6x{u;X;@x^ae$0J\( UakH펧qٌ6[ၴ#_s$N]7"85}M?}oAJ㳿\@~/ I~(kGF#Lus@{n,J \?)!o*[)=w;Nn =Aw`/ As_ `Ƞ1/e\B;Sd8 >8YP?[Bd#97[_MW&ot~?͹-v.rZS*>w::im&po,<{C$9W+4"3LYI=ٗ$kZdsΜ9Bg n&Cj@2Rn.+R 8[N0H{) o71ХkoYw$vuEcVhil.{cBo3o g - ^7TNKg{M|{UuɉK5f$$t4˫_h@9u e ӻԿpb+$,8JX )~z=>1`@}qlnPA1~3:SL-LCs@f֚.koov4@_PgZAD8NHF0Gшc{W=TK)ߎN`X{-N$_P  PcE @ϾHr,@ zaw~6Z ̣s`;U?_Э{}Ux{]#_׍#|A,R?Aeoy}I dĒ䄰ISxӓ*plh[ξܔ|;)/̂OTK-)g'rC8>hѸlOC(=}wpf/WC[PR|QpB΂HH%U05i;.P ( mM(]*S򏝯n$3V`qBh v}_ {DM@|#wg҉;:~Pl+=V )t!!q}A>{ )z?,MK{(8r+z99`3aJVOe$HJ??տ9ل,6 o<|R[%_ k~"[u6 Y; z b|S񒰙+m`S3y@n@Nv\zLe-\XRoD{o ,-Zd Z>!U ޿@?L`n/p}@N ?r7ڋ @j:AlA ІxY$ǣK2BVz;qN8%M{h v#Qn&@h~rZrh~Aԓ5?JyH:xߟ՟!?y?8Jŷ|%r3d#Zy@v!6 2(dM3i*P o(1 o6U{C[si9|]X;p_Cu|kZ)2a?O#ޘ= i{1mZnw>.\ඊK xK a'_,;"WJEQ 9'4E@P,ӵ8ڥ]Ѳȋl8y:twnJD?7yw1pz+_y񹗳ϰu`&߫ wK'–+~>_ =Ρgi'5lRLCM-ay^snT Y~JlSj][Sd+[ҙf2Ҳzآn~NX@9XP"LyX"ds4:. ۄ.1o~Oq>F: $*J_@UQ<2A]8= C\1ݝÜ6̉(@ws4*>ᵤ;߆`& BI&x !35]ڬll>ۓxRw7ʒL"C!Xr/$HS\#AlL h^0A}1v@߄IݜcC 6Y, 0̮q_NPNw s}wn|S85eqp 1 J< }E@rg t<kUᅴP*};tJԟut@'Kr/d"荴ǤA Ymn'w)p[ۋ5Q325 -Sɇ }"gh$+ogOYtY*~,\iUrs#"*!SVSQ[Y ba#.Pa!:UkG\_#̸8n yq?g߇CwKp"?sb]_UIhg ~Y!d5(,Ż@G4o[ nʕt=񨟕DB%C40"cn F J2w,?~4y9Dzb]VhwrXC'kpiό#߅Felc1#wgʓUlXĤ°:LxÐQH)WR,$CHo KGLJ@ȕ" Tf*D@mui @@^: eHsS?K.%vV$0 FD1 x{ x(nju>9T@=\4.|?O>NV@7;F ݱjx HO\~#?uӗ#(&rtY0g5c9 gˀ85.H6 u;ccyD~G 眀!?6 `;-Gd x5q̢q1lߞߔ.TGr_'m+0o'^p9G~ 4RocklBP*ŭO4=t+%"[#So(H"7靺c,(?ҩ *-؅-؝-"-]ͭsvWW9{3=4E'DuA?bMgTSnh_FIi7ڡ?{/1_݈z`l3/:g_fwVxDAoT\}>?ߎKvj ׭vA:Kɶb)eǀJ՛Jw2&~r㹝|?Ob~4':3ucN yɀ_盹h㘖CMF\YלY* N3)ӧWyΪ= !}پ[ױ㚪Yo&ъ+=+/\%xO gh&&wyl F*-(WQ_V`O/wJSJ^u;z_6R>uhI ܕow-}r[ B u_A|/xoWQD*2ʗ|x` y tG=k2s^|ӯegfUbh4AGFT6,n<M>ZGopks=H!6JrVj> 9j ;0]q:f*hVz|ʅ 1n9Y>J1¢g7!7WܸpO ng :=Uv\&R,$,nS_ϫ^JW^bZթ\ed"޻"*įOJx] ʡ o$#Ey}bK 'V{P_p+)@sb ټ(a[ΐyOM@Ty|t*_*[+3 [5xnb}>/NAη:I'fnmeSN(|_rOl 4K!°2EE_ؼKꅂěیH)3s(fà{}^ن(+j&_T#S}~]pU~il3]Ǣ*%*~o:7t=(@T!CG*ir[|̰CYz^Nrs<Z%Ų4z(}mó~^IRT:|"bS% ]&\[Y&'r+bhY.H^.H :cjN@]>_!:F~]pv=mlk͔ܒ+Y>~ |-UQḩyqG2;.]hҳҗ+w#U,ϨVS9(Cg:38-Qn۵Sf933bc/Oē_)c--L~_7AAPr?z,8L/LJuې*_up#_㷂/MT9;imfSjEyxTAiV7}B]6%܄BPc⃉}{WG>ق/,dk%(?ߩl'</|DŁO&d=A lU h3udY/<&\5gR!71om٤{p8JCS]FӯZXu;qz"/~m>0.~90e_JAk@=X܁_ -nE_^jD*_U՝}~CLAsA/|L/Q}cSWP fh'sCixz&&u{z\eqnBD0@HnG/N2|;:,ʅ(h$/dh_<"UVْdc;$7_!+lwcً:Aig'h|G?7 DČ?z/7~"އvޙc͎fAH;Ty7 d7GzU_G^p| ;}rhlETދ!\gɗp;Io_y<+xQBFf1H뺯jQ:$,=UnGuG]Jӿ"Uyu/R^;^9)dy4z- [ &)vTyMO{gNS~UW<=9 Q sJQ0̰vAE& 3,Q*Z~m;\haIz'wAy1%Y?xrwLx9}];(0@g=ڇPK7bomT>TJC}?<+xzAr1tV+M@?  V0Yl9q;X+:Cl6/<{Qi8ԗ,2_W|_w}lˣkćd)?m;&Q]t.ү~"*h]#g e#QMrfU b4,hpg&E{A{gf3fƂb}>^^A}/;Rᙟ2QhՑ63R%ԛL:,R福e^s 4հ*!'"+ )r4pPB_ϏgDoo*xxӨueYێ mpl (C< vg ԁYc(f n9+]OpE-'6? @maoNA;x@g1wM@7&I5,{ٴx!칕{m>_UiBG!tn=1:ы:wě{{AwG#3? =)Hf5 oY3ر||Ýd"Ns >&W L"R*P.p(RG ug(XX:Q~vD7Xmx\`'N{ UO5{fN|܃H{a?Vٜ9{}_kU:ϡM)G]גǚw&=eW#=όDNw[k&gҹW?`` ?f|?L ~IZYՉ*ޝWdm3x A}:-qƇV6$=64U/{Rc)Iw)GUH/Dq.<3@ Zpo]1Aԋ233[V\ua] w~r KdNCVWH9\xVlA~}D-COm-84ǹuV]#'[FTZ"5 ܄y>f2G5$5AMܡF?'abh>_)|&<_U՜NSuӜܭ];ثz~#(?g#+{8rvW޲\'k`ry翔MWq8nk[7uY9yNh{B7Y|?՜?WT\_ܺYS0sϹEzH=Nʅ~5U#?(?Ӽ`G:^\@)Db}YdgG /( g$ӪVj33zFZc ~- i$~%*U=U@D2X3c ]:\q&}hVQ!@vbCW^VLQ,F aSds~"<Y̖]3!|xCJ=8 xU_ ' AN_<sJPW)2n :縣pD2_7/ g5SffRuR3H tf4`6O[2E3?I[ڡ>Xhw.gn|Uyz 왙~0)|}W SоxW *{~=OpN/rMA|%+roKcBY҈'s:QxIH ݚpdGG!g|B>eo@nn{#ىJ>"`U ea^>f?(9 u ]+hȽ#׷Wɀʙë#cwl UFGAqCо\S0!A9{ UTC; C 7-*U M|^ w(A=uO~5v؛ #u6M\QWaG ;ly^=ݞp7vDNޟٻ\ULl G 9K G p}߅LΔ4G ~o* YW}b4}2?BW;ᑛ9N~C'r+g\}70o{TtjS8ܩ.Sv@KSI%~{Y;:fڜ)_3,L2_-ag[3Yh+S1GGM ׍nvфg߅:}2Pk<D08Gp]*ؒrs Duc͖oOwVH*?~JksYuAx&r6HKO:E4=?wᩞ ^b4@_@m۳\3y`%x|$~ w;\s+mgw}@E*[.)yJCaHwv8z ðz-rrdWI~wA} |d2`C( QpjIܞ t1Az/Q;\̓]Q߷}tqgk{31PCfnܪê1=?`lm{ Xs7(;"H7Wp}1]KpZ;֥ڂrHFg!όki;ZcQ V7t JO2G9ϲeA|!MGK. K{p<<,= Á韹^͜>WU)Q;{[`H&ܧRW>6yL]/l)Xr;1Ix.8oKWDs#ώ8s\E?_mh۹Go{uYW~ ןi2/:/?z5rÎ##k(튼_G:9AJv6#jh{$ Tf%g0aEu=2T+A5.S rΡde\_pyv u0hpRguoK^9^sg]:A:ͮ| Uk_^)? x$#W,_ʬL tl.]SwKuJQȩ>: B/o0v/:k?E,HVMCV:.QQ![Mζ_rgQL2SpX^KA{5:Ejl: FG~猣/>{oV2]#\%d~=Rl| DGA7SLv/uO!ZtM >.)s|BєEzA| ȏYhTfu⫳4Ŷ;JDGR%sgA1NpzM-ۖ b~P󸠼&w~C {!?d- dA8>wdE BzRn @@ޜ; UOYiHyWwd X~5;DZCFm =Y+Ѫr:i,k@mUuK#gcbۋf}ɎF/8LH/Hv w̿n"`"#`DIg k_,Ы6P_7tö[Vv #0 !㧪qXA|67kt 7H5zp~j4z$KT҄8M`o!i,R392ggpUUQbĩ\(rjk!~o#TճU@eަ_m\Lu/TtSӪLqү7ZkB{5u]pݑO=~!Sn?g-,;^O\<&BoD9R;11 6f]sG\Y)D;=4GKyL7Apo7@fL䦏YTBgO{mw'fms;/{%oS>&[7= ޺ ۡƓxz2ozWo#\~(47h-EkA/9:}쁬p" }JÉ2ڒ?Ʀ.Q~:hzohgӤvdL9i e/m^<%Mm5|?uA?G*J}? (xCS*~ji3?=+n){$؃݄+ocU돤|;؛z;E^RaXi*?wz?R2ǚk?.S 3Sw&$('[ d#[,:o 5Q4h%)e:T}a42L=xnw3HIHQP:I> wWctL2%5q{[}*=A@ ⦽ߕu|`Ai.h8Q;[ #/ 6>YP,DyXJ^p=^p"A2X ߷$d[VO-ƀY&v *`A50Ob?+NG !}nWA>K7/ ɂ~/A?W 틥O>;f[dp?8 VkP>v.ꩁE{Diu!ӾW@J'Hs[rqqLDn9:V_QX755<3RfX;K ^I N}z ^>3Zo( w#VЏ {/M<"XM0л`ǛւqsxW|7:$ 󐅦fk)zxf$4N p(|2άYZ7-2F_Mt@?}vio !3LX,~b];a/;}%i!x#鹕@vtL){A@~#z`on+EAzRo|s ?ZnjV> )x LJ'  #Py- ODS{ ^^_6FgV}?b{m"כvtdG&G sA`?z9,RskHǜI_si*{766}ָ3Kyxg4-C~3Y}pV% & KoJ:Q+ 0[?vrշC1/y^\)s-~=QuSAF::v G~KiEG zR,@k|z)7FV}|;4*xM OX*|tcFɡO/:twA~]_ʋDn]Zy*wcʜT/?!RJR#@oG v?kICSG~4Z kpw>e|r6zǂz>{vZNaU->~0ʁѩ{&#{Xr;v287rD?ؘEF]U.ά?ZP7 )B3ϸ3|;ͷCӓx9[,?iE1y ^$htϵ/?ԡh@fMa„k>\kw"q؋Ksu7q8\BWJ?ӂzzA|$# jH3ëR;#aϞm~~lBϬڡs~Zt*M˝N6% s18;+6{ |rr—۩E)NhӜm#'FglKU׋gmp,E[4EyCЎ4,;ur2W`Hy`pA? vzGrGꙥ{AN6K"{mxhd]k29kkMKSϾfP<N ""ǫW5CV_- .u⎢~JFm5˝ zpypr ÔR{=s;C]OJ?#IE'ʠDŊXN MrET|a3siGOEdTwb3 S*##55ݯ :V3T w5C dsy=ڭπ`U\лIUhY:˂״@ lX+Ա::9wi7LK,*Փ`^\iowgqp>ձFEw7lĎl~;Q!o+dcF^jdR~4] 5?Qڬ`5G$gF`Zbz8xIEGp {jlkL`O%A`s~DeURgc z+#pv,_;" Cx).Ef@"Y`|Ww :xCRZipfJ06p;xFǎ_ġ8*xt=#E0 `Xu.G_=x}eBziTN?߁lxfVV~;HIvA'\7( QbUAG坂SSy2 7#MHQZ&h:~9t߰?3|GH Gє' -hX+HSwAH K7pL8e~n0Rtࠐ.+xEkN<Ԥz`xp/r+h{ȷZ)jR0YB 1C:n]Cgϰwhg@؏eJ*Wr>[o!7Oޮ;ho%+*j lA>BϷAE_ACw w` \'<Δy;eW5x8FC=1a}޶goy̷)cDLzud{n)t(~lְ2MM^#X ӈ-h1Y7fl)CʧA*b3\1s2 $ۍsx3Ao#nAaA~Z\O 9XwW~>`; $᣶A#0w g{$HoVA+A1 ~P@IDATܿ&.M +t #A}0@^$V20 9O,-I3=|/Enh7kyOg _RAVL asoutwy!mX&~+}Gi1Yh9ǹ?mg[~ؾYNp'A@ Fd'wld)=ѯ=M\®Cx<_ 1]Up(SH 8MqW_I2JKxKȡ=QOZq6"/^کL;"q*W$Ic1z&,/p͇~ݿm ݠ+?gzXێQ ټ^Rg9h#m@9ݬ[ڥ '- n"ʹ͗|+Sā|!|!z{U6iCy.߯L| ^pY POyyz;B\[h |=[zUk*)$5a ^z#KetH;*hg@i-Pr 2X]ϓ`;4p'ڙHei$5+KLidT.*@}2sm%Lx.dR/!IÑ *EY5q*|_ZXR =*85+EfεKى F&gجz[ƀ"xT]_yQ ҈R ,Nk8g$=7] V? φO]Q53|:a&xgFE֜Dv~=-hQHATƪʐB5T[(Wa$f! y9-X]7:TLf`O &[:33xG,Y7LB0SVޙ+S3vf$N BJ\Yi0Nn;cA;@!(Ʊ{C㨫  ⧖uYy3Zpz7?!=nz%8S钁[z{cl~U$ iG)&6ىqMDfN2bS!Cii ^/ϧ_}W$]X*%msvk d,g `^W wԻu`5~Cן >蟧 SP^AptMD`0A~i-p At~rq}{'[O,jĀOV:lAjݹ l&H'-鰉 ]-7eX2ޯ'?W34IeMCijR9P >[ t_|*M,c6iJ+6CϠ`܏W>3,x85O? }|lzlmoq*L+슦M-z+PACsdCi+}7v =/(<ױ"X'׏ w{Aet 7fW\!w6د`@yORw ymTL^[s1;5 uLW9R|͒ kk@0>1Z=CyV߻Fu!0'3w(#J &Kz_\7%f-Cβ"7q.~uT,W}UJ&n󦹝;m_ώF6FYY(ӅC=dw[Od9=?<r.OT71ϘFcU>\:0@eS]ו_y? m($.^l#㽢׳ Rd[Ѿ/kRn=dU@_ICA@>.(:P vspc3I,`:lP PC> /~[Ɏ\du.? }\N|[ۢyXwO=DDs&JP/}ai *}G:!_餋Ԅ;O2n47gys-\dKbXzyx,J}S^b Kzd0~~e@>.Uӑr>R%#_-ɂ4u\nێLNU˼_qfeSA;psAxGP6\ʉ*}3Qa…ؐeSCC5i G9 Rgx˾[#E,Ƣ0~Fc:f zŬC$:;?"R>ky.@\P-9B lYyl)jt2{wf7܇%J DK/ *ع'F?|qH!KJ>W݆k BB"sI*̸y^S >2} ϫr5!߮g]V[53zn/bl![Ny3^0 ZsȃH?pǼ b lm3!St[ԩ旤]E(--r`;}ΠW.DeRzZʹFB*D.߹Ddo!5OYTB57?HSLCජ5Gpݾre»Ҫ(_ ȜCXN_hNlhR<G[GP. ~}UA:'ea%*(Gu|WOˤA*j{݆ C*GSq#=E [ ^o/\'yTN5os>iF !5_6BR|^?VVm`y?{slwIcoA_N+Bz+c s ; :x_ r^{7ALP?'P@{ KeAvS& )e+7_C`c)a;Aoྫo" z}큤 |``M#X,8@M.e'/?]~30t &HG; ;H.3g ʋAlL`y׽_~k hn0RAd.1}!Pj=5ǟCR[Z-B#Y B+f._j.SË= "7 OEaJo.r`ʃ֎ ǽ_q'Gf܊nmI~|DP%}m&  O@{Yp!x#Y?|X5=J F< ~o"rM q|qjnԝ[';7=T5.;(*҂3{ ? emcA6(7$׃g ?s,Ho.G{|ڌ&oN>;V{SAa€W !2b\Pt?-Җ6OD?ߊ:g(Gck{z{ʒZ!RMNN+8g#O6ov䓷_ٽBn]1MA>~KN 鮂~ pi%#I/։@l>zQzzȷR[Po&:Ž6Qy1 }~ܟsUokB;ry _vR\;~F 2-Ccs~Ak݄/NU z"KX1`-Pk7a](z 8sA [3c&NsNsZҩD#ls])֗p!!9|fK˔35z[2O 5dhv|p(Mp|ç#s 5'G={n{L{76c3Ӧe_<Al^"?khuSn1xupj`4W)Ce$HgZM |R|ip)LÂ=l6F=LnTK|pX${+ ELܣUxm< Mb|'xNoL$uxAMoE-(-}۟t2t5#wT?_ǂǐѰߑ}ʹ# 80Q|{-dɟdGn`&IOـi8Kr_o=zhDGٷՔf&6\eՃA>c[=}E7]o%"Ga/CYGE< ,tX@jW5 KE2F{|&^A{eO?VMޯ3lQ6aMVP]1 H V s]Gt`pFS6a)mȊľ2犘%8g[3j2| 8UDt0_f]+͢s λhI O,ӼcwVg9lwd͸ebuvA;w{$2(Ddw_rYאᏩOȠ6y( XzZIڍ@MQK޴1Rojhz/,4 WOmpgHW'R'o /} mr{ õ 1Sr&˛o$yI<Ɲs ֓w*RM5d оAS30MV6x`Qq_C*:֌Ⱦ}2C;…iXQ* B.:m \Ğ"]*8Sm[ILݸ~뒶3PĚL\Q#Ymu/y6b@>͐t4;)DwBwCy:sqE("b<*d\lA$oûI{@'= >6w j f5Z罰OAf~?´(j ViX"*ʠ']]ۛ܌5L7n y7{ôHJf0`<ȎzA/^d 5꺯KЎxX,5` W HqقpA=@.o\$'@.ػ[ <;í\=. "el7SP}%/{i_8u1`cr %GT~.' W|D灂^dHDpC^ މ'N){_M:bMRؤz^05`5eh_p#BG`i`/ݟf~龜pL$+Cʓ֩uf"m?Ko_ ܈͂JDwof7xb\jksEcɷn /ד ‘l5_6BP"(F&9/|9wAw@'}VnVp(~ق q })eөsDmnkrN9G9aV!}̈:/ecxglMٝR?fZm]} l؈^iOqߟdy_ LK7aJs@%ҳl+p(x xoqcs$;I/pLV OgF{@1l  !tO0b`81 7>P/o U {&pw5]/ ~ ֩po+b} ?*xdFRCGEDKgd?s5N^e zE0a'Kf`ޚ cTA'6etn0%=-# Ӛ#eT.kOH#JGhj?x,d|qF1~9ne0G*YЃ6DL'; mդy@a WޮZ$\oߗ9BPRoCnO#\VSzI[܆$3; ?4YwL'$=>E= ~͡#2v僞S瞻oC|U! ;VG#g6@kkZ ;WS7ވp=!nC:RW;RQuG3f|X> (',\V%{|s&GP ѱV]Wf}L`71cGս3%{!Iӌd?_1B;DM-q'A$?4Uz4gţjmtGl<&y)=VW1_SLWyR;m#vfp{v?%+%}|9W?hlcoy!E}\JOGyoGqW7{]9rvLi?Rm (S hw3 B9Akor=z)c|_g+:Jsn@>{|$G jp<1m/ɂwUt@$3'ﭡݹ%JAP;84 ;J2IB $R0hc$mJs2@ EGW,jA#ՑY{Jw13rS;24\߮J2ʵEQ(8(w֝7h\wXθ]YOrg)^D15p n;s|9M?OiWw *w59"#+r ,kp`ʟ‡{#|Cg~~+Ubտ?;Xo$Kr*x? BlAZmI+٪@i}KhD֤A Uq7+`!K<DŽoߪ~(,9n?.}L+`g*t?Zi*"= 3:Gz]xhЎh63Js7zJOS0n M"sN"h'ڛqg1>+{1.ZkEw3<׋Ou5(=g{mWS*x+~*T5'g4L<X:IRB' T[ V iv jq39Ʈ}jf3&BU4_3ýgYAg'b :d׭ s;^컍=oו[ o&*rG%WA,:1ICnq(?R>$0դ 6qZʮ6``pL5gKb'H ۵}kA:JcAO&X_A{~k k!M}57z+zuMvߌ_3^Κ4?ٰ4!t [&<68 o[_ZG20~[|sWbᨇ+ӣ7A|PW|KP/_ A;  ~kh>{ R +[&pX sl`V3ɷ'[.(&?ޯ)G|7Qr)F=ٗmt+:/> w?ޔ6xݖAQ>Ҵ\j';IݙcpcH'2vh3`p6^>L }gEWrݶC];|Rnr.Z`4+ =5?F`ׂvAC-9щ|$CQ,E?K#h t|-D Gryﵟ@%VRAgtȔ@Țt~b}MЄ o\ dI [[{rxT8R&7@e5%xR.Wh7ɄĒ|kfGrx/fIf?=!Vz82Ju.hO[)8 {RaD#4T?0yJ兽ޡJvz=>~!^|bD~^ Q0-(sj#W8 ?~@Od,#3'ˮw@a)W}zVl& 9FOU4ә ꨌF^AO!oHcEZF-#qXkp {q0m}蟝<1݇OiM">,Zʳ74T>YPO~"(&V+F (~Є}j/T5Y~߈޳znb@MC͠~kǖP{Ւ)N2zΉ>e'D˧m 5`){ܓL| &"GV9J,z@V=dj"^KHNdW؁9r{Y{WSԚl)h# l [xrDه66Aװ౒GKNS:RAΦ]r9r2r-mt۝^u ;X:w "=?aQѤw (;swgX'^B"%}ap;dS QW ½&v䯖[О&H޵7^+]~tHmI[{.—7EPu]_oC-3CG;D;vD [=ٲvMjwZwFТx?EY9a]K9 +a-7dD˵;JiGkOv;iCļƤOWꨞ# z|)h'(JR$GSRO O3(H(}^\9TURSpTVG69jpd %tUɗj 7 1&Nk@\?>2FȜ_y{fȧ>!:3jjsǺu9 eI\JH1^k,d&!TR"Pyսu{{}y/ˋ}^k5jZjCC 7mL|P))s𠀼f) T-zڃnLeL*`r XYS.ǾQY.'pwz)|_g){7rpȸޟM#:Y 0dPyӉ52n0H#{ c+آ ht,bNm!z d} +'q@U5f,Ι,/5sƖ Iϯ9yTTuwVWp*X>w!Я>MT5j|oM i d &l?vM(4P#?ɵ51ѯ.ɏ#}z0*5-C+#Qb?MW?߻Zu!(+/5Dt0[ځ_H7~{}&yEPm`ƶp@3z'[`͍E N/ siF {๋Zo O%gFW8cD[ >DA pwV _\0Y m'! ꅵ~5"YliW/3-K}F?zyi;&D"ފM},SZ=g}cտ3֒R*'kԳ'֕A4pM>CzY z߁Tf\"5VA1񬨚S/#EJ]hMYaO!othWWiFE%c!Hi2AԆl&L~3W ŷ >UP V-Q}GQgy)<&cc"_tG,Tz5H-v@Uk-o_J[O39r/Zz9S[?-xZ; , )O !A90I`Y9{ޘ megT|d`4ôEHҿj;㤩y///_G/{?rhzy\,ق /.> ܺRI^;C5>W3P}`!mNp|^KY-?ÿѣH,-v1S2/]hkĖDiiyޏ^cޥъz}X*9JMm F_mƶn6Y@W8gרڋQ9L8>v ^`rfhuMm0 zA(`஭ndz(ҡcLPya2IjT.r5Dg /_=r~kKr]6|p. Z"-)@}8c<ɿq0AINPCs%XWwhB ۬3YjW:ODP`Ό1C"F Aצв߳AS/ \+HGZ3f"ᗭڶ_tM);(ȭPį|u ?;erݒ"Yϛ#Y%#Z T"9ђitPd^Xq:RH*gN%4X&yuON"pZs}*Ll=:#0 '}H );\ٙgyx8)0FgKu ;jd~`=őU^D!\֛UvS1ݦy{3&N)yg"`SPYNr<6X0 }@ %wɽpZ#ツGɅZX%oo|_KH/؉AE] {,2}>OZXx %GB{S0D89lR_YL 0+_D6aG h̤0>LfRE>6(:-e#tROPg^o?{X/p}=LƑGלI6zdtxn̥~O>]v;* wKS/9g&(KK~xؠgsݼB{JiYL s//B&$N|lxtY`#Og&9@^*u܅~A=q x`٭Mμ#؉/{\I?_`É|w+;$y5.(jr?r]@Z..COjFg9ȉ@}HGN:6!m-G`ys[Lh{r_w g ^kh({M`_L95e&؇?Eő  زL(gR آR8` | 9+ڤs{x}}*;zǍ7k )A(*(wxpWh; ?,xC8G-s X+鮇;^| ,_εYh;{߽A/@E#[ ,;h^H3氍Xcd]kͲimHGȥA[n-ejW:dT^I-^pkOя5F;Y{R|,{0m15>2<;3#UP,&h#1Jonj#G ꙣ_]'@%p+~+6Z%w5isv=aTX1@FӜ#)Gw}ϥgbyy)n$ v7Vָ𪚥 攖z} Uul67eTOe:YL,+u+ri= XC,/k)'1NKD,{Sߚ,~/A~|FP h$q ӴrEeL#svFiWF{oăD߹y0ȟڿuJ umJ5DOv3 xut9im}_h'}(n#o~ J41xQ:z?c镔O'.(|pI7QZ{zo}s((!74@q[FOSR+k5?Le5z=ɘϜb纤|@Ci| |}"eo? {8C0P後awz3^S )R|3q+:j- Uer90r>=}⇉ѕaabo"HUSN?o?{Lc:?kj%XIm[I!Heᆂ>E䟲 ͧZpn5g}v+[V@l`"ꇒKF`7ͧ*^wNɯ_'=rhR{<)g˝ w' [J?9ngQWϝ^|⎊g֊geLI;Wڹ.u~6'MRyId00 :>ſǿ4P˚ܼ7"\Q&bzpE၅5qץݓC^|k*10&u `8 ? Mx4 Jf5"nQAxL|wyAy}KV ⣙R8?5(arz,'*yqW ³`5AzySO { w+<!\?&W2z7لpnVTÁ|p; 6d!>Wo ,J}^%> T4K|?Gۓlw8E{==hb X#`Xtͳ;;ɷ_9DgIr (ۯÈ=eљԷ+п{G6ze 53oUpAq.yu>]LGoAs /_Jz%c`} 9I5yԌjڇ"c?G2nr$)RlRnc:,9tֹ;rȔemi:'tV=h 59>TOI:W=^0Qm{7T׊X{TuZnQv3w o]Y5 oFke8evϳѸ^ocl2aG"ꆣ6#Ց/ãXT$,'MPL)p*ns d\TQXـaCmiFxG_L|7i.bjh֘BHA(ȟ w vրR<'xv6,ma8\ttp.vA>3M{&<_Rk-<.wJYplyjwZc-wևlツUпzÓIuS2Z7ocE5~̩;FZSGe &#Y؟>e6詿6:_Vy͑';yXdV%}g#S0zL=[깺THS LΌS'tL?3Hi२_aL8V?Ĩ8<}Tv{g-k3 P=:T}%W^C\YK~aOnuS?,$#{EQ䯥s߄s ȵx/, (\Y%jirN;/+o$(ؽJM[/P /F6`m\EeI:hX+\_,isWEJ3zGG:WZ Iϥ᯲7ߛ#^/jԑ K^r!`^ڜ,ijy5^q=Ut:=jFpǢdx|gČ}~=< x,YD(eoSd&&D1 ,A 'v?G@A,(«FvJ^@c.5d'na 3?1$V#Nd(;sREE}_zO9)N)LZ`BrN\> sr\-n# hĻRO&NJO^N9PyJn*KvJ~?އ|Qfʢ#Vw]݃k<g }X4)uRѝS.xp?mu)23ӮG ޞtjrj!(GHQI8B)ww7[ə-/s?#,wn@=0Վ_|vwPIEý+vVx\RF%oF xyR s>77fyxTpWV Y8m`9g)𚾬R &OW wo(4#_[I<;F ]fBDEyd~cv tA=[/ {|bsXiA~7gwO>5IaFS`=l&|⽣PxgCq{G@~w_,d*-@U{OeȦ+pH"Ђ5k=28)ޚ ',AZP}#sn A~OP$&b&hB[6X2|D}7B{ZG4?V;|C$;a=*Fnn.QvIq.< ; SZmό;iF>A8emp0U?<\;Í_]5;UzXꑯd@zF2Zgh/8.io ]uo}eig3_e4>_>hAv*Cnp UW`ʏN)Ft _s>ve9Hm 8 4Ӿyrm$4Ø΅:ډQfrC/YTS&|w/h 3XY!KG`و ͣ|R^nVJmձ j#u_!3zg*x^4W_c{)R^A}/9J&@>f 9ΩVZl'(V&/z"Xi%sy #o MB/n1|Jq~O;y7TVOLGY6!kQ3?@Սj-pދMravgϲ#ގx= ,#o8G!jsq/!(wԯ< ƴwBlJl7v0\h~lW  {ˮ-2g[: kD c81^dv4&֒sm3%P'} KkOprInZ0[q$=rn?.aR_irVڍ4YĊ$:6Y {ϗ7ʦA4QAEJЄ~vS & ŏ"/"2?}>EdPf~T*A!!l xHZO5R /dOTy @?;m/-$s?'.>6*;utnT}aqvE'9FN$YB9nrf:{FrD|߇jNCxv I)[#}txʸ@S'4~D W,6oSaNjt^$: ʷz\`*6i]eJMP_*·*/^;wP;D|=7|sŖy^&dQ(mlBKjԙTG,{Ǖgڨ߬NiG8Fw_+U^ۭQ`ui;J)\vq_&=/X<ܛOdc(V`o"x'^ǔsٰ*ioZ%v~_o ~?8R5u2@(\Ėc BAF N!Ax}!kzz#ᶷMbA=v ^3gԆ(^wCߵB0^ ~6 bw.񺯰gZq 'Df jI>/AA4n&͎=3g*5[jLߴ‰cXEUQ2 )Oj=A Y!K1WU?I e.!?N[c`Nh&7y ]A9]p)gF` pwr ^&H';>YbvdU[` dbȷa'ɷ;~aD?z4?iڹ}Y{?};d]zQZj?o:hGӄN4+ U:3VhC9KP>-o^Pn_(Axi9S&UgqJ“>^FBD/nT1&YcRȣҞ=L-WQl?Ml]oMhf6X d7>9 +EK~aCT3C7XQ.v"ҍpXj׷7{ĺ7!~<ϡZcʅlvĞo9~Gכ}'&esexȟ3*c8JxshPMMLϙje;ḜY0k_/UZ[ޭ13yR{wnEcq3 /(3?Jz[~f}@{j={&.Ar(i" dxD}}S69^ﱧjm;Os:с9_H\SmkY}/7{yo3b5#BV1ܦG̑ƽpco2[-񦿔5=[-ݩv;!duN#äj k["/7,:VHTM9=}JxSg쉿 u=âܠZS`Jm} RMޘ|7?wɶڭ%A7hL}fx U b{w΢g )P%7 %B ¿@x.<3UF h<@ N= ϳ=H Éoe-p%[廂/*_KA%YK/XV/>DP/(J|`+HoSh)sv:0f_,6fJʃ_4|3Pi@x\|ēLբ{_CGA< {ʸԻȳpr@`|c9YG$4kevO,S?_rIA6uJRnZFeOK]("dve'@L t:A~@P ",OĔ;T,{srryt׽"ь'v&{A?daYc1v8z9/ETPs }]{o!Bxv={Rm4aDX}v[;&ё?ЎY(3.?/h<յV "-4]8Hz4MtHڨg߀T:SzVc&M`59j5*aLzkwA\q3d(>`i]I~ |SzWk6"]ډ̘hyרP>njTfƿޗu-@eT OI d JCU7faPx a <8gڅt, }Y /XzF4 jѪ{)4`S羟O'X7X 4WͿ1w#G łlI͂ ңwʗ)NV[3oLg;\$ r9&Poт~;l8)x54YǂGx6,$]<<9я]AՏ+aUC*`T} pb\@IGR|PL*)O'Yf\0ͺ?39RGٞoJXT:ѻQK~d̠PF>QNƲ ȥoG9y ?ay@sLRFY>kNKڒoqO|oXiACMp`GB34hL;O0NQOo*Uwnm0+ӈ42,O]խx%I !fˑ;wڲ7٩7$뜏#?r=N~#jbf5ؚEYYHJV=埫G piD(wVt?4Uuc:`&?;vb4⯻,jPVLy 3ݝBN1(Tnm7h M  Uf#ߧ nr䃭(1pTjǤNd+ZQ,-edv!-vʃiMtUvlD;weDjɀM h./yݝPX#\>#E(srʡ*8[JGHe ;RIOͲg׫e TAuSPi>[A?~)(J,9)h_,;<nS ۂy@{= /Ov*pW*, ȑuğcȵO&$6%noq~trtڕӖrf]%Q1_tHA|E4d :֮k]&mM}9uMLYW3VD/)ƽDJNfA7F"LyF5\xԅF%F# cڱfB8Cj~#ߘ/h-iAn} w2/ z|TCt wfp.}2W`UVߙr;{8p 8xBK&=9{-=!WqV_ wA~x^}]b8np: | S𜉟ih2,p2k"G/bYZA].hQ>SQ.nMe|-~]!HA;? 4Mj)ړrStfvnp>  g1i 5$iz[U7Zz\v<;? g;#{Y6CoB0#&V&|tD呵_v6;+s^-.^|w+- 39Z5v+?o&>\h_P.R@i꟏̥}+k8j5zogl^ <4fx^<RQRhUY0aI۱ʔwFs*mhFQ};>.Gl8%0,vÿܹ8ȔI& JreTGk)8~;L/CdcS.), Qf ˙*$h-;7$t_+Obmke %8G  )<eVTƭe59nC9vV`(MpΨ]duJJ)ŝzQy:%3 GnʦƹTN7=y{k: fJPIgPpT5ʞj0v3"- pY'ʨ㯔>WD[:$߻49`ld/u7!D4/ ZA;K؀P|-?$64ooq9;6h֕捈V 9YT{*j:l99Nshsw~k$0ITN#$dHo9`R' 0QC ԬpIOF0FkMx9t 6,@#k]l8?ǟdN,SN]lюm`ɂ$Kmr*p8^WPnMX j-.r pLAIB01U}S|:9yKh0ˏo9;t\hS.E?ū9}Gκ)?C%OXUTNA=NPxLpAF΂jnA> ' ը3eҾ""Dh <%D#}QVraGJ'E^kszٝEpMr s7ڀƆS_8c;yD{:LN ꅂk S~-ٳGhgstdLp9? yQuO- /HoH9)IA|~!h'?|!NE s`24|5Vclanr#%3K/c/=!O+Ey^Fq&>J&׸cxς.MO幼7~pdyyԓYʲ-q\.hO&IޛSt<8 ǜXQml ,< A< o8{F#OX`¢v_%hm²% >O]( |&A|=.@T w` v,w 7gS2cp7CK;A}Ͽ+H?w/n{p@N\.xv捌P1anux7;2,O34 ", hLu.8 H : ݰB9+<1SRptw{Az)?EJP b˂/-^wfgS^=oSuf)gL& Al`ErPVE'‚eL_<i/D7⧆{}v vk៑փ1p[w| 58 9CPNL@5x`8R%,` _.2LŀvU?VO@6mHQV#w& oqzD?ֺCT=ƒn f(㼯Td=M迁/'w{%nu(A.~k2iaяp&ٓTp;2[\Ak@68Ff HBS}|A.k*M(#l>^O>@c'- E 7Mgf"+Y X *?"菤 ʅł5hFC^DrlHFW9Sؑ_wUoϴ(N%'VhRb3ϝ.FRzOVţỪUn)=_ɿ?EEG|$g%+}܎Gv#șAK뤯{.ӂ?L";ޅV,fAZx٠%EUp:_Ltg Xjh"hWk耔ȚPTx SgOq#T1 V9M}L!a]{^rSx殮N¬W.W\DN'm>}#eٗDaO?΢x9fE|qg3iPm%E y<2N*1"by?p>?'S bkrˍ&sVuFN[?+]޽$7[,$Z`:TT*.u0(iB=*ί\: {ipf^7KVRR0ikPΧ7]F6 e*tקE*ĝehワDaO䡔gjȶm5{PSl``|`!AX5<sϞn.fYPY/jݺKvD@4xс9;~4}5'0$T(İ&T@jUI<%!muJR9_\;s+1tz0 (t=QJoXwww PU@v'f_P>V}eCyfrő>aG%rj_D?#x*Pn7fFE\hȅɼA҉'Xaǒϔ^ҕ76͹b䓜9x'6f> m8oG,G$OH^;{z_5#734!},<@G7"~DPg>H0[$_A>X.xm!fJ?MPO(Wp ~;'m!Nj%h\)fo#AF] |*4x?5ޛ:{dmiIi]©!>|' '"]@`y [/G%A+qY#\$H_S`A>8Mo/A~0sCUǩG/޳ gNK5 &up'*iv n ai BY'(oF 1[>$Uak*yW_` 6 JF;sAWXԉgdTF~vDcr!h­gƮk5$f:,/NuR_. AWkstڧj4ނz!A:+l۟ۆ%(ȕtp!QIv[${|%F#bp*_eeA>Ġ5V wvrP;}wp2g+{{+`ޖiK> -H'ApSokT*0.`krgSYT 5VيwLszo ?,8CLo5:*n-莼.f`[VӟS9ЦgN#3p^Y3 S HQo3ݏbqMs ߺ _XbkMl ƔW4ʺcC n~5S'U%?1#[JEή{aq2)pl ͂^ XB̀](zPڋU^Ј25481E ػ6r Ad2%<@Ccp]\ڤ` eeɞ${w {/qd̖\ig+!dg>_2W4wAFa4}7x# ,xӊZ$)xdvT,D2;} yKUs΂oRBySo|ڍ<>;D/kT*W'?Q"+syTcV5tKRFG1,[C|ϘlݐTޛyhVJ] ֻm98ݝ3IcS>u5Gfd!Q?R;WpNg,Lⲽ<'H |`-C`wOe5'o`%NpKf{g4v9y^td{R^4vWxH%Xyʦ6o.^T⟣ޙk5|:3M$)QBrMy(Cf$YgJ(2V$N}߽:{unu~^k5>kz6f/_~j{ᙆ{gZʎ>X_Zq' 68v4?uaÁ 72 M@тyZ` yk)C> Q ,Yϡ&eA<&DA U)Az%(_=v;.|﹂j s 58+ ONL[ST<2-nxyX{ Q^* T sA#6Mȇ suQ9&/ qQ^6!ӂ\fz N A>/_~ 8@2R2EGa29P3HOLi@v ,d[v(uFzvđLS߅y)!&%bI|c~5*NݸEz\(hGU6:3lu8A=\`$(u_dwG -LcSJB֔6# m SXi4 d ?+O M,ľ<9 hWbw`ÉajܸYtJM#>_ 8c}8~)puA'M|q.GV?]/;oϙHs[8@>CN7HXن+ӎrwEa';|cӰoCX[PUB9*G"5I$,aVVSJ3p4ؐk)`Dn?mjz]-Q:c6yI"է%#袁pyE;͏;G"+JBNTSp`1P`?!]wFd|:O?'&r lWϭw.Lxf<7l:N̳YuUx%F2ВD+%Xٳ!$%> LM?݃yϬLZXIVU35M\>.B|7 wpfЛ_da9;ؙd(?jr>('㡑ܗ׽kI׭c <^` (Ye;>Tb /b7] h{D{fBO˝oz<G,[ʝF`6M |ۓeDrBv!yird OىY79 3[hѼqbŋcA'R}mMa ]Gָ \,5țvy6Gqم^=b2q}ҷR_im|vbȧ*n1#Ƶ2n OF`w.r--q N-YcK2);B ,3?zk$H҉JLɸd+ Ĺؓ$.iRC!> @N{myJ!(}Y sw{oє/xuoonҥ۱NR-oi':[>xQ WSpţ-Ҽ[Z:qYO>:JI9_/)+GDU `4*Sy7&Dy d6 krvؚ{Ӎ F r`}At?.h  |qXп|Y^^i*v ފt\*gW;¶n#2CկMmlkc7ىuœ`4SeVSw~|Tߕm8Om)= q`x\? `  xm,X5,i6ˎH:2ldqCT ͿVV81-r)|!v|UmxCoxO55}*(.SJ7l*TVi@`a=S:s^29<׈R-_.d1N$~"ب@T8ObV.?M 8A?h*A=?Qp )}COm]c@MAoy@^:TNh]z:`A=;GP~a9s sr_}95JV{;dM~m7o~ʯZڢ.z~?ړ]aJ^m{].:ATnRv|,A7w4eP `*owsݟWtjW<ƫLtNvL.TA=9 5A,e* wNgnX_:h/PRҳ2^oOAxj ˑ@P屧 |L9qܷs?5.l:+232_)܍֌#< Ϲl32~^M 5%ގr4Yu6LG#$LS=[Iz GUp?D-4HHJFA8w8ou ^ Ƙ s&pw,^MWs nK&z &tcifA1tGeS;O&? ǖlj 呮 |.J{g'v.Q}Bxr2+.Z@BJ1Y2u!8#"^w@+.=; qs{Յf $(9_Mn~PjMkwf>c2_~36@^쟽;V(U ; Ѓ-]q>,P==ga[{{z| ik?s 5H8L Ό Z nI_87[kjwjrBʦ^[{p1x2qEۿh`3/5+CSojb?ڣ [ޕlGεF0UZUf;A. a hg%HƁ4Dr\dR{ 1=#j~0Oȇf덆eOS5q҅vtxyT 9Lr"YS]B=_rB#\v|n"Z FNpMnmy  ւ% i{w +ĿquԔ ~O㕽a44=T t0J_sW1U6geLgiA\of`-LiEmVF ߔZV]u{yCZ>f{0ʹҒ`2\{ gHS8e/syk2'Ux{[zr0WӒJM޽)H9b^C?9δxO 6<%+L"3KWSx/Z;>AЯJ0s@. l7pբ׊hWYieP|n<W{6[߆`Nn7^%odYU5|Nq`k`+x 'tM>n繷?Yx 3n?63NպvhgQnmAtoCJ8o g"k [ = ܩ$}Փwx &`.lL< Neb<#ܩrD"kVYtlL[ L+VV|olkB^>I-h_$7N<M GwD&N?ՙc ĸw+H޴XLS S;:M-,9C2Y+w_hN@bߙf,!u C4MNR.T$7YO|3_P\#![ˮ?ػ7w3$}"+?P}8 Vm<71jyHqkv.RO?KaN̈C92j@L|u9FTG(P3/#6[rb_T=ߏm^Qv- 6p71g:3;K?~{\#ߡ+WХ q&.Te9H4M>FVTZs?Ƒ!<_쨇\j`4Nd;DrExu80P& [2ulBi0 e!JRj1livry ?&x>Od4a"N[EiX%ʟw(qj7cC.q0w Wc)ZiîA@B87^jĒcɦ8󆇄w(!Dhvy;ZK_K o" Vz~gҾ}&O,,v27ΟdYe YU}ewoǧމruiKz-gܗ|=z&R6  y3T4&wRw&j |  oVbVP键TфH 7D6Nf"ŊSIb8n?Ւ ` L\ FFт]2w!@f%!WFvȚh?^;uÝ 1g NLD2U+$@n*Bx 8ywA ڑyj ~S /c2W =U0_[?7+gs`*܇ :cvO0aE>wy{igd#WW}ZW3k\ k=Ts@ch$:0`}]Nhv?>(ޔgK^,ya)uTlQ*8Ek:K'xߚ{B\^ *X=6HhGAJP)O{O HZ|t%^OcrFP ,Vp~Qc|M'_Kkf'p O|OР. gw{łt?Op}{ !)hvU|sQ{i vn^"CC ]qg=n4t ( u^ {yDh ܝ_ZoL@[\>y|oF0TggLJڬ5a/14 zەAA|DGv1 !_0o{ >(v5A@W o\?*So]zw/Bβ;Ui\ю(1 |bD&i?<.cU|ӦŸX A}!Oiq n! ym+8Nj~NHO*鉆̧f#;3zDKNh'{ΰN<^v;x;+6v?gN(Shhw+;JD;MA^ܟd)H`ơzp%+ߐ~cP';zRAKDpU~#.3O#]WvJ*r9{o_$pMz31bD,5fȾAf&4`Zez|&׮㑾\rwb8GKVOVxCəZ(eBȴ!d!ws%W ӫv-A1<]$pHZ~:E:Af{ae@YtVp&'xh%ҴEg֛3cZ6ޔvALHplEWߙ 6.5l=UMgM<ݱCs5vytG-v@9F^ur6/`{a!~Bl-m.ݩjVS3"#4&vjͱ*-1p‚xw}V~awʬ%\SKWsBz3少`zA !Tȯ/mq $ [\]A6H))̴Mdf%H׵a +vBpPP]&Hh!H|3i;hQ|?C.4/wMTipXeU&3)wlpy_P)S#Mt›b-HU؋J($-dFƒk '/'[ {M]`oܹ(O|isy-' A|dQSe`u`APy  A<(X8RPNGfBAQyxR BB著d Ara5=glW\;UsP(LRg-9̗Co-mx; De~7] ,Y,h *H%72gE\A:xi(X3@P/|!0HU]EDŒ*G[Ɔwc8]r#H| ^.Gsg຦@Lhs}ߕ'%;{e7A}yQ֮&]}4MT9^w?Jp}ٖ{[BDFCmd!!_ψ庉7릊6ީD"9[=_޸m]8F&^o'$?}xh#&][,ui2b-$6EUCځb'ԽŸ<\ufM!{ MY5)motݍi vL%џD=3vYl׵%>J&y&Yk:B|qW _D8*> ;c8~D-o?D xM]S܁VW4Ekf ^ ⻳ hFEjT0)T O@5c}dbt|AlR6>䠌y/3+kCgIeظ6B{2=;IxX+Hq^X [Й)A/mf-.#e >r_'6;\cfaM,eCy]pmEr/ 3cAx3$Ʃ`6\,+w\F4%9ӎi3hk.'񒶅2D'W\?G)"#GfFv*8V@A8 ޽_u]iǎQgc &T?;)>/DVVQ:1pbvF8$huS)\55@kaT4QyIHlTcʢߟIPoOoHS4Ⴢ󂠚YvA{?E[!~=Y0}Y_=|ifю'Qqze=#^6? ͠1 běٞayn(fb;U1G8M )WlC9'JtDcWfN&_/wgxN02q+i}ƒt@IDATEkYn]o-S{y hBmwDNnӺw _zg|ɜmhv jwaiClnYl癱u34e_l"v}ִJ1+Ľԯt$ޮ痐,{s~lTi-6N۞X GH޼ELlw[_زHvW(yG0D^O k7-G ;5h_磁բl΂A\Plo @7} ܷ 9%<>k`{A}qÖCR ~@G{ < vwwvY\`˒%}OG -ݶxKQI/H[%/O +8rC6܁>xzYwucd}[3ye)}rJ7\''>;hrowŋ-T[ 쮂j+)%o+ؿZ0཯N/<[N㭞4Ʒ'2I/KHa aĸ3Gm43os{q %EG r{m Az?-ebA{'_܆l[̾D;} =AXo 9 (7 P`-(W R툉&LKӂh猷Z Tz)j* 璾}?6\hzb@<4#C"!LHF+Zo;tsrYebcP?6f*iS':ٞY@Y._ (4a/R/yAA,K-D-T`WGer%g}K4 sfnv3}[!Z0;U4[6)oTXz`BvZj Ǿl``1a)`,څviZ}W u/_w#W;˩81;;U8m၂ -|)#\B[οڡ2 &z!),A Cx⼶lU{?vaa, ? 7ٍr`Vbbz^gBɢo!Tމh^jAx {` &/L_(Hﶂ|qj+3=M,8'I߯5sLI:y&A4߿HG`OqOrnJNçjԀzЎOfbĒ㰫{م']|w`%)o[bp_;oj%a`Py ( dZX ҡH30mk͙5Y[4G 9m6\ϰBF= [tr_nK} 'җZB^F4SgIkQ鳐)S0}K=yYl:{]0!=<4? ͟:Xʾ:Mo&E?;;y,lEFV,U:_r:UlHZ7 ߮sA.;BTCY@ soHSWig([==f8Ch[wBT6W6O!c;.x.\uK p(Q}#UW@m'> ]~~>扲q ?tGG_{ yc@ߓ6ۻv ?7-`%An) ,8OPU0cBU '7D/[hI=NT,ƹݬ@SMþBxc'`#J8agbf缰!;P J?Ǔ0Bc'D ؑd^4 \-(7M`y' 擒>,8F*?[j7dB  %7|Vx,vwDo{b7TؚJF84AmU¡HpT;MP)>K?id~R`$ȟ &¥ Ղs,8jYA=-ټ_4Ny]:a1ۇ+.dz>\7%aN{*'VEpU9!O.亀zd9 3{ c؍k]rr2\]§+x]E{yVw}m֓ħ;oe칬~0Ǹ^8:Y*ўf|y`혹?&V{iӞ'dI;˲kO3Sօomx}ĸ9%82 3STxVLق- 4g[Ru.܌ۯOo MMAON; `A?eA>j)g qb"iMsARIVbgr3& ,LlB0`}gT!~;S"?]lNHM͂+ ?^?RM4۠^ G]1>j=^klPZwU![~9+8.|G *]R'ժFɾE~a}D~jw+ 挑~EcA=-Av#|EP*Cn]hA[Cɛ8Mw\p?'g ˂ R-8^tg>zPw ޟ)x-vkfa@PzfĐ6ث]a0z0;0gj VQ_5*xXɂا&Ntcy,"`'QYj'  M`ZrX. _P D__X*1M4|AN_ﺂkZwLkJ)1ߚ~C}*vktu)<(y!C6(r`}6Tx4o'/H̎z^0/8 {)S8~èVIل w [{"e0|AZ Y`ѯ>T=ڝz},_. -KKP*ZɴMfZeO-rdtqy7`mph i?zKa?Ui+ EfAxj s#(A`\{ފe3=(.;SLqy\. H9ewz-H3WrBzމ=Ϲ&"qXv}@wU?μ?3ь3[?d Kw;F,w]A8* XAAP.wZt[g'i0_S.:2R>7쭱wMmѶema uܯtI|_a+5*c Tظ"F[4'= |sԿ-.d { k 0A3UM]j87 hj 1†VjsOc24!Th *vGA BS7JBj :)^أ8#w y(M6d6s`S p'YljC?D9fTXnŖ U{KMD7a@<ٍ ToM+;qT4#zx JEVbXsWԌW\'L  ,+R"Ŧ k>Hk!'| l']a6*$OPT5-xs !;3sxNH3(7 Mqn k8q ob$i:qYvl9]F[*wj{6G(M=PN7(K4+89~;}]J@΀e-MxE,A@޼_lO@#g-݂T^qZxZR?ƈ]i#(Ĩد5 ,z>p3igwc !+o*S yY?h+yسG9ٻA|Q4M1;rFTn\0 %f9}6wEdn^hZTŞz|vTJ#W{7v&>c*,Ț\hsm2Zg-V_2&eq$^*ocR!s\7ύ=v3L ^1OX;{C a7أϽS)QSyqrтc@IF Ay(eWYt# Ah A~I ǖDȇSy#s"L].MFJF $C-v .v|  Ͻ) voK/$vt`.X ?I=>{!K`XYqLk}'lxvA;2O? A*c 1Q Q|PP+n^Oe?TQ;Tdz#Ҡw'dAB4"Ef/rHHcLv0zc9S}?| 1{ysS.|d!;.&ʎ(HDZ|C 3 LAԢQ$(94iDD3=GMR'zL1T-R2:jX sXF$4j~*8֞%W?ÐQ]g0 #S6Q 䫄Ep G]mA-Mt&6}辨qt|g5*Yy +~0Ga[KyL=} G!srȯCci=ۛx/MaW]7OقZ?DV~38V+z=|%_.܎ EP{u0F7q`ãK+|x2s]d{CL-PJQVzlWG^(1R҃/}:;cQJ߭5wiF3^s6{q_z2rFE[S[W5;u_QG8%l:d 8Uz~ţJ?LzM\*|+ݚIJӰgܟVq7RA^B|=RwaiU8ߝp|o87u&7":\Xsj6 o^c%M?+9_"4,0ZPqi|ADmٓ? >t;eC8*|Z~yFmSt;^ }߈*c@~KN'[ ZA &- s`-⾂?&(NLA??$V]oI$ANП8JһZVyxZ0FA9?~@دOܺB_OV?M͛sqT57w.3#w<:rfMmyI/hjꆺ);-nnϕ<맾LY-ߓs'a$jƣH u__~<7|xY5` ~xx z }%HB!5DPN.HH: ʅ> `At :NϽT ' %ڤ5R%EPaBsxd#mvAl `N=+SQԮRvEZӯǛRJ4$BۮgLM[~;=~+6X *|zhBsU <,H/H'&c|+ \ ʇo ܷ#*<\m|?|-Ll,KaTV_^RG8{ ^BĔؖyfGq9Yﮂ+\\z|FP&+5 !K "w4TMc:*CI8ș~L#UH! WsɿNҦ1݆k_mWi1 *VffZGSyd16XQܼaW>`Q_AHz=-mIz(HA|~)dHP.eK#xjz;֡ɮDGp+Xق-쐵xo \P^+7 ~*8XOOݹ?h%rvuաk}l-gKֽCciO jU9֤m[w{Q {5шr wץ|IՇQ~;!f?#Lzg=Giy@^.H~${~1'Xɉ(~Qj <$w ˜; r? ~X|mAy /,Q06Av;FuC ʽxwC[~cA:~MқE5S)e۽c~j 94lF0tժ6Y(TH\B_?2pA| Yk։Bc<i"™!pT &˂ǿ,pK@g'~&xhC.5fkrs3F ] fJ! NQc[p ?Lq[ݕSy^dX4-p`Θp18ݵ?OCKr @/NP#ȿk\=YK_@ ,^-/Lu6i {6~LݯR>:턼Ey>}lNd#{ao-9 +liPuȪqo&A?{'')k{ %.O ?,Tb9lk\éxtߟr8ʘgd%?N2}g俠mxkn  egN6 e4\,ߧ9 G|Wmt's4|H?:j%n@_;S Shk'ߧ<_~Kxt y|޵ct[~=Joʧs^`bq,D g8LyXSIeM ?=/ WH (h|쯒Az d epif R#{IQ~q`h?(7S]hfXT[xC2y)-?mN<=(,DbS ~V;;łNd dfݬ"|(xSaWGp6rFڦk.,{ãsFjMDG]v+3)[bX$?U?+1|n@? Ȑ{P@Oد NLcxSB+ðAA '_\4hh@S?K5T+^"bk޷c֎[ ߉#ײezu358IHH[\\uƆt)y"[[PGezF,o}Yb aL L '>qR9 ?I] ;$(g& I:fETʇ܋ 4\xk$zƙdbO{p^'Pw. {#o[sR}}'82OF6| `d0PJ[LD¸%' Q Y%L~NEoT#Xe֤K^XL>9ZTJ@]Of|"l:h˕EQo,ʔP?R}z xxbuEPߦL(R[N8h:Hg–A#DߘNL}*Zhh!PCH*~TB@-?'W q`@A ~!bkA=ྤC@:%x + ]X(X hF&6 74 ɄԞ>r~Gyzݛୠ_J: V& 쿠h>)9|b#|Yg.բ?[NgyBg_z9wy[SѳҧwKa5ߑ܁%JLt #~Nx>Ǟ(~WT'c|ǝ7x{WT jv)z@T^w/LgîEB7! :u5iOC&LC鶧,1219NP-śY;x 2c K6qY~.Yo`A:zN ʡ?W,|'W(-ugq DL 꽮tQt|Ui#7V{f:#[5iUNpT LP2k8~ȩF%0SoA'3QU+/#k'0[Ue9w|g/<-x_zsA1+ qw@&ق0z~@E \`P07܇v[|*thȨ`:oPs)|ˑ߅hkLJ$d ֌R6_O_!!{v%VtQRfgWOrޔN` g闂n.f QC X_+ /VgS}Ox܋q i誈pPD7{{FSR=m+**wJSd·L Oր#h( Pqy^.dFIa+`>x'P7]E~&Npse@#Ec `S TdV7]W7~#^2_\YS7MOif^"5%s џknpί\ägfv`=HoIA^i:Jg(OMve!o5M0/eu~ )qS:|D.ot*?m:N'&uM(Zt0!mgy_|[re+GWl_o7 W;C[EJFM9>_7lq3Qra;:vjs-_xm/;ۮbf'ۨɞH7u7\К|_z7#8N&P}RӚs#mXmZO* GLxGJ]7Q#Yxf<(j'٭چZ䉜̄lC@{3 {7R04dKjҴ/D<Zy^fb>{zf4Ǟ )*Ja0V}~:x:QxoO^ߪx8X`z뻂jy|jt~߮Rak ۶SAR54Ȏ>X0>a1<-In[A{~ ~,ȏ7 ʇY*`_vb9HW}a R?Sn6sqM{m_lv1]?84dPiwHѬمM6|-ա<+^x>~ 4\7^P~|!r@,a}*߲ˊ:gc-IᝂLBZ-p|M{jhyZ]I)(\e3Y޴'>sǤҁn5rE66΂rs~ߝt3QI|ǰ .{DATKEF?}ӺeHI%iimP0u]{n סV^ 䑂;w5 =&8XdFP8~EN=BPY?x6\;!E(!zT\Sys|;w;6<нh/{+%XmOzH&bM׭8_nAwM,RA8A킰Jǃo7#' }]UdI0$8"g (T[ӂA֯ ; h:ۛ.n$B:ԂQ^G. m_nC{-{|1P݇DZ-6̩W3/79yB̻ʉ$^Z;Jp}'pg~F Jp"'Tl5R3d_=:E6n 6 /LQ1Ob!~ sCWjU >~fBG*m18L]Js:oFw;S}By #ooP@{Yp />O^1id5hn&8,FfD`́ft+'`ry_RJD;ҎiEZE#]{fmܷ7sf~Lwz(ǘ35Ac6 <( sLKa>ak{yN+G5?ki’/4C|yLj~i{$@d7na_ɋo& *X+~~uM7A!JO4NP%!Pw l!8^U}d?Q^&ƴX}W+Fdsenpn"o@E(y||]WzRK*{~.gy}ɀbj7uW F>uVMmo[߹> oi%O*,ҡ K@W>ælOo(+`ȚTŀO^tf tۂr ])(^Q=AzEP.+(E#ױCosA Y=Z W6WzQ^o Q=WU+cʉOkh /5<3I(X0Eyb'3A% 2Pg G8t>?i*fG 6|nv{K]?}N>=:t34p`rJ+C[|P2P>+(7^\(+^K!q?A4^/_ 2whk?! rYo/\U9WvFN<qsw8m4aŤ o3/~"P]`|骑]S[}цߙ!'N}r}Ks2&aoHA;UP/.`R.\+ea_X*(>.u2?\%Ry@ 5B> @IwB6 H[7C?݂7&'8$2MC ~&a_[Sn[#ϴݐgG#_gG|6G*>-%b(| VkoWKʅY1˔4E~Rmy-__yp"A[@^,ȯng}~M(lH5k- ;ۖ&8;Ȅo#UO=vFgHS+R+?5XB=6nA;qn7;vW ݖzTN?i'<0[#!3Uܒ>?e |"7کH-unknх Az\w|E}#J[[v|JqTA VuhA'E|&2pvM٫Lb Y">p p~{z;{\lK׳gLe,F:~oXJN+4dGzY*ڼ5 ^Sq :^dM2| 2JfƵ Ƴy ޞd hQoXNq-Pu{ELz&PC1l;)q'HHHmr|uU/{pj xKs@p4`Kg2 ƚPXf7.߻ߚv fM_,Wx3ƾ,zwAxU/ oxҗ|uoH8'W_RL.:谢SH_Cj׫sY hП+ܭT'RD]_t@7 ʳG)Ap@&Ĺ\?lMpy \"HoLb%#`d@}]&j)8`zAKt-O ڷGI+ϛNÌ=z%h|Ьz /7s'vuҤ43?1IZ׭T^iOVzv//'ģ[=_,refdy+iwL*/HGȼ,P' fr& 'E|o]XIIh Wqjܑu~q,|X:ﱇ"cWjs`M1ߡ4$$lԙR{lˎ{A-i!ȷ2|;җq uʯ\(y JW@W{pZﶴɀo1s5s> K 5#+Y +W#s}y5p:rc 2=j8@~2[\Awvh8Y!}o) ة6z. d"~2ߣs:_'[7 -łtF_WTE_c Wȸ؁)UR>(ZҰW v5\=cRbys"ӈ%31Mto})=%6CLG BoSd7_<~} /|+,-gok Q#񲛠~Gł;XvPP}#~'_L`y 8Ҍ^h@yq>UN^W=8߯yA>QQܳdp$U^WWp60V{VQ R(@g=OB[u Sy9'xң^/@+МiN!]2#^ag{mc /l̔ 5<:O1bxXL) L%Ei]BnE _} W)9wA`u*g,ro{Tt#r͸ G-[5]5JОa.'e~^"Ytm_3rD\[*B .)wChxSg2| ˸/=Qw :ʗ~f){Q"/`4tAcd=xxFmDى {j窯j;(_s,V%r=#\5"]qh!,RJ-ZQgt(r=;R>SON'eb]؝N]׾JL?E`}Z!+~wy2`5 !lruk΅W]`mē+pYHo-xY]Fp7eUp1WnWMNoUVAy`dACXA5Rp Y!(ɼ@d-}}EN3-0n (܂Hm9pgoF#ۈ4~4^5:{Z1e/ꠦ[Ϝ`H9\ނ!sKVSRA^ G !gلVR9_FNJΈ# tÿ"u?ϼ&Tßz`3@[P[EXz;`iw[07bc^>f?@2z n$X [7W(?P&B9y'<7c\$I_5 jλTrA R|\ReĀuEΩٜ# m<]J[>(|;|%  0F 9A\T7\Py ٌ7  tzjdv@Cr.r>ӰVw7;= z*/3䃸cg1EOGK--Fz}ۙD9]t*ɂRٟ7[m ϵtW0GMG¹9,ϳἦe/Ÿ佂sc@j [> A3^梿d&x@?E [B:CT8/Yz5/))Sp;kș4~9I~6 :-Ś1l7ݞSR-f?$9 -NV6P|eMP9H^!Ȉs\x# η3Q8:vqiߵg%#L%d;8>,R/X6nROz/4/9 y.P}99պ^7Gg^%L $ N hͯ<{TG> N7<*5sv*cj:[~0X3%^M\EvslH{7bnuOi+v̠}ykdqK.[-hfEnco#פLX(w=xuӑ~)h$3t -s-g A%mcf/G$׆/5$|{xOAΏw#' 6?? '}_9eq|V?jUڇ~Oא/^\(hEd&_er wӕ~%x=aG$hvcC\|)~+Q0@P}#  5kKA໏[  "`[_0عW& 9YG _Q0ˉޠg.1P15B˃v1[<\Mٓ Z3k>i; &x\+PA:z\}`uqؤ#?@Oo%Sa"TK>{ ( :~>G O&8x_Pu-c płrk,G |k A2(ﰩ0asksL;>Im1IOR(w?J#wf#0O5NзC Cmgл1tgчс&7P}vv7%qT8&HPuwto1m&r '7Lh+N+{zwAxgi]};sbpR/ZK9@]VM=}$~?'n&^/Gm o!MAL8TNu|F/+L`?#(|X1oKK8wLosI{M<&fz > A/U'W 4Y & ^L=RChA(W3g߾&*jMY+ҐaLG>˯y[ OI/WV-'t6 ȷf T4ѻoG{oԒF'd++ i4pW`RS D-ؓ g˂ 9J;|Aϴ#}6;iA;lҰ / i,P; iMpg˳CR|b`PC&t!x@o1 Y-P/׼;^ፂ}A?A+7y?G,B`U %˜ofv8-`P#LA=Qǵ{ ,V7$ m7 ڂ R{\N[^.e7sK,AϯW*C"H/Â&0 v<8WV` ~"\ұ;xeua:?~^-zQ`b҃K;_k Av<~dQۂf^J0>],X,t?BPO.x~2)<^?vPQ1 d,4wO0${<׀A؟]7ǻ~lElC{0uBYCo'7(r59 ( LHM xKFac/ZP |;8 U@|v` q9M=g2j7tG~~8+D 6ezxi ˔g/$"[ڑ/XpK:ߙ;70Ā>4fn mБI ,( mr }SpsҎN]";]y'+m,T91)}-5+ rYh rp@H?3MQayw[.>*5Ռ7?`^Qz)tH~hkk1Ղc髄z~čD? G } X_ -o+~mytmPe2Ym:^Gۦ>Fs9)P~/I&dYJ|-H6_^}<ʮmr,(NY(7\&2& !iA)GDO *_Ŕqk2P>|ut]Wlo[y{!gP[QnT#?g>φQxH W::n( 3כ`枖-:EЮQHd~U\b^VxJtTO3e U̯ E B5bÇ8}I>@`P`~bbGaS A0/{ EܻJZNT9B魹㯺Oo@.; Ajy@P<.Zu *v7$1Ƞ:?ѵWGsW.Z!tLA2U> 7&(vycgt["H Ez$l$'+_м%( H/IDGI LOv7͝xx_jwem(lwb Bj􌂹UPZM1D1C27!3 WmH`z`-/|%-𷋃Une{\"H bƷVZcjCy^aAr&<<1E:qTί]7?+P-3WMy9d`gYW88V-}\9R^^gr 0IM&(߿ D'+}͂6P ⻳ 5P HI*KLt\ 7B3pS}Չ `@N*KJ=kn9nmoԻ,fUOiUM&/ zb?*w^pW2} fuhW|! /Lkpa1Hsa͠]f01!ЀaѨOKZQl'GėR.=qc\84.@֣dc0 A"_ϖq:=3s:o [Z82:uRz:q|Ftr|m񐽖>d'5݊iM &{ ?(ȟ P 3@";rirSwp zp,S-9~n^"'d$p嵻?sQd/-Lɱ7 D|(aG:L@~Q pEb)".A5 ,Z,@010A4%i7Al*q?~wMK bA| &?2f?|o>?'X/+<eh!WMH'#1D"~:: Hxa7{KG3Ja ;<,`L?BlnTp Lw jA s '- Na̹~!;䒇 @A ^"{$PU0ૂ5V?M # )?],Wym*"E>G;t[8͗eB 0g[J₁@ 7ɂHޤOE)_/A11)l[5fZ&9Sfα:U,wjZLnļD:]i25cϴOɮKhe%턢EL0C=#|ElAq]_О(t67EUz ##W x?l1Hֽ؅80oZj5{G3VGpGrp mKv[->tsC1jg?оj=7[!Uz~IV$OAp~5wO*^ǕS\U NjDYZ+j֙(o)HΑ~';#,Y9A܇ IM玊oHq 4Ӂ ;# oI]NOnu(`R~S{RopVۘ+&2Nʠ?!3۾h.Wq(ەI񰫠=A4,?NA{w W^_ċ75[aNtvA_bM4?1o/X7l,HO*#dΛxn=mx3R8t~|=_F3ݲ9u ^&(ڊG A˦+74N4o f3kGRCXL B8/ڀtԁw;ϊ#H]f glO\Rp=ᣢ;UW=#_ s0n:cyTm޸9A1]jL|>n:|d^:}5d7tvbd{{::X4Gj9[iF  FX3:Tpi{Bh_-66f>ڴa*"t' =Z[a4!nr5(4Þ5:2 c_e@vƈ:,w'? = U'+^Âxu3x@qf;f0 lkNB^^⻄#S=q[ZDˑR8 W6d:=l 4=vlſٜM_ Q~/HE#_o ]/w SGu8 ߱CwMo g|CP"(7,'/`@jgAWAEmc.rh5 ] V^%"XXP-X`AA{ ]xd1ALvcԃ 䮂_j_Wy?;|{;7&_ט54@LS7f u>Og ޷@&Ez#Azk,x A ğ(\iq:l.[|VxOj'ݢ! <YJ02_T8)^|]ҥq<6u?Qӎ+m<ҕeq4CA@vty[I!L]$㺂Xp_=9g{.+y #!KTN{}>mm;:nA{ 3> SLꩉvM& C +(?dKG"!ӤΣ'ZJ/%U4a(UeS@ wT:rvx] =N1 {l8(L%\?fNE9:?^-|'>N #G*qıu+͍ ݆ J!#ͨt 8 vjr ԏ_o!>X0\JgF A~}J\?`9 {Q5sDpf\ehzA"e f%1|u1$sA}y74 6KQeﲗڎcݒxp|jU&HA<"M{7vf`JxGD#u( n^n #A:W&~ ?TkEڇ{vY`a *1b9GT g0'3{愂 DɰeٝtzxvOwUut@ÝUlti RͫjO\U) "yK"I ¾nצ./p[ߋ:ȺQE u㉑uA%X0y o*j&HGkTa;~- wb)92K 6 1aprIFwt\oAJ=f [N,B 7}I0v`«LP|)H:;ZG߰? ȞRx. b6P@IDATMEPocFm,r*r 'oTQQۍyT[;n$CSzO]:`;@IGG~b5, ƃ ꗛoy X9YެB#~$,h/h?Kn&(4.&(n$Sg^ڥt^&_myOa&|言<_BVԢIeq`l{G; Qx9xb@#T˰ r|+>&SP=(Gv́@4X0^XE %5;}nSYxDSp&6{ygq݈z};s(m̑z^Udk QpܽǞ+ QT1wztW <'=#Y8eΌX7rq=oȎp*r꺷(GEW 0\=Fл%`_54D~D{W^ qppx!hBZX;IuGj<67ԗN{4"yD9˛b |VeW~69_&?̈:&`G+6wcJB`gsPp9ğ^NQ7n[3iimDP*Lq*=jwUOAN|PA;oJpX$ $ H~q/wz{>6 Hj ܂wM?{.Ntw. ;;PEXQ5q =,hV'x j zJ߯P?tȭ~4!=~L0L'A嶺r=M?{3] .ӯ"k~gtk6_h~7 h_'ŊǓZAXa6(xJ/l"o8TU 2GY bHH =`pod1t6Wʢ0@P'V#gVP ē逫kuS" _@,U{Mפn@q9S z#oM7I"#)X?8a~b,߁0hVvO̱YA_ 2I< i k":"bgt\z6֍P 6͢) 43PזndT0"lF7_zԾB|`oA(sCgJeV|Xv:vRˢ鷒!koOT R 1ғ߆eᱹKO>!Ս9˚s}eUt09ڢ@Dc#j(h&s`"+(W<BN/;A% *GcWz*nzG\-f3QȓzZ1a 8l[xF=epMSF78( _gAAN'ꎶ޼#6$xX|PAC>#ͬIOasƂqyQf &p_B{ #H'maǟh{@P~!(4'?\0Np\CAf{ CNġtp@)p%W4pY??*Z⥶`ܣ >&n@kAg,·px=͞n B QF֣Sֿł!?.玕ۓ;eǚ{^p^!|W!_B'>>v0zNjقjs_Al%(?7s u=' r{vO:H}5D<_uF;xWADG~郑ڇLfaW/35#ɂyrWAB lw㝷ڂ`n/ 8^ӶޕFi2J\k#d4|秬Llߊa(66x"k$(##iE<τz KG="hMB,pBkD闰jӼş2~濶Z􉛏O0ox&2j M56~0g$q=ƜᨰkhD ILhNP/趜&X uO9|::Pko_<,X_+^Sn?6A* "nk,?po3E(PśIE0 X%w u5ae3a{DG"iϲב[39,~_qx5AZ,pnZ 2<ؽ׾XiCLTWП𰷱'GcSsBµyZ&)T1 ]Beg/}#(({VJ˧:빊/tFw?k_pL'Q,w0=~)ίď5v.K5.%XL\mOLÙQt[cQno"o1:oo{T45[u抅 ;=.հ>9r98J9L~?܎'!p[7B5pscz7r%?O0a񚠸VPbO'/%:`BQ"0{.&?W"f~'(O_7g\LI dw! Gfެ( *^vQh&Ytaڷgq gٚtMX^sn(OCN,XJٺ{߯ͅ}~4A3ӂy^UGtLhJP_,`DAT=!$X`8֕ V>/.h#h-~Ǵ|ެr4j/*#2T3A,%Ⱦ v|Ǫ:d<$.pұ0=pewOZ ;nakhqp:g>j1FMmq+=_CGeeW";/c@CXgK //x(qasyM7%<^{Gxz`EPslAw|?"kGhfK%Woș ` Phn44q~f'm>>,Ji}ɼX1>k?i3o&ֲ6(xC\ ^ oLonJ "?s ^ /3, 6Ol$`<7ߐbvxƏ[Wc&cClO{g9^Vy99_B+l7c3IJE|w|R$ALܖ48ɿӑI[68sAWkrtƨV'3Vo¨v\W& v_gv+o?2E6[x]?buACe):0*߾eRJRx5xIVWc<`ɞik"WѳkkCVI%nYQ#^SFHhA~<\‘K?U|6 uD,v|Y0 DCK 8&^3>Z5L6˜g&#ᑂ–m:2>Cl_?jg]W1Q<+kAt&4 (`'w&4j-t+-M*4O Yؽ]&Hjނ !HƁb)5hkA#~Ls~!ȯ^?|{suJB M$*! wO wIhBC3,D^+'g.7S)EY8ɳW!bC0Ve?-EduA1y~N7s;K}݄VzHo I<*|ȡgRɾL`;w&_''52Sɻyc;[<ciFnu{mK>}!z=6QcN@7wg7 @5~ ;֐\P~>%ȷᱭֱ?qbkKw'l?WQ[ vA?m` 5Zl舃*X6 ڣ.o{ΜFϤvnjfObs5q;P0ov +h'!H_;ދbuSm"qSC qAp D{ A*"=B="7bG  DJA tj^O,t Y B˅ bAx.p8΅۲C ^RHY/0io27.f94X}G,vV^u:jk6Op\ry6,<#A>D^! GB4xh'738ᢘZ_J_',qcJn, ڨ=ޑ@`Kfi s-=#e9װu-Go_˵~29@•)/l9L=S*"AqYy\؈F_u^`_/=o < _̋KuVu]%uk*-1j:V;s;UL k.SCe̓oC\D Ϙ9mh8CǪaEɳH ! feΛxD𙠜( VKN  ڏ7k K?0l1;{dUM-Wh.~-uF !Rin/MB(@5nE}'jebEjkuv9K;90Oj!+δ o$x&tn "H )Xo3ixL 2蜑sgDhASA4OՄǘn׶@Oޠތ'N]T@s59 ~_7L*p1q/g:U-WJ^.A:F#k[ Z;P`PP#H_ uF+EEB^LzPǭdp`ci 8"/&f"o :4`26RGUz2!e[omԤi ^кDKs4lC}l j] 0OXyH5_Gfk|k [8!pl lۼ/pK(0D y; ς갚@NLD y$(SyX=`f`lBAqؙ.XYAy{7;z 俻_Qc[[0r`Ծ h s`GR`c'A8Įw>GZnXS5(1A `|VyÇew48󮎜ThO8jw$~юBiaG|-F!R4EL6BNAUCP.#OqYq"wckɫx{]nS-24܂ZCX@jaMF{y8Mr%o;Jl$P'r;ݞ3/9, TNɵ/wN$#:9J0ޑ _Cr \x|mIp ^l)T2{AkߋUۭ]!⳥V r01ySﴣ@ZW'z1y @ \-_\D{WM:Q7yM3ͯOx M\++;U+ "bM +cWx2M^m_ JRf%]v|Ro@C5?Iw9[sYH80jn歸F a!t ; c/_ '(BAt=.;rjپ.l,=Ӫ& _AVU|ngM+Ug -)ЌܴYJ:_Al<叕^@[:ZKX1+]|.lCɒN..ɥcrvITTOJ\hѬEUggdяWؐǾ?{}I3hcgvg_lņ_4H;;^9zhܛTuRB'O鴧FBh<<*(_ d25z:~ઉm36fi_aH@ߓSMYexk-L"w>j]*c'dĿW >}|r9Nヂvf]A^##h$ /F{ w7D;h?5rSzDwLhĝ(|*q -޺X90:!!h;9Vsvz%݋mء\2c@zUn8 vg_$p&cHS^܆@8Av(ƂC|}:+sftvXiQC=,OЀǑSnB<BuˎB7{TG=Cp$jcZO9YE kx*ñJ[¥ k >ҫEۛ131Ly Rc<ڥ5ލӭC.,Bj"Uؠs<j[ӏ2uCS^MYBu_&@5QI~cŏmd=T;Z^dۣ"$c&=6kWZ2񬠿:P0XОD|/&K ivr}騘4|/A=ϒSgs+'FRIHw_ia)齸~ﱌFiaqZSj]w0{?qyo?J<¤QE 0D^<,~>G pJWHߵ{)_^уQ:jkWsC~F>Hjk|2\+ovy3?B>w7º?D?ᾊID{?:;1[&/mᅂ+ԏ,s#g7x 0)ʛ ?AX5K։3q@h#"( Aґ_)8E+  h8р` 7r]4s*2OƥTf8zhld'v2T⽮shR˓ qWP)'k?Ap=P`ߧV% J-0R&CKHHDH5aw̛l$(x낁J_qpbAt|-_k a2nMMLUzrtxZtHәz>t? oo%\6cDmIsʦM;'o7vʴ~jyY0eĊ# &%H+VIQHl+ m!Jyk31 }Ww*'uy:)`4K EwB_yOyw~sٯ`{@㳂WK^ RO7]õ5;Ȼ&x3]?.$GҜ_IKݙ ^uSh0t\flĘ{Pc5퀶lcFh eCGCjGG!Pބ32AAAuS[ 3/0(ǚjQA@[ iGqiD]T'7KnF򇲑e#og){*]|j'1G_z! B(&u|ӂp5/+!jgVE0UP^&( hGAw dx q.o)cյ vv@>+h>(cƎ\v'?PN˃G}83~Q q/Ò(?lJ>=$'y*FiwX}XCjXj!')H$_.(gnOo 5Av!%dAڼ&-3U̔OXVVυaZj43}Ǡ;K׏3G:Tb:ht|IYum<)&gwL6zIXD}D<.\G+ƵqŻf"W{{Xۭr =*W14tq雪ň ïOÍw NIS{'D~*_ <763"wf)»rP]kƑ !:r7( &Tw1#z\{UD 4hh'1#מ.4M{(=*IϢ<7|c51 ᔵÑƖXB8E-.ȉ\k |<Íi;o'H%h hP cߚ3Sb[`b[=-LoNlY?t?bA7u;LjV.h/H/ +gk4J?iƬ1` 7kW+rOfcq)V$42G{ᲱC эwEЎE[dS7Dj;E}<ԗ'DAXjάO[?wߗ׫:k*O(y]azXn)!ʉxy/_rx'{t`>dWI} "z9H,=_iP e\5jOBQYT j ՐT3z/ndi0˨! xg O,]HAுNS:k7Pl?dkF=E\g!h4EV>ۘmi:J&;FР/ynKأvi:-3ѐ=V*s *헗S*rdn-Nqi%p=LdQhig/u2ɣ-j-JqҼ /`u%di↾)H,񋉊C-";Kg_ πYa[ &N d)j߂rN$h~l!МRMP64c| ekCAm ů~姿ŭx(u vc8;w=Y>fʸ)k3olQ۠d3Vq4k+թT[]i'̚IV[E'Z]X:‹j-Y}$+5$ (.vex` gPT,h9}͘6$ # N_y<큉L>oT?$H4%Gꣾft#[@깬rƱ~+ Vә|zkdQY)E[;odϜ(y]~Wa[ k@^$ȉ KgςtO{ U\r6ipmd`k[ܤ _`&V^ @^ƻmW@.#Ud=3F8 : پ|hC ~x÷s?Q;W0W{ ?Zk519䗬hS.l\ 1FE]g?Fצi_$R& Qrl3d8NPeL4 Q_' 94&"wǣ,ݖ[/'dž{O*w3><R\"9FqyX;Z؀'8}sE勉&YUM̀PU*'l77-j7:zQ4"ڎryeT0IkSGFK0  )ln&aĊEj e+"'.֒LH'yM;r qGC(FCꗠj8$A)w)kӸΤXoT!}?bim躨|%6Ei?H/LG~dw3j1rU~߱;" C^ۈ?U餠/PZ+L-"] yT=Ě?%BZP^.(t : ^˜z~*g3*9>I G~Yh'Ȇ -XD|Uʜy?yG;lqr1[z`ɫݣ#yмԓd #_$YuY%hAے57.Y)u/kdd.7rI(-Ĵ;ELtaRٝ袛dvL.ɑ5swKO/=KiG-ENwü؀9g=GGx0{ܹHȥ;5cwP)H{ ʗa[R&{&{%o"?u/>T&}gï/j~єy5DGzПf1OF|Zi/x1`tO'tO}|cșSqo݋"_?WVه+ƿ!o/ !Mai!b储 c>r3X}kA~8L^N : d9Z%ޭ"ȷ%;c@ vH~3Q|>rpP܊}$?E~;8ΧFuW}i< \4Ԋx*1M8F=]r m?vLxb6D4$>\OʛY9pwԋ+BVi8r?"ӱ-HdX,1Lfd2ܸP1w=jID}"7et/~FH3?sb>2Bn"6^A~] (w;"'.), [$u Qo@IDAT XXy$Q|6nB+dKƦgK$PKq#iay@k=QAMm[^Əj2aDMn R97@3'k5: ڡ ꉎg{PY?A˅Ar-Gƚ8ҀtZܿ2luXʵF#dodh#-li4>г6}![2~apFƷs00&be:y  ,(5^}駚xnQ73(o% ~¦5~i\͸s'\_inJo?ҊYvK~wBD7+p@8Pp_Tƴ~GATݽ*L~Rp@${ y ~"h 8TN-vЗ?Wq-k!/(O_ k;4 LRfEvaLt@g*J1Y^k}A 0{mݐF({!VӏiA <29Lxp8Wӱ]0=\!yʕkYiK[ghN\e?EߦG7~VvQ3S!DaƿӍ_{L ~P<I ~K6WUHMNEj!W"5d;۠ UNJٺ].% 8* o_  Wݔ1(|"2i_B2+kՀW<]OJ*7tA_${Ro-P`%ꀲ#coXk)\ ѳȑf&9DБMsq;ë55r%NQaMd:C$EP[dz~s@-@? D=\I'knӰ-jAMI֯n'wj@AC1}3gLF(Yߢ=3jĐf;eļ )lҞS*M[Zi_/ånw\haCNj]ߡU`7N` =_iqwp)pGN^Yۂm௟ϴ{阎,{M}}1-{-̇&QA;3L>r祟|Yˏy?oؑè7H߄EO}:IL*½?5G.;bفpa¨1w|N$=grkߡN&G rׂrKA9Z.+_F7?O t^ C ((:nU6xzf+>C[g,7a`'Jarz# wH\<54ْ -Vc!^G2$2EG%uijv\k@xa. ~UxY0Pw>^?A- ւ| QYT}_ڛ?_j Ap^brLplzsD.3bMpѨi u}~X; Nzn;}ϙh ız`I h&z-@AJ \e4L:;Wj6 @nlvND`rt9?2~bO\JŌL@`F{T5{>@g c l5:2]P-_K V^9JGd'y3_?! zrPcbǷ ~{muAR*rGT'mPaWW/ ' I #(Yޙlȗa!Y:#,ёNO-j<\ caα,8P>m(M"se-pe1ڏ \5X͉L|2ۡ*]Ɨ-lI*pGth\=/DF lcM1yDowp~$mjna7|MSi`P{_RK;VgnoGY;PGQZTelP!7J$%g6\5xl'ݕW.؎q:Iu?=|sw f2%He}ne& 6];ٍq8rx--Qm;o?5˓72-3B{ ?H/8ZK 9Pvͪlka9A6,x^ҹu~۳L+ N$}L\G\R 3Cm7JrE gǴ hz[>> .nx{;-ydǂr1-h(4{dt rӐ 䒭s{?րK/H,~g]_ܖO_fwNJ<FcRn]7 XA*xdR~\ex* xn94aF:ipQ_~7#c2O W|`1ܾo(1@*FGɞg%)2udY~=j+ n=(b-(ʛ=ܾg~'ua?N0. \; qC DFhk`rgsTw 7э|^xqA`2~ߐ[#ATn@-taЀ$S֎fG IGE[h9s5hC&4o 5lN_AU|)ȟ=/p$>;l% &2/"<(H+N|%(Ϧ grA` 8v J|$ϊҀg-'g %%l} ΦGP^2G3[^ҵr ];KܙE:~F]$4(Z5Ol;؛fm9 4d*w>ӪHStwd`×$ONIzBe,a2ߕTKN,!Y6tY5."%v^dIE%y}jYqɉkD-oaE@\^`zŮִV+ZF*3{ M&ԣ B?wv. e{ /|uZ)g㺏L?)\h;.koKKm̩64SQEdSJo,iq%#K:.; ,ވrr!"#M/5gC e Zt oz5~hG~^{PeH;7VT߽y45;{w: (( *v7{Eԧv}NRJBݽf"Ȯ'9;̝r̙3Rd2եr w }ez7_! R8oo$dFzBΨ|h~#)1KJι 7Dlv7v#\)4Se߈|Bm %2 LgmOz"Ud;![@?~hT ?jěeg.+'W ds+CsI'(ii*PY]uG?qv1ˎ#T#)=VoROkc=~=o/fmp,xsaU P=Y8~JY= QX渉|'=hzv'-$E6p~ <-m .ގYa[hΔ mds sfh-yrV <7"X׫18\ЫZ1حz\bk=4@=X+)x^6t.7Lx-_'O[?!2'GT *$؝ᒭ K ;ܕi0esǃ+GA&=O.@M$M]a7kζg\מ^կ址_1L]4P6uC-X(Ț[2O*hm)G3:~K6u4Z|X-CXB !7V(@* 8j{~߃G/o CgͫzKHhBVM0 Jb`ہݹ&ݑ,kBٔGKQS3w=#8D_P{B2Vm2p&L'+@oDNxɿظ?aS;k'c#$; ){ to I62Iv"}r^n@6H34W;~Ptvۆ<(!Aal1GF*xt)Oj@uK7۔r:A3~\<ڃ&lB0GCNڙI8*IM``MX31~]@-2}|-t%5Y_@"`I6,A LHF& W^;%hv ni*0L@yR`"@7AX'x*UNAwwz]|~& C$0{A 9Pb,_8nŮD8--_bŕ> n&NUw$Wz%N/1ȿU]ɇ^u-EKYQ. O[z9K|U?^i_ gGO =-dk7u7gO3!?Wu}V~I8+vgNdqeRulx.O9Q5u,(I9ZvkJ*s{<|]IӦ˾[Ƹg IGV =ܛ^$-巠~i!eS0/ }z9씸Z*K/Z8/Zo sV@}'P s@R9Q1Ÿ\^X@} ,@gli!@E{Qk*B/d? [G[ P3bj{:jBAGu~DA8a)1C3Ja-{fI|^%+2 ~i5rg(W 6]c'?6uF;b]Nh]cj#37Ǐ|1S@[{?K7CpipNƴhɤ][ |JMΙTHQZxA|7ªᣩ\ÆqtVB~l- 'v[$~!hgDwE!|"O Կ {,LϘ_J_h%zAs_gX[)ұO}s)_ K;[ծ9S#PHG(pi< YB,XZw$Y%2ΖCI[ז؊* ~  |_㳎 WX8.%y!J"۸'h"?h-yY xן5lm)F tKC:h/ W |`N}Sj|ZIwy RJgSh;5 F$cYVc8A=lFT F fYZ)&Y`Ƈit謠R(7q!h%ɑ\33 3 &_ږjw3,DHN n<#\&j̹ᴔ Yy-Tg*'~ w4}֓ޞPܥ_'Nd4J%~hNy cOR~-*69-.joyE~kһÝ ~hmrݙE;_kq5g+HrWlbicoԾ] Ѣ'jIgE[͆WtA78FCNO N4 "ZE+  f<#CQ[K{[y}#*rw&$%( DN,a@[ ԋr.1 ׋]9b ÿ|ut@ceJWCP].JY ;mH%>G9!}B#u{3;JyϘ~ѽ%pBfQn~/z:.>G #Kv̂bn';> g5n;sbWǶY#E0g|Mll]7eA[s t'rH?gp?YFK|d;L*a;-(?' vO@ 'd+? '__/J|m'/k <Vz/oDvl@X]͕ތβ ]t-RF铤) ,gS= 2{0ѣI`mWJ֣lR fy;Z&{h3s%|-/SU}{z :o@tz{KKи!cmғ Es o$S^.GN7RӠ|c]Z"<$NOp]$0!9@`鵨31M)yݨ@D sDƁzn.Q=d9KQ:̧hws3.w^D@_I4O~%S@[ jQ:ob ,#+؋n76%x^ļ.',@?= N{&P~kߥοPD?!8A*Zl.@2+O+CbMY4c NN;0>p9ƟRN7 Vߛv^jp#=glԻ: ]JxK 8 O 0IX * ?@AenuHb蚸-$Oͫ: Ep(ŰI)n+y>|@^|\G40dzz?_;P)2vN!&У"崽@,Xi+@?D> PݷH;;Y6wfPN! 5|{wŠV&,Dj{,i2]o|Vҝ)f5Vx+gC=Jf3D+>>z@B'~VaO~tjOK N,*N`*R ?_ w,,2Oõg\J#a0|,35З&oB9P%7R,gE`Wn70|(s$=R@K]+IPś D@dٲig"iCF{sͪ|GgG lh R`x@bĈmJ-j-`z iCk>Z`l=@FD7ohbΜ-88_\z ;h/b"yo3Aw+_ igpLNzcy(*j:MC! .F;ǶY"Z8WwɢT<>:E~M_ç~A.ϴtO_묿" ht؝SRe|'_}?#x(_Gr8w}xA#\VN5SSnbN?~hQJI|?y~XjR[LJ =^h^A$,7^wN8ED?WS o)\QXs{W}RUrAHf@o1\@M?X\w<- ~Y_xe6#P: #(0ݑn,ۡNk\qa: ;5x)F`nD@-C+ҎeTwrWJ"_>z^?MG>.Gj#LC2@{=a@;!dޏƑL;/zG \aAXl d &~GTaVKƾKUqЄ'?<){$c'|!Y}ܻ1(Sn7<63.\Kj/ :7r{$0*K ]M{@Ni:4e_3 . fndo, =H+-S2<?Tt;2mj5^{a`0$7WO#z-y,@SQOn4\'O ΂ŞHq{l/pj w׮֕3L^vg 0 ^3ޥcPuk;BUP'C%AVAuR9=BA>4t2ܼ;Խό\\%hc'б Lxn Q6dސ丁R5F1q; *5aAIa,@c&(37z_1;){QM4Vs+pafohrΑ b1*,teCr+"8=$PNMb}"JG:&lzbAy E '@Mk*3Yz7T Qx1̘ -PпӴb>>DXz0qn)92L&5_yoK"lK ԗc"t<[#䨻Gi6 J:B]?KLQ^G4`@hӟx P_ia(1š֚u8<d/hp;r26$>(6@}ţ(7^2 ^J>6JAj.)ANVʱOVMF֛B|kб񢵃&zo-e[am"7. Iڦ\QcߎgR*z@/B4>-iXNQ\ҋOO}OFJ[Ѽ{ X: K!]Ktul7-7ze%"o fy[nؠ;ܐ~{:ʍ`Zy[!{OWݭbRbx+^_yҝO,*X8+aҿ.i.-g%ef,k|: F]{3K+/B*SƖ?v۠Y ɗz#ꎩ[7urOg|O?-EKN~V7= zrd@yn%@x<)JCtQ; < { ۯL #~ﭶ9GQJhAAН/dž#1w?j'N?Õ̜}oVf꿩j 4uLv&W+qaaF&Ǖqjф^ ' p{)]h7?7џxY7 |[lRqlAap`cXY\Ez>a!KlKG:*L/4 -#^l?܅#;B_HIL}sAҲLz5%<\sX$>ZZ^Fw{4{!\O ڏ, DƦ}cw7S?"GRalxrt2Fy{s,}bf[)J)Nv\s *~Yv7އRojƄ͸y+~h&院_U _[t(+wxtq&IN|~x5_}s;@ΘM]l~@xZ>;_͜iޥr <\Kg @Ƞ@.@!PNadzm|6ڋ7Z0:K+b6Z9re [Q17IG_+8x7[ po`/3+N R>x|z#E?Miw/N[h69]t9O?$?hUUS 6rF'`ʭ i bSF^bpZo@ 2!WFkByOTs$)ŗLsRZH>%nUD+B|\ ^lZylzεsWV95ݵΒ{\obT]Ɵ܄)CxQQ|$PHZ uT_A!Z+!4A冖c9nq&1Y!Lg Wʪ}ӼkfV1ŵLcъ`&=7 4NNA7 w&{b;V+$`Hu<%pQ] g@ϥWH+\CL0!ثB2#f9G-O =M$o3R ka@(pO2m}#a@z1Đ%x bdaNN6ďaXeMũў% 6^T?gW}xf|_nʮCW9$54uω)?N֒ ?XpA`@IDAT$ /4~G@nI4 zRnRd*=u@~W`@>HRp ;MfXpfoס0*QTս:~u<C=r ,;uM2tj%L'\!:ML]41tn[Я! t Dun*_{'{ L,0P`zy)S &mwԭr]qmWn-3jJ4盼D1&km v񪂡U?uhMm8Ev=R;0jzh2b;)hfv^5m;6(i=^~AK[vkW+$x}(x!2'K01}Zt߮;à#IpQDyߍp:×T?"s|_9_H7|=YFF;Sׄ[gQ ԟGТ!k|v;oDޏb+)мAp^ЂX8|ߟk{*WF 5 -Tq tV \3Oɔu_D D rysGy;+߈ vyFX'_< Sؑj?9"-A~{>syF{S*din$Uc5Tnh莎ҖR U, -wҝ5Wb a1Z~+Ez៎{ G4~w9rl-A*8憱7۴r:*$i) Ж擐o8<=ilwJه iG .o$GTԹyK9  %T4M= 1ٶpm~= ,xT`*amxk~NOGNJA P>O 3Y;3_9Ս7͈BP ?8jt;F ?A <"O#LRV~_йZ\Wj^sZ^!g֭Uh?PWOC[.__^vNƢ+?Yj'X`/tN]_w&r9ODvϦ?o(3}>-`jV?k"EWҢD< yZ y]Z؅7!nR`A͡=+8? 1iMN甋Qmu3߲XAn+6R{ /nqר]S_53kBa66\ަ Nlo_޺ l]pMfE3W۳߽rYBjiӯ5g3G{jM ~&RΜT};fS?B"骲UU3@}*K~+I]so'x|=|@_@W t@Q#a4δc_Ј  <826m)Ns ;{Cgǎ}</gn&T l9W*1x=JhEp^xY8UNsLp:gU|I kBݸ#O1Q:-(\daiN`[}s |I`BtT?y0R̆ІLH<489h7J< Υ}IC(Q+SLgVԼoN BG@&w !I:w#BT \$l הnMRx@?] P(Rb'd+L'8i-A?%O j"Or.\>sbUYTe}m@{4Ey45IX5d2`.pzId9،ȏHUE4&0T [ "hLR&:T`.>-sAn3BzNzy֢jicߌeWy0hc7&#w{ ‡_B9L!; -Q![hlA'  knH&#Ѥ7tSA3h/I;V)u> ß:j aD*KηjeQb3A2T:Xy4wOh*2Hlh\BM_?',|m<. \-'~!*zKr&v= Hsi24R?b?qU:rA_vL#݄_gŻgUCNvl=gj$&VAȚ(PFxK@ A`8*UqȞȥۜ%S#SC II3_jFr=6vqsʭ,L!ww+ݜ&373J*ŘK("U!8Uiz|S-g炝)i |P+и+E+7ځSI2H+\HHߥv@;~L KUj%i?)G[S-1={r*1z.?;g&~)kLmE@1)XeG'si 5\nʲYk˹V<^XJWh+]⮢M°TEt76ŢjG~e|ڗ?嶑No2&WJI -h[uJE=R:7;([QYpep+7*Scvj5ظRhUDkMhlˣ(O br֒'f7oyh;[7sO5^ha:6kVȖCqQ};:KѳmL%E۱})Ctyvn:R峪h8n='YU\~~/- f1v&4nj_3r؏u'~|RgSOu_sG ߅p[)́QHU_ CjV@zGk>3kgZ=Co/_ ;ڙ&bvMyŦ]zwrZ}I\3nSH o)Ɲ3wNnńRkc§R7$Q`g>Ep3q_m'!h>!.7I |MeSoll~l~ʁT/^ >n:-,b+ ٯ{Z3z~ |]D=}71! w,)uCMykMC9gU1F_)n6>M @=6Rθvi|w$YkP|[r(;'@wTrhe]KŸ' i]p\Fl ՕTtf{Wn~Y!^5 m'P?Ox/-*$KDȕ;0&fh~F| C8a|,NQ#C玼3QptHxS%t;,4(^tT Fqgֳ&?B)@5/ȇg(l!>=_B {G J*atD򍐹skZ('쮜:YhfgC ࣵV x>nrt*gZH,%H{ȡi˻zU$NuGiDg |T|meYc\ Y h!@K9=]_!)XzПXռZ :5-/+ƙ޵X wM coqߊ-0Xu.ڰi^&m)O'?Ȣm~/sgnc #Z d* $əoZJZqg1s9%c@ص01zc&;bA<s2sp}{sM(mCh5^#<2uv;}f;E@Ȝio rn"[͡<;qn)M4[)K+ORj*{C{w gUf$O~29SF 6dR@ T^z3xpgf?ȆwUM ,gx"&n\i%ւ'JFRSr8>T7hHJet*wZaup~Įe}'F6% N>sQ_w6bn6S>3gi /SB];"XףnPE`|.?Zgz 'ږo(؁,4y;eśjHMxwéԟ.&/<zY1%y.Gy~ʎ[yC1zfЍun@*pMI Zxn"PIX'?i:)}~<@{Έ-i#NM L+0.V&HL{It'OM+[*PӘTb1(@x|"SD;ga(PNo oUvn7FYpAu/2ojΑR^V! ^ n)ZzH*wD}i>/yxb 45~Ie_{qXM,.k(jRpZOS9E+]YZ7S'Oźr{ȟS#hYUm;_H9 ?5"qѕvbrcĩ|w?@Ի.ȥ[pgzOƞPhCu{k3K;HܖLS#/ 9!U>MW5?`QDso)G4{Ek<&bGE{@򽗼9qhx_>v|xi.;#<ӡĚws߭O2_wW+z,Y=v?sZ,]|u؂XRyOݹqJ7U~l)3-wcr-x)xGIGL֚+К,]X'N}7v nB`~SsES1=ZI ~8.*8\/y\CTA5 '~~FGr[ەz'&JgZLvk>*[f@8OXxcpY|-Ў <_\\v6M:R] km ]-Dف|om's_?P}:.1XPy }~REadBt2sep n)|/Ϛ/Sn6!ϽG;[X}E5~1+I% }<))/Å D^.9?Ud)tE}g?"'K & a;n\o+mWNd9rja)tv޻'aHO UbVh_E3ih&L].)G_Ү̧-yo/'~k8}1:9/Ŷ :S>^o׽U2vIIk\ݘpGAK]n-U}o/9jUrzu&[; ع:*7;x=E:䷌#N`( PS-$ ;E~`%Uw#[K9 ?! :S?|k5]: Ņ#jM ;@m?CK"(}? hF#lYbd!9Sܹnɤ oOݡ`nN:uXkŝ\u;Q̭YMPa5ORF Hb l'G { |#1(/rOr P&dvJr2M$u%j1^'+(O~ڿZ iyn]t9ܴ5o)榐'be= i+:xs u @B@!а <"(/Dj,cdʧzP-VI:`34\#bE-.*S8L[B,kEjͤ" D'Gx2j@\:#Kf˚2X#:V;|_&h] \GsPvnG8,~ oKHO>Wd*uBmi䊹7k) y[z 9Iݱ?Н" y 4TGr&Vc })t `bNRDK7Xځ __ SK8K(sr@$5;;Ia(f.1{hbUhLmZk)BH v׹ aHܙ\[|mcd"iڹ 6/[`AܶșHao+ (0"&XӍ7 Y  "PkoE9g;rA@G8=Y`5k9˥Kᗉg$.E$YSիsUTA~5>JoUP4YEMs_ u)8\dѲѫHoьm1z9lx9gYli,-ߣK>{"]-̡vkD+?X"~}sQp_i7&sE K(eH/p0u ]G]E% W, |\ʋ+^NjָzaUSf:Π:]%-D릊w=cRΤPqB,&U" Fʟ3=OWPZvu>eV49 U\hfS4{xKponU)z7'7c Jw_)#y kϣ՚sќs'7:N9mJ HSoY_I~'['H?~ӹ|`@i/0>YV5wjMt@vzQ&_>I+&D;w鷂׿./x:I>TYp$E'Y2x7~*tGokp:rˋ<_wCfIq *"S~#$@Dw@TٲĕY7'@S@^8E@ l[X) vAssAI yӯv9=?}JZ~3dڰ>dC6gԿ NŽљn”mR/g $ ka(LvېVI1IRp`uV*nLSƽ:Bm`Pcމf)} By~V9c$?FyTEod<橊^`Kh:1i>| 4>{V9E\"@qh'lzGRAJnG>WC_,ւ aL/Rɞׅa |}ٕJ?NoA);@f ڧڙzIJ<$5SL,~86'* w LtqsiW܂~nCMtEt:1FΩo\#\O m-0]{i\@|[ЗXz{3dh >%0?񔀡}"~@!~_[;+?[?ՑETK|'/\.0Jਆ;W-0ucGWg?s%rv,[yObUs=L40--]SlPrǦu s'5Lr⼢ɧ?~kIkyZN%`_[i?x* *SzE~b; |DO\-̛},Z>zQQs~/j5Eo M쾚B2p03L#F7֎8J^{ rVDkkH{,gZҾhP?5njцCڨ{sՎG`|(?Ϳdr/ѯ% .#"LoGߏ?zkCuK&-E_qhQQEEPxBa:k*mZb̲/.]YjӟgxvZi)f?w]¥6?lK+مte&' ԺaxݙQ6OW $К tV9$h9~glѮ>e&ZH3A5C5W_t1ďNa{؉}X 0P 27%}NRFn)YrG'E;>3sH,he|e{X?~ ,W9\j01G3祈OIہ^ƎjA?^R,n]a rzs3rΝL`?* uȏB"q6`? Y,d-ŋ3+a3T͊G=ȘL?IS'"8+QvB)l+x )fMϸg"Z"ތig*ή%n Z@t;IV(E8U7'dԃcA.Vrˁ7CnရP*+ #Oz+ CJPEe ˨%V&Koukc?p4Mvl:W}m4bDž4h1uRH9קN\64rtO +;]GծY?+W%g2cw2^U[qFN9п:v8hhs/hx# |n67Ŕzz7a $z~diMDտrs\R+5P!l) gh(V8{ .Z۝=Z1ȚѭJiuҦɦ]̜^fٛ3p~ Z!TVTnVH3 W G 4lgR%oa\[H.\ګ(U9:&hEos?~0u;J`{jLfG`:wW>p@ȉ+,8#N} 0^/0N,8hh}MavG8I IsCN6h^Лw$08v@9t|$wHD`fKb@ v'UZZeLkKj3+JnZ~ x| vXMx;rHN@ts?eRD{AW^A>slYѕ-;R$|/򆥗Sω"!mi hyphYժMX赶MEvhCy0Rs5h@; ;e~y5beދfw䞢FE#ʟMIT~9N.ʣ9]wGNmX8Ap:*ΔfotFDy-\?;2Q~`ţ4 Z?u^޼)_tB3|rK#‹,9ŵb~d/~4!E jdz/!;,JZX*PZV h=uj]:f_Ƞ>~%\v%p6x&Z->h+}RR }DԿ;4aQDhs;MpBXd'?V G7ьdTϻ ~f 3J ¨IZ;19E}Fn~+P_I:QWRJ|&Aq||&VC?,Ž>?ƾό\N~,wxOBLk$bq؈hAYrf@`fN{QWR@0;꛳pu@*yE ℳ4/B,Hl);R U V?F{'E%g$"sb9`Vzs>Nbń(sve<.@;?z~ltWUW|뭪&ꫲ e?7oZM`lԺ\W\`⇗hXz=wo:;Yx#RP}[}-ٍ+s{{:Rw_v13$Ng_v9`} {%ߪ +wag_;A'GrP*풹! ;$*?IjkFa-lBUZ;or܏c~|^@y=S8[ z}߀ז H<V&-DNK`B7$؎\x?׷?Sz$#=_5LKr*-`';hC*}v8G/ݑr<4oz>)P 51B@V _Q鲣@L%8eٺ26؝{?,hs nj{) w |$5:_3yjqzV._ytHލ;,Aݟp*UJ~Fw( Odga;://\B)WT )pVc\m^눆NøjX7BL_I^@09!!)hME읥&T"|L0<~] Xpg/)q@,9 #,-W NMLKR\1^ka ΍T1uޖԈ.5|?WK'#1gb{0<ٔ)k~ԛ5]mkekstkԢ /`yec0L+_}Lm. $˖Q Opۙカ g""Qwsґ(<{Ȕ^/!_c krhiz ^*fUinMU4bD2zy&DCu@Jq1 o''fak"W/Yj8?\,WMrZMB\qGLqIEvEF%L\úURIJ'ϝ}Ol_~/x3$!zωU|xs/ܸ@dJ>Ϣ|a3ԯf(2+ G3z]z%U.GՃt[}T,N=X=2uN<7RSk讟PkNw]@iB:5?Qk|[ξnvvFS[Ll4hoğ/.$7,t!_ܳp~Q>z_ދJi] G):ȯj_JI|Xg p,!gw1ȶڟ)>L+r?ƒZOVf´ p8p)7kP_ةD;fYRX$bz<è",2:Q8o>gg`1 8S^zc>s0@VHNZj.>ӻYr#q^QW!^LH5-"ђyOܵ~9<5qaN ng4_r&p>_'4RS'䌚obM}s^\L_d#PQLޚ|@@Xjz@ ̧Z`-!Kr7̐RrLm8$DMПv98)K&ӷ* ei2[{'J/jݑ]J~Wm*B%}$͵G$H;;uxUb8D@ʌwۭX ^g܁oߓ%:5p 96΂pZz{ha\G{b˃,jף-i@6Ў2#yE# @: r +xܲ $?%.&Kڳ? ,b:<ۋ`]ÚD'~Yb>ϧVU~֞aviy{ht<>-Tz>#c3-j@}1@F}x97jRXϲ$?7ܕ=-#ݷ57C?9̧;pgІQkҠ~xcj/wNݞlG~+vGO?n/ 9=F]9- ͏oV>b7G qqu))?{{@0 nB.>v~_!$xTP +_|N7(뻊IG,&n1hlhL =5x/6p^aq yW'p_iǭ;-B@IDATݭu]VrNfWixًNƂ֥+t~Edl %}(:|5K)>ʍ_Ms2y=4U I~9Ӑ-CIp+$z8 /N3-gmdƞW+w7z5g g*oi$09R@/r4i? o>+0o\@z#@w=E`pP`:xa9:&P#w_O[-ѩe}}:S@O`NrJ-Vל+rnpV{s`-q) ! xSǯJ[FE3 (R\9y6~^fDHFrFKfH4B3_%qzo(g,3ou\y?hM_8t,wʹ[J!hKam[8Qĭ22g8g|jOk-nQz7*EiWG.hKL؅K ĥ?T|<,\g*>m[8~LqZ]U/CD++\z'DQe58]ChwrMq@qk jй !JprA5YZlŇa{]EW ( ! RQ粞Q@zȧBh9@6( ;DgQ@i PjJ!_-tnrB]܎SCMIp9#^vI\Wa,vmXgÕVw&='Z`V gn'k)biOE&_ܕf:hϑ\!9N^'wm(iPX'ŹD%9R/| J ^ B IG yw9Gg7k 5+r\^ +FYψh?X5_ڧ0@ts?h]Bqp@\.Nl ~]y}+?tC#Ծ>簴۳?ƊV8!0ÓXicX׀˝?jxIS, loXJZ0 4e+zO#c9n$nȏ/_/җ ;3凷nN :sQcò=:xgMQi(aD~GiϣR's%s=ZQIxCp0G.Њ*p=U x-S@]q~ŗ_0TL-C*ݱ 4O!X᱉Ou5;2HЁHMkcPr$ȺG(mY;l_&әr -Y0PTd?Q@?rVMO:/x*UeʪܑZ./ hT-W;oE ([ KX*(' _}r/' s@".1cfA ~NGX %Ȥ*Z6&)k=$u!5=GLܔG^ILiId)r:8mz dC+ +9g h@7+P D۟%?$^KV ~op=[HpNhi#>zڙ^\k@@iJ`gG5z-[zV))%$LqDG8u3ńxcRjb@ /aQcV&&1Ec Iu0aʞk~a 7nM]z/ЙT I"pX3^bΥIY/dLx@{'N}O@M 2(Wp˽/thZvAw^Rg5EFw%p}]TR=Y:F Z^]]{Bp|MggjmhA d*[DQmrRmhv 7G,$%j|$|*7w[3iiSHx**HPO[4~E~!%{2h/q=z5u3 Nc`Fѥz=NQ|o_~ǭ_P3k&r>(PvCFAҗW?-i=Eg o(!pdz?N }R{9@;Q@@`L / K>?3$ }@~XO`7G:_`z~ȯȖk'94)"7qջI?m *׷Bb*EWFOkzTbcbrŅg9E~QCt]];s7+r$$9v夲~c5V1e OMM;&!yϭ3J|s?1YGeg]AA@:mpE^zoōQ$ ?~٬8Hr)?tQ ^xoNG%>Nxd^7fSͦ!ãhC߮cfn,."%C ޚK'rNYѸYn1=╄|'W߃!RBYIz/l)bHJ\4/͕*׫𳢩,xpsyvh 7ޙ~@E~L,P⅝,%w2ǰn ha:P6&~ ? t@mJz+ Y</`"#A 6>Ml'2ţzKs*=bq0QlPǣ=mnm9Kׄc?6^8@U (*@uo :ϟtr@l쐽#?O&)n~z{*\8~ș%iտrLotD`[ ;3:dp;4:&u"O6;k'ڬ7VVjqqNJ@?^@:!k#d%Ŀ''PK>e[S&lvB]djsHbhwr+C-%4,_m bK۷h? c'u8Zl{'FsDЙn" YHfw|z^uC5Ls~Vn;N=g\WÂ:{)p{?dmQ>Bg\ttlOY4*y80UrH婽錵"zt^tF-]|&m;'/qsܟ"Pjy# 3HaYk\z>s 6Hz w<+9KINp9-,PGT͘tĮ.}ό/?X .9o|,u@9Hrv-ZE༰/|v8x [ L^S 0@*p_-S \e#@;@S&51 7 v#FM0<\W;X!tL[|95OP5l%L}47>#8W2Y;y^'Ԧ!pL#L0T?_ y;ΰ ZPɭەool.O3U]m_,$72:[w@xN ,ah~q@\-sC s$$ޕ]X1%73"6~.S}󼽌a z~uuu8[+EQ$cqbsZM3UOD mS*1EEGA[6=G`M0_zXUVo|GVx'HuC\uh7i6h54x`4J WQU ?*Mh{:Klus0ZW-E FF$E"7%=}c)/@fRMZ;n 1|~6_ [L`'ykƅy_%2$Qp@z(!Duj { 4ۃoދdXWgP#f; cyً3N.ȯD $ҹԼ%Cr%`8 88_aÁ{3`VX"&9[6Y]t+ )YzE?K\~"wfpbs׎oy~_%w8mǒs||^xzAݟTm>`u]Iɮ*ؼ9^[r,.EԠ&(ZiG4"}gHVlACft*2]0is'xIo4:h˗Aw4IdGO8l3df_8d vQR 1K^ HM٧9HnQတvrs~ܟ}̻[O^5jmڕҢv&["v#7  1r o 5 |E P/}+$k @ZG _[aJyLPϟDk^xJ&<6.^`؛23wbhbkGD+쥩sc69v(~ِc⅌~AFP((PbSH4 uo~V\\p@twF!.?{=?B`~HX\0M+׏ 3Q}3Vvθ.JSn=Gk,DA^˰tp@J$*&*(og $to$~";ݲ6H>jIɒ\;*KxWš中0m=HMI15pNRyxҐ'?f}H~̎tNťv+;Xu ʊzv@y{E  G $1_ HIz p+B.  [939IĊ {@xi*.h(? kQ'B D7&,M1˟9_xeš`-B+e6$H;`…[z^^ խ< I$^I; sMDTSj|ҵa'ļ59 ~h9R?TMN@Oy^_f"*P-r3/H݅,U<źXz@*"-H-`r ڴu|nQx. j`MB|XNέhtv Qʡf6Ø n]5l휋sDdhl-P?~o#ؔ|*г$h?< þx+@_J5H&X_ oPl!}* ν$0'SދwD?5Ӟcl#wݠkSNhL+rGhfw/S;#xr3zg6^srw=`C'9tK=ǹtlN?k世wG=cw~Ag×SK/T)GB<@<: 8G4 ݽ&m 5M׶uu#< =PLNoCXpŜ\ On bm׳-'+JunI D Q wx ~pXL4F) wx)>sW~?ϲ[ڑh[0. !v j'+S+?v6 ,aF&Z)Vtg1ôYcU.o$&HNU>O G?7N"6圜,P^(/]' _˘@*y Pi,TQUY4c4&wa\M^٭9BU_0ܬ|֜b=68 vCւ]E =^ouu0Xd.._w!ՉOny87owK9dXӂrG!Z NI ''ζ$RDlu2 zٷX^ VMⷕOlt]D= z|ș(M̓ô{ȇN}ן;3qȕ܌޹;}hݨ<0u]}#*w14ma~Dz;X|ZN;]?(o頍6*KzwM.?YV82,O-+[sHĮM)7m?[ o_MYP{ԄQ#IJu 8-M|QK-u/pg -v4k __ 8De\}MG,F1#i  87x=$:'O{}jW`{BXs6cp19W@E]Rv!G7p;A+&u?SA^Hb`<*w^@G^O)= śVe%I曆lB:5?Gʿl)ܾ2G:LW6Z%[褝g}i׬U45I]\k`ѬlۋԻF@gҙ5ɋkF!?/.->S\ QՏ3M>.wM}^#CW^=QW]:U\Ӷ*qsj 1 (7q˺,pC9>W i_ȹEU߉/#h73+ EA#ywOSw>a)5)rNq4BʿjR]t+ rh>);;ZTr aOnLLnԼ'Aa[\|1c%a 6[cAwBOU! <~9ֹ@L}lT(6E-ف|upMRl'];a"y1#]ZE<'-68cs/,sjBOrxV`YʳG,g$XE': =z> k'Wk4qhm .w@MjR;C)hW^;:zb$j6, ?Q]viK5i|R &J@['k@;z@@|^>VFð&IA2ā\, wo@|m]+ת"2?NNƻqؠ|"s^| ׿e(>sm|R५u7KpU}%0߷@@VAl쐝T Za/P .UN-fXޟx]} 7fX# vM_i]c׽5=l`]EЗ{2jF;XQsN%[*(D7Jg3 nޗٞ"Gڗs Hܟ>r$}}_ 4黯@wЎ!s J71Ȅubtfx'(v2$w&XeέP?юZ?7(//FiNZi#|^dQ̳[Za{k_^@}}A@@ l<'ʋLEL$PЧ* >NXfQ5@(,W&i׮0t>R;N`HL?|VV@WfϽ0B@\@=H S麥sO P|VIВn,ӨԈ0]?xBnn';,8Ol׉8jh8OˇG,L\սLI1]t0SoW?V9qPᮓwWk{F,&Otݙx;$˗{v.qhyKI&|4Gq1-.px~G;7皉t]pT+93th%ngp.̿J%trܧ]%f'rz|xj̼QSu"ⅢI6eR=b)z_LKΫv a;WZakn'^Ԋ|7>!U/z^gsUORJ+>rjsYKLVO'i?@5J\ P;NXȄ;XA,7|X! T~1p]Q|g ռ?.h#ÖWsճǂo>p-r&l ]faԂɌ|_vOBȋ'Qj.}ͯF{\"rFz~!) Ǭ' n̿·:Rv3O!gڦwJP ;*pL@x`vԅ3Ћwb*zO>,=~gF["mlI $OnQ3)|m@H('[{g{x^@{q@W?|(7 įRSيNnG4OG?%`߰3mjv ΂Igkٛoo8Ivރ='-+K܄8e}b%r7\(0Q k`Bv|)CKmҜK&i0-^yDW?gI ۠:_7 qTe{;=R7H&g' xU`ڃBVϞ<ͧ鲶t~MSܦm4ƫkM%0ΡIYХhZ=X+ںOk*Js-Kr;FQj,\J /|o ה& t~H^& k hGspLu,2(5OGPXA gB0A7ciV\ؒJʏ@JIvCF?،xdki|ۘ# |fůҺR@Mתq1vt7d'iV,x:Kdnݮ0+9ͣnkh:LzjZdlBO&kڋ^@2YWYwJohI<^?Wf5xj}_((D``^xHl8g1ZIZD4Eߡ/+JMa脤܈- t$V=cY؜?R*)Ɋ3*'TVќ?7L1hLk:W\r𪐎. o. PzA },{ -J8ko W0:1unA{N|:;`O}*q}oqg٥Yϫ?@/SRy׹MyIߟΖD~E@p~0T ?xW+X̙!4 vWι)sE?ޜ@؛ v0/*.p@vhc+=βɡAC_f]P\; ڼq{;)"LrJ^ju Ejzq /9zS 9{ܜ Q8M\莤'_wHWv^N˽K^ 6 Ex~]ě9f|#]ː蠎O|xaOjsųfO/yqiIq%w;ު) z\-%G K):I\r]gStlp`ޢ?d#}w_tSSY wm۱AGqZ[n5q;Ѿd}^{:<>zSg_R}Y[v*_d daX"#~I.R; · bQ 9bKCK4f6v³M?jpvޔmg m6AZjj2Kֆ.טRO詨,I?kO<ȿqx=z2wk~@/@_aqK cN#IWssV'}B`~[Υa2w~ܪ_F%b}S[@5?YshqfOsv&h`X&dϕ; '½ĽA=іZB44Q*yU .TFGIN)|+ͶGBWz,Dy1_˼;Ht^V+[K5 >5ң@|+?ij59*s/kzvQ;)yfDZpcYb~`^$_GSo4~QZL|Q2w~|/ ӆreO ^?:$CbUP.ݶ2rDW?}a-h <;m~$Nڵ-3Qj`}3-x\<(axL3/n;߭o*d?;$@S ][UL#f;RgmNn6%ZK,s4ߟy~]}>랶,:6'X<փjɨ&& @p-) Lb5NX'<2؛[9Me<@^o. ߜI]o6vgRs`mA;ا['oGkaǖ)lG-LLv@{Ax'W%/[ } "ÒG _wBpvĆ*/r%\/WPA)Њavwei}J}1u,`YfP2r")C7=x1ģ?37a".q@`$j~'S~+ogf@T _3Y)rS}t\G{, 'N%;VoW}XN. ' V`%{*^Pk/qq^SB@qbDsU;Lrem#LPUH0\o_I~vI) gL-氏,?GDug\$N5Dy{-hmow/WYt`.#$e/ȅS\<fImK6>\4U\E9 /jj<&C@IDATY=Cէ8>y 7U3]㽪]~]V<r,/(YC ,xB<闉K5P7 ݾHrUB-iSn -]9j~rt⫎Bi-ۨACӎoHsGRkv-:j T]$A@6 r`SXA5>]P P*vX4G@O f7& T IgJIN1ޢv:wё{ړ` z^IGZ 0k+L6i⥣oy>ko-$z H g}~2QFGOP>ψڥnh{0Gfu!ϟBg\ȟ`,|O<똃N߿@r?"p=PزWAJ3Mo$}0 C'cb:a̟fOڻL[^s9ֆ\c)pxH.rri\>>hχi.v0 x,~ 0S\wF»2/X/|O{bK 7vȥ%S6[ ^oUt܃jVU?r6a.%ul㰬uRb9?AZJ+%gܑPiUL?Oby 7 o? 2 xP0:A13wh0=Qg ٱM1Cx5 փln"*od!u] ӹ χ0oLӂB{2|.1Y9z^e|9v T޴0/e3 ۗx"] aP& Y臏Px, /%_d1 2VnhkȦmVOj Tr^]/H00|=XgG<չ2}Sp?= I0͉A\T&RM?]@ @j*|ѻdwF 7R<ޡ I\M? U~b~ ^vbAGqLaaVek@#‰J[`8d470 >hXД~~|Iތv0A(.W L+'$`<.p/ ·{fv>j@8Fl)bܯS]tGNlт]AIpz5Z8m@$H'm^ 7V;jT+i8g\7@}ɞyh OeYvTWTG/ )o8Nv#R4q'o\,{vՋҷbҢt]v.& A%H,lx f89Ryt|[ť.p\T--ANG{e}7Qh4Q;nZ O޼1 >upGx8v/LMܦOI}+2Vp_~5ThJ J˷8|8,P ; 4I]ۇf?sj eN\gj@r\LLmj5DhS'gKƁ.;|嘱tgÝ/˽U@Y[ |?7y&6nH.K7 eT^~8@\09ܗڞ6ݠę`g8o^8@,#Y7GRSowJݚd|n6D#Y=~!࿷3 zs#Λ>D yH]O1NÝ V%m.cb4aZ~`'g .='3#Q+}m]%۝Phlumس4&-'r~x<(gG ?_@]<]@JHO D/߅d+R϶<Ɖh "ߋ#񉧵@ȜC&"-Bw&iX޼ R*fy{5i=#h/ң`ƥ/7m@ȸ=NuP=(V/L2.'/as.fAWڨ=?-o~dy39vCjs O} |?$c/Gp &+~Vю&’gMŗ :9D>ab}▜`~ˆBoS:,Z'֒,cSm{O7V 0'9hv0g@}EB?M4кWWYĽ"7Cb;L4گ0y Jlcv`xo0 o<`; BNEâTf)*ܟb@ٙvI6R+"|^#Ѐމ^ҡ_Y <(>%-7WKa߀<EYzXHL!Qd|eTY 2w!wL@L726S䄄$|&pߏq $C7rp}l{3Dĩf' @S7ߚj!@}N{%vg" Ek&PE/&? 7MPat2D:|7Y kWPG@6?'PMr ]U&%T] }ZȦHd_ğ׍"{Q1YyAb `CyYЩ` $1 #C~vEM={FJ#vsGwNd "[; N\>a@"ğJDF0dQz-tI _Ŋp@wœ! yBf N aN?'^_oQCHq g瓀~^~f.g=Y{j&B-V&{cucw%QDcgw#,#su~\(P>пrO%;D/,ddZ ?˾](>-JUqR/iB?U#xN]߰n]ܓD?i3̬wˆk%v&S ;сnv0IgB8Sr^U !P_S /0|@yOxvlݦҸKpY!A8{ux '{*nm,trL7-݄t$J/[-ѭ=4`縞ϚrǑ H] HBB].h7ы-{_YwO »ᝃ `Fx`#Sy\7dEO!#p0/Ko}+8P2kDe&V9^dyjpLhvsb˖يt֎Mz'Ns)X7A9 7W<3Cô-m?3riiڪ]os8;Ug9t bcb'v]فb7"*( s9{.)}]g={f5k00,LL:RhXοW+^ yW\'}~,\|\PM‹'nnaA0(S?NVӱ: z'w>L^J;;:Ag0-reHX"gdSʅZwSܐrc7r5䝌> [Xj"ъMa@Vȧ/Xd~O=7.Zн9I_6T/gO;40-cK8ڴ*wes@<a~ƺ_5}&P\ y5m%I6 obJtYLlc^0*0p uKۼaUq97膦9Q'1;$5-4a=24{1;} }&XgFس>Se\b} #EQ/οmMHfpbhgٽ#16Xo .,IBin9͟ʑnWK5(rK:`Nf|Rc(+Pc;|\V_ Гj<u`cp!YL`L|qAM+%7w͡:Jd B>0+_[ ?bpw U>3+-KQwOyTZ*/6 ԃDQe= #z6D  (uF %*%@Cmo;GB`7\`seM|ԍLO\0k'(Zg=6_C8D }n@K ԃp&B(qo"p@;zX&l;,D`8! w[Q@{0H_[ ~|͓r`_#Ws}~T{dR0f _u}VL*VLu.eֺק^kj,cgs-<(PN{>j_w )pCOiwԂJ{%Jc@;g0nE7pJ9˾d,BPgN_9"p[JrTgڻ6vX~ ֦1yt £Ze]؂>k'@v_整ʵy&p[ΣJr7 `\q(2mz'ífE !Jw+GM 1]HPHH4Qm?WK ?VcP|d{cV(W$X|eH%iⷫq@N7eNGJ]Yd $#g^U.c՝K5KeK2̓8%űG52QJ(BG>㗳Ow@3e')/i;/AY;_, ʇzt:|‚rC͵ʣ_<>[]'cuUq<ײṬ D ll+ "=%,yΜ;57W0~A?*]ܿu솘75VlgD=K!^\Pm_\ʻؽNϳeʤ,[>RG<iGO &+au@z?xg!cSfg=(زUMrZ7:\?e_!0tMw7:)>=~ B{RGv0J3RuaEϚP_/HC9 5^99P)}mb-,p^= db%,823&R/[LM{CK4xKOsSku|)sMXt$/L0,m%x)f+ҿeu ߖv/JڠG> N+sD?Y$EE.9  b~)JD60YNQPl^6L}Q˃]l!#ptTP~ sN1rmWoQC)חkgGsCeRKh I,(pvvYU]^tX̊ܿ<&+.s7->*YJə~Z 9@ dk,CZ8 dnw A) dj-7X:=Bh9y{TPLWA i$-9VL}Grėq=]=yǘ4Mo-Dp;[\%gGT(M9K- wH(S]zȚxk7h 4 ηǭ1${߫1]h)A m_OW(mM]R-[Jwr),½q,gRwx_(,Y& h<pU Џ˼#ɷa@/P>x*?7\3z߮cRLVBVStMy v&σda2hGlB#w%VZovXc@X`NI='0avP~P B6vh<^sʧyvΊ?Y\=Yb1p2Y%DYoM!G6loو0J)X'盀+NTlP|N sPVr@{}T#X  di~gM+)Y&v!+efti\;QZZpΌfx$;y' >sJr]_ ¢EAq6O/qtĖ?XBq#}[^uL!ǵFGQNߙ%@7qk@u1Wgb[NPd^񖋂/ȤW why@x^$,"*gq?:e/91K:MVb dB_ɗocth ֮c@S[E>v08LBwvy>aUNDW PD94vR L7X Gmn0Y! 34Hs&, WtI'k}@ƣI4ږ: u0ۆ65χoeb<׉u#`'/jI%CΝQ] 00,W~o#PZ )}P ̅3:Sd&)F3m흡/GINt-yK3n.owJ5 ɸK!{eFsey|ql9_ OC3L!}^[ˊ)蒺 < " W`ap/V g&4ƛhs|Jc^=_ҏ`M} :R[k6:Mўߎ9>Ƶm r&`4I:ԗNnhLqWU:;<bsKdv|;! 06ϟ L#(wp{@>?,~+l"@h6.%@/^?K\:8,n* G>& h@{>K(HE { [I [`-7%ڠCT27.ndii/Aϼ\ʤkBz7ݛ%xlWi۠C( rHgBru9F_*mO,ضB@-e7/O'ׯ"2teO2|c $[FrLT0r<Ԋ{Cʓ[qb,4#Pno,.HX0 b2w 4F,t8[sڮjG2b@֍rsߘ y+ϯ8- 3RbRD=4GJ1}\%obZ9|Ԃx$HKer/@?xȝ׫ºTgiøfPXw>TL.:11ϲZdz*T9FAwⓗ)PPA>qW@+ [ƚG3 < 'E#1?|/,u<>l[Q } xͺϗ`iwy/"5OŨ أU*bCW{BSyLh(1hgV:x̾\_w16c=y‚VY}aGn(&8׶^##H70>f D01(`I}(Ҍ̞}K({YWߌf2 L9 :pfp#_N:Ҩ@8Vvh"pĂ *r,w6Ȯv>kvݴ.ao?ŵ+{CQLƗ`L/R/s3W5 !|Tc! 2>tygRϨ|B' [a!.'u)z}/{Z1C`?H r8/h:%X0cs,`闡k1AGO ~^GՌVnZk|:rQr4;ԟEs3CHԟP$+wԇF;MuZ?#T|/}D`s@d]=uٿ R/)0|N}&0;ZE\ > O_ ,{)Plk t=o# :N pAͯE@@ЗuCy eiF:jX)1[(Jθ;L4i ^1G.ݯkLJ0g8 0+6v~V Ӿra@wعm753ukhÁ-ii6YGlzD =]$j'[CQi֞_"=oLtzH3c=Eg [vƑܑ3|dRצaf ~)]77@'%'IØ'=t U7E ȏNB n]@MvbvjIaЎfg{zoiƕktJXe7{Sf ‚Ma IxN|D_>oz6f!SR>/s:%n@~|(*eƗ^;5%GhD-khjթ_qtXTA~Icit=t 鍿I~+ƟLXwA\SƝ+.B!>zoNAYoyB\>Khc]\?/ 6T|ȆS@:(@ f[y6'KQ vj7RP *QMʧ_|PqmEJfq}U<Nb_?#k#^* Ml7p0(k 3:%SUna_iW8~ ^ T:~VV,鯔h)ӐYA 'wPopS"gW @x?t`ȠL89MowMf RV[*B9eܒdz&tO,=FVkWq/Yw;uLo+q+/LLqn+0fسZ {}[` ; "IL 5ѲJw8=S&'nh 8&,Ypagdpuk3mKHO{ jq-ٙ=ױ$NG3Di؀ƶ=4(3/!`þv@k!_v=$ oy[>Rm)l5|c]a2k lh-7s*J; =¼ϰ{ %U@77%G4aVq67X]KcYZ\[o1+uwܾbް)2wi@FIYUf;W2q4OWsgWl;h!NCEK_U,ZVN=6ZE')k,ZwHDOwiqhkMGCeZܬJE)En#vN#ܺ~hlItGI}6|}з+W׫|}SwGyƤEO&:kT_U ^kL'V;$WcoXKK`bØ+= y`Q09ߓĆ31ųtg^PZ@J Ԯ !ݢމ(C0H=bw5) 9?25#+'bypT&'Be1`*NLW|(/uM1|;#ny:7?(s+/ ^C4h^c|~D vyEY??U a}m= @SbNi5vJ{Cp:%_(mH"6gqt3fpn9ĦHKz2MYBPRPaR+ o7$*eN\][MH_w6Ռsf@{{GJGfgCr/t.[%]Gh߻/==jڹBo0gM;Zr '(;Wyp9]|z FFMgBi]1/'ER@Ѿ<0Z( ߤ͡_bTe=_2b#ew7LςP>ѿ$K(H ]p(@?Ǽuز`(K~%5ټvt3{?s=>!_;zV=r]Jb'? n !i߱rF=0XrqTWU#on傜t Hc)ԞpǢ6+C2݂VP7gbs18V`FrU;M7Ga +D>Xd(3gn%7o7+4?9B@8Pः5ēw|v`^^O}"Џ% n=~OPϻ.';LVV@‚t0Q_ZQWMLuy# o@a8|1l=9mr=tZu@$G.LhmO F0|0f f?F:WA v;I# ׯG8:W3̰NKR4 (GB .B}G }&P  H}3gMX{|3\2 QU;#q![D4&KhU=%39sxl># m-}Y)JY@1q@=!7pf?S7dpoJ5=3XbJW(EgC꧶& m9A?krʱ9 :iԟ %6w7 6N/׽EO̥Q9XILq {o[Dh șw,0'@ XP`L|NAJxz }\C@m~p&G+ !Zc'</9Lrd&q1Й`_jESh!uƗV}#Zf`3)æ>3ںbQwn,=R$<5L4=XhչZGnWh}E `p=9J%yKEOTZ@ۆOZ]/֚훯&ZgvEkhL-zh #?ڬa7|go*ǿp]۩#}]4z-/r't=t*흞qE'>P>\&.VVb`2KaUqtrUP}Q%Pz`]"rD`#P%; Ԣ-3O (qsyIYe͟Fi"} H-Nw׶cz=0G;*(s N;Nn'-(NZqu!4F^Y(Ĕsfѽ 5,96,&F`N->>,HvO Zshާgg1;+$p=hH :_L5KCHn&x6Zxu? ($-n?wwg Ի8kQأJʰHh]_z\Kk J}#wl0 OB@P\8c^vM}wWggoμu7lp?*mrap(!P(A;K A0_/r, &=;7gRs{83}AzBe#Էog_sqT[c#?w!7Rx/'@#? p0Ucf{7 ԇ+aw A 4W*GsEP뼔z0"(m4ϷO4BIKbQ{Slduez^r~cϦ^T= r#9R/9U}W\.ml]߹W&rWs}-8&5Y_zu߭vRP\vQ(vShNâ\iSB^P@m /MXh(ۓw%PNH,xylr Z6k舓>%p<v" zмi~utbzjH fךvqC[~`)zP> Oxm/vW.i*00n' HW9[{x{g Xl͞P* G-JG HcXB ,00vɼ]ҏb* P); dBޱOC@,ጸ`*=,R4]%adЄVW?Y~h/Lsn1~ָ047%]S~֐)zZE f[W*{3s{Lr@7a@IDATЯ7r'70N/%n; WG ,=( wxR`XFx 4&  j"нn/n~/pN`?6LbXߟ /doMl8# \<>FL͸ ~%SXfNJb!esrg˖PN]-3^|a<Oo}~8v @~H{x/LM ԃX|"XZdhKvx;71ڳ{{wªWA>6D5syשٱR7r28O{&0%tw (yS z'QbJ/ ֑7͠ S&]#>Q#i_|7%9-|K6wkށƦ z#6Jʯ oC~K2z ȱ >˖ _ s1o*`F3؋? ORρ21Y` -w$I^˛i1[h(aA#g- b" [5[iyN_ɮ ]#osMB9˃=}a$&n]#}@'/VmrT@w@^u pOZ0F#n4hyOΒ2 &aBe5pcFNÞ= Xu 0h`W+67ּ߷W@:Hg#@&x;$hdNj5f|E<';r{7)>珻+ jo/J0O =1mpu W}5F1{rUq-žק ,L0ns&)=û {Ca7`oet37oSYa@_an. ߲m#&BL{g ~h#Aָ/4k35n< ^zPUzs=ȼǕ\1L4xc?ތ@dA0o7a9 LLf Kp@w8ˠ`j B5?$Y`P% ϏK#@"-H͆mDME3#*Bҳޟ6xCfÉc gW~Vlx~jt]zmoJ+/ۊ0Ѣ]K8~r /_go"Dkn`MnL;^ц7njްhC姈?.:Q45.]{kTkQ,!xu…WK 'r.Rs޹ؗ[j" 7:F^ut]_ znN4v5)Q}w|Dެ)-TͽFќ|wO`GɁ d4'7 xVS t'\**0^*B=V,/.+ g Ԧqyf̓8jL=ieNe5v>֋nH>iX [I~r|L7cAqbGqϹ}cލqк ?u P hw@!Cz0dh]}D4`h2ϷF-ELQC P3mn̳bl-"C}w-@!ۤD w]?cٜvv F p-Ƌ7yB3 q gklpk4mA0?J|AEw;ۆO8乌S~~&I.$кx0a6C; [7!sḧ+=/Z{Q(% \nNU=n&:Ks:EÏ`٫s5:/MQ?"p{rH%"gu6: ̫ ,Mz~c7kPya\x k2 ƅ;= y|P; ^\E܃ 4J):Ll5%fLhO{Ϯz+C;>Fa ձB 0A0t`mLL!-3{qHob;vD|cl%Sm G.jbNcK bs滱D?֑7qRϞ }ݕ/G_;K(E{;p[ b9/uVHa؅;n_wCMMai#]%j' "П @ Hob&^]솖ռMw֛x9P}dUI|@S,w>pei7ٟ3Sf| ϽۨAuH#"x@{:hw?v\v@x]@>IP&aGfLl^g@ t!\C΁D*u@9<.߃|v،^7`5IMIUmT ?Njs %3˦H7+uúNJ)OHQykq.'&F+!ڬADB|)sD3.]x<9H?S-uho$ڰ_oEn(Ɗ_)i ʞ Nsp)Vw?p(ݫkGuY}N -@8u @B~"jk >; q9,C$ZQWYIЀG4j/ (9s^`oQ4{ԦEekxceie+j+A{ƿR{>tjhPs7-AG]bԣQ=aM`(^S x,}Uk#^ _?``Eks@cs9$ 5zx{j"⋆O×9e8/# ~E;A3}e=7gsxiO7.BF~Jz7/ux/9 $@`QMlyt#tUwY3MGUeߗϡY#^3:C긟bSPGd'?ROVH]  P> څN/܊|[R,||In#+y^Nڹii&N*9HZ $aV9'˓kׂ"R# /;!maՇ{Uƍ^X> |,h͙l%ghNVϓ൧ZKw 梨izZ=}N 0u_x] @gR5Wt06jw" l J@w'3+O*/KDK,$u 4 JdNKx,*%4<3W%ZӢF4 V~Nao8rb 8ב$&y:r9~ x:RH S ?07ƥ#9# p&iR 9𛳐"y7p@7+swghpz:V0 4ncaD8,;s|i|f9lAD\kKy:7W AƼaR < D@@:f:a`N+Z2k:)Ngj*d5f#ݪ]^%%n zbru Y&Y/tiAKeF`mCseO|!- h BL8}6w o K۽" ( w_V❘xƙ|(& ͎gwT=7 ؈0 >?k/l _P>oݬ~4kjՠ7W%;x诏Hr!H0[`uM9% {#U/ݡ EԽGv6W +$!\C΁DPm yYϕ`8f`CiZW|2̞fG3;@g9zЊǏj5vG'2gn1KE)‡ӹ|ho/ueMZa_Ѻ5YO*|GD-EqmQ񓓈HN…ps0|.umm]Zh!Zk4-Oj3|z^QJ)]BWht{0Q/Oy m5Yr{K5Ho7j- j#jkxK-OE7H%C|s1mꏙqD=3{O~K7L&9i=_ХEωeG.H-+k%;‡V+p{3)4$?<$Ph f/ J@la\ E ,\' #hbr|||u !4I[L5x~N)ڛ]xog{U4哯$0wR)=G\XoYp2_'"v!g C!iIr@ z|x@k s8K%<̛ho|@5,p [09249 Ft>zxQTώvH.b`2m~<ΞZ7 $=M8RRf VMx\YBq~J+A% nѳ\w@ ȕÑN>^ 0xA jKK`Ru:߮QVTok9ֲw6!{aBˮ;e˳㷋͡3X KL$& o   ,Ȅy'( +hY/}ۚ?5v_]l`ŗDƽyy8+֣g^un{:zY~0~ĚL̀B"!&T[)/] ;BE:_8>-@WQ_r4G}t6bbOz%9xT0, EwRo/9Riu!ްݞ:ήNC,GQ :X;Iߙ -KM形늷-?KiғF7Uir? B$vH49RkʂZ@l=͞V "8W ޿@-%xɭ݂fn`j% e~.c,_,|}! ]O }Xt&EhCT 4'ەQ`1k~t_S'ɿ1˫  jvk]?#O(gdשgfZVe/˼U 캸>#' xj|@tީRĻ_I&6Ǎ70 x*WI_',ۏ|0LͅVJϤDG]ϙh?5!6ryct"PcbZw ͡/ǧLa_g P= HP2v ԟ~@W:z 7Κ׋n^}:N2v(ǼD ɝ =WاC=¼j~k,Ń-w t=H&5ـ~CkO|n^*3{N|KSO ӈӼ/\/T:@km[OS/j8MJVihWb }gE[h- ./r3'Xi *0Yv˧IGI>RNuIZb)WO-ZgnSyzuoEKFMmU̘oIPHuH%e/5ܗs=?͆v-h'2 XԶԂ޷—̷&'Q͝:J,w82ES.0}|~גKv'(:,raK`7G %;㓛16cZR@}mGX?K`[] ?,pTƑJw7Z@*vNNnA9V9Gv"0(>tί%ڑ-ۓmExcaz3?W%ZĬIA3;J֝[כD\D1bW*x܄vf(hbq':L 8I>b@zK1B$w ghG {Q?GFH5' G[҅qB[QrI*dap+WB~{e/s!ݲ`Km-_X srN!'p-g#33D^1OGOURCΆ/7oN?#Q߇-um;輳$7pR(zIHqI?N8xb,[i9W_zW@whual3v_@@9x/( j5^v^eld/MMmӉ^=C U\EtO`>QT;ȷFLJrVwվqa=Q {Eo =tP]*Pm Á>b,E% Me/=SFnoZ`)c)\+jmy($fxmt$ʴGZ鹙Lw~F?\`):X%CPĈ \$7 S-BF,zNm;VhyMV_P6]K`-Pe5=r/nUe*W-sh)?ؼbhBmZwڟvw7q@?z@B@6Y`sQzGk#8 tw+ DX`Y\2E)es _|IG-zTȵ^_C ~)L+\}ڊNkB;٫P)́vsA՞Knq{6]2_|ó|F&B^Ov`VG &tS- >i X 24|:̞o߃nݜ  ӟץv)roI9kq;qώNt49s%Y?OJΊL`("[#X~?ɘzH W(&9.C)]j B1Xi+FŢnCP/>j*SՇim1=;NR?@+{OUU?AC+{ޫ {OXM}PK/wI`L^o%P%a [^&SƗƗ+ɂ4W2w,DwDmӌ+QhHѦh7F DԽָ/4%G8>׸⩪Oh{WQ2uߦB&HO3z2~H08{?0U[)o%~\Dmydg1,<#0QA S|&F0ᨄíp|O/мs @@w2rmt6KQN/WOW8̻gbf=' :8ffξhZ2FQZUSܠhYۉ6zU_іuaVxr5*ƴ.^Ei<ԛ$ަ2Q\'VrG$C7݋W-;6 7WޙW-!wz|>Dn5:Ax3xj7oGxS27ohIYEۈEmS>9o&E[]h :+lDk_cr ]m:M'Mjo3Ėyɜ]5PtA; 5Bf\o^kZВIAav`wd[G(TsL@wYXCXʟjjwӰ+hBӣ7RBGR25R-,eZ¨W_pbmVM@o"/TT"3/HBm*0h t$#b ;if;xZSf!E(L-(|!Io^fhbrg[KOz-xO*Sn'9T*>Ͽr{_Eٽ7B'A@Q, {>(]l` v( wH5swQ{y_IΝ-3Ι3glyR~ Kcs_Bb@X K4( a;,2L]ԳrE Ҙ\;45`B(\gw:2ĊVIc:M0$ˮ i mZkY@κ|0vND1́v>>P߿?7;0/N`=o5Ǐ6Lq Sut+gdy,>ܑ U0Ɵ9:Ъ|+R g+Dɿ֥֤=,0Iς b*$s*_ClJ1XYa[7X_>t;TA碦3T-yL&|blQsi!3l{aip&TgE#AZ Ի^1P1I8L [.x/ ^/jZ.=ucgp_G\E.!.;| y61+qdp n/aw+5sbhujXshC`-__@>N-tE:w7v{ߞ%s߭sjwje_. GƣO/亂{j--r}Qxr0C9Pw~_P1Ls?uG!@o)SN@\JM?D"]8hpSbMbK,9'J1Gn\EE^o7Q2n8A|TGmVEn ZጯxzU>3.|_ [na7Ѵ怟'`8Xq P Tpk7)85 %\ba0V\X/|,͈vcgJi;ͺ<@-4po&ཎpj 1!}Ν4a[o#_99zEK!5YQ:F[o`|%+'[o8@g׵u\Nɝiy;CF$;a;B T\9-\g܊H `AbJp`P5ܿNZ'iIל)å]$`~Š@ϫmŁ\ψMQyl}G=9h9Ilj1|;A_(z)/td8V Fzb"IȥAGG@t&ڑwy!7iB/7ar&] xG8A7/_/As)Uy˕cT89ol@?=D "sg}w$ԊŃ,8a^fB`@2Rm,(#bd _(0.>G s#q>n-g~@y<-[ 4+X{wPbh䖗xGfdJ3N}}Eg?~iw.n7^, CDsީNc&]EjG{'eK7V4c/mh fEc2ty}/3Yl::YwkW$x.q+"4ɘgs^+Ek/'ZЦO֯hIuwohI>35[6LwCWoZz_!}Gh_yY48]6fLp1O,ms kk6{_\sZ7$3^߆]p4?i/_H!ozL|Fx1^Xwn#Ps XCz6 G ԗ/gRN/iϼ9>pfi?̈́]s:W~|lHoYVB/ |7<*x$6];;p|!}.naܸQgr98F<: L;馇9}Y&-.7 |e+?F*}-d)}qՈQ3~B L~P|aLxZXnxcCD&x$]y֗? #}t NY; Hϳ| K@\"k M6*i@G1Eo%/eqxSbgcӼ<~ڝ+Ul/zܼ>q;:<,^П@0f}k  wh~o/olFՂ;|8@,V iZWECpA7!q"T`ʧ[ci\ƞE 4U:H1:&@KO &V}LN"H>F'AjaW[] Ix{7Ӝ!1us*+``|¬FI͍0pTxwEh^1A $C]]GU0>Ma}FAO@tO@~9J $grϝ>ge*9bRʧU8NG6M*{@ $r.t[\ ,bA5L.U]s;L z$^܆[V4[]]=|?`x qS:sG֕oN( (xZΕ<֊|/PZ#ӯa3wЂmz,̨ \6 -v@~(&5rS=?;!P' i'`/ ?!)S8(o nt 3@Uv nHɅg #,#lZ` Q,̦һ,VYJʜ 0/5L`YO@)i/g umA}.(^Ə +3ux{2f6J(k@IDATo\Qy,We"73nڱD p ^~hw -o0ظENhٍ9^fh[g.n$mr ķM,=~]I n9ο gx9|EPjshŢ35\$쒠?#V&VZᙢs. SDH6_[ک͕mG6lKDG[k]+Z>MNl=TaֻXڽ@Fs]cl4͇vla3 m9viӓE|QоYw!{\~+~&)|9{nWYsZCڐl|Ⱥ6`;7 pӷCU9MD&(^vY] /Po%Za@ !R Ԃ:{]$m,B@F } Ԛz3&xOGU~;EC%f^{_4"K"nԻY`B @@Äc<[IW Ɍ&"?#,Fc&$Y;?+~=1`Z@/&Ƿ4P?h}!Cb4Ku\00Nо09GUNމ4qoqH>lw@Kuc}ӛY lfX@,,Оo`-ĢNX,lyL`.W}F~9)w;, swӅ7P y΁l1~:\@NZX_#+ɷ%>g39O|Nקiٝ?ҮQpauVG;[U͝mqO ~+0/n¯s n|rA4eG}dhG kGJ1@|V`RƼ6x@Zx~3~e@m~IV (3EAz,ԯhbIRԎF3y3߇aIwnA넃L2<2iqn\,)$PH%rX-x.f^@QE'ׁj´*EN9ip+@~Z&R q7g9 /h v7G6ɝif;5f5vڽm"w_]s6v}[~Ư"eyB$?g҂G+ˁAG):';C0򧃸4N F3t? /nO |o7AHKF"2܆â/SŦǯ¿?+[utݣGJiJI#Tl; /]-gY:Rm+grg3Vݹ=ݝ<:՜cZ^K@{T HF?Rjʴm/@N]^R37{?Sso@3~5o=r5%ɮ */1kuX!}pW`SP' w NzHW^!PFw$`_nG!eg z\VS^ݠŦ$Ȗ jఐ J&V9>MP]nu)f/çd:aM)T(?ϠV4^ΙhD'(BrMg./ 033HSsh=p!Igi0GݚSNMa֦c/3smݬz|oMn:TԦ ]v5ah^uxptnV? f1#Ar|h/0ORҽG`bp sY|@ػ SS~R՛ sVJ s@g%LRy=mo1=S=vĥqT̃N0BKpiaA0 h/g2|Kh>0@C&k_WˁH#{D w89_W3rD&w?2^yiV y{wRLH6&a1А)˂v `I~ݾұ][;j̍7Oϑ/'8c}V ߏH_@"sf\;oWƨbg]wI~;FG[&ɂ u.ٯ3eyN ,տZOW?HT cqd'hU:~vvu HV7_~ Z(T4\bƻlgCzy~Ova^jx'e_QxGf@y@~ym\͌#oz6ŃC}=tS}lʧ {C*r |.P}Rw+R)ph4>~"Ƹ?> >8FrLsGX fwx"qׯ  XI Z5KεH9J  z@ln)FSMćMt7z)$4*Q*}=Sz>]NTQ46|0) >j[pi7m_&Mje4t>T.Y+sYxѫ p,GtmLuOO!}-C YG |Z0c~P@*o֌x5騷kOo:#!IxN pTSbgX :*˧aС^5ŭa4pLn}v>JO^k L-]ð L?hht3#vL+X?C, [#&4$ȅ-- [)'s;$=MQrvm nt"Xy dLrF{ɫ\~a4wVe|@y [5]( 0q)@IPN6-.T?VB0ԏ0#2x)x?9 )E_0&z占%n={x6_3:JمG&RzB@?QH9ڍ@@@W&-8<@t_,A>P9nj=On},a𓷵/A R(e*i dݨ9 &1C@o e,m~ K '~ ԟWEr& qo@?H>Ql#pFm(5?'~젾@O /5R洳"|rhnׇy@>^+N[ kɁu9ϙt@y 0Y`~=q}܅R <8E|eKK17GrglSer~3=>OsDv"-~hAzVNhH):"S/KG^mx$QX=(βDM,W|7#|+yWeo Pp|QNd,% Dk/Z&6e6\O8i-ްtJ,-l'6g4Zc@^Xdn4bjNl ϩm壜-?Y"IRd$ř.:~fkHniyO5m,^Ľ?Q;e J"u X8cOo^^lG0Ug6Π>ݫ6ߙC xRxVNn1K'oG ϖQ;w2X)P[; j@-) ^F篲0v-@w]!@#ko#4,4~V;MëywW̿ڿz{po8 Uw*%H1[x` tp|_YF/,S~DϊEt=,L(x~R bw6]BF 4mrz:]ʵ,%G$ew~z1vd,3=OF;w- $;\M'h'س~Ev䬜zlr8jkabwtw!Mq|[[)?^buKGUo!ymMW~;[dP^??'֔v0d=o;\s,h!E!}́a1zK upq<<|6p\ޮ s `<;)  k DE2 Us*2t̀a=Ŀt@*D{.^pDbaXy!Eν~B C'c}0`RV *<m[{]sN0N @*T5?^TΉſ)P.Ѽ?cS#L!יa^?x8V;Y?].|l8@q_C8hyut@Nꃳ8L>Y@z=O5)RR[Ϗm*=ŎxEGRN?7/B] }&YR_2sa"4\ yոtkR5򟫣{fח{;e ' /epp=FG^Q*T%}q՝O`oMG k"ŷ˦(\"p?? .RNA=v:MwsݫE Y-VU2LN=ʟ? DM5 k>ZAN4O+")b> " :~#cn0n!B & 0BuYU꘽(\8\>K퀏cǥI; #( /C2@H~MBP'V=3rE L TM^kA9tD掚4F43=1<<$qc`bd ywf?NZ2M/­`;Џ4Ic&R>^R`H5w\Q(M BNe9>q芣?A:!,P9q7yRCpJke )q8] =Tct,A@u=iG7k/O+F.!o+N᳌)2e ֈ)JK`ʼne:,@]-"t Kgąor qH#S߳O<(0DHzsO}<4{Y2>}.M,}EG-QVcaTL?d5^rY|E+*w[40:+hL>DͽvG! Sr%r0e6{/Ѽ[DWPf/x!xE~&}q^^7mGf@;?M;ψfȾ\4y8y[*.K+M;%}KwG3g!k-7We~)YgWF44~w0NԛtƄ,ѹNQ*=L!w!>G.ּwQ:x|S}|GۛNi]M-'@}+(ȥkRg ,m"Y(7\I+hS35;WG>-Z]逸OtjGv^M`]cZGo+q|w?V@(@ { y4oC\+n66 ~ҿs{ypn8YˤkК?Z@_fo2K !"j IB)%L|Z<1Jy@}=Er$GY/ɟsd.f3o hvt} "E-{iqg(ySO'k؏YWjE>'sk @@ 4J!}n/:20(H]daF!u\>~ vf[{zCb[J3΀Kb)9b3= mm!h^M éSp3QCG2ϕRO5S% bM Sw/~{l$^~W0x- λA|7_;iʖVפ|\=%I~^Dxeoc]?=/ѼzǠ|7C9^>r f*zaR(6:$9ּj҈qNAZ1N(ؖ=i}os5}oq1a@s9nhz V̹rt`~td@=occ$3`Lql3ῤڭoG:&_sw7p@  L}x4c:{BBY!o"+aYn<驇#9"x(@P]}SM4QS G.U J-@@8--AFǰCTM~%CN&ӋxX|OpX5+9!hfpY}mI_1DUwn"2Z ݇YT= @HwK RPLĥ+:!e6."O$KCx=L+-pUc@*?gwAlɼ. hTԚ;onUcb`v@_'X h U/H;O/ CO v@VH݉0э8ccf0[Gs} hŝ|i9 -@ :5O/01{2[NK#ODKfxI~W1\׀ "0a>T`p@}C-~\76Ȕ@Rε0ދhFE~w ; )jU s!w@^97c@b l9OgAvZ{ՂyK7(|[QT//]1rRѲ'Zo-GjBȬ\t?Ĥ֢vωx<Ϸ9~W/=f,\bgqC3nGZLTq Œ>GfW Q)hthvg/%ܗ'bϯ1mһKߣ+<0XݳPj}Q<}nѠ[xcڏm?=޲ۣR~Aw@=Z \wt'97my>*=:^rR+X4(g±3B=wҊv(|6H@!8|S8LWjy Z1G-PN Ԧjy;UL \" h s@ lC/)3FHZ8zxwN ,brK~ $) co7+‡385C%V N6fh̸ J?qq42 3#\lrXȸi!-Y^W@OdN0MBNB= ۻZ"M? [P/)Kiy&`v;<[nG@s9ՙ/|%8,ěFDҡ3Ca'=,< &&oFt,T BڀGLjS^)ucx="3K'LOY]y9Hq;g8Wo@>$P>QIUOV8ߦPnekh_juܕVsG=mNQl].:kr,.譼""9Ay`3rB|%y6}fiY3Q#$g#$%*!Z6#o"[ƐEʷۮ*CJj.E=~Vܢ@y0v5Kyx1ƌ{Z{XܑA}UvqܚSy~}S ݳTT3uP:1~p?;6|Y ; fQ)L0[1ck:B~xvP}|v%>m,+W}4~40(h_ ,V PVhx0=ƣ!#Y{%ҧ@=lCy: 1gahj `@z ևQu;Z j _>ewh`E?fT&8x倫^g< L,; <TQ [u!a⟻HGf?_`nkX! V߭юvFOfߑ}rtG9E^H4O]y=s<;?i<ҧ~hftoA{ ,۫c2Q&]Ozɩ]lϼ􂡕/V]F%g.衤IYvEGf~R;YZ}3ml7͕;şfiSrx -ݛ(]!Zj.;e4e>2>&/tP|?c[naeJ{ԯ nF16].^8KEg10_\Fѧbx[qVh2)6TtRIQtxᬏw0Ab y,pZc-{D=p)K^=L8b:O:ϛ4Ryvٴf+ac'Xh. N(o. ~ jX? Y<"-LdrI`}1Ã(0|' gVq@xδ;*OSg?2?Ni%* H}t9TKG5g }9מ $-`n~  GW@_I<G#^}䲻h_UH<^E݂~bG@> -W$K|[Զ~Yv u 5w«\v95|l|dv#'RQ{/jk'6G+ d}' C{ ͗/gd\k_?U޽ 2oh*9SvGuU)*# ַ$_`]Jvs[LTcu|N6l(tscG7@\?zQ^aFs|yA. zC/~䓸х8PN&8a63I"OvЯYऄނ1&/Vu(~;*γjEe@`"iE9 i04v"O/&g҄O@^r|8(t8!E a@Q!mYږXI3p3OÓɮ1czmhHҩ=*Ju(zHZ@ C3<4> 4}^ 1~" (`g tblL) r4 ]@|D`I)T5I^S#W 8 ʗ(}A / I&1|vg+%K2{W5%}d7Շbq hb\Qub㔝+hkx@ZRF hmn¯Ϟ|eܵ@=I n'I A+9R1@>z ˻}sۈ9&uvmS_z![W%>V'JAa:ygS˴X?yC+7?M\F ?Xn534Q "y][Gܙ?T``G l)ؠ4@`› od<7< c>* eQ2T\YX.t]7wN?^#:pK3o3Ag}qL xf/-/^%NercAz{9=EKeç-[:gF}e>ߙ7 /g G:VDf A (h GQDGŖN(ߎ_@M j*:ܼoag]I~>/@?8v"M. ݙT{|?Svq"&'ևbzJ~a?ͽaŤWӒ# rz?Uq [`tL@{Ps3>@'q;Υ2p^hԈc㥸oKzx>:e}>sϪq;E{Y>x'6}QIp| jMw &{,ԏ BN;ܗVhsPiaW =fLŬ+I3'ujĦ|ڼڔ /w ~^jo3S;1~._?}euiN?׵fET럪Pp+ceN@wl܊7$-(g6sAFn,,*lm 6H@#pKbH$Zn]k? lwgBTt}BW3Suӄ P?, Gr@IDATPwL刁b8,X0ߥ 6 ' ј:mRJ.ڑ/ 4o:iڬ+R +pMoզo\W U.9L-'#ޠcja>O>5ޚ AR*?  K94֩a~x6Y :P->Ȅ0P98g#/ENԡ0@  ߡ8C#@/ ),BPuc{uxY2Ga] ~/l:|Wp]'m4[VX*N xЫ̫ aGc;C~?A5@sBwɟX M(HC/h7p0| |gT:yyiHE ${4`QM_w?ksiSZasi'#CK!Ű?>)Sw3%( >RKFg;@ /sEJ L cXXeM@hb /}-0^Z 7 ̿-iۺm,47tv<p#ÀҼq1D1^G x.# a&D'хmg~%:qŢ|q]GZ>? wfq/|rgp}.HY[K<8?2G\_Ȓ.i'uyw%.|sF#9S'!@1H9E*ϗ^qk+$wYs]ϷOayKrnr-)-\ne?+$䣒EKvDt^bLw̳ŭFtOyxsj7[b!rw\:S:AF8_W}Zu䯺M ukt)SmP8pa!WZ{oSoK㔯wGO'Skؓf`yqbjU#Jk*Mf&3?- hG IM4H.[!Zqr-S-]׵Ηr.{"LnH@㢓CdH)i?">'݄Ӄ}eQ-dy8WSsY 3-M~)/sU/k7W-NI[9h#E-P_' q3 Rwn!U;1Y{D~>m}+gpevP2_s/yTͶD1AT@~^@Cjsx>Wh%Z ? >w%ڊtL{X#KStqbhC:i~+Ӱ16(o|8Ϟ]z+>e>TOZ0χׅȕSБ0x0]tTGe͠rxB0Ad|(maV ]"^Phu`蟼~xCJ 9`y'CU:TSШa{9sm= 4쟸3% !PF)OȩUEGʂOXގɟ/D>|$  |ṍQ1IIiPȇl^zWy/sG2Ϲת<6'nQ( {$̽p!]-Om _%CQz6T厊B4h.?G Y bjU+ՄRUyxOqoo wߗW{>oj}^v#mإ~ :{_Aw5'^VTͳ"eU3v?uuiﹱR ; x?琂CͰKΌw¯e̦}pEwpZsg]XYQlLP[L_;1V[ TBDzܥc^Qп{{gN9s̙žU &2 *JO\p+`'GzvgH@xZ@,0,0m-0K@7A`EGM֓uϖדmVYS94GD d(r \o9VP(xRC P첛Ab;'8=[z;%3Ko!8KZc4Ԉ ٍ $~sqNU}g jZg@ˠH*>~oM8a(`e%+^o쿲ڭl -@`3\ZZ M;'kЊm u.3\F W6U >2f1hG׉d .G <\KCa72:qL`~'۞i=_(lQlk$0qmN4*-}sK"҈ӜHJn(bsk힗MCb{ =YX ŻذwLP Zh+$el{OsNJCo~:'gz߰K@RhDz70|Rt iLvA'=z\ SxlΒ Ġ/쎍1Mlok-<0i+@#2I~e^ЗV0p?S@?ZMu{9;~Я(Wuu^oy1:&ޢ f~iv9_X:b_ѩG6=sѥO- ;hAS|G.{vo'4]t˫Vzŵ L+ŕWW+Vmx7-FCOŸg&:oFڏ_ :TFrIU~rmⴧ]Vڷ֦*7ܰr IԼeᇇȵy\='ͮ 4tƬ7Ћ߱%g0Dz9_;0ڍՑCk,P ojH ÿ*`Pp@k,>|V>p@a`@ І;͓")Fwd̗1%¿gܻ(2~boNLm5Ľ078)ѓj7qA (~u̹k}s/O ñ@,PL 9Ea2in v$.?+*U'ѳT`t%n df/dO|N藘jԻ< }Ӄq|vJ&9}OUpq9p_ y1>ȦEJ^2MYsO-r{X@X˭BR%]@Ȟې-4'ao v#KR\ʵO 2Texڿ˦w. K:8ـhzO];Gť;3 E ^,K`(0>sW4t<_p;k3!$^<4p$C߃\3ħߟN7&hBIJ9k.<sqљnA2HM, \xZYę=Ѓq3 |cv91+Ws7#d#x:u㊿%tP05_hc=T :cLhN}@ʳ،uxC$PcwThnW #9@cdyE^_OE;7C P3@p娀.uf^%he%T!\uO&3?W6>V3HzKP? v[tvKd>'$m! ] kwm'Pv,Ty{ N"7!P}lT\D*ӹ7l# ?=zqe-IT(=I,Xy_GZh`THU3i3o S3 N.q,2Lc);,<@5,pg7Zl,Y%X"`l 8V*O{$<vs-s?;~tifGi5LQo'X>0Rz~+A%/KY?tzwѹM'_-:4}E'yLt%-Txϋ4hcSr.;|VLOFdl3~vMb Wxإ(CHg$Z^%Gw\=U7 Eg67MtvD|:{LBL׾sKD^Vq ]v=EfK] s-}{-芽]֢ЖV.x|&&L`}v1\7?ItfqY8)J':.<~w5]֑reϨΩf'V{gj}&"ԝ_% Z~N WU+X qm &MW_`,4-NB}Y@k~rK+ΩQ-z+U,<ͦ<3Z_>9^{ Z߈%fdUfժU @}3!:f bo@+)wgCE V7 (_"= o /b530s <ް ׳Gw1!fhwX"*Tυ\x94٠SCrP;oQ+? I}װϧ:9fy>?6(7EpjGʟC!,,  ,"||_Uu.& f#P y[ȓ 2jje#;{{ ?ϯۇw/;K \&R [Z໎x57'JY;ZCN^9@]bh)g'Nc:;ֳuayM+ e48@ I#):f@1Wƹ h |71P;8? ֱBaгh/,fHI| }W쾽 RYzͲؖ$ok-D 3/w ~ؙwh33OE^A t~VT` 8 ݭS` }(]=Eg;!U;r@Y H}I1t氼la떀 sI8b&P܆C𝠐'#Ch.l&)Op7~8 G'2,\}~_B{>ƍWn<$<~w u-uwN-U}3o过,('P͇ xX%'XT SqquIJ9rF>τYA=-EхiL/K/ bJ(02t]$g3D,k0DΉNԠ͘uO;ڻҀs{&҆+uied_& X[+ /zlye^msGMn/:u(dῊNX뢓V/!~fLX*:ɔ_D vf[fm3f0OaB7x:r#-fܽOg*`Eg>~wGk!ě|ꏯNSh)<*| ai߰nzg)5+z?/gp@Hj64'T-8YNۑNJ[rYKn`fG@J9Cs $WKprR$ra‚'г9{AuOxr0g_ӿҵIؐ&OY[ງsY4}C:[0t4(vo_K^ ?WVQG؂SNZ} 1ZWUHڼXY}x5ʹFj>*N8棿 {Y ,*Pkr"O]^k,P 'Z_}C; ğom1Rӟ̣(_1o(s4 by :[y4V<7ZfAoghiԓw;N."L/yfO?w/$g,<@}*X`S-$rrf#酙8e~YhYQ`r@bn޲nnZ~wN_ k n ܖt:=a^0@Lc|0ROCKo H%?)| "o 0?^VQCKoCOGe?c!h?ϵP,"w G_@9 Pm뉤?;?vL_ȺN\mwLC;x )1 6T"{PqLh9Sw`a@O1<2P"~a'tDxc~u +r=a\gDmN7{扴yb9> $?51~gP7e'YxbM^\9;ΣT z|&T+@ 7Q /:%MM=:(6G;& .c% vtjS@f=ű d"*lDq8ksb~-nMou|Gfiȏj2׉JH; s,ɼofK~ ʺ]2EďFd-Eu˷ᬟ'0n?]ƣhA->L|_tε='zwH=@M ?NXz-]0q_Ӹ7u=k8UoIΏMUy ~GK)\ _u |ؙ|ffe V^y;Z'}^o<O/l;u RK [ +4Vb2eff̌G;~ {P9˺-fNcE .wB`Z@k%>}N |="h;zcc/Gg9;WY{t_^3X, f/nN0w@/wTᦤGH !\:7N`VJ A ?f^t!mP;H6EK$IN\lps<v2%twj7flgv[A<#QQU.8ŪF܆bSU:INȿ[諂J )Y_WiFIoc1 GiW/  ypݰQ%~CJ,eZy?[ v% &}.vh-,EsY7n>َ =Ɛ;eC?-XV T>T7"5!XKfb&k\i'ᬠ3ytkh&GK_d7ڝ#b=wpcmpThH5C߻-ܕ# /mupRE{X#Z ppƓB #cD78[Uf7yj8A쨇cg]1hbs=[99[Z+=L-"` mA$L>乑gPqB_wD̻ .W^x#ç8H ;-d0ov.~ 10ưG`4wGOG\׋͵cVT<߶PAp*$:ClfjCCQh#@|@Zg%˷Tƛ#*T<訊̫2(?ʩߡݳOo2fx~Cpkm|O֟",gn,#0$0 hBU-xܺ]~sPiE)rÉ JεW $%4>jӂ5.@ͧP) +١7/$|O~fo ur. 5Ԩ@GLWHw#x_N)IA_BE Z׫.:6zSHu&dmxp[ 2$8)q9O:k:-Tth-X*mu@}-XM6];ptm SE /뼾*rl0]Zi2yPSqsț4x-'-8%Ql V`$܎ȰW`\i,0Hb)y홰ڃg ͹,: m@EgvV E;aXnЯX?h$p4;?-^5@/&\o9?66{u,6:qҷca󜆟ek[99ҔM;|r\P&f/ǦOְ>ƼJJbyGxѕj|T]g6 ̠wvǦ΢Ɲk/[:r}o֘q<8e7 bf6ԟ{_te .-h.˾- go)4-F̌ qWr/ݍCou;ܴ]@7*']HgdlQs 6wŠjh{U?#$&obd ވc+Jޑ[t |Rߗ?ġ܊_1r^ @=?rOJ ȉC(R>B|RH>`M!Z>\g/ck.sY62z  [RKNgDŽG0mSqGH(a[<'^{Vh. $#R%Uar'tx#>f2T>t%/ եCҺ|d?3igV̚PSr=sZRE^sT{7zxU,x>-pAz8TSR_DC3U} L&xrCȜ!Ӻs?ZM \5I`  ܿM|PED#u*h5ִ# ɻ؜e`.Z%H09[~x3'S@+p8­yhcsg }@J3pӕ;;]ߓz^$1f-ԊQgGK@>6/Fr|s"L2rQ?S?Ge~ YCj`yf,% ̑hǃ[I{B$~Ztu (7 h _Z^{/ivSL,v4Gpn8T 3v:LRtBF) 0 ɕASeL<x'g`$X1l"u̓v!>^b@2 / N"mj"HI{ 4h$ ]Vb'A2'_S8•d'àrЖ]ak@@ҐLcz U82@_ $~ Gqo rW?OTŁEtF 3KH7UPjhgV8 muB'xAA`znv! =&Pcٿt-8~N0 LpX#=;3k; L/n l~pЈQ7zx/XUgGa?~ UCީ@ /m"jzȂC`}y,\g~Ͻ[뺴`CUK[?W()ӂ]?x=5 H_Zichw`Y旾5*gE,Bt+EZ`^1DY~FOf~T/tT3SkY?W? 9$\k㲗(kX,.{C/|W $/!ߗRzow&@IDATV>WZcAu!MNjj7<; 9vv;P56lÐm_m;w!^%]-n~<=7QCrgEfjWx{'G02#" Z8h9,П2gBS\ ]<91)^pb䛢̢JvK00"B%iub]12OIy+?Yكڿd ^cCKǩG:-O@>[]$0/}ClY-*Ͱ@:,$-nl~+$k"t|}@^\oޡ _ ήbhA3FzUvͲ;|o'u)>9)4/JΓ hyy8 zBMXS?ćO|_Яjyy\k;_Mgl3}iQ8a)X;C1\)Dh<hvEӁ%{\cQS-JN~a9R⨣X# *P.7M8V -`\&(ï oj!L@'`T:[?tx߅EE\8=jڥjBMxjw;s1jwY*r'14ř\WCΣ!Au߂X4>c9ZΑ3 3.@uT3- Ё t1t H#)xS ~wL,f{4a46l ͹YdQr䙞eoC1dz.jIcútUljZ7yx}燧qwX ]󬟡*/=)&0q'rff aM=KbIe{c/'Pl,@Џx5;7~Íc3r$Zc *kq<;DeAs.isWYKޛYw4f]BN.ކD)_w&BIdIPV(ʻToaߕ)(֧s@VL!q~&tkuc/=8vTYcӹK:3F$/4K*>|4N>A,ѮcɆȀ-D-Ӌ&܏+sd?dzm&CoM\ 4 ̿Y*8)*ˌ`MtP6[3_Чe =~/ 7"w u|y?C#ot_VqTle;W4 9?7$}\ G}rwWV=(?8F4JK{j97 '}KVD:5}E'1"M1IPI ,[X]ZdU+]2OhhBM_->KX~). C 4KZ0uѕ%޲GW!yW%KPNΓ"Yfzf,~ن}VjHg[] <֧|ـRJ*)C|nkAo lm൭v{ R(x.8oqH{\Zi0+k JIųnx,䘹y *.O+(.^Zz>vT^LIunt1YheEu\RX|Ch- \xOyMpgGL?ZAB`-hc@@ј%оO0ܙ 8Bd 0O vߘROz^r%C$:M%?}.|\ adb/zO۳D1Cz7yƋp}'A,w*Ne;NEMKB@J@l k!'.m(=zG 3Qz| ù|tOZЛ/\S vh-$D1yP#" wҼU^'N g |oEz@}KEs(VGo+hi((O`vǂJGʻ'~؅>\%5m)wfhApvYf| OU01 e!E ~0z@y* z\ hT@T._3oMỘ4cΈ9&Ck^fP=˃Ӄ4<= #5why :RFc2#pyMt@y%$)OcO ~gvN+Of{g m 4:hPnmQFS7Ar}exj9RGrKN:LmM=zl@3NR|;һ|N`vr;)б2>W@\i ?A} _{W1AF:,M9џˇ~,_Z/Ⱦr|iF*ViU[UO=f 9*?-mnf/;׌6'Ax=Pl ay"pJ*vG>qyV/X>yH@s8Q`vIU19$p'_gAcvdihnGf{u&FΠ,sM5u)`5=L)u&V NcGz@G"L <  |9WNrn1n/2Xȣ:H KG: ѿ&=[(8#~~wjXiIاgɁhv4\}{#^(=dlN N1D9GXS_ir@/ &ZMOH[ k–H\]M XMU9 }%a#̹|qMLoy6R沰L@t1) 989twԜf.G!O."Cd`lWtn/ONuG'x gd!XRY;K`U1{i* ~ɼ7(5ʎU(G}Oym-6#Lh|yi3ܻӰTjP~@K-6g ?lb;[[n8j47ʧ$%)Mn>r㮚Iw̾i\ nU6 SO_*w5VlUFK~.{,:GOߌsZŶYf94=^gu| _7Cym`c s o ۲#0x.lzbfkUڝA,;>h/7_v~O3:[y4UAw \@ ߋ+eb-LvQ>+PY&pD !Wɤg:iFߌ`wSM-R3v:&ey]G u2K6y㯽yt_`*{,'00X$GPkuμϡ[~s)dó5'7se"|rڅ_;H]JOׂxQK8r~w fVyR;"enilT%,4HEv$B+@tylDVo5C?mWS}{;Ze5~v(W5 gu@`Δ;'f>ߪjZ\ D/Lesw g Hz_j mf1Asb<=evS=_?|OR_uϫv SA$ g;3I z=BhU 0#Ddg0^u3NBxC>G;>;]z@,nCDI?S0'-ŴUf_r0|"9dr^g2ޱja" _YÁS[>?$89sJQcoR3\oi}_ڀ f;4һ>hi+d߸crNO'[{9A~Q >񞷞[1ak7܏87cӘ7 ^Wmw_~O+e7v{(b\ma`.6\KbD*'AGWW3n9K:EȻüc.b5#)kS9SkV=lp% %Puٙ߁WP NMQ' s>D &S_g D~:0M<(0~<+P r%vIvGka3 s}:*.}w2qhNu|&WEojFrÀ IiJ0x;n߄tt㞗DE!2G ?E^wZ$l# 9yBm!n~@S,W@.ܖd͹|U :=3M4:wLtV%5 K^`v+;MLPׅz>j g疀+6K[oO#O ̃{ }"`L@\|L`d@;yE`\|]`E w,6:dz~Y@~aa*F矍w$r[?^ci+W0}[iyS_CS=jߖN4Kւbe郲LӾ8?S3/WP9VBW/a:Ӹ`Ks`ɭStYՊ'}t98~J9!#Jt^;ho 犆݂EzK*JwHa%>(f`[2Y(ѳE.'=]4*;3S>+6G8iYI&}j=uƶ~S.z'Mhҕiu5J\I5t2j@GZ (Xm7llgơ6Y*;bp|.-oⅢ>8DkZӲ, ^3aÞk N.N6{a,ZR7,X$C̻߳2~AK]Q|WjlJA n~I};u%sNv{t^WP G#,'ƫ\S_@L  jz ,\"$E[z3 UDʧ@ݎd+nτWfG~CUQz{";X" nBWT"sy80V ~)TA4j$w4{~;N "!䶕J觃ʳ߻@n[[$m'g!IC9t*Sn #ٲp>VjXJEpgA(O2}qp]`~j)Yp C_+ ΀7UZeq+:̯~[ሟ-k{G{P-~ >-VX}wX.?z7z<VͽTBLDQ e{ Hh'"(мNދ>ǂZ&^\\ҎuD'|wGH_MelT[5x/:{=)3X0.tT%7+=u?GD;B |c4](;Z˭4ur#HV C6xyZ\7,;{|iO6s'!*Uq 5ZҍRs3O?yaZٔ[w*QY+r~ ӂZN^qjV燧ߝ݁dž ޮޅ-aؕO2"/el\oip| :t,24Pϔ0C@]( G!0P ʂkuM_\Z$\oh!'a!&$@`YCmgp ]L16R\k$`退lhM$P >Aw~A4g'hNf~CXx똲}:^\sైwc 0]:^V"1fAd{;U ,TBjcgZ Xx<,`0{ssUٜdJIWSDR >Bqm=OTa|;\o^rR մM hm8,:'귖`GV 'FaP=_ϤB\# wFW|'x9%QŜ+pW@1t85Ċtxv|!.pdkKa=S[#KH q@}w<]`w@`~@7>PK7ayx~hHTcC>%` ) B-{yB9|aએoeazU"Zȯmk+A?_};8)mwul%,W1bV3bĄ9a„ssˆ @a y{p=UN:Uuce.qP2iSfl-bڏ4GY+32Pi٬eDMNg{ Hg0F2̰d-ɩ+܉^/BE: !$5`zv9b$p2q[tlٱ{u:OpJ/x ,xcxv6!~Y WT =$7=foRYF)$Y~9zˌJhS̘`Oߚ23gs:v0{]WYU{~_=3;yܥOr}ƙ3ͫґQYL=^R 3Z`|cJ7ㅍǿO<(5Uf8*;4NR~Da);sR~xg|G.>`)fGf| idJck2Us/>W ÎWR΀-@uǧe.pmҵɴ~I?s; 6vXp@g,ylh?{&SD|Hm:eÌ1a~ |(Wj3-NZ8!Y?38V;9 h 4x&GVVZRP|;[6hoB/K&0>xN_/!4_OIGzUaievp`Z~$wPHwpGzu_M4jfae'9< .)JWgt0íl'h.gw; ȅ; W $>l"dY>ܙN5ꇉQDNf@w1|¡W2,:H=pXؾYWM7ՠ\Pe! a?e%z1@?>V 0w #v#cR _x/ $V[ 8r ‡\xH f@h | p!ѪIg)FjvvH_0͡PIY_UyJՊdPz9G} ͙TVskl0mZs]3VI 1g=j?y=Wbm mp~CU*0 J֫ .# 4p {NOG>HYi|[7-\(s@v9#k@uPd=1<X 33=ӕs U׃f0_ B19hFOaξ/:~vq65tİ5 6Y%L$zkr[ 4]:Ѩa#.\.AvD{nH~7@4Q~TbbIh wAhIN'cA}=:h].K98ޒ Vk\/[pȴ:] ;b7 t7T߀xӽB  0Zsh>_1љ}PeКv@ٴckyfGAfͣD.ĿQ\dEM3@/Tp~2}v7qYgp R,0JYR=xVw` \7)G;(aY; _OS Uw/Gp +z-|pnch,ZqL+|Y9`}M$(UrQ60iE`} ԋ)),hm4ͲI5ݵ؛;4YϞQ{ԼL7n$~Po>)t=}uov[YTf ~ҥ^13Fv MDjFٴ{joSxv9μf3&BG5}(> g[{>Իt6[xlʴC5t# 6)=`zs|-#%~n6Zkя6E`/5xmݼ5ToO4;ف#?ۣnId'5 x,ve۟o=Ϣ;;G9ڙ3斯V=[;/5a&~%9`#8 L|"05I`bz P&v=Y` ᅠ\\\@>eB0{˨Q-6ҪNm}M 'h$tx0ZY8z'ǶB_TcUƮ=]vIzN aF .tVךc9{ *oO.fXԛA5Fzrm<*coݛv&c3h75 Gqpv,`dT eӏoX >t]\Z/1qudH!1u4@>,HCp_{mמs׻XHef=3cQ5˯ZY5G]O[Ёa%g}9ze\In5(?ܵYأpZv%c@3]7l,͜@ޞ<]uqXϸa\i͒ŤmYPN vOMR|4>n]b(uֱ=-uޥ+>/8+WJ;vqŤkIŒ%O`v&:Q Y0[%W c3Џ'I!dgNrvH,>\_ Z9W7rc$ϰ_Cd@~1_@G [a9I C8f?a3e'Vs#J@<}pa`Y{@I@y@;6V/[V&xQ j Rrt:t!RObTnPYׁ):66GQ__s3b}41F3ݚq%?Srڏv;@  ^L,j^iss<Тv9wȏ hD?d-V,`ˇ =&ZΚDV/QD08AWOfmEFN3I.,:K izJ*,ͤđ,nwz eA)">r}f7fAkصz"=t|O^eN+=Z/ [H9~M5;;4_5{}jPr!);%V?^r-+1y$ON%Mt N{$w\v\>L _N횐} P CWߑ% OfbMpZzQKyLN3zȟd|ey9*K bqH?ΧMSG q1k~M;<VJΎ,Nv#ډ@L^f<6WΑ7+}X Ddi2q?njƙP|]*ܿSG IU=6ߘme5ޛ1rd޳WϨ}0bʓukڅ54U۾fE9Yxۺw"Fп&n$_@5?uydٗW9` \`~G2 .,Pm cԶK*e\4>2Zq,pmMVM5u KM0y7z1<1?g:gՄq5m)n`/VeASdL'Ha}TF+n mYs;A`cd8LUZ}zW  0f&r %Ә3o^ wO.rMfCIEcIge/8&k>q&p_LnI ֳ`w޻!gaKKF@񅎔F;׶ZoX&Rg5 ا=:]DOתXی2O^V& rDw;j~5xgSHqP+g2?ڟF9/:gCdu Z]Sh]dL"e@[. (a@6ЛПqvx~3_X??vs &/߯XOD`br_}Ƃp6~&0qY_@@}+ Oر(HGYُo83Z@9<H=16'gS̠Q:?4.>tId#y33\;/Z r M9{! wpEYϔ?2 ϫb:6kARˏ38;NteB1vVfK;3YpKܭǛ{;;;|;8GvڝȧmWݏ|Y__D9="f ľ׻7C?9ƦV\yĻ~Vt` lx`CY2h) :0~?} `@Lo>e_+G;Wq2V!+;iZAD[ {.ʡ{V}uiG2tL8=Y(De)}w(Q##J1vq$ÝDz6{guZM &qR}aQǢE IwOʟ? hw@A o{]ji;lGO;LىKɰpOWb|O,!T%B@IDAT2\Vs@;.&hLΚ/Ix[L~%&q=Cqa@ 8}v|bߋ6 MQrKO=W >=-l Z[~h^-'\8EBOU,L5gꡳ,XN$j>w{ȋLO~?t9R(roNgv!|aS]~ZځdőAmiFvrշ-y:vt{ AW_r&RXTTL]Dpn }=!<{۞;=, ϔ&zU[ a|7yMcXύ/,U;\, *bb*Fz`ىX?PjF4G87K-hOT3<\' ,m-z9 Kت|řrdA?h< Ӱe; >kf[#Lu,rn"uޅKۦ%s= S$%#gTE#s^F; ,m!p'g.0^{WF.+Y 0% AnB+ׅԝ,u:SFn'U@OrrLc nꗐ;V>^#&O~XU//Y *^'I^&Ѽ%7V. $ڮl pC|d'2ɹ||q.043Bc^eUzVYV~lȦ. |IA;F4N2_ H9GBk 4ڕLű Bt&'iM Jɻ6 7 D3w iLLNz 2Ž;VAx<#_>ԗEne5hYJymV]NmPg nta%p2dޕj[jt(h' F+l hŭI|%P_?hoU C0bI.pҲ ̜a|0vXl<s2(2 qA]gMt' YV]wY Ŷ`l3zsQ{;b~0p=3Ӊz zs3T]\kk~duVT_BZ5QI;O9v ;]@,:K* Nt? >SgE5: 0@(??v`Z-ԫ8^`h+渃ޤ=E@N/ؗ71V@@9}%0w@n + yYJȟw^iB%оIxڡwPiŀ7+98viӯ241뽛6x z5b 4 x۬ǻ16GrySI 瓮8@BpBEP`)ۜP8g/f.V|㲬[\j.lРU|iҴ$ t@8゜Ǹ#Mw#Sw2#*%"a⇛^tBӯK#%=BI`O.,\Dw0S~O Lq@97h׿ $) /r[}ɽ~ *F-m%}#YE⧖ vο-(\C^8yKcՀ-\-RCqE3S.f|܅ C{0g%5>E,m6Lܝ@ 8#5P?vQ6߅ <ĩ]] Hnԋ~'E%gtԝ@8sC99@ R k{:|Vzs̵E Q|1Q6f?{p_ԆCeDViQ)9]Ր7F!?<4P̈́ zi'9q_3)%!|9θ[pܣ~@~379 #|VbCѢ3^TY6(6j&?[O,[bdt']qf@ډفD z>ڇ}SH;76~ha{~op"Nrg5۳ysx?gMAobѨ_N f2Y*@x?Db݂Vuy#5KArPՎl9Z)1K 9Q7EhUfQy4N:]NGH^lߊ?\滏&nW W5oC}:'e#?wx{"W Y{F2i X M 8Y;Ы6,L<j7h\L`{.K.GwIN~`NpZkW,!%~? otEN8d}[Xgc 臄 ΁{1$T3fG7sI+:T<]<y{V?;L70K}"̀҉EA!@%oB?M KZ0]F<Cxc)Ə>(4zp~6o^Wp\OZ2mtudqZ34dܝz Yݫ_DSjTw"UQ;X~?~uu::Z$ ?8ןzhf[W X@{qv:X|ȷ{"r/ `ԻI9$ĚiO2 ]&k(#zVIu~nL &(5LBLY9F3 K^ U ٝr8_/\i <4 ,ZS˔?62^Qcco^oy ΒQih7U~Dm(LM&}wHwO4\E2AMϼDWE>c@-\c v~|E.P-.[O#SiK4jWCf{?,C?՘|6j(F1uf;Fc uZ<<`aPDrKY*"S<@iw ($1 ^gȊB8/Vh H$!R<BLBo(n׊;ͽ$e^ Щ[} . v>o"# 0lk)]aMiocxӬֈ5I;.̨n\$Cz`U^ߏ֠s_;WN7Z|@?c{PdΎU{w):*sHߨfK3u4+\֠zՠfs2r'YS E CI4YlBe#jUKJ,_6<)y/ux'=.9tB)v=.?q,^|3=~mCk;LX1f9E;: I]r%9 [‚1nŸ/{e1gQ\L~;K&/_x"[ 4*SkIqc}C (MJ=6~BՉ;%'.ɺPLS?P?jGf璯JLZ9H2#ʣ)%"wrO-8F]xjEc}"/11땋V hc}@/hGC ˶ <""Wɏp([ EB#ir2&"jT;:Å;`_lG2'9))=GwFҋVgJO$gt,XAByED{Hg[&,S8Mǵ\_VPj:8AxYZP~#k nlwvo=L(օvł-C3NTuzK\cl$= z_pD=n?(y/םb#*#I{{Fp@s !?_zkҔ\J&Bo\~2O{`>ГbvgwڥOSV;r |K( ֆ>F?l?]N9r8&_ v:D>^NH"|@BB@V0 |\e>qw7Q~Ztbx-*8VG%_w>ݠs'y>?砙j ); v2w1 tֶ[s@vH ІRʁ޷P;ͭUx;˃?p@w7KZ@ 'Վq{d![q_|wJ|t鰛5݃Cjmzzk8Z[5ޙz~popסepӸQe:şjx#B$WT: XM)Be/w+ws@y#tTT3'仯DB9Kɓ`W's=ÿ<`^:̓)8;T0Lu[6? *|t&]E"{L .!(G"bPX9V$4t߇&ͿjjC / @6ɿV:j|OвąbUøؕ0zRwvدM(eWrl!5۞zi !@?+m.^ D0YH j(`1֎|5lȷrh騾UT{fn5,y߻Y_ޜ8TʭrB*!Ľ p@t !]`A֛7g|9M,(]dFE"14z-ʱD{?KDg fթDwޫ\#[kyE4εڕ1fs_;E5B,L aUNwA?:-T?~DrdirT  ɶxмkS?nO({)a˒?+2jB+[7s[^"sr;[Oߙ@UߒȞ"ۮvMtcB8K! Bmߜo#/q@)w*,@4 pdZgW;1<"l l7_ek`lILD “yCm,˖UE~p^Eք(f@=X*P*]~06 KGL7~ 5z/\q#h ,CevK?Y:Scލu&4ōsМ֭ՆN1ȣJ25܊5/~\:;#vW@%C>,<*&F +zK\$xP`XI ,Y#3r}2)P -P &hQ/UBk؊x**NJ*WPNʟ?,W֬)T:Kkz"|{yea/>ө<-:4.𳎋X)d)rS|j{;]:# ,.f 74C.h/.ol| \(銯|{a^< \m9/e_H͎@=[ >C{y]&;i7ރvJ WWռzJޞv@=Θg15l֤U#Z^f:/hybIEvx>3 =ѱ{bs9no= ؤ#QͅJIx);;JSv|L5 > 2j_d`#kޮxq 4I) d"_N ׉lv@;i[D+_D TA@z_,/ Я/o6+X/(+:L~%ӶA2̓/j񷹀MT%_D,(W]a'ӕ.B0`~r_w ?^`oU  , ۭ_䶔Ջ`#` &m|:( ^/ԒhJt&9F6].KB~Ɂ&o{o vB"]N@y/?E&!P0!P_XZVe5*,.vVa=?dKr\xBAߠ6'{BW3s53VGYhOK5©7_h^(ki7G`rTc_v/*>y2^!,}-T+Tdl10ޜsX.)FI Y9s ȩU1Ĥk/mr5Z;6xz^m)~cFl;S?9׌d@4r9[Ugwl,G Nb0l@w{>8yW~@b QTmދmDYu#HxnXc# *WHRa')2F>9\@BO!7| qOg.v> TTlE2eg,h' |F"w]8Ab=b5q $.CdHAؔndh A𥡏 ;6~NSg&ЊPKw`p\Yjվ\o-! i@tvOW+&_) o HP1#0̴<'u( uGyˏb]I;5S.{2:iKEgXF=p5i orhzWy@3͝G|q 8;wBP;jU!vjl,42 _ϚC2h)p}@Np=(D։IQ~9ۡܫe])8.EAT?dW>vr(14}MM7DʹrvWnݣyA7t641w.zgg_s6&5h/9Y2ʉOӠ'H|A$9K9FA?k9[^OUtNO^_qhp~r)|g^cq{[6, 3_fhp&V+>,ʰA`+)NhN?'lEY hd醲vf%'9q@B9?R>#0|@<9D 'k޼u @9h߇\(/s=#vԀa \ۉ'Y^ε\Z=$ɯ{A|}_W<EnIrhz񒲭ȇ~eU~qG"Wė+NZw)1-h-[⇙\hg\y:|=Wt+},(T ßl*ui-aD!ya/Qd$ >³S$ҎAO-Tz-oI^oL9Kf&j -ܾp[k@}i-3ޏL" YHS,/ \HNr@|mYIzY[gg?<=Ƙ9,] އFiR]n8H'Tuv(r沿 - &S>~΅h5V ;?RΔKx`DM{!ٖ{ 1@\}(nz!ҟSJvM >wv@t@1!I-/+7Zp/OhՌ'i!v~~t;eϑ9.}uit gJ ϔфlMBD}5Ďkp3`H;E6?-E,pC&b 𱛄z5C_L$ܮ\j͊Gdmc}}ڟ%\z$V"O8{=ݞū!y,3wC7m)rM3*k^@u]v7'O%O?_GsP;KtE}Y 65nD{e/Ow s'_oOHEA +- T9aVy-6̈́{ :ޭ.8B*lю;CSu `6%~rK&|>vZLt@}}E@ owOw_]xU/|ʛT|69̐#͍Q%Ɍ:j+}mnFY9G@~]P`z_āMl%fΨрRaf+ĸ R `N7EBQ3;p.~lj:q9# AgT@1^+3-nBBg>R3l!69Nvߌ^@|/=R+ܒ2cD_ebLAx2tVp%td8`[EɦǴav@sĜ+ю< a'mL@"hʚPo~# ɝK@80| s vդNldV tr msN HbY5[:/uX-B=/L:|L3u;8Hw7O$](謀ZWvfajr8Ƨ jwpMXWhʹ -G@!7N۝#2T׼]R^qt sᨊ;]o; {·YȐR9_WwFq),,XD@.s35xwEc쏨rlé /N .yOKPo5Ǖ }*qw$KHOe':T|){7G  pmWrMߜ܄xu{Q'`5cy8񙝑NٴCn unifxlECΈGdu,%oNL yTKcg"'KwK>@Aw>@'q&=SFlӂ qQ 3nN]7ޒC9\ƛNb;?={m{QB;%WMQ^ ;_.}%.IM~l z ?G HWcz}kz|@}8Iw` 0*)PXŖ7GT#W΁vCm7blpVŢK^,z}>Ew/$ [5¢"Dɷ?&dOɸ!wuru|b5=_/> e+\6Vz> ^X6w\pHAbɴv7$3ҶqĻՉk7'7QG*dڛvgim L|N&$kqpԏ+NI ߛ;hY{fSSR|_(?=*کH1(5R|(O@>]#?xcov ex[1+R;I pɀk~TT.fqvj"b_/(ЂS$"iAb-HU%3tMeNv᠕wRfKn # ԳR-4 \G;Ӟ>k"ZN,@u!Q P`]56lTL{7j7q @ Az/ىeʦ0~98לbڍ_90xu o_ғ8=Wې> ]Ty֤7ф(d>TCƩ w^x^ȏ˄bo mL H=! BHNPTog/s y+c.O7lPI^c@`UN:NvieWٜ4{p򠛏܋[0ֈW } +G٣'g$N௝fK}B {@ ߵ*X 4bBuo{ [;how|0=<765eT^d p2HqZBO#??'X܅c@ 7*r X5Ruv!n=Q"@ȏHj|o+0N)GP;# l@ `Qy}; |O'aZ2B j \G=J0!)!RO5]E"ўN? hKbYB\*nW FR. Z`'"ˀfR.Hַp Pg 4Wc8 鑍cf >CD/!  ;{e2qz~:!ڴtI\.B+7Dq`dpwFI ɠgp,Lr3Q';5dX5תghvftHxd]9%PM/Wq@5o+  XiVZ@ iG$ D; $An!`{aЋb x^D9'żhOB\J wE%E˅+hc04\%SRIA=MT998:kM/j/vnj|[؟H%M@>L-eMG;SN[8rv%SF&p(_1d:Ÿ,qn. o:XrR*ihsgTvf"Ձh5i^=o)\l:fkg7aaX`@7I_ ƃg|R")0a^OwIj[/|POG=qO1:١xү]ub1%B{-=bc_3Ւs%p&أtYH*?R zbr`6yfb7hTXVikjVZiiij@?RS(Pj Dfݑb:@2C``u+| +3>O K9U 1h 4!zB% 3?K*WN=(G(!CoJp@7@Nq4(Ÿ+I!]Gͬ٩%O?3>ftKG X@ W7C\H @ <'P.u/ԓIBu@ s(Bs5Fv}rAn{䍖`'W=:tbz{$~sZ6~[5487v ZbxoH;3>È5/w_8t@0j,7~& GNeȉC#+> U-!ip?>,2UId1{0- &rfie%F2}e68KWGkAƌ"ͫϷ+vZQ^ O%W^Q+ +ǖ<84ݾݘLE :;:5O"y(_ } ԇLzwd $j;XOE;(6Ěh 8z< NP>/fIb,7PLΠDwЃ@~\Y#ȟ hB:+9|^M1Ew@l/=x>o1%fK9bQΆ>:je&{[qzw r}[bo/ B.]}ªV4kU{SHNhv,m qZު'9^߿1w.[t;һLg"Op C]g6wr(yҟWq6OP>+=/@Bbʯ~{0'IƕK#7'oLمv"*cZ`Nh^Adk>_H,+RFO6kpn,GTG߹iǚ4Q, Gr~HeB3HaK&T| P[DN +CP{Rn7 +KГЏ<#ɿA -@MK ;A,"4N)Ȫ= 28g:& ˓ tg@uC`![Ox[X')_jV^xIb@m=sCC˿#;njWMhuǯL\A3}Խ:uO% I(a?<_.vqY= νQ)G8p8 [+Շͯ$)k@M( G@LH)-r4J& s;Y˴VjCUk,vt1/ozswMSw׏9:7CR!ASuX=r\D,޿g6vID0*@1z%(E9TD9gA(*`7LwߧW`Vz>gCUuSN:QG75ǝ5dg*L U3&6GFLL ?:V߼F /@m-~Uܿ.!Xo,V{K>H SQB+H ! $(?[/d6f {l+ay*8=("| kb_Ҝx9峻r@,'/%^ R" $Wt4g5rr%$5M]䝐@-9>TGA "GۨcRy^vcqv?_?*-P_;5%+I gl\ՔZs;Ù3Ci:y}Iނ&

    a:Nwf@65]#N'_uږ>C:`uYSN_ fK^POo·vG[G*01U %C]>hU7/e80I?5[˝.K?O1[ ͳh՟ZC]KAFÙƵ:kfh߈)#g;h/rƧ` S] }}(Pn E?琌:~2bzC:&9hS͡aX"vo $K &|  Jv >O]|<0Fhq;%e&S!u@1)ЮN9C {3b0x1xFj/o(WI\wHf%ofGZ;oB%#YY\!T¿+u2o ߚN5o17;`l8l:%(!n6 r<Q>o |#:7g55;(%)FdIB+ଗud{8ݟN3RϰꬆIC(_ęНQ3dƗOU?ZQ%B) | sfss%vWZp9ZƎ+5Yi0R!P^ ]Ρ?@>pRv (k:/ve^N@ i=b9fa&llxH@DG37; LJZa7mVB=ح]: Z!ܴNo}lMvҙ5=.;6 XiXoQv?{M <<|}ƚ?!]jl̈́iJve㣣`=/ބ+e`/"Z:HJyq!zR˼".[;V2.u^GTӓ"IZ'O g|y@*UXs5!@7@Ic h|%Xs0AfC}S{܇KY_~6*mŨqn'/l1R$.O2̯hw {>!0,¿(6OÏb]_ov8Vׯ 9ˋe@1{OhTX0'7v;b'Fȍmn6OLF]I3hnC3 mѱo4AFU֜eF(x*빼 0~%wW8k7 L WЪde'P Z ?JKXH^|sΖCȕ3Ċ)؈m&Pޛ|uQ{e_ @_H}=;?ˬ6'_ h1E~0rfy$#TһKpt'9aB2O=uk;ztCv8F0vu9M =-% *Ju':&Y@w9 \ Q*+kmcrHim‹-{Øy$;M0vM?>3@8gqѵ<;\ "}>b⻬=r9cj1د.3ZGvXPNp E+L;bF fˣbM"մ(wYQWF3YE#]t{O+]n!CDK VcLi\By(P|;]{rdXUF1Pj; vy"{ >}Br;ޝ xv]:į)y8G:׵컴2a<(if6$sD(U׌\f1+"bDbB*H9JfӄݝѿnTթpԩSslALxgʞE56a>&p*JN螟OhnDOy%ˑkȋg̝ܖz9<Ϯs|NjE9mdUi%޲ H"qpSՆscY+; h?"'o!s7)߇ȦL#!3O_ H_h| d3~wXgۭe(2yN;W3?{ZP{C/Sw]pu40zsh ԯtlD=i)H1Msy"W|]Sɟd*o(#h>cKY^ֹOL:iW ( υBh=AQFOI_䍬a/7-̯ZY:FTq?wHj\ڙmI#ҺiNK v x8ÞdG/ d8ՙ1N %ڔ:vmofcyW?ti+/O $q Қ4v9w{UNJh (=mQMrZ`<| ;i x@4~ Gy+-#bfWc4E7ܤxjTQe+Na"@%$>@C?C% pz~T+Y'Cz3,a}IkMm{{|&GL!<,l Ut-;ߞd@QkJ0gi8}q\sr򌡼e&$  4BB.PB O2g"bͳ]ݾ) L;+Ph_n wbq}E\(}/ tT' Aox P!Wæ X& ; F ݻ[!Wn L^kũ5Ͻj\ ddyzz+Hw8p}9}Glz\WãAr!2"өǚLGmF X,Y-D E7;:9cK)ߕ_Wem(oX/0j5j;ttA5wtYoFׯEm2+xyQ0<ԧ\Rm dIGuBCW8OnEn t鴰桲Z3 :S-;7P;Da;#טЗtٰH6s.].*|qu7HK;@󩅾#-Gz͕笲19]fdž@}kp`k-jz|cqCY# ux5߉ֶVkizϵ) k?YRtV?:Eǽ-9oM˹zID jX&dRƋQ1:לޠ{F>> Rй^q/`^Py}rǹΠXX"7.@o%BQqgG>=s?E\ @p@{=Wuei$.Jd$֙5r;|S͊OݷyJ>&p zes~.3̹Ɖ'rϩpTtg]{5uԋ+ 2wKGO9֨zk6p "L s˶S(-0>*@J`zqi9|T;TД偃SRabRRf,j&Mr[s y|=zd\lj@"goXOOqkԨ'ʆ;ӱ-^ꫨo)kbyp ~@^iE0[XccA${%ٯtȎ~ݍd|'9`!S'u{-7Xf e ߳\K{I[D3 :ݨ`$7m=DI5}sn޶}!hm"։P'HgT۝s}Y}ߪ?GA} j~WWتm<1lcpjԳ 9uosb_d5ggɩ)ƛyrej%{I7W0M{ ϡ^%巃Ž]yX{|D$lH.ZW/AT";g_Hs02G;B? 3#qɡh._:^\;ZG,޹ >PK?I_|ľ ~Eܱi*z=Og?7VQ㾕:)ٕtlYjcuPAr^U' <] ~%)M߹IfJ^ w3xȉ܁#[ :0 LWn&!=S@![4q5f`[=_Jn{܁)Jy.}uA?@G;I๗ 1XTB$!VN\ҫ4b4e}Q=Չ4 W%?C-Jq'WϑdOjs^7ؽͅNeL̀>'.}=/A]"yi;-k&F o7~ HN:@)T~ٯX h6;r4yg:]L2y]k歐UNɡWk?"^LwusҖ"fd4&[a폷Ym޻DPۇE&0XQ0gxǾ_i/p|dkc lRc |퉤4Ef&f,p>Ѳaq!wob&й۾; ZQso=yt+1/[? "ق=٘jjHblɄ uyԳKuA&HR>p'LN9UoYWk,жFoܷYC;v=AT5iq!lvfDt433"lyrl3{-Wrj_Gs^;Ro~Kaޣ57OsC)?J炭 O WC F$$RV)OTfhebzR;H$[ۻFkK@IDATQ8X+k![7ns3TRf|d< kͥ1:4HCH{UO.xXYSO>\ߕf9:u sҺXPLk!"pE}[-/AY7z%-CV1GkU,1v+h?TAn!w}(C(*UOe^/+Р4^@`w@:]`SSWO֨ܟj{`fO5y?MCN&!)!=#Ǒ42Q:vOB"&N>Cٜ(v yQ1t1v(93=&h0sl''./ŔL&#?)s sE0о*` „@{'`s cd}-ᝄC߯-E(?B7߲1zSΧr'c9Lԟ8P8E#0e]jSު݂м6oMӉ30&q Sb0s]P)խ.} ļNglhcX!{BaN(8l|JH7d}bWY0YY.ۘnsXe-;ŦfwniIygw Hk/:j`K=*ڃzccLx͆J*pJe3GoN/UߔO59=7CNZ XqJ1BIYƩSy.SU Ml0icenʈ^+hwVo))Oќ7l/ٽ^nˏ8F٦?kK ' ?o j~,cd~SK Mg3&8wtFb_# VuO?#fsל d3mGFٱSsvn F;: <_r{)H;DxiV=,nKv;dvF2]os{aS;eJ@!'6w5k^WChD 8)(I M|&Gx/_C[aA]L<}"s~a15fP;'S]פB0^ӌ4244#=p$b<3;q`g[gP2!mrl63Xn;]Nkf!yz!(ʯ}!ȏ>ecl G\nGh\\{*o4JP R3:ITKyyX))%#jKӊWb}TYbR;'x>J+q"uו`ƶ0X9d[G. VKOZݤ؈?bAw>J#m\N^@\=4RG,T'רg=_z899]Ѧ5} Nh1]:pӤ}kt^Qr/OD:/U m{:Ef?7AЬ.AWꉿKE<(P{x=;#iWeX~w P!RU?ۢ^[:7ENg`ǾU$Uɘ`)!G (I%_JQ s!8V?@@{B`QR쯍^[lꫳ1<; T-ϧFۍ8tJê+_C{BBTEpiD?%?VWYqf=;Ms}dh6(9M%%MWKMN^6U< ԏ B?H,J!s5r̗ssFS5,aQMNNd{qvvK>:s'?+M䒔R!/XS|ٜN{NPC]`467 #BF(@s П*^9`V\Y@Y;_J|ƙ&0LHP3K5NDɜ/?޵[\b|O?rne7AgzA6p1I "Bs`x) % ߻k1Kv) m@/1Lq8۟; 4 UC?sٖkH m]ɤ=*1m?0!8MOgˉ,\_5,a3{SxG菾GORI`C#_4Ξ+26F 28FV\2wMۗrhȹ@lHIj|<0d-YX SDjA݇-8UE-D\10g_jaj 3xBպjQa̧B__R$mSh;q3)Q!9e3S,:$&ncNLua.P]?i8 !-uk(6 FJj,00dkf{C9i*y6 6 >>wบl?І؅ޓ됂 }P@5"!c:K@!"MPJuEвV֨b|?M4#3#+g 4{V;Ka@?@,i"u"Cxw8ݠ=toiT _pQ;$[u%/0Ü[ ; {9­y$Q ;3cv@|&wk0.2M?-cZcrhl+R6n^~fIzY.,}`}sh4PеLw*~܃߁5/~WWsRwɷT+Na^:]z$~߸}|S&&WIS*G5>żgj[~ɦĜMlUE<#x#wӸ̃~lG $WὫ|,KŞi[v 燨l [%UϨ3)8ͼ羜| P%eWlIcbB$mkwk}íϽ J(uA~i5BG[^`~;]=w{ؗFΏv6APO݁VK{1nGR+V޾oAW~t% $s+HfM》L_ߙ1s slWs l_d}GP!\;O_zP y(­f1"Ewrt iO$(>5'OYRϐN`۪{+PJNxS)TEY/0([/=t"^zHSB4Ď%'zwM=ˇ;vpp*_劎!}Zjz:& .fMO105L݀>ʪL\B] |*i 0 U6/i<.~$pB&4$kTn"v>5(go{m.M{HOn8Nj!! mxnSYvR-U L|H/^JKtLELP'C.WBgwRgXhc/wFPs؀C. N7 {v߅ч!P"ڔ<'iXbͶզuyM=ݘN48ƓcMwnZzAP9_Χ7;h 4sPMspty9YME9ì_ޙxO=nQT5궖\ YL0b9vnƟu܇jo-VoOgxPf|"?1qsebu]7Tܦ<>@2/v랏!_9kсt l$&O!=a](kL^1ci1bWx;+}#515\w$fs*6}@<~_EK|?Λ׳s&0! s' `{ -T Baly$尗5ܶxQN~LupL>ӞPžR $}#&Jo ! !Pmr`e)])",1<3sՄY+a<}߮"Ahm3!V?ZM:q+"] _!,<<:mɴ{DFeQ0nx44\SNI[kLq =:udjW84_ xO w^o~Ωk^z%>f"@f73@ځ"`0<Ν wX"4T=5BW"c4ф OM|I^ D}ei= N[1OK&`Iw|JCfp:+4}b!G},:Z/ET?ݡR:)agQFFk/?cds}# @a6'Athم6jY6|D7"nJz{&'|g&9k><̈́ȮoΨ\VHKѓj]Yk \'[ I||]阄&|w`vW n`vjon;5!݋^&oaD#weQk2DVG?9׽+\1gxг\\|41#O^iƧ[5MXu:oZZ7 |]bgjTBc%o2}(=FBĊ? 4KW %eQ SE:.= 4LR_^uO {w դ쾡]gMǜї5Ad㪘&T:DoX5A4rѴ}KܐEcLqB3Z m@!45i,kε.#ػE{-e_s%'+| H%6Yn2ȿd _Ȁ>8E6sY h΅diJM7=!h;?cɩɷ miՎbmeOXR!@K> X~we ѿG NiW "ƱeA Igimw}wd =#V1"3KCbVGof;[#$U;w75*Ei ҫGz0.73V4n.*g:P-,Ykd\zO~Ur~sDԭt`KĪoT"<&"W `h~֜ŎڸY0f|:X#9aW6a u5dk PL?4^\MzE" -)GUsNgC?tPӗWf>3Hdv-Mdz>|LH d1aʱkx0c ʹF9(&Ŷ[6GHwU+\`5 ܬKܑ(~/nJv[s-L/,mWLmH]hDh[cjM?V ]o ϟ_mz^ś uڲu,5պ q)?ǭb+*^P/uz65vS p=GȀ7bt2?Dže1mQst8s?jDp( W ꢦY!P.^[ߘYl<+˸k1/QԇI 1īA-_K̓bN #^Zc)B8+n|C5&wL-:(kg@GE</rףGy TWp @t@)C|UC#!swGSlOh ekѦK!75=mN(,uݼ_η@~N2# 0l]!mGgh'>1~kW#揔t-`Uܷ%/L`SKieA/7CK.dWdUo;Q'D9FO6FPd&Csq>^g "ױ䣞uu>!+ 7`,*(*0L%eP1V]޻o+ך9tN9s$ěKJtm#q PR$߭ՎB7Ed?{7{b9Ϭa)bȍH~^w.0N'FO_6 Rt\ Kd0V'u_yN`廵:ÏGDf>;!V8O8eicӓ )tDOLMLwa) ^5#k@9?"{JmѹӂU!Hhx/\g>k܃oe89k4 ;ySRʟV'_ ԻP!}"0X?4oEUv3T"ڣ gZ 4ʦ#89D whGg !Da/;{rr,iK1cjå4*dCnRm1(C6P9r%w]2A ܷ[.fշ,<%ͳ;]G/VAR`Dڒ 7!j\E^1$>FC*Fw=G7 P]EQP 0<ljXD϶k8|eܒ2 *v?8P`d<ܵ+X`v)T#T*<ߥ }24oonx#qq^6JnVo`V%(%ڋ{"4yWڏj}l3!O4M.)`f6ӷBͯi"g8g{/XUޕ=ۼړgis{я/X,(R6#=E*l Y[X?`?H?ެ^BX#SI oho> u&BUѾ8w?3kVHfIgh&1M:v`F0RC&п!LTkS6 oP A1:Djf._O0ymi<ط!<2Jw.M8 U?M9͡).Ǝס6+ W@0L7sהn,܆nV$c5s! ~+!.QN8_j@;Gd!|ԣNO.,yE)?{qdH~B1@=[/P.#Vme.~N[еacg9݆u8~x;b?`~iR̈y o |,$|O-c3;34F s<E wo7m_r?EٿA4뗦Q|@ECx2ړ!\̈|FP`aG[ SZ 1_(bK9-[x(1'eνĝGcdJֈ-iHژq٩R` GP9z%s|k|Oo*Qmb2 baw :2_'sws9#91|Wk=9\a!;VWc J^'aBi<Κkqjt>/=N!fʼn*b/!s'U(,9!s?=!zO4ޔvCw{N(}ӆqۊT9դoMqk9D9C!~ դa_7fnK6qm;-r1%9;qoC@wPG =N% !+)B[6aẍ́on}-Oyk{汜҄OOwKޥe*{`qv ,Lm:,P,>/rj<[7K`"as kIr6=h7 [$t, ϝ,Roq[8s$ޣ)ZDfk=ruoFϾ8adrjft3$oeadOd,.+>4!k{ N&v9)#βGޠC~9)T\6{k&ti4$\A;2>I'B0 :eA*B%2d7onV8kظ7$MLe< YMJ[m-%I ĽHeA{01c0^NRclb,nyB0S٦2gת.u=qn4!ٞ[YCc||EUʯqN?7|!i:͸%^ o#wd W[k SQs = S>/mXx#gI0 V\'&~bE@e8mi#,0&ZZ凜W_֮ECG%i6dfMe7LrwX& BErEwgR]9='2?8w.M⧻ !Hφ3w+^vfs/koK_:EM_&C|:kkcyE{DAR&RO_~Ot~<ٴ/lsc`B~->W <6-Kn4_ZqksyW{,b >ˋvgx,E9\ .MgG3? |R3hxcj~ "gR+1/epl~dY]=g9|M#lü/dnǢ=iR?.<ʡMD=ҟ 3Z Uy[đ5wk֒Fi]lQ00Ep~A~%J>+{smi3x"|;[ 6=)0BO ~aS4 s)^ڛe|^[ZKl>y5чJEf<ؽ X7+ъXyȗ@@Qɾ^a,VHx\2DP!RU?1X:%ыa&d=߁sީJJwsU~;c`_˶c|WWS ۵TrUx@Q7vK p7bUMAOS1z߁$[xaJ&'а:=:-J(X1{nN^ 'ZNQ`C_6V(τE &F;א6.rJ|Ќ`T0'>|*nE.F6O[|.'|"@ʔ( ѯە}ohKpj܁{^A wkU-_x8o=uY&h8Iv9AYzvIbbEC{+~T+o%_B@пY`@*x '/FQhJF=>ӄkunJW2O{pƆ,!=G@@6 !D傋 Tyv6ٔb[랳r9Ӽ$j48~7RK#M|ʧzL {(1mh4%"0v2;4tris5Ö6[|gJQTROHI1?XҰ@y7OoW5F^IrszuIȏ"YoMg71B8o#,n3W:z2RU0P89{R_'hɺKw_ZUKMwm(PӅrqg#jN BxinXJ0N\-LUekJ푤MHVa4)t|߲-kP>bKXY iБeem;}D*Yr^wd@gEj|qP/Qꩧ`R%Ox!N@wS察ܯmNH. N*:90*)􌔵+w0ft Td?8xE:Wr?p[־hxIzRLC#0~o[(ۑ/zxSm(GzZv hW>.#oZ2acsÀ[g*ưL| A@vn43i+YYA4-;7?'FC06^)0 v' cd>*G# tXwKє۳c:/ii^_b'f$^,F{`UG`818})l."4ޘa"e8)-5 7_9 ԓ;#lMy8#8~2Rw Ӑƴԛdv庩sZ|zFDt׷X:B`]b@=:G =Q<sms|uζ9DZ` {Iǝj|'~`0%mr&P#{`XΫۍ7*^GU| s(ZìGˊA:84ܺ ((]C;ԝICzHe rנ[] }X[z}[r9&PLݙ]Eu$K)sSyIOVmX幰5nnb1)]hzرtd1 h&;wc9T̍5vp}0tpTB-j4ɝJr5lRxj5 +i ax'hhumVpK1[s=/I+->MT$n72rx ~D(GW쵃>ᙞW+cяsq`]i =.Q5&48QCyރH$w V=NbWsgoQ-. K)v因C}}=43Ld?_! b/L^oxk탸?w"TB]:\:-R-RWPxo%CxBZ[K jO.+'dc{}a*8]y3:6Ue#ͳ JEq 9moF>Ӻk /"oea]ZLT#5*Me8o=eO暰^qGll%c.=kӆϺP =_PdD&n("`bD)Ìݻ} t%ˏE)&Enh!#)^$q~}R`|D`~&L/t{ ϋ4џ;no{k9 ep2x׽>g}q4on>|m$ w{P.r@0 =L0YP.Ep%lb76-OgrWmq},_iItVb5Y-ҧxI'h+)2nid26ڞ1=~CɠBmɵE;utUsyoі]~ۙo/%8 ~c]zuᬟ^l%|lTD^~fFE:S] 2|697ٛ"G.5tnj[oBsB~ӳ$@IDAT[뗦E74.y5ɦZu@WJ-AB/œ\&`d*@4f9gP|3ݓ=0\6>2cŀS/ chs9agzF*TM/T[gjI{,%By j~L"K{5g;ГW \јIg+bkDuEO1] @Rou1 R"J+qӝaL̷Oyb1WP'yan.XSFfRoK6 t; vwAzvJW;~A{d~Bݐ8ȍZ 1񶺭%%x daSCw;T-N+Y#,ۮd|qfӪЯ>2͌:Pk=,qgOI LxL Qe1{6 ][|اyɷi]b.Qw33/.-,k=s<ǎ~]3{#:\vwNr?!?]u*}1m|y~|(;ƺߢ$]DyÖq9  &LXwLD"/D̙Ny}A.PfG cͺjʵ=zۭ*G.b.u #PNH @+KgC6proGm~.@7[XG0QߗP9zE5TMoxL0Y4H,:4rK?N*Y7%w(,s>Q,Oe Ƌ/ Arz{%aj/z**ONO;k6 ux:Pr/w[RߗK^* We~]<6m T&Pس1h|mg^k?פV Spjڲ+=v4yZp`m<8EǪrI_̽x R0dvIoEvi1t___\\`G`}]{'U?﹛@`>H Uڋa?w}_ְ/t2)cPȅMZAҥEf*?!=!L J [) M]{'E́% L`ˆYYѫ1#""0b" 9aBM7̪nMwש:u)U\=Iuo@35bkh\n{O]k═Tu+B9IUH= K'n&~ d! ,$fY H݊( 2aȴ;ru|o z2 ԛ6BPqo']. k,n=᧚uhO/~"fa6c o]g;^S o2#-W>!`\B9ŢfvG[,y'1L|aÑ̾ _FO'K&B5idzDFt)T Ö?+u->;j.$W;X%-ƙ{o͡A ~"e(A0_lL孱>Tum&[)=,ڑW,rh8X&w@[-TBv}*J[>[aNc8x΋M!\^2|aE(Y#b+ L@f w ̓dݲ@~ oE>Jt)#Xa_^i,wM4q~>;`h~mfY0$fws v?um5_g?8,2p߷M2d3 $vo]$"?(N!;ϪѮvwwQg<2di'4Jҿ3O D@hf'ar?Xپ=~Vؓ#g6/ODGAֆl}*4O< LS ȩXWc{0ob#u|T;43s 38d'R(4p ]z_Fwuީ6ɸxC䭢,նRf[{brDB`E.GX3hGBr;6 Nȫʏ3tCm2kjz/zzFi [hׇ*ٖΫ)5ŋL?Xs̢)LHDz "|/s4~ 6Pw_m|R0x+u&@R( ^0Z}=7wsK[_zlAE)6.zyjC b٥ngYǭOz*]ZBWu>.xy9ً] PxyKAXs</O}|`19y0CDve$[!__w Ԑ$+)Cl "O#yO4|t2:hLy%z˧T gDhZ66rNɻ<\p+/Tog.`,e$+!=`91[Ǚˢ0XMfb%84ۻ+/@iQX_S)J N sL#Bk駞H vvnaUs8?DNJkZsU^&*hQLbwNJVE7Yڒgy05՞wZ׬:hlm 70̩={¶⫣xoG 0]&0CSIC/R(bOddM ==C-9Ci2{1Ge-,o虢 tKk=Gzs !BnDR>%qC,BS|ȭ["S֊+25nS-ȉFQڵ];Lp򤚉H:RTZt>?T0 '\# j],!<֕Kn8'S/#>)_(0/f[[e@?{y_, (>*/z/lLq~֭djL%02{2.^簰Ń7l~d" k H_P/y_nJ|O4P.O/ME,4{J?8(t{*x&d%sFӅx(^*кJ "~ހ}ё\z\jP8ѧ/%dt簗9wAsўTѓfXM3S{( ?+ҕL\kJ7XЎ~ ?'rf#*s=3^D KcoOG!7?6{w$TBڵ]@ Hp4)?l_kV%~M,^LSf17t~*|q@-*GZfe\xX;<)<,̥E@)d] =#e̡}770i Hsil &6NZo([n=^ k?xO%JW`>W}DDjO{ Ti 'L$HZi4w޳aF;y f c1y_\F&(=@o/Qd:y%S+t8 K]}k4lMűE]6uFfU ŏS7 @-ڗ7J(wΰG\'Yi Be>)zP9YlhElt[n. hW4Ǯ|i6:`+3!ݢASMŇt KqN:xo>F\z Jɳb>^:޵P.t%:e1m;M ܗ.*!Vk+DFTT3#8t(T "&T 6(lb3&paGEp.1?X8yor8CsP;\ٯPN XiV4{|`X-I}PU?q!adu}1$JRgεN-e2ֹSˆH[ҘEO2B(6J!Rv(*A$mn@>I }_`@?C@I7~ ]o䮸ߕ~rH%irkU?ܱwiL#JJ $jr[ZD\{[ _*BiMg ?Eixa5ɘj6oGXJ<&r#*s_?DNl@y plTtG}(CROo@A4.7 .x .Aw(f[LgP^|"xlvm`H]ItX&3V ?{9EU9>XT:#/[Gt93;HNKCdST_UDwGq<<56:ﵮϲfA^xˑ3ͯ1V;LҴJ34O(B"Z`@)@zPhʑs.k~`O}f;vK"_ۃ+}{ &f_h /y  Ǝ&=8=VzP{2'snhB\='wgWLܞ $\L2ۙ]M?n }duXo@A&k$e D:s?9~yiy4$O#ajԔ_3Y+wz͐3Ǭ,+޿7ͧ؏;'3w3;WɤC]57yNeI9eF-Wz/#Jy[̑!O.$?քf@4X p44[)@,cxc6\< Ex\i"ׂ IG^_&`qnt=*6/BRU|+0!bYgJ,?~u{Wj|#_tgWq|nQb8;R66e:#x W|HxO e%`ohRۥcf .fyGZ~f!L LP̣3=}V5(FR5< ď\) 0ۂaL pW*ďg0(sFSY􏁶[S3 ܉vN?|EBmtpɫ hFj@7~. g?!j8{#`2V-'?Hjҧ%#Oxz£۫ٚ"Hak{? +_|Nڤ/kQi[3k)ulä"Q/u;݂d ӌO=i=#Ɲ-0dʊ@Ij8̜M0oN{u ~=&:Ƙaz \pzk M Ȫ% 6  h6GwxًوR!:Pw>pXz?'؛䞫 L>a'ߩ^JxkI_9|,K33 FZz?Ǵ%ȣ\u[(0̈4-[[b tȈ վ1)4gwIF b`X@ DVu4 P3+7`_0OtFw3/ne2eunBk;?!*>]= x3('Ws\? . 󏛔i1/27q1a1N}Lx[zu=A +tk]`K4w Lqb~y#rՑ+Fx-b3<'tMb 2o2#Xy+'[ kdМ??ƹ.?K.g|!RU%z&~{ r>DuQP+H1%ZԟF'w_tW+ê_;+>.옷@߰~wIHJ4|)[ ' ʩF u|j>T;Kpڑ?1㑙ذg:Ep& t#Ùj$7T`5F/RZƀU<O$p/8lڂa/0>R=3A r/Dۚ!AaDQɏI7X&@%$MLUw.v TU>QssM:*Z#+?;n#uU9ks `/ :q$Z. ÿd8OPmP97FGi{:4uW+!喿:wOa^L^{'* ]xL!2/5>S˄+ۧFztͽtq*fUr5ȌY_;7ؔg61%VGzzX[Fʁ1A g.v@yKkGׅV@t VF +gʺy ԇj[440Kr V=׎ЮJ΃WuMD?);C!t{KLL }F5J>^t>Ọ83yyu/+XO+ w&Nv%Q#VF'̖voѡ8iI=Ѐ-/'K5o0Ȩx4t== zE9xDž`'uu`C ]TaGWs9g"=JMCxy\_Ay:}nm\by };6.PS }CRz`x@<^* 4s1QYtH:F3餝?:b/ z|iPI hI } ۛ}o@Y/_[ͮ)9ie)k\3*T p9sdg|ixy" Ov/ErBvUVk`;ca`}FU&ҎeLyù]bEւ39K Xf=&$qX8r]q.g;׽$?Y!ꉻ~2`y7`@˻49H n S"+8lX0S~87'MB<R(OX{\Agz#$_`%)XϝcUN|a@( fa5N \'Lx?3-ӐyQ^0JjSPq3ϥBn;>QUH^%9E@"d]Vrt@> ,wyt}2BFR4$65d9k .]7T3ȲW+ 4Xʭ!C2Ǿ;M. 287pTp<J yk=3;c{@ =Kix$mg7 b*XVVPt~F5iGg}}*RK=f+@M(iB" 8Y8xXǣ(ۘ{V۴/옫2VͤȊylmvk6U {#O SN͹)VVXL۠W^1TKRū '7ޭ9P3;' 2*s9پH6YQ{]SmYצA3k1SȚcoOB[`phv,|vǓKh*e w\U0Yfd!+F:exZa=wؙ`*"ˇ@W W ,X|"OwUDX#}FQL * ֏p{HW^u #҇0`)ؙU@etM೟#@:C-W8\`>tO]Sb9~5ypk(íu_|5 IBn}` ' |l"Roqy_ԟ}w㻴&{=|<!}^ _%yEJXNɥjC06˅JķiR|)TBV̑ҟꤷU}Kgi[Ԟ#W4NiS9j\3=K;)*%z;@7}Pg>ѰcU]je嶋c:76+:C^ HkʾkX`@7Bཱིo;`𧣭vVu) {_ b_jN:;V#H輙)u~b@#;TgLJ:wgf BW.bxD +We'9oQ㠓* bE?O3gNfGȞJE!Y睒Fd0}Ƕi"_|1H_9}Y#+&QDc܍uk/U0˓.8 KN+ɢ|NT{\B{V) bG ^m~@Kn#AMuv%߸`r;1!9Tڏ9,Z+9b4W2EGڙ&qK $tmc[R/.i3}݌H$_&_9ksV|+A)eF Q/Cc83ܟ=rj~Zy)si_unV&"3́r',ݴ)|?[5S ;8ͼnT F~Nt;/VZď %P] |AܩDcx. &F6ެV4j%џbf`4c^\'t]ؐJ]N`?]@?`  Ly q {ݤM5Gv:|&nDHu?ȆکդQi2gk?EmIB'׶.@i ԧ/SVΰ5gٲt~}DuX0z/_9+9 K$b9`= w((LF'nm{8]hE|0I|ROg!>2ڃV gu{0?ozC&T;V(05&:V]twxM =|"0_K^ !c Z\ {5141GuH Dɺ1 Eye_,  y Ɓ#Pck(PWP㨧WޓXѭcH5t~$Ѝ8gjeѪK1y g-}+.ǭ..]~ubfYS"e]' '4"#;g/>) [/a{kH֜`]nʢ~'2;K}2\!=& Ku,;x"cO[fJ=J踸=MKϿ % ^w4f4J ٯ |B}*롬4T649 /粜YYC Dk}CV>ޞ2TPwXa'k:|B"p`lrztA;: xmUk3{n]2/n[<y"|l|} D)OooPRwC7p. oΕ݂1/$S` s:Խ3o҆gVsS #\²?}MH@oNY8\@a @ m\01.gߘ y/m@ox&sƄI1v͢[As7V6x&,0LJO |S{Ґr69k\ciV+u@bK@IDAT\Boo$[c75q U;-MBG@Aw0LB| InjkL[M3q1$7]_\|kϋM.CwPFq`gQ4ݘ:L?}f990{7 J-P B+qB\|ƩĔ+Gw"M(' FjUB.Usu(G;Kue4#Ҡ ,GL,,G3iQh -%g`#EI֖;5L!?ÃSh(r2?\l,+RsH׹0 N*HG1`e UYy"[OrlJ:wj0-6#Եl3Z@o&8>#9A ,=;:_8Iϊ4YyXkRuꫥ*??߭zF{FSZ_'1hZ&E9K;aӣ:UaC_n1&J[5r6_4f'y%Rw7 =ƘwϺDʿ$q%zd_ʜO>3&; JR7א߹[~ [m1R^ZSk!//tR;`*:zFø^UŶDo{zht_ٓgy^ͿGL8Y+SH;ʼ̆3lYk4E>G_jҮ#וXp1ղ0z3 [=c]*[@:?X)&Z$ n4@l~9:L(R: R;6Gr5!@طQjD}aq`cr)ʕSu.c -'2UjӪ|6szQ>3078Uy}xد-mAJ:]gz~U^.LM 6B)AZqQr6JC 3<[Rx[\~eDbS21_#%F'4EI&忇@=X(\ 'vk^3D{y~*gN ̀59 a+iA'Y F=-$l8+~`7y8ZQZP7/]iΫ~}ƥ꿎|CO.0( ek$yJSV7]f q#95 zr~7΋`4PTH"Y} ?%%UA*:@m5sk,9 L(_ (xEi~R|ƲC2O 4YW8OD~3zX geքugcL.UTqxKnXj*PB'.ߝ0~I"0N)8{vcc&mНiGbj b[e-vN@|S!A6Fd˘ <OsS#W%He|(ꐟ #v` Է\N8-7:_yֿ. PN~"zZSham]A%Y1"}|#+ tɽDp-+xLu"hN'gW-Urp*e {? I-Y'l* l>3ZUG~[T i-# />-tÿ9_|P~Pgv+hm@L-:בLr&66|wǖLG5JC ֳ8czû~Oj9 PoJi|#VOPiDܩءJoW'=MVc&xYǬ>u7RHQ4sR|߸ 1P ' Ėhp؄y˻gT Щ[y 9 Ǖ 䳑sKڕ& LJu@~0.BwK}CzPH{מ1ɺv2 ;O^f "ߦݗyg7etT _=(pBcol?5솦u 9N,@y0ſ SzCFRokS$엡ʄ4LL MP]9[VF[7 㒉,avz)nJFqr4*[ ݮqmTū$ {村9ҺH1cy>Cgq;fXwQJ:Vayp e *~0GSP eBhe3av}‚-8u1MQΒ :m1Z|W5iSMKIAGV$'`P]HχBmcg@dO1JWl50z +N`ySbCaȴ,CBH]ۊZS{ً/K}W@\ͺ@?k\3H=ɤ~ 3fXx'&T'HIF=3GnQ]Dpuy%w{l4y_k^bǿ{ ˦ 1߻|=c(ZiFEGn yic|')3s;=8.}ǵٍi=@#_e<1CjuwMi:hX5׸fG;\MPYN}FzݜUL-jiu5߼g?\waQӦ~$L{Xv`Fg2!p׳气x;&,g-"~phׁvW8Q\~=12\[$%3ms7m=Sϋ6_5@sY_:æھ|u^ԵxtO\e3rJ}#הz7xQ&7r.h?琎n.)XVqV®^5awaӹi-2Zl`#HnuVꥫW^K}mHChpc7Tr pfdܓ?m~؁~(:6ٳP&hPĽrԃof ]Y5jIL=fvKexi+)UG޴rஈd3ޘ2nf)麝rY%=xA»x7paK ?Jo g@g R[űg%V^RxX ?S)AgsYrZ~=ɋ:=#Zc }AD[ x;{!5g#g羕|:R-"hnsl;9jD7XwJ $.JVw/|u?pˣ ('#+*]?:%,' Ģ<|],BR/F=wG2(;0|9ɵ,I_ J%ik˅l= N'#w/iDΞ2eFqݖ='dbMQ` 2dM[ޱ0+h/R| ;%5z0ܨi =f]ֆBܗu}q'kGnc:93c5"[ǯ>9o?&Xbްul/ N̛X<_V|/l|<ɓ*f$h& t>roeyYhF;`'n(v J,|dg/5$ogʷ5:[+sUIWlvA!r?Yp x/}>/[ mPd4GMWJ.N\^~2/d V䷟[`ӷ@/{ Z@ '5|!~^@Rɒ+d @%OWB{=ĉI979Q-eR[.sJ~<:j/:g[EIDr! mR";x]㈀e=vMafqƀǺ͡~s!*F#qBJʳNU@7<*5"PN,0~$`{&avoo7ߙLJ|Woo'Z&I|9N×-es:QA#_&^ԟڄ.Ѕ9O?~O@d,L9V4yv.{w+c>QTy3 ^' EQ嘶rz֖)M'~[{߾\;`\cv1'L ff9v&^Z%Fq*_Wc0#R;:o>rW x#(RL4}~f"?rͽ} Ÿ 3;O dr&3ηӍ›&t5{(~ʴa%(wkhCeeycoHד2E|ͨ3qh4Bev%2Yzb(|bh6D g*d-WZ,PLpz5?ӻHZjY#Q+P1ʊ㧨Wc0QIWKtUFd.Ἇrڛ¦V|cD3)#rDJuQ3bgn&'Y;"Wْ/1Tm_Jis|UEq<8*1nFL ~ * <>x"wN0 Cj z>0ǹHؒ~ltȴLЏp7awm@ 1vv<|GB^lE3Ah?cRo٨6KND@!xŜv p걁 |;bNƽmʧh`~o|[n0Jq9D1ssM{ *U^Kj QQf`L4 Sˆ^'*?(?50$ $VE \ϧ2m"`hﲅ!&)|g3RPJ@V' B)N"`TѾDB{_g`Ȁα@m@+xugu,6+T8vTU@ e|*@Ur/@w@g=_oRh']4cg% "ˀ;HӴ7ԗX׾Gg*v99~ `c~<EWrد:O{lz\&zܛBOƊJiPʱm$?c^?/$str졟׶÷f8iA/f?rmh_LӠ20wwY} A[6 ` (דx;QzfR0SV)ƙC ˖, L@(Z7xf[ 0Q=KWIxw{Jzi).i7a~MƾjR1r\ eo]& A zr`Q_2!^1EF\T 1َvhva7_ ߧLC?ZC4PfZe.ޮ'VՏդ+[G!UPBC`v|f=16$\z'iӒ٬3FfOW4EUr! Α}\PR3PEƻz{NݗB'>un 6x {Ah[Zz8B%N350JX*gKا4AeqCl^k}J]GM ]B!|>B_x10d$XqQNXQXJbf΂6k|lWsONvn 06NTo: #ʑU^1u+G^rیd? 0_} v hߵ]Ћ|.봘]L#d#5- 7.RWG&J̃d>>ϱO Y׏;Fzt쑝7};|W`hj]#FR۝Z=ԫŸ>Ϫ(l Ug_I%̻g.`^^w-PI.Sn}+ghV Į*F -Tm;H?Wr4;vf#%y2cvtKryS/`k0WK@U^wWՄŔPJJt`|E+@'[=!ne ?Nώ@ x~A%~hjm=r.2QL >fl&;cYYiөI<](Npj(Ӕ xa{N)*`ؙs/ yi:|,ҧzfe35 HUҬ!9 {-HJ}DP&f'եl ͯ" XԖF3ܿһbb?㄁G|RF+j3-+eǼP'Ewf'w~Ḏ7&;IHue}u2C]cɼM})넁|I%N㱧7զ+S{Y:G߷81m?ݹvڽƽ@0K{ \2JпKbEN3gQ <˳{S^z-_?K;º}#hQ@7V RzYw_쉋*qwqE*#Mi/1 B^y .?]9їwEUW_gR;QN+, uX[hKV_0iP_?wΉyŽU6"՞hpM[+jnmN4SRm2Q'm欓%s@;C|U 4 9:P@Ϥ xBEiG@ګ2c:h,&O&ZOk47  @\@m5/{ud|;]IWRV-LEǕ}~O'[>s"j&h ; Ǔ3K@PJzvƜEmџԣjsu=]/%Bi9zWXwЂmv0D J?t*(J)lLq]PrcO2Q!/ !W2.Fݎ&;NGI}N7oj 2>JK{z; g61?6dPi9L@=p=ѱww>aD_@**Ost'=ƨ|_zv[7围[F00d> 1j4~׵zpOiƋ䲚ss?Jů>pD={+;ab`~p哫?*f[0+[9h^Ft XF- /-cL>Ap2.}tïG[ǃE(rCIN}̖qژoi+<.oسE*@qt6v$\4bғgL8y0:6ۤ>U"@g7zg#CԪ9Uuʱt+aSE VP{y>1l[~o ,wY8eKprط<jrD ^W ǯ7 ࿒)(`8R_s r?!~ȉWxQgʤQ<X/_CtٳXJ2AcyIjەp!B&b8gA*S/cohBQ}$q߈8P̗ Q P`C?|N[ /z1兑F fԑXif*?( ̇FÁ? ukkIx_x{KN#P,Jr*{hI݉9.6~CQ!{"r(XyJb|T -1x sm~^QAL=-GPf 3*w^@Irw5=\>7 /?NP,OF=^k r>ӻbWDH1#`D@`="g ^fϯLmJx.lҐz[9ټEi-{)]J:ڸoיN$|2 ?*ϥ8mfbھak6c]~&F MV92Fd{>S7&{FBs';K{H΂]jU.KQ\N|+[M[X )KU/~)+G]B.@ ֛X{sV|@IDATdE .=.&֪ߎ>:/cgrzUj _ WxfY@{bN|OWncfn~a`[LzΥDoʩW)['x[A8gyHAa3moP(bKOl֥Mc q*QM;wU_@HkĹwa(ub?P6iە+C+%‰ruS__RSfG'$6MpAgTP~fbrЩnQ; {>uHRoPk\#I[![Ѵh;.S?K|zБs ΄{eB8#VMtS=!`AVl,>7Nzrٯe܋_~%1xp%+, ػs r34Ni F$ƳH@m^h~.g9IxTE}W==B\d8zc++>f|?.Ǻ*C1'(cUJ |nT.85WYO*ksOh:SrR J doyzk''ՈTCm.KpE֐{̃:^TS A~0` ٛ*y(AKEY;?t1CkD`ŮBq3,3P^%3"փ6Ȋͱ/Ax4u!כ5 w3/[KtT3KyT4,9JwQ`BpQQ(m!39P[$W5m"MP>+ t(pY%*57 _WN<+'W_Nc17 hT Fkt!{d@iqi / um;@z- g2x=i.vJI+ CUJ=;#`Q?ĪO//kAgޠ~ln0sM]f󎫷F;挨QX` 5/R׋OM^Qytt27x;[vE]',U?]r y>.2` ~; \wSUCT!uzXu.- \+>eEQv1d:0Jϥr@=yEDh_Vp^uQYT]!Vi y0.42ͤ)whM)#Y1 F ;Vz^gȱ'>ƈ^jQ]{R2~'SD¼L1_?ebH[ZОvy%q:v9b :63g{3r);sMP(L`BOW[Apa?C}N0eۄ, ȿH|dN& hLx}y5,f`";/Rc$AlW;&!fM*}hUkv,g񿞸ySm4PZ7la8Av(wN-~P3 DɄBxb1{G%@; f,`᧧m& vbnQm=Rq_Oi;l2n&t)Ѳ ڥn[3W5Q}G@a". !6]Vt%儾Z7r|eaY,ߐ͎fcEfw|T ~Sclelj5Ѷ);髩7[ܠ|]* PP=?88$&C~"}!|j4T->M1ؠ>ǽ 8 & Fsh (zl$P.(˖_ZV앙 >;*~};+>4kۣyK&n Lu?kZ2gZbA3[n'+b.ޅg(ݧ+Y86uLTGe]5~l2(Tλ.ʣk7_qrB&futk&gmEI{jYkkh7i_}kuI}~֨&צV6ARKʌb%:g NFDzS_;8m|OkY/ʎA 4$% @wp9ߗ<_yS)o9UsfelSrǓ\ot3.FrrGb޻ `{v C!bRGk B3̅<&@_ ^B a8`i,a/_VKi W,'txʹVrQYI.|]촡&Sr7M@?/IQ˶CLE6Y|[":F]igl0doН.8@4yg[#R俕rhdD={]8󒗤SNʇ).O*ǩ~l< .WVTpsA Y=K08C@yC@}\'H}d(,T;lp@i %/62t l{nc{l *˼0t:W+c qǕCF:W1!SpX~=$ֈn;vЦ `yvZ- w8@*?[gq;Q|.R}#孭"zm퇠"qA&L=;FXO@~>-@U; &LHszvA[s:KC=2`<7kɨ¬F%ÚD=3B qfaDn7f6%žBN 86k>得l҆h ݶsa`~Q>IGw̄1ILS.>|ID>ҧ^~NO%~,=K*h՝P@ϴU~~7}D(| ?D?e.29`0>J; m_{q!9ɺhƋr SpJp迖XB%vazVc0!ZƠ<|kWühW ˄AcW04% o-{;(+5G >3L6#EyvpqÐ== xH#4fr6|?+$ƻndn tKΥXG'´R(xMHZ!E J|d1=Ax!be?-u{eKddD:Xl @MP\"y4.#. OÈͲ%&ov)tP!7A ^\AF><0*Ns Kh6O3m/g9VӭtJݚR('y[(;(Vwш}׷`;^tqi0Ո_+Ԣ^и2T#r['[滍>b1e\MS7 0% hcBBO?~CP]gM?zq2oP Mn|03r3Y.que%AA󱠄p*`NMUbQŶ9%%>t-EیD>? ?Њz [I@R}-yP;{%mѠPyb߸AC0H%rʁJcd,:b0qSBᐧ^'/9׵*n;f{˜sR."0^wz_M:z>0R^G-{Oyxt v -qdwضq2[&㷌steK̑gQrtM E vp`TVs!Q ~ \&>UBAHW"c+ LB Sn}YdtZ.T@QKGOLU,o0{ "8U6,@-";]UO^ju!pEVYš}z(]ŨVDS(7w HP(vpy݁\/ _Rvb K>aC:B;wǔG3CR1{;S;2!t)ٟ圈iW8pKP&ϓd9mwҥ^J| om ~*a~ WpI~P'IYVa.Y9LrA #`tG!ym5&vd"]QLtM9-@wKr8V#]:v0QV1&e/Ӏ"\2[#7 ye!їsАN ]NqIT?v;sG^f9k\^kQj.a}aFrٓ3$-~.y_ em~23*'-NƓBǬ^Uiwݛi{w8BR GJIL(xW߀vSmF`oʟZAo&NbTԒT|=%n51Q{c&OLT F1K*wMiP?\@}~% e'z59Z`hb>S&n u9FNZV]lu[n.˂8&Ksv_P`ثJi:R*ͣL%U W!&ja ~Iea5yZGe˰?I/: W6w:O6P:CC؅]y~߳WPL@ XOޅUPadkmIL&;_j_턀bsqwBlNgzٕMsNzg=!tj=`m94."PELkcr>߾ҹt#T>O@[1Be&:?Y@TBc@A:h͉Ԛj /w/s6Zgg0`=C*M l"},sr@fkp+ZS@悧ܖ22 Jۺa>XD)gUcqMDn08cq`;̸KV&ke%ON-)kKD`j?~N0sU~Ht;).uex<~}m=0~Ld7Vfn滘>yC!oyw,vT]|k짷< 7_3\ozT&qa=eK<-{ylB4Q'{qڸ 4 *Dcb4L8-Is)+3O'N=xȿ~<43N%^\y} zQ Wt? }~zOp4RAvEX3SͭltFED@O}QkC>),݆CJ[P%7ΰ,:P(lǧj]Mف}Ft;nE#Yv\ 550$߂ (Ģa99??4_02~ҕ*fNʉ8z`E2Cr"4 *|ɨx2B _3e;s;,ա:Szjң%^M=f^~5껿XDd| B*@E; \$2U@nG=كt9j':`غͱ) ab0hm'i ?pүmWy2A!dcr?seY m~8j!;%'Ej78A7Fݐs1\k@zM^'!Nkz5|B_]@ iD7q1HP(vp @SB t_Z}D/l7sJeU> qO h6x ø4 Xhl)Q ?RX@@b1CS8z\x 'mԃ! ! cQn&_֎[ m;D=MPpE?|߹)r @ZZ>E}i3YtT񀮚g0 vQW0@'AWw_ni-FOYa=bC_[]KfY:NR @)+M{A?r.tN՗8:~)7ކv67!`O~ ٺ-8a4e= 8#E]J^1uLe}3tEĤ!<ق5ƵQs+?!{u_zk{͹{r.kGeWek9-h;"Tci,/S!"j*:ǣL2c'S4)Ύ vɛSI4R@=PDf8~OIݴshKI7K˼u٘lykL VSa{)P 㚋 wC/߼<`x%+SEW; yqh?GirBV)U_Pl%`BuHX(; tz$ Xbolnj'Ej[j{ݹՠ-vpԑO:e]ϠCs+;Y/gB-?U-7al;N2D PתΕ UcG*k_NErJ@R6l|]$4vbTB'G1!c@w l!`GBWԵ=9)g1XoJkوAfys_%jxmoq3z~pj h,ï %hܛj>N\US]JZ %ZD<[".  PE@ǿQobaxܵBeͱ46s^ tħ~:|`W&ng0Eo'$X0 (lAA`,VtjY(]eDv9g<-_x`"(Q+i}9zT==}; `oD\&t?E[Cqk;?9lqZ +iJ+A. w[ͯ)6ځk{w'`Cх plr\ϫ xx Z%Fd>]kw߬H:j.:)r+*b,u'LT*.xZJ``;"Bg䕱Jrg^6^YѧQc^gڷѳ~oǂϾr?^[<]п'ŴY&y3pbO*ZL wp&Hv~n6*rL\ Iժs~GgIj/5J0,=wTѿ'#TQQj'_V3 nvN1p.>LNSq&FV!_/725V:Y++O~uL4Tڏ5x6{i c8%Rʴ}Q)9FuYqSi8wFnY=g>Ƶ[_F1c8i>Gʥ?n9yM+ } |97G5o'o֚o6u[a7ؙq(yBhWq&:LtNajz=+3/2oq5m8Yit6+ 5ypDs~ipR?̑Rɉ.s*i, LWau)o vgqp񹖀z/>^gA)ɬ͏N}+}|.?]^8v~Ag̖vMV?KUC面2!-sU[dŽLlc9||olN}UƉ)0鍺=[TD*F_֬e2G^m1tEK/ T?Vw[w0釙# ̢|myt7@`+UӨo}' "T>CZdR)8祜|<;ҟjԵBP?XW|>U s{eܯ橘u5߱ӻZus[M:P; 3sAD@yQBDN7SZzV76.'@?梮}{B7mj9iF6< ^| }۬koy<0uk[/x-}דxS\ya&%=ncnkJ9Vu+lXb|1[1ܪo͕л;gQCSp K`1ߙV| 9;5a  !sكQi\rQ-IgM.zW_]~k8+j#襭gUlu5Hlnȇ?-s >>D]D$c=svLʯJ*5"g },@``4^+Pnytja:l,*v޸韟cpzUP+r pY6Z$uwJ=^t (_g^ 3-0A- ڍ=دJ_W'^G:FXي :z)2-ñv | O@ -z:5j+Z; "W_Z7U Dmew7Lh9EtKSɴ}U-'1N\vh$=]aYyhuca⼦]We{23IV-:֜+rf2q\g|ט29]ЖJqJUdy+@S7۔sgWW-B'}܈=u=̊8b\5G{YAx8%)PItNTX T8 'p/5/LcFJ((IV hD:ςb.HL@ Rlw<͒~vNPEyܔS~yD6j9WV՜0t'V<cѾQ{Ҁ+8 ^Mw\gRV;q6tymP(X 1WW7 ˺%Z򙴨j_*EIԲz,hSb΅!|Nr#zox| ~fQڵG E -6Z]jiΏ%~FUq 6uct4~KHan*/;+?|U 0+{dQOfԖlӎ'z>9f9ki h_ ?O8@D  &MwCv"瘓Mڱŀk|y?WOgn?rQ!ҸP9COLB[ 9mWTGkHPpj_-kl9?K3wVQYAՕ/ֹ"ÔJ/ ̻ ś5F=+/x>wء;N[Y ؟v%/!>wVf^xllc 'F+zRƻ.׬ؗyY4YsY 02.лNI8[nqο!|{P[hC>֚pwr AE ь@0cB1+fY`AD@EE7M߯{we^K}nMwWSN:EVީjn;c=BqQ FT"ůp? s0$c/Ve)┼ g%5W[oG-O8k>,;O໵JfwyjCeqR ]'0 ȝ6oI04-\RZ*&(=~z hxhX' wȋtPLI+o&ۋO~V੧9ϩzn̡^a%f^2*#*6UwMO њ9#\:zs9iԧ}Hqǐ$M@H(W~u5fv 5Ǘf<XB .`c}N/ ](VL5ddWkX`E52o4H"|0I$Fa\S`~ToKW b!#ZI\533u[׺1%>.D`v` AA7Mgt9PF+Ȕ t!^H猏SQqk5-%Nɳ94ɉQW@e|_v0Øv)-F$_M*Ri\k} KL? ou $HqS2v2zd|^djt:n|"?ݬY[#S:_ik-!eQ[ Z: ?f|;3yi [/uV7'ό/henqP,LN_=6+0>>~@.G\ƹ{{}1h1sB@]vw<Z~idW`aAh{?B;H3MI{UxlDrqҿ GMZh~eV;!i\SƮfdXY$&3.1mtZ$b-~_T ”%Pa85]r7k2m,) Yڅ[ :jatf L M?+@cJR$i/a0?al˸7q7uOpV䣉bgA3Dߟ lE5},x2k@|\c|xoHgt3j\LygOyn˴wո rk%`d8"+&㼿Uj *Ve7oTAd7H8ce`y^QGyO޶> l3sAgp _ˆ~(м 7SzKl4VȸOƛ!l[_*f&z-!Q`Xpk+pqrdIHUڷFTw'Uш q1OsFT0; .KxC#OWc\OpP j*^UкAW[(Dr'jCE:qiBy%дmgPa-0AǮ|.9[6xyy_orlz4>~ Hv =G+µZiiꬪsZUf7>ÿ8)بp'. 1Sa4ua0 P@FCϳG(2"\^ 333ɘ="""y}FieXΤR\ D+dXw[h6I~1޵U^Z+SX#w 43 |¿^L,A^kn94w F|77ԛc\4Or3Cќ{D.іZt껴{_x8TJG*{{|G ^(̝5ÇbpXKʖ=E\&?{K) raSXUCpu6ѹ?s@|BqXWYQ^ uQSri8h.lD"Mݏ`(TIk1aHߵij9_ \#3/H-bs2N0\ kOk{355BWGo["o~nK<΅, %P,`;`|m3Y -Ưj/v> _M=VP֪<@yՕ ww , $ m+0x(b8wڗ';wr w~wi}'ON OLş.2RE c PQG}A`C`=v_ket +MAn'$yq~}^`}_6TL8h $ ӥW_5bgɇ@(b->5.r6^BF~[W?/ȧS6ӿO.]FCKP|N`\[?UHi5PȪkx.u5J ֛A'3Ӱ$zt1u>?sNއxW!РH-꿟0tЏP}C0"0`VgwܟNa@/$:8WvvOw wtQ.叩b2*fY-EzV]:Tme{N5˭B^pT"l __#]_Ih?a 廞ʼn~lb)p}@lOU*@y_N.G ZL2?դP}lj$H &lPL. sh & @w(TyY̚Q*=a]TX๖]z:A{>uK\y7M?q*ܞn=~Zui ;okDѨW},=P-.{ 382_ t?Q9}}`͛X7Xc9X07Zd$7j/ӱkY5emt^羶[#*G. ;LF]Ɋg [o@mJƲ@@4Ƴ@ h])yS@'w9ϛKM(_V6R O[( C{oa-굵{x@ \- TF ^sS4qh|;FsxQd:s..zgݷKX%|SlVp@.k@{lz3W;keX]bYނs3ZN#A}ȉ1p^wtN:WBjq כkItׇl`sa>j`{@ū) ` # E_#Co3Vf9g@:h  *!Z:#y~rB!5\Ud|g{rru k'FJ<EKKB# Q~ ő櫫T fp;J۲ҜzCfd# xNc ]c_ۙG8uJL[$7k/kpb i/T0ϡ^Xq]e2W 'r+ꫩ@>-r0B0n(Ze]վ1$qAQ?}ȍ(o(}a@Y=շa ̘OUڹu`n4un6? _s]zQҏ.7O.Gl&[\U#F܍[B;W%.FkVj@n];5 qVV3Y?IPTKk'/aoKωdb2>Łn[ZWh%%կxӴ}ӶM"8\@}ܥIOSA [4)3icP#9w,`lQΛlL[ rt|u#o\fBQB :A0 $`4~t@  <yr{+CSHN !Q́Н;(!#CN}9B:/Olm gFv_tj`WC&oP+v0;D)17>A(Q[![W(E^L0 sJ`}}ئKx.V'޼*dB4 =gtnȧa|a19R15LcG0DzʅUlXQx^<[¥llqז Qk}Șաҕ1ğ9 OK0V({02+W1)_`WawL^{vdG5~19 PC]/ >gi `W߳yӀq@y?݅(pj4pau 'W)g9q1Fh+ʥGnw Gkq1. +.g"BNr֣ - '*e#5Y.̟` ȹ?QD0pk][4h'7=k0͹A4.l|Tviy(_nP.2@6,O9ijm`uu.JT 7+}#c3tRz1XEQŹsC "+爸6 d{j\gA w`ˁ?25Ωbw1ApNtm|[0 @z?H s > nڱ}m/ԛprCiby$~W?k ѥ#`QFW{o.  >bP$]uݞh|#ipdf( PZk/]jf4O#0B@`p9R3K_'4p-~" {nT nΠ0frv^ xn _J;‡lϨhV-'iV-@(D['tƘSLK\RU8"GA|{qs9W+ۨ9`iI!mJͿMLxT^JOmi6f@|{I |1 0o РH7pΛ>^++C`Gl| Cfy@:b^E#R|jbB K/3J`0 +2@ ݏ}Y`=I` U FigKyر*7}gܚ a.2XHg SL&ze\UOc^(‘5~I 0rN6sJ}YXA| ]_hl}t2B/;Ðs.[~~FHH??*oW&?(HsW0@;^ƨ" o=J|/wK¼>k7ORĸxbBB L:MoP"rw'" o`ck}o5KTX ]q㵡/EoO{Pn4幛wY_J{9*ök{N# ^,bL kNn j2PZִ(#ro,e KL~ uգ3\4[y Ahl5#F4Zsc?ّ͎d_=ߓ#Z oA ,LM4WWratv%VcR+,z"5ζ+ ODʽ#*W.-W#H8 ցx{c^NyǞM u4Z {x8R $w@PԮLӨ]J~{_}?} u:9ko|AxuvoDZGZ[747/ y$u@?NK#)C#p55@7} ǸiZh?aa6·vFdsE8_)~R@#_s_h$). .RS`Z4x cpP3ga )88p6gQ_+s+JF -sΧFiֵBqHwM`#9ׄn4 i^-e7M˽W'\`/G+/ 3XHij@\.2Ih]rD+ݤ踇K ݗ:5^9YkR1 N(8|}#,9p W̳+u*gk Pn{/ypX0 k/)C`#E7 ox3)s|ei0 ݑˏ3*eFRRՒ$V3=:i ;&ƨ쇟y;stUB7a8P}FVݍ0v"3AB/`7 lg-> |Zg.R0}zxP`nT>ƨ7d"io0,|:1 O;?8c2fEb\!IrW=.!-u@{N1+],Øx~@g?+!}K{@+h'IGEIxV% ~ꯎ48c}XDy 'k\Fnlvv_?pY|鿂sW]{/HBOl5OBKyɪb^K?och֍V>GsJ߲xm {7S/2hz,Éxj>擛OF#Vbd~YAm):.Sڎ_mmEXo1i֧)#zttƙLvhWHޜ$v^gx9o  oJ/o/VNO!xE:]t\@Ѧ{l3Blxlm˦eӝ$к4{J؋vO q.;$[ϧO-Ȅq Y/QjeD\\m3 N|+g#d>L~bR9oTCNJ}^ Q_u,U}+ :ʯ3k:('>q\wL,-h{/y2\~a5z]+X+ =L/&BY'}㽑qzaw{ t~hqm'pg?Ə~\xA;_nyaO#~,3&ƳH_gCBL@Pw@;KWQ%Psywj_][A+/ ઌqYk-;:{?zqձ>aѯɮmƞ&4l=4$xPマ- hkkqRr= }idžȼ0AtiZ̠ sN.ċqx[*W`wJV[_Vca=aePfs5=~e U&`j%1hXf )S)/ {Bs(#g216˘PTr<)qn|nbΎ4@ǼIwμˀQ&#%M;rϱp%h%h5"X=$R!y{S 0r>/w|`ڔ7$72@-[e%ߦ~SOΦ<Փ?)CQs@ * zGF X'D|PWwXI^@=ícw# {d$vK kP7Q}yF{3Gf\aAjϩ'5;V̜($2cqʂXU+g_O}v/xퟯ3/yCC.B B{p5JaX[5s6toNdzdSk_o|]\7ޘ7٧xv;:造/xQNtA7o -{Saԃ8BG]%x]Ϲ!MCV֮VvO2_ }(0{C= _™\=h[l\ذl 'AGEwoO 51h!?=dC лH.j=зAS9n-'7jq*5O?$^6u:uB D|kE#ї6Di7s\}!|߳ 4pTx %E{}H#P]jݞwxK'J}1GN*/o~dS%Beo^/B93@zC ܟML;ظ]?}BV/tugtY ]oC^alXCBpen>|b6BI?P&tی5'_Wв> yڲ1~wC^BArP"K3u XIO4<:8='@H3jL@R9qUS!h >U}_WSo';7KfoDý-9.0A1qpkq^1#Y`EdO\Ech%_V8=I,L}R8%Cu0t](8Nدs%!晞@;xS !%Iܔ\bkN4DI"t 8^V'sLI*Y3MQN I 5_ ]Rl]մ0qd7vDTkv }]4~Od<{;ٟK1T&j@`Bp4KSN ^OIrM+{k/V(QZhRJ>>p 0FG QB~Гc.ϻIgzoo:`|Eީriׯ6Nxp>d|gs+!|׭!~uvvN$P3s4kM3~s }xzvV2%Q%jQVC6큄9nI0er=U?b}RuZjѼ.<~hT{u(gC3gZAqΙIx 8E)~:Wg/$K:Wag=_;Sw11N__9'ܯ(ژ)^P=\:=[FF.lF7n_{%& b~~z)Jϵ>`' | _y-@>R6Kљ)`5pDx"O#@>oh =\ $. @'<ܾ<ŵ47 |_poi}o}#le hF߶!qj:یmS#~ b4{ "@{J.,}gӽi ߪ<@9ө }-rw`q*yny^] #i29(nTF\,vQ6`;-{n3O_ :@MK_cza`ϋ $nw 5aq#Sb[dolJ4kfDH81+6ڼkj >r2\Rj@窭Bhu9*t97O O)L_jQq=OJO_yY'n{feL_pgX$#v_}B06|dܺ B7 c* 05D olr*467]OIV'>y+hg 4/!zݯ_ŠsPOѣGGߜV`DZ`jqQ~1/?]05O滯 `[X`<:BpNV~!0}"/?R?lgگzߘc~֍EsL;Dk5{&KK k[)uIȤ)|'!>JaӏEYHSHH ll'+O< ԋAG]}8'uPI\5f>ήP_)ɹ.AĆÜ%Cl~r cV\f S|%V?',x\2@f.Gǎ|0({lP}3`unޝ!Z{ ^tR+X$} b)Ԋ-A K|37\6#4GwC~ryG W`!8S9…j-LpV/)F1~cH)L:؁R_G3d.?KB88~^dLgD.l3ߥ3ѳXz>2^|1J][P9RvvYq3t 1q J1_ Ku~: [MEg4%S`^F`@J /Nwǝ1dTY/-X!P"F4A#58#'RccyByQ w A^cV)>Y\AOvjMGN^[#'4yȡn / !49>|x췂(O~1UsK*KY4zG 2-Zyud'wm -&:"~l sp b(9m$;@IDATo,RiEڼQxoKiO&OOҾvb{b9}T l `IȞO!ȹ{Ly}fjso^ ,X@>ua@yȢ 1}a/3FEmM d05E֚W߶:3kZua汙qfgwǕ31nVoͦ1fկH^7d}I'X.#\sNoK3,XW1Fvg YmuFc[PJ`1;+v@a YxʨB8qyy1S |3Z憬x_{vAU?%F6_W*lf}&Ȋӻ{oM`ajyw=M*mmh 苅+M} /؟plЖ.l%^g47&ɷnX?I'DAl/PO ht%}O<6| u>D ?_*:>&JD'Q3ږW;l +!]/Hy%<#Pclޘ -hGn7m+Md!>~GM^svќ )(oc95gj#0N]&|G| 5ZN@y>Xd,4 ;3sƽM( p:Dx@bO_rm>s5f} T0k?yswr.zuhfuƖ!b\b&詝#Y@R)#<|P(̝\8g6h &LJ^$T95୩ֈG.|Y^&7|M= L(0jxc lN;$*C)m;Uu5&ڃ4lQ]YZ.@a^ A =R`]".h .R,e">&lP^Y0*ZL-`0a4[ !Iޛ9xNBc"ᯠzFaB L DMj`d\. GF쫫M~'0[$s9M,;z'ǪjayAԧ0 Σ[& D4ҥSTf] wvnOӺf#SQ؀q_k}E D]FO0&%@yZ X&f޷&Qք3^!QU+=&+9OܳR!J he^VIJHg(O-N/kL_=jA2cxJ 1(T<>S/;j7 5[h,'[|\ -՞sW6՞omT/:.ǯZ*O|dntn.1A۝u*gWiw,8D{N7*]Ey[⁼3`EF&@YcY5H2bLM6N_m@ۃ.Je>I{֥ЋP_m{.) '7}k}92d~U@;=__krI;}sT+ݩ/Sŭ3x+f_`PG|=M e@Q 'q1w9y;;f#ƩZ1/x9lRcrnoJ2~ld,ޙh83 w%.H>C>m;xFN#Hʳ2"j<)3O2fHp(vr.aJ dϜN,Hz]Iʭ!b?'zm@|vIyySd,x}@?>V s]m)>)qdޑG" X-P[C]:POQR}_\&cE[=cl?wF&OUsb:e -k,P "uPl YЏ`0 S`4GitJj=X7?S؀nh}_s3I=OG0$ƍA0{P&zyO)[}߹˻H]Vx!ɼf8H5+` Lp L Hs񭲦IY-. U2_#Rk~MvK$8̼NhWoNrO%\9s Dn@+Hv;KoT8}c|OLΩ26vw&1_~Bi YhFtECLfC@su7Z"bFe˸&"@f\1 `0{x2'Å')hi]AG/ӹR6_$@`L(PV1JɛaEE`mC]+_.VtuҤI>1~k $8I|ɒg%zXw5 E͸cm.(7kys]'x0^U0ۮ0v@x8?G&R>Ǻ,  Uܐ;5PAӺ("=$ #R"mr?4@9 8\cd0jX/ǘB⽲s1@`CBXA(#{ʧW{25]PO{܃gp87{;]g"#py!&Bloq)6pc^> } TSB =O3OC=q]~;<-6؟ w =\cV+X\$ eZ1^/Ʉ{l Ppͮ'at | Q0bg /Gྯr*U_e'svav2#FD:`3Mh/kV{cVTic?N\#^z&*/r @?8L @$_0UocksH̗{[H|z V yֳ)} "-MBh6aBlB}ޡnxj>3N`|ftZ9k8:}K*KkBA9X@_3.&_u䳚·R vlOL]"욮hNZYtvEB_rJdNjY%ޤPĈ MM}ޤzY76xFw7!qe,< x59P(( pƍP>/m,L{>N.B}賹hx9$>?@6 j׏;?h="θ/BM̽2Qo)A1 ȇ }]{{ꭗO 8'"pNE; FƠQ<3n' OGFEES[bנw@8qcu gdp')5Ghen߈~|*!2ڼz3Ge7Q+zM5 0OP|L@y>@wA\u"w>t3~[='kueh;^3?";>F*?8oo_ V՗ښK+x*+h< @&1/+T ?X _-.t)Oqqwts5J҅2rskrݖ;? fO!kx+#Mpa./ 3sͤuŻ:tv lTP1,wMW ly9G}" 0j+ _*#(r}'̓ ;ި,C$%>y~CjmYyo>.Z/OEDq'{P6Z;oat1;c5/6 5g9חtb|nxc wqkQ \Ow`+ Ł}9? LK!y@j~UbhZ`mm˜Ϲ_{}M|w@Ut(a.""(* 6 DA"@.%r|y$sww9sL ^N 'wܳx ? iaaYgܫyL@GDV@zzkby Od~j6={jFQ Ho7RN@<p\kJjmpKZ++%uCԀIV{[H"r ڽyoq"{k|tXNǧ㠦6KqsQq%Ue逜\c\(ry}7rc1bA56^hݶ^t8E^MdU7dCDqb[#d3r3:m 7y<1Az%ՌSĉj·w2O=c0Ek`VN sӮs|oXJ_?ݒk0{· . ×1a+Vm'~3C;C?7x9:_9|t1zn^3pC_|>Oڤ7'(O6Aa+X4{-pGOE>Z?$ىJy|d G7UPh%ᓀ@ HqJaV` ˃óWw+zG6Vw;9IK^( ~rŒREraw ^ɑ~-CL\f9N}dr6G{@,9Ӝ9UVP2> Ð7L=nd]5I`ߎ}1o FZ[kE9;L܇ PQB׮ ßr=[@< 'V@jpg/t显KtTut ]qC"O16k\(W OhexfB#c~iWr4Xo܈* ZJ0Pt j(뺧&.^w0jR*ס/[gG8?|V%$9f#0=Y++"sޱSqxҵ*%R_Ľjs:s~br}^Xz,mܓ*?psA9س5A?. ܁ }NbͺOC,a4 +.G|(Űdb2glU1Ze$zB|0[̭d, +^5Ac*H_SESGt 6:흕-}J+! <2J&t h0k7 HCQF@x 'Al2_wUVNd!IO7/szG'C W hȋȓ}ѕ9 g@.+/:::@@@RNpt+kt&Χ&և7A9jkϫnI0P1Fp*S?F<$ӺޘS.q(jȞf6)$XWuAaٿˡeU Zp=s \Ui+]0EFУQ(*@JAg Jd q$^Z{j)] `YOA3^\G Am%-@qO- D7"9r}.upՏGVl-57q|\_ #v-t`8E8k &[6ߋigbf7es'C$oq]ݟnrf _s xl@V{iΎq{,- whGWYKNxrt0-I߬`z=r/{QMi]on jrT٥Dnbh;75NCj,Fν@PJ(023tT]j +v9Ť&sQݡ=!ʓ~V=zgYFs f\ L:>ཤ)zL S\!`&||*QX+;:B7~:af8ga1iNc9+wc5)łmrf΢*KwVzȡ)7~wG)Dy P~X$Ǯuۼeyp"㚪T:0ǃ1MhlwrÈ;2e7Ϩs G"$u%8߹Qkz ;\)߭%`EE{|,>`cdO6$da[ +)𡺸q[Gݛd%xtƿ@Y3*𱏁"y2Qz6&L(q_WEW+/1RToY!]JW;rԽ-]dy kMʩ1Rކ"qAIK,4V}XoKiPZQr [Sm ?[X1W]0XC'{;̀N*ԋ?m+ZH!<-](K?39w5(hÅ$@Hp:\)#|>Lbc T=N< ȬAdsqS~ ~s0qlPJÊ`CLt] i-iY3=Z,KG niL,T+B/@!cp u,qW'] xd-k Y0kR!~`*;!6h1$zwy\Oxzhysg ݨ,u*#\|DM`7(<Ҟ|pt:((G7)` 5^Ŗ5cSNnSoM˛qtDܖ-M ~==n᭫~(˲޷}s3蠣6s>}EJ(ٿ[Oe|jtW= nHK3G /,Xg>POU쎡9#qߨGWDc Sz[#_.+_/ z೾NOJ4fOB   ]OiV>}pGLC.x:Ē^(#1Z$ gx*5o*pa1W|2lD6ǘxY]iT>p|DqVN#|&x,eNh*d~'Xrb C#1'”۩=UQj{Z2rȩ~1O(] [8ŃS  .|Y- x3<S@EDUVhoNtt[Di"WM`{:PBW\ s"UA񗦬g|}^p\f/@?pP-@1^@| Ś-UL Ȋ5S-Wb}SYH'"`sI:P'Fo B>e/qԉY/¢Z-!P./ڞSiY$`=o.b)(` iJ&nF[4K/ F l|ow>r>EVMpoS))gw;T$/r${ky#e~u,(㯁3=;5:?&nD!y<Sekigߧ$c﫶Dǧ\rrjҲO_ *J{J[ɃjШ?_Q䠎roC;2խvϿϨw~YByG󤼥]s}舭[Q׼>lpdC[HпO?˔tr6kutH3=p?Apv`VAW/e<)4V9O]57f*  ]# =8O IDb#=+gr?lc?`PZ"ե%TcXZ. M*i~A%>8&Ȳg<R,+' ),#ȗ( d h#lO]r_V9Fo;rN[?Op|ɔ cq>oʟuVu8!DE~/np( _r@>(@^W0:( eWT~[yRo7ޥy+N9N c*daVrUjx+ߕ݂F}H]6r)ޣtҏ)+>oq ڱ/2ֿt*$:RuDCJ .mXeuW (F)X+|>'`G/fq@QȮ&8#pKQW3G~Jp+<` b $\wcݵ>w9j,!$xw'g8gV;0sQBF!|̂;vPrpksYo8;: (Xh ~&XF ^Q:bOF`bvG6>deqJw=qމ#{;9 nlsF9~_& j{pN_ZAEjE[:PH/ܳbM.Kq-TS4_V±,DlXDm~Dmj .c=k9pgeS1``L4T Gsc T0@2Pjv>%]se.eʥ/lpH/{ؒbNb3A?rnML*C:P&Ao^JjO݂gZy˕~bop_<$B8TȴwqV~ծGA9YGόhL4m ?>9b{0RgBfW+ uf칳>S9mGWBQo`fbĈs U\Ts{7)7C?S'G$s#o-1ʷ-Gjݑ ix?Ф@#(V!53`eGe䝄<_t.DRJu*-a [kʯOұJ{EQSGZ"ɫʰ (>E}]@Ȧ<_$`U `Bu-E~% = ٳٲ߸欛 >[Yi$gf`Dݿe LEKs<ޓO;c3gq@]X N@&]T8;ɬW>R?Y@ DMzrl N˥}?Ϳ|=_&++wܔE:D> ?$W@r8W+Ep -*WiNw"\љU%E4rk~K(_˺.bQ>r SҽNYJ>h$=ջݼ%?2GJ !!!d-vo{/[j e2[VE5&_vl'/G"0nwO"橩0v'VK?l#c/F6i{kqk1^en#;V/e|Pff qsuڎ.ZSgBhgH}jsxNk2a Qp !5@B PR+q",, G=ZLP^%-wQ͏1#M(|[i)3A.c メ)Ta`q`3-#8?6O &`H^0Ϸq U5+!V2{JO/v}{ѨF"`@G R޷ h@FT=k {G4ա!a "&7Ķ1Z8fgYNE=L[Xhn[gh,i5y5AmZ)51 Ww9Ͷ{P]Q~01'ƞM-M@umF BʜJ}*5X(G5}^ҳC5Qx:\rb,ZC;T./t>2zE9V.U-y?锳:[2S]+(csb;RIi ݏ+eFcS}tm>JO&3 B0/8#}#9­ ]`[k#Q1ZhU*,K/3.v/t`.v(с),SɹOw}=VK./,l3ێ{@}vg9쑻5#r(`\~}!QHZeQ&')320୊h7[Z;HNKa~-0+{\)WeXOƀgW?i[.ǪW> ӯ 0`>ŎN~Nu{._@>Už^}MṖob+ĕ7t/lbO7$@ Ҭ% =.g@=4|̨KzKN?$ }ov(YI4[KKɌ{ɁLzҟu1?RT[7OJ`!ɘAų4t?OЫ>lEX[qzLP]i %B׮6f@aAdSEm(t.*H9۔A/s9)Bz_#Ë@!HYy"v%+oI,,(K+TE ) "=}d܂gǻӛl }3ƶ#slA ٚ_k 9skϑ50*qt,v u`41Ire,d;*|k:)s#:^\@G7P@Cm'8=Jcxi~ mǵ &ӡjcY+Hfxø&뺡΅3Yo1yq-҆buX(5 (O\#+( $W2020ᤐ{e&?l<FFކ S)O 4w˺ܢ5 m]$kl .SeO)cATo~6ԆAyV}ݕ6_ղl (IP?W ͂[T Sz)CAt# g^Zi85 ;xP-Rq9q䒣PfE%efzw.a/&'zbf6z[eo'2QiUsc[N}VU>~i-q\^jtolE;@n5XPvL){ƀZ蟁;kʞXAz{F"OlK$f߯ksLZ '7bt=ytmyZR~>{s {=]S4z g_5tE亥9+ fQf;,ɥ # * J},#,qT~T^<>1뵯Ǘ][dS=τPܵI9{ڟۗoo`|f8qH6cɍ$#$'_[@ `>X|z, ' ̕@f%W35F@9lUh+sE@'ryT;p'YXs6^S8L{vYY qKAa[-Ԗ=2;b)^Y5-L;4,\!&~a])5ҁyJ}oC~unX?)g j܂GrR|[guB/߬~O(%TW@zJD^Ju2fEF86B{cp^*=4Kz/'T|y(>\l~aN|iG{6&߇Xct.|E@^@? \9-"ӸLE.`ׂ}g ,Ml!|O^m-]&T:Dh>T3͞9mꍦըm<ԿjG?wa3;4K!, ~3x: Rd&+'S3J꠯I4r@IDATJ,lvbvѡ *vɵ+%nkD;Qpz&M(W `=|-*YyhR/= ͱ@d\U2Qoۉо@MU/^ "IQ>-Dhrh1u :D \<~<7ު,hZipR^5nklS/g")YoioT$(+ ?,̨J}ͳ=qK]? %mk' nFyu !H{&R<%^R\Dh#8=o%uD@{|D@B"\ abKgRÎmkm{Y$;~ Qq W3|?\jyeVvݰn{ۋ/$܃Wth %_C3̫Q ,-[lv:)|4+h[VS3Ezi5h}w 2R`6 ] 7Qx\F,!{O2+៸$ 9BC?n*[|6^6oD6u 6jdlmW =1A|vnVgNx 2.՟rmgYG*b] ԙڝX3̲D?kMBsl+sU(xeq:|]ZY9DR}#EryRle mjg_`^n!cAj>1>@plߎޗ߽rf(l:.?Es׺bE@JCp[En PuGp i/83(^޾  (j y~B`\?gǬ&@qD P 1O9%ur=gwn>l*yu9%G t& f@Pq<I e'NB_mp:!10A-Cʑ2ۗz"qu|~PWofu!zI>|P-o =Y[̅dGzMk3FϸU.ʵZoũ T`_ /{g+8~N6KytTQY/ieM-aAn$zmx[Dpr1Հ)@I} M1>80sV`=K+s~/Dpj`@(D˰,K}l?ᚂ$#h7_oBM Xj UYtOzYyx mi^w kc+&YhOҾ8 󅬮Y °+MłO _-x7ZΞB:ΨU*G}kkUZqD2JpVO Dw Ç:4]۟C<-']O/*z59 \w\2w0 L &[!fz@[_u3]r{" VnOnWރݑ5BhG;ﻢ_wwe‡Vr톂wŶm5Ys%w1_B#]QI:Fcor ׏i,mM.V=~ m/ 49^QɵR9iǎ璯cu>f+EbXh\œpZrooeYe{WjYz\SO`ۻ]wPԡq>o>>Z]AR2(/Α(P>m0Vg3T oK41}E򘑄=Fz +sFm^/4T(6[E<(f PTp DTxH+}Qg;P|~rÁ!}[x6G7&a**N|$V m$>7 P>i(BrťOLMh6֦g)K P)%B9LR@@prdYge4-"oPlƛ3q[^ W*_@:W `~Osr# kEL\Cg/nVsRdP2[9G&C[1bʙ8+rwP%=L9[I++`X5R@~-8#XKATR9 O{I+xD^,a;4;ѯS~wǥ'D5*/BɶM45̪&3f; @CoFýŸV0JP=¾U@: 56V x_ŀ ]NN%ɱ$CeFn/sb.A=p@#O%QV(}6~ǜ8ǧUEY- $iO֡uq n2pa_'uscm=co_I9daH6_~s8 X(;e =,\V" V> BQ;i; Ye(ڂ!<ǩ*E|_i` w`Skk8w)< C@/\~ q،ЃR~?v'r~_íul[]MK=0zQר`OVseF|<_ Wkz)9؁m2ĭpz78_/襰},Vo]O'fWe0 F/_5_5bmۄH#8' ( ʃ/tpБ7r]u;8B}D[-!an꽳o! |kg @Eڳp& h_W ؊s`p,8I f᣶ 7)[ b$s|WkI>z{z~D3Ԓ]W/`+X!G|w6J&T(p0gH^c3呈LH@* gCs! 1bW5pnd N%^+[C}egӲQo=]n=N6O4YJB~zhdodr>z/P]`|/qBv$i3W@x3W&.lkŸ((}epΡҹK@`Hs]q5=ުkCCK-Ʌ|j/O}//ߑkß'>JK՞ʢp]*+s+VQmyRokG g jtl5܃=muun UNdOdsUrtw&qҫ+OT9%ٽӑo(7_ն|/5}L!?g?1+ hUlU@@15 Yd b4 Pҁ\ ;6}byJU._63q&e>\[w#&4aMڇa 6Y?0B$.{RJpXrT[n)GXm33Ԡ{ 3A;|~=PGj[A3Y2GRMǎwL t|蝹rmv^u ̳>=| vZ7Ƴ&SdG| >BYt5N$Z6Cuŀ[2h7廸S _Ӗ+򜯌"5jJhՃ Uğwpt/mƮ^ώQ}S -?WɃ6ݺƊ~O߮?I=mybZhO=aS< ⟗k Ӕ3^]  Ngҽ\pf G Y[]bvf9撾Y*ʼnߕY W -%Z]OْOzq3mK "_A%6a1s':Л/wc;|o`mNĎ4"H*DQ\3sAߣ)¬٦@4r%LirО6Jl| z9X(z.CFe>IVЕeG64bb# 3 ao^$> xڀ9OO|3Y(+?3no^EùH ܧ~6;̯*Ϫ56g0n ^ nc!$ s\l(@>V[*K Ztƫ'2Fb]3Tj^/:~s!߷3vY ڊED?z`x[Po" \]f>Q!$ 5_pW+ƃ 0pa_ A>m78ރkx3ZS}<n$6Ҩ"̙&^SoyPnk@O}(!-aT 6?ee}g6.;@r!"K_nqSL"n{/# 83@8Ԗv'v& j se=M/@.!-Aߜ0ׅ&5T=;1zaSi^rt,Dɱ1tdXu諦|cX.W^ qTX76hX6ֶqk+P~b z]N9li{HͶO ig-s^0um:_)G;4=۪JCkԯVhEiPlߕCNZ  _EH2_L|c8uqs'?3Bυ W({*ծmOrCґXi2giWek_<)Z5.ïjˀaú?鮃CZ2pDܬU{)u,SO)b.+blA%{?nw+Rn}kx,_U08Li~l{Zx|Av؂G'S>{C$|)Ǧf ^8=NAI~uMVٌ}i6z{S>H()aNz3;v Aa($+>Qb'SЙ񨸓SSXaG ପj_RfbLQ :,mgrCnUUIvo?oB7o~H7H" =AX@?0_$)t30M@p9?(᭡]o҉O IZz5t5X]U,/Qrڌ f`oDH ;:k_wS07R_1)sk %E/ӇGa )sIqB-^! -\P@Dwd B|{|L;(K (Ǣ-d֧pg RpmS˸4U3#1K:j=Wgd>Ւ vy^={uT{W}EpK@.{_F2|EVu6A#ޛA@Ygn ʯ-ӲmA`hwOOvLO&sȩzׄ򫮏!7%_%+z Kf;P{Н+%CmCWlKuwZ9o rVI0c@NT-`旆WN%fHu~0ǥ|>oV;/l Z@?RWE4?{_dKWmdI^˱m赚#Ĥǿ_z<;gW93 :޴<`3t,KmcΨӡpIqqqJYXC.K?! n<_Vc?KGrX 8Q2+$\u, <[ه[a#[1@(Jx0ƖW5K`|4Ḧ>R]_`bN:v cϪUig nd]@05=|Ъ/x6p>[u`uNdrm 4oM5H㹋zzm]%l̥aG@f_Mcktp,\K$2%OFO*K#3/~A#:Br@&nʸ3mZ d쐥^!rI+SG[3ܦN6/u[БP^ sS:_gYRs3 O(OvTT6e$b :~`OՃ<94:|=^zulv#Ẽ U}~%^}b%L}o~\UFR^-'y><\TE(b2AZ`QS`­d/W\`R-aeȉ)03tg(5 9%-9-ˡ% ̇6:첦#k.W G~k~# (9 wZI)Sӳ)N΂y[D7桳@\Jw\J B?r nn?]K8Ęq~؀0T_o|Nf(Z5kgŇ[^# -Υ|D b8^Y[)-xERB񅢖T1$ƏY/8w0  Ph"8\H6=EiO9Z7=IOV9YUF} 2MY$tPkx=T ط  3.QQw+_E;s"*|1Րt Ȼ8L Fs #$7C$g0}>˼V@̳X,8;?O8n'=~mxUUm!й(#Ogt^hJ QWs8b++Gɋ- 73("~3ˠ Ъ H] 0S'/bn99.?wmSik >[AʰRj69F]||"Εtg%y<7iI,O:z۟62 >TuT|6dr!)OT'B?|@v M =\B=Rϴd9d4A_vӤeЉrVA?ypLF#?T% }4segW{x'W;XOX㔏R&LD{/PNeM`c䗌̩gG.@n9/6LvivfZK{f+O |$fM*5? ̺Pߗ~bo:HYU}1(h ; W=N0\h BCyr(WIh "y "TNWt ݍOa?D1!d{u{`ڶOP]*#-prSKm._I )[I}wUksNN QA MAQPAQ@T,6,X(V:* b 9unpmoL;ൕoO_:7f>cXײmy3ԡp[`rfc!h`=+hWM`Z :\F4SGVG[ތ l侟EQ:ۓihDo)E>8NS9u'KA)c)AA0t@A#p\A jaO(6*?SLMiQm?hk .nQ#6ZpAe^\K_Iło |:!yPf "u@V4÷NM6 }٤띌hPUT_Y3r 4^.k/?~B:Vh 4Oa/ɥw[ m?_HUeK-쑑F*㙟d !mL;v4nc?#PIv_|;wu(̫st!G$&pxx,o\}R{4ļ̚F&_4j9nei[#){#b[nݧO)'b@75rm\1]zͱ~o&a܆ٔUKk@,߲jR_v6xI]+]uP6̨0zS??UpbY}/ޝk铝}NM/jsz<9̈\g c'oA9kL3g"nghҕIWo໒d׾׼5#Egg(sVq ls6cYJ|$AcwSӃ,6"+`''IA ^fW=wQ#tF#;:z m/j=>Jn.3|}CƳuGUDƊ$K"E-tlnxar <[Q*’|jsRj]Cl^G_sc gyFԀ!ަ T$z5OС3_ɫ_iZҁ\G'H^^|)ylL\|Jss1''kgé&}Rc: : MWhjWRN5cWϢ_|ʅ6vYNѳ{ 0tuw|4|~{ko濒Y$eCu{n^Q.}2e : -q䭴KߋfzzWOrQ|ގt/F( wl2nfOGK`*Ȑ*^@+BMJֱG:GㅷvL+=c- Y30\Ou ?kO}'#Gb+{f33bﰢv\"lKk%zLAeAF>XNxuT(?⨘eǼ -3oУ*}k^No_ZR3TWxK.IN8v؛q _Ub .KpE]ӗ[餇u77HbF9h9`Z[8>xc?Hǻ:.O5M^AvG?T]'<]P* QQ:/.3&vpb<57= w56biojn^fٹ#QDj|C|i8tɶZ˵aóCi8ߩ*yf*ÏE?bf6̆Znr Aju>*>9etgƷ.%~0SF <#ѱSb1j'լͪRհ?ʟ3[;{فa(#K M4 ׌W7GN~)aǙW{ vt ;cgjM|Dd.]'_`\V SHU2.%c͹vycJ4?4Z @]s+f3xo3-Sgtߒ=ߩwFۤyU{S Sc+y4<S"/uYSSōƌm$̰:f5)1SG.JAiq=Hݧ)oCٿE#⌉ɂ{oÜ W qt)+GAkz> %kIK* {S0[`Ah"c"d0Q&Vǁlt1ϾV&!h](hR# 8S59# g O s2wuDa\`~{)^ n,\߱Ygݫ_!oȹ7.g>?FKgw&vA9(xtk xl<9&qiV 85汗}i 3.67NoGz3bGѴ߱kjz$+=2MQf3%qY" V{7]u#"a`d . *̋ϫ)=.x;e$ѡ9sۈrp&=BY]~|"stwSeC q vzknqڴTh{㝰_n'" jlu7_}n jLf}S`t^t2֒V!T\o2k "fҜ/قeJA9rwo>NȗK:?uG< ݷYr+sGG?zxװ29Ia_t9xd2?fn0takn3Rݔ/{ʹ]GHw.>Y I8OIw qtS뿐#s {$F: 'o]I~aB=|}L~ZwyȻx ޣ :S@X672Ԓif뙔2xv?NQ^;º4Q6ŽX颧|E; [ p6Pbc+>#NK`#J`/CMAGZ A怉:>Gfq1aFj;l`^FVV8ڟٷcW1j#mjhC ͪZzU0 ?t,D G+A֯ۖLE؞`4vi|+s/bI N~|ܛ/Dx-%C3A> {z{Yl6}[ xF, &e--&)FklEߙ>h}nωW7ў[#wF7-=WwQY'gP\ȹYC|#.'>za=#Ad`3pD4{OEQHTZ|y)AC$wj޲!8W1ja& 7 t ~&qr(38P"g m8pAz#eB/_ f&؂߳.ō:r/O0o5j*NpG݉,zJ:zT|kgäj^vr'?*2W<۽r;rv=Vd͝*  Az#gOA8$|4hk#[ZHEN)yY 7-yx@[sySOHzt6Ëo@BeL3] ^4wƻK 2arXb;1tFM߁&%tG'=rLE^Rʻ>t,mL:nԪbm|#%-LAץuNGi8yDyi~țH;+m7\zͦMb8'Np7741Ύ6e@qL)S(|/S}!"Z 6PЯ3*+WOKn5Lg侊Qt5~6<6˹o9zA}foud_==kD~TAFڂ+3u? Hߵ5{Myct*0L?f4Ww{|YKbbjnN-L{Bqz hꄬظ OFs1C܅Q')ǂ>QPM|$p[d9r{zSgXRòoϹYZ 3|mԵoSF9v4fM2m!>I8rIBbH[d<6#vl$E'j_y)!} w@MG{p xt[^);^!> z[)V.A>;7h;nU('zKz2j|0vH E[ + C[J@-*/rR*ɲ)Joݳm~:H'ͅT3&PZK)L8QQ~;cs[( iPp-4wK$[`f;-llM]MP@ J{$C3EP!uh;o.#*!0㾲o6UIۧ=ˬUԘ-k6ὢ`׈-9={q)j9?v`i^5A7V0BUIA ;湂E*ʼnY }&MIS={z n7rwߌlמ{Uۗ?M0-xX-cv //,?<8f+8 }us~W1:# I,kY7;}7%biu# /k#f$/q"px{! Zt6UMT|UBiEi+fI;{`Cr} c 4dr-vU|M${zeV Ԛ.mWA_]kS!ݣ~Qò ٿn7gzf@֑#2$]"\/x$m>SoQQRK,}?7C Ɲip+v=P ?'pO+*ssl-bbo$Xp?1[?Zỏ{W^R|;$'5`!/$CzVl_ᶯ{0ǞTSUP^V]|0;x*i6(e{ڑ>[vK^Oy&sO0E67Q{5D 6a<q.5(W = <{ w{\M!N`o,m{`mՏl7<^͞sN#:n8e.( f 'FP 꽭y6Pz=ۜq|z a쭒k洰K3^y&/eta`F 7 Qη y|SSG3;q/8~36 :J1n(mk?nܑ { V@`SG/s [8t!X".H.fiJ{V{ fռq&R[i=q?L~(ޅ1#״}3P3}jxL\u5qlKy67+`vݝ&?TK8Oj}侯kڼ/M)s-ʷC 2c@N3b/~?g~ |Y;wٽ)s& vZ#uV*hR;)}i;b[iH/ VZkSW=r5̸=t¦WH%'|7qg]X(֟q x~Nkp#{L saTn-x.|QI࿻A5wOW"_8G-W q;O/:TUntѸ |N}7QRo7 $B>^&QUplX#u}nk6Z9փدs||QG؍^[-C.ƖD:u1sヌ'oO 3'K(cә? o .;u MVંK~1NK̎j oY뜥gn ;ua;:y@~{uE yQmY2zF2S gWU8{;EGR+oD[zf?_[_KLAvl)H>޼8$As(H-׫=b Lpc4YG&bǬ~TgjD}hq<<ͤCBR+(kDo[y{UWKҵPx@I֬WعcdE yiA햷[4Sࢢr#qDOb׀[7ysT+ ZɗGrY~~f7=*m@75EC/yNP0OZM2a8[8+mQl^Q{)]|k~h d%q3oD^_L?MqF:rɐ>moHYx;줩֡s">"J^z=V}b5nf6@-v9.x<]@0h'K}= )Ų}vG"H'Ǘ XA>#hnN-7;i(ёlv5[ڇ7)%g@o(vYaA"F<}_ݒ 9Ϳ?`]GCgxAA*糄rw۾FoY2]Ȑdnɡ"-Ƨ'8Q?[pߝ~2iz@?d{WqڂGO+cS.)34>ϟepŎ (Dr7~y<ŏײI?:jhQR.c +6aiDB}IQ,mJRBxv/+;'uk"a^ ǨYtX%D\ObMS\/$%C [̅|zr66jM~kcրrƣ@ϊaGe"ڱSwow[A<.Ɓqp=I+0q }.)}7F;Kw'M8OP^.(_W27=@=TpDzyUW{ 4w/C~* Ծ%=|} :Z?7acML9y*iWn{\ 'N_@`uTRx|K:fy?56,r ߎ㞲o~O8p`qC:z9K$_$6A #uAzDTP= ޝu K?[pշ v>CXO_ =3>Ӟܙ(Pst#y11ɋ̂Nn{Od1FUos}FH lA">f5o >.p??XoiWk#SZ~e[oƞ /I~Kg+r{::0"u踠LB!61Z(nI7NC/{͕\#N%~N?틝ݮ8/Ә)xOO.=JJO|YlnDEu1!џK0ڴw 'P #+8j3Kj 'Z|&sFw:,GO")ԑ5ᅯ!G~,97`gj:ac!әG-";N} A.n!vy +C]@3$oSsw-fSm5/ƥ&"q|HFo LfF q9x`NM \~eGݑw F`Kٽvx3,S줒E~oIoacy9OKWhٙ >^H.3HڵΞihg( ͘sםh~3#H/s0*Qouu)( >Z}U䓓ɟWM4b(k5|1#tӝ<3~'O$53K0yV&K2 # ڵo7\k` ^Su1ȁ2?R3 G n7Sq sAvT`_!kzW})a^D A?J ||aח=[rJ5p;5{ś~ `#$Mrc`(AfOIAot|D>-S~/6>WNJ,zs&?}${関E{n܌`h >݋gr=͡vy xAL o[ P1*.@4Ӎ~? S5J`om%mG ,A}^SDP(U K04ّfH{yZ*I3Su/EsV2.Hov _siPG~dtoNES69đȖz(St~*T%UNuz=LVXtaFwP|epD95(nQWԲk!P i.{Rp$ϻNPs2ul6+{_&{^Bk^c`+I+nS0N3҈,;B\#h_)pm{!yiQ =ܑKyB[Foߏ]}tvc4!Vs:sECŜ{,@g̋Tao5gQ;?xa~j }qvee3u4 tחlj;A |`{"Ot;P4?JàjZKQ.Ml%f@!c7"8}W1%(aAõ"XP_%vY|@L*(nwޔ]^/7#P~#A7.h؃A4m# *N+yB4@j]Kݮʲʪ3XLi{3hZ=ikDkI:nѶdl urJ9TAd[3 L!h)xり (օxfz|%nn } U KO?)&FqCzAf,Ltyұس9ӏ]LW]@ƃSbmsV5Ν[푎EK?`>s=dT;&d5d3|#,0}*yE> ʴLȹ#GG\n;7k pkj>,얓F#SB-E@&R{LCJ&IN['ϼ|<\,P]$TтCWt$xނɰ3V=ܙTl*'2}DA k|ϙ‹>l*v#1WsfVwdor"r@^Ȼ4sA}Ao@|'JLoD~|of)anpﯱɑkBpy5~#Hj{{?nuB)Czw-#Rғm|]q<7[ ;' V|5aɷ3m ;;p ?g xV ?IUb5p!*~ަ_bBug{Ae] u(x[|k>%^Xs}}uP^|kWM2ou|ltybOX@:.ڋoPx=VH NF{W0W j9g9P3yCM{z+iL:|Eq*2z.t1]K\P3Wq!? ("nrض|nmL o*y ! =x0M)*4;4|S;kj_H\s<7Ni{fНBh q@9^ݛRu* t<.Q+|A4A>ZA A5b*BA;6kem%D0A}^.h'QtfjTwHȹ(c67?ΏW Cӫm:֠|fd/E~m~VlO{_fIc؏m_[h i1za5j0Ti@0f";` w-_[B17 K'zwJwqצ}[:.pFq;F8 cZA;VF](ȧ{kE1̓:{@@7+z=*42Nu866ɛQn#ȹ%kUSsZ\?IS,v9/L@,j~$s(7M98* um"}ai(~!tumҗOw 0{[|Z xPKAi_&H:FUuwN UǪ)afv56LfؿӤmBg>93'4Ѿ`9~R(BSeV:w@ mӍfo0]Ս̟3f EbL14|e/s{RźQ+qd$4֫:y?is`oU_w*ԿV Ij>do29B]:&s(DRI3 A3"NG'531])~p y\_YqN5'~w'F%^?ȁBo Io MG?-0F C<]z=??]ϱ'`-ɾX%'߇[?W$}/E,%J~$߽PWDBɵ3 aT~Oj ?m{y ̖WZS{F3^ݍKQ.( L#\ HIY( ] ?/~ֈMN'<ҔjPn9=qyaxzGK'swnഇg* AX1QCޭpn<[@r#YmyީCrf6pFX/>#ަKL0ښMzn">ѿ̠&l;2jw7}[ާE5wq]uکm \ Rl bБJo_H GǥG%0| c3R^nlr&Ã9tr*x{2QC΢NZr)U\f>i"pZ$2@S[k,H?B Os3Lj;"S9lGޫy$ 3KN;^ Cp]m M/f>Ulǝ؄v̋cKX =:@Pr+r{DZ3Zp݄c{ /rM:5:ieQ;zỰи#v7i%._f{uܿtl2\kjF1[s(|`}>ѱKކz iRǟF% ݩIw'owB&Bs.n/7QvA #F#4\м뗂&6;7p_hl#9BOlȀѱᯱFQlXg1NMsiNi}+vx ԩ6UF\9PР*hTS3 9hJ @,X3\_Ɛ&0%@Ʃ_ fڮ̠O0Z:>%  .+*Ԁ OgߌB>1= ”(Zggv߻TߕBi<˦&ۤ˅M8Zh1 y,cyW|eO3Fo֚% _eWQ}aWG-&?nXz9YH{Φ#(@,km=&GZ#P'ؼɿ-{aߨt5=@4n]wN:AF2(_zk--N&n8{D.wڈ fN : QhÇV$0)>W6j bK΢ Mw},6 k1i+)WqEܥŭF8k\i=}1P;g_dO;*=1\7J^˫QQ-~-JIx}//wŮ ʶ0CV;kz>HBo37rV)~Xevv\`9{gDN=eA6H# `*\;4TLg {Z{GnGྫ&J?UPq\!/h (F7 ! |yg0%}e+=` g̍U+/e@ʟ摌O7-; .^O=:?6x>gdy+Hi(((!b`^(p9?eWas,Ae y+NeooD@9nۧ"?c[sx^Y1ؔ#"ϛ 5Kpc0˜1i.fqʛ M)#ֻ73M#?N|5SAF V'4{sP1}i6fΠ{tU.t̒!p{ -h'^;2ZNhmX> ] YP̎ꙇc ^߶$xs Da{Dk : ]E̜g ꛟt ?[kʉQc%C^o+&YPXqrrs\|)s"%ŞQ~'h)Mzu{WS~؜Yג c6UI+Ck ep¡TT)ZQ`a {P:do~=&> =M0n&zH;g}y9j/h|jfU >a]R[{_ESRI*("+6,vm(c(EE+ (  D;ғv!+~`rvgggf٬w}1Ȓy>2 ?/*WzXI{ѫNp'+~]ǁ_HP<ˎߨq+4 54,:% ) x$~N|x54,J:N?k•ʊ"1SZ8o D t㹓c@'/a[tC+?+$h85e&_)#sZ efv6?31#7l=fzJ pLqd2{ʩ@7^`S۞SSv +J+rXZ'1Ls~_*BƵQ/N>= iLܼoinOs<jVh Al8Lwe!Q~\0p1PeA98CYWՕ8!_h{J XKSOGii:U`Svrxoӥ"L -|}n« iv%]ԋ~v? Ia)CӨ|tlw%֝LuϣWR?t:~a#:DŽ笜tK[~rȟ2VQivadnd.md8f["#PZdc<Û.//Sj]m}txWkwr8EA1H|7fk> ˬaE  gcG0.xJ?k= ~k~}=A:.(;.U NR iR8A9%_.>NpJ-A}8K\ɂzAz'|z_V!A| zW&h/|dAWCR30z ($ ?Kn !R~F7<|P>ʧҐQx2ZMWR'Cwlk iC~>-. f7_>I f5.`loֳ .vSAu~`e{v ;/A?k-sIo{iS_?ި /~DFgXl} ]J 08VHQc"T0},+]۩+|a/.ILzP+2i7Qzc|!oW[U%"N}YX<*}պ%a-}.4ҕG[g`?L66ݩ_x #= <160qP|ϘLʲL;qa4c+B@*A~ O*J:F+8xhš-jf6׿D*F-u{<9Nv@)86y| F0,s|Q|~gc7`_,)(W\z5S?*y0QoA>5g?g<|聂i/hڈrtA~DQT?؈ˢm0)v9!) ֦v n*hOBCSr&?FҎ)`VRXr-,0Y-8gS rmoFIؽ}憐b#z-{G%qo,}? nwOu/ ėGG# _]}!vk>"_^qN-;XW;c; tß v.4 ;c#ƜjT ,I/,K|NEܟ) Ε(_w :O z= /`}؏'vѡi_}^α 5|͜ꇔ웤C:) VX@C]3sR~f!(sB=#.?zQ?sFu p~t~$͐?Rpd'- o "x<ʟLGՂ/xvo\:ឃ܎pN%U?,ID#6sBjw٧ݙI8.s w>mIJ;VrL~+;|˫Y:_K0P>Y $Ǿ1jv A-:9pzlч? (V A~;E"S~V T%J;  & f^{ʑgwdj#(hAx ~<}s A!#ȯ!ae,IGpJMx=-& ܛ+ӮT@@Ւ-|,yUbAV]8s>'rhB+jDZ9==f ̀3Z8(UݘR xf£т|IY!T7٥yS o :f{Ұ]>#І~Y0nUi>P#1=KE~c}ql{S_~ J=k:VAjL]'ĻD)(w}+qԃ3#5Ds t++Q~¿Lv]LC6Mg7]>%~If/Ova ` 8Xsmx=găzl\u{`SS}g[#xmvPL=;z,>"^S,qKp tYzl­6TH~#roк#XSk݇\o;_= 3`u/ݩ'F Ͳ[\-5^kڪYԥ}VJo {y kѡef$bԣSbn&n~K7 ;C'OcDT`=AU]T~\'++ ڽNPyU}rgt&tԡn3g$'ȧϛ[yek9hl(,<_?a֭K3) | |e[<* vn䉖. k8 (HW 4+k<[% ~$(O5Q.k l0Z7$/ЁG:6VMgdb||5v1Hg&uuR}F|XĮ1_sy+6_gf I;׍IK8`)f%Vmz CUa'e2;Gz#>Lo\83aqj5ٓgt?PX>g +A|DTjvfw>;SLbE_+FбNusl*ldp1Ar`/XAOGd(FjkMŜ<6ξn;w |T<crȽ]v=xf>݂!wIܐcϱ]Y럒--)G)/G 9_iF"{ 0f` :h,%I-x2sz+%+[tA4:QmslejSs\l b!ʕ~]Ag /lL>V=A;^xG}]Y/.v]A>E0'h~|"[!g {[TֳCTg#_Wfzui|Y0i7)w] ~;o| _(UnR <87\ԝ=zF>Q&BzrI5 0"Oӿ [Q:jĊՑI3^=+Nl3\)͹%g ﷂy&lI|o 0d<2͢ffby}{c{ib^^Ghb5-J=öp4 A oUU QbPTbjYM}yh>.g<|O,𚋿 ̃n9nӄ)~Hp9yt>pBҷ^8A<<]%3# ~ILeƿL:[NťKJܫ,{Clp wϟ2reśz ؤi9ʬ*;LYa$x%OHcP8[:Z[z7u.3Ɩ1^{{"t >-*qԂYUze5_#5QaBl+$:( %vө-5V՚qnj;xh4òZܰsC~1᮴(O`7ցkTƚ6WAw F6r{g=[>&uLz&BwrNwoA}V`'p0ہv KX)rs<\0 q8_$E{iڟQeV&?T5c%gDx;[u52PiY_-c@~}</؟k˓3!A.zgm#xHН5ft~J-iODhKGҮqy;k%';LNE3d;4y{]+³ǴscY nIZ~{E> OI-}7wv;q5 ;r]Hz]nB{8WHYǟnwxɂP7:c̊.P(m/Wczʯ'J|5c3T%ê ]HoZi GLiw5bKW }ŽHTRϡ|mu\;;:A8g;^~%Y?Mоt'O Y(Z %?‚s=OXC{Hp  dX=;-Ac'#0A@ -6}]CAF4~L4A9{Ay$p32<v?_ !W|a?e gّKhf-+v~A4eiGmi]#z\p~A7*渾ݍ~822\8':S4v+}Bϴ:9Q\W/I.w_85`r*k@к/ij*'I%|2TQDc:ff%wS='N {~%nmw/湊/Y@+=he. Ӓ_58;ʘLR'(W% @²N8]P~/:ΙuΤ% (,+2ո#W[Ы̢ӊ/ߤ< e-׶8ķ|߯yn6=<4G qޔDW4^M겛%{ FP۱EPZ=y~nFsHK84p 7/B'L~K>\838 AW,AoX?q=MNlٓZPӤ ҕ?ef!Ycz#-Y{R/=zn>0iu?5%3;V{|c֤ke'w*uHoŇ<"xn&;sH ![mO$C0`YtjlKteC ;cWx_h,Hif鈚-f< Pt;`m+h/ * =#q+ 8ҼcG+Z0Az(lwI3~Wf;) x84C綻 @>X" F1 _yp!HP[%& m;aY# oh", ²$ 3 G%AP~ 06:*Jsݗ_7'z |pA}~.@-. ~56&{Vgun?O6+ O1J%2Uᨠ:6C`l)'XWʢ4 v2jIvwkR D_+:Ϋg[+Mv|OHMQA{ %NFq=nDUjL8?t+N/D-0b !>?G)αK8xh_6۵ԋ_{#~/xG1 Z%N~Gn&cWFٖ?͒7?~f 9BN2'pA>T,;P0w3Ry8sE?%ADC[QDDh[ɖ+4AsACf^nl޿ԳP+6sK(5N|׻rD*g ]ԔSN"e͓3IZK5JDV1#?4v3Ӄޭշ ,ڸN(ǻ&wU+_ K |*H%fh 6M1WLx=sH`4!P:\j#ˍRi)j>|[ZC{${;>3yJ#8*Sj%gߗ&Xo3Z7NMYjqs~&e~L>owq8%S荵GpXk_6ZvߝD͉)XvxHv[ĥ 1D̛ߦvmp\2!m?j? 8:xhP7G 0[AŦS?D׊?#f,SAC`t?tX~JKo+[VmvǴGִWwV-$WLpTuYZe_&f U'( } &*~wB9ŘD3;q9{CF֊OkIJڠL_ 3!k|U+ڏ%Y:P&J|.ew{Ay% Kr.~%uxAp o%7x+| ,/~Y+ .i~vG2+F%t -6 `9Ip߬t鎽d[9?i,VYAp"A;ܶ|sӫMTT՘7]:#ƒ@*x2SdA3^A 簠Q!-絲ck#XXOutAxw>B"( \a|*XB qGS k2kJ?%?3lD<êm+*§zf+us섢RM_`VRo7mKL3d5WKhM ڒCLP\&xn=#]%<"bU2=ޚ9@wS 3 MgF{Qu\/d B*/$.CQّc@PS@IKشDf.p(?O]%hxH#`~BP?(݂Df.bQq2K'xNݨ)6y]@ |ǣ&{Ӏo/3Tğ BVv+ /V pjkI:Ո<#vOUǗ֥6I$=ZI~;N EJhJ=V秫caPnrsW̌1S޲u&gf݉j~'?K[f);ç%St)Evi5׆>`½CdsFݍbn.O:̎Qfl;V㦂?ؿ悚 أuC߄Ŭ!%?.vtD`;B*ͱD,.h. ݣԿAϺ ^_{x }d Ay@`/{aR%AGA~LT?bM*CpѬi- 6}#x5_~xkRA-s -4k%Æ oK6=ūJ.>e=ɾ9q%֯L7KqR0PPCi/(΂ziA} cjuxbC_V3Qy Xg ?1!&F(wc؎csY>?ܹ"{3 _I!BM2t%mۊ?۔ S`x([[Rnbb,ۃGB ;XP:Ŧ6,%"Z2K@s_4L՜~OGt܎{abPR7:e~Tl@Ny[W,(tc3 g CW vt?p%%ХJpj=[#3Z xzTuDKX4_Eot,-+Qnn6\* '1;]x{r/+ -֍pm&CЅ{߹]@IDAT##\{05|hq vsBI_$+ ow4gӗ܀]r}qn{"鿧NSlB*t3oԶJ52,_nqHcZ:Kn+M-\6$B?]Dʭk ;uTNWl:<M|){EG^:gˮ76)&{f5ɷl>?"٭Gd'"sv KL4Xfn1jT6 ƽx I qd.2oo8@@l"H'=RkW`b}I`/O8cWV4tL jF0B;JЁ,?^P?g FG v AA([f(۫RAsS‚A#dukVYMz.PP^Fϋ?\Ɨ0oq Z^l/Vn p??.W<)X½䧡em (YVbl_Ў@JQwrA;TP$O/j]A ^=6Nmy_ȵ!r AD`ͱ&O:K0:{N2>+<;bb v%`gk:jUiuZW>ǃ{cl|8;-AhxG9K?M+vA3CG~o?4֏8uF>g6#H: ]b|A8l/UB/4T{ *¸ڌmf@&*x\cV}/V{3v-ϟk=rca7 =.qbmKSnW;PQmGEpS/sf 2gkn}A9PE@ǭ뾖ҿ^!X8XбQ1K+1+HϾVP1v\_$Vo@KMnxwtx7c MCHCE DlִZd {->Ȼ"|Z v}D̵3(/qZ:Pw!s1k=k W'xvi- |8]ެ<1 ^-4Zw`e} }?,}}A !Yv{ 3qݻp7飭O-VwR>ok}_uuc4O;`z+ ^sB%Ow'+sfU;i%+0wn]bR~5]ch)Ĥ"`u7z&NF,bͽd7/ ٩wh&tl~_7 ޻;U@*cqv9P˚E{hæTF^="N9XzپKc=Z++n߱uMʑ*=Gp"+r/O-05`/1.Ës ڛs9RI{nx_wc-(Yxd _m&G\t|c&V`<"x[N{m7*kѧ '=J~? (ww4zo'Y<[SkvzfGw:Ou$)< ke <̣~6MЯ(i4.Ω206'&hY_:V#qMl`'6Uல=Z[H @Sʐ 2FKa8skYho3:qy5X[J̝œ^J&{߸t^%hO̘*zyXFWrXt\ @~$sG 6=s+%ٿXϩ{B.zPS A)j|7_=I)O _tx.<֣|/;6 OY,g{客+KXNj39\V-HgZƣtÆ$7 $_ )T`^~Tϵ&'.xm @ +2bݭ-Xi+;w;z}i}`W2"(-koJ]w fӄeuxfFZfP!ϑ{s=Xas=K"HVtߔ?^- bƿ-hH/?}ޛ`Ų8?N[n*N0#H)L}2ɱ4oDb(|P$'2<凌~RtG(xW̔)kI%=K1Boi/6K-a>*̻z 2éh_}!&>ۻ =A9%~||M^m[*Ժa{E%ȇ?V[;tF3 7h L_r^Zz/8$=/^ReNxH}=\h=)t%/dQB'{g_) 9Lkttj%. j$wmme9^Dn<3JTvM+}E0?֫$}ed~TF3p 3>O (__ln3WRv='cg':y'.Axκ VQ{fqCf OбᐻsQZGG%<@CP;ܙ mo z} }¼uGE۰ơ+bAx$˶+n?ԟ~^O`qsӂIf_X:z-˭W.dJo%}Ծ H}-Ƚ~_09ًyEo K;!僥H\BY$ܥ٬]5 a58BviW$(Xvu#5; q|$4*^vown>,+eǿufvR|e!R 0ˎ7+#l_lãCC)/ /T Ky)%k@CzM5$/b QP(5Қv)9B @鈙;w~ʭ.]P'[v0J;\>?#M BC3c̄Û kG4[j]v+XSf`3i2ڔv.{z~n}[ ) {nf޾u%DluhÙAn?+qzb e++ 㮰'*rKټ1%@yAഢ=reG\՘~lA@Y{:0N [c BNs&vi(4%6}``t/AM$!n221'a5@td j:qmnNCyF^w/k'QL"|T{&lXzBRLO@t'?O{z?kn.(wA-vԭz@L~QkA.΂4_Qf`  t%nvOk\qt>O.dNfS!c{o1I :~O݆^ +uq\(xaCR< ^@5zY- B昬dtɑwdL/VvHMO$MٲWe,s5ͳ@&O餕z\qft%J63rSB,3Ed[_RnN~$y_,xJQwt%]&9ʜ0qW3_ ~u.Nd~kQxTlc+#QlOF􀁎O {\Tٷsh <}  i`A+ym=|6~6P6k#JAH2SaRg?!]W7RKoG"bYR%XG~/uqIMW`fn)_gk-nLWGRg}ÙqXyۯ;qʮJ~*t?1&}2Ɲ4-U;`'|2U/@,dWC7 ?TP%?:JA&h|NFPODjcڗP50/:(%VT &1۳- mWڼl.[+Kұ_42eh#Nߕ]$mr\Ϥmf:pyΩO='ۺ?rȴey<5^y%u=8Kb3sʜgˎ^h%{Rϟ="eMtG62~y~i :6O bK‡=}!f+ ,U6?_O[ɠSxGOSuo;Qj\.hw\֣C8zh[u?O<[Xi A\P+&6tԧq %<9%-+5Cx+?@A)DECkND}k+=$62ڣkz1 0i?pꪅ)_000u'@ߛ 7FQvjz5GaAiy{l9V%oO' ;FGܙ[C\fyѴ'ShP[K6xVe%r:h;$=+-+C 6> 4*wKҺq?';DC KP7{84AG ݎðo;>ST}9=c4{.}%Pf$GVרPSC2s!Y:Dv jy7o?D<ƔZEޒWoJ k!BXtɉsy 4}-;,se3G@;@|L!dG?dOK.{3h4 dV8F5p3? r˔A~!"JՉ?w{Lgcn-aٯb}{}(WC!,xno)-  \{^EѶS@ht& bE]QA,(v{aNJ QPwғS=A:W2gNyd "(σd,y`ƀ;'~6ﲦS pS\jԯ^TG-قhn/(-/N][&vk&^ւt3F{ jxA-r|"yQP$~>]-xIo$*t$pI˪O ${ 6<چ瞗;r ]as >)/#1p͛ȡ7diSTE8#!+/܆}$.vuw*vch?{Dfµ7e5„>ԗCŦT쵸Q9OszH ͟Z5]NA1޾@l{LlhM7"AX%[kC'9Yo6Kp ^<Zo?%#g >$ڄawoUtwOLηZX!ojI6͂r2Aa`־g"xp+UGq8?h *%/2G=泺:;,VcT Iz{PѦUIX %kqt{r;E#v MJ]QN~_~h.G[p5S'הV&<֌_CCzP,&ʲ?8Y~`mߡ CUP:/ӛ ⳯uՔxx!_՝ģu%I8;;@şt@zr:zx@ÐgI!$jD4j[/X(_/*yY&#Kf(͏5#Daz/yOkAS 0f[JJ .JTԖݏn׫J݆}2}0'}ľñyMg(+W/y+ϝb)\=wij(w@>OpSzRmK \r&0g̹|،h,Yu&Oi1"6tw@'(k 3w Nnt"ۢC[@(^P?$xoh=>n x 1=xL$~B&p-lsw\ S.I YҀ?bF Կ5W7C!ObԙعS$IB0{B=plͶ(9թ$\06ۊpb˵U{4dC|WSKBؠ^ٷH Lx)K[wFJC'փII}_5sXK~Sn<F %sa%=mG$!˾tϩ~kd\{;6+0s?r87Hbu?ؾOક1:AC7Mqt]\ \*]'g7GΏtʡݿ-rHP $6*s *H=yNv1I|g%|TPz,xS#ۏIWP/(.w)&' tuAłg w1-;ֶ ]$m#A:Hb^:&<5h9=E>5#=2 R:z>^cFjTm]CF{<)@z"_f\V}C@p (;F w鲃H0 *l6to cUhnuO27}ۂtqX`vR[#i1EssO\TTyqdBAP0td\p-Ьxh~-,,. PMz(݊<0]+GJT$#W<˃lcY26˒FijQ2=Ls̲ J\M|J0t6eYOS5f;?|j!cB_'0!DE_hN«\_daEL,; wW͉]i^\w{~W.v3O c X+ 0Yz}k)"fg)(i0JL=V+ɱsJG]s=:vU1ǗPH޲HWLS)REwޠ XX/+SC\6n<Firg\5okbO|Cņ^eo7 `}9l`3C<,A)ʽNB/ ?P~_;6\\ o;4#LBA;C3X୻6LΎ A"o+Y`WywJ6a;ܲ*$`3V (~gac2ZxZ}Vx>.>oVx3oݴ3vWOUGj I ýapKHC}6b40WCs}sd_:\Ew&sG ro] [ ~](r@Q`W7% =YAx+zn;(@yYKAEOp| xq1/9;@R^R"aGsS4 ?4Osfk++l#cbdM *=fJy+݊ڼ ׭ -^#Y{Ҡc^Vs,)w2=,42/!<.G vL{?q}܂ԲG-F|hsX|Us*ڻ^ZYݍ-r^[G07b=*;!5)\ʡܤ#MJh$1O0;G0⻳T;>Y9}76PjQ}5ə`]g N%,; "Y٠Svctc'G@?׏*?F\A4vqEsj"Jbg.zN¿xd~M֔?D/~nU|zuo=Z` VbM{R NvT sEAtĆ'29*A}ClS x -LSrS 4kGfThy0$?_|WPyՓ{L&`W$0t0c[ւʪ@^)(G և(j)޴/z2FZ:oD14]Af'Ρ:)fU끟uCx0zit?L%}qjNG!E;ě.6vڣmV"r)A 49D\ n KC-Ή܏`}LfWji!Am̨N=q ZbcP8tL=B[}-d΂o' `CɂK-+}FhHdI/A ]9eySqnЮ΢2%l ^ mgm%oHwGb ;ʜlSJ ={HG7nx&oom#4Dj 쇨.Epl#4,P|D%Y#kT۫4Cy=::EH"ߓWX2=pM U͜^N=eIw;kߝMM{_.rYe98&H^?r+3Szٚ˜V` o[QMvw> =:rCӯ_yf)I"fNb Tmgcn]\G`D82Gvɀ7)ulo zr4 P!WR/5 qJn+U O^`?wJEP^/z 䕂@`-PaN-x&u t뼖wwʭo3?|8xvn->o A_pȫb1Vc/P lZeW>(&h #zwA9 ex$;m cu'Kp~XMA-&6 vVBE R$FGGSnU͉,F>+oiESL.y禾SOJ_bO5FR7f?h>bhHrYǟQ[]͜7"U J(_.~Z6Rl УO $Ē޼EpX :xq̙T_Ml{%8YﻹyUk5լ1~{P ^)JStAu3'8PPgT }C/ݧdR  P<TX{vgT}­=ژYrS(OVV,nhYmofy ?ũo ,)~"L>̛ޒW'N?iz7ڭs>Ҷ7c?K=Lp@"W(xÛl DET3Ka0w[{ ٓghҀ8J.+?GVVuX{'&jd]DS/ 3@;Ψ/sOvʁ!!VTwQNQLI`M6 #5xZ4/_T'et,SO-zs*} 2+k 87 ) H!#|wX'HTα,\tsS1)ooAJnU38L*@l_ !M޿zxC +łF;l`SoSkA6x^%;;ONwZ|A~0fn ؎a)w 䡓M1=A c˜r0oG ~j|w gA;NoMz졆]ڰ{^SGdR]lŌ($>NT-|!R_5UHMnOQ*cxO Gc  &p KcAG 5xn_y D)8„t"riR ȴ=ُKL#v(b7I M*㱶gB~WaCb*;}!m]A„("lPp0P[*";)MQƅB >dPLϨF̔O_~]/&~YL;w.'kuK  }g`nͷTOje&xf_1*{娕<0_]j /D6;8n*?omF kDH;aX^CQ]0b|/i_83GzD B{9f vل?) 1`Ģel@l޸ A=ؼ÷T Mاп1;LU{[[%=kL+;3Ӱ;59c#hrdtp5KIQAdA!wK8n+c~Ph_/ٹ˜[`/JJAb BCWYD~A xɧ|Y 8H6[^jvoxC6W 7Sp9LIu=.s([ae,7L0wEA{{P4eӔGC;/]f̐E3ޫ13Z2+u}iNoMϢqaҩyVL_CI Ԁ:{3k$1YeOp 1*Jss:!2wu Z)4"J#Zy8|"Z/uFxm ͋4)h3†Lrr~8Sƨ5iζNS3"ͧsoxʈ2Ra-5{. >}uL@IDAToV/;1V5J}M}hd\_s3˶cRّc?:6k;{s7?o<E<>zՑw}Rޝm/=GUb n L(!`P,܇yr=N*q .VtϮw@X# %*ARvJƖzC)4TO|Φ.P N@ {?ŀ`9:E OλB|ƕ}7WPo e.T˹3rSr{@~Cy3BjvOaLb@[1w()p`-}ݩcBXAzU[in{i)Msz/gSus{NLMqx=F{V-R5vm25[j1~z9G-u Gxل yJlB|k\TEqJt> ۷j|>\Yys^`sPnF'C?D0oC﹛%m^l| 4;0SC8sp#AK)p `Xor *﹞"Vr{]!( wAi!C͡/!V =UA:DC4R^C-cS 9fZʾ6iVo0;l*Ѳ ?n\j )ɫrY?O _\VB}۔c0?O|LkonU}xguՍt;sٜW&ݟRܡ}#T3h5N:y1N@A:]{z3h`|R\\VӉxlXjz od'̨.i\R"reF˃dR8#=5_񼶔yN<]*5Xe PW#6$ YD |nbQ 7{Sd( ɲ֑08F1$O u4ФL[e?.?2O3c'0>˺Sv"Lq|ʁ#Z19qRgp?<ضO:wFA֋rrT,}к˺ W]Vk찖{,T`_* wpFl yNdA,T(MPsleTȻɂ|s؊hF&̖x%VA*LيG쾕$ |j(mAz^pjTkcyʣ;OGAx^sw(M ?M<. J tri_WsYǮB>+DPGDi'(nZLP鵚,(ji헪˜N-@~>a-G([p׭sڗU_qE谊8 M1m Q{!r:=o`z-[QJx׌{ [k}`B7 ʃkګGe99Rf""@F]HO,}|$'='qU9wq?y@d ۵cksM<~4[Ё'hx=-9U0>AF;[^衂pvxo! @8_#s1tM`h[A*WLy#*_&#_#H'MG?]wϞk2S^zGPQPEh߶|eN*~@EM9CE76K'X_@wU7Ӝ#][gk{l*#؄XX *I%\Ҹ7R|#L0IP?*( abhXתMk4,lCǓ8pe4=)bSnZ5U (LNǟزRxggv)`[m-Ҩy ךRSjꡧ|/7/m*)ZNf4Ʒʙn.IX㔖 .Z*Qs,%a_rҕQœIҴ-R ao/6Lj_ϰr7 CP0D|Z::^_{ގS`OSz z{ r̼c\Sߖ 'm^@lAr@q6G_Ć7kp !wϽ"n[Z exmߕ` PHb4#L]AWS3JXЮxR_[l̓v^ylz@ m,h8MQ܁ ߭kA>SP/(#% U1M 1O.լ Ԏ7M*z͠+~õK>@C}NO(VoM`أKH/De9~zrwUz gZ٩7μLz`H8v=$FK+yĪe9?;EOc؛iќgO"#Hx SD`ȯ&B Pt4Ȼ m)Q!BR!XD3ai *%ނy-GZ4TCv3Gs3R" 1nu 5I3uf C -ST{Qᦶ*Oh86ron>E9d>7)Ev`{ 3> EMw0]l^kcolA鈪𧱀UK{!,5=}}o/sƒ n{w ޯ( >{8o᯴ dgv~B{# } > bX_\At?Gw:Q%? r{ZleE'-λyؚpZN?.!Ipg+AmRֆ:R`"xɂ`J ͑3I!8~X0n?M1cMx`%}F W|'>b+"]r rId1zѷ?UPPϟr?륱8}E|I|% ¿~!Lu{FLr@.#שg9Ic$ntRiJWr NF?M >L4<:OY|x+ZYLIKO݂w4# P{a*l-$!&0Hsh>!ha̵99 qo_{oWei% n|z~|3 2 CzS#*"t{J|SwTOj }ڃ.SiULb#Av!(SV]Ʀ.c!O*rP3W>9os]ž&VMڠ"ݕ ӣ}q m6Kr#~N.c3l` WZ ]jˬ9H[C~%SAb>is>Y'  X|Z6wODPfJ⹤;XJ|Gg`:I T]3n_?(!9|7\{۬2Ww/ژ4q'E1FD畝0+ ߅Κ6w"77~d=L \UHױ%.(){NŲɧ\bP'o~П`9u}cBvP|Ұ "ȎR%]h&y > $x?DCs@Qo]{_o 'n]>o&@*;' F LuP9,r1M[:w(ܣwn:)5s(wb]/PM(rwT鎠5&H,`"Ujn \{`%)aL`A-NݱA#xa!ĦFý|a[sX$\9~nhBxejwڥiƝt@@lE^tD }>, Q.ߞ{ErBs-grP{y A6=L05Vm !\'x3&۝3-buBW P*QTs/u(h5aosƫ!9Oaʎ4dP"AК9p Żָj/H7 4 uA7DZHtwsͦ2ΰ>lksh2Ff'd{u$_WG̹1ZJx~[&_hm_QyDEEGmX'1\xlR 3!\Y!m$SX5##t;WrTq+xX{ *Ÿ& ^ykIXiLc#E(Zuy_e5 "`hWGAiU 4H  wi&"Ͷ)/LJ[ݝ*AoVZ `wGi&$>ro+;#&.=fMzE-GaG縿7L WgJI+NUӓLb_J3qfD˪.:-Ivtb/wOco/]ߍo(:.bCkz0ֿ׌rגVaZ50 mE6lwSܼjs4t9yD4zJ. #o#R ) 솽^7]L dxɾdJ_kZ=^E:\s)ǓK'xAyx:P,Y<53$m\P7,y^n_J{ESK%z\;p>^`Q>^*A|CsxvZܸLR}y2ذB3wMd|^ ϩyjW]~o+N߅O1rLn ;g B0WWvK]eW=˓1/r|2g?N3̽Rov< BABS,Qo}\ *hp% wgo;[G٪#Oc:K -NP?PhAz&xsRez =|!(3ns9xC1I(((k ^b 0;9A93HP?8aw߰1А <n;9$HP> ߅ۼl?x8ꕵO? jHAwO)a̩/ c,tJn( S .ٯz-ܟf)i~"ZSG.fl-9¿٧mW./-pWA6W bG;xGc>;$vHt % ?/;p)<;Qs+u ;s07`sgv_ *:*:V' i=Gܿ1ūX:~ju5 >@K K8)}|Sy M | wβsxTx87@/Md ~  7sj-g1+'@f 4F 6SilS#XKxGPtsͽs@)0fϣhT;V{ Tv*T@ל1sG,Kvᗔˆ<@zњ_3ܜm ,~]PP/&RzŦŰcGFrQ,Cw\T2q0 *ē`.o+pBgĕ VO׊VO;fNNx~:ǗP5gCw"`OP>E<~ee?'eYW?K7S&R>.A{? ]YDU->8`bo|VUCd4mGȣ]W&IǸ'A7iSNbg7(0L!A⍦UT -j9 #'ʮLhu[{踠J/K=,;,7s1ƴKDc^w==Xk4xgi ܾ덵!A?-a` [;-7<~dA~~^]Ou0$(ӯHλ{:Ӌ?7%"cܽ 䊿}b~Ag|&‚a|8;k16 ~I@zSP >A~/F w%& 䮣k8 r (P/YYh\cS\[?鋽cz]SHdb/]% Vྛ?v!*7bCA@ wgo j[ṭlL̹?aOGP\Gx.)h!l-(q h[Iܷ ˿7T9*hGNhIEP@6(m8dwW^OBA ܞ&|3OPp{&P*(4Zς ]>B]9`ImdfcعΎa6Cm\NjoT$OhEgPˉBOi֤\i=mPva?>h<N֋iKS/YT:=EߖP=6^0T\A%vJ?To]5 W|Jo,Ѱ?N'_xNy QA~0fw[Z .Z΁h /mvCb2= P,|Z,45Gsn W d2݇SgE6 ,e(nL$I͛Si UQ7Cޑm7^nZ.)W)i؟m( j^ .wpz/,{]>%^08${ޝEԋܛ%.n%=kk1밾7vR$ݹVǿfB? A3O0P9;)zՏXA; A~PpJ FBP~I@qWk_R w1忦Fv7y@^- 1Ћg Ŋ;0w>. !-XDp~A>LYpfq(DXo[s}=ϰnb-n}MhAz^l\6t#9U^oD]l?[|jU_Y x>ڂ@ cRAzM/+z p e9;4l:UK`J?4: ;'W`@ױc(}%X01* z!@_WjOqU ZʯhQܠVl*B#|(ۿt&=# q k-{t0 i5>*xSf\T'u}AC22nvkG*۝HP>^Ś,þm-Q 260s_(ʞ<,.ϙ+2AϩjUcR9 n[v7y.!y-,klZ6G8ykk8_c¡z W yAl'Ez.p{ ^r#J3qȀv?G : l1!P bmmdA7J3o߬8t@DAz!Q`zKd>-HM,oħݧ1ܹꂉq YbC{ })`dwPPK :;m«mx+ٸ-`ry GP^&NAnU̿{OJ!ſ(p7k=1{1`?wnIyAzpO[\h]p~)౹#T]sv7r`sϫ^xeB #I3`Dp@| p ¹:^GĿH[p=<:Η zZѼ @፸RM^d]`y(WVh`$]<,WtvT xQD#eܜf?(&؅6 Kܷ摼 I?;*%WB׵o\8PLr̤$Η| gG&Nq1^;kHi;'s}Q_\Fҁ\T#"K8aҿHXNne QZ#/h;NFL}Y~c *i=4Qwm& M6{`;aS =IChVԇ飲RhϩWjN񟲣۝dsQg=JsyIX# .'NOvuIȻSʮTʐ1JReg%ԒhmCDz=}{[Ǹ= 絤Z3Epm+WL(H/3 K'<wJeozJ''@x ip/ ['{\(^-w@qy #2U{ {^>]~vL `RcW\7)ORrXAMŊӵw« :%}!+h 4Oėނ) Cz7?;{ͥ(DZ*H/W^X=MאHnj[siևby>|lɭ7;DUͿwײ2_b[wk1'*8.=H0@0/[}|g'-xz;#޷=Qw*@_PAE77&d(/$nP Vy9_|uU ^mWylA=(%OxŇ_EnaU>4zu#||-#Z}XqT%]B:>8}0pU&!1Ob/[omּYszGN'^`kkgm I{CY4x6eP=.GmAgh:nqn"y=kxpb`T;x7܁X|/J 7 }snG>(Fd@:m9LZ \ZN j\V_HC_Vz$4FHCVEG" |)z<<;)GaA8ݻe>O:[,G&P/`{.i=Fyr0l8D6jbdϒ8^=Ôd=Xvz/NTd'#X/feQڋf(*r3Mp4kD?Է+׿rGʔGSS.WAuaSƚƌ7^,!m GMA=`⤓>)f9A?Jwt (з5Zǫ?!ŀ-w+p_OysA1`_&z<(P|WufO<9A' lKW۳b}nk>!ϛg՜oN sxbI.X-golx-.OaLEASAwnm-7 Y: #@m- wY"G Ow5JpCQ ^P%\-÷A@ c,N~A;TW󾏻b =A"A3T 0.*k ¾3stD޾5i՝p(xyFj}\J'dx}e>H܁]bܷڎَܳa>YJ0{cF(\?_ 8ߣ$P|VC~-zgӓpSS(XHFvq+F3LN  /'}T>|8g T G(J%K黆]Ą4]-ݢ ( HhM|BH2ybe~ma[VaT~䲸~ @a6$$kM HˬR[ Hz7sz} zN6XU٬e+OCO#u>v!=`h `)wI>|n,۷&dfҕj[խZ`ͅ[ɉ=w`"_ w|x gx-FwA ?|'wW;Cw8:ګ'v;z&T!aA~-_;A`QKA>;K]@RAqv;' ϟ ߮еsऻ}gҷWYw;-'&^`Y }<$p9i-Ί<ÑtЦ ' :զá6Ǟٽ0s`˜ԋEgX9qӐ/zvQ"?u3F*k_N,=4P~!(Z/[Svc{pg#LR3*a.\Օ/zۭxzmy.&X/.ȅ@9]`f2*n^&S@0A((HUqec䋋v@=v|?v44a |zk5-4` sOlפ]Y!LO3B8{hh?#c z=$.68)~l'+7O Fyrpȳ\oV#yrQT]JC0ps޼<-`;++ mwKF#=7ۛy!Wa'?O'2 2V6g˞vΡ;g6t" TB5G@ьqW[e&>aE lFdeKU .;Nvlc8vcgʶC5!s[Yl8Փ ^ Nln7.w򏍕WeAE\18WϮ/{8[ l-7_0θ߰s0҅V0N _F$ ^!𷲛^p 'E="A? p*$YWp 1/aL}}Cy=9v -c+wW/nWl؝8HP^OWY]y&p ]\ TAi|6 nc/ 㶕8YS^Nط`AǠFP^5|q_O~][ӕϒb|)*hXݡ}Wt*w,s|aVzCCp|k'iR uu CJ$iPQ &^s/uXQ}]p^k~z*x/ȇAs@$h$pT8[Sp뮷abO 8 ӂ A;bA ZȾ y&8AbЬ_psi~0π3:tpZjc㋞,Ly$4_%6f}zs@Vd9ļQxa$Bu~s(-XƯW婡4I-(0Bpr0p p=&x.Gp@A8ܞ*~A~J {`I=Ay\K:=YtFU Zo@Pz obQ[D EY`S /"-Uv( .5ɭ^S\?Q(M. 6߅Qz/ş}y5ѰqO;5AߗBpRq9g0=hz;e۵Qb[-5>ckcqgdf՛Y2X|gLuT~+[cr$G +@o)SW`E HWYW}v~WG=]`#UG s: -** ϽŦ^_z,#L4 b[xzY ޵m֞q9I'Z%j Ar"מN]VNOݏ)XQn#([LIMm]֗ohm.t (h&ֹߓSTw]17r[4Z]c'DA[οV^)d2^$8\O}99<9=Vvp1E&u侗4\:"a Atct@URÖkWϾN5 J@* 05 dٰ֚k]> x& A'C *ro*HCB]Nwg{-p)xv{^#h/(~6E~|HFL鱪}LV,վ=ᴂ vF釥G[^/[xr8u~Bʯ"w9&qssisMhz~.fqA((>|_wj1St@@/!+x^Kf wgL[/0A91ZP\&Hs:L.e`L+LJ!I44|Rz<73L~ U25+=Љ0DzK^DRZGaLԖ?h^x[%ptl"X5BA5:p֢}.$I@bsg2OB5Mp"| '6-0k}\d?][PMց'>@gmxhCO]?'U/#3W΋%l=QAwh stM+k6Vn|MTK" xEd{T;wS"9C%8o-Ucvdž<wzдH6|î\r(I]<-x͂cqgo/& MNn,XS`pt@^ ΂5 (7 {awP r.u:ĺzsg@_Rg! @g6S!;][@IDAT37Ŕssì_truSSZg<[UQd/7ig!H ;$+:P0$iA28_W{EV@oxJ0W(AaSq|V.<ڧ ʙEw>Mr|hKLJV!+1yߴኄN>uՒ-Vi@ϻz=CpOf˜AAWA+E-mq*ne 44}I 7wپ7t\\WQ;gỊإ<ߝ9d *@fr@#r8Al|Ȟ,(x ^L.1}#x7+]m~se\;}'ě[pj%PV {ÿ\8)LhT+|;%ðLxry6,RPwTliyH]賙b&"Bdw_(x%MKk~؜jcSX(oPiK\1"陴Yi֥tKFh ³*:?&@>qٝT\$x^?=U q]A<;un_s?=Uy1$sjrG>IM4}z&RKd=^ Lj [ lQv(|bn`gh`T>n<+R~H}ُE5gӫFQD"+^ 0c~ئf~U&Bm!WhȀvwE7[xoQ=N]:X{Y5Xp7. vbt+-#):h];2Dԟ9*Q$- ٰ LQWPN;G›yIe/V\0{Q|JVUe /@@XÂoP`?RP8Z`Q4lV\2j&=emԷt\6Z%0昙u,zL϶6WfT?0M 7gEd@>=S1qFA@ g/  y '=}5Xw *jڌ.I<`i 0vsr4;{Zwx<=[3> Ħb&_!{/ ImA<>fcx#hsl=3E%PDA]dՀ*_ |7ɸE {]嵛UZs3WNK\A:Uvf2{ w&wE*PG|I?Ofu.uR݌gg"Py*V !**Oo6ܑND97Ô@:&c}"({y,}#QO\IpzY*9^b3ruQb {sF.lx i(޲=`qn} LE[e2?i30Ph0uaѠ+`ݏ?acDn$hV'P _|3yqdO|X Qyh3=+ ^4pc66^uȳx wugO9P`!M#|Pn/Nkޏc1 ~ Q¢vבg0>R {%+x_zǫ'$X0=nײm%8E>CP.!xΟ :wbBSAywwlZr wk2 'ӳ|wn!d_{6wZ {H^Q߆7|Eo9 C WIX#G  >ReCw1Z#ZbQ#am\Ԩ8VPz}E>k 'Pk4XXgfކ0`(>,N0f)]= F@ ݊0ˡHaVrQB繢 f`wW* P|  |Y@axYP]'(?|g աȣ# _9D?Ep~+㞁? V-t[l~JFB2s g ȻКwԼʙ5;XjA N~S-;S\ZWUWuyձ(_&&uns ѝF4B\pY-_=k)/B hTv~-#m_j4kuEn;N3r7I}[ ~Mr^ӍT;yKjy+.zEy]j`Gw !7 Թ{f9 8#e>Rme$n&հZ0t$M"Ёis iVa wJoIl'ޖ29x"kN-C!)8[߼5x x큲ʨמ,vU<5qψM إDXAx`H38stƇ3fP-oCıwaDpA:h$hMJAyy.8aqwIAl]>n3w^JsR=_ܧ777Tlsؼ5 XA;A9X9l;]u'w}K8\,ԧnY*m)[8kj'.BPb3Cs${щ˜}=[&v>6*?@cNeòE'=uƾO@9QsԃwZAo;m^ͥ756\$ kAy@zj=D/a ^*Ki ےV> ^Seӂ@^>詂 Q\1a荭%;)LB?*օO_EquA{L7ApAyX_P&ȞpT;'Q`ؽ\p? &߾HC߁v 3Ax  ک/ URmv2$Xvt@o^P [|^+\)JԮ'wXZnq V~Ys?I@l&<uis{a?$x zLTPX|&+dIIyc{ ދ了[LѦIڢkG ΂{s';+ =WRnWj |ca; ~nzECj.=M`~MLUw >ćw׉NOu ZmIl^T;m㶍Qhum+ ZzYw <6x3mU`ǯ՟Sǣf INPay=ŗ:+uo|$y=YS s`B v(OsA2Mo{[[L.AM4Wjd̔rQ~:C"&쟄b'c]p!ugpzF*q]늾X2Wu0ֻ±:Ϊ(6 z4Wl_6?%6BᲠ١!*8 {1}0IErv׬촧Ӟ15kO=1#6y4C%_zz w0kr_s`#sTŹO81FTsRn~}2絛U"C&ͨǐ+*#5#~&8#ulE싈p ×uk +$ڋnG0f(tNŘm7Tg<%:3r'+Yz@]'88ӗ/_v,VLN`CeS@]@xaoc$WF CCqA~A7uzVQ~1_Cx^Dt-<[<Ht'xBW3yU~8.h QLk;N۲yڂVc#9LfRs+ᎂ)n3 d8)+u(s9y 1<vDaIa*Ej-Jd,v^<`L(g_"dM(F?7xkK@E=]ЅEgKo6'`@f t/lֳt;bP|u_juXE6k?Ap yf^Ǜ ڒsT$~Dq$~-@?LN~ݘ8 *xf`\ٿk< m.FiНbJg 8 _ =F S0zZ,gjP ۹فupA2x*s}n+&Fy3Tf\^q'/}K/_,4uAxA~>Vo7w7Sw40vcb@_O q LE L8Xlm s& C{ϔOŶ"+U> [CX`/`J20{掕p^pj_3Gݱ7"9)&p-$Px :aWɝdΛ;'tD<\  Q9<:=ٙgkȝ[®/ǷA6?]_& :G͝(OaT⧝٩B )G`V>R,~TUDlrtfb^yx_u}j)76wǤqDA[]K/_ICxtpN : ڿwf|xU9ūy[9[pRGAx N^PM ]wh1홛y&v@"vx`ovUg-,/x0,^Mt|Bh`=vm`}c\9.T7$a{ 7&mycsS?(3 h_[P@*Pف۾M| ů(wz$(OvN,/Q$&$Ag?uŠiUOHD 2>IWy?R_4 g3q!!8 =?%TZcNOF %AXLwq K嫎糊KpUyVKI[n~sȚu^ܽ-e`r5W γw%K.q'#7 a[y >Cz7Ab@!/!`z3tB~E qC@GA{X6"8[]v%ړ^zu(SpPPnd  ړ,9~KD>V&S66&}N{śǛ;F&xu@Z`),H]v#er]ɃgrV.4^%2#9\NЎZ={yo #5].HzAL ^{ѥȝ> ^ܺ|q(!O_e(5BNٳ ǂT?i>^Po4M_1$Ph0f>Xv{IMg8D#c? '+?/ԢӊH+Vv <}Mf_@CfM|QӊUkp0?D }n"E9`(%-NREїqrfe%RZ@Sb*pu Ffa1-g!\RiEY !h c7nW1mN${`H8͡|_| E(q)nTO+JP#}@QS'Zp/0%?+/{I\-h;ˁ>,[f+·qZп} Q|':FlGWOp?G S[ʿɞJͳd3PxQNi(t6ƾX"$CР  >(!Mbn $.p"PO[ڼm&ԾI#@Z%# q@_"x4Sa]AO.0A8^a?(G *ȰZn@zS-Fw5BaO}WW|7>O7|w c- =rNg9Xz >k b'n͵llA|]M9_]t6~x'zFly(c3#vv`CC0{ z-xIycBo00L',4,2SKH"GuQ|n(g:*S6[Ԟr.+D90|NJ_sH^2FQ5JB&{k)ߖwX]1B!)k$o`;c/s6}z0RUIZ/ku9T>2Fh@οꅼ7҅]zE]T_TU~xPrSk9;u—>2 J&K9::!6+"칼XwW ZskMju0  Þ$Q?/| %PY(Ev~W$ۜ% Vy\'jZYPuvC~'Af=Ŷ+8*{W}/[=z>2OE@0Cu`nJA͋xJ;9Wն?ggw-h-ca Qa\(}`$z`aL x 놂@AxA'uT!^+Y%%1q3dP5Z nߝkh2RقC^ h؛x&J}JEaz1zIPn\f l&pWQufN)v`gS[Yzgj|y1B_7P }xVn0Lm,Fh٥uw,8DzrNw!-NF:G'`;:# WH81X_4%C׈S'^طgBxOW>!6AС`6A|kBA ^w :}=Eb61E d}FG~AO뾈~>f.OGCaD?9~M`j6xӲR):J+b7wC縮K4z9 =}q\5ɤuuQ d2A~9Z| %K6%]0eLgaLYpaGA=`q@/X@yOaPW`' ۧjB_PWAƮ! L0zۡq/吃w6x~t,td QCx0xf cj' hAn86i+Aq{ւU__)Ys=;IܿnOؗ/\\Cyau6y"[+>=8+ *<,|# Lu1 __BQJ6|IP}%GC  SГVpDA Cz uo5F`p0 {b –, ܒ!cgCsz (`_/x n  7 rN?̳q m(h(#h U𢹞iм//_| 3 ,(EW_F z(' N>֡*w)d68;y1 [wjy?\ޘN˧Bm唏KC󨐏~oВfg ;`,vAR: <\~nkߋ;G1hK\*`gs,)97ȵLI|+<Ф G -%'C@xXք140C[==?!nNX6jYEoc lL&A Y~K/_ O\%m# &[*PU>*P/]aL z^h:"'0G<}v %Z@'fw33P5Ué2i  \W\NF /ĴLUVS>jѷklHw5ΠWqެ?V)6eW#W},k560ai$Nk kW(R N}gC_| % la ˜ ;x#U ʁIns2:Lelm)EeA[ pE .䳥@#0$ smu+ktfvbߝd1`av_,hO-b'+KBeϦѸ/XXA3@~VCe޺ԛώxO k;AX7jDVJYm݈I%K`$4-( , ([*T8*e_ho_Аv#'bkA #/ߘ'#Xa&w%O-obMQ[KƆߺfc\ԾIYrqѴyޛڙO31A j;Vna g,9„WH= &Cc7٬p0Oa r)hXa.U,MĪF%vNtA.n\uuK/_vBnAlZ0`Z1W/ؿ[z{=́xA;řTC͟y;ALn張F?KPO/TPۿ,o9Dv9m]U<[p/ ^$wH& AT`:R'x/F-mr3C| ح?U`+Xf`1}WqSnKr0:5cz<ư|<~?sjP~ZazVY\C>8ۦg,r+zk֘ 9.XRicSvȡ^X=g]TlqZzDY[Cr̞IAi_&,U0+Hy_pgɃjgh.>P]a #w+[2Iv{@R*h*t%K/ ",[US?+~oꂋʫcw Kˁtm-h+O[lg{@;@|8WJO A>"bg,kBeͦw z. G I y4l\]0fQq _ D %N%K,SLi+˸/ )qx3=ލcqm;qWh^е nm-P5⽍{cĻ\oĮ9"O-m㬯 =I4<}V\ `omr?oQW6N:@蔎*wv~YFG>~xBcA49RۂBÈuU]v]SᚚOWq]?>:|`.ւvNC_| %$RQX0ϏycAx`{#u@N#Q^jAz4,Vq׺@IDATqDiA롐`ADEQ"F6=Dlv+A).Y?EG-Hs'O5ɂ]E X0c`Ҫ;Tx "0Dt,Q"O~K^&K rPTlިq7`9*{h(Ʒ/:C7n. QqU^nTl-XM){E'8 i둈;;s\I1>pyu͊BhYt^C?~ a~Myi(Pc&Ph=fQױouG5]~a:9fUw~^ ǯYqhZE=H~eYcV6Tdg WX|@Ccc]&x. ;} %K@H x~W0 C9=FHX`N< w(l.RzZAEOW.bs1#:~~~IS|!$ЃfMzfykLr!h #@)MDj44oP[O6Q]l)6v:Dq| %P6}*W"PW' \P̵4SϬ`B*CH ćaQ?bSѫѣX:q:xvu˞bV Fv PP#S"39W؎b8v_4\ɥ>Z5Kv+5WXT<[a%O֥ MC(tw<whXzyT:zNaePD7H ͯ/逤PmCj^?xs Ho| %K`g%PJ/Ji,p][0@E`5Dž1?,&A=@[(>;M+"P c~yQP[)٢D4~-=%[C0 :<#>ojLmyzaSy ٵ4Ra+s9ߡj; \f`8mUZ | ػ$RPa~B pC&fBwBIl亍#768=OUUp@seo`t4w#p-gy_8rb> Ao/o?3y)xN'i^!)MV?? 5&塉-ZM1xФR8iFe``A?5bjսi LK‹zP!}n80QC1 9=[ 3P!Y7_$ _| ( ҋV4cfXj[ZqAp( n>~O3f ]>lgzk9.?SQ\PI|W!| HvbەF{w= ˽ZAWG(6X >w%KK X '}$@Mz~#7I;pE*=)C4^m ֤"PKh y4 Dُv0"bYw_\mwA՗Y3%orYԢE CEUi +.Kv DK= 'YF#?I$*(cuE"=|LA [\YYoo*<خq|xՓ;) 7 '- sEq/_| %Pn |G0sAT[!~KA[p̣FA{1\ &rMO;(lH5d?)hL<+6MuW` :Lp!eFU71 1U 9] Z-/_Jt ~EPOƢP.N;9߬ف3R9w&tPϪy5^]7VX;PpyV :znwA, vA_eyTOptKp48o8b~,Pke?%K@V)p(':zT}DVㄇYfӨQGG3S~v|LsboRz#0&M}6@ }F Ì92#JZ2'au'۪#bkc3m'`UKFw>D=e̻$ ;=f~7 7k9>L31@Sq~z$~ W h( 䳃gA+ 48~LP+1X瘹~?=){Zv-nF5M`o:%K/rMF`%~vE>]`\`Էj#E9tảfW @$8ȧA#J`Y,8#c +DL}56%H+ez=Z >Ip' tAT9ڋO.=) $G柏ԗ/_[s?Ϣ P=!ݢ"1dg{3'K}3Hyw֢􂃰WaG,* 0 8$EۮgnH8Jݵ[{y\CӬ, Ձz|>V ;*Vh`vϒ~B`m=1h TfpMM8%K/@%#m (!sADܱ9S,4>eLAvAڸ༲&?hk `E.A_v[6I1 \r \D /CаS :I`"h$r?S=L/ ʇK/_[C  8POD }ֻQ[V6%y7>f]o&/3>!5|n_D=[(H (Bxms=E}Wn1w4'̢T?jCeb^wr;?`.$`'~XM9GalmyyK涎ܨ0`T=*ѲLG:54(ÂiyGh?c> c f>DX(rwRr*ϯؽĺH<%K/_^~Oۂq : ;HPuy?EPf ҟ)h-3X0 re#q0OuA~BDzޤ%?0˜>1'.P>Ps]]m_պD !xNe* g'6l9r F.[Vo'C#<  R*.#]& ԫ.MıN~赡v# (=T7p[%?5Q@@F`]sU&0 `@wQSv9`ś>?M༁H~[ߝ 51.v%˥f8W-j|R=f>ٿ7b|XheC_%Mg][$>l0[ @8Oڬ.ZC8'-xH=ӅW Z G CE^|aҨ>շjL#L5_T>ԅysT@qM%AW0/ RCS4/x6Hy@1' rys=1LjhcCFB+]yTQ\6l9} $0ێF;[~uU[2 |W9 )-\M@FpBwO=y@'FMxO$ 'ѓ@ t f9`sq eBp5A1`yGJY]bZ!]mL(RK>kDvi`ؗY& 'z2]/uFYMp*?rDꥵ>3]/dULe,wX(ߴ`kar]Jw?Sլ& (ys8v iBc ٠)Ѥm2,`!O6~|#A5_ZWs96jh܇rMaPHWN=ubç+QY5;9`ś8`$`x  |+ 49–)P_FhK! g*>7p* Fm [{ G"0 3 ;ͧ D=N~bVO䈝9`si@m"$PzƮc(5d =0?<|s'h#(SBW{xl!TRϹ0bm 7&i/OQu3ik < akk+˕7~-B5.G濮- OzЌS "Ⱥx"5x4fs.%I B[+1=VExTpxqv)*b{xh,)Q)$iqiizb ; ~́D6>Nwn-#`.N@Jx#x!5'N_5a'P .T%n{cǁC'0 !DL\N;_8[v6l9p 2,x,kV s .Ⱦ )GG *NҍI HZGI/"#eT#2o1R4?A(rip .?SRZ-z($ajr <&J'p6P`v9ps :E4+@kK!p{)/;S  t\_C?O`K a'6~ǁh;xH(C->UH`5[Nn —)ԕRa;b*Z@<$p-B+zH? Q޴Nne7Ǚ/І/̆T("k.u;F9Cd3=g8߱[ `^Gh8/'EJJ+NIGZivSS#Pbw0ؒ}=] _\q|.#ZzG fl*Ca%%eww1& T'PnUo \+ds@uEo{/Z,)I/hm8Rt#}`T οY/4 `_(Aจ'_ t=m8Zν WH{u>z)TS8m8bk93.1,Z<򉈼_#ps ^ S!A[']%89@N: pjgśA_(߮2'C\a0EVVjw1/eX4n_W0(o__/5D:ƈTX| }ܝK<+DG$2όI=Mq:vSAR`@[&<vMiUxj!H@Lʠ26 "oqgHeC ~![H`0I# c8ߤ#O-HnEj8ϝ)ng b7w~)FVǁ`TO o!*h=!֗'X){A!M#PN nO+3H\@_H0YܳtiNq}́sôA I]*>y2%@`|b b#&w{_Qv4ҿDn&p2כHz]6fd&3(@QOݡPZӧ"Zmr@0mBOu#J|s'S|`Ȑ.)q@6P@N< >"t n` 'yTN bz:GK+u+z89VsMj\$ 9H1ah7aYњ@K 0;~:}N J)XʋHgy)PH x|$mĆ ьMm.]x˟#XݓJq?N@`Vr&,,@C@@kmD@p&P !$x'ʏ)V9UG^'"d/PJ.{́s!b Hg6!Baw9ͫGV'"Cij-C;~w``8 E* ĵ }4,6l8S!|_;u2q6K1ۘPcna2_HW [ DžڙPV@i|841{k pU&Z $>'D ?DjMxE+`n o]vk34ewx"u6iڻG+#KjXCkH+TR ^vTvGLjWq5RY^PHյfX"X;F4+/_T1NxN'I>ՑOuÍS@0!P8vrTlIe"0=d)K! o& 0 JNW9:V?U; ~:o" yY@1a*q{vJoO/~c'hՔLg.f_Y w<-mBP25*P8JPR{sb*yaF0(MAdlˇ>c&u5: ('X>&_hYyzEhTlibb`)SX^Egð |Tγ8`(>j O G:B`̗Vp)G`{+ۺEO KLt[?Aqm{ ?z`A`15lj#l@Dc{0l!`("06yıb ~4E膦ڭ Kуw(;9`sÝȜZགۥ 0 -U>*SM28j`"^cD-)wMէCͲPX)[_rU_> )< v=}bww6r_@ ){ɬP`[7k& lb_O!+˩oS* MlKZZ .FFDʉ P {vcS|Z2_I':cƧb%lfƁ?Ꮞ`E'E &|OK1HJp=L}FW1'jQC ٿUN!7~Xoh% [ K0}N @>B2%Z?8dsLsKQeYedg߳mdY@֎@}g>g ?6l(BFЮ !`i})! rR[`qL\8$WV(/*XAJ&*Z7Db$U4/2K-nGeŚNñY z[=Z3,ώ;|xY8bn)R `Tމ1Qk@ZKR _VGa`@ġNZDP02 )\q& Ф룰"pqp`5Ըx{ararFJGyi@t?2a8HWԒޑbs j >!GQUsAO OD<χ' k0~=n'@DB>x9v"z{W`_q1@0$}!<ycqje%m.&0KHW kN[eaśXp:0 kMm-UͽL+z3= z͘˼^x)Tl/҇xYZ./cʭYs$`,NEmNӱhPTn xތ2pM !/iRuِԸ@Ej]%?$Ix<PÓf0o! ]1C{Y+}Hstut0hUMwO̕02<-iQf( SV's r$b! "^';]E,&@ =Tuzx ZAK΢"(N7p `iOC\GqA/B  Oǜq68v Bxk"vF]p!Z* %Џ֓ KVǫu.h 9`s$95ٟ"F`O`\鮽Pk/4jfXO1P!=[?5Or+z/9Khw|j٭f =b]I ESN n?&7ҤŘRvە!k̂厼zFp*ƍLB) fci*"54i\Ri;H꘦*40sǚB{ S<'W;;axB8B=ܦ* s a˘17.0r?cǭox~@ 7=W;D?R AQ$R٘Wj?V]Zt%u/'uo' Vˇ \@U4G'+mGuU`zXb_v)My /I3}$40dDJ(h+q}͠š"N=~Q"@s/~z%^^Bx2 ղ́i ݐئU8 {ğ&iAK7܋@{i+(aήa@di0@5R i]8_cl{&ECPM>MA/kw؟pQ GծZ>]V/18WkqݱBۃɕOJ1oxʽX.[ 1l(0= {(ŷ/ !Ι8S!sjT+jDD= P *CPJɿ%#NZ3%^@ۄ7AYoQߥ_%7r fo(K3Vd,bvnnYEЖx6z-֖F[6Pfe{,A+Z>~2cJ,PT%Z3VF#PdӚ/*U}rl+WP ^;/MTwLZh=uo0}Ji{a!-D߄ M缅4[W'ךR+J2o_18h.ҢB'pb2Rye=ۋ\H Uh r<DžSAڔ'-> lΉ9H!$q̰p@%Ju:1#0hoNZ/7iߞ6iD,ܡ\p#ake`hiAD(=3 D bj?-Gȷ2I(c`lEA\u@,@!AL= 4SQj"5п0"D @9[f^̃aA! G^(\Q~%n(DHKk1cc5ibu~ihn_g6(m#1b;vQ FF퍃"d 7^1 Iq`&Z?ꬻ>ߙ3[<[~oa04osS!vsពx+%EY#XxOLRAuQH}?G!je~{:6)+x+VYBI{?"+&׋Qyz,^I18Jr|}F {ge3Egɝm)IR& &sȷ FzH/5'c@*+PlK|7%u5WWf~HNxBx# jY<~sIxGl{ v_?yE0z±ƎmQ~ޣp6}6lBB0J(+>8 |yg(S_p@g\A3A}Pt~fBܶZWa(32Zں'Հ şgbXh#/30ֹ6kP(rTFt嶹a`VRaQ!9q^ el͍'[#0PP:S)·̋`ؕ,mcT Ѥ똇9:Q㼃@(;8Ɓ,Gxm,Zv|[ +NG^xw>5πђGX fp2P\{J9ԾW9ګ\ CۧՠЀ]f&%P8]/Z~J⟠x lmmݗ<qֻ7*ZwBwV|G]oE7yW󣿂I N\q C@G)|̛wHE[9D`%=|@wjm p<~u\gQOX ,GuW'5w߈mYl_W Bv% +@,}凕ŽN}[0.VDcFڟBOCn-pįF##%N z-Vg'(n)4~VxjkA?)>1?~3Vύ:aQ*}Z_]$s1&9P 4:j(8:&H8eHVJp3Rk2<'C&Rp'eɝBZ lE@I~ o'x?$>'W#F;?{11Bs eCaD(=uW+k㭑`9a(mmh[::8"e*3=沤b-Q˹{^|6j(w!0. pv czn$Dgsz˃Q}q')r=RryY@K)<2/':XI&+Oi}h_LMV搿L#1>&IwBܡuQǓvKdDHS9Cl)5ިJ65i zbLyoOd%&N VE<+2 !6M!`@7ׅ'I``5G?9ʁlU  ISy:0za|d`Bqyz` ..A(KM SyHS j$hpHN C S"} lʁ!2!Xbe!+\?>~}_ْj,#}eb] jl(;x9~yHOQWHf ؏܄TGs5Aϖ_8qKwm)h-60oT0Qy^} 1Aʇj-WFRϕ##̖=7@WGT~-mj4$x*-MUxXQMS?P?/ 3O<+S 6_<;}* ?&t)^RWcGKz'w+hQ p2cP8FF{ L@w@b ^N6}u7M`QgtܿN b_EE@IDAT6[ L@GNVgQȗ%3c?iC8qZVp`߅{`Ϧ1Rxez}WR* /K?γʭ ,it.С$fl iH ɿi/懎P!W6t-'\T)C*WDfZ`[W4V/O 05;*D dM:k!I~B$8jO4(w4<ȗRec%"7ӸpLB;e2G͢/'#ot'cTx}7^֒BD#:KԤM14 1BVO>}_ _1 Y}̊҇M[r0D$A@q)IZ-AAR#EW6O{eȍ!/n98. !0@Ӈr88́s`U54 ΁9KxbgyTˮ6l #0:\+@lN/)ԡҙ-qY*}- o z`S[ ^8Ʒ,P578LpCj%UXcRpCHo^w/k6m0.Hƻ]+cU >+4߂ۿ;o?h >gym@ k'2< __/6ͱcgݳc雡g.uߨ5":ڑ0ZdMzzC#f 9@V7˹ R@k!: 1id_]0t$z4 OrUr*[uLzdM%,ےi 4R PO?+b&$,^&=(IzH!OI1U֨H =_" ŮBT}qǘwqBט8 jL.HAd)U6D kPb ,RH h[ LmZJi;v9pp ffSA" ׬ ΁9Kh{%®6~ǁ8@pA@@@[cz8 +{ڸk1X7kP ' +I.zu WA&5~+1( ,(q]0qb:O{ ʵ{i*:D4þ'Ҭx=EcìH@BĀw/榇2-Һ\uPa 'v2bS) 4fw?O@oFBSD/ާM lrxRU)g?# W58%Lr.˓Gq6k5\|.OKH/!"i nb`{9"[+᫢VCޚx7ygpR6+kTWu<)VN;2`Ih'ͮs7qNE (aA.rʯsWu5qayxB(80ܸ!~87.B>wѡ!UUa~c)x?ޓ{ !Ąp ́J!;L&>0X&8˪fβbWrۣz1Z!H/hM~>arK 1^܆馐S1-3}G͜=5V;Qś4!0/,KاT>&‰|:>*>/-^9ZE~\W4 _ jIܞ&˴zt>;l PcJ݉) ʝ||ډ{urZ7S (X\fݣNU4Y/PPؖ?$Wwdx%X^'5[Y-a=O񂟇rL= }hާ2x?{X*yiwsqB/m~*P&#.&"ǒD+BpQc=4LmxF2V**&R -⮰@3W~YR+No A:_haMWGSoTSR 8 kSX64"ҽO& $t_|l[WR}&(Hf} x פiedU]lNI^ #vm3f#-Iy޽B<߂jGBx:O$"L 9_fv3=E;878{XH[O Dܸ3PK}I6l8Dj10^LRpC@+E ։apE< Kc q`$yb ǹeg%B7}%¥؞C-d2=#d9SzyICũZ%~YJ'yk(!Gk,h!QQ@3B~U:ʅoy]7|Q>mzSع<=e Б}Gi'@9"kY<#} '_Ne2`n5чA W*oiH0uaY]`^zEJ>V2pyJ*c/y?je䵠tԍ~HktP7fLL(jՓQR;F~Ћb5x~hIrZ=>.}C{+*A%|>V3.)E#ޕQֈ1_]GHESdw"?hKZO&s~ . U@;cص>v%-ϥs b^Wn5i|J9@W0:3&K/rYҬv!bG&鿴m#0TSiOM!,Zy஗B*C g/jGRc Y\8ӟ@+F}NWA[??u~6^8!BP+}6eDyf|lj.VgX=GjYk &BPκ;ve6iE๾MARh_kqs ]1owjDF_S~T\&tu,' b[XopJxފo3#D -a= IN1Wd%p~w`aaooCJվfOUv[r)HߺM3k !}b`#3_˞vaN,@ LCo+%E=ĔյRe |29;բnx.ޝotў&ON٥ïדEC Ve(u[8E,WCu' g;VYlOC{wNPRG5I /h|^P,* 4+LM%yǓaDBDCpXGụtMQg#OctG8#71{ҽ7|4~,\H} HS;$/HDKS5֝~/ #_4szh b')_ϋ|q| :+O7p7j၆A7wVZFX8ߚnrҀ;d0$9`s x,|2zvo|A|/V]ɲn>H\+kw#z8DvN$-. FpWzum8Xa{ugCA6U 5NlX19 |߮4vۋŭ{C1jNyPW}HB45Č.ړk8Zh!ozRmtvr eBeY>BW=.g?wى@t-W>(rbfB'`Hs}hxZ;UƗ 2i1K°0V CC]P{&B:bՆLZ>H/bC.oBpͻ=W[րkCuC(/>Wq80MiR8ƃOH!,u|۞2̇ 3]8BZKeZhL粠urYZzO6}&ԈA +J*S+a f!̻MOn. QKsg|K[XrQ˘'  eU'Pے?JGdssB2>BKL-ԯ#V\jҙYZ56F>pnERsevoi+.*~%gm>>*]]ta7%B/Cb…r;iObClAoz6׉.L"W.{k5aFA=@qMr0IoJV%߰D-Gr@lORyOv0䈵"ҁG`@9  8Ng%d %O$>Cv>l[VGޚRŇߺ'S=Rp=x"|X! ^lf3H'8&5K<P8m+bh/ EC ~=LnhaR~bJ3vNR#c) _/nf-q ?"_KeJHq_xM) sI3GIOr-JhA/g>5ӏ۞+Ic:!5:./`^v7(C'X],Byb #"W ߑy$|\}Ia8Py2"#\CZ{}Ocع,loUP~#RSWsi*>Ixڛ8B8^v/֧+%s_VfW-rHz-} I&,H{?{/ ly@G`a/y@=;8#!Zn \V~ 4=Cʭh?M}? yL6'`_ƁHt# ȷ c}fg41QŚBpY˽c${7<EpF\ AgW -#\< K"?- gV#=z#lwN,@^R@GچPTr?GxI a /Jd@I q\]u9h+B&0A-E-.a;8PP ڟH1117~.ή 9eBCgq%+jy^.jѝf&/f> iLi'iIHTubO`XjqN=P7 pVu\,*LwK`2xB[HZY}. fP|[ <n4ާ\RUpOҮfqM?zUGz2Po}B_UHV {n{p|pNҽ_,U >;`0HUw0/^NlA|۷Y1\%J60ؠ6LH4D-8c85HR+Hnuss{'Q,)oA&Ha82>LQtk\*4!D:7NJ?ds SB7xя`-b I^xB˲3<d{ˁNbo796l8+80L"'םFt~B|~wY*2J'($RTEIM}Qq㮩mM0P4E+9S⃊ӡkD(/?1EV^Ljq}tW MiA=޵# 3뒬Oʸ!g" '^ q{쟧~hr+ZbDPB,vLsGo;9=80U7(_Gp)oró銺 '&{8ƹTk*^!u620D+Cm0ӂ92&h7x-ӺjP4_d?rG9t2(n53OjP͉ۗ%r sd-EBA :]<_<żv1w#18)\鐫2ңF<|s\0Y`(~O!ɑP|0HΚ rx#H-"85 -bfl_I#u| C2MA^_Tɗ(57Y{/WORBϢpW_`MR_d],(žzU ǀ},*-Њwwg"j_ŗ'O4}Xr{ rsVZ^pC ="ĒԧQB{ZMԌ4 +"v9p9yX;]He(C1w{:j[o߳>wV!FMG`R,Ǣp|9`s怜B@`@( AL嵴Vm0jj; v_t?}b}u>9>cP@/~9 #SP 8F<-wb\qdfyPpvQo"vhu!@q]E@yy*Zu`.^M? MDqp<O:BY{w06ski/I[;^jyQS<TQ16GzZt-]8#{.zyWH7:[jDEE=*k^v1_VtL?8E/r 28*o@BΖdt#vj{=hp^hDN<9 AE[:vY`.'DrC\~|R"5i| zi^쯯!2$ufu_OC9!-/Tt#MF3y mpfR1V[IbE־J+p[+}peJ>qTCB~-ؿ  nm0U!坐< "bEDk;&(uB>Cz$(@ϻk`p(QՃ'0e^knwa?45 p"PN WZVmC OΞFM%%_ډ;= W5I%}IvxSX ϔ` #@N $NcϑI6l؃t{ &d63Dj>pGQ{zI<be]Q4QvW9e =abKp6yDettCjD}H2"65q x`vv䳞<㎅F88 QT[( A5"w҄? +jAG1iµEb!i\kLA/C5fY{iw9Rf$_ԻыmGH3(IZ4A/4yVp9fxOp?b yb "5o:31Ge\mfaS͉ 3S%_N&;{z!4xr/>DUPU;nq  BPۗ4MwKRGO} irSVy8 ~}ɘ(FCEyjXZR_N 78@"rG:E ϫ}Ҥds:fK[E%"4!7G7vmr1&v䟷'Ae8opv_+\Z8;@+3~7)jpapVNJ?#b>&´Bw1Vn@3 Ex-נL}?~_@GpI`R3k# p?w<n&phM%́ˁ#w0 Џ=kD_Dc S~ CJqL&`[@9AP;9`sȁz*[A,⿦p-DsH8ٛ9c*x]1zg ,06½sWxr}x^_#0Bffq|9h}sSx_Hc3AK;o4A;^T nQCO%5VB~/Q@&PL03 JW9nwxĿZ(Lk,I)ca>g{P&1HHb툻ɨ< bί&u1,Ҥ+\H D`!a COJzhO܉zOlKoA =[}|ޞދ"* JQ( ^P,"R`Ċ"  $!~؞?ʝ'9ٙsΜ9#{C!nա(c2q*\ Q\7R %5nΐƎֆ]04=qii~S[ã=,)b9>.gXx<ҔA噷LB:joUE3,S*Ũ c=  UKfefNt '"ט|NӯHNz_E=/ˌPm*ӽE0q!i?=F0B,UU=cKXI~p:kf]C !4 }N5 c9r7ٲ{yy w<#z>/%gO~uqÏ Deճ/C= 8!}//r@M 뷭?gj,F3;x׽Bxfwa&IQIJ81prn$yԯ_|/z+@q?~L7Tp֊Z_u'DDHQDW@Ѯ #^@ږ.6umʁ˴!`ա0l @ro\ҹ 3#ݡ>\q^Cɞ;G W Pz9♸k# `K= f&fiᪿStHȵ>mϸU?&n%Q#,vV(Jm$[lw|3hA/9цY26U 2Ғⓟ ̵6Kyj]_RTAoAQyrSy]OjFyљm3{Aͪh2C̾'ͳ qϡUuxoF*jnl93%T u/ nK2!UTTK+G0JR^K3l CzlgFݠ^Gxjm.~3A;6e حa\CDGbϵl!^WNBvmRogMi԰|@D@{l(g~k,;1C޳(jϭ26޺Jg|#\ `A{ûMciןS8#0˄(rFwv +X Uc4u=Xdg ο-R19P؍ Bn G,' (`廓KN}.]PAhZLU16 :W}úכk@?/pVDe: !O8o-|k'^ {2΁8oDȤL%xr,ǎ\ =|da,\@z'-65VK1ÁyV]j,r@ 7ob⎂+{ 1Ӽi775fzBޏǚ x AGWYܺk֩:S  #cXS:1x% Yղ ; y9 /%61?|Sޟ uiČ|6ɤ z_WO&{,)WۏQTfi6wOxaZ*0Ebdo2ί8ې6a8M@a/ 3:LrАDk *iΘB2W1ο]s˰(8 zS޼0dgLvU7ȍUtb,hթFFsymwFZZ`!1b߼֊DʇVc Q,3˙ώ~l/RA"-qknpoM'~ 4bdZG|vyvUM"[(xs/p!\AV+lKVY ^JLR.g3̪Me` /S"Ŋ~A>}xVs֟?%*a%p}:#n@^tq9ps ZhG}r7CJ{h_*X}R2 xM q0>A+aws[5/Tiec829cwaq)BPd3Oeu/NBQ.(K$!P+F ^u%bߚ}+(<:hnI^EPȏKà}Ξaf vvX_3IאzEBRҊf7FOQ$*ycs'sA3?)Q61XJw4H$1FXC1Z,N,WGO=ο=ISgH*a [3+AaZFhhe{Mr9˗i}+kdYq[a T~8\?E^aQIlQr*Ò#7[Y?$(8):Z u'= \|{ZCۀ#35M7x" F>"X(u'd(TODBҵr/Y0/Bu5k'$JGEJJO%M#AK^7t RЫ ¶ ӾJxx^Oqy ld\"_iGN/Ѿ.X5hti[s׸+ʙ3 y?1~D@}uȻߞ}k@* TK>X~rbN BV!| [7@7CJbCp[( :  *b4N8LWC05˳'4(f'<ay|K3gx $eUHȩ.?ؘc 19M?B1,xrw&G@ЙJ@YE@W yxC>y~FVم<)Zb3sb&(@!&5+ts+<%^s(b9 jxpSRaS'T?9[(kaGUb̀ r٘ = N\AN1!Bޮ=4Ha *h:VSߙFIhHݍa~j60>o[>sq,} >gx]:M^RcPG7^uv9#"`y6H?8scd b o o6U~==eos~ N/eodRqaUDߏ1Hfq4 l8nNy0jm.{G1L%{Cq~S WU)ve:_7N:n'! D`nxPeKiBFLWz-\@tƾ?@P\>aW8F`ӆ|3mP4{(ǟ(戟ҩB@p\K`&"Т{x?a~*$ -U{i5ؚ<"ғ4F 0Po6%ǫX H@Qc%jPU(.&NPȚD`ƿKv6#f3pYa]-YR\s;e^Tb׍Mh7;c GC w_. }. ī@q9C`DE Xx \|`?!ȭ%IV7nwwo/Tkw;1Əṵ#CPVm@]o<30&"&͍4P}P{.QMzeެȥ=B5~ EoGޕEPAۃP0PlIh)zhD#7piE`j F \WRB ;B$(46^eMWfؑBݫ}0!zT0xoƕ&:w޷r‘Y/a#'ҋcq0}5܉h7p :~_XϜ E ?*= |s$~@jbd@IDAT΁+7qx%N *vDW*+䗌E;8У,%/hޙg.dn0dy@N` vEmpt0>Qq9ps̈" (Տ?jA1/ S"fNbuAe#2UwjRh' 7zkB./"!I4 b;R |T& &SLޕqnymw/ዢ ڙP` 3.P$g|n& c:g_M`.6/"<Z!|Y_.^ӿ+ @2Q%z E-J?'rɵ‰LkS`hHXҋ4JzPB֑Jq 53W06VeWRWR]^-:VsN$ivrit*h7ڤo"kH >f? 0.Hܖ$F-|s؞0\D`;$Fy'T1.qw1MK*Tbß|QԊlAy:f@_ɾx-*xB]DV t4Y˟;2E 9Zk@C4h3W)[bۻ:DX 01(&|F3C}@u- ult!7i.itw}Ң7cAp1k{6zxv#H`7mLPs&9)xs@Wl }߱?¯P-myhGS~lCKSv>=ry;%'C6k Bأ#qr'oQUmCU<9@q(>xW .LTnc1#8`BPb4蝖ZgϘ}ɐ/::ti+oCLS J Kb\\p*ݦI>kwis( N*X< [Hyyㄢdvm =)er,G- +`>,wwB0i6uuo_ 0qّ}@ӆlF B|MJ7:+qcE[B K~|, pm񯪤GZ4CqiՒW:(ZZVх RP!Ds+)LC%cRmZ_p[kRzNk.(/rV!hHs_W i㻉4)KQ7/Gq=7j ^oӚ%>qGi05\?H(FNҊvͥv?-Rӵ) o"hOQ}?JW\lUB.hogRq!S?Q6ေg˙hX l̅:1|U'F] 'L(O&=FF%=N(ZV9T;sK2fEBvcǣ){bBBt:MC+N8..cE򏽆BЇvzm_[F鱉xm ;cpeեQkTs3/;O7/6^888rg)ķiMԅ mv\)L]! !GI|(O9t\RGd!f5^J! p ƌv K!-u?j?tJNkv }W{[1r~?f.=s3pqSD:7Ex- krx#O9si޷@Za1Q%T+T K?>$pI`;@` Ng$p' 6Hx?a|bYE`M<b/ZI%yAolAjmڿl*%0(LƈH[HpgʕJDxz}2S{4F.SlH _'M\e*24`w; dR%8~gapޠ<6NX 6~59X=Q9Ax>2 A{fW1Oh}TrgF8jq qܸUgPUlJܪJw"bV Ԃ?mE hPLT*(DcEވ{)sLZ[l2D:zZxuR#0"IOT]D9(ўv ,: &T قq-!k.WO3b"d+a{,eo߽}ݼs=0m߹ԁe=VإP+0(mLXg.x{#pn)BŸhdJ-c3|g@p芧8s ΁9Rq/D'DŊ"8 h1Yk5P,dl?w%} ݑ˅"PMTߣW7z{H"lñWB7BnԊ&E}Ė>P~|~ǁeIt^mb*Pֆ ~^!iJMf! ^A) !āk eM C L=. ^MŊ;A<OO zG P$N4 )o `~C~EBHK>PAQ2$6bO)Uv290kIѠ97aMaO<(GzR R}NmbThF\f  >T5h'H8^Qb cbV4KYcCn-bg#Yb b ~N7o #_T$wf!#wzF)6Xj6y'3ˑN!ܶPԧ .c:Coc<1d@3 d D$YAP$SB4)C@ xd;,ib5Ťk'deUZCl2| IP[*vu[ ^O ZcBo%КGx޻x:?9UOxff}wށ%p|OڶОWq ˎuDwL|rL|+VE?=־f;uO* !W?bous ΁8>` c Ō}W58k Wa ~QiԾ~?>Ace;_' 3fV&-='MoC0<"Se"<(1y܀GD((׌ƃR{ڧ,Q{Է"r%遣hOsC@bGNZfThgE `L ,| +7{XP+fMh5r v@PrY; Go)gS_<]H&4%yvU-B>C :DwȽ1UUmr=CL&TqLS԰]֬UH'ڽv] Vb!א俴C]7]on@b <>X6@/kO[ Ĭ h;C"Ns\w`vq@;vw3gD/t sfv2KfV9ޣKOP+wo"izm$z0%p$?=Oq9@$B2؆AɎ? E*GZ-N:v@.MC!8xBoЄŖ}ٶr&VT<'Y6=yzPφZZZ6O0{]fDe' .}(9 c[E?cIωc uJaۣ3gH͉LRQі} D`:ǿ1i+4R( diὐc.-6ۙu'7Ʋ_. &6!hbnQ4^|vu 0 U7ꗀ!yZ7l.Ud14KRm<=08CGZMETc"kA+cZA9/orRLWq~=Ljp8RyEȝ(oĖtI_ #་4|0eI+Q7Y6ft_ g q@ v&`;DX@n Quj@ ٭CPL VRʒ>(=l[2>ל3[%jh<=B:]2$31&zXy':!@j^T|8; "_f~#%q=FjdԻ,T;oKҬH}ÝH |7H7t]PwuR:L@MXE* EL#be 3_P/%P#$0"P~l>:WzĭC1|#B4'r% uWGxn|y5Zh-xj%57toT7̧Dsޤ[2"sidE~T J>s3N6&LQƝ;lLBVZӜ w1ؕ)Osz!= 0j,W3h,9(G޻0z M즇}A(y2BkКfM3QBL.I&,HS?qEj匿֏2'ο/dE1H=ڿ0෪l̇&08]G|GHMѭ !~XG IѺ3Jfatp@#* {~ucĔ/`ZTrI֧$|Ex`dVp+S#qzKG*>=n$P) ۉ߻8Sq9ÝHTh<1`7Pk^O4/qyfӢ1hV9\#b\.:â\gbFFb0Bda_du ՜y8CT'!{;0w*ّC} k x+ U %CŋiRӴ=Ǽ+T59㧚! SwֿnBp*h`P'R nhاVx>;_ b fC1!7 L0w X(pt}ϲo3k$mhb}p N(no oa˹pć5n[BvחmAsGU%=`4y̗@Ռ4%}#Hn҄6 'c*zT?ɖ E=R2oavǻy:I<9I7'-$_n+ #EICtr +],c [#p7=]q7KA~YbT1x̻Pg,JEiEwaҼ(.R"j;GJZ:%G2U(hEgrw /I7+RftM,3 bۧFHwIhoB4X(jߘғ4m ƫXv[0)h6!6$sVeņEӹǁ"Кn"OOm|vSkL\ 9*4=&2/~%Ft|QIjyx)o[N}nv'A?m/'`AUf ~{W 9@wpKds؊ɰlh pwa9 %rԕh-C>`[Yg  ȵR=k)12jbI@9ļQ 9(h7Gh-(Z]_kŸs$'T}~ [bK*(VpL)A˕u->BDg? Te>0ܣTgI0@@DᯘA9§  1Ї U 1?QQF"x(x X>F)B ̈&P!WI{@ Lu9w"hdO(reC0KKY T5ML~Ͳe[\uir{o%Cl&=c/oq~xڏx[qubѨsaUb'ibogҽ_"d(w/[EY*XpӜyq1cD E.?կkh9#耔%4tzz9`q%$- Qݿܘ$yIn!=>MS{~N)!n皾f\A@ml6STWQɲx:8[8ѩZBMexyN<ė=@Z\ 5R^j釰f= mލ42Da*RƐ+W3Qz5,izGykS\6epӝ,<0w;stێnՖf 'nޖ`ytNr  `| {'Q΅Z`w8ΕǬMaLN+5ۺvDdy.1.8S毓l,vV,!D!K0~]^uW1΁8879P\myσ`:,߫rf'282AꎼtdEEꚩAqrBX(/@濩`AE~n1ʤGylC} ]G )˃b,8ppJ\_%])n%湦7vSVt|0/癠],仨LXzcR@ӦN%Z;N q3>竈YDdXtooG@p0d"0_w=3 \PJ:i!|G hS}įU20P8em$tN8'iV\pHYWTc0 $^u b[\n 2̶;:'Dh#N7"54&ʄ~DEnh[ m_"tOI~4"8&ߋ09>E74ux&#sjǧb>k 'lj1aG^IJ%M(Iy4g߷&3|q  ̣CkZJRۡ8mihTA`Jnb|WNbwFGhM0 -%/Z%}~6¼2uh8h s|P ZF y N~FY`~]dRPbƊHanShw(hrS=Vii)k,/ٞ@U6|}Qp>nڞ=0AEEJFЮW8;c[@֟@@ ##ph7k3CV`<+y:(ZI0ի{6h{0LXmAp>vcUBkM<'Kb_N8 l^9.^'p (xs ΁889P5(@@0:Dxy*"Pf wݻ.\;Ṉ„k,휕-0߸贙rn~fj`Mt?eӻ!R4T@.@)g#3vczKYOݯ b-A֠yfd C,\{zo \eNREw錺&=l5u݃HFSRϥIHvKZHSo#5FEFX3_4u5h=@rj !Ef ix|SNpVSPpsM}$z#p "hO*c%oe5JMi$P \uOkMt=%Gv;5SovAAIOfo5bzA86m.XjC~.tAzj3bY:?5p4kUloKNO%@al( +H)Gz0o6+*Պvq6k0]9J)0iԽ/#/#M9֑f|3KO丆|ܐڃd~CnR"glmdh>kͮt䷲7;k9~L<3c&J>УZ7NM8ӜZ]$3Љ蠙E*wȫH ~̛}E=<28PF]QN 3V Hy/i-|ǐ-,W+Q?h{##]p現 >fq*(u(AbwarVKв[%Y3ȷS*N@;(_3.wI֒#>U`P{_cM YdTWtbCU(f\R(gQlys9@q́!ܯO@ jN@})M<ͬس4fWB[Ŋ=q- ͕ ^v:B-ɭUq<f +,IzM%fk]1І12P 1(\kiv7ݒۘkZ5lM [4@2yAoב!s )< C%.@̲@5OUIm)uޗ4im&i+&YfW"=m#=2ZTX &r}M3*7DU4e*)"#|0SFl\7|/U_G *kjƩE%,'<e273ه ⺣6Ƈu `.G8׏Q`t6pA{h1?!`v㨶;7zMJ|r(h'W2DEنs ʙڋ@IZxs ΁1P*! c>- "f(ONB@ ue^Td+VMogWźIcFjӢmA_$WUrrZjH{ q_j6-V{#PXRfQ۪ݧXpxIU™ XD ,mIˣ36\Gy}<%DTȷ3qsQ"G3w| *̃1 .OkD8)`V ϚW*^re{#.(H8lKú9% `lC%GYQ)+-Y㝴Zlir8 `Ʒmʓ眡Walvl'ɥa⭹v8پz2[g/!ϤT{E[J 'Qc$AZ@ Ҡ8I*|aؘ|}ᲭLUl-| 4f1<$P"R;<\r6A<1**lnat:6B?wLljl3iA^LLpy+`9lXyq;9J&`l_f߇"nɧ(ĻXzᏣ'4Дȝ w[:0o5{ p䑢'?«Oa|­6Ch;̋1@t lT  Wn{ko&}7ǼoN*JF.݉kN a8B5 n#b.R`?䀩f83&^ HcWd&b:lig6JѸV_{vvl=h4Su+-k~e_l-4*h/U8N=H`4M]f:n6^rq98P>SJG֎~Y!02fv**p`EEI mOc xm G2uWn6SkyLC.~ pA$ nԴ-/iP =W̺ .*ثF5ST \"ؚIr%pXh"cP f4_ {HE)pɗZvi2O"3v܎]Re83o)m{O+pͱ1 ҆ hlף؀hxnȕ`_pL.%nc_KӊXűJasfs'ꕴ;IJB|y ]Ӫfݭ&5q gs`=B%-Z0y 453[I-'IË}J*;f- )hx楽L̐TGvw\miȴBi.K90Z!G^,p8b9V=ȷ`-^2߾ٛh_5{mv~n Mp<. ^kw8QCxR@q9ps b;(LO]fBYϸgM>T+k 5% &'^ @Q}w/uDR {zp;),hjOwBTdJ7x iV@W )D`/)`Hhhа`#DΗ2 z@xI~l1o| a<. [RY0uSNUfֆ *VWsk-~Rk?c^\gz$}xCC)ji ]QP}5Ψ# EAp|'yM i'@ݏ:zg#,L+ڃswl˓r# ofh {yJߓXZjhAY$blQ}g+f^k;,5WW<%`^WA&^$%_h* ʀqsu~Bj}!:%݇LʴdJ4y#~F"٘Z!}Q U=#q3s?haў֭\wzhܲ~|=3s1.U_ب qZˍf?Xx] _Ǣ5m;<5޷[Ѹ_mG=I xsH00 !mF|^]Dyf`L8s ΁tl I\B)_^B)u/KHZ} qQ9Ԛ#0tؐ 1r=iRw;4wV-ٱjQs I +V}:ǹ?LiuzB&cS!|y4Y 56 3Z߰Y%Q^ ׾qdabXdr랑^9U?:*=B+A+~4L:[#]yܦFc&i 'VRícj7C5iaRNg"[|UwMc7/s 7!X){ĥP\\ήi,/ҀBwέ r3"FJ ]h.[anQ%-&KD_ GҊPy(jܿ1rH|z)NѪ`R{FEzDYdbN]sL$W:;[_DpǙGFl~Eb9366U͘ =]'7H--&!YA(asM7"zRNMDҟ )Å^_w2 "\K=a seR+1nb{Oᴠ֋s|ڬ)-u>xܘ P*)W`$͸V.QԷqlXtD8'Wzԗ2=F]ʓ8s9- IS';MЭ?4˭2T$U(ęyx4`HoR_ͤaڤ&(-kJ١،`Tr@p-~TW4*vy+B06w[ΊQG_!#?("6S#hԚpK D@ `Yk9B|sYߢl;}phe,t}9t_0ߏ^ʠ5eVgDdy OacmtWYn5sM, NSХ?^ ?΁889ݜA׶Ƅ^ 0Os`ԏvc|=)ȷ:E!Y  8.yeE +- =ҙ؉ְ s0t )sLgrb0!7a+4D͊µ.ye=l$c0b+ ӤםaE!B5fW4}1qQl4hVlT [bvv\,ˆ5B,c;*ɳ9ds(QD3J (`QQɂD $ses<3zO}7]ݚ-zzp a?ʷZ",pΛK q|HD`c[˜I K-Bñ7]QmA f:(B"& B w_ hi/6?o'Y6E^ڴ N#Q'nowFS&ئgԡ r_nl/`7E5~K 5Ƣb 2'3e" mQ=>Q?X'uxmvǴUG0/^Z5r26*w h_Eiq9Ρ4WY{bPap\m+=Zqv(j JfP޽ZmKKj=/ڰ"_/jނ[2U{_&l(O C붠;++$jXҧ PJZj~eO%FuA{>p P|71&{\'\)FoiAtPHa?n(ີP BQP+!x QB?\<0#T.Sˠ t}VDYZѶiR> Uod"B'P5W_2.ђ^ΎPwtQ>Tژv#ʉNUA%szb; SfnjRS]{|IQ}`C<+w}_zU{bLj 88'k?'zqJj/I(!ԢFwH$'CBa+\[F>[@3`Jĕ{8 Skp DH nxKQ\,3(¯(WƉڠU qAW6_lnQhup` p,6u?8#>pNϻJ)YO`bڝJduXFMaGk )HH&aO/QSjr}¹W\{ g4t4׎ۻy}o#`` zt}կAOP<' 7-@$7#&NSbkb} 0S͠W:Y-b-S~5+'&l t[aEΤB9x$_?^w\q_k% /C0$@ۃ$P @h Fm{y{M7 "F|c }˞*;Pkgw>oXkP0nXkIS2Y2ֳ8YWm*Y}1p/Y0O\Vv!<&ޟȜ0oS!R2֖ԁnUq䓮q2^!l"֠x|)=] _ b0Z︟]^Y bҪ}t߀ YL"(HvH\ Ⱦؑ͢Wȃ+G.O !2$a.v D(H%GݚoD;7C6Kp\Ԏ@>o.f("0Ġu'Yp<\E| ʻV-J.5&4ϒX[,-|6 h 0Ws)9yN #:}wzG|])<^f"+d@Q"_E\O؂~]t9UA.O{t92j>WLlFR(hZBv0]sӄ*Nv;0@C˩YLؾλp*0kgҡC)>X|̫ ~Q20^_v6{X)g @ ;pګn6Jۏx:c>"b#*o6 p[W "c@wkd7nؙg*)Ɵ6v߄~vkmeE6P.,_#+RbͥQwBH!hԷ {aN/).TZ\qoAij`FOv&n@{"o(0 1?P @'Ak 9:@#@S4/Y:} Asñ-7&h=t'IN((G:)ĺ =|Px& ubv4 0l/띠hR4P )bMڏ5C.0@?\1eT\S7(tI+ A!&V" |c h=4t^ߚUJ ,'RSJKg| TKqޑ#}%-X"CC9xErdb.p /6A #tKAo(|sP:h䊵 +C<-TzF&L#2?l.5斨%og(?u@>k/Lvձ(%w'])Wƣ"U$G(^]-N_=13~܄LlWSku$^SzMhFLc"m]60(>q8|`X%aɁD0مMKQP40_O}p/)#gTÚ0kAQ^F(9C7&c;'.`|24,199hc2N(һkvJuQaI AR-37=Fwv;Ym);,VK?J\݄q d dŐPgC< ;/ x:;}ηa7>>8yfQ\5}?R -#k\Am\@@ (Sp [^47W@3 ؤ!(6Q& +;I0s:?D- ~6ź.5c-~mB@cxd=9]^pv W+q {7,PgՕ.)1 N>.(tPő"&]3j3RGس`-I=fw&;\Ib|ň ax4&웨 ^/7b:1~k&4HL4=3\ൔ^+4.b3|r(Ԏ2;觨rJd\ODL~^`A=Za߃PCxsK*85QOb=)RI}`^D=YIFF|+` ?-%&ΗcR%tcFL=+2T%ֵ2)ޓ`ysOɏQ/1wOqLPjBrX w=OT3K7P Ǎ#_AQ5PwX"F}}ֽb,W3FqxS5ZXIEFA|請`JiE'uL}(@qoU|UbiPȤ!^7aTS~<Kޏ|)s;LS[ԁXs#ޚ*- } .VEOEeAAzJ)# .. Yؤ0aauCvtiO!7/(hiO~uzZ|(1eKM__9rdБ.pqnC<h)qIifhOeٌ0Z֮h]wK2(|䴰&4U,Upӫża [.=ۅ:bɎد#L$ ߜ'́ß)* P @'8Z0\\'(&, 7@]F11 A EΕs5MwGͯ@bɸZm 2:$]:YawMxێ;|]!O!Kq쯜!qMٺÛj @,A@7B&ޔo'~~ 563D>s=/?o 8f :3@XJK_ҶX1Yheb@?^Ky%/4vϡI i%7ƁJ}:\ns[B [Kb_q@7(w| y!绳hQjx®}8<݇rc$krg 3޴QN8B'wQ0:G~(-!6ޤ/*-!'z"u3Pt{C2/;som{ř?o>E ̔KVhSx)h_Jkk2w+`^'?$a|8_N{eCбob 4fLøtK.ۦmG}8"0|S;e"M1i8Wf(e'6ܚ%_F+؇Lh D:Iw X`=\N{k뫅/oť=?DztA=  GPISoK /8nJ#J/: {ެ kcoE=vb/EC=桠2X˖ww͈`` > TS2hFґZ(J3yp͋aӺ۠=rY_n *ˍ=;Fέ$D&}%bIS26W$2̼s|իt@W\bpLVXGtT?L"hy@$T|R0D'$!bC(? O 7v#|}u$$ )Q3Xб-%B\|$>ez(TZP]_I܇}ه.b(#Pew±AҨJe5M9ѵwk ?OԾB7C7q~ACu#GB|ܪj2i 5Q mswVκ?WM8K3{hB7ǂ#~,3V=%)<hJ~ZJ>< 'rJk!mgwP|b^fOXYI>V ayxlAxE!/3bZmnl{Sd2tFA'E ~VzHH+X@9xZR!T]p:MWߔJOb`= 6"G෢9U"h{쁂m{%&|~ w,ɷAeR +j]Q2 w&^6aR" %'ayHf;=:V*lxRzH| ]_wK*O!| 3"A񝸘/o/>v!>`{qxk@ ພA>B {Aqu~&_߮\ y|S>̼TV ~Ωc SޙϠ狟:]r]q B,R䌄N-Q4/k ~W\2XRY~[EFNԎ v4ҁH0WqQ؎{ae{ ׇOaQ ZG7 OwJi@B"т?(@]G (@ )P\G0vMGE` 57K}?6%2 +q[ k>:I.}u+W0#zQQwZ7#91%C``]8A"IL0H0Kz%ňWIpQ=JQlCq꠨Vd y7b9|} vmVb9!* &H=()entt| }%T!pTM1"C :(O5D$ꅬ[.XUt<\ݚݟI*41ja# {YwPyWC(}f$E8om/i_; r䧗.TUX{J@$pV>0 ꤂|σB?(MP衹([Pf?P=THlpO/*6j=#>eB_܋$LɯbLlkk_T?^, ,ሰ*pq!vॱI*_p>RVҌt|c+NυxqZhWu#Nlh/؍DyN0F]WG@P:Dj`P}k O Z#uXf70U]Ҡ|+mNg<Y*04|ʩ)P2BM#'n8 0Fx(5D3 ䷿{-P/@Gf{[?iu:L[,|$7>C\(VAޏ; Cg Mp?4Z^7G e.QA1N' TE$ K^>d@D.⃰V2 /.1bg) Xc"v?9w 96gu@ (@Dj \V@{gv䅀xk>ئt,F 14o`@pAI)G ģfe7Uƌ["ZZdO^ r1^f {mD.$?@cUKE'bC_13@PY|Wsj/'DMJ"A|`*běa]i)Rf"!0VicQV;k~h(z = ° hw2{;lZ_ݙsg%,ד4?lE>ޗ'5RVڞ%ږptIZ VC(x)䪫ǾĊn=Ħ[Q⯇!PIEEzc"eUyU]UݎO/ <=盶y5s2P։^)|1#~KiFؽ)8ֳ_|$Vx(U\F"M=uTEB&Vmp+1(ǂ7U0#]ctA0eE~{ ()p7v(>BH}5^P_) Bg@lT!Z`D%_9H0,_섚rׯ#& 32??.CPk\,8yA3MFE!)kߤE56+ ƥ2Ɓ;AoWPʞ܃&[T){_t36~_ӱYmyQp֯GjY@mM tks"wٽoPM?h6(}+!B*U:ǿe T:IgD֑S;y*Ml [(œ9pms:b"0ǾQy0H b0]ڱfL"`]C ςř+\Nn)ZY`tH_6z+5r=sl&՛A1ޔ;( (կ֏0 DAil_9 ʇ+Nm~G F"B-RȓG|CN%-M*:4d)y;q6Y,:+qw0 @&}("P @w$ j@gbPPh1,.ɇXuhB>+%sPD1Ak,)@ѹ}HL˻X*J,Hȷy a{WL1!s`Mm&4QQ>Cz } z> I%w ˵-2~Ob%U7A ]:T'w#akGrL Fs::>PH B4,I_IE>.7:F_&\QåDŽ}#9z[v:_wԴ\po}1!S@ =ɅMmڹPjJ-@! ~=5iN(s&@LU0-O<КKokEo=.ߔJT/{ (M0O5pjt~ļL_ݢȤzI}9R-fiC"-C?>%I-Jx/=t>L+πY՝%Su^º tEq5(tL5书hBI7 4Рzx´@quv7Wiי)\;\:-^3|ۼ޾^''FY}a/7-YaEIsGvC)\v?ݾLCr @7[N<W~D-&$(D؍@-f@ ` zQWO/i)H1dxcuVOuXb;P>yɡ©q%)Am2WpbQ s>Tn]K 1Ս}eT!*5u~K&ɩ b$$}=O?0 ! A@} PP @"zN&$q)UTW>ףɵ/cSraFD+3z}CM /n 0-_} ̋Op< fLytմ"]<5qa@#u!x@N3t}S)qZzK m+jr[{Pl2~ G(h/TljLQAPxSq-qBHnM;B$窅pu HXô)][KS6HC] M MAWfO#c%aDAغ[>h[ʬ}'dq/%EMб㬗2;p?;pG@l lxw oP}4jcsʙf6&)LJ}e7<x_d[|Pe3(PL%o1Sxykq7`^ ʆ|*c&s@թp3qۮOl#b5e g_@*$Hj"=I7D;|JQQ_꣑GCq)L:u|X{Ǜ@F|C9]7C*B= u5T4 {tۉVyP~IFc[w]OUЩZk|^[ӡxt am*+a!(A7I ~MT3jXL_Im^A;bC< Ò k{keK]hO쵠>9? |x#*ˁ>Rc+8j=t G|<1 7KRXg[ .χ!qQP؜q L ?'3F"?\\P @x) %@#bޑt{P+ݭɳs <^?A`=c:.~u~*%!\[ g43-O]Lb.DNޑݘRpC Z?V+V(0+ !3co EˤH_:spZ{``+ ̅Yo:ol.o"qDX7M:KB@ i6'> 'E5D?8aB:@3 Ƅsy !C׼χ@94)BC8(>h1L†ryجI;V\S)'~!+㺘 gcۧs>> ͡ڐH ._NP:8<}@a.+XYOA+mPԕJLOl+rtkc^f+vWQ洖L "FJ.n,@ TuΆ"y.s~WqTT)kRjyBuA33|-f/[gIk;c8#VDD]bk!_эz1N"zIB@vm__= `$_&#_4&j!8~?gGA_ʷv-] 0_&0~Nz5q.^z^·1AqR'3&C7e[_hptaLѺZ*H)ÙI[}HwcuGX Ǧi%1AV/$jWu\ȸRE,S t(kf=mY&}4, ]o͂TGDc?0q' /\G)%+lުPF'~ s;ƿF1!,i úiG'@,.AA+@eO~uwPWx;Wot'?d>6w;;-PМbwZ\hW9&O_94/a/jV;Ply#+|7 6(=_ZZ-"[w2 Lhe_/=TzjY NIq ?kC!CFu7A8 EƛZSNf$zvcץL\wv{dB*E5/X" K6G[PxB/]0,G"4P{ T[d +0$-Qm#qOgqC{W*,Y'3r+ˇ︘e319SySe/3wۺA'O%K@97C-;cifT,gZ>:3a=jo9APx[/&_#uPFCfgeV\.`4ų婙F+gw8 GK)0TL$"[a0X% " _? S?2G<Z a|YkI#k uZO`J܏,^+ F;8,>۫x O?U[ M C޻i| aY{̍rqM*2ȉrk m_Q  ?@ (dR@iJ,c_^!`l!#y/7XKTrLWRߚQx 9ZZ?]_4=c+ܙL}-f\Dz[@{Cb'2.0&=~S&A,f0_+GAg`(~c7D:B?mE=B~0!>@HQ,v{uyi̥Iw ,+e7]ENZu/vJ=R,=_i_=g ŤX[ylxQ6qB !g+^':M z(e!f ' R\p NYvF_ T yw| e/@A`7%P4Xt 3×o-"7x3qZvDPkcկ|gѨv(GEQ9HAJ>~ 里4l%| kl"SKPp'-B2HV9kC p? 3." 7>4 c{ {tuչ+C gTz۫reύM?k2AJ)dh+r\F&Oէ^ )[6|*xki)OA4a4~m!݄wi}}`9f^7?% z|OJ1 ]] jiq8bK%nKE/C/%a|м(64J<(@iK|'@{2ϷxxIh\K3_j9yv * Mϫ|ZOE5+À*(n @7,] #}K4Z6 _S+;W&:@LǥVy.5C;抴4a 2Z5;X"? `lgE$(;xP @'R3(!܏@nCw55v319wĩ-gA` +6#uC/1UOW??77xK;C(|M{aXNNkD DђHVN[m̖e2 4Ap_$;qN(X$|z"H`@8 bA麏 K'$&@YpE؜xI RLP10f@6J,P^U _՟$l٪@QZza'a1?ytN85)?o:wtR-2%(y xnX|MRo?F7AG]6^y }}HʊM]movAɐuuG}r@^@\m~(ϯ2 w8 du2xo . vOWO|a>c.ΏZ9p_,w>9qʇPoxr A3ꗤ( ^TJ`Bi!^@3 gL RZ?8pv|_@v"6)7?w3w1o+)CvqGZae뒡CrH3+o,cGblrN.9ۋN]oH{>iPǝ dR g@IDATci7p3| wiLNm+T.މv~g+)YEߚI~{:Lwwk1@NW^' <nsz^SL1b#tix/ցDuB( Gtto}-umo|# I=zIxAsd XJ#s_VP/xS 6`}w=J!>CIX(v'{[*MX^xSVaGS@Bҋ60>`fe@.aeC CXE@l&@{N,+l/jc8Q0SKG;͋#MZr$ D."zT|*cWݕ`;1PۊhiOeZj5 l*fGWv[U;G*֥`|)&@лXwЬPt<ިۜIjec[@v%Õ߁O[Z &Ik|G@{ↂ g E p@|xO)kL2}ih2--ՖP/#m/0IR900ͥ] 9oaEҶvL{ؼeOa =_Ds< , 1~Po#Tʿe %h)t>j9Ԓpڼq(Uդ=yW[|CO۸I=0X#9[|sXj`` ׬ R;Ӯ y@ru+M.`.RП , )&A2 b@&H (@E K' 8Jq5g LT} rzIM*>Q43$s'.6ɏD,ID0"OE dnXC\5k߾X?'vz3kH/vN  o|=Q6+cILACJ[Lz U)s@w}Л=| Av3Edi>JE L;dn$ D cM~0\!"7.EqRÙX-Mǭ!woZ7gBs)Mnu/j@2|yٴfWT]@'&}Z5R"/7@ڗڂv|H A^b'vP%Jv'{gŌdՕ6_O7j 1uJcRnPr rBU?{>5ݶzaB8r3f7Zz]f+=;=[K *Ķ3 E7ΑŸ'6 ? EV ==žzw opAˤ(_g?yݻ֚+OAhydj55z!0[8F,WfhTƲ+f@?= )`5fiQ7ğuZoWIZB & S_zja;PpW( GM#yW)[I%lɁ+FT҄~_8:L>y)_5: k>a6X;-Yso@O(ۄv/v4%g@{jyaD!ӁI_\G)'>Cg}T鐑]Z qܧe&')y IXְሶvSv[-|fW7XXPX&e]g+"H^D{8.gݛO @30m@9 @!O9j8#tJt. p;E#i 59`Fz$FCG^Sg&Dn) z<#wpZfGvU0-O$~)<`-jNH` jZz!A^<>c}dKՅ1`@ZoBB3(r@OkK24=3R!/i|/O=hiHu'INѤ'9$f_(uZlI| OA={A 5nLƒ0(sae6?Jioǚu ~Cs$}.V ?_j1nԃ| .#lX=V_/-cĚ﫬=E0saQG>;WÇ96UQ@-9Csdn@agB7L+$n+e_]F~"Чfߚwfeß@c`+IPx7#@PDK3  (@ 8Hg9ya2e~pr:CWC⇊6@2P$ Qfou,Qk[QV@4i Q~"v$@1t"Rxhxwj+KV-]cg+Kue\l@uIrstKN#+Z {IJ_o Տ!-eD:KZ*9&W-!gJ7jid#J'$Mқ`Õ؃d擷HZm>(6n'հ]Ӆp;z˨٩w]|4ioFI]zC*iE!mF`$9o๷dl7\k=z'Gd^|SkE㓾6 I:룞BWojT%@H! hs%_"`zF@M{'и0,&WC{ kg;xԲO7~L@hN;O  <<|"9xOM\ kNEyI} Ē/ e:=5[Ifԣ}mq]SX֦-n/}]'~9.c<%-z! Bs rrQ\{E0,R@-h/TÎiDZ " :5w6D.roh5%.HJAFq>dH[R@Bi4SBqA'4Bĝ>`#`F>'o%NJ"Vg((EaJx> {4q:z^=4|*)̾/])@J)O8oRFqMM7+Og$́Ug+D=H@ UE_(p󎙀q#%䟭Ԣr@ :M̼fw.:#@UI AэH}ɬU86]EfH &3KzK9xresOntmux6C}lJ* OW?{ f%|ĄYAܟ}Ky|y,@\?WFPw{zia,r;A?'; 3}O:ނdݶ_ z<ѿ= *>C nW).ZEx+dv4Gv0..IJM0\EMxEC5?Ol厁yfk)B @i489!n4i;/^A/-.+L>/d_&|\-nq$*sg:6{Y 3P~]D#`Iwu񬗧o]("v'>&ۻbE oٶo)鵌^F4xJsm*WJhb;mgBAh\Uj'hO^LvW;Bc5 wҸǎ'7T\?R*_CIyF#?+//;;_P9r@+́oK ;8H"6Z(0Q7vRj",j{n=:7_Q_Io^n? B1M#. %:mӃ[!X!G)Mh?WB/"u}!:f܊7uBq++4vx%PGs ; '`8J@s@@LM+xy*/_)QPQO#q'?2C(֋_];<1 )cnM}glXN CU p$ā)0Jpo-Ku QXz[")MEF? dIPgz..M3{P?L1z&\tn}ٍX+(_"_?$VpIۃ(P*2,5pRV&?5Sst̃P?F*4:PI[ \#0Qu@ ;@/[ݯ+WyZ8TL3|WFH)WrgkL\h[nE=Kd(磊y#n‘8 LNZ]h=]oK9Zۍ~#6d(m1n%0V+ zPq1'w*TP9s@NxM$,}l-qO\ʱ74$Sn9{\Ꚇ+!(rop $O7c¶rcex(n=Xg[j<ږu!qkX u83+Cwbb)ѥXKmw{QOP" zkڷy(`?h=PdOd1Ɓ[(m@qL|΅*q_܏fy~Bn7'䷞}';u #9B[`@wz0S ۧohܓȍ՚fvvu`iZ8 &Uam/9wwU)GsP\W=m(S 0 ~o|"tя*_8rSDqHiS Lȥ?g'C0^ӞH*"fD1ݭp`rK72vwEu S6?2%jvw$XA7=cDa򮑛 S:H&MNť)~Am+F^Ls=j?#k?m/&T@]2"[UyUrX?Qã%ЕN4F̘o Zᰱmhq{𹾸)o_{4=g 7tW 0oԷ3}̰"/;1 ϳ䂰g^~؁Za 2u2ے.$2ǼX-o^*T*5E!zJ`zyyonm9scbW /cm%!^D4,jCŚ'x+cF%fygߞ%Bp|#G Es(IQ~qOA5/v[)(=8E߂|ߌK|{@4߂4R/ ~kZ+7޵NyHw֖ν*{C0.m&c'U !! vF{[ jh wϑMs|Mu[Ku 7'yںs4XG_||QNh#ޮW1:kk@[w??͊\R~)BΆ {X}w:(R%BVSjduh׀2z΃Uu>ts>DJ/֚Cn (k0|]"_5s9{0W=vb›\FIbȄ~!?#ʷ םѱ4QgY1x?IS6yz;ږ1AAoQ>C_n?ZFqkr7ִ= NabyfhlD 3?oJVNb$QqDFr7;lm~M(?_5k9ތG(Ĺpגd{֎M~*Hfgh k)k]R}xPP#(C8o??"5TP9r@8ď\Dy2,q ]#RN%(O(Hz\QL* !v!qes x{\PRKv/+I r!8)v!0ȗI |ɷ) گ+d| yYGiy 8@߮<$/WlZ?QTSa?8?NAKbLLbow[$;x[/;W}Q/Lhǀ/yԯcA(ԡnZte(9y`lO;C?wwV :˞x[&o/Na`L@8$˴Sv8h 6xKc>#3ËRy.IA Iؓ 9ZO7#4ř^ ʥ>1t0!;!۝+#`؏E %wh{3+x8E'*MqumMa'kӑ҃SK#kg@{r_qo:C%( f<'$v_Dw AIw}Yf@u;yW %O%@@)>YCy- O60Fn =l|O@(t_P !*㮧1߈10>jޢF8lMDrox18👔5($ָVJ10@@ x\8R?Nj:B,8_CmQ9OD ,즥PPmnnȊmw0lŮE[D,("B:Up!% :gS 1k̑ >|1YW3>bE=Ưc]pj\!?Bn{$3\[J^R `\yKwEއ~^] jf=o^M̝QͿ'*TP9:q b}U/T[u.s.R&t[GCt|!.Y/&F}BD*1,EҲ2(qsT* O-B~ (h7j~gE=ohB8%KX9PnQh ZE*Tx8U;YY ̷j?ՙE?- A?W㫽|1G{ ɈZ!pzjQ#86("- $ S{Ng~)hNUB0?BxF `lqh!ہÊ i<֪w]<+/׿5Q,Oc6K.oxk5~{?MרAU::ꙗD rϞ}=fOmقGyQU 6)BW }K V㽐:; {6XW{Vn>=em~D-POXH fFE7vѓup%jm)$#M'*In.Qr Q>T1\hc| @s9wɹfQ>N@P /hi=Ў`xSCǩA |]vA4^@ƍh-C4#ߡ["ءi=UR5Lb]ЂX*$[^qiWٺw$zO-i'# h0=G+ω?ԋP9r@ˁls7FvDݱD27[ק.BCV@_HMrG;W[s` \'/SG8%?ZRZ86cTyf$?Շ2ߤ{C,d&$vIeQ7+A!V'SʁC/0@vY9 kX+?VN"4)vО ſ(sq{W`6 F ӱG>+C7~?m# l'I3`d"[S//+sAm1Z|1FK}d@`@!@mF%-eΏ%pwB '`t DoD ԄB!dm0ځ` 2?jfod!wێ]+6c}Sݒ-N wE/c1n+ \a0؎5!l(h-[DӬ/=Nϧ)fh,~;|-LZ;R3l8ɤMr8ͅUSXoR. 1Ml;8UB g<Wv@kuU"8ܹfe3YO}fye#aojz/;DFX2P0vs4$PWIQ}G,S-0єH};JEFHC(Wf8][i,J!?4xsAÔ87{b%P!/.ۄFZSt79t?B `u^ W W"kE*8T5MAzUmv dgegAXӹSvzw ig O느f^D 1@]:q_ #Iy#8- Qu>I}&Ͳ!ĮdT#W3/[M[5 ; kV&Tˇ0uRA!m'kE8o)Ln ;KteP &HZo!@Dp !񕬓W~??+I 0T!>P 07S`s;IrmDN!Oa6 jNӝR.KԶݍY?Z+jGj|X%E<]b:,0 |!\xX^.\/1%QXiOp+2({ gne݉mĻ2/FRD9;`K+S?Vaz^c.^E*^y{ļu<;@35"?hi L}tL>O##<$y?;6K"p/H0 ^Kmkw6bg*x^mB ?g#H*X|O,ߋ*(_jcŒ?Ҷ/ P}o 0j hG/-Dz Z ҃ѭLNc -EjM@4"@C@=4#(ϗ_~Gԡz%*T^H= t == ?,]P]AʭM!X %p-|UK>:BNڽô 8.~KY9tpLsjx%C1Wg_#.ijh^9@OfDU)A0N~;en%VLIZeW2|0/\(('E* az1} UoBOL uCa=v׆>OqO#R卦P½ PبVS!XhS2ӄ=\xl(*[vNi1זa:1_Q~AH[icSsJ >ʷ~s8<cM1^E^PDC:9n;u`4{2^Dfn3c93~gtv4u>'2zm"_İR UT5Q6OhJ#p Hkq!7tG}?ɴ 4-"5Q~ <7`(H3,뚃/";jp"+ qI= qdf$Hs^1k8vrN1 V r-M+V~3o>@ #uȣhN[@+cPU/r@ʁ׈Rޗ$AFW\.@E##(4Gŏ1# VgY}zyۺ=~GxP?9$D6m3Ȕ> <0_3RTB7t |33ȤĠGv)K!(k dbTVr00ND{ݚmtY]uWP1czK$xpE?J4{rO)'`Ug#ާr0W ㄩYM<`WEdf'{ài 顣%{DJqdI5(qw'67Q9r@p!G#p%X #틴/D>t>'v݃K h[lē+, Lw\0D:JWb_EdW4?q\$A] 1g鈦."M%ltB yNZ&:{ 'VҜ>0[ MUp=·[Iks}RRWCal( |-B?,ShP,$ [w ,ha,uءepud) X8Q2 bN'>v -f |~E@6D@3/z|o")]X-,jAxy@{yjHumZ Sdnml;l%h<r`x8 eo62θo緺Z1?u A{6tBMrN 3#oaA q;̹H1zѫ_x&znE_ګ\%{|c}AQwzV.5̽'D7Qx{W2w{9" XsZ`B-+[N3(unra6QYÈ&5!^fs$9̗ ipյg6bp9c̣Sj.7gfNݩlafسn75} Duct{gDTYj(ð7h?%4G558! !`ۛqK$(D0R>E7bVw|MJgGheX޳ ~K@(4]}iAUeΚ!OTFX37 o.5s0L3~`Ubm+NHA.(J+!WUʁ|Ņ;Y4# Y^A&h6ϬNB{Kw8m{߅v%,f|xۭu1ݡ鱀d4 p񃛖u%ߟzQV-Lr(x}?&WX>݄ߪ- /m(a">PMѾhG \Q+πa(3+k6km筼6"D"A{*ekpnW<՛v\NeðD/{ȢCx}DF?  %rQ1Uܒ ,Kq+~Eϛ*;c!9aJ-@Ч͝E0Ou}9jzg/6EL457%> )4ȿrcw"~$/&*LF$m t }:G==~ Ṃx Ƚ-A>i; 7#ԿCƱ avt?E;s^ :+eO OKm~+" &!z,H yEU9R[*^8<'IT"6[jSǏ eLx@4<ܟiRr<:˂b`_p"UbJDK#n p]pdώ6h}m}e<𑥏Z Zٞ>ЋXQkh15>05~A|OA۰fmSpp0%SejGkhbԐB`(+ ?HF !w x ?S?Jr Io<8˯m0T(gSϦa*]v#wB8UhAbky* ~fptbB K2uq$ZJQp lڐZtYo[iojyؖfSbӃC}VG_3rҊͰ~23n5EK655|+&"$ZV(f9xIAva⛞EIpsb}~bi 2*u~Uh*=8OL/Ւ_y{,;9b7&"UhCS#V1/@Q!o >c5"wzBxV۹댘N 7nyj n`CH;7|lӖKkPivML}La=G=/JEQyR_Z*^/h&hOhj’;t8Ʊ !žգVK\GtatoM hLBzKx4:~pq9^!«!*luO(B/C:ux!\9wie?E謷CMuX5Vr_4T(T!bA&SJ"1o-$gHB JGNJ(sw I2?Ԙ SlW`ײGA`[)rX/]=_buxZiPvW^ wG!D B 7JA!d{GkWY/_zr)Fo{MR5XM`gY %q]]hg?9Q^j8?qm?zF "Y>󃳞T ;gh[c}z܉qpSU]دN !7?=w? k[OK,+r"59'iX$XN|0O.EPh& &Ж &f =!xV -sehZwmoin(Nv񠜀L+G $_Fƈf9+5 Q,h|_z\?kM8 kif`\~` ܑ?G0\e櫔ZU' y/%sk~:N'KD& ٟH%w*S9U*T9@S4)ƿ*]"Y;eymZ4xt2<6YX1զ$2elm[R#IYpT !nB0_Ɗl؈P]OB2\i;*diO7tuMMGҪ2W灼fd!I şxeskA+fp; {]=x 9O>>_*wE-א{%zJy1Ǐ0lp*46vu[pv-E29^o!2=݃qFR^ >-w&, œ)W&Ä4A*L Dq+֠-AI \q_|]xdX"!3+}="wj0)jW.'Q9r@́\Hi^h7h7 \ӠD . ƬуH! vjkB.HV]O  [0x0Rhà pIn8%CҚ5 aHp|&B]>k +XDa<+m$낫~wqMVĊHWc.xR鉵Iӆ:` ߐOdhb]P6Y+y3>ZZ kgQI[C7$alߠָF>y@%b('sNq6|×&'ՃaPkput5}@ {ӄIpIgw-s~WC, _a>z FQc1İEu@k ĸy弁&-z/m6dM{F; U1)%JJx˩"16rvaրIx}k0~6e8Hl>109ւʯ-Gכxf0WAM$+qfNE.H[P~\Sߌ8꼍e"Go c l>¼T#̢b7|—p=~EqhơauWta C4/C~ gU1_b^{o6I2 21n~ 6%@Qیad`>Hk8AsP;y*V6}?N.Dx؀x`I!U x.RP Tur@ʁWJ A(/גk ƫFDulALj 4S8}e[_U;ջ^U\W;\IR7X ߨo6 zA/>>[ߗ~V7s' 옔.D$fTk#h{']+c/)>r6Z4# GP gH*jV>O/RKřaFЉqr5fM~a0!J͘ʟ`R[1'Ngka*KgϏ`=b;%}E6~(i-GHt~ BnXITXj2p v(HG9Qnٗ< !+.^~P!t@6rAz7 c/ P"H ތX">r±|EWuQ_숫Cx։t;E0ENA^`|vRJ&~,Ηa`8G~vT )aCzIwr]I{o&?꼀;p7>$SKןu+?DT B޸Gy.ߜfhɞÿNA'֔߱%߳~+I;h~Hc)3KLu ~qsO| @ _y}jv̇޾׸ְ8#·4=~=@ Z~͹ӘΧ-@TOsklgaHgi"bkA]=zQ?5+_oaNz9Ih]#iq~uviS%KC-TT골P9rui n#  9N>b xbbBhmh@r"HwWg)0+AмCa>:[(!euo Bk3Sw@":A'u[vW{?ky2o"=i x 2/ ien;D3vۯA@f\1*A}.#r&HKr @/Sn|4M{ m0_ޤ96QsTv̑~òN=lؓKPXz?-nxWh[ + A7@:naʺRk[^io#iɫ`.Gq5:p0Tp?=C. k P4sS=`|xOBP#@[ ,CR3 >ڗdqis3DLM)*^B."b]cp zU(٧2y0^y‰jo[.BA{j]tgZKF.Fl羇ZX؀Yw K W8B,ħWhjh۷*UwM\k-|J~[?-ۓnǰ`m1'zߜNdݟZ3ޖJ["sekeaI鿗gͦ{ywz"Yk; [1t21|3rAS8~}aM05+cԔ΅- é^Zf4NŴB iݨayCsғ 8Fbx1~j[6iNy`6as Cr03^9RS PVP ރJ]v%I o˜a>~G\z,lܘ~Y czw,ץ -]A'gzh05.N6'}_?zoG?_xFgy%p{d6p@2Ǎ*ҞC+k8]M#s49,̈T0L`]#8N 7p<%] p%pۨ)M-!s[+w]iA!=_f ;c t~gjk}yu./ 2][t_@\<^xtQ(n=z YkLw>2G82Uf]W@lM/,ʭsk`Ex€]Ԭb"ݳbv sRSHc~qt}|rdL|my3 RC<'k 8Ԍد廕Vn$ǻndԀ)12E{[N|:;N BYb>c{"/LN]F`o_[Bfܣb~g%TkZWxd^<[W!YUAzw}X_WNٽd$ 7.l:A} 9pÍ9 wѽW\ [8Uvq+3_sQ N u 1X~@$\f G;ösjNpu-ؑQ!uGfZ*1g{I18q'~@0? {|x I Rݔ\\7C5Z)47Q17DP_n¶,s >ang Hΰ7J\sE+-hD GhdO7S4 !JѤ֛pX\LPQh.LFyoo̿r)< y,<7nvas= .zywܯ@QKp@~OI+AK1ok.%w*z0`DDpܝ@/yݗYx?]]a7Rūf.UŅF\C@!\DL5~* g׶ޫSg yQse|dÃưz_@6ɬ7hD/?+ěljh#uyUs5{{'QEMԷoZ3܉dK6Mo="1u=^_tS3˾;+ΥY9/W[u}.Sd2mEA=_;Kp:[ݤWȝ\ p%J(թזYr'Wrj -jl4)qe?C2vNjɒ1xSC4o+mIn×;6!CNs1@|4u)jqjj[Jj*ߥ+/{rk@YpvV#±lPKao]X|W!5اAU!{1kȼOg5k3nqvYhǰM*@cgl>b#yq 9dd*>~!CMI$r?YV*r^^I疝#[z˔ޘ&վ.&鍖wk໸^Y\5OB"ZQ﫥é}~)k x~ÕlNJ٘JAґEWx?do;ew} FALx.,Ee9+NW P< .PuOìx:iA צ~~Ҳ`RWR%9?v9ۓ{dq(w2C ̎W1v'l^ox^f/שȞe?{8 hͿN`3 d)n gj݋>qqh ryt؜zflIQnD~OZ'.Hc'Qi+lV_zd/zd^|(qh?iEFELGNJ y ܙ=80}8&Ч<~X ʌݩ.?+BE{T4?*Cɫm|tLW[hIfqMc:!3-J\&dN]XW.jZ3|"e<^'+~ξ 6g@c gޝ_0aܬ CJt, ^tpF}]2107)/)gy(U]L&0p.JchVX렪G=3 òbVKa6&*gFӒq8-^*ݬ)q >y(0oʫczZI څڱ Ű շ"zԶaXWߺs:6"Ǭ?z4F$ˡ$O1cp AKL |/2#h?tV{JM56BnG^ :Ϥ(2~:P'Mxŵ#U Ro;q] (D" @` F8j"(?3zr;.(ڮ}|A2l_M}}𵿂1mP#Ԧ.a;ulR#Eo{d1Zpz2r'`hY_?캧W3&qm:6uA^ى/" p;Fiy}V2U˪g_~+re y O1$Ĩr7WjFZ4u!N`z@N' DYy7޳TAJxUA|xlK5uM0U/y7MBsQWgǔx?Zt>U3NZ~̜7 UfKWУ۲D'ѡqIW+BEodž4o"7_0g!ngxV[c0Ew's [KuTќUѓ߀i7fHascyDҥĀ1퇶=$rg4lvlަ<ձY}ͦ3\p(<*/7 zE(w2?@̃[>˿ǢÒYJ[Vv>7\ĢԒfL1:<-afc.^#HxO.81$E,a̫Y0=rQӣ.BߞD\޲\ -5?%K&Yfixl"w> Bbv2zAq ~)HV8SkwDE>W,Vtd8\fJz{!ə'hUs ;+~721|'cu2װ,"%?EVa.0XpF=a˜ڔ6=:eIN.zic)QD AJ :$Yqե19g1j^K&@Vƥ9OlM'm.@x+w~I@;p%J+?OӋz*sѢ8+io^Z Z=^ecFNmû=+pn~Xy&(8{x^ǹ>j7h뚯2;I9 M%Ђ\zT~9Q]=ud|&uvaƌc|Fa.hWkgᰮylڜd !+x;W!?А@*E֥t,K=Y&wr .D늭4; ,#H?jdW2lwrBZgͲU8O$s&덦EL& O]_&ۅJ][UNdyJ;$/W˝YaMCһC-evG#W{@b(nUwh8z˘ӑcF/arЧ:MdV_X @=ǺsXgjބ@yDS8TMX?W{Oqsz6W` Z`{'Z}-pKRI8p#\ B(z i4MAcH>\P.їxh@l_j$U8 .[>mf7sowρ#cW$~RطgxxGX[|к c~:z =~q=LyY8σ_eJeqɕʤW뀞ˬv֗}aKti]G KC~lB&ۋ| TV@HTVmA3@RCEq/5$| ! 0R:35qn>`\R(ݺKǹ. tOߕ+Ws h"̓L0:9SFl%Y_kߤ~iJy r[>syZZ[Uyu1Z:yC#C0h cȆ. 0#teQpw}O q7~ir^v,\BF6ޞ󅧛xoA.QVz.<>_o-z=TS)CML6% ˑz>fX C-3|4YQo1hs^Χ|2ޥsIbwZXn?s=g f9kR2+R;31wVi!;v6(7p^/~i};XN !S@g hAFGuSUG8{>k(% Ͽ_#S^AWUp5D@kEGp̫9;Sy?ͱ7k5x庡L^ Bo$T,{@mv`Cb藴g;^8ڟE Cz(ye0ҋ>FA/ݳhᨙm3Y*A~ҩMszȪc i|hA97Ѝ스rn&rQt!kځyzn=#r--;e tL9rOvٵ8ϷXnjv-#/8J: `(%hx&zE_t% ؘG-o1bng@/zTIHFqpfdwbe Sӿ &pL ݧ̅Ym >~B fv+3<|/>4~v2ݟ0+lDqc{0 j%8f |?Z-9?/^`Je﷓:{0ۭ˜ c; x h.zay}mx<+ }§zx)(ClV"{n~ԆiL۵ V{{ CSqg:@*$˃^\n] ܋(dn;^h_l'MRP2 Ktp~eS_Uj~: L@5*9o^ >jY7Wb=!8Kc }4w[=Pk2,2={ /tO&jf`eR> N~\'oL5PpN^+W "n0(vȈȄGCrۇP+C*o)(@ЂQ]XAA pF!0rUсH,s>_liuxx] wm)18i#1hߘW'n9&S|_ëaf'ax%,UCYG]ȍCK8}4+5([.<%%qj=dPQ>2'uG ) <*rwr_1HO L>~XHTSDȸL+ 4><3kyZ-Wl|;{`x+% bzyQ`>l<`?dxExXxy}\BWH| 3PsHA b {Qu?ݾŒpG uy8GQ0Zb+8Uj8sdW&76`"|q9H"Cխ96vڪc([+Ѐ^g]cT dW 6v$:T_Ҩ67~\zH+'p䌅xM}c/bL,gm- F 8^h z**j~x"$.>a+yZsd} v;ny‹ ?(ݟkggoe0d2 ? Jq]*|d)qDhEpnGCn>WJ+?Of!PF~VEaAQO ""0H`AjI>/%rc`&0^w Cs@Az'oQ<0Y5^),? +,8 ԯ kI'|A}Þi>͗z"ȝjQ_㯪rSʎJOUKŔƱdZ4Yvs'%hC&יe. m5^|]| C جC}j9}U7~ܭ w.}NDnRe[#]B7.oh[+W Zn}_"tTȵpҋJ@xEEY#7 G1?dnu.?߯csuRs@M1'ȩA--8 ope"dB/8P./N)Q&%Kq1z {K ?u(F75^l)"o_.^pf-uN\o6E *|u-bi x' >8N @;[*W`24A VТ,EQ4FշR+&:`H }{˶뉕us hYtʞĶ ͣd~Ay!RcoW{GpHF٧ʄ kwO4HzZpiM]905YD`xZ܏CCPhkRfJ b{zJKF{=2 ׷yS4ߖ[=YS&+p#elrӉ#?C>+Tc%1-$ܓؒ^'N<>?6_] Q"N&`r0B$$ &T\4^\"s!?] %P<K!wř\ժc j*/ !E6cu58Ugy[湨*:4K@f33.P'鲔{3oqG9T16Emu<1;uůx!M|wUTb\ԻOcu xOO|ʼ1H + ZtA:guNL b ǩHV Lt9{Jpw wdqoGp#f o{ɮ\ S$&nNa)meM!3T-seF=)Nޞjss~f[r3Y30^I/mCVV_7miC7Ia oc$>θ+%.#_uSOKzTE`^Kvz@KVU j?_eLCNX1WAApFvzs0kwr%J@l~$c`^G)*8tq|MSѧ-ʔĭ~6)K1ZgE%:nnh_qb.þêsf-N ?˚ ţjZPJb}Md$4vzZ5bq]Tn!~NmՉ~yP|rM#HPdj+EU9qk;(A-"cڞ,l$꬛`NH@;p%J+/F`oaA0Bਗ$cpP@a<?˂TɝB-z~9} +0V C`} 0n|`{P{usԼg߶NZć;Q̅8:mMoE xOyoL2w1_X[?=> I l=L]>="_aȃnʾ"I@[$.!HC)yx+]S&Dc|1KPwX7+sv%J~O_^|꣮i3HoNCmggXvhzCky[YVBNa2yjOt45taMUc,L_{˕Q2eGM~|Al1}úU rWyQw> WdoDfF utZo\\\At?x' C\P\^&*X/GpQJ@Qđ,+eN' J+Px9`8@Y+0X^̧ UP}QjO--ʉU ł` NNA)厂uv?i1a$RaQ5a̐ڒUV# \xo+(\~$~"jo@/ _Pu`X9.Su}c?^b s~}!_ӡ)UB+8 ' e) DF}aC7ǿ ٥'fHZJ~#gz262~t1+J<d> d,_ >PYua1p& Z-M-5w lc\ad|+hq%hQl+(()-0t ZS%t01i6lB,X]E/N11+A+A}~ '5~# cp7 >!X/W]`O $3ѯ}-v-P3.^Or*}Y`),}AM`~K*pCz0[S0(-`9OGA`0tH8Nn{\ 8n$PW14N cf' cWP#0X -i`y@ q'$LP ku9ZT*{"|`|c je%TM\.Am)AeAl%A:.ڕ-\z>&G_ | `Xn8ROV d |R0\h-ߋ+8R8q_Ւ\@-#}F%r@`8qw ~/|!h@0Up~:És+q sOו+WǼǁ( P hM!&0,<%0$ u5$Bqj&? #Eqlq_bwǖP!up0ϋjHx.EC]"g#-cZ -0 ގdషcKtٸޛZ,YAU9A:A |IX& P^8EpóqW$vǕ+W\ {&A_łTC3Q``d /SY0 @ S5A-XDPht=5'0q}qܯZdɂ&^G ;`:j<_3u 4~-aw\ K臿VaW'qa ^ðA8Ǵ#0-#"(2U[M9az`y a`8 nRn%0HlO/,s8fovbEu@oz3.8ZQ ゟ2 ^}pk1gut ."vCӯK2rp%J+#█F ρR,R<~8{`x V 2%HmMvsK@Ɵ@0A`N XJ%\(0튆;Yzux9(.Aɕ(8s$O tX-(RHp߇ W@ v 2S& !)8@#LقWۺPp @]SwWr%@qfn#h\g3*qR#=UyQjnQg V{X`X+w |8Ñ@&2[R0+0\mwd$#Ei-<&8߬+ _PRzA@EUK],9Sw nn1?*Ч"ESq@鯗eѕ+W@ cMyE`,hyZ%p7 >&X\ \m-aYW`Xlҁ/\YQwctAKg їSQۑ9(q|{SAۂ~?#0XG )) #r02~{mp+WGK F/WM{S$xOK {*>0!%聳M0\hAjy5%Ys /P?N,wCszEA9*0Kz7J "޳Q!`^A sAnp%Jo&X$-tExMYWpyƁb??~h!q. [S'?)$)}Sgm* w X#Ǣ`>RlWS#x.濟wQnJ@,ř]h&AS*Ԯ^-d\k;Ig߭=A2jyp0qbwcŕ+Ww W?ޯ=Nř)^ܭ\ 3$PtS >]5qpSt%J+W\ p%J+WW߻w{W\ p%J+W\ p%Jؗ! $cIENDB`ic09mPNG  IHDRsRGB@IDATx|EׇޒWATQ]+EW@*b@@EE@)H-/p (>?ݝٙ3s4Ǎ $H @ @ $H 6+6 a $H`[@$H @ @ z*1@ @ lB 6H2ϱ0+]-YSoQl"8 $H @ m@m A $H`C$+tBf) l ,1aaVÊwf3f f~f='e icYN ,<\ff3YhAħl9Yq_%)c0 $H`딀uf\@ $kHxa%Y{a.P#@'X@JЃ0 a6HagH#˄ =0 t ],vN"Ztf ofy dG࿯? X  6¬(/B;̢l4e $H`@`ت/| @!&m(pw_a 3= z?f5{ / f[UNIaf7z¬WGaI?YGED/ 00al?o <,\_"P Y6l,my+GR\l,ӣԅ@ ؖ$ H !C=+>ff>(G { ]_ЃXOH `=G`/P`=mYO +-JeI"-`̽MUu]>Fb<#p㿋*>C~cA|Zz Ay!PTiY#$0-.̆tLP`)}A >Gatrߗ;ƌ ܹB5y\_*x_M`W @ llY$ @ U=sO( USG o%C ^|7(1K-X/Pnt!ql 0ˮ&&̎f{/D.~e .mS&0x)fo,f=OG?$ȗ'\‰ J,*x00;{EHC=ܥl&wfVff"0'qQ6/Gbm|u$g ,Mf'.f{^&PI ^V@)$H`@`z.y @۩Jz݄=-P iڍ%7_kfB+̮/P4 c"(+ 7g .+P|]kG/ }% NmxZNf/-/ ^cDPα +yV0;`Fb8Ul$H "{G @ l7"P#-GdC<ۻjFO?bSP0Š0{ ~޲a.Jb;QKf%X|=QPfb=Cf=]p`&cx6-Wwf @B+m}cGԯ3aٸ^`)x%6v$ $H`sK 0lH @ $W&=-_X@ax@ZP^)W(+J<f5<0~c\3 /uj[w`F-/6}LX;lȢfdnWpGݳإ7q_sp[wJ^>56a΂|>L}0=H /˥L [ z O=G)%y e#0\%?Lf"6 $H`@s"bD"@ @)_ 6Iqdc"=WH! z(_ %8.W[=/zؼl^ma G0U`ACQkw' c/HM_x⾠݂7ʵkg0Qw0Cʻ(ic3k?|urb7шqԖ G *pu| g[O 1<VLtf,Fx ?Ȼ ~nj,'ߗ$`aY]o0~ |Zz˗ XcX1w:ԇd-M n(_ܡ\8E}pkf_r"X]~0;ۚ8ׄY-{C#Y:UA5XOۇr0z#ill᮰Bܶvsvss1B6X`mA9+M`D0@!,ooᅫ@Ώߩ2٢kނM zdXɃE]<,BƻV }wC>H~ @$` Wps @IiXTxiq z4O>AL(< O т)=#sz  e¬C^Ved2 X@_,̺D ۧ B=o/E.q z֚Q 9!\e[i!w)t%Ԃj֊VÑbru{t0ag ?,XW1t^7}~>܄ ftiipA$؉tcpp^Ȥi9ٕ>Y"/ 6GD o?s9Nwq~->j/&C39gu>zV _Bn]wLl'W7/Va l`Q3#o/Q`wyނ@ֿ^ >w BPȑdh3󍭍srK*)Aľ,k . Rۑo_#>ȳW5ff'%x~Xk0!ԭ/ْ$ݞf-YYvE vw(pCpzly$>@ K 0].@*R0h,}Wp s մ_z0_W0Rm}{]5H`U`0xX{eca&럅ٹKٱ %욛7vA{wz7?*u; 5=%w X5ٯnw뤹6ƘpV9?>D54Z`@%}T0>̋m!a_E}S {ӛf?_RRل t&O=8υlTxpp%#nxc- :@_qï߃?`SC' WY]k{@d=V+N QWnk&5M:\=De\#ן"MپJY@U)G @^HX@o&P@)(" :<$Y^#(!w4ZC,_\o-*=8 naŹb ~=Y_=4 #>zR~ ڃO  /o?d{;#bG3RaFZَ/rg@374$NBcB]"(:(ٵJ.pOmv4\*p6:yKT2f?+\0/AHU={:6|<kmS_Ny gDOoܿP_w>Hqچ)c/O;rѶu(nQlH֖>i1-6(OZ'٘ւ](?xO)}]l賂0YU|jr{wO6˺)2skM}-7ɕxC'zX!?r銳ȯ:\4zYK'^{̳ VV.})Ny\'V+cw H%.Xvw&>cȉz fX @oY|8Ov䗗,O^dGgߧKٙS7"b˕  CA (GqYc+Cxt( 5 AC^0t?  'mn\w(:T C=V'6}?'e4tt+6PF(9B0P0AC  t<#4@No-(hVw@A]([ gn]K% yJ{sfg 6 NMج7 ~w}m o~N2\{º7D[\iߒOKں ]3>uǍǡ'I2g8u.{eC38{zg_;u ܋cuD ' h'gK=`04 S5vso\p{I_cٹ_3~Y-`i9}wX줒3E[?;'be}\ٵ Ip)s K'sp%fFWAȮS鍺tӚ_;jѯ!=NwӖ߾y(}Eㅅy3iXQN9BBRO;U3NГy(f҈ tA "G.w'Sfͨtx5kpZ7q'y Zq6m?8o 8ޘiER.0l'mW/L#HK YAvvQ~G'b_U]kQS aWBm\,6u۠RT ghEjO!ۜ6!J/{`C- Nj# <5({+9d^":#yT^.H?RK{ɏx-ȗOY뷅-k'Xnnr $H  @ X~Ck P"D+ Ղg  }-A&ރWBCϫ'Nw\@֗P&XyUO&dɗ 3 B硆(pqt7.mV6S/VckP2'. ' Q{Adn#[nzCҳW* v%3_2xkdh/{8O Z7FM7G F|$rQ0hAT"wW nKؗQxHdR+,8fU0(>V CR`nCޔ b6ZwcMۡ/q΋(xlّνS֪: ky,,#6}1`lW ر 'Yh@]E^Äs+~"TcH (T$H`IƂmtApF4Xp~pAzA;9mdMd|p>Hz9{?=[{AzOEnI@!'w |:>=o=4+P.mQZ3Ę4pSq0,LgWA(yv95{wMz< ڹ8Yr7+xj( ?T ߄d5W8R*u$'r~]}߽Z3? rc8'Q?ϘS]sُ !ycϕ#?3w ǗBOY}w} f 눴7 $Xw :O'FP2V;z j^mF8;؟Hu]ΥULH=)F! /9-\2 0iW YX "x.xz֣Y&l^wP#NT WGzXu`@qdߏ'iڰV4eͥ(N9,CSz~8@`(Nf 0(| @[bjD<'Ds 3 L@.&|,:E6{0{`쫧O VyviW V߯7AMQ2j!4^"Ǣwϸ<,-N5mA<ƒA0T_0`(QʛMYSO0왂L D&nu[[-Y6q cqGE9(8AM۴;V7 p7+?;;uv/j~%5Ky5IQLoDoք߫ ~cc~`ׯ:$_߆mnoG)c944vQ QȔ$ދR30_pu^NaQi~ϬUr$s`aA=6Tͩ$H`ے@dJN@[G=ҏva}AD\w납xyaJАH4 dǚjib*ekzg$U[( }>k0G=^ک_;>#XִC. ]' 3^t${enkXϗ z2#=LV(r^&~PG(E[ nۃI%tӏ?vI)0W?y}鸻0}d3j _{6wK^|5<"<9UG4!m6+v&جKDzG|-;+0P])y)P|Y(>08ZiI) RaPĪƪ?:9 *w/}"+rϯԬI4cѼOE[~"`!CG -"'E9N:^'Jvvy$xڜ?f-FvTC_WΈJS2rZYclA7YC*5{9؇AEc%pF1%kݪ&̨!:qy|y/A+*ego_tł =~%xN|@[O{wxN`#|#~+_ZdGtirqoqq@CU蟙z)|?i;dߪOO̥wLIL>Ku[v|W/]faE3Hs3+ZK4|C@+>æ8 yZ`zNp%k 08H .}#@ +6xE >SO }Aݝ&V+=b_ w{mCPwy5C۞_oW!jfr\B02T}XFAv ec_l5#~9V١ <ئ%;|pV#7$MsդۥOo3Z] ug/0G=Yh@J"h n^}0"B]b}Pb113kZڳIߑѫiأNqiyTQr:8KːΙ<7#=w(/̛6X׍DZ@V ,ھb^Q*nq$ҷPUCÁXz:x*= BZML{Us2\~_GPR ߇k6nwYK8m ?[ʥ}}۾ )ֵdV rvvZ;%V!`UOyߣ͂ƚ%1ã^Gg씶s-q?+(7ÏEGm|K4[6WT!tҮ)/gqBybb7:xXn󣂆Ikwٟ--CӲHU bWjmBp u=0TkTa9,}P0 ~p_{S0T]2 Fjuwh~?nE1I)c|zHBs"=TwyqעKxUw<k[p0lA9Mp`(p*g6@I~.<`TP0M߉pYiJj4'Ϛ?؏{o?S+^,A ^$%E@=sR^ή`(gn!E{:qwKp ϊ>@Op~?_諼{s\y\0&_-P&G$X8A聻 RFr}C]@3iWE;uvx]S(1QB;Q_A zTK^6ٴwX^*2X\aWa=A8gxldnQC$Ahj[Ќ#LRops˴3Ϭ L:rYs~h`x읾8VٻnfW)*V,UTbFncJ`¬G;F +^pfs6(t0QQr~c⌫o $K 0lE`;?w]V 5ݺ=s=_WI[MA/!>VЀ x9#a<>)4ۦ98'SNGE祶w}K ]1O%אZ4-I~{k僅yıVK' CGy3X`0AyC khعyI$, *8XH;|O6ye<-ŐZ+F%җ1>S|[ u޷C˝] ?+ F=$vNsXSL[ڙy]pL(?ڔotq ;r5{?Rߌq߇n; 2{y.K;ޅ-;_Y[WjYËC>:wnSOOgaWϵ]Mb+( F<.(BZcdauto]#0xZ) #%V/X#v$9|2v¬oOv_ fLtU 'V/6`QW=+߃>VN,E<Eg@{Yָ뿟Тc%^IIuv[+}{I%4bb%pK[|BoM4ˬ4pNȾp/C6k@rZ7|;,mE+;]ctίs6}i0}P]z`ߵJ4Ps>ܽ "O{ wrOi<j IN^OND,{ݶ?Jnڵ_AkRrk`h[ ^"x" X GŴ_%ߝgtww;kiXv%&? 0%LwPŒ{UWx$!ZD*|iſ}<7#qE"1-!Z=uzQ? 4EoчCM0Tڧ 9z{)isuW$H ?_fDR_lï_`db y nJk&p"2οq%BYD=&s{3Ai穡*QNNyi{Q깄? +|P-?O`D 'EBߛBܐG`)K,G f ώ d-^]P\R՚/4nOu}ZU B;3#{OXLA0|{Q7Z .K߱Hɯb6fFj-nJK|;y&w|;bAf=R ĿԩMgac,SN|!p | v8B0@R1;XJY*{>H`@dHC@Ko{nZtT)pG >%ٸ_,._/p4: ]m٤\<ױةx;͈݋W28Aێ" !: 73K^1urg>("|ddXR=O<'?SfJ4$nIiSR34`vO㎳n/{{#֋掰. Pĭoj5=616 ږ>Ȭ>>;k8]jXp2`wׯMNVXIJ1rk;/` }%>5jζku?>Y}תqՐcErڇƅ#[f6C?Y|ʙ[(4s#kO &5 ]M Oo4?<%Z#DZJJ5n*omnbw` E~j`+ZOfcs} U3͍\Of&frvjt~nmm?\Tᛧ|{ 3_>DUVPsrOBЇٓvzcӞ g>-`8Jkr$uYy"F/`N g` @=E4K]( :{ fG,a1)㾜bpVJyϮ yyd3c e > 3p]##fSe0'tR87:o_!۲?u:9^ F f^mSX|@q }IX)吟߹#'"E@[=(ܪGW-}쇿(Enm)diodMr9wbY#CQ7dpw_&/t- i! jݲ(@vbt1#"ۮ nP-_"S"Q&x. g}|{KQN>Om}TwݹuO q~Cw)o9?obQW bQ띂C;;DP~xr[ #8InkΟL]R홝~ʐ`ͽlK;^P')0gЕz=qN{7UΕb^72WC FV^T}GQ? fNvxO8e.׿e['/L/ XדPSYvM38k=`¾}Pt! K=s A]Gp_˩?Q#0w {;#?L)x\av)˄ A_Yp_եzG`iݪ5Q@{ݽz#{s=!s@IDAT){YΓ'nL|dϺˏ+VwW )cَ7|GRF| Fsv7'2n,|jdBg$Ŕeϧy.醴ԏ#.ߍ=` k ޟEBߛCr-=k/A=J^f7=CVVc >`>ܹw1fQ*kC'uLHM뜱Uޥz|cN #FVJFyx׋1VOjp{[{` j@Tk#0,@Y증)zc!AYl<9! Д @ .@.)H!'ɿ}[6~n;a.#A}wAݝ-<1".~}=Y.>;_lT1&) C!= ^?z?ڋb9a 7, [챐ZD5&EJ2c3ﰷ눽/_v@|Ib+R$KLB}hSFU#ޡr}ރz#[Q ^Ďє)dI~zsxpg1_OyGõ=#Ss}[*O;Ƞdaf5a\"7 #Mc $PUlAۼUeO(ޝC˦>5W5쑂RQJz~(ui+z/ z|nh~,W" ]{7{%&pihFfDNtEZϿ6\7rd~~C"%59)oQ7nZM"o+ޑF'vcڶWfAø0NysQ7PAb@'5_LĒdr~bYhDDU70f"eU& /RFDHCakTבNv~E3JɈIWTޱZ@]Ꮨ.ʋD^/Ah`mLAe1]'Lg5҇তi{xkC(G[ӤНI )F=z枕PHP ('b{뢔2kݔQ,yL`+x.Ӿ(S ~W -x} 3}]8. #t,lt`[;ڷ#ONf b&(:%@|m|] h,;u=P @.̚7fg G ⹡?41EO>dG N0#~Z_1To?I>OwapkP(<߃Bأ!.J]}ǩoX1=`.yz?m-d)¿h`FAv/}1l,؊SpG(luǟUs~Nbsv\^Ղ]kaG[nsSң8$(W;peyC bӐdK?+r'rW8% >kS;K+"OIӆ.S,M6Gx!6CV? KRlOEVyG'7#ޮ Il󔤣ҦMz3u\miS]>;%oP߼A~Yn @xHʌv *3E pQpC߄ji2'T%+J~Sz_uP.];u$߫yRܧX;È^`ėS P/(6߻6;&;|.s_?v A~?&U`xj^F:;0ՠ~>*7#NN([!nCH:$0.~8aXq-pSGnbp\6ԽVC:S4 ~tIZ%wAʎ[> 8V 5u&,e SŚ,$(gyb8%(' )(wyi푚ޢF5BNG؅Σ4IS $48|F<=GQO /{\74UAO"qKNk)~j3ȞLh`dI+jtkRihwbDB=;ݕPC6nj=0x0{X_>-/gǿ}ȟrׄ kd Ĭ/(̮=B-巂قr/A"#i-$$ ?*~M%*g3 fOvb;A^&h -Ύ@1GHm)/ $ zdՏγ>Ig^ŇfOn3}nطjz|Wk׿7 X}N(EM퀿>UA(yRTO^ ս SQi1ބ$p>?ooe[g C#hL_vjnt’MܯcI?Zy= ~bM_+ V)_b8:_4}UWH7·n a;v%gtHm%5N8+̐@HkO,-X[@o{B'N~p=fd)OE1FsiܡU9L1I3ӺR"$eq~}a]֑>!z@H/Xς"A9m)0mwcl=N}@7yYj)O%^oӵ6B@'jXwsr+ǂ b+Ғ3 h8K?r2I B}ezuO/9?-b0Ϧ\ߡaN9\3}8RN^NMoxz~G[A{(B ~o?W~/5EWǻ?y