pax_global_header00006660000000000000000000000064150510377050014515gustar00rootroot0000000000000052 comment=024b6f398c67bec4968a29a2c5744e49e2bab9b8 Meshroom-2025.1.0/000077500000000000000000000000001505103770500135355ustar00rootroot00000000000000Meshroom-2025.1.0/.git-blame-ignore-revs000066400000000000000000000031631505103770500176400ustar00rootroot00000000000000# [core] Linting following CI's flake8 report 9b4bd68d5aa9e5c3af5e4bfc4fe6aae06437ca88 # [tests] Linting following CI's flake8 report 9b6549cc1dd525658080303f7ad453bd4ec10f52 # [GraphEditor] Indentation fix 87c0cef605e4ef2b359d7e678155e79b65b2e762 # [qt6][qml] Clean-up code and harmonize comments 5a0b1c0c9547b0d00f3f10fae6994d6d8ea0b45e # [nodes] Linting: Clean-up files 4c0409f573c2694325b104c2686a1532f95cb9bc # Linting: Clean-up files 41e885d9ff38cd55772722376d5ef80ff908c559 # [Viewer] SequencePlayer: Clean-up: Harmonize syntax 42157809b90f5f6b275aa8ff9d7310c384ea395a # [Viewer] Clean-up: Harmonize syntax for the Viewer2D 9af65092b9e881c828430f54a73fb4522bc1e370 # [nodes] Harmonize the use of trailing commas across all the nodes 61a8dcd4e2878f80b2f320f2b1c3c9b41e999b82 # [nodes] Clean-up: Harmonize nodes' descriptions f2d67706511954aa3e1c026ecc858beb8c08f938 # [qml] Clean-up: Harmonize syntax across all files e463f0dce2455f47d5b066f9e9434ed94b2b282f # [GraphEditor] Clean-up: Harmonize syntax across all files e9d80611c7fe185623e5f276a41b7f2de23cb6fe # [ImageGallery] Clean-up: Harmonize syntax across all files 2bdf061d2e49f3e1513a59922dc33e69f68552cf # [Controls] Clean-up: Harmonize syntax across all files 2908aa94a3eda2de71f8c5e6cec8cd78280bbb09 # [Charts] Clean-up: Harmonize syntax across all files 856641bc9dc25271062dc94a66da4c08e00f88d1 # [Utils] Clean-up: Harmonize syntax across all files 8313e42d8c70e2494277e338ef8fd38824270231 # [Viewer] Clean-up: Harmonize syntax across all files 13b8266d14783a4c595c8b731c54fc9c61adfa92 # [Viewer3D] Clean-up: Harmonize syntax across all files 9d2974d2823fe5d6f400eb4658f67d0306b11ac8 Meshroom-2025.1.0/.github/000077500000000000000000000000001505103770500150755ustar00rootroot00000000000000Meshroom-2025.1.0/.github/FUNDING.yml000066400000000000000000000001161505103770500167100ustar00rootroot00000000000000github: [alicevision] custom: ['https://alicevision.org/association/#donate'] Meshroom-2025.1.0/.github/ISSUE_TEMPLATE/000077500000000000000000000000001505103770500172605ustar00rootroot00000000000000Meshroom-2025.1.0/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000017741505103770500217630ustar00rootroot00000000000000--- name: Bug report about: Create a report to help us improve title: "[bug]" labels: bug assignees: '' --- **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error **Expected behavior** A clear and concise description of what you expected to happen. **Screenshots** If applicable, add screenshots to help explain your problem. **Log** If applicable, copy paste the relevant log output (please embed the text in a markdown code tag "\`\`\`" ) **Desktop (please complete the following and other pertinent information):** - OS: [e.g. win 10, osx, ] - Python version [e.g. 2.6] - Qt/PySide version [e.g. 6.8.2] - Meshroom version: please specify if you are using a release version or your own build - Binary version (if applicable) [e.g. 2023.3.0] - Commit reference (if applicable) [e.g. 08ddbe2] **Additional context** Add any other context about the problem here. Meshroom-2025.1.0/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000011511505103770500230030ustar00rootroot00000000000000--- name: Feature request about: Suggest an idea for this project title: "[request]" labels: feature request assignees: '' --- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. Meshroom-2025.1.0/.github/ISSUE_TEMPLATE/question_help.md000066400000000000000000000021421505103770500224600ustar00rootroot00000000000000--- name: Question or help needed about: Ask question or for help for issues not related to program failures (e.g. "where I can find this feature", "my dataset is not reconstructed properly", "which parameter setting shall I use" etc...) title: "[question]" labels: type:question assignees: '' --- **Describe the problem** A clear and concise description of what the problem is. **Screenshots** If applicable, add screenshots to help explain your problem. **Dataset** If applicable, add a link or *few* images to help better understand where the problem may come from. **Log** If applicable, copy paste the relevant log output (please embed the text in a markdown code tag "\`\`\`" ) **Desktop (please complete the following and other pertinent information):** - OS: [e.g. win 10, osx, ] - Python version [e.g. 2.6] - Qt/PySide version [e.g. 6.8.2] - Meshroom version: please specify if you are using a release version or your own build - Binary version (if applicable) [e.g. 2023.3.0] - Commit reference (if applicable) [e.g. 08ddbe2] **Additional context** Add any other context about the problem here. Meshroom-2025.1.0/.github/pull_request_template.md000066400000000000000000000013161505103770500220370ustar00rootroot00000000000000 ## Description ## Features list ## Implementation remarks Meshroom-2025.1.0/.github/stale.yml000066400000000000000000000015061505103770500167320ustar00rootroot00000000000000# Number of days of inactivity before an issue becomes stale daysUntilStale: 120 # Number of days of inactivity before a stale issue is closed daysUntilClose: 7 # Issues with these labels will never be considered stale exemptLabels: - "do not close" - "feature request" - "scope:doc" - "new feature" - "bug" # Label to use when marking an issue as stale staleLabel: stale # Comment to post when marking an issue as stale. Set to `false` to disable markComment: > This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. # Comment to post when closing a stale issue. Set to `false` to disable closeComment: > This issue is closed due to inactivity. Feel free to re-open if new information is available. Meshroom-2025.1.0/.github/workflows/000077500000000000000000000000001505103770500171325ustar00rootroot00000000000000Meshroom-2025.1.0/.github/workflows/continuous-integration.yml000066400000000000000000000061041505103770500244050ustar00rootroot00000000000000name: Continuous Integration on: push: branches: - master - develop # Skip jobs when only documentation files are changed paths-ignore: - '**.md' - '**.rst' - 'docs/**' pull_request: paths-ignore: - '**.md' - '**.rst' - 'docs/**' env: CI: True jobs: build-linux: runs-on: ubuntu-latest strategy: matrix: python-version: [ 3.11 ] env: MESHROOM_PLUGINS_PATH: "${{ github.workspace }}/../mrSegmentation/meshroom/" steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - name: Clone mrSegmentation run: | cd .. git clone https://github.com/meshroomHub/mrSegmentation.git cd ${{ github.workspace }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install flake8 pytest pytest-cov pip install -r requirements.txt -r dev_requirements.txt --timeout 45 - name: Lint with flake8 run: | # stop the build if there are Python syntax errors or undefined names flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Test with pytest run: | pytest tests/ pytest --cov --cov-report=xml --junitxml=junit.xml - name: Upload results to Codecov uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} - name: Upload test results to Codecov if: ${{ !cancelled() }} uses: codecov/test-results-action@v1 with: token: ${{ secrets.CODECOV_TOKEN }} build-windows: runs-on: windows-latest strategy: matrix: python-version: [ 3.11 ] env: MESHROOM_NODES_PATH: "${{ github.workspace }}/../mrSegmentation/meshroom" steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - name: Clone mrSegmentation run: | cd .. git clone https://github.com/meshroomHub/mrSegmentation.git cd ${{ github.workspace }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install flake8 pytest pip install -r requirements.txt -r dev_requirements.txt --timeout 45 - name: Lint with flake8 run: | # stop the build if there are Python syntax errors or undefined names flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Test with pytest run: | pytest tests/ Meshroom-2025.1.0/.gitignore000066400000000000000000000005771505103770500155360ustar00rootroot00000000000000# temporary files *~ # vim .*.swp # emacs *.flc \#*\# .\#* # xemacs # MacOS .DS_Store # Windows Thumbs.db # python *.pyc *.pyo __pycache__ # backup files *.json # datas or personal files /data /scripts /build /dist /dl # tests /.tests /.pytest_cache # IDEs folders *.qmlproject* /nbproject .idea .cache .nfs* *.qmlc *.jsc *.dll *.lib install/qml/AliceVision/qmldir run.bat Meshroom-2025.1.0/.readthedocs.yaml000066400000000000000000000006411505103770500167650ustar00rootroot00000000000000# .readthedocs.yaml # Read the Docs configuration file # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details # Required version: 2 # Build HTML documentation with Sphinx sphinx: builder: html configuration: docs/source/conf.py # Python requirements python: install: - requirements: requirements.txt - requirements: dev_requirements.txt - requirements: docs/requirements.txt Meshroom-2025.1.0/CHANGES.md000066400000000000000000002627241505103770500151440ustar00rootroot00000000000000# Meshroom Changelog For algorithmic changes related to the photogrammetric pipeline, please refer to [AliceVision changelog](https://github.com/alicevision/AliceVision/blob/develop/CHANGES.md). ## Meshroom 2025.1.0 (2025/08/18) Meshroom has now become a node-based visual programming toolbox for creating, managing, and executing complex data processing pipelines, with a new plugin architecture. Standard computer vision pipelines such as photogrammetry, camera tracking, HDR panorama, Lidar Meshing, Raw image files conversion and color calibration are now unified within the AliceVision plugin, featuring numerous improvements and optimizations. Additionally, new AI-powered capabilities include a semantic segmentation plugin and a collection of open-source extensions available via the new MeshroomHub: https://github.com/meshroomHub. This platform enables Gaussian Splatting, monocular depth estimation, and other exploratory features, welcoming developer contributions to expand and enhance these capabilities for upcoming releases. ### Highlights #### Meshroom New Features - **Advanced Plugin Architecture**: Dedicated sub-process isolation for Python nodes with independent local environments - **Integrated Development Tools**: - Built-in Python script editor - Node’s source code hot-reload for rapid node development iterations - **Enhanced GraphEditor**: - Dynamic output attributes enabling new workflow usages - New InputNode type enabling interactive evaluation without explicit computation - Multiple edge disconnection methods and node colorization for better user experience - Node notifications to attribute changes - **Enhanced 2D Viewer**: - Initial timeline integration with sequence playback controls - New Reflectance Transformation Imaging (RTI) Viewer: Interactive visualization of albedo and normal maps with real-time lighting control - New Home Page: featuring pipeline templates and quick access to recent projects. #### AliceVision Plugin New Features - New Pipelines - **Color Calibration**: Automated color correction from color charts - **Raw to EXR conversion**: Professional image format processing - **Object Reconstruction**: Targeted reconstruction with automatic object segmentation - **Turntable Object Reconstruction**: Streamlined workflow for rotating object capture - **360° Object Reconstruction**: Reconstruction of complete dual-sided scanning - **LiDAR Processing**: Native E57 file import with integrated mesh generation - **Multi-View Photometric Stereo**: Advanced surface detail reconstruction with multiple light sources for each viewpoint. - Pipelines Improvements - **Camera Tracking pipeline**: improved stability and reliability - **Introduced experimental fine-grained pipelines** for increased modularity and workflow flexibility - Core Enhancements - **Python Bindings Integration**: Enhanced AliceVision accessibility with native Python support for streamlined Machine Learning workflows #### New MrSegmentation Plugin AI segmentation nodes that identify and isolate image objects using natural language prompts, enabling intuitive content-aware processing through foundation models. #### MeshroomHub Plugins We're excited to introduce new experimental Machine Learning plugins available on [MeshroomHub](https://github.com/meshroomHub). These plugins showcase the future of Meshroom workflows, though they currently require developer setup and cannot be installed through the user interface yet. - mrGSplat: Gaussian Splat optimization and rendering - mrDepthEstimation: Monocular depth inference - mrDenseMotion: Optical flow estimation - mrRoma: Dense deep feature matching - mrIntrinsicImageDecomposition: Albedo, normals, and material extraction - mrDeblurring: Video deblurring - mrGeolocation: GPS extraction and geographic models download Based on [AliceVision 3.3.0](https://github.com/alicevision/AliceVision/tree/v3.3.0). ### Major Features - Add an "E57" importer node [PR](https://github.com/alicevision/Meshroom/pull/2308) - First node for Lidar Meshing [PR](https://github.com/alicevision/Meshroom/pull/2324) - New InputNode for nodes without computation and support for all param types in output (and no more limited to File type) [PR](https://github.com/alicevision/Meshroom/pull/2364) - [core] New dynamic output attributes [PR](https://github.com/alicevision/Meshroom/pull/2432) - First Homepage [PR](https://github.com/alicevision/Meshroom/pull/2452) - Qt6.6.3 / PySide6.6.3.1 upgrade [PR](https://github.com/alicevision/Meshroom/pull/2599) - New MultiView Photometric Stereo pipeline and new sfmFilter node [PR](https://github.com/alicevision/Meshroom/pull/2582) - [ui] Python Script Editor Improvements [PR](https://github.com/alicevision/Meshroom/pull/2587) - New local isolated computation for python nodes [PR](https://github.com/alicevision/Meshroom/pull/2703) - New Plugin Architecture for Node Registration [PR](https://github.com/alicevision/Meshroom/pull/2733) - [ui]: Introduction of multiple ways to remove Node Edges [PR](https://github.com/alicevision/Meshroom/pull/2644) - [core] Runtime-specific environments support [PR](https://github.com/alicevision/Meshroom/pull/2747) - [Photometric Stereo] MultiView fusion in Texturing [PR](https://github.com/alicevision/Meshroom/pull/2243) - Add a Python ScriptEditor in the GraphEditor tab [PR](https://github.com/alicevision/Meshroom/pull/2456) ### Features - Custom loader for .pc.ply point clouds [PR](https://github.com/alicevision/Meshroom/pull/2346) - Lidar nodes [PR](https://github.com/alicevision/Meshroom/pull/2365) - [ui] Viewer2D: Display lighting circle with auto detected sphere [PR](https://github.com/alicevision/Meshroom/pull/2413) - [ui] RGBA shortcuts for Image Viewer [PR](https://github.com/alicevision/Meshroom/pull/2425) - [ui] Shortcuts in Viewer2D and SequencePlayer [PR](https://github.com/alicevision/Meshroom/pull/2430) - [ui] node time computation and chunks count in node editor header [PR](https://github.com/alicevision/Meshroom/pull/1867) - [core/ui] Load image sequence from node's output in SequencePlayer [PR](https://github.com/alicevision/Meshroom/pull/2375) - [core] Forward the onAttributeChanged notification to all linked attributes [PR](https://github.com/alicevision/Meshroom/pull/2453) - add 3de undistortion models [PR](https://github.com/alicevision/Meshroom/pull/2446) - [GraphEditor] Base `ChoiceParam` model on attribute instead of description [PR](https://github.com/alicevision/Meshroom/pull/2494) - [core] Reference the attribute's instance type in its description [PR](https://github.com/alicevision/Meshroom/pull/2493) - [ui] Improve command line help message [PR](https://github.com/alicevision/Meshroom/pull/2518) - Added Pre and Post process functions on the Base Node [PR](https://github.com/alicevision/Meshroom/pull/2539) - [ui] Add and improve multiple UI tools for Photometric stereo [PR](https://github.com/alicevision/Meshroom/pull/2444) - Refactor Node selection for better UX and performance [PR](https://github.com/alicevision/Meshroom/pull/2605) - New SfMColorizing Node [PR](https://github.com/alicevision/Meshroom/pull/2610) - Update sfm pipeline to accept meshes [PR](https://github.com/alicevision/Meshroom/pull/2642) - Enable Fitting of selected Nodes in the Graph Editor when Fit is invoked [PR](https://github.com/alicevision/Meshroom/pull/2652) - Add relative paths to nodes as variables [PR](https://github.com/alicevision/Meshroom/pull/2629) - Node to inject survey points in the SFM [PR](https://github.com/alicevision/Meshroom/pull/2696) - [ui] AttributeEditor: Feature/attribute navigation buttons [PR](https://github.com/alicevision/Meshroom/pull/2716) - [ui] Homepage: Project can be removed with right click [PR](https://github.com/alicevision/Meshroom/pull/2724) - [ui] Viewer2D: Add the pixel (x,y) values in the toolbar (editable) [PR](https://github.com/alicevision/Meshroom/pull/2723) - [ui] AttributeEditor: Allow displaying attibute in corresponding viewport [PR](https://github.com/alicevision/Meshroom/pull/2722) - Update to Qt/PySide 6.8.3 [PR](https://github.com/alicevision/Meshroom/pull/2692) - Add a "ConvertDistortion" node [PR](https://github.com/alicevision/Meshroom/pull/2353) - [ui] Sync SequencePlayer and Viewer3D [PR](https://github.com/alicevision/Meshroom/pull/2360) - Viewer3D: Adjust bounding-box by moving faces [PR](https://github.com/alicevision/Meshroom/pull/2385) - [core/ui] Add support for PushButton attribute [PR](https://github.com/alicevision/Meshroom/pull/2382) - First version of For Loop implementation [PR](https://github.com/alicevision/Meshroom/pull/2504) - Generate depthmaps from sfmData and mesh [PR](https://github.com/alicevision/Meshroom/pull/2556) - [ui] Use the improved Sequence Player and enable it by default [PR](https://github.com/alicevision/Meshroom/pull/2557) - [AttributePin] Add tooltip to display type of attribute [PR](https://github.com/alicevision/Meshroom/pull/2527) - [core/ui] "Exposed" property added to attributeDesc [PR](https://github.com/alicevision/Meshroom/pull/2528) - Extract more metadata using exifTool [PR](https://github.com/alicevision/Meshroom/pull/2645) - Add equirectangular camera model in `CameraInit` [PR](https://github.com/alicevision/Meshroom/pull/2630) - Fix: Improve large project file loading performance [PR](https://github.com/alicevision/Meshroom/pull/2665) - UI: Redesign ChoiceParam UI component [PR](https://github.com/alicevision/Meshroom/pull/2656) - Create new pipeline for testing modular sfm [PR](https://github.com/alicevision/Meshroom/pull/2664) - [ui] Graph Editor Update: Quick Node Coloring with the Color Selector Tool [PR](https://github.com/alicevision/Meshroom/pull/2604) - [doc] README.md: Add DeepWiki link, the AI documentation you can talk to [PR](https://github.com/alicevision/Meshroom/pull/2792) ### Other Improvements - Start Development 2024.1.0 [PR](https://github.com/alicevision/Meshroom/pull/2268) - ImageSegmentation: add an option to choose between cpu and gpu [PR](https://github.com/alicevision/Meshroom/pull/2267) - [Viewer] Display error labels when an image cannot be loaded [PR](https://github.com/alicevision/Meshroom/pull/2250) - [MaterialIcons] Add script to generate the list of available MaterialIcons and update it [PR](https://github.com/alicevision/Meshroom/pull/2247) - Add option to keep input filename in imageSegmentation [PR](https://github.com/alicevision/Meshroom/pull/2288) - Add camera color spaces [PR](https://github.com/alicevision/Meshroom/pull/2251) - [docker] Fix link to download `libassimpsceneimport.so` in Docker images [PR](https://github.com/alicevision/Meshroom/pull/2310) - Added PLY to list of supported files in 3D viewer [PR](https://github.com/alicevision/Meshroom/pull/2316) - E57 importer is now generating multiple sfmData [PR](https://github.com/alicevision/Meshroom/pull/2318) - Added semantic logic to display multiple 3d objects [PR](https://github.com/alicevision/Meshroom/pull/2320) - [submitters] Update SimpleFarm configuration tags [PR](https://github.com/alicevision/Meshroom/pull/2348) - [ui] drag&drop: common behavior for graph editor and image gallery [PR](https://github.com/alicevision/Meshroom/pull/2342) - [core] Add new type of ChoiceParam that changes dynamically [PR](https://github.com/alicevision/Meshroom/pull/2350) - [ui] Add new FilterComboBox for ChoiceParam attributes [PR](https://github.com/alicevision/Meshroom/pull/2358) - [core/ui] Hide output attributes flagged for visualisation [PR](https://github.com/alicevision/Meshroom/pull/2369) - Update ripple constraints [PR](https://github.com/alicevision/Meshroom/pull/2374) - Hide disabled File attributes and their connections [PR](https://github.com/alicevision/Meshroom/pull/1925) - [ui] Sequence Player UX improvements (fps, slider, frame) [PR](https://github.com/alicevision/Meshroom/pull/2362) - [core] BugFix : Upgrade of Dynamic Choice Param fixed [PR](https://github.com/alicevision/Meshroom/pull/2380) - [ui] Bounding Box are usable in other nodes, not only Meshing [PR](https://github.com/alicevision/Meshroom/pull/2391) - [ui] Cut option available in GraphEditor [PR](https://github.com/alicevision/Meshroom/pull/2399) - [core] Set internal attributes when copy/pasting nodes [PR](https://github.com/alicevision/Meshroom/pull/2390) - [ImageGallery] Display CameraInit label and defaultLabel to avoid confusion [PR](https://github.com/alicevision/Meshroom/pull/2383) - [GraphEditor] Internal Custom Color Picker disabled when node is locked [PR](https://github.com/alicevision/Meshroom/pull/2384) - Bump requests from 2.27.1 to 2.32.0 [PR](https://github.com/alicevision/Meshroom/pull/2405) - [ui] Selected node header set to base color [PR](https://github.com/alicevision/Meshroom/pull/2401) - [ui] Remove intrinsic if not used by any viewpoint [PR](https://github.com/alicevision/Meshroom/pull/2395) - [ui] Right click on text element in AttributeEditor open Copy/Paste menu [PR](https://github.com/alicevision/Meshroom/pull/2366) - [ui] Fix BoundingBox visibility icon because of mapping name [PR](https://github.com/alicevision/Meshroom/pull/2386) - Add track coordinates [PR](https://github.com/alicevision/Meshroom/pull/2406) - [ui] Conversion of relative paths to absolute ones [PR](https://github.com/alicevision/Meshroom/pull/2412) - [core] Compare last saved date before saving to prevent overwrite [PR](https://github.com/alicevision/Meshroom/pull/2414) - Fix 3D Viewer zooming problem [PR](https://github.com/alicevision/Meshroom/pull/2379) - [ui] Use ExportAnimatedCamera output for image overlay in Viewer3D [PR](https://github.com/alicevision/Meshroom/pull/2398) - [GraphEditor] Eye on displayable node even if not computed [PR](https://github.com/alicevision/Meshroom/pull/2427) - [ui] Add "large" option to multiline string param [PR](https://github.com/alicevision/Meshroom/pull/2437) - [ui] Auto Update CameraInit when displaying node [PR](https://github.com/alicevision/Meshroom/pull/2431) - Fix compatibility upgrade issue [PR](https://github.com/alicevision/Meshroom/pull/2436) - Depth map filter: display normals if enabled [PR](https://github.com/alicevision/Meshroom/pull/2442) - [ui] do not use native dialog [PR](https://github.com/alicevision/Meshroom/pull/2439) - File export ordering [PR](https://github.com/alicevision/Meshroom/pull/2440) - [SequencePlayer] Fetching option added [PR](https://github.com/alicevision/Meshroom/pull/2415) - Provide access to the current frame from the graph [PR](https://github.com/alicevision/Meshroom/pull/2443) - Update ripple with "cuda" instead of "gpu" [PR](https://github.com/alicevision/Meshroom/pull/2448) - Provide access to the path of the currently displayed frame [PR](https://github.com/alicevision/Meshroom/pull/2449) - [Viewer] Fix all QML errors on the Sequence Player [PR](https://github.com/alicevision/Meshroom/pull/2451) - Remove plugin loading from core __init__ [PR](https://github.com/alicevision/Meshroom/pull/2458) - [ui] Sequence Player UI Modifications [PR](https://github.com/alicevision/Meshroom/pull/2445) - [ui] Add MESHROOM_USE_SEQUENCE_PLAYER environment variable [PR](https://github.com/alicevision/Meshroom/pull/2463) - Display ION container version in Meshroom [PR](https://github.com/alicevision/Meshroom/pull/2468) - Compute or Submit selected nodes [PR](https://github.com/alicevision/Meshroom/pull/2459) - Add new SfMExpanding node [PR](https://github.com/alicevision/Meshroom/pull/2416) - Add squeeze option [PR](https://github.com/alicevision/Meshroom/pull/2466) - [Viewer] Current frame for Sequence should not be set during changes of Image Gallery [PR](https://github.com/alicevision/Meshroom/pull/2472) - Remove some computers even for normal tasks [PR](https://github.com/alicevision/Meshroom/pull/2479) - [GraphEditor] Implementation of Recompute Button [PR](https://github.com/alicevision/Meshroom/pull/2473) - [core] Attribute: Directly access description's type in `getType()` [PR](https://github.com/alicevision/Meshroom/pull/2490) - [Viewer] Update error values for QtAV's `EStatus` enum [PR](https://github.com/alicevision/Meshroom/pull/2491) - [GraphEditor] Improve visibility of chunks in progress bar [PR](https://github.com/alicevision/Meshroom/pull/2507) - [ui] Correctly lose focus on `StringParam` when clicking outside of its text field [PR](https://github.com/alicevision/Meshroom/pull/2512) - Multiple shots: Align and merge multiple SfM from feature matches [PR](https://github.com/alicevision/Meshroom/pull/2484) - Homepage Quick Adjustments [PR](https://github.com/alicevision/Meshroom/pull/2520) - Add locks for intrinsics [PR](https://github.com/alicevision/Meshroom/pull/2517) - sfmTransform: Add option to lineup camera motion with object/lidar given an external camera pose [PR](https://github.com/alicevision/Meshroom/pull/2524) - [ui] Open project from browser in homepage & quick adjustments [PR](https://github.com/alicevision/Meshroom/pull/2525) - [ui] Minor UI modifications [PR](https://github.com/alicevision/Meshroom/pull/2530) - [ui] Fix click on Category in Node Menu to keep the nodes displayed [PR](https://github.com/alicevision/Meshroom/pull/2526) - [core] Simplify attribute invalidation in nodes' descriptions [PR](https://github.com/alicevision/Meshroom/pull/2523) - UI Changes [PR](https://github.com/alicevision/Meshroom/pull/2531) - [AttributeItemDelegate] Position the attribute description tooltip [PR](https://github.com/alicevision/Meshroom/pull/2532) - [ui] Add View Image Gallery Parameter [PR](https://github.com/alicevision/Meshroom/pull/2541) - [core] Simplify node descriptions [PR](https://github.com/alicevision/Meshroom/pull/2538) - Use export distortion and new segmentation node in templates [PR](https://github.com/alicevision/Meshroom/pull/2549) - Add wireframe for Qt6 [PR](https://github.com/alicevision/Meshroom/pull/2561) - Change picking behavior for qt6 upgrade [PR](https://github.com/alicevision/Meshroom/pull/2564) - [qt6] Fix 8Bits image viewer zoom/fit [PR](https://github.com/alicevision/Meshroom/pull/2565) - [blender] Adapt `ScenePreview`'s Blender script to pixel ratio [PR](https://github.com/alicevision/Meshroom/pull/2572) - Update panorama display [PR](https://github.com/alicevision/Meshroom/pull/2573) - Fix attribute value change propagation and callback handling [PR](https://github.com/alicevision/Meshroom/pull/2586) - Tracking pipelines segmentation update [PR](https://github.com/alicevision/Meshroom/pull/2583) - [qt6]|Viewer3D] Fix mouse for camera controller [PR](https://github.com/alicevision/Meshroom/pull/2566) - Discard attribute changed callbacks during graph loading [PR](https://github.com/alicevision/Meshroom/pull/2598) - Split `meshroom.core.desc` module into a package with submodules [PR](https://github.com/alicevision/Meshroom/pull/2592) - [ui] Minor UI stabilization fixes for Qt 6 [PR](https://github.com/alicevision/Meshroom/pull/2606) - [ui] Fix field of view functions for tall images [PR](https://github.com/alicevision/Meshroom/pull/2609) - [Viewer3D] Apply the pixel aspect ratio for the Frame Overlay [PR](https://github.com/alicevision/Meshroom/pull/2533) - [ui] Improve Search Bar component [PR](https://github.com/alicevision/Meshroom/pull/2581) - [BugFix] File save dialog now requires a valid filename [PR](https://github.com/alicevision/Meshroom/pull/2602) - [GraphEditor] AttributeItemDelegate: Use MaterialLabel for uncomputed attributes [PR](https://github.com/alicevision/Meshroom/pull/2616) - CI: add codecov [PR](https://github.com/alicevision/Meshroom/pull/2618) - Sfm Bootstraping parameterization [PR](https://github.com/alicevision/Meshroom/pull/2619) - Fix Qt6-induced issues [PR](https://github.com/alicevision/Meshroom/pull/2620) - [ui] GraphEditor: Address Key Event Conflicts in Node Menu [PR](https://github.com/alicevision/Meshroom/pull/2622) - [ui] Add Validation for Save file path accessibility [PR](https://github.com/alicevision/Meshroom/pull/2625) - [ui] NodeEditor: Addressed Tab Retention when switching Node selection [PR](https://github.com/alicevision/Meshroom/pull/2624) - Add support for QML debugging/profiling [PR](https://github.com/alicevision/Meshroom/pull/2623) - [GraphEditor] Fix injections into signal handlers with JS functions [PR](https://github.com/alicevision/Meshroom/pull/2627) - [ui] "About" dialog: Fix some display issues [PR](https://github.com/alicevision/Meshroom/pull/2640) - Update version number and copyrights [PR](https://github.com/alicevision/Meshroom/pull/2639) - SelectionBox: Fixed the offset on the selection box highlight appearing in the Graph Editor when dragging to select Nodes [PR](https://github.com/alicevision/Meshroom/pull/2647) - [ui] Moved Auto-Layout Depth Settings under Graph Editor Menu [PR](https://github.com/alicevision/Meshroom/pull/2646) - Enable merge of multiple sfmDatas [PR](https://github.com/alicevision/Meshroom/pull/2654) - [ui][fix] Edge: Fixing an issue with mouse event on Custom EdgeMouseArea causing Crash [PR](https://github.com/alicevision/Meshroom/pull/2650) - [ui] Refactor the access to the list of recent project files [PR](https://github.com/alicevision/Meshroom/pull/2637) - Mask processing node [PR](https://github.com/alicevision/Meshroom/pull/2658) - Export Maya .mel Script [PR](https://github.com/alicevision/Meshroom/pull/2617) - Refactor Graph de/serialization [PR](https://github.com/alicevision/Meshroom/pull/2612) - Node: Propagate attribute change via `valueChanged` signal [PR](https://github.com/alicevision/Meshroom/pull/2657) - [qml] Fix QML warnings related to chunks [PR](https://github.com/alicevision/Meshroom/pull/2673) - Add maya scene export [PR](https://github.com/alicevision/Meshroom/pull/2674) - NodeAPI: Trigger node creation callback only for explicit new node creation [PR](https://github.com/alicevision/Meshroom/pull/2671) - [ui] app: Register components to QML before instantiating the engine [PR](https://github.com/alicevision/Meshroom/pull/2676) - [ui] Application: fix save-as dialog not working properly (Qt6.7+) [PR](https://github.com/alicevision/Meshroom/pull/2683) - [GraphEditor] Only display "Pipelines" menu when templates are available [PR](https://github.com/alicevision/Meshroom/pull/2678) - [qml] Fix QML warnings when dropping project files into the Graph Editor [PR](https://github.com/alicevision/Meshroom/pull/2680) - Export USD Node [PR](https://github.com/alicevision/Meshroom/pull/2667) - [ui] AttributeEditor: Generic TextField param editor improvements [PR](https://github.com/alicevision/Meshroom/pull/2686) - ChoiceParam: add option to serialize overriden values [PR](https://github.com/alicevision/Meshroom/pull/2682) - [core] Node: Status should be `NONE` when there is no chunk [PR](https://github.com/alicevision/Meshroom/pull/2695) - Move nodes and templates to AliceVision's repository [PR](https://github.com/alicevision/Meshroom/pull/2697) - Remove internal and no longer used files [PR](https://github.com/alicevision/Meshroom/pull/2711) - Modernize to python 3.9 using flynt and pyupgrade [PR](https://github.com/alicevision/Meshroom/pull/2710) - [doc] README: Clarified distinction between Meshroom engine, user interface, and plugins [PR](https://github.com/alicevision/Meshroom/pull/2718) - Use shutil to load nvidia-smi [PR](https://github.com/alicevision/Meshroom/pull/2721) - [ui] Viewer2D can display the content of tracks files [PR](https://github.com/alicevision/Meshroom/pull/2720) - [ui] [fix] Attribute: Fix the qml warnings on intrisincs [PR](https://github.com/alicevision/Meshroom/pull/2739) - [ui] Application: Use CamelCase and disable tooltips when menus are disabled [PR](https://github.com/alicevision/Meshroom/pull/2742) - ListAttribute: fix methods not considering connected attribute's value [PR](https://github.com/alicevision/Meshroom/pull/2660) - [fix] remove targetSize in viewer2d which was removed in qtAliceVision [PR](https://github.com/alicevision/Meshroom/pull/2746) - [ui] Homepage: Update logos of sponsors [PR](https://github.com/alicevision/Meshroom/pull/2729) - [ui] Rework of MessageDialog for CompatibilityManager and SensorDBDialog [PR](https://github.com/alicevision/Meshroom/pull/2537) - [qml] Fix some minor QML warnings [PR](https://github.com/alicevision/Meshroom/pull/2756) - Add support for `ALICEVISION_LIBPATH` environment variable [PR](https://github.com/alicevision/Meshroom/pull/2757) - [docker] minor updates [PR](https://github.com/alicevision/Meshroom/pull/2765) - [core] plugins: Add support for virtual environments on Windows [PR](https://github.com/alicevision/Meshroom/pull/2768) - [core] Adding rangeBlocksCount to `Parallelization` [PR](https://github.com/alicevision/Meshroom/pull/2767) - Bump requests from 2.32.0 to 2.32.4 [PR](https://github.com/alicevision/Meshroom/pull/2743) - Fix colorHueComponent slider background [PR](https://github.com/alicevision/Meshroom/pull/2788) - [core] plugins: Look recursively for "lib" directories in Linux venv [PR](https://github.com/alicevision/Meshroom/pull/2777) - [core] plugins: Virtual environments should be named "venv" instead of having the plugin's name [PR](https://github.com/alicevision/Meshroom/pull/2793) - [qml] Minor UI fixes [PR](https://github.com/alicevision/Meshroom/pull/2783) - [qml] Use native FileDialogs [PR](https://github.com/alicevision/Meshroom/pull/2784) - Set the default environment variables for the color chart detection models [PR](https://github.com/alicevision/Meshroom/pull/2796) - [ui] Remove the `Live Reconstruction` and `Augment Reconstruction` features [PR](https://github.com/alicevision/Meshroom/pull/2786) - Improve behaviour when dropping folders [PR](https://github.com/alicevision/Meshroom/pull/2797) - [core] plugins: Load plugin's configuration file upon its initialisation [PR](https://github.com/alicevision/Meshroom/pull/2778) - [core] plugins: Downgrade the log level when loading the config file [PR](https://github.com/alicevision/Meshroom/pull/2798) ### Bugfixes - Fix duplicated icon in MaterialIcons [PR](https://github.com/alicevision/Meshroom/pull/2277) - Correctly delete thread pools when exiting Meshroom with Python 3.9 [PR](https://github.com/alicevision/Meshroom/pull/2286) - [Viewer] Viewer: Fix various issues with the 2D Viewer [PR](https://github.com/alicevision/Meshroom/pull/2283) - Use the correct response file to display the graph of the Camera Response Function [PR](https://github.com/alicevision/Meshroom/pull/2282) - Update `ListAttributes` identically when removing edges or nodes [PR](https://github.com/alicevision/Meshroom/pull/2280) - Upgrade intrinsics for distortion [PR](https://github.com/alicevision/Meshroom/pull/2349) - [ui] Correctly display images from node outputs even if there is no `CameraInit` node [PR](https://github.com/alicevision/Meshroom/pull/2363) - [ui] Scroll available in FilterComboBox [PR](https://github.com/alicevision/Meshroom/pull/2376) - [Viewer] fix lens distortion viewer status when switching between projects [PR](https://github.com/alicevision/Meshroom/pull/2377) - [ui] Fix drag and drop of heavy number of frames [PR](https://github.com/alicevision/Meshroom/pull/2378) - SequencePlayer: Forbid "selecting" an invalid frame number [PR](https://github.com/alicevision/Meshroom/pull/2388) - [ui] Prevent Feature Points to display on external images [PR](https://github.com/alicevision/Meshroom/pull/2389) - [ui/core] Fix get latest SfM node for previz [PR](https://github.com/alicevision/Meshroom/pull/2396) - [nodes/ui] Fix ExportAnimatedCamera outputs for ScenePreview use [PR](https://github.com/alicevision/Meshroom/pull/2420) - [fix] Various fixes [PR](https://github.com/alicevision/Meshroom/pull/2419) - Prevent updates of the latest SfM node when the graph's topology is dirty [PR](https://github.com/alicevision/Meshroom/pull/2435) - [Utils] `getTimeStr`: Round up the number of minutes correctly [PR](https://github.com/alicevision/Meshroom/pull/2254) - [ui] Graph: Connect all chunks when setting a graph for the first time [PR](https://github.com/alicevision/Meshroom/pull/2454) - [core] Exclude edges from `InputNode` nodes in `dfsToProcess` [PR](https://github.com/alicevision/Meshroom/pull/2455) - [core] Values of ChoiceParam should be a list, Error message added for initialisation [PR](https://github.com/alicevision/Meshroom/pull/2469) - Some fixes for dynamic output attributes [PR](https://github.com/alicevision/Meshroom/pull/2470) - [ui] Fix local computation of subgraphs for unsaved projects [PR](https://github.com/alicevision/Meshroom/pull/2471) - [ui] Fix Camera Init Group Index should stay the same at adding or removing CameraInit events [PR](https://github.com/alicevision/Meshroom/pull/2474) - [Viewer2D] Only reset index of currentFrame if the currentFrame is after max of frameRange [PR](https://github.com/alicevision/Meshroom/pull/2480) - [ui] setSfm only depends on nodes with category "sfm" and CameraInit should be set only if it is different from the current one [PR](https://github.com/alicevision/Meshroom/pull/2476) - [GraphEditor] AttributeItemDelegate: Return valid component for `PushButton` [PR](https://github.com/alicevision/Meshroom/pull/2482) - Initialize `core` plugins at different moments [PR](https://github.com/alicevision/Meshroom/pull/2487) - [ui] app: Correctly reload list of available templates [PR](https://github.com/alicevision/Meshroom/pull/2499) - [core] Catch exception for calls to optional descriptor method on node creation [PR](https://github.com/alicevision/Meshroom/pull/2500) - [ui] Improve sequence display [PR](https://github.com/alicevision/Meshroom/pull/2502) - [ui] GraphEditor.newNodeMenu: fix unstable menu height [PR](https://github.com/alicevision/Meshroom/pull/2511) - [ui] Add proper distinction between the main window and the application [PR](https://github.com/alicevision/Meshroom/pull/2521) - [ui] Fix function evaluations in invalid QML context and minor fixes [PR](https://github.com/alicevision/Meshroom/pull/2519) - Fix Several Compatibility Nodes Operations [PR](https://github.com/alicevision/Meshroom/pull/2506) - [main] Fix imagesFolder variable in order to save when gallery is not empty [PR](https://github.com/alicevision/Meshroom/pull/2535) - [bin] Import correct `Graph` objects for `meshroom_batch` [PR](https://github.com/alicevision/Meshroom/pull/2536) - Fix homepage SplitViews [PR](https://github.com/alicevision/Meshroom/pull/2545) - [core] Check provided template folder exists before attempting to load it [PR](https://github.com/alicevision/Meshroom/pull/2552) - [img] Remove incorrect sRGB profile from UiO logo [PR](https://github.com/alicevision/Meshroom/pull/2555) - [ui] multiple fixes related to split view and node status checks [PR](https://github.com/alicevision/Meshroom/pull/2568) - [ui] Various minor UI fixes [PR](https://github.com/alicevision/Meshroom/pull/2563) - [core] Node: Do not automatically upgrade unknown nodes in templates [PR](https://github.com/alicevision/Meshroom/pull/2558) - [GraphEditor] Node: Check if unexposed `ListAttributes` contain links [PR](https://github.com/alicevision/Meshroom/pull/2578) - [GraphEditor] Edge: Correctly update the `EdgeMouseArea` when moving nodes [PR](https://github.com/alicevision/Meshroom/pull/2613) - Fix projects disappearing from the list of recent projects [PR](https://github.com/alicevision/Meshroom/pull/2615) - [ImageGallery] Intrinsics table: Always fully instantiate the model before populating it [PR](https://github.com/alicevision/Meshroom/pull/2655) - [ui] Graph: In minimal refresh, do not poll files for chunks run locally [PR](https://github.com/alicevision/Meshroom/pull/2672) - Fix Meshroom App CLI `latest` option [PR](https://github.com/alicevision/Meshroom/pull/2675) - [bin] `meshroom_batch`: Stop using removed `defaultCacheFolder` [PR](https://github.com/alicevision/Meshroom/pull/2715) - [desc] Import `CREATE_NEW_PROCESS_GROUP` flag from `subprocess` [PR](https://github.com/alicevision/Meshroom/pull/2719) - [ui] Reconstruction: Restore the `Slot` status of the `clear` method [PR](https://github.com/alicevision/Meshroom/pull/2732) - [core] attribute: Fix `hasOutputConnections` for ListAttributes [PR](https://github.com/alicevision/Meshroom/pull/2731) - Fix elapsed time when there is only one chunk [PR](https://github.com/alicevision/Meshroom/pull/2734) - bugfix ExecMode status [PR](https://github.com/alicevision/Meshroom/pull/2737) - [ui] Update node status when modified [PR](https://github.com/alicevision/Meshroom/pull/2738) - [ui] [fix] MediaLibrary: Check if the model.source is actually an Attribute… [PR](https://github.com/alicevision/Meshroom/pull/2736) - [ui] [fix] Viewer2D: Failure on MousePosition on some edge cases [PR](https://github.com/alicevision/Meshroom/pull/2741) - [core] Templates test: Remove outdated `unregisterNodeType` import [PR](https://github.com/alicevision/Meshroom/pull/2750) - [ui] GraphEditor fix: Remove useless link between height and implicitHeight [PR](https://github.com/alicevision/Meshroom/pull/2749) - [core] Templates test: Access node descriptor from `NodePlugin` object [PR](https://github.com/alicevision/Meshroom/pull/2751) - [core] Stop checking for templates in "pipelines" folder [PR](https://github.com/alicevision/Meshroom/pull/2752) - [ui] [fix] Viewer2D: using the keyboard shortcuts (r,g,b,a) break the channelBox combobox [PR](https://github.com/alicevision/Meshroom/pull/2753) - [ui] Reconstruction: Fix setup of temporary `CameraInit` nodes [PR](https://github.com/alicevision/Meshroom/pull/2762) - [core] [fix] Fix camera see through not working when multiple cameraInit and image overlay dind't display anythind [PR](https://github.com/alicevision/Meshroom/pull/2761) - [core] desc.node: Ensure all paths are sent to the command line as POSIX strings [PR](https://github.com/alicevision/Meshroom/pull/2760) - [ui] Nodes: Update the deprecated import of QGraphicEffects. [PR](https://github.com/alicevision/Meshroom/pull/2755) - [ui] Import images: Fix that trying to import images twic, the dialog… [PR](https://github.com/alicevision/Meshroom/pull/2763) - Meshing: boundingBox working with qt6 [PR](https://github.com/alicevision/Meshroom/pull/2766) - Fix manual frame selection in viewer 2D [PR](https://github.com/alicevision/Meshroom/pull/2769) - [ui] app: Correctly evaluate env vars that enable/disable components [PR](https://github.com/alicevision/Meshroom/pull/2772) - Fix for QFontDatabase crash on exit [PR](https://github.com/alicevision/Meshroom/pull/2776) - [ui] Add project to recent projects when dropping a file [PR](https://github.com/alicevision/Meshroom/pull/2483) - [ui] fix: Overlay image doesn't work on pipeline "Photogrametry experimental" [PR](https://github.com/alicevision/Meshroom/pull/2780) - [core] Parallelization: the cmdline suffix should be at the end [PR](https://github.com/alicevision/Meshroom/pull/2794) ### CI, Documentation and Build - Add environment variable for the CI [PR](https://github.com/alicevision/Meshroom/pull/2492) - Adding new tutorial [PR](https://github.com/alicevision/Meshroom/pull/2546) - [ci] Use GitHub's workflows for the Windows CI instead of appveyor [PR](https://github.com/alicevision/Meshroom/pull/2551) - [ci] Codecov: enable support for test run reports [PR](https://github.com/alicevision/Meshroom/pull/2659) - change git clone link to use https link in "get the project" [PR](https://github.com/alicevision/Meshroom/pull/2700) - [ci] Update Python version from 3.9.13 to 3.11 [PR](https://github.com/alicevision/Meshroom/pull/2758) - [docker] Add Dockerfiles for Rocky 9 and handle Qt 6 installation [PR](https://github.com/alicevision/Meshroom/pull/2626) - [doc] Update `INSTALL.md` and `README.md` files [PR](https://github.com/alicevision/Meshroom/pull/2787) - [build] Fixes for the generation of Meshroom's executable [PR](https://github.com/alicevision/Meshroom/pull/2770) - [doc] README.md: Add DeepWiki link, the AI documentation you can talk to [PR](https://github.com/alicevision/Meshroom/pull/2792) ### Contributors [cbentejac](https://github.com/cbentejac), [demoulinv](https://github.com/demoulinv), [dependabot[bot]](https://github.com/apps/dependabot), [dyster](https://github.com/dyster), [elyasbny](https://github.com/elyasbny), [emmanuel-ferdman](https://github.com/emmanuel-ferdman), [fabiencastan](https://github.com/fabiencastan), [gregoire-dl](https://github.com/gregoire-dl), [jmelou](https://github.com/jmelou), [Just-Kiel](https://github.com/Just-Kiel), [mh0g](https://github.com/mh0g), [natowi](https://github.com/natowi), [nicolas-lambert-tc](https://github.com/nicolas-lambert-tc), [sbrood](https://github.com/sbrood), [servantftransperfect](https://github.com/servantftransperfect), [Sh1r0Yaksha](https://github.com/Sh1r0Yaksha), [waaake](https://github.com/waaake), [yann-lty](https://github.com/yann-lty) ## Meshroom 2023.3.0 (2023/12/07) Based on [AliceVision 3.2.0](https://github.com/alicevision/AliceVision/tree/v3.2.0). ### Major Features - New node for semantic image segmentation [PR](https://github.com/alicevision/Meshroom/pull/2076) - Support pixel aspect ratio (no UI) [PR](https://github.com/alicevision/Meshroom/pull/2079) - Noise reduction in HDR merging [PR](https://github.com/alicevision/Meshroom/pull/2072) ### Features - [ui] 2D viewer: image sequence player [PR](https://github.com/alicevision/Meshroom/pull/1989) - [bin] meshroom_batch: support multiple init nodes [PR](https://github.com/alicevision/Meshroom/pull/2137) - [nodes] StructureFromMotion: Automatic alignment of the 3D reconstruction [PR](https://github.com/alicevision/Meshroom/pull/2199) - New node for intrinsics and rig calibration using a multiview acquisition of a checkerboard [PR](https://github.com/alicevision/Meshroom/pull/2171) - New Nodal Camera Tracking pipeline [PR](https://github.com/alicevision/Meshroom/pull/2200) - Manage LCP in imageProcessing [PR](https://github.com/alicevision/Meshroom/pull/2042) - [Viewer3D] Add slider to display cameras based on their resection IDs [PR](https://github.com/alicevision/Meshroom/pull/2235) ### Other Improvements - Start Development 2023.3 [PR](https://github.com/alicevision/Meshroom/pull/2085) - Node to split reconstructed and not reconstructed cameras [PR](https://github.com/alicevision/Meshroom/pull/1974) - [core] Execute command line from node folder [PR](https://github.com/alicevision/Meshroom/pull/2093) - [core] Add brackets option for GroupAttribute [PR](https://github.com/alicevision/Meshroom/pull/2094) - Update Qt version to 5.15.2 [PR](https://github.com/alicevision/Meshroom/pull/1882) - [pipelines] Panorama: Publish the panorama preview [PR](https://github.com/alicevision/Meshroom/pull/2106) - [nodes] HDR Fusion: Correctly detect the number of brackets when there are several intrinsics [PR](https://github.com/alicevision/Meshroom/pull/2104) - [nodes] ImageSegmentation: use ChoiceParam instead of ListAttribute for validClasses [PR](https://github.com/alicevision/Meshroom/pull/2109) - [Panorama] Enforce priors after estimation [PR](https://github.com/alicevision/Meshroom/pull/1926) - tolerant bracket size selection [PR](https://github.com/alicevision/Meshroom/pull/2113) - [nodes] HDR Fusion: Do not send `nbBrackets` parameter to the command line when the bracket detection is automatic [PR](https://github.com/alicevision/Meshroom/pull/2117) - [nodes] Remove limits on outliers for brackets detection [PR](https://github.com/alicevision/Meshroom/pull/2118) - [nodes] LdrToHdrSampling: Exclude outliers from size computation [PR](https://github.com/alicevision/Meshroom/pull/2119) - [nodes] HDR Fusion: Select group with largest bracket number in case of equality [PR](https://github.com/alicevision/Meshroom/pull/2121) - [nodes] new exportLevels option in PanoramaPostProcessing [PR](https://github.com/alicevision/Meshroom/pull/2133) - [ui] GraphEditor: Minor UI changes [PR](https://github.com/alicevision/Meshroom/pull/2125) - [pipelines] publish downscaled panorama levels [PR](https://github.com/alicevision/Meshroom/pull/2147) - [nodes] HDR Fusion: Use the same bracket detection as in AliceVision [PR](https://github.com/alicevision/Meshroom/pull/2154) - AttributeEditor: Flag attributes with invalid values [PR](https://github.com/alicevision/Meshroom/pull/2141) - [pipelines] Add colors for CameraTracking and Photog+CamTrack templates [PR](https://github.com/alicevision/Meshroom/pull/2114) - [pipelines] add ImageSegmentation node to tracking pipelines [PR](https://github.com/alicevision/Meshroom/pull/2164) - Camera exposure update [PR](https://github.com/alicevision/Meshroom/pull/2159) - PanoramaInit: remove fake dependency [PR](https://github.com/alicevision/Meshroom/pull/2110) - [nodes] Masking: Handle file extensions for masks and mask inversion for `ImageSegmentation` [PR](https://github.com/alicevision/Meshroom/pull/2165) - [nodes] KeyframeSelection: Add `minBlockSize` param for multi-threading [PR](https://github.com/alicevision/Meshroom/pull/2161) - [nodes] KeyframeSelection: Add support for masks [PR](https://github.com/alicevision/Meshroom/pull/2167) - KeyframeSelection: Flag `outputExtension` attribute when it is set to "none" for video inputs [PR](https://github.com/alicevision/Meshroom/pull/2163) - [blender] apply masks to scene preview [PR](https://github.com/alicevision/Meshroom/pull/2170) - Add automatic method for HDR calibration [PR](https://github.com/alicevision/Meshroom/pull/2169) - Multiple UI Improvements [PR](https://github.com/alicevision/Meshroom/pull/2173) - [ui] FloatImageViewer: adapt resolution to zoom [PR](https://github.com/alicevision/Meshroom/pull/2148) - [nodes] StructureFromMotion: Add new `logIntermediateSteps` parameter [PR](https://github.com/alicevision/Meshroom/pull/2182) - sfm bootstraping [PR](https://github.com/alicevision/Meshroom/pull/2011) - [nodes] PanoramaPostProcessing: Add attributes to change the outputs' names [PR](https://github.com/alicevision/Meshroom/pull/2193) - [nodes] Meshing: expose minVis param [PR](https://github.com/alicevision/Meshroom/pull/2196) - [ui] SequencePlayer: minor adjustments (fps, icon, play) [PR](https://github.com/alicevision/Meshroom/pull/2197) - [pipelines] Rename Nodal Tracking to Nodal Camera Tracking [PR](https://github.com/alicevision/Meshroom/pull/2207) - [nodes] DepthMap: increase size of blocks [PR](https://github.com/alicevision/Meshroom/pull/2203) - [ui] ImageGallery: Add "Remove All Images" menu to clear all images [PR](https://github.com/alicevision/Meshroom/pull/2221) - [bin] `meshroom_batch`: Add support for relative input and output paths [PR](https://github.com/alicevision/Meshroom/pull/2218) - [pipelines] CamTrack: Add new template without calibration and update some parameters [PR](https://github.com/alicevision/Meshroom/pull/2216) - Input color space setting [PR](https://github.com/alicevision/Meshroom/pull/2219) - Use new SfmDataEntity plugin instead of AlembicEntity [PR](https://github.com/alicevision/Meshroom/pull/2208) - [Viewer3D] Remove AlembicLoader file [PR](https://github.com/alicevision/Meshroom/pull/2228) - [pipelines] CamTrack: Update default params for keyframes SfM [PR](https://github.com/alicevision/Meshroom/pull/2227) - [pipelines] PhotogAndCamTrack: Disable automatic alignment in SfM [PR](https://github.com/alicevision/Meshroom/pull/2238) - Automatic reorientation [PR](https://github.com/alicevision/Meshroom/pull/2236) - Minor code clean-up and QML warning and error fixes [PR](https://github.com/alicevision/Meshroom/pull/2226) - Add ancestor images info in view [PR](https://github.com/alicevision/Meshroom/pull/2242) - [Viewer3D] Connect any change of the selected view ID to the SfmDataLoader [PR](https://github.com/alicevision/Meshroom/pull/2237) - New utility nodes to create camera rigs and merge two sfmData [PR](https://github.com/alicevision/Meshroom/pull/2214) - [pipelines] Add image segmentation to the Nodal Camera Tracking template [PR](https://github.com/alicevision/Meshroom/pull/2266) ### Bugfixes - QML: Fix minor coercion error and warning [PR](https://github.com/alicevision/Meshroom/pull/2107) - [ScenePreview] fix: 1st chunk was computing all views [PR](https://github.com/alicevision/Meshroom/pull/2108) - [bin] meshroom_batch: Save the graph once it has been all set up and resolved [PR](https://github.com/alicevision/Meshroom/pull/2095) - [nodes] HDR Fusion: Fix bracket detection [PR](https://github.com/alicevision/Meshroom/pull/2143) - [core] Preserve edges by recreating all the nodes during UID evaluation [PR](https://github.com/alicevision/Meshroom/pull/2127) - [bin] `meshroom_batch`: Fix input parsing for Windows [PR](https://github.com/alicevision/Meshroom/pull/2188) - [nodes] ImageSegmentation: increase GPU requirements [PR](https://github.com/alicevision/Meshroom/pull/2195) - [ui] ImageGallery: Disable "Visualize HDR" button after clearing images [PR](https://github.com/alicevision/Meshroom/pull/2180) - [ui] Check for the existence of the `poses` key in SfM JSON files before accessing it [PR](https://github.com/alicevision/Meshroom/pull/2190) - [nodes] CameraInit: fix tooltip focal is in mm [PR](https://github.com/alicevision/Meshroom/pull/2202) - [ui] Viewer2D: various orientation fixes [PR](https://github.com/alicevision/Meshroom/pull/2212) - [ui] ImageGallery: Use commands to set SfM attributes through the Image Gallery [PR](https://github.com/alicevision/Meshroom/pull/2220) - [ui] Preserve last `CameraInit` index when updating the CameraInits list [PR](https://github.com/alicevision/Meshroom/pull/2145) - [ui] Don't load a node's output in the 3DViewer if it has no 3D output [PR](https://github.com/alicevision/Meshroom/pull/2230) - [pipelines] Photogrammetry Draft: Add a `PrepareDenseScene` node to the template [PR](https://github.com/alicevision/Meshroom/pull/2232) - [Viewer3D] Bind the display status of the resection groups to QtAliceVision [PR](https://github.com/alicevision/Meshroom/pull/2257) - [core] Only update the running chunk to `STOPPED` when stopping computations [PR](https://github.com/alicevision/Meshroom/pull/2258) ### CI, Build and Documentation - Update build-ubuntu.sh [PR](https://github.com/alicevision/Meshroom/pull/1951) - Set `ALICEVISION_SEMANTIC_SEGMENTATION_MODEL` variable during the initialisation [PR](https://github.com/alicevision/Meshroom/pull/2090) - [build] Remove references to QmlAlembic in the build process [PR](https://github.com/alicevision/Meshroom/pull/2131) ### Contributors [almarouk](https://github.com/almarouk), [cbentejac](https://github.com/cbentejac), [demoulinv](https://github.com/demoulinv), [fabiencastan](https://github.com/fabiencastan), [gregoire-dl](https://github.com/gregoire-dl), [mugulmd](https://github.com/mugulmd), [rakhnin](https://github.com/rakhnin), [servantftechnicolor](https://github.com/servantftechnicolor) ## Meshroom 2023.2.0 (2023/06/26) Based on [AliceVision 3.1.0](https://github.com/alicevision/AliceVision/tree/v3.1.0). ### Major Features - New Photometric Stereo nodes [PR](https://github.com/alicevision/Meshroom/pull/1853) - [nodes] New CheckerboardDetection node [PR](https://github.com/alicevision/Meshroom/pull/1869) - [nodes] Split360Images: support for SfMData file input and output [PR](https://github.com/alicevision/Meshroom/pull/1939) - [sfmTransform] add auto mode [PR](https://github.com/alicevision/Meshroom/pull/1954) - [nodes] DepthMap: New option for multi-resolution similarity estimation and optimizations [PR](https://github.com/alicevision/Meshroom/pull/1984) - [nodes] Distortion calibration [PR](https://github.com/alicevision/Meshroom/pull/1986) - Add a template for the HDR fusion [PR](https://github.com/alicevision/Meshroom/pull/2032) - [pipelines] new CameraTracking pipeline [PR](https://github.com/alicevision/Meshroom/pull/2033) - [pipelines] new photogrammetry and camera tracking pipeline [PR](https://github.com/alicevision/Meshroom/pull/2041) ### Features - StructureFromMotion: Add new inputs parameters [PR](https://github.com/alicevision/Meshroom/pull/1980) - [panorama] option to build contact sheet [PR](https://github.com/alicevision/Meshroom/pull/1945) - Stitching color space [PR](https://github.com/alicevision/Meshroom/pull/1937) - Add compression option for exr and jpg images [PR](https://github.com/alicevision/Meshroom/pull/1972) - Add rec709 color space options [PR](https://github.com/alicevision/Meshroom/pull/1978) - [nodes] rewrite RenderAnimatedCamera [PR](https://github.com/alicevision/Meshroom/pull/2030) - [core] Detect and handle UID conflicts when loading a graph [PR](https://github.com/alicevision/Meshroom/pull/2059) ### Other Improvements - Start Development Version 2023.2.0 [PR](https://github.com/alicevision/Meshroom/pull/1953) - [core] Correctly parse status in version names when it exists [PR](https://github.com/alicevision/Meshroom/pull/1966) - [tests] TemplatesVersion: Add message when compatibility assertion is raised [PR](https://github.com/alicevision/Meshroom/pull/1964) - [ui] add new patterns to load images in viewer2D [PR](https://github.com/alicevision/Meshroom/pull/1975) - [nodes] KeyframeSelection: Add support for SfMData files as inputs and outputs [PR](https://github.com/alicevision/Meshroom/pull/1967) - [panorama] Panorama preview size [PR](https://github.com/alicevision/Meshroom/pull/1944) - add trackbuilder node [PR](https://github.com/alicevision/Meshroom/pull/1987) - [submitters] propagate REZ_PROD_PACKAGES_PATH environment variable [PR](https://github.com/alicevision/Meshroom/pull/1992) - HDR images naming [PR](https://github.com/alicevision/Meshroom/pull/1999) - [nodes] StructureFromMotion: new nbOutliersThreshold attribute [PR](https://github.com/alicevision/Meshroom/pull/2014) - [ui] Reflect changes made in QtAliceVision refactorize PR [PR](https://github.com/alicevision/Meshroom/pull/1924) - Exposure and format adjustment [PR](https://github.com/alicevision/Meshroom/pull/1983) - [nodes] SfMTransform: add alignGround option [PR](https://github.com/alicevision/Meshroom/pull/2020) - [nodes] ScenePreview: use base image name for naming output [PR](https://github.com/alicevision/Meshroom/pull/2035) - [nodes] KeyframeSelection: Set a dynamic size for the node [PR](https://github.com/alicevision/Meshroom/pull/2039) - KeyframeSelection: Add new parameter value to disable the export of keyframes [PR](https://github.com/alicevision/Meshroom/pull/2036) - Viewer2D: Dynamically update the list of viewable outputs [PR](https://github.com/alicevision/Meshroom/pull/2044) - [ui] ImageGallery: Display the name of the active `CameraInit` group [PR](https://github.com/alicevision/Meshroom/pull/2046) - [nodes] StereoPhotometry: Fix some labels and descriptions [PR](https://github.com/alicevision/Meshroom/pull/2034) - [ui] Display an icon on nodes that have viewable outputs [PR](https://github.com/alicevision/Meshroom/pull/2047) - [ui] Display an icon on nodes that have viewable 3D outputs [PR](https://github.com/alicevision/Meshroom/pull/2052) - [pipelines] cameraTracking: change StructureFromMotion parameters [PR](https://github.com/alicevision/Meshroom/pull/2055) - [nodes] Harmonize and improve nodes descriptions [PR](https://github.com/alicevision/Meshroom/pull/2063) - [blender] preview: use cycles render engine [PR](https://github.com/alicevision/Meshroom/pull/2064) - [blender] preview: occlusions in wireframe shading [PR](https://github.com/alicevision/Meshroom/pull/2071) ### Bugfixes, Build and Documentation - [doc] RELEASING: Add example command to generate the release note [PR](https://github.com/alicevision/Meshroom/pull/1990) - [core] Stats: Retrieve and set the GPU name if it is found [PR](https://github.com/alicevision/Meshroom/pull/1996) - [bin] Fix all the scripts that had errors [PR](https://github.com/alicevision/Meshroom/pull/1995) - [ui] ImageGallery: Reset viewpoints and intrinsics when removing all the images [PR](https://github.com/alicevision/Meshroom/pull/2031) - [nodes] CameraInit: access intrinsic properties safely [PR](https://github.com/alicevision/Meshroom/pull/2040) - [blender] preview: handle background image not found [PR](https://github.com/alicevision/Meshroom/pull/2045) - Bump requests from 2.22.0 to 2.31.0 [PR](https://github.com/alicevision/Meshroom/pull/2018) - [blender] preview: clear loaded images to avoid memory leak [PR](https://github.com/alicevision/Meshroom/pull/2053) - Fix submit through simpleFarm [PR](https://github.com/alicevision/Meshroom/pull/2054) - [ui] thumbnails: fallback if thumbnailDir could not be created [PR](https://github.com/alicevision/Meshroom/pull/2057) - [core] fix transitive reduction when submitting graph [PR](https://github.com/alicevision/Meshroom/pull/2058) - [doc] Update readme for custom pipelines and nodes [PR](https://github.com/alicevision/Meshroom/pull/2009) - [core] Include the node's type in the UID computation [PR](https://github.com/alicevision/Meshroom/pull/2038) - [doc] INSTALL: Add info about the sphere detection model [PR](https://github.com/alicevision/Meshroom/pull/2067) - [blender] preview: use Freestyle for line art shading [PR](https://github.com/alicevision/Meshroom/pull/2074) - Set `ALICEVISION_SPHERE_DETECTION_MODEL` variable during the initialisation [PR](https://github.com/alicevision/Meshroom/pull/2083) ### Contributors [almarouk](https://github.com/almarouk), [cbentejac](https://github.com/cbentejac), [demoulinv](https://github.com/demoulinv), [earlywill](https://github.com/earlywill), [erikjwaxx](https://github.com/erikjwaxx), [fabiencastan](https://github.com/fabiencastan), [Garoli](https://github.com/Garoli), [gregoire-dl](https://github.com/gregoire-dl), [ICIbrahim](https://github.com/ICIbrahim), [jmelou](https://github.com/jmelou), [mugulmd](https://github.com/mugulmd), [serguei-k](https://github.com/serguei-k), [servantftechnicolor](https://github.com/servantftechnicolor), [simogasp](https://github.com/simogasp) ## Meshroom 2023.1.0 (2023/03/22) Based on [AliceVision 3.0.0](https://github.com/alicevision/AliceVision/tree/v3.0.0). ### Release Notes Summary - Major improvements of the depth map quality, performances and scalability. The full resolution can now be computed on most of the standard GPUs. - FeatureExtraction is now using DSP-SIFT by default for the 3D Reconstruction pipeline. - Capacity to create panoramas with very high resolutions using a limited amount of memory. - Enhanced interpretation of RAW images, including new support for Adobe Digital Camera Profile and Lens Camera Profiles databases (if installed on your workstation). - Improved color management with OCIO support and more options to export in various colorspaces including ACEScg. - New graph templates enabling users to create custom pipelines. - Expose a new experimental pipeline for Camera Tracking. - Improved GraphEditor with copy-paste and multi-selection. - Improved ImageGallery with thumbnails cache and search options. - 2D Viewer is now using floating-point images by default. - And a very large amount of UI improvements and bug fixes. ### Main Features - [nodes] DepthMap: depth map improvements [PR](https://github.com/alicevision/Meshroom/pull/1818) - Integration of AprilTag library according to issue #1179 and AliceVision pull request #950 [PR](https://github.com/alicevision/Meshroom/pull/1180) - [nodes] add gps option to SfMTransform [PR](https://github.com/alicevision/Meshroom/pull/1477) - [ui] add support for selecting multiple nodes at once [PR](https://github.com/alicevision/Meshroom/pull/1227) - Image Gallery: Add a menu to set the StructureFromMotion initial pair from the gallery [PR](https://github.com/alicevision/Meshroom/pull/1936) - Texturing Color Space [PR](https://github.com/alicevision/Meshroom/pull/1933) - Add support for Lens Camera Profiles (LCP) [PR](https://github.com/alicevision/Meshroom/pull/1771) - RAW advanced processing [PR](https://github.com/alicevision/Meshroom/pull/1918) - Add new file watcher behaviours [PR](https://github.com/alicevision/Meshroom/pull/1812) - Add internal attributes in "Notes" tab [PR](https://github.com/alicevision/Meshroom/pull/1744) - New nodes for large memory use in panoramas [PR](https://github.com/alicevision/Meshroom/pull/1819) - [ui] Thumbnail cache [PR](https://github.com/alicevision/Meshroom/pull/1861) - [nodes] new SfMTriangulation node [PR](https://github.com/alicevision/Meshroom/pull/1842) - Color management for RAW images [PR](https://github.com/alicevision/Meshroom/pull/1718) - [ui] image gallery search bar [PR](https://github.com/alicevision/Meshroom/pull/1816) - [ui] Viewer 2D: enable the HDR viewer by default [PR](https://github.com/alicevision/Meshroom/pull/1793) - [ui] Improve the manipulator of the panorama viewer [PR](https://github.com/alicevision/Meshroom/pull/1707) - Color space management [PR](https://github.com/alicevision/Meshroom/pull/1792) - Show generated images in 2D viewer when double-clicking on node [PR](https://github.com/alicevision/Meshroom/pull/1776) - [ui] Elapsed time indicators in log [PR](https://github.com/alicevision/Meshroom/pull/1787) - [nodes] SfMTransform: add auto_from_cameras_x_axis [PR](https://github.com/alicevision/Meshroom/pull/1390) - Graph Editor: Support copy/paste of selected nodes and scene import [PR](https://github.com/alicevision/Meshroom/pull/1758) - [Feature Matching] Add an option to remove matches without enough motion [PR](https://github.com/alicevision/Meshroom/pull/1740) - Output in ACES or ACEScg color space [PR](https://github.com/alicevision/Meshroom/pull/1681) - Use project files to define pipelines [PR](https://github.com/alicevision/Meshroom/pull/1727) - [nodes] StructureFromMotion: Add option computeStructureColor [PR](https://github.com/alicevision/Meshroom/pull/1635) - [core] add env var to load nodes from multiple folders [PR](https://github.com/alicevision/Meshroom/pull/1616) - Depth map refactoring [PR](https://github.com/alicevision/Meshroom/pull/680) - Draft Reconstruction pipeline [PR](https://github.com/alicevision/Meshroom/pull/1489) - [ui] Add filters to image gallery [PR](https://github.com/alicevision/Meshroom/pull/1500) - [nodes] New node "RenderAnimatedCamera" using blender API [PR](https://github.com/alicevision/Meshroom/pull/1432) - New node to import known poses for various file formats [PR](https://github.com/alicevision/Meshroom/pull/1475) - New ImageMasking and MeshMasking nodes [PR](https://github.com/alicevision/Meshroom/pull/1483) - Create Split360Images Node [PR](https://github.com/alicevision/Meshroom/pull/1464) - New lens distortion calibration node [PR](https://github.com/alicevision/Meshroom/pull/1403) - New experimental camera tracking pipeline [PR](https://github.com/alicevision/Meshroom/pull/1379) - [multiview] New pipeline "Photogrammetry and Camera Tracking" [PR](https://github.com/alicevision/Meshroom/pull/1429) - [nodes] KeyframeSelection: Rework the node and add parameters for new selection methods [PR](https://github.com/alicevision/Meshroom/pull/1880) ### Other Improvements - [nodes] ImageProcessing: Add and hide the fringing correction in the LCP [PR](https://github.com/alicevision/Meshroom/pull/1930) - Update highlight mode description in imageProcessing node [PR](https://github.com/alicevision/Meshroom/pull/1928) - [ui] Prompt a warning dialog when attempting to submit an unsaved project [PR](https://github.com/alicevision/Meshroom/pull/1927) - [panorama] force pyramid levels count in compositing [PR](https://github.com/alicevision/Meshroom/pull/1919) - [ui] Add a new advanced menu action to load templates like regular projects [PR](https://github.com/alicevision/Meshroom/pull/1920) - [panorama] New option to disable compositing tiling [PR](https://github.com/alicevision/Meshroom/pull/1916) - [sfmtransform] Transformation parameter availability [PR](https://github.com/alicevision/Meshroom/pull/1876) - Apply DCP metadata in imageProcessing [PR](https://github.com/alicevision/Meshroom/pull/1879) - [ui] FeaturesViewer: track endpoints [PR](https://github.com/alicevision/Meshroom/pull/1838) - LdrToHdrMerge node: Add a checkbox enabling the manual setting of the reference bracket for HDR merging [PR](https://github.com/alicevision/Meshroom/pull/1849) - [ui] Display nodes computed in another Meshroom instance as "Computed Externally" [PR](https://github.com/alicevision/Meshroom/pull/1862) - [ui] Use the location of the most recently imported images as the base folder for the "Import Images" dialog [PR](https://github.com/alicevision/Meshroom/pull/1864) - [ui] GraphEditor: use maxZoom to fit on nodes [PR](https://github.com/alicevision/Meshroom/pull/1865) - [ui] Viewer2D: support all Exif orientation tags [PR](https://github.com/alicevision/Meshroom/pull/1857) - Use DCP by default if the database is set and create errors on missing DCP files [PR](https://github.com/alicevision/Meshroom/pull/1863) - [ui] Load 3D Depth Map: minor improvements [PR](https://github.com/alicevision/Meshroom/pull/1852) - [ui] Checkbox to enable/disable 8-bit viewer [PR](https://github.com/alicevision/Meshroom/pull/1858) - Add Ripple submitter [PR](https://github.com/alicevision/Meshroom/pull/1844) - [ui] ImageGallery: Increase the GridView's cache capacity [PR](https://github.com/alicevision/Meshroom/pull/1855) - [ui] Reorganize the "File" menu [PR](https://github.com/alicevision/Meshroom/pull/1856) - [nodes] rename: remove "utils" from executables names [PR](https://github.com/alicevision/Meshroom/pull/1848) - [ui] Integrate QtOIIO into QtAliceVision [PR](https://github.com/alicevision/Meshroom/pull/1831) - Add nl means denoising open cv in image processing node [PR](https://github.com/alicevision/Meshroom/pull/1719) - [core] Add cgroups support to meshroom [PR](https://github.com/alicevision/Meshroom/pull/1836) - Remove support for Python 2 [PR](https://github.com/alicevision/Meshroom/pull/1837) - [submitters] Add an option to update the job title on submitters [PR](https://github.com/alicevision/Meshroom/pull/1824) - [ui] GraphEditor: create new pipelines with the node menu [PR](https://github.com/alicevision/Meshroom/pull/1833) - [bin] meshroom_batch: allow passing list of values to param overrides [PR](https://github.com/alicevision/Meshroom/pull/1811) - [ui] ImageGallery: update the Viewer2D correctly when the GridView's current item changes [PR](https://github.com/alicevision/Meshroom/pull/1823) - [ui] keyboard shortcut: press tab to open node menu [PR](https://github.com/alicevision/Meshroom/pull/1813) - Update bounding box display to use the correct geometric frame [PR](https://github.com/alicevision/Meshroom/pull/1805) - [ui] Paste nodes at the center of the Graph Editor when it does not contain the mouse [PR](https://github.com/alicevision/Meshroom/pull/1788) - Use most recent project as base folder for file dialogs [PR](https://github.com/alicevision/Meshroom/pull/1778) - [ui] Restrain the "copy/paste nodes" shortcuts to the GraphEditor [PR](https://github.com/alicevision/Meshroom/pull/1782) - [core] Set the "template" flag to "false" when saving a project as a regular file [PR](https://github.com/alicevision/Meshroom/pull/1777) - [ui] Display computation time for "running" or "finished" nodes [PR](https://github.com/alicevision/Meshroom/pull/1764) - Removed duplicated call to findnodes [PR](https://github.com/alicevision/Meshroom/pull/1767) - Add dedicated "minimal" mode for templates [PR](https://github.com/alicevision/Meshroom/pull/1754) - [ui] Reduce confusion when qml loading fails [PR](https://github.com/alicevision/Meshroom/pull/1728) - [ui] Update intrinsics table when switching between groups [PR](https://github.com/alicevision/Meshroom/pull/1755) - [bin] batch: allow to set params inside groups [PR](https://github.com/alicevision/Meshroom/pull/1665) - [camerainit] update parameters to use focal in mm [PR](https://github.com/alicevision/Meshroom/pull/1652) - [bin] newNodeType: update [PR](https://github.com/alicevision/Meshroom/pull/1630) - [minor] renderfarm submission with rez [PR](https://github.com/alicevision/Meshroom/pull/1629) - [ui] widgets visibility options [PR](https://github.com/alicevision/Meshroom/pull/1545) - [bin] Avoid multi-threading in non-interactive computation [PR](https://github.com/alicevision/Meshroom/pull/1553) - [nodes] Mesh*: use file extension to choose the file format [PR](https://github.com/alicevision/Meshroom/pull/1524) - Upgrade Texturing node and add multiples mesh file types [PR](https://github.com/alicevision/Meshroom/pull/1508) - Optical center relative to the image center [PR](https://github.com/alicevision/Meshroom/pull/1509) - [core] Improve project files upgrade [PR](https://github.com/alicevision/Meshroom/pull/1503) - [ui] Add a clear images button [PR](https://github.com/alicevision/Meshroom/pull/1467) - [ui] highlight the edge that will be deleted [PR](https://github.com/alicevision/Meshroom/pull/1434) - Update 2d viewer for new Track drawing mode of QtAliceVision [PR](https://github.com/alicevision/Meshroom/pull/1435) - Add cli script to start Meshroom on Windows [PR](https://github.com/alicevision/Meshroom/pull/1169) - Allow replacing edges [PR](https://github.com/alicevision/Meshroom/pull/1355) - No cmd line range arguments if we have only a single chunk [PR](https://github.com/alicevision/Meshroom/pull/1426) - [nodes] ExportAnimatedCameras: new sfmDataFilter parameter [PR](https://github.com/alicevision/Meshroom/pull/1428) - Node highlight radius [PR](https://github.com/alicevision/Meshroom/pull/1357) ### Bug Fixes, Build and Documentation - [ui] Fix conditions on which the prompt asking the user to save a project before submitting it to the render farm relies [PR](https://github.com/alicevision/Meshroom/pull/1942) - [ui] ImageGallery: Allow image drop if the active group is not computing [PR](https://github.com/alicevision/Meshroom/pull/1941) - [ui] Viewer2D: fix displayed metadata [PR](https://github.com/alicevision/Meshroom/pull/1915) - [setup] add all scripts in bin/ as executables [PR](https://github.com/alicevision/Meshroom/pull/1419) - Add a unit test to check the node versions of templates [PR](https://github.com/alicevision/Meshroom/pull/1799) - [nodes] Split360Images: update attributes to software version 2.0 [PR](https://github.com/alicevision/Meshroom/pull/1935) - [ci] upgrade github actions rules [PR](https://github.com/alicevision/Meshroom/pull/1834) - Update INSTALL.md [PR](https://github.com/alicevision/Meshroom/pull/1803) - [docs] Python documentation generation using Sphinx [PR](https://github.com/alicevision/Meshroom/pull/1794) - Documentation update : how to use Meshroom without building AliceVision [PR](https://github.com/alicevision/Meshroom/pull/1487) - [pipelines] Panorama: Fix inputs of the "Publish" nodes [PR](https://github.com/alicevision/Meshroom/pull/1922) - [nodes] ExportAnimatedCameras: fix output params labels [PR](https://github.com/alicevision/Meshroom/pull/1911) - [nodes] PanoramaWarping: remove obsolete image output attributes [PR](https://github.com/alicevision/Meshroom/pull/1914) - Fix the documentation related to Panorama nodes [PR](https://github.com/alicevision/Meshroom/pull/1917) - Fix missing Publish nodes in templates [PR](https://github.com/alicevision/Meshroom/pull/1903) - [ui] Intrinsics: Fix warnings and exceptions [PR](https://github.com/alicevision/Meshroom/pull/1898) - [ui] fix thumbnail cache bugs [PR](https://github.com/alicevision/Meshroom/pull/1893) - [ImageGallery] Match the filter selection with the gallery's display [PR](https://github.com/alicevision/Meshroom/pull/1899) - [ui] fix "Sync Camera with Image Selection" [PR](https://github.com/alicevision/Meshroom/pull/1888) - Fix exceptions raised when accessing attributes that either do not exist or are not associated to a graph [PR](https://github.com/alicevision/Meshroom/pull/1889) - fix(sec): upgrade psutil to 5.6.7 [PR](https://github.com/alicevision/Meshroom/pull/1843) - [ui] Fix all "TypeError" QML warnings [PR](https://github.com/alicevision/Meshroom/pull/1839) - [ui] Viewer2D: fix minor issues [PR](https://github.com/alicevision/Meshroom/pull/1829) - Fix crash when importing images with non-ascii characters in their filepath [PR](https://github.com/alicevision/Meshroom/pull/1809) - Fix and prevent mismatches between an attribute's type and its default value's type [PR](https://github.com/alicevision/Meshroom/pull/1784) - Fix various typos [PR](https://github.com/alicevision/Meshroom/pull/1768) - [ui] ImageGallery: fix some minor issues [PR](https://github.com/alicevision/Meshroom/pull/1766) - [core] fix logging of nodes loading [PR](https://github.com/alicevision/Meshroom/pull/1748) - Fix node duplication/removal behaviour [PR](https://github.com/alicevision/Meshroom/pull/1738) - [ui] Fix offset between the mouse's position and the tip of the edge when connecting two nodes [PR](https://github.com/alicevision/Meshroom/pull/1732) - Fix compatibility with Python 3 [PR](https://github.com/alicevision/Meshroom/pull/1734) - Fix stats [PR](https://github.com/alicevision/Meshroom/pull/1704) - [ui] ImageGallery: fix missing function changeCurrentIndex [PR](https://github.com/alicevision/Meshroom/pull/1679) - [UI] StatViewer: fix displayed unit [PR](https://github.com/alicevision/Meshroom/pull/1547) - [ui] fix uvCenterOffset [PR](https://github.com/alicevision/Meshroom/pull/1551) - Fix meshroom_batch [PR](https://github.com/alicevision/Meshroom/pull/1521) - Fix incompatibility with recent cx_Freeze [PR](https://github.com/alicevision/Meshroom/pull/1480) - [bin] meshroom_batch: fix typo in pipeline names [PR](https://github.com/alicevision/Meshroom/pull/1377) - Removing `io_counters` from the ProcStatatistics [PR](https://github.com/alicevision/Meshroom/pull/1374) - Fix NameError [PR](https://github.com/alicevision/Meshroom/pull/1312) - [ui] Image Gallery: Fix the display of the intrinsics table with temporary CameraInit nodes [PR](https://github.com/alicevision/Meshroom/pull/1934) - [ui] Correctly update the Viewer 2D when there are temporary CameraInit nodes [PR](https://github.com/alicevision/Meshroom/pull/1931) - [ui] Clear Images: Request a graph update after resetting the viewpoints and intrinsics [PR](https://github.com/alicevision/Meshroom/pull/1929) - [ui] Improve "Clear Images" action's behaviour and performance [PR](https://github.com/alicevision/Meshroom/pull/1897) - [Viewer] Load and unload the SfMStats components explicitly every time they are shown and hidden [PR](https://github.com/alicevision/Meshroom/pull/1912) - [ui] Drag&Drop: Use a pool of threads for asynchronous intrinsics computations [PR](https://github.com/alicevision/Meshroom/pull/1896) - [nodes] CameraInit: upgrade version following the parameters changes [PR](https://github.com/alicevision/Meshroom/pull/1874) - [ui] app: temporary workaround for qInstallMessageHandler [PR](https://github.com/alicevision/Meshroom/pull/1873) - [ui] ImageGallery: fix the DB path in the "Edit Sensor Database" dialog [PR](https://github.com/alicevision/Meshroom/pull/1860) - [ui] Correctly determine if a graph is being computed locally and update nodes' statuses accordingly [PR](https://github.com/alicevision/Meshroom/pull/1832) - [nodes] CameraInit: all intrinsics parameters should invalidate [PR](https://github.com/alicevision/Meshroom/pull/1747) - [ci] add bug to the list of tag to skip the stale check [PR](https://github.com/alicevision/Meshroom/pull/1745) - Fix various typos in the source code [PR](https://github.com/alicevision/Meshroom/pull/1606) - Update ion startup [PR](https://github.com/alicevision/Meshroom/pull/1815) - New script to launch meshroom under ion environment [PR](https://github.com/alicevision/Meshroom/pull/1783) - [doc] fix the bibtex [PR](https://github.com/alicevision/Meshroom/pull/1537) - [doc] readme: add citation [PR](https://github.com/alicevision/Meshroom/pull/1520) ### Contributors Thanks to [Fabien Servant](https://github.com/servantftechnicolor), [Gregoire De Lillo](https://github.com/gregoire-dl), [Vincent Demoulin](https://github.com/demoulinv), [Thomas Zorroche](https://github.com/Thomas-Zorroche), [Povilas Kanapickas](https://github.com/p12tic), [Simone Gasparini](https://github.com/simogasp), [Candice Bentejac](https://github.com/cbentejac), [Loic Vital](https://github.com/mugulmd), [Charles Johnson](https://github.com/ChemicalXandco), [Jean Melou](https://github.com/jmelou), [Matthieu Hog](https://github.com/mh0g), [Simon Schuette](https://github.com/natowi), [Ludwig Chieng](https://github.com/ludchieng), [Vincent Scavinner](https://github.com/vscav), [Nils Landrodie](https://github.com/N0Ls), [Stella Tan](https://github.com/tanstella) for the major contributions. Other release contributors: [asoftbird](https://github.com/asoftbird), [DanielDelaporus](https://github.com/DanielDelaporus), [DataBeaver](https://github.com/DataBeaver), [elektrokokke](https://github.com/elektrokokke), [fabiencastan](https://github.com/fabiencastan), [Garoli](https://github.com/Garoli), [ghost](https://github.com/ghost), [hammady](https://github.com/hammady), [luzpaz](https://github.com/luzpaz), [MakersF](https://github.com/MakersF), [pen4](https://github.com/pen4), [remmel](https://github.com/remmel), [wolfgangp](https://github.com/wolfgangp) ## Release 2021.1.0 (2021/02/26) Based on [AliceVision 2.4.0](https://github.com/alicevision/AliceVision/tree/v2.4.0). ### Release Notes Summary - [panorama] PanoramaCompositing: new algorithm with tiles to deal with large panoramas [PR](https://github.com/alicevision/meshroom/pull/1173) - [feature] Improve robustness of sift features extraction on challenging images: update default values, add new filtering and add dsp-sift variation [PR](https://github.com/alicevision/meshroom/pull/1164) - [ui] Improve Graph Editor UX with better visualization of nodes connections, the ability to accumulate nodes to compute locally or the ability to compute multiple branches in parallel on renderfarm with a new locking system per node, etc. [PR](https://github.com/alicevision/meshroom/pull/612) - [nodes] Meshing: improve mesh quality with a new post-processing. Cells empty/full status are filtered by solid angle ratio to favor smoothness. [PR](https://github.com/alicevision/meshroom/pull/1274) - [nodes] MeshFiltering: smoothing & filtering on subset of the geometry [PR](https://github.com/alicevision/meshroom/pull/1272) - [ui] Viewer: fix gain/gamma behavior and use non-linear sliders [PR](https://github.com/alicevision/meshroom/pull/1092) ### Other Improvements and Bug Fixes - [core] taskManager: downgrade status per chunk [PR](https://github.com/alicevision/meshroom/pull/1210) - [core] Improve graph dependencies: dependencies to an input parameter is not a real dependency [PR](https://github.com/alicevision/meshroom/pull/1182) - [nodes] Meshing: Add `addMaskHelperPoints` option [PR](https://github.com/alicevision/meshroom/pull/1273) - [nodes] Meshing: More control on graph cut post processing [PR](https://github.com/alicevision/meshroom/pull/1284) - [nodes] Meshing: new cells filtering by solid angle ratio [PR](https://github.com/alicevision/meshroom/pull/1274) - [nodes] Meshing: add seed and voteFilteringForWeaklySupportedSurfaces [PR](https://github.com/alicevision/meshroom/pull/1268) - [nodes] Add some mesh utilities nodes [PR](https://github.com/alicevision/meshroom/pull/1271) - [nodes] SfmTransform: new from_center_camera [PR](https://github.com/alicevision/meshroom/pull/1281) - [nodes] Panorama: new options to init with known poses [PR](https://github.com/alicevision/meshroom/pull/1230) - [nodes] FeatureMatching: add cross verification [PR](https://github.com/alicevision/meshroom/pull/1276) - [nodes] ExportAnimatedCamera: New option to export undistort maps in EXR format [PR](https://github.com/alicevision/meshroom/pull/1229) - [nodes] new wip node `LightingEstimation` to estimate spherical harmonics from normal map and albedo [PR](https://github.com/alicevision/meshroom/pull/390) - [nodes] CameraInit: add a boolean for white balance use [PR](https://github.com/alicevision/meshroom/pull/1162) - [ui] fix error on live reconstruction [PR](https://github.com/alicevision/meshroom/pull/1145) - [ui] init saveAs folder [PR](https://github.com/alicevision/meshroom/pull/1099) - [ui] add link to online documentation in 'Help' menu [PR](https://github.com/alicevision/meshroom/pull/1279) - [ui] New node menu categories [PR](https://github.com/alicevision/meshroom/pull/1278) ## Release 2020.1.1 (2020/10/14) Based on [AliceVision 2.3.1](https://github.com/alicevision/AliceVision/tree/v2.3.1). - [core] Fix crashes on process statistics (windows-only) [PR](https://github.com/alicevision/meshroom/pull/1096) ## Release 2020.1.0 (2020/10/09) Based on [AliceVision 2.3.0](https://github.com/alicevision/AliceVision/tree/v2.3.0). ### Release Notes Summary - [nodes] New Panorama Stitching nodes with support for fisheye lenses [PR](https://github.com/alicevision/meshroom/pull/639) [PR](https://github.com/alicevision/meshroom/pull/808) - [nodes] HDR: Largely improved HDR calibration, including new LdrToHdrSampling for optimal sample selection [PR](https://github.com/alicevision/meshroom/pull/808) [PR](https://github.com/alicevision/meshroom/pull/1016) [PR](https://github.com/alicevision/meshroom/pull/990) - [ui] Viewer3D: Input bounding box (Meshing) & manual transformation (SfMTransform) thanks to a new 3D Gizmo [PR](https://github.com/alicevision/meshroom/pull/978) - [ui] Sync 3D camera with image selection [PR](https://github.com/alicevision/meshroom/pull/633) - [ui] New HDR (floating point) Image Viewer [PR](https://github.com/alicevision/meshroom/pull/795) - [ui] Ability to load depth maps into 2D and 3D Viewers [PR](https://github.com/alicevision/meshroom/pull/769) [PR](https://github.com/alicevision/meshroom/pull/657) - [ui] New features overlay in Viewer2D allows to display tracks and landmarks [PR](https://github.com/alicevision/meshroom/pull/873) [PR](https://github.com/alicevision/meshroom/pull/1001) - [ui] Add SfM statistics [PR](https://github.com/alicevision/meshroom/pull/873) - [ui] Visual interface for node resources usage [PR](https://github.com/alicevision/meshroom/pull/564) - [nodes] Coordinate system alignment to specific markers or between scenes [PR](https://github.com/alicevision/meshroom/pull/652) - [nodes] New Sketchfab upload node [PR](https://github.com/alicevision/meshroom/pull/712) - [ui] Dynamic Parameters: add a new 'enabled' property to node's attributes [PR](https://github.com/alicevision/meshroom/pull/1007) [PR](https://github.com/alicevision/meshroom/pull/1027) - [ui] Viewer: add Camera Response Function display [PR](https://github.com/alicevision/meshroom/pull/1020) [PR](https://github.com/alicevision/meshroom/pull/1041) - [ui] UI improvements in the Viewer2D and ImageGallery [PR](https://github.com/alicevision/meshroom/pull/823) - [bin] Improve Meshroom command line [PR](https://github.com/alicevision/meshroom/pull/759) [PR](https://github.com/alicevision/meshroom/pull/632) - [nodes] New ImageProcessing node [PR](https://github.com/alicevision/meshroom/pull/839) [PR](https://github.com/alicevision/meshroom/pull/970) [PR](https://github.com/alicevision/meshroom/pull/941) - [nodes] `FeatureMatching` Add `fundamental_with_distortion` option [PR](https://github.com/alicevision/meshroom/pull/931) - [multiview] Declare more recognized image file extensions [PR](https://github.com/alicevision/meshroom/pull/965) - [multiview] More generic metadata support [PR](https://github.com/alicevision/meshroom/pull/957) ### Other Improvements and Bug Fixes - [nodes] CameraInit: New viewId generation and selection of allowed intrinsics [PR](https://github.com/alicevision/meshroom/pull/973) - [core] Avoid error during project load on border cases [PR](https://github.com/alicevision/meshroom/pull/991) - [core] Compatibility : Improve list of groups update [PR](https://github.com/alicevision/meshroom/pull/791) - [core] Invalidation hooks [PR](https://github.com/alicevision/meshroom/pull/732) - [core] Log manager for Python based nodes [PR](https://github.com/alicevision/meshroom/pull/631) - [core] new Node Update Hooks mechanism [PR](https://github.com/alicevision/meshroom/pull/733) - [core] Option to make chunks optional [PR](https://github.com/alicevision/meshroom/pull/778) - [nodes] Add methods in ImageMatching and features in StructureFromMotion and FeatureMatching [PR](https://github.com/alicevision/meshroom/pull/768) - [nodes] FeatureExtraction: add maxThreads argument [PR](https://github.com/alicevision/meshroom/pull/647) - [nodes] Fix python nodes being blocked by log [PR](https://github.com/alicevision/meshroom/pull/783) - [nodes] ImageProcessing: add new option to fix non finite pixels [PR](https://github.com/alicevision/meshroom/pull/1057) - [nodes] Meshing: simplify input depth map folders [PR](https://github.com/alicevision/meshroom/pull/951) - [nodes] PanoramaCompositing: add a new graphcut option to improve seams [PR](https://github.com/alicevision/meshroom/pull/1026) - [nodes] PanoramaCompositing: option to select the percentage of upscaled pixels [PR](https://github.com/alicevision/meshroom/pull/1049) - [nodes] PanoramaInit: add debug circle detection option [PR](https://github.com/alicevision/meshroom/pull/1069) - [nodes] PanoramaInit: New parameter to set an extra image rotation to each camera declared the input xml [PR](https://github.com/alicevision/meshroom/pull/1046) - [nodes] SfmTransfer: New option to transfer intrinsics parameters [PR](https://github.com/alicevision/meshroom/pull/1053) - [nodes] StructureFromMotion: Add features’s scale as an option [PR](https://github.com/alicevision/meshroom/pull/822) [PR](https://github.com/alicevision/meshroom/pull/817) - [nodes] Texturing: add options for retopoMesh & reorganise options [PR](https://github.com/alicevision/meshroom/pull/571) - [nodes] Texturing: put downscale to 2 by default [PR](https://github.com/alicevision/meshroom/pull/1048) - [sfm] Add option to include 'unknown' feature types in ConvertSfMFormat, needed to be used on dense point cloud from the Meshing node [PR](https://github.com/alicevision/meshroom/pull/584) - [ui] Automatically update layout when needed [PR](https://github.com/alicevision/meshroom/pull/989) - [ui] Avoid crash in 3D with large panoramas [PR](https://github.com/alicevision/meshroom/pull/1061) - [ui] Fix graph axes naming for ram statistics [PR](https://github.com/alicevision/meshroom/pull/1033) - [ui] NodeEditor: minor improvements with single tab group and status table [PR](https://github.com/alicevision/meshroom/pull/637) - [ui] Viewer3D: Display equirectangular images as environment maps [PR](https://github.com/alicevision/meshroom/pull/731) - [windows] Fix open recent broken on windows and remove unnecessary warnings [PR](https://github.com/alicevision/meshroom/pull/940) ### Build, CI, Documentation - [build] Fix cxFreeze version for Python 2.7 compatibility [PR](https://github.com/alicevision/meshroom/pull/634) - [ci] Add github Actions [PR](https://github.com/alicevision/meshroom/pull/1051) - [ci] AppVeyor: Update build environment and save artifacts [PR](https://github.com/alicevision/meshroom/pull/875) - [ci] Travis: Update environment, remove Python 2.7 & add 3.8 [PR](https://github.com/alicevision/meshroom/pull/874) - [docker] Clean Dockerfiles [PR](https://github.com/alicevision/meshroom/pull/1054) - [docker] Move to PySide2 / Qt 5.14.1 - [docker] Fix some packaging issues of the release 2019.2.0 [PR](https://github.com/alicevision/meshroom/pull/627) - [github] Add exemptLabels [PR](https://github.com/alicevision/meshroom/pull/801) - [github] Add issue templates [PR](https://github.com/alicevision/meshroom/pull/579) - [github] Add template for questions / help only [PR](https://github.com/alicevision/meshroom/pull/629) - [github] Added automatic stale detection and closing for issues [PR](https://github.com/alicevision/meshroom/pull/598) - [python] Import ABC from collections.abc [PR](https://github.com/alicevision/meshroom/pull/983) For more details see all PR merged: https://github.com/alicevision/meshroom/milestone/10 See [AliceVision 2.3.0 Release Notes](https://github.com/alicevision/AliceVision/blob/v2.3.0/CHANGES.md) for more details about algorithmic changes. ## Release 2019.2.0 (2019/08/08) Based on [AliceVision 2.2.0](https://github.com/alicevision/AliceVision/tree/v2.2.0). Release Notes Summary: - Visualisation: New visualization module of the features extraction. [PR](https://github.com/alicevision/meshroom/pull/539), [New QtAliceVision](https://github.com/alicevision/QtAliceVision) - Support for RAW image files. - Texturing: Largely improve the Texturing quality. - Texturing: Speed improvements. - Texturing: Add support for UDIM. - Meshing: Export the dense point cloud in Alembic. - Meshing: New option to export the full raw dense point cloud (with all 3D points candidates before cut and filtering). - Meshing: Adds an option to export color data per vertex and MeshFiltering correctly preserves colors. Full Release Notes: - Move to PySide2 / Qt 5.13 - SfMDataIO: Change root nodes (XForms instead of untyped objects) of Alembic SfMData for better interoperability with other 3D graphics applications (in particular Blender and Houdini). - Improve performance of log display and node status update. [PR](https://github.com/alicevision/meshroom/pull/466) [PR](https://github.com/alicevision/meshroom/pull/548) - Viewer3D: Add support for vertex-colored meshes. [PR](https://github.com/alicevision/meshroom/pull/550) - New pipeline input for meshroom_photogrammetry command line and minor fixes to the input arguments. [PR](https://github.com/alicevision/meshroom/pull/567) [PR](https://github.com/alicevision/meshroom/pull/577) - New arguments to meshroom. [PR](https://github.com/alicevision/meshroom/pull/413) - HDR: New HDR module for the fusion of multiple LDR images. - PrepareDenseScene: Add experimental option to correct Exposure Values (EV) of input images to uniformize dataset exposures. - FeatureExtraction: Include CCTag in the release binaries both on Linux and Windows. - ConvertSfMFormat: Enable to use simple regular expressions in the image white list of the ConvertSfMFormat. This enables to filter out cameras based on their filename. For more details see all PR merged: https://github.com/alicevision/meshroom/milestone/9 See [AliceVision 2.2.0 Release Notes](https://github.com/alicevision/AliceVision/blob/v2.2.0/CHANGES.md) for more details about algorithmic changes. ## Release 2019.1.0 (2019/02/27) Based on [AliceVision 2.1.0](https://github.com/alicevision/AliceVision/tree/v2.1.0). Release Notes Summary: - 3D Viewer: Load and compare multiple assets with cache mechanism and improved navigation - Display camera intrinsic information extracted from metadata analysis - Easier access to a more complete sensor database with a more reliable camera model matching algorithm. - Attribute Editor: Hide advanced/experimental parameters by default to improve readability and simplify access to the most useful, high-level settings. Advanced users can still enable them to have full access to internal thresholds. - Graph Editor: Improved set of contextual tools with `duplicate`/`remove`/`delete data` actions with `From Here` option. - Nodes: Homogenization of inputs / outputs parameters - Meshing: Better, faster and configurable estimation of the space to reconstruct based on the sparse point cloud (new option `estimateSpaceFromSfM`). Favors high-density areas and helps removing badly defined ones. - Draft Meshing (no CUDA required): the result of the sparse reconstruction can now be directly meshed to get a 3D model preview without computing the depth maps. - MeshFiltering: Now keeps all reconstructed parts by default. - StructureFromMotion: Add support for rig of cameras - Support for reconstruction with projected light patterns and texturing with another set of images Full Release Notes: - Viewer3D: New Trackball camera manipulator for improved navigation in the scene - Viewer3D: New library system to load multiple 3D objects of the same type simultaneously, simplifying results comparisons - Viewer3D: Add media loading overlay with BusyIndicator - Viewer3D: Points and cameras size are now configurable via dedicated sliders. - CameraInit: Add option to lock specific cameras intrinsics (if you have high-quality internal calibration information) - StructureFromMotion: Triangulate points if the input scene contains valid camera poses and intrinsics without landmarks - PrepareDenseScene: New `imagesFolders` option to override input images. This enables to use images with light patterns projected for SfM and MVS parts and do the Texturing with another set of images. - NodeLog: Cross-platform monospace display - Remove `CameraConnection` and `ExportUndistortedImages` nodes - Multi-machine parallelization of `PrepareDenseScene` - Meshing: Add option `estimateSpaceFromSfM` and observation angles check to better estimate the bounding box of the reconstruction and avoid useless reconstruction of the environment - Console: Filter non silenced, inoffensive warnings from QML + log Qt messages via Python logging - Command line (meshroom_photogrammetry): Add --pipeline parameter to use a pre-configured pipeline graph - Command line (meshroom_photogrammetry): Add possibility to provide pre-calibrated intrinsics. - Command line (meshroom_compute): Provide `meshroom_compute` executable in packaged release. - Image Gallery: Display Camera Intrinsics initialization status with detailed explanation, edit Sensor Database dialog, advanced menu to display view UIDs - StructureFromMotion: Expose advanced estimator parameters - FeatureMatching: Expose advanced estimator parameters - DepthMap: New option `exportIntermediateResults` disabled by default, so less data storage by default than before. - DepthMap: Use multiple GPUs by default if available and add `nbGPUs` param to limit it - Meshing: Add option `addLandmarksToTheDensePointCloud` - SfMTransform: New option to align on one specific camera - Graph Editor: Consistent read-only mode when computing, that can be unlocked in advanced settings - Graph Editor: Improved Node Menu: "duplicate"/"remove"/"delete data" with "From Here" accessible on the same entry via an additional button - Graph Editor: Confirmation popup before deleting node data - Graph Editor: Add "Clear Pending Status" action at Graph level - Graph Editor: Solo media in 3D viewer with Ctrl + double click on node/attribute - Param Editor: Fix several bugs related to attributes edition - Scene Compatibility: Improves detection of deeper compatibility issues, by adding an additional recursive (taking List/GroupAttributes children into account) exact description matching test when de-serializing a Node. See [AliceVision 2.1.0 Release Notes](https://github.com/alicevision/AliceVision/blob/v2.1.0/CHANGES.md) for more details about algorithmic changes. ## Release 2018.1.0 (2018.08.09) First release of Meshroom. Based on [AliceVision 2.0.0](https://github.com/alicevision/AliceVision/tree/v2.0.0). Meshroom-2025.1.0/CMakeLists.txt000066400000000000000000000036461505103770500163060ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.12) project(meshroom LANGUAGES C CXX) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type for Meshroom plugins" FORCE) endif() set(ALICEVISION_ROOT "$ENV{ALICEVISION_ROOT}" CACHE STRING "AliceVision root dir") set(QT_DIR "$ENV{QT_DIR}" CACHE STRING "Qt root directory") option(MR_BUILD_QTALICEVISION "Enable building of QtAliceVision plugin" ON) if(CMAKE_BUILD_TYPE MATCHES Release) message(STATUS "Force CMAKE_INSTALL_DO_STRIP in Release") set(CMAKE_INSTALL_DO_STRIP ON) else() set(CMAKE_INSTALL_DO_STRIP OFF) endif() set(CMAKE_CORE_BUILD_FLAGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DBUILD_SHARED_LIBS:BOOL=ON -DCMAKE_INSTALL_DO_STRIP=${CMAKE_INSTALL_DO_STRIP}) set(ALEMBIC_CMAKE_FLAGS -DAlembic_DIR:PATH=${ALICEVISION_ROOT}/lib/cmake/Alembic -DImath_DIR=${ALICEVISION_ROOT}/lib/cmake/Imath ) include(ExternalProject) # ============================================================================== # GNUInstallDirs CMake module # - Define GNU standard installation directories # - Provides install directory variables as defined by the GNU Coding Standards. # ============================================================================== include(GNUInstallDirs) # message(STATUS "QT_CMAKE_FLAGS: ${QT_CMAKE_FLAGS}") if(MR_BUILD_QTALICEVISION) set(QTALICEVISION_TARGET QtAliceVision) ExternalProject_Add(${QTALICEVISION_TARGET} GIT_REPOSITORY https://github.com/alicevision/QtAliceVision GIT_TAG develop PREFIX ${BUILD_DIR} BUILD_IN_SOURCE 0 BUILD_ALWAYS 0 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/QtAliceVision BINARY_DIR ${BUILD_DIR}/QtAliceVision_build INSTALL_DIR ${CMAKE_INSTALL_PREFIX} CONFIGURE_COMMAND ${CMAKE_COMMAND} ${CMAKE_CORE_BUILD_FLAGS} ${ALEMBIC_CMAKE_FLAGS} -DCMAKE_PREFIX_PATH:PATH=${QT_DIR}$${ALICEVISION_ROOT} -DCMAKE_INSTALL_PREFIX:PATH= ) endif() Meshroom-2025.1.0/CODE_OF_CONDUCT.md000066400000000000000000000062131505103770500163360ustar00rootroot00000000000000# Contributor Covenant Code of Conduct ## Our Pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards Examples of behavior that contributes to creating a positive environment include: * Using welcoming and inclusive language * Being respectful of differing viewpoints and experiences * Gracefully accepting constructive criticism * Focusing on what is best for the community * Showing empathy towards other community members Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery and unwelcome sexual attention or advances * Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or electronic address, without explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team privately at alicevision-team@googlegroups.com. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct/ [homepage]: https://www.contributor-covenant.org Meshroom-2025.1.0/CONTRIBUTING.md000066400000000000000000000031401505103770500157640ustar00rootroot00000000000000Contributing to Meshroom =========================== Meshroom relies on a friendly and community-driven effort to create an open source photogrammetry solution. In order to foster a friendly atmosphere where technical collaboration can flourish, we recommend you to read the [code of conduct](CODE_OF_CONDUCT.md). # ![Contributing](/docs/logo/contributing.png) Contributing Workflow --------------------- The contributing workflow relies on [Github Pull Requests](https://help.github.com/articles/using-pull-requests/). 1. If it is an important change, we recommend you to discuss it on the mailing-list before starting implementation. This ensure that the development is aligned with other developpements already started and will be efficiently integrated. 2. Create the corresponding issues. 3. Create a branch and [draft a pull request](https://github.blog/2019-02-14-introducing-draft-pull-requests/) "My new feature" so everyone can follow the development. Explain the implementation in the PR description with links to issues. 4. Implement the new feature(s). Add unit test if needed. One feature per PR is ideal for review, but linked features can be part of the same PR. 5. When it is ready for review, [mark the pull request as ready for review](https://help.github.com/en/articles/changing-the-stage-of-a-pull-request). 6. The reviewers will look over the code and ask for changes, explain problems they found, congratulate the author, etc. using the github comments. 7. After approval, one of the developers with commit approval to the official main repository will merge your fixes into the "develop" branch. Meshroom-2025.1.0/COPYING.md000066400000000000000000000022271505103770500151720ustar00rootroot00000000000000## Meshroom License Meshroom is licensed under the [MPL2 license](LICENSE-MPL2.md). ## Third parties licenses * __AliceVision__ [https://github.com/alicevision/AliceVision](https://github.com/alicevision/AliceVision) Copyright (c) 2018 AliceVision contributors. Distributed under the [MPL2 license](https://opensource.org/licenses/MPL-2.0). See [COPYING](https://github.com/alicevision/AliceVision/blob/develop/COPYING.md) for full third parties licenses. * __Python__ [https://www.python.org](https://www.python.org) Copyright (c) 2001-2018 Python Software Foundation. Distributed under the [PSFL V2 license](https://www.python.org/download/releases/2.7/license/). * __Qt/PySide6__ [https://www.qt.io](https://www.qt.io) Copyright (C) 2018 The Qt Company Ltd and other contributors. Distributed under the [LGPL V3 license](https://opensource.org/licenses/LGPL-3.0). * __QtAliceVision__ [https://github.com/alicevision/QtAliceVision](https://github.com/alicevision/QtAliceVision) Copyright (c) 2018 AliceVision contributors. Distributed under the [MPL2 license](https://opensource.org/licenses/MPL-2.0). Meshroom-2025.1.0/INSTALL.md000066400000000000000000000225001505103770500151640ustar00rootroot00000000000000# Meshroom Installation This guide will help you setup a development environment to launch and contribute to Meshroom. ## Table of Contents 1. [Use prebuilt release](#use-prebuilt-release) 2. [Installation from source code](#installation-from-source-code) 1. [Install minimal dependencies](#install-minimal-dependencies) 1. [Python environment](#python-environment) 2. [Qt/PySide](#qtpyside) 2. [Install dependencies](#install-dependencies) 1. [AliceVision](#alicevision) 2. [QtAliceVision](#qtalicevision) 3. [Install plugins](#install-plugins) 1. [mrSegmentation plugin](#mrsegmentation-plugin) 2. [MeshroomHub](#meshroomhub) 4. [Start Meshroom](#start-meshroom) 3. [Adding custom nodes, templates and plugins](#adding-custom-nodes-templates-and-plugins) 1. [Custom nodes](#custom-nodes) 2. [Custom templates](#custom-templates) 3. [Custom plugins](#custom-plugins) ## Use prebuilt release To quickly run Meshroom without setting up a development environment, follow these simple steps: 1. **Download the prebuilt binaries**: * Visit the [Releases](https://github.com/alicevision/meshroom/releases) page. * Download the latest release that is suitable for your operating system. 2. **Extract the archive**: * On Windows: right-click on the .zip file and select "Extract All", or run `unzip Meshroom-x.y.z.zip` in a terminal. * On Linux: in a terminal, run `tar -xzvf Meshroom.x.y.z.tar.gz`. 3. **Run Meshroom**: in the extracted folder, double-click on the "Meshroom" executable to launch it. ## Installation from source code Get the source code and install runtime requirements: ```bash git clone --recursive https://github.com/alicevision/Meshroom.git cd meshroom ``` ### Install minimal dependencies To use Meshroom nodal system without any visualization option, you can rely on a minimal set of dependencies. #### Python environment * Windows: Python 3 (>=3.9) * Linux: Python 3 (>=3.9) To install all the requirements for runtime, development and packaging, simply run: ```bash pip install -r requirements.txt -r dev_requirements.txt ``` > [!NOTE] > `dev_requirements` is only related to testing and packaging. It is not mandatory to run Meshroom. > [!NOTE] > It is recommended to use a [virtual Python environment](https://docs.python.org/3.9/library/venv.html), like `python -m venv meshroom_venv`. #### Qt/PySide * PySide >= 6.7 > [!WARNING] > For PySide 6.8.0 and over, the following error may occur when leaving Meshroom's homepage: `Cannot load /path/to/pip/install/PySide6/qml/QtQuick/Scene3D/qtquickscene3dplugin.dll: specified module cannot be found`. > This is caused by Qt63DQuickScene3D.dll which seems to be missing from the pip distribution, but can be retrieved from a standard Qt installation. > On recent Linux systems such as Ubuntu 25, this can be resolved by installing `libqt63dquickscene3d6` using the package manager. > Alternatively: > - On Windows, the DLL for MSVC2022_64 can be directly downloaded [here](https://drive.google.com/uc?export=download&id=1vhPDmDQJJfM_hBD7KVqRfh8tiqTCN7Jv). It then needs to be placed in `/path/to/pip/install/PySide6`. > - On Linux, the .so (here, Rocky9-based) can be directly downloaded [here](https://drive.google.com/uc?export=download&id=1dq7rm_Egc-sQF6j6_E55f60INyxt1ega). It then needs to be placed in `/path/to/pip/install/PySide6/Qt/qml/QtQuick/Scene3D`. ### Install dependencies You can install AliceVision to get access to 3D Computer Vision and Machine Learning nodes and pipelines. Additionally, you can install QtAliceVision to get access to Image and 3D data visualization within Meshroom. #### AliceVision [AliceVision](https://github.com/alicevision/AliceVision)'s binaries must be in the path while running Meshroom. The easiest way is to download prebuild binaries from the release. You can download a [Release](https://github.com/alicevision/AliceVision/releases) or extract files from a recent AliceVision build on [Dockerhub](https://hub.docker.com/r/alicevision/alicevision). Alternatively, you can build AliceVision manually from the source code by following this [guide](https://github.com/alicevision/AliceVision/blob/develop/INSTALL.md). Then add the `bin` and `lib` folders into your `PATH` (and `LD_LIBRARY_PATH` on Linux/macOS) environment variables. The following environment variable must always be set with the location of AliceVision's install directory: ``` ALICEVISION_ROOT=/path/to/AliceVision/install/directory ``` AliceVision provides nodes and templates for Meshroom, which need to be declared to Meshroom with the following environment variables: ``` MESHROOM_NODES_PATH={ALICEVISION_ROOT}/share/meshroom MESHROOM_PIPELINE_TEMPLATES_PATH={ALICEVISION_ROOT}/share/meshroom ``` Meshroom also relies on [specific files provided with AliceVision](https://github.com/alicevision/AliceVision/blob/develop/INSTALL.md#environment-variables-to-set-for-meshroom), set through environment variables. If these variables are not set, Meshroom will by default look for them in `{ALICEVISION_ROOT}/share/aliceVision`. > [!NOTE] > You may need to checkout the corresponding Meshroom version/tag to avoid versions incompatibilities. #### QtAliceVision [QtAliceVision](https://github.com/alicevision/QtAliceVision), an additional Qt plugin, can be built to extend Meshroom UI features. Note that it is optional but highly recommended. This plugin uses AliceVision to load and visualize intermediate reconstruction files and OpenImageIO as backend to read images (including RAW/EXR). It also adds support for Alembic file loading in Meshroom's 3D viewport, which allows to visualize sparse reconstruction results (point clouds and cameras). ``` QML2_IMPORT_PATH=/path/to/QtAliceVision/install/qml QT_PLUGIN_PATH=/path/to/QtAliceVision/install ``` ### Install plugins #### mrSegmentation plugin Some templates provided by AliceVision contain nodes that are not packaged with AliceVision. These nodes are part of the mrSegmentation plugin, which can be found [here](https://github.com/MeshroomHub/mrSegmentation). To build and install mrSegmentation, follow this [guide](https://github.com/MeshroomHub/mrSegmentation/blob/main/INSTALL.md). For mrSegmentation nodes to be correctly detected by Meshroom, the following environment variable should be set: ``` MESHROOM_PLUGINS_PATH=/path/to/mrSegmentation ``` #### MeshroomHub You can find many experimental Machine Learning plugins on [MeshroomHub](https://github.com/meshroomHub). ### Start Meshroom - __Launch the User Interface__ ```bash # Windows set PYTHONPATH=%CD% && python meshroom/ui # Linux/macOS PYTHONPATH=$PWD python meshroom/ui ``` On Ubuntu, you may have conflicts between native drivers and mesa drivers. In that case, you need to force usage of native drivers by adding them to the LD_LIBRARY_PATH: `LD_LIBRARY_PATH=/usr/lib/nvidia-340 PYTHONPATH=$PWD python meshroom/ui` You may need to adjust the folder `/usr/lib/nvidia-340` with the correct driver version. - __Launch a 3D reconstruction in command line__ ```bash # Windows: set PYTHONPATH=%CD% && # Linux/macOS: PYTHONPATH=$PWD python bin/meshroom_batch --input INPUT_IMAGES_FOLDER --output OUTPUT_FOLDER ``` ## Adding custom nodes, templates and plugins In addition to the nodes and templates provided by Meshroom and AliceVision, custom ones can be created, loaded by, and used in Meshroom. ### Custom nodes Nodes need to be provided to Meshroom as Python modules, using the `MESHROOM_NODES_PATH` environment variable. For example, to add a set of three custom nodes (`CustomNodeA`, `CustomNodeB` and `CustomNodeC`) to Meshroom, a Python module containing these nodes must be created: ``` ├── folderA │ ├── customNodes │ │ ├── __init__.py │ │ ├── CustomNodeA.py │ │ ├── CustomNodeB.py │ │ └── CustomNodeC.py ├── folderB ``` Its containing folder must then be added to `MESHROOM_NODES_PATH`: - On Windows: ``` set MESHROOM_NODES_PATH=/path/to/folderA;%MESHROOM_NODES_PATH% ``` - On Linux: ``` export MESHROOM_NODES_PATH=/path/to/folderA:$MESHROOM_NODES_PATH ``` > [!NOTE] > A valid Meshroom node is a Python file that contains a class inheriting `meshroom.core.desc.BaseNode`. > Before loading a node, Meshroom checks whether its description (the content of its class) is valid. > If it is not, the node is rejected with an error log describing which part is invalid. ### Custom templates The list of pipelines can also be enriched with custom templates, that are declared to Meshroom with the environment variable `MESHROOM_PIPELINE_TEMPLATES_PATH`. For example, if a couple of custom templates are saved in a folder "customTemplates", the variable should be set as follows: - On Windows: ``` set MESHROOM_PIPELINE_TEMPLATES_PATH=/path/to/customTemplate;%MESHROOM_PIPELINE_TEMPLATES_PATH% ``` - On Linux: ``` export MESHROOM_PIPELINE_TEMPLATES_PATH=/path/to/customTemplates:$MESHROOM_PIPELINE_TEMPLATES_PATH ``` > [!TIP] > A template can be a Meshroom graph of any type, but it is generally expected to be a graph saved in "minimal mode". > In "minimal mode", the .mg file only contains, for each node of the graph, the attributes that have non-default values. > To save a graph in "minimal mode", use the `File > Advanced > Save As Template` menu. ### Custom plugins To add and use custom plugins with Meshroom, follow [**INSTALL_PLUGINS.md**](INSTALL_PLUGINS.md). Meshroom-2025.1.0/INSTALL_PLUGINS.md000066400000000000000000000037751505103770500164020ustar00rootroot00000000000000# Meshroom plugins installation Plugins are collections of nodes and templates with their own dependencies. Plugin maintainers have flexibility in organizing their code, as Meshroom only requires a few directories to recognize nodes and pipelines. ## Required Structure - **Meshroom folder**: All plugin nodes and templates must be placed within a `./meshroom/` directory - **Configuration file (optional)**: `./meshroom/config.json` file allows to define custom environment variables for the plugin - **Virtual environment (optional)**: If you have specific dependencies, you can create a virtual environment named "venv" in a folder and this Python will be used when computing the node. ## Example Structure For a plugin named "customPlugin", Meshroom expects this layout: ``` ├── customPlugin/ # Plugin root folder │ ├── meshroom/ # Meshroom nodes and pipelines │ │ ├── customNodes1/ # Set of nodes │ │ │ ├── __init__.py # Required to be a python module │ │ │ ├── NodeA.py │ │ │ ├── NodeB.py │ │ ├── customNodes2/ # Another set of nodes if needed │ │ │ ├── __init__.py │ │ │ ├── NodeC.py │ │ │ ├── NodeD.py │ │ ├── customTemplate1.mg # Ready-to-use pipeline templates │ │ ├── customTemplate2.mg │ │ ├── config.json # Optional plugin configuration file │ ├── venv/ # Optional virtual environment with installed dependencies │ └── ... # Custom code (any structure) ``` ## Loading the Plugin The "customPlugin" will be loaded automatically when Meshroom starts by setting the `MESHROOM_PLUGINS_PATH` environment variable: - On Windows: ``` set MESHROOM_PLUGINS_PATH=/path/to/customPlugin;%MESHROOM_PLUGINS_PATH% ``` - On Linux: ``` export MESHROOM_PLUGINS_PATH=/path/to/customPlugin:$MESHROOM_PLUGINS_PATH ``` Meshroom-2025.1.0/LICENSE-MPL2.md000066400000000000000000000405261505103770500156600ustar00rootroot00000000000000Mozilla Public License Version 2.0 ================================== 1. Definitions -------------- 1.1. "Contributor" means each individual or legal entity that creates, contributes to the creation of, or owns Covered Software. 1.2. "Contributor Version" means the combination of the Contributions of others (if any) used by a Contributor and that particular Contributor's Contribution. 1.3. "Contribution" means Covered Software of a particular Contributor. 1.4. "Covered Software" means Source Code Form to which the initial Contributor has attached the notice in Exhibit A, the Executable Form of such Source Code Form, and Modifications of such Source Code Form, in each case including portions thereof. 1.5. "Incompatible With Secondary Licenses" means (a) that the initial Contributor has attached the notice described in Exhibit B to the Covered Software; or (b) that the Covered Software was made available under the terms of version 1.1 or earlier of the License, but not also under the terms of a Secondary License. 1.6. "Executable Form" means any form of the work other than Source Code Form. 1.7. "Larger Work" means a work that combines Covered Software with other material, in a separate file or files, that is not Covered Software. 1.8. "License" means this document. 1.9. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently, any and all of the rights conveyed by this License. 1.10. "Modifications" means any of the following: (a) any file in Source Code Form that results from an addition to, deletion from, or modification of the contents of Covered Software; or (b) any new file in Source Code Form that contains any Covered Software. 1.11. "Patent Claims" of a Contributor means any patent claim(s), including without limitation, method, process, and apparatus claims, in any patent Licensable by such Contributor that would be infringed, but for the grant of the License, by the making, using, selling, offering for sale, having made, import, or transfer of either its Contributions or its Contributor Version. 1.12. "Secondary License" means either the GNU General Public License, Version 2.0, the GNU Lesser General Public License, Version 2.1, the GNU Affero General Public License, Version 3.0, or any later versions of those licenses. 1.13. "Source Code Form" means the form of the work preferred for making modifications. 1.14. "You" (or "Your") means an individual or a legal entity exercising rights under this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. 2. License Grants and Conditions -------------------------------- 2.1. Grants Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: (a) under intellectual property rights (other than patent or trademark) Licensable by such Contributor to use, reproduce, make available, modify, display, perform, distribute, and otherwise exploit its Contributions, either on an unmodified basis, with Modifications, or as part of a Larger Work; and (b) under Patent Claims of such Contributor to make, use, sell, offer for sale, have made, import, and otherwise transfer either its Contributions or its Contributor Version. 2.2. Effective Date The licenses granted in Section 2.1 with respect to any Contribution become effective for each Contribution on the date the Contributor first distributes such Contribution. 2.3. Limitations on Grant Scope The licenses granted in this Section 2 are the only rights granted under this License. No additional rights or licenses will be implied from the distribution or licensing of Covered Software under this License. Notwithstanding Section 2.1(b) above, no patent license is granted by a Contributor: (a) for any code that a Contributor has removed from Covered Software; or (b) for infringements caused by: (i) Your and any other third party's modifications of Covered Software, or (ii) the combination of its Contributions with other software (except as part of its Contributor Version); or (c) under Patent Claims infringed by Covered Software in the absence of its Contributions. This License does not grant any rights in the trademarks, service marks, or logos of any Contributor (except as may be necessary to comply with the notice requirements in Section 3.4). 2.4. Subsequent Licenses No Contributor makes additional grants as a result of Your choice to distribute the Covered Software under a subsequent version of this License (see Section 10.2) or under the terms of a Secondary License (if permitted under the terms of Section 3.3). 2.5. Representation Each Contributor represents that the Contributor believes its Contributions are its original creation(s) or it has sufficient rights to grant the rights to its Contributions conveyed by this License. 2.6. Fair Use This License is not intended to limit any rights You have under applicable copyright doctrines of fair use, fair dealing, or other equivalents. 2.7. Conditions Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in Section 2.1. 3. Responsibilities ------------------- 3.1. Distribution of Source Form All distribution of Covered Software in Source Code Form, including any Modifications that You create or to which You contribute, must be under the terms of this License. You must inform recipients that the Source Code Form of the Covered Software is governed by the terms of this License, and how they can obtain a copy of this License. You may not attempt to alter or restrict the recipients' rights in the Source Code Form. 3.2. Distribution of Executable Form If You distribute Covered Software in Executable Form then: (a) such Covered Software must also be made available in Source Code Form, as described in Section 3.1, and You must inform recipients of the Executable Form how they can obtain a copy of such Source Code Form by reasonable means in a timely manner, at a charge no more than the cost of distribution to the recipient; and (b) You may distribute such Executable Form under the terms of this License, or sublicense it under different terms, provided that the license for the Executable Form does not attempt to limit or alter the recipients' rights in the Source Code Form under this License. 3.3. Distribution of a Larger Work You may create and distribute a Larger Work under terms of Your choice, provided that You also comply with the requirements of this License for the Covered Software. If the Larger Work is a combination of Covered Software with a work governed by one or more Secondary Licenses, and the Covered Software is not Incompatible With Secondary Licenses, this License permits You to additionally distribute such Covered Software under the terms of such Secondary License(s), so that the recipient of the Larger Work may, at their option, further distribute the Covered Software under the terms of either this License or such Secondary License(s). 3.4. Notices You may not remove or alter the substance of any license notices (including copyright notices, patent notices, disclaimers of warranty, or limitations of liability) contained within the Source Code Form of the Covered Software, except that You may alter any license notices to the extent required to remedy known factual inaccuracies. 3.5. Application of Additional Terms You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, You may do so only on Your own behalf, and not on behalf of any Contributor. You must make it absolutely clear that any such warranty, support, indemnity, or liability obligation is offered by You alone, and You hereby agree to indemnify every Contributor for any liability incurred by such Contributor as a result of warranty, support, indemnity or liability terms You offer. You may include additional disclaimers of warranty and limitations of liability specific to any jurisdiction. 4. Inability to Comply Due to Statute or Regulation --------------------------------------------------- If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Software due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be placed in a text file included with all distributions of the Covered Software under this License. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. 5. Termination -------------- 5.1. The rights granted under this License will terminate automatically if You fail to comply with any of its terms. However, if You become compliant, then the rights granted under this License from a particular Contributor are reinstated (a) provisionally, unless and until such Contributor explicitly and finally terminates Your grants, and (b) on an ongoing basis, if such Contributor fails to notify You of the non-compliance by some reasonable means prior to 60 days after You have come back into compliance. Moreover, Your grants from a particular Contributor are reinstated on an ongoing basis if such Contributor notifies You of the non-compliance by some reasonable means, this is the first time You have received notice of non-compliance with this License from such Contributor, and You become compliant prior to 30 days after Your receipt of the notice. 5.2. If You initiate litigation against any entity by asserting a patent infringement claim (excluding declaratory judgment actions, counter-claims, and cross-claims) alleging that a Contributor Version directly or indirectly infringes any patent, then the rights granted to You by any and all Contributors for the Covered Software under Section 2.1 of this License shall terminate. 5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or Your distributors under this License prior to termination shall survive termination. ************************************************************************ * * * 6. Disclaimer of Warranty * * ------------------------- * * * * Covered Software is provided under this License on an "as is" * * basis, without warranty of any kind, either expressed, implied, or * * statutory, including, without limitation, warranties that the * * Covered Software is free of defects, merchantable, fit for a * * particular purpose or non-infringing. The entire risk as to the * * quality and performance of the Covered Software is with You. * * Should any Covered Software prove defective in any respect, You * * (not any Contributor) assume the cost of any necessary servicing, * * repair, or correction. This disclaimer of warranty constitutes an * * essential part of this License. No use of any Covered Software is * * authorized under this License except under this disclaimer. * * * ************************************************************************ ************************************************************************ * * * 7. Limitation of Liability * * -------------------------- * * * * Under no circumstances and under no legal theory, whether tort * * (including negligence), contract, or otherwise, shall any * * Contributor, or anyone who distributes Covered Software as * * permitted above, be liable to You for any direct, indirect, * * special, incidental, or consequential damages of any character * * including, without limitation, damages for lost profits, loss of * * goodwill, work stoppage, computer failure or malfunction, or any * * and all other commercial damages or losses, even if such party * * shall have been informed of the possibility of such damages. This * * limitation of liability shall not apply to liability for death or * * personal injury resulting from such party's negligence to the * * extent applicable law prohibits such limitation. Some * * jurisdictions do not allow the exclusion or limitation of * * incidental or consequential damages, so this exclusion and * * limitation may not apply to You. * * * ************************************************************************ 8. Litigation ------------- Any litigation relating to this License may be brought only in the courts of a jurisdiction where the defendant maintains its principal place of business and such litigation shall be governed by laws of that jurisdiction, without reference to its conflict-of-law provisions. Nothing in this Section shall prevent a party's ability to bring cross-claims or counter-claims. 9. Miscellaneous ---------------- This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not be used to construe this License against a Contributor. 10. Versions of the License --------------------------- 10.1. New Versions Mozilla Foundation is the license steward. Except as provided in Section 10.3, no one other than the license steward has the right to modify or publish new versions of this License. Each version will be given a distinguishing version number. 10.2. Effect of New Versions You may distribute the Covered Software under the terms of the version of the License under which You originally received the Covered Software, or under the terms of any subsequent version published by the license steward. 10.3. Modified Versions If you create software not governed by this License, and you want to create a new license for such software, you may create and use a modified version of this License if you rename the license and remove any references to the name of the license steward (except to note that such modified license differs from this License). 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses If You choose to distribute Source Code Form that is Incompatible With Secondary Licenses under the terms of this version of the License, the notice described in Exhibit B of this License must be attached. Exhibit A - Source Code Form License Notice ------------------------------------------- This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice. You may add additional accurate notices of copyright ownership. Exhibit B - "Incompatible With Secondary Licenses" Notice --------------------------------------------------------- This Source Code Form is "Incompatible With Secondary Licenses", as defined by the Mozilla Public License, v. 2.0. Meshroom-2025.1.0/README.md000066400000000000000000000215131505103770500150160ustar00rootroot00000000000000# ![Meshroom - 3D Reconstruction Software](/docs/logo/banner-meshroom.png) Meshroom is an open-source, node-based visual programming framework—a flexible toolbox for creating, managing, and executing complex data processing pipelines. Meshroom uses a nodal system where each node represents a specific operation, and output attributes can seamlessly feed into subsequent steps. When a node’s attribute is modified, only the affected downstream nodes are invalidated, while cached intermediate results are reused to minimize unnecessary computation. Meshroom supports both local and distributed execution, enabling efficient parallel processing on render farms. It also includes interactive widgets for visualizing images and 3D data. Official releases come with built-in plugins for computer vision and machine learning tasks. [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/alicevision/Meshroom) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/2997/badge)](https://bestpractices.coreinfrastructure.org/projects/2997) [![Build status](https://github.com/alicevision/Meshroom/actions/workflows/continuous-integration.yml/badge.svg?branch=develop)](https://github.com/alicevision/Meshroom/actions/workflows/continuous-integration.yml) # Get the project You can [download pre-compiled binaries for the latest release](https://github.com/alicevision/meshroom/releases). If you want to build it yourself, see [**INSTALL.md**](INSTALL.md) to setup the project and pre-requisites. To use Meshroom with custom plugins, see [**INSTALL_PLUGINS.md**](INSTALL_PLUGINS.md). # Concepts - **Graph**: A collection of interconnected nodes that defines the sequence of operations to represent your complete data processing workflow. - **Nodes**: The fundamental building blocks, each performing a specific task. Nodes are connected through edges that represent the flow of data between them. - **Attributes**: Parameters that control how each node behaves. When an attribute is modified, it triggers the invalidation of all connected downstream nodes while preserving cached intermediate results. - **Templates**: Ready-to-use pipeline configurations provided by plugins. You can customize existing templates or create and save your own. - **Local / Renderfarm**: Choose between local processing or distributed computation on render farms. You can monitor progress, review logs, track resource consumption, and use both modes simultaneously as Meshroom manages node locking during external computation. - **Custom Plugins**: Extend Meshroom's capabilities by creating your own nodes in Python or by integrating external command-line tools. # User Interface The Meshroom UI is divided into several key areas: - **Graph Editor**: The central area where nodes are placed and connected to form a processing pipeline. - **Node Editor**: It contains multiple tabs with: - **Attributes**: Displays the attributes and parameters of the selected node. - **Log**: Displays execution logs and error messages. - **Statistics**: Displays resource consumption - **Status**: Display some technical information on the node (workstation, start/end time, etc.) - **Documentation**: Node Documentation. - **Notes**: Change label or put some notes on the node to know why it’s used in this graph. - **2D & 3D Viewer**: Visualizes the output of certain nodes. - **Image Gallery**: Visualize the list of input files. # Manual and Tutorials - [Meshroom Manual](https://meshroom-manual.readthedocs.io) - [Meshroom FAQ](https://github.com/alicevision/meshroom/wiki) # Plugins bundled by default ## AliceVision Plugin [AliceVision Website](http://alicevision.org) [AliceVision Repository](https://github.com/alicevision/AliceVision) AliceVision provides state-of-the-art 3D Computer Vision and Machine Learning algorithms that analyze and understand image content to transform collections of regular 2D photographs into detailed 3D models, camera positions, and scene geometry. Born from collaboration between academia and industry, it delivers research-grade algorithms with production-level robustness and quality. The AliceVision plugin offers comprehensive pipelines for: - **3D Reconstruction** from multi-view images ([pipeline overview](http://alicevision.github.io/#photogrammetry), [results on Sketchfab](http://sketchfab.com/AliceVision)) - **Camera Tracking** for camera motion estimation - **HDR Fusion** from multi-bracketed photography - **Panorama Stitching** including fisheye support and motorized head systems - **Photometric Stereo** for geometric reconstruction from a single view with multiple lightings - **Multi-View Photometric Stereo** combining photogrammetry with photometric stereo ## Segmentation Plugin [MrSegmentation](https://github.com/meshroomHub/mrSegmentation): A set of nodes for AI-powered image segmentation from natural language prompts. The plugin leverages foundation models to automatically identify and isolate specific objects or regions in images based on textual descriptions, enabling intuitive content-aware processing workflows. # Other plugins See [MeshroomHub](https://github.com/meshroomHub) for more plugins. ## DepthEstimation Plugin [MrDepthEstimation](https://github.com/meshroomHub/mrDepthEstimation): A set of nodes for AI-based monocular depth estimation from image sequences. The plugin leverages deep learning models to predict depth information from single images, enabling depth estimation in new scenarios. ## RoMa Plugin [MrRoma](https://github.com/meshroomHub/mrRoma): A set of nodes for RoMa (robust dense feature matching). The plugin leverages foundation models to provide pixel-dense correspondence estimation with reliable certainty maps, enabling robust matching even under extreme variations in scale, illumination, viewpoint, and texture. ## GSplat Plugin [MrGSplat](https://github.com/meshroomHub/mrGSplat): A set of nodes for 3D Gaussian Splatting reconstruction. The plugin integrates seamlessly with AliceVision's photogrammetry pipeline, allowing users to create Gaussian splat representations from multi-view images and to render new viewpoints. ## Research Plugin [Meshroom Research](https://github.com/meshroomHub/MeshroomResearch) A research-oriented plugin for evaluating and benchmarking cutting-edge Machine Learning algorithms in 3D Computer Vision. The plugin provides experimental nodes and evaluation frameworks to test new methodologies, compare algorithm performance, and validate research innovations before integration into production pipelines. ## MicMac Plugin [MeshroomMicMac](https://github.com/alicevision/MeshroomMicMac) An exploratory plugin integrating MicMac's photogrammetric algorithms into Meshroom workflows. MicMac is a mature open-source photogrammetric software developed by the National Institute of Geographic and Forestry Information (French Mapping Agency, IGN) and the National School of Geographic Sciences (ENSG) within the LASTIG lab, offering specialized tools for surveying and mapping applications. While the plugin doesn't yet support Meshroom's full invalidation system, it provides fully functional pipelines for users seeking MicMac's specific photogrammetric capabilities. ## Geolocation Plugin [MrGeolocation](https://github.com/meshroomHub/mrGeolocation) A plugin for geospatial integration that extracts GPS data from photographs and downloads contextual geographic information. The plugin automatically places 3D reconstructions within their real-world geographical environment by retrieving worldwide 2D maps (OpenStreetMap), global elevation models (NASA datasets), and high-resolution 3D Lidar models where available (France via IGN open data). This enables accurate georeferencing and contextual visualization of photogrammetric reconstructions. # License The project is released under MPLv2, see [**COPYING.md**](COPYING.md). # Citation ``` @inproceedings{alicevision2021, title={{A}liceVision {M}eshroom: An open-source {3D} reconstruction pipeline}, author={Carsten Griwodz and Simone Gasparini and Lilian Calvet and Pierre Gurdjos and Fabien Castan and Benoit Maujean and Gregoire De Lillo and Yann Lanthony}, booktitle={Proceedings of the 12th ACM Multimedia Systems Conference - {MMSys '21}}, doi = {10.1145/3458305.3478443}, publisher = {ACM Press}, year = {2021} } ``` # Contributing We welcome contributions! Check out our [Contribution Guidelines](CONTRIBUTING.md) to get started. Whether you're a developer, designer, or documentation enthusiast, there's a place for you in the Meshroom community. # Contact Use the public mailing-list to ask questions or request features. It is also a good place for informal discussions like sharing results, interesting related technologies or publications: [forum@alicevision.org](https://groups.google.com/g/alicevision) You can also contact the core team privately on: [team@alicevision.org](mailto:team@alicevision.org). Meshroom-2025.1.0/RELEASING.md000066400000000000000000000037451505103770500154010ustar00rootroot00000000000000 ### Versioning Version = MAJOR (>=1 year), MINOR (>= 1 month), PATCH Version Status = Develop / Release ### Git Branches develop: active development branch master: latest release vMAJOR.MINOR: release branch Tags vMAJOR.MINOR.PATCH: tag for each release ### Release Process - Prepare the AliceVision release: https://github.com/alicevision/AliceVision - Update INSTALL.md and requirements.txt if needed - Source code - Create branch from develop: "rcMAJOR.MINOR" - Modify version in code, version status to RELEASE (meshroom/__init__.py) - Update the version of all the templates so their version corresponds to the release - Create Release note (using https://github.com/cbentejac/github-generate-release-note) - ``` ./github-generate-release-note.py -o alicevision -r Meshroom -m "Meshroom MAJOR.MINOR.PATCH" --highlights majorFeature feature --label-include bugfix ci,scope:doc,scope:build -s updated-asc ``` - PR to develop: "Release MAJOR.MINOR" - Build - Build docker & push to dockerhub - Build windows - Git - Merge "rcMAJOR.MINOR" into "develop" - Push "develop" into "master" - Create branch: vMAJOR.MINOR - Create tag: vMAJOR.MINOR.PATCH on Meshroom, qtAliceVision - Create branch from develop: "startMAJOR.MINOR" - Upload binaries on fosshub - Fill up Github release note - Prepare "develop" for new developments - Upgrade MINOR and reset version status to Develop - PR to develop: "Start Development MAJOR.MINOR" - Communication - Email on mailing-list: alicevision@googlegroups.com - Message on linkedin: https://www.linkedin.com/groups/13573776 - Message on twitter: https://twitter.com/alicevision_org ### Upgrade a Release with a PATCH version - Source code - Create branch from rcMAJOR.MINOR: "rcMAJOR.MINOR.PATCH" - Cherry-pick specific commits or rebase required PR - Modify version in code - Update release note - Build step - Uploads - Github release note - Email on mailing-list Meshroom-2025.1.0/bin/000077500000000000000000000000001505103770500143055ustar00rootroot00000000000000Meshroom-2025.1.0/bin/meshroom_batch000077500000000000000000000267141505103770500172370ustar00rootroot00000000000000#!/usr/bin/env python import argparse import os import sys import distutils.util import json import re from meshroom import setupEnvironment setupEnvironment() import meshroom.core.graph import logging meshroom.core.initPipelines() parser = argparse.ArgumentParser( prog='meshroom_batch', description='Launch a Meshroom pipeline from command line.', add_help=True, formatter_class=argparse.RawTextHelpFormatter, epilog=''' Examples: 1. Process a pipeline in command line: meshroom_batch -p cameraTracking -i /input/path -o /output/path -s /path/to/store/the/project.mg 2. Submit a pipeline on renderfarm: meshroom_batch -p cameraTracking -i /input/path -o /output/path -s /path/to/store/the/project.mg --submit See "meshroom_compute -h" to compute an existing project from command line. Additional Resources: Website: https://alicevision.org Manual: https://meshroom-manual.readthedocs.io Forum: https://groups.google.com/g/alicevision Tutorials: https://www.youtube.com/c/AliceVisionOrg Contribute: https://github.com/alicevision/Meshroom ''') general_group = parser.add_argument_group('General Options') general_group.add_argument( '-i', '--input', metavar='NODEINSTANCE:"SFM/FOLDERS/IMAGES;..."', type=str, nargs='*', default=[], help='Input folder containing images or folders of images or file (.sfm or .json) ' 'with images paths and optionally predefined camera intrinsics.') general_group.add_argument( '-I', '--inputRecursive', metavar='NODEINSTANCE:"FOLDERS/IMAGES;..."', type=str, nargs='*', default=[], help='Input folders containing all images recursively.') general_group.add_argument( '-p', '--pipeline', metavar='FILE.mg / PIPELINE', type=str, default=os.environ.get('MESHROOM_DEFAULT_PIPELINE', 'photogrammetry'), help='Template pipeline among those listed or a Meshroom file containing a custom pipeline to run on input images:\n' + '\n'.join([' - ' + p for p in meshroom.core.pipelineTemplates]) + '\nRequirements: the graph must contain one CameraInit node, and one Publish node if --output is set.', ) general_group.add_argument( '-o', '--output', metavar='FOLDER', type=str, required=False, help='Output folder where results should be copied to. ' 'If not set, results will have to be retrieved directly from the cache folder.') general_group.add_argument( '-s', '--save', metavar='FILE', type=str, required=False, help='Save the configured Meshroom graph to a project file. It will setup the cache folder accordingly if not explicitly changed by --cache.') general_group.add_argument( '--submit', help='Submit on renderfarm instead of local computation.', action='store_true') general_group.add_argument( '-v', '--verbose', help='Set the verbosity level for logging:\n' ' - fatal: Show only critical errors.\n' ' - error: Show errors only.\n' ' - warning: Show warnings and errors.\n' ' - info: Show standard informational messages.\n' ' - debug: Show detailed debug information.\n' ' - trace: Show all messages, including trace-level details.', default=os.environ.get('MESHROOM_VERBOSE', 'warning'), choices=['fatal', 'error', 'warning', 'info', 'debug', 'trace']) advanced_group = parser.add_argument_group('Advanced Options') advanced_group.add_argument( '--overrides', metavar='SETTINGS', type=str, default=None, help='A JSON file containing the graph parameters override.') advanced_group.add_argument( '--paramOverrides', metavar='NODETYPE:param=value NODEINSTANCE.param=value', type=str, default=None, nargs='*', help='Override specific parameters directly from the command line (by node type or by node names).') advanced_group.add_argument( '--cache', metavar='FOLDER', type=str, default=None, help='Custom cache folder to write computation results.') advanced_group.add_argument( '--compute', metavar='', type=lambda x: bool(distutils.util.strtobool(x)), default=True, required=False, help='You can set it to to disable the computation.') advanced_group.add_argument( '--toNode', metavar='NODE', type=str, nargs='*', default=None, help='Process the node(s) with its dependencies.') advanced_group.add_argument( '--forceStatus', help='Force computation if status is RUNNING or SUBMITTED.', action='store_true') advanced_group.add_argument( '--forceCompute', help='Compute in all cases even if already computed.', action='store_true') advanced_group.add_argument( "--submitLabel", type=str, default=os.environ.get('MESHROOM_SUBMIT_LABEL', '[Meshroom] {projectName}'), help="Label of a node when submitted on renderfarm.") advanced_group.add_argument( '--submitter', type=str, default='SimpleFarm', help='Execute job with a specific submitter.') args = parser.parse_args() logStringToPython = { 'fatal': logging.FATAL, 'error': logging.ERROR, 'warning': logging.WARNING, 'info': logging.INFO, 'debug': logging.DEBUG, 'trace': logging.DEBUG, } logging.getLogger().setLevel(logStringToPython[args.verbose]) if not args.input and not args.inputRecursive: print('Nothing to compute. You need to set --input or --inputRecursive.') sys.exit(1) meshroom.core.initPlugins() meshroom.core.initNodes() graph = meshroom.core.graph.Graph(name=args.pipeline) with meshroom.core.graph.GraphModification(graph): # initialize template pipeline loweredPipelineTemplates = {k.lower(): v for k, v in meshroom.core.pipelineTemplates.items()} if args.pipeline.lower() in loweredPipelineTemplates: graph.initFromTemplate(loweredPipelineTemplates[args.pipeline.lower()], publishOutputs=True if args.output else False) else: # custom pipeline graph.initFromTemplate(args.pipeline, publishOutputs=True if args.output else False) def parseInputs(inputs, uniqueInitNode): """Utility method for parsing the input and inputRecursive arguments.""" mapInputs = {} for inp in inputs: # Stop after the first occurrence to handle multiple input paths on Windows platforms inputGroup = inp.split(':', 1) nodeName = None if len(inputGroup) == 1 and uniqueInitNode: nodeName = uniqueInitNode.getName() elif len(inputGroup) == 2: # If inputGroup[0] is a valid node name, use it as such. if (inputGroup[0] in graph.toDict().keys()): nodeName = inputGroup[0] # Otherwise, the platform might be Windows and inputGroup[0] is part of the input path: # in that case, we should behave as if len(inputGroup) == 1, use the uniqueInitNode's name # and re-join the path together. elif uniqueInitNode: nodeName = uniqueInitNode.getName() inputGroup = [":".join(inputGroup)] else: print('Syntax error in input argument') # If a node name has been provided and the platform is Windows, the length of inputGroup might be # 3: first the node name, then the first path of the input path, then the rest of the input path. # The input path should also be re-joined here. elif len(inputGroup) == 3: nodeName = inputGroup[0] inputGroup[1] = ":".join(inputGroup[1:]) inputGroup.pop(-1) else: print('Syntax error in input argument') sys.exit(1) nodeInputs = inputGroup[-1].split(';') mapInputs[nodeName] = [os.path.abspath(path) for path in nodeInputs] return mapInputs # get init nodes initNodes = graph.findInitNodes() uniqueInitNode = initNodes[0] if (len(initNodes) == 1) else None # parse inputs for each init node mapInput = parseInputs(args.input, uniqueInitNode) # parse recursive inputs for each init node mapInputRecursive = parseInputs(args.inputRecursive, uniqueInitNode) # feed inputs and recursive inputs to init nodes for initNode in initNodes: nodeName = initNode.getName() inp = mapInput.get(nodeName) inpRec = mapInputRecursive.get(nodeName) if not inp and not inpRec: print(f'Nothing to compute for node {nodeName}.') sys.exit(1) initNode.nodeDesc.initialize(initNode, inp, inpRec) if not graph.canComputeLeaves: raise RuntimeError("Graph cannot be computed. Check for compatibility issues.") if args.verbose: graph.setVerbose(args.verbose) if args.output: # if there is more than 1 Publish node, they will all be set to the same output; # depending on what they are connected to, some input files might be overwritten in the output folder # (e.g. if two Publish nodes are connected to two Texturing nodes) publishNodes = graph.nodesOfType('Publish') if len(publishNodes) > 0: for node in publishNodes: node.output.value = os.path.abspath(args.output) else: raise RuntimeError("meshroom_batch requires a pipeline graph with at least one Publish node, none found.") if args.overrides: with open(args.overrides, encoding='utf-8', errors='ignore') as f: data = json.load(f) for nodeName, overrides in data.items(): for attrName, value in overrides.items(): graph.findNode(nodeName).attribute(attrName).value = value if args.paramOverrides: print("\n") reExtract = re.compile(r'(\w+)([:.])(\w[\w.]*)=(.*)') for p in args.paramOverrides: result = reExtract.match(p) if not result: raise ValueError('Invalid param override: ' + str(p)) node, t, param, value = result.groups() if t == ':': nodesOfType = graph.nodesOfType(node) if not nodesOfType: raise ValueError(f'No node with the type "{node}" in the scene.') for n in nodesOfType: print(f'Overrides {node}.{param}={value}') n.attribute(param).value = value elif t == '.': print(f'Overrides {node}.{param}={value}') graph.findNode(node).attribute(param).value = value else: raise ValueError('Invalid param override: ' + str(p)) print("\n") # setup cache directory graph.cacheDir = args.cache if args.cache else "" if args.save: graph.save(args.save, setupProjectFile=not bool(args.cache)) print(f'File successfully saved: "{args.save}"') if not args.output: print(f'No output set, results will be available in the cache folder: "{graph.cacheDir}"') # find end nodes (None will compute all graph) toNodes = graph.findNodes(args.toNode) if args.toNode else None if args.submit: meshroom.core.initSubmitters() if not args.save: raise ValueError('Need to save the project to file to submit on renderfarm.') # submit on renderfarm meshroom.core.graph.submit(args.save, args.submitter, toNode=args.toNode, submitLabel=args.submitLabel) elif args.compute: # find end nodes (None will compute all graph) toNodes = graph.findNodes(args.toNode) if args.toNode else None # start computation meshroom.core.graph.executeGraph(graph, toNodes=toNodes, forceCompute=args.forceCompute, forceStatus=args.forceStatus) Meshroom-2025.1.0/bin/meshroom_compute000077500000000000000000000121131505103770500176160ustar00rootroot00000000000000#!/usr/bin/env python import argparse import logging import os import sys try: import meshroom except Exception: # If meshroom module is not in the PYTHONPATH, add our root using the relative path import pathlib meshroomRootFolder = pathlib.Path(__file__).parent.parent.resolve() sys.path.append(meshroomRootFolder) import meshroom meshroom.setupEnvironment() import meshroom.core import meshroom.core.graph from meshroom.core.node import Status, ExecMode parser = argparse.ArgumentParser(description='Execute a Graph of processes.') parser.add_argument('graphFile', metavar='GRAPHFILE.mg', type=str, help='Filepath to a graph file.') parser.add_argument('--node', metavar='NODE_NAME', type=str, help='Process the node. It will generate an error if the dependencies are not already computed.') parser.add_argument('--toNode', metavar='NODE_NAME', type=str, help='Process the node with its dependencies.') parser.add_argument('--inCurrentEnv', help='Execute process in current env without creating a dedicated runtime environment.', action='store_true') parser.add_argument('--forceStatus', help='Force computation if status is RUNNING or SUBMITTED.', action='store_true') parser.add_argument('--forceCompute', help='Compute in all cases even if already computed.', action='store_true') parser.add_argument('--extern', help='Use this option when you compute externally after submission to a render farm from meshroom.', action='store_true') parser.add_argument('--cache', metavar='FOLDER', type=str, default=None, help='Override the cache folder') parser.add_argument('-v', '--verbose', help='Set the verbosity level for logging:\n' ' - fatal: Show only critical errors.\n' ' - error: Show errors only.\n' ' - warning: Show warnings and errors.\n' ' - info: Show standard informational messages.\n' ' - debug: Show detailed debug information.\n' ' - trace: Show all messages, including trace-level details.', default=os.environ.get('MESHROOM_VERBOSE', 'info'), choices=['fatal', 'error', 'warning', 'info', 'debug', 'trace']) parser.add_argument('-i', '--iteration', type=int, default=-1, help='') args = parser.parse_args() # Setup the verbose level if args.extern: # For extern computation, we want to focus on the node computation log. # So, we avoid polluting the log with general warning about plugins, versions of nodes in file, etc. logging.getLogger().setLevel(level=logging.ERROR) else: logging.getLogger().setLevel(meshroom.logStringToPython[args.verbose]) meshroom.core.initPlugins() meshroom.core.initNodes() graph = meshroom.core.graph.loadGraph(args.graphFile) if args.cache: graph.cacheDir = args.cache graph.update() if args.node: # Execute the node node = graph.findNode(args.node) submittedStatuses = [Status.RUNNING] if not args.extern: # If running as "extern", the task is supposed to have the status SUBMITTED. # If not running as "extern", the SUBMITTED status should generate a warning. submittedStatuses.append(Status.SUBMITTED) if not args.forceStatus and not args.forceCompute: if args.iteration != -1: chunks = [node.chunks[args.iteration]] else: chunks = node.chunks for chunk in chunks: if chunk.status.status in submittedStatuses: # Particular case for the local isolated, the node status is set to RUNNING by the submitter directly. # We ensure that no other instance has started to compute, by checking that the sessionUid is empty. if chunk.node.getMrNodeType() == meshroom.core.MrNodeType.NODE and not chunk.status.sessionUid and chunk.status.submitterSessionUid: continue print(f'Warning: Node is already submitted with status "{chunk.status.status.name}". See file: "{chunk.statusFile}". ExecMode: {chunk.status.execMode.name}, SessionUid: {chunk.status.sessionUid}, submitterSessionUid: {chunk.status.submitterSessionUid}') # sys.exit(-1) if args.extern: # Restore the log level logging.getLogger().setLevel(meshroom.logStringToPython[args.verbose]) node.preprocess() if args.iteration != -1: chunk = node.chunks[args.iteration] chunk.process(args.forceCompute, args.inCurrentEnv) else: node.process(args.forceCompute, args.inCurrentEnv) node.postprocess() else: if args.iteration != -1: print('Error: "--iteration" only make sense when used with "--node".') sys.exit(-1) toNodes = None if args.toNode: toNodes = graph.findNodes([args.toNode]) meshroom.core.graph.executeGraph(graph, toNodes=toNodes, forceCompute=args.forceCompute, forceStatus=args.forceStatus) Meshroom-2025.1.0/bin/meshroom_newNodeType000077500000000000000000000217051505103770500204120ustar00rootroot00000000000000#!/usr/bin/env python import argparse import os import re import sys import shlex from pprint import pprint def trim(s): """ All repetition of any kind of space is replaced by a single space and remove trailing space at beginning or end. """ # regex to replace all space groups by a single space # use split() to remove trailing space at beginning/end return re.sub(r'\s+', ' ', s).strip() def quotesForStrings(valueStr): """ Return the input string with quotes if it cannot be cast into another builtin type. """ v = valueStr try: int(valueStr) except ValueError: try: float(valueStr) except ValueError: if "'" in valueStr: v = f"'''{valueStr}'''" else: v = f"'{valueStr}'" return v def convertToLabel(name): camelCaseToLabel = re.sub('()([A-Z][a-z]*?)', r'\1 \2', name) snakeToLabel = ' '.join(word.capitalize() for word in camelCaseToLabel.split('_')) snakeToLabel = ' '.join(word.capitalize() for word in snakeToLabel.split(' ')) return snakeToLabel def is_int(s): try: int(s) return True except ValueError: return False def is_float(s): try: float(s) return True except ValueError: return False parser = argparse.ArgumentParser(description='Create a new Node Type') parser.add_argument('node', metavar='NODE_NAME', type=str, help='New node name') parser.add_argument('bin', metavar='CMDLINE', type=str, default=None, help='Input executable') parser.add_argument('--output', metavar='DIR', type=str, default=os.path.dirname(__file__), help='Output plugin folder') parser.add_argument('--parser', metavar='PARSER', type=str, default='boost', help='Select the parser adapted for your command line: {boost,cmdLineLib,basic}.') parser.add_argument("--force", help="Allows to overwrite the output plugin file.", action="store_true") args = parser.parse_args() inputCmdLineDoc = None soft = "{nodeType}" if args.bin: soft = args.bin import subprocess proc = subprocess.Popen(args=shlex.split(args.bin) + ['--help'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = proc.communicate() inputCmdLineDoc = stdout if stdout else stderr elif sys.stdin.isatty(): inputCmdLineDoc = ''.join([line for line in sys.stdin]) if not inputCmdLineDoc: print('No input documentation.') print(f'Usage: YOUR_COMMAND --help | {os.path.splitext(__file__)[0]}') sys.exit(-1) fileStr = '''import sys from meshroom.core import desc class __COMMANDNAME__(desc.CommandLineNode): commandLine = '__SOFT__ {allParams}' '''.replace('__COMMANDNAME__', args.node).replace('__SOFT__', soft) print(inputCmdLineDoc) args_re = None if args.parser == 'boost': args_re = re.compile( r'^\s+' # space(s) r'(?:-(?P\w+)\|?)?' # potential argument short name r'\s*\[?' # potential '[' r'\s*--(?P\w+)' # argument long name r'(?:\s*\])?' # potential ']' r'(?:\s+(?P\w+)?)?' # potential arg r'(?:\s+\(\=(?P.+)\))?' # potential default value r'\s+(?P.*?)\n' # end of the line r'(?P(?:\s+[^-\s].+?\n)*)' # next documentation lines , re.MULTILINE) elif args.parser == 'cmdLineLib': args_re = re.compile( '^' r'\[' # '[' r'-(?P\w+)' # argument short name r'\|' r'--(?P\w+)' # argument long name r'(?:\s+(?P\w+)?)?' # potential arg r'\]' # ']' r'()' # no default value r'(?P.*?)?\n' # end of the line r'(?P(?:[^\[\w].+?\n)*)' # next documentation lines , re.MULTILINE) elif args.parser == 'basic': args_re = re.compile(r'()--(?P\w+)()()()()') else: print(f'Error: Unknown input parser "{args.parser}"') sys.exit(-1) choiceValues1_re = re.compile(r'\* (?P\w+):') choiceValues2_re = re.compile(r'\((?P.+?)\)') choiceValues3_re = re.compile(r'\{(?P.+?)\}') cmdLineArgs = args_re.findall(inputCmdLineDoc.decode('utf-8')) print('='*80) pprint(cmdLineArgs) outputNodeStr = '' inputNodeStr = '' for cmdLineArg in cmdLineArgs: shortName = cmdLineArg[0] longName = cmdLineArg[1] if longName == 'help': continue # skip help argument arg = cmdLineArg[2] value = cmdLineArg[3] descLines = cmdLineArg[4:] description = ''.join(descLines).strip() if description.endswith(':'): # If documentation is multiple lines and the last line ends with ':', # we remove this last line as it is probably the title of the next group of options description = '\n'.join(description.split('\n')[:-1]) description = trim(description) values = choiceValues1_re.findall(description) if not values: possibleLists = choiceValues2_re.findall(description) + choiceValues3_re.findall(description) for possibleList in possibleLists: candidate = possibleList.split(',') if len(candidate) > 1: values = [trim(v) for v in candidate] cmdLineArgLower = ' '.join([shortName, longName, arg, value, description]).lower() namesLower = ' '.join([shortName, longName]).lower() isBool = (arg == '' and value == '') isFile = 'path' in cmdLineArgLower or 'folder' in cmdLineArgLower or 'file' in cmdLineArgLower isChoice = bool(values) isOutput = 'output' in cmdLineArgLower or 'out' in namesLower isInt = is_int(value) isFloat = is_float(value) argStr = None if isBool: argStr = """ desc.BoolParam( name='{name}', label='{label}', description='''{description}''', value={value}, ),""".format( name=longName, label=convertToLabel(longName), description=description, value=quotesForStrings(value), arg=arg, ) elif isFile: argStr = """ desc.File( name='{name}', label='{label}', description='''{description}''', value={value}, ),""".format( name=longName, label=convertToLabel(longName), description=description, value=quotesForStrings(value), arg=arg, ) elif isChoice: argStr = """ desc.ChoiceParam( name='{name}', label='{label}', description='''{description}''', value={value}, values={values}, exclusive={exclusive}, ),""".format( name=longName, label=convertToLabel(longName), description=description, value=quotesForStrings(value), values=values, exclusive=True, ) elif isInt: argStr = """ desc.IntParam( name='{name}', label='{label}', description='''{description}''', value={value}, range={range}, ),""".format( name=longName, label=convertToLabel(longName), description=description, value=value, range='(-sys.maxsize, sys.maxsize, 1)', ) elif isFloat: argStr = """ desc.FloatParam( name='{name}', label='{label}', description='''{description}''', value={value}, range={range}, ),""".format( name=longName, label=convertToLabel(longName), description=description, value=value, range='''(-float('inf'), float('inf'), 0.01)''', ) else: argStr = """ desc.StringParam( name='{name}', label='{label}', description='''{description}''', value={value}, ),""".format( name=longName, label=convertToLabel(longName), description=description, value=quotesForStrings(value), range=range, ) if isOutput: outputNodeStr += argStr else: inputNodeStr += argStr fileStr += """ inputs = [""" + inputNodeStr + """ ] outputs = [""" + outputNodeStr + """ ] """ outputFilepath = os.path.join(args.output, args.node + '.py') if not args.force and os.path.exists(outputFilepath): print(f'Plugin "{args.node}" already exists "{outputFilepath}".') sys.exit(-1) with open(outputFilepath, 'w') as pluginFile: pluginFile.write(fileStr) print(f'New node exported to: "{outputFilepath}"') Meshroom-2025.1.0/bin/meshroom_statistics000077500000000000000000000050601505103770500203370ustar00rootroot00000000000000#!/usr/bin/env python import argparse import os import sys from pprint import pprint from collections import defaultdict from collections.abc import Iterable from meshroom.core import graph as pg def addPlots(curves, title, fileObj): if not curves: return import matplotlib.pyplot as plt, mpld3 fig = plt.figure() ax = fig.add_subplot(111, facecolor='#EEEEEE') ax.grid(color='white', linestyle='solid') for curveName, curve in curves: if not isinstance(curve[0], str): ax.plot(curve, label=curveName) ax.legend() # plt.ylim(0, 100) plt.title(title) mpld3.save_html(fig, fileObj) plt.close(fig) parser = argparse.ArgumentParser(description='Query the status of nodes in a Graph of processes.') parser.add_argument('graphFile', metavar='GRAPHFILE.mg', type=str, help='Filepath to a graph file.') parser.add_argument('--node', metavar='NODE_NAME', type=str, help='Process the node alone.') parser.add_argument('--graph', metavar='NODE_NAME', type=str, help='Process the node and all previous nodes needed.') parser.add_argument('--exportHtml', metavar='FILE', type=str, help='Filepath to the output html file.') parser.add_argument("--verbose", help="Print full status information", action="store_true") args = parser.parse_args() if not os.path.exists(args.graphFile): print(f'ERROR: No graph file "{args.graphFile}".') sys.exit(-1) graph = pg.loadGraph(args.graphFile) graph.update() graph.updateStatisticsFromCache() nodes = [] if args.node: nodes = [graph.findNode(args.node)] else: startNodes = None if args.graph: startNodes = [graph.node(args.graph)] nodes, edges = graph.dfsOnFinish(startNodes=startNodes) for node in nodes: for chunk in node.chunks: print(f'{chunk.name}: {chunk.statistics.toDict()}\n') if args.exportHtml: with open(args.exportHtml, 'w') as fileObj: for node in nodes: for chunk in node.chunks: for curves in (chunk.statistics.computer.curves, chunk.statistics.process.curves): exportCurves = defaultdict(list) for name, curve in curves.items(): s = name.split('.') figName = s[0] curveName = ''.join(s[1:]) exportCurves[figName].append((curveName, curve)) for name, curves in exportCurves.items(): addPlots(curves, name, fileObj) Meshroom-2025.1.0/bin/meshroom_status000077500000000000000000000032071505103770500174710ustar00rootroot00000000000000#!/usr/bin/env python import argparse import os import sys from pprint import pprint import meshroom meshroom.setupEnvironment() import meshroom.core.graph parser = argparse.ArgumentParser(description='Query the status of nodes in a Graph of processes.') parser.add_argument('graphFile', metavar='GRAPHFILE.mg', type=str, help='Filepath to a graph file.') parser.add_argument('--node', metavar='NODE_NAME', type=str, help='Process the node alone.') parser.add_argument('--toNode', metavar='NODE_NAME', type=str, help='Process the node and all previous nodes needed.') parser.add_argument("--verbose", help="Print full status information", action="store_true") args = parser.parse_args() if not os.path.exists(args.graphFile): print(f'ERROR: No graph file "{args.node}".') sys.exit(-1) graph = meshroom.core.graph.loadGraph(args.graphFile) graph.update() if args.node: node = graph.node(args.node) if node is None: print(f'ERROR: node "{args.node}" does not exist in file "{args.graphFile}".') sys.exit(-1) for chunk in node.chunks: print(f'{chunk.name}: {chunk.status.status.name}') if args.verbose: print('statusFile: ', node.statusFile) pprint(node.status.toDict()) else: startNodes = None if args.toNode: startNodes = [graph.findNode(args.toNode)] nodes, edges = graph.dfsOnFinish(startNodes=startNodes) for node in nodes: for chunk in node.chunks: print(f'{chunk.name}: {chunk.status.status.name}') if args.verbose: pprint([n.status.toDict() for n in nodes]) Meshroom-2025.1.0/bin/meshroom_submit000077500000000000000000000020261505103770500174470ustar00rootroot00000000000000#!/usr/bin/env python import argparse import meshroom meshroom.setupEnvironment() import meshroom.core.graph parser = argparse.ArgumentParser(description='Submit a Graph of processes on renderfarm.') parser.add_argument('meshroomFile', metavar='MESHROOMFILE.mg', type=str, help='Filepath to a graph file.') parser.add_argument('--toNode', metavar='NODE_NAME', type=str, help='Process the node with its dependencies.') parser.add_argument('--submitter', type=str, default='SimpleFarm', help='Execute job with a specific submitter.') parser.add_argument("--submitLabel", type=str, default='[Meshroom] {projectName}', help="Label of a node in the submitter") args = parser.parse_args() meshroom.core.initPlugins() meshroom.core.initNodes() meshroom.core.initSubmitters() meshroom.core.graph.submit(args.meshroomFile, args.submitter, toNode=args.toNode, submitLabel=args.submitLabel) Meshroom-2025.1.0/dev_requirements.txt000066400000000000000000000001271505103770500176570ustar00rootroot00000000000000# packaging cx_Freeze==7.2.10 # Python binding packaging numpy==1.* # testing pytest Meshroom-2025.1.0/docker/000077500000000000000000000000001505103770500150045ustar00rootroot00000000000000Meshroom-2025.1.0/docker/Dockerfile_rocky000066400000000000000000000106761505103770500202170ustar00rootroot00000000000000ARG MESHROOM_VERSION ARG AV_VERSION ARG CUDA_VERSION ARG ROCKY_VERSION FROM alicevision/meshroom-deps:${MESHROOM_VERSION}-av${AV_VERSION}-rocky${ROCKY_VERSION}-cuda${CUDA_VERSION} LABEL maintainer="AliceVision Team alicevision-team@googlegroups.com" # Execute with nvidia docker (https://github.com/nvidia/nvidia-docker/wiki/Installation-(version-2.0)) # docker run -it --runtime nvidia -p 2222:22 --name meshroom -v:/data alicevision/meshroom:develop-av2.2.8.develop-ubuntu20.04-cuda11.0 # ssh -p 2222 -X root@ /opt/Meshroom_bundle/Meshroom # Password is 'meshroom' RUN dnf install -y patchelf ENV MESHROOM_DEV=/opt/Meshroom \ MESHROOM_BUILD=/tmp/Meshroom_build \ MESHROOM_BUNDLE=/opt/Meshroom_bundle \ AV_INSTALL=/opt/AliceVision_install \ QT_DIR=/opt/Qt/6.8.3/gcc_64 \ PATH="${PATH}:${MESHROOM_BUNDLE}" COPY *.txt *.md *.py ${MESHROOM_DEV}/ COPY ./docs ${MESHROOM_DEV}/docs COPY ./meshroom ${MESHROOM_DEV}/meshroom COPY ./tests ${MESHROOM_DEV}/tests COPY ./bin ${MESHROOM_DEV}/bin WORKDIR ${MESHROOM_DEV} # Generate the exe for Meshroom and clean-up the bundle folder RUN python setup.py install_exe -d "${MESHROOM_BUNDLE}" && \ find ${MESHROOM_BUNDLE} -name "*Qt6Web*" -delete && \ find ${MESHROOM_BUNDLE} -name "*Qt6Designer*" -delete && \ rm -rf ${MESHROOM_BUNDLE}/lib/PySide6/typesystems/ \ ${MESHROOM_BUNDLE}/lib/PySide6/examples/ \ ${MESHROOM_BUNDLE}/lib/PySide6/include/ \ ${MESHROOM_BUNDLE}/lib/PySide6/Qt/translations/ \ ${MESHROOM_BUNDLE}/lib/PySide6/Qt/resources/ \ ${MESHROOM_BUNDLE}/lib/PySide6/QtWeb* \ ${MESHROOM_BUNDLE}/lib/PySide6/rcc \ ${MESHROOM_BUNDLE}/lib/PySide6/designer WORKDIR ${MESHROOM_BUILD} # Move the bundled installation of AliceVision into Meshroom's bundle RUN mkdir ${MESHROOM_BUNDLE}/aliceVision && \ mv /opt/AliceVision_bundle/* ${MESHROOM_BUNDLE}/aliceVision # Build Meshroom plugins RUN cmake "${MESHROOM_DEV}" -DALICEVISION_ROOT="${AV_INSTALL}" -DCMAKE_INSTALL_PREFIX="${MESHROOM_BUNDLE}/qtPlugins" RUN make "-j$(nproc)" QtAliceVision RUN make "-j$(nproc)" && \ rm -rf "${MESHROOM_BUILD}" "${MESHROOM_DEV}" \ ${MESHROOM_BUNDLE}/aliceVision/share/doc \ ${MESHROOM_BUNDLE}/aliceVision/share/eigen3 \ ${MESHROOM_BUNDLE}/aliceVision/share/fonts \ ${MESHROOM_BUNDLE}/aliceVision/share/lemon \ ${MESHROOM_BUNDLE}/aliceVision/share/libraw \ ${MESHROOM_BUNDLE}/aliceVision/share/man/ \ aliceVision/share/pkgconfig # PySide6: copy missing libQt63DQuickScene3D.so along with its dependencies to avoid runtime issues RUN cp ${QT_DIR}/lib/libQt63DQuickScene3D.so.6.8.3 ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/QtQuick/Dialogs && \ mv ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/QtQuick/Dialogs/libQt63DQuickScene3D.so.6.8.3 ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/QtQuick/Dialogs/libQt63DQuickScene3D.so.6 && \ cp ${MESHROOM_BUNDLE}/lib/PySide6/Qt/lib/libQt6Concurrent.so.6 ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/QtQuick/Dialogs && \ cp ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/Qt3D/Animation/libQt63DAnimation.so.6 ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/QtQuick/Dialogs && \ cp ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/Qt3D/Core/libQt63DCore.so.6 ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/QtQuick/Dialogs && \ cp ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/Qt3D/Input/libQt63DInput.so.6 ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/QtQuick/Dialogs && \ cp ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/Qt3D/Logic/libQt63DLogic.so.6 ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/QtQuick/Dialogs && \ cp ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/Qt3D/Render/libQt63DRender.so.6 ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/QtQuick/Dialogs # Copy libOpenGL in the bundle: needed by QtAliceVision as a side effect of a Qt6 bug RUN cp /usr/lib64/libOpenGL.so.0.0.0 ${MESHROOM_BUNDLE}/lib RUN mv ${MESHROOM_BUNDLE}/lib/libOpenGL.so.0.0.0 ${MESHROOM_BUNDLE}/lib/libOpenGL.so.0 # Enable SSH X11 forwarding, needed when the Docker image # is run on a remote machine RUN dnf install -y openssh openssh-clients openssh-server xorg-x11-xauth RUN systemctl enable sshd && \ mkdir -p /run/sshd && \ ssh-keygen -A RUN sed -i "s/^.*X11Forwarding.*$/X11Forwarding yes/; s/^.*X11UseLocalhost.*$/X11UseLocalhost no/; s/^.*PermitRootLogin prohibit-password/PermitRootLogin yes/; s/^.*X11UseLocalhost.*/X11UseLocalhost no/;" /etc/ssh/sshd_config RUN echo "root:meshroom" | chpasswd WORKDIR /root EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"] Meshroom-2025.1.0/docker/Dockerfile_rocky_deps000066400000000000000000000037001505103770500212200ustar00rootroot00000000000000ARG AV_VERSION ARG CUDA_VERSION ARG ROCKY_VERSION FROM alicevision/alicevision:${AV_VERSION}-rocky${ROCKY_VERSION}-cuda${CUDA_VERSION} LABEL maintainer="AliceVision Team alicevision-team@googlegroups.com" # Execute with nvidia docker (https://github.com/nvidia/nvidia-docker/wiki/Installation-(version-2.0)) # docker run -it --runtime=nvidia meshroom ENV MESHROOM_DEV=/opt/Meshroom \ MESHROOM_BUILD=/tmp/Meshroom_build \ QT_DIR=/opt/Qt/6.8.3/gcc_64 \ QT_CI_LOGIN=alicevisionjunk@gmail.com \ QT_CI_P=azerty1. # Install libs needed by Qt RUN dnf update -y RUN dnf install -y flex fontconfig freetype glib2-devel libICE RUN dnf install -y libX11 libXext libXi libXrender libSM RUN dnf install -y libXt-devel mesa-libGLU-devel mesa-libOSMesa-devel mesa-libGL-devel mesa-libEGL-devel RUN dnf install -y zlib-devel systemd openssh-server RUN dnf install -y libxcb-devel \ libxkbcommon-devel \ libxkbcommon-x11-devel \ xcb-util-wm xcb-util-image \ xcb-util-keysyms \ xcb-util-renderutil RUN dnf install -y libglvnd-opengl # Install Qt (to build plugins) WORKDIR /tmp/qt COPY dl/qt.run /tmp/qt RUN chmod +x qt.run RUN ./qt.run --root /opt/Qt --verbose --email ${QT_CI_LOGIN} --password ${QT_CI_P} --accept-obligations \ --accept-licenses --default-answer --platform minimal --auto-answer installationErrorWithCancel=Ignore \ --no-force-installations --no-default-installations --confirm-command \ install qt.qt6.683.linux_gcc_64 qt.qt6.683.addons.qtcharts qt.qt6.683.addons.qt3d RUN rm qt.run # Strip sections containing ".note.ABI.tag" from .so: https://github.com/Microsoft/WSL/issues/3023 RUN find ${QT_DIR}/lib/ -name '*.so' | xargs strip --remove-section=.note.ABI-tag COPY ./*requirements.txt ${MESHROOM_DEV}/ # Install Meshroom requirements and freeze bundle WORKDIR "${MESHROOM_DEV}" RUN python -m pip install -r dev_requirements.txt -r requirements.txt Meshroom-2025.1.0/docker/Dockerfile_ubuntu000066400000000000000000000100621505103770500203770ustar00rootroot00000000000000ARG MESHROOM_VERSION ARG AV_VERSION ARG CUDA_VERSION ARG UBUNTU_VERSION FROM alicevision/meshroom-deps:${MESHROOM_VERSION}-av${AV_VERSION}-ubuntu${UBUNTU_VERSION}-cuda${CUDA_VERSION} LABEL maintainer="AliceVision Team alicevision-team@googlegroups.com" # Execute with nvidia docker (https://github.com/nvidia/nvidia-docker/wiki/Installation-(version-2.0)) # docker run -it --runtime nvidia -p 2222:22 --name meshroom -v:/data alicevision/meshroom:develop-av2.2.8.develop-ubuntu20.04-cuda11.0 # ssh -p 2222 -X root@ /opt/Meshroom_bundle/Meshroom # Password is 'meshroom' ENV MESHROOM_DEV=/opt/Meshroom \ MESHROOM_BUILD=/tmp/Meshroom_build \ MESHROOM_BUNDLE=/opt/Meshroom_bundle \ AV_INSTALL=/opt/AliceVision_install \ QT_DIR=/opt/Qt/6.8.3/gcc_64 \ PATH="${PATH}:${MESHROOM_BUNDLE}" COPY *.txt *.md *.py ${MESHROOM_DEV}/ COPY ./docs ${MESHROOM_DEV}/docs COPY ./meshroom ${MESHROOM_DEV}/meshroom COPY ./tests ${MESHROOM_DEV}/tests COPY ./bin ${MESHROOM_DEV}/bin WORKDIR ${MESHROOM_DEV} RUN python setup.py install_exe -d "${MESHROOM_BUNDLE}" && \ find ${MESHROOM_BUNDLE} -name "*Qt6Web*" -delete && \ find ${MESHROOM_BUNDLE} -name "*Qt6Designer*" -delete && \ rm -rf ${MESHROOM_BUNDLE}/lib/PySide6/typesystems/ \ ${MESHROOM_BUNDLE}/lib/PySide6/examples/ \ ${MESHROOM_BUNDLE}/lib/PySide6/include/ \ ${MESHROOM_BUNDLE}/lib/PySide6/Qt/translations/ \ ${MESHROOM_BUNDLE}/lib/PySide6/Qt/resources/ \ ${MESHROOM_BUNDLE}/lib/PySide6/QtWeb* \ ${MESHROOM_BUNDLE}/lib/PySide6/rcc \ ${MESHROOM_BUNDLE}/lib/PySide6/designer WORKDIR ${MESHROOM_BUILD} # Move the bundled installation of AliceVision into Meshroom's bundle RUN mkdir ${MESHROOM_BUNDLE}/aliceVision && \ mv /opt/AliceVision_bundle/* ${MESHROOM_BUNDLE}/aliceVision # Build Meshroom plugins RUN cmake "${MESHROOM_DEV}" -DALICEVISION_ROOT="${AV_INSTALL}" -DCMAKE_INSTALL_PREFIX="${MESHROOM_BUNDLE}/qtPlugins" RUN make "-j$(nproc)" QtAliceVision RUN make "-j$(nproc)" && \ rm -rf "${MESHROOM_BUILD}" "${MESHROOM_DEV}" \ ${MESHROOM_BUNDLE}/aliceVision/share/doc \ ${MESHROOM_BUNDLE}/aliceVision/share/eigen3 \ ${MESHROOM_BUNDLE}/aliceVision/share/fonts \ ${MESHROOM_BUNDLE}/aliceVision/share/lemon \ ${MESHROOM_BUNDLE}/aliceVision/share/libraw \ ${MESHROOM_BUNDLE}/aliceVision/share/man/ \ aliceVision/share/pkgconfig # PySide6: copy missing libQt63DQuickScene3D.so along with its dependencies to avoid runtime issues RUN cp ${QT_DIR}/lib/libQt63DQuickScene3D.so.6.8.3 ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/QtQuick/Dialogs && \ mv ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/QtQuick/Dialogs/libQt63DQuickScene3D.so.6.8.3 ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/QtQuick/Dialogs/libQt63DQuickScene3D.so.6 && \ cp ${MESHROOM_BUNDLE}/lib/PySide6/Qt/lib/libQt6Concurrent.so.6 ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/QtQuick/Dialogs && \ cp ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/Qt3D/Animation/libQt63DAnimation.so.6 ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/QtQuick/Dialogs && \ cp ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/Qt3D/Core/libQt63DCore.so.6 ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/QtQuick/Dialogs && \ cp ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/Qt3D/Input/libQt63DInput.so.6 ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/QtQuick/Dialogs && \ cp ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/Qt3D/Logic/libQt63DLogic.so.6 ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/QtQuick/Dialogs && \ cp ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/Qt3D/Render/libQt63DRender.so.6 ${MESHROOM_BUNDLE}/lib/PySide6/Qt/qml/QtQuick/Dialogs # Enable SSH X11 forwarding, needed when the Docker image # is run on a remote machine RUN apt install ssh xauth && \ systemctl enable ssh && \ mkdir -p /run/sshd RUN sed -i "s/^.*X11Forwarding.*$/X11Forwarding yes/; s/^.*X11UseLocalhost.*$/X11UseLocalhost no/; s/^.*PermitRootLogin prohibit-password/PermitRootLogin yes/; s/^.*X11UseLocalhost.*/X11UseLocalhost no/;" /etc/ssh/sshd_config RUN echo "root:meshroom" | chpasswd WORKDIR /root EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"] Meshroom-2025.1.0/docker/Dockerfile_ubuntu_deps000066400000000000000000000046441505103770500214230ustar00rootroot00000000000000ARG AV_VERSION ARG CUDA_VERSION ARG UBUNTU_VERSION FROM alicevision/alicevision:${AV_VERSION}-ubuntu${UBUNTU_VERSION}-cuda${CUDA_VERSION} LABEL maintainer="AliceVision Team alicevision-team@googlegroups.com" # Execute with nvidia docker (https://github.com/nvidia/nvidia-docker/wiki/Installation-(version-2.0)) # docker run -it --runtime=nvidia meshroom ENV MESHROOM_DEV=/opt/Meshroom \ MESHROOM_BUILD=/tmp/Meshroom_build \ QT_DIR=/opt/Qt/6.8.3/gcc_64 \ QT_CI_LOGIN=alicevisionjunk@gmail.com \ QT_CI_P=azerty1. # Install libs needed by Qt RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \ flex \ fontconfig \ libfreetype6 \ libglib2.0-0 \ libice6 \ libx11-6 \ libxcb1 \ libxext6 \ libxi6 \ libxrender1 \ libsm6 RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \ libxt-dev \ libosmesa-dev \ libgl-dev \ libegl-dev \ libglu-dev \ libxkbcommon-x11-0 \ libz-dev \ systemd \ ssh RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \ libxcb1-dev \ libxcb-icccm4 \ libxcb-render-util0 \ libxcb-shape0 \ libxcb-keysyms1 \ libxcb-image0 \ libxkbcommon-dev RUN apt-get install -y --no-install-recommends \ software-properties-common # Install Python3 # RUN apt install python3-pip -y && pip3 install --upgrade pip # Install Qt (to build plugins) WORKDIR /tmp/qt COPY dl/qt.run /tmp/qt RUN chmod +x qt.run RUN ./qt.run --root /opt/Qt --verbose --email ${QT_CI_LOGIN} --password ${QT_CI_P} --accept-obligations \ --accept-licenses --default-answer --platform minimal --auto-answer installationErrorWithCancel=Ignore \ --no-force-installations --no-default-installations --confirm-command \ install qt.qt6.683.linux_gcc_64 qt.qt6.683.addons.qtcharts qt.qt6.683.addons.qt3d RUN rm qt.run # Strip sections containing ".note.ABI.tag" from .so: https://github.com/Microsoft/WSL/issues/3023 RUN find ${QT_DIR}/lib/ -name '*.so' | xargs strip --remove-section=.note.ABI-tag COPY ./*requirements.txt ./setup.py ${MESHROOM_DEV}/ # Install Meshroom requirements and freeze bundle WORKDIR "${MESHROOM_DEV}" RUN python -m pip install -r dev_requirements.txt -r requirements.txt Meshroom-2025.1.0/docker/build-all.sh000077500000000000000000000003671505103770500172160ustar00rootroot00000000000000#!/bin/sh set -e test -d docker || ( echo This script must be run from the top level Meshroom directory exit 1 ) CUDA_VERSION=12.1.1 UBUNTU_VERSION=22.04 docker/build-ubuntu.sh CUDA_VERSION=12.1.1 ROCKY_VERSION=9 docker/build-rocky.shMeshroom-2025.1.0/docker/build-rocky.sh000077500000000000000000000026141505103770500175720ustar00rootroot00000000000000#!/bin/bash set -e test -z "$MESHROOM_VERSION" && MESHROOM_VERSION="$(git rev-parse --abbrev-ref HEAD)-$(git rev-parse --short HEAD)" test -z "$AV_VERSION" && echo "AliceVision version not specified, set AV_VERSION in the environment" && exit 1 test -z "$CUDA_VERSION" && CUDA_VERSION=12.1.1 test -z "$ROCKY_VERSION" && ROCKY_VERSION=9 test -d docker || ( echo This script must be run from the top level Meshroom directory exit 1 ) test -d dl || \ mkdir dl test -f dl/qt.run || \ wget --no-check-certificate "https://download.qt.io/official_releases/online_installers/qt-online-installer-linux-x64-online.run" -O "dl/qt.run" # DEPENDENCIES docker build \ --rm \ --progress=plain \ --build-arg "CUDA_VERSION=${CUDA_VERSION}" \ --build-arg "ROCKY_VERSION=${ROCKY_VERSION}" \ --build-arg "AV_VERSION=${AV_VERSION}" \ --tag "alicevision/meshroom-deps:${MESHROOM_VERSION}-av${AV_VERSION}-rocky${ROCKY_VERSION}-cuda${CUDA_VERSION}" \ -f docker/Dockerfile_rocky_deps . # Meshroom docker build \ --rm \ --progress=plain \ --build-arg "MESHROOM_VERSION=${MESHROOM_VERSION}" \ --build-arg "CUDA_VERSION=${CUDA_VERSION}" \ --build-arg "ROCKY_VERSION=${ROCKY_VERSION}" \ --build-arg "AV_VERSION=${AV_VERSION}" \ --tag "alicevision/meshroom:${MESHROOM_VERSION}-av${AV_VERSION}-rocky${ROCKY_VERSION}-cuda${CUDA_VERSION}" \ -f docker/Dockerfile_rocky . Meshroom-2025.1.0/docker/build-ubuntu.sh000077500000000000000000000026341505103770500177670ustar00rootroot00000000000000#!/bin/bash set -e test -z "$MESHROOM_VERSION" && MESHROOM_VERSION="$(git rev-parse --abbrev-ref HEAD)-$(git rev-parse --short HEAD)" test -z "$AV_VERSION" && echo "AliceVision version not specified, set AV_VERSION in the environment" && exit 1 test -z "$CUDA_VERSION" && CUDA_VERSION=12.1.1 test -z "$UBUNTU_VERSION" && UBUNTU_VERSION=22.04 test -d docker || ( echo This script must be run from the top level Meshroom directory exit 1 ) test -d dl || \ mkdir dl test -f dl/qt.run || \ wget --no-check-certificate "https://download.qt.io/official_releases/online_installers/qt-online-installer-linux-x64-online.run" -O "dl/qt.run" # DEPENDENCIES docker build \ --rm \ --progress=plain \ --build-arg "CUDA_VERSION=${CUDA_VERSION}" \ --build-arg "UBUNTU_VERSION=${UBUNTU_VERSION}" \ --build-arg "AV_VERSION=${AV_VERSION}" \ --tag "alicevision/meshroom-deps:${MESHROOM_VERSION}-av${AV_VERSION}-ubuntu${UBUNTU_VERSION}-cuda${CUDA_VERSION}" \ -f docker/Dockerfile_ubuntu_deps . # Meshroom docker build \ --rm \ --progress=plain \ --build-arg "MESHROOM_VERSION=${MESHROOM_VERSION}" \ --build-arg "CUDA_VERSION=${CUDA_VERSION}" \ --build-arg "UBUNTU_VERSION=${UBUNTU_VERSION}" \ --build-arg "AV_VERSION=${AV_VERSION}" \ --tag "alicevision/meshroom:${MESHROOM_VERSION}-av${AV_VERSION}-ubuntu${UBUNTU_VERSION}-cuda${CUDA_VERSION}" \ -f docker/Dockerfile_ubuntu . Meshroom-2025.1.0/docker/extract-rocky.sh000077500000000000000000000013531505103770500201440ustar00rootroot00000000000000#!/bin/bash set -ex test -z "$MESHROOM_VERSION" && MESHROOM_VERSION="$(git rev-parse --abbrev-ref HEAD)-$(git rev-parse --short HEAD)" test -z "$AV_VERSION" && echo "AliceVision version not specified, set AV_VERSION in the environment" && exit 1 test -z "$CUDA_VERSION" && CUDA_VERSION="12.1.1" test -z "$ROCKY_VERSION" && ROCKY_VERSION="9" test -d docker || ( echo This script must be run from the top level Meshroom directory exit 1 ) VERSION_NAME=${MESHROOM_VERSION}-av${AV_VERSION}-rocky${ROCKY_VERSION}-cuda${CUDA_VERSION} # Retrieve the Meshroom bundle folder rm -rf ./Meshroom-${VERSION_NAME} CID=$(docker create alicevision/meshroom:${VERSION_NAME}) docker cp ${CID}:/opt/Meshroom_bundle ./Meshroom-${VERSION_NAME} docker rm ${CID} Meshroom-2025.1.0/docker/extract-ubuntu.sh000077500000000000000000000013631505103770500203400ustar00rootroot00000000000000#!/bin/bash set -ex test -z "$MESHROOM_VERSION" && MESHROOM_VERSION="$(git rev-parse --abbrev-ref HEAD)-$(git rev-parse --short HEAD)" test -z "$AV_VERSION" && echo "AliceVision version not specified, set AV_VERSION in the environment" && exit 1 test -z "$CUDA_VERSION" && CUDA_VERSION="12.1.1" test -z "$UBUNTU_VERSION" && UBUNTU_VERSION="22.04" test -d docker || ( echo This script must be run from the top level Meshroom directory exit 1 ) VERSION_NAME=${MESHROOM_VERSION}-av${AV_VERSION}-ubuntu${UBUNTU_VERSION}-cuda${CUDA_VERSION} # Retrieve the Meshroom bundle folder rm -rf ./Meshroom-${VERSION_NAME} CID=$(docker create alicevision/meshroom:${VERSION_NAME}) docker cp ${CID}:/opt/Meshroom_bundle ./Meshroom-${VERSION_NAME} docker rm ${CID} Meshroom-2025.1.0/docs/000077500000000000000000000000001505103770500144655ustar00rootroot00000000000000Meshroom-2025.1.0/docs/.gitignore000066400000000000000000000000421505103770500164510ustar00rootroot00000000000000# Sphinx build/ source/generated/ Meshroom-2025.1.0/docs/Makefile000066400000000000000000000011761505103770500161320ustar00rootroot00000000000000# Minimal makefile for Sphinx documentation # # You can set these variables from the command line, and also # from the environment for the first two. SPHINXOPTS ?= SPHINXBUILD ?= sphinx-build SOURCEDIR = source BUILDDIR = build # Put it first so that "make" without argument is like "make help". help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) .PHONY: help Makefile # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) Meshroom-2025.1.0/docs/README.md000066400000000000000000000012511505103770500157430ustar00rootroot00000000000000# Documentation We use [Sphinx](https://www.sphinx-doc.org) to generate Meshroom's documentation. ## Requirements To install all the requirements for building the documentation, simply run: ```bash pip install sphinx sphinx-rtd-theme myst-parser ``` You also need to have [Graphviz](https://graphviz.org/) installed. > Note: since Sphinx will import the entire `meshroom` package, all requirements for Meshroom must also be installed ## Build To generate the documentation, go to the `docs` folder and run the Sphinx makefile: ```bash cd meshroom/docs make html ``` To access the documentation, simply go to `meshroom/docs/build/html` and open `index.html` in a browser. Meshroom-2025.1.0/docs/logo/000077500000000000000000000000001505103770500154255ustar00rootroot00000000000000Meshroom-2025.1.0/docs/logo/banner-meshroom.png000066400000000000000000000066241505103770500212370ustar00rootroot00000000000000PNG  IHDRzgctEXtSoftwareAdobe ImageReadyqe<PLTEq=@ z `՟0PpُnIUX.a29;%)/"6<҂JtJzfh\ IDATx݉qT nfwW6i7ie%laZyxǿA/R=Lʼn"[~>3O'1pJX"tL $pFբG|,57ѣ8Z#*jD+{xoж'p\B^0]19pJ0my^d}ާn=bT8R-e&yą kDa,=e8N(y|?7!p ,hwz_/ywY¿ ѻɂkh{U.o?ΡZw\R,go:Mzl9{a6 G*ėys8Bd'߮E_mU\vZzs^z=`'-ޭx#SՌ:'ԁBzfDffC$߯eۑ,zZXv}8fʼnx>0>\2{HZ{.X۵w ݰ#7rz+ۍ  aR!V:<Cxq={` q[KXx:MTW7^v*gIڲWBkħ/ Qî6֦r q-zLdܲ<UE=c,R)W7;RDE;w+hf4 >]E8 t!Y߭wߠڿE~iLv L=*'&2+CaiհALt"rY6ƃHI OyI*r:)k%1R(?' 犞ʤRxћ}2LTgx_R$mQg^MJMR z8W۽6795aIF>*l^6ŘH=|9*bBFWeۣ']* Oo,pgSISE+q̷~5zүd{{eRgT}!שTѓPKh5zzF`K'i_뚚+h$ùez=z 'l^e&W;M*Q=,zzIWV* z8[FzjE{ѫێ{1E/uF™h 8ɃKg˼%zm=sE-X)W+9 7ȓfb5En^] T:Y=-•K7u!ze?[IGpIn[ѳ F/TT$z8_,I`K2$^<,rl\qGF%- vK.{.*{uKN LeU]t(/zaHqDd!z8g"Vt >%tk[O^=6zW_8I1zm=;+E/h5zD={ ^*X쌞rvv z+sz3IDwP"zۣWHF⣗[Eۣ7l=-t#,^Y6^IB@& ް~+o/nP׍"%Th;nLyd{כboL@xR]Z1-[6 8wuii$zxѫ" wX&zld:g'[MBa{J&ٕ"O&ol,bNo~!}rٴ ðр_K[Tח8/^1biϐ1/8VhAPtBޣ,2fV5 IY$ͻQhrmϞ^|[J}&-ABv^P6c8|\˯{qomW.i.zAg |B^3(KyCS_U46AQ" \[{V[h͕yIߠSvR]6< e gU{WjLnx6z (M069&62IML2L5ڂ[/.3Zu4MH{۔U]sV^^br14unb"9QTePR-d4Q[J{lba㰋^xRe{j{u>ôM=s2!hϭ Lj8 }=%kSڴY0DNQ{ 9"z2pJh1zRA>뎡1SUޮٖ~Q4i;z%g0{h)3ٟdg"z8U+h1zA,]Ke<=S̓&5.In`8A,ED^o6zFV=32 dƦX^f}R)+蕱r=}#zn\/뢗OI[U[=[u=hNw$>zYuX42t'Wѳe땙DhO/$zI2JَӔ t^j4~v"o"i'VY$͓e^+qiOJk媫]G˺++UYn".}ޗ(le}}C_$]/e*,y"v}6ۯ֜nR=^.Wgi^.=v]0m/u[Yu.F W\`wwr+aIENDB`Meshroom-2025.1.0/docs/logo/contributing.png000066400000000000000000033514561505103770500206630ustar00rootroot00000000000000PNG  IHDR vՏ pHYs.#.#x?vtEXtSoftwareCelsys Studio Tool| IDATxٳ}ϙ 3{c!@$SEmdy8NT%MRR*AnrT*^$r)[lGe,ɱ%YH-D"} ̙0k.~9Xf0=gӧ9օ mK &la+A Fla+A Fla+A Fla+A Fla+A Fla+A Fla+A Fla+A Fla+A Fla+A Fla+A Fla+A Fla+A Fla+A Fla+A Fla+A Fla+A Fla+A Fla+A Fla+A Fla+A Fla+A Fla+A Fla+A F\w:TW[MX;?չ Ջՙ.,߽.% [a;oģFzh%>:xΟ׈Z?WpV]_NU'TO=7mg?c pli -Fzi|1]vxzG8dU`u=b_;tnZ)ٵZsк_ΟlL|seE7 [W5yeZM\iMui[m_Huw>Z]ǻ][m:ǧDl#p}zsUp\a;ИzS#RZVzWzKǪת _dFtwX.:O pLW)WojLbm_۶8\e5uw|uޞiLvvHk^NZJY=:>>VcEYFNM=u[onjߴ;?mg]_v\SՓE;XV`O&n Kvql:OsՓ#W[&xiViao物7"E#Z̟?*C6se>,Pcus\|Pv^x=~]{8]x.cO;U\..N \}C)VV5ֻwGRīp3~/UkZ.%%l`#mtC#<Y,S)76&ΑF`1O\]?pu.51T^|O9xO_4B'[ǧs:ᰮVoe@utF:cn5~&kO~+ꏪ/,=o`pUltc;͍`6HuWΓU'b$سu>=*v=`ist#z=>]Du| uu[ug#`}k#bw|~#<`7i?W~'-;a+WNQݘl#}|w\tRnR>؈ZcӾO o7lT}DmKJ kӑV<.z{#SXi뇵'OZg9x=טz <Ƥ福7>٘t墳 /_s:xэu/{zݮܘ\lDM痭ۦ#mw:GB ( _L/=i;j>\tpnnLezhVo7L gOU_.z!l6wFmU痋mﴯE??in__1ά}og>V0sڟvم.6Fo k_?~>]_lL]~k#I~gp_ -c;Bc|\#r>SE/X^.[1]wמ;UИ`o~=·?8|Is9vo:;Ӻ8lU9ko^6t w_{pw{tênL1onOVϼjF`c"]<5%%ˍ/ \˄xs>$͍8uLzs`u10]xTRzu//aȴ.e/n_ra֮ϭ.}B{}!ϴZ_\e=x8X /%~ף9F'׶)aw\?}6m۫6&[3ߘK;=~TGտY.`/Vc8aKokޱp.><).mS^wGM'acO7>:}r1moY?Ǭ >?iLo- 2a+\w=[9}~*^ӟU*ԤS^oĮƤ9r}zj:!xonLfF@Ӿ?SE_4\kpmtUzg9^Z6^1yVX XM^ड़)gVS^mDۍFXUǗ[N٧z{ihu\i/Nr_mLoW.=ciV[ ӢkLl٘z:GxVWū\svfTjt:Oz}z|ΉN7y2{NMbVj㝜>S_/Z lhhD4&ޘtouGuKc|zc#^=4m3}´kLx*z}'>ޘzz>ڈcO.߿zw;To}V goHrw_].zɄltc#^Z VV<}py.XZpUz:^_h'FT#z}>`N[Nz_ɬL]}_,}ڲ2w:TlLbZNވVM/SX4^6}B#z=j Fz>*p}W`Q=Th9ƑĬ\czW߭~墧, F N/R5Q׈Yon.;*`5:yFz1dLlDT;Չs T>Иzomi_ \NMX~/Y6N7ƋwV4^'|} XydSɭO7g]S}sx N~z_c:CGb8`=O'L`S[سw\]vo#`*`=0m8[N#x}nLw}r:H#|}zv| ooD?Tz`zpUy]hLVoV| K&l`OH#P_1VXoiP}c]< .TLb#v=јlc>ֈ^>~ve9][mszszڇTחزp5 [&mtg oe6iD$}\.4&]wHc}}zfe=H#dMhz~\OGR}Z.zp5[x;UlLa1uYֈXPc L\zzlLv=6=mOT6rIK{Á?8=q9blQr72}sֻ/J1-uјz1U \mLv}mӈ\NV}qߧM6goUMՃku_l7]oklty2F0rыVkcuSpM#kDo>:2.x&kLoG$luh5>T=XS֘4Od_|{z|p6ȗ4E; _=0>?S=ՈO6םs~;:6p_#h:67M;lsէ_r, k{ӓnLc}b|(c[ Y9t=ӈGoTNS=\tڲ]rPGwNszӴOz[Wɫs,9o8\}`J7i \#'SOV] ;nrFh|Ք\%6ߛU҈[`Y\NoRz{cB=J77^>)J-O7&o~1k_gDmVQu=x}z~?oĭۭ}ꑦEmw1um{6oo#Xj E,\.V]C^x@^7yӍIߩ6'N}ϣu=^DGxz^oZ^TN IDAT#t}n_=>ݧ:ݟxN7M[[yGcz7Ù ʯU[.]K%lL1ɬhLV-SY6Ņ!_hs͵+竧^*H|56B՛75ecyT^iԋ}FX*p|#R:?݆59lkv>Ҙp]iLꗗ%qtw7&+z{{ab/Fly󍩛ۍ q;k=ט9W5Uz@. 7PoFk]O7vazpd ojBV.d_WdJ mtSc.[u~Ak4~1mW/,=}/Q=X=Yh5u=b] MavW֮ ^i__V\IKk!l#C~z11Fd0&c-뇗?ޘ4ׯW_\=\tWnnLc{h5i1u}_'/VE$ZVkN76y2[Mḟz`;8&>\L#x}l\u~C}CiǦ}R>mJ#nSK!lm]W\4bBujLsvݘz1iF:GGDw15Vrї- =wV?P1U ]5bmہL.gUo[^ a+X#`Pꭍ鬷5bC<gOU\墧- ߏ`ltzWwWTwU77bV wzW\tڲrb{16wVTǪÍC|X?ryK\EtT?PHpuuGucuڲR\Vߪ~EjIx)Vp#:2m7LۡFuq}6]>7mgtb´N->S}z#l}1qת_r[.E \q;oZ7W7Mۢ:*l=?m'm:1m.pW`Q۪7WM2K/WwK݄e7[Mۭ-X[oʄmUܴgvWqGV?ZtV?'VG- 넭eӱiҘ:Om֣)G|S [iUN3tT=\[xjDnZ%C/oW\tʲ0NViوnojbm4yZ3uڶǖwkH#dtMtVGe{/sKL *;X[3m˵m[hnmt'ZEc\{r'~FhLgݲJ]gTZ?$xwZ6&[V[j^ZlkZ[ߙGGsLJ>TzK#?\B𒞯>UJ7$[Ӿi{Ӵ4=[H[E)p]>>ߘc{mc>?riKp}c [m[nޖU:߬Q}c9p]<>.Uݍ7U-pߪ߰$7a+];jF7n}Sa׫U_ž}|'LTGV^3WVE_$/a+PNo[n+=ηZ6+EۖcP㍰H eS};?\.zڒ\pmӶ "h_2m_\k-O6&gzL:p%\>^rѯY듰S;T}V=[Z-kVaֶ/.܈[:ۙƴ/W_\۾\偍|LטQVU7U/T}%[:m;׶me\kQki36qOVj7փ Zjy/,[:1Mi}i\QZ?_i, \Ã~zOuO#h=sתUs賖!l=n{h=ջQ{t#hU].SKo/U?2Z4V`s>UY.ڱ$a+a;[ꃍ U7XMQWpCO4U:6ՅT].7 l=j{wTꇪ:*j3QKq`# 7Vl3ת_oYO {N7WYSA>Q*lt/[l~1==p9QQU\tΒmV#wZM%\5E>mY5?nM~z_u 5|S[ȒmVmP#hVTչ&hZS/4 ZO6U/^bhhI.a+\wzÍXkѹVQ맪?nĭ'- |5iLh{SoW-%lkNLFչ})j, \gꮄ\Bcj%؛p՟~1͍ ֽ勭?pe /Wn[.>Q_{6N'>XZ:{Wi~׈oUܗ]뾒ϽϿ\m+?}n3d?kz%WٺlC[zVg^7&oVR/E_${6N7T1ǫ;i_>[>G>CT?]uײ_s%/Ϻoց#;|-qցg?tb \AZ_?y2[/ܫ~Y#]z2e#\˳u 7j]}_ϽuEn׺^zknuٺqײ/[縌?^#_o3߷W?& +[=6qoe{̿/_3_eKWkku>u~Wb^neͮ p >ғwk~܇ N h{l4#@qL/o#؍_Jƴg|z#T޸' eokϷr[ϸU[_u[~]ok~S\}zh ߈䭭p /\8{칝S/s_|/S]|퍣=?+}V;ݘxSՏU4VNo7~?Fm0!Ms~k\['?sn +D WNGUI _jDs{}kՇ!6\s9+[ +pe[*/U~#n:7sU7oEڔo#TkL*֏}[1+C WN~խAKF' G>Z FߵbWlLhG#yyVq#WG?UC#k`3[ 4Mig?8t+tǗG><\A o|ՍʫxF;}:Z%l VxlpV?]:hex҈[?ZG>k/Bu:m mmmKͻrCআ+pskC-eoAa+Ӂ/6-õww}הOͲ$[qccSl0 %HD`_B~Sq6&ؖeKI{wٽӕ·;;ygLLǨ[ K5듘8Ut78$Ls,Ӟ#߭}7=.8MPxkp\3q1jMϘ\4f5fn6Ksl f甾jLir0?4mt= """"UPVɑʐ.^ ,b@%- ? a?hIbkDDD~gF3;$  <L`Gz^G J 1纨AI2 m a ^<`&K?ǀ1)c+ީ`t8Iʰx-A@`gd` z2cS`? #='**""""""""""ӎ ll@ !| ˀU@-sFU2d=S9 7}b""""""""""2#)*"""2}(*""2AR7zFGl/4U3WUDDdn4} #kc߇8#aձ""""""2l>l K+Ky@H=#SP+A񆍛"""y8xxm`XiI8u],"ՐyE"/>,ϚcY:^DDDDDD8Gl< TsO33r < [mS1S[EDDf'qBH\u꫶e7BժV*)KmXVb8twu}b(Icck׬ֆI1`+?rwk""""CV#`.VqP1#zA醍6_b%|0- 0޺XDDD&FP$yyma&eaYV04ߝ\ߪ}R%NS*(Kc1">uΣKhȄgDDDD&"""G *\`!V4b=={'{l}Rph6ec1,;iEDD&tYCP@ղ,5q¡0m2rw P(,p(L,4'Zh<|@&Ӈa47/kPP,I<]w˝w 'W ?EUDDDDDDXUViCVqHe8xpf/p79 7}"[1:y  jvHRqd՛NMS,,P(D$&Ű,k>Wh}qhP(חƲmWy]]|mWg>1"6""""Ӈ"""c` ,ޑiֻ­o\֚yءV):)zF6⫈8tttfq=mSSSCmm-XtJD5MsXhexTsmwp}ȣy.|> khcȸ(*"""2}(*""2T0&2l`1U4`]YuMNl9[=L1׎[1RװBD- عX,J<&Db>[5R`X,Nl*z|N<|jȘ)*"""2}(*""r I bPk+R {wOL&":ra/ [ŋ??9jhtU:|Kl۶M$Ƽws/_7) }w^6m|[EDDD[EDDFʰ z pXAw[wOL6l?rT[Ks܈1C"yX &gח!Phjl<&2`%l"knym~44~k?> """"Ӈ"""p2v"` Pc d`\CV\}bav4A$ފaڪ"""cP(ٺm\h4BC}= . 7 }1 *8?1G?pJVCVARlLr@=l'ANd= 7}l$BC>\LS.;aVò[ mQ1Hӛq]ZZXh1[1Uܑ<{<ô&[>5~HVlJ j`WJ3Ztǯ4Js*\i%LPVL`d x5fB %Al}lg0`k"ez}r1S%~OlB:BzUk[O@ss-u1]&q jY֨<˲F}<·> nv,^?\u5@DDDDDDlZ\cTڔ[b*-_i9 LLV@ xp0r )2l&1?VlظsVn=\`XV+SUDDd ^xawsebR֮Yc\rP$41[}Ƕ#Zg^kyɧXrz794PDDDDDDd[e*JKTZ͠'VC6Rj`kgh5d+-Si}@ZW.l|fX R9p-zl6`wuruN ^… Ų80Ţ>V=O|ǟxK.hjlԀ!lCIe @ꁺAmpn\u<#!b[!:VZO2AQ#ADD""2FO@j=r@2=Nlo"'<`kM+`D{wrmwxW|i|7r'Qj]]iЈ @*ChFPk%:btS`h  jݕ֕LHɦ`3+zFf][onO&蚨 oظ#.B IDATߡ"""}?m/P,hnndu,_.oy8RS?&~]‘0O[GDDDDDD):72@3Vpk=ëT\ßAmp2;+@G2$""MVt\`9"YJ غy&`ȱ>ws;v" p^3M$rرZ>s_6jַラ˗}NXFIDDDDDD[T0oPZ[9s^Mf}wOǣO?؎8zەu:FDDDDdlE¼Xjq ؇[H&('^*bo֪,ʿ{-QW` l=5 XehuNpM>"""bǎl~v hB֬^M<>3>OwoW ߻il\q+_7jɌ;p7ފ ԯ9矣"""""ct`kjP|})IeKr`A5 4NZ{-O$""`΃p. w'Ad?l<{e]G]]݌ J%^~ٶm;wcõv[/;ONڎ_H9e啯ǎO͡hOqSh!/9g i^:& .mc Dc FB6{2W-9 Tl|}ڞdz~Rꁥv< к SӞàj [wW[2AIDdnSUDDfmx)mF"!'ޒLpNlMQ &+*""2F;wbݔJe8?s֣=[xo9n2tx??oxrT Y_ɳ_2%wlyN`ޙ{0,EQflr6iY`رƆqO+0m C+"""2l { d& %h , zXAPf>AUW\ 6U8ltP[\El}I`VWe ؃*""2VDNeі]|[EDD&D6q\/^D]+<|o\F}~7^׳-O7e B9bt}3_p+81C![A?%zg9jH5{/R%Xi9}h|0cRݴӋ[(rM 3+;XИfSI9V4iiۄꏨ򫈈[Mu[aBAm'A\ UYkb 45>/vT Up;lp xpp[*>w4SUDDd⸮ˎ;ꦦ&ҥKfdW q]lFr_|+~… 4=Ս'Z>?'cwb'4?HC=OPf{#Þ[-aŢ4T}nW.ުN6G9<̐Mò׆_v_ ӶGN 'Khk >.|+%lŊFcLw1[.?=Y63nIޫsSbXW'[W0PF%+J3\`ݵUk n;Z`̈́6lI`눩[EhmF[~Vς|uZ{rҥK2#ף7敗\{WȻy}ZvVR|ӟ=_}IA㺵BW&˖<ȁԓiY3w]UZ[ ) K.uq1abZ0kk|ݍ8,}C/Sܾ0D 5gX"w E@pc W}w=r` g:TcCXhvco<ן3&&ZUf-ow*,eՕ' !9{~}""PUDDfzjWp֢PX=Ejk2]G3![Edzgn=e_Sdv~M$u eL2:c77ğcDQ~??u'Ne_SO=o%a,L'N6GhX{<^ÏbX&O&t{p\p'K2@h*nW*`^ݴE+%؈{)ǶӶ9W {m)wij t=swiSn2{kA|~3{|qe| 1m{H0ZDDD[[kMb8 n[#C=2h]s~2}c[epE""""2x- Wll%tB da/ڹhWxjSd ۷BHC}=/7|N[oCO~_ .}50eFpr9zMpr9{0LVLo;%`>.;6MW==e0 XtXR\ ل&o<%R_k Xz%êqi:xr&K֗y`W*D/Wϼ6ƵznN9 bQWM+pKe D"af9vl}yp哹8^ܫ MeX,Exu2+E5ܺK#"2{(*""37 xp~`W)9k'Ll> mظSߠ`LGs9{YK6# x"^׽*y{?groK_50|G'۶KRh?B{pOXM9%cV4BӉkG |}'3Nu]'0 X )gaYfh]H+=s&B/Cm?nHbb" ÞFS ְs۵;g饗J|s?1q>9=7_ щmj ل55w]ʙ,V4k֌\9dz[zn `Oe[Jh]`BEe,C'"vIJ%{ǽjYWRraSN_9zӔ28j#P "2~W<ӾdM+o: Zu|g}yK,_ayom=0 c9x׿ͼ>OTJ_Cf>׮3oŴlJ a[D'ywD<(g3$x!.v&HӺF|]ҷs7d봹ͽ[,Qd;=PM vê.BPp}ݤ,-̢^>O>M>AY~_|{+W:}w;%l9u|\ƊE &*P(.m󘶍  z_v`a`ϙ&AOum :t?le 0 q.gx2`E2+""2'zٹO"z-ڳӥzk*CAu9C++E#M&6U4f~ṳ`L{ UE9@+`gD=T­<҉/:ˎEdTz/a/猅SdVJM8HdߐC8?ϸW??<\.O8"d aB"V42dRd1m{ d xGӛkfګR:[(bE"ر(m_>^{z1Lp}mj[[͕?LX-P%к Zm*mP&S `k<Yli-a2`=zFdB<@G:[EdMLI~e|'/z.pxZ:'k_w<g?;~<4yV[o~/q\M.5sHOٽ;~q.[294`-0^*N"{a.Bؼ֬:lRo+i\ؼc_8(vU8+: εMɩ~bG+|=-2 ; ղzx̳;q%_|*n/)tvQrK^s3[{=C?+]m 5"""G|[j%><=_Oe'dhue1%^]X[EDf[EDdJeX \Aj=htO58p ps2G: 7}kl Pr韱7֚yyݕE12+ec&#ZH]A{G'߹\L+亍_`# ]_IhsіC>/j 3ds9h$x^>i >[GCvo~vMK[|u>(tvѸxjW,ynHv_F%` &<@XPMl=PbW3PMil dalU+o)on\Xr!>NMi':bO/mwO/;㏛ݷr_3fPjR dev,6y A^ [(b!cK7Ml~+qrE|'P?0CQipQl1 ZJ&̙2āնhD1Vb T7ޜL{DD?[EDdZJeXx %^dbm&zs2G:[Ed"ݾN5^ֶQȬCOwD ͛tϽq?H8M7r_W+WpNk< 9w OhK2/J% ƴ,BH}]PIr &M¬ ck7LcZPىx!5I߮=d#XOs/g8|^0T;O+&B;QCfn^J)wmQp]O?Qh!5LIoA9%\_GS8v,J'vٶ3YLӢn};vo\yڤVeR=BpC=-Vqslq0 fXX- [׿E)WAǾN%\V'Qd0, ;1)~ Llp> k4hg>NOu`ǢD#- eaXaC XJ`ny{]Ġ[N9m,YDl^ 8m45иv N.Gf>Rrwdb"" n-ȧ{Z unHI|т/'PBGV4lٲ]u+X-6vudasr.z"M:7?Gm?V4B5D[FLq4 1Ar6K(QC&qcw={ $.C .9eMxJx`xlĪժV^ Lfpj'P+Gp扚x*2v'K$*[ *'lW׈L_ ȴp1p)p15IJ D>PvOz?[Ed4݅nx2)V4uWBHsR寲[NX@ IDAT֛~5?x3o2~Ӡ]ݔzӘ0Ɂ^%Z z>V$ ˕`E"Ax2i`f84z0mۑWy/a yg'׶Pm-g@t>4d+'&O#Wu%]ݔ3YB5ÆvK>\467Wҝ zIOX}.ppm-VlpŠmcEc;d<.n}"MzgL\ TxxrPִUg=0U"""e[: B$BPb2jePdFDdQUDdHeHDcBff.P"- ^'K~*k+Ȥ`kۥ?:&FL)*"_|Vj ^25,UȬV,[9 ~G? \r?uO~'>״4ǯ|r6yX@0q%|͹8`0W.{>ir[*Q}P4APtToZ} rPn̫ٵÏbZ_u!{nò]R=5ϑd; Ǵ(tuDJ-M XU$G '{z)q2Y׭=)qr9BHSa!o?lFwƩ5ӷcN@ցeb¡V@i\ m{%e\"ر+NPq jCDZ'5+=du,cs]1'"""26$ yPk=LDR"K*"#8(2Z֧­EVY&!NpˏV hcm1Jf ճ0>Aʕ#SUDFҞmͿ3ږ5\yӤD-Ws}_Q8bY48^on.z?;K9}=SOOaE$-!4"2dv_N;#tnv~\u?QCLBG'іfpn{?^n@?|2juc1̐=dN $TS3!]q8pz$.mnq\ k~aZ:=vLC}ʫi_|R_3d[{z1C6Ẻux$s+z3H3L*оbG]RqW|כ}V [# O (B кh͈ d-""Ӄ""3H*Cm౑ ̺XDP:k5g Z:e+|^A A׃y`ApЖLPz$7d!AYޜLP3Z/!x7?mF:[Ed/?yꧼнdM+Wh.>ݼWjȔq3Ӟ~ǞSK>yvjt)hnnⷛn`EPbg7v,]SC&}Pw\Ph5V+a ˔s `E#3h^nXgqs ,^@f%d1˖ }RF?8u]RoA84q9ʙ,-'b}#w iٸBPu0UPl'_46JL~(u)vx2nLb"{Ůnhp\dX&AװTTkͷwpG0C6+۟"\WK}ʙ,f(M:֭Ůn[(EP硪 i ĊE1 RQy?euٴq,@ʼұ\}pz9%\3u)bGXyGh]r6aS2EDDYl 8`+h2A[ MNi!2uS jO&5""ǖ""\%DZi \AYk(A5T9>AеHr!P9xdTWR V}WkP ?Ep]i{.V$21}GٳRO/ O"wN6G'~}|bo+wAix<ò1,3v x=\m(SV |ʙ f8_Es߀ *|=ܼ9Jx0=r_0o+X-`kmBo""";{ VZZLs %eZ-[]#"r(*"2 U*.%U+d Zj!A&8U!`M־ü/ 8PUDmܼVNu'՗N2|WM-[䇬X\F(]pѫym?{{f:]wp+.{_<˸tpk KyD7W,QˀmF9 =?Xy4nABG'viQ8׮Vi4}lӲilry`Z!+]zrL.I Bkð,rHS#v4J9 *CX(v<6e]P 3"܈W , +;D[ۏ cÄjG^n-q5PjAմƐ ưKX #e9 D^^=TUjuW F IWJA(`]/x_q=hdRƤˁiEDDd>cgwsK '8sv2W=ˠ`+D2~uȱ`4`\El]\i-(AEVc WC09V0bkfWZ$QUDƫ37g֓Bl{zxo?>{y7ڗadҽlW\;<׼Og~o*LtN.i '甼tpSp]۶S)gsXijvZN_On\eqV,J3[۽B{%T I(Q3,[cT+wBW7V$ Rdo+''{/t&XЧQIرQB5Qèpziʡ1  J纇}FZ,zs/ z2Nb֘͐=l|~L;L7?wpu d˙,L+"Ԩ7s~4qq9Hpɠ`+x2NuSUDJe\ кd3f |<W| "LCCO ZI!?n)*"u۶ylgﮣ88W%$$%kq[KRo)uJU(R(w(P]HH qBsJ3}ff;[ӫFjT *1sf6|;>s++5D1 ( Td2ѾS7_c¸Zl6T*KmuL|iYzujגKKǤӡP*TغMJ!#ꪥ~֛֩v(:5p 'f>rSvr)AUk'G*\50ظsܤw޴r`TGNB" JNձqucy:RR1Ll-d:.-*[jj[߻RV6 Je dT) S߻ğBwnV˲ pd?= 뿭B~MJ!7%;JlB! Q 压XCⱄZC3X:KYxIU!J╰o,he3l_yV́?]y !'" ۮF>~H֭p&MOx٩dЩS{^yi*dBQ r6tܝo?SpťTWzF={ƍ[<>i.#]z&*kkKJm%7)CȌIjerp:;wL:=ff3j{T(ժ;곲NI\0q g.&L-lrSRQ(y{ɜ$$RFmoj{Bf,DN| ظ` Z/.FJ++KVN\V1_-NKwTk' mrr0PXtɿw7lϘBө5Xi4 9[-е+yz_U.@B!Da-@oۆ4/EJ`,[/HYHU!I[,X+czXow-?$*(.kxze :X:H# !+Gò+Jї G`T8L}U%?Pߝ5HHHFP cFũɤBu3JHN݉hSR۫ۈٵk/C<メedZVUtl%d^-<=ZyyhoBJ=jlUJXk7y:t&Ʉ#*~y)hoŒ *~yz<QXζB#RBRaFf/W*տ6 u՝ JE;!͘ F%Z:? ŽmANF6oB!D$V!d`+pKCE![kqUZ@3J*%(j5x4wJ ( !h[vEcw3S^"=-g[o-ar% +kk4g{.2yP FQN+}ƍeΞ;OLL,իSvRoϘҨQ0۷nKKǠͲ6`]9/thoK0դף$%lQa`7W :L-F_o=Lj6IH"V,6.5{{]IHD{y)izT)kg17]F&F4` rrHL g?R6tMfKTD>Skg{·L{C_^I+yU(% f ^YTP%P)qS\CB~_+V!Ľ pJ"EOBQDZc 0ҝZ$(a#غ'^Km?uK'`"?.&^b{tF=M}%sc舱޳ƍٰv%}t f=;;gthV&R<4ɄnǶr`0оSwnܸdz>`\3\ zuZjQjm媵4*}F<.'cgec1塩ZY:G ta?R̊>+ g5 22H|ހS%ZCv6 Ny[Jvn˽70䥦K7`6k0P՘&rQ9i5su+VųFAU¤axnu60U$/% Cv6j{B!Dѓ`^`+p 8$B#V!(dZ@S,:X*(=Na @oPu}g9t.`[>akMJ5\oVJu㧟gbmmŇèknয়zLTLm0~,Z6I^sUӮc7bbb{\AlѬ Evv6Χ}6r`WB@iesPу(5h(y71X9j8`qrȼq >^8VqGD{`l9M&rSKI%'! }F&Jk? lQblFR fpZeE?l6yl3cnz7͛׋tl,;ĐAB!D)b4K#گm0MkW Qr'z礄[HU! Q@s>` :9 ,:oO [9b aa[;зfoSR>rG`Ƞ,\0˘fko","9ЮMk} 6{@ʦS܎!>pWuбCR=ҥp /<DʅK$$aq*{| ,zyiظb⌵SMAN\OZ6ڑuk䥥y-w74UT4&fw)nwvN[B! lmLZlnl=!%B'V!xHZTX:vXn߭AB͈):,A|_{Os[1rTq˜Q%2s/0~ܼyɏOdj=ii!6n&*z/oO:uhϰоLWckt VO?Φ#̊kqtԱT`h֬)~]'u9L F}q*E)kфh /5J{nn$?O6 e@غbƚ7PڠR;O\jPٷ=A>][BQQ$ڿ]0M$*DEv8%zK))B. !C4ҥ%*ZeENîHB=r'cOd̀\D1ndmAPP kW-?Ob[˗#ϗ-[0j0u}D&_"Z ={c4Yd!͛5y2}y::iƥz~Yio';oUr 7)70桩ZMRqd4T h$ Ŷm[rQ׸Wr):*k}q]u5pO %BglBP(p ,P)B !Dk%K&ZUR!!Dk-1/V!?H+ϡet^2WZohdk/S mݹy̛pR8xzzЬic&MGn]@~RQv'W/9ST*Ç ~zN>èc5m,y9Bҩmq KR8FM&uaf3zm9 hU)P8V%79N_|beބB!ʇ[7IMq,^.HIpHU!!^k #P@l2kpHU':K5 ?+U#''ACGrq:uˊl;,Yʆvl\\]hؠ>cGс䠨OF#J[C7& -֡8񱱷oqh7f$K|vғ˗#xi*~R>t( K ?[&3 Tu`B!*k|[@? !p?^¥$BIU!#^jm TTH! lsE QmAhYlԶѓJd}_| nK:w*ڮyyy,[peZ n؀1jPXt(/fϥ}6,>p> \\]xpw/8z$6aC3owr<"/''! qWGRP4-][J YB!Dv)))Tzu Vi,V!ĝpqkR!o$*"^?MF@ P !̑QlBp%9-Wg%;AJdQ3+L8/?U_f=CqyRRRqvvNݓ (Ka61(k+O-ؿ/fǟ>ϗ^Ʀ՚1;7d_/%2DHUCU/~*עa6@y$*B;y,psua<:?}{,oUTЯ[Ꮐ1/ R!xxlBbtZ Z7"B!DB&.jU8WaDؔ9?vl۶@,Za_Yj 'N&66гG7&C*OMrx8<cTV)=]&qM<+h4nZr=9:Jkw*TaX`+~f3fJB!=܎GՒ/ztg/S[~*mJUwZ0pK)B< !Z`.5PIIUq׾9v86*zIJ5Jda0>5zⱒVǚoǡP(\ُSU@ҽbbt ?pcOG}O'_0dr;ѱ\@n(c9whޠ*5HO!Bܼy Bٰq3gϡiؠ>-[4+coURҷm0jT B] p݀Q/ 9R!(8 !:mF@HJ!` V!*۬T6gPGLL,G#< :u`ťN.%8p7oa2e=N;${zB`_ӪÅ;wԩ]G+3w?'ŧ9MHuUжi^vS?@tl*6c`$eG9IB!(zO?k֑DA4:ul_*+V!D![JI$*⵸cOmňB[ϯZu<`֚ԗ^c/K `97lP*˼c.]FVɍ͛ҧwOF*(S<̄Ǟӓ_~zu.~&?I 6kbi߮ [6-sڭ'INNrTꉽVj<+=&k1)<1zyEn&S7ЋnmjI*B!D ڰq3_~_nڼ3 ztZƙ`JE %*>,#^KI`$*(:@0 Kʀ# !D>u#KU >J⑀N4.q,[$';>˫/Pkɒ%Xa.GBJnԭS0v(49D8d|u~r̢!=OTu4<<پu#^rNFk&'KQ3Y:J%F 7';m˹D:U\N!-ӿ /~1) xm.'B!%LY^~M"DR#(o떮A Z- !+n*%B`‰ *B V!*TV!%'j0%2k׮3v\H'jueȲ߰3gILL֎tօ're?9D_𿯾el\2_|?{.7oжM+]fʕ( NFz)pzIހNo$C`h2agk5yP{s^aDF<;-:'YŭtՖ]I*B!D)g~>Qލ ZӦ[ba/ R! !*x--@s,Z}@!B#V!*[}{w[c¤'ٺm;>>0Z,u8t( ( |i׶5O?5:kɁ'J/e+ի;LVTD'Dz޶&>N2C<2$.)g>XKҦQ59IB!(ף9q4h߮ z._ɬO 33F;K>7jcwUE 9Y`έ4IY$*݀V@C:B:yaW%*Dt)2EnGgѮj[Tm]"~\f}%*Naϔ^t q!n݊d2N-6tݻuP#L`=??eBxxM4fej~v*/w^ѳDǦQ'Г5}h"&>1)paC7PŁZ=,vMcV8C6fުcTď a|<7N|=mr !BOlc;wĤ$zS<\hx|iӺew !Hp 8ᤔD!LBr-^50k')P KBB V!*&QOȹefψQ* ~KL$QWҷO|w,KnߎcO پc'QQݝMѿ_F&(q=<ʙ3ʋZfM\aݳL;T]۰+z$4k 4oPzA}No$ZGB9v78YJUڦ& }1&^מcn@8-V *B!D>>rs~3`AA3n])meee1xh.]]V,YT*j`Z7` czࠗH)Bܟ[Vj@G-KJ#'V?}$*Dy9T)lԶً bhdݷ Xp>UV)5%KYn#/]"!!խA;z$vvrp0ٌlFTV}ttڋo0w4al[j-'Oe 4LLY dsԱC'MMz{ m.Ep8:q܌K֊>c@Z4(˟lT-5d3~`3o*&!B!v\<_| %1){;ׯG>ٳ^E5k7ֻ`41lHע ޭPB b &IIIUQkqj` <;B> QLņg>kLoEKb̨fXMr%((^= xzzȁZB~΢(%%..oK4m҈qcF{{X`kkSbHO"#x{s-sÊ#нmMo_&fxGڭpD5<k}+ -5B!\ ={pt(qqb2*@SիXr 7la0Ylml5w/J^n3gaK Xѫ[%lxi8/%B&V!DhCkg,[=B'/qLBTqguutD>۷;qNJlm ~~tԁCӲE39xEٸW2ؾu| vڍSx:c'|74mҘm.sC$$kա6 '(79p{GNV;k|<"PB!Bqx6oG>z Trsoo/<=df+yh4V-+Q8j4X$*(&fpXlҐ'eB`L 4HV!(VlۡةW/..O/=K/Lqq,YƯ[IFf&^^4n#J7QL.?-XDmY2$=v}yqrt,SH}IIIOg2rr5:pu^7E7?go`8ġR*Rᬱ[to[SN2!BQ*|,_WbWK}@|BχѸQ0*/ |7Ck!?_H&ټaUhG]ēOL⽷Kzz:666Tήp"V!D"}R/ $BWlBIZ=ti.HV!(v;O\kl~ 7ˢO#u+1=vg{Xweb ++_y6.]DHu2QF J'c?od|͗^.%0J*1幧pT{9u4O=8~N״6MVٮȷyR Fr=&ɨJjWdp &'B!(gϝg8u zAA 6ɏM+J7˯Ņo)ڷ{2{gbemŏsMl޲ѻW:vhW$c};g6iU˰3䰰K܎?__W/qHUQ20`;K )BAB2%^=]f@o,Re%E Z+x:x0Huyyy8;v^:,Z#AA21YnW023vZۋ1cF,[~;w^믾nܸa4y6Emԗ Yn]br5ٲ^tlc]O_]a_KJж?>Nr !Bblsڵhҹ#^Ld9t(:'3DC8"=wakYÆ3dǎd1|,qcDFgZAB6b $Ba!V!DyEhtZHV!(q;N\[(şgGN:w_b~̜q;o2zph1N=5jҽ[ƎI*ȿD@Rr2_~1C5D%V!D 0!`_$Ba!V!DKg@W.tiBR!ց~i$*DY3XqaRQ۽6)1ݷ)S_!m&Mgϔ)`I =ƭ[PTkΌ7:kI>r1ƆUS^|/LH KjU_E߁Ct8[u}DƑGdtz#NTrg܌O'Cw?K *{wHh4U*ѵM lJ5ܩ[_Kh2`gWS^ND!BQTU IDATDG'f|;lL-FwOㅩF##FOXtlقMW8gP^6]`CUW`d.` R!`Rh ҭpF !DE]CoGRB%r1l6ٛ@b~^^c34jԐ+Cpqv)DNaŪ5ڵ[b0 Ҿ]~jr=G>cjd-B1-=u7ٽkj0x[o"""yyuY9:v ,2R=nϙK1&dV)pR#<=ǣذ k2~@ST}n4NFl*\ru**Q7vrB !BBq%o/K d2Ѯc7΄ʊ)wгx>; ԩ];г |K6=ؕ(j])Z->xyz$*(A@(A+%BTtlBZZN@,]Z^BQ8~cQ: Qޤ妳*O^>w-ՅOg͠>21Eh~^vsZ4FOwZlMefR$qgȊkѣ+!,(в)8oy95d &>6oW,^8Xt"'bogNLfhhlTX?{0lرu#E2μ< "2*ʦgp-ty(JVxy{^(c`[`R!DE'V!DECk;*B>l+.lqw/ڽ)/BjJ*F O?I) _۶u ^[`G٣OBp߻ N8'1sƻZ6%5?SN2YgÏ>zu~ۺGXŲ-gfE$sb ٌ݈;.v'{h7bs z&S$ZpՓlJޚZ=qv B!^ym:׮l6puuo0||-g~|yظ~>^E6'–̛󏏹Ovv6VV{JB\v4!*2 !Jx-@7,@A*#[(^cShY9;z==Mҩct+NZ- .f\NV'M4fؐA 4@tNVj+ll+\5-=rvxhԴ4>kF#'Vea/1h( ?vs,x-ԣ^7Y9:~;˱tndb߉8ilyq\{T*e͒lu ыJm FI)Y$gBa cRᄝB!ӪxoG0a._g߁Cԩ]Ku>rI?kW-zu"w_S#(`cc]`HBM2/ qR!DE%V!Dt1P '!(lYya5WR"seTX/ | (Ru7rB))Wa5"^ʣTN/](J/O |zF/ښn]:PLAѽW._`0WmGFsvT{/q.<o'ksUJ?;5o7;EХu ?٥LEfV` 8ilkB!^zu+WU,Yȱ'⫤k/1\lj7 Yb 5laSaccԮUXU`ki V!D3r`<)"`k F@5PHu`Ϲ ]:;XːcrI)%,]M[8y4888PN ĨðPj0c.[ϗ6ƴwZ {vnޮ[f m[Pfk1Xa;wd_Jt,ıpY9:l]Wn;GBӱϏmWlsGB!( :k3&&D7Ǭ߰s:Qի9|#O\ǩg;a2jU6S0)|L[)V!D) ;tm=-%BTDlBx-N@Nti!D!V!+Jg]+n/˖ǛŋS^]Rf-,ZгHOKގu0ƌFP!ꐗJBVWio1thߎk?T-۶)Y {o[7Z |Ǣں,:r bܽa-iF R@Rʅ[!B~+=PBwt=/=;zf_*V!D)s,ziJI[*^tzoO@ (e[(?,;Dye@~>e+hؠ>kW/LL{>,ȱܺ-ՃP_gNJBT 9@.=dט3Wb6iެ)5k=3gByb$>ON\46h ~cgmkОen>f N $*BQѝ =娔JƏMsLLL,9>K.j*lZ Bˉ싯mN*Wc{o3%V}SMk*4VZK^qηźlB2W`R!DE"V!D < ҥU!ʴߎqR>(UlS`u)>ʸIIN啗 SdRʘCrZOlm UVS<2}};J3noУ@rssWֳ~&t:=MTķ,jS_ziӊV9\Ie`T\f3,l6[BwBpB!,ק}' ޛڋoזd͛?vCmt:s8z8ǎJd djfjժW_|BK>;v)/Ėkpw/?c,]V, YX*V!D)V4DKI["^KhR!($*Dh2 gPboÜn؀ V"SF]t~r-||iۦ'iezF#& ހl⽵ٸW~+5ݕw- F6GE,Yʛݽ۷nӣdv͐ h,&C;iV3 1KU!90 8Y4=IO --!bGiҸfOsڷkM/ ˯<|}|Xjժxl{f`Də*U*H (?8DA95lXW7Ӥq#֯Y^%*(X:Ґ#%BTlBx-@wjBrBBFllY`86źBxD/N_I)nܸ?Į{h˓vmZѿ_Y&+)9ٌRy|l7kz=lьDFF萑3w7գNo%IJbH4W>5j:κ bct7 m`#" -]]#l>c_~";z9w\|vuFP`D7`VTJU!u~)В_PNr.|2s((*~Lo0b4R *k 56lvX[2WKq(Z-\-#N 2*!_$33.t8tBMt97lO?';;~}{s"׷ӧ|XvY>r Qhpuu!$M5kN̚=ӿ%z?^DD2j[ݷ+O̞3)Ӿ!4$[֕JUQF[/HIO !JLb>@G PyE!Dy V!L_l6]B.F> iVioÜ 8;;fՏTRYIIMeel۾["͕5٣+C=kRoAJA%ީPvàg1gGiPץsޜ8y/?3((Աb92siפ2AOPUZJ *\⏅$&)\fp'9ܢ lͱPcc 3#EZYyZR -B7`e&ρTuF-D9?p3gs]si0mt[~;ݻ0=08#_?+נ)**$(0/bA~K5~T'ˎ;ZyR ѫImǐ6Xjg!LAQ?Ȧɉ@7kLͨWd:&%'ӧ`cܱ=so=K~h42n[|0~_.oF\\iѼ~d]xWսO.pvvzjYSn֯YQ`KC6ܔ!3 !wi >TG!ʷG߱UoZK+kH΋!5_T2s*w6lli,q'O޽F#nnԯW^=ѹSohܨA,KXx18;;1zK<2,?! 񻥥qeJj,pi};^}Ɯ3ֵIGvn![_\a͊xd F+bgmZ3 +K3r>#0ѹ+^6.@z^zj]*S[v3o(j0!ʸ׮꘷HLLF ЯΗg͞w߯7MRdނEzƏ{ e9z1o%--J%++ ''G iݪsu}5v5MkSW0WHRj`iaF^A:΀*Z)AW!ɸɏ"IAGKZyУ/6jXۥX7GrfuqȀ Qmظ"mybEP`ee5Mn߉ {DY|5y::uj҈Ա=Nej̟3mZ XJe"Vo']ZKńK؋JcpT.EEE9|Q=4l.]BXX(;nW4-زuN޽ F*T^ 2-krO'}+pvv_^|erN~}%''sfҩc7IHH5L~<׮țoގVR98Hg[4LH`0RաQ0ר1( J9yU*5* *R 'dkY6NơhWǓ| /s!_O"& a=_MN۱p999L6^B 2}}p8wqws\N.⎫^{ IDAT4n(#~ˬ[KAATRݺЯo/Lr߶lδggF<]r5o3ww7 W̄D2ИQ/Jiiߩqq|D^,FO`dŶsdfйEUd"zb>?F;'2A+VGNym˵dAJf!~!`xynbҰyɀ Q]GTRrc/Ny 1oBcbUo:+35m̎2ss󈋏GRU.:74M1p@?0$aDMǚVp ΅χtzZ]q{3 8`V)Q((|IQ zlwp`t*4 q0Ot-6眤S=otZ_ Q"`DsǾ–ywqtp`ŏZ2׮MͰ׮YGi՚u|0a"ؾyvvv|=c3f&0 =RFFE3y|j2f+e$HUab[CQHUst/`#B[0-Ws;-PzWlǶ;ykx2Q#<"bHKKwwVL6ҩ^^2x!;vfO8w"IIIUjhִ1ݻuuez?r*+V&''5˜$sw՟} Ù1}򓙗 ]';;@L;g_Ⱦcmmez+YJxʤS Ck0R`4R)Q ]\OVAW^dj8RzfӑBBZ>oF-% 1)_sٽ+sflٺz쎷tՏc/.=uai䔔'Exy4Y@>ʨ1obY0;6i\nt=Lf&/_ى;2~;8:>?n`6DII[AE >hT*R!l´\Lވ}(J:wKrs?p(]gX| [}pnT]6t77WHYz-%::<<ܩY#{ҿ_2z> ɥyL/x˲ZDLL,S|ΰ!زoܼE|] 4K8|fLBLnN n:Ac`4b4~VTnBoħSŸ!82aP ZT̝_Dm>gny!|">/'O ӓ׮iqtpdҧѯoRٟ(DAA΢Y&t:̙dx^|ax˥V߽ {o !L1[6HLQnHUsp8NJ#`˜hV[OJ _1X?َ?K~ƚ~Iz<5--[w/'8wI`aa;CCܩmڴ^VOְ}\'++ K  4//7~]?ARѥsGcllLFc /P(ظn%aCزcbbIHLѡ\[wSsLs;DƥHL2~kU83 xd1Kz4})TMc# lU QBz=_xmwҬic~\v\NJJ ͛5}6l"+3^=5|~A/G335ߥU]cOZZ:"55EQl۱3gѥS֩]q̝wRf Ə{-V+s %*([!%BlB@B!(V+JV!3/'b t܉`$2hO/;9p׮V_oԩMmiۦ5*JVel޲.~~jق/ bER߮xN<Ɯ]:1P*&S?,fGR/-;%5| T3q>゚KƍزqI5b@e?]VF A JJI !Zvf\cWC]/$3ha6d(A⭱̤޴lьg"''_~JMx2_M+3dee1o".^_EjUO?G3ӏۧgK~~>m:t%1!_~F^Z/FzzM7`ʗ !Lq)$B@B?CP *R![0/ĝ8P } aT aڟQ;lܴs-RSR1 ;@ ܩ=ujגr$ -3$&&T*EfݓF v|9y:Oى᝷^7z;C/XDMغi]vFf&:K K,E'`>ԫ[޽zVrK`l۾7o+j`г-'ge? 1)J|0~,۵15mц7n1'lNGn^* sju8<ĹBϘԶ_q]G©AUe1F#1> ]u:jK OPZ>99ٮ|ݠl8ÚZd+7甄D 3P(tڙyCɾ)sg?Ncт9^GQ: EZ- !LGqCa$* 1j@'O@#B($*'T(s(@WJ"%NA0Sb)y)؛nE3R7s9 /yKKjZ} <ۿ/sf[};M[!o$;+333hԨÆ v~z6nkx2XZYR98:3xe޼u&L3h4j՜?W ywqgϮ>OZNN.ffjP*- 9s999Tw|bRLh4ҭܞ F  ӷFoki,@\J.c_W.OϾs3'-t#uݼefz ӻ?\gԯ6[BCq`YGzFh4fc+auj*SۖC\b&vx>7D2-O0$1 DDDDA1#χ& !^lbr`5\Keݭ*=}+Q5i0Hg =\Fgp)*|tz^.tMƾn&%--bnQ/m7NZ`g_h2*-\z&NƆO&V\gǛ˗̝ ~͊|qٲvxyy>5yͱ#xQ{H^*1yezcL[[OH9LB<s0:m:@Dq !mo>R¦JHdˍmؙlXY>k3 XzG tڝ`چWs3& { >‰xz2?|3?LSƴo6 (Lq9 DFHE6{*Ϝ{wR]Φs^ܸq޽J?{Ko""ёjUХS L OGǕ;~k4TC ,*N+VU+3:rSW^}kөc{/]X"s'"KTi&mSf %d98vp="cS6USsp-Bo;f|=c_Z5kuӚψ(MWW?DeILL,_.GG=z9lWiTcڟ)l$*(nSls!MJ"0Ul)h *R![+TIHd XY|X`gD+V4Vc2bTrק䥲y lK w4փa5s6\˄һZχKO#&# 6T@}}R;M|ag^|{q8}K3+ͬHKEgcI&͙h Zj{\),bUӴbAے6w|dX| CYkZV^ˆ[t IXAwΧCs'Oaͺ x F>>lٜG@ { '= :ڵj^ѱKON>W_擏/uܸyl<)?_ffeqVАjXYYm/hm,JU#9q!RAHiR˟@w D5tBVCݜ/^ '&.A*R9R5sbͦ*A6q6QD'0f hOJƦ_5j%;&Ϸ JY:fiӱ7J)wt\~nITT 11ܻ@Vv6E( Ti NڵpBB> 07Cf~7ӿ%z۷/g`aiOOQoAªwPJK\ZmZ҈ABW֋R!`Ov@K ,2B![M{tifJ5j @O^RӥUNM]t 3 |} |T߻ވ}Xk^k??8Y:B+krO;O^܃7k#<]vq: fJ3 vt {3bXwu| F#* 2Wܢ<:wx쮶`!NƟVcˠ[o:tə3gҹ#K+s]?ev;NBB" oZlΨ^$ LO7odr8Dl nn4_PvKbiaAvŤO-W5HHHc$'޵jI*ٕz]'77c<:ttvnWn%pT6昙)EH]cvg/^!95Uh֨ޟvŊuHHJNFNgݼ,B*QRDT,o}Y* * ш`h4b0tmJDyZ_ry_ځ(3\Id }/c{܌BA5 ,{L-<Ù[LQNr`Dž ^t-뤥CAa!zJ%NNx{{R ڷQm;v̇&ҢE3h%>DDFѩC;/[X!V!D9qo)IUDb*)<I !WI B%E+cRXva9Z}.V.ddF*VK. Ç A2Y<2عnPT |}3F<\ٹu~%d4fḵ(Wu+t (swz< Wۉ$^ݖkK yca A<^϶Xb9Z7m;_m~`0`V3Q8:3v p7^"j06ngUѸ^-^9+ᷘ~x3k#13+]/q +m}ٓə W4z=Cd`DS;OSӳw6ԬR钚]'H(n hILE7VbΛ>g[;$ }B} )xfϙofb޸w6dYn~A))h4 4)_MkI hILL,Ϗ{޵3ӳnn2Oz[aooϸorNs;Zʠa/{|nj*u`9p BS$V!ʹ\ZTF!ē"VӗΜSst8[9ڿ%y<%6!.TtH w 03w Ҋ!5SPugğZcΠCb0prWYznEPBM:>А#056ndͨ*Z~'d@ߐޥ~\=wύ$=- d%?evn޼MfVnnUgn 2\ģٲu;S ( U#7n$%%GVB2x Vb~}.]NXfEX.މCRQj4M{=R ?O'b北R1*TtB&-rƼlڱјsTgsxZhDw?/>z6˷`0qX[Ō܌@T2^H yMCy@=Ez︁`i;7 iL^?w2SKȜml9qMJ:?fL`8s}{y3gJ^u?Xo$&>^,]Tr,Mјc>0WiXD h׌Yyy513Z=m)7B}4ؔ@'.F#5ðXBrN2{.# ` ܜ0Wiptg-ܫs,8{#a4P[T(1SJzc;whJ1e vZ÷bTk˕z½ hӀV-9wpv}#m"6Z}z]o@q J{ {mܩhK7wF:wKR?ƍ 5hdel޲W-AAt؞ U&rZ܉`0`Ŵykn`:}ԔT4 tڙ/>i߳Cٿ C_-**{{PO$?+WP(Ln$%eb(F4x{8Vɍ_㹗sO3oT|V՛v2ow~(iA )%)~ 2jV[gl5?x]wWL ($oψe]ONeg̏Q*ef[fns*8Y&Тԩ] s/0`ڔ/ x 4kڄ?ATCo_`̫/S^F<JqѕL}5?eWV=6rvc}TR3R*K.O?ׇaggW.k V!D9b[Daj$*D9?xhR!O[MkxBIʝU&y0 BA~8Uf-.%\Zc.bo Qօdiv @S z“é^U2Y6B E : FJhDEUMX0hRzK7_Ɩʆ[ؼeΜ%%9Z͚5S98H&r(..>'N ʍg֌its>e?qh4ѹS^O6u+?zGP.**dt:<+P pĘI GVVWU*&-&"кtK8y_/![M6fǢjWꪪ$@`=?> '/ Rn^])kSӡgԗ0!tll"7Wb; bqq5oSdHV K%^iբ}*rױj:Qڝ3l T*  <3%På+זuƿ0IR({؉дPZ NL߄=812{|+s,9tCu?ʱTklLTZ՜Rܢ8AqyEZvR=dvTrnaa=v2eJs`/Ed_Ocnf[I4nD,[Fl>#3feϾr3c7ԪY=oz&-y(Y31bEv28:saLM? Tj&n))P(Sw*Ŧƽ `jZI($Z3xJ*ҴQ1L^VJEMο+5E`blĸi@ՄI[TOx:>p1ua=z4(fwB&}18W9{>6lƧrŗ¥\j"GDWGorܾ돵xeEG˯KgYf͘9I042dm*Y"oLv܍9:JWw:| q̚1qh&Nʹs155˫^133%!!$4T Y:ϟcz`7n &7z8i/#CDυ B+ VP PDw)ҏӡg0՗j{Nt\ .88dD"!"%33ەAzJuVes/.c=c7W1N|iJ͢wcR`oZC l Az}Uֹ=p'OCqD-?ʱ D)t:t@ ܀HDJ$&#GOG3gY`テL<J9bz:p0U*uRq.]Mb.tk{;q`]?g%3smʺ3w~}Vb8Wģ#P?昱6#RX0 ͏T+]xp*{vc_;Q_qqYYdЬicvےdOMMUNDGǰ`ެw^އ";QcqYRڴjec3f߸5c+>?߼uҥ+ԯW_~''O\EU"(ODIA\` |b-W ( X e`g,81ߠ]MHN]FSݹ =MrV V+$AiyS-u^{D sӶ 2}a܈BڃZ5O 49 CsPҒUJ$xPє}+amA)knr38Ub)OR 2,nN4vI%7v 7nqi\]٣[ޏOP|1l:::l۴=߸̍hۡrKKKZlƸ/G̙2m%J]{_Oav_5m̦ā Ľ{YnJxeտ1bXΞ_Pߖſ.`W FVA'l%k\Dρ g*VN1>ZƢ2 BAVs47njJ5*ӡgy :Dyr/͓"2)v&XYs:r;1w6b`I_0=Gs&/Lq>-gB݋ 9[R+UHLW0aROpf0n'ZژNuQ&Hak/,%88O/qy֬@6dog̚3g''ڃYf=_. ,--hۺ%=wo/042b릵o?d V́; TƎ 111aԈ51l=vR%++}"*B%P+][CEIA` |bx5VZb,5A8xvtI[")<%;j5tʎSJf-$f&QɇfnMzCp/6c=#ږiC)˒qav_XO*V'k\x;vq*Ojquq^ӫwq}\z_dƴo̢I6DDD݂9 ߧVQ5ԸA8&9~WaaaN*07/jKVW{ l1ٲ |Pd=֢Q]{Pé ~?s k+ zvlCbq<4;m7z,KC'b2nÿ: CQiѦ[Þ3bjz2_0(@|aQÆIݼӕM՟snPo?ƚc޺ ]5SMڣ܏#>U>NBsqb".DD>T)V-yf]U\C}??WSvoe͘W6իUaæ$$$ҺUsΚA=HKK矾}6o\ߟ2-S@WϞE{~ *x]o\tt XZZ0t@ƏA_ .>cF2aܗEU"22r9VA)Zŷ '#\Tj%5\cjPQ8vC=#zy퇶Wil JTZt-N_=s8҃ؾcϜ%44E[[[W_PN-QBc]e̜1>[Ы 4 [7z*mJRBbddXdWTڳFCjUqs+U7($8ښ_x;ع(i鹣J%jau 2(Yn+{F8o޽ǏKV3g"s_j}9q+>NT}y9['g7 yq]_#6Eq2{yr]9ďLV^ZrT}sa=OPemש:{kaЧ`]Giw5m̊qqv%T>x['Ocݴhބ5+2CG#tЎ~ NHv  b@,7۸yӿ[)N_F8>+k/!!d`nn΀}6#`s w333ͤ{?0{Uޓch DU"1ul%7ܪ%VAʩHnP(t I` |z49 p;HϘ^z`mdˆG0g(smOX[ٸi+G` ,,SҢySQ|T/htɏѣ055{>ŊrL .VIJNFWW3SStt{H$8SfB dd`m*: fls_ݖtiTS!;2gsrpuvd7_RKۙ62.'t/caQzUƎדK0th4-fNgY2GӠ~]RS07ϟ|1lOOZflܼZ5}/L9{>kowy֭YkoYn#ܹqY[y3SDq 􉈈ܜS'ѳ{W.tٟlݶ09|Çt #FENv ͚6.Ϣ"*Bѕ_V฽g$ v"*X9*@C&P?A> VAd’Z-)kSסP)Xgi٩+^Z5ihtuul޲{#233Ft؁.;"{bTb~%?FʜYӋlF﮽4jԀ6J%*)Egxff4o֤PTX`ci"n&TNt9^ĵZ-Z-غP4=]]41CJ+V˒9p,j:}z`,-^<$,?,!yf2F a"*I0cPY*z5*o 8ƪzR~"G͐lX2oȸ &N26L:R3r2,|N܊fo ? JewWfm8~Y[wÇN:ÂÝ^=|i3fciiY3pvvzt3簱&QGJڥxѵ73;016Q7%J0xN:W\;3 Xb7n"+KA ^>~uއ.EDU" tl#!Ba'9|8 V B i|t@\\S7: 쾿0kEq?F;ٺm'A$%%aggKJޭ3ztEz̤}ʉ yĄ$ٹ#){/ǒ_VJ m:rE?߷77ی;jTʤHMMw^߸Ebbff4WiS%%[E"~}` E\ p`IQA ;lB.VN%_%DUAD[IQ5`;9rCbiyVÅ$e%(yҲtK;W.nɮsן$*_^=ѫG71[0hë|9~[5kTuvї/2bH-<Zb?,ҥ0%Θºx1J#Q1Ts?+_CG5+Z'}2/7v8X^7n!˱w۫H^۪HPD ~U뭂EIR͸13aVJ83/ҽ[g,.oPr95kT}l-QzUv,Gtjլ.KMMc_,-,ѽK_l?@ɋ`QA +lB"V> @nVwPTFA(:#Sl|~M3e_ҳөW %xvgn ==O!1)Mqq=~LVff/I.޵ FFcƇ*[U*Hut062.4KJj** CCd2"SHrT**V(W"Zx{?SnWWG1i jy1wgưѫw\~!t0Zm!=]=,,̋s{`kxVA>K'z]CJ[J&* @[`%f&=p' Mb lۡa(T RenZf֜Kll,x/GV-ѽ } E6;ww^'55LF9OOڶn11}_EcBMJJ X#J ~%$&LCwffH$,Nv:;Pdrzer̘82 m~Eތ<#311cezh4ZҳDGnMTk1_-C_T}nZ-u [ C,e&1]Y:.DJGYWs@`>rT t_-(aq?:w<͚{&\""" $.>t JZ\޵3*xv}obБlݸ ضݗ:ӧWQ|ru?A\\[_ܸyb\Yr;''<6Wgdh>"*D[OrPX` rj]`&" |.DU ܉Ȓ{cW0TE*AT=.f/~q%݈֬kDG`blLbTTvm[ѠA=Ocl޺S w:oˠ P󟛢lMKOGTnWxxKchhP$hHJNFTalbς+qcNvTjJԭYnZRt).tlEBRrc2c&L5D#;$97?c6%^TѲ|τңA 7ua>HxiSEő}9F5=mԼ4Gqg gcT(iwT;/sAٽ+*x1g^SS2OEѥS{tHHHDfbBBAFFViӒsgwk֣T4Fl?B΋֧$ F"*Pl1h YwODU H?.F\z`aXp6l'8)?\zR++K/OJ4jXjU"\@nܼ-8w"11ѡTiݒaCRTϟڪPvMKO'[xhW=M ^N{yҡUms?cg.'J7|[6FVhё"J_XߡgYz3tZɛ #bk-cBY*XNf9=S1ͬ~Z:V5,?W"p1czϊ8ۼzmgCYs<M] WT._{Rc E+Sꔷdܹ동)cnjd¸/8s<ƌؘ6RMT*~_={|!^^ѽ :@аpzXzvkmb/*x{aVye̩3y6 Wno4dJUfx?2BnwS*r`kcsq3 כ6- Zq [ghٴ!2֖:?AN4Z=%Nf|*YŨz$=\o0 H6ϞuDߝ+Ln,،y,\JBŐvL[9*^}b浯к(:Ln/g`%ֶ*eݳ &wsz4um?5~ϔ #vJRR$/ܼ )).-TJFViPT(j*5J7oRT@!Jdr)2#FFFp+j(KS=I$`:=Zí kRLLL& r#LMLZn]odHIIչs;eiҸozH1|?qҒR7v4'ǰĂwQ˝n"<2rѹuko]>cDQ\PPU ZpjlJϥp(4΀ lik)&2JU:3I|j!u<+uz[e_uu_J%*VNGc0  VԠ/{H$T"oߜ!;AWc98JP?P7s{}>6oazs3ffIZRRt:=T4ᅻƒ޻O?qѯOo^; ww{?ӶMkSg`@*ڼټ6oN8ř ?h8SRk8}ʓ=&Ԙ` ϒ *VAx2X( +n BpZH$A < HMKPzA ;."$d3XҙDfrJs"u}:ֳu^'. $$$XkkjѰA}ڴiE]l&7p1RRR151n )dJM *IJNF*U]֚1Rӡ(.Fcbl"B).)A`ogW#>1dP[L#(OtjO&41Rwkw=&rٿv&UjQ(5SљȥՈVuu-R1`tz6r=Wu*,_`/f\ H$ܷp$6F07/ |$3;ȘxSEqi)[])Q(J(U)wTTIout5anf5n.N ukh'\xf%3+Y/牝Is8xkm$<"\d2=w7ѦuKQ c_|78_ŗ2t ~kRSXǜ8.YDfM8d$_SXGZ^bôo׆-ז>,<5oY&;rDUgG[$ T5"*OQ# eZvXADUج콲Kc݇6GnDS X[r ?{_F5KdFfvk<3 [ep9FDd)iRřuйc{vLP`]s<. =v73066ߗ!2i8lmlմ`kbUs0~* U둳2Y_ZDR"ɪtX.E8\nD̙6/q3P}eU@.:Љ =txdӞ8u]d]tz&UlLY0! k=TXMngxG^_?Cg(4cfy:= ׆:PA\n_% RX I+TVE:`(zgD"A" I116 ;[]M`/ukcq&}˓o֭Z)P8.`dd)nnmӚn];S^ kt BBÈ&unݍ ;ɕDZl_CvߕD=Ni##L{qmE֭X vP d cxI޻Zٺy]nolR$ Ts4l'CAsh؊ _C*$m8lx4'9vN7}:=vJ=idgG6bZjIڝz=w'9s|y7¢"prvϗ1p@?r}""8u,YYSne}vOgjRqq8;Wȷeմ* ZV\.DB-ߺd2̬)/`l,?:vw]XMzLᏟխw=Nox]HB"%*-R=W{ /Owbg'5Pj?Z|wV6ȉUx]BƮ9a_׬]υh۶5cnj&&]DDǑ~3"VW~P1eAW022KKsmN݀x9`;DEҴIcV#pOXXxS$;'֭ZRPP@\XU=mV5fSRR9z$a^ Q lmmO٣} ظi߮ FFFOd;_|?\L>4qqI<=jֵ3{ . 2/Ogw*mEUgWDIArdV (:h 5 “Y-jNS&=i v ^C?rSq'4dPDfF`fc!]đc'8sQ1߸Aqq12 G|Ա=# }/Kw)$?ʩ3gqfѯoo&OH]W*"<"7WW\MjR51*Y[[)cE F2#d2)Ƣ Bn~Z4 ໏erxPMnu|#1]sD.]Qׅ9 \lhnz>.kCЕG7?c4~~N6Y]&}&4ڼK>XFDRkJq-Xx)9x;<7t}vh9㮐RB'¬F" J035 )bμIV%gjL8 ʖҴIc6 ss3֮ȁIH'MMz*U*6mc'LfVVuVV88䈫 ͚5ąX[[wK}/B7耋 𨅧G-|󫍅cCtL, =4b/1g뜿p //O,IMKG.7?6_Si7i` Ϙ[X&!B;'e(΀ PST8:3kl~oF`n&.tuWRޏHZ֍#43F: bw*iъ>LMٷ O%$44JK899Xݺ0x`\]d nOHN@wU' IDAT?aI89U^u|ݏՃŋީrl1} K?XXmiaQ j<=U^/122B*q-5 3ߺ0o}^]ۋPP-Qit nŌu16P@Nն7b^R'S6JԵ|dR :0',0G콐ʬAkVgDXg[qMi_Z'#']_ųXoJz_R&}L=o[> c#UP6fD8b dۖx NıSKH"'/Z>i!Hɐ%%+0e@nlބ[qiѼ(cZ֭߈J_h4$_]jӖ,^7_4kژѰAYR,ԙdgeSTH$e7ɍ137oo/^x~> !a|\JqI 6V 2'IIMc ,zoAG` ϖK VAx2@`$*# !j*O@/ͣEt}/'~xx08p&t ψúLnV%kTPXȡCGٷ QѤ,UbbbM4{ sSUK!lG#55 TJ> ߇_ccڌY{_~r5 V@tL,yyѸQ'Jt: RT[JW?hĊOckc% %T[N$@f&FL[>-jzUZV<\JdTEр+(.0-%*-aq2Ȥ޴i݊޽zЭkgsU+ W;Az cL2 3GD^S0eJ2Մ`x1 ZmEPa&|}{}N/19˿&Fƿާ[G^}irQ,Zygu.gQ5<ߘZUFۡBN$z>*O' wkc O?}>fGY>Y':5ta{?~;>/&@`Ԉ@O[v_.,ѰlS 9f0NFeNUyLnJ*ᄋh &ovfw&({vyz=Gq/Dy@{'j0AmxulqY%r ΛwNMMcοT-͛6O2>f>tW9%5)R(>l#M3//hO%::4rrs)))A Iӫ' KˇJJJf)3v(-} tEžT1[-=XxmyhdRY]z kr\<  Wn ߗ:bG{L |=~7n`nnALh4U3`5b8;Q-JE"抯om#W15-+'qZJУS;O-F2(P-+Լ"Wo(ܝׇ7u|.%LRLwjsJS X˱4S|=]gS0ȅ{n|3qdH;/f .isπ06>4.\ʅl^Rm),Cy1kPу% e|wU}~\ eƴI,^.BB2}&|dcFxzB8t4q IN"!*yqssq 4~}{caa.vp%~uOAAuݫ# ǻƬ8yӦNb2* 7/R45... ;o[&†#JH+VP;k+Kޙ"%J.E2IdOwW6Wv2f6EtIͯPMyy` 2 6M".dwuqb5~Ĉ =;o\\q7{TJ-×ԈUv ME*^BRC-G :5t_ˊ=}D!7ZWu?{SgD?С}[&M}{ѣ[W6[U>^'\'\ UrrQT"Z ҞGތiXx۹k7ܹ QRZ>ޞk׆IXW쀏#lڼSgΒ̈&M%4iܨF kUv9Z-YYS\\RDT"J ˳F=A*PazDŰ(VHblm5ztj`H``m:q:~|qB(C"|*y*UsEzR)Nvم񣆈Tdfi :u|9gg'z+^vma.^ ქ˹x)?_~_ ^D=>v#1|(.Yta?XNP֑WghѼ)ڵn'z>j nnl\nVAKݱ5QDD[ PЄ`kG+(" T !:I[rzYjJA*vS*׮6xyOˌ_~599}!*:hPeX[Y?q۶ KGfMkĺc=r8fX%1!!7QhZLL77W,--NZ zz=Dtm*vzc\\yqhvɽPWrLM5G  ׆PڰtnZ71ĥʊsyr9_W+_n?}vƈnhbhYsݫqWS?}g3W=>z4Z]=gkR5Z=N-sae&knCK'4MSbk^_!;?.Ve؉;~={ѴE b㯒RUhUOR'G{Tgٯ?w`meENy4kkW8t($&2J:L2GFDD193era4Z F ㏖wT"OO5O\. cXZY2z#$4 ڵp7>sxuG :`k( U B%PP@k[?EUAL[ mlrvNi8ZZ%[ O7 OU.|=Y%usN2Q1[Sϐ|:%%%[Ν:A4nP씏(++BjNPz $%]G1e/Aaa!昛[`oX G kՆ?ټcJw2}<-6,z[hd }3Y9 Xb U8%*-|B݈nMܞȼT6EprƼ? l_pwM15!=?| 9-ҘɽңZlM0?Ħa]mJYߟD[dW^J _غ+nJV13>Z=5 81kܨj]>u>ԪuνM161AV8*HD?Rd2ӭ#F*QNN.![k077GRPXHaa!j;;[ڶio^[_/wlȨ>qXj- Џ/?[}TӑW8r8/ǑEi+K Zhμ0g2x }Nο_߯s*p=텬Z;-Z4cm\ lt;K Ts-q+'C;?F2 BM&Pns8;ʣ;~љ1˿'uj'Or* VVl0g g%ڽ?IDdHR\iբg ]Ga#ǒk0j*|4JJ<j S^Ψ06 (T3>՛EĐvOq'2hS^Ζ|b+Le:̗F`mGhmϚJ-'"or4&S Y1smwAճu~?HzN3W~:jݥ6{Rd/.ɨ  cRv->HŊ8~%6]bhWϙFVr i&υP\R{VG{[zu1CEGJ5޻īI( Z-cW/cFѵK M̚*&&u#~bT*5vۗ|O~~<Լbxc;DĢhJH$4j5VVV,~Ǝ:c&e7T9:pvrbϾ\^nپo:wc+fH$thj' <.q'zZC*u%Nxd(:s'*fAo۱b*l][j[ZF= DfDq(0VZХv燚gM*ɦ{3zzåPn$%%SPX#yn`= s>KXx/[aCDA'߉pk^|R122m& kKJ ޞNvn_C_I =#;D.׹`٤f8DL`h{of ,;ӓd+^W,LzH+eޏQjt}{H3oU5;FoHL>Y% L^o&jJ$+ڹ{'&*Vt:a\IHDQ o/Ꮉ5\l9zvRc֭Z0q /))a;t6oksNoNn]XݗXXX-Co䕡(UXQy,ՈMY\1cH־+tϹA۟w{Uۃd:3jH_* V}gҙm=[ӵv!a/.\DVf6ROO:vlϔI˿tǤ`iݲFc8u 3_,]£/쫟X[ZtjW9B%Y1ow;x~cљ7gOUOyլ~6OmJ->9k\Fn_מ>-vGg`q>AkYK᫿byْSuaHOn3%քdBSj9u~evOƄbɽкb>YFUn[| >'ª5̃­r}5u,ujUa:LV| cjޕ/>]I {.Y=Į̌',Uo2aZd>gcaiAY|<=}#̜*ətY$,<O)]E,cGZl;x- <{l,ܪ%ʜWeAx|  ϊm.tC[1i:Gl S)aC&n*2hތ>z-cJlϊdi1 йSBNEnyoVYL&/>aȕ`- IDAT5b g5E;_lh᩹}Otm:2DwϿ`oK~A!JD}:nr#ǚgIe_s!=07cAÉ|8jTmUCұ4}}nG,B.ؕŒc7Y!^iۢK- u?uatnJ mp7_֔i]`H:I.B*-] ݏB;?PG ՛D"‚^]3k #싯Yfyy $9f|t|lQ{wbaax*͚6y۪0u2×0~tNĆx))j-&!!J+[`Ԉa癮Ϫ5`GUj÷_qXύ̙s̞c^G"Rݕ:>|mo:mή}GxqG}J,ҢF657~FqMim{Ꮖ೭ьĞ.Pic }Y0=s9buc}ƿmp305kc7fBգPj1K->OEvx;[Vmqb ?Z\&VOF'5Ľd2|<ݙ;c" CGaL: 9\KVv6v//Y޹?pp%JKKyy>{w\;L8_LJJfǮ=֡w2l4!a̝3Wήp6mʛã"*3($ Ts)lǓP` ,z"*2m1)Pĭ1}*$;gHР﮸DeFh Ln&6#/(` ڽ8 qttY&L?=s5a8{a5*7hHΞ=Ϝ/"*<}PXTT|/D"!1:xb찁}Gd NǮGQd2ɨ!p keГ cd܈n)i,Z RZlxᩉL_/2c'ˠvg,ColR3ըǥMY>9aӡ=mH dt 5f2gDG u-Vjy]Ws4i-txu<kx;Y|7_lLv( 6}(_O%'7cccҷO{NRH(o.1133ˋvm[3yx爉7_S*<7Ł=;03{\"*3($ T(lǓ=w].EAx` <;Ό҅ GbiilNàqxy`[jlM'bC<&Jź ٹk7(XY[ѨaƍaCZ\‹/ĄV-ר8d]`+3y{b3{듬@\UB#b0ا&⣯~"&.N-s_-X.G.7bsgPC/0j6*5r#eڸ;՛H% q OCl Nf&4pϖ#")քг;՘ Wp*>W~<;NvqĈo_nyKD&akaD΍\٩6~nVw-ǿ0`tz>ߘ.\i=Z&qZPp)C1HH H<)Pj`$â7f( 򌸚=8s1Ecia uܐAݳB+U*3v"A.S;ӧN/s Qk١Q( 32?_:oK刌V| 7nfiiެ)}&U>,xiS&Ux? q`G6"*3$ T"*!COW VAxr^R%| NG*ҽc8ş~QpuvDVs14O 5F8|aܸyRhܸ!]XYY=ԴWZ˲abja8;;1wL4_)((dҏ8xR%rc96xyyҰA}:wjOi]cbٳw?֬7^9/WxQO t?!WbMэ V=5lS$ T%lG wZAgVO9%9$_ w+7Q\Ͽx;."*# ;6zGfgG6TEjGGbCuHH/dˉdfQ2smsc^o@*#"8}.^ʕD233/(DR`k#X^kMʧPB"56Ӽq.x}W.ţptr@Rsb'OAJj*99X[[Qݝ&ѯo/zt٣ȡVk1_D~ż4s./\oΈC9~TT i阙k!#3Gp3#?Z˜Q#8|,鉅waUmO{AQ@EQ^cfLoh11yM4[1c"; 6͊1(D2sN؃ }C{ϏKVQ/8WL[w9MZϼgTe'{9z䁻&gk$5 }=޽z_[ÇTa@PUV6Ќ2Q@ F?,!lfL?ޤ}xDvD)._`6tOC}=XƸMh  aXIjΥp&AAXyV/ҩC;U <|(lM&U!lnl @Z aք5E*B&k1YM ߟ^==Dh6 HڬUoNN`6Ũj[h1'qjH)L!*;\V3R0 Τ#*;܎&նbsyaR߫=)PM;҉QGi!N]_9s6]iфqcFؐ\{Z]&##A;(:phAd2Mˤd2Rk|ϘLm"'9.#'Z d/p:?R(2Ԭ{l٘W6[[7yʯ{p$c,`# _'ၲbPLRG|m.XFt~7~ )ܗRdݙeKex\Mhղ9;w^/34)'`koPէӉRc{r }9|z{>'[Rr r~\iaP٩4qoM 7O3];[6TVUg~j͛5zFCa|0!3:u #3,Q* fMf a L8:mҥdRRRԱ=r!DFhOO3zGt>IðqU G~;p6_oOԚR:}zkj!}YXToLjZ.N4y<=:!k9Ç+"ya`+6h'풳5=A`Z4MRھNH%jtf^8:3_n_iիj9~{ܼ<^-N9K`@MtȀ~} oxc_29o#EiD*tZ1e1XA"ƤCЫNVK^^>j>X~#yy( ߗO?}P\Kq!U*FJ`͚|+hդQ˵*tu2 "ݪBzIc77^+-ߓrfE7q? a 8ob՜>sl|iѼYz3du-=Xyk/@#NhJ\^2sdu4`pZ\vjI&3=?T:lc\`F=RLf+sư?2va|8㧑Qӡ};dfŝ&mFk#b(1 F5XTvtؖi/>;~s\NK' {=/> =z]ߝź4_֭ZFvmiۦUe F^ym[^B*)-[.,]8ixs*O?9c1|x3vڴnŴ_ JILDqrr|~frhѼ;NY-a|AuB*s F'e֞xbF|'?BJJԔjJ)-բ1M-f VՊj-`1DT")LefKOd2T*;T*UZuRT\.GcggnR3П B B{KZI:/$4& TNZiƱ-~; F7U@5WNJȕf"ܧmx \: QPde`Æ psWHOz_4ZlI8ώ ;1 D & YmћIM'ݛ$P׽ucA`߸'OQj| IDATTT+M3q*p,[ Kvmncf;ZSw씧 0zgϥm2 `ES)0r0#+5%^Je5;IV͘<~uj\w|Xv HhT?WL$Nb¢bޟ-Ql)Ӛ7LW1vG̝w,6yT d ì7_ӣZeYsjSbgׇ7^gx}t:}tڛlظR7776[Ie!Fs&Gά _ CHg/Y8ԭSq/V@b㊨!lU !lnl M&j u@ IfFiiQTTDCV{% jEȆj%WŌwbwaեT%JedRJ%Wנnp[4%^? 9p 9:+''ON~BzFc),Ak'M|_t~K؋ʍ'OD) />PlɲE!$DJ XlĢEAUV K#^A ~Od:f-&^!=*oAa,[Ȩh%jh8Q#1|{>fѷO/3||o8#FO`"|g~B8@ɼGmC@o0sߡm.NL}I:+O\JIc񪍜EFL=GJ|:'~ Vo<.{~-LRL*'ܾ/ >Μ1L_a1lE!>u hj~O(@Uo >ޞ<1Euc'x} .^Lŕ5 Mp:ԯJ:uhݪu^yMVYOHH]8-BGzC wlь+жM+֮ZZ9豏w{{, \yD㞛a|Џ^xZY[C+V`IAUA[[ [k֞PjbrjSILL"##JK(--Lf,2ߣVUѤD"A&P(ptrӃ:hٌmZT*S!?Is4٬ZIG#}C݀6nB&1Pk`Кvu٥65ꓯ߹ގeĦ7l5 a]NdZ*wB p }`[2ԙ=YfI&[vMWE\yYu%"Çrr}΋J<6nI.䯴x;x1 }#lظ%KMII 4oĀ~}0~,w_ƆZtڙ /0M||2vd|;j/"!!fSOL*<懟x)|[˦|>MsyiƇdeBs=KNn>5iVTz]jM) "ݰo${>fc鏿)p]l2Kүu0-w[TOx#jJkH9AȖYgWJ{Sx9Ꮏg٠`&>[|fpjD"\:G튌/aZyt@?zOYTvv4oޔҶMJEn&^{c:RTFA&S `Ԭpqq/NGMxayN^ERҬiC[кe Fʹ8JJԴky?Ȫ5Աƍ&k!lP[IAyfV⚰[XE Te22HLHB|/Gqq :фl.B@\qp'^0:]6BdyCTv46c¼0"|E~Ak*OhoJ j._X Vu-6l7pT:&5-1n3q4nX.(-ƨ3QpŮlB 26iؖ5[b0̊b$DͩȀqV:C,r (eJ;|Ĭ@W@GPovEk #޳rn$!?&~GDՌ[ljN9KVV6..ԥ_ތ9ڵ@l6lش̀}KlS{72d@.f#=IJJqA§~b2!gXh0sfMM;qg6ao2`wJ+ >2mZT L6 & c|]C31,̞Ԝ _'a[j7G)iTۍ#9<ӯ>C;־ce;VG1GzW֙6#`'(!'!#h֊cTК,$k9x1RbzSҥ}kfLnGn^n(?OrsL:BqI1vv*\]] I6xXDx62vҤq#bYz-_z6[d,\M#Tz|ZBFF&5I8U c_&&]bԘ3proM oiV||i׶ ^(¿ "u"ED TU 54㚰@ j.^H|.^H$##BJ5&,3KnNjq'WF7d۫&icM`-忰f S.N@*1>b,An&%bC ^vЛH%R # aR3#{+{ Yʕr<  D5~eK;h j\_Gv%S*zl5CNi.$%ư6Ciߌ@ײx $bD%W1$l!Uuir  keI^ oGoh6 TVeMoe X=jwge=YdQB.=IM'cG `2rصJ茻kRɳy3yH"5Zm6 1d2s+Ms3ws诓4nXO8s\3!Mb6 ywL*졳j\Ns9d%Xϡ tBZ QD7`[{8WZٰq Kxs(**B"лwOKo.StОRcZ-o AA7GhDž d4i^ѪeO˨*wzKz$E`2w'ȭ628@B ([&,.<b7bYs㱆 B=CKϋ'ܧ-3gu: $2L#3cu)^ĢDJj\8ɝ;_y{4RE 4TN>4Ѵ|8KO#QXL"wH/Zl @zIkbbưFC4[-&t&-ZYެ`6b1[XmVHI( 8)pw\N,;/F!S0HWE4ωYv="==ٌM5bE.hXS|ka1Hߜ.~^B׮]Xjih#HO`g1zpeF*TZ)bb2NN Xq i7L"_|0J٣X͙X:mB.jjqqr* w?KdDv(Ra[dܧ*1s&Ә9 w &+YjL+|6mZ\m& fHRBi/T[':Oe6nڂB`ŲoRz7LŀCLZо:t 1t؞+<Z"Jp.˖\y~5hJIKKG!3fH?R-qcF2ӏ-U > ĬfzӢIzHRT*5ة=돃p[D[_"} yq7zŀIoB'6._l hM^,6+M6s2 ;rŸ18͞Ľ(iZ)G/E)SX!x;z2j f)x:x¿9ގrf :īgzFZmx5oh6n":')usP'tf= O.Bg1"|xhrbI-NEo6`00YM,&VsjbbY٬]!m؀+AT"E&)qP8r?'_]qT\=sd|XȂLzz,Y}HL^ىקcƌ7r7uzƎ}|:sG||:vlϦKK<ҽY|' 6D8@ e9%#J$$ >מQ*W͆d&3'ɾCGy'hHtD"){:tzo#s $gqqP- t]'&w'%1ܗVzLnB]1YljN* :S-NjT"^|#WURS/WYj ͜,'4$GxgSG耾ץYf=1&F3ն.\L`U"iԭTi FSҐIe{ygi/|ѧ8:8֔Rӿ+/1B*BTf  7I\DX@pIMI3œ| 6HP*xzzмES0}' GDg'[o{I/IM冋܅˥iڹ7oԨjè#ps!2K=vCe#]J:YD!AgTp=ґ^=8rb}]&yqZ>ȢSPl(a@~T>ˉec&,6+-[п޵Ƀf5(wN9 @ZQ l> F7A s:Cɖ(]/H$HHeB+bUT\*G.!ʑIdXm+X3FKYDWӕRT{w|Ru0[-zv)|ᑠHѻ.&W#A]t .-JK] 7s.[7ݻ1j0\{絩ɥ[.,[脷G~G-پe}uQq1{''7y_}ΐ mjۂkRvY9y Fj`HD4jPe=qYLG4W&:Ypu2/`)ܗxpS603].Q%U=/tMelV?w6N)qD.{^X5cF \ƌ$2mĠ)ĭ jD"͕g&WնVIONRr2=qK=nNO^,y]]{xieeW~]|ذi+*f]]#99E@MmjqrrV]Ojj6 {|4 z y*;;4 AAёnt( @rJ 7s+!|a@PeF 95t⚨@ WsT$1QHHH"/7RFMYcDֲ¾QW'woeFe8G !^pD[=j}j&/aКdrEoֳ)n :{jO{f=5[ҽnW Y+67Hcp,*Kؤ,V UAa(`tB)SͣCt]6nNeُqc)X-,< |z қ|} f=b,klna ԠLD[ڬ4ьGĠfSf.ʏ39~M* ;;;* {= {8(Jn<kњt Tg[KQޤd5#HQpR:a38O~_'_&-O.D_҉ " {`uu8iiH$jҥsGƎE-+76:wȒSg_̥Yޱ77/^}_Pw y&Lu&ٌl.R6/>=F `0R/JJ+5-}åmOცWPϥ:~OdR! Og;>wwa>>\"4xjggsV@s(l-&U!lnl *@-a@p7lĞ;Sg'##zQz6 vo+V|նdRd2RG:$JqvqAPFzM27}'O*;KR%VFj#;Vnۅd`ZpS=Eb h]5Ql(aCF6+CMu- ;0IbrUF:ňBj+'M"(Q-`[vLV}Cȧ!6U1kH+Ioh"tj,}Xr,8ᴮY&+0Bf h)^kGkrPWHrQ R/Agr]<Ѭ~vMTv4/bpdp"rÚط .%c0Mٵ533>ST\ѧwOls-_Ǫ +Za OTzN_3sޟF ŜORsKQkM6$JBFNh IDAT*S'ӳ?\Y4٫?nu)՛u2rl<+T8X%w2232j0JJJ3`ii+"bv@Wt^62K l&GcY P)ܾo2ڶ!&&d4v27kn`a4y|xykmGדN~~:D#5YVIHLYӈ;jޝ!5*>ۇiS_Aӻ3?duj) g̾arrsy7Qݫ;ӧͯ`v5|姌>gz6l3Ãޘ`W^~K~~u6c1*B*B2(l  7V'a@pW79:y3Ѥ^&?Ed.~VzCbVŊbۂb dJ2Jr n nRAX}FBD1{OY[%:S5 c֞)) 4 Fâӽ#J+܇}ᗕlZ|{X`>9i֜o9pX-7EV{>2Z0,-6lWVWʉL*UQ<էW8.梓;)yolSq͌ 5R{ fdE>1= 窄rY^zYޚ>|g_d˖Ճ_Y?s l^oB")ћʷWw:rClTvղ j~ODҹSV-_|ӁΝ#\, IgAAa!R FcyeLFXzm5 v3<ܵ'GG5`ۻ'ץڽjٜMPZ\\/ʡGprrb葼=۪瞽Yj3#fLf3ktz=Y٤^̱'&)9| riS_} !$V0@ *a@pdkhLMXD I, gc8y4ʡDd4Vy^weIY{?&M&3\A)\P((Jd2)6XeWzз,DTzoFa8zQ!l}x\F:BG0éRb(ocZlIvi[o%GD"A.U0xտ+uJ,H"8F> )I/ G*e]"W5jmҎLu&BRLV3l6R9]tcDFEDM+,7'*%%,][s>:mYD>Xl]- y_?﮶vLHHdQt:/Ν: z)j#pwc(&3;^_'ϖGjdmՔw_;ڷgxM8 W.O'3aDFM=r.b$=,ߟ'Oeȹ&Wv_|56зOr+uyw`_SxgUybZ\ldL4zWH%k2 WmSSغm'?pKy? B ?_~~.-7ɪHHL";;Z`j"JQ*) $ Jzm4 6;)/7f$ӧc"5݌gd xn.rMԺKC T%U 5L:dpΞ"R*L&-Ym6V֊jv%]eMZ%U&&w]Ubl6/W' $ 2\L&C.PZ]% ..hSTkU!lhM:͊lf$Z`zxO?ɁKqseB_[łD._$2 оV;L,޳GzotsN&A}xD&!!͚^l6j:V^prrduoEyo懄~w#b4Yx]jn.>@P8+$L"w1y w!|NI.xIwY~uߙZרYW8ྡ֙!Zݱ|7ebJfxՄnMk:_N5onTKyoGԮquuʢK4lޚ>Ǻw*U+1KYpZ*3#Ug>d>,uQ2FBb'>EJey f;_;C~^'GG\&?~5|rZyyh0 u, ֬Cebc*Mw>А ĤK޾<.2vdĤq̚`СÜ:}$&%V+:;;CHp0mZKUn!l!&l/!B* @oʄ*vlDGœZh0G!6 ٌlj^:qUa/T*E.]Nh4Vղd_mfN U[.]Wyzyн#<7`\-w%\U؍]W=6rB]!.X_B`\1lڼ łVٌ7ҵK'wJh*-yxnNtїcORV ;][˯,djiȨhFjeŴlL8Η?P١T*F' #͆T"|}Jaf\ F#>?O@&4i(>_f|3;3m [TIJ柠E'G4Ugܳ9cpuPvU gI.\L`:|:A'=9={ӳG7ޕԋPE9J"_n~e(N}f|jۆܼ<KBbS&?{L|/6 PNkVϿʳk<۵^h^^g?_șh4PӟޙA>=M7l?ĨCyI,]゚O۶O+cL||2:А`||dXl6puuS;rrSœZSlF.͛5S B6V@rE0@ Ja@/dkpLؕB!nBN;E/_PNfɄb!,H$H$ HEJwU}~z<"%Hp/Nqww( J ݭHpv~) s'ٙwfev(K`xa}5)Ffd2J\V=]]tTVF\^FDb$Vj*`׽=FʻG%wΎfŲoA|&&RprNѢT֦xBpd"=rݺta_mڼ LtX/_^Nݟ攅 /ӹ[/d2֮TI1Gf?uϡ߶6tВ-[2'/S؊n[dz_vpkNPfs 3eςqh-:JY& 2m5͌^ttEcwY\B]vK`?홗kc&z,r|LDV4j:D&?F -c3B&"#$gN3eݹ{n=c!i4ikf<'Opww\TeʔJuvϕpr#)θ'vF׫?0z-YwaΜ8Pg܄ٳȨHFSXF&a2șӍ?@uN-8|7o&8$T*ٲ9=' BTZ|f0 ,Y"s傐C 'U B )Zku7oiP01:L&[7 z 3 5H3ij$$$0){CZL&T*A J1l@r8;7U x3Oc$Zy cӬF!ecXxJH6FEGk^?w !>!J3+C6ԯWG/ 887`֬itVZøɛ7ǏCReH]O9G^}QTlٸ""afgMܰ=2JEVMչH}GNdfG`~>`Ohոn?^Vm  !adF?bX x%-4$sr,gE?bpr snkfmIԛ8u#©Q>c xQ03XteJb 9iն J~H[%F ΐ$ lޞez=k>ܽw"]&~~Oqd˞͚0vO,Pm`@LL =ڵ\rb2EOڶiZG`ד zJQŒ3ڵjf)hՃ6[0v$V@F sZ';;vl9G{ۄb4dqYJ%ϘFvq?e 9zǾDEEcgg+bSSҋ~L4PW~߸LƤ c_$~(VYq#PR'NҫOرe=Dg޴%k6c2RGJ]۷mHZa}E&Q zulbY"o@P0w7\a-TTZs:TPF̌5WYI]J}r#bur wTM)-bVC'=?I0# #,ZB.177ChF!u׬3ݷ?*Pc4/ꌇcOPD34ת~=3t=ȍ?? RVk+ШՌ1:Ӻ]g\WJ,ATt DFFEl\<(r\\9N }ƺ h޴1t܃hMH.1 (' ~ׅ TPeHA0|pqAŨQ !OwW\\ӿIhXGwt_U dAH2r0 @H@kK("ϟ]Vd2 I/_Yc&;w.ُF1oAڲg疏rSYa;mh21ɑ846k@mPYWKlfm)֗,Zz#WlhF>HV5 4UwrvtF^*B-Z[=5-<|ˬ7 G]/jpc_l>WM ӶZ/nB=Tę%\qv'"!!ǰ!6dqܙQ$Q)2TŲF(G!SXa0"Î^g6mJ@@ .TT˯sqʔ.][W޳/<\FƆlȕE)]$ EJi|ğ]{YU=o . Yl3Q`B9L$\9];/Ž e:iu:4qi?,/]K 0R#9ȝ;^(Qxbʴ^j5xxa ZŹ<\FtL v|3m"9sre>X|>Yex:L B\\NDDD`6[ܩ= fL2+++*Opqqf*Y"|.[?b0jP+}!666t{m]DD$;wܾ}WWWƍAiGɍ!!1n鮏 c@ bDغՖp!@ HOc@BH2> U@tT4]u>|DDx$ tkf}f3& фdJ66͛QO55* \SFARLdnh^m^{{;f|?"a@[7\/t1,YޤIx;jgΞCqx.r:~iJvɉKN@ʕU Ñ3[+0@޼8@Hq0ku8T(EcDfrvʮ{衽,a7lfغuNE>Eg,^5wa2puAn5:`@RRz% RDB-Vo]I^^ܻ3.jĠdeTT^tw`ꏿq̅eM, IDAT!}iX W1Bzc5Lnnl߲9#0h2l܏ԣpf aގnӶyLYjkBӧ5m޸i+'O< Y35S&^?w8SdqCr^X,0 ,F)#&IAzB[75 Tl*AIgN՛^K3"iF1d`0b4>$Pȱh QI`0jeXYiP?:d2J.w3/3*ͽlk]KuQ޼u&۠T*ٻs ^^{t:-]ㅛ g3if1QxMbԪV:%KG#;ELAa'^gf7jq߰cacc!u۰q #FՅGgzޞXϺ{0͸`Axd{z!9mj1e !Z .>뷱uA $FJŲ'O>ƒvgѪF$IhaO+ A1u<._}Ѧi}!v vfdb4`.?qp,Պ2ku˦lX G[;+?oRVYO]٣X&7oFVѰ~=9WOb9$$$bmm(Uo|-[бKO:LZ5m|޻$It`AOz{⌣#&{l 4йc;:oCPU*/cڤjI}  =[]m' al@Hفn@' YkWopܾGbc0 F2fִ0zF /"fsƹ)"0*rllQ(^L66'M5*'8ww{wzN>xMZbXؾe=%{-+?O6Xb#ШaD4*$wxv8%vHBBs));w!l;ИrpBm:r1*/ˑ{>xy7meȱ閡km`؉ΝG# 06؇bͅ S/aׁc2&j2rBLȋhKVuϡuj1_d2 HHͬy| BE4r9 +7Xl-?I^Ѩ1F/wc&ruvZ#['&HYǮ3[J{fF륗t?M-b Һ]g.\Lv:j$>"4Sm0E sk:@!SXa~4 *;ž=aDFE`4_s*_.A|ynT>zrsкes<$4J_.2x(lٲq yx >Jžp,AʄI8~Z-y$[rB!*iGN+5P,^_9w<",,ĄdCkLjh;NhL¸H21LX,4u ͫŊ0`P_ NJ0 iVnޢK1ZmNQq z=[6l)nnNTlZIG{j7;7Kco!yVGޡ)ge+ܽw96t 9C" Ulk̟#22 77W *HɒũYsi2m;t?~?プ暡#.] /_^Nݟ sb6m*9bݍIR34m%kٱH6J 0OW!`&Y`Ѫڸ#:5*)fu.^~%F 3 kߑ,]u* Kp}cb{{:n*ipV(Wе'=y}}LdrF4J9qz F3%gcrR1ldN?2 d2'>&Ӧ)Vԛt&.`Ǎ.G$ \90=hfb : kk6]ABK̜5 ZM"о ݺt|vÈQɞ=wl&?DX,tٗcOҺe3>%HnUuT*hؠʖKnӡsΜ=OQ"a4+K9kDpHZ#::H)#?~Kמ}x$ի2TP[__?e+UjUįR ~9,YeJ3ah hdӺU+Ͽ9sgϤfjO c@ b⥱C 7U x!qMO@<Q9u+>x1QQhdc i5pW, ZzCV7G$Ifd2vv6Fm^Z;˿V m,'(&jyR3_w5jVeT(_6ا{|LA^;lAwy=뽯'&-Ut:j݇_+k1at`A?%6Vl\g:EDD"Imw֭ <Ǎz/y_C}FCddz^L8Z-Mᱯ/'WniݾcL'66m[iώ޳c__#pssekX箽8y,À~}9p0yxP ԥ'ΜoL8.}Xtl?Lfr6664nԀoOAN c̸,Z<]9Xr1ʗKw,] шlQ,]G!QRt7U d!I($ al@HՁ@-U("dN{Sg~O`bdICdd2a6YB&drz=፦ƌB!5c$IXSb9U=U H@؈LѩD{li{?'kNǶ(STnfCI1'j=l2pS5lߏ]"~9v'Nq-F E5hִ1syΥK>.UWW^^ {>ӿL=?xylgѸp>lm3d;aŋ]frbE~(NSMٱ0W>ݥ-4bf@^D }Ks=y?>]QB@7pf8ΝK,ˑSm*"^N]O6џ8{~_LLl2IbȗiٸTp)sd`"4OX?ɚêf Z }9y#iyT:Nڷk͜YߧNsMN8ͭ;w "!!uj1~d;wٰq \z'O1[4j؀+cD'N#U*MH U{hڴjR?V@&غ$ckD 7U x!q4ՁB sq-N8˭[w #>>ZnfX,&F+V?Y@ddf%ȶfIwE.#R 99sҩK[֫e%alRj5߇Ƒe{ҨY+L&oXQԏkxӹdQ Q9 cl< ġ|&Yߟ~9q/44{s9|\%88Dm"* g.\ժдI#':?!#8zcFc@/?hy?}O>xlqsu:yqJdmfr"cn\$I*Vo' {-: hY'aEת*`$Ieڬy\NPЪI=|Y\ui?Yx$ jUc&+6ha/ C>\Љ3r؛i|y-N\fJ;Ys ,;xG1s)jtO{dXÁUP0|*o]K8jez{nr-(V4'D.Sܻ ?MRHh4l*vãǾDG I4mܐf}F3sbk̚{-#..Os*}Val޺޽ӺUTL= /Յ~NH^N^_MԲlɟin;|8lN oslظfMߩ!!٥ٔi3Xz2IFun4$JLt+Ŋy+#""0xW^o^ealY4$ !# p[7pin޸MpH( ISd& jN6k43T*A$$IJ1ݒ+eXYi1yurhls c pQoܤEH|-͕zx$AuNE.$c:[{ݯDS0vٗ58$VR);XիUr( AƘY|5:n4N&194o1[i.Jeٽc輙gL37 IJ QTinZtO7 ;+f "cŜ>90۷G [tz=N0eKR:=Xa/,Q{S+mv<%OHDP0aD>ZQtesHt_OB"l{YCrE<ȟ +0?oIdӘhpN? Ifڸ!x4ȇ1hH.]A7`kkC+V[Rg>=f<|BeΏb֗G})?_n߹K/" 0~9f-sM>ۧfテp1͛6^ߘbZ׫͒ ދe䘯]Vɑ`O<_7odDVZKXLD[A/M ="7 (EMX38….D|5FzF192&I\\.OaV(N^^JG[rkBSµ8mz/]M.T*N|yS7G(\Z.8g`)hl ބv뿻 eC>|w48mL=yxPDqʗ+Ck3[+Z#pq:wl_2hԴ11,|_[]]9vd_5~|*V,Ϯ.4$of$JKI@,L&r:3nȗ*^D fo}!LFVM־y~Ǣ&6`mfr9ʔ`ܐ/qtRZ,^g>g׍ [v+7hL5PS4CeQp`'CLRcdsǑL4'D$\=J{y=YӾʊիйc{WZJuϏ\quqm0vKBټa5+gmܺ}6[9k1a#Dz~f*}V־zvғP\6]ٳgΝٳp< ϳ(]{6i0G4iԀ?AR[A/ՖB@.B"MH@iJ("d\ΟGs11,kh5w11^7RF$d2Y$akkCϫ1dx,0 *P9g_Ch4ܻe\ʦۨSsjתF}`.\@V={6qLaEf3[uk+-` c@ "P1I[/B\mR O0 i#0h B ca6Yf3ǎiP0z>13+DzL&k޷QLj/^$ RU)R@%RNK&`  9ilt$ kk+jr}9Th߲1:~ќK}8&nL5BDGͧDl|۫lܿ:sHDe` 5ύ/HHBVEq7[*ˆ,> 1[_${o cFRRR&/Hg4mюkׯ3x`?FD%e' ;u̙shє-탔# Kck3d} ڢr 0 iGK5PmNf9SNGc2IrH)^j$$,7('9PZ%EbИ@ 1fЛURb<$IXYY1(J )دꚵ]je' we*mU'Jw#!!4׏?̠WlX9@X,\(U* kd52d2F^ٳNϓs%a{`Wg 9tdTukGU8Ky6aaj( ;e'|VM7l0o08~+L{>F6GGM?nf19UҰa=V-_,Nx2C.ӶY:r!<" s[~X[i؟ĶY~[R.Ý1R+|V6O.mylɴs4E6l\X,|7|^Oaj$ ٜ)m6ju Ff/"2@&L"Lg%|$fxp_\J6*$INC$s~r,u c@:/q!] ҿ;k؜ /2rP&MK@L Z8 y lb64ؘ(rqdA> cGt?V38~11&quqP!/ʔ.E ^G&8 rnݾCӧ$&$"ɰw'|/WZנFQ'O3{\~ݻ2etolg18s?x:xH֮HYqܸsfB.C_w9~[ȨխQGC&5[+rʔ,ʘ}pv.@$ "q]J͜8dfJ^';_vkOJ#xVgƜ9łwAO&0EM(.8VEiGNjh|7j FSO䒄ҹh4[8 cEbr9 {1q( !Hz9ƴs= F#ry3ɌL&Cѐ'OwQTo=37F: I/VQ@DDA, b FG@:&@H&3 (% !U*$I?ֱٳa΍+쯾%7706zSFg-=11Ѭ\[Īw5e#wDٙ~ ӅNeؑ\?~s9u7];Wod~X-^nx >nPPJQgdo3KVɛ|^^\Lz:'t82m<{lJމ$%w";kvD&TAk]<^.I^+aaT4sl,]Ď*اIkךWyHcwJ*~=i{b2NHڙnI]Egͤk,=&^b@ +%9Op-av$VVOl ""4}^/?V /q$YˍZ -JQII&ܴchS FK{[}bqZIxDǗjXFb40=2ڐB Z#A&S'ӊYV>iz–t '?enyU <22iВIݮeR~+C[kEB{xm$L0)[=6oeӦ-lٚLzFEX+:kEݓڥ3~~ lظ)))pDLL4={tc%Ctî)<Ӭ^e^>DLLtFg7ϽHbb+(l.b 7~axy.y5zїr%eg۔ ,DGE75|*_|;y,ZU]{}wH1^=)WJ=} ӤbNqNs2W!2虻6 k?ƋOVqiϼ2{зW76p ټ5/nMvBl4ٳ|>^js!e5Tݸ<*$W 05magL Ol_VTk\^6dU|_h&Bp6-+7_SVV0+G<_=a^oZu;nըBlOn=_bk "Ddb@p 'ƉM{htukRr(GZ3Kh1`UeAK|Ŷlyn m M]OeTUE:I2VVEiw{}i?Ol}^ڜzo̦ٚM[عk7){Zi "&%;'rސA ߏmmwdr\=i( mӚ>aS]mccmL4&Nh}s/[oG>gh&bI7KW_u%:c^V1W1[(uOn@ 8*Cb(|Y[ED˜_().6QÙZUUះqIjK3jQIEnQ+$$iN(S>ڹK'^g>8dBlO''d bi2  cP.`e6cfSf/f v޹uˆ[`=lK29o+QH~-LsS~bg.w+Nǟ;}@1 t M&PE3ܴ|*ξgҟ~T׵;];}8Luʶ$c>5mq6lmݛNAa!;b4 ]DЯoņ%[LVО ?cFӪUI_\RB֭c|0O2ds|(l.bYl%70/W IDAT8`5sVWEQU z=wDF^VTY8ʹ_ZU]9ݻc0B'k6;.7oq>4>Bm6]M':*ⴶPiʋq;v 8WX[@z$41tCHtkzX9y<ʻdFe.ҟᄍ޲7Ly{]AE@Ձ{NCA_,- }6Z9X%ڴ01:)۪$Q^aW˩rLM Ǐ[}QiҾ];{;9ON9s;ҷOo&^3R]F_5MrsBlҁ|rk&a!WG BlAa5=5@@4ٵ3f~NF~\.W:HCjuxQ?__Rh$_FV 1zJp3oV2EcFgF "##⫙g~(ֆ]?^AY{p-ѕ+:zU帅2{?m#.1?(gv&ڿ%_eU37'Q #pz]lKVG`$h҆Dtf]Xs1iM+ fW0gȒU$& ^U=vn;.vlj[ !K2:ƀޏ c 2KlMݓ[?I^7{VQF5ޗQ|-vEk[cN`8?~nhTTVa&V;vr`68NdYGdD %>a~ "x^֭ȼ ټy YF9zҿ_.<#$boD.i̕&0K.Q\֫'LbŊUrޗ?yፙNeEr yQTw>+PcwԾ>OONLXH !6!~VX iSN[}rwld*5%xNN7%dՑ Yi@xH0?3YFEF2 iGˎ] dG!c  ; 3'^r fWeK8[$K4vrxl^~EC-us~g~[+ɫt褈sD&ʯD15#!hT5XE}XV^FƠ7{.]̳cetڙnBRR7>|:nI]Y6b@ 4@)@꡿3",c!VV At3ذn6[ BQUxH?5JJ:Yr7)Zq;ȲlB?Hf{!O2`PU^FVEՅT8*m8=.܊EQZ'ߕ%Ac֛ 1i x/OYlݘWaʧ_yķ'dPJW-5זūg倢 :]ч@㈭lV?\ϞcriuݒtލҵKzdU̝-[tg#,,֭cOݰjWgr߽wsԻew3yq9~~,km<`ՌQU7gVo[xu}=o_quc}'~r1lܺ'!.ܟ['#"+(b/PX\ @p`w4 h:x(}'5%(^/¢btC$o!( ~&#ReR%cI;M,YLesew(6p;((3.hJsc,ϩ;TH:2\^?2Hɷx8>с U~K) ۄ1 h:YCh,X3}1;vRc!((:'>#qqоQSVV~zz L ׳?SBL)V@ hPʁ\\a*#[cPXM|b8@S0gy_Ex4^r`LwYE cݺ g^^Y%C4 ktZ˾ ,Y[HOϤՊl2"Zѣ{ /8f_|ӂE,YSU],ȲtLvxⱇq3O|-,W&˻o(l.bcƳv:c O=7cTUeʵևb['3 o7sW\͓'p8]KJ[/j/KW_aw8 g! \E2 d㬮ī(8\>57S+$IX#bbQu:$v' < !2={oQ=⥪(x׃vtp=h8 oVdx>$ ;aa<XdgMB7˲ٝCIe!~tZ-f7zxTj(mtZf3];|>+rsh*r՘ <,Q^^ePPPkS.V@ hKpl",A@ E1(>*@дص3Jfnw^WÉyXj-I Ir{*ra5@qf,޾ l(rKu3Jx`s gE/?PUK8tZgcQm:Ds2p0嘴&wPsHlgi2Ftahߛ=J)S)´QCZKkJ fFQIgW?=%iK E1q]ߗ&xO{ c()FUCۏy)?Q\S¹̺%o+2W`gRk1}^ζmȢQBBB#D1 c  X ZY7!Y'Ⱥ.%5WSP]HIM)S7[K\s89\N+-:_3{=k֢0[_eW8r z$;FC+ ௘ym5وunfg?u7& QCC0ܾ m0A6SmYf-$IaaVCAAsb'.<^xaZ\V 7`*ݒwI0Wr㍓x52:q[ﺍ}H ̛15և/)stϞÜt1m˘rx(Ig^'\y9L}EFǦ$m~ibsUkA.^T$UUS\VV+tbrĹG-d4`3o!0 ŽRT`u LaY!{#dnGR^Wۿu12aq!5l,VTTZ-LD:51143ͳYk>`þMX~ķexȒLn xʭv|Cau0Nj$ oU5^CıEOOOp؈ D&ihFtA#0FGajC[ё/UZZ'y ӉϏ09o .RZe{ $gyiyO#xeElqX6lĴwCAS3FQU/_ËoV)\lUU5+־je8Ǝ&?(.-w>fuΓƍMǢizqleW!{\8\.kTXu$%IBѢi%ރΣmb1s[Vko ;.n'&7PzU6.׉=H( z618q zhUxcn kS yt;Azzt'd#kh:4:=ZVVo`2cETDƶCo2Cߵbպmfݦ-9c&}0[,YN|J\Nh"nFvKy-#$h* է)=HC]7N6FCÏ+^-a[Nh3FC. C!APYi%0 jܵḷٚwCf{muRϚ OOVyr* P [vg/BlAa5IDE 8a{/t**;NR,Kx.j$!ި,vUZJK:rTv4p;i42fHqUe""fX.va[^Ʒ;Nޙ,H[EǤopcfg@awQUޏAӻggoݛK: ^5Ykȱ桨^B! QQꈩsvȞ4BL-*̡Gɣxxk;T 1pW뼿t , 5pmm6kz"-,N_Jmhd-Zns6,s9~:7n~ v:0jSS}bZ]#+~z~=)tH^,X Ihe-~1}H9(܆SyDFF[wV`jWSOU5{)nqr,G\ɖ-=MֱG;CQ]v)iU,=y{m`YŤa64NTQ-^h5;Rg/,wI0{]N@xddeWX*:Bk^uWׯ6bw{Ł CЭs<>#VAx2xq 9[o}Ï?,v⏫+ƌgvMO~w^tcuMW򰻽m`,]l/*`n>6'k5s݅ȫ3FCϤD^~14| _~  iqcyeɔp;{|?g.._{ws/byNΗˮݻ{d=[)ʀl  KF 8;b@/Vs1>r@p8;oϞԽ8fVj1Zezv{从)fqZ~*/RT슊ëQZQ—-VNJFF/KhKQut(ʑ"FZ#lP*5 ͑7-t:hۭ[벯4R#K2^ՋIk_~,IIM eJ`` LPs(c:&ܯt.|ljV"KF h͡)etLҸa=Z6vmZvdYrbbiaj-H%4;i<2c(bۗ/?Qk)ICc<Vf30ve¨52(v I]}]Uo՟}ȫ\|< eI T ̰Q # i:õϒ Ϛǐ6zntF6z0_dUDB̡\e yU3~Aw}ϽHΝXc}4f/>>`Wqtl{ҩWQ +^E6]B1!{g,]7lVkMlMƁp8X UL qtJ'!>s x%LFuϻSٙq.eR=1Ͼ* AZi z<)!JxhikO~ХM0\׽3QN߄0{v~n#m۬9i|h )!u**9ҟ1''9WPLǃF!u+"gR;o3FCsD0 ݩvn'a!!|}?)v(ڄ2Ul ,[B@P~PTTYg霘SIVѧu\W3g'WSPXn盕Y!Va~؝^CͼvKrsz+{G?v=U,=vȰPڶh0QTyGQqw BwQAVE@P+ D_{(H@zq!)jۛw#n7eY&+7 ECqhۑΖczPN1 thw!:Yϲ`b:ymCw'i/;\}ϿdSOx|λONz/>kׅ::::e{$9pѩVAakw="::/>cGS]x*"^WB*FI|(ʩ w=kXEmָq~ *d5 \U-,@Ew^4mTdy?J=;N9DZ#r:w|6n$sh,s}8'!&UoA<wS7&Tⳏ6~B'.::l8$zb)~l|;5«{VBDj5*8p}v'ӻN}5ZsK_ zc !4Kuj ]s0ޔt'Z nnM¯nq=D>gUlܴ]IHH-o.>o5s߃T\ܶSAᰳd\/OTQ]n;xF TXho+?3>@4,3#O2:yز}"wD#[`,nԟ2z=DE2vڵmYt3{o|x}:ѦE3?6m֧Ovj*V㜄Y.;er*ѬzyP/4<9>{iJVzz Fƍxj֭M d^r }tlV㹺;`ʊoS>2\ !c3KLt [u5y覊ᙪ(ټx:5Qrl!ˇU}]b1F yPea_o~DQxϾipzf}7lD$^zcy77ߦi,_.l)x, X lsONC蜅t'u [\^N&7mVeۃ(TA0 &|>"\EQPUN(@Q:Fyh~ d|GIW$DH`Q:ˇ,biIj;!K Hj"Q؛&vi'ڻ WuakI\Ϊ#Wziׄ*Ys5$f"ߛG:;ԉ͍:a A y.t=E?dCiߊ=YI)9\B͡].7gwudiהa Ν, lq?fé *#.DT>9nՑVˆ5dn +{0 I^}q:]|t.Sywk]9?s-Cx _aS-g^ԏn^\,|~ڻ,[M&#?HtQΉg9ws)p: 7wU܃NxX()i:թEfM8x!!DE~_繼xj,X3n0굺n-U,NZ$;|L:|3ŗYr5 h:4TE!;3Ĝhi&L9M+L~kd"rMX:L׼?ykv0L"~] z]SBOl jℭG2\h=vkXq3I9XrEDE#~G4bŁ\(جs Geg_䍷EQ׫Fs̝h4Њ?/<73牏?c_.l)h@A:פ8zxtt*UG,;n&(jQѹ|"*AsFc˹R*y^YFVR9^C `Db-f⬦~GG . `7bmU@b'aA 9khQ<9y֒eg ӝEZJ5c6X+~",N<=YIHD=yhk64kBd>~hߚUZ5krgb{ݛKZZb0Rj\S۬I^mV! wNKꘋiSRR֣7k~o̸stTyG cD8 |bW|8w#f\Ie";]E"W+J8%U3B[7۱3^}BEvꓙ3Q:˗.d2]|+6t^YjO{H:խӿ^B|5v%/>f6~M?k,^+>6mz)fַ?E$)B$<3q7=|ljתa6fĠLb7.|4Ukı4t4 oM$?;񕈯Τ`pͭиݙۗxl@Zh,<˄1+N~SgHxD$㹽Ht:a(I4mڄqҦE2U7;Y1;H ֏p v̄X@NNRx IVIU »}2>ހ 2cUWo,ǣoEϛ^EjZ借u-`%Z,4kXPpar(DŽ8:WOLQ<:x CᤥʘF0f.߲`1l6~kUzA׫ [uttt 8lVq=<::]تsҝXZ{zTtt.G0c;ޕD Pq']~?X E7x%?i3>Y9[.&j5::4s0+dxeYQ.XB5VLxՀ4tinZ*63S V8"11!ڳ[ú$;3юh!ݙ կؔW; smvoW;k7@zs[PNscFOxrI)L!vNn /mԏ]M222{/rrs7ͧ=o#̚ҵKWr1D.>p?LL›\P!4KBeB[4&6X_kn-x?F oSӤI#.Yp=YEuz vaʤ `_xP5 ģ-]Dr ;e>Z|,"<;z}wpB4n6^ }nzc1 {uh)RKA@4L&xs3{bS|f/Xag|շhgD"Kr7ٵg/Ǎaa4=WQU5Rr,rXyt mc)< Fz˲?b&2OfAakd9o*%(Ҹq#>kZ7/sNY.eټ? IYdyO̭H@dJVՌƱĆ[lk4 |/l Vߚ'M8˰ ۾:vj[4<EGQVuٕɗ4A EsoK1QWj d5x<t|;H(­]݋Gٸi3 8Q#BUUяGy).;(g|@6/uaNyHv-ŭizhtt8H蜝t']!@Ǭ_`b *[i\(b2X̸\"jEلhr(YC#XXdTo + ~(ו IDAT>wmbV`z!y|:Ho*8of@U2ZPi}|4ҡacUUtm+ߡW+I=pl6lci3oX lVk܅KϫMf|<$IpRrrjըVrƻIFQ װE3`?Jё4S3;B{p; ΋x>tlٺ H*3dgf"$[L-M} *EEҏ?ZGyYsڏ;wߩ6w\_B_b7aS>U- HR3+|)=i$}$b3 D؍^DC  j|> דۭ~nY`Y}YH UgV!X5tB)cb,&,5>E%'/WU4@$(j 71gHmq J(R\~@h[9#BrO֒hǛ>%ӕI9_$\MZ7s<;2v}F'ѹSGLAa!7vNzF&o͘F>Nd {t0/Le9}RlPZNyk6~+$٨^/݆9a}SGLq==I{g !l}b$fΝoۯf]|gϙLjQU|vV&4YQ0Qé_YƷAOv|v%cJ NM.z!J:5[Ou=^?nSM:&rs'Lb AakTtVM [Oj֬qù}|~nm٫Ano8v(ialfz6[*֩@UN?jZq1Q~'z_߭( DMԊQ'F|AEWPHFv.ހOɕ[ h:(ԫSמfr q:ڽcTǵ.fϙGݺuѰAKok3ޢn:̟=VlF"<FoPVBrEBv/DE`Sں8IK^j:~M^=.[U?,c4x;׷Gk>K~/L֦E&JDXhؕĔo_|UF?իWe+Y&z$?47Y|<=#!CcԨQ_ڔ:WλM`$?pg&?ɀ_PZUGGGB Gŭ8IzhttUG ; 4zTtt.Yټ$sHEn(bX̸~?ZEلѥؙ=`E,t_oV;MZ YE a3X$wSq%˨Eg,gK$A b%hj$6X]L$Q^m&=qq.Zid]Php5t+_-ac&U{K-gĨAӘ繭׭:vFJJ*M{y<^:vG xR嗹p)G?KJ4|rw=d/]3q/lh`Ѹ>ڢQ=0K,~̘>;{o+UKO?q[05T$NjTr0WC"ޟ(F@јPMӈѧ}u2r Y0~e e#Gk/-ҦZ8f RnLPy$$S6rkCEKhW1iP=''=×_,+&v;!m۶f¸1TR6ڿY_|S(*zނiYtBCCy\뇾'{.Km8x#ǰqfڶiͧ_j工[x\ngD&<1a8Nׅ::::l`Aq΢?;taiHw(=*::~/%;;j\nF݊('i FV(IDC% s ;cqwVI$ QfR.edd:tcRKS٬,:wANN.3^=K$97~ ^z@n>9"<)ȅ`bR9{:4mHU-9퓅.n,޷êU1rP<;g|Fzh~_\ [w :Xo*831 wg/ӧ̖sn"|~y`NL5Uoܺ|FJZ"ժTfè[^9p_/T8x>5(:[W_ NEUOL~VF MUEN{VoJ|fc0/ZYTUUf E;HAGh'0HY(jsg' w.|(y%>ʒ)?7.jԬjEL؅$gظ7U;I:V،\ N-*Ӷ^tQ+ y8ԬZZˏT/ 9͹бN$jF`5H\eYHJəYH )ݻ{`\_HdDW_Ն6[Qjaaeݻg_V^dbR5 ]vb쨑ձ3츲ץL|i 4p?y<ny;bc:䑋2ϱiF?6G^PZUGGGm]\w9HCSх::#IMhĀڰBUUt݈֭뭸O>?ح`Zn>$IXB;y"B=F{{UHqZGհzm&=9F^>~[HxXX[oAbn&?5Æ_gǮ$?7 NjAV̗{sI*~q#hޤA/k'xƄ$QNM5U*S$*2Ȉp :q%$ȊBB|e^}~2v ۃ)JpzR?zcZmb6QV5" Bq{䋡ሪdOYDQj2¬o~dρ'z;N|B^>94$*?ʂ:JJNEIa>oNTEbcç^Yu|qm ח;zެjwxҩc^.#Gֻ,^G;T#mvK}߻p/y{~<m@A`ӶM .ÝϚ>tPĵgCTXŭâSх::'pp3YȎ퉼9}-!h8bwOQ1MXdY>[( L&l6k1ۃ;ѩ. 0uӘhQa9.h5KAAkpQ*UHHekvoS#$K7Պb.{^v [#q[ڣkۣSI)L?h*6JJ3Ͽć~B&/5~?:uȑd^=ՙemf3s~*όK8wX+߸ pه/-Bb׫ExjzF cRڽ)))HD٧^pve揃PT c]x\ס <ǃwy XbY"e}rؑȤ'`}Њ4.7I"=3XSq:eV7?*vQ S vW[N)2Xv#ujVUF@}Ҍ'//ߏhd>14 L=ujMvv6nYOO}zsӶAD #5W!;'Khg]*Br-CX,[(1S\ELFnXƭ;EoӍKgjUyᩱ\} [\kdZ֎6UhR#I@j!*`=6&f$*BdHPL%5ǃ$ Ũލ'x6ىv0qctnYJV$"!+*^ e12󼘌"Q6U cJ4q\I=;ҙw5EmZ`1zESCB[V&j,U~ ׃jHj!a?c?}2Y9y:D߂?rõm`y<#//?`;oթ/ wo_xu 8l"444"y)_-YFΝ4_b{{U2dL~j%]تS!ں~O.l)"I5.=@0>9?ϧG"jp;MPv{IΩElV Et\xŰ`Ys?I*(b%BF*[X."F@ :_Q0JOE^I0$F#6ɀ(j8BC.zV.l==roQ4[FS+w╽ćc nəRë8{SZ>d/Un$eأ2iBg' [KO~UTx}~<1?]X< (biҨc=ѣN;q%I۲U-`2Φ&6 ~q6+q}xlPƲ+hۦ5}= Z.}Xr5}{7_(i!V\G/(-]تS; n'(t [N VHwR =2::YVx٩lܰI< +(^4 IZLFE:z>ѵ_`*VpH֦Qrj_9Q|(b66 \S52΀L@UQ`͒H@XnFnV3VAU"cQh0* hնGE0HBu Ѕ'|q&BLJWL$0E@ ҬRSn6x4MjX|yg4"#|G4nD= ƛ*l3vժUe/ akyRq;vMNEq/WDE`W7ڲIߗɟ+Wѥ<9a?wfEDJIP4a it IDATVw.:x܅bӱ -/d1DGEDFDzsSغuƏezCYI/FNn>$ѫ['F ~\]Ú [xqj n޸̔󇹋dQ*4W[:ŨϳdSGEE#qv/ۋ"hum[b21oUw+ay {^|qA I( ԮUǏ,S/dy~(39"nuh^+~_@AV444 bd8|A;@F52ٝǁ4'.?m$0Q'>TvV.h= Eٵ~5߽YkR6b2.;{SWj! 2s ȁ# bQ)6PǙ_el9Ln@9 PV =a!z@NǟKS$**-ӷwOt*qn|>-[ݹ~&nډ trF?>Q1lH_NsrxfS<пEI}Xz Ѕ:::::%u'ĭG-taOX @GFG+qO{cł͊FiՅ,+dnzz%=*aJlr%D'*5hNq!@9i IL&-&E9=jUUMC,¥>"3[-1XBCy< `4XN8hE4t H&3T>'uaIs xQCoGYst- R EFɄQ4b5Zhۄ6UZp ?7u|+սys߃t9}][#~E4ǟ-u$/Fe$[ꄵmAb(Zݓ*8olKہ(Dۢ8\$`0`5ZQ5#/~۱yVMYhxE 9H~[2rYW[(x|`Vp<̤f(ҵ#?\cL{9VqXhCGbC?y,#Ha2i֨>c>DutJ,w,O!栜ncvnѴ̓_M搵}%~WZ5Q4p>h@ja5)4A,XcBBdzؕxL'LFL&Se[Ōdj= v c6hټ ڶ$&*R9>$f/9ݭi祇h9Yo':iF6]or탷:^&=a;I"%#EQ0 (VP4z 3\#]7%WY0H7gЃ7f}%LAjUpn9}?3+cƓӧҨaruC>KhܨslEGL}5bcZ5ᢤ{ 0AiV+cn9أEG [uhҝW.@#GFGW?_@ENvZ$ ݊`@4N7,jK"p|!ℰU,"4hGU8 DLv0Hew &ְPL!V d(GSO^DLf3ÉFA w[iֲɄd"߻-Xő]تS1iϊC+ؓ EQ54*UEb3ڱ,HM7敚a5+1qM=4֗_δޠux^U9_$&2j\O|o3f`ԨQda믿#:*\֑ngÆM5]{u>e79(t؞'G)rh {pV9~zYr|+bUxϘ˲ci"4Q|ι^8hݬ._,h٢)gǃ HX48yp,hzPQ:.*YGuVMCS\J>4URl4Mչ`q? +X#ETɈd ?/UQ0J""v Q0$N'yyx|^YVB+!I" "JB(d';@P~u@a"~YϋI:e|!A`S[^kvi@JKEQBCT( CQd4h)Z u8ΘfC뎭gl2q1vCz0^NlNƍ;gfeѫ]deeޭk63ppTUwޠה>1azGsҽX~#Çb/(-]تsől!(nBPܺENV+t'k[οȫ/?{*8nl6aO~[Eḃn-p=ή0 94jNϧ{dXd"hDJ4r1̈́Fcv84-Y^bgA0%E۵m фd!*URʟWr(0gyf4ԜCy8{tgكA4PGfT = =4::.U%Y,j }ttErrry$%E yRXBQ"V[)4Ռo"GNj;*A 5j0 W?"bwE ?h$r%!vI U2r:Oz X-M$0pA T~ĭ5DM3w硕d3Q hE'wUk~wO/{4Q (()ED,ŎXPk&UE*`齄{N?gw@ %}}ٝ/;3?N'P4HknҎZejwI<Ы xxB[|y w~ ,vBZ|qG“D 7$ SLen+dFD5ZUlQ7g3FFŊyBQ/7?-[##._Ldd5yd`|eRIHLw&sp<$qs˦d[N9+?XRJА u@2c#Mc3Xv=.ɍ7hUFDj7. >*4~bhؾ@z1~C“yA{^GӉAhH0׹~,%tNEllssp,Aa-uδ7ԪFLd~(l8Lwy[\%%\>DTTmwY-&WHxhzٵN͹=b^tHDTdϏBuKm;srr`!iiZl~:|$?.Yݝ;"t:y$&%1Alqc_^^AAow}yṧyd uIQ_`K\a*Up=֛2IL%99nz}n4pVEQp:(RHՊ,=5A@:`Yv h$c> QQ|[bc)u'5g]Ĭo|!l=~?kg%*=#xS3 zlӽ3A ϾMN%͕Ipr΂'~ƘU?Y~E^|%}0V.[LTԵ)l{k2~)$&ƻS{0$ѪY#Ǝ~\={Oc}$IX-fn#+z)40fa4r-گa!БM"B1m[݈Nwg$q']ԼEDȒD eQ%`12soQU@ jeON `^4q|3g?Ah0РN BK|\ S7P/:[˜qExh05*WnӢy3nkߎwN*/k|8&MrJ\@}1]ۛ3s:A8e ҡӽMH_o unN [%?rk0@puVuGjGhmt Ws`MO'ʲn-XXxx<ނ7ȏ*c6DQSU I `İVp 項MxF D,b~<2Q"x|xBzdr9<(a0AAv76ozJR d`F*ہ mIG ӕIZz zs-ќo~ X,:]~~]>ȖҹL}u1 ΂ELb/o1x0lǾGΦm(N`lݵjzΗA´oq? LhF U0݉?qM4fhWbأe&,_;FiCH`{c~$I(@$wq\L|&7nI1Ofx.KDg c-;N~mtt;.NpA^<``V1פ :/gL}QI?e=HDӆ7zFD40oX|mjˣ$\.OAtS`Q`M/ze1M83sN&3ԓZԣ]u:kTeЁE\eCPr ?+c ad7}%ǓM]3_GqM5[3Y?V\͞(ߜo,Ϝs9ufqgۋ]'fwY[0FS;rH<sڈ=z` ׇIW:6a_obOhִ ]범1~{|6m̲%D;42nğEPzjޛz=SA6|Z1DaZGW3̙-{ 6`/ewˆO1o"ۅ7Et,~0B$7˸ѣ0|N.7LU?hӲ)>6DSw& Ppns#iKS]JmGq41ߏN1 46˥ˡpy<حVVAbJ*ٸ<^FEUP9sd'(uJ?~ZȊy3(:YՊX6МNlp0Ō.:bITqb3oLSU;iȲDTD8k8wVf6܃`Xʞ\Ktok{Zz:fe 76kwS|h:;;a>lO'pzxxqtp(/ "om]wOVv6w~+V&&:E -r{iBCC~\^&Z!l)$/jth; ,C[ )n$_h %1aD(%Nj`0`p Uu:6@z|TdtW4 f5r=2OLE^=G1/t$IDEE2>DEEOobWVq6WUPB>+IwS!<]ju n$;R E .hïHM$PXh0slsҲ|sWX姥s}=HLJɑ#xgL[{e5<4hvPڄ[[a@<&}¸ߥ~z^XKWJ KWN#F>y Oh٫׬c,[]BϽ7̢c;S-gf1lv }ϕrL+aiT?>2aaM[:]ﺝn G7;`8`<KO>B& .Kiv:<ssAҳ :L5 _: IDAT>Bv ThFZFnEQ (n>H8Y+8pߩs7gVʔ*^_…ơ 3>z]UY+ԐШQ9$HD a=}MHHNaρ8^ zA$b#7z+n퐗;}w?HzZ:]gN.2f} zG=Lʕy)S&KtTT#,YzuЪes_HDx8N|gMrJ /> CbI/3v;ԪY_t~#lu a@ vR9E m0@pDB*HqPhbUúԯ,VӅnN[%F#3DEr=xyy4tŌ$=E& G13\ %r,=Id-tىC%M/5#tnA|y:LUZӦc÷JgL[a}{v =ض(m֌L6;jդVO~cSV ~YX<Ԡ65ǽx,q)z>޿eY3} ~\D I_{1/if;Ctl~0[w [a觰ͥ12s ecxǨUǤҸ8x8ZhHݺto{DVۙ0s3j:2Aԯ[󲖽8{Is`yNa4u4e {(B_#ǒ\a_ :MKdesADF#%thz:UMpCȲh VY,)w@FV; %Ij1SZe"BF}VUNo`18`I5Uf1׽=&<)MӘ{t9>?-_App0U*Wb-jl}x =YYt֕/?Fl*niӚ9YxW9{.__S!liH'_Ժ ȭ,G[@k@P5c.,&/Qjۘ@%v[5Mp8J$hgrz}gFmJT p I^f`63dT%U{EAe"PiY%@(Qh"#=,c6џrtd|OӖ30T[ hwIC9۪vZ_;[gPtՙS35knɔΚTa;ޢOE{~u= ,vO [R7K_Rf&ӹ^WL´oAreUЫ@V^ǠAxg[Wu?CCfTTyLESDZJ#5l\2r 4mX<kL&!1fe`~OG\ b=D.wU+1TXXro+I<]<&&sX/,DESfM{8l*Bls9p\GC3\C8mOwG\ʇ`(9Ikv܎Ltc#WkcAQ5e)"C6Ԉ5.CӜ2_/f+YH@ A0鸱 3ǹ۷ 0yyy xh7l #嗞;\O>#Ԩ^_}&1g|^yu !h. 1cIwA~#}{`1  dpR"r@peB*(ͤ8Бexiz b wiXJ$flf4@($|j p*/QRd9U UU9Qk'˄t02PN$a41"tԭWv{0:D%HHVAglIڊ,hS5-76%nf5Cߨ/VùR޴_(NƼJ5m {>X$M~F}d(zgy牉b :3G?mX*GdAdX*]٨uƍ3aʕ ˯#XV|?ъK2&ʸߥ~zZ(gf1l޶뤰uI$rF>W6FGF0~Ks>L>ZeYfXﮂq*8 HJI+ΘvVH33C$3viN}0i(,KHDU.qy8lZ7iPE8r,G4VnO '< ;dħ7Сi9ak#v6hMFt7-lm_NG!@jU{NܞS,ڗڋAl3b0蹳]}aa >(?ЛԴ4&6ݻu-t3={bTsyrػo?QԴ4Iɼ=s ^r8.a/:O!lYa+wc,C[m@]&",TU啗m` ( N`{n׋*yp^jQn7LXB1*>#jshz7 *\@U8$$z4 jxrsN&$X̜Xs$ec ujb0#-$l=]Ç1vkŮꏫ86}5)l]R~/҆b.Y=IDx8kV-%"x/=c璻y;ܼF'ںiy󈴕m|O7{<=se*aZYh.ժU&/+IjUX*r3xklٱIhڰcG?u]nß|W:Nʃ];ѣ]g_y/#-#lb^t# ;p`l拏:WT(*}˶uK E]nmڊ$I^$Z42Fޱ A6Ŝ~fN.&(3|+,ߑ30f@ZՉpd)ص 蜕lurɏ)lNeŞΫcUOtٲsqa+جTBhp.MaǞ/:,Up`1yގ<Ի09O~N7ʗ/Naoz#>|2hH>YzɻƊpp]񤉴E)@ 8EIf.B*(8@@P՗CWPx%|(RF_ֳ.ƝMjYf{y:zKD8$|h Au^0FךFt.{2|6+ܼBQZO]Qu|AHdgJ+dfSHa!<г5kU?G$aAg28VAI'Ǔ IsS>D'_܂dƖxsi[ZUhQt}? q|>ڶH|Q&={& .Yűis1W(Ka9s)$&%3xfWeW2 e:т8@qVHY G+~6ΡxW}vFDwG.l߾/>dž_nPf3ͥzjd2o"F=eXLƼ vE$5qGa0诋=}VHLhZt-<6o1{Oc "ʒDh{-5% Sy)8|UU$9& ^g$o^Ac1r7:mqvh{2a4S㲵q(ULSIi9tGO\!3|87T QmBvffy`\TM#%lOʻ7)OhK7fd@>I ~ #JRj:Bd2zvʢ>n康E|Q x2El/ )9Ɉ6yqTp<+|=c69Z3w>/:1,a!aaV@ 4E5ME aT@8A%{3aDKni8Z&MjEѧf? >D ?)FDAOp1UEru2N/@KlʨߏD^12z*U  hJF`v;Y9(D$dɀᔉ}Dvgh%(ʕL_YgVdޥlIF%.| XshAF;=?H{V^CSU>AH~ڶH\&.愰u!Fg^&a\b3i5[|%1ĤdP&^:W+V1t W#ew=HZ-6$m߁}/3t+mhRfkOY|%xА/іtƼ ;G$7iO]_ޙ+m@QkwmQ< ?g ˲LjTXFSyշ9WDyn`jV|u_\+evb$jAhd|=#+{ @INOuY.&L6+3G : F# L]t*DCîev+cq sqg]v&[\y?k@JT(~w?Djz&@AO(jVX$'X&,1rk$I"*2O=B{{|i~q)˗cW_Pj"i^xU} 5nɥAzoWh>&JF Y|%{sqkۛ=s%S[@P) N ["?rk0@pEB*(8 xh T*A_62/H, VU0٬"xFy$PU-MV,WώnE%#{($dI¢e6`,ns[KףrzPdUƛ$I$AG:*84j.JmBp:xO$a41r^am$KCKB J:$n׸_Q5*UgMױ8ysʷ vtse_>4:./~g̦q,]XڶCq}uدH{/gؐ0մ֐巘FSw[%ܶmOz۶Ӫe y{ ֹu8Uغrb.wQM h,Stg:GshV wָlM[nȑxƏ{BEc0nԾ6g7l h4hk⑔ƛ~$1vS׉@T1ge%dI7r_;zl޺г7lc!: S ;èWƳg{ёNGFlT$1?<*%=c6eӕw#T,C.[[3GSp-'/BwĦuٲ~ μlV 5T$,$FI,($e;؛ǖ\2K֕RsivիTOq==tl.3i_dIzLxBk[] O><ƨ'GIc.2tQO/8p14lXy&/$w'}B Xxpv/ З7^}IV@  "lf.W[ ɏz+P [0kNGtʦQtnE!'ǧA-82N~I)_J~V P?*Ѧ$a2yŭ^># dLzO O&z$cP8 LBa JD 3O!%VA%˝ł]HuQ+&&ma5nṱUn妊;y.!X7D;g]]b<Flq˭wA^{%puu?3dC7alM[/f [')QѠ= ?JJ|D4r [%og?᯸S4.ۈN52\.7nHbb{ϿO,7 /w{̯Ef-$&ƻS{0$ƌuk~Z_$p|$I >)]t'4$HDj\0&} ,3#hwSWĿVP6HjF I)9\@NlTʄIIc8F#!gfe ֻmUU U:I8ix?Itc- 1 l̆ I9r1;Y(u:z>wk2$$Y*p4>7)\2#T"n(F5%rh"^^G٨HjVtD%+'{ QepӺyx~uo~f4nԐEgc2;1)a uj ] 1M`y{ܛ/:Ӿ-7ļ9'-̙;wn4lP)@ 8O?9.l%_f. B*(U8@@Pzl_#Ngܼiv{xhN'cZu O]Jʵϯ{dzxUAOPp0<^TIKY¤12f,I_p*M (*^uI": |Bl 5 0 Ix .Ed&77M=Y7Y'c ~G0AJXa E6J#{~dwMWbv,`_~LzѶ(ZWlEjE}{1;vQ>+V]gĬ~n3;wËޣ/Va|b盾~6St$u-njcW3 bҫW+Vfrbbb/Y޿χ~,@؊tmx_x2#3;:t!-='M./De̝I]}K|Q:Ӎ<ϧNۋLf8$IMx'keM.B;Ы"Bf-dU8]s$1|P/ Q9 ‘cIgA6+Qe‰(4;;hRXRq8]i76p^.''.=>n>m"?w=6#c6!j)Ex<^ƾ9IGh\ .|*lī`6d:pp ^:ѻxs,jP4ۧ8 ^LG@Q.IX&T rnx;OzVhd^jXEO IDAT$PH2><"6۬v7uf5}6VZCUT^}Q$ͯ70ggb;N~YL[ڜ}|.kѣ;M|G8i)E[@p㸨|a?$A[v+p( mA gSYrTLǒ *[% %_;TWm9r|a/<20TG/Iu2v`+PHw ĭzYGHxwu:.^$}%CQU*׮`75X4WBf2tV .%p=Ib67lb]wк͙J$ ͎Z2&Gj*m1\vf(B-hS馳Or$lrRݩԈA6]#; J;+ǞbhѼ :t|7ӣgG߳~Z}{1eb盱z=Sg`䷐XlLK>1^tc7Z]~]Ah4TvMq0} TMvD-$a͔/SzhG=v,NwGNn.OwvE-=I75lpM/9.Rh=-KJ 9p$ѦESƼuoDx;붛yq2gR<oXjOy]KJZr/F^EXtqXY94z=vFE9P1u4HB=92"<4{U8Zl{ Ƭi{:1%]XW>x>tL=cD،TRpAFIj YU +z:|$yIv~rL o]fdr .׋bZ ViOZH-+?.xXP (*AW`+#ǧ(ǡ!a G/P<: }8GD*$|>TU-Zb,.pz/m!CeԭpRjB/&~U%PPYh43FOFS~{NOM@׳Qg2a AbL[!l0fm8*Vw^E"{:SIuQf5$e%#kuYwѮٗH[$G/MOϠk$$=t֓g#Cx7p0?,^Jߧoڍ5pNd(3ofΦ]ۛX,Vv>~fϘ~Iw|TejP?}$4Є۫_|Tronr*o<ث?hڤ5ٿ|>։#G7u#:RLBb23@zs˦-l=> ~[vmZ27g;9Z<ܷ{H؅p1YzV6ǒSs8hN'c1 &L8A踣9NiתHBEMCenY sjUJ&7 =Nr!lKˊ 0H)c˘6k]d QGafl=NЎ ZYy^~ԫtjehry}>v?LFv TPǎ(:x5!/]O<,WBQBn<4r/Ρ8r(?iŤ7lёPUoJ{/O%?-QcY|T8j)E[@pIqv  J)݀@=."\l޴,K9@Qt:v NEQt#*A V\ƹ`UˏfP!d"26[ ĮbԟUZ$o G,;^O9CO{XN0CW J"e͡ue=jtvZL#pX V :yItF*W:`7| K_ss6,߼X9{.1P̝IJϫ=}?Ċ߿_Cev߽LrjwLF@"3c.Ѯ]պ$%%ӱsW_n&6(AM/ {b3^\d;wѽG_3-n]t{0gW=;g>^<)K3Bz1$I$$&OH,t ׭YV 8~>CUՂkwz/=Y"y>V AJnS#-#4N>FUYl6BTpRIHNӮU3R32s )6+U*%48M!4:PDm=?3x \{ZU)e^#"k1M58(ML&>1MՈ*CjϘs,9qGQH8yowtOزujָHwǟ|?6,KTX:ɐ~okyڬ̞1zuKNIa8NZjK/Unu+fe7x l~L}jEԤZ鏗c>3R.}.VV cڟiff~yGgzo"xYsNfZG&}>4_Co :n;ćߡ{4F3ؠ5O;xT #(7m^}iܨ߮{~f}3 k/%;ǿngQBXMl˅g3qźB+aHҪYw ğ'IM(Vf5{9lVk>G|jKjF9yx}>JW%TUCUU6+-4 ;']v{N&&2 Bb^jSɱn>1oicᒕ|1c>niDUF}t9v8#*":իqi8]n#+'JbN>VV"6Uײo~6{ܿ7etFkd%l6֭…{?NNFAN3~KߘǟNAQ}Hu^*H$$r/˭y2,^JURI tn)DRJ˳1bܱ;?h9a; `0m6;^EQ0Ldڅil'מ9~hRrbC0\̹WNnjrzpjw__6O1Q{Ha![{3z}zu/ֲ[?i{-j?̢E;hoy~Eu.kvMr1sg| ؙ_~O>(>ʨk['}}w7GEl))q?GR )W#!6&ꊫ3;͋ƝuA߷;\ddecw8 f8r4uW''7=g;:j1SF5"J6B[!-W}UtL X`+٘#.cXw>A^n,JAnyu>[w%3; ֩p?}>?ilٹ>#]r0L6=֢?;xKK[e̯ػo?;u}ϧd #aHII%%%Áh >.&M=iKVO|oq}9b8&2RlH$I1pV`ClRΓH.TJ Rk 5P0H$ F=Ojxp8\Jpgs:]\nt85L:mC/q=%wBVR\,b* n˯'&Рo=]kx].\y6 [^<bTj4-ϼA )%!͌M@(x='O]g00dоcb2SY+o6fo^W~qd0/ЁWweٞM)7>]hVŬ@E\O|Θ'P!>~E|\yi¤0m1K}w/}m-r9}>H7^%-c-8|We|.&M9mdCү(BЪԌqQ]jeY$&V۳g/m;vp0}'vͥtړU#x}+r`aS2jܳ!75m̘rN(`aDc熊pU ۝ժ`Iik~o~9k.Ҡ^mF>ן+޹ر{\ySlܓ/6Oᔣe?:SQ*Wf>$"W/_>~ o߶n]g^>Y xq3yfρCIKǥs[Id;!Q {/^]:NvQQ.OKO':/II{j- f7oݻ?+JXXիUn၎IHneUetBVA%UXI |^tvRTQEUTkTo>g͹ ߹ٻkg)J$sj>ْ1N['ەf|tit^A|p7Rh+bcX VԾjU\.bͺ5k괙8b5jT5O[>zLz]k҄eK܍;+^96Zv"l'=4CtjDVU1(*oU<Xp*Uۿ}Hf~гw_/YJn]xk8900GRxudڃ4b싃)ѯDrm6^{3^ CCDOnH͏+b) fBа~mF<ӏ+W^6ۖRl22غk/V ]]CVN.{,EX-\۠.sɾo ˏi:'Da E5gEJ,v$5-gGPrJi"M*Ѧ~׈I)LNAkt~?Y9lٱ_ZςAUiܰ_~In7&Izz:O G'-_|%g|IVwJuL ˖Qjnjת);!VD"#/n _n'C"RlJRmTn!?[띀L!B&p0p[N^ ~kC4~\ F{B7&9UWFU!hzl$QplN4 Ӫ*EMWՍ+/Ԭ)jN݅X *6A}V]ϏjTA(5 IFhJ8bgYsd_Z9YlQK˒]?)e31lU(:t^;붣VdMe'DtLe燝s$ w%Yܵ$77Q/H6xrD|B"O~w'ژq4>kVXr6meL3 KEvoxa%9J3jU1.^Yd) ",4eK{~:tm:gOŝKm?x@ΛO:oˁQ?MIٲ}7B^Ӑ/F ~Off¥ǤEBZ`Y 3Ƥ PRF>G\L/>Z=[Œ5-3;Dz[.J&5=$. >&z5)Fu} %\בˆ 1 9v/|'FO4 :O {-w6+ƪsz&Ѓɩ8|ЩY2ёg-Kun7&s((NMe;Lʽ0B֩-53˿yyy8RRS3\u/@6IJ:3d@Oo?ժU@"AD")V| ?)")JJ6ɗZoDRعc7D#JluH .nwcM'/0{\?$ *$Y "0"݁lLE%qBSf2j~W }Aߏixtr@р`a[4]i4] {h2b4QH`PPG4tљ=Hu)sX2d826ZZTgʟwѤ5g-ͳ8Ll` 5L~qI^fvAm[/|}Zff2lK$&Vg ܶe{Ƽ0XVi߉_O JU/XS#*2&I_jRRRiٺ99|{EO?3E62(äed2z҇lڲ!M]Řc2I\hWq=>Z,4!zw!.&JlLj)Gӏ}QCZ9T_zۍA[6;oN|l45V>~ȳ;N2TjTLŸb0p]0''6a5p0tԨ¨n/:a2ܿTyr쌬lv?"!6ZEx]{q4zqNURF5x|=ƼOJ:nڧ-֬[O^yuΛcXX8ۓ3㋯5{.z6UtnЉ3ΡC\w5mw^Οh wQ'yթCYf]<ȻoMm߱?eOOZ89*Tg%x}7G 5F=C@bUّ@_BybcbXr AWDIKO箖mpoV S?A˖-b900Yy#ڼ!c X28Ed4vُe8!w5 0@-ɵَ]NKB J-+w`b\Ee"ްq\U䗔L`<^/BN\])Z]rՏz6&jdg?LrQ>9.B+'/UEYH%N4ݱ,9_uޤC$eW ĩD6wSJ|j0v~}cWnzkrYQ֬|0k\?5]9b8?sC^۹hvmLr[%Dr q !H[%TUȗYoɨH$Mp45ellK@@&*MF35CN9n e1`A B+ġT>?3l{c5d:>g^2 E!f"Μ"}'#ūBdT 3H+:8~4t!?a(FRh 00M|x~4MCi2| |dJUrl 6&IBpz4vuYG6qu\CqWvlHFHߛmv^Ee=I8&$ڶ?.]Σ}$<<~ &&hǣ=j/ "vHE~˫FvSӨu˿;vk9RϟàDҰniP*5*5+W}yZ"ͬc-Ѣe3Gb%ТV7W;>cw8X!ZΞU|^l۳_䱒/suks't *UP#:?_~àOs_i_Pf |7+V.c~ѧ5a\y HRlH$%o˭eH$s#VI!FBm@3&tM9=ˍت:Xn fXᣪ/(U'5χA *!% ,́;rm>G3Ei2~|>\6^N V ):MàT P~|Z~V!aLFTE* av&Ydffc;p=x<^liE'zHbJM_q0Ѫg]ss0 сQYN[-m;+&ǕM躴U9Io;UK~(MtѯL'?o{bl|*WTrktF  _o3d}ۺ7mR*ZN]Yn=}B^|l ABB֭^|y*lvيԣ:vh[j9Ǿ}M7s;2̩bk2E)53Lx ?,_sx9j5n TSd΂OZ~ Mt_'[XhZL^V&:`5 !.&"CՂ CGRw0s\l55ZիPn z=XdOro>~1aVw6bPzw}%9(;cѸܞr^Ъn4M+,py.j'V= ~M#fgd93%;DFѧnq;{صs7=weѴlݎM63yAg-s?h?Ӫe "#"|L|~?5k$2oTϿGo f_ϠVM)K7RlH$%KZ 2,9*)-hq9!"n~F~2ʕتizc ~\TtYj49=3prko{U"F"/Rl5 Ӊ3/^' f"{FC5u觴[Q,BQBѾy㙘<ړ􏚮3uzKURr8}.5\w-\d\L3:@%ة+~ݻ/-Zǿneg4ɓe+肦i`.ujMPuLf^Շ aK&Lzi3$''ǼB*Xf>ҋqc_-Uuo:%*WU?b2]LEHPPZ#iV~Z0[q(l4HTDᡘg{4sfHtݹc# f!Mh0\vGWQGUo*с|h;oHǛҠZ8v>.']XɠpUq4t[v!$8Jȶ:.'_?LW.M,3o;7~&Dhh(C̄Ioˇw*?BZ5WI;n"3f~d2bٱX-K/ wdffѺMG2228~ '7\#VD"\BR ? Drv*)ڈ'_h /"~~w}C222)Oǣz:nLиS%hQ)(8s.즾OHh׹VtǍ3']+z|Ԩbƞ濰2|)B(hL_'p,lƛ6X5UWbY+tG_n MXU*_P9rlr">(56❷'кƶ_G~}5򅓖%%}lj7дHeSsh.7՞G5.cސa#~"<^7xƏ=`Z>}z0ѥ3/L*Yz),x<nkޒ1a>`dƽ1 l|#.ǘ,F! !^]1/l*{Sj(8T$J#qvu:the˔/xZlŀksO!2<̵UKe7dB`4XLJDhFcᔣ$%p5 Zvfv; 8vj6Z Rz^sP(M._cxƊ=XnvP^?{Qvs ?~`3}["4PN]y&ZL:4^l}=px580Ef**}pХ[o6+ChcS?kcߠCTQJet]Ͽ6LѱZ۞mw0<ٯ0r[%Drr>HUR*Hq;ǥDRٰW{c222e0.ׇbR%T/Z Oq8/CvlEn*{yoʸ0뺰[: @ⴌb-VUUj׮Iz, +`Rr/*؟}y[àvuW"?=̏fO#]wR#"ژ7өԩ]eK}G-[IB2fVGqoVE*ӓɎ;T{qB6*m #^f鲕x}^N}kV]{rjz΄qcJUݧGjʬ[X2ȟ>ۚd{UztZj>fԫW~;|?"-&NB~aPdF,+t}YSP!.>$R;|:[,YVp@oeR_ľp43ӅGuEhP1LX-M&d2qUuY9r,k*FEa1 %<4`p}(j'+q63hx|B_b~C/T}uN o^TBRr@FqԈ 89yy<G&vO" a!z?mZ6/tY2rhp}S/wloL>&ײمtiiTyTϢ^I=c}6Yq$)J$r:~ܚ'C"I+T59.TQH?>!33K~AةܥvpBbx .'#Ƨ~>bR-&Lqlx'FV54Ӆ7& ]ʭ`XPU!qq~)5(VIgO^߾bgCwӁ%NQ?2!|>߅?ݺT|9sc|{'-s~G,8itPfW٨:1nط͂?0aTF['՝o._QTV,Bunmv{cQ)4g31ԬUK厸 rQg}!icƼ0X"D~ݸ 8-Cԯ=ɱM&ڷnA]|2߁8Azf66׋!P>MӨGbst{lݵ, jx0 4Ї3%eWѪIB9w ?Dh)o&,Hf, ]TEcNDa9iNN#e8CUف h0p0jSg]c3{~?;><~SƼ>zukDž-[pGp:LCn>9KpW;Ƒk*H$@bO䋭ːH$#VMǥeT$y˳`ߏE4L&#FuG Rh#:]#N7v $b,&L5 Ávr_/GPd$~GVEcv [`21!]{Ӄb"D ΔEIb9̜-st. ;T~l<\w.1A1VVjGպຬY|c._b3hѢ9_1ђ-[1j x_lv= <Շ[T{˖m~ef:ò V^ud|-ٹs7AG{~pb۟׭;2LҡdF{AgO\SOr-7rm6G>߱[6OE)V((u{,F &H"frtXH`@2ڧed{AN'c4V* _p)QTSrdzmoJֵ}<s$jEJ(;2ŠuG,l&jO\)g\=UlEFK7]GO+`6-(Rl\ x^f=tG:7U۪zd83Yo{ ĻH}ofϥa`nqI{4mڄE眶VmcF4^ZvmHYTߋ7Tzq4oq[ngc|=[" Xz)fY21mSoa}e`._7nbثmA2 t&$kg MY`c0>\nU!,4"CɄ>&FGPz* E!TE纮\/5?Vc~Cե퍕N!<_)TP8¬" š#$%|+t J-hs|*z F|\[MHHk׭~Oa2YT|=zet}A&#7Dr RlH$eduAHiB"9U+Tˬ5QH˗7?`ߏDPń4?QGB#ǂVuRT qpKϏOB`Ub{ uqkEj%j%Հ3;^t.0TUj ԬUGN5m_rJv%Usّ@YlݻuIoO%/8*U*Ӛeg|YRr=M , zKo BCYx>qqrpQð&<Ц%zwrrxjh%P+* L`¥קBа~m^,VKæ%ڿrH*E9r4Դ n7~0jUr^^B` qGQ G^b7ǯiDZBРZq=̬2FUԌNHu4]Ͽ%r4#CG&uM`\";)(BVw0EZ'ԭSÎ;1-՝ta1v+t8˖kK˚@D"qumlGeH$HUrEj#|i\ IDATYudT$DŽ7aŲՔcA@<"/_bE*4,BǨO7]WGpvE𯂎:FHp[U9n\IyӖ塒PU'Ebx0Q8]xu"3 .N7v |. E`21LswӤ'_Wj><["9=Ggѭt`=ٮljD |5?E%J4xb'iX۶xRxi"O>_cϊ\/:BޝDEGat܉}T}_3lH*WOka(uǟ<3) y5k~`,QFw.2ÁAUܡ5uP";> q1|4BdpJ9/ჩ_`Xx޴&t]/̲ʼ'؝YU(fNݱ<@Xϯi8. ry%b!D㎏b (7د'E@@CPz^feԋCHu}Tt^/<l3lM6+>]S  `Ef>}Ɨ?uMO?'&&o%22uvڵH/ض=nƀ}K5DrɎRlH$ غ^D"9R+TMZ3ɨH$e?-WbkйZ؉…R!D*B@xW S @# GITF"*WDQR%j>cbHn Cs [\?_b=UlEFK~&VuMӡcb ǧ+d3_HUrGGFP-[©Zzu)F ''{ϡCyz@Po7z_R} ~nSNŝ͙WE.w۠q%&g'bڵ<}?l AŊ fi߉_~O>/~7p>(·̤a(l޺Gh0pz Er{`ʗ,X P&zժbt]ydl"CLiX\aO2o74LnQN*|Qn۽ ~?!A4S\ !*3Xbmog **~׋tig JHi: )Qܔ=YoSVMTѴ4&3_㏍'yL:n%7Dr RlH$I |u-r^$)J8 AzPSFE"){80ˍj.hE8B UH Bbka"XxQC,gsOLj0Q"ш3'_pxٯ8U܈IzTVB`24!IlUQZTU%1>Ek Zq-jddǪRl\6~6 ׅ`"Q9r[v|#͙=C "arM7QF }u^@.y620y?K5 epJ1~3}VyHTD8/=ן뗟ISٳ/+$h *<λܴ,vKra0TG$ШC9$e6BfXqlUEl6B}95 DBCy!F0cW\sM#f= 1_"9VD")6p\n]"b $u ɭFc.FKFFfhoiMj- l >}KUt*U,]% n]EG/穙\h#RN. DTJdb.5@d٭rT7:Ah'?WA@I`xsѳH *X,fTUEAttw DjBJկiL]^Ržs Bׁؠ؋.aRjq3}ZuN஖mw&Ѷͽ'-= 6+xkwB=(E0셑|6e͚ƜY_ϝ7B\l W.!bvړ+Wӻww&Sjs_rrswi.98(~ߏdnx=WD~?)u]g {c4]b6=d+x}>~9@LT$ ^{%1qTvKHH=:&w[Mvv6B3aF`-r\7oEvN:Uk\ZOhRDV%L_ʄ2EѨez{@p*Ucl6ˎS(ԯSQC"2<+2%2338=(IaYRlH$IɐFJغED"b #F$ǥ;y7T"),ϧ|f/YQIx;{݂_DJj*Æ<}):nh́I=^=>ii36%vՏL"c;`⻴M6sKU/XĀ%:*~p>t9]zޙTjfy{8ʛ^N(nj_72w4 ý%+2k{غc7QԨV_u^7nѓxz=$3v</̘ŜKaX̷=-#7?0oӒֵٰt!))x=^TUjJB\ Ȟk_ɩix}>&#U+%P)>PSY[!)<|iZlU6LhmB`6 ">6k_g~o&._B"΁ww3R"6 F2[nEx ȵIi@D")A@l%_n͑!w*HbYFE"),]Sj@}RӢ)!kdz拭 KX!i8 ϪF`U2P <䋮IL \XVtU#Kr3jo9~95 nMǫQEǂNQAx <Џ_!_ ޣY8~`Uu-.G+\lELF,<&kma ?{_5'ɝmo7mBSD"**(CDEpAQ E6N2eޫl($ EA%S_N{Nrr=z# 8bk= ;5qO̵hMd煝3PQ1LZu-`JE\pO7m,xȲeaTbcߔr~a87j~:w/e#Xf׵cC>z$UO?G?v횬^de+x+bÊ ˂E|[EVm?ɈwѧwOqR6lΈ'*F£uuOUYz=Z@Rr* U'{W:>!;NJ$Itx zu*\ t9_exo+TPTm ߲tz˄0Sju2ΰxEƳۦ7 TUd4ЯW7y-+OBb2MBbrhzwmEJQUDA3lD%80ঋs'Nc(l֘*\~w2Y,^Ȉ0F } 壋uϜO@E#s̟2;ѸaBS#Wm.p8QUj2 lX|}ğ"3;UUj\,bK`$0}GkT``&#WÚciIbsɷ}1 ݠ. W!54nGnHlmReihhhhr%kkMl(6$YEECtriƎ'NکC52rn^I*|TJn1Hd9Hd"6$쪀cT6 4*Iًe 3eJ C%XPS&\s=2iN7nE,I yrkjd˟kIj glUfHg-Yn$ ٌ z`!|b45ee6Tj]hֹs >T ޗlW~uI&[TЃɇpxuunw^wS3$0bPz>Y|ݺ=͸[uv%P!y|?Bm_a&&~ eBCƀ["EϜ!oS\ ,d*9L߰g{ H-Ձ̚#mhìSJt]xɮl;}}[BTUe-|0+j2yM[REUY7}5A̛>BzF!ͼdN{ɳOwȓnɩi+<@Uyo+[`,_>|ub%ˢBChѬk}}ʥ22ܻ)#]+qhetPU$a2QT*HNK'95,c4艉 6xgD?5"ZYק#+*_k iA)<rsmLBH?-.<.Izz/w,9mg2O"EA 4$O=~׏&jhhhhb\\[׆M &j /עQzYj-Ӧ&99~ ܴsnx;X-p%,>N5PC#ъ^ HVd!!ʙjF tg)l˖WX+ڈlhwpV H@WVP%֫8̢@m?!bVQf$ A.cOw~Æ&[+ܨZoxklYjՠ}Շ-se4w]6jUymrWm鴨x_mBE$\_$b%jhU:Gcd/s(q^?£o&[v1y ~Fj׵o!g!}瞺zs~ ԯW nysy}`""Yf#amz`0O^jaaL~:-[?(u/p:?uK!r|LF^Ӄݒ=3E+^su JQUCݚ d\~3IfJ\,^K,й}5ek6*#yg`?**^ %fcܗXa3#h"#o?/dO p\Mt(]xo]j_O+5UaGoIsbN?Fvv6.Ǜ,($2!A?žX끤_qMbƟ&-:B|W vѬf8MjE~t/>{,4 %|EpZ>Oyne=nU^<@sv;-?sq|}Ҧ3(hbF18VrkMl($Y+2ZT44J/S&Og钕XKD#v=܊x0*\2$I/X !SWuǽ"*F,$_[WzT'uł5:Hu(*&IHQO[_UE'P"QEx'qJb tz V:w.O8kb+lzĵfX> v$bP~_[,[':<7_N~wfZhΏ[D&++93Y{Z4$[}6)fDzu+nՂەЯ넆fJLwS]E~=zuy9I_|MfM˜]9ifҦMKf^BTUeoh7Wl}gyE[Rň'ekn . l໙qxoObc8Q۶jFl3yiY&8(pWZ+Xsm7@lLcFA+7&$&c>ƮIȤV*K ) vϿnjxj-^rӒ8kwmV+ny QJʹ8G lLkw\g,rzԧq‡r]$f8K|B>zz?Xu<_rjr?W,c x?]-]F#?ȠjRCv%غE &j 4+j(|Xmَ@R+PyLDônY.6[QQT#r\Jy[ t^^bP,:!o^B $02LY)v?P؜%TM6"ĭ($$"D}Ր^2]v|! =F_QѼ9l@z*b\&" ">!oP>M1k:s+NI$ۑMXlil>zSԟ:CPT'w|`nmeݩг^bN9KvQ7"nO玐*:kiIc~w"-<[̳ϓGޥOr)wg_Orre[.^L䋉c\>G|B=҆] YfзYx)vw6`G߶Z/bj㡱 IDAT^MCyɮx<fLƍ*2|8z,}>E.u4hPjRm#Ol2ڋr&O}Q!ʶ{a})gd1tԧ9~jUr̈,vqn$G|qRRӰ($J*XaSR-;NL$qM~[  JFt[` bu_VPUɶiU,o>YKXFMr/7bެN0뷓Ԯ̑uS.񸯂Q|&dhprY2TY bS$2<:8Zl.>DJ࢑{SdU+f4 iEh,*sdٛIoVN$h")ňQ 7ԱH [sE=Wgi*k `l˖e8t597s!b1ZZ*l$DIYDBB\"ê# n*TZmdW.RrS7Z+!>ujK#? (* !" &u2%ZaȊvUrHeYȱc%=UCyO;k3X^+ 39DAGDƍHLL4+&OI?a◌p j`Enm'w\gObí󉭙YH._,˴iݒ? )7ӳw_|Yh11%'hߡ3}Ž͊O?cQn/WfƖcݚz_(Ll}ﳴ-+c'xm8@1d7swL"}.EM/V(϶EG˽YJƭ;;i Y9$?Ii}Ͷ{T<0_b_+CGԫUa%$(0:YvS^ۙ2*eH8Gt \n7p.! ݁Ǘm;~|/сPA`%r-*4j}[33kDBc4$*$|(]i7R!bt^.:d2pvԋ'je{(|7F@>ӐRG`0!x\ߧRIdB BTTDl@\3ן5xQ˖bCq9]=|Z#v$#3 ğ8ApPcFgIиhbF1AԊWlݪDvD[5n9IVjm"hh^:¸19>!EPiՖTVRg 1ت{3",xh$|`6c +ߏb =$8<*Hᡞ`#DX_ZȊ7e(F3./vA $bcln!EAh/$S3*_j (|p#%Rl]xd1{bқщ:n;i&.ZYxd1tN^8Ņ ЦN+", lPuN9Ig*#4o:'qL#F qa'Q;u8#$i/6nL`4Y\5NjzFE>"1tHϏaw88p<٨K"=nU(1e,?ߝg= @1wBӘ.Owb[#('2d;ܹ֭Z0kjhܪŇ\[ʭZH4n74U㖒dE+^[jQ(,]3~$-+B(Rnm(وQlYnO,WՄ+Yb??o6.ڢr릝a'(,lxuZ<ߕ3h08D``ݻ>_:0WtIWZbʞBI x |=x mE?@#23}Gj *oϾFUULF{;H n9s\&uk'*{gٿ.&fϷ(t}zu눢(y_ 8~ ɠO|%Lsf*Lhxg̟3A7{WS 4$W\m]1?uP҇5eIѭq>SRHNICQ(IǓT+BTRvHc[P%ڟ`Ksy̚ʯs#QUO?MkTCuM۵hnhb-%J$W6@ 䯦|*\DQDE<O[H,tCVhsbeKْ+J&UnA`b+8Am~Sde3 inAQ EApLIv')N7?e.:A@/ $C G81u99=v)EeU4Ajwr8^A{MKؚ}?2O~~Ogt&:H)"Bä3R92WjtdҪbKDPa]IgsNz:gӁ1HFzƊUI=JrHźS3>#j/&%+ ec)@è;I=#q.DAJHe:(yj%H>H8:xⶹ65 F*lÆdƬ9Q2K`S&N9!Cߡ|rlZ|T,^g=?}^-)'&o*V_><ۣyWˌ?ΞFJLٳiٺ))|:<޾0s 611Ѭ] .j),7w3ϑeAOg:ؗTEQzp|Kuw^&}7KW\ +,4H3=9X8@U>%BCWIM`q;q 5٨Ū'Ϝc;Ƀ]`Pj)mVvmx.7+2˦}u+Q9sK\Uv""_ wԥ\{Kt>q1>LѼDq4܇afcVDQɰ:Uݲu"w'0ݵj^3aX:<}L_`{xll̀~׫9z>~3~<8n}V23j&t#h>^OIbr*\\nwv/UEDIBuDt@[D.!aw;X3Ҹ:|9)>3p:& /v̦߷гGw~F‰'iߡ36OY{JLv[>@D>:?YBs7+Sko^9|(ÇIK/5J{aѸ:=znNbv8]{6n݁~e67*}M?_Ol5L3m٬3 }S؃U(ǻo'lVJ I)i ~o,Μκ5;bUƄd'NV*LJFfO[ A7 kV?~ ۏd017zRmD=ViK݈:yۻdsxl\j\9S~Z'lD=«_A,$ ɌS;dk 6>~'2NRl]Un{C.[db)ԨQ4:d;Lmք ~}ƿ7I? kjVg;oiS)`{ә%\.lٳw޵3/Y/J`@/"0w[.>m~saw8 A]")kX8eOϸwFS\Tހ_hY5|=nfl otUdQUNplY!"L{.-F/}l?ʸ"6/u\|B8u6)))*yVB mfdA5ӅGf,^( 8TdH[CV[.,f=uV+~~޾}x dfe1GkE&jhhhhC[[sh.hb-#J4W6@ ѣtΞ9(c2IMM7fiQCf3(,nj21/L.5v'3 5D;q󦞧l? V\We**\V orq)*r$|Ąd0xM/ΜzD(6\É5׆nwxEلh@$QwBppK]L= {Ḵz߆z ,O^k_~[N){7e%#v`!6p0zwYYciDZ"8t>>ނәgp\ZϗauG.~;h{ݮO;S([,W'_ˀ{^-4k#{fVz~t&]_Tkum{KÌ"+:l˗c㺕qOQQf bXonD[3r[TuZE d4OvPb.2[>ɓzVeXa#={l6xT[CǼ x{r@J!cت$~azuxӏ{99ԴӾm+z< 'Iɩ ~LޏIIMj4x6듾ůV*?_Ǝ|;*U*^ $!14m|'~X1ǚ˸/ۦDGFu\5|lNFf1{{ݵ`VAN8Co0, &ʖBVB.='<0t%ex"n?ĢIѬV85d֐gwͲ)`bֹٌ;1ŻFy5'mQgB^}"EάRgrhS9\R3nwxP^U@,푰)VUGGDA/k-n7e}v'v;[mrѸ]yYbEJ?Mlиc'تQ&zD &j2+"QYj-Ӧ&99A /O)}bk'c?˩zD|mZL&S)E"laQ)/Smϗ(A$7=E.>xك#NJτ[IQ IDAT=e첌SV*_*~&qAZ|Hzw] * ,?Ötv ˍo.E3hTR[hS[^CDDӭv$Q烿r<8!>d3UiZ GR9~`s0=vXqVƯhgt_K;N5 IDp8/F/U`s;@S M7v7s,?B:]8q-ӵ:mڞ8Yg& w+5LGZeX{j]+ ":tǠ3`֙3`''`LAu3΄]: s?N]_69GLrJ _^|U`ڕ~W_{ȿ=55ocrӴV-AAZ:U[>ʈҷ-'>$#G-o߱.{""8Z5k0|T)8?={Yh)M4Uws0G$NOc;q>s.l2ѧGgoGne^ֺ5s]4e{\ YJwꜹy!,!Ԫ^Ex% ?}22h٬oWʘ͘ ߲ynEG |(t?vc)$C'cTjLIb(8;$ԫQb[/ΰ3\Ag t}'l!!ƂD];~Orz>FQ/]׶gsyyVWN &-:B ZI,:C~07\6=aaӵ82Rm Iwk F8 b+,ˤfdM5ӅFQ w<) "-ȔȪrE/gSd>:X}6oنE`( 1/tCxl۶Wc7KT[~#G!B"?Cyɮ\.fN{]g'1OY/IKOgEZlAJJ*M_(z6n;G$fUvSw1}=^ktoýA |l:J2 ۓժpi>]bo/RE+z=A!Z+OH hʐW_(Ve;'p)VWcGމ=~2Nlc<[V eS|-Tl2z!Ԫ |Xqy~pwCV3V2s]_?6tqM0t7$fZ] 7MgzQjd`ǚ1/aծnH\E .6lE7v;pGOJ]D" ŻN,rXs;x<5eSr:*#Hɒoe;l1c%''\nSڿM4F1F[54444)I\ں:܏ZH4n4U\q_l ӢQx6n،f`0PnMBBCXf=Nԝc\LD7dx"5 2EM/Qel6V- TEaee*sdȊY'QQʟB+#_M3$܊ZHXF>>@iXbQK F$%ۑ' NX {,UbpgTE= b1dpzzZUlqMO:lל|oM;F2i_Bױmtz(2nمm'e%ǙC3lg6V\w.vljKvQ$GiiZ Ms]u܍M6Gb"-cU/*<>? ƏӸQA~ђes9BtT1Lv-yYNڃU{.|UV?>MThHsr/iq_]f7MtT$kV.熶_~]m9wfǞFlP,J(mw8I"#+͎#ȪCɕ%eio$fsQ$Id4o!<< ԯ[ukSVMQV bphhb-!JM򋭂 ҍbw\.f3hJ@@sYUֶA UN6YrbKoI|`D褺`+t 8rrp;n着]NwQTm~f%MIHHBoR R*(]@ JOztiC%u;ߏ@0%$l9fgy̽3ϼG.d3Y5[9ȒDe-LPjZlj5$ҽǓYfw0w\Xl.c[XDT-B۲vcuX)WpE]WvcRP5^8]ڎn\3T/Lג"1h=./P½x|GOԛJŭ[N'ɒL5ÊCq K2Z_w_=)W}Z&W33-m߷7z}Ƈ'жM\m}> ʳy>- /ĵk|T^56͜- .!:&0 |g\!c4y]D%6?V-3,{9u4;oiШ7nкU n [>0xx˚(\b[XGo̹V%((+Pzj _q=!lܾE+w3C8-TI XG#nޱsf+)Sc. 64^/;yS7:+ѨբWGg8Lf3m6]9 w{Ѥ~L˘&>#K5VdyVgfv1A}2j)1WPʔ|bۇUQUjdO{'A `",ЃQ=q &b-k5u2Cj`9( 9ʮ0343!㯿c]}WF$X_7nCJjHLJ!lbt*Yޣ'KX Cm[v-\j Xb b@ `.[ 2 B"U' 4&]j"""bpҧ\x Ém۵@2|)פř3Y`Db;MV5 !ecA *lLŞGx;c*V9Ys_%X8dCedв {l2ẋ>w|LXHpF_I$VWsT у ϳ: ՚)Krl/I%ʝz(j ~,<&<ЃV~_aѩn^_ֱl%n.R?|WLV`?Ƕ w֏ެJ%6؄/fm^v#yy^e \1c_f̂q:.5۝>5PnV|"I1bX;8l N$R2qv-7l:9\eI"4$7 ӆ[@c!zJDb ׉3bQ?GcƗsEQ VnX,V> ɜﶹ:pنI0IvUУK")= ʀd7\n^OH0w7p*Sح\8XRSsl?HڈJ5cvw{Vje} Z̙,J<=,SVuNDs|(>mNAk@qMtr41;ÂSq"K2n*^n^(@W!~ac%LIehU3GҢuGN>À}\O[;֕_֮[יܾ]Ȳ̋^`q N?/MA7Co!Lc>+{ ֮vr+N#0ݼyI^&={ G-nw7oޤQ'$Oi٢YN'?_֭cܾuI ,@J4jX?SNqWz;xwO]jTy#E<ܺ~N[ I d~)Q,_K)F|=nNO0QFF[.<"xxt~cxm3zw}剩nYv3E#˜ɄLu1~ޝo 5{(iA{ܯߺOg1 AN$SRc/FM%yKEAڨΧzd [ij?mkGЭQZ/E,WENR<9͆d#?[cM,v|Mluӑ(f,иj( %nQl / ۘ9o6_IWKJ1r+>Ĥd̖}_H2"-سZMh 9[[z2BlAr{r NA~F\'H8B 5Ye0ȭ[LsdOTUQRmiwR%Θ$,DT* =*ս'J'e%Kt.$ 7/OPi5(N'46S`ZbLf'*ّ͌: Z3>l?ic:݌wJD0}t:]s! c,ID%GohM갢5z,Ha½~~4*-/oHe\neL!,;VeGlڽժݜ5GFfMpL/2ݿbM |K4lW0iTʕ+-] 6!ɳ:;v1t}r8S%\ʔ%=;a|BK`æ͜>sD -Lѽkg x"[w/`#鴼bm,9Z NH[x eKP(BÈBRL7w77\s.o ѹU$ΜH`C f:f/\ۄSQhӬ}ZʓcB$bn2l4Gf|\to,EŲPiwZKEώVc =)&]>M hUSqLXre 0JbHv"ob:{맽Q.灷!?flG Oϔ3wt$/V'4@nܾ]nflVIbQTW,V+7IHL˜jpd3*8"rF]FLo/4kmEg@ 'U O87,^!g*uT@t0g|6nJ1Z30n(GF1aܺu;msrjN=n|6ّ"q"aBl\"]nu>E!BPEN˽,gZV1AQplXM&fsSnZl4Y09{AQ2z2ʰiX$̢jObkɒyoP  vnք! )\HLJ Dli؝ljw} oay6찲\ONiRquދ6ӤK,?'Ob:3*T( ?gLؼe^^TX#GSP(ov{w|-;[:E /|7o!LX"ܾɥm6iֆcǎ3lkq7oST1IXh f_ap2%2z^;V-c/?`e"'ʖvՁk&=eijW?I`Oz݃6l?[$WF%4*l'6J)ͫWeW2l*ʯ6w!I[_܍[\=jۉ={Qxq҈A$BB Rjٜ5N>㧵Yr Iwf$oFMۉ`*Ubp7|*2G} `1xE#s1NqOܞ7:zlk6l%$(.o{_~ˉ?]]J b٪X6 =ZXjѴ1\Y"&ؚ9s'd/cx⠲Fd8yz Nn`I}t[yGj`30[8Uj(镽7&I-Ye wPzޮ#ܼ Ggw6d`ԡgkӚ9r鶰uz{4 ԫ[7:JҥŬ^%j T>L I|:s{;U3@ ?CN&Oh`.Ʊ4ÌϽtv-KY6~ȜE+qwscAT*_5{ Vـ 5=oLw^x/<.3?&.ʿAe\'$cHF~,EL\zc {ڙk^x f@2dםc(Y\q;9(Ƥr,Q=w9ɔs!:_qy._e3pɌZKt9Nj INL$9%Nhђ\n|$dYсU@U^@b@ \d2DH! r8#d[DTO|83._ϗ.^fX:3ϑI-Ixtd/C elW5S5CVbglNJJy– 777tz=Jac3-fnb3[[,EIڰ98SLCd&Gb$ңg5mb33[Re""I4'auXѩ)PJ+~nܠ]׉N^=5bHm]֣q9J;w3ndΞ=G20}P?y} n J(>~hLd>l۲.Sb0|<ûdr4nE\ G~Z9FLL,v@y] 08P1w-V?^., Np`@,_/^aƼGqOoW }2e/ٵ/}4Kg]j=ݻ+ڶc+oL;f ]:sNCjZ>ޞ̘:ЂAyr,*jQp╌`6gmZ~)FZ ˔u${\]JU|䫟<41LZvk7SY8&}gJT*M AOS$Uxx@x1 +(3*a/}"[JܓZ_~;pof|GlL!!3/+U@QFcKJ1=}Zll_$&JVk̜(;b+FM٘gU*tzth=htHaq:8ɶ85]lXtj&fǩ(Ze < tԆIX,dw*j=ۋW^kO8gvbIbӜ'8v*Iޏ2P&vŁSqbx`w:8s"|~Lz&Ar Ѡqsnݠt/V-Z7oaf\FDxǏa?z<˕Ĥe_w{Ͼi Lݛhˑ#Tl3-kdO+\j7o!k~x|}}PT$$$J+qfFc* -a՚q9SR rkۊ{b叴iݒ94r>dcPYZe׾CY={}ұ5->7l˸-#Ba6>ܿth䱕祫LdQ14xy 闣ߏh:{AeׯouMͳ8uAdT=cZ ~1KT+U@eUK+:9'߹"=rl 7T,Na(ƽQ%:&߬=LQ.,Zl&/X=~D>`xba´陲 xJt/K|Np8\v0[HLBޟEFâ%˩R]<*Hf ?"VAg1bk@og-`Æ-Sӧ«,'ʘZ}ďٻv=mZ֪D4(+W,VV>elwM,OF'DQkhhz4:-Z$uV'NÁbMY-6;vei8J͑!f$lcrd,tF7w;^z(VNTr4pyRmiDbǁFϋj>G¸kx]5mzw=sg|{bbbYb∍c}ܼy Ӊ$IT*tZ-^^sUiP/5ju|F[D!|>^4lryڴŠ \{8|(`!yR3g䩔*U7=u6/b \xB@j֨Nh4]z!BlpI>ܺ)[ ukV˓ΟDf/\U2>l"% FL$ÊwµhLf|)T0I|9g.[9jsmfwPb9 CgKN1{Xbnf퍎z{|;YLƔ,4Ph򲤫H2)j"u%Wd %n&YPS߬,g\zJgd`4rَK,rS;:Bdr?X:=_.+u_a&dcX)ބM^YN,1,l{2>9/_2 y B<]aXDt^iՉu<%oԌǎ](,k> U .^ȭAp#BlqF ܓZ"*G?eރX,hР. 7M}_bZגvYoi쉭ITBaB9퉋JZU5ZRedt:8vv;ÁȖ$mvb,8%=id[%ICV{o}nnnyyNWb%\ƍ8t jUN;,T*[bawp*NDž#)Y(ݗ`BB2<۞={39ܨZ2+=gcTd4iܐ6Z[w2tzh($&&&ZfѠ~={V9x0`ԈyREK1rX 붍?YӠ޼y-d-\p F`P?={t$'%'3t{ڷk73)f̜_bEݥ*WȖ`*XITq FElu?dVƜ߳m>iiS4<Me01Dva$$%S8,Q{Sxފԓ>{3έVG k +*Lhp vɶT$lz{j .: ϗ d˱)>z5-IloоNa~s~z v ,v~-JӶVCbֺsl:bdgԼ%z9~]F=Lx-;é0auP?; z-#X/l۵,쯧m|e9la)lu7h%Pŗ8u4V,]HDOBl q􌭛I[M"$[Fd[DTbeɜv;^^iג:wXf3ٺyK[$+THH( $$[L$t:-z?/(HH[U(HvjFtVmvn[l!^zr)8X,e,WwMYRFU3ӌ?nVbe{m{dK#lb%T*ӠX}nI4'rfOdaа *IF_O!BBsMPZp (^n];ӿoN'{`_ٻo?.^x t>k1\z>?_|1  TL&3u7&**J6-]-Zw17rXaϿm:鑯^شy /^jR5OT|6t{8tIэLS9XnKijU@RHXjx RF $ԩ׈/ıeݲMG8;oe{#;~ɛoݝMV(o .2w"lΥ˗q:DS~=?ֻ]a#Gy…Ox^]qp * A@|NTT4[zTZqcF_U .NE8n&VAngDD~/f@hG d,`VZ)ˎt:$FԒIqe8g=@BI3؝ 7Vn-؜9I@p²!IMʲy[F|;!O&V+r=9WvfK㙀>SqҮl["|ILLUNݗÇkv nq921)$Hb[p*NT J΀?w_|}yaЩu$Ê.{L&ڵ0<_?G+9v_ 2:oډQIn:JN.DdU./܊G1tȻȓNvo#GQU?,|g/_᫙ٱc'QTѨa}: e˔:a/]lҴj\O1cƼe\w$Q A}Sʳ.}-_6 55 ww7jTy!{hc|圌σveQdiv{Nm>]nWiֈrʗ)đИ@U+ј!9Q2oغk_*2]:۫m^_W/neʲJ XD4Cd>V&n^9@h~:P^MK:^gΆsxiֳjĺzUoo{1{eu`9uT IDAT *YFSwSӨPH5۰;4+E!IَөTwx5uWʂFE*Q9Ɍ_2K% {fryҞIDgCtbl-ΥyqNrH-؋;xiK^xRt{$T* ÈaE`*4{rSDaBlqFj PEDD x:زi;-xT*bŋ2n(4^_Դ'vJ7hd/JI]nk%ogYpsw˘^ 0fJV5 %5eH-6nvEk$IG%M&jZMxoPvf! \xSw$`Fl3ev|| ~,^mV7pXc RiXflNUd5jIZVӳ)@R'5!!Fet:ZjΤ c֕+W9~wQFҨ)1a ƑMvx_wgnLpK{Ϟ}ƽ'ut2-t$55 N횹Zsfw޽hdY&"" ^O** G+$9xNzt,Ng䰐` ObT)dܥSߥ} ׿}&~<#^=~wWxm^ߊ똿l:^iӌ_-YG,Z1s2,V+%fz{;S>G$wU}O'|s(,t<~®JVQX\qݍǝXI}PB*<Hwu ӧYN0Ke (}y'/~e;.AJ91Dbt '.s#LRTYNxt3<?Ҽ\@_gCkQ"2}k!~+עp8OL+S$IIM#dpNXH>^ON'|5+yl63:ulGM.?Fg}z佑CE`*R&"$[F@ttJ֬ZKrr g+g¤Pe?E+0AjE<%.!YUwUqwwCw'#҃2-٩!-9DvE!j'jhs`Wwc-K9r%@#KȒD ޚ,q*UXN=MVQd HHh8bQV-ksUܵ'[ly;gfP$NI]M ZS1X6N;NʼniH*o͛Pv^Ovm8~#Գ0 $I"tދ]GmW.S:snzciԸ7nb4k;#XlݺףPT.KзwOBB(Aw+Wg0[N.0\b2&]AnLv?Q߻# 0m0R۵0c?OWxM3\0)z#o[r5K~$jڬ-V45=;wS >/_c糸t5?_oL54Vc~3etd $O}SGs+$e=hT,So/ {3Xѐ(P\5jլ< g{1hk̠g#2o\5[~so7c|J(#é+ (_(lTx{VCrkyt XŁC'0eWhjZWB;حMBR2)$1-lXZC@?/D4Zdpm^j؀Nۉ7,^ZMrr ۵fʤ"0OBl^MAΈBl qFt w3FO_}1m[wb2psQ ne6od2{$աdh[b^Vobk:K;N&J@m(8C!p I:Yy{$aШ1U),&j𸗱URQx {"EjXNfEDDS'O|#LLV-ͱb7c0ͤL\KøZ :͛ :;vMo2~tS ٿ Ϟ`ca܇weɲ4~!˗,pzwz+۷JpA:bK4iMK(EǗu(>[Zʼn!lV:m,v4*ߏ_d-\rT In?STETL^^J/Jjiڨ.v wexzx0|.sNUkY8ժΘ옳~+-1Ш^-FjգL7u?Ed2_$B(Sk7z ~gT{r5SR(X%W`P+ 0P9DiK/OQp8lv,V+Vݎt8g.RYQTx #$oɭ?Z`.3bbxq#iл;$&%c)UDƬ>\t[@\$sV * s/cˀ@X,}2Nnͫwu晖;t(} I,en۳[=oۻU'T?G_CsB 4IG=m=k|RR9ݹ{6T|8xwhժ 1lݫw?~q.s'xqXf-3O u]O>~';(Z&M.^Dg${F~> tZ.:C>-{f.$ʲ W]#ރ^i^z{OwU( )/+W#BBl Ov#C_pG.uis̗fO|~,$&Ģj),*\^$ }w<by'W'Y]?Zax۰Vb_d*^=BFI 'I(-k ZB81.[o}ؚop#40~NҪ~t#<4r}ˠ{zs5}#</^J*KWe՚ ܳcy8.<`tIRDe)IbS$(y!Eߊ( Dg (tzMl.I_Maۛ](,,?Vz:VY(t~ч#e;weV"##ҋE0*0:zXDp VAm#[u"*Ypg՗f=* <>.rmڸ7_{cNl-,,"2Z4K.@n=_e}' [5[%dWTZvN_Nl(;Dݺi x!ZiYbL?'х1|x|>c>I:UvǯHVq_{cqq1|_Jll }sx_&;CA[d/1s67mnI͸{7n~+FAT`܄I=Q;i:̙ ]!yuY9>aCHMNdudͥqtڴj!WhߞN0R^߉϶DvynCX{^;཯} s(hn̰FbrAּHTmQ~.~v\2Yn> j&`hRh0Xׄ6Nl;t{y!]O;K~U&|(MD~wJws 4E3Ox\*)_ p}'aTvwM[ٹg?[vvV҇Hn=_e f EQ*[K3DvL#:$V;ʋ?rV$I呁}hۮMߊfaBlRJ31_]D ~η U+pN8yiҖ_Kαc<6x(Vd2ѻWǏCx۪]7Ndμ>ʹj`_!v-ehߞOOObKN|FSTlؼeֲwAl:\ԡ[4%.6:ԗ IVeѸe4YeyޗwPh^jr"#xj Ǚ_5&;Zq)U<'fo`{y4nG呗_@͎/WeIBQ4FAՠLjx{} e_$ FCL:)M&Q9Y!15:wmo,_ C ׳˫Ŗ1LIK@A h^;ƌ٧$%%UUٳwuz5kF'Lkb0yu0 zr!V@ ) s,)UP-dhIz@pvlJ>dG(2aCIII*y8yV.ˍl uLU&f) rِ<K%lE0CĿZ4H\(DE%X'\Դ? o[v=Lb ̙a2 ˻صqܕ[۝e6s"9-4-ҫ,m)Qy?6>|ϾPG91s?ĤSY~uz5j\E^=IJJ<+oK~hZ?C9&ucϼZAO۹{WQŒ0pեxnC@ ǯ*,jN^C^z ayɎxw{ tHIJ =-S=\*i6Gb\Ue, <Ȕ!36WUXI6cѣ)ȒDdZ'm,v."RcMeũ*}7"}=V\|NG`?*t>iSAibmOmc~>֑IeR'7]`th+\5#PU`Bl  hVh$6Jt%Vu#Iuې̧N.FUUiՒAWp`w8Q~L&& VST&N;vјXmӚիװx26ϴofv{vSWRSۇ$&&͚e6&}5{'"kk"V@ )(J0kGDpF< UPdhKIDD 8;yL8|EE˦49""ʿsO޽k@`2ǂΊTpI,K8+[5*AUTʋP{'_e Zqlnj_TZV2G=FJV\.Njj2~W[gOb|\vvK'wڬu,-[G^=NUecS;D?"?.]I_}Ͳ+s-$H^7TvI0\wq~vZj-Ͻ~hoOI,Y9<depӏV{9&MSf~՗;yظe/;cYEa:^-F-oiA  IDAT5+<]>RLVlaɦln&%;*füF،;_T{h lF @ڕʷKq8-O{}SyׇDzAO,RZVddIF%qOs\2M.St\zZ'W\v)=HY۬D\>KɄ!QdYFe( 9x#G}BJr2_܉avС=ZEp9-I/<#(L\l,[mgmdeeSXT3O Az"a[@s)[*mtLl=_DD 8;̚EEtZmۚ_}~O=1;w:_k6ׇdDUve?KqXx1(PN*?}2ՄJAIUXlq'J(Z^lMIM_\pa-aBl7N`Y<~9) I̞9*= lycRSxG;mv oa1"do8 @xbcϊzSPXWv!;(zn!,=h'txgLrp>t ufNWYl&~9`Y nFz焗ST}iwseڸ<|%+װunQhӲ)W\^eߖF;u1Wa߁C?4Z˰a6seeӨ~:/>uRO4(lo|@^~ah^:<;q|΋dچ+K{ $ $Ѹ~3RJFEL R[u@k81_ os)Ϟ5lW@(6c)iMqHMdj??ͣ$%KhHJJIFͿyV>/))VώCe-[y{N40C@ [ebD3;EHgBlT 6:Q&>-nw`0tх } }ylV֢"~рPCٚB8]Y`D:%%[ P&Vt䦵# 'dY"2ZNlMNNotԡF-VAbx&;KvqILelށ :|\о= zkzeGq>B>ѤΝ;n< ,СHDk}訨3\r5lٲ=# 2x$o>ۆ?̪r{;Cڶ=y?e-igx29Aoi nvd3A]%I1f4f|?IR*Bp ".&G$ڈᠠEQB=uQbᒕ{kD 3mڴl=[mw=(V^F7sm7V#}=2eEZ-clQh BI*ZQZ4OB\U7eEdƚTcIH r?s3?~I\.)VG`Љ̋2nN.='ۏ}m9q N܆X9q'GhIkӑ..饭6e3ٿ:G狂!摛GbBBht/ $w}\.</&FW֮[#d4nDFF'YYDӬiV}c;Z-'yyع ׃^oN4֮[-DGG@BlA2uL@j!%爈g!K[d2r5>.ЗXO%CjUU).*Z98]nܚZ fsUoVIN YTGbM?1c$IDFZBՒ$OGEh*w|׌eOW6gɡ%xUm1mH <9yv}̯.&+:M3vSWͷl  RX>oдiSQ0hѢI˱|*ƍߖ.СX-7omvoޡ@Pl|ٗc+yFzVY9h,91u˦9i82wpLhzC+De 3 yQlش f  U>q92g|~?-e0={ݏ`ݨ%}FO5k^;{p5au*tJ/YF3Hb$4nU_U!2B'.0_o`.xS*cC$K&ˌ,Oo+AHV$ b,شy E4i;qIK#=,(**j\UU΢ˉ߯ieß%,[!  Hغ@CpF<{ UPd۸2U#%4 Njbƛг.kjz]ds8?KFb1[.Y.7#%?$Q_TI,\dybB 2RGXؗN5,]&cBl'.gOG2t*ޞxXjzӹs@wh{?T3?v.7UE9{Mu23b1iѢ9o~}zW~̞ocFE'M #=.~ƄM^a,^8܏lGt =`Y&t+> N*hܳ>}%Am>"L*y񭑡!RxvC< 2͙>~jPbQ)Ìb+WQt,*ĩx<^R4_ZӶee-2޴?H׮/?(_D@rb-78$I-k41Im$N^)gx*v0g{Y\8Zd4$=EoGg"I%IC84ɟ^yMV7t!6&xZ,(Yt z zquV z^T5'!8+Orٲe+ s4;b Lƍ鴡edbax:t~Տܼ<D!  9-K4!;BlT 6Llm*""n=6nwJ[VkaUxZR~Gi;v\V@ P"jX?['oD ]J/(+8*Բ#&rFՂFS&D3~\[cԯ[ʆ۹k7x:iitj"7mၶHY?*^/sNbLk~]ÇaE}*V }y~>K.Sâ̳B|\))xrsh\L&#[mODzhFӑшn7u^=1W%8|}~h('v/Y7>\Hn*z~Sյ/K?#мi) ~>mռbVd_c4$_|F6.|a_hCIڡlof#jaP\qՒtw?f >Ix_/Z5ϨU0mۺU"=*IMpFUYѠ3&ܲ=4q ž%sϮrqJb<@I6*;Edws$,mu-[m2Щ$%%b*yJNE"r9x<`_V9WDaavS׬]jTdI&--5 {IKd23p8H'**]p@&6;;fM% b@ ˜|RkilA#VAmj A5CDD 8dǎ*q1<`O ,ZvN +84VlzfBo+B  PK%7QiZfelbV[)j5̈́ UOn;l/gIUs_˧o}5q yQZ\ڔv#G+Wﰀy.'sd|%FCwpUߖ,e,[<&#͚6o垻nGׇ}yQ۴jՂ_),ʼ&z]LJ %BlN,.:ecЀsߓHLL`Gu߽lď;~"ISպﻇ@5D4m$Kw!Τ]Yt9|6?V%?/SV-[y]a=)䳤Z,k֮{z!IS'O5#4w>} @UUb9Fѐј[p AxJ9 EGa3iύ^.*nr{̙x^{n0 K-w1a,89„pQdIN3t՚~v_sqNVTlj1xy0(㸴tܫ~ae$|@LVMϬ%)$"I(-zs$i Hi5Ẑwv:uRh ] j~GT"RHku12$ʤ'z[K%Q/1-[`O5ׇNEф$!h.[A~A HD|\]oBll̩sp\DLJߏ(`8%VPb@ œŔE8[Ղ[w[#SXqdYKR$V[$$;5)Trd2`0B'K/sf[ȁK`! +}=Ώsx} yQ6;~Īл<'۞xz߉!-%ےd .q5=Cdd$-[4JһOf3?4ԔZ_={ҵ8ƍ.p,7'>73f4jԐ\C+.NJc՚ (~j54nP!=k6gO[_xa2֫m=K֑ser|~'?}J|1vtb|,uRi^DV,L&#F^hW({</cƷ DŽ8?=-phMWd4Tnپc_a%I|l C>HfȲNw/-mܲ˟r{N^]Ю ßy߾yקԤ5wF]YQLcHlҚ -+bS|BzuD ޚ@޵(%,(2&-w]Z.[{-Yʲhڤ17v\{a;$0|^$Yh0wdEPNII$%&`2URUp!V@ 9k ?%Y*!w**}_'#Ç Iu`d &3kw8/{ ؎LZ fJG ɴYK:!%I`B젎y}ؽ~j"`У}q0oVAd Mt:>ڏkF]poHϊc,M3/HDw φowۿǬ3ӻm/ [P!-(c}|T _OcŪ:leNzsWX՟?7ny\~ercնbϿsضm6 =Mrr( *O&Laڬq9YP'5dIBQZ z#QV+ q1DGENJ "-,Z;cNaQqhuRxm$'&PXTtvz}U?~U%PTUr{p=nN?ۍ.b'T/&{gI +K2"#2ڒe:NѨ9„b!6&ؘ(b# $YBzEA$dE+,Nm1nL qZ4ax?l"~yQ:VVEeTUxp:؝N\n7χ'Ϲq(<6%xˋE!*ʊjIݒ1X-fb#1%t}QULoݺпש6_zy׬$ѴQ}R+IVMLF$7o)NlAX`+ˉ$Qn ꦊU!G $"QrHH^+өyCokY{3f+WqEs\~?,c0J *ZVݎdlU[@~"u bZȶq ebk@pj5#Ge y!թCu2m vGW|w[#2muz4\K@_Wqؼ~\~?)U NĿ*OƭV<CFC^wqk4Il1NT A⶞=ϴܜ_r|v}|(,V7oZw!w'!Bk0iն_uwD]7W{,\St rb4i٢9={]wȑl+Ls.s/+c߾:Ej3cشi3NXFZn7h. E~UeeEAg@Ha ֲ;̧#^_N͸gTɳhzFL& IDAT#f %ٌb"-iAFc20 o0u .6 UUE ?J@W*ޒe?ேC Ѡ'?|'9WZQz !VA8*m[wp1/cԩr!~vK-Gq[nK',;o3Ơ1p=1պ˱0֫C=mNDFD;ےe|XVYGA~f6;nnupreWs!>puukn`Ӧ-<pnk|׬_'ԩetK.慗*LĹmZJbk8B/JF#f1 QꧧGa跔% VVŠa2ii%&*H &рlah0Y_mL: .&O/<|g ǪOM1O֮bqmɭ'_D6-ϊ,2FEtUP?Ũ.Ue2(T|fT9: ct2RKHHhI!>@k3Uٱ>zCQ44i^Z}^/,c4e2/Vzb@ œJVbQA8#VAmJV@pϿ284lԀ_JbbY}~n>Z z<^'4 5~bkECPJ o@䣓lÀZkT@JzN$ HP8U/Nȫ, S2(U\_&)xԊ,2V9t,eYc {=.Bl3[n^Cv*7ߢKx]Dzs'C pv 4^mzi̳P.&֜mhd m[ k߱}u0 mt$@u0|@j۫xyǚ'&&vmZ5ҫؾ}'_C}cYw<Þߖcq=wpŝٶ}7z'^'$=zmxZp8!}~|>~ﯲZ/KHJɰ芢Aՠjz""FEKrRIq$%`w8tTmZFQNnJ\z ShҨ>YGs8nȆrtq8Nn.;ˍ+?4|e"KRPzSdmXF z?]OQP$ZZ :A[h0`0h "(h Zb_PHQbbb#9 6:?D-NY7>k<2O9IB$dE1ò rܤ%ߑd EQPJ z=@RlWI ({ =mvl6;N _ >KVP/gYtZF Bo{}zm)Xwx=RT<Oώ$!J0{k| [c3á~uI}0G fXht]FPuU>@BbbC}>HR(KH$Vb@ 3!3BlT 6.Llm)""̟ '{,EiԸ!Ͽ8 yB|:¢/r:El6U鐓~qRU_)BЛ m ৽l'^U,c m>c*>@J[=[?j^I5w1qy ^[kIhѲ}Fb/Z[7U0`h,{?^>E>kS3jgJBBqRqwu/Z{ß',[c-fڞۆ~}zsUW۵k7]ݎ櫉_$_p\']&.&$d:~KQܼ|rr),*ttq\x<^6hi{aeвQ\y 3 T+EAbuzF&ޟcyL#6mEQ.l߆[osҎ_.=nqقYʎ,h52a6$ IԠ8WAR- eI#@  6Q8>Ϗ OUC Qz%nO$ѬQ=RϚ{H0{5: Inq+Am";s?;5XвICKIAz/Y` I -ˡhMysNxn/wrDEA#V@ Lܚhf bZȶq1ebcR 8 /Lu9aO4c_21xٝN.;!( &4[}>?vDax+\n|>fs*@E I`@줁䮕WYdڌRN\%@#$$ j7;_j4Q4zQnyV[cǦbO- Uv滼G7xmS_}=,Zh!q5Wwry|~2>I:gl͎c;-x^no$Z^~Sj-ν*:D]mLTh|g>?O ]X;[sZ.mp1mSTvl1XMaa!111tCsZ՞w宿V-_G3¢?֛d􇕲={q̝3BӲe u/wq ݻodiX\U o|Ȓ+g1GH{ε~?VM$+;'Y4?ԋs7/Q( VҷSbp(*a3[lp:l| n/'ߊgQ؇ ۟{x49sW7-ЦU3:_p^?x7?֝Ca%V~9r$"S7-{nJm+Ex0:t}ܪ(o݂̥[&,)$6mCL]ng)w鴴nA"T kd/p8nWW5YCBQd2R<9$D*@ y*3e3hf bZȶq!ЅNDD 87wڰa6䤊[WKW2O/펒,*ebd!}>vV3 b@edhqb+ %7eGS9.?C0;qٓLrh^T%Fki)A4I;}Hy2=%˛B;.Zl5jv[> `oi9z@YNz<1Y~q.^Ν:sOѬ? Fvk':-4]5!K27?6bظᥜ3; [^.W5RMIٸi3n$ zԔG︗Y@wxހ)7$W ł E7lQ{Z (E ATT:Hf^$ b@p ;;igwV/OпL8p|l۾ju v07eecu IP#T^sw,[2fѲY.wݽe9~*愾kCo嬮eF[OCIiYhXyӅ.`˜QRrxx}xa@(sj0,[AUӴz+Tٌjnnp:ٱ; MӈWϮ?7F#-%Ȉ?ފKnwaw\Zjgv4xBCTb0b&ib02l2ҩm+V?do-VW$փ:XUU&6Lߎq vu[@pڱC[p3Bl 9q(cY""A_~S+@e4M+kO=ۛ_} O r".˸Nuoo9p]gAq'oOqbT>"-8AW` |4vN͛"I͛7}2 ̇߯m>g|g'];~"S?[u&Mpťa߁дF ?bZ@b;, K2$ ,* "i,*fŌdb1aZ#6&h,fՀb/aԄO Dnn,S=:#6n>5Q=v?Z4W[O?rr^1!NxyJ -BGʲ|EX6}6mہ,\seZTEzq{<79xCw<믾^'OdzYk1{ژ{ɐn>r|j+\K;uC.޻wC$$ubsV<~0.hޗ1'akޮ,ܻ]I'CGǤIHW$Վܰuv>;F#-4Jv 6[ ؓ2nۇ^I쿟'--svE2)<򈊊✳["}o~V^{oḽ)I<tlۺϙ,64/Yoa~'.MyYd,ӯWO6}Q˥VMӐ$p;7k7?YŽٶf9>Y[Ekք̡%IB11GD۴5IP ";Yd>_z=W(Qtn8gvi,k@tE9<{SeU"gk+! b[DP_bVqЌrW.4pVZ{@ŏ8VXGԹp:[}>?.WMn^"fG$B‹%FgI XX풎+fCevO^7薺<|2s%Bl/^ym8Cz xb,县::L3i٢9)91yTgkߺ 2M'o;U9=%WQk&wsQ-S;!=*Z_A1Z=]}lu nFv[ᅗ^Fң{w~z~>112bcb;}1f={Ar\=p8uȒIJUxgDd熾KMIbݷеcz/Blm8,Yrc6kf@Zɟtn߆>a5|]4QՌCr'WWS8{'rlgv*I`N̮c@P{:s̼??$JѴoB$p<(A5ۈJ@9U`15Hg14l4E@ hSUl-!W*rpHj -֛wOÝwJ .Z7_AA~݊>SE0-[M5:ѶXte ݆(K4]REl5)i.yEIl_lU͂85CNBlW_w3/U "͑v z ~;N'ӓ}4,Iפ.oq)ۿ={s4]{JWz4&ߕypvY'ΕV3{/HH\n0iQxJYg1[f cpہDYj>/1cɟnӺu+pCdG慗^%35s]/%[Y IDAT펡L&r2Zu>c>˯e]J\3jJ 8MXlдIesfRG0qU+muV/Xh1'nm6t xj=ۺm;W cuޑ|N)SnF|^/))\~%<<~bʼnD 8Xb }I̭I<ۿ$I#(bdԶIv,^7?&2"D겻Tbf"WZ@CU"qg(Faqi-'q(꘍ =2x|p&,Ϳ^+UKz_ *b>A}EZ!ǁrRnMQ6lټ`0n+/eGJVX7^lu_%[ 1Wd\vJ(tqnY j"9n7nb[@A\KPkGJ7ңN/XĴbZԱ{7/nkƏb/?{JJK9[ou }1/Xb%E$$^<ȃn!N i̊5x Uz+|ږOfg߄>3tjFTh=d8|$9y sߐ~L^>e.^xs$sQ[NۙХC&=8Eż8\zhބW/b"E.` ocFzth0yAlC2ь-&H(Lin#؍H$c7xX"F>u?~ʲUsքm"Ü,Kt(pRσ(Xǜ.a._Uh΃ZѬQ UQaMBBlBlAa6֭"[F>[ۉ ^x?a4ޣ =Q]lo~Nت:eeN$a6X;ea+IΕdSbG­n?}ʤ4NaбSZ/{d! >W^Nxx'#Y#29?T~e/5vKdC\3x)/OMfl~dGYfnFۇ[o.;uo۶+^/ѹSvƎԱIIXz ńӵKgf]%@PR}Mv94X7 !O?g?>zl\Th=dǮ 2|f͙ϓEǶE>cܟ)- }4"tmg\Cr$!QĤgԶ;E4&AJ_TL,QVFPiŵ4X3#5t(ygm2BPЂzPG5YHljfg_a&)ӛﺝ''aһorrr\q S}Z,s,Et]j6 7t=7\wh,A=g3f"[wMZ8 nfiU'Mg?֋d4o"*sO/9YeKQ۸7 b` Jؚ!2~ɔ/=_[-fzi)5~?bʥJ8V$7UtʾEhNrnbEP%{EW)yYz fL&Vt{avڷ eT[6惦A]B5[lE=voY^<蚆j0ri36̠sҸg3^*%I:j@@ h غVCP_bqIyR 88a*3EYEIKOɧIӴ#]x=‚:+o0p Vʮ5@,I ( oe29VLQ\IX,<;O=h擟)j"VAݱ"^~\`ޞ? YiȮe{BEN2R }9֘)Ӵup]pIE%Nǎgm|>Iׇ= ))'>]9l޼^x5kq}عspgaZXnii\`fQ h@ڳWG|xz˸'#菧ٷ3Cǿ?5IXٽw?/ ɮ=eSÎ]tܼ?n2_\ҷW b̷3eqܡ突]Ȱoy d ٲ}$I"eSbD*c"LI4jӅ"(|Kn_ME-A0GQTӱMIs(>6- (`]EZBj$ f;I-eo!;J0"OlD*;+K 21dEuSy}t@@ h ,غJCP_b: s(ck$"4l~a6S'FAA!$=Iϳ1Ky֝p\U֎Sl5l'&NSl=|-..9|%A](٪G-3\iBl'~;N;~`NcZks-f/Փ>! ֮`޻ =VХmkVv kT, HlYE"d?YǼ5K| 8w74o\\hJZʦ"tNK!=!I2)>P׉$+XǤtEn6=#aWbREeV4XPU  [p+Bl9b* E h,]1lt]'**n+:r1rćYy^nM*c0jNlu=x<[ l[ߟGl"A\K,sJlHͯ( v EC dY&>![n /[b>1nD^~ Z4o/?yp kfs={xK}R"RhЎ.|z Y%YLI&E%y7r43gf=Mf23pݵ۪n3fqM3zԈZ߇VlJ֯ط%RSw9G7QFWZ>fgI7"#괜#Mf5ik$ KGcwqʶ9o2^zQ0ڷɨQt٪u3f"sCڑz(*:⟿'@ZV[c4Du(*(b&Ȫd\^7= a OIE%`[ݽ`s)MRT͇tNYhߦ%qQ"{$Vޗ(XEsPύb0am}Ree E3qidnTTa *M*Ÿ3)!UPk80RUlm""4lv`6\{Vp GWdL %fL&co[* Nj (XՆF'I[k TbO_[2E+VʏvaCkun& UPO/3ad;'ӦN Moh>3G]:C\>'6xe8.tt,Xk,-cZpr٨&e8/z'*ٺm;c>e=DEEѽ[.t=8OB/k>eWz֬]϶9p0<^OEf0%&Ѳ^r1^s` tnYʿz"\ϋobc@v.E$F菦ȧVns=؝]H)'_Oe?(9QthRdXɊFTJSR:9,R43b(*񠆥ry${y{7u9B_^D<:UE[L6- k|˺}6~e|d@x|Lc8Wq6Z0j`>r*AUH1tפïA;*2el]"!UP8\LADD hظ]n^Xv@D=yDoe)CrNk2C$IX,fcg+e%h@^@fKl5 mɓhIF~9KL ݆5* Y-)ػeyUj1q߮;nSf@ f"]>HxBSU׌FY^<躎IxbS$N>JQd,&Mxd`gNVVރ@PU  غXCP_bVqЙC[EJ* Waт%x<^EeFs{)bbOsDJJJ묬?pTj`4y5!:.|>Pf[O7ֹ%V%A*XVTU( %p8ܳjm.&Z\ n&VArٰq=p/O<'Lbӣ{W{M3:^ 9Xv2_yNjDcZǵeLjRl=?/alܸ OӦMf@o(&Sxgi8?n;g\-_ذq' ׇj%<"84ICvt֕.]:.*N -~8en5*=u{Qbká:bbǟzvȰ[f{<^ o3CN<~l"֮rBeڶlJ|l_ad`O|v$,Ҁ9P`ކߘ>cyy :sT3T!΃8뜝PJfXh~F۾_M[ }:ZPCt$TF-PˬzR+(ގ@,qcNNe Es_ttzE! N*J`&[p+Bl*9Q.Vfm5 &3slȲLDz:uyٌ ee:)?2"VJ2սv9 bkլG`C[k${%'p;Wp9,E1km*/deckq 5z,99գ#~8G5kYBW!NRxm3Ɍos?^5e9/\z+*4{oؾc6nݺpr嗆7>$ejo+VsY~YY(((r:VȨH%&мY3:ulOڥFI  ü9Μ =stn߆JjJRI [=^|7?itlۚMB|=#G|д0} z cm4vmX=|J6DЎAQ D6'mwLvRCbgv7eͮ,YRǭc0Ju(ꡗ~/{4hM< 7jլ )X9poF{@ V!LmD4j^%?Z+{"uLcR0ŜԺEBUcܷ)%9 Ȳ,N:D+Hz}- IDATD4@ )yDEGrMpUUofǟp8뤜p8 G|'26Aj0 {l5H'E@$bL cR9e29~2ʲn ,i&̶mxG8!uP3L! Ǹׇ/)RXXD^2WIj:A?װ% \\7BD:5HG,U[g笔\ЬӔ[_9p %rԈ<.d99p[\CLV<5nkE9n _0;3qk ^r4aw#Io7FRTR,ϿrI9^n(bkHXS_lBl[uEs㊭R_)xˇ?jZ:$P% aT6 GVDoŎ[e @$v⡇突(*s1 Up3?x(,,d2oo)Zʦͬ:lG6ހBjDc$u&=2?vc5(Li)*Y~=DDEdD8KQQ1yd (..}{^f;!qa&>–m8x0p g_|Ec¸:wXņ ؛EIq >EQINjDF˖tޕs>֭DV.@P7LGO P!ѩ}|.ckz|dmXg 'ZIbch<pĽ?X8K'-?hA 0ZD%8#׈  (މ@dL(㛜Ժ$IhPHrC&pfHsu"VA]#V@ 4sHl],!UP8hEլŒ8,(2MxGHog옉,<Oxb(֐@X?SrUQ-@ WYN쪗o,$aVdH[ P6E-oHx쉇H!@?͸QUHuo*QyXy` z 7E"9=Rid'† xعkWZ**Jk~@0@  ]TUh0͠Gg˒%rۭ71B/XLII 呔DdDr#IVXҹ#}zOX̢2AR)~=g&}-%e{ΌMx!l^e`§|ݬ BӴƢr!#ٵg,sI^ z o1/\v1kFj4g_~%+քm~\}E5.jK%nϴ-(^8H0ZKH&y&QFb[1[] *+,t`%]ePT 0jeT'%1ﵐ%U-!I2hVK5/VsR߃Xb6>dYbTLI:32jv6|(k$. *Ÿ[pm[MxIq"*Afi|,JKJ$XnF.Oh|?뫓2:.|>Q;6UUnhpu^?b[era]2-,q̅G;G[eR$ ,cQd0Y*Tn? SrR6 &Ǝ Spt:q|>4]GeL&aavO'.68h6ƍSNj?̘Ɂ\=pq3q&}v #=-ѷt؞ؘQyണR L5yRx!tlۺƄ73CǾ2-ܓŋobw~dY '5%? KNϿ#͚` ̚3`]\5SɌ?`ݿcPU2[6%6:Rod`EDT2cM]Qr3;KqINb//P>ꑳ(WI. j4cNh=~{8J:i|iۉ$ѱM1Q ^ hϷ9**Y=:0ZolEA?b=_<>H1gux٬`IˢS[@@X!uUP8P*Q6.bIdg:v/՗b:)cY?pTU%,V.wJV]q8\Џϕb$I[tbwz}hvLaQ,FY¬*XU`Qddh%|q8p<*Jxx|:LnxG1P&J*8Q>2vqӼY7_Pk d#0LG^,䅗^rт.;qvttߟlDUVҝ^z}_P@AA!ES\\BII)v{ҹ>aaaleeez1DGEU;Ăywq\v4kڄvm3IOb@ _2wNN~AQhZJR"Oܥyj-7Q%)u7Ncu@ xS[@@X!uvUP8Azp@аڻ7_m; L&tsdH{ٗXlU(Jmieecn`P 2P=nޏ=`UeeA -_.hTQOE'As@J5KPӎ[12咫*Kd `Ue̊EQK.e4[E!:& ]),,B4TU!q w}+=ZSXd%[n*3@ yz5/{xM˖-XdXrٰq3LttSlwU?gnoF@&JW RTPQE@K@ Mi"H'IHHfwo/?ݛlM6ey}23g~sf|Lf}anύiOo+5{qkljf:֭k5IR3lӴ0-37@Y{u~,ɓ]" j|#~$gcF /fڔ؎SOij/?8WL0NAȒ嫸y 56*š xng¥g`'uÄ#s'#L?mӲvqCeMm*aU5]u!eۍWfTlƱMPT3ĩU'#m{:DVMFpl Ew/t#:Gs]R^ɮD [%D2Dxd8$6"9X;_d(',[o9d41cGs0j?>_/I"Ķ7Unt{ٙl Ja \zAh kĺCr(|v)kKg0,g ʜ߮nBWSUOU2#_ 2{sqar?5dB 9Clr/;'|&~6>Κ5}ԭYC0g琯m˼ۼ,Y"s/+- Ʊ_aױ8u5zKڵX]WGݚziljֶ6"(DL:aضS\R;j.ۍ Q^VFyy7UyBH$?|}h>+.>N&ֻ~R:| [r3{*i2mD~{ }6Gcs+v[T;{gr_iT:oˬsl֬#&O`;6`0@qqaĈ=ѣFQUYA0z1 Ak[mNkk+mwDH$d2 l) (.*r*)++2(++3 ~NUe%2ɗA ?$uk e͉G(;Ygx gy#O/ d%<}ma!p S'M~'b{LٍxM5ԯYiZ'} uvJ_Y?@3(sԡsNv6zI|³i_]9L(S^R,(/rT*'LiN&Hcq2$tl:E&d0,i`mԁB%v4x!_g-jX}ZAkle(ZSh8ҐF&C /ʊ+V>y=\yp;?=>=^z`ڔ2y}wϠ3C4N9(>k\; ] 9cuJy[[5Uev˗!߇cI2Bjn ;t*I,Ad6_eĬ ǁL6eL8z4uW+8eo|Ea.ұ6ƜU,]k4MbI\vDyHv6R*H$!@ '녭M2$AVI0֋[H6_y(+/bUB䄠 ,kVNl6[pr9dIbi/756Gp8 nlaҚ6I&V00;a6pxWz4Lmi;XND,"ElNت( G]=Â\ n7SMڟ^MyJad[sg@ @$qJ)--oӺ )..j>^|+}2A8,]ff,Y&"2 )* Q]UZFᵌ1aTS\TTز-Agg'/Un~^|i&N/D%&c%獀Džg™'@]OgTAȜOp]..:t=~y},_UiϞKkP_T<ߍaܨm0eC:uaR i܊7)&9qq }-WVկcu}ˊ[P)!.tJ%p򃹽.P6\5.MŰ>"$M8ʇ{C(__lp~_ë+z,]ճҔ cVU1d,6$_ lkU[\ItxXo||dd " z{8UJCnسhF [%D2/wm !C")l'q& ݷ?O|rrj/^BܓrBmJ u'm2ri֩%ztBvu&LdMq%ly!$*JyUAJ_vfM:2q´m~8^s] \s j^ Qpr+Kj;NNjNl'7DX븉:6;AQr  .5/֎mۨJyEv"guNJO:s>Ʋ,cW~{vk^{] ڂ6Mj#6q yirfbR2LL6]{%;58A_Ha$q'Gx;9gK?̧g1/n?~Ó?"$^{O<B?'w_fiRL۶ YGӦr_dcOd܏'_'D"!Ns`'ݞY.:4}i6roxOvõWd![?Oݹwz{]׸av)д5_}ՋoQ{N@qH:nH ]*+Q:M $J$d @NjUCD2XVI ֋[&#" mn|lRtI4=_wJ$tky,_LpygpmӺze|\C~>2ȃ K?o򍝶x}HtTu ^p OѲnb`'n;a46I"0M39kx=BA?%+V`? C,h#.U9Dz&dcDVPT= .IE[ l;cBPR&~ttF-k= =v{Z8]*PH N{ӶMbͫȦٖ4^-/򶭊"4q5t8X{mtMfc~-_ʕhnn#L4%Nc&XEMM5O(a5cQTWd`#D"4/Tx]C2VIg 9Qk_D2tyO /әOȺ\.l J݄nnt:C*" l":o^gL&C*z( ^w>ѭ!zC EJsƆmӞ1dMҖ8 զG>nxL~&ӼjS'q󭿠nnI'rUaQ;$s|Xg7r_XutJ4 5m{Z;*].~E!KKpt!DN$*4Cv!h2HdǶrRnB+Qk*F:сdN:ج[,m2& dtUukk`Zƍ>C ,ƶ<}=# HmYN_V'л.q(=SFscmxрWqmt:XS_mc8o6! ?_D]"(LڶM$m Պ .݅# P^VaL8iSwg'SQ^dR*H$O\Uwd8$)l;q\tNQH.sfЄmۅO`&D)xte' [sTnkI$RUUDr@تU@%i˦=%5X60[  ITt::)TlD|>&{BnM'f /Ѿ޵cq$]rN+J<%KQ[;E>`|b~xu? JKKX/,p%b-*H$I =L6k NI/&<t.'t!7OA4rsN3N?H.5_I6柏<D&oǍΈaUhoGI344J1N!4Mq0Hyi1%E !/ZIN:tbA]SVUmd"F"UUMbxBeNj02֮eOYq{Nmg}C3u0-".cG֢oà+ʉSm'w,bj&l.,үMEcfS靛gWSUB>icJ Ԗ>Y8'x'D"N;w\XsϿȻ}+Drκ>PR*)//`0Ȝxi*gL*++DNN(dtqTURRRBm0LAρG( ~B [%D2X< <[` d0#As=ɉZ̿2*Ф;nŋw|9tPExޭ J!űm߷Mn"i,9tz(mD"iv4 ߇愬Aar *0N[IyE{&K,kmA$pPItT(Qԝu7!\M>/))['ú ̸|p1tqp]7^vSM)Vp%8vvF)* qjj{U,Y/1d1M2fN9DPD"H۶>13@roPx˾ͩ%;7LA8E5u\x)WA*.<>JOnYay; tmȠf:V]58mt ڪJ&tD2E&(DAւG)|drH: Cusda밲i'X1M敮:_XwHI0;eiljCaXΞ1O=,k5f(+-eԨ1m*_Aսޤ]{]02bpy_UWrUuukXz55J4#5>555T9H;/o D", PC2Vɀ9N녭GceT$wϻo@*Dl؂U!!ɒL\FUؚ$8aaY!@5~nj6rָ8$#2,Qä=m0MvnքiC~b-ԫuGXL  iG%!T # !6/s\3/ ˲B* q!q.)iR*6qi|,FOfm3}'ɺu EP\TĈ98gze@%D"'eq۽w>G5_k=[`67y/>wM_/ٵ|| Ýyg睾.ZͭF ]7]GeyӒ~ԉ(- cdYؔsiMg6ri]/h<SY^w;Rif}9)tۡ;?XD TRxtJqcE.6> uKlZH2!aθQ#VUuq0CV UW\tx!9m#n62E+"T56܋*wui E~O*;M?W_۶, UU xE+ǟp}&/><#Gou\y5te,b k׭#cEE!v2c9 ?GHaD"H9xx* `F [%8^zD2t|y&lu[pQU`߫]"Y!MsKl9VT-#Ld7p]|9їxIn0Z$,qˏC8kБ1HۑM>/[2F#-#Vò o; ׳)75McϽqm@T::!iY=h#{~sv(θWttu`0((H$0L~}σgޟ+/=@Nrw.e<ZToz<7k] -7Uks1a3n/<7_%nb(1yhButh_vLUA> G>[ ݕlS N,+s˄gԷ2"-D[h[ qU" 0u!Fݑ?/TX]i*C= _~ IDATTDgSNܪjxeGnC@JnݣYm5{7|<ģL0_Ƚͷަń893N9l>h߿;t ;T˖ /{|rZ L4N9\zl<1R*H$A | <MM͘fε~{k(LᄑHad{5{.#F 0SI$D" YŃ~W|d~𞪪"UWnǟ}ΏyG>K;Cshrn>64U匓h֑XFpÏ֡x0 b,҉le%EL33dĭmSLs[;TsVEASU|^eyA`>Z͇s?#e!0P<]IP^U"l"nȤ p,M]=َ5:e}F6c6 [4r&=q2Vmpn p{ǠC]nnDdg3E\Kk^\(!@WUCn۳h&ŲLUűm `yͷsT̸n.-[6kaϳbJ3O:K.P(MKRuIY~+.]M;B`nWqKI1A^؎CG 5H \:^Z- BlqxȉwB\s8d{y9s摈'*vIz;TO>K [%D"H$3_|p$Zlq51 -o)3NnOIx n>V4UKߦuۇHg(BK7z k."r~#knfF2n]#2,~v!q() Q]YNQ00qVԭ%kMXƼІyTT禡G$qB( m#plCmg 6#juoT%N(r9vD#L3А;S-n+P\Zo>evo'kñ,T`H\ EZpi*U%No8?B,"LSs PQQάs3cTU垻nߥezGc܏I3?έ&J?_;x>{?prN9x~?G4ِuW [%D21K d!Esqwl=QHoAd!H[䊹u)E{pc9z1vJI3싦i>EA.l 6rz9DQ"S?l!5gLRaV{bɠc&\.C;_g{I׬ȻxwevտXj2k PT=E]YQruW9q ?4 N-P(( 8͔)vh$;Huu5Gq߽"v}oww%`W^Ȃ uCF9NF [%D2ȱ( X]U6&`A [%8:EʨH$Cw[}& ɉIM7u^,xGUST0rP;;xYn.DT-py(& 6cYl2;6ZfL_Ǣa)M+>-6aV}!u>ek0^ eSQz] ,s-ڲ#x}U]έB[ScƳ]KRd,מ{gw{ }koE@QMݝ}NƱ;?7nƍsfr޸rg"D"H$wLg_zGsk1e7~|% 3]C:}_Xo;lu~oz5k 5Ur?f 엌7~O{xgx뻍Eue ڎI3ضENsiu\VWR c颥;1 24n@H +֫.8 6q,4gYux+qyoD5[5˶Ǐlb|02qH́/m:xҺ6T&AyV6P5r(!@ 5vU'Mt-"͒DQFN}Z-_O>߾:p]ᙙ*N>~k|;m;7|+<:^S<Ϗ”ɻqδi˓gg)lH$УֵTH0I"R*p4qv [QH/uf>xbh`q\1r0/1M [9FfUEaız]aXSOk{'l6'#'v:%E9֒А9+Rp xX:L{d|=nq!Dp+šHR;bREŝ.!\{ BBl7^|c;cԈkCnM[ -ju SZܛ>6y .RʠWwCM_sZ+x(#Qۢif,C^[z a4T.JFA)ByDzds-_Hb11;m Qv'GC< ayc ^;8ҋPA1\kSp+( ׇHai pqc6<qQ/{[oKر\~nu*/_K]}==prMN<ԳhƟt9guӤ /y&SϜxJ,ȏm؎.ҰS1Ջ(-Jӻ~;rJnuuV;@zV2f/벶9)Ue꫱q )+zANiIIaHlϣ rUgdI׸?uH9EY_uuWult>Cڕn CW|c?9tzF˲mD"#xqM|kuWd譹f1|_}=3:40yF Iɩgˤ?`[ceРrDlAp,Z ׺XNJ$lLDl5Q[IUg0{\}Ef͚mVuih8NNFRKXmX,F[IN9+xқe[R|S;l։~:݋ .:޽(})uRH$.%Ps][G "  S]="3vL~0MO5p3/5ˉ3v|+#i4|s\ RhkɻѲ\lԧ`E~Q^hHcs=l<~y}n ?I'/C^$w) CoA?wX huu}J_-? ~.tul6e/W~klvRV: ~c{' b  umǵn #$D@VSew2Rk-(Uͷ2~]@,|t νP(ߟ= Ӳ,d+AVuB`~p]h4m;Y NmX,Ѧۑ\|noK[!$~'q0`_Ws xsJ<).)cѹz5uф  B,nAkԿq=~O Øho= G*q?S$d7ܺd*XE2̈< }b@[~YdlGq#H#$*Ms]4p4s 5ۇ +G3LKFjk<=<ұZb˰T4pai;rc]S)p];QL: \s;9ຸfUIc[6 E>O) T'hj(Y]H;`ucULcebYTidp]CC `no|J IDAT6_IFWP׶t@N9ȩi 3_.5|u],u|>_#m**+93 2{uInva;ysBh'=~H[nC9H."b  EKG`08RaC#b)ҋbRA|Oxշ(+[Lr)aS}D1iit]' --02WzE<:iALu|< JYG0DBYR76XR|aiq|&t]gWҿVx ;TVT8J)?nj b;ElAA~_7y5uD8wRWM['8;<3ui RVTX;<̒/lH8ٸr:-!O4_@0_1 7n63,/You{}f+H,i~ 6 H3{PzۼLsIkV-ñ-LL$tÿAQVȡ.qVϳq)+c[xx3<u2_ ~C5 ])]꧈[PuxCyd`M F //ץt]Q_QF*ut`^o"]^)~Fqqc^m$ $lz\|d}L!&KN[I&[m!8INN崝hw޵jr; "prm!ڙøқm;\V|U`-Iu]t]#Rp‰7=uu}Ln4M ޟ=h[AAy-ZʷgRX>,i=Ͽ =@"$po oQ߰Fj=r8R hBgf3B_90#hr8̘u4(cȀR¡]\T)E7{L:/keFJbkj Ɇj\A3Mr k5]ˤVTh\n1U)} u(鴹PyN:ceDWJVcJm 5{B5Mظ2M t3 桛~ysڈ S C3|.eFndJȭw9ץ۶0R|]9eoqǟrYsӍuvӟJ[\9繈 U%608B\#sd[@y鶷TEe3/GQYQ*4#\f:9SHrv~@ Fcضu;-ס:PlPZfe8Xy@ϞȕQ܄͋_~'zr,*-E!: /.YK8~>E C2R,g_ȪnPμ/v$tA۠i/^[Nvc#,S{H V-mZ[ڞagP&kGkW繸v+ñRvJzfR][ިFQVR(PJtM3Pn RzKX$*լĵ3Ǖf %ۻ2tEAcvȉIFb((q2iGoװtrNqu6~p]s_9[S8>vܞ' * ;&#}[aFX" =(X#¦guu /<7/խdMpjk7:m3tmt]#eq\bxBi6uII\m2QZkSk6xВUͺM.M+>kLlݜV`@t{Nc_qϝ_R_WUQGم5b^@TE6 .շ.u]'a^]âʥd2E"P4Mbh"$LeMKH@[ڶ܎TZ5M#g5 W9b){n-ŧ ^l$á}]߯lYdI3m0tKGr1glUAAOƲZsy\ri|1 L}u5(ՐF6.Tqi͑%WQly~E# @,uǁG"@mny. I\)|\rKe3=\Drzf֭4pA?B}@-kSj!D4$R_0KR ]cpq+˰~97LRQ^A(WQF|? }-t#~eCAzmj=[l:<^ 774M_.vq6yywq8z(.\hsvUZ'b   lѼtC뜷qо\xɄCA)ްizND,کp(VCR->{>5kylM]IhñҩvWJa'jW2߈ Ukq M7'FxM9n@ V7*P+݅Th2+el3"\_0KҔ04vVCQSUVU'p]mCrǝysMVG}] 2IチvmdKp?q]~ȁ DlA|[n4OEVQeu( l\&MwޚHE?(LzŞ{M7άfoT*M"l%ޮD"!,C"֚MFrX,ќٕ7ya\jqf>+lAcu[5M:N4uH$w\0d+kݴZ4 88ڜOVAAA>b27 T4 ~/Dj6x)=T"ީy?[D~^.ȭ녚zf/(#H6_[3TR>9iDĵZ ~D [^hyrv2(MjLkU.īWvZ3*=Xv#^F DZP/|LOg1}cе!H0m JIq}_|5W^7#s4&G}ڃ=-ۇy~r" Ϣ5b묦eR b#)3kֽb lx,_8% ujQש EYh)WUHk^лH'_'  %\f ޮj$HFqm B7|J DHk#z9+;|-n=0r6 H'qXKn-5Uȭ!Cw.̃;O]]=_~5f& mY__ɧizV<_IkIpt6r=[dȐAbG}{ V\ōʂ Jt"8R{hZFLST:dhH9"fێX,N:meMk&6mM$#Urh*5GJi7J)~NB!\ |<>sjkp]99v}."  `;|9i3f3d`8h?|>:<_H;i&/T%Oo-J{7 Tmr49l #t8L5hs``kX +I# Xc4|rNkUJ;z ~[\|4T.J\Ph5׹~æV(7{=e~ƌ 5^yռ0nn1rHűNCuFHVz5˖L;CaٹxJk4OiwĚ1~;eqcڟ@ռx-+w(E(HQٱFõӸXx8n`ScX?|$<.(\'LAT?Sk(+[į9→{|FM|K.P7_}Ku|I\zU~|vr` AXFx(`IivODlz:fu`w@ a=1̛h4B$Wڗ_ǝptXL&2M ֎0 p 2ɨ  wY2Ѵ5ۑJI$˹ M nZ\-ݦ=XXa),m;J)rv[Wy{"k{:Evrډӊ*nV^[W_}gr*qԑGp P   IJ14w9Yr=fc^|N{c%_0q,k|2J\}!7>S,m3m<DÉǢ/JаrN 66Ts$RFo#nRN3!t$ Mv<JgdV+kxO%VhV[u_zwU4y隞Iv44@M 3 `ֶo芀`!\r(z˙5{ +*x>lz+93ٌ5O<}Kž?3|P&f7H;o>;n9`AVAA`4ZV5R!َBOԋ[oT*('h[j/-5S^,Qu:FcY;;#Rlŷ+{ iv'PN M~vy{+gNf O>,ʖNQJ 1[ h['}C]LV|nNh,F裡WPKQXTȳO=ʎ;l/AAM~s߿@in)z~Rv?4L?%_p;܋?.ɭKKد_F U/[B*rW)>-=JXKie]O }6Ջo]i:P.%Z%PZdN#\Ov!i\;NZi\jNmzkɭnsj}f^v,zk2)Jʈa f0a[iܐ})Gj~&qEҷ~\c p9&rup!u6p_S<>#}Gn/uYUA683ֺ}OFn]&e<U(ҏк;{Z~y҇,_T*BuFɱŶۍm1i3XdYIjb ##D2"L2дnKkͶd2ٸlRF0Be-OW,N+54 4Mk}\;lC) 88C=Ӽ?CVW.J)ws[vu֒E XJHF萹?.beEUBƑbɔ3I[fuWJ+^tF LA ԮBM"Erzv\NMf@2pqm(4]G)\K*+Ba;M-O&xL=TjD"#v"9DvX~P(z:Nk-Z!cNu7ɰJ R [d[A0H9H$jϡPKWȭG\F~mwZY=w=̙I6ni ԟ3c<^7o՜|oM7t۶́²29SzL9n4?f9}Ɖ* Ji-Dl6#ʣlu7`TE:gwNeuu m5Qf>}c8G&R_WZ)ņqh4U"]ZTup8a֌܎֟Ik7/rpQbA[u]' +Fݖ|>p~tSJ8N[xiV\m;(Db]ElYx UQ_@:'᫯f=v_"  B_C:ʣ=NU\3@]~Dp~=hy9mU{]XWy$3rk(`DP:ju-s."JV`rɎ؁EZARSJI9j@&Be峱.pQ}e =up±-hN{2YJјc zs/ݹg砃'Yoŗ_sUce]yDWgpڙNx'nmzL?a+A9h@VAAبHӁiMi)" !f6T"3ޏ4nOI}]}ЦdJ98\}ţ?Ŋ+q^#)@&iD"d -j,:WH_VJ~Zۦ?*&{تipT*E:mu8aDmmo:Tg;/!yNҾrojm:)"n|k)[/bA'B  B7\T*єFpo'#ִ扩Ov n6CD|9)fL1 __ӗҔz垗4[J:g,ؑ(u-ayyE>/[S|X4`RX+u$*?\z3cn۳Qj i:#1aٱX8V2c%I\s<{'*]GS.8e[&="/<#u8>tzU\p|׌=nn;^^zL[:m:g}X5=H6UA6WV֒ZoS#D4fGyk]KemǵWT 0Mx"e4+x)/R(AAAF|v;cQ*\j5'owlm+L]9~۝vI|k.Z׺ˤo>Kri1> t!yL5):1TuT}K~4DZw,uiyF Daр_aSXt;DZRuMr4 C>Pb>oQG#olig>~}Kp!S;fh~O|xuhUA64dR-[͒(ydֵorf!kol1xK)Turss5z$n3:r>SbxV.T>矼iR$AAAF/q_4L.B.n[Kx/!<n}Æ21MSVDlAM۔R-[͖(X#Je!Ä`Yl9dJ).;p~Yko3 TTTn HNc S4)2dV0јs֏<^ ؞GH8q!ul&G0vl4ʹeTMvQnbf 6 1,pɉd-۱ip٧dMf^x sfkNff4v$n[.Wj~9o^|I)   t#/Ou?ύ9y9w)pYI;ɻcuh:q=sg4GluXٕsxfs{\fk_,wLOehЬY>sxC]V]ҿnmf-]cۙO]#5t96رcB j~fDCFAQ[<$NJcIqgժri݋='|B鏳fΆl"l该P T>%>IHk-VT!5׵Wp=HI|i'HXJRLR䪔jLk beְEyTCRa9>I$&LH$;aHPcQ\qӻiƽ oUӛ#ǒS:غs/s)Ζ  B7ş3q$t iP(&z?p.P)pY,ksޠ8RL~ P:Ji /6c;xj6~xr0(`i+&pcپv.7mcģ]u0t9sʫVOt/~B":y"z N2Ai'ۛP~1v:AY*N&ME+MxxXzR:dJ6PJ [ۯoDže-b A8 snC>~[&8#Yt)_{ >D>+9tn:i b  t VZk/\ʲ!bSe(pp0UXjjjyoƶЁpw.+LrwݷH&5&~&J#D̋Aѽ`$\Xck,,`n2I/,x Tivb[t[\V0 .h i?Mf.)TH$/ؗ.9i{9cd @0@~ eOT;C̋غe3c5K1AA`6zy^WM>Bf۵{!N¾pˋ[qʣG ?=I㋻WsܘcٱYS5g?a#awj&>?ΘJ"j:cP-35mYLa. X@긟IHT9O44NIOkuqqHcႾ˛ d;V$jDu<4jrҋ C\UοmL}-vc&?#Ceڛd2zN^ڥ3Y0@ ůJe؍<:q ˤc#T*9hw8ggMp|ǡ{>+̂XFlXJb>V.F؄mGiu}k7(v/"LaFjeuvgLd˲)K"BQ4Nw]9}p8b ԃi$IF*Iū1qlJEj/ ~XcO<ͦMr3wX=fymQ޺g5ѻ?t/i'q xw4ڷkƯ:$YbID'߭ aubӂl* X9pdv@r |i3 I FciQB`BVA$BGR,H'ZEYr oLy+V 1ִ͝}z1~8td}wkl/*Nv9DQk7MMwM(;ŬudMrlZgWm,*MCg1d}*a%"ZuX0~ȲPI$z+Yp A#zrS=]KCw,]εUu:؅CNgB*׬Ŷm\N'Yd{]n۶ݵ,Z8-zaK veK$؟hƙcQl#$*Tv|H5CVdw9I`JEv,TT=B.W+IJ,dYFQd.7mG.оڵé9xXb=vN<Ͽ2wy7;ugt)pYr_;tˍt!lf-[΢wߧ` b5u{TM#KYAQ.V`~B,!lXJ"%0hAkd{YH$Z'D$ EQ䨣do_fkkVk{Nu0| YSUj&!DfacԹVF [Kشw-@*In ˉiD"Qz^I9z=MͰ'p@Lo[fcGY:`(x26x|ٹ{-W[?wYq:x=|\yw^z3ޣj8n`f݋c>DNE @$O>hoMDůQ֓n NFj!ZG̈́"a4 Zϒ4jeO +148#(Gp**C YbN($H2IKHUdGLopˮ' B3`c5{Aim ᤵ[w #VMu"kLq9q~>k׮j$e( JUUd UUܹrp\5.wML4u:8Nу2^wL~}*#N=_o!lN6ٯOdz,o9q*If!AcQ.VέEYZ>B*hD\팠՗3OظaX|7Q9‹' 43{ba&I trCs8J-l.}JڶI2)8ee(1~XBNǓNDIȲ\o{{$&NϸsLX^^}w?e+Ir: v!3a_ׇ$Ib8G'&3#cn޼[QV^AEEE۩(!rW6H׻W@ u7+f&N})E hE|S|ϯNN}*73yq5;+xW v Z'a$xn a )ٶy__t`KI$CeA/Lㅶ*ĈVD*݆7鮭8{B3`YNЇd4pN'ː.xk ֞G~̝qm Xd)~X-[(--c唗W I>f2eYضtO:,(VTUEU4MC4N ˍ~?@@ @FF`0@FF.X-+Lc#x'{gxmdg3eKtU\jVAn6,:H\߶^Ͻ@GpE>d0x@ hvS:skh Z$%'vk*A㓏>?a˖m$vI_.I.9?z6L~uʊ}l%1.If`LE%ɨ{YV>,%ضn$,RQPGZ3@H$r>{ꡤRU=q {{{3>۶QT@^{zp2^Ucf~;+WqڈS Clذ}/!##7^c(޶;s7K.CQ^gvXZJ5BXEMapj:wX˅Nc^/~wfU>l5 {دe9{=EHAQrKw E;+]/qR"^ma[,ZS S b-E iߟv4MH$sp9m{N6ovG˭[ އYnn I2.NGKv.{%}1k\{,]x,N*b葼s͕Vsͷr*LDVdz?x/mPXXDb4 EVkY>3LӢGn3` @ hö9 7o>[^2|s2\DF2Shʾ'PV'CL_9p*")hF ϗG^6Cn;H&,{pt9c'3(.:@t$ˡi=n2hٲްv Iĺ̎&O$$QLHo2FmTlAud9'ܑDT.AQ4wv2Dɯ;3OPUU }=R:"ID1(pH$B$PJ fhxg;s>+hMInt=v aǬ_iof:lFUUNq {vrضeTP2DLal=i'8r@:H#O?ʀmУGA?I Y1w\u)*5W_ɿQVƢvTƫ8xsщOI#ɪJTqnsѩI?Ŏh;嶽 sƬlL?m1T(2.2nF#'+̌bˈDcyGaGEIW(۴1Idt ӗ-NETXvR١7DV* 矻2g?︋ ;|ײ,bxX4FUu5!BUTWWGjİQb8Xx"A2dEDc1 C5ea׈c%YFeTUAUU4r:q]xn|>G ' z^n˅PUUPYQ#\Mi{ xle4IL_:i^IT rT7ZkLRR$n2'*4.aǜZTVdX,Q;$y濪݃n=r<o/ƶ,dEGOFQ:-lV̎;|Zr X#3|XSN("a$-2EV 8 j7m춮i{D\tͱkSٺ,~{ ?i8@ hvSϑÓa' E h% Rf%+XZH d]<Gt6MWۗ0m[5;549n:gtW. |8|JE6Ur𓛝IF&ic!l$J" F~*ZE0Mɯ_}GiIiU$TU%+;!CaEks@eO}-f{醺\̠CC$ |8H?P2SqT[%\ "iTq'BlWlf. bbF x̑$&pNbYpNhpy^O=onO&SowlrLCG$>?CNn-+ǟ'1" H&.:sՓ%c>gx=!@ h,VQ#lX,=UR( .NDcA,&:IIq)SԪirss8aP.K3o|}e 1Et}..Ȣ n7t.ph_n KO5*Tc6QLwhx˶Ia#Iq2X9!y8K̎J-Dتih4+Pϋ ʔe6\z$Fqn=+$qmTIn=rq-' ࣏?fnzBҦM.cь9s:y 7|ÇcڔWx[eh(]IE O'<f_R]Va臡v5󒝙ANV&>{MKvF4?^akd14HT`**+4 |\`ox3ۋcVfr#$BX,+8}s;bV ~ >}?8v+v5ym1>[~A"'e؉7$DD2A*"cq8dD"YꆁiiEi|]aM4M #m17n&C{N=e8n:n`"ML,vݝu"[j{ikϰjZfMLL00M˲,u"Z8$1<#CUЄ9u>}꙽Zkֈ&iAc!lJ" .F=DAm_QFm9 WR\ʃ?ʊH&S\,cmzu%oAN:p22?Kk4`{aЧMVEaMݲiX9zIa2áL͞JuA} $n.i}?_On|S+˱- YQ䵣(GrBJJJ|XR $''^={rڈH5y\ítԑ C6PYRױ/A^hʞcABlGsr &3Ͼ}>LYYG@~}F | 7W>Ν;1ޭh@Ьx~KlYp|ǡuǎ^_%fvc~ͷɒᄂ0[ӑ1CUpdfg 46~rBbWakߐJ{i9j͘h7*'BPGm.8Q1m*FoҗeD+ I+,I~y]ep[3T> L޽Xl99|u\vE~.}5,K1`@q,{%}=tОw~vղY۶wqe|JkljFcTVVr*++&En`Yf]yk֮#ser=w[!l4{ʙR]Z r7 ,@Ӯ#NR 4eV`iqV,-d!@IZU)Ͼν6my:t9wkY(K4- dpۋ_QBԕ Ņ,IL*OjZ#UTƢ`t!βdzecQ#EI2̆XYVQL2(^dY bÑ=9H$xc\_}KQرu #I2` %v\_~5o.?,^Baaȟ :w18}Gg~\v>>z ҕ:2læOn0+v%ϛK;;4%K-Y98qAfnfbN>yO=)iYa#^v֯_\W4@ hVDR8Tk Z/2`>۪1tgϨ,ݎw*dYFsxn2r2yF<+H`JT]L6>ׁŢVdxFlSoZIuY!Bs{ dMuzO$͜Dh\\|Yߘ:Rj,@$T@(ht(+_|>o pjNrn_~ x<5[~m޼'^B8u̬s'%]XJ[Mpy976,ZߧJy}\/l}{’DrnQԈZk(VA$YEI@G"PT}wQEN9 ƌ=~i;C***87"KٷQ(gR0^2nSZ%caʢ!EO`,>5v \!VF7 壐ĖDK0meǍtI@ODP{@{KX[_2l+u?-[DpjNڶ㘣q)'1ay r ^vceY?MS:ekrׄSaY "+,-YFiò-ǐ!!/&iӋ!zAbE/_St*2?w}?<$ O>?th@Ь-EsϙGn#Lp߫uiE9{=de3JYv#.Z I,nPwZ=6pP%H ;F .F<OF;<w?bRn.]:qָ3yƩUYxW)ViMMf=5'NI&-[&UW^upS'jIָ$"H[Fzt-3ABP/pIFw1VՄ+%E%RMQg_ҽ-r9qwt a㈲u 䶿݄bkIϼ>f~ImtˢB2j+!iL|6ӐD!Tv*l4>}:F:~asfV? /:%Ld ?",Dm}T-H[/6m>b֜,[rLӥs'7 &Ǡ6m+gǙ֔zoΚx9x]UP- zeg/`$I&\x _}=IN๧"yǿ" s0*E1l^+5 IDATh4iw,v]$!2Cv Iy5UTkՖ`fE(|?=$KHUoogX5Ѫrl)6rdv+:q3Ʀr ,#7+w_ fȎuNH +\|YDc7Y; |"k0z<-FYC?΃{o}[r^vHﺃkd/sq! # aI,d? Ի(S 2y7D)ٰBVVIb$a-+lH(Ȋ9P4 p~|x2|ڛ8=i13fHy>ֈ&iaYSaKT; r Z4K/צfZbNQIwNyAm&SWri0vUJڀi۔:$:& hP?-ElW`ϾcI&)n=a*|>dy'Ce|>WTU[\wp3} aH;Iyy|,Yb~sQ?\x JKKhDڷk0_{ŝ[|LN?T^yf?O>.Ɲ=!l4!,b7}d6NM# 7l{ʹ۶)߲͋~pj*UU')˲vX;{So,M̒YUQ58(&c>mu%;?oA3Yy>&iaR \ B)#h/l "t3Ip:t9e]o2cpehIZ-"jYxdGF1L(dòj'2n#Ɂ \ U, 2?4dĶa'yՀʲmfiD"1LӬw;N0x ? .i_.`l]d,2Ks{8`y=E/MYΌ={.[l` @x{&Fvfa?kHVV&_~q܎}fLU7G],$./gd/4})}iޭh@ -X:kV~?⭛EBz%j r!717\@O"l%-nfi~aRap)0 ȢU-̓/0w|C$Ih3 Ɲ;/QS wυLrUNhڀZ3HjLQe۔FGIFݶӢVM`T4` 5^I2ZoNI,I`صcTeLġ?C[;G.,H]}o*~ﰉeYm6[*%JlB՜MA q8Tjbiol v؁(ѿ__Nq CFtظ]п__f~a) _hAW!Ko.p.H 2s}忾D"sǝ%EdbYyVͯ",g¹lX; UL弽ω$!Kr: }de [׆-ZTR3U4V@,S{MXz,=("\QB2Ns~SN;):l VXe+{gElp%JşHU;vqC5|YY(HX hlFJZ:_4IC[͒_c~j-hѼdvQ' RL}l estLdcc C$"[&VKY9fR@9gK…T걺S$.2.Qjŭ֮iM([^2"cY_gYSW#0ifTb١ akSק‹vzb=s8khtOR+=>s9_}񰔹r3%:pX,-MƖ-[2щ!s-kS۷%hbpӟח?xMDݰMMe[X*=i*`҅]-)/+&HeV]e"3'+#H;(òQ^e [^6vpGG$ 3'V4$bLCGYmq8wfpuPU#Ce&TczZ-(_V{4OA]GlDnb=FRTThh2w{p}Ï3#ݷe?/u7QwM7[oW_"ϯڴᙧ威oB?ēO?]x!Dǯ- &k8~r!R MU~ch %ܤ'DZ2_|5ޘNWFUUSOW\Z8+UX`aWUULY[}u^3SUt"7%|Z1b$m S#ju:iOǁ??, !ZFL,XY`KK(Mb6p0'Ih{ؒ$ٗ^}ټ{J7He<~:!Mۋw2BrYcpnlyg{rrMޘ6ա\t![t$@pHbq<<֬^owQMrW`?|h@"P 98\k/u{Y[g7ho֯f͢$B:51C{c:fWv kGa,^Px [ڰ=7+uܒ$ #&Vq"ī+q;mNӷ7/M$Yӗ~RYLxE٘#^: Z[ۚ3 ߺ9{. -!--^O&U&weHDPPߏqզ̝)oNyZQ_5tvy&, U"lUJ~f< is<$"!!h-/ *x ĉPĭ U [)!rP Wvb^ )QQlvf}1[lf#I `6hݦ%#G 'v\nά}HGs؊?P Hdk@"aj:c"ѢJZ=ᢈZ9J\N,jD5&s0&^0'~7{Ydҥ`C +se h^c)N{ |VKT|uꓸynjBk**W^cu}e&\URv,W_ՙf͚RWQq1.*(-r/pr*|(HNx{bOj]Q(#h JFg$Ns傭sqX2AQ&(*!|n;vK~Y J9BlM"Fpqp:k`ݭ-|q=rE'++W'_p:ǝoc#Q,[ c{?@]INIhb GUh~/jՌ)k|?/.FT$Mz7="lUB~=:\GVh. WJ= EܪPEITغXm+^<$rtn eTPmYkV| hϰ{m*G9DNNGNB#;]nDY.o[v"27 ;\wڱd *QЈjzjCѪEv=,2\Kv\ [O'=* وJUc,A c{ !8zm;o7|dYFk0Ru{j'(*uIJ:FfMٶy- p8yx,_vX%4MVmӚF +r2{</VyI;lI.)n[3잻ygU$)*rsxpLzS|>!|ǬqC]Ń? |dm۴:cZKQvɈhB*FAs~OM/rh[9E+d]z4ZMh8)~=qw-&\ܻ^x'dleՏe"7=#vٙ8mV|srJWET*VGHdx(aaT"iffODmZYuwq&ޒJ?6K.dLǔ9rVJs@.u iZ{9@=? ˆ2B7Y ּcht& !|Z]BO g-Ma~U>6?3?bM&w3OQBÓi~'~vat:Vb:wӉVhb޽С=3Gzul{? ; ǽÇ҄.U ׎RQJ[c(TWJJ̘>[wb;eJEXX(z\σG\P B̷pH+-fQD-'[rPu\*sq-%Y&^BˁG2V 3a 6 *6ְ, kqse%%` VFCPI ́? O+A` 8;߇Z!*>W)*BJJ*=8۶oG@;ft4Ckvѣdg`)*tP"é[ дiڶiu="--7˪k)/ $4뮹'x?-RPP0?kмY sjF<0퐨 IDAT vIQbUc˖myI%'#I]?y_zy_,\LAAkaԯ3|0RRR0F>h?Z-1{h~ᢂG=wsN&++^xM[zO.jެ) B5#Úsv^ ,hI !T%b9N/Im655tִz8h~;i>B^kޢk.imy]ⸯӧ)zǎRnt3 ]eY:{DSEJdkd\e:p*8K dFKHT,IGm$'dTتR9cgI.\$ J!$ SXTEx@3U !tccs`2]ecOxsʻX6BCCӌXjj<" Id4r<ն_ߝFqq \ݙIZ5L\n7Cm;h }X)UߓVR#y.EaF.wRqhĠӟ\h.>&]!wQ6*ZDpIP*n]m"lU"ȵJT+_.e?BqGA0iۊ]É̘>ģNhcH (^ 'Q'l¨i4j0)䊥c[y^`C[)4"EɈFSrv{:I!X%F!8ÁFR^ tUUv„lݶ{ i3O~~>d?p4 Xx=uzCAx7oJV-ܩ#&7ͷldYeyxG}/,NvdYfև3 զsΞ3~KƍΦG?_,7m:Z7̈f_dWR;ϔҤic}ɏ3&99Ĥc\n\n+%еuNAڽ>fo랺2}Q)}vdY<4h_2i*v3cljdYDN l]K=Ϙ?-s;uKݒ]-e9>6'y=n䤧PROIAYK^$)$ɜͱb.EZcp{3 =0Ym))v 7a{T@@c0ۄK3ép1[2pTRtFBk5BNuYqf; *ZS(AQuϘ(DRc"4-6Pc̴/[_Xu7^|nDXKxX8oL~AtY|V t3OO?k^}mߙ̜=l:vW_mUm^z  smTJUᢍekr`:o$}Qj4uz4 jQeY^Dtf5#,^ jhDo2a l!8A *(\P*n]CD IE*TyrR*j ({*T[=I6%{$ݚQcDa:Շ0 <o=_adB{nʲ%~R%+%\\>@,IXZyBWQkYclJ{~%@JTa B79fcH4:ʅZ (:c?)lIte)ÖeC l$"jzu\|ndTR,FQUD'aoѬi ]J6noNoDרA^=0 ڽ_ʟ&99Ih ocBV_P}?ĎiۦϙIWɧ1ky$4l矦WM_,\o!w/VZيUbe?oj,YYg 'Lc cHQQkh54j-J\/2ve=q.E QBѠj1NPDjMpD@T`*(\J(+lݢ[!>.~XOUJU]<cۙ|Zc)RW}{bĽ2wiV=,)i p#sgXW_ǴfpQ1|>ei޽S8xodάh4ʻ(VJ-k؉n?a֠NhL4QQ7ۅD=6(hh5Z jEz ^U ZcHAQQ"~}"!vmtfeGSJRqh3JH}RyP)TerD;kP%* Օ?X_/u0hݦ%MDDx˒ ,H#% )*F)^n$Cb?ۥUM@ьATd<"DK.%n',#@!NJtV@WUE =:]ktκW@`/‚ TǷySXM"2"ʰ|JF=4H~u^gl۾wph"Y9cw&aaԪCBkזk1ʉRP8NN"~9ߺUdffQv,[7!4Ϲ{Ih=I>sb)F;o^Ժ1IMKuVyAB+wZӵG_SҘ$z)i9JX,q/Lysmwr ^:gb2}-t9D _W_~>{Vz^~5ޝ:O8l\Tndwy C¥xC/*8=vLZkѩvG '=vtARql~Ou_u Ac8:dnehZ<VE#_<#2+ds&vJ<1$KLT"+y-n7ՅÁ!!ttfs!b9A#`;%V~ZRA`\VhVk?Yp ,"0G*bt qX|dY:Fovř^ 50:r>.k.戺CC,itr_.۝º غuG&RXhIL2Bg;f4N3?yyhXfc @uz}qqXƌYs:CDQdUn U61坩l߱ ^O߫/R# r/6n~|45mR+Vu|>^j !Mk:ufBCfsF*u~{Q>+οADjuNCR!cp8.tUk4̥"ڱlԈ n#yV*x[T U\;^QPX6o&;t!2jub:v\ȩlB:l)O^SE. _ @Ղ'/EF0pcW |ٮ!K^ɏT`y-%P%o= fU*f J xBBi|}cj(*]4x:YL&/IeܵIA @DTd$k(!m۴mVԪUbץ?Lrr*[[.UPW^'1}9%+g~eW>lH==üO?ߍ}7w$)/OϣcF_z3M`mȲFa}xIe rص{au`:o[صG_3yr$ޛ!,3};?b8ߘ, 6M fIhҸohb"ڶeޜg@~&3ljĜ,;Q|R$I"&&ɓ^;WyyНz-yʹPPP^~Ġes(/+$K݂{ ށXKٙW{L|>k|Yڑٻo?&55v>^9LxX5W.M7y7>>(QN‰-_ۥ'àܙrӀr-*.Ww}<{~>{?Dtt 6֭Z^:mv;w6RNjժɎY3?sޟ»SsQ9莣3p $ 莣0j턙(ĕ4Ftj=Z/i[ ƲGHĊ+ٔG9ٝiӒAn=+y5SrO!4-֤eBѫ+gazd))^Riv Hǝwe+gK(rUCy˷S f쫼>j-m+FFF3U d̜!8sT}傮e$u-lUCc0 p,H?2 "jt#j3hM봢RkiJs~BCqAYǐnQb/+ٴi A89ڵmCxxؙfoXz-b)"`2~iӊ]Ey5_VÂѷOK!vMmDרQӴf`bRRӈA=yhx Xm-EتP-E|o܈:Ray.\wԈ_y+~aEd>R,'LT zAˇR11GVЎ/s f;[mJHUʒk`(p=PŭURTT̴wgk^.7,joPcFҬٷQ _s&2χds P.|ln7 FY#ToT ?`^`|Hy)p-`|S\,v@ pּZlQJЛH *֪4ͣgX68VL-dž'ADĬ30#5bmݻI$K&;;b\N~Z`4q{(XJ`cz쮜d++] Уwl݆Jϖ{Bz@Qq1gύp/rQ -':s dя 7_.<3?bKRD>J;S^{Qnx Wpbuw +dGNm;,XQ2I[4)O^t_vI+y5R7>|<~/b+,` IDATj j*֧n`X!ą]2'ڔLYV$K)8AX!3OoHۈAcm6gʲLqAi;-ס fN'^߇"H eY'޽c/~7גL|W鼈9SpYRa 1rA_2$qb{ ATayw qe!/DQ!8SDm% ݂1&+'?p\ Ԥ%!|C@(BBB 2c0PDGcиQ~\FbRvАԩMV-գW];Yfw3A8m^x1lظ'z n&>DZ~|Mq8֛QLJjrtz=̝EXq*T vɗ -ȒZ%"1k^Ȫ_`:FhD(' sJToߖGA<^/9.jTغS I)VHha0*QQ,a9~#yyDQ$4,>}{r"Slſd)dPF |( )#\*yIUhUԢYW08ȔNoxnrq 8$[ CQc6NN|>YU.Hg4ԉۛ+ P\RB7eЭ7U(®݄CiW-6mY;H.J]OGP'7&- طo?!95t((PR\BzR Тy3nZsY>d(((Xa#}cÙޔ }@,EE̙5.W/䣹HJJtGEE؇-,oOp41 Q_.՗'ӕ_3c.Z˜b萳or7pdР44I.Qqqy'tM'^?>9뮽e?~s 71w$' }y_)((\,ؽ$F}t=&B}7elQg.KYI>$Y"˚E\XiGdneő4lDZG!iyVDZ?YmR?E,ˬL i}Bnw. $tZAN+OE֡TdR S8t|jӕY*퓂B7T ʫ3,\%yVFZr"jhMTаA0?ѯ^>w/%9%ZMF > r&̒!88^_ߡEتp^#yn^/*ڱtw8XRRVrI/"ZNVWkF14iй3 Ww* [)+!B:EتPɵspp,V8N{{:۷r!2:F؃?m>in6ɈNX+ҮȖ+?.CyYN8 S<Tn@uc%^UEFZm^׋F:@EL&#Zuݩ۠qVEZp:]ty \yH,Lbّ嘵fZE`!HIk"LJ! քOg#Ǟ_"97&`+Xnk.w^Ĥcֳp8eW_9 W("SMZUupDDWvQb "(rӀ~,rWbңW?r9}*7 wqE݋%>/sٰϓi?1܉ nkŻS?S\ix< mxZOӨ&c;feGN ܐЇ]wߗ%{bx{hQEku빧z"ZIXvx9۳vJ*, (t^A"WWߍ_#22Q_ӫAr Zaχ.[kÊn'-w[k GNbًpZ-ȲF'$*qMEǟV U[~ n*' \/5zLЛÕ m+Q,Kc W%sd]t[zZD8xtCoCIII#/?vxy/749s?Eq}hݪe۱pe۶]=m 7x=^5kJrr ;vRPT\{U,rcdtCb1^3Olv;)<:a\ɿxaGzη_-v,[VZ2{4kڤB>_~ 7ԟysf5{Ӧ34iҘ?~]{GNN.}LNN. 3oL~;nt25#ȲSyotG>Yu^fzN>)ج[rh"]\^yܿa g(O-uh<^%$÷Kʔ1W*&BcbrSSP~**Qͨ3w< Qcst *Aus0 w/hӪҏom:HZŐw("lxrwK~;3 qdY& $Tzo;:Bdk;J/y8r+DZjr zs(S:tcؕ%}?]fM5R(a  #2sAynj5:ea=9M|^zq/+coo~4h\n7 o\.7zw`#yW.{>¨cIJJ憾d\?[~#_[!(LBӋn }>w=-[Ӧu+za Eتp,1|fCRu+8س${ٺl9I۷Sl! tri+\^T !o׆}{ݠHu*L"lURQ@,L}wnaw 2Z 4L(;ДH "+]+m݅oșեqQv@ZKވY(\>2rm%e$ұ_)u`] '⺶^ЋJlB*;itxglD:EjGӎakB$tÑ#L~FeLu2[n'&;d^K&5- 9DEv;F e;4e/[!l#sFzz:4m=LsTT1.;|* ՟p\ݫ;gMRoF8mw llyQUco ||tޛ~γ :"n- " TZ-7S-M`{1/hn}4x(VS,~|kױ@ @vmXjY؝]wS\yaգ9׷|g5211|Dqb sѲu{8qy~ u ߠZ*|aUIE޼Bn kŻ?Xq^{,ɀQf'{S#T/%H$JH_ `љpǴњ;*~ŷoW=92vSU[[r |AW cZnH Mx˿~'3]z`(YR aZv0_A?@aq$$F0nH?96mU߶x& IP77n}Ӳŝ_Nxx83MC6Wфɪiͷ6tLCQs\E҉l]?7oƑVE ^h4b2. Fѣ7ZRڳ9 m%GJHr҄%$'7O5rI `Ӫu =x>TҥJɛ~Av jrUsiW6Y^7W]'JX @'}*v3QN'AWL N %Tz>@ A]aY^"BRmkFV8p&AO^w~6cS| fE~g_dW2ukӣ{uf}ߗNvuty?ҥKsQr%Ne]ӥs4ݻpcDEEظi3$fM9feg1/ԮUY3^~,_k|d7je {a4&Avg=ŋ(LfM9u*Uײ|gx #džT9! $ ˜GܳO_}GƛosLF#NGxGgܿ'27M淲O/~G2}|{A,_ Q2% \3feo)_ zg/p["f̜Cݺup#AN'K]w2l. #{=^6ih\rW;h_9ˊ]iZ)jwJ'EE24+ >ه`B *Dl?S!ٿ_ ӏV M+그m|yx=n]Ժ7oxnƈȴ~{Apׂ~3G.{^w6ԜRF£+8w5<MhtseH>?-l;#wV23`(9Z.ѥnYK~e+O'¸L8nll>Αүo"jVe)ٰ׋52VEW۹+|3ǎm$ d.ŋt45BΝ(] sx-$ŏ&l(1$9)ܗԢq=|+3ʯVT'-ΑTWռțfd_5QkPItfPdUA%TK'J(c?%.+ _0HBզdTf@rw^$|EHA.K'AV@fǴpHD9nW/ aݙԷ&l-Aso;K^]w^cq2$7׾=[IW*іRtݞ .?w[Lƍڎи^}?] aZXχ>ۙ5g>1 ny77srSF:eVPvM-]̲XQH8۽k:ڴʞ={69ƌ~@;fnz26i\>._GiuO˼t>rd[U?.Ъk>E"/([L'aգK>x[44S7+"qЪ='\UUoϭnŨ3#RP|? BU( R=ȊF$ !//* j%\kny?g\!LnД! *A&l 1e `/MnH3~'X$pL<|uf&u;0[ñD{LU Vµ#>g?v9<5GJ,A 5nQaF`HV_|ވ-:WrJ8l^[Wr]3'"ٌAg@EttףiTit T]` !a2aф%$'́@khϬعc^D&=v8F/(7!jfUuj=$&QZ Ea!aٮ'3SpЉ6rauƕ#8C[VYHA劯W`G #Hߦgn$ՂN(b.X>r1hز5o [Ktd};꜎w⇓?r00l6rVlox~OũX|HS-EAP|9 IDATmhh\ 6|=w ^2{=?L`kmv<$ f2</mwp-MiwqQ?pɄd̙$4ndžHϠV9L2zvԩX4nj؀C@xx8cF?B}'(zԯ_4223y7isoBdgkxaK*[:3g%2*Y_KWl=vO; 8p:zJLL 7{fYP(ak=㏽9)SgP|y}d~a} *W1wBn>__lq__6n=i]CFL\its$ptQE!ZŰ乙+mJc{u(L1M;nr喇r7d0yVVt݌=yna*RXag^oVj<~IF`4̏DTHۏ&f'QUߋי >D$R0p$EAt9e.Lx:Dڑnz4j2mƫl۾Qi~[3̚vQ;~g9m6c!lu3fPv-&M/Ƀ}0c|˯|z5jHY_0,r|B_]Eƍn:2;vS'-=afgUrelZWF&f;C'sHO7dǗ^иlF7i}] :wn05* pa+!qi-$<i'@@7p EEzf}o{<K0D"ջ~Dr#yѢֳP]UU]`͈pօ^Qtә `1؉hldf ns*IOxx\P7 d,Pv{BN8+hzÛYJ_MZhݶ{1#>w5WvZt5\[HtwTW*sj%..]zp8ykuֻO[S'a5t҉{ef:sSN-6o^ϞrA}ԢQ$%%t1fDJGukxpc; Pb}o0wk@(Ne2*E []QM+4nٗ;0{Ў8^:~/gt#+q.E`"b}Q+{-(Ac"&@Uuh|4d%+Qa &, LHU0Y#+]qq"a`0ۑo&njdY!( niʺWb_\Na#d ԐKRڍCQ:wGaԋYz-z}{38N͘%%%M֛Q*>$66dάi>6 ŚEī [5.Y>i I'Niغ}'Ofz5 `4-zMz^ ۵vmqn-|N0M=ВPEΪkY QUNGjUxnSԫ_7np(rgwYU*"`IgygeyNu `3YhȪ*'2RzPTQ1H:"fʄE ƥAA07]`̫8cKWW/ц. (z^fLQTN'|޶ =V_)[+` s v㏽yqD^)>b_)mf@`o>AP3:]v9JUiݶb yD2˖dԫ[&@иBL2-F,=ԮU`~{>͍HKKs8q]tV͚[dee ׳;*Uwۚ!y+WƱc'}AeлW&O| <0 Ġ]g(J&y7L|1M̚ϖaS^l7|QfNRx:Kfk[(lݞe ~n#Y :ul*1r~!~?~6w޼C _?0G+>$&M.dfeytQ44\j}a,3WrQAE)]UD|/&%~B)[l#E*&'*Ȳ2# <(U NѠ`Сul[NȐ惉\7codF`!#W@qeJEUULR@UWt&+k5ߓEvⱜc3wR fDIO@C.AЛNs <ɨ [L5$*93qg%`Ec-UQuGoYTP\]wqQ8x?AJj*cF'cԙbDQS&4~:k*Fg?b6ӶMkߐe:k1p ߷H=mlyKbok/Qo/ ؿHׯ [547!T[>/|ڨʦ[oǮeAd4bXI:Mz`дG7,b_($$lHHzF I1kFq.pЗ[yиkVPH[nftpPkA3x}9@9-'~`g.rEU0LT*wӱoٰa3=ԏXx2l$M Y0ի_< 4`c]q=-qq̟7`,cYF|TV D۹lظwtGlyطO>=}zdg;?}/$U&zI{$֧7i^v6oxx7h~ۭ˘qxhfB3==vOϞx٧ uvҸ;W%ڴBFf&̤Wns[/S^75D`4vƍRTbgnԬQ]44$1`5WZdffnc;lْ- IKK#;;@WUE!ܠa0C?:]J+w â~rbS?s^qeeix]"JcʓᄗM8i'rވ"AgN5,2Z#wzȉ[tefEJGUUf+jn5~TlUTe˻[E7f9TRukWM2}ќNHC6gO<-OKժUգݻufQZ"wJj*}Ѓ0cdmcYS>[1TܚUJ:ӧ1m} +_#=VI0MXfDQĭ45M{tliV nBR|hVb%Ip7 Ӣq3|~AnSv<_m$svPUq( r?D K:J 2 LR]yifI1 'G*IOHpgY8@; ` 7Y(mcr`޻ sNԌ@\V DNeƒ87襜oYo.ΐ%/3$&[ۋ(WNKPkh\ }o1?X<ͷL]ٱs'#a@ű/op=ԪUÇ0r89Jzuٿw_vݛʢuY|t*ϘMBB"5ѯo˘?"##>{8/}F "uZӲ:|} NOxD8 tp8L2ᒝVoI~-|b,Ӧ#9ʨ6dpC+9j24m҄ ~DCUN_p8ʢbsvrqW/bnw~!@ ]T)DAftuF#Q^r{V~ޗ򄊪^P* PK/z׍SIr̿?K*QHۇ1yP^\ EGQ0X±TE|:pB =Kdo'D(WH;[.VʷO?]{ 3bj:vhGz0}l:B66П0i*:ʨCpʗcIDEEi̧N}ʱ%T\I`2bEeߧWAj\)zc?~O՛n#ٹ+|VNbh0h;Ckg &nQB\qkAj+INrk4ZT4w8ord,()#V]~C^5jVA?}NlpJ9]!/@eE! 'ʰI'l% [26;e WUӎL2ܮA%HZm!`Iȗ&L᭷ߣe˻XG-gSvm  Ko-?PjUvŮݻ{ӧN[~bW<Л",t܃߶G0oB755cHM laa4>?7ۛvI}z1ԩ[7}{'Oc^x6ۖqٶCW=+_k>l?:sgi("A0[J 66Fd久B`@U$Il/\.)))筈RYUYQ5O) {}рhd4`4K`LU| `ݶ8ܾ bzWP!ari%w`rBD鿅ZbM4*'@x{cMCLA@ԛ+U5R [%/"rKv1AFR<޾6-MJNÈgInuww[~5jHJN^,?-?_gSӵK'NN`ԙ|q>/RQdg;aV~ѿlqIHHw߇8qÇf!@>15kͽrNԄW GZ͘ž[0Z̔Yd2LaV+\[&DU@hܥ$iV 1BRLsvR(.v#ZZM~`(t:U1é\狼De')jlYWoYUwYˆ TUDgɎL9(QF5ɸ$^ڨ`?wPVdz`MN DYl5?pf UC8Qsc$RpJ͸j}8zJ$f7|˅YhRUI0xt6[U-a3toSƏzR%{}xi܋<ܠKnge$:i^6RБq]M+4)Xڛ4o~+k?DgYׇ̞fc46p44.ү#2t` ǼķoD1u? |HmY jZ0H7U°?qGscKt|^3YΣR,_!jָ理:CLL 5W<`VZMX{}>])W _[C%"ǎk޸=|}>۵ gY̛3>ԂQ`*D *}.Wtx׋y1hNn YYY}q:!H`l2`61 W~-n},őx2lyWq%A{/i>gz2**V[$c,W{Jiȵl߾ȴW&Q/%!I:$I70~h6TUԬr̞'22ݻ2~h>Z.ԩ8 =><ƍ.7>X͍vrLF6M[h\^0 ،fLt6h7dF*܅P,$`ǀɫ(l͐aC$EP{M%"VO <(`60#Atr\e ~G ^7%ۚe%}HV8p&A.8^53NФ|cZWoo~WGp"Lߍւ2M9 ޠY|vem;4e?YXL{eO=6p44.%~̘q0[,y-jתŮ0d(bc3^? `ٴmӚ{vOC>~B4SֳǎO^`Nv] 2c/o=WrQ6UT/W|]2wBWw|*jh\dh*>8N^/s?MDNe˅lٿN# ( ^>Kv=`0 bEy|ξ]i~?)S`0HBB>;Q*"JH*Al6b51%BzLJ`l&<89"rT<'.i]nG:nG `,|VQ$b}t6\8bfT#Eukflѕћ´]Y( H:aUЛ/.;~w6빱Q3l@QR IDAT4e:o.76Ϸ_}^GXwHHHƍx([Le|>?.`/8Lre8A=+ua>]RQQ<6wnuO?;ͤx@<Oz/XOfM|b_UJϷoîηT`c$4ҵ`Bz`_*@sm8뒗ʄqX I1]4aFq$h%ڪBaKY;QU-͚0~¨|frY3q,3j%VQRbr*3,3ϭUL:=lDeI8Ĵ(MG\mUQUYdz\AdUw3sI/aћ%"IQxNe %jPP9>(/85U!vSqE9@WH+՚[Պ$]= ԯSLL6ЋUUiqO[WL䶾8éGhP:j{$RK:o]U8g3fakoҬYbwlݴƽ4:Jre0 Sz5|6uEmq)SNp)ݫ*[Uƿ:h\nZDfLz-2{]HTT$ ʽ)~$$$ҶCW?wzt6v{LRyft؞¥>ڣ7wdCY0o  W(11rB塓W\St/NA0Lym*Bll, z|AUtP1$IX,|+M\\˗G$"Xn[bWEeEEAb"jh(^G_7KP,/N?\'לL?4ެK#=Dž7S!w E(UFDQM$0 <=ADPUu:̶h*jc653 P2St`9ԙבhԨ clF[SsC$%F@EoD\ B,s1BPPIP)p'TVBNE0x~%m45>ׇ->a PR S?CZ& v;v3^^r[&3{U LlV3dy~F7mȝ|&Lʽ/[\rqjTGҠA}<yи{ K~B|idYl6SJe=Їv[n_GKcxǮ|>:w͞={F\[X;O<"|rUzYӾSw.̤g%"));'O2~(a w } ZS UDUP l?ϼdf( Ǐf͚zOժ*UBwVNrHMME_[S}фWώ/ױv\UI:],_k4YZkkd7kK7hh8CHؚ+nBRhV"'ɉ4z)[ lai׊]8kAVlVvwe_By(^v66+ @NP,z##rӓU%0Hz*#/$ŝM׃?@V(rGD$AD'$f@ވ^47K|VD.ē r#:dΨ\j߳dI:^E `4X̸\nyIjnoLL$/z[ޠ bv:93@Kn3{ٛw D ! 4*ېU/_c¤tօ/-|acOhtӍL0{n 7fڌ٘&fM=jHC8s&?EUUWF5.;ɝ+lzk:>c^̙$ŢyC^2~q޼Gxz01YR*T(_"b=w!Ɍ|ahWI$[ٷo?ӂq稠jG /LHH|YjjՀ[(.]mX1bZZfeednb!::ϗ'~| į6zϜ9$I?33Y)UEŎ=JŊ1Ldff^z~Yp~V$`Zà/^RU,t`"Nav N ^vEdY!P'UU>2SP=  rGaDTM$0rKFAPQ. (Wsx HR:Rqg$ Df+~Wδ(r^k1wxW/e,^SIF7]rߵYPtڈGN=8v8<^ Ar=jOy8'hQJ .2P  ɪ G"  zVE(`61 + .Y.>akDxC۵A_̸\nZjGBB"/{BéGd$VHs$+S#:e_βOWp͍/=R9}:c߾ԬYysfrۭ[Wٸi3wޜ+?)PUCC ٲ xu+ߦ)SgKeՙS(8x/ԧx@|T,K>re㏔1=h9? 1ҥY|Zu l(Q"%%eb2t.LHH ""' 8Xv;grfr]gΜtFٲWOp8HIIj(J>W^OEvv6*U*+Wze9O@'>-[Lt\ `IðKIIt"r:9S餤;vyx2.giɉ8"b0ƲR#Y#iqT)z![-ΠR=2ÒHXtW\8O  :z1s7~]zrzv/k≊j^S;~".] O1ڀ$7sS|̦ubքW|L1_γŊlLAAM iDWժ/jh~_& "4aFQ<jyu~7n7 N׿w2ʱS(G(S[4UJ(a>˥Uc2dG~EF%jM!`'ёAӑ "& գbXa({\dyxBZr.CH$It: f4a?{gWYYg߲'R( D *\pzET**."\VY *CYJ)m'L2MڦiCfrΙs}Q5dYa.˥)Z]dpPiPp#a+c9Mqg3 mRw'7> uR?Oi3o.ϳx".޷yۏOr)I g^~e5L_\QG 'qmwb+W`+lz>~އ?R078#IAϊ끬m{&DӴItl6[vR*&:7%͒L&iooy4YtCCCR)Z[[ ó;ץ{Ts]h>&"y7q:;;inn& NI&K.MP4:,VNcGg}AL/%3$Gr %L'}~ IVĬ[GD82N.+x3έU#h!k&U"7,Vx3mcd^6:'}n/^v9uu\wں 94 ~0n_~ %/~9o,a뻏:=Hu6z/Z=C}"Yso~uVȽή.|>鍼}A`qADMׇ$I47Uilܸ:bۮ.ͺvuuaXGKK Ra\% mV ;>օa& hkkqrݔt:0~,655I/r&IU" Vꖮ$ܲ,r/:=RXfFET_XJ'`lʸGխUQuVFj <1 iWetHrm|Xs}-_~㟢j*|ۼ]/W\ť]NkK vwCs_B.\&Y)W> ^ztzb?H84N٣u7pϣeݑܺ@1 UE[sD7o!Z(^u#Ar<HN>s>tؿ5(fYx2eWME|,I4u-h%s\#CdJgEICnPM rllq݊cttSddԪJ)!݇OQuv]0buXb#N:)R6sz֖f޵UU,oсutP(Tf0cYvyM:[Ȓ;;o]xWx/irpA?/s~'C|3RH ;$Dm/LJXd Mr ^ ץsKdbYVH4Ldhnn& NF'Owwwi$I  8[ `A;;; 444lTU c{{{rV\,ˬ[n}na`S춴 $+;aʊBi&bƉ\w^'׿˫QTD'Qak LM8yUy$WUŭ5%ڲIcK.I); c4.Cp7Ff1w[޶m{<}Qv49084E_l9<#Gy|#٢r̳i%; ۂkifeᇒhkC_| P>HY 9?G887 *"UWwqo~G*5R?ZF|uޏ 0)zI~YHѓ9N0B2xJ`eOptgt? O)y^e( ۑ(X&3Irm_#%IzdZ6qk(`eqA wg4 ;VEQU|i~ȄBA|iZ gSxۛo}ZTy_T;{=xe/DŽ!@ =noL"`ժ}ݸ[YMH ;`;H|DӴIZ;::')gיL:mWŦ[r CCCE]eppL&C8~n[bS}\p8L.cpppP۶7J;J?|ŋ:| D"Acc#BQ<<]Yd˖,>X, !eL4oA}!(x L1* 7.%kDBw6sIuc*VbpPvk -J逄m#S7(f(ޖA{.>Q,?y9w> CpMe~W.˴o^ș;c f޵s綾'u:#µuGu,fAǛ~"`PF+S[ IDATcB2a`Nq4p.e֥ F.yoxí .Ï<|sV'ܮ^\&ؤ,W4iLjWS.Sd"!Mlv|[;P*͑(a!hld!K.Cɶj\!JXI9L!ATŠ|_4dQPlg>WbUM+U äX,MmMoNfrM͕~ITy|3?x.s~>k>?}@ V}Ysillsi>`qADl%KLp@T*M"ت[릂㙦UQJr@Yit]' ̂l6K$q:;;F51IR(J iii)LvvCQ:::0MsWXD`],iNLi/p[~y=M3ܽ#qM𭋿O}]6/^˕SO?O<4G~(ݯa`zZ^{IIwkk,5BuXyءq4,]i"0]*Vʮ"$ f-Z#"*]ض>|3P~>< z5 ^zy؞.:K%b,p,^OH߼ht)XfYH4UwI;= yLǚK2 ef) ` Sk!u*3 *Y z.\{ E ᵼڣ_^MQ1~qڦ//_3>+WrA -f?anv"'D|"(@ !q=40;::47 )rTq4*uk UQatuu'u\i54|Te?GVUTݏcmV?ݯrc&pݤ\$ֲEQwd|LXyt$_2 vd7mE/#Ҽ;A1ʥ? >t<184Yg|T{9=gҽq#ߺksYp|?Bro_P' 㿾zឹEG V$QرX7<@TI#/>EciO 00:3"juHO0<B,hD`b(b5 LɞǤ'Q!VI|c\˲'g'N&lUU`0*sR&.i/*<000 'kk_gdG?|i Ro6>/|y;8@ ؎D(}1 c iccc4OCCx|fib;&IRD",###5Bju4MEAQǩ YUU%D|J%4$Iŭ\@ (A822 D*ݚku&_UUeѢElذaN޳g|/* "S4Mc15t,xe'MPT IV$ EX&Z cp,IQ yu6Eߺn֖Jw]|?xnջugYN=LV6nX?U0G}eͿ?κg!ٽPخcj)>B!]WeðIH >>"B!Iqw K}43 vnVQql,n l77C0X88pՕ%Ѧ|v῞׻8DSjruq:EekY2#XN$ho}/f t7$BQyAb\e\4/Gh/TOXukuceqgy丬\ݢ!S>VPyH5%?~rXT26#lul UV$4M% ΙrSc8^WW7#瞼 @ Svnt~MGGGXtn4Mqq Smۦ MXxqFbVu]JaP*, q?jzsƻNFP`ƍhF}}fꪊd{{{  JHSrgޟMt XeYվl< EBUZYtO$x$]kwn߲/.{b^-"kB{`㊈n 6ױJa"SҒ9v>stCCu9Ro;--{ϝ4MaQc~~54s/fZp(꜌e ``׭gX륗I Lx.$hl'i `P'Ӳtx u( zGx^^[GofYD Si-^:Vm½UOEJY/B2a`jsx+>@@P%~>hd\4ĢO_:nv%YaiRb{# 2X*I4c,n}ht)Xf\PN{&vuz# 峘=˔ϣ*xnpp_'PZ8xERg:sEFy9-uÃ;2y˝w 'KgYBǩ P`0 [eYoFB+D%'|:NyԶPo~O @ 끬u6ߏiN)5ArUGPmww7MZ_)m۸,˕p[ӯq-[6tBEQHR dYi8|q4Yt)jEi&bX,mtww0yNT*E*bŊc!d ۮ\YYfͼ?OdoY,2uqooR#2B ]hiǧ$M,=4,so~Eoxx^ǶyD ')nwd:õǜeENil20 i'0`@lB1aNrsڱosgWrK(/#eyߙg3J{8m浯8쳸-V?ۦ:^GՄ|2ͭ1[D~b 옯(EA.W3ɋx奍lkSH8GssgV<@'!$#KT B$݇y&dE,8x [Wr#}lџc%p,ea례O.Tes|Ky Y≥-|_}^`Pt]^3 ²2MEBJ0|28-ؔ"UxB:MVhEX+wUlǡ;"],`ΌZ= XPH,pHV=.NZ8G.f376mIi!xA>] ]%+LHg( Pul.Dzj_Qd\k*:QYwy1LB$WC(#@ "+ħimm[X**4 ~?[<>J1 MMMBv\00Ͳk|>~?>} "Ⱦ>,---[tj-JJ%ǩnj<#Fe!0L&n݄B!ڜkk">2A;fݪ'Y{%oea,O {ɪJwjŷ˖7žK( Vų ["1a`VϡoUY&"%?x,WZ[9gDeX<, !I&84J&F4"Scc&5S$BD>U7y#k͎7 \:Og7fM1Z#MO5c&K% %[48c{ O"2xM8ո9lۮ:*jyi;O>|0wŧ,\ړG~F0-@ f_02MRT#j H q]ustwwcYV`vԭ5R,)JUGVG$i:f``h4Js A, ߏ,5q>ѨxwP(Yr%nݺy-/?cw߈QP7XF]<6cp}a^}P )\כ0eeL1=Hv"uDlQHRLJ2z0JyG=3k1E.)eȨ*(ihW]u!::6kGy8K/" ˯Pp(D4! ~t]GT4UCTUEUDO \+}yn>ʞm~l:mT̫?);;8Nuk3I,Ȳ,cUbjcMUU4]Ct|>7g+oŔ ~|O."9C#yά~iڤlWzxNYmY|GdYL0ȊBǿ71e&ĭn?QB*sAYzpQpWʯ𛵯cYpxKޠUR<Å,{>).=^!o*lh&%\ 1|hBc(L[N]|\ñ&3x Y & +Xmϥ,dnk2~ĭё+\,l #A4yjG9}lIp8TZ(1 sUBydkyBR'ۯh:;u=~)[<|Uy<"@ , At}w===(R#MR ظU'\.G__pׯ:u|> X=8Cgg'`pFcB-ju60M 6LXhnnfX5oe6 p${_g%65l{ҼJLe){d|8yugKn{C45%lcp̒htv0R/c!M>w(e( :ڣJMQ()KaeZXe8eeY\uQ]׫"KEVdEQʿ+ Z*(jyVUn/WįJ8}d6guǜGOZ'M5HU$QqT ab(uu ZY&yѿ[nc;FՌa!"F6C-77MvJtnHs#bhiJ }Z078̢dG6#ĭQZaZYlRD.iƹX*"?h~YH UU>U~NP^w]+Xc85'"l-bB\ބdE8um gӘ$,@P8%0B˵g-GѵYgd*mz$VmR!E-G@Wd:́ǴiP8xㄭm{ (@_#H- J%*Us6 4]" ݕ k^[˹L]?t [粟]^y3/px,FSS@ @xXD8c&I|+tvv*/1m%KԈV$nt{~x٤b8v"Z&=۝ג8VNEXB0ǯ븛-4cPe<xl}$+vC %r:Z׵q-*acECq]dsxq-YQ D /Eb\dj%IGgV8Y4 Rad!ɒddsr9GxgD"~!@y@"0ԲXwT :ĝ^+UQg97gZF_NjUvqқs/(}-٥R 4"•)KrE[{B`1mvumyv`֫qZaT+:j^>GKs ²eKyQGV|O7]֧qwNy}m?Ou~r݂UMT:@UU{BiX}~, Ȋ"ĭScz!l49VRpk\iݐXAP)>9cR EBEتHQ]=שPpBvM m*l5MBT˲L0@\]-&/.$U\w+!LTēO=ʙ;kgHcHv: k܁@ c9FgTAkk+>"ξ>"-B-J"HlTJ%&%Iiޅ_yoI+cP-M #\ϫ.MM#vެ|q5ꡍ {VE nF[$) x:cʯV *&cºKvLGw-& a[%r+$-ShK$~p/~vkk_80_ϭ~Zز$UeDŽĹۚk2[*dsy,l,R}dr9r=^KPضN4,cպ>EmŲQ7"o3+$u <p'ND_gIhzifd\@%>m)If'@ q\EoUh-I:q,BP)9vvv8 f͹.$I_w]KO>650JUi..ȲeޜR"z̾)bb;m{VNzaU,xU[Wzx]cxXUQ2*f>SSU ׵U[ᆭOɲ)G߸sG>w 7x.s.r~twx4el!{#=} !'8n< a`=/z$"_=ˆ7;"#8=JEP;C,l!6D[3IvQvk  0\~=uONʬ3iOe"Pӏm;ygԍU' .KJ$Wi_.DEY%N?N?T}q;m#t]Sy[_"@ t=H46'fD>JH455 ō׷\o1C;'`4$P =f:ݫz{=)p^0co}I*+O=:U^Q8cc͢pzq<=3Hө_$u4ۗd4hnHl>HȒY-rwկ}:~}ʹ98eʟar9y a`PB)UZO[(Y > W )Ԃ"HǑs{ (vx\jEHf!l(9 e3t5(/F@*K2\ћMS  y'7;@.r20n b! avi+2KBbĨEp\\|L@Qf߂s2UU%@u]<( PUMq0 O'KY9夷pigWp.%Q@ewlS7^}W9StuusV"@ L0m`(V0q!`v%-D ko721(_ڵkg\9+(񏻯cyc&m2R_.>i3~NܟoWb؛g|Dڶ_Pcmlr+c8i^bh>=h~RfHS;hKvR^IBDVh-VEWr!˷\~=H3pҩq.sV|x $= L}/S [̢zQ(o&2?UXU(UՈDB:Lu'ukfsáyK-i*;T>DQf\.ω'/zvmۗ=VMsבd_ `@ v.8Q6W^.^O<&pTں5޴,Mw%QSKTK,{t!FFR,i|WUOl|]<" [Yefd|?lćK )EMDՓSd$tmA5_= PIZ-"I'L&yG6'Ϋ#O4[~#_TY;? }}O]"!#@ Y?CCOc+=|Uqp CCBb4{|96Ζ9G]y^$##)EEeYBUŶ!9^{Q^}/Xŀ:b57ֳ3mCT׫ǕZdU#hXkůRܔ˵XY~uL\up{$ yUQ}^-xOnޢiCJ!=xNmjiIV[[&cE4Sf3@^ʕW]˾}z'q:_xGr79Va`OZ]sa a=\}C UC4"0bqлN⠓OBE@;*ESBS[3App:F *"L:x-G4džQÃ\[]Q<<#.5@T#ü)zhU0C WNtVַmjov|ӱjM%@W4BaZ#bbgys6 .g=d;.El^+BK&IBGa*0hj`Ogy$zSpɅ`Y~KqGwy\sk󎓢HS=y6战3Ds<=NyCs1(dyL1d6A=|ٝ~ުo= )%/,2BP( BH$@z+ݵ܂&@諎9W72RRw&pi ®}:p(z']˃0 tMc?hPO3ؖEbsfNeϳmo( 6dFX\t̜H{רEa@unlUhi8v voX34CL&^ 4B8 cKYMoE"%V}4?[U;.ɩ'nfx5#?x7sXެYyyж[i S7$E}$ Hit/cUKӮ.h'tY'lnYz?}:e{bk;T~3ov(H$Gk83Tl*#گ[uZLfOyl5g]Me|~xϠس ꅭ+s4[$Ž!8 tQ_$ '-Ջ;'bl6 3+ DY"5ls• ĭikŲmVTWPlBnǶIM6^X!5[9H,RXDeFV7zZ*\x1jF+d5vedwk9n>Kf!؄Vؚ!//{&k֭+eG y 2b2BP( Bф؎Dwp[xT:-Ωl(`ujGo}U X7h$KmWel5c;1!>/;ىarqH(;!H~6sT<!RXQUaA) 7YʕDT"Rƪ?B]ܾr;H]-Ax2*pFAs*˛#p]3voMy>ݔÉFͷs1~Mb Jتh!u?![Pq$VV X0out3rґ[=J'zԑO:<\CY̠^W&ɰlRa,p 0 WQ(6Xkث֠b bjBUuKDDY4tlt.koGLV%bXpA?]eꥄeT" in ^SN՚2F[(~۲ ҬZj␔qLo 0pc`!X8TLF۬ ~J蘶Vr` i;l[VpѩO?^;nf#&#SFQ( BP()!e [j#زՈWvjS@jԈXukH%Lyr<|u٨49>`;?ۓ?;\q 4Bñm,G6#:"%/_}Bѫ[(#̒Y\kڮY]L(_:) qZh*2pn7{b肃v䚓wh~Azd;݉)oݔ^m?lO>6AUD [ͅ_,DEy¡83I !pA Cfĭ]9ڮ\eg:;w[VNPIcak2In%lUl %z}By3|w&TV#KJV)&T `vJ@כH 132bf !} 2ㄧ,Ց*8DЅ !ĭ8TźH[:{{hŸC~NtڏY0KYL2U` )XX8z0p㪉̪!jSpqQ+-Ø$ضSw}.iZuNw[ !fe3hxCd#)+ (UP( Bh"OLK zʙZ8W~M5Wj.U+ƦhC%[y A@ c$Ds.72]?v$ҟGs=.ev)[8ܷbɄFvסR1+Ion y]w@8-@XzV4_v;]6=K;s3y'ݺve-?<_v8VQVEts&֒JYR|6+ 4 KfN!d>FS,(`cbSGAְI [g.V&,Jت*J"rZbK:/O׈xt9e%R)NdsN"4єGRwSP+C1m6REu7v9F]ۣs[pa!ъ*k#NĭFbZ騱@]4z!XoS4CH&('MD\ ފz LA5 E2[qrmtN]#JLTTVrGP^QUFQ(qm1 BhF,~y1d|wio}9{ͲhYZDW;y̷!VQy6KNQtWplPd[Bd7%u)@h.^HU1C~t,Fq@hnIj'v,9 nC"LF"z=|}R:|zB%lmf6N>4yeb稑'˯s W*(&!r7vm WrseU׈Z?.;~qlciMEjn;nWx=mo=^YMbn{{5CVД(&Ug\,r;Si;+v x&Jx="PO oly֎d2 y"9÷y(~y[%lU4uZ6 Uxgʏ|6[xhڶ4Mx\nYmﺄ ݎn' E[b5iQ{e 6 JتRjF]U-.|EWIIJJ%ܹn5.Б ڡmbb$ӄ1WV `@aGtNZ&(dN 5AXEa^UՕB`x\dy>/o`y}\4=^a' xۇH!Uǎ!$°<@WN =;N2)U)/RQ@p:,l)DbVz[)?@Qt!-T/̱rx]EhETVV0{Ϙ1GU<˘Q'q=wB(a)(5_plU*yyhۋvm&jk$%AѮװ36C5%$C [[LIjHҎb'_^MJxĝg/4\Gi4LINٹ9vk´-@=/ +u.8T4~Bv!; kDJ66.v҅c# Aso)fJ'1tSU&vm!33*; ;Ph~ uOL.7;{}0yy\~5Rخ2BQCE"݊1A!I{=^ы5Aݛ*Q[@JR*V!.T"J]7| B[/DJt$8vw@bV5o0`ntܞOi<V\Ęѧn7p2~O~fCV0I [guL$*#" _p]|);EwrS \-8TIҲ_ؼmJʼn$)ˡ] H/K7#qN&YVQc:y~>lW~3?is"qG(u])-0MDB'5 bO*!eQ1:ub tykBᚁaZ'Tuyt+yEJڼ|ʫq &?a((5㺛Xf-Rvyhk6voO}*:o>TUU˯ӐdNN.W]s6 Zľnjch_XSOLdTNѪ6}?#?vYd3yIx"PXr/o2b‘2DpUӔUb0>3y¶>ep>dm>3=XQ7 㐨^C%N4vD3i!QkY;ұk^Ʊmm,:0t,ԜIJVF ?hy ;s$?z4K-֛خ 4iS_W(w1_ [Gb~+|lh,E ~aXH \5MȦߒh,F,CAC[YCf1qyIiȎ E .0*y7R߾.bn2ow|>I ?BN9,L䱉>{5uٶ7~~f޼=up]׹ګ+TS*iv2{}3 "C, =%+mqq@_rY{~EQ ֏c%-'^s;Qkf3+_ˆ _eZZ#|N±M3m&qvՌ.DZ# ݡ}1=6I~jxcݔo͵7LQQ>>@ @ [M+Vb6vR[b52g˖JV*K= fI(´mtMymt;eqgQأj<mYGl^#*{S/l,P5b'^^!!dۼQYΫ%kGOh[jfqI=>UXmX*ɪp5NMA{xsn||[{St^F9Ѣo)Emi{ /c_jW/Ɵta8$m7kCFj vש+v}JتP(j"Lұ~ڛ4dGޝZF#oϤGDJ1}]O/b/9xڋ/9}&jxRz{*/Wp8L*eJmN:KPW60Mզpӭc}''/0<0O?3y3B{YY+SKP(2WOڪNRMwE}SU#QBa*A`&krP/Ԋ]m+cf+Nő]m&,6)MVRA|-h ?:3Go771p\8)@ [M<K]x~Ki)TVD(- SVbuq%%k H)mS0\A voS8XH4]'+nOw~gA}V 0zalUDhGZzp$z _د.|*lɥXqu=`GgD]Ę&kQDn{ 4KyU|4Eс*a9raGk>] !u ˲ vuyj+aBFq=\n>{5[D9%KrypuW7K? .+Vr ot'殻[׮;5SN?/g}YcNdtGbҳg͛UŜ~Mo_G{ͣk.\s ߯M]SO?ǿ{rs:L+˭>-Y磙jU1yufժb8xB0cGn Bmw`ؖUNQX=wp#4CUVH9UsC~|c[`0!FxM ]m+JFQTb;(Ř" tMЫc7:(jYz4m71SZf3&=vsf%q̱'SUU7Gqj*6ס0h* _ȗWbNx{rRbҚb:\*,$Kw6RlaјJ֎^B^n͖+)$":ˢhn._廵sLGnfoPZtTDyyXQCsÎ{TVB uڙ,Z/<8{nz|v۵Y=y ߏW^|FGǧ} '&mUZW^y :p&?x]Sͷ2d`c; g_qc3F wR27o>W^q^s9 "} '?eV{[mnIC˼fWQ&Eu8vTjk?ɡà$hRs9rÓ6fccX8LDֻV^d N 4_n{p{3w3h4!Gd]I)}'?Uk!GalfF8G}< .W_٬c&zUgc- oů;˗{lɊ̜3K4k4M#m;VHqHv dazϿeq䨛EXFMVVK$S>*6>ZGU "XIZޕ_^x4]HlYw,*]{TV~?IͰi" Rf4Tx_Qta:lkC|~yEIɺ4tCҾW_: q]~!#j!p˄IӐLF#~S1y>"s;vw\pĢ1-2ĭJ r2?fL{Yq}js6]x..>bUH)q]<%nmc|L.[98m-%gwM_߾c:^MH$ fgձ+]؄# I=ɿ]tݷ_'''Y=|9Q69t]Oѥsgrrԩ#<^O:s/Ï>a;k/mδcۯҾ38uI[ǟ̙ eq5sǪPYUŨS@?o{΅X#Ioe̳˯sEc+`߽##w1~d Ny]$ uzi;t۹d8@E, NH&ԳAyva?S <ֳ^hV4q*RU^ . z%_ʶ D8abjT͗_j-B&Co:sL}K. K.9q8SOda:[q9L{}4M势]s|xsadհJت(Y''R6o5 n詺y-a+4-ӄ?Ӿg: |3Y\w-.҇BSQgS^2SP ԟ[XV63濍Uz IDAT_$*p]6;0mQRjxhFhDVz+0<~;F7g}P/F-#> \sݍضCݸs_eK[\Z]b)/+c":pRZVF^^./N~=&2~]:wfR Ls?OUIM`&6 䤏)/k8 85pۊJe[D"zadpZnZ9:cՍh Dh,l]L)K [BIvE#cBeb?SI Uqx^>ن 5؄1G _ǻ{_:3tR~zQ[-D 씍qLtp,Ԉ]eGr{!eq7KrXX`]M$e#-r…iz'2l. w?YTLd\v\vɅu~8{˯*.8|6u}dNН%lUd͌\>zJccODs'y|Gf/=h@ m^~V)%v f8dp]m+I2o)aO(#iaH`?P$L]HŃO0-V'kV!Bј:}{o o}4~n+ )^SBv8ݏ.೶l씃m8DZNCS/vlkMl&j@[3 7mhB28hÕf7ĝΊ%:Q!nvzI^o*aB" o҆>Ⱥud~XTw$//ɯx5#E$e#r1 Yx 3n]u3q'ʏK.䚫h=3\'w,& /L{MP7CS?f}ⵗmsSr?"++sO?ΰF5 ESDۙ4gxn|fG'(^+'GQ#6'e£cP IWaUVaUh ;IHBvڑ 4 a@s.ۅr!\.tk]Gj>}YA?BWc`| |5c dYo/c~ۍMM 7:I fL(ĊVQ]<LkO9Z|CQ\N1!R #R$T+@.]gЧS6ן22㯯-)Oceu >y,[4pb.J6v (О+VQn](=FQvq0˗`}ުmο2'p,=-[;׬el,\|ޟ>}z+/` ^yťmҫxKz/Ft6yh#9_~+v)t*|"ü7f4 3oMӰm/ѿ_㢛!/>vdlu}p5n`[fF&γC`\G$ W~lKGE)bk}hcQD!7?6όCJc#C"8=.% m 0?N+ 3N99sxw e\$М~X>b:S52͌*2,d}&[T >^:_#Sn*6AI'Y* EX|?)*$l[$"WDV4ts6զ`vΣiW5Y\IK]*c&GBt$Җؖ$l4l u{F&@h?ͥ4t[6p,_fR % ▎@!r,1$5)[HMH<^?yכ^{^w,~SVX'LΝxaSC5Fwǫ/MަnaO{SU+$OpE11 ۶),,dO?b]wn$}ضM,C_E0L./Ҳ2N8t_e\U\{3->ϰv^TL3=?膆 85}gL?8[_5Qܑ`;ضl$dlKUY<,]Eү@u Åe2\\6UeY# ]nYpVU؟K /O5*' [UPMQag(D`BY~t q0CRVEq釹h:arZU/_ZSA8t?QM5`-N*SY Yת> "Bh@H Y5&hId87nuV]xtIuĞJتPהHɕW_oNLp ҋ/h<f,sztNEe%./K.K><0avx2 t*J0IҌyH;lڵ"ގLJ=DbķiQb9pd|)iS dfExPdBZ((ё(ј"P69""=uMC/C[ y}n\'XՍ``}^L+-_|ȲDbB<+Wϕg@&6P gjAYB{U&"6:y"bqq,\%1FCs 1Ņ| J0 j*AUC44;k~=I0dfEj7n%2ʊa ]*~Oz͌)?r+"G 'ĭ& YѮ .I XDQjO\!D oo " ~儰uQ~V3D$`Oia`P̬?k$c~ZrI$h񗍠 1]P‚%ܫ2.עneA)(p?>t:Yr֭p<$)ͽM{ 9_""bW OBretڇ=ܴ?ӽG&M`3iG&aYz'\~?ْ{ F%00(f2Ȉb̴4^xxr^DibqT WJOD96!/ȦDvs{(ޣB"<Bx~`0o|@B40JTX,eKcTKb)HY2*ʖ?~eYd]G15I."ёԫU?Y(d~5V y"cW@2Yt. x3r8}~-ztM ` , *biZTp`2b,=,dAM(I !ؓ8Y/p=9s \545@Л778OgQFOIk܏Ƭs1 />e)ɴm߅cxa OcDGEÐ'O6,_3G$&ahѼ9al߾N op<9fm݋Wnj,|]-۰k{ v,.v'd9rYQ(W66oFx_ )Ӻ=YYLxkvYp80p𓤤kcWZ0q.~ C|H/hn7wl e|/\d2331sGAdI" R\Y>=z{Os $iitړwތ`\87DfV6#^|~}.Ç򨱬Yhƌz&H6l̢߳{^2l$&ٝsO}nӹS>}"\RS4c5˖()]ԢB!fwEF${*G[=|/G`:{ŽރGIŸr`u{мVY XmVd54*I@De]|3u";DEDQ$pg-Asp55PfPU]fmP]"L]řR /]_k P$eAGt$4AG4QCqDYGBիIxthCÎbV GlEDي,eن(Bד]\pE<9rP+~NrS%XlԮSW|l/Fٷ_z@0ȫcFRq^B{H;*+1y4btAiLzfw~90Yn7V s ;EmvbMӋß3K!l5(^ `?u(&¶MGYvr**XȚ'd= Q Hf"T85)-WLG+^ql\{gɞ$J!Ib2(+p\S((b6qW[ TwKl Fbp5k(!l58Nz510(~;WwYa$g UtT%03ZRU9l&Z%&@)^RAܨ e( b+`7`TtڇԪz~wyk{T\_IddDÏ%t؞I}YC4&>/`-fWʽS8N<ؓ>.w5Dc.? $ٌԫ{%+??ӵ1~ vWн[W~c\qƼƔ?V ߗQc^#9%^=1f222y띉H=ӫgX}(̝=5s<9e׮(/=SC'##ѯg?pG||+rJ9ܵU*Ŝg gffѪu;ߏ$J~cG So|7 .-?+IIhy1TP {:1o(ktڅw'^y:m:OѣIZ hӲm4m܈ItTg5]nz-YhTs2 IDAT/`騚,Xˆ$:*HA`޽ѰA}A@u4M#TQU`0HjUܩQ#SfuϏ)6jcV`r6lI&cŒxWCGqmߍsn<g:]h>!(2ٌd"Q#CreUt/$^~1G& ʵ5D$MW#b8 Jyt+sD' VT(O. )LjܺU C0YEdG2ۑ-vdK( \!$OAT+_n:]G{ )+oGn$Z2Ctte+q  ,^෕^*"!>%)4K0{ȒLӦhvM!#ƍRn`a'aYYmجV4M2zck>j/N[4Cjp& n10(~~?o}c$8ּ^Hv:eIU|IJHl92hT&7Ʌ?QyAQb} X7.Yx^u¶;yc;zՂ}۶[>M䝉z1i.[=X}عԢiF5uxرs{!%5WnjփѦ]''#"b(K~\=Z0u$.!(a]|]bM vtwCgg '=K0$!>>H{[LF)5Ԣ\DDQ"++;we6 O]y[>N\l ?,Z@R?`MPU χ(XS#""Z625c&}J(*<އϿb%'@[/#"" deܺ܍p8?%`NȑU4)HV+RSL$jE W.g HK: z_=_,f U", Qww 6j#*fCZ8Sqh\Nɤى/)1%'"iV;iHDsyd I`G"PLs;UD%VL: ɹwL#'i/4ejYu3|:}﹛Y3oy~HtMi|.ug~[;O }tٽXb/09̗ya[ S~!OG&1wA݄"ę:'{`1#aY kKss$CE_pP:Ǧ/Q1)&<~ozK|B[@dRs8$ PzH_*U4aG1ՠ(D}u(a{s_[%a'jD$!'Db"u*_%} N5ltl ~Z0Wc.tE[;u)t΃,]6wi[ }$Id 7\]ׁk3%V'dYT_TB~W_ÈWRREjZn}xj0} dextԑQcƑXw~n=t Ɣiܨ!Ǔ]g23lqxO" "Ijɗsf0hP|snft{K!ٓٽg/LfF&(޼ӽG~u%u͂s1GJj*:vС#<9i4*CjPX2bIۄ ]4MwxVDQ@[I! 9 zpݨzJYm8l6+A*Tc`'(!l5(d'A@ 2 J_/K(?CQ^l Q@0Ҡ}ݸ ב8Jz\!S/H͏V#kwͲ5; aa'3{m}; y_Ѧ=|Znt{7HMKaϱ|ϘL +TZ*q<إS;0k ~gb"wԐxU^PgV ~ (HTjىxZ6~:u2j}@DEA)B$W\l߱=wl6'ڬ|Kʕ+[pl>lOth?5CGZz:UTf}\[œ{Áj2wtjլ܃݆cǎQtЖE/aqQ qq|nc9E<>̝;niy۶cnddd"2 Ctԍ\>;NfVHDTd$qqι?/ ~)9IQBͼk>Y:d0=Y/ ߗF߾3p-Mc9e+ =/.;v $&Br 4}eIƄ^zmyl۾ϟ7QtbHk(Y کt`2)ȊI1a2db`2-Xf1) VIb g2~ ꕢ(Ȋ,ˈ?`JS5z5jV?\TZYo?Q_7J=?d|#npKJ&D4DtרLXk#ŒiP;Yl^3hzIf*ʒX*[gKE;9p#ف(jk@tjettQ@)"mGHS2 xHrmIWGX±'  OUǧ{杚Iе A +_n%oΌ#xs@;1v( Q_fn.&c^}ҥT"YG|\,o˾(VϤLRO=@?K-/ aW_f|6s`DVK( *+˲ E>oū "H( I"$"Yl6&$H:Mz ǏCj3QjwCBJ  vj-\?I0Ll6&!snn.hEacRLݵUe5j}zQhk akI[ՠ(<RnMSV5 _*RK2؛D[=2OAYeTK'݃'{AlR!qDF I55\>(;~&t믍9mW_g{_F˒NVcn }!OBs>pzz\io{vng߮?vt.U i%cO DLl,Պ"&. e)XE)]~kN <dG"#G3Y4m|3)ǎgڧ3x w5nWFCEt]՗ 6kњ٣Z}|lݶ{Z`dffѦ9r/Pp ,gϥEGE^]i(&O }e$>O xUק|!~m%zvFj9M([6Q/vM{mO?ŀ} {g$~=*V7_ L~i0g\Zh~FaGhMl6OYjլg3wu*Cz_},KqHRj&5kj<6}ʔ.Z/1r Y<0<>ˣxgd7jxV;'WSmA]HKKCEJ%$7hvgL?0pP:HxD8zt/~ S?AjZ>ߘL w5Rvk ng[s?k׭穡OÊ>^\rssq\8.ۍq=x>|yXO0$ j,U55O,.(h קEY/g|gܴ=ױZO6Ch.n,QB~4MWz^-ֲz/=ť4n`DE^t7Ot݂M`Z|J\wSCZ~>d5{+_ţe͞Glb"KXX;o ^AFf&۶@$#Gx9uu 2оAZ̙=ժxgdjլΒrxyX&Oo@t{*Yhufګ`c_<>dǎ's_{xwD]"mͬ_r,y ii$qM7˹~W=<IF|6c6ۅ;'xKv^JiK% xCu{9tp:oM@3^ 3fk_$nUrKQBY0;.HS =QR@ 㻊s"+LLt$n_ {xE(K{*BXCWG4zEC?@8TaA\Kު$C .liP"ol6*w~[Ъu;_/ GS?7`܋cϜ-Q5/Y;Oii.~YгFA%,fG8e#I(Nbb1aHTUU / & ]uBz*nȵוlKТF{)*C۶+I>}A/xI wlf]6qkvv6hVYoK㮝ZN[0+Cjp*N:=F@Q"%폐RtNI Z)7ol-BFOMßBvF\'^ G@ ŸȊHuDQț$ABsGR~?(x##ϞM󑛽yFUh? ]wAS5$՟򵆰reWX΍kgeͷeHg3Ҳ]svcJT:9H*/yaDFFd7:`!.-8-_º?WK&Jl!,xo.=O\\,~EddN\OFFʕ%33`0HDD8֬":0L]_^^ s-tQ>C!O>ja_P|5|Ͼ05EgWUۚͶm;|{ݲy'ǔzLzm8UhF0$f̚G[P厸%;YQhpӍ:t)dggcZ<6?>>;no[dZuѫGw&57&*S}MbIcn,_3}<`ڧ3پc'z =zzX^ ~</n]zv{p{x\nw%vzOs 6O8/t<ן })8E2yuS? my>i"]Qq8kۆ'r?z4o[?ȶ;%,<7^Or=w_zw<ڿoQR-'g|S@UQbUDXzsgSQ0(Vٙlvo\CnV(EI,OJ卂< vI?DACcx$Yxr8a( \_ёḽ^sqp~y.źR59nWAU%d{Ly] [uBRPs rK=K%^^WحfZ5ɋ"VjZ6,'Zs?w⩡3ŞQA^m mZc4.%!l5($lE7IlZ'$ĬvJEPleu\q"I"Ibƣxǎde~voA(ʕoz~99DQf (KH:(`Mv-A2oV[iǴhu[0k-,~c-@{[1~h,fg$' `;]. `20) }zdW+{eYmwc.t]d2aZR&֕ /)vkS"ݾc'm>sNK^n]ɒءHbՃ7_xȝG]{bظq39Wg/ |yB.*dz-ەɛ(99JRQ&e IeY$YQB$~=> &>>77k\SR^m ? (286[rnŸ9>}[#0_| Va0(v[gY'Oe2ԨR(ċc܊L;OZь J WW]?g178OA=xq=4AVJ$?md%PG#Ƹ8A5Gt9$-o V!Y&p=y\+fG;Os%7e?>W6Qv~/?OzF:6 Fxx8QPT $$$Pt)bbZ%x7oO?*s׮k֮n]?n 0ՠ8Ü4ak~r9z$4v °E@*Vy%٬i!.Nrr! anW㸒eEM̟ESdY!,́dF 8 Z I٬X-K*nUU`/Նfler{TѨ\-愰uQŃ!l5(D: %P#A')$0}w,Or]|ai]Yj5}*R}azϞh٢SL*0sԩ} KtՈ3w>nVw7g{ٽg/NkFQٽk[ncTVunSoHDVv6G&:UTZ5m[9ǎgƬdge*$tfwNwѴI#^[ϽƛoKd7E}hwۖlyK\UUvª?VSNm Ʉnfw:|>Ѕ_~G˫cFs{>t914i|3=?m|1ٟȤL4it3}zMJ>C0Ա}'퇟H]cׯG|bٰ'!}Kbir{7۩HgW輑)Yv*Fz^Ddɾ`8p]Fkx9^3}?Ou^}Sv2ylCVN.Y9<#{xTA!^p - Q<ɽU5v?팷A wIAN2IMEJń3hT2wѣIdgg$fQt 4l6Ō*ii!}5.E=&lb`s8'""(&&&Hp8جV,X$$I$-0 '8|:}cǽ(gnD JR H#*!J+t-,l1.  1A33g=+z|8<ϟ?w Q`A~P y>0R&jfH2Vm@t?jo;#98]}x2<ՠCjlt,w= P W7#@ XkBE[7 Yɰ[IY8_2-}X29Ns$%q\ȹAxu@ּY{,׌\o4PZڛ!5Wb%۱&rWUz6'pTy]H߽AAVLX+F5Dr՝CEBCCXl!8ұs76';u`|1kf.f_Omc+!TR9vi˜=w {lՎgҮL2[l+ǏCByRc$^j5Zٌ]84 E4_?͂EK)X ? I*XM97:2zЬ} -N?\#ʖ))YժT𑣼Xi_PJ%~3++WO!8N:uhϗ3f9z.M7|~=ΝϧMߏ.l7?qnDo+9z+W1sgEɜ85֣jCEl6;f3MbEj WF%ł(xуwҰa~a=ݫg~l}  z,Qb0왴z)0^̙Q([4tâ4k2˭n(g3g1u$'.2O?=߼tؚ2t@F|9s3v$Z D߷{^6mr7\/_BBs}]b򕄇ҿ[=q橧RDqd`~y 9b%,AAq9K)_*c#H;}^3/#NpO\"5JX LZj:Yh:wPǠ7Q" IWvy]]^W=uZ>>V łMOE|}?Wi4Wg{I@R*<2y"lU"LAU5ĄTPxXo|"fQd6l5cpJDũf+{tIt>6:~)ރT&2^:}0?L5$;λ IZU(n['k]ٵozx3b0bܪ.dEhAo7&E݅$I4*4mFx2V*8x7{%55G"<, L|kk^Tj5Vg<̈́q;`PTzzx ^rr !!7U<}, f3cԨ^-رc'XF*Wċ͚d{/ff-pJ notɤYh)/ȴ)j3mƗ,p:] ˨* A.\M7)DZnǕX&N];g/'Ouc;xq3.\g?eګBC zzϜŤS0 4k?ZԂl6!7 s-ϭ۹$I-\޽ޤ3tƜ;wO&$n2JN?p6_bwd`1F Ug}oX̟aCQF{f9V(&"44&{MHU5}R2,\Vs\N'4l؀{R yzcnHO+婀r ɿa$<`v7fdO߁dߔOѨؿOs(;ttTXFd0s(GpUi $i1d}Is#*D@|^3Jp\sEQIUʕ,Fy/Xm%&j C8ojS@%zǗ]`Yל1Miiگw͖?RN-9F@?Vߏg_P* Hz6_6ldqRv-._Bԥhvo:?55"]FcO۹y^V._bfX8[tՐ^#FOUp VzFŪsƟ[ӧ իR{[gܯ)U Mx<Xv܍oѨrޘpR4j zvafNwҥK0 rY.\)Djt?Uoe޳1f˺Mpl$cnj +f/g}mۉtVUc?gEKpXBmÔNmzAvL<׸9qqL8]:fzVZVSh~ [!ދt׬c׮hԭ[;w@d=`p~̋͛ޔ+3 BrȲLBb".]qSį7ɤ8q-R. "_}9M^3]Xz?H,+Z͙3p{ܔ-SN_c@oZ*yo"zsfIm+$CkB7f#yעJpظ[ڊ͒FuOt9Ȓ+FeK竌9d*(Uz̒tٗ4O)@R]e$fZz J M91GpP?TrKL"&> ՚'I$C7(:c^թ_}[N*Კ2]V~݊A+}a4= !88N>Cll|:q<͚ӿ`WߢtZ>~^`^i*sJLRR2qDE]Rt4WbbK %%tf#It:|  FVxhFz([]i ozp$+Fuz2< z .?c+pih4t: ʮͻn\75"D_+*Ͱl><  QN̨v LQ+^ak%yT'(Vx3 [u+ KN5krԕk+<-*RBև\Nf267J c$IFKXX(Enl{st^ROBѠ7 "8<Cyn:z~.:%1 tͦQJ* ;Iq1g&i\9֎d{5|&^](ּuc/wǕ/^ʃEʤ9l,VC3x8b6SOcْy[}ˆؼ G'>!IX0NMt҄7}lf-))HDqR|_{7a"(_,oA u}qOL̜ ȶܰD z=kQx ArR"5k}s.lӮ#[@Ѱ; ~˖3jۺVvҝkknWwLrKZz:P0+WDFKXp ƌחs*Z}4/$wxA\S?DϜŤS(V([lde?1m\^w`9p 5Wgb)\K.g;q{cN6A;Czu'Of22EU*sfT;L^x v.bc[VRRR֮ŋQhu:ԮɈޣfjcO(U$[7|e=J7KHˍoŲ9sx{YT sG$DvT*DQ,yP[_dj4*VʦG3n TPctCe)ǁ;GAݭ,JrP0Ds4Z5=0ў!6!˱qXl,JV|9WXc`2Cz_Jp; dyNq$E{4E⴦KlX)<:2iD t1ضm gѵ z?OY, Ϝ:}Ori3,#"cu/^L U!/+a xɜ:^mNKؑ'dUWܪѢiQ7 \=nӎēi tWF>ڝ222d)[YFj#4J֭{T( Nn^R$oP ě 4QPxpȦ _G: $ sjw0IK. d݊suWP :0@|"z&B>r{V@H|(Vd D.92mHGr9Q8lgB);4ȹ8{[$ 32r5O۱S ϗ/R(iK'Gur EKw0&~K]=4~Y_2?]Ie?y:"#v{ |4j Q(4EЩӿ㉟RlkVǙ$ZnŋQ\hߡ [/<M#âx3i~Z'? oxSwu>|J7m²%x1u)ZEZ8{i~?1D_Lpp0U*3ah4 ]]jPDq}ߟ,˴hՖ?nGBCCzgƍug8qׂt… nJʔ.X.0OپctŊ]n };&6)SgPzU~۰yaP*zuB4Ό"^iN+}ٲrGvoŜ$IYE_7Dᡔ+U\DZX\[¦b${qG "ʲ,Q<0 BT󒉎rl<6)Bno g|6V/B{Z%w\wgq%9GFRÜݔfNU$Ix<lv;û^,ߝUJTq$Ieo ^o1SKQ) f [7FdIޠ[7 hWrEAbw1DJpÒtsA@HlutH1m^A,e-"VOo$QET !c#=ˀ#1s$!y$)[ U"M9qm0'%!7,X:=_'-wR~UC-Ł-Ł*TU~ Ń:A~FFJcP2=0}Sg-@N¿nb߀!qNaC1=Nppm۴f¸.y(ˤgp:<`0kk{…x.4PPxDH6pͱ5Eɒ<Lx3&QGwHO[梧{C QBo@5 hTd4*$ʼnls9d;K"f&av%0Ϣ E|uzB X<*p T܅ܕ2ಂ@Yo?$al& YPЬk!83X g4=gdT Ԋ5OFGoL|}5jW(1yMpO!T^m8pSфP|{9No!W:=+WbT]~3-dZ23Fй;@T gѴk{ϦRT)&G&(0~$"P9)X#!!tI+8p:M24ʖ)u^[si7 NǓ>#ߏ/JSlu-挌,!!F\<24|)ĜAUG8֍xf%KnU fjrMZGHӭ[mpU_0ch!"D`E 7:H64iRqdN!Y.$kFVAЈj  F ~\S>f!m#Rq*w}]8S'֯'\$ە^˖Fpأ5Yv)e!mwcGr}H8oa}[5_L۹L4a!1>F=):bP\v>mmʠԌ񄶺K,sR~߆_ʔ?m;~tL>oQ\YFOBb"-7ca4l4k>ø1 p11K'ys_ ,@f{5x2md beɢyԩ]w}~hϛ 2{vgU\E&/՗ŗ^3t Z4chqQHscWEQDA$ )pД_n>X2m&3MhH_͚A:w Z;9Uc̝Gc?&00snڏ(/XL7+jP܏D7zۦʹx}}m)>cOp/_&63|jZZ:Պtv{$NZEO1c'ya IDATg_72~(:uϒ$}.-BbEFJj*IIɤn2ab`Zic;8NNb>CFF!!!|;ٺm=zEer:MDF|~bPV̍K9 ~^6mZ1/W i6<6;JR_7 ۘ*̩!cp(:=cή8o7I \ۋ[ /dC: ȂG5TFm"CsDCK1Z:QTM\n՘S$ B\KtUߍ5ۉ[% 9k{es_w<;λ_Ǐd8pa <׻<ٽo'r%Դ4N*? R ԪYkHxXR)(V@t}Q]4gNųlf,iӾ:iv(|}][o5*5ZA( \V 'g3j??꼏tH7#IM,#"~tu@jԂ;*[Qc_!D^U&ތWh TrEA?(/^g;a]d5wUARA|GVݍ]$3:x$Fl&d ÑU-0h茄{?g}E9 Y+RfytnHe%'cd5׫,_9 y@q,%LxwC2L8rõտQ H\.akIsb9v OWZ:|լBʯj+JϚg;Ҵ#Px[`]}7z\bNKG}oGYh)ʗe+|4v.h$5-%Ӯ|7Rp!?s6Up=̞I*9rqiv/}+^E<}_?⍮7?{LL,ڼJrJ ?KWpÑcXt9+U5X{>: ڷ}?`ο+ԫQe A )` 2HKj,Dhȑc3Qzg&}2.ϯO8y;aC<4oѣhiVXX>dX6ztʸ1l6;M^lE|0{„'?HMKnwqbݜVѨtZz=ZZV1lT99{s"iذ>nwy~~~|;tОagM+<· !xUDJκG(x"୾[Fi|HɂASB%Dpбs7OY`"~?G2l8ZMw߰drF[=~#xEs A;p.<ۼng޷yن\Šqq z=!JxX!!Jhh(a!c4ot:9zN \CLL,IIIg`Yq:]Y"[o{!"T*4 Fh޿[աzz:Aϕ+1dͼޥ# ѻXEM~'\-]ϧʕW(Ǵ'Sz~Sl} ]tdڔH6>Υp_%>KkdLAx(9j0ٷy=#۬8?"+SJT";@C$D$ڔNՊ=0RMD]%du]Q$Sʢ޹U;I \n?^,qjx{H܋͠lܵoGg;9u  grcn:̱'9IRbfYuRPA*V(Ogfꄆ(C"lUȋ&4Lc#2HJ1,+J7b(YIB vrhCy*QDc cZf,˨T*||9U%222;\bWhCL<߻':`+uj5+xog괙'$RB9F~>͛dZyXvȎ9s];w`7ӹu;;F\|>z~v8LZG׏g4ӛo=vuw1qtzܷkmݶ#kT*>f/^kߖ1?D>ϵv&|2Pb l۲-[?O&~FԥKԮUS?Br<;3;G.pgp~ŧBJ ._C!*ǽxPO9]ح[ѨR PrqJ1x'Uī12y fY0$w3NGJa(@PQPT$U/nCbР] 8 k鈶 `7;6dRDy ?BQ?>:fx}h4Pc f{ BU+x*^=/{@fvC3j !`+17 1QT>Qߍz߻(O#Ѣ aG2dHĴh{s>>ب!KE/Y˯ޠgw&) v̦[Z,=5`p1oL4IS3lʕc1TTع>ݗ?LM)ϴ_fp߽9|i=t؏%kd¹E@F '&notG9 \Qϩ(t ^>Qِ$ $"+*`ȹU$IDa4EϏ?z8&VZxbcpE+ͯ֐S@*xVU͜5q&Ӫes~uz txX" F#եqbCaa(5kT/3~/3fqQ6Gm$87?>r XQ=ҳfhr2y'*Twz|䩿`4'::TH5Z2U*W&22ԝLJISS|Knvf3gͥO;|65ч9Sh\*iߴh4Rkk e#'=su2> ##hTGsgd%XZrv((JDfꕉ)#H [8w2%^>z@P=㬞 f<*r''+<&Deoŀ~.*6nz{^VL^%X9p׬e޳c)v1̈́Q.>Z5kТySڴQ4Wф1oL g$M؀᪪&:.6H&8no.]-evN_x($VHd< W.Dvxހhc[]e@EH'H7IF37s%%x*i&BUfͅP~ zA* 2jX%\- SzP0V T+ sc6\ qO'"ԟ t{ zrA\O^xuvNTCDQdƴ Ԧ5K]vs;kZe#՗o0qTV\M&SOpQ:>0N֕Oz}.&Mmnd;C>IƫVb8y*}ܗ05mr7fit{e̘6H(iz }J0`Ƥ:y'E^&DWЉl311X,f^>_/H zz6+:GjՈbBa IJLحk3!#3^ǭww˳/]uԴ4㴅kܼ`jzO5 AHz@+C^ä9Uuи\Bٵ&l=/TDBa_>_>y!GVod2c%&lS%+ i\nJHEFQffňYum1p|w!/w^$=^EϤ+^w#rP =U MBпBDDRE䓞B|BUNvPU) {5S$Q*tȢE2~zQWtҹN\KT ȔI47v 4Qc0'_}{UI]SE z=/9 ㅦO: HD ^,+Mz#)ItpvI'5$"RQs( * $" 9v lqɿ 9%ʕ7h N4J/Y9ط$q}Ⳅ9e&;wͤSt\7bK|g_|baْԭS| }EX`}w!)9 Y LfE*!Hp69ZOn+gᳮ?B(-a&Ĕ,gJ>?px 6RZUz~؃wy6*{gk# #=g(f#::U*ӤIc67^^FWj3 [5NmCe?%ip/g-NulUUvwy/$/̈́W׺%ٌbFH0?3N#V*Lnn."qN\t9BsQgT ksJEMfЭՍԋw"ȁr0"((BP9 !t:]:jiN-k׮mt>f 7z@EDž%ȈQ#l#xrK+HV#]_y.7k}-I II-PT9RU :ًD'{ұ:I-Pb2ÆO߁ԬU_w` uk|2w_jש҅tZ8'E_eƌYttiy7sdX|)i꽺#rf/_!ЅQO//O1wl\;\RLw|$*kRE:&Ftd8QaWh /G_@,cAE<&3:T$|=BQ6*=+ *A4|gw$ T#$Md<@G睏l^z VYGLt=?t[VV6k֭gٲ?رsGG h4Fʕhؠ>5N[UkE_4aš/Hœ?Yc1$d̈Ub4깣}}nWsl=DŽ+YjoJZ(n`X6' f(جV&sȊLn^`}P_M""<tV,s0>?mt*G{_QE~?CG^/\9xN߇XDQD&Vp00zɄb`6&x [ ")=4a5LVJDC"\hE(Ʒ>d3akZ{ݛ|;/*+[eEXAy~%4Ћ:&0Lsn$64YfoǞIS~c+yl ɑ^ sHMj>Pɗɛ>S Hz(DH6H˖B΢?"h4bSno<@/?f[_ ?K^ol>jSyl4}(cTvu2g- V5-`k\!c\b:M-pgx:j%̝5coߓX~WܱQ4$רhР+/*:trϽt0ݞrQ=ftѿoo"##x嵷m̝=QxJ: @ 1m" '\?;GBߗlѬ賯7~3^N!oVV6Ͼ i 5M\Gz0u O> L=R&ݍh&@ pp `4%ׇZE1$hDDXZ)+ؠ &ᲷA./)F夡q wv`DvղV:i4}'qq,}9>KL>;ϣBz~)C giZD{1vDLfov_}賗_{)Sӡ݌CS9|A&_\%Ql6cJ8ۻn\nW M&6{(B^~E|( @݁pi^A E߬!Yb[moNQ%Sv+pN^Z:\\998qff)!nйUBbWłnExrD/Od;C^s8!lՄ&lIsZjk%qyQVo 8}jVlz cX"pnGu'=?ߏ>̎wWݟtU(a1色84[Eg7vKC ;tu{=R$JJm}-0 0{2?X% Cr(JU5YpT@8 AAϢK=%<\x|ưhYJv T͜CB<"Y|eXCnQwkdYH#Sk@˱a?cZF#٬{7SgcgY/9hnhN}/}؛%RsP?5]t^W_3o3o/DG}6bhcEᙧ/и sgt=UT枟Go #1o u,Xbbug;ك&q]w0|U9nIWѴ?Ƭ+8ŭhD<%f{9WWܪA|8uv]<7 0gJ=>יt<Ӽx}>,]κe6J"7/?'2"+ؐ۴E6Zk\hVEIǜ'K11X ,wpTuby;LVEF_żٛd%If`:}UA__o0wRz|_hMLՆd$G}}PHl$A>e^:oH;tʦ #CId&%s, <Xl61DV(OLV-*GL j00g8JMz$n-~eFٟDpci \/+",8&bvPU$#u6s]8 ~TtGX8ˑP*ROJ#g8qWdD HXB=Aх[\{+l=<{6wխcnD =˥ڌrW[j!KF'q0WUT9ȠLS`@UC͒WU@E=!dE- ϡS9S,((! D$1 Q;K-#7E]m)_͏GGh #OQa+?Kw_I17PZhQߵovuyD}+Iy 6oR /u%k3^c9WXjנiEeדSa+Uo7[NχNK:']͜5nϿ,'>s~}ֵyqԩ]waӡ?pUҨQƌN\ܵ3MdzBT3ϽIJҬY_6[c'pGۘ0!?xHϾ !6zC_Y bt|PGE*EmR2YgOPƄnĔDAf%.&ب+./rH2)x}>˂ p8GmPDHTn\YGz\34xxGR|yΟS4' i^= 6ldοIIIBQ6q1ԪYZn&7UiMتqcٍ/<(t3cwtEX;UfmjhnaL`l%uz6ؼ(8]ӺuzKEQN|>EbXY$l5,iRhӜY|q_'"-' ^/d8ıݻI߷TN~y_EIBo2a sYj_&*qR@2`jZq.%IEB; [m({C nimtA\=ٸ=[6C%&EQh4a B*6oxKHor*:An2gs`џgHdA$פR} "T)$}[Cl\ >;s@ d,>KzTC@ <6]T9VCՓV G*8.d_BWN3 L~8.83~OlQ&m~Da i嶇p=HIx C~vuMEЅw9\C#m_l'_ܼ]ڀO{ߖcI}pRFMT#;^P 5v>LffjWMx<<"akضm+V`uys֭_$ lܴHofw1ۯi{s._}g.(eZtş;~[6rb&%DE$IBEtO$Ȋl}( "cX MF5dmfaGҷDEF0שT\IXamӲesƏŧ}0V&]tZ'Omғh2_ΑawW4OŶUp "ёԫYU+ˊ'95\/,/J` "<6RINM^ڸYߜ\ck" gun=oVE_+ȩC,r_mf gH0{o|ܻ/99vk[FR֪jZVZ6rA2p "##T6ҼYV4Έ&lոVйӰDYz|vmO!3ÉѤZhj։CK8qeSƬ ;Yf`2lXEGYb^'mR1P sVada_3M rmZ}]W"t~0I3+}8m;;w 7ɿYUU=z 7U"_qիaZJ\ L&$lݫG)W;Mzm!a@[D447imo-6ooV]l_T&'$L q ٲR*g=ޕͦw(NOF' 3"W9Qs K>L^v.B!(>?ɇ м-Z8} ~g<\q:XїGL! Z%䲊zlwYiozb " :Yq[⊎z_&rOIg{S^>ډ`n[x@f6տۓ`){_j1VL $ DQX"q䢁a׏A FjdovfO# ԛ:k@'y(n#?K-[/[݋}7=?72B5dsJo9 1ڵk^XVdY恇c󖭼 fsx$yD^/O<(f?vaJ/OjQ23.xJ Ц ?pZѪA MȲ||AGQEj6-$N'a2Ȳ\na+O?z+MU/1F ŵQ KQ)p:vw7x,Z;vR|y^xF `ƴ4NH<Ȳ̨eGٱs.6om9|( Yr ˖]INN&''@0a'6&իѲesn5jKф5y9zNQe9[ m/i8ϣ2QZXL"AP|[xIYmR8]N=A2Axa{#zO#&:@SDކ/?ŗ;;9|hϳs<غx2FMwчO{άlN O8Y_N- oxX2/!=5gAM@ Bhj(RlKE=K0(稓$,f.8ݞ `MF#**~ڏdK4nPןPV{+jQ$X!4^WW%ҫoq"(TV^yojtv3eϴl C*W% Xj~_oeAbi]胢%߯Yt~+mHaCyǟ/n^xz2BsrHlԐB gjINvi%#FP.qםg< =z=7kE2'ɜ#?rlиI;rF7In1Ӡv zV@`P&9-l򝮐@V@DJY,WT^2s8p$}I֠ڄ0` .y 2qg-V&bFdeeroK'ϰz:*Ww{{w3B6n¡CIddfv9(P ӪEsn55E7Mتq`،ʥ~nQ é!G.gۖ#e:zݎAo(2E]ln_ElVfT=g:a-l5l^-+NZwa>,{@ʼa``6c0:]ss~o ]\mQW-Qy3&-v F")j [MҜNH PE+ +e'BMIY"$ u:{tu3fsyAGXx$54 (Te 8% $Q)fu?R\ W z;TQ*‰[mxg2I-@KOKN!}/X֤1H-ƹiH*ip2[~ ߡT];8}I0CB f 7"wش 1sⳜ\ GּxETѝO!^(oנԨ^~E?eNNE\.1K `֔ ] dY[np܃."Qd[ё0ސ (\?gN!9S*1RTC4wHI ;/pսnP>>+*Y9y8| YxqƖvX#bG=|\[Q!s<%8,]nN0䎻;r!z>^4?OcawxKܒY={JAEQ0DEFRz5Ҫe>&l8?BJ<}!)+dV$?ı+ce:څ(n\nWhm(bX1ͥت8gwlUUNOx [%Ym2~ #QAUi:S3fVQ,A@1ልED!^ߙeш#6ʉj}oRU4+\`cYZquK^{91v:Zhh\! Pv_cy_K([uKp$^fǹ'-(8(z (!(IDUKs0q󡤦};{mq"htWDGp !;k.yKg!wWk 3:n "G!܈rUP[4r΄ߑ; 9Ĥ@m|ɒdYd ]*氺M ؛&h ;yˉ 5+qisnt; fT‰6#dw*}ޥ\JN]; ?W(̈CVWeU2ש\ULFV@ )*"ՌցhcYq{x<^ Ff`P.q Nrkh7氐,˘Z6E.F@ )ٲ? TAUtJLnmמFv}pz )O?Ŀ{iVYK5wi.sODϝq֍&vS!()@{CjyI Gb!jNr=(_ִA^|;SND#[a!Du˿8:rq [5kſ&֮lĭW9g_*ڰyS$Qb6Q.6 WsϾCG.I*9Xv[bo Qxs"kGyZilڼo^Sx<pʄ͕6UɈ34ዬ/yK9>\ޤ$/k7x}8Z5c([tLʨp Gt3[GboHy㋝7FfMA*usol5տ>c{G>҉v7yLr(̽wfÆM77q\,^7B:h9;o>=EVV6Ou}ӜzK*]tYU)YXwqRUw2w,, ("v$5Fc1MFK&7j46QcED@*E-첻(̝{999O{{gwQ|ly{f79X|-]AH)+)nVAi56F(EO)I٬dfP:3=$b5Cnu -^oU2\[uDOБ%B7^<,]q5|ȷu)~φͪj{]YS3O.>ӑH4%e^!b8{wa)Ł:PX<ާUe?UuTYf՘FD v2@9!˸2)8sO䘩[Z)h9|LKe%@MU ł3#IrYG\8DSz88R11<ס&Fs+h8Fq\֢Xgg#4ipm5 h ECTлD i8 z ChlaTAíPWDP}E KhmzŬg䑍H(&vZ A' 9GU"F}j A}U/l( (aVtن8ѭnT{#A!@'3 HV~{-URperny-vp+ɤ=mx [h|e|-%^ۀ5?I9z7~3U; տixyסiX Isd0 kkMM-]r۶sWuV^319s& h$ _3=*AG"" G}z;s>]<<|YM8?ⰛVG8vxxq(tJ!1מ#=yv*2$IMU0@S[HFc:|}]Y" r)%^ ;v#H().*bq9D;vYYf79Vƕ( 0+yTU0@Q,x\ndYF@H [#TUNv{x(&EQhAux[U.3e#y]?[NY.G~NyF13slDI"SF.YJm|ގp]2gPu0;ׁ?h24#Szb4TDLLYG}YHt>́,2,|-uv;wŪ0t= -O/"^%IC~I= uNAd1/;xtm+NꌮSoQ}b`Hh~~o#熱 ag!Ҏ c 5a 7"E(GUu0ՌF֩N!>MR~Q,;Fy= DJA0R߽g?]g5u$^Sφ3A ۈaH.'ɖ6ԶvK)Ud܃W/5@ oَaH;4XW_{B9![ʢwv@X)Q=U$HUځ ([lF0yoȸN$I0 A4]t`* `U,jUPUdR=N;>vV~h,(g+΢0 V*j<;M?zLL(pΦg.k=?gnƨQ#465n>zB^$#FG7o^v6z͛ijW1ad* "sMp&V3udF8"9a ;WDEa=EB#V[Oc ~O((緿OQoS ؆17+ovZj$\2V\$3&6[$YDDQ(df0rx4xĭͭ>vUD?5Ȭp3<Ebo 4q(|iV1>}O&[o$sN<| Hmg7뮹kع7zK>|NZZZI&x<r3gyRR2ܬ&_(դg޼k{92QN_5G1Rsn ͆ DB$rY\ZD́,Kj?Gc0 ,LgI6+daĭJclWCXT ØtL}wjm!#pYQ1Թs9(N&$ x +E,C֣Sˀ/11^GpF(Ԙ"> }x4Ϛ94ĈGc$ tbSpz]8=.dgKjxE9-DkF7nn&&CX,)b׮ r\K<>lVNw6>F~L$ŬY _.ؚZRk;7}b.k4s&r}c ڋU\OEE%͛>3[oë oh$FqqSLbީpʜqf64V!Ilkm4 ck:Ywoq:ȒD(&.K2nb&lU$Plt zjjB{@V0tX1z8 %xgnPVU wu;IV̴cs{M͋Qe?QF,WÓ IDAT`0b3cBX C 11MϿ ZgztVOw||C$=v sX1j0͛"9L;4'|i*Iq c vgPz̃RN o͆5kLA +'cN>1KhW%NPU%3hkiB DAvI>j4۶bYz!XaɄb kCj/YW$XMf 3QbHVP@13$?@H4`G=qQ+2"b+boWBertM&Ecq"u7A2.gjiCϧX,xήiN{ y=aPX<( جVb8w/ۉrA]EL/W_vǟ}Mͪ0mH{DB!BPd}g?$+g`ƔQ$#!vVjas(Y'{eDʛmdlɭ 7Su Uh]! U>Cq̜yٶu;#G{b^ϼcd cYYLxZkٴj)w2缯мc3U",I8D&G7HDc15&PR\05uD24:ƥd luƈUS)r'Q ^FaA*7[=Yk28^Sj3T)O,_V.'?$#I$QEMI&Sa;~hƪ("=bRY,x]n j`vcڪim,n"[z<$l5vcGҔkb'f=844LΈf]r1O8}wB!ֽ?\F[M XKc t&>_)n.5P1iwSs5d0|)wV pϞÖ-,| M{dBn ,{YB~zjeqꅽEZX,n=r^&0?w[^/z]e!(X]N<6f dz|_kk%IDXz:nf̙˶ kE[ iHh54 IT]Dm$t A/Om}kY0.a (iLI"1'1 1 b l$fϢtֱfE39hAUN|MZ91btU! EH$#I" JĈDbRp:lج{4M=B<{TM#İ$8)W DRUsFr(P:Lyi Vm%"\yLk/wr_E߱iM~N:q!/ܫ8J[b2tڽE9]D|ʹBÎMDm(um31 "t0EFIqyYk' |"B)*H]Y 1/9`mBS!$7~}Z}'vJb1~~Ï{l䪬??Yaddd0aXN9$|2+ɠֶ{j,|<"vW4$(VB^azHKwtٰZedYDEt@S5qP(F[kZUU46QZ]Qz<( `X<͙ժX#ntP$D4CQ.D2𧲎!lU, ʶ ֌I*Yͭd6Yc5aS&3+)=X[nB<Hg/`_:*2Rr%ù.qh0G!!.Nf +o/Z w!b.>a5z8}U,fiۙ}(t-^ʚI&@x3qHF\6}J|5M DHޑk~r0l8Ξ|d#hmCkh:jI%~f[\DٔHF#H],x #NrĂjvH/&~ 9_E1+$4 Q0P$̈́9kh9*iF^Fvs9x2a!#,V+EL8sS/8Q:&h$KO?Λ}D,۱vӭUӴnJxqqa ~Z!%`BHHDX4CUS׊]$q;$p$ I ~$Idxq67||'U' aY\rkji 46(Upl&&C2K.cR^yi>#3A/K.|gy:M?;ӦM呇We Jsp;mAj˫(v"Ҳ{4 5p(Id9j})S&3~Xb "(]t!F7ǿf= UEqMCWQjS@yKcS/.|˭郎l$Vz!-_W?dV!I{mz4̵&BK[;,&$q7jA#A0 V(r&"9u{` q1\0 #8]Njkj9m\ϣ=D/M}lݶI'~cN1+ɑu1嘅61tr̲8BH$Td1+faW($+ˍfI9a0RJ8-ulXC]];XV=@.E& OV* " #~0 P8L$ENߌ X@0ا$0 6n{TYSZĦeU4 *vˍ,CZasti̼k8zi+XZh0Gc qUfIFR -z8 (1 \| ~AW0}thEpJi?${\y\[onŊ=6z93{ŇD$kʸ)S)<ރ-4o$& "DaBj@ESɟ1f=8D#B$NJ@(+H9ґJ:; 瞍tMΜo|dxjj;n{BYӔ*% =Q%k"d;3~5a ȔyEON63/IavH&ll߲;nNCAHMLP[,I8raM jj$۱躎"Kx=EDXWp8:-̪14 J,A͔n@r:[mHg={^4[vI '۔;}a_;Kx.# )Qx^w5#GxGfqLaQFcpp0 0mLL+$ɇB߸(eHM U$ H*9d'Muܘ>{M6ZMG2|X\xn|uv:`p@(3KwZkUC]W6 D04Nb'S-ijBa|naZRIXei&o?KTR} j*&5y?,eqM7eHXЍ 'HGhL]ȁ&j>u\ldZGErJ9?&kp2|f¡ {&VV-O, pk*{\]h8"qzL8@Xp9{>7  L{8:lm (O$GpcUL,]_{Ebk}:Gc4V6kj#0x#bJTjʒs&pܩ"Ihh$R\R)Fbb2^.b%g yهL]iGEv G(Yss`k} 5DQ %wx,@3q-bqڼf/W%ë9k72hjIm3uYg11fEnοb‘?0sq)Y~]|vE|\Hʥgiz]^l!e4$Y?% Mm4\,q{G"BpQjrwM^  D -˅j՚L-+5Gw:Sg,QU1y:>?(bZD3+)1o:"&lS6&;ٗ_ûPk<˖yYl6_%f]ul xxv ozl( Yp:Xm {W:ֶh;ǻ=E1ȱ _{͊}?`URή}\8Jm$l;w}p[Qyujih fQEIw+ΧyW熮ȲHNYG3kK|Z\N䬯~ ɑe6FKs6e)@4f{5AŪ3,ܞJַ10P ǗNsǠp|e؄1LvyI=Fi[ߒDvUV+hLj!?QQH5AMQ1d]Mka{D]W]5?;_,wm$Qalɂ#QtD)hQ$D64Q'ɡZtSZBFg*ꛚEE7y7n#g!R1@nsg`WΙœ{fKbM0bp̊e2d1&R܇},#r#f 3G,Km[= M)s+n4' fr7^báxZ$@6kTU¨YX,x{Zu  kLdYrwWz{ a"}?LMjY,2^GvD"B}S;Y3]e,I$vTl-e~|z'ܼ/HEc;+ZP5IuY&k(MIA:^6 ׍DYz]=ٶUA±$y9_VtXLLL }y.#;MTmM8F% Q uֵŦXADe#_yG<7|MW;xx8irR"C?Q>c7m|Dpf M݆}xS:ddD7|a0'v̔^o7?0 ?~&?rѺ` 'd/76&&S$hW5!rn]Вq(Xd,Q%6!|±$FDpcABRι !Ggl"4̹b| Q0dxLW4\G `ˎ Zںs6;[N9 z #:^l2k51-Ϲ͊u|n\uLLDLaFpּm2 0R"͔ﱝ]e/}?[xOX}E0 dk]" @<' jt괪im_""iPTZU bk3B ?h(r'1\3: o {@EdIBe,Y%+ Z9̋ʴbu76v&+ ^x~a>/A` (VY$Szb6;`2KdG-4Ɋ/}4Q[z$Z8TKnfB6$Uk0Ї0Pm;w%\F/tH&\@W+-\i;̑3[-H" ϐ9qlM ^zUz8$zM ==z[B$I @%,bAXZX,ł(Ȳ(X1UX$cp8p\x<<~*LLF045c U1D3@"  v%RX7kk<] dY&E1gc~ǎD5H! <+h4m]BUN(k ̉Ęg3kq?%XXU0n,g <8el [*C|X11kSCGZS{/3{"'yއ,c.iZe1#Ip 4#h0HCuuJW:-SqhHX/Vua8O2 %j5 x-H&Dœ &Yiqغ*m]C"F\<(mSsX$u{$cXYIML,{`kuۘ$F/BN0xk ȒDKO$&dI(bYX 8^ (ceId\~|yxT5P?;hC*"inS3}j)9y}A{2)SJyo$ 0w\_ X̆cb2iFa3EY Yla qD,oǎ`"U.|u\} gbrYvϼ<4@dE ?DM C3]w!` EZ}l"?gyCaM06?ۭTXbgρ M`VϧmGA@0VFWգT&ԦEQ"tgcKJ=ff޾~jk<97P2 w^^u,CfMaEcR@2Kdhmc!߶64|{r̢>v y=G*2+7ij*+;It9wJY)9dD$My5ښS @e Cu!51K!5t=Fпv_?ŵ Bha?z"mu$<#:  ',3u37G aO,, d b*(MDuy97S8q! =ć )V#B!IH{:Fcq‘hWv9L'XNHE1"((q(%l@D}XI).{WC~NqڭgnA"3hSOM(e<g-DjB1##>',ef11bj= ǖ ĭ D䬿|ѫ݌nX7u[AZv%GZhʙ"F]^ei|Z~gEsmw2Թ\K>mgڍ|t419S^]aI M7- X\W)nK]LoB!kꨪG4?tPgCS ;j-D RP9 |:'#HB'5݋&rDu?C{jrӯ~΂ÏHKK#Ū(,$qDd"ARUI&?u ihqE`Yq:x23!/7"F0ftRa [^ ˱qDƌ}{ ZEQ&f # baZ*0@WUXx/_AS|4Lnxmw%ۖD"iXm6"{X%$4'>' ]m4Fhh]Mvɠ(- %q^u&)]G|dGP;@g*~NNɴ̤7R "*VX모못meeY;T@4@ e&dzܔL )z5pι>|#a , n>Y"ʔj>(\YE|[=MXowtut7MI #~gt=mD3Pds޷ }e#>RiO$Ai4esy{YXTr52yRo77dnWHμi5,>~Ǿ$cI{c)Y!K#A+J, h5[oO0]ixt)s3-/CIYp"5XwPM  94E.B}C+=.D"L݌סl*I؎]HYWaf6ΚHHHs"SزO^{=+V䓖~YoaV: dhJiY)uu̝;SNZҥKn夓5{?[[ZI&83&!6\űmqb:!IN$rN <|?=W!4 /8Yo+Njfj|/׼=y:JLgY>95(Y-m|Zj$EZn1t]cfJ}n޶PU,!x=6E#[2 \{qL5Z[O]Ǧ[}sm @wOw6Wu],f9r\l&K:!JNI$S$I$XX,N<'Hߓf1i`N1*>h$Bee 443}TΝ3!wOǞ<ؔ |8B/u<'ah4ˑIg1a,2 9cgOcoo^ɲL4Aهs"NaG!$H({ضϸ@D},L6ÚJ6U;dԕP$@J$|N@K%G 9py砌u8}11s3=s8ӟ {¡]c!6zq䁭ǐS, xG=y:ٶކݺ*_ ̑N,aR8JuhADXIG]>qM9s/]<EUU H[6n.Nڷn:}3pilsљDZ}Jdc8gLI1*q59dEܵ`TR:⑦#q{X6i,j^#!P%A@)UJA !(%_'ʛi<F[{-ԘN{KU ('rsyt&Sܜy3YقX ;82ت2aJ{Ha$U‰'̜p9uukYK"8T8.˗o`%Hfr& LEyŋfp{pe +0 _ZO[wBxȓH/`*jkjk2"4ArwpSmF\{YˎĶmB{nJض$X#A7&0HiHsxǸJ{{S4se]Ĕ&ds9߰[m[] B&ϧbf.]̙g>'3g෿_7xᥗɤ3D&762m&O`0$KI2z{TV3st{lѱ3MXs FnG^̾8V2`g${{i]L> =DQJSΚFxl$u yǹoxwAӟsa-ԩSx$Ƥ/惗x'OP݃7ؼ39 hµ4A|ŧ#pJ~P ܊aT2kjaymfbbL`Kqo2hZʪqU 'w"rAjn:'HX|硇ciW?e3. 褽vIGg'==} I&Sd2yqei23fLg8ĥE6OǮ<ؓ57-˝uxBJ $$3}w"gɕWƏCX#ɾkS-傛n$XZuh <Glm = 8y%ӑ~Aߓ\&K i.غ;ή'L+eW&wqK#h2+M#ɥZ)diכsbt$tp#l43Í+?`s"G@%ªBO#*LY~fOcn*#8!R>eY2|Bi*HT:SLS(kC&-rX{O*zȓDF&~fMDʢ#gBBHs={$⦶Pkub[HGU۷˴BRO|nfBB*^|w~x+[[Z5$0 0e29rn<رUS7w\o\{uK:AOu'?+iٸ.zpl$;IR55S^ɣAk7mǂ3tni gcKLX[HDkQ++*SN'#){~@:Mӧow{o?{fttvq&֖֭:::2,ejPʊ Nmf,[-1(l=߻X^a%ϥUeZuaqSqw肒$oEӵ S*'?zM;wr>"ЄK:!ٗJI4Z3iҙ̸5p8,maDUe=)F]B⢹'ڀbهETE9p8R4]ȩ|-0a yGһm[񵺹sxߗpE  R[^NW*<aAk_4DPdw n!{-m! PIQ6v)$ctyIcHB0c|߷o{ب S/ЂHW6qM !+U=W2yF*ˮᄆ QLgbԵ X'9i2e|3Z*`k&P`Ɍ#|T3G)N&2$Mk$kUQƙ!@,Q sk?5|OӃed B-k%2}ifvUiG4QH#Kl68 $HdФq `kqҒ|\&ߞ_[1LE4?ysO%3+Xz+Drd*bX*c.?sSjy m<.ht=s]5$Ou+;|`ϔ㦡4Dl>H&L3ُeYj IDAT~5.KNBF ݯSPMe}oDUK=fW^chRU+lDa˘4S0st̞Ŭ3<6m•0]8CEEÍԋ6vv]\w7!IYYB( TIS|:#}r !u$I\\\Ng)X+弚򅃋S؜W%/J8ZE(C-+A,G_a%SL&"k{/|I5<#cBMsϿ@oo/%%%,Z/k>zYdݍ`x5{ zta ?g5mI,{lA!aUUR,V,`ak+XInmQJĎ##yMjbE⊽검U1m㟺-qϾ 6Y~#mm!OuXpg~*^9V䁭ǎ&ݯ"+DZs];{X5f~ ضk#YCI> jE ChbA&!N;H$61% 6p24Iqj;¨ho`RwaW$Iq6$*_r\4&;xn}kUSp׿JQ[=cC)kz<z>FjSQ)L9$|K߹$.AUgjYޮE"''tg[﹗-k"8m`k[,gt5.ʲٗ_4s]ŦC6{67sfjƻq &_<^ǰ%>it+d2Jfe4s%~vʪKi3ŏyNNl#nʌZwһ|6/S;H'RoA:u\UO?KgGˑkit訯 7cNLQQ^N]]-4 !ۿ#z=v2HL'1 ,@k۸'RaLHB.Z\gY*N5d%F-/A@*GDW[N.B7~sN{w_ u<ԣ`ǟx_;^}}9]3st.8>RWWǓlX$?iJO]u<@nޛ0 c]9^bq~Pf=$e%̟}m73Oh"_ޑkVdY'\  K0\g-oKu4Mn! ?&i[:xMM,qJKJijj3N^)^9tzLHK|ɃZ"MjdiM6*@,+(T!T,C:eMәp~_G ?χH( A}SdYR$;w` 8 DŽt]$4V0ȥ?0l<XoC7v2`]&o34w1' ;vOU4MoBɤI^gpC8kol=6ԝbEB+O<Z_I4Ƥp %[E6:E٦cg2Fw2庨DU(:k M`j-exϸ4W敧$ 3o2=/ؾgٽ/CnnFԊޢӤRɕ̷_[=i;\@r ΛgZ+Kya5/l_NlL"l ;& Q ,$e Y$ {Z:.()u҄Sx:vLM֓d,k(6#PuJG~oTaœ) S@" <vw1Uv1 sLXqEB~RB4UƲLFQd]B$l[}O`G_ U=8ک(8ojG^ekk.'۠Oӗ̠~R9w Y{kf JIsB"-C*_{ ʓ#\+s_XNmnMN!#2%v{h&!u.@}tJeCՍFֵc[6"-0smqHҳ)Dx}K_}| * V"Lc v&Lc,N6 ,cY.8( J4ZZZQ^]^WZ}[[ȴnku| uj$ UQ F)-/!vOY:dLH &I 2uttM0h;AdY&/ l>K2YV}DarTj*pUU^udd2i:&Uzdt 1!6nA"ICe.B]‰ ?`{Ov;oY|+kz`!srk]^s{`1_'OGr;_ѯ1Dv"2y@et4F=َÎrgc$AUMyAJ]}JtMm=@oGK>wø]߳cl{ɽ#Ϛ8;d[ ۾iuywz;XAt?~ 1?oǽ[+$r2eTndZsS=HV*!$z g; &yqeAvTVp5LOO>Cx"A2YUB4>=, iFS<* !4hxtt&K&[H# v`.qu'0]ᐟL6.>dЧUG3yK?ƫ/\{NEݴqHӳߴL(DYϹc3 GeqؾGK~WRS[q*#E"E{ ʓ#XT-TNs B:L;bt$΢( *0:ӷ0 uEZH'r̻nim埿uG;jkۻVIBo|k5O}]ο/ 5s'Ol{sEʦ&< \ LdT@F+_w,Ft'=j$ܴt"]HWiQǜX\:U5;2Ml[bkygPm]Nߠ~ U=Q;㩧l&O(fF9cWqƥ1g,fr| I3ESR[;ў޾Y;HO, l 4óoRv먥{mnZk{%lJ*-qz-Z}2,k(B@mT33I妛}?HeE?8e^EWwÜ9臯 (4dX#gۦ2"*I*RS_Gu6=yUKS5QA"H HD2e[cT$A4 Mdl/N $N^a1uu]4U# @53Kd Z?f&mxعv]I3gpWLk_ z'%v?GSnx%ӑMꭻjL: R'xvkk4M磹B>g 5 \ 0iHh.Fԓ Ex^3ыO9lzk5(>K#\X]&64st[_[+UM39؁ō'qjw _~"jhHGp`Gil~+)L Fhj .TE!=ݏO' d [%P0O}ݴ,b䄮?mIFABpZSQdY"7 ,Y4$ W=rl^BH@K4AHmgwYmmI4.\f.X(758s<ԃ<:. A;d62hBf%nB !U,D\9Nln΍ZǦm]+8i݌oY0ؾaɁ$cGT8k>u eMTOg~Ы0 |ljJhV_` Jtag8EAUUtMCutjȲ$IE}n/U'JY0+//LisO?vH]2, = oXEow/c )(ٳfYf߮,"ϓN ) \41M ˶mdZqdYJ2 lڼD"A:aTTTp)'SYYaǗ'7ӗZJnHLI2;gmf{b$k6nMnji4AVu^ n"" U8,J#)Pժ|=/&pg??*c{1Qէq{`"a th-=$ubF5UQRS_:=Z0 ]Se|>?>]GH1&4M$5dIduUH8|8$ 2CKS=ե(sv)nCPR렫P!J͝˂ Σn4&6؏nw۶k./~Pyt: ^1[~up*ko* 5sѹ'翼¦UWߢ/뛻8uQ39o_אHf@ȯlNW\y))?iqU>L>brZsrp\96[؎8I"”!:Rt:RdPNlNFZ:Zvރe>&MjZwbVE4D&t҉$v'_BHHL\Wcŗ^Doo,@UTcC޽P$DdY.${#@F$dp D#JJaH쳯}fG  # Ko׾ɔ)M<{|nsG,Ng0I$]hUvow?CV I& 8PRhlɍLH]]-%(%%%|QQ-²l,*@I2"HH$qXR4l|.afo 0 ,$70 *nbuփ  spYFUU*++inL]$r_+ Κ96YZ-]̽wUOǼ& | ^~,vm|} ,tu[t&Uhe9u5 P1S/>;[ Y.v!W˲HRH!I.8֚C>źK&!͐xml,#4uIBTNzc=l̰8#,zc<@Jœ#OVzdKInΫ_Ѩ ^n$SR)P 5M2Ѓ&TL [z2C .%M ]\R~)L>`e%|E`$i(!niVV9zvlGOsA:@騝>^qJ+{4!EBgJ\:tk<̿/_@k"3N1؉O\fN=W?~86jXJ*e)|U֧c9ec;}$ [ƻh~sfqꧯz4o@4B翲fJOo IDAT$Y$|F(qR,QN(B47Jg򸮋(DQaI"(ȲmR e TuD+ˡ 80,K8, * w"?H$h]t&4=#8`LHPwDnZvtlX6QKHuOf5 ~. yjɭ?d^et[6h-;^,lF"+7"zuW(غ[UQ4L6a =c$$>]y[Q3Q.b|4ǘu'i18A~epUU*&3ss»:V<0W\>p%K?p>]^=P=.uW`-큭GSL>\ 4O@:5p4Y:jk W6̝BS\b:^y1RDqkw~E-Dha]WzIz8uS2j*ȶi}q6jqtqX n9Ԛʹuu_{sѿrJs}BL>r>AS 2P6 C Qe3s%=\B;9R;̒c38B(+aygsڵ$O{h}ktWE&,@d6\ 5M%f92,. %0d9t>&:1uICn~߇, (I.'w$=*#|9aAגE{\wǦ6\j"eWMK $ ,^UWFiؠV/oɛ֨yM\ eg5!!"2_ 5HO%ec=l{AR;qmpI) '4% :P\9L`eqq=ZAۺREh;u,mk%qY(aͼA뚭k,! USh!I I^Ees$Ib8t4$]U%Ic.kUHn&|nigKD0 kZlt:]d*E&%˒0bqlYB.H.CN,̾j*ki*l9-F  SYQ[y'illEQHoja嗿5#B0}=_ǿ@o ˫-glܴN8Tl.WI]9e++ <3\? p0l{£b7w^(lRڶ]Q~n885/IGIC򐃪hӯ5 χϧi:`p(D$JIC0ozPnռ(ӝOo恗[Cе X;NW6,g3Kk=0$R ]v#{+UOU׸ l=ܥd ?de-+_,ӾlFej&QUSm >{8xf>/5nĜT \w,tM# (,2l&J`&b+U('q# pYDKN i:~!.ad y%ӑث_ \lרqe8faCB꣥|kӟN"w mg(F2 8BaY:";ήE,$ºҽ\[e4@Ug '.V=;:Fձ+*+[-+W:6- 8ob.wcQ:˶ge7Aga4]&ZGE~[W͡'Fq]}Ÿľ ]p.~BlslU $Yi'ĕ۟ĴM91NNTAEaVIp=(scEӨ7nzoPT/=onl.O6qhJ$BmD2iYCUmWM }㟠TuuH(8v=t4d8;%TI{p$qcQO|¹g,NE~/t&@Pqљ9“&yX{$I0ov#9J(B Ek \yt#o] 2CeW\$V76:ƨP+Mmwa[ DKFԎ;2m$FL3}艁8[Wo.`m")P;L2C4̚BIBy^E9 rt=7X0>) %͒Ȥ3qc 2 OJd2y (wڹwRYcPUP2esXe%L[emO< .•~OG}躆iCԱT,g1[_D vC0)LR]=M{G'== H&I3Exӽa nб"ݿ5EFB `(H8" HuT Hwqvu?^dCwD(]ήZ@@g& ]i$inI&$d&z f=yS?vv{&4oo䱗Id&V1ʹ &^g&NʭEưö́ify$[]`iZ-A P%\ca:N>K^T&.lu;UsqFu=@Qx&[+uϯ_7l<}B\I1s]IRd,"uqp^Os9N0wk|ke"y{Dq]-'\q9Jn:҆.ڗ)/'ofLl|p#bc3=\?$7=s>bS Ҁͬ:uLJO&0,꠱ 2\T@8"ɴcP?yCG')TxO;d@X , Y 5Gcۆ{e. ǂyH cesסupˮW_&14;f*,A*=g'L"OL3;:+[5[F~ E9=\؜5 KCO]` vliS۟O~CGnu !Tq?œ3O;%Qg< BV˲$ ˉwd^ub䨀@$̑I40LfR\ *A._VKKa6a{8ҵu;tY(*zvҽL:8*O@卍$bաR\UBU W⯜\r6 b;}ɷPC;HNgH$qDbq\}$E_ƈm6%Jʼnlٺ;Q`0/7L'=>d'~IBV3`b*q<ue3?`D 8KK ;\Kw>g$ˣNN7[cBp8F$i\W5M#hjjӁyTp4<^r:G]P.eeUQp:mwxֳRY ðpKU6ϘϸCqFXdZL #:?Ց[cpJ(N}woK.͎.{>f[zdFO?p۰EG7$J$iN^p(*Fu8&]z돗vFK%n/voG&鑬/i`Jjh/9Z,#\.[(<3։LӤ(ơ_q12"=ё5 O~O0h?U[}$鶰uҗp 0L?LG>Mu]L`xU=A?Qxe!QSŴ?'A3M!( OMѓQ,c]hYJӳG3)dž+B")’t }n3Dummh˼C!T3f& V6WH7QU8DPf*MtӃ$dGwpvb3h<ɯFupbLKŗNgm_EPĂM=e*6memϱ-<$nx1I_q|*\llv,mmmd3є,zp8 iDQkE DQhxMyݸ&AX`Y\D21rvGt6bY&Ձ4 TE8̥\3iwr=+4L¢9U|39$ lj%xjS0oΑzY eȥǃaFK'h}=-"S?p<%ecT7X{?c&kޠp#D*JCoo1ڲ}cy}Q+@:!yʑKI{FyG γ+!"-_>CaYQ:%;X7}D'ڶk:nN n녉D5,eFq/|+͌ᶇ7HF_bΌ:.쓞|J4Pd c ͧ~1p}W}F;66` [g7q CaSX&[7I&Qdq.0MesE%$,ɣBvY1-t:nD,IMCsZ#ƴwk]0M~?n{JѺyӟbg&)[֙K_k3 ;"66ӓl .2ZutR%$[J1r; .Yeay͸ctx!ԅ:36@*1\"mBtBs 6i cpåGO;Y YFՕUn.GSOe:2gyE["&4c 䗥id7mej{@@qe:tF<ě ݏǧgXQ/ޚG4}4r)h%~>j~m+gCvԓVM̊pņ?αU!,+.k>h [mF,DL&3(2Ao4L^ӈ'fAt8tUQFM'B:%P/]Ӊ'S{]]N$I²,2izqݡzd㺶..y +WoP ˲w"wŁ hM$MOUE>S|@#Rxhcsz7DK " .G.;q} 3+ݳOQ+@_G/hy AEC%{q_޶tڹux^YG.3ÅdI p, !)OEAp䷝O> ghlh/=E]qEWF,܍uSR nX`> |8Q=?y=i5uh17c@ ^nzRdu EN'%ƥ=O{d-"\ja}A dp/\n*ɔTC;: uơF"x-2{[.iv=i2v=hGłH8㘃Z^|uksps]x.BVfSasl'`NOlg%ZH<̥Ѣ.3{D wnX}k!;HjIk]|s{VIHEv^~Vdj.A{!Vsֿ}9gbwL6[pt|>?yt;޺nK$0 Izd9\.'nĝWM~Z4NaJɎ'v9q(\j:c&E"G"8Sp%Ii? C {s̢ƣiTr[0pie+H`:*Ӵx6p_TR0U8ʏ@KGmٿ5жt2$$%Aс=]dR@u֔QѰP-ub̑dE~~ҽF%WTxJӪkCB*[eĮf6ߢSRz;Yh!O-븯xY XrG p C>̋l0oyY1iFA*I"STTdWdœO[nCs#.8.pݰ cR|o>2y}9ppa0 XfL]!lFə:ock{=9?7TT4q]jf7Hz4b# %3)$=cf$17Dw{7eR\^FMS5"HOwq>eO2/3$mYLywtcqk  (?Ӹ/p blI'XQ#odƶufҗdqr``LS5'}l}51W>\4o r!p+*|>e[g GcddiҗѝK@ IDAThURqZexh6[$ AfvqqT}rBf:s99kزj%!<SuY{l|iׯ-$4->!Oej O2˜^cǗ{닉2,Z nd]/smeaJ*I_5@ô\3۞M| sDjYLLkdg*BT$LӁO=!T-}jc{SX,iI2 \.'>g"O,$Pd@G:rjK>CfвIL=eY|am+`،7ޝաȼlau,GE`،O A.eV4]4թ7Kǡ՗A2QUu5el@#IP[ڑ sfȰ,p(CjNЕ,<\A?v8& 3$.lʹ =i2c r~b3Qu<Ƣ2\AiYDg35꨺?V4:G*_lU R!ӲH泴;]^^Sv#'؁JCQ.\ $9|-iDW^eH\6eۺY?4De[{ /D6R;w>g>G+dR)|‰TuO@GI&`at=:muCaqr{ [-]#?ɩ  [W#,SRHy+gM&ֿۄM8HE,QP (@epΧ%Q~rm&"h]LۅgCLT:CU |d9_ds9TU!YCUƈf-Bu~dYDay WU qP>c7rgC}ETM]ٶz39RT$JAϚc',:FA6'pY!oal0Jr"STQWiזz5<.f* oh<#X0A@ aѬQ  /E8.0W >u4|}ꔔ{?1r6S$U_E͜zY9~QZĂ[oBv;˯B}]/ 9}*eTY8TM QYHa 6u*<jΣu`5"kޢQ4>RѾ7(|L*I͞T^z/[X&adcٟvNa86up逮ρjQakSN$4}eE}pY$9@!vlUqܱ,F+I&ȵ!p9T7O^Cq(_'EBrZ<p9x.t@%0M!! I2躎FQnA2!3$ ,}J%IB$}vB9儹ֆv^z*8ԅG[kg/[,Z"xDoGeTϮ=9i28s__A0`Q\o{o&maY^M8Ǚ# M6Ų,TU: Btt9m'P <%M=;/~n_#Gq?'?'t>罾/'Ruh Kr =wSۈ)H=hsp?o<}<}s_ɴw͟C9"{Ʈm Gi o!{I?od׫Y:D^7G> d[-2 #DC* %Jȯ⣐~ \[%@X,Yi&a`wIG"d{Wsi>@NHx$AYE壱J'MF< }UO(Z&CתT38p+GQBMMV,]'nnEMHZ!܎ mm{14CsOX:M]xeW')bJ;ݾ1@F_ņ(.V[j:, $)ӰG;Fqc3v9Za,ް¼xb۾x,^pѰ4rFX, 9I+o} Ybnz`yЄN?\#K[blco@pRXE(lc\N7?Bk+zv %!q֞ I?’mhr;\x=UVP\[KYS# KKi ¡-o4Mn7N9fID_bx#{ :;8q[}@+,CXɸ*Z0cDOK M%P\g.eP xtKSQ_BiMn#=/tֵȤ ?q=,ˢcc+сƈ(qR^[߲9:6&0MY4,lB@K nkJoWgD+A_'kG啗MIy÷;9Sx/X xvN#{|{?~'wJo_~N=C*F~ <(pVuQw!pְ#nXI IƁi?,rȦ7IH*9r fOo~ұyƒŋ@Nk֬e޼8iD$laT levXVG66cMB$ցf0V.+0_ɯ|H$5#btZJh*C)Iiҁ+a;V(m*v RPOE*6,/Xgdݩ, |/bc3}zz}mlc0ң: wIsGc]Qe!r{i1L%GFŰb^\% 0Mz1z㻰KBUT9Ʀbo M!B./!b4U8Up;X<W3w[a8T OQ}=5Gf\yuh,b{>r#}6 ƕY:iVمkp+-ڧNJd]E ]ժŗǟǗēƕ%Ge ²`Dl8$<]>1ζ;$1Dz,s<_v9X:^VeS3yvlN24 NKq}֑If, IeS5E{.u2|n$"*-~~~F{4!.B}QRsSv"(7maO[n0_g J}l6nPu{ gwb1ijl8+ Vi˟䦛G,'?롼l.K> yeҿni'fZ4Pߋ3Pd=OS}FoCZ&8x+Nzy4C*IeJv%af"珬'1u \{w:*SOɘk$M!LT*I+;N1Yip8|f ݤe62h jfe;7#=cU^YEHpI-?fR'RI//G3zVzCe$Y69Kq~?@qS `Y&s $ri3gb=~ȊZԅj^z OLcGi}jM!=okV$RIx =A"2CGO9 Ŵh/~O/L?9kB|3LKH!a oSZh;7@ fwL.\i' x~ĢR,i:, 8Wֽa&t|^\N,|^#HN*\xR|=v$Ib'o${Zhcs0Ļr2>LCGu4.?xcoӤkKC}Q ]CeJJASwK'}'pY"Ta {8][If0MI4{zw޶n,e*E*PH'!IW/~zlٲD2I2$H`YښyWyϻ/+An n3W]NJկ;gu:SǞY]΂[mWi=Wz=|l6Wh¸\..KE?n!"/Nr[=*)?8ϵǿcLJ6膉iZX8%*Svq i{uЯ{x@ 2g5t5g%{v mlDBmaT/m~k}q| eե(-0ىeBˆҩ辐㡦  q2zmO2M2Nc],gQK²&^}D [w봐$  Q\[C^v2ŵ5G0xepLA3$'S8ƎEglkb:,cn/MR"nõ1GƍdIt$) SIԞp729σ8t{YNL . qG,L#K*a#.?kڀ9݇)3{'|L,?sTؚw,^))vP` @Gv]z 3NAK7X]9%e~_n9Lo,᪫bOo+4bcœO;︕Ҳuol/ZoY)?|%%gbߘ]lĞ a8h 2vf}vnj\%Sט3Pxĝ?EOwtZN,L!X_AoIyzryuSM%r!>˅`zy%Y(%4~*% 8\Q̈́([ǀ_xsK lbc3}Io{goDuk]a[*0roBvyq*}8i1w*50!ΓV=8~R0!\BETؾ^L>T4`P/-G# I F[^mSyP IDATTBxO/֑5 I K$Q=nO9e'ەm} ֿO($./ē(׌P'OdiYb <%ǎ=Rk桙, mO&|͞l=q6a A^ 0T4 |MdS'#?DQU?5,))~+}wXotϸoڕcxRZZ2i{ˏ~N @QUL%g 6Gۚ|o1uGju3X|0D,,BNNdn4BV9kؼe+}&N;66dVla$Z7' EV)*Aq GHLäa`Qx ir:,jiVQLKU"#"ȦI}s{9~|~\**=f1:҆zp?waLId [g }I)[\ 9Ell1"13?ej2U#^,sJI.76멐=4wnD$&b{8,$Bń\rƁ}5P%b@AHux.~E2UY)SGTh 9\Fq'Mgji|޹T.ZhW2 ~m4 uƙ*3 իNik1qz\B4gh*5nx9?W>q.M1T4]pg8sI\FȆbiHApIϡ( %e% UER$IqSRU㖰c ljaaZ$S)r<, \> ͑H}^e^7RpnkXbR)Iٍ/8+>H'Rtll#O) DOYؼqeƒD:6ȊDYM9Ujm]|4 !S7`qhi{9+_b۶$zT\[~I6r:)p]n37,}N pSd]zyN;0ӄ~J_z/ﱘ"9s]\{n.WTWUroe1K@L[:Nm0!p|TT F tlf>ib&f0;L|h)0Udk['yՖi= ޒ [j8q$XE-(y֣wKmGقP8Cy$TYSNf,/ODRoS̡ٝ/ ֋ Lo:aiz_bk9bB&o㺢:d`Ѩkkw|d|BBotyh?eCV)b'd!NY56B$H1htTƟņǟw:^/]u۽q3 ^zZ1 oQMJtko$l"jNl!)Gا;W)wrfZ?\bWnBy!y4P<47ꙢǶtK p$=M2paSEBnu,2e3LA4-@5.6m/x_{tl4ME!HNg%p=[k9| HRds}tX@ ӟ9{L÷oٮӔ}K))."t87p;2H}> ;MB<-!;';S>^[)j{Зt KL_,#O_?CXv@.oբ%\S;~3^/ CSQ`uX6́TYa`;$TC!7}Jvۭ/B TYz{po>_^yO|\&MQC=M0j JM?{'U9LދV] rwji&@% }$$$Ih!$6:.,,EV/6gn9jWj%Y;;ss=y;S(\+B 6d0 'k>-Sc}0>MK{gt!+̭?) a-#@|y3hVu }/S̎`XY4B(qq1* f|mqIY6)!à+^s7v'nƷn/ف FFT-m$IJl*ķ#$3J~I Ƕ^Cظn [^i}Y=2C_{#ZF|^Cyx)Sx'ZMAucIšǵS-!aX]tàqyU S>N$I>* QV`'?:[(tHyֵKOev 3n~f_Rhu+?IxP^VSd'>Krno{-{Yso_Og-:y>H,yDS9{I 4]cu|\鴝7Ջ_}-ɗwvt᫫>YUqNߗ-OkzGQJr|ejisYB!.if򸸌HHPS2Jk 4?\xwEUUא`6ۯĚz">F||hfnD˩onym?qA~Y|)8v_޵;|Vw_G>#%I6y PQʸS܆6 [2@Ɐ!'^CzxOZz$[g^BJB(5C=RJ=zI&p]EqZ "eQ+ LLx4P)tVpKӐӈZP?4ʪ4Eq|~ ]hsU ˱fs bl 0}I4 Z' [vSc1\toLu|[V0go&A_Z`3EaM~ãz-= v퍑]3*1)lw.$a_5!lUݤ&%,q | -6Kg}㟰js/꠻}?ɡaѸl9^ ΂Lɾ~oJPC iᜏO?u!;trϻ5O.u,c4L4 e-= ]\NԘ4,ŞfF}GiZ,%ԭ;[?AZ=عޝwb&eMp]qM3YrT!`)Ąu! \u:~^;z\,:btpv&ߥ򫈭V=c?]?ئQO7B@:!ce !HP8a%yøgo\Κ4WB7J!({j)֢=-wp6s J)L$3LXE! uRтNusiAJSϹ…b'Rȉ7pt]f @U\[X~%k87ĭ#7jUMЋ8"l݌Q$#O~'34ϻsKF(wnÁh(Ir8BU14!Qi@ WRwR.YGK.&R~=+zDort6xאs`Vk7f'l=.S $[Y5&3ZƢ0xRŌc;U{o>c:f/ aTDϞ:И =]) j6NM3}At]CHYK:5WIb*d&b5$$Bd2اUܪBehR;c/,&˗a󍬿#^˵ay#YSyqЗZ/Zã~ $_ 1Fw4.G٧f\X3@J ݧ㏆6TSuK Ul2}> ?vZV^{ axm^瞥Bw8VƦ68CF# c'u@E,‚je__Nw:x/Ű|Cln=qɒ 1B)$n&i.~"+/= ]xa]5?}T K u Q^z~z& [gll!"bi\[(x-r.{:cƚ [871>7\w _??ӹ(_`G|O-]n\x޿|g=uϊ} Ȗvp W@PTn` )VU12QDUH/]~ա.Kg4n#aW{P֣EPJNԹj_׈s1<@IwuJa|45E\QөObgW_1נU*ETCoE WiEm8ō~`0>Mq,"op\\WMRȱC uISFQ)} U,*u%l|Mlb"ś5 <09o$=c'l]#ֵ^xx6}̾-(gLW9ɽu8E&PU%uԭ_AڥӾ}׃[ڶB&(n]^sNf`-nv|nRԵnfdMYGI :>pK2agh/=nVKS$ûꦞ=G [pA2H"႞tg/u k cDMcWuׯO|hm7@ۧ}u!WJ),f4*f ض]mn:5{uOȨ *XyǪc~POCz!kzӂmYxiTvB#VH<C#d84LP4D&[Eq)кYfmˢcW;]ܘh\|kl?i%Z& w={җŽF"\qe|~hp=L룟Š첋,X^o_ ݋ -"H Whiknd}|g7Z IDAT<#Ͱo弿^G| SG6 A ZEd?n ^\| +mZZΦ}4s(Vͽ[Q1Q둻QxvIMnkHڻd|`'C\yi#z:w/MzuU(*:*)ҝ*jm־!Zzܹ!~P ~L2u) 9,|:Ÿm4Xڍ鸮CN`T)kP!L:cRRשnmS:<|6=ިv&=/uR) Z7S6yQ价ܹ IVEQOkLj}˨YFEkUc#]~}}4(WWc^;YC&@{;JTk% ;:%dbd 0ceĖ- UJ:/ Qn]~q yRJtزs7xKz/a`j1I)}v\17bGXjڸ?Lp3OOC%$l˶MN |/(*-9g^6C$G(W!dQmL"ܤǩе!w=Ookbvҳ05ˣ>)5d(5Gt *ܱzߤopVT7P2˅Yi"#-J'S)¡b.vZ)L"v%Ͼ=2J.AfM2_16=}1m|AuA- 4mD.\Uw;f#.8qQ]̪l(Fq&D ]C&o|<>z@8̥g-{be.>34$lG*W/(UG|4݇t8/LqǛ*NF嵏raOzp}.pCuylLqf6t'ˇoe1=<'l-A&7Nvv136/k"2&nt4CŹz>K?'<UtU=Q6T@IQWJtǥ־a|=`r1 P0'q\vB: <͙z>G49#RضHyD+gD:5˗75W]Xρ 7ɛKn<%Lap7}rXsgx[+(-(QPu|z|ɧR(םVX_ yo! C Hg'L*(R\"-y*ˠ} n1˲X,9m=Y0xAXVLxيa+/~]9ǝs(udkDflae|]̭:^6JAXIpџ;ĥKf@r㹦iD#tJɥtj'H*YUKf#,[5xa'q U_so}4q+7_78,cϐAz$f̪ !}C]wqˇ_=GbvһI G[nQ8c?cgJ Dh`&H8y7ndE oXcPڶSV !|! _D3H]Gml똽݊)~͊QSqVkӏPKawB&׮se6ۮZOغPvNjbJ)L:eQo3Ǭ,8?s.qBA<`_S-ɐWQ;.jm;?o9.  &PJ7mgY " zT ) [:3M4{Z4i\6ׯ[t2C0v'OZXdageyx0}[z3؉N5t]OJoZ*҃C|;: (Tˈ5x B&C] 8H|*](g*h˸`}ï K>Tv >͡!n[qC,{ Jhd .~P;O5h>hຜhU }D2S5D)fdtukɏs}.񡁒*:atA;mkjw47T}/qx! \gl| S|95oF^42Y v&?qy3Φeu+a̿˳ŽE4ì/ࣦsoC=8v1k(ie셸B"|hU8W90)"V|'M{iqs VSsuV/9/\gUKyߓqgo^k(}z>T` )K2QD_+ƒBJ+ڨ{-"\o8;[@Hm[Q:HD # )uşu\:!AD7'zY\Okvͣ|l5mPJ!q&od /l^S5񄭥3 CRhNyu%5 Ul0_SЅrΎFF\m$?Ls)Z]% &mv]l.G**n2+\ץ,?q1!eH%m{RJt]4 |>?x}lgy;:^>G˜U5e Cz13i"M!~7>B+vp2Yd 7C&т^gE<-mG3GUf06vB/ a>&5ך'45C\|΁-%/&vi׬ncxEHB.LzvQZjL^5|ngsu[St><_&BŠf⑩P4 WeW$ղ-F \-5"X4!=XLkL0ɏC~|>@,T^7Ħ[߄X4;j<썚 GO_+)ZoZãz賤^u? #/7aͅR`L$H-Tm#T;:޶L<8EqH]C7Mt0& @6ΣkYr٥>Y +c_|DOtd4KQ_>u!O`'~f5W4q}K7Pkqƞw%$9[bA9ssh$,Eq,48RNk؏1]yݓ [ \Yoz-n~E~go [-3.lM$S(YL`&44}D~b UQ,]p:@,W/F9 CXRJbe@Qd{X=Mc2z'4;;cU5-K_͗ qʍ^zxOغPV7}Oeg3iXRO(Bg=6ċ#(&uܫp8/~?3uU*+ZMJ,q`=uyR 0BƑ$4rfsҩB1G(" B`6lB{̚zq]GgA4KAUk+vVbg?a{MɷK!8&`*M%o >]N B H. #p<  UQ@yK)_|NX~0};v^Ea[TѺƽSwZV^s rO02؅]۞IZ֬ IV 3CtYY`pFz3:B)|Z#)VW߻c;$+crJ38:*كiem,I~*}sw=W4_?~.s}{[_Ea+ Ƕq [5M SQ j+hl$8'$SY ggi:PYWo+73 3N4fd'-/ EuS u3zK2 18B3c'XŮg^UHAYUM+ZښMghT!misF/J@{NJ#cvE6qY]AxJ*𚹅1w}+|3=w\W/z$L4kQdrYn'HOru3@v)q! D7, ^ )tU*e9;DD/83,K Pz"+V84M. dr'_dxEF#uqޝ< NUXt%w&)vx}|S?d<-V)%RJ\ם"hq\ŋ˛(N]]!04Γ`u] P]j^OSds*X$Fv|\|.:S(MjN08Mcn"zﻩh,ia/jz#8})Bn%Oχu>rtzrQsEmBJa|+cP{2.ChgH y<8wqB 4@,Fƍ 4]:<0~<04k0eDr%.?Ɲ*3ZBK_Ỉ(!)Q+gUCh}! ;XnYET B'p,ǮHu_wV=N_Çp.ra am;&' !:b=kW5TEeytFgOS;'qw޿i,k+7p+xyxa?%! м g)ȥ3 v PPM0:#8/gtptjZרqEjN:mFsr4dYD~Ilێ5@6BУa|Մ7 0*N-qj`W^Jz#||݅Լ+>JhEoz W_ 0?3L iHt_xA]it 5!5(H=P].(@ XjtMfVa"rXneb/Tn>FDE[FHtW:uQ)nqrRWkn_coD͕OEffN,ҋ/X{pq#q_}FuDZDpS)E*%Zo+m]zE#_M,'49Wȯ},˙\|r.ܰ9jDXl8l;KUSږ`W?VpƲN،${Ifߤ#a֝dl ˚mxcekyk`'ة4Z0QWE.UÖlo&0&OXX 1:FتZ0%PMIf C7HÇM%'[ԣEu>*qlY{1Ӎ'Ɗ\>wtYȱl?@N+ĝ'pZm{"J;)$Yv)/eAyNOغ=[?6涨ubK]u}J%,OOH\GqՑ9d 5:` wOY췎3~גz*bJJBbM{5=}+T("~yԹa4*iĢ1KJI>'Ic64k _*dɅp݇~򆒞? 7r.ڛKV/-G)]2?` JləgFU1pPu9+ݸH}i C3E6pmPM>PpumK\LOq'&:X7ҘQgѴMW*7}䜹[-#`:l}4BNbn^a4%l"茕msɂEq5I0(HQ$HM ӼaT6{;v"ViH) {VO)2,ảeی&F^}:_F}m9lxg9tl:i*6_sU4UzdfXb'l!N!G~D A뚶gkg RX;].koã,3GzQJѾc?##K(mݲY}ctFo<8lW_Ħ˹+6y᱈(X6~IerBFR U4ዔo 5HWM/Hm@1xtl_;*^&=w: P6Қ>'{_Jke}K+AdbeFyjm"e$ERX`YK[ovkotѻc{~k҃5D4K)Oil=#QڽUzʵXƹ̔M0'$$WHaZYcO @Х4B5Ut>&O1U=$\vB8Μ'J) EP >Uxs٦TW0 G=qi^x ܳH)*ͯ׷ǒG7"Ț1D׶_dGaYC=wсp-r:¶4]ub9.E:g\_suaT>sogm6m X`WK!F@vBN\f 5!u6&x(z!4~}pВy"ɧ~tFq*(] G uC1!A^:21TP$\[[')yU:Rl&Gb(I.gsvcGWiؖc믩5 B`'5/joO!%P1VlT:UR[>?pxV5u 88L|o)%Lt63mF_!g6V,(!BQؚF3yR/zdl}"Mbw?/ّ3\A6 C!\{,B&1>QM5ԬjzrDĤq <:AɌc3 z!4Gź̢né?#]u$ Ƭ3eXFx*fl1vʢ[9ţН'N8 W&BzL |~ ҩ$BJ4)q\YYm!b:~!m3H#xMT&/K4Mp]wgu ry"8Ĥ k|jLS&p?N~| L)p-/MY]R;h>a[Ƃ.5q24{;H$V8CMS 5-ucdP=Z+JKl;LsInIF)@B /$&|I#B m. `.Y]mfr~jv]y=?޹s=s>}XAmM뺸U[jo x?;|  (?q/c۟Dv:xr`=Uv"$$ Wގib4lAD;u#Ҝ:[XgKxE1^?/o^JS?ʏ}U:͙}_Hef 8ZbMz1Y3|ƊOr1J[ײ;?/m!8Ub|oކc,<+6L`']%l"6haR$2S6{u?m\T0~{ n_ 7@>Ty*Z B{hHQtS*j)G8&)}l.KT:b7jB!&cȅ !*6 e\E~ϟ\\!?眕7 kI`5Ws~P|I5 |ִ%hI\ vO5WՁh0e7F&21V8NuuB'p5J'nT_v|O%uY&L O<麶vjB\ /;_sL#l}5G.QLygy(E.#>jȄ@UM9$<c=1D;A@ [H*rMeR-~ 4%<-R 0X5\prU:**sO 2L6!uɩA@*=5k끶Nnعi#Gk_R ?nm)l K,rPغ^GDY‰_fS3I\--T RBaӶȧ2G !0,H}u=\DgaJ]? {GÄ44nj]|W($@MO7(}ɢC^E&..BoXddb;jR+RK 3y{MX*Q<|Rrӂ.1$+bE/$6.{M꭯f^/Oaas 1MsfRR%Pg{.h=uBIzbR.\Tp9?Rб!w >&Jxc$btvԳ+0 BJ,ܙvf ңxM5t_ol}/!,B0L+I4$/E9S|֑W B|yX?Cyxs_am^OFs)>o74yػH`amkzYόU(b44FY:sCjG7-:ĜZ@ [`G9ꦦUWAH-lՀ뺌 V&N7B"u~x9=RϞ 64kIg[?"fu~ryVTv0!(JLeA05EbG[HB%U`Y&xӴNiKCW'~ڴ!\O ӎ-1vꞲ|Zغrz,f :y3l m/@D1E %ԯhi~Ԝ:rInet6 ^ 7z4n] Ei;cHE=SP@db]=4<#S̤**#mRZ퇺B rh?e\BK pj䱇]&ɉqExw E-caD<'N H\9X4Z6ӃFՏR|4$!ihuEU:\@"#T$J6ד5-/#̑~V>m45.*$G$G')K3}snZ0-'hv|ҜQ#lGM牝¾~/0bQvߑyj/?;<<5ma՟Fsq=w~عoYa\WsE* G")6IE8 !*u(xޮᶾ5xE9߿uf ~R5w4|E5~>H]YZغ|3*[/개'gUq]q2{u=\'XH@PY/RO?uWayO>ܲ{<@pGY>-pFs}$G&)~4$.p6FP=zVf6ũ1v?t !=Wb;Β|&Trӎ6:tB"kV#k7F9,TZcק w2E2v(g՟9k.]c6QD2 ^ќa\]e^3|gik^@i QcE:CiVViR2%64KRi%+h ]AK}˄Ԏ J8z}ϱE=;/9ZU_}.TeUCcOiS9w]B/ s)z2 '䐛1Ly|?;'7D0V. qཡeV9<ՌRc1BQ( Ap8 A$!#\\R\ M8!'tJOQv9gRXEM<٣Ģ\soư%<|纇M [.#YZo(UY”eMcN; A)Sc3X'%y )%Wꚋ6ꛣ9cRoR*$ܼGa_gFmckagckʋ?\&?-lm$k㲡|ӕzX !06Y=rhC2^#Mf}x( i9;~@X;LQ\v{{BpL!bv*bZmѵhNc9|ߟAMJI{o'-ݳ'SdFd[j4g!jj^bI^[.3?JzbR3CI! m taPQ F`Ft#ҜQ:qCKU?+h}h{J%v~3d_؎}HW\HOYU<3iD:qbz9 G(0`|cYz),M2a?Ri6v1NIaN3cFs֬8GeBnh'{~|d(%6 ~h#t]z *l5muZغ48(lKt'X>/0m3nmϬ/@LOOx&Fl]C&lcCmdC42(@aC+aDZ--Jn8#\BBpX5&8mYԞ8 yQD,N$-B!οF^񫿌iW}Q c!֥H[ F)} ^fp 1%ayBJL"ROYqՅh(APd)w̪=Jލ6E+0y7Na+|ɺuKڢ^_MK.}JRr9X3L^kw6R3'?}HMN v|ϧ\.sQJzLh$c[H)|t"v:>jxo#!RAt&Q`Ŧ^,[Od1,B{1sjkY}^DZ1S0\V޴!9:LQq6-ڦZ[C6'ŵٰ^d:݀4g~a#c7o`ͧ>^9֞>o!a:+{p'ҔGpSij/S^9͸o|!kVM Ǵu2%A9k4KKw0'';foP{[#9kB MPmoyџR /fk/82u <XPA@|z:i|~Ǟ{IDV뚳-ORΧQ*"nJO;9qjkjo{37tcJ~llϚڛhl=n-v V\VX(,TjoBv- FyCQk-m WeQP(!C2i~W)a&jLk^el\ߨvan3V'Zغ㠨z@g&7|ӨLqBB+[l{yH(a`lbMul5+<3| F ,UjNL2Z^EZ,xmID[Q7zTp ƽp2iF  RxQ`E,L4xo1ت9*}+<sYLqBK3Z.9RĢBMHgk[gy8rIJ- ns]|?@ )%)+Ϝ3Bb51:ts ʥ2cƒ %|ϟqh `οiisIFfi4z `_';xMV/s/ "=uʢ!XmF5';3LB&V ҙ W_s#g79W?N~\?_`hn܊8HDұaD(Ҷ꯸_ќf\#myzo'! 6@쩲QUp>( )zqFr(^8]P wg=J+__.1۟p4ʚsVh-=Y5d[U糶KO/ف7Y%2F)rcmmӜV%ɠ.O?=cTuBϬ&X|CҔ̰a K 3gB Q8]RDX9΁OUJmYCኡ ^뺤i\?j, 8$≓"l Txb(Pcg&^s W.l_~cMuZغt砨U [5%/@!,jZwBImob8jRGȍ@)XV.@M˥A aZjN0.39v+Sɟ)g*N?w" A,N@Lz6TxƞfX:B:k~Sk%JP`:6.Hf^yP@8E A6>宭J{Vp! 3:|[=^3:z6Sɥ2d0 <כ% EWuQ\v;k0>0Jrdb7]lӫ녨[U{Jιx}݀Y'4iB|RjVv,Υ" ! B 4wM|7c4li Gxo J3׽y,O#l #ƌE1j[둎M)\Bm:͙~g{>'vY;ZKWDV j(CܙD)\rr6I໕!#|nk+c${cIxepх@.1s߷Q?gzC/vW^^t< F7|t6-1#?Gzl~sEغqPGv*MJ[呟Uץzo8 !#8g 㩪uk=]'fv[ح\]ϣ\.Q(B`HY1^BbY&¶2"ϑ/X[mԞ9&lBGRmOx(òxuڅ[b<;jjaE [5EϐyX]Uw;j]hh|"Ka ndM(ʥALiD ՜at/2d aI"-uGOn+Q٢SDFi.+LqC!|J@@)8J!艅hpF1^vu\wRsL䣏P,qB!"8ҩumkRR%3 6RJ +p|CγR;ɲȴMP4ɸ3wdf]ŌUAۊ6:qBn4s0148laF&Ĵ*}wXBqP:c:VmY;[!Ҋxi4dFȭr՝4V9'7D>aJM]-4kaőVx4UÞ={yF.K_w^ysJGѧRS-M:Zqڎ,cBu{hjh z>۸mspD(\Fp ߑH}o_BBr~|m nnne[gM X֯ sx= Y5vxÕZ [ GPr3`(`~Am $96Imcx3[6; =,P\NJsV_ H1s?\qvSpRW:/u `pW?IE!mƩkǙ|gpW?ɑ ܲ7˭W^^ +ﱻ$ѸMvyKL2BQ' :Vwbi" 2!5K;v7bW?җqR?{_dUthĿ|nwHEfaʅ4*)cĦsz_XXǗ:?g0S [a,to .oOdg8(Pv1>8Ub-ۢgJ^e\(d#LcYHX]ZܯG۶X @vXqN/Qh<\NͲˋ[XUKtj ˱m:aa d&S8TzIyEmbNkFSExϧnny`nG5r0,;NRʎ%XֵH;!['lkY^?v|[D}u t8kaF.{u0rg߲eɤ܏繌Ʒǟ9Huk書u7|H^ ޺w߽Q8" cK7q=tz)vc1BN/Kr*u(plDqjZZ>@E"s>ShݭK,[FdBǑ &T;+EGᄺ95"JyF-l>ߵچNdSc՞ \v1lX[3 }Oݻ33S=қd&dM`O5 mۈ[`RJ-VqL!eEԚӸW5W\ۑf<|ǭ$'Ɖ۴?K3CĭA(JdsG $}k.85ҷm/|e$ZeyzN{N*H,B ].ƒ @A&FmSQ&=9Rl dZdZЮ0.^~V;srj"A ~WDImSk>B""эFS޳׽m ??ϕWbν?দHlH.\|{sôIưȧ)z03q" vOB6e®;@nxpjjY; +K?Zغ^X>k-{{^C6%מ\J)i_ oY=s;}#t5pޚ|/?Yba m{2Τqŷ)Xp8zG2$8J4LjkOHڲz7~i3Zb|]KݭK,َ:*e 8A{3d! &= uqZ;fVm'ol:MzꛚlGw 8Oe/3ѿ`E-*ϺdS>0x*߾t%c}P4_|ZQ $\A@ |k| 'Rb!ar$lXc=-kVѸR847sE#U5]$k gFގS|-Nd&`4U 3ko_fG:h}4r`J|\Xf(LRN/֥0 h-va !h3 3sa p-atZZغܑn#X3|7B[ך~o|dCŶFOFjj85r?9bK*pv{kdYJq2vl Nu*Uj9B I]MYV^p>7|#Dr |%Ӻ7~u3: [h4Kr$''F 5"8($-S'amK(\1PJ*Z0QՉt6bh^ec:HXm-5 54a4!έa/} k \"pN?%7yr0Aɩd,(?Gj똂>|oJ)\9)L%'cWF^4{vydy!Ǟ("qgUJ>cִ|HP<׶H42:5bpw?| iH:h9&¡9DWr!$i! X*ql Yq..S7`Ȁ.ZϯUG=}$G& H"ª-k-3Y#;tڀi `F3{`)(UqQRSJ:X%N!D$]d)1_lFoI4w*+}R@`*N:OĚ+;nESո˫w|>pBm'ʣt}]45:M_>8RD:śt4U{.^EКKeP~JH !h"8<և\LS^n}j±D=s`[ @jg_Q"20f~D,Ŵ ~xwny)?G!k7Vd@ ^g'_ ?n?*㄰-RH\%WS, 5֑ض}8n IDAT$ uLm<'_NĹkι1[bܦ{å.qF\AEZ<f'PA^<ع:! YvǢr*@xyD9݇|#e+F,yT[„*R)i G$> ?b !%RHLDHaYXEMs-[-v)|v`E-8 sWsd}ٱXx8:klkNx0L.?|BP!zBB;qRl4 L L,XM,b񚫶p5p=w#=Fu=4пo5ѐuE;Dqoo>;Mep.AYv\{#ĴLM8hFP}ji{uM5t_YU7o#Jm& : N0dY^7͒׿{?cJ%^;䥏({'-o^X ws Hm Cs9XSE-.o+e')fJʢJˎo /^wA;~9lmȏfeuؑE Rz^&]3@ [;F)Idⶓ!L~oIN;Ǯi֖GT;>#Y{y(X8 :E]'qrSSEyJZ+L¶mBiZӍ=|>G\>!Q+TvnI$ ʼn_$S}7 }֮!& ;to4%HKZ.hLE@ <ҎRqQgN7y_{;?u '&'t}jF01MM8Ҷsjٻyz]۶8-L938G}}\]>p,P;+Wp-QFlް~oW_os$Si L"Hmg   -dt5 !휹?5Mr c^8[`-LzTo >XYxy X3h`!K@ TJЪTl{7C.Sh"VIsyt]'^g.i(s86"(#Q+9p ^6z0JK(JJB1Bw/ms|dLjJj+abKuOvw^YZZcv>^<=d8}4e#̖д I]J:r݄[G&lȡnCFA: nN BaH$4tox]topY[3u(f8b要v+w'T0cZjbr+>!e+mn;&Q,_$ЄGHS%{eYqd'&6zoU3ܻ76g~0 Jd2Y2@PiL|[.ђ(s.w>H(GV,Aae$ B[q W~=hqKKtbgx3rAk @Pi-oXt\WNCF҉J׎h^LA(} xYWLy b&T/y NlG*_{{I%sxɇ>Ea($o?6]JuPȠ,̹U8έ-fWrյӱ2`cG6ggjneCWJN=W̶ݝqX9 fQ?w.d\4P4JEcMK3s2j#l}9~Dʰr9lvuIQ8QT 4tMC4d1(&}| fu\u=|D>]*H8L$hd*I6?pH3 Ws}H7֌ eS5Q:U8~PqN[Z ~ak\B1*+FK|ZCrKfQY{b6RJΙ͕@ [,2M<0 !)d~aS9g6F(pxtG$:)[(K:#k"Tց=w̮RKWHc=S3 Rtrv.Z,z cpb',Je}@Ft3W;e:ILqffX| 7ZbLE>gd+/I%0)ablYLϵgaJj0:ü}>괫<}X77Ϟ7l$~D*wW։[ ݱ@ U$fI%.bmyrplLS'4b xp$1L Mר{WtC;򅌭wJfήR[σWؙpxT@ >7/ʇ"C\*žNbK$]]mKRJGdWV6u±4MǼk;9w0A\N9ʼn6,ĚO%|׎&RJyqM<ϣ7чmzh8B(sKJ>ʼW#195QQB [9m) ԨRQ(>^.o-yxqؑ䐔Iź[6etgÇQp5Mc֬Y\}Rؘ#,14QK<@05bF48|Ï~ B0urjSF8{$}-GN.,|^ qnBøV, T"3MR-; Qnc'%0Jj[F|m `+nPC!EL)ld))*E/HN5xJfUe 1I{K3Svo}:{Ve˶I{4 20 uG 8C8hgx' Mh\!f0RhNhA*!bal7priʪhZ8kLWˡnEnh Lh&2\X DP(c6a!{L [cɓ+ Z]* Z#@'54$+#TRs,qlLM.Pm=N놴Rnyp4^z`RNlW:5BFVq-fab6(&q)&DdwYi1پ/<,@Ӹ:J3riGLgָe9uM!c17ٴ?Oq{] 9*%R/J  - w===477yfo^!_R#\VGD tN>U V@?̆Y&0oRl9R!t婄-C奋&l-x}F/zF2xBfTd.E/JHӟՕcw~R>\ر>zuϼ3{%?~ߵ[U8F I4%8)|'JyPJ))`|F?%cTD++(a-5oU%P}T;x>^> vyt:} $|l"K9rT*SO=E*p:ǡ9sPSS:̫.cQE0 1ܶYZRX&+cHx,~G~_l"ADw7d+o86S8܂8kbL?zn^B*zdsx pm 8>"O8<*#V+PizjLdYpRf_R( bVW?5)5" \| h"$W#_Rȥѥ  yf)aDƵr{{{N@6}4e1* "INlƒU$#l|mI,l:fTpۛ8 S/v3aÚKJ.x|8t^LZ"E>D;}%J!X}!*y&ӑŵ]ݑA\O ģΘ+=\NORm8ctx7S:YJg,`IJAiEd2^z%Z[[, wjm݄A|*g;J\| }a;HXIo ]^>" u`C=Vo xfYMIl [`?NUQr6|]N BIx ~}6 >e[aezɧ{)<9?Ak1C8X%qm2}R`~:g.83=ݿ:Vokk L*aF7ml `ߞtǎtN$6 \b**~tl_\{mtq|k\y%oZy/:}3|lG6)zC&!y啃Dg⺕7zV>>S/9D ̞^ֺCaȈHYo_ӸhX,#D딥OuЖʃV(0 ᵎnHfУ5SOM^봺)A-`Ea`=BE0K ϚAllJWy9o.dEC̿f$xSE2ڈ,BBP(((zޯkg*χcS]Xk# ZMP` Z,l0 QUT':[y Cڦi̜D|Uͅʹ IQJ:VHE*{wno SR&^"´̝7pĶFggT[˦al:hmn> .:-1xE%0~_G@Bw`X4z+˒L /[))#~U!ґ~CAzTY8mcJ:iKqBz0[B1vv`fdK >(h6gP.}-ytttʺu+8#B[o%v]_7&CӼe+Xu5s︝&e ߧ vg )M"5*@{=m3jz YJƨ SLUh<±l;g̬> žQ*OVwI!Y MT :NQt:&.SB%B<޷o)7Kc;+WeexxKg{9rk2>73sZ G'֢E#4|uϞY|8 fxmj9K)5?|*$k^['e^bV/y."DYݥi1wEީLRGK8řt ;Oh&2T,_PP(1>OKR\2\| ;uB<BH4#3^Өm2qV!|J|7<~5Lve4Nv>7@rťD ['6Ni~=:-d: *"L0Z;*KE7-9rST 7CZ%J xo&4f>:"|&˓T2Bu1tqU4JJ- _ЩSqΔubЖN[V%P]w<"9D ,1lr $r&-^_`t;6uwH=zT*ڵkinn<\v%a%_g32vwǶ&cuʦNe=wŔ^|ϡO& I6Un`gfh͝89W)7jcwZ^<(R~wdɵ_+$nH!Hhj|vهw]NO7ǚ;BJfAW_{twu.cm&  1g5Ӧ_ #7gˇCp%oZ/Odu!DtMWK S  Q_A?OmBp"h3igYP/2V& /d.-gz9褎##e B7؎~o3:vf(Fr*PKOw Lj'NV3*!+[Mu")s;Yu՜+m-m[֟Zj*G}5TS=8P ['6i~#}| w s]OY/mM}#(_,.5 dC>6SAF*(uw,{>ExiU R G.^&d*I.HPs'hEH9SS%%\;*K حdb'2IB1F'ObӏͼG-<:StXe\k:,5QGbP\m8p(뺴ݻٰae%Y4 2jsuf2l/>v>F H+XTprxv#[J:4#*0w}Rm=VA,[ LKJlƪurǕ~UD$A ~1+<\3Њcy6ށ$ai?ʻfߊ:.$:]On `wsiY"ډ{vo}Ç8cO D3g65liA(yy>+.vo-6bc}VQ>)C{ z^& i M Zu7#l 0B QԹ8$]JۿPJeu<_s5r^1QOjB*4GF(P( Ÿ7_>'5Bh Mq84d7V.q\@J -PFˑeOu#_&>kk_{ďqC2̜D(1B{Y3AhP +p48bbG?K [VzkXcX!Х{8Up݌u8:U;*Ca"EYBeIҧ%9hP6HM~@ahV\6Z ^u=He-A(,gY:::bƍL2gMcjE%{;9tyosՁ8\!]@,FW2M(Cer*8ĂpU@Z=T:= qҸ=I3#Ԭ +?𷛿O{ Gϸ /'{d!/O}|MՃ|j{y;'m=Ӈ˶쉅Ya9[A.;_lڈ4 3+QWܦj"(Ueau,DJW̆3YtSG7ؗ#~3 @h<}Ν=y~} 'Q>tT<@W )ⱥt_dky˚Bg\+ǁජ?)RIiJFg cM  B1xc>F RJ))?Ad!)'O||+s'8  $R1ap fxti$laL{ Tlu2бYZ6>ñ(g4#p*3OQ։Ou- &m9wLj+aΝؖuuSi3VɧDmE!b!Y{xKfţ>^W>NODXVd\SlH5J~IVb,~,;0C=!(ōou )b4RQ(O fl"(=h7J*doKѣ']s-p67o ̏dž)!U]Ebɨͭ́7 ] „A`MkQjL%g#s[~xeS:5QZouіM.V%P-잃?g\aBS/R=o3 tx[f1(3b|r{xϜ}yfsY<#ebHdؾL_5*-~&z{_߳ qut\ bf_Z@[o/"V8o#2ҋ{t$U 4̚:^f"õEPBPL\=|_baC fU^7c ?}(dՑ>a6$ڹVYnЃQ24#06jwkًϜL{yHߓlQq[)MsF5 |E%ljߠ bВuaf˶Ystutt͒e˸bBZea4exlU8>mب*|zu6] B_H>!eYil}iFI,a ~|nh\]6?(4(+(a-R ہU(cuߢo.) [{k`>qW> 0M{:._>47酝eMWW7W.A0kGiC#263Y/۷_jh7cx/!u3^4Q1y3yG=>QŠ OV"cOjD*ho(\"?(Pe"[rbEck@AuyTc̈́Ca׏Lǧi:{VH[g;tih {Nj"`Yuz\J6ʜi39u#?vcQ:x ](EjV +NzTP$DŔJ*UHn=Ώ~7@o#sxXF+VyZ=Z\_rxhtR V6 G>L6p}Fz?9v65جc /g gbڒ%iC.6T3{}\ M"5I[Fn`g*jh2IgA}*1Vj3^ F IDAT#ц&};Nh# @"0J awU<4XPe ZsR%l5 quZbVMt )hjbjhҷ~?xB{ nf1o[GGs3Wp6lmZ H',jOw=ʶ (dWvʫrJڅcۄQ;:6k%gY62^f\qᕧn4f/X-[bҥKK1z/7;!C/:ѫ').j,lBjxsG87EelO;{΁ ̺r{ (EGʕ!( b891Q"5(z *Ԣ38 s]t36bv6I>ӃK _/fhf#1D;B݁_83*U$!c=@iuDJc99ƕ`Npp{W/eF7!r9L*Qtt2eZu~!|aWʐv|ͣ{"%_gQH 1[ UKU.gko/}/k.]jvUӴB0!,,9+^Ǿ_ EYgʷމ,r c࡚(N RD8!jJEv>LUo FI# E}\R!r^YหQ"|V6o !hq5jӠKL$eJ7cvq:vfwS46#ʷKٹQQ@|Ldeǵu ItJ=49\%ݞ^~QCkG\D_ TYcO,ʌ{LI4~^QC..~V!6Bk:ó ^kPC~\7cRUuKWK&[شs+!p579x~i>JyItX$M+n,޴rlZOo2 4{X i9F]+ټs+U̟9W69tO'8-cl^q k䡟'm-<ؗX{C<{{X&.]J2GLt%%\_i^T/#Wxt-ox|&r:i~&vEml>eq 8QS@$!xTBKVV]Qc~ [5Qv+˜(a-* ہD16SE/JG֞ ΀sAY ʑ߯Z:O Z=I1pkpۦ,&K yEgi6穙?yo}˘;|NjPX,NYeu30f6!%wivav^go2{zͨYEĽPBHB8 p8Q tډؑmYU,Yl6gwe?"͌fFSdzZZ^3IFܤhElYzd:x9ZKiܴ++^74JX]U%}5f)f ߽s'\~u9ch\08q2n)ڿJz^~i]7ߤ9dDI 7纃ݬ\6OcY7y'm--kѢ"QmGMJ;*b+`b` `:#1TvԦi*bxIEi@hDQxm!Bb gqC| aQJiHD7,^P* '@|x{tݎcJ1쥟/%ͥ <ցk~@cfY;{Iz"ߠ(60NkYh|?KAlM{Y'z@Hl]bhKab]Z%DKt>xɳX5[hѲ"tV >7ؖ3 yVSI $w h|SAO'1]gDp37)X|覹 \vt8910 L"Q\Fem5U!WCL9WzZwO%(f|S.ٮPb#i2VΣ *FJ׿E2t]5+act,).vu=չƙ/~T VҶ ֯{eϝcWM955QTR¡7 [oŜBJ֞=57sٖ-zy\7ȹ3g8ue8X-]aL:zޮ.Ꚛ('@7 nv8e4Y3'G}VG?'YaXuN n\ *|WhԆҵoA0p DQN~7 tz|/SokVаn}o@ma)-("D-|2YgӪrB ]%BjBCjz;9O%1(J$l4-UU<IjaQx E>C>ӇKp>At6M͈`DVtђYG"ulp__-M,tޝ&Ѵ1B;/y÷^ʚ!νC\ ҩ4gQ .9u,:Rb^7{>Fr+-.r?D۱i:̪:a!Zyr9|ʺic1l˞uh3obZLK!u-Ea!.1 O<zYG4%L¤zyaWɲrUom/|aD睅mG(kUONv9nw5HǗ]=~ޟ\ 51bࣨͱв ͠xջiߍ:~7RWlo!' ܠbu; j zŻj5(NK+*;|h!P &$|ߧ0IhS ,>];s+oC'bHtPW]iLmƓ;y*j+k&<'>3cyټYOF )N^8]XYS[;# JY>\TzZԕEm76)ʵkRr1Jˉ㼶ca|Jˉ'>v|.GӺutSjUUhNQնG[N@4jƿDDmt;@!>ܮM:Hl&2Ll & j`1r궻CEe8t= !%b4m\])v+ʶ*o"DTxK\$&Q#qxl8S"窱D-R"Ҩ4, +M gSY߅MZ$-m(_Ѹn%xtY+U\9:sG>O q! "44)D?fAf9άx4F4uq%;]9^ {^b cKKm)@l"HO̟% {|?Oqr5CV Jݴ;&JhsG=Gr&'jMLctPĞo|ٸ}hS䓜zPt KP^UM&5MșYHvzbjhEZV6v9^HIޤ1jS 9M&nOof,ۄQߍ%ʋɏr5]̃i'lXI`bK^IoG~Ae buJ[ Z+"w7S[r\(.*k=}kWM_9lOEl5Fo3fgp<ΗEӇdPe/UyRӑnF(C3%msH;V~/$l`]g8wp~RhXU|!^$l5bo)vb 1[RxGOg-cKHlͥ3qWgS& ^Y'JIΙh#dAzxs^ݏiDYM}Jj| 廴ع!RK Oyt4,5.-PߞQY8~7Hbօ0uLyb d8#S;Ťqœ/dh`w|?}S[RC3m)w!S5o&$ARBHQPQ f?!ڦI Z6s`((gI@3,t+nF8RNɶ#3QnbX 1 8skǾ9NWe$JiC*)o-dLpmP,V'1.*P9:[;) 6.u>$^IKPcyμu0Tm1z4!|R qܴIRJ,""5 76poW\6gG's0t%VBbC[j[jB1HC;԰Sі(Si#FTaZ 4sZZvup Z|ITmtS9F/$4h7.ך@28L ÿLX˞mBHz ^]G?瞛NVJ4}HPZYI]*uxbY׏w8?nyi "e6r{Yw|2Y܌7jy$=1iGlլ8WOƻmRG3#(ݗ௷}ӗ:=$!F{'{qKWg״')&[7 ]Ksu񬖗6(iEH2=9޼[Bbb]KJl=y< uF1OI16kI/7(%xVUK2cyg#҉8!`y05W.;0>Wk:c|?yyn.N݌C໨C~RCq!ca{{x;!Quq@iK+zo!R/JMGh#aNVIyJ Ytʹ(G3mKl0ue|6mX&%#COm>NOyMũojSTP=@']3s_kK"f?~ޝ Pr5-rVPnp)\ IDAT=eYG\_+-~,D]i,iK; N3L,3`E7'}sv'.Otp]޶ ]!c"bkTx$&/ԝLI}?T;RbFLʪCL,+9_OHl=~%[sղKtk|{eVPq 4d=NpR Drkr 9ȱ3N1D+5Ps dWB@^cRb`4+FWCԐz*5)e:]8r}xL<@JYPe5m4ƈHH|1BRJ}5H Mk/,2f6|g{l􋗮oUJq.9RWY:"F%Pou:tw։R )%Ԩ[@qQB#[u N٦K 'ݳuCGIaDl0 4IU`ƕRJ"M4EJ95ǼGt` U7`oy|:s.9غ4іb3;#J]_t3rUmeԱO8&%IS-⁈ mG&/}k[.7ތG/RjxcĥB(:Dil';Dt)_:g--e}d~wLg0kR^]CCj2!L)81X&olwwxFOue~d GvyYE&B[v\ϯj 'ΝZcno=Edi#{!\WAդ源$ u9̮Ӵ}拈L&$.Db7ƽb:^nǵ#8+7´E5:#bB"2,w=Oo_dc^6KbxbN9i2mxN ]G7l4+aЬhHd=!|n gfWևFZ[N#U+_Е[4nvIf Y>rlG1?{>^϶wCV ꛗgF.%uUnte?bCߡY碜M2Lt]GӴB!(lTfUy>wGםئM40KXϓʤ).*2~'?M_s"ХغDіaR@ch!>BO'tH#P}߿cVn7y4ekyfN՛Γ9pq$7 ֬<3tC@xgwsitj<{BxݻX{ۭ |/;7R iٔRݴM+OT!nf$);x,n#E9GeQG}*OV=i;5&ICvVz<pĒbԧEPP]RbdYz 2:xq;J g0!{$V8#1$1 'ZkCx-0y;Q0: Ms,h݋WsbBIQ^w՜)B,Lڹw?kM:`p [ncsT!L*K[K+ɞH,FeMhU ϑ|OH)!$cKS?sΌഷ"ߏ{s)@k,m\0ނ P+mUD]*ET3&@jr􍷩&Ვ;^ tg5?e:B!BX>q4GFHquh?gRQ4#{.V20F0 JHh刻T[QRg:tJ A*-?^,#T^}D@vƸz:z9{ #jR~m#.[:~_xlH<1kT#G 5XmGL`,APPͻ.\v^DQ{z\_SgWK!u - a.!:X=T!-& +fW^"y"?̙vu2ʀ]6cc*ݖ=̔'WʀXX`米"4"[ߢI"s76,{u7 ɞڮ9LMoR/'=u)WzDCG"D =U*z+ P*@ʐ 64֣9@ϴ=&Lޞ>=;@~ DrW,c #JzxњD'gWʡW_ͅBK l²-4! &w8R5JQfs3oWH(Ġ 3(M+3t"0Rė+5|M# MDodk[燆qIۈR7Yrr' "DnwL*4&H.D8Qz$%-nZrhj`Gb^,+%/)֑DbM=?{Щ{ۂ:8q#*5U7 :;9wN6r> k:uI$".6ԁ7yq鰲/w)%HF [>y߃m?AYi 6xY7/6V@AHBX[6RT2Ljs1g_ܞ&'y ݦ?!t ؓy$grr$DGs&/uAрzy"bzqO1ObX{vzkG y8kV` XilҽNc99:?gw۩zբ)ߠϿf2ޥQ,**) КSӮp%ccNQ}KeTZ݌WHŽís9g:2hd[sRt @jۡߔGI2UqޏӻԟWMRH9@h~[#'°QnnZ[\5E.!e5ehF׹.|QHXZUJeMCKV9~0PYDJA#~" ,B' S]a ,!#!xšjG:2E(ĊbH)gwsĪh=J6|7+D%7g[a4^xkok1R 4MCJ M5@~Z'JCDkLoLӤ(15òg? yöO([CY¾[>RabMEBAmmL̫(Ϲ` ZN(])]hnsy?̙ Cpr1}mdpq5T/uv ZoJu/?/ydO5N|3- Pә,J&`#k_SLhsMggrM1rq}12APPS. $`؈l/M7n BjVRTc8"QMŖD;;M@6Z}x??қU򇋫jcԨ%sPvV{6S-(/ՃU֜FR4oZMIeg zg|(fXgz݇ugFj[&Ĵn0K6tZטx}:on3٬vjjԥZb S9O`R ;Fqe9iG |wL,-)Œ؋ wQӿ7 X=dB(-fڕ3nU|$ziԭfJŪCsߦ''QMpϻ(dZA-2 (nlF7fUa7ȴ0L奔VB%OpRiݽtQ42RHMCv4ʵ:N|6'ʮG2[l.6"kȎxG="""ȴϕ[o涏vQ\cC BX[>R4Q [fB gGr}Slyur>C_N͊:V\IJ|)c yVFL^s A [z? F>G󔋙<OM^u4ZJS\mxmDpϞW?㿹(KP}gs%!lipf;[L $޸+N&6>ןCl2I<$o o:d3[wfv轷r]7;ݻK#2L% JJ'R!tl:KǹNz;q"JtMy%e%@%x 9S9?|7w젯#,E۩ P(0%\͝mkl& <x:Ή#x[R0"!B]lH+<H?gVؼy3[l!H]'>WcsOsuq {hwZy6ުP8gR^'j;,LoWgr:{~awl xqU Vr+EX8|-8T9##BH mJ+[AhM v^>Ey"ZrNJH]v`L(PT1ͅEpƫf-4 b:Xuq`Xy>1yelYU= )%kZGQIγ;Bs )H&X\^ qXl^Dzތ:wERzQ~>r+ilri:f IDAT+/Or=:C!BX֐B̌]$5DKkCCXo?]@:ҶB-0Y) |S]yMGIAEu+gԕCMz7TBs% +J, ,zl;#KiE% ,߸ϓ}oJ)^A%e%>;X*D!wi?A_g9'7Js'Ji\]:̐q>udf9k7olw^zTOOX!}xl;4v>%(}vFZcyzرo?$ i;m̐u3GY +bP^UFqQm!;Od‹}n%E|O?Aq<:"E!}1G8蚎n( `H!pryڻHd3Sz^)eAAymu6.^ƻ u(V\*E_{;Gwh?qN^>&\J! c[_Ae.: c dXzˠy m)R :/Tm b]LeJ&s_裕$w}nfVZ;F1 ` ~3y$qؠ{c&cKʤݖ]G=FVZ=^;Z|X:I,:H*oCowNBBBkȴx(%@1鶅Ha"J+*YԄj%bCbڏoG I6Y\z<<^CK?6I*UuG:qMY1Aad(*tVז|C#${s:, ;fSQ_Eqyɢ)AI1RNmtcXMs׊4>:]ZYJUHoO]KHN"D!cfLlEHD9И!5;c M+[aj+VXm4OH:Ӽp<3'&'/(pS kDi +μ ƞ~$~VlIRb+b(յUD"MH;e=$KK,X&;-kgQ~r^$yޮ3Dt4ˢrL@)uIIO&JMwSmBI@D 6]9H,:bH8$;;9sm>BǩSdq/_^2H) ep?B(A,#bEafnoPfl[:]`[u],5$. $w]} )Q")ldزl xػlƳs4cF*S(fR"LL rFܯ_yxN:hsN{߭Uկ]JE> GMO4 @Og7akƪUISaG i"~h;G{C /:ɬ\ 1h6_Ck-[< 3$@j;aSƹN3-bFԧ'j BAUqVӚ,uv>.hдS@1c_?B֪P( ňNDPpُ04D7U1->86hNT?XYkAwﯟ[(o ^@ƠɯGW_0>WLjÊY=˧~+S; 2`9+Va֔R{a̯wRpɺO|LJ9HTw"?sw\"<&ۨ#UMCR躎a躆nhNAT|ńAHTaTDQH4as.9<ɰ|R"|Ouٽ~x^|\o_E:.Lǡo+`ѪU tv/~ɶ'x\%cl²l|iOFIbY֜OVrN6PVW%l]xtYƈ:MB1r}?o!bI5')\@귦>9"n W]uk׮(O'%e$B=g=d̕V,wZWw 6VTG\-FU"VFScyVv?+BF﹒h&׏Vpk&g{qdBh b(ADđ?3sHDs4۶IWWSPGh#jOn\}I&H4$oR( Zpc]IWI/luƺ'l-F&^ģPLU_ gmr['>{xom !tI28 1@9Ybp#ـwAjQOqRgECN.jmeɚ6t8 ^=P3wv*P( bܬd,Z9u2l' \Gv!mik_`mBeE.0"H x"ºCK e04V`%?ǿ>98Y2!@ۚTUWMI 1O/7p& QI \w~2@G{݅?C$A:ckٵ@ ZBZ OPPJz2='w+FojkYyżzez{y_cݿR7A?aU aW"N0H%>lITWs߂aYsfM)PuAҙF(Bqzwڟ'/e>Jњ~Gw^ZZZ9TI eFmQXk tQzq4"D&7[>T'QXpOdѬE|,Q+уzc%, {[a*%5yh}X΁ 5@Є"tBW#pcB_8ġ$Ee?>&|' u "PH6mLձ'Z҈$} YF-juR_<7#a̝'Q* YU+N>AޝKJ ;]Kn*^ł%{x'((e"m)V>qsazb(p&e3/__|Mފ҅YL$lVoXr_xo#86 5TJJCӰ-ct,,6MŒzj2)7ֲqre ];}A@䕉r!3Ptٚ:Z=I+a$cO?}8J+aY4-e7r$QUEٽGxl*ITL~P,ieԈ8S6ˑI\-WRWW%l]tifDz-š)'!}L7D#jItU@hdGܹ KXb9*%x`|M4AƮWePpqs.xApߗ52kakpl-g|N>l %e TrF6>S.Rz0nv/w^v\ ;R*sQ!Rca%lLİ*x0s8Ay(h{9SiOm$8};r2emGiXrr{RUdjXݟj1_{s{3QBtwiXTdm}ɾO<901$un@&d>\=ˉI̲On;glY=O^&Ͷ=MN:;kϤz3ga=͎nv;~A%p{/}ٹm'YXM& BO;\\jZ7yt#s1=2ӢutmMKg.G1v$cXLǵXhUibȶmV_fVu/藓'2[IʼmjUR^ܹM͍FG$CS]5+7rI3u5J 2a`0QE"LyāGA0'C($OLC)%B dEqtn Fy-Qo=I_ǒGg IDATf3OVF7ٽ6OXCQ%ƔQasD>9IMrѻ.9賫G^~nz;TNu9|.c ebul4C9:A'梛o⊏~әW xJS=+a¥3OMTq~P0W+2&ɦ1;(Ǵ:6l WK&}d1gHa  ^ #%`p{§VLKo\} χலž@pr뎊ޚ(0}w~QȣH:v 6qsSf#Q9i=/`k=H8IP#U#=DLuKH]cwc_ '"AwI,''%ƺ&l&n2v;T%*l_?{/v޹biz`]~3W74.zץSzouM r(!5ihnꘖi5,z4mj.~ f8 Fht_sfnaTCk-+9\ ip BP(_∧_|Na:ih ]`2٣ʺa OLٰq_{r ?BPXDOVZ]oco!ogѲ٭OZO?*ݏiYLF{P&,ʵ)_E {&S8'(* S[C۪% AKqH*Uy/78ztv2ɺw^ 4X@g~S^DiC묺`Rj) oXk?,(/?nJuU {UօMg5TD~T(#߾g`qSOVShF$"1ғERy,ZŭxӨ17YWZ F:#_ v~ MZuVpˆ)ł_MzXDX'u"x׹d`KXު>vHGo1[$I+X4[!L'=D>֑G1;D{,tk 8 +B@G(_hbʮ2akb~l\*Q<// <'ULqlchZ%BeX1ٙS9ϰ,{57sX1M)^ݫs(:a;GBa[ .k,Z ?ާ:tL:תxǒ ͐;l3\%I riEo}3йdp4d̥Fo9>I< \Xx>qQaebezK{-=h6BE2:,uew`?pVE 1QQw>G:FALf~ [4M*uXٳs;|y~ p} ЩJ%ue-+svd&6LbgF8&'wF T#Ӭ Yq~CO8xBQn,?%̜+\X DP(!Je}P,B iFj9ORM\yAӔgޮ)Dz#0Nq0Ĝ\N;+(dtgF4V-%U=CRN#fz'~H$ V[9#aX'(5]YF˓_J9iֺFZ;jI`7k orϿ+VWM󯻖O_Z Zq1RJ,ˢb,f-}޲N.>rs)X˾N)zčF}n _6>d{Eo <[wO=eI~)E\V({G胻qv}I35R-ItO8psV9)Y\^#"aw"jUo}fp0O4ʏ0afX}L yb ĭ'+$MW}25SDx;1~(mrj!幾.jJ e$ BP !_~zRðL#fFUi'B\~q=?Dz{#B#߁2(%wa9qspwفc/05v!]AuC-K/}W/H>a&Zg"DF¢k*ByV3޳891 A4_zl)z{?+o>r5\[>YZ֬~{}tG L6-tMGSHkc%]?Y0OiJܻ*a3*wKU(2^vz~xoG?F#i?ZÓ! c&t:<h;M8'mt~tGzxgp065& ~\H.5*m42 I$9<: e _Eas΄7d+CG]Oct6̘;"%h}&Œ6zj؋.#?BHMUb{۷ν˱u]b` #_{ɫStia\ t,xq4l\Eew* Q7ߠ9jiI[Ѝ.$Je$ BP"cn_O,B 5c$z%(m%{d"ಋ2|I*:ΫB",VvV[c]Teh\47n]xɳ ZÚ +`_e{ BSəUM:BKPP(|Gp|mTTf8u䗼x\c.}Jj]{X鲑7Ł7#ULNGa`ibgn"5ի>w\:mWRp 'VVЙG"h=&lHQ,Tz~ %rsX5H \dm q@,A+,t]'"<#>8&"t]'HP[[FݑdGH2=iDo-Ă&[}R,Yטsnkz=S HCۓF>H6@ \ťVSqjցKCjNb$Nc}ܬKPH Z {Mʮd"WQH!԰^MVXXm6 >t?_'JR.q]wT#Cn\5{-czSVRtE\p;Xj2pYt> $'ƊZX +a/>P BGw_hp`V5a&TFŹINR\|~N3_} nszYn͟Jy8yD~0_9yhvPU˅6p7fe슳ɾ=vm' ;QV˱XaLjD-5r&re, BPTv#z3Ȩ譊sB_nDs:^$D>GA+O}{N&E۪s.dN-[A]c=-Z{w즐-ʤXq fP%$~ʖ ue#2K)i;o9LJ;J&4^r>OeSOj%ȇyߧm(;SEaijkky,NxY' .4Bo{hGz"/Jh">d,է'8y5y8iʘ >8IY |`V1[zQ۷oijj/F" y@F=g^v޷)KM ԩM%Y͒|A $}8vH|6*QqN1nL/8utah w`LV-KhmrgnQݬBC pH^;E85mR@X1İL#ڼQ̓*vC.c6P`VRXlXՔMX BP'"Gݏ/"5 jJ֪Q3xr 9m/X֪ ΢>O]}O;پiZ4'ߠ\(}8$֯9\6Һl X/FzeJ (&}oјNJfҬEiu n7Fk|ӼbĮ=ַ9}a(9H$u ) `&]|1W|C,Z=璲A` ppOS^e wUx:\Ɉ*Qb8WCXg˅XdSb؁&j>M$uB8ĩS<ϣT*ߏDQ4Fz,m8CMM }*+4ls>G?/k5u2JVǟK-h#Aqs1;5:"ɇl+㯧|?[>v2"Ol߾={N+qmd3C~ |I Sw3(ŀ(#Y\^#.a4Tm/DŹI ~g}Wzu cƤرpccoe/u,[?O9lOa-Ǡ[$cU/^,1me;Xiia覉iaYaYn%U*OpGpVbH:Ҳ%M:npBP(&r'm<R*&tCVDQ@"e*sjIv5Gf¡)4g5mM{?z>=qoEAFZgXnyPƤP"Ⱦ,q4.0и5d)%K,#Sxl5RZIX; }u+WmK 7l|?ru| 2 mTe&+_9% 7Yvх{R<@̓"h=&l P+5srz^.!Ln뤚hV s [ft])|>O[(, ˲d2o񴫓E(#eB?Ըl׈z 4. %zlj9~,ndoR p'-^ODW&@N_ˎ|{zzx(\~O9PA'ϣ?RJnҮB<OIMhp9ZzMJemCRp%l՜j;R>*QqnWEuvܖ)3Z*y͊u>{m3V_eV#1vهW5 G/i>d:˖/*3bۺc:fTDeeۘiU~섃Jb'T4USW;]/=H{"jeL֚ZW-rUF4Sp/QP( $K._ʛM78ՍJR v/eY')qyP z IluB>[)΃xPxy+d].8Fjg6/RƤP=L+!h6 Jj:"=AJtۂz1={FZ wVng׷+6v""e4S4 ҩvĀHдn-q+.Tܦ x)U %lULHgTWR^JEq.E+ K4$N]}l3VhtW@Y= ˚&oT0 ϡ.uQ.:Ͼ{ yTbDG>&`0md2IUtTuU u$2 (Mbl# t UZ1V'ж~ia IDAT9trޤ:msP-AfAb2BP(&/_|@薃N13Al' >sB9c^Nӛ y{qD9:wئM:*]EMu U5TQ܀3괽B Ix_k !X~JjYCDzJBP('P,? 5tL֨-;Ly&M"dǣlzRr1f`I TUq̄};焫֮IlK$A)E3?&gǴa!!vh[2Tͪ3(5l\p"GpϽ< Dz:Q[uCgUs'}=Lw c<]XfdCBׄ P[]Kcc#UԷ4ʨcyE^\cU֕i\҄DHg ( Bq2#xm|៿ü:U3,t;[h4l4D(C;ptMW_ !}B?}{/$V_%ؽm?b~5!jJtۚn{uTb8524-mBJB1'7;H RR]_-f$ȵݲ`"?\&ڹo?WÑ]34Ms.p~|O\&C,|n뿢eSX=T=ЙfDzw*ŹBῦq0Ґ86v5j*K^G6/bHɢE-?qČA@__\ƈn-@躎8TWWTD ]\A$-2⽶Bӭί]@b hx$ƘHӒ[!`;#f>V#V_'#"oEoQ{8)趗ӹ`1&/SuyH$\zlݺm۶ hs!NS70yxy C%h=  at>2#<>VY[jvH3 0 v0@B !1Yl$y^.I  HX ` xxgW-g{hGifh~<#9UuRAQ7t?4^'5FEܾOqA#P)%Qu+YU4>v ڲs=}= x]1B)\[mdҳJ):c j`?{)JTY0u'NlkBjr2 ̘4-RihjjT˱qSIٹY}IkFL},jmjobi2L $& T궣h44w;?.@RbjIU*ǰaviX/ GZyNRYО#cҍw/9`_-UsVU7.{V)c;'LϺL1yb,MFVBd2x |r$G3U͕Lte%P 2Nk|[̵D6nð{__>G;cضmYU gzqLDqH~@R!OضC˒%\__zQ[u-kj)-w⒧RKmǣ9-x/ɿm"o"A!VE}sV2d Y<[1fm1E@m^(>g3w]gcP(R;>ѽg-Fb[,ʑ"* +eT4O|brń9Z1XeT$'SO=adYOcpWnlP*ŀ;ur'B7`Q*+ghYHت osRgޤ+R3o l۲0  !,sP_|QӼaQ,&.\d][447=TgAFG=#@v~wRvtmѥl#娃qvI%Rdi_$trϫ^.Q dQk.ʳVDMd$2Kuh4f ̰uMD_V<CBR*2P4QwWiZHey XsVjQ@iLJn{+]wʓQ{}є`qsVHh7ь72 {[1 (w'Ru^RԼ~i|.~ǾU﯐ -$~\t 5eqxx;՜]5CibUT-soMVGc=g̙5"($B#B"H:R)_Vc= u]M[Vtɳâֱ?.ͩȋO wKFg5z-W ԿsެKJICC-y ktSJ.LQ¦@Cb/iQ7>Ehg#dOh1>3O)I)Yl f2'\,rf{XBޟP'&ֽ"[*zy)Gwm$HLNgH"p+\)$ygX,D%[8" M՝^DT>~i^zA "L4b:Z=Z %0WlX+R3/ r]w +4[d4fhl,wAHRy[ɇ/oqvV۵Yn ,d@\Nw?=C`|ISs#+Wt-E3MFVXChhiЦm1Pё|!&E>Liȸ%)\MFh4!W(Wo{y~IҰ~et WUBJTD* 4QT6BRB,t8\u3!/Smm~O 16~2 dٷs?abkׯFs˛)Qgnr)^)%4+fƎȏJG1gs_biRXz%~K7)f1?SطF;Zi[ \?E,Rńv洽o'yj2 s67{_{˺q,T|H0DJRcb$,>#0"B0 ?㸖0Laf5܍cq::61JUZ~iafYaQ%a)Iy3 >QD\"MINw o#OiYm$ .%244ytomll0 W2y7l0nv+M!4$.[+Vr*4f2gg2 >s}lg #K12 +b#g]Q gA W%& {MuV{T?L\ {Y._YԒ$}tjQODAY Ųbp$Ĵ" p[+Q3o[6mwT:&,f ^8ŰϔΰKxDžnM,[U c7KP$ E'pB .M]\V|Y#^okksɄq9N4ion37Յ8i5WͩK~ CCdeg,X XNIyh4f1Gğs:]2KOoAH9O8BGП aa+B  `qw!a4u@(U2cW%db6~ ح>M, p{nlq.4޿m/٣f1rKHNH~:Tۥ4&1Bt䑒EZƼLF\.?{xY)=l0E%߆F!0hih": \m=DHATVt/as-r9ՍJ92z?R-3,[]&tD[FbbiVoC۶EQU^_ȓ߼Jb)$itgIS<( pލ!jAVP4S-l̔[a477pB"c\.E1[3 Y +[< 5QRh?S( w%|],CET螅  6{CV{]oBBE(`н5;yu(5i v,B Ĕ<#y\N;tSH/}OrNB|c򊧛t`eܗ]dQnzݦFh4Ӥ?~A8HâqzoGT Y*a|HU1)Lm !lbj^Qر 5lU;uq1aw1|d3SJU͇TҰQT OH|:a.:{)0NxA]%`&q3`{!-/t?˾AWޫTUkGٹ>G\ƶY]w,M.эJ9~{+ oz&l[X. $RRENe^_>QL{;opэ77?~LxԽP:17(_|nKjf3)sUa@.ͩ@3̿ԂLEJ_$btҟeB5{AqZ׶cQ(fE ҽU)뺤i4BŷK{CIxSaQ-[<]1Kd E̝z"%-1g!r*bvYLKeȇ)9EZ(ˆ|bD0㿶Af.MV;l;')?sOacEqc¹r?EYL*`)3qRYMR1ml$ODYr> B"52߳{7GSi8MCc۶V}`h&mH$P(bێdw;6l:כ؎E׺NJ=FQDg!J~' BX45ұ!8crk.gB,njlۦRbiFӐFQD6+)0ƄΆRӓ,x!lˮ]y1ۮ}n&+jEK6v+kN;Fhm?yXB0hZ>s'R+fy#Q+_b ݅cǙɻFf2"V\" !rBe|W"Z@N=?$ 83fdkJ|r?Fxq>Là}y; M3_݂56ZI~%Ŏ7Ao1E]5gwc†ULPn>}~;y_&?PkuJ{C%޷o&ԧ-,oYR ˶pX&c \wpo|t>N p7Ua눮ͤ&ғ"/ T4 RD\P) `69c](c Qtg.;466|R' CrxwTV4IR4663{KO&1!Snw- ٩`Bggr0P!>Ze6D5]BJTa9eOpLxɃE5Vvӿ/ogrsٖJ,+_?hR崅M [RiOt%jm2u:C IDAT;c2b[LDNd*Ec~.NC#޳M1AIq4b kNzFr S)P)W+,0BW$cnn}E8@omjO ?=X=Jjr94lz2BGrڽRe)| ox3ZD~ާ5B0ٱLI9 ҋ5#~r5uYh4F39/lO sqŹUgY /K9JBp ħ +W'8 !Jlt(Ùnoc͠?hrp~2=4=IyھR@Eڕ8ٽm/imVJQge3>>l$Ē/ꢰAi4G^/=Z"zV[ LQɬܸᴸEڝYR,][Xvm}q},"(BJmY8eY3Z=뚫19m ZkKp=̒<h֫E;8{9~v?NfYJ2I%R0^Z2P>"97"۶YtiM,z&7 qtx ui흺_hX("//>vؠ*i 1ҲLH$yt͇u(ax?i3 aEϱiin9g^X|)(R(x2GūT $LJ@sLlXv&PO۱ o*?>s[W^NCsALc<4ql{T:uq!({5cշޠ;9=v>GX!/jmhi`YGG5fBYFh4$C>< ;`: H!QP! 2qǣ風QtXZo2M똈U(RbV)MQ1\:}oՅ>iV˜ϻ'0s{H>'>k$6TR(7CSx{_gO/ta}d5u=jrDu`vڢ2Yn9N99^9sY,]B915agAt/Hq\Uܚk\p)}yoԄR)Z?A{N/St8DQT6ecƬ3Yt_~}vO |-4GUU3[z4R,FГ?o WǞR$]9aQk/9ZEGGnjfJVld2((.[ %*Z)[%Auc ŭD. *<+ +6Ǜ u:|𢯸=+"H]~qĘG> +}ga(ܔ螢~TylpSlDeHyc k/*hz71 uझR/0 ݡ+P3۳v­iR2ih̐J%Rmq*T* ןS:x:֙Mi֜Z੔+T{B? C09- )P ,IĴ}k+-ڸ֮]Mu)1JZ{3G\]x-vP*4F=CPNK&]_i[j$ vJ-W 9F̀W>1"ٸ7}bx88$}°B{a@đOQcxWә _Skb2g{XU%@*T0@`3DĵMn,nz.0oSvv{ i'b o^0 [h[G1!74\[lgv T( +>"rWAkGm]3;JȦ~u笭>I(D[Uت\J[c{kV)%+WjHY@U Ed7Pά}^#_2}CqT5egUyҗyߠR*vq! 7mYoz#oߜu)U^֪9fғ,]{4p?cWCƟiq)$SBP__OGGǢ,㹷M u]2 Tu"O*&1ppaLQTxzH"c.~{듞KE9˘sAxB6bG6b AfX7n9Z1>q3ܟ7Ͳpvމ97/i8RYM;31 麓$l3w3V5JTn6q\)E"D}n^ eH$E: RLoᣊ[ex*_u+hZSˏ'?cƝKIϣ~;1˚1M0l2OA2q]Q|AkR.{RԱv֭?T]4-M76Ka}96Wbx )Fpl>.0Sk2h4fE~ށm5RײraPuw C(uy[ԵLώڣF &Nք.R"?g/BdXl˺< n ؃sWf+ۈSXnn³8 ؾy7\~\ eMT+g%jqV]Liо;-3[7;aPVKC7Bfݵu˺S֎ 3xln4ʍgQI>%/黿CýqNn79PAI@JYefFPɺ+5"vkK)1ۜjfKOD48@qۃD~qXĸ >Fv̚I{{;|>(3͍Ēo,^  ̀\k^ ,Z": G!RTq^KZ^Llcѓ%&$&ľ< xG猁|Gy}_HZ ɤr°Iv_O [WfC8}RfZZ1wh]HW8k\@Oq;O!87o1 \ `{޸IㅭM,]Bۇy(u( !, qp]w}^߼&lW:mXS)[OՓKА1C,YņsYtNF=CGEBVts\X Ch4bގ,몢NfrvYWYg=QRp+w_Q5f+a1nV"bUؾy)̇^@*Isk ˦}ek[)?3m3Y r6VIඑﺆXj4(||&l5Aךe5ha DG_?:fNYq' }vAS o/s@ah><}Ϸ }_7aX㺨YU h+7>[7>$| R[a]Kc?-l̆<-{F\h͢c2/`F!V$ٚ@(1EA>_$":,Y2&4-/n Ðl6Q[8i4{U(͐w:Rrr<ꢦcBxD;*&_qykµ5bkW&ܽb)FF b`$Ŵ{K) hʜɨ@ZiIv]WfAe>ʮ;Lc8=.!mH$]{usD142ax8)̖VzOҝKT&?c][_nqq̊45eQ)0M˲- ˲fX\}6!l/JO6r4,Aps[7LjE&v/^BLEkWۄjYJW84FArw웟JE]fl:OJz3xnsfuC3O>;^MTKKG]ms>խz 9Cך80rמ{3&nʥ{9[[w]w=K^ :WwRߠ(n`Uڂbi xSOڷ{7ʫ5Ѫp9y_,|y;Վ!>C),PJee8zv _a!0 .=#y < |-cf4NU3z:v[fQ(~ ?˕3ahI,9F/a. Q(*4M$MMMض@qOfo(R1Wڕ)P#}eR2b;:{Ao>]yW+f+f>_2y7Iʘ[ pÐן{8Y]$?+̻4nNyǬ- 6oq=.p(:90/n}k慑ANnHKӉ i,[>?T49?I8K;;H*;SԂOE񡷜,!~ag7yz;60G)XѽS顿ocHDz㛹d;nӂtSV`V϶jk5"of BH8 (VC_G]s:O0hkkn1M5@[*f |߯10p]%^Uh$#n}.8GSHpp]!%g6be|JrSaf\R,~\1i>gN!#T W|#mR7&ZLJ{y֘+5a9*ϝXhN},%E4,+'!\@ۻitӚ# CFC̳}4աulLR = ΫG"Hpݣ \GFrdFS\i-t=''бr)zXm{q3a7^yr~ ,ZA T,]AC,׋jktь3z=,l5 ekH굜AY|: RZ |<Ȉn 4Ywi]b/LVL&#[.]"_bFeF;p\ZAKԍ-'ƭu6u,xbxxrLSIӔ yM)X%M^X*#g뺪ndSHIy;;=ePpNCvr|;oĈx]qT IDATf2+ z [oz͜"AEٓ4,֦̈ yI6pH_k4 tODFrl~0_!а`» 5 _(MϘZ=5pPVƐ2]ֶ4rژt*x*qPDv/E !'Mrqƴm^~7onc!]L7.ǝs/$ҥ~ғׁD4Ү3'wB<ɷu5~Pk(>s5 V-4{a+@R!͒T*DQ40 $---ض&;CrrFkjǷ}e݁ ɩ$ggD@(P79>g3~߳x3p>|۟7Njn 6 @}wq$o_3g*Ф\j1͙ sҨ9Shybl{ˡޅYhB`&¸GqLET*Fr9<ϛuL$p4B ƹd)5 !iKK>pJJXdv)|u;B b#2+:qbm1'qB 2i dh8 b۴7u:l+P%ɓ#HRIV_M}szݬO+Of]F̑>ɦ{bB @*ie4-a#iGʵw]6hOYw;A(ٹe7\Pi44gh[چPG!#( GL1v(Ks< qJN͕EoQ;d:ɊUː,>$pj4 [B̆+2ӏ&{gR%vVL|8Ы7EA0!8o P88 6`$y5kSA"T^:6144DT"q/@eYL&)۳yW1iVh=`e*}dxsJŋ"aNBzBCRQ\3佉 zr~OPvKmn_qwޡARqJpQv{}X=?7fΔʊ̼_S2!P NȹD Ay-Je;6K6/!PJH$HR Z,rD0߫ \]C)taRJ١C$ wo匥(2u u,]Ӆԋ;^p0'nm1lPBĨ?T]rx̄#TANӟƲ3Q<r.r2y4iٺ45 ,p~YTR[ Ch49RpNTZ)F7 !R" _4lL7TR) nS2ŷЭ c uGDջCQxXh:' >EI^@FÓ S8 b8'V!T,Ytdg-/o\ [*IےfZt̡Ϯ [ WڅRV=u<_sٴk-PM6Ś[,UYYIc<LQ.42gJO81k_0 ar]{sB$DALJ(і-ɖ==GՎ׳c{DzlD %J4s&%  s媛.F#Aj$}t##3Bɿ:Vg=iJ-&Q5(L/H d@_=v>wS,Kw=8ȳ5t:۹[Xa#T M{DF* ´nȳ_yzikuR+G~LRBS: nLmlS( B\⫃pivtM!4 T XuhRp_>" yVu288Q5h8jՓ)$az>Kyo6}z?zDZ TX' UhVˌjrBIn~w`76ZL3cX֕EaR)JK*y8ؖiH)B~@uK%[jhlBʆ 6tϫ|:l6jY,gFQD\II"aJ:;]r)>\1##<߱.ڻ:hgm-mguɿ0Ae'$k[R? * BP(7 g3g\Y N6i6B3bR!j{?ת`,6Bh$ђ?ϭV?xpF5FIZ a 41˖;04lK 11DGJI-GkcGF8,+ظmNrw#UR_!j)a2imYr;hxRDz/ZG^W!߿w3ڌt7O;mOrM7.j Gí*SE;n=)w1ݯŲ12nRi~d1md7 $F::߰z.U XaR /}[[EA2q(^Ryi8$ @4qɪ0lʦdKklCD'̕2m6]cC#?jːpl8X*S,]Ϋ\ytR\8 Ti&7m?ttvÐqQWR:)'IO{=]]a9c^9 c/ރ?L|#hX}#9Y ^ؠP( 2oh?9+EH t,M0BHM%vU>)༵?;-&~Q@У!D|0TTL> &0SɎBBb-5M\Յ۷$vZ$ W!r9,Qt4|f򺯑1WsfLF&Q }vIS7y3cxr u bvbتG8e\dQ>u3X']r_T^d%אAT<n]C1iH'}^sKStS-311~wH S9 'b`]7Ԧ/tnA7e Z@h+&9N<8faoQakK{}*NgMZi6~jzeDjuw=fȑYD) xgh[`7?vTT _*ab  @t~GopNBIDԵy.(&߹V,b``~\(""$ uxMykp0i1Wjw0 m"C ͽB?T,n}37v"h,Bʑ䟋6s! ;I+5( ?xⅭB@:/ q]3*ɢ?qjsX7NeH$,kٿLXmz#cdDaq\Naݶ$'|}fR>•w%BõZΒ$m9m2Č `ӖYt&Kgכ<LӠ53c5+_¥\͖/8sc/S92[e]t[kn:`jU, BXFFg,-c:^!$R3&B R"4!4&Bo&% !1o1sv7F \ 8$*kN5ᄿwywgohl_ `Ϝ(-i\M ?^\P?5*hN&;o-R ʅbbr# F=őqǸI+Iq&5d6zs6ѶlchhenWQqc3QQsW4M#AO 8Wu ?Kr"cnB }O=_:{JE58lmO8p7 Qk*E|Jت8傩LN @REEq&AO/#,40Hv8HcVΑhK[KI.^LGQݻ@CGZ\.yތ9q:d24h|nr dḒ" -^ul#>h{ly5xթ!8_HK"+6ÑVC XVٷwat4w7|}cI5(+4}BeFtw,w2i\S^#n$FÏ+/SmSB`DdrӂzNZ=cōa8ezŵyi1]:-> {ɶ;o OL2uF.ڒMak("/qwiqYTVsg=ㅭGK&/+ٶ3fߡƓbC03b'Z[<تBnI\@CP(edl óiJ؊rgf kߓ淧E+>x<-rUJ4MGO1 a5PvULYz64eh|~.3݈e9\[c?`!*"1Ψ^MK{^Ё1ʅQ0Cil#בf$J0@t CIشe0솉GRb}AB-l JΖw߱cY&^8JG[źmHfSJԺб\PoR( BP,'w?q "+H<.kk),Ӳ IDAT_#ѵ'b>4ĭT8<4FX&£Bl7SOFDqnhR;v^9ZyHȆ$/،iY,52Tz'Huj#~{k zm˪9ׂ@A, zEU}a0g/knP)%m}~ n g<KCb}R [s1\Fpk8!CEEq(rthg rKe?C:I-$եo߾뜦i J%cE:a"h[3 mmmضݜD=< EuZȭesL<#z=ݶv=XԹ<<LD,۝9]Y*.A088H{<1_7yWu ŲR,:a41-lTJӴ^ZsEb^x-*nmE.dq\ >%hy?8uǶm4юuqc46B:l 6ykYݗoNJ$1g?'}JrvJak&YbFefSsCe|0tr-i4Mq Ʒ]mwN*Yqe_>8`~ݶ t6[1E T BXN2?$Xr6[V)ud F"f8HMO ZgNqKTKE?U "qF~YDx/]yx!#Q4ѥFkgk\3+xfF-G@'?G͡*>IY>QkLS龎 ٣:Cs'ImA9av:Z_cims׬3u5xk_ǭ*#Պ4]|7~'1Gh><ԕb\EVQR [s1\x*RQQF;8Kzcٟ"K{8m&ضZ Ls!&'' L&Ú5kNO>\..Q5mN2l>`$_jHdRHJbi4sJ*$jN:"qT R+MIin{UpN 6[s`Ajg!vs38\PVODQDqOoZ; !0qds- y ^C{W-j4U'T[nDf=Q2 pOWϖ9ԉmxMx/=<ϯV7n[nm- 7o{hZ"X Jت2غQEDqx^-opf Ѿ8Q+@>u;` ed2zzc) 5K+kF?tc'TU 2ӻtvvNu)y5y)E~=9[sM4CɀqA_Iu x5쫁?U-mbyO;ftyL*SG JM#`c:<,s΂n!{ghWU#)f% BƏ #ZNw,"H,F98&8=CzUYG5I6s $}6w~4L21zӷ&[SNz9c)%L{akZ\9%Jfs$]ףX)lmɦ0 o)ar+o K6 z&elrJy]-tet.a)>CP+B|jQk*bypR uYm?ACP(e&_,+Q?˅fXVL'ԭ)!@ YπyY7"]x$m@xl_ߪNW1U/˜(3N@x[0 XH]bh:J%p΂+Q&'80x(:zB ,d˅VHQ?Fu@9ˤ݋g FQĮ k*ayTΦЈ nU;z9kpdlj㬿ⅾ}ԟR**Np[OZTTo5F[x >Cj#ehD04ůatwwL&UC;c8@Tj&`4k׮ ME Z "L&C{{;i6_ %wO.3>j{$Oz$Ҹj+Hˌ;.rC䮚+Uf'_JdG~Sěu$W_f}B%ȘIA)c2f`]AQ@Vs/ Ȋ,qJ,HEath @Tl¶mLD)w\1m 2`bcCg˙(ihNLϩJR$l s;O%*mg$tǶ^ řV!v"m@j 4YqR #۶r9HR ?N?9ACOq3 z !ztusAId2멵_ B}੯}ou' /~ nxvjA9>XrTV.3| UT?G'L7ZNk(C$_VA2_< FFFb0 ) E\mLӤqf5y$269[ﯛv}:oP!0:Nl`~w'u]Y:⬿+h$}"S|MYGk3;+HS;.%Wo%Z_ /|{ V3mmx#*%mJت8e~k٠8-G~w#~1ZfG+khswb1$5kK):dYՐ>Z60l9y|rQ5cЦH.#CGVޗo&o ׫LY"@㮚I%\a|ԙxn3!NYj)u>ԇ/8C Qq;{냮ɣN9i}/ҽj6O5.0B>hs Of?Z;3OUXVjuxϡC̈ζi#κiVF5bO|yT+!VD7-*,T*,.qEQVV1i8eS.RKSВm3簦Fϑ~m:a!brjrS$FYc]K| =_JIJN9X9 IIeKjNT!5 5id҉ݝ|#wŗ,>KP'>N\3I)|VR-j Bz"3¡P( 2!_c|K☿=P:6ũRN R Wԑ􆋪MorS=9*h(@UDupr/WszXIk}Mhϵ`EXcM@zEDց]ɏO̹qnL&8^# flh7ŚEjFgG]׹K~ zˤNծVD17N:ew+ko[S+VŲ2fLy=DnkMҽeWw{Mr\T*>L^oܔ 3(JQ:lSoL^563{R7֑Hk#R#c!~|3x"q??arrh}}l?>0e\ј,>,dL&вVa8ؽ16Q݀'~>j3"!4 qH36G,(}jJy,bRb&ea&iGEIKКn5YeFNo>:NET*ªuʍK25 6I!YPz'V+l |j0p0tr-yo\+Wj+it0D? tXp<8OA?~xQttfI7~BP(+@ToܻFRC yT(x1!6^oH9cU$B4R3")(nv|WUGW*c'2q<1ms W[˒P, {E үBԊevsʼ'd`}7V2c\WOxomm+Kj5JتXv)MZ>ϠMDFHxy 7_zs릣]593DMm#pV3u7y)!S pޒLN [ocgh{Ϫ*m(SX1\V3zxkCSxx^d>N&ѱt@1I<$mۦc580u4M֭[ (Z6'eۋa3&&:XFqN z5x %SW wo$_ $t곊jf?73(|QX Y*FDGzFbZ]T('<#<#=XN*"XP/F^X*g;ipLBݥIh@-hKYlk{nUݐ{`P "j:V=/y~뚶έjJt=)%L2Oy NLbNCf7yOXSتkLӜXP'mWDZhɤN8TK[\J>VG7Ygbnu_ خ|h w 5^ '#>xlg']v1DXC<,F-BPʘt2$ϹV JZ mQM; OcݺM!NG" z*FD#nj~Wk}K]I%]F;^V˪;|Y^~V*>R c[L:?EBϦ97D ])WS,𥄭. IDATz@SQQ8qFe Jg)97R"TVV05kx"4qծ<JJqi ,L@U*5 cH$et:[B\`9C./ﭲsB5$0\.S(ψxVujc>5g3 tҙTad'f[y ej\N2dSh:<ÔcIod.l5t:qRډ|  /φa𶫮⳿'_?o@QDQk==95h,y$ ^j7/i=P( $sbd<qf<73xe$Q ~Dbj-:Qdo)5Ԛ9( VDQ0X4mtݤ_gU&_}rhNqk~l#GyZ4r9ze;Wgo@oNP 7LiYI|@k]*t^լ СC {M J-j###3t]L&3cgpݠ z[lt.7Cp\7j&?u6j!?l??088x=S祈X6H02nPw5Vj*x2VR>BUC1#<{yWԩUu3LzbԼ)V8fS* N;4H)Є@!I:F[F'6H;%ѥ@N 0y=G\{LB jVU™s_md3eI,NKxR!hkKzNi*j9?-쩯"7޲Lr-e9l&9P7u6{zOglښrƞ&^q4󏐂VoWNM˲&^z^ BP(><2Q[*Fg3)NS=^*ZDW%0pMjC66ijh}\J\!1M Nb6zlK]4yN[֑C#&K*Q-{ۦ}N&k/J\np3V"lwdUxOr?޽ÝIR4Ke6L3`]$";F}@Զmmۆi.'-lJ RM۶͆ fX<L$F;S>{pouͮOK̈Rj!-@Q} |$IaK [5JF-pmvFB[! _Pdvҫ~it%hf!w|x~Ncm&>B`6Riy&]ZǡR3u+Ē6LĶm,0M 0bיeGɜr2n(ϟ|Slm+*C!|{(=H&7놭Fh4 ˿W-}VHejr, GG!kĵaqJ?BH 0,L0: Fxq4QCR""E]|]gү?45\i` ,(زU8䱇Z6a;Au+0Iu۵:4g q݃OG|!D7Տ~C:Ь/P$f tQL\8tǞ:(u-e($" @kfqN.sϿBW׼;]4k2?ӍT3`,.Vhn8PDiZ.d:<}c˕[+T* ^CCCMS)%===-78UnRXy:TZ$)prmC, x~7kr4VoD\i,?P,SI3^7:H415AՔuڵ%!]9mI6B )3j8+eimYJеhӔF$!8"ƢqTAK:O*6)KrZ )Wa8GttIak:m˦GpGC) "b8lY&<.ZcX޸O_Jِ@zƎI.8B`glv];V]H ?~b]FѬzO,sd{Q QyF{>DS%Cd?я7ٌe6}AY5&*Aiت%V܆l-t]1?|7Y dY⊯1.J(tŝCXa47R(!Nv514΢0 Q$Q36^! # dSdWA $ɔeaY&mK;{Y;.L\v|?\;B>C:e/ZF9EBҶE 9*!|W?HT L>WoMrP:Obj"[Fh4k@pDzv%lUZت>?5 TsU>nj= DJuڇѨT[Re٤RD\q{KK%q{ޫ "j4ڋLL ES|:AصoۚgNLp3^Hצu' Ilmei*˧=۞|䋞<~yB@{M9I)p5M]Dkxn[Tpj5B'}8F*T.KPf)uw-TGG$I<,b\7q߆]po}_sh.uMZتdiл1z42~_Q{DAxuEo1RD=~@uRJU|;vJ2咥b֭d2+ĵ'\.>RJRaO?)6oyork ء.t7r7$ RJ>u UctܤP-akd@(1RҠ3Җԗ1H3]@۞+{lܥ \3/z[=vtAOv ϓW|8 ÐZNVӕrA"ҳI: ']L-<+5?-akШ{Mm&>6uz}Ea1Qy-%%DSp+ްtsϥ,bŻ䳺3XFS8]o@;i4F64///ˇk'ыs|wI 8>W0 cJd)֦UaƲN |u넡OGSk$IL. 3$ p4F=iqT`ykqd`gm m)0FFϫ r[tPi^ תѭGfF`?ϘJ#-򇮠=*3iFV0ۃWCl$Sn~M ØQwSꆦmѽe+*.h]mMoԝcP7͚Ũjko~ 5JT7?}ā‚I'\X9{%K"Vo6Xx \̈́iӦUy 8qcY}}}LĒ4,F S+̀S>q5+nj<*:ev[:<73t{' yI <,$H``)+6TdX'Α,0DrGiC& 0>>N3H)cM711JW{ KƼx@1y!RdIES.?+<$cy; :84<1$4M쌅!J"e0O:BFobЩ1Jas,k4q;nclb x1MV2WB(VlV+KYD1~`(E4_o>S۶h/-Qzj|^mQ*-ꩂf4h+Qsu!|S{L.y;mg]d*6܎uYh4F$Iƒ?{?g>;AW [_NïUrc3N&12P^@u:FFRbsNQ6p:Qt204,84ֳ1{xqF=wV8ל*eQh+ҽ ?{.ދKHEPNG4kF)R ?|? f/Q4%ݘou{7Ԝ%1E5׋_AlϺ118w'NzNTT˴bVDJLMJ.z[(vw/r=;sqhִV`4 \ T4CX}_bgw>B.Y6 edl&b%|iE'4fOW2{X kR<۫+~V L>g˖-Z1244D^Dz,6oތmϽRM_wl I0CޗXyzo=M!sm F^ipM瓘?Y1Nb&^۩$YVe(NgTòe@{> R*;&]Z]ץ\DZ,f~D$I0M;$IDS(;[I{)6K]6c5|?m [Mak17p՝}T~cya![lK* ^RN|h4Zsl`;Amʰt5!AL&iH P`xnJewB  IDAT9KQ]8"I(5)h N1Vcx|!g>ODADDqHL2cDLR{|n/21Rڮ};ssILm5:x4kFC N )^J7ME]l6)p-d{;*[sg?Cߺ˷!%mIQFHIX={qXR.7n5e-l x5֟>]"e觷rR=$^'%@)edъB E{P'G1 6N3d09z(z}jC4M6oL6]ST0 >R(Yc.#↴OZXu8<H1Jy3sǁ|{H-ދs[t9u06Q:rgUJHK(P-ՌRO(.mB,HRƿNK}h Cͤ)H)pAk*X,bƔ RDpqZz+JY&IPoTk mbqWr9m/4K0Rpyo&E 1bع-d9c^e>˺:H" $J4FYk'sceKd{1̔.3rb:)h̚ ZbV&"h3,QT\h1#j |ߛ:̫1%hdTTF<)BkoxuMAP($6<|? NeX)l.iY:c>1&uguP$aZ[VljCO9I84:_s'zq<x)},%+l.ql)be%6.CtJQĉn @)k߿0kr5LҶmcRr9:K9 ?TIQ A񬅭654Z xӥ9r?G?.^exV(cY1LSຬI!IwHNp"MmB !H0S'!t/o` i0::0J)q|Dhpc\$1o^m/6L+́ C;SY'_}ᎇއlzۼw_hGuh兠G^Gythj0엖"lLڦ{w\;E+3So8M;zٮ3MAZ=xuah4FNt;_ƝK~R:`r3]:5/)CڞLHYSWsRQ.`b'B*F3[R JNg8pw=wRR(=Ƴ <!|C8<0c>۵<0AfVf/LW0G{Q\61 L 2-sFle;{GQ8L3~k4QcB\حzTPR~I ǥxt,[njk~0ǔdaՓKDe5iԒ+ds֘IJR)%\+e@]Ym5ݭCh4u I<~foLq#B'R_QX'rNk $ #l`A<)S:TF}%`50Mju m\, % !(q>yг=.÷3V.s$֣Si=]炒DvzRzNJ}G~~?A! NSm4Șok޴/ǭ;M'"MF*ٚ!%98K7=ׁik"GJ=lB`?yݻ)d^8?3_L !0¶mR4J)96mJ6ٽ[ n;ǰ|ͺĶ ָO]"x|VDs |W(ı Ds1+B2btD*`#L{RiN)&ٞ BX&d*b:ZLǏST J)6nH[[ۺ|zαcLj㘮.L}{cq_`ŰLjxWڧW-,z4059I^iG|,/#2YrW \,8gz{{d QG>  Tc0H@Ӵf Zg!idoF+X.pͲ/?pCiOΕXA&"e[!4Q!0>1+HY1\T!H|f1\xOTC),x;_ZY{ ;M#G*ur=ZCuNgɜR(1:7 ;$љUy $AJI:'SM)k:'.:OTF䣼tОd@yѧ"A|*y5aFo}kVZϱ7|ti!D Q:luU//>w Nfғ۲)D(+@s?4Q2- m; ́tgUW[|?7xo2Or!Rb&mc[Mt@ǖ>.ώ/)hMc[4Z]n1.5/2T4%*Ǐ3AzCP?WǐD I\bw#dӕU1v*"HrKC%d3mťd!Il X@KJI[[]]]:ֈqB !l޼yj[(줳s{?d;R>^(%_jXeD?/|q]zD뾁1q5vWH0j;Ir7s0a(*PM(xKkؾuF?꺥2^go޷Of/zS|.K[[|nI ÐFD+GYe(\y>RJ2i|nySM(W계|^|^5ˆ7N>WS)Rai g<躞Ou{JqAn| ^u!霞.%ԅh4:`Y3SYR.Ti..]{ABWQGuR[q:I#R 4UFGSm1L'I0aMutu_y[u #dO|g{уx7Tftmfg:h4Qc'?^@f&σ$i [mK1e}Wt3O2h{9{x~lbf Mv+[56t\_zr̋>JgeyK)1 ۲e.ܶ\̶K_gWf|0 MSzBGfFvZz2Xc🁷Ah&\F}'gT16F6Hpj 2P<J4EcgCr%;Xj[KK P"8YeYb:ZǏ^Oŕaϯzlj66lذu,[PaT[nlFL8F:˯ u2eNcl>q䣊s8ρM Gy" 3<)Qɑm$,I:˜Z1bs{lԕYz|~pDQ6!dҴٱ`(h4کUYC|?`l)E.ӡty4ɍ)%|tjwLU,<|T!iۢckL~4h+Qs'kuF%:!P+n-VZ,}u;GHB{#nIvh4f=I=O?7KE*׆)4R-1vp]x=YkV1O}̔%>8DxQuOz!IdųFQ%#@`&B;aPZJrE,+ܦ\>)l޸_oꫯ~68$w;3:!c)LcJHv^׶W洟RU3剥Z16!lRR㻴L>z&~v|qNHʠwg/Қ8 8uxH%Pe)T(%1L %J"j(9ٯոsaԏ&&牓8QR" c0$S?ʶկw{ֹJ!PVNguӽk[/ұoDjI ݝ>uja`w^ hI QWLygf!'U*:5l2JEJlRa i j_bƍuu?588ak'MST CJݨERc#@0Cޗm6M24Q 7I`i5OJ|8/SxCq59$ 0,TH4N+&c\ܷe d56q/?62 |>džs8㘆066+FYC8TkÄiPe,☱,ak.&N-r PV4o5)䳋~treR*dNTj?n(5ݍ}=%VЁJ$*_؏@Fh^R~_a1B#abH]#C[ HDί_3< B`sX"f*P&RsY*"VޟLa$I $ I!II" ;[DN^OjĈp cI`i.|ߥV&`5d (V'ɇL&O:=(()%6o?I^q#=K"8tҙ'خNLpó^Wbυ1,&6xv\F?͵J|S5RQ@8rӅ_m'_WPa׾mX/S+31Vũֈs{o)$.;Mu $B*a5EJJ!JbHB 4-,BhʄS$+JkIDDaLDQD$qDDA@K C^fu/wN>WNH8-p`JJ Z#B!rt\o]wK_|Qy᧏Tgx]`eaBƍ=\Lɯ94tk5d p=p!֥ %h4]s|]uqkUqQ^_qDI4OC} k({~o B@>\s;>red2:Zh48q4۶ٲe˺j5 ÐB@ww7"yw{`sm*|ca< ۉܶlG-3cx( QIV ACQ'M;T N2UJab3d md=7|۶,JE|{Zg=Ntpo_Ϣќ˄aD)RM Ԣs8flJSV!L|n1DtZBO gH)fR* e[q{,a^Ԗ,/ݻ,͒'DVNHh4Kh}aGSxCD4nɘ9:־򩶗83 _JaveQ ![BW![WZʗu1gL _8(I`TY6Vv+[BJUL'M!k_C8P%hTn%܇M&o?2DQH2F@T*C*ZkA|=+-x5B)Ŗm>{j'˳ SHcXgg>;a*߃a}Dxm{q.Yq' Q_|An?zRZDP mYdž'.{ypgVy :V&Cw\ɜc%1m`1] +h[5]]~#Rh%wM QGMg$I$n3SIS+Ozޢ2._|ƑFώ*d뀚#Ò]}>ʅvwH☇n͜xYB4RB 2-|G'me `wZKa#7[%ja`+_q =8O?E1zkS }sE$QDE' bIӎ({ڼY̘Rmo=y}6O:q1* F)ꢫk2aH>gQqsfx$Ɉwgk [݊ڹ{w`Ns) / H:h^&{y>b,H,D&;?!R*ab)RB ")Sa{US)]QyG?NjGW횆RIBF3g'2M]|ߧ\yfH"@II6&^\l:5(rt,.ΝDJI.&I-OJ)ɤ9ŹQ3>Q%T|>vt/߱umtnZq-m>ź04Fϳ82 zr Kf$gy!;:.%'wsmwF|]*a ee  2O)A\g>CůsXq@}8Ð8"wNI<cI!B L ;[8"!nPU1"h[0am:@b])aX;;<0o48` vz>h4X8ʉD.)RJ&sm`d/nxu8,۷/)f&aȱcǨ'Eƍ)Wca:IV1\͛7/*n758+6Ș!og W>{ 〔 0;i9q9!>8r#W~,d"NsAq(I9YHعB S5@cHIo죣pj&i$i 18&c0}Ϗ`= }ָ]wP-'BǞ׉9DX(ZqD2ؚs1MೇH)`rey"+;M/EO~D$X\'hV?8ZmEDQeD ^dWqw0呕}19uǎqQit ">m 2s\EjYӋ/h|]_WЬrj[Riv~+{_y''72n*ڵ|#&N[Bl}jɷxؙUnskOqXxyO[ÁX)V|EexH{Stv=WSTO+&knnH!(Jڵkcs!BA.c׮]ض}שjɟul-bU۳!S2u{V&n{yj)nCD1էƣi&aqNDeMvQ賀f xR\! Ǐ3I;Z\L&N~7X\X Nvϳ|՝\/S[.=,qeȍ\8نIS sc -}tk7r1a0au= hju3:"QepRQ5]{!N~D^>]gdt p(Wk}NPDv>os#cx'x6n7sŒObrY~1̙ĕr0ΉM{6ջW%d_8Bs(KYطRDzN][pL_{Wme ˶m [ZHK"B9jd/\Q>0ezp Ud=5_1V'@kҽx3 ZR^1CE% Y/Wn\5v;d+^v{lT  feM,S!QR$&FR"JzKA> 7r~;L!{?>1g>m|8[_^ir+N{WiIu]rseQҖreƚ2JXKe ]][4s1rʥ{OSl={*ivv[RutфaA@8/[૵nswo~ﹷ~-Hx OyǯM?9dq׭::q^ڊ{sʲ̉ɨ\3C`,"]@H,,ps\/+|X&lbz.|~ ԕbמ?=tq_ !e3w0!n@sJԽ!RҔ{RmH*wLOw\dnD$ ʷRZRJjs:#3k@IFo}oa{ە75~?3gm }D** p<]z6l$;1QݜCW`/Rݻvtx^|ɲl BH2/[(J|5cN<(jl춚:~n;\_{롄"N "nR<4h/<{_EY L>?4VetNk7i#f! {a19];XXԡSDzBνXΥg#;=ًZ@BbY6e\ؠP!/|l%Da6($( J%k!l1:ƔonvJk 8aHF:DfIi| l(e:,@JĖv]⌇32J2]dG6X,P)Q)Q,jycENy*m9[_>i"7?S >G>^UNӉc&56YK1:xjm][v e-^Gx8ŋ`ǎwmm8ittrLpf@JE]A''6:VFQ<>9~cXh6[U'~0Wo%E;^ 9Nc|4t_/ie "/KT,cE$FXK)%v n/$Rp*2ZV,>mYq>>26ƛV~G'u`>ć?gB>.a I )ʥ\ J4ڝ±mJjvfq1ByXf[u2C.{̀VDZu]VF,՚ !2b~87Vo*71K)߷_B|)M%x#ޑ;H*UTO~xj{mꂲ7=-Swo9r ıcH){1&ʌ㻣hibݗbE-p ͣu>(v(S27UiEIΜzؚVoTETGH qq3Է\k#1gϲ4[%25uRH2#%ttSN 9IFe YBטc%>~)1 8i#ZnҞ9sfq>{gzH' p+q cw~{F$_ZJb),Ȳ]eK#qu\B@y(+6- |xh2O#m<4[_6ix3C뀔Ҹ j͏O~QgNuzw FCPkB8RbsZjK4.Q(ƔQt`+ؿ \cvt:v{p00=Rض}E>cL'6Fc _ѠV7g#?kIKGѾn Q\Z1Aqr, M=7|㿤$]-ν,q8ǙH]DFaOIjl)Jz}>mj{0!=|Ǜ(lQڻ~ԚRb1}0:qn n7 %'SJ9 ÈRXk,f3k¥+br)f3s޺X`kTM;=AH}:mraMa êuhvZr貤{n˝{\::5ʾ[oH+ݥJHbg}K#UTRmNřQ"^k]}o;o\4?;wC/br2Nr3~,ìa3[[#LBa]^it:Uge}nvN3A$yZCXC0zi4LLN~sRُ#f(Ho.e*v Zl6K6ŶMG4Mfff`ߌ1|_ett-XpZevbZG3g0YԮk}}^ib^҇Χ9DT`,t2X=:Ʀk,|nye\x{8LF-(B BlLdX-`u~y=9c qw–ynGb /]{+x)bϻ8:ⲁm1R.xuQͺJI~E㙳\SA$Z*:HE1K*UA&P^j`]7ڸ}kرU، : fw-*#dzFJ@L) cL˲ûI,!`rz?]yMZٯ!ōO)#N@PL CF쎦jM3_g.oށt𧘛ŔG ΜNRJ|doۊ?Y7E˙$P(J(ˤ̞ٓ<.ؚt`aQ@֣T۬K4Z]q?B4gW$P ye1N+ cLBP\A QS._tX |b(cc!W IDAT\(< O֒QB3M woJilf_0i/WPf(h1G$%%U̕TTdra«&{+BK&WJVz/280#abA}~a{x_|9NYY>ĝN"(X7etU⻞OiZ*, 0:&DX*HG(r!aVJgɖGq<v̺j4_z~|ck XjRbYJ& Xbbb{T*#DQL'iJ"q3G&%W(Q,R(`;/_/Yh/]5qV-_w i M\SV-A{m72ZsrhZ;X.&T* σiAI='/j<8.rrFsu &%.PJ噞E&mE:MP`bj=aǮ*9~gw~ЊƯCsqRcJ9^Wȯ\T\tTd>Qƥ]&B\Y7 k}nC}v3q9u̩ Zur]fviq#C(& T_{ƛٱc.ϙ~]R, Fbtw>&,`B#]ythAmYU\vIZSk]?Xӵ=Գu.zE !X À|#kfV;pZzÎRCNJJvG.lò^u3^>݄XyTRJ*Us驓OS.wf|21=qs[Oq>i: ֥ԻRr "arH2]B 잫['N!NG bb==4F[YbtA+ a ; H%jE{K䐮㭻6QV_w,G䠛KP^PVghMclv5hhگrl,u3 s]jd}Կ7\wi{ #X3O2>ZL v '_OߕGU- )pfsǘɩs׺yD:>{S.! `9UW xW LϐK$k!M}yaG-q/I )1%"qG,L&,&uPVq#J.k;,X>q111M>_%IJ-x7~/r_{ Z{p9f?D%{#/T5q2*q<*s:.14t!s6P_0R.t}!"z),,rRi;tu43r\\^n Quvȹ6/.{`nJ)8p.Wb+DY TƧرwmGKxce[-(svCա ƲYl.­eAX: {'^fuJj qs@ضEe}ÀBvCnhK&n0[=סTʯz\աJN()WR:>zͅksoDz]\ #% TRJ9j5>sd9bjY6bYk8"B8$kF\i20k_\7Zr"z.4i )eϗq.EF(3̒g=(v)GO}%N z~߲{޴A 3";d/=-'_KXH{ՅC9ɯ~Lh1W%)֥ČOb un97툙3FW#jUDo; .ySN?TWDX#ؓUPaD7!6ILN?"Y44D`04m %=w&6 wmT'{SVE^G I6%^Qplѣj^zGr睯R֬eHia!B(蹮/ːk\rmg,\>1&_k>ۿG!@ks~Q=8赜%Im;x^~]VCJ יּ""/1z}0E 0$լM0Zv˲ط??czgZ /2^~{ 3jbZ/~R{q>st?lgN'}mwzɤ/>O5)Dd :Q]D4XJn6~(.=Zc/ ֻQ/"1slL.)k&ZMBYLp^JKiM2b8o<5br0=bqkRJ܌D7ߨߴES$n_O[Q-ե׾f<(F`2-)h9њP6\W̒mtllY]n'r2Wƚfщ4aG-Qճ=[72]vp=[^( ^T499HZ7 5fvM.#o rgQr!nv{eY|aBh3^ 8F$q4> x*BZv@H6Qa u.p={0Rr)YY„`mG gN1x"㻯4_&i<8/u z?0 `Ѱx[[6w&ʲ9JLKe|zׁRx/.lM6KVN'ֺ*VW!z%RHW[aQ]jY4mt%C9gjwi:hcdRI|QuP-r)[Zk&aUkbAEV67-ޛwqǾk\oNŵbBrN灩RJjb!/=^VQ[F!F")[Μױ2  ;<`\\ӭ}:T77,N 3p\]kCOqԃKa}7W5(e_1#c ZDQ8~j 4mv&P+"+lOد\m9J+iJ깝N˲~iR]2Qf/h;Kw.^(ZpȐGJKkpj 5c(1+GQNpT:Ze !efu3n6yαv鶚tm 86rZ(d`&24穞>r*;G6~1{n[!V|I)a- ޤ4)ged,qw2}7tɑűUA6Y̸fRS"W N\<,/s2IUh4# ~6! NFl\6Cݥ vah˸+7cY5 z[sF˅.hFQR9b}?hkm[X[W`TpAZp-E2#(FP5-TRJykHnl1{jN3Z| s!s[A%7w~lO>~;zf>u9o.Ȕl,W"X d_ ito3|_Zv<(Pƶ]x^2;5q\|X Z)t,@e7W3~7|mX>ܼ  jx^n׼fetZȚ|pƕRyyŠϮѨoglb"|aEG0/~:ߵ,me鎽iH5PQ{1FEm;rEf <1@Jm &D؉vs(FJiTɳg҉%/uiC@`)B8 aq3p8 c@Lj(Fہ(DkasaBb`'{2"X6'9֋AtU#,¶]\7fQJ3Vf޽*;^Xն,Kv]?URu4[m49FH}'[k5m,)OaFd Pb݀fpFIvd3+nT :=D}Vk ^sKL~}CP`zz>jZkKrY5]N-qVju3gy nW‰'roᮻ^u]~L:prjH}+'K'И]@9]mYMgAMpFMB0)ߣ HҒ IT eXnf8V8aC/l4i7ıƲwrDRRԗFHA: rVNgN`02+R~qs"QD!N|[I)sۭ7y[cb9 T&s=ch/|0Ӝ94WHK) ,-j7ڄaD܋ٔ؎El(5yTWRP.d2eYkgZkE1K&Q86bN7Xl q܃V@z@-8F، 罷Rc:HkVg3hW؄a4[xǿuR!;iXev6H*UT0_;EY 3'+!Ƨ/lBr oq< /_5|T-eK^9E+jc*:6C 枫.m^< &Ω rh\;C)]7և_W`ad_cm%Q]"f箽@mYЧ\ꭳ5S!$Q(Ee[ng~12:v׸XM9 IDAT&S{rkD-nbDq}W汗8mf 14;ĺ b~Q[ŒbF+ށz-I~zI 7s {- wqK?TNC^\lS"A8¸.B1z>|XzQqlBdqL$;܈ej4Y{auPL VEQ'O_ǿJ8!q`ttlo |ϽޗT[E)zk~KKd0sy7'evr:TBRvȅ;Y%G45mKCؑu)]!'[]Z&_(b’cT"hץ\)$ YIkg1v底Gk.08\.,b@._ɵ`;3ORkF,nmo{Fǜ\X)QgS5"60QfD楏mrE3N[;8%&8X%m?N8ƜyAHJһn7#+댻8T爢)p+#>DF*D#cPEX"7R :'1&(]&'Nc [>2p1`i3+ǎm:xm7qݯ2ZR`~?^&21ͮn _>c?П|%pɎmQ.?fĽ>JPeY옞$:g v͉k1n7`4+xKJI.!K6~@*!.gz6eJg;zCik]f-mEBJvy{oDQ}#0.⏼(3-TRJiuӧb{vDŽAYbD)I6cbz!+]}oݶvi~=%\Q6e]P[\a8o!OÜ#Ͱl06ZJbTUrb_72*̪ʪ\sN2oܸ[y̼ZaHYŅQCQMEkI]3 <s}n >B*Iv ŤZHtk_s xd2.Ǽj]XJEK]7dV]wʯ:˕Ԏ!&Ϋ_TэYmHj1mX֑ۢSy;[|r3u]'غej"A+O83+Q*"ʥl L!ó!172@SU<uPKGf#<]gv8:ud&@U5T4`P] hvB`0MMLM +xRGC V  4tHg ĨT:^]>+ M4X,N6E6E"D TUTT[lQ) =H5mn4"bt8UVǿU^':jn 9^kɀdbrD[b\KAuZt1Ue n3VKI)h1cI6A;|D \%,2ߒlxĒP-'%|t Y={7?Hb^yY!Mزee Fjix5s3gFq\Sxnn{JYqww>8<1 DdH>f;ǖ*i `c(?Tǚm˚a\ᤲyǠH<GrkhXPfD3B]Y&ըsK1zMH!] j UK(CvDb1 }uelƲ,lFA&4מJ8bo8j Iq}ٵ{;D|9BQud:KF߄}EЯ'Hm( \q?.WQxCi{>~* LD?4Mc˶]]effR&}*!vEvikEkfp* ddb-P5h Bb1eHaSxL{)T*uZv)B: q Rk|#<<0uvqt"_vc#B"\W|׸sgUٲM:'5[oz#]* [t͒q-ۖH8AX&J^V!WJpSu7/.PSXUbQђ ӘՉH) 2br5Gp[+b R+dQV`|YIUu.4MZDzwɯoDaOҝRRԛScX}XwF!]vsNAz_qa(jzd*@L#jUd:#?RR>37V\r}sh Gc"\GM>8;G+R0I&d92.G׍t<`[=hE_Dlݸs?o|jSmjX"ؙN/-lPWZ [д,2NHjRkfSɤW.@JV<$$"Y)y,k*5|S RnypG@WJ{0rnl5whԩVdԦ{'}ߧZph;sK!FGG9p@GqS>TUW?H@tqҽi8핵U8?ȴ*ؾ| CŢka4 Y/C;@Z!4MeǞ}Sh"#0MR2um50LKl6i| ͮ5Jc_*!CM A=w d-%EU18B/#o"ӷ/}s7oie]59Guq.Qo] (u\+0l (W*LLL{v\J,![vWԎs\vܳDTD\rRӾFA"n Zkla/tߋ?Z4U%IbC~pJA %Trqܳϧ [Y[Sqnڿ-"د`QbXJ!B9:e&5<$1r,&M{Ӭq-^xYl۾eh94b 瘜CB%a@殱 o6 B& Iz tnW},X</D%#ufSk? $ΒdrRba+@x}Lp|غq1]goY}ʗy3>5 )9VkƶT|aW7- 'jX!Hj!5 {%"*UjM vNd Օ"4MIhRJA ;#WɬVf5I+^ SgN1v8(\;JQtK:-g˚͜:l= J۶M:&JL@j1}ٕ624컉Gb]4M'3'y_ǿjbBINlfu$&xDpCOwaVũg$}՛؎k9hJ*G4*I3梵uP]VQR8ĥhR﨨^u\ݻzEBU$zkaq"I}фX=/>5F"Dhu>Sn.^83yqhF*$ϡ^&yRq,I0|_7]ۓhۯQk073֝[uon2t֬.Cz%m<n610m/%91s*׭\q,nz.I?ؕOD!HNWm{c|4>wz.dDV^G][^Za# ք䮬CZqc-^ui@2̐9vkEQ twM*4cQ迁ð |Gl43#_."nLL)+#@$AVMƿwL&[6HHt/>Iq7`Dk*B542"(4i,+j *ugO~/Br a022oޒFRD__&/Kt-I)%fюKumͩIFU2]twپm^Tt6j*~@Kjsv|K:1r|PUl۾ `iTu~@¶]<ՇD"vY\ l~TU]9}ffFl.p]R]א*! A\kL}bi˲[kCRR,:>䲩%md;ϳuRǶ C'7;`'*޾}oY5[Ȳ󎛢 q8[qwD!B;NZ˺Yo235k o4WZ \! L.M&UEc[~/ĴO?CO_ul7нd㗷&g&'|ұ .}ߦrԹgL h쏑W#.F։Z뛼>ky.!ߎZϚ¿r[cd2u; ZNsB(ftG*-F};+Z7(򵿡;CD^R5i >OQ}oiN"c Nb"{zs$k7iҪi\2G4#6p]8y>{$Rr&3TΥOXH㬝\/%DJ J$j!UDA"T9&&䗊IVOGOO5xz.H1Tkњu9 S(LuFWׁOأLp=[7( p"#_{^̧htJ'51Ua{:s HPTU eN`PJB稑&n\yrF]zKJHK;ȿrWeyzzz\9Pu|W~S.1>>"333KFg_ԩSK/8*S<0㈮nB"M~]YtkwN~kUۣdW9.(& OLBB96]Ljʼn2SUnPee4Ued.ln?uTl-Kȷ1yC[Hf/,yfꖺ]0^gg)zp]=w.{oߣBJlE^^-j԰E$}zB 3Fg{n%ZS.8iˮi4wpAu6@<gxxsII33;ʨ7APo$qV1tf&ˤUuZHH!K_y>Jk^FfE!Ng\Tho|-Px!ܵҺB lݻ#k1VZ7Rh"D!u?G=`y 3TUR4=ݡ QkP.Vp*󊪐H=oKrܿ1 ~c_^_=-φZg&te]Am^s&pWn7)f. \Iķލ9RI @!P=Gt?J_sp]gEa5LZ nuȽbb@cd2{ !Mp}/>-obLP4,'fh'*~V$O|f̡4tiV ]1Siߧ:=gۗBbk,b+D4蚆 ~7{NۄX 8|)~bjBtH,J%V+9d:}ػ"xRF4 % St])xcྂNYz~{ WmHH4-1*}} hvlY8 %}Ċfm녈غ1]'T ®x3 xvW'%9Cck28rUV 8\i"UU; R,?`r}TAU8%Wnj"D@ }G"QY]˯}C[$e7K"u6^>rV L6M6k~pO7F?YV^ss{ deV>Z61FߖT;>7dbwakSB@h* 0.zUh6kZu`! |bd2yE[FWthh|OH+-]]}dw0M ZT4~cSu_YFH $$nC4zeJ11V@lU0(B!'ͽ ̨6N 9Z+